v8: upgrade to v3.20.2
authorBen Noordhuis <info@bnoordhuis.nl>
Tue, 2 Jul 2013 15:11:31 +0000 (17:11 +0200)
committerBen Noordhuis <info@bnoordhuis.nl>
Sat, 6 Jul 2013 14:53:06 +0000 (16:53 +0200)
1184 files changed:
deps/v8/.gitignore
deps/v8/ChangeLog
deps/v8/DEPS
deps/v8/Makefile
deps/v8/OWNERS
deps/v8/build/android.gypi
deps/v8/build/common.gypi
deps/v8/build/shim_headers.gypi [new file with mode: 0644]
deps/v8/build/standalone.gypi
deps/v8/include/v8-profiler.h
deps/v8/include/v8.h
deps/v8/preparser/preparser.gyp
deps/v8/samples/samples.gyp
deps/v8/src/api.cc
deps/v8/src/api.h
deps/v8/src/arguments.cc
deps/v8/src/arm/assembler-arm-inl.h
deps/v8/src/arm/assembler-arm.cc
deps/v8/src/arm/builtins-arm.cc
deps/v8/src/arm/code-stubs-arm.cc [changed mode: 0644->0755]
deps/v8/src/arm/code-stubs-arm.h
deps/v8/src/arm/codegen-arm.cc
deps/v8/src/arm/constants-arm.cc
deps/v8/src/arm/cpu-arm.cc
deps/v8/src/arm/debug-arm.cc
deps/v8/src/arm/disasm-arm.cc
deps/v8/src/arm/frames-arm.cc
deps/v8/src/arm/full-codegen-arm.cc
deps/v8/src/arm/ic-arm.cc
deps/v8/src/arm/lithium-arm.cc
deps/v8/src/arm/lithium-arm.h
deps/v8/src/arm/lithium-codegen-arm.cc
deps/v8/src/arm/lithium-codegen-arm.h
deps/v8/src/arm/macro-assembler-arm.cc
deps/v8/src/arm/macro-assembler-arm.h
deps/v8/src/arm/regexp-macro-assembler-arm.cc
deps/v8/src/arm/simulator-arm.cc
deps/v8/src/arm/stub-cache-arm.cc
deps/v8/src/arraybuffer.js
deps/v8/src/assembler.cc
deps/v8/src/assembler.h
deps/v8/src/assert-scope.h
deps/v8/src/ast.cc
deps/v8/src/ast.h
deps/v8/src/atomicops.h
deps/v8/src/atomicops_internals_tsan.h
deps/v8/src/bootstrapper.cc
deps/v8/src/builtins.cc
deps/v8/src/builtins.h
deps/v8/src/code-stubs-hydrogen.cc
deps/v8/src/code-stubs.cc
deps/v8/src/code-stubs.h
deps/v8/src/codegen.cc
deps/v8/src/collection.js
deps/v8/src/compiler.cc
deps/v8/src/compiler.h
deps/v8/src/contexts.h
deps/v8/src/cpu-profiler-inl.h
deps/v8/src/cpu-profiler.cc
deps/v8/src/cpu-profiler.h
deps/v8/src/d8-debug.cc
deps/v8/src/d8-readline.cc
deps/v8/src/d8.cc
deps/v8/src/d8.gyp
deps/v8/src/d8.js
deps/v8/src/data-flow.h
deps/v8/src/debug-debugger.js
deps/v8/src/debug.cc
deps/v8/src/debug.h
deps/v8/src/deoptimizer.cc
deps/v8/src/deoptimizer.h
deps/v8/src/execution.h
deps/v8/src/extensions/i18n/break-iterator.cc [new file with mode: 0644]
deps/v8/src/extensions/i18n/break-iterator.h [new file with mode: 0644]
deps/v8/src/extensions/i18n/break-iterator.js [new file with mode: 0644]
deps/v8/src/extensions/i18n/collator.cc [new file with mode: 0644]
deps/v8/src/extensions/i18n/collator.h [new file with mode: 0644]
deps/v8/src/extensions/i18n/collator.js [new file with mode: 0644]
deps/v8/src/extensions/i18n/date-format.cc [new file with mode: 0644]
deps/v8/src/extensions/i18n/date-format.h [new file with mode: 0644]
deps/v8/src/extensions/i18n/date-format.js [new file with mode: 0644]
deps/v8/src/extensions/i18n/footer.js [new file with mode: 0644]
deps/v8/src/extensions/i18n/globals.js [new file with mode: 0644]
deps/v8/src/extensions/i18n/header.js [new file with mode: 0644]
deps/v8/src/extensions/i18n/i18n-extension.cc [new file with mode: 0644]
deps/v8/src/extensions/i18n/i18n-extension.h [new file with mode: 0644]
deps/v8/src/extensions/i18n/i18n-utils.cc [new file with mode: 0644]
deps/v8/src/extensions/i18n/i18n-utils.h [new file with mode: 0644]
deps/v8/src/extensions/i18n/i18n-utils.js [new file with mode: 0644]
deps/v8/src/extensions/i18n/locale.cc [new file with mode: 0644]
deps/v8/src/extensions/i18n/locale.h [new file with mode: 0644]
deps/v8/src/extensions/i18n/locale.js [new file with mode: 0644]
deps/v8/src/extensions/i18n/number-format.cc [new file with mode: 0644]
deps/v8/src/extensions/i18n/number-format.h [new file with mode: 0644]
deps/v8/src/extensions/i18n/number-format.js [new file with mode: 0644]
deps/v8/src/extensions/i18n/overrides.js [new file with mode: 0644]
deps/v8/src/extensions/statistics-extension.cc
deps/v8/src/factory.cc
deps/v8/src/factory.h
deps/v8/src/flag-definitions.h
deps/v8/src/flags.cc
deps/v8/src/frames-inl.h
deps/v8/src/frames.cc
deps/v8/src/frames.h
deps/v8/src/full-codegen.cc
deps/v8/src/full-codegen.h
deps/v8/src/gdb-jit.cc
deps/v8/src/gdb-jit.h
deps/v8/src/generator.js
deps/v8/src/global-handles.h
deps/v8/src/globals.h
deps/v8/src/handles.cc
deps/v8/src/handles.h
deps/v8/src/heap-inl.h
deps/v8/src/heap-profiler.cc
deps/v8/src/heap-profiler.h
deps/v8/src/heap-snapshot-generator.cc
deps/v8/src/heap-snapshot-generator.h
deps/v8/src/heap.cc
deps/v8/src/heap.h
deps/v8/src/hydrogen-environment-liveness.cc
deps/v8/src/hydrogen-environment-liveness.h
deps/v8/src/hydrogen-escape-analysis.cc [new file with mode: 0644]
deps/v8/src/hydrogen-escape-analysis.h [new file with mode: 0644]
deps/v8/src/hydrogen-gvn.cc
deps/v8/src/hydrogen-gvn.h
deps/v8/src/hydrogen-infer-representation.cc [new file with mode: 0644]
deps/v8/src/hydrogen-infer-representation.h [new file with mode: 0644]
deps/v8/src/hydrogen-instructions.cc
deps/v8/src/hydrogen-instructions.h
deps/v8/src/hydrogen-osr.cc [new file with mode: 0644]
deps/v8/src/hydrogen-osr.h [new file with mode: 0644]
deps/v8/src/hydrogen-range-analysis.cc [new file with mode: 0644]
deps/v8/src/hydrogen-range-analysis.h [new file with mode: 0644]
deps/v8/src/hydrogen-uint32-analysis.cc [new file with mode: 0644]
deps/v8/src/hydrogen-uint32-analysis.h [new file with mode: 0644]
deps/v8/src/hydrogen.cc
deps/v8/src/hydrogen.h
deps/v8/src/ia32/assembler-ia32-inl.h
deps/v8/src/ia32/assembler-ia32.cc
deps/v8/src/ia32/assembler-ia32.h
deps/v8/src/ia32/builtins-ia32.cc
deps/v8/src/ia32/code-stubs-ia32.cc
deps/v8/src/ia32/codegen-ia32.cc
deps/v8/src/ia32/cpu-ia32.cc
deps/v8/src/ia32/debug-ia32.cc
deps/v8/src/ia32/deoptimizer-ia32.cc
deps/v8/src/ia32/disasm-ia32.cc
deps/v8/src/ia32/frames-ia32.cc
deps/v8/src/ia32/full-codegen-ia32.cc
deps/v8/src/ia32/ic-ia32.cc
deps/v8/src/ia32/lithium-codegen-ia32.cc
deps/v8/src/ia32/lithium-codegen-ia32.h
deps/v8/src/ia32/lithium-gap-resolver-ia32.cc
deps/v8/src/ia32/lithium-ia32.cc
deps/v8/src/ia32/lithium-ia32.h
deps/v8/src/ia32/macro-assembler-ia32.cc
deps/v8/src/ia32/macro-assembler-ia32.h
deps/v8/src/ia32/regexp-macro-assembler-ia32.cc
deps/v8/src/ia32/stub-cache-ia32.cc
deps/v8/src/ic.cc
deps/v8/src/ic.h
deps/v8/src/incremental-marking.cc
deps/v8/src/isolate.cc
deps/v8/src/isolate.h
deps/v8/src/json-parser.h
deps/v8/src/jsregexp.cc
deps/v8/src/jsregexp.h
deps/v8/src/lithium-allocator-inl.h
deps/v8/src/lithium-allocator.cc
deps/v8/src/lithium-allocator.h
deps/v8/src/lithium.cc
deps/v8/src/lithium.h
deps/v8/src/liveedit.cc
deps/v8/src/liveedit.h
deps/v8/src/log-inl.h
deps/v8/src/log-utils.cc
deps/v8/src/log-utils.h
deps/v8/src/log.cc
deps/v8/src/log.h
deps/v8/src/macros.py
deps/v8/src/mark-compact.cc
deps/v8/src/mark-compact.h
deps/v8/src/marking-thread.cc
deps/v8/src/messages.js
deps/v8/src/mips/OWNERS
deps/v8/src/mips/assembler-mips-inl.h
deps/v8/src/mips/assembler-mips.cc
deps/v8/src/mips/builtins-mips.cc [changed mode: 0644->0755]
deps/v8/src/mips/code-stubs-mips.cc
deps/v8/src/mips/code-stubs-mips.h
deps/v8/src/mips/codegen-mips.cc
deps/v8/src/mips/constants-mips.cc
deps/v8/src/mips/cpu-mips.cc
deps/v8/src/mips/debug-mips.cc
deps/v8/src/mips/disasm-mips.cc
deps/v8/src/mips/frames-mips.cc
deps/v8/src/mips/full-codegen-mips.cc
deps/v8/src/mips/ic-mips.cc
deps/v8/src/mips/lithium-codegen-mips.cc
deps/v8/src/mips/lithium-codegen-mips.h
deps/v8/src/mips/lithium-mips.cc
deps/v8/src/mips/lithium-mips.h
deps/v8/src/mips/macro-assembler-mips.cc
deps/v8/src/mips/macro-assembler-mips.h
deps/v8/src/mips/regexp-macro-assembler-mips.cc
deps/v8/src/mips/simulator-mips.cc
deps/v8/src/mips/simulator-mips.h
deps/v8/src/mips/stub-cache-mips.cc
deps/v8/src/mirror-debugger.js
deps/v8/src/mksnapshot.cc
deps/v8/src/natives.h
deps/v8/src/objects-debug.cc
deps/v8/src/objects-inl.h
deps/v8/src/objects-printer.cc
deps/v8/src/objects-visiting-inl.h
deps/v8/src/objects-visiting.cc
deps/v8/src/objects-visiting.h
deps/v8/src/objects.cc
deps/v8/src/objects.h
deps/v8/src/optimizing-compiler-thread.cc
deps/v8/src/optimizing-compiler-thread.h
deps/v8/src/parser.cc
deps/v8/src/parser.h
deps/v8/src/platform-cygwin.cc
deps/v8/src/platform-freebsd.cc
deps/v8/src/platform-linux.cc
deps/v8/src/platform-macos.cc
deps/v8/src/platform-openbsd.cc
deps/v8/src/platform-posix.cc
deps/v8/src/platform-solaris.cc
deps/v8/src/platform-tls-mac.h
deps/v8/src/platform-win32.cc
deps/v8/src/platform.h
deps/v8/src/preparser.cc
deps/v8/src/preparser.h
deps/v8/src/prettyprinter.cc
deps/v8/src/profile-generator-inl.h
deps/v8/src/profile-generator.cc
deps/v8/src/profile-generator.h
deps/v8/src/property-details.h
deps/v8/src/property.h
deps/v8/src/runtime-profiler.cc
deps/v8/src/runtime-profiler.h
deps/v8/src/runtime.cc
deps/v8/src/runtime.h
deps/v8/src/runtime.js
deps/v8/src/sampler.cc
deps/v8/src/sampler.h
deps/v8/src/serialize.cc
deps/v8/src/serialize.h
deps/v8/src/snapshot-common.cc
deps/v8/src/snapshot-empty.cc
deps/v8/src/snapshot.h
deps/v8/src/spaces.cc
deps/v8/src/spaces.h
deps/v8/src/store-buffer.cc
deps/v8/src/store-buffer.h
deps/v8/src/string-stream.cc
deps/v8/src/string.js
deps/v8/src/strtod.cc
deps/v8/src/stub-cache.cc
deps/v8/src/stub-cache.h
deps/v8/src/sweeper-thread.cc
deps/v8/src/third_party/vtune/v8vtune.gyp
deps/v8/src/third_party/vtune/vtune-jit.cc
deps/v8/src/type-info.cc
deps/v8/src/type-info.h
deps/v8/src/typedarray.js
deps/v8/src/types.cc
deps/v8/src/types.h
deps/v8/src/typing.cc
deps/v8/src/typing.h
deps/v8/src/unbound-queue-inl.h
deps/v8/src/unbound-queue.h
deps/v8/src/v8-counters.h
deps/v8/src/v8.cc
deps/v8/src/v8.h
deps/v8/src/v8globals.h
deps/v8/src/v8natives.js
deps/v8/src/v8utils.h
deps/v8/src/version.cc
deps/v8/src/x64/assembler-x64-inl.h
deps/v8/src/x64/assembler-x64.cc
deps/v8/src/x64/builtins-x64.cc
deps/v8/src/x64/code-stubs-x64.cc
deps/v8/src/x64/codegen-x64.cc
deps/v8/src/x64/cpu-x64.cc
deps/v8/src/x64/debug-x64.cc
deps/v8/src/x64/deoptimizer-x64.cc
deps/v8/src/x64/disasm-x64.cc
deps/v8/src/x64/frames-x64.cc
deps/v8/src/x64/full-codegen-x64.cc
deps/v8/src/x64/ic-x64.cc
deps/v8/src/x64/lithium-codegen-x64.cc
deps/v8/src/x64/lithium-codegen-x64.h
deps/v8/src/x64/lithium-gap-resolver-x64.cc
deps/v8/src/x64/lithium-x64.cc
deps/v8/src/x64/lithium-x64.h
deps/v8/src/x64/macro-assembler-x64.cc
deps/v8/src/x64/macro-assembler-x64.h
deps/v8/src/x64/regexp-macro-assembler-x64.cc
deps/v8/src/x64/stub-cache-x64.cc
deps/v8/src/zone-inl.h
deps/v8/src/zone.cc
deps/v8/src/zone.h
deps/v8/test/cctest/cctest.gyp
deps/v8/test/cctest/cctest.h
deps/v8/test/cctest/cctest.status
deps/v8/test/cctest/test-accessors.cc
deps/v8/test/cctest/test-api.cc [changed mode: 0755->0644]
deps/v8/test/cctest/test-assembler-mips.cc
deps/v8/test/cctest/test-ast.cc
deps/v8/test/cctest/test-compare-nil-ic-stub.cc
deps/v8/test/cctest/test-compiler.cc
deps/v8/test/cctest/test-cpu-profiler.cc
deps/v8/test/cctest/test-dataflow.cc
deps/v8/test/cctest/test-debug.cc
deps/v8/test/cctest/test-declarative-accessors.cc
deps/v8/test/cctest/test-decls.cc
deps/v8/test/cctest/test-dictionary.cc
deps/v8/test/cctest/test-global-object.cc
deps/v8/test/cctest/test-hashing.cc
deps/v8/test/cctest/test-heap-profiler.cc
deps/v8/test/cctest/test-heap.cc
deps/v8/test/cctest/test-liveedit.cc
deps/v8/test/cctest/test-lockers.cc
deps/v8/test/cctest/test-log-stack-tracer.cc
deps/v8/test/cctest/test-log.cc
deps/v8/test/cctest/test-macro-assembler-x64.cc
deps/v8/test/cctest/test-mark-compact.cc
deps/v8/test/cctest/test-object-observe.cc
deps/v8/test/cctest/test-parsing.cc
deps/v8/test/cctest/test-profile-generator.cc
deps/v8/test/cctest/test-regexp.cc
deps/v8/test/cctest/test-serialize.cc
deps/v8/test/cctest/test-strings.cc
deps/v8/test/cctest/test-thread-termination.cc
deps/v8/test/cctest/test-types.cc
deps/v8/test/cctest/test-weaktypedarrays.cc
deps/v8/test/message/testcfg.py
deps/v8/test/mjsunit/allocation-site-info.js
deps/v8/test/mjsunit/array-constructor-feedback.js [new file with mode: 0644]
deps/v8/test/mjsunit/array-feedback.js [new file with mode: 0644]
deps/v8/test/mjsunit/array-literal-feedback.js [new file with mode: 0644]
deps/v8/test/mjsunit/assert-opt-and-deopt.js
deps/v8/test/mjsunit/compiler/inline-arguments.js
deps/v8/test/mjsunit/compiler/osr-big.js [new file with mode: 0644]
deps/v8/test/mjsunit/compiler/osr-nested.js [new file with mode: 0644]
deps/v8/test/mjsunit/compiler/osr-one.js [new file with mode: 0644]
deps/v8/test/mjsunit/compiler/osr-regress-max-locals.js [moved from deps/v8/test/mjsunit/compiler/regress-max-locals-for-osr.js with 100% similarity]
deps/v8/test/mjsunit/compiler/osr-simple.js [moved from deps/v8/test/mjsunit/compiler/simple-osr.js with 100% similarity]
deps/v8/test/mjsunit/compiler/osr-two.js [new file with mode: 0644]
deps/v8/test/mjsunit/compiler/osr-with-args.js [new file with mode: 0644]
deps/v8/test/mjsunit/compiler/parallel-proto-change.js
deps/v8/test/mjsunit/date.js
deps/v8/test/mjsunit/debug-breakpoints.js
deps/v8/test/mjsunit/debug-evaluate-locals.js
deps/v8/test/mjsunit/debug-script.js
deps/v8/test/mjsunit/elements-kind.js
deps/v8/test/mjsunit/external-array-no-sse2.js
deps/v8/test/mjsunit/external-array.js
deps/v8/test/mjsunit/function-call.js
deps/v8/test/mjsunit/fuzz-natives-part1.js
deps/v8/test/mjsunit/fuzz-natives-part2.js
deps/v8/test/mjsunit/fuzz-natives-part3.js
deps/v8/test/mjsunit/fuzz-natives-part4.js
deps/v8/test/mjsunit/harmony/collections.js
deps/v8/test/mjsunit/harmony/dataview-accessors.js [new file with mode: 0644]
deps/v8/test/mjsunit/harmony/generators-iteration.js
deps/v8/test/mjsunit/harmony/generators-runtime.js
deps/v8/test/mjsunit/harmony/iteration-syntax.js
deps/v8/test/mjsunit/harmony/typedarrays.js
deps/v8/test/mjsunit/manual-parallel-recompile.js
deps/v8/test/mjsunit/mjsunit.status
deps/v8/test/mjsunit/opt-elements-kind.js [new file with mode: 0644]
deps/v8/test/mjsunit/osr-elements-kind.js [new file with mode: 0644]
deps/v8/test/mjsunit/parallel-initial-prototype-change.js [new file with mode: 0644]
deps/v8/test/mjsunit/parallel-invalidate-transition-map.js [new file with mode: 0644]
deps/v8/test/mjsunit/parallel-optimize-disabled.js
deps/v8/test/mjsunit/regress/regress-1383.js
deps/v8/test/mjsunit/regress/regress-2691.js [new file with mode: 0644]
deps/v8/test/mjsunit/regress/regress-crbug-217858.js
deps/v8/test/mjsunit/regress/regress-crbug-245480.js [new file with mode: 0644]
deps/v8/test/mjsunit/regress/regress-debug-deopt-while-recompile.js [new file with mode: 0644]
deps/v8/test/mjsunit/regress/regress-embedded-cons-string.js [new file with mode: 0644]
deps/v8/test/mjsunit/regress/regress-function-length-strict.js [new file with mode: 0644]
deps/v8/test/mjsunit/regress/regress-opt-after-debug-deopt.js [new file with mode: 0644]
deps/v8/test/mjsunit/regress/regress-polymorphic-store.js [new file with mode: 0644]
deps/v8/test/mjsunit/regress/string-split-monkey-patching.js [new file with mode: 0644]
deps/v8/test/mjsunit/tools/tickprocessor.js
deps/v8/test/webkit/Array-isArray-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/Array-isArray.js [new file with mode: 0644]
deps/v8/test/webkit/JSON-stringify-replacer-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/JSON-stringify-replacer.js [new file with mode: 0644]
deps/v8/test/webkit/Object-create-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/Object-create.js [new file with mode: 0644]
deps/v8/test/webkit/Object-defineProperties-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/Object-defineProperties.js [new file with mode: 0644]
deps/v8/test/webkit/Object-keys-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/Object-keys.js [new file with mode: 0644]
deps/v8/test/webkit/ToNumber-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/ToNumber.js [new file with mode: 0644]
deps/v8/test/webkit/add-recovery-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/add-recovery.js [new file with mode: 0644]
deps/v8/test/webkit/apply-varargs-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/apply-varargs.js [new file with mode: 0644]
deps/v8/test/webkit/arguments-bad-index-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/arguments-bad-index.js [new file with mode: 0644]
deps/v8/test/webkit/array-constructor-host-call-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-constructor-host-call.js [new file with mode: 0644]
deps/v8/test/webkit/array-defineOwnProperty-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-defineOwnProperty.js [new file with mode: 0644]
deps/v8/test/webkit/array-enumerators-functions-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-enumerators-functions.js [new file with mode: 0644]
deps/v8/test/webkit/array-every-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-every.js [new file with mode: 0644]
deps/v8/test/webkit/array-filter-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-filter.js [new file with mode: 0644]
deps/v8/test/webkit/array-holes-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-holes.js [new file with mode: 0644]
deps/v8/test/webkit/array-index-immediate-types-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-index-immediate-types.js [new file with mode: 0644]
deps/v8/test/webkit/array-indexing-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-indexing.js [new file with mode: 0644]
deps/v8/test/webkit/array-iterate-backwards-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-iterate-backwards.js [new file with mode: 0644]
deps/v8/test/webkit/array-lastIndexOf-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-lastIndexOf.js [new file with mode: 0644]
deps/v8/test/webkit/array-proto-func-length-getter-except-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-proto-func-length-getter-except.js [new file with mode: 0644]
deps/v8/test/webkit/array-proto-func-property-getter-except-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-proto-func-property-getter-except.js [new file with mode: 0644]
deps/v8/test/webkit/array-reduce-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-reduce.js [new file with mode: 0644]
deps/v8/test/webkit/array-reduceRight-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-reduceRight.js [new file with mode: 0644]
deps/v8/test/webkit/array-reset-large-index-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-reset-large-index.js [new file with mode: 0644]
deps/v8/test/webkit/array-sort-numericCompare-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-sort-numericCompare.js [new file with mode: 0644]
deps/v8/test/webkit/array-sort-reentrance-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-sort-reentrance.js [new file with mode: 0644]
deps/v8/test/webkit/array-sort-small-sparse-array-with-large-length-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-sort-small-sparse-array-with-large-length.js [new file with mode: 0644]
deps/v8/test/webkit/array-sort-sparse-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-sort-sparse.js [new file with mode: 0644]
deps/v8/test/webkit/array-tostring-and-join-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-tostring-and-join.js [new file with mode: 0644]
deps/v8/test/webkit/array-type-speculation-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/array-type-speculation.js [new file with mode: 0644]
deps/v8/test/webkit/avl-crash-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/avl-crash.js [new file with mode: 0644]
deps/v8/test/webkit/bitops-type-tag-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/bitops-type-tag.js [new file with mode: 0644]
deps/v8/test/webkit/boolean-argument-prediction-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/boolean-argument-prediction.js [new file with mode: 0644]
deps/v8/test/webkit/boxed-double-to-int-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/boxed-double-to-int.js [new file with mode: 0644]
deps/v8/test/webkit/break-ASI-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/break-ASI.js [new file with mode: 0644]
deps/v8/test/webkit/cached-call-uninitialized-arguments-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/cached-call-uninitialized-arguments.js [new file with mode: 0644]
deps/v8/test/webkit/call-apply-crash-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/call-apply-crash.js [new file with mode: 0644]
deps/v8/test/webkit/char-at-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/char-at.js [new file with mode: 0644]
deps/v8/test/webkit/closure-inside-extra-arg-call-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/closure-inside-extra-arg-call.js [new file with mode: 0644]
deps/v8/test/webkit/codegen-assign-nontemporary-as-rexp-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/codegen-assign-nontemporary-as-rexp.js [new file with mode: 0644]
deps/v8/test/webkit/codegen-jless-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/codegen-jless.js [new file with mode: 0644]
deps/v8/test/webkit/codegen-loops-logical-nodes-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/codegen-loops-logical-nodes.js [new file with mode: 0644]
deps/v8/test/webkit/codegen-peephole-locals-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/codegen-peephole-locals.js [new file with mode: 0644]
deps/v8/test/webkit/codegen-temporaries-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/codegen-temporaries.js [new file with mode: 0644]
deps/v8/test/webkit/comparison-operators-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/comparison-operators-greater-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/comparison-operators-greater.js [new file with mode: 0644]
deps/v8/test/webkit/comparison-operators-less-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/comparison-operators-less.js [new file with mode: 0644]
deps/v8/test/webkit/comparison-operators.js [new file with mode: 0644]
deps/v8/test/webkit/concat-while-having-a-bad-time-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/concat-while-having-a-bad-time.js [new file with mode: 0644]
deps/v8/test/webkit/const-without-initializer-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/const-without-initializer.js [new file with mode: 0644]
deps/v8/test/webkit/constant-count-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/constant-count.js [new file with mode: 0644]
deps/v8/test/webkit/constant-encoding-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/constant-encoding.js [new file with mode: 0644]
deps/v8/test/webkit/constant-folding-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/constant-folding.js [new file with mode: 0644]
deps/v8/test/webkit/continue-break-multiple-labels-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/continue-break-multiple-labels.js [new file with mode: 0644]
deps/v8/test/webkit/convert-nan-to-bool-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/convert-nan-to-bool.js [new file with mode: 0644]
deps/v8/test/webkit/cyclic-prototypes-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/cyclic-prototypes.js [new file with mode: 0644]
deps/v8/test/webkit/date-DST-pre-1970-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/date-DST-pre-1970.js [new file with mode: 0644]
deps/v8/test/webkit/date-constructor-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/date-constructor.js [new file with mode: 0644]
deps/v8/test/webkit/date-daysfrom1970-overflow-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/date-daysfrom1970-overflow.js [new file with mode: 0644]
deps/v8/test/webkit/date-parse-comments-test-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/date-parse-comments-test.js [new file with mode: 0644]
deps/v8/test/webkit/date-set-to-nan-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/date-set-to-nan.js [new file with mode: 0644]
deps/v8/test/webkit/date-utc-timeclip-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/date-utc-timeclip.js [new file with mode: 0644]
deps/v8/test/webkit/debugger-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/debugger.js [new file with mode: 0644]
deps/v8/test/webkit/declaration-in-block-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/declaration-in-block.js [new file with mode: 0644]
deps/v8/test/webkit/delete-getters-setters-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/delete-getters-setters.js [new file with mode: 0644]
deps/v8/test/webkit/delete-then-put-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/delete-then-put.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-abs-backwards-propagation-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-abs-backwards-propagation.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-add-not-number-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-add-not-number.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-alias-escape-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-alias-escape.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-alias-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-alias-one-block-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-alias-one-block-osr-exit-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-alias-one-block-osr-exit.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-alias-one-block-overwrite-arguments-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-alias-one-block-overwrite-arguments.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-alias-one-block-overwrite-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-alias-one-block-overwrite.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-alias-one-block.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-alias.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-cross-code-origin-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-cross-code-origin.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-mixed-alias-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-mixed-alias.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-osr-exit-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-osr-exit-multiple-blocks-before-exit-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-osr-exit-multiple-blocks-before-exit.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-osr-exit-multiple-blocks-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-osr-exit-multiple-blocks.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-osr-exit.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-out-of-bounds-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-out-of-bounds.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-unexpected-escape-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-arguments-unexpected-escape.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-arith-add-overflow-check-elimination-predicted-but-not-proven-int-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-arith-add-overflow-check-elimination-predicted-but-not-proven-int.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-arith-add-overflow-check-elimination-tower-of-large-numbers-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-arith-add-overflow-check-elimination-tower-of-large-numbers.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-array-dead-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-array-dead.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-array-length-dead-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-array-length-dead.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-array-pop-side-effects-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-array-pop-side-effects.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-array-pop-value-clearing-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-array-pop-value-clearing.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-arrayify-elimination-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-arrayify-elimination.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-arrayify-when-late-prevent-extensions-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-arrayify-when-late-prevent-extensions.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-arrayify-when-prevent-extensions-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-arrayify-when-prevent-extensions.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-bool-to-int32-reuse-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-bool-to-int32-reuse.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-branch-logical-not-peephole-around-osr-exit-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-branch-logical-not-peephole-around-osr-exit.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-branch-not-fail-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-branch-not-fail.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-call-function-hit-watchpoint-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-call-function-hit-watchpoint.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-call-method-hit-watchpoint-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-call-method-hit-watchpoint.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-captured-var-get-local-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-captured-var-get-local.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-cfa-merge-with-dead-use-at-tail-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-cfa-merge-with-dead-use-at-tail.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-cfa-prove-put-by-id-simple-when-storing-to-specialized-function-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-cfa-prove-put-by-id-simple-when-storing-to-specialized-function.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null-and-decrement-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null-and-decrement.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-typeof-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-typeof.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-cfg-simplify-phantom-get-local-on-same-block-set-local-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-cfg-simplify-phantom-get-local-on-same-block-set-local.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-cfg-simplify-redundant-dead-get-local-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-cfg-simplify-redundant-dead-get-local.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-check-structure-elimination-for-non-cell-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-check-structure-elimination-for-non-cell.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-check-two-structures-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-check-two-structures.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-compare-final-object-to-final-object-or-other-when-both-proven-final-object-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-compare-final-object-to-final-object-or-other-when-both-proven-final-object.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-compare-final-object-to-final-object-or-other-when-proven-final-object-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-compare-final-object-to-final-object-or-other-when-proven-final-object.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-constant-fold-first-local-read-after-block-merge-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-constant-fold-first-local-read-after-block-merge.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-constant-fold-logical-not-branch-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-constant-fold-logical-not-branch.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-constant-fold-misprediction-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-constant-fold-misprediction.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-constant-fold-uncaptured-variable-that-is-later-captured-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-constant-fold-uncaptured-variable-that-is-later-captured.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-convert-this-dom-window-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-convert-this-dom-window.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-convert-this-object-then-exit-on-other-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-convert-this-object-then-exit-on-other.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-convert-this-other-then-exit-on-object-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-convert-this-other-then-exit-on-object.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-other-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-other.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-string-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-string.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-create-inlined-arguments-in-closure-inline-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-create-inlined-arguments-in-closure-inline.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-cse-cfa-discrepancy-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-cse-cfa-discrepancy.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-cse-dead-get-scoped-var-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-cse-dead-get-scoped-var.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-dead-min-one-arg-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-dead-min-one-arg.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-dead-min-two-args-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-dead-min-two-args.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-dead-redundant-get-array-length-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-dead-redundant-get-array-length.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-dead-speculation-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-dead-speculation.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-dead-variable-on-exit-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-dead-variable-on-exit.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-double-addition-simplify-to-int-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-double-addition-simplify-to-int.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-double-use-of-post-simplification-double-prediction-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-double-use-of-post-simplification-double-prediction.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-double-vote-fuzz-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-double-vote-fuzz.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-ensure-array-storage-on-string-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-ensure-array-storage-on-string.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-ensure-array-storage-on-window-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-ensure-array-storage-on-window.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-ensure-contiguous-on-string-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-ensure-contiguous-on-string.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-ensure-non-array-array-storage-on-window-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-ensure-non-array-array-storage-on-window.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-exception-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-exception.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-float32-array-nan-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-float32-array-nan.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-flush-get-local-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-flush-get-local.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-force-exit-then-sparse-conditional-constant-prop-in-loop-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-force-exit-then-sparse-conditional-constant-prop-in-loop.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-get-by-val-clobber-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-get-by-val-clobber.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-getter-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-getter-throw-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-getter-throw.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-getter.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-holy-put-by-val-interferes-with-get-array-length-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-holy-put-by-val-interferes-with-get-array-length.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-become-double-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-become-double.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-become-int32-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-become-int32.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-int32-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-int32.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-osr-exit-and-capture-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-osr-exit-and-capture.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-out-of-bounds-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-out-of-bounds.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-reset-changetype-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-reset-changetype.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-reset-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-reset.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-simple-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-simple.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-use-directly-from-inlined-code-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-use-directly-from-inlined-code.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-use-from-all-the-places-broken-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-use-from-all-the-places-broken.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-use-from-all-the-places-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-use-from-all-the-places.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-use-from-getter-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-use-from-getter.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-use-from-uninlined-code-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-arguments-use-from-uninlined-code.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-constant-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-constant.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-constructor-that-uses-arguments-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-constructor-that-uses-arguments.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-early-return-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-early-return.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-function-dot-caller-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-function-dot-caller.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-new-array-buffer-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-new-array-buffer.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-unused-this-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-unused-this-method-check-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-unused-this-method-check.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inline-unused-this.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-inlining-reg-alloc-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-inlining-reg-alloc.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-int-overflow-in-loop-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-int-overflow-in-loop.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-int-overflow-large-constants-in-a-line-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-int-overflow-large-constants-in-a-line.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-int32-to-double-on-known-number-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-int32-to-double-on-known-number.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-int32-to-double-on-set-local-and-exit-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-int32-to-double-on-set-local-and-exit.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-int32-to-double-on-set-local-and-sometimes-exit-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-int32-to-double-on-set-local-and-sometimes-exit.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-integer-optimization-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-integer-optimization.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-intrinsic-osr-exit-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-intrinsic-osr-exit.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-intrinsic-side-effect-assignment-osr-exit-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-intrinsic-side-effect-assignment-osr-exit.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-intrinsic-unused-this-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-intrinsic-unused-this-method-check-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-intrinsic-unused-this-method-check.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-intrinsic-unused-this.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-max-backwards-propagation-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-max-backwards-propagation.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-min-backwards-propagation-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-min-backwards-propagation.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-min-max-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-min-max.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-mispredict-variable-but-prove-int-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-mispredict-variable-but-prove-int.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-mul-big-integer-with-small-integer-and-bitor-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-mul-big-integer-with-small-integer-and-bitor.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-mul-big-integer-with-small-integer-and-detect-overflow-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-mul-big-integer-with-small-integer-and-detect-overflow.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-mul-big-integer-with-small-integer-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-mul-big-integer-with-small-integer.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-mul-big-integers-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-mul-big-integers.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-multi-basic-block-structure-clobber-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-multi-basic-block-structure-clobber.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-multiply-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-multiply.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-negative-array-index-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-negative-array-index.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-obvious-constant-cfa-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-obvious-constant-cfa.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-other-branch-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-other-branch.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-patchable-get-by-id-after-watchpoint-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-patchable-get-by-id-after-watchpoint.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-phantom-base-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-phantom-base.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-phantom-get-local-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-phantom-get-local.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-post-inc-then-exit-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-post-inc-then-exit.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-proto-access-inline-osr-exit-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-proto-access-inline-osr-exit.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-proto-stub-watchpoint-fire-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-proto-stub-watchpoint-fire.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-proven-sqrt-backwards-propagation-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-proven-sqrt-backwards-propagation.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-put-by-id-allocate-storage-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-put-by-id-allocate-storage-polymorphic-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-put-by-id-allocate-storage-polymorphic.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-put-by-id-allocate-storage.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-put-by-id-prototype-check-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-put-by-id-prototype-check.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-put-by-id-reallocate-storage-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-put-by-id-reallocate-storage-polymorphic-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-put-by-id-reallocate-storage-polymorphic.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-put-by-id-reallocate-storage.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-put-by-val-setter-then-get-by-val-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-put-by-val-setter-then-get-by-val.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-put-scoped-var-backward-flow-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-put-scoped-var-backward-flow.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-putbyval-cfa-clobber-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-putbyval-cfa-clobber.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-redundant-load-of-captured-variable-proven-constant-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-redundant-load-of-captured-variable-proven-constant.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-resolve-global-polymorphic-non-dictionary-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-resolve-global-polymorphic-non-dictionary.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-resolve-global-specific-dictionary-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-resolve-global-specific-dictionary.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-rshift-by-zero-eliminate-valuetoint32-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-rshift-by-zero-eliminate-valuetoint32.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-side-effect-assignment-osr-exit-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-side-effect-assignment-osr-exit.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-sqrt-backwards-propagation-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-sqrt-backwards-propagation.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-store-unexpected-value-into-argument-and-osr-exit-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-store-unexpected-value-into-argument-and-osr-exit.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-string-stricteq-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-string-stricteq.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-tear-off-arguments-not-activation-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-tear-off-arguments-not-activation.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-tear-off-function-dot-arguments-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-tear-off-function-dot-arguments.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-bad-toString-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-bad-toString.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-bad-valueOf-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-bad-valueOf.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-int-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-int-or-string-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-int-or-string.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-int.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-on-cell-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-on-cell.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-on-value-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-on-value.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-side-effect-clobbers-toString-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-side-effect-clobbers-toString.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-side-effect-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-side-effect.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-toString-becomes-bad-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-toString-becomes-bad-with-check-structure-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-toString-becomes-bad-with-check-structure.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-toString-becomes-bad-with-dictionary-string-prototype-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-toString-becomes-bad-with-dictionary-string-prototype.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-toString-becomes-bad.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-toString-in-string-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-toString-in-string.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-valueOf-in-string-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-to-string-valueOf-in-string.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-uint32-to-number-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-uint32-to-number-in-middle-of-copy-propagation-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-uint32-to-number-in-middle-of-copy-propagation.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-uint32-to-number-on-captured-variable-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-uint32-to-number-on-captured-variable.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-uint32-to-number-skip-then-exit-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-uint32-to-number-skip-then-exit.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-uint32-to-number.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-uint32array-overflow-constant-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-uint32array-overflow-constant.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-uint8clampedarray-out-of-bounds-put-by-val-alias-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-uint8clampedarray-out-of-bounds-put-by-val-alias.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-value-to-int32-with-side-effect-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-value-to-int32-with-side-effect.js [new file with mode: 0644]
deps/v8/test/webkit/dfg-weak-js-constant-silent-fill-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dfg-weak-js-constant-silent-fill.js [new file with mode: 0644]
deps/v8/test/webkit/dictionary-no-cache-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dictionary-no-cache.js [new file with mode: 0644]
deps/v8/test/webkit/dictionary-prototype-caching-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/dictionary-prototype-caching.js [new file with mode: 0644]
deps/v8/test/webkit/do-while-semicolon-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/do-while-semicolon.js [new file with mode: 0644]
deps/v8/test/webkit/duplicate-param-crash-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/duplicate-param-crash.js [new file with mode: 0644]
deps/v8/test/webkit/duplicate-param-gc-crash-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/duplicate-param-gc-crash.js [new file with mode: 0644]
deps/v8/test/webkit/enter-dictionary-indexing-mode-with-blank-indexing-type-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/enter-dictionary-indexing-mode-with-blank-indexing-type.js [new file with mode: 0644]
deps/v8/test/webkit/equality-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/equality.js [new file with mode: 0644]
deps/v8/test/webkit/eval-and-with-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/eval-and-with.js [new file with mode: 0644]
deps/v8/test/webkit/eval-cache-crash-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/eval-cache-crash.js [new file with mode: 0644]
deps/v8/test/webkit/eval-throw-return-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/eval-throw-return.js [new file with mode: 0644]
deps/v8/test/webkit/eval-var-decl-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/eval-var-decl.js [new file with mode: 0644]
deps/v8/test/webkit/exception-for-nonobject-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/exception-for-nonobject.js [new file with mode: 0644]
deps/v8/test/webkit/exception-propagate-from-dfg-to-llint-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/exception-propagate-from-dfg-to-llint.js [new file with mode: 0644]
deps/v8/test/webkit/exception-try-finally-scope-error-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/exception-try-finally-scope-error.js [new file with mode: 0644]
deps/v8/test/webkit/exception-with-handler-inside-eval-with-dynamic-scope-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/exception-with-handler-inside-eval-with-dynamic-scope.js [new file with mode: 0644]
deps/v8/test/webkit/finally-codegen-failure-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/finally-codegen-failure.js [new file with mode: 0644]
deps/v8/test/webkit/flatten-dictionary-structure-from-which-all-properties-were-deleted-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/flatten-dictionary-structure-from-which-all-properties-were-deleted.js [new file with mode: 0644]
deps/v8/test/webkit/for-in-avoid-duplicates-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/for-in-avoid-duplicates.js [new file with mode: 0644]
deps/v8/test/webkit/for-in-cached-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/for-in-cached.js [new file with mode: 0644]
deps/v8/test/webkit/for-in-exeception-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/for-in-exeception.js [new file with mode: 0644]
deps/v8/test/webkit/for-in-to-text-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/for-in-to-text.js [new file with mode: 0644]
deps/v8/test/webkit/for-in-var-scope-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/for-in-var-scope.js [new file with mode: 0644]
deps/v8/test/webkit/function-apply-aliased-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/function-apply-aliased.js [new file with mode: 0644]
deps/v8/test/webkit/function-call-aliased-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/function-call-aliased.js [new file with mode: 0644]
deps/v8/test/webkit/function-call-register-allocation-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/function-call-register-allocation.js [new file with mode: 0644]
deps/v8/test/webkit/function-constructor-newline-after-brace-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/function-constructor-newline-after-brace.js [new file with mode: 0644]
deps/v8/test/webkit/function-constructor-single-line-comment-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/function-constructor-single-line-comment.js [new file with mode: 0644]
deps/v8/test/webkit/function-declaration-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/function-declaration-statement-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/function-declaration-statement.js [new file with mode: 0644]
deps/v8/test/webkit/function-declaration.js [new file with mode: 0644]
deps/v8/test/webkit/function-declarations-in-switch-statement-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/function-declarations-in-switch-statement.js [new file with mode: 0644]
deps/v8/test/webkit/function-dot-apply-replace-base-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/function-dot-apply-replace-base.js [new file with mode: 0644]
deps/v8/test/webkit/function-dot-length-read-only-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/function-dot-length-read-only.js [new file with mode: 0644]
deps/v8/test/webkit/function-prototype-descriptor-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/function-prototype-descriptor.js [new file with mode: 0644]
deps/v8/test/webkit/function-toString-object-literals-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/function-toString-object-literals.js [new file with mode: 0644]
deps/v8/test/webkit/get-by-pname-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/get-by-pname-non-final-object-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/get-by-pname-non-final-object.js [new file with mode: 0644]
deps/v8/test/webkit/get-by-pname-that-looks-like-a-patchable-get-by-val-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/get-by-pname-that-looks-like-a-patchable-get-by-val.js [new file with mode: 0644]
deps/v8/test/webkit/get-by-pname.js [new file with mode: 0644]
deps/v8/test/webkit/getter-setter-gc-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/getter-setter-gc.js [new file with mode: 0644]
deps/v8/test/webkit/global-resolve-through-eval-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/global-resolve-through-eval.js [new file with mode: 0644]
deps/v8/test/webkit/gmail-re-re-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/gmail-re-re.js [new file with mode: 0644]
deps/v8/test/webkit/has-own-property-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/has-own-property.js [new file with mode: 0644]
deps/v8/test/webkit/ignored-result-null-comparison-crash-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/ignored-result-null-comparison-crash.js [new file with mode: 0644]
deps/v8/test/webkit/ignored-result-ref-crash-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/ignored-result-ref-crash.js [new file with mode: 0644]
deps/v8/test/webkit/indexed-setter-on-global-object-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/indexed-setter-on-global-object.js [new file with mode: 0644]
deps/v8/test/webkit/instance-of-immediates-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/instance-of-immediates.js [new file with mode: 0644]
deps/v8/test/webkit/instanceof-operator-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/instanceof-operator.js [new file with mode: 0644]
deps/v8/test/webkit/integer-extremes-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/integer-extremes.js [new file with mode: 0644]
deps/v8/test/webkit/interpreter-no-activation-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/interpreter-no-activation.js [new file with mode: 0644]
deps/v8/test/webkit/invalid-callframe-during-unwind-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/invalid-callframe-during-unwind.js [new file with mode: 0644]
deps/v8/test/webkit/isPrototypeOf-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/isPrototypeOf.js [new file with mode: 0644]
deps/v8/test/webkit/jit-float32-array-nan-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/jit-float32-array-nan.js [new file with mode: 0644]
deps/v8/test/webkit/js-continue-break-restrictions-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/js-continue-break-restrictions.js [new file with mode: 0644]
deps/v8/test/webkit/keywords-and-reserved_words-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/keywords-and-reserved_words.js [new file with mode: 0644]
deps/v8/test/webkit/legitimately-captured-argument-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/legitimately-captured-argument.js [new file with mode: 0644]
deps/v8/test/webkit/logical-or-jless-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/logical-or-jless.js [new file with mode: 0644]
deps/v8/test/webkit/math-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/math-transforms-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/math-transforms.js [new file with mode: 0644]
deps/v8/test/webkit/math.js [new file with mode: 0644]
deps/v8/test/webkit/mod-by-zero-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/mod-by-zero.js [new file with mode: 0644]
deps/v8/test/webkit/mod-crash-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/mod-crash.js [new file with mode: 0644]
deps/v8/test/webkit/multiline-comment-newline-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/multiline-comment-newline.js [new file with mode: 0644]
deps/v8/test/webkit/named-function-expression-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/named-function-expression.js [new file with mode: 0644]
deps/v8/test/webkit/nested-functions-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/nested-functions.js [new file with mode: 0644]
deps/v8/test/webkit/new-array-double-with-holes-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/new-array-double-with-holes.js [new file with mode: 0644]
deps/v8/test/webkit/no-semi-insertion-at-end-of-script-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/no-semi-insertion-at-end-of-script.js [new file with mode: 0644]
deps/v8/test/webkit/number-cell-reuse-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/number-cell-reuse.js [new file with mode: 0644]
deps/v8/test/webkit/number-parsing-crash-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/number-parsing-crash.js [new file with mode: 0644]
deps/v8/test/webkit/number-toExponential-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/number-toExponential.js [new file with mode: 0644]
deps/v8/test/webkit/numeric-compare-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/numeric-compare.js [new file with mode: 0644]
deps/v8/test/webkit/numeric-conversion-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/numeric-conversion.js [new file with mode: 0644]
deps/v8/test/webkit/object-literal-direct-put-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/object-literal-direct-put.js [new file with mode: 0644]
deps/v8/test/webkit/object-literal-syntax-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/object-literal-syntax.js [new file with mode: 0644]
deps/v8/test/webkit/order-of-operations-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/order-of-operations.js [new file with mode: 0644]
deps/v8/test/webkit/parse-nan-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/parse-nan.js [new file with mode: 0644]
deps/v8/test/webkit/parseFloat-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/parseFloat.js [new file with mode: 0644]
deps/v8/test/webkit/parseInt-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/parseInt.js [new file with mode: 0644]
deps/v8/test/webkit/parser-high-byte-character-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/parser-high-byte-character.js [new file with mode: 0644]
deps/v8/test/webkit/parser-xml-close-comment-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/parser-xml-close-comment.js [new file with mode: 0644]
deps/v8/test/webkit/polymorphic-construct-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/polymorphic-construct.js [new file with mode: 0644]
deps/v8/test/webkit/pretty-print-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/pretty-print.js [new file with mode: 0644]
deps/v8/test/webkit/preventExtensions-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/preventExtensions.js [new file with mode: 0644]
deps/v8/test/webkit/primitive-method-this-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/primitive-method-this.js [new file with mode: 0644]
deps/v8/test/webkit/property-getters-and-setters-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/property-getters-and-setters.js [new file with mode: 0644]
deps/v8/test/webkit/property-iteration-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/property-iteration.js [new file with mode: 0644]
deps/v8/test/webkit/propertyIsEnumerable-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/propertyIsEnumerable.js [new file with mode: 0644]
deps/v8/test/webkit/prototypes-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/prototypes.js [new file with mode: 0644]
deps/v8/test/webkit/reentrant-caching-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/reentrant-caching.js [new file with mode: 0644]
deps/v8/test/webkit/reentrant-call-unwind-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/reentrant-call-unwind.js [new file with mode: 0644]
deps/v8/test/webkit/regexp-alternatives-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/regexp-alternatives.js [new file with mode: 0644]
deps/v8/test/webkit/regexp-backreferences-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/regexp-backreferences.js [new file with mode: 0644]
deps/v8/test/webkit/regexp-char-insensitive-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/regexp-char-insensitive.js [new file with mode: 0644]
deps/v8/test/webkit/regexp-character-match-out-of-order-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/regexp-character-match-out-of-order.js [new file with mode: 0644]
deps/v8/test/webkit/regexp-compile-crash-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/regexp-compile-crash.js [new file with mode: 0644]
deps/v8/test/webkit/regexp-compile-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/regexp-compile.js [new file with mode: 0644]
deps/v8/test/webkit/regexp-divequal-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/regexp-divequal.js [new file with mode: 0644]
deps/v8/test/webkit/regexp-extended-characters-match-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/regexp-extended-characters-match.js [new file with mode: 0644]
deps/v8/test/webkit/regexp-extended-characters-more-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/regexp-extended-characters-more.js [new file with mode: 0644]
deps/v8/test/webkit/regexp-find-first-asserted-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/regexp-find-first-asserted.js [new file with mode: 0644]
deps/v8/test/webkit/regexp-in-and-foreach-handling-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/regexp-in-and-foreach-handling.js [new file with mode: 0644]
deps/v8/test/webkit/regexp-literals-arent-constants-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/regexp-literals-arent-constants.js [new file with mode: 0644]
deps/v8/test/webkit/regexp-many-brackets-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/regexp-many-brackets.js [new file with mode: 0644]
deps/v8/test/webkit/regexp-negative-special-characters-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/regexp-negative-special-characters.js [new file with mode: 0644]
deps/v8/test/webkit/regexp-non-bmp-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/regexp-non-bmp.js [new file with mode: 0644]
deps/v8/test/webkit/regexp-non-character-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/regexp-non-character.js [new file with mode: 0644]
deps/v8/test/webkit/regexp-norepeat-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/regexp-norepeat.js [new file with mode: 0644]
deps/v8/test/webkit/regexp-range-bound-ffff-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/regexp-range-bound-ffff.js [new file with mode: 0644]
deps/v8/test/webkit/regexp-zero-length-alternatives-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/regexp-zero-length-alternatives.js [new file with mode: 0644]
deps/v8/test/webkit/registerCachingAcrossBranchTargets-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/registerCachingAcrossBranchTargets.js [new file with mode: 0644]
deps/v8/test/webkit/rehash-assign-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/rehash-assign.js [new file with mode: 0644]
deps/v8/test/webkit/reserved-words-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/reserved-words.js [new file with mode: 0644]
deps/v8/test/webkit/resize-array-assign-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/resize-array-assign.js [new file with mode: 0644]
deps/v8/test/webkit/resolve-arguments-from-scope-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/resolve-arguments-from-scope.js [new file with mode: 0644]
deps/v8/test/webkit/resources/standalone-post.js [new file with mode: 0644]
deps/v8/test/webkit/resources/standalone-pre.js [new file with mode: 0644]
deps/v8/test/webkit/slash-lineterminator-parse-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/slash-lineterminator-parse.js [new file with mode: 0644]
deps/v8/test/webkit/sort-large-array-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/sort-large-array.js [new file with mode: 0644]
deps/v8/test/webkit/sort-no-jit-code-crash-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/sort-no-jit-code-crash.js [new file with mode: 0644]
deps/v8/test/webkit/sort-non-numbers-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/sort-non-numbers.js [new file with mode: 0644]
deps/v8/test/webkit/sort-randomly-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/sort-randomly.js [new file with mode: 0644]
deps/v8/test/webkit/sort-with-side-effecting-comparisons-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/sort-with-side-effecting-comparisons.js [new file with mode: 0644]
deps/v8/test/webkit/sparse-array-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/sparse-array.js [new file with mode: 0644]
deps/v8/test/webkit/stack-overflow-catch-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/stack-overflow-catch.js [new file with mode: 0644]
deps/v8/test/webkit/stack-unwinding-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/stack-unwinding.js [new file with mode: 0644]
deps/v8/test/webkit/statement-list-register-crash-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/statement-list-register-crash.js [new file with mode: 0644]
deps/v8/test/webkit/static-scope-object-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/static-scope-object.js [new file with mode: 0644]
deps/v8/test/webkit/strict-callback-this-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/strict-callback-this.js [new file with mode: 0644]
deps/v8/test/webkit/strict-throw-type-error-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/strict-throw-type-error.js [new file with mode: 0644]
deps/v8/test/webkit/string-from-char-code-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/string-from-char-code.js [new file with mode: 0644]
deps/v8/test/webkit/string-index-overflow-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/string-index-overflow.js [new file with mode: 0644]
deps/v8/test/webkit/string-property-deletion-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/string-property-deletion.js [new file with mode: 0644]
deps/v8/test/webkit/string-property-iteration-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/string-property-iteration.js [new file with mode: 0644]
deps/v8/test/webkit/string-slice-abnormal-values-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/string-slice-abnormal-values.js [new file with mode: 0644]
deps/v8/test/webkit/string-sort-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/string-sort.js [new file with mode: 0644]
deps/v8/test/webkit/string-substr-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/string-substr.js [new file with mode: 0644]
deps/v8/test/webkit/string-trim-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/string-trim.js [new file with mode: 0644]
deps/v8/test/webkit/string_replace-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/string_replace.js [new file with mode: 0644]
deps/v8/test/webkit/testcfg.py [new file with mode: 0644]
deps/v8/test/webkit/this-non-object-proto-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/this-non-object-proto.js [new file with mode: 0644]
deps/v8/test/webkit/throw-from-finally-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/throw-from-finally.js [new file with mode: 0644]
deps/v8/test/webkit/toString-elision-trailing-comma-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/toString-elision-trailing-comma.js [new file with mode: 0644]
deps/v8/test/webkit/toString-for-var-decl-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/toString-for-var-decl.js [new file with mode: 0644]
deps/v8/test/webkit/toString-number-dot-expr-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/toString-number-dot-expr.js [new file with mode: 0644]
deps/v8/test/webkit/toString-prefix-postfix-preserve-parens-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/toString-prefix-postfix-preserve-parens.js [new file with mode: 0644]
deps/v8/test/webkit/toString-recursion-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/toString-recursion.js [new file with mode: 0644]
deps/v8/test/webkit/tostring-exception-in-property-access-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/tostring-exception-in-property-access.js [new file with mode: 0644]
deps/v8/test/webkit/try-catch-try-try-catch-try-finally-return-catch-finally-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/try-catch-try-try-catch-try-finally-return-catch-finally.js [new file with mode: 0644]
deps/v8/test/webkit/try-try-return-finally-finally-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/try-try-return-finally-finally.js [new file with mode: 0644]
deps/v8/test/webkit/typeof-codegen-crash-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/typeof-codegen-crash.js [new file with mode: 0644]
deps/v8/test/webkit/typeof-constant-string-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/typeof-constant-string.js [new file with mode: 0644]
deps/v8/test/webkit/unexpected-constant-crash-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/unexpected-constant-crash.js [new file with mode: 0644]
deps/v8/test/webkit/unmatching-argument-count-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/unmatching-argument-count.js [new file with mode: 0644]
deps/v8/test/webkit/var-declarations-zero-width-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/var-declarations-zero-width.js [new file with mode: 0644]
deps/v8/test/webkit/var-shadows-arg-crash-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/var-shadows-arg-crash.js [new file with mode: 0644]
deps/v8/test/webkit/var-shadows-arg-gc-crash-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/var-shadows-arg-gc-crash.js [new file with mode: 0644]
deps/v8/test/webkit/vardecl-blocks-init-expected.txt [new file with mode: 0644]
deps/v8/test/webkit/vardecl-blocks-init.js [new file with mode: 0644]
deps/v8/test/webkit/webkit.status [new file with mode: 0644]
deps/v8/tools/android-run.py
deps/v8/tools/blink_tests/TestExpectations
deps/v8/tools/gcmole/gcmole.lua
deps/v8/tools/generate_shim_headers/generate_shim_headers.py [new file with mode: 0755]
deps/v8/tools/grokdump.py
deps/v8/tools/gyp/v8.gyp
deps/v8/tools/perf_tests/chromium_revision [new file with mode: 0644]
deps/v8/tools/plot-timer-events
deps/v8/tools/plot-timer-events.js [deleted file]
deps/v8/tools/presubmit.py
deps/v8/tools/profviz/composer.js [new file with mode: 0644]
deps/v8/tools/profviz/gnuplot-4.6.3-emscripten.js [new file with mode: 0644]
deps/v8/tools/profviz/profviz.css [new file with mode: 0644]
deps/v8/tools/profviz/profviz.html [new file with mode: 0644]
deps/v8/tools/profviz/profviz.js [new file with mode: 0644]
deps/v8/tools/profviz/stdio.js [new file with mode: 0644]
deps/v8/tools/profviz/worker.js [new file with mode: 0644]
deps/v8/tools/testrunner/local/execution.py
deps/v8/tools/testrunner/local/old_statusfile.py
deps/v8/tools/testrunner/local/progress.py
deps/v8/tools/testrunner/network/endpoint.py
deps/v8/tools/testrunner/network/network_execution.py
deps/v8/tools/tickprocessor.js
deps/v8/tools/v8-info.sh [new file with mode: 0755]
deps/v8/tools/v8-rolls.sh [new file with mode: 0755]

index a04811d..656c4b3 100644 (file)
@@ -40,6 +40,7 @@ shell_g
 /test/test262/data
 /test/test262/test262-*
 /test/test262/test262.status2
+/test/webkit/webkit.status2
 /third_party
 /tools/jsfunfuzz
 /tools/jsfunfuzz.zip
index 6117e56..3c113b2 100644 (file)
@@ -1,3 +1,92 @@
+2013-07-05: Version 3.20.2
+
+        Remove deprecated heap profiler methods from V8 public API
+
+        Mark i18n functions as native and set proper names
+        (issue 2745)
+
+        Correctly report stack trace when current function is FunctionApply
+        builtin (Chromium issue 252097)
+
+        Enable GDBJIT interface for standalone by default.
+
+        Fix debuggersupport=off build. (issue 2754)
+
+        Introduce -m64 flag for making x64 when the default gcc compiler is for
+        X32
+
+        Performance and stability improvements on all platforms.
+
+
+2013-07-02: Version 3.20.1
+
+        Implemented WeakMap.prototype.clear function. (issue 2753)
+
+        Ensure CheckInitialized is present independent of define.
+        (Chromium issue 255779)
+
+        Performance and stability improvements on all platforms.
+
+
+2013-06-28: Version 3.20.0
+
+        Migrated several tests from blink to V8 repository.
+
+        Allowed users of the V8 API to distinguish between unset and undefined
+        HiddenValues (issue 2746).
+
+        Deprecated old style callbacks in the V8 API.
+
+        Turned on parallel recompilation.
+
+        Performance and stability improvements on all platforms.
+
+
+2013-06-18: Version 3.19.18
+
+       Fixed read-only attribute of Function.length in strict mode.
+       (issue 2705)
+
+       Fixed Runtime_SetProperty to properly handle OOM failures
+       (Chromium issue 249873)
+
+       Emit deprecated check for constant function transitions.
+       (Chromium issue 250609)
+       
+       Made MathFloorOfDiv optimization trigger more often
+       (Issue 2205)
+
+       Make more GCs in idle notification handler.
+       (Chromium issue 241815)
+
+       Increased default type info threshold.
+       (Issue 2730)
+
+        Performance and stability improvements on all platforms.
+
+
+2013-06-14: Version 3.19.16
+
+        Performance and stability improvements on all platforms.
+
+
+2013-06-13: Version 3.19.15
+
+        Performance and stability improvements on all platforms.
+
+
+2013-06-13: Version 3.19.14
+
+        Fixed crashes when calling new Array(a) with a single argument that
+        could result in creating a holey array with a packed elements kind.
+        (Chromium issue 245480)
+
+        Fixed issues in parallel compilation.
+        (Chromium issue 248076)
+
+        Performance and stability improvements on all platforms.
+
+
 2013-06-11: Version 3.19.13
 
         Performance and stability improvements on all platforms.
index 8d66960..4f1a5cf 100644 (file)
@@ -5,7 +5,10 @@
 deps = {
   # Remember to keep the revision in sync with the Makefile.
   "v8/build/gyp":
-    "http://gyp.googlecode.com/svn/trunk@1501",
+    "http://gyp.googlecode.com/svn/trunk@1656",
+
+  "v8/third_party/icu":
+    "https://src.chromium.org/chrome/trunk/deps/third_party/icu46@205936",
 }
 
 deps_os = {
index a46b333..16c004f 100644 (file)
@@ -35,7 +35,7 @@ GYPFLAGS ?=
 TESTFLAGS ?=
 ANDROID_NDK_ROOT ?=
 ANDROID_TOOLCHAIN ?=
-ANDROID_V8 ?= /data/local/v8
+ANDROID_V8 ?= /data/local/tmp/v8
 NACL_SDK_ROOT ?=
 
 # Special build flags. Use them like this: "make library=shared"
@@ -80,10 +80,13 @@ endif
 ifeq ($(extrachecks), off)
   GYPFLAGS += -Dv8_enable_extra_checks=0
 endif
-# gdbjit=on
+# gdbjit=on/off
 ifeq ($(gdbjit), on)
   GYPFLAGS += -Dv8_enable_gdbjit=1
 endif
+ifeq ($(gdbjit), off)
+  GYPFLAGS += -Dv8_enable_gdbjit=0
+endif
 # vtunejit=on
 ifeq ($(vtunejit), on)
   GYPFLAGS += -Dv8_enable_vtunejit=1
@@ -116,6 +119,10 @@ endif
 ifeq ($(regexp), interpreted)
   GYPFLAGS += -Dv8_interpreted_regexp=1
 endif
+# i18nsupport=on
+ifeq ($(i18nsupport), on)
+  GYPFLAGS += -Dv8_enable_i18n_support=1
+endif
 # arm specific flags.
 # armv7=false/true
 ifeq ($(armv7), false)
@@ -391,4 +398,7 @@ $(ENVFILE).new:
 # Remember to keep these in sync with the DEPS file.
 dependencies:
        svn checkout --force http://gyp.googlecode.com/svn/trunk build/gyp \
-           --revision 1501
+           --revision 1656
+       svn checkout --force \
+           https://src.chromium.org/chrome/trunk/deps/third_party/icu46 \
+           third_party/icu --revision 205936
index 0333d15..6fe40e2 100644 (file)
@@ -1,3 +1,4 @@
+bmeurer@chromium.org
 danno@chromium.org
 dslomov@chromium.org
 hpayer@chromium.org
index 8400ab1..ca09725 100644 (file)
     ],
     'configurations': {
       'Release': {
-        'cflags!': [
-          '-O2',
-          '-Os',
-        ],
         'cflags': [
-          '-fdata-sections',
-          '-ffunction-sections',
           '-fomit-frame-pointer',
-          '-O3',
         ],
       },  # Release
     },  # configurations
index c7849e2..dbb33a8 100644 (file)
     # Interpreted regexp engine exists as platform-independent alternative
     # based where the regular expression is compiled to a bytecode.
     'v8_interpreted_regexp%': 0,
+
+    # Enable ECMAScript Internationalization API. Enabling this feature will
+    # add a dependency on the ICU library.
+    'v8_enable_i18n_support%': 0,
   },
   'target_defaults': {
     'conditions': [
       ['v8_interpreted_regexp==1', {
         'defines': ['V8_INTERPRETED_REGEXP',],
       }],
+      ['v8_enable_i18n_support==1', {
+        'defines': ['V8_I18N_SUPPORT',],
+      }],
       ['v8_target_arch=="arm"', {
         'defines': [
           'V8_TARGET_ARCH_ARM',
           }],
         ],
       }],
+      ['(OS=="linux") and (v8_target_arch=="x64")', {
+        # Check whether the host compiler and target compiler support the
+        # '-m64' option and set it if so.
+        'target_conditions': [
+          ['_toolset=="host"', {
+            'variables': {
+              'm64flag': '<!((echo | $(echo ${CXX_host:-$(which g++)}) -m64 -E - > /dev/null 2>&1) && echo "-m64" || true)',
+            },
+            'cflags': [ '<(m64flag)' ],
+            'ldflags': [ '<(m64flag)' ],
+          }],
+          ['_toolset=="target"', {
+            'variables': {
+              'm64flag': '<!((echo | $(echo ${CXX_target:-<(CXX)}) -m64 -E - > /dev/null 2>&1) && echo "-m64" || true)',
+            },
+            'cflags': [ '<(m64flag)' ],
+            'ldflags': [ '<(m64flag)' ],
+          }]
+        ],
+      }],
       ['OS=="freebsd" or OS=="openbsd"', {
         'cflags': [ '-I/usr/local/include' ],
       }],
           ['v8_enable_extra_checks==1', {
             'defines': ['ENABLE_EXTRA_CHECKS',],
           }],
-          ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd" \
-            or OS=="android"', {
+          ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd"', {
+            'cflags!': [
+              '-O2',
+              '-Os',
+            ],
+            'cflags': [
+              '-fdata-sections',
+              '-ffunction-sections',
+              '-O3',
+            ],
+            'conditions': [
+              [ 'gcc_version==44 and clang==0', {
+                'cflags': [
+                  # Avoid crashes with gcc 4.4 in the v8 test suite.
+                  '-fno-tree-vrp',
+                ],
+              }],
+            ],
+          }],
+          ['OS=="android"', {
+            'cflags!': [
+              '-O3',
+              '-Os',
+            ],
+            'cflags': [
+              '-fdata-sections',
+              '-ffunction-sections',
+              '-O2',
+            ],
             'conditions': [
               [ 'gcc_version==44 and clang==0', {
                 'cflags': [
diff --git a/deps/v8/build/shim_headers.gypi b/deps/v8/build/shim_headers.gypi
new file mode 100644 (file)
index 0000000..940211c
--- /dev/null
@@ -0,0 +1,73 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+#       notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+#       copyright notice, this list of conditions and the following
+#       disclaimer in the documentation and/or other materials provided
+#       with the distribution.
+#     * Neither the name of Google Inc. nor the names of its
+#       contributors may be used to endorse or promote products derived
+#       from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# This file is meant to be included into a target to handle shim headers
+# in a consistent manner. To use this the following variables need to be
+# defined:
+#   headers_root_path: string: path to directory containing headers
+#   header_filenames: list: list of header file names
+
+{
+  'variables': {
+    'shim_headers_path': '<(SHARED_INTERMEDIATE_DIR)/shim_headers/<(_target_name)/<(_toolset)',
+    'shim_generator_additional_args%': [],
+  },
+  'include_dirs++': [
+    '<(shim_headers_path)',
+  ],
+  'all_dependent_settings': {
+    'include_dirs+++': [
+      '<(shim_headers_path)',
+    ],
+  },
+  'actions': [
+    {
+      'variables': {
+        'generator_path': '<(DEPTH)/tools/generate_shim_headers/generate_shim_headers.py',
+        'generator_args': [
+          '--headers-root', '<(headers_root_path)',
+          '--output-directory', '<(shim_headers_path)',
+          '<@(shim_generator_additional_args)',
+          '<@(header_filenames)',
+        ],
+      },
+      'action_name': 'generate_<(_target_name)_shim_headers',
+      'inputs': [
+        '<(generator_path)',
+      ],
+      'outputs': [
+        '<!@pymod_do_main(generate_shim_headers <@(generator_args) --outputs)',
+      ],
+      'action': ['python',
+                 '<(generator_path)',
+                 '<@(generator_args)',
+                 '--generate',
+      ],
+      'message': 'Generating <(_target_name) shim headers.',
+    },
+  ],
+}
index dde0575..b1303c8 100644 (file)
@@ -30,6 +30,7 @@
 {
   'variables': {
     'component%': 'static_library',
+    'clang%': 0,
     'visibility%': 'hidden',
     'v8_enable_backtrace%': 0,
     'msvs_multi_core_compile%': '1',
     'target_arch%': '<(target_arch)',
     'v8_target_arch%': '<(v8_target_arch)',
     'werror%': '-Werror',
+
+    # .gyp files or targets should set v8_code to 1 if they build V8 specific
+    # code, as opposed to external code.  This variable is used to control such
+    # things as the set of warnings to enable, and whether warnings are treated
+    # as errors.
+    'v8_code%': 0,
+
     'conditions': [
       ['(v8_target_arch=="arm" and host_arch!="arm") or \
         (v8_target_arch=="mipsel" and host_arch!="mipsel") or \
       }, {
         'want_separate_host_toolset': 0,
       }],
+      ['OS == "win"', {
+        'os_posix%': 0,
+      }, {
+        'os_posix%': 1,
+      }],
+      ['(v8_target_arch=="ia32" or v8_target_arch=="x64") and \
+        (OS=="linux" or OS=="mac")', {
+        'v8_enable_gdbjit%': 1,
+      }, {
+        'v8_enable_gdbjit%': 0,
+      }],
     ],
     # Default ARM variable settings.
     'armv7%': 'default',
     'arm_thumb': 'default',
   },
   'target_defaults': {
+    'variables': {
+      'v8_code%': '<(v8_code)',
+    },
     'default_configuration': 'Debug',
     'configurations': {
       'Debug': {
         # Xcode insists on this empty entry.
       },
     },
+    'target_conditions': [
+      ['v8_code == 0', {
+        'conditions': [
+          ['os_posix == 1 and OS != "mac"', {
+            'cflags!': [
+              '-Werror',
+            ],
+          }],
+          ['OS == "mac"', {
+            'xcode_settings': {
+              'GCC_TREAT_WARNINGS_AS_ERRORS': 'NO',    # -Werror
+            },
+          }],
+          ['OS == "win"', {
+            'msvs_settings': {
+              'VCCLCompilerTool': {
+                'WarnAsError': 'false',
+              },
+            },
+          }],
+        ],
+      }],
+    ],
   },
   'conditions': [
     ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \
        or OS=="netbsd"', {
       'target_defaults': {
         'cflags': [ '-Wall', '<(werror)', '-W', '-Wno-unused-parameter',
-                    '-Wnon-virtual-dtor', '-pthread', '-fno-rtti',
-                    '-fno-exceptions', '-pedantic' ],
+                    '-pthread', '-fno-exceptions', '-pedantic' ],
+        'cflags_cc': [ '-Wnon-virtual-dtor', '-fno-rtti' ],
         'ldflags': [ '-pthread', ],
         'conditions': [
           [ 'OS=="linux"', {
           'GCC_TREAT_WARNINGS_AS_ERRORS': 'YES',    # -Werror
           'GCC_VERSION': 'com.apple.compilers.llvmgcc42',
           'GCC_WARN_ABOUT_MISSING_NEWLINE': 'YES',  # -Wnewline-eof
+          'GCC_WARN_NON_VIRTUAL_DESTRUCTOR': 'YES', # -Wnon-virtual-dtor
           # MACOSX_DEPLOYMENT_TARGET maps to -mmacosx-version-min
           'MACOSX_DEPLOYMENT_TARGET': '<(mac_deployment_target)',
           'PREBINDING': 'NO',                       # No -Wl,-prebind
             '-Wendif-labels',
             '-W',
             '-Wno-unused-parameter',
-            '-Wnon-virtual-dtor',
           ],
         },
         'target_conditions': [
index d740df3..df3bd9f 100644 (file)
@@ -75,6 +75,9 @@ class V8EXPORT CpuProfileNode {
   /** Returns function name (empty string for anonymous functions.) */
   Handle<String> GetFunctionName() const;
 
+  /** Returns id of the script where function is located. */
+  int GetScriptId() const;
+
   /** Returns resource name for script from where the function originates. */
   Handle<String> GetScriptResourceName() const;
 
@@ -172,18 +175,12 @@ class V8EXPORT CpuProfiler {
    * obtaining profiling results.
    */
 
-  /** Deprecated. Use GetProfileCount instead. */
-  V8_DEPRECATED(static int GetProfilesCount());
   /**
    * Returns the number of profiles collected (doesn't include
    * profiles that are being collected at the moment of call.)
    */
   int GetProfileCount();
 
-  /** Deprecated. Use GetCpuProfile instead. */
-  V8_DEPRECATED(static const CpuProfile* GetProfile(
-      int index,
-      Handle<Value> security_token = Handle<Value>()));
   /** Deprecated. Use GetCpuProfile with single parameter. */
   V8_DEPRECATED(const CpuProfile* GetCpuProfile(
       int index,
@@ -191,18 +188,11 @@ class V8EXPORT CpuProfiler {
   /** Returns a profile by index. */
   const CpuProfile* GetCpuProfile(int index);
 
-  /** Deprecated. Use FindProfile instead. */
-  V8_DEPRECATED(static const CpuProfile* FindProfile(
-      unsigned uid,
-      Handle<Value> security_token = Handle<Value>()));
   /** Returns a profile by uid. */
   V8_DEPRECATED(const CpuProfile* FindCpuProfile(
       unsigned uid,
       Handle<Value> security_token = Handle<Value>()));
 
-  /** Deprecated. Use StartCpuProfiling instead. */
-  V8_DEPRECATED(static void StartProfiling(Handle<String> title,
-                                           bool record_samples = false));
   /**
    * Starts collecting CPU profile. Title may be an empty string. It
    * is allowed to have several profiles being collected at
@@ -216,10 +206,6 @@ class V8EXPORT CpuProfiler {
    */
   void StartCpuProfiling(Handle<String> title, bool record_samples = false);
 
-  /** Deprecated. Use StopCpuProfiling instead. */
-  V8_DEPRECATED(static const CpuProfile* StopProfiling(
-      Handle<String> title,
-      Handle<Value> security_token = Handle<Value>()));
   /**
    * Deprecated. Use StopCpuProfiling with one parameter instead.
    */
@@ -232,8 +218,6 @@ class V8EXPORT CpuProfiler {
    */
   const CpuProfile* StopCpuProfiling(Handle<String> title);
 
-  /** Deprecated. Use DeleteAllCpuProfiles instead. */
-  V8_DEPRECATED(static void DeleteAllProfiles());
   /**
    * Deletes all existing profiles, also cancelling all profiling
    * activity.  All previously returned pointers to profiles and their
@@ -346,16 +330,10 @@ class V8EXPORT HeapGraphNode {
  */
 class V8EXPORT HeapSnapshot {
  public:
-  enum Type {
-    kFull = 0  // Heap snapshot with all instances and references.
-  };
   enum SerializationFormat {
     kJSON = 0  // See format description near 'Serialize' method.
   };
 
-  /** Deprecated. Returns kFull. */
-  V8_DEPRECATED(Type GetType() const);
-
   /** Returns heap snapshot UID (assigned by the profiler.) */
   unsigned GetUid() const;
 
@@ -431,24 +409,12 @@ class V8EXPORT HeapProfiler {
   typedef RetainedObjectInfo* (*WrapperInfoCallback)
       (uint16_t class_id, Handle<Value> wrapper);
 
-  /** Deprecated. Use GetSnapshotCount instead. */
-  V8_DEPRECATED(static int GetSnapshotsCount());
   /** Returns the number of snapshots taken. */
   int GetSnapshotCount();
 
-  /** Deprecated. Use GetHeapSnapshot instead. */
-  V8_DEPRECATED(static const HeapSnapshot* GetSnapshot(int index));
   /** Returns a snapshot by index. */
   const HeapSnapshot* GetHeapSnapshot(int index);
 
-  /** Deprecated. Use FindHeapSnapshot instead. */
-  V8_DEPRECATED(static const HeapSnapshot* FindSnapshot(unsigned uid));
-  /** Returns a profile by uid. */
-  V8_DEPRECATED(const HeapSnapshot* FindHeapSnapshot(unsigned uid));
-
-  /** Deprecated. Use GetObjectId instead. */
-  V8_DEPRECATED(static SnapshotObjectId GetSnapshotObjectId(
-      Handle<Value> value));
   /**
    * Returns SnapshotObjectId for a heap object referenced by |value| if
    * it has been seen by the heap profiler, kUnknownObjectId otherwise.
@@ -476,12 +442,6 @@ class V8EXPORT HeapProfiler {
     virtual ~ObjectNameResolver() {}
   };
 
-  /** Deprecated. Use TakeHeapSnapshot instead. */
-  V8_DEPRECATED(static const HeapSnapshot* TakeSnapshot(
-      Handle<String> title,
-      HeapSnapshot::Type type = HeapSnapshot::kFull,
-      ActivityControl* control = NULL,
-      ObjectNameResolver* global_object_name_resolver = NULL));
   /**
    * Takes a heap snapshot and returns it. Title may be an empty string.
    */
@@ -490,9 +450,6 @@ class V8EXPORT HeapProfiler {
       ActivityControl* control = NULL,
       ObjectNameResolver* global_object_name_resolver = NULL);
 
-
-  /** Deprecated. Use StartTrackingHeapObjects instead. */
-  V8_DEPRECATED(static void StartHeapObjectsTracking());
   /**
    * Starts tracking of heap objects population statistics. After calling
    * this method, all heap objects relocations done by the garbage collector
@@ -500,9 +457,6 @@ class V8EXPORT HeapProfiler {
    */
   void StartTrackingHeapObjects();
 
-  /** Deprecated. Use GetHeapStats instead. */
-  V8_DEPRECATED(static SnapshotObjectId PushHeapObjectsStats(
-      OutputStream* stream));
   /**
    * Adds a new time interval entry to the aggregated statistics array. The
    * time interval entry contains information on the current heap objects
@@ -517,8 +471,6 @@ class V8EXPORT HeapProfiler {
    */
   SnapshotObjectId GetHeapStats(OutputStream* stream);
 
-  /** Deprecated. Use StopTrackingHeapObjects instead. */
-  V8_DEPRECATED(static void StopHeapObjectsTracking());
   /**
    * Stops tracking of heap objects population statistics, cleans up all
    * collected data. StartHeapObjectsTracking must be called again prior to
@@ -526,18 +478,12 @@ class V8EXPORT HeapProfiler {
    */
   void StopTrackingHeapObjects();
 
-  /** Deprecated. Use DeleteAllHeapSnapshots instead. */
-  V8_DEPRECATED(static void DeleteAllSnapshots());
   /**
    * Deletes all snapshots taken. All previously returned pointers to
    * snapshots and their contents become invalid after this call.
    */
   void DeleteAllHeapSnapshots();
 
-  /** Deprecated. Use SetWrapperClassInfoProvider instead. */
-  V8_DEPRECATED(static void DefineWrapperClass(
-      uint16_t class_id,
-      WrapperInfoCallback callback));
   /** Binds a callback to embedder's class ID. */
   void SetWrapperClassInfoProvider(
       uint16_t class_id,
@@ -550,13 +496,6 @@ class V8EXPORT HeapProfiler {
    */
   static const uint16_t kPersistentHandleNoClassId = 0;
 
-  /**
-   * Deprecated. Returns the number of currently existing persistent handles.
-   */
-  V8_DEPRECATED(static int GetPersistentHandleCount());
-
-  /** Deprecated. Use GetHeapProfilerMemorySize instead. */
-  V8_DEPRECATED(static size_t GetMemorySizeUsedByProfiler());
   /** Returns memory used for profiler internal data and snapshots. */
   size_t GetProfilerMemorySize();
 
@@ -590,7 +529,7 @@ class V8EXPORT HeapProfiler {
  * objects for heap snapshots, he can do it in a GC prologue
  * handler, and / or by assigning wrapper class ids in the following way:
  *
- *  1. Bind a callback to class id by calling DefineWrapperClass.
+ *  1. Bind a callback to class id by calling SetWrapperClassInfoProvider.
  *  2. Call SetWrapperClassId on certain persistent handles.
  *
  * V8 takes ownership of RetainedObjectInfo instances passed to it and
index c0bec79..3afb835 100644 (file)
@@ -123,7 +123,6 @@ class ImplementationUtilities;
 class Int32;
 class Integer;
 class Isolate;
-class LocalContext;
 class Number;
 class NumberObject;
 class Object;
@@ -155,6 +154,7 @@ class Isolate;
 class DeclaredAccessorDescriptor;
 class ObjectOperationDescriptor;
 class RawOperationDescriptor;
+class CallHandlerHelper;
 
 namespace internal {
 class Arguments;
@@ -162,8 +162,7 @@ class Heap;
 class HeapObject;
 class Isolate;
 class Object;
-template<typename T>
-class CustomArguments;
+template<typename T> class CustomArguments;
 class PropertyCallbackArguments;
 class FunctionCallbackArguments;
 }
@@ -222,8 +221,6 @@ class WeakReferenceCallbacks {
   }
 
 
-#define V8_USE_UNSAFE_HANDLES
-
 /**
  * An object reference managed by the v8 garbage collector.
  *
@@ -365,21 +362,19 @@ template <class T> class Handle {
 #endif
 
  private:
+  friend class Utils;
   template<class F> friend class Persistent;
   template<class F> friend class Local;
   friend class Arguments;
   template<class F> friend class FunctionCallbackInfo;
   template<class F> friend class PropertyCallbackInfo;
-  friend class String;
-  friend class Object;
+  template<class F> friend class internal::CustomArguments;
   friend class AccessorInfo;
   friend Handle<Primitive> Undefined(Isolate* isolate);
   friend Handle<Primitive> Null(Isolate* isolate);
   friend Handle<Boolean> True(Isolate* isolate);
   friend Handle<Boolean> False(Isolate* isolate);
   friend class Context;
-  friend class InternalHandleHelper;
-  friend class LocalContext;
   friend class HandleScope;
 
 #ifndef V8_USE_UNSAFE_HANDLES
@@ -454,6 +449,7 @@ template <class T> class Local : public Handle<T> {
 #endif
 
  private:
+  friend class Utils;
   template<class F> friend class Persistent;
   template<class F> friend class Handle;
   friend class Arguments;
@@ -463,8 +459,7 @@ template <class T> class Local : public Handle<T> {
   friend class Object;
   friend class AccessorInfo;
   friend class Context;
-  friend class InternalHandleHelper;
-  friend class LocalContext;
+  template<class F> friend class internal::CustomArguments;
   friend class HandleScope;
 
   V8_INLINE(static Local<T> New(Isolate* isolate, T* that));
@@ -496,10 +491,10 @@ template <class T> class Persistent // NOLINT
  public:
 #ifndef V8_USE_UNSAFE_HANDLES
   V8_INLINE(Persistent()) : val_(0) { }
-  V8_INLINE(~Persistent()) {
-    // TODO(dcarney): add this back before cutover.
-    // Dispose();
-  }
+  // TODO(dcarney): add this back before cutover.
+//  V8_INLINE(~Persistent()) {
+//  Dispose();
+//  }
   V8_INLINE(bool IsEmpty() const) { return val_ == 0; }
   // TODO(dcarney): remove somehow before cutover
   // The handle should either be 0, or a pointer to a live cell.
@@ -511,11 +506,11 @@ template <class T> class Persistent // NOLINT
    * to be separately disposed.
    */
   template <class S> V8_INLINE(Persistent(Isolate* isolate, Handle<S> that))
-      : val_(*New(isolate, that)) { }
+      : val_(New(isolate, *that)) { }
 
   template <class S> V8_INLINE(Persistent(Isolate* isolate,
-                                          Persistent<S>& that)) // NOLINT
-      : val_(*New(isolate, that)) { }
+                                          const Persistent<S>& that)) // NOLINT
+      : val_(New(isolate, *that)) { }
 
 #else
   /**
@@ -594,15 +589,9 @@ template <class T> class Persistent // NOLINT
   }
 #endif
 
+#ifdef V8_USE_UNSAFE_HANDLES
   V8_DEPRECATED(static Persistent<T> New(Handle<T> that));
-
-  /**
-   * Creates a new persistent handle for an existing local or persistent handle.
-   */
-  // TODO(dcarney): remove before cutover
   V8_INLINE(static Persistent<T> New(Isolate* isolate, Handle<T> that));
-#ifndef V8_USE_UNSAFE_HANDLES
-  // TODO(dcarney): remove before cutover
   V8_INLINE(static Persistent<T> New(Isolate* isolate, Persistent<T> that));
 #endif
 
@@ -652,23 +641,17 @@ template <class T> class Persistent // NOLINT
       P* parameters,
       typename WeakReferenceCallbacks<T, P>::Revivable callback));
 
-  // TODO(dcarney): deprecate
   template<typename S, typename P>
-  V8_INLINE(void MakeWeak(
+  V8_DEPRECATED(void MakeWeak(
       Isolate* isolate,
       P* parameters,
-      typename WeakReferenceCallbacks<S, P>::Revivable callback)) {
-    MakeWeak<S, P>(parameters, callback);
-  }
+      typename WeakReferenceCallbacks<S, P>::Revivable callback));
 
-  // TODO(dcarney): deprecate
   template<typename P>
-  V8_INLINE(void MakeWeak(
+  V8_DEPRECATED(void MakeWeak(
       Isolate* isolate,
       P* parameters,
-      typename WeakReferenceCallbacks<T, P>::Revivable callback)) {
-    MakeWeak<P>(parameters, callback);
-  }
+      typename WeakReferenceCallbacks<T, P>::Revivable callback));
 
   V8_INLINE(void ClearWeak());
 
@@ -779,11 +762,7 @@ template <class T> class Persistent // NOLINT
 #endif
   // TODO(dcarney): remove before cutover
   template <class S> V8_INLINE(Persistent(S* that)) : val_(that) { }
-  // TODO(dcarney): remove before cutover
-  template <class S> V8_INLINE(Persistent(Persistent<S> that))
-      : val_(*that) {
-    TYPE_CHECK(T, S);
-  }
+
   // TODO(dcarney): remove before cutover
   V8_INLINE(T* operator*() const) { return val_; }
 
@@ -794,16 +773,13 @@ template <class T> class Persistent // NOLINT
 #endif
 
  private:
+  friend class Utils;
   template<class F> friend class Handle;
   template<class F> friend class Local;
+  template<class F> friend class Persistent;
   template<class F> friend class ReturnValue;
-  friend class ImplementationUtilities;
-  friend class ObjectTemplate;
-  friend class Context;
-  friend class InternalHandleHelper;
-  friend class LocalContext;
 
-  V8_INLINE(static Persistent<T> New(Isolate* isolate, T* that));
+  V8_INLINE(static T* New(Isolate* isolate, T* that));
 
 #ifndef V8_USE_UNSAFE_HANDLES
   T* val_;
@@ -1067,10 +1043,16 @@ class V8EXPORT Script {
 
   /**
    * Returns the script id value.
+   * DEPRECATED: Please use GetId().
    */
   Local<Value> Id();
 
   /**
+   * Returns the script id.
+   */
+  int GetId();
+
+  /**
    * Associate an additional data object with the script. This is mainly used
    * with the debugger as this data object is only available through the
    * debugger API.
@@ -1087,6 +1069,8 @@ class V8EXPORT Script {
    * -1 will be returned if no information available.
    */
   int GetLineNumber(int code_pos);
+
+  static const int kNoScriptId = 0;
 };
 
 
@@ -1386,6 +1370,12 @@ class V8EXPORT Value : public Data {
   bool IsArrayBuffer() const;
 
   /**
+   * Returns true if this value is an ArrayBufferView.
+   * This is an experimental feature.
+   */
+  bool IsArrayBufferView() const;
+
+  /**
    * Returns true if this value is one of TypedArrays.
    * This is an experimental feature.
    */
@@ -1445,6 +1435,12 @@ class V8EXPORT Value : public Data {
    */
   bool IsFloat64Array() const;
 
+  /**
+   * Returns true if this value is a DataView.
+   * This is an experimental feature.
+   */
+  bool IsDataView() const;
+
   Local<Boolean> ToBoolean() const;
   Local<Number> ToNumber() const;
   Local<String> ToString() const;
@@ -2078,13 +2074,12 @@ class V8EXPORT Object : public Value {
 
   bool Delete(uint32_t index);
 
-  // TODO(dcarney): deprecate
-  bool SetAccessor(Handle<String> name,
-                   AccessorGetter getter,
-                   AccessorSetter setter = 0,
-                   Handle<Value> data = Handle<Value>(),
-                   AccessControl settings = DEFAULT,
-                   PropertyAttribute attribute = None);
+  V8_DEPRECATED(bool SetAccessor(Handle<String> name,
+                                 AccessorGetter getter,
+                                 AccessorSetter setter = 0,
+                                 Handle<Value> data = Handle<Value>(),
+                                 AccessControl settings = DEFAULT,
+                                 PropertyAttribute attribute = None));
   bool SetAccessor(Handle<String> name,
                    AccessorGetterCallback getter,
                    AccessorSetterCallback setter = 0,
@@ -2360,7 +2355,18 @@ class V8EXPORT Function : public Object {
    * kLineOffsetNotFound if no information available.
    */
   int GetScriptColumnNumber() const;
+
+  /**
+   * Returns scriptId object.
+   * DEPRECATED: use ScriptId() instead.
+   */
   Handle<Value> GetScriptId() const;
+
+  /**
+   * Returns scriptId.
+   */
+  int ScriptId() const;
+
   ScriptOrigin GetScriptOrigin() const;
   V8_INLINE(static Function* Cast(Value* obj));
   static const int kLineOffsetNotFound;
@@ -2484,33 +2490,51 @@ class V8EXPORT ArrayBuffer : public Object {
 
 
 /**
- * A base class for an instance of TypedArray series of constructors
- * (ES6 draft 15.13.6).
+ * A base class for an instance of one of "views" over ArrayBuffer,
+ * including TypedArrays and DataView (ES6 draft 15.13).
+ *
  * This API is experimental and may change significantly.
  */
-class V8EXPORT TypedArray : public Object {
+class V8EXPORT ArrayBufferView : public Object {
  public:
   /**
    * Returns underlying ArrayBuffer.
    */
   Local<ArrayBuffer> Buffer();
   /**
-   * Byte offset in |Buffer|
+   * Byte offset in |Buffer|.
    */
   size_t ByteOffset();
   /**
-   * Numbe of elements in this typed array.
-   */
-  size_t Length();
-  /**
-   * Size of typed array in bytes (e.g. for Int16Array, 2*|Length|).
+   * Size of a view in bytes.
    */
   size_t ByteLength();
   /**
-   * Base address of typed array.
+   * Base address of a view.
    */
   void* BaseAddress();
 
+  V8_INLINE(static ArrayBufferView* Cast(Value* obj));
+
+ private:
+  ArrayBufferView();
+  static void CheckCast(Value* obj);
+};
+
+
+/**
+ * A base class for an instance of TypedArray series of constructors
+ * (ES6 draft 15.13.6).
+ * This API is experimental and may change significantly.
+ */
+class V8EXPORT TypedArray : public ArrayBufferView {
+ public:
+  /**
+   * Number of elements in this typed array
+   * (e.g. for Int16Array, |ByteLength|/2).
+   */
+  size_t Length();
+
   V8_INLINE(static TypedArray* Cast(Value* obj));
 
  private:
@@ -2663,6 +2687,22 @@ class V8EXPORT Float64Array : public TypedArray {
 
 
 /**
+ * An instance of DataView constructor (ES6 draft 15.13.7).
+ * This API is experimental and may change significantly.
+ */
+class V8EXPORT DataView : public ArrayBufferView {
+ public:
+  static Local<DataView> New(Handle<ArrayBuffer> array_buffer,
+                             size_t byte_offset, size_t length);
+  V8_INLINE(static DataView* Cast(Value* obj));
+
+ private:
+  DataView();
+  static void CheckCast(Value* obj);
+};
+
+
+/**
  * An instance of the built-in Date constructor (ECMA-262, 15.9).
  */
 class V8EXPORT Date : public Object {
@@ -3220,14 +3260,13 @@ typedef bool (*IndexedSecurityCallback)(Local<Object> host,
 class V8EXPORT FunctionTemplate : public Template {
  public:
   /** Creates a function template.*/
-  // TODO(dcarney): deprecate
-  static Local<FunctionTemplate> New(
-      InvocationCallback callback = 0,
+  V8_DEPRECATED(static Local<FunctionTemplate> New(
+      InvocationCallback callback,
       Handle<Value> data = Handle<Value>(),
       Handle<Signature> signature = Handle<Signature>(),
-      int length = 0);
+      int length = 0));
   static Local<FunctionTemplate> New(
-      FunctionCallback callback,  // TODO(dcarney): add back default param.
+      FunctionCallback callback = 0,
       Handle<Value> data = Handle<Value>(),
       Handle<Signature> signature = Handle<Signature>(),
       int length = 0);
@@ -3240,9 +3279,8 @@ class V8EXPORT FunctionTemplate : public Template {
    * callback is called whenever the function created from this
    * FunctionTemplate is called.
    */
-  // TODO(dcarney): deprecate
-  void SetCallHandler(InvocationCallback callback,
-                      Handle<Value> data = Handle<Value>());
+  V8_DEPRECATED(void SetCallHandler(InvocationCallback callback,
+                                    Handle<Value> data = Handle<Value>()));
   void SetCallHandler(FunctionCallback callback,
                       Handle<Value> data = Handle<Value>());
 
@@ -3296,6 +3334,9 @@ class V8EXPORT FunctionTemplate : public Template {
 
  private:
   FunctionTemplate();
+  // TODO(dcarney): Remove with SetCallHandler.
+  friend class v8::CallHandlerHelper;
+  void SetCallHandlerInternal(InvocationCallback callback, Handle<Value> data);
   friend class Context;
   friend class ObjectTemplate;
 };
@@ -3344,15 +3385,14 @@ class V8EXPORT ObjectTemplate : public Template {
    *   defined by FunctionTemplate::HasInstance()), an implicit TypeError is
    *   thrown and no callback is invoked.
    */
-  // TODO(dcarney): deprecate
-  void SetAccessor(Handle<String> name,
-                   AccessorGetter getter,
-                   AccessorSetter setter = 0,
-                   Handle<Value> data = Handle<Value>(),
-                   AccessControl settings = DEFAULT,
-                   PropertyAttribute attribute = None,
-                   Handle<AccessorSignature> signature =
-                       Handle<AccessorSignature>());
+  V8_DEPRECATED(void SetAccessor(Handle<String> name,
+                                 AccessorGetter getter,
+                                 AccessorSetter setter = 0,
+                                 Handle<Value> data = Handle<Value>(),
+                                 AccessControl settings = DEFAULT,
+                                 PropertyAttribute attribute = None,
+                                 Handle<AccessorSignature> signature =
+                                     Handle<AccessorSignature>()));
   void SetAccessor(Handle<String> name,
                    AccessorGetterCallback getter,
                    AccessorSetterCallback setter = 0,
@@ -3387,13 +3427,13 @@ class V8EXPORT ObjectTemplate : public Template {
    * \param data A piece of data that will be passed to the callbacks
    *   whenever they are invoked.
    */
-  // TODO(dcarney): deprecate
-  void SetNamedPropertyHandler(NamedPropertyGetter getter,
-                               NamedPropertySetter setter = 0,
-                               NamedPropertyQuery query = 0,
-                               NamedPropertyDeleter deleter = 0,
-                               NamedPropertyEnumerator enumerator = 0,
-                               Handle<Value> data = Handle<Value>());
+  V8_DEPRECATED(void SetNamedPropertyHandler(
+      NamedPropertyGetter getter,
+      NamedPropertySetter setter = 0,
+      NamedPropertyQuery query = 0,
+      NamedPropertyDeleter deleter = 0,
+      NamedPropertyEnumerator enumerator = 0,
+      Handle<Value> data = Handle<Value>()));
   void SetNamedPropertyHandler(
       NamedPropertyGetterCallback getter,
       NamedPropertySetterCallback setter = 0,
@@ -3418,13 +3458,13 @@ class V8EXPORT ObjectTemplate : public Template {
    * \param data A piece of data that will be passed to the callbacks
    *   whenever they are invoked.
    */
-  // TODO(dcarney): deprecate
-  void SetIndexedPropertyHandler(IndexedPropertyGetter getter,
-                                 IndexedPropertySetter setter = 0,
-                                 IndexedPropertyQuery query = 0,
-                                 IndexedPropertyDeleter deleter = 0,
-                                 IndexedPropertyEnumerator enumerator = 0,
-                                 Handle<Value> data = Handle<Value>());
+  V8_DEPRECATED(void SetIndexedPropertyHandler(
+      IndexedPropertyGetter getter,
+      IndexedPropertySetter setter = 0,
+      IndexedPropertyQuery query = 0,
+      IndexedPropertyDeleter deleter = 0,
+      IndexedPropertyEnumerator enumerator = 0,
+      Handle<Value> data = Handle<Value>()));
   void SetIndexedPropertyHandler(
       IndexedPropertyGetterCallback getter,
       IndexedPropertySetterCallback setter = 0,
@@ -3439,9 +3479,9 @@ class V8EXPORT ObjectTemplate : public Template {
    * behave like normal JavaScript objects that cannot be called as a
    * function.
    */
-  // TODO(dcarney): deprecate
-  void SetCallAsFunctionHandler(InvocationCallback callback,
-                                Handle<Value> data = Handle<Value>());
+  V8_DEPRECATED(void SetCallAsFunctionHandler(
+      InvocationCallback callback,
+      Handle<Value> data = Handle<Value>()));
   void SetCallAsFunctionHandler(FunctionCallback callback,
                                 Handle<Value> data = Handle<Value>());
 
@@ -3953,8 +3993,9 @@ class V8EXPORT Isolate {
   HeapProfiler* GetHeapProfiler();
 
   /**
-   * Returns CPU profiler for this isolate. Will return NULL until the isolate
-   * is initialized.
+   * Returns CPU profiler for this isolate. Will return NULL unless the isolate
+   * is initialized. It is the embedder's responsibility to stop all CPU
+   * profiling activities if it has started any.
    */
   CpuProfiler* GetCpuProfiler();
 
@@ -4437,18 +4478,25 @@ class V8EXPORT V8 {
       ReturnAddressLocationResolver return_address_resolver);
 
   /**
+   * Deprecated, use the variant with the Isolate parameter below instead.
+   */
+  V8_DEPRECATED(static bool SetFunctionEntryHook(FunctionEntryHook entry_hook));
+
+  /**
    * Allows the host application to provide the address of a function that's
    * invoked on entry to every V8-generated function.
    * Note that \p entry_hook is invoked at the very start of each
    * generated function.
    *
+   * \param isolate the isolate to operate on.
    * \param entry_hook a function that will be invoked on entry to every
    *   V8-generated function.
    * \returns true on success on supported platforms, false on failure.
-   * \note Setting a new entry hook function when one is already active will
-   *   fail.
+   * \note Setting an entry hook can only be done very early in an isolates
+   *   lifetime, and once set, the entry hook cannot be revoked.
    */
-  static bool SetFunctionEntryHook(FunctionEntryHook entry_hook);
+  static bool SetFunctionEntryHook(Isolate* isolate,
+                                   FunctionEntryHook entry_hook);
 
   /**
    * Allows the host application to provide the address of a function that is
@@ -4776,7 +4824,10 @@ class V8EXPORT TryCatch {
   v8::internal::Isolate* isolate_;
   void* next_;
   void* exception_;
-  void* message_;
+  void* message_obj_;
+  void* message_script_;
+  int message_start_pos_;
+  int message_end_pos_;
   bool is_verbose_ : 1;
   bool can_continue_ : 1;
   bool capture_message_ : 1;
@@ -5320,20 +5371,19 @@ class Internals {
   static const int kJSObjectHeaderSize = 3 * kApiPointerSize;
   static const int kFixedArrayHeaderSize = 2 * kApiPointerSize;
   static const int kContextHeaderSize = 2 * kApiPointerSize;
-  static const int kContextEmbedderDataIndex = 64;
+  static const int kContextEmbedderDataIndex = 65;
   static const int kFullStringRepresentationMask = 0x07;
   static const int kStringEncodingMask = 0x4;
   static const int kExternalTwoByteRepresentationTag = 0x02;
   static const int kExternalAsciiRepresentationTag = 0x06;
 
-  static const int kIsolateStateOffset = 0;
   static const int kIsolateEmbedderDataOffset = 1 * kApiPointerSize;
   static const int kIsolateRootsOffset = 3 * kApiPointerSize;
   static const int kUndefinedValueRootIndex = 5;
   static const int kNullValueRootIndex = 7;
   static const int kTrueValueRootIndex = 8;
   static const int kFalseValueRootIndex = 9;
-  static const int kEmptyStringRootIndex = 130;
+  static const int kEmptyStringRootIndex = 131;
 
   static const int kNodeClassIdOffset = 1 * kApiPointerSize;
   static const int kNodeFlagsOffset = 1 * kApiPointerSize + 3;
@@ -5343,14 +5393,21 @@ class Internals {
   static const int kNodeIsIndependentShift = 4;
   static const int kNodeIsPartiallyDependentShift = 5;
 
-  static const int kJSObjectType = 0xaf;
+  static const int kJSObjectType = 0xb0;
   static const int kFirstNonstringType = 0x80;
   static const int kOddballType = 0x83;
-  static const int kForeignType = 0x87;
+  static const int kForeignType = 0x88;
 
   static const int kUndefinedOddballKind = 5;
   static const int kNullOddballKind = 3;
 
+  static void CheckInitializedImpl(v8::Isolate* isolate);
+  V8_INLINE(static void CheckInitialized(v8::Isolate* isolate)) {
+#ifdef V8_ENABLE_CHECKS
+    CheckInitializedImpl(isolate);
+#endif
+  }
+
   V8_INLINE(static bool HasHeapObjectTag(internal::Object* value)) {
     return ((reinterpret_cast<intptr_t>(value) & kHeapObjectTagMask) ==
             kHeapObjectTag);
@@ -5384,11 +5441,6 @@ class Internals {
     return representation == kExternalTwoByteRepresentationTag;
   }
 
-  V8_INLINE(static bool IsInitialized(v8::Isolate* isolate)) {
-    uint8_t* addr = reinterpret_cast<uint8_t*>(isolate) + kIsolateStateOffset;
-    return *reinterpret_cast<int*>(addr) == 1;
-  }
-
   V8_INLINE(static uint8_t GetNodeFlag(internal::Object** obj, int shift)) {
       uint8_t* addr = reinterpret_cast<uint8_t*>(obj) + kNodeFlagsOffset;
       return *addr & (1 << shift);
@@ -5510,6 +5562,7 @@ Local<T> Local<T>::New(Isolate* isolate, T* that) {
 }
 
 
+#ifdef V8_USE_UNSAFE_HANDLES
 template <class T>
 Persistent<T> Persistent<T>::New(Handle<T> that) {
   return New(Isolate::GetCurrent(), that.val_);
@@ -5521,20 +5574,20 @@ Persistent<T> Persistent<T>::New(Isolate* isolate, Handle<T> that) {
   return New(Isolate::GetCurrent(), that.val_);
 }
 
-#ifndef V8_USE_UNSAFE_HANDLES
 template <class T>
 Persistent<T> Persistent<T>::New(Isolate* isolate, Persistent<T> that) {
   return New(Isolate::GetCurrent(), that.val_);
 }
 #endif
 
+
 template <class T>
-Persistent<T> Persistent<T>::New(Isolate* isolate, T* that) {
-  if (that == NULL) return Persistent<T>();
+T* Persistent<T>::New(Isolate* isolate, T* that) {
+  if (that == NULL) return NULL;
   internal::Object** p = reinterpret_cast<internal::Object**>(that);
-  return Persistent<T>(reinterpret_cast<T*>(
+  return reinterpret_cast<T*>(
       V8::GlobalizeReference(reinterpret_cast<internal::Isolate*>(isolate),
-                             p)));
+                             p));
 }
 
 
@@ -5598,6 +5651,26 @@ void Persistent<T>::MakeWeak(
 
 
 template <class T>
+template <typename S, typename P>
+void Persistent<T>::MakeWeak(
+    Isolate* isolate,
+    P* parameters,
+    typename WeakReferenceCallbacks<S, P>::Revivable callback) {
+  MakeWeak<S, P>(parameters, callback);
+}
+
+
+template <class T>
+template<typename P>
+void Persistent<T>::MakeWeak(
+    Isolate* isolate,
+    P* parameters,
+    typename WeakReferenceCallbacks<T, P>::Revivable callback) {
+  MakeWeak<P>(parameters, callback);
+}
+
+
+template <class T>
 void Persistent<T>::ClearWeak() {
   V8::ClearWeak(reinterpret_cast<internal::Object**>(this->val_));
 }
@@ -5716,11 +5789,13 @@ void ReturnValue<T>::Set(const Handle<S> handle) {
 
 template<typename T>
 void ReturnValue<T>::Set(double i) {
+  TYPE_CHECK(T, Number);
   Set(Number::New(GetIsolate(), i));
 }
 
 template<typename T>
 void ReturnValue<T>::Set(int32_t i) {
+  TYPE_CHECK(T, Integer);
   typedef internal::Internals I;
   if (V8_LIKELY(I::IsValidSmi(i))) {
     *value_ = I::IntToSmi(i);
@@ -5731,6 +5806,7 @@ void ReturnValue<T>::Set(int32_t i) {
 
 template<typename T>
 void ReturnValue<T>::Set(uint32_t i) {
+  TYPE_CHECK(T, Integer);
   typedef internal::Internals I;
   // Can't simply use INT32_MAX here for whatever reason.
   bool fits_into_int32_t = (i & (1 << 31)) == 0;
@@ -5743,6 +5819,7 @@ void ReturnValue<T>::Set(uint32_t i) {
 
 template<typename T>
 void ReturnValue<T>::Set(bool value) {
+  TYPE_CHECK(T, Boolean);
   typedef internal::Internals I;
   int root_index;
   if (value) {
@@ -5755,18 +5832,21 @@ void ReturnValue<T>::Set(bool value) {
 
 template<typename T>
 void ReturnValue<T>::SetNull() {
+  TYPE_CHECK(T, Primitive);
   typedef internal::Internals I;
   *value_ = *I::GetRoot(GetIsolate(), I::kNullValueRootIndex);
 }
 
 template<typename T>
 void ReturnValue<T>::SetUndefined() {
+  TYPE_CHECK(T, Primitive);
   typedef internal::Internals I;
   *value_ = *I::GetRoot(GetIsolate(), I::kUndefinedValueRootIndex);
 }
 
 template<typename T>
 void ReturnValue<T>::SetEmptyString() {
+  TYPE_CHECK(T, String);
   typedef internal::Internals I;
   *value_ = *I::GetRoot(GetIsolate(), I::kEmptyStringRootIndex);
 }
@@ -5936,7 +6016,7 @@ String* String::Cast(v8::Value* value) {
 Local<String> String::Empty(Isolate* isolate) {
   typedef internal::Object* S;
   typedef internal::Internals I;
-  if (!I::IsInitialized(isolate)) return Empty();
+  I::CheckInitialized(isolate);
   S* slot = I::GetRoot(isolate, I::kEmptyStringRootIndex);
   return Local<String>(reinterpret_cast<String*>(slot));
 }
@@ -6160,6 +6240,14 @@ ArrayBuffer* ArrayBuffer::Cast(v8::Value* value) {
 }
 
 
+ArrayBufferView* ArrayBufferView::Cast(v8::Value* value) {
+#ifdef V8_ENABLE_CHECKS
+  CheckCast(value);
+#endif
+  return static_cast<ArrayBufferView*>(value);
+}
+
+
 TypedArray* TypedArray::Cast(v8::Value* value) {
 #ifdef V8_ENABLE_CHECKS
   CheckCast(value);
@@ -6240,6 +6328,14 @@ Uint8ClampedArray* Uint8ClampedArray::Cast(v8::Value* value) {
 }
 
 
+DataView* DataView::Cast(v8::Value* value) {
+#ifdef V8_ENABLE_CHECKS
+  CheckCast(value);
+#endif
+  return static_cast<DataView*>(value);
+}
+
+
 Function* Function::Cast(v8::Value* value) {
 #ifdef V8_ENABLE_CHECKS
   CheckCast(value);
@@ -6289,7 +6385,7 @@ ReturnValue<T> PropertyCallbackInfo<T>::GetReturnValue() const {
 Handle<Primitive> Undefined(Isolate* isolate) {
   typedef internal::Object* S;
   typedef internal::Internals I;
-  if (!I::IsInitialized(isolate)) return Undefined();
+  I::CheckInitialized(isolate);
   S* slot = I::GetRoot(isolate, I::kUndefinedValueRootIndex);
   return Handle<Primitive>(reinterpret_cast<Primitive*>(slot));
 }
@@ -6298,7 +6394,7 @@ Handle<Primitive> Undefined(Isolate* isolate) {
 Handle<Primitive> Null(Isolate* isolate) {
   typedef internal::Object* S;
   typedef internal::Internals I;
-  if (!I::IsInitialized(isolate)) return Null();
+  I::CheckInitialized(isolate);
   S* slot = I::GetRoot(isolate, I::kNullValueRootIndex);
   return Handle<Primitive>(reinterpret_cast<Primitive*>(slot));
 }
@@ -6307,7 +6403,7 @@ Handle<Primitive> Null(Isolate* isolate) {
 Handle<Boolean> True(Isolate* isolate) {
   typedef internal::Object* S;
   typedef internal::Internals I;
-  if (!I::IsInitialized(isolate)) return True();
+  I::CheckInitialized(isolate);
   S* slot = I::GetRoot(isolate, I::kTrueValueRootIndex);
   return Handle<Boolean>(reinterpret_cast<Boolean*>(slot));
 }
@@ -6316,7 +6412,7 @@ Handle<Boolean> True(Isolate* isolate) {
 Handle<Boolean> False(Isolate* isolate) {
   typedef internal::Object* S;
   typedef internal::Internals I;
-  if (!I::IsInitialized(isolate)) return False();
+  I::CheckInitialized(isolate);
   S* slot = I::GetRoot(isolate, I::kFalseValueRootIndex);
   return Handle<Boolean>(reinterpret_cast<Boolean*>(slot));
 }
index 863a2ff..598f0a5 100644 (file)
@@ -26,6 +26,9 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 {
+  'variables': {
+    'v8_code': 1,
+  },
   'includes': ['../build/common.gypi'],
   'targets': [
     {
index 3c720a7..8b1de7e 100644 (file)
@@ -26,6 +26,9 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 {
+  'variables': {
+    'v8_code': 1,
+  },
   'includes': ['../build/common.gypi'],
   'target_defaults': {
     'type': 'executable',
index 20496fe..638a25f 100644 (file)
@@ -38,6 +38,7 @@
 #include "compiler.h"
 #include "conversions-inl.h"
 #include "counters.h"
+#include "cpu-profiler.h"
 #include "debug.h"
 #include "deoptimizer.h"
 #include "execution.h"
@@ -183,6 +184,10 @@ void i::V8::FatalProcessOutOfMemory(const char* location, bool take_snapshot) {
   heap_stats.cell_space_size = &cell_space_size;
   intptr_t cell_space_capacity;
   heap_stats.cell_space_capacity = &cell_space_capacity;
+  intptr_t property_cell_space_size;
+  heap_stats.property_cell_space_size = &property_cell_space_size;
+  intptr_t property_cell_space_capacity;
+  heap_stats.property_cell_space_capacity = &property_cell_space_capacity;
   intptr_t lo_space_size;
   heap_stats.lo_space_size = &lo_space_size;
   int global_handle_count;
@@ -296,8 +301,13 @@ static inline bool EmptyCheck(const char* location, const v8::Data* obj) {
 // --- S t a t i c s ---
 
 
-static bool InitializeHelper() {
-  if (i::Snapshot::Initialize()) return true;
+static bool InitializeHelper(i::Isolate* isolate) {
+  // If the isolate has a function entry hook, it needs to re-build all its
+  // code stubs with entry hooks embedded, so let's deserialize a snapshot.
+  if (isolate == NULL || isolate->function_entry_hook() == NULL) {
+    if (i::Snapshot::Initialize())
+      return true;
+  }
   return i::V8::Initialize(NULL);
 }
 
@@ -309,7 +319,7 @@ static inline bool EnsureInitializedForIsolate(i::Isolate* isolate,
     if (isolate->IsInitialized()) return true;
   }
   ASSERT(isolate == i::Isolate::Current());
-  return ApiCheck(InitializeHelper(), location, "Error initializing V8");
+  return ApiCheck(InitializeHelper(isolate), location, "Error initializing V8");
 }
 
 // Some initializing API functions are called early and may be
@@ -385,6 +395,9 @@ enum CompressedStartupDataItems {
   kSnapshotContext,
   kLibraries,
   kExperimentalLibraries,
+#if defined(ENABLE_I18N_SUPPORT)
+  kI18NExtension,
+#endif
   kCompressedStartupDataCount
 };
 
@@ -424,6 +437,17 @@ void V8::GetCompressedStartupData(StartupData* compressed_data) {
       exp_libraries_source.length();
   compressed_data[kExperimentalLibraries].raw_size =
       i::ExperimentalNatives::GetRawScriptsSize();
+
+#if defined(ENABLE_I18N_SUPPORT)
+  i::Vector<const ii:byte> i18n_extension_source =
+      i::I18NNatives::GetScriptsSource();
+  compressed_data[kI18NExtension].data =
+      reinterpret_cast<const char*>(i18n_extension_source.start());
+  compressed_data[kI18NExtension].compressed_size =
+      i18n_extension_source.length();
+  compressed_data[kI18NExtension].raw_size =
+      i::I18NNatives::GetRawScriptsSize();
+#endif
 #endif
 }
 
@@ -453,6 +477,15 @@ void V8::SetDecompressedStartupData(StartupData* decompressed_data) {
       decompressed_data[kExperimentalLibraries].data,
       decompressed_data[kExperimentalLibraries].raw_size);
   i::ExperimentalNatives::SetRawScriptsSource(exp_libraries_source);
+
+#if defined(ENABLE_I18N_SUPPORT)
+  ASSERT_EQ(i::I18NNatives::GetRawScriptsSize(),
+            decompressed_data[kI18NExtension].raw_size);
+  i::Vector<const char> i18n_extension_source(
+      decompressed_data[kI18NExtension].data,
+      decompressed_data[kI18NExtension].raw_size);
+  i::I18NNatives::SetRawScriptsSource(i18n_extension_source);
+#endif
 #endif
 }
 
@@ -548,8 +581,7 @@ v8::Handle<Primitive> Undefined() {
   if (!EnsureInitializedForIsolate(isolate, "v8::Undefined()")) {
     return v8::Handle<v8::Primitive>();
   }
-  return v8::Handle<Primitive>(ToApi<Primitive>(
-      isolate->factory()->undefined_value()));
+  return ToApiHandle<Primitive>(isolate->factory()->undefined_value());
 }
 
 
@@ -558,8 +590,7 @@ v8::Handle<Primitive> Null() {
   if (!EnsureInitializedForIsolate(isolate, "v8::Null()")) {
     return v8::Handle<v8::Primitive>();
   }
-  return v8::Handle<Primitive>(
-      ToApi<Primitive>(isolate->factory()->null_value()));
+  return ToApiHandle<Primitive>(isolate->factory()->null_value());
 }
 
 
@@ -568,8 +599,7 @@ v8::Handle<Boolean> True() {
   if (!EnsureInitializedForIsolate(isolate, "v8::True()")) {
     return v8::Handle<Boolean>();
   }
-  return v8::Handle<Boolean>(
-      ToApi<Boolean>(isolate->factory()->true_value()));
+  return ToApiHandle<Boolean>(isolate->factory()->true_value());
 }
 
 
@@ -578,8 +608,7 @@ v8::Handle<Boolean> False() {
   if (!EnsureInitializedForIsolate(isolate, "v8::False()")) {
     return v8::Handle<Boolean>();
   }
-  return v8::Handle<Boolean>(
-      ToApi<Boolean>(isolate->factory()->false_value()));
+  return ToApiHandle<Boolean>(isolate->factory()->false_value());
 }
 
 
@@ -949,7 +978,7 @@ Local<ObjectTemplate> FunctionTemplate::PrototypeTemplate() {
     result = Utils::OpenHandle(*ObjectTemplate::New());
     Utils::OpenHandle(this)->set_prototype_template(*result);
   }
-  return Local<ObjectTemplate>(ToApi<ObjectTemplate>(result));
+  return ToApiHandle<ObjectTemplate>(result);
 }
 
 
@@ -961,6 +990,22 @@ void FunctionTemplate::Inherit(v8::Handle<FunctionTemplate> value) {
 }
 
 
+// TODO(dcarney): Remove this abstraction when old callbacks are removed.
+class CallHandlerHelper {
+ public:
+  static inline void Set(Local<FunctionTemplate> function_template,
+                         InvocationCallback callback,
+                         v8::Handle<Value> data) {
+    function_template->SetCallHandlerInternal(callback, data);
+  }
+  static inline void Set(Local<FunctionTemplate> function_template,
+                         FunctionCallback callback,
+                         v8::Handle<Value> data) {
+    function_template->SetCallHandler(callback, data);
+  }
+};
+
+
 template<typename Callback>
 static Local<FunctionTemplate> FunctionTemplateNew(
     Callback callback,
@@ -981,7 +1026,7 @@ static Local<FunctionTemplate> FunctionTemplateNew(
   obj->set_serial_number(i::Smi::FromInt(next_serial_number));
   if (callback != 0) {
     if (data.IsEmpty()) data = v8::Undefined();
-    Utils::ToLocal(obj)->SetCallHandler(callback, data);
+    CallHandlerHelper::Set(Utils::ToLocal(obj), callback, data);
   }
   obj->set_length(length);
   obj->set_undetectable(false);
@@ -1044,8 +1089,7 @@ template<typename Operation>
 static Local<Operation> NewDescriptor(
     Isolate* isolate,
     const i::DeclaredAccessorDescriptorData& data,
-    Data* previous_descriptor
-    ) {
+    Data* previous_descriptor) {
   i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate);
   i::Handle<i::DeclaredAccessorDescriptor> previous =
       i::Handle<i::DeclaredAccessorDescriptor>();
@@ -1055,8 +1099,7 @@ static Local<Operation> NewDescriptor(
   }
   i::Handle<i::DeclaredAccessorDescriptor> descriptor =
       i::DeclaredAccessorDescriptor::Create(internal_isolate, data, previous);
-  return Local<Operation>(
-      reinterpret_cast<Operation*>(*Utils::ToLocal(descriptor)));
+  return Utils::Convert<i::DeclaredAccessorDescriptor, Operation>(descriptor);
 }
 
 
@@ -1227,6 +1270,11 @@ void FunctionTemplate::SetCallHandler(InvocationCallback callback,
   FunctionTemplateSetCallHandler(this, callback, data);
 }
 
+void FunctionTemplate::SetCallHandlerInternal(InvocationCallback callback,
+                                              v8::Handle<Value> data) {
+  FunctionTemplateSetCallHandler(this, callback, data);
+}
+
 void FunctionTemplate::SetCallHandler(FunctionCallback callback,
                                       v8::Handle<Value> data) {
   FunctionTemplateSetCallHandler(this, callback, data);
@@ -1297,13 +1345,14 @@ Local<ObjectTemplate> FunctionTemplate::InstanceTemplate() {
       || EmptyCheck("v8::FunctionTemplate::InstanceTemplate()", this))
     return Local<ObjectTemplate>();
   ENTER_V8(isolate);
-  if (Utils::OpenHandle(this)->instance_template()->IsUndefined()) {
+  i::Handle<i::FunctionTemplateInfo> handle = Utils::OpenHandle(this);
+  if (handle->instance_template()->IsUndefined()) {
     Local<ObjectTemplate> templ =
-        ObjectTemplate::New(v8::Handle<FunctionTemplate>(this));
-    Utils::OpenHandle(this)->set_instance_template(*Utils::OpenHandle(*templ));
+        ObjectTemplate::New(ToApiHandle<FunctionTemplate>(handle));
+    handle->set_instance_template(*Utils::OpenHandle(*templ));
   }
-  i::Handle<i::ObjectTemplateInfo> result(i::ObjectTemplateInfo::cast(
-        Utils::OpenHandle(this)->instance_template()));
+  i::Handle<i::ObjectTemplateInfo> result(
+      i::ObjectTemplateInfo::cast(handle->instance_template()));
   return Utils::ToLocal(result);
 }
 
@@ -1901,7 +1950,7 @@ Local<Script> Script::New(v8::Handle<String> source,
     raw_result = *result;
   }
   i::Handle<i::SharedFunctionInfo> result(raw_result, isolate);
-  return Local<Script>(ToApi<Script>(result));
+  return ToApiHandle<Script>(result);
 }
 
 
@@ -1930,7 +1979,7 @@ Local<Script> Script::Compile(v8::Handle<String> source,
       isolate->factory()->NewFunctionFromSharedFunctionInfo(
           function,
           isolate->global_context());
-  return Local<Script>(ToApi<Script>(result));
+  return ToApiHandle<Script>(result);
 }
 
 
@@ -2006,6 +2055,19 @@ Local<Value> Script::Id() {
 }
 
 
+int Script::GetId() {
+  i::Isolate* isolate = i::Isolate::Current();
+  ON_BAILOUT(isolate, "v8::Script::Id()", return -1);
+  LOG_API(isolate, "Script::Id");
+  {
+    i::HandleScope scope(isolate);
+    i::Handle<i::SharedFunctionInfo> function_info = OpenScript(this);
+    i::Handle<i::Script> script(i::Script::cast(function_info->script()));
+    return script->id()->value();
+  }
+}
+
+
 int Script::GetLineNumber(int code_pos) {
   i::Isolate* isolate = i::Isolate::Current();
   ON_BAILOUT(isolate, "v8::Script::GetLineNumber()", return -1);
@@ -2054,13 +2116,12 @@ void Script::SetData(v8::Handle<String> data) {
 v8::TryCatch::TryCatch()
     : isolate_(i::Isolate::Current()),
       next_(isolate_->try_catch_handler_address()),
-      exception_(isolate_->heap()->the_hole_value()),
-      message_(i::Smi::FromInt(0)),
       is_verbose_(false),
       can_continue_(true),
       capture_message_(true),
       rethrow_(false),
       has_terminated_(false) {
+  Reset();
   isolate_->RegisterTryCatchHandler(this);
 }
 
@@ -2070,8 +2131,17 @@ v8::TryCatch::~TryCatch() {
   if (rethrow_) {
     v8::HandleScope scope(reinterpret_cast<Isolate*>(isolate_));
     v8::Local<v8::Value> exc = v8::Local<v8::Value>::New(Exception());
+    if (HasCaught() && capture_message_) {
+      // If an exception was caught and rethrow_ is indicated, the saved
+      // message, script, and location need to be restored to Isolate TLS
+      // for reuse.  capture_message_ needs to be disabled so that DoThrow()
+      // does not create a new message.
+      isolate_->thread_local_top()->rethrowing_message_ = true;
+      isolate_->RestorePendingMessageFromTryCatch(this);
+    }
     isolate_->UnregisterTryCatchHandler(this);
     v8::ThrowException(exc);
+    ASSERT(!isolate_->thread_local_top()->rethrowing_message_);
   } else {
     isolate_->UnregisterTryCatchHandler(this);
   }
@@ -2132,8 +2202,9 @@ v8::Local<Value> v8::TryCatch::StackTrace() const {
 
 v8::Local<v8::Message> v8::TryCatch::Message() const {
   ASSERT(isolate_ == i::Isolate::Current());
-  if (HasCaught() && message_ != i::Smi::FromInt(0)) {
-    i::Object* message = reinterpret_cast<i::Object*>(message_);
+  i::Object* message = reinterpret_cast<i::Object*>(message_obj_);
+  ASSERT(message->IsJSMessageObject() || message->IsTheHole());
+  if (HasCaught() && !message->IsTheHole()) {
     return v8::Utils::MessageToLocal(i::Handle<i::Object>(message, isolate_));
   } else {
     return v8::Local<v8::Message>();
@@ -2143,8 +2214,12 @@ v8::Local<v8::Message> v8::TryCatch::Message() const {
 
 void v8::TryCatch::Reset() {
   ASSERT(isolate_ == i::Isolate::Current());
-  exception_ = isolate_->heap()->the_hole_value();
-  message_ = i::Smi::FromInt(0);
+  i::Object* the_hole = isolate_->heap()->the_hole_value();
+  exception_ = the_hole;
+  message_obj_ = the_hole;
+  message_script_ = the_hole;
+  message_start_pos_ = 0;
+  message_end_pos_ = 0;
 }
 
 
@@ -2574,6 +2649,11 @@ bool Value::IsArrayBuffer() const {
 }
 
 
+bool Value::IsArrayBufferView() const {
+  return Utils::OpenHandle(this)->IsJSArrayBufferView();
+}
+
+
 bool Value::IsTypedArray() const {
   if (IsDeadCheck(i::Isolate::Current(), "v8::Value::IsArrayBuffer()"))
     return false;
@@ -2607,6 +2687,11 @@ TYPED_ARRAY_LIST(VALUE_IS_TYPED_ARRAY)
 #undef VALUE_IS_TYPED_ARRAY
 
 
+bool Value::IsDataView() const {
+  return Utils::OpenHandle(this)->IsJSDataView();
+}
+
+
 bool Value::IsObject() const {
   if (IsDeadCheck(i::Isolate::Current(), "v8::Value::IsObject()")) return false;
   return Utils::OpenHandle(this)->IsJSObject();
@@ -2773,7 +2858,7 @@ Local<String> Value::ToString() const {
     str = i::Execution::ToString(obj, &has_pending_exception);
     EXCEPTION_BAILOUT_CHECK(isolate, Local<String>());
   }
-  return Local<String>(ToApi<String>(str));
+  return ToApiHandle<String>(str);
 }
 
 
@@ -2793,7 +2878,7 @@ Local<String> Value::ToDetailString() const {
     str = i::Execution::ToDetailString(obj, &has_pending_exception);
     EXCEPTION_BAILOUT_CHECK(isolate, Local<String>());
   }
-  return Local<String>(ToApi<String>(str));
+  return ToApiHandle<String>(str);
 }
 
 
@@ -2813,14 +2898,14 @@ Local<v8::Object> Value::ToObject() const {
     val = i::Execution::ToObject(obj, &has_pending_exception);
     EXCEPTION_BAILOUT_CHECK(isolate, Local<v8::Object>());
   }
-  return Local<v8::Object>(ToApi<Object>(val));
+  return ToApiHandle<Object>(val);
 }
 
 
 Local<Boolean> Value::ToBoolean() const {
   i::Handle<i::Object> obj = Utils::OpenHandle(this);
   if (obj->IsBoolean()) {
-    return Local<Boolean>(ToApi<Boolean>(obj));
+    return ToApiHandle<Boolean>(obj);
   } else {
     i::Isolate* isolate = i::Isolate::Current();
     if (IsDeadCheck(isolate, "v8::Value::ToBoolean()")) {
@@ -2830,7 +2915,7 @@ Local<Boolean> Value::ToBoolean() const {
     ENTER_V8(isolate);
     i::Handle<i::Object> val =
         isolate->factory()->ToBoolean(obj->BooleanValue());
-    return Local<Boolean>(ToApi<Boolean>(val));
+    return ToApiHandle<Boolean>(val);
   }
 }
 
@@ -2851,7 +2936,7 @@ Local<Number> Value::ToNumber() const {
     num = i::Execution::ToNumber(obj, &has_pending_exception);
     EXCEPTION_BAILOUT_CHECK(isolate, Local<Number>());
   }
-  return Local<Number>(ToApi<Number>(num));
+  return ToApiHandle<Number>(num);
 }
 
 
@@ -2869,7 +2954,15 @@ Local<Integer> Value::ToInteger() const {
     num = i::Execution::ToInteger(obj, &has_pending_exception);
     EXCEPTION_BAILOUT_CHECK(isolate, Local<Integer>());
   }
-  return Local<Integer>(ToApi<Integer>(num));
+  return ToApiHandle<Integer>(num);
+}
+
+
+void i::Internals::CheckInitializedImpl(v8::Isolate* external_isolate) {
+  i::Isolate* isolate = reinterpret_cast<i::Isolate*>(external_isolate);
+  ApiCheck(isolate != NULL && isolate->IsInitialized() && !i::V8::IsDead(),
+           "v8::internal::Internals::CheckInitialized()",
+           "Isolate is not initialized or V8 has died");
 }
 
 
@@ -2953,6 +3046,14 @@ void v8::ArrayBuffer::CheckCast(Value* that) {
 }
 
 
+void v8::ArrayBufferView::CheckCast(Value* that) {
+  i::Handle<i::Object> obj = Utils::OpenHandle(that);
+  ApiCheck(obj->IsJSArrayBufferView(),
+           "v8::ArrayBufferView::Cast()",
+           "Could not convert to ArrayBufferView");
+}
+
+
 void v8::TypedArray::CheckCast(Value* that) {
   if (IsDeadCheck(i::Isolate::Current(), "v8::TypedArray::Cast()")) return;
   i::Handle<i::Object> obj = Utils::OpenHandle(that);
@@ -2979,6 +3080,14 @@ TYPED_ARRAY_LIST(CHECK_TYPED_ARRAY_CAST)
 #undef CHECK_TYPED_ARRAY_CAST
 
 
+void v8::DataView::CheckCast(Value* that) {
+  i::Handle<i::Object> obj = Utils::OpenHandle(that);
+  ApiCheck(obj->IsJSDataView(),
+           "v8::DataView::Cast()",
+           "Could not convert to DataView");
+}
+
+
 void v8::Date::CheckCast(v8::Value* that) {
   i::Isolate* isolate = i::Isolate::Current();
   if (IsDeadCheck(isolate, "v8::Date::Cast()")) return;
@@ -3099,7 +3208,7 @@ Local<Int32> Value::ToInt32() const {
     num = i::Execution::ToInt32(obj, &has_pending_exception);
     EXCEPTION_BAILOUT_CHECK(isolate, Local<Int32>());
   }
-  return Local<Int32>(ToApi<Int32>(num));
+  return ToApiHandle<Int32>(num);
 }
 
 
@@ -3117,7 +3226,7 @@ Local<Uint32> Value::ToUint32() const {
     num = i::Execution::ToUint32(obj, &has_pending_exception);
     EXCEPTION_BAILOUT_CHECK(isolate, Local<Uint32>());
   }
-  return Local<Uint32>(ToApi<Uint32>(num));
+  return ToApiHandle<Uint32>(num);
 }
 
 
@@ -3410,7 +3519,7 @@ bool v8::Object::SetPrototype(Handle<Value> value) {
   // to propagate outside.
   TryCatch try_catch;
   EXCEPTION_PREAMBLE(isolate);
-  i::Handle<i::Object> result = i::SetPrototype(self, value_obj);
+  i::Handle<i::Object> result = i::JSObject::SetPrototype(self, value_obj);
   has_pending_exception = result.is_null();
   EXCEPTION_BAILOUT_CHECK(isolate, false);
   return true;
@@ -3866,7 +3975,7 @@ v8::Local<v8::Value> v8::Object::GetHiddenValue(v8::Handle<v8::String> key) {
   i::Handle<i::String> key_string =
       isolate->factory()->InternalizeString(key_obj);
   i::Handle<i::Object> result(self->GetHiddenProperty(*key_string), isolate);
-  if (result->IsUndefined()) return v8::Local<v8::Value>();
+  if (result->IsTheHole()) return v8::Local<v8::Value>();
   return Utils::ToLocal(result);
 }
 
@@ -4280,6 +4389,7 @@ int Function::GetScriptColumnNumber() const {
   return kLineOffsetNotFound;
 }
 
+
 Handle<Value> Function::GetScriptId() const {
   i::Handle<i::JSFunction> func = Utils::OpenHandle(this);
   if (!func->shared()->script()->IsScript())
@@ -4288,6 +4398,15 @@ Handle<Value> Function::GetScriptId() const {
   return Utils::ToLocal(i::Handle<i::Object>(script->id(), func->GetIsolate()));
 }
 
+
+int Function::ScriptId() const {
+  i::Handle<i::JSFunction> func = Utils::OpenHandle(this);
+  if (!func->shared()->script()->IsScript()) return v8::Script::kNoScriptId;
+  i::Handle<i::Script> script(i::Script::cast(func->shared()->script()));
+  return script->id()->value();
+}
+
+
 int String::Length() const {
   i::Handle<i::String> str = Utils::OpenHandle(this);
   if (IsDeadCheck(str->GetIsolate(), "v8::String::Length()")) return 0;
@@ -5132,7 +5251,7 @@ bool v8::V8::Initialize() {
   if (isolate != NULL && isolate->IsInitialized()) {
     return true;
   }
-  return InitializeHelper();
+  return InitializeHelper(isolate);
 }
 
 
@@ -5148,7 +5267,30 @@ void v8::V8::SetReturnAddressLocationResolver(
 
 
 bool v8::V8::SetFunctionEntryHook(FunctionEntryHook entry_hook) {
-  return i::ProfileEntryHookStub::SetFunctionEntryHook(entry_hook);
+  return SetFunctionEntryHook(Isolate::GetCurrent(), entry_hook);
+}
+
+
+bool v8::V8::SetFunctionEntryHook(Isolate* ext_isolate,
+                                  FunctionEntryHook entry_hook) {
+  ASSERT(ext_isolate != NULL);
+  ASSERT(entry_hook != NULL);
+
+  i::Isolate* isolate = reinterpret_cast<i::Isolate*>(ext_isolate);
+
+  // The entry hook can only be set before the Isolate is initialized, as
+  // otherwise the Isolate's code stubs generated at initialization won't
+  // contain entry hooks.
+  if (isolate->IsInitialized())
+    return false;
+
+  // Setting an entry hook is a one-way operation, once set, it cannot be
+  // changed or unset.
+  if (isolate->function_entry_hook() != NULL)
+    return false;
+
+  isolate->set_function_entry_hook(entry_hook);
+  return true;
 }
 
 
@@ -5359,7 +5501,7 @@ static i::Handle<i::Context> CreateEnvironment(
   return env;
 }
 
-
+#ifdef V8_USE_UNSAFE_HANDLES
 Persistent<Context> v8::Context::New(
     v8::ExtensionConfiguration* extensions,
     v8::Handle<ObjectTemplate> global_template,
@@ -5376,6 +5518,7 @@ Persistent<Context> v8::Context::New(
   if (env.is_null()) return Persistent<Context>();
   return Persistent<Context>::New(external_isolate, Utils::ToLocal(env));
 }
+#endif
 
 
 Local<Context> v8::Context::New(
@@ -6161,11 +6304,17 @@ void v8::ArrayBuffer::Neuter() {
   LOG_API(obj->GetIsolate(), "v8::ArrayBuffer::Neuter()");
   ENTER_V8(isolate);
 
-  for (i::Handle<i::Object> array_obj(obj->weak_first_array(), isolate);
-       *array_obj != i::Smi::FromInt(0);) {
-    i::Handle<i::JSTypedArray> typed_array(i::JSTypedArray::cast(*array_obj));
-    typed_array->Neuter();
-    array_obj = i::handle(typed_array->weak_next(), isolate);
+  for (i::Handle<i::Object> view_obj(obj->weak_first_view(), isolate);
+       !view_obj->IsUndefined();) {
+    i::Handle<i::JSArrayBufferView> view(i::JSArrayBufferView::cast(*view_obj));
+    if (view->IsJSTypedArray()) {
+      i::JSTypedArray::cast(*view)->Neuter();
+    } else if (view->IsJSDataView()) {
+      i::JSDataView::cast(*view)->Neuter();
+    } else {
+      UNREACHABLE();
+    }
+    view_obj = i::handle(view->weak_next(), isolate);
   }
   obj->Neuter();
 }
@@ -6203,33 +6352,35 @@ Local<ArrayBuffer> v8::ArrayBuffer::New(void* data, size_t byte_length) {
 }
 
 
-Local<ArrayBuffer> v8::TypedArray::Buffer() {
-  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
-  if (IsDeadCheck(isolate, "v8::TypedArray::Buffer()"))
-    return Local<ArrayBuffer>();
-  i::Handle<i::JSTypedArray> obj = Utils::OpenHandle(this);
+Local<ArrayBuffer> v8::ArrayBufferView::Buffer() {
+  i::Handle<i::JSArrayBufferView> obj = Utils::OpenHandle(this);
   ASSERT(obj->buffer()->IsJSArrayBuffer());
   i::Handle<i::JSArrayBuffer> buffer(i::JSArrayBuffer::cast(obj->buffer()));
   return Utils::ToLocal(buffer);
 }
 
 
-size_t v8::TypedArray::ByteOffset() {
-  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
-  if (IsDeadCheck(isolate, "v8::TypedArray::ByteOffset()")) return 0;
-  i::Handle<i::JSTypedArray> obj = Utils::OpenHandle(this);
+size_t v8::ArrayBufferView::ByteOffset() {
+  i::Handle<i::JSArrayBufferView> obj = Utils::OpenHandle(this);
   return static_cast<size_t>(obj->byte_offset()->Number());
 }
 
 
-size_t v8::TypedArray::ByteLength() {
-  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
-  if (IsDeadCheck(isolate, "v8::TypedArray::ByteLength()")) return 0;
-  i::Handle<i::JSTypedArray> obj = Utils::OpenHandle(this);
+size_t v8::ArrayBufferView::ByteLength() {
+  i::Handle<i::JSArrayBufferView> obj = Utils::OpenHandle(this);
   return static_cast<size_t>(obj->byte_length()->Number());
 }
 
 
+void* v8::ArrayBufferView::BaseAddress() {
+  i::Handle<i::JSArrayBufferView> obj = Utils::OpenHandle(this);
+  i::Handle<i::JSArrayBuffer> buffer(i::JSArrayBuffer::cast(obj->buffer()));
+  void* buffer_data = buffer->backing_store();
+  size_t byte_offset = static_cast<size_t>(obj->byte_offset()->Number());
+  return static_cast<uint8_t*>(buffer_data) + byte_offset;
+}
+
+
 size_t v8::TypedArray::Length() {
   i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
   if (IsDeadCheck(isolate, "v8::TypedArray::Length()")) return 0;
@@ -6238,16 +6389,28 @@ size_t v8::TypedArray::Length() {
 }
 
 
-void* v8::TypedArray::BaseAddress() {
-  i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
-  if (IsDeadCheck(isolate, "v8::TypedArray::BaseAddress()")) return NULL;
-  i::Handle<i::JSTypedArray> obj = Utils::OpenHandle(this);
-  i::Handle<i::JSArrayBuffer> buffer(i::JSArrayBuffer::cast(obj->buffer()));
-  void* buffer_data = buffer->backing_store();
-  size_t byte_offset = static_cast<size_t>(obj->byte_offset()->Number());
-  return static_cast<uint8_t*>(buffer_data) + byte_offset;
-}
+static inline void SetupArrayBufferView(
+    i::Isolate* isolate,
+    i::Handle<i::JSArrayBufferView> obj,
+    i::Handle<i::JSArrayBuffer> buffer,
+    size_t byte_offset,
+    size_t byte_length) {
+  ASSERT(byte_offset + byte_length <=
+      static_cast<size_t>(buffer->byte_length()->Number()));
+
+  obj->set_buffer(*buffer);
+
+  obj->set_weak_next(buffer->weak_first_view());
+  buffer->set_weak_first_view(*obj);
+
+  i::Handle<i::Object> byte_offset_object =
+    isolate->factory()->NewNumberFromSize(byte_offset);
+  obj->set_byte_offset(*byte_offset_object);
 
+  i::Handle<i::Object> byte_length_object =
+    isolate->factory()->NewNumberFromSize(byte_length);
+  obj->set_byte_length(*byte_length_object);
+}
 
 template<typename ElementType,
          ExternalArrayType array_type,
@@ -6260,24 +6423,12 @@ i::Handle<i::JSTypedArray> NewTypedArray(
   i::Handle<i::JSArrayBuffer> buffer = Utils::OpenHandle(*array_buffer);
 
   ASSERT(byte_offset % sizeof(ElementType) == 0);
-  ASSERT(byte_offset + length * sizeof(ElementType) <=
-      static_cast<size_t>(buffer->byte_length()->Number()));
 
-  obj->set_buffer(*buffer);
+  SetupArrayBufferView(
+      isolate, obj, buffer, byte_offset, length * sizeof(ElementType));
 
-  obj->set_weak_next(buffer->weak_first_array());
-  buffer->set_weak_first_array(*obj);
-
-  i::Handle<i::Object> byte_offset_object = isolate->factory()->NewNumber(
-        static_cast<double>(byte_offset));
-  obj->set_byte_offset(*byte_offset_object);
-
-  i::Handle<i::Object> byte_length_object = isolate->factory()->NewNumber(
-        static_cast<double>(length * sizeof(ElementType)));
-  obj->set_byte_length(*byte_length_object);
-
-  i::Handle<i::Object> length_object = isolate->factory()->NewNumber(
-        static_cast<double>(length));
+  i::Handle<i::Object> length_object =
+    isolate->factory()->NewNumberFromSize(length);
   obj->set_length(*length_object);
 
   i::Handle<i::ExternalArray> elements =
@@ -6326,6 +6477,20 @@ TYPED_ARRAY_NEW(Float64Array, double, kExternalDoubleArray,
 
 #undef TYPED_ARRAY_NEW
 
+Local<DataView> DataView::New(Handle<ArrayBuffer> array_buffer,
+                              size_t byte_offset, size_t byte_length) {
+  i::Isolate* isolate = i::Isolate::Current();
+  EnsureInitializedForIsolate(
+      isolate, "v8::DataView::New(void*, size_t, size_t)");
+  LOG_API(isolate, "v8::DataView::New(void*, size_t, size_t)");
+  ENTER_V8(isolate);
+  i::Handle<i::JSDataView> obj = isolate->factory()->NewJSDataView();
+  i::Handle<i::JSArrayBuffer> buffer = Utils::OpenHandle(*array_buffer);
+  SetupArrayBufferView(
+      isolate, obj, buffer, byte_offset, byte_length);
+  return Utils::ToLocal(obj);
+}
+
 
 Local<Symbol> v8::Symbol::New(Isolate* isolate) {
   i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
@@ -6538,10 +6703,11 @@ CpuProfiler* Isolate::GetCpuProfiler() {
 
 v8::Local<v8::Context> Isolate::GetCurrentContext() {
   i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(this);
-  i::Handle<i::Object> current = internal_isolate->native_context();
-  if (current.is_null()) return Local<Context>();
-  i::Handle<i::Context> context = i::Handle<i::Context>::cast(current);
-  return Utils::ToLocal(context);
+  i::Context* context = internal_isolate->context();
+  if (context == NULL) return Local<Context>();
+  i::Context* native_context = context->global_object()->native_context();
+  if (native_context == NULL) return Local<Context>();
+  return Utils::ToLocal(i::Handle<i::Context>(native_context));
 }
 
 
@@ -6549,24 +6715,27 @@ void Isolate::SetObjectGroupId(const Persistent<Value>& object,
                                UniqueId id) {
   i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(this);
   internal_isolate->global_handles()->SetObjectGroupId(
-      reinterpret_cast<i::Object**>(*object), id);
+      Utils::OpenPersistent(object).location(),
+      id);
 }
 
 
 void Isolate::SetReferenceFromGroup(UniqueId id,
                                     const Persistent<Value>& object) {
   i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(this);
-  internal_isolate->global_handles()
-      ->SetReferenceFromGroup(id, reinterpret_cast<i::Object**>(*object));
+  internal_isolate->global_handles()->SetReferenceFromGroup(
+      id,
+      Utils::OpenPersistent(object).location());
 }
 
 
 void Isolate::SetReference(const Persistent<Object>& parent,
                            const Persistent<Value>& child) {
   i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(this);
+  i::Object** parent_location = Utils::OpenPersistent(parent).location();
   internal_isolate->global_handles()->SetReference(
-      i::Handle<i::HeapObject>::cast(Utils::OpenHandle(*parent)).location(),
-      reinterpret_cast<i::Object**>(*child));
+      reinterpret_cast<i::HeapObject**>(parent_location),
+      Utils::OpenPersistent(child).location());
 }
 
 
@@ -7171,22 +7340,31 @@ Handle<String> CpuProfileNode::GetFunctionName() const {
   const i::ProfileNode* node = reinterpret_cast<const i::ProfileNode*>(this);
   const i::CodeEntry* entry = node->entry();
   if (!entry->has_name_prefix()) {
-    return Handle<String>(ToApi<String>(
-        isolate->factory()->InternalizeUtf8String(entry->name())));
+    return ToApiHandle<String>(
+        isolate->factory()->InternalizeUtf8String(entry->name()));
   } else {
-    return Handle<String>(ToApi<String>(isolate->factory()->NewConsString(
+    return ToApiHandle<String>(isolate->factory()->NewConsString(
         isolate->factory()->InternalizeUtf8String(entry->name_prefix()),
-        isolate->factory()->InternalizeUtf8String(entry->name()))));
+        isolate->factory()->InternalizeUtf8String(entry->name())));
   }
 }
 
 
+int CpuProfileNode::GetScriptId() const {
+  i::Isolate* isolate = i::Isolate::Current();
+  IsDeadCheck(isolate, "v8::CpuProfileNode::GetScriptId");
+  const i::ProfileNode* node = reinterpret_cast<const i::ProfileNode*>(this);
+  const i::CodeEntry* entry = node->entry();
+  return entry->script_id();
+}
+
+
 Handle<String> CpuProfileNode::GetScriptResourceName() const {
   i::Isolate* isolate = i::Isolate::Current();
   IsDeadCheck(isolate, "v8::CpuProfileNode::GetScriptResourceName");
   const i::ProfileNode* node = reinterpret_cast<const i::ProfileNode*>(this);
-  return Handle<String>(ToApi<String>(isolate->factory()->InternalizeUtf8String(
-      node->entry()->resource_name())));
+  return ToApiHandle<String>(isolate->factory()->InternalizeUtf8String(
+      node->entry()->resource_name()));
 }
 
 
@@ -7277,8 +7455,8 @@ Handle<String> CpuProfile::GetTitle() const {
   i::Isolate* isolate = i::Isolate::Current();
   IsDeadCheck(isolate, "v8::CpuProfile::GetTitle");
   const i::CpuProfile* profile = reinterpret_cast<const i::CpuProfile*>(this);
-  return Handle<String>(ToApi<String>(isolate->factory()->InternalizeUtf8String(
-      profile->title())));
+  return ToApiHandle<String>(isolate->factory()->InternalizeUtf8String(
+      profile->title()));
 }
 
 
@@ -7301,33 +7479,11 @@ int CpuProfile::GetSamplesCount() const {
 }
 
 
-int CpuProfiler::GetProfilesCount() {
-  i::Isolate* isolate = i::Isolate::Current();
-  IsDeadCheck(isolate, "v8::CpuProfiler::GetProfilesCount");
-  i::CpuProfiler* profiler = isolate->cpu_profiler();
-  ASSERT(profiler != NULL);
-  return profiler->GetProfilesCount();
-}
-
-
 int CpuProfiler::GetProfileCount() {
   return reinterpret_cast<i::CpuProfiler*>(this)->GetProfilesCount();
 }
 
 
-const CpuProfile* CpuProfiler::GetProfile(int index,
-                                          Handle<Value> security_token) {
-  i::Isolate* isolate = i::Isolate::Current();
-  IsDeadCheck(isolate, "v8::CpuProfiler::GetProfile");
-  i::CpuProfiler* profiler = isolate->cpu_profiler();
-  ASSERT(profiler != NULL);
-  return reinterpret_cast<const CpuProfile*>(
-      profiler->GetProfile(
-          security_token.IsEmpty() ? NULL : *Utils::OpenHandle(*security_token),
-          index));
-}
-
-
 const CpuProfile* CpuProfiler::GetCpuProfile(int index,
                                              Handle<Value> security_token) {
   return reinterpret_cast<const CpuProfile*>(
@@ -7343,19 +7499,6 @@ const CpuProfile* CpuProfiler::GetCpuProfile(int index) {
 }
 
 
-const CpuProfile* CpuProfiler::FindProfile(unsigned uid,
-                                           Handle<Value> security_token) {
-  i::Isolate* isolate = i::Isolate::Current();
-  IsDeadCheck(isolate, "v8::CpuProfiler::FindProfile");
-  i::CpuProfiler* profiler = isolate->cpu_profiler();
-  ASSERT(profiler != NULL);
-  return reinterpret_cast<const CpuProfile*>(
-      profiler->FindProfile(
-          security_token.IsEmpty() ? NULL : *Utils::OpenHandle(*security_token),
-          uid));
-}
-
-
 const CpuProfile* CpuProfiler::FindCpuProfile(unsigned uid,
                                               Handle<Value> security_token) {
   return reinterpret_cast<const CpuProfile*>(
@@ -7365,34 +7508,12 @@ const CpuProfile* CpuProfiler::FindCpuProfile(unsigned uid,
 }
 
 
-void CpuProfiler::StartProfiling(Handle<String> title, bool record_samples) {
-  i::Isolate* isolate = i::Isolate::Current();
-  IsDeadCheck(isolate, "v8::CpuProfiler::StartProfiling");
-  i::CpuProfiler* profiler = isolate->cpu_profiler();
-  ASSERT(profiler != NULL);
-  profiler->StartProfiling(*Utils::OpenHandle(*title), record_samples);
-}
-
-
 void CpuProfiler::StartCpuProfiling(Handle<String> title, bool record_samples) {
   reinterpret_cast<i::CpuProfiler*>(this)->StartProfiling(
       *Utils::OpenHandle(*title), record_samples);
 }
 
 
-const CpuProfile* CpuProfiler::StopProfiling(Handle<String> title,
-                                             Handle<Value> security_token) {
-  i::Isolate* isolate = i::Isolate::Current();
-  IsDeadCheck(isolate, "v8::CpuProfiler::StopProfiling");
-  i::CpuProfiler* profiler = isolate->cpu_profiler();
-  ASSERT(profiler != NULL);
-  return reinterpret_cast<const CpuProfile*>(
-      profiler->StopProfiling(
-          security_token.IsEmpty() ? NULL : *Utils::OpenHandle(*security_token),
-          *Utils::OpenHandle(*title)));
-}
-
-
 const CpuProfile* CpuProfiler::StopCpuProfiling(Handle<String> title,
                                                 Handle<Value> security_token) {
   return reinterpret_cast<const CpuProfile*>(
@@ -7410,15 +7531,6 @@ const CpuProfile* CpuProfiler::StopCpuProfiling(Handle<String> title) {
 }
 
 
-void CpuProfiler::DeleteAllProfiles() {
-  i::Isolate* isolate = i::Isolate::Current();
-  IsDeadCheck(isolate, "v8::CpuProfiler::DeleteAllProfiles");
-  i::CpuProfiler* profiler = isolate->cpu_profiler();
-  ASSERT(profiler != NULL);
-  profiler->DeleteAllProfiles();
-}
-
-
 void CpuProfiler::DeleteAllCpuProfiles() {
   reinterpret_cast<i::CpuProfiler*>(this)->DeleteAllProfiles();
 }
@@ -7446,12 +7558,12 @@ Handle<Value> HeapGraphEdge::GetName() const {
     case i::HeapGraphEdge::kInternal:
     case i::HeapGraphEdge::kProperty:
     case i::HeapGraphEdge::kShortcut:
-      return Handle<String>(ToApi<String>(
-          isolate->factory()->InternalizeUtf8String(edge->name())));
+      return ToApiHandle<String>(
+          isolate->factory()->InternalizeUtf8String(edge->name()));
     case i::HeapGraphEdge::kElement:
     case i::HeapGraphEdge::kHidden:
-      return Handle<Number>(ToApi<Number>(
-          isolate->factory()->NewNumberFromInt(edge->index())));
+      return ToApiHandle<Number>(
+          isolate->factory()->NewNumberFromInt(edge->index()));
     default: UNREACHABLE();
   }
   return v8::Undefined();
@@ -7490,8 +7602,8 @@ HeapGraphNode::Type HeapGraphNode::GetType() const {
 Handle<String> HeapGraphNode::GetName() const {
   i::Isolate* isolate = i::Isolate::Current();
   IsDeadCheck(isolate, "v8::HeapGraphNode::GetName");
-  return Handle<String>(ToApi<String>(isolate->factory()->InternalizeUtf8String(
-      ToInternal(this)->name())));
+  return ToApiHandle<String>(
+      isolate->factory()->InternalizeUtf8String(ToInternal(this)->name()));
 }
 
 
@@ -7528,9 +7640,9 @@ v8::Handle<v8::Value> HeapGraphNode::GetHeapValue() const {
   i::Isolate* isolate = i::Isolate::Current();
   IsDeadCheck(isolate, "v8::HeapGraphNode::GetHeapValue");
   i::Handle<i::HeapObject> object = ToInternal(this)->GetHeapObject();
-  return v8::Handle<Value>(!object.is_null() ?
-                           ToApi<Value>(object) : ToApi<Value>(
-                               isolate->factory()->undefined_value()));
+  return !object.is_null() ?
+      ToApiHandle<Value>(object) :
+      ToApiHandle<Value>(isolate->factory()->undefined_value());
 }
 
 
@@ -7552,13 +7664,6 @@ void HeapSnapshot::Delete() {
 }
 
 
-HeapSnapshot::Type HeapSnapshot::GetType() const {
-  i::Isolate* isolate = i::Isolate::Current();
-  IsDeadCheck(isolate, "v8::HeapSnapshot::GetType");
-  return kFull;
-}
-
-
 unsigned HeapSnapshot::GetUid() const {
   i::Isolate* isolate = i::Isolate::Current();
   IsDeadCheck(isolate, "v8::HeapSnapshot::GetUid");
@@ -7569,8 +7674,8 @@ unsigned HeapSnapshot::GetUid() const {
 Handle<String> HeapSnapshot::GetTitle() const {
   i::Isolate* isolate = i::Isolate::Current();
   IsDeadCheck(isolate, "v8::HeapSnapshot::GetTitle");
-  return Handle<String>(ToApi<String>(isolate->factory()->InternalizeUtf8String(
-      ToInternal(this)->title())));
+  return ToApiHandle<String>(
+      isolate->factory()->InternalizeUtf8String(ToInternal(this)->title()));
 }
 
 
@@ -7629,72 +7734,23 @@ void HeapSnapshot::Serialize(OutputStream* stream,
 }
 
 
-int HeapProfiler::GetSnapshotsCount() {
-  i::Isolate* isolate = i::Isolate::Current();
-  IsDeadCheck(isolate, "v8::HeapProfiler::GetSnapshotsCount");
-  return isolate->heap_profiler()->GetSnapshotsCount();
-}
-
-
 int HeapProfiler::GetSnapshotCount() {
   return reinterpret_cast<i::HeapProfiler*>(this)->GetSnapshotsCount();
 }
 
 
-const HeapSnapshot* HeapProfiler::GetSnapshot(int index) {
-  i::Isolate* isolate = i::Isolate::Current();
-  IsDeadCheck(isolate, "v8::HeapProfiler::GetSnapshot");
-  return reinterpret_cast<const HeapSnapshot*>(
-      isolate->heap_profiler()->GetSnapshot(index));
-}
-
-
 const HeapSnapshot* HeapProfiler::GetHeapSnapshot(int index) {
   return reinterpret_cast<const HeapSnapshot*>(
       reinterpret_cast<i::HeapProfiler*>(this)->GetSnapshot(index));
 }
 
 
-const HeapSnapshot* HeapProfiler::FindSnapshot(unsigned uid) {
-  i::Isolate* isolate = i::Isolate::Current();
-  IsDeadCheck(isolate, "v8::HeapProfiler::FindSnapshot");
-  return reinterpret_cast<const HeapSnapshot*>(
-      isolate->heap_profiler()->FindSnapshot(uid));
-}
-
-
-const HeapSnapshot* HeapProfiler::FindHeapSnapshot(unsigned uid) {
-  return reinterpret_cast<const HeapSnapshot*>(
-      reinterpret_cast<i::HeapProfiler*>(this)->FindSnapshot(uid));
-}
-
-
-SnapshotObjectId HeapProfiler::GetSnapshotObjectId(Handle<Value> value) {
-  i::Isolate* isolate = i::Isolate::Current();
-  IsDeadCheck(isolate, "v8::HeapProfiler::GetSnapshotObjectId");
-  i::Handle<i::Object> obj = Utils::OpenHandle(*value);
-  return isolate->heap_profiler()->GetSnapshotObjectId(obj);
-}
-
-
 SnapshotObjectId HeapProfiler::GetObjectId(Handle<Value> value) {
   i::Handle<i::Object> obj = Utils::OpenHandle(*value);
   return reinterpret_cast<i::HeapProfiler*>(this)->GetSnapshotObjectId(obj);
 }
 
 
-const HeapSnapshot* HeapProfiler::TakeSnapshot(Handle<String> title,
-                                               HeapSnapshot::Type type,
-                                               ActivityControl* control,
-                                               ObjectNameResolver* resolver) {
-  i::Isolate* isolate = i::Isolate::Current();
-  IsDeadCheck(isolate, "v8::HeapProfiler::TakeSnapshot");
-  return reinterpret_cast<const HeapSnapshot*>(
-      isolate->heap_profiler()->TakeSnapshot(
-          *Utils::OpenHandle(*title), control, resolver));
-}
-
-
 const HeapSnapshot* HeapProfiler::TakeHeapSnapshot(
     Handle<String> title,
     ActivityControl* control,
@@ -7705,61 +7761,26 @@ const HeapSnapshot* HeapProfiler::TakeHeapSnapshot(
 }
 
 
-void HeapProfiler::StartHeapObjectsTracking() {
-  i::Isolate* isolate = i::Isolate::Current();
-  IsDeadCheck(isolate, "v8::HeapProfiler::StartHeapObjectsTracking");
-  isolate->heap_profiler()->StartHeapObjectsTracking();
-}
-
-
 void HeapProfiler::StartTrackingHeapObjects() {
   reinterpret_cast<i::HeapProfiler*>(this)->StartHeapObjectsTracking();
 }
 
 
-void HeapProfiler::StopHeapObjectsTracking() {
-  i::Isolate* isolate = i::Isolate::Current();
-  IsDeadCheck(isolate, "v8::HeapProfiler::StopHeapObjectsTracking");
-  isolate->heap_profiler()->StopHeapObjectsTracking();
-}
-
-
 void HeapProfiler::StopTrackingHeapObjects() {
   reinterpret_cast<i::HeapProfiler*>(this)->StopHeapObjectsTracking();
 }
 
 
-SnapshotObjectId HeapProfiler::PushHeapObjectsStats(OutputStream* stream) {
-  i::Isolate* isolate = i::Isolate::Current();
-  IsDeadCheck(isolate, "v8::HeapProfiler::PushHeapObjectsStats");
-  return isolate->heap_profiler()->PushHeapObjectsStats(stream);
-}
-
-
 SnapshotObjectId HeapProfiler::GetHeapStats(OutputStream* stream) {
   return reinterpret_cast<i::HeapProfiler*>(this)->PushHeapObjectsStats(stream);
 }
 
 
-void HeapProfiler::DeleteAllSnapshots() {
-  i::Isolate* isolate = i::Isolate::Current();
-  IsDeadCheck(isolate, "v8::HeapProfiler::DeleteAllSnapshots");
-  isolate->heap_profiler()->DeleteAllSnapshots();
-}
-
-
 void HeapProfiler::DeleteAllHeapSnapshots() {
   reinterpret_cast<i::HeapProfiler*>(this)->DeleteAllSnapshots();
 }
 
 
-void HeapProfiler::DefineWrapperClass(uint16_t class_id,
-                                      WrapperInfoCallback callback) {
-  i::Isolate::Current()->heap_profiler()->DefineWrapperClass(class_id,
-                                                             callback);
-}
-
-
 void HeapProfiler::SetWrapperClassInfoProvider(uint16_t class_id,
                                                WrapperInfoCallback callback) {
   reinterpret_cast<i::HeapProfiler*>(this)->DefineWrapperClass(class_id,
@@ -7767,17 +7788,6 @@ void HeapProfiler::SetWrapperClassInfoProvider(uint16_t class_id,
 }
 
 
-int HeapProfiler::GetPersistentHandleCount() {
-  i::Isolate* isolate = i::Isolate::Current();
-  return isolate->global_handles()->NumberOfGlobalHandles();
-}
-
-
-size_t HeapProfiler::GetMemorySizeUsedByProfiler() {
-  return i::Isolate::Current()->heap_profiler()->GetMemorySizeUsedByProfiler();
-}
-
-
 size_t HeapProfiler::GetProfilerMemorySize() {
   return reinterpret_cast<i::HeapProfiler*>(this)->
       GetMemorySizeUsedByProfiler();
@@ -8002,4 +8012,55 @@ void DeferredHandles::Iterate(ObjectVisitor* v) {
 }
 
 
+v8::Handle<v8::Value> InvokeAccessorGetter(
+    v8::Local<v8::String> property,
+    const v8::AccessorInfo& info,
+    v8::AccessorGetter getter) {
+  Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate());
+  Address getter_address = reinterpret_cast<Address>(reinterpret_cast<intptr_t>(
+      getter));
+  // Leaving JavaScript.
+  VMState<EXTERNAL> state(isolate);
+  ExternalCallbackScope call_scope(isolate, getter_address);
+  return getter(property, info);
+}
+
+
+void InvokeAccessorGetterCallback(
+    v8::Local<v8::String> property,
+    const v8::PropertyCallbackInfo<v8::Value>& info,
+    v8::AccessorGetterCallback getter) {
+  // Leaving JavaScript.
+  Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate());
+  Address getter_address = reinterpret_cast<Address>(reinterpret_cast<intptr_t>(
+      getter));
+  VMState<EXTERNAL> state(isolate);
+  ExternalCallbackScope call_scope(isolate, getter_address);
+  return getter(property, info);
+}
+
+
+v8::Handle<v8::Value> InvokeInvocationCallback(
+    const v8::Arguments& args,
+    v8::InvocationCallback callback) {
+  Isolate* isolate = reinterpret_cast<Isolate*>(args.GetIsolate());
+  Address callback_address =
+      reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback));
+  VMState<EXTERNAL> state(isolate);
+  ExternalCallbackScope call_scope(isolate, callback_address);
+  return callback(args);
+}
+
+
+void InvokeFunctionCallback(const v8::FunctionCallbackInfo<v8::Value>& info,
+                            v8::FunctionCallback callback) {
+  Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate());
+  Address callback_address =
+      reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback));
+  VMState<EXTERNAL> state(isolate);
+  ExternalCallbackScope call_scope(isolate, callback_address);
+  return callback(info);
+}
+
+
 } }  // namespace v8::internal
index 3c141f7..0f33bc8 100644 (file)
@@ -170,6 +170,7 @@ class RegisteredExtension {
   V(Object, JSObject)                          \
   V(Array, JSArray)                            \
   V(ArrayBuffer, JSArrayBuffer)                \
+  V(ArrayBufferView, JSArrayBufferView)        \
   V(TypedArray, JSTypedArray)                  \
   V(Uint8Array, JSTypedArray)                  \
   V(Uint8ClampedArray, JSTypedArray)           \
@@ -180,6 +181,7 @@ class RegisteredExtension {
   V(Int32Array, JSTypedArray)                  \
   V(Float32Array, JSTypedArray)                \
   V(Float64Array, JSTypedArray)                \
+  V(DataView, JSDataView)                      \
   V(String, String)                            \
   V(Symbol, Symbol)                            \
   V(Script, Object)                            \
@@ -217,6 +219,10 @@ class Utils {
       v8::internal::Handle<v8::internal::JSArray> obj);
   static inline Local<ArrayBuffer> ToLocal(
       v8::internal::Handle<v8::internal::JSArrayBuffer> obj);
+  static inline Local<ArrayBufferView> ToLocal(
+      v8::internal::Handle<v8::internal::JSArrayBufferView> obj);
+  static inline Local<DataView> ToLocal(
+      v8::internal::Handle<v8::internal::JSDataView> obj);
 
   static inline Local<TypedArray> ToLocal(
       v8::internal::Handle<v8::internal::JSTypedArray> obj);
@@ -273,13 +279,31 @@ class Utils {
 OPEN_HANDLE_LIST(DECLARE_OPEN_HANDLE)
 
 #undef DECLARE_OPEN_HANDLE
-};
 
+  template<class From, class To>
+  static inline Local<To> Convert(v8::internal::Handle<From> obj) {
+    ASSERT(obj.is_null() || !obj->IsTheHole());
+    return Local<To>(reinterpret_cast<To*>(obj.location()));
+  }
 
-template <class T>
-inline T* ToApi(v8::internal::Handle<v8::internal::Object> obj) {
-  return reinterpret_cast<T*>(obj.location());
-}
+  template <class T>
+  static inline v8::internal::Handle<v8::internal::Object> OpenPersistent(
+      const v8::Persistent<T>& persistent) {
+    return v8::internal::Handle<v8::internal::Object>(
+        reinterpret_cast<v8::internal::Object**>(persistent.val_));
+  }
+
+  template <class T>
+  static inline v8::internal::Handle<v8::internal::Object> OpenPersistent(
+      v8::Persistent<T>* persistent) {
+    return OpenPersistent(*persistent);
+  }
+
+  template <class From, class To>
+  static inline v8::internal::Handle<To> OpenHandle(v8::Local<From> handle) {
+    return OpenHandle(*handle);
+  }
+};
 
 
 template <class T>
@@ -293,31 +317,31 @@ v8::internal::Handle<T> v8::internal::Handle<T>::EscapeFrom(
 }
 
 
-class InternalHandleHelper {
- public:
-  template<class From, class To>
-  static inline Local<To> Convert(v8::internal::Handle<From> obj) {
-    return Local<To>(reinterpret_cast<To*>(obj.location()));
-  }
-};
+template <class T>
+inline T* ToApi(v8::internal::Handle<v8::internal::Object> obj) {
+  return reinterpret_cast<T*>(obj.location());
+}
+
+template <class T>
+inline v8::Local<T> ToApiHandle(
+    v8::internal::Handle<v8::internal::Object> obj) {
+  return Utils::Convert<v8::internal::Object, T>(obj);
+}
 
 
 // Implementations of ToLocal
 
 #define MAKE_TO_LOCAL(Name, From, To)                                       \
   Local<v8::To> Utils::Name(v8::internal::Handle<v8::internal::From> obj) { \
-    ASSERT(obj.is_null() || !obj->IsTheHole());                             \
-    return InternalHandleHelper::Convert<v8::internal::From, v8::To>(obj);  \
+    return Convert<v8::internal::From, v8::To>(obj);  \
   }
 
 
 #define MAKE_TO_LOCAL_TYPED_ARRAY(TypedArray, typeConst)                    \
   Local<v8::TypedArray> Utils::ToLocal##TypedArray(                         \
       v8::internal::Handle<v8::internal::JSTypedArray> obj) {               \
-    ASSERT(obj.is_null() || !obj->IsTheHole());                             \
     ASSERT(obj->type() == typeConst);                                       \
-    return InternalHandleHelper::                                           \
-        Convert<v8::internal::JSTypedArray, v8::TypedArray>(obj);           \
+    return Convert<v8::internal::JSTypedArray, v8::TypedArray>(obj);        \
   }
 
 
@@ -330,6 +354,8 @@ MAKE_TO_LOCAL(ToLocal, JSRegExp, RegExp)
 MAKE_TO_LOCAL(ToLocal, JSObject, Object)
 MAKE_TO_LOCAL(ToLocal, JSArray, Array)
 MAKE_TO_LOCAL(ToLocal, JSArrayBuffer, ArrayBuffer)
+MAKE_TO_LOCAL(ToLocal, JSArrayBufferView, ArrayBufferView)
+MAKE_TO_LOCAL(ToLocal, JSDataView, DataView)
 MAKE_TO_LOCAL(ToLocal, JSTypedArray, TypedArray)
 
 MAKE_TO_LOCAL_TYPED_ARRAY(Uint8Array, kExternalUnsignedByteArray)
@@ -662,6 +688,24 @@ void HandleScopeImplementer::DeleteExtensions(internal::Object** prev_limit) {
 }
 
 
+// Interceptor functions called from generated inline caches to notify
+// CPU profiler that external callbacks are invoked.
+v8::Handle<v8::Value> InvokeAccessorGetter(
+    v8::Local<v8::String> property,
+    const v8::AccessorInfo& info,
+    v8::AccessorGetter getter);
+
+
+void InvokeAccessorGetterCallback(
+    v8::Local<v8::String> property,
+    const v8::PropertyCallbackInfo<v8::Value>& info,
+    v8::AccessorGetterCallback getter);
+
+v8::Handle<v8::Value> InvokeInvocationCallback(const v8::Arguments& args,
+                                              v8::InvocationCallback callback);
+void InvokeFunctionCallback(const v8::FunctionCallbackInfo<v8::Value>& info,
+                            v8::FunctionCallback callback);
+
 class Testing {
  public:
   static v8::Testing::StressType stress_type() { return stress_type_; }
index 091d0b9..11d9279 100644 (file)
@@ -28,6 +28,8 @@
 #include "v8.h"
 #include "arguments.h"
 
+#include "vm-state-inl.h"
+
 namespace v8 {
 namespace internal {
 
@@ -82,7 +84,7 @@ v8::Handle<V> CustomArguments<T>::GetReturnValue(Isolate* isolate) {
   Object** handle = &this->end()[kReturnValueOffset];
   // Nothing was set, return empty handle as per previous behaviour.
   if ((*handle)->IsTheHole()) return v8::Handle<V>();
-  return v8::Handle<V>(reinterpret_cast<V*>(handle));
+  return Utils::Convert<Object, V>(Handle<Object>(handle));
 }
 
 
@@ -90,6 +92,8 @@ v8::Handle<v8::Value> FunctionCallbackArguments::Call(InvocationCallback f) {
   Isolate* isolate = this->isolate();
   void* f_as_void = CallbackTable::FunctionToVoidPtr(f);
   bool new_style = CallbackTable::ReturnsVoid(isolate, f_as_void);
+  VMState<EXTERNAL> state(isolate);
+  ExternalCallbackScope call_scope(isolate, FUNCTION_ADDR(f));
   if (new_style) {
     FunctionCallback c = reinterpret_cast<FunctionCallback>(f);
     FunctionCallbackInfo<v8::Value> info(end(),
@@ -114,6 +118,8 @@ v8::Handle<ReturnValue> PropertyCallbackArguments::Call(OldFunction f) {       \
   Isolate* isolate = this->isolate();                                          \
   void* f_as_void = CallbackTable::FunctionToVoidPtr(f);                       \
   bool new_style = CallbackTable::ReturnsVoid(isolate, f_as_void);             \
+  VMState<EXTERNAL> state(isolate);                                            \
+  ExternalCallbackScope call_scope(isolate, FUNCTION_ADDR(f));                 \
   if (new_style) {                                                             \
     NewFunction c = reinterpret_cast<NewFunction>(f);                          \
     PropertyCallbackInfo<ReturnValue> info(end());                             \
@@ -132,6 +138,8 @@ v8::Handle<ReturnValue> PropertyCallbackArguments::Call(OldFunction f,         \
   Isolate* isolate = this->isolate();                                          \
   void* f_as_void = CallbackTable::FunctionToVoidPtr(f);                       \
   bool new_style = CallbackTable::ReturnsVoid(isolate, f_as_void);             \
+  VMState<EXTERNAL> state(isolate);                                            \
+  ExternalCallbackScope call_scope(isolate, FUNCTION_ADDR(f));                 \
   if (new_style) {                                                             \
     NewFunction c = reinterpret_cast<NewFunction>(f);                          \
     PropertyCallbackInfo<ReturnValue> info(end());                             \
@@ -151,6 +159,8 @@ v8::Handle<ReturnValue> PropertyCallbackArguments::Call(OldFunction f,         \
   Isolate* isolate = this->isolate();                                          \
   void* f_as_void = CallbackTable::FunctionToVoidPtr(f);                       \
   bool new_style = CallbackTable::ReturnsVoid(isolate, f_as_void);             \
+  VMState<EXTERNAL> state(isolate);                                            \
+  ExternalCallbackScope call_scope(isolate, FUNCTION_ADDR(f));                 \
   if (new_style) {                                                             \
     NewFunction c = reinterpret_cast<NewFunction>(f);                          \
     PropertyCallbackInfo<ReturnValue> info(end());                             \
@@ -170,6 +180,8 @@ void PropertyCallbackArguments::Call(OldFunction f,                            \
   Isolate* isolate = this->isolate();                                          \
   void* f_as_void = CallbackTable::FunctionToVoidPtr(f);                       \
   bool new_style = CallbackTable::ReturnsVoid(isolate, f_as_void);             \
+  VMState<EXTERNAL> state(isolate);                                            \
+  ExternalCallbackScope call_scope(isolate, FUNCTION_ADDR(f));                 \
   if (new_style) {                                                             \
     NewFunction c = reinterpret_cast<NewFunction>(f);                          \
     PropertyCallbackInfo<ReturnValue> info(end());                             \
index 1e0d5c1..bfe9bc8 100644 (file)
@@ -149,6 +149,7 @@ Object** RelocInfo::target_object_address() {
 
 void RelocInfo::set_target_object(Object* target, WriteBarrierMode mode) {
   ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
+  ASSERT(!target->IsConsString());
   Assembler::set_target_pointer_at(pc_, reinterpret_cast<Address>(target));
   if (mode == UPDATE_WRITE_BARRIER &&
       host() != NULL &&
@@ -179,24 +180,22 @@ void RelocInfo::set_target_runtime_entry(Address target,
 }
 
 
-Handle<JSGlobalPropertyCell> RelocInfo::target_cell_handle() {
-  ASSERT(rmode_ == RelocInfo::GLOBAL_PROPERTY_CELL);
+Handle<Cell> RelocInfo::target_cell_handle() {
+  ASSERT(rmode_ == RelocInfo::CELL);
   Address address = Memory::Address_at(pc_);
-  return Handle<JSGlobalPropertyCell>(
-      reinterpret_cast<JSGlobalPropertyCell**>(address));
+  return Handle<Cell>(reinterpret_cast<Cell**>(address));
 }
 
 
-JSGlobalPropertyCell* RelocInfo::target_cell() {
-  ASSERT(rmode_ == RelocInfo::GLOBAL_PROPERTY_CELL);
-  return JSGlobalPropertyCell::FromValueAddress(Memory::Address_at(pc_));
+Cell* RelocInfo::target_cell() {
+  ASSERT(rmode_ == RelocInfo::CELL);
+  return Cell::FromValueAddress(Memory::Address_at(pc_));
 }
 
 
-void RelocInfo::set_target_cell(JSGlobalPropertyCell* cell,
-                                WriteBarrierMode mode) {
-  ASSERT(rmode_ == RelocInfo::GLOBAL_PROPERTY_CELL);
-  Address address = cell->address() + JSGlobalPropertyCell::kValueOffset;
+void RelocInfo::set_target_cell(Cell* cell, WriteBarrierMode mode) {
+  ASSERT(rmode_ == RelocInfo::CELL);
+  Address address = cell->address() + Cell::kValueOffset;
   Memory::Address_at(pc_) = address;
   if (mode == UPDATE_WRITE_BARRIER && host() != NULL) {
     // TODO(1550) We are passing NULL as a slot because cell can never be on
@@ -286,8 +285,8 @@ void RelocInfo::Visit(ObjectVisitor* visitor) {
     visitor->VisitEmbeddedPointer(this);
   } else if (RelocInfo::IsCodeTarget(mode)) {
     visitor->VisitCodeTarget(this);
-  } else if (mode == RelocInfo::GLOBAL_PROPERTY_CELL) {
-    visitor->VisitGlobalPropertyCell(this);
+  } else if (mode == RelocInfo::CELL) {
+    visitor->VisitCell(this);
   } else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
     visitor->VisitExternalReference(this);
   } else if (RelocInfo::IsCodeAgeSequence(mode)) {
@@ -314,8 +313,8 @@ void RelocInfo::Visit(Heap* heap) {
     StaticVisitor::VisitEmbeddedPointer(heap, this);
   } else if (RelocInfo::IsCodeTarget(mode)) {
     StaticVisitor::VisitCodeTarget(heap, this);
-  } else if (mode == RelocInfo::GLOBAL_PROPERTY_CELL) {
-    StaticVisitor::VisitGlobalPropertyCell(heap, this);
+  } else if (mode == RelocInfo::CELL) {
+    StaticVisitor::VisitCell(heap, this);
   } else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
     StaticVisitor::VisitExternalReference(this);
   } else if (RelocInfo::IsCodeAgeSequence(mode)) {
index c6ea600..89c0a3b 100644 (file)
@@ -36,7 +36,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_ARM)
+#if V8_TARGET_ARCH_ARM
 
 #include "arm/assembler-arm-inl.h"
 #include "serialize.h"
index 4d7bc8e..69ba00a 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_ARM)
+#if V8_TARGET_ARCH_ARM
 
 #include "codegen.h"
 #include "debug.h"
@@ -104,360 +104,6 @@ static void GenerateLoadArrayFunction(MacroAssembler* masm, Register result) {
 }
 
 
-// Allocate an empty JSArray. The allocated array is put into the result
-// register. An elements backing store is allocated with size initial_capacity
-// and filled with the hole values.
-static void AllocateEmptyJSArray(MacroAssembler* masm,
-                                 Register array_function,
-                                 Register result,
-                                 Register scratch1,
-                                 Register scratch2,
-                                 Register scratch3,
-                                 Label* gc_required) {
-  const int initial_capacity = JSArray::kPreallocatedArrayElements;
-  STATIC_ASSERT(initial_capacity >= 0);
-  __ LoadInitialArrayMap(array_function, scratch2, scratch1, false);
-
-  // Allocate the JSArray object together with space for a fixed array with the
-  // requested elements.
-  int size = JSArray::kSize;
-  if (initial_capacity > 0) {
-    size += FixedArray::SizeFor(initial_capacity);
-  }
-  __ Allocate(size, result, scratch2, scratch3, gc_required, TAG_OBJECT);
-
-  // Allocated the JSArray. Now initialize the fields except for the elements
-  // array.
-  // result: JSObject
-  // scratch1: initial map
-  // scratch2: start of next object
-  __ str(scratch1, FieldMemOperand(result, JSObject::kMapOffset));
-  __ LoadRoot(scratch1, Heap::kEmptyFixedArrayRootIndex);
-  __ str(scratch1, FieldMemOperand(result, JSArray::kPropertiesOffset));
-  // Field JSArray::kElementsOffset is initialized later.
-  __ mov(scratch3,  Operand::Zero());
-  __ str(scratch3, FieldMemOperand(result, JSArray::kLengthOffset));
-
-  if (initial_capacity == 0) {
-    __ str(scratch1, FieldMemOperand(result, JSArray::kElementsOffset));
-    return;
-  }
-
-  // Calculate the location of the elements array and set elements array member
-  // of the JSArray.
-  // result: JSObject
-  // scratch2: start of next object
-  __ add(scratch1, result, Operand(JSArray::kSize));
-  __ str(scratch1, FieldMemOperand(result, JSArray::kElementsOffset));
-
-  // Clear the heap tag on the elements array.
-  __ sub(scratch1, scratch1, Operand(kHeapObjectTag));
-
-  // Initialize the FixedArray and fill it with holes. FixedArray length is
-  // stored as a smi.
-  // result: JSObject
-  // scratch1: elements array (untagged)
-  // scratch2: start of next object
-  __ LoadRoot(scratch3, Heap::kFixedArrayMapRootIndex);
-  STATIC_ASSERT(0 * kPointerSize == FixedArray::kMapOffset);
-  __ str(scratch3, MemOperand(scratch1, kPointerSize, PostIndex));
-  __ mov(scratch3,  Operand(Smi::FromInt(initial_capacity)));
-  STATIC_ASSERT(1 * kPointerSize == FixedArray::kLengthOffset);
-  __ str(scratch3, MemOperand(scratch1, kPointerSize, PostIndex));
-
-  // Fill the FixedArray with the hole value. Inline the code if short.
-  STATIC_ASSERT(2 * kPointerSize == FixedArray::kHeaderSize);
-  __ LoadRoot(scratch3, Heap::kTheHoleValueRootIndex);
-  static const int kLoopUnfoldLimit = 4;
-  if (initial_capacity <= kLoopUnfoldLimit) {
-    for (int i = 0; i < initial_capacity; i++) {
-      __ str(scratch3, MemOperand(scratch1, kPointerSize, PostIndex));
-    }
-  } else {
-    Label loop, entry;
-    __ add(scratch2, scratch1, Operand(initial_capacity * kPointerSize));
-    __ b(&entry);
-    __ bind(&loop);
-    __ str(scratch3, MemOperand(scratch1, kPointerSize, PostIndex));
-    __ bind(&entry);
-    __ cmp(scratch1, scratch2);
-    __ b(lt, &loop);
-  }
-}
-
-// Allocate a JSArray with the number of elements stored in a register. The
-// register array_function holds the built-in Array function and the register
-// array_size holds the size of the array as a smi. The allocated array is put
-// into the result register and beginning and end of the FixedArray elements
-// storage is put into registers elements_array_storage and elements_array_end
-// (see  below for when that is not the case). If the parameter fill_with_holes
-// is true the allocated elements backing store is filled with the hole values
-// otherwise it is left uninitialized. When the backing store is filled the
-// register elements_array_storage is scratched.
-static void AllocateJSArray(MacroAssembler* masm,
-                            Register array_function,  // Array function.
-                            Register array_size,  // As a smi, cannot be 0.
-                            Register result,
-                            Register elements_array_storage,
-                            Register elements_array_end,
-                            Register scratch1,
-                            Register scratch2,
-                            bool fill_with_hole,
-                            Label* gc_required) {
-  // Load the initial map from the array function.
-  __ LoadInitialArrayMap(array_function, scratch2,
-                         elements_array_storage, fill_with_hole);
-
-  if (FLAG_debug_code) {  // Assert that array size is not zero.
-    __ tst(array_size, array_size);
-    __ Assert(ne, "array size is unexpectedly 0");
-  }
-
-  // Allocate the JSArray object together with space for a FixedArray with the
-  // requested number of elements.
-  __ mov(elements_array_end,
-         Operand((JSArray::kSize + FixedArray::kHeaderSize) / kPointerSize));
-  __ add(elements_array_end, elements_array_end, Operand::SmiUntag(array_size));
-  __ Allocate(elements_array_end,
-              result,
-              scratch1,
-              scratch2,
-              gc_required,
-              static_cast<AllocationFlags>(TAG_OBJECT | SIZE_IN_WORDS));
-
-  // Allocated the JSArray. Now initialize the fields except for the elements
-  // array.
-  // result: JSObject
-  // elements_array_storage: initial map
-  // array_size: size of array (smi)
-  __ str(elements_array_storage, FieldMemOperand(result, JSObject::kMapOffset));
-  __ LoadRoot(elements_array_storage, Heap::kEmptyFixedArrayRootIndex);
-  __ str(elements_array_storage,
-         FieldMemOperand(result, JSArray::kPropertiesOffset));
-  // Field JSArray::kElementsOffset is initialized later.
-  __ str(array_size, FieldMemOperand(result, JSArray::kLengthOffset));
-
-  // Calculate the location of the elements array and set elements array member
-  // of the JSArray.
-  // result: JSObject
-  // array_size: size of array (smi)
-  __ add(elements_array_storage, result, Operand(JSArray::kSize));
-  __ str(elements_array_storage,
-         FieldMemOperand(result, JSArray::kElementsOffset));
-
-  // Clear the heap tag on the elements array.
-  __ sub(elements_array_storage,
-         elements_array_storage,
-         Operand(kHeapObjectTag));
-  // Initialize the fixed array and fill it with holes. FixedArray length is
-  // stored as a smi.
-  // result: JSObject
-  // elements_array_storage: elements array (untagged)
-  // array_size: size of array (smi)
-  __ LoadRoot(scratch1, Heap::kFixedArrayMapRootIndex);
-  ASSERT_EQ(0 * kPointerSize, FixedArray::kMapOffset);
-  __ str(scratch1, MemOperand(elements_array_storage, kPointerSize, PostIndex));
-  ASSERT_EQ(1 * kPointerSize, FixedArray::kLengthOffset);
-  __ str(array_size,
-         MemOperand(elements_array_storage, kPointerSize, PostIndex));
-
-  // Calculate elements array and elements array end.
-  // result: JSObject
-  // elements_array_storage: elements array element storage
-  // array_size: smi-tagged size of elements array
-  __ add(elements_array_end,
-         elements_array_storage,
-         Operand::PointerOffsetFromSmiKey(array_size));
-
-  // Fill the allocated FixedArray with the hole value if requested.
-  // result: JSObject
-  // elements_array_storage: elements array element storage
-  // elements_array_end: start of next object
-  if (fill_with_hole) {
-    Label loop, entry;
-    __ LoadRoot(scratch1, Heap::kTheHoleValueRootIndex);
-    __ jmp(&entry);
-    __ bind(&loop);
-    __ str(scratch1,
-           MemOperand(elements_array_storage, kPointerSize, PostIndex));
-    __ bind(&entry);
-    __ cmp(elements_array_storage, elements_array_end);
-    __ b(lt, &loop);
-  }
-}
-
-// Create a new array for the built-in Array function. This function allocates
-// the JSArray object and the FixedArray elements array and initializes these.
-// If the Array cannot be constructed in native code the runtime is called. This
-// function assumes the following state:
-//   r0: argc
-//   r1: constructor (built-in Array function)
-//   lr: return address
-//   sp[0]: last argument
-// This function is used for both construct and normal calls of Array. The only
-// difference between handling a construct call and a normal call is that for a
-// construct call the constructor function in r1 needs to be preserved for
-// entering the generic code. In both cases argc in r0 needs to be preserved.
-// Both registers are preserved by this code so no need to differentiate between
-// construct call and normal call.
-void ArrayNativeCode(MacroAssembler* masm, Label* call_generic_code) {
-  Counters* counters = masm->isolate()->counters();
-  Label argc_one_or_more, argc_two_or_more, not_empty_array, empty_array,
-      has_non_smi_element, finish, cant_transition_map, not_double;
-
-  // Check for array construction with zero arguments or one.
-  __ cmp(r0, Operand::Zero());
-  __ b(ne, &argc_one_or_more);
-
-  // Handle construction of an empty array.
-  __ bind(&empty_array);
-  AllocateEmptyJSArray(masm,
-                       r1,
-                       r2,
-                       r3,
-                       r4,
-                       r5,
-                       call_generic_code);
-  __ IncrementCounter(counters->array_function_native(), 1, r3, r4);
-  // Set up return value, remove receiver from stack and return.
-  __ mov(r0, r2);
-  __ add(sp, sp, Operand(kPointerSize));
-  __ Jump(lr);
-
-  // Check for one argument. Bail out if argument is not smi or if it is
-  // negative.
-  __ bind(&argc_one_or_more);
-  __ cmp(r0, Operand(1));
-  __ b(ne, &argc_two_or_more);
-  __ ldr(r2, MemOperand(sp));  // Get the argument from the stack.
-  __ tst(r2, r2);
-  __ b(ne, &not_empty_array);
-  __ Drop(1);  // Adjust stack.
-  __ mov(r0, Operand::Zero());  // Treat this as a call with argc of zero.
-  __ b(&empty_array);
-
-  __ bind(&not_empty_array);
-  STATIC_ASSERT(kSmiTag == 0);
-  __ and_(r3, r2, Operand(kIntptrSignBit | kSmiTagMask), SetCC);
-  __ b(ne, call_generic_code);
-
-  // Handle construction of an empty array of a certain size. Bail out if size
-  // is too large to actually allocate an elements array.
-  STATIC_ASSERT(kSmiTag == 0);
-  __ cmp(r2, Operand(JSObject::kInitialMaxFastElementArray << kSmiTagSize));
-  __ b(ge, call_generic_code);
-
-  // r0: argc
-  // r1: constructor
-  // r2: array_size (smi)
-  // sp[0]: argument
-  AllocateJSArray(masm,
-                  r1,
-                  r2,
-                  r3,
-                  r4,
-                  r5,
-                  r6,
-                  r7,
-                  true,
-                  call_generic_code);
-  __ IncrementCounter(counters->array_function_native(), 1, r2, r4);
-  // Set up return value, remove receiver and argument from stack and return.
-  __ mov(r0, r3);
-  __ add(sp, sp, Operand(2 * kPointerSize));
-  __ Jump(lr);
-
-  // Handle construction of an array from a list of arguments.
-  __ bind(&argc_two_or_more);
-  __ SmiTag(r2, r0);
-
-  // r0: argc
-  // r1: constructor
-  // r2: array_size (smi)
-  // sp[0]: last argument
-  AllocateJSArray(masm,
-                  r1,
-                  r2,
-                  r3,
-                  r4,
-                  r5,
-                  r6,
-                  r7,
-                  false,
-                  call_generic_code);
-  __ IncrementCounter(counters->array_function_native(), 1, r2, r6);
-
-  // Fill arguments as array elements. Copy from the top of the stack (last
-  // element) to the array backing store filling it backwards. Note:
-  // elements_array_end points after the backing store therefore PreIndex is
-  // used when filling the backing store.
-  // r0: argc
-  // r3: JSArray
-  // r4: elements_array storage start (untagged)
-  // r5: elements_array_end (untagged)
-  // sp[0]: last argument
-  Label loop, entry;
-  __ mov(r7, sp);
-  __ jmp(&entry);
-  __ bind(&loop);
-  __ ldr(r2, MemOperand(r7, kPointerSize, PostIndex));
-  if (FLAG_smi_only_arrays) {
-    __ JumpIfNotSmi(r2, &has_non_smi_element);
-  }
-  __ str(r2, MemOperand(r5, -kPointerSize, PreIndex));
-  __ bind(&entry);
-  __ cmp(r4, r5);
-  __ b(lt, &loop);
-
-  __ bind(&finish);
-  __ mov(sp, r7);
-
-  // Remove caller arguments and receiver from the stack, setup return value and
-  // return.
-  // r0: argc
-  // r3: JSArray
-  // sp[0]: receiver
-  __ add(sp, sp, Operand(kPointerSize));
-  __ mov(r0, r3);
-  __ Jump(lr);
-
-  __ bind(&has_non_smi_element);
-  // Double values are handled by the runtime.
-  __ CheckMap(
-      r2, r9, Heap::kHeapNumberMapRootIndex, &not_double, DONT_DO_SMI_CHECK);
-  __ bind(&cant_transition_map);
-  __ UndoAllocationInNewSpace(r3, r4);
-  __ b(call_generic_code);
-
-  __ bind(&not_double);
-  // Transition FAST_SMI_ELEMENTS to FAST_ELEMENTS.
-  // r3: JSArray
-  __ ldr(r2, FieldMemOperand(r3, HeapObject::kMapOffset));
-  __ LoadTransitionedArrayMapConditional(FAST_SMI_ELEMENTS,
-                                         FAST_ELEMENTS,
-                                         r2,
-                                         r9,
-                                         &cant_transition_map);
-  __ str(r2, FieldMemOperand(r3, HeapObject::kMapOffset));
-  __ RecordWriteField(r3,
-                      HeapObject::kMapOffset,
-                      r2,
-                      r9,
-                      kLRHasNotBeenSaved,
-                      kDontSaveFPRegs,
-                      EMIT_REMEMBERED_SET,
-                      OMIT_SMI_CHECK);
-  Label loop2;
-  __ sub(r7, r7, Operand(kPointerSize));
-  __ bind(&loop2);
-  __ ldr(r2, MemOperand(r7, kPointerSize, PostIndex));
-  __ str(r2, MemOperand(r5, -kPointerSize, PreIndex));
-  __ cmp(r4, r5);
-  __ b(lt, &loop2);
-  __ b(&finish);
-}
-
-
 void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
   // ----------- S t a t e -------------
   //  -- r0     : number of arguments
@@ -480,20 +126,9 @@ void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
 
   // Run the native code for the InternalArray function called as a normal
   // function.
-  if (FLAG_optimize_constructed_arrays) {
-    // tail call a stub
-    InternalArrayConstructorStub stub(masm->isolate());
-    __ TailCallStub(&stub);
-  } else {
-    ArrayNativeCode(masm, &generic_array_code);
-
-    // Jump to the generic array code if the specialized code cannot handle the
-    // construction.
-    __ bind(&generic_array_code);
-    Handle<Code> array_code =
-        masm->isolate()->builtins()->InternalArrayCodeGeneric();
-    __ Jump(array_code, RelocInfo::CODE_TARGET);
-  }
+  // tail call a stub
+  InternalArrayConstructorStub stub(masm->isolate());
+  __ TailCallStub(&stub);
 }
 
 
@@ -518,56 +153,13 @@ void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
   }
 
   // Run the native code for the Array function called as a normal function.
-  if (FLAG_optimize_constructed_arrays) {
-    // tail call a stub
-    Handle<Object> undefined_sentinel(
-        masm->isolate()->heap()->undefined_value(),
-        masm->isolate());
-    __ mov(r2, Operand(undefined_sentinel));
-    ArrayConstructorStub stub(masm->isolate());
-    __ TailCallStub(&stub);
-  } else {
-    ArrayNativeCode(masm, &generic_array_code);
-
-    // Jump to the generic array code if the specialized code cannot handle
-    // the construction.
-    __ bind(&generic_array_code);
-    Handle<Code> array_code =
-        masm->isolate()->builtins()->ArrayCodeGeneric();
-    __ Jump(array_code, RelocInfo::CODE_TARGET);
-  }
-}
-
-
-void Builtins::Generate_CommonArrayConstructCode(MacroAssembler* masm) {
-  // ----------- S t a t e -------------
-  //  -- r0     : number of arguments
-  //  -- r1     : constructor function
-  //  -- r2     : type info cell
-  //  -- lr     : return address
-  //  -- sp[...]: constructor arguments
-  // -----------------------------------
-
-  if (FLAG_debug_code) {
-    // The array construct code is only set for the builtin and internal
-    // Array functions which always have a map.
-    // Initial map for the builtin Array function should be a map.
-    __ ldr(r3, FieldMemOperand(r1, JSFunction::kPrototypeOrInitialMapOffset));
-    __ SmiTst(r3);
-    __ Assert(ne, "Unexpected initial map for Array function");
-    __ CompareObjectType(r3, r3, r4, MAP_TYPE);
-    __ Assert(eq, "Unexpected initial map for Array function");
-  }
-  Label generic_constructor;
-  // Run the native code for the Array function called as a constructor.
-  ArrayNativeCode(masm, &generic_constructor);
-
-  // Jump to the generic construct code in case the specialized code cannot
-  // handle the construction.
-  __ bind(&generic_constructor);
-  Handle<Code> generic_construct_stub =
-      masm->isolate()->builtins()->JSConstructStubGeneric();
-  __ Jump(generic_construct_stub, RelocInfo::CODE_TARGET);
+  // tail call a stub
+  Handle<Object> undefined_sentinel(
+      masm->isolate()->heap()->undefined_value(),
+      masm->isolate());
+  __ mov(r2, Operand(undefined_sentinel));
+  ArrayConstructorStub stub(masm->isolate());
+  __ TailCallStub(&stub);
 }
 
 
@@ -1125,6 +717,7 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
   // r3: argc
   // r4: argv
   // r5-r7, cp may be clobbered
+  ProfileEntryHookStub::MaybeCallEntryHook(masm);
 
   // Clear the context before we push it when entering the internal frame.
   __ mov(cp, Operand::Zero());
old mode 100644 (file)
new mode 100755 (executable)
index b26bf7e..6af5cce
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_ARM)
+#if V8_TARGET_ARCH_ARM
 
 #include "bootstrapper.h"
 #include "code-stubs.h"
@@ -892,12 +892,17 @@ static void EmitStrictTwoHeapObjectCompare(MacroAssembler* masm,
 
     // Now that we have the types we might as well check for
     // internalized-internalized.
-    // Ensure that no non-strings have the internalized bit set.
-    STATIC_ASSERT(LAST_TYPE < kNotStringTag + kIsInternalizedMask);
+    Label not_internalized;
     STATIC_ASSERT(kInternalizedTag != 0);
-    __ and_(r2, r2, Operand(r3));
-    __ tst(r2, Operand(kIsInternalizedMask));
-    __ b(ne, &return_not_equal);
+    __ and_(r2, r2, Operand(kIsNotStringMask | kIsInternalizedMask));
+    __ cmp(r2, Operand(kInternalizedTag | kStringTag));
+    __ b(ne, &not_internalized);  // r2 (rhs) is not an internalized string
+
+    __ and_(r3, r3, Operand(kIsNotStringMask | kIsInternalizedMask));
+    __ cmp(r3, Operand(kInternalizedTag | kStringTag));
+    __ b(eq, &return_not_equal);  // both rhs and lhs are internalized strings
+
+    __ bind(&not_internalized);
 }
 
 
@@ -937,7 +942,6 @@ static void EmitCheckForInternalizedStringsOrObjects(MacroAssembler* masm,
          (lhs.is(r1) && rhs.is(r0)));
 
   // r2 is object type of rhs.
-  // Ensure that no non-strings have the internalized bit set.
   Label object_test;
   STATIC_ASSERT(kInternalizedTag != 0);
   __ tst(r2, Operand(kIsNotStringMask));
@@ -2075,7 +2079,7 @@ void BinaryOpStub_GenerateSmiCode(
 void BinaryOpStub::GenerateSmiStub(MacroAssembler* masm) {
   Label right_arg_changed, call_runtime;
 
-  if (op_ == Token::MOD && has_fixed_right_arg_) {
+  if (op_ == Token::MOD && encoded_right_arg_.has_value) {
     // It is guaranteed that the value will fit into a Smi, because if it
     // didn't, we wouldn't be here, see BinaryOp_Patch.
     __ cmp(r0, Operand(Smi::FromInt(fixed_right_arg_value())));
@@ -2252,7 +2256,7 @@ void BinaryOpStub::GenerateInt32Stub(MacroAssembler* masm) {
         // to type transition.
 
       } else {
-        if (has_fixed_right_arg_) {
+        if (encoded_right_arg_.has_value) {
           __ Vmov(d8, fixed_right_arg_value(), scratch1);
           __ VFPCompareAndSetFlags(d1, d8);
           __ b(ne, &transition);
@@ -2996,9 +3000,7 @@ void CodeStub::GenerateStubsAheadOfTime(Isolate* isolate) {
   StoreBufferOverflowStub::GenerateFixedRegStubsAheadOfTime(isolate);
   StubFailureTrampolineStub::GenerateAheadOfTime(isolate);
   RecordWriteStub::GenerateFixedRegStubsAheadOfTime(isolate);
-  if (FLAG_optimize_constructed_arrays) {
-    ArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate);
-  }
+  ArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate);
 }
 
 
@@ -3075,7 +3077,7 @@ void CEntryStub::GenerateCore(MacroAssembler* masm,
   __ mov(r0, Operand(r4));
   __ mov(r1, Operand(r6));
 
-#if defined(V8_HOST_ARCH_ARM)
+#if V8_HOST_ARCH_ARM
   int frame_alignment = MacroAssembler::ActivationFrameAlignment();
   int frame_alignment_mask = frame_alignment - 1;
   if (FLAG_debug_code) {
@@ -3179,6 +3181,8 @@ void CEntryStub::Generate(MacroAssembler* masm) {
   // sp: stack pointer  (restored as callee's sp after C call)
   // cp: current context  (C callee-saved)
 
+  ProfileEntryHookStub::MaybeCallEntryHook(masm);
+
   // Result returned in r0 or r0+r1 by default.
 
   // NOTE: Invocations of builtins may return failure objects
@@ -3269,6 +3273,8 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
 
   Label invoke, handler_entry, exit;
 
+  ProfileEntryHookStub::MaybeCallEntryHook(masm);
+
   // Called from C, so do not pop argc and args on exit (preserve sp)
   // No need to save register-passed args
   // Save callee-saved registers (incl. cp and fp), sp, and lr
@@ -3504,7 +3510,7 @@ void InstanceofStub::Generate(MacroAssembler* masm) {
     // Get the map location in scratch and patch it.
     __ GetRelocatedValueLocation(inline_site, scratch);
     __ ldr(scratch, MemOperand(scratch));
-    __ str(map, FieldMemOperand(scratch, JSGlobalPropertyCell::kValueOffset));
+    __ str(map, FieldMemOperand(scratch, Cell::kValueOffset));
   }
 
   // Register mapping: r3 is object map and r4 is function prototype.
@@ -4623,52 +4629,12 @@ void RegExpConstructResultStub::Generate(MacroAssembler* masm) {
 }
 
 
-static void GenerateRecordCallTargetNoArray(MacroAssembler* masm) {
-  // Cache the called function in a global property cell.  Cache states
-  // are uninitialized, monomorphic (indicated by a JSFunction), and
-  // megamorphic.
-  // r1 : the function to call
-  // r2 : cache cell for call target
-  Label done;
-
-  ASSERT_EQ(*TypeFeedbackCells::MegamorphicSentinel(masm->isolate()),
-            masm->isolate()->heap()->undefined_value());
-  ASSERT_EQ(*TypeFeedbackCells::UninitializedSentinel(masm->isolate()),
-            masm->isolate()->heap()->the_hole_value());
-
-  // Load the cache state into r3.
-  __ ldr(r3, FieldMemOperand(r2, JSGlobalPropertyCell::kValueOffset));
-
-  // A monomorphic cache hit or an already megamorphic state: invoke the
-  // function without changing the state.
-  __ cmp(r3, r1);
-  __ b(eq, &done);
-  __ CompareRoot(r3, Heap::kUndefinedValueRootIndex);
-  __ b(eq, &done);
-
-  // A monomorphic miss (i.e, here the cache is not uninitialized) goes
-  // megamorphic.
-  __ CompareRoot(r3, Heap::kTheHoleValueRootIndex);
-  // MegamorphicSentinel is an immortal immovable object (undefined) so no
-  // write-barrier is needed.
-  __ LoadRoot(ip, Heap::kUndefinedValueRootIndex, ne);
-  __ str(ip, FieldMemOperand(r2, JSGlobalPropertyCell::kValueOffset), ne);
-
-  // An uninitialized cache is patched with the function.
-  __ str(r1, FieldMemOperand(r2, JSGlobalPropertyCell::kValueOffset), eq);
-  // No need for a write barrier here - cells are rescanned.
-
-  __ bind(&done);
-}
-
-
 static void GenerateRecordCallTarget(MacroAssembler* masm) {
   // Cache the called function in a global property cell.  Cache states
   // are uninitialized, monomorphic (indicated by a JSFunction), and
   // megamorphic.
   // r1 : the function to call
   // r2 : cache cell for call target
-  ASSERT(FLAG_optimize_constructed_arrays);
   Label initialize, done, miss, megamorphic, not_array_function;
 
   ASSERT_EQ(*TypeFeedbackCells::MegamorphicSentinel(masm->isolate()),
@@ -4677,7 +4643,7 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
             masm->isolate()->heap()->the_hole_value());
 
   // Load the cache state into r3.
-  __ ldr(r3, FieldMemOperand(r2, JSGlobalPropertyCell::kValueOffset));
+  __ ldr(r3, FieldMemOperand(r2, Cell::kValueOffset));
 
   // A monomorphic cache hit or an already megamorphic state: invoke the
   // function without changing the state.
@@ -4689,12 +4655,15 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
   // Special handling of the Array() function, which caches not only the
   // monomorphic Array function but the initial ElementsKind with special
   // sentinels
-  Handle<Object> terminal_kind_sentinel =
-      TypeFeedbackCells::MonomorphicArraySentinel(masm->isolate(),
-                                                  LAST_FAST_ELEMENTS_KIND);
   __ JumpIfNotSmi(r3, &miss);
-  __ cmp(r3, Operand(terminal_kind_sentinel));
-  __ b(gt, &miss);
+  if (FLAG_debug_code) {
+    Handle<Object> terminal_kind_sentinel =
+        TypeFeedbackCells::MonomorphicArraySentinel(masm->isolate(),
+                                                    LAST_FAST_ELEMENTS_KIND);
+    __ cmp(r3, Operand(terminal_kind_sentinel));
+    __ Assert(le, "Array function sentinel is not an ElementsKind");
+  }
+
   // Make sure the function is the Array() function
   __ LoadArrayFunction(r3);
   __ cmp(r1, r3);
@@ -4711,7 +4680,7 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
   // write-barrier is needed.
   __ bind(&megamorphic);
   __ LoadRoot(ip, Heap::kUndefinedValueRootIndex);
-  __ str(ip, FieldMemOperand(r2, JSGlobalPropertyCell::kValueOffset));
+  __ str(ip, FieldMemOperand(r2, Cell::kValueOffset));
   __ jmp(&done);
 
   // An uninitialized cache is patched with the function or sentinel to
@@ -4729,11 +4698,11 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
       TypeFeedbackCells::MonomorphicArraySentinel(masm->isolate(),
           GetInitialFastElementsKind());
   __ mov(r3, Operand(initial_kind_sentinel));
-  __ str(r3, FieldMemOperand(r2, JSGlobalPropertyCell::kValueOffset));
+  __ str(r3, FieldMemOperand(r2, Cell::kValueOffset));
   __ b(&done);
 
   __ bind(&not_array_function);
-  __ str(r1, FieldMemOperand(r2, JSGlobalPropertyCell::kValueOffset));
+  __ str(r1, FieldMemOperand(r2, Cell::kValueOffset));
   // No need for a write barrier here - cells are rescanned.
 
   __ bind(&done);
@@ -4772,11 +4741,7 @@ void CallFunctionStub::Generate(MacroAssembler* masm) {
   __ b(ne, &slow);
 
   if (RecordCallTarget()) {
-    if (FLAG_optimize_constructed_arrays) {
-      GenerateRecordCallTarget(masm);
-    } else {
-      GenerateRecordCallTargetNoArray(masm);
-    }
+    GenerateRecordCallTarget(masm);
   }
 
   // Fast-case: Invoke the function now.
@@ -4809,7 +4774,7 @@ void CallFunctionStub::Generate(MacroAssembler* masm) {
     ASSERT_EQ(*TypeFeedbackCells::MegamorphicSentinel(masm->isolate()),
               masm->isolate()->heap()->undefined_value());
     __ LoadRoot(ip, Heap::kUndefinedValueRootIndex);
-    __ str(ip, FieldMemOperand(r2, JSGlobalPropertyCell::kValueOffset));
+    __ str(ip, FieldMemOperand(r2, Cell::kValueOffset));
   }
   // Check for function proxy.
   __ cmp(r3, Operand(JS_FUNCTION_PROXY_TYPE));
@@ -4851,15 +4816,11 @@ void CallConstructStub::Generate(MacroAssembler* masm) {
   __ b(ne, &slow);
 
   if (RecordCallTarget()) {
-    if (FLAG_optimize_constructed_arrays) {
-      GenerateRecordCallTarget(masm);
-    } else {
-      GenerateRecordCallTargetNoArray(masm);
-    }
+    GenerateRecordCallTarget(masm);
   }
 
   // Jump to the function-specific construct stub.
-  Register jmp_reg = FLAG_optimize_constructed_arrays ? r3 : r2;
+  Register jmp_reg = r3;
   __ ldr(jmp_reg, FieldMemOperand(r1, JSFunction::kSharedFunctionInfoOffset));
   __ ldr(jmp_reg, FieldMemOperand(jmp_reg,
                                   SharedFunctionInfo::kConstructStubOffset));
@@ -6263,9 +6224,14 @@ void ICCompareStub::GenerateInternalizedStrings(MacroAssembler* masm) {
   __ ldrb(tmp1, FieldMemOperand(tmp1, Map::kInstanceTypeOffset));
   __ ldrb(tmp2, FieldMemOperand(tmp2, Map::kInstanceTypeOffset));
   STATIC_ASSERT(kInternalizedTag != 0);
-  __ and_(tmp1, tmp1, Operand(tmp2));
-  __ tst(tmp1, Operand(kIsInternalizedMask));
-  __ b(eq, &miss);
+
+  __ and_(tmp1, tmp1, Operand(kIsNotStringMask | kIsInternalizedMask));
+  __ cmp(tmp1, Operand(kInternalizedTag | kStringTag));
+  __ b(ne, &miss);
+
+  __ and_(tmp2, tmp2, Operand(kIsNotStringMask | kIsInternalizedMask));
+  __ cmp(tmp2, Operand(kInternalizedTag | kStringTag));
+  __ b(ne, &miss);
 
   // Internalized strings are compared by identity.
   __ cmp(left, right);
@@ -6304,19 +6270,8 @@ void ICCompareStub::GenerateUniqueNames(MacroAssembler* masm) {
   __ ldrb(tmp1, FieldMemOperand(tmp1, Map::kInstanceTypeOffset));
   __ ldrb(tmp2, FieldMemOperand(tmp2, Map::kInstanceTypeOffset));
 
-  Label succeed1;
-  __ tst(tmp1, Operand(kIsInternalizedMask));
-  __ b(ne, &succeed1);
-  __ cmp(tmp1, Operand(SYMBOL_TYPE));
-  __ b(ne, &miss);
-  __ bind(&succeed1);
-
-  Label succeed2;
-  __ tst(tmp2, Operand(kIsInternalizedMask));
-  __ b(ne, &succeed2);
-  __ cmp(tmp2, Operand(SYMBOL_TYPE));
-  __ b(ne, &miss);
-  __ bind(&succeed2);
+  __ JumpIfNotUniqueName(tmp1, &miss);
+  __ JumpIfNotUniqueName(tmp2, &miss);
 
   // Unique names are compared by identity.
   __ cmp(left, right);
@@ -6371,7 +6326,8 @@ void ICCompareStub::GenerateStrings(MacroAssembler* masm) {
   // Handle not identical strings.
 
   // Check that both strings are internalized strings. If they are, we're done
-  // because we already know they are not identical.
+  // because we already know they are not identical. We know they are both
+  // strings.
   if (equality) {
     ASSERT(GetCondition() == eq);
     STATIC_ASSERT(kInternalizedTag != 0);
@@ -6482,13 +6438,6 @@ void DirectCEntryStub::Generate(MacroAssembler* masm) {
 
 
 void DirectCEntryStub::GenerateCall(MacroAssembler* masm,
-                                    ExternalReference function) {
-  __ mov(r2, Operand(function));
-  GenerateCall(masm, r2);
-}
-
-
-void DirectCEntryStub::GenerateCall(MacroAssembler* masm,
                                     Register target) {
   intptr_t code =
       reinterpret_cast<intptr_t>(GetCode(masm->isolate()).location());
@@ -6564,11 +6513,7 @@ void NameDictionaryLookupStub::GenerateNegativeLookup(MacroAssembler* masm,
     __ ldr(entity_name, FieldMemOperand(entity_name, HeapObject::kMapOffset));
     __ ldrb(entity_name,
             FieldMemOperand(entity_name, Map::kInstanceTypeOffset));
-    __ tst(entity_name, Operand(kIsInternalizedMask));
-    __ b(ne, &good);
-    __ cmp(entity_name, Operand(SYMBOL_TYPE));
-    __ b(ne, miss);
-
+    __ JumpIfNotUniqueName(entity_name, miss);
     __ bind(&good);
 
     // Restore the properties.
@@ -6735,15 +6680,10 @@ void NameDictionaryLookupStub::Generate(MacroAssembler* masm) {
 
     if (i != kTotalProbes - 1 && mode_ == NEGATIVE_LOOKUP) {
       // Check if the entry name is not a unique name.
-      Label cont;
       __ ldr(entry_key, FieldMemOperand(entry_key, HeapObject::kMapOffset));
       __ ldrb(entry_key,
               FieldMemOperand(entry_key, Map::kInstanceTypeOffset));
-      __ tst(entry_key, Operand(kIsInternalizedMask));
-      __ b(ne, &cont);
-      __ cmp(entry_key, Operand(SYMBOL_TYPE));
-      __ b(ne, &maybe_in_dictionary);
-      __ bind(&cont);
+      __ JumpIfNotUniqueName(entry_key, &maybe_in_dictionary);
     }
   }
 
@@ -7062,10 +7002,10 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
 void StoreArrayLiteralElementStub::Generate(MacroAssembler* masm) {
   // ----------- S t a t e -------------
   //  -- r0    : element value to store
-  //  -- r1    : array literal
-  //  -- r2    : map of array literal
   //  -- r3    : element index as smi
-  //  -- r4    : array literal index in function as smi
+  //  -- sp[0] : array literal index in function as smi
+  //  -- sp[4] : array literal
+  // clobbers r1, r2, r4
   // -----------------------------------
 
   Label element_done;
@@ -7074,6 +7014,11 @@ void StoreArrayLiteralElementStub::Generate(MacroAssembler* masm) {
   Label slow_elements;
   Label fast_elements;
 
+  // Get array literal index, array literal and its map.
+  __ ldr(r4, MemOperand(sp, 0 * kPointerSize));
+  __ ldr(r1, MemOperand(sp, 1 * kPointerSize));
+  __ ldr(r2, FieldMemOperand(r1, JSObject::kMapOffset));
+
   __ CheckFastElements(r2, r5, &double_elements);
   // FAST_*_SMI_ELEMENTS or FAST_*_ELEMENTS
   __ JumpIfSmi(r0, &smi_element);
@@ -7133,8 +7078,9 @@ void StubFailureTrampolineStub::Generate(MacroAssembler* masm) {
 
 
 void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) {
-  if (entry_hook_ != NULL) {
+  if (masm->isolate()->function_entry_hook() != NULL) {
     PredictableCodeSizeScope predictable(masm, 4 * Assembler::kInstrSize);
+    AllowStubCallsScope allow_stub_calls(masm, true);
     ProfileEntryHookStub stub;
     __ push(lr);
     __ CallStub(&stub);
@@ -7148,9 +7094,21 @@ void ProfileEntryHookStub::Generate(MacroAssembler* masm) {
   const int32_t kReturnAddressDistanceFromFunctionStart =
       3 * Assembler::kInstrSize;
 
-  // Save live volatile registers.
-  __ Push(lr, r5, r1);
-  const int32_t kNumSavedRegs = 3;
+  // This should contain all kCallerSaved registers.
+  const RegList kSavedRegs =
+      1 <<  0 |  // r0
+      1 <<  1 |  // r1
+      1 <<  2 |  // r2
+      1 <<  3 |  // r3
+      1 <<  5 |  // r5
+      1 <<  9;   // r9
+  // We also save lr, so the count here is one higher than the mask indicates.
+  const int32_t kNumSavedRegs = 7;
+
+  ASSERT((kCallerSaved & kSavedRegs) == kCallerSaved);
+
+  // Save all caller-save registers as this may be called from anywhere.
+  __ stm(db_w, sp, kSavedRegs | lr.bit());
 
   // Compute the function's address for the first argument.
   __ sub(r0, lr, Operand(kReturnAddressDistanceFromFunctionStart));
@@ -7167,15 +7125,14 @@ void ProfileEntryHookStub::Generate(MacroAssembler* masm) {
     __ and_(sp, sp, Operand(-frame_alignment));
   }
 
-#if defined(V8_HOST_ARCH_ARM)
-  __ mov(ip, Operand(reinterpret_cast<int32_t>(&entry_hook_)));
-  __ ldr(ip, MemOperand(ip));
+#if V8_HOST_ARCH_ARM
+  int32_t entry_hook =
+      reinterpret_cast<int32_t>(masm->isolate()->function_entry_hook());
+  __ mov(ip, Operand(entry_hook));
 #else
   // Under the simulator we need to indirect the entry hook through a
   // trampoline function at a known address.
-  Address trampoline_address = reinterpret_cast<Address>(
-      reinterpret_cast<intptr_t>(EntryHookTrampoline));
-  ApiFunction dispatcher(trampoline_address);
+  ApiFunction dispatcher(FUNCTION_ADDR(EntryHookTrampoline));
   __ mov(ip, Operand(ExternalReference(&dispatcher,
                                        ExternalReference::BUILTIN_CALL,
                                        masm->isolate())));
@@ -7187,8 +7144,8 @@ void ProfileEntryHookStub::Generate(MacroAssembler* masm) {
     __ mov(sp, r5);
   }
 
-  __ Pop(lr, r5, r1);
-  __ Ret();
+  // Also pop pc to get Ret(0).
+  __ ldm(ia_w, sp, kSavedRegs | pc.bit());
 }
 
 
@@ -7244,6 +7201,10 @@ static void CreateArrayDispatchOneArgument(MacroAssembler* masm) {
   __ cmp(r2, Operand(undefined_sentinel));
   __ b(eq, &normal_sequence);
 
+  // The type cell may have gone megamorphic, don't overwrite if so
+  __ ldr(r5, FieldMemOperand(r2, kPointerSize));
+  __ JumpIfNotSmi(r5, &normal_sequence);
+
   // Save the resulting elements kind in type info
   __ SmiTag(r3);
   __ str(r3, FieldMemOperand(r2, kPointerSize));
@@ -7276,7 +7237,7 @@ static void ArrayConstructorStubAheadOfTimeHelper(Isolate* isolate) {
     T stub(kind);
     stub.GetCode(isolate)->set_is_pregenerated(true);
     if (AllocationSiteInfo::GetMode(kind) != DONT_TRACK_ALLOCATION_SITE) {
-      T stub1(kind, true);
+      T stub1(kind, CONTEXT_CHECK_REQUIRED, DISABLE_ALLOCATION_SITES);
       stub1.GetCode(isolate)->set_is_pregenerated(true);
     }
   }
@@ -7332,64 +7293,50 @@ void ArrayConstructorStub::Generate(MacroAssembler* masm) {
     __ CompareObjectType(r3, r3, r4, MAP_TYPE);
     __ Assert(eq, "Unexpected initial map for Array function");
 
-    // We should either have undefined in ebx or a valid jsglobalpropertycell
+    // We should either have undefined in ebx or a valid cell
     Label okay_here;
-    Handle<Map> global_property_cell_map(
-        masm->isolate()->heap()->global_property_cell_map());
+    Handle<Map> cell_map = masm->isolate()->factory()->cell_map();
     __ cmp(r2, Operand(undefined_sentinel));
     __ b(eq, &okay_here);
     __ ldr(r3, FieldMemOperand(r2, 0));
-    __ cmp(r3, Operand(global_property_cell_map));
+    __ cmp(r3, Operand(cell_map));
     __ Assert(eq, "Expected property cell in register ebx");
     __ bind(&okay_here);
   }
 
-  if (FLAG_optimize_constructed_arrays) {
-    Label no_info, switch_ready;
-    // Get the elements kind and case on that.
-    __ cmp(r2, Operand(undefined_sentinel));
-    __ b(eq, &no_info);
-    __ ldr(r3, FieldMemOperand(r2, JSGlobalPropertyCell::kValueOffset));
-    __ JumpIfNotSmi(r3, &no_info);
-    __ SmiUntag(r3);
-    __ jmp(&switch_ready);
-    __ bind(&no_info);
-    __ mov(r3, Operand(GetInitialFastElementsKind()));
-    __ bind(&switch_ready);
-
-    if (argument_count_ == ANY) {
-      Label not_zero_case, not_one_case;
-      __ tst(r0, r0);
-      __ b(ne, &not_zero_case);
-      CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm);
-
-      __ bind(&not_zero_case);
-      __ cmp(r0, Operand(1));
-      __ b(gt, &not_one_case);
-      CreateArrayDispatchOneArgument(masm);
-
-      __ bind(&not_one_case);
-      CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm);
-    } else if (argument_count_ == NONE) {
-      CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm);
-    } else if (argument_count_ == ONE) {
-      CreateArrayDispatchOneArgument(masm);
-    } else if (argument_count_ == MORE_THAN_ONE) {
-      CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm);
-    } else {
-      UNREACHABLE();
-    }
+  Label no_info, switch_ready;
+  // Get the elements kind and case on that.
+  __ cmp(r2, Operand(undefined_sentinel));
+  __ b(eq, &no_info);
+  __ ldr(r3, FieldMemOperand(r2, Cell::kValueOffset));
+  __ JumpIfNotSmi(r3, &no_info);
+  __ SmiUntag(r3);
+  __ jmp(&switch_ready);
+  __ bind(&no_info);
+  __ mov(r3, Operand(GetInitialFastElementsKind()));
+  __ bind(&switch_ready);
+
+  if (argument_count_ == ANY) {
+    Label not_zero_case, not_one_case;
+    __ tst(r0, r0);
+    __ b(ne, &not_zero_case);
+    CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm);
+
+    __ bind(&not_zero_case);
+    __ cmp(r0, Operand(1));
+    __ b(gt, &not_one_case);
+    CreateArrayDispatchOneArgument(masm);
+
+    __ bind(&not_one_case);
+    CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm);
+  } else if (argument_count_ == NONE) {
+    CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm);
+  } else if (argument_count_ == ONE) {
+    CreateArrayDispatchOneArgument(masm);
+  } else if (argument_count_ == MORE_THAN_ONE) {
+    CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm);
   } else {
-     Label generic_constructor;
-     // Run the native code for the Array function called as a constructor.
-     ArrayNativeCode(masm, &generic_constructor);
-
-     // Jump to the generic construct code in case the specialized code cannot
-     // handle the construction.
-     __ bind(&generic_constructor);
-     Handle<Code> generic_construct_stub =
-         masm->isolate()->builtins()->JSConstructStubGeneric();
-     __ Jump(generic_construct_stub, RelocInfo::CODE_TARGET);
+    UNREACHABLE();
   }
 }
 
@@ -7451,45 +7398,31 @@ void InternalArrayConstructorStub::Generate(MacroAssembler* masm) {
     __ Assert(eq, "Unexpected initial map for Array function");
   }
 
-  if (FLAG_optimize_constructed_arrays) {
-    // Figure out the right elements kind
-    __ ldr(r3, FieldMemOperand(r1, JSFunction::kPrototypeOrInitialMapOffset));
-
-    // Load the map's "bit field 2" into |result|. We only need the first byte,
-    // but the following bit field extraction takes care of that anyway.
-    __ ldr(r3, FieldMemOperand(r3, Map::kBitField2Offset));
-    // Retrieve elements_kind from bit field 2.
-    __ Ubfx(r3, r3, Map::kElementsKindShift, Map::kElementsKindBitCount);
-
-    if (FLAG_debug_code) {
-      Label done;
-      __ cmp(r3, Operand(FAST_ELEMENTS));
-      __ b(eq, &done);
-      __ cmp(r3, Operand(FAST_HOLEY_ELEMENTS));
-      __ Assert(eq,
-          "Invalid ElementsKind for InternalArray or InternalPackedArray");
-      __ bind(&done);
-    }
+  // Figure out the right elements kind
+  __ ldr(r3, FieldMemOperand(r1, JSFunction::kPrototypeOrInitialMapOffset));
+  // Load the map's "bit field 2" into |result|. We only need the first byte,
+  // but the following bit field extraction takes care of that anyway.
+  __ ldr(r3, FieldMemOperand(r3, Map::kBitField2Offset));
+  // Retrieve elements_kind from bit field 2.
+  __ Ubfx(r3, r3, Map::kElementsKindShift, Map::kElementsKindBitCount);
 
-    Label fast_elements_case;
+  if (FLAG_debug_code) {
+    Label done;
     __ cmp(r3, Operand(FAST_ELEMENTS));
-    __ b(eq, &fast_elements_case);
-    GenerateCase(masm, FAST_HOLEY_ELEMENTS);
+    __ b(eq, &done);
+    __ cmp(r3, Operand(FAST_HOLEY_ELEMENTS));
+    __ Assert(eq,
+              "Invalid ElementsKind for InternalArray or InternalPackedArray");
+    __ bind(&done);
+  }
 
-    __ bind(&fast_elements_case);
-    GenerateCase(masm, FAST_ELEMENTS);
-  } else {
-    Label generic_constructor;
-    // Run the native code for the Array function called as constructor.
-    ArrayNativeCode(masm, &generic_constructor);
+  Label fast_elements_case;
+  __ cmp(r3, Operand(FAST_ELEMENTS));
+  __ b(eq, &fast_elements_case);
+  GenerateCase(masm, FAST_HOLEY_ELEMENTS);
 
-    // Jump to the generic construct code in case the specialized code cannot
-    // handle the construction.
-    __ bind(&generic_constructor);
-    Handle<Code> generic_construct_stub =
-        masm->isolate()->builtins()->JSConstructStubGeneric();
-    __ Jump(generic_construct_stub, RelocInfo::CODE_TARGET);
-  }
+  __ bind(&fast_elements_case);
+  GenerateCase(masm, FAST_ELEMENTS);
 }
 
 
index 863848c..1f663f5 100644 (file)
@@ -585,7 +585,6 @@ class DirectCEntryStub: public PlatformCodeStub {
  public:
   DirectCEntryStub() {}
   void Generate(MacroAssembler* masm);
-  void GenerateCall(MacroAssembler* masm, ExternalReference function);
   void GenerateCall(MacroAssembler* masm, Register target);
 
  private:
index 5b2980a..60de5fc 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_ARM)
+#if V8_TARGET_ARCH_ARM
 
 #include "codegen.h"
 #include "macro-assembler.h"
index a130484..7d59a84 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_ARM)
+#if V8_TARGET_ARCH_ARM
 
 #include "constants-arm.h"
 
index 101cd9f..8766a24 100644 (file)
@@ -32,7 +32,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_ARM)
+#if V8_TARGET_ARCH_ARM
 
 #include "cpu.h"
 #include "macro-assembler.h"
index 2f0a7c4..7faea08 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_ARM)
+#if V8_TARGET_ARCH_ARM
 
 #include "codegen.h"
 #include "debug.h"
index f55552d..6101bec 100644 (file)
@@ -56,7 +56,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_ARM)
+#if V8_TARGET_ARCH_ARM
 
 #include "constants-arm.h"
 #include "disasm.h"
index f5a7dbd..b207180 100644 (file)
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_ARM)
+#if V8_TARGET_ARCH_ARM
 
 #include "assembler.h"
 #include "assembler-arm.h"
 #include "assembler-arm-inl.h"
-#include "frames-inl.h"
+#include "frames.h"
 #include "macro-assembler.h"
 #include "macro-assembler-arm.h"
 
@@ -40,11 +40,6 @@ namespace v8 {
 namespace internal {
 
 
-Address ExitFrame::ComputeStackPointer(Address fp) {
-  return Memory::Address_at(fp + ExitFrameConstants::kSPOffset);
-}
-
-
 Register JavaScriptFrame::fp_register() { return v8::internal::fp; }
 Register JavaScriptFrame::context_register() { return cp; }
 
index 8b24bf1..41f02be 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_ARM)
+#if V8_TARGET_ARCH_ARM
 
 #include "code-stubs.h"
 #include "codegen.h"
@@ -129,7 +129,7 @@ void FullCodeGenerator::Generate() {
   CompilationInfo* info = info_;
   handler_table_ =
       isolate()->factory()->NewFixedArray(function()->handler_count(), TENURED);
-  profiling_counter_ = isolate()->factory()->NewJSGlobalPropertyCell(
+  profiling_counter_ = isolate()->factory()->NewCell(
       Handle<Smi>(Smi::FromInt(FLAG_interrupt_budget), isolate()));
   SetFunctionPosition(function());
   Comment cmnt(masm_, "[ function compiled by full code generator");
@@ -327,9 +327,9 @@ void FullCodeGenerator::ClearAccumulator() {
 
 void FullCodeGenerator::EmitProfilingCounterDecrement(int delta) {
   __ mov(r2, Operand(profiling_counter_));
-  __ ldr(r3, FieldMemOperand(r2, JSGlobalPropertyCell::kValueOffset));
+  __ ldr(r3, FieldMemOperand(r2, Cell::kValueOffset));
   __ sub(r3, r3, Operand(Smi::FromInt(delta)), SetCC);
-  __ str(r3, FieldMemOperand(r2, JSGlobalPropertyCell::kValueOffset));
+  __ str(r3, FieldMemOperand(r2, Cell::kValueOffset));
 }
 
 
@@ -345,7 +345,7 @@ void FullCodeGenerator::EmitProfilingCounterReset() {
   }
   __ mov(r2, Operand(profiling_counter_));
   __ mov(r3, Operand(Smi::FromInt(reset_value)));
-  __ str(r3, FieldMemOperand(r2, JSGlobalPropertyCell::kValueOffset));
+  __ str(r3, FieldMemOperand(r2, Cell::kValueOffset));
 }
 
 
@@ -361,7 +361,7 @@ void FullCodeGenerator::EmitBackEdgeBookkeeping(IterationStatement* stmt,
     ASSERT(back_edge_target->is_bound());
     int distance = masm_->SizeOfCodeGeneratedSince(back_edge_target);
     weight = Min(kMaxBackEdgeWeight,
-                 Max(1, distance / kBackEdgeDistanceUnit));
+                 Max(1, distance / kCodeSizeMultiplier));
   }
   EmitProfilingCounterDecrement(weight);
   __ b(pl, &ok);
@@ -404,7 +404,7 @@ void FullCodeGenerator::EmitReturnSequence() {
       } else if (FLAG_weighted_back_edges) {
         int distance = masm_->pc_offset();
         weight = Min(kMaxBackEdgeWeight,
-                     Max(1, distance / kBackEdgeDistanceUnit));
+                     Max(1, distance / kCodeSizeMultiplier));
       }
       EmitProfilingCounterDecrement(weight);
       Label ok;
@@ -1164,15 +1164,13 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) {
   Label non_proxy;
   __ bind(&fixed_array);
 
-  Handle<JSGlobalPropertyCell> cell =
-      isolate()->factory()->NewJSGlobalPropertyCell(
-          Handle<Object>(
-              Smi::FromInt(TypeFeedbackCells::kForInFastCaseMarker),
-              isolate()));
+  Handle<Cell> cell = isolate()->factory()->NewCell(
+      Handle<Object>(Smi::FromInt(TypeFeedbackCells::kForInFastCaseMarker),
+                     isolate()));
   RecordTypeFeedbackCell(stmt->ForInFeedbackId(), cell);
   __ LoadHeapObject(r1, cell);
   __ mov(r2, Operand(Smi::FromInt(TypeFeedbackCells::kForInSlowCaseMarker)));
-  __ str(r2, FieldMemOperand(r1, JSGlobalPropertyCell::kValueOffset));
+  __ str(r2, FieldMemOperand(r1, Cell::kValueOffset));
 
   __ mov(r1, Operand(Smi::FromInt(1)));  // Smi indicates slow check
   __ ldr(r2, MemOperand(sp, 0 * kPointerSize));  // Get enumerated object
@@ -1694,10 +1692,10 @@ void FullCodeGenerator::VisitObjectLiteral(ObjectLiteral* expr) {
         ASSERT(!CompileTimeValue::IsCompileTimeValue(property->value()));
         // Fall through.
       case ObjectLiteral::Property::COMPUTED:
-        if (key->handle()->IsInternalizedString()) {
+        if (key->value()->IsInternalizedString()) {
           if (property->emit_store()) {
             VisitForAccumulatorValue(value);
-            __ mov(r2, Operand(key->handle()));
+            __ mov(r2, Operand(key->value()));
             __ ldr(r1, MemOperand(sp));
             Handle<Code> ic = is_classic_mode()
                 ? isolate()->builtins()->StoreIC_Initialize()
@@ -1831,20 +1829,18 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
     Expression* subexpr = subexprs->at(i);
     // If the subexpression is a literal or a simple materialized literal it
     // is already set in the cloned array.
-    if (subexpr->AsLiteral() != NULL ||
-        CompileTimeValue::IsCompileTimeValue(subexpr)) {
-      continue;
-    }
+    if (CompileTimeValue::IsCompileTimeValue(subexpr)) continue;
 
     if (!result_saved) {
       __ push(r0);
+      __ Push(Smi::FromInt(expr->literal_index()));
       result_saved = true;
     }
     VisitForAccumulatorValue(subexpr);
 
     if (IsFastObjectElementsKind(constant_elements_kind)) {
       int offset = FixedArray::kHeaderSize + (i * kPointerSize);
-      __ ldr(r6, MemOperand(sp));  // Copy of array literal.
+      __ ldr(r6, MemOperand(sp, kPointerSize));  // Copy of array literal.
       __ ldr(r1, FieldMemOperand(r6, JSObject::kElementsOffset));
       __ str(result_register(), FieldMemOperand(r1, offset));
       // Update the write barrier for the array store.
@@ -1852,10 +1848,7 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
                           kLRHasBeenSaved, kDontSaveFPRegs,
                           EMIT_REMEMBERED_SET, INLINE_SMI_CHECK);
     } else {
-      __ ldr(r1, MemOperand(sp));  // Copy of array literal.
-      __ ldr(r2, FieldMemOperand(r1, JSObject::kMapOffset));
       __ mov(r3, Operand(Smi::FromInt(i)));
-      __ mov(r4, Operand(Smi::FromInt(expr->literal_index())));
       StoreArrayLiteralElementStub stub;
       __ CallStub(&stub);
     }
@@ -1864,6 +1857,7 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
   }
 
   if (result_saved) {
+    __ pop();  // literal index
     context()->PlugTOS();
   } else {
     context()->Plug(r0);
@@ -1991,22 +1985,37 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
   VisitForStackValue(expr->expression());
 
   switch (expr->yield_kind()) {
-    case Yield::INITIAL:
-    case Yield::SUSPEND: {
-      VisitForStackValue(expr->generator_object());
+    case Yield::SUSPEND:
+      // Pop value from top-of-stack slot; box result into result register.
+      EmitCreateIteratorResult(false);
+      __ push(result_register());
+      // Fall through.
+    case Yield::INITIAL: {
+      Label suspend, continuation, post_runtime, resume;
+
+      __ jmp(&suspend);
+
+      __ bind(&continuation);
+      __ jmp(&resume);
+
+      __ bind(&suspend);
+      VisitForAccumulatorValue(expr->generator_object());
+      ASSERT(continuation.pos() > 0 && Smi::IsValid(continuation.pos()));
+      __ mov(r1, Operand(Smi::FromInt(continuation.pos())));
+      __ str(r1, FieldMemOperand(r0, JSGeneratorObject::kContinuationOffset));
+      __ str(cp, FieldMemOperand(r0, JSGeneratorObject::kContextOffset));
+      __ mov(r1, cp);
+      __ RecordWriteField(r0, JSGeneratorObject::kContextOffset, r1, r2,
+                          kLRHasBeenSaved, kDontSaveFPRegs);
+      __ add(r1, fp, Operand(StandardFrameConstants::kExpressionsOffset));
+      __ cmp(sp, r1);
+      __ b(eq, &post_runtime);
+      __ push(r0);  // generator object
       __ CallRuntime(Runtime::kSuspendJSGeneratorObject, 1);
-      __ ldr(context_register(),
-             MemOperand(fp, StandardFrameConstants::kContextOffset));
-
-      Label resume;
-      __ CompareRoot(result_register(), Heap::kTheHoleValueRootIndex);
-      __ b(ne, &resume);
-      if (expr->yield_kind() == Yield::SUSPEND) {
-        EmitReturnIteratorResult(false);
-      } else {
-        __ pop(result_register());
-        EmitReturnSequence();
-      }
+      __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
+      __ bind(&post_runtime);
+      __ pop(result_register());
+      EmitReturnSequence();
 
       __ bind(&resume);
       context()->Plug(result_register());
@@ -2018,7 +2027,10 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
       __ mov(r1, Operand(Smi::FromInt(JSGeneratorObject::kGeneratorClosed)));
       __ str(r1, FieldMemOperand(result_register(),
                                  JSGeneratorObject::kContinuationOffset));
-      EmitReturnIteratorResult(true);
+      // Pop value from top-of-stack slot, box result into result register.
+      EmitCreateIteratorResult(true);
+      EmitUnwindBeforeReturn();
+      EmitReturnSequence();
       break;
     }
 
@@ -2029,76 +2041,66 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
       // [sp + 1 * kPointerSize] iter
       // [sp + 0 * kPointerSize] g
 
-      Label l_catch, l_try, l_resume, l_next, l_call, l_loop;
+      Label l_catch, l_try, l_suspend, l_continuation, l_resume;
+      Label l_next, l_call, l_loop;
       // Initial send value is undefined.
       __ LoadRoot(r0, Heap::kUndefinedValueRootIndex);
       __ b(&l_next);
 
-      // catch (e) { receiver = iter; f = iter.throw; arg = e; goto l_call; }
+      // catch (e) { receiver = iter; f = 'throw'; arg = e; goto l_call; }
       __ bind(&l_catch);
       handler_table()->set(expr->index(), Smi::FromInt(l_catch.pos()));
+      __ LoadRoot(r2, Heap::kthrow_stringRootIndex);     // "throw"
       __ ldr(r3, MemOperand(sp, 1 * kPointerSize));      // iter
       __ push(r3);                                       // iter
       __ push(r0);                                       // exception
-      __ mov(r0, r3);                                    // iter
-      __ LoadRoot(r2, Heap::kthrow_stringRootIndex);     // "throw"
-      Handle<Code> throw_ic = isolate()->builtins()->LoadIC_Initialize();
-      CallIC(throw_ic);                                  // iter.throw in r0
       __ jmp(&l_call);
 
-      // try { received = yield result.value }
+      // try { received = %yield result }
+      // Shuffle the received result above a try handler and yield it without
+      // re-boxing.
       __ bind(&l_try);
-      __ pop(r0);                                        // result.value
+      __ pop(r0);                                        // result
       __ PushTryHandler(StackHandler::CATCH, expr->index());
       const int handler_size = StackHandlerConstants::kSize;
-      __ push(r0);                                       // result.value
-      __ ldr(r3, MemOperand(sp, (0 + 1) * kPointerSize + handler_size));  // g
-      __ push(r3);                                       // g
+      __ push(r0);                                       // result
+      __ jmp(&l_suspend);
+      __ bind(&l_continuation);
+      __ jmp(&l_resume);
+      __ bind(&l_suspend);
+      const int generator_object_depth = kPointerSize + handler_size;
+      __ ldr(r0, MemOperand(sp, generator_object_depth));
+      __ push(r0);                                       // g
+      ASSERT(l_continuation.pos() > 0 && Smi::IsValid(l_continuation.pos()));
+      __ mov(r1, Operand(Smi::FromInt(l_continuation.pos())));
+      __ str(r1, FieldMemOperand(r0, JSGeneratorObject::kContinuationOffset));
+      __ str(cp, FieldMemOperand(r0, JSGeneratorObject::kContextOffset));
+      __ mov(r1, cp);
+      __ RecordWriteField(r0, JSGeneratorObject::kContextOffset, r1, r2,
+                          kLRHasBeenSaved, kDontSaveFPRegs);
       __ CallRuntime(Runtime::kSuspendJSGeneratorObject, 1);
-      __ ldr(context_register(),
-             MemOperand(fp, StandardFrameConstants::kContextOffset));
-      __ CompareRoot(r0, Heap::kTheHoleValueRootIndex);
-      __ b(ne, &l_resume);
-      EmitReturnIteratorResult(false);
+      __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
+      __ pop(r0);                                        // result
+      EmitReturnSequence();
       __ bind(&l_resume);                                // received in r0
       __ PopTryHandler();
 
-      // receiver = iter; f = iter.next; arg = received;
+      // receiver = iter; f = 'next'; arg = received;
       __ bind(&l_next);
+      __ LoadRoot(r2, Heap::knext_stringRootIndex);      // "next"
       __ ldr(r3, MemOperand(sp, 1 * kPointerSize));      // iter
       __ push(r3);                                       // iter
       __ push(r0);                                       // received
-      __ mov(r0, r3);                                    // iter
-      __ LoadRoot(r2, Heap::knext_stringRootIndex);      // "next"
-      Handle<Code> next_ic = isolate()->builtins()->LoadIC_Initialize();
-      CallIC(next_ic);                                   // iter.next in r0
 
-      // result = f.call(receiver, arg);
+      // result = receiver[f](arg);
       __ bind(&l_call);
-      Label l_call_runtime;
-      __ JumpIfSmi(r0, &l_call_runtime);
-      __ CompareObjectType(r0, r1, r1, JS_FUNCTION_TYPE);
-      __ b(ne, &l_call_runtime);
-      __ mov(r1, r0);
-      ParameterCount count(1);
-      __ InvokeFunction(r1, count, CALL_FUNCTION,
-                        NullCallWrapper(), CALL_AS_METHOD);
+      Handle<Code> ic = isolate()->stub_cache()->ComputeKeyedCallInitialize(1);
+      CallIC(ic);
       __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
-      __ jmp(&l_loop);
-      __ bind(&l_call_runtime);
-      __ push(r0);
-      __ CallRuntime(Runtime::kCall, 3);
 
-      // val = result.value; if (!result.done) goto l_try;
+      // if (!result.done) goto l_try;
       __ bind(&l_loop);
-      // result.value
       __ push(r0);                                       // save result
-      __ LoadRoot(r2, Heap::kvalue_stringRootIndex);     // "value"
-      Handle<Code> value_ic = isolate()->builtins()->LoadIC_Initialize();
-      CallIC(value_ic);                                  // result.value in r0
-      __ pop(r1);                                        // result
-      __ push(r0);                                       // result.value
-      __ mov(r0, r1);                                    // result
       __ LoadRoot(r2, Heap::kdone_stringRootIndex);      // "done"
       Handle<Code> done_ic = isolate()->builtins()->LoadIC_Initialize();
       CallIC(done_ic);                                   // result.done in r0
@@ -2108,7 +2110,10 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
       __ b(eq, &l_try);
 
       // result.value
-      __ pop(r0);                                        // result.value
+      __ pop(r0);                                        // result
+      __ LoadRoot(r2, Heap::kvalue_stringRootIndex);     // "value"
+      Handle<Code> value_ic = isolate()->builtins()->LoadIC_Initialize();
+      CallIC(value_ic);                                  // result.value in r0
       context()->DropAndPlug(2, r0);                     // drop iter and g
       break;
     }
@@ -2149,7 +2154,7 @@ void FullCodeGenerator::EmitGeneratorResume(Expression *generator,
   __ LoadRoot(r2, Heap::kTheHoleValueRootIndex);
   Label push_argument_holes, push_frame;
   __ bind(&push_argument_holes);
-  __ sub(r3, r3, Operand(1), SetCC);
+  __ sub(r3, r3, Operand(Smi::FromInt(1)), SetCC);
   __ b(mi, &push_frame);
   __ push(r2);
   __ jmp(&push_argument_holes);
@@ -2214,13 +2219,20 @@ void FullCodeGenerator::EmitGeneratorResume(Expression *generator,
 }
 
 
-void FullCodeGenerator::EmitReturnIteratorResult(bool done) {
+void FullCodeGenerator::EmitCreateIteratorResult(bool done) {
   Label gc_required;
   Label allocated;
 
   Handle<Map> map(isolate()->native_context()->generator_result_map());
 
   __ Allocate(map->instance_size(), r0, r2, r3, &gc_required, TAG_OBJECT);
+  __ jmp(&allocated);
+
+  __ bind(&gc_required);
+  __ Push(Smi::FromInt(map->instance_size()));
+  __ CallRuntime(Runtime::kAllocateInNewSpace, 1);
+  __ ldr(context_register(),
+         MemOperand(fp, StandardFrameConstants::kContextOffset));
 
   __ bind(&allocated);
   __ mov(r1, Operand(map));
@@ -2240,33 +2252,13 @@ void FullCodeGenerator::EmitReturnIteratorResult(bool done) {
   // root set.
   __ RecordWriteField(r0, JSGeneratorObject::kResultValuePropertyOffset,
                       r2, r3, kLRHasBeenSaved, kDontSaveFPRegs);
-
-  if (done) {
-    // Exit all nested statements.
-    NestedStatement* current = nesting_stack_;
-    int stack_depth = 0;
-    int context_length = 0;
-    while (current != NULL) {
-      current = current->Exit(&stack_depth, &context_length);
-    }
-    __ Drop(stack_depth);
-  }
-
-  EmitReturnSequence();
-
-  __ bind(&gc_required);
-  __ Push(Smi::FromInt(map->instance_size()));
-  __ CallRuntime(Runtime::kAllocateInNewSpace, 1);
-  __ ldr(context_register(),
-         MemOperand(fp, StandardFrameConstants::kContextOffset));
-  __ jmp(&allocated);
 }
 
 
 void FullCodeGenerator::EmitNamedPropertyLoad(Property* prop) {
   SetSourcePosition(prop->position());
   Literal* key = prop->key()->AsLiteral();
-  __ mov(r2, Operand(key->handle()));
+  __ mov(r2, Operand(key->value()));
   // Call load IC. It has arguments receiver and property name r0 and r2.
   Handle<Code> ic = isolate()->builtins()->LoadIC_Initialize();
   CallIC(ic, RelocInfo::CODE_TARGET, prop->PropertyFeedbackId());
@@ -2421,7 +2413,7 @@ void FullCodeGenerator::EmitAssignment(Expression* expr) {
       VisitForAccumulatorValue(prop->obj());
       __ mov(r1, r0);
       __ pop(r0);  // Restore value.
-      __ mov(r2, Operand(prop->key()->AsLiteral()->handle()));
+      __ mov(r2, Operand(prop->key()->AsLiteral()->value()));
       Handle<Code> ic = is_classic_mode()
           ? isolate()->builtins()->StoreIC_Initialize()
           : isolate()->builtins()->StoreIC_Initialize_Strict();
@@ -2550,7 +2542,7 @@ void FullCodeGenerator::EmitNamedPropertyAssignment(Assignment* expr) {
 
   // Record source code position before IC call.
   SetSourcePosition(expr->position());
-  __ mov(r2, Operand(prop->key()->AsLiteral()->handle()));
+  __ mov(r2, Operand(prop->key()->AsLiteral()->value()));
   __ pop(r1);
 
   Handle<Code> ic = is_classic_mode()
@@ -2683,8 +2675,7 @@ void FullCodeGenerator::EmitCallWithStub(Call* expr, CallFunctionFlags flags) {
   flags = static_cast<CallFunctionFlags>(flags | RECORD_CALL_TARGET);
   Handle<Object> uninitialized =
       TypeFeedbackCells::UninitializedSentinel(isolate());
-  Handle<JSGlobalPropertyCell> cell =
-      isolate()->factory()->NewJSGlobalPropertyCell(uninitialized);
+  Handle<Cell> cell = isolate()->factory()->NewCell(uninitialized);
   RecordTypeFeedbackCell(expr->CallFeedbackId(), cell);
   __ mov(r2, Operand(cell));
 
@@ -2825,7 +2816,7 @@ void FullCodeGenerator::VisitCall(Call* expr) {
     }
     if (property->key()->IsPropertyName()) {
       EmitCallWithIC(expr,
-                     property->key()->AsLiteral()->handle(),
+                     property->key()->AsLiteral()->value(),
                      RelocInfo::CODE_TARGET);
     } else {
       EmitKeyedCallWithIC(expr, property->key());
@@ -2879,8 +2870,7 @@ void FullCodeGenerator::VisitCallNew(CallNew* expr) {
   // Record call targets in unoptimized code.
   Handle<Object> uninitialized =
       TypeFeedbackCells::UninitializedSentinel(isolate());
-  Handle<JSGlobalPropertyCell> cell =
-      isolate()->factory()->NewJSGlobalPropertyCell(uninitialized);
+  Handle<Cell> cell = isolate()->factory()->NewCell(uninitialized);
   RecordTypeFeedbackCell(expr->CallNewFeedbackId(), cell);
   __ mov(r2, Operand(cell));
 
@@ -3434,7 +3424,7 @@ void FullCodeGenerator::EmitDateField(CallRuntime* expr) {
   ZoneList<Expression*>* args = expr->arguments();
   ASSERT(args->length() == 2);
   ASSERT_NE(NULL, args->at(1)->AsLiteral());
-  Smi* index = Smi::cast(*(args->at(1)->AsLiteral()->handle()));
+  Smi* index = Smi::cast(*(args->at(1)->AsLiteral()->value()));
 
   VisitForAccumulatorValue(args->at(0));  // Load the object.
 
@@ -3853,7 +3843,7 @@ void FullCodeGenerator::EmitGetFromCache(CallRuntime* expr) {
   ZoneList<Expression*>* args = expr->arguments();
   ASSERT_EQ(2, args->length());
   ASSERT_NE(NULL, args->at(0)->AsLiteral());
-  int cache_id = Smi::cast(*(args->at(0)->AsLiteral()->handle()))->value();
+  int cache_id = Smi::cast(*(args->at(0)->AsLiteral()->value()))->value();
 
   Handle<FixedArray> jsfunction_result_caches(
       isolate()->native_context()->jsfunction_result_caches());
@@ -4526,7 +4516,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
       }
       break;
     case NAMED_PROPERTY: {
-      __ mov(r2, Operand(prop->key()->AsLiteral()->handle()));
+      __ mov(r2, Operand(prop->key()->AsLiteral()->value()));
       __ pop(r1);
       Handle<Code> ic = is_classic_mode()
           ? isolate()->builtins()->StoreIC_Initialize()
index 87865b2..89ebfde 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_ARM)
+#if V8_TARGET_ARCH_ARM
 
 #include "assembler-arm.h"
 #include "code-stubs.h"
@@ -321,7 +321,8 @@ static void GenerateKeyNameCheck(MacroAssembler* masm,
   __ tst(hash, Operand(Name::kContainsCachedArrayIndexMask));
   __ b(eq, index_string);
 
-  // Is the string internalized?
+  // Is the string internalized? We know it's a string, so a single
+  // bit test is enough.
   // map: key map
   __ ldrb(hash, FieldMemOperand(map, Map::kInstanceTypeOffset));
   STATIC_ASSERT(kInternalizedTag != 0);
@@ -1581,8 +1582,8 @@ void StoreIC::GenerateNormal(MacroAssembler* masm) {
 }
 
 
-void StoreIC::GenerateGlobalProxy(MacroAssembler* masm,
-                                  StrictModeFlag strict_mode) {
+void StoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm,
+                                         StrictModeFlag strict_mode) {
   // ----------- S t a t e -------------
   //  -- r0    : value
   //  -- r1    : receiver
index fbb9c6e..b08353e 100644 (file)
@@ -41,24 +41,6 @@ namespace internal {
 LITHIUM_CONCRETE_INSTRUCTION_LIST(DEFINE_COMPILE)
 #undef DEFINE_COMPILE
 
-LOsrEntry::LOsrEntry() {
-  for (int i = 0; i < Register::NumAllocatableRegisters(); ++i) {
-    register_spills_[i] = NULL;
-  }
-  for (int i = 0; i < DoubleRegister::NumAllocatableRegisters(); ++i) {
-    double_register_spills_[i] = NULL;
-  }
-}
-
-
-void LOsrEntry::MarkSpilledRegister(int allocation_index,
-                                    LOperand* spill_operand) {
-  ASSERT(spill_operand->IsStackSlot());
-  ASSERT(register_spills_[allocation_index] == NULL);
-  register_spills_[allocation_index] = spill_operand;
-}
-
-
 #ifdef DEBUG
 void LInstruction::VerifyCall() {
   // Call instructions can use only fixed registers as temporaries and
@@ -81,14 +63,6 @@ void LInstruction::VerifyCall() {
 #endif
 
 
-void LOsrEntry::MarkSpilledDoubleRegister(int allocation_index,
-                                          LOperand* spill_operand) {
-  ASSERT(spill_operand->IsDoubleStackSlot());
-  ASSERT(double_register_spills_[allocation_index] == NULL);
-  double_register_spills_[allocation_index] = spill_operand;
-}
-
-
 void LInstruction::PrintTo(StringStream* stream) {
   stream->Add("%s ", this->Mnemonic());
 
@@ -352,8 +326,7 @@ void LCallNewArray::PrintDataTo(StringStream* stream) {
   constructor()->PrintTo(stream);
   stream->Add(" #%d / ", arity());
   ASSERT(hydrogen()->property_cell()->value()->IsSmi());
-  ElementsKind kind = static_cast<ElementsKind>(
-      Smi::cast(hydrogen()->property_cell()->value())->value());
+  ElementsKind kind = hydrogen()->elements_kind();
   stream->Add(" (%s) ", ElementsKindToString(kind));
 }
 
@@ -451,7 +424,7 @@ LOperand* LPlatformChunk::GetNextSpillSlot(bool is_double)  {
 LPlatformChunk* LChunkBuilder::Build() {
   ASSERT(is_unused());
   chunk_ = new(zone()) LPlatformChunk(info(), graph());
-  HPhase phase("L_Building chunk", chunk_);
+  LPhase phase("L_Building chunk", chunk_);
   status_ = BUILDING;
   const ZoneList<HBasicBlock*>* blocks = graph()->blocks();
   for (int i = 0; i < blocks->length(); i++) {
@@ -929,7 +902,7 @@ LEnvironment* LChunkBuilder::CreateEnvironment(
   BailoutId ast_id = hydrogen_env->ast_id();
   ASSERT(!ast_id.IsNone() ||
          hydrogen_env->frame_type() != JS_FUNCTION);
-  int value_count = hydrogen_env->length();
+  int value_count = hydrogen_env->length() - hydrogen_env->specials_count();
   LEnvironment* result = new(zone()) LEnvironment(
       hydrogen_env->closure(),
       hydrogen_env->frame_type(),
@@ -940,13 +913,15 @@ LEnvironment* LChunkBuilder::CreateEnvironment(
       outer,
       hydrogen_env->entry(),
       zone());
+  bool needs_arguments_object_materialization = false;
   int argument_index = *argument_index_accumulator;
-  for (int i = 0; i < value_count; ++i) {
+  for (int i = 0; i < hydrogen_env->length(); ++i) {
     if (hydrogen_env->is_special_index(i)) continue;
 
     HValue* value = hydrogen_env->values()->at(i);
     LOperand* op = NULL;
     if (value->IsArgumentsObject()) {
+      needs_arguments_object_materialization = true;
       op = NULL;
     } else if (value->IsPushArgument()) {
       op = new(zone()) LArgument(argument_index++);
@@ -958,6 +933,21 @@ LEnvironment* LChunkBuilder::CreateEnvironment(
                      value->CheckFlag(HInstruction::kUint32));
   }
 
+  if (needs_arguments_object_materialization) {
+    HArgumentsObject* arguments = hydrogen_env->entry() == NULL
+        ? graph()->GetArgumentsObject()
+        : hydrogen_env->entry()->arguments_object();
+    ASSERT(arguments->IsLinked());
+    for (int i = 1; i < arguments->arguments_count(); ++i) {
+      HValue* value = arguments->arguments_values()->at(i);
+      ASSERT(!value->IsArgumentsObject() && !value->IsPushArgument());
+      LOperand* op = UseAny(value);
+      result->AddValue(op,
+                       value->representation(),
+                       value->CheckFlag(HInstruction::kUint32));
+    }
+  }
+
   if (hydrogen_env->frame_type() == JS_FUNCTION) {
     *argument_index_accumulator = argument_index;
   }
@@ -982,10 +972,13 @@ LInstruction* LChunkBuilder::DoBranch(HBranch* instr) {
 
   LBranch* result = new(zone()) LBranch(UseRegister(value));
   // Tagged values that are not known smis or booleans require a
-  // deoptimization environment.
+  // deoptimization environment. If the instruction is generic no
+  // environment is needed since all cases are handled.
   Representation rep = value->representation();
   HType type = value->type();
-  if (rep.IsTagged() && !type.IsSmi() && !type.IsBoolean()) {
+  ToBooleanStub::Types expected = instr->expected_input_types();
+  if (rep.IsTagged() && !type.IsSmi() && !type.IsBoolean() &&
+      !expected.IsGeneric()) {
     return AssignEnvironment(result);
   }
   return result;
@@ -1386,19 +1379,6 @@ bool LChunkBuilder::HasMagicNumberForDivisor(int32_t divisor) {
 }
 
 
-HValue* LChunkBuilder::SimplifiedDividendForMathFloorOfDiv(HValue* dividend) {
-  // A value with an integer representation does not need to be transformed.
-  if (dividend->representation().IsInteger32()) {
-    return dividend;
-  // A change from an integer32 can be replaced by the integer32 value.
-  } else if (dividend->IsChange() &&
-      HChange::cast(dividend)->from().IsInteger32()) {
-    return HChange::cast(dividend)->value();
-  }
-  return NULL;
-}
-
-
 HValue* LChunkBuilder::SimplifiedDivisorForMathFloorOfDiv(HValue* divisor) {
   if (CpuFeatures::IsSupported(SUDIV)) {
     // A value with an integer representation does not need to be transformed.
@@ -1456,7 +1436,7 @@ LInstruction* LChunkBuilder::DoMod(HMod* instr) {
               instr->CheckFlag(HValue::kBailoutOnMinusZero))
           ? AssignEnvironment(result)
           : result;
-    } else if (instr->has_fixed_right_arg()) {
+    } else if (instr->fixed_right_arg().has_value) {
       LModI* mod = new(zone()) LModI(UseRegisterAtStart(left),
                                      UseRegisterAtStart(right));
       return AssignEnvironment(DefineAsRegister(mod));
@@ -1816,13 +1796,6 @@ LInstruction* LChunkBuilder::DoClassOfTestAndBranch(
 }
 
 
-LInstruction* LChunkBuilder::DoFixedArrayBaseLength(
-    HFixedArrayBaseLength* instr) {
-  LOperand* array = UseRegisterAtStart(instr->value());
-  return DefineAsRegister(new(zone()) LFixedArrayBaseLength(array));
-}
-
-
 LInstruction* LChunkBuilder::DoMapEnumLength(HMapEnumLength* instr) {
   LOperand* map = UseRegisterAtStart(instr->value());
   return DefineAsRegister(new(zone()) LMapEnumLength(map));
@@ -2019,7 +1992,7 @@ LInstruction* LChunkBuilder::DoChange(HChange* instr) {
 }
 
 
-LInstruction* LChunkBuilder::DoCheckNonSmi(HCheckNonSmi* instr) {
+LInstruction* LChunkBuilder::DoCheckHeapObject(HCheckHeapObject* instr) {
   LOperand* value = UseRegisterAtStart(instr->value());
   return AssignEnvironment(new(zone()) LCheckNonSmi(value));
 }
@@ -2416,6 +2389,14 @@ LInstruction* LChunkBuilder::DoStringLength(HStringLength* instr) {
 }
 
 
+LInstruction* LChunkBuilder::DoAllocateObject(HAllocateObject* instr) {
+  info()->MarkAsDeferredCalling();
+  LAllocateObject* result =
+      new(zone()) LAllocateObject(TempRegister(), TempRegister());
+  return AssignPointerMap(DefineAsRegister(result));
+}
+
+
 LInstruction* LChunkBuilder::DoAllocate(HAllocate* instr) {
   info()->MarkAsDeferredCalling();
   LOperand* size = instr->size()->IsConstant()
@@ -2588,8 +2569,9 @@ LInstruction* LChunkBuilder::DoEnterInlined(HEnterInlined* instr) {
                                                undefined,
                                                instr->inlining_kind(),
                                                instr->undefined_receiver());
-  if (instr->arguments_var() != NULL) {
-    inner->Bind(instr->arguments_var(), graph()->GetArgumentsObject());
+  // Only replay binding of arguments object if it wasn't removed from graph.
+  if (instr->arguments_var() != NULL && instr->arguments_object()->IsLinked()) {
+    inner->Bind(instr->arguments_var(), instr->arguments_object());
   }
   inner->set_entry(instr);
   current_block_->UpdateEnvironment(inner);
index ccfd0db..39cab8f 100644 (file)
@@ -49,6 +49,7 @@ class LCodeGen;
 #define LITHIUM_CONCRETE_INSTRUCTION_LIST(V)    \
   V(AccessArgumentsAt)                          \
   V(AddI)                                       \
+  V(AllocateObject)                             \
   V(Allocate)                                   \
   V(ApplyArguments)                             \
   V(ArgumentsElements)                          \
@@ -98,7 +99,6 @@ class LCodeGen;
   V(DoubleToSmi)                                \
   V(DummyUse)                                   \
   V(ElementsKind)                               \
-  V(FixedArrayBaseLength)                       \
   V(FunctionLiteral)                            \
   V(GetCachedArrayIndex)                        \
   V(GlobalObject)                               \
@@ -489,17 +489,44 @@ class LUnknownOSRValue: public LTemplateInstruction<1, 0, 0> {
 template<int I, int T>
 class LControlInstruction: public LTemplateInstruction<0, I, T> {
  public:
+  LControlInstruction() : false_label_(NULL), true_label_(NULL) { }
+
   virtual bool IsControl() const { return true; }
 
   int SuccessorCount() { return hydrogen()->SuccessorCount(); }
   HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); }
-  int true_block_id() { return hydrogen()->SuccessorAt(0)->block_id(); }
-  int false_block_id() { return hydrogen()->SuccessorAt(1)->block_id(); }
+
+  int TrueDestination(LChunk* chunk) {
+    return chunk->LookupDestination(true_block_id());
+  }
+  int FalseDestination(LChunk* chunk) {
+    return chunk->LookupDestination(false_block_id());
+  }
+
+  Label* TrueLabel(LChunk* chunk) {
+    if (true_label_ == NULL) {
+      true_label_ = chunk->GetAssemblyLabel(TrueDestination(chunk));
+    }
+    return true_label_;
+  }
+  Label* FalseLabel(LChunk* chunk) {
+    if (false_label_ == NULL) {
+      false_label_ = chunk->GetAssemblyLabel(FalseDestination(chunk));
+    }
+    return false_label_;
+  }
+
+ protected:
+  int true_block_id() { return SuccessorAt(0)->block_id(); }
+  int false_block_id() { return SuccessorAt(1)->block_id(); }
 
  private:
   HControlInstruction* hydrogen() {
     return HControlInstruction::cast(this->hydrogen_value());
   }
+
+  Label* false_label_;
+  Label* true_label_;
 };
 
 
@@ -1236,7 +1263,7 @@ class LBranch: public LControlInstruction<1, 0> {
 };
 
 
-class LCmpMapAndBranch: public LTemplateInstruction<0, 1, 1> {
+class LCmpMapAndBranch: public LControlInstruction<1, 1> {
  public:
   LCmpMapAndBranch(LOperand* value, LOperand* temp) {
     inputs_[0] = value;
@@ -1249,29 +1276,7 @@ class LCmpMapAndBranch: public LTemplateInstruction<0, 1, 1> {
   DECLARE_CONCRETE_INSTRUCTION(CmpMapAndBranch, "cmp-map-and-branch")
   DECLARE_HYDROGEN_ACCESSOR(CompareMap)
 
-  virtual bool IsControl() const { return true; }
-
   Handle<Map> map() const { return hydrogen()->map(); }
-  int true_block_id() const {
-    return hydrogen()->FirstSuccessor()->block_id();
-  }
-  int false_block_id() const {
-    return hydrogen()->SecondSuccessor()->block_id();
-  }
-};
-
-
-class LFixedArrayBaseLength: public LTemplateInstruction<1, 1, 0> {
- public:
-  explicit LFixedArrayBaseLength(LOperand* value) {
-    inputs_[0] = value;
-  }
-
-  LOperand* value() { return inputs_[0]; }
-
-  DECLARE_CONCRETE_INSTRUCTION(FixedArrayBaseLength,
-                               "fixed-array-base-length")
-  DECLARE_HYDROGEN_ACCESSOR(FixedArrayBaseLength)
 };
 
 
@@ -2401,6 +2406,7 @@ class LCheckNonSmi: public LTemplateInstruction<0, 1, 0> {
   LOperand* value() { return inputs_[0]; }
 
   DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi")
+  DECLARE_HYDROGEN_ACCESSOR(CheckHeapObject)
 };
 
 
@@ -2444,6 +2450,21 @@ class LClampTToUint8: public LTemplateInstruction<1, 1, 1> {
 };
 
 
+class LAllocateObject: public LTemplateInstruction<1, 1, 2> {
+ public:
+  LAllocateObject(LOperand* temp, LOperand* temp2) {
+    temps_[0] = temp;
+    temps_[1] = temp2;
+  }
+
+  LOperand* temp() { return temps_[0]; }
+  LOperand* temp2() { return temps_[1]; }
+
+  DECLARE_CONCRETE_INSTRUCTION(AllocateObject, "allocate-object")
+  DECLARE_HYDROGEN_ACCESSOR(AllocateObject)
+};
+
+
 class LAllocate: public LTemplateInstruction<1, 2, 2> {
  public:
   LAllocate(LOperand* size, LOperand* temp1, LOperand* temp2) {
@@ -2546,26 +2567,10 @@ class LDeleteProperty: public LTemplateInstruction<1, 2, 0> {
 
 class LOsrEntry: public LTemplateInstruction<0, 0, 0> {
  public:
-  LOsrEntry();
+  LOsrEntry() {}
 
   virtual bool HasInterestingComment(LCodeGen* gen) const { return false; }
   DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry")
-
-  LOperand** SpilledRegisterArray() { return register_spills_; }
-  LOperand** SpilledDoubleRegisterArray() { return double_register_spills_; }
-
-  void MarkSpilledRegister(int allocation_index, LOperand* spill_operand);
-  void MarkSpilledDoubleRegister(int allocation_index,
-                                 LOperand* spill_operand);
-
- private:
-  // Arrays of spill slot operands for registers with an assigned spill
-  // slot, i.e., that must also be restored to the spill slot on OSR entry.
-  // NULL if the register has no assigned spill slot.  Indexed by allocation
-  // index.
-  LOperand* register_spills_[Register::kMaxNumAllocatableRegisters];
-  LOperand* double_register_spills_[
-      DoubleRegister::kMaxNumAllocatableRegisters];
 };
 
 
@@ -2692,7 +2697,6 @@ class LChunkBuilder BASE_EMBEDDED {
   LInstruction* DoRSub(HSub* instr);
 
   static bool HasMagicNumberForDivisor(int32_t divisor);
-  static HValue* SimplifiedDividendForMathFloorOfDiv(HValue* val);
   static HValue* SimplifiedDivisorForMathFloorOfDiv(HValue* val);
 
   LInstruction* DoMathFloor(HUnaryMathOperation* instr);
index 96befb0..272db15 100644 (file)
@@ -62,7 +62,7 @@ class SafepointGenerator : public CallWrapper {
 #define __ masm()->
 
 bool LCodeGen::GenerateCode() {
-  HPhase phase("Z_Code generation", chunk());
+  LPhase phase("Z_Code generation", chunk());
   ASSERT(is_unused());
   status_ = GENERATING;
 
@@ -87,20 +87,7 @@ void LCodeGen::FinishCode(Handle<Code> code) {
     RegisterDependentCodeForEmbeddedMaps(code);
   }
   PopulateDeoptimizationData(code);
-  for (int i = 0 ; i < prototype_maps_.length(); i++) {
-    prototype_maps_.at(i)->AddDependentCode(
-        DependentCode::kPrototypeCheckGroup, code);
-  }
-  for (int i = 0 ; i < transition_maps_.length(); i++) {
-    transition_maps_.at(i)->AddDependentCode(
-        DependentCode::kTransitionGroup, code);
-  }
-  if (graph()->depends_on_empty_array_proto_elements()) {
-    isolate()->initial_object_prototype()->map()->AddDependentCode(
-        DependentCode::kElementsCantBeAddedGroup, code);
-    isolate()->initial_array_prototype()->map()->AddDependentCode(
-        DependentCode::kElementsCantBeAddedGroup, code);
-  }
+  info()->CommitDependencies(code);
 }
 
 
@@ -593,27 +580,15 @@ MemOperand LCodeGen::ToHighMemOperand(LOperand* op) const {
 
 
 void LCodeGen::WriteTranslation(LEnvironment* environment,
-                                Translation* translation,
-                                int* pushed_arguments_index,
-                                int* pushed_arguments_count) {
+                                Translation* translation) {
   if (environment == NULL) return;
 
   // The translation includes one command per value in the environment.
-  int translation_size = environment->values()->length();
+  int translation_size = environment->translation_size();
   // The output frame height does not include the parameters.
   int height = translation_size - environment->parameter_count();
 
-  // Function parameters are arguments to the outermost environment. The
-  // arguments index points to the first element of a sequence of tagged
-  // values on the stack that represent the arguments. This needs to be
-  // kept in sync with the LArgumentsElements implementation.
-  *pushed_arguments_index = -environment->parameter_count();
-  *pushed_arguments_count = environment->parameter_count();
-
-  WriteTranslation(environment->outer(),
-                   translation,
-                   pushed_arguments_index,
-                   pushed_arguments_count);
+  WriteTranslation(environment->outer(), translation);
   bool has_closure_id = !info()->closure().is_null() &&
       !info()->closure().is_identical_to(environment->closure());
   int closure_id = has_closure_id
@@ -645,60 +620,29 @@ void LCodeGen::WriteTranslation(LEnvironment* environment,
       break;
   }
 
-  // Inlined frames which push their arguments cause the index to be
-  // bumped and another stack area to be used for materialization,
-  // otherwise actual argument values are unknown for inlined frames.
-  bool arguments_known = true;
-  int arguments_index = *pushed_arguments_index;
-  int arguments_count = *pushed_arguments_count;
-  if (environment->entry() != NULL) {
-    arguments_known = environment->entry()->arguments_pushed();
-    arguments_index = arguments_index < 0
-        ? GetStackSlotCount() : arguments_index + arguments_count;
-    arguments_count = environment->entry()->arguments_count() + 1;
-    if (environment->entry()->arguments_pushed()) {
-      *pushed_arguments_index = arguments_index;
-      *pushed_arguments_count = arguments_count;
-    }
-  }
-
   for (int i = 0; i < translation_size; ++i) {
     LOperand* value = environment->values()->at(i);
-    // spilled_registers_ and spilled_double_registers_ are either
-    // both NULL or both set.
-    if (environment->spilled_registers() != NULL && value != NULL) {
-      if (value->IsRegister() &&
-          environment->spilled_registers()[value->index()] != NULL) {
-        translation->MarkDuplicate();
+
+    // TODO(mstarzinger): Introduce marker operands to indicate that this value
+    // is not present and must be reconstructed from the deoptimizer. Currently
+    // this is only used for the arguments object.
+    if (value == NULL) {
+      int arguments_count = environment->values()->length() - translation_size;
+      translation->BeginArgumentsObject(arguments_count);
+      for (int i = 0; i < arguments_count; ++i) {
+        LOperand* value = environment->values()->at(translation_size + i);
         AddToTranslation(translation,
-                         environment->spilled_registers()[value->index()],
-                         environment->HasTaggedValueAt(i),
-                         environment->HasUint32ValueAt(i),
-                         arguments_known,
-                         arguments_index,
-                         arguments_count);
-      } else if (
-          value->IsDoubleRegister() &&
-          environment->spilled_double_registers()[value->index()] != NULL) {
-        translation->MarkDuplicate();
-        AddToTranslation(
-            translation,
-            environment->spilled_double_registers()[value->index()],
-            false,
-            false,
-            arguments_known,
-            arguments_index,
-            arguments_count);
+                         value,
+                         environment->HasTaggedValueAt(translation_size + i),
+                         environment->HasUint32ValueAt(translation_size + i));
       }
+      continue;
     }
 
     AddToTranslation(translation,
                      value,
                      environment->HasTaggedValueAt(i),
-                     environment->HasUint32ValueAt(i),
-                     arguments_known,
-                     arguments_index,
-                     arguments_count);
+                     environment->HasUint32ValueAt(i));
   }
 }
 
@@ -706,17 +650,8 @@ void LCodeGen::WriteTranslation(LEnvironment* environment,
 void LCodeGen::AddToTranslation(Translation* translation,
                                 LOperand* op,
                                 bool is_tagged,
-                                bool is_uint32,
-                                bool arguments_known,
-                                int arguments_index,
-                                int arguments_count) {
-  if (op == NULL) {
-    // TODO(twuerthinger): Introduce marker operands to indicate that this value
-    // is not present and must be reconstructed from the deoptimizer. Currently
-    // this is only used for the arguments object.
-    translation->StoreArgumentsObject(
-        arguments_known, arguments_index, arguments_count);
-  } else if (op->IsStackSlot()) {
+                                bool is_uint32) {
+  if (op->IsStackSlot()) {
     if (is_tagged) {
       translation->StoreStackSlot(op->index());
     } else if (is_uint32) {
@@ -823,8 +758,6 @@ void LCodeGen::RegisterEnvironmentForDeoptimization(LEnvironment* environment,
 
     int frame_count = 0;
     int jsframe_count = 0;
-    int args_index = 0;
-    int args_count = 0;
     for (LEnvironment* e = environment; e != NULL; e = e->outer()) {
       ++frame_count;
       if (e->frame_type() == JS_FUNCTION) {
@@ -832,7 +765,7 @@ void LCodeGen::RegisterEnvironmentForDeoptimization(LEnvironment* environment,
       }
     }
     Translation translation(&translations_, frame_count, jsframe_count, zone());
-    WriteTranslation(environment, &translation, &args_index, &args_count);
+    WriteTranslation(environment, &translation);
     int deoptimization_index = deoptimizations_.length();
     int pc_offset = masm()->pc_offset();
     environment->Register(deoptimization_index,
@@ -865,7 +798,7 @@ void LCodeGen::DeoptimizeIf(Condition cc,
     return;
   }
 
-  if (FLAG_trap_on_deopt) {
+  if (FLAG_trap_on_deopt && info()->IsOptimizing()) {
     __ stop("trap_on_deopt", cc);
   }
 
@@ -1160,7 +1093,8 @@ void LCodeGen::DoCallStub(LCallStub* instr) {
 
 
 void LCodeGen::DoUnknownOSRValue(LUnknownOSRValue* instr) {
-  // Nothing to do.
+  // Record the address of the first unknown OSR value as the place to enter.
+  if (osr_pc_offset_ == -1) osr_pc_offset_ = masm()->pc_offset();
 }
 
 
@@ -1194,12 +1128,12 @@ void LCodeGen::DoModI(LModI* instr) {
     __ and_(result_reg, left_reg, Operand(divisor - 1));
     __ bind(&done);
 
-  } else if (hmod->has_fixed_right_arg()) {
+  } else if (hmod->fixed_right_arg().has_value) {
     Register left_reg = ToRegister(instr->left());
     Register right_reg = ToRegister(instr->right());
     Register result_reg = ToRegister(instr->result());
 
-    int32_t divisor = hmod->fixed_right_arg_value();
+    int32_t divisor = hmod->fixed_right_arg().value;
     ASSERT(IsPowerOf2(divisor));
 
     // Check if our assumption of a fixed right operand still holds.
@@ -1912,13 +1846,6 @@ void LCodeGen::DoConstantT(LConstantT* instr) {
 }
 
 
-void LCodeGen::DoFixedArrayBaseLength(LFixedArrayBaseLength* instr) {
-  Register result = ToRegister(instr->result());
-  Register array = ToRegister(instr->value());
-  __ ldr(result, FieldMemOperand(array, FixedArrayBase::kLengthOffset));
-}
-
-
 void LCodeGen::DoMapEnumLength(LMapEnumLength* instr) {
   Register result = ToRegister(instr->result());
   Register map = ToRegister(instr->value());
@@ -1946,10 +1873,12 @@ void LCodeGen::DoValueOf(LValueOf* instr) {
   Register map = ToRegister(instr->temp());
   Label done;
 
-  // If the object is a smi return the object.
-  __ SmiTst(input);
-  __ Move(result, input, eq);
-  __ b(eq, &done);
+  if (!instr->hydrogen()->value()->IsHeapObject()) {
+    // If the object is a smi return the object.
+    __ SmiTst(input);
+    __ Move(result, input, eq);
+    __ b(eq, &done);
+  }
 
   // If the object is not a value type, return the object.
   __ CompareObjectType(input, map, map, JS_VALUE_TYPE);
@@ -2199,11 +2128,12 @@ int LCodeGen::GetNextEmittedBlock() const {
   return -1;
 }
 
+template<class InstrType>
+void LCodeGen::EmitBranch(InstrType instr, Condition cc) {
+  int right_block = instr->FalseDestination(chunk_);
+  int left_block = instr->TrueDestination(chunk_);
 
-void LCodeGen::EmitBranch(int left_block, int right_block, Condition cc) {
   int next_block = GetNextEmittedBlock();
-  right_block = chunk_->LookupDestination(right_block);
-  left_block = chunk_->LookupDestination(left_block);
 
   if (right_block == left_block) {
     EmitGoto(left_block);
@@ -2224,22 +2154,19 @@ void LCodeGen::DoDebugBreak(LDebugBreak* instr) {
 
 
 void LCodeGen::DoBranch(LBranch* instr) {
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
   Representation r = instr->hydrogen()->value()->representation();
   if (r.IsInteger32() || r.IsSmi()) {
     ASSERT(!info()->IsStub());
     Register reg = ToRegister(instr->value());
     __ cmp(reg, Operand::Zero());
-    EmitBranch(true_block, false_block, ne);
+    EmitBranch(instr, ne);
   } else if (r.IsDouble()) {
     ASSERT(!info()->IsStub());
     DwVfpRegister reg = ToDoubleRegister(instr->value());
     // Test the double value. Zero and NaN are false.
     __ VFPCompareAndSetFlags(reg, 0.0);
-    __ cmp(r0, r0, vs);  // If NaN, set the Z flag.
-    EmitBranch(true_block, false_block, ne);
+    __ cmp(r0, r0, vs);  // If NaN, set the Z flag. (NaN -> false)
+    EmitBranch(instr, ne);
   } else {
     ASSERT(r.IsTagged());
     Register reg = ToRegister(instr->value());
@@ -2247,42 +2174,55 @@ void LCodeGen::DoBranch(LBranch* instr) {
     if (type.IsBoolean()) {
       ASSERT(!info()->IsStub());
       __ CompareRoot(reg, Heap::kTrueValueRootIndex);
-      EmitBranch(true_block, false_block, eq);
+      EmitBranch(instr, eq);
     } else if (type.IsSmi()) {
       ASSERT(!info()->IsStub());
       __ cmp(reg, Operand::Zero());
-      EmitBranch(true_block, false_block, ne);
+      EmitBranch(instr, ne);
+    } else if (type.IsJSArray()) {
+      ASSERT(!info()->IsStub());
+      EmitBranch(instr, al);
+    } else if (type.IsHeapNumber()) {
+      ASSERT(!info()->IsStub());
+      DwVfpRegister dbl_scratch = double_scratch0();
+      __ vldr(dbl_scratch, FieldMemOperand(reg, HeapNumber::kValueOffset));
+      // Test the double value. Zero and NaN are false.
+      __ VFPCompareAndSetFlags(dbl_scratch, 0.0);
+      __ cmp(r0, r0, vs);  // If NaN, set the Z flag. (NaN)
+      EmitBranch(instr, ne);
+    } else if (type.IsString()) {
+      ASSERT(!info()->IsStub());
+      __ ldr(ip, FieldMemOperand(reg, String::kLengthOffset));
+      __ cmp(ip, Operand::Zero());
+      EmitBranch(instr, ne);
     } else {
-      Label* true_label = chunk_->GetAssemblyLabel(true_block);
-      Label* false_label = chunk_->GetAssemblyLabel(false_block);
-
       ToBooleanStub::Types expected = instr->hydrogen()->expected_input_types();
       // Avoid deopts in the case where we've never executed this path before.
-      if (expected.IsEmpty()) expected = ToBooleanStub::all_types();
+      if (expected.IsEmpty()) expected = ToBooleanStub::Types::Generic();
 
       if (expected.Contains(ToBooleanStub::UNDEFINED)) {
         // undefined -> false.
         __ CompareRoot(reg, Heap::kUndefinedValueRootIndex);
-        __ b(eq, false_label);
+        __ b(eq, instr->FalseLabel(chunk_));
       }
       if (expected.Contains(ToBooleanStub::BOOLEAN)) {
         // Boolean -> its value.
         __ CompareRoot(reg, Heap::kTrueValueRootIndex);
-        __ b(eq, true_label);
+        __ b(eq, instr->TrueLabel(chunk_));
         __ CompareRoot(reg, Heap::kFalseValueRootIndex);
-        __ b(eq, false_label);
+        __ b(eq, instr->FalseLabel(chunk_));
       }
       if (expected.Contains(ToBooleanStub::NULL_TYPE)) {
         // 'null' -> false.
         __ CompareRoot(reg, Heap::kNullValueRootIndex);
-        __ b(eq, false_label);
+        __ b(eq, instr->FalseLabel(chunk_));
       }
 
       if (expected.Contains(ToBooleanStub::SMI)) {
         // Smis: 0 -> false, all other -> true.
         __ cmp(reg, Operand::Zero());
-        __ b(eq, false_label);
-        __ JumpIfSmi(reg, true_label);
+        __ b(eq, instr->FalseLabel(chunk_));
+        __ JumpIfSmi(reg, instr->TrueLabel(chunk_));
       } else if (expected.NeedsMap()) {
         // If we need a map later and have a Smi -> deopt.
         __ SmiTst(reg);
@@ -2297,14 +2237,14 @@ void LCodeGen::DoBranch(LBranch* instr) {
           // Undetectable -> false.
           __ ldrb(ip, FieldMemOperand(map, Map::kBitFieldOffset));
           __ tst(ip, Operand(1 << Map::kIsUndetectable));
-          __ b(ne, false_label);
+          __ b(ne, instr->FalseLabel(chunk_));
         }
       }
 
       if (expected.Contains(ToBooleanStub::SPEC_OBJECT)) {
         // spec object -> true.
         __ CompareInstanceType(map, ip, FIRST_SPEC_OBJECT_TYPE);
-        __ b(ge, true_label);
+        __ b(ge, instr->TrueLabel(chunk_));
       }
 
       if (expected.Contains(ToBooleanStub::STRING)) {
@@ -2314,15 +2254,15 @@ void LCodeGen::DoBranch(LBranch* instr) {
         __ b(ge, &not_string);
         __ ldr(ip, FieldMemOperand(reg, String::kLengthOffset));
         __ cmp(ip, Operand::Zero());
-        __ b(ne, true_label);
-        __ b(false_label);
+        __ b(ne, instr->TrueLabel(chunk_));
+        __ b(instr->FalseLabel(chunk_));
         __ bind(&not_string);
       }
 
       if (expected.Contains(ToBooleanStub::SYMBOL)) {
         // Symbol value -> true.
         __ CompareInstanceType(map, ip, SYMBOL_TYPE);
-        __ b(eq, true_label);
+        __ b(eq, instr->TrueLabel(chunk_));
       }
 
       if (expected.Contains(ToBooleanStub::HEAP_NUMBER)) {
@@ -2334,13 +2274,16 @@ void LCodeGen::DoBranch(LBranch* instr) {
         __ vldr(dbl_scratch, FieldMemOperand(reg, HeapNumber::kValueOffset));
         __ VFPCompareAndSetFlags(dbl_scratch, 0.0);
         __ cmp(r0, r0, vs);  // NaN -> false.
-        __ b(eq, false_label);  // +0, -0 -> false.
-        __ b(true_label);
+        __ b(eq, instr->FalseLabel(chunk_));  // +0, -0 -> false.
+        __ b(instr->TrueLabel(chunk_));
         __ bind(&not_heap_number);
       }
 
-      // We've seen something for the first time -> deopt.
-      DeoptimizeIf(al, instr->environment());
+      if (!expected.IsGeneric()) {
+        // We've seen something for the first time -> deopt.
+        // This can only happen if we are not generic already.
+        DeoptimizeIf(al, instr->environment());
+      }
     }
   }
 }
@@ -2348,7 +2291,7 @@ void LCodeGen::DoBranch(LBranch* instr) {
 
 void LCodeGen::EmitGoto(int block) {
   if (!IsNextEmittedBlock(block)) {
-    __ jmp(chunk_->GetAssemblyLabel(chunk_->LookupDestination(block)));
+    __ jmp(chunk_->GetAssemblyLabel(LookupDestination(block)));
   }
 }
 
@@ -2389,17 +2332,14 @@ Condition LCodeGen::TokenToCondition(Token::Value op, bool is_unsigned) {
 void LCodeGen::DoCmpIDAndBranch(LCmpIDAndBranch* instr) {
   LOperand* left = instr->left();
   LOperand* right = instr->right();
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
   Condition cond = TokenToCondition(instr->op(), false);
 
   if (left->IsConstantOperand() && right->IsConstantOperand()) {
     // We can statically evaluate the comparison.
     double left_val = ToDouble(LConstantOperand::cast(left));
     double right_val = ToDouble(LConstantOperand::cast(right));
-    int next_block =
-      EvalComparison(instr->op(), left_val, right_val) ? true_block
-                                                       : false_block;
+    int next_block = EvalComparison(instr->op(), left_val, right_val) ?
+        instr->TrueDestination(chunk_) : instr->FalseDestination(chunk_);
     EmitGoto(next_block);
   } else {
     if (instr->is_double()) {
@@ -2408,7 +2348,7 @@ void LCodeGen::DoCmpIDAndBranch(LCmpIDAndBranch* instr) {
       __ VFPCompareAndSetFlags(ToDoubleRegister(left), ToDoubleRegister(right));
       // If a NaN is involved, i.e. the result is unordered (V set),
       // jump to false block label.
-      __ b(vs, chunk_->GetAssemblyLabel(false_block));
+      __ b(vs, instr->FalseLabel(chunk_));
     } else {
       if (right->IsConstantOperand()) {
         int32_t value = ToInteger32(LConstantOperand::cast(right));
@@ -2430,7 +2370,7 @@ void LCodeGen::DoCmpIDAndBranch(LCmpIDAndBranch* instr) {
         __ cmp(ToRegister(left), ToRegister(right));
       }
     }
-    EmitBranch(true_block, false_block, cond);
+    EmitBranch(instr, cond);
   }
 }
 
@@ -2438,21 +2378,17 @@ void LCodeGen::DoCmpIDAndBranch(LCmpIDAndBranch* instr) {
 void LCodeGen::DoCmpObjectEqAndBranch(LCmpObjectEqAndBranch* instr) {
   Register left = ToRegister(instr->left());
   Register right = ToRegister(instr->right());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
 
   __ cmp(left, Operand(right));
-  EmitBranch(true_block, false_block, eq);
+  EmitBranch(instr, eq);
 }
 
 
 void LCodeGen::DoCmpConstantEqAndBranch(LCmpConstantEqAndBranch* instr) {
   Register left = ToRegister(instr->left());
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
 
   __ cmp(left, Operand(instr->hydrogen()->right()));
-  EmitBranch(true_block, false_block, eq);
+  EmitBranch(instr, eq);
 }
 
 
@@ -2487,22 +2423,21 @@ void LCodeGen::DoIsObjectAndBranch(LIsObjectAndBranch* instr) {
   Register reg = ToRegister(instr->value());
   Register temp1 = ToRegister(instr->temp());
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-  Label* true_label = chunk_->GetAssemblyLabel(true_block);
-  Label* false_label = chunk_->GetAssemblyLabel(false_block);
-
   Condition true_cond =
-      EmitIsObject(reg, temp1, false_label, true_label);
+      EmitIsObject(reg, temp1,
+          instr->FalseLabel(chunk_), instr->TrueLabel(chunk_));
 
-  EmitBranch(true_block, false_block, true_cond);
+  EmitBranch(instr, true_cond);
 }
 
 
 Condition LCodeGen::EmitIsString(Register input,
                                  Register temp1,
-                                 Label* is_not_string) {
-  __ JumpIfSmi(input, is_not_string);
+                                 Label* is_not_string,
+                                 SmiCheck check_needed = INLINE_SMI_CHECK) {
+  if (check_needed == INLINE_SMI_CHECK) {
+    __ JumpIfSmi(input, is_not_string);
+  }
   __ CompareObjectType(input, temp1, temp1, FIRST_NONSTRING_TYPE);
 
   return lt;
@@ -2513,24 +2448,20 @@ void LCodeGen::DoIsStringAndBranch(LIsStringAndBranch* instr) {
   Register reg = ToRegister(instr->value());
   Register temp1 = ToRegister(instr->temp());
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-  Label* false_label = chunk_->GetAssemblyLabel(false_block);
-
+  SmiCheck check_needed =
+      instr->hydrogen()->value()->IsHeapObject()
+          ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
   Condition true_cond =
-      EmitIsString(reg, temp1, false_label);
+      EmitIsString(reg, temp1, instr->FalseLabel(chunk_), check_needed);
 
-  EmitBranch(true_block, false_block, true_cond);
+  EmitBranch(instr, true_cond);
 }
 
 
 void LCodeGen::DoIsSmiAndBranch(LIsSmiAndBranch* instr) {
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
   Register input_reg = EmitLoadRegister(instr->value(), ip);
   __ SmiTst(input_reg);
-  EmitBranch(true_block, false_block, eq);
+  EmitBranch(instr, eq);
 }
 
 
@@ -2538,14 +2469,13 @@ void LCodeGen::DoIsUndetectableAndBranch(LIsUndetectableAndBranch* instr) {
   Register input = ToRegister(instr->value());
   Register temp = ToRegister(instr->temp());
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
-  __ JumpIfSmi(input, chunk_->GetAssemblyLabel(false_block));
+  if (!instr->hydrogen()->value()->IsHeapObject()) {
+    __ JumpIfSmi(input, instr->FalseLabel(chunk_));
+  }
   __ ldr(temp, FieldMemOperand(input, HeapObject::kMapOffset));
   __ ldrb(temp, FieldMemOperand(temp, Map::kBitFieldOffset));
   __ tst(temp, Operand(1 << Map::kIsUndetectable));
-  EmitBranch(true_block, false_block, ne);
+  EmitBranch(instr, ne);
 }
 
 
@@ -2571,8 +2501,6 @@ static Condition ComputeCompareCondition(Token::Value op) {
 
 void LCodeGen::DoStringCompareAndBranch(LStringCompareAndBranch* instr) {
   Token::Value op = instr->op();
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
 
   Handle<Code> ic = CompareIC::GetUninitialized(isolate(), op);
   CallCode(ic, RelocInfo::CODE_TARGET, instr);
@@ -2581,7 +2509,7 @@ void LCodeGen::DoStringCompareAndBranch(LStringCompareAndBranch* instr) {
 
   Condition condition = ComputeCompareCondition(op);
 
-  EmitBranch(true_block, false_block, condition);
+  EmitBranch(instr, condition);
 }
 
 
@@ -2609,15 +2537,12 @@ void LCodeGen::DoHasInstanceTypeAndBranch(LHasInstanceTypeAndBranch* instr) {
   Register scratch = scratch0();
   Register input = ToRegister(instr->value());
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
-  Label* false_label = chunk_->GetAssemblyLabel(false_block);
-
-  __ JumpIfSmi(input, false_label);
+  if (!instr->hydrogen()->value()->IsHeapObject()) {
+    __ JumpIfSmi(input, instr->FalseLabel(chunk_));
+  }
 
   __ CompareObjectType(input, scratch, scratch, TestType(instr->hydrogen()));
-  EmitBranch(true_block, false_block, BranchCondition(instr->hydrogen()));
+  EmitBranch(instr, BranchCondition(instr->hydrogen()));
 }
 
 
@@ -2637,13 +2562,10 @@ void LCodeGen::DoHasCachedArrayIndexAndBranch(
   Register input = ToRegister(instr->value());
   Register scratch = scratch0();
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
   __ ldr(scratch,
          FieldMemOperand(input, String::kHashFieldOffset));
   __ tst(scratch, Operand(String::kContainsCachedArrayIndexMask));
-  EmitBranch(true_block, false_block, eq);
+  EmitBranch(instr, eq);
 }
 
 
@@ -2720,27 +2642,20 @@ void LCodeGen::DoClassOfTestAndBranch(LClassOfTestAndBranch* instr) {
   Register temp2 = ToRegister(instr->temp());
   Handle<String> class_name = instr->hydrogen()->class_name();
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
-  Label* true_label = chunk_->GetAssemblyLabel(true_block);
-  Label* false_label = chunk_->GetAssemblyLabel(false_block);
+  EmitClassOfTest(instr->TrueLabel(chunk_), instr->FalseLabel(chunk_),
+      class_name, input, temp, temp2);
 
-  EmitClassOfTest(true_label, false_label, class_name, input, temp, temp2);
-
-  EmitBranch(true_block, false_block, eq);
+  EmitBranch(instr, eq);
 }
 
 
 void LCodeGen::DoCmpMapAndBranch(LCmpMapAndBranch* instr) {
   Register reg = ToRegister(instr->value());
   Register temp = ToRegister(instr->temp());
-  int true_block = instr->true_block_id();
-  int false_block = instr->false_block_id();
 
   __ ldr(temp, FieldMemOperand(reg, HeapObject::kMapOffset));
   __ cmp(temp, Operand(instr->map()));
-  EmitBranch(true_block, false_block, eq);
+  EmitBranch(instr, eq);
 }
 
 
@@ -2802,10 +2717,9 @@ void LCodeGen::DoInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr) {
     // root array to force relocation to be able to later patch with
     // the cached map.
     PredictableCodeSizeScope predictable(masm_, 5 * Assembler::kInstrSize);
-    Handle<JSGlobalPropertyCell> cell =
-        factory()->NewJSGlobalPropertyCell(factory()->the_hole_value());
+    Handle<Cell> cell = factory()->NewCell(factory()->the_hole_value());
     __ mov(ip, Operand(Handle<Object>(cell)));
-    __ ldr(ip, FieldMemOperand(ip, JSGlobalPropertyCell::kValueOffset));
+    __ ldr(ip, FieldMemOperand(ip, PropertyCell::kValueOffset));
     __ cmp(map, Operand(ip));
     __ b(ne, &cache_miss);
     // We use Factory::the_hole_value() on purpose instead of loading from the
@@ -2965,7 +2879,7 @@ void LCodeGen::DoReturn(LReturn* instr) {
 void LCodeGen::DoLoadGlobalCell(LLoadGlobalCell* instr) {
   Register result = ToRegister(instr->result());
   __ mov(ip, Operand(Handle<Object>(instr->hydrogen()->cell())));
-  __ ldr(result, FieldMemOperand(ip, JSGlobalPropertyCell::kValueOffset));
+  __ ldr(result, FieldMemOperand(ip, Cell::kValueOffset));
   if (instr->hydrogen()->RequiresHoleCheck()) {
     __ LoadRoot(ip, Heap::kTheHoleValueRootIndex);
     __ cmp(result, ip);
@@ -3000,13 +2914,13 @@ void LCodeGen::DoStoreGlobalCell(LStoreGlobalCell* instr) {
   if (instr->hydrogen()->RequiresHoleCheck()) {
     // We use a temp to check the payload (CompareRoot might clobber ip).
     Register payload = ToRegister(instr->temp());
-    __ ldr(payload, FieldMemOperand(cell, JSGlobalPropertyCell::kValueOffset));
+    __ ldr(payload, FieldMemOperand(cell, Cell::kValueOffset));
     __ CompareRoot(payload, Heap::kTheHoleValueRootIndex);
     DeoptimizeIf(eq, instr->environment());
   }
 
   // Store the value.
-  __ str(value, FieldMemOperand(cell, JSGlobalPropertyCell::kValueOffset));
+  __ str(value, FieldMemOperand(cell, Cell::kValueOffset));
   // Cells are always rescanned, so no write barrier here.
 }
 
@@ -3060,9 +2974,9 @@ void LCodeGen::DoStoreContextSlot(LStoreContextSlot* instr) {
 
   __ str(value, target);
   if (instr->hydrogen()->NeedsWriteBarrier()) {
-    HType type = instr->hydrogen()->value()->type();
     SmiCheck check_needed =
-        type.IsHeapObject() ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
+        instr->hydrogen()->value()->IsHeapObject()
+            ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
     __ RecordWriteContextSlot(context,
                               target.offset(),
                               value,
@@ -4193,12 +4107,9 @@ void LCodeGen::DoCallNew(LCallNew* instr) {
   ASSERT(ToRegister(instr->result()).is(r0));
 
   __ mov(r0, Operand(instr->arity()));
-  if (FLAG_optimize_constructed_arrays) {
-    // No cell in r2 for construct type feedback in optimized code
-    Handle<Object> undefined_value(isolate()->heap()->undefined_value(),
-                                   isolate());
-    __ mov(r2, Operand(undefined_value));
-  }
+  // No cell in r2 for construct type feedback in optimized code
+  Handle<Object> undefined_value(isolate()->factory()->undefined_value());
+  __ mov(r2, Operand(undefined_value));
   CallConstructStub stub(NO_CALL_FUNCTION_FLAGS);
   CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
 }
@@ -4207,22 +4118,42 @@ void LCodeGen::DoCallNew(LCallNew* instr) {
 void LCodeGen::DoCallNewArray(LCallNewArray* instr) {
   ASSERT(ToRegister(instr->constructor()).is(r1));
   ASSERT(ToRegister(instr->result()).is(r0));
-  ASSERT(FLAG_optimize_constructed_arrays);
 
   __ mov(r0, Operand(instr->arity()));
   __ mov(r2, Operand(instr->hydrogen()->property_cell()));
   ElementsKind kind = instr->hydrogen()->elements_kind();
-  bool disable_allocation_sites =
-      (AllocationSiteInfo::GetMode(kind) == TRACK_ALLOCATION_SITE);
+  AllocationSiteOverrideMode override_mode =
+      (AllocationSiteInfo::GetMode(kind) == TRACK_ALLOCATION_SITE)
+          ? DISABLE_ALLOCATION_SITES
+          : DONT_OVERRIDE;
+  ContextCheckMode context_mode = CONTEXT_CHECK_NOT_REQUIRED;
 
   if (instr->arity() == 0) {
-    ArrayNoArgumentConstructorStub stub(kind, disable_allocation_sites);
+    ArrayNoArgumentConstructorStub stub(kind, context_mode, override_mode);
     CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
   } else if (instr->arity() == 1) {
-    ArraySingleArgumentConstructorStub stub(kind, disable_allocation_sites);
+    Label done;
+    if (IsFastPackedElementsKind(kind)) {
+      Label packed_case;
+      // We might need a change here
+      // look at the first argument
+      __ ldr(r5, MemOperand(sp, 0));
+      __ cmp(r5, Operand::Zero());
+      __ b(eq, &packed_case);
+
+      ElementsKind holey_kind = GetHoleyElementsKind(kind);
+      ArraySingleArgumentConstructorStub stub(holey_kind, context_mode,
+                                              override_mode);
+      CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
+      __ jmp(&done);
+      __ bind(&packed_case);
+    }
+
+    ArraySingleArgumentConstructorStub stub(kind, context_mode, override_mode);
     CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
+    __ bind(&done);
   } else {
-    ArrayNArgumentsConstructorStub stub(kind, disable_allocation_sites);
+    ArrayNArgumentsConstructorStub stub(kind, context_mode, override_mode);
     CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
   }
 }
@@ -4267,9 +4198,6 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
   }
 
   if (!transition.is_null()) {
-    if (transition->CanBeDeprecated()) {
-      transition_maps_.Add(transition, info()->zone());
-    }
     __ mov(scratch, Operand(transition));
     __ str(scratch, FieldMemOperand(object, HeapObject::kMapOffset));
     if (instr->hydrogen()->NeedsWriteBarrierForMap()) {
@@ -4289,9 +4217,9 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
   // Do the store.
   Register value = ToRegister(instr->value());
   ASSERT(!object.is(value));
-  HType type = instr->hydrogen()->value()->type();
   SmiCheck check_needed =
-      type.IsHeapObject() ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
+      instr->hydrogen()->value()->IsHeapObject()
+          ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
   if (access.IsInobject()) {
     __ str(value, FieldMemOperand(object, offset));
     if (instr->hydrogen()->NeedsWriteBarrier()) {
@@ -4500,9 +4428,9 @@ void LCodeGen::DoStoreKeyedFixedArray(LStoreKeyed* instr) {
   __ str(value, FieldMemOperand(store_base, offset));
 
   if (instr->hydrogen()->NeedsWriteBarrier()) {
-    HType type = instr->hydrogen()->value()->type();
     SmiCheck check_needed =
-        type.IsHeapObject() ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
+        instr->hydrogen()->value()->IsHeapObject()
+            ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
     // Compute address of modified element and store it into key register.
     __ add(key, store_base, Operand(offset - kHeapObjectTag));
     __ RecordWrite(elements,
@@ -5224,9 +5152,11 @@ void LCodeGen::DoCheckSmi(LCheckSmi* instr) {
 
 
 void LCodeGen::DoCheckNonSmi(LCheckNonSmi* instr) {
-  LOperand* input = instr->value();
-  __ SmiTst(ToRegister(input));
-  DeoptimizeIf(eq, instr->environment());
+  if (!instr->hydrogen()->value()->IsHeapObject()) {
+    LOperand* input = instr->value();
+    __ SmiTst(ToRegister(input));
+    DeoptimizeIf(eq, instr->environment());
+  }
 }
 
 
@@ -5279,10 +5209,9 @@ void LCodeGen::DoCheckFunction(LCheckFunction* instr) {
   AllowDeferredHandleDereference smi_check;
   if (isolate()->heap()->InNewSpace(*target)) {
     Register reg = ToRegister(instr->value());
-    Handle<JSGlobalPropertyCell> cell =
-        isolate()->factory()->NewJSGlobalPropertyCell(target);
+    Handle<Cell> cell = isolate()->factory()->NewPropertyCell(target);
     __ mov(ip, Operand(Handle<Object>(cell)));
-    __ ldr(ip, FieldMemOperand(ip, JSGlobalPropertyCell::kValueOffset));
+    __ ldr(ip, FieldMemOperand(ip, Cell::kValueOffset));
     __ cmp(reg, ip);
   } else {
     __ cmp(reg, Operand(target));
@@ -5382,11 +5311,7 @@ void LCodeGen::DoCheckPrototypeMaps(LCheckPrototypeMaps* instr) {
 
   ASSERT(prototypes->length() == maps->length());
 
-  if (instr->hydrogen()->CanOmitPrototypeChecks()) {
-    for (int i = 0; i < maps->length(); i++) {
-      prototype_maps_.Add(maps->at(i), info()->zone());
-    }
-  } else {
+  if (!instr->hydrogen()->CanOmitPrototypeChecks()) {
     for (int i = 0; i < prototypes->length(); i++) {
       __ LoadHeapObject(prototype_reg, prototypes->at(i));
       __ ldr(map_reg, FieldMemOperand(prototype_reg, HeapObject::kMapOffset));
@@ -5396,6 +5321,80 @@ void LCodeGen::DoCheckPrototypeMaps(LCheckPrototypeMaps* instr) {
 }
 
 
+void LCodeGen::DoAllocateObject(LAllocateObject* instr) {
+  class DeferredAllocateObject: public LDeferredCode {
+   public:
+    DeferredAllocateObject(LCodeGen* codegen, LAllocateObject* instr)
+        : LDeferredCode(codegen), instr_(instr) { }
+    virtual void Generate() { codegen()->DoDeferredAllocateObject(instr_); }
+    virtual LInstruction* instr() { return instr_; }
+   private:
+    LAllocateObject* instr_;
+  };
+
+  DeferredAllocateObject* deferred =
+      new(zone()) DeferredAllocateObject(this, instr);
+
+  Register result = ToRegister(instr->result());
+  Register scratch = ToRegister(instr->temp());
+  Register scratch2 = ToRegister(instr->temp2());
+  Handle<JSFunction> constructor = instr->hydrogen()->constructor();
+  Handle<Map> initial_map = instr->hydrogen()->constructor_initial_map();
+  int instance_size = initial_map->instance_size();
+  ASSERT(initial_map->pre_allocated_property_fields() +
+         initial_map->unused_property_fields() -
+         initial_map->inobject_properties() == 0);
+
+  __ Allocate(instance_size, result, scratch, scratch2, deferred->entry(),
+              TAG_OBJECT);
+
+  __ bind(deferred->exit());
+  if (FLAG_debug_code) {
+    Label is_in_new_space;
+    __ JumpIfInNewSpace(result, scratch, &is_in_new_space);
+    __ Abort("Allocated object is not in new-space");
+    __ bind(&is_in_new_space);
+  }
+
+  // Load the initial map.
+  Register map = scratch;
+  __ LoadHeapObject(map, constructor);
+  __ ldr(map, FieldMemOperand(map, JSFunction::kPrototypeOrInitialMapOffset));
+
+  // Initialize map and fields of the newly allocated object.
+  ASSERT(initial_map->instance_type() == JS_OBJECT_TYPE);
+  __ str(map, FieldMemOperand(result, JSObject::kMapOffset));
+  __ LoadRoot(scratch, Heap::kEmptyFixedArrayRootIndex);
+  __ str(scratch, FieldMemOperand(result, JSObject::kElementsOffset));
+  __ str(scratch, FieldMemOperand(result, JSObject::kPropertiesOffset));
+  if (initial_map->inobject_properties() != 0) {
+    __ LoadRoot(scratch, Heap::kUndefinedValueRootIndex);
+    for (int i = 0; i < initial_map->inobject_properties(); i++) {
+      int property_offset = JSObject::kHeaderSize + i * kPointerSize;
+      __ str(scratch, FieldMemOperand(result, property_offset));
+    }
+  }
+}
+
+
+void LCodeGen::DoDeferredAllocateObject(LAllocateObject* instr) {
+  Register result = ToRegister(instr->result());
+  Handle<Map> initial_map = instr->hydrogen()->constructor_initial_map();
+  int instance_size = initial_map->instance_size();
+
+  // TODO(3095996): Get rid of this. For now, we need to make the
+  // result register contain a valid pointer because it is already
+  // contained in the register pointer map.
+  __ mov(result, Operand::Zero());
+
+  PushSafepointRegistersScope scope(this, Safepoint::kWithRegisters);
+  __ mov(r0, Operand(Smi::FromInt(instance_size)));
+  __ push(r0);
+  CallRuntimeFromDeferred(Runtime::kAllocateInNewSpace, 1, instr);
+  __ StoreToSafepointRegisterSlot(r0, result);
+}
+
+
 void LCodeGen::DoAllocate(LAllocate* instr) {
   class DeferredAllocate: public LDeferredCode {
    public:
@@ -5554,17 +5553,13 @@ void LCodeGen::DoTypeof(LTypeof* instr) {
 
 void LCodeGen::DoTypeofIsAndBranch(LTypeofIsAndBranch* instr) {
   Register input = ToRegister(instr->value());
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-  Label* true_label = chunk_->GetAssemblyLabel(true_block);
-  Label* false_label = chunk_->GetAssemblyLabel(false_block);
 
-  Condition final_branch_condition = EmitTypeofIs(true_label,
-                                                  false_label,
+  Condition final_branch_condition = EmitTypeofIs(instr->TrueLabel(chunk_),
+                                                  instr->FalseLabel(chunk_),
                                                   input,
                                                   instr->type_literal());
   if (final_branch_condition != kNoCondition) {
-    EmitBranch(true_block, false_block, final_branch_condition);
+    EmitBranch(instr, final_branch_condition);
   }
 }
 
@@ -5649,11 +5644,9 @@ Condition LCodeGen::EmitTypeofIs(Label* true_label,
 
 void LCodeGen::DoIsConstructCallAndBranch(LIsConstructCallAndBranch* instr) {
   Register temp1 = ToRegister(instr->temp());
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
 
   EmitIsConstructCall(temp1, scratch0());
-  EmitBranch(true_block, false_block, eq);
+  EmitBranch(instr, eq);
 }
 
 
@@ -5809,15 +5802,15 @@ void LCodeGen::DoOsrEntry(LOsrEntry* instr) {
   // properly registered for deoptimization and records the assembler's PC
   // offset.
   LEnvironment* environment = instr->environment();
-  environment->SetSpilledRegisters(instr->SpilledRegisterArray(),
-                                   instr->SpilledDoubleRegisterArray());
 
   // If the environment were already registered, we would have no way of
   // backpatching it with the spill slot operands.
   ASSERT(!environment->HasBeenRegistered());
   RegisterEnvironmentForDeoptimization(environment, Safepoint::kNoLazyDeopt);
-  ASSERT(osr_pc_offset_ == -1);
-  osr_pc_offset_ = masm()->pc_offset();
+
+  // Normally we record the first unknown OSR value as the entrypoint to the OSR
+  // code, but if there were none, record the entrypoint here.
+  if (osr_pc_offset_ == -1) osr_pc_offset_ = masm()->pc_offset();
 }
 
 
index f264259..075fb41 100644 (file)
@@ -56,8 +56,6 @@ class LCodeGen BASE_EMBEDDED {
         deoptimizations_(4, info->zone()),
         deopt_jump_table_(4, info->zone()),
         deoptimization_literals_(8, info->zone()),
-        prototype_maps_(0, info->zone()),
-        transition_maps_(0, info->zone()),
         inlined_function_count_(0),
         scope_(info->scope()),
         status_(UNUSED),
@@ -81,7 +79,6 @@ class LCodeGen BASE_EMBEDDED {
   Heap* heap() const { return isolate()->heap(); }
   Zone* zone() const { return zone_; }
 
-  // TODO(svenpanne) Use this consistently.
   int LookupDestination(int block_id) const {
     return chunk()->LookupDestination(block_id);
   }
@@ -153,6 +150,7 @@ class LCodeGen BASE_EMBEDDED {
   void DoDeferredRandom(LRandom* instr);
   void DoDeferredStringCharCodeAt(LStringCharCodeAt* instr);
   void DoDeferredStringCharFromCode(LStringCharFromCode* instr);
+  void DoDeferredAllocateObject(LAllocateObject* instr);
   void DoDeferredAllocate(LAllocate* instr);
   void DoDeferredInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr,
                                        Label* map_check);
@@ -173,10 +171,7 @@ class LCodeGen BASE_EMBEDDED {
                                  int additional_offset);
 
   // Emit frame translation commands for an environment.
-  void WriteTranslation(LEnvironment* environment,
-                        Translation* translation,
-                        int* arguments_index,
-                        int* arguments_count);
+  void WriteTranslation(LEnvironment* environment, Translation* translation);
 
   // Declare methods that deal with the individual node types.
 #define DECLARE_DO(type) void Do##type(L##type* node);
@@ -295,10 +290,7 @@ class LCodeGen BASE_EMBEDDED {
   void AddToTranslation(Translation* translation,
                         LOperand* op,
                         bool is_tagged,
-                        bool is_uint32,
-                        bool arguments_known,
-                        int arguments_index,
-                        int arguments_count);
+                        bool is_uint32);
   void RegisterDependentCodeForEmbeddedMaps(Handle<Code> code);
   void PopulateDeoptimizationData(Handle<Code> code);
   int DefineDeoptimizationLiteral(Handle<Object> literal);
@@ -327,7 +319,8 @@ class LCodeGen BASE_EMBEDDED {
 
   static Condition TokenToCondition(Token::Value op, bool is_unsigned);
   void EmitGoto(int block);
-  void EmitBranch(int left_block, int right_block, Condition cc);
+  template<class InstrType>
+  void EmitBranch(InstrType instr, Condition cc);
   void EmitNumberUntagD(Register input,
                         DwVfpRegister result,
                         bool allow_undefined_as_nan,
@@ -356,7 +349,8 @@ class LCodeGen BASE_EMBEDDED {
   // true and false label should be made, to optimize fallthrough.
   Condition EmitIsString(Register input,
                          Register temp1,
-                         Label* is_not_string);
+                         Label* is_not_string,
+                         SmiCheck check_needed);
 
   // Emits optimized code for %_IsConstructCall().
   // Caller should branch on equal condition.
@@ -406,8 +400,6 @@ class LCodeGen BASE_EMBEDDED {
   ZoneList<LEnvironment*> deoptimizations_;
   ZoneList<Deoptimizer::JumpTableEntry> deopt_jump_table_;
   ZoneList<Handle<Object> > deoptimization_literals_;
-  ZoneList<Handle<Map> > prototype_maps_;
-  ZoneList<Handle<Map> > transition_maps_;
   int inlined_function_count_;
   Scope* const scope_;
   Status status_;
index f3cfdc7..cce20ff 100644 (file)
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_ARM)
+#if V8_TARGET_ARCH_ARM
 
 #include "bootstrapper.h"
 #include "codegen.h"
+#include "cpu-profiler.h"
 #include "debug.h"
 #include "runtime.h"
 
@@ -400,10 +401,9 @@ void MacroAssembler::LoadHeapObject(Register result,
                                     Handle<HeapObject> object) {
   AllowDeferredHandleDereference using_raw_address;
   if (isolate()->heap()->InNewSpace(*object)) {
-    Handle<JSGlobalPropertyCell> cell =
-        isolate()->factory()->NewJSGlobalPropertyCell(object);
+    Handle<Cell> cell = isolate()->factory()->NewCell(object);
     mov(result, Operand(cell));
-    ldr(result, FieldMemOperand(result, JSGlobalPropertyCell::kValueOffset));
+    ldr(result, FieldMemOperand(result, Cell::kValueOffset));
   } else {
     mov(result, Operand(object));
   }
@@ -986,19 +986,19 @@ void MacroAssembler::InitializeNewString(Register string,
 
 
 int MacroAssembler::ActivationFrameAlignment() {
-#if defined(V8_HOST_ARCH_ARM)
+#if V8_HOST_ARCH_ARM
   // Running on the real platform. Use the alignment as mandated by the local
   // environment.
   // Note: This will break if we ever start generating snapshots on one ARM
   // platform for another ARM platform with a different alignment.
   return OS::ActivationFrameAlignment();
-#else  // defined(V8_HOST_ARCH_ARM)
+#else  // V8_HOST_ARCH_ARM
   // If we are using the simulator then we should always align to the expected
   // alignment. As the simulator is used to generate snapshots we do not know
   // if the target platform will need alignment, so this is controlled from a
   // flag.
   return FLAG_sim_stack_alignment;
-#endif  // defined(V8_HOST_ARCH_ARM)
+#endif  // V8_HOST_ARCH_ARM
 }
 
 
@@ -2245,6 +2245,9 @@ static int AddressOffset(ExternalReference ref0, ExternalReference ref1) {
 
 
 void MacroAssembler::CallApiFunctionAndReturn(ExternalReference function,
+                                              Address function_address,
+                                              ExternalReference thunk_ref,
+                                              Register thunk_last_arg,
                                               int stack_space,
                                               bool returns_handle,
                                               int return_value_offset) {
@@ -2275,11 +2278,31 @@ void MacroAssembler::CallApiFunctionAndReturn(ExternalReference function,
     PopSafepointRegisters();
   }
 
+  ASSERT(!thunk_last_arg.is(r3));
+  Label profiler_disabled;
+  Label end_profiler_check;
+  bool* is_profiling_flag =
+      isolate()->cpu_profiler()->is_profiling_address();
+  STATIC_ASSERT(sizeof(*is_profiling_flag) == 1);
+  mov(r3, Operand(reinterpret_cast<int32_t>(is_profiling_flag)));
+  ldrb(r3, MemOperand(r3, 0));
+  cmp(r3, Operand(0));
+  b(eq, &profiler_disabled);
+
+  // Additional parameter is the address of the actual callback.
+  mov(thunk_last_arg, Operand(reinterpret_cast<int32_t>(function_address)));
+  mov(r3, Operand(thunk_ref));
+  jmp(&end_profiler_check);
+
+  bind(&profiler_disabled);
+  mov(r3, Operand(function));
+  bind(&end_profiler_check);
+
   // Native call returns to the DirectCEntry stub which redirects to the
   // return address pushed on stack (could have moved after GC).
   // DirectCEntry stub itself is generated early and never moves.
   DirectCEntryStub stub;
-  stub.GenerateCall(this, function);
+  stub.GenerateCall(this, r3);
 
   if (FLAG_log_timer_events) {
     FrameScope frame(this, StackFrame::MANUAL);
@@ -3067,6 +3090,16 @@ void MacroAssembler::JumpIfNotBothSequentialAsciiStrings(Register first,
 }
 
 
+void MacroAssembler::JumpIfNotUniqueName(Register reg,
+                                         Label* not_unique_name) {
+  STATIC_ASSERT(((SYMBOL_TYPE - 1) & kIsInternalizedMask) == kInternalizedTag);
+  cmp(reg, Operand(kInternalizedTag));
+  b(lt, not_unique_name);
+  cmp(reg, Operand(SYMBOL_TYPE));
+  b(gt, not_unique_name);
+}
+
+
 // Allocates a heap number or jumps to the need_gc label if the young space
 // is full and a scavenge is needed.
 void MacroAssembler::AllocateHeapNumber(Register result,
@@ -3371,7 +3404,7 @@ void MacroAssembler::CallCFunctionHelper(Register function,
   // Make sure that the stack is aligned before calling a C function unless
   // running in the simulator. The simulator has its own alignment check which
   // provides more information.
-#if defined(V8_HOST_ARCH_ARM)
+#if V8_HOST_ARCH_ARM
   if (emit_debug_code()) {
     int frame_alignment = OS::ActivationFrameAlignment();
     int frame_alignment_mask = frame_alignment - 1;
index 11d3066..b76ebd5 100644 (file)
@@ -1085,6 +1085,9 @@ class MacroAssembler: public Assembler {
   // - space to be unwound on exit (includes the call JS arguments space and
   // the additional space allocated for the fast call).
   void CallApiFunctionAndReturn(ExternalReference function,
+                                Address function_address,
+                                ExternalReference thunk_ref,
+                                Register thunk_last_arg,
                                 int stack_space,
                                 bool returns_handle,
                                 int return_value_offset_from_fp);
@@ -1293,6 +1296,7 @@ class MacroAssembler: public Assembler {
                                               Register scratch,
                                               Label* failure);
 
+  void JumpIfNotUniqueName(Register reg, Label* not_unique_name);
 
   // ---------------------------------------------------------------------------
   // Patching helpers.
index f05cba5..189ea8d 100644 (file)
@@ -27,8 +27,9 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_ARM)
+#if V8_TARGET_ARCH_ARM
 
+#include "cpu-profiler.h"
 #include "unicode.h"
 #include "log.h"
 #include "code-stubs.h"
index c9db167..238632a 100644 (file)
@@ -30,7 +30,7 @@
 #include <cstdarg>
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_ARM)
+#if V8_TARGET_ARCH_ARM
 
 #include "disasm.h"
 #include "assembler.h"
@@ -830,7 +830,10 @@ class Redirection {
     Isolate* isolate = Isolate::Current();
     Redirection* current = isolate->simulator_redirection();
     for (; current != NULL; current = current->next_) {
-      if (current->external_function_ == external_function) return current;
+      if (current->external_function_ == external_function) {
+        ASSERT_EQ(current->type(), type);
+        return current;
+      }
     }
     return new Redirection(external_function, type);
   }
@@ -1629,12 +1632,19 @@ typedef double (*SimulatorRuntimeFPIntCall)(double darg0, int32_t arg0);
 // (refer to InvocationCallback in v8.h).
 typedef v8::Handle<v8::Value> (*SimulatorRuntimeDirectApiCall)(int32_t arg0);
 typedef void (*SimulatorRuntimeDirectApiCallNew)(int32_t arg0);
+typedef v8::Handle<v8::Value> (*SimulatorRuntimeProfilingApiCall)(
+    int32_t arg0, int32_t arg1);
+typedef void (*SimulatorRuntimeProfilingApiCallNew)(int32_t arg0, int32_t arg1);
 
 // This signature supports direct call to accessor getter callback.
 typedef v8::Handle<v8::Value> (*SimulatorRuntimeDirectGetterCall)(int32_t arg0,
                                                                   int32_t arg1);
 typedef void (*SimulatorRuntimeDirectGetterCallNew)(int32_t arg0,
                                                     int32_t arg1);
+typedef v8::Handle<v8::Value> (*SimulatorRuntimeProfilingGetterCall)(
+    int32_t arg0, int32_t arg1, int32_t arg2);
+typedef void (*SimulatorRuntimeProfilingGetterCallNew)(
+    int32_t arg0, int32_t arg1, int32_t arg2);
 
 // Software interrupt instructions are used by the simulator to call into the
 // C-based V8 runtime.
@@ -1799,6 +1809,31 @@ void Simulator::SoftwareInterrupt(Instruction* instr) {
           target(arg0);
         }
       } else if (
+          redirection->type() == ExternalReference::PROFILING_API_CALL ||
+          redirection->type() == ExternalReference::PROFILING_API_CALL_NEW) {
+        if (::v8::internal::FLAG_trace_sim || !stack_aligned) {
+          PrintF("Call to host function at %p args %08x %08x",
+              reinterpret_cast<void*>(external), arg0, arg1);
+          if (!stack_aligned) {
+            PrintF(" with unaligned stack %08x\n", get_register(sp));
+          }
+          PrintF("\n");
+        }
+        CHECK(stack_aligned);
+        if (redirection->type() == ExternalReference::PROFILING_API_CALL) {
+          SimulatorRuntimeProfilingApiCall target =
+              reinterpret_cast<SimulatorRuntimeProfilingApiCall>(external);
+          v8::Handle<v8::Value> result = target(arg0, arg1);
+          if (::v8::internal::FLAG_trace_sim) {
+            PrintF("Returned %p\n", reinterpret_cast<void *>(*result));
+          }
+          set_register(r0, reinterpret_cast<int32_t>(*result));
+        } else {
+          SimulatorRuntimeProfilingApiCallNew target =
+              reinterpret_cast<SimulatorRuntimeProfilingApiCallNew>(external);
+          target(arg0, arg1);
+        }
+      } else if (
           redirection->type() == ExternalReference::DIRECT_GETTER_CALL ||
           redirection->type() == ExternalReference::DIRECT_GETTER_CALL_NEW) {
         if (::v8::internal::FLAG_trace_sim || !stack_aligned) {
@@ -1823,6 +1858,32 @@ void Simulator::SoftwareInterrupt(Instruction* instr) {
               reinterpret_cast<SimulatorRuntimeDirectGetterCallNew>(external);
           target(arg0, arg1);
         }
+      } else if (
+          redirection->type() == ExternalReference::PROFILING_GETTER_CALL ||
+          redirection->type() == ExternalReference::PROFILING_GETTER_CALL_NEW) {
+        if (::v8::internal::FLAG_trace_sim || !stack_aligned) {
+          PrintF("Call to host function at %p args %08x %08x %08x",
+              reinterpret_cast<void*>(external), arg0, arg1, arg2);
+          if (!stack_aligned) {
+            PrintF(" with unaligned stack %08x\n", get_register(sp));
+          }
+          PrintF("\n");
+        }
+        CHECK(stack_aligned);
+        if (redirection->type() == ExternalReference::PROFILING_GETTER_CALL) {
+          SimulatorRuntimeProfilingGetterCall target =
+              reinterpret_cast<SimulatorRuntimeProfilingGetterCall>(external);
+          v8::Handle<v8::Value> result = target(arg0, arg1, arg2);
+          if (::v8::internal::FLAG_trace_sim) {
+            PrintF("Returned %p\n", reinterpret_cast<void *>(*result));
+          }
+          set_register(r0, reinterpret_cast<int32_t>(*result));
+        } else {
+          SimulatorRuntimeProfilingGetterCallNew target =
+              reinterpret_cast<SimulatorRuntimeProfilingGetterCallNew>(
+                  external);
+          target(arg0, arg1, arg2);
+        }
       } else {
         // builtin call.
         ASSERT(redirection->type() == ExternalReference::BUILTIN_CALL);
@@ -1830,7 +1891,7 @@ void Simulator::SoftwareInterrupt(Instruction* instr) {
             reinterpret_cast<SimulatorRuntimeCall>(external);
         if (::v8::internal::FLAG_trace_sim || !stack_aligned) {
           PrintF(
-              "Call to host function at %p"
+              "Call to host function at %p "
               "args %08x, %08x, %08x, %08x, %08x, %08x",
               FUNCTION_ADDR(target),
               arg0,
index 3595b52..c154f9a 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_ARM)
+#if V8_TARGET_ARCH_ARM
 
 #include "ic-inl.h"
 #include "codegen.h"
@@ -427,12 +427,10 @@ static void GenerateCheckPropertyCell(MacroAssembler* masm,
                                       Handle<Name> name,
                                       Register scratch,
                                       Label* miss) {
-  Handle<JSGlobalPropertyCell> cell =
-      GlobalObject::EnsurePropertyCell(global, name);
+  Handle<Cell> cell = GlobalObject::EnsurePropertyCell(global, name);
   ASSERT(cell->value()->IsTheHole());
   __ mov(scratch, Operand(cell));
-  __ ldr(scratch,
-         FieldMemOperand(scratch, JSGlobalPropertyCell::kValueOffset));
+  __ ldr(scratch, FieldMemOperand(scratch, Cell::kValueOffset));
   __ LoadRoot(ip, Heap::kTheHoleValueRootIndex);
   __ cmp(scratch, ip);
   __ b(ne, miss);
@@ -514,7 +512,13 @@ void StubCompiler::GenerateStoreTransition(MacroAssembler* masm,
 
   Register storage_reg = name_reg;
 
-  if (FLAG_track_fields && representation.IsSmi()) {
+  if (details.type() == CONSTANT_FUNCTION) {
+    Handle<HeapObject> constant(
+        HeapObject::cast(descriptors->GetValue(descriptor)));
+    __ LoadHeapObject(scratch1, constant);
+    __ cmp(value_reg, scratch1);
+    __ b(ne, miss_restore_name);
+  } else if (FLAG_track_fields && representation.IsSmi()) {
     __ JumpIfNotSmi(value_reg, miss_restore_name);
   } else if (FLAG_track_heap_object_fields && representation.IsHeapObject()) {
     __ JumpIfSmi(value_reg, miss_restore_name);
@@ -543,7 +547,8 @@ void StubCompiler::GenerateStoreTransition(MacroAssembler* masm,
   ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded());
 
   // Perform map transition for the receiver if necessary.
-  if (object->map()->unused_property_fields() == 0) {
+  if (details.type() == FIELD &&
+      object->map()->unused_property_fields() == 0) {
     // The properties must be extended before we can store the value.
     // We jump to a runtime call that extends the properties array.
     __ push(receiver_reg);
@@ -572,6 +577,12 @@ void StubCompiler::GenerateStoreTransition(MacroAssembler* masm,
                       OMIT_REMEMBERED_SET,
                       OMIT_SMI_CHECK);
 
+  if (details.type() == CONSTANT_FUNCTION) {
+    ASSERT(value_reg.is(r0));
+    __ Ret();
+    return;
+  }
+
   int index = transition->instance_descriptors()->GetFieldIndex(
       transition->LastAdded());
 
@@ -958,8 +969,22 @@ static void GenerateFastApiDirectCall(MacroAssembler* masm,
   ExternalReference ref = ExternalReference(&fun,
                                             type,
                                             masm->isolate());
+  Address thunk_address = returns_handle
+      ? FUNCTION_ADDR(&InvokeInvocationCallback)
+      : FUNCTION_ADDR(&InvokeFunctionCallback);
+  ExternalReference::Type thunk_type =
+      returns_handle ?
+          ExternalReference::PROFILING_API_CALL :
+          ExternalReference::PROFILING_API_CALL_NEW;
+  ApiFunction thunk_fun(thunk_address);
+  ExternalReference thunk_ref = ExternalReference(&thunk_fun, thunk_type,
+      masm->isolate());
+
   AllowExternalCallThatCantCauseGC scope(masm);
   __ CallApiFunctionAndReturn(ref,
+                              function_address,
+                              thunk_ref,
+                              r1,
                               kStackUnwindSpace,
                               returns_handle,
                               kFastApiCallArguments + 1);
@@ -1456,14 +1481,28 @@ void BaseLoadStubCompiler::GenerateLoadCallback(
   Address getter_address = v8::ToCData<Address>(callback->getter());
   bool returns_handle =
       !CallbackTable::ReturnsVoid(isolate(), getter_address);
+
   ApiFunction fun(getter_address);
   ExternalReference::Type type =
       returns_handle ?
           ExternalReference::DIRECT_GETTER_CALL :
           ExternalReference::DIRECT_GETTER_CALL_NEW;
-
   ExternalReference ref = ExternalReference(&fun, type, isolate());
+
+  Address thunk_address = returns_handle
+      ? FUNCTION_ADDR(&InvokeAccessorGetter)
+      : FUNCTION_ADDR(&InvokeAccessorGetterCallback);
+  ExternalReference::Type thunk_type =
+      returns_handle ?
+          ExternalReference::PROFILING_GETTER_CALL :
+          ExternalReference::PROFILING_GETTER_CALL_NEW;
+  ApiFunction thunk_fun(thunk_address);
+  ExternalReference thunk_ref = ExternalReference(&thunk_fun, thunk_type,
+      isolate());
   __ CallApiFunctionAndReturn(ref,
+                              getter_address,
+                              thunk_ref,
+                              r2,
                               kStackUnwindSpace,
                               returns_handle,
                               5);
@@ -1586,12 +1625,12 @@ void CallStubCompiler::GenerateGlobalReceiverCheck(Handle<JSObject> object,
 
 
 void CallStubCompiler::GenerateLoadFunctionFromCell(
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
     Label* miss) {
   // Get the value from the cell.
   __ mov(r3, Operand(cell));
-  __ ldr(r1, FieldMemOperand(r3, JSGlobalPropertyCell::kValueOffset));
+  __ ldr(r1, FieldMemOperand(r3, Cell::kValueOffset));
 
   // Check that the cell contains the same function.
   if (heap()->InNewSpace(*function)) {
@@ -1659,12 +1698,61 @@ Handle<Code> CallStubCompiler::CompileCallField(Handle<JSObject> object,
 }
 
 
+Handle<Code> CallStubCompiler::CompileArrayCodeCall(
+    Handle<Object> object,
+    Handle<JSObject> holder,
+    Handle<Cell> cell,
+    Handle<JSFunction> function,
+    Handle<String> name,
+    Code::StubType type) {
+  Label miss;
+
+  // Check that function is still array
+  const int argc = arguments().immediate();
+  GenerateNameCheck(name, &miss);
+  Register receiver = r1;
+
+  if (cell.is_null()) {
+    __ ldr(receiver, MemOperand(sp, argc * kPointerSize));
+
+    // Check that the receiver isn't a smi.
+    __ JumpIfSmi(receiver, &miss);
+
+    // Check that the maps haven't changed.
+    CheckPrototypes(Handle<JSObject>::cast(object), receiver, holder, r3, r0,
+                    r4, name, &miss);
+  } else {
+    ASSERT(cell->value() == *function);
+    GenerateGlobalReceiverCheck(Handle<JSObject>::cast(object), holder, name,
+                                &miss);
+    GenerateLoadFunctionFromCell(cell, function, &miss);
+  }
+
+  Handle<Smi> kind(Smi::FromInt(GetInitialFastElementsKind()), isolate());
+  Handle<Cell> kind_feedback_cell =
+      isolate()->factory()->NewCell(kind);
+  __ mov(r0, Operand(argc));
+  __ mov(r2, Operand(kind_feedback_cell));
+  __ mov(r1, Operand(function));
+
+  ArrayConstructorStub stub(isolate());
+  __ TailCallStub(&stub);
+
+  __ bind(&miss);
+  GenerateMissBranch();
+
+  // Return the generated code.
+  return GetCode(type, name);
+}
+
+
 Handle<Code> CallStubCompiler::CompileArrayPushCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- r2    : name
   //  -- lr    : return address
@@ -1908,16 +1996,17 @@ Handle<Code> CallStubCompiler::CompileArrayPushCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return GetCode(function);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileArrayPopCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- r2    : name
   //  -- lr    : return address
@@ -1990,16 +2079,17 @@ Handle<Code> CallStubCompiler::CompileArrayPopCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return GetCode(function);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileStringCharCodeAtCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- r2                     : function name
   //  -- lr                     : return address
@@ -2072,16 +2162,17 @@ Handle<Code> CallStubCompiler::CompileStringCharCodeAtCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return GetCode(function);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileStringCharAtCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- r2                     : function name
   //  -- lr                     : return address
@@ -2155,16 +2246,17 @@ Handle<Code> CallStubCompiler::CompileStringCharAtCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return GetCode(function);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileStringFromCharCodeCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- r2                     : function name
   //  -- lr                     : return address
@@ -2227,16 +2319,17 @@ Handle<Code> CallStubCompiler::CompileStringFromCharCodeCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileMathFloorCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- r2                     : function name
   //  -- lr                     : return address
@@ -2335,16 +2428,17 @@ Handle<Code> CallStubCompiler::CompileMathFloorCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileMathAbsCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- r2                     : function name
   //  -- lr                     : return address
@@ -2433,7 +2527,7 @@ Handle<Code> CallStubCompiler::CompileMathAbsCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name);
+  return GetCode(type, name);
 }
 
 
@@ -2441,7 +2535,7 @@ Handle<Code> CallStubCompiler::CompileFastApiCall(
     const CallOptimization& optimization,
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
     Handle<String> name) {
   Counters* counters = isolate()->counters();
@@ -2613,8 +2707,9 @@ Handle<Code> CallStubCompiler::CompileCallConstant(
     Handle<JSFunction> function) {
   if (HasCustomCallGenerator(function)) {
     Handle<Code> code = CompileCustomCall(object, holder,
-                                          Handle<JSGlobalPropertyCell>::null(),
-                                          function, Handle<String>::cast(name));
+                                          Handle<Cell>::null(),
+                                          function, Handle<String>::cast(name),
+                                          Code::CONSTANT_FUNCTION);
     // A null handle means bail out to the regular compiler code below.
     if (!code.is_null()) return code;
   }
@@ -2671,7 +2766,7 @@ Handle<Code> CallStubCompiler::CompileCallInterceptor(Handle<JSObject> object,
 Handle<Code> CallStubCompiler::CompileCallGlobal(
     Handle<JSObject> object,
     Handle<GlobalObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<PropertyCell> cell,
     Handle<JSFunction> function,
     Handle<Name> name) {
   // ----------- S t a t e -------------
@@ -2680,7 +2775,8 @@ Handle<Code> CallStubCompiler::CompileCallGlobal(
   // -----------------------------------
   if (HasCustomCallGenerator(function)) {
     Handle<Code> code = CompileCustomCall(
-        object, holder, cell, function, Handle<String>::cast(name));
+        object, holder, cell, function, Handle<String>::cast(name),
+        Code::NORMAL);
     // A null handle means bail out to the regular compiler code below.
     if (!code.is_null()) return code;
   }
@@ -2844,7 +2940,7 @@ Handle<Code> StoreStubCompiler::CompileStoreInterceptor(
 
 Handle<Code> StoreStubCompiler::CompileStoreGlobal(
     Handle<GlobalObject> object,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<PropertyCell> cell,
     Handle<Name> name) {
   Label miss;
 
@@ -2859,14 +2955,12 @@ Handle<Code> StoreStubCompiler::CompileStoreGlobal(
   // global object. We bail out to the runtime system to do that.
   __ mov(scratch1(), Operand(cell));
   __ LoadRoot(scratch2(), Heap::kTheHoleValueRootIndex);
-  __ ldr(scratch3(),
-         FieldMemOperand(scratch1(), JSGlobalPropertyCell::kValueOffset));
+  __ ldr(scratch3(), FieldMemOperand(scratch1(), Cell::kValueOffset));
   __ cmp(scratch3(), scratch2());
   __ b(eq, &miss);
 
   // Store the value in the cell.
-  __ str(value(),
-         FieldMemOperand(scratch1(), JSGlobalPropertyCell::kValueOffset));
+  __ str(value(), FieldMemOperand(scratch1(), Cell::kValueOffset));
   // Cells are always rescanned, so no write barrier here.
 
   Counters* counters = isolate()->counters();
@@ -2990,7 +3084,7 @@ void LoadStubCompiler::GenerateLoadViaGetter(MacroAssembler* masm,
 Handle<Code> LoadStubCompiler::CompileLoadGlobal(
     Handle<JSObject> object,
     Handle<GlobalObject> global,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<PropertyCell> cell,
     Handle<Name> name,
     bool is_dont_delete) {
   Label success, miss;
@@ -3002,7 +3096,7 @@ Handle<Code> LoadStubCompiler::CompileLoadGlobal(
 
   // Get the value from the cell.
   __ mov(r3, Operand(cell));
-  __ ldr(r4, FieldMemOperand(r3, JSGlobalPropertyCell::kValueOffset));
+  __ ldr(r4, FieldMemOperand(r3, Cell::kValueOffset));
 
   // Check for deleted property if property can actually be deleted.
   if (!is_dont_delete) {
index 2b0c3dd..4a4f570 100644 (file)
@@ -31,12 +31,12 @@ var $ArrayBuffer = global.ArrayBuffer;
 
 // -------------------------------------------------------------------
 
-function ArrayBufferConstructor(byteLength) { // length = 1
+function ArrayBufferConstructor(length) { // length = 1
   if (%_IsConstructCall()) {
-    var l = TO_POSITIVE_INTEGER(byteLength);
-    %ArrayBufferInitialize(this, l);
+    var byteLength = ToPositiveInteger(length, 'invalid_array_buffer_length');
+    %ArrayBufferInitialize(this, byteLength);
   } else {
-    return new $ArrayBuffer(byteLength);
+    throw MakeTypeError('constructor_not_function', ["ArrayBuffer"]);
   }
 }
 
@@ -70,6 +70,9 @@ function ArrayBufferSlice(start, end) {
     fin = MathMin(relativeEnd, this.byteLength);
   }
 
+  if (fin < first) {
+    fin = first;
+  }
   var newLen = fin - first;
   // TODO(dslomov): implement inheritance
   var result = new $ArrayBuffer(newLen);
index 6b0c4b8..b669e09 100644 (file)
@@ -724,7 +724,7 @@ bool RelocInfo::RequiresRelocation(const CodeDesc& desc) {
   // generation.
   int mode_mask = RelocInfo::kCodeTargetMask |
                   RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT) |
-                  RelocInfo::ModeMask(RelocInfo::GLOBAL_PROPERTY_CELL) |
+                  RelocInfo::ModeMask(RelocInfo::CELL) |
                   RelocInfo::kApplyMask;
   RelocIterator it(desc, mode_mask);
   return !it.done();
@@ -754,8 +754,8 @@ const char* RelocInfo::RelocModeName(RelocInfo::Mode rmode) {
       return "code target";
     case RelocInfo::CODE_TARGET_WITH_ID:
       return "code target with id";
-    case RelocInfo::GLOBAL_PROPERTY_CELL:
-      return "global property cell";
+    case RelocInfo::CELL:
+      return "property cell";
     case RelocInfo::RUNTIME_ENTRY:
       return "runtime entry";
     case RelocInfo::JS_RETURN:
@@ -830,7 +830,7 @@ void RelocInfo::Verify() {
     case EMBEDDED_OBJECT:
       Object::VerifyPointer(target_object());
       break;
-    case GLOBAL_PROPERTY_CELL:
+    case CELL:
       Object::VerifyPointer(target_cell());
       break;
     case DEBUG_BREAK:
@@ -1308,7 +1308,7 @@ ExternalReference ExternalReference::address_of_the_hole_nan() {
 ExternalReference ExternalReference::re_check_stack_guard_state(
     Isolate* isolate) {
   Address function;
-#ifdef V8_TARGET_ARCH_X64
+#if V8_TARGET_ARCH_X64
   function = FUNCTION_ADDR(RegExpMacroAssemblerX64::CheckStackGuardState);
 #elif V8_TARGET_ARCH_IA32
   function = FUNCTION_ADDR(RegExpMacroAssemblerIA32::CheckStackGuardState);
index 2d9e727..95853e8 100644 (file)
@@ -254,7 +254,7 @@ class RelocInfo BASE_EMBEDDED {
     CODE_TARGET_CONTEXT,  // Code target used for contextual loads and stores.
     DEBUG_BREAK,  // Code target for the debugger statement.
     EMBEDDED_OBJECT,
-    GLOBAL_PROPERTY_CELL,
+    CELL,
 
     // Everything after runtime_entry (inclusive) is not GC'ed.
     RUNTIME_ENTRY,
@@ -282,7 +282,7 @@ class RelocInfo BASE_EMBEDDED {
     FIRST_PSEUDO_RELOC_MODE = CODE_AGE_SEQUENCE,
     LAST_PSEUDO_RELOC_MODE = CODE_AGE_SEQUENCE,
     LAST_CODE_ENUM = DEBUG_BREAK,
-    LAST_GCED_ENUM = GLOBAL_PROPERTY_CELL,
+    LAST_GCED_ENUM = CELL,
     // Modes <= LAST_COMPACT_ENUM are guaranteed to have compact encoding.
     LAST_COMPACT_ENUM = CODE_TARGET_WITH_ID,
     LAST_STANDARD_NONCOMPACT_ENUM = INTERNAL_REFERENCE
@@ -386,9 +386,9 @@ class RelocInfo BASE_EMBEDDED {
   INLINE(void set_target_runtime_entry(Address target,
                                        WriteBarrierMode mode =
                                            UPDATE_WRITE_BARRIER));
-  INLINE(JSGlobalPropertyCell* target_cell());
-  INLINE(Handle<JSGlobalPropertyCell> target_cell_handle());
-  INLINE(void set_target_cell(JSGlobalPropertyCell* cell,
+  INLINE(Cell* target_cell());
+  INLINE(Handle<Cell> target_cell_handle());
+  INLINE(void set_target_cell(Cell* cell,
                               WriteBarrierMode mode = UPDATE_WRITE_BARRIER));
   INLINE(Code* code_age_stub());
   INLINE(void set_code_age_stub(Code* stub));
@@ -647,17 +647,35 @@ class ExternalReference BASE_EMBEDDED {
     // Handle<Value> f(v8::Arguments&)
     DIRECT_API_CALL,
 
+    // Call to invocation callback via InvokeInvocationCallback.
+    // Handle<Value> f(v8::Arguments&, v8::InvocationCallback)
+    PROFILING_API_CALL,
+
     // Direct call to API function callback.
     // void f(v8::Arguments&)
     DIRECT_API_CALL_NEW,
 
+    // Call to function callback via InvokeFunctionCallback.
+    // void f(v8::Arguments&, v8::FunctionCallback)
+    PROFILING_API_CALL_NEW,
+
     // Direct call to accessor getter callback.
     // Handle<value> f(Local<String> property, AccessorInfo& info)
     DIRECT_GETTER_CALL,
 
+    // Call to accessor getter callback via InvokeAccessorGetter.
+    // Handle<value> f(Local<String> property, AccessorInfo& info,
+    //     AccessorGetter getter)
+    PROFILING_GETTER_CALL,
+
     // Direct call to accessor getter callback.
     // void f(Local<String> property, AccessorInfo& info)
-    DIRECT_GETTER_CALL_NEW
+    DIRECT_GETTER_CALL_NEW,
+
+    // Call to accessor getter callback via InvokeAccessorGetterCallback.
+    // void f(Local<String> property, AccessorInfo& info,
+    //     AccessorGetterCallback callback)
+    PROFILING_GETTER_CALL_NEW
   };
 
   static void SetUp();
index e2ec542..13adbd0 100644 (file)
@@ -79,7 +79,11 @@ class PerThreadAssertScopeBase {
 
  protected:
   PerThreadAssertScopeBase() {
-    data_ = AssertData();
+    data_ = GetAssertData();
+    if (data_ == NULL) {
+      data_ = new PerThreadAssertData();
+      SetThreadLocalData(data_);
+    }
     data_->increment_level();
   }
 
@@ -89,22 +93,22 @@ class PerThreadAssertScopeBase {
       ASSERT(data_->get(static_cast<PerThreadAssertType>(i)));
     }
     delete data_;
-    Thread::SetThreadLocal(thread_local_key, NULL);
+    SetThreadLocalData(NULL);
   }
 
-  static PerThreadAssertData* AssertData() {
-    PerThreadAssertData* data = reinterpret_cast<PerThreadAssertData*>(
-            Thread::GetThreadLocal(thread_local_key));
-    if (data == NULL) {
-      data = new PerThreadAssertData();
-      Thread::SetThreadLocal(thread_local_key, data);
-    }
-    return data;
+  static PerThreadAssertData* GetAssertData() {
+    return reinterpret_cast<PerThreadAssertData*>(
+        Thread::GetThreadLocal(thread_local_key));
   }
 
   static Thread::LocalStorageKey thread_local_key;
   PerThreadAssertData* data_;
   friend class Isolate;
+
+ private:
+  static void SetThreadLocalData(PerThreadAssertData* data) {
+    Thread::SetThreadLocal(thread_local_key, data);
+  }
 #endif  // DEBUG
 };
 
@@ -124,7 +128,10 @@ class PerThreadAssertScope : public PerThreadAssertScopeBase {
 
   ~PerThreadAssertScope() { data_->set(type, old_state_); }
 
-  static bool IsAllowed() { return AssertData()->get(type); }
+  static bool IsAllowed() {
+    PerThreadAssertData* data = GetAssertData();
+    return data == NULL || data->get(type);
+  }
 
  private:
   bool old_state_;
index a5d1e2d..589bd5a 100644 (file)
@@ -57,22 +57,22 @@ AST_NODE_LIST(DECL_ACCEPT)
 
 
 bool Expression::IsSmiLiteral() {
-  return AsLiteral() != NULL && AsLiteral()->handle()->IsSmi();
+  return AsLiteral() != NULL && AsLiteral()->value()->IsSmi();
 }
 
 
 bool Expression::IsStringLiteral() {
-  return AsLiteral() != NULL && AsLiteral()->handle()->IsString();
+  return AsLiteral() != NULL && AsLiteral()->value()->IsString();
 }
 
 
 bool Expression::IsNullLiteral() {
-  return AsLiteral() != NULL && AsLiteral()->handle()->IsNull();
+  return AsLiteral() != NULL && AsLiteral()->value()->IsNull();
 }
 
 
 bool Expression::IsUndefinedLiteral() {
-  return AsLiteral() != NULL && AsLiteral()->handle()->IsUndefined();
+  return AsLiteral() != NULL && AsLiteral()->value()->IsUndefined();
 }
 
 
@@ -135,6 +135,7 @@ Assignment::Assignment(Isolate* isolate,
       binary_operation_(NULL),
       assignment_id_(GetNextId(isolate)),
       is_monomorphic_(false),
+      is_uninitialized_(false),
       store_mode_(STANDARD_STORE) { }
 
 
@@ -188,7 +189,7 @@ ObjectLiteralProperty::ObjectLiteralProperty(Literal* key,
   emit_store_ = true;
   key_ = key;
   value_ = value;
-  Object* k = *key->handle();
+  Object* k = *key->value();
   if (k->IsInternalizedString() &&
       isolate->heap()->proto_string()->Equals(String::cast(k))) {
     kind_ = PROTOTYPE;
@@ -262,7 +263,7 @@ void ObjectLiteral::CalculateEmitStore(Zone* zone) {
   for (int i = properties()->length() - 1; i >= 0; i--) {
     ObjectLiteral::Property* property = properties()->at(i);
     Literal* literal = property->key();
-    if (literal->handle()->IsNull()) continue;
+    if (literal->value()->IsNull()) continue;
     uint32_t hash = literal->Hash();
     // If the key of a computed property is in the table, do not emit
     // a store for the property later.
@@ -287,6 +288,16 @@ void TargetCollector::AddTarget(Label* target, Zone* zone) {
 }
 
 
+void UnaryOperation::RecordToBooleanTypeFeedback(TypeFeedbackOracle* oracle) {
+  // TODO(olivf) If this Operation is used in a test context, then the
+  // expression has a ToBoolean stub and we want to collect the type
+  // information. However the GraphBuilder expects it to be on the instruction
+  // corresponding to the TestContext, therefore we have to store it here and
+  // not on the operand.
+  set_to_boolean_types(oracle->ToBooleanTypes(expression()->test_id()));
+}
+
+
 bool UnaryOperation::ResultOverwriteAllowed() {
   switch (op_) {
     case Token::BIT_NOT:
@@ -298,6 +309,16 @@ bool UnaryOperation::ResultOverwriteAllowed() {
 }
 
 
+void BinaryOperation::RecordToBooleanTypeFeedback(TypeFeedbackOracle* oracle) {
+  // TODO(olivf) If this Operation is used in a test context, then the right
+  // hand side has a ToBoolean stub and we want to collect the type information.
+  // However the GraphBuilder expects it to be on the instruction corresponding
+  // to the TestContext, therefore we have to store it here and not on the
+  // right hand operand.
+  set_to_boolean_types(oracle->ToBooleanTypes(right()->test_id()));
+}
+
+
 bool BinaryOperation::ResultOverwriteAllowed() {
   switch (op_) {
     case Token::COMMA:
@@ -337,7 +358,7 @@ static bool MatchLiteralCompareTypeof(Expression* left,
                                       Handle<String>* check) {
   if (IsTypeof(left) && right->IsStringLiteral() && Token::IsEqualityOp(op)) {
     *expr = left->AsUnaryOperation()->expression();
-    *check = Handle<String>::cast(right->AsLiteral()->handle());
+    *check = Handle<String>::cast(right->AsLiteral()->value());
     return true;
   }
   return false;
@@ -417,6 +438,10 @@ bool FunctionDeclaration::IsInlineable() const {
 // ----------------------------------------------------------------------------
 // Recording of type feedback
 
+// TODO(rossberg): all RecordTypeFeedback functions should disappear
+// once we use the common type field in the AST consistently.
+
+
 void ForInStatement::RecordTypeFeedback(TypeFeedbackOracle* oracle) {
   for_in_type_ = static_cast<ForInType>(oracle->ForInType(this));
 }
@@ -444,8 +469,8 @@ void Property::RecordTypeFeedback(TypeFeedbackOracle* oracle,
       is_function_prototype_ = true;
     } else {
       Literal* lit_key = key()->AsLiteral();
-      ASSERT(lit_key != NULL && lit_key->handle()->IsString());
-      Handle<String> name = Handle<String>::cast(lit_key->handle());
+      ASSERT(lit_key != NULL && lit_key->value()->IsString());
+      Handle<String> name = Handle<String>::cast(lit_key->value());
       oracle->LoadReceiverTypes(this, name, &receiver_types_);
     }
   } else if (oracle->LoadIsBuiltin(this, Builtins::kKeyedLoadIC_String)) {
@@ -465,12 +490,14 @@ void Assignment::RecordTypeFeedback(TypeFeedbackOracle* oracle,
   Property* prop = target()->AsProperty();
   ASSERT(prop != NULL);
   TypeFeedbackId id = AssignmentFeedbackId();
+  is_uninitialized_ = oracle->StoreIsUninitialized(id);
+  if (is_uninitialized_) return;
   is_monomorphic_ = oracle->StoreIsMonomorphicNormal(id);
   receiver_types_.Clear();
   if (prop->key()->IsPropertyName()) {
     Literal* lit_key = prop->key()->AsLiteral();
-    ASSERT(lit_key != NULL && lit_key->handle()->IsString());
-    Handle<String> name = Handle<String>::cast(lit_key->handle());
+    ASSERT(lit_key != NULL && lit_key->value()->IsString());
+    Handle<String> name = Handle<String>::cast(lit_key->value());
     oracle->StoreReceiverTypes(this, name, &receiver_types_);
   } else if (is_monomorphic_) {
     // Record receiver type for monomorphic keyed stores.
@@ -503,19 +530,7 @@ void CountOperation::RecordTypeFeedback(TypeFeedbackOracle* oracle,
 
 
 void CaseClause::RecordTypeFeedback(TypeFeedbackOracle* oracle) {
-  TypeInfo info = oracle->SwitchType(this);
-  if (info.IsUninitialized()) info = TypeInfo::Unknown();
-  if (info.IsSmi()) {
-    compare_type_ = SMI_ONLY;
-  } else if (info.IsInternalizedString()) {
-    compare_type_ = NAME_ONLY;
-  } else if (info.IsNonInternalizedString()) {
-    compare_type_ = STRING_ONLY;
-  } else if (info.IsNonPrimitive()) {
-    compare_type_ = OBJECT_ONLY;
-  } else {
-    ASSERT(compare_type_ == NONE);
-  }
+  compare_type_ = oracle->ClauseType(CompareId());
 }
 
 
@@ -570,11 +585,11 @@ bool Call::ComputeTarget(Handle<Map> type, Handle<String> name) {
 bool Call::ComputeGlobalTarget(Handle<GlobalObject> global,
                                LookupResult* lookup) {
   target_ = Handle<JSFunction>::null();
-  cell_ = Handle<JSGlobalPropertyCell>::null();
+  cell_ = Handle<Cell>::null();
   ASSERT(lookup->IsFound() &&
          lookup->type() == NORMAL &&
          lookup->holder() == *global);
-  cell_ = Handle<JSGlobalPropertyCell>(global->GetPropertyCell(lookup));
+  cell_ = Handle<Cell>(global->GetPropertyCell(lookup));
   if (cell_->value()->IsJSFunction()) {
     Handle<JSFunction> candidate(JSFunction::cast(cell_->value()));
     // If the function is in new space we assume it's more likely to
@@ -624,8 +639,8 @@ void Call::RecordTypeFeedback(TypeFeedbackOracle* oracle,
   } else {
     // Method call.  Specialize for the receiver types seen at runtime.
     Literal* key = property->key()->AsLiteral();
-    ASSERT(key != NULL && key->handle()->IsString());
-    Handle<String> name = Handle<String>::cast(key->handle());
+    ASSERT(key != NULL && key->value()->IsString());
+    Handle<String> name = Handle<String>::cast(key->value());
     receiver_types_.Clear();
     oracle->CallReceiverTypes(this, name, call_kind, &receiver_types_);
 #ifdef DEBUG
@@ -674,31 +689,6 @@ void ObjectLiteral::Property::RecordTypeFeedback(TypeFeedbackOracle* oracle) {
 }
 
 
-void UnaryOperation::RecordTypeFeedback(TypeFeedbackOracle* oracle) {
-  type_ = oracle->UnaryType(this);
-}
-
-
-void BinaryOperation::RecordTypeFeedback(TypeFeedbackOracle* oracle) {
-  oracle->BinaryType(this, &left_type_, &right_type_, &result_type_,
-                     &has_fixed_right_arg_, &fixed_right_arg_value_);
-}
-
-
-void CompareOperation::RecordTypeFeedback(TypeFeedbackOracle* oracle) {
-  oracle->CompareType(this, &left_type_, &right_type_, &overall_type_);
-  if (!overall_type_.IsUninitialized() && overall_type_.IsNonPrimitive() &&
-      (op_ == Token::EQ || op_ == Token::EQ_STRICT)) {
-    map_ = oracle->GetCompareMap(this);
-  } else {
-    // May be a compare to nil.
-    map_ = oracle->CompareNilMonomorphicReceiverType(this);
-    if (op_ != Token::EQ_STRICT)
-      compare_nil_types_ = oracle->CompareNilTypes(this);
-  }
-}
-
-
 // ----------------------------------------------------------------------------
 // Implementation of AstVisitor
 
@@ -1072,7 +1062,7 @@ CaseClause::CaseClause(Isolate* isolate,
     : label_(label),
       statements_(statements),
       position_(pos),
-      compare_type_(NONE),
+      compare_type_(Type::None(), isolate),
       compare_id_(AstNode::GetNextId(isolate)),
       entry_id_(AstNode::GetNextId(isolate)) {
 }
@@ -1182,18 +1172,18 @@ void AstConstructionVisitor::VisitCallRuntime(CallRuntime* node) {
 
 
 Handle<String> Literal::ToString() {
-  if (handle_->IsString()) return Handle<String>::cast(handle_);
+  if (value_->IsString()) return Handle<String>::cast(value_);
   Factory* factory = Isolate::Current()->factory();
-  ASSERT(handle_->IsNumber());
+  ASSERT(value_->IsNumber());
   char arr[100];
   Vector<char> buffer(arr, ARRAY_SIZE(arr));
   const char* str;
-  if (handle_->IsSmi()) {
+  if (value_->IsSmi()) {
     // Optimization only, the heap number case would subsume this.
-    OS::SNPrintF(buffer, "%d", Smi::cast(*handle_)->value());
+    OS::SNPrintF(buffer, "%d", Smi::cast(*value_)->value());
     str = arr;
   } else {
-    str = DoubleToCString(handle_->Number(), buffer);
+    str = DoubleToCString(value_->Number(), buffer);
   }
   return factory->NewStringFromAscii(CStrVector(str));
 }
index 219a69b..b9a98e0 100644 (file)
@@ -356,8 +356,11 @@ class Expression: public AstNode {
   // True iff the expression is the undefined literal.
   bool IsUndefinedLiteral();
 
-  // Expression type
-  Handle<Type> type() { return type_; }
+  // Expression type bounds
+  Handle<Type> upper_type() { return upper_type_; }
+  Handle<Type> lower_type() { return lower_type_; }
+  void set_upper_type(Handle<Type> type) { upper_type_ = type; }
+  void set_lower_type(Handle<Type> type) { lower_type_ = type; }
 
   // Type feedback information for assignments and properties.
   virtual bool IsMonomorphic() {
@@ -380,7 +383,7 @@ class Expression: public AstNode {
   }
 
   // TODO(rossberg): this should move to its own AST node eventually.
-  void RecordToBooleanTypeFeedback(TypeFeedbackOracle* oracle);
+  virtual void RecordToBooleanTypeFeedback(TypeFeedbackOracle* oracle);
   byte to_boolean_types() const { return to_boolean_types_; }
 
   BailoutId id() const { return id_; }
@@ -388,12 +391,15 @@ class Expression: public AstNode {
 
  protected:
   explicit Expression(Isolate* isolate)
-      : type_(Type::Any(), isolate),
+      : upper_type_(Type::Any(), isolate),
+        lower_type_(Type::None(), isolate),
         id_(GetNextId(isolate)),
         test_id_(GetNextId(isolate)) {}
+  void set_to_boolean_types(byte types) { to_boolean_types_ = types; }
 
  private:
-  Handle<Type> type_;
+  Handle<Type> upper_type_;
+  Handle<Type> lower_type_;
   byte to_boolean_types_;
 
   const BailoutId id_;
@@ -1106,24 +1112,15 @@ class CaseClause: public ZoneObject {
   // Type feedback information.
   TypeFeedbackId CompareId() { return compare_id_; }
   void RecordTypeFeedback(TypeFeedbackOracle* oracle);
-  bool IsSmiCompare() { return compare_type_ == SMI_ONLY; }
-  bool IsNameCompare() { return compare_type_ == NAME_ONLY; }
-  bool IsStringCompare() { return compare_type_ == STRING_ONLY; }
-  bool IsObjectCompare() { return compare_type_ == OBJECT_ONLY; }
+  Handle<Type> compare_type() { return compare_type_; }
 
  private:
   Expression* label_;
   Label body_target_;
   ZoneList<Statement*>* statements_;
   int position_;
-  enum CompareTypeFeedback {
-    NONE,
-    SMI_ONLY,
-    NAME_ONLY,
-    STRING_ONLY,
-    OBJECT_ONLY
-  };
-  CompareTypeFeedback compare_type_;
+  Handle<Type> compare_type_;
+
   const TypeFeedbackId compare_id_;
   const BailoutId entry_id_;
 };
@@ -1316,36 +1313,36 @@ class Literal: public Expression {
   DECLARE_NODE_TYPE(Literal)
 
   virtual bool IsPropertyName() {
-    if (handle_->IsInternalizedString()) {
+    if (value_->IsInternalizedString()) {
       uint32_t ignored;
-      return !String::cast(*handle_)->AsArrayIndex(&ignored);
+      return !String::cast(*value_)->AsArrayIndex(&ignored);
     }
     return false;
   }
 
   Handle<String> AsPropertyName() {
     ASSERT(IsPropertyName());
-    return Handle<String>::cast(handle_);
+    return Handle<String>::cast(value_);
   }
 
-  virtual bool ToBooleanIsTrue() { return handle_->BooleanValue(); }
-  virtual bool ToBooleanIsFalse() { return !handle_->BooleanValue(); }
+  virtual bool ToBooleanIsTrue() { return value_->BooleanValue(); }
+  virtual bool ToBooleanIsFalse() { return !value_->BooleanValue(); }
 
   // Identity testers.
   bool IsNull() const {
-    ASSERT(!handle_.is_null());
-    return handle_->IsNull();
+    ASSERT(!value_.is_null());
+    return value_->IsNull();
   }
   bool IsTrue() const {
-    ASSERT(!handle_.is_null());
-    return handle_->IsTrue();
+    ASSERT(!value_.is_null());
+    return value_->IsTrue();
   }
   bool IsFalse() const {
-    ASSERT(!handle_.is_null());
-    return handle_->IsFalse();
+    ASSERT(!value_.is_null());
+    return value_->IsFalse();
   }
 
-  Handle<Object> handle() const { return handle_; }
+  Handle<Object> value() const { return value_; }
 
   // Support for using Literal as a HashMap key. NOTE: Currently, this works
   // only for string and number literals!
@@ -1360,14 +1357,14 @@ class Literal: public Expression {
   TypeFeedbackId LiteralFeedbackId() const { return reuse(id()); }
 
  protected:
-  Literal(Isolate* isolate, Handle<Object> handle)
+  Literal(Isolate* isolate, Handle<Object> value)
       : Expression(isolate),
-        handle_(handle) { }
+        value_(value) { }
 
  private:
   Handle<String> ToString();
 
-  Handle<Object> handle_;
+  Handle<Object> value_;
 };
 
 
@@ -1705,7 +1702,7 @@ class Call: public Expression {
   // as the holder!
   Handle<JSObject> holder() { return holder_; }
 
-  Handle<JSGlobalPropertyCell> cell() { return cell_; }
+  Handle<Cell> cell() { return cell_; }
 
   bool ComputeTarget(Handle<Map> type, Handle<String> name);
   bool ComputeGlobalTarget(Handle<GlobalObject> global, LookupResult* lookup);
@@ -1745,7 +1742,7 @@ class Call: public Expression {
   SmallMapList receiver_types_;
   Handle<JSFunction> target_;
   Handle<JSObject> holder_;
-  Handle<JSGlobalPropertyCell> cell_;
+  Handle<Cell> cell_;
 
   const BailoutId return_id_;
 };
@@ -1765,7 +1762,7 @@ class CallNew: public Expression {
   virtual bool IsMonomorphic() { return is_monomorphic_; }
   Handle<JSFunction> target() const { return target_; }
   ElementsKind elements_kind() const { return elements_kind_; }
-  Handle<JSGlobalPropertyCell> allocation_info_cell() const {
+  Handle<Cell> allocation_info_cell() const {
     return allocation_info_cell_;
   }
 
@@ -1792,7 +1789,7 @@ class CallNew: public Expression {
   bool is_monomorphic_;
   Handle<JSFunction> target_;
   ElementsKind elements_kind_;
-  Handle<JSGlobalPropertyCell> allocation_info_cell_;
+  Handle<Cell> allocation_info_cell_;
 
   const BailoutId return_id_;
 };
@@ -1844,8 +1841,8 @@ class UnaryOperation: public Expression {
   BailoutId MaterializeFalseId() { return materialize_false_id_; }
 
   TypeFeedbackId UnaryOperationFeedbackId() const { return reuse(id()); }
-  void RecordTypeFeedback(TypeFeedbackOracle* oracle);
-  TypeInfo type() const { return type_; }
+
+  virtual void RecordToBooleanTypeFeedback(TypeFeedbackOracle* oracle);
 
  protected:
   UnaryOperation(Isolate* isolate,
@@ -1866,8 +1863,6 @@ class UnaryOperation: public Expression {
   Expression* expression_;
   int pos_;
 
-  TypeInfo type_;
-
   // For unary not (Token::NOT), the AST ids where true and false will
   // actually be materialized, respectively.
   const BailoutId materialize_true_id_;
@@ -1889,12 +1884,13 @@ class BinaryOperation: public Expression {
   BailoutId RightId() const { return right_id_; }
 
   TypeFeedbackId BinaryOperationFeedbackId() const { return reuse(id()); }
-  void RecordTypeFeedback(TypeFeedbackOracle* oracle);
-  TypeInfo left_type() const { return left_type_; }
-  TypeInfo right_type() const { return right_type_; }
-  TypeInfo result_type() const { return result_type_; }
-  bool has_fixed_right_arg() const { return has_fixed_right_arg_; }
-  int fixed_right_arg_value() const { return fixed_right_arg_value_; }
+  // TODO(rossberg): result_type should be subsumed by lower_type.
+  Handle<Type> result_type() const { return result_type_; }
+  void set_result_type(Handle<Type> type) { result_type_ = type; }
+  Maybe<int> fixed_right_arg() const { return fixed_right_arg_; }
+  void set_fixed_right_arg(Maybe<int> arg) { fixed_right_arg_ = arg; }
+
+  virtual void RecordToBooleanTypeFeedback(TypeFeedbackOracle* oracle);
 
  protected:
   BinaryOperation(Isolate* isolate,
@@ -1917,11 +1913,10 @@ class BinaryOperation: public Expression {
   Expression* right_;
   int pos_;
 
-  TypeInfo left_type_;
-  TypeInfo right_type_;
-  TypeInfo result_type_;
-  bool has_fixed_right_arg_;
-  int fixed_right_arg_value_;
+  Handle<Type> result_type_;
+  // TODO(rossberg): the fixed arg should probably be represented as a Constant
+  // type for the RHS.
+  Maybe<int> fixed_right_arg_;
 
   // The short-circuit logical operations need an AST ID for their
   // right-hand subexpression.
@@ -2002,12 +1997,8 @@ class CompareOperation: public Expression {
 
   // Type feedback information.
   TypeFeedbackId CompareOperationFeedbackId() const { return reuse(id()); }
-  void RecordTypeFeedback(TypeFeedbackOracle* oracle);
-  TypeInfo left_type() const { return left_type_; }
-  TypeInfo right_type() const { return right_type_; }
-  TypeInfo overall_type() const { return overall_type_; }
-  byte compare_nil_types() const { return compare_nil_types_; }
-  Handle<Map> map() const { return map_; }
+  Handle<Type> combined_type() const { return combined_type_; }
+  void set_combined_type(Handle<Type> type) { combined_type_ = type; }
 
   // Match special cases.
   bool IsLiteralCompareTypeof(Expression** expr, Handle<String>* check);
@@ -2034,11 +2025,7 @@ class CompareOperation: public Expression {
   Expression* right_;
   int pos_;
 
-  TypeInfo left_type_;
-  TypeInfo right_type_;
-  TypeInfo overall_type_;
-  byte compare_nil_types_;
-  Handle<Map> map_;
+  Handle<Type> combined_type_;
 };
 
 
@@ -2106,6 +2093,7 @@ class Assignment: public Expression {
   TypeFeedbackId AssignmentFeedbackId() { return reuse(id()); }
   void RecordTypeFeedback(TypeFeedbackOracle* oracle, Zone* zone);
   virtual bool IsMonomorphic() { return is_monomorphic_; }
+  bool IsUninitialized() { return is_uninitialized_; }
   virtual SmallMapList* GetReceiverTypes() { return &receiver_types_; }
   virtual KeyedAccessStoreMode GetStoreMode() {
     return store_mode_;
@@ -2136,6 +2124,7 @@ class Assignment: public Expression {
   const BailoutId assignment_id_;
 
   bool is_monomorphic_ : 1;
+  bool is_uninitialized_ : 1;
   KeyedAccessStoreMode store_mode_ : 5;  // Windows treats as signed,
                                          // must have extra bit.
   SmallMapList receiver_types_;
index ebca91d..b18b54d 100644 (file)
@@ -154,17 +154,17 @@ Atomic64 Release_Load(volatile const Atomic64* ptr);
 #if defined(THREAD_SANITIZER)
 #include "atomicops_internals_tsan.h"
 #elif defined(_MSC_VER) && \
-  (defined(V8_HOST_ARCH_IA32) || defined(V8_HOST_ARCH_X64))
+  (V8_HOST_ARCH_IA32 || V8_HOST_ARCH_X64)
 #include "atomicops_internals_x86_msvc.h"
 #elif defined(__APPLE__) && \
-  (defined(V8_HOST_ARCH_IA32) || defined(V8_HOST_ARCH_X64))
+  (V8_HOST_ARCH_IA32 || V8_HOST_ARCH_X64)
 #include "atomicops_internals_x86_macosx.h"
 #elif defined(__GNUC__) && \
-  (defined(V8_HOST_ARCH_IA32) || defined(V8_HOST_ARCH_X64))
+  (V8_HOST_ARCH_IA32 || V8_HOST_ARCH_X64)
 #include "atomicops_internals_x86_gcc.h"
-#elif defined(__GNUC__) && defined(V8_HOST_ARCH_ARM)
+#elif defined(__GNUC__) && V8_HOST_ARCH_ARM
 #include "atomicops_internals_arm_gcc.h"
-#elif defined(__GNUC__) && defined(V8_HOST_ARCH_MIPS)
+#elif defined(__GNUC__) && V8_HOST_ARCH_MIPS
 #include "atomicops_internals_mips_gcc.h"
 #else
 #error "Atomic operations are not supported on your platform"
index 6559336..e52c26c 100644 (file)
@@ -62,97 +62,162 @@ typedef short __tsan_atomic16;  // NOLINT
 typedef int   __tsan_atomic32;
 typedef long  __tsan_atomic64;  // NOLINT
 
+#if defined(__SIZEOF_INT128__) \
+    || (__clang_major__ * 100 + __clang_minor__ >= 302)
+typedef __int128 __tsan_atomic128;
+#define __TSAN_HAS_INT128 1
+#else
+typedef char     __tsan_atomic128;
+#define __TSAN_HAS_INT128 0
+#endif
+
 typedef enum {
-  __tsan_memory_order_relaxed = (1 << 0) + 100500,
-  __tsan_memory_order_consume = (1 << 1) + 100500,
-  __tsan_memory_order_acquire = (1 << 2) + 100500,
-  __tsan_memory_order_release = (1 << 3) + 100500,
-  __tsan_memory_order_acq_rel = (1 << 4) + 100500,
-  __tsan_memory_order_seq_cst = (1 << 5) + 100500,
+  __tsan_memory_order_relaxed,
+  __tsan_memory_order_consume,
+  __tsan_memory_order_acquire,
+  __tsan_memory_order_release,
+  __tsan_memory_order_acq_rel,
+  __tsan_memory_order_seq_cst,
 } __tsan_memory_order;
 
-__tsan_atomic8 __tsan_atomic8_load(const volatile __tsan_atomic8* a,
+__tsan_atomic8 __tsan_atomic8_load(const volatile __tsan_atomic8 *a,
+    __tsan_memory_order mo);
+__tsan_atomic16 __tsan_atomic16_load(const volatile __tsan_atomic16 *a,
     __tsan_memory_order mo);
-__tsan_atomic16 __tsan_atomic16_load(const volatile __tsan_atomic16* a,
+__tsan_atomic32 __tsan_atomic32_load(const volatile __tsan_atomic32 *a,
     __tsan_memory_order mo);
-__tsan_atomic32 __tsan_atomic32_load(const volatile __tsan_atomic32* a,
+__tsan_atomic64 __tsan_atomic64_load(const volatile __tsan_atomic64 *a,
     __tsan_memory_order mo);
-__tsan_atomic64 __tsan_atomic64_load(const volatile __tsan_atomic64* a,
+__tsan_atomic128 __tsan_atomic128_load(const volatile __tsan_atomic128 *a,
     __tsan_memory_order mo);
 
-void __tsan_atomic8_store(volatile __tsan_atomic8a, __tsan_atomic8 v,
+void __tsan_atomic8_store(volatile __tsan_atomic8 *a, __tsan_atomic8 v,
     __tsan_memory_order mo);
-void __tsan_atomic16_store(volatile __tsan_atomic16a, __tsan_atomic16 v,
+void __tsan_atomic16_store(volatile __tsan_atomic16 *a, __tsan_atomic16 v,
     __tsan_memory_order mo);
-void __tsan_atomic32_store(volatile __tsan_atomic32a, __tsan_atomic32 v,
+void __tsan_atomic32_store(volatile __tsan_atomic32 *a, __tsan_atomic32 v,
     __tsan_memory_order mo);
-void __tsan_atomic64_store(volatile __tsan_atomic64a, __tsan_atomic64 v,
+void __tsan_atomic64_store(volatile __tsan_atomic64 *a, __tsan_atomic64 v,
     __tsan_memory_order mo);
+void __tsan_atomic128_store(volatile __tsan_atomic128 *a, __tsan_atomic128 v,
+    __tsan_memory_order mo);
+
+__tsan_atomic8 __tsan_atomic8_exchange(volatile __tsan_atomic8 *a,
+    __tsan_atomic8 v, __tsan_memory_order mo);
+__tsan_atomic16 __tsan_atomic16_exchange(volatile __tsan_atomic16 *a,
+    __tsan_atomic16 v, __tsan_memory_order mo);
+__tsan_atomic32 __tsan_atomic32_exchange(volatile __tsan_atomic32 *a,
+    __tsan_atomic32 v, __tsan_memory_order mo);
+__tsan_atomic64 __tsan_atomic64_exchange(volatile __tsan_atomic64 *a,
+    __tsan_atomic64 v, __tsan_memory_order mo);
+__tsan_atomic128 __tsan_atomic128_exchange(volatile __tsan_atomic128 *a,
+    __tsan_atomic128 v, __tsan_memory_order mo);
 
-__tsan_atomic8 __tsan_atomic8_exchange(volatile __tsan_atomic8* a,
+__tsan_atomic8 __tsan_atomic8_fetch_add(volatile __tsan_atomic8 *a,
     __tsan_atomic8 v, __tsan_memory_order mo);
-__tsan_atomic16 __tsan_atomic16_exchange(volatile __tsan_atomic16* a,
+__tsan_atomic16 __tsan_atomic16_fetch_add(volatile __tsan_atomic16 *a,
     __tsan_atomic16 v, __tsan_memory_order mo);
-__tsan_atomic32 __tsan_atomic32_exchange(volatile __tsan_atomic32* a,
+__tsan_atomic32 __tsan_atomic32_fetch_add(volatile __tsan_atomic32 *a,
     __tsan_atomic32 v, __tsan_memory_order mo);
-__tsan_atomic64 __tsan_atomic64_exchange(volatile __tsan_atomic64* a,
+__tsan_atomic64 __tsan_atomic64_fetch_add(volatile __tsan_atomic64 *a,
     __tsan_atomic64 v, __tsan_memory_order mo);
+__tsan_atomic128 __tsan_atomic128_fetch_add(volatile __tsan_atomic128 *a,
+    __tsan_atomic128 v, __tsan_memory_order mo);
 
-__tsan_atomic8 __tsan_atomic8_fetch_add(volatile __tsan_atomic8* a,
+__tsan_atomic8 __tsan_atomic8_fetch_and(volatile __tsan_atomic8 *a,
     __tsan_atomic8 v, __tsan_memory_order mo);
-__tsan_atomic16 __tsan_atomic16_fetch_add(volatile __tsan_atomic16* a,
+__tsan_atomic16 __tsan_atomic16_fetch_and(volatile __tsan_atomic16 *a,
     __tsan_atomic16 v, __tsan_memory_order mo);
-__tsan_atomic32 __tsan_atomic32_fetch_add(volatile __tsan_atomic32* a,
+__tsan_atomic32 __tsan_atomic32_fetch_and(volatile __tsan_atomic32 *a,
     __tsan_atomic32 v, __tsan_memory_order mo);
-__tsan_atomic64 __tsan_atomic64_fetch_add(volatile __tsan_atomic64* a,
+__tsan_atomic64 __tsan_atomic64_fetch_and(volatile __tsan_atomic64 *a,
     __tsan_atomic64 v, __tsan_memory_order mo);
+__tsan_atomic128 __tsan_atomic128_fetch_and(volatile __tsan_atomic128 *a,
+    __tsan_atomic128 v, __tsan_memory_order mo);
 
-__tsan_atomic8 __tsan_atomic8_fetch_and(volatile __tsan_atomic8* a,
+__tsan_atomic8 __tsan_atomic8_fetch_or(volatile __tsan_atomic8 *a,
     __tsan_atomic8 v, __tsan_memory_order mo);
-__tsan_atomic16 __tsan_atomic16_fetch_and(volatile __tsan_atomic16* a,
+__tsan_atomic16 __tsan_atomic16_fetch_or(volatile __tsan_atomic16 *a,
     __tsan_atomic16 v, __tsan_memory_order mo);
-__tsan_atomic32 __tsan_atomic32_fetch_and(volatile __tsan_atomic32* a,
+__tsan_atomic32 __tsan_atomic32_fetch_or(volatile __tsan_atomic32 *a,
     __tsan_atomic32 v, __tsan_memory_order mo);
-__tsan_atomic64 __tsan_atomic64_fetch_and(volatile __tsan_atomic64* a,
+__tsan_atomic64 __tsan_atomic64_fetch_or(volatile __tsan_atomic64 *a,
     __tsan_atomic64 v, __tsan_memory_order mo);
+__tsan_atomic128 __tsan_atomic128_fetch_or(volatile __tsan_atomic128 *a,
+    __tsan_atomic128 v, __tsan_memory_order mo);
 
-__tsan_atomic8 __tsan_atomic8_fetch_or(volatile __tsan_atomic8* a,
+__tsan_atomic8 __tsan_atomic8_fetch_xor(volatile __tsan_atomic8 *a,
     __tsan_atomic8 v, __tsan_memory_order mo);
-__tsan_atomic16 __tsan_atomic16_fetch_or(volatile __tsan_atomic16* a,
+__tsan_atomic16 __tsan_atomic16_fetch_xor(volatile __tsan_atomic16 *a,
     __tsan_atomic16 v, __tsan_memory_order mo);
-__tsan_atomic32 __tsan_atomic32_fetch_or(volatile __tsan_atomic32* a,
+__tsan_atomic32 __tsan_atomic32_fetch_xor(volatile __tsan_atomic32 *a,
     __tsan_atomic32 v, __tsan_memory_order mo);
-__tsan_atomic64 __tsan_atomic64_fetch_or(volatile __tsan_atomic64* a,
+__tsan_atomic64 __tsan_atomic64_fetch_xor(volatile __tsan_atomic64 *a,
     __tsan_atomic64 v, __tsan_memory_order mo);
+__tsan_atomic128 __tsan_atomic128_fetch_xor(volatile __tsan_atomic128 *a,
+    __tsan_atomic128 v, __tsan_memory_order mo);
 
-__tsan_atomic8 __tsan_atomic8_fetch_xor(volatile __tsan_atomic8* a,
+__tsan_atomic8 __tsan_atomic8_fetch_nand(volatile __tsan_atomic8 *a,
     __tsan_atomic8 v, __tsan_memory_order mo);
-__tsan_atomic16 __tsan_atomic16_fetch_xor(volatile __tsan_atomic16* a,
+__tsan_atomic16 __tsan_atomic16_fetch_nand(volatile __tsan_atomic16 *a,
     __tsan_atomic16 v, __tsan_memory_order mo);
-__tsan_atomic32 __tsan_atomic32_fetch_xor(volatile __tsan_atomic32* a,
+__tsan_atomic32 __tsan_atomic32_fetch_nand(volatile __tsan_atomic32 *a,
     __tsan_atomic32 v, __tsan_memory_order mo);
-__tsan_atomic64 __tsan_atomic64_fetch_xor(volatile __tsan_atomic64* a,
+__tsan_atomic64 __tsan_atomic64_fetch_nand(volatile __tsan_atomic64 *a,
+    __tsan_atomic64 v, __tsan_memory_order mo);
+__tsan_atomic128 __tsan_atomic128_fetch_nand(volatile __tsan_atomic128 *a,
     __tsan_atomic64 v, __tsan_memory_order mo);
 
-int __tsan_atomic8_compare_exchange_weak(volatile __tsan_atomic8* a,
-    __tsan_atomic8* c, __tsan_atomic8 v, __tsan_memory_order mo);
-int __tsan_atomic16_compare_exchange_weak(volatile __tsan_atomic16* a,
-    __tsan_atomic16* c, __tsan_atomic16 v, __tsan_memory_order mo);
-int __tsan_atomic32_compare_exchange_weak(volatile __tsan_atomic32* a,
-    __tsan_atomic32* c, __tsan_atomic32 v, __tsan_memory_order mo);
-int __tsan_atomic64_compare_exchange_weak(volatile __tsan_atomic64* a,
-    __tsan_atomic64* c, __tsan_atomic64 v, __tsan_memory_order mo);
-
-int __tsan_atomic8_compare_exchange_strong(volatile __tsan_atomic8* a,
-    __tsan_atomic8* c, __tsan_atomic8 v, __tsan_memory_order mo);
-int __tsan_atomic16_compare_exchange_strong(volatile __tsan_atomic16* a,
-    __tsan_atomic16* c, __tsan_atomic16 v, __tsan_memory_order mo);
-int __tsan_atomic32_compare_exchange_strong(volatile __tsan_atomic32* a,
-    __tsan_atomic32* c, __tsan_atomic32 v, __tsan_memory_order mo);
-int __tsan_atomic64_compare_exchange_strong(volatile __tsan_atomic64* a,
-    __tsan_atomic64* c, __tsan_atomic64 v, __tsan_memory_order mo);
+int __tsan_atomic8_compare_exchange_weak(volatile __tsan_atomic8 *a,
+    __tsan_atomic8 *c, __tsan_atomic8 v, __tsan_memory_order mo,
+    __tsan_memory_order fail_mo);
+int __tsan_atomic16_compare_exchange_weak(volatile __tsan_atomic16 *a,
+    __tsan_atomic16 *c, __tsan_atomic16 v, __tsan_memory_order mo,
+    __tsan_memory_order fail_mo);
+int __tsan_atomic32_compare_exchange_weak(volatile __tsan_atomic32 *a,
+    __tsan_atomic32 *c, __tsan_atomic32 v, __tsan_memory_order mo,
+    __tsan_memory_order fail_mo);
+int __tsan_atomic64_compare_exchange_weak(volatile __tsan_atomic64 *a,
+    __tsan_atomic64 *c, __tsan_atomic64 v, __tsan_memory_order mo,
+    __tsan_memory_order fail_mo);
+int __tsan_atomic128_compare_exchange_weak(volatile __tsan_atomic128 *a,
+    __tsan_atomic128 *c, __tsan_atomic128 v, __tsan_memory_order mo,
+    __tsan_memory_order fail_mo);
+
+int __tsan_atomic8_compare_exchange_strong(volatile __tsan_atomic8 *a,
+    __tsan_atomic8 *c, __tsan_atomic8 v, __tsan_memory_order mo,
+    __tsan_memory_order fail_mo);
+int __tsan_atomic16_compare_exchange_strong(volatile __tsan_atomic16 *a,
+    __tsan_atomic16 *c, __tsan_atomic16 v, __tsan_memory_order mo,
+    __tsan_memory_order fail_mo);
+int __tsan_atomic32_compare_exchange_strong(volatile __tsan_atomic32 *a,
+    __tsan_atomic32 *c, __tsan_atomic32 v, __tsan_memory_order mo,
+    __tsan_memory_order fail_mo);
+int __tsan_atomic64_compare_exchange_strong(volatile __tsan_atomic64 *a,
+    __tsan_atomic64 *c, __tsan_atomic64 v, __tsan_memory_order mo,
+    __tsan_memory_order fail_mo);
+int __tsan_atomic128_compare_exchange_strong(volatile __tsan_atomic128 *a,
+    __tsan_atomic128 *c, __tsan_atomic128 v, __tsan_memory_order mo,
+    __tsan_memory_order fail_mo);
+
+__tsan_atomic8 __tsan_atomic8_compare_exchange_val(
+    volatile __tsan_atomic8 *a, __tsan_atomic8 c, __tsan_atomic8 v,
+    __tsan_memory_order mo, __tsan_memory_order fail_mo);
+__tsan_atomic16 __tsan_atomic16_compare_exchange_val(
+    volatile __tsan_atomic16 *a, __tsan_atomic16 c, __tsan_atomic16 v,
+    __tsan_memory_order mo, __tsan_memory_order fail_mo);
+__tsan_atomic32 __tsan_atomic32_compare_exchange_val(
+    volatile __tsan_atomic32 *a, __tsan_atomic32 c, __tsan_atomic32 v,
+    __tsan_memory_order mo, __tsan_memory_order fail_mo);
+__tsan_atomic64 __tsan_atomic64_compare_exchange_val(
+    volatile __tsan_atomic64 *a, __tsan_atomic64 c, __tsan_atomic64 v,
+    __tsan_memory_order mo, __tsan_memory_order fail_mo);
+__tsan_atomic128 __tsan_atomic128_compare_exchange_val(
+    volatile __tsan_atomic128 *a, __tsan_atomic128 c, __tsan_atomic128 v,
+    __tsan_memory_order mo, __tsan_memory_order fail_mo);
 
 void __tsan_atomic_thread_fence(__tsan_memory_order mo);
+void __tsan_atomic_signal_fence(__tsan_memory_order mo);
 
 #ifdef __cplusplus
 }  // extern "C"
@@ -160,166 +225,166 @@ void __tsan_atomic_thread_fence(__tsan_memory_order mo);
 
 #endif  // #ifndef TSAN_INTERFACE_ATOMIC_H
 
-inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32ptr,
+inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32 *ptr,
                                          Atomic32 old_value,
                                          Atomic32 new_value) {
   Atomic32 cmp = old_value;
   __tsan_atomic32_compare_exchange_strong(ptr, &cmp, new_value,
-                                          __tsan_memory_order_relaxed);
+      __tsan_memory_order_relaxed, __tsan_memory_order_relaxed);
   return cmp;
 }
 
-inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32ptr,
+inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32 *ptr,
                                          Atomic32 new_value) {
   return __tsan_atomic32_exchange(ptr, new_value,
-                                  __tsan_memory_order_relaxed);
+      __tsan_memory_order_relaxed);
 }
 
-inline Atomic32 Acquire_AtomicExchange(volatile Atomic32ptr,
+inline Atomic32 Acquire_AtomicExchange(volatile Atomic32 *ptr,
                                        Atomic32 new_value) {
   return __tsan_atomic32_exchange(ptr, new_value,
-                                  __tsan_memory_order_acquire);
+      __tsan_memory_order_acquire);
 }
 
-inline Atomic32 Release_AtomicExchange(volatile Atomic32ptr,
+inline Atomic32 Release_AtomicExchange(volatile Atomic32 *ptr,
                                        Atomic32 new_value) {
   return __tsan_atomic32_exchange(ptr, new_value,
-                                  __tsan_memory_order_release);
+      __tsan_memory_order_release);
 }
 
-inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32ptr,
+inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32 *ptr,
                                           Atomic32 increment) {
   return increment + __tsan_atomic32_fetch_add(ptr, increment,
-                                               __tsan_memory_order_relaxed);
+      __tsan_memory_order_relaxed);
 }
 
-inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32ptr,
+inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32 *ptr,
                                         Atomic32 increment) {
   return increment + __tsan_atomic32_fetch_add(ptr, increment,
-                                               __tsan_memory_order_acq_rel);
+      __tsan_memory_order_acq_rel);
 }
 
-inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32ptr,
+inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32 *ptr,
                                        Atomic32 old_value,
                                        Atomic32 new_value) {
   Atomic32 cmp = old_value;
   __tsan_atomic32_compare_exchange_strong(ptr, &cmp, new_value,
-                                          __tsan_memory_order_acquire);
+      __tsan_memory_order_acquire, __tsan_memory_order_acquire);
   return cmp;
 }
 
-inline Atomic32 Release_CompareAndSwap(volatile Atomic32ptr,
+inline Atomic32 Release_CompareAndSwap(volatile Atomic32 *ptr,
                                        Atomic32 old_value,
                                        Atomic32 new_value) {
   Atomic32 cmp = old_value;
   __tsan_atomic32_compare_exchange_strong(ptr, &cmp, new_value,
-                                          __tsan_memory_order_release);
+      __tsan_memory_order_release, __tsan_memory_order_relaxed);
   return cmp;
 }
 
-inline void NoBarrier_Store(volatile Atomic32ptr, Atomic32 value) {
+inline void NoBarrier_Store(volatile Atomic32 *ptr, Atomic32 value) {
   __tsan_atomic32_store(ptr, value, __tsan_memory_order_relaxed);
 }
 
-inline void Acquire_Store(volatile Atomic32ptr, Atomic32 value) {
+inline void Acquire_Store(volatile Atomic32 *ptr, Atomic32 value) {
   __tsan_atomic32_store(ptr, value, __tsan_memory_order_relaxed);
   __tsan_atomic_thread_fence(__tsan_memory_order_seq_cst);
 }
 
-inline void Release_Store(volatile Atomic32ptr, Atomic32 value) {
+inline void Release_Store(volatile Atomic32 *ptr, Atomic32 value) {
   __tsan_atomic32_store(ptr, value, __tsan_memory_order_release);
 }
 
-inline Atomic32 NoBarrier_Load(volatile const Atomic32ptr) {
+inline Atomic32 NoBarrier_Load(volatile const Atomic32 *ptr) {
   return __tsan_atomic32_load(ptr, __tsan_memory_order_relaxed);
 }
 
-inline Atomic32 Acquire_Load(volatile const Atomic32ptr) {
+inline Atomic32 Acquire_Load(volatile const Atomic32 *ptr) {
   return __tsan_atomic32_load(ptr, __tsan_memory_order_acquire);
 }
 
-inline Atomic32 Release_Load(volatile const Atomic32ptr) {
+inline Atomic32 Release_Load(volatile const Atomic32 *ptr) {
   __tsan_atomic_thread_fence(__tsan_memory_order_seq_cst);
   return __tsan_atomic32_load(ptr, __tsan_memory_order_relaxed);
 }
 
-inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64ptr,
+inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64 *ptr,
                                          Atomic64 old_value,
                                          Atomic64 new_value) {
   Atomic64 cmp = old_value;
   __tsan_atomic64_compare_exchange_strong(ptr, &cmp, new_value,
-                                          __tsan_memory_order_relaxed);
+      __tsan_memory_order_relaxed, __tsan_memory_order_relaxed);
   return cmp;
 }
 
-inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64ptr,
+inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64 *ptr,
                                          Atomic64 new_value) {
   return __tsan_atomic64_exchange(ptr, new_value, __tsan_memory_order_relaxed);
 }
 
-inline Atomic64 Acquire_AtomicExchange(volatile Atomic64ptr,
+inline Atomic64 Acquire_AtomicExchange(volatile Atomic64 *ptr,
                                        Atomic64 new_value) {
   return __tsan_atomic64_exchange(ptr, new_value, __tsan_memory_order_acquire);
 }
 
-inline Atomic64 Release_AtomicExchange(volatile Atomic64ptr,
+inline Atomic64 Release_AtomicExchange(volatile Atomic64 *ptr,
                                        Atomic64 new_value) {
   return __tsan_atomic64_exchange(ptr, new_value, __tsan_memory_order_release);
 }
 
-inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64ptr,
+inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64 *ptr,
                                           Atomic64 increment) {
   return increment + __tsan_atomic64_fetch_add(ptr, increment,
-                                               __tsan_memory_order_relaxed);
+      __tsan_memory_order_relaxed);
 }
 
-inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64ptr,
+inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64 *ptr,
                                         Atomic64 increment) {
   return increment + __tsan_atomic64_fetch_add(ptr, increment,
-                                               __tsan_memory_order_acq_rel);
+      __tsan_memory_order_acq_rel);
 }
 
-inline void NoBarrier_Store(volatile Atomic64ptr, Atomic64 value) {
+inline void NoBarrier_Store(volatile Atomic64 *ptr, Atomic64 value) {
   __tsan_atomic64_store(ptr, value, __tsan_memory_order_relaxed);
 }
 
-inline void Acquire_Store(volatile Atomic64ptr, Atomic64 value) {
+inline void Acquire_Store(volatile Atomic64 *ptr, Atomic64 value) {
   __tsan_atomic64_store(ptr, value, __tsan_memory_order_relaxed);
   __tsan_atomic_thread_fence(__tsan_memory_order_seq_cst);
 }
 
-inline void Release_Store(volatile Atomic64ptr, Atomic64 value) {
+inline void Release_Store(volatile Atomic64 *ptr, Atomic64 value) {
   __tsan_atomic64_store(ptr, value, __tsan_memory_order_release);
 }
 
-inline Atomic64 NoBarrier_Load(volatile const Atomic64ptr) {
+inline Atomic64 NoBarrier_Load(volatile const Atomic64 *ptr) {
   return __tsan_atomic64_load(ptr, __tsan_memory_order_relaxed);
 }
 
-inline Atomic64 Acquire_Load(volatile const Atomic64ptr) {
+inline Atomic64 Acquire_Load(volatile const Atomic64 *ptr) {
   return __tsan_atomic64_load(ptr, __tsan_memory_order_acquire);
 }
 
-inline Atomic64 Release_Load(volatile const Atomic64ptr) {
+inline Atomic64 Release_Load(volatile const Atomic64 *ptr) {
   __tsan_atomic_thread_fence(__tsan_memory_order_seq_cst);
   return __tsan_atomic64_load(ptr, __tsan_memory_order_relaxed);
 }
 
-inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64ptr,
+inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64 *ptr,
                                        Atomic64 old_value,
                                        Atomic64 new_value) {
   Atomic64 cmp = old_value;
   __tsan_atomic64_compare_exchange_strong(ptr, &cmp, new_value,
-                                          __tsan_memory_order_acquire);
+      __tsan_memory_order_acquire, __tsan_memory_order_acquire);
   return cmp;
 }
 
-inline Atomic64 Release_CompareAndSwap(volatile Atomic64ptr,
+inline Atomic64 Release_CompareAndSwap(volatile Atomic64 *ptr,
                                        Atomic64 old_value,
                                        Atomic64 new_value) {
   Atomic64 cmp = old_value;
   __tsan_atomic64_compare_exchange_strong(ptr, &cmp, new_value,
-                                          __tsan_memory_order_release);
+      __tsan_memory_order_release, __tsan_memory_order_relaxed);
   return cmp;
 }
 
index a51a9b1..49333eb 100644 (file)
 #include "extensions/statistics-extension.h"
 #include "code-stubs.h"
 
+#if defined(V8_I18N_SUPPORT)
+#include "extensions/i18n/i18n-extension.h"
+#endif
+
 namespace v8 {
 namespace internal {
 
@@ -102,6 +106,9 @@ void Bootstrapper::InitializeOncePerProcess() {
   GCExtension::Register();
   ExternalizeStringExtension::Register();
   StatisticsExtension::Register();
+#if defined(V8_I18N_SUPPORT)
+  v8_i18n::Extension::Register();
+#endif
 }
 
 
@@ -538,31 +545,33 @@ void Genesis::SetStrictFunctionInstanceDescriptor(
   if (prototypeMode != DONT_ADD_PROTOTYPE) {
     prototype = factory()->NewForeign(&Accessors::FunctionPrototype);
   }
-  PropertyAttributes attribs = static_cast<PropertyAttributes>(
-      DONT_ENUM | DONT_DELETE);
+  PropertyAttributes rw_attribs =
+      static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE);
+  PropertyAttributes ro_attribs =
+      static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY);
   map->set_instance_descriptors(*descriptors);
 
   {  // Add length.
-    CallbacksDescriptor d(*factory()->length_string(), *length, attribs);
+    CallbacksDescriptor d(*factory()->length_string(), *length, ro_attribs);
     map->AppendDescriptor(&d, witness);
   }
   {  // Add name.
-    CallbacksDescriptor d(*factory()->name_string(), *name, attribs);
+    CallbacksDescriptor d(*factory()->name_string(), *name, rw_attribs);
     map->AppendDescriptor(&d, witness);
   }
   {  // Add arguments.
-    CallbacksDescriptor d(*factory()->arguments_string(), *arguments, attribs);
+    CallbacksDescriptor d(*factory()->arguments_string(), *arguments,
+                          rw_attribs);
     map->AppendDescriptor(&d, witness);
   }
   {  // Add caller.
-    CallbacksDescriptor d(*factory()->caller_string(), *caller, attribs);
+    CallbacksDescriptor d(*factory()->caller_string(), *caller, rw_attribs);
     map->AppendDescriptor(&d, witness);
   }
   if (prototypeMode != DONT_ADD_PROTOTYPE) {
     // Add prototype.
-    if (prototypeMode != ADD_WRITEABLE_PROTOTYPE) {
-      attribs = static_cast<PropertyAttributes>(attribs | READ_ONLY);
-    }
+    PropertyAttributes attribs =
+        prototypeMode == ADD_WRITEABLE_PROTOTYPE ? rw_attribs : ro_attribs;
     CallbacksDescriptor d(*factory()->prototype_string(), *prototype, attribs);
     map->AppendDescriptor(&d, witness);
   }
@@ -857,12 +866,18 @@ bool Genesis::InitializeGlobal(Handle<GlobalObject> inner_global,
                         isolate->initial_object_prototype(),
                         Builtins::kArrayCode, true, true);
     array_function->shared()->DontAdaptArguments();
+    array_function->shared()->set_function_data(Smi::FromInt(kArrayCode));
 
     // This seems a bit hackish, but we need to make sure Array.length
     // is 1.
     array_function->shared()->set_length(1);
 
     Handle<Map> initial_map(array_function->initial_map());
+
+    // This assert protects an optimization in
+    // HGraphBuilder::JSArrayBuilder::EmitMapCode()
+    ASSERT(initial_map->elements_kind() == GetInitialFastElementsKind());
+
     Handle<DescriptorArray> array_descriptors(
         factory->NewDescriptorArray(0, 1));
     DescriptorArray::WhitenessWitness witness(*array_descriptors);
@@ -883,16 +898,11 @@ bool Genesis::InitializeGlobal(Handle<GlobalObject> inner_global,
     // overwritten by JS code.
     native_context()->set_array_function(*array_function);
 
-    if (FLAG_optimize_constructed_arrays) {
-      // Cache the array maps, needed by ArrayConstructorStub
-      CacheInitialJSArrayMaps(native_context(), initial_map);
-      ArrayConstructorStub array_constructor_stub(isolate);
-      Handle<Code> code = array_constructor_stub.GetCode(isolate);
-      array_function->shared()->set_construct_stub(*code);
-    } else {
-      array_function->shared()->set_construct_stub(
-          isolate->builtins()->builtin(Builtins::kCommonArrayConstructCode));
-    }
+    // Cache the array maps, needed by ArrayConstructorStub
+    CacheInitialJSArrayMaps(native_context(), initial_map);
+    ArrayConstructorStub array_constructor_stub(isolate);
+    Handle<Code> code = array_constructor_stub.GetCode(isolate);
+    array_function->shared()->set_construct_stub(*code);
   }
 
   {  // --- N u m b e r ---
@@ -1359,6 +1369,14 @@ void Genesis::InitializeExperimentalGlobal() {
     Handle<JSFunction> uint8c_fun = InstallTypedArray("Uint8ClampedArray",
         EXTERNAL_PIXEL_ELEMENTS);
     native_context()->set_uint8c_array_fun(*uint8c_fun);
+
+    Handle<JSFunction> data_view_fun =
+        InstallFunction(
+            global, "DataView", JS_DATA_VIEW_TYPE,
+            JSDataView::kSize,
+            isolate()->initial_object_prototype(),
+            Builtins::kIllegal, true, true);
+    native_context()->set_data_view_fun(*data_view_fun);
   }
 
   if (FLAG_harmony_generators) {
@@ -1612,15 +1630,9 @@ Handle<JSFunction> Genesis::InstallInternalArray(
       factory()->NewJSObject(isolate()->object_function(), TENURED);
   SetPrototype(array_function, prototype);
 
-  if (FLAG_optimize_constructed_arrays) {
-    InternalArrayConstructorStub internal_array_constructor_stub(isolate());
-    Handle<Code> code = internal_array_constructor_stub.GetCode(isolate());
-    array_function->shared()->set_construct_stub(*code);
-  } else {
-    array_function->shared()->set_construct_stub(
-        isolate()->builtins()->builtin(Builtins::kCommonArrayConstructCode));
-  }
-
+  InternalArrayConstructorStub internal_array_constructor_stub(isolate());
+  Handle<Code> code = internal_array_constructor_stub.GetCode(isolate());
+  array_function->shared()->set_construct_stub(*code);
   array_function->shared()->DontAdaptArguments();
 
   Handle<Map> original_map(array_function->initial_map());
@@ -2274,6 +2286,12 @@ bool Genesis::InstallExtensions(Handle<Context> native_context,
     InstallExtension(isolate, "v8/statistics", &extension_states);
   }
 
+#if defined(V8_I18N_SUPPORT)
+  if (FLAG_enable_i18n) {
+    InstallExtension(isolate, "v8/i18n", &extension_states);
+  }
+#endif
+
   if (extensions == NULL) return true;
   // Install required extensions
   int count = v8::ImplementationUtilities::GetNameCount(extensions);
@@ -2499,8 +2517,9 @@ void Genesis::TransferNamedProperties(Handle<JSObject> from,
         Handle<Name> key = Handle<Name>(Name::cast(raw_key));
         Handle<Object> value = Handle<Object>(properties->ValueAt(i),
                                               isolate());
-        if (value->IsJSGlobalPropertyCell()) {
-          value = Handle<Object>(JSGlobalPropertyCell::cast(*value)->value(),
+        ASSERT(!value->IsCell());
+        if (value->IsPropertyCell()) {
+          value = Handle<Object>(PropertyCell::cast(*value)->value(),
                                  isolate());
         }
         PropertyDetails details = properties->DetailsAt(i);
@@ -2574,7 +2593,14 @@ Genesis::Genesis(Isolate* isolate,
   StackLimitCheck check(isolate);
   if (check.HasOverflowed()) return;
 
-  native_context_ = Snapshot::NewContextFromSnapshot();
+  // We can only de-serialize a context if the isolate was initialized from
+  // a snapshot. Otherwise we have to build the context from scratch.
+  if (isolate->initialized_from_snapshot()) {
+    native_context_ = Snapshot::NewContextFromSnapshot();
+  } else {
+    native_context_ = Handle<Context>();
+  }
+
   if (!native_context().is_null()) {
     AddToWeakNativeContextList(*native_context());
     isolate->set_context(*native_context());
index d97a477..be04ddf 100644 (file)
@@ -31,6 +31,7 @@
 #include "arguments.h"
 #include "bootstrapper.h"
 #include "builtins.h"
+#include "cpu-profiler.h"
 #include "gdb-jit.h"
 #include "ic-inl.h"
 #include "heap-profiler.h"
@@ -209,23 +210,21 @@ static MaybeObject* ArrayCodeGenericCommon(Arguments* args,
     MaybeObject* maybe_array = array->Initialize(0);
     if (maybe_array->IsFailure()) return maybe_array;
 
-    if (FLAG_optimize_constructed_arrays) {
-      AllocationSiteInfo* info = AllocationSiteInfo::FindForJSObject(array);
-      ElementsKind to_kind = array->GetElementsKind();
-      if (info != NULL && info->GetElementsKindPayload(&to_kind)) {
-        if (IsMoreGeneralElementsKindTransition(array->GetElementsKind(),
-                                                to_kind)) {
-          // We have advice that we should change the elements kind
-          if (FLAG_trace_track_allocation_sites) {
-            PrintF("AllocationSiteInfo: pre-transitioning array %p(%s->%s)\n",
-                   reinterpret_cast<void*>(array),
-                   ElementsKindToString(array->GetElementsKind()),
-                   ElementsKindToString(to_kind));
-          }
-
-          maybe_array = array->TransitionElementsKind(to_kind);
-          if (maybe_array->IsFailure()) return maybe_array;
+    AllocationSiteInfo* info = AllocationSiteInfo::FindForJSObject(array);
+    ElementsKind to_kind = array->GetElementsKind();
+    if (info != NULL && info->GetElementsKindPayload(&to_kind)) {
+      if (IsMoreGeneralElementsKindTransition(array->GetElementsKind(),
+                                              to_kind)) {
+        // We have advice that we should change the elements kind
+        if (FLAG_trace_track_allocation_sites) {
+          PrintF("AllocationSiteInfo: pre-transitioning array %p(%s->%s)\n",
+                 reinterpret_cast<void*>(array),
+                 ElementsKindToString(array->GetElementsKind()),
+                 ElementsKindToString(to_kind));
         }
+
+        maybe_array = array->TransitionElementsKind(to_kind);
+        if (maybe_array->IsFailure()) return maybe_array;
       }
     }
 
@@ -1267,14 +1266,7 @@ MUST_USE_RESULT static MaybeObject* HandleApiCallHelper(
                                      args.length() - 1,
                                      is_construct);
 
-    v8::Handle<v8::Value> value;
-    {
-      // Leaving JavaScript.
-      VMState<EXTERNAL> state(isolate);
-      ExternalCallbackScope call_scope(isolate,
-                                       v8::ToCData<Address>(callback_obj));
-      value = custom.Call(callback);
-    }
+    v8::Handle<v8::Value> value = custom.Call(callback);
     if (value.IsEmpty()) {
       result = heap->undefined_value();
     } else {
@@ -1343,14 +1335,7 @@ MUST_USE_RESULT static MaybeObject* HandleApiCallAsFunctionOrConstructor(
                                      &args[0] - 1,
                                      args.length() - 1,
                                      is_construct_call);
-    v8::Handle<v8::Value> value;
-    {
-      // Leaving JavaScript.
-      VMState<EXTERNAL> state(isolate);
-      ExternalCallbackScope call_scope(isolate,
-                                       v8::ToCData<Address>(callback_obj));
-      value = custom.Call(callback);
-    }
+    v8::Handle<v8::Value> value = custom.Call(callback);
     if (value.IsEmpty()) {
       result = heap->undefined_value();
     } else {
@@ -1496,12 +1481,12 @@ static void Generate_StoreIC_Megamorphic_Strict(MacroAssembler* masm) {
 
 
 static void Generate_StoreIC_GlobalProxy(MacroAssembler* masm) {
-  StoreIC::GenerateGlobalProxy(masm, kNonStrictMode);
+  StoreIC::GenerateRuntimeSetProperty(masm, kNonStrictMode);
 }
 
 
 static void Generate_StoreIC_GlobalProxy_Strict(MacroAssembler* masm) {
-  StoreIC::GenerateGlobalProxy(masm, kStrictMode);
+  StoreIC::GenerateRuntimeSetProperty(masm, kStrictMode);
 }
 
 
@@ -1510,6 +1495,16 @@ static void Generate_StoreIC_Setter_ForDeopt(MacroAssembler* masm) {
 }
 
 
+static void Generate_StoreIC_Generic(MacroAssembler* masm) {
+  StoreIC::GenerateRuntimeSetProperty(masm, kNonStrictMode);
+}
+
+
+static void Generate_StoreIC_Generic_Strict(MacroAssembler* masm) {
+  StoreIC::GenerateRuntimeSetProperty(masm, kStrictMode);
+}
+
+
 static void Generate_KeyedStoreIC_Generic(MacroAssembler* masm) {
   KeyedStoreIC::GenerateGeneric(masm, kNonStrictMode);
 }
index c45fbfd..edf650d 100644 (file)
@@ -166,6 +166,10 @@ enum BuiltinExtraArguments {
                                     Code::kNoExtraICState)              \
   V(StoreIC_Megamorphic,            STORE_IC, MEGAMORPHIC,              \
                                     Code::kNoExtraICState)              \
+  V(StoreIC_Generic,                STORE_IC, GENERIC,                  \
+                                    Code::kNoExtraICState)              \
+  V(StoreIC_Generic_Strict,         STORE_IC, GENERIC,                  \
+                                    kStrictMode)                        \
   V(StoreIC_GlobalProxy,            STORE_IC, GENERIC,                  \
                                     Code::kNoExtraICState)              \
   V(StoreIC_Initialize_Strict,      STORE_IC, UNINITIALIZED,            \
@@ -205,8 +209,6 @@ enum BuiltinExtraArguments {
                                     Code::kNoExtraICState)              \
   V(ArrayCode,                      BUILTIN, UNINITIALIZED,             \
                                     Code::kNoExtraICState)              \
-  V(CommonArrayConstructCode,       BUILTIN, UNINITIALIZED,             \
-                                    Code::kNoExtraICState)              \
                                                                         \
   V(StringConstructCode,            BUILTIN, UNINITIALIZED,             \
                                     Code::kNoExtraICState)              \
@@ -395,7 +397,6 @@ class Builtins {
 
   static void Generate_InternalArrayCode(MacroAssembler* masm);
   static void Generate_ArrayCode(MacroAssembler* masm);
-  static void Generate_CommonArrayConstructCode(MacroAssembler* masm);
 
   static void Generate_StringConstructCode(MacroAssembler* masm);
   static void Generate_OnStackReplacement(MacroAssembler* masm);
index 99c4db5..96266af 100644 (file)
@@ -106,7 +106,8 @@ class CodeStubGraphBuilderBase : public HGraphBuilder {
   };
 
   HValue* BuildArrayConstructor(ElementsKind kind,
-                                bool disable_allocation_sites,
+                                ContextCheckMode context_mode,
+                                AllocationSiteOverrideMode override_mode,
                                 ArgumentClass argument_class);
   HValue* BuildInternalArrayConstructor(ElementsKind kind,
                                         ArgumentClass argument_class);
@@ -144,7 +145,7 @@ bool CodeStubGraphBuilderBase::BuildGraph() {
   set_current_block(next_block);
 
   HConstant* undefined_constant = new(zone) HConstant(
-      isolate()->factory()->undefined_value(), Representation::Tagged());
+      isolate()->factory()->undefined_value());
   AddInstruction(undefined_constant);
   graph()->set_undefined_constant(undefined_constant);
 
@@ -196,8 +197,7 @@ bool CodeStubGraphBuilderBase::BuildGraph() {
       stack_pop_count->ClearFlag(HValue::kCanOverflow);
     } else {
       int count = descriptor_->hint_stack_parameter_count_;
-      stack_pop_count = AddInstruction(new(zone)
-          HConstant(count, Representation::Integer32()));
+      stack_pop_count = AddInstruction(new(zone) HConstant(count));
     }
   }
 
@@ -391,13 +391,11 @@ HValue* CodeStubGraphBuilder<FastCloneShallowObjectStub>::BuildCodeStub() {
   HValue* boilerplate_size =
       AddInstruction(new(zone) HInstanceSize(boilerplate));
   HValue* size_in_words =
-      AddInstruction(new(zone) HConstant(size >> kPointerSizeLog2,
-                                         Representation::Integer32()));
+      AddInstruction(new(zone) HConstant(size >> kPointerSizeLog2));
   checker.IfCompare(boilerplate_size, size_in_words, Token::EQ);
   checker.Then();
 
-  HValue* size_in_bytes =
-      AddInstruction(new(zone) HConstant(size, Representation::Integer32()));
+  HValue* size_in_bytes = AddInstruction(new(zone) HConstant(size));
   HAllocate::Flags flags = HAllocate::CAN_ALLOCATE_IN_NEW_SPACE;
   if (isolate()->heap()->ShouldGloballyPretenure()) {
     flags = static_cast<HAllocate::Flags>(
@@ -512,8 +510,7 @@ HValue* CodeStubGraphBuilder<TransitionElementsKindStub>::BuildCodeStub() {
 
   HInstruction* elements = AddLoadElements(js_array);
 
-  HInstruction* elements_length =
-      AddInstruction(new(zone) HFixedArrayBaseLength(elements));
+  HInstruction* elements_length = AddLoadFixedArrayLength(elements);
 
   HValue* new_elements = BuildAllocateElementsAndInitializeElementsHeader(
       context(), to_kind, elements_length);
@@ -537,15 +534,19 @@ Handle<Code> TransitionElementsKindStub::GenerateCode() {
 }
 
 HValue* CodeStubGraphBuilderBase::BuildArrayConstructor(
-    ElementsKind kind, bool disable_allocation_sites,
+    ElementsKind kind,
+    ContextCheckMode context_mode,
+    AllocationSiteOverrideMode override_mode,
     ArgumentClass argument_class) {
   HValue* constructor = GetParameter(ArrayConstructorStubBase::kConstructor);
-  HValue* property_cell = GetParameter(ArrayConstructorStubBase::kPropertyCell);
-  HInstruction* array_function = BuildGetArrayFunction(context());
+  if (context_mode == CONTEXT_CHECK_REQUIRED) {
+    HInstruction* array_function = BuildGetArrayFunction(context());
+    ArrayContextChecker checker(this, constructor, array_function);
+  }
 
-  ArrayContextChecker(this, constructor, array_function);
-  JSArrayBuilder array_builder(this, kind, property_cell,
-                               disable_allocation_sites);
+  HValue* property_cell = GetParameter(ArrayConstructorStubBase::kPropertyCell);
+  JSArrayBuilder array_builder(this, kind, property_cell, constructor,
+                               override_mode);
   HValue* result = NULL;
   switch (argument_class) {
     case NONE:
@@ -558,6 +559,7 @@ HValue* CodeStubGraphBuilderBase::BuildArrayConstructor(
       result = BuildArrayNArgumentsConstructor(&array_builder, kind);
       break;
   }
+
   return result;
 }
 
@@ -602,7 +604,7 @@ HValue* CodeStubGraphBuilderBase::BuildArraySingleArgumentConstructor(
   HConstant* initial_capacity_node = new(zone()) HConstant(initial_capacity);
   AddInstruction(initial_capacity_node);
 
-  HBoundsCheck* checked_arg = AddBoundsCheck(argument, max_alloc_length);
+  HBoundsCheck* checked_arg = Add<HBoundsCheck>(argument, max_alloc_length);
   IfBuilder if_builder(this);
   if_builder.IfCompare(checked_arg, constant_zero, Token::EQ);
   if_builder.Then();
@@ -655,8 +657,9 @@ HValue* CodeStubGraphBuilderBase::BuildArrayNArgumentsConstructor(
 template <>
 HValue* CodeStubGraphBuilder<ArrayNoArgumentConstructorStub>::BuildCodeStub() {
   ElementsKind kind = casted_stub()->elements_kind();
-  bool disable_allocation_sites = casted_stub()->disable_allocation_sites();
-  return BuildArrayConstructor(kind, disable_allocation_sites, NONE);
+  ContextCheckMode context_mode = casted_stub()->context_mode();
+  AllocationSiteOverrideMode override_mode = casted_stub()->override_mode();
+  return BuildArrayConstructor(kind, context_mode, override_mode, NONE);
 }
 
 
@@ -669,8 +672,9 @@ template <>
 HValue* CodeStubGraphBuilder<ArraySingleArgumentConstructorStub>::
     BuildCodeStub() {
   ElementsKind kind = casted_stub()->elements_kind();
-  bool disable_allocation_sites = casted_stub()->disable_allocation_sites();
-  return BuildArrayConstructor(kind, disable_allocation_sites, SINGLE);
+  ContextCheckMode context_mode = casted_stub()->context_mode();
+  AllocationSiteOverrideMode override_mode = casted_stub()->override_mode();
+  return BuildArrayConstructor(kind, context_mode, override_mode, SINGLE);
 }
 
 
@@ -682,8 +686,9 @@ Handle<Code> ArraySingleArgumentConstructorStub::GenerateCode() {
 template <>
 HValue* CodeStubGraphBuilder<ArrayNArgumentsConstructorStub>::BuildCodeStub() {
   ElementsKind kind = casted_stub()->elements_kind();
-  bool disable_allocation_sites = casted_stub()->disable_allocation_sites();
-  return BuildArrayConstructor(kind, disable_allocation_sites, MULTIPLE);
+  ContextCheckMode context_mode = casted_stub()->context_mode();
+  AllocationSiteOverrideMode override_mode = casted_stub()->override_mode();
+  return BuildArrayConstructor(kind, context_mode, override_mode, MULTIPLE);
 }
 
 
@@ -733,12 +738,13 @@ Handle<Code> InternalArrayNArgumentsConstructorStub::GenerateCode() {
 
 template <>
 HValue* CodeStubGraphBuilder<CompareNilICStub>::BuildCodeInitializedStub() {
+  Isolate* isolate = graph()->isolate();
   CompareNilICStub* stub = casted_stub();
   HIfContinuation continuation;
-  Handle<Map> sentinel_map(graph()->isolate()->heap()->meta_map());
-  BuildCompareNil(GetParameter(0),
-                  stub->GetTypes(), sentinel_map,
-                  RelocInfo::kNoPosition, &continuation);
+  Handle<Map> sentinel_map(isolate->heap()->meta_map());
+  Handle<Type> type =
+      CompareNilICStub::StateToType(isolate, stub->GetState(), sentinel_map);
+  BuildCompareNil(GetParameter(0), type, RelocInfo::kNoPosition, &continuation);
   IfBuilder if_nil(this, &continuation);
   if_nil.Then();
   if (continuation.IsFalseReachable()) {
index 6b6e250..2ed2ba3 100644 (file)
@@ -29,6 +29,7 @@
 
 #include "bootstrapper.h"
 #include "code-stubs.h"
+#include "cpu-profiler.h"
 #include "stub-cache.h"
 #include "factory.h"
 #include "gdb-jit.h"
@@ -431,24 +432,24 @@ void ICCompareStub::Generate(MacroAssembler* masm) {
 
 
 void CompareNilICStub::Record(Handle<Object> object) {
-  ASSERT(types_ != Types::FullCompare());
+  ASSERT(state_ != State::Generic());
   if (object->IsNull()) {
-    types_.Add(NULL_TYPE);
+    state_.Add(NULL_TYPE);
   } else if (object->IsUndefined()) {
-    types_.Add(UNDEFINED);
+    state_.Add(UNDEFINED);
   } else if (object->IsUndetectableObject() ||
              object->IsOddball() ||
              !object->IsHeapObject()) {
-    types_ = Types::FullCompare();
+    state_ = State::Generic();
   } else if (IsMonomorphic()) {
-    types_ = Types::FullCompare();
+    state_ = State::Generic();
   } else {
-    types_.Add(MONOMORPHIC_MAP);
+    state_.Add(MONOMORPHIC_MAP);
   }
 }
 
 
-void CompareNilICStub::Types::TraceTransition(Types to) const {
+void CompareNilICStub::State::TraceTransition(State to) const {
   #ifdef DEBUG
   if (!FLAG_trace_ic) return;
   char buffer[100];
@@ -467,13 +468,13 @@ void CompareNilICStub::Types::TraceTransition(Types to) const {
 
 void CompareNilICStub::PrintName(StringStream* stream) {
   stream->Add("CompareNilICStub_");
-  types_.Print(stream);
+  state_.Print(stream);
   stream->Add((nil_value_ == kNullValue) ? "(NullValue|":
                                            "(UndefinedValue|");
 }
 
 
-void CompareNilICStub::Types::Print(StringStream* stream) const {
+void CompareNilICStub::State::Print(StringStream* stream) const {
   stream->Add("(");
   SimpleListPrinter printer(stream);
   if (IsEmpty()) printer.Add("None");
@@ -481,10 +482,40 @@ void CompareNilICStub::Types::Print(StringStream* stream) const {
   if (Contains(NULL_TYPE)) printer.Add("Null");
   if (Contains(MONOMORPHIC_MAP)) printer.Add("MonomorphicMap");
   if (Contains(UNDETECTABLE)) printer.Add("Undetectable");
+  if (Contains(GENERIC)) printer.Add("Generic");
   stream->Add(")");
 }
 
 
+Handle<Type> CompareNilICStub::StateToType(
+    Isolate* isolate,
+    State state,
+    Handle<Map> map) {
+  if (state.Contains(CompareNilICStub::GENERIC)) {
+    return handle(Type::Any(), isolate);
+  }
+
+  Handle<Type> result(Type::None(), isolate);
+  if (state.Contains(CompareNilICStub::UNDEFINED)) {
+    result = handle(Type::Union(result, handle(Type::Undefined(), isolate)),
+                    isolate);
+  }
+  if (state.Contains(CompareNilICStub::NULL_TYPE)) {
+    result = handle(Type::Union(result, handle(Type::Null(), isolate)),
+                    isolate);
+  }
+  if (state.Contains(CompareNilICStub::UNDETECTABLE)) {
+    result = handle(Type::Union(result, handle(Type::Undetectable(), isolate)),
+                    isolate);
+  } else if (state.Contains(CompareNilICStub::MONOMORPHIC_MAP)) {
+    Type* type = map.is_null() ? Type::Detectable() : Type::Class(map);
+    result = handle(Type::Union(result, handle(type, isolate)), isolate);
+  }
+
+  return result;
+}
+
+
 void InstanceofStub::PrintName(StringStream* stream) {
   const char* args = "";
   if (HasArgsInRegisters()) {
@@ -727,24 +758,11 @@ void StubFailureTrampolineStub::GenerateAheadOfTime(Isolate* isolate) {
 }
 
 
-FunctionEntryHook ProfileEntryHookStub::entry_hook_ = NULL;
-
-
 void ProfileEntryHookStub::EntryHookTrampoline(intptr_t function,
                                                intptr_t stack_pointer) {
-  if (entry_hook_ != NULL)
-    entry_hook_(function, stack_pointer);
-}
-
-
-bool ProfileEntryHookStub::SetFunctionEntryHook(FunctionEntryHook entry_hook) {
-  // We don't allow setting a new entry hook over one that's
-  // already active, as the hooks won't stack.
-  if (entry_hook != 0 && entry_hook_ != 0)
-    return false;
-
-  entry_hook_ = entry_hook;
-  return true;
+  FunctionEntryHook entry_hook = Isolate::Current()->function_entry_hook();
+  ASSERT(entry_hook != NULL);
+  entry_hook(function, stack_pointer);
 }
 
 
index 0ea7ac9..d197c84 100644 (file)
@@ -95,7 +95,7 @@ namespace internal {
   V(KeyedLoadField)
 
 // List of code stubs only used on ARM platforms.
-#ifdef V8_TARGET_ARCH_ARM
+#if V8_TARGET_ARCH_ARM
 #define CODE_STUB_LIST_ARM(V)  \
   V(GetProperty)               \
   V(SetProperty)               \
@@ -107,7 +107,7 @@ namespace internal {
 #endif
 
 // List of code stubs only used on MIPS platforms.
-#ifdef V8_TARGET_ARCH_MIPS
+#if V8_TARGET_ARCH_MIPS
 #define CODE_STUB_LIST_MIPS(V)  \
   V(RegExpCEntry)               \
   V(DirectCEntry)
@@ -904,8 +904,7 @@ class BinaryOpStub: public PlatformCodeStub {
         left_type_(BinaryOpIC::UNINITIALIZED),
         right_type_(BinaryOpIC::UNINITIALIZED),
         result_type_(BinaryOpIC::UNINITIALIZED),
-        has_fixed_right_arg_(false),
-        encoded_right_arg_(encode_arg_value(1)) {
+        encoded_right_arg_(false, encode_arg_value(1)) {
     Initialize();
     ASSERT(OpBits::is_valid(Token::NUM_TOKENS));
   }
@@ -915,16 +914,15 @@ class BinaryOpStub: public PlatformCodeStub {
       BinaryOpIC::TypeInfo left_type,
       BinaryOpIC::TypeInfo right_type,
       BinaryOpIC::TypeInfo result_type,
-      bool has_fixed_right_arg,
-      int32_t fixed_right_arg_value)
+      Maybe<int32_t> fixed_right_arg)
       : op_(OpBits::decode(key)),
         mode_(ModeBits::decode(key)),
         platform_specific_bit_(PlatformSpecificBits::decode(key)),
         left_type_(left_type),
         right_type_(right_type),
         result_type_(result_type),
-        has_fixed_right_arg_(has_fixed_right_arg),
-        encoded_right_arg_(encode_arg_value(fixed_right_arg_value)) { }
+        encoded_right_arg_(fixed_right_arg.has_value,
+                           encode_arg_value(fixed_right_arg.value)) { }
 
   static void decode_types_from_minor_key(int minor_key,
                                           BinaryOpIC::TypeInfo* left_type,
@@ -942,16 +940,14 @@ class BinaryOpStub: public PlatformCodeStub {
     return static_cast<Token::Value>(OpBits::decode(minor_key));
   }
 
-  static bool decode_has_fixed_right_arg_from_minor_key(int minor_key) {
-    return HasFixedRightArgBits::decode(minor_key);
-  }
-
-  static int decode_fixed_right_arg_value_from_minor_key(int minor_key) {
-    return decode_arg_value(FixedRightArgValueBits::decode(minor_key));
+  static Maybe<int> decode_fixed_right_arg_from_minor_key(int minor_key) {
+    return Maybe<int>(
+        HasFixedRightArgBits::decode(minor_key),
+        decode_arg_value(FixedRightArgValueBits::decode(minor_key)));
   }
 
   int fixed_right_arg_value() const {
-    return decode_arg_value(encoded_right_arg_);
+    return decode_arg_value(encoded_right_arg_.value);
   }
 
   static bool can_encode_arg_value(int32_t value) {
@@ -975,8 +971,7 @@ class BinaryOpStub: public PlatformCodeStub {
   BinaryOpIC::TypeInfo right_type_;
   BinaryOpIC::TypeInfo result_type_;
 
-  bool has_fixed_right_arg_;
-  int encoded_right_arg_;
+  Maybe<int> encoded_right_arg_;
 
   static int encode_arg_value(int32_t value) {
     ASSERT(can_encode_arg_value(value));
@@ -1009,8 +1004,8 @@ class BinaryOpStub: public PlatformCodeStub {
            | LeftTypeBits::encode(left_type_)
            | RightTypeBits::encode(right_type_)
            | ResultTypeBits::encode(result_type_)
-           | HasFixedRightArgBits::encode(has_fixed_right_arg_)
-           | FixedRightArgValueBits::encode(encoded_right_arg_);
+           | HasFixedRightArgBits::encode(encoded_right_arg_.has_value)
+           | FixedRightArgValueBits::encode(encoded_right_arg_.value);
   }
 
 
@@ -1124,46 +1119,50 @@ class ICCompareStub: public PlatformCodeStub {
 
 class CompareNilICStub : public HydrogenCodeStub  {
  public:
-  enum Type {
+  enum CompareNilType {
     UNDEFINED,
     NULL_TYPE,
     MONOMORPHIC_MAP,
     UNDETECTABLE,
+    GENERIC,
     NUMBER_OF_TYPES
   };
 
-  class Types : public EnumSet<Type, byte> {
+  class State : public EnumSet<CompareNilType, byte> {
    public:
-    Types() : EnumSet<Type, byte>(0) { }
-    explicit Types(byte bits) : EnumSet<Type, byte>(bits) { }
+    State() : EnumSet<CompareNilType, byte>(0) { }
+    explicit State(byte bits) : EnumSet<CompareNilType, byte>(bits) { }
 
-    static Types FullCompare() {
-      Types set;
+    static State Generic() {
+      State set;
       set.Add(UNDEFINED);
       set.Add(NULL_TYPE);
       set.Add(UNDETECTABLE);
+      set.Add(GENERIC);
       return set;
     }
 
     void Print(StringStream* stream) const;
-    void TraceTransition(Types to) const;
+    void TraceTransition(State to) const;
   };
 
+  static Handle<Type> StateToType(
+      Isolate* isolate, State state, Handle<Map> map = Handle<Map>());
+
   // At most 6 different types can be distinguished, because the Code object
   // only has room for a single byte to hold a set and there are two more
   // boolean flags we need to store. :-P
   STATIC_ASSERT(NUMBER_OF_TYPES <= 6);
 
-  CompareNilICStub(NilValue nil, Types types = Types())
-      : types_(types) {
-    nil_value_ = nil;
+  CompareNilICStub(NilValue nil, State state = State())
+      : nil_value_(nil), state_(state) {
   }
 
   CompareNilICStub(Code::ExtraICState ic_state,
                    InitializationState init_state = INITIALIZED)
       : HydrogenCodeStub(init_state) {
     nil_value_ = NilValueField::decode(ic_state);
-    types_ = Types(ExtractTypesFromExtraICState(ic_state));
+    state_ = State(ExtractTypesFromExtraICState(ic_state));
   }
 
   static Handle<Code> GetUninitialized(Isolate* isolate,
@@ -1183,9 +1182,9 @@ class CompareNilICStub : public HydrogenCodeStub  {
   }
 
   virtual InlineCacheState GetICState() {
-    if (types_ == Types::FullCompare()) {
+    if (state_ == State::Generic()) {
       return MEGAMORPHIC;
-    } else if (types_.Contains(MONOMORPHIC_MAP)) {
+    } else if (state_.Contains(MONOMORPHIC_MAP)) {
       return MONOMORPHIC;
     } else {
       return PREMONOMORPHIC;
@@ -1198,20 +1197,21 @@ class CompareNilICStub : public HydrogenCodeStub  {
 
   // extra ic state = nil_value | type_n-1 | ... | type_0
   virtual Code::ExtraICState GetExtraICState() {
-    return NilValueField::encode(nil_value_)         |
-           types_.ToIntegral();
+    return NilValueField::encode(nil_value_) | state_.ToIntegral();
   }
-  static byte ExtractTypesFromExtraICState(
-      Code::ExtraICState state) {
+  static byte ExtractTypesFromExtraICState(Code::ExtraICState state) {
     return state & ((1 << NUMBER_OF_TYPES) - 1);
   }
+  static NilValue ExtractNilValueFromExtraICState(Code::ExtraICState state) {
+    return NilValueField::decode(state);
+  }
 
   void Record(Handle<Object> object);
 
-  bool IsMonomorphic() const { return types_.Contains(MONOMORPHIC_MAP); }
+  bool IsMonomorphic() const { return state_.Contains(MONOMORPHIC_MAP); }
   NilValue GetNilValue() const { return nil_value_; }
-  Types GetTypes() const { return types_; }
-  void ClearTypes() { types_.RemoveAll(); }
+  State GetState() const { return state_; }
+  void ClearState() { state_.RemoveAll(); }
 
   virtual void PrintName(StringStream* stream);
 
@@ -1229,7 +1229,7 @@ class CompareNilICStub : public HydrogenCodeStub  {
   virtual int NotMissMinorKey() { return GetExtraICState(); }
 
   NilValue nil_value_;
-  Types types_;
+  State state_;
 
   DISALLOW_COPY_AND_ASSIGN(CompareNilICStub);
 };
@@ -1733,27 +1733,51 @@ class TransitionElementsKindStub : public HydrogenCodeStub {
 };
 
 
+enum ContextCheckMode {
+  CONTEXT_CHECK_REQUIRED,
+  CONTEXT_CHECK_NOT_REQUIRED,
+  LAST_CONTEXT_CHECK_MODE = CONTEXT_CHECK_NOT_REQUIRED
+};
+
+
+enum AllocationSiteOverrideMode {
+  DONT_OVERRIDE,
+  DISABLE_ALLOCATION_SITES,
+  LAST_ALLOCATION_SITE_OVERRIDE_MODE = DISABLE_ALLOCATION_SITES
+};
+
+
 class ArrayConstructorStubBase : public HydrogenCodeStub {
  public:
-  ArrayConstructorStubBase(ElementsKind kind, bool disable_allocation_sites) {
+  ArrayConstructorStubBase(ElementsKind kind, ContextCheckMode context_mode,
+                           AllocationSiteOverrideMode override_mode) {
     // It only makes sense to override local allocation site behavior
     // if there is a difference between the global allocation site policy
     // for an ElementsKind and the desired usage of the stub.
-    ASSERT(!disable_allocation_sites ||
+    ASSERT(override_mode != DISABLE_ALLOCATION_SITES ||
            AllocationSiteInfo::GetMode(kind) == TRACK_ALLOCATION_SITE);
     bit_field_ = ElementsKindBits::encode(kind) |
-        DisableAllocationSitesBits::encode(disable_allocation_sites);
+        AllocationSiteOverrideModeBits::encode(override_mode) |
+        ContextCheckModeBits::encode(context_mode);
   }
 
   ElementsKind elements_kind() const {
     return ElementsKindBits::decode(bit_field_);
   }
 
-  bool disable_allocation_sites() const {
-    return DisableAllocationSitesBits::decode(bit_field_);
+  AllocationSiteOverrideMode override_mode() const {
+    return AllocationSiteOverrideModeBits::decode(bit_field_);
+  }
+
+  ContextCheckMode context_mode() const {
+    return ContextCheckModeBits::decode(bit_field_);
+  }
+
+  virtual bool IsPregenerated() {
+    // We only pre-generate stubs that verify correct context
+    return context_mode() == CONTEXT_CHECK_REQUIRED;
   }
 
-  virtual bool IsPregenerated() { return true; }
   static void GenerateStubsAheadOfTime(Isolate* isolate);
   static void InstallDescriptors(Isolate* isolate);
 
@@ -1764,8 +1788,14 @@ class ArrayConstructorStubBase : public HydrogenCodeStub {
  private:
   int NotMissMinorKey() { return bit_field_; }
 
+  // Ensure data fits within available bits.
+  STATIC_ASSERT(LAST_ALLOCATION_SITE_OVERRIDE_MODE == 1);
+  STATIC_ASSERT(LAST_CONTEXT_CHECK_MODE == 1);
+
   class ElementsKindBits: public BitField<ElementsKind, 0, 8> {};
-  class DisableAllocationSitesBits: public BitField<bool, 8, 1> {};
+  class AllocationSiteOverrideModeBits: public
+      BitField<AllocationSiteOverrideMode, 8, 1> {};  // NOLINT
+  class ContextCheckModeBits: public BitField<ContextCheckMode, 9, 1> {};
   uint32_t bit_field_;
 
   DISALLOW_COPY_AND_ASSIGN(ArrayConstructorStubBase);
@@ -1776,8 +1806,9 @@ class ArrayNoArgumentConstructorStub : public ArrayConstructorStubBase {
  public:
   ArrayNoArgumentConstructorStub(
       ElementsKind kind,
-      bool disable_allocation_sites = false)
-      : ArrayConstructorStubBase(kind, disable_allocation_sites) {
+      ContextCheckMode context_mode = CONTEXT_CHECK_REQUIRED,
+      AllocationSiteOverrideMode override_mode = DONT_OVERRIDE)
+      : ArrayConstructorStubBase(kind, context_mode, override_mode) {
   }
 
   virtual Handle<Code> GenerateCode();
@@ -1797,8 +1828,9 @@ class ArraySingleArgumentConstructorStub : public ArrayConstructorStubBase {
  public:
   ArraySingleArgumentConstructorStub(
       ElementsKind kind,
-      bool disable_allocation_sites = false)
-      : ArrayConstructorStubBase(kind, disable_allocation_sites) {
+      ContextCheckMode context_mode = CONTEXT_CHECK_REQUIRED,
+      AllocationSiteOverrideMode override_mode = DONT_OVERRIDE)
+      : ArrayConstructorStubBase(kind, context_mode, override_mode) {
   }
 
   virtual Handle<Code> GenerateCode();
@@ -1818,8 +1850,9 @@ class ArrayNArgumentsConstructorStub : public ArrayConstructorStubBase {
  public:
   ArrayNArgumentsConstructorStub(
       ElementsKind kind,
-      bool disable_allocation_sites = false)
-      : ArrayConstructorStubBase(kind, disable_allocation_sites) {
+      ContextCheckMode context_mode = CONTEXT_CHECK_REQUIRED,
+      AllocationSiteOverrideMode override_mode = DONT_OVERRIDE)
+      : ArrayConstructorStubBase(kind, context_mode, override_mode) {
   }
 
   virtual Handle<Code> GenerateCode();
@@ -1971,7 +2004,7 @@ class ToBooleanStub: public HydrogenCodeStub {
 
   class Types : public EnumSet<Type, byte> {
    public:
-    Types() {}
+    Types() : EnumSet<Type, byte>(0) {}
     explicit Types(byte bits) : EnumSet<Type, byte>(bits) {}
 
     byte ToByte() const { return ToIntegral(); }
@@ -1980,10 +2013,10 @@ class ToBooleanStub: public HydrogenCodeStub {
     bool Record(Handle<Object> object);
     bool NeedsMap() const;
     bool CanBeUndetectable() const;
-  };
+    bool IsGeneric() const { return ToIntegral() == Generic().ToIntegral(); }
 
-  static Types no_types() { return Types(); }
-  static Types all_types() { return Types((1 << NUMBER_OF_TYPES) - 1); }
+    static Types Generic() { return Types((1 << NUMBER_OF_TYPES) - 1); }
+  };
 
   explicit ToBooleanStub(Types types = Types())
       : types_(types) { }
@@ -2135,13 +2168,6 @@ class ProfileEntryHookStub : public PlatformCodeStub {
   // Generates a call to the entry hook if it's enabled.
   static void MaybeCallEntryHook(MacroAssembler* masm);
 
-  // Sets or unsets the entry hook function. Returns true on success,
-  // false on an attempt to replace a non-NULL entry hook with another
-  // non-NULL hook.
-  static bool SetFunctionEntryHook(FunctionEntryHook entry_hook);
-
-  static bool HasEntryHook() { return entry_hook_ != NULL; }
-
  private:
   static void EntryHookTrampoline(intptr_t function,
                                   intptr_t stack_pointer);
@@ -2151,9 +2177,6 @@ class ProfileEntryHookStub : public PlatformCodeStub {
 
   void Generate(MacroAssembler* masm);
 
-  // The current function entry hook.
-  static FunctionEntryHook entry_hook_;
-
   DISALLOW_COPY_AND_ASSIGN(ProfileEntryHookStub);
 };
 
index af2f1f6..8029d2f 100644 (file)
@@ -30,6 +30,7 @@
 #include "bootstrapper.h"
 #include "codegen.h"
 #include "compiler.h"
+#include "cpu-profiler.h"
 #include "debug.h"
 #include "prettyprinter.h"
 #include "rewriter.h"
@@ -178,7 +179,7 @@ bool CodeGenerator::ShouldGenerateLog(Expression* type) {
       !isolate->cpu_profiler()->is_profiling()) {
     return false;
   }
-  Handle<String> name = Handle<String>::cast(type->AsLiteral()->handle());
+  Handle<String> name = Handle<String>::cast(type->AsLiteral()->value());
   if (FLAG_log_regexp) {
     if (name->IsOneByteEqualTo(STATIC_ASCII_VECTOR("regexp")))
       return true;
index 950c7e7..c5604ab 100644 (file)
@@ -295,6 +295,16 @@ function WeakMapDelete(key) {
 }
 
 
+function WeakMapClear() {
+  if (!IS_WEAKMAP(this)) {
+    throw MakeTypeError('incompatible_method_receiver',
+                        ['WeakMap.prototype.clear', this]);
+  }
+  // Replace the internal table with a new empty table.
+  %WeakMapInitialize(this);
+}
+
+
 // -------------------------------------------------------------------
 
 function SetUpWeakMap() {
@@ -309,7 +319,8 @@ function SetUpWeakMap() {
     "get", WeakMapGet,
     "set", WeakMapSet,
     "has", WeakMapHas,
-    "delete", WeakMapDelete
+    "delete", WeakMapDelete,
+    "clear", WeakMapClear
   ));
 }
 
index 5fc107f..8edb41d 100644 (file)
@@ -32,6 +32,7 @@
 #include "bootstrapper.h"
 #include "codegen.h"
 #include "compilation-cache.h"
+#include "cpu-profiler.h"
 #include "debug.h"
 #include "deoptimizer.h"
 #include "full-codegen.h"
@@ -53,7 +54,8 @@ namespace v8 {
 namespace internal {
 
 
-CompilationInfo::CompilationInfo(Handle<Script> script, Zone* zone)
+CompilationInfo::CompilationInfo(Handle<Script> script,
+                                 Zone* zone)
     : flags_(LanguageModeField::encode(CLASSIC_MODE)),
       script_(script),
       osr_ast_id_(BailoutId::None()) {
@@ -71,7 +73,8 @@ CompilationInfo::CompilationInfo(Handle<SharedFunctionInfo> shared_info,
 }
 
 
-CompilationInfo::CompilationInfo(Handle<JSFunction> closure, Zone* zone)
+CompilationInfo::CompilationInfo(Handle<JSFunction> closure,
+                                 Zone* zone)
     : flags_(LanguageModeField::encode(CLASSIC_MODE) | IsLazy::encode(true)),
       closure_(closure),
       shared_info_(Handle<SharedFunctionInfo>(closure->shared())),
@@ -83,7 +86,8 @@ CompilationInfo::CompilationInfo(Handle<JSFunction> closure, Zone* zone)
 
 
 CompilationInfo::CompilationInfo(HydrogenCodeStub* stub,
-                                 Isolate* isolate, Zone* zone)
+                                 Isolate* isolate,
+                                 Zone* zone)
     : flags_(LanguageModeField::encode(CLASSIC_MODE) |
              IsLazy::encode(true)),
       osr_ast_id_(BailoutId::None()) {
@@ -92,7 +96,9 @@ CompilationInfo::CompilationInfo(HydrogenCodeStub* stub,
 }
 
 
-void CompilationInfo::Initialize(Isolate* isolate, Mode mode, Zone* zone) {
+void CompilationInfo::Initialize(Isolate* isolate,
+                                 Mode mode,
+                                 Zone* zone) {
   isolate_ = isolate;
   function_ = NULL;
   scope_ = NULL;
@@ -106,6 +112,9 @@ void CompilationInfo::Initialize(Isolate* isolate, Mode mode, Zone* zone) {
   opt_count_ = shared_info().is_null() ? 0 : shared_info()->opt_count();
   no_frame_ranges_ = isolate->cpu_profiler()->is_profiling()
                    ? new List<OffsetRange>(2) : NULL;
+  for (int i = 0; i < DependentCode::kGroupCount; i++) {
+    dependencies_[i] = NULL;
+  }
   if (mode == STUB) {
     mode_ = STUB;
     return;
@@ -125,6 +134,47 @@ void CompilationInfo::Initialize(Isolate* isolate, Mode mode, Zone* zone) {
 CompilationInfo::~CompilationInfo() {
   delete deferred_handles_;
   delete no_frame_ranges_;
+#ifdef DEBUG
+  // Check that no dependent maps have been added or added dependent maps have
+  // been rolled back or committed.
+  for (int i = 0; i < DependentCode::kGroupCount; i++) {
+    ASSERT_EQ(NULL, dependencies_[i]);
+  }
+#endif  // DEBUG
+}
+
+
+void CompilationInfo::CommitDependencies(Handle<Code> code) {
+  for (int i = 0; i < DependentCode::kGroupCount; i++) {
+    ZoneList<Handle<HeapObject> >* group_objects = dependencies_[i];
+    if (group_objects == NULL) continue;
+    ASSERT(!object_wrapper_.is_null());
+    for (int j = 0; j < group_objects->length(); j++) {
+      DependentCode::DependencyGroup group =
+          static_cast<DependentCode::DependencyGroup>(i);
+      DependentCode* dependent_code =
+          DependentCode::ForObject(group_objects->at(j), group);
+      dependent_code->UpdateToFinishedCode(group, this, *code);
+    }
+    dependencies_[i] = NULL;  // Zone-allocated, no need to delete.
+  }
+}
+
+
+void CompilationInfo::RollbackDependencies() {
+  // Unregister from all dependent maps if not yet committed.
+  for (int i = 0; i < DependentCode::kGroupCount; i++) {
+    ZoneList<Handle<HeapObject> >* group_objects = dependencies_[i];
+    if (group_objects == NULL) continue;
+    for (int j = 0; j < group_objects->length(); j++) {
+      DependentCode::DependencyGroup group =
+          static_cast<DependentCode::DependencyGroup>(i);
+      DependentCode* dependent_code =
+          DependentCode::ForObject(group_objects->at(j), group);
+      dependent_code->RemoveCompilationInfo(group, this);
+    }
+    dependencies_[i] = NULL;  // Zone-allocated, no need to delete.
+  }
 }
 
 
@@ -329,7 +379,10 @@ OptimizingCompiler::Status OptimizingCompiler::CreateGraph() {
   // performance of the hydrogen-based compiler.
   bool should_recompile = !info()->shared_info()->has_deoptimization_support();
   if (should_recompile || FLAG_hydrogen_stats) {
-    HPhase phase(HPhase::kFullCodeGen, isolate());
+    int64_t start_ticks = 0;
+    if (FLAG_hydrogen_stats) {
+      start_ticks = OS::Ticks();
+    }
     CompilationInfoWithZone unoptimized(info()->shared_info());
     // Note that we use the same AST that we will use for generating the
     // optimized code.
@@ -346,6 +399,10 @@ OptimizingCompiler::Status OptimizingCompiler::CreateGraph() {
       Compiler::RecordFunctionCompilation(
           Logger::LAZY_COMPILE_TAG, &unoptimized, shared);
     }
+    if (FLAG_hydrogen_stats) {
+      int64_t ticks = OS::Ticks() - start_ticks;
+      isolate()->GetHStatistics()->IncrementFullCodeGen(ticks);
+    }
   }
 
   // Check that the unoptimized, shared code is ready for
@@ -364,7 +421,7 @@ OptimizingCompiler::Status OptimizingCompiler::CreateGraph() {
   }
 
   // Type-check the function.
-  AstTyper::Type(info());
+  AstTyper::Run(info());
 
   graph_builder_ = new(info()->zone()) HOptimizedGraphBuilder(info());
 
@@ -490,7 +547,6 @@ static bool DebuggerWantsEagerCompilation(CompilationInfo* info,
 
 static Handle<SharedFunctionInfo> MakeFunctionInfo(CompilationInfo* info) {
   Isolate* isolate = info->isolate();
-  ZoneScope zone_scope(info->zone(), DELETE_ON_EXIT);
   PostponeInterruptsScope postpone(isolate);
 
   ASSERT(!isolate->native_context().is_null());
@@ -773,7 +829,6 @@ static bool InstallFullCode(CompilationInfo* info) {
 
   // Check the function has compiled code.
   ASSERT(shared->is_compiled());
-  shared->set_code_age(0);
   shared->set_dont_optimize(lit->flags()->Contains(kDontOptimize));
   shared->set_dont_inline(lit->flags()->Contains(kDontInline));
   shared->set_ast_node_count(lit->ast_node_count());
@@ -855,8 +910,6 @@ static bool InstallCodeFromOptimizedCodeMap(CompilationInfo* info) {
 bool Compiler::CompileLazy(CompilationInfo* info) {
   Isolate* isolate = info->isolate();
 
-  ZoneScope zone_scope(info->zone(), DELETE_ON_EXIT);
-
   // The VM is in the COMPILER state until exiting this function.
   VMState<COMPILER> state(isolate);
 
@@ -982,7 +1035,7 @@ void Compiler::InstallOptimizedCode(OptimizingCompiler* optimizing_compiler) {
   // The function may have already been optimized by OSR.  Simply continue.
   // Except when OSR already disabled optimization for some reason.
   if (info->shared_info()->optimization_disabled()) {
-    info->SetCode(Handle<Code>(info->shared_info()->code()));
+    info->AbortOptimization();
     InstallFullCode(*info);
     if (FLAG_trace_parallel_recompilation) {
       PrintF("  ** aborting optimization for ");
@@ -1000,9 +1053,14 @@ void Compiler::InstallOptimizedCode(OptimizingCompiler* optimizing_compiler) {
   // If crankshaft succeeded, install the optimized code else install
   // the unoptimized code.
   OptimizingCompiler::Status status = optimizing_compiler->last_status();
-  if (status != OptimizingCompiler::SUCCEEDED) {
-    optimizing_compiler->info()->set_bailout_reason(
-        "failed/bailed out last time");
+  if (info->HasAbortedDueToDependencyChange()) {
+    info->set_bailout_reason("bailed out due to dependent map");
+    status = optimizing_compiler->AbortOptimization();
+  } else if (status != OptimizingCompiler::SUCCEEDED) {
+    info->set_bailout_reason("failed/bailed out last time");
+    status = optimizing_compiler->AbortOptimization();
+  } else if (isolate->DebuggerHasBreakPoints()) {
+    info->set_bailout_reason("debugger is active");
     status = optimizing_compiler->AbortOptimization();
   } else {
     status = optimizing_compiler->GenerateAndInstallCode();
@@ -1167,4 +1225,31 @@ void Compiler::RecordFunctionCompilation(Logger::LogEventsAndTags tag,
                  info));
 }
 
+
+CompilationPhase::CompilationPhase(const char* name, CompilationInfo* info)
+    : name_(name), info_(info), zone_(info->isolate()) {
+  if (FLAG_hydrogen_stats) {
+    info_zone_start_allocation_size_ = info->zone()->allocation_size();
+    start_ticks_ = OS::Ticks();
+  }
+}
+
+
+CompilationPhase::~CompilationPhase() {
+  if (FLAG_hydrogen_stats) {
+    unsigned size = zone()->allocation_size();
+    size += info_->zone()->allocation_size() - info_zone_start_allocation_size_;
+    int64_t ticks = OS::Ticks() - start_ticks_;
+    isolate()->GetHStatistics()->SaveTiming(name_, ticks, size);
+  }
+}
+
+
+bool CompilationPhase::ShouldProduceTraceOutput() const {
+  // Produce trace output if flag is set so that the first letter of the
+  // phase name matches the command line parameter FLAG_trace_phase.
+  return (FLAG_trace_hydrogen &&
+          OS::StrChr(const_cast<char*>(FLAG_trace_phase), name_[0]) != NULL);
+}
+
 } }  // namespace v8::internal
index 8e6d295..161f404 100644 (file)
@@ -57,12 +57,8 @@ struct OffsetRange {
 // is constructed based on the resources available at compile-time.
 class CompilationInfo {
  public:
-  CompilationInfo(Handle<Script> script, Zone* zone);
-  CompilationInfo(Handle<SharedFunctionInfo> shared_info, Zone* zone);
   CompilationInfo(Handle<JSFunction> closure, Zone* zone);
-  CompilationInfo(HydrogenCodeStub* stub, Isolate* isolate, Zone* zone);
-
-  ~CompilationInfo();
+  virtual ~CompilationInfo();
 
   Isolate* isolate() {
     ASSERT(Isolate::Current() == isolate_);
@@ -243,6 +239,18 @@ class CompilationInfo {
     deferred_handles_ = deferred_handles;
   }
 
+  ZoneList<Handle<HeapObject> >* dependencies(
+      DependentCode::DependencyGroup group) {
+    if (dependencies_[group] == NULL) {
+      dependencies_[group] = new(zone_) ZoneList<Handle<HeapObject> >(2, zone_);
+    }
+    return dependencies_[group];
+  }
+
+  void CommitDependencies(Handle<Code> code);
+
+  void RollbackDependencies();
+
   void SaveHandles() {
     SaveHandle(&closure_);
     SaveHandle(&shared_info_);
@@ -276,6 +284,30 @@ class CompilationInfo {
     return result;
   }
 
+  Handle<Foreign> object_wrapper() {
+    if (object_wrapper_.is_null()) {
+      object_wrapper_ =
+          isolate()->factory()->NewForeign(reinterpret_cast<Address>(this));
+    }
+    return object_wrapper_;
+  }
+
+  void AbortDueToDependencyChange() {
+    mode_ = DEPENDENCY_CHANGE_ABORT;
+  }
+
+  bool HasAbortedDueToDependencyChange() {
+    return mode_ == DEPENDENCY_CHANGE_ABORT;
+  }
+
+ protected:
+  CompilationInfo(Handle<Script> script,
+                  Zone* zone);
+  CompilationInfo(Handle<SharedFunctionInfo> shared_info,
+                  Zone* zone);
+  CompilationInfo(HydrogenCodeStub* stub,
+                  Isolate* isolate,
+                  Zone* zone);
 
  private:
   Isolate* isolate_;
@@ -289,7 +321,8 @@ class CompilationInfo {
     BASE,
     OPTIMIZE,
     NONOPT,
-    STUB
+    STUB,
+    DEPENDENCY_CHANGE_ABORT
   };
 
   void Initialize(Isolate* isolate, Mode mode, Zone* zone);
@@ -369,6 +402,8 @@ class CompilationInfo {
 
   DeferredHandles* deferred_handles_;
 
+  ZoneList<Handle<HeapObject> >* dependencies_[DependentCode::kGroupCount];
+
   template<typename T>
   void SaveHandle(Handle<T> *object) {
     if (!object->is_null()) {
@@ -387,6 +422,8 @@ class CompilationInfo {
   // during graph optimization.
   int opt_count_;
 
+  Handle<Foreign> object_wrapper_;
+
   DISALLOW_COPY_AND_ASSIGN(CompilationInfo);
 };
 
@@ -397,24 +434,26 @@ class CompilationInfoWithZone: public CompilationInfo {
  public:
   explicit CompilationInfoWithZone(Handle<Script> script)
       : CompilationInfo(script, &zone_),
-        zone_(script->GetIsolate()),
-        zone_scope_(&zone_, DELETE_ON_EXIT) {}
+        zone_(script->GetIsolate()) {}
   explicit CompilationInfoWithZone(Handle<SharedFunctionInfo> shared_info)
       : CompilationInfo(shared_info, &zone_),
-        zone_(shared_info->GetIsolate()),
-        zone_scope_(&zone_, DELETE_ON_EXIT) {}
+        zone_(shared_info->GetIsolate()) {}
   explicit CompilationInfoWithZone(Handle<JSFunction> closure)
       : CompilationInfo(closure, &zone_),
-        zone_(closure->GetIsolate()),
-        zone_scope_(&zone_, DELETE_ON_EXIT) {}
-  explicit CompilationInfoWithZone(HydrogenCodeStub* stub, Isolate* isolate)
+        zone_(closure->GetIsolate()) {}
+  CompilationInfoWithZone(HydrogenCodeStub* stub, Isolate* isolate)
       : CompilationInfo(stub, isolate, &zone_),
-        zone_(isolate),
-        zone_scope_(&zone_, DELETE_ON_EXIT) {}
+        zone_(isolate) {}
+
+  // Virtual destructor because a CompilationInfoWithZone has to exit the
+  // zone scope and get rid of dependent maps even when the destructor is
+  // called when cast as a CompilationInfo.
+  virtual ~CompilationInfoWithZone() {
+    RollbackDependencies();
+  }
 
  private:
   Zone zone_;
-  ZoneScope zone_scope_;
 };
 
 
@@ -578,6 +617,30 @@ class Compiler : public AllStatic {
 };
 
 
+class CompilationPhase BASE_EMBEDDED {
+ public:
+  CompilationPhase(const char* name, CompilationInfo* info);
+  ~CompilationPhase();
+
+ protected:
+  bool ShouldProduceTraceOutput() const;
+
+  const char* name() const { return name_; }
+  CompilationInfo* info() const { return info_; }
+  Isolate* isolate() const { return info()->isolate(); }
+  Zone* zone() { return &zone_; }
+
+ private:
+  const char* name_;
+  CompilationInfo* info_;
+  Zone zone_;
+  unsigned info_zone_start_allocation_size_;
+  int64_t start_ticks_;
+
+  DISALLOW_COPY_AND_ASSIGN(CompilationPhase);
+};
+
+
 } }  // namespace v8::internal
 
 #endif  // V8_COMPILER_H_
index f04ccd1..fdf6d27 100644 (file)
@@ -134,6 +134,7 @@ enum BindingFlags {
   V(FLOAT_ARRAY_FUN_INDEX, JSFunction, float_array_fun) \
   V(DOUBLE_ARRAY_FUN_INDEX, JSFunction, double_array_fun) \
   V(UINT8C_ARRAY_FUN_INDEX, JSFunction, uint8c_array_fun) \
+  V(DATA_VIEW_FUN_INDEX, JSFunction, data_view_fun) \
   V(FUNCTION_MAP_INDEX, Map, function_map) \
   V(STRICT_MODE_FUNCTION_MAP_INDEX, Map, strict_mode_function_map) \
   V(FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX, Map, function_without_prototype_map) \
@@ -299,6 +300,7 @@ class Context: public FixedArray {
     FLOAT_ARRAY_FUN_INDEX,
     DOUBLE_ARRAY_FUN_INDEX,
     UINT8C_ARRAY_FUN_INDEX,
+    DATA_VIEW_FUN_INDEX,
     MESSAGE_LISTENERS_INDEX,
     MAKE_MESSAGE_FUN_INDEX,
     GET_STACK_TRACE_LINE_INDEX,
index 4982197..c3cc27c 100644 (file)
@@ -56,6 +56,17 @@ void SharedFunctionInfoMoveEventRecord::UpdateCodeMap(CodeMap* code_map) {
 }
 
 
+void ReportBuiltinEventRecord::UpdateCodeMap(CodeMap* code_map) {
+  CodeEntry* entry = code_map->FindEntry(start);
+  if (!entry) {
+    // Code objects for builtins should already have been added to the map but
+    // some of them have been filtered out by CpuProfiler.
+    return;
+  }
+  entry->SetBuiltinId(builtin_id);
+}
+
+
 TickSample* ProfilerEventsProcessor::TickSampleEvent() {
   generator_->Tick();
   TickSampleEventRecord* evt =
@@ -64,16 +75,6 @@ TickSample* ProfilerEventsProcessor::TickSampleEvent() {
 }
 
 
-bool ProfilerEventsProcessor::FilterOutCodeCreateEvent(
-    Logger::LogEventsAndTags tag) {
-  return FLAG_prof_browser_mode
-      && (tag != Logger::CALLBACK_TAG
-          && tag != Logger::FUNCTION_TAG
-          && tag != Logger::LAZY_COMPILE_TAG
-          && tag != Logger::REG_EXP_TAG
-          && tag != Logger::SCRIPT_TAG);
-}
-
 } }  // namespace v8::internal
 
 #endif  // V8_CPU_PROFILER_INL_H_
index 4272219..b3800f5 100644 (file)
@@ -45,11 +45,9 @@ static const int kTickSamplesBufferChunksCount = 16;
 static const int kProfilerStackSize = 64 * KB;
 
 
-ProfilerEventsProcessor::ProfilerEventsProcessor(
-    ProfileGenerator* generator, CpuProfilesCollection* profiles)
+ProfilerEventsProcessor::ProfilerEventsProcessor(ProfileGenerator* generator)
     : Thread(Thread::Options("v8:ProfEvntProc", kProfilerStackSize)),
       generator_(generator),
-      profiles_(profiles),
       running_(true),
       ticks_buffer_(sizeof(TickSampleEventRecord),
                     kTickSamplesBufferChunkSize,
@@ -58,127 +56,15 @@ ProfilerEventsProcessor::ProfilerEventsProcessor(
 }
 
 
-void ProfilerEventsProcessor::CallbackCreateEvent(Logger::LogEventsAndTags tag,
-                                                  const char* prefix,
-                                                  Name* name,
-                                                  Address start) {
-  if (FilterOutCodeCreateEvent(tag)) return;
-  CodeEventsContainer evt_rec;
-  CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_;
-  rec->type = CodeEventRecord::CODE_CREATION;
-  rec->order = ++enqueue_order_;
-  rec->start = start;
-  rec->entry = profiles_->NewCodeEntry(tag, prefix, name);
-  rec->size = 1;
-  rec->shared = NULL;
-  events_buffer_.Enqueue(evt_rec);
-}
-
-
-void ProfilerEventsProcessor::CodeCreateEvent(Logger::LogEventsAndTags tag,
-                                              Name* name,
-                                              String* resource_name,
-                                              int line_number,
-                                              Address start,
-                                              unsigned size,
-                                              Address shared,
-                                              CompilationInfo* info) {
-  if (FilterOutCodeCreateEvent(tag)) return;
-  CodeEventsContainer evt_rec;
-  CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_;
-  rec->type = CodeEventRecord::CODE_CREATION;
-  rec->order = ++enqueue_order_;
-  rec->start = start;
-  rec->entry = profiles_->NewCodeEntry(tag, name, resource_name, line_number);
-  if (info) {
-    rec->entry->set_no_frame_ranges(info->ReleaseNoFrameRanges());
-  }
-  rec->size = size;
-  rec->shared = shared;
-  events_buffer_.Enqueue(evt_rec);
-}
-
-
-void ProfilerEventsProcessor::CodeCreateEvent(Logger::LogEventsAndTags tag,
-                                              const char* name,
-                                              Address start,
-                                              unsigned size) {
-  if (FilterOutCodeCreateEvent(tag)) return;
-  CodeEventsContainer evt_rec;
-  CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_;
-  rec->type = CodeEventRecord::CODE_CREATION;
-  rec->order = ++enqueue_order_;
-  rec->start = start;
-  rec->entry = profiles_->NewCodeEntry(tag, name);
-  rec->size = size;
-  rec->shared = NULL;
-  events_buffer_.Enqueue(evt_rec);
-}
-
-
-void ProfilerEventsProcessor::CodeCreateEvent(Logger::LogEventsAndTags tag,
-                                              int args_count,
-                                              Address start,
-                                              unsigned size) {
-  if (FilterOutCodeCreateEvent(tag)) return;
-  CodeEventsContainer evt_rec;
-  CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_;
-  rec->type = CodeEventRecord::CODE_CREATION;
-  rec->order = ++enqueue_order_;
-  rec->start = start;
-  rec->entry = profiles_->NewCodeEntry(tag, args_count);
-  rec->size = size;
-  rec->shared = NULL;
-  events_buffer_.Enqueue(evt_rec);
-}
-
-
-void ProfilerEventsProcessor::CodeMoveEvent(Address from, Address to) {
-  CodeEventsContainer evt_rec;
-  CodeMoveEventRecord* rec = &evt_rec.CodeMoveEventRecord_;
-  rec->type = CodeEventRecord::CODE_MOVE;
-  rec->order = ++enqueue_order_;
-  rec->from = from;
-  rec->to = to;
-  events_buffer_.Enqueue(evt_rec);
+void ProfilerEventsProcessor::Enqueue(const CodeEventsContainer& event) {
+  event.generic.order = ++enqueue_order_;
+  events_buffer_.Enqueue(event);
 }
 
 
-void ProfilerEventsProcessor::SharedFunctionInfoMoveEvent(Address from,
-                                                          Address to) {
-  CodeEventsContainer evt_rec;
-  SharedFunctionInfoMoveEventRecord* rec =
-      &evt_rec.SharedFunctionInfoMoveEventRecord_;
-  rec->type = CodeEventRecord::SHARED_FUNC_MOVE;
-  rec->order = ++enqueue_order_;
-  rec->from = from;
-  rec->to = to;
-  events_buffer_.Enqueue(evt_rec);
-}
-
-
-void ProfilerEventsProcessor::RegExpCodeCreateEvent(
-    Logger::LogEventsAndTags tag,
-    const char* prefix,
-    String* name,
-    Address start,
-    unsigned size) {
-  if (FilterOutCodeCreateEvent(tag)) return;
-  CodeEventsContainer evt_rec;
-  CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_;
-  rec->type = CodeEventRecord::CODE_CREATION;
-  rec->order = ++enqueue_order_;
-  rec->start = start;
-  rec->entry = profiles_->NewCodeEntry(tag, prefix, name);
-  rec->size = size;
-  events_buffer_.Enqueue(evt_rec);
-}
-
-
-void ProfilerEventsProcessor::AddCurrentStack() {
+void ProfilerEventsProcessor::AddCurrentStack(Isolate* isolate) {
   TickSampleEventRecord record(enqueue_order_);
   TickSample* sample = &record.sample;
-  Isolate* isolate = Isolate::Current();
   sample->state = isolate->current_vm_state();
   sample->pc = reinterpret_cast<Address>(sample);  // Not NULL.
   for (StackTraceFrameIterator it(isolate);
@@ -191,9 +77,8 @@ void ProfilerEventsProcessor::AddCurrentStack() {
 
 
 bool ProfilerEventsProcessor::ProcessCodeEvent(unsigned* dequeue_order) {
-  if (!events_buffer_.IsEmpty()) {
-    CodeEventsContainer record;
-    events_buffer_.Dequeue(&record);
+  CodeEventsContainer record;
+  if (events_buffer_.Dequeue(&record)) {
     switch (record.generic.type) {
 #define PROFILER_TYPE_CASE(type, clss)                          \
       case CodeEventRecord::type:                               \
@@ -306,30 +191,56 @@ bool CpuProfiler::HasDetachedProfiles() {
 }
 
 
+static bool FilterOutCodeCreateEvent(Logger::LogEventsAndTags tag) {
+  return FLAG_prof_browser_mode
+      && (tag != Logger::CALLBACK_TAG
+          && tag != Logger::FUNCTION_TAG
+          && tag != Logger::LAZY_COMPILE_TAG
+          && tag != Logger::REG_EXP_TAG
+          && tag != Logger::SCRIPT_TAG);
+}
+
+
 void CpuProfiler::CallbackEvent(Name* name, Address entry_point) {
-  processor_->CallbackCreateEvent(
-      Logger::CALLBACK_TAG, CodeEntry::kEmptyNamePrefix, name, entry_point);
+  if (FilterOutCodeCreateEvent(Logger::CALLBACK_TAG)) return;
+  CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION);
+  CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_;
+  rec->start = entry_point;
+  rec->entry = profiles_->NewCodeEntry(
+      Logger::CALLBACK_TAG,
+      profiles_->GetName(name),
+      TokenEnumerator::kInheritsSecurityToken);
+  rec->size = 1;
+  rec->shared = NULL;
+  processor_->Enqueue(evt_rec);
 }
 
 
 void CpuProfiler::CodeCreateEvent(Logger::LogEventsAndTags tag,
-                           Code* code, const char* comment) {
-  processor_->CodeCreateEvent(
-      tag, comment, code->address(), code->ExecutableSize());
+                                  Code* code,
+                                  const char* name) {
+  if (FilterOutCodeCreateEvent(tag)) return;
+  CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION);
+  CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_;
+  rec->start = code->address();
+  rec->entry = profiles_->NewCodeEntry(tag, profiles_->GetFunctionName(name));
+  rec->size = code->ExecutableSize();
+  rec->shared = NULL;
+  processor_->Enqueue(evt_rec);
 }
 
 
 void CpuProfiler::CodeCreateEvent(Logger::LogEventsAndTags tag,
-                           Code* code, Name* name) {
-  processor_->CodeCreateEvent(
-      tag,
-      name,
-      isolate_->heap()->empty_string(),
-      v8::CpuProfileNode::kNoLineNumberInfo,
-      code->address(),
-      code->ExecutableSize(),
-      NULL,
-      NULL);
+                                  Code* code,
+                                  Name* name) {
+  if (FilterOutCodeCreateEvent(tag)) return;
+  CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION);
+  CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_;
+  rec->start = code->address();
+  rec->entry = profiles_->NewCodeEntry(tag, profiles_->GetFunctionName(name));
+  rec->size = code->ExecutableSize();
+  rec->shared = NULL;
+  processor_->Enqueue(evt_rec);
 }
 
 
@@ -338,15 +249,22 @@ void CpuProfiler::CodeCreateEvent(Logger::LogEventsAndTags tag,
                                   SharedFunctionInfo* shared,
                                   CompilationInfo* info,
                                   Name* name) {
-  processor_->CodeCreateEvent(
-      tag,
-      name,
-      isolate_->heap()->empty_string(),
-      v8::CpuProfileNode::kNoLineNumberInfo,
-      code->address(),
-      code->ExecutableSize(),
-      shared->address(),
-      info);
+  if (FilterOutCodeCreateEvent(tag)) return;
+  CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION);
+  CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_;
+  rec->start = code->address();
+  rec->entry = profiles_->NewCodeEntry(tag, profiles_->GetFunctionName(name));
+  if (info) {
+    rec->entry->set_no_frame_ranges(info->ReleaseNoFrameRanges());
+  }
+  if (shared->script()->IsScript()) {
+    ASSERT(Script::cast(shared->script()));
+    Script* script = Script::cast(shared->script());
+    rec->entry->set_script_id(script->id()->value());
+  }
+  rec->size = code->ExecutableSize();
+  rec->shared = shared->address();
+  processor_->Enqueue(evt_rec);
 }
 
 
@@ -355,30 +273,53 @@ void CpuProfiler::CodeCreateEvent(Logger::LogEventsAndTags tag,
                                   SharedFunctionInfo* shared,
                                   CompilationInfo* info,
                                   String* source, int line) {
-  processor_->CodeCreateEvent(
+  if (FilterOutCodeCreateEvent(tag)) return;
+  CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION);
+  CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_;
+  rec->start = code->address();
+  rec->entry = profiles_->NewCodeEntry(
       tag,
-      shared->DebugName(),
-      source,
-      line,
-      code->address(),
-      code->ExecutableSize(),
-      shared->address(),
-      info);
+      profiles_->GetFunctionName(shared->DebugName()),
+      TokenEnumerator::kNoSecurityToken,
+      CodeEntry::kEmptyNamePrefix,
+      profiles_->GetName(source),
+      line);
+  if (info) {
+    rec->entry->set_no_frame_ranges(info->ReleaseNoFrameRanges());
+  }
+  ASSERT(Script::cast(shared->script()));
+  Script* script = Script::cast(shared->script());
+  rec->entry->set_script_id(script->id()->value());
+  rec->size = code->ExecutableSize();
+  rec->shared = shared->address();
+  processor_->Enqueue(evt_rec);
 }
 
 
 void CpuProfiler::CodeCreateEvent(Logger::LogEventsAndTags tag,
-                           Code* code, int args_count) {
-  processor_->CodeCreateEvent(
+                                  Code* code,
+                                  int args_count) {
+  if (FilterOutCodeCreateEvent(tag)) return;
+  CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION);
+  CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_;
+  rec->start = code->address();
+  rec->entry = profiles_->NewCodeEntry(
       tag,
-      args_count,
-      code->address(),
-      code->ExecutableSize());
+      profiles_->GetName(args_count),
+      TokenEnumerator::kInheritsSecurityToken,
+      "args_count: ");
+  rec->size = code->ExecutableSize();
+  rec->shared = NULL;
+  processor_->Enqueue(evt_rec);
 }
 
 
 void CpuProfiler::CodeMoveEvent(Address from, Address to) {
-  processor_->CodeMoveEvent(from, to);
+  CodeEventsContainer evt_rec(CodeEventRecord::CODE_MOVE);
+  CodeMoveEventRecord* rec = &evt_rec.CodeMoveEventRecord_;
+  rec->from = from;
+  rec->to = to;
+  processor_->Enqueue(evt_rec);
 }
 
 
@@ -387,29 +328,59 @@ void CpuProfiler::CodeDeleteEvent(Address from) {
 
 
 void CpuProfiler::SharedFunctionInfoMoveEvent(Address from, Address to) {
-  processor_->SharedFunctionInfoMoveEvent(from, to);
+  CodeEventsContainer evt_rec(CodeEventRecord::SHARED_FUNC_MOVE);
+  SharedFunctionInfoMoveEventRecord* rec =
+      &evt_rec.SharedFunctionInfoMoveEventRecord_;
+  rec->from = from;
+  rec->to = to;
+  processor_->Enqueue(evt_rec);
 }
 
 
 void CpuProfiler::GetterCallbackEvent(Name* name, Address entry_point) {
-  processor_->CallbackCreateEvent(
-      Logger::CALLBACK_TAG, "get ", name, entry_point);
+  if (FilterOutCodeCreateEvent(Logger::CALLBACK_TAG)) return;
+  CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION);
+  CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_;
+  rec->start = entry_point;
+  rec->entry = profiles_->NewCodeEntry(
+      Logger::CALLBACK_TAG,
+      profiles_->GetName(name),
+      TokenEnumerator::kInheritsSecurityToken,
+      "get ");
+  rec->size = 1;
+  rec->shared = NULL;
+  processor_->Enqueue(evt_rec);
 }
 
 
 void CpuProfiler::RegExpCodeCreateEvent(Code* code, String* source) {
-  processor_->RegExpCodeCreateEvent(
+  if (FilterOutCodeCreateEvent(Logger::REG_EXP_TAG)) return;
+  CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION);
+  CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_;
+  rec->start = code->address();
+  rec->entry = profiles_->NewCodeEntry(
       Logger::REG_EXP_TAG,
-      "RegExp: ",
-      source,
-      code->address(),
-      code->ExecutableSize());
+      profiles_->GetName(source),
+      TokenEnumerator::kInheritsSecurityToken,
+      "RegExp: ");
+  rec->size = code->ExecutableSize();
+  processor_->Enqueue(evt_rec);
 }
 
 
 void CpuProfiler::SetterCallbackEvent(Name* name, Address entry_point) {
-  processor_->CallbackCreateEvent(
-      Logger::CALLBACK_TAG, "set ", name, entry_point);
+  if (FilterOutCodeCreateEvent(Logger::CALLBACK_TAG)) return;
+  CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION);
+  CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_;
+  rec->start = entry_point;
+  rec->entry = profiles_->NewCodeEntry(
+      Logger::CALLBACK_TAG,
+      profiles_->GetName(name),
+      TokenEnumerator::kInheritsSecurityToken,
+      "set ");
+  rec->size = 1;
+  rec->shared = NULL;
+  processor_->Enqueue(evt_rec);
 }
 
 
@@ -425,7 +396,23 @@ CpuProfiler::CpuProfiler(Isolate* isolate)
 }
 
 
+CpuProfiler::CpuProfiler(Isolate* isolate,
+                         CpuProfilesCollection* test_profiles,
+                         ProfileGenerator* test_generator,
+                         ProfilerEventsProcessor* test_processor)
+    : isolate_(isolate),
+      profiles_(test_profiles),
+      next_profile_uid_(1),
+      token_enumerator_(new TokenEnumerator()),
+      generator_(test_generator),
+      processor_(test_processor),
+      need_to_stop_sampler_(false),
+      is_profiling_(false) {
+}
+
+
 CpuProfiler::~CpuProfiler() {
+  ASSERT(!is_profiling_);
   delete token_enumerator_;
   delete profiles_;
 }
@@ -440,7 +427,7 @@ void CpuProfiler::StartProfiling(const char* title, bool record_samples) {
   if (profiles_->StartProfiling(title, next_profile_uid_++, record_samples)) {
     StartProcessorIfNotStarted();
   }
-  processor_->AddCurrentStack();
+  processor_->AddCurrentStack(isolate_);
 }
 
 
@@ -451,23 +438,24 @@ void CpuProfiler::StartProfiling(String* title, bool record_samples) {
 
 void CpuProfiler::StartProcessorIfNotStarted() {
   if (processor_ == NULL) {
+    Logger* logger = isolate_->logger();
     // Disable logging when using the new implementation.
-    saved_logging_nesting_ = isolate_->logger()->logging_nesting_;
-    isolate_->logger()->logging_nesting_ = 0;
+    saved_logging_nesting_ = logger->logging_nesting_;
+    logger->logging_nesting_ = 0;
     generator_ = new ProfileGenerator(profiles_);
-    processor_ = new ProfilerEventsProcessor(generator_, profiles_);
+    processor_ = new ProfilerEventsProcessor(generator_);
     is_profiling_ = true;
     processor_->StartSynchronously();
     // Enumerate stuff we already have in the heap.
-    if (isolate_->heap()->HasBeenSetUp()) {
-      if (!FLAG_prof_browser_mode) {
-        isolate_->logger()->LogCodeObjects();
-      }
-      isolate_->logger()->LogCompiledFunctions();
-      isolate_->logger()->LogAccessorCallbacks();
+    ASSERT(isolate_->heap()->HasBeenSetUp());
+    if (!FLAG_prof_browser_mode) {
+      logger->LogCodeObjects();
     }
+    logger->LogCompiledFunctions();
+    logger->LogAccessorCallbacks();
+    LogBuiltins();
     // Enable stack sampling.
-    Sampler* sampler = isolate_->logger()->sampler();
+    Sampler* sampler = logger->sampler();
     sampler->IncreaseProfilingDepth();
     if (!sampler->IsActive()) {
       sampler->Start();
@@ -526,4 +514,18 @@ void CpuProfiler::StopProcessor() {
 }
 
 
+void CpuProfiler::LogBuiltins() {
+  Builtins* builtins = isolate_->builtins();
+  ASSERT(builtins->is_initialized());
+  for (int i = 0; i < Builtins::builtin_count; i++) {
+    CodeEventsContainer evt_rec(CodeEventRecord::REPORT_BUILTIN);
+    ReportBuiltinEventRecord* rec = &evt_rec.ReportBuiltinEventRecord_;
+    Builtins::Name id = static_cast<Builtins::Name>(i);
+    rec->start = builtins->builtin(id)->address();
+    rec->builtin_id = id;
+    processor_->Enqueue(evt_rec);
+  }
+}
+
+
 } }  // namespace v8::internal
index 2f8479f..77fdb06 100644 (file)
@@ -49,7 +49,8 @@ class TokenEnumerator;
 #define CODE_EVENTS_TYPE_LIST(V)                                   \
   V(CODE_CREATION,    CodeCreateEventRecord)                       \
   V(CODE_MOVE,        CodeMoveEventRecord)                         \
-  V(SHARED_FUNC_MOVE, SharedFunctionInfoMoveEventRecord)
+  V(SHARED_FUNC_MOVE, SharedFunctionInfoMoveEventRecord)           \
+  V(REPORT_BUILTIN,   ReportBuiltinEventRecord)
 
 
 class CodeEventRecord {
@@ -63,7 +64,7 @@ class CodeEventRecord {
 #undef DECLARE_TYPE
 
   Type type;
-  unsigned order;
+  mutable unsigned order;
 };
 
 
@@ -96,6 +97,15 @@ class SharedFunctionInfoMoveEventRecord : public CodeEventRecord {
 };
 
 
+class ReportBuiltinEventRecord : public CodeEventRecord {
+ public:
+  Address start;
+  Builtins::Name builtin_id;
+
+  INLINE(void UpdateCodeMap(CodeMap* code_map));
+};
+
+
 class TickSampleEventRecord {
  public:
   // The parameterless constructor is used when we dequeue data from
@@ -122,43 +132,36 @@ class TickSampleEventRecord {
 };
 
 
+class CodeEventsContainer {
+ public:
+  explicit CodeEventsContainer(
+      CodeEventRecord::Type type = CodeEventRecord::NONE) {
+    generic.type = type;
+  }
+  union  {
+    CodeEventRecord generic;
+#define DECLARE_CLASS(ignore, type) type type##_;
+    CODE_EVENTS_TYPE_LIST(DECLARE_CLASS)
+#undef DECLARE_TYPE
+  };
+};
+
+
 // This class implements both the profile events processor thread and
 // methods called by event producers: VM and stack sampler threads.
 class ProfilerEventsProcessor : public Thread {
  public:
-  ProfilerEventsProcessor(ProfileGenerator* generator,
-                          CpuProfilesCollection* profiles);
+  explicit ProfilerEventsProcessor(ProfileGenerator* generator);
   virtual ~ProfilerEventsProcessor() {}
 
   // Thread control.
   virtual void Run();
   inline void Stop() { running_ = false; }
   INLINE(bool running()) { return running_; }
+  void Enqueue(const CodeEventsContainer& event);
 
-  // Events adding methods. Called by VM threads.
-  void CallbackCreateEvent(Logger::LogEventsAndTags tag,
-                           const char* prefix, Name* name,
-                           Address start);
-  void CodeCreateEvent(Logger::LogEventsAndTags tag,
-                       Name* name,
-                       String* resource_name, int line_number,
-                       Address start, unsigned size,
-                       Address shared,
-                       CompilationInfo* info);
-  void CodeCreateEvent(Logger::LogEventsAndTags tag,
-                       const char* name,
-                       Address start, unsigned size);
-  void CodeCreateEvent(Logger::LogEventsAndTags tag,
-                       int args_count,
-                       Address start, unsigned size);
-  void CodeMoveEvent(Address from, Address to);
-  void CodeDeleteEvent(Address from);
-  void SharedFunctionInfoMoveEvent(Address from, Address to);
-  void RegExpCodeCreateEvent(Logger::LogEventsAndTags tag,
-                             const char* prefix, String* name,
-                             Address start, unsigned size);
   // Puts current stack into tick sample events buffer.
-  void AddCurrentStack();
+  void AddCurrentStack(Isolate* isolate);
 
   // Tick sample events are filled directly in the buffer of the circular
   // queue (because the structure is of fixed width, but usually not all
@@ -167,21 +170,11 @@ class ProfilerEventsProcessor : public Thread {
   INLINE(TickSample* TickSampleEvent());
 
  private:
-  union CodeEventsContainer {
-    CodeEventRecord generic;
-#define DECLARE_CLASS(ignore, type) type type##_;
-    CODE_EVENTS_TYPE_LIST(DECLARE_CLASS)
-#undef DECLARE_TYPE
-  };
-
   // Called from events processing thread (Run() method.)
   bool ProcessCodeEvent(unsigned* dequeue_order);
   bool ProcessTicks(unsigned dequeue_order);
 
-  INLINE(static bool FilterOutCodeCreateEvent(Logger::LogEventsAndTags tag));
-
   ProfileGenerator* generator_;
-  CpuProfilesCollection* profiles_;
   bool running_;
   UnboundQueue<CodeEventsContainer> events_buffer_;
   SamplingCircularQueue ticks_buffer_;
@@ -204,6 +197,12 @@ class ProfilerEventsProcessor : public Thread {
 class CpuProfiler {
  public:
   explicit CpuProfiler(Isolate* isolate);
+
+  CpuProfiler(Isolate* isolate,
+              CpuProfilesCollection* test_collection,
+              ProfileGenerator* test_generator,
+              ProfilerEventsProcessor* test_processor);
+
   ~CpuProfiler();
 
   void StartProfiling(const char* title, bool record_samples = false);
@@ -248,12 +247,16 @@ class CpuProfiler {
   void SharedFunctionInfoMoveEvent(Address from, Address to);
 
   INLINE(bool is_profiling() const) { return is_profiling_; }
+  bool* is_profiling_address() {
+    return &is_profiling_;
+  }
 
  private:
   void StartProcessorIfNotStarted();
   void StopProcessorIfLastProfile(const char* title);
   void StopProcessor();
   void ResetProfiles();
+  void LogBuiltins();
 
   Isolate* isolate_;
   CpuProfilesCollection* profiles_;
index e1d29d9..aac7aab 100644 (file)
@@ -68,7 +68,7 @@ void HandleDebugEvent(DebugEvent event,
   // Get the toJSONProtocol function on the event and get the JSON format.
   Local<String> to_json_fun_name = String::New("toJSONProtocol");
   Local<Function> to_json_fun =
-      Function::Cast(*event_data->Get(to_json_fun_name));
+      Local<Function>::Cast(event_data->Get(to_json_fun_name));
   Local<Value> event_json = to_json_fun->Call(event_data, 0, NULL);
   if (try_catch.HasCaught()) {
     Shell::ReportException(isolate, &try_catch);
@@ -91,9 +91,9 @@ void HandleDebugEvent(DebugEvent event,
 
   // Get the debug command processor.
   Local<String> fun_name = String::New("debugCommandProcessor");
-  Local<Function> fun = Function::Cast(*exec_state->Get(fun_name));
+  Local<Function> fun = Local<Function>::Cast(exec_state->Get(fun_name));
   Local<Object> cmd_processor =
-      Object::Cast(*fun->Call(exec_state, 0, NULL));
+      Local<Object>::Cast(fun->Call(exec_state, 0, NULL));
   if (try_catch.HasCaught()) {
     Shell::ReportException(isolate, &try_catch);
     return;
index 5226364..298518d 100644 (file)
@@ -150,18 +150,19 @@ char* ReadLineEditor::CompletionGenerator(const char* text, int state) {
   static Persistent<Array> current_completions;
   Isolate* isolate = read_line_editor.isolate_;
   Locker lock(isolate);
+  HandleScope scope;
+  Handle<Array> completions;
   if (state == 0) {
-    HandleScope scope;
     Local<String> full_text = String::New(rl_line_buffer, rl_point);
-    Handle<Array> completions =
-        Shell::GetCompletions(isolate, String::New(text), full_text);
-    current_completions = Persistent<Array>::New(isolate, completions);
+    completions = Shell::GetCompletions(isolate, String::New(text), full_text);
+    current_completions.Reset(isolate, completions);
     current_index = 0;
+  } else {
+    completions = Local<Array>::New(isolate, current_completions);
   }
-  if (current_index < current_completions->Length()) {
-    HandleScope scope;
+  if (current_index < completions->Length()) {
     Handle<Integer> index = Integer::New(current_index);
-    Handle<Value> str_obj = current_completions->Get(index);
+    Handle<Value> str_obj = completions->Get(index);
     current_index++;
     String::Utf8Value str(str_obj);
     return strdup(*str);
index a917dbd..65af987 100644 (file)
@@ -1076,14 +1076,15 @@ static char* ReadChars(Isolate* isolate, const char* name, int* size_out) {
 }
 
 static void ReadBufferWeakCallback(v8::Isolate* isolate,
-                                   Persistent<Value>* object,
+                                   Persistent<ArrayBuffer>* array_buffer,
                                    uint8_t* data) {
-  size_t byte_length = ArrayBuffer::Cast(**object)->ByteLength();
+  size_t byte_length =
+      Local<ArrayBuffer>::New(isolate, *array_buffer)->ByteLength();
   isolate->AdjustAmountOfExternalAllocatedMemory(
       -static_cast<intptr_t>(byte_length));
 
   delete[] data;
-  object->Dispose(isolate);
+  array_buffer->Dispose();
 }
 
 void Shell::ReadBuffer(const v8::FunctionCallbackInfo<v8::Value>& args) {
@@ -1103,8 +1104,8 @@ void Shell::ReadBuffer(const v8::FunctionCallbackInfo<v8::Value>& args) {
     return;
   }
   Handle<v8::ArrayBuffer> buffer = ArrayBuffer::New(data, length);
-  v8::Persistent<v8::Value> weak_handle(isolate, buffer);
-  weak_handle.MakeWeak(isolate, data, ReadBufferWeakCallback);
+  v8::Persistent<v8::ArrayBuffer> weak_handle(isolate, buffer);
+  weak_handle.MakeWeak(data, ReadBufferWeakCallback);
   weak_handle.MarkIndependent();
   isolate->AdjustAmountOfExternalAllocatedMemory(length);
 
index ea043dc..47a7cc0 100644 (file)
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 {
-  'includes': ['../build/common.gypi'],
   'variables': {
+    'v8_code': 1,
     'console%': '',
     # Enable support for Intel VTune. Supported on ia32/x64 only
     'v8_enable_vtunejit%': 0,
   },
+  'includes': ['../build/common.gypi'],
   'targets': [
     {
       'target_name': 'd8',
index df10461..3efea06 100644 (file)
@@ -1020,7 +1020,7 @@ DebugRequest.prototype.changeBreakpointCommandToJSONRequest_ =
           args.substring(nextPos + 1, args.length) : 'all';
       if (!arg2) {
         arg2 = 'all'; // if unspecified, set for all.
-      } if (arg2 == 'unc') { // check for short cut.
+      } else if (arg2 == 'unc') { // check for short cut.
         arg2 = 'uncaught';
       }
       excType = arg2;
index 7eeb794..8ceccf6 100644 (file)
@@ -215,6 +215,8 @@ class GrowableBitVector BASE_EMBEDDED {
   };
 
   GrowableBitVector() : bits_(NULL) { }
+  GrowableBitVector(int length, Zone* zone)
+      : bits_(new(zone) BitVector(length, zone)) { }
 
   bool Contains(int value) const {
     if (!InBitsRange(value)) return false;
index 7787312..88efbe2 100644 (file)
@@ -71,6 +71,13 @@ Debug.ScriptBreakPointType = { ScriptId: 0,
                                ScriptName: 1,
                                ScriptRegExp: 2 };
 
+// The different types of breakpoint position alignments.
+// Must match BreakPositionAlignment in debug.h.
+Debug.BreakPositionAlignment = {
+  Statement: 0,
+  BreakPosition: 1
+};
+
 function ScriptTypeFlag(type) {
   return (1 << type);
 }
@@ -251,7 +258,7 @@ function IsBreakPointTriggered(break_id, break_point) {
 // script name or script id and the break point is represented as line and
 // column.
 function ScriptBreakPoint(type, script_id_or_name, opt_line, opt_column,
-                          opt_groupId) {
+                          opt_groupId, opt_position_alignment) {
   this.type_ = type;
   if (type == Debug.ScriptBreakPointType.ScriptId) {
     this.script_id_ = script_id_or_name;
@@ -265,6 +272,8 @@ function ScriptBreakPoint(type, script_id_or_name, opt_line, opt_column,
   this.line_ = opt_line || 0;
   this.column_ = opt_column;
   this.groupId_ = opt_groupId;
+  this.position_alignment_ = IS_UNDEFINED(opt_position_alignment)
+      ? Debug.BreakPositionAlignment.Statement : opt_position_alignment;
   this.hit_count_ = 0;
   this.active_ = true;
   this.condition_ = null;
@@ -276,7 +285,8 @@ function ScriptBreakPoint(type, script_id_or_name, opt_line, opt_column,
 //Creates a clone of script breakpoint that is linked to another script.
 ScriptBreakPoint.prototype.cloneForOtherScript = function (other_script) {
   var copy = new ScriptBreakPoint(Debug.ScriptBreakPointType.ScriptId,
-      other_script.id, this.line_, this.column_, this.groupId_);
+      other_script.id, this.line_, this.column_, this.groupId_,
+      this.position_alignment_);
   copy.number_ = next_break_point_number++;
   script_break_points.push(copy);
 
@@ -443,7 +453,9 @@ ScriptBreakPoint.prototype.set = function (script) {
   // Create a break point object and set the break point.
   break_point = MakeBreakPoint(position, this);
   break_point.setIgnoreCount(this.ignoreCount());
-  var actual_position = %SetScriptBreakPoint(script, position, break_point);
+  var actual_position = %SetScriptBreakPoint(script, position,
+                                             this.position_alignment_,
+                                             break_point);
   if (IS_UNDEFINED(actual_position)) {
     actual_position = position;
   }
@@ -509,9 +521,11 @@ Debug.breakExecution = function(f) {
   %Break();
 };
 
-Debug.breakLocations = function(f) {
+Debug.breakLocations = function(f, opt_position_aligment) {
   if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.');
-  return %GetBreakLocations(f);
+  var position_aligment = IS_UNDEFINED(opt_position_aligment)
+      ? Debug.BreakPositionAlignment.Statement : opt_position_aligment;
+  return %GetBreakLocations(f, position_aligment);
 };
 
 // Returns a Script object. If the parameter is a function the return value
@@ -674,7 +688,8 @@ Debug.setBreakPoint = function(func, opt_line, opt_column, opt_condition) {
 
 
 Debug.setBreakPointByScriptIdAndPosition = function(script_id, position,
-                                                    condition, enabled)
+                                                    condition, enabled,
+                                                    opt_position_alignment)
 {
   break_point = MakeBreakPoint(position);
   break_point.setCondition(condition);
@@ -682,10 +697,12 @@ Debug.setBreakPointByScriptIdAndPosition = function(script_id, position,
     break_point.disable();
   }
   var scripts = this.scripts();
+  var position_alignment = IS_UNDEFINED(opt_position_alignment)
+      ? Debug.BreakPositionAlignment.Statement : opt_position_alignment;
   for (var i = 0; i < scripts.length; i++) {
     if (script_id == scripts[i].id) {
       break_point.actual_position = %SetScriptBreakPoint(scripts[i], position,
-                                                         break_point);
+          position_alignment, break_point);
       break;
     }
   }
@@ -780,11 +797,11 @@ Debug.findScriptBreakPoint = function(break_point_number, remove) {
 // specified source line and column within that line.
 Debug.setScriptBreakPoint = function(type, script_id_or_name,
                                      opt_line, opt_column, opt_condition,
-                                     opt_groupId) {
+                                     opt_groupId, opt_position_alignment) {
   // Create script break point object.
   var script_break_point =
       new ScriptBreakPoint(type, script_id_or_name, opt_line, opt_column,
-                           opt_groupId);
+                           opt_groupId, opt_position_alignment);
 
   // Assign number to the new script break point and add it.
   script_break_point.number_ = next_break_point_number++;
@@ -806,10 +823,12 @@ Debug.setScriptBreakPoint = function(type, script_id_or_name,
 
 Debug.setScriptBreakPointById = function(script_id,
                                          opt_line, opt_column,
-                                         opt_condition, opt_groupId) {
+                                         opt_condition, opt_groupId,
+                                         opt_position_alignment) {
   return this.setScriptBreakPoint(Debug.ScriptBreakPointType.ScriptId,
                                   script_id, opt_line, opt_column,
-                                  opt_condition, opt_groupId);
+                                  opt_condition, opt_groupId,
+                                  opt_position_alignment);
 };
 
 
@@ -893,11 +912,11 @@ Debug.isBreakOnUncaughtException = function() {
   return !!%IsBreakOnException(Debug.ExceptionBreak.Uncaught);
 };
 
-Debug.showBreakPoints = function(f, full) {
+Debug.showBreakPoints = function(f, full, opt_position_alignment) {
   if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.');
   var source = full ? this.scriptSource(f) : this.source(f);
   var offset = full ? this.sourcePosition(f) : 0;
-  var locations = this.breakLocations(f);
+  var locations = this.breakLocations(f, opt_position_alignment);
   if (!locations) return source;
   locations.sort(function(x, y) { return x - y; });
   var result = "";
index 5d26ba2..07c1a0c 100644 (file)
@@ -235,17 +235,30 @@ void BreakLocationIterator::FindBreakLocationFromAddress(Address pc) {
 
 
 // Find the break point closest to the supplied source position.
-void BreakLocationIterator::FindBreakLocationFromPosition(int position) {
+void BreakLocationIterator::FindBreakLocationFromPosition(int position,
+    BreakPositionAlignment alignment) {
   // Run through all break points to locate the one closest to the source
   // position.
   int closest_break_point = 0;
   int distance = kMaxInt;
+
   while (!Done()) {
+    int next_position;
+    switch (alignment) {
+    case STATEMENT_ALIGNED:
+      next_position = this->statement_position();
+      break;
+    case BREAK_POSITION_ALIGNED:
+      next_position = this->position();
+      break;
+    default:
+      UNREACHABLE();
+      next_position = this->statement_position();
+    }
     // Check if this break point is closer that what was previously found.
-    if (position <= statement_position() &&
-        statement_position() - position < distance) {
+    if (position <= next_position && next_position - position < distance) {
       closest_break_point = break_point();
-      distance = statement_position() - position;
+      distance = next_position - position;
       // Check whether we can't get any closer.
       if (distance == 0) break;
     }
@@ -390,6 +403,20 @@ void BreakLocationIterator::ClearDebugBreak() {
 }
 
 
+bool BreakLocationIterator::IsStepInLocation(Isolate* isolate) {
+  if (RelocInfo::IsConstructCall(rmode())) {
+    return true;
+  } else if (RelocInfo::IsCodeTarget(rmode())) {
+    HandleScope scope(debug_info_->GetIsolate());
+    Address target = rinfo()->target_address();
+    Handle<Code> target_code(Code::GetCodeFromTargetAddress(target));
+    return target_code->is_call_stub() || target_code->is_keyed_call_stub();
+  } else {
+    return false;
+  }
+}
+
+
 void BreakLocationIterator::PrepareStepIn(Isolate* isolate) {
   HandleScope scope(isolate);
 
@@ -606,7 +633,7 @@ const int Debug::kFrameDropperFrameSize = 4;
 void ScriptCache::Add(Handle<Script> script) {
   GlobalHandles* global_handles = Isolate::Current()->global_handles();
   // Create an entry in the hash map for the script.
-  int id = Smi::cast(script->id())->value();
+  int id = script->id()->value();
   HashMap::Entry* entry =
       HashMap::Lookup(reinterpret_cast<void*>(id), Hash(id), true);
   if (entry->value != NULL) {
@@ -670,11 +697,11 @@ void ScriptCache::HandleWeakScript(v8::Isolate* isolate,
   ScriptCache* script_cache = reinterpret_cast<ScriptCache*>(data);
   // Find the location of the global handle.
   Script** location =
-      reinterpret_cast<Script**>(Utils::OpenHandle(**obj).location());
+      reinterpret_cast<Script**>(Utils::OpenPersistent(*obj).location());
   ASSERT((*location)->IsScript());
 
   // Remove the entry from the cache.
-  int id = Smi::cast((*location)->id())->value();
+  int id = (*location)->id()->value();
   script_cache->Remove(reinterpret_cast<void*>(id), Hash(id));
   script_cache->collected_scripts_.Add(id);
 
@@ -1176,7 +1203,7 @@ void Debug::SetBreakPoint(Handle<JSFunction> function,
 
   // Find the break point and change it.
   BreakLocationIterator it(debug_info, SOURCE_BREAK_LOCATIONS);
-  it.FindBreakLocationFromPosition(*source_position);
+  it.FindBreakLocationFromPosition(*source_position, STATEMENT_ALIGNED);
   it.SetBreakPoint(break_point_object);
 
   *source_position = it.position();
@@ -1188,7 +1215,8 @@ void Debug::SetBreakPoint(Handle<JSFunction> function,
 
 bool Debug::SetBreakPointForScript(Handle<Script> script,
                                    Handle<Object> break_point_object,
-                                   int* source_position) {
+                                   int* source_position,
+                                   BreakPositionAlignment alignment) {
   HandleScope scope(isolate_);
 
   PrepareForBreakPoints();
@@ -1219,7 +1247,7 @@ bool Debug::SetBreakPointForScript(Handle<Script> script,
 
   // Find the break point and change it.
   BreakLocationIterator it(debug_info, SOURCE_BREAK_LOCATIONS);
-  it.FindBreakLocationFromPosition(position);
+  it.FindBreakLocationFromPosition(position, alignment);
   it.SetBreakPoint(break_point_object);
 
   *source_position = it.position() + shared->start_position();
@@ -1673,7 +1701,8 @@ Handle<Code> Debug::FindDebugBreak(Handle<Code> code, RelocInfo::Mode mode) {
 
 // Simple function for returning the source positions for active break points.
 Handle<Object> Debug::GetSourceBreakLocations(
-    Handle<SharedFunctionInfo> shared) {
+    Handle<SharedFunctionInfo> shared,
+    BreakPositionAlignment position_alignment) {
   Isolate* isolate = Isolate::Current();
   Heap* heap = isolate->heap();
   if (!HasDebugInfo(shared)) {
@@ -1691,7 +1720,20 @@ Handle<Object> Debug::GetSourceBreakLocations(
       BreakPointInfo* break_point_info =
           BreakPointInfo::cast(debug_info->break_points()->get(i));
       if (break_point_info->GetBreakPointCount() > 0) {
-        locations->set(count++, break_point_info->statement_position());
+        Smi* position;
+        switch (position_alignment) {
+        case STATEMENT_ALIGNED:
+          position = break_point_info->statement_position();
+          break;
+        case BREAK_POSITION_ALIGNED:
+          position = break_point_info->source_position();
+          break;
+        default:
+          UNREACHABLE();
+          position = break_point_info->statement_position();
+        }
+
+        locations->set(count++, position);
       }
     }
   }
@@ -2046,13 +2088,30 @@ void Debug::PrepareForBreakPoints() {
         if (obj->IsJSFunction()) {
           JSFunction* function = JSFunction::cast(obj);
           SharedFunctionInfo* shared = function->shared();
-          if (shared->allows_lazy_compilation() &&
-              shared->script()->IsScript() &&
-              function->code()->kind() == Code::FUNCTION &&
-              !function->code()->has_debug_break_slots() &&
-              shared->code()->gc_metadata() != active_code_marker) {
+
+          if (!shared->allows_lazy_compilation()) continue;
+          if (!shared->script()->IsScript()) continue;
+          if (shared->code()->gc_metadata() == active_code_marker) continue;
+
+          Code::Kind kind = function->code()->kind();
+          if (kind == Code::FUNCTION &&
+              !function->code()->has_debug_break_slots()) {
             function->set_code(*lazy_compile);
             function->shared()->set_code(*lazy_compile);
+          } else if (kind == Code::BUILTIN &&
+              (function->IsMarkedForInstallingRecompiledCode() ||
+               function->IsInRecompileQueue() ||
+               function->IsMarkedForLazyRecompilation() ||
+               function->IsMarkedForParallelRecompilation())) {
+            // Abort in-flight compilation.
+            Code* shared_code = function->shared()->code();
+            if (shared_code->kind() == Code::FUNCTION &&
+                shared_code->has_debug_break_slots()) {
+              function->set_code(shared_code);
+            } else {
+              function->set_code(*lazy_compile);
+              function->shared()->set_code(*lazy_compile);
+            }
           }
         }
       }
@@ -3066,13 +3125,14 @@ void Debugger::NotifyMessageHandler(v8::DebugEvent event,
     v8::Local<v8::String> fun_name =
         v8::String::New("debugCommandProcessor");
     v8::Local<v8::Function> fun =
-        v8::Function::Cast(*api_exec_state->Get(fun_name));
+        v8::Local<v8::Function>::Cast(api_exec_state->Get(fun_name));
 
     v8::Handle<v8::Boolean> running =
         auto_continue ? v8::True() : v8::False();
     static const int kArgc = 1;
     v8::Handle<Value> argv[kArgc] = { running };
-    cmd_processor = v8::Object::Cast(*fun->Call(api_exec_state, kArgc, argv));
+    cmd_processor = v8::Local<v8::Object>::Cast(
+        fun->Call(api_exec_state, kArgc, argv));
     if (try_catch.HasCaught()) {
       PrintLn(try_catch.Exception());
       return;
@@ -3112,7 +3172,7 @@ void Debugger::NotifyMessageHandler(v8::DebugEvent event,
     v8::Local<v8::Value> request;
     v8::TryCatch try_catch;
     fun_name = v8::String::New("processDebugRequest");
-    fun = v8::Function::Cast(*cmd_processor->Get(fun_name));
+    fun = v8::Local<v8::Function>::Cast(cmd_processor->Get(fun_name));
 
     request = v8::String::New(command.text().start(),
                               command.text().length());
@@ -3125,7 +3185,7 @@ void Debugger::NotifyMessageHandler(v8::DebugEvent event,
     if (!try_catch.HasCaught()) {
       // Get response string.
       if (!response_val->IsUndefined()) {
-        response = v8::String::Cast(*response_val);
+        response = v8::Local<v8::String>::Cast(response_val);
       } else {
         response = v8::String::New("");
       }
@@ -3138,7 +3198,7 @@ void Debugger::NotifyMessageHandler(v8::DebugEvent event,
 
       // Get the running state.
       fun_name = v8::String::New("isRunning");
-      fun = v8::Function::Cast(*cmd_processor->Get(fun_name));
+      fun = v8::Local<v8::Function>::Cast(cmd_processor->Get(fun_name));
       static const int kArgc = 1;
       v8::Handle<Value> argv[kArgc] = { response };
       v8::Local<v8::Value> running_val = fun->Call(cmd_processor, kArgc, argv);
index 467acb9..67debc7 100644 (file)
@@ -79,6 +79,14 @@ enum BreakLocatorType {
 };
 
 
+// The different types of breakpoint position alignments.
+// Must match Debug.BreakPositionAlignment in debug-debugger.js
+enum BreakPositionAlignment {
+  STATEMENT_ALIGNED = 0,
+  BREAK_POSITION_ALIGNED = 1
+};
+
+
 // Class for iterating through the break points in a function and changing
 // them.
 class BreakLocationIterator {
@@ -90,13 +98,15 @@ class BreakLocationIterator {
   void Next();
   void Next(int count);
   void FindBreakLocationFromAddress(Address pc);
-  void FindBreakLocationFromPosition(int position);
+  void FindBreakLocationFromPosition(int position,
+      BreakPositionAlignment alignment);
   void Reset();
   bool Done() const;
   void SetBreakPoint(Handle<Object> break_point_object);
   void ClearBreakPoint(Handle<Object> break_point_object);
   void SetOneShot();
   void ClearOneShot();
+  bool IsStepInLocation(Isolate* isolate);
   void PrepareStepIn(Isolate* isolate);
   bool IsExit() const;
   bool HasBreakPoint();
@@ -240,7 +250,8 @@ class Debug {
                      int* source_position);
   bool SetBreakPointForScript(Handle<Script> script,
                               Handle<Object> break_point_object,
-                              int* source_position);
+                              int* source_position,
+                              BreakPositionAlignment alignment);
   void ClearBreakPoint(Handle<Object> break_point_object);
   void ClearAllBreakPoints();
   void FloodWithOneShot(Handle<JSFunction> function);
@@ -283,7 +294,8 @@ class Debug {
   static Handle<Code> FindDebugBreak(Handle<Code> code, RelocInfo::Mode mode);
 
   static Handle<Object> GetSourceBreakLocations(
-      Handle<SharedFunctionInfo> shared);
+      Handle<SharedFunctionInfo> shared,
+      BreakPositionAlignment position_aligment);
 
   // Getter for the debug_context.
   inline Handle<Context> debug_context() { return debug_context_; }
index 723d3f6..f322e85 100644 (file)
@@ -284,7 +284,7 @@ void Deoptimizer::GenerateDeoptimizationEntries(MacroAssembler* masm,
 void Deoptimizer::VisitAllOptimizedFunctionsForContext(
     Context* context, OptimizedFunctionVisitor* visitor) {
   Isolate* isolate = context->GetIsolate();
-  ZoneScope zone_scope(isolate->runtime_zone(), DELETE_ON_EXIT);
+  Zone zone(isolate);
   DisallowHeapAllocation no_allocation;
 
   ASSERT(context->IsNativeContext());
@@ -293,11 +293,11 @@ void Deoptimizer::VisitAllOptimizedFunctionsForContext(
 
   // Create a snapshot of the optimized functions list. This is needed because
   // visitors might remove more than one link from the list at once.
-  ZoneList<JSFunction*> snapshot(1, isolate->runtime_zone());
+  ZoneList<JSFunction*> snapshot(1, &zone);
   Object* element = context->OptimizedFunctionsListHead();
   while (!element->IsUndefined()) {
     JSFunction* element_function = JSFunction::cast(element);
-    snapshot.Add(element_function, isolate->runtime_zone());
+    snapshot.Add(element_function, &zone);
     element = element_function->next_function_link();
   }
 
@@ -420,11 +420,10 @@ void Deoptimizer::DeoptimizeFunction(JSFunction* function) {
   Context* context = function->context()->native_context();
   Isolate* isolate = context->GetIsolate();
   Object* undefined = isolate->heap()->undefined_value();
-  Zone* zone = isolate->runtime_zone();
-  ZoneScope zone_scope(zone, DELETE_ON_EXIT);
-  ZoneList<Code*> codes(1, zone);
+  Zone zone(isolate);
+  ZoneList<Code*> codes(1, &zone);
   DeoptimizeWithMatchingCodeFilter filter(code);
-  PartitionOptimizedFunctions(context, &filter, &codes, zone, undefined);
+  PartitionOptimizedFunctions(context, &filter, &codes, &zone, undefined);
   ASSERT_EQ(1, codes.length());
   DeoptimizeFunctionWithPreparedFunctionList(
       JSFunction::cast(codes.at(0)->deoptimizing_functions()));
@@ -437,10 +436,9 @@ void Deoptimizer::DeoptimizeAllFunctionsForContext(
   ASSERT(context->IsNativeContext());
   Isolate* isolate = context->GetIsolate();
   Object* undefined = isolate->heap()->undefined_value();
-  Zone* zone = isolate->runtime_zone();
-  ZoneScope zone_scope(zone, DELETE_ON_EXIT);
-  ZoneList<Code*> codes(1, zone);
-  PartitionOptimizedFunctions(context, filter, &codes, zone, undefined);
+  Zone zone(isolate);
+  ZoneList<Code*> codes(1, &zone);
+  PartitionOptimizedFunctions(context, filter, &codes, &zone, undefined);
   for (int i = 0; i < codes.length(); ++i) {
     DeoptimizeFunctionWithPreparedFunctionList(
         JSFunction::cast(codes.at(i)->deoptimizing_functions()));
@@ -534,8 +532,9 @@ Deoptimizer::Deoptimizer(Isolate* isolate,
       output_count_(0),
       jsframe_count_(0),
       output_(NULL),
-      deferred_arguments_objects_values_(0),
-      deferred_arguments_objects_(0),
+      deferred_objects_tagged_values_(0),
+      deferred_objects_double_values_(0),
+      deferred_objects_(0),
       deferred_heap_numbers_(0),
       trace_(false) {
   // For COMPILED_STUBs called from builtins, the function pointer is a SMI
@@ -546,6 +545,7 @@ Deoptimizer::Deoptimizer(Isolate* isolate,
   if (function != NULL && function->IsOptimized()) {
     function->shared()->increment_deopt_count();
     if (bailout_type_ == Deoptimizer::SOFT) {
+      isolate->counters()->soft_deopts_executed()->Increment();
       // Soft deopts shouldn't count against the overall re-optimization count
       // that can eventually lead to disabling optimization for a function.
       int opt_count = function->shared()->opt_count();
@@ -714,6 +714,10 @@ void Deoptimizer::DoComputeOutputFrames() {
 
   // Print some helpful diagnostic information.
   int64_t start = OS::Ticks();
+  if (FLAG_log_timer_events &&
+      compiled_code_->kind() == Code::OPTIMIZED_FUNCTION) {
+    LOG(isolate(), CodeDeoptEvent(compiled_code_));
+  }
   if (trace_) {
     PrintF("[deoptimizing (DEOPT %s): begin 0x%08" V8PRIxPTR " ",
            MessageFor(bailout_type_),
@@ -787,7 +791,6 @@ void Deoptimizer::DoComputeOutputFrames() {
       case Translation::DOUBLE_STACK_SLOT:
       case Translation::LITERAL:
       case Translation::ARGUMENTS_OBJECT:
-      case Translation::DUPLICATE:
       default:
         UNREACHABLE();
         break;
@@ -1510,8 +1513,8 @@ void Deoptimizer::DoComputeCompiledStubFrame(TranslationIterator* iterator,
   }
 
   output_frame_offset -= kPointerSize;
-  value = frame_ptr - (output_frame_size - output_frame_offset) -
-      StandardFrameConstants::kMarkerOffset + kPointerSize;
+  value = frame_ptr + StandardFrameConstants::kCallerSPOffset -
+      (output_frame_size - output_frame_offset) + kPointerSize;
   output_frame->SetFrameSlot(output_frame_offset, value);
   if (trace_) {
     PrintF("    0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
@@ -1566,15 +1569,14 @@ void Deoptimizer::DoComputeCompiledStubFrame(TranslationIterator* iterator,
 void Deoptimizer::MaterializeHeapObjects(JavaScriptFrameIterator* it) {
   ASSERT_NE(DEBUGGER, bailout_type_);
 
-  // Handlify all argument object values before triggering any allocation.
-  List<Handle<Object> > values(deferred_arguments_objects_values_.length());
-  for (int i = 0; i < deferred_arguments_objects_values_.length(); ++i) {
-    values.Add(Handle<Object>(deferred_arguments_objects_values_[i],
-                              isolate_));
+  // Handlify all tagged object values before triggering any allocation.
+  List<Handle<Object> > values(deferred_objects_tagged_values_.length());
+  for (int i = 0; i < deferred_objects_tagged_values_.length(); ++i) {
+    values.Add(Handle<Object>(deferred_objects_tagged_values_[i], isolate_));
   }
 
   // Play it safe and clear all unhandlified values before we continue.
-  deferred_arguments_objects_values_.Clear();
+  deferred_objects_tagged_values_.Clear();
 
   // Materialize all heap numbers before looking at arguments because when the
   // output frames are used to materialize arguments objects later on they need
@@ -1591,6 +1593,18 @@ void Deoptimizer::MaterializeHeapObjects(JavaScriptFrameIterator* it) {
     Memory::Object_at(d.slot_address()) = *num;
   }
 
+  // Materialize all heap numbers required for arguments objects.
+  for (int i = 0; i < values.length(); i++) {
+    if (!values.at(i)->IsTheHole()) continue;
+    double double_value = deferred_objects_double_values_[i];
+    Handle<Object> num = isolate_->factory()->NewNumber(double_value);
+    if (trace_) {
+      PrintF("Materializing a new heap number %p [%e] for arguments object\n",
+             reinterpret_cast<void*>(*num), double_value);
+    }
+    values.Set(i, num);
+  }
+
   // Materialize arguments objects one frame at a time.
   for (int frame_index = 0; frame_index < jsframe_count(); ++frame_index) {
     if (frame_index != 0) it->Advance();
@@ -1599,9 +1613,9 @@ void Deoptimizer::MaterializeHeapObjects(JavaScriptFrameIterator* it) {
     Handle<JSObject> arguments;
     for (int i = frame->ComputeExpressionsCount() - 1; i >= 0; --i) {
       if (frame->GetExpression(i) == isolate_->heap()->arguments_marker()) {
-        ArgumentsObjectMaterializationDescriptor descriptor =
-            deferred_arguments_objects_.RemoveLast();
-        const int length = descriptor.arguments_length();
+        ObjectMaterializationDescriptor descriptor =
+            deferred_objects_.RemoveLast();
+        const int length = descriptor.object_length();
         if (arguments.is_null()) {
           if (frame->has_adapted_arguments()) {
             // Use the arguments adapter frame we just built to materialize the
@@ -1695,7 +1709,7 @@ void Deoptimizer::MaterializeHeapNumbersForDebuggerInspectableFrame(
 #endif
 
 
-static const char* TraceValueType(bool is_smi, bool is_native) {
+static const char* TraceValueType(bool is_smi, bool is_native = false) {
   if (is_native) {
     return "native";
   } else if (is_smi) {
@@ -1706,6 +1720,197 @@ static const char* TraceValueType(bool is_smi, bool is_native) {
 }
 
 
+void Deoptimizer::DoTranslateObject(TranslationIterator* iterator,
+                                    int object_opcode,
+                                    int field_index) {
+  disasm::NameConverter converter;
+  Address object_slot = deferred_objects_.last().slot_address();
+
+  Translation::Opcode opcode =
+      static_cast<Translation::Opcode>(iterator->Next());
+
+  switch (opcode) {
+    case Translation::BEGIN:
+    case Translation::JS_FRAME:
+    case Translation::ARGUMENTS_ADAPTOR_FRAME:
+    case Translation::CONSTRUCT_STUB_FRAME:
+    case Translation::GETTER_STUB_FRAME:
+    case Translation::SETTER_STUB_FRAME:
+    case Translation::COMPILED_STUB_FRAME:
+    case Translation::ARGUMENTS_OBJECT:
+      UNREACHABLE();
+      return;
+
+    case Translation::REGISTER: {
+      int input_reg = iterator->Next();
+      intptr_t input_value = input_->GetRegister(input_reg);
+      if (trace_) {
+        PrintF("      object @0x%08" V8PRIxPTR ": [field #%d] <- ",
+               reinterpret_cast<intptr_t>(object_slot),
+               field_index);
+        PrintF("0x%08" V8PRIxPTR " ; %s ", input_value,
+               converter.NameOfCPURegister(input_reg));
+        reinterpret_cast<Object*>(input_value)->ShortPrint();
+        PrintF("\n");
+      }
+      AddObjectTaggedValue(input_value);
+      return;
+    }
+
+    case Translation::INT32_REGISTER: {
+      int input_reg = iterator->Next();
+      intptr_t value = input_->GetRegister(input_reg);
+      bool is_smi = Smi::IsValid(value);
+      if (trace_) {
+        PrintF("      object @0x%08" V8PRIxPTR ": [field #%d] <- ",
+               reinterpret_cast<intptr_t>(object_slot),
+               field_index);
+        PrintF("%" V8PRIdPTR " ; %s (%s)\n", value,
+               converter.NameOfCPURegister(input_reg),
+               TraceValueType(is_smi));
+      }
+      if (is_smi) {
+        intptr_t tagged_value =
+            reinterpret_cast<intptr_t>(Smi::FromInt(static_cast<int>(value)));
+        AddObjectTaggedValue(tagged_value);
+      } else {
+        double double_value = static_cast<double>(static_cast<int32_t>(value));
+        AddObjectDoubleValue(double_value);
+      }
+      return;
+    }
+
+    case Translation::UINT32_REGISTER: {
+      int input_reg = iterator->Next();
+      uintptr_t value = static_cast<uintptr_t>(input_->GetRegister(input_reg));
+      bool is_smi = (value <= static_cast<uintptr_t>(Smi::kMaxValue));
+      if (trace_) {
+        PrintF("      object @0x%08" V8PRIxPTR ": [field #%d] <- ",
+               reinterpret_cast<intptr_t>(object_slot),
+               field_index);
+        PrintF("%" V8PRIdPTR " ; uint %s (%s)\n", value,
+               converter.NameOfCPURegister(input_reg),
+               TraceValueType(is_smi));
+      }
+      if (is_smi) {
+        intptr_t tagged_value =
+            reinterpret_cast<intptr_t>(Smi::FromInt(static_cast<int>(value)));
+        AddObjectTaggedValue(tagged_value);
+      } else {
+        double double_value = static_cast<double>(static_cast<uint32_t>(value));
+        AddObjectDoubleValue(double_value);
+      }
+      return;
+    }
+
+    case Translation::DOUBLE_REGISTER: {
+      int input_reg = iterator->Next();
+      double value = input_->GetDoubleRegister(input_reg);
+      if (trace_) {
+        PrintF("      object @0x%08" V8PRIxPTR ": [field #%d] <- ",
+               reinterpret_cast<intptr_t>(object_slot),
+               field_index);
+        PrintF("%e ; %s\n", value,
+               DoubleRegister::AllocationIndexToString(input_reg));
+      }
+      AddObjectDoubleValue(value);
+      return;
+    }
+
+    case Translation::STACK_SLOT: {
+      int input_slot_index = iterator->Next();
+      unsigned input_offset = input_->GetOffsetFromSlotIndex(input_slot_index);
+      intptr_t input_value = input_->GetFrameSlot(input_offset);
+      if (trace_) {
+        PrintF("      object @0x%08" V8PRIxPTR ": [field #%d] <- ",
+               reinterpret_cast<intptr_t>(object_slot),
+               field_index);
+        PrintF("0x%08" V8PRIxPTR " ; [sp + %d] ", input_value, input_offset);
+        reinterpret_cast<Object*>(input_value)->ShortPrint();
+        PrintF("\n");
+      }
+      AddObjectTaggedValue(input_value);
+      return;
+    }
+
+    case Translation::INT32_STACK_SLOT: {
+      int input_slot_index = iterator->Next();
+      unsigned input_offset = input_->GetOffsetFromSlotIndex(input_slot_index);
+      intptr_t value = input_->GetFrameSlot(input_offset);
+      bool is_smi = Smi::IsValid(value);
+      if (trace_) {
+        PrintF("      object @0x%08" V8PRIxPTR ": [field #%d] <- ",
+               reinterpret_cast<intptr_t>(object_slot),
+               field_index);
+        PrintF("%" V8PRIdPTR " ; [sp + %d] (%s)\n",
+               value, input_offset, TraceValueType(is_smi));
+      }
+      if (is_smi) {
+        intptr_t tagged_value =
+            reinterpret_cast<intptr_t>(Smi::FromInt(static_cast<int>(value)));
+        AddObjectTaggedValue(tagged_value);
+      } else {
+        double double_value = static_cast<double>(static_cast<int32_t>(value));
+        AddObjectDoubleValue(double_value);
+      }
+      return;
+    }
+
+    case Translation::UINT32_STACK_SLOT: {
+      int input_slot_index = iterator->Next();
+      unsigned input_offset = input_->GetOffsetFromSlotIndex(input_slot_index);
+      uintptr_t value =
+          static_cast<uintptr_t>(input_->GetFrameSlot(input_offset));
+      bool is_smi = (value <= static_cast<uintptr_t>(Smi::kMaxValue));
+      if (trace_) {
+        PrintF("      object @0x%08" V8PRIxPTR ": [field #%d] <- ",
+               reinterpret_cast<intptr_t>(object_slot),
+               field_index);
+        PrintF("%" V8PRIdPTR " ; [sp + %d] (uint %s)\n",
+               value, input_offset, TraceValueType(is_smi));
+      }
+      if (is_smi) {
+        intptr_t tagged_value =
+            reinterpret_cast<intptr_t>(Smi::FromInt(static_cast<int>(value)));
+        AddObjectTaggedValue(tagged_value);
+      } else {
+        double double_value = static_cast<double>(static_cast<uint32_t>(value));
+        AddObjectDoubleValue(double_value);
+      }
+      return;
+    }
+
+    case Translation::DOUBLE_STACK_SLOT: {
+      int input_slot_index = iterator->Next();
+      unsigned input_offset = input_->GetOffsetFromSlotIndex(input_slot_index);
+      double value = input_->GetDoubleFrameSlot(input_offset);
+      if (trace_) {
+        PrintF("      object @0x%08" V8PRIxPTR ": [field #%d] <- ",
+               reinterpret_cast<intptr_t>(object_slot),
+               field_index);
+        PrintF("%e ; [sp + %d]\n", value, input_offset);
+      }
+      AddObjectDoubleValue(value);
+      return;
+    }
+
+    case Translation::LITERAL: {
+      Object* literal = ComputeLiteral(iterator->Next());
+      if (trace_) {
+        PrintF("      object @0x%08" V8PRIxPTR ": [field #%d] <- ",
+               reinterpret_cast<intptr_t>(object_slot),
+               field_index);
+        literal->ShortPrint();
+        PrintF(" ; literal\n");
+      }
+      intptr_t value = reinterpret_cast<intptr_t>(literal);
+      AddObjectTaggedValue(value);
+      return;
+    }
+  }
+}
+
+
 void Deoptimizer::DoTranslateCommand(TranslationIterator* iterator,
     int frame_index,
     unsigned output_offset,
@@ -1715,14 +1920,8 @@ void Deoptimizer::DoTranslateCommand(TranslationIterator* iterator,
   const intptr_t kPlaceholder = reinterpret_cast<intptr_t>(Smi::FromInt(0));
   bool is_native = value_type == TRANSLATED_VALUE_IS_NATIVE;
 
-  // Ignore commands marked as duplicate and act on the first non-duplicate.
   Translation::Opcode opcode =
       static_cast<Translation::Opcode>(iterator->Next());
-  while (opcode == Translation::DUPLICATE) {
-    opcode = static_cast<Translation::Opcode>(iterator->Next());
-    iterator->Skip(Translation::NumberOfOperandsFor(opcode));
-    opcode = static_cast<Translation::Opcode>(iterator->Next());
-  }
 
   switch (opcode) {
     case Translation::BEGIN:
@@ -1732,7 +1931,6 @@ void Deoptimizer::DoTranslateCommand(TranslationIterator* iterator,
     case Translation::GETTER_STUB_FRAME:
     case Translation::SETTER_STUB_FRAME:
     case Translation::COMPILED_STUB_FRAME:
-    case Translation::DUPLICATE:
       UNREACHABLE();
       return;
 
@@ -1758,7 +1956,6 @@ void Deoptimizer::DoTranslateCommand(TranslationIterator* iterator,
       intptr_t value = input_->GetRegister(input_reg);
       bool is_smi = (value_type == TRANSLATED_VALUE_IS_TAGGED) &&
           Smi::IsValid(value);
-
       if (trace_) {
         PrintF(
             "    0x%08" V8PRIxPTR ": [top + %d] <- %" V8PRIdPTR " ; %s (%s)\n",
@@ -1836,8 +2033,7 @@ void Deoptimizer::DoTranslateCommand(TranslationIterator* iterator,
 
     case Translation::STACK_SLOT: {
       int input_slot_index = iterator->Next();
-      unsigned input_offset =
-          input_->GetOffsetFromSlotIndex(input_slot_index);
+      unsigned input_offset = input_->GetOffsetFromSlotIndex(input_slot_index);
       intptr_t input_value = input_->GetFrameSlot(input_offset);
       if (trace_) {
         PrintF("    0x%08" V8PRIxPTR ": ",
@@ -1855,8 +2051,7 @@ void Deoptimizer::DoTranslateCommand(TranslationIterator* iterator,
 
     case Translation::INT32_STACK_SLOT: {
       int input_slot_index = iterator->Next();
-      unsigned input_offset =
-          input_->GetOffsetFromSlotIndex(input_slot_index);
+      unsigned input_offset = input_->GetOffsetFromSlotIndex(input_slot_index);
       intptr_t value = input_->GetFrameSlot(input_offset);
       bool is_smi = (value_type == TRANSLATED_VALUE_IS_TAGGED) &&
           Smi::IsValid(value);
@@ -1888,8 +2083,7 @@ void Deoptimizer::DoTranslateCommand(TranslationIterator* iterator,
 
     case Translation::UINT32_STACK_SLOT: {
       int input_slot_index = iterator->Next();
-      unsigned input_offset =
-          input_->GetOffsetFromSlotIndex(input_slot_index);
+      unsigned input_offset = input_->GetOffsetFromSlotIndex(input_slot_index);
       uintptr_t value =
           static_cast<uintptr_t>(input_->GetFrameSlot(input_offset));
       bool is_smi = (value_type == TRANSLATED_VALUE_IS_TAGGED) &&
@@ -1922,8 +2116,7 @@ void Deoptimizer::DoTranslateCommand(TranslationIterator* iterator,
 
     case Translation::DOUBLE_STACK_SLOT: {
       int input_slot_index = iterator->Next();
-      unsigned input_offset =
-          input_->GetOffsetFromSlotIndex(input_slot_index);
+      unsigned input_offset = input_->GetOffsetFromSlotIndex(input_slot_index);
       double value = input_->GetDoubleFrameSlot(input_offset);
       if (trace_) {
         PrintF("    0x%08" V8PRIxPTR ": [top + %d] <- %e ; [sp + %d]\n",
@@ -1954,31 +2147,24 @@ void Deoptimizer::DoTranslateCommand(TranslationIterator* iterator,
     }
 
     case Translation::ARGUMENTS_OBJECT: {
-      bool args_known = iterator->Next();
-      int args_index = iterator->Next() + 1;  // Skip receiver.
-      int args_length = iterator->Next() - 1;  // Skip receiver.
+      int length = iterator->Next();
       if (trace_) {
         PrintF("    0x%08" V8PRIxPTR ": [top + %d] <- ",
                output_[frame_index]->GetTop() + output_offset,
                output_offset);
         isolate_->heap()->arguments_marker()->ShortPrint();
-        PrintF(" ; %sarguments object\n", args_known ? "" : "dummy ");
+        PrintF(" ; arguments object (length = %d)\n", length);
       }
       // Use the arguments marker value as a sentinel and fill in the arguments
       // object after the deoptimized frame is built.
       intptr_t value = reinterpret_cast<intptr_t>(
           isolate_->heap()->arguments_marker());
-      AddArgumentsObject(
-          output_[frame_index]->GetTop() + output_offset, args_length);
+      AddObjectStart(output_[frame_index]->GetTop() + output_offset, length);
       output_[frame_index]->SetFrameSlot(output_offset, value);
-      // We save the tagged argument values on the side and materialize the
-      // actual arguments object after the deoptimized frame is built.
-      for (int i = 0; i < args_length; i++) {
-        unsigned input_offset = input_->GetOffsetFromSlotIndex(args_index + i);
-        intptr_t input_value = args_known
-            ? input_->GetFrameSlot(input_offset)
-            : reinterpret_cast<intptr_t>(isolate_->heap()->the_hole_value());
-        AddArgumentsObjectValue(input_value);
+      // We save the argument values on the side and materialize the actual
+      // arguments object after the deoptimized frame is built.
+      for (int i = 0; i < length; i++) {
+        DoTranslateObject(iterator, Translation::ARGUMENTS_OBJECT, i);
       }
       return;
     }
@@ -1998,10 +2184,6 @@ bool Deoptimizer::DoOsrTranslateCommand(TranslationIterator* iterator,
 
   Translation::Opcode opcode =
       static_cast<Translation::Opcode>(iterator->Next());
-  bool duplicate = (opcode == Translation::DUPLICATE);
-  if (duplicate) {
-    opcode = static_cast<Translation::Opcode>(iterator->Next());
-  }
 
   switch (opcode) {
     case Translation::BEGIN:
@@ -2011,21 +2193,20 @@ bool Deoptimizer::DoOsrTranslateCommand(TranslationIterator* iterator,
     case Translation::GETTER_STUB_FRAME:
     case Translation::SETTER_STUB_FRAME:
     case Translation::COMPILED_STUB_FRAME:
-    case Translation::DUPLICATE:
       UNREACHABLE();  // Malformed input.
-       return false;
-
-     case Translation::REGISTER: {
-       int output_reg = iterator->Next();
-       if (FLAG_trace_osr) {
-         PrintF("    %s <- 0x%08" V8PRIxPTR " ; [sp + %d]\n",
-                converter.NameOfCPURegister(output_reg),
-                input_value,
-                *input_offset);
-       }
-       output->SetRegister(output_reg, input_value);
-       break;
-     }
+      return false;
+
+    case Translation::REGISTER: {
+      int output_reg = iterator->Next();
+      if (FLAG_trace_osr) {
+        PrintF("    %s <- 0x%08" V8PRIxPTR " ; [sp + %d]\n",
+               converter.NameOfCPURegister(output_reg),
+               input_value,
+               *input_offset);
+      }
+      output->SetRegister(output_reg, input_value);
+      break;
+    }
 
     case Translation::INT32_REGISTER: {
       int32_t int32_value = 0;
@@ -2170,7 +2351,7 @@ bool Deoptimizer::DoOsrTranslateCommand(TranslationIterator* iterator,
     }
   }
 
-  if (!duplicate) *input_offset -= kPointerSize;
+  *input_offset -= kPointerSize;
   return true;
 }
 
@@ -2231,6 +2412,7 @@ void Deoptimizer::RevertInterruptCode(Code* unoptimized_code,
     back_edge_cursor += FullCodeGenerator::kBackEdgeEntrySize;
   }
   unoptimized_code->set_back_edges_patched_for_osr(false);
+  unoptimized_code->set_allow_osr_at_loop_nesting_level(0);
 #ifdef DEBUG
   // Assert that none of the back edges are patched anymore.
   Deoptimizer::VerifyInterruptCode(
@@ -2324,15 +2506,22 @@ Object* Deoptimizer::ComputeLiteral(int index) const {
 }
 
 
-void Deoptimizer::AddArgumentsObject(intptr_t slot_address, int argc) {
-  ArgumentsObjectMaterializationDescriptor object_desc(
-      reinterpret_cast<Address>(slot_address), argc);
-  deferred_arguments_objects_.Add(object_desc);
+void Deoptimizer::AddObjectStart(intptr_t slot_address, int length) {
+  ObjectMaterializationDescriptor object_desc(
+      reinterpret_cast<Address>(slot_address), length);
+  deferred_objects_.Add(object_desc);
 }
 
 
-void Deoptimizer::AddArgumentsObjectValue(intptr_t value) {
-  deferred_arguments_objects_values_.Add(reinterpret_cast<Object*>(value));
+void Deoptimizer::AddObjectTaggedValue(intptr_t value) {
+  deferred_objects_tagged_values_.Add(reinterpret_cast<Object*>(value));
+  deferred_objects_double_values_.Add(isolate()->heap()->nan_value()->value());
+}
+
+
+void Deoptimizer::AddObjectDoubleValue(double value) {
+  deferred_objects_tagged_values_.Add(isolate()->heap()->the_hole_value());
+  deferred_objects_double_values_.Add(value);
 }
 
 
@@ -2556,6 +2745,12 @@ void Translation::BeginCompiledStubFrame() {
 }
 
 
+void Translation::BeginArgumentsObject(int args_length) {
+  buffer_->Add(ARGUMENTS_OBJECT, zone());
+  buffer_->Add(args_length, zone());
+}
+
+
 void Translation::StoreRegister(Register reg) {
   buffer_->Add(REGISTER, zone());
   buffer_->Add(reg.code(), zone());
@@ -2620,17 +2815,11 @@ void Translation::StoreArgumentsObject(bool args_known,
 }
 
 
-void Translation::MarkDuplicate() {
-  buffer_->Add(DUPLICATE, zone());
-}
-
-
 int Translation::NumberOfOperandsFor(Opcode opcode) {
   switch (opcode) {
-    case DUPLICATE:
-      return 0;
     case GETTER_STUB_FRAME:
     case SETTER_STUB_FRAME:
+    case ARGUMENTS_OBJECT:
     case REGISTER:
     case INT32_REGISTER:
     case UINT32_REGISTER:
@@ -2647,7 +2836,6 @@ int Translation::NumberOfOperandsFor(Opcode opcode) {
     case CONSTRUCT_STUB_FRAME:
       return 2;
     case JS_FRAME:
-    case ARGUMENTS_OBJECT:
       return 3;
   }
   UNREACHABLE();
@@ -2693,8 +2881,6 @@ const char* Translation::StringFor(Opcode opcode) {
       return "LITERAL";
     case ARGUMENTS_OBJECT:
       return "ARGUMENTS_OBJECT";
-    case DUPLICATE:
-      return "DUPLICATE";
   }
   UNREACHABLE();
   return "";
@@ -2746,7 +2932,6 @@ SlotRef SlotRef::ComputeSlotForNextArgument(TranslationIterator* iterator,
     case Translation::INT32_REGISTER:
     case Translation::UINT32_REGISTER:
     case Translation::DOUBLE_REGISTER:
-    case Translation::DUPLICATE:
       // We are at safepoint which corresponds to call.  All registers are
       // saved by caller so there would be no live registers at this
       // point. Thus these translation commands should not be used.
index 5569f7f..d28be23 100644 (file)
@@ -75,17 +75,17 @@ class HeapNumberMaterializationDescriptor BASE_EMBEDDED {
 };
 
 
-class ArgumentsObjectMaterializationDescriptor BASE_EMBEDDED {
+class ObjectMaterializationDescriptor BASE_EMBEDDED {
  public:
-  ArgumentsObjectMaterializationDescriptor(Address slot_address, int argc)
-      : slot_address_(slot_address), arguments_length_(argc) { }
+  ObjectMaterializationDescriptor(Address slot_address, int length)
+      : slot_address_(slot_address), object_length_(length) { }
 
   Address slot_address() const { return slot_address_; }
-  int arguments_length() const { return arguments_length_; }
+  int object_length() const { return object_length_; }
 
  private:
   Address slot_address_;
-  int arguments_length_;
+  int object_length_;
 };
 
 
@@ -369,6 +369,10 @@ class Deoptimizer : public Malloced {
   void DoComputeCompiledStubFrame(TranslationIterator* iterator,
                                   int frame_index);
 
+  void DoTranslateObject(TranslationIterator* iterator,
+                         int object_opcode,
+                         int field_index);
+
   enum DeoptimizerTranslatedValueType {
     TRANSLATED_VALUE_IS_NATIVE,
     TRANSLATED_VALUE_IS_TAGGED
@@ -394,8 +398,9 @@ class Deoptimizer : public Malloced {
 
   Object* ComputeLiteral(int index) const;
 
-  void AddArgumentsObject(intptr_t slot_address, int argc);
-  void AddArgumentsObjectValue(intptr_t value);
+  void AddObjectStart(intptr_t slot_address, int argc);
+  void AddObjectTaggedValue(intptr_t value);
+  void AddObjectDoubleValue(double value);
   void AddDoubleValue(intptr_t slot_address, double value);
 
   static void GenerateDeoptimizationEntries(
@@ -446,8 +451,9 @@ class Deoptimizer : public Malloced {
   // Array of output frame descriptions.
   FrameDescription** output_;
 
-  List<Object*> deferred_arguments_objects_values_;
-  List<ArgumentsObjectMaterializationDescriptor> deferred_arguments_objects_;
+  List<Object*> deferred_objects_tagged_values_;
+  List<double> deferred_objects_double_values_;
+  List<ObjectMaterializationDescriptor> deferred_objects_;
   List<HeapNumberMaterializationDescriptor> deferred_heap_numbers_;
 #ifdef DEBUG
   DisallowHeapAllocation* disallow_heap_allocation_;
@@ -698,6 +704,7 @@ class Translation BASE_EMBEDDED {
     SETTER_STUB_FRAME,
     ARGUMENTS_ADAPTOR_FRAME,
     COMPILED_STUB_FRAME,
+    ARGUMENTS_OBJECT,
     REGISTER,
     INT32_REGISTER,
     UINT32_REGISTER,
@@ -706,12 +713,7 @@ class Translation BASE_EMBEDDED {
     INT32_STACK_SLOT,
     UINT32_STACK_SLOT,
     DOUBLE_STACK_SLOT,
-    LITERAL,
-    ARGUMENTS_OBJECT,
-
-    // A prefix indicating that the next command is a duplicate of the one
-    // that follows it.
-    DUPLICATE
+    LITERAL
   };
 
   Translation(TranslationBuffer* buffer, int frame_count, int jsframe_count,
@@ -733,6 +735,7 @@ class Translation BASE_EMBEDDED {
   void BeginConstructStubFrame(int literal_id, unsigned height);
   void BeginGetterStubFrame(int literal_id);
   void BeginSetterStubFrame(int literal_id);
+  void BeginArgumentsObject(int args_length);
   void StoreRegister(Register reg);
   void StoreInt32Register(Register reg);
   void StoreUint32Register(Register reg);
@@ -743,7 +746,6 @@ class Translation BASE_EMBEDDED {
   void StoreDoubleStackSlot(int index);
   void StoreLiteral(int literal_id);
   void StoreArgumentsObject(bool args_known, int args_index, int args_length);
-  void MarkDuplicate();
 
   Zone* zone() const { return zone_; }
 
index 3cdbf63..c6bf63d 100644 (file)
@@ -253,7 +253,7 @@ class StackGuard {
   void EnableInterrupts();
   void DisableInterrupts();
 
-#ifdef V8_TARGET_ARCH_X64
+#if V8_TARGET_ARCH_X64
   static const uintptr_t kInterruptLimit = V8_UINT64_C(0xfffffffffffffffe);
   static const uintptr_t kIllegalLimit = V8_UINT64_C(0xfffffffffffffff8);
 #else
diff --git a/deps/v8/src/extensions/i18n/break-iterator.cc b/deps/v8/src/extensions/i18n/break-iterator.cc
new file mode 100644 (file)
index 0000000..1225360
--- /dev/null
@@ -0,0 +1,331 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "break-iterator.h"
+
+#include <string.h>
+
+#include "i18n-utils.h"
+#include "unicode/brkiter.h"
+#include "unicode/locid.h"
+#include "unicode/rbbi.h"
+
+namespace v8_i18n {
+
+static v8::Handle<v8::Value> ThrowUnexpectedObjectError();
+static icu::UnicodeString* ResetAdoptedText(v8::Handle<v8::Object>,
+                                            v8::Handle<v8::Value>);
+static icu::BreakIterator* InitializeBreakIterator(v8::Handle<v8::String>,
+                                                   v8::Handle<v8::Object>,
+                                                   v8::Handle<v8::Object>);
+static icu::BreakIterator* CreateICUBreakIterator(const icu::Locale&,
+                                                  v8::Handle<v8::Object>);
+static void SetResolvedSettings(const icu::Locale&,
+                                icu::BreakIterator*,
+                                v8::Handle<v8::Object>);
+
+icu::BreakIterator* BreakIterator::UnpackBreakIterator(
+    v8::Handle<v8::Object> obj) {
+  v8::HandleScope handle_scope;
+
+  // v8::ObjectTemplate doesn't have HasInstance method so we can't check
+  // if obj is an instance of BreakIterator class. We'll check for a property
+  // that has to be in the object. The same applies to other services, like
+  // Collator and DateTimeFormat.
+  if (obj->HasOwnProperty(v8::String::New("breakIterator"))) {
+    return static_cast<icu::BreakIterator*>(
+        obj->GetAlignedPointerFromInternalField(0));
+  }
+
+  return NULL;
+}
+
+void BreakIterator::DeleteBreakIterator(v8::Isolate* isolate,
+                                        v8::Persistent<v8::Object>* object,
+                                        void* param) {
+  // First delete the hidden C++ object.
+  // Unpacking should never return NULL here. That would only happen if
+  // this method is used as the weak callback for persistent handles not
+  // pointing to a break iterator.
+  v8::HandleScope handle_scope(isolate);
+  v8::Local<v8::Object> handle = v8::Local<v8::Object>::New(isolate, *object);
+  delete UnpackBreakIterator(handle);
+
+  delete static_cast<icu::UnicodeString*>(
+      handle->GetAlignedPointerFromInternalField(1));
+
+  // Then dispose of the persistent handle to JS object.
+  object->Dispose(isolate);
+}
+
+// Throws a JavaScript exception.
+static v8::Handle<v8::Value> ThrowUnexpectedObjectError() {
+  // Returns undefined, and schedules an exception to be thrown.
+  return v8::ThrowException(v8::Exception::Error(
+      v8::String::New("BreakIterator method called on an object "
+                      "that is not a BreakIterator.")));
+}
+
+// Deletes the old value and sets the adopted text in corresponding
+// JavaScript object.
+icu::UnicodeString* ResetAdoptedText(
+    v8::Handle<v8::Object> obj, v8::Handle<v8::Value> value) {
+  // Get the previous value from the internal field.
+  icu::UnicodeString* text = static_cast<icu::UnicodeString*>(
+      obj->GetAlignedPointerFromInternalField(1));
+  delete text;
+
+  // Assign new value to the internal pointer.
+  v8::String::Value text_value(value);
+  text = new icu::UnicodeString(
+      reinterpret_cast<const UChar*>(*text_value), text_value.length());
+  obj->SetAlignedPointerInInternalField(1, text);
+
+  // Return new unicode string pointer.
+  return text;
+}
+
+void BreakIterator::JSInternalBreakIteratorAdoptText(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  if (args.Length() != 2 || !args[0]->IsObject() || !args[1]->IsString()) {
+    v8::ThrowException(v8::Exception::Error(
+        v8::String::New(
+            "Internal error. Iterator and text have to be specified.")));
+    return;
+  }
+
+  icu::BreakIterator* break_iterator = UnpackBreakIterator(args[0]->ToObject());
+  if (!break_iterator) {
+    ThrowUnexpectedObjectError();
+    return;
+  }
+
+  break_iterator->setText(*ResetAdoptedText(args[0]->ToObject(), args[1]));
+}
+
+void BreakIterator::JSInternalBreakIteratorFirst(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  icu::BreakIterator* break_iterator = UnpackBreakIterator(args[0]->ToObject());
+  if (!break_iterator) {
+    ThrowUnexpectedObjectError();
+    return;
+  }
+
+  args.GetReturnValue().Set(static_cast<int32_t>(break_iterator->first()));
+}
+
+void BreakIterator::JSInternalBreakIteratorNext(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  icu::BreakIterator* break_iterator = UnpackBreakIterator(args[0]->ToObject());
+  if (!break_iterator) {
+    ThrowUnexpectedObjectError();
+    return;
+  }
+
+  args.GetReturnValue().Set(static_cast<int32_t>(break_iterator->next()));
+}
+
+void BreakIterator::JSInternalBreakIteratorCurrent(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  icu::BreakIterator* break_iterator = UnpackBreakIterator(args[0]->ToObject());
+  if (!break_iterator) {
+    ThrowUnexpectedObjectError();
+    return;
+  }
+
+  args.GetReturnValue().Set(static_cast<int32_t>(break_iterator->current()));
+}
+
+void BreakIterator::JSInternalBreakIteratorBreakType(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  icu::BreakIterator* break_iterator = UnpackBreakIterator(args[0]->ToObject());
+  if (!break_iterator) {
+    ThrowUnexpectedObjectError();
+    return;
+  }
+
+  // TODO(cira): Remove cast once ICU fixes base BreakIterator class.
+  icu::RuleBasedBreakIterator* rule_based_iterator =
+      static_cast<icu::RuleBasedBreakIterator*>(break_iterator);
+  int32_t status = rule_based_iterator->getRuleStatus();
+  // Keep return values in sync with JavaScript BreakType enum.
+  v8::Handle<v8::String> result;
+  if (status >= UBRK_WORD_NONE && status < UBRK_WORD_NONE_LIMIT) {
+    result = v8::String::New("none");
+  } else if (status >= UBRK_WORD_NUMBER && status < UBRK_WORD_NUMBER_LIMIT) {
+    result = v8::String::New("number");
+  } else if (status >= UBRK_WORD_LETTER && status < UBRK_WORD_LETTER_LIMIT) {
+    result = v8::String::New("letter");
+  } else if (status >= UBRK_WORD_KANA && status < UBRK_WORD_KANA_LIMIT) {
+    result = v8::String::New("kana");
+  } else if (status >= UBRK_WORD_IDEO && status < UBRK_WORD_IDEO_LIMIT) {
+    result = v8::String::New("ideo");
+  } else {
+    result = v8::String::New("unknown");
+  }
+  args.GetReturnValue().Set(result);
+}
+
+void BreakIterator::JSCreateBreakIterator(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  if (args.Length() != 3 || !args[0]->IsString() || !args[1]->IsObject() ||
+      !args[2]->IsObject()) {
+    v8::ThrowException(v8::Exception::Error(
+        v8::String::New("Internal error, wrong parameters.")));
+    return;
+  }
+
+  v8::Isolate* isolate = args.GetIsolate();
+  v8::Local<v8::ObjectTemplate> break_iterator_template =
+      Utils::GetTemplate2(isolate);
+
+  // Create an empty object wrapper.
+  v8::Local<v8::Object> local_object = break_iterator_template->NewInstance();
+  // But the handle shouldn't be empty.
+  // That can happen if there was a stack overflow when creating the object.
+  if (local_object.IsEmpty()) {
+    args.GetReturnValue().Set(local_object);
+    return;
+  }
+
+  // Set break iterator as internal field of the resulting JS object.
+  icu::BreakIterator* break_iterator = InitializeBreakIterator(
+      args[0]->ToString(), args[1]->ToObject(), args[2]->ToObject());
+
+  if (!break_iterator) {
+    v8::ThrowException(v8::Exception::Error(v8::String::New(
+        "Internal error. Couldn't create ICU break iterator.")));
+    return;
+  } else {
+    local_object->SetAlignedPointerInInternalField(0, break_iterator);
+    // Make sure that the pointer to adopted text is NULL.
+    local_object->SetAlignedPointerInInternalField(1, NULL);
+
+    v8::TryCatch try_catch;
+    local_object->Set(v8::String::New("breakIterator"),
+                      v8::String::New("valid"));
+    if (try_catch.HasCaught()) {
+      v8::ThrowException(v8::Exception::Error(
+          v8::String::New("Internal error, couldn't set property.")));
+      return;
+    }
+  }
+
+  v8::Persistent<v8::Object> wrapper(isolate, local_object);
+  // Make object handle weak so we can delete iterator once GC kicks in.
+  wrapper.MakeWeak<void>(NULL, &DeleteBreakIterator);
+  args.GetReturnValue().Set(wrapper);
+  wrapper.ClearAndLeak();
+}
+
+static icu::BreakIterator* InitializeBreakIterator(
+    v8::Handle<v8::String> locale,
+    v8::Handle<v8::Object> options,
+    v8::Handle<v8::Object> resolved) {
+  // Convert BCP47 into ICU locale format.
+  UErrorCode status = U_ZERO_ERROR;
+  icu::Locale icu_locale;
+  char icu_result[ULOC_FULLNAME_CAPACITY];
+  int icu_length = 0;
+  v8::String::AsciiValue bcp47_locale(locale);
+  if (bcp47_locale.length() != 0) {
+    uloc_forLanguageTag(*bcp47_locale, icu_result, ULOC_FULLNAME_CAPACITY,
+                        &icu_length, &status);
+    if (U_FAILURE(status) || icu_length == 0) {
+      return NULL;
+    }
+    icu_locale = icu::Locale(icu_result);
+  }
+
+  icu::BreakIterator* break_iterator =
+    CreateICUBreakIterator(icu_locale, options);
+  if (!break_iterator) {
+    // Remove extensions and try again.
+    icu::Locale no_extension_locale(icu_locale.getBaseName());
+    break_iterator = CreateICUBreakIterator(no_extension_locale, options);
+
+    // Set resolved settings (locale).
+    SetResolvedSettings(no_extension_locale, break_iterator, resolved);
+  } else {
+    SetResolvedSettings(icu_locale, break_iterator, resolved);
+  }
+
+  return break_iterator;
+}
+
+static icu::BreakIterator* CreateICUBreakIterator(
+    const icu::Locale& icu_locale, v8::Handle<v8::Object> options) {
+  UErrorCode status = U_ZERO_ERROR;
+  icu::BreakIterator* break_iterator = NULL;
+  icu::UnicodeString type;
+  if (!Utils::ExtractStringSetting(options, "type", &type)) {
+    // Type had to be in the options. This would be an internal error.
+    return NULL;
+  }
+
+  if (type == UNICODE_STRING_SIMPLE("character")) {
+    break_iterator =
+      icu::BreakIterator::createCharacterInstance(icu_locale, status);
+  } else if (type == UNICODE_STRING_SIMPLE("sentence")) {
+    break_iterator =
+      icu::BreakIterator::createSentenceInstance(icu_locale, status);
+  } else if (type == UNICODE_STRING_SIMPLE("line")) {
+    break_iterator =
+      icu::BreakIterator::createLineInstance(icu_locale, status);
+  } else {
+    // Defualt is word iterator.
+    break_iterator =
+      icu::BreakIterator::createWordInstance(icu_locale, status);
+  }
+
+  if (U_FAILURE(status)) {
+    delete break_iterator;
+    return NULL;
+  }
+
+  return break_iterator;
+}
+
+static void SetResolvedSettings(const icu::Locale& icu_locale,
+                                icu::BreakIterator* date_format,
+                                v8::Handle<v8::Object> resolved) {
+  UErrorCode status = U_ZERO_ERROR;
+
+  // Set the locale
+  char result[ULOC_FULLNAME_CAPACITY];
+  status = U_ZERO_ERROR;
+  uloc_toLanguageTag(
+      icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status);
+  if (U_SUCCESS(status)) {
+    resolved->Set(v8::String::New("locale"), v8::String::New(result));
+  } else {
+    // This would never happen, since we got the locale from ICU.
+    resolved->Set(v8::String::New("locale"), v8::String::New("und"));
+  }
+}
+
+}  // namespace v8_i18n
diff --git a/deps/v8/src/extensions/i18n/break-iterator.h b/deps/v8/src/extensions/i18n/break-iterator.h
new file mode 100644 (file)
index 0000000..c44c20f
--- /dev/null
@@ -0,0 +1,85 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+#ifndef V8_EXTENSIONS_I18N_BREAK_ITERATOR_H_
+#define V8_EXTENSIONS_I18N_BREAK_ITERATOR_H_
+
+#include "unicode/uversion.h"
+#include "v8.h"
+
+namespace U_ICU_NAMESPACE {
+class BreakIterator;
+class UnicodeString;
+}
+
+namespace v8_i18n {
+
+class BreakIterator {
+ public:
+  static void JSCreateBreakIterator(
+      const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // Helper methods for various bindings.
+
+  // Unpacks iterator object from corresponding JavaScript object.
+  static icu::BreakIterator* UnpackBreakIterator(v8::Handle<v8::Object> obj);
+
+  // Release memory we allocated for the BreakIterator once the JS object that
+  // holds the pointer gets garbage collected.
+  static void DeleteBreakIterator(v8::Isolate* isolate,
+                                  v8::Persistent<v8::Object>* object,
+                                  void* param);
+
+  // Assigns new text to the iterator.
+  static void JSInternalBreakIteratorAdoptText(
+      const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // Moves iterator to the beginning of the string and returns new position.
+  static void JSInternalBreakIteratorFirst(
+      const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // Moves iterator to the next position and returns it.
+  static void JSInternalBreakIteratorNext(
+      const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // Returns current iterator's current position.
+  static void JSInternalBreakIteratorCurrent(
+      const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // Returns type of the item from current position.
+  // This call is only valid for word break iterators. Others just return 0.
+  static void JSInternalBreakIteratorBreakType(
+      const v8::FunctionCallbackInfo<v8::Value>& args);
+
+ private:
+  BreakIterator() {}
+};
+
+}  // namespace v8_i18n
+
+#endif  // V8_EXTENSIONS_I18N_BREAK_ITERATOR_H_
diff --git a/deps/v8/src/extensions/i18n/break-iterator.js b/deps/v8/src/extensions/i18n/break-iterator.js
new file mode 100644 (file)
index 0000000..eefd8c2
--- /dev/null
@@ -0,0 +1,197 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+// ECMAScript 402 API implementation is broken into separate files for
+// each service. The build system combines them together into one
+// Intl namespace.
+
+/**
+ * Initializes the given object so it's a valid BreakIterator instance.
+ * Useful for subclassing.
+ */
+function initializeBreakIterator(iterator, locales, options) {
+  native function NativeJSCreateBreakIterator();
+
+  if (iterator.hasOwnProperty('__initializedIntlObject')) {
+    throw new TypeError('Trying to re-initialize v8BreakIterator object.');
+  }
+
+  if (options === undefined) {
+    options = {};
+  }
+
+  var getOption = getGetOption(options, 'breakiterator');
+
+  var internalOptions = {};
+
+  defineWEProperty(internalOptions, 'type', getOption(
+    'type', 'string', ['character', 'word', 'sentence', 'line'], 'word'));
+
+  var locale = resolveLocale('breakiterator', locales, options);
+  var resolved = Object.defineProperties({}, {
+    requestedLocale: {value: locale.locale, writable: true},
+    type: {value: internalOptions.type, writable: true},
+    locale: {writable: true}
+  });
+
+  var internalIterator = NativeJSCreateBreakIterator(locale.locale,
+                                                     internalOptions,
+                                                     resolved);
+
+  Object.defineProperty(iterator, 'iterator', {value: internalIterator});
+  Object.defineProperty(iterator, 'resolved', {value: resolved});
+  Object.defineProperty(iterator, '__initializedIntlObject',
+                        {value: 'breakiterator'});
+
+  return iterator;
+}
+
+
+/**
+ * Constructs Intl.v8BreakIterator object given optional locales and options
+ * parameters.
+ *
+ * @constructor
+ */
+%SetProperty(Intl, 'v8BreakIterator', function() {
+    var locales = arguments[0];
+    var options = arguments[1];
+
+    if (!this || this === Intl) {
+      // Constructor is called as a function.
+      return new Intl.v8BreakIterator(locales, options);
+    }
+
+    return initializeBreakIterator(toObject(this), locales, options);
+  },
+  ATTRIBUTES.DONT_ENUM
+);
+
+
+/**
+ * BreakIterator resolvedOptions method.
+ */
+%SetProperty(Intl.v8BreakIterator.prototype, 'resolvedOptions', function() {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
+
+    if (!this || typeof this !== 'object' ||
+        this.__initializedIntlObject !== 'breakiterator') {
+      throw new TypeError('resolvedOptions method called on a non-object or ' +
+          'on a object that is not Intl.v8BreakIterator.');
+    }
+
+    var segmenter = this;
+    var locale = getOptimalLanguageTag(segmenter.resolved.requestedLocale,
+                                       segmenter.resolved.locale);
+
+    return {
+      locale: locale,
+      type: segmenter.resolved.type
+    };
+  },
+  ATTRIBUTES.DONT_ENUM
+);
+%FunctionSetName(Intl.v8BreakIterator.prototype.resolvedOptions,
+                 'resolvedOptions');
+%FunctionRemovePrototype(Intl.v8BreakIterator.prototype.resolvedOptions);
+%SetNativeFlag(Intl.v8BreakIterator.prototype.resolvedOptions);
+
+
+/**
+ * Returns the subset of the given locale list for which this locale list
+ * has a matching (possibly fallback) locale. Locales appear in the same
+ * order in the returned list as in the input list.
+ * Options are optional parameter.
+ */
+%SetProperty(Intl.v8BreakIterator, 'supportedLocalesOf', function(locales) {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
+
+    return supportedLocalesOf('breakiterator', locales, arguments[1]);
+  },
+  ATTRIBUTES.DONT_ENUM
+);
+%FunctionSetName(Intl.v8BreakIterator.supportedLocalesOf, 'supportedLocalesOf');
+%FunctionRemovePrototype(Intl.v8BreakIterator.supportedLocalesOf);
+%SetNativeFlag(Intl.v8BreakIterator.supportedLocalesOf);
+
+
+/**
+ * Adopts text to segment using the iterator. Old text, if present,
+ * gets discarded.
+ */
+function adoptText(iterator, text) {
+  native function NativeJSBreakIteratorAdoptText();
+  NativeJSBreakIteratorAdoptText(iterator.iterator, String(text));
+}
+
+
+/**
+ * Returns index of the first break in the string and moves current pointer.
+ */
+function first(iterator) {
+  native function NativeJSBreakIteratorFirst();
+  return NativeJSBreakIteratorFirst(iterator.iterator);
+}
+
+
+/**
+ * Returns the index of the next break and moves the pointer.
+ */
+function next(iterator) {
+  native function NativeJSBreakIteratorNext();
+  return NativeJSBreakIteratorNext(iterator.iterator);
+}
+
+
+/**
+ * Returns index of the current break.
+ */
+function current(iterator) {
+  native function NativeJSBreakIteratorCurrent();
+  return NativeJSBreakIteratorCurrent(iterator.iterator);
+}
+
+
+/**
+ * Returns type of the current break.
+ */
+function breakType(iterator) {
+  native function NativeJSBreakIteratorBreakType();
+  return NativeJSBreakIteratorBreakType(iterator.iterator);
+}
+
+
+addBoundMethod(Intl.v8BreakIterator, 'adoptText', adoptText, 1);
+addBoundMethod(Intl.v8BreakIterator, 'first', first, 0);
+addBoundMethod(Intl.v8BreakIterator, 'next', next, 0);
+addBoundMethod(Intl.v8BreakIterator, 'current', current, 0);
+addBoundMethod(Intl.v8BreakIterator, 'breakType', breakType, 0);
diff --git a/deps/v8/src/extensions/i18n/collator.cc b/deps/v8/src/extensions/i18n/collator.cc
new file mode 100644 (file)
index 0000000..4ffa414
--- /dev/null
@@ -0,0 +1,363 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+#include "collator.h"
+
+#include "i18n-utils.h"
+#include "unicode/coll.h"
+#include "unicode/locid.h"
+#include "unicode/ucol.h"
+
+namespace v8_i18n {
+
+static icu::Collator* InitializeCollator(
+    v8::Handle<v8::String>, v8::Handle<v8::Object>, v8::Handle<v8::Object>);
+
+static icu::Collator* CreateICUCollator(
+    const icu::Locale&, v8::Handle<v8::Object>);
+
+static bool SetBooleanAttribute(
+    UColAttribute, const char*, v8::Handle<v8::Object>, icu::Collator*);
+
+static void SetResolvedSettings(
+    const icu::Locale&, icu::Collator*, v8::Handle<v8::Object>);
+
+static void SetBooleanSetting(
+    UColAttribute, icu::Collator*, const char*, v8::Handle<v8::Object>);
+
+icu::Collator* Collator::UnpackCollator(v8::Handle<v8::Object> obj) {
+  v8::HandleScope handle_scope;
+
+  if (obj->HasOwnProperty(v8::String::New("collator"))) {
+    return static_cast<icu::Collator*>(
+        obj->GetAlignedPointerFromInternalField(0));
+  }
+
+  return NULL;
+}
+
+void Collator::DeleteCollator(v8::Isolate* isolate,
+                              v8::Persistent<v8::Object>* object,
+                              void* param) {
+  // First delete the hidden C++ object.
+  // Unpacking should never return NULL here. That would only happen if
+  // this method is used as the weak callback for persistent handles not
+  // pointing to a collator.
+  v8::HandleScope handle_scope(isolate);
+  v8::Local<v8::Object> handle = v8::Local<v8::Object>::New(isolate, *object);
+  delete UnpackCollator(handle);
+
+  // Then dispose of the persistent handle to JS object.
+  object->Dispose(isolate);
+}
+
+// Throws a JavaScript exception.
+static v8::Handle<v8::Value> ThrowUnexpectedObjectError() {
+  // Returns undefined, and schedules an exception to be thrown.
+  return v8::ThrowException(v8::Exception::Error(
+      v8::String::New("Collator method called on an object "
+                      "that is not a Collator.")));
+}
+
+// When there's an ICU error, throw a JavaScript error with |message|.
+static v8::Handle<v8::Value> ThrowExceptionForICUError(const char* message) {
+  return v8::ThrowException(v8::Exception::Error(v8::String::New(message)));
+}
+
+// static
+void Collator::JSInternalCompare(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  if (args.Length() != 3 || !args[0]->IsObject() ||
+      !args[1]->IsString() || !args[2]->IsString()) {
+    v8::ThrowException(v8::Exception::SyntaxError(
+        v8::String::New("Collator and two string arguments are required.")));
+    return;
+  }
+
+  icu::Collator* collator = UnpackCollator(args[0]->ToObject());
+  if (!collator) {
+    ThrowUnexpectedObjectError();
+    return;
+  }
+
+  v8::String::Value string_value1(args[1]);
+  v8::String::Value string_value2(args[2]);
+  const UChar* string1 = reinterpret_cast<const UChar*>(*string_value1);
+  const UChar* string2 = reinterpret_cast<const UChar*>(*string_value2);
+  UErrorCode status = U_ZERO_ERROR;
+  UCollationResult result = collator->compare(
+      string1, string_value1.length(), string2, string_value2.length(), status);
+
+  if (U_FAILURE(status)) {
+    ThrowExceptionForICUError(
+        "Internal error. Unexpected failure in Collator.compare.");
+    return;
+  }
+
+  args.GetReturnValue().Set(result);
+}
+
+void Collator::JSCreateCollator(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  if (args.Length() != 3 || !args[0]->IsString() || !args[1]->IsObject() ||
+      !args[2]->IsObject()) {
+    v8::ThrowException(v8::Exception::SyntaxError(
+        v8::String::New("Internal error, wrong parameters.")));
+    return;
+  }
+
+  v8::Isolate* isolate = args.GetIsolate();
+  v8::Local<v8::ObjectTemplate> intl_collator_template =
+      Utils::GetTemplate(isolate);
+
+  // Create an empty object wrapper.
+  v8::Local<v8::Object> local_object = intl_collator_template->NewInstance();
+  // But the handle shouldn't be empty.
+  // That can happen if there was a stack overflow when creating the object.
+  if (local_object.IsEmpty()) {
+    args.GetReturnValue().Set(local_object);
+    return;
+  }
+
+  // Set collator as internal field of the resulting JS object.
+  icu::Collator* collator = InitializeCollator(
+      args[0]->ToString(), args[1]->ToObject(), args[2]->ToObject());
+
+  if (!collator) {
+    v8::ThrowException(v8::Exception::Error(v8::String::New(
+        "Internal error. Couldn't create ICU collator.")));
+    return;
+  } else {
+    local_object->SetAlignedPointerInInternalField(0, collator);
+
+    // Make it safer to unpack later on.
+    v8::TryCatch try_catch;
+    local_object->Set(v8::String::New("collator"), v8::String::New("valid"));
+    if (try_catch.HasCaught()) {
+      v8::ThrowException(v8::Exception::Error(
+          v8::String::New("Internal error, couldn't set property.")));
+      return;
+    }
+  }
+
+  v8::Persistent<v8::Object> wrapper(isolate, local_object);
+  // Make object handle weak so we can delete iterator once GC kicks in.
+  wrapper.MakeWeak<void>(NULL, &DeleteCollator);
+  args.GetReturnValue().Set(wrapper);
+  wrapper.ClearAndLeak();
+}
+
+static icu::Collator* InitializeCollator(v8::Handle<v8::String> locale,
+                                         v8::Handle<v8::Object> options,
+                                         v8::Handle<v8::Object> resolved) {
+  // Convert BCP47 into ICU locale format.
+  UErrorCode status = U_ZERO_ERROR;
+  icu::Locale icu_locale;
+  char icu_result[ULOC_FULLNAME_CAPACITY];
+  int icu_length = 0;
+  v8::String::AsciiValue bcp47_locale(locale);
+  if (bcp47_locale.length() != 0) {
+    uloc_forLanguageTag(*bcp47_locale, icu_result, ULOC_FULLNAME_CAPACITY,
+                        &icu_length, &status);
+    if (U_FAILURE(status) || icu_length == 0) {
+      return NULL;
+    }
+    icu_locale = icu::Locale(icu_result);
+  }
+
+  icu::Collator* collator = CreateICUCollator(icu_locale, options);
+  if (!collator) {
+    // Remove extensions and try again.
+    icu::Locale no_extension_locale(icu_locale.getBaseName());
+    collator = CreateICUCollator(no_extension_locale, options);
+
+    // Set resolved settings (pattern, numbering system).
+    SetResolvedSettings(no_extension_locale, collator, resolved);
+  } else {
+    SetResolvedSettings(icu_locale, collator, resolved);
+  }
+
+  return collator;
+}
+
+static icu::Collator* CreateICUCollator(
+    const icu::Locale& icu_locale, v8::Handle<v8::Object> options) {
+  // Make collator from options.
+  icu::Collator* collator = NULL;
+  UErrorCode status = U_ZERO_ERROR;
+  collator = icu::Collator::createInstance(icu_locale, status);
+
+  if (U_FAILURE(status)) {
+    delete collator;
+    return NULL;
+  }
+
+  // Set flags first, and then override them with sensitivity if necessary.
+  SetBooleanAttribute(UCOL_NUMERIC_COLLATION, "numeric", options, collator);
+
+  // Normalization is always on, by the spec. We are free to optimize
+  // if the strings are already normalized (but we don't have a way to tell
+  // that right now).
+  collator->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status);
+
+  icu::UnicodeString case_first;
+  if (Utils::ExtractStringSetting(options, "caseFirst", &case_first)) {
+    if (case_first == UNICODE_STRING_SIMPLE("upper")) {
+      collator->setAttribute(UCOL_CASE_FIRST, UCOL_UPPER_FIRST, status);
+    } else if (case_first == UNICODE_STRING_SIMPLE("lower")) {
+      collator->setAttribute(UCOL_CASE_FIRST, UCOL_LOWER_FIRST, status);
+    } else {
+      // Default (false/off).
+      collator->setAttribute(UCOL_CASE_FIRST, UCOL_OFF, status);
+    }
+  }
+
+  icu::UnicodeString sensitivity;
+  if (Utils::ExtractStringSetting(options, "sensitivity", &sensitivity)) {
+    if (sensitivity == UNICODE_STRING_SIMPLE("base")) {
+      collator->setStrength(icu::Collator::PRIMARY);
+    } else if (sensitivity == UNICODE_STRING_SIMPLE("accent")) {
+      collator->setStrength(icu::Collator::SECONDARY);
+    } else if (sensitivity == UNICODE_STRING_SIMPLE("case")) {
+      collator->setStrength(icu::Collator::PRIMARY);
+      collator->setAttribute(UCOL_CASE_LEVEL, UCOL_ON, status);
+    } else {
+      // variant (default)
+      collator->setStrength(icu::Collator::TERTIARY);
+    }
+  }
+
+  bool ignore;
+  if (Utils::ExtractBooleanSetting(options, "ignorePunctuation", &ignore)) {
+    if (ignore) {
+      collator->setAttribute(UCOL_ALTERNATE_HANDLING, UCOL_SHIFTED, status);
+    }
+  }
+
+  return collator;
+}
+
+static bool SetBooleanAttribute(UColAttribute attribute,
+                                const char* name,
+                                v8::Handle<v8::Object> options,
+                                icu::Collator* collator) {
+  UErrorCode status = U_ZERO_ERROR;
+  bool result;
+  if (Utils::ExtractBooleanSetting(options, name, &result)) {
+    collator->setAttribute(attribute, result ? UCOL_ON : UCOL_OFF, status);
+    if (U_FAILURE(status)) {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+static void SetResolvedSettings(const icu::Locale& icu_locale,
+                                icu::Collator* collator,
+                                v8::Handle<v8::Object> resolved) {
+  SetBooleanSetting(UCOL_NUMERIC_COLLATION, collator, "numeric", resolved);
+
+  UErrorCode status = U_ZERO_ERROR;
+
+  switch (collator->getAttribute(UCOL_CASE_FIRST, status)) {
+    case UCOL_LOWER_FIRST:
+      resolved->Set(v8::String::New("caseFirst"), v8::String::New("lower"));
+      break;
+    case UCOL_UPPER_FIRST:
+      resolved->Set(v8::String::New("caseFirst"), v8::String::New("upper"));
+      break;
+    default:
+      resolved->Set(v8::String::New("caseFirst"), v8::String::New("false"));
+  }
+
+  switch (collator->getAttribute(UCOL_STRENGTH, status)) {
+    case UCOL_PRIMARY: {
+      resolved->Set(v8::String::New("strength"), v8::String::New("primary"));
+
+      // case level: true + s1 -> case, s1 -> base.
+      if (UCOL_ON == collator->getAttribute(UCOL_CASE_LEVEL, status)) {
+        resolved->Set(v8::String::New("sensitivity"), v8::String::New("case"));
+      } else {
+        resolved->Set(v8::String::New("sensitivity"), v8::String::New("base"));
+      }
+      break;
+    }
+    case UCOL_SECONDARY:
+      resolved->Set(v8::String::New("strength"), v8::String::New("secondary"));
+      resolved->Set(v8::String::New("sensitivity"), v8::String::New("accent"));
+      break;
+    case UCOL_TERTIARY:
+      resolved->Set(v8::String::New("strength"), v8::String::New("tertiary"));
+      resolved->Set(v8::String::New("sensitivity"), v8::String::New("variant"));
+      break;
+    case UCOL_QUATERNARY:
+      // We shouldn't get quaternary and identical from ICU, but if we do
+      // put them into variant.
+      resolved->Set(v8::String::New("strength"), v8::String::New("quaternary"));
+      resolved->Set(v8::String::New("sensitivity"), v8::String::New("variant"));
+      break;
+    default:
+      resolved->Set(v8::String::New("strength"), v8::String::New("identical"));
+      resolved->Set(v8::String::New("sensitivity"), v8::String::New("variant"));
+  }
+
+  if (UCOL_SHIFTED == collator->getAttribute(UCOL_ALTERNATE_HANDLING, status)) {
+    resolved->Set(v8::String::New("ignorePunctuation"),
+                  v8::Boolean::New(true));
+  } else {
+    resolved->Set(v8::String::New("ignorePunctuation"),
+                  v8::Boolean::New(false));
+  }
+
+  // Set the locale
+  char result[ULOC_FULLNAME_CAPACITY];
+  status = U_ZERO_ERROR;
+  uloc_toLanguageTag(
+      icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status);
+  if (U_SUCCESS(status)) {
+    resolved->Set(v8::String::New("locale"), v8::String::New(result));
+  } else {
+    // This would never happen, since we got the locale from ICU.
+    resolved->Set(v8::String::New("locale"), v8::String::New("und"));
+  }
+}
+
+static void SetBooleanSetting(UColAttribute attribute,
+                              icu::Collator* collator,
+                              const char* property,
+                              v8::Handle<v8::Object> resolved) {
+  UErrorCode status = U_ZERO_ERROR;
+  if (UCOL_ON == collator->getAttribute(attribute, status)) {
+    resolved->Set(v8::String::New(property), v8::Boolean::New(true));
+  } else {
+    resolved->Set(v8::String::New(property), v8::Boolean::New(false));
+  }
+}
+
+}  // namespace v8_i18n
diff --git a/deps/v8/src/extensions/i18n/collator.h b/deps/v8/src/extensions/i18n/collator.h
new file mode 100644 (file)
index 0000000..a3991b9
--- /dev/null
@@ -0,0 +1,68 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+#ifndef V8_EXTENSIONS_I18N_COLLATOR_H_
+#define V8_EXTENSIONS_I18N_COLLATOR_H_
+
+#include "unicode/uversion.h"
+#include "v8.h"
+
+namespace U_ICU_NAMESPACE {
+class Collator;
+class UnicodeString;
+}
+
+namespace v8_i18n {
+
+class Collator {
+ public:
+  static void JSCreateCollator(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // Helper methods for various bindings.
+
+  // Unpacks collator object from corresponding JavaScript object.
+  static icu::Collator* UnpackCollator(v8::Handle<v8::Object> obj);
+
+  // Release memory we allocated for the Collator once the JS object that
+  // holds the pointer gets garbage collected.
+  static void DeleteCollator(v8::Isolate* isolate,
+                             v8::Persistent<v8::Object>* object,
+                             void* param);
+
+  // Compare two strings and returns -1, 0 and 1 depending on
+  // whether string1 is smaller than, equal to or larger than string2.
+  static void JSInternalCompare(
+      const v8::FunctionCallbackInfo<v8::Value>& args);
+
+ private:
+  Collator() {}
+};
+
+}  // namespace v8_i18n
+
+#endif  // V8_EXTENSIONS_I18N_COLLATOR_H_
diff --git a/deps/v8/src/extensions/i18n/collator.js b/deps/v8/src/extensions/i18n/collator.js
new file mode 100644 (file)
index 0000000..3483515
--- /dev/null
@@ -0,0 +1,212 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+// ECMAScript 402 API implementation is broken into separate files for
+// each service. The build system combines them together into one
+// Intl namespace.
+
+/**
+ * Initializes the given object so it's a valid Collator instance.
+ * Useful for subclassing.
+ */
+function initializeCollator(collator, locales, options) {
+  native function NativeJSCreateCollator();
+
+  if (collator.hasOwnProperty('__initializedIntlObject')) {
+    throw new TypeError('Trying to re-initialize Collator object.');
+  }
+
+  if (options === undefined) {
+    options = {};
+  }
+
+  var getOption = getGetOption(options, 'collator');
+
+  var internalOptions = {};
+
+  defineWEProperty(internalOptions, 'usage', getOption(
+    'usage', 'string', ['sort', 'search'], 'sort'));
+
+  var sensitivity = getOption('sensitivity', 'string',
+                              ['base', 'accent', 'case', 'variant']);
+  if (sensitivity === undefined && internalOptions.usage === 'sort') {
+    sensitivity = 'variant';
+  }
+  defineWEProperty(internalOptions, 'sensitivity', sensitivity);
+
+  defineWEProperty(internalOptions, 'ignorePunctuation', getOption(
+    'ignorePunctuation', 'boolean', undefined, false));
+
+  var locale = resolveLocale('collator', locales, options);
+
+  // ICU can't take kb, kc... parameters through localeID, so we need to pass
+  // them as options.
+  // One exception is -co- which has to be part of the extension, but only for
+  // usage: sort, and its value can't be 'standard' or 'search'.
+  var extensionMap = parseExtension(locale.extension);
+  setOptions(
+      options, extensionMap, COLLATOR_KEY_MAP, getOption, internalOptions);
+
+  var collation = 'default';
+  var extension = '';
+  if (extensionMap.hasOwnProperty('co') && internalOptions.usage === 'sort') {
+    if (ALLOWED_CO_VALUES.indexOf(extensionMap.co) !== -1) {
+      extension = '-u-co-' + extensionMap.co;
+      // ICU can't tell us what the collation is, so save user's input.
+      collation = extensionMap.co;
+    }
+  } else if (internalOptions.usage === 'search') {
+    extension = '-u-co-search';
+  }
+  defineWEProperty(internalOptions, 'collation', collation);
+
+  var requestedLocale = locale.locale + extension;
+
+  // We define all properties C++ code may produce, to prevent security
+  // problems. If malicious user decides to redefine Object.prototype.locale
+  // we can't just use plain x.locale = 'us' or in C++ Set("locale", "us").
+  // Object.defineProperties will either succeed defining or throw an error.
+  var resolved = Object.defineProperties({}, {
+    caseFirst: {writable: true},
+    collation: {value: internalOptions.collation, writable: true},
+    ignorePunctuation: {writable: true},
+    locale: {writable: true},
+    numeric: {writable: true},
+    requestedLocale: {value: requestedLocale, writable: true},
+    sensitivity: {writable: true},
+    strength: {writable: true},
+    usage: {value: internalOptions.usage, writable: true}
+  });
+
+  var internalCollator = NativeJSCreateCollator(requestedLocale,
+                                                internalOptions,
+                                                resolved);
+
+  // Writable, configurable and enumerable are set to false by default.
+  Object.defineProperty(collator, 'collator', {value: internalCollator});
+  Object.defineProperty(collator, '__initializedIntlObject',
+                        {value: 'collator'});
+  Object.defineProperty(collator, 'resolved', {value: resolved});
+
+  return collator;
+}
+
+
+/**
+ * Constructs Intl.Collator object given optional locales and options
+ * parameters.
+ *
+ * @constructor
+ */
+%SetProperty(Intl, 'Collator', function() {
+    var locales = arguments[0];
+    var options = arguments[1];
+
+    if (!this || this === Intl) {
+      // Constructor is called as a function.
+      return new Intl.Collator(locales, options);
+    }
+
+    return initializeCollator(toObject(this), locales, options);
+  },
+  ATTRIBUTES.DONT_ENUM
+);
+
+
+/**
+ * Collator resolvedOptions method.
+ */
+%SetProperty(Intl.Collator.prototype, 'resolvedOptions', function() {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
+
+    if (!this || typeof this !== 'object' ||
+        this.__initializedIntlObject !== 'collator') {
+      throw new TypeError('resolvedOptions method called on a non-object ' +
+                          'or on a object that is not Intl.Collator.');
+    }
+
+    var coll = this;
+    var locale = getOptimalLanguageTag(coll.resolved.requestedLocale,
+                                       coll.resolved.locale);
+
+    return {
+      locale: locale,
+      usage: coll.resolved.usage,
+      sensitivity: coll.resolved.sensitivity,
+      ignorePunctuation: coll.resolved.ignorePunctuation,
+      numeric: coll.resolved.numeric,
+      caseFirst: coll.resolved.caseFirst,
+      collation: coll.resolved.collation
+    };
+  },
+  ATTRIBUTES.DONT_ENUM
+);
+%FunctionSetName(Intl.Collator.prototype.resolvedOptions, 'resolvedOptions');
+%FunctionRemovePrototype(Intl.Collator.prototype.resolvedOptions);
+%SetNativeFlag(Intl.Collator.prototype.resolvedOptions);
+
+
+/**
+ * Returns the subset of the given locale list for which this locale list
+ * has a matching (possibly fallback) locale. Locales appear in the same
+ * order in the returned list as in the input list.
+ * Options are optional parameter.
+ */
+%SetProperty(Intl.Collator, 'supportedLocalesOf', function(locales) {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
+
+    return supportedLocalesOf('collator', locales, arguments[1]);
+  },
+  ATTRIBUTES.DONT_ENUM
+);
+%FunctionSetName(Intl.Collator.supportedLocalesOf, 'supportedLocalesOf');
+%FunctionRemovePrototype(Intl.Collator.supportedLocalesOf);
+%SetNativeFlag(Intl.Collator.supportedLocalesOf);
+
+
+/**
+ * When the compare method is called with two arguments x and y, it returns a
+ * Number other than NaN that represents the result of a locale-sensitive
+ * String comparison of x with y.
+ * The result is intended to order String values in the sort order specified
+ * by the effective locale and collation options computed during construction
+ * of this Collator object, and will be negative, zero, or positive, depending
+ * on whether x comes before y in the sort order, the Strings are equal under
+ * the sort order, or x comes after y in the sort order, respectively.
+ */
+function compare(collator, x, y) {
+  native function NativeJSInternalCompare();
+  return NativeJSInternalCompare(collator.collator, String(x), String(y));
+};
+
+
+addBoundMethod(Intl.Collator, 'compare', compare, 2);
diff --git a/deps/v8/src/extensions/i18n/date-format.cc b/deps/v8/src/extensions/i18n/date-format.cc
new file mode 100644 (file)
index 0000000..1058e37
--- /dev/null
@@ -0,0 +1,329 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+#include "date-format.h"
+
+#include <string.h>
+
+#include "i18n-utils.h"
+#include "unicode/calendar.h"
+#include "unicode/dtfmtsym.h"
+#include "unicode/dtptngen.h"
+#include "unicode/locid.h"
+#include "unicode/numsys.h"
+#include "unicode/smpdtfmt.h"
+#include "unicode/timezone.h"
+
+namespace v8_i18n {
+
+static icu::SimpleDateFormat* InitializeDateTimeFormat(v8::Handle<v8::String>,
+                                                       v8::Handle<v8::Object>,
+                                                       v8::Handle<v8::Object>);
+static icu::SimpleDateFormat* CreateICUDateFormat(const icu::Locale&,
+                                                  v8::Handle<v8::Object>);
+static void SetResolvedSettings(const icu::Locale&,
+                                icu::SimpleDateFormat*,
+                                v8::Handle<v8::Object>);
+
+icu::SimpleDateFormat* DateFormat::UnpackDateFormat(
+    v8::Handle<v8::Object> obj) {
+  v8::HandleScope handle_scope;
+
+  if (obj->HasOwnProperty(v8::String::New("dateFormat"))) {
+    return static_cast<icu::SimpleDateFormat*>(
+        obj->GetAlignedPointerFromInternalField(0));
+  }
+
+  return NULL;
+}
+
+void DateFormat::DeleteDateFormat(v8::Isolate* isolate,
+                                  v8::Persistent<v8::Object>* object,
+                                  void* param) {
+  // First delete the hidden C++ object.
+  // Unpacking should never return NULL here. That would only happen if
+  // this method is used as the weak callback for persistent handles not
+  // pointing to a date time formatter.
+  v8::HandleScope handle_scope(isolate);
+  v8::Local<v8::Object> handle = v8::Local<v8::Object>::New(isolate, *object);
+  delete UnpackDateFormat(handle);
+
+  // Then dispose of the persistent handle to JS object.
+  object->Dispose(isolate);
+}
+
+void DateFormat::JSInternalFormat(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  double millis = 0.0;
+  if (args.Length() != 2 || !args[0]->IsObject() || !args[1]->IsDate()) {
+    v8::ThrowException(v8::Exception::Error(
+        v8::String::New(
+            "Internal error. Formatter and date value have to be specified.")));
+    return;
+  } else {
+    millis = v8::Date::Cast(*args[1])->NumberValue();
+  }
+
+  icu::SimpleDateFormat* date_format = UnpackDateFormat(args[0]->ToObject());
+  if (!date_format) {
+    v8::ThrowException(v8::Exception::Error(
+        v8::String::New("DateTimeFormat method called on an object "
+                        "that is not a DateTimeFormat.")));
+    return;
+  }
+
+  icu::UnicodeString result;
+  date_format->format(millis, result);
+
+  args.GetReturnValue().Set(v8::String::New(
+      reinterpret_cast<const uint16_t*>(result.getBuffer()), result.length()));
+}
+
+void DateFormat::JSInternalParse(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  icu::UnicodeString string_date;
+  if (args.Length() != 2 || !args[0]->IsObject() || !args[1]->IsString()) {
+    v8::ThrowException(v8::Exception::Error(
+        v8::String::New(
+            "Internal error. Formatter and string have to be specified.")));
+    return;
+  } else {
+    if (!Utils::V8StringToUnicodeString(args[1], &string_date)) {
+      string_date = "";
+    }
+  }
+
+  icu::SimpleDateFormat* date_format = UnpackDateFormat(args[0]->ToObject());
+  if (!date_format) {
+    v8::ThrowException(v8::Exception::Error(
+        v8::String::New("DateTimeFormat method called on an object "
+                        "that is not a DateTimeFormat.")));
+    return;
+  }
+
+  UErrorCode status = U_ZERO_ERROR;
+  UDate date = date_format->parse(string_date, status);
+  if (U_FAILURE(status)) {
+    return;
+  }
+
+  args.GetReturnValue().Set(v8::Date::New(static_cast<double>(date)));
+}
+
+void DateFormat::JSCreateDateTimeFormat(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  if (args.Length() != 3 ||
+      !args[0]->IsString() ||
+      !args[1]->IsObject() ||
+      !args[2]->IsObject()) {
+    v8::ThrowException(v8::Exception::Error(
+        v8::String::New("Internal error, wrong parameters.")));
+    return;
+  }
+
+  v8::Isolate* isolate = args.GetIsolate();
+  v8::Local<v8::ObjectTemplate> date_format_template =
+      Utils::GetTemplate(isolate);
+
+  // Create an empty object wrapper.
+  v8::Local<v8::Object> local_object = date_format_template->NewInstance();
+  // But the handle shouldn't be empty.
+  // That can happen if there was a stack overflow when creating the object.
+  if (local_object.IsEmpty()) {
+    args.GetReturnValue().Set(local_object);
+    return;
+  }
+
+  // Set date time formatter as internal field of the resulting JS object.
+  icu::SimpleDateFormat* date_format = InitializeDateTimeFormat(
+      args[0]->ToString(), args[1]->ToObject(), args[2]->ToObject());
+
+  if (!date_format) {
+    v8::ThrowException(v8::Exception::Error(v8::String::New(
+        "Internal error. Couldn't create ICU date time formatter.")));
+    return;
+  } else {
+    local_object->SetAlignedPointerInInternalField(0, date_format);
+
+    v8::TryCatch try_catch;
+    local_object->Set(v8::String::New("dateFormat"), v8::String::New("valid"));
+    if (try_catch.HasCaught()) {
+      v8::ThrowException(v8::Exception::Error(
+          v8::String::New("Internal error, couldn't set property.")));
+      return;
+    }
+  }
+
+  v8::Persistent<v8::Object> wrapper(isolate, local_object);
+  // Make object handle weak so we can delete iterator once GC kicks in.
+  wrapper.MakeWeak<void>(NULL, &DeleteDateFormat);
+  args.GetReturnValue().Set(wrapper);
+  wrapper.ClearAndLeak();
+}
+
+static icu::SimpleDateFormat* InitializeDateTimeFormat(
+    v8::Handle<v8::String> locale,
+    v8::Handle<v8::Object> options,
+    v8::Handle<v8::Object> resolved) {
+  // Convert BCP47 into ICU locale format.
+  UErrorCode status = U_ZERO_ERROR;
+  icu::Locale icu_locale;
+  char icu_result[ULOC_FULLNAME_CAPACITY];
+  int icu_length = 0;
+  v8::String::AsciiValue bcp47_locale(locale);
+  if (bcp47_locale.length() != 0) {
+    uloc_forLanguageTag(*bcp47_locale, icu_result, ULOC_FULLNAME_CAPACITY,
+                        &icu_length, &status);
+    if (U_FAILURE(status) || icu_length == 0) {
+      return NULL;
+    }
+    icu_locale = icu::Locale(icu_result);
+  }
+
+  icu::SimpleDateFormat* date_format = CreateICUDateFormat(icu_locale, options);
+  if (!date_format) {
+    // Remove extensions and try again.
+    icu::Locale no_extension_locale(icu_locale.getBaseName());
+    date_format = CreateICUDateFormat(no_extension_locale, options);
+
+    // Set resolved settings (pattern, numbering system, calendar).
+    SetResolvedSettings(no_extension_locale, date_format, resolved);
+  } else {
+    SetResolvedSettings(icu_locale, date_format, resolved);
+  }
+
+  return date_format;
+}
+
+static icu::SimpleDateFormat* CreateICUDateFormat(
+    const icu::Locale& icu_locale, v8::Handle<v8::Object> options) {
+  // Create time zone as specified by the user. We have to re-create time zone
+  // since calendar takes ownership.
+  icu::TimeZone* tz = NULL;
+  icu::UnicodeString timezone;
+  if (Utils::ExtractStringSetting(options, "timeZone", &timezone)) {
+    tz = icu::TimeZone::createTimeZone(timezone);
+  } else {
+    tz = icu::TimeZone::createDefault();
+  }
+
+  // Create a calendar using locale, and apply time zone to it.
+  UErrorCode status = U_ZERO_ERROR;
+  icu::Calendar* calendar =
+      icu::Calendar::createInstance(tz, icu_locale, status);
+
+  // Make formatter from skeleton. Calendar and numbering system are added
+  // to the locale as Unicode extension (if they were specified at all).
+  icu::SimpleDateFormat* date_format = NULL;
+  icu::UnicodeString skeleton;
+  if (Utils::ExtractStringSetting(options, "skeleton", &skeleton)) {
+    icu::DateTimePatternGenerator* generator =
+        icu::DateTimePatternGenerator::createInstance(icu_locale, status);
+    icu::UnicodeString pattern;
+    if (U_SUCCESS(status)) {
+      pattern = generator->getBestPattern(skeleton, status);
+      delete generator;
+    }
+
+    date_format = new icu::SimpleDateFormat(pattern, icu_locale, status);
+    if (U_SUCCESS(status)) {
+      date_format->adoptCalendar(calendar);
+    }
+  }
+
+  if (U_FAILURE(status)) {
+    delete calendar;
+    delete date_format;
+    date_format = NULL;
+  }
+
+  return date_format;
+}
+
+static void SetResolvedSettings(const icu::Locale& icu_locale,
+                                icu::SimpleDateFormat* date_format,
+                                v8::Handle<v8::Object> resolved) {
+  UErrorCode status = U_ZERO_ERROR;
+  icu::UnicodeString pattern;
+  date_format->toPattern(pattern);
+  resolved->Set(v8::String::New("pattern"),
+                v8::String::New(reinterpret_cast<const uint16_t*>(
+                    pattern.getBuffer()), pattern.length()));
+
+  // Set time zone and calendar.
+  if (date_format) {
+    const icu::Calendar* calendar = date_format->getCalendar();
+    const char* calendar_name = calendar->getType();
+    resolved->Set(v8::String::New("calendar"), v8::String::New(calendar_name));
+
+    const icu::TimeZone& tz = calendar->getTimeZone();
+    icu::UnicodeString time_zone;
+    tz.getID(time_zone);
+
+    icu::UnicodeString canonical_time_zone;
+    icu::TimeZone::getCanonicalID(time_zone, canonical_time_zone, status);
+    if (U_SUCCESS(status)) {
+      if (canonical_time_zone == UNICODE_STRING_SIMPLE("Etc/GMT")) {
+        resolved->Set(v8::String::New("timeZone"), v8::String::New("UTC"));
+      } else {
+        resolved->Set(v8::String::New("timeZone"),
+                      v8::String::New(reinterpret_cast<const uint16_t*>(
+                          canonical_time_zone.getBuffer()),
+                                      canonical_time_zone.length()));
+      }
+    }
+  }
+
+  // Ugly hack. ICU doesn't expose numbering system in any way, so we have
+  // to assume that for given locale NumberingSystem constructor produces the
+  // same digits as NumberFormat/Calendar would.
+  status = U_ZERO_ERROR;
+  icu::NumberingSystem* numbering_system =
+      icu::NumberingSystem::createInstance(icu_locale, status);
+  if (U_SUCCESS(status)) {
+    const char* ns = numbering_system->getName();
+    resolved->Set(v8::String::New("numberingSystem"), v8::String::New(ns));
+  } else {
+    resolved->Set(v8::String::New("numberingSystem"), v8::Undefined());
+  }
+  delete numbering_system;
+
+  // Set the locale
+  char result[ULOC_FULLNAME_CAPACITY];
+  status = U_ZERO_ERROR;
+  uloc_toLanguageTag(
+      icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status);
+  if (U_SUCCESS(status)) {
+    resolved->Set(v8::String::New("locale"), v8::String::New(result));
+  } else {
+    // This would never happen, since we got the locale from ICU.
+    resolved->Set(v8::String::New("locale"), v8::String::New("und"));
+  }
+}
+
+}  // namespace v8_i18n
diff --git a/deps/v8/src/extensions/i18n/date-format.h b/deps/v8/src/extensions/i18n/date-format.h
new file mode 100644 (file)
index 0000000..daa5964
--- /dev/null
@@ -0,0 +1,71 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+#ifndef V8_EXTENSIONS_I18N_DATE_FORMAT_H_
+#define V8_EXTENSIONS_I18N_DATE_FORMAT_H_
+
+#include "unicode/uversion.h"
+#include "v8.h"
+
+namespace U_ICU_NAMESPACE {
+class SimpleDateFormat;
+}
+
+namespace v8_i18n {
+
+class DateFormat {
+ public:
+  static void JSCreateDateTimeFormat(
+      const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // Helper methods for various bindings.
+
+  // Unpacks date format object from corresponding JavaScript object.
+  static icu::SimpleDateFormat* UnpackDateFormat(
+      v8::Handle<v8::Object> obj);
+
+  // Release memory we allocated for the DateFormat once the JS object that
+  // holds the pointer gets garbage collected.
+  static void DeleteDateFormat(v8::Isolate* isolate,
+                               v8::Persistent<v8::Object>* object,
+                               void* param);
+
+  // Formats date and returns corresponding string.
+  static void JSInternalFormat(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // Parses date and returns corresponding Date object or undefined if parse
+  // failed.
+  static void JSInternalParse(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+ private:
+  DateFormat();
+};
+
+}  // namespace v8_i18n
+
+#endif  // V8_EXTENSIONS_I18N_DATE_FORMAT_H_
diff --git a/deps/v8/src/extensions/i18n/date-format.js b/deps/v8/src/extensions/i18n/date-format.js
new file mode 100644 (file)
index 0000000..04e7a7c
--- /dev/null
@@ -0,0 +1,478 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+// ECMAScript 402 API implementation is broken into separate files for
+// each service. The build system combines them together into one
+// Intl namespace.
+
+/**
+ * Returns a string that matches LDML representation of the options object.
+ */
+function toLDMLString(options) {
+  var getOption = getGetOption(options, 'dateformat');
+
+  var ldmlString = '';
+
+  var option = getOption('weekday', 'string', ['narrow', 'short', 'long']);
+  ldmlString += appendToLDMLString(
+      option, {narrow: 'EEEEE', short: 'EEE', long: 'EEEE'});
+
+  option = getOption('era', 'string', ['narrow', 'short', 'long']);
+  ldmlString += appendToLDMLString(
+      option, {narrow: 'GGGGG', short: 'GGG', long: 'GGGG'});
+
+  option = getOption('year', 'string', ['2-digit', 'numeric']);
+  ldmlString += appendToLDMLString(option, {'2-digit': 'yy', 'numeric': 'y'});
+
+  option = getOption('month', 'string',
+                     ['2-digit', 'numeric', 'narrow', 'short', 'long']);
+  ldmlString += appendToLDMLString(option, {'2-digit': 'MM', 'numeric': 'M',
+          'narrow': 'MMMMM', 'short': 'MMM', 'long': 'MMMM'});
+
+  option = getOption('day', 'string', ['2-digit', 'numeric']);
+  ldmlString += appendToLDMLString(
+      option, {'2-digit': 'dd', 'numeric': 'd'});
+
+  var hr12 = getOption('hour12', 'boolean');
+  option = getOption('hour', 'string', ['2-digit', 'numeric']);
+  if (hr12 === undefined) {
+    ldmlString += appendToLDMLString(option, {'2-digit': 'jj', 'numeric': 'j'});
+  } else if (hr12 === true) {
+    ldmlString += appendToLDMLString(option, {'2-digit': 'hh', 'numeric': 'h'});
+  } else {
+    ldmlString += appendToLDMLString(option, {'2-digit': 'HH', 'numeric': 'H'});
+  }
+
+  option = getOption('minute', 'string', ['2-digit', 'numeric']);
+  ldmlString += appendToLDMLString(option, {'2-digit': 'mm', 'numeric': 'm'});
+
+  option = getOption('second', 'string', ['2-digit', 'numeric']);
+  ldmlString += appendToLDMLString(option, {'2-digit': 'ss', 'numeric': 's'});
+
+  option = getOption('timeZoneName', 'string', ['short', 'long']);
+  ldmlString += appendToLDMLString(option, {short: 'v', long: 'vv'});
+
+  return ldmlString;
+}
+
+
+/**
+ * Returns either LDML equivalent of the current option or empty string.
+ */
+function appendToLDMLString(option, pairs) {
+  if (option !== undefined) {
+    return pairs[option];
+  } else {
+    return '';
+  }
+}
+
+
+/**
+ * Returns object that matches LDML representation of the date.
+ */
+function fromLDMLString(ldmlString) {
+  // First remove '' quoted text, so we lose 'Uhr' strings.
+  ldmlString = ldmlString.replace(QUOTED_STRING_RE, '');
+
+  var options = {};
+  var match = ldmlString.match(/E{3,5}/g);
+  options = appendToDateTimeObject(
+      options, 'weekday', match, {EEEEE: 'narrow', EEE: 'short', EEEE: 'long'});
+
+  match = ldmlString.match(/G{3,5}/g);
+  options = appendToDateTimeObject(
+      options, 'era', match, {GGGGG: 'narrow', GGG: 'short', GGGG: 'long'});
+
+  match = ldmlString.match(/y{1,2}/g);
+  options = appendToDateTimeObject(
+      options, 'year', match, {y: 'numeric', yy: '2-digit'});
+
+  match = ldmlString.match(/M{1,5}/g);
+  options = appendToDateTimeObject(options, 'month', match, {MM: '2-digit',
+      M: 'numeric', MMMMM: 'narrow', MMM: 'short', MMMM: 'long'});
+
+  // Sometimes we get L instead of M for month - standalone name.
+  match = ldmlString.match(/L{1,5}/g);
+  options = appendToDateTimeObject(options, 'month', match, {LL: '2-digit',
+      L: 'numeric', LLLLL: 'narrow', LLL: 'short', LLLL: 'long'});
+
+  match = ldmlString.match(/d{1,2}/g);
+  options = appendToDateTimeObject(
+      options, 'day', match, {d: 'numeric', dd: '2-digit'});
+
+  match = ldmlString.match(/h{1,2}/g);
+  if (match !== null) {
+    options['hour12'] = true;
+  }
+  options = appendToDateTimeObject(
+      options, 'hour', match, {h: 'numeric', hh: '2-digit'});
+
+  match = ldmlString.match(/H{1,2}/g);
+  if (match !== null) {
+    options['hour12'] = false;
+  }
+  options = appendToDateTimeObject(
+      options, 'hour', match, {H: 'numeric', HH: '2-digit'});
+
+  match = ldmlString.match(/m{1,2}/g);
+  options = appendToDateTimeObject(
+      options, 'minute', match, {m: 'numeric', mm: '2-digit'});
+
+  match = ldmlString.match(/s{1,2}/g);
+  options = appendToDateTimeObject(
+      options, 'second', match, {s: 'numeric', ss: '2-digit'});
+
+  match = ldmlString.match(/v{1,2}/g);
+  options = appendToDateTimeObject(
+      options, 'timeZoneName', match, {v: 'short', vv: 'long'});
+
+  return options;
+}
+
+
+function appendToDateTimeObject(options, option, match, pairs) {
+  if (match === null) {
+    if (!options.hasOwnProperty(option)) {
+      defineWEProperty(options, option, undefined);
+    }
+    return options;
+  }
+
+  var property = match[0];
+  defineWEProperty(options, option, pairs[property]);
+
+  return options;
+}
+
+
+/**
+ * Returns options with at least default values in it.
+ */
+function toDateTimeOptions(options, required, defaults) {
+  if (options === undefined) {
+    options = null;
+  } else {
+    options = toObject(options);
+  }
+
+  options = Object.apply(this, [options]);
+
+  var needsDefault = true;
+  if ((required === 'date' || required === 'any') &&
+      (options.weekday !== undefined || options.year !== undefined ||
+       options.month !== undefined || options.day !== undefined)) {
+    needsDefault = false;
+  }
+
+  if ((required === 'time' || required === 'any') &&
+      (options.hour !== undefined || options.minute !== undefined ||
+       options.second !== undefined)) {
+    needsDefault = false;
+  }
+
+  if (needsDefault && (defaults === 'date' || defaults === 'all')) {
+    Object.defineProperty(options, 'year', {value: 'numeric',
+                                            writable: true,
+                                            enumerable: true,
+                                            configurable: true});
+    Object.defineProperty(options, 'month', {value: 'numeric',
+                                             writable: true,
+                                             enumerable: true,
+                                             configurable: true});
+    Object.defineProperty(options, 'day', {value: 'numeric',
+                                           writable: true,
+                                           enumerable: true,
+                                           configurable: true});
+  }
+
+  if (needsDefault && (defaults === 'time' || defaults === 'all')) {
+    Object.defineProperty(options, 'hour', {value: 'numeric',
+                                            writable: true,
+                                            enumerable: true,
+                                            configurable: true});
+    Object.defineProperty(options, 'minute', {value: 'numeric',
+                                              writable: true,
+                                              enumerable: true,
+                                              configurable: true});
+    Object.defineProperty(options, 'second', {value: 'numeric',
+                                              writable: true,
+                                              enumerable: true,
+                                              configurable: true});
+  }
+
+  return options;
+}
+
+
+/**
+ * Initializes the given object so it's a valid DateTimeFormat instance.
+ * Useful for subclassing.
+ */
+function initializeDateTimeFormat(dateFormat, locales, options) {
+  native function NativeJSCreateDateTimeFormat();
+
+  if (dateFormat.hasOwnProperty('__initializedIntlObject')) {
+    throw new TypeError('Trying to re-initialize DateTimeFormat object.');
+  }
+
+  if (options === undefined) {
+    options = {};
+  }
+
+  var locale = resolveLocale('dateformat', locales, options);
+
+  options = toDateTimeOptions(options, 'any', 'date');
+
+  var getOption = getGetOption(options, 'dateformat');
+
+  // We implement only best fit algorithm, but still need to check
+  // if the formatMatcher values are in range.
+  var matcher = getOption('formatMatcher', 'string',
+                          ['basic', 'best fit'], 'best fit');
+
+  // Build LDML string for the skeleton that we pass to the formatter.
+  var ldmlString = toLDMLString(options);
+
+  // Filter out supported extension keys so we know what to put in resolved
+  // section later on.
+  // We need to pass calendar and number system to the method.
+  var tz = canonicalizeTimeZoneID(options.timeZone);
+
+  // ICU prefers options to be passed using -u- extension key/values, so
+  // we need to build that.
+  var internalOptions = {};
+  var extensionMap = parseExtension(locale.extension);
+  var extension = setOptions(options, extensionMap, DATETIME_FORMAT_KEY_MAP,
+                             getOption, internalOptions);
+
+  var requestedLocale = locale.locale + extension;
+  var resolved = Object.defineProperties({}, {
+    calendar: {writable: true},
+    day: {writable: true},
+    era: {writable: true},
+    hour12: {writable: true},
+    hour: {writable: true},
+    locale: {writable: true},
+    minute: {writable: true},
+    month: {writable: true},
+    numberingSystem: {writable: true},
+    pattern: {writable: true},
+    requestedLocale: {value: requestedLocale, writable: true},
+    second: {writable: true},
+    timeZone: {writable: true},
+    timeZoneName: {writable: true},
+    tz: {value: tz, writable: true},
+    weekday: {writable: true},
+    year: {writable: true}
+  });
+
+  var formatter = NativeJSCreateDateTimeFormat(
+    requestedLocale, {skeleton: ldmlString, timeZone: tz}, resolved);
+
+  if (tz !== undefined && tz !== resolved.timeZone) {
+    throw new RangeError('Unsupported time zone specified ' + tz);
+  }
+
+  Object.defineProperty(dateFormat, 'formatter', {value: formatter});
+  Object.defineProperty(dateFormat, 'resolved', {value: resolved});
+  Object.defineProperty(dateFormat, '__initializedIntlObject',
+                        {value: 'dateformat'});
+
+  return dateFormat;
+}
+
+
+/**
+ * Constructs Intl.DateTimeFormat object given optional locales and options
+ * parameters.
+ *
+ * @constructor
+ */
+%SetProperty(Intl, 'DateTimeFormat', function() {
+    var locales = arguments[0];
+    var options = arguments[1];
+
+    if (!this || this === Intl) {
+      // Constructor is called as a function.
+      return new Intl.DateTimeFormat(locales, options);
+    }
+
+    return initializeDateTimeFormat(toObject(this), locales, options);
+  },
+  ATTRIBUTES.DONT_ENUM
+);
+
+
+/**
+ * DateTimeFormat resolvedOptions method.
+ */
+%SetProperty(Intl.DateTimeFormat.prototype, 'resolvedOptions', function() {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
+
+    if (!this || typeof this !== 'object' ||
+        this.__initializedIntlObject !== 'dateformat') {
+      throw new TypeError('resolvedOptions method called on a non-object or ' +
+          'on a object that is not Intl.DateTimeFormat.');
+    }
+
+    var format = this;
+    var fromPattern = fromLDMLString(format.resolved.pattern);
+    var userCalendar = ICU_CALENDAR_MAP[format.resolved.calendar];
+    if (userCalendar === undefined) {
+      // Use ICU name if we don't have a match. It shouldn't happen, but
+      // it would be too strict to throw for this.
+      userCalendar = format.resolved.calendar;
+    }
+
+    var locale = getOptimalLanguageTag(format.resolved.requestedLocale,
+                                       format.resolved.locale);
+
+    var result = {
+      locale: locale,
+      numberingSystem: format.resolved.numberingSystem,
+      calendar: userCalendar,
+      timeZone: format.resolved.timeZone
+    };
+
+    addWECPropertyIfDefined(result, 'timeZoneName', fromPattern.timeZoneName);
+    addWECPropertyIfDefined(result, 'era', fromPattern.era);
+    addWECPropertyIfDefined(result, 'year', fromPattern.year);
+    addWECPropertyIfDefined(result, 'month', fromPattern.month);
+    addWECPropertyIfDefined(result, 'day', fromPattern.day);
+    addWECPropertyIfDefined(result, 'weekday', fromPattern.weekday);
+    addWECPropertyIfDefined(result, 'hour12', fromPattern.hour12);
+    addWECPropertyIfDefined(result, 'hour', fromPattern.hour);
+    addWECPropertyIfDefined(result, 'minute', fromPattern.minute);
+    addWECPropertyIfDefined(result, 'second', fromPattern.second);
+
+    return result;
+  },
+  ATTRIBUTES.DONT_ENUM
+);
+%FunctionSetName(Intl.DateTimeFormat.prototype.resolvedOptions,
+                 'resolvedOptions');
+%FunctionRemovePrototype(Intl.DateTimeFormat.prototype.resolvedOptions);
+%SetNativeFlag(Intl.DateTimeFormat.prototype.resolvedOptions);
+
+
+/**
+ * Returns the subset of the given locale list for which this locale list
+ * has a matching (possibly fallback) locale. Locales appear in the same
+ * order in the returned list as in the input list.
+ * Options are optional parameter.
+ */
+%SetProperty(Intl.DateTimeFormat, 'supportedLocalesOf', function(locales) {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
+
+    return supportedLocalesOf('dateformat', locales, arguments[1]);
+  },
+  ATTRIBUTES.DONT_ENUM
+);
+%FunctionSetName(Intl.DateTimeFormat.supportedLocalesOf, 'supportedLocalesOf');
+%FunctionRemovePrototype(Intl.DateTimeFormat.supportedLocalesOf);
+%SetNativeFlag(Intl.DateTimeFormat.supportedLocalesOf);
+
+
+/**
+ * Returns a String value representing the result of calling ToNumber(date)
+ * according to the effective locale and the formatting options of this
+ * DateTimeFormat.
+ */
+function formatDate(formatter, dateValue) {
+  native function NativeJSInternalDateFormat();
+
+  var dateMs;
+  if (dateValue === undefined) {
+    dateMs = Date.now();
+  } else {
+    dateMs = Number(dateValue);
+  }
+
+  if (!isFinite(dateMs)) {
+    throw new RangeError('Provided date is not in valid range.');
+  }
+
+  return NativeJSInternalDateFormat(formatter.formatter, new Date(dateMs));
+}
+
+
+/**
+ * Returns a Date object representing the result of calling ToString(value)
+ * according to the effective locale and the formatting options of this
+ * DateTimeFormat.
+ * Returns undefined if date string cannot be parsed.
+ */
+function parseDate(formatter, value) {
+  native function NativeJSInternalDateParse();
+  return NativeJSInternalDateParse(formatter.formatter, String(value));
+}
+
+
+// 0 because date is optional argument.
+addBoundMethod(Intl.DateTimeFormat, 'format', formatDate, 0);
+addBoundMethod(Intl.DateTimeFormat, 'v8Parse', parseDate, 1);
+
+
+/**
+ * Returns canonical Area/Location name, or throws an exception if the zone
+ * name is invalid IANA name.
+ */
+function canonicalizeTimeZoneID(tzID) {
+  // Skip undefined zones.
+  if (tzID === undefined) {
+    return tzID;
+  }
+
+  // Special case handling (UTC, GMT).
+  var upperID = tzID.toUpperCase();
+  if (upperID === 'UTC' || upperID === 'GMT' ||
+      upperID === 'ETC/UTC' || upperID === 'ETC/GMT') {
+    return 'UTC';
+  }
+
+  // We expect only _ and / beside ASCII letters.
+  // All inputs should conform to Area/Location from now on.
+  var match = TIMEZONE_NAME_CHECK_RE.exec(tzID);
+  if (match === null) {
+    throw new RangeError('Expected Area/Location for time zone, got ' + tzID);
+  }
+
+  var result = toTitleCaseWord(match[1]) + '/' + toTitleCaseWord(match[2]);
+  var i = 3;
+  while (match[i] !== undefined && i < match.length) {
+    result = result + '_' + toTitleCaseWord(match[i]);
+    i++;
+  }
+
+  return result;
+}
diff --git a/deps/v8/src/extensions/i18n/footer.js b/deps/v8/src/extensions/i18n/footer.js
new file mode 100644 (file)
index 0000000..ac33f1e
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+// ECMAScript 402 API implementation is broken into separate files for
+// each service. The build system combines them together into one
+// Intl namespace.
+
+// Fix RegExp global state so we don't fail WebKit layout test:
+// fast/js/regexp-caching.html
+// It seems that 'g' or test() operations leave state changed.
+var CLEANUP_RE = new RegExp('');
+CLEANUP_RE.test('');
+
+return Intl;
+}());
diff --git a/deps/v8/src/extensions/i18n/globals.js b/deps/v8/src/extensions/i18n/globals.js
new file mode 100644 (file)
index 0000000..68fabe7
--- /dev/null
@@ -0,0 +1,168 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+
+/**
+ * List of available services.
+ */
+var AVAILABLE_SERVICES = ['collator',
+                          'numberformat',
+                          'dateformat',
+                          'breakiterator'];
+
+/**
+ * Caches available locales for each service.
+ */
+var AVAILABLE_LOCALES = {
+  'collator': undefined,
+  'numberformat': undefined,
+  'dateformat': undefined,
+  'breakiterator': undefined
+};
+
+/**
+ * Caches default ICU locale.
+ */
+var DEFAULT_ICU_LOCALE = undefined;
+
+/**
+ * Unicode extension regular expression.
+ */
+var UNICODE_EXTENSION_RE = new RegExp('-u(-[a-z0-9]{2,8})+', 'g');
+
+/**
+ * Matches any Unicode extension.
+ */
+var ANY_EXTENSION_RE = new RegExp('-[a-z0-9]{1}-.*', 'g');
+
+/**
+ * Replace quoted text (single quote, anything but the quote and quote again).
+ */
+var QUOTED_STRING_RE = new RegExp("'[^']+'", 'g');
+
+/**
+ * Matches valid service name.
+ */
+var SERVICE_RE =
+    new RegExp('^(collator|numberformat|dateformat|breakiterator)$');
+
+/**
+ * Validates a language tag against bcp47 spec.
+ * Actual value is assigned on first run.
+ */
+var LANGUAGE_TAG_RE = undefined;
+
+/**
+ * Helps find duplicate variants in the language tag.
+ */
+var LANGUAGE_VARIANT_RE = undefined;
+
+/**
+ * Helps find duplicate singletons in the language tag.
+ */
+var LANGUAGE_SINGLETON_RE = undefined;
+
+/**
+ * Matches valid IANA time zone names.
+ */
+var TIMEZONE_NAME_CHECK_RE =
+    new RegExp('^([A-Za-z]+)/([A-Za-z]+)(?:_([A-Za-z]+))*$');
+
+/**
+ * Maps ICU calendar names into LDML type.
+ */
+var ICU_CALENDAR_MAP = {
+  'gregorian': 'gregory',
+  'japanese': 'japanese',
+  'buddhist': 'buddhist',
+  'roc': 'roc',
+  'persian': 'persian',
+  'islamic-civil': 'islamicc',
+  'islamic': 'islamic',
+  'hebrew': 'hebrew',
+  'chinese': 'chinese',
+  'indian': 'indian',
+  'coptic': 'coptic',
+  'ethiopic': 'ethiopic',
+  'ethiopic-amete-alem': 'ethioaa'
+};
+
+/**
+ * Map of Unicode extensions to option properties, and their values and types,
+ * for a collator.
+ */
+var COLLATOR_KEY_MAP = {
+  'kn': {'property': 'numeric', 'type': 'boolean'},
+  'kf': {'property': 'caseFirst', 'type': 'string',
+         'values': ['false', 'lower', 'upper']}
+};
+
+/**
+ * Map of Unicode extensions to option properties, and their values and types,
+ * for a number format.
+ */
+var NUMBER_FORMAT_KEY_MAP = {
+  'nu': {'property': undefined, 'type': 'string'}
+};
+
+/**
+ * Map of Unicode extensions to option properties, and their values and types,
+ * for a date/time format.
+ */
+var DATETIME_FORMAT_KEY_MAP = {
+  'ca': {'property': undefined, 'type': 'string'},
+  'nu': {'property': undefined, 'type': 'string'}
+};
+
+/**
+ * Allowed -u-co- values. List taken from:
+ * http://unicode.org/repos/cldr/trunk/common/bcp47/collation.xml
+ */
+var ALLOWED_CO_VALUES = [
+  'big5han', 'dict', 'direct', 'ducet', 'gb2312', 'phonebk', 'phonetic',
+  'pinyin', 'reformed', 'searchjl', 'stroke', 'trad', 'unihan', 'zhuyin'
+];
+
+/**
+ * Object attributes (configurable, writable, enumerable).
+ * To combine attributes, OR them.
+ * Values/names are copied from v8/include/v8.h:PropertyAttribute
+ */
+var ATTRIBUTES = {
+  'NONE': 0,
+  'READ_ONLY': 1,
+  'DONT_ENUM': 2,
+  'DONT_DELETE': 4
+};
+
+/**
+ * Error message for when function object is created with new and it's not
+ * a constructor.
+ */
+var ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR =
+  'Function object that\'s not a constructor was created with new';
diff --git a/deps/v8/src/extensions/i18n/header.js b/deps/v8/src/extensions/i18n/header.js
new file mode 100644 (file)
index 0000000..1c0a2d8
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+// ECMAScript 402 API implementation is broken into separate files for
+// each service. The build system combines them together into one
+// Intl namespace.
+
+/**
+ * Intl object is a single object that has some named properties,
+ * all of which are constructors.
+ */
+var Intl = (function() {
+
+'use strict';
+
+var Intl = {};
diff --git a/deps/v8/src/extensions/i18n/i18n-extension.cc b/deps/v8/src/extensions/i18n/i18n-extension.cc
new file mode 100644 (file)
index 0000000..eb7652e
--- /dev/null
@@ -0,0 +1,116 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+#include "i18n-extension.h"
+
+#include "break-iterator.h"
+#include "collator.h"
+#include "date-format.h"
+#include "locale.h"
+#include "natives.h"
+#include "number-format.h"
+
+using v8::internal::I18NNatives;
+
+namespace v8_i18n {
+
+Extension::Extension()
+    : v8::Extension("v8/i18n",
+                    reinterpret_cast<const char*>(
+                        I18NNatives::GetScriptsSource().start()),
+                    0,
+                    0,
+                    I18NNatives::GetScriptsSource().length()) {}
+
+v8::Handle<v8::FunctionTemplate> Extension::GetNativeFunction(
+    v8::Handle<v8::String> name) {
+  // Standalone, helper methods.
+  if (name->Equals(v8::String::New("NativeJSCanonicalizeLanguageTag"))) {
+    return v8::FunctionTemplate::New(JSCanonicalizeLanguageTag);
+  } else if (name->Equals(v8::String::New("NativeJSAvailableLocalesOf"))) {
+    return v8::FunctionTemplate::New(JSAvailableLocalesOf);
+  } else if (name->Equals(v8::String::New("NativeJSGetDefaultICULocale"))) {
+    return v8::FunctionTemplate::New(JSGetDefaultICULocale);
+  } else if (name->Equals(v8::String::New("NativeJSGetLanguageTagVariants"))) {
+    return v8::FunctionTemplate::New(JSGetLanguageTagVariants);
+  }
+
+  // Date format and parse.
+  if (name->Equals(v8::String::New("NativeJSCreateDateTimeFormat"))) {
+    return v8::FunctionTemplate::New(DateFormat::JSCreateDateTimeFormat);
+  } else if (name->Equals(v8::String::New("NativeJSInternalDateFormat"))) {
+    return v8::FunctionTemplate::New(DateFormat::JSInternalFormat);
+  } else if (name->Equals(v8::String::New("NativeJSInternalDateParse"))) {
+    return v8::FunctionTemplate::New(DateFormat::JSInternalParse);
+  }
+
+  // Number format and parse.
+  if (name->Equals(v8::String::New("NativeJSCreateNumberFormat"))) {
+    return v8::FunctionTemplate::New(NumberFormat::JSCreateNumberFormat);
+  } else if (name->Equals(v8::String::New("NativeJSInternalNumberFormat"))) {
+    return v8::FunctionTemplate::New(NumberFormat::JSInternalFormat);
+  } else if (name->Equals(v8::String::New("NativeJSInternalNumberParse"))) {
+    return v8::FunctionTemplate::New(NumberFormat::JSInternalParse);
+  }
+
+  // Collator.
+  if (name->Equals(v8::String::New("NativeJSCreateCollator"))) {
+    return v8::FunctionTemplate::New(Collator::JSCreateCollator);
+  } else if (name->Equals(v8::String::New("NativeJSInternalCompare"))) {
+    return v8::FunctionTemplate::New(Collator::JSInternalCompare);
+  }
+
+  // Break iterator.
+  if (name->Equals(v8::String::New("NativeJSCreateBreakIterator"))) {
+    return v8::FunctionTemplate::New(BreakIterator::JSCreateBreakIterator);
+  } else if (name->Equals(v8::String::New("NativeJSBreakIteratorAdoptText"))) {
+    return v8::FunctionTemplate::New(
+        BreakIterator::JSInternalBreakIteratorAdoptText);
+  } else if (name->Equals(v8::String::New("NativeJSBreakIteratorFirst"))) {
+    return v8::FunctionTemplate::New(
+        BreakIterator::JSInternalBreakIteratorFirst);
+  } else if (name->Equals(v8::String::New("NativeJSBreakIteratorNext"))) {
+    return v8::FunctionTemplate::New(
+        BreakIterator::JSInternalBreakIteratorNext);
+  } else if (name->Equals(v8::String::New("NativeJSBreakIteratorCurrent"))) {
+    return v8::FunctionTemplate::New(
+        BreakIterator::JSInternalBreakIteratorCurrent);
+  } else if (name->Equals(v8::String::New("NativeJSBreakIteratorBreakType"))) {
+    return v8::FunctionTemplate::New(
+        BreakIterator::JSInternalBreakIteratorBreakType);
+  }
+
+  return v8::Handle<v8::FunctionTemplate>();
+}
+
+void Extension::Register() {
+  static Extension i18n_extension;
+  static v8::DeclareExtension extension_declaration(&i18n_extension);
+}
+
+}  // namespace v8_i18n
diff --git a/deps/v8/src/extensions/i18n/i18n-extension.h b/deps/v8/src/extensions/i18n/i18n-extension.h
new file mode 100644 (file)
index 0000000..050c336
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+#ifndef V8_EXTENSIONS_I18N_I18N_EXTENSION_H_
+#define V8_EXTENSIONS_I18N_I18N_EXTENSION_H_
+
+#include "v8.h"
+
+namespace v8_i18n {
+
+class Extension : public v8::Extension {
+ public:
+  Extension();
+
+  virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction(
+      v8::Handle<v8::String> name);
+
+  static void Register();
+
+ private:
+  static Extension* extension_;
+};
+
+}  // namespace v8_i18n
+
+#endif  // V8_EXTENSIONS_I18N_I18N_EXTENSION_H_
diff --git a/deps/v8/src/extensions/i18n/i18n-utils.cc b/deps/v8/src/extensions/i18n/i18n-utils.cc
new file mode 100644 (file)
index 0000000..d8d3c12
--- /dev/null
@@ -0,0 +1,174 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+#include "i18n-utils.h"
+
+#include <string.h>
+
+#include "unicode/unistr.h"
+
+namespace v8_i18n {
+
+// static
+void Utils::StrNCopy(char* dest, int length, const char* src) {
+  if (!dest || !src) return;
+
+  strncpy(dest, src, length);
+  dest[length - 1] = '\0';
+}
+
+// static
+bool Utils::V8StringToUnicodeString(const v8::Handle<v8::Value>& input,
+                                    icu::UnicodeString* output) {
+  v8::String::Utf8Value utf8_value(input);
+
+  if (*utf8_value == NULL) return false;
+
+  output->setTo(icu::UnicodeString::fromUTF8(*utf8_value));
+
+  return true;
+}
+
+// static
+bool Utils::ExtractStringSetting(const v8::Handle<v8::Object>& settings,
+                                 const char* setting,
+                                 icu::UnicodeString* result) {
+  if (!setting || !result) return false;
+
+  v8::HandleScope handle_scope;
+  v8::TryCatch try_catch;
+  v8::Handle<v8::Value> value = settings->Get(v8::String::New(setting));
+  if (try_catch.HasCaught()) {
+    return false;
+  }
+  // No need to check if |value| is empty because it's taken care of
+  // by TryCatch above.
+  if (!value->IsUndefined() && !value->IsNull() && value->IsString()) {
+    return V8StringToUnicodeString(value, result);
+  }
+  return false;
+}
+
+// static
+bool Utils::ExtractIntegerSetting(const v8::Handle<v8::Object>& settings,
+                                  const char* setting,
+                                  int32_t* result) {
+  if (!setting || !result) return false;
+
+  v8::HandleScope handle_scope;
+  v8::TryCatch try_catch;
+  v8::Handle<v8::Value> value = settings->Get(v8::String::New(setting));
+  if (try_catch.HasCaught()) {
+    return false;
+  }
+  // No need to check if |value| is empty because it's taken care of
+  // by TryCatch above.
+  if (!value->IsUndefined() && !value->IsNull() && value->IsNumber()) {
+    *result = static_cast<int32_t>(value->Int32Value());
+    return true;
+  }
+  return false;
+}
+
+// static
+bool Utils::ExtractBooleanSetting(const v8::Handle<v8::Object>& settings,
+                                  const char* setting,
+                                  bool* result) {
+  if (!setting || !result) return false;
+
+  v8::HandleScope handle_scope;
+  v8::TryCatch try_catch;
+  v8::Handle<v8::Value> value = settings->Get(v8::String::New(setting));
+  if (try_catch.HasCaught()) {
+    return false;
+  }
+  // No need to check if |value| is empty because it's taken care of
+  // by TryCatch above.
+  if (!value->IsUndefined() && !value->IsNull() && value->IsBoolean()) {
+    *result = static_cast<bool>(value->BooleanValue());
+    return true;
+  }
+  return false;
+}
+
+// static
+void Utils::AsciiToUChar(const char* source,
+                         int32_t source_length,
+                         UChar* target,
+                         int32_t target_length) {
+  int32_t length =
+      source_length < target_length ? source_length : target_length;
+
+  if (length <= 0) {
+    return;
+  }
+
+  for (int32_t i = 0; i < length - 1; ++i) {
+    target[i] = static_cast<UChar>(source[i]);
+  }
+
+  target[length - 1] = 0x0u;
+}
+
+// static
+// Chrome Linux doesn't like static initializers in class, so we create
+// template on demand.
+v8::Local<v8::ObjectTemplate> Utils::GetTemplate(v8::Isolate* isolate) {
+  static v8::Persistent<v8::ObjectTemplate> icu_template;
+
+  if (icu_template.IsEmpty()) {
+    v8::Local<v8::ObjectTemplate> raw_template(v8::ObjectTemplate::New());
+
+    // Set aside internal field for ICU class.
+    raw_template->SetInternalFieldCount(1);
+
+    icu_template.Reset(isolate, raw_template);
+  }
+
+  return v8::Local<v8::ObjectTemplate>::New(isolate, icu_template);
+}
+
+// static
+// Chrome Linux doesn't like static initializers in class, so we create
+// template on demand. This one has 2 internal fields.
+v8::Local<v8::ObjectTemplate> Utils::GetTemplate2(v8::Isolate* isolate) {
+  static v8::Persistent<v8::ObjectTemplate> icu_template_2;
+
+  if (icu_template_2.IsEmpty()) {
+    v8::Local<v8::ObjectTemplate> raw_template(v8::ObjectTemplate::New());
+
+    // Set aside internal field for ICU class and additional data.
+    raw_template->SetInternalFieldCount(2);
+
+    icu_template_2.Reset(isolate, raw_template);
+  }
+
+  return v8::Local<v8::ObjectTemplate>::New(isolate, icu_template_2);
+}
+
+}  // namespace v8_i18n
diff --git a/deps/v8/src/extensions/i18n/i18n-utils.h b/deps/v8/src/extensions/i18n/i18n-utils.h
new file mode 100644 (file)
index 0000000..db5d1b6
--- /dev/null
@@ -0,0 +1,91 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+#ifndef V8_EXTENSIONS_I18N_SRC_UTILS_H_
+#define V8_EXTENSIONS_I18N_SRC_UTILS_H_
+
+#include "unicode/uversion.h"
+#include "v8.h"
+
+namespace U_ICU_NAMESPACE {
+class UnicodeString;
+}
+
+namespace v8_i18n {
+
+class Utils {
+ public:
+  // Safe string copy. Null terminates the destination. Copies at most
+  // (length - 1) bytes.
+  // We can't use snprintf since it's not supported on all relevant platforms.
+  // We can't use OS::SNPrintF, it's only for internal code.
+  static void StrNCopy(char* dest, int length, const char* src);
+
+  // Converts v8::String into UnicodeString. Returns false if input
+  // can't be converted into utf8.
+  static bool V8StringToUnicodeString(const v8::Handle<v8::Value>& input,
+                                      icu::UnicodeString* output);
+
+  // Extract a String setting named in |settings| and set it to |result|.
+  // Return true if it's specified. Otherwise, return false.
+  static bool ExtractStringSetting(const v8::Handle<v8::Object>& settings,
+                                   const char* setting,
+                                   icu::UnicodeString* result);
+
+  // Extract a Integer setting named in |settings| and set it to |result|.
+  // Return true if it's specified. Otherwise, return false.
+  static bool ExtractIntegerSetting(const v8::Handle<v8::Object>& settings,
+                                    const char* setting,
+                                    int32_t* result);
+
+  // Extract a Boolean setting named in |settings| and set it to |result|.
+  // Return true if it's specified. Otherwise, return false.
+  static bool ExtractBooleanSetting(const v8::Handle<v8::Object>& settings,
+                                    const char* setting,
+                                    bool* result);
+
+  // Converts ASCII array into UChar array.
+  // Target is always \0 terminated.
+  static void AsciiToUChar(const char* source,
+                           int32_t source_length,
+                           UChar* target,
+                           int32_t target_length);
+
+  // Creates an ObjectTemplate with one internal field.
+  static v8::Local<v8::ObjectTemplate> GetTemplate(v8::Isolate* isolate);
+
+  // Creates an ObjectTemplate with two internal fields.
+  static v8::Local<v8::ObjectTemplate> GetTemplate2(v8::Isolate* isolate);
+
+ private:
+  Utils() {}
+};
+
+}  // namespace v8_i18n
+
+#endif  // V8_EXTENSIONS_I18N_UTILS_H_
diff --git a/deps/v8/src/extensions/i18n/i18n-utils.js b/deps/v8/src/extensions/i18n/i18n-utils.js
new file mode 100644 (file)
index 0000000..d7e9486
--- /dev/null
@@ -0,0 +1,541 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+// ECMAScript 402 API implementation is broken into separate files for
+// each service. The build system combines them together into one
+// Intl namespace.
+
+/**
+ * Adds bound method to the prototype of the given object.
+ */
+function addBoundMethod(obj, methodName, implementation, length) {
+  function getter() {
+    if (!this || typeof this !== 'object' ||
+        this.__initializedIntlObject === undefined) {
+        throw new TypeError('Method ' + methodName + ' called on a ' +
+                            'non-object or on a wrong type of object.');
+    }
+    var internalName = '__bound' + methodName + '__';
+    if (this[internalName] === undefined) {
+      var that = this;
+      var boundMethod;
+      if (length === undefined || length === 2) {
+        boundMethod = function(x, y) {
+          if (%_IsConstructCall()) {
+            throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+          }
+          return implementation(that, x, y);
+        }
+      } else if (length === 1) {
+        boundMethod = function(x) {
+          if (%_IsConstructCall()) {
+            throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+          }
+          return implementation(that, x);
+        }
+      } else {
+        boundMethod = function() {
+          if (%_IsConstructCall()) {
+            throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+          }
+          // DateTimeFormat.format needs to be 0 arg method, but can stil
+          // receive optional dateValue param. If one was provided, pass it
+          // along.
+          if (arguments.length > 0) {
+            return implementation(that, arguments[0]);
+          } else {
+            return implementation(that);
+          }
+        }
+      }
+      %FunctionSetName(boundMethod, internalName);
+      %FunctionRemovePrototype(boundMethod);
+      %SetNativeFlag(boundMethod);
+      this[internalName] = boundMethod;
+    }
+    return this[internalName];
+  }
+
+  %FunctionSetName(getter, methodName);
+  %FunctionRemovePrototype(getter);
+  %SetNativeFlag(getter);
+
+  Object.defineProperty(obj.prototype, methodName, {
+    get: getter,
+    enumerable: false,
+    configurable: true
+  });
+}
+
+
+/**
+ * Returns an intersection of locales and service supported locales.
+ * Parameter locales is treated as a priority list.
+ */
+function supportedLocalesOf(service, locales, options) {
+  if (service.match(SERVICE_RE) === null) {
+    throw new Error('Internal error, wrong service type: ' + service);
+  }
+
+  // Provide defaults if matcher was not specified.
+  if (options === undefined) {
+    options = {};
+  } else {
+    options = toObject(options);
+  }
+
+  var matcher = options.localeMatcher;
+  if (matcher !== undefined) {
+    matcher = String(matcher);
+    if (matcher !== 'lookup' && matcher !== 'best fit') {
+      throw new RangeError('Illegal value for localeMatcher:' + matcher);
+    }
+  } else {
+    matcher = 'best fit';
+  }
+
+  var requestedLocales = initializeLocaleList(locales);
+
+  // Cache these, they don't ever change per service.
+  if (AVAILABLE_LOCALES[service] === undefined) {
+    AVAILABLE_LOCALES[service] = getAvailableLocalesOf(service);
+  }
+
+  // Use either best fit or lookup algorithm to match locales.
+  if (matcher === 'best fit') {
+    return initializeLocaleList(bestFitSupportedLocalesOf(
+        requestedLocales, AVAILABLE_LOCALES[service]));
+  }
+
+  return initializeLocaleList(lookupSupportedLocalesOf(
+      requestedLocales, AVAILABLE_LOCALES[service]));
+}
+
+
+/**
+ * Returns the subset of the provided BCP 47 language priority list for which
+ * this service has a matching locale when using the BCP 47 Lookup algorithm.
+ * Locales appear in the same order in the returned list as in the input list.
+ */
+function lookupSupportedLocalesOf(requestedLocales, availableLocales) {
+  var matchedLocales = [];
+  for (var i = 0; i < requestedLocales.length; ++i) {
+    // Remove -u- extension.
+    var locale = requestedLocales[i].replace(UNICODE_EXTENSION_RE, '');
+    do {
+      if (availableLocales[locale] !== undefined) {
+        // Push requested locale not the resolved one.
+        matchedLocales.push(requestedLocales[i]);
+        break;
+      }
+      // Truncate locale if possible, if not break.
+      var pos = locale.lastIndexOf('-');
+      if (pos === -1) {
+        break;
+      }
+      locale = locale.substring(0, pos);
+    } while (true);
+  }
+
+  return matchedLocales;
+}
+
+
+/**
+ * Returns the subset of the provided BCP 47 language priority list for which
+ * this service has a matching locale when using the implementation
+ * dependent algorithm.
+ * Locales appear in the same order in the returned list as in the input list.
+ */
+function bestFitSupportedLocalesOf(requestedLocales, availableLocales) {
+  // TODO(cira): implement better best fit algorithm.
+  return lookupSupportedLocalesOf(requestedLocales, availableLocales);
+}
+
+
+/**
+ * Returns a getOption function that extracts property value for given
+ * options object. If property is missing it returns defaultValue. If value
+ * is out of range for that property it throws RangeError.
+ */
+function getGetOption(options, caller) {
+  if (options === undefined) {
+    throw new Error('Internal ' + caller + ' error. ' +
+                    'Default options are missing.');
+  }
+
+  var getOption = function getOption(property, type, values, defaultValue) {
+    if (options[property] !== undefined) {
+      var value = options[property];
+      switch (type) {
+        case 'boolean':
+          value = Boolean(value);
+          break;
+        case 'string':
+          value = String(value);
+          break;
+        case 'number':
+          value = Number(value);
+          break;
+        default:
+          throw new Error('Internal error. Wrong value type.');
+      }
+      if (values !== undefined && values.indexOf(value) === -1) {
+        throw new RangeError('Value ' + value + ' out of range for ' + caller +
+                             ' options property ' + property);
+      }
+
+      return value;
+    }
+
+    return defaultValue;
+  }
+
+  return getOption;
+}
+
+
+/**
+ * Compares a BCP 47 language priority list requestedLocales against the locales
+ * in availableLocales and determines the best available language to meet the
+ * request. Two algorithms are available to match the locales: the Lookup
+ * algorithm described in RFC 4647 section 3.4, and an implementation dependent
+ * best-fit algorithm. Independent of the locale matching algorithm, options
+ * specified through Unicode locale extension sequences are negotiated
+ * separately, taking the caller's relevant extension keys and locale data as
+ * well as client-provided options into consideration. Returns an object with
+ * a locale property whose value is the language tag of the selected locale,
+ * and properties for each key in relevantExtensionKeys providing the selected
+ * value for that key.
+ */
+function resolveLocale(service, requestedLocales, options) {
+  requestedLocales = initializeLocaleList(requestedLocales);
+
+  var getOption = getGetOption(options, service);
+  var matcher = getOption('localeMatcher', 'string',
+                          ['lookup', 'best fit'], 'best fit');
+  var resolved;
+  if (matcher === 'lookup') {
+    resolved = lookupMatcher(service, requestedLocales);
+  } else {
+    resolved = bestFitMatcher(service, requestedLocales);
+  }
+
+  return resolved;
+}
+
+
+/**
+ * Returns best matched supported locale and extension info using basic
+ * lookup algorithm.
+ */
+function lookupMatcher(service, requestedLocales) {
+  native function NativeJSGetDefaultICULocale();
+
+  if (service.match(SERVICE_RE) === null) {
+    throw new Error('Internal error, wrong service type: ' + service);
+  }
+
+  // Cache these, they don't ever change per service.
+  if (AVAILABLE_LOCALES[service] === undefined) {
+    AVAILABLE_LOCALES[service] = getAvailableLocalesOf(service);
+  }
+
+  for (var i = 0; i < requestedLocales.length; ++i) {
+    // Remove all extensions.
+    var locale = requestedLocales[i].replace(ANY_EXTENSION_RE, '');
+    do {
+      if (AVAILABLE_LOCALES[service][locale] !== undefined) {
+        // Return the resolved locale and extension.
+        var extensionMatch = requestedLocales[i].match(UNICODE_EXTENSION_RE);
+        var extension = (extensionMatch === null) ? '' : extensionMatch[0];
+        return {'locale': locale, 'extension': extension, 'position': i};
+      }
+      // Truncate locale if possible.
+      var pos = locale.lastIndexOf('-');
+      if (pos === -1) {
+        break;
+      }
+      locale = locale.substring(0, pos);
+    } while (true);
+  }
+
+  // Didn't find a match, return default.
+  if (DEFAULT_ICU_LOCALE === undefined) {
+    DEFAULT_ICU_LOCALE = NativeJSGetDefaultICULocale();
+  }
+
+  return {'locale': DEFAULT_ICU_LOCALE, 'extension': '', 'position': -1};
+}
+
+
+/**
+ * Returns best matched supported locale and extension info using
+ * implementation dependend algorithm.
+ */
+function bestFitMatcher(service, requestedLocales) {
+  // TODO(cira): implement better best fit algorithm.
+  return lookupMatcher(service, requestedLocales);
+}
+
+
+/**
+ * Parses Unicode extension into key - value map.
+ * Returns empty object if the extension string is invalid.
+ * We are not concerned with the validity of the values at this point.
+ */
+function parseExtension(extension) {
+  var extensionSplit = extension.split('-');
+
+  // Assume ['', 'u', ...] input, but don't throw.
+  if (extensionSplit.length <= 2 ||
+      (extensionSplit[0] !== '' && extensionSplit[1] !== 'u')) {
+    return {};
+  }
+
+  // Key is {2}alphanum, value is {3,8}alphanum.
+  // Some keys may not have explicit values (booleans).
+  var extensionMap = {};
+  var previousKey = undefined;
+  for (var i = 2; i < extensionSplit.length; ++i) {
+    var length = extensionSplit[i].length;
+    var element = extensionSplit[i];
+    if (length === 2) {
+      extensionMap[element] = undefined;
+      previousKey = element;
+    } else if (length >= 3 && length <=8 && previousKey !== undefined) {
+      extensionMap[previousKey] = element;
+      previousKey = undefined;
+    } else {
+      // There is a value that's too long, or that doesn't have a key.
+      return {};
+    }
+  }
+
+  return extensionMap;
+}
+
+
+/**
+ * Converts parameter to an Object if possible.
+ */
+function toObject(value) {
+  if (value === undefined || value === null) {
+    throw new TypeError('Value cannot be converted to an Object.');
+  }
+
+  return Object(value);
+}
+
+
+/**
+ * Populates internalOptions object with boolean key-value pairs
+ * from extensionMap and options.
+ * Returns filtered extension (number and date format constructors use
+ * Unicode extensions for passing parameters to ICU).
+ * It's used for extension-option pairs only, e.g. kn-normalization, but not
+ * for 'sensitivity' since it doesn't have extension equivalent.
+ * Extensions like nu and ca don't have options equivalent, so we place
+ * undefined in the map.property to denote that.
+ */
+function setOptions(inOptions, extensionMap, keyValues, getOption, outOptions) {
+  var extension = '';
+
+  var updateExtension = function updateExtension(key, value) {
+    return '-' + key + '-' + String(value);
+  }
+
+  var updateProperty = function updateProperty(property, type, value) {
+    if (type === 'boolean' && (typeof value === 'string')) {
+      value = (value === 'true') ? true : false;
+    }
+
+    if (property !== undefined) {
+      defineWEProperty(outOptions, property, value);
+    }
+  }
+
+  for (var key in keyValues) {
+    if (keyValues.hasOwnProperty(key)) {
+      var value = undefined;
+      var map = keyValues[key];
+      if (map.property !== undefined) {
+        // This may return true if user specifies numeric: 'false', since
+        // Boolean('nonempty') === true.
+        value = getOption(map.property, map.type, map.values);
+      }
+      if (value !== undefined) {
+        updateProperty(map.property, map.type, value);
+        extension += updateExtension(key, value);
+        continue;
+      }
+      // User options didn't have it, check Unicode extension.
+      // Here we want to convert strings 'true', 'false' into proper Boolean
+      // values (not a user error).
+      if (extensionMap.hasOwnProperty(key)) {
+        value = extensionMap[key];
+        if (value !== undefined) {
+          updateProperty(map.property, map.type, value);
+          extension += updateExtension(key, value);
+        } else if (map.type === 'boolean') {
+          // Boolean keys are allowed not to have values in Unicode extension.
+          // Those default to true.
+          updateProperty(map.property, map.type, true);
+          extension += updateExtension(key, true);
+        }
+      }
+    }
+  }
+
+  return extension === ''? '' : '-u' + extension;
+}
+
+
+/**
+ * Converts all OwnProperties into
+ * configurable: false, writable: false, enumerable: true.
+ */
+function freezeArray(array) {
+  array.forEach(function(element, index) {
+    Object.defineProperty(array, index, {value: element,
+                                         configurable: false,
+                                         writable: false,
+                                         enumerable: true});
+  });
+
+  Object.defineProperty(array, 'length', {value: array.length,
+                                          writable: false});
+
+  return array;
+}
+
+
+/**
+ * It's sometimes desireable to leave user requested locale instead of ICU
+ * supported one (zh-TW is equivalent to zh-Hant-TW, so we should keep shorter
+ * one, if that was what user requested).
+ * This function returns user specified tag if its maximized form matches ICU
+ * resolved locale. If not we return ICU result.
+ */
+function getOptimalLanguageTag(original, resolved) {
+  // Returns Array<Object>, where each object has maximized and base properties.
+  // Maximized: zh -> zh-Hans-CN
+  // Base: zh-CN-u-ca-gregory -> zh-CN
+  native function NativeJSGetLanguageTagVariants();
+
+  // Take care of grandfathered or simple cases.
+  if (original === resolved) {
+    return original;
+  }
+
+  var locales = NativeJSGetLanguageTagVariants([original, resolved]);
+  if (locales[0].maximized !== locales[1].maximized) {
+    return resolved;
+  }
+
+  // Preserve extensions of resolved locale, but swap base tags with original.
+  var resolvedBase = new RegExp('^' + locales[1].base);
+  return resolved.replace(resolvedBase, locales[0].base);
+}
+
+
+/**
+ * Returns an Object that contains all of supported locales for a given
+ * service.
+ * In addition to the supported locales we add xx-ZZ locale for each xx-Yyyy-ZZ
+ * that is supported. This is required by the spec.
+ */
+function getAvailableLocalesOf(service) {
+  native function NativeJSAvailableLocalesOf();
+  var available = NativeJSAvailableLocalesOf(service);
+
+  for (var i in available) {
+    if (available.hasOwnProperty(i)) {
+      var parts = i.match(/^([a-z]{2,3})-([A-Z][a-z]{3})-([A-Z]{2})$/);
+      if (parts !== null) {
+        // Build xx-ZZ. We don't care about the actual value,
+        // as long it's not undefined.
+        available[parts[1] + '-' + parts[3]] = null;
+      }
+    }
+  }
+
+  return available;
+}
+
+
+/**
+ * Defines a property and sets writable and enumerable to true.
+ * Configurable is false by default.
+ */
+function defineWEProperty(object, property, value) {
+  Object.defineProperty(object, property,
+                        {value: value, writable: true, enumerable: true});
+}
+
+
+/**
+ * Adds property to an object if the value is not undefined.
+ * Sets configurable descriptor to false.
+ */
+function addWEPropertyIfDefined(object, property, value) {
+  if (value !== undefined) {
+    defineWEProperty(object, property, value);
+  }
+}
+
+
+/**
+ * Defines a property and sets writable, enumerable and configurable to true.
+ */
+function defineWECProperty(object, property, value) {
+  Object.defineProperty(object, property,
+                        {value: value,
+                         writable: true,
+                         enumerable: true,
+                         configurable: true});
+}
+
+
+/**
+ * Adds property to an object if the value is not undefined.
+ * Sets all descriptors to true.
+ */
+function addWECPropertyIfDefined(object, property, value) {
+  if (value !== undefined) {
+    defineWECProperty(object, property, value);
+  }
+}
+
+
+/**
+ * Returns titlecased word, aMeRricA -> America.
+ */
+function toTitleCaseWord(word) {
+  return word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase();
+}
diff --git a/deps/v8/src/extensions/i18n/locale.cc b/deps/v8/src/extensions/i18n/locale.cc
new file mode 100644 (file)
index 0000000..b32cc30
--- /dev/null
@@ -0,0 +1,248 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+#include "locale.h"
+
+#include <string.h>
+
+#include "unicode/brkiter.h"
+#include "unicode/coll.h"
+#include "unicode/datefmt.h"
+#include "unicode/numfmt.h"
+#include "unicode/uloc.h"
+#include "unicode/uversion.h"
+
+namespace v8_i18n {
+
+void JSCanonicalizeLanguageTag(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  // Expect locale id which is a string.
+  if (args.Length() != 1 || !args[0]->IsString()) {
+    v8::ThrowException(v8::Exception::SyntaxError(
+        v8::String::New("Locale identifier, as a string, is required.")));
+    return;
+  }
+
+  UErrorCode error = U_ZERO_ERROR;
+
+  char icu_result[ULOC_FULLNAME_CAPACITY];
+  int icu_length = 0;
+
+  // Return value which denotes invalid language tag.
+  const char* const kInvalidTag = "invalid-tag";
+
+  v8::String::AsciiValue locale_id(args[0]->ToString());
+  if (*locale_id == NULL) {
+    args.GetReturnValue().Set(v8::String::New(kInvalidTag));
+    return;
+  }
+
+  uloc_forLanguageTag(*locale_id, icu_result, ULOC_FULLNAME_CAPACITY,
+                      &icu_length, &error);
+  if (U_FAILURE(error) || icu_length == 0) {
+    args.GetReturnValue().Set(v8::String::New(kInvalidTag));
+    return;
+  }
+
+  char result[ULOC_FULLNAME_CAPACITY];
+
+  // Force strict BCP47 rules.
+  uloc_toLanguageTag(icu_result, result, ULOC_FULLNAME_CAPACITY, TRUE, &error);
+
+  if (U_FAILURE(error)) {
+    args.GetReturnValue().Set(v8::String::New(kInvalidTag));
+    return;
+  }
+
+  args.GetReturnValue().Set(v8::String::New(result));
+}
+
+void JSAvailableLocalesOf(const v8::FunctionCallbackInfo<v8::Value>& args) {
+  // Expect service name which is a string.
+  if (args.Length() != 1 || !args[0]->IsString()) {
+    v8::ThrowException(v8::Exception::SyntaxError(
+        v8::String::New("Service identifier, as a string, is required.")));
+    return;
+  }
+
+  const icu::Locale* available_locales = NULL;
+
+  int32_t count = 0;
+  v8::String::AsciiValue service(args[0]->ToString());
+  if (strcmp(*service, "collator") == 0) {
+    available_locales = icu::Collator::getAvailableLocales(count);
+  } else if (strcmp(*service, "numberformat") == 0) {
+    available_locales = icu::NumberFormat::getAvailableLocales(count);
+  } else if (strcmp(*service, "dateformat") == 0) {
+    available_locales = icu::DateFormat::getAvailableLocales(count);
+  } else if (strcmp(*service, "breakiterator") == 0) {
+    available_locales = icu::BreakIterator::getAvailableLocales(count);
+  }
+
+  v8::TryCatch try_catch;
+  UErrorCode error = U_ZERO_ERROR;
+  char result[ULOC_FULLNAME_CAPACITY];
+  v8::Handle<v8::Object> locales = v8::Object::New();
+
+  for (int32_t i = 0; i < count; ++i) {
+    const char* icu_name = available_locales[i].getName();
+
+    error = U_ZERO_ERROR;
+    // No need to force strict BCP47 rules.
+    uloc_toLanguageTag(icu_name, result, ULOC_FULLNAME_CAPACITY, FALSE, &error);
+    if (U_FAILURE(error)) {
+      // This shouldn't happen, but lets not break the user.
+      continue;
+    }
+
+    // Index is just a dummy value for the property value.
+    locales->Set(v8::String::New(result), v8::Integer::New(i));
+    if (try_catch.HasCaught()) {
+      // Ignore error, but stop processing and return.
+      break;
+    }
+  }
+
+  args.GetReturnValue().Set(locales);
+}
+
+void JSGetDefaultICULocale(const v8::FunctionCallbackInfo<v8::Value>& args) {
+  icu::Locale default_locale;
+
+  // Set the locale
+  char result[ULOC_FULLNAME_CAPACITY];
+  UErrorCode status = U_ZERO_ERROR;
+  uloc_toLanguageTag(
+      default_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status);
+  if (U_SUCCESS(status)) {
+    args.GetReturnValue().Set(v8::String::New(result));
+    return;
+  }
+
+  args.GetReturnValue().Set(v8::String::New("und"));
+}
+
+void JSGetLanguageTagVariants(const v8::FunctionCallbackInfo<v8::Value>& args) {
+  v8::TryCatch try_catch;
+
+  // Expect an array of strings.
+  if (args.Length() != 1 || !args[0]->IsArray()) {
+    v8::ThrowException(v8::Exception::SyntaxError(
+        v8::String::New("Internal error. Expected Array<String>.")));
+    return;
+  }
+
+  v8::Local<v8::Array> input = v8::Local<v8::Array>::Cast(args[0]);
+  v8::Handle<v8::Array> output = v8::Array::New(input->Length());
+  for (unsigned int i = 0; i < input->Length(); ++i) {
+    v8::Local<v8::Value> locale_id = input->Get(i);
+    if (try_catch.HasCaught()) {
+      break;
+    }
+
+    if (!locale_id->IsString()) {
+      v8::ThrowException(v8::Exception::SyntaxError(
+          v8::String::New("Internal error. Array element is missing "
+                          "or it isn't a string.")));
+      return;
+    }
+
+    v8::String::AsciiValue ascii_locale_id(locale_id);
+    if (*ascii_locale_id == NULL) {
+      v8::ThrowException(v8::Exception::SyntaxError(
+          v8::String::New("Internal error. Non-ASCII locale identifier.")));
+      return;
+    }
+
+    UErrorCode error = U_ZERO_ERROR;
+
+    // Convert from BCP47 to ICU format.
+    // de-DE-u-co-phonebk -> de_DE@collation=phonebook
+    char icu_locale[ULOC_FULLNAME_CAPACITY];
+    int icu_locale_length = 0;
+    uloc_forLanguageTag(*ascii_locale_id, icu_locale, ULOC_FULLNAME_CAPACITY,
+                        &icu_locale_length, &error);
+    if (U_FAILURE(error) || icu_locale_length == 0) {
+      v8::ThrowException(v8::Exception::SyntaxError(
+          v8::String::New("Internal error. Failed to convert locale to ICU.")));
+      return;
+    }
+
+    // Maximize the locale.
+    // de_DE@collation=phonebook -> de_Latn_DE@collation=phonebook
+    char icu_max_locale[ULOC_FULLNAME_CAPACITY];
+    uloc_addLikelySubtags(
+        icu_locale, icu_max_locale, ULOC_FULLNAME_CAPACITY, &error);
+
+    // Remove extensions from maximized locale.
+    // de_Latn_DE@collation=phonebook -> de_Latn_DE
+    char icu_base_max_locale[ULOC_FULLNAME_CAPACITY];
+    uloc_getBaseName(
+        icu_max_locale, icu_base_max_locale, ULOC_FULLNAME_CAPACITY, &error);
+
+    // Get original name without extensions.
+    // de_DE@collation=phonebook -> de_DE
+    char icu_base_locale[ULOC_FULLNAME_CAPACITY];
+    uloc_getBaseName(
+        icu_locale, icu_base_locale, ULOC_FULLNAME_CAPACITY, &error);
+
+    // Convert from ICU locale format to BCP47 format.
+    // de_Latn_DE -> de-Latn-DE
+    char base_max_locale[ULOC_FULLNAME_CAPACITY];
+    uloc_toLanguageTag(icu_base_max_locale, base_max_locale,
+                       ULOC_FULLNAME_CAPACITY, FALSE, &error);
+
+    // de_DE -> de-DE
+    char base_locale[ULOC_FULLNAME_CAPACITY];
+    uloc_toLanguageTag(
+        icu_base_locale, base_locale, ULOC_FULLNAME_CAPACITY, FALSE, &error);
+
+    if (U_FAILURE(error)) {
+      v8::ThrowException(v8::Exception::SyntaxError(
+          v8::String::New("Internal error. Couldn't generate maximized "
+                          "or base locale.")));
+      return;
+    }
+
+    v8::Handle<v8::Object> result = v8::Object::New();
+    result->Set(v8::String::New("maximized"), v8::String::New(base_max_locale));
+    result->Set(v8::String::New("base"), v8::String::New(base_locale));
+    if (try_catch.HasCaught()) {
+      break;
+    }
+
+    output->Set(i, result);
+    if (try_catch.HasCaught()) {
+      break;
+    }
+  }
+
+  args.GetReturnValue().Set(output);
+}
+
+}  // namespace v8_i18n
diff --git a/deps/v8/src/extensions/i18n/locale.h b/deps/v8/src/extensions/i18n/locale.h
new file mode 100644 (file)
index 0000000..c39568e
--- /dev/null
@@ -0,0 +1,56 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+#ifndef V8_EXTENSIONS_I18N_SRC_LOCALE_H_
+#define V8_EXTENSIONS_I18N_SRC_LOCALE_H_
+
+#include "unicode/uversion.h"
+#include "v8.h"
+
+namespace v8_i18n {
+
+// Canonicalizes the BCP47 language tag using BCP47 rules.
+// Returns 'invalid-tag' in case input was not well formed.
+void JSCanonicalizeLanguageTag(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+// Returns a list of available locales for collator, date or number formatter.
+void JSAvailableLocalesOf(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+// Returns default ICU locale.
+void JSGetDefaultICULocale(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+// Returns an array of objects, that have maximized and base names of inputs.
+// Unicode extensions are dropped from both.
+// Input: ['zh-TW-u-nu-thai', 'sr']
+// Output: [{maximized: 'zh-Hant-TW', base: 'zh-TW'},
+//          {maximized: 'sr-Cyrl-RS', base: 'sr'}]
+void JSGetLanguageTagVariants(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+}  // namespace v8_i18n
+
+#endif  // V8_EXTENSIONS_I18N_LOCALE_H_
diff --git a/deps/v8/src/extensions/i18n/locale.js b/deps/v8/src/extensions/i18n/locale.js
new file mode 100644 (file)
index 0000000..ea95b87
--- /dev/null
@@ -0,0 +1,192 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+// ECMAScript 402 API implementation is broken into separate files for
+// each service. The build system combines them together into one
+// Intl namespace.
+
+/**
+ * Canonicalizes the language tag, or throws in case the tag is invalid.
+ */
+function canonicalizeLanguageTag(localeID) {
+  native function NativeJSCanonicalizeLanguageTag();
+
+  // null is typeof 'object' so we have to do extra check.
+  if (typeof localeID !== 'string' && typeof localeID !== 'object' ||
+      localeID === null) {
+    throw new TypeError('Language ID should be string or object.');
+  }
+
+  var localeString = String(localeID);
+
+  if (isValidLanguageTag(localeString) === false) {
+    throw new RangeError('Invalid language tag: ' + localeString);
+  }
+
+  // This call will strip -kn but not -kn-true extensions.
+  // ICU bug filled - http://bugs.icu-project.org/trac/ticket/9265.
+  // TODO(cira): check if -u-kn-true-kc-true-kh-true still throws after
+  // upgrade to ICU 4.9.
+  var tag = NativeJSCanonicalizeLanguageTag(localeString);
+  if (tag === 'invalid-tag') {
+    throw new RangeError('Invalid language tag: ' + localeString);
+  }
+
+  return tag;
+}
+
+
+/**
+ * Returns an array where all locales are canonicalized and duplicates removed.
+ * Throws on locales that are not well formed BCP47 tags.
+ */
+function initializeLocaleList(locales) {
+  var seen = [];
+  if (locales === undefined) {
+    // Constructor is called without arguments.
+    seen = [];
+  } else {
+    // We allow single string localeID.
+    if (typeof locales === 'string') {
+      seen.push(canonicalizeLanguageTag(locales));
+      return freezeArray(seen);
+    }
+
+    var o = toObject(locales);
+    // Converts it to UInt32 (>>> is shr on 32bit integers).
+    var len = o.length >>> 0;
+
+    for (var k = 0; k < len; k++) {
+      if (k in o) {
+        var value = o[k];
+
+        var tag = canonicalizeLanguageTag(value);
+
+        if (seen.indexOf(tag) === -1) {
+          seen.push(tag);
+        }
+      }
+    }
+  }
+
+  return freezeArray(seen);
+}
+
+
+/**
+ * Validates the language tag. Section 2.2.9 of the bcp47 spec
+ * defines a valid tag.
+ *
+ * ICU is too permissible and lets invalid tags, like
+ * hant-cmn-cn, through.
+ *
+ * Returns false if the language tag is invalid.
+ */
+function isValidLanguageTag(locale) {
+  // Check if it's well-formed, including grandfadered tags.
+  if (LANGUAGE_TAG_RE.test(locale) === false) {
+    return false;
+  }
+
+  // Just return if it's a x- form. It's all private.
+  if (locale.indexOf('x-') === 0) {
+    return true;
+  }
+
+  // Check if there are any duplicate variants or singletons (extensions).
+
+  // Remove private use section.
+  locale = locale.split(/-x-/)[0];
+
+  // Skip language since it can match variant regex, so we start from 1.
+  // We are matching i-klingon here, but that's ok, since i-klingon-klingon
+  // is not valid and would fail LANGUAGE_TAG_RE test.
+  var variants = [];
+  var extensions = [];
+  var parts = locale.split(/-/);
+  for (var i = 1; i < parts.length; i++) {
+    var value = parts[i];
+    if (LANGUAGE_VARIANT_RE.test(value) === true && extensions.length === 0) {
+      if (variants.indexOf(value) === -1) {
+        variants.push(value);
+      } else {
+        return false;
+      }
+    }
+
+    if (LANGUAGE_SINGLETON_RE.test(value) === true) {
+      if (extensions.indexOf(value) === -1) {
+        extensions.push(value);
+      } else {
+        return false;
+      }
+    }
+  }
+
+  return true;
+ }
+
+
+/**
+ * Builds a regular expresion that validates the language tag
+ * against bcp47 spec.
+ * Uses http://tools.ietf.org/html/bcp47, section 2.1, ABNF.
+ * Runs on load and initializes the global REs.
+ */
+(function() {
+  var alpha = '[a-zA-Z]';
+  var digit = '[0-9]';
+  var alphanum = '(' + alpha + '|' + digit + ')';
+  var regular = '(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|' +
+                'zh-min|zh-min-nan|zh-xiang)';
+  var irregular = '(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|' +
+                  'i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|' +
+                  'i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)';
+  var grandfathered = '(' + irregular + '|' + regular + ')';
+  var privateUse = '(x(-' + alphanum + '{1,8})+)';
+
+  var singleton = '(' + digit + '|[A-WY-Za-wy-z])';
+  LANGUAGE_SINGLETON_RE = new RegExp('^' + singleton + '$', 'i');
+
+  var extension = '(' + singleton + '(-' + alphanum + '{2,8})+)';
+
+  var variant = '(' + alphanum + '{5,8}|(' + digit + alphanum + '{3}))';
+  LANGUAGE_VARIANT_RE = new RegExp('^' + variant + '$', 'i');
+
+  var region = '(' + alpha + '{2}|' + digit + '{3})';
+  var script = '(' + alpha + '{4})';
+  var extLang = '(' + alpha + '{3}(-' + alpha + '{3}){0,2})';
+  var language = '(' + alpha + '{2,3}(-' + extLang + ')?|' + alpha + '{4}|' +
+                 alpha + '{5,8})';
+  var langTag = language + '(-' + script + ')?(-' + region + ')?(-' +
+                variant + ')*(-' + extension + ')*(-' + privateUse + ')?';
+
+  var languageTag =
+      '^(' + langTag + '|' + privateUse + '|' + grandfathered + ')$';
+  LANGUAGE_TAG_RE = new RegExp(languageTag, 'i');
+})();
diff --git a/deps/v8/src/extensions/i18n/number-format.cc b/deps/v8/src/extensions/i18n/number-format.cc
new file mode 100644 (file)
index 0000000..2240b08
--- /dev/null
@@ -0,0 +1,418 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+#include "number-format.h"
+
+#include <string.h>
+
+#include "i18n-utils.h"
+#include "unicode/curramt.h"
+#include "unicode/dcfmtsym.h"
+#include "unicode/decimfmt.h"
+#include "unicode/locid.h"
+#include "unicode/numfmt.h"
+#include "unicode/numsys.h"
+#include "unicode/uchar.h"
+#include "unicode/ucurr.h"
+#include "unicode/unum.h"
+#include "unicode/uversion.h"
+
+namespace v8_i18n {
+
+static icu::DecimalFormat* InitializeNumberFormat(v8::Handle<v8::String>,
+                                                  v8::Handle<v8::Object>,
+                                                  v8::Handle<v8::Object>);
+static icu::DecimalFormat* CreateICUNumberFormat(const icu::Locale&,
+                                                 v8::Handle<v8::Object>);
+static void SetResolvedSettings(const icu::Locale&,
+                                icu::DecimalFormat*,
+                                v8::Handle<v8::Object>);
+
+icu::DecimalFormat* NumberFormat::UnpackNumberFormat(
+    v8::Handle<v8::Object> obj) {
+  v8::HandleScope handle_scope;
+
+  // v8::ObjectTemplate doesn't have HasInstance method so we can't check
+  // if obj is an instance of NumberFormat class. We'll check for a property
+  // that has to be in the object. The same applies to other services, like
+  // Collator and DateTimeFormat.
+  if (obj->HasOwnProperty(v8::String::New("numberFormat"))) {
+    return static_cast<icu::DecimalFormat*>(
+        obj->GetAlignedPointerFromInternalField(0));
+  }
+
+  return NULL;
+}
+
+void NumberFormat::DeleteNumberFormat(v8::Isolate* isolate,
+                                      v8::Persistent<v8::Object>* object,
+                                      void* param) {
+  // First delete the hidden C++ object.
+  // Unpacking should never return NULL here. That would only happen if
+  // this method is used as the weak callback for persistent handles not
+  // pointing to a date time formatter.
+  v8::HandleScope handle_scope(isolate);
+  v8::Local<v8::Object> handle = v8::Local<v8::Object>::New(isolate, *object);
+  delete UnpackNumberFormat(handle);
+
+  // Then dispose of the persistent handle to JS object.
+  object->Dispose(isolate);
+}
+
+void NumberFormat::JSInternalFormat(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  if (args.Length() != 2 || !args[0]->IsObject() || !args[1]->IsNumber()) {
+    v8::ThrowException(v8::Exception::Error(
+        v8::String::New("Formatter and numeric value have to be specified.")));
+    return;
+  }
+
+  icu::DecimalFormat* number_format = UnpackNumberFormat(args[0]->ToObject());
+  if (!number_format) {
+    v8::ThrowException(v8::Exception::Error(
+        v8::String::New("NumberFormat method called on an object "
+                        "that is not a NumberFormat.")));
+    return;
+  }
+
+  // ICU will handle actual NaN value properly and return NaN string.
+  icu::UnicodeString result;
+  number_format->format(args[1]->NumberValue(), result);
+
+  args.GetReturnValue().Set(v8::String::New(
+      reinterpret_cast<const uint16_t*>(result.getBuffer()), result.length()));
+}
+
+void NumberFormat::JSInternalParse(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  if (args.Length() != 2 || !args[0]->IsObject() || !args[1]->IsString()) {
+    v8::ThrowException(v8::Exception::Error(
+        v8::String::New("Formatter and string have to be specified.")));
+    return;
+  }
+
+  icu::DecimalFormat* number_format = UnpackNumberFormat(args[0]->ToObject());
+  if (!number_format) {
+    v8::ThrowException(v8::Exception::Error(
+        v8::String::New("NumberFormat method called on an object "
+                        "that is not a NumberFormat.")));
+    return;
+  }
+
+  // ICU will handle actual NaN value properly and return NaN string.
+  icu::UnicodeString string_number;
+  if (!Utils::V8StringToUnicodeString(args[1]->ToString(), &string_number)) {
+    string_number = "";
+  }
+
+  UErrorCode status = U_ZERO_ERROR;
+  icu::Formattable result;
+  // ICU 4.6 doesn't support parseCurrency call. We need to wait for ICU49
+  // to be part of Chrome.
+  // TODO(cira): Include currency parsing code using parseCurrency call.
+  // We need to check if the formatter parses all currencies or only the
+  // one it was constructed with (it will impact the API - how to return ISO
+  // code and the value).
+  number_format->parse(string_number, result, status);
+  if (U_FAILURE(status)) {
+    return;
+  }
+
+  switch (result.getType()) {
+  case icu::Formattable::kDouble:
+    args.GetReturnValue().Set(result.getDouble());
+    return;
+  case icu::Formattable::kLong:
+    args.GetReturnValue().Set(v8::Number::New(result.getLong()));
+    return;
+  case icu::Formattable::kInt64:
+    args.GetReturnValue().Set(v8::Number::New(result.getInt64()));
+    return;
+  default:
+    return;
+  }
+}
+
+void NumberFormat::JSCreateNumberFormat(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  if (args.Length() != 3 ||
+      !args[0]->IsString() ||
+      !args[1]->IsObject() ||
+      !args[2]->IsObject()) {
+    v8::ThrowException(v8::Exception::Error(
+        v8::String::New("Internal error, wrong parameters.")));
+    return;
+  }
+
+  v8::Isolate* isolate = args.GetIsolate();
+  v8::Local<v8::ObjectTemplate> number_format_template =
+      Utils::GetTemplate(isolate);
+
+  // Create an empty object wrapper.
+  v8::Local<v8::Object> local_object = number_format_template->NewInstance();
+  // But the handle shouldn't be empty.
+  // That can happen if there was a stack overflow when creating the object.
+  if (local_object.IsEmpty()) {
+    args.GetReturnValue().Set(local_object);
+    return;
+  }
+
+  // Set number formatter as internal field of the resulting JS object.
+  icu::DecimalFormat* number_format = InitializeNumberFormat(
+      args[0]->ToString(), args[1]->ToObject(), args[2]->ToObject());
+
+  if (!number_format) {
+    v8::ThrowException(v8::Exception::Error(v8::String::New(
+        "Internal error. Couldn't create ICU number formatter.")));
+    return;
+  } else {
+    local_object->SetAlignedPointerInInternalField(0, number_format);
+
+    v8::TryCatch try_catch;
+    local_object->Set(v8::String::New("numberFormat"),
+                      v8::String::New("valid"));
+    if (try_catch.HasCaught()) {
+      v8::ThrowException(v8::Exception::Error(
+          v8::String::New("Internal error, couldn't set property.")));
+      return;
+    }
+  }
+
+  v8::Persistent<v8::Object> wrapper(isolate, local_object);
+  // Make object handle weak so we can delete iterator once GC kicks in.
+  wrapper.MakeWeak<void>(NULL, &DeleteNumberFormat);
+  args.GetReturnValue().Set(wrapper);
+  wrapper.ClearAndLeak();
+}
+
+static icu::DecimalFormat* InitializeNumberFormat(
+    v8::Handle<v8::String> locale,
+    v8::Handle<v8::Object> options,
+    v8::Handle<v8::Object> resolved) {
+  // Convert BCP47 into ICU locale format.
+  UErrorCode status = U_ZERO_ERROR;
+  icu::Locale icu_locale;
+  char icu_result[ULOC_FULLNAME_CAPACITY];
+  int icu_length = 0;
+  v8::String::AsciiValue bcp47_locale(locale);
+  if (bcp47_locale.length() != 0) {
+    uloc_forLanguageTag(*bcp47_locale, icu_result, ULOC_FULLNAME_CAPACITY,
+                        &icu_length, &status);
+    if (U_FAILURE(status) || icu_length == 0) {
+      return NULL;
+    }
+    icu_locale = icu::Locale(icu_result);
+  }
+
+  icu::DecimalFormat* number_format =
+      CreateICUNumberFormat(icu_locale, options);
+  if (!number_format) {
+    // Remove extensions and try again.
+    icu::Locale no_extension_locale(icu_locale.getBaseName());
+    number_format = CreateICUNumberFormat(no_extension_locale, options);
+
+    // Set resolved settings (pattern, numbering system).
+    SetResolvedSettings(no_extension_locale, number_format, resolved);
+  } else {
+    SetResolvedSettings(icu_locale, number_format, resolved);
+  }
+
+  return number_format;
+}
+
+static icu::DecimalFormat* CreateICUNumberFormat(
+    const icu::Locale& icu_locale, v8::Handle<v8::Object> options) {
+  // Make formatter from options. Numbering system is added
+  // to the locale as Unicode extension (if it was specified at all).
+  UErrorCode status = U_ZERO_ERROR;
+  icu::DecimalFormat* number_format = NULL;
+  icu::UnicodeString style;
+  icu::UnicodeString currency;
+  if (Utils::ExtractStringSetting(options, "style", &style)) {
+    if (style == UNICODE_STRING_SIMPLE("currency")) {
+      Utils::ExtractStringSetting(options, "currency", &currency);
+
+      icu::UnicodeString display;
+      Utils::ExtractStringSetting(options, "currencyDisplay", &display);
+#if (U_ICU_VERSION_MAJOR_NUM == 4) && (U_ICU_VERSION_MINOR_NUM <= 6)
+      icu::NumberFormat::EStyles style;
+      if (display == UNICODE_STRING_SIMPLE("code")) {
+        style = icu::NumberFormat::kIsoCurrencyStyle;
+      } else if (display == UNICODE_STRING_SIMPLE("name")) {
+        style = icu::NumberFormat::kPluralCurrencyStyle;
+      } else {
+        style = icu::NumberFormat::kCurrencyStyle;
+      }
+#else  // ICU version is 4.8 or above (we ignore versions below 4.0).
+      UNumberFormatStyle style;
+      if (display == UNICODE_STRING_SIMPLE("code")) {
+        style = UNUM_CURRENCY_ISO;
+      } else if (display == UNICODE_STRING_SIMPLE("name")) {
+        style = UNUM_CURRENCY_PLURAL;
+      } else {
+        style = UNUM_CURRENCY;
+      }
+#endif
+
+      number_format = static_cast<icu::DecimalFormat*>(
+          icu::NumberFormat::createInstance(icu_locale, style,  status));
+    } else if (style == UNICODE_STRING_SIMPLE("percent")) {
+      number_format = static_cast<icu::DecimalFormat*>(
+          icu::NumberFormat::createPercentInstance(icu_locale, status));
+      if (U_FAILURE(status)) {
+        delete number_format;
+        return NULL;
+      }
+      // Make sure 1.1% doesn't go into 2%.
+      number_format->setMinimumFractionDigits(1);
+    } else {
+      // Make a decimal instance by default.
+      number_format = static_cast<icu::DecimalFormat*>(
+          icu::NumberFormat::createInstance(icu_locale, status));
+    }
+  }
+
+  if (U_FAILURE(status)) {
+    delete number_format;
+    return NULL;
+  }
+
+  // Set all options.
+  if (!currency.isEmpty()) {
+    number_format->setCurrency(currency.getBuffer(), status);
+  }
+
+  int32_t digits;
+  if (Utils::ExtractIntegerSetting(
+          options, "minimumIntegerDigits", &digits)) {
+    number_format->setMinimumIntegerDigits(digits);
+  }
+
+  if (Utils::ExtractIntegerSetting(
+          options, "minimumFractionDigits", &digits)) {
+    number_format->setMinimumFractionDigits(digits);
+  }
+
+  if (Utils::ExtractIntegerSetting(
+          options, "maximumFractionDigits", &digits)) {
+    number_format->setMaximumFractionDigits(digits);
+  }
+
+  bool significant_digits_used = false;
+  if (Utils::ExtractIntegerSetting(
+          options, "minimumSignificantDigits", &digits)) {
+    number_format->setMinimumSignificantDigits(digits);
+    significant_digits_used = true;
+  }
+
+  if (Utils::ExtractIntegerSetting(
+          options, "maximumSignificantDigits", &digits)) {
+    number_format->setMaximumSignificantDigits(digits);
+    significant_digits_used = true;
+  }
+
+  number_format->setSignificantDigitsUsed(significant_digits_used);
+
+  bool grouping;
+  if (Utils::ExtractBooleanSetting(options, "useGrouping", &grouping)) {
+    number_format->setGroupingUsed(grouping);
+  }
+
+  // Set rounding mode.
+  number_format->setRoundingMode(icu::DecimalFormat::kRoundHalfUp);
+
+  return number_format;
+}
+
+static void SetResolvedSettings(const icu::Locale& icu_locale,
+                                icu::DecimalFormat* number_format,
+                                v8::Handle<v8::Object> resolved) {
+  icu::UnicodeString pattern;
+  number_format->toPattern(pattern);
+  resolved->Set(v8::String::New("pattern"),
+                v8::String::New(reinterpret_cast<const uint16_t*>(
+                    pattern.getBuffer()), pattern.length()));
+
+  // Set resolved currency code in options.currency if not empty.
+  icu::UnicodeString currency(number_format->getCurrency());
+  if (!currency.isEmpty()) {
+    resolved->Set(v8::String::New("currency"),
+                  v8::String::New(reinterpret_cast<const uint16_t*>(
+                      currency.getBuffer()), currency.length()));
+  }
+
+  // Ugly hack. ICU doesn't expose numbering system in any way, so we have
+  // to assume that for given locale NumberingSystem constructor produces the
+  // same digits as NumberFormat would.
+  UErrorCode status = U_ZERO_ERROR;
+  icu::NumberingSystem* numbering_system =
+      icu::NumberingSystem::createInstance(icu_locale, status);
+  if (U_SUCCESS(status)) {
+    const char* ns = numbering_system->getName();
+    resolved->Set(v8::String::New("numberingSystem"), v8::String::New(ns));
+  } else {
+    resolved->Set(v8::String::New("numberingSystem"), v8::Undefined());
+  }
+  delete numbering_system;
+
+  resolved->Set(v8::String::New("useGrouping"),
+                v8::Boolean::New(number_format->isGroupingUsed()));
+
+  resolved->Set(v8::String::New("minimumIntegerDigits"),
+                v8::Integer::New(number_format->getMinimumIntegerDigits()));
+
+  resolved->Set(v8::String::New("minimumFractionDigits"),
+                v8::Integer::New(number_format->getMinimumFractionDigits()));
+
+  resolved->Set(v8::String::New("maximumFractionDigits"),
+                v8::Integer::New(number_format->getMaximumFractionDigits()));
+
+  if (resolved->HasOwnProperty(v8::String::New("minimumSignificantDigits"))) {
+    resolved->Set(v8::String::New("minimumSignificantDigits"), v8::Integer::New(
+        number_format->getMinimumSignificantDigits()));
+  }
+
+  if (resolved->HasOwnProperty(v8::String::New("maximumSignificantDigits"))) {
+    resolved->Set(v8::String::New("maximumSignificantDigits"), v8::Integer::New(
+        number_format->getMaximumSignificantDigits()));
+  }
+
+  // Set the locale
+  char result[ULOC_FULLNAME_CAPACITY];
+  status = U_ZERO_ERROR;
+  uloc_toLanguageTag(
+      icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status);
+  if (U_SUCCESS(status)) {
+    resolved->Set(v8::String::New("locale"), v8::String::New(result));
+  } else {
+    // This would never happen, since we got the locale from ICU.
+    resolved->Set(v8::String::New("locale"), v8::String::New("und"));
+  }
+}
+
+}  // namespace v8_i18n
diff --git a/deps/v8/src/extensions/i18n/number-format.h b/deps/v8/src/extensions/i18n/number-format.h
new file mode 100644 (file)
index 0000000..d4dbc4d
--- /dev/null
@@ -0,0 +1,69 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+#ifndef V8_EXTENSIONS_I18N_NUMBER_FORMAT_H_
+#define V8_EXTENSIONS_I18N_NUMBER_FORMAT_H_
+
+#include "unicode/uversion.h"
+#include "v8.h"
+
+namespace U_ICU_NAMESPACE {
+class DecimalFormat;
+}
+
+namespace v8_i18n {
+
+class NumberFormat {
+ public:
+  static void JSCreateNumberFormat(
+      const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // Helper methods for various bindings.
+
+  // Unpacks date format object from corresponding JavaScript object.
+  static icu::DecimalFormat* UnpackNumberFormat(v8::Handle<v8::Object> obj);
+
+  // Release memory we allocated for the NumberFormat once the JS object that
+  // holds the pointer gets garbage collected.
+  static void DeleteNumberFormat(v8::Isolate* isolate,
+                                 v8::Persistent<v8::Object>* object,
+                                 void* param);
+
+  // Formats number and returns corresponding string.
+  static void JSInternalFormat(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // Parses a string and returns a number.
+  static void JSInternalParse(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+ private:
+  NumberFormat();
+};
+
+}  // namespace v8_i18n
+
+#endif  // V8_EXTENSIONS_I18N_NUMBER_FORMAT_H_
diff --git a/deps/v8/src/extensions/i18n/number-format.js b/deps/v8/src/extensions/i18n/number-format.js
new file mode 100644 (file)
index 0000000..1cd3db1
--- /dev/null
@@ -0,0 +1,295 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+// ECMAScript 402 API implementation is broken into separate files for
+// each service. The build system combines them together into one
+// Intl namespace.
+
+/**
+ * Verifies that the input is a well-formed ISO 4217 currency code.
+ * Don't uppercase to test. It could convert invalid code into a valid one.
+ * For example \u00DFP (Eszett+P) becomes SSP.
+ */
+function isWellFormedCurrencyCode(currency) {
+  return typeof currency == "string" &&
+      currency.length == 3 &&
+      currency.match(/[^A-Za-z]/) == null;
+}
+
+
+/**
+ * Returns the valid digit count for a property, or throws RangeError on
+ * a value out of the range.
+ */
+function getNumberOption(options, property, min, max, fallback) {
+  var value = options[property];
+  if (value !== undefined) {
+    value = Number(value);
+    if (isNaN(value) || value < min || value > max) {
+      throw new RangeError(property + ' value is out of range.');
+    }
+    return Math.floor(value);
+  }
+
+  return fallback;
+}
+
+
+/**
+ * Initializes the given object so it's a valid NumberFormat instance.
+ * Useful for subclassing.
+ */
+function initializeNumberFormat(numberFormat, locales, options) {
+  native function NativeJSCreateNumberFormat();
+
+  if (numberFormat.hasOwnProperty('__initializedIntlObject')) {
+    throw new TypeError('Trying to re-initialize NumberFormat object.');
+  }
+
+  if (options === undefined) {
+    options = {};
+  }
+
+  var getOption = getGetOption(options, 'numberformat');
+
+  var locale = resolveLocale('numberformat', locales, options);
+
+  var internalOptions = {};
+  defineWEProperty(internalOptions, 'style', getOption(
+    'style', 'string', ['decimal', 'percent', 'currency'], 'decimal'));
+
+  var currency = getOption('currency', 'string');
+  if (currency !== undefined && !isWellFormedCurrencyCode(currency)) {
+    throw new RangeError('Invalid currency code: ' + currency);
+  }
+
+  if (internalOptions.style === 'currency' && currency === undefined) {
+    throw new TypeError('Currency code is required with currency style.');
+  }
+
+  var currencyDisplay = getOption(
+      'currencyDisplay', 'string', ['code', 'symbol', 'name'], 'symbol');
+  if (internalOptions.style === 'currency') {
+    defineWEProperty(internalOptions, 'currency', currency.toUpperCase());
+    defineWEProperty(internalOptions, 'currencyDisplay', currencyDisplay);
+  }
+
+  // Digit ranges.
+  var mnid = getNumberOption(options, 'minimumIntegerDigits', 1, 21, 1);
+  defineWEProperty(internalOptions, 'minimumIntegerDigits', mnid);
+
+  var mnfd = getNumberOption(options, 'minimumFractionDigits', 0, 20, 0);
+  defineWEProperty(internalOptions, 'minimumFractionDigits', mnfd);
+
+  var mxfd = getNumberOption(options, 'maximumFractionDigits', mnfd, 20, 3);
+  defineWEProperty(internalOptions, 'maximumFractionDigits', mxfd);
+
+  var mnsd = options['minimumSignificantDigits'];
+  var mxsd = options['maximumSignificantDigits'];
+  if (mnsd !== undefined || mxsd !== undefined) {
+    mnsd = getNumberOption(options, 'minimumSignificantDigits', 1, 21, 0);
+    defineWEProperty(internalOptions, 'minimumSignificantDigits', mnsd);
+
+    mxsd = getNumberOption(options, 'maximumSignificantDigits', mnsd, 21, 21);
+    defineWEProperty(internalOptions, 'maximumSignificantDigits', mxsd);
+  }
+
+  // Grouping.
+  defineWEProperty(internalOptions, 'useGrouping', getOption(
+    'useGrouping', 'boolean', undefined, true));
+
+  // ICU prefers options to be passed using -u- extension key/values for
+  // number format, so we need to build that.
+  var extensionMap = parseExtension(locale.extension);
+  var extension = setOptions(options, extensionMap, NUMBER_FORMAT_KEY_MAP,
+                             getOption, internalOptions);
+
+  var requestedLocale = locale.locale + extension;
+  var resolved = Object.defineProperties({}, {
+    currency: {writable: true},
+    currencyDisplay: {writable: true},
+    locale: {writable: true},
+    maximumFractionDigits: {writable: true},
+    minimumFractionDigits: {writable: true},
+    minimumIntegerDigits: {writable: true},
+    numberingSystem: {writable: true},
+    requestedLocale: {value: requestedLocale, writable: true},
+    style: {value: internalOptions.style, writable: true},
+    useGrouping: {writable: true}
+  });
+  if (internalOptions.hasOwnProperty('minimumSignificantDigits')) {
+    defineWEProperty(resolved, 'minimumSignificantDigits', undefined);
+  }
+  if (internalOptions.hasOwnProperty('maximumSignificantDigits')) {
+    defineWEProperty(resolved, 'maximumSignificantDigits', undefined);
+  }
+  var formatter = NativeJSCreateNumberFormat(requestedLocale,
+                                             internalOptions,
+                                             resolved);
+
+  // We can't get information about number or currency style from ICU, so we
+  // assume user request was fulfilled.
+  if (internalOptions.style === 'currency') {
+    Object.defineProperty(resolved, 'currencyDisplay', {value: currencyDisplay,
+                                                        writable: true});
+  }
+
+  Object.defineProperty(numberFormat, 'formatter', {value: formatter});
+  Object.defineProperty(numberFormat, 'resolved', {value: resolved});
+  Object.defineProperty(numberFormat, '__initializedIntlObject',
+                        {value: 'numberformat'});
+
+  return numberFormat;
+}
+
+
+/**
+ * Constructs Intl.NumberFormat object given optional locales and options
+ * parameters.
+ *
+ * @constructor
+ */
+%SetProperty(Intl, 'NumberFormat', function() {
+    var locales = arguments[0];
+    var options = arguments[1];
+
+    if (!this || this === Intl) {
+      // Constructor is called as a function.
+      return new Intl.NumberFormat(locales, options);
+    }
+
+    return initializeNumberFormat(toObject(this), locales, options);
+  },
+  ATTRIBUTES.DONT_ENUM
+);
+
+
+/**
+ * NumberFormat resolvedOptions method.
+ */
+%SetProperty(Intl.NumberFormat.prototype, 'resolvedOptions', function() {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
+
+    if (!this || typeof this !== 'object' ||
+        this.__initializedIntlObject !== 'numberformat') {
+      throw new TypeError('resolvedOptions method called on a non-object' +
+          ' or on a object that is not Intl.NumberFormat.');
+    }
+
+    var format = this;
+    var locale = getOptimalLanguageTag(format.resolved.requestedLocale,
+                                       format.resolved.locale);
+
+    var result = {
+      locale: locale,
+      numberingSystem: format.resolved.numberingSystem,
+      style: format.resolved.style,
+      useGrouping: format.resolved.useGrouping,
+      minimumIntegerDigits: format.resolved.minimumIntegerDigits,
+      minimumFractionDigits: format.resolved.minimumFractionDigits,
+      maximumFractionDigits: format.resolved.maximumFractionDigits,
+    };
+
+    if (result.style === 'currency') {
+      defineWECProperty(result, 'currency', format.resolved.currency);
+      defineWECProperty(result, 'currencyDisplay',
+                        format.resolved.currencyDisplay);
+    }
+
+    if (format.resolved.hasOwnProperty('minimumSignificantDigits')) {
+      defineWECProperty(result, 'minimumSignificantDigits',
+                        format.resolved.minimumSignificantDigits);
+    }
+
+    if (format.resolved.hasOwnProperty('maximumSignificantDigits')) {
+      defineWECProperty(result, 'maximumSignificantDigits',
+                        format.resolved.maximumSignificantDigits);
+    }
+
+    return result;
+  },
+  ATTRIBUTES.DONT_ENUM
+);
+%FunctionSetName(Intl.NumberFormat.prototype.resolvedOptions,
+                 'resolvedOptions');
+%FunctionRemovePrototype(Intl.NumberFormat.prototype.resolvedOptions);
+%SetNativeFlag(Intl.NumberFormat.prototype.resolvedOptions);
+
+
+/**
+ * Returns the subset of the given locale list for which this locale list
+ * has a matching (possibly fallback) locale. Locales appear in the same
+ * order in the returned list as in the input list.
+ * Options are optional parameter.
+ */
+%SetProperty(Intl.NumberFormat, 'supportedLocalesOf', function(locales) {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
+
+    return supportedLocalesOf('numberformat', locales, arguments[1]);
+  },
+  ATTRIBUTES.DONT_ENUM
+);
+%FunctionSetName(Intl.NumberFormat.supportedLocalesOf, 'supportedLocalesOf');
+%FunctionRemovePrototype(Intl.NumberFormat.supportedLocalesOf);
+%SetNativeFlag(Intl.NumberFormat.supportedLocalesOf);
+
+
+/**
+ * Returns a String value representing the result of calling ToNumber(value)
+ * according to the effective locale and the formatting options of this
+ * NumberFormat.
+ */
+function formatNumber(formatter, value) {
+  native function NativeJSInternalNumberFormat();
+
+  // Spec treats -0 and +0 as 0.
+  var number = Number(value);
+  if (number === -0) {
+    number = 0;
+  }
+
+  return NativeJSInternalNumberFormat(formatter.formatter, number);
+}
+
+
+/**
+ * Returns a Number that represents string value that was passed in.
+ */
+function parseNumber(formatter, value) {
+  native function NativeJSInternalNumberParse();
+
+  return NativeJSInternalNumberParse(formatter.formatter, String(value));
+}
+
+
+addBoundMethod(Intl.NumberFormat, 'format', formatNumber, 1);
+addBoundMethod(Intl.NumberFormat, 'v8Parse', parseNumber, 1);
diff --git a/deps/v8/src/extensions/i18n/overrides.js b/deps/v8/src/extensions/i18n/overrides.js
new file mode 100644 (file)
index 0000000..b2d60b3
--- /dev/null
@@ -0,0 +1,220 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// limitations under the License.
+
+// ECMAScript 402 API implementation is broken into separate files for
+// each service. The build system combines them together into one
+// Intl namespace.
+
+
+// Save references to Intl objects and methods we use, for added security.
+var savedObjects = {
+  'collator': Intl.Collator,
+  'numberformat': Intl.NumberFormat,
+  'dateformatall': Intl.DateTimeFormat,
+  'dateformatdate': Intl.DateTimeFormat,
+  'dateformattime': Intl.DateTimeFormat
+};
+
+
+// Default (created with undefined locales and options parameters) collator,
+// number and date format instances. They'll be created as needed.
+var defaultObjects = {
+  'collator': undefined,
+  'numberformat': undefined,
+  'dateformatall': undefined,
+  'dateformatdate': undefined,
+  'dateformattime': undefined,
+};
+
+
+/**
+ * Returns cached or newly created instance of a given service.
+ * We cache only default instances (where no locales or options are provided).
+ */
+function cachedOrNewService(service, locales, options, defaults) {
+  var useOptions = (defaults === undefined) ? options : defaults;
+  if (locales === undefined && options === undefined) {
+    if (defaultObjects[service] === undefined) {
+      defaultObjects[service] = new savedObjects[service](locales, useOptions);
+    }
+    return defaultObjects[service];
+  }
+  return new savedObjects[service](locales, useOptions);
+}
+
+
+/**
+ * Compares this and that, and returns less than 0, 0 or greater than 0 value.
+ * Overrides the built-in method.
+ */
+Object.defineProperty(String.prototype, 'localeCompare', {
+  value: function(that) {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
+
+    if (this === undefined || this === null) {
+      throw new TypeError('Method invoked on undefined or null value.');
+    }
+
+    var locales = arguments[1];
+    var options = arguments[2];
+    var collator = cachedOrNewService('collator', locales, options);
+    return compare(collator, this, that);
+  },
+  writable: true,
+  configurable: true,
+  enumerable: false
+});
+%FunctionSetName(String.prototype.localeCompare, 'localeCompare');
+%FunctionRemovePrototype(String.prototype.localeCompare);
+%SetNativeFlag(String.prototype.localeCompare);
+
+
+/**
+ * Formats a Number object (this) using locale and options values.
+ * If locale or options are omitted, defaults are used.
+ */
+Object.defineProperty(Number.prototype, 'toLocaleString', {
+  value: function() {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
+
+    if (!(this instanceof Number) && typeof(this) !== 'number') {
+      throw new TypeError('Method invoked on an object that is not Number.');
+    }
+
+    var locales = arguments[0];
+    var options = arguments[1];
+    var numberFormat = cachedOrNewService('numberformat', locales, options);
+    return formatNumber(numberFormat, this);
+  },
+  writable: true,
+  configurable: true,
+  enumerable: false
+});
+%FunctionSetName(Number.prototype.toLocaleString, 'toLocaleString');
+%FunctionRemovePrototype(Number.prototype.toLocaleString);
+%SetNativeFlag(Number.prototype.toLocaleString);
+
+
+/**
+ * Returns actual formatted date or fails if date parameter is invalid.
+ */
+function toLocaleDateTime(date, locales, options, required, defaults, service) {
+  if (!(date instanceof Date)) {
+    throw new TypeError('Method invoked on an object that is not Date.');
+  }
+
+  if (isNaN(date)) {
+    return 'Invalid Date';
+  }
+
+  var internalOptions = toDateTimeOptions(options, required, defaults);
+
+  var dateFormat =
+      cachedOrNewService(service, locales, options, internalOptions);
+
+  return formatDate(dateFormat, date);
+}
+
+
+/**
+ * Formats a Date object (this) using locale and options values.
+ * If locale or options are omitted, defaults are used - both date and time are
+ * present in the output.
+ */
+Object.defineProperty(Date.prototype, 'toLocaleString', {
+  value: function() {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
+
+    var locales = arguments[0];
+    var options = arguments[1];
+    return toLocaleDateTime(
+        this, locales, options, 'any', 'all', 'dateformatall');
+  },
+  writable: true,
+  configurable: true,
+  enumerable: false
+});
+%FunctionSetName(Date.prototype.toLocaleString, 'toLocaleString');
+%FunctionRemovePrototype(Date.prototype.toLocaleString);
+%SetNativeFlag(Date.prototype.toLocaleString);
+
+
+/**
+ * Formats a Date object (this) using locale and options values.
+ * If locale or options are omitted, defaults are used - only date is present
+ * in the output.
+ */
+Object.defineProperty(Date.prototype, 'toLocaleDateString', {
+  value: function() {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
+
+    var locales = arguments[0];
+    var options = arguments[1];
+    return toLocaleDateTime(
+        this, locales, options, 'date', 'date', 'dateformatdate');
+  },
+  writable: true,
+  configurable: true,
+  enumerable: false
+});
+%FunctionSetName(Date.prototype.toLocaleDateString, 'toLocaleDateString');
+%FunctionRemovePrototype(Date.prototype.toLocaleDateString);
+%SetNativeFlag(Date.prototype.toLocaleDateString);
+
+
+/**
+ * Formats a Date object (this) using locale and options values.
+ * If locale or options are omitted, defaults are used - only time is present
+ * in the output.
+ */
+Object.defineProperty(Date.prototype, 'toLocaleTimeString', {
+  value: function() {
+    if (%_IsConstructCall()) {
+      throw new TypeError(ORDINARY_FUNCTION_CALLED_AS_CONSTRUCTOR);
+    }
+
+    var locales = arguments[0];
+    var options = arguments[1];
+    return toLocaleDateTime(
+        this, locales, options, 'time', 'time', 'dateformattime');
+  },
+  writable: true,
+  configurable: true,
+  enumerable: false
+});
+%FunctionSetName(Date.prototype.toLocaleTimeString, 'toLocaleTimeString');
+%FunctionRemovePrototype(Date.prototype.toLocaleTimeString);
+%SetNativeFlag(Date.prototype.toLocaleTimeString);
index e5a3009..32bc07d 100644 (file)
@@ -133,6 +133,12 @@ void StatisticsExtension::GetCounters(
             "cell_space_available_bytes");
   AddNumber(result, heap->cell_space()->CommittedMemory(),
             "cell_space_commited_bytes");
+  AddNumber(result, heap->property_cell_space()->Size(),
+            "property_cell_space_live_bytes");
+  AddNumber(result, heap->property_cell_space()->Available(),
+            "property_cell_space_available_bytes");
+  AddNumber(result, heap->property_cell_space()->CommittedMemory(),
+            "property_cell_space_commited_bytes");
   AddNumber(result, heap->lo_space()->Size(),
             "lo_space_live_bytes");
   AddNumber(result, heap->lo_space()->Available(),
index c47b57d..63b2379 100644 (file)
@@ -31,6 +31,7 @@
 #include "debug.h"
 #include "execution.h"
 #include "factory.h"
+#include "isolate-inl.h"
 #include "macro-assembler.h"
 #include "objects.h"
 #include "objects-visiting.h"
@@ -259,6 +260,32 @@ Handle<String> Factory::NewConsString(Handle<String> first,
 }
 
 
+template<typename SinkChar, typename StringType>
+Handle<String> ConcatStringContent(Handle<StringType> result,
+                                   Handle<String> first,
+                                   Handle<String> second) {
+  DisallowHeapAllocation pointer_stays_valid;
+  SinkChar* sink = result->GetChars();
+  String::WriteToFlat(*first, sink, 0, first->length());
+  String::WriteToFlat(*second, sink + first->length(), 0, second->length());
+  return result;
+}
+
+
+Handle<String> Factory::NewFlatConcatString(Handle<String> first,
+                                            Handle<String> second) {
+  int total_length = first->length() + second->length();
+  if (first->IsOneByteRepresentationUnderneath() &&
+      second->IsOneByteRepresentationUnderneath()) {
+    return ConcatStringContent<uint8_t>(
+        NewRawOneByteString(total_length), first, second);
+  } else {
+    return ConcatStringContent<uc16>(
+        NewRawTwoByteString(total_length), first, second);
+  }
+}
+
+
 Handle<String> Factory::NewSubString(Handle<String> str,
                                      int begin,
                                      int end) {
@@ -408,27 +435,17 @@ Handle<ExecutableAccessorInfo> Factory::NewExecutableAccessorInfo() {
 
 Handle<Script> Factory::NewScript(Handle<String> source) {
   // Generate id for this script.
-  int id;
   Heap* heap = isolate()->heap();
-  if (heap->last_script_id()->IsUndefined()) {
-    // Script ids start from one.
-    id = 1;
-  } else {
-    // Increment id, wrap when positive smi is exhausted.
-    id = Smi::cast(heap->last_script_id())->value();
-    id++;
-    if (!Smi::IsValid(id)) {
-      id = 0;
-    }
-  }
-  heap->SetLastScriptId(Smi::FromInt(id));
+  int id = heap->last_script_id()->value() + 1;
+  if (!Smi::IsValid(id) || id < 0) id = 1;
+  heap->set_last_script_id(Smi::FromInt(id));
 
   // Create and initialize script object.
   Handle<Foreign> wrapper = NewForeign(0, TENURED);
   Handle<Script> script = Handle<Script>::cast(NewStruct(SCRIPT_TYPE));
   script->set_source(*source);
   script->set_name(heap->undefined_value());
-  script->set_id(heap->last_script_id());
+  script->set_id(Smi::FromInt(id));
   script->set_line_offset(Smi::FromInt(0));
   script->set_column_offset(Smi::FromInt(0));
   script->set_data(heap->undefined_value());
@@ -482,13 +499,21 @@ Handle<ExternalArray> Factory::NewExternalArray(int length,
 }
 
 
-Handle<JSGlobalPropertyCell> Factory::NewJSGlobalPropertyCell(
-    Handle<Object> value) {
+Handle<Cell> Factory::NewCell(Handle<Object> value) {
+  AllowDeferredHandleDereference convert_to_cell;
+  CALL_HEAP_FUNCTION(
+      isolate(),
+      isolate()->heap()->AllocateCell(*value),
+      Cell);
+}
+
+
+Handle<PropertyCell> Factory::NewPropertyCell(Handle<Object> value) {
   AllowDeferredHandleDereference convert_to_cell;
   CALL_HEAP_FUNCTION(
       isolate(),
-      isolate()->heap()->AllocateJSGlobalPropertyCell(*value),
-      JSGlobalPropertyCell);
+      isolate()->heap()->AllocatePropertyCell(*value),
+      PropertyCell);
 }
 
 
@@ -636,7 +661,8 @@ Handle<JSFunction> Factory::NewFunctionFromSharedFunctionInfo(
       result->is_compiled() &&
       !function_info->is_toplevel() &&
       function_info->allows_lazy_compilation() &&
-      !function_info->optimization_disabled()) {
+      !function_info->optimization_disabled() &&
+      !isolate()->DebuggerHasBreakPoints()) {
     result->MarkForLazyRecompilation();
   }
   return result;
@@ -1072,6 +1098,16 @@ Handle<JSArrayBuffer> Factory::NewJSArrayBuffer() {
 }
 
 
+Handle<JSDataView> Factory::NewJSDataView() {
+  JSFunction* data_view_fun =
+      isolate()->context()->native_context()->data_view_fun();
+  CALL_HEAP_FUNCTION(
+      isolate(),
+      isolate()->heap()->AllocateJSObject(data_view_fun),
+      JSDataView);
+}
+
+
 Handle<JSTypedArray> Factory::NewJSTypedArray(ExternalArrayType type) {
   JSFunction* typed_array_fun;
   Context* native_context = isolate()->context()->native_context();
index d59d742..0cb7157 100644 (file)
@@ -152,6 +152,10 @@ class Factory {
   Handle<String> NewConsString(Handle<String> first,
                                Handle<String> second);
 
+  // Create a new sequential string containing the concatenation of the inputs.
+  Handle<String> NewFlatConcatString(Handle<String> first,
+                                     Handle<String> second);
+
   // Create a new string object which holds a substring of a string.
   Handle<String> NewSubString(Handle<String> str,
                               int begin,
@@ -235,8 +239,9 @@ class Factory {
       void* external_pointer,
       PretenureFlag pretenure = NOT_TENURED);
 
-  Handle<JSGlobalPropertyCell> NewJSGlobalPropertyCell(
-      Handle<Object> value);
+  Handle<Cell> NewCell(Handle<Object> value);
+
+  Handle<PropertyCell> NewPropertyCell(Handle<Object> value);
 
   Handle<Map> NewMap(
       InstanceType type,
@@ -327,6 +332,8 @@ class Factory {
 
   Handle<JSTypedArray> NewJSTypedArray(ExternalArrayType type);
 
+  Handle<JSDataView> NewJSDataView();
+
   Handle<JSProxy> NewJSProxy(Handle<Object> handler, Handle<Object> prototype);
 
   // Change the type of the argument into a JS object/function and reinitialize.
index b70a532..a0f907d 100644 (file)
@@ -178,8 +178,7 @@ DEFINE_implication(harmony, harmony_symbols)
 DEFINE_implication(harmony, harmony_proxies)
 DEFINE_implication(harmony, harmony_collections)
 DEFINE_implication(harmony, harmony_observation)
-// TODO(wingo): Re-enable when GC bug that appeared in r15060 is gone.
-// DEFINE_implication(harmony, harmony_generators)
+DEFINE_implication(harmony, harmony_generators)
 DEFINE_implication(harmony, harmony_iteration)
 DEFINE_implication(harmony_modules, harmony_scoping)
 DEFINE_implication(harmony_observation, harmony_collections)
@@ -196,9 +195,6 @@ DEFINE_bool(clever_optimizations,
             true,
             "Optimize object size, Array shift, DOM strings and string +")
 DEFINE_bool(pretenuring, true, "allocate objects in old space")
-// TODO(hpayer): We will remove this flag as soon as we have pretenuring
-// support for specific allocation sites.
-DEFINE_bool(pretenuring_call_new, false, "pretenure call new")
 DEFINE_bool(track_fields, true, "track fields with only smi values")
 DEFINE_bool(track_double_fields, true, "track fields with double values")
 DEFINE_bool(track_heap_object_fields, true, "track fields with heap values")
@@ -218,6 +214,7 @@ DEFINE_bool(use_range, true, "use hydrogen range analysis")
 DEFINE_bool(use_gvn, true, "use hydrogen global value numbering")
 DEFINE_bool(use_canonicalizing, true, "use hydrogen instruction canonicalizing")
 DEFINE_bool(use_inlining, true, "use function inlining")
+DEFINE_bool(use_escape_analysis, false, "use hydrogen escape analysis")
 DEFINE_int(max_inlined_source_size, 600,
            "maximum source size in bytes considered for a single inlining")
 DEFINE_int(max_inlined_nodes, 196,
@@ -238,6 +235,7 @@ DEFINE_bool(trace_all_uses, false, "trace all use positions")
 DEFINE_bool(trace_range, false, "trace range analysis")
 DEFINE_bool(trace_gvn, false, "trace global value numbering")
 DEFINE_bool(trace_representation, false, "trace representation types")
+DEFINE_bool(trace_escape_analysis, false, "trace hydrogen escape analysis")
 DEFINE_bool(trace_track_allocation_sites, false,
             "trace the tracking of allocation sites")
 DEFINE_bool(trace_migration, false, "trace object migration")
@@ -268,8 +266,6 @@ DEFINE_bool(unreachable_code_elimination, false,
             "eliminate unreachable code (hidden behind soft deopts)")
 DEFINE_bool(track_allocation_sites, true,
             "Use allocation site info to reduce transitions")
-DEFINE_bool(optimize_constructed_arrays, true,
-            "Use allocation site info on constructed arrays")
 DEFINE_bool(trace_osr, false, "trace on-stack replacement")
 DEFINE_int(stress_runs, 0, "number of stress runs")
 DEFINE_bool(optimize_closures, true, "optimize closures")
@@ -291,10 +287,10 @@ DEFINE_bool(opt_safe_uint32_operations, true,
             "allow uint32 values on optimize frames if they are used only in "
             "safe operations")
 
-DEFINE_bool(parallel_recompilation, false,
+DEFINE_bool(parallel_recompilation, true,
             "optimizing hot functions asynchronously on a separate thread")
 DEFINE_bool(trace_parallel_recompilation, false, "track parallel recompilation")
-DEFINE_int(parallel_recompilation_queue_length, 3,
+DEFINE_int(parallel_recompilation_queue_length, 8,
            "the length of the parallel compilation queue")
 DEFINE_int(parallel_recompilation_delay, 0,
            "artificial compilation delay in ms")
@@ -318,7 +314,7 @@ DEFINE_bool(weighted_back_edges, false,
            // 0x1700 fits in the immediate field of an ARM instruction.
 DEFINE_int(interrupt_budget, 0x1700,
            "execution budget before interrupt is triggered")
-DEFINE_int(type_info_threshold, 15,
+DEFINE_int(type_info_threshold, 25,
            "percentage of ICs that must have type info to allow optimization")
 DEFINE_int(self_opt_count, 130, "call count before self-optimization")
 
@@ -365,6 +361,7 @@ DEFINE_bool(enable_vldr_imm, false,
             "enable use of constant pools for double immediate (ARM only)")
 
 // bootstrapper.cc
+DEFINE_bool(enable_i18n, true, "enable i18n extension")
 DEFINE_string(expose_natives_as, NULL, "expose natives in global object")
 DEFINE_string(expose_debug_as, NULL, "expose debug in global object")
 DEFINE_bool(expose_gc, false, "expose gc extension")
@@ -400,6 +397,7 @@ DEFINE_bool(trace_opt, false, "trace lazy optimization")
 DEFINE_bool(trace_opt_stats, false, "trace lazy optimization statistics")
 DEFINE_bool(opt, true, "use adaptive optimizations")
 DEFINE_bool(always_opt, false, "always try to optimize functions")
+DEFINE_bool(always_osr, false, "always try to OSR functions")
 DEFINE_bool(prepare_always_opt, false, "prepare for turning on always opt")
 DEFINE_bool(trace_deopt, false, "trace optimize function deoptimization")
 DEFINE_bool(trace_stub_failures, false,
@@ -472,7 +470,7 @@ DEFINE_bool(trace_external_memory, false,
             "it is adjusted.")
 DEFINE_bool(collect_maps, true,
             "garbage collect maps from which no objects can be reached")
-DEFINE_bool(weak_embedded_maps_in_optimized_code, false,
+DEFINE_bool(weak_embedded_maps_in_optimized_code, true,
             "make maps embedded in optimized code weak")
 DEFINE_bool(flush_code, true,
             "flush code that we expect not to use again (during full gc)")
@@ -481,7 +479,7 @@ DEFINE_bool(flush_code_incrementally, true,
 DEFINE_bool(trace_code_flushing, false, "trace code flushing progress")
 DEFINE_bool(age_code, true,
             "track un-executed functions to age code and flush only "
-            "old code")
+            "old code (required for code flushing)")
 DEFINE_bool(incremental_marking, true, "use incremental marking")
 DEFINE_bool(incremental_marking_steps, true, "do incremental marking steps")
 DEFINE_bool(trace_incremental_marking, false,
index 282bf20..855e207 100644 (file)
@@ -34,7 +34,7 @@
 #include "smart-pointers.h"
 #include "string-stream.h"
 
-#ifdef V8_TARGET_ARCH_ARM
+#if V8_TARGET_ARCH_ARM
 #include "arm/assembler-arm-inl.h"
 #endif
 
@@ -520,7 +520,7 @@ void FlagList::ResetAllFlags() {
 
 // static
 void FlagList::PrintHelp() {
-#ifdef V8_TARGET_ARCH_ARM
+#if V8_TARGET_ARCH_ARM
   CpuFeatures::PrintTarget();
   CpuFeatures::Probe();
   CpuFeatures::PrintFeatures();
index 1228ccf..8d10645 100644 (file)
@@ -116,7 +116,7 @@ inline Object** StackHandler::code_address() const {
 }
 
 
-inline StackFrame::StackFrame(StackFrameIterator* iterator)
+inline StackFrame::StackFrame(StackFrameIteratorBase* iterator)
     : iterator_(iterator), isolate_(iterator_->isolate()) {
 }
 
@@ -136,22 +136,34 @@ inline Code* StackFrame::GetContainingCode(Isolate* isolate, Address pc) {
 }
 
 
-inline EntryFrame::EntryFrame(StackFrameIterator* iterator)
+inline Address* StackFrame::ResolveReturnAddressLocation(Address* pc_address) {
+  if (return_address_location_resolver_ == NULL) {
+    return pc_address;
+  } else {
+    return reinterpret_cast<Address*>(
+        return_address_location_resolver_(
+            reinterpret_cast<uintptr_t>(pc_address)));
+  }
+}
+
+
+inline EntryFrame::EntryFrame(StackFrameIteratorBase* iterator)
     : StackFrame(iterator) {
 }
 
 
-inline EntryConstructFrame::EntryConstructFrame(StackFrameIterator* iterator)
+inline EntryConstructFrame::EntryConstructFrame(
+    StackFrameIteratorBase* iterator)
     : EntryFrame(iterator) {
 }
 
 
-inline ExitFrame::ExitFrame(StackFrameIterator* iterator)
+inline ExitFrame::ExitFrame(StackFrameIteratorBase* iterator)
     : StackFrame(iterator) {
 }
 
 
-inline StandardFrame::StandardFrame(StackFrameIterator* iterator)
+inline StandardFrame::StandardFrame(StackFrameIteratorBase* iterator)
     : StackFrame(iterator) {
 }
 
@@ -201,7 +213,7 @@ inline bool StandardFrame::IsConstructFrame(Address fp) {
 }
 
 
-inline JavaScriptFrame::JavaScriptFrame(StackFrameIterator* iterator)
+inline JavaScriptFrame::JavaScriptFrame(StackFrameIteratorBase* iterator)
     : StandardFrame(iterator) {
 }
 
@@ -269,54 +281,51 @@ inline Object* JavaScriptFrame::function() const {
 }
 
 
-inline StubFrame::StubFrame(StackFrameIterator* iterator)
+inline StubFrame::StubFrame(StackFrameIteratorBase* iterator)
     : StandardFrame(iterator) {
 }
 
 
-inline OptimizedFrame::OptimizedFrame(StackFrameIterator* iterator)
+inline OptimizedFrame::OptimizedFrame(StackFrameIteratorBase* iterator)
     : JavaScriptFrame(iterator) {
 }
 
 
 inline ArgumentsAdaptorFrame::ArgumentsAdaptorFrame(
-    StackFrameIterator* iterator) : JavaScriptFrame(iterator) {
+    StackFrameIteratorBase* iterator) : JavaScriptFrame(iterator) {
 }
 
 
-inline InternalFrame::InternalFrame(StackFrameIterator* iterator)
+inline InternalFrame::InternalFrame(StackFrameIteratorBase* iterator)
     : StandardFrame(iterator) {
 }
 
 
 inline StubFailureTrampolineFrame::StubFailureTrampolineFrame(
-    StackFrameIterator* iterator) : StandardFrame(iterator) {
+    StackFrameIteratorBase* iterator) : StandardFrame(iterator) {
 }
 
 
-inline ConstructFrame::ConstructFrame(StackFrameIterator* iterator)
+inline ConstructFrame::ConstructFrame(StackFrameIteratorBase* iterator)
     : InternalFrame(iterator) {
 }
 
 
-template<typename Iterator>
-inline JavaScriptFrameIteratorTemp<Iterator>::JavaScriptFrameIteratorTemp(
+inline JavaScriptFrameIterator::JavaScriptFrameIterator(
     Isolate* isolate)
     : iterator_(isolate) {
   if (!done()) Advance();
 }
 
 
-template<typename Iterator>
-inline JavaScriptFrameIteratorTemp<Iterator>::JavaScriptFrameIteratorTemp(
+inline JavaScriptFrameIterator::JavaScriptFrameIterator(
     Isolate* isolate, ThreadLocalTop* top)
     : iterator_(isolate, top) {
   if (!done()) Advance();
 }
 
 
-template<typename Iterator>
-inline JavaScriptFrame* JavaScriptFrameIteratorTemp<Iterator>::frame() const {
+inline JavaScriptFrame* JavaScriptFrameIterator::frame() const {
   // TODO(1233797): The frame hierarchy needs to change. It's
   // problematic that we can't use the safe-cast operator to cast to
   // the JavaScript frame type, because we may encounter arguments
@@ -327,43 +336,10 @@ inline JavaScriptFrame* JavaScriptFrameIteratorTemp<Iterator>::frame() const {
 }
 
 
-template<typename Iterator>
-JavaScriptFrameIteratorTemp<Iterator>::JavaScriptFrameIteratorTemp(
-    Isolate* isolate, StackFrame::Id id)
-    : iterator_(isolate) {
-  AdvanceToId(id);
-}
-
-
-template<typename Iterator>
-void JavaScriptFrameIteratorTemp<Iterator>::Advance() {
-  do {
-    iterator_.Advance();
-  } while (!iterator_.done() && !iterator_.frame()->is_java_script());
-}
-
-
-template<typename Iterator>
-void JavaScriptFrameIteratorTemp<Iterator>::AdvanceToArgumentsFrame() {
-  if (!frame()->has_adapted_arguments()) return;
-  iterator_.Advance();
-  ASSERT(iterator_.frame()->is_arguments_adaptor());
-}
-
-
-template<typename Iterator>
-void JavaScriptFrameIteratorTemp<Iterator>::AdvanceToId(StackFrame::Id id) {
-  while (!done()) {
-    Advance();
-    if (frame()->id() == id) return;
-  }
-}
-
-
-template<typename Iterator>
-void JavaScriptFrameIteratorTemp<Iterator>::Reset() {
-  iterator_.Reset();
-  if (!done()) Advance();
+inline JavaScriptFrame* SafeStackFrameIterator::frame() const {
+  ASSERT(!done());
+  ASSERT(frame_->is_java_script());
+  return static_cast<JavaScriptFrame*>(frame_);
 }
 
 
index 53f5108..0408aa9 100644 (file)
@@ -43,19 +43,8 @@ namespace v8 {
 namespace internal {
 
 
-static ReturnAddressLocationResolver return_address_location_resolver = NULL;
-
-
-// Resolves pc_address through the resolution address function if one is set.
-static inline Address* ResolveReturnAddressLocation(Address* pc_address) {
-  if (return_address_location_resolver == NULL) {
-    return pc_address;
-  } else {
-    return reinterpret_cast<Address*>(
-        return_address_location_resolver(
-            reinterpret_cast<uintptr_t>(pc_address)));
-  }
-}
+ReturnAddressLocationResolver
+    StackFrame::return_address_location_resolver_ = NULL;
 
 
 // Iterator that supports traversing the stack handlers of a
@@ -88,39 +77,29 @@ class StackHandlerIterator BASE_EMBEDDED {
 
 
 #define INITIALIZE_SINGLETON(type, field) field##_(this),
-StackFrameIterator::StackFrameIterator(Isolate* isolate)
+StackFrameIteratorBase::StackFrameIteratorBase(Isolate* isolate,
+                                               bool can_access_heap_objects)
     : isolate_(isolate),
       STACK_FRAME_TYPE_LIST(INITIALIZE_SINGLETON)
       frame_(NULL), handler_(NULL),
-      thread_(isolate_->thread_local_top()),
-      fp_(NULL), sp_(NULL), advance_(&StackFrameIterator::AdvanceWithHandler) {
-  Reset();
-}
-StackFrameIterator::StackFrameIterator(Isolate* isolate, ThreadLocalTop* t)
-    : isolate_(isolate),
-      STACK_FRAME_TYPE_LIST(INITIALIZE_SINGLETON)
-      frame_(NULL), handler_(NULL), thread_(t),
-      fp_(NULL), sp_(NULL), advance_(&StackFrameIterator::AdvanceWithHandler) {
-  Reset();
+      can_access_heap_objects_(can_access_heap_objects) {
 }
-StackFrameIterator::StackFrameIterator(Isolate* isolate,
-                                       bool use_top, Address fp, Address sp)
-    : isolate_(isolate),
-      STACK_FRAME_TYPE_LIST(INITIALIZE_SINGLETON)
-      frame_(NULL), handler_(NULL),
-      thread_(use_top ? isolate_->thread_local_top() : NULL),
-      fp_(use_top ? NULL : fp), sp_(sp),
-      advance_(use_top ? &StackFrameIterator::AdvanceWithHandler :
-               &StackFrameIterator::AdvanceWithoutHandler) {
-  if (use_top || fp != NULL) {
-    Reset();
-  }
+#undef INITIALIZE_SINGLETON
+
+
+StackFrameIterator::StackFrameIterator(Isolate* isolate)
+    : StackFrameIteratorBase(isolate, true) {
+  Reset(isolate->thread_local_top());
 }
 
-#undef INITIALIZE_SINGLETON
 
+StackFrameIterator::StackFrameIterator(Isolate* isolate, ThreadLocalTop* t)
+    : StackFrameIteratorBase(isolate, true) {
+  Reset(t);
+}
 
-void StackFrameIterator::AdvanceWithHandler() {
+
+void StackFrameIterator::Advance() {
   ASSERT(!done());
   // Compute the state of the calling frame before restoring
   // callee-saved registers and unwinding handlers. This allows the
@@ -143,37 +122,17 @@ void StackFrameIterator::AdvanceWithHandler() {
 }
 
 
-void StackFrameIterator::AdvanceWithoutHandler() {
-  // A simpler version of Advance which doesn't care about handler.
-  ASSERT(!done());
-  StackFrame::State state;
-  StackFrame::Type type = frame_->GetCallerState(&state);
-  frame_ = SingletonFor(type, &state);
-}
-
-
-void StackFrameIterator::Reset() {
+void StackFrameIterator::Reset(ThreadLocalTop* top) {
   StackFrame::State state;
-  StackFrame::Type type;
-  if (thread_ != NULL) {
-    type = ExitFrame::GetStateForFramePointer(
-        Isolate::c_entry_fp(thread_), &state);
-    handler_ = StackHandler::FromAddress(
-        Isolate::handler(thread_));
-  } else {
-    ASSERT(fp_ != NULL);
-    state.fp = fp_;
-    state.sp = sp_;
-    state.pc_address = ResolveReturnAddressLocation(
-        reinterpret_cast<Address*>(StandardFrame::ComputePCAddress(fp_)));
-    type = StackFrame::ComputeType(isolate(), &state);
-  }
+  StackFrame::Type type = ExitFrame::GetStateForFramePointer(
+      Isolate::c_entry_fp(top), &state);
+  handler_ = StackHandler::FromAddress(Isolate::handler(top));
   if (SingletonFor(type) == NULL) return;
   frame_ = SingletonFor(type, &state);
 }
 
 
-StackFrame* StackFrameIterator::SingletonFor(StackFrame::Type type,
+StackFrame* StackFrameIteratorBase::SingletonFor(StackFrame::Type type,
                                              StackFrame::State* state) {
   if (type == StackFrame::NONE) return NULL;
   StackFrame* result = SingletonFor(type);
@@ -183,7 +142,7 @@ StackFrame* StackFrameIterator::SingletonFor(StackFrame::Type type,
 }
 
 
-StackFrame* StackFrameIterator::SingletonFor(StackFrame::Type type) {
+StackFrame* StackFrameIteratorBase::SingletonFor(StackFrame::Type type) {
 #define FRAME_TYPE_CASE(type, field) \
   case StackFrame::type: result = &field##_; break;
 
@@ -202,6 +161,33 @@ StackFrame* StackFrameIterator::SingletonFor(StackFrame::Type type) {
 // -------------------------------------------------------------------------
 
 
+JavaScriptFrameIterator::JavaScriptFrameIterator(
+    Isolate* isolate, StackFrame::Id id)
+    : iterator_(isolate) {
+  while (!done()) {
+    Advance();
+    if (frame()->id() == id) return;
+  }
+}
+
+
+void JavaScriptFrameIterator::Advance() {
+  do {
+    iterator_.Advance();
+  } while (!iterator_.done() && !iterator_.frame()->is_java_script());
+}
+
+
+void JavaScriptFrameIterator::AdvanceToArgumentsFrame() {
+  if (!frame()->has_adapted_arguments()) return;
+  iterator_.Advance();
+  ASSERT(iterator_.frame()->is_arguments_adaptor());
+}
+
+
+// -------------------------------------------------------------------------
+
+
 StackTraceFrameIterator::StackTraceFrameIterator(Isolate* isolate)
     : JavaScriptFrameIterator(isolate) {
   if (!done() && !IsValidFrame()) Advance();
@@ -228,85 +214,80 @@ bool StackTraceFrameIterator::IsValidFrame() {
 // -------------------------------------------------------------------------
 
 
-bool SafeStackFrameIterator::ExitFrameValidator::IsValidFP(Address fp) {
-  if (!validator_.IsValid(fp)) return false;
-  Address sp = ExitFrame::ComputeStackPointer(fp);
-  if (!validator_.IsValid(sp)) return false;
-  StackFrame::State state;
-  ExitFrame::FillState(fp, sp, &state);
-  if (!validator_.IsValid(reinterpret_cast<Address>(state.pc_address))) {
-    return false;
-  }
-  return *state.pc_address != NULL;
-}
-
-
-SafeStackFrameIterator::ActiveCountMaintainer::ActiveCountMaintainer(
-    Isolate* isolate)
-    : isolate_(isolate) {
-  isolate_->set_safe_stack_iterator_counter(
-      isolate_->safe_stack_iterator_counter() + 1);
-}
-
-
-SafeStackFrameIterator::ActiveCountMaintainer::~ActiveCountMaintainer() {
-  isolate_->set_safe_stack_iterator_counter(
-      isolate_->safe_stack_iterator_counter() - 1);
-}
-
-
 SafeStackFrameIterator::SafeStackFrameIterator(
     Isolate* isolate,
-    Address fp, Address sp, Address low_bound, Address high_bound) :
-    maintainer_(isolate),
-    stack_validator_(low_bound, high_bound),
-    is_valid_top_(IsValidTop(isolate, low_bound, high_bound)),
-    is_valid_fp_(IsWithinBounds(low_bound, high_bound, fp)),
-    is_working_iterator_(is_valid_top_ || is_valid_fp_),
-    iteration_done_(!is_working_iterator_),
-    iterator_(isolate, is_valid_top_, is_valid_fp_ ? fp : NULL, sp) {
-}
+    Address fp, Address sp, Address js_entry_sp)
+    : StackFrameIteratorBase(isolate, false),
+      low_bound_(sp),
+      high_bound_(js_entry_sp),
+      top_frame_type_(StackFrame::NONE) {
+  StackFrame::State state;
+  StackFrame::Type type;
+  ThreadLocalTop* top = isolate->thread_local_top();
+  if (IsValidTop(top)) {
+    type = ExitFrame::GetStateForFramePointer(Isolate::c_entry_fp(top), &state);
+    top_frame_type_ = type;
+  } else if (IsValidStackAddress(fp)) {
+    ASSERT(fp != NULL);
+    state.fp = fp;
+    state.sp = sp;
+    state.pc_address = StackFrame::ResolveReturnAddressLocation(
+        reinterpret_cast<Address*>(StandardFrame::ComputePCAddress(fp)));
+    // StackFrame::ComputeType will read both kContextOffset and kMarkerOffset,
+    // we check only that kMarkerOffset is within the stack bounds and do
+    // compile time check that kContextOffset slot is pushed on the stack before
+    // kMarkerOffset.
+    STATIC_ASSERT(StandardFrameConstants::kMarkerOffset <
+                  StandardFrameConstants::kContextOffset);
+    Address frame_marker = fp + StandardFrameConstants::kMarkerOffset;
+    if (IsValidStackAddress(frame_marker)) {
+      type = StackFrame::ComputeType(this, &state);
+      top_frame_type_ = type;
+    } else {
+      // Mark the frame as JAVA_SCRIPT if we cannot determine its type.
+      // The frame anyways will be skipped.
+      type = StackFrame::JAVA_SCRIPT;
+      // Top frame is incomplete so we cannot reliably determine its type.
+      top_frame_type_ = StackFrame::NONE;
+    }
+  } else {
+    return;
+  }
+  if (SingletonFor(type) == NULL) return;
+  frame_ = SingletonFor(type, &state);
 
-bool SafeStackFrameIterator::is_active(Isolate* isolate) {
-  return isolate->safe_stack_iterator_counter() > 0;
+  if (!done()) Advance();
 }
 
 
-bool SafeStackFrameIterator::IsValidTop(Isolate* isolate,
-                                        Address low_bound, Address high_bound) {
-  ThreadLocalTop* top = isolate->thread_local_top();
+bool SafeStackFrameIterator::IsValidTop(ThreadLocalTop* top) const {
   Address fp = Isolate::c_entry_fp(top);
-  ExitFrameValidator validator(low_bound, high_bound);
-  if (!validator.IsValidFP(fp)) return false;
+  if (!IsValidExitFrame(fp)) return false;
+  // There should be at least one JS_ENTRY stack handler.
   return Isolate::handler(top) != NULL;
 }
 
 
-void SafeStackFrameIterator::Advance() {
-  ASSERT(is_working_iterator_);
+void SafeStackFrameIterator::AdvanceOneFrame() {
   ASSERT(!done());
-  StackFrame* last_frame = iterator_.frame();
+  StackFrame* last_frame = frame_;
   Address last_sp = last_frame->sp(), last_fp = last_frame->fp();
-  // Before advancing to the next stack frame, perform pointer validity tests
-  iteration_done_ = !IsValidFrame(last_frame) ||
-      !CanIterateHandles(last_frame, iterator_.handler()) ||
-      !IsValidCaller(last_frame);
-  if (iteration_done_) return;
-
-  iterator_.Advance();
-  if (iterator_.done()) return;
-  // Check that we have actually moved to the previous frame in the stack
-  StackFrame* prev_frame = iterator_.frame();
-  iteration_done_ = prev_frame->sp() < last_sp || prev_frame->fp() < last_fp;
-}
+  // Before advancing to the next stack frame, perform pointer validity tests.
+  if (!IsValidFrame(last_frame) || !IsValidCaller(last_frame)) {
+    frame_ = NULL;
+    return;
+  }
 
+  // Advance to the previous frame.
+  StackFrame::State state;
+  StackFrame::Type type = frame_->GetCallerState(&state);
+  frame_ = SingletonFor(type, &state);
+  if (frame_ == NULL) return;
 
-bool SafeStackFrameIterator::CanIterateHandles(StackFrame* frame,
-                                               StackHandler* handler) {
-  // If StackIterator iterates over StackHandles, verify that
-  // StackHandlerIterator can be instantiated (see StackHandlerIterator
-  // constructor.)
-  return !is_valid_top_ || (frame->sp() <= handler->address());
+  // Check that we have actually moved to the previous frame in the stack.
+  if (frame_->sp() < last_sp || frame_->fp() < last_fp) {
+    frame_ = NULL;
+  }
 }
 
 
@@ -323,8 +304,7 @@ bool SafeStackFrameIterator::IsValidCaller(StackFrame* frame) {
     // sure that caller FP address is valid.
     Address caller_fp = Memory::Address_at(
         frame->fp() + EntryFrameConstants::kCallerFPOffset);
-    ExitFrameValidator validator(stack_validator_);
-    if (!validator.IsValidFP(caller_fp)) return false;
+    if (!IsValidExitFrame(caller_fp)) return false;
   } else if (frame->is_arguments_adaptor()) {
     // See ArgumentsAdaptorFrame::GetCallerStackPointer. It assumes that
     // the number of arguments is stored on stack as Smi. We need to check
@@ -337,38 +317,35 @@ bool SafeStackFrameIterator::IsValidCaller(StackFrame* frame) {
   }
   frame->ComputeCallerState(&state);
   return IsValidStackAddress(state.sp) && IsValidStackAddress(state.fp) &&
-      iterator_.SingletonFor(frame->GetCallerState(&state)) != NULL;
+      SingletonFor(frame->GetCallerState(&state)) != NULL;
 }
 
 
-void SafeStackFrameIterator::Reset() {
-  if (is_working_iterator_) {
-    iterator_.Reset();
-    iteration_done_ = false;
+bool SafeStackFrameIterator::IsValidExitFrame(Address fp) const {
+  if (!IsValidStackAddress(fp)) return false;
+  Address sp = ExitFrame::ComputeStackPointer(fp);
+  if (!IsValidStackAddress(sp)) return false;
+  StackFrame::State state;
+  ExitFrame::FillState(fp, sp, &state);
+  if (!IsValidStackAddress(reinterpret_cast<Address>(state.pc_address))) {
+    return false;
   }
+  return *state.pc_address != NULL;
 }
 
 
-// -------------------------------------------------------------------------
-
-
-SafeStackTraceFrameIterator::SafeStackTraceFrameIterator(
-    Isolate* isolate,
-    Address fp, Address sp, Address low_bound, Address high_bound) :
-    SafeJavaScriptFrameIterator(isolate, fp, sp, low_bound, high_bound) {
-  if (!done() && !frame()->is_java_script()) Advance();
-}
-
-
-void SafeStackTraceFrameIterator::Advance() {
+void SafeStackFrameIterator::Advance() {
   while (true) {
-    SafeJavaScriptFrameIterator::Advance();
+    AdvanceOneFrame();
     if (done()) return;
-    if (frame()->is_java_script()) return;
+    if (frame_->is_java_script()) return;
   }
 }
 
 
+// -------------------------------------------------------------------------
+
+
 Code* StackFrame::GetSafepointData(Isolate* isolate,
                                    Address inner_pointer,
                                    SafepointEntry* safepoint_entry,
@@ -420,12 +397,13 @@ void StackFrame::IteratePc(ObjectVisitor* v,
 
 void StackFrame::SetReturnAddressLocationResolver(
     ReturnAddressLocationResolver resolver) {
-  ASSERT(return_address_location_resolver == NULL);
-  return_address_location_resolver = resolver;
+  ASSERT(return_address_location_resolver_ == NULL);
+  return_address_location_resolver_ = resolver;
 }
 
 
-StackFrame::Type StackFrame::ComputeType(Isolate* isolate, State* state) {
+StackFrame::Type StackFrame::ComputeType(const StackFrameIteratorBase* iterator,
+                                         State* state) {
   ASSERT(state->fp != NULL);
   if (StandardFrame::IsArgumentsAdaptorFrame(state->fp)) {
     return ARGUMENTS_ADAPTOR;
@@ -440,8 +418,9 @@ StackFrame::Type StackFrame::ComputeType(Isolate* isolate, State* state) {
     // frames as normal JavaScript frames to avoid having to look
     // into the heap to determine the state. This is safe as long
     // as nobody tries to GC...
-    if (SafeStackFrameIterator::is_active(isolate)) return JAVA_SCRIPT;
-    Code::Kind kind = GetContainingCode(isolate, *(state->pc_address))->kind();
+    if (!iterator->can_access_heap_objects_) return JAVA_SCRIPT;
+    Code::Kind kind = GetContainingCode(iterator->isolate(),
+                                        *(state->pc_address))->kind();
     ASSERT(kind == Code::FUNCTION || kind == Code::OPTIMIZED_FUNCTION);
     return (kind == Code::OPTIMIZED_FUNCTION) ? OPTIMIZED : JAVA_SCRIPT;
   }
@@ -449,15 +428,21 @@ StackFrame::Type StackFrame::ComputeType(Isolate* isolate, State* state) {
 }
 
 
+#ifdef DEBUG
+bool StackFrame::can_access_heap_objects() const {
+  return iterator_->can_access_heap_objects_;
+}
+#endif
+
 
 StackFrame::Type StackFrame::GetCallerState(State* state) const {
   ComputeCallerState(state);
-  return ComputeType(isolate(), state);
+  return ComputeType(iterator_, state);
 }
 
 
 Address StackFrame::UnpaddedFP() const {
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
   if (!is_optimized()) return fp();
   int32_t alignment_state = Memory::int32_at(
     fp() + JavaScriptFrameConstants::kDynamicAlignmentStateOffset);
@@ -545,6 +530,11 @@ StackFrame::Type ExitFrame::GetStateForFramePointer(Address fp, State* state) {
 }
 
 
+Address ExitFrame::ComputeStackPointer(Address fp) {
+  return Memory::Address_at(fp + ExitFrameConstants::kSPOffset);
+}
+
+
 void ExitFrame::FillState(Address fp, Address sp, State* state) {
   state->sp = sp;
   state->fp = fp;
@@ -607,7 +597,7 @@ bool StandardFrame::IsExpressionInsideHandler(int n) const {
 void StandardFrame::IterateCompiledFrame(ObjectVisitor* v) const {
   // Make sure that we're not doing "safe" stack frame iteration. We cannot
   // possibly find pointers in optimized frames in that state.
-  ASSERT(!SafeStackFrameIterator::is_active(isolate()));
+  ASSERT(can_access_heap_objects());
 
   // Compute the safepoint information.
   unsigned stack_slots = 0;
@@ -734,12 +724,12 @@ int JavaScriptFrame::GetArgumentsLength() const {
 
 Code* JavaScriptFrame::unchecked_code() const {
   JSFunction* function = JSFunction::cast(this->function());
-  return function->unchecked_code();
+  return function->code();
 }
 
 
 int JavaScriptFrame::GetNumberOfIncomingArguments() const {
-  ASSERT(!SafeStackFrameIterator::is_active(isolate()) &&
+  ASSERT(can_access_heap_objects() &&
          isolate()->heap()->gc_state() == Heap::NOT_IN_GC);
 
   JSFunction* function = JSFunction::cast(this->function());
index f09c24a..0a5b609 100644 (file)
@@ -47,7 +47,7 @@ int JSCallerSavedCode(int n);
 
 
 // Forward declarations.
-class StackFrameIterator;
+class StackFrameIteratorBase;
 class ThreadLocalTop;
 class Isolate;
 
@@ -297,6 +297,10 @@ class StackFrame BASE_EMBEDDED {
   static void SetReturnAddressLocationResolver(
       ReturnAddressLocationResolver resolver);
 
+  // Resolves pc_address through the resolution address function if one is set.
+  static inline Address* ResolveReturnAddressLocation(Address* pc_address);
+
+
   // Printing support.
   enum PrintMode { OVERVIEW, DETAILS };
   virtual void Print(StringStream* accumulator,
@@ -306,7 +310,7 @@ class StackFrame BASE_EMBEDDED {
   Isolate* isolate() const { return isolate_; }
 
  protected:
-  inline explicit StackFrame(StackFrameIterator* iterator);
+  inline explicit StackFrame(StackFrameIteratorBase* iterator);
   virtual ~StackFrame() { }
 
   // Compute the stack pointer for the calling frame.
@@ -321,13 +325,19 @@ class StackFrame BASE_EMBEDDED {
   inline StackHandler* top_handler() const;
 
   // Compute the stack frame type for the given state.
-  static Type ComputeType(Isolate* isolate, State* state);
+  static Type ComputeType(const StackFrameIteratorBase* iterator, State* state);
+
+#ifdef DEBUG
+  bool can_access_heap_objects() const;
+#endif
 
  private:
-  const StackFrameIterator* iterator_;
+  const StackFrameIteratorBase* iterator_;
   Isolate* isolate_;
   State state_;
 
+  static ReturnAddressLocationResolver return_address_location_resolver_;
+
   // Fill in the state of the calling frame.
   virtual void ComputeCallerState(State* state) const = 0;
 
@@ -337,6 +347,7 @@ class StackFrame BASE_EMBEDDED {
   static const intptr_t kIsolateTag = 1;
 
   friend class StackFrameIterator;
+  friend class StackFrameIteratorBase;
   friend class StackHandlerIterator;
   friend class SafeStackFrameIterator;
 
@@ -362,7 +373,7 @@ class EntryFrame: public StackFrame {
   virtual void SetCallerFp(Address caller_fp);
 
  protected:
-  inline explicit EntryFrame(StackFrameIterator* iterator);
+  inline explicit EntryFrame(StackFrameIteratorBase* iterator);
 
   // The caller stack pointer for entry frames is always zero. The
   // real information about the caller frame is available through the
@@ -373,7 +384,7 @@ class EntryFrame: public StackFrame {
   virtual void ComputeCallerState(State* state) const;
   virtual Type GetCallerState(State* state) const;
 
-  friend class StackFrameIterator;
+  friend class StackFrameIteratorBase;
 };
 
 
@@ -389,10 +400,10 @@ class EntryConstructFrame: public EntryFrame {
   }
 
  protected:
-  inline explicit EntryConstructFrame(StackFrameIterator* iterator);
+  inline explicit EntryConstructFrame(StackFrameIteratorBase* iterator);
 
  private:
-  friend class StackFrameIterator;
+  friend class StackFrameIteratorBase;
 };
 
 
@@ -423,14 +434,14 @@ class ExitFrame: public StackFrame {
   static void FillState(Address fp, Address sp, State* state);
 
  protected:
-  inline explicit ExitFrame(StackFrameIterator* iterator);
+  inline explicit ExitFrame(StackFrameIteratorBase* iterator);
 
   virtual Address GetCallerStackPointer() const;
 
  private:
   virtual void ComputeCallerState(State* state) const;
 
-  friend class StackFrameIterator;
+  friend class StackFrameIteratorBase;
 };
 
 
@@ -456,7 +467,7 @@ class StandardFrame: public StackFrame {
   }
 
  protected:
-  inline explicit StandardFrame(StackFrameIterator* iterator);
+  inline explicit StandardFrame(StackFrameIteratorBase* iterator);
 
   virtual void ComputeCallerState(State* state) const;
 
@@ -493,7 +504,7 @@ class StandardFrame: public StackFrame {
 
  private:
   friend class StackFrame;
-  friend class StackFrameIterator;
+  friend class SafeStackFrameIterator;
 };
 
 
@@ -599,7 +610,7 @@ class JavaScriptFrame: public StandardFrame {
                        bool print_line_number);
 
  protected:
-  inline explicit JavaScriptFrame(StackFrameIterator* iterator);
+  inline explicit JavaScriptFrame(StackFrameIteratorBase* iterator);
 
   virtual Address GetCallerStackPointer() const;
 
@@ -612,7 +623,7 @@ class JavaScriptFrame: public StandardFrame {
  private:
   inline Object* function_slot_object() const;
 
-  friend class StackFrameIterator;
+  friend class StackFrameIteratorBase;
 };
 
 
@@ -627,13 +638,13 @@ class StubFrame : public StandardFrame {
   virtual Code* unchecked_code() const;
 
  protected:
-  inline explicit StubFrame(StackFrameIterator* iterator);
+  inline explicit StubFrame(StackFrameIteratorBase* iterator);
 
   virtual Address GetCallerStackPointer() const;
 
   virtual int GetNumberOfIncomingArguments() const;
 
-  friend class StackFrameIterator;
+  friend class StackFrameIteratorBase;
 };
 
 
@@ -656,12 +667,12 @@ class OptimizedFrame : public JavaScriptFrame {
   DeoptimizationInputData* GetDeoptimizationData(int* deopt_index);
 
  protected:
-  inline explicit OptimizedFrame(StackFrameIterator* iterator);
+  inline explicit OptimizedFrame(StackFrameIteratorBase* iterator);
 
  private:
   JSFunction* LiteralAt(FixedArray* literal_array, int literal_id);
 
-  friend class StackFrameIterator;
+  friend class StackFrameIteratorBase;
 };
 
 
@@ -686,14 +697,14 @@ class ArgumentsAdaptorFrame: public JavaScriptFrame {
                      int index) const;
 
  protected:
-  inline explicit ArgumentsAdaptorFrame(StackFrameIterator* iterator);
+  inline explicit ArgumentsAdaptorFrame(StackFrameIteratorBase* iterator);
 
   virtual int GetNumberOfIncomingArguments() const;
 
   virtual Address GetCallerStackPointer() const;
 
  private:
-  friend class StackFrameIterator;
+  friend class StackFrameIteratorBase;
 };
 
 
@@ -713,12 +724,12 @@ class InternalFrame: public StandardFrame {
   }
 
  protected:
-  inline explicit InternalFrame(StackFrameIterator* iterator);
+  inline explicit InternalFrame(StackFrameIteratorBase* iterator);
 
   virtual Address GetCallerStackPointer() const;
 
  private:
-  friend class StackFrameIterator;
+  friend class StackFrameIteratorBase;
 };
 
 
@@ -746,12 +757,12 @@ class StubFailureTrampolineFrame: public StandardFrame {
 
  protected:
   inline explicit StubFailureTrampolineFrame(
-      StackFrameIterator* iterator);
+      StackFrameIteratorBase* iterator);
 
   virtual Address GetCallerStackPointer() const;
 
  private:
-  friend class StackFrameIterator;
+  friend class StackFrameIteratorBase;
 };
 
 
@@ -767,50 +778,30 @@ class ConstructFrame: public InternalFrame {
   }
 
  protected:
-  inline explicit ConstructFrame(StackFrameIterator* iterator);
+  inline explicit ConstructFrame(StackFrameIteratorBase* iterator);
 
  private:
-  friend class StackFrameIterator;
+  friend class StackFrameIteratorBase;
 };
 
 
-class StackFrameIterator BASE_EMBEDDED {
+class StackFrameIteratorBase BASE_EMBEDDED {
  public:
-  // An iterator that iterates over the isolate's current thread's stack,
-  explicit StackFrameIterator(Isolate* isolate);
-
-  // An iterator that iterates over a given thread's stack.
-  StackFrameIterator(Isolate* isolate, ThreadLocalTop* t);
-
-  // An iterator that can start from a given FP address.
-  // If use_top, then work as usual, if fp isn't NULL, use it,
-  // otherwise, do nothing.
-  StackFrameIterator(Isolate* isolate, bool use_top, Address fp, Address sp);
-
-  StackFrame* frame() const {
-    ASSERT(!done());
-    return frame_;
-  }
-
   Isolate* isolate() const { return isolate_; }
 
   bool done() const { return frame_ == NULL; }
-  void Advance() { (this->*advance_)(); }
 
-  // Go back to the first frame.
-  void Reset();
+ protected:
+  // An iterator that iterates over a given thread's stack.
+  StackFrameIteratorBase(Isolate* isolate, bool can_access_heap_objects);
 
- private:
   Isolate* isolate_;
 #define DECLARE_SINGLETON(ignore, type) type type##_;
   STACK_FRAME_TYPE_LIST(DECLARE_SINGLETON)
 #undef DECLARE_SINGLETON
   StackFrame* frame_;
   StackHandler* handler_;
-  ThreadLocalTop* thread_;
-  Address fp_;
-  Address sp_;
-  void (StackFrameIterator::*advance_)();
+  const bool can_access_heap_objects_;
 
   StackHandler* handler() const {
     ASSERT(!done());
@@ -822,44 +813,40 @@ class StackFrameIterator BASE_EMBEDDED {
   // A helper function, can return a NULL pointer.
   StackFrame* SingletonFor(StackFrame::Type type);
 
-  void AdvanceWithHandler();
-  void AdvanceWithoutHandler();
-
+ private:
   friend class StackFrame;
-  friend class SafeStackFrameIterator;
-  DISALLOW_COPY_AND_ASSIGN(StackFrameIterator);
+  DISALLOW_COPY_AND_ASSIGN(StackFrameIteratorBase);
 };
 
 
-// Iterator that supports iterating through all JavaScript frames.
-template<typename Iterator>
-class JavaScriptFrameIteratorTemp BASE_EMBEDDED {
+class StackFrameIterator: public StackFrameIteratorBase {
  public:
-  inline explicit JavaScriptFrameIteratorTemp(Isolate* isolate);
+  // An iterator that iterates over the isolate's current thread's stack,
+  explicit StackFrameIterator(Isolate* isolate);
+  // An iterator that iterates over a given thread's stack.
+  StackFrameIterator(Isolate* isolate, ThreadLocalTop* t);
 
-  inline JavaScriptFrameIteratorTemp(Isolate* isolate, ThreadLocalTop* top);
+  StackFrame* frame() const {
+    ASSERT(!done());
+    return frame_;
+  }
+  void Advance();
 
-  // Skip frames until the frame with the given id is reached.
-  explicit JavaScriptFrameIteratorTemp(StackFrame::Id id) { AdvanceToId(id); }
+ private:
+  // Go back to the first frame.
+  void Reset(ThreadLocalTop* top);
 
-  inline JavaScriptFrameIteratorTemp(Isolate* isolate, StackFrame::Id id);
+  DISALLOW_COPY_AND_ASSIGN(StackFrameIterator);
+};
 
-  JavaScriptFrameIteratorTemp(Address fp,
-                              Address sp,
-                              Address low_bound,
-                              Address high_bound) :
-      iterator_(fp, sp, low_bound, high_bound) {
-    if (!done()) Advance();
-  }
 
-  JavaScriptFrameIteratorTemp(Isolate* isolate,
-                              Address fp,
-                              Address sp,
-                              Address low_bound,
-                              Address high_bound) :
-      iterator_(isolate, fp, sp, low_bound, high_bound) {
-    if (!done()) Advance();
-  }
+// Iterator that supports iterating through all JavaScript frames.
+class JavaScriptFrameIterator BASE_EMBEDDED {
+ public:
+  inline explicit JavaScriptFrameIterator(Isolate* isolate);
+  inline JavaScriptFrameIterator(Isolate* isolate, ThreadLocalTop* top);
+  // Skip frames until the frame with the given id is reached.
+  JavaScriptFrameIterator(Isolate* isolate, StackFrame::Id id);
 
   inline JavaScriptFrame* frame() const;
 
@@ -871,26 +858,17 @@ class JavaScriptFrameIteratorTemp BASE_EMBEDDED {
   // arguments.
   void AdvanceToArgumentsFrame();
 
-  // Go back to the first frame.
-  void Reset();
-
  private:
-  inline void AdvanceToId(StackFrame::Id id);
-
-  Iterator iterator_;
+  StackFrameIterator iterator_;
 };
 
 
-typedef JavaScriptFrameIteratorTemp<StackFrameIterator> JavaScriptFrameIterator;
-
-
 // NOTE: The stack trace frame iterator is an iterator that only
 // traverse proper JavaScript frames; that is JavaScript frames that
 // have proper JavaScript functions. This excludes the problematic
 // functions in runtime.js.
 class StackTraceFrameIterator: public JavaScriptFrameIterator {
  public:
-  StackTraceFrameIterator();
   explicit StackTraceFrameIterator(Isolate* isolate);
   void Advance();
 
@@ -899,95 +877,31 @@ class StackTraceFrameIterator: public JavaScriptFrameIterator {
 };
 
 
-class SafeStackFrameIterator BASE_EMBEDDED {
+class SafeStackFrameIterator: public StackFrameIteratorBase {
  public:
   SafeStackFrameIterator(Isolate* isolate,
                          Address fp, Address sp,
-                         Address low_bound, Address high_bound);
-
-  StackFrame* frame() const {
-    ASSERT(is_working_iterator_);
-    return iterator_.frame();
-  }
-
-  bool done() const { return iteration_done_ ? true : iterator_.done(); }
+                         Address js_entry_sp);
 
+  inline JavaScriptFrame* frame() const;
   void Advance();
-  void Reset();
-
-  static bool is_active(Isolate* isolate);
 
-  static bool IsWithinBounds(
-      Address low_bound, Address high_bound, Address addr) {
-    return low_bound <= addr && addr <= high_bound;
-  }
+  StackFrame::Type top_frame_type() const { return top_frame_type_; }
 
  private:
-  class StackAddressValidator {
-   public:
-    StackAddressValidator(Address low_bound, Address high_bound)
-        : low_bound_(low_bound), high_bound_(high_bound) { }
-    bool IsValid(Address addr) const {
-      return IsWithinBounds(low_bound_, high_bound_, addr);
-    }
-   private:
-    Address low_bound_;
-    Address high_bound_;
-  };
-
-  class ExitFrameValidator {
-   public:
-    explicit ExitFrameValidator(const StackAddressValidator& validator)
-        : validator_(validator) { }
-    ExitFrameValidator(Address low_bound, Address high_bound)
-        : validator_(low_bound, high_bound) { }
-    bool IsValidFP(Address fp);
-   private:
-    StackAddressValidator validator_;
-  };
+  void AdvanceOneFrame();
 
   bool IsValidStackAddress(Address addr) const {
-    return stack_validator_.IsValid(addr);
+    return low_bound_ <= addr && addr <= high_bound_;
   }
-  bool CanIterateHandles(StackFrame* frame, StackHandler* handler);
   bool IsValidFrame(StackFrame* frame) const;
   bool IsValidCaller(StackFrame* frame);
-  static bool IsValidTop(Isolate* isolate,
-                         Address low_bound, Address high_bound);
-
-  // This is a nasty hack to make sure the active count is incremented
-  // before the constructor for the embedded iterator is invoked. This
-  // is needed because the constructor will start looking at frames
-  // right away and we need to make sure it doesn't start inspecting
-  // heap objects.
-  class ActiveCountMaintainer BASE_EMBEDDED {
-   public:
-    explicit ActiveCountMaintainer(Isolate* isolate);
-    ~ActiveCountMaintainer();
-   private:
-    Isolate* isolate_;
-  };
-
-  ActiveCountMaintainer maintainer_;
-  StackAddressValidator stack_validator_;
-  const bool is_valid_top_;
-  const bool is_valid_fp_;
-  const bool is_working_iterator_;
-  bool iteration_done_;
-  StackFrameIterator iterator_;
-};
+  bool IsValidExitFrame(Address fp) const;
+  bool IsValidTop(ThreadLocalTop* top) const;
 
-
-typedef JavaScriptFrameIteratorTemp<SafeStackFrameIterator>
-    SafeJavaScriptFrameIterator;
-
-
-class SafeStackTraceFrameIterator: public SafeJavaScriptFrameIterator {
- public:
-  explicit SafeStackTraceFrameIterator(Isolate* isolate,
-                                       Address fp, Address sp,
-                                       Address low_bound, Address high_bound);
-  void Advance();
+  const Address low_bound_;
+  const Address high_bound_;
+  StackFrame::Type top_frame_type_;
 };
 
 
index bad634c..c1350a1 100644 (file)
@@ -473,7 +473,7 @@ void FullCodeGenerator::PrepareForBailoutForId(BailoutId id, State state) {
 
 
 void FullCodeGenerator::RecordTypeFeedbackCell(
-    TypeFeedbackId id, Handle<JSGlobalPropertyCell> cell) {
+    TypeFeedbackId id, Handle<Cell> cell) {
   TypeFeedbackCellEntry entry = { id, cell };
   type_feedback_cells_.Add(entry, zone());
 }
@@ -940,6 +940,11 @@ void FullCodeGenerator::EmitGeneratorThrow(CallRuntime* expr) {
 }
 
 
+void FullCodeGenerator::EmitDebugBreakInOptimizedCode(CallRuntime* expr) {
+  context()->Plug(handle(Smi::FromInt(0), isolate()));
+}
+
+
 void FullCodeGenerator::VisitBinaryOperation(BinaryOperation* expr) {
   switch (expr->op()) {
     case Token::COMMA:
@@ -1230,13 +1235,7 @@ void FullCodeGenerator::VisitBreakStatement(BreakStatement* stmt) {
 }
 
 
-void FullCodeGenerator::VisitReturnStatement(ReturnStatement* stmt) {
-  Comment cmnt(masm_, "[ ReturnStatement");
-  SetStatementPosition(stmt);
-  Expression* expr = stmt->expression();
-  VisitForAccumulatorValue(expr);
-
-  // Exit all nested statements.
+void FullCodeGenerator::EmitUnwindBeforeReturn() {
   NestedStatement* current = nesting_stack_;
   int stack_depth = 0;
   int context_length = 0;
@@ -1244,7 +1243,15 @@ void FullCodeGenerator::VisitReturnStatement(ReturnStatement* stmt) {
     current = current->Exit(&stack_depth, &context_length);
   }
   __ Drop(stack_depth);
+}
 
+
+void FullCodeGenerator::VisitReturnStatement(ReturnStatement* stmt) {
+  Comment cmnt(masm_, "[ ReturnStatement");
+  SetStatementPosition(stmt);
+  Expression* expr = stmt->expression();
+  VisitForAccumulatorValue(expr);
+  EmitUnwindBeforeReturn();
   EmitReturnSequence();
 }
 
@@ -1543,7 +1550,7 @@ void FullCodeGenerator::VisitConditional(Conditional* expr) {
 
 void FullCodeGenerator::VisitLiteral(Literal* expr) {
   Comment cmnt(masm_, "[ Literal");
-  context()->Plug(expr->handle());
+  context()->Plug(expr->value());
 }
 
 
index 68263a5..7e64506 100644 (file)
@@ -123,14 +123,15 @@ class FullCodeGenerator: public AstVisitor {
 
   static const int kMaxBackEdgeWeight = 127;
 
+  // Platform-specific code size multiplier.
 #if V8_TARGET_ARCH_IA32
-  static const int kBackEdgeDistanceUnit = 100;
+  static const int kCodeSizeMultiplier = 100;
 #elif V8_TARGET_ARCH_X64
-  static const int kBackEdgeDistanceUnit = 162;
+  static const int kCodeSizeMultiplier = 162;
 #elif V8_TARGET_ARCH_ARM
-  static const int kBackEdgeDistanceUnit = 142;
+  static const int kCodeSizeMultiplier = 142;
 #elif V8_TARGET_ARCH_MIPS
-  static const int kBackEdgeDistanceUnit = 142;
+  static const int kCodeSizeMultiplier = 142;
 #else
 #error Unsupported target architecture.
 #endif
@@ -331,7 +332,7 @@ class FullCodeGenerator: public AstVisitor {
 
   // Helper function to split control flow and avoid a branch to the
   // fall-through label if it is set up.
-#ifdef V8_TARGET_ARCH_MIPS
+#if V8_TARGET_ARCH_MIPS
   void Split(Condition cc,
              Register lhs,
              const Operand&  rhs,
@@ -410,10 +411,10 @@ class FullCodeGenerator: public AstVisitor {
   // this has to be a separate pass _before_ populating or executing any module.
   void AllocateModules(ZoneList<Declaration*>* declarations);
 
-  // Generator code to return a fresh iterator result object.  The "value"
-  // property is set to a value popped from the stack, and "done" is set
-  // according to the argument.
-  void EmitReturnIteratorResult(bool done);
+  // Generate code to create an iterator result object.  The "value" property is
+  // set to a value popped from the stack, and "done" is set according to the
+  // argument.  The result object is left in the result register.
+  void EmitCreateIteratorResult(bool done);
 
   // Try to perform a comparison as a fast inlined literal compare if
   // the operands allow it.  Returns true if the compare operations
@@ -437,8 +438,7 @@ class FullCodeGenerator: public AstVisitor {
 
   // Cache cell support.  This associates AST ids with global property cells
   // that will be cleared during GC and collected by the type-feedback oracle.
-  void RecordTypeFeedbackCell(TypeFeedbackId id,
-                              Handle<JSGlobalPropertyCell> cell);
+  void RecordTypeFeedbackCell(TypeFeedbackId id, Handle<Cell> cell);
 
   // Record a call's return site offset, used to rebuild the frame if the
   // called function was inlined at the site.
@@ -472,6 +472,11 @@ class FullCodeGenerator: public AstVisitor {
   void EmitProfilingCounterDecrement(int delta);
   void EmitProfilingCounterReset();
 
+  // Emit code to pop values from the stack associated with nested statements
+  // like try/catch, try/finally, etc, running the finallies and unwinding the
+  // handlers as needed.
+  void EmitUnwindBeforeReturn();
+
   // Platform-specific return sequence
   void EmitReturnSequence();
 
@@ -648,7 +653,7 @@ class FullCodeGenerator: public AstVisitor {
 
   struct TypeFeedbackCellEntry {
     TypeFeedbackId ast_id;
-    Handle<JSGlobalPropertyCell> cell;
+    Handle<Cell> cell;
   };
 
 
@@ -844,7 +849,7 @@ class FullCodeGenerator: public AstVisitor {
   ZoneList<TypeFeedbackCellEntry> type_feedback_cells_;
   int ic_total_count_;
   Handle<FixedArray> handler_table_;
-  Handle<JSGlobalPropertyCell> profiling_counter_;
+  Handle<Cell> profiling_counter_;
   bool generate_debug_code_;
   Zone* zone_;
 
index 5717a96..825d1e7 100644 (file)
@@ -217,7 +217,7 @@ class DebugSectionBase : public ZoneObject {
 struct MachOSectionHeader {
   char sectname[16];
   char segname[16];
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
   uint32_t addr;
   uint32_t size;
 #else
@@ -500,10 +500,10 @@ void ELFSection::PopulateHeader(Writer::Slot<ELFSection::Header> header,
 #if defined(__MACH_O)
 class MachO BASE_EMBEDDED {
  public:
-  MachO() : sections_(6) { }
+  explicit MachO(Zone* zone) : zone_(zone), sections_(6, zone) { }
 
   uint32_t AddSection(MachOSection* section) {
-    sections_.Add(section);
+    sections_.Add(section, zone_);
     return sections_.length() - 1;
   }
 
@@ -525,7 +525,7 @@ class MachO BASE_EMBEDDED {
     uint32_t ncmds;
     uint32_t sizeofcmds;
     uint32_t flags;
-#if defined(V8_TARGET_ARCH_X64)
+#if V8_TARGET_ARCH_X64
     uint32_t reserved;
 #endif
   };
@@ -534,7 +534,7 @@ class MachO BASE_EMBEDDED {
     uint32_t cmd;
     uint32_t cmdsize;
     char segname[16];
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
     uint32_t vmaddr;
     uint32_t vmsize;
     uint32_t fileoff;
@@ -560,11 +560,11 @@ class MachO BASE_EMBEDDED {
   Writer::Slot<MachOHeader> WriteHeader(Writer* w) {
     ASSERT(w->position() == 0);
     Writer::Slot<MachOHeader> header = w->CreateSlotHere<MachOHeader>();
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
     header->magic = 0xFEEDFACEu;
     header->cputype = 7;  // i386
     header->cpusubtype = 3;  // CPU_SUBTYPE_I386_ALL
-#elif defined(V8_TARGET_ARCH_X64)
+#elif V8_TARGET_ARCH_X64
     header->magic = 0xFEEDFACFu;
     header->cputype = 7 | 0x01000000;  // i386 | 64-bit ABI
     header->cpusubtype = 3;  // CPU_SUBTYPE_I386_ALL
@@ -585,7 +585,7 @@ class MachO BASE_EMBEDDED {
                                                         uintptr_t code_size) {
     Writer::Slot<MachOSegmentCommand> cmd =
         w->CreateSlotHere<MachOSegmentCommand>();
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
     cmd->cmd = LC_SEGMENT_32;
 #else
     cmd->cmd = LC_SEGMENT_64;
@@ -620,7 +620,7 @@ class MachO BASE_EMBEDDED {
     cmd->filesize = w->position() - (uintptr_t)cmd->fileoff;
   }
 
-
+  Zone* zone_;
   ZoneList<MachOSection*> sections_;
 };
 #endif  // defined(__MACH_O)
@@ -629,7 +629,7 @@ class MachO BASE_EMBEDDED {
 #if defined(__ELF)
 class ELF BASE_EMBEDDED {
  public:
-  explicit ELF(Zone* zone) : sections_(6, zone) {
+  explicit ELF(Zone* zone) : zone_(zone), sections_(6, zone) {
     sections_.Add(new(zone) ELFSection("", ELFSection::TYPE_NULL, 0), zone);
     sections_.Add(new(zone) ELFStringTable(".shstrtab"), zone);
   }
@@ -644,8 +644,8 @@ class ELF BASE_EMBEDDED {
     return sections_[index];
   }
 
-  uint32_t AddSection(ELFSection* section, Zone* zone) {
-    sections_.Add(section, zone);
+  uint32_t AddSection(ELFSection* section) {
+    sections_.Add(section, zone_);
     section->set_index(sections_.length() - 1);
     return sections_.length() - 1;
   }
@@ -672,10 +672,10 @@ class ELF BASE_EMBEDDED {
   void WriteHeader(Writer* w) {
     ASSERT(w->position() == 0);
     Writer::Slot<ELFHeader> header = w->CreateSlotHere<ELFHeader>();
-#if defined(V8_TARGET_ARCH_IA32) || defined(V8_TARGET_ARCH_ARM)
+#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_ARM
     const uint8_t ident[16] =
         { 0x7f, 'E', 'L', 'F', 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-#elif defined(V8_TARGET_ARCH_X64)
+#elif V8_TARGET_ARCH_X64
     const uint8_t ident[16] =
         { 0x7f, 'E', 'L', 'F', 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0};
 #else
@@ -683,14 +683,14 @@ class ELF BASE_EMBEDDED {
 #endif
     OS::MemCopy(header->ident, ident, 16);
     header->type = 1;
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
     header->machine = 3;
-#elif defined(V8_TARGET_ARCH_X64)
+#elif V8_TARGET_ARCH_X64
     // Processor identification value for x64 is 62 as defined in
     //    System V ABI, AMD64 Supplement
     //    http://www.x86-64.org/documentation/abi.pdf
     header->machine = 62;
-#elif defined(V8_TARGET_ARCH_ARM)
+#elif V8_TARGET_ARCH_ARM
     // Set to EM_ARM, defined as 40, in "ARM ELF File Format" at
     // infocenter.arm.com/help/topic/com.arm.doc.dui0101a/DUI0101A_Elf.pdf
     header->machine = 40;
@@ -743,6 +743,7 @@ class ELF BASE_EMBEDDED {
     }
   }
 
+  Zone* zone_;
   ZoneList<ELFSection*> sections_;
 };
 
@@ -784,7 +785,7 @@ class ELFSymbol BASE_EMBEDDED {
   Binding binding() const {
     return static_cast<Binding>(info >> 4);
   }
-#if defined(V8_TARGET_ARCH_IA32) || defined(V8_TARGET_ARCH_ARM)
+#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_ARM
   struct SerializedLayout {
     SerializedLayout(uint32_t name,
                      uintptr_t value,
@@ -807,7 +808,7 @@ class ELFSymbol BASE_EMBEDDED {
     uint8_t other;
     uint16_t section;
   };
-#elif defined(V8_TARGET_ARCH_X64)
+#elif V8_TARGET_ARCH_X64
   struct SerializedLayout {
     SerializedLayout(uint32_t name,
                      uintptr_t value,
@@ -921,7 +922,7 @@ class ELFSymbolTable : public ELFSection {
 
 class CodeDescription BASE_EMBEDDED {
  public:
-#ifdef V8_TARGET_ARCH_X64
+#if V8_TARGET_ARCH_X64
   enum StackState {
     POST_RBP_PUSH,
     POST_RBP_SET,
@@ -984,7 +985,7 @@ class CodeDescription BASE_EMBEDDED {
         lineinfo_ != NULL;
   }
 
-#ifdef V8_TARGET_ARCH_X64
+#if V8_TARGET_ARCH_X64
   uintptr_t GetStackStateStartAddress(StackState state) const {
     ASSERT(state < STACK_STATE_MAX);
     return stack_state_start_addresses_[state];
@@ -1012,7 +1013,7 @@ class CodeDescription BASE_EMBEDDED {
   GDBJITLineInfo* lineinfo_;
   GDBJITInterface::CodeTag tag_;
   CompilationInfo* info_;
-#ifdef V8_TARGET_ARCH_X64
+#if V8_TARGET_ARCH_X64
   uintptr_t stack_state_start_addresses_[STACK_STATE_MAX];
 #endif
 };
@@ -1026,8 +1027,8 @@ static void CreateSymbolsTable(CodeDescription* desc,
   ELFStringTable* strtab = new(zone) ELFStringTable(".strtab");
 
   // Symbol table should be followed by the linked string table.
-  elf->AddSection(symtab, zone);
-  elf->AddSection(strtab, zone);
+  elf->AddSection(symtab);
+  elf->AddSection(strtab);
 
   symtab->Add(ELFSymbol("V8 Code",
                         0,
@@ -1106,13 +1107,13 @@ class DebugInfoSection : public DebugSection {
       w->Write<intptr_t>(desc_->CodeStart() + desc_->CodeSize());
       Writer::Slot<uint32_t> fb_block_size = w->CreateSlotHere<uint32_t>();
       uintptr_t fb_block_start = w->position();
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
       w->Write<uint8_t>(DW_OP_reg5);  // The frame pointer's here on ia32
-#elif defined(V8_TARGET_ARCH_X64)
+#elif V8_TARGET_ARCH_X64
       w->Write<uint8_t>(DW_OP_reg6);  // and here on x64.
-#elif defined(V8_TARGET_ARCH_ARM)
+#elif V8_TARGET_ARCH_ARM
       UNIMPLEMENTED();
-#elif defined(V8_TARGET_ARCH_MIPS)
+#elif V8_TARGET_ARCH_MIPS
       UNIMPLEMENTED();
 #else
 #error Unsupported target architecture.
@@ -1563,7 +1564,7 @@ class DebugLineSection : public DebugSection {
 };
 
 
-#ifdef V8_TARGET_ARCH_X64
+#if V8_TARGET_ARCH_X64
 
 class UnwindInfoSection : public DebugSection {
  public:
@@ -1793,12 +1794,12 @@ static void CreateDWARFSections(CodeDescription* desc,
                                 Zone* zone,
                                 DebugObject* obj) {
   if (desc->IsLineInfoAvailable()) {
-    obj->AddSection(new(zone) DebugInfoSection(desc), zone);
-    obj->AddSection(new(zone) DebugAbbrevSection(desc), zone);
-    obj->AddSection(new(zone) DebugLineSection(desc), zone);
+    obj->AddSection(new(zone) DebugInfoSection(desc));
+    obj->AddSection(new(zone) DebugAbbrevSection(desc));
+    obj->AddSection(new(zone) DebugLineSection(desc));
   }
-#ifdef V8_TARGET_ARCH_X64
-  obj->AddSection(new(zone) UnwindInfoSection(desc), zone);
+#if V8_TARGET_ARCH_X64
+  obj->AddSection(new(zone) UnwindInfoSection(desc));
 #endif
 }
 
@@ -1916,37 +1917,37 @@ static void UnregisterCodeEntry(JITCodeEntry* entry) {
 }
 
 
-static JITCodeEntry* CreateELFObject(CodeDescription* desc, Zone* zone) {
-  ZoneScope zone_scope(zone, DELETE_ON_EXIT);
+static JITCodeEntry* CreateELFObject(CodeDescription* desc, Isolate* isolate) {
 #ifdef __MACH_O
-  MachO mach_o;
+  Zone zone(isolate);
+  MachO mach_o(&zone);
   Writer w(&mach_o);
 
-  mach_o.AddSection(new MachOTextSection(kCodeAlignment,
-                                         desc->CodeStart(),
-                                         desc->CodeSize()));
+  mach_o.AddSection(new(&zone) MachOTextSection(kCodeAlignment,
+                                                desc->CodeStart(),
+                                                desc->CodeSize()));
 
-  CreateDWARFSections(desc, &mach_o);
+  CreateDWARFSections(desc, &zone, &mach_o);
 
   mach_o.Write(&w, desc->CodeStart(), desc->CodeSize());
 #else
-  ELF elf(zone);
+  Zone zone(isolate);
+  ELF elf(&zone);
   Writer w(&elf);
 
   int text_section_index = elf.AddSection(
-      new(zone) FullHeaderELFSection(
+      new(&zone) FullHeaderELFSection(
           ".text",
           ELFSection::TYPE_NOBITS,
           kCodeAlignment,
           desc->CodeStart(),
           0,
           desc->CodeSize(),
-          ELFSection::FLAG_ALLOC | ELFSection::FLAG_EXEC),
-      zone);
+          ELFSection::FLAG_ALLOC | ELFSection::FLAG_EXEC));
 
-  CreateSymbolsTable(desc, zone, &elf, text_section_index);
+  CreateSymbolsTable(desc, &zone, &elf, text_section_index);
 
-  CreateDWARFSections(desc, zone, &elf);
+  CreateDWARFSections(desc, &zone, &elf);
 
   elf.Write(&w);
 #endif
@@ -2015,7 +2016,7 @@ void GDBJITInterface::AddCode(Handle<Name> name,
 }
 
 static void AddUnwindInfo(CodeDescription* desc) {
-#ifdef V8_TARGET_ARCH_X64
+#if V8_TARGET_ARCH_X64
   if (desc->tag() == GDBJITInterface::FUNCTION) {
     // To avoid propagating unwinding information through
     // compilation pipeline we use an approximation.
@@ -2083,8 +2084,8 @@ void GDBJITInterface::AddCode(const char* name,
   }
 
   AddUnwindInfo(&code_desc);
-  Zone* zone = code->GetIsolate()->runtime_zone();
-  JITCodeEntry* entry = CreateELFObject(&code_desc, zone);
+  Isolate* isolate = code->GetIsolate();
+  JITCodeEntry* entry = CreateELFObject(&code_desc, isolate);
   ASSERT(!IsLineInfoTagged(entry));
 
   delete lineinfo;
@@ -2165,6 +2166,24 @@ void GDBJITInterface::RemoveCode(Code* code) {
 }
 
 
+void GDBJITInterface::RemoveCodeRange(Address start, Address end) {
+  HashMap* entries = GetEntries();
+  Zone zone(Isolate::Current());
+  ZoneList<Code*> dead_codes(1, &zone);
+
+  for (HashMap::Entry* e = entries->Start(); e != NULL; e = entries->Next(e)) {
+    Code* code = reinterpret_cast<Code*>(e->key);
+    if (code->address() >= start && code->address() < end) {
+      dead_codes.Add(code, &zone);
+    }
+  }
+
+  for (int i = 0; i < dead_codes.length(); i++) {
+    RemoveCode(dead_codes.at(i));
+  }
+}
+
+
 void GDBJITInterface::RegisterDetailedLineInfo(Code* code,
                                                GDBJITLineInfo* line_info) {
   ScopedLock lock(mutex.Pointer());
index cc052c1..a34d3d3 100644 (file)
@@ -131,6 +131,8 @@ class GDBJITInterface: public AllStatic {
 
   static void RemoveCode(Code* code);
 
+  static void RemoveCodeRange(Address start, Address end);
+
   static void RegisterDetailedLineInfo(Code* code, GDBJITLineInfo* line_info);
 };
 
index cc31a44..3c8ea6f 100644 (file)
@@ -55,6 +55,23 @@ function GeneratorObjectThrow(exn) {
   return %_GeneratorThrow(this, exn);
 }
 
+function GeneratorFunctionPrototypeConstructor(x) {
+  if (%_IsConstructCall()) {
+    throw MakeTypeError('not_constructor', ['GeneratorFunctionPrototype']);
+  }
+}
+
+function GeneratorFunctionConstructor(arg1) {  // length == 1
+  var source = NewFunctionString(arguments, 'function*');
+  var global_receiver = %GlobalReceiver(global);
+  // Compile the string in the constructor and not a helper so that errors
+  // appear to come from here.
+  var f = %_CallFunction(global_receiver, %CompileString(source, true));
+  %FunctionMarkNameShouldPrintAsAnonymous(f);
+  return f;
+}
+
+
 function SetUpGenerators() {
   %CheckIsBootstrapping();
   var GeneratorObjectPrototype = GeneratorFunctionPrototype.prototype;
@@ -65,9 +82,11 @@ function SetUpGenerators() {
   %SetProperty(GeneratorObjectPrototype, "constructor",
                GeneratorFunctionPrototype, DONT_ENUM | DONT_DELETE | READ_ONLY);
   %SetPrototype(GeneratorFunctionPrototype, $Function.prototype);
+  %SetCode(GeneratorFunctionPrototype, GeneratorFunctionPrototypeConstructor);
   %SetProperty(GeneratorFunctionPrototype, "constructor",
                GeneratorFunction, DONT_ENUM | DONT_DELETE | READ_ONLY);
   %SetPrototype(GeneratorFunction, $Function);
+  %SetCode(GeneratorFunction, GeneratorFunctionConstructor);
 }
 
 SetUpGenerators();
index ac26e00..cd75133 100644 (file)
@@ -152,7 +152,7 @@ class GlobalHandles {
   int NumberOfGlobalObjectWeakHandles();
 
   // Returns the current number of handles to global objects.
-  int NumberOfGlobalHandles() {
+  int global_handles_count() const {
     return number_of_global_handles_;
   }
 
index 59931bf..baacf52 100644 (file)
@@ -105,8 +105,8 @@ namespace internal {
 // Target architecture detection. This may be set externally. If not, detect
 // in the same way as the host architecture, that is, target the native
 // environment as presented by the compiler.
-#if !defined(V8_TARGET_ARCH_X64) && !defined(V8_TARGET_ARCH_IA32) && \
-    !defined(V8_TARGET_ARCH_ARM) && !defined(V8_TARGET_ARCH_MIPS)
+#if !V8_TARGET_ARCH_X64 && !V8_TARGET_ARCH_IA32 && \
+    !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_MIPS
 #if defined(_M_X64) || defined(__x86_64__)
 #define V8_TARGET_ARCH_X64 1
 #elif defined(_M_IX86) || defined(__i386__)
@@ -121,18 +121,16 @@ namespace internal {
 #endif
 
 // Check for supported combinations of host and target architectures.
-#if defined(V8_TARGET_ARCH_IA32) && !defined(V8_HOST_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32 && !V8_HOST_ARCH_IA32
 #error Target architecture ia32 is only supported on ia32 host
 #endif
-#if defined(V8_TARGET_ARCH_X64) && !defined(V8_HOST_ARCH_X64)
+#if V8_TARGET_ARCH_X64 && !V8_HOST_ARCH_X64
 #error Target architecture x64 is only supported on x64 host
 #endif
-#if (defined(V8_TARGET_ARCH_ARM) && \
-    !(defined(V8_HOST_ARCH_IA32) || defined(V8_HOST_ARCH_ARM)))
+#if (V8_TARGET_ARCH_ARM && !(V8_HOST_ARCH_IA32 || V8_HOST_ARCH_ARM))
 #error Target architecture arm is only supported on arm and ia32 host
 #endif
-#if (defined(V8_TARGET_ARCH_MIPS) && \
-    !(defined(V8_HOST_ARCH_IA32) || defined(V8_HOST_ARCH_MIPS)))
+#if (V8_TARGET_ARCH_MIPS && !(V8_HOST_ARCH_IA32 || V8_HOST_ARCH_MIPS))
 #error Target architecture mips is only supported on mips and ia32 host
 #endif
 
@@ -140,14 +138,27 @@ namespace internal {
 // Setting USE_SIMULATOR explicitly from the build script will force
 // the use of a simulated environment.
 #if !defined(USE_SIMULATOR)
-#if (defined(V8_TARGET_ARCH_ARM) && !defined(V8_HOST_ARCH_ARM))
+#if (V8_TARGET_ARCH_ARM && !V8_HOST_ARCH_ARM)
 #define USE_SIMULATOR 1
 #endif
-#if (defined(V8_TARGET_ARCH_MIPS) && !defined(V8_HOST_ARCH_MIPS))
+#if (V8_TARGET_ARCH_MIPS && !V8_HOST_ARCH_MIPS)
 #define USE_SIMULATOR 1
 #endif
 #endif
 
+// Determine architecture endiannes (we only support little-endian).
+#if V8_TARGET_ARCH_IA32
+#define V8_TARGET_LITTLE_ENDIAN 1
+#elif V8_TARGET_ARCH_X64
+#define V8_TARGET_LITTLE_ENDIAN 1
+#elif V8_TARGET_ARCH_ARM
+#define V8_TARGET_LITTLE_ENDIAN 1
+#elif V8_TARGET_ARCH_MIPS
+#define V8_TARGET_LITTLE_ENDIAN 1
+#else
+#error Unknown target architecture endiannes
+#endif
+
 // Support for alternative bool type. This is only enabled if the code is
 // compiled with USE_MYBOOL defined. This catches some nasty type bugs.
 // For instance, 'bool b = "false";' results in b == true! This is a hidden
@@ -399,6 +410,18 @@ enum LanguageMode {
 };
 
 
+// A simple Maybe type, that can be passed by value.
+template<class T>
+struct Maybe {
+  Maybe() : has_value(false) {}
+  explicit Maybe(T t) : has_value(true), value(t) {}
+  Maybe(bool has, T t) : has_value(has), value(t) {}
+
+  bool has_value;
+  T value;
+};
+
+
 // The Strict Mode (ECMA-262 5th edition, 4.2.2).
 //
 // This flag is used in the backend to represent the language mode. So far
index 81828d9..7d4b25f 100644 (file)
@@ -294,13 +294,6 @@ Handle<Object> GetProperty(Isolate* isolate,
 }
 
 
-Handle<Object> SetPrototype(Handle<JSObject> obj, Handle<Object> value) {
-  const bool skip_hidden_prototypes = false;
-  CALL_HEAP_FUNCTION(obj->GetIsolate(),
-                     obj->SetPrototype(*value, skip_hidden_prototypes), Object);
-}
-
-
 Handle<Object> LookupSingleCharacterStringFromCode(Isolate* isolate,
                                                    uint32_t index) {
   CALL_HEAP_FUNCTION(
@@ -347,7 +340,7 @@ Handle<Object> SetAccessor(Handle<JSObject> obj, Handle<AccessorInfo> info) {
 static void ClearWrapperCache(v8::Isolate* v8_isolate,
                               Persistent<v8::Value>* handle,
                               void*) {
-  Handle<Object> cache = Utils::OpenHandle(**handle);
+  Handle<Object> cache = Utils::OpenPersistent(handle);
   JSValue* wrapper = JSValue::cast(*cache);
   Foreign* foreign = Script::cast(wrapper->value())->wrapper();
   ASSERT(foreign->foreign_address() ==
@@ -557,11 +550,7 @@ v8::Handle<v8::Array> GetKeysForNamedInterceptor(Handle<JSReceiver> receiver,
     v8::NamedPropertyEnumerator enum_fun =
         v8::ToCData<v8::NamedPropertyEnumerator>(interceptor->enumerator());
     LOG(isolate, ApiObjectAccess("interceptor-named-enum", *object));
-    {
-      // Leaving JavaScript.
-      VMState<EXTERNAL> state(isolate);
-      result = args.Call(enum_fun);
-    }
+    result = args.Call(enum_fun);
   }
 #if ENABLE_EXTRA_CHECKS
   CHECK(result.IsEmpty() || v8::Utils::OpenHandle(*result)->IsJSObject());
@@ -583,14 +572,10 @@ v8::Handle<v8::Array> GetKeysForIndexedInterceptor(Handle<JSReceiver> receiver,
     v8::IndexedPropertyEnumerator enum_fun =
         v8::ToCData<v8::IndexedPropertyEnumerator>(interceptor->enumerator());
     LOG(isolate, ApiObjectAccess("interceptor-indexed-enum", *object));
-    {
-      // Leaving JavaScript.
-      VMState<EXTERNAL> state(isolate);
-      result = args.Call(enum_fun);
+    result = args.Call(enum_fun);
 #if ENABLE_EXTRA_CHECKS
-      CHECK(result.IsEmpty() || v8::Utils::OpenHandle(*result)->IsJSObject());
+    CHECK(result.IsEmpty() || v8::Utils::OpenHandle(*result)->IsJSObject());
 #endif
-    }
   }
   return v8::Local<v8::Array>::New(reinterpret_cast<v8::Isolate*>(isolate),
                                    result);
index 0cd4f5b..5976b75 100644 (file)
@@ -30,6 +30,7 @@
 
 #include "allocation.h"
 #include "apiutils.h"
+#include "objects.h"
 
 namespace v8 {
 namespace internal {
@@ -244,8 +245,6 @@ Handle<Object> GetProperty(Isolate* isolate,
                            Handle<Object> obj,
                            Handle<Object> key);
 
-Handle<Object> SetPrototype(Handle<JSObject> obj, Handle<Object> value);
-
 Handle<Object> LookupSingleCharacterStringFromCode(Isolate* isolate,
                                                    uint32_t index);
 
index f0861b2..92ae8e5 100644 (file)
@@ -245,6 +245,8 @@ MaybeObject* Heap::AllocateRaw(int size_in_bytes,
     result = lo_space_->AllocateRaw(size_in_bytes, NOT_EXECUTABLE);
   } else if (CELL_SPACE == space) {
     result = cell_space_->AllocateRaw(size_in_bytes);
+  } else if (PROPERTY_CELL_SPACE == space) {
+    result = property_cell_space_->AllocateRaw(size_in_bytes);
   } else {
     ASSERT(MAP_SPACE == space);
     result = map_space_->AllocateRaw(size_in_bytes);
@@ -305,7 +307,19 @@ MaybeObject* Heap::AllocateRawCell() {
   isolate_->counters()->objs_since_last_full()->Increment();
   isolate_->counters()->objs_since_last_young()->Increment();
 #endif
-  MaybeObject* result = cell_space_->AllocateRaw(JSGlobalPropertyCell::kSize);
+  MaybeObject* result = cell_space_->AllocateRaw(Cell::kSize);
+  if (result->IsFailure()) old_gen_exhausted_ = true;
+  return result;
+}
+
+
+MaybeObject* Heap::AllocateRawPropertyCell() {
+#ifdef DEBUG
+  isolate_->counters()->objs_since_last_full()->Increment();
+  isolate_->counters()->objs_since_last_young()->Increment();
+#endif
+  MaybeObject* result =
+      property_cell_space_->AllocateRaw(PropertyCell::kSize);
   if (result->IsFailure()) old_gen_exhausted_ = true;
   return result;
 }
@@ -407,7 +421,8 @@ AllocationSpace Heap::TargetSpaceId(InstanceType type) {
   ASSERT(type != MAP_TYPE);
   ASSERT(type != CODE_TYPE);
   ASSERT(type != ODDBALL_TYPE);
-  ASSERT(type != JS_GLOBAL_PROPERTY_CELL_TYPE);
+  ASSERT(type != CELL_TYPE);
+  ASSERT(type != PROPERTY_CELL_TYPE);
 
   if (type <= LAST_NAME_TYPE) {
     if (type == SYMBOL_TYPE) return OLD_POINTER_SPACE;
@@ -535,7 +550,7 @@ intptr_t Heap::AdjustAmountOfExternalAllocatedMemory(
     if (amount >= 0) {
       amount_of_external_allocated_memory_ = amount;
     } else {
-      // Give up and reset the counters in case of an overflow.
+      // Give up and reset the counters in case of an underflow.
       amount_of_external_allocated_memory_ = 0;
       amount_of_external_allocated_memory_at_last_global_gc_ = 0;
     }
@@ -543,8 +558,11 @@ intptr_t Heap::AdjustAmountOfExternalAllocatedMemory(
   if (FLAG_trace_external_memory) {
     PrintPID("%8.0f ms: ", isolate()->time_millis_since_init());
     PrintF("Adjust amount of external memory: delta=%6" V8_PTR_PREFIX "d KB, "
-           " amount=%6" V8_PTR_PREFIX "d KB, isolate=0x%08" V8PRIxPTR ".\n",
-           change_in_bytes / 1024, amount_of_external_allocated_memory_ / 1024,
+           "amount=%6" V8_PTR_PREFIX "d KB, since_gc=%6" V8_PTR_PREFIX "d KB, "
+           "isolate=0x%08" V8PRIxPTR ".\n",
+           change_in_bytes / KB,
+           amount_of_external_allocated_memory_ / KB,
+           PromotedExternalMemorySize() / KB,
            reinterpret_cast<intptr_t>(isolate()));
   }
   ASSERT(amount_of_external_allocated_memory_ >= 0);
@@ -552,11 +570,6 @@ intptr_t Heap::AdjustAmountOfExternalAllocatedMemory(
 }
 
 
-void Heap::SetLastScriptId(Object* last_script_id) {
-  roots_[kLastScriptIdRootIndex] = last_script_id;
-}
-
-
 Isolate* Heap::isolate() {
   return reinterpret_cast<Isolate*>(reinterpret_cast<intptr_t>(this) -
       reinterpret_cast<size_t>(reinterpret_cast<Isolate*>(4)->heap()) + 4);
index 4f6fdb1..e517df4 100644 (file)
@@ -124,11 +124,6 @@ HeapSnapshot* HeapProfiler::GetSnapshot(int index) {
 }
 
 
-HeapSnapshot* HeapProfiler::FindSnapshot(unsigned uid) {
-  return snapshots_->GetSnapshot(uid);
-}
-
-
 SnapshotObjectId HeapProfiler::GetSnapshotObjectId(Handle<Object> obj) {
   if (!obj->IsHeapObject())
     return v8::HeapProfiler::kUnknownObjectId;
index 1ed73b9..5ae60fa 100644 (file)
@@ -28,6 +28,7 @@
 #ifndef V8_HEAP_PROFILER_H_
 #define V8_HEAP_PROFILER_H_
 
+#include "heap-snapshot-generator-inl.h"
 #include "isolate.h"
 
 namespace v8 {
@@ -65,7 +66,6 @@ class HeapProfiler {
   SnapshotObjectId PushHeapObjectsStats(OutputStream* stream);
   int GetSnapshotsCount();
   HeapSnapshot* GetSnapshot(int index);
-  HeapSnapshot* FindSnapshot(unsigned uid);
   SnapshotObjectId GetSnapshotObjectId(Handle<Object> obj);
   void DeleteAllSnapshots();
 
index b8237a6..f959aee 100644 (file)
@@ -31,6 +31,7 @@
 
 #include "heap-profiler.h"
 #include "debug.h"
+#include "types.h"
 
 namespace v8 {
 namespace internal {
@@ -188,15 +189,11 @@ template <size_t ptr_size> struct SnapshotSizeConstants;
 template <> struct SnapshotSizeConstants<4> {
   static const int kExpectedHeapGraphEdgeSize = 12;
   static const int kExpectedHeapEntrySize = 24;
-  static const int kExpectedHeapSnapshotsCollectionSize = 100;
-  static const int kExpectedHeapSnapshotSize = 132;
 };
 
 template <> struct SnapshotSizeConstants<8> {
   static const int kExpectedHeapGraphEdgeSize = 24;
   static const int kExpectedHeapEntrySize = 32;
-  static const int kExpectedHeapSnapshotsCollectionSize = 152;
-  static const int kExpectedHeapSnapshotSize = 160;
 };
 
 }  // namespace
@@ -237,7 +234,7 @@ void HeapSnapshot::RememberLastJSObjectId() {
 HeapEntry* HeapSnapshot::AddRootEntry() {
   ASSERT(root_index_ == HeapEntry::kNoEntry);
   ASSERT(entries_.is_empty());  // Root entry must be the first one.
-  HeapEntry* entry = AddEntry(HeapEntry::kObject,
+  HeapEntry* entry = AddEntry(HeapEntry::kSynthetic,
                               "",
                               HeapObjectsMap::kInternalRootObjectId,
                               0);
@@ -249,7 +246,7 @@ HeapEntry* HeapSnapshot::AddRootEntry() {
 
 HeapEntry* HeapSnapshot::AddGcRootsEntry() {
   ASSERT(gc_roots_index_ == HeapEntry::kNoEntry);
-  HeapEntry* entry = AddEntry(HeapEntry::kObject,
+  HeapEntry* entry = AddEntry(HeapEntry::kSynthetic,
                               "(GC roots)",
                               HeapObjectsMap::kGcRootsObjectId,
                               0);
@@ -262,7 +259,7 @@ HeapEntry* HeapSnapshot::AddGcSubrootEntry(int tag) {
   ASSERT(gc_subroot_indexes_[tag] == HeapEntry::kNoEntry);
   ASSERT(0 <= tag && tag < VisitorSynchronization::kNumberOfSyncTags);
   HeapEntry* entry = AddEntry(
-      HeapEntry::kObject,
+      HeapEntry::kSynthetic,
       VisitorSynchronization::kTagNames[tag],
       HeapObjectsMap::GetNthGcSubrootId(tag),
       0);
@@ -352,8 +349,6 @@ static size_t GetMemoryUsedByList(const List<T, P>& list) {
 
 
 size_t HeapSnapshot::RawSnapshotSize() const {
-  STATIC_CHECK(SnapshotSizeConstants<kPointerSize>::kExpectedHeapSnapshotSize ==
-      sizeof(HeapSnapshot));  // NOLINT
   return
       sizeof(*this) +
       GetMemoryUsedByList(entries_) +
@@ -577,7 +572,6 @@ size_t HeapObjectsMap::GetUsedMemorySize() const {
 
 HeapSnapshotsCollection::HeapSnapshotsCollection(Heap* heap)
     : is_tracking_objects_(false),
-      snapshots_uids_(HeapSnapshotsMatch),
       token_enumerator_(new TokenEnumerator()),
       ids_(heap) {
 }
@@ -606,29 +600,12 @@ void HeapSnapshotsCollection::SnapshotGenerationFinished(
   ids_.SnapshotGenerationFinished();
   if (snapshot != NULL) {
     snapshots_.Add(snapshot);
-    HashMap::Entry* entry =
-        snapshots_uids_.Lookup(reinterpret_cast<void*>(snapshot->uid()),
-                               static_cast<uint32_t>(snapshot->uid()),
-                               true);
-    ASSERT(entry->value == NULL);
-    entry->value = snapshot;
   }
 }
 
 
-HeapSnapshot* HeapSnapshotsCollection::GetSnapshot(unsigned uid) {
-  HashMap::Entry* entry = snapshots_uids_.Lookup(reinterpret_cast<void*>(uid),
-                                                 static_cast<uint32_t>(uid),
-                                                 false);
-  return entry != NULL ? reinterpret_cast<HeapSnapshot*>(entry->value) : NULL;
-}
-
-
 void HeapSnapshotsCollection::RemoveSnapshot(HeapSnapshot* snapshot) {
   snapshots_.RemoveElement(snapshot);
-  unsigned uid = snapshot->uid();
-  snapshots_uids_.Remove(reinterpret_cast<void*>(uid),
-                         static_cast<uint32_t>(uid));
 }
 
 
@@ -655,13 +632,9 @@ Handle<HeapObject> HeapSnapshotsCollection::FindHeapObjectById(
 
 
 size_t HeapSnapshotsCollection::GetUsedMemorySize() const {
-  STATIC_CHECK(SnapshotSizeConstants<kPointerSize>::
-      kExpectedHeapSnapshotsCollectionSize ==
-      sizeof(HeapSnapshotsCollection));  // NOLINT
   size_t size = sizeof(*this);
   size += names_.GetUsedMemorySize();
   size += ids_.GetUsedMemorySize();
-  size += sizeof(HashMap::Entry) * snapshots_uids_.capacity();
   size += GetMemoryUsedByList(snapshots_);
   for (int i = 0; i < snapshots_.length(); ++i) {
     size += snapshots_[i]->RawSnapshotSize();
@@ -888,7 +861,8 @@ const char* V8HeapExplorer::GetSystemEntryName(HeapObject* object) {
 #undef MAKE_STRING_MAP_CASE
         default: return "system / Map";
       }
-    case JS_GLOBAL_PROPERTY_CELL_TYPE: return "system / JSGlobalPropertyCell";
+    case CELL_TYPE: return "system / Cell";
+    case PROPERTY_CELL_TYPE: return "system / PropertyCell";
     case FOREIGN_TYPE: return "system / Foreign";
     case ODDBALL_TYPE: return "system / Oddball";
 #define MAKE_STRUCT_CASE(NAME, Name, name) \
@@ -959,7 +933,7 @@ void V8HeapExplorer::ExtractReferences(HeapObject* obj) {
 
   bool extract_indexed_refs = true;
   if (obj->IsJSGlobalProxy()) {
-    ExtractJSGlobalProxyReferences(JSGlobalProxy::cast(obj));
+    ExtractJSGlobalProxyReferences(entry, JSGlobalProxy::cast(obj));
   } else if (obj->IsJSObject()) {
     ExtractJSObjectReferences(entry, JSObject::cast(obj));
   } else if (obj->IsString()) {
@@ -972,13 +946,18 @@ void V8HeapExplorer::ExtractReferences(HeapObject* obj) {
     ExtractSharedFunctionInfoReferences(entry, SharedFunctionInfo::cast(obj));
   } else if (obj->IsScript()) {
     ExtractScriptReferences(entry, Script::cast(obj));
+  } else if (obj->IsAccessorPair()) {
+    ExtractAccessorPairReferences(entry, AccessorPair::cast(obj));
   } else if (obj->IsCodeCache()) {
     ExtractCodeCacheReferences(entry, CodeCache::cast(obj));
   } else if (obj->IsCode()) {
     ExtractCodeReferences(entry, Code::cast(obj));
-  } else if (obj->IsJSGlobalPropertyCell()) {
-    ExtractJSGlobalPropertyCellReferences(
-        entry, JSGlobalPropertyCell::cast(obj));
+  } else if (obj->IsCell()) {
+    ExtractCellReferences(entry, Cell::cast(obj));
+    extract_indexed_refs = false;
+  } else if (obj->IsPropertyCell()) {
+    ExtractPropertyCellReferences(
+        entry, PropertyCell::cast(obj));
     extract_indexed_refs = false;
   }
   if (extract_indexed_refs) {
@@ -989,19 +968,11 @@ void V8HeapExplorer::ExtractReferences(HeapObject* obj) {
 }
 
 
-void V8HeapExplorer::ExtractJSGlobalProxyReferences(JSGlobalProxy* proxy) {
-  // We need to reference JS global objects from snapshot's root.
-  // We use JSGlobalProxy because this is what embedder (e.g. browser)
-  // uses for the global object.
-  Object* object = proxy->map()->prototype();
-  bool is_debug_object = false;
-#ifdef ENABLE_DEBUGGER_SUPPORT
-  is_debug_object = object->IsGlobalObject() &&
-      Isolate::Current()->debug()->IsDebugGlobal(GlobalObject::cast(object));
-#endif
-  if (!is_debug_object) {
-    SetUserGlobalReference(object);
-  }
+void V8HeapExplorer::ExtractJSGlobalProxyReferences(
+    int entry, JSGlobalProxy* proxy) {
+  SetInternalReference(proxy, entry,
+                       "native_context", proxy->native_context(),
+                       JSGlobalProxy::kNativeContextOffset);
 }
 
 
@@ -1043,9 +1014,9 @@ void V8HeapExplorer::ExtractJSObjectReferences(
     SetInternalReference(js_fun, entry,
                          "shared", shared_info,
                          JSFunction::kSharedFunctionInfoOffset);
-    TagObject(js_fun->unchecked_context(), "(context)");
+    TagObject(js_fun->context(), "(context)");
     SetInternalReference(js_fun, entry,
-                         "context", js_fun->unchecked_context(),
+                         "context", js_fun->context(),
                          JSFunction::kContextOffset);
     for (int i = JSFunction::kNonWeakFieldsEndOffset;
          i < JSFunction::kSize;
@@ -1237,6 +1208,15 @@ void V8HeapExplorer::ExtractScriptReferences(int entry, Script* script) {
 }
 
 
+void V8HeapExplorer::ExtractAccessorPairReferences(
+    int entry, AccessorPair* accessors) {
+  SetInternalReference(accessors, entry, "getter", accessors->getter(),
+                       AccessorPair::kGetterOffset);
+  SetInternalReference(accessors, entry, "setter", accessors->setter(),
+                       AccessorPair::kSetterOffset);
+}
+
+
 void V8HeapExplorer::ExtractCodeCacheReferences(
     int entry, CodeCache* code_cache) {
   TagObject(code_cache->default_cache(), "(default code cache)");
@@ -1273,9 +1253,15 @@ void V8HeapExplorer::ExtractCodeReferences(int entry, Code* code) {
 }
 
 
-void V8HeapExplorer::ExtractJSGlobalPropertyCellReferences(
-    int entry, JSGlobalPropertyCell* cell) {
+void V8HeapExplorer::ExtractCellReferences(int entry, Cell* cell) {
+  SetInternalReference(cell, entry, "value", cell->value());
+}
+
+
+void V8HeapExplorer::ExtractPropertyCellReferences(int entry,
+                                                   PropertyCell* cell) {
   SetInternalReference(cell, entry, "value", cell->value());
+  SetInternalReference(cell, entry, "type", cell->type());
 }
 
 
@@ -1342,21 +1328,11 @@ void V8HeapExplorer::ExtractPropertyReferences(JSObject* js_obj, int entry) {
               js_obj, entry,
               descs->GetKey(i), descs->GetConstantFunction(i));
           break;
-        case CALLBACKS: {
-          Object* callback_obj = descs->GetValue(i);
-          if (callback_obj->IsAccessorPair()) {
-            AccessorPair* accessors = AccessorPair::cast(callback_obj);
-            if (Object* getter = accessors->getter()) {
-              SetPropertyReference(js_obj, entry, descs->GetKey(i),
-                                   getter, "get-%s");
-            }
-            if (Object* setter = accessors->setter()) {
-              SetPropertyReference(js_obj, entry, descs->GetKey(i),
-                                   setter, "set-%s");
-            }
-          }
+        case CALLBACKS:
+          ExtractAccessorPairProperty(
+              js_obj, entry,
+              descs->GetKey(i), descs->GetValue(i));
           break;
-        }
         case NORMAL:  // only in slow mode
         case HANDLER:  // only in lookup results, not in descriptors
         case INTERCEPTOR:  // only in lookup results, not in descriptors
@@ -1375,21 +1351,38 @@ void V8HeapExplorer::ExtractPropertyReferences(JSObject* js_obj, int entry) {
       if (dictionary->IsKey(k)) {
         Object* target = dictionary->ValueAt(i);
         // We assume that global objects can only have slow properties.
-        Object* value = target->IsJSGlobalPropertyCell()
-            ? JSGlobalPropertyCell::cast(target)->value()
+        Object* value = target->IsPropertyCell()
+            ? PropertyCell::cast(target)->value()
             : target;
-        if (k != heap_->hidden_string()) {
-          SetPropertyReference(js_obj, entry, String::cast(k), value);
-        } else {
+        if (k == heap_->hidden_string()) {
           TagObject(value, "(hidden properties)");
           SetInternalReference(js_obj, entry, "hidden_properties", value);
+          continue;
         }
+        if (ExtractAccessorPairProperty(js_obj, entry, k, value)) continue;
+        SetPropertyReference(js_obj, entry, String::cast(k), value);
       }
     }
   }
 }
 
 
+bool V8HeapExplorer::ExtractAccessorPairProperty(
+    JSObject* js_obj, int entry, Object* key, Object* callback_obj) {
+  if (!callback_obj->IsAccessorPair()) return false;
+  AccessorPair* accessors = AccessorPair::cast(callback_obj);
+  Object* getter = accessors->getter();
+  if (!getter->IsOddball()) {
+    SetPropertyReference(js_obj, entry, String::cast(key), getter, "get %s");
+  }
+  Object* setter = accessors->setter();
+  if (!setter->IsOddball()) {
+    SetPropertyReference(js_obj, entry, String::cast(key), setter, "set %s");
+  }
+  return true;
+}
+
+
 void V8HeapExplorer::ExtractElementReferences(JSObject* js_obj, int entry) {
   if (js_obj->HasFastObjectElements()) {
     FixedArray* elements = FixedArray::cast(js_obj->elements());
@@ -1562,6 +1555,7 @@ bool V8HeapExplorer::IsEssentialObject(Object* object) {
       && object != heap_->empty_fixed_array()
       && object != heap_->empty_descriptor_array()
       && object != heap_->fixed_array_map()
+      && object != heap_->cell_map()
       && object != heap_->global_property_cell_map()
       && object != heap_->shared_function_info_map()
       && object != heap_->free_space_map()
@@ -1748,6 +1742,22 @@ void V8HeapExplorer::SetGcSubrootReference(
           snapshot_->gc_subroot(tag)->index(),
           child_entry);
     }
+
+    // Add a shortcut to JS global object reference at snapshot root.
+    if (child_obj->IsNativeContext()) {
+      Context* context = Context::cast(child_obj);
+      GlobalObject* global = context->global_object();
+      if (global->IsJSGlobalObject()) {
+        bool is_debug_object = false;
+#ifdef ENABLE_DEBUGGER_SUPPORT
+        is_debug_object = heap_->isolate()->debug()->IsDebugGlobal(global);
+#endif
+        if (!is_debug_object && !user_roots_.Contains(global)) {
+          user_roots_.Insert(global);
+          SetUserGlobalReference(global);
+        }
+      }
+    }
   }
 }
 
@@ -2210,6 +2220,8 @@ bool HeapSnapshotGenerator::GenerateSnapshot() {
   CHECK(!debug_heap->old_pointer_space()->was_swept_conservatively());
   CHECK(!debug_heap->code_space()->was_swept_conservatively());
   CHECK(!debug_heap->cell_space()->was_swept_conservatively());
+  CHECK(!debug_heap->property_cell_space()->
+        was_swept_conservatively());
   CHECK(!debug_heap->map_space()->was_swept_conservatively());
 #endif
 
index 223b240..cd1ec29 100644 (file)
@@ -28,6 +28,8 @@
 #ifndef V8_HEAP_SNAPSHOT_GENERATOR_H_
 #define V8_HEAP_SNAPSHOT_GENERATOR_H_
 
+#include "profile-generator-inl.h"
+
 namespace v8 {
 namespace internal {
 
@@ -301,7 +303,6 @@ class HeapSnapshotsCollection {
   HeapSnapshot* NewSnapshot(const char* name, unsigned uid);
   void SnapshotGenerationFinished(HeapSnapshot* snapshot);
   List<HeapSnapshot*>* snapshots() { return &snapshots_; }
-  HeapSnapshot* GetSnapshot(unsigned uid);
   void RemoveSnapshot(HeapSnapshot* snapshot);
 
   StringsStorage* names() { return &names_; }
@@ -321,14 +322,8 @@ class HeapSnapshotsCollection {
   size_t GetUsedMemorySize() const;
 
  private:
-  INLINE(static bool HeapSnapshotsMatch(void* key1, void* key2)) {
-    return key1 == key2;
-  }
-
   bool is_tracking_objects_;  // Whether tracking object moves is needed.
   List<HeapSnapshot*> snapshots_;
-  // Mapping from snapshots' uids to HeapSnapshot* pointers.
-  HashMap snapshots_uids_;
   StringsStorage names_;
   TokenEnumerator* token_enumerator_;
   // Mapping from HeapObject addresses to objects' uids.
@@ -454,7 +449,7 @@ class V8HeapExplorer : public HeapEntriesAllocator {
   const char* GetSystemEntryName(HeapObject* object);
 
   void ExtractReferences(HeapObject* obj);
-  void ExtractJSGlobalProxyReferences(JSGlobalProxy* proxy);
+  void ExtractJSGlobalProxyReferences(int entry, JSGlobalProxy* proxy);
   void ExtractJSObjectReferences(int entry, JSObject* js_obj);
   void ExtractStringReferences(int entry, String* obj);
   void ExtractContextReferences(int entry, Context* context);
@@ -462,12 +457,15 @@ class V8HeapExplorer : public HeapEntriesAllocator {
   void ExtractSharedFunctionInfoReferences(int entry,
                                            SharedFunctionInfo* shared);
   void ExtractScriptReferences(int entry, Script* script);
+  void ExtractAccessorPairReferences(int entry, AccessorPair* accessors);
   void ExtractCodeCacheReferences(int entry, CodeCache* code_cache);
   void ExtractCodeReferences(int entry, Code* code);
-  void ExtractJSGlobalPropertyCellReferences(int entry,
-                                             JSGlobalPropertyCell* cell);
+  void ExtractCellReferences(int entry, Cell* cell);
+  void ExtractPropertyCellReferences(int entry, PropertyCell* cell);
   void ExtractClosureReferences(JSObject* js_obj, int entry);
   void ExtractPropertyReferences(JSObject* js_obj, int entry);
+  bool ExtractAccessorPairProperty(JSObject* js_obj, int entry,
+                                   Object* key, Object* callback_obj);
   void ExtractElementReferences(JSObject* js_obj, int entry);
   void ExtractInternalReferences(JSObject* js_obj, int entry);
   bool IsEssentialObject(Object* object);
@@ -529,6 +527,7 @@ class V8HeapExplorer : public HeapEntriesAllocator {
   SnapshotFillerInterface* filler_;
   HeapObjectsSet objects_tags_;
   HeapObjectsSet strong_gc_subroot_names_;
+  HeapObjectsSet user_roots_;
   v8::HeapProfiler::ObjectNameResolver* global_object_name_resolver_;
 
   static HeapObject* const kGcRootsObject;
index 2817fcb..9d1ac8c 100644 (file)
@@ -32,6 +32,7 @@
 #include "bootstrapper.h"
 #include "codegen.h"
 #include "compilation-cache.h"
+#include "cpu-profiler.h"
 #include "debug.h"
 #include "deoptimizer.h"
 #include "global-handles.h"
@@ -66,7 +67,7 @@ Heap::Heap()
     : isolate_(NULL),
 // semispace_size_ should be a power of 2 and old_generation_size_ should be
 // a multiple of Page::kPageSize.
-#if defined(V8_TARGET_ARCH_X64)
+#if V8_TARGET_ARCH_X64
 #define LUMP_OF_MEMORY (2 * MB)
       code_range_size_(512*MB),
 #else
@@ -105,6 +106,7 @@ Heap::Heap()
       code_space_(NULL),
       map_space_(NULL),
       cell_space_(NULL),
+      property_cell_space_(NULL),
       lo_space_(NULL),
       gc_state_(NOT_IN_GC),
       gc_post_processing_depth_(0),
@@ -151,7 +153,6 @@ Heap::Heap()
       last_idle_notification_gc_count_(0),
       last_idle_notification_gc_count_init_(false),
       mark_sweeps_since_idle_round_started_(0),
-      ms_count_at_last_idle_notification_(0),
       gc_count_at_last_idle_gc_(0),
       scavenges_since_last_idle_round_(kIdleScavengeThreshold),
       gcs_since_last_deopt_(0),
@@ -199,7 +200,8 @@ intptr_t Heap::Capacity() {
       old_data_space_->Capacity() +
       code_space_->Capacity() +
       map_space_->Capacity() +
-      cell_space_->Capacity();
+      cell_space_->Capacity() +
+      property_cell_space_->Capacity();
 }
 
 
@@ -212,6 +214,7 @@ intptr_t Heap::CommittedMemory() {
       code_space_->CommittedMemory() +
       map_space_->CommittedMemory() +
       cell_space_->CommittedMemory() +
+      property_cell_space_->CommittedMemory() +
       lo_space_->Size();
 }
 
@@ -225,6 +228,7 @@ size_t Heap::CommittedPhysicalMemory() {
       code_space_->CommittedPhysicalMemory() +
       map_space_->CommittedPhysicalMemory() +
       cell_space_->CommittedPhysicalMemory() +
+      property_cell_space_->CommittedPhysicalMemory() +
       lo_space_->CommittedPhysicalMemory();
 }
 
@@ -244,7 +248,8 @@ intptr_t Heap::Available() {
       old_data_space_->Available() +
       code_space_->Available() +
       map_space_->Available() +
-      cell_space_->Available();
+      cell_space_->Available() +
+      property_cell_space_->Available();
 }
 
 
@@ -254,6 +259,7 @@ bool Heap::HasBeenSetUp() {
          code_space_ != NULL &&
          map_space_ != NULL &&
          cell_space_ != NULL &&
+         property_cell_space_ != NULL &&
          lo_space_ != NULL;
 }
 
@@ -383,6 +389,12 @@ void Heap::PrintShortHeapStatistics() {
            cell_space_->SizeOfObjects() / KB,
            cell_space_->Available() / KB,
            cell_space_->CommittedMemory() / KB);
+  PrintPID("PropertyCell space, used: %6" V8_PTR_PREFIX "d KB"
+               ", available: %6" V8_PTR_PREFIX "d KB"
+               ", committed: %6" V8_PTR_PREFIX "d KB\n",
+           property_cell_space_->SizeOfObjects() / KB,
+           property_cell_space_->Available() / KB,
+           property_cell_space_->CommittedMemory() / KB);
   PrintPID("Large object space, used: %6" V8_PTR_PREFIX "d KB"
                ", available: %6" V8_PTR_PREFIX "d KB"
                ", committed: %6" V8_PTR_PREFIX "d KB\n",
@@ -395,6 +407,8 @@ void Heap::PrintShortHeapStatistics() {
            this->SizeOfObjects() / KB,
            this->Available() / KB,
            this->CommittedMemory() / KB);
+  PrintPID("External memory reported: %6" V8_PTR_PREFIX "d KB\n",
+           amount_of_external_allocated_memory_ / KB);
   PrintPID("Total time spent in GC  : %.1f ms\n", total_gc_time_ms_);
 }
 
@@ -514,6 +528,10 @@ void Heap::GarbageCollectionEpilogue() {
     isolate_->counters()->heap_fraction_cell_space()->AddSample(
         static_cast<int>(
             (cell_space()->CommittedMemory() * 100.0) / CommittedMemory()));
+    isolate_->counters()->heap_fraction_property_cell_space()->
+        AddSample(static_cast<int>(
+            (property_cell_space()->CommittedMemory() * 100.0) /
+            CommittedMemory()));
 
     isolate_->counters()->heap_sample_total_committed()->AddSample(
         static_cast<int>(CommittedMemory() / KB));
@@ -523,6 +541,10 @@ void Heap::GarbageCollectionEpilogue() {
         static_cast<int>(map_space()->CommittedMemory() / KB));
     isolate_->counters()->heap_sample_cell_space_committed()->AddSample(
         static_cast<int>(cell_space()->CommittedMemory() / KB));
+    isolate_->counters()->
+        heap_sample_property_cell_space_committed()->
+            AddSample(static_cast<int>(
+                property_cell_space()->CommittedMemory() / KB));
   }
 
 #define UPDATE_COUNTERS_FOR_SPACE(space)                                       \
@@ -548,6 +570,7 @@ void Heap::GarbageCollectionEpilogue() {
   UPDATE_COUNTERS_AND_FRAGMENTATION_FOR_SPACE(code_space)
   UPDATE_COUNTERS_AND_FRAGMENTATION_FOR_SPACE(map_space)
   UPDATE_COUNTERS_AND_FRAGMENTATION_FOR_SPACE(cell_space)
+  UPDATE_COUNTERS_AND_FRAGMENTATION_FOR_SPACE(property_cell_space)
   UPDATE_COUNTERS_AND_FRAGMENTATION_FOR_SPACE(lo_space)
 #undef UPDATE_COUNTERS_FOR_SPACE
 #undef UPDATE_FRAGMENTATION_FOR_SPACE
@@ -1212,7 +1235,7 @@ void StoreBufferRebuilder::Callback(MemoryChunk* page, StoreBufferEvent event) {
       // Store Buffer overflowed while scanning promoted objects.  These are not
       // in any particular page, though they are likely to be clustered by the
       // allocation routines.
-      store_buffer_->EnsureSpace(StoreBuffer::kStoreBufferSize);
+      store_buffer_->EnsureSpace(StoreBuffer::kStoreBufferSize / 2);
     } else {
       // Store Buffer overflowed while scanning a particular old space page for
       // pointers to new space.
@@ -1353,15 +1376,31 @@ void Heap::Scavenge() {
     store_buffer()->IteratePointersToNewSpace(&ScavengeObject);
   }
 
-  // Copy objects reachable from cells by scavenging cell values directly.
+  // Copy objects reachable from simple cells by scavenging cell values
+  // directly.
   HeapObjectIterator cell_iterator(cell_space_);
   for (HeapObject* heap_object = cell_iterator.Next();
        heap_object != NULL;
        heap_object = cell_iterator.Next()) {
-    if (heap_object->IsJSGlobalPropertyCell()) {
-      JSGlobalPropertyCell* cell = JSGlobalPropertyCell::cast(heap_object);
+    if (heap_object->IsCell()) {
+      Cell* cell = Cell::cast(heap_object);
+      Address value_address = cell->ValueAddress();
+      scavenge_visitor.VisitPointer(reinterpret_cast<Object**>(value_address));
+    }
+  }
+
+  // Copy objects reachable from global property cells by scavenging global
+  // property cell values directly.
+  HeapObjectIterator js_global_property_cell_iterator(property_cell_space_);
+  for (HeapObject* heap_object = js_global_property_cell_iterator.Next();
+       heap_object != NULL;
+       heap_object = js_global_property_cell_iterator.Next()) {
+    if (heap_object->IsPropertyCell()) {
+      PropertyCell* cell = PropertyCell::cast(heap_object);
       Address value_address = cell->ValueAddress();
       scavenge_visitor.VisitPointer(reinterpret_cast<Object**>(value_address));
+      Address type_address = cell->TypeAddress();
+      scavenge_visitor.VisitPointer(reinterpret_cast<Object**>(type_address));
     }
   }
 
@@ -1490,55 +1529,129 @@ void Heap::UpdateReferencesInExternalStringTable(
 }
 
 
-static Object* ProcessFunctionWeakReferences(Heap* heap,
-                                             Object* function,
-                                             WeakObjectRetainer* retainer,
-                                             bool record_slots) {
+template <class T>
+struct WeakListVisitor;
+
+
+template <class T>
+static Object* VisitWeakList(Heap* heap,
+                             Object* list,
+                             WeakObjectRetainer* retainer,
+                             bool record_slots) {
   Object* undefined = heap->undefined_value();
   Object* head = undefined;
-  JSFunction* tail = NULL;
-  Object* candidate = function;
-  while (candidate != undefined) {
+  T* tail = NULL;
+  MarkCompactCollector* collector = heap->mark_compact_collector();
+  while (list != undefined) {
     // Check whether to keep the candidate in the list.
-    JSFunction* candidate_function = reinterpret_cast<JSFunction*>(candidate);
-    Object* retain = retainer->RetainAs(candidate);
-    if (retain != NULL) {
+    T* candidate = reinterpret_cast<T*>(list);
+    Object* retained = retainer->RetainAs(list);
+    if (retained != NULL) {
       if (head == undefined) {
         // First element in the list.
-        head = retain;
+        head = retained;
       } else {
         // Subsequent elements in the list.
         ASSERT(tail != NULL);
-        tail->set_next_function_link(retain);
+        WeakListVisitor<T>::SetWeakNext(tail, retained);
         if (record_slots) {
-          Object** next_function =
-              HeapObject::RawField(tail, JSFunction::kNextFunctionLinkOffset);
-          heap->mark_compact_collector()->RecordSlot(
-              next_function, next_function, retain);
+          Object** next_slot =
+            HeapObject::RawField(tail, WeakListVisitor<T>::WeakNextOffset());
+          collector->RecordSlot(next_slot, next_slot, retained);
         }
       }
-      // Retained function is new tail.
-      candidate_function = reinterpret_cast<JSFunction*>(retain);
-      tail = candidate_function;
+      // Retained object is new tail.
+      ASSERT(!retained->IsUndefined());
+      candidate = reinterpret_cast<T*>(retained);
+      tail = candidate;
 
-      ASSERT(retain->IsUndefined() || retain->IsJSFunction());
 
-      if (retain == undefined) break;
+      // tail is a live object, visit it.
+      WeakListVisitor<T>::VisitLiveObject(
+          heap, tail, retainer, record_slots);
+    } else {
+      WeakListVisitor<T>::VisitPhantomObject(heap, candidate);
     }
 
     // Move to next element in the list.
-    candidate = candidate_function->next_function_link();
+    list = WeakListVisitor<T>::WeakNext(candidate);
   }
 
   // Terminate the list if there is one or more elements.
   if (tail != NULL) {
-    tail->set_next_function_link(undefined);
+    WeakListVisitor<T>::SetWeakNext(tail, undefined);
   }
-
   return head;
 }
 
 
+template<>
+struct WeakListVisitor<JSFunction> {
+  static void SetWeakNext(JSFunction* function, Object* next) {
+    function->set_next_function_link(next);
+  }
+
+  static Object* WeakNext(JSFunction* function) {
+    return function->next_function_link();
+  }
+
+  static int WeakNextOffset() {
+    return JSFunction::kNextFunctionLinkOffset;
+  }
+
+  static void VisitLiveObject(Heap*, JSFunction*,
+                              WeakObjectRetainer*, bool) {
+  }
+
+  static void VisitPhantomObject(Heap*, JSFunction*) {
+  }
+};
+
+
+template<>
+struct WeakListVisitor<Context> {
+  static void SetWeakNext(Context* context, Object* next) {
+    context->set(Context::NEXT_CONTEXT_LINK,
+                 next,
+                 UPDATE_WRITE_BARRIER);
+  }
+
+  static Object* WeakNext(Context* context) {
+    return context->get(Context::NEXT_CONTEXT_LINK);
+  }
+
+  static void VisitLiveObject(Heap* heap,
+                              Context* context,
+                              WeakObjectRetainer* retainer,
+                              bool record_slots) {
+    // Process the weak list of optimized functions for the context.
+    Object* function_list_head =
+        VisitWeakList<JSFunction>(
+            heap,
+            context->get(Context::OPTIMIZED_FUNCTIONS_LIST),
+            retainer,
+            record_slots);
+    context->set(Context::OPTIMIZED_FUNCTIONS_LIST,
+                 function_list_head,
+                 UPDATE_WRITE_BARRIER);
+    if (record_slots) {
+      Object** optimized_functions =
+          HeapObject::RawField(
+              context, FixedArray::SizeFor(Context::OPTIMIZED_FUNCTIONS_LIST));
+      heap->mark_compact_collector()->RecordSlot(
+          optimized_functions, optimized_functions, function_list_head);
+    }
+  }
+
+  static void VisitPhantomObject(Heap*, Context*) {
+  }
+
+  static int WeakNextOffset() {
+    return FixedArray::SizeFor(Context::NEXT_CONTEXT_LINK);
+  }
+};
+
+
 void Heap::ProcessWeakReferences(WeakObjectRetainer* retainer) {
   // We don't record weak slots during marking or scavenges.
   // Instead we do it once when we complete mark-compact cycle.
@@ -1553,173 +1666,95 @@ void Heap::ProcessWeakReferences(WeakObjectRetainer* retainer) {
 
 void Heap::ProcessNativeContexts(WeakObjectRetainer* retainer,
                                  bool record_slots) {
-  Object* undefined = undefined_value();
-  Object* head = undefined;
-  Context* tail = NULL;
-  Object* candidate = native_contexts_list_;
-
-  while (candidate != undefined) {
-    // Check whether to keep the candidate in the list.
-    Context* candidate_context = reinterpret_cast<Context*>(candidate);
-    Object* retain = retainer->RetainAs(candidate);
-    if (retain != NULL) {
-      if (head == undefined) {
-        // First element in the list.
-        head = retain;
-      } else {
-        // Subsequent elements in the list.
-        ASSERT(tail != NULL);
-        tail->set_unchecked(this,
-                            Context::NEXT_CONTEXT_LINK,
-                            retain,
-                            UPDATE_WRITE_BARRIER);
-
-        if (record_slots) {
-          Object** next_context =
-              HeapObject::RawField(
-                  tail, FixedArray::SizeFor(Context::NEXT_CONTEXT_LINK));
-          mark_compact_collector()->RecordSlot(
-              next_context, next_context, retain);
-        }
-      }
-      // Retained context is new tail.
-      candidate_context = reinterpret_cast<Context*>(retain);
-      tail = candidate_context;
-
-      if (retain == undefined) break;
-
-      // Process the weak list of optimized functions for the context.
-      Object* function_list_head =
-          ProcessFunctionWeakReferences(
-              this,
-              candidate_context->get(Context::OPTIMIZED_FUNCTIONS_LIST),
-              retainer,
-              record_slots);
-      candidate_context->set_unchecked(this,
-                                       Context::OPTIMIZED_FUNCTIONS_LIST,
-                                       function_list_head,
-                                       UPDATE_WRITE_BARRIER);
-      if (record_slots) {
-        Object** optimized_functions =
-            HeapObject::RawField(
-                tail, FixedArray::SizeFor(Context::OPTIMIZED_FUNCTIONS_LIST));
-        mark_compact_collector()->RecordSlot(
-            optimized_functions, optimized_functions, function_list_head);
-      }
-    }
-
-    // Move to next element in the list.
-    candidate = candidate_context->get(Context::NEXT_CONTEXT_LINK);
-  }
-
-  // Terminate the list if there is one or more elements.
-  if (tail != NULL) {
-    tail->set_unchecked(this,
-                        Context::NEXT_CONTEXT_LINK,
-                        Heap::undefined_value(),
-                        UPDATE_WRITE_BARRIER);
-  }
-
+  Object* head =
+      VisitWeakList<Context>(
+          this, native_contexts_list(), retainer, record_slots);
   // Update the head of the list of contexts.
   native_contexts_list_ = head;
 }
 
 
-template <class T>
-struct WeakListVisitor;
-
-
-template <class T>
-static Object* VisitWeakList(Object* list,
-                      MarkCompactCollector* collector,
-                      WeakObjectRetainer* retainer, bool record_slots) {
-  Object* head = Smi::FromInt(0);
-  T* tail = NULL;
-  while (list != Smi::FromInt(0)) {
-    Object* retained = retainer->RetainAs(list);
-    if (retained != NULL) {
-      if (head == Smi::FromInt(0)) {
-        head = retained;
-      } else {
-        ASSERT(tail != NULL);
-        WeakListVisitor<T>::set_weak_next(tail, retained);
-        if (record_slots) {
-          Object** next_slot =
-            HeapObject::RawField(tail, WeakListVisitor<T>::kWeakNextOffset);
-          collector->RecordSlot(next_slot, next_slot, retained);
-        }
-      }
-      tail = reinterpret_cast<T*>(retained);
-      WeakListVisitor<T>::VisitLiveObject(
-          tail, collector, retainer, record_slots);
-    }
-    list = WeakListVisitor<T>::get_weak_next(reinterpret_cast<T*>(list));
-  }
-  if (tail != NULL) {
-    tail->set_weak_next(Smi::FromInt(0));
-  }
-  return head;
-}
-
-
 template<>
-struct WeakListVisitor<JSTypedArray> {
-  static void set_weak_next(JSTypedArray* obj, Object* next) {
+struct WeakListVisitor<JSArrayBufferView> {
+  static void SetWeakNext(JSArrayBufferView* obj, Object* next) {
     obj->set_weak_next(next);
   }
 
-  static Object* get_weak_next(JSTypedArray* obj) {
+  static Object* WeakNext(JSArrayBufferView* obj) {
     return obj->weak_next();
   }
 
-  static void VisitLiveObject(JSTypedArray* obj,
-                              MarkCompactCollector* collector,
+  static void VisitLiveObject(Heap*,
+                              JSArrayBufferView* obj,
                               WeakObjectRetainer* retainer,
                               bool record_slots) {}
 
-  static const int kWeakNextOffset = JSTypedArray::kWeakNextOffset;
+  static void VisitPhantomObject(Heap*, JSArrayBufferView*) {}
+
+  static int WeakNextOffset() {
+    return JSArrayBufferView::kWeakNextOffset;
+  }
 };
 
 
 template<>
 struct WeakListVisitor<JSArrayBuffer> {
-  static void set_weak_next(JSArrayBuffer* obj, Object* next) {
+  static void SetWeakNext(JSArrayBuffer* obj, Object* next) {
     obj->set_weak_next(next);
   }
 
-  static Object* get_weak_next(JSArrayBuffer* obj) {
+  static Object* WeakNext(JSArrayBuffer* obj) {
     return obj->weak_next();
   }
 
-  static void VisitLiveObject(JSArrayBuffer* array_buffer,
-                              MarkCompactCollector* collector,
+  static void VisitLiveObject(Heap* heap,
+                              JSArrayBuffer* array_buffer,
                               WeakObjectRetainer* retainer,
                               bool record_slots) {
     Object* typed_array_obj =
-        VisitWeakList<JSTypedArray>(array_buffer->weak_first_array(),
-                                    collector, retainer, record_slots);
-    array_buffer->set_weak_first_array(typed_array_obj);
-    if (typed_array_obj != Smi::FromInt(0) && record_slots) {
+        VisitWeakList<JSArrayBufferView>(
+            heap,
+            array_buffer->weak_first_view(),
+            retainer, record_slots);
+    array_buffer->set_weak_first_view(typed_array_obj);
+    if (typed_array_obj != heap->undefined_value() && record_slots) {
       Object** slot = HeapObject::RawField(
-          array_buffer, JSArrayBuffer::kWeakFirstArrayOffset);
-      collector->RecordSlot(slot, slot, typed_array_obj);
+          array_buffer, JSArrayBuffer::kWeakFirstViewOffset);
+      heap->mark_compact_collector()->RecordSlot(slot, slot, typed_array_obj);
     }
   }
 
-  static const int kWeakNextOffset = JSArrayBuffer::kWeakNextOffset;
+  static void VisitPhantomObject(Heap* heap, JSArrayBuffer* phantom) {
+    Runtime::FreeArrayBuffer(heap->isolate(), phantom);
+  }
+
+  static int WeakNextOffset() {
+    return JSArrayBuffer::kWeakNextOffset;
+  }
 };
 
 
 void Heap::ProcessArrayBuffers(WeakObjectRetainer* retainer,
                                bool record_slots) {
   Object* array_buffer_obj =
-      VisitWeakList<JSArrayBuffer>(array_buffers_list(),
-                                   mark_compact_collector(),
+      VisitWeakList<JSArrayBuffer>(this,
+                                   array_buffers_list(),
                                    retainer, record_slots);
   set_array_buffers_list(array_buffer_obj);
 }
 
 
+void Heap::TearDownArrayBuffers() {
+  Object* undefined = undefined_value();
+  for (Object* o = array_buffers_list(); o != undefined;) {
+    JSArrayBuffer* buffer = JSArrayBuffer::cast(o);
+    Runtime::FreeArrayBuffer(isolate(), buffer);
+    o = buffer->weak_next();
+  }
+  array_buffers_list_ = undefined;
+}
+
+
 void Heap::VisitExternalResources(v8::ExternalResourceVisitor* visitor) {
   DisallowHeapAllocation no_allocation;
 
@@ -1903,6 +1938,10 @@ class ScavengingVisitor : public StaticVisitorBase {
                     &ObjectEvacuationStrategy<POINTER_OBJECT>::
                     Visit);
 
+    table_.Register(kVisitJSDataView,
+                    &ObjectEvacuationStrategy<POINTER_OBJECT>::
+                    Visit);
+
     table_.Register(kVisitJSRegExp,
                     &ObjectEvacuationStrategy<POINTER_OBJECT>::
                     Visit);
@@ -2663,8 +2702,13 @@ bool Heap::CreateInitialMaps() {
   }
   set_code_map(Map::cast(obj));
 
-  { MaybeObject* maybe_obj = AllocateMap(JS_GLOBAL_PROPERTY_CELL_TYPE,
-                                         JSGlobalPropertyCell::kSize);
+  { MaybeObject* maybe_obj = AllocateMap(CELL_TYPE, Cell::kSize);
+    if (!maybe_obj->ToObject(&obj)) return false;
+  }
+  set_cell_map(Map::cast(obj));
+
+  { MaybeObject* maybe_obj = AllocateMap(PROPERTY_CELL_TYPE,
+                                         PropertyCell::kSize);
     if (!maybe_obj->ToObject(&obj)) return false;
   }
   set_global_property_cell_map(Map::cast(obj));
@@ -2798,14 +2842,29 @@ MaybeObject* Heap::AllocateHeapNumber(double value) {
 }
 
 
-MaybeObject* Heap::AllocateJSGlobalPropertyCell(Object* value) {
+MaybeObject* Heap::AllocateCell(Object* value) {
   Object* result;
   { MaybeObject* maybe_result = AllocateRawCell();
     if (!maybe_result->ToObject(&result)) return maybe_result;
   }
+  HeapObject::cast(result)->set_map_no_write_barrier(cell_map());
+  Cell::cast(result)->set_value(value);
+  return result;
+}
+
+
+MaybeObject* Heap::AllocatePropertyCell(Object* value) {
+  Object* result;
+  { MaybeObject* maybe_result = AllocateRawPropertyCell();
+    if (!maybe_result->ToObject(&result)) return maybe_result;
+  }
   HeapObject::cast(result)->set_map_no_write_barrier(
       global_property_cell_map());
-  JSGlobalPropertyCell::cast(result)->set_value(value);
+  PropertyCell* cell = PropertyCell::cast(result);
+  cell->set_dependent_code(DependentCode::cast(empty_fixed_array()),
+                           SKIP_WRITE_BARRIER);
+  cell->set_value(value);
+  cell->set_type(Type::None());
   return result;
 }
 
@@ -3100,7 +3159,7 @@ bool Heap::CreateInitialObjects() {
   set_empty_slow_element_dictionary(SeededNumberDictionary::cast(obj));
 
   // Handling of script id generation is in Factory::NewScript.
-  set_last_script_id(undefined_value());
+  set_last_script_id(Smi::FromInt(v8::Script::kNoScriptId));
 
   // Initialize keyed lookup cache.
   isolate_->keyed_lookup_cache()->Clear();
@@ -4370,7 +4429,10 @@ MaybeObject* Heap::AllocateJSObjectFromMap(Map* map, PretenureFlag pretenure) {
   ASSERT(map->instance_type() != JS_BUILTINS_OBJECT_TYPE);
 
   // Allocate the backing storage for the properties.
-  int prop_size = map->InitialPropertiesLength();
+  int prop_size =
+      map->pre_allocated_property_fields() +
+      map->unused_property_fields() -
+      map->inobject_properties();
   ASSERT(prop_size >= 0);
   Object* properties;
   { MaybeObject* maybe_properties = AllocateFixedArray(prop_size, pretenure);
@@ -4407,7 +4469,10 @@ MaybeObject* Heap::AllocateJSObjectFromMapWithAllocationSite(Map* map,
   ASSERT(map->instance_type() != JS_BUILTINS_OBJECT_TYPE);
 
   // Allocate the backing storage for the properties.
-  int prop_size = map->InitialPropertiesLength();
+  int prop_size =
+      map->pre_allocated_property_fields() +
+      map->unused_property_fields() -
+      map->inobject_properties();
   ASSERT(prop_size >= 0);
   Object* properties;
   { MaybeObject* maybe_properties = AllocateFixedArray(prop_size);
@@ -4469,8 +4534,7 @@ MaybeObject* Heap::AllocateJSObjectWithAllocationSite(JSFunction* constructor,
   // advice
   Map* initial_map = constructor->initial_map();
 
-  JSGlobalPropertyCell* cell = JSGlobalPropertyCell::cast(
-      *allocation_site_info_payload);
+  Cell* cell = Cell::cast(*allocation_site_info_payload);
   Smi* smi = Smi::cast(cell->value());
   ElementsKind to_kind = static_cast<ElementsKind>(smi->value());
   AllocationSiteMode mode = TRACK_ALLOCATION_SITE;
@@ -4699,7 +4763,7 @@ MaybeObject* Heap::AllocateGlobalObject(JSFunction* constructor) {
 
   // Make sure no field properties are described in the initial map.
   // This guarantees us that normalizing the properties does not
-  // require us to change property values to JSGlobalPropertyCells.
+  // require us to change property values to PropertyCells.
   ASSERT(map->NextFreePropertyIndex() == 0);
 
   // Make sure we don't have a ton of pre-allocated slots in the
@@ -4728,7 +4792,7 @@ MaybeObject* Heap::AllocateGlobalObject(JSFunction* constructor) {
     ASSERT(details.type() == CALLBACKS);  // Only accessors are expected.
     PropertyDetails d = PropertyDetails(details.attributes(), CALLBACKS, i + 1);
     Object* value = descs->GetCallbacksObject(i);
-    MaybeObject* maybe_value = AllocateJSGlobalPropertyCell(value);
+    MaybeObject* maybe_value = AllocatePropertyCell(value);
     if (!maybe_value->ToObject(&value)) return maybe_value;
 
     MaybeObject* maybe_added = dictionary->Add(descs->GetKey(i), value, d);
@@ -5833,6 +5897,7 @@ void Heap::AdvanceIdleIncrementalMarking(intptr_t step_size) {
       uncommit = true;
     }
     CollectAllGarbage(kNoGCFlags, "idle notification: finalize incremental");
+    mark_sweeps_since_idle_round_started_++;
     gc_count_at_last_idle_gc_ = gc_count_;
     if (uncommit) {
       new_space_.Shrink();
@@ -5846,6 +5911,7 @@ bool Heap::IdleNotification(int hint) {
   // Hints greater than this value indicate that
   // the embedder is requesting a lot of GC work.
   const int kMaxHint = 1000;
+  const int kMinHintForIncrementalMarking = 10;
   // Minimal hint that allows to do full GC.
   const int kMinHintForFullGC = 100;
   intptr_t size_factor = Min(Max(hint, 20), kMaxHint) / 4;
@@ -5908,18 +5974,9 @@ bool Heap::IdleNotification(int hint) {
     }
   }
 
-  int new_mark_sweeps = ms_count_ - ms_count_at_last_idle_notification_;
-  mark_sweeps_since_idle_round_started_ += new_mark_sweeps;
-  ms_count_at_last_idle_notification_ = ms_count_;
-
   int remaining_mark_sweeps = kMaxMarkSweepsInIdleRound -
                               mark_sweeps_since_idle_round_started_;
 
-  if (remaining_mark_sweeps <= 0) {
-    FinishIdleRound();
-    return true;
-  }
-
   if (incremental_marking()->IsStopped()) {
     // If there are no more than two GCs left in this idle round and we are
     // allowed to do a full GC, then make those GCs full in order to compact
@@ -5929,13 +5986,21 @@ bool Heap::IdleNotification(int hint) {
     if (remaining_mark_sweeps <= 2 && hint >= kMinHintForFullGC) {
       CollectAllGarbage(kReduceMemoryFootprintMask,
                         "idle notification: finalize idle round");
-    } else {
+      mark_sweeps_since_idle_round_started_++;
+    } else if (hint > kMinHintForIncrementalMarking) {
       incremental_marking()->Start();
     }
   }
-  if (!incremental_marking()->IsStopped()) {
+  if (!incremental_marking()->IsStopped() &&
+      hint > kMinHintForIncrementalMarking) {
     AdvanceIdleIncrementalMarking(step_size);
   }
+
+  if (mark_sweeps_since_idle_round_started_ >= kMaxMarkSweepsInIdleRound) {
+    FinishIdleRound();
+    return true;
+  }
+
   return false;
 }
 
@@ -6052,6 +6117,8 @@ void Heap::ReportHeapStatistics(const char* title) {
   map_space_->ReportStatistics();
   PrintF("Cell space : ");
   cell_space_->ReportStatistics();
+  PrintF("PropertyCell space : ");
+  property_cell_space_->ReportStatistics();
   PrintF("Large object space : ");
   lo_space_->ReportStatistics();
   PrintF(">>>>>> ========================================= >>>>>>\n");
@@ -6073,6 +6140,7 @@ bool Heap::Contains(Address addr) {
      code_space_->Contains(addr) ||
      map_space_->Contains(addr) ||
      cell_space_->Contains(addr) ||
+     property_cell_space_->Contains(addr) ||
      lo_space_->SlowContains(addr));
 }
 
@@ -6099,6 +6167,8 @@ bool Heap::InSpace(Address addr, AllocationSpace space) {
       return map_space_->Contains(addr);
     case CELL_SPACE:
       return cell_space_->Contains(addr);
+    case PROPERTY_CELL_SPACE:
+      return property_cell_space_->Contains(addr);
     case LO_SPACE:
       return lo_space_->SlowContains(addr);
   }
@@ -6125,6 +6195,7 @@ void Heap::Verify() {
   old_data_space_->Verify(&no_dirty_regions_visitor);
   code_space_->Verify(&no_dirty_regions_visitor);
   cell_space_->Verify(&no_dirty_regions_visitor);
+  property_cell_space_->Verify(&no_dirty_regions_visitor);
 
   lo_space_->Verify();
 }
@@ -6588,7 +6659,12 @@ bool Heap::ConfigureHeap(int max_semispace_size,
   max_semispace_size_ = RoundUpToPowerOf2(max_semispace_size_);
   reserved_semispace_size_ = RoundUpToPowerOf2(reserved_semispace_size_);
   initial_semispace_size_ = Min(initial_semispace_size_, max_semispace_size_);
-  external_allocation_limit_ = 16 * max_semispace_size_;
+
+  // The external allocation limit should be below 256 MB on all architectures
+  // to avoid unnecessary low memory notifications, as that is the threshold
+  // for some embedders.
+  external_allocation_limit_ = 12 * max_semispace_size_;
+  ASSERT(external_allocation_limit_ <= 256 * MB);
 
   // The old generation is paged and needs at least one page for each space.
   int paged_space_count = LAST_PAGED_SPACE - FIRST_PAGED_SPACE + 1;
@@ -6624,6 +6700,8 @@ void Heap::RecordStats(HeapStats* stats, bool take_snapshot) {
   *stats->map_space_capacity = map_space_->Capacity();
   *stats->cell_space_size = cell_space_->SizeOfObjects();
   *stats->cell_space_capacity = cell_space_->Capacity();
+  *stats->property_cell_space_size = property_cell_space_->SizeOfObjects();
+  *stats->property_cell_space_capacity = property_cell_space_->Capacity();
   *stats->lo_space_size = lo_space_->Size();
   isolate_->global_handles()->RecordStats(stats);
   *stats->memory_allocator_size = isolate()->memory_allocator()->Size();
@@ -6652,6 +6730,7 @@ intptr_t Heap::PromotedSpaceSizeOfObjects() {
       + code_space_->SizeOfObjects()
       + map_space_->SizeOfObjects()
       + cell_space_->SizeOfObjects()
+      + property_cell_space_->SizeOfObjects()
       + lo_space_->SizeOfObjects();
 }
 
@@ -6740,11 +6819,17 @@ bool Heap::SetUp() {
   if (map_space_ == NULL) return false;
   if (!map_space_->SetUp()) return false;
 
-  // Initialize global property cell space.
+  // Initialize simple cell space.
   cell_space_ = new CellSpace(this, max_old_generation_size_, CELL_SPACE);
   if (cell_space_ == NULL) return false;
   if (!cell_space_->SetUp()) return false;
 
+  // Initialize global property cell space.
+  property_cell_space_ = new PropertyCellSpace(this, max_old_generation_size_,
+                                               PROPERTY_CELL_SPACE);
+  if (property_cell_space_ == NULL) return false;
+  if (!property_cell_space_->SetUp()) return false;
+
   // The large object code space may contain code or data.  We set the memory
   // to be non-executable here for safety, but this means we need to enable it
   // explicitly when allocating large code objects.
@@ -6785,6 +6870,7 @@ bool Heap::CreateHeapObjects() {
   if (!CreateInitialObjects()) return false;
 
   native_contexts_list_ = undefined_value();
+  array_buffers_list_ = undefined_value();
   return true;
 }
 
@@ -6827,6 +6913,8 @@ void Heap::TearDown() {
     PrintF("\n\n");
   }
 
+  TearDownArrayBuffers();
+
   isolate_->global_handles()->TearDown();
 
   external_string_table_.TearDown();
@@ -6865,6 +6953,12 @@ void Heap::TearDown() {
     cell_space_ = NULL;
   }
 
+  if (property_cell_space_ != NULL) {
+    property_cell_space_->TearDown();
+    delete property_cell_space_;
+    property_cell_space_ = NULL;
+  }
+
   if (lo_space_ != NULL) {
     lo_space_->TearDown();
     delete lo_space_;
@@ -6955,6 +7049,8 @@ Space* AllSpaces::next() {
       return heap_->map_space();
     case CELL_SPACE:
       return heap_->cell_space();
+    case PROPERTY_CELL_SPACE:
+      return heap_->property_cell_space();
     case LO_SPACE:
       return heap_->lo_space();
     default:
@@ -6975,6 +7071,8 @@ PagedSpace* PagedSpaces::next() {
       return heap_->map_space();
     case CELL_SPACE:
       return heap_->cell_space();
+    case PROPERTY_CELL_SPACE:
+      return heap_->property_cell_space();
     default:
       return NULL;
   }
@@ -7064,6 +7162,10 @@ ObjectIterator* SpaceIterator::CreateIterator() {
     case CELL_SPACE:
       iterator_ = new HeapObjectIterator(heap_->cell_space(), size_func_);
       break;
+    case PROPERTY_CELL_SPACE:
+      iterator_ = new HeapObjectIterator(heap_->property_cell_space(),
+                                         size_func_);
+      break;
     case LO_SPACE:
       iterator_ = new LargeObjectIterator(heap_->lo_space(), size_func_);
       break;
index da10efc..d254b60 100644 (file)
@@ -60,6 +60,7 @@ namespace internal {
   V(Oddball, true_value, TrueValue)                                            \
   V(Oddball, false_value, FalseValue)                                          \
   V(Oddball, uninitialized_value, UninitializedValue)                          \
+  V(Map, cell_map, CellMap)                                                    \
   V(Map, global_property_cell_map, GlobalPropertyCellMap)                      \
   V(Map, shared_function_info_map, SharedFunctionInfoMap)                      \
   V(Map, meta_map, MetaMap)                                                    \
@@ -174,7 +175,7 @@ namespace internal {
   V(Code, js_entry_code, JsEntryCode)                                          \
   V(Code, js_construct_entry_code, JsConstructEntryCode)                       \
   V(FixedArray, natives_source_cache, NativesSourceCache)                      \
-  V(Object, last_script_id, LastScriptId)                                      \
+  V(Smi, last_script_id, LastScriptId)                                         \
   V(Script, empty_script, EmptyScript)                                         \
   V(Smi, real_stack_limit, RealStackLimit)                                     \
   V(NameDictionary, intrinsic_function_names, IntrinsicFunctionNames)        \
@@ -588,6 +589,9 @@ class Heap {
   OldSpace* code_space() { return code_space_; }
   MapSpace* map_space() { return map_space_; }
   CellSpace* cell_space() { return cell_space_; }
+  PropertyCellSpace* property_cell_space() {
+    return property_cell_space_;
+  }
   LargeObjectSpace* lo_space() { return lo_space_; }
   PagedSpace* paged_space(int idx) {
     switch (idx) {
@@ -599,6 +603,8 @@ class Heap {
         return map_space();
       case CELL_SPACE:
         return cell_space();
+      case PROPERTY_CELL_SPACE:
+        return property_cell_space();
       case CODE_SPACE:
         return code_space();
       case NEW_SPACE:
@@ -933,11 +939,17 @@ class Heap {
   // Please note this does not perform a garbage collection.
   MUST_USE_RESULT MaybeObject* AllocateSymbol();
 
+  // Allocate a tenured simple cell.
+  // Returns Failure::RetryAfterGC(requested_bytes, space) if the allocation
+  // failed.
+  // Please note this does not perform a garbage collection.
+  MUST_USE_RESULT MaybeObject* AllocateCell(Object* value);
+
   // Allocate a tenured JS global property cell.
   // Returns Failure::RetryAfterGC(requested_bytes, space) if the allocation
   // failed.
   // Please note this does not perform a garbage collection.
-  MUST_USE_RESULT MaybeObject* AllocateJSGlobalPropertyCell(Object* value);
+  MUST_USE_RESULT MaybeObject* AllocatePropertyCell(Object* value);
 
   // Allocate Box.
   MUST_USE_RESULT MaybeObject* AllocateBox(Object* value,
@@ -1428,9 +1440,6 @@ class Heap {
     roots_[kStoreBufferTopRootIndex] = reinterpret_cast<Smi*>(top);
   }
 
-  // Update the next script id.
-  inline void SetLastScriptId(Object* last_script_id);
-
   // Generated code can embed this address to get access to the roots.
   Object** roots_array_start() { return roots_; }
 
@@ -1861,7 +1870,7 @@ class Heap {
   enum {
     FIRST_CODE_KIND_SUB_TYPE = LAST_TYPE + 1,
     FIRST_FIXED_ARRAY_SUB_TYPE =
-        FIRST_CODE_KIND_SUB_TYPE + Code::LAST_CODE_KIND + 1,
+        FIRST_CODE_KIND_SUB_TYPE + Code::NUMBER_OF_KINDS,
     OBJECT_STATS_COUNT =
         FIRST_FIXED_ARRAY_SUB_TYPE + LAST_FIXED_ARRAY_SUB_TYPE + 1
   };
@@ -1873,7 +1882,7 @@ class Heap {
       object_sizes_[type] += size;
     } else {
       if (type == CODE_TYPE) {
-        ASSERT(sub_type <= Code::LAST_CODE_KIND);
+        ASSERT(sub_type < Code::NUMBER_OF_KINDS);
         object_counts_[FIRST_CODE_KIND_SUB_TYPE + sub_type]++;
         object_sizes_[FIRST_CODE_KIND_SUB_TYPE + sub_type] += size;
       } else if (type == FIXED_ARRAY_TYPE) {
@@ -1946,7 +1955,7 @@ class Heap {
 
   int scan_on_scavenge_pages_;
 
-#if defined(V8_TARGET_ARCH_X64)
+#if V8_TARGET_ARCH_X64
   static const int kMaxObjectSizeInNewSpace = 1024*KB;
 #else
   static const int kMaxObjectSizeInNewSpace = 512*KB;
@@ -1958,6 +1967,7 @@ class Heap {
   OldSpace* code_space_;
   MapSpace* map_space_;
   CellSpace* cell_space_;
+  PropertyCellSpace* property_cell_space_;
   LargeObjectSpace* lo_space_;
   HeapState gc_state_;
   int gc_post_processing_depth_;
@@ -2114,9 +2124,12 @@ class Heap {
   // (since both AllocateRaw and AllocateRawMap are inlined).
   MUST_USE_RESULT inline MaybeObject* AllocateRawMap();
 
-  // Allocate an uninitialized object in the global property cell space.
+  // Allocate an uninitialized object in the simple cell space.
   MUST_USE_RESULT inline MaybeObject* AllocateRawCell();
 
+  // Allocate an uninitialized object in the global property cell space.
+  MUST_USE_RESULT inline MaybeObject* AllocateRawPropertyCell();
+
   // Initializes a JSObject based on its map.
   void InitializeJSObjectFromMap(JSObject* obj,
                                  FixedArray* properties,
@@ -2176,6 +2189,9 @@ class Heap {
   void ProcessNativeContexts(WeakObjectRetainer* retainer, bool record_slots);
   void ProcessArrayBuffers(WeakObjectRetainer* retainer, bool record_slots);
 
+  // Called on heap tear-down.
+  void TearDownArrayBuffers();
+
   // Record statistics before and after garbage collection.
   void ReportStatisticsBeforeGC();
   void ReportStatisticsAfterGC();
@@ -2277,7 +2293,6 @@ class Heap {
 
   void StartIdleRound() {
     mark_sweeps_since_idle_round_started_ = 0;
-    ms_count_at_last_idle_notification_ = ms_count_;
   }
 
   void FinishIdleRound() {
@@ -2354,7 +2369,6 @@ class Heap {
   bool last_idle_notification_gc_count_init_;
 
   int mark_sweeps_since_idle_round_started_;
-  int ms_count_at_last_idle_notification_;
   unsigned int gc_count_at_last_idle_gc_;
   int scavenges_since_last_idle_round_;
 
@@ -2437,6 +2451,8 @@ class HeapStats {
   int* size_per_type;                   // 22
   int* os_error;                        // 23
   int* end_marker;                      // 24
+  intptr_t* property_cell_space_size;   // 25
+  intptr_t* property_cell_space_capacity;    // 26
 };
 
 
@@ -2936,6 +2952,10 @@ class TranscendentalCache {
     for (int i = 0; i < kNumberOfCaches; ++i) caches_[i] = NULL;
   }
 
+  ~TranscendentalCache() {
+    for (int i = 0; i < kNumberOfCaches; ++i) delete caches_[i];
+  }
+
   // Used to create an external reference.
   inline Address cache_array_address();
 
index 8c66059..20e680c 100644 (file)
@@ -33,65 +33,56 @@ namespace v8 {
 namespace internal {
 
 
-EnvironmentSlotLivenessAnalyzer::EnvironmentSlotLivenessAnalyzer(
+HEnvironmentLivenessAnalysisPhase::HEnvironmentLivenessAnalysisPhase(
     HGraph* graph)
-    : graph_(graph),
-      zone_(graph->isolate()),
-      zone_scope_(&zone_, DELETE_ON_EXIT),
+    : HPhase("H_Environment liveness analysis", graph),
       block_count_(graph->blocks()->length()),
       maximum_environment_size_(graph->maximum_environment_size()),
+      live_at_block_start_(block_count_, zone()),
+      first_simulate_(block_count_, zone()),
+      first_simulate_invalid_for_index_(block_count_, zone()),
+      markers_(maximum_environment_size_, zone()),
       collect_markers_(true),
-      last_simulate_(NULL) {
-  if (maximum_environment_size_ == 0) return;
-
-  live_at_block_start_ =
-      new(zone()) ZoneList<BitVector*>(block_count_, zone());
-  first_simulate_ = new(zone()) ZoneList<HSimulate*>(block_count_, zone());
-  first_simulate_invalid_for_index_ =
-      new(zone()) ZoneList<BitVector*>(block_count_, zone());
-  markers_ = new(zone())
-      ZoneList<HEnvironmentMarker*>(maximum_environment_size_, zone());
-  went_live_since_last_simulate_ =
-      new(zone()) BitVector(maximum_environment_size_, zone());
-
+      last_simulate_(NULL),
+      went_live_since_last_simulate_(maximum_environment_size_, zone()) {
+  ASSERT(maximum_environment_size_ > 0);
   for (int i = 0; i < block_count_; ++i) {
-    live_at_block_start_->Add(
+    live_at_block_start_.Add(
         new(zone()) BitVector(maximum_environment_size_, zone()), zone());
-    first_simulate_->Add(NULL, zone());
-    first_simulate_invalid_for_index_->Add(
+    first_simulate_.Add(NULL, zone());
+    first_simulate_invalid_for_index_.Add(
         new(zone()) BitVector(maximum_environment_size_, zone()), zone());
   }
 }
 
 
-void EnvironmentSlotLivenessAnalyzer::ZapEnvironmentSlot(int index,
-                                                         HSimulate* simulate) {
+void HEnvironmentLivenessAnalysisPhase::ZapEnvironmentSlot(
+    int index, HSimulate* simulate) {
   int operand_index = simulate->ToOperandIndex(index);
   if (operand_index == -1) {
-    simulate->AddAssignedValue(index, graph_->GetConstantUndefined());
+    simulate->AddAssignedValue(index, graph()->GetConstantUndefined());
   } else {
-    simulate->SetOperandAt(operand_index, graph_->GetConstantUndefined());
+    simulate->SetOperandAt(operand_index, graph()->GetConstantUndefined());
   }
 }
 
 
-void EnvironmentSlotLivenessAnalyzer::ZapEnvironmentSlotsInSuccessors(
-    HBasicBlock* block,
-    BitVector* live) {
+void HEnvironmentLivenessAnalysisPhase::ZapEnvironmentSlotsInSuccessors(
+    HBasicBlock* block, BitVector* live) {
   // When a value is live in successor A but dead in B, we must
   // explicitly zap it in B.
   for (HSuccessorIterator it(block->end()); !it.Done(); it.Advance()) {
     HBasicBlock* successor = it.Current();
     int successor_id = successor->block_id();
-    BitVector* live_in_successor = live_at_block_start_->at(successor_id);
+    BitVector* live_in_successor = live_at_block_start_[successor_id];
     if (live_in_successor->Equals(*live)) continue;
     for (int i = 0; i < live->length(); ++i) {
       if (!live->Contains(i)) continue;
       if (live_in_successor->Contains(i)) continue;
-      if (first_simulate_invalid_for_index_->at(successor_id)->Contains(i)) {
+      if (first_simulate_invalid_for_index_.at(successor_id)->Contains(i)) {
         continue;
       }
-      HSimulate* simulate = first_simulate_->at(successor_id);
+      HSimulate* simulate = first_simulate_.at(successor_id);
       if (simulate == NULL) continue;
       ASSERT(simulate->closure().is_identical_to(
                  block->last_environment()->closure()));
@@ -101,7 +92,7 @@ void EnvironmentSlotLivenessAnalyzer::ZapEnvironmentSlotsInSuccessors(
 }
 
 
-void EnvironmentSlotLivenessAnalyzer::ZapEnvironmentSlotsForInstruction(
+void HEnvironmentLivenessAnalysisPhase::ZapEnvironmentSlotsForInstruction(
     HEnvironmentMarker* marker) {
   if (!marker->CheckFlag(HValue::kEndsLiveRange)) return;
   HSimulate* simulate = marker->next_simulate();
@@ -112,18 +103,18 @@ void EnvironmentSlotLivenessAnalyzer::ZapEnvironmentSlotsForInstruction(
 }
 
 
-void EnvironmentSlotLivenessAnalyzer::UpdateLivenessAtBlockEnd(
+void HEnvironmentLivenessAnalysisPhase::UpdateLivenessAtBlockEnd(
     HBasicBlock* block,
     BitVector* live) {
   // Liveness at the end of each block: union of liveness in successors.
   live->Clear();
   for (HSuccessorIterator it(block->end()); !it.Done(); it.Advance()) {
-    live->Union(*live_at_block_start_->at(it.Current()->block_id()));
+    live->Union(*live_at_block_start_[it.Current()->block_id()]);
   }
 }
 
 
-void EnvironmentSlotLivenessAnalyzer::UpdateLivenessAtInstruction(
+void HEnvironmentLivenessAnalysisPhase::UpdateLivenessAtInstruction(
     HInstruction* instr,
     BitVector* live) {
   switch (instr->opcode()) {
@@ -135,7 +126,7 @@ void EnvironmentSlotLivenessAnalyzer::UpdateLivenessAtInstruction(
       } else {
         marker->ClearFlag(HValue::kEndsLiveRange);
       }
-      if (!went_live_since_last_simulate_->Contains(index)) {
+      if (!went_live_since_last_simulate_.Contains(index)) {
         marker->set_next_simulate(last_simulate_);
       }
       if (marker->kind() == HEnvironmentMarker::LOOKUP) {
@@ -143,11 +134,11 @@ void EnvironmentSlotLivenessAnalyzer::UpdateLivenessAtInstruction(
       } else {
         ASSERT(marker->kind() == HEnvironmentMarker::BIND);
         live->Remove(index);
-        went_live_since_last_simulate_->Add(index);
+        went_live_since_last_simulate_.Add(index);
       }
       if (collect_markers_) {
         // Populate |markers_| list during the first pass.
-        markers_->Add(marker, &zone_);
+        markers_.Add(marker, zone());
       }
       break;
     }
@@ -174,8 +165,8 @@ void EnvironmentSlotLivenessAnalyzer::UpdateLivenessAtInstruction(
         int return_id = enter->return_targets()->at(i)->block_id();
         // When an AbnormalExit is involved, it can happen that the return
         // target block doesn't actually exist.
-        if (return_id < live_at_block_start_->length()) {
-          live->Union(*live_at_block_start_->at(return_id));
+        if (return_id < live_at_block_start_.length()) {
+          live->Union(*live_at_block_start_[return_id]);
         }
       }
       last_simulate_ = NULL;
@@ -192,7 +183,7 @@ void EnvironmentSlotLivenessAnalyzer::UpdateLivenessAtInstruction(
     }
     case HValue::kSimulate:
       last_simulate_ = HSimulate::cast(instr);
-      went_live_since_last_simulate_->Clear();
+      went_live_since_last_simulate_.Clear();
       break;
     default:
       break;
@@ -200,47 +191,46 @@ void EnvironmentSlotLivenessAnalyzer::UpdateLivenessAtInstruction(
 }
 
 
-void EnvironmentSlotLivenessAnalyzer::AnalyzeAndTrim() {
-  HPhase phase("H_EnvironmentLivenessAnalysis", graph_);
-  if (maximum_environment_size_ == 0) return;
+void HEnvironmentLivenessAnalysisPhase::Run() {
+  ASSERT(maximum_environment_size_ > 0);
 
   // Main iteration. Compute liveness of environment slots, and store it
   // for each block until it doesn't change any more. For efficiency, visit
   // blocks in reverse order and walk backwards through each block. We
   // need several iterations to propagate liveness through nested loops.
-  BitVector* live = new(zone()) BitVector(maximum_environment_size_, zone());
-  BitVector* worklist = new(zone()) BitVector(block_count_, zone());
+  BitVector live(maximum_environment_size_, zone());
+  BitVector worklist(block_count_, zone());
   for (int i = 0; i < block_count_; ++i) {
-    worklist->Add(i);
+    worklist.Add(i);
   }
-  while (!worklist->IsEmpty()) {
+  while (!worklist.IsEmpty()) {
     for (int block_id = block_count_ - 1; block_id >= 0; --block_id) {
-      if (!worklist->Contains(block_id)) {
+      if (!worklist.Contains(block_id)) {
         continue;
       }
-      worklist->Remove(block_id);
+      worklist.Remove(block_id);
       last_simulate_ = NULL;
 
-      HBasicBlock* block = graph_->blocks()->at(block_id);
-      UpdateLivenessAtBlockEnd(block, live);
+      HBasicBlock* block = graph()->blocks()->at(block_id);
+      UpdateLivenessAtBlockEnd(block, &live);
 
       for (HInstruction* instr = block->last(); instr != NULL;
            instr = instr->previous()) {
-        UpdateLivenessAtInstruction(instr, live);
+        UpdateLivenessAtInstruction(instr, &live);
       }
 
       // Reached the start of the block, do necessary bookkeeping:
       // store computed information for this block and add predecessors
       // to the work list as necessary.
-      first_simulate_->Set(block_id, last_simulate_);
-      first_simulate_invalid_for_index_->at(block_id)->CopyFrom(
-          *went_live_since_last_simulate_);
-      if (live_at_block_start_->at(block_id)->UnionIsChanged(*live)) {
+      first_simulate_.Set(block_id, last_simulate_);
+      first_simulate_invalid_for_index_[block_id]->CopyFrom(
+          went_live_since_last_simulate_);
+      if (live_at_block_start_[block_id]->UnionIsChanged(live)) {
         for (int i = 0; i < block->predecessors()->length(); ++i) {
-          worklist->Add(block->predecessors()->at(i)->block_id());
+          worklist.Add(block->predecessors()->at(i)->block_id());
         }
         if (block->IsInlineReturnTarget()) {
-          worklist->Add(block->inlined_entry_block()->block_id());
+          worklist.Add(block->inlined_entry_block()->block_id());
         }
       }
     }
@@ -249,18 +239,18 @@ void EnvironmentSlotLivenessAnalyzer::AnalyzeAndTrim() {
   }
 
   // Analysis finished. Zap dead environment slots.
-  for (int i = 0; i < markers_->length(); ++i) {
-    ZapEnvironmentSlotsForInstruction(markers_->at(i));
+  for (int i = 0; i < markers_.length(); ++i) {
+    ZapEnvironmentSlotsForInstruction(markers_[i]);
   }
   for (int block_id = block_count_ - 1; block_id >= 0; --block_id) {
-    HBasicBlock* block = graph_->blocks()->at(block_id);
-    UpdateLivenessAtBlockEnd(block, live);
-    ZapEnvironmentSlotsInSuccessors(block, live);
+    HBasicBlock* block = graph()->blocks()->at(block_id);
+    UpdateLivenessAtBlockEnd(block, &live);
+    ZapEnvironmentSlotsInSuccessors(block, &live);
   }
 
   // Finally, remove the HEnvironment{Bind,Lookup} markers.
-  for (int i = 0; i < markers_->length(); ++i) {
-    markers_->at(i)->DeleteAndReplaceWith(NULL);
+  for (int i = 0; i < markers_.length(); ++i) {
+    markers_[i]->DeleteAndReplaceWith(NULL);
   }
 }
 
index 484e56d..248ec5c 100644 (file)
@@ -43,11 +43,11 @@ namespace internal {
 // the last lookup that refers to them.
 // Slots are identified by their index and only affected if whitelisted in
 // HOptimizedGraphBuilder::IsEligibleForEnvironmentLivenessAnalysis().
-class EnvironmentSlotLivenessAnalyzer {
+class HEnvironmentLivenessAnalysisPhase : public HPhase {
  public:
-  explicit EnvironmentSlotLivenessAnalyzer(HGraph* graph);
+  explicit HEnvironmentLivenessAnalysisPhase(HGraph* graph);
 
-  void AnalyzeAndTrim();
+  void Run();
 
  private:
   void ZapEnvironmentSlot(int index, HSimulate* simulate);
@@ -56,14 +56,6 @@ class EnvironmentSlotLivenessAnalyzer {
   void UpdateLivenessAtBlockEnd(HBasicBlock* block, BitVector* live);
   void UpdateLivenessAtInstruction(HInstruction* instr, BitVector* live);
 
-  Zone* zone() { return &zone_; }
-
-  HGraph* graph_;
-  // Use a dedicated Zone for this phase, with a ZoneScope to ensure it
-  // gets freed.
-  Zone zone_;
-  ZoneScope zone_scope_;
-
   int block_count_;
 
   // Largest number of local variables in any environment in the graph
@@ -71,21 +63,23 @@ class EnvironmentSlotLivenessAnalyzer {
   int maximum_environment_size_;
 
   // Per-block data. All these lists are indexed by block_id.
-  ZoneList<BitVector*>* live_at_block_start_;
-  ZoneList<HSimulate*>* first_simulate_;
-  ZoneList<BitVector*>* first_simulate_invalid_for_index_;
+  ZoneList<BitVector*> live_at_block_start_;
+  ZoneList<HSimulate*> first_simulate_;
+  ZoneList<BitVector*> first_simulate_invalid_for_index_;
 
   // List of all HEnvironmentMarker instructions for quick iteration/deletion.
   // It is populated during the first pass over the graph, controlled by
   // |collect_markers_|.
-  ZoneList<HEnvironmentMarker*>* markers_;
+  ZoneList<HEnvironmentMarker*> markers_;
   bool collect_markers_;
 
   // Keeps track of the last simulate seen, as well as the environment slots
   // for which a new live range has started since (so they must not be zapped
   // in that simulate when the end of another live range of theirs is found).
   HSimulate* last_simulate_;
-  BitVector* went_live_since_last_simulate_;
+  BitVector went_live_since_last_simulate_;
+
+  DISALLOW_COPY_AND_ASSIGN(HEnvironmentLivenessAnalysisPhase);
 };
 
 
diff --git a/deps/v8/src/hydrogen-escape-analysis.cc b/deps/v8/src/hydrogen-escape-analysis.cc
new file mode 100644 (file)
index 0000000..e852fb8
--- /dev/null
@@ -0,0 +1,66 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "hydrogen-escape-analysis.h"
+
+namespace v8 {
+namespace internal {
+
+
+void HEscapeAnalysisPhase::CollectIfNoEscapingUses(HInstruction* instr) {
+  for (HUseIterator it(instr->uses()); !it.Done(); it.Advance()) {
+    HValue* use = it.value();
+    if (use->HasEscapingOperandAt(it.index())) {
+      if (FLAG_trace_escape_analysis) {
+        PrintF("#%d (%s) escapes through #%d (%s) @%d\n", instr->id(),
+               instr->Mnemonic(), use->id(), use->Mnemonic(), it.index());
+      }
+      return;
+    }
+  }
+  if (FLAG_trace_escape_analysis) {
+    PrintF("#%d (%s) is being captured\n", instr->id(), instr->Mnemonic());
+  }
+  captured_.Add(instr, zone());
+}
+
+
+void HEscapeAnalysisPhase::CollectCapturedValues() {
+  int block_count = graph()->blocks()->length();
+  for (int i = 0; i < block_count; ++i) {
+    HBasicBlock* block = graph()->blocks()->at(i);
+    for (HInstructionIterator it(block); !it.Done(); it.Advance()) {
+      HInstruction* instr = it.Current();
+      if (instr->IsAllocate() || instr->IsAllocateObject()) {
+        CollectIfNoEscapingUses(instr);
+      }
+    }
+  }
+}
+
+
+} }  // namespace v8::internal
diff --git a/deps/v8/src/hydrogen-escape-analysis.h b/deps/v8/src/hydrogen-escape-analysis.h
new file mode 100644 (file)
index 0000000..6ba6e82
--- /dev/null
@@ -0,0 +1,57 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef V8_HYDROGEN_ESCAPE_ANALYSIS_H_
+#define V8_HYDROGEN_ESCAPE_ANALYSIS_H_
+
+#include "allocation.h"
+#include "hydrogen.h"
+
+namespace v8 {
+namespace internal {
+
+
+class HEscapeAnalysisPhase : public HPhase {
+ public:
+  explicit HEscapeAnalysisPhase(HGraph* graph)
+      : HPhase("H_Escape analysis", graph), captured_(0, zone()) { }
+
+  void Run() {
+    CollectCapturedValues();
+  }
+
+ private:
+  void CollectCapturedValues();
+  void CollectIfNoEscapingUses(HInstruction* instr);
+
+  ZoneList<HValue*> captured_;
+};
+
+
+} }  // namespace v8::internal
+
+#endif  // V8_HYDROGEN_ESCAPE_ANALYSIS_H_
index aa2dff7..7ea2f16 100644 (file)
@@ -361,52 +361,49 @@ void HSideEffectMap::Store(GVNFlagSet flags, HInstruction* instr) {
 }
 
 
-HGlobalValueNumberer::HGlobalValueNumberer(HGraph* graph, CompilationInfo* info)
-      : graph_(graph),
-        info_(info),
+HGlobalValueNumberingPhase::HGlobalValueNumberingPhase(HGraph* graph)
+      : HPhase("H_Global value numbering", graph),
         removed_side_effects_(false),
-        block_side_effects_(graph->blocks()->length(), graph->zone()),
-        loop_side_effects_(graph->blocks()->length(), graph->zone()),
-        visited_on_paths_(graph->zone(), graph->blocks()->length()) {
+        block_side_effects_(graph->blocks()->length(), zone()),
+        loop_side_effects_(graph->blocks()->length(), zone()),
+        visited_on_paths_(zone(), graph->blocks()->length()) {
     ASSERT(!AllowHandleAllocation::IsAllowed());
-    block_side_effects_.AddBlock(GVNFlagSet(), graph_->blocks()->length(),
-                                 graph_->zone());
-    loop_side_effects_.AddBlock(GVNFlagSet(), graph_->blocks()->length(),
-                                graph_->zone());
+    block_side_effects_.AddBlock(GVNFlagSet(), graph->blocks()->length(),
+                                 zone());
+    loop_side_effects_.AddBlock(GVNFlagSet(), graph->blocks()->length(),
+                                zone());
   }
 
-bool HGlobalValueNumberer::Analyze() {
+void HGlobalValueNumberingPhase::Analyze() {
   removed_side_effects_ = false;
   ComputeBlockSideEffects();
   if (FLAG_loop_invariant_code_motion) {
     LoopInvariantCodeMotion();
   }
   AnalyzeGraph();
-  return removed_side_effects_;
 }
 
 
-void HGlobalValueNumberer::ComputeBlockSideEffects() {
+void HGlobalValueNumberingPhase::ComputeBlockSideEffects() {
   // The Analyze phase of GVN can be called multiple times. Clear loop side
   // effects before computing them to erase the contents from previous Analyze
   // passes.
   for (int i = 0; i < loop_side_effects_.length(); ++i) {
     loop_side_effects_[i].RemoveAll();
   }
-  for (int i = graph_->blocks()->length() - 1; i >= 0; --i) {
+  for (int i = graph()->blocks()->length() - 1; i >= 0; --i) {
     // Compute side effects for the block.
-    HBasicBlock* block = graph_->blocks()->at(i);
-    HInstruction* instr = block->first();
+    HBasicBlock* block = graph()->blocks()->at(i);
     int id = block->block_id();
     GVNFlagSet side_effects;
-    while (instr != NULL) {
+    for (HInstructionIterator it(block); !it.Done(); it.Advance()) {
+      HInstruction* instr = it.Current();
       side_effects.Add(instr->ChangesFlags());
       if (instr->IsSoftDeoptimize()) {
         block_side_effects_[id].RemoveAll();
         side_effects.RemoveAll();
         break;
       }
-      instr = instr->next();
     }
     block_side_effects_[id].Add(side_effects);
 
@@ -512,11 +509,11 @@ GVN_UNTRACKED_FLAG_LIST(DECLARE_FLAG)
 }
 
 
-void HGlobalValueNumberer::LoopInvariantCodeMotion() {
+void HGlobalValueNumberingPhase::LoopInvariantCodeMotion() {
   TRACE_GVN_1("Using optimistic loop invariant code motion: %s\n",
-              graph_->use_optimistic_licm() ? "yes" : "no");
-  for (int i = graph_->blocks()->length() - 1; i >= 0; --i) {
-    HBasicBlock* block = graph_->blocks()->at(i);
+              graph()->use_optimistic_licm() ? "yes" : "no");
+  for (int i = graph()->blocks()->length() - 1; i >= 0; --i) {
+    HBasicBlock* block = graph()->blocks()->at(i);
     if (block->IsLoopHeader()) {
       GVNFlagSet side_effects = loop_side_effects_[block->block_id()];
       TRACE_GVN_2("Try loop invariant motion for block B%d %s\n",
@@ -527,7 +524,7 @@ void HGlobalValueNumberer::LoopInvariantCodeMotion() {
       GVNFlagSet accumulated_first_time_changes;
       HBasicBlock* last = block->loop_information()->GetLastBackEdge();
       for (int j = block->block_id(); j <= last->block_id(); ++j) {
-        ProcessLoopBlock(graph_->blocks()->at(j), block, side_effects,
+        ProcessLoopBlock(graph()->blocks()->at(j), block, side_effects,
                          &accumulated_first_time_depends,
                          &accumulated_first_time_changes);
       }
@@ -536,7 +533,7 @@ void HGlobalValueNumberer::LoopInvariantCodeMotion() {
 }
 
 
-void HGlobalValueNumberer::ProcessLoopBlock(
+void HGlobalValueNumberingPhase::ProcessLoopBlock(
     HBasicBlock* block,
     HBasicBlock* loop_header,
     GVNFlagSet loop_kills,
@@ -601,20 +598,21 @@ void HGlobalValueNumberer::ProcessLoopBlock(
 }
 
 
-bool HGlobalValueNumberer::AllowCodeMotion() {
+bool HGlobalValueNumberingPhase::AllowCodeMotion() {
   return info()->IsStub() || info()->opt_count() + 1 < FLAG_max_opt_count;
 }
 
 
-bool HGlobalValueNumberer::ShouldMove(HInstruction* instr,
-                                      HBasicBlock* loop_header) {
+bool HGlobalValueNumberingPhase::ShouldMove(HInstruction* instr,
+                                            HBasicBlock* loop_header) {
   // If we've disabled code motion or we're in a block that unconditionally
   // deoptimizes, don't move any instructions.
   return AllowCodeMotion() && !instr->block()->IsDeoptimizing();
 }
 
 
-GVNFlagSet HGlobalValueNumberer::CollectSideEffectsOnPathsToDominatedBlock(
+GVNFlagSet
+HGlobalValueNumberingPhase::CollectSideEffectsOnPathsToDominatedBlock(
     HBasicBlock* dominator, HBasicBlock* dominated) {
   GVNFlagSet side_effects;
   for (int i = 0; i < dominated->predecessors()->length(); ++i) {
@@ -754,8 +752,8 @@ class GvnBasicBlockState: public ZoneObject {
 // into a loop to avoid stack overflows.
 // The logical "stack frames" of the recursion are kept in a list of
 // GvnBasicBlockState instances.
-void HGlobalValueNumberer::AnalyzeGraph() {
-  HBasicBlock* entry_block = graph_->entry_block();
+void HGlobalValueNumberingPhase::AnalyzeGraph() {
+  HBasicBlock* entry_block = graph()->entry_block();
   HValueMap* entry_map = new(zone()) HValueMap(zone());
   GvnBasicBlockState* current =
       GvnBasicBlockState::CreateEntry(zone(), entry_block, entry_map);
@@ -826,7 +824,8 @@ void HGlobalValueNumberer::AnalyzeGraph() {
 
     HBasicBlock* dominator_block;
     GvnBasicBlockState* next =
-        current->next_in_dominator_tree_traversal(zone(), &dominator_block);
+        current->next_in_dominator_tree_traversal(zone(),
+                                                  &dominator_block);
 
     if (next != NULL) {
       HBasicBlock* dominated = next->block();
index c39765a..66224e4 100644 (file)
@@ -76,14 +76,24 @@ class SparseSet {
 };
 
 
-class HGlobalValueNumberer BASE_EMBEDDED {
+// Perform common subexpression elimination and loop-invariant code motion.
+class HGlobalValueNumberingPhase : public HPhase {
  public:
-  HGlobalValueNumberer(HGraph* graph, CompilationInfo* info);
-
-  // Returns true if values with side effects are removed.
-  bool Analyze();
+  explicit HGlobalValueNumberingPhase(HGraph* graph);
+
+  void Run() {
+    Analyze();
+    // Trigger a second analysis pass to further eliminate duplicate values
+    // that could only be discovered by removing side-effect-generating
+    // instructions during the first pass.
+    if (FLAG_smi_only_arrays && removed_side_effects_) {
+      Analyze();
+      ASSERT(!removed_side_effects_);
+    }
+  }
 
  private:
+  void Analyze();
   GVNFlagSet CollectSideEffectsOnPathsToDominatedBlock(
       HBasicBlock* dominator,
       HBasicBlock* dominated);
@@ -98,12 +108,6 @@ class HGlobalValueNumberer BASE_EMBEDDED {
   bool AllowCodeMotion();
   bool ShouldMove(HInstruction* instr, HBasicBlock* loop_header);
 
-  HGraph* graph() { return graph_; }
-  CompilationInfo* info() { return info_; }
-  Zone* zone() const { return graph_->zone(); }
-
-  HGraph* graph_;
-  CompilationInfo* info_;
   bool removed_side_effects_;
 
   // A map of block IDs to their side effects.
@@ -115,6 +119,8 @@ class HGlobalValueNumberer BASE_EMBEDDED {
   // Used when collecting side effects on paths from dominator to
   // dominated.
   SparseSet visited_on_paths_;
+
+  DISALLOW_COPY_AND_ASSIGN(HGlobalValueNumberingPhase);
 };
 
 
diff --git a/deps/v8/src/hydrogen-infer-representation.cc b/deps/v8/src/hydrogen-infer-representation.cc
new file mode 100644 (file)
index 0000000..95c3412
--- /dev/null
@@ -0,0 +1,172 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "hydrogen-infer-representation.h"
+
+namespace v8 {
+namespace internal {
+
+void HInferRepresentationPhase::AddToWorklist(HValue* current) {
+  if (current->representation().IsTagged()) return;
+  if (!current->CheckFlag(HValue::kFlexibleRepresentation)) return;
+  if (in_worklist_.Contains(current->id())) return;
+  worklist_.Add(current, zone());
+  in_worklist_.Add(current->id());
+}
+
+
+void HInferRepresentationPhase::Run() {
+  // (1) Initialize bit vectors and count real uses. Each phi gets a
+  // bit-vector of length <number of phis>.
+  const ZoneList<HPhi*>* phi_list = graph()->phi_list();
+  int phi_count = phi_list->length();
+  ZoneList<BitVector*> connected_phis(phi_count, zone());
+  for (int i = 0; i < phi_count; ++i) {
+    phi_list->at(i)->InitRealUses(i);
+    BitVector* connected_set = new(zone()) BitVector(phi_count, zone());
+    connected_set->Add(i);
+    connected_phis.Add(connected_set, zone());
+  }
+
+  // (2) Do a fixed point iteration to find the set of connected phis.  A
+  // phi is connected to another phi if its value is used either directly or
+  // indirectly through a transitive closure of the def-use relation.
+  bool change = true;
+  while (change) {
+    change = false;
+    // We normally have far more "forward edges" than "backward edges",
+    // so we terminate faster when we walk backwards.
+    for (int i = phi_count - 1; i >= 0; --i) {
+      HPhi* phi = phi_list->at(i);
+      for (HUseIterator it(phi->uses()); !it.Done(); it.Advance()) {
+        HValue* use = it.value();
+        if (use->IsPhi()) {
+          int id = HPhi::cast(use)->phi_id();
+          if (connected_phis[i]->UnionIsChanged(*connected_phis[id]))
+            change = true;
+        }
+      }
+    }
+  }
+
+  // Set truncation flags for groups of connected phis. This is a conservative
+  // approximation; the flag will be properly re-computed after representations
+  // have been determined.
+  if (phi_count > 0) {
+    BitVector done(phi_count, zone());
+    for (int i = 0; i < phi_count; ++i) {
+      if (done.Contains(i)) continue;
+
+      // Check if all uses of all connected phis in this group are truncating.
+      bool all_uses_everywhere_truncating = true;
+      for (BitVector::Iterator it(connected_phis[i]);
+           !it.Done();
+           it.Advance()) {
+        int index = it.Current();
+        all_uses_everywhere_truncating &=
+            phi_list->at(index)->CheckFlag(HInstruction::kTruncatingToInt32);
+        done.Add(index);
+      }
+      if (all_uses_everywhere_truncating) {
+        continue;  // Great, nothing to do.
+      }
+      // Clear truncation flag of this group of connected phis.
+      for (BitVector::Iterator it(connected_phis[i]);
+           !it.Done();
+           it.Advance()) {
+        int index = it.Current();
+        phi_list->at(index)->ClearFlag(HInstruction::kTruncatingToInt32);
+      }
+    }
+  }
+
+  // Simplify constant phi inputs where possible.
+  // This step uses kTruncatingToInt32 flags of phis.
+  for (int i = 0; i < phi_count; ++i) {
+    phi_list->at(i)->SimplifyConstantInputs();
+  }
+
+  // Use the phi reachability information from step 2 to
+  // sum up the non-phi use counts of all connected phis.
+  for (int i = 0; i < phi_count; ++i) {
+    HPhi* phi = phi_list->at(i);
+    for (BitVector::Iterator it(connected_phis[i]);
+         !it.Done();
+         it.Advance()) {
+      int index = it.Current();
+      HPhi* it_use = phi_list->at(index);
+      if (index != i) phi->AddNonPhiUsesFrom(it_use);  // Don't count twice.
+    }
+  }
+
+  // Initialize work list
+  for (int i = 0; i < graph()->blocks()->length(); ++i) {
+    HBasicBlock* block = graph()->blocks()->at(i);
+    const ZoneList<HPhi*>* phis = block->phis();
+    for (int j = 0; j < phis->length(); ++j) {
+      AddToWorklist(phis->at(j));
+    }
+
+    for (HInstructionIterator it(block); !it.Done(); it.Advance()) {
+      HInstruction* current = it.Current();
+      AddToWorklist(current);
+    }
+  }
+
+  // Do a fixed point iteration, trying to improve representations
+  while (!worklist_.is_empty()) {
+    HValue* current = worklist_.RemoveLast();
+    in_worklist_.Remove(current->id());
+    current->InferRepresentation(this);
+  }
+
+  // Lastly: any instruction that we don't have representation information
+  // for defaults to Tagged.
+  for (int i = 0; i < graph()->blocks()->length(); ++i) {
+    HBasicBlock* block = graph()->blocks()->at(i);
+    const ZoneList<HPhi*>* phis = block->phis();
+    for (int j = 0; j < phis->length(); ++j) {
+      HPhi* phi = phis->at(j);
+      if (phi->representation().IsNone()) {
+        phi->ChangeRepresentation(Representation::Tagged());
+      }
+    }
+    for (HInstructionIterator it(block); !it.Done(); it.Advance()) {
+      HInstruction* current = it.Current();
+      if (current->representation().IsNone() &&
+          current->CheckFlag(HInstruction::kFlexibleRepresentation)) {
+        if (current->CheckFlag(HInstruction::kCannotBeTagged)) {
+          current->ChangeRepresentation(Representation::Double());
+        } else {
+          current->ChangeRepresentation(Representation::Tagged());
+        }
+      }
+    }
+  }
+}
+
+} }  // namespace v8::internal
diff --git a/deps/v8/src/hydrogen-infer-representation.h b/deps/v8/src/hydrogen-infer-representation.h
new file mode 100644 (file)
index 0000000..7c60569
--- /dev/null
@@ -0,0 +1,57 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef V8_HYDROGEN_INFER_REPRESENTATION_H_
+#define V8_HYDROGEN_INFER_REPRESENTATION_H_
+
+#include "hydrogen.h"
+
+namespace v8 {
+namespace internal {
+
+
+class HInferRepresentationPhase : public HPhase {
+ public:
+  explicit HInferRepresentationPhase(HGraph* graph)
+      : HPhase("H_Infer representations", graph),
+        worklist_(8, zone()),
+        in_worklist_(graph->GetMaximumValueID(), zone()) { }
+
+  void Run();
+  void AddToWorklist(HValue* current);
+
+ private:
+  ZoneList<HValue*> worklist_;
+  BitVector in_worklist_;
+
+  DISALLOW_COPY_AND_ASSIGN(HInferRepresentationPhase);
+};
+
+
+} }  // namespace v8::internal
+
+#endif  // V8_HYDROGEN_INFER_REPRESENTATION_H_
index b36706b..932fd47 100644 (file)
@@ -29,7 +29,7 @@
 
 #include "double.h"
 #include "factory.h"
-#include "hydrogen.h"
+#include "hydrogen-infer-representation.h"
 
 #if V8_TARGET_ARCH_IA32
 #include "ia32/lithium-ia32.h"
@@ -78,12 +78,16 @@ void HValue::AssumeRepresentation(Representation r) {
 }
 
 
-void HValue::InferRepresentation(HInferRepresentation* h_infer) {
+void HValue::InferRepresentation(HInferRepresentationPhase* h_infer) {
   ASSERT(CheckFlag(kFlexibleRepresentation));
   Representation new_rep = RepresentationFromInputs();
   UpdateRepresentation(new_rep, h_infer, "inputs");
   new_rep = RepresentationFromUses();
   UpdateRepresentation(new_rep, h_infer, "uses");
+  new_rep = RepresentationFromUseRequirements();
+  if (new_rep.fits_into(Representation::Integer32())) {
+    UpdateRepresentation(new_rep, h_infer, "use requirements");
+  }
 }
 
 
@@ -120,10 +124,11 @@ Representation HValue::RepresentationFromUses() {
 
 
 void HValue::UpdateRepresentation(Representation new_rep,
-                                  HInferRepresentation* h_infer,
+                                  HInferRepresentationPhase* h_infer,
                                   const char* reason) {
   Representation r = representation();
   if (new_rep.is_more_general_than(r)) {
+    if (CheckFlag(kCannotBeTagged) && new_rep.IsTagged()) return;
     if (FLAG_trace_representation) {
       PrintF("Changing #%d %s representation %s -> %s based on %s\n",
              id(), Mnemonic(), r.Mnemonic(), new_rep.Mnemonic(), reason);
@@ -134,7 +139,7 @@ void HValue::UpdateRepresentation(Representation new_rep,
 }
 
 
-void HValue::AddDependantsToWorklist(HInferRepresentation* h_infer) {
+void HValue::AddDependantsToWorklist(HInferRepresentationPhase* h_infer) {
   for (HUseIterator it(uses()); !it.Done(); it.Advance()) {
     h_infer->AddToWorklist(it.value());
   }
@@ -1145,21 +1150,20 @@ void HBoundsCheck::PrintDataTo(StringStream* stream) {
 }
 
 
-void HBoundsCheck::InferRepresentation(HInferRepresentation* h_infer) {
+void HBoundsCheck::InferRepresentation(HInferRepresentationPhase* h_infer) {
   ASSERT(CheckFlag(kFlexibleRepresentation));
-  Representation r;
   HValue* actual_index = index()->ActualValue();
   HValue* actual_length = length()->ActualValue();
   Representation index_rep = actual_index->representation();
-  if (!actual_length->representation().IsSmiOrTagged()) {
-    r = Representation::Integer32();
-  } else if ((index_rep.IsTagged() && actual_index->type().IsSmi()) ||
-      index_rep.IsSmi()) {
-    // If the index is smi, allow the length to be smi, since it is usually
-    // already smi from loading it out of the length field of a JSArray.  This
-    // allows for direct comparison without untagging.
-    r = Representation::Smi();
-  } else {
+  Representation length_rep = actual_length->representation();
+  if (index_rep.IsTagged() && actual_index->type().IsSmi()) {
+    index_rep = Representation::Smi();
+  }
+  if (length_rep.IsTagged() && actual_length->type().IsSmi()) {
+    length_rep = Representation::Smi();
+  }
+  Representation r = index_rep.generalize(length_rep);
+  if (r.is_more_general_than(Representation::Integer32())) {
     r = Representation::Integer32();
   }
   UpdateRepresentation(r, h_infer, "boundscheck");
@@ -1221,6 +1225,13 @@ void HCallKnownGlobal::PrintDataTo(StringStream* stream) {
 }
 
 
+void HCallNewArray::PrintDataTo(StringStream* stream) {
+  stream->Add(ElementsKindToString(elements_kind()));
+  stream->Add(" ");
+  HBinaryCall::PrintDataTo(stream);
+}
+
+
 void HCallRuntime::PrintDataTo(StringStream* stream) {
   stream->Add("%o ", *name());
   stream->Add("#%d", argument_count());
@@ -1277,20 +1288,26 @@ void HReturn::PrintDataTo(StringStream* stream) {
 
 Representation HBranch::observed_input_representation(int index) {
   static const ToBooleanStub::Types tagged_types(
-      ToBooleanStub::UNDEFINED |
       ToBooleanStub::NULL_TYPE |
       ToBooleanStub::SPEC_OBJECT |
       ToBooleanStub::STRING |
       ToBooleanStub::SYMBOL);
   if (expected_input_types_.ContainsAnyOf(tagged_types)) {
     return Representation::Tagged();
-  } else if (expected_input_types_.Contains(ToBooleanStub::HEAP_NUMBER)) {
+  }
+  if (expected_input_types_.Contains(ToBooleanStub::UNDEFINED)) {
+    if (expected_input_types_.Contains(ToBooleanStub::HEAP_NUMBER)) {
+      return Representation::Double();
+    }
+    return Representation::Tagged();
+  }
+  if (expected_input_types_.Contains(ToBooleanStub::HEAP_NUMBER)) {
     return Representation::Double();
-  } else if (expected_input_types_.Contains(ToBooleanStub::SMI)) {
-    return Representation::Integer32();
-  } else {
-    return Representation::None();
   }
+  if (expected_input_types_.Contains(ToBooleanStub::SMI)) {
+    return Representation::Smi();
+  }
+  return Representation::None();
 }
 
 
@@ -1511,30 +1528,52 @@ void HChange::PrintDataTo(StringStream* stream) {
 }
 
 
+static HValue* SimplifiedDividendForMathFloorOfDiv(HValue* dividend) {
+  // A value with an integer representation does not need to be transformed.
+  if (dividend->representation().IsInteger32()) {
+    return dividend;
+  }
+  // A change from an integer32 can be replaced by the integer32 value.
+  if (dividend->IsChange() &&
+      HChange::cast(dividend)->from().IsInteger32()) {
+    return HChange::cast(dividend)->value();
+  }
+  return NULL;
+}
+
+
 HValue* HUnaryMathOperation::Canonicalize() {
   if (op() == kMathFloor) {
-    // If the input is integer32 then we replace the floor instruction
-    // with its input. This happens before the representation changes are
-    // introduced.
-
-    // TODO(2205): The above comment is lying. All of this happens
-    // *after* representation changes are introduced. We should check
-    // for value->IsChange() and react accordingly if yes.
+    HValue* val = value();
+    if (val->IsChange()) val = HChange::cast(val)->value();
 
-    if (value()->representation().IsInteger32()) return value();
+    // If the input is integer32 then we replace the floor instruction
+    // with its input.
+    if (val->representation().IsInteger32()) return val;
 
-#if defined(V8_TARGET_ARCH_ARM) || defined(V8_TARGET_ARCH_IA32) || \
-        defined(V8_TARGET_ARCH_X64)
-    if (value()->IsDiv() && (value()->UseCount() == 1)) {
-      // TODO(2038): Implement this optimization for non ARM architectures.
-      HDiv* hdiv = HDiv::cast(value());
+    if (val->IsDiv() && (val->UseCount() == 1)) {
+      HDiv* hdiv = HDiv::cast(val);
       HValue* left = hdiv->left();
       HValue* right = hdiv->right();
       // Try to simplify left and right values of the division.
-      HValue* new_left =
-        LChunkBuilder::SimplifiedDividendForMathFloorOfDiv(left);
+      HValue* new_left = SimplifiedDividendForMathFloorOfDiv(left);
+      if (new_left == NULL &&
+          hdiv->observed_input_representation(1).IsSmiOrInteger32()) {
+        new_left = new(block()->zone())
+            HChange(left, Representation::Integer32(), false, false);
+        HChange::cast(new_left)->InsertBefore(this);
+      }
       HValue* new_right =
-        LChunkBuilder::SimplifiedDivisorForMathFloorOfDiv(right);
+          LChunkBuilder::SimplifiedDivisorForMathFloorOfDiv(right);
+      if (new_right == NULL &&
+#if V8_TARGET_ARCH_ARM
+          CpuFeatures::IsSupported(SUDIV) &&
+#endif
+          hdiv->observed_input_representation(2).IsSmiOrInteger32()) {
+        new_right = new(block()->zone())
+            HChange(right, Representation::Integer32(), false, false);
+        HChange::cast(new_right)->InsertBefore(this);
+      }
 
       // Return if left or right are not optimizable.
       if ((new_left == NULL) || (new_right == NULL)) return this;
@@ -1548,26 +1587,20 @@ HValue* HUnaryMathOperation::Canonicalize() {
           !HInstruction::cast(new_right)->IsLinked()) {
         HInstruction::cast(new_right)->InsertBefore(this);
       }
-      HMathFloorOfDiv* instr =  new(block()->zone()) HMathFloorOfDiv(context(),
-          new_left,
-          new_right);
+      HMathFloorOfDiv* instr = new(block()->zone())
+          HMathFloorOfDiv(context(), new_left, new_right);
       // Replace this HMathFloor instruction by the new HMathFloorOfDiv.
       instr->InsertBefore(this);
       ReplaceAllUsesWith(instr);
       Kill();
       // We know the division had no other uses than this HMathFloor. Delete it.
-      // Also delete the arguments of the division if they are not used any
-      // more.
+      // Dead code elimination will deal with |left| and |right| if
+      // appropriate.
       hdiv->DeleteAndReplaceWith(NULL);
-      ASSERT(left->IsChange() || left->IsConstant());
-      ASSERT(right->IsChange() || right->IsConstant());
-      if (left->HasNoUses())  left->DeleteAndReplaceWith(NULL);
-      if (right->HasNoUses())  right->DeleteAndReplaceWith(NULL);
 
       // Return NULL to remove this instruction from the graph.
       return NULL;
     }
-#endif  // V8_TARGET_ARCH_ARM
   }
   return this;
 }
@@ -1739,9 +1772,12 @@ Range* HConstant::InferRange(Zone* zone) {
 
 
 Range* HPhi::InferRange(Zone* zone) {
-  if (representation().IsInteger32()) {
+  Representation r = representation();
+  if (r.IsSmiOrInteger32()) {
     if (block()->IsLoopHeader()) {
-      Range* range = new(zone) Range(kMinInt, kMaxInt);
+      Range* range = r.IsSmi()
+          ? new(zone) Range(Smi::kMinValue, Smi::kMaxValue)
+          : new(zone) Range(kMinInt, kMaxInt);
       return range;
     } else {
       Range* range = OperandAt(0)->range()->Copy(zone);
@@ -2295,7 +2331,7 @@ void HBinaryOperation::PrintDataTo(StringStream* stream) {
 }
 
 
-void HBinaryOperation::InferRepresentation(HInferRepresentation* h_infer) {
+void HBinaryOperation::InferRepresentation(HInferRepresentationPhase* h_infer) {
   ASSERT(CheckFlag(kFlexibleRepresentation));
   Representation new_rep = RepresentationFromInputs();
   UpdateRepresentation(new_rep, h_infer, "inputs");
@@ -2304,6 +2340,10 @@ void HBinaryOperation::InferRepresentation(HInferRepresentation* h_infer) {
   if (!observed_output_representation_.IsNone()) return;
   new_rep = RepresentationFromUses();
   UpdateRepresentation(new_rep, h_infer, "uses");
+  new_rep = RepresentationFromUseRequirements();
+  if (new_rep.fits_into(Representation::Integer32())) {
+    UpdateRepresentation(new_rep, h_infer, "use requirements");
+  }
 }
 
 
@@ -2354,7 +2394,7 @@ void HBinaryOperation::AssumeRepresentation(Representation r) {
 }
 
 
-void HMathMinMax::InferRepresentation(HInferRepresentation* h_infer) {
+void HMathMinMax::InferRepresentation(HInferRepresentationPhase* h_infer) {
   ASSERT(CheckFlag(kFlexibleRepresentation));
   Representation new_rep = RepresentationFromInputs();
   UpdateRepresentation(new_rep, h_infer, "inputs");
@@ -2533,7 +2573,8 @@ void HGoto::PrintDataTo(StringStream* stream) {
 }
 
 
-void HCompareIDAndBranch::InferRepresentation(HInferRepresentation* h_infer) {
+void HCompareIDAndBranch::InferRepresentation(
+    HInferRepresentationPhase* h_infer) {
   Representation left_rep = left()->representation();
   Representation right_rep = right()->representation();
   Representation observed_left = observed_input_representation(0);
@@ -3032,9 +3073,8 @@ HType HCheckFunction::CalculateInferredType() {
 }
 
 
-HType HCheckNonSmi::CalculateInferredType() {
-  // TODO(kasperl): Is there any way to signal that this isn't a smi?
-  return HType::Tagged();
+HType HCheckHeapObject::CalculateInferredType() {
+  return HType::NonPrimitive();
 }
 
 
@@ -3124,6 +3164,11 @@ HType HStringCharFromCode::CalculateInferredType() {
 }
 
 
+HType HAllocateObject::CalculateInferredType() {
+  return HType::JSObject();
+}
+
+
 HType HAllocate::CalculateInferredType() {
   return type_;
 }
@@ -3304,10 +3349,9 @@ HInstruction* HStringAdd::New(
     HConstant* c_right = HConstant::cast(right);
     HConstant* c_left = HConstant::cast(left);
     if (c_left->HasStringValue() && c_right->HasStringValue()) {
-      Factory* factory = Isolate::Current()->factory();
-      return new(zone) HConstant(factory->NewConsString(c_left->StringValue(),
-                                                        c_right->StringValue()),
-                                 Representation::Tagged());
+      Handle<String> concat = zone->isolate()->factory()->NewFlatConcatString(
+          c_left->StringValue(), c_right->StringValue());
+      return new(zone) HConstant(concat, Representation::Tagged());
     }
   }
   return new(zone) HStringAdd(context, left, right);
@@ -3464,8 +3508,7 @@ HInstruction* HMod::New(Zone* zone,
                         HValue* context,
                         HValue* left,
                         HValue* right,
-                        bool has_fixed_right_arg,
-                        int fixed_right_arg_value) {
+                        Maybe<int> fixed_right_arg) {
   if (FLAG_fold_constants && left->IsConstant() && right->IsConstant()) {
     HConstant* c_left = HConstant::cast(left);
     HConstant* c_right = HConstant::cast(right);
@@ -3484,11 +3527,7 @@ HInstruction* HMod::New(Zone* zone,
       }
     }
   }
-  return new(zone) HMod(context,
-                        left,
-                        right,
-                        has_fixed_right_arg,
-                        fixed_right_arg_value);
+  return new(zone) HMod(context, left, right, fixed_right_arg);
 }
 
 
@@ -3640,7 +3679,7 @@ void HPhi::SimplifyConstantInputs() {
 }
 
 
-void HPhi::InferRepresentation(HInferRepresentation* h_infer) {
+void HPhi::InferRepresentation(HInferRepresentationPhase* h_infer) {
   ASSERT(CheckFlag(kFlexibleRepresentation));
   Representation new_rep = RepresentationFromInputs();
   UpdateRepresentation(new_rep, h_infer, "inputs");
@@ -3660,34 +3699,26 @@ Representation HPhi::RepresentationFromInputs() {
 }
 
 
-Representation HPhi::RepresentationFromUseRequirements() {
-  Representation all_uses_require = Representation::None();
-  bool all_uses_require_the_same = true;
+// Returns a representation if all uses agree on the same representation.
+// Integer32 is also returned when some uses are Smi but others are Integer32.
+Representation HValue::RepresentationFromUseRequirements() {
+  Representation rep = Representation::None();
   for (HUseIterator it(uses()); !it.Done(); it.Advance()) {
     // We check for observed_input_representation elsewhere.
     Representation use_rep =
         it.value()->RequiredInputRepresentation(it.index());
-    // No useful info from this use -> look at the next one.
-    if (use_rep.IsNone()) {
+    if (rep.IsNone()) {
+      rep = use_rep;
       continue;
     }
-    if (use_rep.Equals(all_uses_require)) {
+    if (use_rep.IsNone() || rep.Equals(use_rep)) continue;
+    if (rep.generalize(use_rep).IsInteger32()) {
+      rep = Representation::Integer32();
       continue;
     }
-    // This use's representation contradicts what we've seen so far.
-    if (!all_uses_require.IsNone()) {
-      ASSERT(!use_rep.Equals(all_uses_require));
-      all_uses_require_the_same = false;
-      break;
-    }
-    // Otherwise, initialize observed representation.
-    all_uses_require = use_rep;
-  }
-  if (all_uses_require_the_same) {
-    return all_uses_require;
+    return Representation::None();
   }
-
-  return Representation::None();
+  return rep;
 }
 
 
@@ -3712,7 +3743,7 @@ void HSimulate::Verify() {
 }
 
 
-void HCheckNonSmi::Verify() {
+void HCheckHeapObject::Verify() {
   HInstruction::Verify();
   ASSERT(HasNoUses());
 }
index 82ed261..26bda87 100644 (file)
@@ -45,7 +45,7 @@ namespace internal {
 // Forward declarations.
 class HBasicBlock;
 class HEnvironment;
-class HInferRepresentation;
+class HInferRepresentationPhase;
 class HInstruction;
 class HLoopInformation;
 class HValue;
@@ -66,6 +66,7 @@ class LChunkBuilder;
   V(AccessArgumentsAt)                         \
   V(Add)                                       \
   V(Allocate)                                  \
+  V(AllocateObject)                            \
   V(ApplyArguments)                            \
   V(ArgumentsElements)                         \
   V(ArgumentsLength)                           \
@@ -88,9 +89,9 @@ class LChunkBuilder;
   V(CallStub)                                  \
   V(Change)                                    \
   V(CheckFunction)                             \
+  V(CheckHeapObject)                           \
   V(CheckInstanceType)                         \
   V(CheckMaps)                                 \
-  V(CheckNonSmi)                               \
   V(CheckPrototypeMaps)                        \
   V(ClampToUint8)                              \
   V(ClassOfTestAndBranch)                      \
@@ -110,7 +111,6 @@ class LChunkBuilder;
   V(ElementsKind)                              \
   V(EnterInlined)                              \
   V(EnvironmentMarker)                         \
-  V(FixedArrayBaseLength)                      \
   V(ForceRepresentation)                       \
   V(FunctionLiteral)                           \
   V(GetCachedArrayIndex)                       \
@@ -433,7 +433,7 @@ class HType {
 
   bool IsHeapObject() const {
     ASSERT(type_ != kUninitialized);
-    return IsHeapNumber() || IsString() || IsNonPrimitive();
+    return IsHeapNumber() || IsString() || IsBoolean() || IsNonPrimitive();
   }
 
   static HType TypeFromValue(Handle<Object> value);
@@ -783,6 +783,7 @@ class HValue: public ZoneObject {
 
   enum Flag {
     kFlexibleRepresentation,
+    kCannotBeTagged,
     // Participate in Global Value Numbering, i.e. elimination of
     // unnecessary recomputations. If an instruction sets this flag, it must
     // implement DataEquals(), which will be used to determine if other
@@ -888,6 +889,7 @@ class HValue: public ZoneObject {
   Representation representation() const { return representation_; }
   void ChangeRepresentation(Representation r) {
     ASSERT(CheckFlag(kFlexibleRepresentation));
+    ASSERT(!CheckFlag(kCannotBeTagged) || !r.IsTagged());
     RepresentationChanged(r);
     representation_ = r;
     if (r.IsTagged()) {
@@ -915,6 +917,10 @@ class HValue: public ZoneObject {
     type_ = new_type;
   }
 
+  bool IsHeapObject() {
+    return representation_.IsHeapObject() || type_.IsHeapObject();
+  }
+
   // An operation needs to override this function iff:
   //   1) it can produce an int32 output.
   //   2) the true value of its output can potentially be minus zero.
@@ -1055,12 +1061,15 @@ class HValue: public ZoneObject {
   void RemoveLastAddedRange();
   void ComputeInitialRange(Zone* zone);
 
+  // Escape analysis helpers.
+  virtual bool HasEscapingOperandAt(int index) { return true; }
+
   // Representation helpers.
   virtual Representation observed_input_representation(int index) {
     return Representation::None();
   }
   virtual Representation RequiredInputRepresentation(int index) = 0;
-  virtual void InferRepresentation(HInferRepresentation* h_infer);
+  virtual void InferRepresentation(HInferRepresentationPhase* h_infer);
 
   // This gives the instruction an opportunity to replace itself with an
   // instruction that does the same in some better way.  To replace an
@@ -1150,10 +1159,11 @@ class HValue: public ZoneObject {
     return representation();
   }
   Representation RepresentationFromUses();
+  Representation RepresentationFromUseRequirements();
   virtual void UpdateRepresentation(Representation new_rep,
-                                    HInferRepresentation* h_infer,
+                                    HInferRepresentationPhase* h_infer,
                                     const char* reason);
-  void AddDependantsToWorklist(HInferRepresentation* h_infer);
+  void AddDependantsToWorklist(HInferRepresentationPhase* h_infer);
 
   virtual void RepresentationChanged(Representation to) { }
 
@@ -1425,6 +1435,7 @@ class HDummyUse: public HTemplateInstruction<1> {
 
   HValue* value() { return OperandAt(0); }
 
+  virtual bool HasEscapingOperandAt(int index) { return false; }
   virtual Representation RequiredInputRepresentation(int index) {
     return Representation::None();
   }
@@ -1595,17 +1606,21 @@ class HBranch: public HUnaryControlInstruction {
   HBranch(HValue* value,
           HBasicBlock* true_target,
           HBasicBlock* false_target,
-          ToBooleanStub::Types expected_input_types = ToBooleanStub::no_types())
+          ToBooleanStub::Types expected_input_types = ToBooleanStub::Types())
       : HUnaryControlInstruction(value, true_target, false_target),
         expected_input_types_(expected_input_types) {
     ASSERT(true_target != NULL && false_target != NULL);
+    SetFlag(kAllowUndefinedAsNaN);
   }
   explicit HBranch(HValue* value)
-      : HUnaryControlInstruction(value, NULL, NULL) { }
+      : HUnaryControlInstruction(value, NULL, NULL) {
+    SetFlag(kAllowUndefinedAsNaN);
+  }
   HBranch(HValue* value, ToBooleanStub::Types expected_input_types)
       : HUnaryControlInstruction(value, NULL, NULL),
-        expected_input_types_(expected_input_types) { }
-
+        expected_input_types_(expected_input_types) {
+    SetFlag(kAllowUndefinedAsNaN);
+  }
 
   virtual Representation RequiredInputRepresentation(int index) {
     return Representation::None();
@@ -1880,6 +1895,7 @@ class HSimulate: public HInstruction {
   virtual int OperandCount() { return values_.length(); }
   virtual HValue* OperandAt(int index) const { return values_[index]; }
 
+  virtual bool HasEscapingOperandAt(int index) { return false; }
   virtual Representation RequiredInputRepresentation(int index) {
     return Representation::None();
   }
@@ -2016,6 +2032,9 @@ enum InliningKind {
 };
 
 
+class HArgumentsObject;
+
+
 class HEnterInlined: public HTemplateInstruction<0> {
  public:
   HEnterInlined(Handle<JSFunction> closure,
@@ -2023,7 +2042,7 @@ class HEnterInlined: public HTemplateInstruction<0> {
                 FunctionLiteral* function,
                 InliningKind inlining_kind,
                 Variable* arguments_var,
-                ZoneList<HValue*>* arguments_values,
+                HArgumentsObject* arguments_object,
                 bool undefined_receiver,
                 Zone* zone)
       : closure_(closure),
@@ -2032,7 +2051,7 @@ class HEnterInlined: public HTemplateInstruction<0> {
         function_(function),
         inlining_kind_(inlining_kind),
         arguments_var_(arguments_var),
-        arguments_values_(arguments_values),
+        arguments_object_(arguments_object),
         undefined_receiver_(undefined_receiver),
         return_targets_(2, zone) {
   }
@@ -2055,7 +2074,7 @@ class HEnterInlined: public HTemplateInstruction<0> {
   }
 
   Variable* arguments_var() { return arguments_var_; }
-  ZoneList<HValue*>* arguments_values() { return arguments_values_; }
+  HArgumentsObject* arguments_object() { return arguments_object_; }
 
   DECLARE_CONCRETE_INSTRUCTION(EnterInlined)
 
@@ -2066,7 +2085,7 @@ class HEnterInlined: public HTemplateInstruction<0> {
   FunctionLiteral* function_;
   InliningKind inlining_kind_;
   Variable* arguments_var_;
-  ZoneList<HValue*>* arguments_values_;
+  HArgumentsObject* arguments_object_;
   bool undefined_receiver_;
   ZoneList<HBasicBlock*> return_targets_;
 };
@@ -2473,14 +2492,14 @@ class HCallNew: public HBinaryCall {
 class HCallNewArray: public HCallNew {
  public:
   HCallNewArray(HValue* context, HValue* constructor, int argument_count,
-              Handle<JSGlobalPropertyCell> type_cell)
+                Handle<Cell> type_cell, ElementsKind elements_kind)
       : HCallNew(context, constructor, argument_count),
-        type_cell_(type_cell) {
-    elements_kind_ = static_cast<ElementsKind>(
-        Smi::cast(type_cell->value())->value());
-  }
+        elements_kind_(elements_kind),
+        type_cell_(type_cell) {}
 
-  Handle<JSGlobalPropertyCell> property_cell() const {
+  virtual void PrintDataTo(StringStream* stream);
+
+  Handle<Cell> property_cell() const {
     return type_cell_;
   }
 
@@ -2490,7 +2509,7 @@ class HCallNewArray: public HCallNew {
 
  private:
   ElementsKind elements_kind_;
-  Handle<JSGlobalPropertyCell> type_cell_;
+  Handle<Cell> type_cell_;
 };
 
 
@@ -2522,29 +2541,6 @@ class HCallRuntime: public HCall<1> {
 };
 
 
-class HFixedArrayBaseLength: public HUnaryOperation {
- public:
-  explicit HFixedArrayBaseLength(HValue* value) : HUnaryOperation(value) {
-    set_type(HType::Smi());
-    set_representation(Representation::Smi());
-    SetFlag(kUseGVN);
-    SetGVNFlag(kDependsOnArrayLengths);
-  }
-
-  virtual Representation RequiredInputRepresentation(int index) {
-    return Representation::Tagged();
-  }
-
-  DECLARE_CONCRETE_INSTRUCTION(FixedArrayBaseLength)
-
- protected:
-  virtual bool DataEquals(HValue* other) { return true; }
-
- private:
-  virtual bool IsDeletable() const { return true; }
-};
-
-
 class HMapEnumLength: public HUnaryOperation {
  public:
   explicit HMapEnumLength(HValue* value) : HUnaryOperation(value) {
@@ -2786,6 +2782,7 @@ class HCheckMaps: public HTemplateInstruction<2> {
     return check_map;
   }
 
+  virtual bool HasEscapingOperandAt(int index) { return false; }
   virtual Representation RequiredInputRepresentation(int index) {
     return Representation::Tagged();
   }
@@ -2937,9 +2934,9 @@ class HCheckInstanceType: public HUnaryOperation {
 };
 
 
-class HCheckNonSmi: public HUnaryOperation {
+class HCheckHeapObject: public HUnaryOperation {
  public:
-  explicit HCheckNonSmi(HValue* value) : HUnaryOperation(value) {
+  explicit HCheckHeapObject(HValue* value) : HUnaryOperation(value) {
     set_representation(Representation::Tagged());
     SetFlag(kUseGVN);
   }
@@ -2956,17 +2953,13 @@ class HCheckNonSmi: public HUnaryOperation {
 
   virtual HValue* Canonicalize() {
     HType value_type = value()->type();
-    if (!value_type.IsUninitialized() &&
-        (value_type.IsHeapNumber() ||
-         value_type.IsString() ||
-         value_type.IsBoolean() ||
-         value_type.IsNonPrimitive())) {
+    if (!value_type.IsUninitialized() && value_type.IsHeapObject()) {
       return NULL;
     }
     return this;
   }
 
-  DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi)
+  DECLARE_CONCRETE_INSTRUCTION(CheckHeapObject)
 
  protected:
   virtual bool DataEquals(HValue* other) { return true; }
@@ -2977,21 +2970,33 @@ class HCheckPrototypeMaps: public HTemplateInstruction<0> {
  public:
   HCheckPrototypeMaps(Handle<JSObject> prototype,
                       Handle<JSObject> holder,
-                      Zone* zone)
+                      Zone* zone,
+                      CompilationInfo* info)
       : prototypes_(2, zone),
         maps_(2, zone),
         first_prototype_unique_id_(),
-        last_prototype_unique_id_() {
+        last_prototype_unique_id_(),
+        can_omit_prototype_maps_(true) {
     SetFlag(kUseGVN);
     SetGVNFlag(kDependsOnMaps);
     // Keep a list of all objects on the prototype chain up to the holder
     // and the expected maps.
     while (true) {
       prototypes_.Add(prototype, zone);
-      maps_.Add(Handle<Map>(prototype->map()), zone);
+      Handle<Map> map(prototype->map());
+      maps_.Add(map, zone);
+      can_omit_prototype_maps_ &= map->CanOmitPrototypeChecks();
       if (prototype.is_identical_to(holder)) break;
       prototype = Handle<JSObject>(JSObject::cast(prototype->GetPrototype()));
     }
+    if (can_omit_prototype_maps_) {
+      // Mark in-flight compilation as dependent on those maps.
+      for (int i = 0; i < maps()->length(); i++) {
+        Handle<Map> map = maps()->at(i);
+        map->AddDependentCompilationInfo(DependentCode::kPrototypeCheckGroup,
+                                         info);
+      }
+    }
   }
 
   ZoneList<Handle<JSObject> >* prototypes() { return &prototypes_; }
@@ -3016,12 +3021,7 @@ class HCheckPrototypeMaps: public HTemplateInstruction<0> {
     last_prototype_unique_id_ = UniqueValueId(prototypes_.last());
   }
 
-  bool CanOmitPrototypeChecks() {
-    for (int i = 0; i < maps()->length(); i++) {
-      if (!maps()->at(i)->CanOmitPrototypeChecks()) return false;
-    }
-    return true;
-  }
+  bool CanOmitPrototypeChecks() { return can_omit_prototype_maps_; }
 
  protected:
   virtual bool DataEquals(HValue* other) {
@@ -3035,6 +3035,7 @@ class HCheckPrototypeMaps: public HTemplateInstruction<0> {
   ZoneList<Handle<Map> > maps_;
   UniqueValueId first_prototype_unique_id_;
   UniqueValueId last_prototype_unique_id_;
+  bool can_omit_prototype_maps_;
 };
 
 
@@ -3056,8 +3057,7 @@ class HPhi: public HValue {
   virtual Representation RepresentationFromInputs();
 
   virtual Range* InferRange(Zone* zone);
-  virtual void InferRepresentation(HInferRepresentation* h_infer);
-  Representation RepresentationFromUseRequirements();
+  virtual void InferRepresentation(HInferRepresentationPhase* h_infer);
   virtual Representation RequiredInputRepresentation(int index) {
     return representation();
   }
@@ -3194,25 +3194,44 @@ class HInductionVariableAnnotation : public HUnaryOperation {
 
 class HArgumentsObject: public HTemplateInstruction<0> {
  public:
-  HArgumentsObject() {
+  HArgumentsObject(int count, Zone* zone) : values_(count, zone) {
     set_representation(Representation::Tagged());
     SetFlag(kIsArguments);
   }
 
+  const ZoneList<HValue*>* arguments_values() const { return &values_; }
+  int arguments_count() const { return values_.length(); }
+
+  void AddArgument(HValue* argument, Zone* zone) {
+    values_.Add(NULL, zone);  // Resize list.
+    SetOperandAt(values_.length() - 1, argument);
+  }
+
+  virtual int OperandCount() { return values_.length(); }
+  virtual HValue* OperandAt(int index) const { return values_[index]; }
+
+  virtual bool HasEscapingOperandAt(int index) { return false; }
   virtual Representation RequiredInputRepresentation(int index) {
     return Representation::None();
   }
 
   DECLARE_CONCRETE_INSTRUCTION(ArgumentsObject)
 
+ protected:
+  virtual void InternalSetOperandAt(int index, HValue* value) {
+    values_[index] = value;
+  }
+
  private:
   virtual bool IsDeletable() const { return true; }
+
+  ZoneList<HValue*> values_;
 };
 
 
 class HConstant: public HTemplateInstruction<0> {
  public:
-  HConstant(Handle<Object> handle, Representation r);
+  HConstant(Handle<Object> handle, Representation r = Representation::None());
   HConstant(int32_t value,
             Representation r = Representation::None(),
             bool is_not_in_new_space = true,
@@ -3461,12 +3480,12 @@ class HBinaryOperation: public HTemplateInstruction<3> {
     return observed_input_representation_[index - 1];
   }
 
-  virtual void InferRepresentation(HInferRepresentation* h_infer);
+  virtual void InferRepresentation(HInferRepresentationPhase* h_infer);
   virtual Representation RepresentationFromInputs();
   virtual void AssumeRepresentation(Representation r);
 
   virtual void UpdateRepresentation(Representation new_rep,
-                                    HInferRepresentation* h_infer,
+                                    HInferRepresentationPhase* h_infer,
                                     const char* reason) {
     // By default, binary operations don't handle Smis.
     if (new_rep.IsSmi()) {
@@ -3678,7 +3697,7 @@ class HBoundsCheck: public HTemplateInstruction<2> {
                                       int scale = 0);
 
   virtual void PrintDataTo(StringStream* stream);
-  virtual void InferRepresentation(HInferRepresentation* h_infer);
+  virtual void InferRepresentation(HInferRepresentationPhase* h_infer);
 
   HValue* index() { return OperandAt(0); }
   HValue* length() { return OperandAt(1); }
@@ -3775,7 +3794,7 @@ class HBitwiseBinaryOperation: public HBinaryOperation {
   }
 
   virtual void UpdateRepresentation(Representation new_rep,
-                                    HInferRepresentation* h_infer,
+                                    HInferRepresentationPhase* h_infer,
                                     const char* reason) {
     // We only generate either int32 or generic tagged bitwise operations.
     if (new_rep.IsSmi() || new_rep.IsDouble()) {
@@ -3910,7 +3929,7 @@ class HCompareIDAndBranch: public HTemplateControlInstruction<2, 2> {
       observed_input_representation_[1] = right;
   }
 
-  virtual void InferRepresentation(HInferRepresentation* h_infer);
+  virtual void InferRepresentation(HInferRepresentationPhase* h_infer);
 
   virtual Representation RequiredInputRepresentation(int index) {
     return representation();
@@ -4432,11 +4451,9 @@ class HMod: public HArithmeticBinaryOperation {
                            HValue* context,
                            HValue* left,
                            HValue* right,
-                           bool has_fixed_right_arg,
-                           int fixed_right_arg_value);
+                           Maybe<int> fixed_right_arg);
 
-  bool has_fixed_right_arg() const { return has_fixed_right_arg_; }
-  int fixed_right_arg_value() const { return fixed_right_arg_value_; }
+  Maybe<int> fixed_right_arg() const { return fixed_right_arg_; }
 
   bool HasPowerOf2Divisor() {
     if (right()->IsConstant() &&
@@ -4463,17 +4480,14 @@ class HMod: public HArithmeticBinaryOperation {
   HMod(HValue* context,
        HValue* left,
        HValue* right,
-       bool has_fixed_right_arg,
-       int fixed_right_arg_value)
+       Maybe<int> fixed_right_arg)
       : HArithmeticBinaryOperation(context, left, right),
-        has_fixed_right_arg_(has_fixed_right_arg),
-        fixed_right_arg_value_(fixed_right_arg_value) {
+        fixed_right_arg_(fixed_right_arg) {
     SetFlag(kCanBeDivByZero);
     SetFlag(kCanOverflow);
   }
 
-  const bool has_fixed_right_arg_;
-  const int fixed_right_arg_value_;
+  const Maybe<int> fixed_right_arg_;
 };
 
 
@@ -4532,7 +4546,7 @@ class HMathMinMax: public HArithmeticBinaryOperation {
     return RequiredInputRepresentation(index);
   }
 
-  virtual void InferRepresentation(HInferRepresentation* h_infer);
+  virtual void InferRepresentation(HInferRepresentationPhase* h_infer);
 
   virtual Representation RepresentationFromInputs() {
     Representation left_rep = left()->representation();
@@ -4824,14 +4838,14 @@ class HUnknownOSRValue: public HTemplateInstruction<0> {
 
 class HLoadGlobalCell: public HTemplateInstruction<0> {
  public:
-  HLoadGlobalCell(Handle<JSGlobalPropertyCell> cell, PropertyDetails details)
+  HLoadGlobalCell(Handle<Cell> cell, PropertyDetails details)
       : cell_(cell), details_(details), unique_id_() {
     set_representation(Representation::Tagged());
     SetFlag(kUseGVN);
     SetGVNFlag(kDependsOnGlobalVars);
   }
 
-  Handle<JSGlobalPropertyCell> cell() const { return cell_; }
+  Handle<Cell> cell() const { return cell_; }
   bool RequiresHoleCheck() const;
 
   virtual void PrintDataTo(StringStream* stream);
@@ -4859,7 +4873,7 @@ class HLoadGlobalCell: public HTemplateInstruction<0> {
  private:
   virtual bool IsDeletable() const { return !RequiresHoleCheck(); }
 
-  Handle<JSGlobalPropertyCell> cell_;
+  Handle<Cell> cell_;
   PropertyDetails details_;
   UniqueValueId unique_id_;
 };
@@ -4898,6 +4912,48 @@ class HLoadGlobalGeneric: public HTemplateInstruction<2> {
 };
 
 
+class HAllocateObject: public HTemplateInstruction<1> {
+ public:
+  HAllocateObject(HValue* context, Handle<JSFunction> constructor)
+      : constructor_(constructor) {
+    SetOperandAt(0, context);
+    set_representation(Representation::Tagged());
+    SetGVNFlag(kChangesNewSpacePromotion);
+    constructor_initial_map_ = constructor->has_initial_map()
+        ? Handle<Map>(constructor->initial_map())
+        : Handle<Map>::null();
+    // If slack tracking finished, the instance size and property counts
+    // remain unchanged so that we can allocate memory for the object.
+    ASSERT(!constructor->shared()->IsInobjectSlackTrackingInProgress());
+  }
+
+  // Maximum instance size for which allocations will be inlined.
+  static const int kMaxSize = 64 * kPointerSize;
+
+  HValue* context() { return OperandAt(0); }
+  Handle<JSFunction> constructor() { return constructor_; }
+  Handle<Map> constructor_initial_map() { return constructor_initial_map_; }
+
+  virtual Representation RequiredInputRepresentation(int index) {
+    return Representation::Tagged();
+  }
+  virtual Handle<Map> GetMonomorphicJSObjectMap() {
+    ASSERT(!constructor_initial_map_.is_null());
+    return constructor_initial_map_;
+  }
+  virtual HType CalculateInferredType();
+
+  DECLARE_CONCRETE_INSTRUCTION(AllocateObject)
+
+ private:
+  // TODO(svenpanne) Might be safe, but leave it out until we know for sure.
+  //  virtual bool IsDeletable() const { return true; }
+
+  Handle<JSFunction> constructor_;
+  Handle<Map> constructor_initial_map_;
+};
+
+
 class HAllocate: public HTemplateInstruction<2> {
  public:
   enum Flags {
@@ -4916,9 +4972,6 @@ class HAllocate: public HTemplateInstruction<2> {
     SetGVNFlag(kChangesNewSpacePromotion);
   }
 
-  // Maximum instance size for which allocations will be inlined.
-  static const int kMaxInlineSize = 64 * kPointerSize;
-
   static Flags DefaultFlags() {
     return CAN_ALLOCATE_IN_NEW_SPACE;
   }
@@ -4943,14 +4996,6 @@ class HAllocate: public HTemplateInstruction<2> {
     }
   }
 
-  virtual Handle<Map> GetMonomorphicJSObjectMap() {
-    return known_initial_map_;
-  }
-
-  void set_known_initial_map(Handle<Map> known_initial_map) {
-    known_initial_map_ = known_initial_map;
-  }
-
   virtual HType CalculateInferredType();
 
   bool CanAllocateInNewSpace() const {
@@ -4985,7 +5030,6 @@ class HAllocate: public HTemplateInstruction<2> {
  private:
   HType type_;
   Flags flags_;
-  Handle<Map> known_initial_map_;
 };
 
 
@@ -5029,6 +5073,7 @@ inline bool ReceiverObjectNeedsWriteBarrier(HValue* object,
         new_space_dominator);
   }
   if (object != new_space_dominator) return true;
+  if (object->IsAllocateObject()) return false;
   if (object->IsAllocate()) {
     return !HAllocate::cast(object)->GuaranteedInNewSpace();
   }
@@ -5039,7 +5084,7 @@ inline bool ReceiverObjectNeedsWriteBarrier(HValue* object,
 class HStoreGlobalCell: public HUnaryOperation {
  public:
   HStoreGlobalCell(HValue* value,
-                   Handle<JSGlobalPropertyCell> cell,
+                   Handle<PropertyCell> cell,
                    PropertyDetails details)
       : HUnaryOperation(value),
         cell_(cell),
@@ -5047,7 +5092,7 @@ class HStoreGlobalCell: public HUnaryOperation {
     SetGVNFlag(kChangesGlobalVars);
   }
 
-  Handle<JSGlobalPropertyCell> cell() const { return cell_; }
+  Handle<PropertyCell> cell() const { return cell_; }
   bool RequiresHoleCheck() {
     return !details_.IsDontDelete() || details_.IsReadOnly();
   }
@@ -5063,7 +5108,7 @@ class HStoreGlobalCell: public HUnaryOperation {
   DECLARE_CONCRETE_INSTRUCTION(StoreGlobalCell)
 
  private:
-  Handle<JSGlobalPropertyCell> cell_;
+  Handle<PropertyCell> cell_;
   PropertyDetails details_;
 };
 
@@ -5369,6 +5414,7 @@ class HLoadNamedField: public HTemplateInstruction<2> {
   HObjectAccess access() const { return access_; }
   Representation field_representation() const { return representation_; }
 
+  virtual bool HasEscapingOperandAt(int index) { return false; }
   virtual Representation RequiredInputRepresentation(int index) {
     return Representation::Tagged();
   }
@@ -5691,6 +5737,7 @@ class HStoreNamedField: public HTemplateInstruction<2> {
                        = Representation::Tagged())
       : access_(access),
         field_representation_(field_representation),
+        transition_(),
         transition_unique_id_(),
         new_space_dominator_(NULL) {
     SetOperandAt(0, obj);
@@ -5700,6 +5747,7 @@ class HStoreNamedField: public HTemplateInstruction<2> {
 
   DECLARE_CONCRETE_INSTRUCTION(StoreNamedField)
 
+  virtual bool HasEscapingOperandAt(int index) { return index == 1; }
   virtual Representation RequiredInputRepresentation(int index) {
     if (FLAG_track_double_fields &&
         index == 1 && field_representation_.IsDouble()) {
@@ -5722,7 +5770,13 @@ class HStoreNamedField: public HTemplateInstruction<2> {
   HObjectAccess access() const { return access_; }
   Handle<Map> transition() const { return transition_; }
   UniqueValueId transition_unique_id() const { return transition_unique_id_; }
-  void set_transition(Handle<Map> map) { transition_ = map; }
+  void SetTransition(Handle<Map> map, CompilationInfo* info) {
+    ASSERT(transition_.is_null());  // Only set once.
+    if (map->CanBeDeprecated()) {
+      map->AddDependentCompilationInfo(DependentCode::kTransitionGroup, info);
+    }
+    transition_ = map;
+  }
   HValue* new_space_dominator() const { return new_space_dominator_; }
 
   bool NeedsWriteBarrier() {
@@ -5799,6 +5853,7 @@ class HStoreKeyed
       : elements_kind_(elements_kind),
       index_offset_(0),
       is_dehoisted_(false),
+      is_uninitialized_(false),
       new_space_dominator_(NULL) {
     SetOperandAt(0, obj);
     SetOperandAt(1, key);
@@ -5826,6 +5881,7 @@ class HStoreKeyed
     }
   }
 
+  virtual bool HasEscapingOperandAt(int index) { return index != 0; }
   virtual Representation RequiredInputRepresentation(int index) {
     // kind_fast:       tagged[int32] = tagged
     // kind_double:     tagged[int32] = double
@@ -5858,6 +5914,9 @@ class HStoreKeyed
 
   virtual Representation observed_input_representation(int index) {
     if (index < 2) return RequiredInputRepresentation(index);
+    if (IsUninitialized()) {
+      return Representation::None();
+    }
     if (IsFastSmiElementsKind(elements_kind())) {
       return Representation::Smi();
     }
@@ -5884,6 +5943,10 @@ class HStoreKeyed
   void SetKey(HValue* key) { SetOperandAt(1, key); }
   bool IsDehoisted() { return is_dehoisted_; }
   void SetDehoisted(bool is_dehoisted) { is_dehoisted_ = is_dehoisted; }
+  bool IsUninitialized() { return is_uninitialized_; }
+  void SetUninitialized(bool is_uninitialized) {
+    is_uninitialized_ = is_uninitialized;
+  }
 
   bool IsConstantHoleStore() {
     return value()->IsConstant() && HConstant::cast(value())->IsTheHole();
@@ -5914,7 +5977,8 @@ class HStoreKeyed
  private:
   ElementsKind elements_kind_;
   uint32_t index_offset_;
-  bool is_dehoisted_;
+  bool is_dehoisted_ : 1;
+  bool is_uninitialized_ : 1;
   HValue* new_space_dominator_;
 };
 
diff --git a/deps/v8/src/hydrogen-osr.cc b/deps/v8/src/hydrogen-osr.cc
new file mode 100644 (file)
index 0000000..19a1c77
--- /dev/null
@@ -0,0 +1,123 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "hydrogen.h"
+#include "hydrogen-osr.h"
+
+namespace v8 {
+namespace internal {
+
+// True iff. we are compiling for OSR and the statement is the entry.
+bool HOsrBuilder::HasOsrEntryAt(IterationStatement* statement) {
+  return statement->OsrEntryId() == builder_->current_info()->osr_ast_id();
+}
+
+
+// Build a new loop header block and set it as the current block.
+HBasicBlock *HOsrBuilder::BuildLoopEntry() {
+  HBasicBlock* loop_entry = builder_->CreateLoopHeaderBlock();
+  builder_->current_block()->Goto(loop_entry);
+  builder_->set_current_block(loop_entry);
+  return loop_entry;
+}
+
+
+HBasicBlock* HOsrBuilder::BuildPossibleOsrLoopEntry(
+    IterationStatement* statement) {
+  // Check if there is an OSR here first.
+  if (!HasOsrEntryAt(statement)) return BuildLoopEntry();
+
+  Zone* zone = builder_->zone();
+  HGraph* graph = builder_->graph();
+
+  // only one OSR point per compile is allowed.
+  ASSERT(graph->osr() == NULL);
+
+  // remember this builder as the one OSR builder in the graph.
+  graph->set_osr(this);
+
+  HBasicBlock* non_osr_entry = graph->CreateBasicBlock();
+  osr_entry_ = graph->CreateBasicBlock();
+  HValue* true_value = graph->GetConstantTrue();
+  HBranch* test = new(zone) HBranch(true_value, non_osr_entry, osr_entry_);
+  builder_->current_block()->Finish(test);
+
+  HBasicBlock* loop_predecessor = graph->CreateBasicBlock();
+  non_osr_entry->Goto(loop_predecessor);
+
+  builder_->set_current_block(osr_entry_);
+  osr_entry_->set_osr_entry();
+  BailoutId osr_entry_id = statement->OsrEntryId();
+
+  HEnvironment *environment = builder_->environment();
+  int first_expression_index = environment->first_expression_index();
+  int length = environment->length();
+  osr_values_ = new(zone) ZoneList<HUnknownOSRValue*>(length, zone);
+
+  for (int i = 0; i < first_expression_index; ++i) {
+    HUnknownOSRValue* osr_value = builder_->Add<HUnknownOSRValue>();
+    environment->Bind(i, osr_value);
+    osr_values_->Add(osr_value, zone);
+  }
+
+  if (first_expression_index != length) {
+    environment->Drop(length - first_expression_index);
+    for (int i = first_expression_index; i < length; ++i) {
+      HUnknownOSRValue* osr_value = builder_->Add<HUnknownOSRValue>();
+      environment->Push(osr_value);
+      osr_values_->Add(osr_value, zone);
+    }
+  }
+
+  builder_->AddSimulate(osr_entry_id);
+  builder_->Add<HOsrEntry>(osr_entry_id);
+  HContext* context = builder_->Add<HContext>();
+  environment->BindContext(context);
+  builder_->current_block()->Goto(loop_predecessor);
+  loop_predecessor->SetJoinId(statement->EntryId());
+  builder_->set_current_block(loop_predecessor);
+
+  // Create the final loop entry
+  osr_loop_entry_ = BuildLoopEntry();
+  return osr_loop_entry_;
+}
+
+
+void HOsrBuilder::FinishGraph() {
+  // do nothing for now.
+}
+
+
+void HOsrBuilder::FinishOsrValues() {
+  const ZoneList<HPhi*>* phis = osr_loop_entry_->phis();
+  for (int j = 0; j < phis->length(); j++) {
+    HPhi* phi = phis->at(j);
+    osr_values_->at(phi->merged_index())->set_incoming_value(phi);
+  }
+}
+
+} }  // namespace v8::internal
diff --git a/deps/v8/src/hydrogen-osr.h b/deps/v8/src/hydrogen-osr.h
new file mode 100644 (file)
index 0000000..0c6b65d
--- /dev/null
@@ -0,0 +1,70 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef V8_HYDROGEN_OSR_H_
+#define V8_HYDROGEN_OSR_H_
+
+#include "hydrogen.h"
+#include "ast.h"
+#include "zone.h"
+
+namespace v8 {
+namespace internal {
+
+// Responsible for building graph parts related to OSR and otherwise
+// setting up the graph to do an OSR compile.
+class HOsrBuilder : public ZoneObject {
+ public:
+  explicit HOsrBuilder(HOptimizedGraphBuilder* builder)
+    : builder_(builder),
+      osr_entry_(NULL),
+      osr_loop_entry_(NULL),
+      osr_values_(NULL) { }
+  // Creates the loop entry block for the given statement, setting up OSR
+  // entries as necessary, and sets the current block to the new block.
+  HBasicBlock* BuildPossibleOsrLoopEntry(IterationStatement* statement);
+
+  // Process the hydrogen graph after it has been completed, performing
+  // any OSR-specific cleanups or changes.
+  void FinishGraph();
+
+  // Process the OSR values and phis after initial graph optimization.
+  void FinishOsrValues();
+
+ private:
+  HBasicBlock* BuildLoopEntry();
+  bool HasOsrEntryAt(IterationStatement* statement);
+
+  HOptimizedGraphBuilder* builder_;
+  HBasicBlock* osr_entry_;
+  HBasicBlock* osr_loop_entry_;
+  ZoneList<HUnknownOSRValue*>* osr_values_;
+};
+
+} }  // namespace v8::internal
+
+#endif  // V8_HYDROGEN_OSR_H_
diff --git a/deps/v8/src/hydrogen-range-analysis.cc b/deps/v8/src/hydrogen-range-analysis.cc
new file mode 100644 (file)
index 0000000..0d4d970
--- /dev/null
@@ -0,0 +1,169 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "hydrogen-range-analysis.h"
+
+namespace v8 {
+namespace internal {
+
+
+void HRangeAnalysisPhase::TraceRange(const char* msg, ...) {
+  if (FLAG_trace_range) {
+    va_list arguments;
+    va_start(arguments, msg);
+    OS::VPrint(msg, arguments);
+    va_end(arguments);
+  }
+}
+
+
+void HRangeAnalysisPhase::Analyze(HBasicBlock* block) {
+  TraceRange("Analyzing block B%d\n", block->block_id());
+
+  int last_changed_range = changed_ranges_.length() - 1;
+
+  // Infer range based on control flow.
+  if (block->predecessors()->length() == 1) {
+    HBasicBlock* pred = block->predecessors()->first();
+    if (pred->end()->IsCompareIDAndBranch()) {
+      InferControlFlowRange(HCompareIDAndBranch::cast(pred->end()), block);
+    }
+  }
+
+  // Process phi instructions.
+  for (int i = 0; i < block->phis()->length(); ++i) {
+    HPhi* phi = block->phis()->at(i);
+    InferRange(phi);
+  }
+
+  // Go through all instructions of the current block.
+  for (HInstructionIterator it(block); !it.Done(); it.Advance()) {
+    InferRange(it.Current());
+  }
+
+  // Continue analysis in all dominated blocks.
+  for (int i = 0; i < block->dominated_blocks()->length(); ++i) {
+    Analyze(block->dominated_blocks()->at(i));
+  }
+
+  RollBackTo(last_changed_range);
+}
+
+
+void HRangeAnalysisPhase::InferControlFlowRange(HCompareIDAndBranch* test,
+                                                HBasicBlock* dest) {
+  ASSERT((test->FirstSuccessor() == dest) == (test->SecondSuccessor() != dest));
+  if (test->representation().IsSmiOrInteger32()) {
+    Token::Value op = test->token();
+    if (test->SecondSuccessor() == dest) {
+      op = Token::NegateCompareOp(op);
+    }
+    Token::Value inverted_op = Token::ReverseCompareOp(op);
+    UpdateControlFlowRange(op, test->left(), test->right());
+    UpdateControlFlowRange(inverted_op, test->right(), test->left());
+  }
+}
+
+
+// We know that value [op] other. Use this information to update the range on
+// value.
+void HRangeAnalysisPhase::UpdateControlFlowRange(Token::Value op,
+                                                 HValue* value,
+                                                 HValue* other) {
+  Range temp_range;
+  Range* range = other->range() != NULL ? other->range() : &temp_range;
+  Range* new_range = NULL;
+
+  TraceRange("Control flow range infer %d %s %d\n",
+             value->id(),
+             Token::Name(op),
+             other->id());
+
+  if (op == Token::EQ || op == Token::EQ_STRICT) {
+    // The same range has to apply for value.
+    new_range = range->Copy(graph()->zone());
+  } else if (op == Token::LT || op == Token::LTE) {
+    new_range = range->CopyClearLower(graph()->zone());
+    if (op == Token::LT) {
+      new_range->AddConstant(-1);
+    }
+  } else if (op == Token::GT || op == Token::GTE) {
+    new_range = range->CopyClearUpper(graph()->zone());
+    if (op == Token::GT) {
+      new_range->AddConstant(1);
+    }
+  }
+
+  if (new_range != NULL && !new_range->IsMostGeneric()) {
+    AddRange(value, new_range);
+  }
+}
+
+
+void HRangeAnalysisPhase::InferRange(HValue* value) {
+  ASSERT(!value->HasRange());
+  if (!value->representation().IsNone()) {
+    value->ComputeInitialRange(graph()->zone());
+    Range* range = value->range();
+    TraceRange("Initial inferred range of %d (%s) set to [%d,%d]\n",
+               value->id(),
+               value->Mnemonic(),
+               range->lower(),
+               range->upper());
+  }
+}
+
+
+void HRangeAnalysisPhase::RollBackTo(int index) {
+  for (int i = index + 1; i < changed_ranges_.length(); ++i) {
+    changed_ranges_[i]->RemoveLastAddedRange();
+  }
+  changed_ranges_.Rewind(index + 1);
+}
+
+
+void HRangeAnalysisPhase::AddRange(HValue* value, Range* range) {
+  Range* original_range = value->range();
+  value->AddNewRange(range, graph()->zone());
+  changed_ranges_.Add(value, zone());
+  Range* new_range = value->range();
+  TraceRange("Updated range of %d set to [%d,%d]\n",
+             value->id(),
+             new_range->lower(),
+             new_range->upper());
+  if (original_range != NULL) {
+    TraceRange("Original range was [%d,%d]\n",
+               original_range->lower(),
+               original_range->upper());
+  }
+  TraceRange("New information was [%d,%d]\n",
+             range->lower(),
+             range->upper());
+}
+
+
+} }  // namespace v8::internal
diff --git a/deps/v8/src/hydrogen-range-analysis.h b/deps/v8/src/hydrogen-range-analysis.h
new file mode 100644 (file)
index 0000000..52ce109
--- /dev/null
@@ -0,0 +1,61 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef V8_HYDROGEN_RANGE_ANALYSIS_H_
+#define V8_HYDROGEN_RANGE_ANALYSIS_H_
+
+#include "hydrogen.h"
+
+namespace v8 {
+namespace internal {
+
+
+class HRangeAnalysisPhase : public HPhase {
+ public:
+  explicit HRangeAnalysisPhase(HGraph* graph)
+      : HPhase("H_Range analysis", graph), changed_ranges_(16, zone()) { }
+
+  void Run() {
+    Analyze(graph()->entry_block());
+  }
+
+ private:
+  void TraceRange(const char* msg, ...);
+  void Analyze(HBasicBlock* block);
+  void InferControlFlowRange(HCompareIDAndBranch* test, HBasicBlock* dest);
+  void UpdateControlFlowRange(Token::Value op, HValue* value, HValue* other);
+  void InferRange(HValue* value);
+  void RollBackTo(int index);
+  void AddRange(HValue* value, Range* range);
+
+  ZoneList<HValue*> changed_ranges_;
+};
+
+
+} }  // namespace v8::internal
+
+#endif  // V8_HYDROGEN_RANGE_ANALYSIS_H_
diff --git a/deps/v8/src/hydrogen-uint32-analysis.cc b/deps/v8/src/hydrogen-uint32-analysis.cc
new file mode 100644 (file)
index 0000000..67219f5
--- /dev/null
@@ -0,0 +1,231 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "hydrogen-uint32-analysis.h"
+
+namespace v8 {
+namespace internal {
+
+
+bool HUint32AnalysisPhase::IsSafeUint32Use(HValue* val, HValue* use) {
+  // Operations that operate on bits are safe.
+  if (use->IsBitwise() ||
+      use->IsShl() ||
+      use->IsSar() ||
+      use->IsShr() ||
+      use->IsBitNot()) {
+    return true;
+  } else if (use->IsChange() || use->IsSimulate()) {
+    // Conversions and deoptimization have special support for unt32.
+    return true;
+  } else if (use->IsStoreKeyed()) {
+    HStoreKeyed* store = HStoreKeyed::cast(use);
+    if (store->is_external()) {
+      // Storing a value into an external integer array is a bit level
+      // operation.
+      if (store->value() == val) {
+        // Clamping or a conversion to double should have beed inserted.
+        ASSERT(store->elements_kind() != EXTERNAL_PIXEL_ELEMENTS);
+        ASSERT(store->elements_kind() != EXTERNAL_FLOAT_ELEMENTS);
+        ASSERT(store->elements_kind() != EXTERNAL_DOUBLE_ELEMENTS);
+        return true;
+      }
+    }
+  }
+
+  return false;
+}
+
+
+// Iterate over all uses and verify that they are uint32 safe: either don't
+// distinguish between int32 and uint32 due to their bitwise nature or
+// have special support for uint32 values.
+// Encountered phis are optimistically treated as safe uint32 uses,
+// marked with kUint32 flag and collected in the phis_ list. A separate
+// pass will be performed later by UnmarkUnsafePhis to clear kUint32 from
+// phis that are not actually uint32-safe (it requires fix point iteration).
+bool HUint32AnalysisPhase::Uint32UsesAreSafe(HValue* uint32val) {
+  bool collect_phi_uses = false;
+  for (HUseIterator it(uint32val->uses()); !it.Done(); it.Advance()) {
+    HValue* use = it.value();
+
+    if (use->IsPhi()) {
+      if (!use->CheckFlag(HInstruction::kUint32)) {
+        // There is a phi use of this value from a phi that is not yet
+        // collected in phis_ array. Separate pass is required.
+        collect_phi_uses = true;
+      }
+
+      // Optimistically treat phis as uint32 safe.
+      continue;
+    }
+
+    if (!IsSafeUint32Use(uint32val, use)) {
+      return false;
+    }
+  }
+
+  if (collect_phi_uses) {
+    for (HUseIterator it(uint32val->uses()); !it.Done(); it.Advance()) {
+      HValue* use = it.value();
+
+      // There is a phi use of this value from a phi that is not yet
+      // collected in phis_ array. Separate pass is required.
+      if (use->IsPhi() && !use->CheckFlag(HInstruction::kUint32)) {
+        use->SetFlag(HInstruction::kUint32);
+        phis_.Add(HPhi::cast(use), zone());
+      }
+    }
+  }
+
+  return true;
+}
+
+
+// Check if all operands to the given phi are marked with kUint32 flag.
+bool HUint32AnalysisPhase::CheckPhiOperands(HPhi* phi) {
+  if (!phi->CheckFlag(HInstruction::kUint32)) {
+    // This phi is not uint32 safe. No need to check operands.
+    return false;
+  }
+
+  for (int j = 0; j < phi->OperandCount(); j++) {
+    HValue* operand = phi->OperandAt(j);
+    if (!operand->CheckFlag(HInstruction::kUint32)) {
+      // Lazily mark constants that fit into uint32 range with kUint32 flag.
+      if (operand->IsInteger32Constant() &&
+          operand->GetInteger32Constant() >= 0) {
+        operand->SetFlag(HInstruction::kUint32);
+        continue;
+      }
+
+      // This phi is not safe, some operands are not uint32 values.
+      return false;
+    }
+  }
+
+  return true;
+}
+
+
+// Remove kUint32 flag from the phi itself and its operands. If any operand
+// was a phi marked with kUint32 place it into a worklist for
+// transitive clearing of kUint32 flag.
+void HUint32AnalysisPhase::UnmarkPhi(HPhi* phi, ZoneList<HPhi*>* worklist) {
+  phi->ClearFlag(HInstruction::kUint32);
+  for (int j = 0; j < phi->OperandCount(); j++) {
+    HValue* operand = phi->OperandAt(j);
+    if (operand->CheckFlag(HInstruction::kUint32)) {
+      operand->ClearFlag(HInstruction::kUint32);
+      if (operand->IsPhi()) {
+        worklist->Add(HPhi::cast(operand), zone());
+      }
+    }
+  }
+}
+
+
+void HUint32AnalysisPhase::UnmarkUnsafePhis() {
+  // No phis were collected. Nothing to do.
+  if (phis_.length() == 0) return;
+
+  // Worklist used to transitively clear kUint32 from phis that
+  // are used as arguments to other phis.
+  ZoneList<HPhi*> worklist(phis_.length(), zone());
+
+  // Phi can be used as a uint32 value if and only if
+  // all its operands are uint32 values and all its
+  // uses are uint32 safe.
+
+  // Iterate over collected phis and unmark those that
+  // are unsafe. When unmarking phi unmark its operands
+  // and add it to the worklist if it is a phi as well.
+  // Phis that are still marked as safe are shifted down
+  // so that all safe phis form a prefix of the phis_ array.
+  int phi_count = 0;
+  for (int i = 0; i < phis_.length(); i++) {
+    HPhi* phi = phis_[i];
+
+    if (CheckPhiOperands(phi) && Uint32UsesAreSafe(phi)) {
+      phis_[phi_count++] = phi;
+    } else {
+      UnmarkPhi(phi, &worklist);
+    }
+  }
+
+  // Now phis array contains only those phis that have safe
+  // non-phi uses. Start transitively clearing kUint32 flag
+  // from phi operands of discovered non-safe phis until
+  // only safe phis are left.
+  while (!worklist.is_empty())  {
+    while (!worklist.is_empty()) {
+      HPhi* phi = worklist.RemoveLast();
+      UnmarkPhi(phi, &worklist);
+    }
+
+    // Check if any operands to safe phis were unmarked
+    // turning a safe phi into unsafe. The same value
+    // can flow into several phis.
+    int new_phi_count = 0;
+    for (int i = 0; i < phi_count; i++) {
+      HPhi* phi = phis_[i];
+
+      if (CheckPhiOperands(phi)) {
+        phis_[new_phi_count++] = phi;
+      } else {
+        UnmarkPhi(phi, &worklist);
+      }
+    }
+    phi_count = new_phi_count;
+  }
+}
+
+
+void HUint32AnalysisPhase::Run() {
+  if (!graph()->has_uint32_instructions()) return;
+
+  ZoneList<HInstruction*>* uint32_instructions = graph()->uint32_instructions();
+  for (int i = 0; i < uint32_instructions->length(); ++i) {
+    // Analyze instruction and mark it with kUint32 if all
+    // its uses are uint32 safe.
+    HInstruction* current = uint32_instructions->at(i);
+    if (current->IsLinked() &&
+        current->representation().IsInteger32() &&
+        Uint32UsesAreSafe(current)) {
+      current->SetFlag(HInstruction::kUint32);
+    }
+  }
+
+  // Some phis might have been optimistically marked with kUint32 flag.
+  // Remove this flag from those phis that are unsafe and propagate
+  // this information transitively potentially clearing kUint32 flag
+  // from some non-phi operations that are used as operands to unsafe phis.
+  UnmarkUnsafePhis();
+}
+
+
+} }  // namespace v8::internal
diff --git a/deps/v8/src/hydrogen-uint32-analysis.h b/deps/v8/src/hydrogen-uint32-analysis.h
new file mode 100644 (file)
index 0000000..59739d1
--- /dev/null
@@ -0,0 +1,59 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef V8_HYDROGEN_UINT32_ANALYSIS_H_
+#define V8_HYDROGEN_UINT32_ANALYSIS_H_
+
+#include "hydrogen.h"
+
+namespace v8 {
+namespace internal {
+
+
+// Discover instructions that can be marked with kUint32 flag allowing
+// them to produce full range uint32 values.
+class HUint32AnalysisPhase : public HPhase {
+ public:
+  explicit HUint32AnalysisPhase(HGraph* graph)
+      : HPhase("H_Compute safe UInt32 operations", graph), phis_(4, zone()) { }
+
+  void Run();
+
+ private:
+  INLINE(bool IsSafeUint32Use(HValue* val, HValue* use));
+  INLINE(bool Uint32UsesAreSafe(HValue* uint32val));
+  INLINE(bool CheckPhiOperands(HPhi* phi));
+  INLINE(void UnmarkPhi(HPhi* phi, ZoneList<HPhi*>* worklist));
+  INLINE(void UnmarkUnsafePhis());
+
+  ZoneList<HPhi*> phis_;
+};
+
+
+} }  // namespace v8::internal
+
+#endif  // V8_HYDROGEN_UINT32_ANALYSIS_H_
index b2badcd..7679f93 100644 (file)
@@ -26,7 +26,6 @@
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 #include "hydrogen.h"
-#include "hydrogen-gvn.h"
 
 #include <algorithm>
 
 #include "full-codegen.h"
 #include "hashmap.h"
 #include "hydrogen-environment-liveness.h"
+#include "hydrogen-escape-analysis.h"
+#include "hydrogen-infer-representation.h"
+#include "hydrogen-gvn.h"
+#include "hydrogen-osr.h"
+#include "hydrogen-range-analysis.h"
+#include "hydrogen-uint32-analysis.h"
 #include "lithium-allocator.h"
 #include "parser.h"
 #include "scopeinfo.h"
@@ -526,7 +531,7 @@ class ReachabilityAnalyzer BASE_EMBEDDED {
 
 
 void HGraph::Verify(bool do_full_verify) const {
-  Heap::RelocationLock(isolate()->heap());
+  Heap::RelocationLock relocation_lock(isolate()->heap());
   AllowHandleDereference allow_deref;
   AllowDeferredHandleDereference allow_deferred_deref;
   for (int i = 0; i < blocks_.length(); i++) {
@@ -709,13 +714,9 @@ HGraphBuilder::IfBuilder::IfBuilder(
 HInstruction* HGraphBuilder::IfBuilder::IfCompare(
     HValue* left,
     HValue* right,
-    Token::Value token,
-    Representation input_representation) {
+    Token::Value token) {
   HCompareIDAndBranch* compare =
       new(zone()) HCompareIDAndBranch(left, right, token);
-  compare->set_observed_input_representation(input_representation,
-                                             input_representation);
-  compare->AssumeRepresentation(input_representation);
   AddCompare(compare);
   return compare;
 }
@@ -807,7 +808,7 @@ void HGraphBuilder::IfBuilder::Then() {
     // so that the graph builder visits it and sees any live range extending
     // constructs within it.
     HConstant* constant_false = builder_->graph()->GetConstantFalse();
-    ToBooleanStub::Types boolean_type = ToBooleanStub::no_types();
+    ToBooleanStub::Types boolean_type = ToBooleanStub::Types();
     boolean_type.Add(ToBooleanStub::BOOLEAN);
     HBranch* branch =
         new(zone()) HBranch(constant_false, first_true_block_,
@@ -967,7 +968,7 @@ void HGraphBuilder::LoopBuilder::EndBody() {
 HGraph* HGraphBuilder::CreateGraph() {
   graph_ = new(zone()) HGraph(info_);
   if (FLAG_hydrogen_stats) isolate()->GetHStatistics()->Initialize(info_);
-  HPhase phase("H_Block building", isolate());
+  CompilationPhase phase("H_Block building", info_);
   set_current_block(graph()->entry_block());
   if (!BuildGraph()) return NULL;
   graph()->FinalizeUniqueValueIds();
@@ -993,18 +994,10 @@ void HGraphBuilder::AddSimulate(BailoutId id,
 }
 
 
-HBoundsCheck* HGraphBuilder::AddBoundsCheck(HValue* index, HValue* length) {
-  HBoundsCheck* result = new(graph()->zone()) HBoundsCheck(index, length);
-  AddInstruction(result);
-  return result;
-}
-
-
 HReturn* HGraphBuilder::AddReturn(HValue* value) {
   HValue* context = environment()->LookupContext();
   int num_parameters = graph()->info()->num_parameters();
-  HValue* params = AddInstruction(new(graph()->zone())
-      HConstant(num_parameters, Representation::Integer32()));
+  HValue* params = Add<HConstant>(num_parameters);
   HReturn* return_instruction = new(graph()->zone())
       HReturn(value, context, params);
   current_block()->FinishExit(return_instruction);
@@ -1028,11 +1021,9 @@ HBasicBlock* HGraphBuilder::CreateLoopHeaderBlock() {
 }
 
 
-HValue* HGraphBuilder::BuildCheckNonSmi(HValue* obj) {
+HValue* HGraphBuilder::BuildCheckHeapObject(HValue* obj) {
   if (obj->type().IsHeapObject()) return obj;
-  HCheckNonSmi* check = new(zone()) HCheckNonSmi(obj);
-  AddInstruction(check);
-  return check;
+  return Add<HCheckHeapObject>(obj);
 }
 
 
@@ -1056,7 +1047,7 @@ HInstruction* HGraphBuilder::BuildExternalArrayElementAccess(
     ASSERT(val != NULL);
     switch (elements_kind) {
       case EXTERNAL_PIXEL_ELEMENTS: {
-        val = AddInstruction(new(zone) HClampToUint8(val));
+        val = Add<HClampToUint8>(val);
         break;
       }
       case EXTERNAL_BYTE_ELEMENTS:
@@ -1143,8 +1134,7 @@ HValue* HGraphBuilder::BuildCheckForCapacityGrow(HValue* object,
   length_checker.IfCompare(length, key, Token::EQ);
   length_checker.Then();
 
-  HValue* current_capacity =
-      AddInstruction(new(zone) HFixedArrayBaseLength(elements));
+  HValue* current_capacity = AddLoadFixedArrayLength(elements);
 
   IfBuilder capacity_checker(this);
 
@@ -1169,7 +1159,6 @@ HValue* HGraphBuilder::BuildCheckForCapacityGrow(HValue* object,
   if (is_js_array) {
     HValue* new_length = AddInstruction(
         HAdd::New(zone, context, length, graph_->GetConstant1()));
-    new_length->AssumeRepresentation(Representation::Integer32());
     new_length->ClearFlag(HValue::kCanOverflow);
 
     Representation representation = IsFastElementsKind(kind)
@@ -1180,7 +1169,7 @@ HValue* HGraphBuilder::BuildCheckForCapacityGrow(HValue* object,
 
   length_checker.Else();
 
-  AddBoundsCheck(key, length);
+  Add<HBoundsCheck>(key, length);
   environment()->Push(elements);
 
   length_checker.End();
@@ -1193,7 +1182,6 @@ HValue* HGraphBuilder::BuildCopyElementsOnWrite(HValue* object,
                                                 HValue* elements,
                                                 ElementsKind kind,
                                                 HValue* length) {
-  Zone* zone = this->zone();
   Heap* heap = isolate()->heap();
 
   IfBuilder cow_checker(this);
@@ -1202,8 +1190,7 @@ HValue* HGraphBuilder::BuildCopyElementsOnWrite(HValue* object,
                            Handle<Map>(heap->fixed_cow_array_map()));
   cow_checker.Then();
 
-  HValue* capacity =
-      AddInstruction(new(zone) HFixedArrayBaseLength(elements));
+  HValue* capacity = AddLoadFixedArrayLength(elements);
 
   HValue* new_elements = BuildGrowElementsCapacity(object, elements,
                                                    kind, length, capacity);
@@ -1258,17 +1245,16 @@ HInstruction* HGraphBuilder::BuildUncheckedMonomorphicElementAccess(
   if (is_js_array) {
     length = AddLoad(object, HObjectAccess::ForArrayLength(), mapcheck,
         Representation::Smi());
-    length->set_type(HType::Smi());
   } else {
-    length = AddInstruction(new(zone) HFixedArrayBaseLength(elements));
+    length = AddLoadFixedArrayLength(elements);
   }
+  length->set_type(HType::Smi());
   HValue* checked_key = NULL;
   if (IsExternalArrayElementsKind(elements_kind)) {
     if (store_mode == STORE_NO_TRANSITION_IGNORE_OUT_OF_BOUNDS) {
       NoObservableSideEffectsScope no_effects(this);
       HLoadExternalArrayPointer* external_elements =
-          new(zone) HLoadExternalArrayPointer(elements);
-      AddInstruction(external_elements);
+          Add<HLoadExternalArrayPointer>(elements);
       IfBuilder length_checker(this);
       length_checker.IfCompare(key, length, Token::LT);
       length_checker.Then();
@@ -1285,10 +1271,9 @@ HInstruction* HGraphBuilder::BuildUncheckedMonomorphicElementAccess(
       return result;
     } else {
       ASSERT(store_mode == STANDARD_STORE);
-      checked_key = AddBoundsCheck(key, length);
+      checked_key = Add<HBoundsCheck>(key, length);
       HLoadExternalArrayPointer* external_elements =
-          new(zone) HLoadExternalArrayPointer(elements);
-      AddInstruction(external_elements);
+          Add<HLoadExternalArrayPointer>(elements);
       return AddInstruction(BuildExternalArrayElementAccess(
           external_elements, checked_key, val, mapcheck,
           elements_kind, is_store));
@@ -1303,8 +1288,7 @@ HInstruction* HGraphBuilder::BuildUncheckedMonomorphicElementAccess(
   // deopt, leaving the backing store in an invalid state.
   if (is_store && IsFastSmiElementsKind(elements_kind) &&
       !val->type().IsSmi()) {
-    val = AddInstruction(new(zone) HForceRepresentation(
-        val, Representation::Smi()));
+    val = Add<HForceRepresentation>(val, Representation::Smi());
   }
 
   if (IsGrowStoreMode(store_mode)) {
@@ -1313,7 +1297,7 @@ HInstruction* HGraphBuilder::BuildUncheckedMonomorphicElementAccess(
                                          length, key, is_js_array);
     checked_key = key;
   } else {
-    checked_key = AddBoundsCheck(key, length);
+    checked_key = Add<HBoundsCheck>(key, length);
 
     if (is_store && (fast_elements || fast_smi_only_elements)) {
       if (store_mode == STORE_NO_TRANSITION_HANDLE_COW) {
@@ -1342,20 +1326,14 @@ HValue* HGraphBuilder::BuildAllocateElements(HValue* context,
 
   int elements_size = IsFastDoubleElementsKind(kind)
       ? kDoubleSize : kPointerSize;
-  HConstant* elements_size_value =
-      new(zone) HConstant(elements_size, Representation::Integer32());
-  AddInstruction(elements_size_value);
+  HConstant* elements_size_value = Add<HConstant>(elements_size);
   HValue* mul = AddInstruction(
                     HMul::New(zone, context, capacity, elements_size_value));
-  mul->AssumeRepresentation(Representation::Integer32());
   mul->ClearFlag(HValue::kCanOverflow);
 
-  HConstant* header_size =
-      new(zone) HConstant(FixedArray::kHeaderSize, Representation::Integer32());
-  AddInstruction(header_size);
+  HConstant* header_size = Add<HConstant>(FixedArray::kHeaderSize);
   HValue* total_size = AddInstruction(
                            HAdd::New(zone, context, mul, header_size));
-  total_size->AssumeRepresentation(Representation::Integer32());
   total_size->ClearFlag(HValue::kCanOverflow);
 
   HAllocate::Flags flags = HAllocate::DefaultFlags(kind);
@@ -1371,10 +1349,7 @@ HValue* HGraphBuilder::BuildAllocateElements(HValue* context,
     }
   }
 
-  HValue* elements =
-      AddInstruction(new(zone) HAllocate(context, total_size,
-                                         HType::JSArray(), flags));
-  return elements;
+  return Add<HAllocate>(context, total_size, HType::JSArray(), flags);
 }
 
 
@@ -1413,10 +1388,7 @@ HInnerAllocatedObject* HGraphBuilder::BuildJSArrayHeader(HValue* array,
   AddStore(array, HObjectAccess::ForMap(), array_map);
 
   HConstant* empty_fixed_array =
-      new(zone()) HConstant(
-          Handle<FixedArray>(isolate()->heap()->empty_fixed_array()),
-          Representation::Tagged());
-  AddInstruction(empty_fixed_array);
+      Add<HConstant>(isolate()->factory()->empty_fixed_array());
 
   HObjectAccess access = HObjectAccess::ForPropertiesPointer();
   AddStore(array, access, empty_fixed_array);
@@ -1433,10 +1405,8 @@ HInnerAllocatedObject* HGraphBuilder::BuildJSArrayHeader(HValue* array,
     elements_location += AllocationSiteInfo::kSize;
   }
 
-  HInnerAllocatedObject* elements = new(zone()) HInnerAllocatedObject(
-      array, elements_location);
-  AddInstruction(elements);
-
+  HInnerAllocatedObject* elements =
+      Add<HInnerAllocatedObject>(array, elements_location);
   AddStore(array, HObjectAccess::ForElementsPointer(), elements);
   return elements;
 }
@@ -1448,26 +1418,30 @@ HLoadNamedField* HGraphBuilder::AddLoadElements(HValue* object,
 }
 
 
+HLoadNamedField* HGraphBuilder::AddLoadFixedArrayLength(HValue* object) {
+  HLoadNamedField* instr = AddLoad(object, HObjectAccess::ForFixedArrayLength(),
+                                   NULL, Representation::Smi());
+  instr->set_type(HType::Smi());
+  return instr;
+}
+
+
 HValue* HGraphBuilder::BuildNewElementsCapacity(HValue* context,
                                                 HValue* old_capacity) {
   Zone* zone = this->zone();
   HValue* half_old_capacity =
       AddInstruction(HShr::New(zone, context, old_capacity,
                                graph_->GetConstant1()));
-  half_old_capacity->AssumeRepresentation(Representation::Integer32());
   half_old_capacity->ClearFlag(HValue::kCanOverflow);
 
   HValue* new_capacity = AddInstruction(
       HAdd::New(zone, context, half_old_capacity, old_capacity));
-  new_capacity->AssumeRepresentation(Representation::Integer32());
   new_capacity->ClearFlag(HValue::kCanOverflow);
 
-  HValue* min_growth =
-      AddInstruction(new(zone) HConstant(16, Representation::Integer32()));
+  HValue* min_growth = Add<HConstant>(16);
 
   new_capacity = AddInstruction(
       HAdd::New(zone, context, new_capacity, min_growth));
-  new_capacity->AssumeRepresentation(Representation::Integer32());
   new_capacity->ClearFlag(HValue::kCanOverflow);
 
   return new_capacity;
@@ -1475,17 +1449,15 @@ HValue* HGraphBuilder::BuildNewElementsCapacity(HValue* context,
 
 
 void HGraphBuilder::BuildNewSpaceArrayCheck(HValue* length, ElementsKind kind) {
-  Zone* zone = this->zone();
   Heap* heap = isolate()->heap();
   int element_size = IsFastDoubleElementsKind(kind) ? kDoubleSize
                                                     : kPointerSize;
   int max_size = heap->MaxRegularSpaceAllocationSize() / element_size;
   max_size -= JSArray::kSize / element_size;
-  HConstant* max_size_constant = new(zone) HConstant(max_size);
-  AddInstruction(max_size_constant);
+  HConstant* max_size_constant = Add<HConstant>(max_size);
   // Since we're forcing Integer32 representation for this HBoundsCheck,
   // there's no need to Smi-check the index.
-  AddInstruction(new(zone) HBoundsCheck(length, max_size_constant));
+  Add<HBoundsCheck>(length, max_size_constant);
 }
 
 
@@ -1521,12 +1493,9 @@ void HGraphBuilder::BuildFillElementsWithHole(HValue* context,
   Factory* factory = isolate()->factory();
 
   double nan_double = FixedDoubleArray::hole_nan_as_double();
-  Zone* zone = this->zone();
   HValue* hole = IsFastSmiOrObjectElementsKind(elements_kind)
-      ? AddInstruction(new(zone) HConstant(factory->the_hole_value(),
-                                           Representation::Tagged()))
-      : AddInstruction(new(zone) HConstant(nan_double,
-                                           Representation::Double()));
+      ? Add<HConstant>(factory->the_hole_value())
+      : Add<HConstant>(nan_double);
 
   // Special loop unfolding case
   static const int kLoopUnfoldLimit = 4;
@@ -1553,15 +1522,15 @@ void HGraphBuilder::BuildFillElementsWithHole(HValue* context,
 
   if (unfold_loop) {
     for (int i = 0; i < initial_capacity; i++) {
-      HInstruction* key = AddInstruction(new(zone) HConstant(i));
-      AddInstruction(new(zone) HStoreKeyed(elements, key, hole, elements_kind));
+      HInstruction* key = Add<HConstant>(i);
+      Add<HStoreKeyed>(elements, key, hole, elements_kind);
     }
   } else {
     LoopBuilder builder(this, context, LoopBuilder::kPostIncrement);
 
     HValue* key = builder.BeginBody(from, to, Token::LT);
 
-    AddInstruction(new(zone) HStoreKeyed(elements, key, hole, elements_kind));
+    Add<HStoreKeyed>(elements, key, hole, elements_kind);
 
     builder.EndBody();
   }
@@ -1591,15 +1560,15 @@ void HGraphBuilder::BuildCopyElements(HValue* context,
 
   HValue* key = builder.BeginBody(graph()->GetConstant0(), length, Token::LT);
 
-  HValue* element =
-      AddInstruction(new(zone()) HLoadKeyed(from_elements, key, NULL,
-                                            from_elements_kind,
-                                            ALLOW_RETURN_HOLE));
+  HValue* element = Add<HLoadKeyed>(from_elements, key,
+                                    static_cast<HValue*>(NULL),
+                                    from_elements_kind,
+                                    ALLOW_RETURN_HOLE);
 
   ElementsKind holey_kind = IsFastSmiElementsKind(to_elements_kind)
       ? FAST_HOLEY_ELEMENTS : to_elements_kind;
-  HInstruction* holey_store = AddInstruction(
-      new(zone()) HStoreKeyed(to_elements, key, element, holey_kind));
+  HInstruction* holey_store = Add<HStoreKeyed>(to_elements, key,
+                                               element, holey_kind);
   // Allow NaN hole values to converted to their tagged counterparts.
   if (IsFastHoleyElementsKind(to_elements_kind)) {
     holey_store->SetFlag(HValue::kAllowUndefinedAsNaN);
@@ -1620,8 +1589,6 @@ HValue* HGraphBuilder::BuildCloneShallowArray(HContext* context,
                                               AllocationSiteMode mode,
                                               ElementsKind kind,
                                               int length) {
-  Zone* zone = this->zone();
-
   NoObservableSideEffectsScope no_effects(this);
 
   // All sizes here are multiples of kPointerSize.
@@ -1639,13 +1606,11 @@ HValue* HGraphBuilder::BuildCloneShallowArray(HContext* context,
   HAllocate::Flags allocate_flags = HAllocate::DefaultFlags(kind);
   // Allocate both the JS array and the elements array in one big
   // allocation. This avoids multiple limit checks.
-  HValue* size_in_bytes =
-      AddInstruction(new(zone) HConstant(size, Representation::Integer32()));
-  HInstruction* object =
-      AddInstruction(new(zone) HAllocate(context,
-                                         size_in_bytes,
-                                         HType::JSObject(),
-                                         allocate_flags));
+  HValue* size_in_bytes = Add<HConstant>(size);
+  HInstruction* object = Add<HAllocate>(context,
+                                        size_in_bytes,
+                                        HType::JSObject(),
+                                        allocate_flags);
 
   // Copy the JS array part.
   for (int i = 0; i < JSArray::kSize; i += kPointerSize) {
@@ -1664,8 +1629,7 @@ HValue* HGraphBuilder::BuildCloneShallowArray(HContext* context,
     // Get hold of the elements array of the boilerplate and setup the
     // elements pointer in the resulting object.
     HValue* boilerplate_elements = AddLoadElements(boilerplate);
-    HValue* object_elements =
-        AddInstruction(new(zone) HInnerAllocatedObject(object, elems_offset));
+    HValue* object_elements = Add<HInnerAllocatedObject>(object, elems_offset);
     AddStore(object, HObjectAccess::ForElementsPointer(), object_elements);
 
     // Copy the elements array header.
@@ -1679,16 +1643,10 @@ HValue* HGraphBuilder::BuildCloneShallowArray(HContext* context,
     // copying loops with constant length up to a given boundary and use this
     // helper here instead.
     for (int i = 0; i < length; i++) {
-      HValue* key_constant = AddInstruction(new(zone) HConstant(i));
-      HInstruction* value =
-          AddInstruction(new(zone) HLoadKeyed(boilerplate_elements,
-                                              key_constant,
-                                              NULL,
-                                              kind));
-      AddInstruction(new(zone) HStoreKeyed(object_elements,
-                                           key_constant,
-                                           value,
-                                           kind));
+      HValue* key_constant = Add<HConstant>(i);
+      HInstruction* value = Add<HLoadKeyed>(boilerplate_elements, key_constant,
+                                            static_cast<HValue*>(NULL), kind);
+      Add<HStoreKeyed>(object_elements, key_constant, value, kind);
     }
   }
 
@@ -1698,39 +1656,35 @@ HValue* HGraphBuilder::BuildCloneShallowArray(HContext* context,
 
 void HGraphBuilder::BuildCompareNil(
     HValue* value,
-    CompareNilICStub::Types types,
-    Handle<Map> map,
+    Handle<Type> type,
     int position,
     HIfContinuation* continuation) {
   IfBuilder if_nil(this, position);
   bool needs_or = false;
-  if (types.Contains(CompareNilICStub::NULL_TYPE)) {
+  if (type->Maybe(Type::Null())) {
     if (needs_or) if_nil.Or();
     if_nil.If<HCompareObjectEqAndBranch>(value, graph()->GetConstantNull());
     needs_or = true;
   }
-  if (types.Contains(CompareNilICStub::UNDEFINED)) {
+  if (type->Maybe(Type::Undefined())) {
     if (needs_or) if_nil.Or();
     if_nil.If<HCompareObjectEqAndBranch>(value,
                                          graph()->GetConstantUndefined());
     needs_or = true;
   }
-  // Handle either undetectable or monomorphic, not both.
-  ASSERT(!types.Contains(CompareNilICStub::UNDETECTABLE) ||
-         !types.Contains(CompareNilICStub::MONOMORPHIC_MAP));
-  if (types.Contains(CompareNilICStub::UNDETECTABLE)) {
+  if (type->Maybe(Type::Undetectable())) {
     if (needs_or) if_nil.Or();
     if_nil.If<HIsUndetectableAndBranch>(value);
   } else {
     if_nil.Then();
     if_nil.Else();
-    if (!map.is_null() && types.Contains(CompareNilICStub::MONOMORPHIC_MAP)) {
-      BuildCheckNonSmi(value);
+    if (type->NumClasses() == 1) {
+      BuildCheckHeapObject(value);
       // For ICs, the map checked below is a sentinel map that gets replaced by
       // the monomorphic map when the code is used as a template to generate a
       // new IC. For optimized functions, there is no sentinel map, the map
       // emitted below is the actual monomorphic map.
-      BuildCheckMap(value, map);
+      BuildCheckMap(value, type->Classes().Current());
     } else {
       if_nil.Deopt();
     }
@@ -1743,9 +1697,8 @@ void HGraphBuilder::BuildCompareNil(
 HValue* HGraphBuilder::BuildCreateAllocationSiteInfo(HValue* previous_object,
                                                      int previous_object_size,
                                                      HValue* payload) {
-  HInnerAllocatedObject* alloc_site = new(zone())
-        HInnerAllocatedObject(previous_object, previous_object_size);
-  AddInstruction(alloc_site);
+  HInnerAllocatedObject* alloc_site = Add<HInnerAllocatedObject>(
+      previous_object, previous_object_size);
   Handle<Map> alloc_site_map(isolate()->heap()->allocation_site_info_map());
   AddStoreMapConstant(alloc_site, alloc_site_map);
   HObjectAccess access = HObjectAccess::ForAllocationSitePayload();
@@ -1756,8 +1709,7 @@ HValue* HGraphBuilder::BuildCreateAllocationSiteInfo(HValue* previous_object,
 
 HInstruction* HGraphBuilder::BuildGetNativeContext(HValue* context) {
   // Get the global context, then the native context
-  HInstruction* global_object = AddInstruction(new(zone())
-      HGlobalObject(context));
+  HInstruction* global_object = Add<HGlobalObject>(context);
   HObjectAccess access = HObjectAccess::ForJSObjectOffset(
       GlobalObject::kNativeContextOffset);
   return AddLoad(global_object, access);
@@ -1766,23 +1718,23 @@ HInstruction* HGraphBuilder::BuildGetNativeContext(HValue* context) {
 
 HInstruction* HGraphBuilder::BuildGetArrayFunction(HValue* context) {
   HInstruction* native_context = BuildGetNativeContext(context);
-  HInstruction* index = AddInstruction(new(zone())
-      HConstant(Context::ARRAY_FUNCTION_INDEX, Representation::Integer32()));
-
-  return AddInstruction(new (zone())
-      HLoadKeyed(native_context, index, NULL, FAST_ELEMENTS));
+  HInstruction* index =
+      Add<HConstant>(static_cast<int32_t>(Context::ARRAY_FUNCTION_INDEX));
+  return Add<HLoadKeyed>(
+      native_context, index, static_cast<HValue*>(NULL), FAST_ELEMENTS);
 }
 
 
 HGraphBuilder::JSArrayBuilder::JSArrayBuilder(HGraphBuilder* builder,
-                                              ElementsKind kind,
-                                              HValue* allocation_site_payload,
-                                              bool disable_allocation_sites) :
+    ElementsKind kind,
+    HValue* allocation_site_payload,
+    HValue* constructor_function,
+    AllocationSiteOverrideMode override_mode) :
         builder_(builder),
         kind_(kind),
         allocation_site_payload_(allocation_site_payload),
-        constructor_function_(NULL) {
-  mode_ = disable_allocation_sites
+        constructor_function_(constructor_function) {
+  mode_ = override_mode == DISABLE_ALLOCATION_SITES
       ? DONT_TRACK_ALLOCATION_SITE
       : AllocationSiteInfo::GetMode(kind);
 }
@@ -1800,26 +1752,35 @@ HGraphBuilder::JSArrayBuilder::JSArrayBuilder(HGraphBuilder* builder,
 
 
 HValue* HGraphBuilder::JSArrayBuilder::EmitMapCode(HValue* context) {
-  HInstruction* native_context = builder()->BuildGetNativeContext(context);
+  if (kind_ == GetInitialFastElementsKind()) {
+    // No need for a context lookup if the kind_ matches the initial
+    // map, because we can just load the map in that case.
+    HObjectAccess access = HObjectAccess::ForPrototypeOrInitialMap();
+    HInstruction* load =
+        builder()->BuildLoadNamedField(constructor_function_,
+                                       access,
+                                       Representation::Tagged());
+    return builder()->AddInstruction(load);
+  }
 
-  HInstruction* index = builder()->AddInstruction(new(zone())
-      HConstant(Context::JS_ARRAY_MAPS_INDEX, Representation::Integer32()));
+  HInstruction* native_context = builder()->BuildGetNativeContext(context);
+  HInstruction* index = builder()->Add<HConstant>(
+      static_cast<int32_t>(Context::JS_ARRAY_MAPS_INDEX));
 
-  HInstruction* map_array = builder()->AddInstruction(new(zone())
-      HLoadKeyed(native_context, index, NULL, FAST_ELEMENTS));
+  HInstruction* map_array = builder()->Add<HLoadKeyed>(
+      native_context, index, static_cast<HValue*>(NULL), FAST_ELEMENTS);
 
-  HInstruction* kind_index = builder()->AddInstruction(new(zone())
-      HConstant(kind_, Representation::Integer32()));
+  HInstruction* kind_index = builder()->Add<HConstant>(kind_);
 
-  return builder()->AddInstruction(new(zone())
-      HLoadKeyed(map_array, kind_index, NULL, FAST_ELEMENTS));
+  return builder()->Add<HLoadKeyed>(
+      map_array, kind_index, static_cast<HValue*>(NULL), FAST_ELEMENTS);
 }
 
 
 HValue* HGraphBuilder::JSArrayBuilder::EmitInternalMapCode() {
   // Find the map near the constructor function
   HObjectAccess access = HObjectAccess::ForPrototypeOrInitialMap();
-  return AddInstruction(
+  return builder()->AddInstruction(
       builder()->BuildLoadNamedField(constructor_function_,
                                      access,
                                      Representation::Tagged()));
@@ -1842,22 +1803,17 @@ HValue* HGraphBuilder::JSArrayBuilder::EstablishAllocationSize(
     base_size += FixedArray::kHeaderSize;
   }
 
-  HInstruction* elements_size_value = new(zone())
-      HConstant(elements_size(), Representation::Integer32());
-  AddInstruction(elements_size_value);
+  HInstruction* elements_size_value =
+      builder()->Add<HConstant>(elements_size());
   HInstruction* mul = HMul::New(zone(), context, length_node,
                                 elements_size_value);
-  mul->AssumeRepresentation(Representation::Integer32());
   mul->ClearFlag(HValue::kCanOverflow);
-  AddInstruction(mul);
+  builder()->AddInstruction(mul);
 
-  HInstruction* base = new(zone()) HConstant(base_size,
-                                             Representation::Integer32());
-  AddInstruction(base);
+  HInstruction* base = builder()->Add<HConstant>(base_size);
   HInstruction* total_size = HAdd::New(zone(), context, base, mul);
-  total_size->AssumeRepresentation(Representation::Integer32());
   total_size->ClearFlag(HValue::kCanOverflow);
-  AddInstruction(total_size);
+  builder()->AddInstruction(total_size);
   return total_size;
 }
 
@@ -1872,18 +1828,13 @@ HValue* HGraphBuilder::JSArrayBuilder::EstablishEmptyArrayAllocationSize() {
       ? FixedDoubleArray::SizeFor(initial_capacity())
       : FixedArray::SizeFor(initial_capacity());
 
-  HConstant* array_size =
-      new(zone()) HConstant(base_size, Representation::Integer32());
-  AddInstruction(array_size);
-  return array_size;
+  return builder()->Add<HConstant>(base_size);
 }
 
 
 HValue* HGraphBuilder::JSArrayBuilder::AllocateEmptyArray() {
   HValue* size_in_bytes = EstablishEmptyArrayAllocationSize();
-  HConstant* capacity =
-      new(zone()) HConstant(initial_capacity(), Representation::Integer32());
-  AddInstruction(capacity);
+  HConstant* capacity = builder()->Add<HConstant>(initial_capacity());
   return AllocateArray(size_in_bytes,
                        capacity,
                        builder()->graph()->GetConstant0(),
@@ -1907,13 +1858,12 @@ HValue* HGraphBuilder::JSArrayBuilder::AllocateArray(HValue* size_in_bytes,
 
   // Allocate (dealing with failure appropriately)
   HAllocate::Flags flags = HAllocate::DefaultFlags(kind_);
-  HAllocate* new_object = new(zone()) HAllocate(context, size_in_bytes,
-                                                HType::JSArray(), flags);
-  AddInstruction(new_object);
+  HAllocate* new_object = builder()->Add<HAllocate>(context, size_in_bytes,
+                                                    HType::JSArray(), flags);
 
   // Fill in the fields: map, properties, length
   HValue* map;
-  if (constructor_function_ != NULL) {
+  if (allocation_site_payload_ == NULL) {
     map = EmitInternalMapCode();
   } else {
     map = EmitMapCode(context);
@@ -1940,10 +1890,7 @@ HStoreNamedField* HGraphBuilder::AddStore(HValue *object,
                                           HObjectAccess access,
                                           HValue *val,
                                           Representation representation) {
-  HStoreNamedField *instr = new(zone())
-      HStoreNamedField(object, access, val, representation);
-  AddInstruction(instr);
-  return instr;
+  return Add<HStoreNamedField>(object, access, val, representation);
 }
 
 
@@ -1951,21 +1898,14 @@ HLoadNamedField* HGraphBuilder::AddLoad(HValue *object,
                                         HObjectAccess access,
                                         HValue *typecheck,
                                         Representation representation) {
-  HLoadNamedField *instr =
-      new(zone()) HLoadNamedField(object, access, typecheck, representation);
-  AddInstruction(instr);
-  return instr;
+  return Add<HLoadNamedField>(object, access, typecheck, representation);
 }
 
 
 HStoreNamedField* HGraphBuilder::AddStoreMapConstant(HValue *object,
                                                      Handle<Map> map) {
-  HValue* constant =
-      AddInstruction(new(zone()) HConstant(map, Representation::Tagged()));
-  HStoreNamedField *instr =
-      new(zone()) HStoreNamedField(object, HObjectAccess::ForMap(), constant);
-  AddInstruction(instr);
-  return instr;
+  return Add<HStoreNamedField>(object, HObjectAccess::ForMap(),
+                               Add<HConstant>(map));
 }
 
 
@@ -1977,7 +1917,8 @@ HOptimizedGraphBuilder::HOptimizedGraphBuilder(CompilationInfo* info)
       break_scope_(NULL),
       inlined_count_(0),
       globals_(10, info->zone()),
-      inline_bailout_(false) {
+      inline_bailout_(false),
+      osr_(new(info->zone()) HOsrBuilder(this)) {
   // This is not initialized in the initializer list because the
   // constructor for the initial state relies on function_state_ == NULL
   // to know it's the initial state.
@@ -2045,6 +1986,7 @@ HGraph::HGraph(CompilationInfo* info)
       values_(16, info->zone()),
       phi_list_(NULL),
       uint32_instructions_(NULL),
+      osr_(NULL),
       info_(info),
       zone_(info->zone()),
       is_recursive_(false),
@@ -2080,10 +2022,8 @@ void HGraph::FinalizeUniqueValueIds() {
   DisallowHeapAllocation no_gc;
   ASSERT(!isolate()->optimizing_compiler_thread()->IsOptimizerThread());
   for (int i = 0; i < blocks()->length(); ++i) {
-    for (HInstruction* instr = blocks()->at(i)->first();
-        instr != NULL;
-        instr = instr->next()) {
-      instr->FinalizeUniqueValueId();
+    for (HInstructionIterator it(blocks()->at(i)); !it.Done(); it.Advance()) {
+      it.Current()->FinalizeUniqueValueId();
     }
   }
 }
@@ -2095,24 +2035,22 @@ void HGraph::Canonicalize() {
   // We must be careful not to set the flag unnecessarily, because GVN
   // cannot identify two instructions when their flag value differs.
   for (int i = 0; i < blocks()->length(); ++i) {
-    HInstruction* instr = blocks()->at(i)->first();
-    while (instr != NULL) {
+    for (HInstructionIterator it(blocks()->at(i)); !it.Done(); it.Advance()) {
+      HInstruction* instr = it.Current();
       if (instr->IsArithmeticBinaryOperation() &&
           instr->representation().IsInteger32() &&
           instr->HasAtLeastOneUseWithFlagAndNoneWithout(
               HInstruction::kTruncatingToInt32)) {
         instr->SetFlag(HInstruction::kAllUsesTruncatingToInt32);
       }
-      instr = instr->next();
     }
   }
   // Perform actual Canonicalization pass.
   for (int i = 0; i < blocks()->length(); ++i) {
-    HInstruction* instr = blocks()->at(i)->first();
-    while (instr != NULL) {
+    for (HInstructionIterator it(blocks()->at(i)); !it.Done(); it.Advance()) {
+      HInstruction* instr = it.Current();
       HValue* value = instr->Canonicalize();
       if (value != instr) instr->DeleteAndReplaceWith(value);
-      instr = instr->next();
     }
   }
 }
@@ -2413,7 +2351,7 @@ class PostorderProcessor : public ZoneObject {
 
 
 void HGraph::OrderBlocks() {
-  HPhase phase("H_Block ordering", isolate());
+  CompilationPhase phase("H_Block ordering", info());
   BitVector visited(blocks_.length(), zone());
 
   ZoneList<HBasicBlock*> reverse_result(8, zone());
@@ -2487,8 +2425,8 @@ void HGraph::NullifyUnreachableInstructions() {
       }
     }
     if (all_predecessors_deoptimizing) nullify = true;
-    for (HInstruction* instr = block->first(); instr != NULL;
-         instr = instr->next()) {
+    for (HInstructionIterator it(block); !it.Done(); it.Advance()) {
+      HInstruction* instr = it.Current();
       // Leave the basic structure of the graph intact.
       if (instr->IsBlockEntry()) continue;
       if (instr->IsControlInstruction()) continue;
@@ -2642,171 +2580,6 @@ void HGraph::InferTypes(ZoneList<HValue*>* worklist) {
 }
 
 
-class HRangeAnalysis BASE_EMBEDDED {
- public:
-  explicit HRangeAnalysis(HGraph* graph) :
-      graph_(graph), zone_(graph->zone()), changed_ranges_(16, zone_) { }
-
-  void Analyze();
-
- private:
-  void TraceRange(const char* msg, ...);
-  void Analyze(HBasicBlock* block);
-  void InferControlFlowRange(HCompareIDAndBranch* test, HBasicBlock* dest);
-  void UpdateControlFlowRange(Token::Value op, HValue* value, HValue* other);
-  void InferRange(HValue* value);
-  void RollBackTo(int index);
-  void AddRange(HValue* value, Range* range);
-
-  HGraph* graph_;
-  Zone* zone_;
-  ZoneList<HValue*> changed_ranges_;
-};
-
-
-void HRangeAnalysis::TraceRange(const char* msg, ...) {
-  if (FLAG_trace_range) {
-    va_list arguments;
-    va_start(arguments, msg);
-    OS::VPrint(msg, arguments);
-    va_end(arguments);
-  }
-}
-
-
-void HRangeAnalysis::Analyze() {
-  HPhase phase("H_Range analysis", graph_);
-  Analyze(graph_->entry_block());
-}
-
-
-void HRangeAnalysis::Analyze(HBasicBlock* block) {
-  TraceRange("Analyzing block B%d\n", block->block_id());
-
-  int last_changed_range = changed_ranges_.length() - 1;
-
-  // Infer range based on control flow.
-  if (block->predecessors()->length() == 1) {
-    HBasicBlock* pred = block->predecessors()->first();
-    if (pred->end()->IsCompareIDAndBranch()) {
-      InferControlFlowRange(HCompareIDAndBranch::cast(pred->end()), block);
-    }
-  }
-
-  // Process phi instructions.
-  for (int i = 0; i < block->phis()->length(); ++i) {
-    HPhi* phi = block->phis()->at(i);
-    InferRange(phi);
-  }
-
-  // Go through all instructions of the current block.
-  HInstruction* instr = block->first();
-  while (instr != block->end()) {
-    InferRange(instr);
-    instr = instr->next();
-  }
-
-  // Continue analysis in all dominated blocks.
-  for (int i = 0; i < block->dominated_blocks()->length(); ++i) {
-    Analyze(block->dominated_blocks()->at(i));
-  }
-
-  RollBackTo(last_changed_range);
-}
-
-
-void HRangeAnalysis::InferControlFlowRange(HCompareIDAndBranch* test,
-                                           HBasicBlock* dest) {
-  ASSERT((test->FirstSuccessor() == dest) == (test->SecondSuccessor() != dest));
-  if (test->representation().IsInteger32()) {
-    Token::Value op = test->token();
-    if (test->SecondSuccessor() == dest) {
-      op = Token::NegateCompareOp(op);
-    }
-    Token::Value inverted_op = Token::ReverseCompareOp(op);
-    UpdateControlFlowRange(op, test->left(), test->right());
-    UpdateControlFlowRange(inverted_op, test->right(), test->left());
-  }
-}
-
-
-// We know that value [op] other. Use this information to update the range on
-// value.
-void HRangeAnalysis::UpdateControlFlowRange(Token::Value op,
-                                            HValue* value,
-                                            HValue* other) {
-  Range temp_range;
-  Range* range = other->range() != NULL ? other->range() : &temp_range;
-  Range* new_range = NULL;
-
-  TraceRange("Control flow range infer %d %s %d\n",
-             value->id(),
-             Token::Name(op),
-             other->id());
-
-  if (op == Token::EQ || op == Token::EQ_STRICT) {
-    // The same range has to apply for value.
-    new_range = range->Copy(zone_);
-  } else if (op == Token::LT || op == Token::LTE) {
-    new_range = range->CopyClearLower(zone_);
-    if (op == Token::LT) {
-      new_range->AddConstant(-1);
-    }
-  } else if (op == Token::GT || op == Token::GTE) {
-    new_range = range->CopyClearUpper(zone_);
-    if (op == Token::GT) {
-      new_range->AddConstant(1);
-    }
-  }
-
-  if (new_range != NULL && !new_range->IsMostGeneric()) {
-    AddRange(value, new_range);
-  }
-}
-
-
-void HRangeAnalysis::InferRange(HValue* value) {
-  ASSERT(!value->HasRange());
-  if (!value->representation().IsNone()) {
-    value->ComputeInitialRange(zone_);
-    Range* range = value->range();
-    TraceRange("Initial inferred range of %d (%s) set to [%d,%d]\n",
-               value->id(),
-               value->Mnemonic(),
-               range->lower(),
-               range->upper());
-  }
-}
-
-
-void HRangeAnalysis::RollBackTo(int index) {
-  for (int i = index + 1; i < changed_ranges_.length(); ++i) {
-    changed_ranges_[i]->RemoveLastAddedRange();
-  }
-  changed_ranges_.Rewind(index + 1);
-}
-
-
-void HRangeAnalysis::AddRange(HValue* value, Range* range) {
-  Range* original_range = value->range();
-  value->AddNewRange(range, zone_);
-  changed_ranges_.Add(value, zone_);
-  Range* new_range = value->range();
-  TraceRange("Updated range of %d set to [%d,%d]\n",
-             value->id(),
-             new_range->lower(),
-             new_range->upper());
-  if (original_range != NULL) {
-    TraceRange("Original range was [%d,%d]\n",
-               original_range->lower(),
-               original_range->upper());
-  }
-  TraceRange("New information was [%d,%d]\n",
-             range->lower(),
-             range->upper());
-}
-
-
 class HStackCheckEliminator BASE_EMBEDDED {
  public:
   explicit HStackCheckEliminator(HGraph* graph) : graph_(graph) { }
@@ -2830,13 +2603,11 @@ void HStackCheckEliminator::Process() {
       HBasicBlock* back_edge = block->loop_information()->GetLastBackEdge();
       HBasicBlock* dominator = back_edge;
       while (true) {
-        HInstruction* instr = dominator->first();
-        while (instr != NULL) {
-          if (instr->IsCall()) {
+        for (HInstructionIterator it(dominator); !it.Done(); it.Advance()) {
+          if (it.Current()->IsCall()) {
             block->loop_information()->stack_check()->Eliminate();
             break;
           }
-          instr = instr->next();
         }
 
         // Done when the loop header is processed.
@@ -2850,145 +2621,6 @@ void HStackCheckEliminator::Process() {
 }
 
 
-void HInferRepresentation::AddToWorklist(HValue* current) {
-  if (current->representation().IsTagged()) return;
-  if (!current->CheckFlag(HValue::kFlexibleRepresentation)) return;
-  if (in_worklist_.Contains(current->id())) return;
-  worklist_.Add(current, zone());
-  in_worklist_.Add(current->id());
-}
-
-
-void HInferRepresentation::Analyze() {
-  HPhase phase("H_Infer representations", graph_);
-
-  // (1) Initialize bit vectors and count real uses. Each phi gets a
-  // bit-vector of length <number of phis>.
-  const ZoneList<HPhi*>* phi_list = graph_->phi_list();
-  int phi_count = phi_list->length();
-  ZoneList<BitVector*> connected_phis(phi_count, graph_->zone());
-  for (int i = 0; i < phi_count; ++i) {
-    phi_list->at(i)->InitRealUses(i);
-    BitVector* connected_set = new(zone()) BitVector(phi_count, graph_->zone());
-    connected_set->Add(i);
-    connected_phis.Add(connected_set, zone());
-  }
-
-  // (2) Do a fixed point iteration to find the set of connected phis.  A
-  // phi is connected to another phi if its value is used either directly or
-  // indirectly through a transitive closure of the def-use relation.
-  bool change = true;
-  while (change) {
-    change = false;
-    // We normally have far more "forward edges" than "backward edges",
-    // so we terminate faster when we walk backwards.
-    for (int i = phi_count - 1; i >= 0; --i) {
-      HPhi* phi = phi_list->at(i);
-      for (HUseIterator it(phi->uses()); !it.Done(); it.Advance()) {
-        HValue* use = it.value();
-        if (use->IsPhi()) {
-          int id = HPhi::cast(use)->phi_id();
-          if (connected_phis[i]->UnionIsChanged(*connected_phis[id]))
-            change = true;
-        }
-      }
-    }
-  }
-
-  // Set truncation flags for groups of connected phis. This is a conservative
-  // approximation; the flag will be properly re-computed after representations
-  // have been determined.
-  if (phi_count > 0) {
-    BitVector* done = new(zone()) BitVector(phi_count, graph_->zone());
-    for (int i = 0; i < phi_count; ++i) {
-      if (done->Contains(i)) continue;
-
-      // Check if all uses of all connected phis in this group are truncating.
-      bool all_uses_everywhere_truncating = true;
-      for (BitVector::Iterator it(connected_phis.at(i));
-           !it.Done();
-           it.Advance()) {
-        int index = it.Current();
-        all_uses_everywhere_truncating &=
-            phi_list->at(index)->CheckFlag(HInstruction::kTruncatingToInt32);
-        done->Add(index);
-      }
-      if (all_uses_everywhere_truncating) {
-        continue;  // Great, nothing to do.
-      }
-      // Clear truncation flag of this group of connected phis.
-      for (BitVector::Iterator it(connected_phis.at(i));
-           !it.Done();
-           it.Advance()) {
-        int index = it.Current();
-        phi_list->at(index)->ClearFlag(HInstruction::kTruncatingToInt32);
-      }
-    }
-  }
-
-  // Simplify constant phi inputs where possible.
-  // This step uses kTruncatingToInt32 flags of phis.
-  for (int i = 0; i < phi_count; ++i) {
-    phi_list->at(i)->SimplifyConstantInputs();
-  }
-
-  // Use the phi reachability information from step 2 to
-  // sum up the non-phi use counts of all connected phis.
-  for (int i = 0; i < phi_count; ++i) {
-    HPhi* phi = phi_list->at(i);
-    for (BitVector::Iterator it(connected_phis.at(i));
-         !it.Done();
-         it.Advance()) {
-      int index = it.Current();
-      HPhi* it_use = phi_list->at(index);
-      if (index != i) phi->AddNonPhiUsesFrom(it_use);  // Don't count twice.
-    }
-  }
-
-  // Initialize work list
-  for (int i = 0; i < graph_->blocks()->length(); ++i) {
-    HBasicBlock* block = graph_->blocks()->at(i);
-    const ZoneList<HPhi*>* phis = block->phis();
-    for (int j = 0; j < phis->length(); ++j) {
-      AddToWorklist(phis->at(j));
-    }
-
-    HInstruction* current = block->first();
-    while (current != NULL) {
-      AddToWorklist(current);
-      current = current->next();
-    }
-  }
-
-  // Do a fixed point iteration, trying to improve representations
-  while (!worklist_.is_empty()) {
-    HValue* current = worklist_.RemoveLast();
-    in_worklist_.Remove(current->id());
-    current->InferRepresentation(this);
-  }
-
-  // Lastly: any instruction that we don't have representation information
-  // for defaults to Tagged.
-  for (int i = 0; i < graph_->blocks()->length(); ++i) {
-    HBasicBlock* block = graph_->blocks()->at(i);
-    const ZoneList<HPhi*>* phis = block->phis();
-    for (int j = 0; j < phis->length(); ++j) {
-      HPhi* phi = phis->at(j);
-      if (phi->representation().IsNone()) {
-        phi->ChangeRepresentation(Representation::Tagged());
-      }
-    }
-    for (HInstruction* current = block->first();
-         current != NULL; current = current->next()) {
-      if (current->representation().IsNone() &&
-          current->CheckFlag(HInstruction::kFlexibleRepresentation)) {
-        current->ChangeRepresentation(Representation::Tagged());
-      }
-    }
-  }
-}
-
-
 void HGraph::MergeRemovableSimulates() {
   HPhase phase("H_Merge removable simulates", this);
   ZoneList<HSimulate*> mergelist(2, zone());
@@ -2999,8 +2631,8 @@ void HGraph::MergeRemovableSimulates() {
     // Nasty heuristic: Never remove the first simulate in a block. This
     // just so happens to have a beneficial effect on register allocation.
     bool first = true;
-    for (HInstruction* current = block->first();
-         current != NULL; current = current->next()) {
+    for (HInstructionIterator it(block); !it.Done(); it.Advance()) {
+      HInstruction* current = it.Current();
       if (current->IsLeaveInlined()) {
         // Never fold simulates from inlined environments into simulates
         // in the outer environment.
@@ -3014,6 +2646,15 @@ void HGraph::MergeRemovableSimulates() {
         }
         continue;
       }
+      if (current->IsReturn()) {
+        // Drop mergeable simulates in the list. This is safe because
+        // simulates after instructions with side effects are never added
+        // to the merge list.
+        while (!mergelist.is_empty()) {
+          mergelist.RemoveLast()->DeleteAndReplaceWith(NULL);
+        }
+        continue;
+      }
       // Skip the non-simulates and the first simulate.
       if (!current->IsSimulate()) continue;
       if (first) {
@@ -3058,10 +2699,8 @@ void HGraph::InitializeInferredTypes(int from_inclusive, int to_inclusive) {
       phis->at(j)->UpdateInferredType();
     }
 
-    HInstruction* current = block->first();
-    while (current != NULL) {
-      current->UpdateInferredType();
-      current = current->next();
+    for (HInstructionIterator it(block); !it.Done(); it.Advance()) {
+      it.Current()->UpdateInferredType();
     }
 
     if (block->IsLoopHeader()) {
@@ -3289,235 +2928,12 @@ void HGraph::MarkDeoptimizeOnUndefined() {
 }
 
 
-// Discover instructions that can be marked with kUint32 flag allowing
-// them to produce full range uint32 values.
-class Uint32Analysis BASE_EMBEDDED {
- public:
-  explicit Uint32Analysis(Zone* zone) : zone_(zone), phis_(4, zone) { }
-
-  void Analyze(HInstruction* current);
-
-  void UnmarkUnsafePhis();
-
- private:
-  bool IsSafeUint32Use(HValue* val, HValue* use);
-  bool Uint32UsesAreSafe(HValue* uint32val);
-  bool CheckPhiOperands(HPhi* phi);
-  void UnmarkPhi(HPhi* phi, ZoneList<HPhi*>* worklist);
-
-  Zone* zone_;
-  ZoneList<HPhi*> phis_;
-};
-
-
-bool Uint32Analysis::IsSafeUint32Use(HValue* val, HValue* use) {
-  // Operations that operatate on bits are safe.
-  if (use->IsBitwise() ||
-      use->IsShl() ||
-      use->IsSar() ||
-      use->IsShr() ||
-      use->IsBitNot()) {
-    return true;
-  } else if (use->IsChange() || use->IsSimulate()) {
-    // Conversions and deoptimization have special support for unt32.
-    return true;
-  } else if (use->IsStoreKeyed()) {
-    HStoreKeyed* store = HStoreKeyed::cast(use);
-    if (store->is_external()) {
-      // Storing a value into an external integer array is a bit level
-      // operation.
-      if (store->value() == val) {
-        // Clamping or a conversion to double should have beed inserted.
-        ASSERT(store->elements_kind() != EXTERNAL_PIXEL_ELEMENTS);
-        ASSERT(store->elements_kind() != EXTERNAL_FLOAT_ELEMENTS);
-        ASSERT(store->elements_kind() != EXTERNAL_DOUBLE_ELEMENTS);
-        return true;
-      }
-    }
-  }
-
-  return false;
-}
-
-
-// Iterate over all uses and verify that they are uint32 safe: either don't
-// distinguish between int32 and uint32 due to their bitwise nature or
-// have special support for uint32 values.
-// Encountered phis are optimisitically treated as safe uint32 uses,
-// marked with kUint32 flag and collected in the phis_ list. A separate
-// path will be performed later by UnmarkUnsafePhis to clear kUint32 from
-// phis that are not actually uint32-safe (it requries fix point iteration).
-bool Uint32Analysis::Uint32UsesAreSafe(HValue* uint32val) {
-  bool collect_phi_uses = false;
-  for (HUseIterator it(uint32val->uses()); !it.Done(); it.Advance()) {
-    HValue* use = it.value();
-
-    if (use->IsPhi()) {
-      if (!use->CheckFlag(HInstruction::kUint32)) {
-        // There is a phi use of this value from a phis that is not yet
-        // collected in phis_ array. Separate pass is required.
-        collect_phi_uses = true;
-      }
-
-      // Optimistically treat phis as uint32 safe.
-      continue;
-    }
-
-    if (!IsSafeUint32Use(uint32val, use)) {
-      return false;
-    }
-  }
-
-  if (collect_phi_uses) {
-    for (HUseIterator it(uint32val->uses()); !it.Done(); it.Advance()) {
-      HValue* use = it.value();
-
-      // There is a phi use of this value from a phis that is not yet
-      // collected in phis_ array. Separate pass is required.
-      if (use->IsPhi() && !use->CheckFlag(HInstruction::kUint32)) {
-        use->SetFlag(HInstruction::kUint32);
-        phis_.Add(HPhi::cast(use), zone_);
-      }
-    }
-  }
-
-  return true;
-}
-
-
-// Analyze instruction and mark it with kUint32 if all its uses are uint32
-// safe.
-void Uint32Analysis::Analyze(HInstruction* current) {
-  if (Uint32UsesAreSafe(current)) current->SetFlag(HInstruction::kUint32);
-}
-
-
-// Check if all operands to the given phi are marked with kUint32 flag.
-bool Uint32Analysis::CheckPhiOperands(HPhi* phi) {
-  if (!phi->CheckFlag(HInstruction::kUint32)) {
-    // This phi is not uint32 safe. No need to check operands.
-    return false;
-  }
-
-  for (int j = 0; j < phi->OperandCount(); j++) {
-    HValue* operand = phi->OperandAt(j);
-    if (!operand->CheckFlag(HInstruction::kUint32)) {
-      // Lazyly mark constants that fit into uint32 range with kUint32 flag.
-      if (operand->IsInteger32Constant() &&
-          operand->GetInteger32Constant() >= 0) {
-        operand->SetFlag(HInstruction::kUint32);
-        continue;
-      }
-
-      // This phi is not safe, some operands are not uint32 values.
-      return false;
-    }
-  }
-
-  return true;
-}
-
-
-// Remove kUint32 flag from the phi itself and its operands. If any operand
-// was a phi marked with kUint32 place it into a worklist for
-// transitive clearing of kUint32 flag.
-void Uint32Analysis::UnmarkPhi(HPhi* phi, ZoneList<HPhi*>* worklist) {
-  phi->ClearFlag(HInstruction::kUint32);
-  for (int j = 0; j < phi->OperandCount(); j++) {
-    HValue* operand = phi->OperandAt(j);
-    if (operand->CheckFlag(HInstruction::kUint32)) {
-      operand->ClearFlag(HInstruction::kUint32);
-      if (operand->IsPhi()) {
-        worklist->Add(HPhi::cast(operand), zone_);
-      }
-    }
-  }
-}
-
-
-void Uint32Analysis::UnmarkUnsafePhis() {
-  // No phis were collected. Nothing to do.
-  if (phis_.length() == 0) return;
-
-  // Worklist used to transitively clear kUint32 from phis that
-  // are used as arguments to other phis.
-  ZoneList<HPhi*> worklist(phis_.length(), zone_);
-
-  // Phi can be used as a uint32 value if and only if
-  // all its operands are uint32 values and all its
-  // uses are uint32 safe.
-
-  // Iterate over collected phis and unmark those that
-  // are unsafe. When unmarking phi unmark its operands
-  // and add it to the worklist if it is a phi as well.
-  // Phis that are still marked as safe are shifted down
-  // so that all safe phis form a prefix of the phis_ array.
-  int phi_count = 0;
-  for (int i = 0; i < phis_.length(); i++) {
-    HPhi* phi = phis_[i];
-
-    if (CheckPhiOperands(phi) && Uint32UsesAreSafe(phi)) {
-      phis_[phi_count++] = phi;
-    } else {
-      UnmarkPhi(phi, &worklist);
-    }
-  }
-
-  // Now phis array contains only those phis that have safe
-  // non-phi uses. Start transitively clearing kUint32 flag
-  // from phi operands of discovered non-safe phies until
-  // only safe phies are left.
-  while (!worklist.is_empty())  {
-    while (!worklist.is_empty()) {
-      HPhi* phi = worklist.RemoveLast();
-      UnmarkPhi(phi, &worklist);
-    }
-
-    // Check if any operands to safe phies were unmarked
-    // turning a safe phi into unsafe. The same value
-    // can flow into several phis.
-    int new_phi_count = 0;
-    for (int i = 0; i < phi_count; i++) {
-      HPhi* phi = phis_[i];
-
-      if (CheckPhiOperands(phi)) {
-        phis_[new_phi_count++] = phi;
-      } else {
-        UnmarkPhi(phi, &worklist);
-      }
-    }
-    phi_count = new_phi_count;
-  }
-}
-
-
-void HGraph::ComputeSafeUint32Operations() {
-  HPhase phase("H_Compute safe UInt32 operations", this);
-  if (uint32_instructions_ == NULL) return;
-
-  Uint32Analysis analysis(zone());
-  for (int i = 0; i < uint32_instructions_->length(); ++i) {
-    HInstruction* current = uint32_instructions_->at(i);
-    if (current->IsLinked() && current->representation().IsInteger32()) {
-      analysis.Analyze(current);
-    }
-  }
-
-  // Some phis might have been optimistically marked with kUint32 flag.
-  // Remove this flag from those phis that are unsafe and propagate
-  // this information transitively potentially clearing kUint32 flag
-  // from some non-phi operations that are used as operands to unsafe phis.
-  analysis.UnmarkUnsafePhis();
-}
-
-
 void HGraph::ComputeMinusZeroChecks() {
   HPhase phase("H_Compute minus zero checks", this);
   BitVector visited(GetMaximumValueID(), zone());
   for (int i = 0; i < blocks_.length(); ++i) {
-    for (HInstruction* current = blocks_[i]->first();
-         current != NULL;
-         current = current->next()) {
+    for (HInstructionIterator it(blocks_[i]); !it.Done(); it.Advance()) {
+      HInstruction* current = it.Current();
       if (current->IsChange()) {
         HChange* change = HChange::cast(current);
         // Propagate flags for negative zero checks upwards from conversions
@@ -3550,6 +2966,7 @@ FunctionState::FunctionState(HOptimizedGraphBuilder* owner,
       function_return_(NULL),
       test_context_(NULL),
       entry_(NULL),
+      arguments_object_(NULL),
       arguments_elements_(NULL),
       outer_(owner->function_state()) {
   if (outer_ != NULL) {
@@ -3822,8 +3239,15 @@ void TestContext::BuildBranch(HValue* value) {
   } while (false)
 
 
+#define CHECK_ALIVE_OR_RETURN(call, value)                            \
+  do {                                                                \
+    call;                                                             \
+    if (HasStackOverflow() || current_block() == NULL) return value;  \
+  } while (false)
+
+
 void HOptimizedGraphBuilder::Bailout(const char* reason) {
-  info()->set_bailout_reason(reason);
+  current_info()->set_bailout_reason(reason);
   SetStackOverflow();
 }
 
@@ -3859,7 +3283,7 @@ void HOptimizedGraphBuilder::VisitForControl(Expression* expr,
 
 void HOptimizedGraphBuilder::VisitArgument(Expression* expr) {
   CHECK_ALIVE(VisitForValue(expr));
-  Push(AddInstruction(new(zone()) HPushArgument(Pop())));
+  Push(Add<HPushArgument>(Pop()));
 }
 
 
@@ -3880,11 +3304,11 @@ void HOptimizedGraphBuilder::VisitExpressions(
 
 
 bool HOptimizedGraphBuilder::BuildGraph() {
-  if (info()->function()->is_generator()) {
+  if (current_info()->function()->is_generator()) {
     Bailout("function is a generator");
     return false;
   }
-  Scope* scope = info()->scope();
+  Scope* scope = current_info()->scope();
   if (scope->HasIllegalRedeclaration()) {
     Bailout("function with illegal redeclaration");
     return false;
@@ -3925,10 +3349,9 @@ bool HOptimizedGraphBuilder::BuildGraph() {
   AddSimulate(BailoutId::Declarations());
 
   HValue* context = environment()->LookupContext();
-  AddInstruction(
-      new(zone()) HStackCheck(context, HStackCheck::kFunctionEntry));
+  Add<HStackCheck>(context, HStackCheck::kFunctionEntry);
 
-  VisitStatements(info()->function()->body());
+  VisitStatements(current_info()->function()->body());
   if (HasStackOverflow()) return false;
 
   if (current_block() != NULL) {
@@ -3940,7 +3363,7 @@ bool HOptimizedGraphBuilder::BuildGraph() {
   // last time this function was compiled, then this recompile is likely not
   // due to missing/inadequate type feedback, but rather too aggressive
   // optimization. Disable optimistic LICM in that case.
-  Handle<Code> unoptimized_code(info()->shared_info()->code());
+  Handle<Code> unoptimized_code(current_info()->shared_info()->code());
   ASSERT(unoptimized_code->kind() == Code::FUNCTION);
   Handle<TypeFeedbackInfo> type_info(
       TypeFeedbackInfo::cast(unoptimized_code->type_feedback_info()));
@@ -3950,22 +3373,10 @@ bool HOptimizedGraphBuilder::BuildGraph() {
       !type_info->matches_inlined_type_change_checksum(composite_checksum));
   type_info->set_inlined_type_change_checksum(composite_checksum);
 
-  return true;
-}
+  // Perform any necessary OSR-specific cleanups or changes to the graph.
+  osr_->FinishGraph();
 
-
-// Perform common subexpression elimination and loop-invariant code motion.
-void HGraph::GlobalValueNumbering() {
-  HPhase phase("H_Global value numbering", this);
-  HGlobalValueNumberer gvn(this, info());
-  bool removed_side_effects = gvn.Analyze();
-  // Trigger a second analysis pass to further eliminate duplicate values that
-  // could only be discovered by removing side-effect-generating instructions
-  // during the first pass.
-  if (FLAG_smi_only_arrays && removed_side_effects) {
-    removed_side_effects = gvn.Analyze();
-    ASSERT(!removed_side_effects);
-  }
+  return true;
 }
 
 
@@ -3985,9 +3396,8 @@ bool HGraph::Optimize(SmartArrayPointer<char>* bailout_reason) {
   Verify(true);
 #endif
 
-  if (FLAG_analyze_environment_liveness) {
-    EnvironmentSlotLivenessAnalyzer esla(this);
-    esla.AnalyzeAndTrim();
+  if (FLAG_analyze_environment_liveness && maximum_environment_size() != 0) {
+    Run<HEnvironmentLivenessAnalysisPhase>();
   }
 
   PropagateDeoptimizingMark();
@@ -4009,16 +3419,9 @@ bool HGraph::Optimize(SmartArrayPointer<char>* bailout_reason) {
   }
   CollectPhis();
 
-  if (has_osr_loop_entry()) {
-    const ZoneList<HPhi*>* phis = osr_loop_entry()->phis();
-    for (int j = 0; j < phis->length(); j++) {
-      HPhi* phi = phis->at(j);
-      osr_values()->at(phi->merged_index())->set_incoming_value(phi);
-    }
-  }
+  if (has_osr()) osr()->FinishOsrValues();
 
-  HInferRepresentation rep(this);
-  rep.Analyze();
+  Run<HInferRepresentationPhase>();
 
   // Remove HSimulate instructions that have turned out not to be needed
   // after all by folding them into the following HSimulate.
@@ -4033,16 +3436,16 @@ bool HGraph::Optimize(SmartArrayPointer<char>* bailout_reason) {
   // Must be performed before canonicalization to ensure that Canonicalize
   // will not remove semantically meaningful ToInt32 operations e.g. BIT_OR with
   // zero.
-  if (FLAG_opt_safe_uint32_operations) ComputeSafeUint32Operations();
+  if (FLAG_opt_safe_uint32_operations) Run<HUint32AnalysisPhase>();
 
   if (FLAG_use_canonicalizing) Canonicalize();
 
-  if (FLAG_use_gvn) GlobalValueNumbering();
+  if (FLAG_use_escape_analysis) Run<HEscapeAnalysisPhase>();
+
+  if (FLAG_use_gvn) Run<HGlobalValueNumberingPhase>();
+
+  if (FLAG_use_range) Run<HRangeAnalysisPhase>();
 
-  if (FLAG_use_range) {
-    HRangeAnalysis rangeAnalysis(this);
-    rangeAnalysis.Analyze();
-  }
   ComputeMinusZeroChecks();
 
   // Eliminate redundant stack checks on backwards branches.
@@ -4073,7 +3476,8 @@ void HGraph::SetupInformativeDefinitionsInBlock(HBasicBlock* block) {
     ASSERT(!phi->IsInformativeDefinition());
   }
 
-  for (HInstruction* i = block->first(); i != NULL; i = i->next()) {
+  for (HInstructionIterator it(block); !it.Done(); it.Advance()) {
+    HInstruction* i = it.Current();
     i->AddInformativeDefinitions();
     i->SetFlag(HValue::kIDefsProcessingDone);
     i->UpdateRedefinedUsesWhileSettingUpInformativeDefinitions();
@@ -4091,7 +3495,8 @@ void HGraph::SetupInformativeDefinitionsRecursively(HBasicBlock* block) {
     SetupInformativeDefinitionsRecursively(block->dominated_blocks()->at(i));
   }
 
-  for (HInstruction* i = block->first(); i != NULL; i = i->next()) {
+  for (HInstructionIterator it(block); !it.Done(); it.Advance()) {
+    HInstruction* i = it.Current();
     if (i->IsBoundsCheck()) {
       HBoundsCheck* check = HBoundsCheck::cast(i);
       check->ApplyIndexChange();
@@ -4394,7 +3799,8 @@ void HGraph::EliminateRedundantBoundsChecks(HBasicBlock* bb,
                                             BoundsCheckTable* table) {
   BoundsCheckBbData* bb_data_list = NULL;
 
-  for (HInstruction* i = bb->first(); i != NULL; i = i->next()) {
+  for (HInstructionIterator it(bb); !it.Done(); it.Advance()) {
+    HInstruction* i = it.Current();
     if (!i->IsBoundsCheck()) continue;
 
     HBoundsCheck* check = HBoundsCheck::cast(i);
@@ -4516,9 +3922,8 @@ static void DehoistArrayIndex(ArrayInstructionInterface* array_operation) {
 void HGraph::DehoistSimpleArrayIndexComputations() {
   HPhase phase("H_Dehoist index computations", this);
   for (int i = 0; i < blocks()->length(); ++i) {
-    for (HInstruction* instr = blocks()->at(i)->first();
-        instr != NULL;
-        instr = instr->next()) {
+    for (HInstructionIterator it(blocks()->at(i)); !it.Done(); it.Advance()) {
+      HInstruction* instr = it.Current();
       ArrayInstructionInterface* array_instruction = NULL;
       if (instr->IsLoadKeyed()) {
         HLoadKeyed* op = HLoadKeyed::cast(instr);
@@ -4548,9 +3953,8 @@ void HGraph::MarkLiveInstructions() {
   // Mark initial root instructions for dead code elimination.
   for (int i = 0; i < blocks()->length(); ++i) {
     HBasicBlock* block = blocks()->at(i);
-    for (HInstruction* instr = block->first();
-         instr != NULL;
-         instr = instr->next()) {
+    for (HInstructionIterator it(block); !it.Done(); it.Advance()) {
+      HInstruction* instr = it.Current();
       if (instr->CannotBeEliminated()) MarkLive(NULL, instr, &worklist);
     }
     for (int j = 0; j < block->phis()->length(); j++) {
@@ -4596,9 +4000,8 @@ void HGraph::RemoveDeadInstructions() {
   // Remove any instruction not marked kIsLive.
   for (int i = 0; i < blocks()->length(); ++i) {
     HBasicBlock* block = blocks()->at(i);
-    for (HInstruction* instr = block->first();
-         instr != NULL;
-         instr = instr->next()) {
+    for (HInstructionIterator it(block); !it.Done(); it.Advance()) {
+      HInstruction* instr = it.Current();
       if (!instr->CheckFlag(HValue::kIsLive)) {
         // Instruction has not been marked live; assume it is dead and remove.
         // TODO(titzer): we don't remove constants because some special ones
@@ -4643,9 +4046,8 @@ void HGraph::RestoreActualValues() {
     }
 #endif
 
-    for (HInstruction* instruction = block->first();
-        instruction != NULL;
-        instruction = instruction->next()) {
+    for (HInstructionIterator it(block); !it.Done(); it.Advance()) {
+      HInstruction* instruction = it.Current();
       if (instruction->ActualValue() != instruction) {
         ASSERT(instruction->IsInformativeDefinition());
         if (instruction->IsPurelyInformativeDefinition()) {
@@ -4659,12 +4061,6 @@ void HGraph::RestoreActualValues() {
 }
 
 
-void HOptimizedGraphBuilder::AddPhi(HPhi* instr) {
-  ASSERT(current_block() != NULL);
-  current_block()->AddPhi(instr);
-}
-
-
 void HOptimizedGraphBuilder::PushAndAdd(HInstruction* instr) {
   Push(instr);
   AddInstruction(instr);
@@ -4672,9 +4068,11 @@ void HOptimizedGraphBuilder::PushAndAdd(HInstruction* instr) {
 
 
 void HOptimizedGraphBuilder::AddSoftDeoptimize() {
+  isolate()->counters()->soft_deopts_requested()->Increment();
   if (FLAG_always_opt) return;
   if (current_block()->IsDeoptimizing()) return;
-  AddInstruction(new(zone()) HSoftDeoptimize());
+  Add<HSoftDeoptimize>();
+  isolate()->counters()->soft_deopts_inserted()->Increment();
   current_block()->MarkAsDeoptimizing();
   graph()->set_has_soft_deoptimize(true);
 }
@@ -4689,33 +4087,32 @@ HInstruction* HOptimizedGraphBuilder::PreProcessCall(Instruction* call) {
   }
 
   while (!arguments.is_empty()) {
-    AddInstruction(new(zone()) HPushArgument(arguments.RemoveLast()));
+    Add<HPushArgument>(arguments.RemoveLast());
   }
   return call;
 }
 
 
 void HOptimizedGraphBuilder::SetUpScope(Scope* scope) {
-  HConstant* undefined_constant = new(zone()) HConstant(
-      isolate()->factory()->undefined_value(), Representation::Tagged());
-  AddInstruction(undefined_constant);
+  HConstant* undefined_constant = Add<HConstant>(
+      isolate()->factory()->undefined_value());
   graph()->set_undefined_constant(undefined_constant);
 
-  HArgumentsObject* object = new(zone()) HArgumentsObject;
-  AddInstruction(object);
-  graph()->SetArgumentsObject(object);
-
-  // Set the initial values of parameters including "this".  "This" has
-  // parameter index 0.
+  // Create an arguments object containing the initial parameters.  Set the
+  // initial values of parameters including "this" having parameter index 0.
   ASSERT_EQ(scope->num_parameters() + 1, environment()->parameter_count());
-
+  HArgumentsObject* arguments_object =
+      new(zone()) HArgumentsObject(environment()->parameter_count(), zone());
   for (int i = 0; i < environment()->parameter_count(); ++i) {
-    HInstruction* parameter = AddInstruction(new(zone()) HParameter(i));
+    HInstruction* parameter = Add<HParameter>(i);
+    arguments_object->AddArgument(parameter, zone());
     environment()->Bind(i, parameter);
   }
+  AddInstruction(arguments_object);
+  graph()->SetArgumentsObject(arguments_object);
 
   // First special is HContext.
-  HInstruction* context = AddInstruction(new(zone()) HContext);
+  HInstruction* context = Add<HContext>();
   environment()->BindContext(context);
 
   // Initialize specials and locals to undefined.
@@ -5027,7 +4424,7 @@ void HOptimizedGraphBuilder::VisitSwitchStatement(SwitchStatement* stmt) {
     HControlInstruction* compare;
 
     if (stmt->switch_type() == SwitchStatement::SMI_SWITCH) {
-      if (!clause->IsSmiCompare()) {
+      if (!clause->compare_type()->Is(Type::Smi())) {
         AddSoftDeoptimize();
       }
 
@@ -5036,7 +4433,7 @@ void HOptimizedGraphBuilder::VisitSwitchStatement(SwitchStatement* stmt) {
                                           label_value,
                                           Token::EQ_STRICT);
       compare_->set_observed_input_representation(
-          Representation::Integer32(), Representation::Integer32());
+          Representation::Smi(), Representation::Smi());
       compare = compare_;
     } else {
       compare = new(zone()) HStringCompareAndBranch(context, tag_value,
@@ -5122,65 +4519,9 @@ void HOptimizedGraphBuilder::VisitSwitchStatement(SwitchStatement* stmt) {
   } else {
     if (fall_through_block != NULL) fall_through_block->Goto(break_block);
     if (last_block != NULL) last_block->Goto(break_block);
-    break_block->SetJoinId(stmt->ExitId());
-    set_current_block(break_block);
-  }
-}
-
-
-bool HOptimizedGraphBuilder::HasOsrEntryAt(IterationStatement* statement) {
-  return statement->OsrEntryId() == info()->osr_ast_id();
-}
-
-
-bool HOptimizedGraphBuilder::PreProcessOsrEntry(IterationStatement* statement) {
-  if (!HasOsrEntryAt(statement)) return false;
-
-  HBasicBlock* non_osr_entry = graph()->CreateBasicBlock();
-  HBasicBlock* osr_entry = graph()->CreateBasicBlock();
-  HValue* true_value = graph()->GetConstantTrue();
-  HBranch* test = new(zone()) HBranch(true_value, non_osr_entry, osr_entry);
-  current_block()->Finish(test);
-
-  HBasicBlock* loop_predecessor = graph()->CreateBasicBlock();
-  non_osr_entry->Goto(loop_predecessor);
-
-  set_current_block(osr_entry);
-  osr_entry->set_osr_entry();
-  BailoutId osr_entry_id = statement->OsrEntryId();
-  int first_expression_index = environment()->first_expression_index();
-  int length = environment()->length();
-  ZoneList<HUnknownOSRValue*>* osr_values =
-      new(zone()) ZoneList<HUnknownOSRValue*>(length, zone());
-
-  for (int i = 0; i < first_expression_index; ++i) {
-    HUnknownOSRValue* osr_value = new(zone()) HUnknownOSRValue;
-    AddInstruction(osr_value);
-    environment()->Bind(i, osr_value);
-    osr_values->Add(osr_value, zone());
-  }
-
-  if (first_expression_index != length) {
-    environment()->Drop(length - first_expression_index);
-    for (int i = first_expression_index; i < length; ++i) {
-      HUnknownOSRValue* osr_value = new(zone()) HUnknownOSRValue;
-      AddInstruction(osr_value);
-      environment()->Push(osr_value);
-      osr_values->Add(osr_value, zone());
-    }
-  }
-
-  graph()->set_osr_values(osr_values);
-
-  AddSimulate(osr_entry_id);
-  AddInstruction(new(zone()) HOsrEntry(osr_entry_id));
-  HContext* context = new(zone()) HContext;
-  AddInstruction(context);
-  environment()->BindContext(context);
-  current_block()->Goto(loop_predecessor);
-  loop_predecessor->SetJoinId(statement->EntryId());
-  set_current_block(loop_predecessor);
-  return true;
+    break_block->SetJoinId(stmt->ExitId());
+    set_current_block(break_block);
+  }
 }
 
 
@@ -5190,9 +4531,8 @@ void HOptimizedGraphBuilder::VisitLoopBody(IterationStatement* stmt,
   BreakAndContinueScope push(break_info, this);
   AddSimulate(stmt->StackCheckId());
   HValue* context = environment()->LookupContext();
-  HStackCheck* stack_check =
-    new(zone()) HStackCheck(context, HStackCheck::kBackwardsBranch);
-  AddInstruction(stack_check);
+  HStackCheck* stack_check = Add<HStackCheck>(
+      context, HStackCheck::kBackwardsBranch);
   ASSERT(loop_entry->IsLoopHeader());
   loop_entry->loop_information()->set_stack_check(stack_check);
   CHECK_BAILOUT(Visit(stmt->body()));
@@ -5204,11 +4544,7 @@ void HOptimizedGraphBuilder::VisitDoWhileStatement(DoWhileStatement* stmt) {
   ASSERT(current_block() != NULL);
   ASSERT(current_block()->HasPredecessor());
   ASSERT(current_block() != NULL);
-  bool osr_entry = PreProcessOsrEntry(stmt);
-  HBasicBlock* loop_entry = CreateLoopHeaderBlock();
-  current_block()->Goto(loop_entry);
-  set_current_block(loop_entry);
-  if (osr_entry) graph()->set_osr_loop_entry(loop_entry);
+  HBasicBlock* loop_entry = osr_->BuildPossibleOsrLoopEntry(stmt);
 
   BreakAndContinueInfo break_info(stmt);
   CHECK_BAILOUT(VisitLoopBody(stmt, loop_entry, &break_info));
@@ -5247,12 +4583,7 @@ void HOptimizedGraphBuilder::VisitWhileStatement(WhileStatement* stmt) {
   ASSERT(current_block() != NULL);
   ASSERT(current_block()->HasPredecessor());
   ASSERT(current_block() != NULL);
-  bool osr_entry = PreProcessOsrEntry(stmt);
-  HBasicBlock* loop_entry = CreateLoopHeaderBlock();
-  current_block()->Goto(loop_entry);
-  set_current_block(loop_entry);
-  if (osr_entry) graph()->set_osr_loop_entry(loop_entry);
-
+  HBasicBlock* loop_entry = osr_->BuildPossibleOsrLoopEntry(stmt);
 
   // If the condition is constant true, do not generate a branch.
   HBasicBlock* loop_successor = NULL;
@@ -5294,11 +4625,7 @@ void HOptimizedGraphBuilder::VisitForStatement(ForStatement* stmt) {
     CHECK_ALIVE(Visit(stmt->init()));
   }
   ASSERT(current_block() != NULL);
-  bool osr_entry = PreProcessOsrEntry(stmt);
-  HBasicBlock* loop_entry = CreateLoopHeaderBlock();
-  current_block()->Goto(loop_entry);
-  set_current_block(loop_entry);
-  if (osr_entry) graph()->set_osr_loop_entry(loop_entry);
+  HBasicBlock* loop_entry = osr_->BuildPossibleOsrLoopEntry(stmt);
 
   HBasicBlock* loop_successor = NULL;
   if (stmt->cond() != NULL) {
@@ -5361,38 +4688,28 @@ void HOptimizedGraphBuilder::VisitForInStatement(ForInStatement* stmt) {
   CHECK_ALIVE(VisitForValue(stmt->enumerable()));
   HValue* enumerable = Top();  // Leave enumerable at the top.
 
-  HInstruction* map = AddInstruction(new(zone()) HForInPrepareMap(
-      environment()->LookupContext(), enumerable));
+  HInstruction* map = Add<HForInPrepareMap>(
+      environment()->LookupContext(), enumerable);
   AddSimulate(stmt->PrepareId());
 
-  HInstruction* array = AddInstruction(
-      new(zone()) HForInCacheArray(
-          enumerable,
-          map,
-          DescriptorArray::kEnumCacheBridgeCacheIndex));
+  HInstruction* array = Add<HForInCacheArray>(
+      enumerable, map, DescriptorArray::kEnumCacheBridgeCacheIndex);
 
-  HInstruction* enum_length = AddInstruction(new(zone()) HMapEnumLength(map));
+  HInstruction* enum_length = Add<HMapEnumLength>(map);
 
-  HInstruction* start_index = AddInstruction(new(zone()) HConstant(0));
+  HInstruction* start_index = Add<HConstant>(0);
 
   Push(map);
   Push(array);
   Push(enum_length);
   Push(start_index);
 
-  HInstruction* index_cache = AddInstruction(
-      new(zone()) HForInCacheArray(
-          enumerable,
-          map,
-          DescriptorArray::kEnumCacheBridgeIndicesCacheIndex));
+  HInstruction* index_cache = Add<HForInCacheArray>(
+      enumerable, map, DescriptorArray::kEnumCacheBridgeIndicesCacheIndex);
   HForInCacheArray::cast(array)->set_index_cache(
       HForInCacheArray::cast(index_cache));
 
-  bool osr_entry = PreProcessOsrEntry(stmt);
-  HBasicBlock* loop_entry = CreateLoopHeaderBlock();
-  current_block()->Goto(loop_entry);
-  set_current_block(loop_entry);
-  if (osr_entry) graph()->set_osr_loop_entry(loop_entry);
+  HBasicBlock* loop_entry = osr_->BuildPossibleOsrLoopEntry(stmt);
 
   HValue* index = environment()->ExpressionStackAt(0);
   HValue* limit = environment()->ExpressionStackAt(1);
@@ -5401,7 +4718,7 @@ void HOptimizedGraphBuilder::VisitForInStatement(ForInStatement* stmt) {
   HCompareIDAndBranch* compare_index =
       new(zone()) HCompareIDAndBranch(index, limit, Token::LT);
   compare_index->set_observed_input_representation(
-      Representation::Integer32(), Representation::Integer32());
+      Representation::Smi(), Representation::Smi());
 
   HBasicBlock* loop_body = graph()->CreateBasicBlock();
   HBasicBlock* loop_successor = graph()->CreateBasicBlock();
@@ -5415,18 +4732,16 @@ void HOptimizedGraphBuilder::VisitForInStatement(ForInStatement* stmt) {
 
   set_current_block(loop_body);
 
-  HValue* key = AddInstruction(
-      new(zone()) HLoadKeyed(
-          environment()->ExpressionStackAt(2),  // Enum cache.
-          environment()->ExpressionStackAt(0),  // Iteration index.
-          environment()->ExpressionStackAt(0),
-          FAST_ELEMENTS));
+  HValue* key = Add<HLoadKeyed>(
+      environment()->ExpressionStackAt(2),  // Enum cache.
+      environment()->ExpressionStackAt(0),  // Iteration index.
+      environment()->ExpressionStackAt(0),
+      FAST_ELEMENTS);
 
   // Check if the expected map still matches that of the enumerable.
   // If not just deoptimize.
-  AddInstruction(new(zone()) HCheckMapValue(
-      environment()->ExpressionStackAt(4),
-      environment()->ExpressionStackAt(3)));
+  Add<HCheckMapValue>(environment()->ExpressionStackAt(4),
+                      environment()->ExpressionStackAt(3));
 
   Bind(each_var, key);
 
@@ -5516,9 +4831,9 @@ void HOptimizedGraphBuilder::VisitFunctionLiteral(FunctionLiteral* expr) {
   ASSERT(current_block() != NULL);
   ASSERT(current_block()->HasPredecessor());
   Handle<SharedFunctionInfo> shared_info =
-      SearchSharedFunctionInfo(info()->shared_info()->code(), expr);
+      SearchSharedFunctionInfo(current_info()->shared_info()->code(), expr);
   if (shared_info.is_null()) {
-    shared_info = Compiler::BuildFunctionInfo(expr, info()->script());
+    shared_info = Compiler::BuildFunctionInfo(expr, current_info()->script());
   }
   // We also have a stack overflow if the recursive compilation did.
   if (HasStackOverflow()) return;
@@ -5579,10 +4894,10 @@ void HOptimizedGraphBuilder::VisitConditional(Conditional* expr) {
 HOptimizedGraphBuilder::GlobalPropertyAccess
     HOptimizedGraphBuilder::LookupGlobalProperty(
         Variable* var, LookupResult* lookup, bool is_store) {
-  if (var->is_this() || !info()->has_global_object()) {
+  if (var->is_this() || !current_info()->has_global_object()) {
     return kUseGeneric;
   }
-  Handle<GlobalObject> global(info()->global_object());
+  Handle<GlobalObject> global(current_info()->global_object());
   global->Lookup(*var->name(), lookup);
   if (!lookup->IsNormal() ||
       (is_store && lookup->IsReadOnly()) ||
@@ -5597,11 +4912,9 @@ HOptimizedGraphBuilder::GlobalPropertyAccess
 HValue* HOptimizedGraphBuilder::BuildContextChainWalk(Variable* var) {
   ASSERT(var->IsContextSlot());
   HValue* context = environment()->LookupContext();
-  int length = info()->scope()->ContextChainLength(var->scope());
+  int length = current_info()->scope()->ContextChainLength(var->scope());
   while (length-- > 0) {
-    HInstruction* context_instruction = new(zone()) HOuterContext(context);
-    AddInstruction(context_instruction);
-    context = context_instruction;
+    context = Add<HOuterContext>(context);
   }
   return context;
 }
@@ -5623,8 +4936,7 @@ void HOptimizedGraphBuilder::VisitVariableProxy(VariableProxy* expr) {
       Handle<Object> constant_value =
           isolate()->factory()->GlobalConstantFor(variable->name());
       if (!constant_value.is_null()) {
-        HConstant* instr =
-            new(zone()) HConstant(constant_value, Representation::Tagged());
+        HConstant* instr = new(zone()) HConstant(constant_value);
         return ast_context()->ReturnInstruction(instr, expr->id());
       }
 
@@ -5633,13 +4945,13 @@ void HOptimizedGraphBuilder::VisitVariableProxy(VariableProxy* expr) {
           LookupGlobalProperty(variable, &lookup, false);
 
       if (type == kUseCell &&
-          info()->global_object()->IsAccessCheckNeeded()) {
+          current_info()->global_object()->IsAccessCheckNeeded()) {
         type = kUseGeneric;
       }
 
       if (type == kUseCell) {
-        Handle<GlobalObject> global(info()->global_object());
-        Handle<JSGlobalPropertyCell> cell(global->GetPropertyCell(&lookup));
+        Handle<GlobalObject> global(current_info()->global_object());
+        Handle<PropertyCell> cell(global->GetPropertyCell(&lookup));
         HLoadGlobalCell* instr =
             new(zone()) HLoadGlobalCell(cell, lookup.GetPropertyDetails());
         return ast_context()->ReturnInstruction(instr, expr->id());
@@ -5684,8 +4996,7 @@ void HOptimizedGraphBuilder::VisitLiteral(Literal* expr) {
   ASSERT(!HasStackOverflow());
   ASSERT(current_block() != NULL);
   ASSERT(current_block()->HasPredecessor());
-  HConstant* instr =
-      new(zone()) HConstant(expr->handle(), Representation::None());
+  HConstant* instr = new(zone()) HConstant(expr->value());
   return ast_context()->ReturnInstruction(instr, expr->id());
 }
 
@@ -5909,23 +5220,18 @@ void HOptimizedGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
     flags |= expr->has_function()
         ? ObjectLiteral::kHasFunction : ObjectLiteral::kNoFlags;
 
-    AddInstruction(new(zone()) HPushArgument(AddInstruction(
-        new(zone()) HConstant(closure_literals, Representation::Tagged()))));
-    AddInstruction(new(zone()) HPushArgument(AddInstruction(
-        new(zone()) HConstant(literal_index, Representation::Tagged()))));
-    AddInstruction(new(zone()) HPushArgument(AddInstruction(
-        new(zone()) HConstant(constant_properties, Representation::Tagged()))));
-    AddInstruction(new(zone()) HPushArgument(AddInstruction(
-        new(zone()) HConstant(flags, Representation::Tagged()))));
+    Add<HPushArgument>(Add<HConstant>(closure_literals));
+    Add<HPushArgument>(Add<HConstant>(literal_index));
+    Add<HPushArgument>(Add<HConstant>(constant_properties));
+    Add<HPushArgument>(Add<HConstant>(flags));
 
     Runtime::FunctionId function_id =
         (expr->depth() > 1 || expr->may_store_doubles())
         ? Runtime::kCreateObjectLiteral : Runtime::kCreateObjectLiteralShallow;
-    literal = AddInstruction(
-        new(zone()) HCallRuntime(context,
-                                 isolate()->factory()->empty_string(),
-                                 Runtime::FunctionForId(function_id),
-                                 4));
+    literal = Add<HCallRuntime>(context,
+                                isolate()->factory()->empty_string(),
+                                Runtime::FunctionForId(function_id),
+                                4);
   }
 
   // The object is expected in the bailout environment during computation
@@ -5946,7 +5252,7 @@ void HOptimizedGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
         ASSERT(!CompileTimeValue::IsCompileTimeValue(value));
         // Fall through.
       case ObjectLiteral::Property::COMPUTED:
-        if (key->handle()->IsInternalizedString()) {
+        if (key->value()->IsInternalizedString()) {
           if (property->emit_store()) {
             CHECK_ALIVE(VisitForValue(value));
             HValue* value = Pop();
@@ -5991,8 +5297,7 @@ void HOptimizedGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
     // of the object. This makes sure that the original object won't
     // be used by other optimized code before it is transformed
     // (e.g. because of code motion).
-    HToFastProperties* result = new(zone()) HToFastProperties(Pop());
-    AddInstruction(result);
+    HToFastProperties* result = Add<HToFastProperties>(Pop());
     return ast_context()->ReturnValue(result);
   } else {
     return ast_context()->ReturnValue(Pop());
@@ -6013,7 +5318,9 @@ void HOptimizedGraphBuilder::VisitArrayLiteral(ArrayLiteral* expr) {
   Handle<Object> raw_boilerplate(literals->get(expr->literal_index()),
                                  isolate());
 
+  bool uninitialized = false;
   if (raw_boilerplate->IsUndefined()) {
+    uninitialized = true;
     raw_boilerplate = Runtime::CreateArrayLiteralBoilerplate(
         isolate(), literals, expr->constant_elements());
     if (raw_boilerplate.is_null()) {
@@ -6064,45 +5371,28 @@ void HOptimizedGraphBuilder::VisitArrayLiteral(ArrayLiteral* expr) {
     Handle<FixedArray> constants = isolate()->factory()->empty_fixed_array();
     int literal_index = expr->literal_index();
 
-    // TODO(mstarzinger): The following check and deopt is actually obsolete
-    // but test cases for the tick processor fails because profile differs.
-
-    // Deopt if the array literal boilerplate ElementsKind is of a type
-    // different than the expected one. The check isn't necessary if the
-    // boilerplate has already been converted to TERMINAL_FAST_ELEMENTS_KIND.
-    if (CanTransitionToMoreGeneralFastElementsKind(
-            boilerplate_elements_kind, true)) {
-      IfBuilder builder(this);
-      HValue* boilerplate = AddInstruction(new(zone())
-          HConstant(original_boilerplate_object, Representation::Tagged()));
-      HValue* elements_kind = AddInstruction(new(zone())
-          HElementsKind(boilerplate));
-      HValue* expected_kind = AddInstruction(new(zone())
-          HConstant(boilerplate_elements_kind, Representation::Integer32()));
-      builder.IfCompare(elements_kind, expected_kind, Token::EQ);
-      builder.Then();
-      builder.ElseDeopt();
-    }
-
-    AddInstruction(new(zone()) HPushArgument(AddInstruction(
-        new(zone()) HConstant(literals, Representation::Tagged()))));
-    AddInstruction(new(zone()) HPushArgument(AddInstruction(
-        new(zone()) HConstant(literal_index, Representation::Tagged()))));
-    AddInstruction(new(zone()) HPushArgument(AddInstruction(
-        new(zone()) HConstant(constants, Representation::Tagged()))));
+    Add<HPushArgument>(Add<HConstant>(literals));
+    Add<HPushArgument>(Add<HConstant>(literal_index));
+    Add<HPushArgument>(Add<HConstant>(constants));
 
     Runtime::FunctionId function_id = (expr->depth() > 1)
         ? Runtime::kCreateArrayLiteral : Runtime::kCreateArrayLiteralShallow;
-    literal = AddInstruction(
-        new(zone()) HCallRuntime(context,
-                                 isolate()->factory()->empty_string(),
-                                 Runtime::FunctionForId(function_id),
-                                 3));
+    literal = Add<HCallRuntime>(context,
+                                isolate()->factory()->empty_string(),
+                                Runtime::FunctionForId(function_id),
+                                3);
+
+    // De-opt if elements kind changed from boilerplate_elements_kind.
+    Handle<Map> map = Handle<Map>(original_boilerplate_object->map(),
+                                  isolate());
+    AddInstruction(HCheckMaps::New(literal, map, zone()));
   }
 
   // The array is expected in the bailout environment during computation
   // of the property values and is the value of the entire expression.
   Push(literal);
+  // The literal index is on the stack, too.
+  Push(Add<HConstant>(expr->literal_index()));
 
   HInstruction* elements = NULL;
 
@@ -6118,7 +5408,7 @@ void HOptimizedGraphBuilder::VisitArrayLiteral(ArrayLiteral* expr) {
 
     elements = AddLoadElements(literal);
 
-    HValue* key = AddInstruction(new(zone()) HConstant(i));
+    HValue* key = Add<HConstant>(i);
 
     switch (boilerplate_elements_kind) {
       case FAST_SMI_ELEMENTS:
@@ -6126,13 +5416,12 @@ void HOptimizedGraphBuilder::VisitArrayLiteral(ArrayLiteral* expr) {
       case FAST_ELEMENTS:
       case FAST_HOLEY_ELEMENTS:
       case FAST_DOUBLE_ELEMENTS:
-      case FAST_HOLEY_DOUBLE_ELEMENTS:
-        AddInstruction(new(zone()) HStoreKeyed(
-            elements,
-            key,
-            value,
-            boilerplate_elements_kind));
+      case FAST_HOLEY_DOUBLE_ELEMENTS: {
+        HStoreKeyed* instr = Add<HStoreKeyed>(elements, key, value,
+                                              boilerplate_elements_kind);
+        instr->SetUninitialized(uninitialized);
         break;
+      }
       default:
         UNREACHABLE();
         break;
@@ -6140,6 +5429,8 @@ void HOptimizedGraphBuilder::VisitArrayLiteral(ArrayLiteral* expr) {
 
     AddSimulate(expr->GetIdForElement(i));
   }
+
+  Drop(1);  // array literal index
   return ast_context()->ReturnValue(Pop());
 }
 
@@ -6183,14 +5474,14 @@ static Representation ComputeLoadStoreRepresentation(Handle<Map> type,
 
 
 void HOptimizedGraphBuilder::AddCheckMap(HValue* object, Handle<Map> map) {
-  BuildCheckNonSmi(object);
+  BuildCheckHeapObject(object);
   AddInstruction(HCheckMaps::New(object, map, zone()));
 }
 
 
 void HOptimizedGraphBuilder::AddCheckMapsWithTransitions(HValue* object,
                                                          Handle<Map> map) {
-  BuildCheckNonSmi(object);
+  BuildCheckHeapObject(object);
   AddInstruction(HCheckMaps::NewWithTransitions(object, map, zone()));
 }
 
@@ -6226,10 +5517,9 @@ HInstruction* HOptimizedGraphBuilder::BuildStoreNamedField(
       ASSERT(proto->GetPrototype(isolate())->IsNull());
     }
     ASSERT(proto->IsJSObject());
-    AddInstruction(new(zone()) HCheckPrototypeMaps(
-        Handle<JSObject>(JSObject::cast(map->prototype())),
-        Handle<JSObject>(JSObject::cast(proto)),
-        zone()));
+    Add<HCheckPrototypeMaps>(Handle<JSObject>(JSObject::cast(map->prototype())),
+                             Handle<JSObject>(JSObject::cast(proto)),
+                             zone(), top_info());
   }
 
   HObjectAccess field_access = HObjectAccess::ForField(map, lookup, name);
@@ -6241,11 +5531,10 @@ HInstruction* HOptimizedGraphBuilder::BuildStoreNamedField(
     if (transition_to_field) {
       // The store requires a mutable HeapNumber to be allocated.
       NoObservableSideEffectsScope no_side_effects(this);
-      HInstruction* heap_number_size = AddInstruction(new(zone()) HConstant(
-          HeapNumber::kSize, Representation::Integer32()));
-      HInstruction* double_box = AddInstruction(new(zone()) HAllocate(
+      HInstruction* heap_number_size = Add<HConstant>(HeapNumber::kSize);
+      HInstruction* double_box = Add<HAllocate>(
           environment()->LookupContext(), heap_number_size,
-          HType::HeapNumber(), HAllocate::CAN_ALLOCATE_IN_NEW_SPACE));
+          HType::HeapNumber(), HAllocate::CAN_ALLOCATE_IN_NEW_SPACE);
       AddStoreMapConstant(double_box, isolate()->factory()->heap_number_map());
       AddStore(double_box, HObjectAccess::ForHeapNumberValue(),
           value, Representation::Double());
@@ -6265,7 +5554,7 @@ HInstruction* HOptimizedGraphBuilder::BuildStoreNamedField(
 
   if (transition_to_field) {
     Handle<Map> transition(lookup->GetTransitionMapFromMap(*map));
-    instr->set_transition(transition);
+    instr->SetTransition(transition, top_info());
     // TODO(fschneider): Record the new map type of the object in the IR to
     // enable elimination of redundant checks after the transition store.
     instr->SetGVNFlag(kChangesMaps);
@@ -6295,8 +5584,8 @@ HInstruction* HOptimizedGraphBuilder::BuildCallSetter(
     Handle<JSFunction> setter,
     Handle<JSObject> holder) {
   AddCheckConstantFunction(holder, object, map);
-  AddInstruction(new(zone()) HPushArgument(object));
-  AddInstruction(new(zone()) HPushArgument(value));
+  Add<HPushArgument>(object);
+  Add<HPushArgument>(value);
   return new(zone()) HCallConstantFunction(setter, 2);
 }
 
@@ -6318,51 +5607,92 @@ HInstruction* HOptimizedGraphBuilder::BuildStoreNamedMonomorphic(
 }
 
 
-bool HOptimizedGraphBuilder::HandlePolymorphicArrayLengthLoad(
+HInstruction* HOptimizedGraphBuilder::TryLoadPolymorphicAsMonomorphic(
     Property* expr,
     HValue* object,
     SmallMapList* types,
     Handle<String> name) {
-  if (!name->Equals(isolate()->heap()->length_string())) return false;
+  // Use monomorphic load if property lookup results in the same field index
+  // for all maps. Requires special map check on the set of all handled maps.
+  if (types->length() > kMaxLoadPolymorphism) return NULL;
 
-  for (int i = 0; i < types->length(); i++) {
-    if (types->at(i)->instance_type() != JS_ARRAY_TYPE) return false;
-  }
+  LookupResult lookup(isolate());
+  int count;
+  Representation representation = Representation::None();
+  HObjectAccess access = HObjectAccess::ForMap();  // initial value unused.
+  for (count = 0; count < types->length(); ++count) {
+    Handle<Map> map = types->at(count);
+    if (!ComputeLoadStoreField(map, name, &lookup, false)) break;
+
+    HObjectAccess new_access = HObjectAccess::ForField(map, &lookup, name);
+    Representation new_representation =
+        ComputeLoadStoreRepresentation(map, &lookup);
 
-  BuildCheckNonSmi(object);
+    if (count == 0) {
+      // First time through the loop; set access and representation.
+      access = new_access;
+    } else if (!representation.IsCompatibleForLoad(new_representation)) {
+      // Representations did not match.
+      break;
+    } else if (access.offset() != new_access.offset()) {
+      // Offsets did not match.
+      break;
+    } else if (access.IsInobject() != new_access.IsInobject()) {
+      // In-objectness did not match.
+      break;
+    }
+    representation = representation.generalize(new_representation);
+  }
 
-  HInstruction* typecheck =
-      AddInstruction(HCheckMaps::New(object, types, zone()));
-  HInstruction* instr = new(zone())
-      HLoadNamedField(object, HObjectAccess::ForArrayLength(), typecheck);
+  if (count != types->length()) return NULL;
 
-  instr->set_position(expr->position());
-  ast_context()->ReturnInstruction(instr, expr->id());
-  return true;
+  // Everything matched; can use monomorphic load.
+  BuildCheckHeapObject(object);
+  AddInstruction(HCheckMaps::New(object, types, zone()));
+  return BuildLoadNamedField(object, access, representation);
 }
 
 
-void HOptimizedGraphBuilder::HandlePolymorphicLoadNamedField(Property* expr,
+void HOptimizedGraphBuilder::HandlePolymorphicLoadNamedField(
+    Property* expr,
     HValue* object,
     SmallMapList* types,
     Handle<String> name) {
+  HInstruction* instr = TryLoadPolymorphicAsMonomorphic(
+      expr, object, types, name);
+  if (instr == NULL) {
+    // Something did not match; must use a polymorphic load.
+    BuildCheckHeapObject(object);
+    HValue* context = environment()->LookupContext();
+    instr = new(zone()) HLoadNamedFieldPolymorphic(
+        context, object, types, name, zone());
+  }
 
-  if (HandlePolymorphicArrayLengthLoad(expr, object, types, name))
-    return;
+  instr->set_position(expr->position());
+  return ast_context()->ReturnInstruction(instr, expr->id());
+}
 
-  BuildCheckNonSmi(object);
 
-  // Use monomorphic load if property lookup results in the same field index
+bool HOptimizedGraphBuilder::TryStorePolymorphicAsMonomorphic(
+    int position,
+    BailoutId assignment_id,
+    HValue* object,
+    HValue* value,
+    SmallMapList* types,
+    Handle<String> name) {
+  // Use monomorphic store if property lookup results in the same field index
   // for all maps. Requires special map check on the set of all handled maps.
-  HInstruction* instr = NULL;
+  if (types->length() > kMaxStorePolymorphism) return false;
+
+  // TODO(verwaest): Merge the checking logic with the code in
+  // TryLoadPolymorphicAsMonomorphic.
   LookupResult lookup(isolate());
   int count;
   Representation representation = Representation::None();
   HObjectAccess access = HObjectAccess::ForMap();  // initial value unused.
-  for (count = 0;
-       count < types->length() && count < kMaxLoadPolymorphism;
-       ++count) {
+  for (count = 0; count < types->length(); ++count) {
     Handle<Map> map = types->at(count);
+    // Pass false to ignore transitions.
     if (!ComputeLoadStoreField(map, name, &lookup, false)) break;
 
     HObjectAccess new_access = HObjectAccess::ForField(map, &lookup, name);
@@ -6373,7 +5703,7 @@ void HOptimizedGraphBuilder::HandlePolymorphicLoadNamedField(Property* expr,
       // First time through the loop; set access and representation.
       access = new_access;
       representation = new_representation;
-    } else if (!representation.IsCompatibleForLoad(new_representation)) {
+    } else if (!representation.IsCompatibleForStore(new_representation)) {
       // Representations did not match.
       break;
     } else if (access.offset() != new_access.offset()) {
@@ -6385,28 +5715,38 @@ void HOptimizedGraphBuilder::HandlePolymorphicLoadNamedField(Property* expr,
     }
   }
 
-  if (count == types->length()) {
-    // Everything matched; can use monomorphic load.
-    AddInstruction(HCheckMaps::New(object, types, zone()));
-    instr = BuildLoadNamedField(object, access, representation);
-  } else {
-    // Something did not match; must use a polymorphic load.
-    HValue* context = environment()->LookupContext();
-    instr = new(zone()) HLoadNamedFieldPolymorphic(
-        context, object, types, name, zone());
-  }
+  if (count != types->length()) return false;
 
-  instr->set_position(expr->position());
-  return ast_context()->ReturnInstruction(instr, expr->id());
+  // Everything matched; can use monomorphic store.
+  BuildCheckHeapObject(object);
+  AddInstruction(HCheckMaps::New(object, types, zone()));
+  HInstruction* store;
+  CHECK_ALIVE_OR_RETURN(
+      store = BuildStoreNamedField(
+          object, name, value, types->at(count - 1), &lookup),
+      true);
+  Push(value);
+  store->set_position(position);
+  AddInstruction(store);
+  AddSimulate(assignment_id);
+  ast_context()->ReturnValue(Pop());
+  return true;
 }
 
 
 void HOptimizedGraphBuilder::HandlePolymorphicStoreNamedField(
-    Assignment* expr,
+    BailoutId id,
+    int position,
+    BailoutId assignment_id,
     HValue* object,
     HValue* value,
     SmallMapList* types,
     Handle<String> name) {
+  if (TryStorePolymorphicAsMonomorphic(
+          position, assignment_id, object, value, types, name)) {
+    return;
+  }
+
   // TODO(ager): We should recognize when the prototype chains for different
   // maps are identical. In that case we can avoid repeatedly generating the
   // same prototype map checks.
@@ -6417,7 +5757,7 @@ void HOptimizedGraphBuilder::HandlePolymorphicStoreNamedField(
     LookupResult lookup(isolate());
     if (ComputeLoadStoreField(map, name, &lookup, true)) {
       if (count == 0) {
-        BuildCheckNonSmi(object);
+        BuildCheckHeapObject(object);
         join = graph()->CreateBasicBlock();
       }
       ++count;
@@ -6429,9 +5769,9 @@ void HOptimizedGraphBuilder::HandlePolymorphicStoreNamedField(
 
       set_current_block(if_true);
       HInstruction* instr;
-      CHECK_ALIVE(instr =
-          BuildStoreNamedField(object, name, value, map, &lookup));
-      instr->set_position(expr->position());
+      CHECK_ALIVE(
+          instr = BuildStoreNamedField(object, name, value, map, &lookup));
+      instr->set_position(position);
       // Goto will add the HSimulate for the store.
       AddInstruction(instr);
       if (!ast_context()->IsEffect()) Push(value);
@@ -6448,7 +5788,7 @@ void HOptimizedGraphBuilder::HandlePolymorphicStoreNamedField(
     current_block()->FinishExitWithDeoptimization(HDeoptimize::kNoUses);
   } else {
     HInstruction* instr = BuildStoreNamedGeneric(object, name, value);
-    instr->set_position(expr->position());
+    instr->set_position(position);
     AddInstruction(instr);
 
     if (join != NULL) {
@@ -6460,10 +5800,10 @@ void HOptimizedGraphBuilder::HandlePolymorphicStoreNamedField(
       // unoptimized code).
       if (instr->HasObservableSideEffects()) {
         if (ast_context()->IsEffect()) {
-          AddSimulate(expr->id(), REMOVABLE_SIMULATE);
+          AddSimulate(id, REMOVABLE_SIMULATE);
         } else {
           Push(value);
-          AddSimulate(expr->id(), REMOVABLE_SIMULATE);
+          AddSimulate(id, REMOVABLE_SIMULATE);
           Drop(1);
         }
       }
@@ -6472,9 +5812,9 @@ void HOptimizedGraphBuilder::HandlePolymorphicStoreNamedField(
   }
 
   ASSERT(join != NULL);
-  join->SetJoinId(expr->id());
+  join->SetJoinId(id);
   set_current_block(join);
-  if (!ast_context()->IsEffect()) return ast_context()->ReturnValue(Pop());
+  if (!ast_context()->IsEffect()) ast_context()->ReturnValue(Pop());
 }
 
 
@@ -6489,54 +5829,9 @@ void HOptimizedGraphBuilder::HandlePropertyAssignment(Assignment* expr) {
     HValue* value = environment()->ExpressionStackAt(0);
     HValue* object = environment()->ExpressionStackAt(1);
 
-    Literal* key = prop->key()->AsLiteral();
-    Handle<String> name = Handle<String>::cast(key->handle());
-    ASSERT(!name.is_null());
-
-    HInstruction* instr = NULL;
-    SmallMapList* types = expr->GetReceiverTypes();
-    bool monomorphic = expr->IsMonomorphic();
-    Handle<Map> map;
-    if (monomorphic) {
-      map = types->first();
-      if (map->is_dictionary_map()) monomorphic = false;
-    }
-    if (monomorphic) {
-      Handle<JSFunction> setter;
-      Handle<JSObject> holder;
-      if (LookupSetter(map, name, &setter, &holder)) {
-        AddCheckConstantFunction(holder, object, map);
-        if (FLAG_inline_accessors && TryInlineSetter(setter, expr, value)) {
-          return;
-        }
-        Drop(2);
-        AddInstruction(new(zone()) HPushArgument(object));
-        AddInstruction(new(zone()) HPushArgument(value));
-        instr = new(zone()) HCallConstantFunction(setter, 2);
-      } else {
-        Drop(2);
-        CHECK_ALIVE(instr = BuildStoreNamedMonomorphic(object,
-                                                       name,
-                                                       value,
-                                                       map));
-      }
-
-    } else if (types != NULL && types->length() > 1) {
-      Drop(2);
-      return HandlePolymorphicStoreNamedField(expr, object, value, types, name);
-    } else {
-      Drop(2);
-      instr = BuildStoreNamedGeneric(object, name, value);
-    }
-
-    Push(value);
-    instr->set_position(expr->position());
-    AddInstruction(instr);
-    if (instr->HasObservableSideEffects()) {
-      AddSimulate(expr->AssignmentId(), REMOVABLE_SIMULATE);
-    }
-    return ast_context()->ReturnValue(Pop());
-
+    if (expr->IsUninitialized()) AddSoftDeoptimize();
+    return BuildStoreNamed(expr, expr->id(), expr->position(),
+                           expr->AssignmentId(), prop, object, value);
   } else {
     // Keyed store.
     CHECK_ALIVE(VisitForValue(prop->key()));
@@ -6568,33 +5863,86 @@ void HOptimizedGraphBuilder::HandleGlobalVariableAssignment(
   LookupResult lookup(isolate());
   GlobalPropertyAccess type = LookupGlobalProperty(var, &lookup, true);
   if (type == kUseCell) {
-    Handle<GlobalObject> global(info()->global_object());
-    Handle<JSGlobalPropertyCell> cell(global->GetPropertyCell(&lookup));
-    HInstruction* instr =
-        new(zone()) HStoreGlobalCell(value, cell, lookup.GetPropertyDetails());
+    Handle<GlobalObject> global(current_info()->global_object());
+    Handle<PropertyCell> cell(global->GetPropertyCell(&lookup));
+    HInstruction* instr = Add<HStoreGlobalCell>(value, cell,
+                                                lookup.GetPropertyDetails());
     instr->set_position(position);
-    AddInstruction(instr);
     if (instr->HasObservableSideEffects()) {
       AddSimulate(ast_id, REMOVABLE_SIMULATE);
     }
   } else {
     HValue* context =  environment()->LookupContext();
-    HGlobalObject* global_object = new(zone()) HGlobalObject(context);
-    AddInstruction(global_object);
+    HGlobalObject* global_object = Add<HGlobalObject>(context);
     HStoreGlobalGeneric* instr =
-        new(zone()) HStoreGlobalGeneric(context,
-                                        global_object,
-                                        var->name(),
-                                        value,
-                                        function_strict_mode_flag());
+        Add<HStoreGlobalGeneric>(context, global_object, var->name(),
+                                 value, function_strict_mode_flag());
     instr->set_position(position);
-    AddInstruction(instr);
     ASSERT(instr->HasObservableSideEffects());
     AddSimulate(ast_id, REMOVABLE_SIMULATE);
   }
 }
 
 
+void HOptimizedGraphBuilder::BuildStoreNamed(Expression* expr,
+                                             BailoutId id,
+                                             int position,
+                                             BailoutId assignment_id,
+                                             Property* prop,
+                                             HValue* object,
+                                             HValue* value) {
+  Literal* key = prop->key()->AsLiteral();
+  Handle<String> name = Handle<String>::cast(key->value());
+  ASSERT(!name.is_null());
+
+  HInstruction* instr = NULL;
+  SmallMapList* types = expr->GetReceiverTypes();
+  bool monomorphic = expr->IsMonomorphic();
+  Handle<Map> map;
+  if (monomorphic) {
+    map = types->first();
+    if (map->is_dictionary_map()) monomorphic = false;
+  }
+  if (monomorphic) {
+    Handle<JSFunction> setter;
+    Handle<JSObject> holder;
+    if (LookupSetter(map, name, &setter, &holder)) {
+      AddCheckConstantFunction(holder, object, map);
+      if (FLAG_inline_accessors &&
+          TryInlineSetter(setter, id, assignment_id, value)) {
+        return;
+      }
+      Drop(2);
+      Add<HPushArgument>(object);
+      Add<HPushArgument>(value);
+      instr = new(zone()) HCallConstantFunction(setter, 2);
+    } else {
+      Drop(2);
+      CHECK_ALIVE(instr = BuildStoreNamedMonomorphic(object,
+                                                     name,
+                                                     value,
+                                                     map));
+    }
+
+  } else if (types != NULL && types->length() > 1) {
+    Drop(2);
+    return HandlePolymorphicStoreNamedField(
+        id, position, assignment_id, object, value, types, name);
+  } else {
+    Drop(2);
+    instr = BuildStoreNamedGeneric(object, name, value);
+  }
+
+  Push(value);
+  instr->set_position(position);
+  AddInstruction(instr);
+  if (instr->HasObservableSideEffects()) {
+    AddSimulate(assignment_id, REMOVABLE_SIMULATE);
+  }
+  return ast_context()->ReturnValue(Pop());
+}
+
+
 void HOptimizedGraphBuilder::HandleCompoundAssignment(Assignment* expr) {
   Expression* target = expr->target();
   VariableProxy* proxy = target->AsVariableProxy();
@@ -6633,13 +5981,13 @@ void HOptimizedGraphBuilder::HandleCompoundAssignment(Assignment* expr) {
         // Bail out if we try to mutate a parameter value in a function
         // using the arguments object.  We do not (yet) correctly handle the
         // arguments property of the function.
-        if (info()->scope()->arguments() != NULL) {
+        if (current_info()->scope()->arguments() != NULL) {
           // Parameters will be allocated to context slots.  We have no
           // direct way to detect that the variable is a parameter so we do
           // a linear search of the parameter variables.
-          int count = info()->scope()->num_parameters();
+          int count = current_info()->scope()->num_parameters();
           for (int i = 0; i < count; ++i) {
-            if (var == info()->scope()->parameter(i)) {
+            if (var == current_info()->scope()->parameter(i)) {
               Bailout(
                   "assignment to parameter, function uses arguments object");
             }
@@ -6663,9 +6011,8 @@ void HOptimizedGraphBuilder::HandleCompoundAssignment(Assignment* expr) {
         }
 
         HValue* context = BuildContextChainWalk(var);
-        HStoreContextSlot* instr =
-            new(zone()) HStoreContextSlot(context, var->index(), mode, Top());
-        AddInstruction(instr);
+        HStoreContextSlot* instr = Add<HStoreContextSlot>(context, var->index(),
+                                                          mode, Top());
         if (instr->HasObservableSideEffects()) {
           AddSimulate(expr->AssignmentId(), REMOVABLE_SIMULATE);
         }
@@ -6685,10 +6032,11 @@ void HOptimizedGraphBuilder::HandleCompoundAssignment(Assignment* expr) {
 
       Handle<String> name = prop->key()->AsLiteral()->AsPropertyName();
       Handle<Map> map;
-      HInstruction* load;
+      HInstruction* load = NULL;
+      SmallMapList* types = prop->GetReceiverTypes();
       bool monomorphic = prop->IsMonomorphic();
       if (monomorphic) {
-        map = prop->GetReceiverTypes()->first();
+        map = types->first();
         // We can't generate code for a monomorphic dict mode load so
         // just pretend it is not monomorphic.
         if (map->is_dictionary_map()) monomorphic = false;
@@ -6701,9 +6049,10 @@ void HOptimizedGraphBuilder::HandleCompoundAssignment(Assignment* expr) {
         } else {
           load = BuildLoadNamedMonomorphic(object, name, prop, map);
         }
-      } else {
-        load = BuildLoadNamedGeneric(object, name, prop);
+      } else if (types != NULL && types->length() > 1) {
+        load = TryLoadPolymorphicAsMonomorphic(prop, object, types, name);
       }
+      if (load == NULL) load = BuildLoadNamedGeneric(object, name, prop);
       PushAndAdd(load);
       if (load->HasObservableSideEffects()) {
         AddSimulate(prop->LoadId(), REMOVABLE_SIMULATE);
@@ -6719,31 +6068,8 @@ void HOptimizedGraphBuilder::HandleCompoundAssignment(Assignment* expr) {
         AddSimulate(operation->id(), REMOVABLE_SIMULATE);
       }
 
-      HInstruction* store;
-      if (!monomorphic || map->is_observed()) {
-        // If we don't know the monomorphic type, do a generic store.
-        CHECK_ALIVE(store = BuildStoreNamedGeneric(object, name, instr));
-      } else {
-        Handle<JSFunction> setter;
-        Handle<JSObject> holder;
-        if (LookupSetter(map, name, &setter, &holder)) {
-          store = BuildCallSetter(object, instr, map, setter, holder);
-        } else {
-          CHECK_ALIVE(store = BuildStoreNamedMonomorphic(object,
-                                                         name,
-                                                         instr,
-                                                         map));
-        }
-      }
-      AddInstruction(store);
-      // Drop the simulated receiver and value.  Return the value.
-      Drop(2);
-      Push(instr);
-      if (store->HasObservableSideEffects()) {
-        AddSimulate(expr->AssignmentId(), REMOVABLE_SIMULATE);
-      }
-      return ast_context()->ReturnValue(Pop());
-
+      return BuildStoreNamed(prop, expr->id(), expr->position(),
+                             expr->AssignmentId(), prop, object, instr);
     } else {
       // Keyed property.
       CHECK_ALIVE(VisitForValue(prop->obj()));
@@ -6816,7 +6142,7 @@ void HOptimizedGraphBuilder::VisitAssignment(Assignment* expr) {
         // We insert a use of the old value to detect unsupported uses of const
         // variables (e.g. initialization inside a loop).
         HValue* old_value = environment()->Lookup(var);
-        AddInstruction(new(zone()) HUseConst(old_value));
+        Add<HUseConst>(old_value);
       }
     } else if (var->mode() == CONST_HARMONY) {
       if (expr->op() != Token::INIT_CONST_HARMONY) {
@@ -6859,12 +6185,12 @@ void HOptimizedGraphBuilder::VisitAssignment(Assignment* expr) {
         // Bail out if we try to mutate a parameter value in a function using
         // the arguments object.  We do not (yet) correctly handle the
         // arguments property of the function.
-        if (info()->scope()->arguments() != NULL) {
+        if (current_info()->scope()->arguments() != NULL) {
           // Parameters will rewrite to context slots.  We have no direct way
           // to detect that the variable is a parameter.
-          int count = info()->scope()->num_parameters();
+          int count = current_info()->scope()->num_parameters();
           for (int i = 0; i < count; ++i) {
-            if (var == info()->scope()->parameter(i)) {
+            if (var == current_info()->scope()->parameter(i)) {
               return Bailout("assignment to parameter in arguments object");
             }
           }
@@ -6897,9 +6223,8 @@ void HOptimizedGraphBuilder::VisitAssignment(Assignment* expr) {
         }
 
         HValue* context = BuildContextChainWalk(var);
-        HStoreContextSlot* instr = new(zone()) HStoreContextSlot(
-            context, var->index(), mode, Top());
-        AddInstruction(instr);
+        HStoreContextSlot* instr = Add<HStoreContextSlot>(context, var->index(),
+                                                          mode, Top());
         if (instr->HasObservableSideEffects()) {
           AddSimulate(expr->AssignmentId(), REMOVABLE_SIMULATE);
         }
@@ -6933,9 +6258,8 @@ void HOptimizedGraphBuilder::VisitThrow(Throw* expr) {
 
   HValue* context = environment()->LookupContext();
   HValue* value = environment()->Pop();
-  HThrow* instr = new(zone()) HThrow(context, value);
+  HThrow* instr = Add<HThrow>(context, value);
   instr->set_position(expr->position());
-  AddInstruction(instr);
   AddSimulate(expr->id());
   current_block()->FinishExit(new(zone()) HAbnormalExit);
   set_current_block(NULL);
@@ -6981,7 +6305,7 @@ HInstruction* HOptimizedGraphBuilder::BuildCallGetter(
     Handle<JSFunction> getter,
     Handle<JSObject> holder) {
   AddCheckConstantFunction(holder, object, map);
-  AddInstruction(new(zone()) HPushArgument(object));
+  Add<HPushArgument>(object);
   return new(zone()) HCallConstantFunction(getter, 1);
 }
 
@@ -7016,7 +6340,7 @@ HInstruction* HOptimizedGraphBuilder::BuildLoadNamedMonomorphic(
   if (lookup.IsConstantFunction()) {
     AddCheckMap(object, map);
     Handle<JSFunction> function(lookup.GetConstantFunctionFromMap(*map));
-    return new(zone()) HConstant(function, Representation::Tagged());
+    return new(zone()) HConstant(function);
   }
 
   // Handle a load from a known field somewhere in the prototype chain.
@@ -7026,10 +6350,8 @@ HInstruction* HOptimizedGraphBuilder::BuildLoadNamedMonomorphic(
     Handle<JSObject> holder(lookup.holder());
     Handle<Map> holder_map(holder->map());
     AddCheckMap(object, map);
-    AddInstruction(
-        new(zone()) HCheckPrototypeMaps(prototype, holder, zone()));
-    HValue* holder_value = AddInstruction(new(zone())
-        HConstant(holder, Representation::Tagged()));
+    Add<HCheckPrototypeMaps>(prototype, holder, zone(), top_info());
+    HValue* holder_value = Add<HConstant>(holder);
     return BuildLoadNamedField(holder_value,
         HObjectAccess::ForField(holder_map, &lookup, name),
         ComputeLoadStoreRepresentation(map, &lookup));
@@ -7041,9 +6363,9 @@ HInstruction* HOptimizedGraphBuilder::BuildLoadNamedMonomorphic(
     Handle<JSObject> holder(lookup.holder());
     Handle<Map> holder_map(holder->map());
     AddCheckMap(object, map);
-    AddInstruction(new(zone()) HCheckPrototypeMaps(prototype, holder, zone()));
+    Add<HCheckPrototypeMaps>(prototype, holder, zone(), top_info());
     Handle<JSFunction> function(lookup.GetConstantFunctionFromMap(*holder_map));
-    return new(zone()) HConstant(function, Representation::Tagged());
+    return new(zone()) HConstant(function);
   }
 
   // No luck, do a generic load.
@@ -7078,8 +6400,7 @@ HInstruction* HOptimizedGraphBuilder::BuildMonomorphicElementAccess(
       isolate()->IsFastArrayConstructorPrototypeChainIntact()) {
     Handle<JSObject> prototype(JSObject::cast(map->prototype()), isolate());
     Handle<JSObject> object_prototype = isolate()->initial_object_prototype();
-    AddInstruction(
-        new(zone()) HCheckPrototypeMaps(prototype, object_prototype, zone()));
+    Add<HCheckPrototypeMaps>(prototype, object_prototype, zone(), top_info());
     load_mode = ALLOW_RETURN_HOLE;
     graph()->MarkDependsOnEmptyArrayProtoElements();
   }
@@ -7158,7 +6479,7 @@ HValue* HOptimizedGraphBuilder::HandlePolymorphicElementAccess(
     KeyedAccessStoreMode store_mode,
     bool* has_side_effects) {
   *has_side_effects = false;
-  BuildCheckNonSmi(object);
+  BuildCheckHeapObject(object);
   SmallMapList* maps = prop->GetReceiverTypes();
   bool todo_external_array = false;
 
@@ -7211,9 +6532,8 @@ HValue* HOptimizedGraphBuilder::HandlePolymorphicElementAccess(
           map->elements_kind(),
           transition_target.at(i)->elements_kind()));
       HValue* context = environment()->LookupContext();
-      transition = new(zone()) HTransitionElementsKind(
-          context, object, map, transition_target.at(i));
-      AddInstruction(transition);
+      transition = Add<HTransitionElementsKind>(context, object, map,
+                                                transition_target.at(i));
     } else {
       type_todo[map->elements_kind()] = true;
       if (IsExternalArrayElementsKind(map->elements_kind())) {
@@ -7246,8 +6566,7 @@ HValue* HOptimizedGraphBuilder::HandlePolymorphicElementAccess(
       AddInstruction(HCheckInstanceType::NewIsSpecObject(object, zone()));
   HBasicBlock* join = graph()->CreateBasicBlock();
 
-  HInstruction* elements_kind_instr =
-      AddInstruction(new(zone()) HElementsKind(object));
+  HInstruction* elements_kind_instr = Add<HElementsKind>(object);
   HInstruction* elements = AddLoadElements(object, checkspec);
   HLoadExternalArrayPointer* external_elements = NULL;
   HInstruction* checked_key = NULL;
@@ -7268,11 +6587,9 @@ HValue* HOptimizedGraphBuilder::HandlePolymorphicElementAccess(
                   LAST_ELEMENTS_KIND);
     if (elements_kind == FIRST_EXTERNAL_ARRAY_ELEMENTS_KIND
         && todo_external_array) {
-      HInstruction* length =
-          AddInstruction(new(zone()) HFixedArrayBaseLength(elements));
-      checked_key = AddBoundsCheck(key, length);
-      external_elements = new(zone()) HLoadExternalArrayPointer(elements);
-      AddInstruction(external_elements);
+      HInstruction* length = AddLoadFixedArrayLength(elements);
+      checked_key = Add<HBoundsCheck>(key, length);
+      external_elements = Add<HLoadExternalArrayPointer>(elements);
     }
     if (type_todo[elements_kind]) {
       HBasicBlock* if_true = graph()->CreateBasicBlock();
@@ -7313,7 +6630,7 @@ HValue* HOptimizedGraphBuilder::HandlePolymorphicElementAccess(
             typecheck, Representation::Smi());
         length->set_type(HType::Smi());
 
-        checked_key = AddBoundsCheck(key, length);
+        checked_key = Add<HBoundsCheck>(key, length);
         access = AddInstruction(BuildFastElementAccess(
             elements, checked_key, val, elements_kind_branch,
             elements_kind, is_store, NEVER_RETURN_HOLE, STANDARD_STORE));
@@ -7330,8 +6647,8 @@ HValue* HOptimizedGraphBuilder::HandlePolymorphicElementAccess(
         if_jsarray->GotoNoSimulate(join);
 
         set_current_block(if_fastobject);
-        length = AddInstruction(new(zone()) HFixedArrayBaseLength(elements));
-        checked_key = AddBoundsCheck(key, length);
+        length = AddLoadFixedArrayLength(elements);
+        checked_key = Add<HBoundsCheck>(key, length);
         access = AddInstruction(BuildFastElementAccess(
             elements, checked_key, val, elements_kind_branch,
             elements_kind, is_store, NEVER_RETURN_HOLE, STANDARD_STORE));
@@ -7383,7 +6700,7 @@ HValue* HOptimizedGraphBuilder::HandleKeyedElementAccess(
                        : BuildLoadKeyedGeneric(obj, key);
       AddInstruction(instr);
     } else {
-      BuildCheckNonSmi(obj);
+      BuildCheckHeapObject(obj);
       instr = BuildMonomorphicElementAccess(
           obj, key, val, NULL, map, is_store, expr->GetStoreMode());
     }
@@ -7430,7 +6747,8 @@ void HOptimizedGraphBuilder::EnsureArgumentsArePushedForAccess() {
   HEnterInlined* entry = function_state()->entry();
   entry->set_arguments_pushed();
 
-  ZoneList<HValue*>* arguments_values = entry->arguments_values();
+  HArgumentsObject* arguments = entry->arguments_object();
+  const ZoneList<HValue*>* arguments_values = arguments->arguments_values();
 
   HInstruction* insert_after = entry;
   for (int i = 0; i < arguments_values->length(); i++) {
@@ -7462,8 +6780,7 @@ bool HOptimizedGraphBuilder::TryArgumentsAccess(Property* expr) {
     if (!name->IsOneByteEqualTo(STATIC_ASCII_VECTOR("length"))) return false;
 
     if (function_state()->outer() == NULL) {
-      HInstruction* elements = AddInstruction(
-          new(zone()) HArgumentsElements(false));
+      HInstruction* elements = Add<HArgumentsElements>(false);
       result = new(zone()) HArgumentsLength(elements);
     } else {
       // Number of arguments without receiver.
@@ -7478,11 +6795,9 @@ bool HOptimizedGraphBuilder::TryArgumentsAccess(Property* expr) {
     HValue* key = Pop();
     Drop(1);  // Arguments object.
     if (function_state()->outer() == NULL) {
-      HInstruction* elements = AddInstruction(
-          new(zone()) HArgumentsElements(false));
-      HInstruction* length = AddInstruction(
-          new(zone()) HArgumentsLength(elements));
-      HInstruction* checked_key = AddBoundsCheck(key, length);
+      HInstruction* elements = Add<HArgumentsElements>(false);
+      HInstruction* length = Add<HArgumentsLength>(elements);
+      HInstruction* checked_key = Add<HBoundsCheck>(key, length);
       result = new(zone()) HAccessArgumentsAt(elements, length, checked_key);
     } else {
       EnsureArgumentsArePushedForAccess();
@@ -7491,9 +6806,8 @@ bool HOptimizedGraphBuilder::TryArgumentsAccess(Property* expr) {
       HInstruction* elements = function_state()->arguments_elements();
       int argument_count = environment()->
           arguments_environment()->parameter_count() - 1;
-      HInstruction* length = AddInstruction(new(zone()) HConstant(
-          argument_count));
-      HInstruction* checked_key = AddBoundsCheck(key, length);
+      HInstruction* length = Add<HConstant>(argument_count);
+      HInstruction* checked_key = Add<HBoundsCheck>(key, length);
       result = new(zone()) HAccessArgumentsAt(elements, length, checked_key);
     }
   }
@@ -7514,7 +6828,7 @@ void HOptimizedGraphBuilder::VisitProperty(Property* expr) {
   HInstruction* instr = NULL;
   if (expr->IsStringLength()) {
     HValue* string = Pop();
-    BuildCheckNonSmi(string);
+    BuildCheckHeapObject(string);
     AddInstruction(HCheckInstanceType::NewIsString(string, zone()));
     instr = HStringLength::New(zone(), string);
   } else if (expr->IsStringAccess()) {
@@ -7529,7 +6843,7 @@ void HOptimizedGraphBuilder::VisitProperty(Property* expr) {
 
   } else if (expr->IsFunctionPrototype()) {
     HValue* function = Pop();
-    BuildCheckNonSmi(function);
+    BuildCheckHeapObject(function);
     instr = new(zone()) HLoadFunctionPrototype(function);
 
   } else if (expr->key()->IsPropertyName()) {
@@ -7552,7 +6866,7 @@ void HOptimizedGraphBuilder::VisitProperty(Property* expr) {
       if (LookupGetter(map, name, &getter, &holder)) {
         AddCheckConstantFunction(holder, Top(), map);
         if (FLAG_inline_accessors && TryInlineGetter(getter, expr)) return;
-        AddInstruction(new(zone()) HPushArgument(Pop()));
+        Add<HPushArgument>(Pop());
         instr = new(zone()) HCallConstantFunction(getter, 1);
       } else {
         instr = BuildLoadNamedMonomorphic(Pop(), name, expr, map);
@@ -7594,8 +6908,7 @@ void HOptimizedGraphBuilder::AddCheckPrototypeMaps(Handle<JSObject> holder,
                                                    Handle<Map> receiver_map) {
   if (!holder.is_null()) {
     Handle<JSObject> prototype(JSObject::cast(receiver_map->prototype()));
-    AddInstruction(
-        new(zone()) HCheckPrototypeMaps(prototype, holder, zone()));
+    Add<HCheckPrototypeMaps>(prototype, holder, zone(), top_info());
   }
 }
 
@@ -7703,7 +7016,7 @@ void HOptimizedGraphBuilder::HandlePolymorphicCallNamed(
         empty_smi_block->Goto(number_block);
         set_current_block(not_smi_block);
       } else {
-        BuildCheckNonSmi(receiver);
+        BuildCheckHeapObject(receiver);
       }
     }
     HBasicBlock* if_true = graph()->CreateBasicBlock();
@@ -7740,7 +7053,7 @@ void HOptimizedGraphBuilder::HandlePolymorphicCallNamed(
     expr->ComputeTarget(map, name);
     AddCheckPrototypeMaps(expr->holder(), map);
     if (FLAG_trace_inlining && FLAG_polymorphic_inlining) {
-      Handle<JSFunction> caller = info()->closure();
+      Handle<JSFunction> caller = current_info()->closure();
       SmartArrayPointer<char> caller_name =
           caller->shared()->DebugName()->ToCString();
       PrintF("Trying to inline the polymorphic call to %s from %s\n",
@@ -7824,7 +7137,7 @@ int HOptimizedGraphBuilder::InliningAstSize(Handle<JSFunction> target) {
 
   // Precondition: call is monomorphic and we have found a target with the
   // appropriate arity.
-  Handle<JSFunction> caller = info()->closure();
+  Handle<JSFunction> caller = current_info()->closure();
   Handle<SharedFunctionInfo> target_shared(target->shared());
 
   // Do a quick check on source code length to avoid parsing large
@@ -7860,16 +7173,16 @@ bool HOptimizedGraphBuilder::TryInline(CallKind call_kind,
   int nodes_added = InliningAstSize(target);
   if (nodes_added == kNotInlinable) return false;
 
-  Handle<JSFunction> caller = info()->closure();
+  Handle<JSFunction> caller = current_info()->closure();
 
   if (nodes_added > Min(FLAG_max_inlined_nodes, kUnlimitedMaxInlinedNodes)) {
     TraceInline(target, caller, "target AST is too large [early]");
     return false;
   }
 
-#if !defined(V8_TARGET_ARCH_IA32)
+#if !V8_TARGET_ARCH_IA32
   // Target must be able to use caller's context.
-  CompilationInfo* outer_info = info();
+  CompilationInfo* outer_info = current_info();
   if (target->context() != outer_info->closure()->context() ||
       outer_info->scope()->contains_with() ||
       outer_info->scope()->num_heap_slots() > 0) {
@@ -7998,7 +7311,7 @@ bool HOptimizedGraphBuilder::TryInline(CallKind call_kind,
 
   // Type-check the inlined function.
   ASSERT(target_shared->has_deoptimization_support());
-  AstTyper::Type(&target_info);
+  AstTyper::Run(&target_info);
 
   // Save the pending call context. Set up new one for the inlined function.
   // The function state is new-allocated because we need to delete it
@@ -8016,53 +7329,39 @@ bool HOptimizedGraphBuilder::TryInline(CallKind call_kind,
                                      undefined,
                                      function_state()->inlining_kind(),
                                      undefined_receiver);
-#ifdef V8_TARGET_ARCH_IA32
+#if V8_TARGET_ARCH_IA32
   // IA32 only, overwrite the caller's context in the deoptimization
   // environment with the correct one.
   //
   // TODO(kmillikin): implement the same inlining on other platforms so we
   // can remove the unsightly ifdefs in this function.
-  HConstant* context =
-      new(zone()) HConstant(Handle<Context>(target->context()),
-                            Representation::Tagged());
-  AddInstruction(context);
+  HConstant* context = Add<HConstant>(Handle<Context>(target->context()));
   inner_env->BindContext(context);
 #endif
 
   AddSimulate(return_id);
   current_block()->UpdateEnvironment(inner_env);
-  ZoneList<HValue*>* arguments_values = NULL;
+  HArgumentsObject* arguments_object = NULL;
 
-  // If the function uses arguments copy current arguments values
-  // to use them for materialization.
+  // If the function uses arguments object create and bind one, also copy
+  // current arguments values to use them for materialization.
   if (function->scope()->arguments() != NULL) {
+    ASSERT(function->scope()->arguments()->IsStackAllocated());
     HEnvironment* arguments_env = inner_env->arguments_environment();
     int arguments_count = arguments_env->parameter_count();
-    arguments_values = new(zone()) ZoneList<HValue*>(arguments_count, zone());
+    arguments_object = Add<HArgumentsObject>(arguments_count, zone());
+    inner_env->Bind(function->scope()->arguments(), arguments_object);
     for (int i = 0; i < arguments_count; i++) {
-      arguments_values->Add(arguments_env->Lookup(i), zone());
+      arguments_object->AddArgument(arguments_env->Lookup(i), zone());
     }
   }
 
   HEnterInlined* enter_inlined =
-      new(zone()) HEnterInlined(target,
-                                arguments_count,
-                                function,
-                                function_state()->inlining_kind(),
-                                function->scope()->arguments(),
-                                arguments_values,
-                                undefined_receiver,
-                                zone());
+      Add<HEnterInlined>(target, arguments_count, function,
+                         function_state()->inlining_kind(),
+                         function->scope()->arguments(),
+                         arguments_object, undefined_receiver, zone());
   function_state()->set_entry(enter_inlined);
-  AddInstruction(enter_inlined);
-
-  // If the function uses arguments object create and bind one.
-  if (function->scope()->arguments() != NULL) {
-    ASSERT(function->scope()->arguments()->IsStackAllocated());
-    inner_env->Bind(function->scope()->arguments(),
-                    graph()->GetArgumentsObject());
-  }
-
 
   VisitDeclarations(target_info.scope()->declarations());
   VisitStatements(function->body());
@@ -8209,14 +7508,14 @@ bool HOptimizedGraphBuilder::TryInlineGetter(Handle<JSFunction> getter,
 
 
 bool HOptimizedGraphBuilder::TryInlineSetter(Handle<JSFunction> setter,
-                                             Assignment* assignment,
+                                             BailoutId id,
+                                             BailoutId assignment_id,
                                              HValue* implicit_return_value) {
   return TryInline(CALL_AS_METHOD,
                    setter,
                    1,
                    implicit_return_value,
-                   assignment->id(),
-                   assignment->AssignmentId(),
+                   id, assignment_id,
                    SETTER_CALL_RETURN);
 }
 
@@ -8300,11 +7599,9 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall(
         HValue* string = Pop();
         HValue* context = environment()->LookupContext();
         ASSERT(!expr->holder().is_null());
-        AddInstruction(new(zone()) HCheckPrototypeMaps(
-            Call::GetPrototypeForPrimitiveCheck(STRING_CHECK,
-                expr->holder()->GetIsolate()),
-            expr->holder(),
-            zone()));
+        Add<HCheckPrototypeMaps>(Call::GetPrototypeForPrimitiveCheck(
+                STRING_CHECK, expr->holder()->GetIsolate()),
+            expr->holder(), zone(), top_info());
         HInstruction* char_code =
             BuildStringCharCodeAt(context, string, index);
         if (id == kStringCharCodeAt) {
@@ -8368,16 +7665,14 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall(
             result =
                 HUnaryMathOperation::New(zone(), context, left, kMathPowHalf);
           } else if (exponent == -0.5) {
-            HConstant* double_one = new(zone()) HConstant(
-                1, Representation::Double());
-            AddInstruction(double_one);
+            HValue* one = graph()->GetConstant1();
             HInstruction* sqrt =
                 HUnaryMathOperation::New(zone(), context, left, kMathPowHalf);
             AddInstruction(sqrt);
             // MathPowHalf doesn't have side effects so there's no need for
             // an environment simulation here.
             ASSERT(!sqrt->HasObservableSideEffects());
-            result = HDiv::New(zone(), context, double_one, sqrt);
+            result = HDiv::New(zone(), context, one, sqrt);
           } else if (exponent == 2.0) {
             result = HMul::New(zone(), context, left, left);
           }
@@ -8397,8 +7692,7 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall(
         AddCheckConstantFunction(expr->holder(), receiver, receiver_map);
         Drop(1);  // Receiver.
         HValue* context = environment()->LookupContext();
-        HGlobalObject* global_object = new(zone()) HGlobalObject(context);
-        AddInstruction(global_object);
+        HGlobalObject* global_object = Add<HGlobalObject>(context);
         HRandom* result = new(zone()) HRandom(global_object);
         ast_context()->ReturnInstruction(result, expr->id());
         return true;
@@ -8455,7 +7749,7 @@ bool HOptimizedGraphBuilder::TryCallApply(Call* expr) {
     return false;
   }
 
-  if (info()->scope()->arguments() == NULL) return false;
+  if (current_info()->scope()->arguments() == NULL) return false;
 
   ZoneList<Expression*>* args = expr->arguments();
   if (args->length() != 2) return false;
@@ -8477,12 +7771,9 @@ bool HOptimizedGraphBuilder::TryCallApply(Call* expr) {
   HValue* receiver = Pop();
 
   if (function_state()->outer() == NULL) {
-    HInstruction* elements = AddInstruction(
-        new(zone()) HArgumentsElements(false));
-    HInstruction* length =
-        AddInstruction(new(zone()) HArgumentsLength(elements));
-    HValue* wrapped_receiver =
-        AddInstruction(new(zone()) HWrapReceiver(receiver, function));
+    HInstruction* elements = Add<HArgumentsElements>(false);
+    HInstruction* length = Add<HArgumentsLength>(elements);
+    HValue* wrapped_receiver = Add<HWrapReceiver>(receiver, function);
     HInstruction* result =
         new(zone()) HApplyArguments(function,
                                     wrapped_receiver,
@@ -8494,13 +7785,10 @@ bool HOptimizedGraphBuilder::TryCallApply(Call* expr) {
   } else {
     // We are inside inlined function and we know exactly what is inside
     // arguments object. But we need to be able to materialize at deopt.
-    // TODO(mstarzinger): For now we just ensure arguments are pushed
-    // right after HEnterInlined, but we could be smarter about this.
-    EnsureArgumentsArePushedForAccess();
     ASSERT_EQ(environment()->arguments_environment()->parameter_count(),
-              function_state()->entry()->arguments_values()->length());
-    HEnterInlined* entry = function_state()->entry();
-    ZoneList<HValue*>* arguments_values = entry->arguments_values();
+              function_state()->entry()->arguments_object()->arguments_count());
+    HArgumentsObject* args = function_state()->entry()->arguments_object();
+    const ZoneList<HValue*>* arguments_values = args->arguments_values();
     int arguments_count = arguments_values->length();
     PushAndAdd(new(zone()) HWrapReceiver(receiver, function));
     for (int i = 1; i < arguments_count; i++) {
@@ -8696,8 +7984,8 @@ void HOptimizedGraphBuilder::VisitCall(Call* expr) {
       LookupResult lookup(isolate());
       GlobalPropertyAccess type = LookupGlobalProperty(var, &lookup, false);
       if (type == kUseCell &&
-          !info()->global_object()->IsAccessCheckNeeded()) {
-        Handle<GlobalObject> global(info()->global_object());
+          !current_info()->global_object()->IsAccessCheckNeeded()) {
+        Handle<GlobalObject> global(current_info()->global_object());
         known_global_function = expr->ComputeGlobalTarget(global, &lookup);
       }
       if (known_global_function) {
@@ -8710,14 +7998,12 @@ void HOptimizedGraphBuilder::VisitCall(Call* expr) {
 
         CHECK_ALIVE(VisitForValue(expr->expression()));
         HValue* function = Pop();
-        AddInstruction(new(zone()) HCheckFunction(function, expr->target()));
+        Add<HCheckFunction>(function, expr->target());
 
         // Replace the global object with the global receiver.
-        HGlobalReceiver* global_receiver =
-            new(zone()) HGlobalReceiver(global_object);
+        HGlobalReceiver* global_receiver = Add<HGlobalReceiver>(global_object);
         // Index of the receiver from the top of the expression stack.
         const int receiver_index = argument_count - 1;
-        AddInstruction(global_receiver);
         ASSERT(environment()->ExpressionStackAt(receiver_index)->
                IsGlobalObject());
         environment()->SetExpressionStackAt(receiver_index, global_receiver);
@@ -8732,16 +8018,23 @@ void HOptimizedGraphBuilder::VisitCall(Call* expr) {
         }
         if (TryInlineCall(expr)) return;
 
-        if (expr->target().is_identical_to(info()->closure())) {
+        if (expr->target().is_identical_to(current_info()->closure())) {
           graph()->MarkRecursive();
         }
 
-        call = PreProcessCall(new(zone()) HCallKnownGlobal(expr->target(),
+        if (CallStubCompiler::HasCustomCallGenerator(expr->target())) {
+          // When the target has a custom call IC generator, use the IC,
+          // because it is likely to generate better code.
+          HValue* context = environment()->LookupContext();
+          call = PreProcessCall(
+              new(zone()) HCallNamed(context, var->name(), argument_count));
+        } else {
+          call = PreProcessCall(new(zone()) HCallKnownGlobal(expr->target(),
                                                            argument_count));
+        }
       } else {
         HValue* context = environment()->LookupContext();
-        HGlobalObject* receiver = new(zone()) HGlobalObject(context);
-        AddInstruction(receiver);
+        HGlobalObject* receiver = Add<HGlobalObject>(context);
         PushAndAdd(new(zone()) HPushArgument(receiver));
         CHECK_ALIVE(VisitArgumentList(expr->arguments()));
 
@@ -8755,12 +8048,11 @@ void HOptimizedGraphBuilder::VisitCall(Call* expr) {
       CHECK_ALIVE(VisitForValue(expr->expression()));
       HValue* function = Top();
       HValue* context = environment()->LookupContext();
-      HGlobalObject* global = new(zone()) HGlobalObject(context);
-      AddInstruction(global);
+      HGlobalObject* global = Add<HGlobalObject>(context);
       HGlobalReceiver* receiver = new(zone()) HGlobalReceiver(global);
       PushAndAdd(receiver);
       CHECK_ALIVE(VisitExpressions(expr->arguments()));
-      AddInstruction(new(zone()) HCheckFunction(function, expr->target()));
+      Add<HCheckFunction>(function, expr->target());
 
       if (TryInlineBuiltinFunctionCall(expr, true)) {  // Drop the function.
         if (FLAG_trace_inlining) {
@@ -8786,10 +8078,8 @@ void HOptimizedGraphBuilder::VisitCall(Call* expr) {
       CHECK_ALIVE(VisitForValue(expr->expression()));
       HValue* function = Top();
       HValue* context = environment()->LookupContext();
-      HGlobalObject* global_object = new(zone()) HGlobalObject(context);
-      AddInstruction(global_object);
-      HGlobalReceiver* receiver = new(zone()) HGlobalReceiver(global_object);
-      AddInstruction(receiver);
+      HGlobalObject* global_object = Add<HGlobalObject>(context);
+      HGlobalReceiver* receiver = Add<HGlobalReceiver>(global_object);
       PushAndAdd(new(zone()) HPushArgument(receiver));
       CHECK_ALIVE(VisitArgumentList(expr->arguments()));
 
@@ -8807,8 +8097,7 @@ void HOptimizedGraphBuilder::VisitCall(Call* expr) {
 static bool IsAllocationInlineable(Handle<JSFunction> constructor) {
   return constructor->has_initial_map() &&
       constructor->initial_map()->instance_type() == JS_OBJECT_TYPE &&
-      constructor->initial_map()->instance_size() < HAllocate::kMaxInlineSize &&
-      constructor->initial_map()->InitialPropertiesLength() == 0;
+      constructor->initial_map()->instance_size() < HAllocateObject::kMaxSize;
 }
 
 
@@ -8818,7 +8107,6 @@ void HOptimizedGraphBuilder::VisitCallNew(CallNew* expr) {
   ASSERT(current_block()->HasPredecessor());
   int argument_count = expr->arguments()->length() + 1;  // Plus constructor.
   HValue* context = environment()->LookupContext();
-  Factory* factory = isolate()->factory();
 
   if (FLAG_inline_construct &&
       expr->IsMonomorphic() &&
@@ -8829,8 +8117,7 @@ void HOptimizedGraphBuilder::VisitCallNew(CallNew* expr) {
     HValue* function = Top();
     CHECK_ALIVE(VisitExpressions(expr->arguments()));
     Handle<JSFunction> constructor = expr->target();
-    HValue* check = AddInstruction(
-        new(zone()) HCheckFunction(function, constructor));
+    HValue* check = Add<HCheckFunction>(function, constructor);
 
     // Force completion of inobject slack tracking before generating
     // allocation code to finalize instance size.
@@ -8838,84 +8125,19 @@ void HOptimizedGraphBuilder::VisitCallNew(CallNew* expr) {
       constructor->shared()->CompleteInobjectSlackTracking();
     }
 
-    // Calculate instance size from initial map of constructor.
-    ASSERT(constructor->has_initial_map());
-    Handle<Map> initial_map(constructor->initial_map());
-    int instance_size = initial_map->instance_size();
-    ASSERT(initial_map->InitialPropertiesLength() == 0);
-
-    // Allocate an instance of the implicit receiver object.
-    HValue* size_in_bytes =
-        AddInstruction(new(zone()) HConstant(instance_size,
-            Representation::Integer32()));
-
-    HAllocate::Flags flags = HAllocate::DefaultFlags();
-    if (FLAG_pretenuring_call_new &&
-        isolate()->heap()->ShouldGloballyPretenure()) {
-      flags = static_cast<HAllocate::Flags>(
-          flags | HAllocate::CAN_ALLOCATE_IN_OLD_POINTER_SPACE);
-    }
-
-    HInstruction* receiver =
-        AddInstruction(new(zone()) HAllocate(context,
-                                             size_in_bytes,
-                                             HType::JSObject(),
-                                             flags));
-    HAllocate::cast(receiver)->set_known_initial_map(initial_map);
-
-    // Load the initial map from the constructor.
-    HValue* constructor_value =
-        AddInstruction(new(zone()) HConstant(constructor,
-            Representation::Tagged()));
-    HValue* initial_map_value =
-        AddLoad(constructor_value, HObjectAccess::ForJSObjectOffset(
-            JSFunction::kPrototypeOrInitialMapOffset));
-
-    // Initialize map and fields of the newly allocated object.
-    { NoObservableSideEffectsScope no_effects(this);
-      ASSERT(initial_map->instance_type() == JS_OBJECT_TYPE);
-      AddStore(receiver,
-               HObjectAccess::ForJSObjectOffset(JSObject::kMapOffset),
-               initial_map_value);
-      HValue* empty_fixed_array =
-          AddInstruction(new(zone()) HConstant(factory->empty_fixed_array(),
-              Representation::Tagged()));
-      AddStore(receiver,
-               HObjectAccess::ForJSObjectOffset(JSObject::kPropertiesOffset),
-               empty_fixed_array);
-      AddStore(receiver,
-               HObjectAccess::ForJSObjectOffset(JSObject::kElementsOffset),
-               empty_fixed_array);
-      if (initial_map->inobject_properties() != 0) {
-        HConstant* undefined = graph()->GetConstantUndefined();
-        for (int i = 0; i < initial_map->inobject_properties(); i++) {
-          int property_offset = JSObject::kHeaderSize + i * kPointerSize;
-          AddStore(receiver,
-                   HObjectAccess::ForJSObjectOffset(property_offset),
-                   undefined);
-        }
-      }
-    }
-
-    // Replace the constructor function with a newly allocated receiver using
-    // the index of the receiver from the top of the expression stack.
+    // Replace the constructor function with a newly allocated receiver.
+    HInstruction* receiver = Add<HAllocateObject>(context, constructor);
+    // Index of the receiver from the top of the expression stack.
     const int receiver_index = argument_count - 1;
     ASSERT(environment()->ExpressionStackAt(receiver_index) == function);
     environment()->SetExpressionStackAt(receiver_index, receiver);
 
     if (TryInlineConstruct(expr, receiver)) return;
 
-    // TODO(mstarzinger): For now we remove the previous HAllocate and all
-    // corresponding instructions and instead add HPushArgument for the
-    // arguments in case inlining failed.  What we actually should do is for
-    // inlining to try to build a subgraph without mutating the parent graph.
-    HInstruction* instr = current_block()->last();
-    while (instr != initial_map_value) {
-      HInstruction* prev_instr = instr->previous();
-      instr->DeleteAndReplaceWith(NULL);
-      instr = prev_instr;
-    }
-    initial_map_value->DeleteAndReplaceWith(NULL);
+    // TODO(mstarzinger): For now we remove the previous HAllocateObject and
+    // add HPushArgument for the arguments in case inlining failed.  What we
+    // actually should do is emit HInvokeFunction on the constructor instead
+    // of using HCallNew as a fallback.
     receiver->DeleteAndReplaceWith(NULL);
     check->DeleteAndReplaceWith(NULL);
     environment()->SetExpressionStackAt(receiver_index, function);
@@ -8926,18 +8148,17 @@ void HOptimizedGraphBuilder::VisitCallNew(CallNew* expr) {
   } else {
     // The constructor function is both an operand to the instruction and an
     // argument to the construct call.
-    bool use_call_new_array = FLAG_optimize_constructed_arrays &&
-        !(expr->target().is_null()) &&
-        *(expr->target()) == isolate()->global_context()->array_function();
-
+    Handle<JSFunction> array_function(
+        isolate()->global_context()->array_function(), isolate());
     CHECK_ALIVE(VisitArgument(expr->expression()));
     HValue* constructor = HPushArgument::cast(Top())->argument();
     CHECK_ALIVE(VisitArgumentList(expr->arguments()));
     HCallNew* call;
-    if (use_call_new_array) {
-      Handle<JSGlobalPropertyCell> cell = expr->allocation_info_cell();
+    if (expr->target().is_identical_to(array_function)) {
+      Handle<Cell> cell = expr->allocation_info_cell();
+      Add<HCheckFunction>(constructor, array_function);
       call = new(zone()) HCallNewArray(context, constructor, argument_count,
-                                       cell);
+                                       cell, expr->elements_kind());
     } else {
       call = new(zone()) HCallNew(context, constructor, argument_count);
     }
@@ -9074,11 +8295,10 @@ void HOptimizedGraphBuilder::VisitSub(UnaryOperation* expr) {
   HValue* context = environment()->LookupContext();
   HInstruction* instr =
       HMul::New(zone(), context, value, graph()->GetConstantMinus1());
-  TypeInfo info = expr->type();
-  Representation rep = ToRepresentation(info);
-  if (info.IsUninitialized()) {
+  Handle<Type> operand_type = expr->expression()->lower_type();
+  Representation rep = ToRepresentation(operand_type);
+  if (operand_type->Is(Type::None())) {
     AddSoftDeoptimize();
-    info = TypeInfo::Unknown();
   }
   if (instr->IsBinaryOperation()) {
     HBinaryOperation::cast(instr)->set_observed_input_representation(1, rep);
@@ -9091,8 +8311,8 @@ void HOptimizedGraphBuilder::VisitSub(UnaryOperation* expr) {
 void HOptimizedGraphBuilder::VisitBitNot(UnaryOperation* expr) {
   CHECK_ALIVE(VisitForValue(expr->expression()));
   HValue* value = Pop();
-  TypeInfo info = expr->type();
-  if (info.IsUninitialized()) {
+  Handle<Type> operand_type = expr->expression()->lower_type();
+  if (operand_type->Is(Type::None())) {
     AddSoftDeoptimize();
   }
   HInstruction* instr = new(zone()) HBitNot(value);
@@ -9150,8 +8370,8 @@ HInstruction* HOptimizedGraphBuilder::BuildIncrement(
   // The input to the count operation is on top of the expression stack.
   TypeInfo info = expr->type();
   Representation rep = ToRepresentation(info);
-  if (rep.IsTagged()) {
-    rep = Representation::Integer32();
+  if (rep.IsNone() || rep.IsTagged()) {
+    rep = Representation::Smi();
   }
 
   if (returns_original_input) {
@@ -9159,8 +8379,11 @@ HInstruction* HOptimizedGraphBuilder::BuildIncrement(
     // actual HChange instruction we need is (sometimes) added in a later
     // phase, so it is not available now to be used as an input to HAdd and
     // as the return value.
-    HInstruction* number_input = new(zone()) HForceRepresentation(Pop(), rep);
-    AddInstruction(number_input);
+    HInstruction* number_input = Add<HForceRepresentation>(Pop(), rep);
+    if (!rep.IsDouble()) {
+      number_input->SetFlag(HInstruction::kFlexibleRepresentation);
+      number_input->SetFlag(HInstruction::kCannotBeTagged);
+    }
     Push(number_input);
   }
 
@@ -9172,10 +8395,7 @@ HInstruction* HOptimizedGraphBuilder::BuildIncrement(
       : graph()->GetConstantMinus1();
   HValue* context = environment()->LookupContext();
   HInstruction* instr = HAdd::New(zone(), context, Top(), delta);
-  // We can't insert a simulate here, because it would break deoptimization,
-  // so the HAdd must not have side effects, so we must freeze its
-  // representation.
-  instr->AssumeRepresentation(rep);
+  instr->SetFlag(HInstruction::kCannotBeTagged);
   instr->ClearAllSideEffects();
   AddInstruction(instr);
   return instr;
@@ -9231,13 +8451,13 @@ void HOptimizedGraphBuilder::VisitCountOperation(CountOperation* expr) {
         // Bail out if we try to mutate a parameter value in a function
         // using the arguments object.  We do not (yet) correctly handle the
         // arguments property of the function.
-        if (info()->scope()->arguments() != NULL) {
+        if (current_info()->scope()->arguments() != NULL) {
           // Parameters will rewrite to context slots.  We have no direct
           // way to detect that the variable is a parameter so we use a
           // linear search of the parameter list.
-          int count = info()->scope()->num_parameters();
+          int count = current_info()->scope()->num_parameters();
           for (int i = 0; i < count; ++i) {
-            if (var == info()->scope()->parameter(i)) {
+            if (var == current_info()->scope()->parameter(i)) {
               return Bailout("assignment to parameter in arguments object");
             }
           }
@@ -9246,9 +8466,8 @@ void HOptimizedGraphBuilder::VisitCountOperation(CountOperation* expr) {
         HValue* context = BuildContextChainWalk(var);
         HStoreContextSlot::Mode mode = IsLexicalVariableMode(var->mode())
             ? HStoreContextSlot::kCheckDeoptimize : HStoreContextSlot::kNoCheck;
-        HStoreContextSlot* instr =
-            new(zone()) HStoreContextSlot(context, var->index(), mode, after);
-        AddInstruction(instr);
+        HStoreContextSlot* instr = Add<HStoreContextSlot>(context, var->index(),
+                                                          mode, after);
         if (instr->HasObservableSideEffects()) {
           AddSimulate(expr->AssignmentId(), REMOVABLE_SIMULATE);
         }
@@ -9272,10 +8491,11 @@ void HOptimizedGraphBuilder::VisitCountOperation(CountOperation* expr) {
 
       Handle<String> name = prop->key()->AsLiteral()->AsPropertyName();
       Handle<Map> map;
-      HInstruction* load;
+      HInstruction* load = NULL;
       bool monomorphic = prop->IsMonomorphic();
+      SmallMapList* types = prop->GetReceiverTypes();
       if (monomorphic) {
-        map = prop->GetReceiverTypes()->first();
+        map = types->first();
         if (map->is_dictionary_map()) monomorphic = false;
       }
       if (monomorphic) {
@@ -9286,9 +8506,10 @@ void HOptimizedGraphBuilder::VisitCountOperation(CountOperation* expr) {
         } else {
           load = BuildLoadNamedMonomorphic(object, name, prop, map);
         }
-      } else {
-        load = BuildLoadNamedGeneric(object, name, prop);
+      } else if (types != NULL && types->length() > 1) {
+        load = TryLoadPolymorphicAsMonomorphic(prop, object, types, name);
       }
+      if (load == NULL) load = BuildLoadNamedGeneric(object, name, prop);
       PushAndAdd(load);
       if (load->HasObservableSideEffects()) {
         AddSimulate(prop->LoadId(), REMOVABLE_SIMULATE);
@@ -9376,16 +8597,16 @@ HInstruction* HOptimizedGraphBuilder::BuildStringCharCodeAt(
       int32_t i = c_index->NumberValueAsInteger32();
       Handle<String> s = c_string->StringValue();
       if (i < 0 || i >= s->length()) {
-        return new(zone()) HConstant(OS::nan_value(), Representation::Double());
+        return new(zone()) HConstant(OS::nan_value());
       }
       return new(zone()) HConstant(s->Get(i));
     }
   }
-  BuildCheckNonSmi(string);
+  BuildCheckHeapObject(string);
   AddInstruction(HCheckInstanceType::NewIsString(string, zone()));
   HInstruction* length = HStringLength::New(zone(), string);
   AddInstruction(length);
-  HInstruction* checked_index = AddBoundsCheck(index, length);
+  HInstruction* checked_index = Add<HBoundsCheck>(index, length);
   return new(zone()) HStringCharCodeAt(context, string, checked_index);
 }
 
@@ -9452,27 +8673,29 @@ HInstruction* HOptimizedGraphBuilder::BuildBinaryOperation(
     HValue* left,
     HValue* right) {
   HValue* context = environment()->LookupContext();
-  TypeInfo left_info = expr->left_type();
-  TypeInfo right_info = expr->right_type();
-  TypeInfo result_info = expr->result_type();
-  bool has_fixed_right_arg = expr->has_fixed_right_arg();
-  int fixed_right_arg_value = expr->fixed_right_arg_value();
-  Representation left_rep = ToRepresentation(left_info);
-  Representation right_rep = ToRepresentation(right_info);
-  Representation result_rep = ToRepresentation(result_info);
-  if (left_info.IsUninitialized()) {
-    // Can't have initialized one but not the other.
-    ASSERT(right_info.IsUninitialized());
+  Handle<Type> left_type = expr->left()->lower_type();
+  Handle<Type> right_type = expr->right()->lower_type();
+  Handle<Type> result_type = expr->result_type();
+  Maybe<int> fixed_right_arg = expr->fixed_right_arg();
+  Representation left_rep = ToRepresentation(left_type);
+  Representation right_rep = ToRepresentation(right_type);
+  Representation result_rep = ToRepresentation(result_type);
+  if (left_type->Is(Type::None())) {
+    AddSoftDeoptimize();
+    // TODO(rossberg): we should be able to get rid of non-continuous defaults.
+    left_type = handle(Type::Any(), isolate());
+  }
+  if (right_type->Is(Type::None())) {
     AddSoftDeoptimize();
-    left_info = right_info = TypeInfo::Unknown();
+    right_type = handle(Type::Any(), isolate());
   }
   HInstruction* instr = NULL;
   switch (expr->op()) {
     case Token::ADD:
-      if (left_info.IsString() && right_info.IsString()) {
-        BuildCheckNonSmi(left);
+      if (left_type->Is(Type::String()) && right_type->Is(Type::String())) {
+        BuildCheckHeapObject(left);
         AddInstruction(HCheckInstanceType::NewIsString(left, zone()));
-        BuildCheckNonSmi(right);
+        BuildCheckHeapObject(right);
         AddInstruction(HCheckInstanceType::NewIsString(right, zone()));
         instr = HStringAdd::New(zone(), context, left, right);
       } else {
@@ -9486,12 +8709,7 @@ HInstruction* HOptimizedGraphBuilder::BuildBinaryOperation(
       instr = HMul::New(zone(), context, left, right);
       break;
     case Token::MOD:
-      instr = HMod::New(zone(),
-                        context,
-                        left,
-                        right,
-                        has_fixed_right_arg,
-                        fixed_right_arg_value);
+      instr = HMod::New(zone(), context, left, right, fixed_right_arg);
       break;
     case Token::DIV:
       instr = HDiv::New(zone(), context, left, right);
@@ -9502,7 +8720,8 @@ HInstruction* HOptimizedGraphBuilder::BuildBinaryOperation(
       break;
     case Token::BIT_OR: {
       HValue* operand, *shift_amount;
-      if (left_info.IsInteger32() && right_info.IsInteger32() &&
+      if (left_type->Is(Type::Signed32()) &&
+          right_type->Is(Type::Signed32()) &&
           MatchRotateRight(left, right, &operand, &shift_amount)) {
         instr = new(zone()) HRor(context, operand, shift_amount);
       } else {
@@ -9544,7 +8763,7 @@ static bool IsClassOfTest(CompareOperation* expr) {
   if (call == NULL) return false;
   Literal* literal = expr->right()->AsLiteral();
   if (literal == NULL) return false;
-  if (!literal->handle()->IsString()) return false;
+  if (!literal->value()->IsString()) return false;
   if (!call->name()->IsOneByteEqualTo(STATIC_ASCII_VECTOR("_ClassOf"))) {
     return false;
   }
@@ -9688,8 +8907,10 @@ void HOptimizedGraphBuilder::VisitArithmeticExpression(BinaryOperation* expr) {
 }
 
 
+// TODO(rossberg): this should die eventually.
 Representation HOptimizedGraphBuilder::ToRepresentation(TypeInfo info) {
   if (info.IsUninitialized()) return Representation::None();
+  // TODO(verwaest): Return Smi rather than Integer32.
   if (info.IsSmi()) return Representation::Integer32();
   if (info.IsInteger32()) return Representation::Integer32();
   if (info.IsDouble()) return Representation::Double();
@@ -9698,6 +8919,14 @@ Representation HOptimizedGraphBuilder::ToRepresentation(TypeInfo info) {
 }
 
 
+Representation HOptimizedGraphBuilder::ToRepresentation(Handle<Type> type) {
+  if (type->Is(Type::None())) return Representation::None();
+  if (type->Is(Type::Signed32())) return Representation::Integer32();
+  if (type->Is(Type::Number())) return Representation::Double();
+  return Representation::Tagged();
+}
+
+
 void HOptimizedGraphBuilder::HandleLiteralCompareTypeof(CompareOperation* expr,
                                                         HTypeof* typeof_expr,
                                                         Handle<String> check) {
@@ -9780,25 +9009,19 @@ void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) {
     CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
     HValue* value = Pop();
     Literal* literal = expr->right()->AsLiteral();
-    Handle<String> rhs = Handle<String>::cast(literal->handle());
+    Handle<String> rhs = Handle<String>::cast(literal->value());
     HClassOfTestAndBranch* instr =
         new(zone()) HClassOfTestAndBranch(value, rhs);
     instr->set_position(expr->position());
     return ast_context()->ReturnControl(instr, expr->id());
   }
 
-  TypeInfo left_type = expr->left_type();
-  TypeInfo right_type = expr->right_type();
-  TypeInfo overall_type = expr->overall_type();
-  Representation combined_rep = ToRepresentation(overall_type);
+  Handle<Type> left_type = expr->left()->lower_type();
+  Handle<Type> right_type = expr->right()->lower_type();
+  Handle<Type> combined_type = expr->combined_type();
+  Representation combined_rep = ToRepresentation(combined_type);
   Representation left_rep = ToRepresentation(left_type);
   Representation right_rep = ToRepresentation(right_type);
-  // Check if this expression was ever executed according to type feedback.
-  // Note that for the special typeof/null/undefined cases we get unknown here.
-  if (overall_type.IsUninitialized()) {
-    AddSoftDeoptimize();
-    overall_type = left_type = right_type = TypeInfo::Unknown();
-  }
 
   CHECK_ALIVE(VisitForValue(expr->left()));
   CHECK_ALIVE(VisitForValue(expr->right()));
@@ -9836,10 +9059,10 @@ void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) {
     VariableProxy* proxy = expr->right()->AsVariableProxy();
     bool global_function = (proxy != NULL) && proxy->var()->IsUnallocated();
     if (global_function &&
-        info()->has_global_object() &&
-        !info()->global_object()->IsAccessCheckNeeded()) {
+        current_info()->has_global_object() &&
+        !current_info()->global_object()->IsAccessCheckNeeded()) {
       Handle<String> name = proxy->name();
-      Handle<GlobalObject> global(info()->global_object());
+      Handle<GlobalObject> global(current_info()->global_object());
       LookupResult lookup(isolate());
       global->Lookup(*name, &lookup);
       if (lookup.IsNormal() && lookup.GetValue()->IsJSFunction()) {
@@ -9859,23 +9082,35 @@ void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) {
       result->set_position(expr->position());
       return ast_context()->ReturnInstruction(result, expr->id());
     } else {
-      AddInstruction(new(zone()) HCheckFunction(right, target));
+      Add<HCheckFunction>(right, target);
       HInstanceOfKnownGlobal* result =
           new(zone()) HInstanceOfKnownGlobal(context, left, target);
       result->set_position(expr->position());
       return ast_context()->ReturnInstruction(result, expr->id());
     }
+
+    // Code below assumes that we don't fall through.
+    UNREACHABLE();
   } else if (op == Token::IN) {
     HIn* result = new(zone()) HIn(context, left, right);
     result->set_position(expr->position());
     return ast_context()->ReturnInstruction(result, expr->id());
-  } else if (overall_type.IsNonPrimitive()) {
+  }
+
+  // Cases handled below depend on collected type feedback. They should
+  // soft deoptimize when there is no type feedback.
+  if (combined_type->Is(Type::None())) {
+    AddSoftDeoptimize();
+    combined_type = left_type = right_type = handle(Type::Any(), isolate());
+  }
+
+  if (combined_type->Is(Type::Receiver())) {
     switch (op) {
       case Token::EQ:
       case Token::EQ_STRICT: {
         // Can we get away with map check and not instance type check?
-        Handle<Map> map = expr->map();
-        if (!map.is_null()) {
+        if (combined_type->IsClass()) {
+          Handle<Map> map = combined_type->AsClass();
           AddCheckMapsWithTransitions(left, map);
           AddCheckMapsWithTransitions(right, map);
           HCompareObjectEqAndBranch* result =
@@ -9883,9 +9118,9 @@ void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) {
           result->set_position(expr->position());
           return ast_context()->ReturnControl(result, expr->id());
         } else {
-          BuildCheckNonSmi(left);
+          BuildCheckHeapObject(left);
           AddInstruction(HCheckInstanceType::NewIsSpecObject(left, zone()));
-          BuildCheckNonSmi(right);
+          BuildCheckHeapObject(right);
           AddInstruction(HCheckInstanceType::NewIsSpecObject(right, zone()));
           HCompareObjectEqAndBranch* result =
               new(zone()) HCompareObjectEqAndBranch(left, right);
@@ -9896,11 +9131,11 @@ void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) {
       default:
         return Bailout("Unsupported non-primitive compare");
     }
-  } else if (overall_type.IsInternalizedString() &&
+  } else if (combined_type->Is(Type::InternalizedString()) &&
              Token::IsEqualityOp(op)) {
-    BuildCheckNonSmi(left);
+    BuildCheckHeapObject(left);
     AddInstruction(HCheckInstanceType::NewIsInternalizedString(left, zone()));
-    BuildCheckNonSmi(right);
+    BuildCheckHeapObject(right);
     AddInstruction(HCheckInstanceType::NewIsInternalizedString(right, zone()));
     HCompareObjectEqAndBranch* result =
         new(zone()) HCompareObjectEqAndBranch(left, right);
@@ -9915,6 +9150,10 @@ void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) {
       result->set_position(expr->position());
       return ast_context()->ReturnInstruction(result, expr->id());
     } else {
+      // TODO(verwaest): Remove once ToRepresentation properly returns Smi when
+      // the IC measures Smi.
+      if (left_type->Is(Type::Smi())) left_rep = Representation::Smi();
+      if (right_type->Is(Type::Smi())) right_rep = Representation::Smi();
       HCompareIDAndBranch* result =
           new(zone()) HCompareIDAndBranch(left, right, op);
       result->set_observed_input_representation(left_rep, right_rep);
@@ -9931,8 +9170,8 @@ void HOptimizedGraphBuilder::HandleLiteralCompareNil(CompareOperation* expr,
   ASSERT(!HasStackOverflow());
   ASSERT(current_block() != NULL);
   ASSERT(current_block()->HasPredecessor());
+  ASSERT(expr->op() == Token::EQ || expr->op() == Token::EQ_STRICT);
   HIfContinuation continuation;
-  CompareNilICStub::Types types;
   if (expr->op() == Token::EQ_STRICT) {
     IfBuilder if_nil(this);
     if_nil.If<HCompareObjectEqAndBranch>(
@@ -9943,11 +9182,9 @@ void HOptimizedGraphBuilder::HandleLiteralCompareNil(CompareOperation* expr,
     if_nil.CaptureContinuation(&continuation);
     return ast_context()->ReturnContinuation(&continuation, expr->id());
   }
-  types = CompareNilICStub::Types(expr->compare_nil_types());
-  if (types.IsEmpty()) types = CompareNilICStub::Types::FullCompare();
-  Handle<Map> map_handle = expr->map();
-  BuildCompareNil(value, types, map_handle,
-                  expr->position(), &continuation);
+  Handle<Type> type = expr->combined_type()->Is(Type::None())
+      ? handle(Type::Any(), isolate_) : expr->combined_type();
+  BuildCompareNil(value, type, expr->position(), &continuation);
   return ast_context()->ReturnContinuation(&continuation, expr->id());
 }
 
@@ -9957,8 +9194,7 @@ HInstruction* HOptimizedGraphBuilder::BuildThisFunction() {
   // this-function is not a constant, except inside an inlined body.
   if (function_state()->outer() != NULL) {
       return new(zone()) HConstant(
-          function_state()->compilation_info()->closure(),
-          Representation::Tagged());
+          function_state()->compilation_info()->closure());
   } else {
       return new(zone()) HThisFunction;
   }
@@ -9972,31 +9208,43 @@ HInstruction* HOptimizedGraphBuilder::BuildFastLiteral(
     int data_size,
     int pointer_size,
     AllocationSiteMode mode) {
-  Zone* zone = this->zone();
-  int total_size = data_size + pointer_size;
-
   NoObservableSideEffectsScope no_effects(this);
 
-  HAllocate::Flags flags = HAllocate::CAN_ALLOCATE_IN_NEW_SPACE;
-  // TODO(hpayer): add support for old data space
-  if (isolate()->heap()->ShouldGloballyPretenure() &&
-      data_size == 0) {
-    flags = static_cast<HAllocate::Flags>(
-        flags | HAllocate::CAN_ALLOCATE_IN_OLD_POINTER_SPACE);
+  HInstruction* target = NULL;
+  HInstruction* data_target = NULL;
+
+  HAllocate::Flags flags = HAllocate::DefaultFlags();
+
+  if (isolate()->heap()->ShouldGloballyPretenure()) {
+    if (data_size != 0) {
+      HAllocate::Flags data_flags =
+          static_cast<HAllocate::Flags>(HAllocate::DefaultFlags() |
+              HAllocate::CAN_ALLOCATE_IN_OLD_DATA_SPACE);
+      HValue* size_in_bytes = Add<HConstant>(data_size);
+      data_target = Add<HAllocate>(context, size_in_bytes,
+                                   HType::JSObject(), data_flags);
+      Handle<Map> free_space_map = isolate()->factory()->free_space_map();
+      AddStoreMapConstant(data_target, free_space_map);
+      HObjectAccess access =
+          HObjectAccess::ForJSObjectOffset(FreeSpace::kSizeOffset);
+      AddStore(data_target, access, size_in_bytes);
+    }
+    if (pointer_size != 0) {
+      flags = static_cast<HAllocate::Flags>(
+          flags | HAllocate::CAN_ALLOCATE_IN_OLD_POINTER_SPACE);
+      HValue* size_in_bytes = Add<HConstant>(pointer_size);
+      target = Add<HAllocate>(context, size_in_bytes, HType::JSObject(), flags);
+    }
+  } else {
+    HValue* size_in_bytes = Add<HConstant>(data_size + pointer_size);
+    target = Add<HAllocate>(context, size_in_bytes, HType::JSObject(), flags);
   }
 
-  HValue* size_in_bytes =
-      AddInstruction(new(zone) HConstant(total_size,
-          Representation::Integer32()));
-  HInstruction* result =
-      AddInstruction(new(zone) HAllocate(context,
-                                         size_in_bytes,
-                                         HType::JSObject(),
-                                         flags));
   int offset = 0;
-  BuildEmitDeepCopy(boilerplate_object, original_boilerplate_object, result,
-                    &offset, mode);
-  return result;
+  int data_offset = 0;
+  BuildEmitDeepCopy(boilerplate_object, original_boilerplate_object, target,
+                    &offset, data_target, &data_offset, mode);
+  return target;
 }
 
 
@@ -10005,46 +9253,56 @@ void HOptimizedGraphBuilder::BuildEmitDeepCopy(
     Handle<JSObject> original_boilerplate_object,
     HInstruction* target,
     int* offset,
+    HInstruction* data_target,
+    int* data_offset,
     AllocationSiteMode mode) {
-  Zone* zone = this->zone();
-
   Handle<FixedArrayBase> elements(boilerplate_object->elements());
   Handle<FixedArrayBase> original_elements(
       original_boilerplate_object->elements());
   ElementsKind kind = boilerplate_object->map()->elements_kind();
 
-  // Increase the offset so that subsequent objects end up right after
-  // this object and its backing store.
   int object_offset = *offset;
   int object_size = boilerplate_object->map()->instance_size();
   int elements_size = (elements->length() > 0 &&
       elements->map() != isolate()->heap()->fixed_cow_array_map()) ?
           elements->Size() : 0;
-  int elements_offset = *offset + object_size;
+  int elements_offset = 0;
 
-  *offset += object_size + elements_size;
+  if (data_target != NULL && boilerplate_object->HasFastDoubleElements()) {
+    elements_offset = *data_offset;
+    *data_offset += elements_size;
+  } else {
+    // Place elements right after this object.
+    elements_offset = *offset + object_size;
+    *offset += elements_size;
+  }
+  // Increase the offset so that subsequent objects end up right after this
+  // object (and it's elements if they are allocated in the same space).
+  *offset += object_size;
 
   // Copy object elements if non-COW.
   HValue* object_elements = BuildEmitObjectHeader(boilerplate_object, target,
-      object_offset, elements_offset, elements_size);
+      data_target, object_offset, elements_offset, elements_size);
   if (object_elements != NULL) {
     BuildEmitElements(elements, original_elements, kind, object_elements,
-        target, offset);
+        target, offset, data_target, data_offset);
   }
 
   // Copy in-object properties.
-  HValue* object_properties =
-      AddInstruction(new(zone) HInnerAllocatedObject(target, object_offset));
-  BuildEmitInObjectProperties(boilerplate_object, original_boilerplate_object,
-      object_properties, target, offset);
+  if (boilerplate_object->map()->NumberOfFields() != 0) {
+    HValue* object_properties =
+        Add<HInnerAllocatedObject>(target, object_offset);
+    BuildEmitInObjectProperties(boilerplate_object, original_boilerplate_object,
+        object_properties, target, offset, data_target, data_offset);
+  }
 
   // Create allocation site info.
   if (mode == TRACK_ALLOCATION_SITE &&
       boilerplate_object->map()->CanTrackAllocationSite()) {
     elements_offset += AllocationSiteInfo::kSize;
     *offset += AllocationSiteInfo::kSize;
-    HInstruction* original_boilerplate = AddInstruction(new(zone) HConstant(
-        original_boilerplate_object, Representation::Tagged()));
+    HInstruction* original_boilerplate =
+        Add<HConstant>(original_boilerplate_object);
     BuildCreateAllocationSiteInfo(target, JSArray::kSize, original_boilerplate);
   }
 }
@@ -10053,15 +9311,14 @@ void HOptimizedGraphBuilder::BuildEmitDeepCopy(
 HValue* HOptimizedGraphBuilder::BuildEmitObjectHeader(
     Handle<JSObject> boilerplate_object,
     HInstruction* target,
+    HInstruction* data_target,
     int object_offset,
     int elements_offset,
     int elements_size) {
   ASSERT(boilerplate_object->properties()->length() == 0);
-  Zone* zone = this->zone();
   HValue* result = NULL;
 
-  HValue* object_header =
-      AddInstruction(new(zone) HInnerAllocatedObject(target, object_offset));
+  HValue* object_header = Add<HInnerAllocatedObject>(target, object_offset);
   Handle<Map> boilerplate_object_map(boilerplate_object->map());
   AddStoreMapConstant(object_header, boilerplate_object_map);
 
@@ -10069,11 +9326,13 @@ HValue* HOptimizedGraphBuilder::BuildEmitObjectHeader(
   if (elements_size == 0) {
     Handle<Object> elements_field =
         Handle<Object>(boilerplate_object->elements(), isolate());
-    elements = AddInstruction(new(zone) HConstant(
-        elements_field, Representation::Tagged()));
+    elements = Add<HConstant>(elements_field);
   } else {
-    elements = AddInstruction(new(zone) HInnerAllocatedObject(
-        target, elements_offset));
+    if (data_target != NULL && boilerplate_object->HasFastDoubleElements()) {
+      elements = Add<HInnerAllocatedObject>(data_target, elements_offset);
+    } else {
+      elements = Add<HInnerAllocatedObject>(target, elements_offset);
+    }
     result = elements;
   }
   AddStore(object_header, HObjectAccess::ForElementsPointer(), elements);
@@ -10081,8 +9340,7 @@ HValue* HOptimizedGraphBuilder::BuildEmitObjectHeader(
   Handle<Object> properties_field =
       Handle<Object>(boilerplate_object->properties(), isolate());
   ASSERT(*properties_field == isolate()->heap()->empty_fixed_array());
-  HInstruction* properties = AddInstruction(new(zone) HConstant(
-      properties_field, Representation::None()));
+  HInstruction* properties = Add<HConstant>(properties_field);
   HObjectAccess access = HObjectAccess::ForPropertiesPointer();
   AddStore(object_header, access, properties);
 
@@ -10091,8 +9349,7 @@ HValue* HOptimizedGraphBuilder::BuildEmitObjectHeader(
         Handle<JSArray>::cast(boilerplate_object);
     Handle<Object> length_field =
         Handle<Object>(boilerplate_array->length(), isolate());
-    HInstruction* length = AddInstruction(new(zone) HConstant(
-        length_field, Representation::None()));
+    HInstruction* length = Add<HConstant>(length_field);
 
     ASSERT(boilerplate_array->length()->IsSmi());
     Representation representation =
@@ -10111,8 +9368,9 @@ void HOptimizedGraphBuilder::BuildEmitInObjectProperties(
     Handle<JSObject> original_boilerplate_object,
     HValue* object_properties,
     HInstruction* target,
-    int* offset) {
-  Zone* zone = this->zone();
+    int* offset,
+    HInstruction* data_target,
+    int* data_offset) {
   Handle<DescriptorArray> descriptors(
       boilerplate_object->map()->instance_descriptors());
   int limit = boilerplate_object->map()->NumberOfOwnDescriptors();
@@ -10139,28 +9397,32 @@ void HOptimizedGraphBuilder::BuildEmitInObjectProperties(
       Handle<JSObject> original_value_object = Handle<JSObject>::cast(
           Handle<Object>(original_boilerplate_object->InObjectPropertyAt(index),
               isolate()));
-      HInstruction* value_instruction =
-          AddInstruction(new(zone) HInnerAllocatedObject(target, *offset));
+      HInstruction* value_instruction = Add<HInnerAllocatedObject>(target,
+                                                                   *offset);
 
       AddStore(object_properties, access, value_instruction);
 
       BuildEmitDeepCopy(value_object, original_value_object, target,
-          offset, DONT_TRACK_ALLOCATION_SITE);
+          offset, data_target, data_offset, DONT_TRACK_ALLOCATION_SITE);
     } else {
       Representation representation = details.representation();
-      HInstruction* value_instruction = AddInstruction(new(zone) HConstant(
-          value, Representation::Tagged()));
+      HInstruction* value_instruction = Add<HConstant>(value);
 
       if (representation.IsDouble()) {
         // Allocate a HeapNumber box and store the value into it.
-        HInstruction* double_box =
-            AddInstruction(new(zone) HInnerAllocatedObject(target, *offset));
+        HInstruction* double_box;
+        if (data_target != NULL) {
+          double_box = Add<HInnerAllocatedObject>(data_target, *data_offset);
+          *data_offset += HeapNumber::kSize;
+        } else {
+          double_box = Add<HInnerAllocatedObject>(target, *offset);
+          *offset += HeapNumber::kSize;
+        }
         AddStoreMapConstant(double_box,
             isolate()->factory()->heap_number_map());
         AddStore(double_box, HObjectAccess::ForHeapNumberValue(),
             value_instruction, Representation::Double());
         value_instruction = double_box;
-        *offset += HeapNumber::kSize;
       }
 
       AddStore(object_properties, access, value_instruction);
@@ -10168,9 +9430,8 @@ void HOptimizedGraphBuilder::BuildEmitInObjectProperties(
   }
 
   int inobject_properties = boilerplate_object->map()->inobject_properties();
-  HInstruction* value_instruction = AddInstruction(new(zone)
-      HConstant(isolate()->factory()->one_pointer_filler_map(),
-          Representation::Tagged()));
+  HInstruction* value_instruction =
+      Add<HConstant>(isolate()->factory()->one_pointer_filler_map());
   for (int i = copied_fields; i < inobject_properties; i++) {
     ASSERT(boilerplate_object->IsJSObject());
     int property_offset = boilerplate_object->GetInObjectPropertyOffset(i);
@@ -10186,12 +9447,11 @@ void HOptimizedGraphBuilder::BuildEmitElements(
     ElementsKind kind,
     HValue* object_elements,
     HInstruction* target,
-    int* offset) {
-  Zone* zone = this->zone();
-
+    int* offset,
+    HInstruction* data_target,
+    int* data_offset) {
   int elements_length = elements->length();
-  HValue* object_elements_length =
-      AddInstruction(new(zone) HConstant(elements_length));
+  HValue* object_elements_length = Add<HConstant>(elements_length);
 
   BuildInitializeElementsHeader(object_elements, kind, object_elements_length);
 
@@ -10200,7 +9460,7 @@ void HOptimizedGraphBuilder::BuildEmitElements(
     BuildEmitFixedDoubleArray(elements, kind, object_elements);
   } else if (elements->IsFixedArray()) {
     BuildEmitFixedArray(elements, original_elements, kind, object_elements,
-        target, offset);
+        target, offset, data_target, data_offset);
   } else {
     UNREACHABLE();
   }
@@ -10211,17 +9471,16 @@ void HOptimizedGraphBuilder::BuildEmitFixedDoubleArray(
     Handle<FixedArrayBase> elements,
     ElementsKind kind,
     HValue* object_elements) {
-  Zone* zone = this->zone();
-  HInstruction* boilerplate_elements = AddInstruction(new(zone) HConstant(
-      elements, Representation::Tagged()));
+  HInstruction* boilerplate_elements = Add<HConstant>(elements);
   int elements_length = elements->length();
   for (int i = 0; i < elements_length; i++) {
-    HValue* key_constant = AddInstruction(new(zone) HConstant(i));
+    HValue* key_constant = Add<HConstant>(i);
     HInstruction* value_instruction =
-        AddInstruction(new(zone) HLoadKeyed(
-            boilerplate_elements, key_constant, NULL, kind, ALLOW_RETURN_HOLE));
-    HInstruction* store = AddInstruction(new(zone) HStoreKeyed(
-        object_elements, key_constant, value_instruction, kind));
+        Add<HLoadKeyed>(boilerplate_elements, key_constant,
+                        static_cast<HValue*>(NULL), kind,
+                        ALLOW_RETURN_HOLE);
+    HInstruction* store = Add<HStoreKeyed>(object_elements, key_constant,
+                                           value_instruction, kind);
     store->SetFlag(HValue::kAllowUndefinedAsNaN);
   }
 }
@@ -10233,34 +9492,32 @@ void HOptimizedGraphBuilder::BuildEmitFixedArray(
     ElementsKind kind,
     HValue* object_elements,
     HInstruction* target,
-    int* offset) {
-  Zone* zone = this->zone();
-  HInstruction* boilerplate_elements = AddInstruction(new(zone) HConstant(
-      elements, Representation::Tagged()));
+    int* offset,
+    HInstruction* data_target,
+    int* data_offset) {
+  HInstruction* boilerplate_elements = Add<HConstant>(elements);
   int elements_length = elements->length();
   Handle<FixedArray> fast_elements = Handle<FixedArray>::cast(elements);
   Handle<FixedArray> original_fast_elements =
       Handle<FixedArray>::cast(original_elements);
   for (int i = 0; i < elements_length; i++) {
     Handle<Object> value(fast_elements->get(i), isolate());
-    HValue* key_constant = AddInstruction(new(zone) HConstant(i));
+    HValue* key_constant = Add<HConstant>(i);
     if (value->IsJSObject()) {
       Handle<JSObject> value_object = Handle<JSObject>::cast(value);
       Handle<JSObject> original_value_object = Handle<JSObject>::cast(
           Handle<Object>(original_fast_elements->get(i), isolate()));
-      HInstruction* value_instruction =
-          AddInstruction(new(zone) HInnerAllocatedObject(target, *offset));
-      AddInstruction(new(zone) HStoreKeyed(
-          object_elements, key_constant, value_instruction, kind));
+      HInstruction* value_instruction = Add<HInnerAllocatedObject>(target,
+                                                                   *offset);
+      Add<HStoreKeyed>(object_elements, key_constant, value_instruction, kind);
       BuildEmitDeepCopy(value_object, original_value_object, target,
-          offset, DONT_TRACK_ALLOCATION_SITE);
+          offset, data_target, data_offset, DONT_TRACK_ALLOCATION_SITE);
     } else {
       HInstruction* value_instruction =
-          AddInstruction(new(zone) HLoadKeyed(
-              boilerplate_elements, key_constant, NULL, kind,
-              ALLOW_RETURN_HOLE));
-      AddInstruction(new(zone) HStoreKeyed(
-          object_elements, key_constant, value_instruction, kind));
+          Add<HLoadKeyed>(boilerplate_elements, key_constant,
+                          static_cast<HValue*>(NULL), kind,
+                          ALLOW_RETURN_HOLE);
+      Add<HStoreKeyed>(object_elements, key_constant, value_instruction, kind);
     }
   }
 }
@@ -10282,12 +9539,10 @@ void HOptimizedGraphBuilder::VisitDeclarations(
     Handle<FixedArray> array =
        isolate()->factory()->NewFixedArray(globals_.length(), TENURED);
     for (int i = 0; i < globals_.length(); ++i) array->set(i, *globals_.at(i));
-    int flags = DeclareGlobalsEvalFlag::encode(info()->is_eval()) |
-                DeclareGlobalsNativeFlag::encode(info()->is_native()) |
-                DeclareGlobalsLanguageMode::encode(info()->language_mode());
-    HInstruction* result = new(zone()) HDeclareGlobals(
-        environment()->LookupContext(), array, flags);
-    AddInstruction(result);
+    int flags = DeclareGlobalsEvalFlag::encode(current_info()->is_eval()) |
+        DeclareGlobalsNativeFlag::encode(current_info()->is_native()) |
+        DeclareGlobalsLanguageMode::encode(current_info()->language_mode());
+    Add<HDeclareGlobals>(environment()->LookupContext(), array, flags);
     globals_.Clear();
   }
 }
@@ -10317,9 +9572,8 @@ void HOptimizedGraphBuilder::VisitVariableDeclaration(
       if (hole_init) {
         HValue* value = graph()->GetConstantHole();
         HValue* context = environment()->LookupContext();
-        HStoreContextSlot* store = new(zone()) HStoreContextSlot(
+        HStoreContextSlot* store = Add<HStoreContextSlot>(
             context, variable->index(), HStoreContextSlot::kNoCheck, value);
-        AddInstruction(store);
         if (store->HasObservableSideEffects()) {
           AddSimulate(proxy->id(), REMOVABLE_SIMULATE);
         }
@@ -10338,8 +9592,8 @@ void HOptimizedGraphBuilder::VisitFunctionDeclaration(
   switch (variable->location()) {
     case Variable::UNALLOCATED: {
       globals_.Add(variable->name(), zone());
-      Handle<SharedFunctionInfo> function =
-          Compiler::BuildFunctionInfo(declaration->fun(), info()->script());
+      Handle<SharedFunctionInfo> function = Compiler::BuildFunctionInfo(
+          declaration->fun(), current_info()->script());
       // Check for stack-overflow exception.
       if (function.is_null()) return SetStackOverflow();
       globals_.Add(function, zone());
@@ -10356,9 +9610,8 @@ void HOptimizedGraphBuilder::VisitFunctionDeclaration(
       CHECK_ALIVE(VisitForValue(declaration->fun()));
       HValue* value = Pop();
       HValue* context = environment()->LookupContext();
-      HStoreContextSlot* store = new(zone()) HStoreContextSlot(
+      HStoreContextSlot* store = Add<HStoreContextSlot>(
           context, variable->index(), HStoreContextSlot::kNoCheck, value);
-      AddInstruction(store);
       if (store->HasObservableSideEffects()) {
         AddSimulate(proxy->id(), REMOVABLE_SIMULATE);
       }
@@ -10530,8 +9783,7 @@ void HOptimizedGraphBuilder::GenerateArgumentsLength(CallRuntime* call) {
   // function is blacklisted by AstNode::IsInlineable.
   ASSERT(function_state()->outer() == NULL);
   ASSERT(call->arguments()->length() == 0);
-  HInstruction* elements = AddInstruction(
-      new(zone()) HArgumentsElements(false));
+  HInstruction* elements = Add<HArgumentsElements>(false);
   HArgumentsLength* result = new(zone()) HArgumentsLength(elements);
   return ast_context()->ReturnInstruction(result, call->id());
 }
@@ -10545,10 +9797,9 @@ void HOptimizedGraphBuilder::GenerateArguments(CallRuntime* call) {
   ASSERT(call->arguments()->length() == 1);
   CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
   HValue* index = Pop();
-  HInstruction* elements = AddInstruction(
-      new(zone()) HArgumentsElements(false));
-  HInstruction* length = AddInstruction(new(zone()) HArgumentsLength(elements));
-  HInstruction* checked_index = AddBoundsCheck(index, length);
+  HInstruction* elements = Add<HArgumentsElements>(false);
+  HInstruction* length = Add<HArgumentsLength>(elements);
+  HInstruction* checked_index = Add<HBoundsCheck>(index, length);
   HAccessArgumentsAt* result =
       new(zone()) HAccessArgumentsAt(elements, length, checked_index);
   return ast_context()->ReturnInstruction(result, call->id());
@@ -10575,7 +9826,7 @@ void HOptimizedGraphBuilder::GenerateValueOf(CallRuntime* call) {
 void HOptimizedGraphBuilder::GenerateDateField(CallRuntime* call) {
   ASSERT(call->arguments()->length() == 2);
   ASSERT_NE(NULL, call->arguments()->at(1)->AsLiteral());
-  Smi* index = Smi::cast(*(call->arguments()->at(1)->AsLiteral()->handle()));
+  Smi* index = Smi::cast(*(call->arguments()->at(1)->AsLiteral()->value()));
   CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
   HValue* date = Pop();
   HDateField* result = new(zone()) HDateField(date, index);
@@ -10712,8 +9963,7 @@ void HOptimizedGraphBuilder::GenerateLog(CallRuntime* call) {
 // Fast support for Math.random().
 void HOptimizedGraphBuilder::GenerateRandomHeapNumber(CallRuntime* call) {
   HValue* context = environment()->LookupContext();
-  HGlobalObject* global_object = new(zone()) HGlobalObject(context);
-  AddInstruction(global_object);
+  HGlobalObject* global_object = Add<HGlobalObject>(context);
   HRandom* result = new(zone()) HRandom(global_object);
   return ast_context()->ReturnInstruction(result, call->id());
 }
@@ -10819,15 +10069,14 @@ void HOptimizedGraphBuilder::GenerateCallFunction(CallRuntime* call) {
   current_block()->Finish(typecheck);
 
   set_current_block(if_jsfunction);
-  HInstruction* invoke_result = AddInstruction(
-      new(zone()) HInvokeFunction(context, function, arg_count));
+  HInstruction* invoke_result =
+      Add<HInvokeFunction>(context, function, arg_count);
   Drop(arg_count);
   Push(invoke_result);
   if_jsfunction->Goto(join);
 
   set_current_block(if_nonfunction);
-  HInstruction* call_result = AddInstruction(
-      new(zone()) HCallFunction(context, function, arg_count));
+  HInstruction* call_result = Add<HCallFunction>(context, function, arg_count);
   Drop(arg_count);
   Push(call_result);
   if_nonfunction->Goto(join);
@@ -10940,6 +10189,13 @@ void HOptimizedGraphBuilder::GenerateGeneratorThrow(CallRuntime* call) {
 }
 
 
+void HOptimizedGraphBuilder::GenerateDebugBreakInOptimizedCode(
+    CallRuntime* call) {
+  AddInstruction(new(zone()) HDebugBreak());
+  return ast_context()->ReturnValue(graph()->GetConstant0());
+}
+
+
 #undef CHECK_BAILOUT
 #undef CHECK_ALIVE
 
@@ -11005,6 +10261,7 @@ HEnvironment::HEnvironment(HEnvironment* outer,
       values_(arguments, zone),
       frame_type_(frame_type),
       parameter_count_(arguments),
+      specials_count_(0),
       local_count_(0),
       outer_(outer),
       entry_(NULL),
@@ -11349,8 +10606,8 @@ void HTracer::Trace(const char* name, HGraph* graph, LChunk* chunk) {
 
     {
       Tag HIR_tag(this, "HIR");
-      HInstruction* instruction = current->first();
-      while (instruction != NULL) {
+      for (HInstructionIterator it(current); !it.Done(); it.Advance()) {
+        HInstruction* instruction = it.Current();
         int bci = 0;
         int uses = instruction->UseCount();
         PrintIndent();
@@ -11359,7 +10616,6 @@ void HTracer::Trace(const char* name, HGraph* graph, LChunk* chunk) {
         trace_.Add(" ");
         instruction->PrintTo(&trace_);
         trace_.Add(" <|@\n");
-        instruction = instruction->next();
       }
     }
 
@@ -11484,10 +10740,10 @@ void HStatistics::Print() {
   }
 
   for (int i = 0; i < names_.length(); ++i) {
-    PrintF("%30s", names_[i]);
+    PrintF("%32s", names_[i]);
     double ms = static_cast<double>(timing_[i]) / 1000;
     double percent = static_cast<double>(timing_[i]) * 100 / sum;
-    PrintF(" %8.3f ms / %4.1f %% ", ms, percent);
+    PrintF(" %8.3f ms / %4.1f %% ", ms, percent);
 
     unsigned size = sizes_[i];
     double size_percent = static_cast<double>(size) * 100 / total_size_;
@@ -11497,21 +10753,21 @@ void HStatistics::Print() {
   PrintF("----------------------------------------"
          "---------------------------------------\n");
   int64_t total = create_graph_ + optimize_graph_ + generate_code_;
-  PrintF("%30s - %8.3f ms / %4.1f %% \n",
+  PrintF("%32s %8.3f ms / %4.1f %% \n",
          "Create graph",
          static_cast<double>(create_graph_) / 1000,
          static_cast<double>(create_graph_) * 100 / total);
-  PrintF("%30s - %8.3f ms / %4.1f %% \n",
+  PrintF("%32s %8.3f ms / %4.1f %% \n",
          "Optimize graph",
          static_cast<double>(optimize_graph_) / 1000,
          static_cast<double>(optimize_graph_) * 100 / total);
-  PrintF("%30s - %8.3f ms / %4.1f %% \n",
+  PrintF("%32s %8.3f ms / %4.1f %% \n",
          "Generate and install code",
          static_cast<double>(generate_code_) / 1000,
          static_cast<double>(generate_code_) * 100 / total);
   PrintF("----------------------------------------"
          "---------------------------------------\n");
-  PrintF("%30s - %8.3f ms (%.1f times slower than full code gen)\n",
+  PrintF("%32s %8.3f ms (%.1f times slower than full code gen)\n",
          "Total",
          static_cast<double>(total) / 1000,
          static_cast<double>(total) / full_code_gen_);
@@ -11523,99 +10779,34 @@ void HStatistics::Print() {
   double normalized_size_in_kb = source_size_in_kb > 0
       ? total_size_ / 1024 / source_size_in_kb
       : 0;
-  PrintF("%30s - %8.3f ms           %7.3f kB allocated\n",
+  PrintF("%32s %8.3f ms           %7.3f kB allocated\n",
          "Average per kB source",
          normalized_time, normalized_size_in_kb);
 }
 
 
 void HStatistics::SaveTiming(const char* name, int64_t ticks, unsigned size) {
-  if (name == HPhase::kFullCodeGen) {
-    full_code_gen_ += ticks;
-  } else {
-    total_size_ += size;
-    for (int i = 0; i < names_.length(); ++i) {
-      if (strcmp(names_[i], name) == 0) {
-        timing_[i] += ticks;
-        sizes_[i] += size;
-        return;
-      }
+  total_size_ += size;
+  for (int i = 0; i < names_.length(); ++i) {
+    if (strcmp(names_[i], name) == 0) {
+      timing_[i] += ticks;
+      sizes_[i] += size;
+      return;
     }
-    names_.Add(name);
-    timing_.Add(ticks);
-    sizes_.Add(size);
-  }
-}
-
-
-const char* const HPhase::kFullCodeGen = "Full code generator";
-
-
-HPhase::HPhase(const char* name, Isolate* isolate) {
-  Init(isolate, name, NULL, NULL, NULL);
-}
-
-
-HPhase::HPhase(const char* name, HGraph* graph) {
-  Init(graph->isolate(), name, graph, NULL, NULL);
-}
-
-
-HPhase::HPhase(const char* name, LChunk* chunk) {
-  Init(chunk->isolate(), name, NULL, chunk, NULL);
-}
-
-
-HPhase::HPhase(const char* name, LAllocator* allocator) {
-  Init(allocator->isolate(), name, NULL, NULL, allocator);
-}
-
-
-void HPhase::Init(Isolate* isolate,
-                  const char* name,
-                  HGraph* graph,
-                  LChunk* chunk,
-                  LAllocator* allocator) {
-  isolate_ = isolate;
-  name_ = name;
-  graph_ = graph;
-  chunk_ = chunk;
-  allocator_ = allocator;
-  if (allocator != NULL && chunk_ == NULL) {
-    chunk_ = allocator->chunk();
-  }
-  if (FLAG_hydrogen_stats) {
-    start_ticks_ = OS::Ticks();
-    start_allocation_size_ = Zone::allocation_size_;
   }
+  names_.Add(name);
+  timing_.Add(ticks);
+  sizes_.Add(size);
 }
 
 
 HPhase::~HPhase() {
-  if (FLAG_hydrogen_stats) {
-    int64_t ticks = OS::Ticks() - start_ticks_;
-    unsigned size = Zone::allocation_size_ - start_allocation_size_;
-    isolate_->GetHStatistics()->SaveTiming(name_, ticks, size);
-  }
-
-  // Produce trace output if flag is set so that the first letter of the
-  // phase name matches the command line parameter FLAG_trace_phase.
-  if (FLAG_trace_hydrogen &&
-      OS::StrChr(const_cast<char*>(FLAG_trace_phase), name_[0]) != NULL) {
-    if (graph_ != NULL) {
-      isolate_->GetHTracer()->TraceHydrogen(name_, graph_);
-    }
-    if (chunk_ != NULL) {
-      isolate_->GetHTracer()->TraceLithium(name_, chunk_);
-    }
-    if (allocator_ != NULL) {
-      isolate_->GetHTracer()->TraceLiveRanges(name_, allocator_);
-    }
+  if (ShouldProduceTraceOutput()) {
+    isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
   }
 
 #ifdef DEBUG
-  if (graph_ != NULL) graph_->Verify(false);  // No full verify.
-  if (allocator_ != NULL) allocator_->Verify();
+  graph_->Verify(false);  // No full verify.
 #endif
 }
 
index ad89e50..f80aca1 100644 (file)
@@ -46,6 +46,7 @@ class FunctionState;
 class HEnvironment;
 class HGraph;
 class HLoopInformation;
+class HOsrBuilder;
 class HTracer;
 class LAllocator;
 class LChunk;
@@ -66,6 +67,7 @@ class HBasicBlock: public ZoneObject {
   HInstruction* first() const { return first_; }
   HInstruction* last() const { return last_; }
   void set_last(HInstruction* instr) { last_ = instr; }
+  HInstruction* GetLastInstruction();
   HControlInstruction* end() const { return end_; }
   HLoopInformation* loop_information() const { return loop_information_; }
   const ZoneList<HBasicBlock*>* predecessors() const { return &predecessors_; }
@@ -229,6 +231,19 @@ class HPredecessorIterator BASE_EMBEDDED {
 };
 
 
+class HInstructionIterator BASE_EMBEDDED {
+ public:
+  explicit HInstructionIterator(HBasicBlock* block) : instr_(block->first()) { }
+
+  bool Done() { return instr_ == NULL; }
+  HInstruction* Current() { return instr_; }
+  void Advance() { instr_ = instr_->next(); }
+
+ private:
+  HInstruction* instr_;
+};
+
+
 class HLoopInformation: public ZoneObject {
  public:
   HLoopInformation(HBasicBlock* loop_header, Zone* zone)
@@ -260,6 +275,7 @@ class HLoopInformation: public ZoneObject {
   HStackCheck* stack_check_;
 };
 
+
 class BoundsCheckTable;
 class HGraph: public ZoneObject {
  public:
@@ -281,8 +297,6 @@ class HGraph: public ZoneObject {
   void InsertRepresentationChanges();
   void MarkDeoptimizeOnUndefined();
   void ComputeMinusZeroChecks();
-  void ComputeSafeUint32Operations();
-  void GlobalValueNumbering();
   bool ProcessArgumentsObject();
   void EliminateRedundantPhis();
   void Canonicalize();
@@ -345,24 +359,16 @@ class HGraph: public ZoneObject {
   void Verify(bool do_full_verify) const;
 #endif
 
-  bool has_osr_loop_entry() {
-    return osr_loop_entry_.is_set();
+  bool has_osr() {
+    return osr_ != NULL;
   }
 
-  HBasicBlock* osr_loop_entry() {
-    return osr_loop_entry_.get();
+  void set_osr(HOsrBuilder* osr) {
+    osr_ = osr;
   }
 
-  void set_osr_loop_entry(HBasicBlock* entry) {
-    osr_loop_entry_.set(entry);
-  }
-
-  ZoneList<HUnknownOSRValue*>* osr_values() {
-    return osr_values_.get();
-  }
-
-  void set_osr_values(ZoneList<HUnknownOSRValue*>* values) {
-    osr_values_.set(values);
+  HOsrBuilder* osr() {
+    return osr_;
   }
 
   int update_type_change_checksum(int delta) {
@@ -402,6 +408,12 @@ class HGraph: public ZoneObject {
   }
 
   void MarkDependsOnEmptyArrayProtoElements() {
+    // Add map dependency if not already added.
+    if (depends_on_empty_array_proto_elements_) return;
+    isolate()->initial_object_prototype()->map()->AddDependentCompilationInfo(
+        DependentCode::kElementsCantBeAddedGroup, info());
+    isolate()->initial_array_prototype()->map()->AddDependentCompilationInfo(
+        DependentCode::kElementsCantBeAddedGroup, info());
     depends_on_empty_array_proto_elements_ = true;
   }
 
@@ -409,7 +421,18 @@ class HGraph: public ZoneObject {
     return depends_on_empty_array_proto_elements_;
   }
 
+  bool has_uint32_instructions() {
+    ASSERT(uint32_instructions_ == NULL || !uint32_instructions_->is_empty());
+    return uint32_instructions_ != NULL;
+  }
+
+  ZoneList<HInstruction*>* uint32_instructions() {
+    ASSERT(uint32_instructions_ == NULL || !uint32_instructions_->is_empty());
+    return uint32_instructions_;
+  }
+
   void RecordUint32Instruction(HInstruction* instr) {
+    ASSERT(uint32_instructions_ == NULL || !uint32_instructions_->is_empty());
     if (uint32_instructions_ == NULL) {
       uint32_instructions_ = new(zone()) ZoneList<HInstruction*>(4, zone());
     }
@@ -420,6 +443,12 @@ class HGraph: public ZoneObject {
   HConstant* GetConstant(SetOncePointer<HConstant>* pointer,
                          int32_t integer_value);
 
+  template<class Phase>
+  void Run() {
+    Phase phase(this);
+    phase.Run();
+  }
+
   void MarkLive(HValue* ref, HValue* instr, ZoneList<HValue*>* worklist);
   void MarkLiveInstructions();
   void RemoveDeadInstructions();
@@ -459,8 +488,7 @@ class HGraph: public ZoneObject {
   SetOncePointer<HConstant> constant_invalid_context_;
   SetOncePointer<HArgumentsObject> arguments_object_;
 
-  SetOncePointer<HBasicBlock> osr_loop_entry_;
-  SetOncePointer<ZoneList<HUnknownOSRValue*> > osr_values_;
+  HOsrBuilder* osr_;
 
   CompilationInfo* info_;
   Zone* zone_;
@@ -693,25 +721,6 @@ class HEnvironment: public ZoneObject {
 };
 
 
-class HInferRepresentation BASE_EMBEDDED {
- public:
-  explicit HInferRepresentation(HGraph* graph)
-      : graph_(graph),
-        worklist_(8, graph->zone()),
-        in_worklist_(graph->GetMaximumValueID(), graph->zone()) { }
-
-  void Analyze();
-  void AddToWorklist(HValue* current);
-
- private:
-  Zone* zone() const { return graph_->zone(); }
-
-  HGraph* graph_;
-  ZoneList<HValue*> worklist_;
-  BitVector in_worklist_;
-};
-
-
 class HOptimizedGraphBuilder;
 
 enum ArgumentsAllowedFlag {
@@ -874,6 +883,11 @@ class FunctionState {
   HEnterInlined* entry() { return entry_; }
   void set_entry(HEnterInlined* entry) { entry_ = entry; }
 
+  HArgumentsObject* arguments_object() { return arguments_object_; }
+  void set_arguments_object(HArgumentsObject* arguments_object) {
+    arguments_object_ = arguments_object;
+  }
+
   HArgumentsElements* arguments_elements() { return arguments_elements_; }
   void set_arguments_elements(HArgumentsElements* arguments_elements) {
     arguments_elements_ = arguments_elements;
@@ -907,6 +921,7 @@ class FunctionState {
   // entry.
   HEnterInlined* entry_;
 
+  HArgumentsObject* arguments_object_;
   HArgumentsElements* arguments_elements_;
 
   FunctionState* outer_;
@@ -968,6 +983,7 @@ class HGraphBuilder {
   Zone* zone() const { return info_->zone(); }
   HGraph* graph() const { return graph_; }
   Isolate* isolate() const { return graph_->isolate(); }
+  CompilationInfo* top_info() { return info_; }
 
   HGraph* CreateGraph();
 
@@ -977,9 +993,57 @@ class HGraphBuilder {
 
   // Adding instructions.
   HInstruction* AddInstruction(HInstruction* instr);
+
+  template<class I>
+  I* Add() { return static_cast<I*>(AddInstruction(new(zone()) I())); }
+
+  template<class I, class P1>
+  I* Add(P1 p1) {
+    return static_cast<I*>(AddInstruction(new(zone()) I(p1)));
+  }
+
+  template<class I, class P1, class P2>
+  I* Add(P1 p1, P2 p2) {
+      return static_cast<I*>(AddInstruction(new(zone()) I(p1, p2)));
+  }
+
+  template<class I, class P1, class P2, class P3>
+  I* Add(P1 p1, P2 p2, P3 p3) {
+    return static_cast<I*>(AddInstruction(new(zone()) I(p1, p2, p3)));
+  }
+
+  template<class I, class P1, class P2, class P3, class P4>
+  I* Add(P1 p1, P2 p2, P3 p3, P4 p4) {
+    return static_cast<I*>(AddInstruction(new(zone()) I(p1, p2, p3, p4)));
+  }
+
+  template<class I, class P1, class P2, class P3, class P4, class P5>
+  I* Add(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) {
+    return static_cast<I*>(AddInstruction(new(zone()) I(p1, p2, p3, p4, p5)));
+  }
+
+  template<class I, class P1, class P2, class P3, class P4, class P5, class P6>
+  I* Add(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) {
+    return static_cast<I*>(AddInstruction(
+            new(zone()) I(p1, p2, p3, p4, p5, p6)));
+  }
+
+  template<class I, class P1, class P2, class P3,
+           class P4, class P5, class P6, class P7>
+  I* Add(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7) {
+    return static_cast<I*>(AddInstruction(
+            new(zone()) I(p1, p2, p3, p4, p5, p6, p7)));
+  }
+
+  template<class I, class P1, class P2, class P3, class P4,
+           class P5, class P6, class P7, class P8>
+  I* Add(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8) {
+    return static_cast<I*>(AddInstruction(
+            new(zone()) I(p1, p2, p3, p4, p5, p6, p7, p8)));
+  }
+
   void AddSimulate(BailoutId id,
                    RemovableSimulate removable = FIXED_SIMULATE);
-  HBoundsCheck* AddBoundsCheck(HValue* index, HValue* length);
 
   HReturn* AddReturn(HValue* value);
 
@@ -997,7 +1061,7 @@ class HGraphBuilder {
   HBasicBlock* CreateBasicBlock(HEnvironment* env);
   HBasicBlock* CreateLoopHeaderBlock();
 
-  HValue* BuildCheckNonSmi(HValue* object);
+  HValue* BuildCheckHeapObject(HValue* object);
   HValue* BuildCheckMap(HValue* obj, Handle<Map> map);
 
   // Building common constructs
@@ -1063,6 +1127,8 @@ class HGraphBuilder {
 
   HLoadNamedField* AddLoadElements(HValue *object, HValue *typecheck = NULL);
 
+  HLoadNamedField* AddLoadFixedArrayLength(HValue *object);
+
   class IfBuilder {
    public:
     explicit IfBuilder(HGraphBuilder* builder,
@@ -1077,8 +1143,7 @@ class HGraphBuilder {
     HInstruction* IfCompare(
         HValue* left,
         HValue* right,
-        Token::Value token,
-        Representation input_representation = Representation::Integer32());
+        Token::Value token);
 
     HInstruction* IfCompareMap(HValue* left, Handle<Map> map);
 
@@ -1110,10 +1175,9 @@ class HGraphBuilder {
     HInstruction* OrIfCompare(
         HValue* p1,
         HValue* p2,
-        Token::Value token,
-        Representation input_representation = Representation::Integer32()) {
+        Token::Value token) {
       Or();
-      return IfCompare(p1, p2, token, input_representation);
+      return IfCompare(p1, p2, token);
     }
 
     HInstruction* OrIfCompareMap(HValue* left, Handle<Map> map) {
@@ -1136,10 +1200,9 @@ class HGraphBuilder {
     HInstruction* AndIfCompare(
         HValue* p1,
         HValue* p2,
-        Token::Value token,
-        Representation input_representation = Representation::Integer32()) {
+        Token::Value token) {
       And();
-      return IfCompare(p1, p2, token, input_representation);
+      return IfCompare(p1, p2, token);
     }
 
     HInstruction* AndIfCompareMap(HValue* left, Handle<Map> map) {
@@ -1259,7 +1322,8 @@ class HGraphBuilder {
     JSArrayBuilder(HGraphBuilder* builder,
                    ElementsKind kind,
                    HValue* allocation_site_payload,
-                   bool disable_allocation_sites);
+                   HValue* constructor_function,
+                   AllocationSiteOverrideMode override_mode);
 
     JSArrayBuilder(HGraphBuilder* builder,
                    ElementsKind kind,
@@ -1275,9 +1339,6 @@ class HGraphBuilder {
     int elements_size() const {
       return IsFastDoubleElementsKind(kind_) ? kDoubleSize : kPointerSize;
     }
-    HInstruction* AddInstruction(HInstruction* instr) {
-      return builder_->AddInstruction(instr);
-    }
     HGraphBuilder* builder() { return builder_; }
     HGraph* graph() { return builder_->graph(); }
     int initial_capacity() {
@@ -1350,8 +1411,7 @@ class HGraphBuilder {
 
   void BuildCompareNil(
       HValue* value,
-      CompareNilICStub::Types types,
-      Handle<Map> map,
+      Handle<Type> type,
       int position,
       HIfContinuation* continuation);
 
@@ -1370,7 +1430,6 @@ class HGraphBuilder {
   int no_side_effects_scope_count_;
 };
 
-
 class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor {
  public:
   // A class encapsulating (lazily-allocated) break and continue blocks for
@@ -1488,7 +1547,7 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor {
   void set_ast_context(AstContext* context) { ast_context_ = context; }
 
   // Accessors forwarded to the function state.
-  CompilationInfo* info() const {
+  CompilationInfo* current_info() const {
     return function_state()->compilation_info();
   }
   AstContext* call_context() const {
@@ -1528,8 +1587,6 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor {
   void VisitArithmeticExpression(BinaryOperation* expr);
 
   bool PreProcessOsrEntry(IterationStatement* statement);
-  // True iff. we are compiling for OSR and the statement is the entry.
-  bool HasOsrEntryAt(IterationStatement* statement);
   void VisitLoopBody(IterationStatement* stmt,
                      HBasicBlock* loop_entry,
                      BreakAndContinueInfo* break_info);
@@ -1613,8 +1670,6 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor {
   // Visit a list of expressions from left to right, each in a value context.
   void VisitExpressions(ZoneList<Expression*>* exprs);
 
-  void AddPhi(HPhi* phi);
-
   void PushAndAdd(HInstruction* instr);
 
   // Remove the arguments from the bailout environment and emit instructions
@@ -1622,6 +1677,7 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor {
   template <class Instruction> HInstruction* PreProcessCall(Instruction* call);
 
   static Representation ToRepresentation(TypeInfo info);
+  static Representation ToRepresentation(Handle<Type> type);
 
   void SetUpScope(Scope* scope);
   virtual void VisitStatements(ZoneList<Statement*>* statements);
@@ -1658,7 +1714,8 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor {
   bool TryInlineConstruct(CallNew* expr, HValue* implicit_return_value);
   bool TryInlineGetter(Handle<JSFunction> getter, Property* prop);
   bool TryInlineSetter(Handle<JSFunction> setter,
-                       Assignment* assignment,
+                       BailoutId id,
+                       BailoutId assignment_id,
                        HValue* implicit_return_value);
   bool TryInlineApply(Handle<JSFunction> function,
                       Call* expr,
@@ -1687,11 +1744,19 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor {
                                        HValue* object,
                                        SmallMapList* types,
                                        Handle<String> name);
-  bool HandlePolymorphicArrayLengthLoad(Property* expr,
+  HInstruction* TryLoadPolymorphicAsMonomorphic(Property* expr,
+                                                HValue* object,
+                                                SmallMapList* types,
+                                                Handle<String> name);
+  void HandlePolymorphicStoreNamedField(BailoutId id,
+                                        int position,
+                                        BailoutId assignment_id,
                                         HValue* object,
+                                        HValue* value,
                                         SmallMapList* types,
                                         Handle<String> name);
-  void HandlePolymorphicStoreNamedField(Assignment* expr,
+  bool TryStorePolymorphicAsMonomorphic(int position,
+                                        BailoutId assignment_id,
                                         HValue* object,
                                         HValue* value,
                                         SmallMapList* types,
@@ -1767,6 +1832,14 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor {
   void AddCheckMapsWithTransitions(HValue* object,
                                    Handle<Map> map);
 
+  void BuildStoreNamed(Expression* expression,
+                       BailoutId id,
+                       int position,
+                       BailoutId assignment_id,
+                       Property* prop,
+                       HValue* object,
+                       HValue* value);
+
   HInstruction* BuildStoreNamedField(HValue* object,
                                      Handle<String> name,
                                      HValue* value,
@@ -1801,13 +1874,16 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor {
 
   void BuildEmitDeepCopy(Handle<JSObject> boilerplat_object,
                          Handle<JSObject> object,
-                         HInstruction* result,
+                         HInstruction* target,
                          int* offset,
+                         HInstruction* data_target,
+                         int* data_offset,
                          AllocationSiteMode mode);
 
   MUST_USE_RESULT HValue* BuildEmitObjectHeader(
       Handle<JSObject> boilerplat_object,
       HInstruction* target,
+      HInstruction* data_target,
       int object_offset,
       int elements_offset,
       int elements_size);
@@ -1816,14 +1892,18 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor {
                                    Handle<JSObject> original_boilerplate_object,
                                    HValue* object_properties,
                                    HInstruction* target,
-                                   int* offset);
+                                   int* offset,
+                                   HInstruction* data_target,
+                                   int* data_offset);
 
   void BuildEmitElements(Handle<FixedArrayBase> elements,
                          Handle<FixedArrayBase> original_elements,
                          ElementsKind kind,
                          HValue* object_elements,
                          HInstruction* target,
-                         int* offset);
+                         int* offset,
+                         HInstruction* data_target,
+                         int* data_offset);
 
   void BuildEmitFixedDoubleArray(Handle<FixedArrayBase> elements,
                                  ElementsKind kind,
@@ -1834,7 +1914,9 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor {
                            ElementsKind kind,
                            HValue* object_elements,
                            HInstruction* target,
-                           int* offset);
+                           int* offset,
+                           HInstruction* data_target,
+                           int* data_offset);
 
   void AddCheckPrototypeMaps(Handle<JSObject> holder,
                              Handle<Map> receiver_map);
@@ -1866,9 +1948,12 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor {
 
   bool inline_bailout_;
 
+  HOsrBuilder* osr_;
+
   friend class FunctionState;  // Pushes and pops the state stack.
   friend class AstContext;  // Pushes and pops the AST context stack.
   friend class KeyedLoadFastElementStub;
+  friend class HOsrBuilder;
 
   DISALLOW_COPY_AND_ASSIGN(HOptimizedGraphBuilder);
 };
@@ -1894,6 +1979,10 @@ class HStatistics: public Malloced {
   void Print();
   void SaveTiming(const char* name, int64_t ticks, unsigned size);
 
+  void IncrementFullCodeGen(int64_t full_code_gen) {
+    full_code_gen_ += full_code_gen;
+  }
+
   void IncrementSubtotals(int64_t create_graph,
                           int64_t optimize_graph,
                           int64_t generate_code) {
@@ -1915,30 +2004,20 @@ class HStatistics: public Malloced {
 };
 
 
-class HPhase BASE_EMBEDDED {
+class HPhase : public CompilationPhase {
  public:
-  static const char* const kFullCodeGen;
-
-  HPhase(const char* name, Isolate* isolate);
-  HPhase(const char* name, HGraph* graph);
-  HPhase(const char* name, LChunk* chunk);
-  HPhase(const char* name, LAllocator* allocator);
+  HPhase(const char* name, HGraph* graph)
+      : CompilationPhase(name, graph->info()),
+        graph_(graph) { }
   ~HPhase();
 
- private:
-  void Init(Isolate* isolate,
-            const char* name,
-            HGraph* graph,
-            LChunk* chunk,
-            LAllocator* allocator);
+ protected:
+  HGraph* graph() const { return graph_; }
 
-  Isolate* isolate_;
-  const char* name_;
+ private:
   HGraph* graph_;
-  LChunk* chunk_;
-  LAllocator* allocator_;
-  int64_t start_ticks_;
-  unsigned start_allocation_size_;
+
+  DISALLOW_COPY_AND_ASSIGN(HPhase);
 };
 
 
index 2a0c920..b6ef242 100644 (file)
@@ -132,6 +132,7 @@ Object** RelocInfo::target_object_address() {
 
 void RelocInfo::set_target_object(Object* target, WriteBarrierMode mode) {
   ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
+  ASSERT(!target->IsConsString());
   Memory::Object_at(pc_) = target;
   CPU::FlushICache(pc_, sizeof(Address));
   if (mode == UPDATE_WRITE_BARRIER &&
@@ -162,24 +163,22 @@ void RelocInfo::set_target_runtime_entry(Address target,
 }
 
 
-Handle<JSGlobalPropertyCell> RelocInfo::target_cell_handle() {
-  ASSERT(rmode_ == RelocInfo::GLOBAL_PROPERTY_CELL);
+Handle<Cell> RelocInfo::target_cell_handle() {
+  ASSERT(rmode_ == RelocInfo::CELL);
   Address address = Memory::Address_at(pc_);
-  return Handle<JSGlobalPropertyCell>(
-      reinterpret_cast<JSGlobalPropertyCell**>(address));
+  return Handle<Cell>(reinterpret_cast<Cell**>(address));
 }
 
 
-JSGlobalPropertyCell* RelocInfo::target_cell() {
-  ASSERT(rmode_ == RelocInfo::GLOBAL_PROPERTY_CELL);
-  return JSGlobalPropertyCell::FromValueAddress(Memory::Address_at(pc_));
+Cell* RelocInfo::target_cell() {
+  ASSERT(rmode_ == RelocInfo::CELL);
+  return Cell::FromValueAddress(Memory::Address_at(pc_));
 }
 
 
-void RelocInfo::set_target_cell(JSGlobalPropertyCell* cell,
-                                WriteBarrierMode mode) {
-  ASSERT(rmode_ == RelocInfo::GLOBAL_PROPERTY_CELL);
-  Address address = cell->address() + JSGlobalPropertyCell::kValueOffset;
+void RelocInfo::set_target_cell(Cell* cell, WriteBarrierMode mode) {
+  ASSERT(rmode_ == RelocInfo::CELL);
+  Address address = cell->address() + Cell::kValueOffset;
   Memory::Address_at(pc_) = address;
   CPU::FlushICache(pc_, sizeof(Address));
   if (mode == UPDATE_WRITE_BARRIER && host() != NULL) {
@@ -259,8 +258,8 @@ void RelocInfo::Visit(ObjectVisitor* visitor) {
     CPU::FlushICache(pc_, sizeof(Address));
   } else if (RelocInfo::IsCodeTarget(mode)) {
     visitor->VisitCodeTarget(this);
-  } else if (mode == RelocInfo::GLOBAL_PROPERTY_CELL) {
-    visitor->VisitGlobalPropertyCell(this);
+  } else if (mode == RelocInfo::CELL) {
+    visitor->VisitCell(this);
   } else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
     visitor->VisitExternalReference(this);
     CPU::FlushICache(pc_, sizeof(Address));
@@ -289,8 +288,8 @@ void RelocInfo::Visit(Heap* heap) {
     CPU::FlushICache(pc_, sizeof(Address));
   } else if (RelocInfo::IsCodeTarget(mode)) {
     StaticVisitor::VisitCodeTarget(heap, this);
-  } else if (mode == RelocInfo::GLOBAL_PROPERTY_CELL) {
-    StaticVisitor::VisitGlobalPropertyCell(heap, this);
+  } else if (mode == RelocInfo::CELL) {
+    StaticVisitor::VisitCell(heap, this);
   } else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
     StaticVisitor::VisitExternalReference(this);
     CPU::FlushICache(pc_, sizeof(Address));
index c0b2abd..7bb643a 100644 (file)
@@ -36,7 +36,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
 
 #include "disassembler.h"
 #include "macro-assembler.h"
index 5d11452..353f265 100644 (file)
@@ -410,10 +410,10 @@ class Operand BASE_EMBEDDED {
                    RelocInfo::EXTERNAL_REFERENCE);
   }
 
-  static Operand Cell(Handle<JSGlobalPropertyCell> cell) {
+  static Operand ForCell(Handle<Cell> cell) {
     AllowDeferredHandleDereference embedding_raw_address;
     return Operand(reinterpret_cast<int32_t>(cell.location()),
-                   RelocInfo::GLOBAL_PROPERTY_CELL);
+                   RelocInfo::CELL);
   }
 
   // Returns true if this Operand is a wrapper for the specified register.
index bf4ee94..8aa6e4a 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
 
 #include "codegen.h"
 #include "deoptimizer.h"
@@ -447,6 +447,8 @@ void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) {
 
 static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
                                              bool is_construct) {
+  ProfileEntryHookStub::MaybeCallEntryHook(masm);
+
   // Clear the context before we push it when entering the internal frame.
   __ Set(esi, Immediate(0));
 
@@ -1015,427 +1017,6 @@ void Builtins::Generate_FunctionApply(MacroAssembler* masm) {
 }
 
 
-// Allocate an empty JSArray. The allocated array is put into the result
-// register. If the parameter initial_capacity is larger than zero an elements
-// backing store is allocated with this size and filled with the hole values.
-// Otherwise the elements backing store is set to the empty FixedArray.
-static void AllocateEmptyJSArray(MacroAssembler* masm,
-                                 Register array_function,
-                                 Register result,
-                                 Register scratch1,
-                                 Register scratch2,
-                                 Register scratch3,
-                                 Label* gc_required) {
-  const int initial_capacity = JSArray::kPreallocatedArrayElements;
-  STATIC_ASSERT(initial_capacity >= 0);
-
-  __ LoadInitialArrayMap(array_function, scratch2, scratch1, false);
-
-  // Allocate the JSArray object together with space for a fixed array with the
-  // requested elements.
-  int size = JSArray::kSize;
-  if (initial_capacity > 0) {
-    size += FixedArray::SizeFor(initial_capacity);
-  }
-  __ Allocate(size, result, scratch2, scratch3, gc_required, TAG_OBJECT);
-
-  // Allocated the JSArray. Now initialize the fields except for the elements
-  // array.
-  // result: JSObject
-  // scratch1: initial map
-  // scratch2: start of next object
-  __ mov(FieldOperand(result, JSObject::kMapOffset), scratch1);
-  Factory* factory = masm->isolate()->factory();
-  __ mov(FieldOperand(result, JSArray::kPropertiesOffset),
-         factory->empty_fixed_array());
-  // Field JSArray::kElementsOffset is initialized later.
-  __ mov(FieldOperand(result, JSArray::kLengthOffset), Immediate(0));
-
-  // If no storage is requested for the elements array just set the empty
-  // fixed array.
-  if (initial_capacity == 0) {
-    __ mov(FieldOperand(result, JSArray::kElementsOffset),
-           factory->empty_fixed_array());
-    return;
-  }
-
-  // Calculate the location of the elements array and set elements array member
-  // of the JSArray.
-  // result: JSObject
-  // scratch2: start of next object
-  __ lea(scratch1, Operand(result, JSArray::kSize));
-  __ mov(FieldOperand(result, JSArray::kElementsOffset), scratch1);
-
-  // Initialize the FixedArray and fill it with holes. FixedArray length is
-  // stored as a smi.
-  // result: JSObject
-  // scratch1: elements array
-  // scratch2: start of next object
-  __ mov(FieldOperand(scratch1, FixedArray::kMapOffset),
-         factory->fixed_array_map());
-  __ mov(FieldOperand(scratch1, FixedArray::kLengthOffset),
-         Immediate(Smi::FromInt(initial_capacity)));
-
-  // Fill the FixedArray with the hole value. Inline the code if short.
-  // Reconsider loop unfolding if kPreallocatedArrayElements gets changed.
-  static const int kLoopUnfoldLimit = 4;
-  if (initial_capacity <= kLoopUnfoldLimit) {
-    // Use a scratch register here to have only one reloc info when unfolding
-    // the loop.
-    __ mov(scratch3, factory->the_hole_value());
-    for (int i = 0; i < initial_capacity; i++) {
-      __ mov(FieldOperand(scratch1,
-                          FixedArray::kHeaderSize + i * kPointerSize),
-             scratch3);
-    }
-  } else {
-    Label loop, entry;
-    __ mov(scratch2, Immediate(initial_capacity));
-    __ jmp(&entry);
-    __ bind(&loop);
-    __ mov(FieldOperand(scratch1,
-                        scratch2,
-                        times_pointer_size,
-                        FixedArray::kHeaderSize),
-           factory->the_hole_value());
-    __ bind(&entry);
-    __ dec(scratch2);
-    __ j(not_sign, &loop);
-  }
-}
-
-
-// Allocate a JSArray with the number of elements stored in a register. The
-// register array_function holds the built-in Array function and the register
-// array_size holds the size of the array as a smi. The allocated array is put
-// into the result register and beginning and end of the FixedArray elements
-// storage is put into registers elements_array and elements_array_end  (see
-// below for when that is not the case). If the parameter fill_with_holes is
-// true the allocated elements backing store is filled with the hole values
-// otherwise it is left uninitialized. When the backing store is filled the
-// register elements_array is scratched.
-static void AllocateJSArray(MacroAssembler* masm,
-                            Register array_function,  // Array function.
-                            Register array_size,  // As a smi, cannot be 0.
-                            Register result,
-                            Register elements_array,
-                            Register elements_array_end,
-                            Register scratch,
-                            bool fill_with_hole,
-                            Label* gc_required) {
-  ASSERT(scratch.is(edi));  // rep stos destination
-  ASSERT(!fill_with_hole || array_size.is(ecx));  // rep stos count
-  ASSERT(!fill_with_hole || !result.is(eax));  // result is never eax
-
-  __ LoadInitialArrayMap(array_function, scratch,
-                         elements_array, fill_with_hole);
-
-  // Allocate the JSArray object together with space for a FixedArray with the
-  // requested elements.
-  STATIC_ASSERT(kSmiTagSize == 1 && kSmiTag == 0);
-  __ Allocate(JSArray::kSize + FixedArray::kHeaderSize,
-              times_pointer_size,
-              array_size,
-              REGISTER_VALUE_IS_SMI,
-              result,
-              elements_array_end,
-              scratch,
-              gc_required,
-              TAG_OBJECT);
-
-  // Allocated the JSArray. Now initialize the fields except for the elements
-  // array.
-  // result: JSObject
-  // elements_array: initial map
-  // elements_array_end: start of next object
-  // array_size: size of array (smi)
-  __ mov(FieldOperand(result, JSObject::kMapOffset), elements_array);
-  Factory* factory = masm->isolate()->factory();
-  __ mov(elements_array, factory->empty_fixed_array());
-  __ mov(FieldOperand(result, JSArray::kPropertiesOffset), elements_array);
-  // Field JSArray::kElementsOffset is initialized later.
-  __ mov(FieldOperand(result, JSArray::kLengthOffset), array_size);
-
-  // Calculate the location of the elements array and set elements array member
-  // of the JSArray.
-  // result: JSObject
-  // elements_array_end: start of next object
-  // array_size: size of array (smi)
-  __ lea(elements_array, Operand(result, JSArray::kSize));
-  __ mov(FieldOperand(result, JSArray::kElementsOffset), elements_array);
-
-  // Initialize the fixed array. FixedArray length is stored as a smi.
-  // result: JSObject
-  // elements_array: elements array
-  // elements_array_end: start of next object
-  // array_size: size of array (smi)
-  __ mov(FieldOperand(elements_array, FixedArray::kMapOffset),
-         factory->fixed_array_map());
-  // For non-empty JSArrays the length of the FixedArray and the JSArray is the
-  // same.
-  __ mov(FieldOperand(elements_array, FixedArray::kLengthOffset), array_size);
-
-  // Fill the allocated FixedArray with the hole value if requested.
-  // result: JSObject
-  // elements_array: elements array
-  if (fill_with_hole) {
-    __ SmiUntag(array_size);
-    __ lea(edi, Operand(elements_array,
-                        FixedArray::kHeaderSize - kHeapObjectTag));
-    __ mov(eax, factory->the_hole_value());
-    __ cld();
-    // Do not use rep stos when filling less than kRepStosThreshold
-    // words.
-    const int kRepStosThreshold = 16;
-    Label loop, entry, done;
-    __ cmp(ecx, kRepStosThreshold);
-    __ j(below, &loop);  // Note: ecx > 0.
-    __ rep_stos();
-    __ jmp(&done);
-    __ bind(&loop);
-    __ stos();
-    __ bind(&entry);
-    __ cmp(edi, elements_array_end);
-    __ j(below, &loop);
-    __ bind(&done);
-  }
-}
-
-
-// Create a new array for the built-in Array function. This function allocates
-// the JSArray object and the FixedArray elements array and initializes these.
-// If the Array cannot be constructed in native code the runtime is called. This
-// function assumes the following state:
-//   edi: constructor (built-in Array function)
-//   eax: argc
-//   esp[0]: return address
-//   esp[4]: last argument
-// This function is used for both construct and normal calls of Array. Whether
-// it is a construct call or not is indicated by the construct_call parameter.
-// The only difference between handling a construct call and a normal call is
-// that for a construct call the constructor function in edi needs to be
-// preserved for entering the generic code. In both cases argc in eax needs to
-// be preserved.
-void ArrayNativeCode(MacroAssembler* masm,
-                     bool construct_call,
-                     Label* call_generic_code) {
-  Label argc_one_or_more, argc_two_or_more, prepare_generic_code_call,
-      empty_array, not_empty_array, finish, cant_transition_map, not_double;
-
-  // Push the constructor and argc. No need to tag argc as a smi, as there will
-  // be no garbage collection with this on the stack.
-  int push_count = 0;
-  if (construct_call) {
-    push_count++;
-    __ push(edi);
-  }
-  push_count++;
-  __ push(eax);
-
-  // Check for array construction with zero arguments.
-  __ test(eax, eax);
-  __ j(not_zero, &argc_one_or_more);
-
-  __ bind(&empty_array);
-  // Handle construction of an empty array.
-  AllocateEmptyJSArray(masm,
-                       edi,
-                       eax,
-                       ebx,
-                       ecx,
-                       edi,
-                       &prepare_generic_code_call);
-  __ IncrementCounter(masm->isolate()->counters()->array_function_native(), 1);
-  __ pop(ebx);
-  if (construct_call) {
-    __ pop(edi);
-  }
-  __ ret(kPointerSize);
-
-  // Check for one argument. Bail out if argument is not smi or if it is
-  // negative.
-  __ bind(&argc_one_or_more);
-  __ cmp(eax, 1);
-  __ j(not_equal, &argc_two_or_more);
-  STATIC_ASSERT(kSmiTag == 0);
-  __ mov(ecx, Operand(esp, (push_count + 1) * kPointerSize));
-  __ test(ecx, ecx);
-  __ j(not_zero, &not_empty_array);
-
-  // The single argument passed is zero, so we jump to the code above used to
-  // handle the case of no arguments passed. To adapt the stack for that we move
-  // the return address and the pushed constructor (if pushed) one stack slot up
-  // thereby removing the passed argument. Argc is also on the stack - at the
-  // bottom - and it needs to be changed from 1 to 0 to have the call into the
-  // runtime system work in case a GC is required.
-  for (int i = push_count; i > 0; i--) {
-    __ mov(eax, Operand(esp, i * kPointerSize));
-    __ mov(Operand(esp, (i + 1) * kPointerSize), eax);
-  }
-  __ Drop(2);  // Drop two stack slots.
-  __ push(Immediate(0));  // Treat this as a call with argc of zero.
-  __ jmp(&empty_array);
-
-  __ bind(&not_empty_array);
-  __ test(ecx, Immediate(kIntptrSignBit | kSmiTagMask));
-  __ j(not_zero, &prepare_generic_code_call);
-
-  // Handle construction of an empty array of a certain size. Get the size from
-  // the stack and bail out if size is to large to actually allocate an elements
-  // array.
-  __ cmp(ecx, JSObject::kInitialMaxFastElementArray << kSmiTagSize);
-  __ j(greater_equal, &prepare_generic_code_call);
-
-  // edx: array_size (smi)
-  // edi: constructor
-  // esp[0]: argc (cannot be 0 here)
-  // esp[4]: constructor (only if construct_call)
-  // esp[8]: return address
-  // esp[C]: argument
-  AllocateJSArray(masm,
-                  edi,
-                  ecx,
-                  ebx,
-                  eax,
-                  edx,
-                  edi,
-                  true,
-                  &prepare_generic_code_call);
-  Counters* counters = masm->isolate()->counters();
-  __ IncrementCounter(counters->array_function_native(), 1);
-  __ mov(eax, ebx);
-  __ pop(ebx);
-  if (construct_call) {
-    __ pop(edi);
-  }
-  __ ret(2 * kPointerSize);
-
-  // Handle construction of an array from a list of arguments.
-  __ bind(&argc_two_or_more);
-  STATIC_ASSERT(kSmiTag == 0);
-  __ SmiTag(eax);  // Convet argc to a smi.
-  // eax: array_size (smi)
-  // edi: constructor
-  // esp[0] : argc
-  // esp[4]: constructor (only if construct_call)
-  // esp[8] : return address
-  // esp[C] : last argument
-  AllocateJSArray(masm,
-                  edi,
-                  eax,
-                  ebx,
-                  ecx,
-                  edx,
-                  edi,
-                  false,
-                  &prepare_generic_code_call);
-  __ IncrementCounter(counters->array_function_native(), 1);
-  __ push(ebx);
-  __ mov(ebx, Operand(esp, kPointerSize));
-  // ebx: argc
-  // edx: elements_array_end (untagged)
-  // esp[0]: JSArray
-  // esp[4]: argc
-  // esp[8]: constructor (only if construct_call)
-  // esp[12]: return address
-  // esp[16]: last argument
-
-  // Location of the last argument
-  int last_arg_offset = (construct_call ? 4 : 3) * kPointerSize;
-  __ lea(edi, Operand(esp, last_arg_offset));
-
-  // Location of the first array element (Parameter fill_with_holes to
-  // AllocateJSArray is false, so the FixedArray is returned in ecx).
-  __ lea(edx, Operand(ecx, FixedArray::kHeaderSize - kHeapObjectTag));
-
-  Label has_non_smi_element;
-
-  // ebx: argc
-  // edx: location of the first array element
-  // edi: location of the last argument
-  // esp[0]: JSArray
-  // esp[4]: argc
-  // esp[8]: constructor (only if construct_call)
-  // esp[12]: return address
-  // esp[16]: last argument
-  Label loop, entry;
-  __ mov(ecx, ebx);
-  __ jmp(&entry);
-  __ bind(&loop);
-  __ mov(eax, Operand(edi, ecx, times_pointer_size, 0));
-  if (FLAG_smi_only_arrays) {
-    __ JumpIfNotSmi(eax, &has_non_smi_element);
-  }
-  __ mov(Operand(edx, 0), eax);
-  __ add(edx, Immediate(kPointerSize));
-  __ bind(&entry);
-  __ dec(ecx);
-  __ j(greater_equal, &loop);
-
-  // Remove caller arguments from the stack and return.
-  // ebx: argc
-  // esp[0]: JSArray
-  // esp[4]: argc
-  // esp[8]: constructor (only if construct_call)
-  // esp[12]: return address
-  // esp[16]: last argument
-  __ bind(&finish);
-  __ mov(ecx, Operand(esp, last_arg_offset - kPointerSize));
-  __ pop(eax);
-  __ pop(ebx);
-  __ lea(esp, Operand(esp, ebx, times_pointer_size,
-                      last_arg_offset - kPointerSize));
-  __ jmp(ecx);
-
-  __ bind(&has_non_smi_element);
-  // Double values are handled by the runtime.
-  __ CheckMap(eax,
-              masm->isolate()->factory()->heap_number_map(),
-              &not_double,
-              DONT_DO_SMI_CHECK);
-  __ bind(&cant_transition_map);
-  // Throw away the array that's only been partially constructed.
-  __ pop(eax);
-  __ UndoAllocationInNewSpace(eax);
-  __ jmp(&prepare_generic_code_call);
-
-  __ bind(&not_double);
-  // Transition FAST_SMI_ELEMENTS to FAST_ELEMENTS.
-  __ mov(ebx, Operand(esp, 0));
-  __ mov(edi, FieldOperand(ebx, HeapObject::kMapOffset));
-  __ LoadTransitionedArrayMapConditional(
-      FAST_SMI_ELEMENTS,
-      FAST_ELEMENTS,
-      edi,
-      eax,
-      &cant_transition_map);
-  __ mov(FieldOperand(ebx, HeapObject::kMapOffset), edi);
-  __ RecordWriteField(ebx, HeapObject::kMapOffset, edi, eax,
-                      kDontSaveFPRegs, OMIT_REMEMBERED_SET, OMIT_SMI_CHECK);
-
-  // Prepare to re-enter the loop
-  __ lea(edi, Operand(esp, last_arg_offset));
-
-  // Finish the array initialization loop.
-  Label loop2;
-  __ bind(&loop2);
-  __ mov(eax, Operand(edi, ecx, times_pointer_size, 0));
-  __ mov(Operand(edx, 0), eax);
-  __ add(edx, Immediate(kPointerSize));
-  __ dec(ecx);
-  __ j(greater_equal, &loop2);
-  __ jmp(&finish);
-
-  // Restore argc and constructor before running the generic code.
-  __ bind(&prepare_generic_code_call);
-  __ pop(eax);
-  if (construct_call) {
-    __ pop(edi);
-  }
-  __ jmp(call_generic_code);
-}
-
-
 void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
   // ----------- S t a t e -------------
   //  -- eax : argc
@@ -1459,20 +1040,9 @@ void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
 
   // Run the native code for the InternalArray function called as a normal
   // function.
-  if (FLAG_optimize_constructed_arrays) {
-    // tail call a stub
-    InternalArrayConstructorStub stub(masm->isolate());
-    __ TailCallStub(&stub);
-  } else {
-    ArrayNativeCode(masm, false, &generic_array_code);
-
-    // Jump to the generic internal array code in case the specialized code
-    // cannot handle the construction.
-    __ bind(&generic_array_code);
-    Handle<Code> array_code =
-        masm->isolate()->builtins()->InternalArrayCodeGeneric();
-    __ jmp(array_code, RelocInfo::CODE_TARGET);
-  }
+  // tail call a stub
+  InternalArrayConstructorStub stub(masm->isolate());
+  __ TailCallStub(&stub);
 }
 
 
@@ -1498,58 +1068,13 @@ void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
   }
 
   // Run the native code for the Array function called as a normal function.
-  if (FLAG_optimize_constructed_arrays) {
-    // tail call a stub
-    Handle<Object> undefined_sentinel(
-        masm->isolate()->heap()->undefined_value(),
-        masm->isolate());
-    __ mov(ebx, Immediate(undefined_sentinel));
-    ArrayConstructorStub stub(masm->isolate());
-    __ TailCallStub(&stub);
-  } else {
-    ArrayNativeCode(masm, false, &generic_array_code);
-
-    // Jump to the generic internal array code in case the specialized code
-    // cannot handle the construction.
-    __ bind(&generic_array_code);
-    Handle<Code> array_code =
-        masm->isolate()->builtins()->ArrayCodeGeneric();
-    __ jmp(array_code, RelocInfo::CODE_TARGET);
-  }
-}
-
-
-void Builtins::Generate_CommonArrayConstructCode(MacroAssembler* masm) {
-  // ----------- S t a t e -------------
-  //  -- eax : argc
-  //  -- ebx : type info cell
-  //  -- edi : constructor
-  //  -- esp[0] : return address
-  //  -- esp[4] : last argument
-  // -----------------------------------
-  if (FLAG_debug_code) {
-    // The array construct code is only set for the global and natives
-    // builtin Array functions which always have maps.
-
-    // Initial map for the builtin Array function should be a map.
-    __ mov(ecx, FieldOperand(edi, JSFunction::kPrototypeOrInitialMapOffset));
-    // Will both indicate a NULL and a Smi.
-    __ test(ecx, Immediate(kSmiTagMask));
-    __ Assert(not_zero, "Unexpected initial map for Array function");
-    __ CmpObjectType(ecx, MAP_TYPE, ecx);
-    __ Assert(equal, "Unexpected initial map for Array function");
-  }
-
-  Label generic_constructor;
-  // Run the native code for the Array function called as constructor.
-  ArrayNativeCode(masm, true, &generic_constructor);
-
-  // Jump to the generic construct code in case the specialized code cannot
-  // handle the construction.
-  __ bind(&generic_constructor);
-  Handle<Code> generic_construct_stub =
-      masm->isolate()->builtins()->JSConstructStubGeneric();
-  __ jmp(generic_construct_stub, RelocInfo::CODE_TARGET);
+  // tail call a stub
+  Handle<Object> undefined_sentinel(
+      masm->isolate()->heap()->undefined_value(),
+      masm->isolate());
+  __ mov(ebx, Immediate(undefined_sentinel));
+  ArrayConstructorStub stub(masm->isolate());
+  __ TailCallStub(&stub);
 }
 
 
index ad1c65d..29a4be2 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
 
 #include "bootstrapper.h"
 #include "code-stubs.h"
@@ -1527,7 +1527,7 @@ void BinaryOpStub::GenerateSmiStub(MacroAssembler* masm) {
       UNREACHABLE();
   }
 
-  if (op_ == Token::MOD && has_fixed_right_arg_) {
+  if (op_ == Token::MOD && encoded_right_arg_.has_value) {
     // It is guaranteed that the value will fit into a Smi, because if it
     // didn't, we wouldn't be here, see BinaryOp_Patch.
     __ cmp(eax, Immediate(Smi::FromInt(fixed_right_arg_value())));
@@ -1669,7 +1669,7 @@ void BinaryOpStub::GenerateInt32Stub(MacroAssembler* masm) {
         FloatingPointHelper::CheckSSE2OperandIsInt32(
             masm, &not_int32, xmm1, edi, ecx, xmm2);
         if (op_ == Token::MOD) {
-          if (has_fixed_right_arg_) {
+          if (encoded_right_arg_.has_value) {
             __ cmp(edi, Immediate(fixed_right_arg_value()));
             __ j(not_equal, &right_arg_changed);
           }
@@ -4678,56 +4678,17 @@ void InterruptStub::Generate(MacroAssembler* masm) {
 }
 
 
-static void GenerateRecordCallTargetNoArray(MacroAssembler* masm) {
-  // Cache the called function in a global property cell.  Cache states
-  // are uninitialized, monomorphic (indicated by a JSFunction), and
-  // megamorphic.
-  // ebx : cache cell for call target
-  // edi : the function to call
-  Isolate* isolate = masm->isolate();
-  Label initialize, done;
-
-  // Load the cache state into ecx.
-  __ mov(ecx, FieldOperand(ebx, JSGlobalPropertyCell::kValueOffset));
-
-  // A monomorphic cache hit or an already megamorphic state: invoke the
-  // function without changing the state.
-  __ cmp(ecx, edi);
-  __ j(equal, &done, Label::kNear);
-  __ cmp(ecx, Immediate(TypeFeedbackCells::MegamorphicSentinel(isolate)));
-  __ j(equal, &done, Label::kNear);
-
-  // A monomorphic miss (i.e, here the cache is not uninitialized) goes
-  // megamorphic.
-  __ cmp(ecx, Immediate(TypeFeedbackCells::UninitializedSentinel(isolate)));
-  __ j(equal, &initialize, Label::kNear);
-  // MegamorphicSentinel is an immortal immovable object (undefined) so no
-  // write-barrier is needed.
-  __ mov(FieldOperand(ebx, JSGlobalPropertyCell::kValueOffset),
-         Immediate(TypeFeedbackCells::MegamorphicSentinel(isolate)));
-  __ jmp(&done, Label::kNear);
-
-  // An uninitialized cache is patched with the function.
-  __ bind(&initialize);
-  __ mov(FieldOperand(ebx, JSGlobalPropertyCell::kValueOffset), edi);
-  // No need for a write barrier here - cells are rescanned.
-
-  __ bind(&done);
-}
-
-
 static void GenerateRecordCallTarget(MacroAssembler* masm) {
   // Cache the called function in a global property cell.  Cache states
   // are uninitialized, monomorphic (indicated by a JSFunction), and
   // megamorphic.
   // ebx : cache cell for call target
   // edi : the function to call
-  ASSERT(FLAG_optimize_constructed_arrays);
   Isolate* isolate = masm->isolate();
   Label initialize, done, miss, megamorphic, not_array_function;
 
   // Load the cache state into ecx.
-  __ mov(ecx, FieldOperand(ebx, JSGlobalPropertyCell::kValueOffset));
+  __ mov(ecx, FieldOperand(ebx, Cell::kValueOffset));
 
   // A monomorphic cache hit or an already megamorphic state: invoke the
   // function without changing the state.
@@ -4739,12 +4700,15 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
   // Special handling of the Array() function, which caches not only the
   // monomorphic Array function but the initial ElementsKind with special
   // sentinels
-  Handle<Object> terminal_kind_sentinel =
-      TypeFeedbackCells::MonomorphicArraySentinel(isolate,
-                                                  LAST_FAST_ELEMENTS_KIND);
   __ JumpIfNotSmi(ecx, &miss);
-  __ cmp(ecx, Immediate(terminal_kind_sentinel));
-  __ j(above, &miss);
+  if (FLAG_debug_code) {
+    Handle<Object> terminal_kind_sentinel =
+        TypeFeedbackCells::MonomorphicArraySentinel(masm->isolate(),
+                                                    LAST_FAST_ELEMENTS_KIND);
+    __ cmp(ecx, Immediate(terminal_kind_sentinel));
+    __ Assert(less_equal, "Array function sentinel is not an ElementsKind");
+  }
+
   // Load the global or builtins object from the current context
   __ LoadGlobalContext(ecx);
   // Make sure the function is the Array() function
@@ -4762,7 +4726,7 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
   // MegamorphicSentinel is an immortal immovable object (undefined) so no
   // write-barrier is needed.
   __ bind(&megamorphic);
-  __ mov(FieldOperand(ebx, JSGlobalPropertyCell::kValueOffset),
+  __ mov(FieldOperand(ebx, Cell::kValueOffset),
          Immediate(TypeFeedbackCells::MegamorphicSentinel(isolate)));
   __ jmp(&done, Label::kNear);
 
@@ -4781,12 +4745,12 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
   Handle<Object> initial_kind_sentinel =
       TypeFeedbackCells::MonomorphicArraySentinel(isolate,
           GetInitialFastElementsKind());
-  __ mov(FieldOperand(ebx, JSGlobalPropertyCell::kValueOffset),
+  __ mov(FieldOperand(ebx, Cell::kValueOffset),
          Immediate(initial_kind_sentinel));
   __ jmp(&done);
 
   __ bind(&not_array_function);
-  __ mov(FieldOperand(ebx, JSGlobalPropertyCell::kValueOffset), edi);
+  __ mov(FieldOperand(ebx, Cell::kValueOffset), edi);
   // No need for a write barrier here - cells are rescanned.
 
   __ bind(&done);
@@ -4824,11 +4788,7 @@ void CallFunctionStub::Generate(MacroAssembler* masm) {
   __ j(not_equal, &slow);
 
   if (RecordCallTarget()) {
-    if (FLAG_optimize_constructed_arrays) {
-      GenerateRecordCallTarget(masm);
-    } else {
-      GenerateRecordCallTargetNoArray(masm);
-    }
+    GenerateRecordCallTarget(masm);
   }
 
   // Fast-case: Just invoke the function.
@@ -4857,7 +4817,7 @@ void CallFunctionStub::Generate(MacroAssembler* masm) {
     // If there is a call target cache, mark it megamorphic in the
     // non-function case.  MegamorphicSentinel is an immortal immovable
     // object (undefined) so no write barrier is needed.
-    __ mov(FieldOperand(ebx, JSGlobalPropertyCell::kValueOffset),
+    __ mov(FieldOperand(ebx, Cell::kValueOffset),
            Immediate(TypeFeedbackCells::MegamorphicSentinel(isolate)));
   }
   // Check for function proxy.
@@ -4901,15 +4861,11 @@ void CallConstructStub::Generate(MacroAssembler* masm) {
   __ j(not_equal, &slow);
 
   if (RecordCallTarget()) {
-    if (FLAG_optimize_constructed_arrays) {
-      GenerateRecordCallTarget(masm);
-    } else {
-      GenerateRecordCallTargetNoArray(masm);
-    }
+    GenerateRecordCallTarget(masm);
   }
 
   // Jump to the function-specific construct stub.
-  Register jmp_reg = FLAG_optimize_constructed_arrays ? ecx : ebx;
+  Register jmp_reg = ecx;
   __ mov(jmp_reg, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset));
   __ mov(jmp_reg, FieldOperand(jmp_reg,
                                SharedFunctionInfo::kConstructStubOffset));
@@ -4955,9 +4911,7 @@ void CodeStub::GenerateStubsAheadOfTime(Isolate* isolate) {
   StubFailureTrampolineStub::GenerateAheadOfTime(isolate);
   // It is important that the store buffer overflow stubs are generated first.
   RecordWriteStub::GenerateFixedRegStubsAheadOfTime(isolate);
-  if (FLAG_optimize_constructed_arrays) {
-    ArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate);
-  }
+  ArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate);
 }
 
 
@@ -5050,11 +5004,6 @@ void CEntryStub::GenerateCore(MacroAssembler* masm,
     Label okay;
     __ cmp(eax, masm->isolate()->factory()->the_hole_value());
     __ j(not_equal, &okay, Label::kNear);
-    // TODO(wingo): Currently SuspendJSGeneratorObject returns the hole.  Change
-    // to return another sentinel like a harmony symbol.
-    __ cmp(ebx, Immediate(ExternalReference(
-        Runtime::kSuspendJSGeneratorObject, masm->isolate())));
-    __ j(equal, &okay, Label::kNear);
     __ int3();
     __ bind(&okay);
   }
@@ -5131,6 +5080,8 @@ void CEntryStub::Generate(MacroAssembler* masm) {
   // esi: current context (C callee-saved)
   // edi: JS function of the caller (C callee-saved)
 
+  ProfileEntryHookStub::MaybeCallEntryHook(masm);
+
   // NOTE: Invocations of builtins may return failure objects instead
   // of a proper result. The builtin entry handles this by performing
   // a garbage collection and retrying the builtin (twice).
@@ -5204,6 +5155,8 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
   Label invoke, handler_entry, exit;
   Label not_outermost_js, not_outermost_js_2;
 
+  ProfileEntryHookStub::MaybeCallEntryHook(masm);
+
   // Set up frame.
   __ push(ebp);
   __ mov(ebp, esp);
@@ -6907,9 +6860,13 @@ void ICCompareStub::GenerateInternalizedStrings(MacroAssembler* masm) {
   __ movzx_b(tmp1, FieldOperand(tmp1, Map::kInstanceTypeOffset));
   __ movzx_b(tmp2, FieldOperand(tmp2, Map::kInstanceTypeOffset));
   STATIC_ASSERT(kInternalizedTag != 0);
-  __ and_(tmp1, tmp2);
-  __ test(tmp1, Immediate(kIsInternalizedMask));
-  __ j(zero, &miss, Label::kNear);
+  __ and_(tmp1, Immediate(kIsNotStringMask | kIsInternalizedMask));
+  __ cmpb(tmp1, kInternalizedTag | kStringTag);
+  __ j(not_equal, &miss, Label::kNear);
+
+  __ and_(tmp2, Immediate(kIsNotStringMask | kIsInternalizedMask));
+  __ cmpb(tmp2, kInternalizedTag | kStringTag);
+  __ j(not_equal, &miss, Label::kNear);
 
   // Internalized strings are compared by identity.
   Label done;
@@ -6954,19 +6911,8 @@ void ICCompareStub::GenerateUniqueNames(MacroAssembler* masm) {
   __ movzx_b(tmp1, FieldOperand(tmp1, Map::kInstanceTypeOffset));
   __ movzx_b(tmp2, FieldOperand(tmp2, Map::kInstanceTypeOffset));
 
-  Label succeed1;
-  __ test(tmp1, Immediate(kIsInternalizedMask));
-  __ j(not_zero, &succeed1);
-  __ cmpb(tmp1, static_cast<uint8_t>(SYMBOL_TYPE));
-  __ j(not_equal, &miss);
-  __ bind(&succeed1);
-
-  Label succeed2;
-  __ test(tmp2, Immediate(kIsInternalizedMask));
-  __ j(not_zero, &succeed2);
-  __ cmpb(tmp2, static_cast<uint8_t>(SYMBOL_TYPE));
-  __ j(not_equal, &miss);
-  __ bind(&succeed2);
+  __ JumpIfNotUniqueName(tmp1, &miss, Label::kNear);
+  __ JumpIfNotUniqueName(tmp2, &miss, Label::kNear);
 
   // Unique names are compared by identity.
   Label done;
@@ -7031,7 +6977,8 @@ void ICCompareStub::GenerateStrings(MacroAssembler* masm) {
 
   // Check that both strings are internalized. If they are, we're done
   // because we already know they are not identical.  But in the case of
-  // non-equality compare, we still need to determine the order.
+  // non-equality compare, we still need to determine the order. We
+  // also know they are both strings.
   if (equality) {
     Label do_compare;
     STATIC_ASSERT(kInternalizedTag != 0);
@@ -7190,12 +7137,8 @@ void NameDictionaryLookupStub::GenerateNegativeLookup(MacroAssembler* masm,
 
     // Check if the entry name is not a unique name.
     __ mov(entity_name, FieldOperand(entity_name, HeapObject::kMapOffset));
-    __ test_b(FieldOperand(entity_name, Map::kInstanceTypeOffset),
-              kIsInternalizedMask);
-    __ j(not_zero, &good);
-    __ cmpb(FieldOperand(entity_name, Map::kInstanceTypeOffset),
-            static_cast<uint8_t>(SYMBOL_TYPE));
-    __ j(not_equal, miss);
+    __ JumpIfNotUniqueName(FieldOperand(entity_name, Map::kInstanceTypeOffset),
+                           miss);
     __ bind(&good);
   }
 
@@ -7328,15 +7271,9 @@ void NameDictionaryLookupStub::Generate(MacroAssembler* masm) {
       // key we are looking for.
 
       // Check if the entry name is not a unique name.
-      Label cont;
       __ mov(scratch, FieldOperand(scratch, HeapObject::kMapOffset));
-      __ test_b(FieldOperand(scratch, Map::kInstanceTypeOffset),
-                kIsInternalizedMask);
-      __ j(not_zero, &cont);
-      __ cmpb(FieldOperand(scratch, Map::kInstanceTypeOffset),
-              static_cast<uint8_t>(SYMBOL_TYPE));
-      __ j(not_equal, &maybe_in_dictionary);
-      __ bind(&cont);
+      __ JumpIfNotUniqueName(FieldOperand(scratch, Map::kInstanceTypeOffset),
+                             &maybe_in_dictionary);
     }
   }
 
@@ -7661,11 +7598,11 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
 void StoreArrayLiteralElementStub::Generate(MacroAssembler* masm) {
   // ----------- S t a t e -------------
   //  -- eax    : element value to store
-  //  -- ebx    : array literal
-  //  -- edi    : map of array literal
   //  -- ecx    : element index as smi
-  //  -- edx    : array literal index in function
   //  -- esp[0] : return address
+  //  -- esp[4] : array literal index in function
+  //  -- esp[8] : array literal
+  // clobbers ebx, edx, edi
   // -----------------------------------
 
   Label element_done;
@@ -7675,6 +7612,11 @@ void StoreArrayLiteralElementStub::Generate(MacroAssembler* masm) {
   Label slow_elements_from_double;
   Label fast_elements;
 
+  // Get array literal index, array literal and its map.
+  __ mov(edx, Operand(esp, 1 * kPointerSize));
+  __ mov(ebx, Operand(esp, 2 * kPointerSize));
+  __ mov(edi, FieldOperand(ebx, JSObject::kMapOffset));
+
   __ CheckFastElements(edi, &double_elements);
 
   // Check for FAST_*_SMI_ELEMENTS or FAST_*_ELEMENTS elements
@@ -7756,7 +7698,11 @@ void StubFailureTrampolineStub::Generate(MacroAssembler* masm) {
 
 
 void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) {
-  if (entry_hook_ != NULL) {
+  if (masm->isolate()->function_entry_hook() != NULL) {
+    // It's always safe to call the entry hook stub, as the hook itself
+    // is not allowed to call back to V8.
+    AllowStubCallsScope allow_stub_calls(masm, true);
+
     ProfileEntryHookStub stub;
     masm->CallStub(&stub);
   }
@@ -7764,9 +7710,11 @@ void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) {
 
 
 void ProfileEntryHookStub::Generate(MacroAssembler* masm) {
-  // Ecx is the only volatile register we must save.
-  const int kNumSavedRegisters = 1;
+  // Save volatile registers.
+  const int kNumSavedRegisters = 3;
+  __ push(eax);
   __ push(ecx);
+  __ push(edx);
 
   // Calculate and push the original stack pointer.
   __ lea(eax, Operand(esp, (kNumSavedRegisters + 1) * kPointerSize));
@@ -7779,12 +7727,16 @@ void ProfileEntryHookStub::Generate(MacroAssembler* masm) {
   __ push(eax);
 
   // Call the entry hook.
-  int32_t hook_location = reinterpret_cast<int32_t>(&entry_hook_);
-  __ call(Operand(hook_location, RelocInfo::NONE32));
+  ASSERT(masm->isolate()->function_entry_hook() != NULL);
+  __ call(FUNCTION_ADDR(masm->isolate()->function_entry_hook()),
+          RelocInfo::RUNTIME_ENTRY);
   __ add(esp, Immediate(2 * kPointerSize));
 
   // Restore ecx.
+  __ pop(edx);
   __ pop(ecx);
+  __ pop(eax);
+
   __ ret(0);
 }
 
@@ -7842,6 +7794,10 @@ static void CreateArrayDispatchOneArgument(MacroAssembler* masm) {
   __ cmp(ebx, Immediate(undefined_sentinel));
   __ j(equal, &normal_sequence);
 
+  // The type cell may have gone megamorphic, don't overwrite if so
+  __ mov(ecx, FieldOperand(ebx, kPointerSize));
+  __ JumpIfNotSmi(ecx, &normal_sequence);
+
   // Save the resulting elements kind in type info
   __ SmiTag(edx);
   __ mov(FieldOperand(ebx, kPointerSize), edx);
@@ -7871,10 +7827,10 @@ static void ArrayConstructorStubAheadOfTimeHelper(Isolate* isolate) {
       TERMINAL_FAST_ELEMENTS_KIND);
   for (int i = 0; i <= to_index; ++i) {
     ElementsKind kind = GetFastElementsKindFromSequenceIndex(i);
-    T stub(kind, false);
+    T stub(kind);
     stub.GetCode(isolate)->set_is_pregenerated(true);
     if (AllocationSiteInfo::GetMode(kind) != DONT_TRACK_ALLOCATION_SITE) {
-      T stub1(kind, true);
+      T stub1(kind, CONTEXT_CHECK_REQUIRED, DISABLE_ALLOCATION_SITES);
       stub1.GetCode(isolate)->set_is_pregenerated(true);
     }
   }
@@ -7930,63 +7886,49 @@ void ArrayConstructorStub::Generate(MacroAssembler* masm) {
     __ CmpObjectType(ecx, MAP_TYPE, ecx);
     __ Assert(equal, "Unexpected initial map for Array function");
 
-    // We should either have undefined in ebx or a valid jsglobalpropertycell
+    // We should either have undefined in ebx or a valid cell
     Label okay_here;
-    Handle<Map> global_property_cell_map(
-        masm->isolate()->heap()->global_property_cell_map());
+    Handle<Map> cell_map = masm->isolate()->factory()->cell_map();
     __ cmp(ebx, Immediate(undefined_sentinel));
     __ j(equal, &okay_here);
-    __ cmp(FieldOperand(ebx, 0), Immediate(global_property_cell_map));
+    __ cmp(FieldOperand(ebx, 0), Immediate(cell_map));
     __ Assert(equal, "Expected property cell in register ebx");
     __ bind(&okay_here);
   }
 
-  if (FLAG_optimize_constructed_arrays) {
-    Label no_info, switch_ready;
-    // Get the elements kind and case on that.
-    __ cmp(ebx, Immediate(undefined_sentinel));
-    __ j(equal, &no_info);
-    __ mov(edx, FieldOperand(ebx, JSGlobalPropertyCell::kValueOffset));
-    __ JumpIfNotSmi(edx, &no_info);
-    __ SmiUntag(edx);
-    __ jmp(&switch_ready);
-    __ bind(&no_info);
-    __ mov(edx, Immediate(GetInitialFastElementsKind()));
-    __ bind(&switch_ready);
-
-    if (argument_count_ == ANY) {
-      Label not_zero_case, not_one_case;
-      __ test(eax, eax);
-      __ j(not_zero, &not_zero_case);
-      CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm);
-
-      __ bind(&not_zero_case);
-      __ cmp(eax, 1);
-      __ j(greater, &not_one_case);
-      CreateArrayDispatchOneArgument(masm);
-
-      __ bind(&not_one_case);
-      CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm);
-    } else if (argument_count_ == NONE) {
-      CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm);
-    } else if (argument_count_ == ONE) {
-      CreateArrayDispatchOneArgument(masm);
-    } else if (argument_count_ == MORE_THAN_ONE) {
-      CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm);
-    } else {
-      UNREACHABLE();
-    }
-  } else {
-    Label generic_constructor;
-    // Run the native code for the Array function called as constructor.
-    ArrayNativeCode(masm, true, &generic_constructor);
+  Label no_info, switch_ready;
+  // Get the elements kind and case on that.
+  __ cmp(ebx, Immediate(undefined_sentinel));
+  __ j(equal, &no_info);
+  __ mov(edx, FieldOperand(ebx, Cell::kValueOffset));
+  __ JumpIfNotSmi(edx, &no_info);
+  __ SmiUntag(edx);
+  __ jmp(&switch_ready);
+  __ bind(&no_info);
+  __ mov(edx, Immediate(GetInitialFastElementsKind()));
+  __ bind(&switch_ready);
 
-    // Jump to the generic construct code in case the specialized code cannot
-    // handle the construction.
-    __ bind(&generic_constructor);
-    Handle<Code> generic_construct_stub =
-        masm->isolate()->builtins()->JSConstructStubGeneric();
-    __ jmp(generic_construct_stub, RelocInfo::CODE_TARGET);
+  if (argument_count_ == ANY) {
+    Label not_zero_case, not_one_case;
+    __ test(eax, eax);
+    __ j(not_zero, &not_zero_case);
+    CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm);
+
+    __ bind(&not_zero_case);
+    __ cmp(eax, 1);
+    __ j(greater, &not_one_case);
+    CreateArrayDispatchOneArgument(masm);
+
+    __ bind(&not_one_case);
+    CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm);
+  } else if (argument_count_ == NONE) {
+    CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm);
+  } else if (argument_count_ == ONE) {
+    CreateArrayDispatchOneArgument(masm);
+  } else if (argument_count_ == MORE_THAN_ONE) {
+    CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm);
+  } else {
+    UNREACHABLE();
   }
 }
 
@@ -8049,46 +7991,33 @@ void InternalArrayConstructorStub::Generate(MacroAssembler* masm) {
     __ Assert(equal, "Unexpected initial map for Array function");
   }
 
-  if (FLAG_optimize_constructed_arrays) {
-    // Figure out the right elements kind
-    __ mov(ecx, FieldOperand(edi, JSFunction::kPrototypeOrInitialMapOffset));
+  // Figure out the right elements kind
+  __ mov(ecx, FieldOperand(edi, JSFunction::kPrototypeOrInitialMapOffset));
 
-    // Load the map's "bit field 2" into |result|. We only need the first byte,
-    // but the following masking takes care of that anyway.
-    __ mov(ecx, FieldOperand(ecx, Map::kBitField2Offset));
-    // Retrieve elements_kind from bit field 2.
-    __ and_(ecx, Map::kElementsKindMask);
-    __ shr(ecx, Map::kElementsKindShift);
+  // Load the map's "bit field 2" into |result|. We only need the first byte,
+  // but the following masking takes care of that anyway.
+  __ mov(ecx, FieldOperand(ecx, Map::kBitField2Offset));
+  // Retrieve elements_kind from bit field 2.
+  __ and_(ecx, Map::kElementsKindMask);
+  __ shr(ecx, Map::kElementsKindShift);
 
-    if (FLAG_debug_code) {
-      Label done;
-      __ cmp(ecx, Immediate(FAST_ELEMENTS));
-      __ j(equal, &done);
-      __ cmp(ecx, Immediate(FAST_HOLEY_ELEMENTS));
-      __ Assert(equal,
-          "Invalid ElementsKind for InternalArray or InternalPackedArray");
-      __ bind(&done);
-    }
-
-    Label fast_elements_case;
+  if (FLAG_debug_code) {
+    Label done;
     __ cmp(ecx, Immediate(FAST_ELEMENTS));
-    __ j(equal, &fast_elements_case);
-    GenerateCase(masm, FAST_HOLEY_ELEMENTS);
+    __ j(equal, &done);
+    __ cmp(ecx, Immediate(FAST_HOLEY_ELEMENTS));
+    __ Assert(equal,
+              "Invalid ElementsKind for InternalArray or InternalPackedArray");
+    __ bind(&done);
+  }
 
-    __ bind(&fast_elements_case);
-    GenerateCase(masm, FAST_ELEMENTS);
-  } else {
-    Label generic_constructor;
-    // Run the native code for the Array function called as constructor.
-    ArrayNativeCode(masm, true, &generic_constructor);
+  Label fast_elements_case;
+  __ cmp(ecx, Immediate(FAST_ELEMENTS));
+  __ j(equal, &fast_elements_case);
+  GenerateCase(masm, FAST_HOLEY_ELEMENTS);
 
-    // Jump to the generic construct code in case the specialized code cannot
-    // handle the construction.
-    __ bind(&generic_constructor);
-    Handle<Code> generic_construct_stub =
-        masm->isolate()->builtins()->JSConstructStubGeneric();
-    __ jmp(generic_construct_stub, RelocInfo::CODE_TARGET);
-  }
+  __ bind(&fast_elements_case);
+  GenerateCase(masm, FAST_ELEMENTS);
 }
 
 
index d562238..da32c50 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
 
 #include "codegen.h"
 #include "heap.h"
index 2d83cab..77ff169 100644 (file)
@@ -33,7 +33,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
 
 #include "cpu.h"
 #include "macro-assembler.h"
index a4c6bcc..db1d5a6 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
 
 #include "codegen.h"
 #include "debug.h"
index 16befa9..6af2445 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
 
 #include "codegen.h"
 #include "deoptimizer.h"
index 9eb0d29..14e5800 100644 (file)
@@ -31,7 +31,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
 
 #include "disasm.h"
 
index ea19e9f..5570811 100644 (file)
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
 
 #include "assembler.h"
 #include "assembler-ia32.h"
 #include "assembler-ia32-inl.h"
-#include "frames-inl.h"
+#include "frames.h"
 
 namespace v8 {
 namespace internal {
 
 
-Address ExitFrame::ComputeStackPointer(Address fp) {
-  return Memory::Address_at(fp + ExitFrameConstants::kSPOffset);
-}
-
-
 Register JavaScriptFrame::fp_register() { return ebp; }
 Register JavaScriptFrame::context_register() { return esi; }
 
index c77faaa..cf3132d 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
 
 #include "code-stubs.h"
 #include "codegen.h"
@@ -118,7 +118,7 @@ void FullCodeGenerator::Generate() {
   CompilationInfo* info = info_;
   handler_table_ =
       isolate()->factory()->NewFixedArray(function()->handler_count(), TENURED);
-  profiling_counter_ = isolate()->factory()->NewJSGlobalPropertyCell(
+  profiling_counter_ = isolate()->factory()->NewCell(
       Handle<Smi>(Smi::FromInt(FLAG_interrupt_budget), isolate()));
   SetFunctionPosition(function());
   Comment cmnt(masm_, "[ function compiled by full code generator");
@@ -315,7 +315,7 @@ void FullCodeGenerator::ClearAccumulator() {
 
 void FullCodeGenerator::EmitProfilingCounterDecrement(int delta) {
   __ mov(ebx, Immediate(profiling_counter_));
-  __ sub(FieldOperand(ebx, JSGlobalPropertyCell::kValueOffset),
+  __ sub(FieldOperand(ebx, Cell::kValueOffset),
          Immediate(Smi::FromInt(delta)));
 }
 
@@ -327,7 +327,7 @@ void FullCodeGenerator::EmitProfilingCounterReset() {
     reset_value = Smi::kMaxValue;
   }
   __ mov(ebx, Immediate(profiling_counter_));
-  __ mov(FieldOperand(ebx, JSGlobalPropertyCell::kValueOffset),
+  __ mov(FieldOperand(ebx, Cell::kValueOffset),
          Immediate(Smi::FromInt(reset_value)));
 }
 
@@ -342,7 +342,7 @@ void FullCodeGenerator::EmitBackEdgeBookkeeping(IterationStatement* stmt,
     ASSERT(back_edge_target->is_bound());
     int distance = masm_->SizeOfCodeGeneratedSince(back_edge_target);
     weight = Min(kMaxBackEdgeWeight,
-                 Max(1, distance / kBackEdgeDistanceUnit));
+                 Max(1, distance / kCodeSizeMultiplier));
   }
   EmitProfilingCounterDecrement(weight);
   __ j(positive, &ok, Label::kNear);
@@ -384,7 +384,7 @@ void FullCodeGenerator::EmitReturnSequence() {
       } else if (FLAG_weighted_back_edges) {
         int distance = masm_->pc_offset();
         weight = Min(kMaxBackEdgeWeight,
-                     Max(1, distance / kBackEdgeDistanceUnit));
+                     Max(1, distance / kCodeSizeMultiplier));
       }
       EmitProfilingCounterDecrement(weight);
       Label ok;
@@ -1105,14 +1105,12 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) {
   Label non_proxy;
   __ bind(&fixed_array);
 
-  Handle<JSGlobalPropertyCell> cell =
-      isolate()->factory()->NewJSGlobalPropertyCell(
-          Handle<Object>(
-              Smi::FromInt(TypeFeedbackCells::kForInFastCaseMarker),
-              isolate()));
+  Handle<Cell> cell = isolate()->factory()->NewCell(
+      Handle<Object>(Smi::FromInt(TypeFeedbackCells::kForInFastCaseMarker),
+                     isolate()));
   RecordTypeFeedbackCell(stmt->ForInFeedbackId(), cell);
   __ LoadHeapObject(ebx, cell);
-  __ mov(FieldOperand(ebx, JSGlobalPropertyCell::kValueOffset),
+  __ mov(FieldOperand(ebx, Cell::kValueOffset),
          Immediate(Smi::FromInt(TypeFeedbackCells::kForInSlowCaseMarker)));
 
   __ mov(ebx, Immediate(Smi::FromInt(1)));  // Smi indicates slow check
@@ -1641,10 +1639,10 @@ void FullCodeGenerator::VisitObjectLiteral(ObjectLiteral* expr) {
         ASSERT(!CompileTimeValue::IsCompileTimeValue(value));
         // Fall through.
       case ObjectLiteral::Property::COMPUTED:
-        if (key->handle()->IsInternalizedString()) {
+        if (key->value()->IsInternalizedString()) {
           if (property->emit_store()) {
             VisitForAccumulatorValue(value);
-            __ mov(ecx, Immediate(key->handle()));
+            __ mov(ecx, Immediate(key->value()));
             __ mov(edx, Operand(esp, 0));
             Handle<Code> ic = is_classic_mode()
                 ? isolate()->builtins()->StoreIC_Initialize()
@@ -1784,13 +1782,11 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
     Expression* subexpr = subexprs->at(i);
     // If the subexpression is a literal or a simple materialized literal it
     // is already set in the cloned array.
-    if (subexpr->AsLiteral() != NULL ||
-        CompileTimeValue::IsCompileTimeValue(subexpr)) {
-      continue;
-    }
+    if (CompileTimeValue::IsCompileTimeValue(subexpr)) continue;
 
     if (!result_saved) {
-      __ push(eax);
+      __ push(eax);  // array literal.
+      __ push(Immediate(Smi::FromInt(expr->literal_index())));
       result_saved = true;
     }
     VisitForAccumulatorValue(subexpr);
@@ -1799,7 +1795,7 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
       // Fast-case array literal with ElementsKind of FAST_*_ELEMENTS, they
       // cannot transition and don't need to call the runtime stub.
       int offset = FixedArray::kHeaderSize + (i * kPointerSize);
-      __ mov(ebx, Operand(esp, 0));  // Copy of array literal.
+      __ mov(ebx, Operand(esp, kPointerSize));  // Copy of array literal.
       __ mov(ebx, FieldOperand(ebx, JSObject::kElementsOffset));
       // Store the subexpression value in the array's elements.
       __ mov(FieldOperand(ebx, offset), result_register());
@@ -1810,10 +1806,7 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
                           INLINE_SMI_CHECK);
     } else {
       // Store the subexpression value in the array's elements.
-      __ mov(ebx, Operand(esp, 0));  // Copy of array literal.
-      __ mov(edi, FieldOperand(ebx, JSObject::kMapOffset));
       __ mov(ecx, Immediate(Smi::FromInt(i)));
-      __ mov(edx, Immediate(Smi::FromInt(expr->literal_index())));
       StoreArrayLiteralElementStub stub;
       __ CallStub(&stub);
     }
@@ -1822,6 +1815,7 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
   }
 
   if (result_saved) {
+    __ add(esp, Immediate(kPointerSize));  // literal index
     context()->PlugTOS();
   } else {
     context()->Plug(eax);
@@ -1950,22 +1944,38 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
   VisitForStackValue(expr->expression());
 
   switch (expr->yield_kind()) {
-    case Yield::INITIAL:
-    case Yield::SUSPEND: {
-      VisitForStackValue(expr->generator_object());
+    case Yield::SUSPEND:
+      // Pop value from top-of-stack slot; box result into result register.
+      EmitCreateIteratorResult(false);
+      __ push(result_register());
+      // Fall through.
+    case Yield::INITIAL: {
+      Label suspend, continuation, post_runtime, resume;
+
+      __ jmp(&suspend);
+
+      __ bind(&continuation);
+      __ jmp(&resume);
+
+      __ bind(&suspend);
+      VisitForAccumulatorValue(expr->generator_object());
+      ASSERT(continuation.pos() > 0 && Smi::IsValid(continuation.pos()));
+      __ mov(FieldOperand(eax, JSGeneratorObject::kContinuationOffset),
+             Immediate(Smi::FromInt(continuation.pos())));
+      __ mov(FieldOperand(eax, JSGeneratorObject::kContextOffset), esi);
+      __ mov(ecx, esi);
+      __ RecordWriteField(eax, JSGeneratorObject::kContextOffset, ecx, edx,
+                          kDontSaveFPRegs);
+      __ lea(ebx, Operand(ebp, StandardFrameConstants::kExpressionsOffset));
+      __ cmp(esp, ebx);
+      __ j(equal, &post_runtime);
+      __ push(eax);  // generator object
       __ CallRuntime(Runtime::kSuspendJSGeneratorObject, 1);
       __ mov(context_register(),
              Operand(ebp, StandardFrameConstants::kContextOffset));
-
-      Label resume;
-      __ CompareRoot(result_register(), Heap::kTheHoleValueRootIndex);
-      __ j(not_equal, &resume);
-      if (expr->yield_kind() == Yield::SUSPEND) {
-        EmitReturnIteratorResult(false);
-      } else {
-        __ pop(result_register());
-        EmitReturnSequence();
-      }
+      __ bind(&post_runtime);
+      __ pop(result_register());
+      EmitReturnSequence();
 
       __ bind(&resume);
       context()->Plug(result_register());
@@ -1977,7 +1987,10 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
       __ mov(FieldOperand(result_register(),
                           JSGeneratorObject::kContinuationOffset),
              Immediate(Smi::FromInt(JSGeneratorObject::kGeneratorClosed)));
-      EmitReturnIteratorResult(true);
+      // Pop value from top-of-stack slot, box result into result register.
+      EmitCreateIteratorResult(true);
+      EmitUnwindBeforeReturn();
+      EmitReturnSequence();
       break;
     }
 
@@ -1988,74 +2001,69 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
       // [sp + 1 * kPointerSize] iter
       // [sp + 0 * kPointerSize] g
 
-      Label l_catch, l_try, l_resume, l_next, l_call, l_loop;
+      Label l_catch, l_try, l_suspend, l_continuation, l_resume;
+      Label l_next, l_call, l_loop;
       // Initial send value is undefined.
       __ mov(eax, isolate()->factory()->undefined_value());
       __ jmp(&l_next);
 
-      // catch (e) { receiver = iter; f = iter.throw; arg = e; goto l_call; }
+      // catch (e) { receiver = iter; f = 'throw'; arg = e; goto l_call; }
       __ bind(&l_catch);
       handler_table()->set(expr->index(), Smi::FromInt(l_catch.pos()));
-      __ mov(edx, Operand(esp, 1 * kPointerSize));       // iter
-      __ push(edx);                                      // iter
-      __ push(eax);                                      // exception
       __ mov(ecx, isolate()->factory()->throw_string());  // "throw"
-      Handle<Code> throw_ic = isolate()->builtins()->LoadIC_Initialize();
-      CallIC(throw_ic);                                  // iter.throw in eax
+      __ push(ecx);                                      // "throw"
+      __ push(Operand(esp, 2 * kPointerSize));           // iter
+      __ push(eax);                                      // exception
       __ jmp(&l_call);
 
-      // try { received = yield result.value }
+      // try { received = %yield result }
+      // Shuffle the received result above a try handler and yield it without
+      // re-boxing.
       __ bind(&l_try);
-      __ pop(eax);                                       // result.value
+      __ pop(eax);                                       // result
       __ PushTryHandler(StackHandler::CATCH, expr->index());
       const int handler_size = StackHandlerConstants::kSize;
-      __ push(eax);                                      // result.value
-      __ push(Operand(esp, (0 + 1) * kPointerSize + handler_size));  // g
+      __ push(eax);                                      // result
+      __ jmp(&l_suspend);
+      __ bind(&l_continuation);
+      __ jmp(&l_resume);
+      __ bind(&l_suspend);
+      const int generator_object_depth = kPointerSize + handler_size;
+      __ mov(eax, Operand(esp, generator_object_depth));
+      __ push(eax);                                      // g
+      ASSERT(l_continuation.pos() > 0 && Smi::IsValid(l_continuation.pos()));
+      __ mov(FieldOperand(eax, JSGeneratorObject::kContinuationOffset),
+             Immediate(Smi::FromInt(l_continuation.pos())));
+      __ mov(FieldOperand(eax, JSGeneratorObject::kContextOffset), esi);
+      __ mov(ecx, esi);
+      __ RecordWriteField(eax, JSGeneratorObject::kContextOffset, ecx, edx,
+                          kDontSaveFPRegs);
       __ CallRuntime(Runtime::kSuspendJSGeneratorObject, 1);
       __ mov(context_register(),
              Operand(ebp, StandardFrameConstants::kContextOffset));
-      __ CompareRoot(eax, Heap::kTheHoleValueRootIndex);
-      __ j(not_equal, &l_resume);
-      EmitReturnIteratorResult(false);
+      __ pop(eax);                                       // result
+      EmitReturnSequence();
       __ bind(&l_resume);                                // received in eax
       __ PopTryHandler();
 
       // receiver = iter; f = iter.next; arg = received;
       __ bind(&l_next);
-      __ mov(edx, Operand(esp, 1 * kPointerSize));       // iter
-      __ push(edx);                                      // iter
-      __ push(eax);                                      // received
       __ mov(ecx, isolate()->factory()->next_string());  // "next"
-      Handle<Code> next_ic = isolate()->builtins()->LoadIC_Initialize();
-      CallIC(next_ic);                                   // iter.next in eax
+      __ push(ecx);
+      __ push(Operand(esp, 2 * kPointerSize));           // iter
+      __ push(eax);                                      // received
 
-      // result = f.call(receiver, arg);
+      // result = receiver[f](arg);
       __ bind(&l_call);
-      Label l_call_runtime;
-      __ JumpIfSmi(eax, &l_call_runtime);
-      __ CmpObjectType(eax, JS_FUNCTION_TYPE, ebx);
-      __ j(not_equal, &l_call_runtime);
-      __ mov(edi, eax);
-      ParameterCount count(1);
-      __ InvokeFunction(edi, count, CALL_FUNCTION,
-                        NullCallWrapper(), CALL_AS_METHOD);
+      Handle<Code> ic = isolate()->stub_cache()->ComputeKeyedCallInitialize(1);
+      CallIC(ic);
       __ mov(esi, Operand(ebp, StandardFrameConstants::kContextOffset));
-      __ jmp(&l_loop);
-      __ bind(&l_call_runtime);
-      __ push(eax);
-      __ CallRuntime(Runtime::kCall, 3);
+      __ Drop(1);  // The key is still on the stack; drop it.
 
-      // val = result.value; if (!result.done) goto l_try;
+      // if (!result.done) goto l_try;
       __ bind(&l_loop);
-      // result.value
       __ push(eax);                                      // save result
       __ mov(edx, eax);                                  // result
-      __ mov(ecx, isolate()->factory()->value_string());  // "value"
-      Handle<Code> value_ic = isolate()->builtins()->LoadIC_Initialize();
-      CallIC(value_ic);                                  // result.value in eax
-      __ pop(ebx);                                       // result
-      __ push(eax);                                      // result.value
-      __ mov(edx, ebx);                                  // result
       __ mov(ecx, isolate()->factory()->done_string());  // "done"
       Handle<Code> done_ic = isolate()->builtins()->LoadIC_Initialize();
       CallIC(done_ic);                                   // result.done in eax
@@ -2065,7 +2073,10 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
       __ j(zero, &l_try);
 
       // result.value
-      __ pop(eax);                                       // result.value
+      __ pop(edx);                                       // result
+      __ mov(ecx, isolate()->factory()->value_string());  // "value"
+      Handle<Code> value_ic = isolate()->builtins()->LoadIC_Initialize();
+      CallIC(value_ic);                                  // result.value in eax
       context()->DropAndPlug(2, eax);                    // drop iter and g
       break;
     }
@@ -2105,7 +2116,7 @@ void FullCodeGenerator::EmitGeneratorResume(Expression *generator,
   __ mov(ecx, isolate()->factory()->the_hole_value());
   Label push_argument_holes, push_frame;
   __ bind(&push_argument_holes);
-  __ sub(edx, Immediate(1));
+  __ sub(edx, Immediate(Smi::FromInt(1)));
   __ j(carry, &push_frame);
   __ push(ecx);
   __ jmp(&push_argument_holes);
@@ -2169,13 +2180,20 @@ void FullCodeGenerator::EmitGeneratorResume(Expression *generator,
 }
 
 
-void FullCodeGenerator::EmitReturnIteratorResult(bool done) {
+void FullCodeGenerator::EmitCreateIteratorResult(bool done) {
   Label gc_required;
   Label allocated;
 
   Handle<Map> map(isolate()->native_context()->generator_result_map());
 
   __ Allocate(map->instance_size(), eax, ecx, edx, &gc_required, TAG_OBJECT);
+  __ jmp(&allocated);
+
+  __ bind(&gc_required);
+  __ Push(Smi::FromInt(map->instance_size()));
+  __ CallRuntime(Runtime::kAllocateInNewSpace, 1);
+  __ mov(context_register(),
+         Operand(ebp, StandardFrameConstants::kContextOffset));
 
   __ bind(&allocated);
   __ mov(ebx, map);
@@ -2194,34 +2212,14 @@ void FullCodeGenerator::EmitReturnIteratorResult(bool done) {
   // root set.
   __ RecordWriteField(eax, JSGeneratorObject::kResultValuePropertyOffset,
                       ecx, edx, kDontSaveFPRegs);
-
-  if (done) {
-    // Exit all nested statements.
-    NestedStatement* current = nesting_stack_;
-    int stack_depth = 0;
-    int context_length = 0;
-    while (current != NULL) {
-      current = current->Exit(&stack_depth, &context_length);
-    }
-    __ Drop(stack_depth);
-  }
-
-  EmitReturnSequence();
-
-  __ bind(&gc_required);
-  __ Push(Smi::FromInt(map->instance_size()));
-  __ CallRuntime(Runtime::kAllocateInNewSpace, 1);
-  __ mov(context_register(),
-         Operand(ebp, StandardFrameConstants::kContextOffset));
-  __ jmp(&allocated);
 }
 
 
 void FullCodeGenerator::EmitNamedPropertyLoad(Property* prop) {
   SetSourcePosition(prop->position());
   Literal* key = prop->key()->AsLiteral();
-  ASSERT(!key->handle()->IsSmi());
-  __ mov(ecx, Immediate(key->handle()));
+  ASSERT(!key->value()->IsSmi());
+  __ mov(ecx, Immediate(key->value()));
   Handle<Code> ic = isolate()->builtins()->LoadIC_Initialize();
   CallIC(ic, RelocInfo::CODE_TARGET, prop->PropertyFeedbackId());
 }
@@ -2375,7 +2373,7 @@ void FullCodeGenerator::EmitAssignment(Expression* expr) {
       VisitForAccumulatorValue(prop->obj());
       __ mov(edx, eax);
       __ pop(eax);  // Restore value.
-      __ mov(ecx, prop->key()->AsLiteral()->handle());
+      __ mov(ecx, prop->key()->AsLiteral()->value());
       Handle<Code> ic = is_classic_mode()
           ? isolate()->builtins()->StoreIC_Initialize()
           : isolate()->builtins()->StoreIC_Initialize_Strict();
@@ -2502,7 +2500,7 @@ void FullCodeGenerator::EmitNamedPropertyAssignment(Assignment* expr) {
 
   // Record source code position before IC call.
   SetSourcePosition(expr->position());
-  __ mov(ecx, prop->key()->AsLiteral()->handle());
+  __ mov(ecx, prop->key()->AsLiteral()->value());
   __ pop(edx);
   Handle<Code> ic = is_classic_mode()
       ? isolate()->builtins()->StoreIC_Initialize()
@@ -2637,8 +2635,7 @@ void FullCodeGenerator::EmitCallWithStub(Call* expr, CallFunctionFlags flags) {
   flags = static_cast<CallFunctionFlags>(flags | RECORD_CALL_TARGET);
   Handle<Object> uninitialized =
       TypeFeedbackCells::UninitializedSentinel(isolate());
-  Handle<JSGlobalPropertyCell> cell =
-      isolate()->factory()->NewJSGlobalPropertyCell(uninitialized);
+  Handle<Cell> cell = isolate()->factory()->NewCell(uninitialized);
   RecordTypeFeedbackCell(expr->CallFeedbackId(), cell);
   __ mov(ebx, cell);
 
@@ -2768,7 +2765,7 @@ void FullCodeGenerator::VisitCall(Call* expr) {
     }
     if (property->key()->IsPropertyName()) {
       EmitCallWithIC(expr,
-                     property->key()->AsLiteral()->handle(),
+                     property->key()->AsLiteral()->value(),
                      RelocInfo::CODE_TARGET);
     } else {
       EmitKeyedCallWithIC(expr, property->key());
@@ -2822,8 +2819,7 @@ void FullCodeGenerator::VisitCallNew(CallNew* expr) {
   // Record call targets in unoptimized code.
   Handle<Object> uninitialized =
       TypeFeedbackCells::UninitializedSentinel(isolate());
-  Handle<JSGlobalPropertyCell> cell =
-      isolate()->factory()->NewJSGlobalPropertyCell(uninitialized);
+  Handle<Cell> cell = isolate()->factory()->NewCell(uninitialized);
   RecordTypeFeedbackCell(expr->CallNewFeedbackId(), cell);
   __ mov(ebx, cell);
 
@@ -3387,7 +3383,7 @@ void FullCodeGenerator::EmitDateField(CallRuntime* expr) {
   ZoneList<Expression*>* args = expr->arguments();
   ASSERT(args->length() == 2);
   ASSERT_NE(NULL, args->at(1)->AsLiteral());
-  Smi* index = Smi::cast(*(args->at(1)->AsLiteral()->handle()));
+  Smi* index = Smi::cast(*(args->at(1)->AsLiteral()->value()));
 
   VisitForAccumulatorValue(args->at(0));  // Load the object.
 
@@ -3816,7 +3812,7 @@ void FullCodeGenerator::EmitGetFromCache(CallRuntime* expr) {
   ASSERT_EQ(2, args->length());
 
   ASSERT_NE(NULL, args->at(0)->AsLiteral());
-  int cache_id = Smi::cast(*(args->at(0)->AsLiteral()->handle()))->value();
+  int cache_id = Smi::cast(*(args->at(0)->AsLiteral()->value()))->value();
 
   Handle<FixedArray> jsfunction_result_caches(
       isolate()->native_context()->jsfunction_result_caches());
@@ -4528,7 +4524,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
       }
       break;
     case NAMED_PROPERTY: {
-      __ mov(ecx, prop->key()->AsLiteral()->handle());
+      __ mov(ecx, prop->key()->AsLiteral()->value());
       __ pop(edx);
       Handle<Code> ic = is_classic_mode()
           ? isolate()->builtins()->StoreIC_Initialize()
index 95c7c02..eb6ccd9 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
 
 #include "codegen.h"
 #include "ic-inl.h"
@@ -317,7 +317,8 @@ static void GenerateKeyNameCheck(MacroAssembler* masm,
   __ test(hash, Immediate(Name::kContainsCachedArrayIndexMask));
   __ j(zero, index_string);
 
-  // Is the string internalized?
+  // Is the string internalized? We already know it's a string so a single
+  // bit test is enough.
   STATIC_ASSERT(kInternalizedTag != 0);
   __ test_b(FieldOperand(map, Map::kInstanceTypeOffset), kIsInternalizedMask);
   __ j(zero, not_unique);
@@ -1482,8 +1483,8 @@ void StoreIC::GenerateNormal(MacroAssembler* masm) {
 }
 
 
-void StoreIC::GenerateGlobalProxy(MacroAssembler* masm,
-                                  StrictModeFlag strict_mode) {
+void StoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm,
+                                         StrictModeFlag strict_mode) {
   // ----------- S t a t e -------------
   //  -- eax    : value
   //  -- ecx    : name
index 7d685bf..defae1c 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
 
 #include "ia32/lithium-codegen-ia32.h"
 #include "ic.h"
@@ -74,7 +74,7 @@ class SafepointGenerator : public CallWrapper {
 #define __ masm()->
 
 bool LCodeGen::GenerateCode() {
-  HPhase phase("Z_Code generation", chunk());
+  LPhase phase("Z_Code generation", chunk());
   ASSERT(is_unused());
   status_ = GENERATING;
 
@@ -109,20 +109,7 @@ void LCodeGen::FinishCode(Handle<Code> code) {
   if (!info()->IsStub()) {
     Deoptimizer::EnsureRelocSpaceForLazyDeoptimization(code);
   }
-  for (int i = 0 ; i < prototype_maps_.length(); i++) {
-    prototype_maps_.at(i)->AddDependentCode(
-        DependentCode::kPrototypeCheckGroup, code);
-  }
-  for (int i = 0 ; i < transition_maps_.length(); i++) {
-    transition_maps_.at(i)->AddDependentCode(
-        DependentCode::kTransitionGroup, code);
-  }
-  if (graph()->depends_on_empty_array_proto_elements()) {
-    isolate()->initial_object_prototype()->map()->AddDependentCode(
-        DependentCode::kElementsCantBeAddedGroup, code);
-    isolate()->initial_array_prototype()->map()->AddDependentCode(
-        DependentCode::kElementsCantBeAddedGroup, code);
-  }
+  info()->CommitDependencies(code);
 }
 
 
@@ -627,27 +614,15 @@ Operand LCodeGen::HighOperand(LOperand* op) {
 
 
 void LCodeGen::WriteTranslation(LEnvironment* environment,
-                                Translation* translation,
-                                int* pushed_arguments_index,
-                                int* pushed_arguments_count) {
+                                Translation* translation) {
   if (environment == NULL) return;
 
   // The translation includes one command per value in the environment.
-  int translation_size = environment->values()->length();
+  int translation_size = environment->translation_size();
   // The output frame height does not include the parameters.
   int height = translation_size - environment->parameter_count();
 
-  // Function parameters are arguments to the outermost environment. The
-  // arguments index points to the first element of a sequence of tagged
-  // values on the stack that represent the arguments. This needs to be
-  // kept in sync with the LArgumentsElements implementation.
-  *pushed_arguments_index = -environment->parameter_count();
-  *pushed_arguments_count = environment->parameter_count();
-
-  WriteTranslation(environment->outer(),
-                   translation,
-                   pushed_arguments_index,
-                   pushed_arguments_count);
+  WriteTranslation(environment->outer(), translation);
   bool has_closure_id = !info()->closure().is_null() &&
       !info()->closure().is_identical_to(environment->closure());
   int closure_id = has_closure_id
@@ -680,60 +655,29 @@ void LCodeGen::WriteTranslation(LEnvironment* environment,
       UNREACHABLE();
   }
 
-  // Inlined frames which push their arguments cause the index to be
-  // bumped and another stack area to be used for materialization,
-  // otherwise actual argument values are unknown for inlined frames.
-  bool arguments_known = true;
-  int arguments_index = *pushed_arguments_index;
-  int arguments_count = *pushed_arguments_count;
-  if (environment->entry() != NULL) {
-    arguments_known = environment->entry()->arguments_pushed();
-    arguments_index = arguments_index < 0
-        ? GetStackSlotCount() : arguments_index + arguments_count;
-    arguments_count = environment->entry()->arguments_count() + 1;
-    if (environment->entry()->arguments_pushed()) {
-      *pushed_arguments_index = arguments_index;
-      *pushed_arguments_count = arguments_count;
-    }
-  }
-
   for (int i = 0; i < translation_size; ++i) {
     LOperand* value = environment->values()->at(i);
-    // spilled_registers_ and spilled_double_registers_ are either
-    // both NULL or both set.
-    if (environment->spilled_registers() != NULL && value != NULL) {
-      if (value->IsRegister() &&
-          environment->spilled_registers()[value->index()] != NULL) {
-        translation->MarkDuplicate();
+
+    // TODO(mstarzinger): Introduce marker operands to indicate that this value
+    // is not present and must be reconstructed from the deoptimizer. Currently
+    // this is only used for the arguments object.
+    if (value == NULL) {
+      int arguments_count = environment->values()->length() - translation_size;
+      translation->BeginArgumentsObject(arguments_count);
+      for (int i = 0; i < arguments_count; ++i) {
+        LOperand* value = environment->values()->at(translation_size + i);
         AddToTranslation(translation,
-                         environment->spilled_registers()[value->index()],
-                         environment->HasTaggedValueAt(i),
-                         environment->HasUint32ValueAt(i),
-                         arguments_known,
-                         arguments_index,
-                         arguments_count);
-      } else if (
-          value->IsDoubleRegister() &&
-          environment->spilled_double_registers()[value->index()] != NULL) {
-        translation->MarkDuplicate();
-        AddToTranslation(
-            translation,
-            environment->spilled_double_registers()[value->index()],
-            false,
-            false,
-            arguments_known,
-            arguments_index,
-            arguments_count);
+                         value,
+                         environment->HasTaggedValueAt(translation_size + i),
+                         environment->HasUint32ValueAt(translation_size + i));
       }
+      continue;
     }
 
     AddToTranslation(translation,
                      value,
                      environment->HasTaggedValueAt(i),
-                     environment->HasUint32ValueAt(i),
-                     arguments_known,
-                     arguments_index,
-                     arguments_count);
+                     environment->HasUint32ValueAt(i));
   }
 }
 
@@ -741,17 +685,8 @@ void LCodeGen::WriteTranslation(LEnvironment* environment,
 void LCodeGen::AddToTranslation(Translation* translation,
                                 LOperand* op,
                                 bool is_tagged,
-                                bool is_uint32,
-                                bool arguments_known,
-                                int arguments_index,
-                                int arguments_count) {
-  if (op == NULL) {
-    // TODO(twuerthinger): Introduce marker operands to indicate that this value
-    // is not present and must be reconstructed from the deoptimizer. Currently
-    // this is only used for the arguments object.
-    translation->StoreArgumentsObject(
-        arguments_known, arguments_index, arguments_count);
-  } else if (op->IsStackSlot()) {
+                                bool is_uint32) {
+  if (op->IsStackSlot()) {
     if (is_tagged) {
       translation->StoreStackSlot(op->index());
     } else if (is_uint32) {
@@ -877,8 +812,6 @@ void LCodeGen::RegisterEnvironmentForDeoptimization(
 
     int frame_count = 0;
     int jsframe_count = 0;
-    int args_index = 0;
-    int args_count = 0;
     for (LEnvironment* e = environment; e != NULL; e = e->outer()) {
       ++frame_count;
       if (e->frame_type() == JS_FUNCTION) {
@@ -886,7 +819,7 @@ void LCodeGen::RegisterEnvironmentForDeoptimization(
       }
     }
     Translation translation(&translations_, frame_count, jsframe_count, zone());
-    WriteTranslation(environment, &translation, &args_index, &args_count);
+    WriteTranslation(environment, &translation);
     int deoptimization_index = deoptimizations_.length();
     int pc_offset = masm()->pc_offset();
     environment->Register(deoptimization_index,
@@ -941,7 +874,7 @@ void LCodeGen::DeoptimizeIf(Condition cc,
     __ popfd();
   }
 
-  if (FLAG_trap_on_deopt) {
+  if (FLAG_trap_on_deopt && info()->IsOptimizing()) {
     Label done;
     if (cc != no_condition) {
       __ j(NegateCondition(cc), &done, Label::kNear);
@@ -1229,7 +1162,8 @@ void LCodeGen::DoCallStub(LCallStub* instr) {
 
 
 void LCodeGen::DoUnknownOSRValue(LUnknownOSRValue* instr) {
-  // Nothing to do.
+  // Record the address of the first unknown OSR value as the place to enter.
+  if (osr_pc_offset_ == -1) osr_pc_offset_ = masm()->pc_offset();
 }
 
 
@@ -1263,12 +1197,12 @@ void LCodeGen::DoModI(LModI* instr) {
     __ and_(left_reg, divisor - 1);
     __ bind(&done);
 
-  } else if (hmod->has_fixed_right_arg()) {
+  } else if (hmod->fixed_right_arg().has_value) {
     Register left_reg = ToRegister(instr->left());
     ASSERT(left_reg.is(ToRegister(instr->result())));
     Register right_reg = ToRegister(instr->right());
 
-    int32_t divisor = hmod->fixed_right_arg_value();
+    int32_t divisor = hmod->fixed_right_arg().value;
     ASSERT(IsPowerOf2(divisor));
 
     // Check if our assumption of a fixed right operand still holds.
@@ -1839,14 +1773,6 @@ void LCodeGen::DoConstantT(LConstantT* instr) {
 }
 
 
-void LCodeGen::DoFixedArrayBaseLength(
-    LFixedArrayBaseLength* instr) {
-  Register result = ToRegister(instr->result());
-  Register array = ToRegister(instr->value());
-  __ mov(result, FieldOperand(array, FixedArrayBase::kLengthOffset));
-}
-
-
 void LCodeGen::DoMapEnumLength(LMapEnumLength* instr) {
   Register result = ToRegister(instr->result());
   Register map = ToRegister(instr->value());
@@ -1876,8 +1802,11 @@ void LCodeGen::DoValueOf(LValueOf* instr) {
   ASSERT(input.is(result));
 
   Label done;
-  // If the object is a smi return the object.
-  __ JumpIfSmi(input, &done, Label::kNear);
+
+  if (!instr->hydrogen()->value()->IsHeapObject()) {
+    // If the object is a smi return the object.
+    __ JumpIfSmi(input, &done, Label::kNear);
+  }
 
   // If the object is not a value type, return the object.
   __ CmpObjectType(input, JS_VALUE_TYPE, map);
@@ -2127,10 +2056,12 @@ int LCodeGen::GetNextEmittedBlock() const {
 }
 
 
-void LCodeGen::EmitBranch(int left_block, int right_block, Condition cc) {
+template<class InstrType>
+void LCodeGen::EmitBranch(InstrType instr, Condition cc) {
+  int right_block = instr->FalseDestination(chunk_);
+  int left_block = instr->TrueDestination(chunk_);
+
   int next_block = GetNextEmittedBlock();
-  right_block = chunk_->LookupDestination(right_block);
-  left_block = chunk_->LookupDestination(left_block);
 
   if (right_block == left_block) {
     EmitGoto(left_block);
@@ -2146,22 +2077,19 @@ void LCodeGen::EmitBranch(int left_block, int right_block, Condition cc) {
 
 
 void LCodeGen::DoBranch(LBranch* instr) {
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
   Representation r = instr->hydrogen()->value()->representation();
   if (r.IsSmiOrInteger32()) {
     ASSERT(!info()->IsStub());
     Register reg = ToRegister(instr->value());
     __ test(reg, Operand(reg));
-    EmitBranch(true_block, false_block, not_zero);
+    EmitBranch(instr, not_zero);
   } else if (r.IsDouble()) {
     ASSERT(!info()->IsStub());
     CpuFeatureScope scope(masm(), SSE2);
     XMMRegister reg = ToDoubleRegister(instr->value());
     __ xorps(xmm0, xmm0);
     __ ucomisd(reg, xmm0);
-    EmitBranch(true_block, false_block, not_equal);
+    EmitBranch(instr, not_equal);
   } else {
     ASSERT(r.IsTagged());
     Register reg = ToRegister(instr->value());
@@ -2169,43 +2097,52 @@ void LCodeGen::DoBranch(LBranch* instr) {
     if (type.IsBoolean()) {
       ASSERT(!info()->IsStub());
       __ cmp(reg, factory()->true_value());
-      EmitBranch(true_block, false_block, equal);
+      EmitBranch(instr, equal);
     } else if (type.IsSmi()) {
       ASSERT(!info()->IsStub());
       __ test(reg, Operand(reg));
-      EmitBranch(true_block, false_block, not_equal);
+      EmitBranch(instr, not_equal);
+    } else if (type.IsJSArray()) {
+      ASSERT(!info()->IsStub());
+      EmitBranch(instr, no_condition);
+    } else if (type.IsHeapNumber()) {
+      ASSERT(!info()->IsStub());
+      CpuFeatureScope scope(masm(), SSE2);
+      __ xorps(xmm0, xmm0);
+      __ ucomisd(xmm0, FieldOperand(reg, HeapNumber::kValueOffset));
+      EmitBranch(instr, not_equal);
+    } else if (type.IsString()) {
+      ASSERT(!info()->IsStub());
+      __ cmp(FieldOperand(reg, String::kLengthOffset), Immediate(0));
+      EmitBranch(instr, not_equal);
     } else {
-      Label* true_label = chunk_->GetAssemblyLabel(true_block);
-      Label* false_label = chunk_->GetAssemblyLabel(false_block);
-
       ToBooleanStub::Types expected = instr->hydrogen()->expected_input_types();
-      // Avoid deopts in the case where we've never executed this path before.
-      if (expected.IsEmpty()) expected = ToBooleanStub::all_types();
+      if (expected.IsEmpty()) expected = ToBooleanStub::Types::Generic();
 
       if (expected.Contains(ToBooleanStub::UNDEFINED)) {
         // undefined -> false.
         __ cmp(reg, factory()->undefined_value());
-        __ j(equal, false_label);
+        __ j(equal, instr->FalseLabel(chunk_));
       }
       if (expected.Contains(ToBooleanStub::BOOLEAN)) {
         // true -> true.
         __ cmp(reg, factory()->true_value());
-        __ j(equal, true_label);
+        __ j(equal, instr->TrueLabel(chunk_));
         // false -> false.
         __ cmp(reg, factory()->false_value());
-        __ j(equal, false_label);
+        __ j(equal, instr->FalseLabel(chunk_));
       }
       if (expected.Contains(ToBooleanStub::NULL_TYPE)) {
         // 'null' -> false.
         __ cmp(reg, factory()->null_value());
-        __ j(equal, false_label);
+        __ j(equal, instr->FalseLabel(chunk_));
       }
 
       if (expected.Contains(ToBooleanStub::SMI)) {
         // Smis: 0 -> false, all other -> true.
         __ test(reg, Operand(reg));
-        __ j(equal, false_label);
-        __ JumpIfSmi(reg, true_label);
+        __ j(equal, instr->FalseLabel(chunk_));
+        __ JumpIfSmi(reg, instr->TrueLabel(chunk_));
       } else if (expected.NeedsMap()) {
         // If we need a map later and have a Smi -> deopt.
         __ test(reg, Immediate(kSmiTagMask));
@@ -2222,14 +2159,14 @@ void LCodeGen::DoBranch(LBranch* instr) {
           // Undetectable -> false.
           __ test_b(FieldOperand(map, Map::kBitFieldOffset),
                     1 << Map::kIsUndetectable);
-          __ j(not_zero, false_label);
+          __ j(not_zero, instr->FalseLabel(chunk_));
         }
       }
 
       if (expected.Contains(ToBooleanStub::SPEC_OBJECT)) {
         // spec object -> true.
         __ CmpInstanceType(map, FIRST_SPEC_OBJECT_TYPE);
-        __ j(above_equal, true_label);
+        __ j(above_equal, instr->TrueLabel(chunk_));
       }
 
       if (expected.Contains(ToBooleanStub::STRING)) {
@@ -2238,15 +2175,15 @@ void LCodeGen::DoBranch(LBranch* instr) {
         __ CmpInstanceType(map, FIRST_NONSTRING_TYPE);
         __ j(above_equal, &not_string, Label::kNear);
         __ cmp(FieldOperand(reg, String::kLengthOffset), Immediate(0));
-        __ j(not_zero, true_label);
-        __ jmp(false_label);
+        __ j(not_zero, instr->TrueLabel(chunk_));
+        __ jmp(instr->FalseLabel(chunk_));
         __ bind(&not_string);
       }
 
       if (expected.Contains(ToBooleanStub::SYMBOL)) {
         // Symbol value -> true.
         __ CmpInstanceType(map, SYMBOL_TYPE);
-        __ j(equal, true_label);
+        __ j(equal, instr->TrueLabel(chunk_));
       }
 
       if (expected.Contains(ToBooleanStub::HEAP_NUMBER)) {
@@ -2264,13 +2201,16 @@ void LCodeGen::DoBranch(LBranch* instr) {
           __ fld_d(FieldOperand(reg, HeapNumber::kValueOffset));
           __ FCmp();
         }
-        __ j(zero, false_label);
-        __ jmp(true_label);
+        __ j(zero, instr->FalseLabel(chunk_));
+        __ jmp(instr->TrueLabel(chunk_));
         __ bind(&not_heap_number);
       }
 
-      // We've seen something for the first time -> deopt.
-      DeoptimizeIf(no_condition, instr->environment());
+      if (!expected.IsGeneric()) {
+        // We've seen something for the first time -> deopt.
+        // This can only happen if we are not generic already.
+        DeoptimizeIf(no_condition, instr->environment());
+      }
     }
   }
 }
@@ -2278,7 +2218,7 @@ void LCodeGen::DoBranch(LBranch* instr) {
 
 void LCodeGen::EmitGoto(int block) {
   if (!IsNextEmittedBlock(block)) {
-    __ jmp(chunk_->GetAssemblyLabel(chunk_->LookupDestination(block)));
+    __ jmp(chunk_->GetAssemblyLabel(LookupDestination(block)));
   }
 }
 
@@ -2319,17 +2259,14 @@ Condition LCodeGen::TokenToCondition(Token::Value op, bool is_unsigned) {
 void LCodeGen::DoCmpIDAndBranch(LCmpIDAndBranch* instr) {
   LOperand* left = instr->left();
   LOperand* right = instr->right();
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
   Condition cc = TokenToCondition(instr->op(), instr->is_double());
 
   if (left->IsConstantOperand() && right->IsConstantOperand()) {
     // We can statically evaluate the comparison.
     double left_val = ToDouble(LConstantOperand::cast(left));
     double right_val = ToDouble(LConstantOperand::cast(right));
-    int next_block =
-      EvalComparison(instr->op(), left_val, right_val) ? true_block
-                                                       : false_block;
+    int next_block = EvalComparison(instr->op(), left_val, right_val) ?
+        instr->TrueDestination(chunk_) : instr->FalseDestination(chunk_);
     EmitGoto(next_block);
   } else {
     if (instr->is_double()) {
@@ -2337,7 +2274,7 @@ void LCodeGen::DoCmpIDAndBranch(LCmpIDAndBranch* instr) {
       // Don't base result on EFLAGS when a NaN is involved. Instead
       // jump to the false block.
       __ ucomisd(ToDoubleRegister(left), ToDoubleRegister(right));
-      __ j(parity_even, chunk_->GetAssemblyLabel(false_block));
+      __ j(parity_even, instr->FalseLabel(chunk_));
     } else {
       if (right->IsConstantOperand()) {
         int32_t const_value = ToInteger32(LConstantOperand::cast(right));
@@ -2359,15 +2296,13 @@ void LCodeGen::DoCmpIDAndBranch(LCmpIDAndBranch* instr) {
         __ cmp(ToRegister(left), ToOperand(right));
       }
     }
-    EmitBranch(true_block, false_block, cc);
+    EmitBranch(instr, cc);
   }
 }
 
 
 void LCodeGen::DoCmpObjectEqAndBranch(LCmpObjectEqAndBranch* instr) {
   Register left = ToRegister(instr->left());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
 
   if (instr->right()->IsConstantOperand()) {
     Handle<Object> right = ToHandle(LConstantOperand::cast(instr->right()));
@@ -2376,17 +2311,15 @@ void LCodeGen::DoCmpObjectEqAndBranch(LCmpObjectEqAndBranch* instr) {
     Operand right = ToOperand(instr->right());
     __ cmp(left, right);
   }
-  EmitBranch(true_block, false_block, equal);
+  EmitBranch(instr, equal);
 }
 
 
 void LCodeGen::DoCmpConstantEqAndBranch(LCmpConstantEqAndBranch* instr) {
   Register left = ToRegister(instr->left());
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
 
   __ cmp(left, instr->hydrogen()->right());
-  EmitBranch(true_block, false_block, equal);
+  EmitBranch(instr, equal);
 }
 
 
@@ -2417,21 +2350,20 @@ void LCodeGen::DoIsObjectAndBranch(LIsObjectAndBranch* instr) {
   Register reg = ToRegister(instr->value());
   Register temp = ToRegister(instr->temp());
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-  Label* true_label = chunk_->GetAssemblyLabel(true_block);
-  Label* false_label = chunk_->GetAssemblyLabel(false_block);
+  Condition true_cond = EmitIsObject(
+      reg, temp, instr->FalseLabel(chunk_), instr->TrueLabel(chunk_));
 
-  Condition true_cond = EmitIsObject(reg, temp, false_label, true_label);
-
-  EmitBranch(true_block, false_block, true_cond);
+  EmitBranch(instr, true_cond);
 }
 
 
 Condition LCodeGen::EmitIsString(Register input,
                                  Register temp1,
-                                 Label* is_not_string) {
-  __ JumpIfSmi(input, is_not_string);
+                                 Label* is_not_string,
+                                 SmiCheck check_needed = INLINE_SMI_CHECK) {
+  if (check_needed == INLINE_SMI_CHECK) {
+    __ JumpIfSmi(input, is_not_string);
+  }
 
   Condition cond = masm_->IsObjectStringType(input, temp1, temp1);
 
@@ -2443,24 +2375,22 @@ void LCodeGen::DoIsStringAndBranch(LIsStringAndBranch* instr) {
   Register reg = ToRegister(instr->value());
   Register temp = ToRegister(instr->temp());
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-  Label* false_label = chunk_->GetAssemblyLabel(false_block);
+  SmiCheck check_needed =
+      instr->hydrogen()->value()->IsHeapObject()
+          ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
 
-  Condition true_cond = EmitIsString(reg, temp, false_label);
+  Condition true_cond = EmitIsString(
+      reg, temp, instr->FalseLabel(chunk_), check_needed);
 
-  EmitBranch(true_block, false_block, true_cond);
+  EmitBranch(instr, true_cond);
 }
 
 
 void LCodeGen::DoIsSmiAndBranch(LIsSmiAndBranch* instr) {
   Operand input = ToOperand(instr->value());
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
   __ test(input, Immediate(kSmiTagMask));
-  EmitBranch(true_block, false_block, zero);
+  EmitBranch(instr, zero);
 }
 
 
@@ -2468,15 +2398,14 @@ void LCodeGen::DoIsUndetectableAndBranch(LIsUndetectableAndBranch* instr) {
   Register input = ToRegister(instr->value());
   Register temp = ToRegister(instr->temp());
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
-  STATIC_ASSERT(kSmiTag == 0);
-  __ JumpIfSmi(input, chunk_->GetAssemblyLabel(false_block));
+  if (!instr->hydrogen()->value()->IsHeapObject()) {
+    STATIC_ASSERT(kSmiTag == 0);
+    __ JumpIfSmi(input, instr->FalseLabel(chunk_));
+  }
   __ mov(temp, FieldOperand(input, HeapObject::kMapOffset));
   __ test_b(FieldOperand(temp, Map::kBitFieldOffset),
             1 << Map::kIsUndetectable);
-  EmitBranch(true_block, false_block, not_zero);
+  EmitBranch(instr, not_zero);
 }
 
 
@@ -2502,8 +2431,6 @@ static Condition ComputeCompareCondition(Token::Value op) {
 
 void LCodeGen::DoStringCompareAndBranch(LStringCompareAndBranch* instr) {
   Token::Value op = instr->op();
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
 
   Handle<Code> ic = CompareIC::GetUninitialized(isolate(), op);
   CallCode(ic, RelocInfo::CODE_TARGET, instr);
@@ -2511,7 +2438,7 @@ void LCodeGen::DoStringCompareAndBranch(LStringCompareAndBranch* instr) {
   Condition condition = ComputeCompareCondition(op);
   __ test(eax, Operand(eax));
 
-  EmitBranch(true_block, false_block, condition);
+  EmitBranch(instr, condition);
 }
 
 
@@ -2539,15 +2466,12 @@ void LCodeGen::DoHasInstanceTypeAndBranch(LHasInstanceTypeAndBranch* instr) {
   Register input = ToRegister(instr->value());
   Register temp = ToRegister(instr->temp());
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
-  Label* false_label = chunk_->GetAssemblyLabel(false_block);
-
-  __ JumpIfSmi(input, false_label);
+  if (!instr->hydrogen()->value()->IsHeapObject()) {
+    __ JumpIfSmi(input, instr->FalseLabel(chunk_));
+  }
 
   __ CmpObjectType(input, TestType(instr->hydrogen()), temp);
-  EmitBranch(true_block, false_block, BranchCondition(instr->hydrogen()));
+  EmitBranch(instr, BranchCondition(instr->hydrogen()));
 }
 
 
@@ -2566,12 +2490,9 @@ void LCodeGen::DoHasCachedArrayIndexAndBranch(
     LHasCachedArrayIndexAndBranch* instr) {
   Register input = ToRegister(instr->value());
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
   __ test(FieldOperand(input, String::kHashFieldOffset),
           Immediate(String::kContainsCachedArrayIndexMask));
-  EmitBranch(true_block, false_block, equal);
+  EmitBranch(instr, equal);
 }
 
 
@@ -2647,25 +2568,17 @@ void LCodeGen::DoClassOfTestAndBranch(LClassOfTestAndBranch* instr) {
 
   Handle<String> class_name = instr->hydrogen()->class_name();
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
-  Label* true_label = chunk_->GetAssemblyLabel(true_block);
-  Label* false_label = chunk_->GetAssemblyLabel(false_block);
+  EmitClassOfTest(instr->TrueLabel(chunk_), instr->FalseLabel(chunk_),
+      class_name, input, temp, temp2);
 
-  EmitClassOfTest(true_label, false_label, class_name, input, temp, temp2);
-
-  EmitBranch(true_block, false_block, equal);
+  EmitBranch(instr, equal);
 }
 
 
 void LCodeGen::DoCmpMapAndBranch(LCmpMapAndBranch* instr) {
   Register reg = ToRegister(instr->value());
-  int true_block = instr->true_block_id();
-  int false_block = instr->false_block_id();
-
   __ cmp(FieldOperand(reg, HeapObject::kMapOffset), instr->map());
-  EmitBranch(true_block, false_block, equal);
+  EmitBranch(instr, equal);
 }
 
 
@@ -2719,9 +2632,8 @@ void LCodeGen::DoInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr) {
   Register map = ToRegister(instr->temp());
   __ mov(map, FieldOperand(object, HeapObject::kMapOffset));
   __ bind(deferred->map_check());  // Label for calculating code patching.
-  Handle<JSGlobalPropertyCell> cache_cell =
-      factory()->NewJSGlobalPropertyCell(factory()->the_hole_value());
-  __ cmp(map, Operand::Cell(cache_cell));  // Patched to cached map.
+  Handle<Cell> cache_cell = factory()->NewCell(factory()->the_hole_value());
+  __ cmp(map, Operand::ForCell(cache_cell));  // Patched to cached map.
   __ j(not_equal, &cache_miss, Label::kNear);
   __ mov(eax, factory()->the_hole_value());  // Patched to either true or false.
   __ jmp(&done);
@@ -2903,7 +2815,7 @@ void LCodeGen::DoReturn(LReturn* instr) {
 
 void LCodeGen::DoLoadGlobalCell(LLoadGlobalCell* instr) {
   Register result = ToRegister(instr->result());
-  __ mov(result, Operand::Cell(instr->hydrogen()->cell()));
+  __ mov(result, Operand::ForCell(instr->hydrogen()->cell()));
   if (instr->hydrogen()->RequiresHoleCheck()) {
     __ cmp(result, factory()->the_hole_value());
     DeoptimizeIf(equal, instr->environment());
@@ -2926,19 +2838,19 @@ void LCodeGen::DoLoadGlobalGeneric(LLoadGlobalGeneric* instr) {
 
 void LCodeGen::DoStoreGlobalCell(LStoreGlobalCell* instr) {
   Register value = ToRegister(instr->value());
-  Handle<JSGlobalPropertyCell> cell_handle = instr->hydrogen()->cell();
+  Handle<PropertyCell> cell_handle = instr->hydrogen()->cell();
 
   // If the cell we are storing to contains the hole it could have
   // been deleted from the property dictionary. In that case, we need
   // to update the property details in the property dictionary to mark
   // it as no longer deleted. We deoptimize in that case.
   if (instr->hydrogen()->RequiresHoleCheck()) {
-    __ cmp(Operand::Cell(cell_handle), factory()->the_hole_value());
+    __ cmp(Operand::ForCell(cell_handle), factory()->the_hole_value());
     DeoptimizeIf(equal, instr->environment());
   }
 
   // Store the value.
-  __ mov(Operand::Cell(cell_handle), value);
+  __ mov(Operand::ForCell(cell_handle), value);
   // Cells are always rescanned, so no write barrier here.
 }
 
@@ -2993,9 +2905,9 @@ void LCodeGen::DoStoreContextSlot(LStoreContextSlot* instr) {
 
   __ mov(target, value);
   if (instr->hydrogen()->NeedsWriteBarrier()) {
-    HType type = instr->hydrogen()->value()->type();
     SmiCheck check_needed =
-        type.IsHeapObject() ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
+        instr->hydrogen()->value()->IsHeapObject()
+            ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
     Register temp = ToRegister(instr->temp());
     int offset = Context::SlotOffset(instr->slot_index());
     __ RecordWriteContextSlot(context,
@@ -4238,12 +4150,9 @@ void LCodeGen::DoCallNew(LCallNew* instr) {
   ASSERT(ToRegister(instr->constructor()).is(edi));
   ASSERT(ToRegister(instr->result()).is(eax));
 
-  if (FLAG_optimize_constructed_arrays) {
-    // No cell in ebx for construct type feedback in optimized code
-    Handle<Object> undefined_value(isolate()->heap()->undefined_value(),
-                                   isolate());
-    __ mov(ebx, Immediate(undefined_value));
-  }
+  // No cell in ebx for construct type feedback in optimized code
+  Handle<Object> undefined_value(isolate()->factory()->undefined_value());
+  __ mov(ebx, Immediate(undefined_value));
   CallConstructStub stub(NO_CALL_FUNCTION_FLAGS);
   __ Set(eax, Immediate(instr->arity()));
   CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
@@ -4254,22 +4163,42 @@ void LCodeGen::DoCallNewArray(LCallNewArray* instr) {
   ASSERT(ToRegister(instr->context()).is(esi));
   ASSERT(ToRegister(instr->constructor()).is(edi));
   ASSERT(ToRegister(instr->result()).is(eax));
-  ASSERT(FLAG_optimize_constructed_arrays);
 
   __ Set(eax, Immediate(instr->arity()));
   __ mov(ebx, instr->hydrogen()->property_cell());
   ElementsKind kind = instr->hydrogen()->elements_kind();
-  bool disable_allocation_sites =
-      (AllocationSiteInfo::GetMode(kind) == TRACK_ALLOCATION_SITE);
+  AllocationSiteOverrideMode override_mode =
+      (AllocationSiteInfo::GetMode(kind) == TRACK_ALLOCATION_SITE)
+          ? DISABLE_ALLOCATION_SITES
+          : DONT_OVERRIDE;
+  ContextCheckMode context_mode = CONTEXT_CHECK_NOT_REQUIRED;
 
   if (instr->arity() == 0) {
-    ArrayNoArgumentConstructorStub stub(kind, disable_allocation_sites);
+    ArrayNoArgumentConstructorStub stub(kind, context_mode, override_mode);
     CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
   } else if (instr->arity() == 1) {
-    ArraySingleArgumentConstructorStub stub(kind, disable_allocation_sites);
+    Label done;
+    if (IsFastPackedElementsKind(kind)) {
+      Label packed_case;
+      // We might need a change here
+      // look at the first argument
+      __ mov(ecx, Operand(esp, 0));
+      __ test(ecx, ecx);
+      __ j(zero, &packed_case);
+
+      ElementsKind holey_kind = GetHoleyElementsKind(kind);
+      ArraySingleArgumentConstructorStub stub(holey_kind, context_mode,
+                                              override_mode);
+      CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
+      __ jmp(&done);
+      __ bind(&packed_case);
+    }
+
+    ArraySingleArgumentConstructorStub stub(kind, context_mode, override_mode);
     CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
+    __ bind(&done);
   } else {
-    ArrayNArgumentsConstructorStub stub(kind, disable_allocation_sites);
+    ArrayNArgumentsConstructorStub stub(kind, context_mode, override_mode);
     CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
   }
 }
@@ -4331,9 +4260,6 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
   }
 
   if (!transition.is_null()) {
-    if (transition->CanBeDeprecated()) {
-      transition_maps_.Add(transition, info()->zone());
-    }
     if (!instr->hydrogen()->NeedsWriteBarrierForMap()) {
       __ mov(FieldOperand(object, HeapObject::kMapOffset), transition);
     } else {
@@ -4353,9 +4279,9 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
   }
 
   // Do the store.
-  HType type = instr->hydrogen()->value()->type();
   SmiCheck check_needed =
-      type.IsHeapObject() ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
+      instr->hydrogen()->value()->IsHeapObject()
+          ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
 
   Register write_register = object;
   if (!access.IsInobject()) {
@@ -4592,9 +4518,9 @@ void LCodeGen::DoStoreKeyedFixedArray(LStoreKeyed* instr) {
     ASSERT(instr->value()->IsRegister());
     Register value = ToRegister(instr->value());
     ASSERT(!instr->key()->IsConstantOperand());
-    HType type = instr->hydrogen()->value()->type();
     SmiCheck check_needed =
-        type.IsHeapObject() ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
+        instr->hydrogen()->value()->IsHeapObject()
+          ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
     // Compute address of modified element and store it into key register.
     __ lea(key, operand);
     __ RecordWrite(elements,
@@ -4937,7 +4863,8 @@ void LCodeGen::DoDeferredNumberTagI(LInstruction* instr,
   } else {
     if (CpuFeatures::IsSupported(SSE2)) {
       CpuFeatureScope feature_scope(masm(), SSE2);
-      __ LoadUint32(xmm0, reg, xmm1);
+      __ LoadUint32(xmm0, reg,
+                    ToDoubleRegister(LNumberTagU::cast(instr)->temp()));
     } else {
       // There's no fild variant for unsigned values, so zero-extend to a 64-bit
       // int manually.
@@ -5735,9 +5662,11 @@ void LCodeGen::DoCheckSmi(LCheckSmi* instr) {
 
 
 void LCodeGen::DoCheckNonSmi(LCheckNonSmi* instr) {
-  LOperand* input = instr->value();
-  __ test(ToOperand(input), Immediate(kSmiTagMask));
-  DeoptimizeIf(zero, instr->environment());
+  if (!instr->hydrogen()->value()->IsHeapObject()) {
+    LOperand* input = instr->value();
+    __ test(ToOperand(input), Immediate(kSmiTagMask));
+    DeoptimizeIf(zero, instr->environment());
+  }
 }
 
 
@@ -5790,9 +5719,8 @@ void LCodeGen::DoCheckFunction(LCheckFunction* instr) {
   Handle<JSFunction> target = instr->hydrogen()->target();
   if (instr->hydrogen()->target_in_new_space()) {
     Register reg = ToRegister(instr->value());
-    Handle<JSGlobalPropertyCell> cell =
-        isolate()->factory()->NewJSGlobalPropertyCell(target);
-    __ cmp(reg, Operand::Cell(cell));
+    Handle<Cell> cell = isolate()->factory()->NewCell(target);
+    __ cmp(reg, Operand::ForCell(cell));
   } else {
     Operand operand = ToOperand(instr->value());
     __ cmp(operand, target);
@@ -6009,11 +5937,7 @@ void LCodeGen::DoCheckPrototypeMaps(LCheckPrototypeMaps* instr) {
 
   ASSERT(prototypes->length() == maps->length());
 
-  if (instr->hydrogen()->CanOmitPrototypeChecks()) {
-    for (int i = 0; i < maps->length(); i++) {
-      prototype_maps_.Add(maps->at(i), info()->zone());
-    }
-  } else {
+  if (!instr->hydrogen()->CanOmitPrototypeChecks()) {
     for (int i = 0; i < prototypes->length(); i++) {
       __ LoadHeapObject(reg, prototypes->at(i));
       DoCheckMapCommon(reg, maps->at(i), instr);
@@ -6022,6 +5946,95 @@ void LCodeGen::DoCheckPrototypeMaps(LCheckPrototypeMaps* instr) {
 }
 
 
+void LCodeGen::DoAllocateObject(LAllocateObject* instr) {
+  class DeferredAllocateObject: public LDeferredCode {
+   public:
+    DeferredAllocateObject(LCodeGen* codegen, LAllocateObject* instr)
+        : LDeferredCode(codegen), instr_(instr) { }
+    virtual void Generate() { codegen()->DoDeferredAllocateObject(instr_); }
+    virtual LInstruction* instr() { return instr_; }
+   private:
+    LAllocateObject* instr_;
+  };
+
+  DeferredAllocateObject* deferred =
+      new(zone()) DeferredAllocateObject(this, instr);
+
+  Register result = ToRegister(instr->result());
+  Register scratch = ToRegister(instr->temp());
+  Handle<JSFunction> constructor = instr->hydrogen()->constructor();
+  Handle<Map> initial_map = instr->hydrogen()->constructor_initial_map();
+  int instance_size = initial_map->instance_size();
+  ASSERT(initial_map->pre_allocated_property_fields() +
+         initial_map->unused_property_fields() -
+         initial_map->inobject_properties() == 0);
+
+  __ Allocate(instance_size, result, no_reg, scratch, deferred->entry(),
+              TAG_OBJECT);
+
+  __ bind(deferred->exit());
+  if (FLAG_debug_code) {
+    Label is_in_new_space;
+    __ JumpIfInNewSpace(result, scratch, &is_in_new_space);
+    __ Abort("Allocated object is not in new-space");
+    __ bind(&is_in_new_space);
+  }
+
+  // Load the initial map.
+  Register map = scratch;
+  __ LoadHeapObject(scratch, constructor);
+  __ mov(map, FieldOperand(scratch, JSFunction::kPrototypeOrInitialMapOffset));
+
+  if (FLAG_debug_code) {
+    __ AssertNotSmi(map);
+    __ cmpb(FieldOperand(map, Map::kInstanceSizeOffset),
+            instance_size >> kPointerSizeLog2);
+    __ Assert(equal, "Unexpected instance size");
+    __ cmpb(FieldOperand(map, Map::kPreAllocatedPropertyFieldsOffset),
+            initial_map->pre_allocated_property_fields());
+    __ Assert(equal, "Unexpected pre-allocated property fields count");
+    __ cmpb(FieldOperand(map, Map::kUnusedPropertyFieldsOffset),
+            initial_map->unused_property_fields());
+    __ Assert(equal, "Unexpected unused property fields count");
+    __ cmpb(FieldOperand(map, Map::kInObjectPropertiesOffset),
+            initial_map->inobject_properties());
+    __ Assert(equal, "Unexpected in-object property fields count");
+  }
+
+  // Initialize map and fields of the newly allocated object.
+  ASSERT(initial_map->instance_type() == JS_OBJECT_TYPE);
+  __ mov(FieldOperand(result, JSObject::kMapOffset), map);
+  __ mov(scratch, factory()->empty_fixed_array());
+  __ mov(FieldOperand(result, JSObject::kElementsOffset), scratch);
+  __ mov(FieldOperand(result, JSObject::kPropertiesOffset), scratch);
+  if (initial_map->inobject_properties() != 0) {
+    __ mov(scratch, factory()->undefined_value());
+    for (int i = 0; i < initial_map->inobject_properties(); i++) {
+      int property_offset = JSObject::kHeaderSize + i * kPointerSize;
+      __ mov(FieldOperand(result, property_offset), scratch);
+    }
+  }
+}
+
+
+void LCodeGen::DoDeferredAllocateObject(LAllocateObject* instr) {
+  Register result = ToRegister(instr->result());
+  Handle<Map> initial_map = instr->hydrogen()->constructor_initial_map();
+  int instance_size = initial_map->instance_size();
+
+  // TODO(3095996): Get rid of this. For now, we need to make the
+  // result register contain a valid pointer because it is already
+  // contained in the register pointer map.
+  __ Set(result, Immediate(0));
+
+  PushSafepointRegistersScope scope(this);
+  __ push(Immediate(Smi::FromInt(instance_size)));
+  CallRuntimeFromDeferred(
+      Runtime::kAllocateInNewSpace, 1, instr, instr->context());
+  __ StoreToSafepointRegisterSlot(result, eax);
+}
+
+
 void LCodeGen::DoAllocate(LAllocate* instr) {
   class DeferredAllocate: public LDeferredCode {
    public:
@@ -6185,15 +6198,12 @@ void LCodeGen::DoTypeof(LTypeof* instr) {
 
 void LCodeGen::DoTypeofIsAndBranch(LTypeofIsAndBranch* instr) {
   Register input = ToRegister(instr->value());
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-  Label* true_label = chunk_->GetAssemblyLabel(true_block);
-  Label* false_label = chunk_->GetAssemblyLabel(false_block);
 
   Condition final_branch_condition =
-      EmitTypeofIs(true_label, false_label, input, instr->type_literal());
+      EmitTypeofIs(instr->TrueLabel(chunk_), instr->FalseLabel(chunk_),
+          input, instr->type_literal());
   if (final_branch_condition != no_condition) {
-    EmitBranch(true_block, false_block, final_branch_condition);
+    EmitBranch(instr, final_branch_condition);
   }
 }
 
@@ -6274,11 +6284,9 @@ Condition LCodeGen::EmitTypeofIs(Label* true_label,
 
 void LCodeGen::DoIsConstructCallAndBranch(LIsConstructCallAndBranch* instr) {
   Register temp = ToRegister(instr->temp());
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
 
   EmitIsConstructCall(temp);
-  EmitBranch(true_block, false_block, equal);
+  EmitBranch(instr, equal);
 }
 
 
@@ -6424,15 +6432,15 @@ void LCodeGen::DoOsrEntry(LOsrEntry* instr) {
   // properly registered for deoptimization and records the assembler's PC
   // offset.
   LEnvironment* environment = instr->environment();
-  environment->SetSpilledRegisters(instr->SpilledRegisterArray(),
-                                   instr->SpilledDoubleRegisterArray());
 
   // If the environment were already registered, we would have no way of
   // backpatching it with the spill slot operands.
   ASSERT(!environment->HasBeenRegistered());
   RegisterEnvironmentForDeoptimization(environment, Safepoint::kNoLazyDeopt);
-  ASSERT(osr_pc_offset_ == -1);
-  osr_pc_offset_ = masm()->pc_offset();
+
+  // Normally we record the first unknown OSR value as the entrypoint to the OSR
+  // code, but if there were none, record the entrypoint here.
+  if (osr_pc_offset_ == -1) osr_pc_offset_ = masm()->pc_offset();
 }
 
 
index 647dd0e..d05da8a 100644 (file)
@@ -58,8 +58,6 @@ class LCodeGen BASE_EMBEDDED {
         deoptimizations_(4, info->zone()),
         jump_table_(4, info->zone()),
         deoptimization_literals_(8, info->zone()),
-        prototype_maps_(0, info->zone()),
-        transition_maps_(0, info->zone()),
         inlined_function_count_(0),
         scope_(info->scope()),
         status_(UNUSED),
@@ -85,7 +83,6 @@ class LCodeGen BASE_EMBEDDED {
   Heap* heap() const { return isolate()->heap(); }
   Zone* zone() const { return zone_; }
 
-  // TODO(svenpanne) Use this consistently.
   int LookupDestination(int block_id) const {
     return chunk()->LookupDestination(block_id);
   }
@@ -159,6 +156,7 @@ class LCodeGen BASE_EMBEDDED {
   void DoDeferredRandom(LRandom* instr);
   void DoDeferredStringCharCodeAt(LStringCharCodeAt* instr);
   void DoDeferredStringCharFromCode(LStringCharFromCode* instr);
+  void DoDeferredAllocateObject(LAllocateObject* instr);
   void DoDeferredAllocate(LAllocate* instr);
   void DoDeferredInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr,
                                        Label* map_check);
@@ -170,10 +168,7 @@ class LCodeGen BASE_EMBEDDED {
   void DoGap(LGap* instr);
 
   // Emit frame translation commands for an environment.
-  void WriteTranslation(LEnvironment* environment,
-                        Translation* translation,
-                        int* arguments_index,
-                        int* arguments_count);
+  void WriteTranslation(LEnvironment* environment, Translation* translation);
 
   void EnsureRelocSpaceForDeoptimization();
 
@@ -287,10 +282,7 @@ class LCodeGen BASE_EMBEDDED {
   void AddToTranslation(Translation* translation,
                         LOperand* op,
                         bool is_tagged,
-                        bool is_uint32,
-                        bool arguments_known,
-                        int arguments_index,
-                        int arguments_count);
+                        bool is_uint32);
   void RegisterDependentCodeForEmbeddedMaps(Handle<Code> code);
   void PopulateDeoptimizationData(Handle<Code> code);
   int DefineDeoptimizationLiteral(Handle<Object> literal);
@@ -325,7 +317,8 @@ class LCodeGen BASE_EMBEDDED {
 
   static Condition TokenToCondition(Token::Value op, bool is_unsigned);
   void EmitGoto(int block);
-  void EmitBranch(int left_block, int right_block, Condition cc);
+  template<class InstrType>
+  void EmitBranch(InstrType instr, Condition cc);
   void EmitNumberUntagD(
       Register input,
       Register temp,
@@ -364,7 +357,8 @@ class LCodeGen BASE_EMBEDDED {
   // true and false label should be made, to optimize fallthrough.
   Condition EmitIsString(Register input,
                          Register temp1,
-                         Label* is_not_string);
+                         Label* is_not_string,
+                         SmiCheck check_needed);
 
   // Emits optimized code for %_IsConstructCall().
   // Caller should branch on equal condition.
@@ -409,8 +403,6 @@ class LCodeGen BASE_EMBEDDED {
   ZoneList<LEnvironment*> deoptimizations_;
   ZoneList<Deoptimizer::JumpTableEntry> jump_table_;
   ZoneList<Handle<Object> > deoptimization_literals_;
-  ZoneList<Handle<Map> > prototype_maps_;
-  ZoneList<Handle<Map> > transition_maps_;
   int inlined_function_count_;
   Scope* const scope_;
   Status status_;
index 3da8f32..86bfe2f 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
 
 #include "ia32/lithium-gap-resolver-ia32.h"
 #include "ia32/lithium-codegen-ia32.h"
index 325ed2c..8231c4e 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
 
 #include "lithium-allocator-inl.h"
 #include "ia32/lithium-ia32.h"
@@ -43,31 +43,6 @@ namespace internal {
 LITHIUM_CONCRETE_INSTRUCTION_LIST(DEFINE_COMPILE)
 #undef DEFINE_COMPILE
 
-LOsrEntry::LOsrEntry() {
-  for (int i = 0; i < Register::NumAllocatableRegisters(); ++i) {
-    register_spills_[i] = NULL;
-  }
-  for (int i = 0; i < DoubleRegister::NumAllocatableRegisters(); ++i) {
-    double_register_spills_[i] = NULL;
-  }
-}
-
-
-void LOsrEntry::MarkSpilledRegister(int allocation_index,
-                                    LOperand* spill_operand) {
-  ASSERT(spill_operand->IsStackSlot());
-  ASSERT(register_spills_[allocation_index] == NULL);
-  register_spills_[allocation_index] = spill_operand;
-}
-
-
-void LOsrEntry::MarkSpilledDoubleRegister(int allocation_index,
-                                          LOperand* spill_operand) {
-  ASSERT(spill_operand->IsDoubleStackSlot());
-  ASSERT(double_register_spills_[allocation_index] == NULL);
-  double_register_spills_[allocation_index] = spill_operand;
-}
-
 
 #ifdef DEBUG
 void LInstruction::VerifyCall() {
@@ -376,8 +351,7 @@ void LCallNewArray::PrintDataTo(StringStream* stream) {
   constructor()->PrintTo(stream);
   stream->Add(" #%d / ", arity());
   ASSERT(hydrogen()->property_cell()->value()->IsSmi());
-  ElementsKind kind = static_cast<ElementsKind>(
-      Smi::cast(hydrogen()->property_cell()->value())->value());
+  ElementsKind kind = hydrogen()->elements_kind();
   stream->Add(" (%s) ", ElementsKindToString(kind));
 }
 
@@ -481,7 +455,7 @@ void LTransitionElementsKind::PrintDataTo(StringStream* stream) {
 LPlatformChunk* LChunkBuilder::Build() {
   ASSERT(is_unused());
   chunk_ = new(zone()) LPlatformChunk(info(), graph());
-  HPhase phase("L_Building chunk", chunk_);
+  LPhase phase("L_Building chunk", chunk_);
   status_ = BUILDING;
 
   // Reserve the first spill slot for the state of dynamic alignment.
@@ -990,7 +964,7 @@ LEnvironment* LChunkBuilder::CreateEnvironment(
   BailoutId ast_id = hydrogen_env->ast_id();
   ASSERT(!ast_id.IsNone() ||
          hydrogen_env->frame_type() != JS_FUNCTION);
-  int value_count = hydrogen_env->length();
+  int value_count = hydrogen_env->length() - hydrogen_env->specials_count();
   LEnvironment* result =
       new(zone()) LEnvironment(hydrogen_env->closure(),
                                hydrogen_env->frame_type(),
@@ -1001,13 +975,15 @@ LEnvironment* LChunkBuilder::CreateEnvironment(
                                outer,
                                hydrogen_env->entry(),
                                zone());
+  bool needs_arguments_object_materialization = false;
   int argument_index = *argument_index_accumulator;
-  for (int i = 0; i < value_count; ++i) {
+  for (int i = 0; i < hydrogen_env->length(); ++i) {
     if (hydrogen_env->is_special_index(i)) continue;
 
     HValue* value = hydrogen_env->values()->at(i);
     LOperand* op = NULL;
     if (value->IsArgumentsObject()) {
+      needs_arguments_object_materialization = true;
       op = NULL;
     } else if (value->IsPushArgument()) {
       op = new(zone()) LArgument(argument_index++);
@@ -1019,6 +995,21 @@ LEnvironment* LChunkBuilder::CreateEnvironment(
                      value->CheckFlag(HInstruction::kUint32));
   }
 
+  if (needs_arguments_object_materialization) {
+    HArgumentsObject* arguments = hydrogen_env->entry() == NULL
+        ? graph()->GetArgumentsObject()
+        : hydrogen_env->entry()->arguments_object();
+    ASSERT(arguments->IsLinked());
+    for (int i = 1; i < arguments->arguments_count(); ++i) {
+      HValue* value = arguments->arguments_values()->at(i);
+      ASSERT(!value->IsArgumentsObject() && !value->IsPushArgument());
+      LOperand* op = UseAny(value);
+      result->AddValue(op,
+                       value->representation(),
+                       value->CheckFlag(HInstruction::kUint32));
+    }
+  }
+
   if (hydrogen_env->frame_type() == JS_FUNCTION) {
     *argument_index_accumulator = argument_index;
   }
@@ -1043,20 +1034,28 @@ LInstruction* LChunkBuilder::DoBranch(HBranch* instr) {
     return new(zone()) LGoto(successor->block_id());
   }
 
-  // Untagged integers or doubles, smis and booleans don't require a
-  // deoptimization environment nor a temp register.
+  ToBooleanStub::Types expected = instr->expected_input_types();
+
+  // Tagged values that are not known smis or booleans require a
+  // deoptimization environment. If the instruction is generic no
+  // environment is needed since all cases are handled.
   Representation rep = value->representation();
   HType type = value->type();
   if (!rep.IsTagged() || type.IsSmi() || type.IsBoolean()) {
     return new(zone()) LBranch(UseRegister(value), NULL);
   }
 
-  ToBooleanStub::Types expected = instr->expected_input_types();
+  bool needs_temp = expected.NeedsMap() || expected.IsEmpty();
+  LOperand* temp = needs_temp ? TempRegister() : NULL;
+
+  // The Generic stub does not have a deopt, so we need no environment.
+  if (expected.IsGeneric()) {
+    return new(zone()) LBranch(UseRegister(value), temp);
+  }
+
   // We need a temporary register when we have to access the map *or* we have
   // no type info yet, in which case we handle all cases (including the ones
   // involving maps).
-  bool needs_temp = expected.NeedsMap() || expected.IsEmpty();
-  LOperand* temp = needs_temp ? TempRegister() : NULL;
   return AssignEnvironment(new(zone()) LBranch(UseRegister(value), temp));
 }
 
@@ -1350,7 +1349,6 @@ LInstruction* LChunkBuilder::DoCallNew(HCallNew* instr) {
 
 
 LInstruction* LChunkBuilder::DoCallNewArray(HCallNewArray* instr) {
-  ASSERT(FLAG_optimize_constructed_arrays);
   LOperand* context = UseFixed(instr->context(), esi);
   LOperand* constructor = UseFixed(instr->constructor(), edi);
   argument_count_ -= instr->argument_count();
@@ -1453,19 +1451,6 @@ LInstruction* LChunkBuilder::DoDiv(HDiv* instr) {
 }
 
 
-HValue* LChunkBuilder::SimplifiedDividendForMathFloorOfDiv(HValue* dividend) {
-  // A value with an integer representation does not need to be transformed.
-  if (dividend->representation().IsInteger32()) {
-    return dividend;
-  // A change from an integer32 can be replaced by the integer32 value.
-  } else if (dividend->IsChange() &&
-      HChange::cast(dividend)->from().IsInteger32()) {
-    return HChange::cast(dividend)->value();
-  }
-  return NULL;
-}
-
-
 HValue* LChunkBuilder::SimplifiedDivisorForMathFloorOfDiv(HValue* divisor) {
   if (divisor->IsConstant() &&
       HConstant::cast(divisor)->HasInteger32Value()) {
@@ -1539,7 +1524,7 @@ LInstruction* LChunkBuilder::DoMod(HMod* instr) {
               instr->CheckFlag(HValue::kBailoutOnMinusZero))
           ? AssignEnvironment(result)
           : result;
-    } else if (instr->has_fixed_right_arg()) {
+    } else if (instr->fixed_right_arg().has_value) {
       LModI* mod = new(zone()) LModI(UseRegister(left),
                                      UseRegisterAtStart(right),
                                      NULL);
@@ -1831,13 +1816,6 @@ LInstruction* LChunkBuilder::DoClassOfTestAndBranch(
 }
 
 
-LInstruction* LChunkBuilder::DoFixedArrayBaseLength(
-    HFixedArrayBaseLength* instr) {
-  LOperand* array = UseRegisterAtStart(instr->value());
-  return DefineAsRegister(new(zone()) LFixedArrayBaseLength(array));
-}
-
-
 LInstruction* LChunkBuilder::DoMapEnumLength(HMapEnumLength* instr) {
   LOperand* map = UseRegisterAtStart(instr->value());
   return DefineAsRegister(new(zone()) LMapEnumLength(map));
@@ -2020,7 +1998,9 @@ LInstruction* LChunkBuilder::DoChange(HChange* instr) {
       if (val->HasRange() && val->range()->IsInSmiRange()) {
         return DefineSameAsFirst(new(zone()) LSmiTag(value));
       } else if (val->CheckFlag(HInstruction::kUint32)) {
-        LNumberTagU* result = new(zone()) LNumberTagU(value);
+        LOperand* temp = CpuFeatures::IsSupported(SSE2) ? FixedTemp(xmm1)
+                                                        : NULL;
+        LNumberTagU* result = new(zone()) LNumberTagU(value, temp);
         return AssignEnvironment(AssignPointerMap(DefineSameAsFirst(result)));
       } else {
         LNumberTagI* result = new(zone()) LNumberTagI(value);
@@ -2052,7 +2032,7 @@ LInstruction* LChunkBuilder::DoChange(HChange* instr) {
 }
 
 
-LInstruction* LChunkBuilder::DoCheckNonSmi(HCheckNonSmi* instr) {
+LInstruction* LChunkBuilder::DoCheckHeapObject(HCheckHeapObject* instr) {
   LOperand* value = UseAtStart(instr->value());
   return AssignEnvironment(new(zone()) LCheckNonSmi(value));
 }
@@ -2544,6 +2524,15 @@ LInstruction* LChunkBuilder::DoStringLength(HStringLength* instr) {
 }
 
 
+LInstruction* LChunkBuilder::DoAllocateObject(HAllocateObject* instr) {
+  info()->MarkAsDeferredCalling();
+  LOperand* context = UseAny(instr->context());
+  LOperand* temp = TempRegister();
+  LAllocateObject* result = new(zone()) LAllocateObject(context, temp);
+  return AssignPointerMap(DefineAsRegister(result));
+}
+
+
 LInstruction* LChunkBuilder::DoAllocate(HAllocate* instr) {
   info()->MarkAsDeferredCalling();
   LOperand* context = UseAny(instr->context());
@@ -2730,8 +2719,9 @@ LInstruction* LChunkBuilder::DoEnterInlined(HEnterInlined* instr) {
                                                undefined,
                                                instr->inlining_kind(),
                                                instr->undefined_receiver());
-  if (instr->arguments_var() != NULL) {
-    inner->Bind(instr->arguments_var(), graph()->GetArgumentsObject());
+  // Only replay binding of arguments object if it wasn't removed from graph.
+  if (instr->arguments_var() != NULL && instr->arguments_object()->IsLinked()) {
+    inner->Bind(instr->arguments_var(), instr->arguments_object());
   }
   inner->set_entry(instr);
   current_block_->UpdateEnvironment(inner);
index e43672c..e48e881 100644 (file)
@@ -44,6 +44,7 @@ class LCodeGen;
   V(AccessArgumentsAt)                          \
   V(AddI)                                       \
   V(Allocate)                                   \
+  V(AllocateObject)                             \
   V(ApplyArguments)                             \
   V(ArgumentsElements)                          \
   V(ArgumentsLength)                            \
@@ -93,7 +94,6 @@ class LCodeGen;
   V(DoubleToSmi)                                \
   V(DummyUse)                                   \
   V(ElementsKind)                               \
-  V(FixedArrayBaseLength)                       \
   V(FunctionLiteral)                            \
   V(GetCachedArrayIndex)                        \
   V(GlobalObject)                               \
@@ -482,17 +482,44 @@ class LUnknownOSRValue: public LTemplateInstruction<1, 0, 0> {
 template<int I, int T>
 class LControlInstruction: public LTemplateInstruction<0, I, T> {
  public:
+  LControlInstruction() : false_label_(NULL), true_label_(NULL) { }
+
   virtual bool IsControl() const { return true; }
 
   int SuccessorCount() { return hydrogen()->SuccessorCount(); }
   HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); }
-  int true_block_id() { return hydrogen()->SuccessorAt(0)->block_id(); }
-  int false_block_id() { return hydrogen()->SuccessorAt(1)->block_id(); }
+
+  int TrueDestination(LChunk* chunk) {
+    return chunk->LookupDestination(true_block_id());
+  }
+  int FalseDestination(LChunk* chunk) {
+    return chunk->LookupDestination(false_block_id());
+  }
+
+  Label* TrueLabel(LChunk* chunk) {
+    if (true_label_ == NULL) {
+      true_label_ = chunk->GetAssemblyLabel(TrueDestination(chunk));
+    }
+    return true_label_;
+  }
+  Label* FalseLabel(LChunk* chunk) {
+    if (false_label_ == NULL) {
+      false_label_ = chunk->GetAssemblyLabel(FalseDestination(chunk));
+    }
+    return false_label_;
+  }
+
+ protected:
+  int true_block_id() { return SuccessorAt(0)->block_id(); }
+  int false_block_id() { return SuccessorAt(1)->block_id(); }
 
  private:
   HControlInstruction* hydrogen() {
     return HControlInstruction::cast(this->hydrogen_value());
   }
+
+  Label* false_label_;
+  Label* true_label_;
 };
 
 
@@ -867,6 +894,7 @@ class LIsStringAndBranch: public LControlInstruction<1, 1> {
   LOperand* temp() { return temps_[0]; }
 
   DECLARE_CONCRETE_INSTRUCTION(IsStringAndBranch, "is-string-and-branch")
+  DECLARE_HYDROGEN_ACCESSOR(IsStringAndBranch)
 
   virtual void PrintDataTo(StringStream* stream);
 };
@@ -899,6 +927,7 @@ class LIsUndetectableAndBranch: public LControlInstruction<1, 1> {
 
   DECLARE_CONCRETE_INSTRUCTION(IsUndetectableAndBranch,
                                "is-undetectable-and-branch")
+  DECLARE_HYDROGEN_ACCESSOR(IsUndetectableAndBranch)
 
   virtual void PrintDataTo(StringStream* stream);
 };
@@ -1206,7 +1235,7 @@ class LBranch: public LControlInstruction<1, 1> {
 };
 
 
-class LCmpMapAndBranch: public LTemplateInstruction<0, 1, 0> {
+class LCmpMapAndBranch: public LControlInstruction<1, 0> {
  public:
   explicit LCmpMapAndBranch(LOperand* value) {
     inputs_[0] = value;
@@ -1217,29 +1246,7 @@ class LCmpMapAndBranch: public LTemplateInstruction<0, 1, 0> {
   DECLARE_CONCRETE_INSTRUCTION(CmpMapAndBranch, "cmp-map-and-branch")
   DECLARE_HYDROGEN_ACCESSOR(CompareMap)
 
-  virtual bool IsControl() const { return true; }
-
   Handle<Map> map() const { return hydrogen()->map(); }
-  int true_block_id() const {
-    return hydrogen()->FirstSuccessor()->block_id();
-  }
-  int false_block_id() const {
-    return hydrogen()->SecondSuccessor()->block_id();
-  }
-};
-
-
-class LFixedArrayBaseLength: public LTemplateInstruction<1, 1, 0> {
- public:
-  explicit LFixedArrayBaseLength(LOperand* value) {
-    inputs_[0] = value;
-  }
-
-  LOperand* value() { return inputs_[0]; }
-
-  DECLARE_CONCRETE_INSTRUCTION(FixedArrayBaseLength,
-                               "fixed-array-base-length")
-  DECLARE_HYDROGEN_ACCESSOR(FixedArrayBaseLength)
 };
 
 
@@ -2048,13 +2055,15 @@ class LNumberTagI: public LTemplateInstruction<1, 1, 0> {
 };
 
 
-class LNumberTagU: public LTemplateInstruction<1, 1, 0> {
+class LNumberTagU: public LTemplateInstruction<1, 1, 1> {
  public:
-  explicit LNumberTagU(LOperand* value) {
+  LNumberTagU(LOperand* value, LOperand* temp) {
     inputs_[0] = value;
+    temps_[0] = temp;
   }
 
   LOperand* value() { return inputs_[0]; }
+  LOperand* temp() { return temps_[0]; }
 
   DECLARE_CONCRETE_INSTRUCTION(NumberTagU, "number-tag-u")
 };
@@ -2548,6 +2557,22 @@ class LCheckNonSmi: public LTemplateInstruction<0, 1, 0> {
   LOperand* value() { return inputs_[0]; }
 
   DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi")
+  DECLARE_HYDROGEN_ACCESSOR(CheckHeapObject)
+};
+
+
+class LAllocateObject: public LTemplateInstruction<1, 1, 1> {
+ public:
+  LAllocateObject(LOperand* context, LOperand* temp) {
+    inputs_[0] = context;
+    temps_[0] = temp;
+  }
+
+  LOperand* context() { return inputs_[0]; }
+  LOperand* temp() { return temps_[0]; }
+
+  DECLARE_CONCRETE_INSTRUCTION(AllocateObject, "allocate-object")
+  DECLARE_HYDROGEN_ACCESSOR(AllocateObject)
 };
 
 
@@ -2656,26 +2681,10 @@ class LDeleteProperty: public LTemplateInstruction<1, 3, 0> {
 
 class LOsrEntry: public LTemplateInstruction<0, 0, 0> {
  public:
-  LOsrEntry();
+  LOsrEntry() {}
 
   virtual bool HasInterestingComment(LCodeGen* gen) const { return false; }
   DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry")
-
-  LOperand** SpilledRegisterArray() { return register_spills_; }
-  LOperand** SpilledDoubleRegisterArray() { return double_register_spills_; }
-
-  void MarkSpilledRegister(int allocation_index, LOperand* spill_operand);
-  void MarkSpilledDoubleRegister(int allocation_index,
-                                 LOperand* spill_operand);
-
- private:
-  // Arrays of spill slot operands for registers with an assigned spill
-  // slot, i.e., that must also be restored to the spill slot on OSR entry.
-  // NULL if the register has no assigned spill slot.  Indexed by allocation
-  // index.
-  LOperand* register_spills_[Register::kMaxNumAllocatableRegisters];
-  LOperand* double_register_spills_[
-      DoubleRegister::kMaxNumAllocatableRegisters];
 };
 
 
@@ -2813,7 +2822,6 @@ class LChunkBuilder BASE_EMBEDDED {
   HYDROGEN_CONCRETE_INSTRUCTION_LIST(DECLARE_DO)
 #undef DECLARE_DO
 
-  static HValue* SimplifiedDividendForMathFloorOfDiv(HValue* val);
   static HValue* SimplifiedDivisorForMathFloorOfDiv(HValue* val);
 
   LInstruction* DoMathFloor(HUnaryMathOperation* instr);
index 38b02a5..a9a0268 100644 (file)
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
 
 #include "bootstrapper.h"
 #include "codegen.h"
+#include "cpu-profiler.h"
 #include "debug.h"
 #include "runtime.h"
 #include "serialize.h"
@@ -1973,6 +1974,8 @@ void MacroAssembler::PrepareCallApiFunction(int argc, bool returns_handle) {
 
 
 void MacroAssembler::CallApiFunctionAndReturn(Address function_address,
+                                              Address thunk_address,
+                                              Operand thunk_last_arg,
                                               int stack_space,
                                               bool returns_handle,
                                               int return_value_offset) {
@@ -1998,8 +2001,26 @@ void MacroAssembler::CallApiFunctionAndReturn(Address function_address,
     PopSafepointRegisters();
   }
 
+
+  Label profiler_disabled;
+  Label end_profiler_check;
+  bool* is_profiling_flag =
+      isolate()->cpu_profiler()->is_profiling_address();
+  STATIC_ASSERT(sizeof(*is_profiling_flag) == 1);
+  mov(eax, Immediate(reinterpret_cast<Address>(is_profiling_flag)));
+  cmpb(Operand(eax, 0), 0);
+  j(zero, &profiler_disabled);
+
+  // Additional parameter is the address of the actual getter function.
+  mov(thunk_last_arg, Immediate(function_address));
+  // Call the api function.
+  call(thunk_address, RelocInfo::RUNTIME_ENTRY);
+  jmp(&end_profiler_check);
+
+  bind(&profiler_disabled);
   // Call the api function.
   call(function_address, RelocInfo::RUNTIME_ENTRY);
+  bind(&end_profiler_check);
 
   if (FLAG_log_timer_events) {
     FrameScope frame(this, StackFrame::MANUAL);
@@ -2495,9 +2516,8 @@ void MacroAssembler::LoadHeapObject(Register result,
                                     Handle<HeapObject> object) {
   AllowDeferredHandleDereference embedding_raw_address;
   if (isolate()->heap()->InNewSpace(*object)) {
-    Handle<JSGlobalPropertyCell> cell =
-        isolate()->factory()->NewJSGlobalPropertyCell(object);
-    mov(result, Operand::Cell(cell));
+    Handle<Cell> cell = isolate()->factory()->NewCell(object);
+    mov(result, Operand::ForCell(cell));
   } else {
     mov(result, object);
   }
@@ -2507,9 +2527,8 @@ void MacroAssembler::LoadHeapObject(Register result,
 void MacroAssembler::CmpHeapObject(Register reg, Handle<HeapObject> object) {
   AllowDeferredHandleDereference using_raw_address;
   if (isolate()->heap()->InNewSpace(*object)) {
-    Handle<JSGlobalPropertyCell> cell =
-        isolate()->factory()->NewJSGlobalPropertyCell(object);
-    cmp(reg, Operand::Cell(cell));
+    Handle<Cell> cell = isolate()->factory()->NewCell(object);
+    cmp(reg, Operand::ForCell(cell));
   } else {
     cmp(reg, object);
   }
@@ -2519,9 +2538,8 @@ void MacroAssembler::CmpHeapObject(Register reg, Handle<HeapObject> object) {
 void MacroAssembler::PushHeapObject(Handle<HeapObject> object) {
   AllowDeferredHandleDereference using_raw_address;
   if (isolate()->heap()->InNewSpace(*object)) {
-    Handle<JSGlobalPropertyCell> cell =
-        isolate()->factory()->NewJSGlobalPropertyCell(object);
-    push(Operand::Cell(cell));
+    Handle<Cell> cell = isolate()->factory()->NewCell(object);
+    push(Operand::ForCell(cell));
   } else {
     Push(object);
   }
@@ -2790,6 +2808,17 @@ void MacroAssembler::JumpIfNotBothSequentialAsciiStrings(Register object1,
 }
 
 
+void MacroAssembler::JumpIfNotUniqueName(Operand operand,
+                                         Label* not_unique_name,
+                                         Label::Distance distance) {
+  STATIC_ASSERT(((SYMBOL_TYPE - 1) & kIsInternalizedMask) == kInternalizedTag);
+  cmp(operand, Immediate(kInternalizedTag));
+  j(less, not_unique_name, distance);
+  cmp(operand, Immediate(SYMBOL_TYPE));
+  j(greater, not_unique_name, distance);
+}
+
+
 void MacroAssembler::PrepareCallCFunction(int num_arguments, Register scratch) {
   int frame_alignment = OS::ActivationFrameAlignment();
   if (frame_alignment != 0) {
index 8380507..5cb8286 100644 (file)
@@ -784,6 +784,8 @@ class MacroAssembler: public Assembler {
   // caller-save registers.  Restores context.  On return removes
   // stack_space * kPointerSize (GCed).
   void CallApiFunctionAndReturn(Address function_address,
+                                Address thunk_address,
+                                Operand thunk_last_arg,
                                 int stack_space,
                                 bool returns_handle,
                                 int return_value_offset_from_ebp);
@@ -882,6 +884,15 @@ class MacroAssembler: public Assembler {
                                            Register scratch2,
                                            Label* on_not_flat_ascii_strings);
 
+  // Checks if the given register or operand is a unique name
+  void JumpIfNotUniqueName(Register reg, Label* not_unique_name,
+                           Label::Distance distance = Label::kFar) {
+    JumpIfNotUniqueName(Operand(reg), not_unique_name, distance);
+  }
+
+  void JumpIfNotUniqueName(Operand operand, Label* not_unique_name,
+                           Label::Distance distance = Label::kFar);
+
   static int SafepointRegisterStackIndex(Register reg) {
     return SafepointRegisterStackIndex(reg.code());
   }
index 9a166d7..f478e57 100644 (file)
@@ -27,8 +27,9 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
 
+#include "cpu-profiler.h"
 #include "unicode.h"
 #include "log.h"
 #include "regexp-stack.h"
index 3906623..28e043d 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
 
 #include "ic-inl.h"
 #include "codegen.h"
@@ -503,7 +503,12 @@ static void GenerateFastApiCall(MacroAssembler* masm,
   STATIC_ASSERT(kFastApiCallArguments == 6);
   __ lea(eax, Operand(esp, kFastApiCallArguments * kPointerSize));
 
-  const int kApiArgc = 1;  // API function gets reference to the v8::Arguments.
+
+  // API function gets reference to the v8::Arguments. If CPU profiler
+  // is enabled wrapper function will be called and we need to pass
+  // address of the callback as additional parameter, always allocate
+  // space for it.
+  const int kApiArgc = 1 + 1;
 
   // Allocate the v8::Arguments structure in the arguments' space since
   // it's not controlled by GC.
@@ -517,20 +522,26 @@ static void GenerateFastApiCall(MacroAssembler* masm,
   __ PrepareCallApiFunction(kApiArgc + kApiStackSpace, returns_handle);
 
   // v8::Arguments::implicit_args_.
-  __ mov(ApiParameterOperand(1, returns_handle), eax);
+  __ mov(ApiParameterOperand(2, returns_handle), eax);
   __ add(eax, Immediate(argc * kPointerSize));
   // v8::Arguments::values_.
-  __ mov(ApiParameterOperand(2, returns_handle), eax);
+  __ mov(ApiParameterOperand(3, returns_handle), eax);
   // v8::Arguments::length_.
-  __ Set(ApiParameterOperand(3, returns_handle), Immediate(argc));
+  __ Set(ApiParameterOperand(4, returns_handle), Immediate(argc));
   // v8::Arguments::is_construct_call_.
-  __ Set(ApiParameterOperand(4, returns_handle), Immediate(0));
+  __ Set(ApiParameterOperand(5, returns_handle), Immediate(0));
 
   // v8::InvocationCallback's argument.
-  __ lea(eax, ApiParameterOperand(1, returns_handle));
+  __ lea(eax, ApiParameterOperand(2, returns_handle));
   __ mov(ApiParameterOperand(0, returns_handle), eax);
 
+  Address thunk_address = returns_handle
+      ? FUNCTION_ADDR(&InvokeInvocationCallback)
+      : FUNCTION_ADDR(&InvokeFunctionCallback);
+
   __ CallApiFunctionAndReturn(function_address,
+                              thunk_address,
+                              ApiParameterOperand(1, returns_handle),
                               argc + kFastApiCallArguments + 1,
                               returns_handle,
                               kFastApiCallArguments + 1);
@@ -753,16 +764,16 @@ static void GenerateCheckPropertyCell(MacroAssembler* masm,
                                       Handle<Name> name,
                                       Register scratch,
                                       Label* miss) {
-  Handle<JSGlobalPropertyCell> cell =
+  Handle<PropertyCell> cell =
       GlobalObject::EnsurePropertyCell(global, name);
   ASSERT(cell->value()->IsTheHole());
   Handle<Oddball> the_hole = masm->isolate()->factory()->the_hole_value();
   if (Serializer::enabled()) {
     __ mov(scratch, Immediate(cell));
-    __ cmp(FieldOperand(scratch, JSGlobalPropertyCell::kValueOffset),
+    __ cmp(FieldOperand(scratch, PropertyCell::kValueOffset),
            Immediate(the_hole));
   } else {
-    __ cmp(Operand::Cell(cell), Immediate(the_hole));
+    __ cmp(Operand::ForCell(cell), Immediate(the_hole));
   }
   __ j(not_equal, miss);
 }
@@ -839,8 +850,14 @@ void StubCompiler::GenerateStoreTransition(MacroAssembler* masm,
 
   Register storage_reg = name_reg;
 
-  if (FLAG_track_fields && representation.IsSmi()) {
-    __ JumpIfNotSmi(value_reg, miss_restore_name);
+  if (details.type() == CONSTANT_FUNCTION) {
+    Handle<HeapObject> constant(
+        HeapObject::cast(descriptors->GetValue(descriptor)));
+    __ LoadHeapObject(scratch1, constant);
+    __ cmp(value_reg, scratch1);
+    __ j(not_equal, miss_restore_name);
+  } else if (FLAG_track_fields && representation.IsSmi()) {
+      __ JumpIfNotSmi(value_reg, miss_restore_name);
   } else if (FLAG_track_heap_object_fields && representation.IsHeapObject()) {
     __ JumpIfSmi(value_reg, miss_restore_name);
   } else if (FLAG_track_double_fields && representation.IsDouble()) {
@@ -884,7 +901,8 @@ void StubCompiler::GenerateStoreTransition(MacroAssembler* masm,
   ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded());
 
   // Perform map transition for the receiver if necessary.
-  if (object->map()->unused_property_fields() == 0) {
+  if (details.type() == FIELD &&
+      object->map()->unused_property_fields() == 0) {
     // The properties must be extended before we can store the value.
     // We jump to a runtime call that extends the properties array.
     __ pop(scratch1);  // Return address.
@@ -913,6 +931,12 @@ void StubCompiler::GenerateStoreTransition(MacroAssembler* masm,
                       OMIT_REMEMBERED_SET,
                       OMIT_SMI_CHECK);
 
+  if (details.type() == CONSTANT_FUNCTION) {
+    ASSERT(value_reg.is(eax));
+    __ ret(0);
+    return;
+  }
+
   int index = transition->instance_descriptors()->GetFieldIndex(
       transition->LastAdded());
 
@@ -1406,7 +1430,9 @@ void BaseLoadStubCompiler::GenerateLoadCallback(
   // array for v8::Arguments::values_, handler for name and pointer
   // to the values (it considered as smi in GC).
   const int kStackSpace = PropertyCallbackArguments::kArgsLength + 2;
-  const int kApiArgc = 2;
+  // Allocate space for opional callback address parameter in case
+  // CPU profiler is active.
+  const int kApiArgc = 2 + 1;
 
   Address getter_address = v8::ToCData<Address>(callback->getter());
   bool returns_handle =
@@ -1422,7 +1448,13 @@ void BaseLoadStubCompiler::GenerateLoadCallback(
   // garbage collection but instead return the allocation failure
   // object.
 
+  Address thunk_address = returns_handle
+      ? FUNCTION_ADDR(&InvokeAccessorGetter)
+      : FUNCTION_ADDR(&InvokeAccessorGetterCallback);
+
   __ CallApiFunctionAndReturn(getter_address,
+                              thunk_address,
+                              ApiParameterOperand(2, returns_handle),
                               kStackSpace,
                               returns_handle,
                               6);
@@ -1565,15 +1597,15 @@ void CallStubCompiler::GenerateGlobalReceiverCheck(Handle<JSObject> object,
 
 
 void CallStubCompiler::GenerateLoadFunctionFromCell(
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
     Label* miss) {
   // Get the value from the cell.
   if (Serializer::enabled()) {
     __ mov(edi, Immediate(cell));
-    __ mov(edi, FieldOperand(edi, JSGlobalPropertyCell::kValueOffset));
+    __ mov(edi, FieldOperand(edi, Cell::kValueOffset));
   } else {
-    __ mov(edi, Operand::Cell(cell));
+    __ mov(edi, Operand::ForCell(cell));
   }
 
   // Check that the cell contains the same function.
@@ -1664,12 +1696,59 @@ Handle<Code> CallStubCompiler::CompileCallField(Handle<JSObject> object,
 }
 
 
+Handle<Code> CallStubCompiler::CompileArrayCodeCall(
+    Handle<Object> object,
+    Handle<JSObject> holder,
+    Handle<Cell> cell,
+    Handle<JSFunction> function,
+    Handle<String> name,
+    Code::StubType type) {
+  Label miss;
+
+  // Check that function is still array
+  const int argc = arguments().immediate();
+  GenerateNameCheck(name, &miss);
+
+  if (cell.is_null()) {
+    // Get the receiver from the stack.
+    __ mov(edx, Operand(esp, (argc + 1) * kPointerSize));
+
+    // Check that the receiver isn't a smi.
+    __ JumpIfSmi(edx, &miss);
+    CheckPrototypes(Handle<JSObject>::cast(object), edx, holder, ebx, eax, edi,
+                    name, &miss);
+  } else {
+    ASSERT(cell->value() == *function);
+    GenerateGlobalReceiverCheck(Handle<JSObject>::cast(object), holder, name,
+                                &miss);
+    GenerateLoadFunctionFromCell(cell, function, &miss);
+  }
+
+  Handle<Smi> kind(Smi::FromInt(GetInitialFastElementsKind()), isolate());
+  Handle<Cell> kind_feedback_cell =
+      isolate()->factory()->NewCell(kind);
+  __ mov(eax, Immediate(argc));
+  __ mov(ebx, kind_feedback_cell);
+  __ mov(edi, function);
+
+  ArrayConstructorStub stub(isolate());
+  __ TailCallStub(&stub);
+
+  __ bind(&miss);
+  GenerateMissBranch();
+
+  // Return the generated code.
+  return GetCode(type, name);
+}
+
+
 Handle<Code> CallStubCompiler::CompileArrayPushCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- ecx                 : name
   //  -- esp[0]              : return address
@@ -1918,16 +1997,17 @@ Handle<Code> CallStubCompiler::CompileArrayPushCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return GetCode(function);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileArrayPopCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- ecx                 : name
   //  -- esp[0]              : return address
@@ -2000,16 +2080,17 @@ Handle<Code> CallStubCompiler::CompileArrayPopCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return GetCode(function);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileStringCharCodeAtCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- ecx                 : function name
   //  -- esp[0]              : return address
@@ -2084,16 +2165,17 @@ Handle<Code> CallStubCompiler::CompileStringCharCodeAtCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return GetCode(function);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileStringCharAtCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- ecx                 : function name
   //  -- esp[0]              : return address
@@ -2170,16 +2252,17 @@ Handle<Code> CallStubCompiler::CompileStringCharAtCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return GetCode(function);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileStringFromCharCodeCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- ecx                 : function name
   //  -- esp[0]              : return address
@@ -2246,16 +2329,17 @@ Handle<Code> CallStubCompiler::CompileStringFromCharCodeCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileMathFloorCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- ecx                 : name
   //  -- esp[0]              : return address
@@ -2377,16 +2461,17 @@ Handle<Code> CallStubCompiler::CompileMathFloorCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileMathAbsCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- ecx                 : name
   //  -- esp[0]              : return address
@@ -2483,7 +2568,7 @@ Handle<Code> CallStubCompiler::CompileMathAbsCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name);
+  return GetCode(type, name);
 }
 
 
@@ -2491,7 +2576,7 @@ Handle<Code> CallStubCompiler::CompileFastApiCall(
     const CallOptimization& optimization,
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
     Handle<String> name) {
   ASSERT(optimization.is_simple_api_call());
@@ -2673,8 +2758,9 @@ Handle<Code> CallStubCompiler::CompileCallConstant(
 
   if (HasCustomCallGenerator(function)) {
     Handle<Code> code = CompileCustomCall(object, holder,
-                                          Handle<JSGlobalPropertyCell>::null(),
-                                          function, Handle<String>::cast(name));
+                                          Handle<Cell>::null(),
+                                          function, Handle<String>::cast(name),
+                                          Code::CONSTANT_FUNCTION);
     // A null handle means bail out to the regular compiler code below.
     if (!code.is_null()) return code;
   }
@@ -2752,7 +2838,7 @@ Handle<Code> CallStubCompiler::CompileCallInterceptor(Handle<JSObject> object,
 Handle<Code> CallStubCompiler::CompileCallGlobal(
     Handle<JSObject> object,
     Handle<GlobalObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<PropertyCell> cell,
     Handle<JSFunction> function,
     Handle<Name> name) {
   // ----------- S t a t e -------------
@@ -2765,7 +2851,8 @@ Handle<Code> CallStubCompiler::CompileCallGlobal(
 
   if (HasCustomCallGenerator(function)) {
     Handle<Code> code = CompileCustomCall(
-        object, holder, cell, function, Handle<String>::cast(name));
+        object, holder, cell, function, Handle<String>::cast(name),
+        Code::NORMAL);
     // A null handle means bail out to the regular compiler code below.
     if (!code.is_null()) return code;
   }
@@ -2935,7 +3022,7 @@ Handle<Code> StoreStubCompiler::CompileStoreInterceptor(
 
 Handle<Code> StoreStubCompiler::CompileStoreGlobal(
     Handle<GlobalObject> object,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<PropertyCell> cell,
     Handle<Name> name) {
   Label miss;
 
@@ -2947,7 +3034,7 @@ Handle<Code> StoreStubCompiler::CompileStoreGlobal(
   // Compute the cell operand to use.
   __ mov(scratch1(), Immediate(cell));
   Operand cell_operand =
-      FieldOperand(scratch1(), JSGlobalPropertyCell::kValueOffset);
+      FieldOperand(scratch1(), PropertyCell::kValueOffset);
 
   // Check that the value in the cell is not the hole. If it is, this
   // cell could have been deleted and reintroducing the global needs
@@ -3108,7 +3195,7 @@ void LoadStubCompiler::GenerateLoadViaGetter(MacroAssembler* masm,
 Handle<Code> LoadStubCompiler::CompileLoadGlobal(
     Handle<JSObject> object,
     Handle<GlobalObject> global,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<PropertyCell> cell,
     Handle<Name> name,
     bool is_dont_delete) {
   Label success, miss;
@@ -3119,9 +3206,9 @@ Handle<Code> LoadStubCompiler::CompileLoadGlobal(
   // Get the value from the cell.
   if (Serializer::enabled()) {
     __ mov(eax, Immediate(cell));
-    __ mov(eax, FieldOperand(eax, JSGlobalPropertyCell::kValueOffset));
+    __ mov(eax, FieldOperand(eax, PropertyCell::kValueOffset));
   } else {
-    __ mov(eax, Operand::Cell(cell));
+    __ mov(eax, Operand::ForCell(cell));
   }
 
   // Check for deleted property if property can actually be deleted.
index 94e8773..ff3a94d 100644 (file)
@@ -144,7 +144,7 @@ IC::IC(FrameDepth depth, Isolate* isolate) : isolate_(isolate) {
   ASSERT(fp == frame->fp() && pc_address == frame->pc_address());
 #endif
   fp_ = fp;
-  pc_address_ = pc_address;
+  pc_address_ = StackFrame::ResolveReturnAddressLocation(pc_address);
 }
 
 
@@ -686,7 +686,7 @@ Handle<Code> CallICBase::ComputeMonomorphicStub(LookupResult* lookup,
 
       if (holder->IsGlobalObject()) {
         Handle<GlobalObject> global = Handle<GlobalObject>::cast(holder);
-        Handle<JSGlobalPropertyCell> cell(
+        Handle<PropertyCell> cell(
             global->GetPropertyCell(lookup), isolate());
         if (!cell->value()->IsJSFunction()) return Handle<Code>::null();
         Handle<JSFunction> function(JSFunction::cast(cell->value()));
@@ -936,15 +936,7 @@ MaybeObject* LoadIC::Load(State state,
   }
 
   // Update inline cache and stub cache.
-  if (FLAG_use_ic) {
-    if (!object->IsJSObject()) {
-      // TODO(jkummerow): It would be nice to support non-JSObjects in
-      // UpdateCaches, then we wouldn't need to go generic here.
-      set_target(*generic_stub());
-    } else {
-      UpdateCaches(&lookup, state, object, name);
-    }
-  }
+  if (FLAG_use_ic) UpdateCaches(&lookup, state, object, name);
 
   PropertyAttributes attr;
   if (lookup.IsInterceptor() || lookup.IsHandler()) {
@@ -1204,11 +1196,17 @@ void LoadIC::UpdateCaches(LookupResult* lookup,
                           Handle<Object> object,
                           Handle<String> name) {
   // Bail out if the result is not cacheable.
-  if (!lookup->IsCacheable()) return;
+  if (!lookup->IsCacheable()) {
+    set_target(*generic_stub());
+    return;
+  }
 
-  // Loading properties from values is not common, so don't try to
-  // deal with non-JS objects here.
-  if (!object->IsJSObject()) return;
+  // TODO(jkummerow): It would be nice to support non-JSObjects in
+  // UpdateCaches, then we wouldn't need to go generic here.
+  if (!object->IsJSObject()) {
+    set_target(*generic_stub());
+    return;
+  }
 
   Handle<JSObject> receiver = Handle<JSObject>::cast(object);
   Handle<Code> code;
@@ -1219,7 +1217,10 @@ void LoadIC::UpdateCaches(LookupResult* lookup,
     code = pre_monomorphic_stub();
   } else {
     code = ComputeLoadHandler(lookup, receiver, name);
-    if (code.is_null()) return;
+    if (code.is_null()) {
+      set_target(*generic_stub());
+      return;
+    }
   }
 
   PatchCache(state, kNonStrictMode, receiver, name, code);
@@ -1257,7 +1258,7 @@ Handle<Code> LoadIC::ComputeLoadHandler(LookupResult* lookup,
     case NORMAL:
       if (holder->IsGlobalObject()) {
         Handle<GlobalObject> global = Handle<GlobalObject>::cast(holder);
-        Handle<JSGlobalPropertyCell> cell(
+        Handle<PropertyCell> cell(
             global->GetPropertyCell(lookup), isolate());
         return isolate()->stub_cache()->ComputeLoadGlobal(
             name, receiver, global, cell, lookup->IsDontDelete());
@@ -1640,6 +1641,12 @@ MaybeObject* StoreIC::Store(State state,
              IsUndeclaredGlobal(object)) {
     // Strict mode doesn't allow setting non-existent global property.
     return ReferenceError("not_defined", name);
+  } else if (FLAG_use_ic &&
+             (lookup.IsNormal() ||
+              (lookup.IsField() && lookup.CanHoldValue(value)))) {
+    Handle<Code> stub = strict_mode == kStrictMode
+        ? generic_stub_strict() : generic_stub();
+    set_target(*stub);
   }
 
   // Set the property.
@@ -1660,9 +1667,14 @@ void StoreIC::UpdateCaches(LookupResult* lookup,
   // These are not cacheable, so we never see such LookupResults here.
   ASSERT(!lookup->IsHandler());
 
-  Handle<Code> code =
-      ComputeStoreMonomorphic(lookup, strict_mode, receiver, name);
-  if (code.is_null()) return;
+  Handle<Code> code = ComputeStoreMonomorphic(
+      lookup, strict_mode, receiver, name);
+  if (code.is_null()) {
+    Handle<Code> stub = strict_mode == kStrictMode
+        ? generic_stub_strict() : generic_stub();
+    set_target(*stub);
+    return;
+  }
 
   PatchCache(state, strict_mode, receiver, name, code);
   TRACE_IC("StoreIC", name, state, target());
@@ -1684,7 +1696,7 @@ Handle<Code> StoreIC::ComputeStoreMonomorphic(LookupResult* lookup,
         // from the property cell. So the property must be directly on the
         // global object.
         Handle<GlobalObject> global = Handle<GlobalObject>::cast(receiver);
-        Handle<JSGlobalPropertyCell> cell(
+        Handle<PropertyCell> cell(
             global->GetPropertyCell(lookup), isolate());
         return isolate()->stub_cache()->ComputeStoreGlobal(
             name, global, cell, strict_mode);
@@ -1733,7 +1745,7 @@ Handle<Code> StoreIC::ComputeStoreMonomorphic(LookupResult* lookup,
       DescriptorArray* target_descriptors = transition->instance_descriptors();
       PropertyDetails details = target_descriptors->GetDetails(descriptor);
 
-      if (details.type() != FIELD || details.attributes() != NONE) break;
+      if (details.type() == CALLBACKS || details.attributes() != NONE) break;
 
       return isolate()->stub_cache()->ComputeStoreTransition(
           name, receiver, lookup, transition, strict_mode);
@@ -2099,7 +2111,7 @@ Handle<Code> KeyedStoreIC::ComputeStoreMonomorphic(LookupResult* lookup,
       DescriptorArray* target_descriptors = transition->instance_descriptors();
       PropertyDetails details = target_descriptors->GetDetails(descriptor);
 
-      if (details.type() == FIELD && details.attributes() == NONE) {
+      if (details.type() != CALLBACKS && details.attributes() == NONE) {
         return isolate()->stub_cache()->ComputeKeyedStoreTransition(
             name, receiver, lookup, transition, strict_mode);
       }
@@ -2408,20 +2420,37 @@ const char* UnaryOpIC::GetName(TypeInfo type_info) {
 UnaryOpIC::State UnaryOpIC::ToState(TypeInfo type_info) {
   switch (type_info) {
     case UNINITIALIZED:
-      return ::v8::internal::UNINITIALIZED;
+      return v8::internal::UNINITIALIZED;
     case SMI:
     case NUMBER:
       return MONOMORPHIC;
     case GENERIC:
-      return ::v8::internal::GENERIC;
+      return v8::internal::GENERIC;
   }
   UNREACHABLE();
-  return ::v8::internal::UNINITIALIZED;
+  return v8::internal::UNINITIALIZED;
+}
+
+
+Handle<Type> UnaryOpIC::TypeInfoToType(TypeInfo type_info, Isolate* isolate) {
+  switch (type_info) {
+    case UNINITIALIZED:
+      return handle(Type::None(), isolate);
+    case SMI:
+      return handle(Type::Smi(), isolate);
+    case NUMBER:
+      return handle(Type::Number(), isolate);
+    case GENERIC:
+      return handle(Type::Any(), isolate);
+  }
+  UNREACHABLE();
+  return handle(Type::Any(), isolate);
 }
 
+
 UnaryOpIC::TypeInfo UnaryOpIC::GetTypeInfo(Handle<Object> operand) {
-  ::v8::internal::TypeInfo operand_type =
-      ::v8::internal::TypeInfo::TypeFromValue(operand);
+  v8::internal::TypeInfo operand_type =
+      v8::internal::TypeInfo::FromValue(operand);
   if (operand_type.IsSmi()) {
     return SMI;
   } else if (operand_type.IsNumber()) {
@@ -2489,6 +2518,46 @@ BinaryOpIC::State BinaryOpIC::ToState(TypeInfo type_info) {
 }
 
 
+Handle<Type> BinaryOpIC::TypeInfoToType(BinaryOpIC::TypeInfo binary_type,
+                                        Isolate* isolate) {
+  switch (binary_type) {
+    case UNINITIALIZED:
+      return handle(Type::None(), isolate);
+    case SMI:
+      return handle(Type::Smi(), isolate);
+    case INT32:
+      return handle(Type::Signed32(), isolate);
+    case NUMBER:
+      return handle(Type::Number(), isolate);
+    case ODDBALL:
+      return handle(Type::Optional(
+          handle(Type::Union(
+              handle(Type::Number(), isolate),
+              handle(Type::String(), isolate)), isolate)), isolate);
+    case STRING:
+      return handle(Type::String(), isolate);
+    case GENERIC:
+      return handle(Type::Any(), isolate);
+  }
+  UNREACHABLE();
+  return handle(Type::Any(), isolate);
+}
+
+
+void BinaryOpIC::StubInfoToType(int minor_key,
+                                Handle<Type>* left,
+                                Handle<Type>* right,
+                                Handle<Type>* result,
+                                Isolate* isolate) {
+  TypeInfo left_typeinfo, right_typeinfo, result_typeinfo;
+  BinaryOpStub::decode_types_from_minor_key(
+      minor_key, &left_typeinfo, &right_typeinfo, &result_typeinfo);
+  *left = TypeInfoToType(left_typeinfo, isolate);
+  *right = TypeInfoToType(right_typeinfo, isolate);
+  *result = TypeInfoToType(result_typeinfo, isolate);
+}
+
+
 RUNTIME_FUNCTION(MaybeObject*, UnaryOp_Patch) {
   ASSERT(args.length() == 4);
 
@@ -2545,8 +2614,7 @@ RUNTIME_FUNCTION(MaybeObject*, UnaryOp_Patch) {
 
 static BinaryOpIC::TypeInfo TypeInfoFromValue(Handle<Object> value,
                                               Token::Value op) {
-  ::v8::internal::TypeInfo type =
-      ::v8::internal::TypeInfo::TypeFromValue(value);
+  v8::internal::TypeInfo type = v8::internal::TypeInfo::FromValue(value);
   if (type.IsSmi()) return BinaryOpIC::SMI;
   if (type.IsInteger32()) {
     if (kSmiValueSize == 32) return BinaryOpIC::SMI;
@@ -2585,11 +2653,10 @@ static BinaryOpIC::TypeInfo InputState(BinaryOpIC::TypeInfo old_type,
 #ifdef DEBUG
 static void TraceBinaryOp(BinaryOpIC::TypeInfo left,
                           BinaryOpIC::TypeInfo right,
-                          bool has_fixed_right_arg,
-                          int32_t fixed_right_arg_value,
+                          Maybe<int32_t> fixed_right_arg,
                           BinaryOpIC::TypeInfo result) {
   PrintF("%s*%s", BinaryOpIC::GetName(left), BinaryOpIC::GetName(right));
-  if (has_fixed_right_arg) PrintF("{%d}", fixed_right_arg_value);
+  if (fixed_right_arg.has_value) PrintF("{%d}", fixed_right_arg.value);
   PrintF("->%s", BinaryOpIC::GetName(result));
 }
 #endif
@@ -2621,10 +2688,8 @@ RUNTIME_FUNCTION(MaybeObject*, BinaryOp_Patch) {
   BinaryOpIC::TypeInfo new_overall = Max(new_left, new_right);
   BinaryOpIC::TypeInfo previous_overall = Max(previous_left, previous_right);
 
-  bool previous_has_fixed_right_arg =
-      BinaryOpStub::decode_has_fixed_right_arg_from_minor_key(key);
-  int previous_fixed_right_arg_value =
-      BinaryOpStub::decode_fixed_right_arg_value_from_minor_key(key);
+  Maybe<int> previous_fixed_right_arg =
+      BinaryOpStub::decode_fixed_right_arg_from_minor_key(key);
 
   int32_t value;
   bool new_has_fixed_right_arg =
@@ -2632,11 +2697,12 @@ RUNTIME_FUNCTION(MaybeObject*, BinaryOp_Patch) {
       right->ToInt32(&value) &&
       BinaryOpStub::can_encode_arg_value(value) &&
       (previous_overall == BinaryOpIC::UNINITIALIZED ||
-       (previous_has_fixed_right_arg &&
-        previous_fixed_right_arg_value == value));
-  int32_t new_fixed_right_arg_value = new_has_fixed_right_arg ? value : 1;
+       (previous_fixed_right_arg.has_value &&
+        previous_fixed_right_arg.value == value));
+  Maybe<int32_t> new_fixed_right_arg(
+      new_has_fixed_right_arg, new_has_fixed_right_arg ? value : 1);
 
-  if (previous_has_fixed_right_arg == new_has_fixed_right_arg) {
+  if (previous_fixed_right_arg.has_value == new_fixed_right_arg.has_value) {
     if (new_overall == BinaryOpIC::SMI && previous_overall == BinaryOpIC::SMI) {
       if (op == Token::DIV ||
           op == Token::MUL ||
@@ -2660,8 +2726,7 @@ RUNTIME_FUNCTION(MaybeObject*, BinaryOp_Patch) {
     }
   }
 
-  BinaryOpStub stub(key, new_left, new_right, result_type,
-                    new_has_fixed_right_arg, new_fixed_right_arg_value);
+  BinaryOpStub stub(key, new_left, new_right, result_type, new_fixed_right_arg);
   Handle<Code> code = stub.GetCode(isolate);
   if (!code.is_null()) {
 #ifdef DEBUG
@@ -2669,11 +2734,10 @@ RUNTIME_FUNCTION(MaybeObject*, BinaryOp_Patch) {
       PrintF("[BinaryOpIC in ");
       JavaScriptFrame::PrintTop(isolate, stdout, false, true);
       PrintF(" ");
-      TraceBinaryOp(previous_left, previous_right, previous_has_fixed_right_arg,
-                    previous_fixed_right_arg_value, previous_result);
+      TraceBinaryOp(previous_left, previous_right, previous_fixed_right_arg,
+                    previous_result);
       PrintF(" => ");
-      TraceBinaryOp(new_left, new_right, new_has_fixed_right_arg,
-                    new_fixed_right_arg_value, result_type);
+      TraceBinaryOp(new_left, new_right, new_fixed_right_arg, result_type);
       PrintF(" #%s @ %p]\n", Token::Name(op), static_cast<void*>(*code));
     }
 #endif
@@ -2767,52 +2831,96 @@ const char* CompareIC::GetStateName(State state) {
     case OBJECT: return "OBJECT";
     case KNOWN_OBJECT: return "KNOWN_OBJECT";
     case GENERIC: return "GENERIC";
-    default:
-      UNREACHABLE();
-      return NULL;
   }
+  UNREACHABLE();
+  return NULL;
 }
 
 
-static CompareIC::State InputState(CompareIC::State old_state,
-                                   Handle<Object> value) {
-  switch (old_state) {
+Handle<Type> CompareIC::StateToType(
+    Isolate* isolate,
+    CompareIC::State state,
+    Handle<Map> map) {
+  switch (state) {
     case CompareIC::UNINITIALIZED:
-      if (value->IsSmi()) return CompareIC::SMI;
-      if (value->IsHeapNumber()) return CompareIC::NUMBER;
-      if (value->IsInternalizedString()) return CompareIC::INTERNALIZED_STRING;
-      if (value->IsString()) return CompareIC::STRING;
-      if (value->IsSymbol()) return CompareIC::UNIQUE_NAME;
-      if (value->IsJSObject()) return CompareIC::OBJECT;
-      break;
+      return handle(Type::None(), isolate);
     case CompareIC::SMI:
-      if (value->IsSmi()) return CompareIC::SMI;
-      if (value->IsHeapNumber()) return CompareIC::NUMBER;
-      break;
+      return handle(Type::Smi(), isolate);
     case CompareIC::NUMBER:
-      if (value->IsNumber()) return CompareIC::NUMBER;
-      break;
+      return handle(Type::Number(), isolate);
+    case CompareIC::STRING:
+      return handle(Type::String(), isolate);
     case CompareIC::INTERNALIZED_STRING:
-      if (value->IsInternalizedString()) return CompareIC::INTERNALIZED_STRING;
-      if (value->IsString()) return CompareIC::STRING;
-      if (value->IsSymbol()) return CompareIC::UNIQUE_NAME;
+      return handle(Type::InternalizedString(), isolate);
+    case CompareIC::UNIQUE_NAME:
+      return handle(Type::UniqueName(), isolate);
+    case CompareIC::OBJECT:
+      return handle(Type::Receiver(), isolate);
+    case CompareIC::KNOWN_OBJECT:
+      return handle(
+          map.is_null() ? Type::Receiver() : Type::Class(map), isolate);
+    case CompareIC::GENERIC:
+      return handle(Type::Any(), isolate);
+  }
+  UNREACHABLE();
+  return Handle<Type>();
+}
+
+
+void CompareIC::StubInfoToType(int stub_minor_key,
+                               Handle<Type>* left_type,
+                               Handle<Type>* right_type,
+                               Handle<Type>* overall_type,
+                               Handle<Map> map,
+                               Isolate* isolate) {
+  State left_state, right_state, handler_state;
+  ICCompareStub::DecodeMinorKey(stub_minor_key, &left_state, &right_state,
+                                &handler_state, NULL);
+  *left_type = StateToType(isolate, left_state);
+  *right_type = StateToType(isolate, right_state);
+  *overall_type = StateToType(isolate, handler_state, map);
+}
+
+
+CompareIC::State CompareIC::NewInputState(State old_state,
+                                          Handle<Object> value) {
+  switch (old_state) {
+    case UNINITIALIZED:
+      if (value->IsSmi()) return SMI;
+      if (value->IsHeapNumber()) return NUMBER;
+      if (value->IsInternalizedString()) return INTERNALIZED_STRING;
+      if (value->IsString()) return STRING;
+      if (value->IsSymbol()) return UNIQUE_NAME;
+      if (value->IsJSObject()) return OBJECT;
       break;
-    case CompareIC::STRING:
-      if (value->IsString()) return CompareIC::STRING;
+    case SMI:
+      if (value->IsSmi()) return SMI;
+      if (value->IsHeapNumber()) return NUMBER;
       break;
-    case CompareIC::UNIQUE_NAME:
-      if (value->IsUniqueName()) return CompareIC::UNIQUE_NAME;
+    case NUMBER:
+      if (value->IsNumber()) return NUMBER;
       break;
-    case CompareIC::OBJECT:
-      if (value->IsJSObject()) return CompareIC::OBJECT;
+    case INTERNALIZED_STRING:
+      if (value->IsInternalizedString()) return INTERNALIZED_STRING;
+      if (value->IsString()) return STRING;
+      if (value->IsSymbol()) return UNIQUE_NAME;
       break;
-    case CompareIC::GENERIC:
+    case STRING:
+      if (value->IsString()) return STRING;
       break;
-    case CompareIC::KNOWN_OBJECT:
+    case UNIQUE_NAME:
+      if (value->IsUniqueName()) return UNIQUE_NAME;
+      break;
+    case OBJECT:
+      if (value->IsJSObject()) return OBJECT;
+      break;
+    case GENERIC:
+      break;
+    case KNOWN_OBJECT:
       UNREACHABLE();
       break;
   }
-  return CompareIC::GENERIC;
+  return GENERIC;
 }
 
 
@@ -2885,8 +2993,8 @@ void CompareIC::UpdateCaches(Handle<Object> x, Handle<Object> y) {
   State previous_left, previous_right, previous_state;
   ICCompareStub::DecodeMinorKey(target()->stub_info(), &previous_left,
                                 &previous_right, &previous_state, NULL);
-  State new_left = InputState(previous_left, x);
-  State new_right = InputState(previous_right, y);
+  State new_left = NewInputState(previous_left, x);
+  State new_right = NewInputState(previous_right, y);
   State state = TargetState(previous_state, previous_left, previous_right,
                             HasInlinedSmiCode(address()), x, y);
   ICCompareStub stub(op_, new_left, new_right, state);
@@ -2934,7 +3042,7 @@ void CompareNilIC::Clear(Address address, Code* target) {
   Code::ExtraICState state = target->extended_extra_ic_state();
 
   CompareNilICStub stub(state, HydrogenCodeStub::UNINITIALIZED);
-  stub.ClearTypes();
+  stub.ClearState();
 
   Code* code = NULL;
   CHECK(stub.FindCodeInCache(&code, target->GetIsolate()));
@@ -2961,9 +3069,9 @@ MaybeObject* CompareNilIC::CompareNil(Handle<Object> object) {
   // types must be supported as a result of the miss.
   bool already_monomorphic = stub.IsMonomorphic();
 
-  CompareNilICStub::Types old_types = stub.GetTypes();
+  CompareNilICStub::State old_state = stub.GetState();
   stub.Record(object);
-  old_types.TraceTransition(stub.GetTypes());
+  old_state.TraceTransition(stub.GetState());
 
   NilValue nil = stub.GetNilValue();
 
index 8c448eb..829c6b1 100644 (file)
@@ -511,8 +511,8 @@ class StoreIC: public IC {
   static void GenerateMegamorphic(MacroAssembler* masm,
                                   StrictModeFlag strict_mode);
   static void GenerateNormal(MacroAssembler* masm);
-  static void GenerateGlobalProxy(MacroAssembler* masm,
-                                  StrictModeFlag strict_mode);
+  static void GenerateRuntimeSetProperty(MacroAssembler* masm,
+                                         StrictModeFlag strict_mode);
 
   MUST_USE_RESULT MaybeObject* Store(
       State state,
@@ -532,6 +532,12 @@ class StoreIC: public IC {
   virtual Handle<Code> megamorphic_stub_strict() {
     return isolate()->builtins()->StoreIC_Megamorphic_Strict();
   }
+  virtual Handle<Code> generic_stub() const {
+    return isolate()->builtins()->StoreIC_Generic();
+  }
+  virtual Handle<Code> generic_stub_strict() const {
+    return isolate()->builtins()->StoreIC_Generic_Strict();
+  }
   virtual Handle<Code> global_proxy_stub() {
     return isolate()->builtins()->StoreIC_GlobalProxy();
   }
@@ -684,6 +690,8 @@ class UnaryOpIC: public IC {
     GENERIC
   };
 
+  static Handle<Type> TypeInfoToType(TypeInfo info, Isolate* isolate);
+
   explicit UnaryOpIC(Isolate* isolate) : IC(NO_EXTRA_FRAME, isolate) { }
 
   void patch(Code* code);
@@ -711,6 +719,12 @@ class BinaryOpIC: public IC {
     GENERIC
   };
 
+  static void StubInfoToType(int minor_key,
+                             Handle<Type>* left,
+                             Handle<Type>* right,
+                             Handle<Type>* result,
+                             Isolate* isolate);
+
   explicit BinaryOpIC(Isolate* isolate) : IC(NO_EXTRA_FRAME, isolate) { }
 
   void patch(Code* code);
@@ -718,6 +732,9 @@ class BinaryOpIC: public IC {
   static const char* GetName(TypeInfo type_info);
 
   static State ToState(TypeInfo type_info);
+
+ private:
+  static Handle<Type> TypeInfoToType(TypeInfo binary_type, Isolate* isolate);
 };
 
 
@@ -741,6 +758,19 @@ class CompareIC: public IC {
     GENERIC
   };
 
+  static State NewInputState(State old_state, Handle<Object> value);
+
+  static Handle<Type> StateToType(Isolate* isolate,
+                                  State state,
+                                  Handle<Map> map = Handle<Map>());
+
+  static void StubInfoToType(int stub_minor_key,
+                             Handle<Type>* left_type,
+                             Handle<Type>* right_type,
+                             Handle<Type>* overall_type,
+                             Handle<Map> map,
+                             Isolate* isolate);
+
   CompareIC(Isolate* isolate, Token::Value op)
       : IC(EXTRA_CALL_FRAME, isolate), op_(op) { }
 
index e19d6e2..80dc8ea 100644 (file)
@@ -394,6 +394,7 @@ void IncrementalMarking::SetOldSpacePageFlags(MemoryChunk* chunk,
       chunk->SetFlag(MemoryChunk::RESCAN_ON_EVACUATION);
     }
   } else if (chunk->owner()->identity() == CELL_SPACE ||
+             chunk->owner()->identity() == PROPERTY_CELL_SPACE ||
              chunk->scan_on_scavenge()) {
     chunk->ClearFlag(MemoryChunk::POINTERS_TO_HERE_ARE_INTERESTING);
     chunk->ClearFlag(MemoryChunk::POINTERS_FROM_HERE_ARE_INTERESTING);
@@ -440,6 +441,7 @@ void IncrementalMarking::DeactivateIncrementalWriteBarrier() {
   DeactivateIncrementalWriteBarrierForSpace(heap_->old_pointer_space());
   DeactivateIncrementalWriteBarrierForSpace(heap_->old_data_space());
   DeactivateIncrementalWriteBarrierForSpace(heap_->cell_space());
+  DeactivateIncrementalWriteBarrierForSpace(heap_->property_cell_space());
   DeactivateIncrementalWriteBarrierForSpace(heap_->map_space());
   DeactivateIncrementalWriteBarrierForSpace(heap_->code_space());
   DeactivateIncrementalWriteBarrierForSpace(heap_->new_space());
@@ -474,6 +476,7 @@ void IncrementalMarking::ActivateIncrementalWriteBarrier() {
   ActivateIncrementalWriteBarrier(heap_->old_pointer_space());
   ActivateIncrementalWriteBarrier(heap_->old_data_space());
   ActivateIncrementalWriteBarrier(heap_->cell_space());
+  ActivateIncrementalWriteBarrier(heap_->property_cell_space());
   ActivateIncrementalWriteBarrier(heap_->map_space());
   ActivateIncrementalWriteBarrier(heap_->code_space());
   ActivateIncrementalWriteBarrier(heap_->new_space());
index 7cce14a..6a87580 100644 (file)
 
 #include "v8.h"
 
+#include "allocation-inl.h"
 #include "ast.h"
 #include "bootstrapper.h"
 #include "codegen.h"
 #include "compilation-cache.h"
+#include "cpu-profiler.h"
 #include "debug.h"
 #include "deoptimizer.h"
 #include "heap-profiler.h"
@@ -45,6 +47,7 @@
 #include "platform.h"
 #include "regexp-stack.h"
 #include "runtime-profiler.h"
+#include "sampler.h"
 #include "scopeinfo.h"
 #include "serialize.h"
 #include "simulator.h"
@@ -107,6 +110,7 @@ void ThreadLocalTop::InitializeInternal() {
   // is complete.
   pending_exception_ = NULL;
   has_pending_message_ = false;
+  rethrowing_message_ = false;
   pending_message_obj_ = NULL;
   pending_message_script_ = NULL;
   scheduled_exception_ = NULL;
@@ -116,7 +120,7 @@ void ThreadLocalTop::InitializeInternal() {
 void ThreadLocalTop::Initialize() {
   InitializeInternal();
 #ifdef USE_SIMULATOR
-#ifdef V8_TARGET_ARCH_ARM
+#if V8_TARGET_ARCH_ARM
   simulator_ = Simulator::current(isolate_);
 #elif V8_TARGET_ARCH_MIPS
   simulator_ = Simulator::current(isolate_);
@@ -486,7 +490,8 @@ void Isolate::Iterate(ObjectVisitor* v, ThreadLocalTop* thread) {
        block != NULL;
        block = TRY_CATCH_FROM_ADDRESS(block->next_)) {
     v->VisitPointer(BitCast<Object**>(&(block->exception_)));
-    v->VisitPointer(BitCast<Object**>(&(block->message_)));
+    v->VisitPointer(BitCast<Object**>(&(block->message_obj_)));
+    v->VisitPointer(BitCast<Object**>(&(block->message_script_)));
   }
 
   // Iterate over pointers on native execution stack.
@@ -1162,6 +1167,22 @@ void Isolate::ScheduleThrow(Object* exception) {
 }
 
 
+void Isolate::RestorePendingMessageFromTryCatch(v8::TryCatch* handler) {
+  ASSERT(handler == try_catch_handler());
+  ASSERT(handler->HasCaught());
+  ASSERT(handler->rethrow_);
+  ASSERT(handler->capture_message_);
+  Object* message = reinterpret_cast<Object*>(handler->message_obj_);
+  Object* script = reinterpret_cast<Object*>(handler->message_script_);
+  ASSERT(message->IsJSMessageObject() || message->IsTheHole());
+  ASSERT(script->IsScript() || script->IsTheHole());
+  thread_local_top()->pending_message_obj_ = message;
+  thread_local_top()->pending_message_script_ = script;
+  thread_local_top()->pending_message_start_pos_ = handler->message_start_pos_;
+  thread_local_top()->pending_message_end_pos_ = handler->message_end_pos_;
+}
+
+
 Failure* Isolate::PromoteScheduledException() {
   MaybeObject* thrown = scheduled_exception();
   clear_scheduled_exception();
@@ -1280,9 +1301,12 @@ void Isolate::DoThrow(Object* exception, MessageLocation* location) {
       ShouldReportException(&can_be_caught_externally, catchable_by_javascript);
   bool report_exception = catchable_by_javascript && should_report_exception;
   bool try_catch_needs_message =
-      can_be_caught_externally && try_catch_handler()->capture_message_;
+      can_be_caught_externally && try_catch_handler()->capture_message_ &&
+      !thread_local_top()->rethrowing_message_;
   bool bootstrapping = bootstrapper()->IsActive();
 
+  thread_local_top()->rethrowing_message_ = false;
+
 #ifdef ENABLE_DEBUGGER_SUPPORT
   // Notify debugger of exception.
   if (catchable_by_javascript) {
@@ -1464,8 +1488,9 @@ void Isolate::ReportPendingMessages() {
         HandleScope scope(this);
         Handle<Object> message_obj(thread_local_top_.pending_message_obj_,
                                    this);
-        if (thread_local_top_.pending_message_script_ != NULL) {
-          Handle<Script> script(thread_local_top_.pending_message_script_);
+        if (!thread_local_top_.pending_message_script_->IsTheHole()) {
+          Handle<Script> script(
+              Script::cast(thread_local_top_.pending_message_script_));
           int start_pos = thread_local_top_.pending_message_start_pos_;
           int end_pos = thread_local_top_.pending_message_end_pos_;
           MessageLocation location(script, start_pos, end_pos);
@@ -1487,8 +1512,9 @@ MessageLocation Isolate::GetMessageLocation() {
       thread_local_top_.pending_exception_ != heap()->termination_exception() &&
       thread_local_top_.has_pending_message_ &&
       !thread_local_top_.pending_message_obj_->IsTheHole() &&
-      thread_local_top_.pending_message_script_ != NULL) {
-    Handle<Script> script(thread_local_top_.pending_message_script_);
+      !thread_local_top_.pending_message_obj_->IsTheHole()) {
+    Handle<Script> script(
+        Script::cast(thread_local_top_.pending_message_script_));
     int start_pos = thread_local_top_.pending_message_start_pos_;
     int end_pos = thread_local_top_.pending_message_end_pos_;
     return MessageLocation(script, start_pos, end_pos);
@@ -1625,7 +1651,7 @@ char* Isolate::RestoreThread(char* from) {
   // This might be just paranoia, but it seems to be needed in case a
   // thread_local_top_ is restored on a separate OS thread.
 #ifdef USE_SIMULATOR
-#ifdef V8_TARGET_ARCH_ARM
+#if V8_TARGET_ARCH_ARM
   thread_local_top()->simulator_ = Simulator::current(this);
 #elif V8_TARGET_ARCH_MIPS
   thread_local_top()->simulator_ = Simulator::current(this);
@@ -1754,8 +1780,10 @@ Isolate::Isolate()
       date_cache_(NULL),
       code_stub_interface_descriptors_(NULL),
       context_exit_happened_(false),
+      initialized_from_snapshot_(false),
       cpu_profiler_(NULL),
       heap_profiler_(NULL),
+      function_entry_hook_(NULL),
       deferred_handles_head_(NULL),
       optimizing_compiler_thread_(this),
       marking_thread_(NULL),
@@ -1775,8 +1803,8 @@ Isolate::Isolate()
   thread_manager_ = new ThreadManager();
   thread_manager_->isolate_ = this;
 
-#if defined(V8_TARGET_ARCH_ARM) && !defined(__arm__) || \
-    defined(V8_TARGET_ARCH_MIPS) && !defined(__mips__)
+#if V8_TARGET_ARCH_ARM && !defined(__arm__) || \
+    V8_TARGET_ARCH_MIPS && !defined(__mips__)
   simulator_initialized_ = false;
   simulator_i_cache_ = NULL;
   simulator_redirection_ = NULL;
@@ -1935,9 +1963,18 @@ void Isolate::SetIsolateThreadLocals(Isolate* isolate,
 Isolate::~Isolate() {
   TRACE_ISOLATE(destructor);
 
-  // Has to be called while counters_ are still alive.
+  // Has to be called while counters_ are still alive
   runtime_zone_.DeleteKeptSegment();
 
+  // The entry stack must be empty when we get here,
+  // except for the default isolate, where it can
+  // still contain up to one entry stack item
+  ASSERT(entry_stack_ == NULL || this == default_isolate_);
+  ASSERT(entry_stack_ == NULL || entry_stack_->previous_item == NULL);
+
+  delete entry_stack_;
+  entry_stack_ = NULL;
+
   delete[] assembler_spare_buffer_;
   assembler_spare_buffer_ = NULL;
 
@@ -2004,9 +2041,15 @@ Isolate::~Isolate() {
   delete global_handles_;
   global_handles_ = NULL;
 
+  delete string_stream_debug_object_cache_;
+  string_stream_debug_object_cache_ = NULL;
+
   delete external_reference_table_;
   external_reference_table_ = NULL;
 
+  delete callback_table_;
+  callback_table_ = NULL;
+
 #ifdef ENABLE_DEBUGGER_SUPPORT
   delete debugger_;
   debugger_ = NULL;
@@ -2038,15 +2081,24 @@ void Isolate::PropagatePendingExceptionToExternalTryCatch() {
     try_catch_handler()->has_terminated_ = true;
     try_catch_handler()->exception_ = heap()->null_value();
   } else {
+    v8::TryCatch* handler = try_catch_handler();
     // At this point all non-object (failure) exceptions have
     // been dealt with so this shouldn't fail.
     ASSERT(!pending_exception()->IsFailure());
-    try_catch_handler()->can_continue_ = true;
-    try_catch_handler()->has_terminated_ = false;
-    try_catch_handler()->exception_ = pending_exception();
-    if (!thread_local_top_.pending_message_obj_->IsTheHole()) {
-      try_catch_handler()->message_ = thread_local_top_.pending_message_obj_;
-    }
+    ASSERT(thread_local_top_.pending_message_obj_->IsJSMessageObject() ||
+           thread_local_top_.pending_message_obj_->IsTheHole());
+    ASSERT(thread_local_top_.pending_message_script_->IsScript() ||
+           thread_local_top_.pending_message_script_->IsTheHole());
+    handler->can_continue_ = true;
+    handler->has_terminated_ = false;
+    handler->exception_ = pending_exception();
+    // Propagate to the external try-catch only if we got an actual message.
+    if (thread_local_top_.pending_message_obj_->IsTheHole()) return;
+
+    handler->message_obj_ = thread_local_top_.pending_message_obj_;
+    handler->message_script_ = thread_local_top_.pending_message_script_;
+    handler->message_start_pos_ = thread_local_top_.pending_message_start_pos_;
+    handler->message_end_pos_ = thread_local_top_.pending_message_end_pos_;
   }
 }
 
@@ -2078,6 +2130,14 @@ bool Isolate::Init(Deserializer* des) {
   ASSERT(Isolate::Current() == this);
   TRACE_ISOLATE(init);
 
+  if (function_entry_hook() != NULL) {
+    // When function entry hooking is in effect, we have to create the code
+    // stubs from scratch to get entry hooks, rather than loading the previously
+    // generated stubs from disk.
+    // If this assert fires, the initialization path has regressed.
+    ASSERT(des == NULL);
+  }
+
   // The initialization process does not handle memory exhaustion.
   DisallowAllocationFailure disallow_allocation_failure;
 
@@ -2096,7 +2156,7 @@ bool Isolate::Init(Deserializer* des) {
   isolate_addresses_[Isolate::k##CamelName##Address] =          \
       reinterpret_cast<Address>(hacker_name##_address());
   FOR_EACH_ISOLATE_ADDRESS_NAME(ASSIGN_ELEMENT)
-#undef C
+#undef ASSIGN_ELEMENT
 
   string_tracker_ = new StringTracker();
   string_tracker_->isolate_ = this;
@@ -2111,7 +2171,7 @@ bool Isolate::Init(Deserializer* des) {
   global_handles_ = new GlobalHandles(this);
   bootstrapper_ = new Bootstrapper(this);
   handle_scope_implementer_ = new HandleScopeImplementer(this);
-  stub_cache_ = new StubCache(this, runtime_zone());
+  stub_cache_ = new StubCache(this);
   regexp_stack_ = new RegExpStack();
   regexp_stack_->isolate_ = this;
   date_cache_ = new DateCache();
@@ -2125,7 +2185,7 @@ bool Isolate::Init(Deserializer* des) {
 
   // Initialize other runtime facilities
 #if defined(USE_SIMULATOR)
-#if defined(V8_TARGET_ARCH_ARM) || defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_MIPS
   Simulator::Initialize(this);
 #endif
 #endif
@@ -2213,8 +2273,6 @@ bool Isolate::Init(Deserializer* des) {
     LOG(this, LogCompiledFunctions());
   }
 
-  CHECK_EQ(static_cast<int>(OFFSET_OF(Isolate, state_)),
-           Internals::kIsolateStateOffset);
   CHECK_EQ(static_cast<int>(OFFSET_OF(Isolate, embedder_data_)),
            Internals::kIsolateEmbedderDataOffset);
   CHECK_EQ(static_cast<int>(OFFSET_OF(Isolate, heap_.roots_)),
@@ -2256,47 +2314,24 @@ bool Isolate::Init(Deserializer* des) {
 
   if (FLAG_parallel_recompilation) optimizing_compiler_thread_.Start();
 
-  if (FLAG_parallel_marking && FLAG_marking_threads == 0) {
-    FLAG_marking_threads = SystemThreadManager::
-        NumberOfParallelSystemThreads(
-            SystemThreadManager::PARALLEL_MARKING);
-  }
   if (FLAG_marking_threads > 0) {
     marking_thread_ = new MarkingThread*[FLAG_marking_threads];
     for (int i = 0; i < FLAG_marking_threads; i++) {
       marking_thread_[i] = new MarkingThread(this);
       marking_thread_[i]->Start();
     }
-  } else {
-    FLAG_parallel_marking = false;
-  }
-
-  if (FLAG_sweeper_threads == 0) {
-    if (FLAG_concurrent_sweeping) {
-      FLAG_sweeper_threads = SystemThreadManager::
-          NumberOfParallelSystemThreads(
-              SystemThreadManager::CONCURRENT_SWEEPING);
-    } else if (FLAG_parallel_sweeping) {
-      FLAG_sweeper_threads = SystemThreadManager::
-          NumberOfParallelSystemThreads(
-              SystemThreadManager::PARALLEL_SWEEPING);
-    }
   }
+
   if (FLAG_sweeper_threads > 0) {
     sweeper_thread_ = new SweeperThread*[FLAG_sweeper_threads];
     for (int i = 0; i < FLAG_sweeper_threads; i++) {
       sweeper_thread_[i] = new SweeperThread(this);
       sweeper_thread_[i]->Start();
     }
-  } else {
-    FLAG_concurrent_sweeping = false;
-    FLAG_parallel_sweeping = false;
-  }
-  if (FLAG_parallel_recompilation &&
-      SystemThreadManager::NumberOfParallelSystemThreads(
-          SystemThreadManager::PARALLEL_RECOMPILATION) == 0) {
-    FLAG_parallel_recompilation = false;
   }
+
+  initialized_from_snapshot_ = (des != NULL);
+
   return true;
 }
 
index 76a5a41..a0aecd8 100644 (file)
@@ -101,8 +101,8 @@ class Debugger;
 class DebuggerAgent;
 #endif
 
-#if !defined(__arm__) && defined(V8_TARGET_ARCH_ARM) || \
-    !defined(__mips__) && defined(V8_TARGET_ARCH_MIPS)
+#if !defined(__arm__) && V8_TARGET_ARCH_ARM || \
+    !defined(__mips__) && V8_TARGET_ARCH_MIPS
 class Redirection;
 class Simulator;
 #endif
@@ -246,8 +246,9 @@ class ThreadLocalTop BASE_EMBEDDED {
   ThreadId thread_id_;
   MaybeObject* pending_exception_;
   bool has_pending_message_;
+  bool rethrowing_message_;
   Object* pending_message_obj_;
-  Script* pending_message_script_;
+  Object* pending_message_script_;
   int pending_message_start_pos_;
   int pending_message_end_pos_;
   // Use a separate value for scheduled exceptions to preserve the
@@ -263,7 +264,7 @@ class ThreadLocalTop BASE_EMBEDDED {
   Address handler_;   // try-blocks are chained through the stack
 
 #ifdef USE_SIMULATOR
-#if defined(V8_TARGET_ARCH_ARM) || defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_MIPS
   Simulator* simulator_;
 #endif
 #endif  // USE_SIMULATOR
@@ -368,8 +369,6 @@ typedef List<HeapObject*, PreallocatedStorageAllocationPolicy> DebugObjectCache;
   /* AstNode state. */                                                         \
   V(int, ast_node_id, 0)                                                       \
   V(unsigned, ast_node_count, 0)                                               \
-  /* SafeStackFrameIterator activations count. */                              \
-  V(int, safe_stack_iterator_counter, 0)                                       \
   V(bool, observer_delivery_pending, false)                                    \
   V(HStatistics*, hstatistics, NULL)                                           \
   V(HTracer*, htracer, NULL)                                                   \
@@ -393,8 +392,8 @@ class Isolate {
           thread_id_(thread_id),
           stack_limit_(0),
           thread_state_(NULL),
-#if !defined(__arm__) && defined(V8_TARGET_ARCH_ARM) || \
-    !defined(__mips__) && defined(V8_TARGET_ARCH_MIPS)
+#if !defined(__arm__) && V8_TARGET_ARCH_ARM || \
+    !defined(__mips__) && V8_TARGET_ARCH_MIPS
           simulator_(NULL),
 #endif
           next_(NULL),
@@ -406,8 +405,8 @@ class Isolate {
     ThreadState* thread_state() const { return thread_state_; }
     void set_thread_state(ThreadState* value) { thread_state_ = value; }
 
-#if !defined(__arm__) && defined(V8_TARGET_ARCH_ARM) || \
-    !defined(__mips__) && defined(V8_TARGET_ARCH_MIPS)
+#if !defined(__arm__) && V8_TARGET_ARCH_ARM || \
+    !defined(__mips__) && V8_TARGET_ARCH_MIPS
     Simulator* simulator() const { return simulator_; }
     void set_simulator(Simulator* simulator) {
       simulator_ = simulator;
@@ -424,8 +423,8 @@ class Isolate {
     uintptr_t stack_limit_;
     ThreadState* thread_state_;
 
-#if !defined(__arm__) && defined(V8_TARGET_ARCH_ARM) || \
-    !defined(__mips__) && defined(V8_TARGET_ARCH_MIPS)
+#if !defined(__arm__) && V8_TARGET_ARCH_ARM || \
+    !defined(__mips__) && V8_TARGET_ARCH_MIPS
     Simulator* simulator_;
 #endif
 
@@ -549,7 +548,7 @@ class Isolate {
   }
   Context** context_address() { return &thread_local_top_.context_; }
 
-  SaveContext* save_context() {return thread_local_top_.save_context_; }
+  SaveContext* save_context() { return thread_local_top_.save_context_; }
   void set_save_context(SaveContext* save) {
     thread_local_top_.save_context_ = save;
   }
@@ -584,7 +583,7 @@ class Isolate {
   void clear_pending_message() {
     thread_local_top_.has_pending_message_ = false;
     thread_local_top_.pending_message_obj_ = heap_.the_hole_value();
-    thread_local_top_.pending_message_script_ = NULL;
+    thread_local_top_.pending_message_script_ = heap_.the_hole_value();
   }
   v8::TryCatch* try_catch_handler() {
     return thread_local_top_.TryCatchHandler();
@@ -762,6 +761,9 @@ class Isolate {
   // originally.
   Failure* ReThrow(MaybeObject* exception);
   void ScheduleThrow(Object* exception);
+  // Re-set pending message, script and positions reported to the TryCatch
+  // back to the TLS for re-use when rethrowing.
+  void RestorePendingMessageFromTryCatch(v8::TryCatch* handler);
   void ReportPendingMessages();
   // Return pending location if any or unfilled structure.
   MessageLocation GetMessageLocation();
@@ -997,8 +999,8 @@ class Isolate {
   int* code_kind_statistics() { return code_kind_statistics_; }
 #endif
 
-#if defined(V8_TARGET_ARCH_ARM) && !defined(__arm__) || \
-    defined(V8_TARGET_ARCH_MIPS) && !defined(__mips__)
+#if V8_TARGET_ARCH_ARM && !defined(__arm__) || \
+    V8_TARGET_ARCH_MIPS && !defined(__mips__)
   bool simulator_initialized() { return simulator_initialized_; }
   void set_simulator_initialized(bool initialized) {
     simulator_initialized_ = initialized;
@@ -1053,6 +1055,8 @@ class Isolate {
     context_exit_happened_ = context_exit_happened;
   }
 
+  bool initialized_from_snapshot() { return initialized_from_snapshot_; }
+
   double time_millis_since_init() {
     return OS::TimeCurrentMillis() - time_millis_at_init_;
   }
@@ -1107,14 +1111,19 @@ class Isolate {
     callback_table_ = callback_table;
   }
 
+  int id() const { return static_cast<int>(id_); }
+
   HStatistics* GetHStatistics();
   HTracer* GetHTracer();
 
+  FunctionEntryHook function_entry_hook() { return function_entry_hook_; }
+  void set_function_entry_hook(FunctionEntryHook function_entry_hook) {
+    function_entry_hook_ = function_entry_hook;
+  }
+
  private:
   Isolate();
 
-  int id() const { return static_cast<int>(id_); }
-
   friend struct GlobalState;
   friend struct InitializeGlobalState;
 
@@ -1292,11 +1301,14 @@ class Isolate {
   // that a context was recently exited.
   bool context_exit_happened_;
 
+  // True if this isolate was initialized from a snapshot.
+  bool initialized_from_snapshot_;
+
   // Time stamp at initialization.
   double time_millis_at_init_;
 
-#if defined(V8_TARGET_ARCH_ARM) && !defined(__arm__) || \
-    defined(V8_TARGET_ARCH_MIPS) && !defined(__mips__)
+#if V8_TARGET_ARCH_ARM && !defined(__arm__) || \
+    V8_TARGET_ARCH_MIPS && !defined(__mips__)
   bool simulator_initialized_;
   HashMap* simulator_i_cache_;
   Redirection* simulator_redirection_;
@@ -1315,6 +1327,7 @@ class Isolate {
 #endif
   CpuProfiler* cpu_profiler_;
   HeapProfiler* heap_profiler_;
+  FunctionEntryHook function_entry_hook_;
 
 #define GLOBAL_BACKING_STORE(type, name, initialvalue)                         \
   type name##_;
index 152bd63..72c6910 100644 (file)
@@ -43,15 +43,33 @@ namespace internal {
 template <bool seq_ascii>
 class JsonParser BASE_EMBEDDED {
  public:
-  static Handle<Object> Parse(Handle<String> source, Zone* zone) {
-    return JsonParser().ParseJson(source, zone);
+  static Handle<Object> Parse(Handle<String> source) {
+    return JsonParser(source).ParseJson();
   }
 
   static const int kEndOfString = -1;
 
  private:
+  explicit JsonParser(Handle<String> source)
+      : source_(source),
+        source_length_(source->length()),
+        isolate_(source->map()->GetHeap()->isolate()),
+        factory_(isolate_->factory()),
+        zone_(isolate_),
+        object_constructor_(isolate_->native_context()->object_function(),
+                            isolate_),
+        position_(-1) {
+    FlattenString(source_);
+    pretenure_ = (source_length_ >= kPretenureTreshold) ? TENURED : NOT_TENURED;
+
+    // Optimized fast case where we only have ASCII characters.
+    if (seq_ascii) {
+      seq_source_ = Handle<SeqOneByteString>::cast(source_);
+    }
+  }
+
   // Parse a string containing a single JSON value.
-  Handle<Object> ParseJson(Handle<String> source, Zone* zone);
+  Handle<Object> ParseJson();
 
   inline void Advance() {
     position_++;
@@ -179,13 +197,14 @@ class JsonParser BASE_EMBEDDED {
   inline Isolate* isolate() { return isolate_; }
   inline Factory* factory() { return factory_; }
   inline Handle<JSFunction> object_constructor() { return object_constructor_; }
-  inline Zone* zone() const { return zone_; }
 
   static const int kInitialSpecialStringLength = 1024;
   static const int kPretenureTreshold = 100 * 1024;
 
 
  private:
+  Zone* zone() { return &zone_; }
+
   Handle<String> source_;
   int source_length_;
   Handle<SeqOneByteString> seq_source_;
@@ -193,32 +212,14 @@ class JsonParser BASE_EMBEDDED {
   PretenureFlag pretenure_;
   Isolate* isolate_;
   Factory* factory_;
+  Zone zone_;
   Handle<JSFunction> object_constructor_;
   uc32 c0_;
   int position_;
-  Zone* zone_;
 };
 
 template <bool seq_ascii>
-Handle<Object> JsonParser<seq_ascii>::ParseJson(Handle<String> source,
-                                                Zone* zone) {
-  isolate_ = source->map()->GetHeap()->isolate();
-  factory_ = isolate_->factory();
-  object_constructor_ = Handle<JSFunction>(
-      isolate()->native_context()->object_function(), isolate());
-  zone_ = zone;
-  FlattenString(source);
-  source_ = source;
-  source_length_ = source_->length();
-  pretenure_ = (source_length_ >= kPretenureTreshold) ? TENURED : NOT_TENURED;
-
-  // Optimized fast case where we only have ASCII characters.
-  if (seq_ascii) {
-    seq_source_ = Handle<SeqOneByteString>::cast(source_);
-  }
-
-  // Set initial position right before the string.
-  position_ = -1;
+Handle<Object> JsonParser<seq_ascii>::ParseJson() {
   // Advance to the first character (possibly EOS)
   AdvanceSkipWhitespace();
   Handle<Object> result = ParseJsonValue();
@@ -264,7 +265,7 @@ Handle<Object> JsonParser<seq_ascii>::ParseJson(Handle<String> source,
         break;
     }
 
-    MessageLocation location(factory->NewScript(source),
+    MessageLocation location(factory->NewScript(source_),
                              position_,
                              position_ + 1);
     Handle<Object> result = factory->NewSyntaxError(message, array);
@@ -323,7 +324,6 @@ Handle<Object> JsonParser<seq_ascii>::ParseJsonObject() {
   Handle<JSObject> json_object =
       factory()->NewJSObject(object_constructor(), pretenure_);
   Handle<Map> map(json_object->map());
-  ZoneScope zone_scope(zone(), DELETE_ON_EXIT);
   ZoneList<Handle<Object> > properties(8, zone());
   ASSERT_EQ(c0_, '{');
 
@@ -469,7 +469,6 @@ Handle<Object> JsonParser<seq_ascii>::ParseJsonObject() {
 template <bool seq_ascii>
 Handle<Object> JsonParser<seq_ascii>::ParseJsonArray() {
   HandleScope scope(isolate());
-  ZoneScope zone_scope(zone(), DELETE_ON_EXIT);
   ZoneList<Handle<Object> > elements(4, zone());
   ASSERT_EQ(c0_, '[');
 
index 7838c04..5da7398 100644 (file)
@@ -168,10 +168,9 @@ static bool HasFewDifferentCharacters(Handle<String> pattern) {
 
 Handle<Object> RegExpImpl::Compile(Handle<JSRegExp> re,
                                    Handle<String> pattern,
-                                   Handle<String> flag_str,
-                                   Zone* zone) {
-  ZoneScope zone_scope(zone, DELETE_ON_EXIT);
+                                   Handle<String> flag_str) {
   Isolate* isolate = re->GetIsolate();
+  Zone zone(isolate);
   JSRegExp::Flags flags = RegExpFlagsFromString(flag_str);
   CompilationCache* compilation_cache = isolate->compilation_cache();
   Handle<FixedArray> cached = compilation_cache->LookupRegExp(pattern, flags);
@@ -188,7 +187,7 @@ Handle<Object> RegExpImpl::Compile(Handle<JSRegExp> re,
   RegExpCompileData parse_result;
   FlatStringReader reader(isolate, pattern);
   if (!RegExpParser::ParseRegExp(&reader, flags.is_multiline(),
-                                 &parse_result, zone)) {
+                                 &parse_result, &zone)) {
     // Throw an exception if we fail to parse the pattern.
     ThrowRegExpException(re,
                          pattern,
@@ -410,7 +409,7 @@ bool RegExpImpl::CompileIrregexp(Handle<JSRegExp> re,
                                  bool is_ascii) {
   // Compile the RegExp.
   Isolate* isolate = re->GetIsolate();
-  ZoneScope zone_scope(isolate->runtime_zone(), DELETE_ON_EXIT);
+  Zone zone(isolate);
   PostponeInterruptsScope postpone(isolate);
   // If we had a compilation error the last time this is saved at the
   // saved code index.
@@ -441,10 +440,9 @@ bool RegExpImpl::CompileIrregexp(Handle<JSRegExp> re,
   if (!pattern->IsFlat()) FlattenString(pattern);
   RegExpCompileData compile_data;
   FlatStringReader reader(isolate, pattern);
-  Zone* zone = isolate->runtime_zone();
   if (!RegExpParser::ParseRegExp(&reader, flags.is_multiline(),
                                  &compile_data,
-                                 zone)) {
+                                 &zone)) {
     // Throw an exception if we fail to parse the pattern.
     // THIS SHOULD NOT HAPPEN. We already pre-parsed it successfully once.
     ThrowRegExpException(re,
@@ -461,7 +459,7 @@ bool RegExpImpl::CompileIrregexp(Handle<JSRegExp> re,
                             pattern,
                             sample_subject,
                             is_ascii,
-                            zone);
+                            &zone);
   if (result.error_message != NULL) {
     // Unable to compile regexp.
     Handle<String> error_message =
index 181a1b2..528a9a2 100644 (file)
@@ -71,8 +71,7 @@ class RegExpImpl {
   // Returns false if compilation fails.
   static Handle<Object> Compile(Handle<JSRegExp> re,
                                 Handle<String> pattern,
-                                Handle<String> flags,
-                                Zone* zone);
+                                Handle<String> flags);
 
   // See ECMA-262 section 15.10.6.2.
   // This function calls the garbage collector if necessary.
index a6d053a..8cca19b 100644 (file)
@@ -148,14 +148,13 @@ void UseIterator::Advance() {
 void LAllocator::SetLiveRangeAssignedRegister(
     LiveRange* range,
     int reg,
-    RegisterKind register_kind,
-    Zone* zone) {
+    RegisterKind register_kind) {
   if (register_kind == DOUBLE_REGISTERS) {
     assigned_double_registers_->Add(reg);
   } else {
     assigned_registers_->Add(reg);
   }
-  range->set_assigned_register(reg, register_kind, zone);
+  range->set_assigned_register(reg, register_kind, chunk()->zone());
 }
 
 
index 1fd921f..2e2f802 100644 (file)
@@ -541,16 +541,16 @@ LifetimePosition LiveRange::FirstIntersection(LiveRange* other) {
 
 
 LAllocator::LAllocator(int num_values, HGraph* graph)
-    : zone_(graph->zone()),
+    : zone_(graph->isolate()),
       chunk_(NULL),
-      live_in_sets_(graph->blocks()->length(), zone_),
-      live_ranges_(num_values * 2, zone_),
+      live_in_sets_(graph->blocks()->length(), zone()),
+      live_ranges_(num_values * 2, zone()),
       fixed_live_ranges_(NULL),
       fixed_double_live_ranges_(NULL),
-      unhandled_live_ranges_(num_values * 2, zone_),
-      active_live_ranges_(8, zone_),
-      inactive_live_ranges_(8, zone_),
-      reusable_slots_(8, zone_),
+      unhandled_live_ranges_(num_values * 2, zone()),
+      active_live_ranges_(8, zone()),
+      inactive_live_ranges_(8, zone()),
+      reusable_slots_(8, zone()),
       next_virtual_register_(num_values),
       first_artificial_register_(num_values),
       mode_(GENERAL_REGISTERS),
@@ -571,7 +571,7 @@ void LAllocator::InitializeLivenessAnalysis() {
 BitVector* LAllocator::ComputeLiveOut(HBasicBlock* block) {
   // Compute live out for the given block, except not including backward
   // successor edges.
-  BitVector* live_out = new(zone_) BitVector(next_virtual_register_, zone_);
+  BitVector* live_out = new(zone()) BitVector(next_virtual_register_, zone());
 
   // Process all successor blocks.
   for (HSuccessorIterator it(block->end()); !it.Done(); it.Advance()) {
@@ -609,7 +609,7 @@ void LAllocator::AddInitialIntervals(HBasicBlock* block,
   while (!iterator.Done()) {
     int operand_index = iterator.Current();
     LiveRange* range = LiveRangeFor(operand_index);
-    range->AddUseInterval(start, end, zone_);
+    range->AddUseInterval(start, end, zone());
     iterator.Advance();
   }
 }
@@ -640,7 +640,7 @@ LOperand* LAllocator::AllocateFixed(LUnallocated* operand,
     TraceAlloc("Fixed reg is tagged at %d\n", pos);
     LInstruction* instr = InstructionAt(pos);
     if (instr->HasPointerMap()) {
-      instr->pointer_map()->RecordPointer(operand, zone());
+      instr->pointer_map()->RecordPointer(operand, chunk()->zone());
     }
   }
   return operand;
@@ -651,9 +651,9 @@ LiveRange* LAllocator::FixedLiveRangeFor(int index) {
   ASSERT(index < Register::kMaxNumAllocatableRegisters);
   LiveRange* result = fixed_live_ranges_[index];
   if (result == NULL) {
-    result = new(zone_) LiveRange(FixedLiveRangeID(index), zone_);
+    result = new(zone()) LiveRange(FixedLiveRangeID(index), chunk()->zone());
     ASSERT(result->IsFixed());
-    SetLiveRangeAssignedRegister(result, index, GENERAL_REGISTERS, zone_);
+    SetLiveRangeAssignedRegister(result, index, GENERAL_REGISTERS);
     fixed_live_ranges_[index] = result;
   }
   return result;
@@ -664,9 +664,10 @@ LiveRange* LAllocator::FixedDoubleLiveRangeFor(int index) {
   ASSERT(index < DoubleRegister::NumAllocatableRegisters());
   LiveRange* result = fixed_double_live_ranges_[index];
   if (result == NULL) {
-    result = new(zone_) LiveRange(FixedDoubleLiveRangeID(index), zone_);
+    result = new(zone()) LiveRange(FixedDoubleLiveRangeID(index),
+                                   chunk()->zone());
     ASSERT(result->IsFixed());
-    SetLiveRangeAssignedRegister(result, index, DOUBLE_REGISTERS, zone_);
+    SetLiveRangeAssignedRegister(result, index, DOUBLE_REGISTERS);
     fixed_double_live_ranges_[index] = result;
   }
   return result;
@@ -679,7 +680,7 @@ LiveRange* LAllocator::LiveRangeFor(int index) {
   }
   LiveRange* result = live_ranges_[index];
   if (result == NULL) {
-    result = new(zone_) LiveRange(index, zone_);
+    result = new(zone()) LiveRange(index, chunk()->zone());
     live_ranges_[index] = result;
   }
   return result;
@@ -725,15 +726,15 @@ void LAllocator::Define(LifetimePosition position,
 
   if (range->IsEmpty() || range->Start().Value() > position.Value()) {
     // Can happen if there is a definition without use.
-    range->AddUseInterval(position, position.NextInstruction(), zone_);
-    range->AddUsePosition(position.NextInstruction(), NULL, NULL, zone_);
+    range->AddUseInterval(position, position.NextInstruction(), zone());
+    range->AddUsePosition(position.NextInstruction(), NULL, NULL, zone());
   } else {
     range->ShortenTo(position);
   }
 
   if (operand->IsUnallocated()) {
     LUnallocated* unalloc_operand = LUnallocated::cast(operand);
-    range->AddUsePosition(position, unalloc_operand, hint, zone_);
+    range->AddUsePosition(position, unalloc_operand, hint, zone());
   }
 }
 
@@ -746,9 +747,9 @@ void LAllocator::Use(LifetimePosition block_start,
   if (range == NULL) return;
   if (operand->IsUnallocated()) {
     LUnallocated* unalloc_operand = LUnallocated::cast(operand);
-    range->AddUsePosition(position, unalloc_operand, hint, zone_);
+    range->AddUsePosition(position, unalloc_operand, hint, zone());
   }
-  range->AddUseInterval(block_start, position, zone_);
+  range->AddUseInterval(block_start, position, zone());
 }
 
 
@@ -756,7 +757,8 @@ void LAllocator::AddConstraintsGapMove(int index,
                                        LOperand* from,
                                        LOperand* to) {
   LGap* gap = GapAt(index);
-  LParallelMove* move = gap->GetOrCreateParallelMove(LGap::START, zone());
+  LParallelMove* move = gap->GetOrCreateParallelMove(LGap::START,
+                                                     chunk()->zone());
   if (from->IsUnallocated()) {
     const ZoneList<LMoveOperands>* move_operands = move->move_operands();
     for (int i = 0; i < move_operands->length(); ++i) {
@@ -765,13 +767,13 @@ void LAllocator::AddConstraintsGapMove(int index,
       if (cur_to->IsUnallocated()) {
         if (LUnallocated::cast(cur_to)->virtual_register() ==
             LUnallocated::cast(from)->virtual_register()) {
-          move->AddMove(cur.source(), to, zone());
+          move->AddMove(cur.source(), to, chunk()->zone());
           return;
         }
       }
     }
   }
-  move->AddMove(from, to, zone());
+  move->AddMove(from, to, chunk()->zone());
 }
 
 
@@ -811,7 +813,8 @@ void LAllocator::MeetConstraintsBetween(LInstruction* first,
     LiveRange* range = LiveRangeFor(first_output->virtual_register());
     bool assigned = false;
     if (first_output->HasFixedPolicy()) {
-      LUnallocated* output_copy = first_output->CopyUnconstrained(zone());
+      LUnallocated* output_copy = first_output->CopyUnconstrained(
+          chunk()->zone());
       bool is_tagged = HasTaggedValue(first_output->virtual_register());
       AllocateFixed(first_output, gap_index, is_tagged);
 
@@ -832,8 +835,10 @@ void LAllocator::MeetConstraintsBetween(LInstruction* first,
       // Thus it should be inserted to a lifetime position corresponding to
       // the instruction end.
       LGap* gap = GapAt(gap_index);
-      LParallelMove* move = gap->GetOrCreateParallelMove(LGap::BEFORE, zone());
-      move->AddMove(first_output, range->GetSpillOperand(), zone());
+      LParallelMove* move = gap->GetOrCreateParallelMove(LGap::BEFORE,
+                                                         chunk()->zone());
+      move->AddMove(first_output, range->GetSpillOperand(),
+                    chunk()->zone());
     }
   }
 
@@ -842,7 +847,8 @@ void LAllocator::MeetConstraintsBetween(LInstruction* first,
     for (UseIterator it(second); !it.Done(); it.Advance()) {
       LUnallocated* cur_input = LUnallocated::cast(it.Current());
       if (cur_input->HasFixedPolicy()) {
-        LUnallocated* input_copy = cur_input->CopyUnconstrained(zone());
+        LUnallocated* input_copy = cur_input->CopyUnconstrained(
+            chunk()->zone());
         bool is_tagged = HasTaggedValue(cur_input->virtual_register());
         AllocateFixed(cur_input, gap_index + 1, is_tagged);
         AddConstraintsGapMove(gap_index, input_copy, cur_input);
@@ -851,7 +857,8 @@ void LAllocator::MeetConstraintsBetween(LInstruction* first,
         // of the instruction.
         ASSERT(!cur_input->IsUsedAtStart());
 
-        LUnallocated* input_copy = cur_input->CopyUnconstrained(zone());
+        LUnallocated* input_copy = cur_input->CopyUnconstrained(
+            chunk()->zone());
         int vreg = GetVirtualRegister();
         if (!AllocationOk()) return;
         cur_input->set_virtual_register(vreg);
@@ -860,7 +867,7 @@ void LAllocator::MeetConstraintsBetween(LInstruction* first,
             DOUBLE_REGISTERS) {
           double_artificial_registers_.Add(
               cur_input->virtual_register() - first_artificial_register_,
-              zone_);
+              zone());
         }
 
         AddConstraintsGapMove(gap_index, input_copy, cur_input);
@@ -876,7 +883,8 @@ void LAllocator::MeetConstraintsBetween(LInstruction* first,
       int output_vreg = second_output->virtual_register();
       int input_vreg = cur_input->virtual_register();
 
-      LUnallocated* input_copy = cur_input->CopyUnconstrained(zone());
+      LUnallocated* input_copy = cur_input->CopyUnconstrained(
+          chunk()->zone());
       cur_input->set_virtual_register(second_output->virtual_register());
       AddConstraintsGapMove(gap_index, input_copy, cur_input);
 
@@ -884,7 +892,7 @@ void LAllocator::MeetConstraintsBetween(LInstruction* first,
         int index = gap_index + 1;
         LInstruction* instr = InstructionAt(index);
         if (instr->HasPointerMap()) {
-          instr->pointer_map()->RecordPointer(input_copy, zone());
+          instr->pointer_map()->RecordPointer(input_copy, chunk()->zone());
         }
       } else if (!HasTaggedValue(input_vreg) && HasTaggedValue(output_vreg)) {
         // The input is assumed to immediately have a tagged representation,
@@ -913,7 +921,8 @@ void LAllocator::ProcessInstructions(HBasicBlock* block, BitVector* live) {
     if (IsGapAt(index)) {
       // We have a gap at this position.
       LGap* gap = GapAt(index);
-      LParallelMove* move = gap->GetOrCreateParallelMove(LGap::START, zone());
+      LParallelMove* move = gap->GetOrCreateParallelMove(LGap::START,
+                                                         chunk()->zone());
       const ZoneList<LMoveOperands>* move_operands = move->move_operands();
       for (int i = 0; i < move_operands->length(); ++i) {
         LMoveOperands* cur = &move_operands->at(i);
@@ -965,7 +974,7 @@ void LAllocator::ProcessInstructions(HBasicBlock* block, BitVector* live) {
               LiveRange* range = FixedLiveRangeFor(i);
               range->AddUseInterval(curr_position,
                                     curr_position.InstructionEnd(),
-                                    zone_);
+                                    zone());
             }
           }
         }
@@ -977,7 +986,7 @@ void LAllocator::ProcessInstructions(HBasicBlock* block, BitVector* live) {
               LiveRange* range = FixedDoubleLiveRangeFor(i);
               range->AddUseInterval(curr_position,
                                     curr_position.InstructionEnd(),
-                                    zone_);
+                                    zone());
             }
           }
         }
@@ -1025,7 +1034,8 @@ void LAllocator::ResolvePhis(HBasicBlock* block) {
   const ZoneList<HPhi*>* phis = block->phis();
   for (int i = 0; i < phis->length(); ++i) {
     HPhi* phi = phis->at(i);
-    LUnallocated* phi_operand = new(zone_) LUnallocated(LUnallocated::NONE);
+    LUnallocated* phi_operand =
+        new(chunk()->zone()) LUnallocated(LUnallocated::NONE);
     phi_operand->set_virtual_register(phi->id());
     for (int j = 0; j < phi->OperandCount(); ++j) {
       HValue* op = phi->OperandAt(j);
@@ -1035,7 +1045,8 @@ void LAllocator::ResolvePhis(HBasicBlock* block) {
         operand = chunk_->DefineConstantOperand(constant);
       } else {
         ASSERT(!op->EmitAtUses());
-        LUnallocated* unalloc = new(zone_) LUnallocated(LUnallocated::ANY);
+        LUnallocated* unalloc =
+            new(chunk()->zone()) LUnallocated(LUnallocated::ANY);
         unalloc->set_virtual_register(op->id());
         operand = unalloc;
       }
@@ -1058,17 +1069,17 @@ void LAllocator::ResolvePhis(HBasicBlock* block) {
           InstructionAt(cur_block->last_instruction_index());
       if (branch->HasPointerMap()) {
         if (phi->representation().IsTagged() && !phi->type().IsSmi()) {
-          branch->pointer_map()->RecordPointer(phi_operand, zone());
+          branch->pointer_map()->RecordPointer(phi_operand, chunk()->zone());
         } else if (!phi->representation().IsDouble()) {
-          branch->pointer_map()->RecordUntagged(phi_operand, zone());
+          branch->pointer_map()->RecordUntagged(phi_operand, chunk()->zone());
         }
       }
     }
 
     LiveRange* live_range = LiveRangeFor(phi->id());
     LLabel* label = chunk_->GetLabel(phi->block()->block_id());
-    label->GetOrCreateParallelMove(LGap::START, zone())->
-        AddMove(phi_operand, live_range->GetSpillOperand(), zone());
+    label->GetOrCreateParallelMove(LGap::START, chunk()->zone())->
+        AddMove(phi_operand, live_range->GetSpillOperand(), chunk()->zone());
     live_range->SetSpillStartIndex(phi->block()->first_instruction_index());
   }
 }
@@ -1078,12 +1089,11 @@ bool LAllocator::Allocate(LChunk* chunk) {
   ASSERT(chunk_ == NULL);
   chunk_ = static_cast<LPlatformChunk*>(chunk);
   assigned_registers_ =
-      new(zone()) BitVector(Register::NumAllocatableRegisters(), zone());
-  assigned_registers_->Clear();
+      new(chunk->zone()) BitVector(Register::NumAllocatableRegisters(),
+                                   chunk->zone());
   assigned_double_registers_ =
-      new(zone()) BitVector(DoubleRegister::NumAllocatableRegisters(),
-                            zone());
-  assigned_double_registers_->Clear();
+      new(chunk->zone()) BitVector(DoubleRegister::NumAllocatableRegisters(),
+                                   chunk->zone());
   MeetRegisterConstraints();
   if (!AllocationOk()) return false;
   ResolvePhis();
@@ -1093,7 +1103,6 @@ bool LAllocator::Allocate(LChunk* chunk) {
   AllocateDoubleRegisters();
   if (!AllocationOk()) return false;
   PopulatePointerMaps();
-  if (has_osr_entry_) ProcessOsrEntry();
   ConnectRanges();
   ResolveControlFlow();
   return true;
@@ -1101,7 +1110,7 @@ bool LAllocator::Allocate(LChunk* chunk) {
 
 
 void LAllocator::MeetRegisterConstraints() {
-  HPhase phase("L_Register constraints", chunk_);
+  LAllocatorPhase phase("L_Register constraints", this);
   first_artificial_register_ = next_virtual_register_;
   const ZoneList<HBasicBlock*>* blocks = graph_->blocks();
   for (int i = 0; i < blocks->length(); ++i) {
@@ -1113,7 +1122,7 @@ void LAllocator::MeetRegisterConstraints() {
 
 
 void LAllocator::ResolvePhis() {
-  HPhase phase("L_Resolve phis", chunk_);
+  LAllocatorPhase phase("L_Resolve phis", this);
 
   // Process the blocks in reverse order.
   const ZoneList<HBasicBlock*>* blocks = graph_->blocks();
@@ -1149,8 +1158,8 @@ void LAllocator::ResolveControlFlow(LiveRange* range,
   if (cur_cover->IsSpilled()) return;
   ASSERT(pred_cover != NULL && cur_cover != NULL);
   if (pred_cover != cur_cover) {
-    LOperand* pred_op = pred_cover->CreateAssignedOperand(zone_);
-    LOperand* cur_op = cur_cover->CreateAssignedOperand(zone_);
+    LOperand* pred_op = pred_cover->CreateAssignedOperand(chunk()->zone());
+    LOperand* cur_op = cur_cover->CreateAssignedOperand(chunk()->zone());
     if (!pred_op->Equals(cur_op)) {
       LGap* gap = NULL;
       if (block->predecessors()->length() == 1) {
@@ -1170,7 +1179,7 @@ void LAllocator::ResolveControlFlow(LiveRange* range,
         LInstruction* branch = InstructionAt(pred->last_instruction_index());
         if (branch->HasPointerMap()) {
           if (HasTaggedValue(range->id())) {
-            branch->pointer_map()->RecordPointer(cur_op, zone());
+            branch->pointer_map()->RecordPointer(cur_op, chunk()->zone());
           } else if (!cur_op->IsDoubleStackSlot() &&
                      !cur_op->IsDoubleRegister()) {
             branch->pointer_map()->RemovePointer(cur_op);
@@ -1178,7 +1187,8 @@ void LAllocator::ResolveControlFlow(LiveRange* range,
         }
       }
       gap->GetOrCreateParallelMove(
-          LGap::START, zone())->AddMove(pred_op, cur_op, zone());
+          LGap::START, chunk()->zone())->AddMove(pred_op, cur_op,
+                                                 chunk()->zone());
     }
   }
 }
@@ -1189,11 +1199,11 @@ LParallelMove* LAllocator::GetConnectingParallelMove(LifetimePosition pos) {
   if (IsGapAt(index)) {
     LGap* gap = GapAt(index);
     return gap->GetOrCreateParallelMove(
-        pos.IsInstructionStart() ? LGap::START : LGap::END, zone());
+        pos.IsInstructionStart() ? LGap::START : LGap::END, chunk()->zone());
   }
   int gap_pos = pos.IsInstructionStart() ? (index - 1) : (index + 1);
   return GapAt(gap_pos)->GetOrCreateParallelMove(
-      (gap_pos < index) ? LGap::AFTER : LGap::BEFORE, zone());
+      (gap_pos < index) ? LGap::AFTER : LGap::BEFORE, chunk()->zone());
 }
 
 
@@ -1204,7 +1214,7 @@ HBasicBlock* LAllocator::GetBlock(LifetimePosition pos) {
 
 
 void LAllocator::ConnectRanges() {
-  HPhase phase("L_Connect ranges", this);
+  LAllocatorPhase phase("L_Connect ranges", this);
   for (int i = 0; i < live_ranges()->length(); ++i) {
     LiveRange* first_range = live_ranges()->at(i);
     if (first_range == NULL || first_range->parent() != NULL) continue;
@@ -1223,9 +1233,12 @@ void LAllocator::ConnectRanges() {
           }
           if (should_insert) {
             LParallelMove* move = GetConnectingParallelMove(pos);
-            LOperand* prev_operand = first_range->CreateAssignedOperand(zone_);
-            LOperand* cur_operand = second_range->CreateAssignedOperand(zone_);
-            move->AddMove(prev_operand, cur_operand, zone());
+            LOperand* prev_operand = first_range->CreateAssignedOperand(
+                chunk()->zone());
+            LOperand* cur_operand = second_range->CreateAssignedOperand(
+                chunk()->zone());
+            move->AddMove(prev_operand, cur_operand,
+                          chunk()->zone());
           }
         }
       }
@@ -1244,7 +1257,7 @@ bool LAllocator::CanEagerlyResolveControlFlow(HBasicBlock* block) const {
 
 
 void LAllocator::ResolveControlFlow() {
-  HPhase phase("L_Resolve control flow", this);
+  LAllocatorPhase phase("L_Resolve control flow", this);
   const ZoneList<HBasicBlock*>* blocks = graph_->blocks();
   for (int block_id = 1; block_id < blocks->length(); ++block_id) {
     HBasicBlock* block = blocks->at(block_id);
@@ -1265,7 +1278,7 @@ void LAllocator::ResolveControlFlow() {
 
 
 void LAllocator::BuildLiveRanges() {
-  HPhase phase("L_Build live ranges", this);
+  LAllocatorPhase phase("L_Build live ranges", this);
   InitializeLivenessAnalysis();
   // Process the blocks in reverse order.
   const ZoneList<HBasicBlock*>* blocks = graph_->blocks();
@@ -1290,7 +1303,8 @@ void LAllocator::BuildLiveRanges() {
       LOperand* hint = NULL;
       LOperand* phi_operand = NULL;
       LGap* gap = GetLastGap(phi->block()->predecessors()->at(0));
-      LParallelMove* move = gap->GetOrCreateParallelMove(LGap::START, zone());
+      LParallelMove* move = gap->GetOrCreateParallelMove(LGap::START,
+                                                         chunk()->zone());
       for (int j = 0; j < move->move_operands()->length(); ++j) {
         LOperand* to = move->move_operands()->at(j).destination();
         if (to->IsUnallocated() &&
@@ -1327,7 +1341,7 @@ void LAllocator::BuildLiveRanges() {
       while (!iterator.Done()) {
         int operand_index = iterator.Current();
         LiveRange* range = LiveRangeFor(operand_index);
-        range->EnsureInterval(start, end, zone_);
+        range->EnsureInterval(start, end, zone());
         iterator.Advance();
       }
 
@@ -1377,7 +1391,7 @@ bool LAllocator::SafePointsAreInOrder() const {
 
 
 void LAllocator::PopulatePointerMaps() {
-  HPhase phase("L_Populate pointer maps", this);
+  LAllocatorPhase phase("L_Populate pointer maps", this);
   const ZoneList<LPointerMap*>* pointer_maps = chunk_->pointer_maps();
 
   ASSERT(SafePointsAreInOrder());
@@ -1448,47 +1462,16 @@ void LAllocator::PopulatePointerMaps() {
           safe_point >= range->spill_start_index()) {
         TraceAlloc("Pointer for range %d (spilled at %d) at safe point %d\n",
                    range->id(), range->spill_start_index(), safe_point);
-        map->RecordPointer(range->GetSpillOperand(), zone());
+        map->RecordPointer(range->GetSpillOperand(), chunk()->zone());
       }
 
       if (!cur->IsSpilled()) {
         TraceAlloc("Pointer in register for range %d (start at %d) "
                    "at safe point %d\n",
                    cur->id(), cur->Start().Value(), safe_point);
-        LOperand* operand = cur->CreateAssignedOperand(zone_);
+        LOperand* operand = cur->CreateAssignedOperand(chunk()->zone());
         ASSERT(!operand->IsStackSlot());
-        map->RecordPointer(operand, zone());
-      }
-    }
-  }
-}
-
-
-void LAllocator::ProcessOsrEntry() {
-  const ZoneList<LInstruction*>* instrs = chunk_->instructions();
-
-  // Linear search for the OSR entry instruction in the chunk.
-  int index = -1;
-  while (++index < instrs->length() &&
-         !instrs->at(index)->IsOsrEntry()) {
-  }
-  ASSERT(index < instrs->length());
-  LOsrEntry* instruction = LOsrEntry::cast(instrs->at(index));
-
-  LifetimePosition position = LifetimePosition::FromInstructionIndex(index);
-  for (int i = 0; i < live_ranges()->length(); ++i) {
-    LiveRange* range = live_ranges()->at(i);
-    if (range != NULL) {
-      if (range->Covers(position) &&
-          range->HasRegisterAssigned() &&
-          range->TopLevel()->HasAllocatedSpillOperand()) {
-        int reg_index = range->assigned_register();
-        LOperand* spill_operand = range->TopLevel()->GetSpillOperand();
-        if (range->IsDouble()) {
-          instruction->MarkSpilledDoubleRegister(reg_index, spill_operand);
-        } else {
-          instruction->MarkSpilledRegister(reg_index, spill_operand);
-        }
+        map->RecordPointer(operand, chunk()->zone());
       }
     }
   }
@@ -1496,14 +1479,14 @@ void LAllocator::ProcessOsrEntry() {
 
 
 void LAllocator::AllocateGeneralRegisters() {
-  HPhase phase("L_Allocate general registers", this);
+  LAllocatorPhase phase("L_Allocate general registers", this);
   num_registers_ = Register::NumAllocatableRegisters();
   AllocateRegisters();
 }
 
 
 void LAllocator::AllocateDoubleRegisters() {
-  HPhase phase("L_Allocate double registers", this);
+  LAllocatorPhase phase("L_Allocate double registers", this);
   num_registers_ = DoubleRegister::NumAllocatableRegisters();
   mode_ = DOUBLE_REGISTERS;
   AllocateRegisters();
@@ -1829,7 +1812,7 @@ bool LAllocator::TryAllocateFreeReg(LiveRange* current) {
       TraceAlloc("Assigning preferred reg %s to live range %d\n",
                  RegisterName(register_index),
                  current->id());
-      SetLiveRangeAssignedRegister(current, register_index, mode_, zone_);
+      SetLiveRangeAssignedRegister(current, register_index, mode_);
       return true;
     }
   }
@@ -1864,7 +1847,7 @@ bool LAllocator::TryAllocateFreeReg(LiveRange* current) {
   TraceAlloc("Assigning free reg %s to live range %d\n",
              RegisterName(reg),
              current->id());
-  SetLiveRangeAssignedRegister(current, reg, mode_, zone_);
+  SetLiveRangeAssignedRegister(current, reg, mode_);
 
   return true;
 }
@@ -1949,7 +1932,7 @@ void LAllocator::AllocateBlockedReg(LiveRange* current) {
   TraceAlloc("Assigning blocked reg %s to live range %d\n",
              RegisterName(reg),
              current->id());
-  SetLiveRangeAssignedRegister(current, reg, mode_, zone_);
+  SetLiveRangeAssignedRegister(current, reg, mode_);
 
   // This register was not free. Thus we need to find and spill
   // parts of active and inactive live regions that use the same register
@@ -2061,7 +2044,7 @@ LiveRange* LAllocator::SplitRangeAt(LiveRange* range, LifetimePosition pos) {
   int vreg = GetVirtualRegister();
   if (!AllocationOk()) return NULL;
   LiveRange* result = LiveRangeFor(vreg);
-  range->SplitAt(pos, result, zone_);
+  range->SplitAt(pos, result, zone());
   return result;
 }
 
@@ -2169,7 +2152,7 @@ void LAllocator::Spill(LiveRange* range) {
     if (op == NULL) op = chunk_->GetNextSpillSlot(mode_ == DOUBLE_REGISTERS);
     first->SetSpillOperand(op);
   }
-  range->MakeSpilled(zone_);
+  range->MakeSpilled(chunk()->zone());
 }
 
 
@@ -2192,4 +2175,32 @@ void LAllocator::Verify() const {
 #endif
 
 
+LAllocatorPhase::LAllocatorPhase(const char* name, LAllocator* allocator)
+    : CompilationPhase(name, allocator->graph()->info()),
+      allocator_(allocator) {
+  if (FLAG_hydrogen_stats) {
+    allocator_zone_start_allocation_size_ =
+        allocator->zone()->allocation_size();
+  }
+}
+
+
+LAllocatorPhase::~LAllocatorPhase() {
+  if (FLAG_hydrogen_stats) {
+    unsigned size = allocator_->zone()->allocation_size() -
+                    allocator_zone_start_allocation_size_;
+    isolate()->GetHStatistics()->SaveTiming(name(), 0, size);
+  }
+
+  if (ShouldProduceTraceOutput()) {
+    isolate()->GetHTracer()->TraceLithium(name(), allocator_->chunk());
+    isolate()->GetHTracer()->TraceLiveRanges(name(), allocator_);
+  }
+
+#ifdef DEBUG
+  if (allocator_ != NULL) allocator_->Verify();
+#endif
+}
+
+
 } }  // namespace v8::internal
index 552ebdd..e5edd3c 100644 (file)
@@ -434,7 +434,7 @@ class LAllocator BASE_EMBEDDED {
   LPlatformChunk* chunk() const { return chunk_; }
   HGraph* graph() const { return graph_; }
   Isolate* isolate() const { return graph_->isolate(); }
-  Zone* zone() const { return zone_; }
+  Zone* zone() { return &zone_; }
 
   int GetVirtualRegister() {
     if (next_virtual_register_ >= LUnallocated::kMaxVirtualRegisters) {
@@ -474,7 +474,6 @@ class LAllocator BASE_EMBEDDED {
   void ConnectRanges();
   void ResolveControlFlow();
   void PopulatePointerMaps();
-  void ProcessOsrEntry();
   void AllocateRegisters();
   bool CanEagerlyResolveControlFlow(HBasicBlock* block) const;
   inline bool SafePointsAreInOrder() const;
@@ -571,8 +570,7 @@ class LAllocator BASE_EMBEDDED {
 
   inline void SetLiveRangeAssignedRegister(LiveRange* range,
                                            int reg,
-                                           RegisterKind register_kind,
-                                           Zone* zone);
+                                           RegisterKind register_kind);
 
   // Return parallel move that should be used to connect ranges split at the
   // given position.
@@ -599,7 +597,7 @@ class LAllocator BASE_EMBEDDED {
 
   inline LGap* GapAt(int index);
 
-  Zone* zone_;
+  Zone zone_;
 
   LPlatformChunk* chunk_;
 
@@ -646,6 +644,19 @@ class LAllocator BASE_EMBEDDED {
 };
 
 
+class LAllocatorPhase : public CompilationPhase {
+ public:
+  LAllocatorPhase(const char* name, LAllocator* allocator);
+  ~LAllocatorPhase();
+
+ private:
+  LAllocator* allocator_;
+  unsigned allocator_zone_start_allocation_size_;
+
+  DISALLOW_COPY_AND_ASSIGN(LAllocatorPhase);
+};
+
+
 } }  // namespace v8::internal
 
 #endif  // V8_LITHIUM_ALLOCATOR_H_
index 2993c9a..b22fdf6 100644 (file)
@@ -307,7 +307,7 @@ Label* LChunk::GetAssemblyLabel(int block_id) const {
 }
 
 void LChunk::MarkEmptyBlocks() {
-  HPhase phase("L_Mark empty blocks", this);
+  LPhase phase("L_Mark empty blocks", this);
   for (int i = 0; i < graph()->blocks()->length(); ++i) {
     HBasicBlock* block = graph()->blocks()->at(i);
     int first = block->first_instruction_index();
@@ -491,4 +491,11 @@ void LChunk::set_allocated_double_registers(BitVector* allocated_registers) {
 }
 
 
+LPhase::~LPhase() {
+  if (ShouldProduceTraceOutput()) {
+    isolate()->GetHTracer()->TraceLithium(name(), chunk_);
+  }
+}
+
+
 } }  // namespace v8::internal
index 170e5c8..1e0784e 100644 (file)
@@ -527,13 +527,12 @@ class LEnvironment: public ZoneObject {
         deoptimization_index_(Safepoint::kNoDeoptimizationIndex),
         translation_index_(-1),
         ast_id_(ast_id),
+        translation_size_(value_count),
         parameter_count_(parameter_count),
         pc_offset_(-1),
         values_(value_count, zone),
         is_tagged_(value_count, zone),
         is_uint32_(value_count, zone),
-        spilled_registers_(NULL),
-        spilled_double_registers_(NULL),
         outer_(outer),
         entry_(entry),
         zone_(zone) { }
@@ -544,15 +543,13 @@ class LEnvironment: public ZoneObject {
   int deoptimization_index() const { return deoptimization_index_; }
   int translation_index() const { return translation_index_; }
   BailoutId ast_id() const { return ast_id_; }
+  int translation_size() const { return translation_size_; }
   int parameter_count() const { return parameter_count_; }
   int pc_offset() const { return pc_offset_; }
-  LOperand** spilled_registers() const { return spilled_registers_; }
-  LOperand** spilled_double_registers() const {
-    return spilled_double_registers_;
-  }
   const ZoneList<LOperand*>* values() const { return &values_; }
   LEnvironment* outer() const { return outer_; }
   HEnterInlined* entry() { return entry_; }
+  Zone* zone() const { return zone_; }
 
   void AddValue(LOperand* operand,
                 Representation representation,
@@ -560,11 +557,11 @@ class LEnvironment: public ZoneObject {
     values_.Add(operand, zone());
     if (representation.IsSmiOrTagged()) {
       ASSERT(!is_uint32);
-      is_tagged_.Add(values_.length() - 1);
+      is_tagged_.Add(values_.length() - 1, zone());
     }
 
     if (is_uint32) {
-      is_uint32_.Add(values_.length() - 1);
+      is_uint32_.Add(values_.length() - 1, zone());
     }
   }
 
@@ -588,16 +585,8 @@ class LEnvironment: public ZoneObject {
     return deoptimization_index_ != Safepoint::kNoDeoptimizationIndex;
   }
 
-  void SetSpilledRegisters(LOperand** registers,
-                           LOperand** double_registers) {
-    spilled_registers_ = registers;
-    spilled_double_registers_ = double_registers;
-  }
-
   void PrintTo(StringStream* stream);
 
-  Zone* zone() const { return zone_; }
-
  private:
   Handle<JSFunction> closure_;
   FrameType frame_type_;
@@ -605,21 +594,17 @@ class LEnvironment: public ZoneObject {
   int deoptimization_index_;
   int translation_index_;
   BailoutId ast_id_;
+  int translation_size_;
   int parameter_count_;
   int pc_offset_;
-  ZoneList<LOperand*> values_;
-  BitVector is_tagged_;
-  BitVector is_uint32_;
-
-  // Allocation index indexed arrays of spill slot operands for registers
-  // that are also in spill slots at an OSR entry.  NULL for environments
-  // that do not correspond to an OSR entry.
-  LOperand** spilled_registers_;
-  LOperand** spilled_double_registers_;
 
+  // Value array: [parameters] [locals] [expression stack] [de-materialized].
+  //              |>--------- translation_size ---------<|
+  ZoneList<LOperand*> values_;
+  GrowableBitVector is_tagged_;
+  GrowableBitVector is_uint32_;
   LEnvironment* outer_;
   HEnterInlined* entry_;
-
   Zone* zone_;
 };
 
@@ -774,6 +759,20 @@ enum NumberUntagDMode {
 };
 
 
+class LPhase : public CompilationPhase {
+ public:
+  LPhase(const char* name, LChunk* chunk)
+      : CompilationPhase(name, chunk->info()),
+        chunk_(chunk) { }
+  ~LPhase();
+
+ private:
+  LChunk* chunk_;
+
+  DISALLOW_COPY_AND_ASSIGN(LPhase);
+};
+
+
 } }  // namespace v8::internal
 
 #endif  // V8_LITHIUM_H_
index a01e502..3ec2da3 100644 (file)
@@ -1832,11 +1832,11 @@ class MultipleFunctionTarget {
 // Drops all call frame matched by target and all frames above them.
 template<typename TARGET>
 static const char* DropActivationsInActiveThreadImpl(
-    TARGET& target, bool do_drop, Zone* zone) {
+    TARGET& target, bool do_drop) {
   Isolate* isolate = Isolate::Current();
   Debug* debug = isolate->debug();
-  ZoneScope scope(zone, DELETE_ON_EXIT);
-  Vector<StackFrame*> frames = CreateStackMap(isolate, zone);
+  Zone zone(isolate);
+  Vector<StackFrame*> frames = CreateStackMap(isolate, &zone);
 
 
   int top_frame_index = -1;
@@ -1928,12 +1928,11 @@ static const char* DropActivationsInActiveThreadImpl(
 // Fills result array with statuses of functions. Modifies the stack
 // removing all listed function if possible and if do_drop is true.
 static const char* DropActivationsInActiveThread(
-    Handle<JSArray> shared_info_array, Handle<JSArray> result, bool do_drop,
-    Zone* zone) {
+    Handle<JSArray> shared_info_array, Handle<JSArray> result, bool do_drop) {
   MultipleFunctionTarget target(shared_info_array, result);
 
   const char* message =
-      DropActivationsInActiveThreadImpl(target, do_drop, zone);
+      DropActivationsInActiveThreadImpl(target, do_drop);
   if (message) {
     return message;
   }
@@ -1980,7 +1979,7 @@ class InactiveThreadActivationsChecker : public ThreadVisitor {
 
 
 Handle<JSArray> LiveEdit::CheckAndDropActivations(
-    Handle<JSArray> shared_info_array, bool do_drop, Zone* zone) {
+    Handle<JSArray> shared_info_array, bool do_drop) {
   Isolate* isolate = shared_info_array->GetIsolate();
   int len = GetArrayLength(shared_info_array);
 
@@ -2006,7 +2005,7 @@ Handle<JSArray> LiveEdit::CheckAndDropActivations(
 
   // Try to drop activations from the current stack.
   const char* error_message =
-      DropActivationsInActiveThread(shared_info_array, result, do_drop, zone);
+      DropActivationsInActiveThread(shared_info_array, result, do_drop);
   if (error_message != NULL) {
     // Add error message as an array extra element.
     Vector<const char> vector_message(error_message, StrLength(error_message));
@@ -2047,10 +2046,10 @@ class SingleFrameTarget {
 
 // Finds a drops required frame and all frames above.
 // Returns error message or NULL.
-const char* LiveEdit::RestartFrame(JavaScriptFrame* frame, Zone* zone) {
+const char* LiveEdit::RestartFrame(JavaScriptFrame* frame) {
   SingleFrameTarget target(frame);
 
-  const char* result = DropActivationsInActiveThreadImpl(target, true, zone);
+  const char* result = DropActivationsInActiveThreadImpl(target, true);
   if (result != NULL) {
     return result;
   }
index 5b12854..0efbb95 100644 (file)
@@ -121,11 +121,11 @@ class LiveEdit : AllStatic {
   // has restart the lowest found frames and drops all other frames above
   // if possible and if do_drop is true.
   static Handle<JSArray> CheckAndDropActivations(
-      Handle<JSArray> shared_info_array, bool do_drop, Zone* zone);
+      Handle<JSArray> shared_info_array, bool do_drop);
 
   // Restarts the call frame and completely drops all frames above it.
   // Return error message or NULL.
-  static const char* RestartFrame(JavaScriptFrame* frame, Zone* zone);
+  static const char* RestartFrame(JavaScriptFrame* frame);
 
   // A copy of this is in liveedit-debugger.js.
   enum FunctionPatchabilityStatus {
index 8aebbc7..7f653cb 100644 (file)
@@ -29,7 +29,6 @@
 #define V8_LOG_INL_H_
 
 #include "log.h"
-#include "cpu-profiler.h"
 
 namespace v8 {
 namespace internal {
index f033172..a733b52 100644 (file)
@@ -237,6 +237,18 @@ void LogMessageBuilder::Append(const char c) {
 }
 
 
+void LogMessageBuilder::AppendDoubleQuotedString(const char* string) {
+  Append('"');
+  for (const char* p = string; *p != '\0'; p++) {
+    if (*p == '"') {
+      Append('\\');
+    }
+    Append(*p);
+  }
+  Append('"');
+}
+
+
 void LogMessageBuilder::Append(String* str) {
   DisallowHeapAllocation no_gc;  // Ensure string stay valid.
   int length = str->length();
index a1867f2..c499540 100644 (file)
@@ -132,6 +132,9 @@ class LogMessageBuilder BASE_EMBEDDED {
   // Append a character to the log message.
   void Append(const char c);
 
+  // Append double quoted string to the log message.
+  void AppendDoubleQuotedString(const char* string);
+
   // Append a heap string.
   void Append(String* str);
 
index 610a63b..e95b963 100644 (file)
@@ -31,6 +31,7 @@
 
 #include "bootstrapper.h"
 #include "code-stubs.h"
+#include "cpu-profiler.h"
 #include "deoptimizer.h"
 #include "global-handles.h"
 #include "log.h"
@@ -435,7 +436,7 @@ void Logger::IssueCodeAddedEvent(Code* code,
   event.code_len = code->instruction_size();
   Handle<Script> script_handle =
       script != NULL ? Handle<Script>(script) : Handle<Script>();
-  event.script = v8::Handle<v8::Script>(ToApi<v8::Script>(script_handle));
+  event.script = ToApiHandle<v8::Script>(script_handle);
   event.name.str = name;
   event.name.len = name_len;
 
@@ -637,6 +638,16 @@ void Logger::SharedLibraryEvent(const wchar_t* library_path,
 }
 
 
+void Logger::CodeDeoptEvent(Code* code) {
+  if (!log_->IsEnabled()) return;
+  ASSERT(FLAG_log_internal_timer_events);
+  LogMessageBuilder msg(this);
+  int since_epoch = static_cast<int>(OS::Ticks() - epoch_);
+  msg.Append("code-deopt,%ld,%d\n", since_epoch, code->CodeSize());
+  msg.WriteToLogFile();
+}
+
+
 void Logger::TimerEvent(StartEnd se, const char* name) {
   if (!log_->IsEnabled()) return;
   ASSERT(FLAG_log_internal_timer_events);
@@ -862,7 +873,7 @@ void Logger::CallbackEventInternal(const char* prefix, Name* name,
                                    Address entry_point) {
   if (!log_->IsEnabled() || !FLAG_log_code) return;
   LogMessageBuilder msg(this);
-  msg.Append("%s,%s,-3,",
+  msg.Append("%s,%s,-2,",
              kLogEventsNames[CODE_CREATION_EVENT],
              kLogEventsNames[CALLBACK_TAG]);
   msg.AppendAddress(entry_point);
@@ -903,18 +914,39 @@ void Logger::SetterCallbackEvent(Name* name, Address entry_point) {
 }
 
 
-void Logger::CodeCreateEvent(LogEventsAndTags tag,
-                             Code* code,
-                             const char* comment) {
-  if (!is_logging_code_events()) return;
-  if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) {
+void Logger::AppendName(Name* name) {
+  if (name->IsString()) {
+    name_buffer_->AppendString(String::cast(name));
+  } else {
+    Symbol* symbol = Symbol::cast(name);
+    name_buffer_->AppendBytes("symbol(");
+    if (!symbol->name()->IsUndefined()) {
+      name_buffer_->AppendBytes("\"");
+      name_buffer_->AppendString(String::cast(symbol->name()));
+      name_buffer_->AppendBytes("\" ");
+    }
+    name_buffer_->AppendBytes("hash ");
+    name_buffer_->AppendHex(symbol->Hash());
+    name_buffer_->AppendByte(')');
+  }
+}
+
+
+void Logger::InitNameBuffer(LogEventsAndTags tag) {
     name_buffer_->Reset();
     name_buffer_->AppendBytes(kLogEventsNames[tag]);
     name_buffer_->AppendByte(':');
-    name_buffer_->AppendBytes(comment);
-  }
+}
+
+
+void Logger::LogRecordedBuffer(Code* code, SharedFunctionInfo* shared) {
   if (code_event_handler_ != NULL) {
-    IssueCodeAddedEvent(code, NULL, name_buffer_->get(), name_buffer_->size());
+    Script* script = shared && shared->script()->IsScript() ?
+        Script::cast(shared->script()) : NULL;
+    IssueCodeAddedEvent(code,
+                        script,
+                        name_buffer_->get(),
+                        name_buffer_->size());
   }
   if (!log_->IsEnabled()) return;
   if (FLAG_ll_prof) {
@@ -923,21 +955,49 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
   if (Serializer::enabled()) {
     RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
   }
-  if (!FLAG_log_code) return;
-  LogMessageBuilder msg(this);
-  msg.Append("%s,%s,%d,",
-             kLogEventsNames[CODE_CREATION_EVENT],
-             kLogEventsNames[tag],
-             code->kind());
-  msg.AppendAddress(code->address());
-  msg.Append(",%d,\"", code->ExecutableSize());
-  for (const char* p = comment; *p != '\0'; p++) {
-    if (*p == '"') {
-      msg.Append('\\');
+}
+
+
+void Logger::AppendCodeCreateHeader(LogMessageBuilder* msg,
+                                    LogEventsAndTags tag,
+                                    Code* code) {
+  ASSERT(msg);
+  msg->Append("%s,%s,%d,",
+              kLogEventsNames[CODE_CREATION_EVENT],
+              kLogEventsNames[tag],
+              code->kind());
+  msg->AppendAddress(code->address());
+  msg->Append(",%d,", code->ExecutableSize());
+}
+
+
+void Logger::AppendSymbolName(LogMessageBuilder* msg,
+                              Symbol* symbol) {
+    ASSERT(symbol);
+    msg->Append("symbol(");
+    if (!symbol->name()->IsUndefined()) {
+      msg->Append("\"");
+      msg->AppendDetailed(String::cast(symbol->name()), false);
+      msg->Append("\" ");
     }
-    msg.Append(*p);
+    msg->Append("hash %x)", symbol->Hash());
+}
+
+
+void Logger::CodeCreateEvent(LogEventsAndTags tag,
+                             Code* code,
+                             const char* comment) {
+  if (!is_logging_code_events()) return;
+  if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) {
+    InitNameBuffer(tag);
+    name_buffer_->AppendBytes(comment);
+    LogRecordedBuffer(code, NULL);
   }
-  msg.Append('"');
+
+  if (!FLAG_log_code || !log_->IsEnabled()) return;
+  LogMessageBuilder msg(this);
+  AppendCodeCreateHeader(&msg, tag, code);
+  msg.AppendDoubleQuotedString(comment);
   msg.Append('\n');
   msg.WriteToLogFile();
 }
@@ -948,55 +1008,20 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
                              Name* name) {
   if (!is_logging_code_events()) return;
   if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) {
-    name_buffer_->Reset();
-    name_buffer_->AppendBytes(kLogEventsNames[tag]);
-    name_buffer_->AppendByte(':');
-    if (name->IsString()) {
-      name_buffer_->AppendString(String::cast(name));
-    } else {
-      Symbol* symbol = Symbol::cast(name);
-      name_buffer_->AppendBytes("symbol(");
-      if (!symbol->name()->IsUndefined()) {
-        name_buffer_->AppendBytes("\"");
-        name_buffer_->AppendString(String::cast(symbol->name()));
-        name_buffer_->AppendBytes("\" ");
-      }
-      name_buffer_->AppendBytes("hash ");
-      name_buffer_->AppendHex(symbol->Hash());
-      name_buffer_->AppendByte(')');
-    }
-  }
-  if (code_event_handler_ != NULL) {
-    IssueCodeAddedEvent(code, NULL, name_buffer_->get(), name_buffer_->size());
-  }
-  if (!log_->IsEnabled()) return;
-  if (FLAG_ll_prof) {
-    LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
-  }
-  if (Serializer::enabled()) {
-    RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
+    InitNameBuffer(tag);
+    AppendName(name);
+    LogRecordedBuffer(code, NULL);
   }
-  if (!FLAG_log_code) return;
+
+  if (!FLAG_log_code || !log_->IsEnabled()) return;
   LogMessageBuilder msg(this);
-  msg.Append("%s,%s,%d,",
-             kLogEventsNames[CODE_CREATION_EVENT],
-             kLogEventsNames[tag],
-             code->kind());
-  msg.AppendAddress(code->address());
-  msg.Append(",%d,", code->ExecutableSize());
+  AppendCodeCreateHeader(&msg, tag, code);
   if (name->IsString()) {
     msg.Append('"');
     msg.AppendDetailed(String::cast(name), false);
     msg.Append('"');
   } else {
-    Symbol* symbol = Symbol::cast(name);
-    msg.Append("symbol(");
-    if (!symbol->name()->IsUndefined()) {
-      msg.Append("\"");
-      msg.AppendDetailed(String::cast(symbol->name()), false);
-      msg.Append("\" ");
-    }
-    msg.Append("hash %x)", symbol->Hash());
+    AppendSymbolName(&msg, Symbol::cast(name));
   }
   msg.Append('\n');
   msg.WriteToLogFile();
@@ -1020,65 +1045,25 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
                              Name* name) {
   if (!is_logging_code_events()) return;
   if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) {
-    name_buffer_->Reset();
-    name_buffer_->AppendBytes(kLogEventsNames[tag]);
-    name_buffer_->AppendByte(':');
+    InitNameBuffer(tag);
     name_buffer_->AppendBytes(ComputeMarker(code));
-    if (name->IsString()) {
-      name_buffer_->AppendString(String::cast(name));
-    } else {
-      Symbol* symbol = Symbol::cast(name);
-      name_buffer_->AppendBytes("symbol(");
-      if (!symbol->name()->IsUndefined()) {
-        name_buffer_->AppendBytes("\"");
-        name_buffer_->AppendString(String::cast(symbol->name()));
-        name_buffer_->AppendBytes("\" ");
-      }
-      name_buffer_->AppendBytes("hash ");
-      name_buffer_->AppendHex(symbol->Hash());
-      name_buffer_->AppendByte(')');
-    }
-  }
-  if (code_event_handler_ != NULL) {
-    Script* script =
-        shared->script()->IsScript() ? Script::cast(shared->script()) : NULL;
-    IssueCodeAddedEvent(code,
-                        script,
-                        name_buffer_->get(),
-                        name_buffer_->size());
-  }
-  if (!log_->IsEnabled()) return;
-  if (FLAG_ll_prof) {
-    LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
-  }
-  if (Serializer::enabled()) {
-    RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
+    AppendName(name);
+    LogRecordedBuffer(code, shared);
   }
-  if (!FLAG_log_code) return;
-  if (code == Isolate::Current()->builtins()->builtin(
+
+  if (!FLAG_log_code || !log_->IsEnabled()) return;
+  if (code == isolate_->builtins()->builtin(
       Builtins::kLazyCompile))
     return;
 
   LogMessageBuilder msg(this);
-  msg.Append("%s,%s,%d,",
-             kLogEventsNames[CODE_CREATION_EVENT],
-             kLogEventsNames[tag],
-             code->kind());
-  msg.AppendAddress(code->address());
-  msg.Append(",%d,", code->ExecutableSize());
+  AppendCodeCreateHeader(&msg, tag, code);
   if (name->IsString()) {
     SmartArrayPointer<char> str =
         String::cast(name)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
     msg.Append("\"%s\"", *str);
   } else {
-    Symbol* symbol = Symbol::cast(name);
-    msg.Append("symbol(");
-    if (!symbol->name()->IsUndefined()) {
-      msg.Append("\"");
-      msg.AppendDetailed(String::cast(symbol->name()), false);
-      msg.Append("\" ");
-    }
-    msg.Append("hash %x)", symbol->Hash());
+    AppendSymbolName(&msg, Symbol::cast(name));
   }
   msg.Append(',');
   msg.AppendAddress(shared->address());
@@ -1098,9 +1083,7 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
                              Name* source, int line) {
   if (!is_logging_code_events()) return;
   if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) {
-    name_buffer_->Reset();
-    name_buffer_->AppendBytes(kLogEventsNames[tag]);
-    name_buffer_->AppendByte(':');
+    InitNameBuffer(tag);
     name_buffer_->AppendBytes(ComputeMarker(code));
     name_buffer_->AppendString(shared->DebugName());
     name_buffer_->AppendByte(' ');
@@ -1113,45 +1096,21 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
     }
     name_buffer_->AppendByte(':');
     name_buffer_->AppendInt(line);
+    LogRecordedBuffer(code, shared);
   }
-  if (code_event_handler_ != NULL) {
-    Script* script =
-        shared->script()->IsScript() ? Script::cast(shared->script()) : NULL;
-    IssueCodeAddedEvent(code,
-                        script,
-                        name_buffer_->get(),
-                        name_buffer_->size());
-  }
-  if (!log_->IsEnabled()) return;
-  if (FLAG_ll_prof) {
-    LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
-  }
-  if (Serializer::enabled()) {
-    RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
-  }
-  if (!FLAG_log_code) return;
+
+  if (!FLAG_log_code || !log_->IsEnabled()) return;
   LogMessageBuilder msg(this);
+  AppendCodeCreateHeader(&msg, tag, code);
   SmartArrayPointer<char> name =
       shared->DebugName()->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
-  msg.Append("%s,%s,%d,",
-             kLogEventsNames[CODE_CREATION_EVENT],
-             kLogEventsNames[tag],
-             code->kind());
-  msg.AppendAddress(code->address());
-  msg.Append(",%d,\"%s ", code->ExecutableSize(), *name);
+  msg.Append("\"%s ", *name);
   if (source->IsString()) {
     SmartArrayPointer<char> sourcestr =
        String::cast(source)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
     msg.Append("%s", *sourcestr);
   } else {
-    Symbol* symbol = Symbol::cast(source);
-    msg.Append("symbol(");
-    if (!symbol->name()->IsUndefined()) {
-      msg.Append("\"");
-      msg.AppendDetailed(String::cast(symbol->name()), false);
-      msg.Append("\" ");
-    }
-    msg.Append("hash %x)", symbol->Hash());
+    AppendSymbolName(&msg, Symbol::cast(source));
   }
   msg.Append(":%d\",", line);
   msg.AppendAddress(shared->address());
@@ -1164,29 +1123,15 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
 void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, int args_count) {
   if (!is_logging_code_events()) return;
   if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) {
-    name_buffer_->Reset();
-    name_buffer_->AppendBytes(kLogEventsNames[tag]);
-    name_buffer_->AppendByte(':');
+    InitNameBuffer(tag);
     name_buffer_->AppendInt(args_count);
+    LogRecordedBuffer(code, NULL);
   }
-  if (code_event_handler_ != NULL) {
-    IssueCodeAddedEvent(code, NULL, name_buffer_->get(), name_buffer_->size());
-  }
-  if (!log_->IsEnabled()) return;
-  if (FLAG_ll_prof) {
-    LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
-  }
-  if (Serializer::enabled()) {
-    RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
-  }
-  if (!FLAG_log_code) return;
+
+  if (!FLAG_log_code || !log_->IsEnabled()) return;
   LogMessageBuilder msg(this);
-  msg.Append("%s,%s,%d,",
-             kLogEventsNames[CODE_CREATION_EVENT],
-             kLogEventsNames[tag],
-             code->kind());
-  msg.AppendAddress(code->address());
-  msg.Append(",%d,\"args_count: %d\"", code->ExecutableSize(), args_count);
+  AppendCodeCreateHeader(&msg, tag, code);
+  msg.Append("\"args_count: %d\"", args_count);
   msg.Append('\n');
   msg.WriteToLogFile();
 }
@@ -1202,30 +1147,17 @@ void Logger::CodeMovingGCEvent() {
 void Logger::RegExpCodeCreateEvent(Code* code, String* source) {
   if (!is_logging_code_events()) return;
   if (FLAG_ll_prof || Serializer::enabled() || code_event_handler_ != NULL) {
-    name_buffer_->Reset();
-    name_buffer_->AppendBytes(kLogEventsNames[REG_EXP_TAG]);
-    name_buffer_->AppendByte(':');
+    InitNameBuffer(REG_EXP_TAG);
     name_buffer_->AppendString(source);
+    LogRecordedBuffer(code, NULL);
   }
-  if (code_event_handler_ != NULL) {
-    IssueCodeAddedEvent(code, NULL, name_buffer_->get(), name_buffer_->size());
-  }
-  if (!log_->IsEnabled()) return;
-  if (FLAG_ll_prof) {
-    LowLevelCodeCreateEvent(code, name_buffer_->get(), name_buffer_->size());
-  }
-  if (Serializer::enabled()) {
-    RegisterSnapshotCodeName(code, name_buffer_->get(), name_buffer_->size());
-  }
-  if (!FLAG_log_code) return;
+
+  if (!FLAG_log_code || !log_->IsEnabled()) return;
   LogMessageBuilder msg(this);
-  msg.Append("%s,%s,-2,",
-             kLogEventsNames[CODE_CREATION_EVENT],
-             kLogEventsNames[REG_EXP_TAG]);
-  msg.AppendAddress(code->address());
-  msg.Append(",%d,\"", code->ExecutableSize());
+  AppendCodeCreateHeader(&msg, REG_EXP_TAG, code);
+  msg.Append('"');
   msg.AppendDetailed(source, false);
-  msg.Append('\"');
+  msg.Append('"');
   msg.Append('\n');
   msg.WriteToLogFile();
 }
@@ -1294,12 +1226,9 @@ void Logger::SnapshotPositionEvent(Address addr, int pos) {
     const char* code_name = address_to_name_map_->Lookup(addr);
     if (code_name == NULL) return;  // Not a code object.
     LogMessageBuilder msg(this);
-    msg.Append("%s,%d,\"", kLogEventsNames[SNAPSHOT_CODE_NAME_EVENT], pos);
-    for (const char* p = code_name; *p != '\0'; ++p) {
-      if (*p == '"') msg.Append('\\');
-      msg.Append(*p);
-    }
-    msg.Append("\"\n");
+    msg.Append("%s,%d,", kLogEventsNames[SNAPSHOT_CODE_NAME_EVENT], pos);
+    msg.AppendDoubleQuotedString(code_name);
+    msg.Append("\n");
     msg.WriteToLogFile();
   }
   if (!FLAG_log_snapshot_positions) return;
@@ -1371,14 +1300,7 @@ void Logger::SuspectReadEvent(Name* name, Object* obj) {
     msg.Append(String::cast(name));
     msg.Append('"');
   } else {
-    Symbol* symbol = Symbol::cast(name);
-    msg.Append("symbol(");
-    if (!symbol->name()->IsUndefined()) {
-      msg.Append("\"");
-      msg.AppendDetailed(String::cast(symbol->name()), false);
-      msg.Append("\" ");
-    }
-    msg.Append("hash %x)", symbol->Hash());
+    AppendSymbolName(&msg, Symbol::cast(name));
   }
   msg.Append('\n');
   msg.WriteToLogFile();
@@ -1442,8 +1364,6 @@ void Logger::TickEvent(TickSample* sample, bool overflow) {
   LogMessageBuilder msg(this);
   msg.Append("%s,", kLogEventsNames[TICK_EVENT]);
   msg.AppendAddress(sample->pc);
-  msg.Append(',');
-  msg.AppendAddress(sample->sp);
   msg.Append(",%ld", static_cast<int>(OS::Ticks() - epoch_));
   if (sample->has_external_callback) {
     msg.Append(",1,");
@@ -1600,6 +1520,10 @@ void Logger::LogCodeObject(Object* object) {
         description = "A stub from the snapshot";
       tag = Logger::STUB_TAG;
       break;
+    case Code::REGEXP:
+      description = "Regular expression code";
+      tag = Logger::REG_EXP_TAG;
+      break;
     case Code::BUILTIN:
       description = "A builtin from the snapshot";
       tag = Logger::BUILTIN_TAG;
@@ -1628,6 +1552,8 @@ void Logger::LogCodeObject(Object* object) {
       description = "A keyed call IC from the snapshot";
       tag = Logger::KEYED_CALL_IC_TAG;
       break;
+    case Code::NUMBER_OF_KINDS:
+      break;
   }
   PROFILE(isolate_, CodeCreateEvent(tag, code_object, description));
 }
@@ -1781,7 +1707,7 @@ void Logger::LogCompiledFunctions() {
   // During iteration, there can be heap allocation due to
   // GetScriptLineNumber call.
   for (int i = 0; i < compiled_funcs_count; ++i) {
-    if (*code_objects[i] == Isolate::Current()->builtins()->builtin(
+    if (*code_objects[i] == isolate_->builtins()->builtin(
         Builtins::kLazyCompile))
       continue;
     LogExistingFunction(sfis[i], code_objects[i]);
@@ -1861,7 +1787,7 @@ void Logger::SetCodeEventHandler(uint32_t options,
   code_event_handler_ = event_handler;
 
   if (code_event_handler_ != NULL && (options & kJitCodeEventEnumExisting)) {
-    HandleScope scope(Isolate::Current());
+    HandleScope scope(isolate_);
     LogCodeObjects();
     LogCompiledFunctions();
   }
index 531f1de..07ecd0e 100644 (file)
@@ -293,6 +293,8 @@ class Logger {
   // ==== Events logged by --log-timer-events. ====
   enum StartEnd { START, END };
 
+  void CodeDeoptEvent(Code* code);
+
   void TimerEvent(StartEnd se, const char* name);
 
   static void EnterExternal(Isolate* isolate);
@@ -413,6 +415,21 @@ class Logger {
   // Used for logging stubs found in the snapshot.
   void LogCodeObject(Object* code_object);
 
+  // Helper method. It resets name_buffer_ and add tag name into it.
+  void InitNameBuffer(LogEventsAndTags tag);
+
+  // Helper method. It push recorded buffer into different handlers.
+  void LogRecordedBuffer(Code*, SharedFunctionInfo*);
+
+  // Helper method. It dumps name into name_buffer_.
+  void AppendName(Name* name);
+
+  // Appends standard code header.
+  void AppendCodeCreateHeader(LogMessageBuilder*, LogEventsAndTags, Code*);
+
+  // Appends symbol for the name.
+  void AppendSymbolName(LogMessageBuilder*, Symbol*);
+
   // Emits general information about generated code.
   void LogCodeInfo();
 
index 643d6c7..e442b44 100644 (file)
@@ -117,6 +117,7 @@ macro IS_SCRIPT(arg)            = (%_ClassOf(arg) === 'Script');
 macro IS_ARGUMENTS(arg)         = (%_ClassOf(arg) === 'Arguments');
 macro IS_GLOBAL(arg)            = (%_ClassOf(arg) === 'global');
 macro IS_ARRAYBUFFER(arg)       = (%_ClassOf(arg) === 'ArrayBuffer');
+macro IS_DATAVIEW(arg)          = (%_ClassOf(arg) === 'DataView');
 macro IS_GENERATOR(arg)         = (%_ClassOf(arg) === 'Generator');
 macro IS_UNDETECTABLE(arg)      = (%_IsUndetectableObject(arg));
 macro FLOOR(arg)                = $floor(arg);
@@ -144,7 +145,6 @@ const kBoundArgumentsStartIndex = 2;
 macro NUMBER_IS_NAN(arg) = (!%_IsSmi(%IS_VAR(arg)) && !(arg == arg));
 macro NUMBER_IS_FINITE(arg) = (%_IsSmi(%IS_VAR(arg)) || ((arg == arg) && (arg != 1/0) && (arg != -1/0)));
 macro TO_INTEGER(arg) = (%_IsSmi(%IS_VAR(arg)) ? arg : %NumberToInteger(ToNumber(arg)));
-macro TO_POSITIVE_INTEGER(arg) = (%_IsSmi(%IS_VAR(arg)) ? (arg > 0 ? arg : 0) : %NumberToPositiveInteger(ToNumber(arg)));
 macro TO_INTEGER_MAP_MINUS_ZERO(arg) = (%_IsSmi(%IS_VAR(arg)) ? arg : %NumberToIntegerMapMinusZero(ToNumber(arg)));
 macro TO_INT32(arg) = (%_IsSmi(%IS_VAR(arg)) ? arg : (arg >> 0));
 macro TO_UINT32(arg) = (arg >>> 0);
index dc2db4b..6389685 100644 (file)
@@ -29,6 +29,7 @@
 
 #include "code-stubs.h"
 #include "compilation-cache.h"
+#include "cpu-profiler.h"
 #include "deoptimizer.h"
 #include "execution.h"
 #include "gdb-jit.h"
@@ -148,6 +149,7 @@ static void VerifyMarking(Heap* heap) {
   VerifyMarking(heap->old_data_space());
   VerifyMarking(heap->code_space());
   VerifyMarking(heap->cell_space());
+  VerifyMarking(heap->property_cell_space());
   VerifyMarking(heap->map_space());
   VerifyMarking(heap->new_space());
 
@@ -229,6 +231,7 @@ static void VerifyEvacuation(Heap* heap) {
   VerifyEvacuation(heap->old_data_space());
   VerifyEvacuation(heap->code_space());
   VerifyEvacuation(heap->cell_space());
+  VerifyEvacuation(heap->property_cell_space());
   VerifyEvacuation(heap->map_space());
   VerifyEvacuation(heap->new_space());
 
@@ -283,7 +286,7 @@ class VerifyNativeContextSeparationVisitor: public ObjectVisitor {
               array->set_length(length);
             }
             break;
-          case JS_GLOBAL_PROPERTY_CELL_TYPE:
+          case CELL_TYPE:
           case JS_PROXY_TYPE:
           case JS_VALUE_TYPE:
           case TYPE_FEEDBACK_INFO_TYPE:
@@ -375,6 +378,7 @@ bool MarkCompactCollector::StartCompaction(CompactionMode mode) {
     if (FLAG_trace_fragmentation) {
       TraceFragmentation(heap()->map_space());
       TraceFragmentation(heap()->cell_space());
+      TraceFragmentation(heap()->property_cell_space());
     }
 
     heap()->old_pointer_space()->EvictEvacuationCandidatesFromFreeLists();
@@ -468,6 +472,7 @@ void MarkCompactCollector::VerifyMarkbitsAreClean() {
   VerifyMarkbitsAreClean(heap_->old_data_space());
   VerifyMarkbitsAreClean(heap_->code_space());
   VerifyMarkbitsAreClean(heap_->cell_space());
+  VerifyMarkbitsAreClean(heap_->property_cell_space());
   VerifyMarkbitsAreClean(heap_->map_space());
   VerifyMarkbitsAreClean(heap_->new_space());
 
@@ -529,6 +534,7 @@ void MarkCompactCollector::ClearMarkbits() {
   ClearMarkbitsInPagedSpace(heap_->old_pointer_space());
   ClearMarkbitsInPagedSpace(heap_->old_data_space());
   ClearMarkbitsInPagedSpace(heap_->cell_space());
+  ClearMarkbitsInPagedSpace(heap_->property_cell_space());
   ClearMarkbitsInNewSpace(heap_->new_space());
 
   LargeObjectIterator it(heap_->lo_space());
@@ -648,6 +654,8 @@ const char* AllocationSpaceName(AllocationSpace space) {
     case CODE_SPACE: return "CODE_SPACE";
     case MAP_SPACE: return "MAP_SPACE";
     case CELL_SPACE: return "CELL_SPACE";
+    case PROPERTY_CELL_SPACE:
+      return "PROPERTY_CELL_SPACE";
     case LO_SPACE: return "LO_SPACE";
     default:
       UNREACHABLE();
@@ -1003,8 +1011,9 @@ void CodeFlusher::ProcessJSFunctionCandidates() {
     MarkBit code_mark = Marking::MarkBitFrom(code);
     if (!code_mark.Get()) {
       if (FLAG_trace_code_flushing && shared->is_compiled()) {
-        SmartArrayPointer<char> name = shared->DebugName()->ToCString();
-        PrintF("[code-flushing clears: %s]\n", *name);
+        PrintF("[code-flushing clears: ");
+        shared->ShortPrint();
+        PrintF(" - age: %d]\n", code->GetAge());
       }
       shared->set_code(lazy_compile);
       candidate->set_code(lazy_compile);
@@ -1044,8 +1053,9 @@ void CodeFlusher::ProcessSharedFunctionInfoCandidates() {
     MarkBit code_mark = Marking::MarkBitFrom(code);
     if (!code_mark.Get()) {
       if (FLAG_trace_code_flushing && candidate->is_compiled()) {
-        SmartArrayPointer<char> name = candidate->DebugName()->ToCString();
-        PrintF("[code-flushing clears: %s]\n", *name);
+        PrintF("[code-flushing clears: ");
+        candidate->ShortPrint();
+        PrintF(" - age: %d]\n", code->GetAge());
       }
       candidate->set_code(lazy_compile);
     }
@@ -1086,7 +1096,7 @@ void CodeFlusher::ProcessOptimizedCodeMaps() {
         continue;
       }
 
-      // Update and record the context slot in the optimizled code map.
+      // Update and record the context slot in the optimized code map.
       Object** context_slot = HeapObject::RawField(code_map,
           FixedArray::OffsetOfElementAt(new_length));
       code_map->set(new_length++, code_map->get(i + kContextOffset));
@@ -1131,8 +1141,9 @@ void CodeFlusher::EvictCandidate(SharedFunctionInfo* shared_info) {
   isolate_->heap()->incremental_marking()->RecordWrites(shared_info);
 
   if (FLAG_trace_code_flushing) {
-    SmartArrayPointer<char> name = shared_info->DebugName()->ToCString();
-    PrintF("[code-flushing abandons function-info: %s]\n", *name);
+    PrintF("[code-flushing abandons function-info: ");
+    shared_info->ShortPrint();
+    PrintF("]\n");
   }
 
   SharedFunctionInfo* candidate = shared_function_info_candidates_head_;
@@ -1167,8 +1178,9 @@ void CodeFlusher::EvictCandidate(JSFunction* function) {
   isolate_->heap()->incremental_marking()->RecordWrites(function->shared());
 
   if (FLAG_trace_code_flushing) {
-    SmartArrayPointer<char> name = function->shared()->DebugName()->ToCString();
-    PrintF("[code-flushing abandons closure: %s]\n", *name);
+    PrintF("[code-flushing abandons closure: ");
+    function->shared()->ShortPrint();
+    PrintF("]\n");
   }
 
   JSFunction* candidate = jsfunction_candidates_head_;
@@ -1202,8 +1214,9 @@ void CodeFlusher::EvictOptimizedCodeMap(SharedFunctionInfo* code_map_holder) {
   isolate_->heap()->incremental_marking()->RecordWrites(code_map_holder);
 
   if (FLAG_trace_code_flushing) {
-    SmartArrayPointer<char> name = code_map_holder->DebugName()->ToCString();
-    PrintF("[code-flushing abandons code-map: %s]\n", *name);
+    PrintF("[code-flushing abandons code-map: ");
+    code_map_holder->ShortPrint();
+    PrintF("]\n");
   }
 
   SharedFunctionInfo* holder = optimized_code_map_holder_head_;
@@ -1307,7 +1320,7 @@ static inline HeapObject* ShortCircuitConsString(Object** p) {
   InstanceType type = map->instance_type();
   if ((type & kShortcutTypeMask) != kShortcutTypeTag) return object;
 
-  Object* second = reinterpret_cast<ConsString*>(object)->unchecked_second();
+  Object* second = reinterpret_cast<ConsString*>(object)->second();
   Heap* heap = map->GetHeap();
   if (second != heap->empty_string()) {
     return object;
@@ -1316,7 +1329,7 @@ static inline HeapObject* ShortCircuitConsString(Object** p) {
   // Since we don't have the object's start, it is impossible to update the
   // page dirty marks. Therefore, we only replace the string with its left
   // substring when page dirty marks do not change.
-  Object* first = reinterpret_cast<ConsString*>(object)->unchecked_first();
+  Object* first = reinterpret_cast<ConsString*>(object)->first();
   if (!heap->InNewSpace(object) && heap->InNewSpace(first)) return object;
 
   *p = first;
@@ -1488,15 +1501,13 @@ class MarkCompactMarkingVisitor
             FIXED_ARRAY_TYPE) return;
 
     // Make sure this is a RegExp that actually contains code.
-    if (re->TypeTagUnchecked() != JSRegExp::IRREGEXP) return;
+    if (re->TypeTag() != JSRegExp::IRREGEXP) return;
 
-    Object* code = re->DataAtUnchecked(JSRegExp::code_index(is_ascii));
+    Object* code = re->DataAt(JSRegExp::code_index(is_ascii));
     if (!code->IsSmi() &&
         HeapObject::cast(code)->map()->instance_type() == CODE_TYPE) {
       // Save a copy that can be reinstated if we need the code again.
-      re->SetDataAtUnchecked(JSRegExp::saved_code_index(is_ascii),
-                             code,
-                             heap);
+      re->SetDataAt(JSRegExp::saved_code_index(is_ascii), code);
 
       // Saving a copy might create a pointer into compaction candidate
       // that was not observed by marker.  This might happen if JSRegExp data
@@ -1508,9 +1519,8 @@ class MarkCompactMarkingVisitor
           RecordSlot(slot, slot, code);
 
       // Set a number in the 0-255 range to guarantee no smi overflow.
-      re->SetDataAtUnchecked(JSRegExp::code_index(is_ascii),
-                             Smi::FromInt(heap->sweep_generation() & 0xff),
-                             heap);
+      re->SetDataAt(JSRegExp::code_index(is_ascii),
+                    Smi::FromInt(heap->sweep_generation() & 0xff));
     } else if (code->IsSmi()) {
       int value = Smi::cast(code)->value();
       // The regexp has not been compiled yet or there was a compilation error.
@@ -1521,12 +1531,10 @@ class MarkCompactMarkingVisitor
 
       // Check if we should flush now.
       if (value == ((heap->sweep_generation() - kRegExpCodeThreshold) & 0xff)) {
-        re->SetDataAtUnchecked(JSRegExp::code_index(is_ascii),
-                               Smi::FromInt(JSRegExp::kUninitializedValue),
-                               heap);
-        re->SetDataAtUnchecked(JSRegExp::saved_code_index(is_ascii),
-                               Smi::FromInt(JSRegExp::kUninitializedValue),
-                               heap);
+        re->SetDataAt(JSRegExp::code_index(is_ascii),
+                      Smi::FromInt(JSRegExp::kUninitializedValue));
+        re->SetDataAt(JSRegExp::saved_code_index(is_ascii),
+                      Smi::FromInt(JSRegExp::kUninitializedValue));
       }
     }
   }
@@ -1706,23 +1714,6 @@ VisitorDispatchTable<MarkCompactMarkingVisitor::Callback>
     MarkCompactMarkingVisitor::non_count_table_;
 
 
-class MarkingVisitor : public ObjectVisitor {
- public:
-  explicit MarkingVisitor(Heap* heap) : heap_(heap) { }
-
-  void VisitPointer(Object** p) {
-    MarkCompactMarkingVisitor::VisitPointer(heap_, p);
-  }
-
-  void VisitPointers(Object** start, Object** end) {
-    MarkCompactMarkingVisitor::VisitPointers(heap_, start, end);
-  }
-
- private:
-  Heap* heap_;
-};
-
-
 class CodeMarkingVisitor : public ThreadVisitor {
  public:
   explicit CodeMarkingVisitor(MarkCompactCollector* collector)
@@ -2031,14 +2022,13 @@ bool MarkCompactCollector::IsUnmarkedHeapObjectWithHeap(Heap* heap,
 }
 
 
-void MarkCompactCollector::MarkStringTable() {
+void MarkCompactCollector::MarkStringTable(RootMarkingVisitor* visitor) {
   StringTable* string_table = heap()->string_table();
   // Mark the string table itself.
   MarkBit string_table_mark = Marking::MarkBitFrom(string_table);
   SetMark(string_table, string_table_mark);
   // Explicitly mark the prefix.
-  MarkingVisitor marker(heap());
-  string_table->IteratePrefix(&marker);
+  string_table->IteratePrefix(visitor);
   ProcessMarkingDeque();
 }
 
@@ -2049,7 +2039,7 @@ void MarkCompactCollector::MarkRoots(RootMarkingVisitor* visitor) {
   heap()->IterateStrongRoots(visitor, VISIT_ONLY_STRONG);
 
   // Handle the string table specially.
-  MarkStringTable();
+  MarkStringTable(visitor);
 
   // There may be overflowed objects in the heap.  Visit them now.
   while (marking_deque_.overflowed()) {
@@ -2148,6 +2138,11 @@ void MarkCompactCollector::RefillMarkingDeque() {
                              heap()->cell_space());
   if (marking_deque_.IsFull()) return;
 
+  DiscoverGreyObjectsInSpace(heap(),
+                             &marking_deque_,
+                             heap()->property_cell_space());
+  if (marking_deque_.IsFull()) return;
+
   LargeObjectIterator lo_it(heap()->lo_space());
   DiscoverGreyObjectsWithIterator(heap(),
                                   &marking_deque_,
@@ -2187,6 +2182,24 @@ void MarkCompactCollector::ProcessEphemeralMarking(ObjectVisitor* visitor) {
 }
 
 
+void MarkCompactCollector::ProcessTopOptimizedFrame(ObjectVisitor* visitor) {
+  for (StackFrameIterator it(isolate(), isolate()->thread_local_top());
+       !it.done(); it.Advance()) {
+    if (it.frame()->type() == StackFrame::JAVA_SCRIPT) {
+      return;
+    }
+    if (it.frame()->type() == StackFrame::OPTIMIZED) {
+      Code* code = it.frame()->LookupCode();
+      if (!code->CanDeoptAt(it.frame()->pc())) {
+        code->CodeIterateBody(visitor);
+      }
+      ProcessMarkingDeque();
+      return;
+    }
+  }
+}
+
+
 void MarkCompactCollector::MarkLiveObjects() {
   GCTracer::Scope gc_scope(tracer_, GCTracer::Scope::MC_MARK);
   // The recursive GC marker detects when it is nearing stack overflow,
@@ -2241,20 +2254,33 @@ void MarkCompactCollector::MarkLiveObjects() {
       HeapObjectIterator cell_iterator(heap()->cell_space());
       HeapObject* cell;
       while ((cell = cell_iterator.Next()) != NULL) {
-        ASSERT(cell->IsJSGlobalPropertyCell());
+        ASSERT(cell->IsCell());
         if (IsMarked(cell)) {
-          int offset = JSGlobalPropertyCell::kValueOffset;
+          int offset = Cell::kValueOffset;
           MarkCompactMarkingVisitor::VisitPointer(
               heap(),
               reinterpret_cast<Object**>(cell->address() + offset));
         }
       }
     }
+    {
+      HeapObjectIterator js_global_property_cell_iterator(
+          heap()->property_cell_space());
+      HeapObject* cell;
+      while ((cell = js_global_property_cell_iterator.Next()) != NULL) {
+        ASSERT(cell->IsPropertyCell());
+        if (IsMarked(cell)) {
+          MarkCompactMarkingVisitor::VisitPropertyCell(cell->map(), cell);
+        }
+      }
+    }
   }
 
   RootMarkingVisitor root_visitor(heap());
   MarkRoots(&root_visitor);
 
+  ProcessTopOptimizedFrame(&root_visitor);
+
   // The objects reachable from the roots are marked, yet unreachable
   // objects are unmarked.  Mark objects reachable due to host
   // application specific logic or through Harmony weak maps.
@@ -2386,7 +2412,6 @@ void MarkCompactCollector::ReattachInitialMaps() {
   for (HeapObject* obj = map_iterator.Next();
        obj != NULL;
        obj = map_iterator.Next()) {
-    if (obj->IsFreeSpace()) continue;
     Map* map = Map::cast(obj);
 
     STATIC_ASSERT(LAST_TYPE == LAST_JS_RECEIVER_TYPE);
@@ -2400,36 +2425,45 @@ void MarkCompactCollector::ReattachInitialMaps() {
 
 
 void MarkCompactCollector::ClearNonLiveReferences() {
-  HeapObjectIterator map_iterator(heap()->map_space());
   // Iterate over the map space, setting map transitions that go from
   // a marked map to an unmarked map to null transitions.  This action
   // is carried out only on maps of JSObjects and related subtypes.
+  HeapObjectIterator map_iterator(heap()->map_space());
   for (HeapObject* obj = map_iterator.Next();
-       obj != NULL; obj = map_iterator.Next()) {
-    Map* map = reinterpret_cast<Map*>(obj);
-    MarkBit map_mark = Marking::MarkBitFrom(map);
-    if (map->IsFreeSpace()) continue;
+       obj != NULL;
+       obj = map_iterator.Next()) {
+    Map* map = Map::cast(obj);
 
-    ASSERT(map->IsMap());
     if (!map->CanTransition()) continue;
 
-    if (map_mark.Get() &&
-        map->attached_to_shared_function_info()) {
+    MarkBit map_mark = Marking::MarkBitFrom(map);
+    if (map_mark.Get() && map->attached_to_shared_function_info()) {
       // This map is used for inobject slack tracking and has been detached
       // from SharedFunctionInfo during the mark phase.
       // Since it survived the GC, reattach it now.
-      map->unchecked_constructor()->unchecked_shared()->AttachInitialMap(map);
+      JSFunction::cast(map->constructor())->shared()->AttachInitialMap(map);
     }
 
     ClearNonLivePrototypeTransitions(map);
     ClearNonLiveMapTransitions(map, map_mark);
 
     if (map_mark.Get()) {
-      ClearNonLiveDependentCode(map);
+      ClearNonLiveDependentCode(map->dependent_code());
     } else {
       ClearAndDeoptimizeDependentCode(map);
     }
   }
+
+  // Iterate over property cell space, removing dependent code that is not
+  // otherwise kept alive by strong references.
+  HeapObjectIterator cell_iterator(heap_->property_cell_space());
+  for (HeapObject* cell = cell_iterator.Next();
+       cell != NULL;
+       cell = cell_iterator.Next()) {
+    if (IsMarked(cell)) {
+      ClearNonLiveDependentCode(PropertyCell::cast(cell)->dependent_code());
+    }
+  }
 }
 
 
@@ -2449,13 +2483,11 @@ void MarkCompactCollector::ClearNonLivePrototypeTransitions(Map* map) {
       int proto_index = proto_offset + new_number_of_transitions * step;
       int map_index = map_offset + new_number_of_transitions * step;
       if (new_number_of_transitions != i) {
-        prototype_transitions->set_unchecked(
-            heap_,
+        prototype_transitions->set(
             proto_index,
             prototype,
             UPDATE_WRITE_BARRIER);
-        prototype_transitions->set_unchecked(
-            heap_,
+        prototype_transitions->set(
             map_index,
             cached_map,
             SKIP_WRITE_BARRIER);
@@ -2504,19 +2536,21 @@ void MarkCompactCollector::ClearAndDeoptimizeDependentCode(Map* map) {
   int number_of_entries = starts.number_of_entries();
   if (number_of_entries == 0) return;
   for (int i = 0; i < number_of_entries; i++) {
+    // If the entry is compilation info then the map must be alive,
+    // and ClearAndDeoptimizeDependentCode shouldn't be called.
+    ASSERT(entries->is_code_at(i));
     Code* code = entries->code_at(i);
     if (IsMarked(code) && !code->marked_for_deoptimization()) {
       code->set_marked_for_deoptimization(true);
     }
-    entries->clear_code_at(i);
+    entries->clear_at(i);
   }
   map->set_dependent_code(DependentCode::cast(heap()->empty_fixed_array()));
 }
 
 
-void MarkCompactCollector::ClearNonLiveDependentCode(Map* map) {
+void MarkCompactCollector::ClearNonLiveDependentCode(DependentCode* entries) {
   DisallowHeapAllocation no_allocation;
-  DependentCode* entries = map->dependent_code();
   DependentCode::GroupStartIndexes starts(entries);
   int number_of_entries = starts.number_of_entries();
   if (number_of_entries == 0) return;
@@ -2525,15 +2559,17 @@ void MarkCompactCollector::ClearNonLiveDependentCode(Map* map) {
   for (int g = 0; g < DependentCode::kGroupCount; g++) {
     int group_number_of_entries = 0;
     for (int i = starts.at(g); i < starts.at(g + 1); i++) {
-      Code* code = entries->code_at(i);
-      if (IsMarked(code) && !code->marked_for_deoptimization()) {
+      Object* obj = entries->object_at(i);
+      ASSERT(obj->IsCode() || IsMarked(obj));
+      if (IsMarked(obj) &&
+          (!obj->IsCode() || !Code::cast(obj)->marked_for_deoptimization())) {
         if (new_number_of_entries + group_number_of_entries != i) {
-          entries->set_code_at(new_number_of_entries +
-                               group_number_of_entries, code);
+          entries->set_object_at(
+              new_number_of_entries + group_number_of_entries, obj);
         }
-        Object** slot = entries->code_slot_at(new_number_of_entries +
-                                              group_number_of_entries);
-        RecordSlot(slot, slot, code);
+        Object** slot = entries->slot_at(new_number_of_entries +
+                                         group_number_of_entries);
+        RecordSlot(slot, slot, obj);
         group_number_of_entries++;
       }
     }
@@ -2543,7 +2579,7 @@ void MarkCompactCollector::ClearNonLiveDependentCode(Map* map) {
     new_number_of_entries += group_number_of_entries;
   }
   for (int i = new_number_of_entries; i < number_of_entries; i++) {
-    entries->clear_code_at(i);
+    entries->clear_at(i);
   }
 }
 
@@ -3102,6 +3138,11 @@ static void SweepPrecisely(PagedSpace* space,
       Address free_end = object_address + offsets[live_index++] * kPointerSize;
       if (free_end != free_start) {
         space->Free(free_start, static_cast<int>(free_end - free_start));
+#ifdef ENABLE_GDB_JIT_INTERFACE
+        if (FLAG_gdbjit && space->identity() == CODE_SPACE) {
+          GDBJITInterface::RemoveCodeRange(free_start, free_end);
+        }
+#endif
       }
       HeapObject* live_object = HeapObject::FromAddress(free_end);
       ASSERT(Marking::IsBlack(Marking::MarkBitFrom(live_object)));
@@ -3128,6 +3169,11 @@ static void SweepPrecisely(PagedSpace* space,
   }
   if (free_start != p->area_end()) {
     space->Free(free_start, static_cast<int>(p->area_end() - free_start));
+#ifdef ENABLE_GDB_JIT_INTERFACE
+    if (FLAG_gdbjit && space->identity() == CODE_SPACE) {
+      GDBJITInterface::RemoveCodeRange(free_start, p->area_end());
+    }
+#endif
   }
   p->ResetLiveBytes();
   if (FLAG_print_cumulative_gc_stat) {
@@ -3258,11 +3304,9 @@ void MarkCompactCollector::EvacuateNewSpaceAndCandidates() {
   bool code_slots_filtering_required;
   { GCTracer::Scope gc_scope(tracer_, GCTracer::Scope::MC_SWEEP_NEWSPACE);
     code_slots_filtering_required = MarkInvalidatedCode();
-
     EvacuateNewSpace();
   }
 
-
   { GCTracer::Scope gc_scope(tracer_, GCTracer::Scope::MC_EVACUATE_PAGES);
     EvacuatePages();
   }
@@ -3384,11 +3428,18 @@ void MarkCompactCollector::EvacuateNewSpaceAndCandidates() {
   for (HeapObject* cell = cell_iterator.Next();
        cell != NULL;
        cell = cell_iterator.Next()) {
-    if (cell->IsJSGlobalPropertyCell()) {
-      Address value_address =
-          reinterpret_cast<Address>(cell) +
-          (JSGlobalPropertyCell::kValueOffset - kHeapObjectTag);
-      updating_visitor.VisitPointer(reinterpret_cast<Object**>(value_address));
+    if (cell->IsCell()) {
+      Cell::BodyDescriptor::IterateBody(cell, &updating_visitor);
+    }
+  }
+
+  HeapObjectIterator js_global_property_cell_iterator(
+      heap_->property_cell_space());
+  for (HeapObject* cell = js_global_property_cell_iterator.Next();
+       cell != NULL;
+       cell = js_global_property_cell_iterator.Next()) {
+    if (cell->IsPropertyCell()) {
+      PropertyCell::BodyDescriptor::IterateBody(cell, &updating_visitor);
     }
   }
 
@@ -4050,6 +4101,7 @@ void MarkCompactCollector::SweepSpaces() {
   SweepSpace(heap()->code_space(), PRECISE);
 
   SweepSpace(heap()->cell_space(), PRECISE);
+  SweepSpace(heap()->property_cell_space(), PRECISE);
 
   EvacuateNewSpaceAndCandidates();
 
index 873534c..ab3711a 100644 (file)
@@ -835,7 +835,7 @@ class MarkCompactCollector {
 
   // Mark the string table specially.  References to internalized strings from
   // the string table are weak.
-  void MarkStringTable();
+  void MarkStringTable(RootMarkingVisitor* visitor);
 
   // Mark objects in implicit references groups if their parent object
   // is marked.
@@ -853,6 +853,11 @@ class MarkCompactCollector {
   //      or implicit references' groups.
   void ProcessEphemeralMarking(ObjectVisitor* visitor);
 
+  // If the call-site of the top optimized code was not prepared for
+  // deoptimization, then treat the maps in the code as strong pointers,
+  // otherwise a map can die and deoptimize the code.
+  void ProcessTopOptimizedFrame(ObjectVisitor* visitor);
+
   // Mark objects reachable (transitively) from objects in the marking
   // stack.  This function empties the marking stack, but may leave
   // overflowed objects in the heap, in which case the marking stack's
@@ -880,7 +885,7 @@ class MarkCompactCollector {
   void ClearNonLiveMapTransitions(Map* map, MarkBit map_mark);
 
   void ClearAndDeoptimizeDependentCode(Map* map);
-  void ClearNonLiveDependentCode(Map* map);
+  void ClearNonLiveDependentCode(DependentCode* dependent_code);
 
   // Marking detaches initial maps from SharedFunctionInfo objects
   // to make this reference weak. We need to reattach initial maps
index 574485a..ac9f944 100644 (file)
@@ -73,6 +73,7 @@ void MarkingThread::Stop() {
   Release_Store(&stop_thread_, static_cast<AtomicWord>(true));
   start_marking_semaphore_->Signal();
   stop_semaphore_->Wait();
+  Join();
 }
 
 
index ce075ce..137d98f 100644 (file)
@@ -108,14 +108,23 @@ var kMessages = {
                                  ["%0"," constructor should have at least one argument."],
   not_typed_array:               ["this is not a typed array."],
   invalid_argument:              ["invalid_argument"],
+  data_view_not_array_buffer:    ["First argument to DataView constructor must be an ArrayBuffer"],
+  constructor_not_function:      ["Constructor ", "%0", " requires 'new'"],
   // RangeError
   invalid_array_length:          ["Invalid array length"],
   invalid_array_buffer_length:   ["Invalid array buffer length"],
-  invalid_typed_array_offset:    ["Start offset is too large"],
-  invalid_typed_array_length:    ["Length is too large"],
+  invalid_typed_array_offset:    ["Start offset is too large:"],
+  invalid_typed_array_length:    ["Invalid typed array length"],
   invalid_typed_array_alignment: ["%0", "of", "%1", "should be a multiple of", "%3"],
   typed_array_set_source_too_large:
                                  ["Source is too large"],
+  typed_array_set_negative_offset:
+                                 ["Start offset is negative"],
+  invalid_data_view_offset:      ["Start offset is outside the bounds of the buffer"],
+  invalid_data_view_length:      ["Invalid data view length"],
+  invalid_data_view_accessor_offset:
+                                 ["Offset is outside the bounds of the DataView"],
+
   stack_overflow:                ["Maximum call stack size exceeded"],
   invalid_time_value:            ["Invalid time value"],
   // SyntaxError
index 3cb222c..38473b5 100644 (file)
@@ -1 +1,2 @@
 plind44@gmail.com
+gergely@homejinni.com
index d922bfa..2ca0083 100644 (file)
@@ -202,6 +202,7 @@ Object** RelocInfo::target_object_address() {
 
 void RelocInfo::set_target_object(Object* target, WriteBarrierMode mode) {
   ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
+  ASSERT(!target->IsConsString());
   Assembler::set_target_address_at(pc_, reinterpret_cast<Address>(target));
   if (mode == UPDATE_WRITE_BARRIER &&
       host() != NULL &&
@@ -232,24 +233,22 @@ void RelocInfo::set_target_runtime_entry(Address target,
 }
 
 
-Handle<JSGlobalPropertyCell> RelocInfo::target_cell_handle() {
-  ASSERT(rmode_ == RelocInfo::GLOBAL_PROPERTY_CELL);
+Handle<Cell> RelocInfo::target_cell_handle() {
+  ASSERT(rmode_ == RelocInfo::CELL);
   Address address = Memory::Address_at(pc_);
-  return Handle<JSGlobalPropertyCell>(
-      reinterpret_cast<JSGlobalPropertyCell**>(address));
+  return Handle<Cell>(reinterpret_cast<Cell**>(address));
 }
 
 
-JSGlobalPropertyCell* RelocInfo::target_cell() {
-  ASSERT(rmode_ == RelocInfo::GLOBAL_PROPERTY_CELL);
-  return JSGlobalPropertyCell::FromValueAddress(Memory::Address_at(pc_));
+Cell* RelocInfo::target_cell() {
+  ASSERT(rmode_ == RelocInfo::CELL);
+  return Cell::FromValueAddress(Memory::Address_at(pc_));
 }
 
 
-void RelocInfo::set_target_cell(JSGlobalPropertyCell* cell,
-                                WriteBarrierMode mode) {
-  ASSERT(rmode_ == RelocInfo::GLOBAL_PROPERTY_CELL);
-  Address address = cell->address() + JSGlobalPropertyCell::kValueOffset;
+void RelocInfo::set_target_cell(Cell* cell, WriteBarrierMode mode) {
+  ASSERT(rmode_ == RelocInfo::CELL);
+  Address address = cell->address() + Cell::kValueOffset;
   Memory::Address_at(pc_) = address;
   if (mode == UPDATE_WRITE_BARRIER && host() != NULL) {
     // TODO(1550) We are passing NULL as a slot because cell can never be on
@@ -345,8 +344,8 @@ void RelocInfo::Visit(ObjectVisitor* visitor) {
     visitor->VisitEmbeddedPointer(this);
   } else if (RelocInfo::IsCodeTarget(mode)) {
     visitor->VisitCodeTarget(this);
-  } else if (mode == RelocInfo::GLOBAL_PROPERTY_CELL) {
-    visitor->VisitGlobalPropertyCell(this);
+  } else if (mode == RelocInfo::CELL) {
+    visitor->VisitCell(this);
   } else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
     visitor->VisitExternalReference(this);
   } else if (RelocInfo::IsCodeAgeSequence(mode)) {
@@ -373,8 +372,8 @@ void RelocInfo::Visit(Heap* heap) {
     StaticVisitor::VisitEmbeddedPointer(heap, this);
   } else if (RelocInfo::IsCodeTarget(mode)) {
     StaticVisitor::VisitCodeTarget(heap, this);
-  } else if (mode == RelocInfo::GLOBAL_PROPERTY_CELL) {
-    StaticVisitor::VisitGlobalPropertyCell(heap, this);
+  } else if (mode == RelocInfo::CELL) {
+    StaticVisitor::VisitCell(heap, this);
   } else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
     StaticVisitor::VisitExternalReference(this);
   } else if (RelocInfo::IsCodeAgeSequence(mode)) {
index eee79a2..c4fefcc 100644 (file)
@@ -35,7 +35,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_MIPS
 
 #include "mips/assembler-mips-inl.h"
 #include "serialize.h"
@@ -1475,7 +1475,7 @@ void Assembler::break_(uint32_t code, bool break_as_stop) {
 void Assembler::stop(const char* msg, uint32_t code) {
   ASSERT(code > kMaxWatchpointCode);
   ASSERT(code <= kMaxStopCode);
-#if defined(V8_HOST_ARCH_MIPS)
+#if V8_HOST_ARCH_MIPS
   break_(0x54321);
 #else  // V8_HOST_ARCH_MIPS
   BlockTrampolinePoolFor(2);
old mode 100644 (file)
new mode 100755 (executable)
index 06273ca..35d21f0
@@ -29,7 +29,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_MIPS
 
 #include "codegen.h"
 #include "debug.h"
@@ -108,372 +108,6 @@ static void GenerateLoadArrayFunction(MacroAssembler* masm, Register result) {
 }
 
 
-// Allocate an empty JSArray. The allocated array is put into the result
-// register. An elements backing store is allocated with size initial_capacity
-// and filled with the hole values.
-static void AllocateEmptyJSArray(MacroAssembler* masm,
-                                 Register array_function,
-                                 Register result,
-                                 Register scratch1,
-                                 Register scratch2,
-                                 Register scratch3,
-                                 Label* gc_required) {
-  const int initial_capacity = JSArray::kPreallocatedArrayElements;
-  STATIC_ASSERT(initial_capacity >= 0);
-  __ LoadInitialArrayMap(array_function, scratch2, scratch1, false);
-
-  // Allocate the JSArray object together with space for a fixed array with the
-  // requested elements.
-  int size = JSArray::kSize;
-  if (initial_capacity > 0) {
-    size += FixedArray::SizeFor(initial_capacity);
-  }
-  __ Allocate(size, result, scratch2, scratch3, gc_required, TAG_OBJECT);
-
-  // Allocated the JSArray. Now initialize the fields except for the elements
-  // array.
-  // result: JSObject
-  // scratch1: initial map
-  // scratch2: start of next object
-  __ sw(scratch1, FieldMemOperand(result, JSObject::kMapOffset));
-  __ LoadRoot(scratch1, Heap::kEmptyFixedArrayRootIndex);
-  __ sw(scratch1, FieldMemOperand(result, JSArray::kPropertiesOffset));
-  // Field JSArray::kElementsOffset is initialized later.
-  __ mov(scratch3,  zero_reg);
-  __ sw(scratch3, FieldMemOperand(result, JSArray::kLengthOffset));
-
-  if (initial_capacity == 0) {
-    __ sw(scratch1, FieldMemOperand(result, JSArray::kElementsOffset));
-    return;
-  }
-
-  // Calculate the location of the elements array and set elements array member
-  // of the JSArray.
-  // result: JSObject
-  // scratch2: start of next object
-  __ Addu(scratch1, result, Operand(JSArray::kSize));
-  __ sw(scratch1, FieldMemOperand(result, JSArray::kElementsOffset));
-
-  // Clear the heap tag on the elements array.
-  __ And(scratch1, scratch1, Operand(~kHeapObjectTagMask));
-
-  // Initialize the FixedArray and fill it with holes. FixedArray length is
-  // stored as a smi.
-  // result: JSObject
-  // scratch1: elements array (untagged)
-  // scratch2: start of next object
-  __ LoadRoot(scratch3, Heap::kFixedArrayMapRootIndex);
-  STATIC_ASSERT(0 * kPointerSize == FixedArray::kMapOffset);
-  __ sw(scratch3, MemOperand(scratch1));
-  __ Addu(scratch1, scratch1, kPointerSize);
-  __ li(scratch3,  Operand(Smi::FromInt(initial_capacity)));
-  STATIC_ASSERT(1 * kPointerSize == FixedArray::kLengthOffset);
-  __ sw(scratch3, MemOperand(scratch1));
-  __ Addu(scratch1, scratch1, kPointerSize);
-
-  // Fill the FixedArray with the hole value. Inline the code if short.
-  STATIC_ASSERT(2 * kPointerSize == FixedArray::kHeaderSize);
-  __ LoadRoot(scratch3, Heap::kTheHoleValueRootIndex);
-  static const int kLoopUnfoldLimit = 4;
-  if (initial_capacity <= kLoopUnfoldLimit) {
-    for (int i = 0; i < initial_capacity; i++) {
-      __ sw(scratch3, MemOperand(scratch1, i * kPointerSize));
-    }
-  } else {
-    Label loop, entry;
-    __ Addu(scratch2, scratch1, Operand(initial_capacity * kPointerSize));
-    __ Branch(&entry);
-    __ bind(&loop);
-    __ sw(scratch3, MemOperand(scratch1));
-    __ Addu(scratch1, scratch1, kPointerSize);
-    __ bind(&entry);
-    __ Branch(&loop, lt, scratch1, Operand(scratch2));
-  }
-}
-
-
-// Allocate a JSArray with the number of elements stored in a register. The
-// register array_function holds the built-in Array function and the register
-// array_size holds the size of the array as a smi. The allocated array is put
-// into the result register and beginning and end of the FixedArray elements
-// storage is put into registers elements_array_storage and elements_array_end
-// (see  below for when that is not the case). If the parameter fill_with_holes
-// is true the allocated elements backing store is filled with the hole values
-// otherwise it is left uninitialized. When the backing store is filled the
-// register elements_array_storage is scratched.
-static void AllocateJSArray(MacroAssembler* masm,
-                            Register array_function,  // Array function.
-                            Register array_size,  // As a smi, cannot be 0.
-                            Register result,
-                            Register elements_array_storage,
-                            Register elements_array_end,
-                            Register scratch1,
-                            Register scratch2,
-                            bool fill_with_hole,
-                            Label* gc_required) {
-  // Load the initial map from the array function.
-  __ LoadInitialArrayMap(array_function, scratch2,
-                         elements_array_storage, fill_with_hole);
-
-  if (FLAG_debug_code) {  // Assert that array size is not zero.
-    __ Assert(
-        ne, "array size is unexpectedly 0", array_size, Operand(zero_reg));
-  }
-
-  // Allocate the JSArray object together with space for a FixedArray with the
-  // requested number of elements.
-  STATIC_ASSERT(kSmiTagSize == 1 && kSmiTag == 0);
-  __ li(elements_array_end,
-        (JSArray::kSize + FixedArray::kHeaderSize) / kPointerSize);
-  __ sra(scratch1, array_size, kSmiTagSize);
-  __ Addu(elements_array_end, elements_array_end, scratch1);
-  __ Allocate(elements_array_end,
-              result,
-              scratch1,
-              scratch2,
-              gc_required,
-              static_cast<AllocationFlags>(TAG_OBJECT | SIZE_IN_WORDS));
-
-  // Allocated the JSArray. Now initialize the fields except for the elements
-  // array.
-  // result: JSObject
-  // elements_array_storage: initial map
-  // array_size: size of array (smi)
-  __ sw(elements_array_storage, FieldMemOperand(result, JSObject::kMapOffset));
-  __ LoadRoot(elements_array_storage, Heap::kEmptyFixedArrayRootIndex);
-  __ sw(elements_array_storage,
-         FieldMemOperand(result, JSArray::kPropertiesOffset));
-  // Field JSArray::kElementsOffset is initialized later.
-  __ sw(array_size, FieldMemOperand(result, JSArray::kLengthOffset));
-
-  // Calculate the location of the elements array and set elements array member
-  // of the JSArray.
-  // result: JSObject
-  // array_size: size of array (smi)
-  __ Addu(elements_array_storage, result, Operand(JSArray::kSize));
-  __ sw(elements_array_storage,
-         FieldMemOperand(result, JSArray::kElementsOffset));
-
-  // Clear the heap tag on the elements array.
-  __ And(elements_array_storage,
-          elements_array_storage,
-          Operand(~kHeapObjectTagMask));
-  // Initialize the fixed array and fill it with holes. FixedArray length is
-  // stored as a smi.
-  // result: JSObject
-  // elements_array_storage: elements array (untagged)
-  // array_size: size of array (smi)
-  __ LoadRoot(scratch1, Heap::kFixedArrayMapRootIndex);
-  ASSERT_EQ(0 * kPointerSize, FixedArray::kMapOffset);
-  __ sw(scratch1, MemOperand(elements_array_storage));
-  __ Addu(elements_array_storage, elements_array_storage, kPointerSize);
-
-  // Length of the FixedArray is the number of pre-allocated elements if
-  // the actual JSArray has length 0 and the size of the JSArray for non-empty
-  // JSArrays. The length of a FixedArray is stored as a smi.
-  STATIC_ASSERT(kSmiTag == 0);
-
-  ASSERT_EQ(1 * kPointerSize, FixedArray::kLengthOffset);
-  __ sw(array_size, MemOperand(elements_array_storage));
-  __ Addu(elements_array_storage, elements_array_storage, kPointerSize);
-
-  // Calculate elements array and elements array end.
-  // result: JSObject
-  // elements_array_storage: elements array element storage
-  // array_size: smi-tagged size of elements array
-  STATIC_ASSERT(kSmiTag == 0 && kSmiTagSize < kPointerSizeLog2);
-  __ sll(elements_array_end, array_size, kPointerSizeLog2 - kSmiTagSize);
-  __ Addu(elements_array_end, elements_array_storage, elements_array_end);
-
-  // Fill the allocated FixedArray with the hole value if requested.
-  // result: JSObject
-  // elements_array_storage: elements array element storage
-  // elements_array_end: start of next object
-  if (fill_with_hole) {
-    Label loop, entry;
-    __ LoadRoot(scratch1, Heap::kTheHoleValueRootIndex);
-    __ Branch(&entry);
-    __ bind(&loop);
-    __ sw(scratch1, MemOperand(elements_array_storage));
-    __ Addu(elements_array_storage, elements_array_storage, kPointerSize);
-
-    __ bind(&entry);
-    __ Branch(&loop, lt, elements_array_storage, Operand(elements_array_end));
-  }
-}
-
-
-// Create a new array for the built-in Array function. This function allocates
-// the JSArray object and the FixedArray elements array and initializes these.
-// If the Array cannot be constructed in native code the runtime is called. This
-// function assumes the following state:
-//   a0: argc
-//   a1: constructor (built-in Array function)
-//   ra: return address
-//   sp[0]: last argument
-// This function is used for both construct and normal calls of Array. The only
-// difference between handling a construct call and a normal call is that for a
-// construct call the constructor function in a1 needs to be preserved for
-// entering the generic code. In both cases argc in a0 needs to be preserved.
-// Both registers are preserved by this code so no need to differentiate between
-// construct call and normal call.
-void ArrayNativeCode(MacroAssembler* masm, Label* call_generic_code) {
-  Counters* counters = masm->isolate()->counters();
-  Label argc_one_or_more, argc_two_or_more, not_empty_array, empty_array,
-      has_non_smi_element, finish, cant_transition_map, not_double;
-
-  // Check for array construction with zero arguments or one.
-  __ Branch(&argc_one_or_more, ne, a0, Operand(zero_reg));
-  // Handle construction of an empty array.
-  __ bind(&empty_array);
-  AllocateEmptyJSArray(masm,
-                       a1,
-                       a2,
-                       a3,
-                       t0,
-                       t1,
-                       call_generic_code);
-  __ IncrementCounter(counters->array_function_native(), 1, a3, t0);
-  // Set up return value, remove receiver from stack and return.
-  __ Addu(sp, sp, Operand(kPointerSize));
-  __ Ret(USE_DELAY_SLOT);
-  __ mov(v0, a2);
-
-  // Check for one argument. Bail out if argument is not smi or if it is
-  // negative.
-  __ bind(&argc_one_or_more);
-  __ Branch(&argc_two_or_more, ne, a0, Operand(1));
-
-  STATIC_ASSERT(kSmiTag == 0);
-  __ lw(a2, MemOperand(sp));  // Get the argument from the stack.
-  __ Branch(&not_empty_array, ne, a2, Operand(zero_reg));
-  __ Drop(1);  // Adjust stack.
-  __ mov(a0, zero_reg);  // Treat this as a call with argc of zero.
-  __ Branch(&empty_array);
-
-  __ bind(&not_empty_array);
-  __ And(a3, a2, Operand(kIntptrSignBit | kSmiTagMask));
-  __ Branch(call_generic_code, eq, a3, Operand(zero_reg));
-
-  // Handle construction of an empty array of a certain size. Bail out if size
-  // is too large to actually allocate an elements array.
-  STATIC_ASSERT(kSmiTag == 0);
-  __ Branch(call_generic_code, Ugreater_equal, a2,
-            Operand(JSObject::kInitialMaxFastElementArray << kSmiTagSize));
-
-  // a0: argc
-  // a1: constructor
-  // a2: array_size (smi)
-  // sp[0]: argument
-  AllocateJSArray(masm,
-                  a1,
-                  a2,
-                  a3,
-                  t0,
-                  t1,
-                  t2,
-                  t3,
-                  true,
-                  call_generic_code);
-  __ IncrementCounter(counters->array_function_native(), 1, a2, t0);
-
-  // Set up return value, remove receiver and argument from stack and return.
-  __ Addu(sp, sp, Operand(2 * kPointerSize));
-  __ Ret(USE_DELAY_SLOT);
-  __ mov(v0, a3);
-
-  // Handle construction of an array from a list of arguments.
-  __ bind(&argc_two_or_more);
-  __ sll(a2, a0, kSmiTagSize);  // Convert argc to a smi.
-
-  // a0: argc
-  // a1: constructor
-  // a2: array_size (smi)
-  // sp[0]: last argument
-  AllocateJSArray(masm,
-                  a1,
-                  a2,
-                  a3,
-                  t0,
-                  t1,
-                  t2,
-                  t3,
-                  false,
-                  call_generic_code);
-  __ IncrementCounter(counters->array_function_native(), 1, a2, t2);
-
-  // Fill arguments as array elements. Copy from the top of the stack (last
-  // element) to the array backing store filling it backwards. Note:
-  // elements_array_end points after the backing store.
-  // a0: argc
-  // a3: JSArray
-  // t0: elements_array storage start (untagged)
-  // t1: elements_array_end (untagged)
-  // sp[0]: last argument
-
-  Label loop, entry;
-  __ Branch(USE_DELAY_SLOT, &entry);
-  __ mov(t3, sp);
-  __ bind(&loop);
-  __ lw(a2, MemOperand(t3));
-  if (FLAG_smi_only_arrays) {
-    __ JumpIfNotSmi(a2, &has_non_smi_element);
-  }
-  __ Addu(t3, t3, kPointerSize);
-  __ Addu(t1, t1, -kPointerSize);
-  __ sw(a2, MemOperand(t1));
-  __ bind(&entry);
-  __ Branch(&loop, lt, t0, Operand(t1));
-
-  __ bind(&finish);
-  __ mov(sp, t3);
-
-  // Remove caller arguments and receiver from the stack, setup return value and
-  // return.
-  // a0: argc
-  // a3: JSArray
-  // sp[0]: receiver
-  __ Addu(sp, sp, Operand(kPointerSize));
-  __ Ret(USE_DELAY_SLOT);
-  __ mov(v0, a3);
-
-  __ bind(&has_non_smi_element);
-  // Double values are handled by the runtime.
-  __ CheckMap(
-      a2, t5, Heap::kHeapNumberMapRootIndex, &not_double, DONT_DO_SMI_CHECK);
-  __ bind(&cant_transition_map);
-  __ UndoAllocationInNewSpace(a3, t0);
-  __ Branch(call_generic_code);
-
-  __ bind(&not_double);
-  // Transition FAST_SMI_ELEMENTS to FAST_ELEMENTS.
-  // a3: JSArray
-  __ lw(a2, FieldMemOperand(a3, HeapObject::kMapOffset));
-  __ LoadTransitionedArrayMapConditional(FAST_SMI_ELEMENTS,
-                                         FAST_ELEMENTS,
-                                         a2,
-                                         t5,
-                                         &cant_transition_map);
-  __ sw(a2, FieldMemOperand(a3, HeapObject::kMapOffset));
-  __ RecordWriteField(a3,
-                      HeapObject::kMapOffset,
-                      a2,
-                      t5,
-                      kRAHasNotBeenSaved,
-                      kDontSaveFPRegs,
-                      EMIT_REMEMBERED_SET,
-                      OMIT_SMI_CHECK);
-  Label loop2;
-  __ bind(&loop2);
-  __ lw(a2, MemOperand(t3));
-  __ Addu(t3, t3, kPointerSize);
-  __ Subu(t1, t1, kPointerSize);
-  __ sw(a2, MemOperand(t1));
-  __ Branch(&loop2, lt, t0, Operand(t1));
-  __ Branch(&finish);
-}
-
-
 void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
   // ----------- S t a t e -------------
   //  -- a0     : number of arguments
@@ -498,20 +132,9 @@ void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
 
   // Run the native code for the InternalArray function called as a normal
   // function.
-  if (FLAG_optimize_constructed_arrays) {
-    // Tail call a stub.
-    InternalArrayConstructorStub stub(masm->isolate());
-    __ TailCallStub(&stub);
-  } else {
-    ArrayNativeCode(masm, &generic_array_code);
-
-    // Jump to the generic array code if the specialized code cannot handle the
-    // construction.
-    __ bind(&generic_array_code);
-    Handle<Code> array_code =
-        masm->isolate()->builtins()->InternalArrayCodeGeneric();
-    __ Jump(array_code, RelocInfo::CODE_TARGET);
-  }
+  // Tail call a stub.
+  InternalArrayConstructorStub stub(masm->isolate());
+  __ TailCallStub(&stub);
 }
 
 
@@ -538,58 +161,13 @@ void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
   }
 
   // Run the native code for the Array function called as a normal function.
-  if (FLAG_optimize_constructed_arrays) {
-    // Tail call a stub.
-    Handle<Object> undefined_sentinel(
-        masm->isolate()->heap()->undefined_value(),
-        masm->isolate());
-    __ li(a2, Operand(undefined_sentinel));
-    ArrayConstructorStub stub(masm->isolate());
-    __ TailCallStub(&stub);
-  } else {
-    ArrayNativeCode(masm, &generic_array_code);
-
-    // Jump to the generic array code if the specialized code cannot handle
-    // the construction.
-    __ bind(&generic_array_code);
-    Handle<Code> array_code =
-        masm->isolate()->builtins()->ArrayCodeGeneric();
-    __ Jump(array_code, RelocInfo::CODE_TARGET);
-  }
-}
-
-
-void Builtins::Generate_CommonArrayConstructCode(MacroAssembler* masm) {
-  // ----------- S t a t e -------------
-  //  -- a0     : number of arguments
-  //  -- a1     : constructor function
-  //  -- a2     : type info cell
-  //  -- ra     : return address
-  //  -- sp[...]: constructor arguments
-  // -----------------------------------
-
-  if (FLAG_debug_code) {
-    // The array construct code is only set for the builtin and internal
-    // Array functions which always have a map.
-    // Initial map for the builtin Array function should be a map.
-    __ lw(a3, FieldMemOperand(a1, JSFunction::kPrototypeOrInitialMapOffset));
-    __ And(t0, a3, Operand(kSmiTagMask));
-    __ Assert(ne, "Unexpected initial map for Array function (3)",
-              t0, Operand(zero_reg));
-    __ GetObjectType(a3, a3, t0);
-    __ Assert(eq, "Unexpected initial map for Array function (4)",
-              t0, Operand(MAP_TYPE));
-  }
-  Label generic_constructor;
-  // Run the native code for the Array function called as a constructor.
-  ArrayNativeCode(masm, &generic_constructor);
-
-  // Jump to the generic construct code in case the specialized code cannot
-  // handle the construction.
-  __ bind(&generic_constructor);
-  Handle<Code> generic_construct_stub =
-      masm->isolate()->builtins()->JSConstructStubGeneric();
-  __ Jump(generic_construct_stub, RelocInfo::CODE_TARGET);
+  // Tail call a stub.
+  Handle<Object> undefined_sentinel(
+      masm->isolate()->heap()->undefined_value(),
+      masm->isolate());
+  __ li(a2, Operand(undefined_sentinel));
+  ArrayConstructorStub stub(masm->isolate());
+  __ TailCallStub(&stub);
 }
 
 
@@ -695,7 +273,7 @@ void Builtins::Generate_StringConstructCode(MacroAssembler* masm) {
   __ IncrementCounter(counters->string_ctor_conversions(), 1, a3, t0);
   {
     FrameScope scope(masm, StackFrame::INTERNAL);
-    __ push(v0);
+    __ push(a0);
     __ InvokeBuiltin(Builtins::TO_STRING, CALL_FUNCTION);
   }
   __ pop(function);
@@ -1162,6 +740,7 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
   //  -- a3: argc
   //  -- s0: argv
   // -----------------------------------
+  ProfileEntryHookStub::MaybeCallEntryHook(masm);
 
   // Clear the context before we push it when entering the JS frame.
   __ mov(cp, zero_reg);
index 3d0577e..69b957a 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_MIPS
 
 #include "bootstrapper.h"
 #include "code-stubs.h"
@@ -1181,12 +1181,17 @@ static void EmitStrictTwoHeapObjectCompare(MacroAssembler* masm,
 
     // Now that we have the types we might as well check for
     // internalized-internalized.
-    // Ensure that no non-strings have the internalized bit set.
-    STATIC_ASSERT(LAST_TYPE < kNotStringTag + kIsInternalizedMask);
+    Label not_internalized;
     STATIC_ASSERT(kInternalizedTag != 0);
-    __ And(t2, a2, Operand(a3));
-    __ And(t0, t2, Operand(kIsInternalizedMask));
-    __ Branch(&return_not_equal, ne, t0, Operand(zero_reg));
+    __ And(t2, a2, Operand(kIsNotStringMask | kIsInternalizedMask));
+    __ Branch(&not_internalized, ne, t2,
+        Operand(kInternalizedTag | kStringTag));
+
+    __ And(a3, a3, Operand(kIsNotStringMask | kIsInternalizedMask));
+    __ Branch(&return_not_equal, eq, a3,
+        Operand(kInternalizedTag | kStringTag));
+
+    __ bind(&not_internalized);
 }
 
 
@@ -1220,8 +1225,7 @@ static void EmitCheckForInternalizedStringsOrObjects(MacroAssembler* masm,
   ASSERT((lhs.is(a0) && rhs.is(a1)) ||
          (lhs.is(a1) && rhs.is(a0)));
 
-  // a2 is object type of lhs.
-  // Ensure that no non-strings have the internalized bit set.
+  // a2 is object type of rhs.
   Label object_test;
   STATIC_ASSERT(kInternalizedTag != 0);
   __ And(at, a2, Operand(kIsNotStringMask));
@@ -2326,7 +2330,7 @@ void BinaryOpStub_GenerateSmiCode(
 void BinaryOpStub::GenerateSmiStub(MacroAssembler* masm) {
   Label right_arg_changed, call_runtime;
 
-  if (op_ == Token::MOD && has_fixed_right_arg_) {
+  if (op_ == Token::MOD && encoded_right_arg_.has_value) {
     // It is guaranteed that the value will fit into a Smi, because if it
     // didn't, we wouldn't be here, see BinaryOp_Patch.
     __ Branch(&right_arg_changed,
@@ -2488,47 +2492,36 @@ void BinaryOpStub::GenerateInt32Stub(MacroAssembler* masm) {
             UNREACHABLE();
         }
 
-        if (op_ != Token::DIV) {
-          // These operations produce an integer result.
-          // Try to return a smi if we can.
-          // Otherwise return a heap number if allowed, or jump to type
-          // transition.
-
+        if (result_type_ <= BinaryOpIC::INT32) {
           Register except_flag = scratch2;
-          __ EmitFPUTruncate(kRoundToZero,
+          const FPURoundingMode kRoundingMode = op_ == Token::DIV ?
+              kRoundToMinusInf : kRoundToZero;
+          const CheckForInexactConversion kConversion = op_ == Token::DIV ?
+              kCheckForInexactConversion : kDontCheckForInexactConversion;
+          __ EmitFPUTruncate(kRoundingMode,
                              scratch1,
                              f10,
                              at,
                              f16,
-                             except_flag);
-
-          if (result_type_ <= BinaryOpIC::INT32) {
-            // If except_flag != 0, result does not fit in a 32-bit integer.
-            __ Branch(&transition, ne, except_flag, Operand(zero_reg));
-          }
-
-          // Check if the result fits in a smi.
-          __ Addu(scratch2, scratch1, Operand(0x40000000));
-          // If not try to return a heap number.
+                             except_flag,
+                             kConversion);
+          // If except_flag != 0, result does not fit in a 32-bit integer.
+          __ Branch(&transition, ne, except_flag, Operand(zero_reg));
+          // Try to tag the result as a Smi, return heap number on overflow.
+          __ SmiTagCheckOverflow(scratch1, scratch1, scratch2);
           __ Branch(&return_heap_number, lt, scratch2, Operand(zero_reg));
-          // Check for minus zero. Return heap number for minus zero if
-          // double results are allowed; otherwise transition.
+          // Check for minus zero, transition in that case (because we need
+          // to return a heap number).
           Label not_zero;
+          ASSERT(kSmiTag == 0);
           __ Branch(&not_zero, ne, scratch1, Operand(zero_reg));
           __ mfc1(scratch2, f11);
           __ And(scratch2, scratch2, HeapNumber::kSignMask);
-          __ Branch(result_type_ <= BinaryOpIC::INT32 ? &transition
-                    : &return_heap_number,
-                    ne,
-                    scratch2,
-                    Operand(zero_reg));
+          __ Branch(&transition, ne, scratch2, Operand(zero_reg));
           __ bind(&not_zero);
 
-          // Tag the result and return.
           __ Ret(USE_DELAY_SLOT);
-          __ SmiTag(v0, scratch1);  // SmiTag emits one instruction.
-        } else {
-          // DIV just falls through to allocating a heap number.
+          __ mov(v0, scratch1);
         }
 
         __ bind(&return_heap_number);
@@ -2552,7 +2545,7 @@ void BinaryOpStub::GenerateInt32Stub(MacroAssembler* masm) {
         // to type transition.
 
       } else {
-        if (has_fixed_right_arg_) {
+        if (encoded_right_arg_.has_value) {
           __ Move(f16, fixed_right_arg_value());
           __ BranchF(&transition, NULL, ne, f14, f16);
         }
@@ -3350,9 +3343,7 @@ void CodeStub::GenerateStubsAheadOfTime(Isolate* isolate) {
   StoreBufferOverflowStub::GenerateFixedRegStubsAheadOfTime(isolate);
   StubFailureTrampolineStub::GenerateAheadOfTime(isolate);
   RecordWriteStub::GenerateFixedRegStubsAheadOfTime(isolate);
-  if (FLAG_optimize_constructed_arrays) {
-    ArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate);
-  }
+  ArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate);
 }
 
 
@@ -3539,6 +3530,8 @@ void CEntryStub::Generate(MacroAssembler* masm) {
   // sp: stack pointer    (restored as callee's sp after C call)
   // cp: current context  (C callee-saved)
 
+  ProfileEntryHookStub::MaybeCallEntryHook(masm);
+
   // NOTE: Invocations of builtins may return failure objects
   // instead of a proper result. The builtin entry handles
   // this by performing a garbage collection and retrying the
@@ -3632,6 +3625,8 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
   // 4 args slots
   // args
 
+  ProfileEntryHookStub::MaybeCallEntryHook(masm);
+
   // Save callee saved registers on the stack.
   __ MultiPush(kCalleeSaved | ra.bit());
 
@@ -3860,7 +3855,7 @@ void InstanceofStub::Generate(MacroAssembler* masm) {
     __ Subu(inline_site, ra, scratch);
     // Get the map location in scratch and patch it.
     __ GetRelocatedValue(inline_site, scratch, v1);  // v1 used as scratch.
-    __ sw(map, FieldMemOperand(scratch, JSGlobalPropertyCell::kValueOffset));
+    __ sw(map, FieldMemOperand(scratch, Cell::kValueOffset));
   }
 
   // Register mapping: a3 is object map and t0 is function prototype.
@@ -5029,55 +5024,12 @@ void RegExpConstructResultStub::Generate(MacroAssembler* masm) {
 }
 
 
-static void GenerateRecordCallTargetNoArray(MacroAssembler* masm) {
-  // Cache the called function in a global property cell.  Cache states
-  // are uninitialized, monomorphic (indicated by a JSFunction), and
-  // megamorphic.
-  // a1 : the function to call
-  // a2 : cache cell for call target
-  Label done;
-
-  ASSERT_EQ(*TypeFeedbackCells::MegamorphicSentinel(masm->isolate()),
-            masm->isolate()->heap()->undefined_value());
-  ASSERT_EQ(*TypeFeedbackCells::UninitializedSentinel(masm->isolate()),
-            masm->isolate()->heap()->the_hole_value());
-
-  // Load the cache state into a3.
-  __ lw(a3, FieldMemOperand(a2, JSGlobalPropertyCell::kValueOffset));
-
-  // A monomorphic cache hit or an already megamorphic state: invoke the
-  // function without changing the state.
-  __ Branch(&done, eq, a3, Operand(a1));
-  __ LoadRoot(at, Heap::kUndefinedValueRootIndex);
-  __ Branch(&done, eq, a3, Operand(at));
-
-  // A monomorphic miss (i.e, here the cache is not uninitialized) goes
-  // megamorphic.
-  __ LoadRoot(at, Heap::kTheHoleValueRootIndex);
-
-  __ Branch(USE_DELAY_SLOT, &done, eq, a3, Operand(at));
-  // An uninitialized cache is patched with the function.
-  // Store a1 in the delay slot. This may or may not get overwritten depending
-  // on the result of the comparison.
-  __ sw(a1, FieldMemOperand(a2, JSGlobalPropertyCell::kValueOffset));
-  // No need for a write barrier here - cells are rescanned.
-
-  // MegamorphicSentinel is an immortal immovable object (undefined) so no
-  // write-barrier is needed.
-  __ LoadRoot(at, Heap::kUndefinedValueRootIndex);
-  __ sw(at, FieldMemOperand(a2, JSGlobalPropertyCell::kValueOffset));
-
-  __ bind(&done);
-}
-
-
 static void GenerateRecordCallTarget(MacroAssembler* masm) {
   // Cache the called function in a global property cell.  Cache states
   // are uninitialized, monomorphic (indicated by a JSFunction), and
   // megamorphic.
   // a1 : the function to call
   // a2 : cache cell for call target
-  ASSERT(FLAG_optimize_constructed_arrays);
   Label initialize, done, miss, megamorphic, not_array_function;
 
   ASSERT_EQ(*TypeFeedbackCells::MegamorphicSentinel(masm->isolate()),
@@ -5086,7 +5038,7 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
             masm->isolate()->heap()->the_hole_value());
 
   // Load the cache state into a3.
-  __ lw(a3, FieldMemOperand(a2, JSGlobalPropertyCell::kValueOffset));
+  __ lw(a3, FieldMemOperand(a2, Cell::kValueOffset));
 
   // A monomorphic cache hit or an already megamorphic state: invoke the
   // function without changing the state.
@@ -5097,11 +5049,15 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
   // Special handling of the Array() function, which caches not only the
   // monomorphic Array function but the initial ElementsKind with special
   // sentinels
-  Handle<Object> terminal_kind_sentinel =
-      TypeFeedbackCells::MonomorphicArraySentinel(masm->isolate(),
-                                                  LAST_FAST_ELEMENTS_KIND);
   __ JumpIfNotSmi(a3, &miss);
-  __ Branch(&miss, gt, a3, Operand(terminal_kind_sentinel));
+  if (FLAG_debug_code) {
+    Handle<Object> terminal_kind_sentinel =
+    TypeFeedbackCells::MonomorphicArraySentinel(masm->isolate(),
+                                                LAST_FAST_ELEMENTS_KIND);
+    __ Assert(le, "Array function sentinel is not an ElementsKind",
+              a3, Operand(terminal_kind_sentinel));
+  }
+
   // Make sure the function is the Array() function
   __ LoadArrayFunction(a3);
   __ Branch(&megamorphic, ne, a1, Operand(a3));
@@ -5117,7 +5073,7 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
   // write-barrier is needed.
   __ bind(&megamorphic);
   __ LoadRoot(at, Heap::kUndefinedValueRootIndex);
-  __ sw(at, FieldMemOperand(a2, JSGlobalPropertyCell::kValueOffset));
+  __ sw(at, FieldMemOperand(a2, Cell::kValueOffset));
   __ jmp(&done);
 
   // An uninitialized cache is patched with the function or sentinel to
@@ -5134,11 +5090,11 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
       TypeFeedbackCells::MonomorphicArraySentinel(masm->isolate(),
           GetInitialFastElementsKind());
   __ li(a3, Operand(initial_kind_sentinel));
-  __ sw(a3, FieldMemOperand(a2, JSGlobalPropertyCell::kValueOffset));
+  __ sw(a3, FieldMemOperand(a2, Cell::kValueOffset));
   __ Branch(&done);
 
   __ bind(&not_array_function);
-  __ sw(a1, FieldMemOperand(a2, JSGlobalPropertyCell::kValueOffset));
+  __ sw(a1, FieldMemOperand(a2, Cell::kValueOffset));
   // No need for a write barrier here - cells are rescanned.
 
   __ bind(&done);
@@ -5177,11 +5133,7 @@ void CallFunctionStub::Generate(MacroAssembler* masm) {
   __ Branch(&slow, ne, a3, Operand(JS_FUNCTION_TYPE));
 
   if (RecordCallTarget()) {
-    if (FLAG_optimize_constructed_arrays) {
-      GenerateRecordCallTarget(masm);
-    } else {
-      GenerateRecordCallTargetNoArray(masm);
-    }
+    GenerateRecordCallTarget(masm);
   }
 
   // Fast-case: Invoke the function now.
@@ -5214,7 +5166,7 @@ void CallFunctionStub::Generate(MacroAssembler* masm) {
     ASSERT_EQ(*TypeFeedbackCells::MegamorphicSentinel(masm->isolate()),
               masm->isolate()->heap()->undefined_value());
     __ LoadRoot(at, Heap::kUndefinedValueRootIndex);
-    __ sw(at, FieldMemOperand(a2, JSGlobalPropertyCell::kValueOffset));
+    __ sw(at, FieldMemOperand(a2, Cell::kValueOffset));
   }
   // Check for function proxy.
   __ Branch(&non_function, ne, a3, Operand(JS_FUNCTION_PROXY_TYPE));
@@ -5255,15 +5207,11 @@ void CallConstructStub::Generate(MacroAssembler* masm) {
   __ Branch(&slow, ne, a3, Operand(JS_FUNCTION_TYPE));
 
   if (RecordCallTarget()) {
-    if (FLAG_optimize_constructed_arrays) {
-      GenerateRecordCallTarget(masm);
-    } else {
-      GenerateRecordCallTargetNoArray(masm);
-    }
+    GenerateRecordCallTarget(masm);
   }
 
   // Jump to the function-specific construct stub.
-  Register jmp_reg = FLAG_optimize_constructed_arrays ? a3 : a2;
+  Register jmp_reg = a3;
   __ lw(jmp_reg, FieldMemOperand(a1, JSFunction::kSharedFunctionInfoOffset));
   __ lw(jmp_reg, FieldMemOperand(jmp_reg,
                                  SharedFunctionInfo::kConstructStubOffset));
@@ -6676,9 +6624,13 @@ void ICCompareStub::GenerateInternalizedStrings(MacroAssembler* masm) {
   __ lbu(tmp1, FieldMemOperand(tmp1, Map::kInstanceTypeOffset));
   __ lbu(tmp2, FieldMemOperand(tmp2, Map::kInstanceTypeOffset));
   STATIC_ASSERT(kInternalizedTag != 0);
-  __ And(tmp1, tmp1, Operand(tmp2));
-  __ And(tmp1, tmp1, kIsInternalizedMask);
-  __ Branch(&miss, eq, tmp1, Operand(zero_reg));
+
+  __ And(tmp1, tmp1, Operand(kIsNotStringMask | kIsInternalizedMask));
+  __ Branch(&miss, ne, tmp1, Operand(kInternalizedTag | kStringTag));
+
+  __ And(tmp2, tmp2, Operand(kIsNotStringMask | kIsInternalizedMask));
+  __ Branch(&miss, ne, tmp2, Operand(kInternalizedTag | kStringTag));
+
   // Make sure a0 is non-zero. At this point input operands are
   // guaranteed to be non-zero.
   ASSERT(right.is(a0));
@@ -6718,17 +6670,8 @@ void ICCompareStub::GenerateUniqueNames(MacroAssembler* masm) {
   __ lbu(tmp1, FieldMemOperand(tmp1, Map::kInstanceTypeOffset));
   __ lbu(tmp2, FieldMemOperand(tmp2, Map::kInstanceTypeOffset));
 
-  Label succeed1;
-  __ And(at, tmp1, Operand(kIsInternalizedMask));
-  __ Branch(&succeed1, ne, at, Operand(zero_reg));
-  __ Branch(&miss, ne, tmp1, Operand(SYMBOL_TYPE));
-  __ bind(&succeed1);
-
-  Label succeed2;
-  __ And(at, tmp2, Operand(kIsInternalizedMask));
-  __ Branch(&succeed2, ne, at, Operand(zero_reg));
-  __ Branch(&miss, ne, tmp2, Operand(SYMBOL_TYPE));
-  __ bind(&succeed2);
+  __ JumpIfNotUniqueName(tmp1, &miss);
+  __ JumpIfNotUniqueName(tmp2, &miss);
 
   // Use a0 as result
   __ mov(v0, a0);
@@ -6791,7 +6734,8 @@ void ICCompareStub::GenerateStrings(MacroAssembler* masm) {
   // Handle not identical strings.
 
   // Check that both strings are internalized strings. If they are, we're done
-  // because we already know they are not identical.
+  // because we already know they are not identical. We know they are both
+  // strings.
   if (equality) {
     ASSERT(GetCondition() == eq);
     STATIC_ASSERT(kInternalizedTag != 0);
@@ -6912,13 +6856,6 @@ void DirectCEntryStub::Generate(MacroAssembler* masm) {
 
 
 void DirectCEntryStub::GenerateCall(MacroAssembler* masm,
-                                    ExternalReference function) {
-  __ li(t9, Operand(function));
-  this->GenerateCall(masm, t9);
-}
-
-
-void DirectCEntryStub::GenerateCall(MacroAssembler* masm,
                                     Register target) {
   __ Move(t9, target);
   __ AssertStackIsAligned();
@@ -7003,10 +6940,7 @@ void NameDictionaryLookupStub::GenerateNegativeLookup(MacroAssembler* masm,
     __ lw(entity_name, FieldMemOperand(entity_name, HeapObject::kMapOffset));
     __ lbu(entity_name,
            FieldMemOperand(entity_name, Map::kInstanceTypeOffset));
-    __ And(scratch0, entity_name, Operand(kIsInternalizedMask));
-    __ Branch(&good, ne, scratch0, Operand(zero_reg));
-    __ Branch(miss, ne, entity_name, Operand(SYMBOL_TYPE));
-
+    __ JumpIfNotUniqueName(entity_name, miss);
     __ bind(&good);
 
     // Restore the properties.
@@ -7180,14 +7114,10 @@ void NameDictionaryLookupStub::Generate(MacroAssembler* masm) {
 
     if (i != kTotalProbes - 1 && mode_ == NEGATIVE_LOOKUP) {
       // Check if the entry name is not a unique name.
-      Label cont;
       __ lw(entry_key, FieldMemOperand(entry_key, HeapObject::kMapOffset));
       __ lbu(entry_key,
              FieldMemOperand(entry_key, Map::kInstanceTypeOffset));
-      __ And(result, entry_key, Operand(kIsInternalizedMask));
-      __ Branch(&cont, ne, result, Operand(zero_reg));
-      __ Branch(&maybe_in_dictionary, ne, entry_key, Operand(SYMBOL_TYPE));
-      __ bind(&cont);
+      __ JumpIfNotUniqueName(entry_key, &maybe_in_dictionary);
     }
   }
 
@@ -7500,10 +7430,10 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
 void StoreArrayLiteralElementStub::Generate(MacroAssembler* masm) {
   // ----------- S t a t e -------------
   //  -- a0    : element value to store
-  //  -- a1    : array literal
-  //  -- a2    : map of array literal
   //  -- a3    : element index as smi
-  //  -- t0    : array literal index in function as smi
+  //  -- sp[0] : array literal index in function as smi
+  //  -- sp[4] : array literal
+  // clobbers a1, a2, t0
   // -----------------------------------
 
   Label element_done;
@@ -7512,6 +7442,11 @@ void StoreArrayLiteralElementStub::Generate(MacroAssembler* masm) {
   Label slow_elements;
   Label fast_elements;
 
+  // Get array literal index, array literal and its map.
+  __ lw(t0, MemOperand(sp, 0 * kPointerSize));
+  __ lw(a1, MemOperand(sp, 1 * kPointerSize));
+  __ lw(a2, FieldMemOperand(a1, JSObject::kMapOffset));
+
   __ CheckFastElements(a2, t1, &double_elements);
   // Check for FAST_*_SMI_ELEMENTS or FAST_*_ELEMENTS elements
   __ JumpIfSmi(a0, &smi_element);
@@ -7579,7 +7514,8 @@ void StubFailureTrampolineStub::Generate(MacroAssembler* masm) {
 
 
 void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) {
-  if (entry_hook_ != NULL) {
+  if (masm->isolate()->function_entry_hook() != NULL) {
+    AllowStubCallsScope allow_stub_calls(masm, true);
     ProfileEntryHookStub stub;
     __ push(ra);
     __ CallStub(&stub);
@@ -7594,9 +7530,16 @@ void ProfileEntryHookStub::Generate(MacroAssembler* masm) {
   const int32_t kReturnAddressDistanceFromFunctionStart =
       Assembler::kCallTargetAddressOffset + (2 * Assembler::kInstrSize);
 
-  // Save live volatile registers.
-  __ Push(ra, t1, a1);
-  const int32_t kNumSavedRegs = 3;
+  // This should contain all kJSCallerSaved registers.
+  const RegList kSavedRegs =
+     kJSCallerSaved |  // Caller saved registers.
+     s5.bit();         // Saved stack pointer.
+
+  // We also save ra, so the count here is one higher than the mask indicates.
+  const int32_t kNumSavedRegs = kNumJSCallerSaved + 2;
+
+  // Save all caller-save registers as this may be called from anywhere.
+  __ MultiPush(kSavedRegs | ra.bit());
 
   // Compute the function's address for the first argument.
   __ Subu(a0, ra, Operand(kReturnAddressDistanceFromFunctionStart));
@@ -7608,20 +7551,19 @@ void ProfileEntryHookStub::Generate(MacroAssembler* masm) {
   // Align the stack if necessary.
   int frame_alignment = masm->ActivationFrameAlignment();
   if (frame_alignment > kPointerSize) {
-    __ mov(t1, sp);
+    __ mov(s5, sp);
     ASSERT(IsPowerOf2(frame_alignment));
     __ And(sp, sp, Operand(-frame_alignment));
   }
 
 #if defined(V8_HOST_ARCH_MIPS)
-  __ li(at, Operand(reinterpret_cast<int32_t>(&entry_hook_)));
-  __ lw(at, MemOperand(at));
+  int32_t entry_hook =
+      reinterpret_cast<int32_t>(masm->isolate()->function_entry_hook());
+  __ li(at, Operand(entry_hook));
 #else
   // Under the simulator we need to indirect the entry hook through a
   // trampoline function at a known address.
-  Address trampoline_address = reinterpret_cast<Address>(
-      reinterpret_cast<intptr_t>(EntryHookTrampoline));
-  ApiFunction dispatcher(trampoline_address);
+  ApiFunction dispatcher(FUNCTION_ADDR(EntryHookTrampoline));
   __ li(at, Operand(ExternalReference(&dispatcher,
                                       ExternalReference::BUILTIN_CALL,
                                       masm->isolate())));
@@ -7630,10 +7572,11 @@ void ProfileEntryHookStub::Generate(MacroAssembler* masm) {
 
   // Restore the stack pointer if needed.
   if (frame_alignment > kPointerSize) {
-    __ mov(sp, t1);
+    __ mov(sp, s5);
   }
 
-  __ Pop(ra, t1, a1);
+  // Also pop ra to get Ret(0).
+  __ MultiPop(kSavedRegs | ra.bit());
   __ Ret();
 }
 
@@ -7687,6 +7630,10 @@ static void CreateArrayDispatchOneArgument(MacroAssembler* masm) {
   __ Addu(a3, a3, Operand(1));
   __ Branch(&normal_sequence, eq, a2, Operand(undefined_sentinel));
 
+  // The type cell may have gone megamorphic, don't overwrite if so.
+  __ lw(t1, FieldMemOperand(a2, kPointerSize));
+  __ JumpIfNotSmi(t1, &normal_sequence);
+
   // Save the resulting elements kind in type info
   __ SmiTag(a3);
   __ sw(a3, FieldMemOperand(a2, kPointerSize));
@@ -7718,7 +7665,7 @@ static void ArrayConstructorStubAheadOfTimeHelper(Isolate* isolate) {
     T stub(kind);
     stub.GetCode(isolate)->set_is_pregenerated(true);
     if (AllocationSiteInfo::GetMode(kind) != DONT_TRACK_ALLOCATION_SITE) {
-      T stub1(kind, true);
+      T stub1(kind, CONTEXT_CHECK_REQUIRED, DISABLE_ALLOCATION_SITES);
       stub1.GetCode(isolate)->set_is_pregenerated(true);
     }
   }
@@ -7776,61 +7723,47 @@ void ArrayConstructorStub::Generate(MacroAssembler* masm) {
     __ Assert(eq, "Unexpected initial map for Array function",
         t0, Operand(MAP_TYPE));
 
-    // We should either have undefined in ebx or a valid jsglobalpropertycell
+    // We should either have undefined in a2 or a valid cell
     Label okay_here;
-    Handle<Map> global_property_cell_map(
-        masm->isolate()->heap()->global_property_cell_map());
+    Handle<Map> cell_map = masm->isolate()->factory()->cell_map();
     __ Branch(&okay_here, eq, a2, Operand(undefined_sentinel));
     __ lw(a3, FieldMemOperand(a2, 0));
-    __ Assert(eq, "Expected property cell in register ebx",
-        a3, Operand(global_property_cell_map));
+    __ Assert(eq, "Expected property cell in register a2",
+        a3, Operand(cell_map));
     __ bind(&okay_here);
   }
 
-  if (FLAG_optimize_constructed_arrays) {
-    Label no_info, switch_ready;
-    // Get the elements kind and case on that.
-    __ Branch(&no_info, eq, a2, Operand(undefined_sentinel));
-    __ lw(a3, FieldMemOperand(a2, JSGlobalPropertyCell::kValueOffset));
-    __ JumpIfNotSmi(a3, &no_info);
-    __ SmiUntag(a3);
-    __ jmp(&switch_ready);
-    __ bind(&no_info);
-    __ li(a3, Operand(GetInitialFastElementsKind()));
-    __ bind(&switch_ready);
-
-    if (argument_count_ == ANY) {
-      Label not_zero_case, not_one_case;
-      __ And(at, a0, a0);
-      __ Branch(&not_zero_case, ne, at, Operand(zero_reg));
-      CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm);
-
-      __ bind(&not_zero_case);
-      __ Branch(&not_one_case, gt, a0, Operand(1));
-      CreateArrayDispatchOneArgument(masm);
-
-      __ bind(&not_one_case);
-      CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm);
-    } else if (argument_count_ == NONE) {
-      CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm);
-    } else if (argument_count_ == ONE) {
-      CreateArrayDispatchOneArgument(masm);
-    } else if (argument_count_ == MORE_THAN_ONE) {
-      CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm);
-    } else {
-     UNREACHABLE();
-    }
+  Label no_info, switch_ready;
+  // Get the elements kind and case on that.
+  __ Branch(&no_info, eq, a2, Operand(undefined_sentinel));
+  __ lw(a3, FieldMemOperand(a2, Cell::kValueOffset));
+  __ JumpIfNotSmi(a3, &no_info);
+  __ SmiUntag(a3);
+  __ jmp(&switch_ready);
+  __ bind(&no_info);
+  __ li(a3, Operand(GetInitialFastElementsKind()));
+  __ bind(&switch_ready);
+
+  if (argument_count_ == ANY) {
+    Label not_zero_case, not_one_case;
+    __ And(at, a0, a0);
+    __ Branch(&not_zero_case, ne, at, Operand(zero_reg));
+    CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm);
+
+    __ bind(&not_zero_case);
+    __ Branch(&not_one_case, gt, a0, Operand(1));
+    CreateArrayDispatchOneArgument(masm);
+
+    __ bind(&not_one_case);
+    CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm);
+  } else if (argument_count_ == NONE) {
+    CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm);
+  } else if (argument_count_ == ONE) {
+    CreateArrayDispatchOneArgument(masm);
+  } else if (argument_count_ == MORE_THAN_ONE) {
+    CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm);
   } else {
-     Label generic_constructor;
-     // Run the native code for the Array function called as a constructor.
-     ArrayNativeCode(masm, &generic_constructor);
-
-     // Jump to the generic construct code in case the specialized code cannot
-     // handle the construction.
-     __ bind(&generic_constructor);
-     Handle<Code> generic_construct_stub =
-         masm->isolate()->builtins()->JSConstructStubGeneric();
-     __ Jump(generic_construct_stub, RelocInfo::CODE_TARGET);
+    UNREACHABLE();
   }
 }
 
@@ -7891,43 +7824,30 @@ void InternalArrayConstructorStub::Generate(MacroAssembler* masm) {
         t0, Operand(MAP_TYPE));
   }
 
-  if (FLAG_optimize_constructed_arrays) {
-    // Figure out the right elements kind.
-    __ lw(a3, FieldMemOperand(a1, JSFunction::kPrototypeOrInitialMapOffset));
-
-    // Load the map's "bit field 2" into a3. We only need the first byte,
-    // but the following bit field extraction takes care of that anyway.
-    __ lbu(a3, FieldMemOperand(a3, Map::kBitField2Offset));
-    // Retrieve elements_kind from bit field 2.
-    __ Ext(a3, a3, Map::kElementsKindShift, Map::kElementsKindBitCount);
+  // Figure out the right elements kind.
+  __ lw(a3, FieldMemOperand(a1, JSFunction::kPrototypeOrInitialMapOffset));
 
-    if (FLAG_debug_code) {
-      Label done;
-      __ Branch(&done, eq, a3, Operand(FAST_ELEMENTS));
-      __ Assert(
-          eq, "Invalid ElementsKind for InternalArray or InternalPackedArray",
-          a3, Operand(FAST_HOLEY_ELEMENTS));
-      __ bind(&done);
-    }
+  // Load the map's "bit field 2" into a3. We only need the first byte,
+  // but the following bit field extraction takes care of that anyway.
+  __ lbu(a3, FieldMemOperand(a3, Map::kBitField2Offset));
+  // Retrieve elements_kind from bit field 2.
+  __ Ext(a3, a3, Map::kElementsKindShift, Map::kElementsKindBitCount);
 
-    Label fast_elements_case;
-    __ Branch(&fast_elements_case, eq, a3, Operand(FAST_ELEMENTS));
-    GenerateCase(masm, FAST_HOLEY_ELEMENTS);
+  if (FLAG_debug_code) {
+    Label done;
+    __ Branch(&done, eq, a3, Operand(FAST_ELEMENTS));
+    __ Assert(
+        eq, "Invalid ElementsKind for InternalArray or InternalPackedArray",
+        a3, Operand(FAST_HOLEY_ELEMENTS));
+    __ bind(&done);
+  }
 
-    __ bind(&fast_elements_case);
-    GenerateCase(masm, FAST_ELEMENTS);
-  } else {
-    Label generic_constructor;
-    // Run the native code for the Array function called as constructor.
-    ArrayNativeCode(masm, &generic_constructor);
+  Label fast_elements_case;
+  __ Branch(&fast_elements_case, eq, a3, Operand(FAST_ELEMENTS));
+  GenerateCase(masm, FAST_HOLEY_ELEMENTS);
 
-    // Jump to the generic construct code in case the specialized code cannot
-    // handle the construction.
-    __ bind(&generic_constructor);
-    Handle<Code> generic_construct_stub =
-        masm->isolate()->builtins()->JSConstructStubGeneric();
-    __ Jump(generic_construct_stub, RelocInfo::CODE_TARGET);
-  }
+  __ bind(&fast_elements_case);
+  GenerateCase(masm, FAST_ELEMENTS);
 }
 
 
index ec7d147..bf5db10 100644 (file)
@@ -599,8 +599,6 @@ class DirectCEntryStub: public PlatformCodeStub {
  public:
   DirectCEntryStub() {}
   void Generate(MacroAssembler* masm);
-  void GenerateCall(MacroAssembler* masm,
-                                ExternalReference function);
   void GenerateCall(MacroAssembler* masm, Register target);
 
  private:
index 72eb00b..7a95bc4 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_MIPS
 
 #include "codegen.h"
 #include "macro-assembler.h"
index ddfa891..a20ec54 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_MIPS
 
 #include "constants-mips.h"
 
index 93ebeda..d13b233 100644 (file)
@@ -36,7 +36,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_MIPS
 
 #include "cpu.h"
 #include "macro-assembler.h"
index 0ae0187..30cc4db 100644 (file)
@@ -29,7 +29,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_MIPS
 
 #include "codegen.h"
 #include "debug.h"
index b787f13..708df39 100644 (file)
@@ -56,7 +56,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_MIPS
 
 #include "mips/constants-mips.h"
 #include "disasm.h"
index 540caa9..1bd5116 100644 (file)
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_MIPS
 
 #include "assembler.h"
 #include "assembler-mips.h"
 #include "assembler-mips-inl.h"
-#include "frames-inl.h"
-#include "mips/assembler-mips-inl.h"
-#include "macro-assembler.h"
-#include "macro-assembler-mips.h"
+#include "frames.h"
 
 namespace v8 {
 namespace internal {
 
 
-Address ExitFrame::ComputeStackPointer(Address fp) {
-  return Memory::Address_at(fp + ExitFrameConstants::kSPOffset);
-}
-
-
 Register JavaScriptFrame::fp_register() { return v8::internal::fp; }
 Register JavaScriptFrame::context_register() { return cp; }
 
index 7368ead..032c1f5 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_MIPS
 
 // Note on Mips implementation:
 //
@@ -138,7 +138,7 @@ void FullCodeGenerator::Generate() {
   CompilationInfo* info = info_;
   handler_table_ =
       isolate()->factory()->NewFixedArray(function()->handler_count(), TENURED);
-  profiling_counter_ = isolate()->factory()->NewJSGlobalPropertyCell(
+  profiling_counter_ = isolate()->factory()->NewCell(
       Handle<Smi>(Smi::FromInt(FLAG_interrupt_budget), isolate()));
   SetFunctionPosition(function());
   Comment cmnt(masm_, "[ function compiled by full code generator");
@@ -326,9 +326,9 @@ void FullCodeGenerator::ClearAccumulator() {
 
 void FullCodeGenerator::EmitProfilingCounterDecrement(int delta) {
   __ li(a2, Operand(profiling_counter_));
-  __ lw(a3, FieldMemOperand(a2, JSGlobalPropertyCell::kValueOffset));
+  __ lw(a3, FieldMemOperand(a2, Cell::kValueOffset));
   __ Subu(a3, a3, Operand(Smi::FromInt(delta)));
-  __ sw(a3, FieldMemOperand(a2, JSGlobalPropertyCell::kValueOffset));
+  __ sw(a3, FieldMemOperand(a2, Cell::kValueOffset));
 }
 
 
@@ -344,7 +344,7 @@ void FullCodeGenerator::EmitProfilingCounterReset() {
   }
   __ li(a2, Operand(profiling_counter_));
   __ li(a3, Operand(Smi::FromInt(reset_value)));
-  __ sw(a3, FieldMemOperand(a2, JSGlobalPropertyCell::kValueOffset));
+  __ sw(a3, FieldMemOperand(a2, Cell::kValueOffset));
 }
 
 
@@ -363,7 +363,7 @@ void FullCodeGenerator::EmitBackEdgeBookkeeping(IterationStatement* stmt,
     ASSERT(back_edge_target->is_bound());
     int distance = masm_->SizeOfCodeGeneratedSince(back_edge_target);
     weight = Min(kMaxBackEdgeWeight,
-                 Max(1, distance / kBackEdgeDistanceUnit));
+                 Max(1, distance / kCodeSizeMultiplier));
   }
   EmitProfilingCounterDecrement(weight);
   __ slt(at, a3, zero_reg);
@@ -406,7 +406,7 @@ void FullCodeGenerator::EmitReturnSequence() {
       } else if (FLAG_weighted_back_edges) {
         int distance = masm_->pc_offset();
         weight = Min(kMaxBackEdgeWeight,
-                     Max(1, distance / kBackEdgeDistanceUnit));
+                     Max(1, distance / kCodeSizeMultiplier));
       }
       EmitProfilingCounterDecrement(weight);
       Label ok;
@@ -1164,15 +1164,13 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) {
   Label non_proxy;
   __ bind(&fixed_array);
 
-  Handle<JSGlobalPropertyCell> cell =
-      isolate()->factory()->NewJSGlobalPropertyCell(
-          Handle<Object>(
-              Smi::FromInt(TypeFeedbackCells::kForInFastCaseMarker),
-              isolate()));
+  Handle<Cell> cell = isolate()->factory()->NewCell(
+      Handle<Object>(Smi::FromInt(TypeFeedbackCells::kForInFastCaseMarker),
+                     isolate()));
   RecordTypeFeedbackCell(stmt->ForInFeedbackId(), cell);
   __ LoadHeapObject(a1, cell);
   __ li(a2, Operand(Smi::FromInt(TypeFeedbackCells::kForInSlowCaseMarker)));
-  __ sw(a2, FieldMemOperand(a1, JSGlobalPropertyCell::kValueOffset));
+  __ sw(a2, FieldMemOperand(a1, Cell::kValueOffset));
 
   __ li(a1, Operand(Smi::FromInt(1)));  // Smi indicates slow check
   __ lw(a2, MemOperand(sp, 0 * kPointerSize));  // Get enumerated object
@@ -1696,11 +1694,11 @@ void FullCodeGenerator::VisitObjectLiteral(ObjectLiteral* expr) {
         ASSERT(!CompileTimeValue::IsCompileTimeValue(property->value()));
         // Fall through.
       case ObjectLiteral::Property::COMPUTED:
-        if (key->handle()->IsInternalizedString()) {
+        if (key->value()->IsInternalizedString()) {
           if (property->emit_store()) {
             VisitForAccumulatorValue(value);
             __ mov(a0, result_register());
-            __ li(a2, Operand(key->handle()));
+            __ li(a2, Operand(key->value()));
             __ lw(a1, MemOperand(sp));
             Handle<Code> ic = is_classic_mode()
                 ? isolate()->builtins()->StoreIC_Initialize()
@@ -1836,13 +1834,11 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
     Expression* subexpr = subexprs->at(i);
     // If the subexpression is a literal or a simple materialized literal it
     // is already set in the cloned array.
-    if (subexpr->AsLiteral() != NULL ||
-        CompileTimeValue::IsCompileTimeValue(subexpr)) {
-      continue;
-    }
+    if (CompileTimeValue::IsCompileTimeValue(subexpr)) continue;
 
     if (!result_saved) {
-      __ push(v0);
+      __ push(v0);  // array literal
+      __ Push(Smi::FromInt(expr->literal_index()));
       result_saved = true;
     }
 
@@ -1850,7 +1846,7 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
 
     if (IsFastObjectElementsKind(constant_elements_kind)) {
       int offset = FixedArray::kHeaderSize + (i * kPointerSize);
-      __ lw(t2, MemOperand(sp));  // Copy of array literal.
+      __ lw(t2, MemOperand(sp, kPointerSize));  // Copy of array literal.
       __ lw(a1, FieldMemOperand(t2, JSObject::kElementsOffset));
       __ sw(result_register(), FieldMemOperand(a1, offset));
       // Update the write barrier for the array store.
@@ -1858,10 +1854,7 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
                           kRAHasBeenSaved, kDontSaveFPRegs,
                           EMIT_REMEMBERED_SET, INLINE_SMI_CHECK);
     } else {
-      __ lw(a1, MemOperand(sp));  // Copy of array literal.
-      __ lw(a2, FieldMemOperand(a1, JSObject::kMapOffset));
       __ li(a3, Operand(Smi::FromInt(i)));
-      __ li(t0, Operand(Smi::FromInt(expr->literal_index())));
       __ mov(a0, result_register());
       StoreArrayLiteralElementStub stub;
       __ CallStub(&stub);
@@ -1870,6 +1863,7 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
     PrepareForBailoutForId(expr->GetIdForElement(i), NO_REGISTERS);
   }
   if (result_saved) {
+    __ Pop();  // literal index
     context()->PlugTOS();
   } else {
     context()->Plug(v0);
@@ -1998,22 +1992,36 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
   VisitForStackValue(expr->expression());
 
   switch (expr->yield_kind()) {
-    case Yield::INITIAL:
-    case Yield::SUSPEND: {
-      VisitForStackValue(expr->generator_object());
-      __ CallRuntime(Runtime::kSuspendJSGeneratorObject, 1);
-      __ lw(context_register(),
-            MemOperand(fp, StandardFrameConstants::kContextOffset));
+    case Yield::SUSPEND:
+      // Pop value from top-of-stack slot; box result into result register.
+      EmitCreateIteratorResult(false);
+      __ push(result_register());
+      // Fall through.
+    case Yield::INITIAL: {
+      Label suspend, continuation, post_runtime, resume;
 
-      Label resume;
-      __ LoadRoot(at, Heap::kTheHoleValueRootIndex);
-      __ Branch(&resume, ne, result_register(), Operand(at));
-      if (expr->yield_kind() == Yield::SUSPEND) {
-        EmitReturnIteratorResult(false);
-      } else {
-        __ pop(result_register());
-        EmitReturnSequence();
-      }
+      __ jmp(&suspend);
+
+      __ bind(&continuation);
+      __ jmp(&resume);
+
+      __ bind(&suspend);
+      VisitForAccumulatorValue(expr->generator_object());
+      ASSERT(continuation.pos() > 0 && Smi::IsValid(continuation.pos()));
+      __ li(a1, Operand(Smi::FromInt(continuation.pos())));
+      __ sw(a1, FieldMemOperand(v0, JSGeneratorObject::kContinuationOffset));
+      __ sw(cp, FieldMemOperand(v0, JSGeneratorObject::kContextOffset));
+      __ mov(a1, cp);
+      __ RecordWriteField(v0, JSGeneratorObject::kContextOffset, a1, a2,
+                          kRAHasBeenSaved, kDontSaveFPRegs);
+      __ Addu(a1, fp, Operand(StandardFrameConstants::kExpressionsOffset));
+      __ Branch(&post_runtime, eq, sp, Operand(a1));
+      __ push(v0);  // generator object
+      __ CallRuntime(Runtime::kSuspendJSGeneratorObject, 1);
+      __ lw(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
+      __ bind(&post_runtime);
+      __ pop(result_register());
+      EmitReturnSequence();
 
       __ bind(&resume);
       context()->Plug(result_register());
@@ -2025,7 +2033,10 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
       __ li(a1, Operand(Smi::FromInt(JSGeneratorObject::kGeneratorClosed)));
       __ sw(a1, FieldMemOperand(result_register(),
                                 JSGeneratorObject::kContinuationOffset));
-      EmitReturnIteratorResult(true);
+      // Pop value from top-of-stack slot, box result into result register.
+      EmitCreateIteratorResult(true);
+      EmitUnwindBeforeReturn();
+      EmitReturnSequence();
       break;
     }
 
@@ -2036,83 +2047,70 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
       // [sp + 1 * kPointerSize] iter
       // [sp + 0 * kPointerSize] g
 
-      Label l_catch, l_try, l_resume, l_next, l_call, l_loop;
+      Label l_catch, l_try, l_suspend, l_continuation, l_resume;
+      Label l_next, l_call, l_loop;
       // Initial send value is undefined.
       __ LoadRoot(a0, Heap::kUndefinedValueRootIndex);
       __ Branch(&l_next);
 
-      // catch (e) { receiver = iter; f = iter.throw; arg = e; goto l_call; }
+      // catch (e) { receiver = iter; f = 'throw'; arg = e; goto l_call; }
       __ bind(&l_catch);
       __ mov(a0, v0);
       handler_table()->set(expr->index(), Smi::FromInt(l_catch.pos()));
+      __ LoadRoot(a2, Heap::kthrow_stringRootIndex);     // "throw"
       __ lw(a3, MemOperand(sp, 1 * kPointerSize));       // iter
       __ push(a3);                                       // iter
       __ push(a0);                                       // exception
-      __ mov(a0, a3);                                    // iter
-      __ LoadRoot(a2, Heap::kthrow_stringRootIndex);     // "throw"
-      Handle<Code> throw_ic = isolate()->builtins()->LoadIC_Initialize();
-      CallIC(throw_ic);                                  // iter.throw in a0
-      __ mov(a0, v0);
       __ jmp(&l_call);
 
-      // try { received = yield result.value }
+      // try { received = %yield result }
+      // Shuffle the received result above a try handler and yield it without
+      // re-boxing.
       __ bind(&l_try);
-      __ pop(a0);                                        // result.value
+      __ pop(a0);                                        // result
       __ PushTryHandler(StackHandler::CATCH, expr->index());
       const int handler_size = StackHandlerConstants::kSize;
-      __ push(a0);                                       // result.value
-      __ lw(a3, MemOperand(sp, (0 + 1) * kPointerSize + handler_size));  // g
-      __ push(a3);                                       // g
-      __ CallRuntime(Runtime::kSuspendJSGeneratorObject, 1);
+      __ push(a0);                                       // result
+      __ jmp(&l_suspend);
+      __ bind(&l_continuation);
       __ mov(a0, v0);
-      __ lw(context_register(),
-            MemOperand(fp, StandardFrameConstants::kContextOffset));
-      __ LoadRoot(at, Heap::kTheHoleValueRootIndex);
-      __ Branch(&l_resume, ne, a0, Operand(at));
-      EmitReturnIteratorResult(false);
+      __ jmp(&l_resume);
+      __ bind(&l_suspend);
+      const int generator_object_depth = kPointerSize + handler_size;
+      __ lw(a0, MemOperand(sp, generator_object_depth));
+      __ push(a0);                                       // g
+      ASSERT(l_continuation.pos() > 0 && Smi::IsValid(l_continuation.pos()));
+      __ li(a1, Operand(Smi::FromInt(l_continuation.pos())));
+      __ sw(a1, FieldMemOperand(a0, JSGeneratorObject::kContinuationOffset));
+      __ sw(cp, FieldMemOperand(a0, JSGeneratorObject::kContextOffset));
+      __ mov(a1, cp);
+      __ RecordWriteField(a0, JSGeneratorObject::kContextOffset, a1, a2,
+                          kRAHasBeenSaved, kDontSaveFPRegs);
+      __ CallRuntime(Runtime::kSuspendJSGeneratorObject, 1);
+      __ lw(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
+      __ pop(v0);                                        // result
+      EmitReturnSequence();
       __ mov(a0, v0);
       __ bind(&l_resume);                                // received in a0
       __ PopTryHandler();
 
-      // receiver = iter; f = iter.next; arg = received;
+      // receiver = iter; f = 'next'; arg = received;
       __ bind(&l_next);
+      __ LoadRoot(a2, Heap::knext_stringRootIndex);      // "next"
       __ lw(a3, MemOperand(sp, 1 * kPointerSize));       // iter
       __ push(a3);                                       // iter
       __ push(a0);                                       // received
-      __ mov(a0, a3);                                    // iter
-      __ LoadRoot(a2, Heap::knext_stringRootIndex);      // "next"
-      Handle<Code> next_ic = isolate()->builtins()->LoadIC_Initialize();
-      CallIC(next_ic);                                   // iter.next in a0
-      __ mov(a0, v0);
 
-      // result = f.call(receiver, arg);
+      // result = receiver[f](arg);
       __ bind(&l_call);
-      Label l_call_runtime;
-      __ JumpIfSmi(a0, &l_call_runtime);
-      __ GetObjectType(a0, a1, a1);
-      __ Branch(&l_call_runtime, ne, a1, Operand(JS_FUNCTION_TYPE));
-      __ mov(a1, a0);
-      ParameterCount count(1);
-      __ InvokeFunction(a1, count, CALL_FUNCTION,
-                        NullCallWrapper(), CALL_AS_METHOD);
+      Handle<Code> ic = isolate()->stub_cache()->ComputeKeyedCallInitialize(1);
+      CallIC(ic);
       __ lw(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
-      __ jmp(&l_loop);
-      __ bind(&l_call_runtime);
-      __ push(a0);
-      __ CallRuntime(Runtime::kCall, 3);
 
-      // val = result.value; if (!result.done) goto l_try;
+      // if (!result.done) goto l_try;
       __ bind(&l_loop);
       __ mov(a0, v0);
-      // result.value
       __ push(a0);                                       // save result
-      __ LoadRoot(a2, Heap::kvalue_stringRootIndex);     // "value"
-      Handle<Code> value_ic = isolate()->builtins()->LoadIC_Initialize();
-      CallIC(value_ic);                                  // result.value in a0
-      __ mov(a0, v0);
-      __ pop(a1);                                        // result
-      __ push(a0);                                       // result.value
-      __ mov(a0, a1);                                    // result
       __ LoadRoot(a2, Heap::kdone_stringRootIndex);      // "done"
       Handle<Code> done_ic = isolate()->builtins()->LoadIC_Initialize();
       CallIC(done_ic);                                   // result.done in v0
@@ -2122,7 +2120,10 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
       __ Branch(&l_try, eq, v0, Operand(zero_reg));
 
       // result.value
-      __ pop(v0);                                        // result.value
+      __ pop(a0);                                        // result
+      __ LoadRoot(a2, Heap::kvalue_stringRootIndex);     // "value"
+      Handle<Code> value_ic = isolate()->builtins()->LoadIC_Initialize();
+      CallIC(value_ic);                                  // result.value in v0
       context()->DropAndPlug(2, v0);                     // drop iter and g
       break;
     }
@@ -2162,7 +2163,7 @@ void FullCodeGenerator::EmitGeneratorResume(Expression *generator,
   __ LoadRoot(a2, Heap::kTheHoleValueRootIndex);
   Label push_argument_holes, push_frame;
   __ bind(&push_argument_holes);
-  __ Subu(a3, a3, Operand(1));
+  __ Subu(a3, a3, Operand(Smi::FromInt(1)));
   __ Branch(&push_frame, lt, a3, Operand(zero_reg));
   __ push(a2);
   __ jmp(&push_argument_holes);
@@ -2226,13 +2227,20 @@ void FullCodeGenerator::EmitGeneratorResume(Expression *generator,
 }
 
 
-void FullCodeGenerator::EmitReturnIteratorResult(bool done) {
+void FullCodeGenerator::EmitCreateIteratorResult(bool done) {
   Label gc_required;
   Label allocated;
 
   Handle<Map> map(isolate()->native_context()->generator_result_map());
 
   __ Allocate(map->instance_size(), a0, a2, a3, &gc_required, TAG_OBJECT);
+  __ jmp(&allocated);
+
+  __ bind(&gc_required);
+  __ Push(Smi::FromInt(map->instance_size()));
+  __ CallRuntime(Runtime::kAllocateInNewSpace, 1);
+  __ lw(context_register(),
+        MemOperand(fp, StandardFrameConstants::kContextOffset));
 
   __ bind(&allocated);
   __ li(a1, Operand(map));
@@ -2252,27 +2260,7 @@ void FullCodeGenerator::EmitReturnIteratorResult(bool done) {
   // root set.
   __ RecordWriteField(a0, JSGeneratorObject::kResultValuePropertyOffset,
                       a2, a3, kRAHasBeenSaved, kDontSaveFPRegs);
-
-  if (done) {
-    // Exit all nested statements.
-    NestedStatement* current = nesting_stack_;
-    int stack_depth = 0;
-    int context_length = 0;
-    while (current != NULL) {
-      current = current->Exit(&stack_depth, &context_length);
-    }
-    __ Drop(stack_depth);
-  }
-
   __ mov(result_register(), a0);
-  EmitReturnSequence();
-
-  __ bind(&gc_required);
-  __ Push(Smi::FromInt(map->instance_size()));
-  __ CallRuntime(Runtime::kAllocateInNewSpace, 1);
-  __ lw(context_register(),
-        MemOperand(fp, StandardFrameConstants::kContextOffset));
-  __ jmp(&allocated);
 }
 
 
@@ -2280,7 +2268,7 @@ void FullCodeGenerator::EmitNamedPropertyLoad(Property* prop) {
   SetSourcePosition(prop->position());
   Literal* key = prop->key()->AsLiteral();
   __ mov(a0, result_register());
-  __ li(a2, Operand(key->handle()));
+  __ li(a2, Operand(key->value()));
   // Call load IC. It has arguments receiver and property name a0 and a2.
   Handle<Code> ic = isolate()->builtins()->LoadIC_Initialize();
   CallIC(ic, RelocInfo::CODE_TARGET, prop->PropertyFeedbackId());
@@ -2442,7 +2430,7 @@ void FullCodeGenerator::EmitAssignment(Expression* expr) {
       VisitForAccumulatorValue(prop->obj());
       __ mov(a1, result_register());
       __ pop(a0);  // Restore value.
-      __ li(a2, Operand(prop->key()->AsLiteral()->handle()));
+      __ li(a2, Operand(prop->key()->AsLiteral()->value()));
       Handle<Code> ic = is_classic_mode()
           ? isolate()->builtins()->StoreIC_Initialize()
           : isolate()->builtins()->StoreIC_Initialize_Strict();
@@ -2573,7 +2561,7 @@ void FullCodeGenerator::EmitNamedPropertyAssignment(Assignment* expr) {
   // Record source code position before IC call.
   SetSourcePosition(expr->position());
   __ mov(a0, result_register());  // Load the value.
-  __ li(a2, Operand(prop->key()->AsLiteral()->handle()));
+  __ li(a2, Operand(prop->key()->AsLiteral()->value()));
   __ pop(a1);
 
   Handle<Code> ic = is_classic_mode()
@@ -2711,8 +2699,7 @@ void FullCodeGenerator::EmitCallWithStub(Call* expr, CallFunctionFlags flags) {
   flags = static_cast<CallFunctionFlags>(flags | RECORD_CALL_TARGET);
   Handle<Object> uninitialized =
       TypeFeedbackCells::UninitializedSentinel(isolate());
-  Handle<JSGlobalPropertyCell> cell =
-      isolate()->factory()->NewJSGlobalPropertyCell(uninitialized);
+  Handle<Cell> cell = isolate()->factory()->NewCell(uninitialized);
   RecordTypeFeedbackCell(expr->CallFeedbackId(), cell);
   __ li(a2, Operand(cell));
 
@@ -2852,7 +2839,7 @@ void FullCodeGenerator::VisitCall(Call* expr) {
     }
     if (property->key()->IsPropertyName()) {
       EmitCallWithIC(expr,
-                     property->key()->AsLiteral()->handle(),
+                     property->key()->AsLiteral()->value(),
                      RelocInfo::CODE_TARGET);
     } else {
       EmitKeyedCallWithIC(expr, property->key());
@@ -2906,8 +2893,7 @@ void FullCodeGenerator::VisitCallNew(CallNew* expr) {
   // Record call targets in unoptimized code.
   Handle<Object> uninitialized =
      TypeFeedbackCells::UninitializedSentinel(isolate());
-  Handle<JSGlobalPropertyCell> cell =
-      isolate()->factory()->NewJSGlobalPropertyCell(uninitialized);
+  Handle<Cell> cell = isolate()->factory()->NewCell(uninitialized);
   RecordTypeFeedbackCell(expr->CallNewFeedbackId(), cell);
   __ li(a2, Operand(cell));
 
@@ -3458,7 +3444,7 @@ void FullCodeGenerator::EmitDateField(CallRuntime* expr) {
   ZoneList<Expression*>* args = expr->arguments();
   ASSERT(args->length() == 2);
   ASSERT_NE(NULL, args->at(1)->AsLiteral());
-  Smi* index = Smi::cast(*(args->at(1)->AsLiteral()->handle()));
+  Smi* index = Smi::cast(*(args->at(1)->AsLiteral()->value()));
 
   VisitForAccumulatorValue(args->at(0));  // Load the object.
 
@@ -3890,7 +3876,7 @@ void FullCodeGenerator::EmitGetFromCache(CallRuntime* expr) {
   ASSERT_EQ(2, args->length());
 
   ASSERT_NE(NULL, args->at(0)->AsLiteral());
-  int cache_id = Smi::cast(*(args->at(0)->AsLiteral()->handle()))->value();
+  int cache_id = Smi::cast(*(args->at(0)->AsLiteral()->value()))->value();
 
   Handle<FixedArray> jsfunction_result_caches(
       isolate()->native_context()->jsfunction_result_caches());
@@ -4565,7 +4551,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
       break;
     case NAMED_PROPERTY: {
       __ mov(a0, result_register());  // Value.
-      __ li(a2, Operand(prop->key()->AsLiteral()->handle()));  // Name.
+      __ li(a2, Operand(prop->key()->AsLiteral()->value()));  // Name.
       __ pop(a1);  // Receiver.
       Handle<Code> ic = is_classic_mode()
           ? isolate()->builtins()->StoreIC_Initialize()
index c1b4e1e..896e030 100644 (file)
@@ -29,7 +29,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_MIPS
 
 #include "codegen.h"
 #include "code-stubs.h"
@@ -326,7 +326,8 @@ static void GenerateKeyNameCheck(MacroAssembler* masm,
   __ And(at, hash, Operand(Name::kContainsCachedArrayIndexMask));
   __ Branch(index_string, eq, at, Operand(zero_reg));
 
-  // Is the string internalized?
+  // Is the string internalized? We know it's a string, so a single
+  // bit test is enough.
   // map: key map
   __ lbu(hash, FieldMemOperand(map, Map::kInstanceTypeOffset));
   STATIC_ASSERT(kInternalizedTag != 0);
@@ -1588,8 +1589,8 @@ void StoreIC::GenerateNormal(MacroAssembler* masm) {
 }
 
 
-void StoreIC::GenerateGlobalProxy(MacroAssembler* masm,
-                                  StrictModeFlag strict_mode) {
+void StoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm,
+                                         StrictModeFlag strict_mode) {
   // ----------- S t a t e -------------
   //  -- a0    : value
   //  -- a1    : receiver
index 1c8973f..8109e8a 100644 (file)
@@ -62,7 +62,7 @@ class SafepointGenerator : public CallWrapper {
 #define __ masm()->
 
 bool LCodeGen::GenerateCode() {
-  HPhase phase("Z_Code generation", chunk());
+  LPhase phase("Z_Code generation", chunk());
   ASSERT(is_unused());
   status_ = GENERATING;
 
@@ -87,20 +87,7 @@ void LCodeGen::FinishCode(Handle<Code> code) {
     RegisterDependentCodeForEmbeddedMaps(code);
   }
   PopulateDeoptimizationData(code);
-  for (int i = 0 ; i < prototype_maps_.length(); i++) {
-    prototype_maps_.at(i)->AddDependentCode(
-        DependentCode::kPrototypeCheckGroup, code);
-  }
-  for (int i = 0 ; i < transition_maps_.length(); i++) {
-    transition_maps_.at(i)->AddDependentCode(
-        DependentCode::kTransitionGroup, code);
-  }
-  if (graph()->depends_on_empty_array_proto_elements()) {
-    isolate()->initial_object_prototype()->map()->AddDependentCode(
-        DependentCode::kElementsCantBeAddedGroup, code);
-    isolate()->initial_array_prototype()->map()->AddDependentCode(
-        DependentCode::kElementsCantBeAddedGroup, code);
-  }
+  info()->CommitDependencies(code);
 }
 
 
@@ -256,7 +243,6 @@ bool LCodeGen::GeneratePrologue() {
   if (FLAG_trace && info()->IsOptimizing()) {
     __ CallRuntime(Runtime::kTraceEnter, 0);
   }
-  EnsureSpaceForLazyDeopt();
   return !is_aborted();
 }
 
@@ -284,6 +270,7 @@ bool LCodeGen::GenerateBody() {
 
     instr->CompileToNative(this);
   }
+  EnsureSpaceForLazyDeopt();
   return !is_aborted();
 }
 
@@ -574,27 +561,15 @@ MemOperand LCodeGen::ToHighMemOperand(LOperand* op) const {
 
 
 void LCodeGen::WriteTranslation(LEnvironment* environment,
-                                Translation* translation,
-                                int* pushed_arguments_index,
-                                int* pushed_arguments_count) {
+                                Translation* translation) {
   if (environment == NULL) return;
 
   // The translation includes one command per value in the environment.
-  int translation_size = environment->values()->length();
+  int translation_size = environment->translation_size();
   // The output frame height does not include the parameters.
   int height = translation_size - environment->parameter_count();
 
-  // Function parameters are arguments to the outermost environment. The
-  // arguments index points to the first element of a sequence of tagged
-  // values on the stack that represent the arguments. This needs to be
-  // kept in sync with the LArgumentsElements implementation.
-  *pushed_arguments_index = -environment->parameter_count();
-  *pushed_arguments_count = environment->parameter_count();
-
-  WriteTranslation(environment->outer(),
-                   translation,
-                   pushed_arguments_index,
-                   pushed_arguments_count);
+  WriteTranslation(environment->outer(), translation);
   bool has_closure_id = !info()->closure().is_null() &&
       !info()->closure().is_identical_to(environment->closure());
   int closure_id = has_closure_id
@@ -626,60 +601,29 @@ void LCodeGen::WriteTranslation(LEnvironment* environment,
       break;
   }
 
-  // Inlined frames which push their arguments cause the index to be
-  // bumped and another stack area to be used for materialization,
-  // otherwise actual argument values are unknown for inlined frames.
-  bool arguments_known = true;
-  int arguments_index = *pushed_arguments_index;
-  int arguments_count = *pushed_arguments_count;
-  if (environment->entry() != NULL) {
-    arguments_known = environment->entry()->arguments_pushed();
-    arguments_index = arguments_index < 0
-        ? GetStackSlotCount() : arguments_index + arguments_count;
-    arguments_count = environment->entry()->arguments_count() + 1;
-    if (environment->entry()->arguments_pushed()) {
-      *pushed_arguments_index = arguments_index;
-      *pushed_arguments_count = arguments_count;
-    }
-  }
-
   for (int i = 0; i < translation_size; ++i) {
     LOperand* value = environment->values()->at(i);
-    // spilled_registers_ and spilled_double_registers_ are either
-    // both NULL or both set.
-    if (environment->spilled_registers() != NULL && value != NULL) {
-      if (value->IsRegister() &&
-          environment->spilled_registers()[value->index()] != NULL) {
-        translation->MarkDuplicate();
+
+    // TODO(mstarzinger): Introduce marker operands to indicate that this value
+    // is not present and must be reconstructed from the deoptimizer. Currently
+    // this is only used for the arguments object.
+    if (value == NULL) {
+      int arguments_count = environment->values()->length() - translation_size;
+      translation->BeginArgumentsObject(arguments_count);
+      for (int i = 0; i < arguments_count; ++i) {
+        LOperand* value = environment->values()->at(translation_size + i);
         AddToTranslation(translation,
-                         environment->spilled_registers()[value->index()],
-                         environment->HasTaggedValueAt(i),
-                         environment->HasUint32ValueAt(i),
-                         arguments_known,
-                         arguments_index,
-                         arguments_count);
-      } else if (
-          value->IsDoubleRegister() &&
-          environment->spilled_double_registers()[value->index()] != NULL) {
-        translation->MarkDuplicate();
-        AddToTranslation(
-            translation,
-            environment->spilled_double_registers()[value->index()],
-            false,
-            false,
-            arguments_known,
-            arguments_index,
-            arguments_count);
+                         value,
+                         environment->HasTaggedValueAt(translation_size + i),
+                         environment->HasUint32ValueAt(translation_size + i));
       }
+      continue;
     }
 
     AddToTranslation(translation,
                      value,
                      environment->HasTaggedValueAt(i),
-                     environment->HasUint32ValueAt(i),
-                     arguments_known,
-                     arguments_index,
-                     arguments_count);
+                     environment->HasUint32ValueAt(i));
   }
 }
 
@@ -687,17 +631,8 @@ void LCodeGen::WriteTranslation(LEnvironment* environment,
 void LCodeGen::AddToTranslation(Translation* translation,
                                 LOperand* op,
                                 bool is_tagged,
-                                bool is_uint32,
-                                bool arguments_known,
-                                int arguments_index,
-                                int arguments_count) {
-  if (op == NULL) {
-    // TODO(twuerthinger): Introduce marker operands to indicate that this value
-    // is not present and must be reconstructed from the deoptimizer. Currently
-    // this is only used for the arguments object.
-    translation->StoreArgumentsObject(
-        arguments_known, arguments_index, arguments_count);
-  } else if (op->IsStackSlot()) {
+                                bool is_uint32) {
+  if (op->IsStackSlot()) {
     if (is_tagged) {
       translation->StoreStackSlot(op->index());
     } else if (is_uint32) {
@@ -744,6 +679,7 @@ void LCodeGen::CallCodeGeneric(Handle<Code> code,
                                RelocInfo::Mode mode,
                                LInstruction* instr,
                                SafepointMode safepoint_mode) {
+  EnsureSpaceForLazyDeopt();
   ASSERT(instr != NULL);
   LPointerMap* pointers = instr->pointer_map();
   RecordPosition(pointers->position());
@@ -792,8 +728,6 @@ void LCodeGen::RegisterEnvironmentForDeoptimization(LEnvironment* environment,
 
     int frame_count = 0;
     int jsframe_count = 0;
-    int args_index = 0;
-    int args_count = 0;
     for (LEnvironment* e = environment; e != NULL; e = e->outer()) {
       ++frame_count;
       if (e->frame_type() == JS_FUNCTION) {
@@ -801,7 +735,7 @@ void LCodeGen::RegisterEnvironmentForDeoptimization(LEnvironment* environment,
       }
     }
     Translation translation(&translations_, frame_count, jsframe_count, zone());
-    WriteTranslation(environment, &translation, &args_index, &args_count);
+    WriteTranslation(environment, &translation);
     int deoptimization_index = deoptimizations_.length();
     int pc_offset = masm()->pc_offset();
     environment->Register(deoptimization_index,
@@ -836,7 +770,7 @@ void LCodeGen::DeoptimizeIf(Condition cc,
     return;
   }
 
-  if (FLAG_trap_on_deopt) {
+  if (FLAG_trap_on_deopt && info()->IsOptimizing()) {
     Label skip;
     if (cc != al) {
       __ Branch(&skip, NegateCondition(cc), src1, src2);
@@ -1140,7 +1074,8 @@ void LCodeGen::DoCallStub(LCallStub* instr) {
 
 
 void LCodeGen::DoUnknownOSRValue(LUnknownOSRValue* instr) {
-  // Nothing to do.
+  // Record the address of the first unknown OSR value as the place to enter.
+  if (osr_pc_offset_ == -1) osr_pc_offset_ = masm()->pc_offset();
 }
 
 
@@ -1176,9 +1111,37 @@ void LCodeGen::DoModI(LModI* instr) {
     __ And(result_reg, scratch, divisor - 1);
     __ bind(&done);
 
-  } else {
-    // TODO(svenpanne) Add right->has_fixed_right_arg() case.
+  } else if (hmod->fixed_right_arg().has_value) {
+    const Register scratch = scratch0();
+    const Register left_reg = ToRegister(instr->left());
+    const Register result_reg = ToRegister(instr->result());
+
+    Register right_reg = EmitLoadRegister(instr->right(), scratch);
 
+    int32_t divisor = hmod->fixed_right_arg().value;
+    ASSERT(IsPowerOf2(divisor));
+
+    // Check if our assumption of a fixed right operand still holds.
+    DeoptimizeIf(ne, instr->environment(), right_reg, Operand(divisor));
+
+    Label left_is_not_negative, done;
+    if (left->CanBeNegative()) {
+      __ Branch(USE_DELAY_SLOT, &left_is_not_negative,
+                ge, left_reg, Operand(zero_reg));
+      __ subu(result_reg, zero_reg, left_reg);
+      __ And(result_reg, result_reg, divisor - 1);
+      if (hmod->CheckFlag(HValue::kBailoutOnMinusZero)) {
+        DeoptimizeIf(eq, instr->environment(), result_reg, Operand(zero_reg));
+      }
+      __ Branch(USE_DELAY_SLOT, &done);
+      __ subu(result_reg, zero_reg, result_reg);
+    }
+
+    __ bind(&left_is_not_negative);
+    __ And(result_reg, left_reg, divisor - 1);
+    __ bind(&done);
+
+  } else {
     const Register scratch = scratch0();
     const Register left_reg = ToRegister(instr->left());
     const Register result_reg = ToRegister(instr->result());
@@ -1216,6 +1179,109 @@ void LCodeGen::DoModI(LModI* instr) {
 }
 
 
+void LCodeGen::EmitSignedIntegerDivisionByConstant(
+    Register result,
+    Register dividend,
+    int32_t divisor,
+    Register remainder,
+    Register scratch,
+    LEnvironment* environment) {
+  ASSERT(!AreAliased(dividend, scratch, at, no_reg));
+  ASSERT(LChunkBuilder::HasMagicNumberForDivisor(divisor));
+
+  uint32_t divisor_abs = abs(divisor);
+
+  int32_t power_of_2_factor =
+    CompilerIntrinsics::CountTrailingZeros(divisor_abs);
+
+  switch (divisor_abs) {
+    case 0:
+      DeoptimizeIf(al, environment);
+      return;
+
+    case 1:
+      if (divisor > 0) {
+        __ Move(result, dividend);
+      } else {
+        __ SubuAndCheckForOverflow(result, zero_reg, dividend, scratch);
+        DeoptimizeIf(lt, environment, scratch, Operand(zero_reg));
+      }
+      // Compute the remainder.
+      __ Move(remainder, zero_reg);
+      return;
+
+    default:
+      if (IsPowerOf2(divisor_abs)) {
+        // Branch and condition free code for integer division by a power
+        // of two.
+        int32_t power = WhichPowerOf2(divisor_abs);
+        if (power > 1) {
+          __ sra(scratch, dividend, power - 1);
+        }
+        __ srl(scratch, scratch, 32 - power);
+        __ Addu(scratch, dividend, Operand(scratch));
+        __ sra(result, scratch,  power);
+        // Negate if necessary.
+        // We don't need to check for overflow because the case '-1' is
+        // handled separately.
+        if (divisor < 0) {
+          ASSERT(divisor != -1);
+          __ Subu(result, zero_reg, Operand(result));
+        }
+        // Compute the remainder.
+        if (divisor > 0) {
+          __ sll(scratch, result, power);
+          __ Subu(remainder, dividend, Operand(scratch));
+        } else {
+          __ sll(scratch, result, power);
+          __ Addu(remainder, dividend, Operand(scratch));
+        }
+        return;
+      } else if (LChunkBuilder::HasMagicNumberForDivisor(divisor)) {
+        // Use magic numbers for a few specific divisors.
+        // Details and proofs can be found in:
+        // - Hacker's Delight, Henry S. Warren, Jr.
+        // - The PowerPC Compiler Writer's Guide
+        // and probably many others.
+        //
+        // We handle
+        //   <divisor with magic numbers> * <power of 2>
+        // but not
+        //   <divisor with magic numbers> * <other divisor with magic numbers>
+        DivMagicNumbers magic_numbers =
+          DivMagicNumberFor(divisor_abs >> power_of_2_factor);
+        // Branch and condition free code for integer division by a power
+        // of two.
+        const int32_t M = magic_numbers.M;
+        const int32_t s = magic_numbers.s + power_of_2_factor;
+
+        __ li(scratch, Operand(M));
+        __ mult(dividend, scratch);
+        __ mfhi(scratch);
+        if (M < 0) {
+          __ Addu(scratch, scratch, Operand(dividend));
+        }
+        if (s > 0) {
+          __ sra(scratch, scratch, s);
+          __ mov(scratch, scratch);
+        }
+        __ srl(at, dividend, 31);
+        __ Addu(result, scratch, Operand(at));
+        if (divisor < 0) __ Subu(result, zero_reg, Operand(result));
+        // Compute the remainder.
+        __ li(scratch, Operand(divisor));
+        __ Mul(scratch, result, Operand(scratch));
+        __ Subu(remainder, dividend, Operand(scratch));
+      } else {
+        __ li(scratch, Operand(divisor));
+        __ div(dividend, scratch);
+        __ mfhi(remainder);
+        __ mflo(result);
+      }
+  }
+}
+
+
 void LCodeGen::DoDivI(LDivI* instr) {
   const Register left = ToRegister(instr->left());
   const Register right = ToRegister(instr->right());
@@ -1246,8 +1312,10 @@ void LCodeGen::DoDivI(LDivI* instr) {
     __ bind(&left_not_min_int);
   }
 
-  __ mfhi(result);
-  DeoptimizeIf(ne, instr->environment(), result, Operand(zero_reg));
+  if (!instr->hydrogen()->CheckFlag(HInstruction::kAllUsesTruncatingToInt32)) {
+    __ mfhi(result);
+    DeoptimizeIf(ne, instr->environment(), result, Operand(zero_reg));
+  }
   __ mflo(result);
 }
 
@@ -1264,6 +1332,70 @@ void LCodeGen::DoMultiplyAddD(LMultiplyAddD* instr) {
 }
 
 
+void LCodeGen::DoMathFloorOfDiv(LMathFloorOfDiv* instr) {
+  const Register result = ToRegister(instr->result());
+  const Register left = ToRegister(instr->left());
+  const Register remainder = ToRegister(instr->temp());
+  const Register scratch = scratch0();
+
+  if (instr->right()->IsConstantOperand()) {
+    Label done;
+    int32_t divisor = ToInteger32(LConstantOperand::cast(instr->right()));
+    if (divisor < 0) {
+      DeoptimizeIf(eq, instr->environment(), left, Operand(zero_reg));
+    }
+    EmitSignedIntegerDivisionByConstant(result,
+                                        left,
+                                        divisor,
+                                        remainder,
+                                        scratch,
+                                        instr->environment());
+    // We performed a truncating division. Correct the result if necessary.
+    __ Branch(&done, eq, remainder, Operand(zero_reg), USE_DELAY_SLOT);
+    __ Xor(scratch , remainder, Operand(divisor));
+    __ Branch(&done, ge, scratch, Operand(zero_reg));
+    __ Subu(result, result, Operand(1));
+    __ bind(&done);
+  } else {
+    Label done;
+    const Register right = ToRegister(instr->right());
+
+    // On MIPS div is asynchronous - it will run in the background while we
+    // check for special cases.
+    __ div(left, right);
+
+    // Check for x / 0.
+    DeoptimizeIf(eq, instr->environment(), right, Operand(zero_reg));
+
+    // Check for (0 / -x) that will produce negative zero.
+    if (instr->hydrogen()->CheckFlag(HValue::kBailoutOnMinusZero)) {
+      Label left_not_zero;
+      __ Branch(&left_not_zero, ne, left, Operand(zero_reg));
+      DeoptimizeIf(lt, instr->environment(), right, Operand(zero_reg));
+      __ bind(&left_not_zero);
+    }
+
+    // Check for (kMinInt / -1).
+    if (instr->hydrogen()->CheckFlag(HValue::kCanOverflow)) {
+      Label left_not_min_int;
+      __ Branch(&left_not_min_int, ne, left, Operand(kMinInt));
+      DeoptimizeIf(eq, instr->environment(), right, Operand(-1));
+      __ bind(&left_not_min_int);
+    }
+
+    __ mfhi(remainder);
+    __ mflo(result);
+
+    // We performed a truncating division. Correct the result if necessary.
+    __ Branch(&done, eq, remainder, Operand(zero_reg), USE_DELAY_SLOT);
+    __ Xor(scratch , remainder, Operand(right));
+    __ Branch(&done, ge, scratch, Operand(zero_reg));
+    __ Subu(result, result, Operand(1));
+    __ bind(&done);
+  }
+}
+
+
 void LCodeGen::DoMulI(LMulI* instr) {
   Register scratch = scratch0();
   Register result = ToRegister(instr->result());
@@ -1543,13 +1675,6 @@ void LCodeGen::DoConstantT(LConstantT* instr) {
 }
 
 
-void LCodeGen::DoFixedArrayBaseLength(LFixedArrayBaseLength* instr) {
-  Register result = ToRegister(instr->result());
-  Register array = ToRegister(instr->value());
-  __ lw(result, FieldMemOperand(array, FixedArrayBase::kLengthOffset));
-}
-
-
 void LCodeGen::DoMapEnumLength(LMapEnumLength* instr) {
   Register result = ToRegister(instr->result());
   Register map = ToRegister(instr->value());
@@ -1577,9 +1702,11 @@ void LCodeGen::DoValueOf(LValueOf* instr) {
   Register map = ToRegister(instr->temp());
   Label done;
 
-  // If the object is a smi return the object.
-  __ Move(result, input);
-  __ JumpIfSmi(input, &done);
+  if (!instr->hydrogen()->value()->IsHeapObject()) {
+    // If the object is a smi return the object.
+    __ Move(result, input);
+    __ JumpIfSmi(input, &done);
+  }
 
   // If the object is not a value type, return the object.
   __ GetObjectType(input, map, map);
@@ -1841,12 +1968,13 @@ int LCodeGen::GetNextEmittedBlock() const {
   return -1;
 }
 
-
-void LCodeGen::EmitBranch(int left_block, int right_block,
+template<class InstrType>
+void LCodeGen::EmitBranch(InstrType instr,
                           Condition cc, Register src1, const Operand& src2) {
+  int right_block = instr->FalseDestination(chunk_);
+  int left_block = instr->TrueDestination(chunk_);
+
   int next_block = GetNextEmittedBlock();
-  right_block = chunk_->LookupDestination(right_block);
-  left_block = chunk_->LookupDestination(left_block);
   if (right_block == left_block) {
     EmitGoto(left_block);
   } else if (left_block == next_block) {
@@ -1861,11 +1989,13 @@ void LCodeGen::EmitBranch(int left_block, int right_block,
 }
 
 
-void LCodeGen::EmitBranchF(int left_block, int right_block,
+template<class InstrType>
+void LCodeGen::EmitBranchF(InstrType instr,
                            Condition cc, FPURegister src1, FPURegister src2) {
+  int right_block = instr->FalseDestination(chunk_);
+  int left_block = instr->TrueDestination(chunk_);
+
   int next_block = GetNextEmittedBlock();
-  right_block = chunk_->LookupDestination(right_block);
-  left_block = chunk_->LookupDestination(left_block);
   if (right_block == left_block) {
     EmitGoto(left_block);
   } else if (left_block == next_block) {
@@ -1886,19 +2016,16 @@ void LCodeGen::DoDebugBreak(LDebugBreak* instr) {
 
 
 void LCodeGen::DoBranch(LBranch* instr) {
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
   Representation r = instr->hydrogen()->value()->representation();
   if (r.IsInteger32() || r.IsSmi()) {
     ASSERT(!info()->IsStub());
     Register reg = ToRegister(instr->value());
-    EmitBranch(true_block, false_block, ne, reg, Operand(zero_reg));
+    EmitBranch(instr, ne, reg, Operand(zero_reg));
   } else if (r.IsDouble()) {
     ASSERT(!info()->IsStub());
     DoubleRegister reg = ToDoubleRegister(instr->value());
     // Test the double value. Zero and NaN are false.
-    EmitBranchF(true_block, false_block, nue, reg, kDoubleRegZero);
+    EmitBranchF(instr, nue, reg, kDoubleRegZero);
   } else {
     ASSERT(r.IsTagged());
     Register reg = ToRegister(instr->value());
@@ -1906,40 +2033,50 @@ void LCodeGen::DoBranch(LBranch* instr) {
     if (type.IsBoolean()) {
       ASSERT(!info()->IsStub());
       __ LoadRoot(at, Heap::kTrueValueRootIndex);
-      EmitBranch(true_block, false_block, eq, reg, Operand(at));
+      EmitBranch(instr, eq, reg, Operand(at));
     } else if (type.IsSmi()) {
       ASSERT(!info()->IsStub());
-      EmitBranch(true_block, false_block, ne, reg, Operand(zero_reg));
+      EmitBranch(instr, ne, reg, Operand(zero_reg));
+    } else if (type.IsJSArray()) {
+      ASSERT(!info()->IsStub());
+      EmitBranch(instr, al, zero_reg, Operand(zero_reg));
+    } else if (type.IsHeapNumber()) {
+      ASSERT(!info()->IsStub());
+      DoubleRegister dbl_scratch = double_scratch0();
+      __ ldc1(dbl_scratch, FieldMemOperand(reg, HeapNumber::kValueOffset));
+      // Test the double value. Zero and NaN are false.
+      EmitBranchF(instr, nue, dbl_scratch, kDoubleRegZero);
+    } else if (type.IsString()) {
+      ASSERT(!info()->IsStub());
+      __ lw(at, FieldMemOperand(reg, String::kLengthOffset));
+      EmitBranch(instr, ne, at, Operand(zero_reg));
     } else {
-      Label* true_label = chunk_->GetAssemblyLabel(true_block);
-      Label* false_label = chunk_->GetAssemblyLabel(false_block);
-
       ToBooleanStub::Types expected = instr->hydrogen()->expected_input_types();
       // Avoid deopts in the case where we've never executed this path before.
-      if (expected.IsEmpty()) expected = ToBooleanStub::all_types();
+      if (expected.IsEmpty()) expected = ToBooleanStub::Types::Generic();
 
       if (expected.Contains(ToBooleanStub::UNDEFINED)) {
         // undefined -> false.
         __ LoadRoot(at, Heap::kUndefinedValueRootIndex);
-        __ Branch(false_label, eq, reg, Operand(at));
+        __ Branch(instr->FalseLabel(chunk_), eq, reg, Operand(at));
       }
       if (expected.Contains(ToBooleanStub::BOOLEAN)) {
         // Boolean -> its value.
         __ LoadRoot(at, Heap::kTrueValueRootIndex);
-        __ Branch(true_label, eq, reg, Operand(at));
+        __ Branch(instr->TrueLabel(chunk_), eq, reg, Operand(at));
         __ LoadRoot(at, Heap::kFalseValueRootIndex);
-        __ Branch(false_label, eq, reg, Operand(at));
+        __ Branch(instr->FalseLabel(chunk_), eq, reg, Operand(at));
       }
       if (expected.Contains(ToBooleanStub::NULL_TYPE)) {
         // 'null' -> false.
         __ LoadRoot(at, Heap::kNullValueRootIndex);
-        __ Branch(false_label, eq, reg, Operand(at));
+        __ Branch(instr->FalseLabel(chunk_), eq, reg, Operand(at));
       }
 
       if (expected.Contains(ToBooleanStub::SMI)) {
         // Smis: 0 -> false, all other -> true.
-        __ Branch(false_label, eq, reg, Operand(zero_reg));
-        __ JumpIfSmi(reg, true_label);
+        __ Branch(instr->FalseLabel(chunk_), eq, reg, Operand(zero_reg));
+        __ JumpIfSmi(reg, instr->TrueLabel(chunk_));
       } else if (expected.NeedsMap()) {
         // If we need a map later and have a Smi -> deopt.
         __ And(at, reg, Operand(kSmiTagMask));
@@ -1953,14 +2090,15 @@ void LCodeGen::DoBranch(LBranch* instr) {
           // Undetectable -> false.
           __ lbu(at, FieldMemOperand(map, Map::kBitFieldOffset));
           __ And(at, at, Operand(1 << Map::kIsUndetectable));
-          __ Branch(false_label, ne, at, Operand(zero_reg));
+          __ Branch(instr->FalseLabel(chunk_), ne, at, Operand(zero_reg));
         }
       }
 
       if (expected.Contains(ToBooleanStub::SPEC_OBJECT)) {
         // spec object -> true.
         __ lbu(at, FieldMemOperand(map, Map::kInstanceTypeOffset));
-        __ Branch(true_label, ge, at, Operand(FIRST_SPEC_OBJECT_TYPE));
+        __ Branch(instr->TrueLabel(chunk_),
+                  ge, at, Operand(FIRST_SPEC_OBJECT_TYPE));
       }
 
       if (expected.Contains(ToBooleanStub::STRING)) {
@@ -1969,8 +2107,8 @@ void LCodeGen::DoBranch(LBranch* instr) {
         __ lbu(at, FieldMemOperand(map, Map::kInstanceTypeOffset));
         __ Branch(&not_string, ge , at, Operand(FIRST_NONSTRING_TYPE));
         __ lw(at, FieldMemOperand(reg, String::kLengthOffset));
-        __ Branch(true_label, ne, at, Operand(zero_reg));
-        __ Branch(false_label);
+        __ Branch(instr->TrueLabel(chunk_), ne, at, Operand(zero_reg));
+        __ Branch(instr->FalseLabel(chunk_));
         __ bind(&not_string);
       }
 
@@ -1978,7 +2116,7 @@ void LCodeGen::DoBranch(LBranch* instr) {
         // Symbol value -> true.
         const Register scratch = scratch1();
         __ lbu(scratch, FieldMemOperand(map, Map::kInstanceTypeOffset));
-        __ Branch(true_label, eq, scratch, Operand(SYMBOL_TYPE));
+        __ Branch(instr->TrueLabel(chunk_), eq, scratch, Operand(SYMBOL_TYPE));
       }
 
       if (expected.Contains(ToBooleanStub::HEAP_NUMBER)) {
@@ -1988,14 +2126,18 @@ void LCodeGen::DoBranch(LBranch* instr) {
         __ LoadRoot(at, Heap::kHeapNumberMapRootIndex);
         __ Branch(&not_heap_number, ne, map, Operand(at));
         __ ldc1(dbl_scratch, FieldMemOperand(reg, HeapNumber::kValueOffset));
-        __ BranchF(true_label, false_label, ne, dbl_scratch, kDoubleRegZero);
+        __ BranchF(instr->TrueLabel(chunk_), instr->FalseLabel(chunk_),
+                   ne, dbl_scratch, kDoubleRegZero);
         // Falls through if dbl_scratch == 0.
-        __ Branch(false_label);
+        __ Branch(instr->FalseLabel(chunk_));
         __ bind(&not_heap_number);
       }
 
-      // We've seen something for the first time -> deopt.
-      DeoptimizeIf(al, instr->environment(), zero_reg, Operand(zero_reg));
+      if (!expected.IsGeneric()) {
+        // We've seen something for the first time -> deopt.
+        // This can only happen if we are not generic already.
+        DeoptimizeIf(al, instr->environment(), zero_reg, Operand(zero_reg));
+      }
     }
   }
 }
@@ -2003,7 +2145,7 @@ void LCodeGen::DoBranch(LBranch* instr) {
 
 void LCodeGen::EmitGoto(int block) {
   if (!IsNextEmittedBlock(block)) {
-    __ jmp(chunk_->GetAssemblyLabel(chunk_->LookupDestination(block)));
+    __ jmp(chunk_->GetAssemblyLabel(LookupDestination(block)));
   }
 }
 
@@ -2044,18 +2186,14 @@ Condition LCodeGen::TokenToCondition(Token::Value op, bool is_unsigned) {
 void LCodeGen::DoCmpIDAndBranch(LCmpIDAndBranch* instr) {
   LOperand* left = instr->left();
   LOperand* right = instr->right();
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-
   Condition cond = TokenToCondition(instr->op(), false);
 
   if (left->IsConstantOperand() && right->IsConstantOperand()) {
     // We can statically evaluate the comparison.
     double left_val = ToDouble(LConstantOperand::cast(left));
     double right_val = ToDouble(LConstantOperand::cast(right));
-    int next_block =
-      EvalComparison(instr->op(), left_val, right_val) ? true_block
-                                                       : false_block;
+    int next_block = EvalComparison(instr->op(), left_val, right_val) ?
+        instr->TrueDestination(chunk_) : instr->FalseDestination(chunk_);
     EmitGoto(next_block);
   } else {
     if (instr->is_double()) {
@@ -2066,10 +2204,10 @@ void LCodeGen::DoCmpIDAndBranch(LCmpIDAndBranch* instr) {
 
       // If a NaN is involved, i.e. the result is unordered,
       // jump to false block label.
-      __ BranchF(NULL, chunk_->GetAssemblyLabel(false_block), eq,
+      __ BranchF(NULL, instr->FalseLabel(chunk_), eq,
                  left_reg, right_reg);
 
-      EmitBranchF(true_block, false_block, cond, left_reg, right_reg);
+      EmitBranchF(instr, cond, left_reg, right_reg);
     } else {
       Register cmp_left;
       Operand cmp_right = Operand(0);
@@ -2099,7 +2237,7 @@ void LCodeGen::DoCmpIDAndBranch(LCmpIDAndBranch* instr) {
         cmp_right = Operand(ToRegister(right));
       }
 
-      EmitBranch(true_block, false_block, cond, cmp_left, cmp_right);
+      EmitBranch(instr, cond, cmp_left, cmp_right);
     }
   }
 }
@@ -2108,20 +2246,15 @@ void LCodeGen::DoCmpIDAndBranch(LCmpIDAndBranch* instr) {
 void LCodeGen::DoCmpObjectEqAndBranch(LCmpObjectEqAndBranch* instr) {
   Register left = ToRegister(instr->left());
   Register right = ToRegister(instr->right());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
 
-  EmitBranch(true_block, false_block, eq, left, Operand(right));
+  EmitBranch(instr, eq, left, Operand(right));
 }
 
 
 void LCodeGen::DoCmpConstantEqAndBranch(LCmpConstantEqAndBranch* instr) {
   Register left = ToRegister(instr->left());
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
 
-  EmitBranch(true_block, false_block, eq, left,
-             Operand(instr->hydrogen()->right()));
+  EmitBranch(instr, eq, left, Operand(instr->hydrogen()->right()));
 }
 
 
@@ -2156,23 +2289,22 @@ void LCodeGen::DoIsObjectAndBranch(LIsObjectAndBranch* instr) {
   Register temp1 = ToRegister(instr->temp());
   Register temp2 = scratch0();
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-  Label* true_label = chunk_->GetAssemblyLabel(true_block);
-  Label* false_label = chunk_->GetAssemblyLabel(false_block);
-
   Condition true_cond =
-      EmitIsObject(reg, temp1, temp2, false_label, true_label);
+      EmitIsObject(reg, temp1, temp2,
+          instr->FalseLabel(chunk_), instr->TrueLabel(chunk_));
 
-  EmitBranch(true_block, false_block, true_cond, temp2,
+  EmitBranch(instr, true_cond, temp2,
              Operand(LAST_NONCALLABLE_SPEC_OBJECT_TYPE));
 }
 
 
 Condition LCodeGen::EmitIsString(Register input,
                                  Register temp1,
-                                 Label* is_not_string) {
-  __ JumpIfSmi(input, is_not_string);
+                                 Label* is_not_string,
+                                 SmiCheck check_needed = INLINE_SMI_CHECK) {
+  if (check_needed == INLINE_SMI_CHECK) {
+    __ JumpIfSmi(input, is_not_string);
+  }
   __ GetObjectType(input, temp1, temp1);
 
   return lt;
@@ -2183,25 +2315,21 @@ void LCodeGen::DoIsStringAndBranch(LIsStringAndBranch* instr) {
   Register reg = ToRegister(instr->value());
   Register temp1 = ToRegister(instr->temp());
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-  Label* false_label = chunk_->GetAssemblyLabel(false_block);
-
+  SmiCheck check_needed =
+      instr->hydrogen()->value()->IsHeapObject()
+          ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
   Condition true_cond =
-      EmitIsString(reg, temp1, false_label);
+      EmitIsString(reg, temp1, instr->FalseLabel(chunk_), check_needed);
 
-  EmitBranch(true_block, false_block, true_cond, temp1,
+  EmitBranch(instr, true_cond, temp1,
              Operand(FIRST_NONSTRING_TYPE));
 }
 
 
 void LCodeGen::DoIsSmiAndBranch(LIsSmiAndBranch* instr) {
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
   Register input_reg = EmitLoadRegister(instr->value(), at);
   __ And(at, input_reg, kSmiTagMask);
-  EmitBranch(true_block, false_block, eq, at, Operand(zero_reg));
+  EmitBranch(instr, eq, at, Operand(zero_reg));
 }
 
 
@@ -2209,14 +2337,13 @@ void LCodeGen::DoIsUndetectableAndBranch(LIsUndetectableAndBranch* instr) {
   Register input = ToRegister(instr->value());
   Register temp = ToRegister(instr->temp());
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
-  __ JumpIfSmi(input, chunk_->GetAssemblyLabel(false_block));
+  if (!instr->hydrogen()->value()->IsHeapObject()) {
+    __ JumpIfSmi(input, instr->FalseLabel(chunk_));
+  }
   __ lw(temp, FieldMemOperand(input, HeapObject::kMapOffset));
   __ lbu(temp, FieldMemOperand(temp, Map::kBitFieldOffset));
   __ And(at, temp, Operand(1 << Map::kIsUndetectable));
-  EmitBranch(true_block, false_block, ne, at, Operand(zero_reg));
+  EmitBranch(instr, ne, at, Operand(zero_reg));
 }
 
 
@@ -2242,15 +2369,13 @@ static Condition ComputeCompareCondition(Token::Value op) {
 
 void LCodeGen::DoStringCompareAndBranch(LStringCompareAndBranch* instr) {
   Token::Value op = instr->op();
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
 
   Handle<Code> ic = CompareIC::GetUninitialized(isolate(), op);
   CallCode(ic, RelocInfo::CODE_TARGET, instr);
 
   Condition condition = ComputeCompareCondition(op);
 
-  EmitBranch(true_block, false_block, condition, v0, Operand(zero_reg));
+  EmitBranch(instr, condition, v0, Operand(zero_reg));
 }
 
 
@@ -2278,16 +2403,12 @@ void LCodeGen::DoHasInstanceTypeAndBranch(LHasInstanceTypeAndBranch* instr) {
   Register scratch = scratch0();
   Register input = ToRegister(instr->value());
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
-  Label* false_label = chunk_->GetAssemblyLabel(false_block);
-
-  __ JumpIfSmi(input, false_label);
+  if (!instr->hydrogen()->value()->IsHeapObject()) {
+    __ JumpIfSmi(input, instr->FalseLabel(chunk_));
+  }
 
   __ GetObjectType(input, scratch, scratch);
-  EmitBranch(true_block,
-             false_block,
+  EmitBranch(instr,
              BranchCondition(instr->hydrogen()),
              scratch,
              Operand(TestType(instr->hydrogen())));
@@ -2310,13 +2431,10 @@ void LCodeGen::DoHasCachedArrayIndexAndBranch(
   Register input = ToRegister(instr->value());
   Register scratch = scratch0();
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
   __ lw(scratch,
          FieldMemOperand(input, String::kHashFieldOffset));
   __ And(at, scratch, Operand(String::kContainsCachedArrayIndexMask));
-  EmitBranch(true_block, false_block, eq, at, Operand(zero_reg));
+  EmitBranch(instr, eq, at, Operand(zero_reg));
 }
 
 
@@ -2392,26 +2510,19 @@ void LCodeGen::DoClassOfTestAndBranch(LClassOfTestAndBranch* instr) {
   Register temp2 = ToRegister(instr->temp());
   Handle<String> class_name = instr->hydrogen()->class_name();
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
-  Label* true_label = chunk_->GetAssemblyLabel(true_block);
-  Label* false_label = chunk_->GetAssemblyLabel(false_block);
-
-  EmitClassOfTest(true_label, false_label, class_name, input, temp, temp2);
+  EmitClassOfTest(instr->TrueLabel(chunk_), instr->FalseLabel(chunk_),
+                  class_name, input, temp, temp2);
 
-  EmitBranch(true_block, false_block, eq, temp, Operand(class_name));
+  EmitBranch(instr, eq, temp, Operand(class_name));
 }
 
 
 void LCodeGen::DoCmpMapAndBranch(LCmpMapAndBranch* instr) {
   Register reg = ToRegister(instr->value());
   Register temp = ToRegister(instr->temp());
-  int true_block = instr->true_block_id();
-  int false_block = instr->false_block_id();
 
   __ lw(temp, FieldMemOperand(reg, HeapObject::kMapOffset));
-  EmitBranch(true_block, false_block, eq, temp, Operand(instr->map()));
+  EmitBranch(instr, eq, temp, Operand(instr->map()));
 }
 
 
@@ -2477,10 +2588,9 @@ void LCodeGen::DoInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr) {
   // We use Factory::the_hole_value() on purpose instead of loading from the
   // root array to force relocation to be able to later patch with
   // the cached map.
-  Handle<JSGlobalPropertyCell> cell =
-      factory()->NewJSGlobalPropertyCell(factory()->the_hole_value());
+  Handle<Cell> cell = factory()->NewCell(factory()->the_hole_value());
   __ li(at, Operand(Handle<Object>(cell)));
-  __ lw(at, FieldMemOperand(at, JSGlobalPropertyCell::kValueOffset));
+  __ lw(at, FieldMemOperand(at, PropertyCell::kValueOffset));
   __ Branch(&cache_miss, ne, map, Operand(at));
   // We use Factory::the_hole_value() on purpose instead of loading from the
   // root array to force relocation to be able to later patch
@@ -2634,7 +2744,7 @@ void LCodeGen::DoReturn(LReturn* instr) {
 void LCodeGen::DoLoadGlobalCell(LLoadGlobalCell* instr) {
   Register result = ToRegister(instr->result());
   __ li(at, Operand(Handle<Object>(instr->hydrogen()->cell())));
-  __ lw(result, FieldMemOperand(at, JSGlobalPropertyCell::kValueOffset));
+  __ lw(result, FieldMemOperand(at, Cell::kValueOffset));
   if (instr->hydrogen()->RequiresHoleCheck()) {
     __ LoadRoot(at, Heap::kTheHoleValueRootIndex);
     DeoptimizeIf(eq, instr->environment(), result, Operand(at));
@@ -2668,13 +2778,13 @@ void LCodeGen::DoStoreGlobalCell(LStoreGlobalCell* instr) {
   if (instr->hydrogen()->RequiresHoleCheck()) {
     // We use a temp to check the payload.
     Register payload = ToRegister(instr->temp());
-    __ lw(payload, FieldMemOperand(cell, JSGlobalPropertyCell::kValueOffset));
+    __ lw(payload, FieldMemOperand(cell, Cell::kValueOffset));
     __ LoadRoot(at, Heap::kTheHoleValueRootIndex);
     DeoptimizeIf(eq, instr->environment(), payload, Operand(at));
   }
 
   // Store the value.
-  __ sw(value, FieldMemOperand(cell, JSGlobalPropertyCell::kValueOffset));
+  __ sw(value, FieldMemOperand(cell, Cell::kValueOffset));
   // Cells are always rescanned, so no write barrier here.
 }
 
@@ -2732,9 +2842,9 @@ void LCodeGen::DoStoreContextSlot(LStoreContextSlot* instr) {
 
   __ sw(value, target);
   if (instr->hydrogen()->NeedsWriteBarrier()) {
-    HType type = instr->hydrogen()->value()->type();
     SmiCheck check_needed =
-        type.IsHeapObject() ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
+        instr->hydrogen()->value()->IsHeapObject()
+            ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
     __ RecordWriteContextSlot(context,
                               target.offset(),
                               value,
@@ -3497,6 +3607,7 @@ void LCodeGen::EmitIntegerMathAbs(LMathAbs* instr) {
   Label done;
   __ Branch(USE_DELAY_SLOT, &done, ge, input, Operand(zero_reg));
   __ mov(result, input);
+  __ subu(result, zero_reg, input);
   // Overflow if result is still negative, i.e. 0x80000000.
   DeoptimizeIf(lt, instr->environment(), result, Operand(zero_reg));
   __ bind(&done);
@@ -3916,12 +4027,9 @@ void LCodeGen::DoCallNew(LCallNew* instr) {
   ASSERT(ToRegister(instr->result()).is(v0));
 
   __ li(a0, Operand(instr->arity()));
-  if (FLAG_optimize_constructed_arrays) {
-    // No cell in a2 for construct type feedback in optimized code
-    Handle<Object> undefined_value(isolate()->heap()->undefined_value(),
-                                   isolate());
-    __ li(a2, Operand(undefined_value));
-  }
+  // No cell in a2 for construct type feedback in optimized code
+  Handle<Object> undefined_value(isolate()->factory()->undefined_value());
+  __ li(a2, Operand(undefined_value));
   CallConstructStub stub(NO_CALL_FUNCTION_FLAGS);
   CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
 }
@@ -3930,22 +4038,41 @@ void LCodeGen::DoCallNew(LCallNew* instr) {
 void LCodeGen::DoCallNewArray(LCallNewArray* instr) {
   ASSERT(ToRegister(instr->constructor()).is(a1));
   ASSERT(ToRegister(instr->result()).is(v0));
-  ASSERT(FLAG_optimize_constructed_arrays);
 
   __ li(a0, Operand(instr->arity()));
   __ li(a2, Operand(instr->hydrogen()->property_cell()));
   ElementsKind kind = instr->hydrogen()->elements_kind();
-  bool disable_allocation_sites =
-      (AllocationSiteInfo::GetMode(kind) == TRACK_ALLOCATION_SITE);
+  AllocationSiteOverrideMode override_mode =
+      (AllocationSiteInfo::GetMode(kind) == TRACK_ALLOCATION_SITE)
+          ? DISABLE_ALLOCATION_SITES
+          : DONT_OVERRIDE;
+  ContextCheckMode context_mode = CONTEXT_CHECK_NOT_REQUIRED;
 
   if (instr->arity() == 0) {
-    ArrayNoArgumentConstructorStub stub(kind, disable_allocation_sites);
+    ArrayNoArgumentConstructorStub stub(kind, context_mode, override_mode);
     CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
   } else if (instr->arity() == 1) {
-    ArraySingleArgumentConstructorStub stub(kind, disable_allocation_sites);
+    Label done;
+    if (IsFastPackedElementsKind(kind)) {
+      Label packed_case;
+      // We might need a change here,
+      // look at the first argument.
+      __ lw(t1, MemOperand(sp, 0));
+      __ Branch(&packed_case, eq, t1, Operand(zero_reg));
+
+      ElementsKind holey_kind = GetHoleyElementsKind(kind);
+      ArraySingleArgumentConstructorStub stub(holey_kind, context_mode,
+                                              override_mode);
+      CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
+      __ jmp(&done);
+      __ bind(&packed_case);
+    }
+
+    ArraySingleArgumentConstructorStub stub(kind, context_mode, override_mode);
     CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
+    __ bind(&done);
   } else {
-    ArrayNArgumentsConstructorStub stub(kind, disable_allocation_sites);
+    ArrayNArgumentsConstructorStub stub(kind, context_mode, override_mode);
     CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
   }
 }
@@ -3989,9 +4116,6 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
   }
 
   if (!transition.is_null()) {
-    if (transition->CanBeDeprecated()) {
-      transition_maps_.Add(transition, info()->zone());
-    }
     __ li(scratch, Operand(transition));
     __ sw(scratch, FieldMemOperand(object, HeapObject::kMapOffset));
     if (instr->hydrogen()->NeedsWriteBarrierForMap()) {
@@ -4011,9 +4135,9 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
   // Do the store.
   Register value = ToRegister(instr->value());
   ASSERT(!object.is(value));
-  HType type = instr->hydrogen()->value()->type();
   SmiCheck check_needed =
-      type.IsHeapObject() ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
+      instr->hydrogen()->value()->IsHeapObject()
+          ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
   if (access.IsInobject()) {
     __ sw(value, FieldMemOperand(object, offset));
     if (instr->hydrogen()->NeedsWriteBarrier()) {
@@ -4238,9 +4362,9 @@ void LCodeGen::DoStoreKeyedFixedArray(LStoreKeyed* instr) {
   __ sw(value, FieldMemOperand(store_base, offset));
 
   if (instr->hydrogen()->NeedsWriteBarrier()) {
-    HType type = instr->hydrogen()->value()->type();
     SmiCheck check_needed =
-       type.IsHeapObject() ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
+        instr->hydrogen()->value()->IsHeapObject()
+            ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
     // Compute address of modified element and store it into key register.
     __ Addu(key, store_base, Operand(offset - kHeapObjectTag));
     __ RecordWrite(elements,
@@ -4991,9 +5115,11 @@ void LCodeGen::DoCheckSmi(LCheckSmi* instr) {
 
 
 void LCodeGen::DoCheckNonSmi(LCheckNonSmi* instr) {
-  LOperand* input = instr->value();
-  __ And(at, ToRegister(input), Operand(kSmiTagMask));
-  DeoptimizeIf(eq, instr->environment(), at, Operand(zero_reg));
+  if (!instr->hydrogen()->value()->IsHeapObject()) {
+    LOperand* input = instr->value();
+    __ And(at, ToRegister(input), Operand(kSmiTagMask));
+    DeoptimizeIf(eq, instr->environment(), at, Operand(zero_reg));
+  }
 }
 
 
@@ -5042,10 +5168,9 @@ void LCodeGen::DoCheckFunction(LCheckFunction* instr) {
   AllowDeferredHandleDereference smi_check;
   if (isolate()->heap()->InNewSpace(*target)) {
     Register reg = ToRegister(instr->value());
-    Handle<JSGlobalPropertyCell> cell =
-        isolate()->factory()->NewJSGlobalPropertyCell(target);
+    Handle<Cell> cell = isolate()->factory()->NewPropertyCell(target);
     __ li(at, Operand(Handle<Object>(cell)));
-    __ lw(at, FieldMemOperand(at, JSGlobalPropertyCell::kValueOffset));
+    __ lw(at, FieldMemOperand(at, Cell::kValueOffset));
     DeoptimizeIf(ne, instr->environment(), reg,
                  Operand(at));
   } else {
@@ -5142,11 +5267,7 @@ void LCodeGen::DoCheckPrototypeMaps(LCheckPrototypeMaps* instr) {
 
   ASSERT(prototypes->length() == maps->length());
 
-  if (instr->hydrogen()->CanOmitPrototypeChecks()) {
-    for (int i = 0; i < maps->length(); i++) {
-      prototype_maps_.Add(maps->at(i), info()->zone());
-    }
-  } else {
+  if (!instr->hydrogen()->CanOmitPrototypeChecks()) {
     for (int i = 0; i < prototypes->length(); i++) {
       __ LoadHeapObject(prototype_reg, prototypes->at(i));
       __ lw(map_reg, FieldMemOperand(prototype_reg, HeapObject::kMapOffset));
@@ -5156,6 +5277,80 @@ void LCodeGen::DoCheckPrototypeMaps(LCheckPrototypeMaps* instr) {
 }
 
 
+void LCodeGen::DoAllocateObject(LAllocateObject* instr) {
+  class DeferredAllocateObject: public LDeferredCode {
+   public:
+    DeferredAllocateObject(LCodeGen* codegen, LAllocateObject* instr)
+        : LDeferredCode(codegen), instr_(instr) { }
+    virtual void Generate() { codegen()->DoDeferredAllocateObject(instr_); }
+    virtual LInstruction* instr() { return instr_; }
+   private:
+    LAllocateObject* instr_;
+  };
+
+  DeferredAllocateObject* deferred =
+      new(zone()) DeferredAllocateObject(this, instr);
+
+  Register result = ToRegister(instr->result());
+  Register scratch = ToRegister(instr->temp());
+  Register scratch2 = ToRegister(instr->temp2());
+  Handle<JSFunction> constructor = instr->hydrogen()->constructor();
+  Handle<Map> initial_map = instr->hydrogen()->constructor_initial_map();
+  int instance_size = initial_map->instance_size();
+  ASSERT(initial_map->pre_allocated_property_fields() +
+         initial_map->unused_property_fields() -
+         initial_map->inobject_properties() == 0);
+
+  __ Allocate(instance_size, result, scratch, scratch2, deferred->entry(),
+              TAG_OBJECT);
+
+  __ bind(deferred->exit());
+  if (FLAG_debug_code) {
+    Label is_in_new_space;
+    __ JumpIfInNewSpace(result, scratch, &is_in_new_space);
+    __ Abort("Allocated object is not in new-space");
+    __ bind(&is_in_new_space);
+  }
+
+  // Load the initial map.
+  Register map = scratch;
+  __ LoadHeapObject(map, constructor);
+  __ lw(map, FieldMemOperand(map, JSFunction::kPrototypeOrInitialMapOffset));
+
+  // Initialize map and fields of the newly allocated object.
+  ASSERT(initial_map->instance_type() == JS_OBJECT_TYPE);
+  __ sw(map, FieldMemOperand(result, JSObject::kMapOffset));
+  __ LoadRoot(scratch, Heap::kEmptyFixedArrayRootIndex);
+  __ sw(scratch, FieldMemOperand(result, JSObject::kElementsOffset));
+  __ sw(scratch, FieldMemOperand(result, JSObject::kPropertiesOffset));
+  if (initial_map->inobject_properties() != 0) {
+    __ LoadRoot(scratch, Heap::kUndefinedValueRootIndex);
+    for (int i = 0; i < initial_map->inobject_properties(); i++) {
+      int property_offset = JSObject::kHeaderSize + i * kPointerSize;
+      __ sw(scratch, FieldMemOperand(result, property_offset));
+    }
+  }
+}
+
+
+void LCodeGen::DoDeferredAllocateObject(LAllocateObject* instr) {
+  Register result = ToRegister(instr->result());
+  Handle<Map> initial_map = instr->hydrogen()->constructor_initial_map();
+  int instance_size = initial_map->instance_size();
+
+  // TODO(3095996): Get rid of this. For now, we need to make the
+  // result register contain a valid pointer because it is already
+  // contained in the register pointer map.
+  __ mov(result, zero_reg);
+
+  PushSafepointRegistersScope scope(this, Safepoint::kWithRegisters);
+  __ li(a0, Operand(Smi::FromInt(instance_size)));
+  __ push(a0);
+  CallRuntimeFromDeferred(Runtime::kAllocateInNewSpace, 1, instr);
+  __ StoreToSafepointRegisterSlot(v0, result);
+}
+
+
 void LCodeGen::DoAllocate(LAllocate* instr) {
   class DeferredAllocate: public LDeferredCode {
    public:
@@ -5323,16 +5518,12 @@ void LCodeGen::DoTypeof(LTypeof* instr) {
 
 void LCodeGen::DoTypeofIsAndBranch(LTypeofIsAndBranch* instr) {
   Register input = ToRegister(instr->value());
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-  Label* true_label = chunk_->GetAssemblyLabel(true_block);
-  Label* false_label = chunk_->GetAssemblyLabel(false_block);
 
   Register cmp1 = no_reg;
   Operand cmp2 = Operand(no_reg);
 
-  Condition final_branch_condition = EmitTypeofIs(true_label,
-                                                  false_label,
+  Condition final_branch_condition = EmitTypeofIs(instr->TrueLabel(chunk_),
+                                                  instr->FalseLabel(chunk_),
                                                   input,
                                                   instr->type_literal(),
                                                   cmp1,
@@ -5342,7 +5533,7 @@ void LCodeGen::DoTypeofIsAndBranch(LTypeofIsAndBranch* instr) {
   ASSERT(!cmp2.is_reg() || cmp2.rm().is_valid());
 
   if (final_branch_condition != kNoCondition) {
-    EmitBranch(true_block, false_block, final_branch_condition, cmp1, cmp2);
+    EmitBranch(instr, final_branch_condition, cmp1, cmp2);
   }
 }
 
@@ -5455,12 +5646,10 @@ Condition LCodeGen::EmitTypeofIs(Label* true_label,
 
 void LCodeGen::DoIsConstructCallAndBranch(LIsConstructCallAndBranch* instr) {
   Register temp1 = ToRegister(instr->temp());
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
 
   EmitIsConstructCall(temp1, scratch0());
 
-  EmitBranch(true_block, false_block, eq, temp1,
+  EmitBranch(instr, eq, temp1,
              Operand(Smi::FromInt(StackFrame::CONSTRUCT)));
 }
 
@@ -5611,15 +5800,15 @@ void LCodeGen::DoOsrEntry(LOsrEntry* instr) {
   // properly registered for deoptimization and records the assembler's PC
   // offset.
   LEnvironment* environment = instr->environment();
-  environment->SetSpilledRegisters(instr->SpilledRegisterArray(),
-                                   instr->SpilledDoubleRegisterArray());
 
   // If the environment were already registered, we would have no way of
   // backpatching it with the spill slot operands.
   ASSERT(!environment->HasBeenRegistered());
   RegisterEnvironmentForDeoptimization(environment, Safepoint::kNoLazyDeopt);
-  ASSERT(osr_pc_offset_ == -1);
-  osr_pc_offset_ = masm()->pc_offset();
+
+  // Normally we record the first unknown OSR value as the entrypoint to the OSR
+  // code, but if there were none, record the entrypoint here.
+  if (osr_pc_offset_ == -1) osr_pc_offset_ = masm()->pc_offset();
 }
 
 
index a208c40..3d31ef1 100644 (file)
@@ -55,8 +55,6 @@ class LCodeGen BASE_EMBEDDED {
         deoptimizations_(4, info->zone()),
         deopt_jump_table_(4, info->zone()),
         deoptimization_literals_(8, info->zone()),
-        prototype_maps_(0, info->zone()),
-        transition_maps_(0, info->zone()),
         inlined_function_count_(0),
         scope_(info->scope()),
         status_(UNUSED),
@@ -80,7 +78,6 @@ class LCodeGen BASE_EMBEDDED {
   Heap* heap() const { return isolate()->heap(); }
   Zone* zone() const { return zone_; }
 
-  // TODO(svenpanne) Use this consistently.
   int LookupDestination(int block_id) const {
     return chunk()->LookupDestination(block_id);
   }
@@ -151,6 +148,7 @@ class LCodeGen BASE_EMBEDDED {
   void DoDeferredRandom(LRandom* instr);
   void DoDeferredStringCharCodeAt(LStringCharCodeAt* instr);
   void DoDeferredStringCharFromCode(LStringCharFromCode* instr);
+  void DoDeferredAllocateObject(LAllocateObject* instr);
   void DoDeferredAllocate(LAllocate* instr);
   void DoDeferredInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr,
                                        Label* map_check);
@@ -171,10 +169,7 @@ class LCodeGen BASE_EMBEDDED {
                                  int additional_offset);
 
   // Emit frame translation commands for an environment.
-  void WriteTranslation(LEnvironment* environment,
-                        Translation* translation,
-                        int* arguments_index,
-                        int* arguments_count);
+  void WriteTranslation(LEnvironment* environment, Translation* translation);
 
   // Declare methods that deal with the individual node types.
 #define DECLARE_DO(type) void Do##type(L##type* node);
@@ -297,10 +292,7 @@ class LCodeGen BASE_EMBEDDED {
   void AddToTranslation(Translation* translation,
                         LOperand* op,
                         bool is_tagged,
-                        bool is_uint32,
-                        bool arguments_known,
-                        int arguments_index,
-                        int arguments_count);
+                        bool is_uint32);
   void RegisterDependentCodeForEmbeddedMaps(Handle<Code> code);
   void PopulateDeoptimizationData(Handle<Code> code);
   int DefineDeoptimizationLiteral(Handle<Object> literal);
@@ -329,13 +321,13 @@ class LCodeGen BASE_EMBEDDED {
 
   static Condition TokenToCondition(Token::Value op, bool is_unsigned);
   void EmitGoto(int block);
-  void EmitBranch(int left_block,
-                  int right_block,
+  template<class InstrType>
+  void EmitBranch(InstrType instr,
                   Condition cc,
                   Register src1,
                   const Operand& src2);
-  void EmitBranchF(int left_block,
-                   int right_block,
+  template<class InstrType>
+  void EmitBranchF(InstrType instr,
                    Condition cc,
                    FPURegister src1,
                    FPURegister src2);
@@ -373,7 +365,8 @@ class LCodeGen BASE_EMBEDDED {
   // true and false label should be made, to optimize fallthrough.
   Condition EmitIsString(Register input,
                          Register temp1,
-                         Label* is_not_string);
+                         Label* is_not_string,
+                         SmiCheck check_needed);
 
   // Emits optimized code for %_IsConstructCall().
   // Caller should branch on equal condition.
@@ -392,6 +385,17 @@ class LCodeGen BASE_EMBEDDED {
                     Register source,
                     int* offset,
                     AllocationSiteMode mode);
+  // Emit optimized code for integer division.
+  // Inputs are signed.
+  // All registers are clobbered.
+  // If 'remainder' is no_reg, it is not computed.
+  void EmitSignedIntegerDivisionByConstant(Register result,
+                                           Register dividend,
+                                           int32_t divisor,
+                                           Register remainder,
+                                           Register scratch,
+                                           LEnvironment* environment);
+
 
   void EnsureSpaceForLazyDeopt();
   void DoLoadKeyedExternalArray(LLoadKeyed* instr);
@@ -412,8 +416,6 @@ class LCodeGen BASE_EMBEDDED {
   ZoneList<LEnvironment*> deoptimizations_;
   ZoneList<Deoptimizer::JumpTableEntry> deopt_jump_table_;
   ZoneList<Handle<Object> > deoptimization_literals_;
-  ZoneList<Handle<Map> > prototype_maps_;
-  ZoneList<Handle<Map> > transition_maps_;
   int inlined_function_count_;
   Scope* const scope_;
   Status status_;
index ad39c61..638eaa4 100644 (file)
@@ -41,24 +41,6 @@ namespace internal {
 LITHIUM_CONCRETE_INSTRUCTION_LIST(DEFINE_COMPILE)
 #undef DEFINE_COMPILE
 
-LOsrEntry::LOsrEntry() {
-  for (int i = 0; i < Register::NumAllocatableRegisters(); ++i) {
-    register_spills_[i] = NULL;
-  }
-  for (int i = 0; i < DoubleRegister::NumAllocatableRegisters(); ++i) {
-    double_register_spills_[i] = NULL;
-  }
-}
-
-
-void LOsrEntry::MarkSpilledRegister(int allocation_index,
-                                    LOperand* spill_operand) {
-  ASSERT(spill_operand->IsStackSlot());
-  ASSERT(register_spills_[allocation_index] == NULL);
-  register_spills_[allocation_index] = spill_operand;
-}
-
-
 #ifdef DEBUG
 void LInstruction::VerifyCall() {
   // Call instructions can use only fixed registers as temporaries and
@@ -81,14 +63,6 @@ void LInstruction::VerifyCall() {
 #endif
 
 
-void LOsrEntry::MarkSpilledDoubleRegister(int allocation_index,
-                                          LOperand* spill_operand) {
-  ASSERT(spill_operand->IsDoubleStackSlot());
-  ASSERT(double_register_spills_[allocation_index] == NULL);
-  double_register_spills_[allocation_index] = spill_operand;
-}
-
-
 void LInstruction::PrintTo(StringStream* stream) {
   stream->Add("%s ", this->Mnemonic());
 
@@ -356,8 +330,7 @@ void LCallNewArray::PrintDataTo(StringStream* stream) {
   constructor()->PrintTo(stream);
   stream->Add(" #%d / ", arity());
   ASSERT(hydrogen()->property_cell()->value()->IsSmi());
-  ElementsKind kind = static_cast<ElementsKind>(
-      Smi::cast(hydrogen()->property_cell()->value())->value());
+  ElementsKind kind = hydrogen()->elements_kind();
   stream->Add(" (%s) ", ElementsKindToString(kind));
 }
 
@@ -455,7 +428,7 @@ LOperand* LPlatformChunk::GetNextSpillSlot(bool is_double)  {
 LPlatformChunk* LChunkBuilder::Build() {
   ASSERT(is_unused());
   chunk_ = new(zone()) LPlatformChunk(info(), graph());
-  HPhase phase("L_Building chunk", chunk_);
+  LPhase phase("L_Building chunk", chunk_);
   status_ = BUILDING;
   const ZoneList<HBasicBlock*>* blocks = graph()->blocks();
   for (int i = 0; i < blocks->length(); i++) {
@@ -933,7 +906,7 @@ LEnvironment* LChunkBuilder::CreateEnvironment(
   BailoutId ast_id = hydrogen_env->ast_id();
   ASSERT(!ast_id.IsNone() ||
          hydrogen_env->frame_type() != JS_FUNCTION);
-  int value_count = hydrogen_env->length();
+  int value_count = hydrogen_env->length() - hydrogen_env->specials_count();
   LEnvironment* result = new(zone()) LEnvironment(
       hydrogen_env->closure(),
       hydrogen_env->frame_type(),
@@ -944,13 +917,15 @@ LEnvironment* LChunkBuilder::CreateEnvironment(
       outer,
       hydrogen_env->entry(),
       zone());
+  bool needs_arguments_object_materialization = false;
   int argument_index = *argument_index_accumulator;
-  for (int i = 0; i < value_count; ++i) {
+  for (int i = 0; i < hydrogen_env->length(); ++i) {
     if (hydrogen_env->is_special_index(i)) continue;
 
     HValue* value = hydrogen_env->values()->at(i);
     LOperand* op = NULL;
     if (value->IsArgumentsObject()) {
+      needs_arguments_object_materialization = true;
       op = NULL;
     } else if (value->IsPushArgument()) {
       op = new(zone()) LArgument(argument_index++);
@@ -962,6 +937,21 @@ LEnvironment* LChunkBuilder::CreateEnvironment(
                      value->CheckFlag(HInstruction::kUint32));
   }
 
+  if (needs_arguments_object_materialization) {
+    HArgumentsObject* arguments = hydrogen_env->entry() == NULL
+        ? graph()->GetArgumentsObject()
+        : hydrogen_env->entry()->arguments_object();
+    ASSERT(arguments->IsLinked());
+    for (int i = 1; i < arguments->arguments_count(); ++i) {
+      HValue* value = arguments->arguments_values()->at(i);
+      ASSERT(!value->IsArgumentsObject() && !value->IsPushArgument());
+      LOperand* op = UseAny(value);
+      result->AddValue(op,
+                       value->representation(),
+                       value->CheckFlag(HInstruction::kUint32));
+    }
+  }
+
   if (hydrogen_env->frame_type() == JS_FUNCTION) {
     *argument_index_accumulator = argument_index;
   }
@@ -986,10 +976,13 @@ LInstruction* LChunkBuilder::DoBranch(HBranch* instr) {
 
   LBranch* result = new(zone()) LBranch(UseRegister(value));
   // Tagged values that are not known smis or booleans require a
-  // deoptimization environment.
+  // deoptimization environment. If the instruction is generic no
+  // environment is needed since all cases are handled.
   Representation rep = value->representation();
   HType type = value->type();
-  if (rep.IsTagged() && !type.IsSmi() && !type.IsBoolean()) {
+  ToBooleanStub::Types expected = instr->expected_input_types();
+  if (rep.IsTagged() && !type.IsSmi() && !type.IsBoolean() &&
+      !expected.IsGeneric()) {
     return AssignEnvironment(result);
   }
   return result;
@@ -1342,27 +1335,69 @@ LInstruction* LChunkBuilder::DoDiv(HDiv* instr) {
   if (instr->representation().IsDouble()) {
     return DoArithmeticD(Token::DIV, instr);
   } else if (instr->representation().IsInteger32()) {
-    // TODO(1042) The fixed register allocation
-    // is needed because we call TypeRecordingBinaryOpStub from
-    // the generated code, which requires registers a0
-    // and a1 to be used. We should remove that
-    // when we provide a native implementation.
-    LOperand* dividend = UseFixed(instr->left(), a0);
-    LOperand* divisor = UseFixed(instr->right(), a1);
-    return AssignEnvironment(AssignPointerMap(
-             DefineFixed(new(zone()) LDivI(dividend, divisor), v0)));
+    LOperand* dividend = UseRegister(instr->left());
+    LOperand* divisor = UseRegister(instr->right());
+    LDivI* div = new(zone()) LDivI(dividend, divisor);
+    return AssignEnvironment(DefineAsRegister(div));
   } else {
     return DoArithmeticT(Token::DIV, instr);
   }
 }
 
 
-LInstruction* LChunkBuilder::DoMathFloorOfDiv(HMathFloorOfDiv* instr) {
-  UNIMPLEMENTED();
+bool LChunkBuilder::HasMagicNumberForDivisor(int32_t divisor) {
+  uint32_t divisor_abs = abs(divisor);
+  // Dividing by 0, 1, and powers of 2 is easy.
+  // Note that IsPowerOf2(0) returns true;
+  ASSERT(IsPowerOf2(0) == true);
+  if (IsPowerOf2(divisor_abs)) return true;
+
+  // We have magic numbers for a few specific divisors.
+  // Details and proofs can be found in:
+  // - Hacker's Delight, Henry S. Warren, Jr.
+  // - The PowerPC Compiler Writer's Guide
+  // and probably many others.
+  //
+  // We handle
+  //   <divisor with magic numbers> * <power of 2>
+  // but not
+  //   <divisor with magic numbers> * <other divisor with magic numbers>
+  int32_t power_of_2_factor =
+    CompilerIntrinsics::CountTrailingZeros(divisor_abs);
+  DivMagicNumbers magic_numbers =
+    DivMagicNumberFor(divisor_abs >> power_of_2_factor);
+  if (magic_numbers.M != InvalidDivMagicNumber.M) return true;
+
+  return false;
+}
+
+
+HValue* LChunkBuilder::SimplifiedDivisorForMathFloorOfDiv(HValue* divisor) {
+  // Only optimize when we have magic numbers for the divisor.
+  // The standard integer division routine is usually slower than transitionning
+  // to FPU.
+  if (divisor->IsConstant() &&
+      HConstant::cast(divisor)->HasInteger32Value()) {
+    HConstant* constant_val = HConstant::cast(divisor);
+    return constant_val->CopyToRepresentation(Representation::Integer32(),
+                                                divisor->block()->zone());
+  }
   return NULL;
 }
 
 
+LInstruction* LChunkBuilder::DoMathFloorOfDiv(HMathFloorOfDiv* instr) {
+    HValue* right = instr->right();
+    LOperand* dividend = UseRegister(instr->left());
+    LOperand* divisor = UseRegisterOrConstant(right);
+    LOperand* remainder = TempRegister();
+    ASSERT(right->IsConstant() &&
+           HConstant::cast(right)->HasInteger32Value());
+    return AssignEnvironment(DefineAsRegister(
+          new(zone()) LMathFloorOfDiv(dividend, divisor, remainder)));
+}
+
+
 LInstruction* LChunkBuilder::DoMod(HMod* instr) {
   HValue* left = instr->left();
   HValue* right = instr->right();
@@ -1378,6 +1413,10 @@ LInstruction* LChunkBuilder::DoMod(HMod* instr) {
               instr->CheckFlag(HValue::kBailoutOnMinusZero))
           ? AssignEnvironment(result)
           : result;
+    } else if (instr->fixed_right_arg().has_value) {
+      LModI* mod = new(zone()) LModI(UseRegisterAtStart(left),
+                                     UseRegisterAtStart(right));
+      return AssignEnvironment(DefineAsRegister(mod));
     } else {
       LModI* mod = new(zone()) LModI(UseRegister(left),
                                      UseRegister(right),
@@ -1677,13 +1716,6 @@ LInstruction* LChunkBuilder::DoClassOfTestAndBranch(
 }
 
 
-LInstruction* LChunkBuilder::DoFixedArrayBaseLength(
-    HFixedArrayBaseLength* instr) {
-  LOperand* array = UseRegisterAtStart(instr->value());
-  return DefineAsRegister(new(zone()) LFixedArrayBaseLength(array));
-}
-
-
 LInstruction* LChunkBuilder::DoMapEnumLength(HMapEnumLength* instr) {
   LOperand* map = UseRegisterAtStart(instr->value());
   return DefineAsRegister(new(zone()) LMapEnumLength(map));
@@ -1880,7 +1912,7 @@ LInstruction* LChunkBuilder::DoChange(HChange* instr) {
 }
 
 
-LInstruction* LChunkBuilder::DoCheckNonSmi(HCheckNonSmi* instr) {
+LInstruction* LChunkBuilder::DoCheckHeapObject(HCheckHeapObject* instr) {
   LOperand* value = UseRegisterAtStart(instr->value());
   return AssignEnvironment(new(zone()) LCheckNonSmi(value));
 }
@@ -2279,6 +2311,14 @@ LInstruction* LChunkBuilder::DoStringLength(HStringLength* instr) {
 }
 
 
+LInstruction* LChunkBuilder::DoAllocateObject(HAllocateObject* instr) {
+  info()->MarkAsDeferredCalling();
+  LAllocateObject* result =
+      new(zone()) LAllocateObject(TempRegister(), TempRegister());
+  return AssignPointerMap(DefineAsRegister(result));
+}
+
+
 LInstruction* LChunkBuilder::DoAllocate(HAllocate* instr) {
   info()->MarkAsDeferredCalling();
   LOperand* size = instr->size()->IsConstant()
@@ -2451,8 +2491,9 @@ LInstruction* LChunkBuilder::DoEnterInlined(HEnterInlined* instr) {
                                                undefined,
                                                instr->inlining_kind(),
                                                instr->undefined_receiver());
-  if (instr->arguments_var() != NULL) {
-    inner->Bind(instr->arguments_var(), graph()->GetArgumentsObject());
+  // Only replay binding of arguments object if it wasn't removed from graph.
+  if (instr->arguments_var() != NULL && instr->arguments_object()->IsLinked()) {
+    inner->Bind(instr->arguments_var(), instr->arguments_object());
   }
   inner->set_entry(instr);
   current_block_->UpdateEnvironment(inner);
index 50feee0..06d30d0 100644 (file)
@@ -49,6 +49,7 @@ class LCodeGen;
 #define LITHIUM_CONCRETE_INSTRUCTION_LIST(V)    \
   V(AccessArgumentsAt)                          \
   V(AddI)                                       \
+  V(AllocateObject)                             \
   V(Allocate)                                   \
   V(ApplyArguments)                             \
   V(ArgumentsElements)                          \
@@ -98,7 +99,6 @@ class LCodeGen;
   V(DoubleToSmi)                                \
   V(DummyUse)                                   \
   V(ElementsKind)                               \
-  V(FixedArrayBaseLength)                       \
   V(FunctionLiteral)                            \
   V(GetCachedArrayIndex)                        \
   V(GlobalObject)                               \
@@ -137,6 +137,7 @@ class LCodeGen;
   V(MathCos)                                    \
   V(MathExp)                                    \
   V(MathFloor)                                  \
+  V(MathFloorOfDiv)                             \
   V(MathLog)                                    \
   V(MathMinMax)                                 \
   V(MathPowHalf)                                \
@@ -486,17 +487,44 @@ class LUnknownOSRValue: public LTemplateInstruction<1, 0, 0> {
 template<int I, int T>
 class LControlInstruction: public LTemplateInstruction<0, I, T> {
  public:
+  LControlInstruction() : false_label_(NULL), true_label_(NULL) { }
+
   virtual bool IsControl() const { return true; }
 
   int SuccessorCount() { return hydrogen()->SuccessorCount(); }
   HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); }
-  int true_block_id() { return hydrogen()->SuccessorAt(0)->block_id(); }
-  int false_block_id() { return hydrogen()->SuccessorAt(1)->block_id(); }
+
+  int TrueDestination(LChunk* chunk) {
+    return chunk->LookupDestination(true_block_id());
+  }
+  int FalseDestination(LChunk* chunk) {
+    return chunk->LookupDestination(false_block_id());
+  }
+
+  Label* TrueLabel(LChunk* chunk) {
+    if (true_label_ == NULL) {
+      true_label_ = chunk->GetAssemblyLabel(TrueDestination(chunk));
+    }
+    return true_label_;
+  }
+  Label* FalseLabel(LChunk* chunk) {
+    if (false_label_ == NULL) {
+      false_label_ = chunk->GetAssemblyLabel(FalseDestination(chunk));
+    }
+    return false_label_;
+  }
+
+ protected:
+  int true_block_id() { return SuccessorAt(0)->block_id(); }
+  int false_block_id() { return SuccessorAt(1)->block_id(); }
 
  private:
   HControlInstruction* hydrogen() {
     return HControlInstruction::cast(this->hydrogen_value());
   }
+
+  Label* false_label_;
+  Label* true_label_;
 };
 
 
@@ -623,6 +651,25 @@ class LDivI: public LTemplateInstruction<1, 2, 0> {
 };
 
 
+class LMathFloorOfDiv: public LTemplateInstruction<1, 2, 1> {
+ public:
+  LMathFloorOfDiv(LOperand* left,
+                  LOperand* right,
+                  LOperand* temp = NULL) {
+    inputs_[0] = left;
+    inputs_[1] = right;
+    temps_[0] = temp;
+  }
+
+  LOperand* left() { return inputs_[0]; }
+  LOperand* right() { return inputs_[1]; }
+  LOperand* temp() { return temps_[0]; }
+
+  DECLARE_CONCRETE_INSTRUCTION(MathFloorOfDiv, "math-floor-of-div")
+  DECLARE_HYDROGEN_ACCESSOR(MathFloorOfDiv)
+};
+
+
 class LMulI: public LTemplateInstruction<1, 2, 1> {
  public:
   LMulI(LOperand* left, LOperand* right, LOperand* temp) {
@@ -1195,7 +1242,7 @@ class LBranch: public LControlInstruction<1, 0> {
 };
 
 
-class LCmpMapAndBranch: public LTemplateInstruction<0, 1, 1> {
+class LCmpMapAndBranch: public LControlInstruction<1, 1> {
  public:
   LCmpMapAndBranch(LOperand* value, LOperand* temp) {
     inputs_[0] = value;
@@ -1208,29 +1255,7 @@ class LCmpMapAndBranch: public LTemplateInstruction<0, 1, 1> {
   DECLARE_CONCRETE_INSTRUCTION(CmpMapAndBranch, "cmp-map-and-branch")
   DECLARE_HYDROGEN_ACCESSOR(CompareMap)
 
-  virtual bool IsControl() const { return true; }
-
   Handle<Map> map() const { return hydrogen()->map(); }
-  int true_block_id() const {
-    return hydrogen()->FirstSuccessor()->block_id();
-  }
-  int false_block_id() const {
-    return hydrogen()->SecondSuccessor()->block_id();
-  }
-};
-
-
-class LFixedArrayBaseLength: public LTemplateInstruction<1, 1, 0> {
- public:
-  explicit LFixedArrayBaseLength(LOperand* value) {
-    inputs_[0] = value;
-  }
-
-  LOperand* value() { return inputs_[0]; }
-
-  DECLARE_CONCRETE_INSTRUCTION(FixedArrayBaseLength,
-                               "fixed-array-base-length")
-  DECLARE_HYDROGEN_ACCESSOR(FixedArrayBaseLength)
 };
 
 
@@ -2354,6 +2379,7 @@ class LCheckNonSmi: public LTemplateInstruction<0, 1, 0> {
   LOperand* value() { return inputs_[0]; }
 
   DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi")
+  DECLARE_HYDROGEN_ACCESSOR(CheckHeapObject)
 };
 
 
@@ -2397,6 +2423,21 @@ class LClampTToUint8: public LTemplateInstruction<1, 1, 1> {
 };
 
 
+class LAllocateObject: public LTemplateInstruction<1, 1, 2> {
+ public:
+  LAllocateObject(LOperand* temp, LOperand* temp2) {
+    temps_[0] = temp;
+    temps_[1] = temp2;
+  }
+
+  LOperand* temp() { return temps_[0]; }
+  LOperand* temp2() { return temps_[1]; }
+
+  DECLARE_CONCRETE_INSTRUCTION(AllocateObject, "allocate-object")
+  DECLARE_HYDROGEN_ACCESSOR(AllocateObject)
+};
+
+
 class LAllocate: public LTemplateInstruction<1, 2, 2> {
  public:
   LAllocate(LOperand* size, LOperand* temp1, LOperand* temp2) {
@@ -2499,26 +2540,10 @@ class LDeleteProperty: public LTemplateInstruction<1, 2, 0> {
 
 class LOsrEntry: public LTemplateInstruction<0, 0, 0> {
  public:
-  LOsrEntry();
+  LOsrEntry() {}
 
   virtual bool HasInterestingComment(LCodeGen* gen) const { return false; }
   DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry")
-
-  LOperand** SpilledRegisterArray() { return register_spills_; }
-  LOperand** SpilledDoubleRegisterArray() { return double_register_spills_; }
-
-  void MarkSpilledRegister(int allocation_index, LOperand* spill_operand);
-  void MarkSpilledDoubleRegister(int allocation_index,
-                                 LOperand* spill_operand);
-
- private:
-  // Arrays of spill slot operands for registers with an assigned spill
-  // slot, i.e., that must also be restored to the spill slot on OSR entry.
-  // NULL if the register has no assigned spill slot.  Indexed by allocation
-  // index.
-  LOperand* register_spills_[Register::kMaxNumAllocatableRegisters];
-  LOperand* double_register_spills_[
-      DoubleRegister::kMaxNumAllocatableRegisters];
 };
 
 
@@ -2642,6 +2667,9 @@ class LChunkBuilder BASE_EMBEDDED {
 
   LInstruction* DoMultiplyAdd(HMul* mul, HValue* addend);
 
+  static bool HasMagicNumberForDivisor(int32_t divisor);
+  static HValue* SimplifiedDivisorForMathFloorOfDiv(HValue* val);
+
   LInstruction* DoMathFloor(HUnaryMathOperation* instr);
   LInstruction* DoMathRound(HUnaryMathOperation* instr);
   LInstruction* DoMathAbs(HUnaryMathOperation* instr);
index d55451b..47e6ff9 100644 (file)
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_MIPS
 
 #include "bootstrapper.h"
 #include "codegen.h"
+#include "cpu-profiler.h"
 #include "debug.h"
 #include "runtime.h"
 
@@ -85,10 +86,9 @@ void MacroAssembler::LoadHeapObject(Register result,
                                     Handle<HeapObject> object) {
   AllowDeferredHandleDereference using_raw_address;
   if (isolate()->heap()->InNewSpace(*object)) {
-    Handle<JSGlobalPropertyCell> cell =
-        isolate()->factory()->NewJSGlobalPropertyCell(object);
+    Handle<Cell> cell = isolate()->factory()->NewCell(object);
     li(result, Operand(cell));
-    lw(result, FieldMemOperand(result, JSGlobalPropertyCell::kValueOffset));
+    lw(result, FieldMemOperand(result, Cell::kValueOffset));
   } else {
     li(result, Operand(object));
   }
@@ -3203,6 +3203,14 @@ void MacroAssembler::AllocateAsciiSlicedString(Register result,
 }
 
 
+void MacroAssembler::JumpIfNotUniqueName(Register reg,
+                                         Label* not_unique_name) {
+  STATIC_ASSERT(((SYMBOL_TYPE - 1) & kIsInternalizedMask) == kInternalizedTag);
+  Branch(not_unique_name, lt, reg, Operand(kIsInternalizedMask));
+  Branch(not_unique_name, gt, reg, Operand(SYMBOL_TYPE));
+}
+
+
 // Allocates a heap number or jumps to the label if the young space is full and
 // a scavenge is needed.
 void MacroAssembler::AllocateHeapNumber(Register result,
@@ -3910,6 +3918,9 @@ static int AddressOffset(ExternalReference ref0, ExternalReference ref1) {
 
 
 void MacroAssembler::CallApiFunctionAndReturn(ExternalReference function,
+                                              Address function_address,
+                                              ExternalReference thunk_ref,
+                                              Register thunk_last_arg,
                                               int stack_space,
                                               bool returns_handle,
                                               int return_value_offset_from_fp) {
@@ -3948,11 +3959,30 @@ void MacroAssembler::CallApiFunctionAndReturn(ExternalReference function,
     addiu(a0, fp, ExitFrameConstants::kStackSpaceOffset);
   }
 
+  Label profiler_disabled;
+  Label end_profiler_check;
+  bool* is_profiling_flag =
+      isolate()->cpu_profiler()->is_profiling_address();
+  STATIC_ASSERT(sizeof(*is_profiling_flag) == 1);
+  li(t9, reinterpret_cast<int32_t>(is_profiling_flag));
+  lb(t9, MemOperand(t9, 0));
+  beq(t9, zero_reg, &profiler_disabled);
+
+  // Third parameter is the address of the actual getter function.
+  li(thunk_last_arg, reinterpret_cast<int32_t>(function_address));
+  li(t9, Operand(thunk_ref));
+  jmp(&end_profiler_check);
+
+  bind(&profiler_disabled);
+  li(t9, Operand(function));
+
+  bind(&end_profiler_check);
+
   // Native call returns to the DirectCEntry stub which redirects to the
   // return address pushed on stack (could have moved after GC).
   // DirectCEntry stub itself is generated early and never moves.
   DirectCEntryStub stub;
-  stub.GenerateCall(this, function);
+  stub.GenerateCall(this, t9);
 
   if (FLAG_log_timer_events) {
     FrameScope frame(this, StackFrame::MANUAL);
@@ -4694,19 +4724,19 @@ void MacroAssembler::InitializeNewString(Register string,
 
 
 int MacroAssembler::ActivationFrameAlignment() {
-#if defined(V8_HOST_ARCH_MIPS)
+#if V8_HOST_ARCH_MIPS
   // Running on the real platform. Use the alignment as mandated by the local
   // environment.
   // Note: This will break if we ever start generating snapshots on one Mips
   // platform for another Mips platform with a different alignment.
   return OS::ActivationFrameAlignment();
-#else  // defined(V8_HOST_ARCH_MIPS)
+#else  // V8_HOST_ARCH_MIPS
   // If we are using the simulator then we should always align to the expected
   // alignment. As the simulator is used to generate snapshots we do not know
   // if the target platform will need alignment, so this is controlled from a
   // flag.
   return FLAG_sim_stack_alignment;
-#endif  // defined(V8_HOST_ARCH_MIPS)
+#endif  // V8_HOST_ARCH_MIPS
 }
 
 
@@ -5037,7 +5067,7 @@ void MacroAssembler::CallCFunctionHelper(Register function,
   // The argument stots are presumed to have been set up by
   // PrepareCallCFunction. The C function must be called via t9, for mips ABI.
 
-#if defined(V8_HOST_ARCH_MIPS)
+#if V8_HOST_ARCH_MIPS
   if (emit_debug_code()) {
     int frame_alignment = OS::ActivationFrameAlignment();
     int frame_alignment_mask = frame_alignment - 1;
index 5e6bfba..ffae2fd 100644 (file)
@@ -1235,6 +1235,9 @@ class MacroAssembler: public Assembler {
   // - space to be unwound on exit (includes the call JS arguments space and
   // the additional space allocated for the fast call).
   void CallApiFunctionAndReturn(ExternalReference function,
+                                Address function_address,
+                                ExternalReference thunk_ref,
+                                Register thunk_last_arg,
                                 int stack_space,
                                 bool returns_handle,
                                 int return_value_offset_from_fp);
@@ -1403,6 +1406,8 @@ class MacroAssembler: public Assembler {
                                               Register scratch,
                                               Label* failure);
 
+  void JumpIfNotUniqueName(Register reg, Label* not_unique_name);
+
   // Test that both first and second are sequential ASCII strings.
   // Assume that they are non-smis.
   void JumpIfNonSmisNotBothSequentialAsciiStrings(Register first,
index 2961519..7b67a7b 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_MIPS
 
 #include "unicode.h"
 #include "log.h"
index d8a39ab..914a758 100644 (file)
@@ -31,7 +31,7 @@
 #include <cstdarg>
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_MIPS
 
 #include "cpu.h"
 #include "disasm.h"
@@ -1394,6 +1394,9 @@ typedef v8::Handle<v8::Value> (*SimulatorRuntimeDirectApiCall)(int32_t arg0);
 // Here, we pass the first argument in a0, because this function
 // does not return a struct.
 typedef void (*SimulatorRuntimeDirectApiCallNew)(int32_t arg0);
+typedef v8::Handle<v8::Value> (*SimulatorRuntimeProfilingApiCall)(
+    int32_t arg0, int32_t arg1);
+typedef void (*SimulatorRuntimeProfilingApiCallNew)(int32_t arg0, int32_t arg1);
 
 // This signature supports direct call to accessor getter callback.
 // See comment at SimulatorRuntimeDirectApiCall.
@@ -1402,6 +1405,10 @@ typedef v8::Handle<v8::Value> (*SimulatorRuntimeDirectGetterCall)(int32_t arg0,
 // See comment at SimulatorRuntimeDirectApiCallNew.
 typedef void (*SimulatorRuntimeDirectGetterCallNew)(int32_t arg0,
                                                     int32_t arg1);
+typedef v8::Handle<v8::Value> (*SimulatorRuntimeProfilingGetterCall)(
+    int32_t arg0, int32_t arg1, int32_t arg2);
+typedef void (*SimulatorRuntimeProfilingGetterCallNew)(
+    int32_t arg0, int32_t arg1, int32_t arg2);
 
 // Software interrupt instructions are used by the simulator to call into the
 // C-based V8 runtime. They are also used for debugging with simulator.
@@ -1571,6 +1578,30 @@ void Simulator::SoftwareInterrupt(Instruction* instr) {
         target(arg0);
       }
     } else if (
+        redirection->type() == ExternalReference::PROFILING_API_CALL ||
+        redirection->type() == ExternalReference::PROFILING_API_CALL_NEW) {
+      if (redirection->type() == ExternalReference::PROFILING_API_CALL) {
+        // See comment at type definition of SimulatorRuntimeDirectApiCall
+        // for explanation of register usage.
+        if (::v8::internal::FLAG_trace_sim) {
+          PrintF("Call to host function at %p args %08x %08x\n",
+              reinterpret_cast<void*>(external), arg1, arg2);
+        }
+        SimulatorRuntimeProfilingApiCall target =
+            reinterpret_cast<SimulatorRuntimeProfilingApiCall>(external);
+        v8::Handle<v8::Value> result = target(arg1, arg2);
+        *(reinterpret_cast<int*>(arg0)) = reinterpret_cast<int32_t>(*result);
+        set_register(v0, arg0);
+      } else {
+        if (::v8::internal::FLAG_trace_sim) {
+          PrintF("Call to host function at %p args %08x %08x\n",
+              reinterpret_cast<void*>(external), arg0, arg1);
+        }
+        SimulatorRuntimeProfilingApiCallNew target =
+            reinterpret_cast<SimulatorRuntimeProfilingApiCallNew>(external);
+        target(arg0, arg1);
+      }
+    } else if (
         redirection->type() == ExternalReference::DIRECT_GETTER_CALL ||
         redirection->type() == ExternalReference::DIRECT_GETTER_CALL_NEW) {
       if (redirection->type() == ExternalReference::DIRECT_GETTER_CALL) {
@@ -1594,6 +1625,30 @@ void Simulator::SoftwareInterrupt(Instruction* instr) {
             reinterpret_cast<SimulatorRuntimeDirectGetterCallNew>(external);
         target(arg0, arg1);
       }
+    } else if (
+        redirection->type() == ExternalReference::PROFILING_GETTER_CALL ||
+        redirection->type() == ExternalReference::PROFILING_GETTER_CALL_NEW) {
+      if (redirection->type() == ExternalReference::PROFILING_GETTER_CALL) {
+        // See comment at type definition of SimulatorRuntimeProfilingGetterCall
+        // for explanation of register usage.
+        if (::v8::internal::FLAG_trace_sim) {
+          PrintF("Call to host function at %p args %08x %08x %08x\n",
+              reinterpret_cast<void*>(external), arg1, arg2, arg3);
+        }
+        SimulatorRuntimeProfilingGetterCall target =
+            reinterpret_cast<SimulatorRuntimeProfilingGetterCall>(external);
+        v8::Handle<v8::Value> result = target(arg1, arg2, arg3);
+        *(reinterpret_cast<int*>(arg0)) = reinterpret_cast<int32_t>(*result);
+        set_register(v0, arg0);
+      } else {
+        if (::v8::internal::FLAG_trace_sim) {
+          PrintF("Call to host function at %p args %08x %08x %08x\n",
+              reinterpret_cast<void*>(external), arg0, arg1, arg2);
+        }
+        SimulatorRuntimeProfilingGetterCallNew target =
+            reinterpret_cast<SimulatorRuntimeProfilingGetterCallNew>(external);
+        target(arg0, arg1, arg2);
+      }
     } else {
       SimulatorRuntimeCall target =
                   reinterpret_cast<SimulatorRuntimeCall>(external);
index a091e5f..601cd6d 100644 (file)
@@ -316,8 +316,6 @@ class Simulator {
     if (instr->InstructionBits() == nopInstr) {
       // Short-cut generic nop instructions. They are always valid and they
       // never change the simulator state.
-      set_register(pc, reinterpret_cast<int32_t>(instr) +
-                       Instruction::kInstrSize);
       return;
     }
 
index be32744..5221190 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_MIPS
 
 #include "ic-inl.h"
 #include "codegen.h"
@@ -420,12 +420,10 @@ static void GenerateCheckPropertyCell(MacroAssembler* masm,
                                       Handle<Name> name,
                                       Register scratch,
                                       Label* miss) {
-  Handle<JSGlobalPropertyCell> cell =
-      GlobalObject::EnsurePropertyCell(global, name);
+  Handle<Cell> cell = GlobalObject::EnsurePropertyCell(global, name);
   ASSERT(cell->value()->IsTheHole());
   __ li(scratch, Operand(cell));
-  __ lw(scratch,
-        FieldMemOperand(scratch, JSGlobalPropertyCell::kValueOffset));
+  __ lw(scratch, FieldMemOperand(scratch, Cell::kValueOffset));
   __ LoadRoot(at, Heap::kTheHoleValueRootIndex);
   __ Branch(miss, ne, scratch, Operand(at));
 }
@@ -505,7 +503,12 @@ void StubCompiler::GenerateStoreTransition(MacroAssembler* masm,
 
   Register storage_reg = name_reg;
 
-  if (FLAG_track_fields && representation.IsSmi()) {
+  if (details.type() == CONSTANT_FUNCTION) {
+    Handle<HeapObject> constant(
+        HeapObject::cast(descriptors->GetValue(descriptor)));
+    __ LoadHeapObject(scratch1, constant);
+    __ Branch(miss_restore_name, ne, value_reg, Operand(scratch1));
+  } else if (FLAG_track_fields && representation.IsSmi()) {
     __ JumpIfNotSmi(value_reg, miss_restore_name);
   } else if (FLAG_track_heap_object_fields && representation.IsHeapObject()) {
     __ JumpIfSmi(value_reg, miss_restore_name);
@@ -534,7 +537,8 @@ void StubCompiler::GenerateStoreTransition(MacroAssembler* masm,
   ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded());
 
   // Perform map transition for the receiver if necessary.
-  if (object->map()->unused_property_fields() == 0) {
+  if (details.type() == FIELD &&
+      object->map()->unused_property_fields() == 0) {
     // The properties must be extended before we can store the value.
     // We jump to a runtime call that extends the properties array.
     __ push(receiver_reg);
@@ -562,6 +566,13 @@ void StubCompiler::GenerateStoreTransition(MacroAssembler* masm,
                       OMIT_REMEMBERED_SET,
                       OMIT_SMI_CHECK);
 
+  if (details.type() == CONSTANT_FUNCTION) {
+    ASSERT(value_reg.is(a0));
+    __ Ret(USE_DELAY_SLOT);
+    __ mov(v0, a0);
+    return;
+  }
+
   int index = transition->instance_descriptors()->GetFieldIndex(
       transition->LastAdded());
 
@@ -934,6 +945,7 @@ static void GenerateFastApiDirectCall(MacroAssembler* masm,
       !CallbackTable::ReturnsVoid(masm->isolate(), function_address);
 
   Register first_arg = returns_handle ? a1 : a0;
+  Register second_arg = returns_handle ? a2 : a1;
 
   // first_arg = v8::Arguments&
   // Arguments is built at sp + 1 (sp is a reserved spot for ra).
@@ -960,8 +972,23 @@ static void GenerateFastApiDirectCall(MacroAssembler* masm,
       ExternalReference(&fun,
                         type,
                         masm->isolate());
+
+  Address thunk_address = returns_handle
+      ? FUNCTION_ADDR(&InvokeInvocationCallback)
+      : FUNCTION_ADDR(&InvokeFunctionCallback);
+  ExternalReference::Type thunk_type =
+      returns_handle ?
+          ExternalReference::PROFILING_API_CALL :
+          ExternalReference::PROFILING_API_CALL_NEW;
+  ApiFunction thunk_fun(thunk_address);
+  ExternalReference thunk_ref = ExternalReference(&thunk_fun, thunk_type,
+      masm->isolate());
+
   AllowExternalCallThatCantCauseGC scope(masm);
   __ CallApiFunctionAndReturn(ref,
+                              function_address,
+                              thunk_ref,
+                              second_arg,
                               kStackUnwindSpace,
                               returns_handle,
                               kFastApiCallArguments + 1);
@@ -1454,6 +1481,7 @@ void BaseLoadStubCompiler::GenerateLoadCallback(
 
   Register first_arg = returns_handle ? a1 : a0;
   Register second_arg = returns_handle ? a2 : a1;
+  Register third_arg = returns_handle ? a3 : a2;
 
   __ mov(a2, scratch2());  // Saved in case scratch2 == a1.
   __ mov(first_arg, sp);  // (first argument - see note below) = Handle<Name>
@@ -1474,14 +1502,28 @@ void BaseLoadStubCompiler::GenerateLoadCallback(
   __ Addu(second_arg, sp, kPointerSize);
 
   const int kStackUnwindSpace = kFastApiCallArguments + 1;
+
   ApiFunction fun(getter_address);
   ExternalReference::Type type =
       returns_handle ?
           ExternalReference::DIRECT_GETTER_CALL :
           ExternalReference::DIRECT_GETTER_CALL_NEW;
-
   ExternalReference ref = ExternalReference(&fun, type, isolate());
+
+  Address thunk_address = returns_handle
+      ? FUNCTION_ADDR(&InvokeAccessorGetter)
+      : FUNCTION_ADDR(&InvokeAccessorGetterCallback);
+  ExternalReference::Type thunk_type =
+      returns_handle ?
+          ExternalReference::PROFILING_GETTER_CALL :
+          ExternalReference::PROFILING_GETTER_CALL_NEW;
+  ApiFunction thunk_fun(thunk_address);
+  ExternalReference thunk_ref = ExternalReference(&thunk_fun, thunk_type,
+      isolate());
   __ CallApiFunctionAndReturn(ref,
+                              getter_address,
+                              thunk_ref,
+                              third_arg,
                               kStackUnwindSpace,
                               returns_handle,
                               5);
@@ -1600,12 +1642,12 @@ void CallStubCompiler::GenerateGlobalReceiverCheck(Handle<JSObject> object,
 
 
 void CallStubCompiler::GenerateLoadFunctionFromCell(
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
     Label* miss) {
   // Get the value from the cell.
   __ li(a3, Operand(cell));
-  __ lw(a1, FieldMemOperand(a3, JSGlobalPropertyCell::kValueOffset));
+  __ lw(a1, FieldMemOperand(a3, Cell::kValueOffset));
 
   // Check that the cell contains the same function.
   if (heap()->InNewSpace(*function)) {
@@ -1672,12 +1714,61 @@ Handle<Code> CallStubCompiler::CompileCallField(Handle<JSObject> object,
 }
 
 
+Handle<Code> CallStubCompiler::CompileArrayCodeCall(
+    Handle<Object> object,
+    Handle<JSObject> holder,
+    Handle<Cell> cell,
+    Handle<JSFunction> function,
+    Handle<String> name,
+    Code::StubType type) {
+  Label miss;
+
+  // Check that function is still array.
+  const int argc = arguments().immediate();
+  GenerateNameCheck(name, &miss);
+  Register receiver = a1;
+
+  if (cell.is_null()) {
+    __ lw(receiver, MemOperand(sp, argc * kPointerSize));
+
+    // Check that the receiver isn't a smi.
+    __ JumpIfSmi(receiver, &miss);
+
+    // Check that the maps haven't changed.
+    CheckPrototypes(Handle<JSObject>::cast(object), receiver, holder, a3, a0,
+                    t0, name, &miss);
+  } else {
+    ASSERT(cell->value() == *function);
+    GenerateGlobalReceiverCheck(Handle<JSObject>::cast(object), holder, name,
+                                &miss);
+    GenerateLoadFunctionFromCell(cell, function, &miss);
+  }
+
+  Handle<Smi> kind(Smi::FromInt(GetInitialFastElementsKind()), isolate());
+  Handle<Cell> kind_feedback_cell =
+      isolate()->factory()->NewCell(kind);
+  __ li(a0, Operand(argc));
+  __ li(a2, Operand(kind_feedback_cell));
+  __ li(a1, Operand(function));
+
+  ArrayConstructorStub stub(isolate());
+  __ TailCallStub(&stub);
+
+  __ bind(&miss);
+  GenerateMissBranch();
+
+  // Return the generated code.
+  return GetCode(type, name);
+}
+
+
 Handle<Code> CallStubCompiler::CompileArrayPushCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- a2    : name
   //  -- ra    : return address
@@ -1922,16 +2013,17 @@ Handle<Code> CallStubCompiler::CompileArrayPushCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return GetCode(function);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileArrayPopCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- a2    : name
   //  -- ra    : return address
@@ -2004,16 +2096,17 @@ Handle<Code> CallStubCompiler::CompileArrayPopCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return GetCode(function);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileStringCharCodeAtCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- a2                     : function name
   //  -- ra                     : return address
@@ -2086,16 +2179,17 @@ Handle<Code> CallStubCompiler::CompileStringCharCodeAtCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return GetCode(function);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileStringCharAtCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- a2                     : function name
   //  -- ra                     : return address
@@ -2167,16 +2261,17 @@ Handle<Code> CallStubCompiler::CompileStringCharAtCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return GetCode(function);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileStringFromCharCodeCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- a2                     : function name
   //  -- ra                     : return address
@@ -2240,16 +2335,17 @@ Handle<Code> CallStubCompiler::CompileStringFromCharCodeCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileMathFloorCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- a2                     : function name
   //  -- ra                     : return address
@@ -2369,16 +2465,17 @@ Handle<Code> CallStubCompiler::CompileMathFloorCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileMathAbsCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- a2                     : function name
   //  -- ra                     : return address
@@ -2468,7 +2565,7 @@ Handle<Code> CallStubCompiler::CompileMathAbsCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name);
+  return GetCode(type, name);
 }
 
 
@@ -2476,7 +2573,7 @@ Handle<Code> CallStubCompiler::CompileFastApiCall(
     const CallOptimization& optimization,
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
     Handle<String> name) {
 
@@ -2649,8 +2746,9 @@ Handle<Code> CallStubCompiler::CompileCallConstant(
     Handle<JSFunction> function) {
   if (HasCustomCallGenerator(function)) {
     Handle<Code> code = CompileCustomCall(object, holder,
-                                          Handle<JSGlobalPropertyCell>::null(),
-                                          function, Handle<String>::cast(name));
+                                          Handle<Cell>::null(),
+                                          function, Handle<String>::cast(name),
+                                          Code::CONSTANT_FUNCTION);
     // A null handle means bail out to the regular compiler code below.
     if (!code.is_null()) return code;
   }
@@ -2709,7 +2807,7 @@ Handle<Code> CallStubCompiler::CompileCallInterceptor(Handle<JSObject> object,
 Handle<Code> CallStubCompiler::CompileCallGlobal(
     Handle<JSObject> object,
     Handle<GlobalObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<PropertyCell> cell,
     Handle<JSFunction> function,
     Handle<Name> name) {
   // ----------- S t a t e -------------
@@ -2719,7 +2817,8 @@ Handle<Code> CallStubCompiler::CompileCallGlobal(
 
   if (HasCustomCallGenerator(function)) {
     Handle<Code> code = CompileCustomCall(
-        object, holder, cell, function, Handle<String>::cast(name));
+        object, holder, cell, function, Handle<String>::cast(name),
+        Code::NORMAL);
     // A null handle means bail out to the regular compiler code below.
     if (!code.is_null()) return code;
   }
@@ -2885,7 +2984,7 @@ Handle<Code> StoreStubCompiler::CompileStoreInterceptor(
 
 Handle<Code> StoreStubCompiler::CompileStoreGlobal(
     Handle<GlobalObject> object,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<PropertyCell> cell,
     Handle<Name> name) {
   Label miss;
 
@@ -2899,13 +2998,11 @@ Handle<Code> StoreStubCompiler::CompileStoreGlobal(
   // global object. We bail out to the runtime system to do that.
   __ li(scratch1(), Operand(cell));
   __ LoadRoot(scratch2(), Heap::kTheHoleValueRootIndex);
-  __ lw(scratch3(),
-        FieldMemOperand(scratch1(), JSGlobalPropertyCell::kValueOffset));
+  __ lw(scratch3(), FieldMemOperand(scratch1(), Cell::kValueOffset));
   __ Branch(&miss, eq, scratch3(), Operand(scratch2()));
 
   // Store the value in the cell.
-  __ sw(value(),
-        FieldMemOperand(scratch1(), JSGlobalPropertyCell::kValueOffset));
+  __ sw(value(), FieldMemOperand(scratch1(), Cell::kValueOffset));
   __ mov(v0, a0);  // Stored value must be returned in v0.
   // Cells are always rescanned, so no write barrier here.
 
@@ -3027,7 +3124,7 @@ void LoadStubCompiler::GenerateLoadViaGetter(MacroAssembler* masm,
 Handle<Code> LoadStubCompiler::CompileLoadGlobal(
     Handle<JSObject> object,
     Handle<GlobalObject> global,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<PropertyCell> cell,
     Handle<Name> name,
     bool is_dont_delete) {
   Label success, miss;
@@ -3039,7 +3136,7 @@ Handle<Code> LoadStubCompiler::CompileLoadGlobal(
 
   // Get the value from the cell.
   __ li(a3, Operand(cell));
-  __ lw(t0, FieldMemOperand(a3, JSGlobalPropertyCell::kValueOffset));
+  __ lw(t0, FieldMemOperand(a3, Cell::kValueOffset));
 
   // Check for deleted property if property can actually be deleted.
   if (!is_dont_delete) {
index e1fd872..28b8fc8 100644 (file)
@@ -1509,6 +1509,11 @@ FrameDetails.prototype.scopeCount = function() {
 };
 
 
+FrameDetails.prototype.stepInPositionsImpl = function() {
+  return %GetStepInPositions(this.break_id_, this.frameId());
+};
+
+
 /**
  * Mirror object for stack frames.
  * @param {number} break_id The break id in the VM for which this frame is
@@ -1669,15 +1674,55 @@ FrameMirror.prototype.scope = function(index) {
 };
 
 
+FrameMirror.prototype.stepInPositions = function() {
+  var script = this.func().script();
+  var funcOffset = this.func().sourcePosition_();
+
+  var stepInRaw = this.details_.stepInPositionsImpl();
+  var result = [];
+  if (stepInRaw) {
+    for (var i = 0; i < stepInRaw.length; i++) {
+      var posStruct = {};
+      var offset = script.locationFromPosition(funcOffset + stepInRaw[i],
+                                               true);
+      serializeLocationFields(offset, posStruct);
+      var item = {
+        position: posStruct
+      };
+      result.push(item);
+    }
+  }
+
+  return result;
+};
+
+
 FrameMirror.prototype.evaluate = function(source, disable_break,
                                           opt_context_object) {
-  var result = %DebugEvaluate(this.break_id_,
-                              this.details_.frameId(),
-                              this.details_.inlinedFrameIndex(),
-                              source,
-                              Boolean(disable_break),
-                              opt_context_object);
-  return MakeMirror(result);
+  var result_array = %DebugEvaluate(this.break_id_,
+                                    this.details_.frameId(),
+                                    this.details_.inlinedFrameIndex(),
+                                    source,
+                                    Boolean(disable_break),
+                                    opt_context_object);
+  // Silently ignore local variables changes if the frame is optimized.
+  if (!this.isOptimizedFrame()) {
+    var local_scope_on_stack = result_array[1];
+    var local_scope_modifed = result_array[2];
+    for (var n in local_scope_modifed) {
+      var value_on_stack = local_scope_on_stack[n];
+      var value_modifed = local_scope_modifed[n];
+      if (value_on_stack !== value_modifed) {
+        %SetScopeVariableValue(this.break_id_,
+                               this.details_.frameId(),
+                               this.details_.inlinedFrameIndex(),
+                               0,
+                               n,
+                               value_modifed);
+      }
+    }
+  }
+  return MakeMirror(result_array[0]);
 };
 
 
index 978ea21..a8d9b35 100644 (file)
@@ -172,7 +172,8 @@ class CppByteSink : public PartialSnapshotSink {
       int data_space_used,
       int code_space_used,
       int map_space_used,
-      int cell_space_used) {
+      int cell_space_used,
+      int property_cell_space_used) {
     fprintf(fp_,
             "const int Snapshot::%snew_space_used_ = %d;\n",
             prefix,
@@ -197,6 +198,10 @@ class CppByteSink : public PartialSnapshotSink {
             "const int Snapshot::%scell_space_used_ = %d;\n",
             prefix,
             cell_space_used);
+    fprintf(fp_,
+            "const int Snapshot::%sproperty_cell_space_used_ = %d;\n",
+            prefix,
+            property_cell_space_used);
   }
 
   void WritePartialSnapshot() {
@@ -307,6 +312,9 @@ int main(int argc, char** argv) {
   // By default, log code create information in the snapshot.
   i::FLAG_log_code = true;
 
+  // Disable the i18n extension, as it doesn't support being snapshotted yet.
+  i::FLAG_enable_i18n = false;
+
   // Print the usage if an error occurs when parsing the command line
   // flags or if the help flag is set.
   int result = i::FlagList::SetFlagsFromCommandLine(&argc, argv, true);
@@ -387,7 +395,7 @@ int main(int argc, char** argv) {
   // If we don't do this then we end up with a stray root pointing at the
   // context even after we have disposed of the context.
   HEAP->CollectAllGarbage(i::Heap::kNoGCFlags, "mksnapshot");
-  i::Object* raw_context = *(v8::Utils::OpenHandle(*context));
+  i::Object* raw_context = *v8::Utils::OpenPersistent(context);
   context.Dispose(isolate);
   CppByteSink sink(argv[1]);
   // This results in a somewhat smaller snapshot, probably because it gets rid
@@ -417,7 +425,8 @@ int main(int argc, char** argv) {
       partial_ser.CurrentAllocationAddress(i::OLD_DATA_SPACE),
       partial_ser.CurrentAllocationAddress(i::CODE_SPACE),
       partial_ser.CurrentAllocationAddress(i::MAP_SPACE),
-      partial_ser.CurrentAllocationAddress(i::CELL_SPACE));
+      partial_ser.CurrentAllocationAddress(i::CELL_SPACE),
+      partial_ser.CurrentAllocationAddress(i::PROPERTY_CELL_SPACE));
   sink.WriteSpaceUsed(
       "",
       ser.CurrentAllocationAddress(i::NEW_SPACE),
@@ -425,6 +434,7 @@ int main(int argc, char** argv) {
       ser.CurrentAllocationAddress(i::OLD_DATA_SPACE),
       ser.CurrentAllocationAddress(i::CODE_SPACE),
       ser.CurrentAllocationAddress(i::MAP_SPACE),
-      ser.CurrentAllocationAddress(i::CELL_SPACE));
+      ser.CurrentAllocationAddress(i::CELL_SPACE),
+      ser.CurrentAllocationAddress(i::PROPERTY_CELL_SPACE));
   return 0;
 }
index 5f34420..e3f69d1 100644 (file)
@@ -36,7 +36,7 @@ typedef bool (*NativeSourceCallback)(Vector<const char> name,
                                      int index);
 
 enum NativeType {
-  CORE, EXPERIMENTAL, D8, TEST
+  CORE, EXPERIMENTAL, D8, TEST, I18N
 };
 
 template <NativeType type>
@@ -61,6 +61,7 @@ class NativesCollection {
 
 typedef NativesCollection<CORE> Natives;
 typedef NativesCollection<EXPERIMENTAL> ExperimentalNatives;
+typedef NativesCollection<I18N> I18NNatives;
 
 } }  // namespace v8::internal
 
index 4008181..c0c0e47 100644 (file)
@@ -163,8 +163,11 @@ void HeapObject::HeapObjectVerify() {
     case JS_BUILTINS_OBJECT_TYPE:
       JSBuiltinsObject::cast(this)->JSBuiltinsObjectVerify();
       break;
-    case JS_GLOBAL_PROPERTY_CELL_TYPE:
-      JSGlobalPropertyCell::cast(this)->JSGlobalPropertyCellVerify();
+    case CELL_TYPE:
+      Cell::cast(this)->CellVerify();
+      break;
+    case PROPERTY_CELL_TYPE:
+      PropertyCell::cast(this)->PropertyCellVerify();
       break;
     case JS_ARRAY_TYPE:
       JSArray::cast(this)->JSArrayVerify();
@@ -204,6 +207,9 @@ void HeapObject::HeapObjectVerify() {
     case JS_TYPED_ARRAY_TYPE:
       JSTypedArray::cast(this)->JSTypedArrayVerify();
       break;
+    case JS_DATA_VIEW_TYPE:
+      JSDataView::cast(this)->JSDataViewVerify();
+      break;
 
 #define MAKE_STRUCT_CASE(NAME, Name, name) \
   case NAME##_TYPE:                        \
@@ -615,9 +621,16 @@ void Oddball::OddballVerify() {
 }
 
 
-void JSGlobalPropertyCell::JSGlobalPropertyCellVerify() {
-  CHECK(IsJSGlobalPropertyCell());
+void Cell::CellVerify() {
+  CHECK(IsCell());
+  VerifyObjectField(kValueOffset);
+}
+
+
+void PropertyCell::PropertyCellVerify() {
+  CHECK(IsPropertyCell());
   VerifyObjectField(kValueOffset);
+  VerifyObjectField(kTypeOffset);
 }
 
 
@@ -751,8 +764,8 @@ void JSArrayBuffer::JSArrayBufferVerify() {
 }
 
 
-void JSTypedArray::JSTypedArrayVerify() {
-  CHECK(IsJSTypedArray());
+void JSArrayBufferView::JSArrayBufferViewVerify() {
+  CHECK(IsJSArrayBufferView());
   JSObjectVerify();
   VerifyPointer(buffer());
   CHECK(buffer()->IsJSArrayBuffer() || buffer()->IsUndefined());
@@ -764,7 +777,12 @@ void JSTypedArray::JSTypedArrayVerify() {
   VerifyPointer(byte_length());
   CHECK(byte_length()->IsSmi() || byte_length()->IsHeapNumber()
         || byte_length()->IsUndefined());
+}
+
 
+void JSTypedArray::JSTypedArrayVerify() {
+  CHECK(IsJSTypedArray());
+  JSArrayBufferViewVerify();
   VerifyPointer(length());
   CHECK(length()->IsSmi() || length()->IsHeapNumber()
         || length()->IsUndefined());
@@ -773,6 +791,12 @@ void JSTypedArray::JSTypedArrayVerify() {
 }
 
 
+void JSDataView::JSDataViewVerify() {
+  CHECK(IsJSDataView());
+  JSArrayBufferViewVerify();
+}
+
+
 void Foreign::ForeignVerify() {
   CHECK(IsForeign());
 }
index e60f0f3..fe054da 100644 (file)
@@ -221,12 +221,9 @@ bool Object::IsSpecFunction() {
 bool Object::IsInternalizedString() {
   if (!this->IsHeapObject()) return false;
   uint32_t type = HeapObject::cast(this)->map()->instance_type();
-  // Because the internalized tag is non-zero and no non-string types have the
-  // internalized bit set we can test for internalized strings with a very
-  // simple test operation.
   STATIC_ASSERT(kInternalizedTag != 0);
-  ASSERT(kNotStringTag + kIsInternalizedMask > LAST_TYPE);
-  return (type & kIsInternalizedMask) != 0;
+  return (type & (kIsNotStringMask | kIsInternalizedMask)) ==
+      (kInternalizedTag | kStringTag);
 }
 
 
@@ -323,7 +320,8 @@ StringShape::StringShape(InstanceType t)
 bool StringShape::IsInternalized() {
   ASSERT(valid());
   STATIC_ASSERT(kInternalizedTag != 0);
-  return (type_ & kIsInternalizedMask) != 0;
+  return (type_ & (kIsNotStringMask | kIsInternalizedMask)) ==
+      (kInternalizedTag | kStringTag);
 }
 
 
@@ -668,7 +666,8 @@ template <> inline bool Is<JSFunction>(Object* obj) {
 
 TYPE_CHECKER(Code, CODE_TYPE)
 TYPE_CHECKER(Oddball, ODDBALL_TYPE)
-TYPE_CHECKER(JSGlobalPropertyCell, JS_GLOBAL_PROPERTY_CELL_TYPE)
+TYPE_CHECKER(Cell, CELL_TYPE)
+TYPE_CHECKER(PropertyCell, PROPERTY_CELL_TYPE)
 TYPE_CHECKER(SharedFunctionInfo, SHARED_FUNCTION_INFO_TYPE)
 TYPE_CHECKER(JSGeneratorObject, JS_GENERATOR_OBJECT_TYPE)
 TYPE_CHECKER(JSModule, JS_MODULE_TYPE)
@@ -694,6 +693,14 @@ bool Object::IsBoolean() {
 TYPE_CHECKER(JSArray, JS_ARRAY_TYPE)
 TYPE_CHECKER(JSArrayBuffer, JS_ARRAY_BUFFER_TYPE)
 TYPE_CHECKER(JSTypedArray, JS_TYPED_ARRAY_TYPE)
+TYPE_CHECKER(JSDataView, JS_DATA_VIEW_TYPE)
+
+
+bool Object::IsJSArrayBufferView() {
+  return IsJSDataView() || IsJSTypedArray();
+}
+
+
 TYPE_CHECKER(JSRegExp, JS_REGEXP_TYPE)
 
 
@@ -1621,17 +1628,28 @@ void Oddball::set_kind(byte value) {
 }
 
 
-Object* JSGlobalPropertyCell::value() {
+Object* Cell::value() {
   return READ_FIELD(this, kValueOffset);
 }
 
 
-void JSGlobalPropertyCell::set_value(Object* val, WriteBarrierMode ignored) {
+void Cell::set_value(Object* val, WriteBarrierMode ignored) {
   // The write barrier is not used for global property cells.
-  ASSERT(!val->IsJSGlobalPropertyCell());
+  ASSERT(!val->IsPropertyCell() && !val->IsCell());
   WRITE_FIELD(this, kValueOffset, val);
 }
 
+ACCESSORS(PropertyCell, dependent_code, DependentCode, kDependentCodeOffset)
+
+Object* PropertyCell::type_raw() {
+  return READ_FIELD(this, kTypeOffset);
+}
+
+
+void PropertyCell::set_type_raw(Object* val, WriteBarrierMode ignored) {
+  WRITE_FIELD(this, kTypeOffset, val);
+}
+
 
 int JSObject::GetHeaderSize() {
   InstanceType type = map()->instance_type();
@@ -1662,6 +1680,8 @@ int JSObject::GetHeaderSize() {
       return JSArrayBuffer::kSize;
     case JS_TYPED_ARRAY_TYPE:
       return JSTypedArray::kSize;
+    case JS_DATA_VIEW_TYPE:
+      return JSDataView::kSize;
     case JS_SET_TYPE:
       return JSSet::kSize;
     case JS_MAP_TYPE:
@@ -2080,30 +2100,6 @@ void FixedArray::set_the_hole(int index) {
 }
 
 
-void FixedArray::set_unchecked(int index, Smi* value) {
-  ASSERT(reinterpret_cast<Object*>(value)->IsSmi());
-  int offset = kHeaderSize + index * kPointerSize;
-  WRITE_FIELD(this, offset, value);
-}
-
-
-void FixedArray::set_unchecked(Heap* heap,
-                               int index,
-                               Object* value,
-                               WriteBarrierMode mode) {
-  int offset = kHeaderSize + index * kPointerSize;
-  WRITE_FIELD(this, offset, value);
-  CONDITIONAL_WRITE_BARRIER(heap, this, offset, value, mode);
-}
-
-
-void FixedArray::set_null_unchecked(Heap* heap, int index) {
-  ASSERT(index >= 0 && index < this->length());
-  ASSERT(!heap->InNewSpace(heap->null_value()));
-  WRITE_FIELD(this, kHeaderSize + index * kPointerSize, heap->null_value());
-}
-
-
 double* FixedDoubleArray::data_start() {
   return reinterpret_cast<double*>(FIELD_ADDR(this, kHeaderSize));
 }
@@ -2552,7 +2548,8 @@ CAST_ACCESSOR(Smi)
 CAST_ACCESSOR(HeapObject)
 CAST_ACCESSOR(HeapNumber)
 CAST_ACCESSOR(Oddball)
-CAST_ACCESSOR(JSGlobalPropertyCell)
+CAST_ACCESSOR(Cell)
+CAST_ACCESSOR(PropertyCell)
 CAST_ACCESSOR(SharedFunctionInfo)
 CAST_ACCESSOR(Map)
 CAST_ACCESSOR(JSFunction)
@@ -2563,7 +2560,9 @@ CAST_ACCESSOR(JSBuiltinsObject)
 CAST_ACCESSOR(Code)
 CAST_ACCESSOR(JSArray)
 CAST_ACCESSOR(JSArrayBuffer)
+CAST_ACCESSOR(JSArrayBufferView)
 CAST_ACCESSOR(JSTypedArray)
+CAST_ACCESSOR(JSDataView)
 CAST_ACCESSOR(JSRegExp)
 CAST_ACCESSOR(JSProxy)
 CAST_ACCESSOR(JSFunctionProxy)
@@ -3388,15 +3387,13 @@ int Map::pre_allocated_property_fields() {
 int HeapObject::SizeFromMap(Map* map) {
   int instance_size = map->instance_size();
   if (instance_size != kVariableSizeSentinel) return instance_size;
-  // We can ignore the "internalized" bit because it is only set for strings
-  // and thus implies a string type.
-  int instance_type =
-      static_cast<int>(map->instance_type()) & ~kIsInternalizedMask;
   // Only inline the most frequent cases.
+  int instance_type = static_cast<int>(map->instance_type());
   if (instance_type == FIXED_ARRAY_TYPE) {
     return FixedArray::BodyDescriptor::SizeOf(map, this);
   }
-  if (instance_type == ASCII_STRING_TYPE) {
+  if (instance_type == ASCII_STRING_TYPE ||
+      instance_type == ASCII_INTERNALIZED_STRING_TYPE) {
     return SeqOneByteString::SizeFor(
         reinterpret_cast<SeqOneByteString*>(this)->length());
   }
@@ -3406,7 +3403,8 @@ int HeapObject::SizeFromMap(Map* map) {
   if (instance_type == FREE_SPACE_TYPE) {
     return reinterpret_cast<FreeSpace*>(this)->size();
   }
-  if (instance_type == STRING_TYPE) {
+  if (instance_type == STRING_TYPE ||
+      instance_type == INTERNALIZED_STRING_TYPE) {
     return SeqTwoByteString::SizeFor(
         reinterpret_cast<SeqTwoByteString*>(this)->length());
   }
@@ -3565,11 +3563,6 @@ bool Map::is_dictionary_map() {
 }
 
 
-JSFunction* Map::unchecked_constructor() {
-  return reinterpret_cast<JSFunction*>(READ_FIELD(this, kConstructorOffset));
-}
-
-
 Code::Flags Code::flags() {
   return static_cast<Flags>(READ_INT_FIELD(this, kFlagsOffset));
 }
@@ -3641,6 +3634,9 @@ bool Map::CanBeDeprecated() {
         details.representation().IsHeapObject()) {
       return true;
     }
+    if (FLAG_track_fields && details.type() == CONSTANT_FUNCTION) {
+      return true;
+    }
   }
   return false;
 }
@@ -3659,17 +3655,6 @@ bool Map::CanOmitPrototypeChecks() {
 }
 
 
-void Map::AddDependentCode(DependentCode::DependencyGroup group,
-                           Handle<Code> code) {
-  Handle<DependentCode> codes =
-      DependentCode::Insert(Handle<DependentCode>(dependent_code()),
-                             group, code);
-  if (*codes != dependent_code()) {
-    set_dependent_code(*codes);
-  }
-}
-
-
 int DependentCode::number_of_entries(DependencyGroup group) {
   if (length() == 0) return 0;
   return Smi::cast(get(group))->value();
@@ -3681,32 +3666,52 @@ void DependentCode::set_number_of_entries(DependencyGroup group, int value) {
 }
 
 
+bool DependentCode::is_code_at(int i) {
+  return get(kCodesStartIndex + i)->IsCode();
+}
+
 Code* DependentCode::code_at(int i) {
   return Code::cast(get(kCodesStartIndex + i));
 }
 
 
-void DependentCode::set_code_at(int i, Code* value) {
-  set(kCodesStartIndex + i, value);
+CompilationInfo* DependentCode::compilation_info_at(int i) {
+  return reinterpret_cast<CompilationInfo*>(
+      Foreign::cast(get(kCodesStartIndex + i))->foreign_address());
+}
+
+
+void DependentCode::set_object_at(int i, Object* object) {
+  set(kCodesStartIndex + i, object);
 }
 
 
-Object** DependentCode::code_slot_at(int i) {
+Object* DependentCode::object_at(int i) {
+  return get(kCodesStartIndex + i);
+}
+
+
+Object** DependentCode::slot_at(int i) {
   return HeapObject::RawField(
       this, FixedArray::OffsetOfElementAt(kCodesStartIndex + i));
 }
 
 
-void DependentCode::clear_code_at(int i) {
+void DependentCode::clear_at(int i) {
   set_undefined(kCodesStartIndex + i);
 }
 
 
+void DependentCode::copy(int from, int to) {
+  set(kCodesStartIndex + to, get(kCodesStartIndex + from));
+}
+
+
 void DependentCode::ExtendGroup(DependencyGroup group) {
   GroupStartIndexes starts(this);
   for (int g = kGroupCount - 1; g > group; g--) {
     if (starts.at(g) < starts.at(g + 1)) {
-      set_code_at(starts.at(g + 1), code_at(starts.at(g)));
+      copy(starts.at(g), starts.at(g + 1));
     }
   }
 }
@@ -4034,7 +4039,12 @@ void Code::set_marked_for_deoptimization(bool flag) {
 
 bool Code::is_inline_cache_stub() {
   Kind kind = this->kind();
-  return kind >= FIRST_IC_KIND && kind <= LAST_IC_KIND;
+  switch (kind) {
+#define CASE(name) case name: return true;
+    IC_KIND_LIST(CASE)
+#undef CASE
+    default: return false;
+  }
 }
 
 
@@ -4275,6 +4285,7 @@ FixedArray* Map::GetPrototypeTransitions() {
 MaybeObject* Map::SetPrototypeTransitions(FixedArray* proto_transitions) {
   MaybeObject* allow_prototype = EnsureHasTransitionArray(this);
   if (allow_prototype->IsFailure()) return allow_prototype;
+  int old_number_of_transitions = NumberOfProtoTransitions();
 #ifdef DEBUG
   if (HasPrototypeTransitions()) {
     ASSERT(GetPrototypeTransitions() != proto_transitions);
@@ -4282,6 +4293,7 @@ MaybeObject* Map::SetPrototypeTransitions(FixedArray* proto_transitions) {
   }
 #endif
   transitions()->SetPrototypeTransitions(proto_transitions);
+  SetNumberOfProtoTransitions(old_number_of_transitions);
   return this;
 }
 
@@ -4439,7 +4451,7 @@ ACCESSORS(AllocationSiteInfo, payload, Object, kPayloadOffset)
 
 ACCESSORS(Script, source, Object, kSourceOffset)
 ACCESSORS(Script, name, Object, kNameOffset)
-ACCESSORS(Script, id, Object, kIdOffset)
+ACCESSORS(Script, id, Smi, kIdOffset)
 ACCESSORS_TO_SMI(Script, line_offset, kLineOffsetOffset)
 ACCESSORS_TO_SMI(Script, column_offset, kColumnOffsetOffset)
 ACCESSORS(Script, data, Object, kDataOffset)
@@ -4723,11 +4735,6 @@ Code* SharedFunctionInfo::code() {
 }
 
 
-Code* SharedFunctionInfo::unchecked_code() {
-  return reinterpret_cast<Code*>(READ_FIELD(this, kCodeOffset));
-}
-
-
 void SharedFunctionInfo::set_code(Code* value, WriteBarrierMode mode) {
   WRITE_FIELD(this, kCodeOffset, value);
   CONDITIONAL_WRITE_BARRIER(value->GetHeap(), this, kCodeOffset, value, mode);
@@ -4791,17 +4798,6 @@ BuiltinFunctionId SharedFunctionInfo::builtin_function_id() {
 }
 
 
-int SharedFunctionInfo::code_age() {
-  return (compiler_hints() >> kCodeAgeShift) & kCodeAgeMask;
-}
-
-
-void SharedFunctionInfo::set_code_age(int code_age) {
-  int hints = compiler_hints() & ~(kCodeAgeMask << kCodeAgeShift);
-  set_compiler_hints(hints | ((code_age & kCodeAgeMask) << kCodeAgeShift));
-}
-
-
 int SharedFunctionInfo::ic_age() {
   return ICAgeBits::decode(counters());
 }
@@ -4905,12 +4901,7 @@ bool JSFunction::IsInRecompileQueue() {
 
 
 Code* JSFunction::code() {
-  return Code::cast(unchecked_code());
-}
-
-
-Code* JSFunction::unchecked_code() {
-  return reinterpret_cast<Code*>(
+  return Code::cast(
       Code::GetObjectFromEntryAddress(FIELD_ADDR(this, kCodeEntryOffset)));
 }
 
@@ -4955,17 +4946,6 @@ Context* JSFunction::context() {
 }
 
 
-Object* JSFunction::unchecked_context() {
-  return READ_FIELD(this, kContextOffset);
-}
-
-
-SharedFunctionInfo* JSFunction::unchecked_shared() {
-  return reinterpret_cast<SharedFunctionInfo*>(
-      READ_FIELD(this, kSharedFunctionInfoOffset));
-}
-
-
 void JSFunction::set_context(Object* value) {
   ASSERT(value->IsUndefined() || value->IsContext());
   WRITE_FIELD(this, kContextOffset, value);
@@ -5270,12 +5250,6 @@ int Code::body_size() {
 }
 
 
-FixedArray* Code::unchecked_deoptimization_data() {
-  return reinterpret_cast<FixedArray*>(
-      READ_FIELD(this, kDeoptimizationDataOffset));
-}
-
-
 ByteArray* Code::unchecked_relocation_info() {
   return reinterpret_cast<ByteArray*>(READ_FIELD(this, kRelocationInfoOffset));
 }
@@ -5331,14 +5305,14 @@ void JSArrayBuffer::set_is_external(bool value) {
 
 
 ACCESSORS(JSArrayBuffer, weak_next, Object, kWeakNextOffset)
-ACCESSORS(JSArrayBuffer, weak_first_array, Object, kWeakFirstArrayOffset)
+ACCESSORS(JSArrayBuffer, weak_first_view, Object, kWeakFirstViewOffset)
 
 
-ACCESSORS(JSTypedArray, buffer, Object, kBufferOffset)
-ACCESSORS(JSTypedArray, byte_offset, Object, kByteOffsetOffset)
-ACCESSORS(JSTypedArray, byte_length, Object, kByteLengthOffset)
+ACCESSORS(JSArrayBufferView, buffer, Object, kBufferOffset)
+ACCESSORS(JSArrayBufferView, byte_offset, Object, kByteOffsetOffset)
+ACCESSORS(JSArrayBufferView, byte_length, Object, kByteLengthOffset)
+ACCESSORS(JSArrayBufferView, weak_next, Object, kWeakNextOffset)
 ACCESSORS(JSTypedArray, length, Object, kLengthOffset)
-ACCESSORS(JSTypedArray, weak_next, Object, kWeakNextOffset)
 
 ACCESSORS(JSRegExp, data, Object, kDataOffset)
 
@@ -5351,12 +5325,6 @@ JSRegExp::Type JSRegExp::TypeTag() {
 }
 
 
-JSRegExp::Type JSRegExp::TypeTagUnchecked() {
-  Smi* smi = Smi::cast(DataAtUnchecked(kTagIndex));
-  return static_cast<JSRegExp::Type>(smi->value());
-}
-
-
 int JSRegExp::CaptureCount() {
   switch (TypeTag()) {
     case ATOM:
@@ -5392,13 +5360,6 @@ Object* JSRegExp::DataAt(int index) {
 }
 
 
-Object* JSRegExp::DataAtUnchecked(int index) {
-  FixedArray* fa = reinterpret_cast<FixedArray*>(data());
-  int offset = FixedArray::kHeaderSize + index * kPointerSize;
-  return READ_FIELD(fa, offset);
-}
-
-
 void JSRegExp::SetDataAt(int index, Object* value) {
   ASSERT(TypeTag() != NOT_COMPILED);
   ASSERT(index >= kDataIndex);  // Only implementation data can be set this way.
@@ -5406,18 +5367,6 @@ void JSRegExp::SetDataAt(int index, Object* value) {
 }
 
 
-void JSRegExp::SetDataAtUnchecked(int index, Object* value, Heap* heap) {
-  ASSERT(index >= kDataIndex);  // Only implementation data can be set this way.
-  FixedArray* fa = reinterpret_cast<FixedArray*>(data());
-  if (value->IsSmi()) {
-    fa->set_unchecked(index, Smi::cast(value));
-  } else {
-    // We only do this during GC, so we don't need to notify the write barrier.
-    fa->set_unchecked(heap, index, value, SKIP_WRITE_BARRIER);
-  }
-}
-
-
 ElementsKind JSObject::GetElementsKind() {
   ElementsKind kind = map()->elements_kind();
 #if DEBUG
@@ -6011,13 +5960,13 @@ TypeFeedbackId TypeFeedbackCells::AstId(int index) {
 }
 
 
-void TypeFeedbackCells::SetCell(int index, JSGlobalPropertyCell* cell) {
+void TypeFeedbackCells::SetCell(int index, Cell* cell) {
   set(index * 2, cell);
 }
 
 
-JSGlobalPropertyCell* TypeFeedbackCells::Cell(int index) {
-  return JSGlobalPropertyCell::cast(get(index * 2));
+Cell* TypeFeedbackCells::GetCell(int index) {
+  return Cell::cast(get(index * 2));
 }
 
 
index 357d984..f1616da 100644 (file)
@@ -182,8 +182,11 @@ void HeapObject::HeapObjectPrint(FILE* out) {
     case JS_MESSAGE_OBJECT_TYPE:
       JSMessageObject::cast(this)->JSMessageObjectPrint(out);
       break;
-    case JS_GLOBAL_PROPERTY_CELL_TYPE:
-      JSGlobalPropertyCell::cast(this)->JSGlobalPropertyCellPrint(out);
+    case CELL_TYPE:
+      Cell::cast(this)->CellPrint(out);
+      break;
+    case PROPERTY_CELL_TYPE:
+      PropertyCell::cast(this)->PropertyCellPrint(out);
       break;
     case JS_ARRAY_BUFFER_TYPE:
       JSArrayBuffer::cast(this)->JSArrayBufferPrint(out);
@@ -191,6 +194,9 @@ void HeapObject::HeapObjectPrint(FILE* out) {
     case JS_TYPED_ARRAY_TYPE:
       JSTypedArray::cast(this)->JSTypedArrayPrint(out);
       break;
+    case JS_DATA_VIEW_TYPE:
+      JSDataView::cast(this)->JSDataViewPrint(out);
+      break;
 #define MAKE_STRUCT_CASE(NAME, Name, name) \
   case NAME##_TYPE:                        \
     Name::cast(this)->Name##Print(out);    \
@@ -533,7 +539,8 @@ static const char* TypeToString(InstanceType type) {
     case JS_OBJECT_TYPE: return "JS_OBJECT";
     case JS_CONTEXT_EXTENSION_OBJECT_TYPE: return "JS_CONTEXT_EXTENSION_OBJECT";
     case ODDBALL_TYPE: return "ODDBALL";
-    case JS_GLOBAL_PROPERTY_CELL_TYPE: return "JS_GLOBAL_PROPERTY_CELL";
+    case CELL_TYPE: return "CELL";
+    case PROPERTY_CELL_TYPE: return "PROPERTY_CELL";
     case SHARED_FUNCTION_INFO_TYPE: return "SHARED_FUNCTION_INFO";
     case JS_GENERATOR_OBJECT_TYPE: return "JS_GENERATOR_OBJECT";
     case JS_MODULE_TYPE: return "JS_MODULE";
@@ -547,8 +554,9 @@ static const char* TypeToString(InstanceType type) {
     case JS_GLOBAL_OBJECT_TYPE: return "JS_GLOBAL_OBJECT";
     case JS_BUILTINS_OBJECT_TYPE: return "JS_BUILTINS_OBJECT";
     case JS_GLOBAL_PROXY_TYPE: return "JS_GLOBAL_PROXY";
-    case JS_TYPED_ARRAY_TYPE: return "JS_TYPED_ARRAY";
     case JS_ARRAY_BUFFER_TYPE: return "JS_ARRAY_BUFFER";
+    case JS_TYPED_ARRAY_TYPE: return "JS_TYPED_ARRAY";
+    case JS_DATA_VIEW_TYPE: return "JS_DATA_VIEW";
     case FOREIGN_TYPE: return "FOREIGN";
     case JS_MESSAGE_OBJECT_TYPE: return "JS_MESSAGE_OBJECT_TYPE";
 #define MAKE_STRUCT_CASE(NAME, Name, name) case NAME##_TYPE: return #NAME;
@@ -817,7 +825,7 @@ void JSArrayBuffer::JSArrayBufferPrint(FILE* out) {
 
 void JSTypedArray::JSTypedArrayPrint(FILE* out) {
   HeapObject::PrintHeader(out, "JSTypedArray");
-  PrintF(out, " - map = 0x%p\n", reinterpret_cast<void*>(map()));
+  PrintF(out, " - map = %p\n", reinterpret_cast<void*>(map()));
   PrintF(out, " - buffer =");
   buffer()->ShortPrint(out);
   PrintF(out, "\n - byte_offset = ");
@@ -831,6 +839,19 @@ void JSTypedArray::JSTypedArrayPrint(FILE* out) {
 }
 
 
+void JSDataView::JSDataViewPrint(FILE* out) {
+  HeapObject::PrintHeader(out, "JSDataView");
+  PrintF(out, " - map = %p\n", reinterpret_cast<void*>(map()));
+  PrintF(out, " - buffer =");
+  buffer()->ShortPrint(out);
+  PrintF(out, "\n - byte_offset = ");
+  byte_offset()->ShortPrint(out);
+  PrintF(out, "\n - byte_length = ");
+  byte_length()->ShortPrint(out);
+  PrintF("\n");
+}
+
+
 void JSFunction::JSFunctionPrint(FILE* out) {
   HeapObject::PrintHeader(out, "Function");
   PrintF(out, " - map = 0x%p\n", reinterpret_cast<void*>(map()));
@@ -843,7 +864,7 @@ void JSFunction::JSFunctionPrint(FILE* out) {
   PrintF(out, "\n   - name = ");
   shared()->name()->Print(out);
   PrintF(out, "\n - context = ");
-  unchecked_context()->ShortPrint(out);
+  context()->ShortPrint(out);
   PrintF(out, "\n - literals = ");
   literals()->ShortPrint(out);
   PrintF(out, "\n - code = ");
@@ -917,8 +938,13 @@ void JSBuiltinsObject::JSBuiltinsObjectPrint(FILE* out) {
 }
 
 
-void JSGlobalPropertyCell::JSGlobalPropertyCellPrint(FILE* out) {
-  HeapObject::PrintHeader(out, "JSGlobalPropertyCell");
+void Cell::CellPrint(FILE* out) {
+  HeapObject::PrintHeader(out, "Cell");
+}
+
+
+void PropertyCell::PropertyCellPrint(FILE* out) {
+  HeapObject::PrintHeader(out, "PropertyCell");
 }
 
 
@@ -1093,8 +1119,8 @@ void TypeSwitchInfo::TypeSwitchInfoPrint(FILE* out) {
 void AllocationSiteInfo::AllocationSiteInfoPrint(FILE* out) {
   HeapObject::PrintHeader(out, "AllocationSiteInfo");
   PrintF(out, " - payload: ");
-  if (payload()->IsJSGlobalPropertyCell()) {
-    JSGlobalPropertyCell* cell = JSGlobalPropertyCell::cast(payload());
+  if (payload()->IsCell()) {
+    Cell* cell = Cell::cast(payload());
     Object* cell_contents = cell->value();
     if (cell_contents->IsSmi()) {
       ElementsKind kind = static_cast<ElementsKind>(
index 829eab8..cfb7d44 100644 (file)
@@ -83,6 +83,8 @@ void StaticNewSpaceVisitor<StaticVisitor>::Initialize() {
 
   table_.Register(kVisitJSTypedArray, &VisitJSTypedArray);
 
+  table_.Register(kVisitJSDataView, &VisitJSDataView);
+
   table_.Register(kVisitFreeSpace, &VisitFreeSpace);
 
   table_.Register(kVisitJSWeakMap, &JSObjectVisitor::Visit);
@@ -108,7 +110,7 @@ int StaticNewSpaceVisitor<StaticVisitor>::VisitJSArrayBuffer(
   Heap* heap = map->GetHeap();
 
   STATIC_ASSERT(
-      JSArrayBuffer::kWeakFirstArrayOffset ==
+      JSArrayBuffer::kWeakFirstViewOffset ==
       JSArrayBuffer::kWeakNextOffset + kPointerSize);
   VisitPointers(
       heap,
@@ -140,6 +142,22 @@ int StaticNewSpaceVisitor<StaticVisitor>::VisitJSTypedArray(
 
 
 template<typename StaticVisitor>
+int StaticNewSpaceVisitor<StaticVisitor>::VisitJSDataView(
+    Map* map, HeapObject* object) {
+  VisitPointers(
+      map->GetHeap(),
+      HeapObject::RawField(object, JSDataView::BodyDescriptor::kStartOffset),
+      HeapObject::RawField(object, JSDataView::kWeakNextOffset));
+  VisitPointers(
+      map->GetHeap(),
+      HeapObject::RawField(object,
+          JSDataView::kWeakNextOffset + kPointerSize),
+      HeapObject::RawField(object, JSDataView::kSize));
+  return JSDataView::kSize;
+}
+
+
+template<typename StaticVisitor>
 void StaticMarkingVisitor<StaticVisitor>::Initialize() {
   table_.Register(kVisitShortcutCandidate,
                   &FixedBodyVisitor<StaticVisitor,
@@ -194,13 +212,17 @@ void StaticMarkingVisitor<StaticVisitor>::Initialize() {
 
   table_.Register(kVisitJSTypedArray, &VisitJSTypedArray);
 
+  table_.Register(kVisitJSDataView, &VisitJSDataView);
+
   // Registration for kVisitJSRegExp is done by StaticVisitor.
 
-  table_.Register(kVisitPropertyCell,
+  table_.Register(kVisitCell,
                   &FixedBodyVisitor<StaticVisitor,
-                  JSGlobalPropertyCell::BodyDescriptor,
+                  Cell::BodyDescriptor,
                   void>::Visit);
 
+  table_.Register(kVisitPropertyCell, &VisitPropertyCell);
+
   table_.template RegisterSpecializations<DataObjectVisitor,
                                           kVisitDataObject,
                                           kVisitDataObjectGeneric>();
@@ -240,10 +262,10 @@ void StaticMarkingVisitor<StaticVisitor>::VisitEmbeddedPointer(
 
 
 template<typename StaticVisitor>
-void StaticMarkingVisitor<StaticVisitor>::VisitGlobalPropertyCell(
+void StaticMarkingVisitor<StaticVisitor>::VisitCell(
     Heap* heap, RelocInfo* rinfo) {
-  ASSERT(rinfo->rmode() == RelocInfo::GLOBAL_PROPERTY_CELL);
-  JSGlobalPropertyCell* cell = rinfo->target_cell();
+  ASSERT(rinfo->rmode() == RelocInfo::CELL);
+  Cell* cell = rinfo->target_cell();
   StaticVisitor::MarkObject(heap, cell);
 }
 
@@ -334,6 +356,30 @@ void StaticMarkingVisitor<StaticVisitor>::VisitMap(
 
 
 template<typename StaticVisitor>
+void StaticMarkingVisitor<StaticVisitor>::VisitPropertyCell(
+    Map* map, HeapObject* object) {
+  Heap* heap = map->GetHeap();
+
+  Object** slot =
+      HeapObject::RawField(object, PropertyCell::kDependentCodeOffset);
+  if (FLAG_collect_maps) {
+    // Mark property cell dependent codes array but do not push it onto marking
+    // stack, this will make references from it weak. We will clean dead
+    // codes when we iterate over property cells in ClearNonLiveReferences.
+    HeapObject* obj = HeapObject::cast(*slot);
+    heap->mark_compact_collector()->RecordSlot(slot, slot, obj);
+    StaticVisitor::MarkObjectWithoutPush(heap, obj);
+  } else {
+    StaticVisitor::VisitPointer(heap, slot);
+  }
+
+  StaticVisitor::VisitPointers(heap,
+      HeapObject::RawField(object, PropertyCell::kPointerFieldsBeginOffset),
+      HeapObject::RawField(object, PropertyCell::kPointerFieldsEndOffset));
+}
+
+
+template<typename StaticVisitor>
 void StaticMarkingVisitor<StaticVisitor>::VisitCode(
     Map* map, HeapObject* object) {
   Heap* heap = map->GetHeap();
@@ -414,7 +460,7 @@ void StaticMarkingVisitor<StaticVisitor>::VisitJSFunction(
       // Visit shared function info immediately to avoid double checking
       // of its flushability later. This is just an optimization because
       // the shared function info would eventually be visited.
-      SharedFunctionInfo* shared = function->unchecked_shared();
+      SharedFunctionInfo* shared = function->shared();
       if (StaticVisitor::MarkObjectWithoutPush(heap, shared)) {
         StaticVisitor::MarkObject(heap, shared->map());
         VisitSharedFunctionInfoWeakCode(heap, shared);
@@ -451,7 +497,7 @@ void StaticMarkingVisitor<StaticVisitor>::VisitJSArrayBuffer(
   Heap* heap = map->GetHeap();
 
   STATIC_ASSERT(
-      JSArrayBuffer::kWeakFirstArrayOffset ==
+      JSArrayBuffer::kWeakFirstViewOffset ==
       JSArrayBuffer::kWeakNextOffset + kPointerSize);
   StaticVisitor::VisitPointers(
       heap,
@@ -481,6 +527,21 @@ void StaticMarkingVisitor<StaticVisitor>::VisitJSTypedArray(
 
 
 template<typename StaticVisitor>
+void StaticMarkingVisitor<StaticVisitor>::VisitJSDataView(
+    Map* map, HeapObject* object) {
+  StaticVisitor::VisitPointers(
+      map->GetHeap(),
+      HeapObject::RawField(object, JSDataView::BodyDescriptor::kStartOffset),
+      HeapObject::RawField(object, JSDataView::kWeakNextOffset));
+  StaticVisitor::VisitPointers(
+      map->GetHeap(),
+      HeapObject::RawField(object,
+        JSDataView::kWeakNextOffset + kPointerSize),
+      HeapObject::RawField(object, JSDataView::kSize));
+}
+
+
+template<typename StaticVisitor>
 void StaticMarkingVisitor<StaticVisitor>::MarkMapContents(
     Heap* heap, Map* map) {
   // Make sure that the back pointer stored either in the map itself or
@@ -595,22 +656,17 @@ inline static bool HasSourceCode(Heap* heap, SharedFunctionInfo* info) {
 template<typename StaticVisitor>
 bool StaticMarkingVisitor<StaticVisitor>::IsFlushable(
     Heap* heap, JSFunction* function) {
-  SharedFunctionInfo* shared_info = function->unchecked_shared();
+  SharedFunctionInfo* shared_info = function->shared();
 
   // Code is either on stack, in compilation cache or referenced
   // by optimized version of function.
   MarkBit code_mark = Marking::MarkBitFrom(function->code());
   if (code_mark.Get()) {
-    if (!FLAG_age_code) {
-      if (!Marking::MarkBitFrom(shared_info).Get()) {
-        shared_info->set_code_age(0);
-      }
-    }
     return false;
   }
 
   // The function must have a valid context and not be a builtin.
-  if (!IsValidNonBuiltinContext(function->unchecked_context())) {
+  if (!IsValidNonBuiltinContext(function->context())) {
     return false;
   }
 
@@ -677,20 +733,12 @@ bool StaticMarkingVisitor<StaticVisitor>::IsFlushable(
     return false;
   }
 
-  if (FLAG_age_code) {
-    return shared_info->code()->IsOld();
-  } else {
-    // How many collections newly compiled code object will survive before being
-    // flushed.
-    static const int kCodeAgeThreshold = 5;
-
-    // Age this shared function info.
-    if (shared_info->code_age() < kCodeAgeThreshold) {
-      shared_info->set_code_age(shared_info->code_age() + 1);
-      return false;
-    }
-    return true;
+  // Check age of code. If code aging is disabled we never flush.
+  if (!FLAG_age_code || !shared_info->code()->IsOld()) {
+    return false;
   }
+
+  return true;
 }
 
 
@@ -777,7 +825,7 @@ void StaticMarkingVisitor<StaticVisitor>::VisitJSFunctionWeakCode(
 void Code::CodeIterateBody(ObjectVisitor* v) {
   int mode_mask = RelocInfo::kCodeTargetMask |
                   RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT) |
-                  RelocInfo::ModeMask(RelocInfo::GLOBAL_PROPERTY_CELL) |
+                  RelocInfo::ModeMask(RelocInfo::CELL) |
                   RelocInfo::ModeMask(RelocInfo::EXTERNAL_REFERENCE) |
                   RelocInfo::ModeMask(RelocInfo::JS_RETURN) |
                   RelocInfo::ModeMask(RelocInfo::DEBUG_BREAK_SLOT) |
@@ -801,7 +849,7 @@ template<typename StaticVisitor>
 void Code::CodeIterateBody(Heap* heap) {
   int mode_mask = RelocInfo::kCodeTargetMask |
                   RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT) |
-                  RelocInfo::ModeMask(RelocInfo::GLOBAL_PROPERTY_CELL) |
+                  RelocInfo::ModeMask(RelocInfo::CELL) |
                   RelocInfo::ModeMask(RelocInfo::EXTERNAL_REFERENCE) |
                   RelocInfo::ModeMask(RelocInfo::JS_RETURN) |
                   RelocInfo::ModeMask(RelocInfo::DEBUG_BREAK_SLOT) |
index 4bf2804..6502209 100644 (file)
@@ -91,7 +91,10 @@ StaticVisitorBase::VisitorId StaticVisitorBase::GetVisitorId(
     case CODE_TYPE:
       return kVisitCode;
 
-    case JS_GLOBAL_PROPERTY_CELL_TYPE:
+    case CELL_TYPE:
+      return kVisitCell;
+
+    case PROPERTY_CELL_TYPE:
       return kVisitPropertyCell;
 
     case JS_SET_TYPE:
@@ -140,6 +143,9 @@ StaticVisitorBase::VisitorId StaticVisitorBase::GetVisitorId(
     case JS_TYPED_ARRAY_TYPE:
       return kVisitJSTypedArray;
 
+    case JS_DATA_VIEW_TYPE:
+      return kVisitJSDataView;
+
     case JS_OBJECT_TYPE:
     case JS_CONTEXT_EXTENSION_OBJECT_TYPE:
     case JS_GENERATOR_OBJECT_TYPE:
index c4d1cc3..c2ab45d 100644 (file)
@@ -88,12 +88,14 @@ class StaticVisitorBase : public AllStatic {
   V(Oddball)                  \
   V(Code)                     \
   V(Map)                      \
+  V(Cell)                     \
   V(PropertyCell)             \
   V(SharedFunctionInfo)       \
   V(JSFunction)               \
   V(JSWeakMap)                \
   V(JSArrayBuffer)            \
   V(JSTypedArray)             \
+  V(JSDataView)               \
   V(JSRegExp)
 
   // For data objects, JS objects and structs along with generic visitor which
@@ -337,6 +339,7 @@ class StaticNewSpaceVisitor : public StaticVisitorBase {
 
   INLINE(static int VisitJSArrayBuffer(Map* map, HeapObject* object));
   INLINE(static int VisitJSTypedArray(Map* map, HeapObject* object));
+  INLINE(static int VisitJSDataView(Map* map, HeapObject* object));
 
   class DataObjectVisitor {
    public:
@@ -392,9 +395,10 @@ class StaticMarkingVisitor : public StaticVisitorBase {
     table_.GetVisitor(map)(map, obj);
   }
 
+  INLINE(static void VisitPropertyCell(Map* map, HeapObject* object));
   INLINE(static void VisitCodeEntry(Heap* heap, Address entry_address));
   INLINE(static void VisitEmbeddedPointer(Heap* heap, RelocInfo* rinfo));
-  INLINE(static void VisitGlobalPropertyCell(Heap* heap, RelocInfo* rinfo));
+  INLINE(static void VisitCell(Heap* heap, RelocInfo* rinfo));
   INLINE(static void VisitDebugTarget(Heap* heap, RelocInfo* rinfo));
   INLINE(static void VisitCodeTarget(Heap* heap, RelocInfo* rinfo));
   INLINE(static void VisitCodeAgeSequence(Heap* heap, RelocInfo* rinfo));
@@ -414,6 +418,7 @@ class StaticMarkingVisitor : public StaticVisitorBase {
   INLINE(static void VisitJSRegExp(Map* map, HeapObject* object));
   INLINE(static void VisitJSArrayBuffer(Map* map, HeapObject* object));
   INLINE(static void VisitJSTypedArray(Map* map, HeapObject* object));
+  INLINE(static void VisitJSDataView(Map* map, HeapObject* object));
   INLINE(static void VisitNativeContext(Map* map, HeapObject* object));
 
   // Mark pointers in a Map and its TransitionArray together, possibly
index 6512c60..aa67876 100644 (file)
@@ -39,6 +39,7 @@
 #include "execution.h"
 #include "full-codegen.h"
 #include "hydrogen.h"
+#include "isolate-inl.h"
 #include "objects-inl.h"
 #include "objects-visiting.h"
 #include "objects-visiting-inl.h"
@@ -47,7 +48,6 @@
 #include "safepoint-table.h"
 #include "string-stream.h"
 #include "utils.h"
-#include "vm-state-inl.h"
 
 #ifdef ENABLE_DISASSEMBLER
 #include "disasm.h"
@@ -375,14 +375,8 @@ MaybeObject* JSObject::GetPropertyWithCallback(Object* receiver,
     Handle<String> key(String::cast(name));
     LOG(isolate, ApiNamedPropertyAccess("load", self, name));
     PropertyCallbackArguments args(isolate, data->data(), self, this);
-    v8::Handle<v8::Value> result;
-    {
-      // Leaving JavaScript.
-      VMState<EXTERNAL> state(isolate);
-      ExternalCallbackScope call_scope(isolate,
-                                       v8::ToCData<Address>(fun_obj));
-      result = args.Call(call_fun, v8::Utils::ToLocal(key));
-    }
+    v8::Handle<v8::Value> result =
+        args.Call(call_fun, v8::Utils::ToLocal(key));
     RETURN_IF_SCHEDULED_EXCEPTION(isolate);
     if (result.IsEmpty()) {
       return isolate->heap()->undefined_value();
@@ -629,9 +623,9 @@ Object* JSObject::GetNormalizedProperty(LookupResult* result) {
   ASSERT(!HasFastProperties());
   Object* value = property_dictionary()->ValueAt(result->GetDictionaryEntry());
   if (IsGlobalObject()) {
-    value = JSGlobalPropertyCell::cast(value)->value();
+    value = PropertyCell::cast(value)->value();
   }
-  ASSERT(!value->IsJSGlobalPropertyCell());
+  ASSERT(!value->IsPropertyCell() && !value->IsCell());
   return value;
 }
 
@@ -639,9 +633,8 @@ Object* JSObject::GetNormalizedProperty(LookupResult* result) {
 Object* JSObject::SetNormalizedProperty(LookupResult* result, Object* value) {
   ASSERT(!HasFastProperties());
   if (IsGlobalObject()) {
-    JSGlobalPropertyCell* cell =
-        JSGlobalPropertyCell::cast(
-            property_dictionary()->ValueAt(result->GetDictionaryEntry()));
+    PropertyCell* cell = PropertyCell::cast(
+        property_dictionary()->ValueAt(result->GetDictionaryEntry()));
     cell->set_value(value);
   } else {
     property_dictionary()->ValueAtPut(result->GetDictionaryEntry(), value);
@@ -669,8 +662,7 @@ MaybeObject* JSObject::SetNormalizedProperty(Name* name,
     Object* store_value = value;
     if (IsGlobalObject()) {
       Heap* heap = name->GetHeap();
-      MaybeObject* maybe_store_value =
-          heap->AllocateJSGlobalPropertyCell(value);
+      MaybeObject* maybe_store_value = heap->AllocatePropertyCell(value);
       if (!maybe_store_value->ToObject(&store_value)) return maybe_store_value;
     }
     Object* dict;
@@ -697,8 +689,8 @@ MaybeObject* JSObject::SetNormalizedProperty(Name* name,
       details.attributes(), details.type(), enumeration_index);
 
   if (IsGlobalObject()) {
-    JSGlobalPropertyCell* cell =
-        JSGlobalPropertyCell::cast(property_dictionary()->ValueAt(entry));
+    PropertyCell* cell =
+        PropertyCell::cast(property_dictionary()->ValueAt(entry));
     cell->set_value(value);
     // Please note we have to update the property details.
     property_dictionary()->DetailsAtPut(entry, details);
@@ -730,8 +722,7 @@ MaybeObject* JSObject::DeleteNormalizedProperty(Name* name, DeleteMode mode) {
         ASSERT(new_map->is_dictionary_map());
         set_map(new_map);
       }
-      JSGlobalPropertyCell* cell =
-          JSGlobalPropertyCell::cast(dictionary->ValueAt(entry));
+      PropertyCell* cell = PropertyCell::cast(dictionary->ValueAt(entry));
       cell->set_value(cell->GetHeap()->the_hole_value());
       dictionary->DetailsAtPut(entry, details.AsDeleted());
     } else {
@@ -1385,7 +1376,7 @@ void JSObject::JSObjectShortPrint(StringStream* accumulator) {
                        global_object ? "Global Object: " : "",
                        vowel ? "n" : "");
                 accumulator->Put(str);
-                accumulator->Add(" with %smap 0x%p",
+                accumulator->Add(" with %smap %p",
                     map_of_this->is_deprecated() ? "deprecated " : "",
                     map_of_this);
                 printed = true;
@@ -1567,9 +1558,13 @@ void HeapObject::HeapObjectShortPrint(StringStream* accumulator) {
     case FOREIGN_TYPE:
       accumulator->Add("<Foreign>");
       break;
-    case JS_GLOBAL_PROPERTY_CELL_TYPE:
+    case CELL_TYPE:
       accumulator->Add("Cell for ");
-      JSGlobalPropertyCell::cast(this)->value()->ShortPrint(accumulator);
+      Cell::cast(this)->value()->ShortPrint(accumulator);
+      break;
+    case PROPERTY_CELL_TYPE:
+      accumulator->Add("PropertyCell for ");
+      PropertyCell::cast(this)->value()->ShortPrint(accumulator);
       break;
     default:
       accumulator->Add("<Other heap object (%d)>", map()->instance_type());
@@ -1629,6 +1624,7 @@ void HeapObject::IterateBody(InstanceType type, int object_size,
     case JS_ARRAY_TYPE:
     case JS_ARRAY_BUFFER_TYPE:
     case JS_TYPED_ARRAY_TYPE:
+    case JS_DATA_VIEW_TYPE:
     case JS_SET_TYPE:
     case JS_MAP_TYPE:
     case JS_WEAK_MAP_TYPE:
@@ -1661,8 +1657,11 @@ void HeapObject::IterateBody(InstanceType type, int object_size,
     case CODE_TYPE:
       reinterpret_cast<Code*>(this)->CodeIterateBody(v);
       break;
-    case JS_GLOBAL_PROPERTY_CELL_TYPE:
-      JSGlobalPropertyCell::BodyDescriptor::IterateBody(this, v);
+    case CELL_TYPE:
+      Cell::BodyDescriptor::IterateBody(this, v);
+      break;
+    case PROPERTY_CELL_TYPE:
+      PropertyCell::BodyDescriptor::IterateBody(this, v);
       break;
     case SYMBOL_TYPE:
       Symbol::BodyDescriptor::IterateBody(this, v);
@@ -1931,7 +1930,7 @@ MaybeObject* JSObject::AddSlowProperty(Name* name,
     int entry = dict->FindEntry(name);
     if (entry != NameDictionary::kNotFound) {
       store_value = dict->ValueAt(entry);
-      JSGlobalPropertyCell::cast(store_value)->set_value(value);
+      PropertyCell::cast(store_value)->set_value(value);
       // Assign an enumeration index to the property and update
       // SetNextEnumerationIndex.
       int index = dict->NextEnumerationIndex();
@@ -1942,10 +1941,10 @@ MaybeObject* JSObject::AddSlowProperty(Name* name,
     }
     Heap* heap = GetHeap();
     { MaybeObject* maybe_store_value =
-          heap->AllocateJSGlobalPropertyCell(value);
+          heap->AllocatePropertyCell(value);
       if (!maybe_store_value->ToObject(&store_value)) return maybe_store_value;
     }
-    JSGlobalPropertyCell::cast(store_value)->set_value(value);
+    PropertyCell::cast(store_value)->set_value(value);
   }
   PropertyDetails details = PropertyDetails(attributes, NORMAL, 0);
   Object* result;
@@ -2731,18 +2730,13 @@ MaybeObject* JSObject::SetPropertyWithInterceptor(
     PropertyCallbackArguments args(isolate, interceptor->data(), this, this);
     v8::NamedPropertySetter setter =
         v8::ToCData<v8::NamedPropertySetter>(interceptor->setter());
-    v8::Handle<v8::Value> result;
-    {
-      // Leaving JavaScript.
-      VMState<EXTERNAL> state(isolate);
-      Handle<Object> value_unhole(value->IsTheHole() ?
-                                  isolate->heap()->undefined_value() :
-                                  value,
-                                  isolate);
-      result = args.Call(setter,
-                         v8::Utils::ToLocal(name_handle),
-                         v8::Utils::ToLocal(value_unhole));
-    }
+    Handle<Object> value_unhole(value->IsTheHole() ?
+                                isolate->heap()->undefined_value() :
+                                value,
+                                isolate);
+    v8::Handle<v8::Value> result = args.Call(setter,
+                                             v8::Utils::ToLocal(name_handle),
+                                             v8::Utils::ToLocal(value_unhole));
     RETURN_IF_SCHEDULED_EXCEPTION(isolate);
     if (!result.IsEmpty()) return *value_handle;
   }
@@ -2841,17 +2835,11 @@ MaybeObject* JSObject::SetPropertyWithCallback(Object* structure,
     if (call_fun == NULL) return value;
     Handle<String> key(String::cast(name));
     LOG(isolate, ApiNamedPropertyAccess("store", this, name));
-    PropertyCallbackArguments
-      args(isolate, data->data(), this, JSObject::cast(holder));
-    {
-      // Leaving JavaScript.
-      VMState<EXTERNAL> state(isolate);
-      ExternalCallbackScope call_scope(isolate,
-                                       v8::ToCData<Address>(call_obj));
-      args.Call(call_fun,
-                v8::Utils::ToLocal(key),
-                v8::Utils::ToLocal(value_handle));
-    }
+    PropertyCallbackArguments args(
+        isolate, data->data(), this, JSObject::cast(holder));
+    args.Call(call_fun,
+              v8::Utils::ToLocal(key),
+              v8::Utils::ToLocal(value_handle));
     RETURN_IF_SCHEDULED_EXCEPTION(isolate);
     return *value_handle;
   }
@@ -3267,7 +3255,7 @@ void JSObject::LocalLookupRealNamedProperty(Name* name, LookupResult* result) {
         result->NotFound();
         return;
       }
-      value = JSGlobalPropertyCell::cast(value)->value();
+      value = PropertyCell::cast(value)->value();
     }
     // Make sure to disallow caching for uninitialized constants
     // found in the dictionary-mode objects.
@@ -4182,12 +4170,8 @@ PropertyAttributes JSObject::GetPropertyAttributeWithInterceptor(
         v8::ToCData<v8::NamedPropertyQuery>(interceptor->query());
     LOG(isolate,
         ApiNamedPropertyAccess("interceptor-named-has", *holder_handle, name));
-    v8::Handle<v8::Integer> result;
-    {
-      // Leaving JavaScript.
-      VMState<EXTERNAL> state(isolate);
-      result = args.Call(query, v8::Utils::ToLocal(name_handle));
-    }
+    v8::Handle<v8::Integer> result =
+        args.Call(query, v8::Utils::ToLocal(name_handle));
     if (!result.IsEmpty()) {
       ASSERT(result->IsInt32());
       return static_cast<PropertyAttributes>(result->Int32Value());
@@ -4197,12 +4181,8 @@ PropertyAttributes JSObject::GetPropertyAttributeWithInterceptor(
         v8::ToCData<v8::NamedPropertyGetter>(interceptor->getter());
     LOG(isolate,
         ApiNamedPropertyAccess("interceptor-named-get-has", this, name));
-    v8::Handle<v8::Value> result;
-    {
-      // Leaving JavaScript.
-      VMState<EXTERNAL> state(isolate);
-      result = args.Call(getter, v8::Utils::ToLocal(name_handle));
-    }
+    v8::Handle<v8::Value> result =
+        args.Call(getter, v8::Utils::ToLocal(name_handle));
     if (!result.IsEmpty()) return DONT_ENUM;
   }
   return holder_handle->GetPropertyAttributePostInterceptor(*receiver_handle,
@@ -4322,12 +4302,7 @@ PropertyAttributes JSObject::GetElementAttributeWithInterceptor(
         v8::ToCData<v8::IndexedPropertyQuery>(interceptor->query());
     LOG(isolate,
         ApiIndexedPropertyAccess("interceptor-indexed-has", this, index));
-    v8::Handle<v8::Integer> result;
-    {
-      // Leaving JavaScript.
-      VMState<EXTERNAL> state(isolate);
-      result = args.Call(query, index);
-    }
+    v8::Handle<v8::Integer> result = args.Call(query, index);
     if (!result.IsEmpty())
       return static_cast<PropertyAttributes>(result->Int32Value());
   } else if (!interceptor->getter()->IsUndefined()) {
@@ -4335,12 +4310,7 @@ PropertyAttributes JSObject::GetElementAttributeWithInterceptor(
         v8::ToCData<v8::IndexedPropertyGetter>(interceptor->getter());
     LOG(isolate,
         ApiIndexedPropertyAccess("interceptor-indexed-get-has", this, index));
-    v8::Handle<v8::Value> result;
-    {
-      // Leaving JavaScript.
-      VMState<EXTERNAL> state(isolate);
-      result = args.Call(getter, index);
-    }
+    v8::Handle<v8::Value> result = args.Call(getter, index);
     if (!result.IsEmpty()) return NONE;
   }
 
@@ -4764,7 +4734,7 @@ Object* JSObject::GetHiddenProperty(Name* key) {
     // For a proxy, use the prototype as target object.
     Object* proxy_parent = GetPrototype();
     // If the proxy is detached, return undefined.
-    if (proxy_parent->IsNull()) return GetHeap()->undefined_value();
+    if (proxy_parent->IsNull()) return GetHeap()->the_hole_value();
     ASSERT(proxy_parent->IsJSGlobalObject());
     return JSObject::cast(proxy_parent)->GetHiddenProperty(key);
   }
@@ -4778,15 +4748,14 @@ Object* JSObject::GetHiddenProperty(Name* key) {
     if (key == GetHeap()->identity_hash_string()) {
       return inline_value;
     } else {
-      return GetHeap()->undefined_value();
+      return GetHeap()->the_hole_value();
     }
   }
 
-  if (inline_value->IsUndefined()) return GetHeap()->undefined_value();
+  if (inline_value->IsUndefined()) return GetHeap()->the_hole_value();
 
   ObjectHashTable* hashtable = ObjectHashTable::cast(inline_value);
   Object* entry = hashtable->Lookup(key);
-  if (entry->IsTheHole()) return GetHeap()->undefined_value();
   return entry;
 }
 
@@ -5010,12 +4979,8 @@ MaybeObject* JSObject::DeletePropertyWithInterceptor(Name* name) {
     LOG(isolate,
         ApiNamedPropertyAccess("interceptor-named-delete", *this_handle, name));
     PropertyCallbackArguments args(isolate, interceptor->data(), this, this);
-    v8::Handle<v8::Boolean> result;
-    {
-      // Leaving JavaScript.
-      VMState<EXTERNAL> state(isolate);
-      result = args.Call(deleter, v8::Utils::ToLocal(name_handle));
-    }
+    v8::Handle<v8::Boolean> result =
+        args.Call(deleter, v8::Utils::ToLocal(name_handle));
     RETURN_IF_SCHEDULED_EXCEPTION(isolate);
     if (!result.IsEmpty()) {
       ASSERT(result->IsBoolean());
@@ -5046,12 +5011,7 @@ MaybeObject* JSObject::DeleteElementWithInterceptor(uint32_t index) {
   LOG(isolate,
       ApiIndexedPropertyAccess("interceptor-indexed-delete", this, index));
   PropertyCallbackArguments args(isolate, interceptor->data(), this, this);
-  v8::Handle<v8::Boolean> result;
-  {
-    // Leaving JavaScript.
-    VMState<EXTERNAL> state(isolate);
-    result = args.Call(deleter, index);
-  }
+  v8::Handle<v8::Boolean> result = args.Call(deleter, index);
   RETURN_IF_SCHEDULED_EXCEPTION(isolate);
   if (!result.IsEmpty()) {
     ASSERT(result->IsBoolean());
@@ -5879,11 +5839,12 @@ static bool UpdateGetterSetterInDictionary(
 }
 
 
-MaybeObject* JSObject::DefineElementAccessor(uint32_t index,
-                                             Object* getter,
-                                             Object* setter,
-                                             PropertyAttributes attributes) {
-  switch (GetElementsKind()) {
+void JSObject::DefineElementAccessor(Handle<JSObject> object,
+                                     uint32_t index,
+                                     Handle<Object> getter,
+                                     Handle<Object> setter,
+                                     PropertyAttributes attributes) {
+  switch (object->GetElementsKind()) {
     case FAST_SMI_ELEMENTS:
     case FAST_ELEMENTS:
     case FAST_DOUBLE_ELEMENTS:
@@ -5901,21 +5862,21 @@ MaybeObject* JSObject::DefineElementAccessor(uint32_t index,
     case EXTERNAL_FLOAT_ELEMENTS:
     case EXTERNAL_DOUBLE_ELEMENTS:
       // Ignore getters and setters on pixel and external array elements.
-      return GetHeap()->undefined_value();
+      return;
     case DICTIONARY_ELEMENTS:
-      if (UpdateGetterSetterInDictionary(element_dictionary(),
+      if (UpdateGetterSetterInDictionary(object->element_dictionary(),
                                          index,
-                                         getter,
-                                         setter,
+                                         *getter,
+                                         *setter,
                                          attributes)) {
-        return GetHeap()->undefined_value();
+        return;
       }
       break;
     case NON_STRICT_ARGUMENTS_ELEMENTS: {
       // Ascertain whether we have read-only properties or an existing
       // getter/setter pair in an arguments elements dictionary backing
       // store.
-      FixedArray* parameter_map = FixedArray::cast(elements());
+      FixedArray* parameter_map = FixedArray::cast(object->elements());
       uint32_t length = parameter_map->length();
       Object* probe =
           index < (length - 2) ? parameter_map->get(index + 2) : NULL;
@@ -5926,10 +5887,10 @@ MaybeObject* JSObject::DefineElementAccessor(uint32_t index,
               SeededNumberDictionary::cast(arguments);
           if (UpdateGetterSetterInDictionary(dictionary,
                                              index,
-                                             getter,
-                                             setter,
+                                             *getter,
+                                             *setter,
                                              attributes)) {
-            return GetHeap()->undefined_value();
+            return;
           }
         }
       }
@@ -5937,19 +5898,20 @@ MaybeObject* JSObject::DefineElementAccessor(uint32_t index,
     }
   }
 
-  AccessorPair* accessors;
-  { MaybeObject* maybe_accessors = GetHeap()->AllocateAccessorPair();
-    if (!maybe_accessors->To(&accessors)) return maybe_accessors;
-  }
-  accessors->SetComponents(getter, setter);
+  Isolate* isolate = object->GetIsolate();
+  Handle<AccessorPair> accessors = isolate->factory()->NewAccessorPair();
+  accessors->SetComponents(*getter, *setter);
 
-  return SetElementCallback(index, accessors, attributes);
+  CALL_HEAP_FUNCTION_VOID(
+      isolate, object->SetElementCallback(index, *accessors, attributes));
 }
 
 
-MaybeObject* JSObject::CreateAccessorPairFor(Name* name) {
-  LookupResult result(GetHeap()->isolate());
-  LocalLookupRealNamedProperty(name, &result);
+Handle<AccessorPair> JSObject::CreateAccessorPairFor(Handle<JSObject> object,
+                                                     Handle<Name> name) {
+  Isolate* isolate = object->GetIsolate();
+  LookupResult result(isolate);
+  object->LocalLookupRealNamedProperty(*name, &result);
   if (result.IsPropertyCallbacks()) {
     // Note that the result can actually have IsDontDelete() == true when we
     // e.g. have to fall back to the slow case while adding a setter after
@@ -5959,47 +5921,37 @@ MaybeObject* JSObject::CreateAccessorPairFor(Name* name) {
     // DefinePropertyAccessor below.
     Object* obj = result.GetCallbackObject();
     if (obj->IsAccessorPair()) {
-      return AccessorPair::cast(obj)->Copy();
+      return AccessorPair::Copy(handle(AccessorPair::cast(obj), isolate));
     }
   }
-  return GetHeap()->AllocateAccessorPair();
+  return isolate->factory()->NewAccessorPair();
 }
 
 
-MaybeObject* JSObject::DefinePropertyAccessor(Name* name,
-                                              Object* getter,
-                                              Object* setter,
-                                              PropertyAttributes attributes) {
+void JSObject::DefinePropertyAccessor(Handle<JSObject> object,
+                                      Handle<Name> name,
+                                      Handle<Object> getter,
+                                      Handle<Object> setter,
+                                      PropertyAttributes attributes) {
   // We could assert that the property is configurable here, but we would need
   // to do a lookup, which seems to be a bit of overkill.
-  Heap* heap = GetHeap();
   bool only_attribute_changes = getter->IsNull() && setter->IsNull();
-  if (HasFastProperties() && !only_attribute_changes &&
-      (map()->NumberOfOwnDescriptors() <
+  if (object->HasFastProperties() && !only_attribute_changes &&
+      (object->map()->NumberOfOwnDescriptors() <
        DescriptorArray::kMaxNumberOfDescriptors)) {
-    MaybeObject* getterOk = heap->undefined_value();
-    if (!getter->IsNull()) {
-      getterOk = DefineFastAccessor(name, ACCESSOR_GETTER, getter, attributes);
-      if (getterOk->IsFailure()) return getterOk;
-    }
-
-    MaybeObject* setterOk = heap->undefined_value();
-    if (getterOk != heap->null_value() && !setter->IsNull()) {
-      setterOk = DefineFastAccessor(name, ACCESSOR_SETTER, setter, attributes);
-      if (setterOk->IsFailure()) return setterOk;
-    }
-
-    if (getterOk != heap->null_value() && setterOk != heap->null_value()) {
-      return heap->undefined_value();
-    }
+    bool getterOk = getter->IsNull() ||
+        DefineFastAccessor(object, name, ACCESSOR_GETTER, getter, attributes);
+    bool setterOk = !getterOk || setter->IsNull() ||
+        DefineFastAccessor(object, name, ACCESSOR_SETTER, setter, attributes);
+    if (getterOk && setterOk) return;
   }
 
-  AccessorPair* accessors;
-  MaybeObject* maybe_accessors = CreateAccessorPairFor(name);
-  if (!maybe_accessors->To(&accessors)) return maybe_accessors;
+  Handle<AccessorPair> accessors = CreateAccessorPairFor(object, name);
+  accessors->SetComponents(*getter, *setter);
 
-  accessors->SetComponents(getter, setter);
-  return SetPropertyCallback(name, accessors, attributes);
+  CALL_HEAP_FUNCTION_VOID(
+      object->GetIsolate(),
+      object->SetPropertyCallback(*name, *accessors, attributes));
 }
 
 
@@ -6101,29 +6053,21 @@ void JSObject::DefineAccessor(Handle<JSObject> object,
                               Handle<Object> getter,
                               Handle<Object> setter,
                               PropertyAttributes attributes) {
-  CALL_HEAP_FUNCTION_VOID(
-      object->GetIsolate(),
-      object->DefineAccessor(*name, *getter, *setter, attributes));
-}
-
-MaybeObject* JSObject::DefineAccessor(Name* name_raw,
-                                      Object* getter_raw,
-                                      Object* setter_raw,
-                                      PropertyAttributes attributes) {
-  Isolate* isolate = GetIsolate();
+  Isolate* isolate = object->GetIsolate();
   // Check access rights if needed.
-  if (IsAccessCheckNeeded() &&
-      !isolate->MayNamedAccess(this, name_raw, v8::ACCESS_SET)) {
-    isolate->ReportFailedAccessCheck(this, v8::ACCESS_SET);
-    return isolate->heap()->undefined_value();
+  if (object->IsAccessCheckNeeded() &&
+      !isolate->MayNamedAccess(*object, *name, v8::ACCESS_SET)) {
+    isolate->ReportFailedAccessCheck(*object, v8::ACCESS_SET);
+    return;
   }
 
-  if (IsJSGlobalProxy()) {
-    Object* proto = GetPrototype();
-    if (proto->IsNull()) return this;
+  if (object->IsJSGlobalProxy()) {
+    Handle<Object> proto(object->GetPrototype(), isolate);
+    if (proto->IsNull()) return;
     ASSERT(proto->IsJSGlobalObject());
-    return JSObject::cast(proto)->DefineAccessor(
-        name_raw, getter_raw, setter_raw, attributes);
+    DefineAccessor(
+        Handle<JSObject>::cast(proto), name, getter, setter, attributes);
+    return;
   }
 
   // Make sure that the top context does not change when doing callbacks or
@@ -6131,68 +6075,58 @@ MaybeObject* JSObject::DefineAccessor(Name* name_raw,
   AssertNoContextChange ncc;
 
   // Try to flatten before operating on the string.
-  if (name_raw->IsString()) String::cast(name_raw)->TryFlatten();
-
-  if (!CanSetCallback(name_raw)) return isolate->heap()->undefined_value();
+  if (name->IsString()) String::cast(*name)->TryFlatten();
 
-  // From this point on everything needs to be handlified.
-  HandleScope scope(isolate);
-  Handle<JSObject> self(this);
-  Handle<Name> name(name_raw);
-  Handle<Object> getter(getter_raw, isolate);
-  Handle<Object> setter(setter_raw, isolate);
+  if (!object->CanSetCallback(*name)) return;
 
   uint32_t index = 0;
   bool is_element = name->AsArrayIndex(&index);
 
   Handle<Object> old_value = isolate->factory()->the_hole_value();
-  bool is_observed = FLAG_harmony_observation && self->map()->is_observed();
+  bool is_observed = FLAG_harmony_observation && object->map()->is_observed();
   bool preexists = false;
   if (is_observed) {
     if (is_element) {
-      preexists = HasLocalElement(index);
-      if (preexists && self->GetLocalElementAccessorPair(index) == NULL) {
-        old_value = Object::GetElement(self, index);
+      preexists = object->HasLocalElement(index);
+      if (preexists && object->GetLocalElementAccessorPair(index) == NULL) {
+        old_value = Object::GetElement(object, index);
       }
     } else {
       LookupResult lookup(isolate);
-      LocalLookup(*name, &lookup, true);
+      object->LocalLookup(*name, &lookup, true);
       preexists = lookup.IsProperty();
       if (preexists && lookup.IsDataProperty()) {
-        old_value = Object::GetProperty(self, name);
+        old_value = Object::GetProperty(object, name);
       }
     }
   }
 
-  MaybeObject* result = is_element ?
-    self->DefineElementAccessor(index, *getter, *setter, attributes) :
-    self->DefinePropertyAccessor(*name, *getter, *setter, attributes);
-
-  Handle<Object> hresult;
-  if (!result->ToHandle(&hresult, isolate)) return result;
+  if (is_element) {
+    DefineElementAccessor(object, index, getter, setter, attributes);
+  } else {
+    DefinePropertyAccessor(object, name, getter, setter, attributes);
+  }
 
   if (is_observed) {
     const char* type = preexists ? "reconfigured" : "new";
-    EnqueueChangeRecord(self, type, name, old_value);
+    EnqueueChangeRecord(object, type, name, old_value);
   }
-
-  return *hresult;
 }
 
 
-static MaybeObject* TryAccessorTransition(JSObject* self,
-                                          Map* transitioned_map,
-                                          int target_descriptor,
-                                          AccessorComponent component,
-                                          Object* accessor,
-                                          PropertyAttributes attributes) {
+static bool TryAccessorTransition(JSObject* self,
+                                  Map* transitioned_map,
+                                  int target_descriptor,
+                                  AccessorComponent component,
+                                  Object* accessor,
+                                  PropertyAttributes attributes) {
   DescriptorArray* descs = transitioned_map->instance_descriptors();
   PropertyDetails details = descs->GetDetails(target_descriptor);
 
   // If the transition target was not callbacks, fall back to the slow case.
-  if (details.type() != CALLBACKS) return self->GetHeap()->null_value();
+  if (details.type() != CALLBACKS) return false;
   Object* descriptor = descs->GetCallbacksObject(target_descriptor);
-  if (!descriptor->IsAccessorPair()) return self->GetHeap()->null_value();
+  if (!descriptor->IsAccessorPair()) return false;
 
   Object* target_accessor = AccessorPair::cast(descriptor)->get(component);
   PropertyAttributes target_attributes = details.attributes();
@@ -6200,25 +6134,46 @@ static MaybeObject* TryAccessorTransition(JSObject* self,
   // Reuse transition if adding same accessor with same attributes.
   if (target_accessor == accessor && target_attributes == attributes) {
     self->set_map(transitioned_map);
-    return self;
+    return true;
   }
 
   // If either not the same accessor, or not the same attributes, fall back to
   // the slow case.
-  return self->GetHeap()->null_value();
+  return false;
 }
 
 
-MaybeObject* JSObject::DefineFastAccessor(Name* name,
-                                          AccessorComponent component,
-                                          Object* accessor,
-                                          PropertyAttributes attributes) {
+static MaybeObject* CopyInsertDescriptor(Map* map,
+                                         Name* name,
+                                         AccessorPair* accessors,
+                                         PropertyAttributes attributes) {
+  CallbacksDescriptor new_accessors_desc(name, accessors, attributes);
+  return map->CopyInsertDescriptor(&new_accessors_desc, INSERT_TRANSITION);
+}
+
+
+static Handle<Map> CopyInsertDescriptor(Handle<Map> map,
+                                        Handle<Name> name,
+                                        Handle<AccessorPair> accessors,
+                                        PropertyAttributes attributes) {
+  CALL_HEAP_FUNCTION(map->GetIsolate(),
+                     CopyInsertDescriptor(*map, *name, *accessors, attributes),
+                     Map);
+}
+
+
+bool JSObject::DefineFastAccessor(Handle<JSObject> object,
+                                  Handle<Name> name,
+                                  AccessorComponent component,
+                                  Handle<Object> accessor,
+                                  PropertyAttributes attributes) {
   ASSERT(accessor->IsSpecFunction() || accessor->IsUndefined());
-  LookupResult result(GetIsolate());
-  LocalLookup(name, &result);
+  Isolate* isolate = object->GetIsolate();
+  LookupResult result(isolate);
+  object->LocalLookup(*name, &result);
 
   if (result.IsFound() && !result.IsPropertyCallbacks()) {
-    return GetHeap()->null_value();
+    return false;
   }
 
   // Return success if the same accessor with the same attributes already exist.
@@ -6228,65 +6183,53 @@ MaybeObject* JSObject::DefineFastAccessor(Name* name,
     if (callback_value->IsAccessorPair()) {
       source_accessors = AccessorPair::cast(callback_value);
       Object* entry = source_accessors->get(component);
-      if (entry == accessor && result.GetAttributes() == attributes) {
-        return this;
+      if (entry == *accessor && result.GetAttributes() == attributes) {
+        return true;
       }
     } else {
-      return GetHeap()->null_value();
+      return false;
     }
 
     int descriptor_number = result.GetDescriptorIndex();
 
-    map()->LookupTransition(this, name, &result);
+    object->map()->LookupTransition(*object, *name, &result);
 
     if (result.IsFound()) {
       Map* target = result.GetTransitionTarget();
       ASSERT(target->NumberOfOwnDescriptors() ==
-             map()->NumberOfOwnDescriptors());
+             object->map()->NumberOfOwnDescriptors());
       // This works since descriptors are sorted in order of addition.
-      ASSERT(map()->instance_descriptors()->GetKey(descriptor_number) == name);
-      return TryAccessorTransition(
-          this, target, descriptor_number, component, accessor, attributes);
+      ASSERT(object->map()->instance_descriptors()->
+             GetKey(descriptor_number) == *name);
+      return TryAccessorTransition(*object, target, descriptor_number,
+                                   component, *accessor, attributes);
     }
   } else {
     // If not, lookup a transition.
-    map()->LookupTransition(this, name, &result);
+    object->map()->LookupTransition(*object, *name, &result);
 
     // If there is a transition, try to follow it.
     if (result.IsFound()) {
       Map* target = result.GetTransitionTarget();
       int descriptor_number = target->LastAdded();
       ASSERT(target->instance_descriptors()->GetKey(descriptor_number)
-             ->Equals(name));
-      return TryAccessorTransition(
-          this, target, descriptor_number, component, accessor, attributes);
+             ->Equals(*name));
+      return TryAccessorTransition(*object, target, descriptor_number,
+                                   component, *accessor, attributes);
     }
   }
 
   // If there is no transition yet, add a transition to the a new accessor pair
-  // containing the accessor.
-  AccessorPair* accessors;
-  MaybeObject* maybe_accessors;
-
-  // Allocate a new pair if there were no source accessors. Otherwise, copy the
-  // pair and modify the accessor.
-  if (source_accessors != NULL) {
-    maybe_accessors = source_accessors->Copy();
-  } else {
-    maybe_accessors = GetHeap()->AllocateAccessorPair();
-  }
-  if (!maybe_accessors->To(&accessors)) return maybe_accessors;
-  accessors->set(component, accessor);
-
-  CallbacksDescriptor new_accessors_desc(name, accessors, attributes);
-
-  Map* new_map;
-  MaybeObject* maybe_new_map =
-      map()->CopyInsertDescriptor(&new_accessors_desc, INSERT_TRANSITION);
-  if (!maybe_new_map->To(&new_map)) return maybe_new_map;
-
-  set_map(new_map);
-  return this;
+  // containing the accessor.  Allocate a new pair if there were no source
+  // accessors.  Otherwise, copy the pair and modify the accessor.
+  Handle<AccessorPair> accessors = source_accessors != NULL
+      ? AccessorPair::Copy(Handle<AccessorPair>(source_accessors))
+      : isolate->factory()->NewAccessorPair();
+  accessors->set(component, *accessor);
+  Handle<Map> new_map = CopyInsertDescriptor(Handle<Map>(object->map()),
+                                             name, accessors, attributes);
+  object->set_map(*new_map);
+  return true;
 }
 
 
@@ -6730,6 +6673,11 @@ MaybeObject* Map::CopyWithPreallocatedFieldDescriptors() {
 }
 
 
+Handle<Map> Map::Copy(Handle<Map> map) {
+  CALL_HEAP_FUNCTION(map->GetIsolate(), map->Copy(), Map);
+}
+
+
 MaybeObject* Map::Copy() {
   DescriptorArray* descriptors = instance_descriptors();
   DescriptorArray* new_descriptors;
@@ -7861,14 +7809,10 @@ void DescriptorArray::Sort() {
 }
 
 
-MaybeObject* AccessorPair::Copy() {
-  Heap* heap = GetHeap();
-  AccessorPair* copy;
-  MaybeObject* maybe_copy = heap->AllocateAccessorPair();
-  if (!maybe_copy->To(&copy)) return maybe_copy;
-
-  copy->set_getter(getter());
-  copy->set_setter(setter());
+Handle<AccessorPair> AccessorPair::Copy(Handle<AccessorPair> pair) {
+  Handle<AccessorPair> copy = pair->GetIsolate()->factory()->NewAccessorPair();
+  copy->set_getter(pair->getter());
+  copy->set_setter(pair->setter());
   return copy;
 }
 
@@ -8905,8 +8849,8 @@ AllocationSiteInfo* AllocationSiteInfo::FindForJSObject(JSObject* object) {
 
 bool AllocationSiteInfo::GetElementsKindPayload(ElementsKind* kind) {
   ASSERT(kind != NULL);
-  if (payload()->IsJSGlobalPropertyCell()) {
-    JSGlobalPropertyCell* cell = JSGlobalPropertyCell::cast(payload());
+  if (payload()->IsCell()) {
+    Cell* cell = Cell::cast(payload());
     Object* cell_contents = cell->value();
     if (cell_contents->IsSmi()) {
       *kind = static_cast<ElementsKind>(
@@ -9181,7 +9125,8 @@ void JSFunction::JSFunctionIterateBody(int object_size, ObjectVisitor* v) {
 
 
 void JSFunction::MarkForLazyRecompilation() {
-  ASSERT(is_compiled() && !IsOptimized());
+  ASSERT(is_compiled() || GetIsolate()->DebuggerHasBreakPoints());
+  ASSERT(!IsOptimized());
   ASSERT(shared()->allows_lazy_compilation() ||
          code()->optimizable());
   set_code_no_write_barrier(
@@ -9191,9 +9136,13 @@ void JSFunction::MarkForLazyRecompilation() {
 
 
 void JSFunction::MarkForParallelRecompilation() {
-  ASSERT(is_compiled() && !IsOptimized());
+  ASSERT(is_compiled() || GetIsolate()->DebuggerHasBreakPoints());
+  ASSERT(!IsOptimized());
   ASSERT(shared()->allows_lazy_compilation() || code()->optimizable());
-  ASSERT(FLAG_parallel_recompilation);
+  if (!FLAG_parallel_recompilation) {
+    JSFunction::MarkForLazyRecompilation();
+    return;
+  }
   if (FLAG_trace_parallel_recompilation) {
     PrintF("  ** Marking ");
     PrintName();
@@ -9206,7 +9155,10 @@ void JSFunction::MarkForParallelRecompilation() {
 
 
 void JSFunction::MarkForInstallingRecompiledCode() {
-  ASSERT(is_compiled() && !IsOptimized());
+  // The debugger could have switched the builtin to lazy compile.
+  // In that case, simply carry on.  It will be dealt with later.
+  ASSERT(IsInRecompileQueue() || GetIsolate()->DebuggerHasBreakPoints());
+  ASSERT(!IsOptimized());
   ASSERT(shared()->allows_lazy_compilation() || code()->optimizable());
   ASSERT(FLAG_parallel_recompilation);
   set_code_no_write_barrier(
@@ -9216,7 +9168,10 @@ void JSFunction::MarkForInstallingRecompiledCode() {
 
 
 void JSFunction::MarkInRecompileQueue() {
-  ASSERT(is_compiled() && !IsOptimized());
+  // We can only arrive here via the parallel-recompilation builtin.  If
+  // break points were set, the code would point to the lazy-compile builtin.
+  ASSERT(!GetIsolate()->DebuggerHasBreakPoints());
+  ASSERT(IsMarkedForParallelRecompilation() && !IsOptimized());
   ASSERT(shared()->allows_lazy_compilation() || code()->optimizable());
   ASSERT(FLAG_parallel_recompilation);
   if (FLAG_trace_parallel_recompilation) {
@@ -9395,7 +9350,6 @@ bool JSFunction::CompileLazy(Handle<JSFunction> function,
   bool result = true;
   if (function->shared()->is_compiled()) {
     function->ReplaceCode(function->shared()->code());
-    function->shared()->set_code_age(0);
   } else {
     ASSERT(function->shared()->allows_lazy_compilation());
     CompilationInfoWithZone info(function);
@@ -9435,6 +9389,11 @@ bool JSFunction::IsInlineable() {
 }
 
 
+void JSObject::OptimizeAsPrototype(Handle<JSObject> object) {
+  CALL_HEAP_FUNCTION_VOID(object->GetIsolate(), object->OptimizeAsPrototype());
+}
+
+
 MaybeObject* JSObject::OptimizeAsPrototype() {
   if (IsGlobalObject()) return this;
 
@@ -9980,13 +9939,13 @@ void ObjectVisitor::VisitCodeEntry(Address entry_address) {
 }
 
 
-void ObjectVisitor::VisitGlobalPropertyCell(RelocInfo* rinfo) {
-  ASSERT(rinfo->rmode() == RelocInfo::GLOBAL_PROPERTY_CELL);
+void ObjectVisitor::VisitCell(RelocInfo* rinfo) {
+  ASSERT(rinfo->rmode() == RelocInfo::CELL);
   Object* cell = rinfo->target_cell();
   Object* old_cell = cell;
   VisitPointer(&cell);
   if (cell != old_cell) {
-    rinfo->set_target_cell(reinterpret_cast<JSGlobalPropertyCell*>(cell));
+    rinfo->set_target_cell(reinterpret_cast<Cell*>(cell));
   }
 }
 
@@ -10012,12 +9971,18 @@ void ObjectVisitor::VisitExternalReference(RelocInfo* rinfo) {
   VisitExternalReferences(p, p + 1);
 }
 
-byte Code::compare_nil_types() {
+byte Code::compare_nil_state() {
   ASSERT(is_compare_nil_ic_stub());
   return CompareNilICStub::ExtractTypesFromExtraICState(
       extended_extra_ic_state());
 }
 
+byte Code::compare_nil_value() {
+  ASSERT(is_compare_nil_ic_stub());
+  return CompareNilICStub::ExtractNilValueFromExtraICState(
+      extended_extra_ic_state());
+}
+
 
 void Code::InvalidateRelocation() {
   set_relocation_info(GetHeap()->empty_byte_array());
@@ -10048,7 +10013,7 @@ void Code::CopyFrom(const CodeDesc& desc) {
   intptr_t delta = instruction_start() - desc.buffer;
   int mode_mask = RelocInfo::kCodeTargetMask |
                   RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT) |
-                  RelocInfo::ModeMask(RelocInfo::GLOBAL_PROPERTY_CELL) |
+                  RelocInfo::ModeMask(RelocInfo::CELL) |
                   RelocInfo::ModeMask(RelocInfo::RUNTIME_ENTRY) |
                   RelocInfo::kApplyMask;
   // Needed to find target_object and runtime_entry on X64
@@ -10059,8 +10024,8 @@ void Code::CopyFrom(const CodeDesc& desc) {
     if (mode == RelocInfo::EMBEDDED_OBJECT) {
       Handle<Object> p = it.rinfo()->target_object_handle(origin);
       it.rinfo()->set_target_object(*p, SKIP_WRITE_BARRIER);
-    } else if (mode == RelocInfo::GLOBAL_PROPERTY_CELL) {
-      Handle<JSGlobalPropertyCell> cell  = it.rinfo()->target_cell_handle();
+    } else if (mode == RelocInfo::CELL) {
+      Handle<Cell> cell  = it.rinfo()->target_cell_handle();
       it.rinfo()->set_target_cell(*cell, SKIP_WRITE_BARRIER);
     } else if (RelocInfo::IsCodeTarget(mode)) {
       // rewrite code handles in inline cache targets to direct
@@ -10142,29 +10107,45 @@ SafepointEntry Code::GetSafepointEntry(Address pc) {
 }
 
 
-Map* Code::FindFirstMap() {
+Object* Code::FindNthObject(int n, Map* match_map) {
   ASSERT(is_inline_cache_stub());
   DisallowHeapAllocation no_allocation;
   int mask = RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT);
   for (RelocIterator it(this, mask); !it.done(); it.next()) {
     RelocInfo* info = it.rinfo();
     Object* object = info->target_object();
-    if (object->IsMap()) return Map::cast(object);
+    if (object->IsHeapObject()) {
+      if (HeapObject::cast(object)->map() == match_map) {
+        if (--n == 0) return object;
+      }
+    }
   }
   return NULL;
 }
 
 
-void Code::ReplaceFirstMap(Map* replace_with) {
+Map* Code::FindFirstMap() {
+  Object* result = FindNthObject(1, GetHeap()->meta_map());
+  return (result != NULL) ? Map::cast(result) : NULL;
+}
+
+
+void Code::ReplaceNthObject(int n,
+                            Map* match_map,
+                            Object* replace_with) {
   ASSERT(is_inline_cache_stub());
   DisallowHeapAllocation no_allocation;
   int mask = RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT);
   for (RelocIterator it(this, mask); !it.done(); it.next()) {
     RelocInfo* info = it.rinfo();
     Object* object = info->target_object();
-    if (object->IsMap()) {
-      info->set_target_object(replace_with);
-      return;
+    if (object->IsHeapObject()) {
+      if (HeapObject::cast(object)->map() == match_map) {
+        if (--n == 0) {
+          info->set_target_object(replace_with);
+          return;
+        }
+      }
     }
   }
   UNREACHABLE();
@@ -10183,6 +10164,11 @@ void Code::FindAllMaps(MapHandleList* maps) {
 }
 
 
+void Code::ReplaceFirstMap(Map* replace_with) {
+  ReplaceNthObject(1, GetHeap()->meta_map(), replace_with);
+}
+
+
 Code* Code::FindFirstCode() {
   ASSERT(is_inline_cache_stub());
   DisallowHeapAllocation no_allocation;
@@ -10224,6 +10210,21 @@ Name* Code::FindFirstName() {
 }
 
 
+void Code::ReplaceNthCell(int n, Cell* replace_with) {
+  ASSERT(is_inline_cache_stub());
+  DisallowHeapAllocation no_allocation;
+  int mask = RelocInfo::ModeMask(RelocInfo::CELL);
+  for (RelocIterator it(this, mask); !it.done(); it.next()) {
+    RelocInfo* info = it.rinfo();
+    if (--n == 0) {
+      info->set_target_cell(replace_with);
+      return;
+    }
+  }
+  UNREACHABLE();
+}
+
+
 void Code::ClearInlineCaches() {
   int mask = RelocInfo::ModeMask(RelocInfo::CODE_TARGET) |
              RelocInfo::ModeMask(RelocInfo::CONSTRUCT_CALL) |
@@ -10246,7 +10247,7 @@ void Code::ClearTypeFeedbackCells(Heap* heap) {
     TypeFeedbackCells* type_feedback_cells =
         TypeFeedbackInfo::cast(raw_info)->type_feedback_cells();
     for (int i = 0; i < type_feedback_cells->CellCount(); i++) {
-      JSGlobalPropertyCell* cell = type_feedback_cells->Cell(i);
+      Cell* cell = type_feedback_cells->GetCell(i);
       cell->set_value(TypeFeedbackCells::RawUninitializedSentinel(heap));
     }
   }
@@ -10299,6 +10300,18 @@ byte* Code::FindCodeAgeSequence() {
 }
 
 
+int Code::GetAge() {
+  byte* sequence = FindCodeAgeSequence();
+  if (sequence == NULL) {
+    return Code::kNoAge;
+  }
+  Age age;
+  MarkingParity parity;
+  GetCodeAgeAndParity(sequence, &age, &parity);
+  return age;
+}
+
+
 void Code::GetCodeAgeAndParity(Code* code, Age* age,
                                MarkingParity* parity) {
   Isolate* isolate = Isolate::Current();
@@ -10366,24 +10379,26 @@ void Code::PrintDeoptLocation(int bailout_id) {
 }
 
 
+bool Code::CanDeoptAt(Address pc) {
+  DeoptimizationInputData* deopt_data =
+      DeoptimizationInputData::cast(deoptimization_data());
+  Address code_start_address = instruction_start();
+  for (int i = 0; i < deopt_data->DeoptCount(); i++) {
+    if (deopt_data->Pc(i)->value() == -1) continue;
+    Address address = code_start_address + deopt_data->Pc(i)->value();
+    if (address == pc) return true;
+  }
+  return false;
+}
+
+
 // Identify kind of code.
 const char* Code::Kind2String(Kind kind) {
   switch (kind) {
-    case FUNCTION: return "FUNCTION";
-    case OPTIMIZED_FUNCTION: return "OPTIMIZED_FUNCTION";
-    case STUB: return "STUB";
-    case BUILTIN: return "BUILTIN";
-    case LOAD_IC: return "LOAD_IC";
-    case KEYED_LOAD_IC: return "KEYED_LOAD_IC";
-    case STORE_IC: return "STORE_IC";
-    case KEYED_STORE_IC: return "KEYED_STORE_IC";
-    case CALL_IC: return "CALL_IC";
-    case KEYED_CALL_IC: return "KEYED_CALL_IC";
-    case UNARY_OP_IC: return "UNARY_OP_IC";
-    case BINARY_OP_IC: return "BINARY_OP_IC";
-    case COMPARE_IC: return "COMPARE_IC";
-    case COMPARE_NIL_IC: return "COMPARE_NIL_IC";
-    case TO_BOOLEAN_IC: return "TO_BOOLEAN_IC";
+#define CASE(name) case name: return #name;
+    CODE_KIND_LIST(CASE)
+#undef CASE
+    case NUMBER_OF_KINDS: break;
   }
   UNREACHABLE();
   return NULL;
@@ -10478,9 +10493,6 @@ void DeoptimizationInputData::DeoptimizationInputDataPrint(FILE* out) {
           break;
         }
 
-        case Translation::DUPLICATE:
-          break;
-
         case Translation::REGISTER: {
           int reg_code = iterator.Next();
             PrintF(out, "{input=%s}", converter.NameOfCPURegister(reg_code));
@@ -10538,11 +10550,8 @@ void DeoptimizationInputData::DeoptimizationInputDataPrint(FILE* out) {
         }
 
         case Translation::ARGUMENTS_OBJECT: {
-          bool args_known = iterator.Next();
-          int args_index = iterator.Next();
           int args_length = iterator.Next();
-          PrintF(out, "{index=%d, length=%d, known=%d}",
-                 args_index, args_length, args_known);
+          PrintF(out, "{length=%d}", args_length);
           break;
         }
       }
@@ -11010,63 +11019,61 @@ MaybeObject* JSArray::SetElementsLength(Object* len) {
 }
 
 
-Map* Map::GetPrototypeTransition(Object* prototype) {
-  FixedArray* cache = GetPrototypeTransitions();
-  int number_of_transitions = NumberOfProtoTransitions();
+Handle<Map> Map::GetPrototypeTransition(Handle<Map> map,
+                                        Handle<Object> prototype) {
+  FixedArray* cache = map->GetPrototypeTransitions();
+  int number_of_transitions = map->NumberOfProtoTransitions();
   const int proto_offset =
       kProtoTransitionHeaderSize + kProtoTransitionPrototypeOffset;
   const int map_offset = kProtoTransitionHeaderSize + kProtoTransitionMapOffset;
   const int step = kProtoTransitionElementsPerEntry;
   for (int i = 0; i < number_of_transitions; i++) {
-    if (cache->get(proto_offset + i * step) == prototype) {
-      Object* map = cache->get(map_offset + i * step);
-      return Map::cast(map);
+    if (cache->get(proto_offset + i * step) == *prototype) {
+      Object* result = cache->get(map_offset + i * step);
+      return Handle<Map>(Map::cast(result));
     }
   }
-  return NULL;
+  return Handle<Map>();
 }
 
 
-MaybeObject* Map::PutPrototypeTransition(Object* prototype, Map* map) {
-  ASSERT(map->IsMap());
-  ASSERT(HeapObject::cast(prototype)->map()->IsMap());
+Handle<Map> Map::PutPrototypeTransition(Handle<Map> map,
+                                        Handle<Object> prototype,
+                                        Handle<Map> target_map) {
+  ASSERT(target_map->IsMap());
+  ASSERT(HeapObject::cast(*prototype)->map()->IsMap());
   // Don't cache prototype transition if this map is shared.
-  if (is_shared() || !FLAG_cache_prototype_transitions) return this;
-
-  FixedArray* cache = GetPrototypeTransitions();
+  if (map->is_shared() || !FLAG_cache_prototype_transitions) return map;
 
   const int step = kProtoTransitionElementsPerEntry;
   const int header = kProtoTransitionHeaderSize;
 
+  Handle<FixedArray> cache(map->GetPrototypeTransitions());
   int capacity = (cache->length() - header) / step;
-
-  int transitions = NumberOfProtoTransitions() + 1;
+  int transitions = map->NumberOfProtoTransitions() + 1;
 
   if (transitions > capacity) {
-    if (capacity > kMaxCachedPrototypeTransitions) return this;
+    if (capacity > kMaxCachedPrototypeTransitions) return map;
 
-    FixedArray* new_cache;
     // Grow array by factor 2 over and above what we need.
-    { MaybeObject* maybe_cache =
-          GetHeap()->AllocateFixedArray(transitions * 2 * step + header);
-      if (!maybe_cache->To(&new_cache)) return maybe_cache;
-    }
+    Factory* factory = map->GetIsolate()->factory();
+    cache = factory->CopySizeFixedArray(cache, transitions * 2 * step + header);
 
-    for (int i = 0; i < capacity * step; i++) {
-      new_cache->set(i + header, cache->get(i + header));
-    }
-    cache = new_cache;
-    MaybeObject* set_result = SetPrototypeTransitions(cache);
-    if (set_result->IsFailure()) return set_result;
+    CALL_AND_RETRY_OR_DIE(map->GetIsolate(),
+                          map->SetPrototypeTransitions(*cache),
+                          break,
+                          return Handle<Map>());
   }
 
-  int last = transitions - 1;
+  // Reload number of transitions as GC might shrink them.
+  int last = map->NumberOfProtoTransitions();
+  int entry = header + last * step;
 
-  cache->set(header + last * step + kProtoTransitionPrototypeOffset, prototype);
-  cache->set(header + last * step + kProtoTransitionMapOffset, map);
-  SetNumberOfProtoTransitions(transitions);
+  cache->set(entry + kProtoTransitionPrototypeOffset, *prototype);
+  cache->set(entry + kProtoTransitionMapOffset, *target_map);
+  map->SetNumberOfProtoTransitions(transitions);
 
-  return cache;
+  return map;
 }
 
 
@@ -11091,6 +11098,24 @@ void Map::ZapPrototypeTransitions() {
 }
 
 
+void Map::AddDependentCompilationInfo(DependentCode::DependencyGroup group,
+                                      CompilationInfo* info) {
+  Handle<DependentCode> dep(dependent_code());
+  Handle<DependentCode> codes =
+      DependentCode::Insert(dep, group, info->object_wrapper());
+  if (*codes != dependent_code()) set_dependent_code(*codes);
+  info->dependencies(group)->Add(Handle<HeapObject>(this), info->zone());
+}
+
+
+void Map::AddDependentCode(DependentCode::DependencyGroup group,
+                           Handle<Code> code) {
+  Handle<DependentCode> codes = DependentCode::Insert(
+      Handle<DependentCode>(dependent_code()), group, code);
+  if (*codes != dependent_code()) set_dependent_code(*codes);
+}
+
+
 DependentCode::GroupStartIndexes::GroupStartIndexes(DependentCode* entries) {
   Recompute(entries);
 }
@@ -11105,15 +11130,25 @@ void DependentCode::GroupStartIndexes::Recompute(DependentCode* entries) {
 }
 
 
+DependentCode* DependentCode::ForObject(Handle<HeapObject> object,
+                                        DependencyGroup group) {
+  AllowDeferredHandleDereference dependencies_are_safe;
+  if (group == DependentCode::kPropertyCellChangedGroup) {
+    return Handle<PropertyCell>::cast(object)->dependent_code();
+  }
+  return Handle<Map>::cast(object)->dependent_code();
+}
+
+
 Handle<DependentCode> DependentCode::Insert(Handle<DependentCode> entries,
                                             DependencyGroup group,
-                                            Handle<Code> value) {
+                                            Handle<Object> object) {
   GroupStartIndexes starts(*entries);
   int start = starts.at(group);
   int end = starts.at(group + 1);
   int number_of_entries = starts.number_of_entries();
-  if (start < end && entries->code_at(end - 1) == *value) {
-    // Do not append the code if it is already in the array.
+  if (start < end && entries->object_at(end - 1) == *object) {
+    // Do not append the compilation info if it is already in the array.
     // It is sufficient to just check only the last element because
     // we process embedded maps of an optimized code in one batch.
     return entries;
@@ -11130,7 +11165,7 @@ Handle<DependentCode> DependentCode::Insert(Handle<DependentCode> entries,
     end = starts.at(group + 1);
     number_of_entries = starts.number_of_entries();
     for (int i = 0; i < number_of_entries; i++) {
-      entries->clear_code_at(i);
+      entries->clear_at(i);
     }
     // If the old fixed array was empty, we need to reset counters of the
     // new array.
@@ -11142,17 +11177,79 @@ Handle<DependentCode> DependentCode::Insert(Handle<DependentCode> entries,
     entries = new_entries;
   }
   entries->ExtendGroup(group);
-  entries->set_code_at(end, *value);
+  entries->set_object_at(end, *object);
   entries->set_number_of_entries(group, end + 1 - start);
   return entries;
 }
 
 
+void DependentCode::UpdateToFinishedCode(DependencyGroup group,
+                                         CompilationInfo* info,
+                                         Code* code) {
+  DisallowHeapAllocation no_gc;
+  AllowDeferredHandleDereference get_object_wrapper;
+  Foreign* info_wrapper = *info->object_wrapper();
+  GroupStartIndexes starts(this);
+  int start = starts.at(group);
+  int end = starts.at(group + 1);
+  for (int i = start; i < end; i++) {
+    if (object_at(i) == info_wrapper) {
+      set_object_at(i, code);
+      break;
+    }
+  }
+
+#ifdef DEBUG
+  for (int i = start; i < end; i++) {
+    ASSERT(is_code_at(i) || compilation_info_at(i) != info);
+  }
+#endif
+}
+
+
+void DependentCode::RemoveCompilationInfo(DependentCode::DependencyGroup group,
+                                          CompilationInfo* info) {
+  DisallowHeapAllocation no_allocation;
+  AllowDeferredHandleDereference get_object_wrapper;
+  Foreign* info_wrapper = *info->object_wrapper();
+  GroupStartIndexes starts(this);
+  int start = starts.at(group);
+  int end = starts.at(group + 1);
+  // Find compilation info wrapper.
+  int info_pos = -1;
+  for (int i = start; i < end; i++) {
+    if (object_at(i) == info_wrapper) {
+      info_pos = i;
+      break;
+    }
+  }
+  if (info_pos == -1) return;  // Not found.
+  int gap = info_pos;
+  // Use the last of each group to fill the gap in the previous group.
+  for (int i = group; i < kGroupCount; i++) {
+    int last_of_group = starts.at(i + 1) - 1;
+    ASSERT(last_of_group >= gap);
+    if (last_of_group == gap) continue;
+    copy(last_of_group, gap);
+    gap = last_of_group;
+  }
+  ASSERT(gap == starts.number_of_entries() - 1);
+  clear_at(gap);  // Clear last gap.
+  set_number_of_entries(group, end - start - 1);
+
+#ifdef DEBUG
+  for (int i = start; i < end - 1; i++) {
+    ASSERT(is_code_at(i) || compilation_info_at(i) != info);
+  }
+#endif
+}
+
+
 bool DependentCode::Contains(DependencyGroup group, Code* code) {
   GroupStartIndexes starts(this);
-  int number_of_entries = starts.at(kGroupCount);
+  int number_of_entries = starts.number_of_entries();
   for (int i = 0; i < number_of_entries; i++) {
-    if (code_at(i) == code) return true;
+    if (object_at(i) == code) return true;
   }
   return false;
 }
@@ -11173,20 +11270,25 @@ void DependentCode::DeoptimizeDependentCodeGroup(
   DependentCode::GroupStartIndexes starts(this);
   int start = starts.at(group);
   int end = starts.at(group + 1);
-  int number_of_entries = starts.at(DependentCode::kGroupCount);
+  int code_entries = starts.number_of_entries();
   if (start == end) return;
   for (int i = start; i < end; i++) {
-    Code* code = code_at(i);
-    code->set_marked_for_deoptimization(true);
+    if (is_code_at(i)) {
+      Code* code = code_at(i);
+      code->set_marked_for_deoptimization(true);
+    } else {
+      CompilationInfo* info = compilation_info_at(i);
+      info->AbortDueToDependencyChange();
+    }
   }
   // Compact the array by moving all subsequent groups to fill in the new holes.
-  for (int src = end, dst = start; src < number_of_entries; src++, dst++) {
-    set_code_at(dst, code_at(src));
+  for (int src = end, dst = start; src < code_entries; src++, dst++) {
+    copy(src, dst);
   }
   // Now the holes are at the end of the array, zap them for heap-verifier.
   int removed = end - start;
-  for (int i = number_of_entries - removed; i < number_of_entries; i++) {
-    clear_code_at(i);
+  for (int i = code_entries - removed; i < code_entries; i++) {
+    clear_at(i);
   }
   set_number_of_entries(group, 0);
   DeoptimizeDependentCodeFilter filter;
@@ -11194,13 +11296,14 @@ void DependentCode::DeoptimizeDependentCodeGroup(
 }
 
 
-MaybeObject* JSReceiver::SetPrototype(Object* value,
+Handle<Object> JSObject::SetPrototype(Handle<JSObject> object,
+                                      Handle<Object> value,
                                       bool skip_hidden_prototypes) {
 #ifdef DEBUG
-  int size = Size();
+  int size = object->Size();
 #endif
 
-  Isolate* isolate = GetIsolate();
+  Isolate* isolate = object->GetIsolate();
   Heap* heap = isolate->heap();
   // Silently ignore the change if value is not a JSObject or null.
   // SpiderMonkey behaves this way.
@@ -11214,70 +11317,64 @@ MaybeObject* JSReceiver::SetPrototype(Object* value,
   // Implementation specific extensions that modify [[Class]], [[Prototype]]
   // or [[Extensible]] must not violate the invariants defined in the preceding
   // paragraph.
-  if (!this->map()->is_extensible()) {
-    HandleScope scope(isolate);
-    Handle<Object> handle(this, isolate);
-    return isolate->Throw(
-        *isolate->factory()->NewTypeError("non_extensible_proto",
-                                          HandleVector<Object>(&handle, 1)));
+  if (!object->map()->is_extensible()) {
+    Handle<Object> args[] = { object };
+    Handle<Object> error = isolate->factory()->NewTypeError(
+        "non_extensible_proto", HandleVector(args, ARRAY_SIZE(args)));
+    isolate->Throw(*error);
+    return Handle<Object>();
   }
 
   // Before we can set the prototype we need to be sure
   // prototype cycles are prevented.
   // It is sufficient to validate that the receiver is not in the new prototype
   // chain.
-  for (Object* pt = value;
+  for (Object* pt = *value;
        pt != heap->null_value();
        pt = pt->GetPrototype(isolate)) {
-    if (JSReceiver::cast(pt) == this) {
+    if (JSReceiver::cast(pt) == *object) {
       // Cycle detected.
-      HandleScope scope(isolate);
-      return isolate->Throw(
-          *isolate->factory()->NewError("cyclic_proto",
-                                        HandleVector<Object>(NULL, 0)));
+      Handle<Object> error = isolate->factory()->NewError(
+          "cyclic_proto", HandleVector<Object>(NULL, 0));
+      isolate->Throw(*error);
+      return Handle<Object>();
     }
   }
 
-  JSReceiver* real_receiver = this;
+  Handle<JSObject> real_receiver = object;
 
   if (skip_hidden_prototypes) {
     // Find the first object in the chain whose prototype object is not
     // hidden and set the new prototype on that object.
     Object* current_proto = real_receiver->GetPrototype();
     while (current_proto->IsJSObject() &&
-          JSReceiver::cast(current_proto)->map()->is_hidden_prototype()) {
-      real_receiver = JSReceiver::cast(current_proto);
+          JSObject::cast(current_proto)->map()->is_hidden_prototype()) {
+      real_receiver = handle(JSObject::cast(current_proto), isolate);
       current_proto = current_proto->GetPrototype(isolate);
     }
   }
 
   // Set the new prototype of the object.
-  Map* map = real_receiver->map();
+  Handle<Map> map(real_receiver->map());
 
   // Nothing to do if prototype is already set.
-  if (map->prototype() == value) return value;
+  if (map->prototype() == *value) return value;
 
   if (value->IsJSObject()) {
-    MaybeObject* ok = JSObject::cast(value)->OptimizeAsPrototype();
-    if (ok->IsFailure()) return ok;
+    JSObject::OptimizeAsPrototype(Handle<JSObject>::cast(value));
   }
 
-  Map* new_map = map->GetPrototypeTransition(value);
-  if (new_map == NULL) {
-    MaybeObject* maybe_new_map = map->Copy();
-    if (!maybe_new_map->To(&new_map)) return maybe_new_map;
-
-    MaybeObject* maybe_new_cache =
-        map->PutPrototypeTransition(value, new_map);
-    if (maybe_new_cache->IsFailure()) return maybe_new_cache;
-
-    new_map->set_prototype(value);
+  Handle<Map> new_map = Map::GetPrototypeTransition(map, value);
+  if (new_map.is_null()) {
+    new_map = Map::Copy(map);
+    Map::PutPrototypeTransition(map, value, new_map);
+    new_map->set_prototype(*value);
   }
-  ASSERT(new_map->prototype() == value);
-  real_receiver->set_map(new_map);
+  ASSERT(new_map->prototype() == *value);
+  real_receiver->set_map(*new_map);
 
   heap->ClearInstanceofCache();
-  ASSERT(size == Size());
+  ASSERT(size == object->Size());
   return value;
 }
 
@@ -11363,12 +11460,8 @@ MaybeObject* JSObject::SetElementWithInterceptor(uint32_t index,
     LOG(isolate,
         ApiIndexedPropertyAccess("interceptor-indexed-set", this, index));
     PropertyCallbackArguments args(isolate, interceptor->data(), this, this);
-    v8::Handle<v8::Value> result;
-    {
-      // Leaving JavaScript.
-      VMState<EXTERNAL> state(isolate);
-      result = args.Call(setter, index, v8::Utils::ToLocal(value_handle));
-    }
+    v8::Handle<v8::Value> result =
+        args.Call(setter, index, v8::Utils::ToLocal(value_handle));
     RETURN_IF_SCHEDULED_EXCEPTION(isolate);
     if (!result.IsEmpty()) return *value_handle;
   }
@@ -11406,12 +11499,7 @@ MaybeObject* JSObject::GetElementWithCallback(Object* receiver,
     LOG(isolate, ApiNamedPropertyAccess("load", *self, *key));
     PropertyCallbackArguments
         args(isolate, data->data(), *self, *holder_handle);
-    v8::Handle<v8::Value> result;
-    {
-      // Leaving JavaScript.
-      VMState<EXTERNAL> state(isolate);
-      result = args.Call(call_fun, v8::Utils::ToLocal(key));
-    }
+    v8::Handle<v8::Value> result = args.Call(call_fun, v8::Utils::ToLocal(key));
     RETURN_IF_SCHEDULED_EXCEPTION(isolate);
     if (result.IsEmpty()) return isolate->heap()->undefined_value();
     Handle<Object> result_internal = v8::Utils::OpenHandle(*result);
@@ -11473,13 +11561,9 @@ MaybeObject* JSObject::SetElementWithCallback(Object* structure,
     LOG(isolate, ApiNamedPropertyAccess("store", *self, *key));
     PropertyCallbackArguments
         args(isolate, data->data(), *self, *holder_handle);
-    {
-      // Leaving JavaScript.
-      VMState<EXTERNAL> state(isolate);
-      args.Call(call_fun,
-                v8::Utils::ToLocal(key),
-                v8::Utils::ToLocal(value_handle));
-    }
+    args.Call(call_fun,
+              v8::Utils::ToLocal(key),
+              v8::Utils::ToLocal(value_handle));
     RETURN_IF_SCHEDULED_EXCEPTION(isolate);
     return *value_handle;
   }
@@ -11958,7 +12042,7 @@ Handle<Object> JSObject::SetElement(Handle<JSObject> object,
                                     StrictModeFlag strict_mode,
                                     SetPropertyMode set_mode) {
   if (object->HasExternalArrayElements()) {
-    if (!value->IsSmi() && !value->IsHeapNumber() && !value->IsUndefined()) {
+    if (!value->IsNumber() && !value->IsUndefined()) {
       bool has_exception;
       Handle<Object> number = Execution::ToNumber(value, &has_exception);
       if (has_exception) return Handle<Object>();
@@ -12236,8 +12320,8 @@ MaybeObject* JSObject::UpdateAllocationSiteInfo(ElementsKind to_kind) {
         return payload->TransitionElementsKind(to_kind);
       }
     }
-  } else if (info->payload()->IsJSGlobalPropertyCell()) {
-    JSGlobalPropertyCell* cell = JSGlobalPropertyCell::cast(info->payload());
+  } else if (info->payload()->IsCell()) {
+    Cell* cell = Cell::cast(info->payload());
     Object* cell_contents = cell->value();
     if (cell_contents->IsSmi()) {
       ElementsKind kind = static_cast<ElementsKind>(
@@ -12379,12 +12463,7 @@ MaybeObject* JSObject::GetElementWithInterceptor(Object* receiver,
         ApiIndexedPropertyAccess("interceptor-indexed-get", this, index));
     PropertyCallbackArguments
         args(isolate, interceptor->data(), receiver, this);
-    v8::Handle<v8::Value> result;
-    {
-      // Leaving JavaScript.
-      VMState<EXTERNAL> state(isolate);
-      result = args.Call(getter, index);
-    }
+    v8::Handle<v8::Value> result = args.Call(getter, index);
     RETURN_IF_SCHEDULED_EXCEPTION(isolate);
     if (!result.IsEmpty()) {
       Handle<Object> result_internal = v8::Utils::OpenHandle(*result);
@@ -12689,12 +12768,8 @@ MaybeObject* JSObject::GetPropertyWithInterceptor(
         ApiNamedPropertyAccess("interceptor-named-get", *holder_handle, name));
     PropertyCallbackArguments
         args(isolate, interceptor->data(), receiver, this);
-    v8::Handle<v8::Value> result;
-    {
-      // Leaving JavaScript.
-      VMState<EXTERNAL> state(isolate);
-      result = args.Call(getter, v8::Utils::ToLocal(name_handle));
-    }
+    v8::Handle<v8::Value> result =
+        args.Call(getter, v8::Utils::ToLocal(name_handle));
     RETURN_IF_SCHEDULED_EXCEPTION(isolate);
     if (!result.IsEmpty()) {
       *attributes = NONE;
@@ -14159,20 +14234,20 @@ MaybeObject* ExternalDoubleArray::SetValue(uint32_t index, Object* value) {
 }
 
 
-JSGlobalPropertyCell* GlobalObject::GetPropertyCell(LookupResult* result) {
+PropertyCell* GlobalObject::GetPropertyCell(LookupResult* result) {
   ASSERT(!HasFastProperties());
   Object* value = property_dictionary()->ValueAt(result->GetDictionaryEntry());
-  return JSGlobalPropertyCell::cast(value);
+  return PropertyCell::cast(value);
 }
 
 
-Handle<JSGlobalPropertyCell> GlobalObject::EnsurePropertyCell(
+Handle<PropertyCell> GlobalObject::EnsurePropertyCell(
     Handle<GlobalObject> global,
     Handle<Name> name) {
   Isolate* isolate = global->GetIsolate();
   CALL_HEAP_FUNCTION(isolate,
                      global->EnsurePropertyCell(*name),
-                     JSGlobalPropertyCell);
+                     PropertyCell);
 }
 
 
@@ -14183,7 +14258,7 @@ MaybeObject* GlobalObject::EnsurePropertyCell(Name* name) {
     Heap* heap = GetHeap();
     Object* cell;
     { MaybeObject* maybe_cell =
-          heap->AllocateJSGlobalPropertyCell(heap->the_hole_value());
+          heap->AllocatePropertyCell(heap->the_hole_value());
       if (!maybe_cell->ToObject(&cell)) return maybe_cell;
     }
     PropertyDetails details(NONE, NORMAL, 0);
@@ -14197,7 +14272,7 @@ MaybeObject* GlobalObject::EnsurePropertyCell(Name* name) {
     return cell;
   } else {
     Object* value = property_dictionary()->ValueAt(entry);
-    ASSERT(value->IsJSGlobalPropertyCell());
+    ASSERT(value->IsPropertyCell());
     return value;
   }
 }
@@ -14980,8 +15055,8 @@ Object* Dictionary<Shape, Key>::SlowReverseLookup(Object* value) {
     Object* k =  HashTable<Shape, Key>::KeyAt(i);
     if (Dictionary<Shape, Key>::IsKey(k)) {
       Object* e = ValueAt(i);
-      if (e->IsJSGlobalPropertyCell()) {
-        e = JSGlobalPropertyCell::cast(e)->value();
+      if (e->IsPropertyCell()) {
+        e = PropertyCell::cast(e)->value();
       }
       if (e == value) return k;
     }
@@ -15703,11 +15778,51 @@ void JSArrayBuffer::Neuter() {
 }
 
 
-void JSTypedArray::Neuter() {
+void JSArrayBufferView::NeuterView() {
   set_byte_offset(Smi::FromInt(0));
   set_byte_length(Smi::FromInt(0));
+}
+
+
+void JSDataView::Neuter() {
+  NeuterView();
+}
+
+
+void JSTypedArray::Neuter() {
+  NeuterView();
   set_length(Smi::FromInt(0));
   set_elements(GetHeap()->EmptyExternalArrayForMap(map()));
 }
 
+
+Type* PropertyCell::type() {
+  return static_cast<Type*>(type_raw());
+}
+
+
+void PropertyCell::set_type(Type* type, WriteBarrierMode ignored) {
+  set_type_raw(type, ignored);
+}
+
+
+void PropertyCell::AddDependentCompilationInfo(CompilationInfo* info) {
+  Handle<DependentCode> dep(dependent_code());
+  Handle<DependentCode> codes =
+      DependentCode::Insert(dep, DependentCode::kPropertyCellChangedGroup,
+                            info->object_wrapper());
+  if (*codes != dependent_code()) set_dependent_code(*codes);
+  info->dependencies(DependentCode::kPropertyCellChangedGroup)->Add(
+      Handle<HeapObject>(this), info->zone());
+}
+
+
+void PropertyCell::AddDependentCode(Handle<Code> code) {
+  Handle<DependentCode> codes = DependentCode::Insert(
+      Handle<DependentCode>(dependent_code()),
+      DependentCode::kPropertyCellChangedGroup, code);
+  if (*codes != dependent_code()) set_dependent_code(*codes);
+}
+
+
 } }  // namespace v8::internal
index 1ee31b6..416ed7f 100644 (file)
@@ -32,6 +32,7 @@
 #include "assert-scope.h"
 #include "builtins.h"
 #include "elements-kind.h"
+#include "flags.h"
 #include "list.h"
 #include "property-details.h"
 #include "smart-pointers.h"
@@ -58,7 +59,9 @@
 //         - JSObject
 //           - JSArray
 //           - JSArrayBuffer
-//           - JSTypedArray
+//           - JSArrayBufferView
+//              - JSTypedArray
+//              - JSDataView
 //           - JSSet
 //           - JSMap
 //           - JSWeakMap
 //               - ExternalTwoByteInternalizedString
 //         - Symbol
 //       - HeapNumber
+//       - Cell
+//         - PropertyCell
 //       - Code
 //       - Map
 //       - Oddball
@@ -348,7 +353,8 @@ const int kStubMinorKeyBits = kBitsPerInt - kSmiTagSize - kStubMajorKeyBits;
   V(MAP_TYPE)                                                                  \
   V(CODE_TYPE)                                                                 \
   V(ODDBALL_TYPE)                                                              \
-  V(JS_GLOBAL_PROPERTY_CELL_TYPE)                                              \
+  V(CELL_TYPE)                                                                 \
+  V(PROPERTY_CELL_TYPE)                                                        \
   V(BOX_TYPE)                                                                  \
                                                                                \
   V(HEAP_NUMBER_TYPE)                                                          \
@@ -405,6 +411,7 @@ const int kStubMinorKeyBits = kBitsPerInt - kSmiTagSize - kStubMajorKeyBits;
   V(JS_ARRAY_TYPE)                                                             \
   V(JS_ARRAY_BUFFER_TYPE)                                                      \
   V(JS_TYPED_ARRAY_TYPE)                                                       \
+  V(JS_DATA_VIEW_TYPE)                                                         \
   V(JS_PROXY_TYPE)                                                             \
   V(JS_WEAK_MAP_TYPE)                                                          \
   V(JS_REGEXP_TYPE)                                                            \
@@ -569,8 +576,7 @@ const uint32_t kStringTag = 0x0;
 const uint32_t kNotStringTag = 0x80;
 
 // Bit 6 indicates that the object is an internalized string (if set) or not.
-// There are not enough types that the non-string types (with bit 7 set) can
-// have bit 6 set too.
+// Bit 7 has to be clear as well.
 const uint32_t kIsInternalizedMask = 0x40;
 const uint32_t kNotInternalizedTag = 0x0;
 const uint32_t kInternalizedTag = 0x40;
@@ -669,7 +675,8 @@ enum InstanceType {
   MAP_TYPE,
   CODE_TYPE,
   ODDBALL_TYPE,
-  JS_GLOBAL_PROPERTY_CELL_TYPE,
+  CELL_TYPE,
+  PROPERTY_CELL_TYPE,
   BOX_TYPE,
 
   // "Data", objects that cannot contain non-map-word pointers to heap
@@ -740,6 +747,7 @@ enum InstanceType {
   JS_ARRAY_TYPE,
   JS_ARRAY_BUFFER_TYPE,
   JS_TYPED_ARRAY_TYPE,
+  JS_DATA_VIEW_TYPE,
   JS_SET_TYPE,
   JS_MAP_TYPE,
   JS_WEAK_MAP_TYPE,
@@ -841,6 +849,7 @@ class Failure;
 class FixedArrayBase;
 class ObjectVisitor;
 class StringStream;
+class Type;
 
 struct ValueInfo : public Malloced {
   ValueInfo() : type(FIRST_TYPE), ptr(NULL), str(NULL), number(0) { }
@@ -988,7 +997,9 @@ class MaybeObject BASE_EMBEDDED {
   V(Boolean)                                   \
   V(JSArray)                                   \
   V(JSArrayBuffer)                             \
+  V(JSArrayBufferView)                         \
   V(JSTypedArray)                              \
+  V(JSDataView)                                \
   V(JSProxy)                                   \
   V(JSFunctionProxy)                           \
   V(JSSet)                                     \
@@ -1011,7 +1022,8 @@ class MaybeObject BASE_EMBEDDED {
   V(JSGlobalProxy)                             \
   V(UndetectableObject)                        \
   V(AccessCheckNeeded)                         \
-  V(JSGlobalPropertyCell)                      \
+  V(Cell)                                      \
+  V(PropertyCell)                              \
   V(ObjectHashTable)                           \
 
 
@@ -1692,10 +1704,6 @@ class JSReceiver: public HeapObject {
   // Return the constructor function (may be Heap::null_value()).
   inline Object* GetConstructor();
 
-  // Set the object's prototype (only JSReceiver and null are allowed).
-  MUST_USE_RESULT MaybeObject* SetPrototype(Object* value,
-                                            bool skip_hidden_prototypes);
-
   // Retrieves a permanent object identity hash code. The undefined value might
   // be returned in case no hash was created yet and OMIT_CREATION was used.
   inline MUST_USE_RESULT MaybeObject* GetIdentityHash(CreationFlag flag);
@@ -1897,6 +1905,7 @@ class JSObject: public JSReceiver {
   MUST_USE_RESULT MaybeObject* DeleteNormalizedProperty(Name* name,
                                                         DeleteMode mode);
 
+  static void OptimizeAsPrototype(Handle<JSObject> object);
   MUST_USE_RESULT MaybeObject* OptimizeAsPrototype();
 
   // Retrieve interceptors.
@@ -1924,19 +1933,7 @@ class JSObject: public JSReceiver {
                              Handle<Object> getter,
                              Handle<Object> setter,
                              PropertyAttributes attributes);
-  // Can cause GC.
-  MUST_USE_RESULT MaybeObject* DefineAccessor(Name* name,
-                                              Object* getter,
-                                              Object* setter,
-                                              PropertyAttributes attributes);
-  // Try to define a single accessor paying attention to map transitions.
-  // Returns a JavaScript null if this was not possible and we have to use the
-  // slow case. Note that we can fail due to allocations, too.
-  MUST_USE_RESULT MaybeObject* DefineFastAccessor(
-      Name* name,
-      AccessorComponent component,
-      Object* accessor,
-      PropertyAttributes attributes);
+
   Object* LookupAccessor(Name* name, AccessorComponent component);
 
   MUST_USE_RESULT MaybeObject* DefineAccessor(AccessorInfo* info);
@@ -1984,7 +1981,7 @@ class JSObject: public JSReceiver {
                                           Handle<Object> value);
   // Returns a failure if a GC is required.
   MUST_USE_RESULT MaybeObject* SetHiddenProperty(Name* key, Object* value);
-  // Gets the value of a hidden property with the given key. Returns undefined
+  // Gets the value of a hidden property with the given key. Returns the hole
   // if the property doesn't exist (or if called on a detached proxy),
   // otherwise returns the value set for the key.
   Object* GetHiddenProperty(Name* key);
@@ -2300,6 +2297,11 @@ class JSObject: public JSReceiver {
                                        WriteBarrierMode mode
                                        = UPDATE_WRITE_BARRIER);
 
+  // Set the object's prototype (only JSReceiver and null are allowed values).
+  static Handle<Object> SetPrototype(Handle<JSObject> object,
+                                     Handle<Object> value,
+                                     bool skip_hidden_prototypes = false);
+
   // Initializes the body after properties slot, properties slot is
   // initialized by set_properties.  Fill the pre-allocated fields with
   // pre_allocated_value and the rest with filler_value.
@@ -2502,18 +2504,26 @@ class JSObject: public JSReceiver {
       Name* name,
       Object* structure,
       PropertyAttributes attributes);
-  MUST_USE_RESULT MaybeObject* DefineElementAccessor(
-      uint32_t index,
-      Object* getter,
-      Object* setter,
-      PropertyAttributes attributes);
-  MUST_USE_RESULT MaybeObject* CreateAccessorPairFor(Name* name);
-  MUST_USE_RESULT MaybeObject* DefinePropertyAccessor(
-      Name* name,
-      Object* getter,
-      Object* setter,
-      PropertyAttributes attributes);
+  static void DefineElementAccessor(Handle<JSObject> object,
+                                    uint32_t index,
+                                    Handle<Object> getter,
+                                    Handle<Object> setter,
+                                    PropertyAttributes attributes);
+  static Handle<AccessorPair> CreateAccessorPairFor(Handle<JSObject> object,
+                                                    Handle<Name> name);
+  static void DefinePropertyAccessor(Handle<JSObject> object,
+                                     Handle<Name> name,
+                                     Handle<Object> getter,
+                                     Handle<Object> setter,
+                                     PropertyAttributes attributes);
 
+  // Try to define a single accessor paying attention to map transitions.
+  // Returns false if this was not possible and we have to use the slow case.
+  static bool DefineFastAccessor(Handle<JSObject> object,
+                                 Handle<Name> name,
+                                 AccessorComponent component,
+                                 Handle<Object> accessor,
+                                 PropertyAttributes attributes);
 
   enum InitializeHiddenProperties {
     CREATE_NEW_IF_ABSENT,
@@ -2565,7 +2575,7 @@ class FixedArray: public FixedArrayBase {
   inline void set(int index, Object* value);
   inline bool is_the_hole(int index);
 
-  // Setter that doesn't need write barrier).
+  // Setter that doesn't need write barrier.
   inline void set(int index, Smi* value);
   // Setter with explicit barrier mode.
   inline void set(int index, Object* value, WriteBarrierMode mode);
@@ -2579,12 +2589,6 @@ class FixedArray: public FixedArrayBase {
   inline void set_null(Heap* heap, int index);
   inline void set_the_hole(int index);
 
-  // Setters with less debug checks for the GC to use.
-  inline void set_unchecked(int index, Smi* value);
-  inline void set_null_unchecked(Heap* heap, int index);
-  inline void set_unchecked(Heap* heap, int index, Object* value,
-                            WriteBarrierMode mode);
-
   inline Object** GetFirstElementAddress();
   inline bool ContainsOnlySmisOrHoles();
 
@@ -4378,7 +4382,8 @@ class DeoptimizationOutputData: public FixedArray {
 
 
 // Forward declaration.
-class JSGlobalPropertyCell;
+class Cell;
+class PropertyCell;
 
 // TypeFeedbackCells is a fixed array used to hold the association between
 // cache cells and AST ids for code generated by the full compiler.
@@ -4395,8 +4400,8 @@ class TypeFeedbackCells: public FixedArray {
   inline void SetAstId(int index, TypeFeedbackId id);
 
   // Accessors for global property cells holding the cache values.
-  inline JSGlobalPropertyCell* Cell(int index);
-  inline void SetCell(int index, JSGlobalPropertyCell* cell);
+  inline Cell* GetCell(int index);
+  inline void SetCell(int index, Cell* cell);
 
   // The object that indicates an uninitialized cache.
   static inline Handle<Object> UninitializedSentinel(Isolate* isolate);
@@ -4432,38 +4437,40 @@ class Code: public HeapObject {
   // cache state, and arguments count.
   typedef uint32_t Flags;
 
-#define CODE_KIND_LIST(V) \
-  V(FUNCTION)             \
-  V(OPTIMIZED_FUNCTION)   \
-  V(STUB)                 \
-  V(BUILTIN)              \
-  V(LOAD_IC)              \
-  V(KEYED_LOAD_IC)        \
-  V(CALL_IC)              \
-  V(KEYED_CALL_IC)        \
-  V(STORE_IC)             \
-  V(KEYED_STORE_IC)       \
-  V(UNARY_OP_IC)          \
-  V(BINARY_OP_IC)         \
-  V(COMPARE_IC)           \
-  V(COMPARE_NIL_IC)       \
+#define NON_IC_KIND_LIST(V) \
+  V(FUNCTION)               \
+  V(OPTIMIZED_FUNCTION)     \
+  V(STUB)                   \
+  V(BUILTIN)                \
+  V(REGEXP)
+
+#define IC_KIND_LIST(V) \
+  V(LOAD_IC)            \
+  V(KEYED_LOAD_IC)      \
+  V(CALL_IC)            \
+  V(KEYED_CALL_IC)      \
+  V(STORE_IC)           \
+  V(KEYED_STORE_IC)     \
+  V(UNARY_OP_IC)        \
+  V(BINARY_OP_IC)       \
+  V(COMPARE_IC)         \
+  V(COMPARE_NIL_IC)     \
   V(TO_BOOLEAN_IC)
 
+#define CODE_KIND_LIST(V) \
+  NON_IC_KIND_LIST(V)     \
+  IC_KIND_LIST(V)
+
   enum Kind {
 #define DEFINE_CODE_KIND_ENUM(name) name,
     CODE_KIND_LIST(DEFINE_CODE_KIND_ENUM)
 #undef DEFINE_CODE_KIND_ENUM
-
-    // Pseudo-kinds.
-    LAST_CODE_KIND = TO_BOOLEAN_IC,
-    REGEXP = BUILTIN,
-    FIRST_IC_KIND = LOAD_IC,
-    LAST_IC_KIND = TO_BOOLEAN_IC
+    NUMBER_OF_KINDS
   };
 
   // No more than 16 kinds. The value is currently encoded in four bits in
   // Flags.
-  STATIC_ASSERT(LAST_CODE_KIND < 16);
+  STATIC_ASSERT(NUMBER_OF_KINDS <= 16);
 
   static const char* Kind2String(Kind kind);
 
@@ -4483,10 +4490,6 @@ class Code: public HeapObject {
     PROTOTYPE_STUB
   };
 
-  enum {
-    NUMBER_OF_KINDS = LAST_IC_KIND + 1
-  };
-
   typedef int ExtraICState;
 
   static const ExtraICState kNoExtraICState = 0;
@@ -4546,7 +4549,6 @@ class Code: public HeapObject {
 
   // Unchecked accessors to be used during GC.
   inline ByteArray* unchecked_relocation_info();
-  inline FixedArray* unchecked_deoptimization_data();
 
   inline int relocation_size();
 
@@ -4662,7 +4664,8 @@ class Code: public HeapObject {
   inline byte to_boolean_state();
 
   // [compare_nil]: For kind COMPARE_NIL_IC tells what state the stub is in.
-  byte compare_nil_types();
+  byte compare_nil_state();
+  byte compare_nil_value();
 
   // [has_function_cache]: For kind STUB tells whether there is a function
   // cache is passed to the stub.
@@ -4680,6 +4683,10 @@ class Code: public HeapObject {
   // Get the safepoint entry for the given pc.
   SafepointEntry GetSafepointEntry(Address pc);
 
+  // Find an object in a stub with a specified map
+  Object* FindNthObject(int n, Map* match_map);
+  void ReplaceNthObject(int n, Map* match_map, Object* replace_with);
+
   // Find the first map in an IC stub.
   Map* FindFirstMap();
   void FindAllMaps(MapHandleList* maps);
@@ -4692,6 +4699,8 @@ class Code: public HeapObject {
   // Find the first name in an IC stub.
   Name* FindFirstName();
 
+  void ReplaceNthCell(int n, Cell* replace_with);
+
   class ExtraICStateStrictMode: public BitField<StrictModeFlag, 0, 1> {};
   class ExtraICStateKeyedAccessStoreMode:
       public BitField<KeyedAccessStoreMode, 1, 4> {};  // NOLINT
@@ -4820,13 +4829,18 @@ class Code: public HeapObject {
   };
 #undef DECLARE_CODE_AGE_ENUM
 
-  // Code aging
+  // Code aging.  Indicates how many full GCs this code has survived without
+  // being entered through the prologue.  Used to determine when it is
+  // relatively safe to flush this code object and replace it with the lazy
+  // compilation stub.
   static void MakeCodeAgeSequenceYoung(byte* sequence);
   void MakeOlder(MarkingParity);
   static bool IsYoungSequence(byte* sequence);
   bool IsOld();
+  int GetAge();
 
   void PrintDeoptLocation(int bailout_id);
+  bool CanDeoptAt(Address pc);
 
 #ifdef VERIFY_HEAP
   void VerifyEmbeddedMapsDependency();
@@ -4966,8 +4980,8 @@ class Code: public HeapObject {
 
   // Code aging
   byte* FindCodeAgeSequence();
-  static void  GetCodeAgeAndParity(Code* code, Age* age,
-                                   MarkingParity* parity);
+  static void GetCodeAgeAndParity(Code* code, Age* age,
+                                  MarkingParity* parity);
   static void GetCodeAgeAndParity(byte* sequence, Age* age,
                                   MarkingParity* parity);
   static Code* GetCodeAgeStub(Age age, MarkingParity parity);
@@ -4980,6 +4994,8 @@ class Code: public HeapObject {
 };
 
 
+class CompilationInfo;
+
 // This class describes the layout of dependent codes array of a map. The
 // array is partitioned into several groups of dependent codes. Each group
 // contains codes with the same dependency on the map. The array has the
@@ -5016,7 +5032,10 @@ class DependentCode: public FixedArray {
     // Group of code that depends on elements not being added to objects with
     // this map.
     kElementsCantBeAddedGroup,
-    kGroupCount = kElementsCantBeAddedGroup + 1
+    // Group of code that depends on global property values in property cells
+    // not being changed.
+    kPropertyCellChangedGroup,
+    kGroupCount = kPropertyCellChangedGroup + 1
   };
 
   // Array for holding the index of the first code object of each group.
@@ -5033,8 +5052,14 @@ class DependentCode: public FixedArray {
 
   bool Contains(DependencyGroup group, Code* code);
   static Handle<DependentCode> Insert(Handle<DependentCode> entries,
-                                       DependencyGroup group,
-                                       Handle<Code> value);
+                                      DependencyGroup group,
+                                      Handle<Object> object);
+  void UpdateToFinishedCode(DependencyGroup group,
+                            CompilationInfo* info,
+                            Code* code);
+  void RemoveCompilationInfo(DependentCode::DependencyGroup group,
+                             CompilationInfo* info);
+
   void DeoptimizeDependentCodeGroup(Isolate* isolate,
                                     DependentCode::DependencyGroup group);
 
@@ -5042,12 +5067,19 @@ class DependentCode: public FixedArray {
   // and the mark compact collector.
   inline int number_of_entries(DependencyGroup group);
   inline void set_number_of_entries(DependencyGroup group, int value);
+  inline bool is_code_at(int i);
   inline Code* code_at(int i);
-  inline void set_code_at(int i, Code* value);
-  inline Object** code_slot_at(int i);
-  inline void clear_code_at(int i);
+  inline CompilationInfo* compilation_info_at(int i);
+  inline void set_object_at(int i, Object* object);
+  inline Object** slot_at(int i);
+  inline Object* object_at(int i);
+  inline void clear_at(int i);
+  inline void copy(int from, int to);
   static inline DependentCode* cast(Object* object);
 
+  static DependentCode* ForObject(Handle<HeapObject> object,
+                                  DependencyGroup group);
+
  private:
   // Make a room at the end of the given group by moving out the first
   // code objects of the subsequent groups.
@@ -5300,8 +5332,6 @@ class Map: public HeapObject {
   // [constructor]: points back to the function responsible for this map.
   DECL_ACCESSORS(constructor, Object)
 
-  inline JSFunction* unchecked_constructor();
-
   // [instance descriptors]: describes the object.
   DECL_ACCESSORS(instance_descriptors, DescriptorArray)
   inline void InitializeDescriptors(DescriptorArray* descriptors);
@@ -5353,8 +5383,7 @@ class Map: public HeapObject {
   inline void SetNumberOfProtoTransitions(int value) {
     FixedArray* cache = GetPrototypeTransitions();
     ASSERT(cache->length() != 0);
-    cache->set_unchecked(kProtoTransitionNumberOfEntriesOffset,
-                         Smi::FromInt(value));
+    cache->set(kProtoTransitionNumberOfEntriesOffset, Smi::FromInt(value));
   }
 
   // Lookup in the map's instance descriptors and fill out the result
@@ -5388,7 +5417,7 @@ class Map: public HeapObject {
     set_bit_field3(NumberOfOwnDescriptorsBits::update(bit_field3(), number));
   }
 
-  inline JSGlobalPropertyCell* RetrieveDescriptorsPointer();
+  inline Cell* RetrieveDescriptorsPointer();
 
   int EnumLength() {
     return EnumLengthBits::decode(bit_field3());
@@ -5453,6 +5482,7 @@ class Map: public HeapObject {
 
   // Returns a copy of the map, with all transitions dropped from the
   // instance descriptors.
+  static Handle<Map> Copy(Handle<Map> map);
   MUST_USE_RESULT MaybeObject* Copy();
 
   // Returns the next free property index (only valid for FAST MODE).
@@ -5463,13 +5493,6 @@ class Map: public HeapObject {
   int NumberOfDescribedProperties(DescriptorFlag which = OWN_DESCRIPTORS,
                                   PropertyAttributes filter = NONE);
 
-  // Returns the number of slots allocated for the initial properties
-  // backing storage for instances of this map.
-  int InitialPropertiesLength() {
-    return pre_allocated_property_fields() + unused_property_fields() -
-        inobject_properties();
-  }
-
   // Casting.
   static inline Map* cast(Object* obj);
 
@@ -5554,8 +5577,11 @@ class Map: public HeapObject {
 
   inline bool CanOmitPrototypeChecks();
 
-  inline void AddDependentCode(DependentCode::DependencyGroup group,
-                               Handle<Code> code);
+  void AddDependentCompilationInfo(DependentCode::DependencyGroup group,
+                                   CompilationInfo* info);
+
+  void AddDependentCode(DependentCode::DependencyGroup group,
+                        Handle<Code> code);
 
   bool IsMapInArrayPrototypeChain();
 
@@ -5583,11 +5609,11 @@ class Map: public HeapObject {
   // transitions are in the form of a map where the keys are prototype objects
   // and the values are the maps the are transitioned to.
   static const int kMaxCachedPrototypeTransitions = 256;
-
-  Map* GetPrototypeTransition(Object* prototype);
-
-  MUST_USE_RESULT MaybeObject* PutPrototypeTransition(Object* prototype,
-                                                      Map* map);
+  static Handle<Map> GetPrototypeTransition(Handle<Map> map,
+                                            Handle<Object> prototype);
+  static Handle<Map> PutPrototypeTransition(Handle<Map> map,
+                                            Handle<Object> prototype,
+                                            Handle<Map> target_map);
 
   static const int kMaxPreAllocatedPropertyFields = 255;
 
@@ -5738,7 +5764,7 @@ class Script: public Struct {
   DECL_ACCESSORS(name, Object)
 
   // [id]: the script id.
-  DECL_ACCESSORS(id, Object)
+  DECL_ACCESSORS(id, Smi)
 
   // [line_offset]: script line offset in resource from where it was extracted.
   DECL_ACCESSORS(line_offset, Smi)
@@ -5847,8 +5873,8 @@ class Script: public Struct {
   V(Math, min, MathMin)                             \
   V(Math, imul, MathImul)
 
-
 enum BuiltinFunctionId {
+  kArrayCode,
 #define DECLARE_FUNCTION_ID(ignored1, ignore2, name)    \
   k##name,
   FUNCTIONS_WITH_ID_LIST(DECLARE_FUNCTION_ID)
@@ -5917,8 +5943,6 @@ class SharedFunctionInfo: public HeapObject {
   // [construct stub]: Code stub for constructing instances of this function.
   DECL_ACCESSORS(construct_stub, Code)
 
-  inline Code* unchecked_code();
-
   // Returns if this function has been compiled to native code yet.
   inline bool is_compiled();
 
@@ -6128,14 +6152,6 @@ class SharedFunctionInfo: public HeapObject {
   // iteration by the debugger).
   DECL_BOOLEAN_ACCESSORS(allows_lazy_compilation_without_context)
 
-  // Indicates how many full GCs this function has survived with assigned
-  // code object. Used to determine when it is relatively safe to flush
-  // this code object and replace it with lazy compilation stub.
-  // Age is reset when GC notices that the code object is referenced
-  // from the stack or compilation cache.
-  inline int code_age();
-  inline void set_code_age(int age);
-
   // Indicates whether optimizations have been disabled for this
   // shared function info. If a function is repeatedly optimized or if
   // we cannot optimize the function we disable optimization to avoid
@@ -6379,15 +6395,11 @@ class SharedFunctionInfo: public HeapObject {
   static const int kStartPositionMask  = ~((1 << kStartPositionShift) - 1);
 
   // Bit positions in compiler_hints.
-  static const int kCodeAgeSize = 3;
-  static const int kCodeAgeMask = (1 << kCodeAgeSize) - 1;
-
   enum CompilerHints {
     kAllowLazyCompilation,
     kAllowLazyCompilationWithoutContext,
     kLiveObjectsMayExist,
-    kCodeAgeShift,
-    kOptimizationDisabled = kCodeAgeShift + kCodeAgeSize,
+    kOptimizationDisabled,
     kStrictModeFunction,
     kExtendedModeFunction,
     kUsesArguments,
@@ -6565,11 +6577,8 @@ class JSFunction: public JSObject {
   // can be shared by instances.
   DECL_ACCESSORS(shared, SharedFunctionInfo)
 
-  inline SharedFunctionInfo* unchecked_shared();
-
   // [context]: The context for this function.
   inline Context* context();
-  inline Object* unchecked_context();
   inline void set_context(Object* context);
 
   // [code]: The generated code object for this function.  Executed
@@ -6581,8 +6590,6 @@ class JSFunction: public JSObject {
   inline void set_code_no_write_barrier(Code* code);
   inline void ReplaceCode(Code* code);
 
-  inline Code* unchecked_code();
-
   // Tells whether this function is builtin.
   inline bool IsBuiltin();
 
@@ -6800,7 +6807,7 @@ class GlobalObject: public JSObject {
   DECL_ACCESSORS(global_receiver, JSObject)
 
   // Retrieve the property cell used to store a property.
-  JSGlobalPropertyCell* GetPropertyCell(LookupResult* result);
+  PropertyCell* GetPropertyCell(LookupResult* result);
 
   // This is like GetProperty, but is used when you know the lookup won't fail
   // by throwing an exception.  This is for the debug and builtins global
@@ -6812,7 +6819,7 @@ class GlobalObject: public JSObject {
   }
 
   // Ensure that the global object has a cell for the given property name.
-  static Handle<JSGlobalPropertyCell> EnsurePropertyCell(
+  static Handle<PropertyCell> EnsurePropertyCell(
       Handle<GlobalObject> global,
       Handle<Name> name);
   // TODO(kmillikin): This function can be eliminated once the stub cache is
@@ -7111,11 +7118,6 @@ class JSRegExp: public JSObject {
   // Set implementation data after the object has been prepared.
   inline void SetDataAt(int index, Object* value);
 
-  // Used during GC when flushing code or setting age.
-  inline Object* DataAtUnchecked(int index);
-  inline void SetDataAtUnchecked(int index, Object* value, Heap* heap);
-  inline Type TypeTagUnchecked();
-
   static int code_index(bool is_ascii) {
     if (is_ascii) {
       return kIrregexpASCIICodeIndex;
@@ -8539,16 +8541,18 @@ class Oddball: public HeapObject {
 };
 
 
-class JSGlobalPropertyCell: public HeapObject {
+class Cell: public HeapObject {
  public:
   // [value]: value of the global property.
   DECL_ACCESSORS(value, Object)
 
   // Casting.
-  static inline JSGlobalPropertyCell* cast(Object* obj);
+  static inline Cell* cast(Object* obj);
 
-  static inline JSGlobalPropertyCell* FromValueAddress(Address value) {
-    return cast(FromAddress(value - kValueOffset));
+  static inline Cell* FromValueAddress(Address value) {
+    Object* result = FromAddress(value - kValueOffset);
+    ASSERT(result->IsCell() || result->IsPropertyCell());
+    return static_cast<Cell*>(result);
   }
 
   inline Address ValueAddress() {
@@ -8556,8 +8560,8 @@ class JSGlobalPropertyCell: public HeapObject {
   }
 
   // Dispatched behavior.
-  DECLARE_PRINTER(JSGlobalPropertyCell)
-  DECLARE_VERIFIER(JSGlobalPropertyCell)
+  DECLARE_PRINTER(Cell)
+  DECLARE_VERIFIER(Cell)
 
   // Layout description.
   static const int kValueOffset = HeapObject::kHeaderSize;
@@ -8568,7 +8572,50 @@ class JSGlobalPropertyCell: public HeapObject {
                               kSize> BodyDescriptor;
 
  private:
-  DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalPropertyCell);
+  DISALLOW_IMPLICIT_CONSTRUCTORS(Cell);
+};
+
+
+class PropertyCell: public Cell {
+ public:
+  // [type]: type of the global property.
+  Type* type();
+  void set_type(Type* value, WriteBarrierMode mode = UPDATE_WRITE_BARRIER);
+
+  // [dependent_code]: dependent code that depends on the type of the global
+  // property.
+  DECL_ACCESSORS(dependent_code, DependentCode)
+
+  // Casting.
+  static inline PropertyCell* cast(Object* obj);
+
+  inline Address TypeAddress() {
+    return address() + kTypeOffset;
+  }
+
+  // Dispatched behavior.
+  DECLARE_PRINTER(PropertyCell)
+  DECLARE_VERIFIER(PropertyCell)
+
+  // Layout description.
+  static const int kTypeOffset = kValueOffset + kPointerSize;
+  static const int kDependentCodeOffset = kTypeOffset + kPointerSize;
+  static const int kSize = kDependentCodeOffset + kPointerSize;
+
+  static const int kPointerFieldsBeginOffset = kValueOffset;
+  static const int kPointerFieldsEndOffset = kDependentCodeOffset;
+
+  typedef FixedBodyDescriptor<kValueOffset,
+                              kSize,
+                              kSize> BodyDescriptor;
+
+  void AddDependentCompilationInfo(CompilationInfo* info);
+
+  void AddDependentCode(Handle<Code> code);
+
+ private:
+  DECL_ACCESSORS(type_raw, Object)
+  DISALLOW_IMPLICIT_CONSTRUCTORS(PropertyCell);
 };
 
 
@@ -8789,8 +8836,8 @@ class JSArrayBuffer: public JSObject {
   // [weak_next]: linked list of array buffers.
   DECL_ACCESSORS(weak_next, Object)
 
-  // [weak_first_array]: weak linked list of typed arrays.
-  DECL_ACCESSORS(weak_first_array, Object)
+  // [weak_first_array]: weak linked list of views.
+  DECL_ACCESSORS(weak_first_view, Object)
 
   // Casting.
   static inline JSArrayBuffer* cast(Object* obj);
@@ -8806,8 +8853,8 @@ class JSArrayBuffer: public JSObject {
   static const int kByteLengthOffset = kBackingStoreOffset + kPointerSize;
   static const int kFlagOffset = kByteLengthOffset + kPointerSize;
   static const int kWeakNextOffset = kFlagOffset + kPointerSize;
-  static const int kWeakFirstArrayOffset = kWeakNextOffset + kPointerSize;
-  static const int kSize = kWeakFirstArrayOffset + kPointerSize;
+  static const int kWeakFirstViewOffset = kWeakNextOffset + kPointerSize;
+  static const int kSize = kWeakFirstViewOffset + kPointerSize;
 
   static const int kSizeWithInternalFields =
       kSize + v8::ArrayBuffer::kInternalFieldCount * kPointerSize;
@@ -8820,7 +8867,7 @@ class JSArrayBuffer: public JSObject {
 };
 
 
-class JSTypedArray: public JSObject {
+class JSArrayBufferView: public JSObject {
  public:
   // [buffer]: ArrayBuffer that this typed array views.
   DECL_ACCESSORS(buffer, Object)
@@ -8831,12 +8878,33 @@ class JSTypedArray: public JSObject {
   // [byte_length]: length of typed array in bytes.
   DECL_ACCESSORS(byte_length, Object)
 
-  // [length]: length of typed array in elements.
-  DECL_ACCESSORS(length, Object)
-
   // [weak_next]: linked list of typed arrays over the same array buffer.
   DECL_ACCESSORS(weak_next, Object)
 
+  // Casting.
+  static inline JSArrayBufferView* cast(Object* obj);
+
+  DECLARE_VERIFIER(JSArrayBufferView)
+
+  static const int kBufferOffset = JSObject::kHeaderSize;
+  static const int kByteOffsetOffset = kBufferOffset + kPointerSize;
+  static const int kByteLengthOffset = kByteOffsetOffset + kPointerSize;
+  static const int kWeakNextOffset = kByteLengthOffset + kPointerSize;
+  static const int kViewSize = kWeakNextOffset + kPointerSize;
+
+ protected:
+  void NeuterView();
+
+ private:
+  DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayBufferView);
+};
+
+
+class JSTypedArray: public JSArrayBufferView {
+ public:
+  // [length]: length of typed array in elements.
+  DECL_ACCESSORS(length, Object)
+
   // Neutering. Only neuters this typed array.
   void Neuter();
 
@@ -8850,18 +8918,33 @@ class JSTypedArray: public JSObject {
   DECLARE_PRINTER(JSTypedArray)
   DECLARE_VERIFIER(JSTypedArray)
 
-  static const int kBufferOffset = JSObject::kHeaderSize;
-  static const int kByteOffsetOffset = kBufferOffset + kPointerSize;
-  static const int kByteLengthOffset = kByteOffsetOffset + kPointerSize;
-  static const int kLengthOffset = kByteLengthOffset + kPointerSize;
-  static const int kWeakNextOffset = kLengthOffset + kPointerSize;
-  static const int kSize = kWeakNextOffset + kPointerSize;
+  static const int kLengthOffset = kViewSize + kPointerSize;
+  static const int kSize = kLengthOffset + kPointerSize;
 
  private:
   DISALLOW_IMPLICIT_CONSTRUCTORS(JSTypedArray);
 };
 
 
+class JSDataView: public JSArrayBufferView {
+ public:
+  // Only neuters this DataView
+  void Neuter();
+
+  // Casting.
+  static inline JSDataView* cast(Object* obj);
+
+  // Dispatched behavior.
+  DECLARE_PRINTER(JSDataView)
+  DECLARE_VERIFIER(JSDataView)
+
+  static const int kSize = kViewSize;
+
+ private:
+  DISALLOW_IMPLICIT_CONSTRUCTORS(JSDataView);
+};
+
+
 // Foreign describes objects pointing from JavaScript to C structures.
 // Since they cannot contain references to JS HeapObjects they can be
 // placed in old_data_space.
@@ -9173,7 +9256,7 @@ class AccessorPair: public Struct {
 
   static inline AccessorPair* cast(Object* obj);
 
-  MUST_USE_RESULT MaybeObject* Copy();
+  static Handle<AccessorPair> Copy(Handle<AccessorPair> pair);
 
   Object* get(AccessorComponent component) {
     return component == ACCESSOR_GETTER ? getter() : setter();
@@ -9587,7 +9670,7 @@ class ObjectVisitor BASE_EMBEDDED {
   virtual void VisitCodeEntry(Address entry_address);
 
   // Visits a global property cell reference in the instruction stream.
-  virtual void VisitGlobalPropertyCell(RelocInfo* rinfo);
+  virtual void VisitCell(RelocInfo* rinfo);
 
   // Visits a runtime entry in the instruction stream.
   virtual void VisitRuntimeEntry(RelocInfo* rinfo) {}
index b2abc81..21ef237 100644 (file)
@@ -39,7 +39,9 @@ namespace internal {
 
 void OptimizingCompilerThread::Run() {
 #ifdef DEBUG
-  thread_id_ = ThreadId::Current().ToInteger();
+  { ScopedLock lock(thread_id_mutex_);
+    thread_id_ = ThreadId::Current().ToInteger();
+  }
 #endif
   Isolate::SetIsolateThreadLocals(isolate_, NULL);
   DisallowHeapAllocation no_allocation;
@@ -89,8 +91,9 @@ void OptimizingCompilerThread::CompileNext() {
   ASSERT(status != OptimizingCompiler::FAILED);
 
   // The function may have already been optimized by OSR.  Simply continue.
-  // Mark it for installing before queuing so that we can be sure of the write
-  // order: marking first and (after being queued) installing code second.
+  // Use a mutex to make sure that functions marked for install
+  // are always also queued.
+  ScopedLock mark_and_queue(install_mutex_);
   { Heap::RelocationLock relocation_lock(isolate_->heap());
     AllowHandleDereference ahd;
     optimizing_compiler->info()->closure()->MarkForInstallingRecompiledCode();
@@ -106,12 +109,18 @@ void OptimizingCompilerThread::Stop() {
   stop_semaphore_->Wait();
 
   if (FLAG_parallel_recompilation_delay != 0) {
-    InstallOptimizedFunctions();
     // Barrier when loading queue length is not necessary since the write
     // happens in CompileNext on the same thread.
-    while (NoBarrier_Load(&queue_length_) > 0) {
-      CompileNext();
-      InstallOptimizedFunctions();
+    while (NoBarrier_Load(&queue_length_) > 0) CompileNext();
+    InstallOptimizedFunctions();
+  } else {
+    OptimizingCompiler* optimizing_compiler;
+    // The optimizing compiler is allocated in the CompilationInfo's zone.
+    while (input_queue_.Dequeue(&optimizing_compiler)) {
+      delete optimizing_compiler->info();
+    }
+    while (output_queue_.Dequeue(&optimizing_compiler)) {
+      delete optimizing_compiler->info();
     }
   }
 
@@ -121,18 +130,21 @@ void OptimizingCompilerThread::Stop() {
     double percentage = (compile_time * 100) / total_time;
     PrintF("  ** Compiler thread did %.2f%% useful work\n", percentage);
   }
+
+  Join();
 }
 
 
 void OptimizingCompilerThread::InstallOptimizedFunctions() {
   ASSERT(!IsOptimizerThread());
   HandleScope handle_scope(isolate_);
-  int functions_installed = 0;
-  while (!output_queue_.IsEmpty()) {
-    OptimizingCompiler* compiler;
-    output_queue_.Dequeue(&compiler);
+  OptimizingCompiler* compiler;
+  while (true) {
+    { // Memory barrier to ensure marked functions are queued.
+      ScopedLock marked_and_queued(install_mutex_);
+      if (!output_queue_.Dequeue(&compiler)) return;
+    }
     Compiler::InstallOptimizedCode(compiler);
-    functions_installed++;
   }
 }
 
@@ -151,6 +163,7 @@ void OptimizingCompilerThread::QueueForOptimization(
 #ifdef DEBUG
 bool OptimizingCompilerThread::IsOptimizerThread() {
   if (!FLAG_parallel_recompilation) return false;
+  ScopedLock lock(thread_id_mutex_);
   return ThreadId::Current().ToInteger() == thread_id_;
 }
 #endif
index 8cb5e2d..275ceb4 100644 (file)
@@ -31,7 +31,7 @@
 #include "atomicops.h"
 #include "flags.h"
 #include "platform.h"
-#include "unbound-queue.h"
+#include "unbound-queue-inl.h"
 
 namespace v8 {
 namespace internal {
@@ -46,10 +46,12 @@ class OptimizingCompilerThread : public Thread {
       Thread("OptimizingCompilerThread"),
 #ifdef DEBUG
       thread_id_(0),
+      thread_id_mutex_(OS::CreateMutex()),
 #endif
       isolate_(isolate),
       stop_semaphore_(OS::CreateSemaphore(0)),
       input_queue_semaphore_(OS::CreateSemaphore(0)),
+      install_mutex_(OS::CreateMutex()),
       time_spent_compiling_(0),
       time_spent_total_(0) {
     NoBarrier_Store(&stop_thread_, static_cast<AtomicWord>(false));
@@ -81,13 +83,18 @@ class OptimizingCompilerThread : public Thread {
 #endif
 
   ~OptimizingCompilerThread() {
+    delete install_mutex_;
     delete input_queue_semaphore_;
     delete stop_semaphore_;
+#ifdef DEBUG
+    delete thread_id_mutex_;
+#endif
   }
 
  private:
 #ifdef DEBUG
   int thread_id_;
+  Mutex* thread_id_mutex_;
 #endif
 
   Isolate* isolate_;
@@ -95,6 +102,7 @@ class OptimizingCompilerThread : public Thread {
   Semaphore* input_queue_semaphore_;
   UnboundQueue<OptimizingCompiler*> input_queue_;
   UnboundQueue<OptimizingCompiler*> output_queue_;
+  Mutex* install_mutex_;
   volatile AtomicWord stop_thread_;
   volatile Atomic32 queue_length_;
   int64_t time_spent_compiling_;
index fa24bf7..b320299 100644 (file)
@@ -566,7 +566,6 @@ Parser::Parser(CompilationInfo* info)
 
 
 FunctionLiteral* Parser::ParseProgram() {
-  ZoneScope zone_scope(zone(), DONT_DELETE_ON_EXIT);
   HistogramTimerScope timer(isolate()->counters()->parse());
   Handle<String> source(String::cast(script_->source()));
   isolate()->counters()->total_parse_size()->Increment(source->length());
@@ -583,11 +582,11 @@ FunctionLiteral* Parser::ParseProgram() {
     ExternalTwoByteStringUtf16CharacterStream stream(
         Handle<ExternalTwoByteString>::cast(source), 0, source->length());
     scanner_.Initialize(&stream);
-    result = DoParseProgram(info(), source, &zone_scope);
+    result = DoParseProgram(info(), source);
   } else {
     GenericStringUtf16CharacterStream stream(source, 0, source->length());
     scanner_.Initialize(&stream);
-    result = DoParseProgram(info(), source, &zone_scope);
+    result = DoParseProgram(info(), source);
   }
 
   if (FLAG_trace_parse && result != NULL) {
@@ -608,8 +607,7 @@ FunctionLiteral* Parser::ParseProgram() {
 
 
 FunctionLiteral* Parser::DoParseProgram(CompilationInfo* info,
-                                        Handle<String> source,
-                                        ZoneScope* zone_scope) {
+                                        Handle<String> source) {
   ASSERT(top_scope_ == NULL);
   ASSERT(target_stack_ == NULL);
   if (pre_parse_data_ != NULL) pre_parse_data_->Initialize();
@@ -690,15 +688,11 @@ FunctionLiteral* Parser::DoParseProgram(CompilationInfo* info,
   // Make sure the target stack is empty.
   ASSERT(target_stack_ == NULL);
 
-  // If there was a syntax error we have to get rid of the AST
-  // and it is not safe to do so before the scope has been deleted.
-  if (result == NULL) zone_scope->DeleteOnExit();
   return result;
 }
 
 
 FunctionLiteral* Parser::ParseLazy() {
-  ZoneScope zone_scope(zone(), DONT_DELETE_ON_EXIT);
   HistogramTimerScope timer(isolate()->counters()->parse_lazy());
   Handle<String> source(String::cast(script_->source()));
   isolate()->counters()->total_parse_size()->Increment(source->length());
@@ -713,12 +707,12 @@ FunctionLiteral* Parser::ParseLazy() {
         Handle<ExternalTwoByteString>::cast(source),
         shared_info->start_position(),
         shared_info->end_position());
-    result = ParseLazy(&stream, &zone_scope);
+    result = ParseLazy(&stream);
   } else {
     GenericStringUtf16CharacterStream stream(source,
                                              shared_info->start_position(),
                                              shared_info->end_position());
-    result = ParseLazy(&stream, &zone_scope);
+    result = ParseLazy(&stream);
   }
 
   if (FLAG_trace_parse && result != NULL) {
@@ -730,8 +724,7 @@ FunctionLiteral* Parser::ParseLazy() {
 }
 
 
-FunctionLiteral* Parser::ParseLazy(Utf16CharacterStream* source,
-                                   ZoneScope* zone_scope) {
+FunctionLiteral* Parser::ParseLazy(Utf16CharacterStream* source) {
   Handle<SharedFunctionInfo> shared_info = info()->shared_info();
   scanner_.Initialize(source);
   ASSERT(top_scope_ == NULL);
@@ -779,10 +772,7 @@ FunctionLiteral* Parser::ParseLazy(Utf16CharacterStream* source,
   // Make sure the target stack is empty.
   ASSERT(target_stack_ == NULL);
 
-  // If there was a stack overflow we have to get rid of AST and it is
-  // not safe to do before scope has been deleted.
   if (result == NULL) {
-    zone_scope->DeleteOnExit();
     if (stack_overflow_) isolate()->StackOverflow();
   } else {
     Handle<String> inferred_name(shared_info->inferred_name());
@@ -889,8 +879,8 @@ void* Parser::ParseSourceElements(ZoneList<Statement*>* processor,
       // Still processing directive prologue?
       if ((e_stat = stat->AsExpressionStatement()) != NULL &&
           (literal = e_stat->expression()->AsLiteral()) != NULL &&
-          literal->handle()->IsString()) {
-        Handle<String> directive = Handle<String>::cast(literal->handle());
+          literal->value()->IsString()) {
+        Handle<String> directive = Handle<String>::cast(literal->value());
 
         // Check "use strict" directive (ES5 14.1).
         if (top_scope_->is_classic_mode() &&
@@ -2624,11 +2614,13 @@ WhileStatement* Parser::ParseWhileStatement(ZoneStringList* labels, bool* ok) {
 }
 
 
-bool Parser::CheckInOrOf(ForEachStatement::VisitMode* visit_mode) {
+bool Parser::CheckInOrOf(bool accept_OF,
+                         ForEachStatement::VisitMode* visit_mode) {
   if (Check(Token::IN)) {
     *visit_mode = ForEachStatement::ENUMERATE;
     return true;
-  } else if (allow_for_of() && CheckContextualKeyword(CStrVector("of"))) {
+  } else if (allow_for_of() && accept_OF &&
+             CheckContextualKeyword(CStrVector("of"))) {
     *visit_mode = ForEachStatement::ITERATE;
     return true;
   }
@@ -2726,11 +2718,14 @@ Statement* Parser::ParseForStatement(ZoneStringList* labels, bool* ok) {
     if (peek() == Token::VAR || peek() == Token::CONST) {
       bool is_const = peek() == Token::CONST;
       Handle<String> name;
+      VariableDeclarationProperties decl_props = kHasNoInitializers;
       Block* variable_statement =
-          ParseVariableDeclarations(kForStatement, NULL, NULL, &name, CHECK_OK);
+          ParseVariableDeclarations(kForStatement, &decl_props, NULL, &name,
+                                    CHECK_OK);
+      bool accept_OF = decl_props == kHasNoInitializers;
       ForEachStatement::VisitMode mode;
 
-      if (!name.is_null() && CheckInOrOf(&mode)) {
+      if (!name.is_null() && CheckInOrOf(accept_OF, &mode)) {
         Interface* interface =
             is_const ? Interface::NewConst() : Interface::NewValue();
         ForEachStatement* loop = factory()->NewForEachStatement(mode, labels);
@@ -2762,9 +2757,10 @@ Statement* Parser::ParseForStatement(ZoneStringList* labels, bool* ok) {
          ParseVariableDeclarations(kForStatement, &decl_props, NULL, &name,
                                    CHECK_OK);
       bool accept_IN = !name.is_null() && decl_props != kHasInitializers;
+      bool accept_OF = decl_props == kHasNoInitializers;
       ForEachStatement::VisitMode mode;
 
-      if (accept_IN && CheckInOrOf(&mode)) {
+      if (accept_IN && CheckInOrOf(accept_OF, &mode)) {
         // Rewrite a for-in statement of the form
         //
         //   for (let x in e) b
@@ -2820,8 +2816,9 @@ Statement* Parser::ParseForStatement(ZoneStringList* labels, bool* ok) {
     } else {
       Expression* expression = ParseExpression(false, CHECK_OK);
       ForEachStatement::VisitMode mode;
+      bool accept_OF = expression->AsVariableProxy();
 
-      if (CheckInOrOf(&mode)) {
+      if (CheckInOrOf(accept_OF, &mode)) {
         // Signal a reference error if the expression is an invalid
         // left-hand side expression.  We could report this as a syntax
         // error here but for compatibility with JSC we choose to report
@@ -3060,10 +3057,10 @@ Expression* Parser::ParseBinaryExpression(int prec, bool accept_IN, bool* ok) {
       Expression* y = ParseBinaryExpression(prec1 + 1, accept_IN, CHECK_OK);
 
       // Compute some expressions involving only number literals.
-      if (x && x->AsLiteral() && x->AsLiteral()->handle()->IsNumber() &&
-          y && y->AsLiteral() && y->AsLiteral()->handle()->IsNumber()) {
-        double x_val = x->AsLiteral()->handle()->Number();
-        double y_val = y->AsLiteral()->handle()->Number();
+      if (x && x->AsLiteral() && x->AsLiteral()->value()->IsNumber() &&
+          y && y->AsLiteral() && y->AsLiteral()->value()->IsNumber()) {
+        double x_val = x->AsLiteral()->value()->Number();
+        double y_val = y->AsLiteral()->value()->Number();
 
         switch (op) {
           case Token::ADD:
@@ -3162,7 +3159,7 @@ Expression* Parser::ParseUnaryExpression(bool* ok) {
     Expression* expression = ParseUnaryExpression(CHECK_OK);
 
     if (expression != NULL && (expression->AsLiteral() != NULL)) {
-      Handle<Object> literal = expression->AsLiteral()->handle();
+      Handle<Object> literal = expression->AsLiteral()->value();
       if (op == Token::NOT) {
         // Convert the literal to a boolean condition and negate it.
         bool condition = literal->BooleanValue();
@@ -3727,18 +3724,6 @@ bool CompileTimeValue::IsCompileTimeValue(Expression* expression) {
 }
 
 
-bool CompileTimeValue::ArrayLiteralElementNeedsInitialization(
-    Expression* value) {
-  // If value is a literal the property value is already set in the
-  // boilerplate object.
-  if (value->AsLiteral() != NULL) return false;
-  // If value is a materialized literal the property value is already set
-  // in the boilerplate object if it is simple.
-  if (CompileTimeValue::IsCompileTimeValue(value)) return false;
-  return true;
-}
-
-
 Handle<FixedArray> CompileTimeValue::GetValue(Expression* expression) {
   Factory* factory = Isolate::Current()->factory();
   ASSERT(IsCompileTimeValue(expression));
@@ -3776,7 +3761,7 @@ Handle<FixedArray> CompileTimeValue::GetElements(Handle<FixedArray> value) {
 
 Handle<Object> Parser::GetBoilerplateValue(Expression* expression) {
   if (expression->AsLiteral() != NULL) {
-    return expression->AsLiteral()->handle();
+    return expression->AsLiteral()->value();
   }
   if (CompileTimeValue::IsCompileTimeValue(expression)) {
     return CompileTimeValue::GetValue(expression);
@@ -3889,7 +3874,7 @@ void Parser::BuildObjectLiteralConstantProperties(
     // Add CONSTANT and COMPUTED properties to boilerplate. Use undefined
     // value for COMPUTED properties, the real value is filled in at
     // runtime. The enumeration order is maintained.
-    Handle<Object> key = property->key()->handle();
+    Handle<Object> key = property->key()->value();
     Handle<Object> value = GetBoilerplateValue(property->value());
 
     // Ensure objects that may, at any point in time, contain fields with double
index b7e0700..c3a7edf 100644 (file)
@@ -562,8 +562,7 @@ class Parser BASE_EMBEDDED {
   };
 
   FunctionLiteral* ParseLazy();
-  FunctionLiteral* ParseLazy(Utf16CharacterStream* source,
-                             ZoneScope* zone_scope);
+  FunctionLiteral* ParseLazy(Utf16CharacterStream* source);
 
   Isolate* isolate() { return isolate_; }
   Zone* zone() const { return zone_; }
@@ -571,8 +570,7 @@ class Parser BASE_EMBEDDED {
 
   // Called by ParseProgram after setting up the scanner.
   FunctionLiteral* DoParseProgram(CompilationInfo* info,
-                                  Handle<String> source,
-                                  ZoneScope* zone_scope);
+                                  Handle<String> source);
 
   // Report syntax error
   void ReportUnexpectedToken(Token::Value token);
@@ -729,7 +727,7 @@ class Parser BASE_EMBEDDED {
 
   bool is_generator() const { return current_function_state_->is_generator(); }
 
-  bool CheckInOrOf(ForEachStatement::VisitMode* visit_mode);
+  bool CheckInOrOf(bool accept_OF, ForEachStatement::VisitMode* visit_mode);
 
   bool peek_any_identifier();
 
@@ -888,8 +886,6 @@ class CompileTimeValue: public AllStatic {
 
   static bool IsCompileTimeValue(Expression* expression);
 
-  static bool ArrayLiteralElementNeedsInitialization(Expression* value);
-
   // Get the value as a compile time value.
   static Handle<FixedArray> GetValue(Expression* expression);
 
index 35427d4..bda9f92 100644 (file)
@@ -79,12 +79,6 @@ int OS::ActivationFrameAlignment() {
 }
 
 
-void OS::ReleaseStore(volatile AtomicWord* ptr, AtomicWord value) {
-  __asm__ __volatile__("" : : : "memory");
-  // An x86 store acts as a release barrier.
-  *ptr = value;
-}
-
 const char* OS::LocalTimezone(double time) {
   if (std::isnan(time)) return "";
   time_t tv = static_cast<time_t>(floor(time/msPerSecond));
index 4305ccb..e2c2c42 100644 (file)
@@ -85,12 +85,6 @@ void OS::PostSetUp() {
 }
 
 
-void OS::ReleaseStore(volatile AtomicWord* ptr, AtomicWord value) {
-  __asm__ __volatile__("" : : : "memory");
-  *ptr = value;
-}
-
-
 uint64_t OS::CpuFeaturesImpliedByPlatform() {
   return 0;  // FreeBSD runs on anything.
 }
index 22f2245..2c6a36c 100644 (file)
@@ -295,7 +295,7 @@ bool OS::MipsCpuHasFeature(CpuFeature feature) {
 
 
 int OS::ActivationFrameAlignment() {
-#ifdef V8_TARGET_ARCH_ARM
+#if V8_TARGET_ARCH_ARM
   // On EABI ARM targets this is required for fp correctness in the
   // runtime system.
   return 8;
@@ -308,19 +308,6 @@ int OS::ActivationFrameAlignment() {
 }
 
 
-void OS::ReleaseStore(volatile AtomicWord* ptr, AtomicWord value) {
-#if (defined(V8_TARGET_ARCH_ARM) && defined(__arm__)) || \
-    (defined(V8_TARGET_ARCH_MIPS) && defined(__mips__))
-  // Only use on ARM or MIPS hardware.
-  MemoryBarrier();
-#else
-  __asm__ __volatile__("" : : : "memory");
-  // An x86 store acts as a release barrier.
-#endif
-  *ptr = value;
-}
-
-
 const char* OS::LocalTimezone(double time) {
   if (std::isnan(time)) return "";
   time_t tv = static_cast<time_t>(floor(time/msPerSecond));
index eea1726..21e9c7f 100644 (file)
@@ -295,12 +295,6 @@ int OS::ActivationFrameAlignment() {
 }
 
 
-void OS::ReleaseStore(volatile AtomicWord* ptr, AtomicWord value) {
-  OSMemoryBarrier();
-  *ptr = value;
-}
-
-
 const char* OS::LocalTimezone(double time) {
   if (std::isnan(time)) return "";
   time_t tv = static_cast<time_t>(floor(time/msPerSecond));
@@ -589,7 +583,7 @@ static void InitializeTlsBaseOffset() {
   if (kernel_version_major < 11) {
     // 8.x.x (Tiger), 9.x.x (Leopard), 10.x.x (Snow Leopard) have the
     // same offsets.
-#if defined(V8_HOST_ARCH_IA32)
+#if V8_HOST_ARCH_IA32
     kMacTlsBaseOffset = 0x48;
 #else
     kMacTlsBaseOffset = 0x60;
index 0a7cc80..b722e31 100644 (file)
@@ -79,7 +79,7 @@ static void* GetRandomMmapAddr() {
   // CpuFeatures::Probe. We don't care about randomization in this case because
   // the code page is immediately freed.
   if (isolate != NULL) {
-#ifdef V8_TARGET_ARCH_X64
+#if V8_TARGET_ARCH_X64
     uint64_t rnd1 = V8::RandomPrivate(isolate);
     uint64_t rnd2 = V8::RandomPrivate(isolate);
     uint64_t raw_addr = (rnd1 << 32) ^ rnd2;
@@ -117,13 +117,6 @@ int OS::ActivationFrameAlignment() {
 }
 
 
-void OS::ReleaseStore(volatile AtomicWord* ptr, AtomicWord value) {
-  __asm__ __volatile__("" : : : "memory");
-  // An x86 store acts as a release barrier.
-  *ptr = value;
-}
-
-
 const char* OS::LocalTimezone(double time) {
   if (std::isnan(time)) return "";
   time_t tv = static_cast<time_t>(floor(time/msPerSecond));
index 054d5b5..e72a5d9 100644 (file)
@@ -105,7 +105,7 @@ void* OS::GetRandomMmapAddr() {
   // CpuFeatures::Probe. We don't care about randomization in this case because
   // the code page is immediately freed.
   if (isolate != NULL) {
-#ifdef V8_TARGET_ARCH_X64
+#if V8_TARGET_ARCH_X64
     uint64_t rnd1 = V8::RandomPrivate(isolate);
     uint64_t rnd2 = V8::RandomPrivate(isolate);
     uint64_t raw_addr = (rnd1 << 32) ^ rnd2;
@@ -115,26 +115,11 @@ void* OS::GetRandomMmapAddr() {
     raw_addr &= V8_UINT64_C(0x3ffffffff000);
 #else
     uint32_t raw_addr = V8::RandomPrivate(isolate);
-
-    raw_addr &= 0x3ffff000;
-
-# ifdef __sun
-    // For our Solaris/illumos mmap hint, we pick a random address in the bottom
-    // half of the top half of the address space (that is, the third quarter).
-    // Because we do not MAP_FIXED, this will be treated only as a hint -- the
-    // system will not fail to mmap() because something else happens to already
-    // be mapped at our random address. We deliberately set the hint high enough
-    // to get well above the system's break (that is, the heap); Solaris and
-    // illumos will try the hint and if that fails allocate as if there were
-    // no hint at all. The high hint prevents the break from getting hemmed in
-    // at low values, ceding half of the address space to the system heap.
-    raw_addr += 0x80000000;
-# else
     // The range 0x20000000 - 0x60000000 is relatively unpopulated across a
     // variety of ASLR modes (PAE kernel, NX compat mode, etc) and on macos
     // 10.6 and 10.7.
+    raw_addr &= 0x3ffff000;
     raw_addr += 0x20000000;
-# endif
 #endif
     return reinterpret_cast<void*>(raw_addr);
   }
@@ -336,7 +321,7 @@ int OS::VSNPrintF(Vector<char> str,
 }
 
 
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
 static void MemMoveWrapper(void* dest, const void* src, size_t size) {
   memmove(dest, src, size);
 }
@@ -359,7 +344,7 @@ void OS::MemMove(void* dest, const void* src, size_t size) {
 
 
 void POSIXPostSetUp() {
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
   OS::MemMoveFunction generated_memmove = CreateMemMoveFunction();
   if (generated_memmove != NULL) {
     memmove_function = generated_memmove;
index 5fb28c8..4b0094f 100644 (file)
@@ -111,12 +111,6 @@ int OS::ActivationFrameAlignment() {
 }
 
 
-void OS::ReleaseStore(volatile AtomicWord* ptr, AtomicWord value) {
-  __asm__ __volatile__("" : : : "memory");
-  *ptr = value;
-}
-
-
 const char* OS::LocalTimezone(double time) {
   if (std::isnan(time)) return "";
   time_t tv = static_cast<time_t>(floor(time/msPerSecond));
index 728524e..d1c5907 100644 (file)
@@ -33,7 +33,7 @@
 namespace v8 {
 namespace internal {
 
-#if defined(V8_HOST_ARCH_IA32) || defined(V8_HOST_ARCH_X64)
+#if V8_HOST_ARCH_IA32 || V8_HOST_ARCH_X64
 
 #define V8_FAST_TLS_SUPPORTED 1
 
@@ -43,7 +43,7 @@ INLINE(intptr_t InternalGetExistingThreadLocal(intptr_t index));
 
 inline intptr_t InternalGetExistingThreadLocal(intptr_t index) {
   intptr_t result;
-#if defined(V8_HOST_ARCH_IA32)
+#if V8_HOST_ARCH_IA32
   asm("movl %%gs:(%1,%2,4), %0;"
       :"=r"(result)  // Output must be a writable register.
       :"r"(kMacTlsBaseOffset), "r"(index));
index 6795844..1913760 100644 (file)
@@ -147,7 +147,7 @@ double ceiling(double x) {
 
 static Mutex* limit_mutex = NULL;
 
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
 static void MemMoveWrapper(void* dest, const void* src, size_t size) {
   memmove(dest, src, size);
 }
@@ -580,7 +580,7 @@ void OS::PostSetUp() {
   // Math functions depend on CPU features therefore they are initialized after
   // CPU.
   MathSetup();
-#if defined(V8_TARGET_ARCH_IA32)
+#if V8_TARGET_ARCH_IA32
   OS::MemMoveFunction generated_memmove = CreateMemMoveFunction();
   if (generated_memmove != NULL) {
     memmove_function = generated_memmove;
@@ -1485,12 +1485,6 @@ int OS::ActivationFrameAlignment() {
 }
 
 
-void OS::ReleaseStore(volatile AtomicWord* ptr, AtomicWord value) {
-  MemoryBarrier();
-  *ptr = value;
-}
-
-
 VirtualMemory::VirtualMemory() : address_(NULL), size_(0) { }
 
 
index 86706fe..24d21cb 100644 (file)
@@ -100,7 +100,6 @@ int random();
 
 #endif  // WIN32
 
-#include "atomicops.h"
 #include "lazy-instance.h"
 #include "platform-tls.h"
 #include "utils.h"
@@ -330,8 +329,6 @@ class OS {
   // the platform doesn't care. Guaranteed to be a power of two.
   static int ActivationFrameAlignment();
 
-  static void ReleaseStore(volatile AtomicWord* ptr, AtomicWord value);
-
 #if defined(V8_TARGET_ARCH_IA32)
   // Limit below which the extra overhead of the MemCopy function is likely
   // to outweigh the benefits of faster copying.
index 828177a..3268e3c 100644 (file)
@@ -659,10 +659,9 @@ PreParser::Statement PreParser::ParseWhileStatement(bool* ok) {
 }
 
 
-bool PreParser::CheckInOrOf() {
+bool PreParser::CheckInOrOf(bool accept_OF) {
   if (peek() == i::Token::IN ||
-      (allow_for_of() &&
-       peek() == i::Token::IDENTIFIER &&
+      (allow_for_of() && accept_OF && peek() == i::Token::IDENTIFIER &&
        scanner_->is_next_contextual_keyword(v8::internal::CStrVector("of")))) {
     Next();
     return true;
@@ -685,9 +684,10 @@ PreParser::Statement PreParser::ParseForStatement(bool* ok) {
       VariableDeclarationProperties decl_props = kHasNoInitializers;
       ParseVariableDeclarations(
           kForStatement, &decl_props, &decl_count, CHECK_OK);
-      bool accept_IN = decl_count == 1 &&
-          !(is_let && decl_props == kHasInitializers);
-      if (accept_IN && CheckInOrOf()) {
+      bool has_initializers = decl_props == kHasInitializers;
+      bool accept_IN = decl_count == 1 && !(is_let && has_initializers);
+      bool accept_OF = !has_initializers;
+      if (accept_IN && CheckInOrOf(accept_OF)) {
         ParseExpression(true, CHECK_OK);
         Expect(i::Token::RPAREN, CHECK_OK);
 
@@ -695,8 +695,8 @@ PreParser::Statement PreParser::ParseForStatement(bool* ok) {
         return Statement::Default();
       }
     } else {
-      ParseExpression(false, CHECK_OK);
-      if (CheckInOrOf()) {
+      Expression lhs = ParseExpression(false, CHECK_OK);
+      if (CheckInOrOf(lhs.IsIdentifier())) {
         ParseExpression(true, CHECK_OK);
         Expect(i::Token::RPAREN, CHECK_OK);
 
index 786316e..41907d1 100644 (file)
@@ -658,7 +658,7 @@ class PreParser {
   }
   void ExpectSemicolon(bool* ok);
 
-  bool CheckInOrOf();
+  bool CheckInOrOf(bool accept_OF);
 
   static int Precedence(i::Token::Value tok, bool accept_IN);
 
index 23cad95..1824efa 100644 (file)
@@ -315,7 +315,7 @@ void PrettyPrinter::VisitConditional(Conditional* node) {
 
 
 void PrettyPrinter::VisitLiteral(Literal* node) {
-  PrintLiteral(node->handle(), true);
+  PrintLiteral(node->value(), true);
 }
 
 
@@ -379,11 +379,11 @@ void PrettyPrinter::VisitThrow(Throw* node) {
 void PrettyPrinter::VisitProperty(Property* node) {
   Expression* key = node->key();
   Literal* literal = key->AsLiteral();
-  if (literal != NULL && literal->handle()->IsInternalizedString()) {
+  if (literal != NULL && literal->value()->IsInternalizedString()) {
     Print("(");
     Visit(node->obj());
     Print(").");
-    PrintLiteral(literal->handle(), false);
+    PrintLiteral(literal->value(), false);
   } else {
     Visit(node->obj());
     Print("[");
@@ -999,7 +999,7 @@ void AstPrinter::VisitConditional(Conditional* node) {
 
 // TODO(svenpanne) Start with IndentedScope.
 void AstPrinter::VisitLiteral(Literal* node) {
-  PrintLiteralIndented("LITERAL", node->handle(), true);
+  PrintLiteralIndented("LITERAL", node->value(), true);
 }
 
 
@@ -1102,8 +1102,8 @@ void AstPrinter::VisitProperty(Property* node) {
   IndentedScope indent(this, "PROPERTY");
   Visit(node->obj());
   Literal* literal = node->key()->AsLiteral();
-  if (literal != NULL && literal->handle()->IsInternalizedString()) {
-    PrintLiteralIndented("NAME", literal->handle(), false);
+  if (literal != NULL && literal->value()->IsInternalizedString()) {
+    PrintLiteralIndented("NAME", literal->value(), false);
   } else {
     PrintIndentedVisit("KEY", node->key());
   }
index d6e8a37..20c1aec 100644 (file)
@@ -44,17 +44,19 @@ const char* StringsStorage::GetFunctionName(const char* name) {
 
 
 CodeEntry::CodeEntry(Logger::LogEventsAndTags tag,
-                     const char* name_prefix,
                      const char* name,
+                     int security_token_id,
+                     const char* name_prefix,
                      const char* resource_name,
-                     int line_number,
-                     int security_token_id)
+                     int line_number)
     : tag_(tag),
+      builtin_id_(Builtins::builtin_count),
       name_prefix_(name_prefix),
       name_(name),
       resource_name_(resource_name),
       line_number_(line_number),
       shared_id_(0),
+      script_id_(v8::Script::kNoScriptId),
       security_token_id_(security_token_id),
       no_frame_ranges_(NULL) {
 }
index 5418979..78b05c5 100644 (file)
 #include "profile-generator-inl.h"
 
 #include "compiler.h"
+#include "debug.h"
+#include "sampler.h"
 #include "global-handles.h"
 #include "scopeinfo.h"
 #include "unicode.h"
 #include "zone-inl.h"
-#include "debug.h"
 
 namespace v8 {
 namespace internal {
@@ -79,7 +80,7 @@ void TokenEnumerator::TokenRemovedCallback(v8::Isolate* isolate,
                                            v8::Persistent<v8::Value>* handle,
                                            void* parameter) {
   reinterpret_cast<TokenEnumerator*>(parameter)->TokenRemoved(
-      Utils::OpenHandle(**handle).location());
+      Utils::OpenPersistent(handle).location());
   handle->Dispose(isolate);
 }
 
@@ -183,7 +184,9 @@ size_t StringsStorage::GetUsedMemorySize() const {
   return size;
 }
 
+
 const char* const CodeEntry::kEmptyNamePrefix = "";
+const char* const CodeEntry::kEmptyResourceName = "";
 
 
 CodeEntry::~CodeEntry() {
@@ -233,6 +236,12 @@ bool CodeEntry::IsSameAs(CodeEntry* entry) const {
 }
 
 
+void CodeEntry::SetBuiltinId(Builtins::Name id) {
+  tag_ = Logger::BUILTIN_TAG;
+  builtin_id_ = id;
+}
+
+
 ProfileNode* ProfileNode::FindChild(CodeEntry* entry) {
   HashMap::Entry* map_entry =
       children_.Lookup(entry, CodeEntryHash(entry), false);
@@ -265,12 +274,13 @@ double ProfileNode::GetTotalMillis() const {
 
 
 void ProfileNode::Print(int indent) {
-  OS::Print("%5u %5u %*c %s%s [%d] #%d",
+  OS::Print("%5u %5u %*c %s%s [%d] #%d %d",
             total_ticks_, self_ticks_,
             indent, ' ',
             entry_->name_prefix(),
             entry_->name(),
             entry_->security_token_id(),
+            entry_->script_id(),
             id());
   if (entry_->resource_name()[0] != '\0')
     OS::Print(" %s:%d", entry_->resource_name(), entry_->line_number());
@@ -296,12 +306,7 @@ class DeleteNodesCallback {
 
 
 ProfileTree::ProfileTree()
-    : root_entry_(Logger::FUNCTION_TAG,
-                  "",
-                  "(root)",
-                  "",
-                  0,
-                  TokenEnumerator::kNoSecurityToken),
+    : root_entry_(Logger::FUNCTION_TAG, "(root)"),
       next_node_id_(1),
       root_(new ProfileNode(this, &root_entry_)) {
 }
@@ -790,61 +795,6 @@ List<CpuProfile*>* CpuProfilesCollection::Profiles(int security_token_id) {
 }
 
 
-CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag,
-                                               Name* name,
-                                               String* resource_name,
-                                               int line_number) {
-  CodeEntry* entry = new CodeEntry(tag,
-                                   CodeEntry::kEmptyNamePrefix,
-                                   GetFunctionName(name),
-                                   GetName(resource_name),
-                                   line_number,
-                                   TokenEnumerator::kNoSecurityToken);
-  code_entries_.Add(entry);
-  return entry;
-}
-
-
-CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag,
-                                               const char* name) {
-  CodeEntry* entry = new CodeEntry(tag,
-                                   CodeEntry::kEmptyNamePrefix,
-                                   GetFunctionName(name),
-                                   "",
-                                   v8::CpuProfileNode::kNoLineNumberInfo,
-                                   TokenEnumerator::kNoSecurityToken);
-  code_entries_.Add(entry);
-  return entry;
-}
-
-
-CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag,
-                                               const char* name_prefix,
-                                               Name* name) {
-  CodeEntry* entry = new CodeEntry(tag,
-                                   name_prefix,
-                                   GetName(name),
-                                   "",
-                                   v8::CpuProfileNode::kNoLineNumberInfo,
-                                   TokenEnumerator::kInheritsSecurityToken);
-  code_entries_.Add(entry);
-  return entry;
-}
-
-
-CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag,
-                                               int args_count) {
-  CodeEntry* entry = new CodeEntry(tag,
-                                   "args_count: ",
-                                   GetName(args_count),
-                                   "",
-                                   v8::CpuProfileNode::kNoLineNumberInfo,
-                                   TokenEnumerator::kInheritsSecurityToken);
-  code_entries_.Add(entry);
-  return entry;
-}
-
-
 void CpuProfilesCollection::AddPathToCurrentProfiles(
     const Vector<CodeEntry*>& path) {
   // As starting / stopping profiles is rare relatively to this
@@ -858,6 +808,24 @@ void CpuProfilesCollection::AddPathToCurrentProfiles(
 }
 
 
+CodeEntry* CpuProfilesCollection::NewCodeEntry(
+      Logger::LogEventsAndTags tag,
+      const char* name,
+      int security_token_id,
+      const char* name_prefix,
+      const char* resource_name,
+      int line_number) {
+  CodeEntry* code_entry = new CodeEntry(tag,
+                                        name,
+                                        security_token_id,
+                                        name_prefix,
+                                        resource_name,
+                                        line_number);
+  code_entries_.Add(code_entry);
+  return code_entry;
+}
+
+
 void SampleRateCalculator::Tick() {
   if (--wall_time_query_countdown_ == 0)
     UpdateMeasurements(OS::TimeCurrentMillis());
@@ -887,6 +855,8 @@ const char* const ProfileGenerator::kProgramEntryName =
     "(program)";
 const char* const ProfileGenerator::kGarbageCollectorEntryName =
     "(garbage collector)";
+const char* const ProfileGenerator::kUnresolvedFunctionName =
+    "(unresolved function)";
 
 
 ProfileGenerator::ProfileGenerator(CpuProfilesCollection* profiles)
@@ -895,7 +865,10 @@ ProfileGenerator::ProfileGenerator(CpuProfilesCollection* profiles)
           profiles->NewCodeEntry(Logger::FUNCTION_TAG, kProgramEntryName)),
       gc_entry_(
           profiles->NewCodeEntry(Logger::BUILTIN_TAG,
-                                 kGarbageCollectorEntryName)) {
+                                 kGarbageCollectorEntryName)),
+      unresolved_entry_(
+          profiles->NewCodeEntry(Logger::FUNCTION_TAG,
+                                 kUnresolvedFunctionName)) {
 }
 
 
@@ -907,33 +880,45 @@ void ProfileGenerator::RecordTickSample(const TickSample& sample) {
   CodeEntry** entry = entries.start();
   memset(entry, 0, entries.length() * sizeof(*entry));
   if (sample.pc != NULL) {
-    Address start;
-    CodeEntry* pc_entry = code_map_.FindEntry(sample.pc, &start);
-    // If pc is in the function code before it set up stack frame or after the
-    // frame was destroyed SafeStackTraceFrameIterator incorrectly thinks that
-    // ebp contains return address of the current function and skips caller's
-    // frame. Check for this case and just skip such samples.
-    if (pc_entry) {
-      List<OffsetRange>* ranges = pc_entry->no_frame_ranges();
-      if (ranges) {
-        Code* code = Code::cast(HeapObject::FromAddress(start));
-        int pc_offset = static_cast<int>(sample.pc - code->instruction_start());
-        for (int i = 0; i < ranges->length(); i++) {
-          OffsetRange& range = ranges->at(i);
-          if (range.from <= pc_offset && pc_offset < range.to) {
-            return;
-          }
-        }
-      }
-    }
-    *entry++ = pc_entry;
-
     if (sample.has_external_callback) {
       // Don't use PC when in external callback code, as it can point
       // inside callback's code, and we will erroneously report
       // that a callback calls itself.
-      *(entries.start()) = NULL;
       *entry++ = code_map_.FindEntry(sample.external_callback);
+    } else {
+      Address start;
+      CodeEntry* pc_entry = code_map_.FindEntry(sample.pc, &start);
+      // If pc is in the function code before it set up stack frame or after the
+      // frame was destroyed SafeStackFrameIterator incorrectly thinks that
+      // ebp contains return address of the current function and skips caller's
+      // frame. Check for this case and just skip such samples.
+      if (pc_entry) {
+        List<OffsetRange>* ranges = pc_entry->no_frame_ranges();
+        if (ranges) {
+          Code* code = Code::cast(HeapObject::FromAddress(start));
+          int pc_offset = static_cast<int>(
+              sample.pc - code->instruction_start());
+          for (int i = 0; i < ranges->length(); i++) {
+            OffsetRange& range = ranges->at(i);
+            if (range.from <= pc_offset && pc_offset < range.to) {
+              return;
+            }
+          }
+        }
+        *entry++ = pc_entry;
+
+        if (pc_entry->builtin_id() == Builtins::kFunctionCall ||
+            pc_entry->builtin_id() == Builtins::kFunctionApply) {
+          // When current function is FunctionCall or FunctionApply builtin the
+          // top frame is either frame of the calling JS function or internal
+          // frame. In the latter case we know the caller for sure but in the
+          // former case we don't so we simply replace the frame with
+          // 'unresolved' entry.
+          if (sample.top_frame_type == StackFrame::JAVA_SCRIPT) {
+            *entry++ = unresolved_entry_;
+          }
+        }
+      }
     }
 
     for (const Address* stack_pos = sample.stack,
index 7a5e1f2..411cbdb 100644 (file)
@@ -97,11 +97,11 @@ class CodeEntry {
  public:
   // CodeEntry doesn't own name strings, just references them.
   INLINE(CodeEntry(Logger::LogEventsAndTags tag,
-                   const char* name_prefix,
                    const char* name,
-                   const char* resource_name,
-                   int line_number,
-                   int security_token_id));
+                   int security_token_id = TokenEnumerator::kNoSecurityToken,
+                   const char* name_prefix = CodeEntry::kEmptyNamePrefix,
+                   const char* resource_name = CodeEntry::kEmptyResourceName,
+                   int line_number = v8::CpuProfileNode::kNoLineNumberInfo));
   ~CodeEntry();
 
   INLINE(bool is_js_function() const) { return is_js_function_tag(tag_); }
@@ -111,6 +111,8 @@ class CodeEntry {
   INLINE(const char* resource_name() const) { return resource_name_; }
   INLINE(int line_number() const) { return line_number_; }
   INLINE(void set_shared_id(int shared_id)) { shared_id_ = shared_id; }
+  INLINE(int script_id() const) { return script_id_; }
+  INLINE(void set_script_id(int script_id)) { script_id_ = script_id; }
   INLINE(int security_token_id() const) { return security_token_id_; }
 
   INLINE(static bool is_js_function_tag(Logger::LogEventsAndTags tag));
@@ -120,19 +122,25 @@ class CodeEntry {
     no_frame_ranges_ = ranges;
   }
 
+  void SetBuiltinId(Builtins::Name id);
+  Builtins::Name builtin_id() const { return builtin_id_; }
+
   void CopyData(const CodeEntry& source);
   uint32_t GetCallUid() const;
   bool IsSameAs(CodeEntry* entry) const;
 
   static const char* const kEmptyNamePrefix;
+  static const char* const kEmptyResourceName;
 
  private:
-  Logger::LogEventsAndTags tag_;
+  Logger::LogEventsAndTags tag_ : 8;
+  Builtins::Name builtin_id_ : 8;
   const char* name_prefix_;
   const char* name_;
   const char* resource_name_;
   int line_number_;
   int shared_id_;
+  int script_id_;
   int security_token_id_;
   List<OffsetRange>* no_frame_ranges_;
 
@@ -317,18 +325,24 @@ class CpuProfilesCollection {
   const char* GetName(int args_count) {
     return function_and_resource_names_.GetName(args_count);
   }
+  const char* GetFunctionName(Name* name) {
+    return function_and_resource_names_.GetFunctionName(name);
+  }
+  const char* GetFunctionName(const char* name) {
+    return function_and_resource_names_.GetFunctionName(name);
+  }
   CpuProfile* GetProfile(int security_token_id, unsigned uid);
   bool IsLastProfile(const char* title);
   void RemoveProfile(CpuProfile* profile);
   bool HasDetachedProfiles() { return detached_profiles_.length() > 0; }
 
-  CodeEntry* NewCodeEntry(Logger::LogEventsAndTags tag,
-                          Name* name, String* resource_name, int line_number);
-  CodeEntry* NewCodeEntry(Logger::LogEventsAndTags tag, const char* name);
-  CodeEntry* NewCodeEntry(Logger::LogEventsAndTags tag,
-                          const char* name_prefix, Name* name);
-  CodeEntry* NewCodeEntry(Logger::LogEventsAndTags tag, int args_count);
-  CodeEntry* NewCodeEntry(int security_token_id);
+  CodeEntry* NewCodeEntry(
+      Logger::LogEventsAndTags tag,
+      const char* name,
+      int security_token_id = TokenEnumerator::kNoSecurityToken,
+      const char* name_prefix = CodeEntry::kEmptyNamePrefix,
+      const char* resource_name = CodeEntry::kEmptyResourceName,
+      int line_number = v8::CpuProfileNode::kNoLineNumberInfo);
 
   // Called from profile generator thread.
   void AddPathToCurrentProfiles(const Vector<CodeEntry*>& path);
@@ -337,12 +351,6 @@ class CpuProfilesCollection {
   static const int kMaxSimultaneousProfiles = 100;
 
  private:
-  const char* GetFunctionName(Name* name) {
-    return function_and_resource_names_.GetFunctionName(name);
-  }
-  const char* GetFunctionName(const char* name) {
-    return function_and_resource_names_.GetFunctionName(name);
-  }
   int GetProfileIndex(unsigned uid);
   List<CpuProfile*>* GetProfilesList(int security_token_id);
   int TokenToIndex(int security_token_id);
@@ -421,6 +429,9 @@ class ProfileGenerator {
   static const char* const kAnonymousFunctionName;
   static const char* const kProgramEntryName;
   static const char* const kGarbageCollectorEntryName;
+  // Used to represent frames for which we have no reliable way to
+  // detect function.
+  static const char* const kUnresolvedFunctionName;
 
  private:
   INLINE(CodeEntry* EntryForVMState(StateTag tag));
@@ -429,6 +440,7 @@ class ProfileGenerator {
   CodeMap code_map_;
   CodeEntry* program_entry_;
   CodeEntry* gc_entry_;
+  CodeEntry* unresolved_entry_;
   SampleRateCalculator sample_rate_calc_;
 
   DISALLOW_COPY_AND_ASSIGN(ProfileGenerator);
index 669b05d..b0d10e1 100644 (file)
@@ -110,6 +110,10 @@ class Representation {
         (!IsDouble() && !other.IsDouble());
   }
 
+  bool IsCompatibleForStore(const Representation& other) const {
+    return Equals(other);
+  }
+
   bool is_more_general_than(const Representation& other) const {
     ASSERT(kind_ != kExternal);
     ASSERT(other.kind_ != kExternal);
index f853fc8..5213ee6 100644 (file)
@@ -112,7 +112,7 @@ class ConstantFunctionDescriptor: public Descriptor {
                              JSFunction* function,
                              PropertyAttributes attributes)
       : Descriptor(key, function, attributes, CONSTANT_FUNCTION,
-                   Representation::Tagged()) {}
+                   Representation::HeapObject()) {}
 };
 
 
@@ -351,7 +351,7 @@ class LookupResult BASE_EMBEDDED {
         Object* value;
         value = holder()->property_dictionary()->ValueAt(GetDictionaryEntry());
         if (holder()->IsGlobalObject()) {
-          value = JSGlobalPropertyCell::cast(value)->value();
+          value = PropertyCell::cast(value)->value();
         }
         return value;
       }
@@ -392,6 +392,11 @@ class LookupResult BASE_EMBEDDED {
     return IsTransition() && GetTransitionDetails(map).type() == FIELD;
   }
 
+  bool IsTransitionToConstantFunction(Map* map) {
+    return IsTransition() &&
+        GetTransitionDetails(map).type() == CONSTANT_FUNCTION;
+  }
+
   Map* GetTransitionMap() {
     ASSERT(IsTransition());
     return Map::cast(GetValue());
index c4b79b1..bd02a69 100644 (file)
@@ -80,11 +80,17 @@ STATIC_ASSERT(kProfilerTicksBeforeOptimization < 256);
 STATIC_ASSERT(kProfilerTicksBeforeReenablingOptimization < 256);
 STATIC_ASSERT(kTicksWhenNotEnoughTypeInfo < 256);
 
+// Maximum size in bytes of generate code for a function to allow OSR.
+static const int kOSRCodeSizeAllowanceBase =
+    100 * FullCodeGenerator::kCodeSizeMultiplier;
+
+static const int kOSRCodeSizeAllowancePerTick =
+    3 * FullCodeGenerator::kCodeSizeMultiplier;
 
 // Maximum size in bytes of generated code for a function to be optimized
 // the very first time it is seen on the stack.
 static const int kMaxSizeEarlyOpt =
-    5 * FullCodeGenerator::kBackEdgeDistanceUnit;
+    5 * FullCodeGenerator::kCodeSizeMultiplier;
 
 
 RuntimeProfiler::RuntimeProfiler(Isolate* isolate)
@@ -100,14 +106,13 @@ RuntimeProfiler::RuntimeProfiler(Isolate* isolate)
 }
 
 
-static void GetICCounts(JSFunction* function,
+static void GetICCounts(Code* shared_code,
                         int* ic_with_type_info_count,
                         int* ic_total_count,
                         int* percentage) {
   *ic_total_count = 0;
   *ic_with_type_info_count = 0;
-  Object* raw_info =
-      function->shared()->code()->type_feedback_info();
+  Object* raw_info = shared_code->type_feedback_info();
   if (raw_info->IsTypeFeedbackInfo()) {
     TypeFeedbackInfo* info = TypeFeedbackInfo::cast(raw_info);
     *ic_with_type_info_count = info->ic_with_type_info_count();
@@ -128,7 +133,7 @@ void RuntimeProfiler::Optimize(JSFunction* function, const char* reason) {
     PrintF(" for recompilation, reason: %s", reason);
     if (FLAG_type_info_threshold > 0) {
       int typeinfo, total, percentage;
-      GetICCounts(function, &typeinfo, &total, &percentage);
+      GetICCounts(function->shared()->code(), &typeinfo, &total, &percentage);
       PrintF(", ICs with typeinfo: %d/%d (%d%%)", typeinfo, total, percentage);
     }
     PrintF("]\n");
@@ -148,9 +153,6 @@ void RuntimeProfiler::Optimize(JSFunction* function, const char* reason) {
 void RuntimeProfiler::AttemptOnStackReplacement(JSFunction* function) {
   // See AlwaysFullCompiler (in compiler.cc) comment on why we need
   // Debug::has_break_points().
-  ASSERT(function->IsMarkedForLazyRecompilation() ||
-         function->IsMarkedForParallelRecompilation() ||
-         function->IsOptimized());
   if (!FLAG_use_osr ||
       isolate_->DebuggerHasBreakPoints() ||
       function->IsBuiltin()) {
@@ -225,6 +227,8 @@ void RuntimeProfiler::AddSample(JSFunction* function, int weight) {
 void RuntimeProfiler::OptimizeNow() {
   HandleScope scope(isolate_);
 
+  if (isolate_->DebuggerHasBreakPoints()) return;
+
   if (FLAG_parallel_recompilation) {
     // Take this as opportunity to process the optimizing compiler thread's
     // output queue so that it does not unnecessarily keep objects alive.
@@ -268,18 +272,35 @@ void RuntimeProfiler::OptimizeNow() {
     if (shared_code->kind() != Code::FUNCTION) continue;
     if (function->IsInRecompileQueue()) continue;
 
-    // Attempt OSR if we are still running unoptimized code even though the
-    // the function has long been marked or even already been optimized.
-    if (!frame->is_optimized() &&
+    if (FLAG_always_osr &&
+        shared_code->allow_osr_at_loop_nesting_level() == 0) {
+      // Testing mode: always try an OSR compile for every function.
+      for (int i = 0; i < Code::kMaxLoopNestingMarker; i++) {
+        // TODO(titzer): fix AttemptOnStackReplacement to avoid this dumb loop.
+        shared_code->set_allow_osr_at_loop_nesting_level(i);
+        AttemptOnStackReplacement(function);
+      }
+      // Fall through and do a normal optimized compile as well.
+    } else if (!frame->is_optimized() &&
         (function->IsMarkedForLazyRecompilation() ||
          function->IsMarkedForParallelRecompilation() ||
          function->IsOptimized())) {
-      int nesting = shared_code->allow_osr_at_loop_nesting_level();
-      if (nesting < Code::kMaxLoopNestingMarker) {
-        int new_nesting = nesting + 1;
-        shared_code->set_allow_osr_at_loop_nesting_level(new_nesting);
-        AttemptOnStackReplacement(function);
+      // Attempt OSR if we are still running unoptimized code even though the
+      // the function has long been marked or even already been optimized.
+      int ticks = shared_code->profiler_ticks();
+      int allowance = kOSRCodeSizeAllowanceBase +
+                      ticks * kOSRCodeSizeAllowancePerTick;
+      if (shared_code->CodeSize() > allowance) {
+        if (ticks < 255) shared_code->set_profiler_ticks(ticks + 1);
+      } else {
+        int nesting = shared_code->allow_osr_at_loop_nesting_level();
+        if (nesting < Code::kMaxLoopNestingMarker) {
+          int new_nesting = nesting + 1;
+          shared_code->set_allow_osr_at_loop_nesting_level(new_nesting);
+          AttemptOnStackReplacement(function);
+        }
       }
+      continue;
     }
 
     // Only record top-level code on top of the execution stack and
@@ -313,7 +334,7 @@ void RuntimeProfiler::OptimizeNow() {
 
       if (ticks >= kProfilerTicksBeforeOptimization) {
         int typeinfo, total, percentage;
-        GetICCounts(function, &typeinfo, &total, &percentage);
+        GetICCounts(shared_code, &typeinfo, &total, &percentage);
         if (percentage >= FLAG_type_info_threshold) {
           // If this particular function hasn't had any ICs patched for enough
           // ticks, optimize it now.
index 1bf9aa8..46da381 100644 (file)
@@ -75,6 +75,8 @@ class RuntimeProfiler {
 
   void AddSample(JSFunction* function, int weight);
 
+  bool CodeSizeOKForOSR(Code* shared_code);
+
   Isolate* isolate_;
 
   int sampler_threshold_;
index eccf6ea..e3ee6d5 100644 (file)
@@ -38,6 +38,7 @@
 #include "compilation-cache.h"
 #include "compiler.h"
 #include "cpu.h"
+#include "cpu-profiler.h"
 #include "dateparser-inl.h"
 #include "debug.h"
 #include "deoptimizer.h"
@@ -650,23 +651,17 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_Fix) {
 }
 
 
-static void ArrayBufferWeakCallback(v8::Isolate* external_isolate,
-                                    Persistent<Value>* object,
-                                    void* data) {
-  Isolate* isolate = reinterpret_cast<Isolate*>(external_isolate);
-  HandleScope scope(isolate);
-  Handle<Object> internal_object = Utils::OpenHandle(**object);
-  Handle<JSArrayBuffer> array_buffer(JSArrayBuffer::cast(*internal_object));
+void Runtime::FreeArrayBuffer(Isolate* isolate,
+                              JSArrayBuffer* phantom_array_buffer) {
+  if (phantom_array_buffer->is_external()) return;
 
-  if (!array_buffer->is_external()) {
-    size_t allocated_length = NumberToSize(
-        isolate, array_buffer->byte_length());
-    isolate->heap()->AdjustAmountOfExternalAllocatedMemory(
-        -static_cast<intptr_t>(allocated_length));
-    CHECK(V8::ArrayBufferAllocator() != NULL);
-    V8::ArrayBufferAllocator()->Free(data);
-  }
-  object->Dispose(external_isolate);
+  size_t allocated_length = NumberToSize(
+      isolate, phantom_array_buffer->byte_length());
+
+  isolate->heap()->AdjustAmountOfExternalAllocatedMemory(
+      -static_cast<intptr_t>(allocated_length));
+  CHECK(V8::ArrayBufferAllocator() != NULL);
+  V8::ArrayBufferAllocator()->Free(phantom_array_buffer->backing_store());
 }
 
 
@@ -691,7 +686,7 @@ void Runtime::SetupArrayBuffer(Isolate* isolate,
 
   array_buffer->set_weak_next(isolate->heap()->array_buffers_list());
   isolate->heap()->set_array_buffers_list(*array_buffer);
-  array_buffer->set_weak_first_array(Smi::FromInt(0));
+  array_buffer->set_weak_first_view(isolate->heap()->undefined_value());
 }
 
 
@@ -711,11 +706,6 @@ bool Runtime::SetupArrayBufferAllocatingData(
 
   SetupArrayBuffer(isolate, array_buffer, false, data, allocated_length);
 
-  v8::Isolate* external_isolate = reinterpret_cast<v8::Isolate*>(isolate);
-  v8::Persistent<v8::Value> weak_handle(
-      external_isolate, v8::Utils::ToLocal(Handle<Object>::cast(array_buffer)));
-  weak_handle.MakeWeak(external_isolate, data, ArrayBufferWeakCallback);
-  weak_handle.MarkIndependent(external_isolate);
   isolate->heap()->AdjustAmountOfExternalAllocatedMemory(allocated_length);
 
   return true;
@@ -861,8 +851,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_TypedArrayInitialize) {
 
   Handle<Object> length_obj = isolate->factory()->NewNumberFromSize(length);
   holder->set_length(*length_obj);
-  holder->set_weak_next(buffer->weak_first_array());
-  buffer->set_weak_first_array(*holder);
+  holder->set_weak_next(buffer->weak_first_view());
+  buffer->set_weak_first_view(*holder);
 
   Handle<ExternalArray> elements =
       isolate->factory()->NewExternalArray(
@@ -1014,6 +1004,223 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_TypedArraySetFastCases) {
 }
 
 
+RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewInitialize) {
+  HandleScope scope(isolate);
+  ASSERT(args.length() == 4);
+  CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0);
+  CONVERT_ARG_HANDLE_CHECKED(JSArrayBuffer, buffer, 1);
+  CONVERT_ARG_HANDLE_CHECKED(Object, byte_offset, 2);
+  CONVERT_ARG_HANDLE_CHECKED(Object, byte_length, 3);
+
+  holder->set_buffer(*buffer);
+  ASSERT(byte_offset->IsNumber());
+  ASSERT(
+      NumberToSize(isolate, buffer->byte_length()) >=
+        NumberToSize(isolate, *byte_offset)
+        + NumberToSize(isolate, *byte_length));
+  holder->set_byte_offset(*byte_offset);
+  ASSERT(byte_length->IsNumber());
+  holder->set_byte_length(*byte_length);
+
+  holder->set_weak_next(buffer->weak_first_view());
+  buffer->set_weak_first_view(*holder);
+
+  return isolate->heap()->undefined_value();
+}
+
+
+RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewGetBuffer) {
+  HandleScope scope(isolate);
+  ASSERT(args.length() == 1);
+  CONVERT_ARG_HANDLE_CHECKED(JSDataView, data_view, 0);
+  return data_view->buffer();
+}
+
+
+RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewGetByteOffset) {
+  HandleScope scope(isolate);
+  ASSERT(args.length() == 1);
+  CONVERT_ARG_HANDLE_CHECKED(JSDataView, data_view, 0);
+  return data_view->byte_offset();
+}
+
+
+RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewGetByteLength) {
+  HandleScope scope(isolate);
+  ASSERT(args.length() == 1);
+  CONVERT_ARG_HANDLE_CHECKED(JSDataView, data_view, 0);
+  return data_view->byte_length();
+}
+
+
+inline static bool NeedToFlipBytes(bool is_little_endian) {
+#ifdef V8_TARGET_LITTLE_ENDIAN
+  return !is_little_endian;
+#else
+  return is_little_endian;
+#endif
+}
+
+
+template<int n>
+inline void CopyBytes(uint8_t* target, uint8_t* source) {
+  for (int i = 0; i < n; i++) {
+    *(target++) = *(source++);
+  }
+}
+
+
+template<int n>
+inline void FlipBytes(uint8_t* target, uint8_t* source) {
+  source = source + (n-1);
+  for (int i = 0; i < n; i++) {
+    *(target++) = *(source--);
+  }
+}
+
+
+template<typename T>
+inline static bool DataViewGetValue(
+    Isolate* isolate,
+    Handle<JSDataView> data_view,
+    Handle<Object> byte_offset_obj,
+    bool is_little_endian,
+    T* result) {
+  size_t byte_offset = NumberToSize(isolate, *byte_offset_obj);
+  Handle<JSArrayBuffer> buffer(JSArrayBuffer::cast(data_view->buffer()));
+
+  size_t data_view_byte_offset =
+      NumberToSize(isolate, data_view->byte_offset());
+  size_t data_view_byte_length =
+      NumberToSize(isolate, data_view->byte_length());
+  if (byte_offset + sizeof(T) > data_view_byte_length ||
+      byte_offset + sizeof(T) < byte_offset)  {  // overflow
+    return false;
+  }
+
+  union Value {
+    T data;
+    uint8_t bytes[sizeof(T)];
+  };
+
+  Value value;
+  size_t buffer_offset = data_view_byte_offset + byte_offset;
+  ASSERT(
+      NumberToSize(isolate, buffer->byte_length())
+      >= buffer_offset + sizeof(T));
+  uint8_t* source =
+        static_cast<uint8_t*>(buffer->backing_store()) + buffer_offset;
+  if (NeedToFlipBytes(is_little_endian)) {
+    FlipBytes<sizeof(T)>(value.bytes, source);
+  } else {
+    CopyBytes<sizeof(T)>(value.bytes, source);
+  }
+  *result = value.data;
+  return true;
+}
+
+
+template<typename T>
+static bool DataViewSetValue(
+    Isolate* isolate,
+    Handle<JSDataView> data_view,
+    Handle<Object> byte_offset_obj,
+    bool is_little_endian,
+    T data) {
+  size_t byte_offset = NumberToSize(isolate, *byte_offset_obj);
+  Handle<JSArrayBuffer> buffer(JSArrayBuffer::cast(data_view->buffer()));
+
+  size_t data_view_byte_offset =
+      NumberToSize(isolate, data_view->byte_offset());
+  size_t data_view_byte_length =
+      NumberToSize(isolate, data_view->byte_length());
+  if (byte_offset + sizeof(T) > data_view_byte_length ||
+      byte_offset + sizeof(T) < byte_offset)  {  // overflow
+    return false;
+  }
+
+  union Value {
+    T data;
+    uint8_t bytes[sizeof(T)];
+  };
+
+  Value value;
+  value.data = data;
+  size_t buffer_offset = data_view_byte_offset + byte_offset;
+  ASSERT(
+      NumberToSize(isolate, buffer->byte_length())
+      >= buffer_offset + sizeof(T));
+  uint8_t* target =
+        static_cast<uint8_t*>(buffer->backing_store()) + buffer_offset;
+  if (NeedToFlipBytes(is_little_endian)) {
+    FlipBytes<sizeof(T)>(target, value.bytes);
+  } else {
+    CopyBytes<sizeof(T)>(target, value.bytes);
+  }
+  return true;
+}
+
+
+#define DATA_VIEW_GETTER(TypeName, Type, Converter)                           \
+  RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewGet##TypeName) {             \
+    HandleScope scope(isolate);                                               \
+    ASSERT(args.length() == 3);                                               \
+    CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0);                        \
+    CONVERT_ARG_HANDLE_CHECKED(Object, offset, 1);                            \
+    CONVERT_BOOLEAN_ARG_CHECKED(is_little_endian, 2);                         \
+    Type result;                                                              \
+    if (DataViewGetValue(                                                     \
+          isolate, holder, offset, is_little_endian, &result)) {              \
+      return isolate->heap()->Converter(result);                              \
+    } else {                                                                  \
+      return isolate->Throw(*isolate->factory()->NewRangeError(               \
+          "invalid_data_view_accessor_offset",                                \
+          HandleVector<Object>(NULL, 0)));                                    \
+    }                                                                         \
+  }
+
+DATA_VIEW_GETTER(Uint8, uint8_t, NumberFromUint32)
+DATA_VIEW_GETTER(Int8, int8_t, NumberFromInt32)
+DATA_VIEW_GETTER(Uint16, uint16_t, NumberFromUint32)
+DATA_VIEW_GETTER(Int16, int16_t, NumberFromInt32)
+DATA_VIEW_GETTER(Uint32, uint32_t, NumberFromUint32)
+DATA_VIEW_GETTER(Int32, int32_t, NumberFromInt32)
+DATA_VIEW_GETTER(Float32, float, NumberFromDouble)
+DATA_VIEW_GETTER(Float64, double, NumberFromDouble)
+
+#undef DATA_VIEW_GETTER
+
+#define DATA_VIEW_SETTER(TypeName, Type)                                      \
+  RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewSet##TypeName) {             \
+    HandleScope scope(isolate);                                               \
+    ASSERT(args.length() == 4);                                               \
+    CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0);                        \
+    CONVERT_ARG_HANDLE_CHECKED(Object, offset, 1);                            \
+    CONVERT_ARG_HANDLE_CHECKED(Object, value, 2);                             \
+    CONVERT_BOOLEAN_ARG_CHECKED(is_little_endian, 3);                         \
+    Type v = static_cast<Type>(value->Number());                              \
+    if (DataViewSetValue(                                                     \
+          isolate, holder, offset, is_little_endian, v)) {                    \
+      return isolate->heap()->undefined_value();                              \
+    } else {                                                                  \
+      return isolate->Throw(*isolate->factory()->NewRangeError(               \
+          "invalid_data_view_accessor_offset",                                \
+          HandleVector<Object>(NULL, 0)));                                    \
+    }                                                                         \
+  }
+
+DATA_VIEW_SETTER(Uint8, uint8_t)
+DATA_VIEW_SETTER(Int8, int8_t)
+DATA_VIEW_SETTER(Uint16, uint16_t)
+DATA_VIEW_SETTER(Int16, int16_t)
+DATA_VIEW_SETTER(Uint32, uint32_t)
+DATA_VIEW_SETTER(Int32, int32_t)
+DATA_VIEW_SETTER(Float32, float)
+DATA_VIEW_SETTER(Float64, double)
+
+#undef DATA_VIEW_SETTER
+
+
 RUNTIME_FUNCTION(MaybeObject*, Runtime_SetInitialize) {
   HandleScope scope(isolate);
   ASSERT(args.length() == 1);
@@ -1244,31 +1451,29 @@ static inline Object* GetPrototypeSkipHiddenPrototypes(Isolate* isolate,
 
 
 RUNTIME_FUNCTION(MaybeObject*, Runtime_SetPrototype) {
-  SealHandleScope shs(isolate);
+  HandleScope scope(isolate);
   ASSERT(args.length() == 2);
-  CONVERT_ARG_CHECKED(JSObject, obj, 0);
-  CONVERT_ARG_CHECKED(Object, prototype, 1);
+  CONVERT_ARG_HANDLE_CHECKED(JSObject, obj, 0);
+  CONVERT_ARG_HANDLE_CHECKED(Object, prototype, 1);
   if (FLAG_harmony_observation && obj->map()->is_observed()) {
-    HandleScope scope(isolate);
-    Handle<JSObject> receiver(obj);
-    Handle<Object> value(prototype, isolate);
     Handle<Object> old_value(
-        GetPrototypeSkipHiddenPrototypes(isolate, *receiver), isolate);
+        GetPrototypeSkipHiddenPrototypes(isolate, *obj), isolate);
 
-    MaybeObject* result = receiver->SetPrototype(*value, true);
-    Handle<Object> hresult;
-    if (!result->ToHandle(&hresult, isolate)) return result;
+    Handle<Object> result = JSObject::SetPrototype(obj, prototype, true);
+    if (result.is_null()) return Failure::Exception();
 
     Handle<Object> new_value(
-        GetPrototypeSkipHiddenPrototypes(isolate, *receiver), isolate);
+        GetPrototypeSkipHiddenPrototypes(isolate, *obj), isolate);
     if (!new_value->SameValue(*old_value)) {
-      JSObject::EnqueueChangeRecord(receiver, "prototype",
+      JSObject::EnqueueChangeRecord(obj, "prototype",
                                     isolate->factory()->proto_string(),
                                     old_value);
     }
-    return *hresult;
+    return *result;
   }
-  return obj->SetPrototype(prototype, true);
+  Handle<Object> result = JSObject::SetPrototype(obj, prototype, true);
+  if (result.is_null()) return Failure::Exception();
+  return *result;
 }
 
 
@@ -1494,7 +1699,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpCompile) {
   CONVERT_ARG_HANDLE_CHECKED(String, pattern, 1);
   CONVERT_ARG_HANDLE_CHECKED(String, flags, 2);
   Handle<Object> result =
-      RegExpImpl::Compile(re, pattern, flags, isolate->runtime_zone());
+      RegExpImpl::Compile(re, pattern, flags);
   if (result.is_null()) return Failure::Exception();
   return *result;
 }
@@ -2594,18 +2799,23 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SuspendJSGeneratorObject) {
 
   JavaScriptFrameIterator stack_iterator(isolate);
   JavaScriptFrame* frame = stack_iterator.frame();
-  JSFunction* function = JSFunction::cast(frame->function());
-  RUNTIME_ASSERT(function->shared()->is_generator());
-  ASSERT_EQ(function, generator_object->function());
+  RUNTIME_ASSERT(JSFunction::cast(frame->function())->shared()->is_generator());
+  ASSERT_EQ(JSFunction::cast(frame->function()), generator_object->function());
+
+  // The caller should have saved the context and continuation already.
+  ASSERT_EQ(generator_object->context(), Context::cast(frame->context()));
+  ASSERT_LT(0, generator_object->continuation());
 
   // We expect there to be at least two values on the operand stack: the return
   // value of the yield expression, and the argument to this runtime call.
   // Neither of those should be saved.
   int operands_count = frame->ComputeOperandsCount();
-  ASSERT(operands_count >= 2);
+  ASSERT_GE(operands_count, 2);
   operands_count -= 2;
 
   if (operands_count == 0) {
+    // Although it's semantically harmless to call this function with an
+    // operands_count of zero, it is also unnecessary.
     ASSERT_EQ(generator_object->operand_stack(),
               isolate->heap()->empty_fixed_array());
     ASSERT_EQ(generator_object->stack_handler_index(), -1);
@@ -2622,20 +2832,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SuspendJSGeneratorObject) {
     generator_object->set_stack_handler_index(stack_handler_index);
   }
 
-  // Set continuation down here to avoid side effects if the operand stack
-  // allocation fails.
-  intptr_t offset = frame->pc() - function->code()->instruction_start();
-  ASSERT(offset > 0 && Smi::IsValid(offset));
-  generator_object->set_continuation(static_cast<int>(offset));
-
-  // It's possible for the context to be other than the initial context even if
-  // there is no stack handler active.  For example, this is the case in the
-  // body of a "with" statement.  Therefore we always save the context.
-  generator_object->set_context(Context::cast(frame->context()));
-
-  // The return value is the hole for a suspend return, and anything else for a
-  // resume return.
-  return isolate->heap()->the_hole_value();
+  return isolate->heap()->undefined_value();
 }
 
 
@@ -3402,9 +3599,8 @@ MUST_USE_RESULT static MaybeObject* StringReplaceGlobalAtomRegExpWithString(
   ASSERT(subject->IsFlat());
   ASSERT(replacement->IsFlat());
 
-  Zone* zone = isolate->runtime_zone();
-  ZoneScope zone_space(zone, DELETE_ON_EXIT);
-  ZoneList<int> indices(8, zone);
+  ZoneScope zone_scope(isolate->runtime_zone());
+  ZoneList<int> indices(8, zone_scope.zone());
   ASSERT_EQ(JSRegExp::ATOM, pattern_regexp->TypeTag());
   String* pattern =
       String::cast(pattern_regexp->DataAt(JSRegExp::kAtomPatternIndex));
@@ -3413,7 +3609,7 @@ MUST_USE_RESULT static MaybeObject* StringReplaceGlobalAtomRegExpWithString(
   int replacement_len = replacement->length();
 
   FindStringIndicesDispatch(
-      isolate, *subject, pattern, &indices, 0xffffffff, zone);
+      isolate, *subject, pattern, &indices, 0xffffffff, zone_scope.zone());
 
   int matches = indices.length();
   if (matches == 0) return *subject;
@@ -3489,9 +3685,8 @@ MUST_USE_RESULT static MaybeObject* StringReplaceGlobalRegExpWithString(
   int subject_length = subject->length();
 
   // CompiledReplacement uses zone allocation.
-  Zone* zone = isolate->runtime_zone();
-  ZoneScope zonescope(zone, DELETE_ON_EXIT);
-  CompiledReplacement compiled_replacement(zone);
+  ZoneScope zone_scope(isolate->runtime_zone());
+  CompiledReplacement compiled_replacement(zone_scope.zone());
   bool simple_replace = compiled_replacement.Compile(replacement,
                                                      capture_count,
                                                      subject_length);
@@ -4024,15 +4219,14 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringMatch) {
 
   int capture_count = regexp->CaptureCount();
 
-  Zone* zone = isolate->runtime_zone();
-  ZoneScope zone_space(zone, DELETE_ON_EXIT);
-  ZoneList<int> offsets(8, zone);
+  ZoneScope zone_scope(isolate->runtime_zone());
+  ZoneList<int> offsets(8, zone_scope.zone());
 
   while (true) {
     int32_t* match = global_cache.FetchNext();
     if (match == NULL) break;
-    offsets.Add(match[0], zone);  // start
-    offsets.Add(match[1], zone);  // end
+    offsets.Add(match[0], zone_scope.zone());  // start
+    offsets.Add(match[1], zone_scope.zone());  // end
   }
 
   if (global_cache.HasException()) return Failure::Exception();
@@ -4514,7 +4708,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_KeyedGetProperty) {
             (dictionary->DetailsAt(entry).type() == NORMAL)) {
           Object* value = dictionary->ValueAt(entry);
           if (!receiver->IsGlobalObject()) return value;
-          value = JSGlobalPropertyCell::cast(value)->value();
+          value = PropertyCell::cast(value)->value();
           if (!value->IsTheHole()) return value;
           // If value is the hole do the general lookup.
         }
@@ -4754,25 +4948,40 @@ MaybeObject* Runtime::SetObjectProperty(Isolate* isolate,
     }
 
     js_object->ValidateElements();
-    Handle<Object> result = JSObject::SetElement(
-        js_object, index, value, attr, strict_mode, set_mode);
+    if (js_object->HasExternalArrayElements()) {
+      if (!value->IsNumber() && !value->IsUndefined()) {
+        bool has_exception;
+        Handle<Object> number = Execution::ToNumber(value, &has_exception);
+        if (has_exception) return Failure::Exception();
+        value = number;
+      }
+    }
+    MaybeObject* result = js_object->SetElement(
+        index, *value, attr, strict_mode, true, set_mode);
     js_object->ValidateElements();
-    if (result.is_null()) return Failure::Exception();
+    if (result->IsFailure()) return result;
     return *value;
   }
 
   if (key->IsName()) {
-    Handle<Object> result;
+    MaybeObject* result;
     Handle<Name> name = Handle<Name>::cast(key);
     if (name->AsArrayIndex(&index)) {
-      result = JSObject::SetElement(
-          js_object, index, value, attr, strict_mode, set_mode);
+      if (js_object->HasExternalArrayElements()) {
+        if (!value->IsNumber() && !value->IsUndefined()) {
+          bool has_exception;
+          Handle<Object> number = Execution::ToNumber(value, &has_exception);
+          if (has_exception) return Failure::Exception();
+          value = number;
+        }
+      }
+      result = js_object->SetElement(
+          index, *value, attr, strict_mode, true, set_mode);
     } else {
       if (name->IsString()) Handle<String>::cast(name)->TryFlatten();
-      result = JSReceiver::SetProperty(
-          js_object, name, value, attr, strict_mode);
+      result = js_object->SetProperty(*name, *value, attr, strict_mode);
     }
-    if (result.is_null()) return Failure::Exception();
+    if (result->IsFailure()) return result;
     return *value;
   }
 
@@ -6102,18 +6311,18 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringSplit) {
 
   static const int kMaxInitialListCapacity = 16;
 
-  Zone* zone = isolate->runtime_zone();
-  ZoneScope scope(zone, DELETE_ON_EXIT);
+  ZoneScope zone_scope(isolate->runtime_zone());
 
   // Find (up to limit) indices of separator and end-of-string in subject
   int initial_capacity = Min<uint32_t>(kMaxInitialListCapacity, limit);
-  ZoneList<int> indices(initial_capacity, zone);
+  ZoneList<int> indices(initial_capacity, zone_scope.zone());
   if (!pattern->IsFlat()) FlattenString(pattern);
 
-  FindStringIndicesDispatch(isolate, *subject, *pattern, &indices, limit, zone);
+  FindStringIndicesDispatch(isolate, *subject, *pattern,
+                            &indices, limit, zone_scope.zone());
 
   if (static_cast<uint32_t>(indices.length()) < limit) {
-    indices.Add(subject_length, zone);
+    indices.Add(subject_length, zone_scope.zone());
   }
 
   // The list indices now contains the end of each part to create.
@@ -7916,12 +8125,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_InstallRecompiledCode) {
   ASSERT(args.length() == 1);
   CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0);
   ASSERT(V8::UseCrankshaft() && FLAG_parallel_recompilation);
-  OptimizingCompilerThread* opt_thread = isolate->optimizing_compiler_thread();
-  do {
-    // The function could have been marked for installing, but not queued just
-    // yet.  In this case, retry until installed.
-    opt_thread->InstallOptimizedFunctions();
-  } while (function->IsMarkedForInstallingRecompiledCode());
+  isolate->optimizing_compiler_thread()->InstallOptimizedFunctions();
   return function->code();
 }
 
@@ -8071,6 +8275,13 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_RunningInSimulator) {
 }
 
 
+RUNTIME_FUNCTION(MaybeObject*, Runtime_IsParallelRecompilationSupported) {
+  HandleScope scope(isolate);
+  return FLAG_parallel_recompilation
+      ? isolate->heap()->true_value() : isolate->heap()->false_value();
+}
+
+
 RUNTIME_FUNCTION(MaybeObject*, Runtime_OptimizeFunctionOnNextCall) {
   HandleScope scope(isolate);
   RUNTIME_ASSERT(args.length() == 1 || args.length() == 2);
@@ -8097,13 +8308,20 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_OptimizeFunctionOnNextCall) {
 }
 
 
-RUNTIME_FUNCTION(MaybeObject*, Runtime_WaitUntilOptimized) {
+RUNTIME_FUNCTION(MaybeObject*, Runtime_CompleteOptimization) {
   HandleScope scope(isolate);
   ASSERT(args.length() == 1);
   CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0);
-  if (FLAG_parallel_recompilation) {
-    if (V8::UseCrankshaft() && function->IsOptimizable()) {
-      while (!function->IsOptimized()) OS::Sleep(50);
+  if (FLAG_parallel_recompilation && V8::UseCrankshaft()) {
+    // While function is in optimization pipeline, it is marked accordingly.
+    // Note that if the debugger is activated during parallel recompilation,
+    // the function will be marked with the lazy-recompile builtin, which is
+    // not related to parallel recompilation.
+    while (function->IsMarkedForParallelRecompilation() ||
+           function->IsInRecompileQueue() ||
+           function->IsMarkedForInstallingRecompiledCode()) {
+      isolate->optimizing_compiler_thread()->InstallOptimizedFunctions();
+      OS::Sleep(50);
     }
   }
   return isolate->heap()->undefined_value();
@@ -8242,9 +8460,6 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_CompileForOnStackReplacement) {
                                    *interrupt_code,
                                    *replacement_code);
 
-  // Allow OSR only at nesting level zero again.
-  unoptimized->set_allow_osr_at_loop_nesting_level(0);
-
   // If the optimization attempt succeeded, return the AST id tagged as a
   // smi. This tells the builtin that we need to translate the unoptimized
   // frame to an optimized one.
@@ -9104,14 +9319,13 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_ParseJson) {
   ASSERT_EQ(1, args.length());
   CONVERT_ARG_HANDLE_CHECKED(String, source, 0);
 
-  Zone* zone = isolate->runtime_zone();
   source = Handle<String>(source->TryFlattenGetString());
   // Optimized fast case where we only have ASCII characters.
   Handle<Object> result;
   if (source->IsSeqOneByteString()) {
-    result = JsonParser<true>::Parse(source, zone);
+    result = JsonParser<true>::Parse(source);
   } else {
-    result = JsonParser<false>::Parse(source, zone);
+    result = JsonParser<false>::Parse(source);
   }
   if (result.is_null()) {
     // Syntax error or stack overflow in scanner.
@@ -11564,6 +11778,58 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetScopeCount) {
 }
 
 
+// Returns the list of step-in positions (text offset) in a function of the
+// stack frame in a range from the current debug break position to the end
+// of the corresponding statement.
+RUNTIME_FUNCTION(MaybeObject*, Runtime_GetStepInPositions) {
+  HandleScope scope(isolate);
+  ASSERT(args.length() == 2);
+
+  // Check arguments.
+  Object* check;
+  { MaybeObject* maybe_check = Runtime_CheckExecutionState(
+      RUNTIME_ARGUMENTS(isolate, args));
+    if (!maybe_check->ToObject(&check)) return maybe_check;
+  }
+  CONVERT_SMI_ARG_CHECKED(wrapped_id, 1);
+
+  // Get the frame where the debugging is performed.
+  StackFrame::Id id = UnwrapFrameId(wrapped_id);
+  JavaScriptFrameIterator frame_it(isolate, id);
+  JavaScriptFrame* frame = frame_it.frame();
+
+  Handle<SharedFunctionInfo> shared =
+      Handle<SharedFunctionInfo>(JSFunction::cast(frame->function())->shared());
+  Handle<DebugInfo> debug_info = Debug::GetDebugInfo(shared);
+
+  int len = 0;
+  Handle<JSArray> array(isolate->factory()->NewJSArray(10));
+  // Find the break point where execution has stopped.
+  BreakLocationIterator break_location_iterator(debug_info,
+                                                ALL_BREAK_LOCATIONS);
+
+  break_location_iterator.FindBreakLocationFromAddress(frame->pc());
+  int current_statement_pos = break_location_iterator.statement_position();
+
+  while (!break_location_iterator.Done()) {
+    if (break_location_iterator.IsStepInLocation(isolate)) {
+      Smi* position_value = Smi::FromInt(break_location_iterator.position());
+      JSObject::SetElement(array, len,
+          Handle<Object>(position_value, isolate),
+          NONE, kNonStrictMode);
+      len++;
+    }
+    // Advance iterator.
+    break_location_iterator.Next();
+    if (current_statement_pos !=
+        break_location_iterator.statement_position()) {
+      break;
+    }
+  }
+  return *array;
+}
+
+
 static const int kScopeDetailsTypeIndex = 0;
 static const int kScopeDetailsObjectIndex = 1;
 static const int kScopeDetailsSize = 2;
@@ -11835,14 +12101,28 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SetDisableBreak) {
 }
 
 
+static bool IsPositionAlignmentCodeCorrect(int alignment) {
+  return alignment == STATEMENT_ALIGNED || alignment == BREAK_POSITION_ALIGNED;
+}
+
+
 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetBreakLocations) {
   HandleScope scope(isolate);
-  ASSERT(args.length() == 1);
+  ASSERT(args.length() == 2);
 
   CONVERT_ARG_HANDLE_CHECKED(JSFunction, fun, 0);
+  CONVERT_NUMBER_CHECKED(int32_t, statement_aligned_code, Int32, args[1]);
+
+  if (!IsPositionAlignmentCodeCorrect(statement_aligned_code)) {
+    return isolate->ThrowIllegalOperation();
+  }
+  BreakPositionAlignment alignment =
+      static_cast<BreakPositionAlignment>(statement_aligned_code);
+
   Handle<SharedFunctionInfo> shared(fun->shared());
   // Find the number of break points
-  Handle<Object> break_locations = Debug::GetSourceBreakLocations(shared);
+  Handle<Object> break_locations =
+      Debug::GetSourceBreakLocations(shared, alignment);
   if (break_locations->IsUndefined()) return isolate->heap()->undefined_value();
   // Return array as JS array
   return *isolate->factory()->NewJSArrayWithElements(
@@ -11875,14 +12155,22 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SetFunctionBreakPoint) {
 // GetScriptFromScriptData.
 // args[0]: script to set break point in
 // args[1]: number: break source position (within the script source)
-// args[2]: number: break point object
+// args[2]: number, breakpoint position alignment
+// args[3]: number: break point object
 RUNTIME_FUNCTION(MaybeObject*, Runtime_SetScriptBreakPoint) {
   HandleScope scope(isolate);
-  ASSERT(args.length() == 3);
+  ASSERT(args.length() == 4);
   CONVERT_ARG_HANDLE_CHECKED(JSValue, wrapper, 0);
   CONVERT_NUMBER_CHECKED(int32_t, source_position, Int32, args[1]);
   RUNTIME_ASSERT(source_position >= 0);
-  Handle<Object> break_point_object_arg = args.at<Object>(2);
+  CONVERT_NUMBER_CHECKED(int32_t, statement_aligned_code, Int32, args[2]);
+  Handle<Object> break_point_object_arg = args.at<Object>(3);
+
+  if (!IsPositionAlignmentCodeCorrect(statement_aligned_code)) {
+    return isolate->ThrowIllegalOperation();
+  }
+  BreakPositionAlignment alignment =
+      static_cast<BreakPositionAlignment>(statement_aligned_code);
 
   // Get the script from the script wrapper.
   RUNTIME_ASSERT(wrapper->value()->IsScript());
@@ -11890,7 +12178,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SetScriptBreakPoint) {
 
   // Set break point.
   if (!isolate->debug()->SetBreakPointForScript(script, break_point_object_arg,
-                                                &source_position)) {
+                                                &source_position,
+                                                alignment)) {
     return  isolate->heap()->undefined_value();
   }
 
@@ -12158,6 +12447,15 @@ static MaybeObject* DebugEvaluate(Isolate* isolate,
 // the same view of the values of parameters and local variables as if the
 // piece of JavaScript was evaluated at the point where the function on the
 // stack frame is currently stopped when we compile and run the (direct) eval.
+// Returns array of
+// #0: evaluate result
+// #1: local variables materizalized again as object after evaluation, contain
+//     original variable values as they remained on stack
+// #2: local variables materizalized as object before evaluation (and possibly
+//     modified by expression having been executed)
+// Since user expression only reaches (and modifies) copies of local variables,
+// those copies are returned to the caller to allow tracking the changes and
+// manually updating the actual variables.
 RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugEvaluate) {
   HandleScope scope(isolate);
 
@@ -12257,7 +12555,23 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugEvaluate) {
   }
 
   Handle<Object> receiver(frame->receiver(), isolate);
-  return DebugEvaluate(isolate, context, context_extension, receiver, source);
+  Object* evaluate_result_object;
+  { MaybeObject* maybe_result =
+    DebugEvaluate(isolate, context, context_extension, receiver, source);
+    if (!maybe_result->ToObject(&evaluate_result_object)) return maybe_result;
+  }
+  Handle<Object> evaluate_result(evaluate_result_object, isolate);
+
+  Handle<JSObject> local_scope_control_copy =
+      MaterializeLocalScopeWithFrameInspector(isolate, frame,
+                                              &frame_inspector);
+
+  Handle<FixedArray> resultArray = isolate->factory()->NewFixedArray(3);
+  resultArray->set(0, *evaluate_result);
+  resultArray->set(1, *local_scope_control_copy);
+  resultArray->set(2, *local_scope);
+
+  return *(isolate->factory()->NewJSArrayWithElements(resultArray));
 }
 
 
@@ -12831,8 +13145,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_LiveEditCheckAndDropActivations) {
   CONVERT_ARG_HANDLE_CHECKED(JSArray, shared_array, 0);
   CONVERT_BOOLEAN_ARG_CHECKED(do_drop, 1);
 
-  return *LiveEdit::CheckAndDropActivations(shared_array, do_drop,
-                                            isolate->runtime_zone());
+  return *LiveEdit::CheckAndDropActivations(shared_array, do_drop);
 }
 
 // Compares 2 strings line-by-line, then token-wise and returns diff in form
@@ -12880,8 +13193,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_LiveEditRestartFrame) {
   }
   if (it.done()) return heap->undefined_value();
 
-  const char* error_message =
-      LiveEdit::RestartFrame(it.frame(), isolate->runtime_zone());
+  const char* error_message = LiveEdit::RestartFrame(it.frame());
   if (error_message) {
     return *(isolate->factory()->InternalizeUtf8String(error_message));
   }
@@ -13091,6 +13403,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetOverflowedStackTrace) {
   CONVERT_ARG_CHECKED(JSObject, error_object, 0);
   String* key = isolate->heap()->hidden_stack_trace_string();
   Object* result = error_object->GetHiddenProperty(key);
+  if (result->IsTheHole()) result = isolate->heap()->undefined_value();
   RUNTIME_ASSERT(result->IsJSArray() ||
                  result->IsString() ||
                  result->IsUndefined());
@@ -13479,9 +13792,9 @@ static MaybeObject* ArrayConstructorCommon(Isolate* isolate,
   MaybeObject* maybe_array;
   if (!type_info.is_null() &&
       *type_info != isolate->heap()->undefined_value() &&
-      JSGlobalPropertyCell::cast(*type_info)->value()->IsSmi() &&
+      Cell::cast(*type_info)->value()->IsSmi() &&
       can_use_type_feedback) {
-    JSGlobalPropertyCell* cell = JSGlobalPropertyCell::cast(*type_info);
+    Cell* cell = Cell::cast(*type_info);
     Smi* smi = Smi::cast(cell->value());
     ElementsKind to_kind = static_cast<ElementsKind>(smi->value());
     if (holey && !IsFastHoleyElementsKind(to_kind)) {
index ef54016..70568f9 100644 (file)
@@ -95,8 +95,9 @@ namespace internal {
   F(DeoptimizeFunction, 1, 1) \
   F(ClearFunctionTypeFeedback, 1, 1) \
   F(RunningInSimulator, 0, 1) \
+  F(IsParallelRecompilationSupported, 0, 1) \
   F(OptimizeFunctionOnNextCall, -1, 1) \
-  F(WaitUntilOptimized, 1, 1) \
+  F(CompleteOptimization, 1, 1) \
   F(GetOptimizationStatus, 1, 1) \
   F(GetOptimizationCount, 1, 1) \
   F(CompileForOnStackReplacement, 1, 1) \
@@ -368,6 +369,28 @@ namespace internal {
   F(TypedArrayGetLength, 1, 1) \
   F(TypedArraySetFastCases, 3, 1) \
   \
+  F(DataViewInitialize, 4, 1) \
+  F(DataViewGetBuffer, 1, 1) \
+  F(DataViewGetByteLength, 1, 1) \
+  F(DataViewGetByteOffset, 1, 1) \
+  F(DataViewGetInt8, 3, 1) \
+  F(DataViewGetUint8, 3, 1) \
+  F(DataViewGetInt16, 3, 1) \
+  F(DataViewGetUint16, 3, 1) \
+  F(DataViewGetInt32, 3, 1) \
+  F(DataViewGetUint32, 3, 1) \
+  F(DataViewGetFloat32, 3, 1) \
+  F(DataViewGetFloat64, 3, 1) \
+  \
+  F(DataViewSetInt8, 4, 1) \
+  F(DataViewSetUint8, 4, 1) \
+  F(DataViewSetInt16, 4, 1) \
+  F(DataViewSetUint16, 4, 1) \
+  F(DataViewSetInt32, 4, 1) \
+  F(DataViewSetUint32, 4, 1) \
+  F(DataViewSetFloat32, 4, 1) \
+  F(DataViewSetFloat64, 4, 1) \
+  \
   /* Statements */ \
   F(NewClosure, 3, 1) \
   F(NewObject, 1, 1) \
@@ -467,6 +490,7 @@ namespace internal {
   F(GetFrameCount, 1, 1) \
   F(GetFrameDetails, 2, 1) \
   F(GetScopeCount, 2, 1) \
+  F(GetStepInPositions, 2, 1) \
   F(GetScopeDetails, 4, 1) \
   F(GetFunctionScopeCount, 1, 1) \
   F(GetFunctionScopeDetails, 2, 1) \
@@ -475,9 +499,9 @@ namespace internal {
   F(GetThreadCount, 1, 1) \
   F(GetThreadDetails, 2, 1) \
   F(SetDisableBreak, 1, 1) \
-  F(GetBreakLocations, 1, 1) \
+  F(GetBreakLocations, 2, 1) \
   F(SetFunctionBreakPoint, 3, 1) \
-  F(SetScriptBreakPoint, 3, 1) \
+  F(SetScriptBreakPoint, 4, 1) \
   F(ClearBreakPoint, 1, 1) \
   F(ChangeBreakOnException, 2, 1) \
   F(IsBreakOnException, 1, 1) \
@@ -573,7 +597,8 @@ namespace internal {
   F(GetCachedArrayIndex, 1, 1)                                               \
   F(FastAsciiArrayJoin, 2, 1)                                                \
   F(GeneratorNext, 2, 1)                                                     \
-  F(GeneratorThrow, 2, 1)
+  F(GeneratorThrow, 2, 1)                                                    \
+  F(DebugBreakInOptimizedCode, 0, 1)
 
 
 // ----------------------------------------------------------------------------
@@ -768,6 +793,10 @@ class Runtime : public AllStatic {
       Handle<JSArrayBuffer> array_buffer,
       size_t allocated_length);
 
+  static void FreeArrayBuffer(
+      Isolate* isolate,
+      JSArrayBuffer* phantom_array_buffer);
+
   // Helper functions used stubs.
   static void PerformGC(Object* result);
 
index 22f888d..348fd74 100644 (file)
@@ -658,7 +658,6 @@ function DefaultNumber(x) {
   throw %MakeTypeError('cannot_convert_to_primitive', []);
 }
 
-
 // ECMA-262, section 8.6.2.6, page 28.
 function DefaultString(x) {
   var toString = x.toString;
@@ -676,6 +675,12 @@ function DefaultString(x) {
   throw %MakeTypeError('cannot_convert_to_primitive', []);
 }
 
+function ToPositiveInteger(x, rangeErrorName) {
+  var i = TO_INTEGER(x);
+  if (i < 0) throw %MakeRangeError(rangeErrorName);
+  return i;
+}
+
 
 // NOTE: Setting the prototype for Array must take place as early as
 // possible due to code generation for array literals.  When
index efac288..982f252 100644 (file)
@@ -25,6 +25,8 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+#include "sampler.h"
+
 #if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) \
     || defined(__NetBSD__) || defined(__sun) || defined(__ANDROID__) \
     || defined(__native_client__)
@@ -60,6 +62,8 @@
 
 #include "v8.h"
 
+#include "cpu-profiler.h"
+#include "flags.h"
 #include "frames-inl.h"
 #include "log.h"
 #include "platform.h"
@@ -227,44 +231,36 @@ class Sampler::PlatformData : public PlatformDataCommon {
 #endif
 
 
-class SampleHelper {
- public:
-  inline TickSample* Init(Sampler* sampler, Isolate* isolate) {
 #if defined(USE_SIMULATOR)
+class SimulatorHelper {
+ public:
+  inline bool Init(Sampler* sampler, Isolate* isolate) {
     ThreadId thread_id = sampler->platform_data()->profiled_thread_id();
     Isolate::PerIsolateThreadData* per_thread_data = isolate->
         FindPerThreadDataForThread(thread_id);
-    if (!per_thread_data) return NULL;
+    if (!per_thread_data) return false;
     simulator_ = per_thread_data->simulator();
-    // Check if there is active simulator before allocating TickSample.
-    if (!simulator_) return NULL;
-#endif  // USE_SIMULATOR
-    TickSample* sample = isolate->cpu_profiler()->TickSampleEvent();
-    if (sample == NULL) sample = &sample_obj;
-    return sample;
+    // Check if there is active simulator.
+    return simulator_ != NULL;
   }
 
-#if defined(USE_SIMULATOR)
-  inline void FillRegisters(TickSample* sample) {
-    sample->pc = reinterpret_cast<Address>(simulator_->get_pc());
-    sample->sp = reinterpret_cast<Address>(simulator_->get_register(
+  inline void FillRegisters(RegisterState* state) {
+    state->pc = reinterpret_cast<Address>(simulator_->get_pc());
+    state->sp = reinterpret_cast<Address>(simulator_->get_register(
         Simulator::sp));
 #if V8_TARGET_ARCH_ARM
-    sample->fp = reinterpret_cast<Address>(simulator_->get_register(
+    state->fp = reinterpret_cast<Address>(simulator_->get_register(
         Simulator::r11));
 #elif V8_TARGET_ARCH_MIPS
-    sample->fp = reinterpret_cast<Address>(simulator_->get_register(
+    state->fp = reinterpret_cast<Address>(simulator_->get_register(
         Simulator::fp));
 #endif
   }
-#endif  // USE_SIMULATOR
 
  private:
-#if defined(USE_SIMULATOR)
   Simulator* simulator_;
-#endif
-  TickSample sample_obj;
 };
+#endif  // USE_SIMULATOR
 
 
 #if defined(USE_SIGNALS)
@@ -324,89 +320,86 @@ void SignalHandler::HandleProfilerSignal(int signal, siginfo_t* info,
   Sampler* sampler = isolate->logger()->sampler();
   if (sampler == NULL || !sampler->IsActive()) return;
 
-  SampleHelper helper;
-  TickSample* sample = helper.Init(sampler, isolate);
-  if (sample == NULL) return;
+  RegisterState state;
 
 #if defined(USE_SIMULATOR)
-  helper.FillRegisters(sample);
+  SimulatorHelper helper;
+  if (!helper.Init(sampler, isolate)) return;
+  helper.FillRegisters(&state);
 #else
   // Extracting the sample from the context is extremely machine dependent.
   ucontext_t* ucontext = reinterpret_cast<ucontext_t*>(context);
   mcontext_t& mcontext = ucontext->uc_mcontext;
-  sample->state = isolate->current_vm_state();
 #if defined(__linux__) || defined(__ANDROID__)
 #if V8_HOST_ARCH_IA32
-  sample->pc = reinterpret_cast<Address>(mcontext.gregs[REG_EIP]);
-  sample->sp = reinterpret_cast<Address>(mcontext.gregs[REG_ESP]);
-  sample->fp = reinterpret_cast<Address>(mcontext.gregs[REG_EBP]);
+  state.pc = reinterpret_cast<Address>(mcontext.gregs[REG_EIP]);
+  state.sp = reinterpret_cast<Address>(mcontext.gregs[REG_ESP]);
+  state.fp = reinterpret_cast<Address>(mcontext.gregs[REG_EBP]);
 #elif V8_HOST_ARCH_X64
-  sample->pc = reinterpret_cast<Address>(mcontext.gregs[REG_RIP]);
-  sample->sp = reinterpret_cast<Address>(mcontext.gregs[REG_RSP]);
-  sample->fp = reinterpret_cast<Address>(mcontext.gregs[REG_RBP]);
+  state.pc = reinterpret_cast<Address>(mcontext.gregs[REG_RIP]);
+  state.sp = reinterpret_cast<Address>(mcontext.gregs[REG_RSP]);
+  state.fp = reinterpret_cast<Address>(mcontext.gregs[REG_RBP]);
 #elif V8_HOST_ARCH_ARM
 #if defined(__GLIBC__) && !defined(__UCLIBC__) && \
     (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3))
   // Old GLibc ARM versions used a gregs[] array to access the register
   // values from mcontext_t.
-  sample->pc = reinterpret_cast<Address>(mcontext.gregs[R15]);
-  sample->sp = reinterpret_cast<Address>(mcontext.gregs[R13]);
-  sample->fp = reinterpret_cast<Address>(mcontext.gregs[R11]);
+  state.pc = reinterpret_cast<Address>(mcontext.gregs[R15]);
+  state.sp = reinterpret_cast<Address>(mcontext.gregs[R13]);
+  state.fp = reinterpret_cast<Address>(mcontext.gregs[R11]);
 #else
-  sample->pc = reinterpret_cast<Address>(mcontext.arm_pc);
-  sample->sp = reinterpret_cast<Address>(mcontext.arm_sp);
-  sample->fp = reinterpret_cast<Address>(mcontext.arm_fp);
+  state.pc = reinterpret_cast<Address>(mcontext.arm_pc);
+  state.sp = reinterpret_cast<Address>(mcontext.arm_sp);
+  state.fp = reinterpret_cast<Address>(mcontext.arm_fp);
 #endif  // defined(__GLIBC__) && !defined(__UCLIBC__) &&
         // (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3))
 #elif V8_HOST_ARCH_MIPS
-  sample->pc = reinterpret_cast<Address>(mcontext.pc);
-  sample->sp = reinterpret_cast<Address>(mcontext.gregs[29]);
-  sample->fp = reinterpret_cast<Address>(mcontext.gregs[30]);
+  state.pc = reinterpret_cast<Address>(mcontext.pc);
+  state.sp = reinterpret_cast<Address>(mcontext.gregs[29]);
+  state.fp = reinterpret_cast<Address>(mcontext.gregs[30]);
 #endif  // V8_HOST_ARCH_*
 #elif defined(__FreeBSD__)
 #if V8_HOST_ARCH_IA32
-  sample->pc = reinterpret_cast<Address>(mcontext.mc_eip);
-  sample->sp = reinterpret_cast<Address>(mcontext.mc_esp);
-  sample->fp = reinterpret_cast<Address>(mcontext.mc_ebp);
+  state.pc = reinterpret_cast<Address>(mcontext.mc_eip);
+  state.sp = reinterpret_cast<Address>(mcontext.mc_esp);
+  state.fp = reinterpret_cast<Address>(mcontext.mc_ebp);
 #elif V8_HOST_ARCH_X64
-  sample->pc = reinterpret_cast<Address>(mcontext.mc_rip);
-  sample->sp = reinterpret_cast<Address>(mcontext.mc_rsp);
-  sample->fp = reinterpret_cast<Address>(mcontext.mc_rbp);
+  state.pc = reinterpret_cast<Address>(mcontext.mc_rip);
+  state.sp = reinterpret_cast<Address>(mcontext.mc_rsp);
+  state.fp = reinterpret_cast<Address>(mcontext.mc_rbp);
 #elif V8_HOST_ARCH_ARM
-  sample->pc = reinterpret_cast<Address>(mcontext.mc_r15);
-  sample->sp = reinterpret_cast<Address>(mcontext.mc_r13);
-  sample->fp = reinterpret_cast<Address>(mcontext.mc_r11);
+  state.pc = reinterpret_cast<Address>(mcontext.mc_r15);
+  state.sp = reinterpret_cast<Address>(mcontext.mc_r13);
+  state.fp = reinterpret_cast<Address>(mcontext.mc_r11);
 #endif  // V8_HOST_ARCH_*
 #elif defined(__NetBSD__)
 #if V8_HOST_ARCH_IA32
-  sample->pc = reinterpret_cast<Address>(mcontext.__gregs[_REG_EIP]);
-  sample->sp = reinterpret_cast<Address>(mcontext.__gregs[_REG_ESP]);
-  sample->fp = reinterpret_cast<Address>(mcontext.__gregs[_REG_EBP]);
+  state.pc = reinterpret_cast<Address>(mcontext.__gregs[_REG_EIP]);
+  state.sp = reinterpret_cast<Address>(mcontext.__gregs[_REG_ESP]);
+  state.fp = reinterpret_cast<Address>(mcontext.__gregs[_REG_EBP]);
 #elif V8_HOST_ARCH_X64
-  sample->pc = reinterpret_cast<Address>(mcontext.__gregs[_REG_RIP]);
-  sample->sp = reinterpret_cast<Address>(mcontext.__gregs[_REG_RSP]);
-  sample->fp = reinterpret_cast<Address>(mcontext.__gregs[_REG_RBP]);
+  state.pc = reinterpret_cast<Address>(mcontext.__gregs[_REG_RIP]);
+  state.sp = reinterpret_cast<Address>(mcontext.__gregs[_REG_RSP]);
+  state.fp = reinterpret_cast<Address>(mcontext.__gregs[_REG_RBP]);
 #endif  // V8_HOST_ARCH_*
 #elif defined(__OpenBSD__)
   USE(mcontext);
 #if V8_HOST_ARCH_IA32
-  sample->pc = reinterpret_cast<Address>(ucontext->sc_eip);
-  sample->sp = reinterpret_cast<Address>(ucontext->sc_esp);
-  sample->fp = reinterpret_cast<Address>(ucontext->sc_ebp);
+  state.pc = reinterpret_cast<Address>(ucontext->sc_eip);
+  state.sp = reinterpret_cast<Address>(ucontext->sc_esp);
+  state.fp = reinterpret_cast<Address>(ucontext->sc_ebp);
 #elif V8_HOST_ARCH_X64
-  sample->pc = reinterpret_cast<Address>(ucontext->sc_rip);
-  sample->sp = reinterpret_cast<Address>(ucontext->sc_rsp);
-  sample->fp = reinterpret_cast<Address>(ucontext->sc_rbp);
+  state.pc = reinterpret_cast<Address>(ucontext->sc_rip);
+  state.sp = reinterpret_cast<Address>(ucontext->sc_rsp);
+  state.fp = reinterpret_cast<Address>(ucontext->sc_rbp);
 #endif  // V8_HOST_ARCH_*
 #elif defined(__sun)
-  sample->pc = reinterpret_cast<Address>(mcontext.gregs[REG_PC]);
-  sample->sp = reinterpret_cast<Address>(mcontext.gregs[REG_SP]);
-  sample->fp = reinterpret_cast<Address>(mcontext.gregs[REG_FP]);
+  state.pc = reinterpret_cast<Address>(mcontext.gregs[REG_PC]);
+  state.sp = reinterpret_cast<Address>(mcontext.gregs[REG_SP]);
+  state.fp = reinterpret_cast<Address>(mcontext.gregs[REG_FP]);
 #endif  // __sun
 #endif  // USE_SIMULATOR
-
-  sampler->SampleStack(sample);
-  sampler->Tick(sample);
+  sampler->SampleStack(state);
 #endif  // __native_client__
 }
 
@@ -496,26 +489,25 @@ class SamplerThread : public Thread {
   void SampleContext(Sampler* sampler) {
     if (!SignalHandler::Installed()) return;
     pthread_t tid = sampler->platform_data()->vm_tid();
-    int result = pthread_kill(tid, SIGPROF);
-    USE(result);
-    ASSERT(result == 0);
+    pthread_kill(tid, SIGPROF);
   }
 
 #elif defined(__MACH__)
 
   void SampleContext(Sampler* sampler) {
     thread_act_t profiled_thread = sampler->platform_data()->profiled_thread();
-    Isolate* isolate = sampler->isolate();
 
-    SampleHelper helper;
-    TickSample* sample = helper.Init(sampler, isolate);
-    if (sample == NULL) return;
+#if defined(USE_SIMULATOR)
+    SimulatorHelper helper;
+    Isolate* isolate = sampler->isolate();
+    if (!helper.Init(sampler, isolate)) return;
+#endif
 
     if (KERN_SUCCESS != thread_suspend(profiled_thread)) return;
 
 #if V8_HOST_ARCH_X64
     thread_state_flavor_t flavor = x86_THREAD_STATE64;
-    x86_thread_state64_t state;
+    x86_thread_state64_t thread_state;
     mach_msg_type_number_t count = x86_THREAD_STATE64_COUNT;
 #if __DARWIN_UNIX03
 #define REGISTER_FIELD(name) __r ## name
@@ -524,7 +516,7 @@ class SamplerThread : public Thread {
 #endif  // __DARWIN_UNIX03
 #elif V8_HOST_ARCH_IA32
     thread_state_flavor_t flavor = i386_THREAD_STATE;
-    i386_thread_state_t state;
+    i386_thread_state_t thread_state;
     mach_msg_type_number_t count = i386_THREAD_STATE_COUNT;
 #if __DARWIN_UNIX03
 #define REGISTER_FIELD(name) __e ## name
@@ -537,19 +529,18 @@ class SamplerThread : public Thread {
 
     if (thread_get_state(profiled_thread,
                          flavor,
-                         reinterpret_cast<natural_t*>(&state),
+                         reinterpret_cast<natural_t*>(&thread_state),
                          &count) == KERN_SUCCESS) {
-      sample->state = isolate->current_vm_state();
+      RegisterState state;
 #if defined(USE_SIMULATOR)
-      helper.FillRegisters(sample);
+      helper.FillRegisters(&state);
 #else
-      sample->pc = reinterpret_cast<Address>(state.REGISTER_FIELD(ip));
-      sample->sp = reinterpret_cast<Address>(state.REGISTER_FIELD(sp));
-      sample->fp = reinterpret_cast<Address>(state.REGISTER_FIELD(bp));
+      state.pc = reinterpret_cast<Address>(thread_state.REGISTER_FIELD(ip));
+      state.sp = reinterpret_cast<Address>(thread_state.REGISTER_FIELD(sp));
+      state.fp = reinterpret_cast<Address>(thread_state.REGISTER_FIELD(bp));
 #endif  // USE_SIMULATOR
 #undef REGISTER_FIELD
-      sampler->SampleStack(sample);
-      sampler->Tick(sample);
+      sampler->SampleStack(state);
     }
     thread_resume(profiled_thread);
   }
@@ -561,34 +552,34 @@ class SamplerThread : public Thread {
     if (profiled_thread == NULL) return;
 
     Isolate* isolate = sampler->isolate();
-    SampleHelper helper;
-    TickSample* sample = helper.Init(sampler, isolate);
-    if (sample == NULL) return;
+#if defined(USE_SIMULATOR)
+    SimulatorHelper helper;
+    if (!helper.Init(sampler, isolate)) return;
+#endif
 
     const DWORD kSuspendFailed = static_cast<DWORD>(-1);
     if (SuspendThread(profiled_thread) == kSuspendFailed) return;
-    sample->state = isolate->current_vm_state();
 
     // Context used for sampling the register state of the profiled thread.
     CONTEXT context;
     memset(&context, 0, sizeof(context));
     context.ContextFlags = CONTEXT_FULL;
     if (GetThreadContext(profiled_thread, &context) != 0) {
+      RegisterState state;
 #if defined(USE_SIMULATOR)
-      helper.FillRegisters(sample);
+      helper.FillRegisters(&state);
 #else
 #if V8_HOST_ARCH_X64
-      sample->pc = reinterpret_cast<Address>(context.Rip);
-      sample->sp = reinterpret_cast<Address>(context.Rsp);
-      sample->fp = reinterpret_cast<Address>(context.Rbp);
+      state.pc = reinterpret_cast<Address>(context.Rip);
+      state.sp = reinterpret_cast<Address>(context.Rsp);
+      state.fp = reinterpret_cast<Address>(context.Rbp);
 #else
-      sample->pc = reinterpret_cast<Address>(context.Eip);
-      sample->sp = reinterpret_cast<Address>(context.Esp);
-      sample->fp = reinterpret_cast<Address>(context.Ebp);
+      state.pc = reinterpret_cast<Address>(context.Eip);
+      state.sp = reinterpret_cast<Address>(context.Esp);
+      state.fp = reinterpret_cast<Address>(context.Ebp);
 #endif
 #endif  // USE_SIMULATOR
-      sampler->SampleStack(sample);
-      sampler->Tick(sample);
+      sampler->SampleStack(state);
     }
     ResumeThread(profiled_thread);
   }
@@ -614,8 +605,11 @@ SamplerThread* SamplerThread::instance_ = NULL;
 //
 // StackTracer implementation
 //
-DISABLE_ASAN void TickSample::Trace(Isolate* isolate) {
+DISABLE_ASAN void TickSample::Init(Isolate* isolate,
+                                   const RegisterState& regs) {
   ASSERT(isolate->IsInitialized());
+  pc = regs.pc;
+  state = isolate->current_vm_state();
 
   // Avoid collecting traces while doing GC.
   if (state == GC) return;
@@ -634,11 +628,12 @@ DISABLE_ASAN void TickSample::Trace(Isolate* isolate) {
   } else {
     // Sample potential return address value for frameless invocation of
     // stubs (we'll figure out later, if this value makes sense).
-    tos = Memory::Address_at(sp);
+    tos = Memory::Address_at(regs.sp);
     has_external_callback = false;
   }
 
-  SafeStackTraceFrameIterator it(isolate, fp, sp, sp, js_entry_sp);
+  SafeStackFrameIterator it(isolate, regs.fp, regs.sp, js_entry_sp);
+  top_frame_type = it.top_frame_type();
   int i = 0;
   while (!it.done() && i < TickSample::kMaxFramesCount) {
     stack[i++] = it.frame()->pc();
@@ -686,9 +681,13 @@ void Sampler::Stop() {
   SetActive(false);
 }
 
-void Sampler::SampleStack(TickSample* sample) {
-  sample->Trace(isolate_);
+void Sampler::SampleStack(const RegisterState& state) {
+  TickSample* sample = isolate_->cpu_profiler()->TickSampleEvent();
+  TickSample sample_obj;
+  if (sample == NULL) sample = &sample_obj;
+  sample->Init(isolate_, state);
   if (++samples_taken_ < 0) samples_taken_ = 0;
+  Tick(sample);
 }
 
 } }  // namespace v8::internal
index 1d9ac87..a47a363 100644 (file)
@@ -29,6 +29,7 @@
 #define V8_SAMPLER_H_
 
 #include "atomicops.h"
+#include "frames.h"
 #include "v8globals.h"
 
 namespace v8 {
@@ -43,21 +44,25 @@ class Isolate;
 // (if used for profiling) the program counter and stack pointer for
 // the thread that created it.
 
+struct RegisterState {
+  RegisterState() : pc(NULL), sp(NULL), fp(NULL) {}
+  Address pc;      // Instruction pointer.
+  Address sp;      // Stack pointer.
+  Address fp;      // Frame pointer.
+};
+
 // TickSample captures the information collected for each sample.
 struct TickSample {
   TickSample()
       : state(OTHER),
         pc(NULL),
-        sp(NULL),
-        fp(NULL),
         external_callback(NULL),
         frames_count(0),
-        has_external_callback(false) {}
-  void Trace(Isolate* isolate);
+        has_external_callback(false),
+        top_frame_type(StackFrame::NONE) {}
+  void Init(Isolate* isolate, const RegisterState& state);
   StateTag state;  // The state of the VM.
   Address pc;      // Instruction pointer.
-  Address sp;      // Stack pointer.
-  Address fp;      // Frame pointer.
   union {
     Address tos;   // Top stack value (*sp).
     Address external_callback;
@@ -66,6 +71,7 @@ struct TickSample {
   Address stack[kMaxFramesCount];  // Call stack.
   int frames_count : 8;  // Number of captured frames.
   bool has_external_callback : 1;
+  StackFrame::Type top_frame_type : 4;
 };
 
 class Sampler {
@@ -82,11 +88,7 @@ class Sampler {
   int interval() const { return interval_; }
 
   // Performs stack sampling.
-  void SampleStack(TickSample* sample);
-
-  // This method is called for each sampling period with the current
-  // program counter.
-  virtual void Tick(TickSample* sample) = 0;
+  void SampleStack(const RegisterState& regs);
 
   // Start and stop sampler.
   void Start();
@@ -107,6 +109,11 @@ class Sampler {
   class PlatformData;
   PlatformData* platform_data() const { return data_; }
 
+ protected:
+  // This method is called for each sampling period with the current
+  // program counter.
+  virtual void Tick(TickSample* sample) = 0;
+
  private:
   void SetActive(bool value) { NoBarrier_Store(&active_, value); }
 
index 6c5ccea..4e51cd3 100644 (file)
@@ -687,6 +687,8 @@ void Deserializer::Deserialize() {
 
   isolate_->heap()->set_native_contexts_list(
       isolate_->heap()->undefined_value());
+  isolate_->heap()->set_array_buffers_list(
+      isolate_->heap()->undefined_value());
 
   // Update data pointers to the external strings containing natives sources.
   for (int i = 0; i < Natives::GetBuiltinsCount(); i++) {
@@ -776,6 +778,7 @@ void Deserializer::ReadChunk(Object** current,
   bool write_barrier_needed = (current_object_address != NULL &&
                                source_space != NEW_SPACE &&
                                source_space != CELL_SPACE &&
+                               source_space != PROPERTY_CELL_SPACE &&
                                source_space != CODE_SPACE &&
                                source_space != OLD_DATA_SPACE);
   while (current < limit) {
@@ -836,8 +839,7 @@ void Deserializer::ReadChunk(Object** current,
                   new_code_object->instruction_start());                       \
             } else {                                                           \
               ASSERT(space_number == CODE_SPACE);                              \
-              JSGlobalPropertyCell* cell =                                     \
-                  JSGlobalPropertyCell::cast(new_object);                      \
+              Cell* cell = Cell::cast(new_object);                             \
               new_object = reinterpret_cast<Object*>(                          \
                   cell->ValueAddress());                                       \
             }                                                                  \
@@ -877,6 +879,7 @@ void Deserializer::ReadChunk(Object** current,
   CASE_STATEMENT(where, how, within, OLD_POINTER_SPACE)                        \
   CASE_STATEMENT(where, how, within, CODE_SPACE)                               \
   CASE_STATEMENT(where, how, within, CELL_SPACE)                               \
+  CASE_STATEMENT(where, how, within, PROPERTY_CELL_SPACE)                      \
   CASE_STATEMENT(where, how, within, MAP_SPACE)                                \
   CASE_BODY(where, how, within, kAnyOldSpace)
 
@@ -1564,10 +1567,9 @@ void Serializer::ObjectSerializer::VisitCodeEntry(Address entry_address) {
 }
 
 
-void Serializer::ObjectSerializer::VisitGlobalPropertyCell(RelocInfo* rinfo) {
-  ASSERT(rinfo->rmode() == RelocInfo::GLOBAL_PROPERTY_CELL);
-  JSGlobalPropertyCell* cell =
-      JSGlobalPropertyCell::cast(rinfo->target_cell());
+void Serializer::ObjectSerializer::VisitCell(RelocInfo* rinfo) {
+  ASSERT(rinfo->rmode() == RelocInfo::CELL);
+  Cell* cell = Cell::cast(rinfo->target_cell());
   int skip = OutputRawData(rinfo->pc(), kCanReturnSkipInsteadOfSkipping);
   serializer_->SerializeObject(cell, kPlain, kInnerPointer, skip);
 }
index 1b56a88..a6099af 100644 (file)
@@ -519,7 +519,7 @@ class Serializer : public SerializerDeserializer {
     void VisitExternalReference(RelocInfo* rinfo);
     void VisitCodeTarget(RelocInfo* target);
     void VisitCodeEntry(Address entry_address);
-    void VisitGlobalPropertyCell(RelocInfo* rinfo);
+    void VisitCell(RelocInfo* rinfo);
     void VisitRuntimeEntry(RelocInfo* reloc);
     // Used for seralizing the external strings that hold the natives source.
     void VisitExternalAsciiString(
@@ -613,7 +613,7 @@ class PartialSerializer : public Serializer {
     // unique ID, and deserializing several partial snapshots containing script
     // would cause dupes.
     ASSERT(!o->IsScript());
-    return o->IsString() || o->IsSharedFunctionInfo() ||
+    return o->IsName() || o->IsSharedFunctionInfo() ||
            o->IsHeapNumber() || o->IsCode() ||
            o->IsScopeInfo() ||
            o->map() == HEAP->fixed_cow_array_map();
index a8806f0..576269d 100644 (file)
@@ -45,7 +45,8 @@ static void ReserveSpaceForSnapshot(Deserializer* deserializer,
   OS::SNPrintF(name, "%s.size", file_name);
   FILE* fp = OS::FOpen(name.start(), "r");
   CHECK_NE(NULL, fp);
-  int new_size, pointer_size, data_size, code_size, map_size, cell_size;
+  int new_size, pointer_size, data_size, code_size, map_size, cell_size,
+      property_cell_size;
 #ifdef _MSC_VER
   // Avoid warning about unsafe fscanf from MSVC.
   // Please note that this is only fine if %c and %s are not being used.
@@ -57,6 +58,7 @@ static void ReserveSpaceForSnapshot(Deserializer* deserializer,
   CHECK_EQ(1, fscanf(fp, "code %d\n", &code_size));
   CHECK_EQ(1, fscanf(fp, "map %d\n", &map_size));
   CHECK_EQ(1, fscanf(fp, "cell %d\n", &cell_size));
+  CHECK_EQ(1, fscanf(fp, "property cell %d\n", &property_cell_size));
 #ifdef _MSC_VER
 #undef fscanf
 #endif
@@ -67,6 +69,8 @@ static void ReserveSpaceForSnapshot(Deserializer* deserializer,
   deserializer->set_reservation(CODE_SPACE, code_size);
   deserializer->set_reservation(MAP_SPACE, map_size);
   deserializer->set_reservation(CELL_SPACE, cell_size);
+  deserializer->set_reservation(PROPERTY_CELL_SPACE,
+                                property_cell_size);
   name.Dispose();
 }
 
@@ -78,6 +82,8 @@ void Snapshot::ReserveSpaceForLinkedInSnapshot(Deserializer* deserializer) {
   deserializer->set_reservation(CODE_SPACE, code_space_used_);
   deserializer->set_reservation(MAP_SPACE, map_space_used_);
   deserializer->set_reservation(CELL_SPACE, cell_space_used_);
+  deserializer->set_reservation(PROPERTY_CELL_SPACE,
+                                property_cell_space_used_);
 }
 
 
@@ -124,6 +130,8 @@ Handle<Context> Snapshot::NewContextFromSnapshot() {
   deserializer.set_reservation(CODE_SPACE, context_code_space_used_);
   deserializer.set_reservation(MAP_SPACE, context_map_space_used_);
   deserializer.set_reservation(CELL_SPACE, context_cell_space_used_);
+  deserializer.set_reservation(PROPERTY_CELL_SPACE,
+                               context_property_cell_space_used_);
   deserializer.DeserializePartial(&root);
   CHECK(root->IsContext());
   return Handle<Context>(Context::cast(root));
index 70e7ab8..54236d8 100644 (file)
@@ -49,6 +49,7 @@ const int Snapshot::data_space_used_ = 0;
 const int Snapshot::code_space_used_ = 0;
 const int Snapshot::map_space_used_ = 0;
 const int Snapshot::cell_space_used_ = 0;
+const int Snapshot::property_cell_space_used_ = 0;
 
 const int Snapshot::context_new_space_used_ = 0;
 const int Snapshot::context_pointer_space_used_ = 0;
@@ -56,5 +57,6 @@ const int Snapshot::context_data_space_used_ = 0;
 const int Snapshot::context_code_space_used_ = 0;
 const int Snapshot::context_map_space_used_ = 0;
 const int Snapshot::context_cell_space_used_ = 0;
+const int Snapshot::context_property_cell_space_used_ = 0;
 
 } }  // namespace v8::internal
index c4ae45e..149306e 100644 (file)
@@ -77,12 +77,14 @@ class Snapshot {
   static const int code_space_used_;
   static const int map_space_used_;
   static const int cell_space_used_;
+  static const int property_cell_space_used_;
   static const int context_new_space_used_;
   static const int context_pointer_space_used_;
   static const int context_data_space_used_;
   static const int context_code_space_used_;
   static const int context_map_space_used_;
   static const int context_cell_space_used_;
+  static const int context_property_cell_space_used_;
   static const int size_;
   static const int raw_size_;
   static const int context_size_;
index 099ad93..15381ea 100644 (file)
@@ -72,6 +72,7 @@ HeapObjectIterator::HeapObjectIterator(Page* page,
          owner == page->heap()->old_data_space() ||
          owner == page->heap()->map_space() ||
          owner == page->heap()->cell_space() ||
+         owner == page->heap()->property_cell_space() ||
          owner == page->heap()->code_space());
   Initialize(reinterpret_cast<PagedSpace*>(owner),
              page->area_start(),
@@ -1043,6 +1044,9 @@ intptr_t PagedSpace::SizeOfFirstPage() {
     case CELL_SPACE:
       size = 16 * kPointerSize * KB;
       break;
+    case PROPERTY_CELL_SPACE:
+      size = 8 * kPointerSize * KB;
+      break;
     case CODE_SPACE:
       if (heap()->isolate()->code_range()->exists()) {
         // When code range exists, code pages are allocated in a special way
@@ -1786,49 +1790,20 @@ static void ClearHistograms() {
 }
 
 
-static void ClearCodeKindStatistics() {
-  Isolate* isolate = Isolate::Current();
+static void ClearCodeKindStatistics(int* code_kind_statistics) {
   for (int i = 0; i < Code::NUMBER_OF_KINDS; i++) {
-    isolate->code_kind_statistics()[i] = 0;
+    code_kind_statistics[i] = 0;
   }
 }
 
 
-static void ReportCodeKindStatistics() {
-  Isolate* isolate = Isolate::Current();
-  const char* table[Code::NUMBER_OF_KINDS] = { NULL };
-
-#define CASE(name)                            \
-  case Code::name: table[Code::name] = #name; \
-  break
-
-  for (int i = 0; i < Code::NUMBER_OF_KINDS; i++) {
-    switch (static_cast<Code::Kind>(i)) {
-      CASE(FUNCTION);
-      CASE(OPTIMIZED_FUNCTION);
-      CASE(STUB);
-      CASE(BUILTIN);
-      CASE(LOAD_IC);
-      CASE(KEYED_LOAD_IC);
-      CASE(STORE_IC);
-      CASE(KEYED_STORE_IC);
-      CASE(CALL_IC);
-      CASE(KEYED_CALL_IC);
-      CASE(UNARY_OP_IC);
-      CASE(BINARY_OP_IC);
-      CASE(COMPARE_IC);
-      CASE(COMPARE_NIL_IC);
-      CASE(TO_BOOLEAN_IC);
-    }
-  }
-
-#undef CASE
-
+static void ReportCodeKindStatistics(int* code_kind_statistics) {
   PrintF("\n   Code kind histograms: \n");
   for (int i = 0; i < Code::NUMBER_OF_KINDS; i++) {
-    if (isolate->code_kind_statistics()[i] > 0) {
-      PrintF("     %-20s: %10d bytes\n", table[i],
-          isolate->code_kind_statistics()[i]);
+    if (code_kind_statistics[i] > 0) {
+      PrintF("     %-20s: %10d bytes\n",
+             Code::Kind2String(static_cast<Code::Kind>(i)),
+             code_kind_statistics[i]);
     }
   }
   PrintF("\n");
@@ -1836,7 +1811,7 @@ static void ReportCodeKindStatistics() {
 
 
 static int CollectHistogramInfo(HeapObject* obj) {
-  Isolate* isolate = Isolate::Current();
+  Isolate* isolate = obj->GetIsolate();
   InstanceType type = obj->map()->instance_type();
   ASSERT(0 <= type && type <= LAST_TYPE);
   ASSERT(isolate->heap_histograms()[type].name() != NULL);
@@ -2114,13 +2089,13 @@ FreeListNode* FreeListCategory::PickNodeFromList(int *node_size) {
 
   while (node != NULL &&
          Page::FromAddress(node->address())->IsEvacuationCandidate()) {
-    available_ -= node->Size();
+    available_ -= reinterpret_cast<FreeSpace*>(node)->Size();
     node = node->next();
   }
 
   if (node != NULL) {
     set_top(node->next());
-    *node_size = node->Size();
+    *node_size = reinterpret_cast<FreeSpace*>(node)->Size();
     available_ -= *node_size;
   } else {
     set_top(NULL);
@@ -2134,6 +2109,18 @@ FreeListNode* FreeListCategory::PickNodeFromList(int *node_size) {
 }
 
 
+FreeListNode* FreeListCategory::PickNodeFromList(int size_in_bytes,
+                                                 int *node_size) {
+  FreeListNode* node = PickNodeFromList(node_size);
+  if (node != NULL && *node_size < size_in_bytes) {
+    Free(node, *node_size);
+    *node_size = 0;
+    return NULL;
+  }
+  return node;
+}
+
+
 void FreeListCategory::Free(FreeListNode* node, int size_in_bytes) {
   node->set_next(top_);
   top_ = node;
@@ -2223,8 +2210,10 @@ FreeListNode* FreeList::FindNodeFor(int size_in_bytes, int* node_size) {
   if (size_in_bytes <= kSmallAllocationMax) {
     node = small_list_.PickNodeFromList(node_size);
     if (node != NULL) {
+      ASSERT(size_in_bytes <= *node_size);
       page = Page::FromAddress(node->address());
       page->add_available_in_small_free_list(-(*node_size));
+      ASSERT(IsVeryLong() || available() == SumFreeLists());
       return node;
     }
   }
@@ -2232,8 +2221,10 @@ FreeListNode* FreeList::FindNodeFor(int size_in_bytes, int* node_size) {
   if (size_in_bytes <= kMediumAllocationMax) {
     node = medium_list_.PickNodeFromList(node_size);
     if (node != NULL) {
+      ASSERT(size_in_bytes <= *node_size);
       page = Page::FromAddress(node->address());
       page->add_available_in_medium_free_list(-(*node_size));
+      ASSERT(IsVeryLong() || available() == SumFreeLists());
       return node;
     }
   }
@@ -2241,8 +2232,10 @@ FreeListNode* FreeList::FindNodeFor(int size_in_bytes, int* node_size) {
   if (size_in_bytes <= kLargeAllocationMax) {
     node = large_list_.PickNodeFromList(node_size);
     if (node != NULL) {
+      ASSERT(size_in_bytes <= *node_size);
       page = Page::FromAddress(node->address());
       page->add_available_in_large_free_list(-(*node_size));
+      ASSERT(IsVeryLong() || available() == SumFreeLists());
       return node;
     }
   }
@@ -2285,10 +2278,37 @@ FreeListNode* FreeList::FindNodeFor(int size_in_bytes, int* node_size) {
   if (huge_list_.top() == NULL) {
     huge_list_.set_end(NULL);
   }
-
   huge_list_.set_available(huge_list_available);
-  ASSERT(IsVeryLong() || available() == SumFreeLists());
 
+  if (node != NULL) {
+    ASSERT(IsVeryLong() || available() == SumFreeLists());
+    return node;
+  }
+
+  if (size_in_bytes <= kSmallListMax) {
+    node = small_list_.PickNodeFromList(size_in_bytes, node_size);
+    if (node != NULL) {
+      ASSERT(size_in_bytes <= *node_size);
+      page = Page::FromAddress(node->address());
+      page->add_available_in_small_free_list(-(*node_size));
+    }
+  } else if (size_in_bytes <= kMediumListMax) {
+    node = medium_list_.PickNodeFromList(size_in_bytes, node_size);
+    if (node != NULL) {
+      ASSERT(size_in_bytes <= *node_size);
+      page = Page::FromAddress(node->address());
+      page->add_available_in_medium_free_list(-(*node_size));
+    }
+  } else if (size_in_bytes <= kLargeListMax) {
+    node = large_list_.PickNodeFromList(size_in_bytes, node_size);
+    if (node != NULL) {
+      ASSERT(size_in_bytes <= *node_size);
+      page = Page::FromAddress(node->address());
+      page->add_available_in_large_free_list(-(*node_size));
+    }
+  }
+
+  ASSERT(IsVeryLong() || available() == SumFreeLists());
   return node;
 }
 
@@ -2665,7 +2685,7 @@ void PagedSpace::ReportCodeStatistics() {
   Isolate* isolate = Isolate::Current();
   CommentStatistic* comments_statistics =
       isolate->paged_space_comments_statistics();
-  ReportCodeKindStatistics();
+  ReportCodeKindStatistics(isolate->code_kind_statistics());
   PrintF("Code comment statistics (\"   [ comment-txt   :    size/   "
          "count  (average)\"):\n");
   for (int i = 0; i <= CommentStatistic::kMaxComments; i++) {
@@ -2683,7 +2703,7 @@ void PagedSpace::ResetCodeStatistics() {
   Isolate* isolate = Isolate::Current();
   CommentStatistic* comments_statistics =
       isolate->paged_space_comments_statistics();
-  ClearCodeKindStatistics();
+  ClearCodeKindStatistics(isolate->code_kind_statistics());
   for (int i = 0; i < CommentStatistic::kMaxComments; i++) {
     comments_statistics[i].Clear();
   }
@@ -2834,14 +2854,21 @@ void MapSpace::VerifyObject(HeapObject* object) {
 
 
 // -----------------------------------------------------------------------------
-// GlobalPropertyCellSpace implementation
+// CellSpace and PropertyCellSpace implementation
 // TODO(mvstanton): this is weird...the compiler can't make a vtable unless
 // there is at least one non-inlined virtual function. I would prefer to hide
 // the VerifyObject definition behind VERIFY_HEAP.
 
 void CellSpace::VerifyObject(HeapObject* object) {
   // The object should be a global object property cell or a free-list node.
-  CHECK(object->IsJSGlobalPropertyCell() ||
+  CHECK(object->IsCell() ||
+         object->map() == heap()->two_pointer_filler_map());
+}
+
+
+void PropertyCellSpace::VerifyObject(HeapObject* object) {
+  // The object should be a global object property cell or a free-list node.
+  CHECK(object->IsPropertyCell() ||
          object->map() == heap()->two_pointer_filler_map());
 }
 
index e7e4d52..dda5591 100644 (file)
@@ -32,6 +32,7 @@
 #include "hashmap.h"
 #include "list.h"
 #include "log.h"
+#include "v8utils.h"
 
 namespace v8 {
 namespace internal {
@@ -1454,6 +1455,7 @@ class FreeListCategory {
   void Free(FreeListNode* node, int size_in_bytes);
 
   FreeListNode* PickNodeFromList(int *node_size);
+  FreeListNode* PickNodeFromList(int size_in_bytes, int *node_size);
 
   intptr_t EvictFreeListItemsInList(Page* p);
 
@@ -2626,20 +2628,20 @@ class MapSpace : public FixedSpace {
 
 
 // -----------------------------------------------------------------------------
-// Old space for all global object property cell objects
+// Old space for simple property cell objects
 
 class CellSpace : public FixedSpace {
  public:
   // Creates a property cell space object with a maximum capacity.
   CellSpace(Heap* heap, intptr_t max_capacity, AllocationSpace id)
-      : FixedSpace(heap, max_capacity, id, JSGlobalPropertyCell::kSize)
+      : FixedSpace(heap, max_capacity, id, Cell::kSize)
   {}
 
   virtual int RoundSizeDownToObjectAlignment(int size) {
-    if (IsPowerOf2(JSGlobalPropertyCell::kSize)) {
-      return RoundDown(size, JSGlobalPropertyCell::kSize);
+    if (IsPowerOf2(Cell::kSize)) {
+      return RoundDown(size, Cell::kSize);
     } else {
-      return (size / JSGlobalPropertyCell::kSize) * JSGlobalPropertyCell::kSize;
+      return (size / Cell::kSize) * Cell::kSize;
     }
   }
 
@@ -2652,6 +2654,33 @@ class CellSpace : public FixedSpace {
 
 
 // -----------------------------------------------------------------------------
+// Old space for all global object property cell objects
+
+class PropertyCellSpace : public FixedSpace {
+ public:
+  // Creates a property cell space object with a maximum capacity.
+  PropertyCellSpace(Heap* heap, intptr_t max_capacity,
+                    AllocationSpace id)
+      : FixedSpace(heap, max_capacity, id, PropertyCell::kSize)
+  {}
+
+  virtual int RoundSizeDownToObjectAlignment(int size) {
+    if (IsPowerOf2(PropertyCell::kSize)) {
+      return RoundDown(size, PropertyCell::kSize);
+    } else {
+      return (size / PropertyCell::kSize) * PropertyCell::kSize;
+    }
+  }
+
+ protected:
+  virtual void VerifyObject(HeapObject* obj);
+
+ public:
+  TRACK_MEMORY("PropertyCellSpace")
+};
+
+
+// -----------------------------------------------------------------------------
 // Large objects ( > Page::kMaxHeapObjectSize ) are allocated and managed by
 // the large object space. A large object is allocated from OS heap with
 // extra padding bytes (Page::kPageSize + Page::kObjectStartOffset).
index c650f57..0386280 100644 (file)
@@ -121,6 +121,7 @@ void StoreBuffer::TearDown() {
 
 void StoreBuffer::StoreBufferOverflow(Isolate* isolate) {
   isolate->heap()->store_buffer()->Compact();
+  isolate->counters()->store_buffer_overflows()->Increment();
 }
 
 
@@ -142,6 +143,11 @@ void StoreBuffer::Uniq() {
 }
 
 
+bool StoreBuffer::SpaceAvailable(intptr_t space_needed) {
+  return old_limit_ - old_top_ >= space_needed;
+}
+
+
 void StoreBuffer::EnsureSpace(intptr_t space_needed) {
   while (old_limit_ - old_top_ < space_needed &&
          old_limit_ < old_reserved_limit_) {
@@ -152,7 +158,7 @@ void StoreBuffer::EnsureSpace(intptr_t space_needed) {
     old_limit_ += grow;
   }
 
-  if (old_limit_ - old_top_ >= space_needed) return;
+  if (SpaceAvailable(space_needed)) return;
 
   if (old_buffer_is_filtered_) return;
   ASSERT(may_move_store_buffer_entries_);
@@ -171,9 +177,7 @@ void StoreBuffer::EnsureSpace(intptr_t space_needed) {
     Filter(MemoryChunk::SCAN_ON_SCAVENGE);
   }
 
-  // If filtering out the entries from scan_on_scavenge pages got us down to
-  // less than half full, then we are satisfied with that.
-  if (old_limit_ - old_top_ > old_top_ - old_start_) return;
+  if (SpaceAvailable(space_needed)) return;
 
   // Sample 1 entry in 97 and filter out the pages where we estimate that more
   // than 1 in 8 pointers are to new space.
@@ -192,7 +196,7 @@ void StoreBuffer::EnsureSpace(intptr_t space_needed) {
     ExemptPopularPages(samples[i].prime_sample_step, samples[i].threshold);
     // As a last resort we mark all pages as being exempt from the store buffer.
     ASSERT(i != (kSampleFinenesses - 1) || old_top_ == old_start_);
-    if (old_limit_ - old_top_ > old_top_ - old_start_) return;
+    if (SpaceAvailable(space_needed)) return;
   }
   UNREACHABLE();
 }
@@ -294,7 +298,7 @@ bool StoreBuffer::PrepareForIteration() {
 void StoreBuffer::Clean() {
   ClearFilteringHashSets();
   Uniq();  // Also removes things that no longer point to new space.
-  CheckForFullBuffer();
+  EnsureSpace(kStoreBufferSize / 2);
 }
 
 
@@ -687,12 +691,6 @@ void StoreBuffer::Compact() {
     ASSERT(old_top_ <= old_limit_);
   }
   heap_->isolate()->counters()->store_buffer_compactions()->Increment();
-  CheckForFullBuffer();
-}
-
-
-void StoreBuffer::CheckForFullBuffer() {
-  EnsureSpace(kStoreBufferSize * 2);
 }
 
 } }  // namespace v8::internal
index 514534a..520cbc0 100644 (file)
@@ -160,7 +160,7 @@ class StoreBuffer {
 
   void ClearFilteringHashSets();
 
-  void CheckForFullBuffer();
+  bool SpaceAvailable(intptr_t space_needed);
   void Uniq();
   void ExemptPopularPages(int prime_sample_step, int threshold);
 
@@ -223,7 +223,6 @@ class StoreBufferRebuildScope {
   ~StoreBufferRebuildScope() {
     store_buffer_->callback_ = stored_callback_;
     store_buffer_->store_buffer_rebuilding_enabled_ = stored_state_;
-    store_buffer_->CheckForFullBuffer();
   }
 
  private:
index 1096225..9c4394e 100644 (file)
@@ -471,7 +471,7 @@ void StringStream::PrintSecurityTokenIfChanged(Object* f) {
   }
 
   JSFunction* fun = JSFunction::cast(f);
-  Object* perhaps_context = fun->unchecked_context();
+  Object* perhaps_context = fun->context();
   if (perhaps_context->IsHeapObject() &&
       heap->Contains(HeapObject::cast(perhaps_context)) &&
       perhaps_context->IsContext()) {
index 44315bb..7e18687 100644 (file)
@@ -495,8 +495,7 @@ function StringReplaceGlobalRegExpWithFunction(subject, regexp, replace) {
       }
     }
   }
-  var resultBuilder = new ReplaceResultBuilder(subject, res);
-  var result = resultBuilder.generate();
+  var result = %StringBuilderConcat(res, res.length, subject);
   resultArray.length = 0;
   reusableReplaceArray = resultArray;
   return result;
@@ -645,6 +644,8 @@ function StringSplit(separator, limit) {
 }
 
 
+var ArrayPushBuiltin = $Array.prototype.push;
+
 function StringSplitOnRegExp(subject, separator, limit, length) {
   %_Log('regexp', 'regexp-split,%0S,%1r', [subject, separator]);
 
@@ -664,13 +665,15 @@ function StringSplitOnRegExp(subject, separator, limit, length) {
   while (true) {
 
     if (startIndex === length) {
-      result.push(%_SubString(subject, currentIndex, length));
+      %_CallFunction(result, %_SubString(subject, currentIndex, length),
+                     ArrayPushBuiltin);
       break;
     }
 
     var matchInfo = DoRegExpExec(separator, subject, startIndex);
     if (matchInfo == null || length === (startMatch = matchInfo[CAPTURE0])) {
-      result.push(%_SubString(subject, currentIndex, length));
+      %_CallFunction(result, %_SubString(subject, currentIndex, length),
+                     ArrayPushBuiltin);
       break;
     }
     var endIndex = matchInfo[CAPTURE1];
@@ -681,7 +684,8 @@ function StringSplitOnRegExp(subject, separator, limit, length) {
       continue;
     }
 
-    result.push(%_SubString(subject, currentIndex, startMatch));
+    %_CallFunction(result, %_SubString(subject, currentIndex, startMatch),
+                   ArrayPushBuiltin);
 
     if (result.length === limit) break;
 
@@ -690,9 +694,10 @@ function StringSplitOnRegExp(subject, separator, limit, length) {
       var start = matchInfo[i++];
       var end = matchInfo[i++];
       if (end != -1) {
-        result.push(%_SubString(subject, start, end));
+        %_CallFunction(result, %_SubString(subject, start, end),
+                       ArrayPushBuiltin);
       } else {
-        result.push(void 0);
+        %_CallFunction(result, void 0, ArrayPushBuiltin);
       }
       if (result.length === limit) break outer_loop;
     }
@@ -950,43 +955,6 @@ function StringSup() {
   return "<sup>" + this + "</sup>";
 }
 
-
-// ReplaceResultBuilder support.
-function ReplaceResultBuilder(str) {
-  if (%_ArgumentsLength() > 1) {
-    this.elements = %_Arguments(1);
-  } else {
-    this.elements = new InternalArray();
-  }
-  this.special_string = str;
-}
-
-SetUpLockedPrototype(ReplaceResultBuilder,
-  $Array("elements", "special_string"), $Array(
-  "add", function(str) {
-    str = TO_STRING_INLINE(str);
-    if (str.length > 0) this.elements.push(str);
-  },
-  "addSpecialSlice", function(start, end) {
-    var len = end - start;
-    if (start < 0 || len <= 0) return;
-    if (start < 0x80000 && len < 0x800) {
-      this.elements.push((start << 11) | len);
-    } else {
-      // 0 < len <= String::kMaxLength and Smi::kMaxValue >= String::kMaxLength,
-      // so -len is a smi.
-      var elements = this.elements;
-      elements.push(-len);
-      elements.push(start);
-    }
-  },
-  "generate", function() {
-    var elements = this.elements;
-    return %StringBuilderConcat(elements, elements.length, this.special_string);
-  }
-));
-
-
 // -------------------------------------------------------------------
 
 function SetUpString() {
index dfe2fb7..a1774b6 100644 (file)
@@ -175,7 +175,7 @@ static void ReadDiyFp(Vector<const char> buffer,
 static bool DoubleStrtod(Vector<const char> trimmed,
                          int exponent,
                          double* result) {
-#if (defined(V8_TARGET_ARCH_IA32) || defined(USE_SIMULATOR)) \
+#if (V8_TARGET_ARCH_IA32 || defined(USE_SIMULATOR)) \
     && !defined(_MSC_VER)
   // On x86 the floating-point stack can be 64 or 80 bits wide. If it is
   // 80 bits wide (as is the case on Linux) then double-rounding occurs and the
index 0f81669..62ac2c8 100644 (file)
@@ -31,6 +31,7 @@
 #include "arguments.h"
 #include "ast.h"
 #include "code-stubs.h"
+#include "cpu-profiler.h"
 #include "gdb-jit.h"
 #include "ic-inl.h"
 #include "stub-cache.h"
@@ -43,7 +44,7 @@ namespace internal {
 // StubCache implementation.
 
 
-StubCache::StubCache(Isolate* isolate, Zone* zone)
+StubCache::StubCache(Isolate* isolate)
     : isolate_(isolate) {
   ASSERT(isolate == Isolate::Current());
 }
@@ -321,7 +322,7 @@ Handle<Code> StubCache::ComputeLoadNormal(Handle<Name> name,
 Handle<Code> StubCache::ComputeLoadGlobal(Handle<Name> name,
                                           Handle<JSObject> receiver,
                                           Handle<GlobalObject> holder,
-                                          Handle<JSGlobalPropertyCell> cell,
+                                          Handle<PropertyCell> cell,
                                           bool is_dont_delete) {
   Handle<JSObject> stub_holder = StubHolder(receiver, holder);
   Handle<Code> stub = FindIC(name, stub_holder, Code::LOAD_IC, Code::NORMAL);
@@ -497,7 +498,7 @@ Handle<Code> StubCache::ComputeStoreNormal(StrictModeFlag strict_mode) {
 
 Handle<Code> StubCache::ComputeStoreGlobal(Handle<Name> name,
                                            Handle<GlobalObject> receiver,
-                                           Handle<JSGlobalPropertyCell> cell,
+                                           Handle<PropertyCell> cell,
                                            StrictModeFlag strict_mode) {
   Handle<Code> stub = FindIC(
       name, Handle<JSObject>::cast(receiver),
@@ -644,7 +645,10 @@ Handle<Code> StubCache::ComputeCallConstant(int argc,
   PROFILE(isolate_,
           CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), *code, *name));
   GDBJIT(AddCode(GDBJITInterface::CALL_IC, *name, *code));
-  JSObject::UpdateMapCodeCache(stub_holder, name, code);
+
+  if (CallStubCompiler::CanBeCached(function)) {
+    JSObject::UpdateMapCodeCache(stub_holder, name, code);
+  }
   return code;
 }
 
@@ -734,7 +738,7 @@ Handle<Code> StubCache::ComputeCallGlobal(int argc,
                                           Handle<Name> name,
                                           Handle<JSObject> receiver,
                                           Handle<GlobalObject> holder,
-                                          Handle<JSGlobalPropertyCell> cell,
+                                          Handle<PropertyCell> cell,
                                           Handle<JSFunction> function) {
   InlineCacheHolderFlag cache_holder =
       IC::GetCodeCacheForObject(*receiver, *holder);
@@ -753,7 +757,9 @@ Handle<Code> StubCache::ComputeCallGlobal(int argc,
   PROFILE(isolate(),
           CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), *code, *name));
   GDBJIT(AddCode(GDBJITInterface::CALL_IC, *name, *code));
-  JSObject::UpdateMapCodeCache(stub_holder, name, code);
+  if (CallStubCompiler::CanBeCached(function)) {
+    JSObject::UpdateMapCodeCache(stub_holder, name, code);
+  }
   return code;
 }
 
@@ -1108,12 +1114,7 @@ RUNTIME_FUNCTION(MaybeObject*, StoreCallbackProperty) {
   LOG(isolate, ApiNamedPropertyAccess("store", recv, *name));
   PropertyCallbackArguments
       custom_args(isolate, callback->data(), recv, recv);
-  {
-    // Leaving JavaScript.
-    VMState<EXTERNAL> state(isolate);
-    ExternalCallbackScope call_scope(isolate, setter_address);
-    custom_args.Call(fun, v8::Utils::ToLocal(str), v8::Utils::ToLocal(value));
-  }
+  custom_args.Call(fun, v8::Utils::ToLocal(str), v8::Utils::ToLocal(value));
   RETURN_IF_SCHEDULED_EXCEPTION(isolate);
   return *value;
 }
@@ -1159,12 +1160,8 @@ RUNTIME_FUNCTION(MaybeObject*, LoadPropertyWithInterceptorOnly) {
   {
     // Use the interceptor getter.
     HandleScope scope(isolate);
-    v8::Handle<v8::Value> r;
-    {
-      // Leaving JavaScript.
-      VMState<EXTERNAL> state(isolate);
-      r = callback_args.Call(getter, v8::Utils::ToLocal(name));
-    }
+    v8::Handle<v8::Value> r =
+        callback_args.Call(getter, v8::Utils::ToLocal(name));
     RETURN_IF_SCHEDULED_EXCEPTION(isolate);
     if (!r.IsEmpty()) {
       Handle<Object> result = v8::Utils::OpenHandle(*r);
@@ -1229,12 +1226,8 @@ static MaybeObject* LoadWithInterceptor(Arguments* args,
   {
     // Use the interceptor getter.
     HandleScope scope(isolate);
-    v8::Handle<v8::Value> r;
-    {
-      // Leaving JavaScript.
-      VMState<EXTERNAL> state(isolate);
-      r = callback_args.Call(getter, v8::Utils::ToLocal(name));
-    }
+    v8::Handle<v8::Value> r =
+        callback_args.Call(getter, v8::Utils::ToLocal(name));
     RETURN_IF_SCHEDULED_EXCEPTION(isolate);
     if (!r.IsEmpty()) {
       *attrs = NONE;
@@ -1974,12 +1967,25 @@ bool CallStubCompiler::HasCustomCallGenerator(Handle<JSFunction> function) {
 }
 
 
+bool CallStubCompiler::CanBeCached(Handle<JSFunction> function) {
+  if (function->shared()->HasBuiltinFunctionId()) {
+    BuiltinFunctionId id = function->shared()->builtin_function_id();
+#define CALL_GENERATOR_CASE(name) if (id == k##name) return false;
+    SITE_SPECIFIC_CALL_GENERATORS(CALL_GENERATOR_CASE)
+#undef CALL_GENERATOR_CASE
+  }
+
+  return true;
+}
+
+
 Handle<Code> CallStubCompiler::CompileCustomCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> fname) {
+    Handle<String> fname,
+    Code::StubType type) {
   ASSERT(HasCustomCallGenerator(function));
 
   if (function->shared()->HasBuiltinFunctionId()) {
@@ -1990,7 +1996,8 @@ Handle<Code> CallStubCompiler::CompileCustomCall(
                                                    holder,      \
                                                    cell,        \
                                                    function,    \
-                                                   fname);      \
+                                                   fname,       \
+                                                   type);       \
     }
     CUSTOM_CALL_IC_GENERATORS(CALL_GENERATOR_CASE)
 #undef CALL_GENERATOR_CASE
index a1b55d8..6d70d34 100644 (file)
@@ -140,7 +140,7 @@ class StubCache {
   Handle<Code> ComputeLoadGlobal(Handle<Name> name,
                                  Handle<JSObject> object,
                                  Handle<GlobalObject> holder,
-                                 Handle<JSGlobalPropertyCell> cell,
+                                 Handle<PropertyCell> cell,
                                  bool is_dont_delete);
 
   // ---
@@ -183,7 +183,7 @@ class StubCache {
 
   Handle<Code> ComputeStoreGlobal(Handle<Name> name,
                                   Handle<GlobalObject> object,
-                                  Handle<JSGlobalPropertyCell> cell,
+                                  Handle<PropertyCell> cell,
                                   StrictModeFlag strict_mode);
 
   Handle<Code> ComputeStoreCallback(Handle<Name> name,
@@ -251,7 +251,7 @@ class StubCache {
                                  Handle<Name> name,
                                  Handle<JSObject> object,
                                  Handle<GlobalObject> holder,
-                                 Handle<JSGlobalPropertyCell> cell,
+                                 Handle<PropertyCell> cell,
                                  Handle<JSFunction> function);
 
   // ---
@@ -367,7 +367,7 @@ class StubCache {
   Factory* factory() { return isolate()->factory(); }
 
  private:
-  StubCache(Isolate* isolate, Zone* zone);
+  explicit StubCache(Isolate* isolate);
 
   Handle<Code> ComputeCallInitialize(int argc,
                                      RelocInfo::Mode mode,
@@ -765,7 +765,7 @@ class LoadStubCompiler: public BaseLoadStubCompiler {
 
   Handle<Code> CompileLoadGlobal(Handle<JSObject> object,
                                  Handle<GlobalObject> holder,
-                                 Handle<JSGlobalPropertyCell> cell,
+                                 Handle<PropertyCell> cell,
                                  Handle<Name> name,
                                  bool is_dont_delete);
 
@@ -890,7 +890,7 @@ class StoreStubCompiler: public BaseStoreStubCompiler {
                                        Handle<Name> name);
 
   Handle<Code> CompileStoreGlobal(Handle<GlobalObject> object,
-                                  Handle<JSGlobalPropertyCell> holder,
+                                  Handle<PropertyCell> holder,
                                   Handle<Name> name);
 
  private:
@@ -969,7 +969,12 @@ class KeyedStoreStubCompiler: public BaseStoreStubCompiler {
   V(StringCharAt)                               \
   V(StringFromCharCode)                         \
   V(MathFloor)                                  \
-  V(MathAbs)
+  V(MathAbs)                                    \
+  V(ArrayCode)
+
+
+#define SITE_SPECIFIC_CALL_GENERATORS(V)        \
+  V(ArrayCode)
 
 
 class CallOptimization;
@@ -1007,11 +1012,12 @@ class CallStubCompiler: public StubCompiler {
 
   Handle<Code> CompileCallGlobal(Handle<JSObject> object,
                                  Handle<GlobalObject> holder,
-                                 Handle<JSGlobalPropertyCell> cell,
+                                 Handle<PropertyCell> cell,
                                  Handle<JSFunction> function,
                                  Handle<Name> name);
 
   static bool HasCustomCallGenerator(Handle<JSFunction> function);
+  static bool CanBeCached(Handle<JSFunction> function);
 
  private:
   // Compiles a custom call constant/global IC.  For constant calls cell is
@@ -1019,23 +1025,25 @@ class CallStubCompiler: public StubCompiler {
   // given function.
   Handle<Code> CompileCustomCall(Handle<Object> object,
                                  Handle<JSObject> holder,
-                                 Handle<JSGlobalPropertyCell> cell,
+                                 Handle<Cell> cell,
                                  Handle<JSFunction> function,
-                                 Handle<String> name);
+                                 Handle<String> name,
+                                 Code::StubType type);
 
 #define DECLARE_CALL_GENERATOR(name)                                    \
   Handle<Code> Compile##name##Call(Handle<Object> object,               \
                                    Handle<JSObject> holder,             \
-                                   Handle<JSGlobalPropertyCell> cell,   \
+                                   Handle<Cell> cell,                   \
                                    Handle<JSFunction> function,         \
-                                   Handle<String> fname);
+                                   Handle<String> fname,                \
+                                   Code::StubType type);
   CUSTOM_CALL_IC_GENERATORS(DECLARE_CALL_GENERATOR)
 #undef DECLARE_CALL_GENERATOR
 
   Handle<Code> CompileFastApiCall(const CallOptimization& optimization,
                                   Handle<Object> object,
                                   Handle<JSObject> holder,
-                                  Handle<JSGlobalPropertyCell> cell,
+                                  Handle<Cell> cell,
                                   Handle<JSFunction> function,
                                   Handle<String> name);
 
@@ -1053,7 +1061,7 @@ class CallStubCompiler: public StubCompiler {
 
   // Generates code to load the function from the cell checking that
   // it still contains the same function.
-  void GenerateLoadFunctionFromCell(Handle<JSGlobalPropertyCell> cell,
+  void GenerateLoadFunctionFromCell(Handle<Cell> cell,
                                     Handle<JSFunction> function,
                                     Label* miss);
 
index 099f5d1..ede567a 100644 (file)
@@ -93,6 +93,7 @@ void SweeperThread::Stop() {
   Release_Store(&stop_thread_, static_cast<AtomicWord>(true));
   start_sweeping_semaphore_->Signal();
   stop_semaphore_->Wait();
+  Join();
 }
 
 
index cabd37a..6c3de3e 100644 (file)
@@ -26,6 +26,9 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 {
+  'variables': {
+    'v8_code': 1,
+  },
   'includes': ['../../../build/common.gypi'],
   'targets': [
     {
index d3f7a68..0f35290 100644 (file)
@@ -192,8 +192,7 @@ void VTUNEJITInterface::event_handler(const v8::JitCodeEvent* event) {
         if (*script != NULL) {
           // Get the source file name and set it to jmethod.source_file_name
          if ((*script->GetScriptName())->IsString()) {
-            Handle<String> script_name =
-                Handle<String>(String::Cast(*script->GetScriptName()));
+            Handle<String> script_name = script->GetScriptName()->ToString();
             temp_file_name = new char[script_name->Utf8Length() + 1];
             script_name->WriteUtf8(temp_file_name);
             jmethod.source_file_name = temp_file_name;
index 5113c55..83eb9c4 100644 (file)
@@ -42,20 +42,17 @@ namespace v8 {
 namespace internal {
 
 
-TypeInfo TypeInfo::TypeFromValue(Handle<Object> value) {
-  TypeInfo info;
+TypeInfo TypeInfo::FromValue(Handle<Object> value) {
   if (value->IsSmi()) {
-    info = TypeInfo::Smi();
+    return TypeInfo::Smi();
   } else if (value->IsHeapNumber()) {
-    info = TypeInfo::IsInt32Double(HeapNumber::cast(*value)->value())
+    return TypeInfo::IsInt32Double(HeapNumber::cast(*value)->value())
         ? TypeInfo::Integer32()
         : TypeInfo::Double();
   } else if (value->IsString()) {
-    info = TypeInfo::String();
-  } else {
-    info = TypeInfo::Unknown();
+    return TypeInfo::String();
   }
-  return info;
+  return TypeInfo::Unknown();
 }
 
 
@@ -80,8 +77,8 @@ Handle<Object> TypeFeedbackOracle::GetInfo(TypeFeedbackId ast_id) {
   int entry = dictionary_->FindEntry(IdToKey(ast_id));
   if (entry != UnseededNumberDictionary::kNotFound) {
     Object* value = dictionary_->ValueAt(entry);
-    if (value->IsJSGlobalPropertyCell()) {
-      JSGlobalPropertyCell* cell = JSGlobalPropertyCell::cast(value);
+    if (value->IsCell()) {
+      Cell* cell = Cell::cast(value);
       return Handle<Object>(cell->value(), isolate_);
     } else {
       return Handle<Object>(value, isolate_);
@@ -91,15 +88,14 @@ Handle<Object> TypeFeedbackOracle::GetInfo(TypeFeedbackId ast_id) {
 }
 
 
-Handle<JSGlobalPropertyCell> TypeFeedbackOracle::GetInfoCell(
+Handle<Cell> TypeFeedbackOracle::GetInfoCell(
     TypeFeedbackId ast_id) {
   int entry = dictionary_->FindEntry(IdToKey(ast_id));
   if (entry != UnseededNumberDictionary::kNotFound) {
-    JSGlobalPropertyCell* cell = JSGlobalPropertyCell::cast(
-        dictionary_->ValueAt(entry));
-    return Handle<JSGlobalPropertyCell>(cell, isolate_);
+    Cell* cell = Cell::cast(dictionary_->ValueAt(entry));
+    return Handle<Cell>(cell, isolate_);
   }
-  return Handle<JSGlobalPropertyCell>::null();
+  return Handle<Cell>::null();
 }
 
 
@@ -142,6 +138,15 @@ bool TypeFeedbackOracle::LoadIsPolymorphic(Property* expr) {
 }
 
 
+bool TypeFeedbackOracle::StoreIsUninitialized(TypeFeedbackId ast_id) {
+  Handle<Object> map_or_code = GetInfo(ast_id);
+  if (map_or_code->IsMap()) return false;
+  if (!map_or_code->IsCode()) return true;
+  Handle<Code> code = Handle<Code>::cast(map_or_code);
+  return code->ic_state() == UNINITIALIZED;
+}
+
+
 bool TypeFeedbackOracle::StoreIsMonomorphicNormal(TypeFeedbackId ast_id) {
   Handle<Object> map_or_code = GetInfo(ast_id);
   if (map_or_code->IsMap()) return true;
@@ -235,24 +240,6 @@ Handle<Map> TypeFeedbackOracle::StoreMonomorphicReceiverType(
 }
 
 
-Handle<Map> TypeFeedbackOracle::CompareNilMonomorphicReceiverType(
-    CompareOperation* expr) {
-  Handle<Object> maybe_code = GetInfo(expr->CompareOperationFeedbackId());
-  if (maybe_code->IsCode()) {
-    Map* map = Handle<Code>::cast(maybe_code)->FindFirstMap();
-    if (map == NULL) return Handle<Map>();
-    map = map->CurrentMapForDeprecated();
-    return map == NULL || CanRetainOtherContext(map, *native_context_)
-           ? Handle<Map>()
-           : Handle<Map>(map);
-  } else if (maybe_code->IsMap()) {
-    ASSERT(!Handle<Map>::cast(maybe_code)->is_deprecated());
-    return Handle<Map>::cast(maybe_code);
-  }
-  return Handle<Map>();
-}
-
-
 KeyedAccessStoreMode TypeFeedbackOracle::GetStoreMode(
     TypeFeedbackId ast_id) {
   Handle<Object> map_or_code = GetInfo(ast_id);
@@ -269,7 +256,9 @@ KeyedAccessStoreMode TypeFeedbackOracle::GetStoreMode(
 void TypeFeedbackOracle::LoadReceiverTypes(Property* expr,
                                            Handle<String> name,
                                            SmallMapList* types) {
-  Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC);
+  Code::Flags flags = Code::ComputeFlags(
+      Code::STUB, MONOMORPHIC, Code::kNoExtraICState,
+      Code::NORMAL, Code::LOAD_IC);
   CollectReceiverTypes(expr->PropertyFeedbackId(), name, flags, types);
 }
 
@@ -335,8 +324,7 @@ Handle<JSFunction> TypeFeedbackOracle::GetCallNewTarget(CallNew* expr) {
 }
 
 
-Handle<JSGlobalPropertyCell> TypeFeedbackOracle::GetCallNewAllocationInfoCell(
-    CallNew* expr) {
+Handle<Cell> TypeFeedbackOracle::GetCallNewAllocationInfoCell(CallNew* expr) {
   return GetInfoCell(expr->CallNewFeedbackId());
 }
 
@@ -364,148 +352,84 @@ bool TypeFeedbackOracle::LoadIsStub(Property* expr, ICStub* stub) {
 }
 
 
-static TypeInfo TypeFromCompareType(CompareIC::State state) {
-  switch (state) {
-    case CompareIC::UNINITIALIZED:
-      // Uninitialized means never executed.
-      return TypeInfo::Uninitialized();
-    case CompareIC::SMI:
-      return TypeInfo::Smi();
-    case CompareIC::NUMBER:
-      return TypeInfo::Number();
-    case CompareIC::INTERNALIZED_STRING:
-      return TypeInfo::InternalizedString();
-    case CompareIC::STRING:
-      return TypeInfo::String();
-    case CompareIC::OBJECT:
-    case CompareIC::KNOWN_OBJECT:
-      // TODO(kasperl): We really need a type for JS objects here.
-      return TypeInfo::NonPrimitive();
-    case CompareIC::GENERIC:
-    default:
-      return TypeInfo::Unknown();
-  }
-}
-
-
-void TypeFeedbackOracle::CompareType(CompareOperation* expr,
-                                     TypeInfo* left_type,
-                                     TypeInfo* right_type,
-                                     TypeInfo* overall_type) {
-  Handle<Object> object = GetInfo(expr->CompareOperationFeedbackId());
-  TypeInfo unknown = TypeInfo::Unknown();
-  if (!object->IsCode()) {
-    *left_type = *right_type = *overall_type = unknown;
+void TypeFeedbackOracle::CompareType(TypeFeedbackId id,
+                                     Handle<Type>* left_type,
+                                     Handle<Type>* right_type,
+                                     Handle<Type>* combined_type) {
+  Handle<Object> info = GetInfo(id);
+  if (!info->IsCode()) {
+    // For some comparisons we don't have ICs, e.g. LiteralCompareTypeof.
+    *left_type = *right_type = *combined_type = handle(Type::None(), isolate_);
     return;
   }
-  Handle<Code> code = Handle<Code>::cast(object);
-  if (!code->is_compare_ic_stub()) {
-    *left_type = *right_type = *overall_type = unknown;
-    return;
-  }
-
-  int stub_minor_key = code->stub_info();
-  CompareIC::State left_state, right_state, handler_state;
-  ICCompareStub::DecodeMinorKey(stub_minor_key, &left_state, &right_state,
-                                &handler_state, NULL);
-  *left_type = TypeFromCompareType(left_state);
-  *right_type = TypeFromCompareType(right_state);
-  *overall_type = TypeFromCompareType(handler_state);
-}
-
+  Handle<Code> code = Handle<Code>::cast(info);
 
-Handle<Map> TypeFeedbackOracle::GetCompareMap(CompareOperation* expr) {
-  Handle<Object> object = GetInfo(expr->CompareOperationFeedbackId());
-  if (!object->IsCode()) return Handle<Map>::null();
-  Handle<Code> code = Handle<Code>::cast(object);
-  if (!code->is_compare_ic_stub()) return Handle<Map>::null();
-  CompareIC::State state = ICCompareStub::CompareState(code->stub_info());
-  if (state != CompareIC::KNOWN_OBJECT) {
-    return Handle<Map>::null();
+  Handle<Map> map;
+  Map* raw_map = code->FindFirstMap();
+  if (raw_map != NULL) {
+    raw_map = raw_map->CurrentMapForDeprecated();
+    if (raw_map != NULL && !CanRetainOtherContext(raw_map, *native_context_)) {
+      map = handle(raw_map, isolate_);
+    }
   }
-  Map* map = code->FindFirstMap()->CurrentMapForDeprecated();
-  return map == NULL || CanRetainOtherContext(map, *native_context_)
-      ? Handle<Map>::null()
-      : Handle<Map>(map);
-}
 
-
-TypeInfo TypeFeedbackOracle::UnaryType(UnaryOperation* expr) {
-  Handle<Object> object = GetInfo(expr->UnaryOperationFeedbackId());
-  TypeInfo unknown = TypeInfo::Unknown();
-  if (!object->IsCode()) return unknown;
-  Handle<Code> code = Handle<Code>::cast(object);
-  ASSERT(code->is_unary_op_stub());
-  UnaryOpIC::TypeInfo type = static_cast<UnaryOpIC::TypeInfo>(
-      code->unary_op_type());
-  switch (type) {
-    case UnaryOpIC::SMI:
-      return TypeInfo::Smi();
-    case UnaryOpIC::NUMBER:
-      return TypeInfo::Double();
-    default:
-      return unknown;
+  if (code->is_compare_ic_stub()) {
+    int stub_minor_key = code->stub_info();
+    CompareIC::StubInfoToType(
+        stub_minor_key, left_type, right_type, combined_type, map, isolate());
+  } else if (code->is_compare_nil_ic_stub()) {
+    CompareNilICStub::State state(code->compare_nil_state());
+    *combined_type = CompareNilICStub::StateToType(isolate_, state, map);
+    Handle<Type> nil_type = handle(code->compare_nil_value() == kNullValue
+        ? Type::Null() : Type::Undefined(), isolate_);
+    *left_type = *right_type =
+        handle(Type::Union(*combined_type, nil_type), isolate_);
   }
 }
 
 
-static TypeInfo TypeFromBinaryOpType(BinaryOpIC::TypeInfo binary_type) {
-  switch (binary_type) {
-    // Uninitialized means never executed.
-    case BinaryOpIC::UNINITIALIZED:  return TypeInfo::Uninitialized();
-    case BinaryOpIC::SMI:            return TypeInfo::Smi();
-    case BinaryOpIC::INT32:          return TypeInfo::Integer32();
-    case BinaryOpIC::NUMBER:         return TypeInfo::Double();
-    case BinaryOpIC::ODDBALL:        return TypeInfo::Unknown();
-    case BinaryOpIC::STRING:         return TypeInfo::String();
-    case BinaryOpIC::GENERIC:        return TypeInfo::Unknown();
+Handle<Type> TypeFeedbackOracle::UnaryType(TypeFeedbackId id) {
+  Handle<Object> object = GetInfo(id);
+  if (!object->IsCode()) {
+    return handle(Type::None(), isolate());
   }
-  UNREACHABLE();
-  return TypeInfo::Unknown();
+  Handle<Code> code = Handle<Code>::cast(object);
+  ASSERT(code->is_unary_op_stub());
+  return UnaryOpIC::TypeInfoToType(
+      static_cast<UnaryOpIC::TypeInfo>(code->unary_op_type()), isolate());
 }
 
 
-void TypeFeedbackOracle::BinaryType(BinaryOperation* expr,
-                                    TypeInfo* left,
-                                    TypeInfo* right,
-                                    TypeInfo* result,
-                                    bool* has_fixed_right_arg,
-                                    int* fixed_right_arg_value) {
-  Handle<Object> object = GetInfo(expr->BinaryOperationFeedbackId());
-  TypeInfo unknown = TypeInfo::Unknown();
+void TypeFeedbackOracle::BinaryType(TypeFeedbackId id,
+                                    Handle<Type>* left,
+                                    Handle<Type>* right,
+                                    Handle<Type>* result,
+                                    Maybe<int>* fixed_right_arg) {
+  Handle<Object> object = GetInfo(id);
   if (!object->IsCode()) {
-    *left = *right = *result = unknown;
+    // For some binary ops we don't have ICs, e.g. Token::COMMA.
+    *left = *right = *result = handle(Type::None(), isolate_);
     return;
   }
   Handle<Code> code = Handle<Code>::cast(object);
-  if (code->is_binary_op_stub()) {
-    int minor_key = code->stub_info();
-    BinaryOpIC::TypeInfo left_type, right_type, result_type;
-    BinaryOpStub::decode_types_from_minor_key(
-        minor_key, &left_type, &right_type, &result_type);
-    *left = TypeFromBinaryOpType(left_type);
-    *right = TypeFromBinaryOpType(right_type);
-    *result = TypeFromBinaryOpType(result_type);
-    *has_fixed_right_arg =
-        BinaryOpStub::decode_has_fixed_right_arg_from_minor_key(minor_key);
-    *fixed_right_arg_value =
-        BinaryOpStub::decode_fixed_right_arg_value_from_minor_key(minor_key);
-    return;
-  }
-  // Not a binary op stub.
-  *left = *right = *result = unknown;
+  ASSERT(code->is_binary_op_stub());
+
+  int minor_key = code->stub_info();
+  BinaryOpIC::StubInfoToType(minor_key, left, right, result, isolate());
+  *fixed_right_arg =
+      BinaryOpStub::decode_fixed_right_arg_from_minor_key(minor_key);
 }
 
 
-TypeInfo TypeFeedbackOracle::SwitchType(CaseClause* clause) {
-  Handle<Object> object = GetInfo(clause->CompareId());
-  TypeInfo unknown = TypeInfo::Unknown();
-  if (!object->IsCode()) return unknown;
-  Handle<Code> code = Handle<Code>::cast(object);
-  if (!code->is_compare_ic_stub()) return unknown;
-
-  CompareIC::State state = ICCompareStub::CompareState(code->stub_info());
-  return TypeFromCompareType(state);
+Handle<Type> TypeFeedbackOracle::ClauseType(TypeFeedbackId id) {
+  Handle<Object> info = GetInfo(id);
+  Handle<Type> result(Type::None(), isolate_);
+  if (info->IsCode() && Handle<Code>::cast(info)->is_compare_ic_stub()) {
+    Handle<Code> code = Handle<Code>::cast(info);
+    CompareIC::State state = ICCompareStub::CompareState(code->stub_info());
+    result = CompareIC::StateToType(isolate_, state);
+  }
+  return result;
 }
 
 
@@ -569,7 +493,8 @@ void TypeFeedbackOracle::CollectReceiverTypes(TypeFeedbackId ast_id,
     ASSERT(Handle<Code>::cast(object)->ic_state() == GENERIC);
   } else if (object->IsMap()) {
     types->AddMapIfMissing(Handle<Map>::cast(object), zone());
-  } else if (Handle<Code>::cast(object)->ic_state() == POLYMORPHIC) {
+  } else if (Handle<Code>::cast(object)->ic_state() == POLYMORPHIC ||
+             Handle<Code>::cast(object)->ic_state() == MONOMORPHIC) {
     CollectPolymorphicMaps(Handle<Code>::cast(object), types);
   } else if (FLAG_collect_megamorphic_maps_from_stub_cache &&
       Handle<Code>::cast(object)->ic_state() == MEGAMORPHIC) {
@@ -636,17 +561,6 @@ byte TypeFeedbackOracle::ToBooleanTypes(TypeFeedbackId id) {
 }
 
 
-byte TypeFeedbackOracle::CompareNilTypes(CompareOperation* expr) {
-  Handle<Object> object = GetInfo(expr->CompareOperationFeedbackId());
-  if (object->IsCode() &&
-      Handle<Code>::cast(object)->is_compare_nil_ic_stub()) {
-    return Handle<Code>::cast(object)->compare_nil_types();
-  } else {
-    return CompareNilICStub::Types::FullCompare().ToIntegral();
-  }
-}
-
-
 // Things are a bit tricky here: The iterator for the RelocInfos and the infos
 // themselves are not GC-safe, so we first get all infos, then we create the
 // dictionary (possibly triggering GC), and finally we relocate the collected
@@ -759,7 +673,7 @@ void TypeFeedbackOracle::ProcessTypeFeedbackCells(Handle<Code> code) {
       TypeFeedbackInfo::cast(raw_info)->type_feedback_cells());
   for (int i = 0; i < cache->CellCount(); i++) {
     TypeFeedbackId ast_id = cache->AstId(i);
-    JSGlobalPropertyCell* cell = cache->Cell(i);
+    Cell* cell = cache->GetCell(i);
     Object* value = cell->value();
     if (value->IsSmi() ||
         (value->IsJSFunction() &&
index 53a83be..a1c1f54 100644 (file)
@@ -30,6 +30,7 @@
 
 #include "allocation.h"
 #include "globals.h"
+#include "types.h"
 #include "zone-inl.h"
 
 namespace v8 {
@@ -113,7 +114,7 @@ class TypeInfo {
     return false;
   }
 
-  static TypeInfo TypeFromValue(Handle<Object> value);
+  static TypeInfo FromValue(Handle<Object> value);
 
   bool Equals(const TypeInfo& other) {
     return type_ == other.type_;
@@ -217,12 +218,11 @@ enum StringStubFeedback {
 
 
 // Forward declarations.
+// TODO(rossberg): these should all go away eventually.
 class Assignment;
-class BinaryOperation;
 class Call;
 class CallNew;
 class CaseClause;
-class CompareOperation;
 class CompilationInfo;
 class CountOperation;
 class Expression;
@@ -230,7 +230,6 @@ class ForInStatement;
 class ICStub;
 class Property;
 class SmallMapList;
-class UnaryOperation;
 class ObjectLiteral;
 class ObjectLiteralProperty;
 
@@ -245,6 +244,7 @@ class TypeFeedbackOracle: public ZoneObject {
   bool LoadIsMonomorphicNormal(Property* expr);
   bool LoadIsUninitialized(Property* expr);
   bool LoadIsPolymorphic(Property* expr);
+  bool StoreIsUninitialized(TypeFeedbackId ast_id);
   bool StoreIsMonomorphicNormal(TypeFeedbackId ast_id);
   bool StoreIsPolymorphic(TypeFeedbackId ast_id);
   bool CallIsMonomorphic(Call* expr);
@@ -257,7 +257,6 @@ class TypeFeedbackOracle: public ZoneObject {
 
   Handle<Map> LoadMonomorphicReceiverType(Property* expr);
   Handle<Map> StoreMonomorphicReceiverType(TypeFeedbackId id);
-  Handle<Map> CompareNilMonomorphicReceiverType(CompareOperation* expr);
 
   KeyedAccessStoreMode GetStoreMode(TypeFeedbackId ast_id);
 
@@ -283,7 +282,7 @@ class TypeFeedbackOracle: public ZoneObject {
   CheckType GetCallCheckType(Call* expr);
   Handle<JSFunction> GetCallTarget(Call* expr);
   Handle<JSFunction> GetCallNewTarget(CallNew* expr);
-  Handle<JSGlobalPropertyCell> GetCallNewAllocationInfoCell(CallNew* expr);
+  Handle<Cell> GetCallNewAllocationInfoCell(CallNew* expr);
 
   Handle<Map> GetObjectLiteralStoreMap(ObjectLiteralProperty* prop);
 
@@ -293,27 +292,23 @@ class TypeFeedbackOracle: public ZoneObject {
   // TODO(1571) We can't use ToBooleanStub::Types as the return value because
   // of various cycles in our headers. Death to tons of implementations in
   // headers!! :-P
-  byte ToBooleanTypes(TypeFeedbackId ast_id);
-
-  // TODO(1571) We can't use CompareNilICStub::Types as the return value because
-  // of various cylces in our headers. Death to tons of implementations in
-  // headers!! :-P
-  byte CompareNilTypes(CompareOperation* expr);
+  byte ToBooleanTypes(TypeFeedbackId id);
 
   // Get type information for arithmetic operations and compares.
-  TypeInfo UnaryType(UnaryOperation* expr);
-  void BinaryType(BinaryOperation* expr,
-                  TypeInfo* left,
-                  TypeInfo* right,
-                  TypeInfo* result,
-                  bool* has_fixed_right_arg,
-                  int* fixed_right_arg_value);
-  void CompareType(CompareOperation* expr,
-                   TypeInfo* left_type,
-                   TypeInfo* right_type,
-                   TypeInfo* overall_type);
-  Handle<Map> GetCompareMap(CompareOperation* expr);
-  TypeInfo SwitchType(CaseClause* clause);
+  Handle<Type> UnaryType(TypeFeedbackId id);
+  void BinaryType(TypeFeedbackId id,
+                  Handle<Type>* left,
+                  Handle<Type>* right,
+                  Handle<Type>* result,
+                  Maybe<int>* fixed_right_arg);
+
+  void CompareType(TypeFeedbackId id,
+                   Handle<Type>* left_type,
+                   Handle<Type>* right_type,
+                   Handle<Type>* combined_type);
+
+  Handle<Type> ClauseType(TypeFeedbackId id);
+
   TypeInfo IncrementType(CountOperation* expr);
 
   Zone* zone() const { return zone_; }
@@ -341,7 +336,7 @@ class TypeFeedbackOracle: public ZoneObject {
   Handle<Object> GetInfo(TypeFeedbackId ast_id);
 
   // Return the cell that contains type feedback.
-  Handle<JSGlobalPropertyCell> GetInfoCell(TypeFeedbackId ast_id);
+  Handle<Cell> GetInfoCell(TypeFeedbackId ast_id);
 
  private:
   Handle<Context> native_context_;
index 04c487f..0d90355 100644 (file)
@@ -37,7 +37,7 @@
 
 function CreateTypedArrayConstructor(name, elementSize, arrayId, constructor) {
   function ConstructByArrayBuffer(obj, buffer, byteOffset, length) {
-    var offset = IS_UNDEFINED(byteOffset) ? 0 : TO_POSITIVE_INTEGER(byteOffset);
+    var offset = ToPositiveInteger(byteOffset, "invalid_typed_array_length")
 
     if (offset % elementSize !== 0) {
       throw MakeRangeError("invalid_typed_array_alignment",
@@ -58,7 +58,7 @@ function CreateTypedArrayConstructor(name, elementSize, arrayId, constructor) {
       newByteLength = bufferByteLength - offset;
       newLength = newByteLength / elementSize;
     } else {
-      var newLength = TO_POSITIVE_INTEGER(length);
+      var newLength = ToPositiveInteger(length, "invalid_typed_array_length");
       newByteLength = newLength * elementSize;
     }
     if (offset + newByteLength > bufferByteLength) {
@@ -68,7 +68,7 @@ function CreateTypedArrayConstructor(name, elementSize, arrayId, constructor) {
   }
 
   function ConstructByLength(obj, length) {
-    var l = IS_UNDEFINED(length) ? 0 : TO_POSITIVE_INTEGER(length);
+    var l = ToPositiveInteger(length, "invalid_typed_array_length");
     var byteLength = l * elementSize;
     var buffer = new global.ArrayBuffer(byteLength);
     %TypedArrayInitialize(obj, arrayId, buffer, 0, byteLength);
@@ -76,7 +76,7 @@ function CreateTypedArrayConstructor(name, elementSize, arrayId, constructor) {
 
   function ConstructByArrayLike(obj, arrayLike) {
     var length = arrayLike.length;
-    var l =  IS_UNDEFINED(length) ? 0 : TO_POSITIVE_INTEGER(length);
+    var l =  ToPositiveInteger(length, "invalid_typed_array_length");
     var byteLength = l * elementSize;
     var buffer = new $ArrayBuffer(byteLength);
     %TypedArrayInitialize(obj, arrayId, buffer, 0, byteLength);
@@ -97,7 +97,7 @@ function CreateTypedArrayConstructor(name, elementSize, arrayId, constructor) {
         throw MakeTypeError("parameterless_typed_array_constr", [name]);
       }
     } else {
-      return new constructor(arg1, arg2, arg3);
+      throw MakeTypeError("constructor_not_function", [name])
     }
   }
 }
@@ -146,7 +146,10 @@ function CreateSubArray(elementSize, constructor) {
 }
 
 function TypedArraySet(obj, offset) {
-  var intOffset = IS_UNDEFINED(offset) ? 0 : TO_POSITIVE_INTEGER(offset);
+  var intOffset = IS_UNDEFINED(offset) ? 0 : TO_INTEGER(offset);
+  if (intOffset < 0) {
+    throw MakeTypeError("typed_array_set_negative_offset");
+  }
   if (%TypedArraySetFastCases(this, obj, intOffset))
     return;
 
@@ -197,3 +200,276 @@ SetupTypedArray(6, "Int32Array", global.Int32Array, 4);
 SetupTypedArray(7, "Float32Array", global.Float32Array, 4);
 SetupTypedArray(8, "Float64Array", global.Float64Array, 8);
 SetupTypedArray(9, "Uint8ClampedArray", global.Uint8ClampedArray, 1);
+
+
+// --------------------------- DataView -----------------------------
+
+var $DataView = global.DataView;
+
+function DataViewConstructor(buffer, byteOffset, byteLength) { // length = 3
+  if (%_IsConstructCall()) {
+    if (!IS_ARRAYBUFFER(buffer)) {
+      throw MakeTypeError('data_view_not_array_buffer', []);
+    }
+    var bufferByteLength = %ArrayBufferGetByteLength(buffer);
+    var offset = ToPositiveInteger(byteOffset, 'invalid_data_view_offset');
+    if (offset > bufferByteLength) {
+      throw MakeRangeError('invalid_data_view_offset');
+    }
+    var length = IS_UNDEFINED(byteLength) ?
+      bufferByteLength - offset : TO_INTEGER(byteLength);
+    if (length < 0 || offset + length > bufferByteLength) {
+      throw new MakeRangeError('invalid_data_view_length');
+    }
+    %DataViewInitialize(this, buffer, offset, length);
+  } else {
+    throw MakeTypeError('constructor_not_function', ["DataView"]);
+  }
+}
+
+function DataViewGetBuffer() {
+  if (!IS_DATAVIEW(this)) {
+    throw MakeTypeError('incompatible_method_reciever',
+                        ['DataView.buffer', this]);
+  }
+  return %DataViewGetBuffer(this);
+}
+
+function DataViewGetByteOffset() {
+  if (!IS_DATAVIEW(this)) {
+    throw MakeTypeError('incompatible_method_reciever',
+                        ['DataView.byteOffset', this]);
+  }
+  return %DataViewGetByteOffset(this);
+}
+
+function DataViewGetByteLength() {
+  if (!IS_DATAVIEW(this)) {
+    throw MakeTypeError('incompatible_method_reciever',
+                        ['DataView.byteLength', this]);
+  }
+  return %DataViewGetByteLength(this);
+}
+
+function ToPositiveDataViewOffset(offset) {
+  return ToPositiveInteger(offset, 'invalid_data_view_accessor_offset');
+}
+
+function DataViewGetInt8(offset, little_endian) {
+  if (!IS_DATAVIEW(this)) {
+    throw MakeTypeError('incompatible_method_reciever',
+                        ['DataView.getInt8', this]);
+  }
+  return %DataViewGetInt8(this,
+                          ToPositiveDataViewOffset(offset),
+                          !!little_endian);
+}
+
+function DataViewSetInt8(offset, value, little_endian) {
+  if (!IS_DATAVIEW(this)) {
+    throw MakeTypeError('incompatible_method_reciever',
+                        ['DataView.setInt8', this]);
+  }
+  %DataViewSetInt8(this,
+                   ToPositiveDataViewOffset(offset),
+                   TO_NUMBER_INLINE(value),
+                   !!little_endian);
+}
+
+function DataViewGetUint8(offset, little_endian) {
+  if (!IS_DATAVIEW(this)) {
+    throw MakeTypeError('incompatible_method_reciever',
+                        ['DataView.getUint8', this]);
+  }
+  return %DataViewGetUint8(this,
+                           ToPositiveDataViewOffset(offset),
+                           !!little_endian);
+}
+
+function DataViewSetUint8(offset, value, little_endian) {
+  if (!IS_DATAVIEW(this)) {
+    throw MakeTypeError('incompatible_method_reciever',
+                        ['DataView.setUint8', this]);
+  }
+  %DataViewSetUint8(this,
+                   ToPositiveDataViewOffset(offset),
+                   TO_NUMBER_INLINE(value),
+                   !!little_endian);
+}
+
+function DataViewGetInt16(offset, little_endian) {
+  if (!IS_DATAVIEW(this)) {
+    throw MakeTypeError('incompatible_method_reciever',
+                        ['DataView.getInt16', this]);
+  }
+  return %DataViewGetInt16(this,
+                           ToPositiveDataViewOffset(offset),
+                           !!little_endian);
+}
+
+function DataViewSetInt16(offset, value, little_endian) {
+  if (!IS_DATAVIEW(this)) {
+    throw MakeTypeError('incompatible_method_reciever',
+                        ['DataView.setInt16', this]);
+  }
+  %DataViewSetInt16(this,
+                    ToPositiveDataViewOffset(offset),
+                    TO_NUMBER_INLINE(value),
+                    !!little_endian);
+}
+
+function DataViewGetUint16(offset, little_endian) {
+  if (!IS_DATAVIEW(this)) {
+    throw MakeTypeError('incompatible_method_reciever',
+                        ['DataView.getUint16', this]);
+  }
+  return %DataViewGetUint16(this,
+                            ToPositiveDataViewOffset(offset),
+                            !!little_endian);
+}
+
+function DataViewSetUint16(offset, value, little_endian) {
+  if (!IS_DATAVIEW(this)) {
+    throw MakeTypeError('incompatible_method_reciever',
+                        ['DataView.setUint16', this]);
+  }
+  %DataViewSetUint16(this,
+                     ToPositiveDataViewOffset(offset),
+                     TO_NUMBER_INLINE(value),
+                     !!little_endian);
+}
+
+function DataViewGetInt32(offset, little_endian) {
+  if (!IS_DATAVIEW(this)) {
+    throw MakeTypeError('incompatible_method_reciever',
+                        ['DataView.getInt32', this]);
+  }
+  return %DataViewGetInt32(this,
+                           ToPositiveDataViewOffset(offset),
+                           !!little_endian);
+}
+
+function DataViewSetInt32(offset, value, little_endian) {
+  if (!IS_DATAVIEW(this)) {
+    throw MakeTypeError('incompatible_method_reciever',
+                        ['DataView.setInt32', this]);
+  }
+  %DataViewSetInt32(this,
+                    ToPositiveDataViewOffset(offset),
+                    TO_NUMBER_INLINE(value),
+                    !!little_endian);
+}
+
+function DataViewGetUint32(offset, little_endian) {
+  if (!IS_DATAVIEW(this)) {
+    throw MakeTypeError('incompatible_method_reciever',
+                        ['DataView.getUint32', this]);
+  }
+  return %DataViewGetUint32(this,
+                            ToPositiveDataViewOffset(offset),
+                            !!little_endian);
+}
+
+function DataViewSetUint32(offset, value, little_endian) {
+  if (!IS_DATAVIEW(this)) {
+    throw MakeTypeError('incompatible_method_reciever',
+                        ['DataView.setUint32', this]);
+  }
+  %DataViewSetUint32(this,
+                     ToPositiveDataViewOffset(offset),
+                     TO_NUMBER_INLINE(value),
+                     !!little_endian);
+}
+
+function DataViewGetFloat32(offset, little_endian) {
+  if (!IS_DATAVIEW(this)) {
+    throw MakeTypeError('incompatible_method_reciever',
+                        ['DataView.getFloat32', this]);
+  }
+  return %DataViewGetFloat32(this,
+                             ToPositiveDataViewOffset(offset),
+                             !!little_endian);
+}
+
+function DataViewSetFloat32(offset, value, little_endian) {
+  if (!IS_DATAVIEW(this)) {
+    throw MakeTypeError('incompatible_method_reciever',
+                        ['DataView.setFloat32', this]);
+  }
+  %DataViewSetFloat32(this,
+                      ToPositiveDataViewOffset(offset),
+                      TO_NUMBER_INLINE(value),
+                      !!little_endian);
+}
+
+function DataViewGetFloat64(offset, little_endian) {
+  if (!IS_DATAVIEW(this)) {
+    throw MakeTypeError('incompatible_method_reciever',
+                        ['DataView.getFloat64', this]);
+  }
+  offset = TO_INTEGER(offset);
+  if (offset < 0) {
+    throw MakeRangeError("invalid_data_view_accessor_offset");
+  }
+  return %DataViewGetFloat64(this,
+                             ToPositiveDataViewOffset(offset),
+                             !!little_endian);
+}
+
+function DataViewSetFloat64(offset, value, little_endian) {
+  if (!IS_DATAVIEW(this)) {
+    throw MakeTypeError('incompatible_method_reciever',
+                        ['DataView.setFloat64', this]);
+  }
+  offset = TO_INTEGER(offset);
+  if (offset < 0) {
+    throw MakeRangeError("invalid_data_view_accessor_offset");
+  }
+  %DataViewSetFloat64(this,
+                      ToPositiveDataViewOffset(offset),
+                      TO_NUMBER_INLINE(value),
+                      !!little_endian);
+}
+
+function SetupDataView() {
+  %CheckIsBootstrapping();
+
+  // Setup the DataView constructor.
+  %SetCode($DataView, DataViewConstructor);
+  %FunctionSetPrototype($DataView, new $Object);
+
+  // Set up constructor property on the DataView prototype.
+  %SetProperty($DataView.prototype, "constructor", $DataView, DONT_ENUM);
+
+  InstallGetter($DataView.prototype, "buffer", DataViewGetBuffer);
+  InstallGetter($DataView.prototype, "byteOffset", DataViewGetByteOffset);
+  InstallGetter($DataView.prototype, "byteLength", DataViewGetByteLength);
+
+  InstallFunctions($DataView.prototype, DONT_ENUM, $Array(
+      "getInt8", DataViewGetInt8,
+      "setInt8", DataViewSetInt8,
+
+      "getUint8", DataViewGetUint8,
+      "setUint8", DataViewSetUint8,
+
+      "getInt16", DataViewGetInt16,
+      "setInt16", DataViewSetInt16,
+
+      "getUint16", DataViewGetUint16,
+      "setUint16", DataViewSetUint16,
+
+      "getInt32", DataViewGetInt32,
+      "setInt32", DataViewSetInt32,
+
+      "getUint32", DataViewGetUint32,
+      "setUint32", DataViewSetUint32,
+
+      "getFloat32", DataViewGetFloat32,
+      "setFloat32", DataViewSetFloat32,
+
+      "getFloat64", DataViewGetFloat64,
+      "setFloat64", DataViewSetFloat64
+  ));
+}
+
+SetupDataView();
index f7fbd2d..1275dea 100644 (file)
 namespace v8 {
 namespace internal {
 
+int Type::NumClasses() {
+  if (is_class()) {
+    return 1;
+  } else if (is_union()) {
+    Handle<Unioned> unioned = as_union();
+    int result = 0;
+    for (int i = 0; i < unioned->length(); ++i) {
+      if (union_get(unioned, i)->is_class()) ++result;
+    }
+    return result;
+  } else {
+    return 0;
+  }
+}
+
+
+int Type::NumConstants() {
+  if (is_constant()) {
+    return 1;
+  } else if (is_union()) {
+    Handle<Unioned> unioned = as_union();
+    int result = 0;
+    for (int i = 0; i < unioned->length(); ++i) {
+      if (union_get(unioned, i)->is_constant()) ++result;
+    }
+    return result;
+  } else {
+    return 0;
+  }
+}
+
+
+template<class T>
+Handle<Type> Type::Iterator<T>::get_type() {
+  ASSERT(!Done());
+  return type_->is_union() ? union_get(type_->as_union(), index_) : type_;
+}
+
+template<>
+Handle<Map> Type::Iterator<Map>::Current() {
+  return get_type()->as_class();
+}
+
+template<>
+Handle<v8::internal::Object> Type::Iterator<v8::internal::Object>::Current() {
+  return get_type()->as_constant();
+}
+
+
+template<>
+bool Type::Iterator<Map>::matches(Handle<Type> type) {
+  return type->is_class();
+}
+
+template<>
+bool Type::Iterator<v8::internal::Object>::matches(Handle<Type> type) {
+  return type->is_constant();
+}
+
+
+template<class T>
+void Type::Iterator<T>::Advance() {
+  ++index_;
+  if (type_->is_union()) {
+    Handle<Unioned> unioned = type_->as_union();
+    for (; index_ < unioned->length(); ++index_) {
+      if (matches(union_get(unioned, index_))) return;
+    }
+  } else if (index_ == 0 && matches(type_)) {
+    return;
+  }
+  index_ = -1;
+}
+
+template class Type::Iterator<Map>;
+template class Type::Iterator<v8::internal::Object>;
+
+
 // Get the smallest bitset subsuming this type.
 int Type::LubBitset() {
   if (this->is_bitset()) {
@@ -46,9 +124,15 @@ int Type::LubBitset() {
     if (this->is_class()) {
       map = *this->as_class();
     } else {
-      v8::internal::Object* value = this->as_constant()->value();
+      Handle<v8::internal::Object> value = this->as_constant();
       if (value->IsSmi()) return kSmi;
-      map = HeapObject::cast(value)->map();
+      map = HeapObject::cast(*value)->map();
+      if (map->instance_type() == ODDBALL_TYPE) {
+        if (value->IsUndefined()) return kUndefined;
+        if (value->IsNull()) return kNull;
+        if (value->IsTrue() || value->IsFalse()) return kBoolean;
+        if (value->IsTheHole()) return kAny;
+      }
     }
     switch (map->instance_type()) {
       case STRING_TYPE:
@@ -56,6 +140,7 @@ int Type::LubBitset() {
       case CONS_STRING_TYPE:
       case CONS_ASCII_STRING_TYPE:
       case SLICED_STRING_TYPE:
+      case SLICED_ASCII_STRING_TYPE:
       case EXTERNAL_STRING_TYPE:
       case EXTERNAL_ASCII_STRING_TYPE:
       case EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE:
@@ -90,16 +175,36 @@ int Type::LubBitset() {
       case JS_GLOBAL_PROXY_TYPE:
       case JS_ARRAY_BUFFER_TYPE:
       case JS_TYPED_ARRAY_TYPE:
+      case JS_DATA_VIEW_TYPE:
+      case JS_SET_TYPE:
+      case JS_MAP_TYPE:
       case JS_WEAK_MAP_TYPE:
-      case JS_REGEXP_TYPE:
+        if (map->is_undetectable()) return kUndetectable;
         return kOtherObject;
       case JS_ARRAY_TYPE:
         return kArray;
       case JS_FUNCTION_TYPE:
         return kFunction;
+      case JS_REGEXP_TYPE:
+        return kRegExp;
       case JS_PROXY_TYPE:
       case JS_FUNCTION_PROXY_TYPE:
         return kProxy;
+      case MAP_TYPE:
+        // When compiling stub templates, the meta map is used as a place holder
+        // for the actual map with which the template is later instantiated.
+        // We treat it as a kind of type variable whose upper bound is Any.
+        // TODO(rossberg): for caching of CompareNilIC stubs to work correctly,
+        // we must exclude Undetectable here. This makes no sense, really,
+        // because it means that the template isn't actually parametric.
+        // Also, it doesn't apply elsewhere. 8-(
+        // We ought to find a cleaner solution for compiling stubs parameterised
+        // over type or class variables, esp ones with bounds...
+        return kDetectable;
+      case DECLARED_ACCESSOR_INFO_TYPE:
+      case EXECUTABLE_ACCESSOR_INFO_TYPE:
+      case ACCESSOR_PAIR_TYPE:
+        return kInternal;
       default:
         UNREACHABLE();
         return kNone;
@@ -122,7 +227,7 @@ int Type::GlbBitset() {
 
 
 // Check this <= that.
-bool Type::Is(Handle<Type> that) {
+bool Type::IsSlowCase(Type* that) {
   // Fast path for bitsets.
   if (that->is_bitset()) {
     return (this->LubBitset() | that->as_bitset()) == that->as_bitset();
@@ -132,8 +237,7 @@ bool Type::Is(Handle<Type> that) {
     return this->is_class() && *this->as_class() == *that->as_class();
   }
   if (that->is_constant()) {
-    return this->is_constant() &&
-        this->as_constant()->value() == that->as_constant()->value();
+    return this->is_constant() && *this->as_constant() == *that->as_constant();
   }
 
   // (T1 \/ ... \/ Tn) <= T  <=>  (T1 <= T) /\ ... /\ (Tn <= T)
@@ -148,6 +252,7 @@ bool Type::Is(Handle<Type> that) {
 
   // T <= (T1 \/ ... \/ Tn)  <=>  (T <= T1) \/ ... \/ (T <= Tn)
   // (iff T is not a union)
+  ASSERT(!this->is_union());
   if (that->is_union()) {
     Handle<Unioned> unioned = that->as_union();
     for (int i = 0; i < unioned->length(); ++i) {
@@ -163,7 +268,7 @@ bool Type::Is(Handle<Type> that) {
 
 
 // Check this overlaps that.
-bool Type::Maybe(Handle<Type> that) {
+bool Type::Maybe(Type* that) {
   // Fast path for bitsets.
   if (this->is_bitset()) {
     return (this->as_bitset() & that->LubBitset()) != 0;
@@ -172,14 +277,6 @@ bool Type::Maybe(Handle<Type> that) {
     return (this->LubBitset() & that->as_bitset()) != 0;
   }
 
-  if (this->is_class()) {
-    return that->is_class() && *this->as_class() == *that->as_class();
-  }
-  if (this->is_constant()) {
-    return that->is_constant() &&
-        this->as_constant()->value() == that->as_constant()->value();
-  }
-
   // (T1 \/ ... \/ Tn) overlaps T <=> (T1 overlaps T) \/ ... \/ (Tn overlaps T)
   if (this->is_union()) {
     Handle<Unioned> unioned = this->as_union();
@@ -200,6 +297,14 @@ bool Type::Maybe(Handle<Type> that) {
     return false;
   }
 
+  ASSERT(!that->is_union());
+  if (this->is_class()) {
+    return that->is_class() && *this->as_class() == *that->as_class();
+  }
+  if (this->is_constant()) {
+    return that->is_constant() && *this->as_constant() == *that->as_constant();
+  }
+
   return false;
 }
 
@@ -208,12 +313,12 @@ bool Type::InUnion(Handle<Unioned> unioned, int current_size) {
   ASSERT(!this->is_union());
   for (int i = 0; i < current_size; ++i) {
     Handle<Type> type = union_get(unioned, i);
-    if (type->is_bitset() ? this->Is(type) : this == *type) return true;
+    if (this->Is(type)) return true;
   }
   return false;
 }
 
-// Get non-bitsets from this which are not subsumed by that, store at unioned,
+// Get non-bitsets from this which are not subsumed by union, store at unioned,
 // starting at index. Returns updated index.
 int Type::ExtendUnion(Handle<Unioned> result, int current_size) {
   int old_size = current_size;
@@ -240,6 +345,12 @@ Type* Type::Union(Handle<Type> type1, Handle<Type> type2) {
     return from_bitset(type1->as_bitset() | type2->as_bitset());
   }
 
+  // Fast case: top or bottom types.
+  if (type1->SameValue(Type::Any())) return *type1;
+  if (type2->SameValue(Type::Any())) return *type2;
+  if (type1->SameValue(Type::None())) return *type2;
+  if (type2->SameValue(Type::None())) return *type1;
+
   // Semi-fast case: Unioned objects are neither involved nor produced.
   if (!(type1->is_union() || type2->is_union())) {
     if (type1->Is(type2)) return *type2;
@@ -280,6 +391,85 @@ Type* Type::Union(Handle<Type> type1, Handle<Type> type2) {
 }
 
 
+// Get non-bitsets from this which are also in that, store at unioned,
+// starting at index. Returns updated index.
+int Type::ExtendIntersection(
+    Handle<Unioned> result, Handle<Type> that, int current_size) {
+  int old_size = current_size;
+  if (this->is_class() || this->is_constant()) {
+    if (this->Is(that) && !this->InUnion(result, old_size))
+      result->set(current_size++, this);
+  } else if (this->is_union()) {
+    Handle<Unioned> unioned = this->as_union();
+    for (int i = 0; i < unioned->length(); ++i) {
+      Handle<Type> type = union_get(unioned, i);
+      ASSERT(i == 0 || !(type->is_bitset() || type->Is(union_get(unioned, 0))));
+      if (type->is_bitset()) continue;
+      if (type->Is(that) && !type->InUnion(result, old_size))
+        result->set(current_size++, *type);
+    }
+  }
+  return current_size;
+}
+
+
+// Intersection is O(1) on simple bit unions, but O(n*m) on structured unions.
+// TODO(rossberg): Should we use object sets somehow? Is it worth it?
+Type* Type::Intersect(Handle<Type> type1, Handle<Type> type2) {
+  // Fast case: bit sets.
+  if (type1->is_bitset() && type2->is_bitset()) {
+    return from_bitset(type1->as_bitset() & type2->as_bitset());
+  }
+
+  // Fast case: top or bottom types.
+  if (type1->SameValue(Type::None())) return *type1;
+  if (type2->SameValue(Type::None())) return *type2;
+  if (type1->SameValue(Type::Any())) return *type2;
+  if (type2->SameValue(Type::Any())) return *type1;
+
+  // Semi-fast case: Unioned objects are neither involved nor produced.
+  if (!(type1->is_union() || type2->is_union())) {
+    if (type1->Is(type2)) return *type1;
+    if (type2->Is(type1)) return *type2;
+  }
+
+  // Slow case: may need to produce a Unioned object.
+  Isolate* isolate = NULL;
+  int size = 0;
+  if (!type1->is_bitset()) {
+    isolate = HeapObject::cast(*type1)->GetIsolate();
+    size = (type1->is_union() ? type1->as_union()->length() : 2);
+  }
+  if (!type2->is_bitset()) {
+    isolate = HeapObject::cast(*type2)->GetIsolate();
+    int size2 = (type2->is_union() ? type2->as_union()->length() : 2);
+    size = (size == 0 ? size2 : Min(size, size2));
+  }
+  ASSERT(isolate != NULL);
+  ASSERT(size >= 2);
+  Handle<Unioned> unioned = isolate->factory()->NewFixedArray(size);
+  size = 0;
+
+  int bitset = type1->GlbBitset() & type2->GlbBitset();
+  if (bitset != kNone) unioned->set(size++, from_bitset(bitset));
+  size = type1->ExtendIntersection(unioned, type2, size);
+  size = type2->ExtendIntersection(unioned, type1, size);
+
+  if (size == 0) {
+    return None();
+  } else if (size == 1) {
+    return *union_get(unioned, 0);
+  } else if (size == unioned->length()) {
+    return from_handle(unioned);
+  }
+
+  // There were dropped cases. Copy to smaller union.
+  Handle<Unioned> result = isolate->factory()->NewFixedArray(size);
+  for (int i = 0; i < size; ++i) result->set(i, unioned->get(i));
+  return from_handle(result);
+}
+
+
 Type* Type::Optional(Handle<Type> type) {
   return type->is_bitset()
       ? from_bitset(type->as_bitset() | kUndefined)
index 6db9bfb..a2bcda6 100644 (file)
@@ -48,14 +48,19 @@ namespace internal {
 //   T <= Any
 //
 //   Oddball = Boolean \/ Null \/ Undefined
-//   Number = Smi \/ Double
+//   Number = Signed32 \/ Unsigned32 \/ Double
+//   Smi <= Signed32
 //   Name = String \/ Symbol
 //   UniqueName = InternalizedString \/ Symbol
 //   InternalizedString < String
 //
+//   Allocated = Receiver \/ Number \/ Name
+//   Detectable = Allocated - Undetectable
+//   Undetectable < Object
 //   Receiver = Object \/ Proxy
 //   Array < Object
 //   Function < Object
+//   RegExp < Object
 //
 //   Class(map) < T   iff instance_type(map) < T
 //   Constant(x) < T  iff instance_type(map(x)) < T
@@ -70,17 +75,21 @@ namespace internal {
 //   T1->Is(T2)     -- tests whether T1 is included in T2 (i.e., T1 <= T2)
 //   T1->Maybe(T2)  -- tests whether T1 and T2 overlap (i.e., T1 /\ T2 =/= 0)
 //
-// Typically, the latter should be used to check whether a specific case needs
-// handling (e.g., via T->Maybe(Number)).
+// Typically, the former is to be used to select representations (e.g., via
+// T->Is(Integer31())), and the to check whether a specific case needs handling
+// (e.g., via T->Maybe(Number())).
 //
 // There is no functionality to discover whether a type is a leaf in the
 // lattice. That is intentional. It should always be possible to refine the
 // lattice (e.g., splitting up number types further) without invalidating any
 // existing assumptions or tests.
 //
+// Consequently, do not use pointer equality for type tests, always use Is!
+//
 // Internally, all 'primitive' types, and their unions, are represented as
 // bitsets via smis. Class is a heap pointer to the respective map. Only
 // Constant's, or unions containing Class'es or Constant's, require allocation.
+// Note that the bitset representation is closed under both Union and Intersect.
 //
 // The type representation is heap-allocated, so cannot (currently) be used in
 // a parallel compilation context.
@@ -89,6 +98,8 @@ class Type : public Object {
  public:
   static Type* None() { return from_bitset(kNone); }
   static Type* Any() { return from_bitset(kAny); }
+  static Type* Allocated() { return from_bitset(kAllocated); }
+  static Type* Detectable() { return from_bitset(kDetectable); }
 
   static Type* Oddball() { return from_bitset(kOddball); }
   static Type* Boolean() { return from_bitset(kBoolean); }
@@ -97,7 +108,10 @@ class Type : public Object {
 
   static Type* Number() { return from_bitset(kNumber); }
   static Type* Smi() { return from_bitset(kSmi); }
+  static Type* Signed32() { return from_bitset(kSigned32); }
+  static Type* Unsigned32() { return from_bitset(kUnsigned32); }
   static Type* Double() { return from_bitset(kDouble); }
+  static Type* NumberOrString() { return from_bitset(kNumberOrString); }
 
   static Type* Name() { return from_bitset(kName); }
   static Type* UniqueName() { return from_bitset(kUniqueName); }
@@ -107,9 +121,12 @@ class Type : public Object {
 
   static Type* Receiver() { return from_bitset(kReceiver); }
   static Type* Object() { return from_bitset(kObject); }
+  static Type* Undetectable() { return from_bitset(kUndetectable); }
   static Type* Array() { return from_bitset(kArray); }
   static Type* Function() { return from_bitset(kFunction); }
+  static Type* RegExp() { return from_bitset(kRegExp); }
   static Type* Proxy() { return from_bitset(kProxy); }
+  static Type* Internal() { return from_bitset(kInternal); }
 
   static Type* Class(Handle<Map> map) { return from_handle(map); }
   static Type* Constant(Handle<HeapObject> value) {
@@ -120,12 +137,52 @@ class Type : public Object {
   }
 
   static Type* Union(Handle<Type> type1, Handle<Type> type2);
+  static Type* Intersect(Handle<Type> type1, Handle<Type> type2);
   static Type* Optional(Handle<Type> type);  // type \/ Undefined
 
-  bool Is(Handle<Type> that);
-  bool Maybe(Handle<Type> that);
+  bool Is(Type* that) { return (this == that) ? true : IsSlowCase(that); }
+  bool Is(Handle<Type> that) { return this->Is(*that); }
+  bool Maybe(Type* that);
+  bool Maybe(Handle<Type> that) { return this->Maybe(*that); }
+
+  bool IsClass() { return is_class(); }
+  bool IsConstant() { return is_constant(); }
+  Handle<Map> AsClass() { return as_class(); }
+  Handle<v8::internal::Object> AsConstant() { return as_constant(); }
+
+  int NumClasses();
+  int NumConstants();
+
+  template<class T>
+  class Iterator {
+   public:
+    bool Done() const { return index_ < 0; }
+    Handle<T> Current();
+    void Advance();
 
-  // TODO(rossberg): method to iterate unions?
+   private:
+    friend class Type;
+
+    Iterator() : index_(-1) {}
+    explicit Iterator(Handle<Type> type) : type_(type), index_(-1) {
+      Advance();
+    }
+
+    inline bool matches(Handle<Type> type);
+    inline Handle<Type> get_type();
+
+    Handle<Type> type_;
+    int index_;
+  };
+
+  Iterator<Map> Classes() {
+    if (this->is_bitset()) return Iterator<Map>();
+    return Iterator<Map>(this->handle());
+  }
+  Iterator<v8::internal::Object> Constants() {
+    if (this->is_bitset()) return Iterator<v8::internal::Object>();
+    return Iterator<v8::internal::Object>(this->handle());
+  }
 
  private:
   // A union is a fixed array containing types. Invariants:
@@ -139,23 +196,32 @@ class Type : public Object {
     kUndefined = 1 << 1,
     kBoolean = 1 << 2,
     kSmi = 1 << 3,
-    kDouble = 1 << 4,
-    kSymbol = 1 << 5,
-    kInternalizedString = 1 << 6,
-    kOtherString = 1 << 7,
-    kArray = 1 << 8,
-    kFunction = 1 << 9,
-    kOtherObject = 1 << 10,
-    kProxy = 1 << 11,
+    kOtherSigned32 = 1 << 4,
+    kUnsigned32 = 1 << 5,
+    kDouble = 1 << 6,
+    kSymbol = 1 << 7,
+    kInternalizedString = 1 << 8,
+    kOtherString = 1 << 9,
+    kUndetectable = 1 << 10,
+    kArray = 1 << 11,
+    kFunction = 1 << 12,
+    kRegExp = 1 << 13,
+    kOtherObject = 1 << 14,
+    kProxy = 1 << 15,
+    kInternal = 1 << 16,
 
     kOddball = kBoolean | kNull | kUndefined,
-    kNumber = kSmi | kDouble,
+    kSigned32 = kSmi | kOtherSigned32,
+    kNumber = kSigned32 | kUnsigned32 | kDouble,
     kString = kInternalizedString | kOtherString,
     kUniqueName = kSymbol | kInternalizedString,
     kName = kSymbol | kString,
-    kObject = kArray | kFunction | kOtherObject,
+    kNumberOrString = kNumber | kString,
+    kObject = kUndetectable | kArray | kFunction | kRegExp | kOtherObject,
     kReceiver = kObject | kProxy,
-    kAny = kOddball | kNumber | kName | kReceiver,
+    kAllocated = kDouble | kName | kReceiver,
+    kAny = kOddball | kNumber | kAllocated | kInternal,
+    kDetectable = kAllocated - kUndetectable,
     kNone = 0
   };
 
@@ -164,9 +230,14 @@ class Type : public Object {
   bool is_constant() { return this->IsBox(); }
   bool is_union() { return this->IsFixedArray(); }
 
+  bool IsSlowCase(Type* that);
+
   int as_bitset() { return Smi::cast(this)->value(); }
   Handle<Map> as_class() { return Handle<Map>::cast(handle()); }
-  Handle<Box> as_constant() { return Handle<Box>::cast(handle()); }
+  Handle<v8::internal::Object> as_constant() {
+    Handle<Box> box = Handle<Box>::cast(handle());
+    return v8::internal::handle(box->value(), box->GetIsolate());
+  }
   Handle<Unioned> as_union() { return Handle<Unioned>::cast(handle()); }
 
   Handle<Type> handle() { return handle_via_isolate_of(this); }
@@ -192,6 +263,8 @@ class Type : public Object {
   int GlbBitset();  // greatest lower bound that's a bitset
   bool InUnion(Handle<Unioned> unioned, int current_size);
   int ExtendUnion(Handle<Unioned> unioned, int current_size);
+  int ExtendIntersection(
+      Handle<Unioned> unioned, Handle<Type> type, int current_size);
 };
 
 } }  // namespace v8::internal
index 4ba6721..7c11612 100644 (file)
@@ -52,7 +52,7 @@ AstTyper::AstTyper(CompilationInfo* info)
   } while (false)
 
 
-void AstTyper::Type(CompilationInfo* info) {
+void AstTyper::Run(CompilationInfo* info) {
   AstTyper* visitor = new(info->zone()) AstTyper(info);
   Scope* scope = info->scope();
 
@@ -295,7 +295,7 @@ void AstTyper::VisitObjectLiteral(ObjectLiteral* expr) {
     if ((prop->kind() == ObjectLiteral::Property::MATERIALIZED_LITERAL &&
         !CompileTimeValue::IsCompileTimeValue(prop->value())) ||
         prop->kind() == ObjectLiteral::Property::COMPUTED) {
-      if (prop->key()->handle()->IsInternalizedString() && prop->emit_store())
+      if (prop->key()->value()->IsInternalizedString() && prop->emit_store())
         prop->RecordTypeFeedback(oracle());
     }
   }
@@ -404,7 +404,9 @@ void AstTyper::VisitUnaryOperation(UnaryOperation* expr) {
   ASSERT(!HasStackOverflow());
   CHECK_ALIVE(Visit(expr->expression()));
 
-  expr->RecordTypeFeedback(oracle());
+  // Collect type feedback.
+  Handle<Type> op_type = oracle()->UnaryType(expr->UnaryOperationFeedbackId());
+  MergeLowerType(expr->expression(), op_type);
   if (expr->op() == Token::NOT) {
     // TODO(rossberg): only do in test or value context.
     expr->expression()->RecordToBooleanTypeFeedback(oracle());
@@ -429,7 +431,15 @@ void AstTyper::VisitBinaryOperation(BinaryOperation* expr) {
   CHECK_ALIVE(Visit(expr->left()));
   CHECK_ALIVE(Visit(expr->right()));
 
-  expr->RecordTypeFeedback(oracle());
+  // Collect type feedback.
+  Handle<Type> left_type, right_type, result_type;
+  Maybe<int> fixed_right_arg;
+  oracle()->BinaryType(expr->BinaryOperationFeedbackId(),
+      &left_type, &right_type, &result_type, &fixed_right_arg);
+  MergeLowerType(expr->left(), left_type);
+  MergeLowerType(expr->right(), right_type);
+  expr->set_result_type(result_type);
+  expr->set_fixed_right_arg(fixed_right_arg);
   if (expr->op() == Token::OR || expr->op() == Token::AND) {
     expr->left()->RecordToBooleanTypeFeedback(oracle());
   }
@@ -441,7 +451,13 @@ void AstTyper::VisitCompareOperation(CompareOperation* expr) {
   CHECK_ALIVE(Visit(expr->left()));
   CHECK_ALIVE(Visit(expr->right()));
 
-  expr->RecordTypeFeedback(oracle());
+  // Collect type feedback.
+  Handle<Type> left_type, right_type, combined_type;
+  oracle()->CompareType(expr->CompareOperationFeedbackId(),
+      &left_type, &right_type, &combined_type);
+  MergeLowerType(expr->left(), left_type);
+  MergeLowerType(expr->right(), right_type);
+  expr->set_combined_type(combined_type);
 }
 
 
index d8708c2..2d3fac0 100644 (file)
@@ -43,7 +43,7 @@ namespace internal {
 
 class AstTyper: public AstVisitor {
  public:
-  static void Type(CompilationInfo* info);
+  static void Run(CompilationInfo* info);
 
   void* operator new(size_t size, Zone* zone) {
     return zone->New(static_cast<int>(size));
@@ -62,6 +62,13 @@ class AstTyper: public AstVisitor {
   TypeFeedbackOracle* oracle() { return &oracle_; }
   Zone* zone() const { return info_->zone(); }
 
+  void MergeLowerType(Expression* e, Handle<Type> t) {
+    e->set_lower_type(handle(Type::Union(e->lower_type(), t), isolate_));
+  }
+  void MergeUpperType(Expression* e, Handle<Type> t) {
+    e->set_upper_type(handle(Type::Intersect(e->upper_type(), t), isolate_));
+  }
+
   void VisitDeclarations(ZoneList<Declaration*>* declarations);
   void VisitStatements(ZoneList<Statement*>* statements);
 
index fffb1db..796ba40 100644 (file)
@@ -30,6 +30,8 @@
 
 #include "unbound-queue.h"
 
+#include "atomicops.h"
+
 namespace v8 {
 namespace internal {
 
@@ -66,11 +68,12 @@ void UnboundQueue<Record>::DeleteFirst() {
 
 
 template<typename Record>
-void UnboundQueue<Record>::Dequeue(Record* rec) {
-  ASSERT(divider_ != last_);
+bool UnboundQueue<Record>::Dequeue(Record* rec) {
+  if (divider_ == Acquire_Load(&last_)) return false;
   Node* next = reinterpret_cast<Node*>(divider_)->next;
   *rec = next->value;
-  OS::ReleaseStore(&divider_, reinterpret_cast<AtomicWord>(next));
+  Release_Store(&divider_, reinterpret_cast<AtomicWord>(next));
+  return true;
 }
 
 
@@ -78,14 +81,23 @@ template<typename Record>
 void UnboundQueue<Record>::Enqueue(const Record& rec) {
   Node*& next = reinterpret_cast<Node*>(last_)->next;
   next = new Node(rec);
-  OS::ReleaseStore(&last_, reinterpret_cast<AtomicWord>(next));
-  while (first_ != reinterpret_cast<Node*>(divider_)) DeleteFirst();
+  Release_Store(&last_, reinterpret_cast<AtomicWord>(next));
+
+  while (first_ != reinterpret_cast<Node*>(Acquire_Load(&divider_))) {
+    DeleteFirst();
+  }
+}
+
+
+template<typename Record>
+bool UnboundQueue<Record>::IsEmpty() const {
+  return NoBarrier_Load(&divider_) == NoBarrier_Load(&last_);
 }
 
 
 template<typename Record>
-Record* UnboundQueue<Record>::Peek() {
-  ASSERT(divider_ != last_);
+Record* UnboundQueue<Record>::Peek() const {
+  if (divider_ == Acquire_Load(&last_)) return NULL;
   Node* next = reinterpret_cast<Node*>(divider_)->next;
   return &next->value;
 }
index 59a426b..429e3c6 100644 (file)
@@ -46,10 +46,10 @@ class UnboundQueue BASE_EMBEDDED {
   inline UnboundQueue();
   inline ~UnboundQueue();
 
-  INLINE(void Dequeue(Record* rec));
+  INLINE(bool Dequeue(Record* rec));
   INLINE(void Enqueue(const Record& rec));
-  INLINE(bool IsEmpty()) { return divider_ == last_; }
-  INLINE(Record* Peek());
+  INLINE(bool IsEmpty() const);
+  INLINE(Record* Peek() const);
 
  private:
   INLINE(void DeleteFirst());
index c810cba..dfe1e20 100644 (file)
@@ -63,12 +63,16 @@ namespace internal {
      V8.MemoryExternalFragmentationMapSpace)                          \
   HP(external_fragmentation_cell_space,                               \
      V8.MemoryExternalFragmentationCellSpace)                         \
+  HP(external_fragmentation_property_cell_space,                      \
+     V8.MemoryExternalFragmentationPropertyCellSpace)                 \
   HP(external_fragmentation_lo_space,                                 \
      V8.MemoryExternalFragmentationLoSpace)                           \
   HP(heap_fraction_map_space,                                         \
      V8.MemoryHeapFractionMapSpace)                                   \
   HP(heap_fraction_cell_space,                                        \
      V8.MemoryHeapFractionCellSpace)                                  \
+  HP(heap_fraction_property_cell_space,                               \
+     V8.MemoryHeapFractionPropertyCellSpace)                          \
 
 
 #define HISTOGRAM_MEMORY_LIST(HM)                                     \
@@ -77,7 +81,9 @@ namespace internal {
   HM(heap_sample_map_space_committed,                                 \
      V8.MemoryHeapSampleMapSpaceCommitted)                            \
   HM(heap_sample_cell_space_committed,                                \
-     V8.MemoryHeapSampleCellSpaceCommitted)
+     V8.MemoryHeapSampleCellSpaceCommitted)                           \
+  HM(heap_sample_property_cell_space_committed,                       \
+     V8.MemoryHeapSamplePropertyCellSpaceCommitted)                   \
 
 
 // WARNING: STATS_COUNTER_LIST_* is a very large macro that is causing MSVC
@@ -88,8 +94,6 @@ namespace internal {
 #define STATS_COUNTER_LIST_1(SC)                                      \
   /* Global Handle Count*/                                            \
   SC(global_handles, V8.GlobalHandles)                                \
-  /* Mallocs from PCRE */                                             \
-  SC(pcre_mallocs, V8.PcreMallocCount)                                \
   /* OS Memory allocated */                                           \
   SC(memory_allocated, V8.OsMemoryAllocated)                          \
   SC(normalized_maps, V8.NormalizedMaps)                              \
@@ -108,8 +112,6 @@ namespace internal {
   SC(arguments_adaptors, V8.ArgumentsAdaptors)                        \
   SC(compilation_cache_hits, V8.CompilationCacheHits)                 \
   SC(compilation_cache_misses, V8.CompilationCacheMisses)             \
-  SC(regexp_cache_hits, V8.RegExpCacheHits)                           \
-  SC(regexp_cache_misses, V8.RegExpCacheMisses)                       \
   SC(string_ctor_calls, V8.StringConstructorCalls)                    \
   SC(string_ctor_conversions, V8.StringConstructorConversions)        \
   SC(string_ctor_cached_number, V8.StringConstructorCachedNumber)     \
@@ -127,8 +129,6 @@ namespace internal {
   SC(total_preparse_symbols_skipped, V8.TotalPreparseSymbolSkipped)   \
   /* Amount of compiled source code. */                               \
   SC(total_compile_size, V8.TotalCompileSize)                         \
-  /* Amount of source code compiled with the old codegen. */          \
-  SC(total_old_codegen_source_size, V8.TotalOldCodegenSourceSize)     \
   /* Amount of source code compiled with the full codegen. */         \
   SC(total_full_codegen_source_size, V8.TotalFullCodegenSourceSize)   \
   /* Number of contexts created from scratch. */                      \
@@ -155,8 +155,6 @@ namespace internal {
      V8.GCCompactorCausedByPromotedData)                              \
   SC(gc_compactor_caused_by_oldspace_exhaustion,                      \
      V8.GCCompactorCausedByOldspaceExhaustion)                        \
-  SC(gc_compactor_caused_by_weak_handles,                             \
-     V8.GCCompactorCausedByWeakHandles)                               \
   SC(gc_last_resort_from_js, V8.GCLastResortFromJS)                   \
   SC(gc_last_resort_from_handles, V8.GCLastResortFromHandles)         \
   /* How is the generic keyed-load stub used? */                      \
@@ -171,39 +169,9 @@ namespace internal {
   SC(keyed_call_generic_smi_dict, V8.KeyedCallGenericSmiDict)         \
   SC(keyed_call_generic_lookup_cache, V8.KeyedCallGenericLookupCache) \
   SC(keyed_call_generic_lookup_dict, V8.KeyedCallGenericLookupDict)   \
-  SC(keyed_call_generic_value_type, V8.KeyedCallGenericValueType)     \
   SC(keyed_call_generic_slow, V8.KeyedCallGenericSlow)                \
   SC(keyed_call_generic_slow_load, V8.KeyedCallGenericSlowLoad)       \
-  /* Count how much the monomorphic keyed-load stubs are hit. */      \
-  SC(keyed_load_function_prototype, V8.KeyedLoadFunctionPrototype)    \
-  SC(keyed_load_string_length, V8.KeyedLoadStringLength)              \
-  SC(keyed_load_array_length, V8.KeyedLoadArrayLength)                \
-  SC(keyed_load_constant_function, V8.KeyedLoadConstantFunction)      \
-  SC(keyed_load_field, V8.KeyedLoadField)                             \
-  SC(keyed_load_callback, V8.KeyedLoadCallback)                       \
-  SC(keyed_load_interceptor, V8.KeyedLoadInterceptor)                 \
-  SC(keyed_load_inline, V8.KeyedLoadInline)                           \
-  SC(keyed_load_inline_miss, V8.KeyedLoadInlineMiss)                  \
-  SC(named_load_inline, V8.NamedLoadInline)                           \
-  SC(named_load_inline_miss, V8.NamedLoadInlineMiss)                  \
-  SC(named_load_global_inline, V8.NamedLoadGlobalInline)              \
-  SC(named_load_global_inline_miss, V8.NamedLoadGlobalInlineMiss)     \
-  SC(dont_delete_hint_hit, V8.DontDeleteHintHit)                      \
-  SC(dont_delete_hint_miss, V8.DontDeleteHintMiss)                    \
   SC(named_load_global_stub, V8.NamedLoadGlobalStub)                  \
-  SC(named_load_global_stub_miss, V8.NamedLoadGlobalStubMiss)         \
-  SC(keyed_store_field, V8.KeyedStoreField)                           \
-  SC(named_store_inline_field, V8.NamedStoreInlineField)              \
-  SC(keyed_store_inline, V8.KeyedStoreInline)                         \
-  SC(named_load_inline_generic, V8.NamedLoadInlineGeneric)            \
-  SC(named_load_inline_field, V8.NamedLoadInlineFast)                 \
-  SC(keyed_load_inline_generic, V8.KeyedLoadInlineGeneric)            \
-  SC(keyed_load_inline_fast, V8.KeyedLoadInlineFast)                  \
-  SC(keyed_store_inline_generic, V8.KeyedStoreInlineGeneric)          \
-  SC(keyed_store_inline_fast, V8.KeyedStoreInlineFast)                \
-  SC(named_store_inline_generic, V8.NamedStoreInlineGeneric)          \
-  SC(named_store_inline_fast, V8.NamedStoreInlineFast)                \
-  SC(keyed_store_inline_miss, V8.KeyedStoreInlineMiss)                \
   SC(named_store_global_inline, V8.NamedStoreGlobalInline)            \
   SC(named_store_global_inline_miss, V8.NamedStoreGlobalInlineMiss)   \
   SC(keyed_store_polymorphic_stubs, V8.KeyedStorePolymorphicStubs)    \
@@ -225,7 +193,6 @@ namespace internal {
   SC(call_global_inline_miss, V8.CallGlobalInlineMiss)                \
   SC(constructed_objects, V8.ConstructedObjects)                      \
   SC(constructed_objects_runtime, V8.ConstructedObjectsRuntime)       \
-  SC(constructed_objects_stub, V8.ConstructedObjectsStub)             \
   SC(negative_lookups, V8.NegativeLookups)                            \
   SC(negative_lookups_miss, V8.NegativeLookupsMiss)                   \
   SC(megamorphic_stub_cache_probes, V8.MegamorphicStubCacheProbes)    \
@@ -237,9 +204,7 @@ namespace internal {
   SC(enum_cache_hits, V8.EnumCacheHits)                               \
   SC(enum_cache_misses, V8.EnumCacheMisses)                           \
   SC(zone_segment_bytes, V8.ZoneSegmentBytes)                         \
-  SC(compute_entry_frame, V8.ComputeEntryFrame)                       \
   SC(generic_binary_stub_calls, V8.GenericBinaryStubCalls)            \
-  SC(generic_binary_stub_calls_regs, V8.GenericBinaryStubCallsRegs)   \
   SC(fast_new_closure_total, V8.FastNewClosureTotal)                  \
   SC(fast_new_closure_try_optimized, V8.FastNewClosureTryOptimized)   \
   SC(fast_new_closure_install_optimized, V8.FastNewClosureInstallOptimized) \
@@ -273,10 +238,9 @@ namespace internal {
   SC(transcendental_cache_miss, V8.TranscendentalCacheMiss)           \
   SC(stack_interrupts, V8.StackInterrupts)                            \
   SC(runtime_profiler_ticks, V8.RuntimeProfilerTicks)                 \
-  SC(smi_checks_removed, V8.SmiChecksRemoved)                         \
-  SC(map_checks_removed, V8.MapChecksRemoved)                         \
-  SC(quote_json_char_count, V8.QuoteJsonCharacterCount)               \
-  SC(quote_json_char_recount, V8.QuoteJsonCharacterReCount)           \
+  SC(soft_deopts_requested, V8.SoftDeoptsRequested)                   \
+  SC(soft_deopts_inserted, V8.SoftDeoptsInserted)                     \
+  SC(soft_deopts_executed, V8.SoftDeoptsExecuted)                     \
   SC(new_space_bytes_available, V8.MemoryNewSpaceBytesAvailable)      \
   SC(new_space_bytes_committed, V8.MemoryNewSpaceBytesCommitted)      \
   SC(new_space_bytes_used, V8.MemoryNewSpaceBytesUsed)                \
@@ -297,6 +261,12 @@ namespace internal {
   SC(cell_space_bytes_available, V8.MemoryCellSpaceBytesAvailable)    \
   SC(cell_space_bytes_committed, V8.MemoryCellSpaceBytesCommitted)    \
   SC(cell_space_bytes_used, V8.MemoryCellSpaceBytesUsed)              \
+  SC(property_cell_space_bytes_available,                             \
+     V8.MemoryPropertyCellSpaceBytesAvailable)                        \
+  SC(property_cell_space_bytes_committed,                             \
+     V8.MemoryPropertyCellSpaceBytesCommitted)                        \
+  SC(property_cell_space_bytes_used,                                  \
+     V8.MemoryPropertyCellSpaceBytesUsed)                             \
   SC(lo_space_bytes_available, V8.MemoryLoSpaceBytesAvailable)        \
   SC(lo_space_bytes_committed, V8.MemoryLoSpaceBytesCommitted)        \
   SC(lo_space_bytes_used, V8.MemoryLoSpaceBytesUsed)
index 80b12de..cb67105 100644 (file)
@@ -271,6 +271,44 @@ void V8::InitializeOncePerProcessImpl() {
     FLAG_max_new_space_size = (1 << (kPageSizeBits - 10)) * 2;
   }
   if (FLAG_trace_hydrogen) FLAG_parallel_recompilation = false;
+
+  if (FLAG_sweeper_threads <= 0) {
+    if (FLAG_concurrent_sweeping) {
+      FLAG_sweeper_threads = SystemThreadManager::
+          NumberOfParallelSystemThreads(
+              SystemThreadManager::CONCURRENT_SWEEPING);
+    } else if (FLAG_parallel_sweeping) {
+      FLAG_sweeper_threads = SystemThreadManager::
+          NumberOfParallelSystemThreads(
+              SystemThreadManager::PARALLEL_SWEEPING);
+    }
+    if (FLAG_sweeper_threads == 0) {
+      FLAG_concurrent_sweeping = false;
+      FLAG_parallel_sweeping = false;
+    }
+  } else if (!FLAG_concurrent_sweeping && !FLAG_parallel_sweeping) {
+    FLAG_sweeper_threads = 0;
+  }
+
+  if (FLAG_parallel_marking) {
+    if (FLAG_marking_threads <= 0) {
+      FLAG_marking_threads = SystemThreadManager::
+          NumberOfParallelSystemThreads(
+              SystemThreadManager::PARALLEL_MARKING);
+    }
+    if (FLAG_marking_threads == 0) {
+      FLAG_parallel_marking = false;
+    }
+  } else {
+    FLAG_marking_threads = 0;
+  }
+
+  if (FLAG_parallel_recompilation &&
+      SystemThreadManager::NumberOfParallelSystemThreads(
+          SystemThreadManager::PARALLEL_RECOMPILATION) == 0) {
+    FLAG_parallel_recompilation = false;
+  }
+
   OS::SetUp();
   Sampler::SetUp();
   CPU::SetUp();
index b8a5ae4..47893e8 100644 (file)
@@ -48,9 +48,6 @@
 #error both DEBUG and NDEBUG are set
 #endif
 
-// TODO(dcarney): remove this
-#define V8_ALLOW_ACCESS_TO_RAW_HANDLE_CONSTRUCTOR
-
 // Basic includes
 #include "../include/v8.h"
 #include "v8globals.h"
@@ -67,9 +64,7 @@
 #include "incremental-marking-inl.h"
 #include "mark-compact-inl.h"
 #include "log-inl.h"
-#include "cpu-profiler-inl.h"
 #include "handles-inl.h"
-#include "heap-snapshot-generator-inl.h"
 #include "zone-inl.h"
 
 namespace v8 {
@@ -104,6 +99,8 @@ class V8 : public AllStatic {
   // Support for return-address rewriting profilers.
   static void SetReturnAddressLocationResolver(
       ReturnAddressLocationResolver resolver);
+  // Support for entry hooking JITed code.
+  static void SetFunctionEntryHook(FunctionEntryHook entry_hook);
   // Random number generation support. Not cryptographically safe.
   static uint32_t Random(Context* context);
   // We use random numbers internally in memory allocation and in the
index 98940c5..4932da9 100644 (file)
@@ -180,12 +180,13 @@ enum AllocationSpace {
   CODE_SPACE,           // No pointers to new space, marked executable.
   MAP_SPACE,            // Only and all map objects.
   CELL_SPACE,           // Only and all cell objects.
+  PROPERTY_CELL_SPACE,  // Only and all global property cell objects.
   LO_SPACE,             // Promoted large objects.
 
   FIRST_SPACE = NEW_SPACE,
   LAST_SPACE = LO_SPACE,
   FIRST_PAGED_SPACE = OLD_POINTER_SPACE,
-  LAST_PAGED_SPACE = CELL_SPACE
+  LAST_PAGED_SPACE = PROPERTY_CELL_SPACE
 };
 const int kSpaceTagSize = 3;
 const int kSpaceTagMask = (1 << kSpaceTagSize) - 1;
index e168b71..76eeac6 100644 (file)
@@ -1786,30 +1786,36 @@ function FunctionBind(this_arg) { // Length is 1.
 }
 
 
-function NewFunction(arg1) {  // length == 1
-  var n = %_ArgumentsLength();
+function NewFunctionString(arguments, function_token) {
+  var n = arguments.length;
   var p = '';
   if (n > 1) {
-    p = new InternalArray(n - 1);
-    for (var i = 0; i < n - 1; i++) p[i] = %_Arguments(i);
-    p = Join(p, n - 1, ',', NonStringToString);
+    p = ToString(arguments[0]);
+    for (var i = 1; i < n - 1; i++) {
+      p += ',' + ToString(arguments[i]);
+    }
     // If the formal parameters string include ) - an illegal
     // character - it may make the combined function expression
     // compile. We avoid this problem by checking for this early on.
     if (%_CallFunction(p, ')', StringIndexOf) != -1) {
-      throw MakeSyntaxError('paren_in_arg_string',[]);
+      throw MakeSyntaxError('paren_in_arg_string', []);
     }
     // If the formal parameters include an unbalanced block comment, the
     // function must be rejected. Since JavaScript does not allow nested
     // comments we can include a trailing block comment to catch this.
     p += '\n/' + '**/';
   }
-  var body = (n > 0) ? ToString(%_Arguments(n - 1)) : '';
-  var source = '(function(' + p + ') {\n' + body + '\n})';
+  var body = (n > 0) ? ToString(arguments[n - 1]) : '';
+  return '(' + function_token + '(' + p + ') {\n' + body + '\n})';
+}
 
+
+function FunctionConstructor(arg1) {  // length == 1
+  var source = NewFunctionString(arguments, 'function');
   var global_receiver = %GlobalReceiver(global);
+  // Compile the string in the constructor and not a helper so that errors
+  // appear to come from here.
   var f = %_CallFunction(global_receiver, %CompileString(source, true));
-
   %FunctionMarkNameShouldPrintAsAnonymous(f);
   return f;
 }
@@ -1820,7 +1826,7 @@ function NewFunction(arg1) {  // length == 1
 function SetUpFunction() {
   %CheckIsBootstrapping();
 
-  %SetCode($Function, NewFunction);
+  %SetCode($Function, FunctionConstructor);
   %SetProperty($Function.prototype, "constructor", $Function, DONT_ENUM);
 
   InstallFunctions($Function.prototype, DONT_ENUM, $Array(
index 8661f9b..ff9f8f2 100644 (file)
@@ -257,9 +257,9 @@ inline void MemsetPointer(T** dest, U* value, int counter) {
   a = b;  // Fake assignment to check assignability.
   USE(a);
 #endif  // DEBUG
-#if defined(V8_HOST_ARCH_IA32)
+#if V8_HOST_ARCH_IA32
 #define STOS "stosl"
-#elif defined(V8_HOST_ARCH_X64)
+#elif V8_HOST_ARCH_X64
 #define STOS "stosq"
 #endif
 #if defined(__native_client__)
index bad15cf..0041c67 100644 (file)
@@ -33,8 +33,8 @@
 // NOTE these macros are used by some of the tool scripts and the build
 // system so their names cannot be changed without changing the scripts.
 #define MAJOR_VERSION     3
-#define MINOR_VERSION     19
-#define BUILD_NUMBER      13
+#define MINOR_VERSION     20
+#define BUILD_NUMBER      2
 #define PATCH_LEVEL       0
 // Use 1 for candidates and 0 otherwise.
 // (Boolean macro values are not supported by all preprocessors.)
index 91bc528..1c231a7 100644 (file)
@@ -308,6 +308,7 @@ Address* RelocInfo::target_reference_address() {
 
 void RelocInfo::set_target_object(Object* target, WriteBarrierMode mode) {
   ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
+  ASSERT(!target->IsConsString());
   Memory::Object_at(pc_) = target;
   CPU::FlushICache(pc_, sizeof(Address));
   if (mode == UPDATE_WRITE_BARRIER &&
@@ -332,24 +333,22 @@ void RelocInfo::set_target_runtime_entry(Address target,
 }
 
 
-Handle<JSGlobalPropertyCell> RelocInfo::target_cell_handle() {
-  ASSERT(rmode_ == RelocInfo::GLOBAL_PROPERTY_CELL);
+Handle<Cell> RelocInfo::target_cell_handle() {
+  ASSERT(rmode_ == RelocInfo::CELL);
   Address address = Memory::Address_at(pc_);
-  return Handle<JSGlobalPropertyCell>(
-      reinterpret_cast<JSGlobalPropertyCell**>(address));
+  return Handle<Cell>(reinterpret_cast<Cell**>(address));
 }
 
 
-JSGlobalPropertyCell* RelocInfo::target_cell() {
-  ASSERT(rmode_ == RelocInfo::GLOBAL_PROPERTY_CELL);
-  return JSGlobalPropertyCell::FromValueAddress(Memory::Address_at(pc_));
+Cell* RelocInfo::target_cell() {
+  ASSERT(rmode_ == RelocInfo::CELL);
+  return Cell::FromValueAddress(Memory::Address_at(pc_));
 }
 
 
-void RelocInfo::set_target_cell(JSGlobalPropertyCell* cell,
-                                WriteBarrierMode mode) {
-  ASSERT(rmode_ == RelocInfo::GLOBAL_PROPERTY_CELL);
-  Address address = cell->address() + JSGlobalPropertyCell::kValueOffset;
+void RelocInfo::set_target_cell(Cell* cell, WriteBarrierMode mode) {
+  ASSERT(rmode_ == RelocInfo::CELL);
+  Address address = cell->address() + Cell::kValueOffset;
   Memory::Address_at(pc_) = address;
   CPU::FlushICache(pc_, sizeof(Address));
   if (mode == UPDATE_WRITE_BARRIER &&
@@ -445,8 +444,8 @@ void RelocInfo::Visit(ObjectVisitor* visitor) {
     CPU::FlushICache(pc_, sizeof(Address));
   } else if (RelocInfo::IsCodeTarget(mode)) {
     visitor->VisitCodeTarget(this);
-  } else if (mode == RelocInfo::GLOBAL_PROPERTY_CELL) {
-    visitor->VisitGlobalPropertyCell(this);
+  } else if (mode == RelocInfo::CELL) {
+    visitor->VisitCell(this);
   } else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
     visitor->VisitExternalReference(this);
     CPU::FlushICache(pc_, sizeof(Address));
@@ -475,8 +474,8 @@ void RelocInfo::Visit(Heap* heap) {
     CPU::FlushICache(pc_, sizeof(Address));
   } else if (RelocInfo::IsCodeTarget(mode)) {
     StaticVisitor::VisitCodeTarget(heap, this);
-  } else if (mode == RelocInfo::GLOBAL_PROPERTY_CELL) {
-    StaticVisitor::VisitGlobalPropertyCell(heap, this);
+  } else if (mode == RelocInfo::CELL) {
+    StaticVisitor::VisitCell(heap, this);
   } else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
     StaticVisitor::VisitExternalReference(this);
     CPU::FlushICache(pc_, sizeof(Address));
index f547e79..3a3ee9c 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_X64)
+#if V8_TARGET_ARCH_X64
 
 #include "macro-assembler.h"
 #include "serialize.h"
index 2a01b0b..2b44a77 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_X64)
+#if V8_TARGET_ARCH_X64
 
 #include "codegen.h"
 #include "deoptimizer.h"
@@ -44,15 +44,15 @@ void Builtins::Generate_Adaptor(MacroAssembler* masm,
                                 CFunctionId id,
                                 BuiltinExtraArguments extra_args) {
   // ----------- S t a t e -------------
-  //  -- rax                : number of arguments excluding receiver
-  //  -- rdi                : called function (only guaranteed when
-  //                          extra_args requires it)
-  //  -- rsi                : context
-  //  -- rsp[0]             : return address
-  //  -- rsp[8]             : last argument
+  //  -- rax                 : number of arguments excluding receiver
+  //  -- rdi                 : called function (only guaranteed when
+  //                           extra_args requires it)
+  //  -- rsi                 : context
+  //  -- rsp[0]              : return address
+  //  -- rsp[8]              : last argument
   //  -- ...
-  //  -- rsp[8 * argc]      : first argument (argc == rax)
-  //  -- rsp[8 * (argc +1)] : receiver
+  //  -- rsp[8 * argc]       : first argument (argc == rax)
+  //  -- rsp[8 * (argc + 1)] : receiver
   // -----------------------------------
 
   // Insert extra arguments.
@@ -456,6 +456,8 @@ void Builtins::Generate_JSConstructStubApi(MacroAssembler* masm) {
 
 static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
                                              bool is_construct) {
+  ProfileEntryHookStub::MaybeCallEntryHook(masm);
+
   // Expects five C++ function parameters.
   // - Address entry (ignored)
   // - JSFunction* function (
@@ -473,10 +475,10 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
 
 #ifdef _WIN64
     // MSVC parameters in:
-    // rcx : entry (ignored)
-    // rdx : function
-    // r8 : receiver
-    // r9 : argc
+    // rcx        : entry (ignored)
+    // rdx        : function
+    // r8         : receiver
+    // r9         : argc
     // [rsp+0x20] : argv
 
     // Clear the context before we push it when entering the internal frame.
@@ -525,9 +527,9 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
 #endif  // _WIN64
 
     // Current stack contents:
-    // [rsp + 2 * kPointerSize ... ]: Internal frame
-    // [rsp + kPointerSize]         : function
-    // [rsp]                        : receiver
+    // [rsp + 2 * kPointerSize ... ] : Internal frame
+    // [rsp + kPointerSize]          : function
+    // [rsp]                         : receiver
     // Current register contents:
     // rax : argc
     // rbx : argv
@@ -756,12 +758,12 @@ void Builtins::Generate_NotifyOSR(MacroAssembler* masm) {
 
 void Builtins::Generate_FunctionCall(MacroAssembler* masm) {
   // Stack Layout:
-  // rsp[0]:   Return address
-  // rsp[1]:   Argument n
-  // rsp[2]:   Argument n-1
+  // rsp[0]           : Return address
+  // rsp[8]           : Argument n
+  // rsp[16]          : Argument n-1
   //  ...
-  // rsp[n]:   Argument 1
-  // rsp[n+1]: Receiver (function to call)
+  // rsp[8 * n]       : Argument 1
+  // rsp[8 * (n + 1)] : Receiver (function to call)
   //
   // rax contains the number of arguments, n, not counting the receiver.
   //
@@ -929,18 +931,18 @@ void Builtins::Generate_FunctionCall(MacroAssembler* masm) {
 
 void Builtins::Generate_FunctionApply(MacroAssembler* masm) {
   // Stack at entry:
-  //    rsp: return address
-  //  rsp+8: arguments
-  // rsp+16: receiver ("this")
-  // rsp+24: function
+  // rsp     : return address
+  // rsp[8]  : arguments
+  // rsp[16] : receiver ("this")
+  // rsp[24] : function
   {
     FrameScope frame_scope(masm, StackFrame::INTERNAL);
     // Stack frame:
-    //    rbp: Old base pointer
-    // rbp[1]: return address
-    // rbp[2]: function arguments
-    // rbp[3]: receiver
-    // rbp[4]: function
+    // rbp     : Old base pointer
+    // rbp[8]  : return address
+    // rbp[16] : function arguments
+    // rbp[24] : receiver
+    // rbp[32] : function
     static const int kArgumentsOffset = 2 * kPointerSize;
     static const int kReceiverOffset = 3 * kPointerSize;
     static const int kFunctionOffset = 4 * kPointerSize;
@@ -1093,369 +1095,9 @@ void Builtins::Generate_FunctionApply(MacroAssembler* masm) {
 }
 
 
-// Allocate an empty JSArray. The allocated array is put into the result
-// register. If the parameter initial_capacity is larger than zero an elements
-// backing store is allocated with this size and filled with the hole values.
-// Otherwise the elements backing store is set to the empty FixedArray.
-static void AllocateEmptyJSArray(MacroAssembler* masm,
-                                 Register array_function,
-                                 Register result,
-                                 Register scratch1,
-                                 Register scratch2,
-                                 Register scratch3,
-                                 Label* gc_required) {
-  const int initial_capacity = JSArray::kPreallocatedArrayElements;
-  STATIC_ASSERT(initial_capacity >= 0);
-
-  __ LoadInitialArrayMap(array_function, scratch2, scratch1, false);
-
-  // Allocate the JSArray object together with space for a fixed array with the
-  // requested elements.
-  int size = JSArray::kSize;
-  if (initial_capacity > 0) {
-    size += FixedArray::SizeFor(initial_capacity);
-  }
-  __ Allocate(size, result, scratch2, scratch3, gc_required, TAG_OBJECT);
-
-  // Allocated the JSArray. Now initialize the fields except for the elements
-  // array.
-  // result: JSObject
-  // scratch1: initial map
-  // scratch2: start of next object
-  Factory* factory = masm->isolate()->factory();
-  __ movq(FieldOperand(result, JSObject::kMapOffset), scratch1);
-  __ Move(FieldOperand(result, JSArray::kPropertiesOffset),
-          factory->empty_fixed_array());
-  // Field JSArray::kElementsOffset is initialized later.
-  __ Move(FieldOperand(result, JSArray::kLengthOffset), Smi::FromInt(0));
-
-  // If no storage is requested for the elements array just set the empty
-  // fixed array.
-  if (initial_capacity == 0) {
-    __ Move(FieldOperand(result, JSArray::kElementsOffset),
-            factory->empty_fixed_array());
-    return;
-  }
-
-  // Calculate the location of the elements array and set elements array member
-  // of the JSArray.
-  // result: JSObject
-  // scratch2: start of next object
-  __ lea(scratch1, Operand(result, JSArray::kSize));
-  __ movq(FieldOperand(result, JSArray::kElementsOffset), scratch1);
-
-  // Initialize the FixedArray and fill it with holes. FixedArray length is
-  // stored as a smi.
-  // result: JSObject
-  // scratch1: elements array
-  // scratch2: start of next object
-  __ Move(FieldOperand(scratch1, HeapObject::kMapOffset),
-          factory->fixed_array_map());
-  __ Move(FieldOperand(scratch1, FixedArray::kLengthOffset),
-          Smi::FromInt(initial_capacity));
-
-  // Fill the FixedArray with the hole value. Inline the code if short.
-  // Reconsider loop unfolding if kPreallocatedArrayElements gets changed.
-  static const int kLoopUnfoldLimit = 4;
-  __ LoadRoot(scratch3, Heap::kTheHoleValueRootIndex);
-  if (initial_capacity <= kLoopUnfoldLimit) {
-    // Use a scratch register here to have only one reloc info when unfolding
-    // the loop.
-    for (int i = 0; i < initial_capacity; i++) {
-      __ movq(FieldOperand(scratch1,
-                           FixedArray::kHeaderSize + i * kPointerSize),
-              scratch3);
-    }
-  } else {
-    Label loop, entry;
-    __ movq(scratch2, Immediate(initial_capacity));
-    __ jmp(&entry);
-    __ bind(&loop);
-    __ movq(FieldOperand(scratch1,
-                         scratch2,
-                         times_pointer_size,
-                         FixedArray::kHeaderSize),
-            scratch3);
-    __ bind(&entry);
-    __ decq(scratch2);
-    __ j(not_sign, &loop);
-  }
-}
-
-
-// Allocate a JSArray with the number of elements stored in a register. The
-// register array_function holds the built-in Array function and the register
-// array_size holds the size of the array as a smi. The allocated array is put
-// into the result register and beginning and end of the FixedArray elements
-// storage is put into registers elements_array and elements_array_end  (see
-// below for when that is not the case). If the parameter fill_with_holes is
-// true the allocated elements backing store is filled with the hole values
-// otherwise it is left uninitialized. When the backing store is filled the
-// register elements_array is scratched.
-static void AllocateJSArray(MacroAssembler* masm,
-                            Register array_function,  // Array function.
-                            Register array_size,  // As a smi, cannot be 0.
-                            Register result,
-                            Register elements_array,
-                            Register elements_array_end,
-                            Register scratch,
-                            bool fill_with_hole,
-                            Label* gc_required) {
-  __ LoadInitialArrayMap(array_function, scratch,
-                         elements_array, fill_with_hole);
-
-  if (FLAG_debug_code) {  // Assert that array size is not zero.
-    __ testq(array_size, array_size);
-    __ Assert(not_zero, "array size is unexpectedly 0");
-  }
-
-  // Allocate the JSArray object together with space for a FixedArray with the
-  // requested elements.
-  SmiIndex index =
-      masm->SmiToIndex(kScratchRegister, array_size, kPointerSizeLog2);
-  __ Allocate(JSArray::kSize + FixedArray::kHeaderSize,
-              index.scale,
-              index.reg,
-              result,
-              elements_array_end,
-              scratch,
-              gc_required,
-              TAG_OBJECT);
-
-  // Allocated the JSArray. Now initialize the fields except for the elements
-  // array.
-  // result: JSObject
-  // elements_array: initial map
-  // elements_array_end: start of next object
-  // array_size: size of array (smi)
-  Factory* factory = masm->isolate()->factory();
-  __ movq(FieldOperand(result, JSObject::kMapOffset), elements_array);
-  __ Move(elements_array, factory->empty_fixed_array());
-  __ movq(FieldOperand(result, JSArray::kPropertiesOffset), elements_array);
-  // Field JSArray::kElementsOffset is initialized later.
-  __ movq(FieldOperand(result, JSArray::kLengthOffset), array_size);
-
-  // Calculate the location of the elements array and set elements array member
-  // of the JSArray.
-  // result: JSObject
-  // elements_array_end: start of next object
-  // array_size: size of array (smi)
-  __ lea(elements_array, Operand(result, JSArray::kSize));
-  __ movq(FieldOperand(result, JSArray::kElementsOffset), elements_array);
-
-  // Initialize the fixed array. FixedArray length is stored as a smi.
-  // result: JSObject
-  // elements_array: elements array
-  // elements_array_end: start of next object
-  // array_size: size of array (smi)
-  __ Move(FieldOperand(elements_array, JSObject::kMapOffset),
-          factory->fixed_array_map());
-  // For non-empty JSArrays the length of the FixedArray and the JSArray is the
-  // same.
-  __ movq(FieldOperand(elements_array, FixedArray::kLengthOffset), array_size);
-
-  // Fill the allocated FixedArray with the hole value if requested.
-  // result: JSObject
-  // elements_array: elements array
-  // elements_array_end: start of next object
-  if (fill_with_hole) {
-    Label loop, entry;
-    __ LoadRoot(scratch, Heap::kTheHoleValueRootIndex);
-    __ lea(elements_array, Operand(elements_array,
-                                   FixedArray::kHeaderSize - kHeapObjectTag));
-    __ jmp(&entry);
-    __ bind(&loop);
-    __ movq(Operand(elements_array, 0), scratch);
-    __ addq(elements_array, Immediate(kPointerSize));
-    __ bind(&entry);
-    __ cmpq(elements_array, elements_array_end);
-    __ j(below, &loop);
-  }
-}
-
-
-// Create a new array for the built-in Array function. This function allocates
-// the JSArray object and the FixedArray elements array and initializes these.
-// If the Array cannot be constructed in native code the runtime is called. This
-// function assumes the following state:
-//   rdi: constructor (built-in Array function)
-//   rax: argc
-//   rsp[0]: return address
-//   rsp[8]: last argument
-// This function is used for both construct and normal calls of Array. The only
-// difference between handling a construct call and a normal call is that for a
-// construct call the constructor function in rdi needs to be preserved for
-// entering the generic code. In both cases argc in rax needs to be preserved.
-// Both registers are preserved by this code so no need to differentiate between
-// a construct call and a normal call.
-void ArrayNativeCode(MacroAssembler* masm, Label* call_generic_code) {
-  Label argc_one_or_more, argc_two_or_more, empty_array, not_empty_array,
-      has_non_smi_element, finish, cant_transition_map, not_double;
-
-  // Check for array construction with zero arguments.
-  __ testq(rax, rax);
-  __ j(not_zero, &argc_one_or_more);
-
-  __ bind(&empty_array);
-  // Handle construction of an empty array.
-  AllocateEmptyJSArray(masm,
-                       rdi,
-                       rbx,
-                       rcx,
-                       rdx,
-                       r8,
-                       call_generic_code);
-  Counters* counters = masm->isolate()->counters();
-  __ IncrementCounter(counters->array_function_native(), 1);
-  __ movq(rax, rbx);
-  __ ret(kPointerSize);
-
-  // Check for one argument. Bail out if argument is not smi or if it is
-  // negative.
-  __ bind(&argc_one_or_more);
-  __ cmpq(rax, Immediate(1));
-  __ j(not_equal, &argc_two_or_more);
-  __ movq(rdx, Operand(rsp, kPointerSize));  // Get the argument from the stack.
-
-  __ SmiTest(rdx);
-  __ j(not_zero, &not_empty_array);
-  __ pop(r8);  // Adjust stack.
-  __ Drop(1);
-  __ push(r8);
-  __ movq(rax, Immediate(0));  // Treat this as a call with argc of zero.
-  __ jmp(&empty_array);
-
-  __ bind(&not_empty_array);
-  __ JumpUnlessNonNegativeSmi(rdx, call_generic_code);
-
-  // Handle construction of an empty array of a certain size. Bail out if size
-  // is to large to actually allocate an elements array.
-  __ SmiCompare(rdx, Smi::FromInt(JSObject::kInitialMaxFastElementArray));
-  __ j(greater_equal, call_generic_code);
-
-  // rax: argc
-  // rdx: array_size (smi)
-  // rdi: constructor
-  // esp[0]: return address
-  // esp[8]: argument
-  AllocateJSArray(masm,
-                  rdi,
-                  rdx,
-                  rbx,
-                  rcx,
-                  r8,
-                  r9,
-                  true,
-                  call_generic_code);
-  __ IncrementCounter(counters->array_function_native(), 1);
-  __ movq(rax, rbx);
-  __ ret(2 * kPointerSize);
-
-  // Handle construction of an array from a list of arguments.
-  __ bind(&argc_two_or_more);
-  __ movq(rdx, rax);
-  __ Integer32ToSmi(rdx, rdx);  // Convet argc to a smi.
-  // rax: argc
-  // rdx: array_size (smi)
-  // rdi: constructor
-  // esp[0] : return address
-  // esp[8] : last argument
-  AllocateJSArray(masm,
-                  rdi,
-                  rdx,
-                  rbx,
-                  rcx,
-                  r8,
-                  r9,
-                  false,
-                  call_generic_code);
-  __ IncrementCounter(counters->array_function_native(), 1);
-
-  // rax: argc
-  // rbx: JSArray
-  // rcx: elements_array
-  // r8: elements_array_end (untagged)
-  // esp[0]: return address
-  // esp[8]: last argument
-
-  // Location of the last argument
-  __ lea(r9, Operand(rsp, kPointerSize));
-
-  // Location of the first array element (Parameter fill_with_holes to
-  // AllocateJSArrayis false, so the FixedArray is returned in rcx).
-  __ lea(rdx, Operand(rcx, FixedArray::kHeaderSize - kHeapObjectTag));
-
-  // rax: argc
-  // rbx: JSArray
-  // rdx: location of the first array element
-  // r9: location of the last argument
-  // esp[0]: return address
-  // esp[8]: last argument
-  Label loop, entry;
-  __ movq(rcx, rax);
-  __ jmp(&entry);
-  __ bind(&loop);
-  __ movq(r8, Operand(r9, rcx, times_pointer_size, 0));
-  if (FLAG_smi_only_arrays) {
-    __ JumpIfNotSmi(r8, &has_non_smi_element);
-  }
-  __ movq(Operand(rdx, 0), r8);
-  __ addq(rdx, Immediate(kPointerSize));
-  __ bind(&entry);
-  __ decq(rcx);
-  __ j(greater_equal, &loop);
-
-  // Remove caller arguments from the stack and return.
-  // rax: argc
-  // rbx: JSArray
-  // esp[0]: return address
-  // esp[8]: last argument
-  __ bind(&finish);
-  __ pop(rcx);
-  __ lea(rsp, Operand(rsp, rax, times_pointer_size, 1 * kPointerSize));
-  __ push(rcx);
-  __ movq(rax, rbx);
-  __ ret(0);
-
-  __ bind(&has_non_smi_element);
-  // Double values are handled by the runtime.
-  __ CheckMap(r8,
-              masm->isolate()->factory()->heap_number_map(),
-              &not_double,
-              DONT_DO_SMI_CHECK);
-  __ bind(&cant_transition_map);
-  __ UndoAllocationInNewSpace(rbx);
-  __ jmp(call_generic_code);
-
-  __ bind(&not_double);
-  // Transition FAST_SMI_ELEMENTS to FAST_ELEMENTS.
-  // rbx: JSArray
-  __ movq(r11, FieldOperand(rbx, HeapObject::kMapOffset));
-  __ LoadTransitionedArrayMapConditional(FAST_SMI_ELEMENTS,
-                                         FAST_ELEMENTS,
-                                         r11,
-                                         kScratchRegister,
-                                         &cant_transition_map);
-
-  __ movq(FieldOperand(rbx, HeapObject::kMapOffset), r11);
-  __ RecordWriteField(rbx, HeapObject::kMapOffset, r11, r8,
-                      kDontSaveFPRegs, OMIT_REMEMBERED_SET, OMIT_SMI_CHECK);
-
-  // Finish the array initialization loop.
-  Label loop2;
-  __ bind(&loop2);
-  __ movq(r8, Operand(r9, rcx, times_pointer_size, 0));
-  __ movq(Operand(rdx, 0), r8);
-  __ addq(rdx, Immediate(kPointerSize));
-  __ decq(rcx);
-  __ j(greater_equal, &loop2);
-  __ jmp(&finish);
-}
-
-
 void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
   // ----------- S t a t e -------------
-  //  -- rax : argc
+  //  -- rax    : argc
   //  -- rsp[0] : return address
   //  -- rsp[8] : last argument
   // -----------------------------------
@@ -1477,26 +1119,15 @@ void Builtins::Generate_InternalArrayCode(MacroAssembler* masm) {
 
   // Run the native code for the InternalArray function called as a normal
   // function.
-  if (FLAG_optimize_constructed_arrays) {
-    // tail call a stub
-    InternalArrayConstructorStub stub(masm->isolate());
-    __ TailCallStub(&stub);
-  } else {
-    ArrayNativeCode(masm, &generic_array_code);
-
-    // Jump to the generic array code in case the specialized code cannot handle
-    // the construction.
-    __ bind(&generic_array_code);
-    Handle<Code> array_code =
-        masm->isolate()->builtins()->InternalArrayCodeGeneric();
-    __ Jump(array_code, RelocInfo::CODE_TARGET);
-  }
+  // tail call a stub
+  InternalArrayConstructorStub stub(masm->isolate());
+  __ TailCallStub(&stub);
 }
 
 
 void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
   // ----------- S t a t e -------------
-  //  -- rax : argc
+  //  -- rax    : argc
   //  -- rsp[0] : return address
   //  -- rsp[8] : last argument
   // -----------------------------------
@@ -1517,61 +1148,16 @@ void Builtins::Generate_ArrayCode(MacroAssembler* masm) {
   }
 
   // Run the native code for the Array function called as a normal function.
-  if (FLAG_optimize_constructed_arrays) {
-    // tail call a stub
-    Handle<Object> undefined_sentinel(
-        masm->isolate()->heap()->undefined_value(),
-        masm->isolate());
-    __ Move(rbx, undefined_sentinel);
-    ArrayConstructorStub stub(masm->isolate());
-    __ TailCallStub(&stub);
-  } else {
-    ArrayNativeCode(masm, &generic_array_code);
-
-    // Jump to the generic array code in case the specialized code cannot handle
-    // the construction.
-    __ bind(&generic_array_code);
-    Handle<Code> array_code =
-        masm->isolate()->builtins()->ArrayCodeGeneric();
-    __ Jump(array_code, RelocInfo::CODE_TARGET);
-  }
+  // tail call a stub
+  Handle<Object> undefined_sentinel(
+      masm->isolate()->heap()->undefined_value(),
+      masm->isolate());
+  __ Move(rbx, undefined_sentinel);
+  ArrayConstructorStub stub(masm->isolate());
+  __ TailCallStub(&stub);
 }
 
 
-void Builtins::Generate_CommonArrayConstructCode(MacroAssembler* masm) {
-  // ----------- S t a t e -------------
-  //  -- rax : argc
-  //  -- rdi : constructor
-  //  -- rsp[0] : return address
-  //  -- rsp[8] : last argument
-  // -----------------------------------
-  if (FLAG_debug_code) {
-    // The array construct code is only set for the builtin and internal
-    // Array functions which always have a map.
-
-    // Initial map for the builtin Array function should be a map.
-    __ movq(rcx, FieldOperand(rdi, JSFunction::kPrototypeOrInitialMapOffset));
-    // Will both indicate a NULL and a Smi.
-    STATIC_ASSERT(kSmiTag == 0);
-    Condition not_smi = NegateCondition(masm->CheckSmi(rcx));
-    __ Check(not_smi, "Unexpected initial map for Array function");
-    __ CmpObjectType(rcx, MAP_TYPE, rcx);
-    __ Check(equal, "Unexpected initial map for Array function");
-  }
-
-  Label generic_constructor;
-  // Run the native code for the Array function called as constructor.
-  ArrayNativeCode(masm, &generic_constructor);
-  // Jump to the generic construct code in case the specialized code cannot
-  // handle the construction.
-  __ bind(&generic_constructor);
-  Handle<Code> generic_construct_stub =
-      masm->isolate()->builtins()->JSConstructStubGeneric();
-  __ Jump(generic_construct_stub, RelocInfo::CODE_TARGET);
-}
-
-
-
 void Builtins::Generate_StringConstructCode(MacroAssembler* masm) {
   // ----------- S t a t e -------------
   //  -- rax                 : number of arguments
index bc2e59a..9233848 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_X64)
+#if V8_TARGET_ARCH_X64
 
 #include "bootstrapper.h"
 #include "code-stubs.h"
@@ -254,7 +254,7 @@ void HydrogenCodeStub::GenerateLightweightMiss(MacroAssembler* masm) {
 
 
 void ToNumberStub::Generate(MacroAssembler* masm) {
-  // The ToNumber stub takes one argument in eax.
+  // The ToNumber stub takes one argument in rax.
   Label check_heap_number, call_builtin;
   __ SmiTest(rax);
   __ j(not_zero, &check_heap_number, Label::kNear);
@@ -333,7 +333,7 @@ void FastNewClosureStub::Generate(MacroAssembler* masm) {
 
   __ IncrementCounter(counters->fast_new_closure_try_optimized(), 1);
 
-  // rcx holds native context, ebx points to fixed array of 3-element entries
+  // rcx holds native context, rbx points to fixed array of 3-element entries
   // (native context, optimized code, literals).
   // The optimized code map must never be empty, so check the first elements.
   Label install_optimized;
@@ -452,8 +452,8 @@ void FastNewContextStub::Generate(MacroAssembler* masm) {
 void FastNewBlockContextStub::Generate(MacroAssembler* masm) {
   // Stack layout on entry:
   //
-  // [rsp + (1 * kPointerSize)]: function
-  // [rsp + (2 * kPointerSize)]: serialized scope info
+  // [rsp + (1 * kPointerSize)] : function
+  // [rsp + (2 * kPointerSize)] : serialized scope info
 
   // Try to allocate the context in new space.
   Label gc;
@@ -1232,7 +1232,7 @@ void BinaryOpStub::GenerateAddStrings(MacroAssembler* masm) {
 void BinaryOpStub::GenerateSmiStub(MacroAssembler* masm) {
   Label right_arg_changed, call_runtime;
 
-  if (op_ == Token::MOD && has_fixed_right_arg_) {
+  if (op_ == Token::MOD && encoded_right_arg_.has_value) {
     // It is guaranteed that the value will fit into a Smi, because if it
     // didn't, we wouldn't be here, see BinaryOp_Patch.
     __ Cmp(rax, Smi::FromInt(fixed_right_arg_value()));
@@ -1424,7 +1424,7 @@ static void BinaryOpStub_GenerateHeapResultAllocation(MacroAssembler* masm,
       // If the argument in rdx is already an object, we skip the
       // allocation of a heap number.
       __ JumpIfNotSmi(rdx, &skip_allocation);
-      // Allocate a heap number for the result. Keep eax and edx intact
+      // Allocate a heap number for the result. Keep rax and rdx intact
       // for the possible runtime call.
       __ AllocateHeapNumber(rbx, rcx, alloc_failure);
       // Now rdx can be overwritten losing one of the arguments as we are
@@ -1463,16 +1463,16 @@ void BinaryOpStub::GenerateRegisterArgsPush(MacroAssembler* masm) {
 void TranscendentalCacheStub::Generate(MacroAssembler* masm) {
   // TAGGED case:
   //   Input:
-  //     rsp[8]: argument (should be number).
-  //     rsp[0]: return address.
+  //     rsp[8] : argument (should be number).
+  //     rsp[0] : return address.
   //   Output:
   //     rax: tagged double result.
   // UNTAGGED case:
   //   Input::
-  //     rsp[0]: return address.
-  //     xmm1: untagged double input argument
+  //     rsp[0] : return address.
+  //     xmm1   : untagged double input argument
   //   Output:
-  //     xmm1: untagged double result.
+  //     xmm1   : untagged double result.
 
   Label runtime_call;
   Label runtime_call_clear_stack;
@@ -1558,7 +1558,8 @@ void TranscendentalCacheStub::Generate(MacroAssembler* masm) {
     char* elem_in1  = reinterpret_cast<char*>(&(test_elem[0].in[1]));
     char* elem_out = reinterpret_cast<char*>(&(test_elem[0].output));
     // Two uint_32's and a pointer per element.
-    CHECK_EQ(16, static_cast<int>(elem2_start - elem_start));
+    CHECK_EQ(2 * kIntSize + 1 * kPointerSize,
+             static_cast<int>(elem2_start - elem_start));
     CHECK_EQ(0, static_cast<int>(elem_in0 - elem_start));
     CHECK_EQ(kIntSize, static_cast<int>(elem_in1 - elem_start));
     CHECK_EQ(2 * kIntSize, static_cast<int>(elem_out - elem_start));
@@ -2212,7 +2213,7 @@ void MathPowStub::Generate(MacroAssembler* masm) {
     __ TailCallRuntime(Runtime::kMath_pow_cfunction, 2, 1);
 
     // The stub is called from non-optimized code, which expects the result
-    // as heap number in eax.
+    // as heap number in rax.
     __ bind(&done);
     __ AllocateHeapNumber(rax, rcx, &call_runtime);
     __ movsd(FieldOperand(rax, HeapNumber::kValueOffset), double_result);
@@ -2423,8 +2424,8 @@ void ArgumentsAccessStub::GenerateReadElement(MacroAssembler* masm) {
 
 void ArgumentsAccessStub::GenerateNewNonStrictFast(MacroAssembler* masm) {
   // Stack layout:
-  //  rsp[0] : return address
-  //  rsp[8] : number of parameters (tagged)
+  //  rsp[0]  : return address
+  //  rsp[8]  : number of parameters (tagged)
   //  rsp[16] : receiver displacement
   //  rsp[24] : function
   // Registers used over the whole function:
@@ -2639,10 +2640,10 @@ void ArgumentsAccessStub::GenerateNewNonStrictFast(MacroAssembler* masm) {
 
 
 void ArgumentsAccessStub::GenerateNewNonStrictSlow(MacroAssembler* masm) {
-  // esp[0] : return address
-  // esp[8] : number of parameters
-  // esp[16] : receiver displacement
-  // esp[24] : function
+  // rsp[0]  : return address
+  // rsp[8]  : number of parameters
+  // rsp[16] : receiver displacement
+  // rsp[24] : function
 
   // Check if the calling frame is an arguments adaptor frame.
   Label runtime;
@@ -2665,8 +2666,8 @@ void ArgumentsAccessStub::GenerateNewNonStrictSlow(MacroAssembler* masm) {
 
 
 void ArgumentsAccessStub::GenerateNewStrict(MacroAssembler* masm) {
-  // rsp[0] : return address
-  // rsp[8] : number of parameters
+  // rsp[0]  : return address
+  // rsp[8]  : number of parameters
   // rsp[16] : receiver displacement
   // rsp[24] : function
 
@@ -2773,11 +2774,11 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
 #else  // V8_INTERPRETED_REGEXP
 
   // Stack frame on entry.
-  //  rsp[0]: return address
-  //  rsp[8]: last_match_info (expected JSArray)
-  //  rsp[16]: previous index
-  //  rsp[24]: subject string
-  //  rsp[32]: JSRegExp object
+  //  rsp[0]  : return address
+  //  rsp[8]  : last_match_info (expected JSArray)
+  //  rsp[16] : previous index
+  //  rsp[24] : subject string
+  //  rsp[32] : JSRegExp object
 
   static const int kLastMatchInfoOffset = 1 * kPointerSize;
   static const int kPreviousIndexOffset = 2 * kPointerSize;
@@ -3436,11 +3437,10 @@ static void BranchIfNotInternalizedString(MacroAssembler* masm,
   __ movq(scratch, FieldOperand(object, HeapObject::kMapOffset));
   __ movzxbq(scratch,
              FieldOperand(scratch, Map::kInstanceTypeOffset));
-  // Ensure that no non-strings have the internalized bit set.
-  STATIC_ASSERT(LAST_TYPE < kNotStringTag + kIsInternalizedMask);
   STATIC_ASSERT(kInternalizedTag != 0);
-  __ testb(scratch, Immediate(kIsInternalizedMask));
-  __ j(zero, label);
+  __ and_(scratch, Immediate(kIsNotStringMask | kIsInternalizedMask));
+  __ cmpb(scratch, Immediate(kInternalizedTag | kStringTag));
+  __ j(not_equal, label);
 }
 
 
@@ -3717,56 +3717,17 @@ void InterruptStub::Generate(MacroAssembler* masm) {
 }
 
 
-static void GenerateRecordCallTargetNoArray(MacroAssembler* masm) {
-  // Cache the called function in a global property cell.  Cache states
-  // are uninitialized, monomorphic (indicated by a JSFunction), and
-  // megamorphic.
-  // rbx : cache cell for call target
-  // rdi : the function to call
-  Isolate* isolate = masm->isolate();
-  Label initialize, done;
-
-  // Load the cache state into rcx.
-  __ movq(rcx, FieldOperand(rbx, JSGlobalPropertyCell::kValueOffset));
-
-  // A monomorphic cache hit or an already megamorphic state: invoke the
-  // function without changing the state.
-  __ cmpq(rcx, rdi);
-  __ j(equal, &done, Label::kNear);
-  __ Cmp(rcx, TypeFeedbackCells::MegamorphicSentinel(isolate));
-  __ j(equal, &done, Label::kNear);
-
-  // A monomorphic miss (i.e, here the cache is not uninitialized) goes
-  // megamorphic.
-  __ Cmp(rcx, TypeFeedbackCells::UninitializedSentinel(isolate));
-  __ j(equal, &initialize, Label::kNear);
-  // MegamorphicSentinel is an immortal immovable object (undefined) so no
-  // write-barrier is needed.
-  __ Move(FieldOperand(rbx, JSGlobalPropertyCell::kValueOffset),
-          TypeFeedbackCells::MegamorphicSentinel(isolate));
-  __ jmp(&done, Label::kNear);
-
-  // An uninitialized cache is patched with the function.
-  __ bind(&initialize);
-  __ movq(FieldOperand(rbx, JSGlobalPropertyCell::kValueOffset), rdi);
-  // No need for a write barrier here - cells are rescanned.
-
-  __ bind(&done);
-}
-
-
 static void GenerateRecordCallTarget(MacroAssembler* masm) {
   // Cache the called function in a global property cell.  Cache states
   // are uninitialized, monomorphic (indicated by a JSFunction), and
   // megamorphic.
   // rbx : cache cell for call target
   // rdi : the function to call
-  ASSERT(FLAG_optimize_constructed_arrays);
   Isolate* isolate = masm->isolate();
   Label initialize, done, miss, megamorphic, not_array_function;
 
   // Load the cache state into rcx.
-  __ movq(rcx, FieldOperand(rbx, JSGlobalPropertyCell::kValueOffset));
+  __ movq(rcx, FieldOperand(rbx, Cell::kValueOffset));
 
   // A monomorphic cache hit or an already megamorphic state: invoke the
   // function without changing the state.
@@ -3778,12 +3739,15 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
   // Special handling of the Array() function, which caches not only the
   // monomorphic Array function but the initial ElementsKind with special
   // sentinels
-  Handle<Object> terminal_kind_sentinel =
-      TypeFeedbackCells::MonomorphicArraySentinel(isolate,
-                                                  LAST_FAST_ELEMENTS_KIND);
   __ JumpIfNotSmi(rcx, &miss);
-  __ Cmp(rcx, terminal_kind_sentinel);
-  __ j(above, &miss);
+  if (FLAG_debug_code) {
+    Handle<Object> terminal_kind_sentinel =
+        TypeFeedbackCells::MonomorphicArraySentinel(masm->isolate(),
+                                                    LAST_FAST_ELEMENTS_KIND);
+    __ Cmp(rcx, terminal_kind_sentinel);
+    __ Assert(less_equal, "Array function sentinel is not an ElementsKind");
+  }
+
   // Make sure the function is the Array() function
   __ LoadArrayFunction(rcx);
   __ cmpq(rdi, rcx);
@@ -3799,7 +3763,7 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
   // MegamorphicSentinel is an immortal immovable object (undefined) so no
   // write-barrier is needed.
   __ bind(&megamorphic);
-  __ Move(FieldOperand(rbx, JSGlobalPropertyCell::kValueOffset),
+  __ Move(FieldOperand(rbx, Cell::kValueOffset),
           TypeFeedbackCells::MegamorphicSentinel(isolate));
   __ jmp(&done, Label::kNear);
 
@@ -3817,12 +3781,12 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
   Handle<Object> initial_kind_sentinel =
       TypeFeedbackCells::MonomorphicArraySentinel(isolate,
           GetInitialFastElementsKind());
-  __ Move(FieldOperand(rbx, JSGlobalPropertyCell::kValueOffset),
+  __ Move(FieldOperand(rbx, Cell::kValueOffset),
           initial_kind_sentinel);
   __ jmp(&done);
 
   __ bind(&not_array_function);
-  __ movq(FieldOperand(rbx, JSGlobalPropertyCell::kValueOffset), rdi);
+  __ movq(FieldOperand(rbx, Cell::kValueOffset), rdi);
   // No need for a write barrier here - cells are rescanned.
 
   __ bind(&done);
@@ -3860,11 +3824,7 @@ void CallFunctionStub::Generate(MacroAssembler* masm) {
   __ j(not_equal, &slow);
 
   if (RecordCallTarget()) {
-    if (FLAG_optimize_constructed_arrays) {
-      GenerateRecordCallTarget(masm);
-    } else {
-      GenerateRecordCallTargetNoArray(masm);
-    }
+    GenerateRecordCallTarget(masm);
   }
 
   // Fast-case: Just invoke the function.
@@ -3893,7 +3853,7 @@ void CallFunctionStub::Generate(MacroAssembler* masm) {
     // If there is a call target cache, mark it megamorphic in the
     // non-function case.  MegamorphicSentinel is an immortal immovable
     // object (undefined) so no write barrier is needed.
-    __ Move(FieldOperand(rbx, JSGlobalPropertyCell::kValueOffset),
+    __ Move(FieldOperand(rbx, Cell::kValueOffset),
             TypeFeedbackCells::MegamorphicSentinel(isolate));
   }
   // Check for function proxy.
@@ -3939,15 +3899,11 @@ void CallConstructStub::Generate(MacroAssembler* masm) {
   __ j(not_equal, &slow);
 
   if (RecordCallTarget()) {
-    if (FLAG_optimize_constructed_arrays) {
-      GenerateRecordCallTarget(masm);
-    } else {
-      GenerateRecordCallTargetNoArray(masm);
-    }
+    GenerateRecordCallTarget(masm);
   }
 
   // Jump to the function-specific construct stub.
-  Register jmp_reg = FLAG_optimize_constructed_arrays ? rcx : rbx;
+  Register jmp_reg = rcx;
   __ movq(jmp_reg, FieldOperand(rdi, JSFunction::kSharedFunctionInfoOffset));
   __ movq(jmp_reg, FieldOperand(jmp_reg,
                                 SharedFunctionInfo::kConstructStubOffset));
@@ -3995,9 +3951,7 @@ void CodeStub::GenerateStubsAheadOfTime(Isolate* isolate) {
   StubFailureTrampolineStub::GenerateAheadOfTime(isolate);
   // It is important that the store buffer overflow stubs are generated first.
   RecordWriteStub::GenerateFixedRegStubsAheadOfTime(isolate);
-  if (FLAG_optimize_constructed_arrays) {
-    ArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate);
-  }
+  ArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate);
 }
 
 
@@ -4179,6 +4133,8 @@ void CEntryStub::Generate(MacroAssembler* masm) {
   // this by performing a garbage collection and retrying the
   // builtin once.
 
+  ProfileEntryHookStub::MaybeCallEntryHook(masm);
+
   // Enter the exit frame that transitions from JavaScript to C++.
 #ifdef _WIN64
   int arg_stack_space = (result_size_ < 2 ? 2 : 4);
@@ -4259,6 +4215,8 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
   Label invoke, handler_entry, exit;
   Label not_outermost_js, not_outermost_js_2;
 
+  ProfileEntryHookStub::MaybeCallEntryHook(masm);
+
   {  // NOLINT. Scope block confuses linter.
     MacroAssembler::NoRootArrayScope uninitialized_root_register(masm);
     // Set up frame.
@@ -4425,14 +4383,14 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
 void InstanceofStub::Generate(MacroAssembler* masm) {
   // Implements "value instanceof function" operator.
   // Expected input state with no inline cache:
-  //   rsp[0] : return address
-  //   rsp[1] : function pointer
-  //   rsp[2] : value
+  //   rsp[0]  : return address
+  //   rsp[8]  : function pointer
+  //   rsp[16] : value
   // Expected input state with an inline one-element cache:
-  //   rsp[0] : return address
-  //   rsp[1] : offset from return address to location of inline cache
-  //   rsp[2] : function pointer
-  //   rsp[3] : value
+  //   rsp[0]  : return address
+  //   rsp[8]  : offset from return address to location of inline cache
+  //   rsp[16] : function pointer
+  //   rsp[24] : value
   // Returns a bitwise zero to indicate that the value
   // is and instance of the function and anything else to
   // indicate that the value is not an instance.
@@ -5154,17 +5112,17 @@ void StringHelper::GenerateCopyCharactersREP(MacroAssembler* masm,
 
   // Don't enter the rep movs if there are less than 4 bytes to copy.
   Label last_bytes;
-  __ testl(count, Immediate(~7));
+  __ testl(count, Immediate(~(kPointerSize - 1)));
   __ j(zero, &last_bytes, Label::kNear);
 
   // Copy from edi to esi using rep movs instruction.
   __ movl(kScratchRegister, count);
-  __ shr(count, Immediate(3));  // Number of doublewords to copy.
+  __ shr(count, Immediate(kPointerSizeLog2));  // Number of doublewords to copy.
   __ repmovsq();
 
   // Find number of bytes left.
   __ movl(count, kScratchRegister);
-  __ and_(count, Immediate(7));
+  __ and_(count, Immediate(kPointerSize - 1));
 
   // Check if there are more bytes to copy.
   __ bind(&last_bytes);
@@ -5374,10 +5332,10 @@ void SubStringStub::Generate(MacroAssembler* masm) {
   Label runtime;
 
   // Stack frame on entry.
-  //  rsp[0]: return address
-  //  rsp[8]: to
-  //  rsp[16]: from
-  //  rsp[24]: string
+  //  rsp[0]  : return address
+  //  rsp[8]  : to
+  //  rsp[16] : from
+  //  rsp[24] : string
 
   const int kToOffset = 1 * kPointerSize;
   const int kFromOffset = kToOffset + kPointerSize;
@@ -5736,9 +5694,9 @@ void StringCompareStub::Generate(MacroAssembler* masm) {
   Label runtime;
 
   // Stack frame on entry.
-  //  rsp[0]: return address
-  //  rsp[8]: right string
-  //  rsp[16]: left string
+  //  rsp[0]  : return address
+  //  rsp[8]  : right string
+  //  rsp[16] : left string
 
   __ movq(rdx, Operand(rsp, 2 * kPointerSize));  // left
   __ movq(rax, Operand(rsp, 1 * kPointerSize));  // right
@@ -5894,9 +5852,13 @@ void ICCompareStub::GenerateInternalizedStrings(MacroAssembler* masm) {
   __ movzxbq(tmp1, FieldOperand(tmp1, Map::kInstanceTypeOffset));
   __ movzxbq(tmp2, FieldOperand(tmp2, Map::kInstanceTypeOffset));
   STATIC_ASSERT(kInternalizedTag != 0);
-  __ and_(tmp1, tmp2);
-  __ testb(tmp1, Immediate(kIsInternalizedMask));
-  __ j(zero, &miss, Label::kNear);
+  __ and_(tmp1, Immediate(kIsNotStringMask | kIsInternalizedMask));
+  __ cmpb(tmp1, Immediate(kInternalizedTag | kStringTag));
+  __ j(not_equal, &miss, Label::kNear);
+
+  __ and_(tmp2, Immediate(kIsNotStringMask | kIsInternalizedMask));
+  __ cmpb(tmp2, Immediate(kInternalizedTag | kStringTag));
+  __ j(not_equal, &miss, Label::kNear);
 
   // Internalized strings are compared by identity.
   Label done;
@@ -5939,19 +5901,8 @@ void ICCompareStub::GenerateUniqueNames(MacroAssembler* masm) {
   __ movzxbq(tmp1, FieldOperand(tmp1, Map::kInstanceTypeOffset));
   __ movzxbq(tmp2, FieldOperand(tmp2, Map::kInstanceTypeOffset));
 
-  Label succeed1;
-  __ testb(tmp1, Immediate(kIsInternalizedMask));
-  __ j(not_zero, &succeed1, Label::kNear);
-  __ cmpb(tmp1, Immediate(static_cast<uint8_t>(SYMBOL_TYPE)));
-  __ j(not_equal, &miss, Label::kNear);
-  __ bind(&succeed1);
-
-  Label succeed2;
-  __ testb(tmp2, Immediate(kIsInternalizedMask));
-  __ j(not_zero, &succeed2, Label::kNear);
-  __ cmpb(tmp2, Immediate(static_cast<uint8_t>(SYMBOL_TYPE)));
-  __ j(not_equal, &miss, Label::kNear);
-  __ bind(&succeed2);
+  __ JumpIfNotUniqueName(tmp1, &miss, Label::kNear);
+  __ JumpIfNotUniqueName(tmp2, &miss, Label::kNear);
 
   // Unique names are compared by identity.
   Label done;
@@ -6013,7 +5964,8 @@ void ICCompareStub::GenerateStrings(MacroAssembler* masm) {
   __ bind(&not_same);
 
   // Check that both strings are internalized strings. If they are, we're done
-  // because we already know they are not identical.
+  // because we already know they are not identical. We also know they are both
+  // strings.
   if (equality) {
     Label do_compare;
     STATIC_ASSERT(kInternalizedTag != 0);
@@ -6169,13 +6121,8 @@ void NameDictionaryLookupStub::GenerateNegativeLookup(MacroAssembler* masm,
 
     // Check if the entry name is not a unique name.
     __ movq(entity_name, FieldOperand(entity_name, HeapObject::kMapOffset));
-    __ testb(FieldOperand(entity_name, Map::kInstanceTypeOffset),
-             Immediate(kIsInternalizedMask));
-    __ j(not_zero, &good, Label::kNear);
-    __ cmpb(FieldOperand(entity_name, Map::kInstanceTypeOffset),
-            Immediate(static_cast<uint8_t>(SYMBOL_TYPE)));
-    __ j(not_equal, miss);
-
+    __ JumpIfNotUniqueName(FieldOperand(entity_name, Map::kInstanceTypeOffset),
+                           miss);
     __ bind(&good);
   }
 
@@ -6246,9 +6193,9 @@ void NameDictionaryLookupStub::Generate(MacroAssembler* masm) {
   // This stub overrides SometimesSetsUpAFrame() to return false.  That means
   // we cannot call anything that could cause a GC from this stub.
   // Stack frame on entry:
-  //  esp[0 * kPointerSize]: return address.
-  //  esp[1 * kPointerSize]: key's hash.
-  //  esp[2 * kPointerSize]: key.
+  //  rsp[0 * kPointerSize] : return address.
+  //  rsp[1 * kPointerSize] : key's hash.
+  //  rsp[2 * kPointerSize] : key.
   // Registers:
   //  dictionary_: NameDictionary to probe.
   //  result_: used as scratch.
@@ -6301,15 +6248,9 @@ void NameDictionaryLookupStub::Generate(MacroAssembler* masm) {
       // key we are looking for.
 
       // Check if the entry name is not a unique name.
-      Label cont;
       __ movq(scratch, FieldOperand(scratch, HeapObject::kMapOffset));
-      __ testb(FieldOperand(scratch, Map::kInstanceTypeOffset),
-               Immediate(kIsInternalizedMask));
-      __ j(not_zero, &cont);
-      __ cmpb(FieldOperand(scratch, Map::kInstanceTypeOffset),
-              Immediate(static_cast<uint8_t>(SYMBOL_TYPE)));
-      __ j(not_equal, &maybe_in_dictionary);
-      __ bind(&cont);
+      __ JumpIfNotUniqueName(FieldOperand(scratch, Map::kInstanceTypeOffset),
+                             &maybe_in_dictionary);
     }
   }
 
@@ -6635,12 +6576,12 @@ void RecordWriteStub::CheckNeedsToInformIncrementalMarker(
 
 void StoreArrayLiteralElementStub::Generate(MacroAssembler* masm) {
   // ----------- S t a t e -------------
-  //  -- rax    : element value to store
-  //  -- rbx    : array literal
-  //  -- rdi    : map of array literal
-  //  -- rcx    : element index as smi
-  //  -- rdx    : array literal index in function
-  //  -- rsp[0] : return address
+  //  -- rax     : element value to store
+  //  -- rcx     : element index as smi
+  //  -- rsp[0]  : return address
+  //  -- rsp[8]  : array literal index in function
+  //  -- rsp[16] : array literal
+  // clobbers rbx, rdx, rdi
   // -----------------------------------
 
   Label element_done;
@@ -6649,6 +6590,11 @@ void StoreArrayLiteralElementStub::Generate(MacroAssembler* masm) {
   Label slow_elements;
   Label fast_elements;
 
+  // Get array literal index, array literal and its map.
+  __ movq(rdx, Operand(rsp, 1 * kPointerSize));
+  __ movq(rbx, Operand(rsp, 2 * kPointerSize));
+  __ movq(rdi, FieldOperand(rbx, JSObject::kMapOffset));
+
   __ CheckFastElements(rdi, &double_elements);
 
   // FAST_*_SMI_ELEMENTS or FAST_*_ELEMENTS
@@ -6725,7 +6671,11 @@ void StubFailureTrampolineStub::Generate(MacroAssembler* masm) {
 
 
 void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) {
-  if (entry_hook_ != NULL) {
+  if (masm->isolate()->function_entry_hook() != NULL) {
+    // It's always safe to call the entry hook stub, as the hook itself
+    // is not allowed to call back to V8.
+    AllowStubCallsScope allow_stub_calls(masm, true);
+
     ProfileEntryHookStub stub;
     masm->CallStub(&stub);
   }
@@ -6733,45 +6683,25 @@ void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) {
 
 
 void ProfileEntryHookStub::Generate(MacroAssembler* masm) {
-  // Save volatile registers.
-  // Live registers at this point are the same as at the start of any
-  // JS function:
-  //   o rdi: the JS function object being called (i.e. ourselves)
-  //   o rsi: our context
-  //   o rbp: our caller's frame pointer
-  //   o rsp: stack pointer (pointing to return address)
-  //   o rcx: rcx is zero for method calls and non-zero for function calls.
-#ifdef _WIN64
-  const int kNumSavedRegisters = 1;
-
-  __ push(rcx);
-#else
-  const int kNumSavedRegisters = 3;
-
-  __ push(rcx);
-  __ push(rdi);
-  __ push(rsi);
-#endif
+  // This stub can be called from essentially anywhere, so it needs to save
+  // all volatile and callee-save registers.
+  const size_t kNumSavedRegisters = 2;
+  __ push(arg_reg_1);
+  __ push(arg_reg_2);
 
   // Calculate the original stack pointer and store it in the second arg.
-#ifdef _WIN64
-  __ lea(rdx, Operand(rsp, (kNumSavedRegisters + 1) * kPointerSize));
-#else
-  __ lea(rsi, Operand(rsp, (kNumSavedRegisters + 1) * kPointerSize));
-#endif
+  __ lea(arg_reg_2, Operand(rsp, (kNumSavedRegisters + 1) * kPointerSize));
 
   // Calculate the function address to the first arg.
-#ifdef _WIN64
-  __ movq(rcx, Operand(rsp, kNumSavedRegisters * kPointerSize));
-  __ subq(rcx, Immediate(Assembler::kShortCallInstructionLength));
-#else
-  __ movq(rdi, Operand(rsp, kNumSavedRegisters * kPointerSize));
-  __ subq(rdi, Immediate(Assembler::kShortCallInstructionLength));
-#endif
+  __ movq(arg_reg_1, Operand(rsp, kNumSavedRegisters * kPointerSize));
+  __ subq(arg_reg_1, Immediate(Assembler::kShortCallInstructionLength));
+
+  // Save the remainder of the volatile registers.
+  masm->PushCallerSaved(kSaveFPRegs, arg_reg_1, arg_reg_2);
 
   // Call the entry hook function.
-  __ movq(rax, &entry_hook_, RelocInfo::NONE64);
-  __ movq(rax, Operand(rax, 0));
+  __ movq(rax, FUNCTION_ADDR(masm->isolate()->function_entry_hook()),
+          RelocInfo::NONE64);
 
   AllowExternalCallThatCantCauseGC scope(masm);
 
@@ -6780,13 +6710,9 @@ void ProfileEntryHookStub::Generate(MacroAssembler* masm) {
   __ CallCFunction(rax, kArgumentCount);
 
   // Restore volatile regs.
-#ifdef _WIN64
-  __ pop(rcx);
-#else
-  __ pop(rsi);
-  __ pop(rdi);
-  __ pop(rcx);
-#endif
+  masm->PopCallerSaved(kSaveFPRegs, arg_reg_1, arg_reg_2);
+  __ pop(arg_reg_2);
+  __ pop(arg_reg_1);
 
   __ Ret();
 }
@@ -6816,8 +6742,8 @@ static void CreateArrayDispatchOneArgument(MacroAssembler* masm) {
   // rdx - kind
   // rax - number of arguments
   // rdi - constructor?
-  // esp[0] - return address
-  // esp[4] - last argument
+  // rsp[0] - return address
+  // rsp[8] - last argument
   ASSERT(FAST_SMI_ELEMENTS == 0);
   ASSERT(FAST_HOLEY_SMI_ELEMENTS == 1);
   ASSERT(FAST_ELEMENTS == 2);
@@ -6845,6 +6771,10 @@ static void CreateArrayDispatchOneArgument(MacroAssembler* masm) {
   __ Cmp(rbx, undefined_sentinel);
   __ j(equal, &normal_sequence);
 
+  // The type cell may have gone megamorphic, don't overwrite if so
+  __ movq(rcx, FieldOperand(rbx, kPointerSize));
+  __ JumpIfNotSmi(rcx, &normal_sequence);
+
   // Save the resulting elements kind in type info
   __ Integer32ToSmi(rdx, rdx);
   __ movq(FieldOperand(rbx, kPointerSize), rdx);
@@ -6877,7 +6807,7 @@ static void ArrayConstructorStubAheadOfTimeHelper(Isolate* isolate) {
     T stub(kind);
     stub.GetCode(isolate)->set_is_pregenerated(true);
     if (AllocationSiteInfo::GetMode(kind) != DONT_TRACK_ALLOCATION_SITE) {
-      T stub1(kind, true);
+      T stub1(kind, CONTEXT_CHECK_REQUIRED, DISABLE_ALLOCATION_SITES);
       stub1.GetCode(isolate)->set_is_pregenerated(true);
     }
   }
@@ -6911,11 +6841,11 @@ void InternalArrayConstructorStubBase::GenerateStubsAheadOfTime(
 
 void ArrayConstructorStub::Generate(MacroAssembler* masm) {
   // ----------- S t a t e -------------
-  //  -- rax : argc
-  //  -- rbx : type info cell
-  //  -- rdi : constructor
+  //  -- rax    : argc
+  //  -- rbx    : type info cell
+  //  -- rdi    : constructor
   //  -- rsp[0] : return address
-  //  -- rsp[4] : last argument
+  //  -- rsp[8] : last argument
   // -----------------------------------
   Handle<Object> undefined_sentinel(
       masm->isolate()->heap()->undefined_value(),
@@ -6934,63 +6864,49 @@ void ArrayConstructorStub::Generate(MacroAssembler* masm) {
     __ CmpObjectType(rcx, MAP_TYPE, rcx);
     __ Check(equal, "Unexpected initial map for Array function");
 
-    // We should either have undefined in ebx or a valid jsglobalpropertycell
+    // We should either have undefined in rbx or a valid cell
     Label okay_here;
-    Handle<Map> global_property_cell_map(
-        masm->isolate()->heap()->global_property_cell_map());
+    Handle<Map> cell_map = masm->isolate()->factory()->cell_map();
     __ Cmp(rbx, undefined_sentinel);
     __ j(equal, &okay_here);
-    __ Cmp(FieldOperand(rbx, 0), global_property_cell_map);
+    __ Cmp(FieldOperand(rbx, 0), cell_map);
     __ Assert(equal, "Expected property cell in register rbx");
     __ bind(&okay_here);
   }
 
-  if (FLAG_optimize_constructed_arrays) {
-    Label no_info, switch_ready;
-    // Get the elements kind and case on that.
-    __ Cmp(rbx, undefined_sentinel);
-    __ j(equal, &no_info);
-    __ movq(rdx, FieldOperand(rbx, JSGlobalPropertyCell::kValueOffset));
-    __ JumpIfNotSmi(rdx, &no_info);
-    __ SmiToInteger32(rdx, rdx);
-    __ jmp(&switch_ready);
-    __ bind(&no_info);
-    __ movq(rdx, Immediate(GetInitialFastElementsKind()));
-    __ bind(&switch_ready);
-
-    if (argument_count_ == ANY) {
-      Label not_zero_case, not_one_case;
-      __ testq(rax, rax);
-      __ j(not_zero, &not_zero_case);
-      CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm);
-
-      __ bind(&not_zero_case);
-      __ cmpl(rax, Immediate(1));
-      __ j(greater, &not_one_case);
-      CreateArrayDispatchOneArgument(masm);
-
-      __ bind(&not_one_case);
-      CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm);
-    } else if (argument_count_ == NONE) {
-      CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm);
-    } else if (argument_count_ == ONE) {
-      CreateArrayDispatchOneArgument(masm);
-    } else if (argument_count_ == MORE_THAN_ONE) {
-      CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm);
-    } else {
-      UNREACHABLE();
-    }
+  Label no_info, switch_ready;
+  // Get the elements kind and case on that.
+  __ Cmp(rbx, undefined_sentinel);
+  __ j(equal, &no_info);
+  __ movq(rdx, FieldOperand(rbx, Cell::kValueOffset));
+  __ JumpIfNotSmi(rdx, &no_info);
+  __ SmiToInteger32(rdx, rdx);
+  __ jmp(&switch_ready);
+  __ bind(&no_info);
+  __ movq(rdx, Immediate(GetInitialFastElementsKind()));
+  __ bind(&switch_ready);
+
+  if (argument_count_ == ANY) {
+    Label not_zero_case, not_one_case;
+    __ testq(rax, rax);
+    __ j(not_zero, &not_zero_case);
+    CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm);
+
+    __ bind(&not_zero_case);
+    __ cmpl(rax, Immediate(1));
+    __ j(greater, &not_one_case);
+    CreateArrayDispatchOneArgument(masm);
+
+    __ bind(&not_one_case);
+    CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm);
+  } else if (argument_count_ == NONE) {
+    CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm);
+  } else if (argument_count_ == ONE) {
+    CreateArrayDispatchOneArgument(masm);
+  } else if (argument_count_ == MORE_THAN_ONE) {
+    CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm);
   } else {
-    Label generic_constructor;
-    // Run the native code for the Array function called as constructor.
-    ArrayNativeCode(masm, &generic_constructor);
-
-    // Jump to the generic construct code in case the specialized code cannot
-    // handle the construction.
-    __ bind(&generic_constructor);
-    Handle<Code> generic_construct_stub =
-        masm->isolate()->builtins()->JSConstructStubGeneric();
-    __ jmp(generic_construct_stub, RelocInfo::CODE_TARGET);
+    UNREACHABLE();
   }
 }
 
@@ -7033,11 +6949,11 @@ void InternalArrayConstructorStub::GenerateCase(
 
 void InternalArrayConstructorStub::Generate(MacroAssembler* masm) {
   // ----------- S t a t e -------------
-  //  -- eax : argc
-  //  -- ebx : type info cell
-  //  -- edi : constructor
-  //  -- esp[0] : return address
-  //  -- esp[4] : last argument
+  //  -- rax    : argc
+  //  -- rbx    : type info cell
+  //  -- rdi    : constructor
+  //  -- rsp[0] : return address
+  //  -- rsp[8] : last argument
   // -----------------------------------
 
   if (FLAG_debug_code) {
@@ -7054,46 +6970,33 @@ void InternalArrayConstructorStub::Generate(MacroAssembler* masm) {
     __ Check(equal, "Unexpected initial map for Array function");
   }
 
-  if (FLAG_optimize_constructed_arrays) {
-    // Figure out the right elements kind
-    __ movq(rcx, FieldOperand(rdi, JSFunction::kPrototypeOrInitialMapOffset));
-
-    // Load the map's "bit field 2" into |result|. We only need the first byte,
-    // but the following masking takes care of that anyway.
-    __ movzxbq(rcx, FieldOperand(rcx, Map::kBitField2Offset));
-    // Retrieve elements_kind from bit field 2.
-    __ and_(rcx, Immediate(Map::kElementsKindMask));
-    __ shr(rcx, Immediate(Map::kElementsKindShift));
+  // Figure out the right elements kind
+  __ movq(rcx, FieldOperand(rdi, JSFunction::kPrototypeOrInitialMapOffset));
 
-    if (FLAG_debug_code) {
-      Label done;
-      __ cmpl(rcx, Immediate(FAST_ELEMENTS));
-      __ j(equal, &done);
-      __ cmpl(rcx, Immediate(FAST_HOLEY_ELEMENTS));
-      __ Assert(equal,
-          "Invalid ElementsKind for InternalArray or InternalPackedArray");
-      __ bind(&done);
-    }
+  // Load the map's "bit field 2" into |result|. We only need the first byte,
+  // but the following masking takes care of that anyway.
+  __ movzxbq(rcx, FieldOperand(rcx, Map::kBitField2Offset));
+  // Retrieve elements_kind from bit field 2.
+  __ and_(rcx, Immediate(Map::kElementsKindMask));
+  __ shr(rcx, Immediate(Map::kElementsKindShift));
 
-    Label fast_elements_case;
+  if (FLAG_debug_code) {
+    Label done;
     __ cmpl(rcx, Immediate(FAST_ELEMENTS));
-    __ j(equal, &fast_elements_case);
-    GenerateCase(masm, FAST_HOLEY_ELEMENTS);
+    __ j(equal, &done);
+    __ cmpl(rcx, Immediate(FAST_HOLEY_ELEMENTS));
+    __ Assert(equal,
+              "Invalid ElementsKind for InternalArray or InternalPackedArray");
+    __ bind(&done);
+  }
 
-    __ bind(&fast_elements_case);
-    GenerateCase(masm, FAST_ELEMENTS);
-  } else {
-    Label generic_constructor;
-    // Run the native code for the Array function called as constructor.
-    ArrayNativeCode(masm, &generic_constructor);
+  Label fast_elements_case;
+  __ cmpl(rcx, Immediate(FAST_ELEMENTS));
+  __ j(equal, &fast_elements_case);
+  GenerateCase(masm, FAST_HOLEY_ELEMENTS);
 
-    // Jump to the generic construct code in case the specialized code cannot
-    // handle the construction.
-    __ bind(&generic_constructor);
-    Handle<Code> generic_construct_stub =
-        masm->isolate()->builtins()->JSConstructStubGeneric();
-    __ jmp(generic_construct_stub, RelocInfo::CODE_TARGET);
-  }
+  __ bind(&fast_elements_case);
+  GenerateCase(masm, FAST_ELEMENTS);
 }
 
 
index 2ac56a1..9643872 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_X64)
+#if V8_TARGET_ARCH_X64
 
 #include "codegen.h"
 #include "macro-assembler.h"
@@ -346,7 +346,7 @@ void ElementsTransitionGenerator::GenerateSmiToDouble(
 
   // Allocate new backing store.
   __ bind(&new_backing_store);
-  __ lea(rdi, Operand(r9, times_pointer_size, FixedArray::kHeaderSize));
+  __ lea(rdi, Operand(r9, times_8, FixedArray::kHeaderSize));
   __ Allocate(rdi, r14, r11, r15, fail, TAG_OBJECT);
   // Set backing store's map
   __ LoadRoot(rdi, Heap::kFixedDoubleArrayMapRootIndex);
@@ -381,7 +381,7 @@ void ElementsTransitionGenerator::GenerateSmiToDouble(
   // Conversion loop.
   __ bind(&loop);
   __ movq(rbx,
-          FieldOperand(r8, r9, times_8, FixedArray::kHeaderSize));
+          FieldOperand(r8, r9, times_pointer_size, FixedArray::kHeaderSize));
   // r9 : current element's index
   // rbx: current element (smi-tagged)
   __ JumpIfNotSmi(rbx, &convert_hole);
@@ -459,7 +459,7 @@ void ElementsTransitionGenerator::GenerateDoubleToObject(
   __ bind(&loop);
   __ movq(r14, FieldOperand(r8,
                             r9,
-                            times_pointer_size,
+                            times_8,
                             FixedDoubleArray::kHeaderSize));
   // r9 : current element's index
   // r14: current element
@@ -735,7 +735,11 @@ void Code::PatchPlatformCodeAge(byte* sequence,
     Code* stub = GetCodeAgeStub(age, parity);
     CodePatcher patcher(sequence, young_length);
     patcher.masm()->call(stub->instruction_start());
-    patcher.masm()->nop();
+    for (int i = 0;
+         i < kNoCodeAgeSequenceLength - Assembler::kShortCallInstructionLength;
+         i++) {
+      patcher.masm()->nop();
+    }
   }
 }
 
index 80e22c6..96c5330 100644 (file)
@@ -33,7 +33,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_X64)
+#if V8_TARGET_ARCH_X64
 
 #include "cpu.h"
 #include "macro-assembler.h"
index 750d929..a337b0d 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_X64)
+#if V8_TARGET_ARCH_X64
 
 #include "assembler.h"
 #include "codegen.h"
index 21682c2..f2f7ed0 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_X64)
+#if V8_TARGET_ARCH_X64
 
 #include "codegen.h"
 #include "deoptimizer.h"
@@ -548,7 +548,7 @@ void Deoptimizer::EntryGenerator::Generate() {
   // last FrameDescription**.
   __ movl(rdx, Operand(rax, Deoptimizer::output_count_offset()));
   __ movq(rax, Operand(rax, Deoptimizer::output_offset()));
-  __ lea(rdx, Operand(rax, rdx, times_8, 0));
+  __ lea(rdx, Operand(rax, rdx, times_pointer_size, 0));
   __ jmp(&outer_loop_header);
   __ bind(&outer_push_loop);
   // Inner loop state: rbx = current FrameDescription*, rcx = loop index.
index fb0914d..d787775 100644 (file)
@@ -31,7 +31,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_X64)
+#if V8_TARGET_ARCH_X64
 
 #include "disasm.h"
 #include "lazy-instance.h"
index a811a34..5cc27a6 100644 (file)
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_X64)
+#if V8_TARGET_ARCH_X64
 
 #include "assembler.h"
 #include "assembler-x64.h"
 #include "assembler-x64-inl.h"
-#include "frames-inl.h"
+#include "frames.h"
 
 namespace v8 {
 namespace internal {
 
 
-Address ExitFrame::ComputeStackPointer(Address fp) {
-  return Memory::Address_at(fp + ExitFrameConstants::kSPOffset);
-}
-
-
 Register JavaScriptFrame::fp_register() { return rbp; }
 Register JavaScriptFrame::context_register() { return rsi; }
 
index e9fe2a8..9ad7f58 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_X64)
+#if V8_TARGET_ARCH_X64
 
 #include "code-stubs.h"
 #include "codegen.h"
@@ -118,7 +118,7 @@ void FullCodeGenerator::Generate() {
   CompilationInfo* info = info_;
   handler_table_ =
       isolate()->factory()->NewFixedArray(function()->handler_count(), TENURED);
-  profiling_counter_ = isolate()->factory()->NewJSGlobalPropertyCell(
+  profiling_counter_ = isolate()->factory()->NewCell(
       Handle<Smi>(Smi::FromInt(FLAG_interrupt_budget), isolate()));
   SetFunctionPosition(function());
   Comment cmnt(masm_, "[ function compiled by full code generator");
@@ -308,7 +308,7 @@ void FullCodeGenerator::ClearAccumulator() {
 
 void FullCodeGenerator::EmitProfilingCounterDecrement(int delta) {
   __ movq(rbx, profiling_counter_, RelocInfo::EMBEDDED_OBJECT);
-  __ SmiAddConstant(FieldOperand(rbx, JSGlobalPropertyCell::kValueOffset),
+  __ SmiAddConstant(FieldOperand(rbx, Cell::kValueOffset),
                     Smi::FromInt(-delta));
 }
 
@@ -323,8 +323,7 @@ void FullCodeGenerator::EmitProfilingCounterReset() {
   __ movq(kScratchRegister,
           reinterpret_cast<uint64_t>(Smi::FromInt(reset_value)),
           RelocInfo::NONE64);
-  __ movq(FieldOperand(rbx, JSGlobalPropertyCell::kValueOffset),
-          kScratchRegister);
+  __ movq(FieldOperand(rbx, Cell::kValueOffset), kScratchRegister);
 }
 
 
@@ -338,7 +337,7 @@ void FullCodeGenerator::EmitBackEdgeBookkeeping(IterationStatement* stmt,
     ASSERT(back_edge_target->is_bound());
     int distance = masm_->SizeOfCodeGeneratedSince(back_edge_target);
     weight = Min(kMaxBackEdgeWeight,
-                 Max(1, distance / kBackEdgeDistanceUnit));
+                 Max(1, distance / kCodeSizeMultiplier));
   }
   EmitProfilingCounterDecrement(weight);
   __ j(positive, &ok, Label::kNear);
@@ -379,7 +378,7 @@ void FullCodeGenerator::EmitReturnSequence() {
       } else if (FLAG_weighted_back_edges) {
         int distance = masm_->pc_offset();
         weight = Min(kMaxBackEdgeWeight,
-                     Max(1, distance / kBackEdgeDistanceUnit));
+                     Max(1, distance / kCodeSizeMultiplier));
       }
       EmitProfilingCounterDecrement(weight);
       Label ok;
@@ -1128,14 +1127,12 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) {
   Label non_proxy;
   __ bind(&fixed_array);
 
-  Handle<JSGlobalPropertyCell> cell =
-      isolate()->factory()->NewJSGlobalPropertyCell(
-          Handle<Object>(
-              Smi::FromInt(TypeFeedbackCells::kForInFastCaseMarker),
-              isolate()));
+  Handle<Cell> cell = isolate()->factory()->NewCell(
+      Handle<Object>(Smi::FromInt(TypeFeedbackCells::kForInFastCaseMarker),
+                     isolate()));
   RecordTypeFeedbackCell(stmt->ForInFeedbackId(), cell);
   __ LoadHeapObject(rbx, cell);
-  __ Move(FieldOperand(rbx, JSGlobalPropertyCell::kValueOffset),
+  __ Move(FieldOperand(rbx, Cell::kValueOffset),
           Smi::FromInt(TypeFeedbackCells::kForInSlowCaseMarker));
 
   __ Move(rbx, Smi::FromInt(1));  // Smi indicates slow check
@@ -1666,10 +1663,10 @@ void FullCodeGenerator::VisitObjectLiteral(ObjectLiteral* expr) {
         ASSERT(!CompileTimeValue::IsCompileTimeValue(value));
         // Fall through.
       case ObjectLiteral::Property::COMPUTED:
-        if (key->handle()->IsInternalizedString()) {
+        if (key->value()->IsInternalizedString()) {
           if (property->emit_store()) {
             VisitForAccumulatorValue(value);
-            __ Move(rcx, key->handle());
+            __ Move(rcx, key->value());
             __ movq(rdx, Operand(rsp, 0));
             Handle<Code> ic = is_classic_mode()
                 ? isolate()->builtins()->StoreIC_Initialize()
@@ -1809,13 +1806,11 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
     Expression* subexpr = subexprs->at(i);
     // If the subexpression is a literal or a simple materialized literal it
     // is already set in the cloned array.
-    if (subexpr->AsLiteral() != NULL ||
-        CompileTimeValue::IsCompileTimeValue(subexpr)) {
-      continue;
-    }
+    if (CompileTimeValue::IsCompileTimeValue(subexpr)) continue;
 
     if (!result_saved) {
-      __ push(rax);
+      __ push(rax);  // array literal
+      __ Push(Smi::FromInt(expr->literal_index()));
       result_saved = true;
     }
     VisitForAccumulatorValue(subexpr);
@@ -1824,7 +1819,7 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
       // Fast-case array literal with ElementsKind of FAST_*_ELEMENTS, they
       // cannot transition and don't need to call the runtime stub.
       int offset = FixedArray::kHeaderSize + (i * kPointerSize);
-      __ movq(rbx, Operand(rsp, 0));  // Copy of array literal.
+      __ movq(rbx, Operand(rsp, kPointerSize));  // Copy of array literal.
       __ movq(rbx, FieldOperand(rbx, JSObject::kElementsOffset));
       // Store the subexpression value in the array's elements.
       __ movq(FieldOperand(rbx, offset), result_register());
@@ -1835,10 +1830,7 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
                           INLINE_SMI_CHECK);
     } else {
       // Store the subexpression value in the array's elements.
-      __ movq(rbx, Operand(rsp, 0));  // Copy of array literal.
-      __ movq(rdi, FieldOperand(rbx, JSObject::kMapOffset));
       __ Move(rcx, Smi::FromInt(i));
-      __ Move(rdx, Smi::FromInt(expr->literal_index()));
       StoreArrayLiteralElementStub stub;
       __ CallStub(&stub);
     }
@@ -1847,6 +1839,7 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
   }
 
   if (result_saved) {
+    __ addq(rsp, Immediate(kPointerSize));  // literal index
     context()->PlugTOS();
   } else {
     context()->Plug(rax);
@@ -1974,22 +1967,39 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
   VisitForStackValue(expr->expression());
 
   switch (expr->yield_kind()) {
-    case Yield::INITIAL:
-    case Yield::SUSPEND: {
-      VisitForStackValue(expr->generator_object());
+    case Yield::SUSPEND:
+      // Pop value from top-of-stack slot; box result into result register.
+      EmitCreateIteratorResult(false);
+      __ push(result_register());
+      // Fall through.
+    case Yield::INITIAL: {
+      Label suspend, continuation, post_runtime, resume;
+
+      __ jmp(&suspend);
+
+      __ bind(&continuation);
+      __ jmp(&resume);
+
+      __ bind(&suspend);
+      VisitForAccumulatorValue(expr->generator_object());
+      ASSERT(continuation.pos() > 0 && Smi::IsValid(continuation.pos()));
+      __ Move(FieldOperand(rax, JSGeneratorObject::kContinuationOffset),
+              Smi::FromInt(continuation.pos()));
+      __ movq(FieldOperand(rax, JSGeneratorObject::kContextOffset), rsi);
+      __ movq(rcx, rsi);
+      __ RecordWriteField(rax, JSGeneratorObject::kContextOffset, rcx, rdx,
+                          kDontSaveFPRegs);
+      __ lea(rbx, Operand(rbp, StandardFrameConstants::kExpressionsOffset));
+      __ cmpq(rsp, rbx);
+      __ j(equal, &post_runtime);
+      __ push(rax);  // generator object
       __ CallRuntime(Runtime::kSuspendJSGeneratorObject, 1);
       __ movq(context_register(),
               Operand(rbp, StandardFrameConstants::kContextOffset));
+      __ bind(&post_runtime);
 
-      Label resume;
-      __ CompareRoot(result_register(), Heap::kTheHoleValueRootIndex);
-      __ j(not_equal, &resume);
-      if (expr->yield_kind() == Yield::SUSPEND) {
-        EmitReturnIteratorResult(false);
-      } else {
-        __ pop(result_register());
-        EmitReturnSequence();
-      }
+      __ pop(result_register());
+      EmitReturnSequence();
 
       __ bind(&resume);
       context()->Plug(result_register());
@@ -2001,7 +2011,10 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
       __ Move(FieldOperand(result_register(),
                            JSGeneratorObject::kContinuationOffset),
               Smi::FromInt(JSGeneratorObject::kGeneratorClosed));
-      EmitReturnIteratorResult(true);
+      // Pop value from top-of-stack slot, box result into result register.
+      EmitCreateIteratorResult(true);
+      EmitUnwindBeforeReturn();
+      EmitReturnSequence();
       break;
     }
 
@@ -2012,75 +2025,68 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
       // [sp + 1 * kPointerSize] iter
       // [sp + 0 * kPointerSize] g
 
-      Label l_catch, l_try, l_resume, l_next, l_call, l_loop;
+      Label l_catch, l_try, l_suspend, l_continuation, l_resume;
+      Label l_next, l_call, l_loop;
       // Initial send value is undefined.
       __ LoadRoot(rax, Heap::kUndefinedValueRootIndex);
       __ jmp(&l_next);
 
-      // catch (e) { receiver = iter; f = iter.throw; arg = e; goto l_call; }
+      // catch (e) { receiver = iter; f = 'throw'; arg = e; goto l_call; }
       __ bind(&l_catch);
       handler_table()->set(expr->index(), Smi::FromInt(l_catch.pos()));
-      __ movq(rcx, Operand(rsp, 1 * kPointerSize));      // iter
-      __ push(rcx);                                      // iter
-      __ push(rax);                                      // exception
-      __ movq(rax, rcx);                                 // iter
       __ LoadRoot(rcx, Heap::kthrow_stringRootIndex);    // "throw"
-      Handle<Code> throw_ic = isolate()->builtins()->LoadIC_Initialize();
-      CallIC(throw_ic);                                  // iter.throw in rax
+      __ push(rcx);
+      __ push(Operand(rsp, 2 * kPointerSize));           // iter
+      __ push(rax);                                      // exception
       __ jmp(&l_call);
 
-      // try { received = yield result.value }
+      // try { received = %yield result }
+      // Shuffle the received result above a try handler and yield it without
+      // re-boxing.
       __ bind(&l_try);
-      __ pop(rax);                                       // result.value
+      __ pop(rax);                                       // result
       __ PushTryHandler(StackHandler::CATCH, expr->index());
       const int handler_size = StackHandlerConstants::kSize;
-      __ push(rax);                                      // result.value
-      __ push(Operand(rsp, (0 + 1) * kPointerSize + handler_size));  // g
+      __ push(rax);                                      // result
+      __ jmp(&l_suspend);
+      __ bind(&l_continuation);
+      __ jmp(&l_resume);
+      __ bind(&l_suspend);
+      const int generator_object_depth = kPointerSize + handler_size;
+      __ movq(rax, Operand(rsp, generator_object_depth));
+      __ push(rax);                                      // g
+      ASSERT(l_continuation.pos() > 0 && Smi::IsValid(l_continuation.pos()));
+      __ Move(FieldOperand(rax, JSGeneratorObject::kContinuationOffset),
+              Smi::FromInt(l_continuation.pos()));
+      __ movq(FieldOperand(rax, JSGeneratorObject::kContextOffset), rsi);
+      __ movq(rcx, rsi);
+      __ RecordWriteField(rax, JSGeneratorObject::kContextOffset, rcx, rdx,
+                          kDontSaveFPRegs);
       __ CallRuntime(Runtime::kSuspendJSGeneratorObject, 1);
       __ movq(context_register(),
               Operand(rbp, StandardFrameConstants::kContextOffset));
-      __ CompareRoot(rax, Heap::kTheHoleValueRootIndex);
-      __ j(not_equal, &l_resume);
-      EmitReturnIteratorResult(false);
+      __ pop(rax);                                       // result
+      EmitReturnSequence();
       __ bind(&l_resume);                                // received in rax
       __ PopTryHandler();
 
-      // receiver = iter; f = iter.next; arg = received;
+      // receiver = iter; f = 'next'; arg = received;
       __ bind(&l_next);
-      __ movq(rcx, Operand(rsp, 1 * kPointerSize));      // iter
-      __ push(rcx);                                      // iter
-      __ push(rax);                                      // received
-      __ movq(rax, rcx);                                 // iter
       __ LoadRoot(rcx, Heap::knext_stringRootIndex);     // "next"
-      Handle<Code> next_ic = isolate()->builtins()->LoadIC_Initialize();
-      CallIC(next_ic);                                   // iter.next in rax
+      __ push(rcx);
+      __ push(Operand(rsp, 2 * kPointerSize));           // iter
+      __ push(rax);                                      // received
 
-      // result = f.call(receiver, arg);
+      // result = receiver[f](arg);
       __ bind(&l_call);
-      Label l_call_runtime;
-      __ JumpIfSmi(rax, &l_call_runtime);
-      __ CmpObjectType(rax, JS_FUNCTION_TYPE, rbx);
-      __ j(not_equal, &l_call_runtime);
-      __ movq(rdi, rax);
-      ParameterCount count(1);
-      __ InvokeFunction(rdi, count, CALL_FUNCTION,
-                        NullCallWrapper(), CALL_AS_METHOD);
+      Handle<Code> ic = isolate()->stub_cache()->ComputeKeyedCallInitialize(1);
+      CallIC(ic);
       __ movq(rsi, Operand(rbp, StandardFrameConstants::kContextOffset));
-      __ jmp(&l_loop);
-      __ bind(&l_call_runtime);
-      __ push(rax);
-      __ CallRuntime(Runtime::kCall, 3);
+      __ Drop(1);  // The key is still on the stack; drop it.
 
-      // val = result.value; if (!result.done) goto l_try;
+      // if (!result.done) goto l_try;
       __ bind(&l_loop);
-      // result.value
       __ push(rax);                                      // save result
-      __ LoadRoot(rcx, Heap::kvalue_stringRootIndex);    // "value"
-      Handle<Code> value_ic = isolate()->builtins()->LoadIC_Initialize();
-      CallIC(value_ic);                                  // result.value in rax
-      __ pop(rbx);                                       // result
-      __ push(rax);                                      // result.value
-      __ movq(rax, rbx);                                 // result
       __ LoadRoot(rcx, Heap::kdone_stringRootIndex);     // "done"
       Handle<Code> done_ic = isolate()->builtins()->LoadIC_Initialize();
       CallIC(done_ic);                                   // result.done in rax
@@ -2090,7 +2096,10 @@ void FullCodeGenerator::VisitYield(Yield* expr) {
       __ j(zero, &l_try);
 
       // result.value
-      __ pop(rax);                                       // result.value
+      __ pop(rax);                                       // result
+      __ LoadRoot(rcx, Heap::kvalue_stringRootIndex);    // "value"
+      Handle<Code> value_ic = isolate()->builtins()->LoadIC_Initialize();
+      CallIC(value_ic);                                  // result.value in rax
       context()->DropAndPlug(2, rax);                    // drop iter and g
       break;
     }
@@ -2195,13 +2204,20 @@ void FullCodeGenerator::EmitGeneratorResume(Expression *generator,
 }
 
 
-void FullCodeGenerator::EmitReturnIteratorResult(bool done) {
+void FullCodeGenerator::EmitCreateIteratorResult(bool done) {
   Label gc_required;
   Label allocated;
 
   Handle<Map> map(isolate()->native_context()->generator_result_map());
 
   __ Allocate(map->instance_size(), rax, rcx, rdx, &gc_required, TAG_OBJECT);
+  __ jmp(&allocated);
+
+  __ bind(&gc_required);
+  __ Push(Smi::FromInt(map->instance_size()));
+  __ CallRuntime(Runtime::kAllocateInNewSpace, 1);
+  __ movq(context_register(),
+          Operand(rbp, StandardFrameConstants::kContextOffset));
 
   __ bind(&allocated);
   __ Move(rbx, map);
@@ -2222,33 +2238,13 @@ void FullCodeGenerator::EmitReturnIteratorResult(bool done) {
   // root set.
   __ RecordWriteField(rax, JSGeneratorObject::kResultValuePropertyOffset,
                       rcx, rdx, kDontSaveFPRegs);
-
-  if (done) {
-    // Exit all nested statements.
-    NestedStatement* current = nesting_stack_;
-    int stack_depth = 0;
-    int context_length = 0;
-    while (current != NULL) {
-      current = current->Exit(&stack_depth, &context_length);
-    }
-    __ Drop(stack_depth);
-  }
-
-  EmitReturnSequence();
-
-  __ bind(&gc_required);
-  __ Push(Smi::FromInt(map->instance_size()));
-  __ CallRuntime(Runtime::kAllocateInNewSpace, 1);
-  __ movq(context_register(),
-          Operand(rbp, StandardFrameConstants::kContextOffset));
-  __ jmp(&allocated);
 }
 
 
 void FullCodeGenerator::EmitNamedPropertyLoad(Property* prop) {
   SetSourcePosition(prop->position());
   Literal* key = prop->key()->AsLiteral();
-  __ Move(rcx, key->handle());
+  __ Move(rcx, key->value());
   Handle<Code> ic = isolate()->builtins()->LoadIC_Initialize();
   CallIC(ic, RelocInfo::CODE_TARGET, prop->PropertyFeedbackId());
 }
@@ -2367,7 +2363,7 @@ void FullCodeGenerator::EmitAssignment(Expression* expr) {
       VisitForAccumulatorValue(prop->obj());
       __ movq(rdx, rax);
       __ pop(rax);  // Restore value.
-      __ Move(rcx, prop->key()->AsLiteral()->handle());
+      __ Move(rcx, prop->key()->AsLiteral()->value());
       Handle<Code> ic = is_classic_mode()
           ? isolate()->builtins()->StoreIC_Initialize()
           : isolate()->builtins()->StoreIC_Initialize_Strict();
@@ -2490,7 +2486,7 @@ void FullCodeGenerator::EmitNamedPropertyAssignment(Assignment* expr) {
 
   // Record source code position before IC call.
   SetSourcePosition(expr->position());
-  __ Move(rcx, prop->key()->AsLiteral()->handle());
+  __ Move(rcx, prop->key()->AsLiteral()->value());
   __ pop(rdx);
   Handle<Code> ic = is_classic_mode()
       ? isolate()->builtins()->StoreIC_Initialize()
@@ -2620,8 +2616,7 @@ void FullCodeGenerator::EmitCallWithStub(Call* expr, CallFunctionFlags flags) {
   flags = static_cast<CallFunctionFlags>(flags | RECORD_CALL_TARGET);
   Handle<Object> uninitialized =
       TypeFeedbackCells::UninitializedSentinel(isolate());
-  Handle<JSGlobalPropertyCell> cell =
-      isolate()->factory()->NewJSGlobalPropertyCell(uninitialized);
+  Handle<Cell> cell = isolate()->factory()->NewCell(uninitialized);
   RecordTypeFeedbackCell(expr->CallFeedbackId(), cell);
   __ Move(rbx, cell);
 
@@ -2751,7 +2746,7 @@ void FullCodeGenerator::VisitCall(Call* expr) {
     }
     if (property->key()->IsPropertyName()) {
       EmitCallWithIC(expr,
-                     property->key()->AsLiteral()->handle(),
+                     property->key()->AsLiteral()->value(),
                      RelocInfo::CODE_TARGET);
     } else {
       EmitKeyedCallWithIC(expr, property->key());
@@ -2804,8 +2799,7 @@ void FullCodeGenerator::VisitCallNew(CallNew* expr) {
   // Record call targets in unoptimized code, but not in the snapshot.
   Handle<Object> uninitialized =
       TypeFeedbackCells::UninitializedSentinel(isolate());
-  Handle<JSGlobalPropertyCell> cell =
-      isolate()->factory()->NewJSGlobalPropertyCell(uninitialized);
+  Handle<Cell> cell = isolate()->factory()->NewCell(uninitialized);
   RecordTypeFeedbackCell(expr->CallNewFeedbackId(), cell);
   __ Move(rbx, cell);
 
@@ -3357,7 +3351,7 @@ void FullCodeGenerator::EmitDateField(CallRuntime* expr) {
   ZoneList<Expression*>* args = expr->arguments();
   ASSERT(args->length() == 2);
   ASSERT_NE(NULL, args->at(1)->AsLiteral());
-  Smi* index = Smi::cast(*(args->at(1)->AsLiteral()->handle()));
+  Smi* index = Smi::cast(*(args->at(1)->AsLiteral()->value()));
 
   VisitForAccumulatorValue(args->at(0));  // Load the object.
 
@@ -3778,7 +3772,7 @@ void FullCodeGenerator::EmitGetFromCache(CallRuntime* expr) {
   ASSERT_EQ(2, args->length());
 
   ASSERT_NE(NULL, args->at(0)->AsLiteral());
-  int cache_id = Smi::cast(*(args->at(0)->AsLiteral()->handle()))->value();
+  int cache_id = Smi::cast(*(args->at(0)->AsLiteral()->value()))->value();
 
   Handle<FixedArray> jsfunction_result_caches(
       isolate()->native_context()->jsfunction_result_caches());
@@ -4516,7 +4510,7 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
       }
       break;
     case NAMED_PROPERTY: {
-      __ Move(rcx, prop->key()->AsLiteral()->handle());
+      __ Move(rcx, prop->key()->AsLiteral()->value());
       __ pop(rdx);
       Handle<Code> ic = is_classic_mode()
           ? isolate()->builtins()->StoreIC_Initialize()
index efb41c8..a8de443 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_X64)
+#if V8_TARGET_ARCH_X64
 
 #include "codegen.h"
 #include "ic-inl.h"
@@ -337,7 +337,8 @@ static void GenerateKeyNameCheck(MacroAssembler* masm,
   __ testl(hash, Immediate(Name::kContainsCachedArrayIndexMask));
   __ j(zero, index_string);  // The value in hash is used at jump target.
 
-  // Is the string internalized?
+  // Is the string internalized? We already know it's a string so a single
+  // bit test is enough.
   STATIC_ASSERT(kInternalizedTag != 0);
   __ testb(FieldOperand(map, Map::kInstanceTypeOffset),
            Immediate(kIsInternalizedMask));
@@ -711,10 +712,10 @@ static void KeyedStoreGenerateGenericHelper(
 void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm,
                                    StrictModeFlag strict_mode) {
   // ----------- S t a t e -------------
-  //  -- rax     : value
-  //  -- rcx     : key
-  //  -- rdx     : receiver
-  //  -- rsp[0]  : return address
+  //  -- rax    : value
+  //  -- rcx    : key
+  //  -- rdx    : receiver
+  //  -- rsp[0] : return address
   // -----------------------------------
   Label slow, slow_with_tagged_index, fast_object, fast_object_grow;
   Label fast_double, fast_double_grow;
@@ -869,14 +870,14 @@ static void GenerateFunctionTailCall(MacroAssembler* masm,
                                      int argc,
                                      Label* miss) {
   // ----------- S t a t e -------------
-  // rcx                    : function name
-  // rdi                    : function
-  // rsp[0]                 : return address
-  // rsp[8]                 : argument argc
-  // rsp[16]                : argument argc - 1
+  // rcx                 : function name
+  // rdi                 : function
+  // rsp[0]              : return address
+  // rsp[8]              : argument argc
+  // rsp[16]             : argument argc - 1
   // ...
-  // rsp[argc * 8]          : argument 1
-  // rsp[(argc + 1) * 8]    : argument 0 = receiver
+  // rsp[argc * 8]       : argument 1
+  // rsp[(argc + 1) * 8] : argument 0 = receiver
   // -----------------------------------
   __ JumpIfSmi(rdi, miss);
   // Check that the value is a JavaScript function.
@@ -893,13 +894,13 @@ static void GenerateFunctionTailCall(MacroAssembler* masm,
 // The generated code falls through if the call should be handled by runtime.
 void CallICBase::GenerateNormal(MacroAssembler* masm, int argc) {
   // ----------- S t a t e -------------
-  // rcx                    : function name
-  // rsp[0]                 : return address
-  // rsp[8]                 : argument argc
-  // rsp[16]                : argument argc - 1
+  // rcx                 : function name
+  // rsp[0]              : return address
+  // rsp[8]              : argument argc
+  // rsp[16]             : argument argc - 1
   // ...
-  // rsp[argc * 8]          : argument 1
-  // rsp[(argc + 1) * 8]    : argument 0 = receiver
+  // rsp[argc * 8]       : argument 1
+  // rsp[(argc + 1) * 8] : argument 0 = receiver
   // -----------------------------------
   Label miss;
 
@@ -923,13 +924,13 @@ void CallICBase::GenerateMiss(MacroAssembler* masm,
                               IC::UtilityId id,
                               Code::ExtraICState extra_state) {
   // ----------- S t a t e -------------
-  // rcx                      : function name
-  // rsp[0]                   : return address
-  // rsp[8]                   : argument argc
-  // rsp[16]                  : argument argc - 1
+  // rcx                 : function name
+  // rsp[0]              : return address
+  // rsp[8]              : argument argc
+  // rsp[16]             : argument argc - 1
   // ...
-  // rsp[argc * 8]            : argument 1
-  // rsp[(argc + 1) * 8]      : argument 0 = receiver
+  // rsp[argc * 8]       : argument 1
+  // rsp[(argc + 1) * 8] : argument 0 = receiver
   // -----------------------------------
 
   Counters* counters = masm->isolate()->counters();
@@ -995,13 +996,13 @@ void CallIC::GenerateMegamorphic(MacroAssembler* masm,
                                  int argc,
                                  Code::ExtraICState extra_ic_state) {
   // ----------- S t a t e -------------
-  // rcx                      : function name
-  // rsp[0]                   : return address
-  // rsp[8]                   : argument argc
-  // rsp[16]                  : argument argc - 1
+  // rcx                 : function name
+  // rsp[0]              : return address
+  // rsp[8]              : argument argc
+  // rsp[16]             : argument argc - 1
   // ...
-  // rsp[argc * 8]            : argument 1
-  // rsp[(argc + 1) * 8]      : argument 0 = receiver
+  // rsp[argc * 8]       : argument 1
+  // rsp[(argc + 1) * 8] : argument 0 = receiver
   // -----------------------------------
 
   // Get the receiver of the function from the stack; 1 ~ return address.
@@ -1013,13 +1014,13 @@ void CallIC::GenerateMegamorphic(MacroAssembler* masm,
 
 void KeyedCallIC::GenerateMegamorphic(MacroAssembler* masm, int argc) {
   // ----------- S t a t e -------------
-  // rcx                      : function name
-  // rsp[0]                   : return address
-  // rsp[8]                   : argument argc
-  // rsp[16]                  : argument argc - 1
+  // rcx                 : function name
+  // rsp[0]              : return address
+  // rsp[8]              : argument argc
+  // rsp[16]             : argument argc - 1
   // ...
-  // rsp[argc * 8]            : argument 1
-  // rsp[(argc + 1) * 8]      : argument 0 = receiver
+  // rsp[argc * 8]       : argument 1
+  // rsp[(argc + 1) * 8] : argument 0 = receiver
   // -----------------------------------
 
   // Get the receiver of the function from the stack; 1 ~ return address.
@@ -1124,13 +1125,13 @@ void KeyedCallIC::GenerateMegamorphic(MacroAssembler* masm, int argc) {
 
 void KeyedCallIC::GenerateNormal(MacroAssembler* masm, int argc) {
   // ----------- S t a t e -------------
-  // rcx                      : function name
-  // rsp[0]                   : return address
-  // rsp[8]                   : argument argc
-  // rsp[16]                  : argument argc - 1
+  // rcx                 : function name
+  // rsp[0]              : return address
+  // rsp[8]              : argument argc
+  // rsp[16]             : argument argc - 1
   // ...
-  // rsp[argc * 8]            : argument 1
-  // rsp[(argc + 1) * 8]      : argument 0 = receiver
+  // rsp[argc * 8]       : argument 1
+  // rsp[(argc + 1) * 8] : argument 0 = receiver
   // -----------------------------------
 
   // Check if the name is really a name.
@@ -1229,7 +1230,7 @@ void KeyedLoadIC::GenerateNonStrictArguments(MacroAssembler* masm) {
   // ----------- S t a t e -------------
   //  -- rax    : key
   //  -- rdx    : receiver
-  //  -- rsp[0]  : return address
+  //  -- rsp[0] : return address
   // -----------------------------------
   Label slow, notin;
   Operand mapped_location =
@@ -1252,10 +1253,10 @@ void KeyedLoadIC::GenerateNonStrictArguments(MacroAssembler* masm) {
 
 void KeyedStoreIC::GenerateNonStrictArguments(MacroAssembler* masm) {
   // ----------- S t a t e -------------
-  //  -- rax     : value
-  //  -- rcx     : key
-  //  -- rdx     : receiver
-  //  -- rsp[0]  : return address
+  //  -- rax    : value
+  //  -- rcx    : key
+  //  -- rdx    : receiver
+  //  -- rsp[0] : return address
   // -----------------------------------
   Label slow, notin;
   Operand mapped_location = GenerateMappedArgumentsLookup(
@@ -1292,13 +1293,13 @@ void KeyedStoreIC::GenerateNonStrictArguments(MacroAssembler* masm) {
 void KeyedCallIC::GenerateNonStrictArguments(MacroAssembler* masm,
                                              int argc) {
   // ----------- S t a t e -------------
-  // rcx                      : function name
-  // rsp[0]                   : return address
-  // rsp[8]                   : argument argc
-  // rsp[16]                  : argument argc - 1
+  // rcx                 : function name
+  // rsp[0]              : return address
+  // rsp[8]              : argument argc
+  // rsp[16]             : argument argc - 1
   // ...
-  // rsp[argc * 8]            : argument 1
-  // rsp[(argc + 1) * 8]      : argument 0 = receiver
+  // rsp[argc * 8]       : argument 1
+  // rsp[(argc + 1) * 8] : argument 0 = receiver
   // -----------------------------------
   Label slow, notin;
   __ movq(rdx, Operand(rsp, (argc + 1) * kPointerSize));
@@ -1384,7 +1385,7 @@ void LoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
   // ----------- S t a t e -------------
   //  -- rax    : receiver
   //  -- rcx    : name
-  //  -- rsp[0]  : return address
+  //  -- rsp[0] : return address
   // -----------------------------------
 
   __ pop(rbx);
@@ -1401,7 +1402,7 @@ void KeyedLoadIC::GenerateMiss(MacroAssembler* masm, ICMissMode miss_mode) {
   // ----------- S t a t e -------------
   //  -- rax    : key
   //  -- rdx    : receiver
-  //  -- rsp[0]  : return address
+  //  -- rsp[0] : return address
   // -----------------------------------
 
   Counters* counters = masm->isolate()->counters();
@@ -1425,7 +1426,7 @@ void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
   // ----------- S t a t e -------------
   //  -- rax    : key
   //  -- rdx    : receiver
-  //  -- rsp[0]  : return address
+  //  -- rsp[0] : return address
   // -----------------------------------
 
   __ pop(rbx);
@@ -1502,8 +1503,8 @@ void StoreIC::GenerateNormal(MacroAssembler* masm) {
 }
 
 
-void StoreIC::GenerateGlobalProxy(MacroAssembler* masm,
-                                  StrictModeFlag strict_mode) {
+void StoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm,
+                                         StrictModeFlag strict_mode) {
   // ----------- S t a t e -------------
   //  -- rax    : value
   //  -- rcx    : name
@@ -1526,10 +1527,10 @@ void StoreIC::GenerateGlobalProxy(MacroAssembler* masm,
 void KeyedStoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm,
                                               StrictModeFlag strict_mode) {
   // ----------- S t a t e -------------
-  //  -- rax     : value
-  //  -- rcx     : key
-  //  -- rdx     : receiver
-  //  -- rsp[0]  : return address
+  //  -- rax    : value
+  //  -- rcx    : key
+  //  -- rdx    : receiver
+  //  -- rsp[0] : return address
   // -----------------------------------
 
   __ pop(rbx);
@@ -1547,10 +1548,10 @@ void KeyedStoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm,
 
 void StoreIC::GenerateSlow(MacroAssembler* masm) {
   // ----------- S t a t e -------------
-  //  -- rax     : value
-  //  -- rcx     : key
-  //  -- rdx     : receiver
-  //  -- rsp[0]  : return address
+  //  -- rax    : value
+  //  -- rcx    : key
+  //  -- rdx    : receiver
+  //  -- rsp[0] : return address
   // -----------------------------------
 
   __ pop(rbx);
@@ -1567,10 +1568,10 @@ void StoreIC::GenerateSlow(MacroAssembler* masm) {
 
 void KeyedStoreIC::GenerateSlow(MacroAssembler* masm) {
   // ----------- S t a t e -------------
-  //  -- rax     : value
-  //  -- rcx     : key
-  //  -- rdx     : receiver
-  //  -- rsp[0]  : return address
+  //  -- rax    : value
+  //  -- rcx    : key
+  //  -- rdx    : receiver
+  //  -- rsp[0] : return address
   // -----------------------------------
 
   __ pop(rbx);
@@ -1587,10 +1588,10 @@ void KeyedStoreIC::GenerateSlow(MacroAssembler* masm) {
 
 void KeyedStoreIC::GenerateMiss(MacroAssembler* masm, ICMissMode miss_mode) {
   // ----------- S t a t e -------------
-  //  -- rax     : value
-  //  -- rcx     : key
-  //  -- rdx     : receiver
-  //  -- rsp[0]  : return address
+  //  -- rax    : value
+  //  -- rcx    : key
+  //  -- rdx    : receiver
+  //  -- rsp[0] : return address
   // -----------------------------------
 
   __ pop(rbx);
@@ -1610,9 +1611,9 @@ void KeyedStoreIC::GenerateMiss(MacroAssembler* masm, ICMissMode miss_mode) {
 
 void KeyedStoreIC::GenerateTransitionElementsSmiToDouble(MacroAssembler* masm) {
   // ----------- S t a t e -------------
-  //  -- rbx     : target map
-  //  -- rdx     : receiver
-  //  -- rsp[0]  : return address
+  //  -- rbx    : target map
+  //  -- rdx    : receiver
+  //  -- rsp[0] : return address
   // -----------------------------------
   // Must return the modified receiver in eax.
   if (!FLAG_trace_elements_transitions) {
@@ -1635,9 +1636,9 @@ void KeyedStoreIC::GenerateTransitionElementsSmiToDouble(MacroAssembler* masm) {
 void KeyedStoreIC::GenerateTransitionElementsDoubleToObject(
     MacroAssembler* masm) {
   // ----------- S t a t e -------------
-  //  -- rbx     : target map
-  //  -- rdx     : receiver
-  //  -- rsp[0]  : return address
+  //  -- rbx    : target map
+  //  -- rdx    : receiver
+  //  -- rsp[0] : return address
   // -----------------------------------
   // Must return the modified receiver in eax.
   if (!FLAG_trace_elements_transitions) {
index f423133..de43f86 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_X64)
+#if V8_TARGET_ARCH_X64
 
 #include "x64/lithium-codegen-x64.h"
 #include "code-stubs.h"
@@ -67,7 +67,7 @@ class SafepointGenerator : public CallWrapper {
 #define __ masm()->
 
 bool LCodeGen::GenerateCode() {
-  HPhase phase("Z_Code generation", chunk());
+  LPhase phase("Z_Code generation", chunk());
   ASSERT(is_unused());
   status_ = GENERATING;
 
@@ -92,20 +92,7 @@ void LCodeGen::FinishCode(Handle<Code> code) {
     RegisterDependentCodeForEmbeddedMaps(code);
   }
   PopulateDeoptimizationData(code);
-  for (int i = 0 ; i < prototype_maps_.length(); i++) {
-    prototype_maps_.at(i)->AddDependentCode(
-        DependentCode::kPrototypeCheckGroup, code);
-  }
-  for (int i = 0 ; i < transition_maps_.length(); i++) {
-    transition_maps_.at(i)->AddDependentCode(
-        DependentCode::kTransitionGroup, code);
-  }
-  if (graph()->depends_on_empty_array_proto_elements()) {
-    isolate()->initial_object_prototype()->map()->AddDependentCode(
-        DependentCode::kElementsCantBeAddedGroup, code);
-    isolate()->initial_array_prototype()->map()->AddDependentCode(
-        DependentCode::kElementsCantBeAddedGroup, code);
-  }
+  info()->CommitDependencies(code);
 }
 
 
@@ -482,27 +469,15 @@ Operand LCodeGen::ToOperand(LOperand* op) const {
 
 
 void LCodeGen::WriteTranslation(LEnvironment* environment,
-                                Translation* translation,
-                                int* pushed_arguments_index,
-                                int* pushed_arguments_count) {
+                                Translation* translation) {
   if (environment == NULL) return;
 
   // The translation includes one command per value in the environment.
-  int translation_size = environment->values()->length();
+  int translation_size = environment->translation_size();
   // The output frame height does not include the parameters.
   int height = translation_size - environment->parameter_count();
 
-  // Function parameters are arguments to the outermost environment. The
-  // arguments index points to the first element of a sequence of tagged
-  // values on the stack that represent the arguments. This needs to be
-  // kept in sync with the LArgumentsElements implementation.
-  *pushed_arguments_index = -environment->parameter_count();
-  *pushed_arguments_count = environment->parameter_count();
-
-  WriteTranslation(environment->outer(),
-                   translation,
-                   pushed_arguments_index,
-                   pushed_arguments_count);
+  WriteTranslation(environment->outer(), translation);
   bool has_closure_id = !info()->closure().is_null() &&
       !info()->closure().is_identical_to(environment->closure());
   int closure_id = has_closure_id
@@ -534,60 +509,29 @@ void LCodeGen::WriteTranslation(LEnvironment* environment,
       break;
   }
 
-  // Inlined frames which push their arguments cause the index to be
-  // bumped and another stack area to be used for materialization,
-  // otherwise actual argument values are unknown for inlined frames.
-  bool arguments_known = true;
-  int arguments_index = *pushed_arguments_index;
-  int arguments_count = *pushed_arguments_count;
-  if (environment->entry() != NULL) {
-    arguments_known = environment->entry()->arguments_pushed();
-    arguments_index = arguments_index < 0
-        ? GetStackSlotCount() : arguments_index + arguments_count;
-    arguments_count = environment->entry()->arguments_count() + 1;
-    if (environment->entry()->arguments_pushed()) {
-      *pushed_arguments_index = arguments_index;
-      *pushed_arguments_count = arguments_count;
-    }
-  }
-
   for (int i = 0; i < translation_size; ++i) {
     LOperand* value = environment->values()->at(i);
-    // spilled_registers_ and spilled_double_registers_ are either
-    // both NULL or both set.
-    if (environment->spilled_registers() != NULL && value != NULL) {
-      if (value->IsRegister() &&
-          environment->spilled_registers()[value->index()] != NULL) {
-        translation->MarkDuplicate();
+
+    // TODO(mstarzinger): Introduce marker operands to indicate that this value
+    // is not present and must be reconstructed from the deoptimizer. Currently
+    // this is only used for the arguments object.
+    if (value == NULL) {
+      int arguments_count = environment->values()->length() - translation_size;
+      translation->BeginArgumentsObject(arguments_count);
+      for (int i = 0; i < arguments_count; ++i) {
+        LOperand* value = environment->values()->at(translation_size + i);
         AddToTranslation(translation,
-                         environment->spilled_registers()[value->index()],
-                         environment->HasTaggedValueAt(i),
-                         environment->HasUint32ValueAt(i),
-                         arguments_known,
-                         arguments_index,
-                         arguments_count);
-      } else if (
-          value->IsDoubleRegister() &&
-          environment->spilled_double_registers()[value->index()] != NULL) {
-        translation->MarkDuplicate();
-        AddToTranslation(
-            translation,
-            environment->spilled_double_registers()[value->index()],
-            false,
-            false,
-            arguments_known,
-            arguments_index,
-            arguments_count);
+                         value,
+                         environment->HasTaggedValueAt(translation_size + i),
+                         environment->HasUint32ValueAt(translation_size + i));
       }
+      continue;
     }
 
     AddToTranslation(translation,
                      value,
                      environment->HasTaggedValueAt(i),
-                     environment->HasUint32ValueAt(i),
-                     arguments_known,
-                     arguments_index,
-                     arguments_count);
+                     environment->HasUint32ValueAt(i));
   }
 }
 
@@ -595,17 +539,8 @@ void LCodeGen::WriteTranslation(LEnvironment* environment,
 void LCodeGen::AddToTranslation(Translation* translation,
                                 LOperand* op,
                                 bool is_tagged,
-                                bool is_uint32,
-                                bool arguments_known,
-                                int arguments_index,
-                                int arguments_count) {
-  if (op == NULL) {
-    // TODO(twuerthinger): Introduce marker operands to indicate that this value
-    // is not present and must be reconstructed from the deoptimizer. Currently
-    // this is only used for the arguments object.
-    translation->StoreArgumentsObject(
-        arguments_known, arguments_index, arguments_count);
-  } else if (op->IsStackSlot()) {
+                                bool is_uint32) {
+  if (op->IsStackSlot()) {
     if (is_tagged) {
       translation->StoreStackSlot(op->index());
     } else if (is_uint32) {
@@ -710,8 +645,6 @@ void LCodeGen::RegisterEnvironmentForDeoptimization(LEnvironment* environment,
 
     int frame_count = 0;
     int jsframe_count = 0;
-    int args_index = 0;
-    int args_count = 0;
     for (LEnvironment* e = environment; e != NULL; e = e->outer()) {
       ++frame_count;
       if (e->frame_type() == JS_FUNCTION) {
@@ -719,7 +652,7 @@ void LCodeGen::RegisterEnvironmentForDeoptimization(LEnvironment* environment,
       }
     }
     Translation translation(&translations_, frame_count, jsframe_count, zone());
-    WriteTranslation(environment, &translation, &args_index, &args_count);
+    WriteTranslation(environment, &translation);
     int deoptimization_index = deoptimizations_.length();
     int pc_offset = masm()->pc_offset();
     environment->Register(deoptimization_index,
@@ -746,7 +679,7 @@ void LCodeGen::DeoptimizeIf(Condition cc,
 
   ASSERT(FLAG_deopt_every_n_times == 0);  // Not yet implemented on x64.
 
-  if (FLAG_trap_on_deopt) {
+  if (FLAG_trap_on_deopt && info()->IsOptimizing()) {
     Label done;
     if (cc != no_condition) {
       __ j(NegateCondition(cc), &done, Label::kNear);
@@ -1040,7 +973,8 @@ void LCodeGen::DoCallStub(LCallStub* instr) {
 
 
 void LCodeGen::DoUnknownOSRValue(LUnknownOSRValue* instr) {
-  // Nothing to do.
+  // Record the address of the first unknown OSR value as the place to enter.
+  if (osr_pc_offset_ == -1) osr_pc_offset_ = masm()->pc_offset();
 }
 
 
@@ -1074,12 +1008,12 @@ void LCodeGen::DoModI(LModI* instr) {
     __ andl(left_reg, Immediate(divisor - 1));
     __ bind(&done);
 
-  } else if (hmod->has_fixed_right_arg()) {
+  } else if (hmod->fixed_right_arg().has_value) {
     Register left_reg = ToRegister(instr->left());
     ASSERT(left_reg.is(ToRegister(instr->result())));
     Register right_reg = ToRegister(instr->right());
 
-    int32_t divisor = hmod->fixed_right_arg_value();
+    int32_t divisor = hmod->fixed_right_arg().value;
     ASSERT(IsPowerOf2(divisor));
 
     // Check if our assumption of a fixed right operand still holds.
@@ -1619,13 +1553,6 @@ void LCodeGen::DoConstantT(LConstantT* instr) {
 }
 
 
-void LCodeGen::DoFixedArrayBaseLength(LFixedArrayBaseLength* instr) {
-  Register result = ToRegister(instr->result());
-  Register array = ToRegister(instr->value());
-  __ movq(result, FieldOperand(array, FixedArrayBase::kLengthOffset));
-}
-
-
 void LCodeGen::DoMapEnumLength(LMapEnumLength* instr) {
   Register result = ToRegister(instr->result());
   Register map = ToRegister(instr->value());
@@ -1652,8 +1579,11 @@ void LCodeGen::DoValueOf(LValueOf* instr) {
   Register result = ToRegister(instr->result());
   ASSERT(input.is(result));
   Label done;
-  // If the object is a smi return the object.
-  __ JumpIfSmi(input, &done, Label::kNear);
+
+  if (!instr->hydrogen()->value()->IsHeapObject()) {
+    // If the object is a smi return the object.
+    __ JumpIfSmi(input, &done, Label::kNear);
+  }
 
   // If the object is not a value type, return the object.
   __ CmpObjectType(input, JS_VALUE_TYPE, kScratchRegister);
@@ -1757,10 +1687,11 @@ void LCodeGen::DoAddI(LAddI* instr) {
   if (LAddI::UseLea(instr->hydrogen()) && !left->Equals(instr->result())) {
     if (right->IsConstantOperand()) {
       int32_t offset = ToInteger32(LConstantOperand::cast(right));
-      __ lea(ToRegister(instr->result()), MemOperand(ToRegister(left), offset));
+      __ leal(ToRegister(instr->result()),
+              MemOperand(ToRegister(left), offset));
     } else {
       Operand address(ToRegister(left), ToRegister(right), times_1, 0);
-      __ lea(ToRegister(instr->result()), address);
+      __ leal(ToRegister(instr->result()), address);
     }
   } else {
     if (right->IsConstantOperand()) {
@@ -1901,10 +1832,12 @@ int LCodeGen::GetNextEmittedBlock() const {
 }
 
 
-void LCodeGen::EmitBranch(int left_block, int right_block, Condition cc) {
+template<class InstrType>
+void LCodeGen::EmitBranch(InstrType instr, Condition cc) {
+  int right_block = instr->FalseDestination(chunk_);
+  int left_block = instr->TrueDestination(chunk_);
+
   int next_block = GetNextEmittedBlock();
-  right_block = chunk_->LookupDestination(right_block);
-  left_block = chunk_->LookupDestination(left_block);
 
   if (right_block == left_block) {
     EmitGoto(left_block);
@@ -1927,26 +1860,23 @@ void LCodeGen::DoDebugBreak(LDebugBreak* instr) {
 
 
 void LCodeGen::DoBranch(LBranch* instr) {
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
   Representation r = instr->hydrogen()->value()->representation();
   if (r.IsInteger32()) {
     ASSERT(!info()->IsStub());
     Register reg = ToRegister(instr->value());
     __ testl(reg, reg);
-    EmitBranch(true_block, false_block, not_zero);
+    EmitBranch(instr, not_zero);
   } else if (r.IsSmi()) {
     ASSERT(!info()->IsStub());
     Register reg = ToRegister(instr->value());
     __ testq(reg, reg);
-    EmitBranch(true_block, false_block, not_zero);
+    EmitBranch(instr, not_zero);
   } else if (r.IsDouble()) {
     ASSERT(!info()->IsStub());
     XMMRegister reg = ToDoubleRegister(instr->value());
     __ xorps(xmm0, xmm0);
     __ ucomisd(reg, xmm0);
-    EmitBranch(true_block, false_block, not_equal);
+    EmitBranch(instr, not_equal);
   } else {
     ASSERT(r.IsTagged());
     Register reg = ToRegister(instr->value());
@@ -1954,43 +1884,52 @@ void LCodeGen::DoBranch(LBranch* instr) {
     if (type.IsBoolean()) {
       ASSERT(!info()->IsStub());
       __ CompareRoot(reg, Heap::kTrueValueRootIndex);
-      EmitBranch(true_block, false_block, equal);
+      EmitBranch(instr, equal);
     } else if (type.IsSmi()) {
       ASSERT(!info()->IsStub());
       __ SmiCompare(reg, Smi::FromInt(0));
-      EmitBranch(true_block, false_block, not_equal);
+      EmitBranch(instr, not_equal);
+    } else if (type.IsJSArray()) {
+      ASSERT(!info()->IsStub());
+      EmitBranch(instr, no_condition);
+    } else if (type.IsHeapNumber()) {
+      ASSERT(!info()->IsStub());
+      __ xorps(xmm0, xmm0);
+      __ ucomisd(xmm0, FieldOperand(reg, HeapNumber::kValueOffset));
+      EmitBranch(instr, not_equal);
+    } else if (type.IsString()) {
+      ASSERT(!info()->IsStub());
+      __ cmpq(FieldOperand(reg, String::kLengthOffset), Immediate(0));
+      EmitBranch(instr, not_equal);
     } else {
-      Label* true_label = chunk_->GetAssemblyLabel(true_block);
-      Label* false_label = chunk_->GetAssemblyLabel(false_block);
-
       ToBooleanStub::Types expected = instr->hydrogen()->expected_input_types();
       // Avoid deopts in the case where we've never executed this path before.
-      if (expected.IsEmpty()) expected = ToBooleanStub::all_types();
+      if (expected.IsEmpty()) expected = ToBooleanStub::Types::Generic();
 
       if (expected.Contains(ToBooleanStub::UNDEFINED)) {
         // undefined -> false.
         __ CompareRoot(reg, Heap::kUndefinedValueRootIndex);
-        __ j(equal, false_label);
+        __ j(equal, instr->FalseLabel(chunk_));
       }
       if (expected.Contains(ToBooleanStub::BOOLEAN)) {
         // true -> true.
         __ CompareRoot(reg, Heap::kTrueValueRootIndex);
-        __ j(equal, true_label);
+        __ j(equal, instr->TrueLabel(chunk_));
         // false -> false.
         __ CompareRoot(reg, Heap::kFalseValueRootIndex);
-        __ j(equal, false_label);
+        __ j(equal, instr->FalseLabel(chunk_));
       }
       if (expected.Contains(ToBooleanStub::NULL_TYPE)) {
         // 'null' -> false.
         __ CompareRoot(reg, Heap::kNullValueRootIndex);
-        __ j(equal, false_label);
+        __ j(equal, instr->FalseLabel(chunk_));
       }
 
       if (expected.Contains(ToBooleanStub::SMI)) {
         // Smis: 0 -> false, all other -> true.
         __ Cmp(reg, Smi::FromInt(0));
-        __ j(equal, false_label);
-        __ JumpIfSmi(reg, true_label);
+        __ j(equal, instr->FalseLabel(chunk_));
+        __ JumpIfSmi(reg, instr->TrueLabel(chunk_));
       } else if (expected.NeedsMap()) {
         // If we need a map later and have a Smi -> deopt.
         __ testb(reg, Immediate(kSmiTagMask));
@@ -2005,14 +1944,14 @@ void LCodeGen::DoBranch(LBranch* instr) {
           // Undetectable -> false.
           __ testb(FieldOperand(map, Map::kBitFieldOffset),
                    Immediate(1 << Map::kIsUndetectable));
-          __ j(not_zero, false_label);
+          __ j(not_zero, instr->FalseLabel(chunk_));
         }
       }
 
       if (expected.Contains(ToBooleanStub::SPEC_OBJECT)) {
         // spec object -> true.
         __ CmpInstanceType(map, FIRST_SPEC_OBJECT_TYPE);
-        __ j(above_equal, true_label);
+        __ j(above_equal, instr->TrueLabel(chunk_));
       }
 
       if (expected.Contains(ToBooleanStub::STRING)) {
@@ -2021,8 +1960,8 @@ void LCodeGen::DoBranch(LBranch* instr) {
         __ CmpInstanceType(map, FIRST_NONSTRING_TYPE);
         __ j(above_equal, &not_string, Label::kNear);
         __ cmpq(FieldOperand(reg, String::kLengthOffset), Immediate(0));
-        __ j(not_zero, true_label);
-        __ jmp(false_label);
+        __ j(not_zero, instr->TrueLabel(chunk_));
+        __ jmp(instr->FalseLabel(chunk_));
         __ bind(&not_string);
       }
 
@@ -2033,13 +1972,16 @@ void LCodeGen::DoBranch(LBranch* instr) {
         __ j(not_equal, &not_heap_number, Label::kNear);
         __ xorps(xmm0, xmm0);
         __ ucomisd(xmm0, FieldOperand(reg, HeapNumber::kValueOffset));
-        __ j(zero, false_label);
-        __ jmp(true_label);
+        __ j(zero, instr->FalseLabel(chunk_));
+        __ jmp(instr->TrueLabel(chunk_));
         __ bind(&not_heap_number);
       }
 
-      // We've seen something for the first time -> deopt.
-      DeoptimizeIf(no_condition, instr->environment());
+      if (!expected.IsGeneric()) {
+        // We've seen something for the first time -> deopt.
+        // This can only happen if we are not generic already.
+        DeoptimizeIf(no_condition, instr->environment());
+      }
     }
   }
 }
@@ -2088,24 +2030,21 @@ inline Condition LCodeGen::TokenToCondition(Token::Value op, bool is_unsigned) {
 void LCodeGen::DoCmpIDAndBranch(LCmpIDAndBranch* instr) {
   LOperand* left = instr->left();
   LOperand* right = instr->right();
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
   Condition cc = TokenToCondition(instr->op(), instr->is_double());
 
   if (left->IsConstantOperand() && right->IsConstantOperand()) {
     // We can statically evaluate the comparison.
     double left_val = ToDouble(LConstantOperand::cast(left));
     double right_val = ToDouble(LConstantOperand::cast(right));
-    int next_block =
-      EvalComparison(instr->op(), left_val, right_val) ? true_block
-                                                       : false_block;
+    int next_block = EvalComparison(instr->op(), left_val, right_val) ?
+        instr->TrueDestination(chunk_) : instr->FalseDestination(chunk_);
     EmitGoto(next_block);
   } else {
     if (instr->is_double()) {
       // Don't base result on EFLAGS when a NaN is involved. Instead
       // jump to the false block.
       __ ucomisd(ToDoubleRegister(left), ToDoubleRegister(right));
-      __ j(parity_even, chunk_->GetAssemblyLabel(false_block));
+      __ j(parity_even, instr->FalseLabel(chunk_));
     } else {
       int32_t value;
       if (right->IsConstantOperand()) {
@@ -2144,15 +2083,13 @@ void LCodeGen::DoCmpIDAndBranch(LCmpIDAndBranch* instr) {
         }
       }
     }
-    EmitBranch(true_block, false_block, cc);
+    EmitBranch(instr, cc);
   }
 }
 
 
 void LCodeGen::DoCmpObjectEqAndBranch(LCmpObjectEqAndBranch* instr) {
   Register left = ToRegister(instr->left());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
 
   if (instr->right()->IsConstantOperand()) {
     Handle<Object> right = ToHandle(LConstantOperand::cast(instr->right()));
@@ -2161,17 +2098,15 @@ void LCodeGen::DoCmpObjectEqAndBranch(LCmpObjectEqAndBranch* instr) {
     Register right = ToRegister(instr->right());
     __ cmpq(left, right);
   }
-  EmitBranch(true_block, false_block, equal);
+  EmitBranch(instr, equal);
 }
 
 
 void LCodeGen::DoCmpConstantEqAndBranch(LCmpConstantEqAndBranch* instr) {
   Register left = ToRegister(instr->left());
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
 
   __ cmpq(left, Immediate(instr->hydrogen()->right()));
-  EmitBranch(true_block, false_block, equal);
+  EmitBranch(instr, equal);
 }
 
 
@@ -2203,21 +2138,21 @@ Condition LCodeGen::EmitIsObject(Register input,
 void LCodeGen::DoIsObjectAndBranch(LIsObjectAndBranch* instr) {
   Register reg = ToRegister(instr->value());
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-  Label* true_label = chunk_->GetAssemblyLabel(true_block);
-  Label* false_label = chunk_->GetAssemblyLabel(false_block);
+  Condition true_cond = EmitIsObject(
+      reg, instr->FalseLabel(chunk_), instr->TrueLabel(chunk_));
 
-  Condition true_cond = EmitIsObject(reg, false_label, true_label);
-
-  EmitBranch(true_block, false_block, true_cond);
+  EmitBranch(instr, true_cond);
 }
 
 
 Condition LCodeGen::EmitIsString(Register input,
                                  Register temp1,
-                                 Label* is_not_string) {
-  __ JumpIfSmi(input, is_not_string);
+                                 Label* is_not_string,
+                                 SmiCheck check_needed = INLINE_SMI_CHECK) {
+  if (check_needed == INLINE_SMI_CHECK) {
+    __ JumpIfSmi(input, is_not_string);
+  }
+
   Condition cond =  masm_->IsObjectStringType(input, temp1, temp1);
 
   return cond;
@@ -2228,20 +2163,18 @@ void LCodeGen::DoIsStringAndBranch(LIsStringAndBranch* instr) {
   Register reg = ToRegister(instr->value());
   Register temp = ToRegister(instr->temp());
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-  Label* false_label = chunk_->GetAssemblyLabel(false_block);
+  SmiCheck check_needed =
+      instr->hydrogen()->value()->IsHeapObject()
+          ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
 
-  Condition true_cond = EmitIsString(reg, temp, false_label);
+  Condition true_cond = EmitIsString(
+      reg, temp, instr->FalseLabel(chunk_), check_needed);
 
-  EmitBranch(true_block, false_block, true_cond);
+  EmitBranch(instr, true_cond);
 }
 
 
 void LCodeGen::DoIsSmiAndBranch(LIsSmiAndBranch* instr) {
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
   Condition is_smi;
   if (instr->value()->IsRegister()) {
     Register input = ToRegister(instr->value());
@@ -2250,7 +2183,7 @@ void LCodeGen::DoIsSmiAndBranch(LIsSmiAndBranch* instr) {
     Operand input = ToOperand(instr->value());
     is_smi = masm()->CheckSmi(input);
   }
-  EmitBranch(true_block, false_block, is_smi);
+  EmitBranch(instr, is_smi);
 }
 
 
@@ -2258,21 +2191,18 @@ void LCodeGen::DoIsUndetectableAndBranch(LIsUndetectableAndBranch* instr) {
   Register input = ToRegister(instr->value());
   Register temp = ToRegister(instr->temp());
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
-  __ JumpIfSmi(input, chunk_->GetAssemblyLabel(false_block));
+  if (!instr->hydrogen()->value()->IsHeapObject()) {
+    __ JumpIfSmi(input, instr->FalseLabel(chunk_));
+  }
   __ movq(temp, FieldOperand(input, HeapObject::kMapOffset));
   __ testb(FieldOperand(temp, Map::kBitFieldOffset),
            Immediate(1 << Map::kIsUndetectable));
-  EmitBranch(true_block, false_block, not_zero);
+  EmitBranch(instr, not_zero);
 }
 
 
 void LCodeGen::DoStringCompareAndBranch(LStringCompareAndBranch* instr) {
   Token::Value op = instr->op();
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
 
   Handle<Code> ic = CompareIC::GetUninitialized(isolate(), op);
   CallCode(ic, RelocInfo::CODE_TARGET, instr);
@@ -2280,7 +2210,7 @@ void LCodeGen::DoStringCompareAndBranch(LStringCompareAndBranch* instr) {
   Condition condition = TokenToCondition(op, false);
   __ testq(rax, rax);
 
-  EmitBranch(true_block, false_block, condition);
+  EmitBranch(instr, condition);
 }
 
 
@@ -2307,15 +2237,12 @@ static Condition BranchCondition(HHasInstanceTypeAndBranch* instr) {
 void LCodeGen::DoHasInstanceTypeAndBranch(LHasInstanceTypeAndBranch* instr) {
   Register input = ToRegister(instr->value());
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
-  Label* false_label = chunk_->GetAssemblyLabel(false_block);
-
-  __ JumpIfSmi(input, false_label);
+  if (!instr->hydrogen()->value()->IsHeapObject()) {
+    __ JumpIfSmi(input, instr->FalseLabel(chunk_));
+  }
 
   __ CmpObjectType(input, TestType(instr->hydrogen()), kScratchRegister);
-  EmitBranch(true_block, false_block, BranchCondition(instr->hydrogen()));
+  EmitBranch(instr, BranchCondition(instr->hydrogen()));
 }
 
 
@@ -2335,12 +2262,9 @@ void LCodeGen::DoHasCachedArrayIndexAndBranch(
     LHasCachedArrayIndexAndBranch* instr) {
   Register input = ToRegister(instr->value());
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-
   __ testl(FieldOperand(input, String::kHashFieldOffset),
            Immediate(String::kContainsCachedArrayIndexMask));
-  EmitBranch(true_block, false_block, equal);
+  EmitBranch(instr, equal);
 }
 
 
@@ -2418,25 +2342,18 @@ void LCodeGen::DoClassOfTestAndBranch(LClassOfTestAndBranch* instr) {
   Register temp2 = ToRegister(instr->temp2());
   Handle<String> class_name = instr->hydrogen()->class_name();
 
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
+  EmitClassOfTest(instr->TrueLabel(chunk_), instr->FalseLabel(chunk_),
+      class_name, input, temp, temp2);
 
-  Label* true_label = chunk_->GetAssemblyLabel(true_block);
-  Label* false_label = chunk_->GetAssemblyLabel(false_block);
-
-  EmitClassOfTest(true_label, false_label, class_name, input, temp, temp2);
-
-  EmitBranch(true_block, false_block, equal);
+  EmitBranch(instr, equal);
 }
 
 
 void LCodeGen::DoCmpMapAndBranch(LCmpMapAndBranch* instr) {
   Register reg = ToRegister(instr->value());
-  int true_block = instr->true_block_id();
-  int false_block = instr->false_block_id();
 
   __ Cmp(FieldOperand(reg, HeapObject::kMapOffset), instr->map());
-  EmitBranch(true_block, false_block, equal);
+  EmitBranch(instr, equal);
 }
 
 
@@ -2490,9 +2407,8 @@ void LCodeGen::DoInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr) {
   Register map = ToRegister(instr->temp());
   __ movq(map, FieldOperand(object, HeapObject::kMapOffset));
   __ bind(deferred->map_check());  // Label for calculating code patching.
-  Handle<JSGlobalPropertyCell> cache_cell =
-      factory()->NewJSGlobalPropertyCell(factory()->the_hole_value());
-  __ movq(kScratchRegister, cache_cell, RelocInfo::GLOBAL_PROPERTY_CELL);
+  Handle<Cell> cache_cell = factory()->NewCell(factory()->the_hole_value());
+  __ movq(kScratchRegister, cache_cell, RelocInfo::CELL);
   __ cmpq(map, Operand(kScratchRegister, 0));
   __ j(not_equal, &cache_miss, Label::kNear);
   // Patched to load either true or false.
@@ -2661,7 +2577,7 @@ void LCodeGen::DoLoadGlobalGeneric(LLoadGlobalGeneric* instr) {
 
 void LCodeGen::DoStoreGlobalCell(LStoreGlobalCell* instr) {
   Register value = ToRegister(instr->value());
-  Handle<JSGlobalPropertyCell> cell_handle = instr->hydrogen()->cell();
+  Handle<Cell> cell_handle = instr->hydrogen()->cell();
 
   // If the cell we are storing to contains the hole it could have
   // been deleted from the property dictionary. In that case, we need
@@ -2671,14 +2587,14 @@ void LCodeGen::DoStoreGlobalCell(LStoreGlobalCell* instr) {
     // We have a temp because CompareRoot might clobber kScratchRegister.
     Register cell = ToRegister(instr->temp());
     ASSERT(!value.is(cell));
-    __ movq(cell, cell_handle, RelocInfo::GLOBAL_PROPERTY_CELL);
+    __ movq(cell, cell_handle, RelocInfo::CELL);
     __ CompareRoot(Operand(cell, 0), Heap::kTheHoleValueRootIndex);
     DeoptimizeIf(equal, instr->environment());
     // Store the value.
     __ movq(Operand(cell, 0), value);
   } else {
     // Store the value.
-    __ movq(kScratchRegister, cell_handle, RelocInfo::GLOBAL_PROPERTY_CELL);
+    __ movq(kScratchRegister, cell_handle, RelocInfo::CELL);
     __ movq(Operand(kScratchRegister, 0), value);
   }
   // Cells are always rescanned, so no write barrier here.
@@ -2733,9 +2649,9 @@ void LCodeGen::DoStoreContextSlot(LStoreContextSlot* instr) {
   __ movq(target, value);
 
   if (instr->hydrogen()->NeedsWriteBarrier()) {
-    HType type = instr->hydrogen()->value()->type();
     SmiCheck check_needed =
-        type.IsHeapObject() ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
+      instr->hydrogen()->value()->IsHeapObject()
+          ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
     int offset = Context::SlotOffset(instr->slot_index());
     Register scratch = ToRegister(instr->temp());
     __ RecordWriteContextSlot(context,
@@ -3939,11 +3855,9 @@ void LCodeGen::DoCallNew(LCallNew* instr) {
   ASSERT(ToRegister(instr->result()).is(rax));
 
   __ Set(rax, instr->arity());
-  if (FLAG_optimize_constructed_arrays) {
-    // No cell in ebx for construct type feedback in optimized code
-    Handle<Object> undefined_value(isolate()->factory()->undefined_value());
-    __ Move(rbx, undefined_value);
-  }
+  // No cell in ebx for construct type feedback in optimized code
+  Handle<Object> undefined_value(isolate()->factory()->undefined_value());
+  __ Move(rbx, undefined_value);
   CallConstructStub stub(NO_CALL_FUNCTION_FLAGS);
   CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
 }
@@ -3952,22 +3866,42 @@ void LCodeGen::DoCallNew(LCallNew* instr) {
 void LCodeGen::DoCallNewArray(LCallNewArray* instr) {
   ASSERT(ToRegister(instr->constructor()).is(rdi));
   ASSERT(ToRegister(instr->result()).is(rax));
-  ASSERT(FLAG_optimize_constructed_arrays);
 
   __ Set(rax, instr->arity());
   __ Move(rbx, instr->hydrogen()->property_cell());
   ElementsKind kind = instr->hydrogen()->elements_kind();
-  bool disable_allocation_sites =
-      (AllocationSiteInfo::GetMode(kind) == TRACK_ALLOCATION_SITE);
+  AllocationSiteOverrideMode override_mode =
+      (AllocationSiteInfo::GetMode(kind) == TRACK_ALLOCATION_SITE)
+          ? DISABLE_ALLOCATION_SITES
+          : DONT_OVERRIDE;
+  ContextCheckMode context_mode = CONTEXT_CHECK_NOT_REQUIRED;
 
   if (instr->arity() == 0) {
-    ArrayNoArgumentConstructorStub stub(kind, disable_allocation_sites);
+    ArrayNoArgumentConstructorStub stub(kind, context_mode, override_mode);
     CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
   } else if (instr->arity() == 1) {
-    ArraySingleArgumentConstructorStub stub(kind, disable_allocation_sites);
+    Label done;
+    if (IsFastPackedElementsKind(kind)) {
+      Label packed_case;
+      // We might need a change here
+      // look at the first argument
+      __ movq(rcx, Operand(rsp, 0));
+      __ testq(rcx, rcx);
+      __ j(zero, &packed_case);
+
+      ElementsKind holey_kind = GetHoleyElementsKind(kind);
+      ArraySingleArgumentConstructorStub stub(holey_kind, context_mode,
+                                              override_mode);
+      CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
+      __ jmp(&done);
+      __ bind(&packed_case);
+    }
+
+    ArraySingleArgumentConstructorStub stub(kind, context_mode, override_mode);
     CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
+    __ bind(&done);
   } else {
-    ArrayNArgumentsConstructorStub stub(kind, disable_allocation_sites);
+    ArrayNArgumentsConstructorStub stub(kind, context_mode, override_mode);
     CallCode(stub.GetCode(isolate()), RelocInfo::CONSTRUCT_CALL, instr);
   }
 }
@@ -4025,9 +3959,6 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
   }
 
   if (!transition.is_null()) {
-    if (transition->CanBeDeprecated()) {
-      transition_maps_.Add(transition, info()->zone());
-    }
     if (!instr->hydrogen()->NeedsWriteBarrierForMap()) {
       __ Move(FieldOperand(object, HeapObject::kMapOffset), transition);
     } else {
@@ -4046,9 +3977,9 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
   }
 
   // Do the store.
-  HType type = instr->hydrogen()->value()->type();
   SmiCheck check_needed =
-      type.IsHeapObject() ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
+      instr->hydrogen()->value()->IsHeapObject()
+          ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
 
   Register write_register = object;
   if (!access.IsInobject()) {
@@ -4287,9 +4218,9 @@ void LCodeGen::DoStoreKeyedFixedArray(LStoreKeyed* instr) {
     ASSERT(instr->value()->IsRegister());
     Register value = ToRegister(instr->value());
     ASSERT(!instr->key()->IsConstantOperand());
-    HType type = instr->hydrogen()->value()->type();
     SmiCheck check_needed =
-        type.IsHeapObject() ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
+        instr->hydrogen()->value()->IsHeapObject()
+            ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
     // Compute address of modified element and store it into key register.
     Register key_reg(ToRegister(key));
     __ lea(key_reg, operand);
@@ -4955,9 +4886,11 @@ void LCodeGen::DoCheckSmi(LCheckSmi* instr) {
 
 
 void LCodeGen::DoCheckNonSmi(LCheckNonSmi* instr) {
-  LOperand* input = instr->value();
-  Condition cc = masm()->CheckSmi(ToRegister(input));
-  DeoptimizeIf(cc, instr->environment());
+  if (!instr->hydrogen()->value()->IsHeapObject()) {
+    LOperand* input = instr->value();
+    Condition cc = masm()->CheckSmi(ToRegister(input));
+    DeoptimizeIf(cc, instr->environment());
+  }
 }
 
 
@@ -5100,11 +5033,7 @@ void LCodeGen::DoCheckPrototypeMaps(LCheckPrototypeMaps* instr) {
 
   ASSERT(prototypes->length() == maps->length());
 
-  if (instr->hydrogen()->CanOmitPrototypeChecks()) {
-    for (int i = 0; i < maps->length(); i++) {
-      prototype_maps_.Add(maps->at(i), info()->zone());
-    }
-  } else {
+  if (!instr->hydrogen()->CanOmitPrototypeChecks()) {
     for (int i = 0; i < prototypes->length(); i++) {
       __ LoadHeapObject(reg, prototypes->at(i));
       DoCheckMapCommon(reg, maps->at(i), instr);
@@ -5113,6 +5042,94 @@ void LCodeGen::DoCheckPrototypeMaps(LCheckPrototypeMaps* instr) {
 }
 
 
+void LCodeGen::DoAllocateObject(LAllocateObject* instr) {
+  class DeferredAllocateObject: public LDeferredCode {
+   public:
+    DeferredAllocateObject(LCodeGen* codegen, LAllocateObject* instr)
+        : LDeferredCode(codegen), instr_(instr) { }
+    virtual void Generate() { codegen()->DoDeferredAllocateObject(instr_); }
+    virtual LInstruction* instr() { return instr_; }
+   private:
+    LAllocateObject* instr_;
+  };
+
+  DeferredAllocateObject* deferred =
+      new(zone()) DeferredAllocateObject(this, instr);
+
+  Register result = ToRegister(instr->result());
+  Register scratch = ToRegister(instr->temp());
+  Handle<JSFunction> constructor = instr->hydrogen()->constructor();
+  Handle<Map> initial_map = instr->hydrogen()->constructor_initial_map();
+  int instance_size = initial_map->instance_size();
+  ASSERT(initial_map->pre_allocated_property_fields() +
+         initial_map->unused_property_fields() -
+         initial_map->inobject_properties() == 0);
+
+  __ Allocate(instance_size, result, no_reg, scratch, deferred->entry(),
+              TAG_OBJECT);
+
+  __ bind(deferred->exit());
+  if (FLAG_debug_code) {
+    Label is_in_new_space;
+    __ JumpIfInNewSpace(result, scratch, &is_in_new_space);
+    __ Abort("Allocated object is not in new-space");
+    __ bind(&is_in_new_space);
+  }
+
+  // Load the initial map.
+  Register map = scratch;
+  __ LoadHeapObject(scratch, constructor);
+  __ movq(map, FieldOperand(scratch, JSFunction::kPrototypeOrInitialMapOffset));
+
+  if (FLAG_debug_code) {
+    __ AssertNotSmi(map);
+    __ cmpb(FieldOperand(map, Map::kInstanceSizeOffset),
+            Immediate(instance_size >> kPointerSizeLog2));
+    __ Assert(equal, "Unexpected instance size");
+    __ cmpb(FieldOperand(map, Map::kPreAllocatedPropertyFieldsOffset),
+            Immediate(initial_map->pre_allocated_property_fields()));
+    __ Assert(equal, "Unexpected pre-allocated property fields count");
+    __ cmpb(FieldOperand(map, Map::kUnusedPropertyFieldsOffset),
+            Immediate(initial_map->unused_property_fields()));
+    __ Assert(equal, "Unexpected unused property fields count");
+    __ cmpb(FieldOperand(map, Map::kInObjectPropertiesOffset),
+            Immediate(initial_map->inobject_properties()));
+    __ Assert(equal, "Unexpected in-object property fields count");
+  }
+
+  // Initialize map and fields of the newly allocated object.
+  ASSERT(initial_map->instance_type() == JS_OBJECT_TYPE);
+  __ movq(FieldOperand(result, JSObject::kMapOffset), map);
+  __ LoadRoot(scratch, Heap::kEmptyFixedArrayRootIndex);
+  __ movq(FieldOperand(result, JSObject::kElementsOffset), scratch);
+  __ movq(FieldOperand(result, JSObject::kPropertiesOffset), scratch);
+  if (initial_map->inobject_properties() != 0) {
+    __ LoadRoot(scratch, Heap::kUndefinedValueRootIndex);
+    for (int i = 0; i < initial_map->inobject_properties(); i++) {
+      int property_offset = JSObject::kHeaderSize + i * kPointerSize;
+      __ movq(FieldOperand(result, property_offset), scratch);
+    }
+  }
+}
+
+
+void LCodeGen::DoDeferredAllocateObject(LAllocateObject* instr) {
+  Register result = ToRegister(instr->result());
+  Handle<Map> initial_map = instr->hydrogen()->constructor_initial_map();
+  int instance_size = initial_map->instance_size();
+
+  // TODO(3095996): Get rid of this. For now, we need to make the
+  // result register contain a valid pointer because it is already
+  // contained in the register pointer map.
+  __ Set(result, 0);
+
+  PushSafepointRegistersScope scope(this);
+  __ Push(Smi::FromInt(instance_size));
+  CallRuntimeFromDeferred(Runtime::kAllocateInNewSpace, 1, instr);
+  __ StoreToSafepointRegisterSlot(result, rax);
+}
+
+
 void LCodeGen::DoAllocate(LAllocate* instr) {
   class DeferredAllocate: public LDeferredCode {
    public:
@@ -5288,15 +5305,12 @@ void LCodeGen::EmitPushTaggedOperand(LOperand* operand) {
 
 void LCodeGen::DoTypeofIsAndBranch(LTypeofIsAndBranch* instr) {
   Register input = ToRegister(instr->value());
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
-  Label* true_label = chunk_->GetAssemblyLabel(true_block);
-  Label* false_label = chunk_->GetAssemblyLabel(false_block);
 
   Condition final_branch_condition =
-      EmitTypeofIs(true_label, false_label, input, instr->type_literal());
+      EmitTypeofIs(instr->TrueLabel(chunk_),
+          instr->FalseLabel(chunk_), input, instr->type_literal());
   if (final_branch_condition != no_condition) {
-    EmitBranch(true_block, false_block, final_branch_condition);
+    EmitBranch(instr, final_branch_condition);
   }
 }
 
@@ -5379,11 +5393,9 @@ Condition LCodeGen::EmitTypeofIs(Label* true_label,
 
 void LCodeGen::DoIsConstructCallAndBranch(LIsConstructCallAndBranch* instr) {
   Register temp = ToRegister(instr->temp());
-  int true_block = chunk_->LookupDestination(instr->true_block_id());
-  int false_block = chunk_->LookupDestination(instr->false_block_id());
 
   EmitIsConstructCall(temp);
-  EmitBranch(true_block, false_block, equal);
+  EmitBranch(instr, equal);
 }
 
 
@@ -5535,15 +5547,15 @@ void LCodeGen::DoOsrEntry(LOsrEntry* instr) {
   // properly registered for deoptimization and records the assembler's PC
   // offset.
   LEnvironment* environment = instr->environment();
-  environment->SetSpilledRegisters(instr->SpilledRegisterArray(),
-                                   instr->SpilledDoubleRegisterArray());
 
   // If the environment were already registered, we would have no way of
   // backpatching it with the spill slot operands.
   ASSERT(!environment->HasBeenRegistered());
   RegisterEnvironmentForDeoptimization(environment, Safepoint::kNoLazyDeopt);
-  ASSERT(osr_pc_offset_ == -1);
-  osr_pc_offset_ = masm()->pc_offset();
+
+  // Normally we record the first unknown OSR value as the entrypoint to the OSR
+  // code, but if there were none, record the entrypoint here.
+  if (osr_pc_offset_ == -1) osr_pc_offset_ = masm()->pc_offset();
 }
 
 
index 07a948c..c89ec1f 100644 (file)
@@ -57,8 +57,6 @@ class LCodeGen BASE_EMBEDDED {
         deoptimizations_(4, info->zone()),
         jump_table_(4, info->zone()),
         deoptimization_literals_(8, info->zone()),
-        prototype_maps_(0, info->zone()),
-        transition_maps_(0, info->zone()),
         inlined_function_count_(0),
         scope_(info->scope()),
         status_(UNUSED),
@@ -81,7 +79,6 @@ class LCodeGen BASE_EMBEDDED {
   Heap* heap() const { return isolate()->heap(); }
   Zone* zone() const { return zone_; }
 
-  // TODO(svenpanne) Use this consistently.
   int LookupDestination(int block_id) const {
     return chunk()->LookupDestination(block_id);
   }
@@ -130,6 +127,7 @@ class LCodeGen BASE_EMBEDDED {
   void DoDeferredRandom(LRandom* instr);
   void DoDeferredStringCharCodeAt(LStringCharCodeAt* instr);
   void DoDeferredStringCharFromCode(LStringCharFromCode* instr);
+  void DoDeferredAllocateObject(LAllocateObject* instr);
   void DoDeferredAllocate(LAllocate* instr);
   void DoDeferredInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr,
                                        Label* map_check);
@@ -141,10 +139,7 @@ class LCodeGen BASE_EMBEDDED {
   void DoGap(LGap* instr);
 
   // Emit frame translation commands for an environment.
-  void WriteTranslation(LEnvironment* environment,
-                        Translation* translation,
-                        int* arguments_index,
-                        int* arguments_count);
+  void WriteTranslation(LEnvironment* environment, Translation* translation);
 
   // Declare methods that deal with the individual node types.
 #define DECLARE_DO(type) void Do##type(L##type* node);
@@ -255,10 +250,7 @@ class LCodeGen BASE_EMBEDDED {
   void AddToTranslation(Translation* translation,
                         LOperand* op,
                         bool is_tagged,
-                        bool is_uint32,
-                        bool arguments_known,
-                        int arguments_index,
-                        int arguments_count);
+                        bool is_uint32);
   void RegisterDependentCodeForEmbeddedMaps(Handle<Code> code);
   void PopulateDeoptimizationData(Handle<Code> code);
   int DefineDeoptimizationLiteral(Handle<Object> literal);
@@ -290,7 +282,8 @@ class LCodeGen BASE_EMBEDDED {
 
   static Condition TokenToCondition(Token::Value op, bool is_unsigned);
   void EmitGoto(int block);
-  void EmitBranch(int left_block, int right_block, Condition cc);
+  template<class InstrType>
+  void EmitBranch(InstrType instr, Condition cc);
   void EmitNumberUntagD(
       Register input,
       XMMRegister result,
@@ -319,7 +312,8 @@ class LCodeGen BASE_EMBEDDED {
   // true and false label should be made, to optimize fallthrough.
   Condition EmitIsString(Register input,
                          Register temp1,
-                         Label* is_not_string);
+                         Label* is_not_string,
+                         SmiCheck check_needed);
 
   // Emits optimized code for %_IsConstructCall().
   // Caller should branch on equal condition.
@@ -362,8 +356,6 @@ class LCodeGen BASE_EMBEDDED {
   ZoneList<LEnvironment*> deoptimizations_;
   ZoneList<Deoptimizer::JumpTableEntry> jump_table_;
   ZoneList<Handle<Object> > deoptimization_literals_;
-  ZoneList<Handle<Map> > prototype_maps_;
-  ZoneList<Handle<Map> > transition_maps_;
   int inlined_function_count_;
   Scope* const scope_;
   Status status_;
index fd74e0a..aed4f36 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_X64)
+#if V8_TARGET_ARCH_X64
 
 #include "x64/lithium-gap-resolver-x64.h"
 #include "x64/lithium-codegen-x64.h"
index cb0659d..95a44f0 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_X64)
+#if V8_TARGET_ARCH_X64
 
 #include "lithium-allocator-inl.h"
 #include "x64/lithium-x64.h"
@@ -43,31 +43,6 @@ namespace internal {
 LITHIUM_CONCRETE_INSTRUCTION_LIST(DEFINE_COMPILE)
 #undef DEFINE_COMPILE
 
-LOsrEntry::LOsrEntry() {
-  for (int i = 0; i < Register::NumAllocatableRegisters(); ++i) {
-    register_spills_[i] = NULL;
-  }
-  for (int i = 0; i < DoubleRegister::NumAllocatableRegisters(); ++i) {
-    double_register_spills_[i] = NULL;
-  }
-}
-
-
-void LOsrEntry::MarkSpilledRegister(int allocation_index,
-                                    LOperand* spill_operand) {
-  ASSERT(spill_operand->IsStackSlot());
-  ASSERT(register_spills_[allocation_index] == NULL);
-  register_spills_[allocation_index] = spill_operand;
-}
-
-
-void LOsrEntry::MarkSpilledDoubleRegister(int allocation_index,
-                                          LOperand* spill_operand) {
-  ASSERT(spill_operand->IsDoubleStackSlot());
-  ASSERT(double_register_spills_[allocation_index] == NULL);
-  double_register_spills_[allocation_index] = spill_operand;
-}
-
 
 #ifdef DEBUG
 void LInstruction::VerifyCall() {
@@ -354,8 +329,7 @@ void LCallNewArray::PrintDataTo(StringStream* stream) {
   constructor()->PrintTo(stream);
   stream->Add(" #%d / ", arity());
   ASSERT(hydrogen()->property_cell()->value()->IsSmi());
-  ElementsKind kind = static_cast<ElementsKind>(
-      Smi::cast(hydrogen()->property_cell()->value())->value());
+  ElementsKind kind = hydrogen()->elements_kind();
   stream->Add(" (%s) ", ElementsKindToString(kind));
 }
 
@@ -456,7 +430,7 @@ void LTransitionElementsKind::PrintDataTo(StringStream* stream) {
 LPlatformChunk* LChunkBuilder::Build() {
   ASSERT(is_unused());
   chunk_ = new(zone()) LPlatformChunk(info(), graph());
-  HPhase phase("L_Building chunk", chunk_);
+  LPhase phase("L_Building chunk", chunk_);
   status_ = BUILDING;
   const ZoneList<HBasicBlock*>* blocks = graph()->blocks();
   for (int i = 0; i < blocks->length(); i++) {
@@ -937,7 +911,7 @@ LEnvironment* LChunkBuilder::CreateEnvironment(
   BailoutId ast_id = hydrogen_env->ast_id();
   ASSERT(!ast_id.IsNone() ||
          hydrogen_env->frame_type() != JS_FUNCTION);
-  int value_count = hydrogen_env->length();
+  int value_count = hydrogen_env->length() - hydrogen_env->specials_count();
   LEnvironment* result = new(zone()) LEnvironment(
       hydrogen_env->closure(),
       hydrogen_env->frame_type(),
@@ -948,13 +922,15 @@ LEnvironment* LChunkBuilder::CreateEnvironment(
       outer,
       hydrogen_env->entry(),
       zone());
+  bool needs_arguments_object_materialization = false;
   int argument_index = *argument_index_accumulator;
-  for (int i = 0; i < value_count; ++i) {
+  for (int i = 0; i < hydrogen_env->length(); ++i) {
     if (hydrogen_env->is_special_index(i)) continue;
 
     HValue* value = hydrogen_env->values()->at(i);
     LOperand* op = NULL;
     if (value->IsArgumentsObject()) {
+      needs_arguments_object_materialization = true;
       op = NULL;
     } else if (value->IsPushArgument()) {
       op = new(zone()) LArgument(argument_index++);
@@ -966,6 +942,21 @@ LEnvironment* LChunkBuilder::CreateEnvironment(
                      value->CheckFlag(HInstruction::kUint32));
   }
 
+  if (needs_arguments_object_materialization) {
+    HArgumentsObject* arguments = hydrogen_env->entry() == NULL
+        ? graph()->GetArgumentsObject()
+        : hydrogen_env->entry()->arguments_object();
+    ASSERT(arguments->IsLinked());
+    for (int i = 1; i < arguments->arguments_count(); ++i) {
+      HValue* value = arguments->arguments_values()->at(i);
+      ASSERT(!value->IsArgumentsObject() && !value->IsPushArgument());
+      LOperand* op = UseAny(value);
+      result->AddValue(op,
+                       value->representation(),
+                       value->CheckFlag(HInstruction::kUint32));
+    }
+  }
+
   if (hydrogen_env->frame_type() == JS_FUNCTION) {
     *argument_index_accumulator = argument_index;
   }
@@ -997,10 +988,13 @@ LInstruction* LChunkBuilder::DoBranch(HBranch* instr) {
 
   LBranch* result = new(zone()) LBranch(UseRegister(value));
   // Tagged values that are not known smis or booleans require a
-  // deoptimization environment.
+  // deoptimization environment. If the instruction is generic no
+  // environment is needed since all cases are handled.
+  ToBooleanStub::Types expected = instr->expected_input_types();
   Representation rep = value->representation();
   HType type = value->type();
-  if (rep.IsTagged() && !type.IsSmi() && !type.IsBoolean()) {
+  if (rep.IsTagged() && !type.IsSmi() && !type.IsBoolean() &&
+      !expected.IsGeneric()) {
     return AssignEnvironment(result);
   }
   return result;
@@ -1270,7 +1264,6 @@ LInstruction* LChunkBuilder::DoCallNew(HCallNew* instr) {
 
 
 LInstruction* LChunkBuilder::DoCallNewArray(HCallNewArray* instr) {
-  ASSERT(FLAG_optimize_constructed_arrays);
   LOperand* constructor = UseFixed(instr->constructor(), rdi);
   argument_count_ -= instr->argument_count();
   LCallNewArray* result = new(zone()) LCallNewArray(constructor);
@@ -1368,19 +1361,6 @@ LInstruction* LChunkBuilder::DoDiv(HDiv* instr) {
 }
 
 
-HValue* LChunkBuilder::SimplifiedDividendForMathFloorOfDiv(HValue* dividend) {
-  // A value with an integer representation does not need to be transformed.
-  if (dividend->representation().IsInteger32()) {
-    return dividend;
-  // A change from an integer32 can be replaced by the integer32 value.
-  } else if (dividend->IsChange() &&
-      HChange::cast(dividend)->from().IsInteger32()) {
-    return HChange::cast(dividend)->value();
-  }
-  return NULL;
-}
-
-
 HValue* LChunkBuilder::SimplifiedDivisorForMathFloorOfDiv(HValue* divisor) {
   if (divisor->IsConstant() &&
       HConstant::cast(divisor)->HasInteger32Value()) {
@@ -1452,7 +1432,7 @@ LInstruction* LChunkBuilder::DoMod(HMod* instr) {
               instr->CheckFlag(HValue::kBailoutOnMinusZero))
           ? AssignEnvironment(result)
           : result;
-    } else if (instr->has_fixed_right_arg()) {
+    } else if (instr->fixed_right_arg().has_value) {
       LModI* mod = new(zone()) LModI(UseRegister(left),
                                      UseRegisterAtStart(right),
                                      NULL);
@@ -1738,13 +1718,6 @@ LInstruction* LChunkBuilder::DoClassOfTestAndBranch(
 }
 
 
-LInstruction* LChunkBuilder::DoFixedArrayBaseLength(
-    HFixedArrayBaseLength* instr) {
-  LOperand* array = UseRegisterAtStart(instr->value());
-  return DefineAsRegister(new(zone()) LFixedArrayBaseLength(array));
-}
-
-
 LInstruction* LChunkBuilder::DoMapEnumLength(HMapEnumLength* instr) {
   LOperand* map = UseRegisterAtStart(instr->value());
   return DefineAsRegister(new(zone()) LMapEnumLength(map));
@@ -1932,7 +1905,7 @@ LInstruction* LChunkBuilder::DoChange(HChange* instr) {
 }
 
 
-LInstruction* LChunkBuilder::DoCheckNonSmi(HCheckNonSmi* instr) {
+LInstruction* LChunkBuilder::DoCheckHeapObject(HCheckHeapObject* instr) {
   LOperand* value = UseRegisterAtStart(instr->value());
   return AssignEnvironment(new(zone()) LCheckNonSmi(value));
 }
@@ -2353,6 +2326,13 @@ LInstruction* LChunkBuilder::DoStringLength(HStringLength* instr) {
 }
 
 
+LInstruction* LChunkBuilder::DoAllocateObject(HAllocateObject* instr) {
+  info()->MarkAsDeferredCalling();
+  LAllocateObject* result = new(zone()) LAllocateObject(TempRegister());
+  return AssignPointerMap(DefineAsRegister(result));
+}
+
+
 LInstruction* LChunkBuilder::DoAllocate(HAllocate* instr) {
   info()->MarkAsDeferredCalling();
   LOperand* size = instr->size()->IsConstant()
@@ -2525,8 +2505,9 @@ LInstruction* LChunkBuilder::DoEnterInlined(HEnterInlined* instr) {
                                                undefined,
                                                instr->inlining_kind(),
                                                instr->undefined_receiver());
-  if (instr->arguments_var() != NULL) {
-    inner->Bind(instr->arguments_var(), graph()->GetArgumentsObject());
+  // Only replay binding of arguments object if it wasn't removed from graph.
+  if (instr->arguments_var() != NULL && instr->arguments_object()->IsLinked()) {
+    inner->Bind(instr->arguments_var(), instr->arguments_object());
   }
   inner->set_entry(instr);
   current_block_->UpdateEnvironment(inner);
index 1121af5..a7530be 100644 (file)
@@ -50,6 +50,7 @@ class LCodeGen;
   V(AccessArgumentsAt)                          \
   V(AddI)                                       \
   V(Allocate)                                   \
+  V(AllocateObject)                             \
   V(ApplyArguments)                             \
   V(ArgumentsElements)                          \
   V(ArgumentsLength)                            \
@@ -98,7 +99,6 @@ class LCodeGen;
   V(DoubleToSmi)                                \
   V(DummyUse)                                   \
   V(ElementsKind)                               \
-  V(FixedArrayBaseLength)                       \
   V(MapEnumLength)                              \
   V(FunctionLiteral)                            \
   V(GetCachedArrayIndex)                        \
@@ -489,17 +489,44 @@ class LUnknownOSRValue: public LTemplateInstruction<1, 0, 0> {
 template<int I, int T>
 class LControlInstruction: public LTemplateInstruction<0, I, T> {
  public:
+  LControlInstruction() : false_label_(NULL), true_label_(NULL) { }
+
   virtual bool IsControl() const { return true; }
 
   int SuccessorCount() { return hydrogen()->SuccessorCount(); }
   HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); }
-  int true_block_id() { return hydrogen()->SuccessorAt(0)->block_id(); }
-  int false_block_id() { return hydrogen()->SuccessorAt(1)->block_id(); }
+
+  int TrueDestination(LChunk* chunk) {
+    return chunk->LookupDestination(true_block_id());
+  }
+  int FalseDestination(LChunk* chunk) {
+    return chunk->LookupDestination(false_block_id());
+  }
+
+  Label* TrueLabel(LChunk* chunk) {
+    if (true_label_ == NULL) {
+      true_label_ = chunk->GetAssemblyLabel(TrueDestination(chunk));
+    }
+    return true_label_;
+  }
+  Label* FalseLabel(LChunk* chunk) {
+    if (false_label_ == NULL) {
+      false_label_ = chunk->GetAssemblyLabel(FalseDestination(chunk));
+    }
+    return false_label_;
+  }
+
+ protected:
+  int true_block_id() { return SuccessorAt(0)->block_id(); }
+  int false_block_id() { return SuccessorAt(1)->block_id(); }
 
  private:
   HControlInstruction* hydrogen() {
     return HControlInstruction::cast(this->hydrogen_value());
   }
+
+  Label* false_label_;
+  Label* true_label_;
 };
 
 
@@ -1190,7 +1217,7 @@ class LDebugBreak: public LTemplateInstruction<0, 0, 0> {
 };
 
 
-class LCmpMapAndBranch: public LTemplateInstruction<0, 1, 0> {
+class LCmpMapAndBranch: public LControlInstruction<1, 0> {
  public:
   explicit LCmpMapAndBranch(LOperand* value) {
     inputs_[0] = value;
@@ -1201,29 +1228,7 @@ class LCmpMapAndBranch: public LTemplateInstruction<0, 1, 0> {
   DECLARE_CONCRETE_INSTRUCTION(CmpMapAndBranch, "cmp-map-and-branch")
   DECLARE_HYDROGEN_ACCESSOR(CompareMap)
 
-  virtual bool IsControl() const { return true; }
-
   Handle<Map> map() const { return hydrogen()->map(); }
-  int true_block_id() const {
-    return hydrogen()->FirstSuccessor()->block_id();
-  }
-  int false_block_id() const {
-    return hydrogen()->SecondSuccessor()->block_id();
-  }
-};
-
-
-class LFixedArrayBaseLength: public LTemplateInstruction<1, 1, 0> {
- public:
-  explicit LFixedArrayBaseLength(LOperand* value) {
-    inputs_[0] = value;
-  }
-
-  LOperand* value() { return inputs_[0]; }
-
-  DECLARE_CONCRETE_INSTRUCTION(FixedArrayBaseLength,
-                               "fixed-array-base-length")
-  DECLARE_HYDROGEN_ACCESSOR(FixedArrayBaseLength)
 };
 
 
@@ -2359,6 +2364,20 @@ class LCheckNonSmi: public LTemplateInstruction<0, 1, 0> {
   LOperand* value() { return inputs_[0]; }
 
   DECLARE_CONCRETE_INSTRUCTION(CheckNonSmi, "check-non-smi")
+  DECLARE_HYDROGEN_ACCESSOR(CheckHeapObject)
+};
+
+
+class LAllocateObject: public LTemplateInstruction<1, 0, 1> {
+ public:
+  explicit LAllocateObject(LOperand* temp) {
+    temps_[0] = temp;
+  }
+
+  LOperand* temp() { return temps_[0]; }
+
+  DECLARE_CONCRETE_INSTRUCTION(AllocateObject, "allocate-object")
+  DECLARE_HYDROGEN_ACCESSOR(AllocateObject)
 };
 
 
@@ -2463,26 +2482,10 @@ class LDeleteProperty: public LTemplateInstruction<1, 2, 0> {
 
 class LOsrEntry: public LTemplateInstruction<0, 0, 0> {
  public:
-  LOsrEntry();
+  LOsrEntry() {}
 
   virtual bool HasInterestingComment(LCodeGen* gen) const { return false; }
   DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry")
-
-  LOperand** SpilledRegisterArray() { return register_spills_; }
-  LOperand** SpilledDoubleRegisterArray() { return double_register_spills_; }
-
-  void MarkSpilledRegister(int allocation_index, LOperand* spill_operand);
-  void MarkSpilledDoubleRegister(int allocation_index,
-                                 LOperand* spill_operand);
-
- private:
-  // Arrays of spill slot operands for registers with an assigned spill
-  // slot, i.e., that must also be restored to the spill slot on OSR entry.
-  // NULL if the register has no assigned spill slot.  Indexed by allocation
-  // index.
-  LOperand* register_spills_[Register::kMaxNumAllocatableRegisters];
-  LOperand* double_register_spills_[
-      DoubleRegister::kMaxNumAllocatableRegisters];
 };
 
 
@@ -2590,7 +2593,6 @@ class LChunkBuilder BASE_EMBEDDED {
   HYDROGEN_CONCRETE_INSTRUCTION_LIST(DECLARE_DO)
 #undef DECLARE_DO
 
-  static HValue* SimplifiedDividendForMathFloorOfDiv(HValue* val);
   static HValue* SimplifiedDivisorForMathFloorOfDiv(HValue* val);
 
   LInstruction* DoMathFloor(HUnaryMathOperation* instr);
index 46e2c69..e5bee67 100644 (file)
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_X64)
+#if V8_TARGET_ARCH_X64
 
 #include "bootstrapper.h"
 #include "codegen.h"
+#include "cpu-profiler.h"
 #include "assembler-x64.h"
 #include "macro-assembler-x64.h"
 #include "serialize.h"
@@ -645,8 +646,8 @@ void MacroAssembler::TailCallExternalReference(const ExternalReference& ext,
                                                int num_arguments,
                                                int result_size) {
   // ----------- S t a t e -------------
-  //  -- rsp[0] : return address
-  //  -- rsp[8] : argument num_arguments - 1
+  //  -- rsp[0]                 : return address
+  //  -- rsp[8]                 : argument num_arguments - 1
   //  ...
   //  -- rsp[8 * num_arguments] : argument 0 (receiver)
   // -----------------------------------
@@ -697,6 +698,8 @@ void MacroAssembler::PrepareCallApiFunction(int arg_stack_space,
 
 
 void MacroAssembler::CallApiFunctionAndReturn(Address function_address,
+                                              Address thunk_address,
+                                              Register thunk_last_arg,
                                               int stack_space,
                                               bool returns_handle,
                                               int return_value_offset) {
@@ -737,9 +740,29 @@ void MacroAssembler::CallApiFunctionAndReturn(Address function_address,
     PopSafepointRegisters();
   }
 
+
+  Label profiler_disabled;
+  Label end_profiler_check;
+  bool* is_profiling_flag =
+      isolate()->cpu_profiler()->is_profiling_address();
+  STATIC_ASSERT(sizeof(*is_profiling_flag) == 1);
+  movq(rax, is_profiling_flag, RelocInfo::EXTERNAL_REFERENCE);
+  cmpb(Operand(rax, 0), Immediate(0));
+  j(zero, &profiler_disabled);
+
+  // Third parameter is the address of the actual getter function.
+  movq(thunk_last_arg, function_address, RelocInfo::EXTERNAL_REFERENCE);
+  movq(rax, thunk_address, RelocInfo::EXTERNAL_REFERENCE);
+  jmp(&end_profiler_check);
+
+  bind(&profiler_disabled);
   // Call the api function!
   movq(rax, reinterpret_cast<int64_t>(function_address),
        RelocInfo::EXTERNAL_REFERENCE);
+
+  bind(&end_profiler_check);
+
+  // Call the api function!
   call(rax);
 
   if (FLAG_log_timer_events) {
@@ -2286,6 +2309,32 @@ void MacroAssembler::JumpIfBothInstanceTypesAreNotSequentialAscii(
 }
 
 
+template<class T>
+static void JumpIfNotUniqueNameHelper(MacroAssembler* masm,
+                                      T operand_or_register,
+                                      Label* not_unique_name,
+                                      Label::Distance distance) {
+  STATIC_ASSERT(((SYMBOL_TYPE - 1) & kIsInternalizedMask) == kInternalizedTag);
+  masm->cmpb(operand_or_register, Immediate(kInternalizedTag));
+  masm->j(less, not_unique_name, distance);
+  masm->cmpb(operand_or_register, Immediate(SYMBOL_TYPE));
+  masm->j(greater, not_unique_name, distance);
+}
+
+
+void MacroAssembler::JumpIfNotUniqueName(Operand operand,
+                                         Label* not_unique_name,
+                                         Label::Distance distance) {
+  JumpIfNotUniqueNameHelper<Operand>(this, operand, not_unique_name, distance);
+}
+
+
+void MacroAssembler::JumpIfNotUniqueName(Register reg,
+                                         Label* not_unique_name,
+                                         Label::Distance distance) {
+  JumpIfNotUniqueNameHelper<Register>(this, reg, not_unique_name, distance);
+}
+
 
 void MacroAssembler::Move(Register dst, Register src) {
   if (!dst.is(src)) {
@@ -2357,9 +2406,8 @@ void MacroAssembler::LoadHeapObject(Register result,
                                     Handle<HeapObject> object) {
   AllowDeferredHandleDereference using_raw_address;
   if (isolate()->heap()->InNewSpace(*object)) {
-    Handle<JSGlobalPropertyCell> cell =
-        isolate()->factory()->NewJSGlobalPropertyCell(object);
-    movq(result, cell, RelocInfo::GLOBAL_PROPERTY_CELL);
+    Handle<Cell> cell = isolate()->factory()->NewCell(object);
+    movq(result, cell, RelocInfo::CELL);
     movq(result, Operand(result, 0));
   } else {
     Move(result, object);
@@ -2370,9 +2418,8 @@ void MacroAssembler::LoadHeapObject(Register result,
 void MacroAssembler::CmpHeapObject(Register reg, Handle<HeapObject> object) {
   AllowDeferredHandleDereference using_raw_address;
   if (isolate()->heap()->InNewSpace(*object)) {
-    Handle<JSGlobalPropertyCell> cell =
-        isolate()->factory()->NewJSGlobalPropertyCell(object);
-    movq(kScratchRegister, cell, RelocInfo::GLOBAL_PROPERTY_CELL);
+    Handle<Cell> cell = isolate()->factory()->NewCell(object);
+    movq(kScratchRegister, cell, RelocInfo::CELL);
     cmpq(reg, Operand(kScratchRegister, 0));
   } else {
     Cmp(reg, object);
@@ -2383,9 +2430,8 @@ void MacroAssembler::CmpHeapObject(Register reg, Handle<HeapObject> object) {
 void MacroAssembler::PushHeapObject(Handle<HeapObject> object) {
   AllowDeferredHandleDereference using_raw_address;
   if (isolate()->heap()->InNewSpace(*object)) {
-    Handle<JSGlobalPropertyCell> cell =
-        isolate()->factory()->NewJSGlobalPropertyCell(object);
-    movq(kScratchRegister, cell, RelocInfo::GLOBAL_PROPERTY_CELL);
+    Handle<Cell> cell = isolate()->factory()->NewCell(object);
+    movq(kScratchRegister, cell, RelocInfo::CELL);
     movq(kScratchRegister, Operand(kScratchRegister, 0));
     push(kScratchRegister);
   } else {
@@ -2394,13 +2440,12 @@ void MacroAssembler::PushHeapObject(Handle<HeapObject> object) {
 }
 
 
-void MacroAssembler::LoadGlobalCell(Register dst,
-                                    Handle<JSGlobalPropertyCell> cell) {
+void MacroAssembler::LoadGlobalCell(Register dst, Handle<Cell> cell) {
   if (dst.is(rax)) {
     AllowDeferredHandleDereference embedding_raw_address;
-    load_rax(cell.location(), RelocInfo::GLOBAL_PROPERTY_CELL);
+    load_rax(cell.location(), RelocInfo::CELL);
   } else {
-    movq(dst, cell, RelocInfo::GLOBAL_PROPERTY_CELL);
+    movq(dst, cell, RelocInfo::CELL);
     movq(dst, Operand(dst, 0));
   }
 }
@@ -2643,7 +2688,8 @@ void MacroAssembler::JumpToHandlerEntry() {
   // rax = exception, rdi = code object, rdx = state.
   movq(rbx, FieldOperand(rdi, Code::kHandlerTableOffset));
   shr(rdx, Immediate(StackHandler::kKindWidth));
-  movq(rdx, FieldOperand(rbx, rdx, times_8, FixedArray::kHeaderSize));
+  movq(rdx,
+       FieldOperand(rbx, rdx, times_pointer_size, FixedArray::kHeaderSize));
   SmiToInteger64(rdx, rdx);
   lea(rdi, FieldOperand(rdi, rdx, times_1, Code::kHeaderSize));
   jmp(rdi);
@@ -4171,12 +4217,12 @@ void MacroAssembler::CopyBytes(Register destination,
   // we keep source aligned for the rep movs operation by copying the odd bytes
   // at the end of the ranges.
   movq(scratch, length);
-  shrl(length, Immediate(3));
+  shrl(length, Immediate(kPointerSizeLog2));
   repmovsq();
   // Move remaining bytes of length.
-  andl(scratch, Immediate(0x7));
-  movq(length, Operand(source, scratch, times_1, -8));
-  movq(Operand(destination, scratch, times_1, -8), length);
+  andl(scratch, Immediate(kPointerSize - 1));
+  movq(length, Operand(source, scratch, times_1, -kPointerSize));
+  movq(Operand(destination, scratch, times_1, -kPointerSize), length);
   addq(destination, scratch);
 
   if (min_length <= kLongStringLimit) {
index c10cbc6..124153b 100644 (file)
@@ -758,6 +758,12 @@ class MacroAssembler: public Assembler {
       Label* on_fail,
       Label::Distance near_jump = Label::kFar);
 
+  // Checks if the given register or operand is a unique name
+  void JumpIfNotUniqueName(Register reg, Label* not_unique_name,
+                           Label::Distance distance = Label::kFar);
+  void JumpIfNotUniqueName(Operand operand, Label* not_unique_name,
+                           Label::Distance distance = Label::kFar);
+
   // ---------------------------------------------------------------------------
   // Macro instructions.
 
@@ -810,7 +816,7 @@ class MacroAssembler: public Assembler {
   }
 
   // Load a global cell into a register.
-  void LoadGlobalCell(Register dst, Handle<JSGlobalPropertyCell> cell);
+  void LoadGlobalCell(Register dst, Handle<Cell> cell);
 
   // Emit code to discard a non-negative number of pointer-sized elements
   // from the stack, clobbering only the rsp register.
@@ -1239,12 +1245,14 @@ class MacroAssembler: public Assembler {
   // caller-save registers.  Restores context.  On return removes
   // stack_space * kPointerSize (GCed).
   void CallApiFunctionAndReturn(Address function_address,
+                                Address thunk_address,
+                                Register thunk_last_arg,
                                 int stack_space,
                                 bool returns_handle,
                                 int return_value_offset_from_rbp);
 
   // Before calling a C-function from generated code, align arguments on stack.
-  // After aligning the frame, arguments must be stored in esp[0], esp[4],
+  // After aligning the frame, arguments must be stored in rsp[0], rsp[8],
   // etc., not pushed. The argument count assumes all arguments are word sized.
   // The number of slots reserved for arguments depends on platform. On Windows
   // stack slots are reserved for the arguments passed in registers. On other
index efb2a65..106ffb7 100644 (file)
@@ -27,8 +27,9 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_X64)
+#if V8_TARGET_ARCH_X64
 
+#include "cpu-profiler.h"
 #include "serialize.h"
 #include "unicode.h"
 #include "log.h"
index 06d8f71..4b3ee40 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "v8.h"
 
-#if defined(V8_TARGET_ARCH_X64)
+#if V8_TARGET_ARCH_X64
 
 #include "ic-inl.h"
 #include "codegen.h"
@@ -53,7 +53,7 @@ static void ProbeTable(Isolate* isolate,
   ASSERT(kPointerSizeLog2 == kHeapObjectTagSize + 1);
   ScaleFactor scale_factor = times_2;
 
-  ASSERT_EQ(24, sizeof(StubCache::Entry));
+  ASSERT_EQ(3 * kPointerSize, sizeof(StubCache::Entry));
   // The offset register holds the entry offset times four (due to masking
   // and shifting optimizations).
   ExternalReference key_offset(isolate->stub_cache()->key_reference(table));
@@ -171,8 +171,8 @@ void StubCache::GenerateProbe(MacroAssembler* masm,
   USE(extra2);  // The register extra2 is not used on the X64 platform.
   USE(extra3);  // The register extra2 is not used on the X64 platform.
   // Make sure that code is valid. The multiplying code relies on the
-  // entry size being 24.
-  ASSERT(sizeof(Entry) == 24);
+  // entry size being 3 * kPointerSize.
+  ASSERT(sizeof(Entry) == 3 * kPointerSize);
 
   // Make sure the flags do not name a specific type.
   ASSERT(Code::ExtractTypeFromFlags(flags) == 0);
@@ -423,10 +423,11 @@ static void ReserveSpaceForFastApiCall(MacroAssembler* masm, Register scratch) {
 // Undoes the effects of ReserveSpaceForFastApiCall.
 static void FreeSpaceForFastApiCall(MacroAssembler* masm, Register scratch) {
   // ----------- S t a t e -------------
-  //  -- rsp[0]  : return address.
-  //  -- rsp[8]  : last fast api call extra argument.
+  //  -- rsp[0]                             : return address.
+  //  -- rsp[8]                             : last fast api call extra argument.
   //  -- ...
-  //  -- rsp[kFastApiCallArguments * 8] : first fast api call extra argument.
+  //  -- rsp[kFastApiCallArguments * 8]     : first fast api call extra
+  //                                          argument.
   //  -- rsp[kFastApiCallArguments * 8 + 8] : last argument in the internal
   //                                          frame.
   // -----------------------------------
@@ -491,11 +492,14 @@ static void GenerateFastApiCall(MacroAssembler* masm,
 
 #if defined(__MINGW64__)
   Register arguments_arg = rcx;
+  Register callback_arg = rdx;
 #elif defined(_WIN64)
   // Win64 uses first register--rcx--for returned value.
   Register arguments_arg = returns_handle ? rdx : rcx;
+  Register callback_arg = returns_handle ? r8 : rdx;
 #else
   Register arguments_arg = rdi;
+  Register callback_arg = rsi;
 #endif
 
   // Allocate the v8::Arguments structure in the arguments' space since
@@ -514,7 +518,13 @@ static void GenerateFastApiCall(MacroAssembler* masm,
   // v8::InvocationCallback's argument.
   __ lea(arguments_arg, StackSpaceOperand(0));
 
+  Address thunk_address = returns_handle
+      ? FUNCTION_ADDR(&InvokeInvocationCallback)
+      : FUNCTION_ADDR(&InvokeFunctionCallback);
+
   __ CallApiFunctionAndReturn(function_address,
+                              thunk_address,
+                              callback_arg,
                               argc + kFastApiCallArguments + 1,
                               returns_handle,
                               kFastApiCallArguments + 1);
@@ -737,11 +747,11 @@ static void GenerateCheckPropertyCell(MacroAssembler* masm,
                                       Handle<Name> name,
                                       Register scratch,
                                       Label* miss) {
-  Handle<JSGlobalPropertyCell> cell =
+  Handle<PropertyCell> cell =
       GlobalObject::EnsurePropertyCell(global, name);
   ASSERT(cell->value()->IsTheHole());
   __ Move(scratch, cell);
-  __ Cmp(FieldOperand(scratch, JSGlobalPropertyCell::kValueOffset),
+  __ Cmp(FieldOperand(scratch, Cell::kValueOffset),
          masm->isolate()->factory()->the_hole_value());
   __ j(not_equal, miss);
 }
@@ -817,7 +827,13 @@ void StubCompiler::GenerateStoreTransition(MacroAssembler* masm,
 
   Register storage_reg = name_reg;
 
-  if (FLAG_track_fields && representation.IsSmi()) {
+  if (details.type() == CONSTANT_FUNCTION) {
+    Handle<HeapObject> constant(
+        HeapObject::cast(descriptors->GetValue(descriptor)));
+    __ LoadHeapObject(scratch1, constant);
+    __ cmpq(value_reg, scratch1);
+    __ j(not_equal, miss_restore_name);
+  } else if (FLAG_track_fields && representation.IsSmi()) {
     __ JumpIfNotSmi(value_reg, miss_restore_name);
   } else if (FLAG_track_heap_object_fields && representation.IsHeapObject()) {
     __ JumpIfSmi(value_reg, miss_restore_name);
@@ -844,7 +860,8 @@ void StubCompiler::GenerateStoreTransition(MacroAssembler* masm,
   ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded());
 
   // Perform map transition for the receiver if necessary.
-  if (object->map()->unused_property_fields() == 0) {
+  if (details.type() == FIELD &&
+      object->map()->unused_property_fields() == 0) {
     // The properties must be extended before we can store the value.
     // We jump to a runtime call that extends the properties array.
     __ pop(scratch1);  // Return address.
@@ -873,6 +890,12 @@ void StubCompiler::GenerateStoreTransition(MacroAssembler* masm,
                       OMIT_REMEMBERED_SET,
                       OMIT_SMI_CHECK);
 
+  if (details.type() == CONSTANT_FUNCTION) {
+    ASSERT(value_reg.is(rax));
+    __ ret(0);
+    return;
+  }
+
   int index = transition->instance_descriptors()->GetFieldIndex(
       transition->LastAdded());
 
@@ -1293,8 +1316,8 @@ void BaseLoadStubCompiler::GenerateLoadCallback(
     Register reg,
     Handle<ExecutableAccessorInfo> callback) {
   // Insert additional parameters into the stack frame above return address.
-  ASSERT(!scratch2().is(reg));
-  __ pop(scratch2());  // Get return address to place it below.
+  ASSERT(!scratch4().is(reg));
+  __ pop(scratch4());  // Get return address to place it below.
 
   __ push(receiver());  // receiver
   __ push(reg);  // holder
@@ -1318,20 +1341,23 @@ void BaseLoadStubCompiler::GenerateLoadCallback(
       !CallbackTable::ReturnsVoid(isolate(), getter_address);
 
 #if defined(__MINGW64__)
+  Register getter_arg = r8;
   Register accessor_info_arg = rdx;
   Register name_arg = rcx;
 #elif defined(_WIN64)
   // Win64 uses first register--rcx--for returned value.
+  Register getter_arg = returns_handle ? r9 : r8;
   Register accessor_info_arg = returns_handle ? r8 : rdx;
   Register name_arg = returns_handle ? rdx : rcx;
 #else
+  Register getter_arg = rdx;
   Register accessor_info_arg = rsi;
   Register name_arg = rdi;
 #endif
 
-  ASSERT(!name_arg.is(scratch2()));
+  ASSERT(!name_arg.is(scratch4()));
   __ movq(name_arg, rsp);
-  __ push(scratch2());  // Restore return address.
+  __ push(scratch4());  // Restore return address.
 
   // v8::Arguments::values_ and handler for name.
   const int kStackSpace = PropertyCallbackArguments::kArgsLength + 1;
@@ -1350,7 +1376,13 @@ void BaseLoadStubCompiler::GenerateLoadCallback(
   // could be used to pass arguments.
   __ lea(accessor_info_arg, StackSpaceOperand(0));
 
+  Address thunk_address = returns_handle
+      ? FUNCTION_ADDR(&InvokeAccessorGetter)
+      : FUNCTION_ADDR(&InvokeAccessorGetterCallback);
+
   __ CallApiFunctionAndReturn(getter_address,
+                              thunk_address,
+                              getter_arg,
                               kStackSpace,
                               returns_handle,
                               5);
@@ -1485,12 +1517,12 @@ void CallStubCompiler::GenerateGlobalReceiverCheck(Handle<JSObject> object,
 
 
 void CallStubCompiler::GenerateLoadFunctionFromCell(
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
     Label* miss) {
   // Get the value from the cell.
   __ Move(rdi, cell);
-  __ movq(rdi, FieldOperand(rdi, JSGlobalPropertyCell::kValueOffset));
+  __ movq(rdi, FieldOperand(rdi, Cell::kValueOffset));
 
   // Check that the cell contains the same function.
   if (heap()->InNewSpace(*function)) {
@@ -1581,12 +1613,59 @@ Handle<Code> CallStubCompiler::CompileCallField(Handle<JSObject> object,
 }
 
 
+Handle<Code> CallStubCompiler::CompileArrayCodeCall(
+    Handle<Object> object,
+    Handle<JSObject> holder,
+    Handle<Cell> cell,
+    Handle<JSFunction> function,
+    Handle<String> name,
+    Code::StubType type) {
+  Label miss;
+
+  // Check that function is still array
+  const int argc = arguments().immediate();
+  GenerateNameCheck(name, &miss);
+
+  if (cell.is_null()) {
+    // Get the receiver from the stack.
+    __ movq(rdx, Operand(rsp, (argc + 1) * kPointerSize));
+
+    // Check that the receiver isn't a smi.
+    __ JumpIfSmi(rdx, &miss);
+    CheckPrototypes(Handle<JSObject>::cast(object), rdx, holder, rbx, rax, rdi,
+                    name, &miss);
+  } else {
+    ASSERT(cell->value() == *function);
+    GenerateGlobalReceiverCheck(Handle<JSObject>::cast(object), holder, name,
+                                &miss);
+    GenerateLoadFunctionFromCell(cell, function, &miss);
+  }
+
+  Handle<Smi> kind(Smi::FromInt(GetInitialFastElementsKind()), isolate());
+  Handle<Cell> kind_feedback_cell =
+      isolate()->factory()->NewCell(kind);
+  __ movq(rax, Immediate(argc));
+  __ Move(rbx, kind_feedback_cell);
+  __ Move(rdi, function);
+
+  ArrayConstructorStub stub(isolate());
+  __ TailCallStub(&stub);
+
+  __ bind(&miss);
+  GenerateMissBranch();
+
+  // Return the generated code.
+  return GetCode(type, name);
+}
+
+
 Handle<Code> CallStubCompiler::CompileArrayPushCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- rcx                 : name
   //  -- rsp[0]              : return address
@@ -1827,16 +1906,17 @@ Handle<Code> CallStubCompiler::CompileArrayPushCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return GetCode(function);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileArrayPopCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- rcx                 : name
   //  -- rsp[0]              : return address
@@ -1908,16 +1988,17 @@ Handle<Code> CallStubCompiler::CompileArrayPopCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return GetCode(function);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileStringCharCodeAtCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- rcx                 : function name
   //  -- rsp[0]              : return address
@@ -1988,16 +2069,17 @@ Handle<Code> CallStubCompiler::CompileStringCharCodeAtCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return GetCode(function);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileStringCharAtCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- rcx                 : function name
   //  -- rsp[0]              : return address
@@ -2068,16 +2150,17 @@ Handle<Code> CallStubCompiler::CompileStringCharAtCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return GetCode(function);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileStringFromCharCodeCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- rcx                 : function name
   //  -- rsp[0]              : return address
@@ -2139,16 +2222,17 @@ Handle<Code> CallStubCompiler::CompileStringFromCharCodeCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name);
+  return GetCode(type, name);
 }
 
 
 Handle<Code> CallStubCompiler::CompileMathFloorCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // TODO(872): implement this.
   return Handle<Code>::null();
 }
@@ -2157,9 +2241,10 @@ Handle<Code> CallStubCompiler::CompileMathFloorCall(
 Handle<Code> CallStubCompiler::CompileMathAbsCall(
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
-    Handle<String> name) {
+    Handle<String> name,
+    Code::StubType type) {
   // ----------- S t a t e -------------
   //  -- rcx                 : function name
   //  -- rsp[0]              : return address
@@ -2255,7 +2340,7 @@ Handle<Code> CallStubCompiler::CompileMathAbsCall(
   GenerateMissBranch();
 
   // Return the generated code.
-  return cell.is_null() ? GetCode(function) : GetCode(Code::NORMAL, name);
+  return GetCode(type, name);
 }
 
 
@@ -2263,7 +2348,7 @@ Handle<Code> CallStubCompiler::CompileFastApiCall(
     const CallOptimization& optimization,
     Handle<Object> object,
     Handle<JSObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<Cell> cell,
     Handle<JSFunction> function,
     Handle<String> name) {
   ASSERT(optimization.is_simple_api_call());
@@ -2445,8 +2530,9 @@ Handle<Code> CallStubCompiler::CompileCallConstant(
     Handle<JSFunction> function) {
   if (HasCustomCallGenerator(function)) {
     Handle<Code> code = CompileCustomCall(object, holder,
-                                          Handle<JSGlobalPropertyCell>::null(),
-                                          function, Handle<String>::cast(name));
+                                          Handle<PropertyCell>::null(),
+                                          function, Handle<String>::cast(name),
+                                          Code::CONSTANT_FUNCTION);
     // A null handle means bail out to the regular compiler code below.
     if (!code.is_null()) return code;
   }
@@ -2525,7 +2611,7 @@ Handle<Code> CallStubCompiler::CompileCallInterceptor(Handle<JSObject> object,
 Handle<Code> CallStubCompiler::CompileCallGlobal(
     Handle<JSObject> object,
     Handle<GlobalObject> holder,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<PropertyCell> cell,
     Handle<JSFunction> function,
     Handle<Name> name) {
   // ----------- S t a t e -------------
@@ -2540,7 +2626,8 @@ Handle<Code> CallStubCompiler::CompileCallGlobal(
 
   if (HasCustomCallGenerator(function)) {
     Handle<Code> code = CompileCustomCall(
-        object, holder, cell, function, Handle<String>::cast(name));
+        object, holder, cell, function, Handle<String>::cast(name),
+        Code::NORMAL);
     // A null handle means bail out to the regular compiler code below.
     if (!code.is_null()) return code;
   }
@@ -2708,7 +2795,7 @@ Handle<Code> StoreStubCompiler::CompileStoreInterceptor(
 
 Handle<Code> StoreStubCompiler::CompileStoreGlobal(
     Handle<GlobalObject> object,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<PropertyCell> cell,
     Handle<Name> name) {
   Label miss;
 
@@ -2720,7 +2807,7 @@ Handle<Code> StoreStubCompiler::CompileStoreGlobal(
   // Compute the cell operand to use.
   __ Move(scratch1(), cell);
   Operand cell_operand =
-      FieldOperand(scratch1(), JSGlobalPropertyCell::kValueOffset);
+      FieldOperand(scratch1(), PropertyCell::kValueOffset);
 
   // Check that the value in the cell is not the hole. If it is, this
   // cell could have been deleted and reintroducing the global needs
@@ -2888,7 +2975,7 @@ void LoadStubCompiler::GenerateLoadViaGetter(MacroAssembler* masm,
 Handle<Code> LoadStubCompiler::CompileLoadGlobal(
     Handle<JSObject> object,
     Handle<GlobalObject> global,
-    Handle<JSGlobalPropertyCell> cell,
+    Handle<PropertyCell> cell,
     Handle<Name> name,
     bool is_dont_delete) {
   Label success, miss;
@@ -2902,7 +2989,7 @@ Handle<Code> LoadStubCompiler::CompileLoadGlobal(
 
   // Get the value from the cell.
   __ Move(rbx, cell);
-  __ movq(rbx, FieldOperand(rbx, JSGlobalPropertyCell::kValueOffset));
+  __ movq(rbx, FieldOperand(rbx, PropertyCell::kValueOffset));
 
   // Check for deleted property if property can actually be deleted.
   if (!is_dont_delete) {
@@ -2996,7 +3083,7 @@ void KeyedLoadStubCompiler::GenerateLoadDictionaryElement(
   // ----------- S t a t e -------------
   //  -- rax    : key
   //  -- rdx    : receiver
-  //  -- rsp[0]  : return address
+  //  -- rsp[0] : return address
   // -----------------------------------
   TailCallBuiltin(masm, Builtins::kKeyedLoadIC_Slow);
 
@@ -3004,7 +3091,7 @@ void KeyedLoadStubCompiler::GenerateLoadDictionaryElement(
   // ----------- S t a t e -------------
   //  -- rax    : key
   //  -- rdx    : receiver
-  //  -- rsp[0]  : return address
+  //  -- rsp[0] : return address
   // -----------------------------------
   TailCallBuiltin(masm, Builtins::kKeyedLoadIC_MissForceGeneric);
 }
@@ -3039,10 +3126,10 @@ void KeyedStoreStubCompiler::GenerateStoreExternalArray(
     MacroAssembler* masm,
     ElementsKind elements_kind) {
   // ----------- S t a t e -------------
-  //  -- rax     : value
-  //  -- rcx     : key
-  //  -- rdx     : receiver
-  //  -- rsp[0]  : return address
+  //  -- rax    : value
+  //  -- rcx    : key
+  //  -- rdx    : receiver
+  //  -- rsp[0] : return address
   // -----------------------------------
   Label slow, miss_force_generic;
 
@@ -3199,10 +3286,10 @@ void KeyedStoreStubCompiler::GenerateStoreExternalArray(
   __ bind(&slow);
 
   // ----------- S t a t e -------------
-  //  -- rax     : value
-  //  -- rcx     : key
-  //  -- rdx     : receiver
-  //  -- rsp[0]  : return address
+  //  -- rax    : value
+  //  -- rcx    : key
+  //  -- rdx    : receiver
+  //  -- rsp[0] : return address
   // -----------------------------------
   TailCallBuiltin(masm, Builtins::kKeyedStoreIC_Slow);
 
index e312b20..49e7626 100644 (file)
@@ -40,7 +40,6 @@ namespace internal {
 
 
 inline void* Zone::New(int size) {
-  ASSERT(scope_nesting_ > 0);
   // Round up the requested size to fit the alignment.
   size = RoundUp(size, kAlignment);
 
@@ -75,7 +74,7 @@ T* Zone::NewArray(int length) {
 
 
 bool Zone::excess_allocation() {
-  return segment_bytes_allocated_ > zone_excess_limit_;
+  return segment_bytes_allocated_ > kExcessLimit;
 }
 
 
@@ -110,17 +109,6 @@ void* ZoneList<T>::operator new(size_t size, Zone* zone) {
 }
 
 
-ZoneScope::ZoneScope(Zone* zone, ZoneScopeMode mode)
-    : zone_(zone), mode_(mode) {
-  zone_->scope_nesting_++;
-}
-
-
-bool ZoneScope::ShouldDeleteOnExit() {
-  return zone_->scope_nesting_ == 1 && mode_ == DELETE_ON_EXIT;
-}
-
-
 } }  // namespace v8::internal
 
 #endif  // V8_ZONE_INL_H_
index 51b8113..2a0a0e2 100644 (file)
@@ -68,39 +68,20 @@ class Segment {
 
 
 Zone::Zone(Isolate* isolate)
-    : zone_excess_limit_(256 * MB),
+    : allocation_size_(0),
       segment_bytes_allocated_(0),
       position_(0),
       limit_(0),
-      scope_nesting_(0),
       segment_head_(NULL),
       isolate_(isolate) {
 }
-unsigned Zone::allocation_size_ = 0;
 
-ZoneScope::~ZoneScope() {
-  if (ShouldDeleteOnExit()) zone_->DeleteAll();
-  zone_->scope_nesting_--;
-}
 
+Zone::~Zone() {
+  DeleteAll();
+  DeleteKeptSegment();
 
-// Creates a new segment, sets it size, and pushes it to the front
-// of the segment chain. Returns the new segment.
-Segment* Zone::NewSegment(int size) {
-  Segment* result = reinterpret_cast<Segment*>(Malloced::New(size));
-  adjust_segment_bytes_allocated(size);
-  if (result != NULL) {
-    result->Initialize(segment_head_, size);
-    segment_head_ = result;
-  }
-  return result;
-}
-
-
-// Deletes the given segment. Does not touch the segment chain.
-void Zone::DeleteSegment(Segment* segment, int size) {
-  adjust_segment_bytes_allocated(-size);
-  Malloced::Delete(segment);
+  ASSERT(segment_bytes_allocated_ == 0);
 }
 
 
@@ -118,8 +99,7 @@ void Zone::DeleteAll() {
 
   // Traverse the chained list of segments, zapping (in debug mode)
   // and freeing every segment except the one we wish to keep.
-  Segment* current = segment_head_;
-  while (current != NULL) {
+  for (Segment* current = segment_head_; current != NULL; ) {
     Segment* next = current->next();
     if (current == keep) {
       // Unlink the segment we wish to keep from the list.
@@ -157,10 +137,43 @@ void Zone::DeleteAll() {
 
 
 void Zone::DeleteKeptSegment() {
+#ifdef DEBUG
+  // Constant byte value used for zapping dead memory in debug mode.
+  static const unsigned char kZapDeadByte = 0xcd;
+#endif
+
+  ASSERT(segment_head_ == NULL || segment_head_->next() == NULL);
   if (segment_head_ != NULL) {
-    DeleteSegment(segment_head_, segment_head_->size());
+    int size = segment_head_->size();
+#ifdef DEBUG
+    // Zap the entire kept segment (including the header).
+    memset(segment_head_, kZapDeadByte, size);
+#endif
+    DeleteSegment(segment_head_, size);
     segment_head_ = NULL;
   }
+
+  ASSERT(segment_bytes_allocated_ == 0);
+}
+
+
+// Creates a new segment, sets it size, and pushes it to the front
+// of the segment chain. Returns the new segment.
+Segment* Zone::NewSegment(int size) {
+  Segment* result = reinterpret_cast<Segment*>(Malloced::New(size));
+  adjust_segment_bytes_allocated(size);
+  if (result != NULL) {
+    result->Initialize(segment_head_, size);
+    segment_head_ = result;
+  }
+  return result;
+}
+
+
+// Deletes the given segment. Does not touch the segment chain.
+void Zone::DeleteSegment(Segment* segment, int size) {
+  adjust_segment_bytes_allocated(-size);
+  Malloced::Delete(segment);
 }
 
 
index 01e887e..a12ed79 100644 (file)
@@ -39,13 +39,6 @@ namespace v8 {
 namespace internal {
 
 
-// Zone scopes are in one of two modes.  Either they delete the zone
-// on exit or they do not.
-enum ZoneScopeMode {
-  DELETE_ON_EXIT,
-  DONT_DELETE_ON_EXIT
-};
-
 class Segment;
 class Isolate;
 
@@ -65,7 +58,7 @@ class Isolate;
 class Zone {
  public:
   explicit Zone(Isolate* isolate);
-  ~Zone() { DeleteKeptSegment(); }
+  ~Zone();
   // Allocate 'size' bytes of memory in the Zone; expands the Zone by
   // allocating new segments of memory on demand using malloc().
   inline void* New(int size);
@@ -77,7 +70,8 @@ class Zone {
   // small (size <= kMaximumKeptSegmentSize) segment around if it finds one.
   void DeleteAll();
 
-  // Deletes the last small segment kept around by DeleteAll().
+  // Deletes the last small segment kept around by DeleteAll(). You
+  // may no longer allocate in the Zone after a call to this method.
   void DeleteKeptSegment();
 
   // Returns true if more memory has been allocated in zones than
@@ -86,13 +80,12 @@ class Zone {
 
   inline void adjust_segment_bytes_allocated(int delta);
 
-  inline Isolate* isolate() { return isolate_; }
+  inline unsigned allocation_size() { return allocation_size_; }
 
-  static unsigned allocation_size_;
+  inline Isolate* isolate() { return isolate_; }
 
  private:
   friend class Isolate;
-  friend class ZoneScope;
 
   // All pointers returned from New() have this alignment.  In addition, if the
   // object being allocated has a size that is divisible by 8 then its alignment
@@ -109,7 +102,10 @@ class Zone {
   static const int kMaximumKeptSegmentSize = 64 * KB;
 
   // Report zone excess when allocation exceeds this limit.
-  int zone_excess_limit_;
+  static const int kExcessLimit = 256 * MB;
+
+  // The number of bytes allocated in this zone so far.
+  unsigned allocation_size_;
 
   // The number of bytes allocated in segments.  Note that this number
   // includes memory allocated from the OS but not yet allocated from
@@ -124,10 +120,10 @@ class Zone {
 
   // Creates a new segment, sets it size, and pushes it to the front
   // of the segment chain. Returns the new segment.
-  Segment* NewSegment(int size);
+  INLINE(Segment* NewSegment(int size));
 
   // Deletes the given segment. Does not touch the segment chain.
-  void DeleteSegment(Segment* segment, int size);
+  INLINE(void DeleteSegment(Segment* segment, int size));
 
   // The free region in the current (front) segment is represented as
   // the half-open interval [position, limit). The 'position' variable
@@ -135,8 +131,6 @@ class Zone {
   Address position_;
   Address limit_;
 
-  int scope_nesting_;
-
   Segment* segment_head_;
   Isolate* isolate_;
 };
@@ -162,6 +156,20 @@ class ZoneObject {
 };
 
 
+// The ZoneScope is used to automatically call DeleteAll() on a
+// Zone when the ZoneScope is destroyed (i.e. goes out of scope)
+struct ZoneScope {
+ public:
+  explicit ZoneScope(Zone* zone) : zone_(zone) { }
+  ~ZoneScope() { zone_->DeleteAll(); }
+
+  Zone* zone() { return zone_; }
+
+ private:
+  Zone* zone_;
+};
+
+
 // The ZoneAllocationPolicy is used to specialize generic data
 // structures to allocate themselves and their elements in the Zone.
 struct ZoneAllocationPolicy {
@@ -229,31 +237,6 @@ class ZoneList: public List<T, ZoneAllocationPolicy> {
 };
 
 
-// ZoneScopes keep track of the current parsing and compilation
-// nesting and cleans up generated ASTs in the Zone when exiting the
-// outer-most scope.
-class ZoneScope BASE_EMBEDDED {
- public:
-  INLINE(ZoneScope(Zone* zone, ZoneScopeMode mode));
-
-  virtual ~ZoneScope();
-
-  inline bool ShouldDeleteOnExit();
-
-  // For ZoneScopes that do not delete on exit by default, call this
-  // method to request deletion on exit.
-  void DeleteOnExit() {
-    mode_ = DELETE_ON_EXIT;
-  }
-
-  inline static int nesting();
-
- private:
-  Zone* zone_;
-  ZoneScopeMode mode_;
-};
-
-
 // A zone splay tree.  The config type parameter encapsulates the
 // different configurations of a concrete splay tree (see splay-tree.h).
 // The tree itself and all its elements are allocated in the Zone.
index 0811093..a65de86 100644 (file)
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 {
-  'includes': ['../../build/common.gypi'],
   'variables': {
+    'v8_code': 1,
     'generated_file': '<(SHARED_INTERMEDIATE_DIR)/resources.cc',
   },
+  'includes': ['../../build/common.gypi'],
   'targets': [
     {
       'target_name': 'cctest',
index c249b5e..193126a 100644 (file)
@@ -200,7 +200,6 @@ class RegisterThreadedTest {
   const char* name_;
 };
 
-namespace v8 {
 // A LocalContext holds a reference to a v8::Context.
 class LocalContext {
  public:
@@ -209,24 +208,27 @@ class LocalContext {
                    v8::Handle<v8::ObjectTemplate>(),
                v8::Handle<v8::Value> global_object = v8::Handle<v8::Value>()) {
     v8::Isolate* isolate = v8::Isolate::GetCurrent();
-    HandleScope scope(isolate);
-    context_.Reset(isolate,
-                   Context::New(isolate,
-                                extensions,
-                                global_template,
-                                global_object));
-    context_->Enter();
+    v8::HandleScope scope(isolate);
+    v8::Local<v8::Context> context = v8::Context::New(isolate,
+                                                      extensions,
+                                                      global_template,
+                                                      global_object);
+    context_.Reset(isolate, context);
+    context->Enter();
     // We can't do this later perhaps because of a fatal error.
-    isolate_ = context_->GetIsolate();
+    isolate_ = context->GetIsolate();
   }
 
   virtual ~LocalContext() {
-    context_->Exit();
-    context_.Dispose(isolate_);
+    v8::HandleScope scope(isolate_);
+    v8::Local<v8::Context>::New(isolate_, context_)->Exit();
+    context_.Dispose();
   }
 
-  v8::Context* operator->() { return *context_; }
-  v8::Context* operator*() { return *context_; }
+  v8::Context* operator->() {
+    return *reinterpret_cast<v8::Context**>(&context_);
+  }
+  v8::Context* operator*() { return operator->(); }
   bool IsReady() { return !context_.IsEmpty(); }
 
   v8::Local<v8::Context> local() {
@@ -237,8 +239,6 @@ class LocalContext {
   v8::Persistent<v8::Context> context_;
   v8::Isolate* isolate_;
 };
-}
-typedef v8::LocalContext LocalContext;
 
 static inline v8::Local<v8::Value> v8_num(double x) {
   return v8::Number::New(x);
index 59b3dc3..e37f3db 100644 (file)
@@ -75,12 +75,15 @@ test-serialize/DeserializeFromSecondSerialization: SKIP
 ##############################################################################
 [ $arch == mipsel ]
 
-# BUG(2628): The test sometimes fails on MIPS simulator.
-test-cpu-profiler/SampleWhenFrameIsNotSetup: PASS || FAIL
-
 # BUG(2657): Test sometimes times out on MIPS simulator.
 test-thread-termination/TerminateMultipleV8ThreadsDefaultIsolate: PASS || TIMEOUT
 
+# BUG(1075): Unresolved crashes on MIPS also.
+test-serialize/Deserialize: SKIP
+test-serialize/DeserializeFromSecondSerializationAndRunScript2: SKIP
+test-serialize/DeserializeAndRunScript2: SKIP
+test-serialize/DeserializeFromSecondSerialization: SKIP
+
 ##############################################################################
 [ $arch == android_arm || $arch == android_ia32 ]
 
index 2335d10..87d8d66 100644 (file)
@@ -44,10 +44,10 @@ using ::v8::Function;
 using ::v8::AccessorInfo;
 using ::v8::Extension;
 
-static v8::Handle<Value> handle_property(Local<String> name,
-                                         const AccessorInfo&) {
+static void handle_property(Local<String> name,
+                            const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
-  return v8_num(900);
+  info.GetReturnValue().Set(v8_num(900));
 }
 
 
@@ -65,18 +65,18 @@ THREADED_TEST(PropertyHandler) {
 }
 
 
-static v8::Handle<Value> GetIntValue(Local<String> property,
-                                     const AccessorInfo& info) {
+static void GetIntValue(Local<String> property,
+                        const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   int* value =
       static_cast<int*>(v8::Handle<v8::External>::Cast(info.Data())->Value());
-  return v8_num(*value);
+  info.GetReturnValue().Set(v8_num(*value));
 }
 
 
 static void SetIntValue(Local<String> property,
                         Local<Value> value,
-                        const AccessorInfo& info) {
+                        const v8::PropertyCallbackInfo<void>& info) {
   int* field =
       static_cast<int*>(v8::Handle<v8::External>::Cast(info.Data())->Value());
   *field = value->Int32Value();
@@ -114,19 +114,20 @@ static v8::Handle<v8::Object> x_receiver;
 static v8::Handle<v8::Object> x_holder;
 
 
-static v8::Handle<Value> XGetter(Local<String> name, const AccessorInfo& info) {
+static void XGetter(Local<String> name,
+                    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   v8::Isolate* isolate = v8::Isolate::GetCurrent();
   CHECK_EQ(isolate, info.GetIsolate());
   CHECK_EQ(x_receiver, info.This());
   CHECK_EQ(x_holder, info.Holder());
-  return v8_num(x_register);
+  info.GetReturnValue().Set(v8_num(x_register));
 }
 
 
 static void XSetter(Local<String> name,
                     Local<Value> value,
-                    const AccessorInfo& info) {
+                    const v8::PropertyCallbackInfo<void>& info) {
   v8::Isolate* isolate = v8::Isolate::GetCurrent();
   CHECK_EQ(isolate, info.GetIsolate());
   CHECK_EQ(x_holder, info.This());
@@ -160,11 +161,11 @@ THREADED_TEST(AccessorIC) {
 }
 
 
-static v8::Handle<Value> AccessorProhibitsOverwritingGetter(
+static void AccessorProhibitsOverwritingGetter(
     Local<String> name,
-    const AccessorInfo& info) {
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
-  return v8::True();
+  info.GetReturnValue().Set(true);
 }
 
 
@@ -208,12 +209,13 @@ THREADED_TEST(AccessorProhibitsOverwriting) {
 
 
 template <int C>
-static v8::Handle<Value> HandleAllocatingGetter(Local<String> name,
-                                                const AccessorInfo& info) {
+static void HandleAllocatingGetter(
+    Local<String> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   for (int i = 0; i < C; i++)
     v8::String::New("foo");
-  return v8::String::New("foo");
+  info.GetReturnValue().Set(v8::String::New("foo"));
 }
 
 
@@ -239,8 +241,9 @@ THREADED_TEST(HandleScopePop) {
   CHECK_EQ(count_before, count_after);
 }
 
-static v8::Handle<Value> CheckAccessorArgsCorrect(Local<String> name,
-                                                  const AccessorInfo& info) {
+static void CheckAccessorArgsCorrect(
+    Local<String> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   CHECK(info.GetIsolate() == v8::Isolate::GetCurrent());
   CHECK(info.This() == info.Holder());
   CHECK(info.Data()->Equals(v8::String::New("data")));
@@ -252,7 +255,7 @@ static v8::Handle<Value> CheckAccessorArgsCorrect(Local<String> name,
   CHECK(info.GetIsolate() == v8::Isolate::GetCurrent());
   CHECK(info.This() == info.Holder());
   CHECK(info.Data()->Equals(v8::String::New("data")));
-  return v8::Integer::New(17);
+  info.GetReturnValue().Set(17);
 }
 
 THREADED_TEST(DirectCall) {
@@ -273,12 +276,12 @@ THREADED_TEST(DirectCall) {
   }
 }
 
-static v8::Handle<Value> EmptyGetter(Local<String> name,
-                                     const AccessorInfo& info) {
+static void EmptyGetter(Local<String> name,
+                        const v8::PropertyCallbackInfo<v8::Value>& info) {
   CheckAccessorArgsCorrect(name, info);
   ApiTestFuzzer::Fuzz();
   CheckAccessorArgsCorrect(name, info);
-  return v8::Handle<v8::Value>();
+  info.GetReturnValue().Set(v8::Handle<v8::Value>());
 }
 
 THREADED_TEST(EmptyResult) {
@@ -330,16 +333,17 @@ THREADED_TEST(NoReuseRegress) {
   }
 }
 
-static v8::Handle<Value> ThrowingGetAccessor(Local<String> name,
-                                             const AccessorInfo& info) {
+static void ThrowingGetAccessor(
+    Local<String> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
-  return v8::ThrowException(v8_str("g"));
+  v8::ThrowException(v8_str("g"));
 }
 
 
 static void ThrowingSetAccessor(Local<String> name,
                                 Local<Value> value,
-                                const AccessorInfo& info) {
+                                const v8::PropertyCallbackInfo<void>& info) {
   v8::ThrowException(value);
 }
 
@@ -374,10 +378,10 @@ THREADED_TEST(Regress1054726) {
 }
 
 
-static v8::Handle<Value> AllocGetter(Local<String> name,
-                                     const AccessorInfo& info) {
+static void AllocGetter(Local<String> name,
+                        const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
-  return v8::Array::New(1000);
+  info.GetReturnValue().Set(v8::Array::New(1000));
 }
 
 
@@ -397,8 +401,8 @@ THREADED_TEST(Gc) {
 }
 
 
-static v8::Handle<Value> StackCheck(Local<String> name,
-                                    const AccessorInfo& info) {
+static void StackCheck(Local<String> name,
+                       const v8::PropertyCallbackInfo<v8::Value>& info) {
   i::StackFrameIterator iter(reinterpret_cast<i::Isolate*>(info.GetIsolate()));
   for (int i = 0; !iter.done(); i++) {
     i::StackFrame* frame = iter.frame();
@@ -409,7 +413,6 @@ static v8::Handle<Value> StackCheck(Local<String> name,
     CHECK(code->contains(pc));
     iter.Advance();
   }
-  return v8::Undefined();
 }
 
 
@@ -430,12 +433,12 @@ THREADED_TEST(StackIteration) {
 }
 
 
-static v8::Handle<Value> AllocateHandles(Local<String> name,
-                                         const AccessorInfo& info) {
+static void AllocateHandles(Local<String> name,
+                            const v8::PropertyCallbackInfo<v8::Value>& info) {
   for (int i = 0; i < i::kHandleBlockSize + 1; i++) {
     v8::Local<v8::Value>::New(name);
   }
-  return v8::Integer::New(100);
+  info.GetReturnValue().Set(v8::Integer::New(100));
 }
 
 
@@ -456,16 +459,16 @@ THREADED_TEST(HandleScopeSegment) {
 }
 
 
-v8::Handle<v8::Array> JSONStringifyEnumerator(const AccessorInfo& info) {
+void JSONStringifyEnumerator(const v8::PropertyCallbackInfo<v8::Array>& info) {
   v8::Handle<v8::Array> array = v8::Array::New(1);
   array->Set(0, v8_str("regress"));
-  return array;
+  info.GetReturnValue().Set(array);
 }
 
 
-v8::Handle<v8::Value> JSONStringifyGetter(Local<String> name,
-                                          const AccessorInfo& info) {
-  return v8_str("crbug-161028");
+void JSONStringifyGetter(Local<String> name,
+                         const v8::PropertyCallbackInfo<v8::Value>& info) {
+  info.GetReturnValue().Set(v8_str("crbug-161028"));
 }
 
 
old mode 100755 (executable)
new mode 100644 (file)
index 5d3a79d..34432e3
 #include <signal.h>  // kill
 #include <unistd.h>  // getpid
 #endif  // WIN32
+#include <string>
+#include <map>
 
 #include "v8.h"
 
 #include "api.h"
 #include "arguments.h"
-#include "isolate.h"
+#include "cctest.h"
 #include "compilation-cache.h"
+#include "cpu-profiler.h"
 #include "execution.h"
+#include "isolate.h"
 #include "objects.h"
-#include "snapshot.h"
-#include "platform.h"
-#include "utils.h"
-#include "cctest.h"
 #include "parser.h"
+#include "platform.h"
+#include "snapshot.h"
 #include "unicode-inl.h"
+#include "utils.h"
 
 static const bool kLogThreading = false;
 
@@ -73,6 +76,25 @@ using ::v8::V8;
 using ::v8::Value;
 
 
+#define THREADED_PROFILED_TEST(Name)                                 \
+  static void Test##Name();                                          \
+  TEST(Name##WithProfiler) {                                         \
+    RunWithProfiler(&Test##Name);                                    \
+  }                                                                  \
+  THREADED_TEST(Name)
+
+void RunWithProfiler(void (*test)()) {
+  LocalContext env;
+  v8::HandleScope scope(env->GetIsolate());
+  v8::Local<v8::String> profile_name = v8::String::New("my_profile1");
+  v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
+
+  cpu_profiler->StartCpuProfiling(profile_name);
+  (*test)();
+  cpu_profiler->DeleteAllCpuProfiles();
+}
+
+
 static void ExpectString(const char* code, const char* expected) {
   Local<Value> result = CompileRun(code);
   CHECK(result->IsString());
@@ -116,24 +138,25 @@ static void ExpectUndefined(const char* code) {
 
 
 static int signature_callback_count;
-static v8::Handle<Value> IncrementingSignatureCallback(
-    const v8::Arguments& args) {
+static void IncrementingSignatureCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
   signature_callback_count++;
   v8::Handle<v8::Array> result = v8::Array::New(args.Length());
   for (int i = 0; i < args.Length(); i++)
     result->Set(v8::Integer::New(i), args[i]);
-  return result;
+  args.GetReturnValue().Set(result);
 }
 
 
-static v8::Handle<Value> SignatureCallback(const v8::Arguments& args) {
+static void SignatureCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
   v8::Handle<v8::Array> result = v8::Array::New(args.Length());
   for (int i = 0; i < args.Length(); i++) {
     result->Set(v8::Integer::New(i), args[i]);
   }
-  return result;
+  args.GetReturnValue().Set(result);
 }
 
 
@@ -804,7 +827,7 @@ THREADED_TEST(GlobalProperties) {
 
 
 template<typename T>
-static void CheckReturnValue(const T& t) {
+static void CheckReturnValue(const T& t, i::Address callback) {
   v8::ReturnValue<v8::Value> rv = t.GetReturnValue();
   i::Object** o = *reinterpret_cast<i::Object***>(&rv);
   CHECK_EQ(v8::Isolate::GetCurrent(), t.GetIsolate());
@@ -817,65 +840,38 @@ static void CheckReturnValue(const T& t) {
   rv.Set(v8::Handle<v8::Object>());
   CHECK((*o)->IsTheHole() || (*o)->IsUndefined());
   CHECK_EQ(is_runtime, (*o)->IsTheHole());
-}
-
-static v8::Handle<Value> handle_call(const v8::Arguments& args) {
-  ApiTestFuzzer::Fuzz();
-  CheckReturnValue(args);
-  args.GetReturnValue().Set(v8_str("bad value"));
-  return v8_num(102);
-}
-
-static v8::Handle<Value> handle_call_2(const v8::Arguments& args) {
-  return handle_call(args);
-}
 
-static v8::Handle<Value> handle_call_indirect(const v8::Arguments& args) {
-  ApiTestFuzzer::Fuzz();
-  CheckReturnValue(args);
-  args.GetReturnValue().Set(v8_str("bad value"));
-  args.GetReturnValue().Set(v8_num(102));
-  return v8::Handle<Value>();
+  i::Isolate* isolate = reinterpret_cast<i::Isolate*>(t.GetIsolate());
+  // If CPU profiler is active check that when API callback is invoked
+  // VMState is set to EXTERNAL.
+  if (isolate->cpu_profiler()->is_profiling()) {
+    CHECK_EQ(i::EXTERNAL, isolate->current_vm_state());
+    CHECK(isolate->external_callback());
+    CHECK_EQ(callback, isolate->external_callback());
+  }
 }
 
-static v8::Handle<Value> handle_call_indirect_2(const v8::Arguments& args) {
-  return handle_call_indirect(args);
-}
 
-static void handle_callback(const v8::FunctionCallbackInfo<Value>& info) {
+static void handle_callback_impl(const v8::FunctionCallbackInfo<Value>& info,
+                                 i::Address callback) {
   ApiTestFuzzer::Fuzz();
-  CheckReturnValue(info);
+  CheckReturnValue(info, callback);
   info.GetReturnValue().Set(v8_str("bad value"));
   info.GetReturnValue().Set(v8_num(102));
 }
 
-static void handle_callback_2(const v8::FunctionCallbackInfo<Value>& info) {
-  return handle_callback(info);
-}
-
-static v8::Handle<Value> construct_call(const v8::Arguments& args) {
-  ApiTestFuzzer::Fuzz();
-  CheckReturnValue(args);
-  args.This()->Set(v8_str("x"), v8_num(1));
-  args.This()->Set(v8_str("y"), v8_num(2));
-  args.GetReturnValue().Set(v8_str("bad value"));
-  return args.This();
+static void handle_callback(const v8::FunctionCallbackInfo<Value>& info) {
+  return handle_callback_impl(info, FUNCTION_ADDR(handle_callback));
 }
 
-static v8::Handle<Value> construct_call_indirect(const v8::Arguments& args) {
-  ApiTestFuzzer::Fuzz();
-  CheckReturnValue(args);
-  args.This()->Set(v8_str("x"), v8_num(1));
-  args.This()->Set(v8_str("y"), v8_num(2));
-  args.GetReturnValue().Set(v8_str("bad value"));
-  args.GetReturnValue().Set(args.This());
-  return v8::Handle<Value>();
+static void handle_callback_2(const v8::FunctionCallbackInfo<Value>& info) {
+  return handle_callback_impl(info, FUNCTION_ADDR(handle_callback_2));
 }
 
 static void construct_callback(
     const v8::FunctionCallbackInfo<Value>& info) {
   ApiTestFuzzer::Fuzz();
-  CheckReturnValue(info);
+  CheckReturnValue(info, FUNCTION_ADDR(construct_callback));
   info.This()->Set(v8_str("x"), v8_num(1));
   info.This()->Set(v8_str("y"), v8_num(2));
   info.GetReturnValue().Set(v8_str("bad value"));
@@ -883,28 +879,10 @@ static void construct_callback(
 }
 
 
-static v8::Handle<Value> Return239(
-    Local<String> name, const AccessorInfo& info) {
-  ApiTestFuzzer::Fuzz();
-  CheckReturnValue(info);
-  info.GetReturnValue().Set(v8_str("bad value"));
-  return v8_num(239);
-}
-
-static v8::Handle<Value> Return239Indirect(
-    Local<String> name, const AccessorInfo& info) {
-  ApiTestFuzzer::Fuzz();
-  CheckReturnValue(info);
-  Handle<Value> value = v8_num(239);
-  info.GetReturnValue().Set(v8_str("bad value"));
-  info.GetReturnValue().Set(value);
-  return v8::Handle<Value>();
-}
-
 static void Return239Callback(
     Local<String> name, const v8::PropertyCallbackInfo<Value>& info) {
   ApiTestFuzzer::Fuzz();
-  CheckReturnValue(info);
+  CheckReturnValue(info, FUNCTION_ADDR(Return239Callback));
   info.GetReturnValue().Set(v8_str("bad value"));
   info.GetReturnValue().Set(v8_num(239));
 }
@@ -917,6 +895,7 @@ static void TestFunctionTemplateInitializer(Handler handler,
   {
     LocalContext env;
     v8::HandleScope scope(env->GetIsolate());
+
     Local<v8::FunctionTemplate> fun_templ =
         v8::FunctionTemplate::New(handler);
     Local<Function> fun = fun_templ->GetFunction();
@@ -926,11 +905,12 @@ static void TestFunctionTemplateInitializer(Handler handler,
       CHECK_EQ(102, script->Run()->Int32Value());
     }
   }
-  // Use SetCallHandler to initialize a function template, should work like the
-  // previous one.
+  // Use SetCallHandler to initialize a function template, should work like
+  // the previous one.
   {
     LocalContext env;
     v8::HandleScope scope(env->GetIsolate());
+
     Local<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New();
     fun_templ->SetCallHandler(handler_2);
     Local<Function> fun = fun_templ->GetFunction();
@@ -948,6 +928,7 @@ static void TestFunctionTemplateAccessor(Constructor constructor,
                                          Accessor accessor) {
   LocalContext env;
   v8::HandleScope scope(env->GetIsolate());
+
   Local<v8::FunctionTemplate> fun_templ =
       v8::FunctionTemplate::New(constructor);
   fun_templ->SetClassName(v8_str("funky"));
@@ -969,34 +950,15 @@ static void TestFunctionTemplateAccessor(Constructor constructor,
 }
 
 
-THREADED_TEST(FunctionTemplate) {
-  TestFunctionTemplateInitializer(handle_call, handle_call_2);
-  TestFunctionTemplateInitializer(handle_call_indirect, handle_call_indirect_2);
+THREADED_PROFILED_TEST(FunctionTemplate) {
   TestFunctionTemplateInitializer(handle_callback, handle_callback_2);
-
-  TestFunctionTemplateAccessor(construct_call, Return239);
-  TestFunctionTemplateAccessor(construct_call_indirect, Return239Indirect);
   TestFunctionTemplateAccessor(construct_callback, Return239Callback);
 }
 
 
-static v8::Handle<v8::Value> SimpleDirectCallback(const v8::Arguments& args) {
-  ApiTestFuzzer::Fuzz();
-  CheckReturnValue(args);
-  args.GetReturnValue().Set(v8_str("bad value"));
-  return v8_num(51423 + args.Length());
-}
-
-static v8::Handle<v8::Value> SimpleIndirectCallback(const v8::Arguments& args) {
-  ApiTestFuzzer::Fuzz();
-  CheckReturnValue(args);
-  args.GetReturnValue().Set(v8_num(51423 + args.Length()));
-  return v8::Handle<v8::Value>();
-}
-
 static void SimpleCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
-  CheckReturnValue(info);
+  CheckReturnValue(info, FUNCTION_ADDR(SimpleCallback));
   info.GetReturnValue().Set(v8_num(51423 + info.Length()));
 }
 
@@ -1005,6 +967,7 @@ template<typename Callback>
 static void TestSimpleCallback(Callback callback) {
   LocalContext env;
   v8::HandleScope scope(env->GetIsolate());
+
   v8::Handle<v8::ObjectTemplate> object_template = v8::ObjectTemplate::New();
   object_template->Set("callback", v8::FunctionTemplate::New(callback));
   v8::Local<v8::Object> object = object_template->NewInstance();
@@ -1021,9 +984,7 @@ static void TestSimpleCallback(Callback callback) {
 }
 
 
-THREADED_TEST(SimpleCallback) {
-  TestSimpleCallback(SimpleDirectCallback);
-  TestSimpleCallback(SimpleIndirectCallback);
+THREADED_PROFILED_TEST(SimpleCallback) {
   TestSimpleCallback(SimpleCallback);
 }
 
@@ -1045,38 +1006,44 @@ enum ReturnValueOddball {
 static ReturnValueOddball fast_return_value_void;
 static bool fast_return_value_object_is_empty = false;
 
+// Helper function to avoid compiler error: insufficient contextual information
+// to determine type when applying FUNCTION_ADDR to a template function.
+static i::Address address_of(v8::FunctionCallback callback) {
+  return FUNCTION_ADDR(callback);
+}
+
 template<>
 void FastReturnValueCallback<int32_t>(
     const v8::FunctionCallbackInfo<v8::Value>& info) {
-  CheckReturnValue(info);
+  CheckReturnValue(info, address_of(FastReturnValueCallback<int32_t>));
   info.GetReturnValue().Set(fast_return_value_int32);
 }
 
 template<>
 void FastReturnValueCallback<uint32_t>(
     const v8::FunctionCallbackInfo<v8::Value>& info) {
-  CheckReturnValue(info);
+  CheckReturnValue(info, address_of(FastReturnValueCallback<uint32_t>));
   info.GetReturnValue().Set(fast_return_value_uint32);
 }
 
 template<>
 void FastReturnValueCallback<double>(
     const v8::FunctionCallbackInfo<v8::Value>& info) {
-  CheckReturnValue(info);
+  CheckReturnValue(info, address_of(FastReturnValueCallback<double>));
   info.GetReturnValue().Set(kFastReturnValueDouble);
 }
 
 template<>
 void FastReturnValueCallback<bool>(
     const v8::FunctionCallbackInfo<v8::Value>& info) {
-  CheckReturnValue(info);
+  CheckReturnValue(info, address_of(FastReturnValueCallback<bool>));
   info.GetReturnValue().Set(fast_return_value_bool);
 }
 
 template<>
 void FastReturnValueCallback<void>(
     const v8::FunctionCallbackInfo<v8::Value>& info) {
-  CheckReturnValue(info);
+  CheckReturnValue(info, address_of(FastReturnValueCallback<void>));
   switch (fast_return_value_void) {
     case kNullReturnValue:
       info.GetReturnValue().SetNull();
@@ -1110,7 +1077,7 @@ Handle<Value> TestFastReturnValues() {
   return scope.Close(CompileRun("callback_object.callback()"));
 }
 
-THREADED_TEST(FastReturnValues) {
+THREADED_PROFILED_TEST(FastReturnValues) {
   LocalContext env;
   v8::HandleScope scope(v8::Isolate::GetCurrent());
   v8::Handle<v8::Value> value;
@@ -1182,7 +1149,7 @@ THREADED_TEST(FunctionTemplateSetLength) {
   v8::HandleScope scope(env->GetIsolate());
   {
     Local<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(
-        handle_call, Handle<v8::Value>(), Handle<v8::Signature>(), 23);
+        handle_callback, Handle<v8::Value>(), Handle<v8::Signature>(), 23);
     Local<Function> fun = fun_templ->GetFunction();
     env->Global()->Set(v8_str("obj"), fun);
     Local<Script> script = v8_compile("obj.length");
@@ -1190,7 +1157,7 @@ THREADED_TEST(FunctionTemplateSetLength) {
   }
   {
     Local<v8::FunctionTemplate> fun_templ =
-        v8::FunctionTemplate::New(handle_call);
+        v8::FunctionTemplate::New(handle_callback);
     fun_templ->SetLength(22);
     Local<Function> fun = fun_templ->GetFunction();
     env->Global()->Set(v8_str("obj"), fun);
@@ -1200,7 +1167,7 @@ THREADED_TEST(FunctionTemplateSetLength) {
   {
     // Without setting length it defaults to 0.
     Local<v8::FunctionTemplate> fun_templ =
-        v8::FunctionTemplate::New(handle_call);
+        v8::FunctionTemplate::New(handle_callback);
     Local<Function> fun = fun_templ->GetFunction();
     env->Global()->Set(v8_str("obj"), fun);
     Local<Script> script = v8_compile("obj.length");
@@ -1210,10 +1177,10 @@ THREADED_TEST(FunctionTemplateSetLength) {
 
 
 static void* expected_ptr;
-static v8::Handle<v8::Value> callback(const v8::Arguments& args) {
+static void callback(const v8::FunctionCallbackInfo<v8::Value>& args) {
   void* ptr = v8::External::Cast(*args.Data())->Value();
   CHECK_EQ(expected_ptr, ptr);
-  return v8::True();
+  args.GetReturnValue().Set(true);
 }
 
 
@@ -1591,15 +1558,16 @@ THREADED_TEST(Boolean) {
 }
 
 
-static v8::Handle<Value> DummyCallHandler(const v8::Arguments& args) {
+static void DummyCallHandler(const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
-  return v8_num(13.4);
+  args.GetReturnValue().Set(v8_num(13.4));
 }
 
 
-static v8::Handle<Value> GetM(Local<String> name, const AccessorInfo&) {
+static void GetM(Local<String> name,
+                 const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
-  return v8_num(876);
+  info.GetReturnValue().Set(v8_num(876));
 }
 
 
@@ -1645,15 +1613,16 @@ THREADED_TEST(ObjectTemplate) {
 }
 
 
-static v8::Handle<Value> GetFlabby(const v8::Arguments& args) {
+static void GetFlabby(const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
-  return v8_num(17.2);
+  args.GetReturnValue().Set(v8_num(17.2));
 }
 
 
-static v8::Handle<Value> GetKnurd(Local<String> property, const AccessorInfo&) {
+static void GetKnurd(Local<String> property,
+                     const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
-  return v8_num(15.2);
+  info.GetReturnValue().Set(v8_num(15.2));
 }
 
 
@@ -1716,75 +1685,73 @@ THREADED_TEST(DescriptorInheritance) {
 int echo_named_call_count;
 
 
-static v8::Handle<Value> EchoNamedProperty(Local<String> name,
-                                           const AccessorInfo& info) {
+static void EchoNamedProperty(Local<String> name,
+                              const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   CHECK_EQ(v8_str("data"), info.Data());
   echo_named_call_count++;
-  return name;
+  info.GetReturnValue().Set(name);
 }
 
 // Helper functions for Interceptor/Accessor interaction tests
 
-Handle<Value> SimpleAccessorGetter(Local<String> name,
-                                   const AccessorInfo& info) {
+void SimpleAccessorGetter(Local<String> name,
+                          const v8::PropertyCallbackInfo<v8::Value>& info) {
   Handle<Object> self = info.This();
-  return self->Get(String::Concat(v8_str("accessor_"), name));
+  info.GetReturnValue().Set(
+      self->Get(String::Concat(v8_str("accessor_"), name)));
 }
 
 void SimpleAccessorSetter(Local<String> name, Local<Value> value,
-                          const AccessorInfo& info) {
+                          const v8::PropertyCallbackInfo<void>& info) {
   Handle<Object> self = info.This();
   self->Set(String::Concat(v8_str("accessor_"), name), value);
 }
 
-Handle<Value> EmptyInterceptorGetter(Local<String> name,
-                                     const AccessorInfo& info) {
-  return Handle<Value>();
+void EmptyInterceptorGetter(Local<String> name,
+                            const v8::PropertyCallbackInfo<v8::Value>& info) {
 }
 
-Handle<Value> EmptyInterceptorSetter(Local<String> name,
-                                     Local<Value> value,
-                                     const AccessorInfo& info) {
-  return Handle<Value>();
+void EmptyInterceptorSetter(Local<String> name,
+                            Local<Value> value,
+                            const v8::PropertyCallbackInfo<v8::Value>& info) {
 }
 
-Handle<Value> InterceptorGetter(Local<String> name,
-                                const AccessorInfo& info) {
+void InterceptorGetter(Local<String> name,
+                       const v8::PropertyCallbackInfo<v8::Value>& info) {
   // Intercept names that start with 'interceptor_'.
   String::Utf8Value utf8(name);
   char* name_str = *utf8;
   char prefix[] = "interceptor_";
   int i;
   for (i = 0; name_str[i] && prefix[i]; ++i) {
-    if (name_str[i] != prefix[i]) return Handle<Value>();
+    if (name_str[i] != prefix[i]) return;
   }
   Handle<Object> self = info.This();
-  return self->GetHiddenValue(v8_str(name_str + i));
+  info.GetReturnValue().Set(self->GetHiddenValue(v8_str(name_str + i)));
 }
 
-Handle<Value> InterceptorSetter(Local<String> name,
-                                Local<Value> value,
-                                const AccessorInfo& info) {
+void InterceptorSetter(Local<String> name,
+                       Local<Value> value,
+                       const v8::PropertyCallbackInfo<v8::Value>& info) {
   // Intercept accesses that set certain integer values.
   if (value->IsInt32() && value->Int32Value() < 10000) {
     Handle<Object> self = info.This();
     self->SetHiddenValue(name, value);
-    return value;
+    info.GetReturnValue().Set(value);
   }
-  return Handle<Value>();
 }
 
 void AddAccessor(Handle<FunctionTemplate> templ,
                  Handle<String> name,
-                 v8::AccessorGetter getter,
-                 v8::AccessorSetter setter) {
+                 v8::AccessorGetterCallback getter,
+                 v8::AccessorSetterCallback setter) {
   templ->PrototypeTemplate()->SetAccessor(name, getter, setter);
 }
 
 void AddInterceptor(Handle<FunctionTemplate> templ,
-                    v8::NamedPropertyGetter getter,
-                    v8::NamedPropertySetter setter) {
+                    v8::NamedPropertyGetterCallback getter,
+                    v8::NamedPropertySetterCallback setter) {
   templ->InstanceTemplate()->SetNamedPropertyHandler(getter, setter);
 }
 
@@ -2025,12 +1992,13 @@ THREADED_TEST(NamedPropertyHandlerGetter) {
 int echo_indexed_call_count = 0;
 
 
-static v8::Handle<Value> EchoIndexedProperty(uint32_t index,
-                                             const AccessorInfo& info) {
+static void EchoIndexedProperty(
+    uint32_t index,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   CHECK_EQ(v8_num(637), info.Data());
   echo_indexed_call_count++;
-  return v8_num(index);
+  info.GetReturnValue().Set(v8_num(index));
 }
 
 
@@ -2053,7 +2021,7 @@ v8::Handle<v8::Object> bottom;
 static void CheckThisIndexedPropertyHandler(
     uint32_t index,
     const v8::PropertyCallbackInfo<v8::Value>& info) {
-  CheckReturnValue(info);
+  CheckReturnValue(info, FUNCTION_ADDR(CheckThisIndexedPropertyHandler));
   ApiTestFuzzer::Fuzz();
   CHECK(info.This()->Equals(bottom));
 }
@@ -2061,7 +2029,7 @@ static void CheckThisIndexedPropertyHandler(
 static void CheckThisNamedPropertyHandler(
     Local<String> name,
     const v8::PropertyCallbackInfo<v8::Value>& info) {
-  CheckReturnValue(info);
+  CheckReturnValue(info, FUNCTION_ADDR(CheckThisNamedPropertyHandler));
   ApiTestFuzzer::Fuzz();
   CHECK(info.This()->Equals(bottom));
 }
@@ -2070,7 +2038,7 @@ void CheckThisIndexedPropertySetter(
     uint32_t index,
     Local<Value> value,
     const v8::PropertyCallbackInfo<v8::Value>& info) {
-  CheckReturnValue(info);
+  CheckReturnValue(info, FUNCTION_ADDR(CheckThisIndexedPropertySetter));
   ApiTestFuzzer::Fuzz();
   CHECK(info.This()->Equals(bottom));
 }
@@ -2080,7 +2048,7 @@ void CheckThisNamedPropertySetter(
     Local<String> property,
     Local<Value> value,
     const v8::PropertyCallbackInfo<v8::Value>& info) {
-  CheckReturnValue(info);
+  CheckReturnValue(info, FUNCTION_ADDR(CheckThisNamedPropertySetter));
   ApiTestFuzzer::Fuzz();
   CHECK(info.This()->Equals(bottom));
 }
@@ -2088,7 +2056,7 @@ void CheckThisNamedPropertySetter(
 void CheckThisIndexedPropertyQuery(
     uint32_t index,
     const v8::PropertyCallbackInfo<v8::Integer>& info) {
-  CheckReturnValue(info);
+  CheckReturnValue(info, FUNCTION_ADDR(CheckThisIndexedPropertyQuery));
   ApiTestFuzzer::Fuzz();
   CHECK(info.This()->Equals(bottom));
 }
@@ -2097,7 +2065,7 @@ void CheckThisIndexedPropertyQuery(
 void CheckThisNamedPropertyQuery(
     Local<String> property,
     const v8::PropertyCallbackInfo<v8::Integer>& info) {
-  CheckReturnValue(info);
+  CheckReturnValue(info, FUNCTION_ADDR(CheckThisNamedPropertyQuery));
   ApiTestFuzzer::Fuzz();
   CHECK(info.This()->Equals(bottom));
 }
@@ -2106,7 +2074,7 @@ void CheckThisNamedPropertyQuery(
 void CheckThisIndexedPropertyDeleter(
     uint32_t index,
     const v8::PropertyCallbackInfo<v8::Boolean>& info) {
-  CheckReturnValue(info);
+  CheckReturnValue(info, FUNCTION_ADDR(CheckThisIndexedPropertyDeleter));
   ApiTestFuzzer::Fuzz();
   CHECK(info.This()->Equals(bottom));
 }
@@ -2115,7 +2083,7 @@ void CheckThisIndexedPropertyDeleter(
 void CheckThisNamedPropertyDeleter(
     Local<String> property,
     const v8::PropertyCallbackInfo<v8::Boolean>& info) {
-  CheckReturnValue(info);
+  CheckReturnValue(info, FUNCTION_ADDR(CheckThisNamedPropertyDeleter));
   ApiTestFuzzer::Fuzz();
   CHECK(info.This()->Equals(bottom));
 }
@@ -2123,7 +2091,7 @@ void CheckThisNamedPropertyDeleter(
 
 void CheckThisIndexedPropertyEnumerator(
     const v8::PropertyCallbackInfo<v8::Array>& info) {
-  CheckReturnValue(info);
+  CheckReturnValue(info, FUNCTION_ADDR(CheckThisIndexedPropertyEnumerator));
   ApiTestFuzzer::Fuzz();
   CHECK(info.This()->Equals(bottom));
 }
@@ -2131,13 +2099,13 @@ void CheckThisIndexedPropertyEnumerator(
 
 void CheckThisNamedPropertyEnumerator(
     const v8::PropertyCallbackInfo<v8::Array>& info) {
-  CheckReturnValue(info);
+  CheckReturnValue(info, FUNCTION_ADDR(CheckThisNamedPropertyEnumerator));
   ApiTestFuzzer::Fuzz();
   CHECK(info.This()->Equals(bottom));
 }
 
 
-THREADED_TEST(PropertyHandlerInPrototype) {
+THREADED_PROFILED_TEST(PropertyHandlerInPrototype) {
   LocalContext env;
   v8::HandleScope scope(env->GetIsolate());
 
@@ -2186,23 +2154,22 @@ THREADED_TEST(PropertyHandlerInPrototype) {
 }
 
 
-static v8::Handle<Value> PrePropertyHandlerGet(Local<String> key,
-                                               const AccessorInfo& info) {
+static void PrePropertyHandlerGet(
+    Local<String> key,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   if (v8_str("pre")->Equals(key)) {
-    return v8_str("PrePropertyHandler: pre");
+    info.GetReturnValue().Set(v8_str("PrePropertyHandler: pre"));
   }
-  return v8::Handle<String>();
 }
 
 
-static v8::Handle<v8::Integer> PrePropertyHandlerQuery(Local<String> key,
-                                                       const AccessorInfo&) {
+static void PrePropertyHandlerQuery(
+    Local<String> key,
+    const v8::PropertyCallbackInfo<v8::Integer>& info) {
   if (v8_str("pre")->Equals(key)) {
-    return v8::Integer::New(v8::None);
+    info.GetReturnValue().Set(static_cast<int32_t>(v8::None));
   }
-
-  return v8::Handle<v8::Integer>();  // do not intercept the call
 }
 
 
@@ -2237,27 +2204,29 @@ v8::Handle<Script> call_recursively_script;
 static const int kTargetRecursionDepth = 200;  // near maximum
 
 
-static v8::Handle<Value> CallScriptRecursivelyCall(const v8::Arguments& args) {
+static void CallScriptRecursivelyCall(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
   int depth = args.This()->Get(v8_str("depth"))->Int32Value();
-  if (depth == kTargetRecursionDepth) return v8::Undefined();
+  if (depth == kTargetRecursionDepth) return;
   args.This()->Set(v8_str("depth"), v8::Integer::New(depth + 1));
-  return call_recursively_script->Run();
+  args.GetReturnValue().Set(call_recursively_script->Run());
 }
 
 
-static v8::Handle<Value> CallFunctionRecursivelyCall(
-    const v8::Arguments& args) {
+static void CallFunctionRecursivelyCall(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
   int depth = args.This()->Get(v8_str("depth"))->Int32Value();
   if (depth == kTargetRecursionDepth) {
     printf("[depth = %d]\n", depth);
-    return v8::Undefined();
+    return;
   }
   args.This()->Set(v8_str("depth"), v8::Integer::New(depth + 1));
   v8::Handle<Value> function =
       args.This()->Get(v8_str("callFunctionRecursively"));
-  return function.As<Function>()->Call(args.This(), 0, NULL);
+  args.GetReturnValue().Set(
+      function.As<Function>()->Call(args.This(), 0, NULL));
 }
 
 
@@ -2280,18 +2249,20 @@ THREADED_TEST(DeepCrossLanguageRecursion) {
 }
 
 
-static v8::Handle<Value>
-    ThrowingPropertyHandlerGet(Local<String> key, const AccessorInfo&) {
+static void ThrowingPropertyHandlerGet(
+    Local<String> key,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
-  return v8::ThrowException(key);
+  info.GetReturnValue().Set(v8::ThrowException(key));
 }
 
 
-static v8::Handle<Value> ThrowingPropertyHandlerSet(Local<String> key,
-                                                    Local<Value>,
-                                                    const AccessorInfo&) {
+static void ThrowingPropertyHandlerSet(
+    Local<String> key,
+    Local<Value>,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   v8::ThrowException(key);
-  return v8::Undefined();  // not the same as v8::Handle<v8::Value>()
+  info.GetReturnValue().SetUndefined();  // not the same as empty handle
 }
 
 
@@ -2630,12 +2601,12 @@ THREADED_TEST(ArrayBuffer_JSInternalToExternal) {
   v8::HandleScope handle_scope(isolate);
 
 
-  v8::Handle<v8::Value> result =
+  v8::Local<v8::Value> result =
       CompileRun("var ab1 = new ArrayBuffer(2);"
                  "var u8_a = new Uint8Array(ab1);"
                  "u8_a[0] = 0xAA;"
                  "u8_a[1] = 0xFF; u8_a.buffer");
-  Local<v8::ArrayBuffer> ab1 = v8::ArrayBuffer::Cast(*result);
+  Local<v8::ArrayBuffer> ab1 = Local<v8::ArrayBuffer>::Cast(result);
   CHECK_EQ(2, static_cast<int>(ab1->ByteLength()));
   CHECK(!ab1->IsExternal());
   ScopedArrayBufferContents ab1_contents(ab1->Externalize());
@@ -2698,12 +2669,31 @@ THREADED_TEST(ArrayBuffer_External) {
 }
 
 
+static void CheckDataViewIsNeutered(v8::Handle<v8::DataView> dv) {
+  CHECK_EQ(0, static_cast<int>(dv->ByteLength()));
+  CHECK_EQ(0, static_cast<int>(dv->ByteOffset()));
+}
+
+
 static void CheckIsNeutered(v8::Handle<v8::TypedArray> ta) {
   CHECK_EQ(0, static_cast<int>(ta->ByteLength()));
   CHECK_EQ(0, static_cast<int>(ta->Length()));
   CHECK_EQ(0, static_cast<int>(ta->ByteOffset()));
 }
 
+
+static void CheckIsTypedArrayVarNeutered(const char* name) {
+  i::ScopedVector<char> source(1024);
+  i::OS::SNPrintF(source,
+      "%s.byteLength == 0 && %s.byteOffset == 0 && %s.length == 0",
+      name, name, name);
+  CHECK(CompileRun(source.start())->IsTrue());
+  v8::Handle<v8::TypedArray> ta =
+    v8::Handle<v8::TypedArray>::Cast(CompileRun(name));
+  CheckIsNeutered(ta);
+}
+
+
 template <typename TypedArray, int kElementSize>
 static Handle<TypedArray> CreateAndCheck(Handle<v8::ArrayBuffer> ab,
                                          int byteOffset,
@@ -2745,6 +2735,10 @@ THREADED_TEST(ArrayBuffer_NeuteringApi) {
   v8::Handle<v8::Float64Array> f64a =
     CreateAndCheck<v8::Float64Array, 8>(buffer, 8, 127);
 
+  v8::Handle<v8::DataView> dv = v8::DataView::New(buffer, 1, 1023);
+  CHECK_EQ(1, static_cast<int>(dv->ByteOffset()));
+  CHECK_EQ(1023, static_cast<int>(dv->ByteLength()));
+
   ScopedArrayBufferContents contents(buffer->Externalize());
   buffer->Neuter();
   CHECK_EQ(0, static_cast<int>(buffer->ByteLength()));
@@ -2757,6 +2751,7 @@ THREADED_TEST(ArrayBuffer_NeuteringApi) {
   CheckIsNeutered(i32a);
   CheckIsNeutered(f32a);
   CheckIsNeutered(f64a);
+  CheckDataViewIsNeutered(dv);
 }
 
 THREADED_TEST(ArrayBuffer_NeuteringScript) {
@@ -2774,40 +2769,32 @@ THREADED_TEST(ArrayBuffer_NeuteringScript) {
       "var u32a = new Uint32Array(ab, 4, 255);"
       "var i32a = new Int32Array(ab, 4, 255);"
       "var f32a = new Float32Array(ab, 4, 255);"
-      "var f64a = new Float64Array(ab, 8, 127);");
-
-  v8::Handle<v8::ArrayBuffer> ab(v8::ArrayBuffer::Cast(*CompileRun("ab")));
-
-  v8::Handle<v8::Uint8Array> u8a(v8::Uint8Array::Cast(*CompileRun("u8a")));
-  v8::Handle<v8::Uint8ClampedArray> u8c(
-    v8::Uint8ClampedArray::Cast(*CompileRun("u8c")));
-  v8::Handle<v8::Int8Array> i8a(v8::Int8Array::Cast(*CompileRun("i8a")));
-
-  v8::Handle<v8::Uint16Array> u16a(
-    v8::Uint16Array::Cast(*CompileRun("u16a")));
-  v8::Handle<v8::Int16Array> i16a(
-    v8::Int16Array::Cast(*CompileRun("i16a")));
-  v8::Handle<v8::Uint32Array> u32a(
-    v8::Uint32Array::Cast(*CompileRun("u32a")));
-  v8::Handle<v8::Int32Array> i32a(
-    v8::Int32Array::Cast(*CompileRun("i32a")));
-  v8::Handle<v8::Float32Array> f32a(
-    v8::Float32Array::Cast(*CompileRun("f32a")));
-  v8::Handle<v8::Float64Array> f64a(
-    v8::Float64Array::Cast(*CompileRun("f64a")));
+      "var f64a = new Float64Array(ab, 8, 127);"
+      "var dv = new DataView(ab, 1, 1023);");
+
+  v8::Handle<v8::ArrayBuffer> ab =
+      Local<v8::ArrayBuffer>::Cast(CompileRun("ab"));
+
+  v8::Handle<v8::DataView> dv =
+    v8::Handle<v8::DataView>::Cast(CompileRun("dv"));
 
   ScopedArrayBufferContents contents(ab->Externalize());
   ab->Neuter();
   CHECK_EQ(0, static_cast<int>(ab->ByteLength()));
-  CheckIsNeutered(u8a);
-  CheckIsNeutered(u8c);
-  CheckIsNeutered(i8a);
-  CheckIsNeutered(u16a);
-  CheckIsNeutered(i16a);
-  CheckIsNeutered(u32a);
-  CheckIsNeutered(i32a);
-  CheckIsNeutered(f32a);
-  CheckIsNeutered(f64a);
+  CHECK_EQ(0, CompileRun("ab.byteLength")->Int32Value());
+
+  CheckIsTypedArrayVarNeutered("u8a");
+  CheckIsTypedArrayVarNeutered("u8c");
+  CheckIsTypedArrayVarNeutered("i8a");
+  CheckIsTypedArrayVarNeutered("u16a");
+  CheckIsTypedArrayVarNeutered("i16a");
+  CheckIsTypedArrayVarNeutered("u32a");
+  CheckIsTypedArrayVarNeutered("i32a");
+  CheckIsTypedArrayVarNeutered("f32a");
+  CheckIsTypedArrayVarNeutered("f64a");
+
+  CHECK(CompileRun("dv.byteLength == 0 && dv.byteOffset == 0")->IsTrue());
+  CheckDataViewIsNeutered(dv);
 }
 
 
@@ -2893,10 +2880,9 @@ THREADED_TEST(Regress97784) {
 
 
 static bool interceptor_for_hidden_properties_called;
-static v8::Handle<Value> InterceptorForHiddenProperties(
-    Local<String> name, const AccessorInfo& info) {
+static void InterceptorForHiddenProperties(
+    Local<String> name, const v8::PropertyCallbackInfo<v8::Value>& info) {
   interceptor_for_hidden_properties_called = true;
-  return v8::Handle<Value>();
 }
 
 
@@ -2986,7 +2972,7 @@ THREADED_TEST(ResettingGlobalHandle) {
   }
   v8::internal::GlobalHandles* global_handles =
       reinterpret_cast<v8::internal::Isolate*>(isolate)->global_handles();
-  int initial_handle_count = global_handles->NumberOfGlobalHandles();
+  int initial_handle_count = global_handles->global_handles_count();
   {
     v8::HandleScope scope(isolate);
     CHECK_EQ(v8::Local<String>::New(isolate, global)->Length(), 3);
@@ -2995,13 +2981,13 @@ THREADED_TEST(ResettingGlobalHandle) {
     v8::HandleScope scope(isolate);
     global.Reset(isolate, v8_str("longer"));
   }
-  CHECK_EQ(global_handles->NumberOfGlobalHandles(), initial_handle_count);
+  CHECK_EQ(global_handles->global_handles_count(), initial_handle_count);
   {
     v8::HandleScope scope(isolate);
     CHECK_EQ(v8::Local<String>::New(isolate, global)->Length(), 6);
   }
   global.Dispose(isolate);
-  CHECK_EQ(global_handles->NumberOfGlobalHandles(), initial_handle_count - 1);
+  CHECK_EQ(global_handles->global_handles_count(), initial_handle_count - 1);
 }
 
 
@@ -3014,7 +3000,7 @@ THREADED_TEST(ResettingGlobalHandleToEmpty) {
   }
   v8::internal::GlobalHandles* global_handles =
       reinterpret_cast<v8::internal::Isolate*>(isolate)->global_handles();
-  int initial_handle_count = global_handles->NumberOfGlobalHandles();
+  int initial_handle_count = global_handles->global_handles_count();
   {
     v8::HandleScope scope(isolate);
     CHECK_EQ(v8::Local<String>::New(isolate, global)->Length(), 3);
@@ -3025,7 +3011,7 @@ THREADED_TEST(ResettingGlobalHandleToEmpty) {
     global.Reset(isolate, empty);
   }
   CHECK(global.IsEmpty());
-  CHECK_EQ(global_handles->NumberOfGlobalHandles(), initial_handle_count - 1);
+  CHECK_EQ(global_handles->global_handles_count(), initial_handle_count - 1);
 }
 
 
@@ -3039,17 +3025,15 @@ THREADED_TEST(ClearAndLeakGlobal) {
     Local<String> str = v8_str("str");
     global_handles =
         reinterpret_cast<v8::internal::Isolate*>(isolate)->global_handles();
-    initial_handle_count = global_handles->NumberOfGlobalHandles();
+    initial_handle_count = global_handles->global_handles_count();
     global.Reset(isolate, str);
   }
-  CHECK_EQ(global_handles->NumberOfGlobalHandles(), initial_handle_count + 1);
+  CHECK_EQ(global_handles->global_handles_count(), initial_handle_count + 1);
   String* str = global.ClearAndLeak();
   CHECK(global.IsEmpty());
-  CHECK_EQ(global_handles->NumberOfGlobalHandles(), initial_handle_count + 1);
-  v8::Persistent<String>* new_global =
-      reinterpret_cast<v8::Persistent<String>*>(&str);
-  new_global->Dispose();
-  CHECK_EQ(global_handles->NumberOfGlobalHandles(), initial_handle_count);
+  CHECK_EQ(global_handles->global_handles_count(), initial_handle_count + 1);
+  global_handles->Destroy(reinterpret_cast<i::Object**>(str));
+  CHECK_EQ(global_handles->global_handles_count(), initial_handle_count);
 }
 
 
@@ -3102,6 +3086,11 @@ static void WeakPointerCallback(v8::Isolate* isolate,
 }
 
 
+static UniqueId MakeUniqueId(const Persistent<Value>& p) {
+  return UniqueId(reinterpret_cast<uintptr_t>(*v8::Utils::OpenPersistent(p)));
+}
+
+
 THREADED_TEST(ApiObjectGroups) {
   LocalContext env;
   v8::Isolate* iso = env->GetIsolate();
@@ -3121,16 +3110,16 @@ THREADED_TEST(ApiObjectGroups) {
     g1s1.Reset(iso, Object::New());
     g1s2.Reset(iso, Object::New());
     g1c1.Reset(iso, Object::New());
-    g1s1.MakeWeak(iso, &counter, &WeakPointerCallback);
-    g1s2.MakeWeak(iso, &counter, &WeakPointerCallback);
-    g1c1.MakeWeak(iso, &counter, &WeakPointerCallback);
+    g1s1.MakeWeak(&counter, &WeakPointerCallback);
+    g1s2.MakeWeak(&counter, &WeakPointerCallback);
+    g1c1.MakeWeak(&counter, &WeakPointerCallback);
 
     g2s1.Reset(iso, Object::New());
     g2s2.Reset(iso, Object::New());
     g2c1.Reset(iso, Object::New());
-    g2s1.MakeWeak(iso, &counter, &WeakPointerCallback);
-    g2s2.MakeWeak(iso, &counter, &WeakPointerCallback);
-    g2c1.MakeWeak(iso, &counter, &WeakPointerCallback);
+    g2s1.MakeWeak(&counter, &WeakPointerCallback);
+    g2s2.MakeWeak(&counter, &WeakPointerCallback);
+    g2c1.MakeWeak(&counter, &WeakPointerCallback);
   }
 
   Persistent<Value> root(iso, g1s1);  // make a root.
@@ -3139,14 +3128,14 @@ THREADED_TEST(ApiObjectGroups) {
   {
     HandleScope scope(iso);
     CHECK(Local<Object>::New(iso, g1s2.As<Object>())->
-            Set(0, Local<Value>(*g2s2)));
+            Set(0, Local<Value>::New(iso, g2s2)));
     CHECK(Local<Object>::New(iso, g2s1.As<Object>())->
-            Set(0, Local<Value>(*g1s1)));
+            Set(0, Local<Value>::New(iso, g1s1)));
   }
 
   {
-    UniqueId id1(reinterpret_cast<intptr_t>(*g1s1));
-    UniqueId id2(reinterpret_cast<intptr_t>(*g2s2));
+    UniqueId id1 = MakeUniqueId(g1s1);
+    UniqueId id2 = MakeUniqueId(g2s2);
     iso->SetObjectGroupId(g1s1, id1);
     iso->SetObjectGroupId(g1s2, id1);
     iso->SetReferenceFromGroup(id1, g1c1);
@@ -3163,7 +3152,7 @@ THREADED_TEST(ApiObjectGroups) {
   CHECK_EQ(0, counter.NumberOfWeakCalls());
 
   // Weaken the root.
-  root.MakeWeak(iso, &counter, &WeakPointerCallback);
+  root.MakeWeak(&counter, &WeakPointerCallback);
   // But make children strong roots---all the objects (except for children)
   // should be collectable now.
   g1c1.ClearWeak(iso);
@@ -3171,8 +3160,8 @@ THREADED_TEST(ApiObjectGroups) {
 
   // Groups are deleted, rebuild groups.
   {
-    UniqueId id1(reinterpret_cast<intptr_t>(*g1s1));
-    UniqueId id2(reinterpret_cast<intptr_t>(*g2s2));
+    UniqueId id1 = MakeUniqueId(g1s1);
+    UniqueId id2 = MakeUniqueId(g2s2);
     iso->SetObjectGroupId(g1s1, id1);
     iso->SetObjectGroupId(g1s2, id1);
     iso->SetReferenceFromGroup(id1, g1c1);
@@ -3187,8 +3176,8 @@ THREADED_TEST(ApiObjectGroups) {
   CHECK_EQ(5, counter.NumberOfWeakCalls());
 
   // And now make children weak again and collect them.
-  g1c1.MakeWeak(iso, &counter, &WeakPointerCallback);
-  g2c1.MakeWeak(iso, &counter, &WeakPointerCallback);
+  g1c1.MakeWeak(&counter, &WeakPointerCallback);
+  g2c1.MakeWeak(&counter, &WeakPointerCallback);
 
   heap->CollectAllGarbage(i::Heap::kAbortIncrementalMarkingMask);
   CHECK_EQ(7, counter.NumberOfWeakCalls());
@@ -3215,29 +3204,29 @@ THREADED_TEST(ApiObjectGroupsCycle) {
     HandleScope scope(iso);
     g1s1.Reset(iso, Object::New());
     g1s2.Reset(iso, Object::New());
-    g1s1.MakeWeak(iso, &counter, &WeakPointerCallback);
-    g1s2.MakeWeak(iso, &counter, &WeakPointerCallback);
+    g1s1.MakeWeak(&counter, &WeakPointerCallback);
+    g1s2.MakeWeak(&counter, &WeakPointerCallback);
     CHECK(g1s1.IsWeak(iso));
     CHECK(g1s2.IsWeak(iso));
 
     g2s1.Reset(iso, Object::New());
     g2s2.Reset(iso, Object::New());
-    g2s1.MakeWeak(iso, &counter, &WeakPointerCallback);
-    g2s2.MakeWeak(iso, &counter, &WeakPointerCallback);
+    g2s1.MakeWeak(&counter, &WeakPointerCallback);
+    g2s2.MakeWeak(&counter, &WeakPointerCallback);
     CHECK(g2s1.IsWeak(iso));
     CHECK(g2s2.IsWeak(iso));
 
     g3s1.Reset(iso, Object::New());
     g3s2.Reset(iso, Object::New());
-    g3s1.MakeWeak(iso, &counter, &WeakPointerCallback);
-    g3s2.MakeWeak(iso, &counter, &WeakPointerCallback);
+    g3s1.MakeWeak(&counter, &WeakPointerCallback);
+    g3s2.MakeWeak(&counter, &WeakPointerCallback);
     CHECK(g3s1.IsWeak(iso));
     CHECK(g3s2.IsWeak(iso));
 
     g4s1.Reset(iso, Object::New());
     g4s2.Reset(iso, Object::New());
-    g4s1.MakeWeak(iso, &counter, &WeakPointerCallback);
-    g4s2.MakeWeak(iso, &counter, &WeakPointerCallback);
+    g4s1.MakeWeak(&counter, &WeakPointerCallback);
+    g4s2.MakeWeak(&counter, &WeakPointerCallback);
     CHECK(g4s1.IsWeak(iso));
     CHECK(g4s2.IsWeak(iso));
   }
@@ -3248,10 +3237,10 @@ THREADED_TEST(ApiObjectGroupsCycle) {
   // G1: { g1s1, g2s1 }, g1s1 implicitly references g2s1, ditto for other
   // groups.
   {
-    UniqueId id1(reinterpret_cast<intptr_t>(*g1s1));
-    UniqueId id2(reinterpret_cast<intptr_t>(*g2s1));
-    UniqueId id3(reinterpret_cast<intptr_t>(*g3s1));
-    UniqueId id4(reinterpret_cast<intptr_t>(*g4s1));
+    UniqueId id1 = MakeUniqueId(g1s1);
+    UniqueId id2 = MakeUniqueId(g2s1);
+    UniqueId id3 = MakeUniqueId(g3s1);
+    UniqueId id4 = MakeUniqueId(g4s1);
     iso->SetObjectGroupId(g1s1, id1);
     iso->SetObjectGroupId(g1s2, id1);
     iso->SetReferenceFromGroup(id1, g2s1);
@@ -3274,14 +3263,14 @@ THREADED_TEST(ApiObjectGroupsCycle) {
   CHECK_EQ(0, counter.NumberOfWeakCalls());
 
   // Weaken the root.
-  root.MakeWeak(iso, &counter, &WeakPointerCallback);
+  root.MakeWeak(&counter, &WeakPointerCallback);
 
   // Groups are deleted, rebuild groups.
   {
-    UniqueId id1(reinterpret_cast<intptr_t>(*g1s1));
-    UniqueId id2(reinterpret_cast<intptr_t>(*g2s1));
-    UniqueId id3(reinterpret_cast<intptr_t>(*g3s1));
-    UniqueId id4(reinterpret_cast<intptr_t>(*g4s1));
+    UniqueId id1 = MakeUniqueId(g1s1);
+    UniqueId id2 = MakeUniqueId(g2s1);
+    UniqueId id3 = MakeUniqueId(g3s1);
+    UniqueId id4 = MakeUniqueId(g4s1);
     iso->SetObjectGroupId(g1s1, id1);
     iso->SetObjectGroupId(g1s2, id1);
     iso->SetReferenceFromGroup(id1, g2s1);
@@ -3325,18 +3314,18 @@ TEST(ApiObjectGroupsCycleForScavenger) {
     HandleScope scope(iso);
     g1s1.Reset(iso, Object::New());
     g1s2.Reset(iso, Object::New());
-    g1s1.MakeWeak(iso, &counter, &WeakPointerCallback);
-    g1s2.MakeWeak(iso, &counter, &WeakPointerCallback);
+    g1s1.MakeWeak(&counter, &WeakPointerCallback);
+    g1s2.MakeWeak(&counter, &WeakPointerCallback);
 
     g2s1.Reset(iso, Object::New());
     g2s2.Reset(iso, Object::New());
-    g2s1.MakeWeak(iso, &counter, &WeakPointerCallback);
-    g2s2.MakeWeak(iso, &counter, &WeakPointerCallback);
+    g2s1.MakeWeak(&counter, &WeakPointerCallback);
+    g2s2.MakeWeak(&counter, &WeakPointerCallback);
 
     g3s1.Reset(iso, Object::New());
     g3s2.Reset(iso, Object::New());
-    g3s1.MakeWeak(iso, &counter, &WeakPointerCallback);
-    g3s2.MakeWeak(iso, &counter, &WeakPointerCallback);
+    g3s1.MakeWeak(&counter, &WeakPointerCallback);
+    g3s2.MakeWeak(&counter, &WeakPointerCallback);
   }
 
   // Make a root.
@@ -3356,16 +3345,16 @@ TEST(ApiObjectGroupsCycleForScavenger) {
     g3s2.MarkPartiallyDependent(iso);
     iso->SetObjectGroupId(g1s1, UniqueId(1));
     iso->SetObjectGroupId(g1s2, UniqueId(1));
-    Local<Object>::New(iso, g1s1.As<Object>())->Set(v8_str("x"),
-                                                    Local<Value>(*g2s1));
+    Local<Object>::New(iso, g1s1.As<Object>())->Set(
+        v8_str("x"), Local<Value>::New(iso, g2s1));
     iso->SetObjectGroupId(g2s1, UniqueId(2));
     iso->SetObjectGroupId(g2s2, UniqueId(2));
-    Local<Object>::New(iso, g2s1.As<Object>())->Set(v8_str("x"),
-                                                    Local<Value>(*g3s1));
+    Local<Object>::New(iso, g2s1.As<Object>())->Set(
+        v8_str("x"), Local<Value>::New(iso, g3s1));
     iso->SetObjectGroupId(g3s1, UniqueId(3));
     iso->SetObjectGroupId(g3s2, UniqueId(3));
-    Local<Object>::New(iso, g3s1.As<Object>())->Set(v8_str("x"),
-                                                    Local<Value>(*g1s1));
+    Local<Object>::New(iso, g3s1.As<Object>())->Set(
+        v8_str("x"), Local<Value>::New(iso, g1s1));
   }
 
   v8::internal::Heap* heap = reinterpret_cast<v8::internal::Isolate*>(
@@ -3376,7 +3365,7 @@ TEST(ApiObjectGroupsCycleForScavenger) {
   CHECK_EQ(0, counter.NumberOfWeakCalls());
 
   // Weaken the root.
-  root.MakeWeak(iso, &counter, &WeakPointerCallback);
+  root.MakeWeak(&counter, &WeakPointerCallback);
   root.MarkPartiallyDependent(iso);
 
   v8::Isolate* isolate = v8::Isolate::GetCurrent();
@@ -3391,16 +3380,16 @@ TEST(ApiObjectGroupsCycleForScavenger) {
     g3s2.MarkPartiallyDependent(isolate);
     iso->SetObjectGroupId(g1s1, UniqueId(1));
     iso->SetObjectGroupId(g1s2, UniqueId(1));
-    Local<Object>::New(iso, g1s1.As<Object>())->Set(v8_str("x"),
-                                                    Local<Value>(*g2s1));
+    Local<Object>::New(iso, g1s1.As<Object>())->Set(
+        v8_str("x"), Local<Value>::New(iso, g2s1));
     iso->SetObjectGroupId(g2s1, UniqueId(2));
     iso->SetObjectGroupId(g2s2, UniqueId(2));
-    Local<Object>::New(iso, g2s1.As<Object>())->Set(v8_str("x"),
-                                                    Local<Value>(*g3s1));
+    Local<Object>::New(iso, g2s1.As<Object>())->Set(
+        v8_str("x"), Local<Value>::New(iso, g3s1));
     iso->SetObjectGroupId(g3s1, UniqueId(3));
     iso->SetObjectGroupId(g3s2, UniqueId(3));
-    Local<Object>::New(iso, g3s1.As<Object>())->Set(v8_str("x"),
-                                                    Local<Value>(*g1s1));
+    Local<Object>::New(iso, g3s1.As<Object>())->Set(
+        v8_str("x"), Local<Value>::New(iso, g1s1));
   }
 
   heap->CollectGarbage(i::NEW_SPACE);
@@ -3613,13 +3602,13 @@ THREADED_TEST(Array) {
 }
 
 
-v8::Handle<Value> HandleF(const v8::Arguments& args) {
+void HandleF(const v8::FunctionCallbackInfo<v8::Value>& args) {
   v8::HandleScope scope(args.GetIsolate());
   ApiTestFuzzer::Fuzz();
   Local<v8::Array> result = v8::Array::New(args.Length());
   for (int i = 0; i < args.Length(); i++)
     result->Set(i, args[i]);
-  return scope.Close(result);
+  args.GetReturnValue().Set(scope.Close(result));
 }
 
 
@@ -3726,7 +3715,7 @@ TEST(OutOfMemory) {
   static const int K = 1024;
   v8::ResourceConstraints constraints;
   constraints.set_max_young_space_size(256 * K);
-  constraints.set_max_old_space_size(4 * K * K);
+  constraints.set_max_old_space_size(5 * K * K);
   v8::SetResourceConstraints(&constraints);
 
   // Execute a script that causes out of memory.
@@ -3743,7 +3732,7 @@ TEST(OutOfMemory) {
 }
 
 
-v8::Handle<Value> ProvokeOutOfMemory(const v8::Arguments& args) {
+void ProvokeOutOfMemory(const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
 
   LocalContext context;
@@ -3756,7 +3745,7 @@ v8::Handle<Value> ProvokeOutOfMemory(const v8::Arguments& args) {
   CHECK(result.IsEmpty());
   CHECK(context->HasOutOfMemoryException());
 
-  return result;
+  args.GetReturnValue().Set(result);
 }
 
 
@@ -3767,7 +3756,7 @@ TEST(OutOfMemoryNested) {
   static const int K = 1024;
   v8::ResourceConstraints constraints;
   constraints.set_max_young_space_size(256 * K);
-  constraints.set_max_old_space_size(4 * K * K);
+  constraints.set_max_old_space_size(5 * K * K);
   v8::SetResourceConstraints(&constraints);
 
   v8::HandleScope scope(v8::Isolate::GetCurrent());
@@ -3796,7 +3785,7 @@ TEST(HugeConsStringOutOfMemory) {
   static const int K = 1024;
   v8::ResourceConstraints constraints;
   constraints.set_max_young_space_size(256 * K);
-  constraints.set_max_old_space_size(3 * K * K);
+  constraints.set_max_old_space_size(4 * K * K);
   v8::SetResourceConstraints(&constraints);
 
   // Execute a script that causes out of memory.
@@ -4029,19 +4018,22 @@ THREADED_TEST(ConversionException) {
 }
 
 
-v8::Handle<Value> ThrowFromC(const v8::Arguments& args) {
+void ThrowFromC(const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
-  return v8::ThrowException(v8_str("konto"));
+  v8::ThrowException(v8_str("konto"));
 }
 
 
-v8::Handle<Value> CCatcher(const v8::Arguments& args) {
-  if (args.Length() < 1) return v8::False();
+void CCatcher(const v8::FunctionCallbackInfo<v8::Value>& args) {
+  if (args.Length() < 1) {
+    args.GetReturnValue().Set(false);
+    return;
+  }
   v8::HandleScope scope(args.GetIsolate());
   v8::TryCatch try_catch;
   Local<Value> result = v8::Script::Compile(args[0]->ToString())->Run();
   CHECK(!try_catch.HasCaught() || result.IsEmpty());
-  return v8::Boolean::New(try_catch.HasCaught());
+  args.GetReturnValue().Set(try_catch.HasCaught());
 }
 
 
@@ -4107,10 +4099,9 @@ static void check_reference_error_message(
 }
 
 
-static v8::Handle<Value> Fail(const v8::Arguments& args) {
+static void Fail(const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
   CHECK(false);
-  return v8::Undefined();
 }
 
 
@@ -4254,13 +4245,14 @@ THREADED_TEST(ExternalScriptException) {
 
 
 
-v8::Handle<Value> CThrowCountDown(const v8::Arguments& args) {
+void CThrowCountDown(const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
   CHECK_EQ(4, args.Length());
   int count = args[0]->Int32Value();
   int cInterval = args[2]->Int32Value();
   if (count == 0) {
-    return v8::ThrowException(v8_str("FromC"));
+    v8::ThrowException(v8_str("FromC"));
+    return;
   } else {
     Local<v8::Object> global = Context::GetCurrent()->Global();
     Local<Value> fun = global->Get(v8_str("JSThrowCountDown"));
@@ -4279,15 +4271,17 @@ v8::Handle<Value> CThrowCountDown(const v8::Arguments& args) {
       } else {
         CHECK_NE(expected, count);
       }
-      return result;
+      args.GetReturnValue().Set(result);
+      return;
     } else {
-      return fun.As<Function>()->Call(global, 4, argv);
+      args.GetReturnValue().Set(fun.As<Function>()->Call(global, 4, argv));
+      return;
     }
   }
 }
 
 
-v8::Handle<Value> JSCheck(const v8::Arguments& args) {
+void JSCheck(const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
   CHECK_EQ(3, args.Length());
   bool equality = args[0]->BooleanValue();
@@ -4298,7 +4292,6 @@ v8::Handle<Value> JSCheck(const v8::Arguments& args) {
   } else {
     CHECK_NE(count, expected);
   }
-  return v8::Undefined();
 }
 
 
@@ -4393,11 +4386,10 @@ TEST(ExceptionOrder) {
   fun->Call(fun, argc, a5);
 }
 
-
-v8::Handle<Value> ThrowValue(const v8::Arguments& args) {
+void ThrowValue(const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
   CHECK_EQ(1, args.Length());
-  return v8::ThrowException(args[0]);
+  v8::ThrowException(args[0]);
 }
 
 
@@ -4464,9 +4456,8 @@ THREADED_TEST(TryCatchAndFinallyHidingException) {
 }
 
 
-v8::Handle<v8::Value> WithTryCatch(const v8::Arguments& args) {
+void WithTryCatch(const v8::FunctionCallbackInfo<v8::Value>& args) {
   v8::TryCatch try_catch;
-  return v8::Undefined();
 }
 
 
@@ -4512,6 +4503,47 @@ TEST(TryCatchNested) {
 }
 
 
+void TryCatchMixedNestingCheck(v8::TryCatch* try_catch) {
+  CHECK(try_catch->HasCaught());
+  Handle<Message> message = try_catch->Message();
+  Handle<Value> resource = message->GetScriptResourceName();
+  CHECK_EQ(0, strcmp(*v8::String::Utf8Value(resource), "inner"));
+  CHECK_EQ(0, strcmp(*v8::String::Utf8Value(message->Get()),
+                     "Uncaught Error: a"));
+  CHECK_EQ(1, message->GetLineNumber());
+  CHECK_EQ(6, message->GetStartColumn());
+}
+
+
+void TryCatchMixedNestingHelper(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  ApiTestFuzzer::Fuzz();
+  v8::TryCatch try_catch;
+  CompileRunWithOrigin("throw new Error('a');\n", "inner", 0, 0);
+  CHECK(try_catch.HasCaught());
+  TryCatchMixedNestingCheck(&try_catch);
+  try_catch.ReThrow();
+}
+
+
+// This test ensures that an outer TryCatch in the following situation:
+//   C++/TryCatch -> JS -> C++/TryCatch -> JS w/ SyntaxError
+// does not clobber the Message object generated for the inner TryCatch.
+// This exercises the ability of TryCatch.ReThrow() to restore the
+// inner pending Message before throwing the exception again.
+TEST(TryCatchMixedNesting) {
+  v8::HandleScope scope(v8::Isolate::GetCurrent());
+  v8::V8::Initialize();
+  v8::TryCatch try_catch;
+  Local<ObjectTemplate> templ = ObjectTemplate::New();
+  templ->Set(v8_str("TryCatchMixedNestingHelper"),
+             v8::FunctionTemplate::New(TryCatchMixedNestingHelper));
+  LocalContext context(0, templ);
+  CompileRunWithOrigin("TryCatchMixedNestingHelper();\n", "outer", 1, 1);
+  TryCatchMixedNestingCheck(&try_catch);
+}
+
+
 THREADED_TEST(Equality) {
   LocalContext context;
   v8::Isolate* isolate = context->GetIsolate();
@@ -4554,12 +4586,12 @@ THREADED_TEST(MultiRun) {
 }
 
 
-static v8::Handle<Value> GetXValue(Local<String> name,
-                                   const AccessorInfo& info) {
+static void GetXValue(Local<String> name,
+                      const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   CHECK_EQ(info.Data(), v8_str("donut"));
   CHECK_EQ(name, v8_str("x"));
-  return name;
+  info.GetReturnValue().Set(name);
 }
 
 
@@ -4796,12 +4828,12 @@ THREADED_TEST(DontDeleteAPIAccessorsCannotBeOverriden) {
 }
 
 
-static v8::Handle<Value> Get239Value(Local<String> name,
-                                     const AccessorInfo& info) {
+static void Get239Value(Local<String> name,
+                        const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   CHECK_EQ(info.Data(), v8_str("donut"));
   CHECK_EQ(name, v8_str("239"));
-  return name;
+  info.GetReturnValue().Set(name);
 }
 
 
@@ -4834,7 +4866,7 @@ v8::Persistent<Value> xValue;
 
 static void SetXValue(Local<String> name,
                       Local<Value> value,
-                      const AccessorInfo& info) {
+                      const v8::PropertyCallbackInfo<void>& info) {
   CHECK_EQ(value, v8_num(4));
   CHECK_EQ(info.Data(), v8_str("donut"));
   CHECK_EQ(name, v8_str("x"));
@@ -4853,7 +4885,7 @@ THREADED_TEST(SimplePropertyWrite) {
   for (int i = 0; i < 10; i++) {
     CHECK(xValue.IsEmpty());
     script->Run();
-    CHECK_EQ(v8_num(4), Handle<Value>(*xValue));
+    CHECK_EQ(v8_num(4), Local<Value>::New(v8::Isolate::GetCurrent(), xValue));
     xValue.Dispose(context->GetIsolate());
     xValue.Clear();
   }
@@ -4870,7 +4902,7 @@ THREADED_TEST(SetterOnly) {
   for (int i = 0; i < 10; i++) {
     CHECK(xValue.IsEmpty());
     script->Run();
-    CHECK_EQ(v8_num(4), Handle<Value>(*xValue));
+    CHECK_EQ(v8_num(4), Local<Value>::New(v8::Isolate::GetCurrent(), xValue));
     xValue.Dispose(context->GetIsolate());
     xValue.Clear();
   }
@@ -4881,7 +4913,7 @@ THREADED_TEST(NoAccessors) {
   v8::HandleScope scope(v8::Isolate::GetCurrent());
   Local<ObjectTemplate> templ = ObjectTemplate::New();
   templ->SetAccessor(v8_str("x"),
-                     static_cast<v8::AccessorGetter>(NULL),
+                     static_cast<v8::AccessorGetterCallback>(NULL),
                      NULL,
                      v8_str("donut"));
   LocalContext context;
@@ -4893,11 +4925,11 @@ THREADED_TEST(NoAccessors) {
 }
 
 
-static v8::Handle<Value> XPropertyGetter(Local<String> property,
-                                         const AccessorInfo& info) {
+static void XPropertyGetter(Local<String> property,
+                            const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   CHECK(info.Data()->IsUndefined());
-  return property;
+  info.GetReturnValue().Set(property);
 }
 
 
@@ -4986,12 +5018,12 @@ THREADED_TEST(NamedInterceptorDictionaryICMultipleContext) {
 }
 
 
-static v8::Handle<Value> SetXOnPrototypeGetter(Local<String> property,
-                                               const AccessorInfo& info) {
+static void SetXOnPrototypeGetter(
+    Local<String> property,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   // Set x on the prototype object and do not handle the get request.
   v8::Handle<v8::Value> proto = info.Holder()->GetPrototype();
   proto.As<v8::Object>()->Set(v8_str("x"), v8::Integer::New(23));
-  return v8::Handle<Value>();
 }
 
 
@@ -5013,24 +5045,24 @@ THREADED_TEST(NamedInterceptorMapTransitionRead) {
 }
 
 
-static v8::Handle<Value> IndexedPropertyGetter(uint32_t index,
-                                               const AccessorInfo& info) {
+static void IndexedPropertyGetter(
+    uint32_t index,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   if (index == 37) {
-    return v8::Handle<Value>(v8_num(625));
+    info.GetReturnValue().Set(v8_num(625));
   }
-  return v8::Handle<Value>();
 }
 
 
-static v8::Handle<Value> IndexedPropertySetter(uint32_t index,
-                                               Local<Value> value,
-                                               const AccessorInfo& info) {
+static void IndexedPropertySetter(
+    uint32_t index,
+    Local<Value> value,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   if (index == 39) {
-    return value;
+    info.GetReturnValue().Set(value);
   }
-  return v8::Handle<Value>();
 }
 
 
@@ -5064,38 +5096,36 @@ THREADED_TEST(IndexedInterceptorWithIndexedAccessor) {
 }
 
 
-static v8::Handle<Value> UnboxedDoubleIndexedPropertyGetter(
+static void UnboxedDoubleIndexedPropertyGetter(
     uint32_t index,
-    const AccessorInfo& info) {
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   if (index < 25) {
-    return v8::Handle<Value>(v8_num(index));
+    info.GetReturnValue().Set(v8_num(index));
   }
-  return v8::Handle<Value>();
 }
 
 
-static v8::Handle<Value> UnboxedDoubleIndexedPropertySetter(
+static void UnboxedDoubleIndexedPropertySetter(
     uint32_t index,
     Local<Value> value,
-    const AccessorInfo& info) {
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   if (index < 25) {
-    return v8::Handle<Value>(v8_num(index));
+    info.GetReturnValue().Set(v8_num(index));
   }
-  return v8::Handle<Value>();
 }
 
 
-Handle<v8::Array> UnboxedDoubleIndexedPropertyEnumerator(
-    const AccessorInfo& info) {
+void UnboxedDoubleIndexedPropertyEnumerator(
+    const v8::PropertyCallbackInfo<v8::Array>& info) {
   // Force the list of returned keys to be stored in a FastDoubleArray.
   Local<Script> indexed_property_names_script = Script::Compile(v8_str(
       "keys = new Array(); keys[125000] = 1;"
       "for(i = 0; i < 80000; i++) { keys[i] = i; };"
       "keys.length = 25; keys;"));
   Local<Value> result = indexed_property_names_script->Run();
-  return Local<v8::Array>(::v8::Array::Cast(*result));
+  info.GetReturnValue().Set(Local<v8::Array>::Cast(result));
 }
 
 
@@ -5126,8 +5156,8 @@ THREADED_TEST(IndexedInterceptorUnboxedDoubleWithIndexedAccessor) {
 }
 
 
-Handle<v8::Array> NonStrictArgsIndexedPropertyEnumerator(
-    const AccessorInfo& info) {
+void NonStrictArgsIndexedPropertyEnumerator(
+    const v8::PropertyCallbackInfo<v8::Array>& info) {
   // Force the list of returned keys to be stored in a Arguments object.
   Local<Script> indexed_property_names_script = Script::Compile(v8_str(
       "function f(w,x) {"
@@ -5135,19 +5165,23 @@ Handle<v8::Array> NonStrictArgsIndexedPropertyEnumerator(
       "}"
       "keys = f(0, 1, 2, 3);"
       "keys;"));
-  Local<Value> result = indexed_property_names_script->Run();
-  return Local<v8::Array>(static_cast<v8::Array*>(::v8::Object::Cast(*result)));
+  Local<Object> result =
+      Local<Object>::Cast(indexed_property_names_script->Run());
+  // Have to populate the handle manually, as it's not Cast-able.
+  i::Handle<i::JSObject> o =
+      v8::Utils::OpenHandle<Object, i::JSObject>(result);
+  i::Handle<i::JSArray> array(reinterpret_cast<i::JSArray*>(*o));
+  info.GetReturnValue().Set(v8::Utils::ToLocal(array));
 }
 
 
-static v8::Handle<Value> NonStrictIndexedPropertyGetter(
+static void NonStrictIndexedPropertyGetter(
     uint32_t index,
-    const AccessorInfo& info) {
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   if (index < 4) {
-    return v8::Handle<Value>(v8_num(index));
+    info.GetReturnValue().Set(v8_num(index));
   }
-  return v8::Handle<Value>();
 }
 
 
@@ -5172,10 +5206,10 @@ THREADED_TEST(IndexedInterceptorNonStrictArgsWithIndexedAccessor) {
 }
 
 
-static v8::Handle<Value> IdentityIndexedPropertyGetter(
+static void IdentityIndexedPropertyGetter(
     uint32_t index,
-    const AccessorInfo& info) {
-  return v8::Integer::NewFromUnsigned(index);
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
+  info.GetReturnValue().Set(index);
 }
 
 
@@ -5746,9 +5780,9 @@ static inline void PersistentHandles(v8::Isolate* isolate) {
 }
 
 
-static v8::Handle<Value> HandleLogDelegator(const v8::Arguments& args) {
+static void HandleLogDelegator(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
-  return v8::Undefined();
 }
 
 
@@ -5983,7 +6017,7 @@ class NativeFunctionExtension : public Extension {
  public:
   NativeFunctionExtension(const char* name,
                           const char* source,
-                          v8::InvocationCallback fun = &Echo)
+                          v8::FunctionCallback fun = &Echo)
       : Extension(name, source),
         function_(fun) { }
 
@@ -5992,12 +6026,11 @@ class NativeFunctionExtension : public Extension {
     return v8::FunctionTemplate::New(function_);
   }
 
-  static v8::Handle<v8::Value> Echo(const v8::Arguments& args) {
-    if (args.Length() >= 1) return (args[0]);
-    return v8::Undefined();
+  static void Echo(const v8::FunctionCallbackInfo<v8::Value>& args) {
+    if (args.Length() >= 1) args.GetReturnValue().Set(args[0]);
   }
  private:
-  v8::InvocationCallback function_;
+  v8::FunctionCallback function_;
 };
 
 
@@ -6094,13 +6127,14 @@ static const char* kExtensionTestScript =
   "}";
 
 
-static v8::Handle<Value> CallFun(const v8::Arguments& args) {
+static void CallFun(const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
   if (args.IsConstructCall()) {
     args.This()->Set(v8_str("data"), args.Data());
-    return v8::Null();
+    args.GetReturnValue().SetNull();
+    return;
   }
-  return args.Data();
+  args.GetReturnValue().Set(args.Data());
 }
 
 
@@ -6247,7 +6281,7 @@ class Whammy {
   ~Whammy() { script_.Dispose(isolate_); }
   v8::Handle<Script> getScript() {
     if (script_.IsEmpty()) script_.Reset(isolate_, v8_compile("({}).blammo"));
-    return Local<Script>(*script_);
+    return Local<Script>::New(isolate_, script_);
   }
 
  public:
@@ -6265,8 +6299,8 @@ static void HandleWeakReference(v8::Isolate* isolate,
   obj->ClearWeak(isolate);
 }
 
-v8::Handle<Value> WhammyPropertyGetter(Local<String> name,
-                                       const AccessorInfo& info) {
+void WhammyPropertyGetter(Local<String> name,
+                          const v8::PropertyCallbackInfo<v8::Value>& info) {
   Whammy* whammy =
     static_cast<Whammy*>(v8::Handle<v8::External>::Cast(info.Data())->Value());
 
@@ -6276,14 +6310,12 @@ v8::Handle<Value> WhammyPropertyGetter(Local<String> name,
   if (!prev.IsEmpty()) {
     v8::Local<v8::Object>::New(info.GetIsolate(), prev)
         ->Set(v8_str("next"), obj);
-    prev.MakeWeak<Value, Snorkel>(info.GetIsolate(),
-                                  new Snorkel(),
-                                  &HandleWeakReference);
+    prev.MakeWeak<Value, Snorkel>(new Snorkel(), &HandleWeakReference);
     whammy->objects_[whammy->cursor_].Clear();
   }
   whammy->objects_[whammy->cursor_].Reset(info.GetIsolate(), obj);
   whammy->cursor_ = (whammy->cursor_ + 1) % Whammy::kObjectCount;
-  return whammy->getScript()->Run();
+  info.GetReturnValue().Set(whammy->getScript()->Run());
 }
 
 THREADED_TEST(WeakReference) {
@@ -6340,8 +6372,8 @@ THREADED_TEST(IndependentWeakHandle) {
 
   bool object_a_disposed = false;
   bool object_b_disposed = false;
-  object_a.MakeWeak(iso, &object_a_disposed, &DisposeAndSetFlag);
-  object_b.MakeWeak(iso, &object_b_disposed, &DisposeAndSetFlag);
+  object_a.MakeWeak(&object_a_disposed, &DisposeAndSetFlag);
+  object_b.MakeWeak(&object_b_disposed, &DisposeAndSetFlag);
   CHECK(!object_b.IsIndependent(iso));
   object_a.MarkIndependent(iso);
   object_b.MarkIndependent(iso);
@@ -6402,7 +6434,7 @@ THREADED_TEST(GCFromWeakCallbacks) {
         object.Reset(isolate, v8::Object::New());
       }
       bool disposed = false;
-      object.MakeWeak(isolate, &disposed, gc_forcing_callback[inner_gc]);
+      object.MakeWeak(&disposed, gc_forcing_callback[inner_gc]);
       object.MarkIndependent(isolate);
       invoke_gc[outer_gc]();
       CHECK(disposed);
@@ -6435,7 +6467,7 @@ THREADED_TEST(IndependentHandleRevival) {
     o->Set(y_str, y_str);
   }
   bool revived = false;
-  object.MakeWeak(isolate, &revived, &RevivingCallback);
+  object.MakeWeak(&revived, &RevivingCallback);
   object.MarkIndependent(isolate);
   HEAP->PerformScavenge();
   CHECK(revived);
@@ -6453,7 +6485,8 @@ THREADED_TEST(IndependentHandleRevival) {
 v8::Handle<Function> args_fun;
 
 
-static v8::Handle<Value> ArgumentsTestCallback(const v8::Arguments& args) {
+static void ArgumentsTestCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
   CHECK_EQ(args_fun, args.Callee());
   CHECK_EQ(3, args.Length());
@@ -6463,7 +6496,6 @@ static v8::Handle<Value> ArgumentsTestCallback(const v8::Arguments& args) {
   CHECK_EQ(v8::Undefined(), args[3]);
   v8::HandleScope scope(args.GetIsolate());
   HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
-  return v8::Undefined();
 }
 
 
@@ -6477,34 +6509,33 @@ THREADED_TEST(Arguments) {
 }
 
 
-static v8::Handle<Value> NoBlockGetterX(Local<String> name,
-                                        const AccessorInfo&) {
-  return v8::Handle<Value>();
+static void NoBlockGetterX(Local<String> name,
+                           const v8::PropertyCallbackInfo<v8::Value>&) {
 }
 
 
-static v8::Handle<Value> NoBlockGetterI(uint32_t index,
-                                        const AccessorInfo&) {
-  return v8::Handle<Value>();
+static void NoBlockGetterI(uint32_t index,
+                           const v8::PropertyCallbackInfo<v8::Value>&) {
 }
 
 
-static v8::Handle<v8::Boolean> PDeleter(Local<String> name,
-                                        const AccessorInfo&) {
+static void PDeleter(Local<String> name,
+                     const v8::PropertyCallbackInfo<v8::Boolean>& info) {
   if (!name->Equals(v8_str("foo"))) {
-    return v8::Handle<v8::Boolean>();  // not intercepted
+    return;  // not intercepted
   }
 
-  return v8::False();  // intercepted, and don't delete the property
+  info.GetReturnValue().Set(false);  // intercepted, don't delete the property
 }
 
 
-static v8::Handle<v8::Boolean> IDeleter(uint32_t index, const AccessorInfo&) {
+static void IDeleter(uint32_t index,
+                     const v8::PropertyCallbackInfo<v8::Boolean>& info) {
   if (index != 2) {
-    return v8::Handle<v8::Boolean>();  // not intercepted
+    return;  // not intercepted
   }
 
-  return v8::False();  // intercepted, and don't delete the property
+  info.GetReturnValue().Set(false);  // intercepted, don't delete the property
 }
 
 
@@ -6534,40 +6565,40 @@ THREADED_TEST(Deleter) {
 }
 
 
-static v8::Handle<Value> GetK(Local<String> name, const AccessorInfo&) {
+static void GetK(Local<String> name,
+                 const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   if (name->Equals(v8_str("foo")) ||
       name->Equals(v8_str("bar")) ||
       name->Equals(v8_str("baz"))) {
-    return v8::Undefined();
+    info.GetReturnValue().SetUndefined();
   }
-  return v8::Handle<Value>();
 }
 
 
-static v8::Handle<Value> IndexedGetK(uint32_t index, const AccessorInfo&) {
+static void IndexedGetK(uint32_t index,
+                        const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
-  if (index == 0 || index == 1) return v8::Undefined();
-  return v8::Handle<Value>();
+  if (index == 0 || index == 1) info.GetReturnValue().SetUndefined();
 }
 
 
-static v8::Handle<v8::Array> NamedEnum(const AccessorInfo&) {
+static void NamedEnum(const v8::PropertyCallbackInfo<v8::Array>& info) {
   ApiTestFuzzer::Fuzz();
   v8::Handle<v8::Array> result = v8::Array::New(3);
   result->Set(v8::Integer::New(0), v8_str("foo"));
   result->Set(v8::Integer::New(1), v8_str("bar"));
   result->Set(v8::Integer::New(2), v8_str("baz"));
-  return result;
+  info.GetReturnValue().Set(result);
 }
 
 
-static v8::Handle<v8::Array> IndexedEnum(const AccessorInfo&) {
+static void IndexedEnum(const v8::PropertyCallbackInfo<v8::Array>& info) {
   ApiTestFuzzer::Fuzz();
   v8::Handle<v8::Array> result = v8::Array::New(2);
   result->Set(v8::Integer::New(0), v8_str("0"));
   result->Set(v8::Integer::New(1), v8_str("1"));
-  return result;
+  info.GetReturnValue().Set(result);
 }
 
 
@@ -6632,7 +6663,8 @@ int p_getter_count;
 int p_getter_count2;
 
 
-static v8::Handle<Value> PGetter(Local<String> name, const AccessorInfo& info) {
+static void PGetter(Local<String> name,
+                    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   p_getter_count++;
   v8::Handle<v8::Object> global = Context::GetCurrent()->Global();
@@ -6646,7 +6678,6 @@ static v8::Handle<Value> PGetter(Local<String> name, const AccessorInfo& info) {
   } else if (name->Equals(v8_str("p4"))) {
     CHECK_EQ(info.This(), global->Get(v8_str("o4")));
   }
-  return v8::Undefined();
 }
 
 
@@ -6666,8 +6697,8 @@ static void RunHolderTest(v8::Handle<v8::ObjectTemplate> obj) {
 }
 
 
-static v8::Handle<Value> PGetter2(Local<String> name,
-                                  const AccessorInfo& info) {
+static void PGetter2(Local<String> name,
+                     const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   p_getter_count2++;
   v8::Handle<v8::Object> global = Context::GetCurrent()->Global();
@@ -6681,7 +6712,6 @@ static v8::Handle<Value> PGetter2(Local<String> name,
   } else if (name->Equals(v8_str("p4"))) {
     CHECK_EQ(info.This(), global->Get(v8_str("o4")));
   }
-  return v8::Undefined();
 }
 
 
@@ -7211,12 +7241,12 @@ THREADED_TEST(Utf16Symbol) {
   Local<Value> s2 = global->Get(v8_str("sym2"));
   Local<Value> s3 = global->Get(v8_str("sym3"));
   Local<Value> s4 = global->Get(v8_str("sym4"));
-  CHECK(SameSymbol(sym0, Handle<String>(String::Cast(*s0))));
-  CHECK(SameSymbol(sym0b, Handle<String>(String::Cast(*s0b))));
-  CHECK(SameSymbol(sym1, Handle<String>(String::Cast(*s1))));
-  CHECK(SameSymbol(sym2, Handle<String>(String::Cast(*s2))));
-  CHECK(SameSymbol(sym3, Handle<String>(String::Cast(*s3))));
-  CHECK(SameSymbol(sym4, Handle<String>(String::Cast(*s4))));
+  CHECK(SameSymbol(sym0, Handle<String>::Cast(s0)));
+  CHECK(SameSymbol(sym0b, Handle<String>::Cast(s0b)));
+  CHECK(SameSymbol(sym1, Handle<String>::Cast(s1)));
+  CHECK(SameSymbol(sym2, Handle<String>::Cast(s2)));
+  CHECK(SameSymbol(sym3, Handle<String>::Cast(s3)));
+  CHECK(SameSymbol(sym4, Handle<String>::Cast(s4)));
 }
 
 
@@ -7275,15 +7305,16 @@ THREADED_TEST(ErrorConstruction) {
 }
 
 
-static v8::Handle<Value> YGetter(Local<String> name, const AccessorInfo& info) {
+static void YGetter(Local<String> name,
+                    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
-  return v8_num(10);
+  info.GetReturnValue().Set(v8_num(10));
 }
 
 
 static void YSetter(Local<String> name,
                     Local<Value> value,
-                    const AccessorInfo& info) {
+                    const v8::PropertyCallbackInfo<void>& info) {
   if (info.This()->Has(name)) {
     info.This()->Delete(name);
   }
@@ -7358,7 +7389,7 @@ static bool IndexedSecurityTestCallback(Local<v8::Object> global,
 
 
 static int trouble_nesting = 0;
-static v8::Handle<Value> TroubleCallback(const v8::Arguments& args) {
+static void TroubleCallback(const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
   trouble_nesting++;
 
@@ -7368,7 +7399,8 @@ static v8::Handle<Value> TroubleCallback(const v8::Arguments& args) {
     arg_this->Get(v8_str("trouble_callee")) :
     arg_this->Get(v8_str("trouble_caller"));
   CHECK(trouble_callee->IsFunction());
-  return Function::Cast(*trouble_callee)->Call(arg_this, 0, NULL);
+  args.GetReturnValue().Set(
+      Function::Cast(*trouble_callee)->Call(arg_this, 0, NULL));
 }
 
 
@@ -7898,29 +7930,31 @@ static bool IndexedAccessBlocker(Local<v8::Object> global,
 
 
 static int g_echo_value = -1;
-static v8::Handle<Value> EchoGetter(Local<String> name,
-                                    const AccessorInfo& info) {
-  return v8_num(g_echo_value);
+static void EchoGetter(
+    Local<String> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
+  info.GetReturnValue().Set(v8_num(g_echo_value));
 }
 
 
 static void EchoSetter(Local<String> name,
                        Local<Value> value,
-                       const AccessorInfo&) {
+                       const v8::PropertyCallbackInfo<void>&) {
   if (value->IsNumber())
     g_echo_value = value->Int32Value();
 }
 
 
-static v8::Handle<Value> UnreachableGetter(Local<String> name,
-                                           const AccessorInfo& info) {
+static void UnreachableGetter(
+    Local<String> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   CHECK(false);  // This function should not be called..
-  return v8::Undefined();
 }
 
 
-static void UnreachableSetter(Local<String>, Local<Value>,
-                              const AccessorInfo&) {
+static void UnreachableSetter(Local<String>,
+                              Local<Value>,
+                              const v8::PropertyCallbackInfo<void>&) {
   CHECK(false);  // This function should nto be called.
 }
 
@@ -8297,19 +8331,21 @@ THREADED_TEST(AccessControlGetOwnPropertyNames) {
 }
 
 
-static v8::Handle<v8::Array> IndexedPropertyEnumerator(const AccessorInfo&) {
+static void IndexedPropertyEnumerator(
+    const v8::PropertyCallbackInfo<v8::Array>& info) {
   v8::Handle<v8::Array> result = v8::Array::New(2);
   result->Set(0, v8::Integer::New(7));
   result->Set(1, v8::Object::New());
-  return result;
+  info.GetReturnValue().Set(result);
 }
 
 
-static v8::Handle<v8::Array> NamedPropertyEnumerator(const AccessorInfo& info) {
+static void NamedPropertyEnumerator(
+    const v8::PropertyCallbackInfo<v8::Array>& info) {
   v8::Handle<v8::Array> result = v8::Array::New(2);
   result->Set(0, v8_str("x"));
   result->Set(1, v8::Object::New());
-  return result;
+  info.GetReturnValue().Set(result);
 }
 
 
@@ -8342,9 +8378,9 @@ THREADED_TEST(GetOwnPropertyNamesWithInterceptor) {
 }
 
 
-static v8::Handle<Value> ConstTenGetter(Local<String> name,
-                                        const AccessorInfo& info) {
-  return v8_num(10);
+static void ConstTenGetter(Local<String> name,
+                           const v8::PropertyCallbackInfo<v8::Value>& info) {
+  info.GetReturnValue().Set(v8_num(10));
 }
 
 
@@ -8608,28 +8644,33 @@ THREADED_TEST(AccessControlFlatten) {
 }
 
 
-static v8::Handle<Value> AccessControlNamedGetter(
-    Local<String>, const AccessorInfo&) {
-  return v8::Integer::New(42);
+static void AccessControlNamedGetter(
+    Local<String>,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
+  info.GetReturnValue().Set(42);
 }
 
 
-static v8::Handle<Value> AccessControlNamedSetter(
-    Local<String>, Local<Value> value, const AccessorInfo&) {
-  return value;
+static void AccessControlNamedSetter(
+    Local<String>,
+    Local<Value> value,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
+  info.GetReturnValue().Set(value);
 }
 
 
-static v8::Handle<Value> AccessControlIndexedGetter(
+static void AccessControlIndexedGetter(
       uint32_t index,
-      const AccessorInfo& info) {
-  return v8_num(42);
+      const v8::PropertyCallbackInfo<v8::Value>& info) {
+  info.GetReturnValue().Set(v8_num(42));
 }
 
 
-static v8::Handle<Value> AccessControlIndexedSetter(
-    uint32_t, Local<Value> value, const AccessorInfo&) {
-  return value;
+static void AccessControlIndexedSetter(
+    uint32_t,
+    Local<Value> value,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
+  info.GetReturnValue().Set(value);
 }
 
 
@@ -8704,9 +8745,10 @@ THREADED_TEST(Version) {
 }
 
 
-static v8::Handle<Value> InstanceFunctionCallback(const v8::Arguments& args) {
+static void InstanceFunctionCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
-  return v8_num(12);
+  args.GetReturnValue().Set(v8_num(12));
 }
 
 
@@ -8732,10 +8774,10 @@ THREADED_TEST(InstanceProperties) {
 }
 
 
-static v8::Handle<Value>
-GlobalObjectInstancePropertiesGet(Local<String> key, const AccessorInfo&) {
+static void GlobalObjectInstancePropertiesGet(
+    Local<String> key,
+    const v8::PropertyCallbackInfo<v8::Value>&) {
   ApiTestFuzzer::Fuzz();
-  return v8::Handle<Value>();
 }
 
 
@@ -8835,9 +8877,10 @@ THREADED_TEST(CallKnownGlobalReceiver) {
 }
 
 
-static v8::Handle<Value> ShadowFunctionCallback(const v8::Arguments& args) {
+static void ShadowFunctionCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
-  return v8_num(42);
+  args.GetReturnValue().Set(v8_num(42));
 }
 
 
@@ -8846,29 +8889,29 @@ static int shadow_y_setter_call_count;
 static int shadow_y_getter_call_count;
 
 
-static void ShadowYSetter(Local<String>, Local<Value>, const AccessorInfo&) {
+static void ShadowYSetter(Local<String>,
+                          Local<Value>,
+                          const v8::PropertyCallbackInfo<void>&) {
   shadow_y_setter_call_count++;
   shadow_y = 42;
 }
 
 
-static v8::Handle<Value> ShadowYGetter(Local<String> name,
-                                       const AccessorInfo& info) {
+static void ShadowYGetter(Local<String> name,
+                          const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   shadow_y_getter_call_count++;
-  return v8_num(shadow_y);
+  info.GetReturnValue().Set(v8_num(shadow_y));
 }
 
 
-static v8::Handle<Value> ShadowIndexedGet(uint32_t index,
-                                          const AccessorInfo& info) {
-  return v8::Handle<Value>();
+static void ShadowIndexedGet(uint32_t index,
+                             const v8::PropertyCallbackInfo<v8::Value>&) {
 }
 
 
-static v8::Handle<Value> ShadowNamedGet(Local<String> key,
-                                        const AccessorInfo&) {
-  return v8::Handle<Value>();
+static void ShadowNamedGet(Local<String> key,
+                           const v8::PropertyCallbackInfo<v8::Value>&) {
 }
 
 
@@ -9218,7 +9261,8 @@ THREADED_TEST(Constructor) {
 }
 
 
-static Handle<Value> ConstructorCallback(const Arguments& args) {
+static void ConstructorCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
   Local<Object> This;
 
@@ -9234,13 +9278,14 @@ static Handle<Value> ConstructorCallback(const Arguments& args) {
   }
 
   This->Set(v8_str("a"), args[0]);
-  return This;
+  args.GetReturnValue().Set(This);
 }
 
 
-static Handle<Value> FakeConstructorCallback(const Arguments& args) {
+static void FakeConstructorCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
-  return args[0];
+  args.GetReturnValue().Set(args[0]);
 }
 
 
@@ -9608,15 +9653,16 @@ THREADED_TEST(CrossLazyLoad) {
 }
 
 
-static v8::Handle<Value> call_as_function(const v8::Arguments& args) {
+static void call_as_function(const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
   if (args.IsConstructCall()) {
     if (args[0]->IsInt32()) {
-       return v8_num(-args[0]->Int32Value());
+      args.GetReturnValue().Set(v8_num(-args[0]->Int32Value()));
+      return;
     }
   }
 
-  return args[0];
+  args.GetReturnValue().Set(args[0]);
 }
 
 
@@ -9820,11 +9866,10 @@ THREADED_TEST(HandleIteration) {
 }
 
 
-static v8::Handle<Value> InterceptorHasOwnPropertyGetter(
+static void InterceptorHasOwnPropertyGetter(
     Local<String> name,
-    const AccessorInfo& info) {
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
-  return v8::Handle<Value>();
 }
 
 
@@ -9851,12 +9896,11 @@ THREADED_TEST(InterceptorHasOwnProperty) {
 }
 
 
-static v8::Handle<Value> InterceptorHasOwnPropertyGetterGC(
+static void InterceptorHasOwnPropertyGetterGC(
     Local<String> name,
-    const AccessorInfo& info) {
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
-  return v8::Handle<Value>();
 }
 
 
@@ -9889,8 +9933,9 @@ THREADED_TEST(InterceptorHasOwnPropertyCausingGC) {
 }
 
 
-typedef v8::Handle<Value> (*NamedPropertyGetter)(Local<String> property,
-                                                 const AccessorInfo& info);
+typedef void (*NamedPropertyGetter)(
+    Local<String> property,
+    const v8::PropertyCallbackInfo<v8::Value>& info);
 
 
 static void CheckInterceptorLoadIC(NamedPropertyGetter getter,
@@ -9906,14 +9951,15 @@ static void CheckInterceptorLoadIC(NamedPropertyGetter getter,
 }
 
 
-static v8::Handle<Value> InterceptorLoadICGetter(Local<String> name,
-                                                 const AccessorInfo& info) {
+static void InterceptorLoadICGetter(
+    Local<String> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   v8::Isolate* isolate = v8::Isolate::GetCurrent();
   CHECK_EQ(isolate, info.GetIsolate());
   CHECK_EQ(v8_str("data"), info.Data());
   CHECK_EQ(v8_str("x"), name);
-  return v8::Integer::New(42);
+  info.GetReturnValue().Set(v8::Integer::New(42));
 }
 
 
@@ -9932,11 +9978,14 @@ THREADED_TEST(InterceptorLoadIC) {
 // configurations of interceptor and explicit fields works fine
 // (those cases are special cased to get better performance).
 
-static v8::Handle<Value> InterceptorLoadXICGetter(Local<String> name,
-                                                 const AccessorInfo& info) {
+static void InterceptorLoadXICGetter(
+    Local<String> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
-  return v8_str("x")->Equals(name)
-      ? v8::Handle<v8::Value>(v8::Integer::New(42)) : v8::Handle<v8::Value>();
+  info.GetReturnValue().Set(
+      v8_str("x")->Equals(name) ?
+          v8::Handle<v8::Value>(v8::Integer::New(42)) :
+          v8::Handle<v8::Value>());
 }
 
 
@@ -10045,10 +10094,10 @@ THREADED_TEST(InterceptorLoadICInvalidatedField) {
 
 
 static int interceptor_load_not_handled_calls = 0;
-static v8::Handle<Value> InterceptorLoadNotHandled(Local<String> name,
-                                                   const AccessorInfo& info) {
+static void InterceptorLoadNotHandled(
+    Local<String> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ++interceptor_load_not_handled_calls;
-  return v8::Handle<v8::Value>();
 }
 
 
@@ -10099,7 +10148,7 @@ THREADED_TEST(InterceptorLoadICInvalidatedFieldViaGlobal) {
 
 static void SetOnThis(Local<String> name,
                       Local<Value> value,
-                      const AccessorInfo& info) {
+                      const v8::PropertyCallbackInfo<void>& info) {
   info.This()->ForceSet(name, value);
 }
 
@@ -10108,7 +10157,7 @@ THREADED_TEST(InterceptorLoadICWithCallbackOnHolder) {
   v8::HandleScope scope(v8::Isolate::GetCurrent());
   v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New();
   templ->SetNamedPropertyHandler(InterceptorLoadXICGetter);
-  templ->SetAccessor(v8_str("y"), Return239);
+  templ->SetAccessor(v8_str("y"), Return239Callback);
   LocalContext context;
   context->Global()->Set(v8_str("o"), templ->NewInstance());
 
@@ -10138,7 +10187,7 @@ THREADED_TEST(InterceptorLoadICWithCallbackOnProto) {
   v8::Handle<v8::ObjectTemplate> templ_o = ObjectTemplate::New();
   templ_o->SetNamedPropertyHandler(InterceptorLoadXICGetter);
   v8::Handle<v8::ObjectTemplate> templ_p = ObjectTemplate::New();
-  templ_p->SetAccessor(v8_str("y"), Return239);
+  templ_p->SetAccessor(v8_str("y"), Return239Callback);
 
   LocalContext context;
   context->Global()->Set(v8_str("o"), templ_o->NewInstance());
@@ -10170,7 +10219,7 @@ THREADED_TEST(InterceptorLoadICForCallbackWithOverride) {
   v8::HandleScope scope(v8::Isolate::GetCurrent());
   v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New();
   templ->SetNamedPropertyHandler(InterceptorLoadXICGetter);
-  templ->SetAccessor(v8_str("y"), Return239);
+  templ->SetAccessor(v8_str("y"), Return239Callback);
 
   LocalContext context;
   context->Global()->Set(v8_str("o"), templ->NewInstance());
@@ -10199,7 +10248,7 @@ THREADED_TEST(InterceptorLoadICCallbackNotNeeded) {
   v8::Handle<v8::ObjectTemplate> templ_o = ObjectTemplate::New();
   templ_o->SetNamedPropertyHandler(InterceptorLoadXICGetter);
   v8::Handle<v8::ObjectTemplate> templ_p = ObjectTemplate::New();
-  templ_p->SetAccessor(v8_str("y"), Return239);
+  templ_p->SetAccessor(v8_str("y"), Return239Callback);
 
   LocalContext context;
   context->Global()->Set(v8_str("o"), templ_o->NewInstance());
@@ -10227,7 +10276,7 @@ THREADED_TEST(InterceptorLoadICInvalidatedCallback) {
   v8::Handle<v8::ObjectTemplate> templ_o = ObjectTemplate::New();
   templ_o->SetNamedPropertyHandler(InterceptorLoadXICGetter);
   v8::Handle<v8::ObjectTemplate> templ_p = ObjectTemplate::New();
-  templ_p->SetAccessor(v8_str("y"), Return239, SetOnThis);
+  templ_p->SetAccessor(v8_str("y"), Return239Callback, SetOnThis);
 
   LocalContext context;
   context->Global()->Set(v8_str("o"), templ_o->NewInstance());
@@ -10259,7 +10308,7 @@ THREADED_TEST(InterceptorLoadICInvalidatedCallbackViaGlobal) {
   v8::Handle<v8::ObjectTemplate> templ_o = ObjectTemplate::New();
   templ_o->SetNamedPropertyHandler(InterceptorLoadXICGetter);
   v8::Handle<v8::ObjectTemplate> templ_p = ObjectTemplate::New();
-  templ_p->SetAccessor(v8_str("y"), Return239, SetOnThis);
+  templ_p->SetAccessor(v8_str("y"), Return239Callback, SetOnThis);
 
   LocalContext context;
   context->Global()->Set(v8_str("o"), templ_o->NewInstance());
@@ -10282,11 +10331,12 @@ THREADED_TEST(InterceptorLoadICInvalidatedCallbackViaGlobal) {
 }
 
 
-static v8::Handle<Value> InterceptorLoadICGetter0(Local<String> name,
-                                                  const AccessorInfo& info) {
+static void InterceptorLoadICGetter0(
+    Local<String> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   CHECK(v8_str("x")->Equals(name));
-  return v8::Integer::New(0);
+  info.GetReturnValue().Set(v8::Integer::New(0));
 }
 
 
@@ -10297,11 +10347,13 @@ THREADED_TEST(InterceptorReturningZero) {
 }
 
 
-static v8::Handle<Value> InterceptorStoreICSetter(
-    Local<String> key, Local<Value> value, const AccessorInfo&) {
+static void InterceptorStoreICSetter(
+    Local<String> key,
+    Local<Value> value,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   CHECK(v8_str("x")->Equals(key));
   CHECK_EQ(42, value->Int32Value());
-  return value;
+  info.GetReturnValue().Set(value);
 }
 
 
@@ -10342,11 +10394,12 @@ v8::Handle<Value> call_ic_function;
 v8::Handle<Value> call_ic_function2;
 v8::Handle<Value> call_ic_function3;
 
-static v8::Handle<Value> InterceptorCallICGetter(Local<String> name,
-                                                 const AccessorInfo& info) {
+static void InterceptorCallICGetter(
+    Local<String> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   CHECK(v8_str("x")->Equals(name));
-  return call_ic_function;
+  info.GetReturnValue().Set(call_ic_function);
 }
 
 
@@ -10387,11 +10440,12 @@ THREADED_TEST(InterceptorCallICSeesOthers) {
 
 
 static v8::Handle<Value> call_ic_function4;
-static v8::Handle<Value> InterceptorCallICGetter4(Local<String> name,
-                                                  const AccessorInfo& info) {
+static void InterceptorCallICGetter4(
+    Local<String> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   CHECK(v8_str("x")->Equals(name));
-  return call_ic_function4;
+  info.GetReturnValue().Set(call_ic_function4);
 }
 
 
@@ -10464,13 +10518,12 @@ THREADED_TEST(InterceptorCallICConstantFunctionUsed) {
 
 
 static v8::Handle<Value> call_ic_function5;
-static v8::Handle<Value> InterceptorCallICGetter5(Local<String> name,
-                                                  const AccessorInfo& info) {
+static void InterceptorCallICGetter5(
+    Local<String> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   if (v8_str("x")->Equals(name))
-    return call_ic_function5;
-  else
-    return Local<Value>();
+    info.GetReturnValue().Set(call_ic_function5);
 }
 
 
@@ -10498,13 +10551,12 @@ THREADED_TEST(InterceptorCallICConstantFunctionNotNeeded) {
 
 
 static v8::Handle<Value> call_ic_function6;
-static v8::Handle<Value> InterceptorCallICGetter6(Local<String> name,
-                                                  const AccessorInfo& info) {
+static void InterceptorCallICGetter6(
+    Local<String> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   if (v8_str("x")->Equals(name))
-    return call_ic_function6;
-  else
-    return Local<Value>();
+    info.GetReturnValue().Set(call_ic_function6);
 }
 
 
@@ -10623,34 +10675,34 @@ THREADED_TEST(InterceptorCallICCachedFromGlobal) {
   CHECK_EQ(239 * 10, value->Int32Value());
 }
 
-static v8::Handle<Value> InterceptorCallICFastApi(Local<String> name,
-                                                  const AccessorInfo& info) {
+static void InterceptorCallICFastApi(
+    Local<String> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
-  CheckReturnValue(info);
+  CheckReturnValue(info, FUNCTION_ADDR(InterceptorCallICFastApi));
   int* call_count =
       reinterpret_cast<int*>(v8::External::Cast(*info.Data())->Value());
   ++(*call_count);
   if ((*call_count) % 20 == 0) {
     HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
   }
-  return v8::Handle<Value>();
 }
 
-static v8::Handle<Value> FastApiCallback_TrivialSignature(
-    const v8::Arguments& args) {
+static void FastApiCallback_TrivialSignature(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
-  CheckReturnValue(args);
+  CheckReturnValue(args, FUNCTION_ADDR(FastApiCallback_TrivialSignature));
   v8::Isolate* isolate = v8::Isolate::GetCurrent();
   CHECK_EQ(isolate, args.GetIsolate());
   CHECK_EQ(args.This(), args.Holder());
   CHECK(args.Data()->Equals(v8_str("method_data")));
-  return v8::Integer::New(args[0]->Int32Value() + 1);
+  args.GetReturnValue().Set(args[0]->Int32Value() + 1);
 }
 
-static v8::Handle<Value> FastApiCallback_SimpleSignature(
-    const v8::Arguments& args) {
+static void FastApiCallback_SimpleSignature(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
-  CheckReturnValue(args);
+  CheckReturnValue(args, FUNCTION_ADDR(FastApiCallback_SimpleSignature));
   v8::Isolate* isolate = v8::Isolate::GetCurrent();
   CHECK_EQ(isolate, args.GetIsolate());
   CHECK_EQ(args.This()->GetPrototype(), args.Holder());
@@ -10658,7 +10710,7 @@ static v8::Handle<Value> FastApiCallback_SimpleSignature(
   // Note, we're using HasRealNamedProperty instead of Has to avoid
   // invoking the interceptor again.
   CHECK(args.Holder()->HasRealNamedProperty(v8_str("foo")));
-  return v8::Integer::New(args[0]->Int32Value() + 1);
+  args.GetReturnValue().Set(args[0]->Int32Value() + 1);
 }
 
 // Helper to maximize the odds of object moving.
@@ -10672,14 +10724,13 @@ static void GenerateSomeGarbage() {
 }
 
 
-v8::Handle<v8::Value> DirectApiCallback(const v8::Arguments& args) {
+void DirectApiCallback(const v8::FunctionCallbackInfo<v8::Value>& args) {
   static int count = 0;
   if (count++ % 3 == 0) {
     HEAP->CollectAllGarbage(i::Heap::kAbortIncrementalMarkingMask);
         // This should move the stub
     GenerateSomeGarbage();  // This should ensure the old stub memory is flushed
   }
-  return v8::Handle<v8::Value>();
 }
 
 
@@ -10702,8 +10753,9 @@ THREADED_TEST(CallICFastApi_DirectCall_GCMoveStub) {
 }
 
 
-v8::Handle<v8::Value> ThrowingDirectApiCallback(const v8::Arguments& args) {
-  return v8::ThrowException(v8_str("g"));
+void ThrowingDirectApiCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  v8::ThrowException(v8_str("g"));
 }
 
 
@@ -10736,25 +10788,10 @@ static Handle<Value> DoDirectGetter() {
   return v8_str("Direct Getter Result");
 }
 
-static v8::Handle<v8::Value> DirectGetter(Local<String> name,
-                                  const v8::AccessorInfo& info) {
-  CheckReturnValue(info);
-  info.GetReturnValue().Set(v8_str("Garbage"));
-  return DoDirectGetter();
-}
-
-static v8::Handle<v8::Value> DirectGetterIndirect(
-    Local<String> name,
-    const v8::AccessorInfo& info) {
-  CheckReturnValue(info);
-  info.GetReturnValue().Set(DoDirectGetter());
-  return v8::Handle<v8::Value>();
-}
-
 static void DirectGetterCallback(
     Local<String> name,
     const v8::PropertyCallbackInfo<v8::Value>& info) {
-  CheckReturnValue(info);
+  CheckReturnValue(info, FUNCTION_ADDR(DirectGetterCallback));
   info.GetReturnValue().Set(DoDirectGetter());
 }
 
@@ -10777,16 +10814,15 @@ static void LoadICFastApi_DirectCall_GCMoveStub(Accessor accessor) {
   CHECK_EQ(31, p_getter_count);
 }
 
-THREADED_TEST(LoadICFastApi_DirectCall_GCMoveStub) {
-  LoadICFastApi_DirectCall_GCMoveStub(DirectGetterIndirect);
+THREADED_PROFILED_TEST(LoadICFastApi_DirectCall_GCMoveStub) {
   LoadICFastApi_DirectCall_GCMoveStub(DirectGetterCallback);
-  LoadICFastApi_DirectCall_GCMoveStub(DirectGetter);
 }
 
 
-v8::Handle<v8::Value> ThrowingDirectGetterCallback(
-    Local<String> name, const v8::AccessorInfo& info) {
-  return v8::ThrowException(v8_str("g"));
+void ThrowingDirectGetterCallback(
+    Local<String> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
+  v8::ThrowException(v8_str("g"));
 }
 
 
@@ -10806,7 +10842,7 @@ THREADED_TEST(LoadICFastApi_DirectCall_Throw) {
 }
 
 
-THREADED_TEST(InterceptorCallICFastApi_TrivialSignature) {
+THREADED_PROFILED_TEST(InterceptorCallICFastApi_TrivialSignature) {
   int interceptor_call_count = 0;
   v8::HandleScope scope(v8::Isolate::GetCurrent());
   v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New();
@@ -10833,7 +10869,7 @@ THREADED_TEST(InterceptorCallICFastApi_TrivialSignature) {
   CHECK_EQ(100, interceptor_call_count);
 }
 
-THREADED_TEST(InterceptorCallICFastApi_SimpleSignature) {
+THREADED_PROFILED_TEST(InterceptorCallICFastApi_SimpleSignature) {
   int interceptor_call_count = 0;
   v8::HandleScope scope(v8::Isolate::GetCurrent());
   v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New();
@@ -10864,7 +10900,7 @@ THREADED_TEST(InterceptorCallICFastApi_SimpleSignature) {
   CHECK_EQ(100, interceptor_call_count);
 }
 
-THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss1) {
+THREADED_PROFILED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss1) {
   int interceptor_call_count = 0;
   v8::HandleScope scope(v8::Isolate::GetCurrent());
   v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New();
@@ -10901,7 +10937,7 @@ THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss1) {
   CHECK_GE(interceptor_call_count, 50);
 }
 
-THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss2) {
+THREADED_PROFILED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss2) {
   int interceptor_call_count = 0;
   v8::HandleScope scope(v8::Isolate::GetCurrent());
   v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New();
@@ -10938,7 +10974,7 @@ THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss2) {
   CHECK_GE(interceptor_call_count, 50);
 }
 
-THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss3) {
+THREADED_PROFILED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss3) {
   int interceptor_call_count = 0;
   v8::HandleScope scope(v8::Isolate::GetCurrent());
   v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New();
@@ -10978,7 +11014,7 @@ THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_Miss3) {
   CHECK_GE(interceptor_call_count, 50);
 }
 
-THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_TypeError) {
+THREADED_PROFILED_TEST(InterceptorCallICFastApi_SimpleSignature_TypeError) {
   int interceptor_call_count = 0;
   v8::HandleScope scope(v8::Isolate::GetCurrent());
   v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New();
@@ -11018,7 +11054,7 @@ THREADED_TEST(InterceptorCallICFastApi_SimpleSignature_TypeError) {
   CHECK_GE(interceptor_call_count, 50);
 }
 
-THREADED_TEST(CallICFastApi_TrivialSignature) {
+THREADED_PROFILED_TEST(CallICFastApi_TrivialSignature) {
   v8::HandleScope scope(v8::Isolate::GetCurrent());
   v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New();
   v8::Handle<v8::FunctionTemplate> method_templ =
@@ -11042,7 +11078,7 @@ THREADED_TEST(CallICFastApi_TrivialSignature) {
   CHECK_EQ(42, context->Global()->Get(v8_str("result"))->Int32Value());
 }
 
-THREADED_TEST(CallICFastApi_SimpleSignature) {
+THREADED_PROFILED_TEST(CallICFastApi_SimpleSignature) {
   v8::HandleScope scope(v8::Isolate::GetCurrent());
   v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New();
   v8::Handle<v8::FunctionTemplate> method_templ =
@@ -11070,7 +11106,7 @@ THREADED_TEST(CallICFastApi_SimpleSignature) {
   CHECK_EQ(42, context->Global()->Get(v8_str("result"))->Int32Value());
 }
 
-THREADED_TEST(CallICFastApi_SimpleSignature_Miss1) {
+THREADED_PROFILED_TEST(CallICFastApi_SimpleSignature_Miss1) {
   v8::HandleScope scope(v8::Isolate::GetCurrent());
   v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New();
   v8::Handle<v8::FunctionTemplate> method_templ =
@@ -11103,7 +11139,7 @@ THREADED_TEST(CallICFastApi_SimpleSignature_Miss1) {
   CHECK_EQ(42, context->Global()->Get(v8_str("saved_result"))->Int32Value());
 }
 
-THREADED_TEST(CallICFastApi_SimpleSignature_Miss2) {
+THREADED_PROFILED_TEST(CallICFastApi_SimpleSignature_Miss2) {
   v8::HandleScope scope(v8::Isolate::GetCurrent());
   v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New();
   v8::Handle<v8::FunctionTemplate> method_templ =
@@ -11139,7 +11175,7 @@ THREADED_TEST(CallICFastApi_SimpleSignature_Miss2) {
   CHECK_EQ(42, context->Global()->Get(v8_str("saved_result"))->Int32Value());
 }
 
-THREADED_TEST(CallICFastApi_SimpleSignature_TypeError) {
+THREADED_PROFILED_TEST(CallICFastApi_SimpleSignature_TypeError) {
   v8::HandleScope scope(v8::Isolate::GetCurrent());
   v8::Handle<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New();
   v8::Handle<v8::FunctionTemplate> method_templ =
@@ -11178,13 +11214,13 @@ THREADED_TEST(CallICFastApi_SimpleSignature_TypeError) {
 
 v8::Handle<Value> keyed_call_ic_function;
 
-static v8::Handle<Value> InterceptorKeyedCallICGetter(
-    Local<String> name, const AccessorInfo& info) {
+static void InterceptorKeyedCallICGetter(
+    Local<String> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   if (v8_str("x")->Equals(name)) {
-    return keyed_call_ic_function;
+    info.GetReturnValue().Set(keyed_call_ic_function);
   }
-  return v8::Handle<Value>();
 }
 
 
@@ -11335,13 +11371,13 @@ THREADED_TEST(InterceptorKeyedCallICMapChangeAfter) {
 
 static int interceptor_call_count = 0;
 
-static v8::Handle<Value> InterceptorICRefErrorGetter(Local<String> name,
-                                                     const AccessorInfo& info) {
+static void InterceptorICRefErrorGetter(
+    Local<String> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   if (v8_str("x")->Equals(name) && interceptor_call_count++ < 20) {
-    return call_ic_function2;
+    info.GetReturnValue().Set(call_ic_function2);
   }
-  return v8::Handle<Value>();
 }
 
 
@@ -11378,18 +11414,17 @@ THREADED_TEST(InterceptorICReferenceErrors) {
 
 static int interceptor_ic_exception_get_count = 0;
 
-static v8::Handle<Value> InterceptorICExceptionGetter(
+static void InterceptorICExceptionGetter(
     Local<String> name,
-    const AccessorInfo& info) {
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   if (v8_str("x")->Equals(name) && ++interceptor_ic_exception_get_count < 20) {
-    return call_ic_function3;
+    info.GetReturnValue().Set(call_ic_function3);
   }
   if (interceptor_ic_exception_get_count == 20) {
-    return v8::ThrowException(v8_num(42));
+    v8::ThrowException(v8_num(42));
+    return;
   }
-  // Do not handle get for properties other than x.
-  return v8::Handle<Value>();
 }
 
 // Test interceptor load/call IC where the interceptor throws an
@@ -11425,14 +11460,14 @@ THREADED_TEST(InterceptorICGetterExceptions) {
 
 static int interceptor_ic_exception_set_count = 0;
 
-static v8::Handle<Value> InterceptorICExceptionSetter(
-      Local<String> key, Local<Value> value, const AccessorInfo&) {
+static void InterceptorICExceptionSetter(
+      Local<String> key,
+      Local<Value> value,
+      const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   if (++interceptor_ic_exception_set_count > 20) {
-    return v8::ThrowException(v8_num(42));
+    v8::ThrowException(v8_num(42));
   }
-  // Do not actually handle setting.
-  return v8::Handle<Value>();
 }
 
 // Test interceptor store IC where the interceptor throws an exception
@@ -11459,7 +11494,8 @@ THREADED_TEST(InterceptorICSetterExceptions) {
 THREADED_TEST(NullNamedInterceptor) {
   v8::HandleScope scope(v8::Isolate::GetCurrent());
   v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New();
-  templ->SetNamedPropertyHandler(static_cast<v8::NamedPropertyGetter>(0));
+  templ->SetNamedPropertyHandler(
+      static_cast<v8::NamedPropertyGetterCallback>(0));
   LocalContext context;
   templ->Set("x", v8_num(42));
   v8::Handle<v8::Object> obj = templ->NewInstance();
@@ -11474,7 +11510,8 @@ THREADED_TEST(NullNamedInterceptor) {
 THREADED_TEST(NullIndexedInterceptor) {
   v8::HandleScope scope(v8::Isolate::GetCurrent());
   v8::Handle<v8::ObjectTemplate> templ = ObjectTemplate::New();
-  templ->SetIndexedPropertyHandler(static_cast<v8::IndexedPropertyGetter>(0));
+  templ->SetIndexedPropertyHandler(
+      static_cast<v8::IndexedPropertyGetterCallback>(0));
   LocalContext context;
   templ->Set("42", v8_num(42));
   v8::Handle<v8::Object> obj = templ->NewInstance();
@@ -11497,11 +11534,11 @@ THREADED_TEST(NamedPropertyHandlerGetterAttributes) {
 }
 
 
-static Handle<Value> ThrowingGetter(Local<String> name,
-                                    const AccessorInfo& info) {
+static void ThrowingGetter(Local<String> name,
+                           const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
   ThrowException(Handle<Value>());
-  return Undefined();
+  info.GetReturnValue().SetUndefined();
 }
 
 
@@ -11558,7 +11595,8 @@ THREADED_TEST(VariousGetPropertiesAndThrowingCallbacks) {
 }
 
 
-static Handle<Value> ThrowingCallbackWithTryCatch(const Arguments& args) {
+static void ThrowingCallbackWithTryCatch(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   TryCatch try_catch;
   // Verboseness is important: it triggers message delivery which can call into
   // external code.
@@ -11567,7 +11605,6 @@ static Handle<Value> ThrowingCallbackWithTryCatch(const Arguments& args) {
   CHECK(try_catch.HasCaught());
   CHECK(!i::Isolate::Current()->has_pending_exception());
   CHECK(!i::Isolate::Current()->has_scheduled_exception());
-  return Undefined();
 }
 
 
@@ -11625,17 +11662,17 @@ THREADED_TEST(ExceptionsDoNotPropagatePastTryCatch) {
 }
 
 
-static v8::Handle<Value> ParentGetter(Local<String> name,
-                                      const AccessorInfo& info) {
+static void ParentGetter(Local<String> name,
+                         const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
-  return v8_num(1);
+  info.GetReturnValue().Set(v8_num(1));
 }
 
 
-static v8::Handle<Value> ChildGetter(Local<String> name,
-                                     const AccessorInfo& info) {
+static void ChildGetter(Local<String> name,
+                        const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
-  return v8_num(42);
+  info.GetReturnValue().Set(v8_num(42));
 }
 
 
@@ -11697,9 +11734,10 @@ THREADED_TEST(Overriding) {
 }
 
 
-static v8::Handle<Value> IsConstructHandler(const v8::Arguments& args) {
+static void IsConstructHandler(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
-  return v8::Boolean::New(args.IsConstructCall());
+  args.GetReturnValue().Set(args.IsConstructCall());
 }
 
 
@@ -11940,7 +11978,7 @@ void ApiTestFuzzer::CallTest() {
 }
 
 
-static v8::Handle<Value> ThrowInJS(const v8::Arguments& args) {
+static void ThrowInJS(const v8::FunctionCallbackInfo<v8::Value>& args) {
   CHECK(v8::Locker::IsLocked(CcTest::default_isolate()));
   ApiTestFuzzer::Fuzz();
   v8::Unlocker unlocker(CcTest::default_isolate());
@@ -11958,12 +11996,12 @@ static v8::Handle<Value> ThrowInJS(const v8::Arguments& args) {
       // when the TryCatch is destroyed.
       exception = Local<Value>::New(try_catch.Exception());
     }
-    return v8::ThrowException(exception);
+    v8::ThrowException(exception);
   }
 }
 
 
-static v8::Handle<Value> ThrowInJSNoCatch(const v8::Arguments& args) {
+static void ThrowInJSNoCatch(const v8::FunctionCallbackInfo<v8::Value>& args) {
   CHECK(v8::Locker::IsLocked(CcTest::default_isolate()));
   ApiTestFuzzer::Fuzz();
   v8::Unlocker unlocker(CcTest::default_isolate());
@@ -11973,7 +12011,7 @@ static v8::Handle<Value> ThrowInJSNoCatch(const v8::Arguments& args) {
     v8::HandleScope scope(args.GetIsolate());
     v8::Handle<Value> value = CompileRun(code);
     CHECK(value.IsEmpty());
-    return scope.Close(v8_str("foo"));
+    args.GetReturnValue().Set(v8_str("foo"));
   }
 }
 
@@ -12031,10 +12069,9 @@ THREADED_TEST(RecursiveLocking) {
 }
 
 
-static v8::Handle<Value> UnlockForAMoment(const v8::Arguments& args) {
+static void UnlockForAMoment(const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
   v8::Unlocker unlocker(CcTest::default_isolate());
-  return v8::Undefined();
 }
 
 
@@ -12161,9 +12198,7 @@ THREADED_TEST(NewPersistentHandleFromWeakCallback) {
   // global handle nodes are processed by PostGarbageCollectionProcessing
   // in reverse allocation order, so if second allocated handle is deleted,
   // weak callback of the first handle would be able to 'reallocate' it.
-  handle1.MakeWeak<v8::Value, void>(isolate,
-                                    NULL,
-                                    NewPersistentHandleCallback);
+  handle1.MakeWeak<v8::Value, void>(NULL, NewPersistentHandleCallback);
   handle2.Dispose(isolate);
   HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
 }
@@ -12190,7 +12225,7 @@ THREADED_TEST(DoNotUseDeletedNodesInSecondLevelGc) {
     handle1.Reset(isolate, v8::Object::New());
     handle2.Reset(isolate, v8::Object::New());
   }
-  handle1.MakeWeak<v8::Value, void>(isolate, NULL, DisposeAndForceGcCallback);
+  handle1.MakeWeak<v8::Value, void>(NULL, DisposeAndForceGcCallback);
   to_be_disposed.Reset(isolate, handle2);
   HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
 }
@@ -12205,7 +12240,7 @@ void HandleCreatingCallback(v8::Isolate* isolate,
                             v8::Persistent<v8::Value>* handle,
                             void*) {
   v8::HandleScope scope(isolate);
-  v8::Persistent<v8::Object>::New(isolate, v8::Object::New());
+  v8::Persistent<v8::Object>(isolate, v8::Object::New());
   handle->Dispose(isolate);
 }
 
@@ -12221,8 +12256,8 @@ THREADED_TEST(NoGlobalHandlesOrphaningDueToWeakCallback) {
     handle2.Reset(isolate, v8::Object::New());
     handle1.Reset(isolate, v8::Object::New());
   }
-  handle2.MakeWeak<v8::Value, void>(isolate, NULL, DisposingCallback);
-  handle3.MakeWeak<v8::Value, void>(isolate, NULL, HandleCreatingCallback);
+  handle2.MakeWeak<v8::Value, void>(NULL, DisposingCallback);
+  handle3.MakeWeak<v8::Value, void>(NULL, HandleCreatingCallback);
   HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
 }
 
@@ -12272,68 +12307,268 @@ THREADED_TEST(NestedHandleScopeAndContexts) {
 }
 
 
-static i::Handle<i::JSFunction>* foo_ptr = NULL;
-static int foo_entry_count = 0;
-static i::Handle<i::JSFunction>* bar_ptr = NULL;
-static int bar_entry_count = 0;
-static int bar_caller_count = 0;
+static bool MatchPointers(void* key1, void* key2) {
+  return key1 == key2;
+}
+
+
+struct SymbolInfo {
+  size_t id;
+  size_t size;
+  std::string name;
+};
+
+
+class SetFunctionEntryHookTest {
+ public:
+  SetFunctionEntryHookTest() {
+    CHECK(instance_ == NULL);
+    instance_ = this;
+  }
+  ~SetFunctionEntryHookTest() {
+    CHECK(instance_ == this);
+    instance_ = NULL;
+  }
+  void Reset() {
+    symbols_.clear();
+    symbol_locations_.clear();
+    invocations_.clear();
+  }
+  void RunTest();
+  void OnJitEvent(const v8::JitCodeEvent* event);
+  static void JitEvent(const v8::JitCodeEvent* event) {
+    CHECK(instance_ != NULL);
+    instance_->OnJitEvent(event);
+  }
+
+  void OnEntryHook(uintptr_t function,
+                   uintptr_t return_addr_location);
+  static void EntryHook(uintptr_t function,
+                        uintptr_t return_addr_location) {
+    CHECK(instance_ != NULL);
+    instance_->OnEntryHook(function, return_addr_location);
+  }
+
+  static void RuntimeCallback(const v8::FunctionCallbackInfo<v8::Value>& args) {
+    CHECK(instance_ != NULL);
+    args.GetReturnValue().Set(v8_num(42));
+  }
+  void RunLoopInNewEnv(v8::Isolate* isolate);
+
+  // Records addr as location of symbol.
+  void InsertSymbolAt(i::Address addr, SymbolInfo* symbol);
+
+  // Finds the symbol containing addr
+  SymbolInfo* FindSymbolForAddr(i::Address addr);
+  // Returns the number of invocations where the caller name contains
+  // \p caller_name and the function name contains \p function_name.
+  int CountInvocations(const char* caller_name,
+                       const char* function_name);
+
+  i::Handle<i::JSFunction> foo_func_;
+  i::Handle<i::JSFunction> bar_func_;
+
+  typedef std::map<size_t, SymbolInfo> SymbolMap;
+  typedef std::map<i::Address, SymbolInfo*> SymbolLocationMap;
+  typedef std::map<std::pair<SymbolInfo*, SymbolInfo*>, int> InvocationMap;
+  SymbolMap symbols_;
+  SymbolLocationMap symbol_locations_;
+  InvocationMap invocations_;
+
+  static SetFunctionEntryHookTest* instance_;
+};
+SetFunctionEntryHookTest* SetFunctionEntryHookTest::instance_ = NULL;
 
 
-static void entry_hook(uintptr_t function,
-                       uintptr_t return_addr_location) {
-  i::Code* code = i::Code::GetCodeFromTargetAddress(
+// Returns true if addr is in the range [start, start+len).
+static bool Overlaps(i::Address start, size_t len, i::Address addr) {
+  if (start <= addr && start + len > addr)
+    return true;
+
+  return false;
+}
+
+void SetFunctionEntryHookTest::InsertSymbolAt(i::Address addr,
+                                              SymbolInfo* symbol) {
+  // Insert the symbol at the new location.
+  SymbolLocationMap::iterator it =
+      symbol_locations_.insert(std::make_pair(addr, symbol)).first;
+  // Now erase symbols to the left and right that overlap this one.
+  while (it != symbol_locations_.begin()) {
+    SymbolLocationMap::iterator left = it;
+    --left;
+    if (!Overlaps(left->first, left->second->size, addr))
+      break;
+    symbol_locations_.erase(left);
+  }
+
+  // Now erase symbols to the left and right that overlap this one.
+  while (true) {
+    SymbolLocationMap::iterator right = it;
+    ++right;
+    if (right == symbol_locations_.end())
+        break;
+    if (!Overlaps(addr, symbol->size, right->first))
+      break;
+    symbol_locations_.erase(right);
+  }
+}
+
+
+void SetFunctionEntryHookTest::OnJitEvent(const v8::JitCodeEvent* event) {
+  switch (event->type) {
+    case v8::JitCodeEvent::CODE_ADDED: {
+        CHECK(event->code_start != NULL);
+        CHECK_NE(0, static_cast<int>(event->code_len));
+        CHECK(event->name.str != NULL);
+        size_t symbol_id = symbols_.size();
+
+        // Record the new symbol.
+        SymbolInfo& info = symbols_[symbol_id];
+        info.id = symbol_id;
+        info.size = event->code_len;
+        info.name.assign(event->name.str, event->name.str + event->name.len);
+
+        // And record it's location.
+        InsertSymbolAt(reinterpret_cast<i::Address>(event->code_start), &info);
+      }
+      break;
+
+    case v8::JitCodeEvent::CODE_MOVED: {
+        // We would like to never see code move that we haven't seen before,
+        // but the code creation event does not happen until the line endings
+        // have been calculated (this is so that we can report the line in the
+        // script at which the function source is found, see
+        // Compiler::RecordFunctionCompilation) and the line endings
+        // calculations can cause a GC, which can move the newly created code
+        // before its existence can be logged.
+        SymbolLocationMap::iterator it(
+            symbol_locations_.find(
+                reinterpret_cast<i::Address>(event->code_start)));
+        if (it != symbol_locations_.end()) {
+          // Found a symbol at this location, move it.
+          SymbolInfo* info = it->second;
+          symbol_locations_.erase(it);
+          InsertSymbolAt(reinterpret_cast<i::Address>(event->new_code_start),
+                         info);
+        }
+      }
+    default:
+      break;
+  }
+}
+
+void SetFunctionEntryHookTest::OnEntryHook(
+    uintptr_t function, uintptr_t return_addr_location) {
+  // Get the function's code object.
+  i::Code* function_code = i::Code::GetCodeFromTargetAddress(
       reinterpret_cast<i::Address>(function));
-  CHECK(code != NULL);
+  CHECK(function_code != NULL);
 
-  if (bar_ptr != NULL && code == (*bar_ptr)->code())
-    ++bar_entry_count;
+  // Then try and look up the caller's code object.
+  i::Address caller = *reinterpret_cast<i::Address*>(return_addr_location);
 
-  if (foo_ptr != NULL && code == (*foo_ptr)->code())
-    ++foo_entry_count;
+  // Count the invocation.
+  SymbolInfo* caller_symbol = FindSymbolForAddr(caller);
+  SymbolInfo* function_symbol =
+      FindSymbolForAddr(reinterpret_cast<i::Address>(function));
+  ++invocations_[std::make_pair(caller_symbol, function_symbol)];
 
-  // Let's check whether bar is the caller.
-  if (bar_ptr != NULL) {
-    const v8::internal::byte* caller =
-        *reinterpret_cast<v8::internal::byte**>(return_addr_location);
+  if (!bar_func_.is_null() && function_code == bar_func_->code()) {
+    // Check that we have a symbol for the "bar" function at the right location.
+    SymbolLocationMap::iterator it(
+        symbol_locations_.find(function_code->instruction_start()));
+    CHECK(it != symbol_locations_.end());
+  }
 
-    if ((*bar_ptr)->code()->instruction_start() <= caller &&
-        (*bar_ptr)->code()->instruction_end() > caller) {
-      ++bar_caller_count;
-    }
+  if (!foo_func_.is_null() && function_code == foo_func_->code()) {
+    // Check that we have a symbol for "foo" at the right location.
+    SymbolLocationMap::iterator it(
+        symbol_locations_.find(function_code->instruction_start()));
+    CHECK(it != symbol_locations_.end());
   }
 }
 
 
-static void RunLoopInNewEnv() {
-  bar_ptr = NULL;
-  foo_ptr = NULL;
+SymbolInfo* SetFunctionEntryHookTest::FindSymbolForAddr(i::Address addr) {
+  SymbolLocationMap::iterator it(symbol_locations_.lower_bound(addr));
+  // Do we have a direct hit on a symbol?
+  if (it != symbol_locations_.end()) {
+    if (it->first == addr)
+      return it->second;
+  }
 
-  v8::Isolate* isolate = v8::Isolate::GetCurrent();
+  // If not a direct hit, it'll have to be the previous symbol.
+  if (it == symbol_locations_.begin())
+    return NULL;
+
+  --it;
+  size_t offs = addr - it->first;
+  if (offs < it->second->size)
+    return it->second;
+
+  return NULL;
+}
+
+
+int SetFunctionEntryHookTest::CountInvocations(
+    const char* caller_name, const char* function_name) {
+  InvocationMap::iterator it(invocations_.begin());
+  int invocations = 0;
+  for (; it != invocations_.end(); ++it) {
+    SymbolInfo* caller = it->first.first;
+    SymbolInfo* function = it->first.second;
+
+    // Filter out non-matching functions.
+    if (function_name != NULL) {
+      if (function->name.find(function_name) == std::string::npos)
+        continue;
+    }
+
+    // Filter out non-matching callers.
+    if (caller_name != NULL) {
+      if (caller == NULL)
+        continue;
+      if (caller->name.find(caller_name) == std::string::npos)
+        continue;
+    }
+
+    // It matches add the invocation count to the tally.
+    invocations += it->second;
+  }
+
+  return invocations;
+}
+
+
+void SetFunctionEntryHookTest::RunLoopInNewEnv(v8::Isolate* isolate) {
   v8::HandleScope outer(isolate);
   v8::Local<Context> env = Context::New(isolate);
   env->Enter();
 
+  Local<ObjectTemplate> t = ObjectTemplate::New();
+  t->Set(v8_str("asdf"), v8::FunctionTemplate::New(RuntimeCallback));
+  env->Global()->Set(v8_str("obj"), t->NewInstance());
+
   const char* script =
-      "function bar() {"
-      "  var sum = 0;"
-      "  for (i = 0; i < 100; ++i)"
-      "    sum = foo(i);"
-      "  return sum;"
-      "}"
-      "function foo(i) { return i * i; }";
+      "function bar() {\n"
+      "  var sum = 0;\n"
+      "  for (i = 0; i < 100; ++i)\n"
+      "    sum = foo(i);\n"
+      "  return sum;\n"
+      "}\n"
+      "function foo(i) { return i * i; }\n"
+      "// Invoke on the runtime function.\n"
+      "obj.asdf()";
   CompileRun(script);
-  i::Handle<i::JSFunction> bar =
-      i::Handle<i::JSFunction>::cast(
+  bar_func_ = i::Handle<i::JSFunction>::cast(
           v8::Utils::OpenHandle(*env->Global()->Get(v8_str("bar"))));
-  ASSERT(*bar);
+  ASSERT(!bar_func_.is_null());
 
-  i::Handle<i::JSFunction> foo =
+  foo_func_ =
       i::Handle<i::JSFunction>::cast(
            v8::Utils::OpenHandle(*env->Global()->Get(v8_str("foo"))));
-  ASSERT(*foo);
-
-  bar_ptr = &bar;
-  foo_ptr = &foo;
+  ASSERT(!foo_func_.is_null());
 
   v8::Handle<v8::Value> value = CompileRun("bar();");
   CHECK(value->IsNumber());
@@ -12348,6 +12583,55 @@ static void RunLoopInNewEnv() {
   env->Exit();
 }
 
+void SetFunctionEntryHookTest::RunTest() {
+  // Work in a new isolate throughout.
+  v8::Isolate* isolate = v8::Isolate::New();
+
+  // Test setting the entry hook on the new isolate.
+  CHECK(v8::V8::SetFunctionEntryHook(isolate, EntryHook));
+
+  // Replacing the hook, once set should fail.
+  CHECK_EQ(false, v8::V8::SetFunctionEntryHook(isolate, EntryHook));
+
+  {
+    v8::Isolate::Scope scope(isolate);
+
+    v8::V8::SetJitCodeEventHandler(v8::kJitCodeEventDefault, JitEvent);
+
+    RunLoopInNewEnv(isolate);
+
+    // Check the exepected invocation counts.
+    CHECK_EQ(2, CountInvocations(NULL, "bar"));
+    CHECK_EQ(200, CountInvocations("bar", "foo"));
+    CHECK_EQ(200, CountInvocations(NULL, "foo"));
+
+    // Verify that we have an entry hook on some specific stubs.
+    CHECK_NE(0, CountInvocations(NULL, "CEntryStub"));
+    CHECK_NE(0, CountInvocations(NULL, "JSEntryStub"));
+    CHECK_NE(0, CountInvocations(NULL, "JSEntryTrampoline"));
+  }
+  isolate->Dispose();
+
+  Reset();
+
+  // Make sure a second isolate is unaffected by the previous entry hook.
+  isolate = v8::Isolate::New();
+  {
+    v8::Isolate::Scope scope(isolate);
+
+    // Reset the entry count to zero and set the entry hook.
+    RunLoopInNewEnv(isolate);
+
+    // We should record no invocations in this isolate.
+    CHECK_EQ(0, static_cast<int>(invocations_.size()));
+  }
+  // Since the isolate has been used, we shouldn't be able to set an entry
+  // hook anymore.
+  CHECK_EQ(false, v8::V8::SetFunctionEntryHook(isolate, EntryHook));
+
+  isolate->Dispose();
+}
+
 
 TEST(SetFunctionEntryHook) {
   // FunctionEntryHook does not work well with experimental natives.
@@ -12360,42 +12644,8 @@ TEST(SetFunctionEntryHook) {
   i::FLAG_allow_natives_syntax = true;
   i::FLAG_use_inlining = false;
 
-  // Test setting and resetting the entry hook.
-  // Nulling it should always succeed.
-  CHECK(v8::V8::SetFunctionEntryHook(NULL));
-
-  CHECK(v8::V8::SetFunctionEntryHook(entry_hook));
-  // Setting a hook while one's active should fail.
-  CHECK_EQ(false, v8::V8::SetFunctionEntryHook(entry_hook));
-
-  CHECK(v8::V8::SetFunctionEntryHook(NULL));
-
-  // Reset the entry count to zero and set the entry hook.
-  bar_entry_count = 0;
-  bar_caller_count = 0;
-  foo_entry_count = 0;
-  CHECK(v8::V8::SetFunctionEntryHook(entry_hook));
-  RunLoopInNewEnv();
-
-  CHECK_EQ(2, bar_entry_count);
-  CHECK_EQ(200, bar_caller_count);
-  CHECK_EQ(200, foo_entry_count);
-
-  // Clear the entry hook and count.
-  bar_entry_count = 0;
-  bar_caller_count = 0;
-  foo_entry_count = 0;
-  v8::V8::SetFunctionEntryHook(NULL);
-
-  // Clear the compilation cache to make sure we don't reuse the
-  // functions from the previous invocation.
-  v8::internal::Isolate::Current()->compilation_cache()->Clear();
-
-  // Verify that entry hooking is now disabled.
-  RunLoopInNewEnv();
-  CHECK_EQ(0u, bar_entry_count);
-  CHECK_EQ(0u, bar_caller_count);
-  CHECK_EQ(0u, foo_entry_count);
+  SetFunctionEntryHookTest test;
+  test.RunTest();
 }
 
 
@@ -12537,11 +12787,6 @@ static void event_handler(const v8::JitCodeEvent* event) {
 }
 
 
-static bool MatchPointers(void* key1, void* key2) {
-  return key1 == key2;
-}
-
-
 TEST(SetJitCodeEventHandler) {
   i::FLAG_stress_compaction = true;
   i::FLAG_incremental_marking = false;
@@ -12672,7 +12917,8 @@ THREADED_TEST(DisposeEnteredContext) {
   {
     // Don't want a handle here, so do this unsafely
     v8::Handle<v8::Context> inner_local =
-        *reinterpret_cast<v8::Handle<v8::Context>*>(&inner);
+        v8::Utils::Convert<i::Object, v8::Context>(
+            v8::Utils::OpenPersistent(inner));
     inner_local->Enter();
     inner.Dispose();
     inner.Clear();
@@ -12793,9 +13039,10 @@ THREADED_TEST(CompilationCache) {
 }
 
 
-static v8::Handle<Value> FunctionNameCallback(const v8::Arguments& args) {
+static void FunctionNameCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
-  return v8_num(42);
+  args.GetReturnValue().Set(v8_num(42));
 }
 
 
@@ -13964,28 +14211,27 @@ static int force_set_set_count = 0;
 static int force_set_get_count = 0;
 bool pass_on_get = false;
 
-static v8::Handle<v8::Value> ForceSetGetter(v8::Local<v8::String> name,
-                                            const v8::AccessorInfo& info) {
+static void ForceSetGetter(v8::Local<v8::String> name,
+                           const v8::PropertyCallbackInfo<v8::Value>& info) {
   force_set_get_count++;
   if (pass_on_get) {
-    return v8::Handle<v8::Value>();
-  } else {
-    return v8::Int32::New(3);
+    return;
   }
+  info.GetReturnValue().Set(3);
 }
 
 static void ForceSetSetter(v8::Local<v8::String> name,
                            v8::Local<v8::Value> value,
-                           const v8::AccessorInfo& info) {
+                           const v8::PropertyCallbackInfo<void>& info) {
   force_set_set_count++;
 }
 
-static v8::Handle<v8::Value> ForceSetInterceptSetter(
+static void ForceSetInterceptSetter(
     v8::Local<v8::String> name,
     v8::Local<v8::Value> value,
-    const v8::AccessorInfo& info) {
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   force_set_set_count++;
-  return v8::Undefined();
+  info.GetReturnValue().SetUndefined();
 }
 
 TEST(ForceSet) {
@@ -14099,15 +14345,12 @@ static int force_delete_interceptor_count = 0;
 static bool pass_on_delete = false;
 
 
-static v8::Handle<v8::Boolean> ForceDeleteDeleter(
+static void ForceDeleteDeleter(
     v8::Local<v8::String> name,
-    const v8::AccessorInfo& info) {
+    const v8::PropertyCallbackInfo<v8::Boolean>& info) {
   force_delete_interceptor_count++;
-  if (pass_on_delete) {
-    return v8::Handle<v8::Boolean>();
-  } else {
-    return v8::True();
-  }
+  if (pass_on_delete) return;
+  info.GetReturnValue().Set(true);
 }
 
 
@@ -14213,13 +14456,26 @@ static v8::Local<Context> calling_context2;
 // Check that the call to the callback is initiated in
 // calling_context2, the directly calling context is calling_context1
 // and the callback itself is in calling_context0.
-static v8::Handle<Value> GetCallingContextCallback(const v8::Arguments& args) {
+static void GetCallingContextCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   ApiTestFuzzer::Fuzz();
   CHECK(Context::GetCurrent() == calling_context0);
   CHECK(args.GetIsolate()->GetCurrentContext() == calling_context0);
   CHECK(Context::GetCalling() == calling_context1);
   CHECK(Context::GetEntered() == calling_context2);
-  return v8::Integer::New(42);
+  args.GetReturnValue().Set(42);
+}
+
+
+THREADED_TEST(GetCurrentContextWhenNotInContext) {
+  i::Isolate* isolate = i::Isolate::Current();
+  CHECK(isolate != NULL);
+  CHECK(isolate->context() == NULL);
+  v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate);
+  v8::HandleScope scope(v8_isolate);
+  // The following should not crash, but return an empty handle.
+  v8::Local<v8::Context> current = v8_isolate->GetCurrentContext();
+  CHECK(current.IsEmpty());
 }
 
 
@@ -14725,20 +14981,18 @@ THREADED_TEST(PixelArrayInfo) {
 }
 
 
-static v8::Handle<Value> NotHandledIndexedPropertyGetter(
+static void NotHandledIndexedPropertyGetter(
     uint32_t index,
-    const AccessorInfo& info) {
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
-  return v8::Handle<Value>();
 }
 
 
-static v8::Handle<Value> NotHandledIndexedPropertySetter(
+static void NotHandledIndexedPropertySetter(
     uint32_t index,
     Local<Value> value,
-    const AccessorInfo& info) {
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   ApiTestFuzzer::Fuzz();
-  return v8::Handle<Value>();
 }
 
 
@@ -15469,8 +15723,6 @@ template <typename ElementType, typename TypedArray,
 void TypedArrayTestHelper(v8::ExternalArrayType array_type,
                           int64_t low, int64_t high) {
   const int kElementCount = 50;
-  i::FLAG_harmony_array_buffer = true;
-  i::FLAG_harmony_typed_arrays = true;
 
   i::ScopedVector<ElementType> backing_store(kElementCount+2);
 
@@ -15554,8 +15806,27 @@ THREADED_TEST(Uint8ClampedArray) {
 }
 
 
-#define IS_TYPED_ARRAY_TEST(TypedArray) \
-  THREADED_TEST(Is##TypedArray) {                                             \
+THREADED_TEST(DataView) {
+  const int kSize = 50;
+
+  i::ScopedVector<uint8_t> backing_store(kSize+2);
+
+  LocalContext env;
+  v8::Isolate* isolate = env->GetIsolate();
+  v8::HandleScope handle_scope(isolate);
+
+  Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(
+      backing_store.start(), 2 + kSize);
+  Local<v8::DataView> dv =
+      v8::DataView::New(ab, 2, kSize);
+  CHECK_EQ(2, static_cast<int>(dv->ByteOffset()));
+  CHECK_EQ(kSize, static_cast<int>(dv->ByteLength()));
+  CHECK_EQ(ab, dv->Buffer());
+}
+
+
+#define IS_ARRAY_BUFFER_VIEW_TEST(View)                                       \
+  THREADED_TEST(Is##View) {                                                   \
     i::FLAG_harmony_array_buffer = true;                                      \
     i::FLAG_harmony_typed_arrays = true;                                      \
     LocalContext env;                                                         \
@@ -15564,21 +15835,23 @@ THREADED_TEST(Uint8ClampedArray) {
                                                                               \
     Handle<Value> result = CompileRun(                                        \
         "var ab = new ArrayBuffer(128);"                                      \
-        "new " #TypedArray "(ab)");                                           \
-    CHECK(result->Is##TypedArray());                                          \
+        "new " #View "(ab)");                                                 \
+    CHECK(result->IsArrayBufferView());                                       \
+    CHECK(result->Is##View());                                                \
   }
 
-IS_TYPED_ARRAY_TEST(Uint8Array)
-IS_TYPED_ARRAY_TEST(Int8Array)
-IS_TYPED_ARRAY_TEST(Uint16Array)
-IS_TYPED_ARRAY_TEST(Int16Array)
-IS_TYPED_ARRAY_TEST(Uint32Array)
-IS_TYPED_ARRAY_TEST(Int32Array)
-IS_TYPED_ARRAY_TEST(Float32Array)
-IS_TYPED_ARRAY_TEST(Float64Array)
-IS_TYPED_ARRAY_TEST(Uint8ClampedArray)
+IS_ARRAY_BUFFER_VIEW_TEST(Uint8Array)
+IS_ARRAY_BUFFER_VIEW_TEST(Int8Array)
+IS_ARRAY_BUFFER_VIEW_TEST(Uint16Array)
+IS_ARRAY_BUFFER_VIEW_TEST(Int16Array)
+IS_ARRAY_BUFFER_VIEW_TEST(Uint32Array)
+IS_ARRAY_BUFFER_VIEW_TEST(Int32Array)
+IS_ARRAY_BUFFER_VIEW_TEST(Float32Array)
+IS_ARRAY_BUFFER_VIEW_TEST(Float64Array)
+IS_ARRAY_BUFFER_VIEW_TEST(Uint8ClampedArray)
+IS_ARRAY_BUFFER_VIEW_TEST(DataView)
 
-#undef IS_TYPED_ARRAY_TEST
+#undef IS_ARRAY_BUFFER_VIEW_TEST
 
 
 
@@ -15634,7 +15907,7 @@ void checkStackFrame(const char* expected_script_name,
 }
 
 
-v8::Handle<Value> AnalyzeStackInNativeCode(const v8::Arguments& args) {
+void AnalyzeStackInNativeCode(const v8::FunctionCallbackInfo<v8::Value>& args) {
   v8::HandleScope scope(args.GetIsolate());
   const char* origin = "capture-stack-trace-test";
   const int kOverviewTest = 1;
@@ -15682,7 +15955,6 @@ v8::Handle<Value> AnalyzeStackInNativeCode(const v8::Arguments& args) {
 
     CHECK(stackTrace->AsArray()->IsArray());
   }
-  return v8::Undefined();
 }
 
 
@@ -15921,7 +16193,8 @@ TEST(RethrowBogusErrorStackTrace) {
 }
 
 
-v8::Handle<Value> AnalyzeStackOfEvalWithSourceURL(const v8::Arguments& args) {
+void AnalyzeStackOfEvalWithSourceURL(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   v8::HandleScope scope(args.GetIsolate());
   v8::Handle<v8::StackTrace> stackTrace =
       v8::StackTrace::CurrentStackTrace(10, v8::StackTrace::kDetailed);
@@ -15933,7 +16206,6 @@ v8::Handle<Value> AnalyzeStackOfEvalWithSourceURL(const v8::Arguments& args) {
     CHECK(!name.IsEmpty());
     CHECK_EQ(url, name);
   }
-  return v8::Undefined();
 }
 
 
@@ -15965,8 +16237,8 @@ TEST(SourceURLInStackTrace) {
 }
 
 
-v8::Handle<Value> AnalyzeStackOfInlineScriptWithSourceURL(
-    const v8::Arguments& args) {
+void AnalyzeStackOfInlineScriptWithSourceURL(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   v8::HandleScope scope(args.GetIsolate());
   v8::Handle<v8::StackTrace> stackTrace =
       v8::StackTrace::CurrentStackTrace(10, v8::StackTrace::kDetailed);
@@ -15978,7 +16250,6 @@ v8::Handle<Value> AnalyzeStackOfInlineScriptWithSourceURL(
     CHECK(!name.IsEmpty());
     CHECK_EQ(url, name);
   }
-  return v8::Undefined();
 }
 
 
@@ -16011,8 +16282,8 @@ TEST(InlineScriptWithSourceURLInStackTrace) {
 }
 
 
-v8::Handle<Value> AnalyzeStackOfDynamicScriptWithSourceURL(
-    const v8::Arguments& args) {
+void AnalyzeStackOfDynamicScriptWithSourceURL(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   v8::HandleScope scope(args.GetIsolate());
   v8::Handle<v8::StackTrace> stackTrace =
       v8::StackTrace::CurrentStackTrace(10, v8::StackTrace::kDetailed);
@@ -16024,7 +16295,6 @@ v8::Handle<Value> AnalyzeStackOfDynamicScriptWithSourceURL(
     CHECK(!name.IsEmpty());
     CHECK_EQ(url, name);
   }
-  return v8::Undefined();
 }
 
 
@@ -16160,10 +16430,10 @@ TEST(Regress2107) {
 
 static uint32_t* stack_limit;
 
-static v8::Handle<Value> GetStackLimitCallback(const v8::Arguments& args) {
+static void GetStackLimitCallback(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   stack_limit = reinterpret_cast<uint32_t*>(
       i::Isolate::Current()->stack_guard()->real_climit());
-  return v8::Undefined();
 }
 
 
@@ -16432,14 +16702,14 @@ THREADED_TEST(QuietSignalingNaNs) {
 }
 
 
-static v8::Handle<Value> SpaghettiIncident(const v8::Arguments& args) {
+static void SpaghettiIncident(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   v8::HandleScope scope(args.GetIsolate());
   v8::TryCatch tc;
   v8::Handle<v8::String> str(args[0]->ToString());
   USE(str);
   if (tc.HasCaught())
-    return tc.ReThrow();
-  return v8::Undefined();
+    tc.ReThrow();
 }
 
 
@@ -16643,40 +16913,42 @@ THREADED_TEST(FunctionGetScriptId) {
 }
 
 
-static v8::Handle<Value> GetterWhichReturns42(Local<String> name,
-                                              const AccessorInfo& info) {
+static void GetterWhichReturns42(
+    Local<String> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   CHECK(v8::Utils::OpenHandle(*info.This())->IsJSObject());
   CHECK(v8::Utils::OpenHandle(*info.Holder())->IsJSObject());
-  return v8_num(42);
+  info.GetReturnValue().Set(v8_num(42));
 }
 
 
-static void SetterWhichSetsYOnThisTo23(Local<String> name,
-                                       Local<Value> value,
-                                       const AccessorInfo& info) {
+static void SetterWhichSetsYOnThisTo23(
+    Local<String> name,
+    Local<Value> value,
+    const v8::PropertyCallbackInfo<void>& info) {
   CHECK(v8::Utils::OpenHandle(*info.This())->IsJSObject());
   CHECK(v8::Utils::OpenHandle(*info.Holder())->IsJSObject());
   info.This()->Set(v8_str("y"), v8_num(23));
 }
 
 
-Handle<Value> FooGetInterceptor(Local<String> name,
-                                const AccessorInfo& info) {
+void FooGetInterceptor(Local<String> name,
+                       const v8::PropertyCallbackInfo<v8::Value>& info) {
   CHECK(v8::Utils::OpenHandle(*info.This())->IsJSObject());
   CHECK(v8::Utils::OpenHandle(*info.Holder())->IsJSObject());
-  if (!name->Equals(v8_str("foo"))) return Handle<Value>();
-  return v8_num(42);
+  if (!name->Equals(v8_str("foo"))) return;
+  info.GetReturnValue().Set(v8_num(42));
 }
 
 
-Handle<Value> FooSetInterceptor(Local<String> name,
-                                Local<Value> value,
-                                const AccessorInfo& info) {
+void FooSetInterceptor(Local<String> name,
+                       Local<Value> value,
+                       const v8::PropertyCallbackInfo<v8::Value>& info) {
   CHECK(v8::Utils::OpenHandle(*info.This())->IsJSObject());
   CHECK(v8::Utils::OpenHandle(*info.Holder())->IsJSObject());
-  if (!name->Equals(v8_str("foo"))) return Handle<Value>();
+  if (!name->Equals(v8_str("foo"))) return;
   info.This()->Set(v8_str("y"), v8_num(23));
-  return v8_num(23);
+  info.GetReturnValue().Set(v8_num(23));
 }
 
 
@@ -16715,18 +16987,20 @@ TEST(SetterOnConstructorPrototype) {
 }
 
 
-static v8::Handle<Value> NamedPropertyGetterWhichReturns42(
-    Local<String> name, const AccessorInfo& info) {
-  return v8_num(42);
+static void NamedPropertyGetterWhichReturns42(
+    Local<String> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
+  info.GetReturnValue().Set(v8_num(42));
 }
 
 
-static v8::Handle<Value> NamedPropertySetterWhichSetsYOnThisTo23(
-    Local<String> name, Local<Value> value, const AccessorInfo& info) {
+static void NamedPropertySetterWhichSetsYOnThisTo23(
+    Local<String> name,
+    Local<Value> value,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   if (name->Equals(v8_str("x"))) {
     info.This()->Set(v8_str("y"), v8_num(23));
   }
-  return v8::Handle<Value>();
 }
 
 
@@ -16865,6 +17139,7 @@ TEST(GCCallbacks) {
 
 
 THREADED_TEST(AddToJSFunctionResultCache) {
+  i::FLAG_stress_compaction = false;
   i::FLAG_allow_natives_syntax = true;
   v8::HandleScope scope(v8::Isolate::GetCurrent());
 
@@ -17966,16 +18241,16 @@ THREADED_TEST(Equals) {
 }
 
 
-static v8::Handle<v8::Value> Getter(v8::Local<v8::String> property,
-                                    const v8::AccessorInfo& info ) {
-  return v8_str("42!");
+static void Getter(v8::Local<v8::String> property,
+                   const v8::PropertyCallbackInfo<v8::Value>& info ) {
+  info.GetReturnValue().Set(v8_str("42!"));
 }
 
 
-static v8::Handle<v8::Array> Enumerator(const v8::AccessorInfo& info) {
+static void Enumerator(const v8::PropertyCallbackInfo<v8::Array>& info) {
   v8::Handle<v8::Array> result = v8::Array::New();
   result->Set(0, v8_str("universalAnswer"));
-  return result;
+  info.GetReturnValue().Set(result);
 }
 
 
@@ -18121,44 +18396,44 @@ THREADED_TEST(CreationContextOfJsFunction) {
 }
 
 
-Handle<Value> HasOwnPropertyIndexedPropertyGetter(uint32_t index,
-                                                  const AccessorInfo& info) {
-  if (index == 42) return v8_str("yes");
-  return Handle<v8::Integer>();
+void HasOwnPropertyIndexedPropertyGetter(
+    uint32_t index,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
+  if (index == 42) info.GetReturnValue().Set(v8_str("yes"));
 }
 
 
-Handle<Value> HasOwnPropertyNamedPropertyGetter(Local<String> property,
-                                                const AccessorInfo& info) {
-  if (property->Equals(v8_str("foo"))) return v8_str("yes");
-  return Handle<Value>();
+void HasOwnPropertyNamedPropertyGetter(
+    Local<String> property,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
+  if (property->Equals(v8_str("foo"))) info.GetReturnValue().Set(v8_str("yes"));
 }
 
 
-Handle<v8::Integer> HasOwnPropertyIndexedPropertyQuery(
-    uint32_t index, const AccessorInfo& info) {
-  if (index == 42) return v8_num(1).As<v8::Integer>();
-  return Handle<v8::Integer>();
+void HasOwnPropertyIndexedPropertyQuery(
+    uint32_t index, const v8::PropertyCallbackInfo<v8::Integer>& info) {
+  if (index == 42) info.GetReturnValue().Set(1);
 }
 
 
-Handle<v8::Integer> HasOwnPropertyNamedPropertyQuery(
-    Local<String> property, const AccessorInfo& info) {
-  if (property->Equals(v8_str("foo"))) return v8_num(1).As<v8::Integer>();
-  return Handle<v8::Integer>();
+void HasOwnPropertyNamedPropertyQuery(
+    Local<String> property,
+    const v8::PropertyCallbackInfo<v8::Integer>& info) {
+  if (property->Equals(v8_str("foo"))) info.GetReturnValue().Set(1);
 }
 
 
-Handle<v8::Integer> HasOwnPropertyNamedPropertyQuery2(
-    Local<String> property, const AccessorInfo& info) {
-  if (property->Equals(v8_str("bar"))) return v8_num(1).As<v8::Integer>();
-  return Handle<v8::Integer>();
+void HasOwnPropertyNamedPropertyQuery2(
+    Local<String> property,
+    const v8::PropertyCallbackInfo<v8::Integer>& info) {
+  if (property->Equals(v8_str("bar"))) info.GetReturnValue().Set(1);
 }
 
 
-Handle<Value> HasOwnPropertyAccessorGetter(Local<String> property,
-                                           const AccessorInfo& info) {
-  return v8_str("yes");
+void HasOwnPropertyAccessorGetter(
+    Local<String> property,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
+  info.GetReturnValue().Set(v8_str("yes"));
 }
 
 
@@ -18345,8 +18620,7 @@ TEST(SetErrorMessageForCodeGenFromStrings) {
 }
 
 
-static v8::Handle<Value> NonObjectThis(const v8::Arguments& args) {
-  return v8::Undefined();
+static void NonObjectThis(const v8::FunctionCallbackInfo<v8::Value>& args) {
 }
 
 
@@ -18659,7 +18933,7 @@ void CallCompletedCallback2() {
 }
 
 
-Handle<Value> RecursiveCall(const Arguments& args) {
+void RecursiveCall(const v8::FunctionCallbackInfo<v8::Value>& args) {
   int32_t level = args[0]->Int32Value();
   if (level < 3) {
     level++;
@@ -18674,7 +18948,6 @@ Handle<Value> RecursiveCall(const Arguments& args) {
     i::OS::Print("Recursion ends.\n");
     CHECK_EQ(0, callback_fired);
   }
-  return Undefined();
 }
 
 
@@ -18807,13 +19080,6 @@ TEST(PrimaryStubCache) {
 }
 
 
-static int fatal_error_callback_counter = 0;
-static void CountingErrorCallback(const char* location, const char* message) {
-  printf("CountingErrorCallback(\"%s\", \"%s\")\n", location, message);
-  fatal_error_callback_counter++;
-}
-
-
 TEST(StaticGetters) {
   LocalContext context;
   i::Factory* factory = i::Isolate::Current()->factory();
@@ -18831,31 +19097,6 @@ TEST(StaticGetters) {
   i::Handle<i::Object> false_value = factory->false_value();
   CHECK(*v8::Utils::OpenHandle(*v8::False()) == *false_value);
   CHECK(*v8::Utils::OpenHandle(*v8::False(isolate)) == *false_value);
-
-  // Test after-death behavior.
-  CHECK(i::Internals::IsInitialized(isolate));
-  CHECK_EQ(0, fatal_error_callback_counter);
-  v8::V8::SetFatalErrorHandler(CountingErrorCallback);
-  v8::Utils::ReportApiFailure("StaticGetters()", "Kill V8");
-  i::Isolate::Current()->TearDown();
-  CHECK(!i::Internals::IsInitialized(isolate));
-  CHECK_EQ(1, fatal_error_callback_counter);
-  CHECK(v8::Undefined().IsEmpty());
-  CHECK_EQ(2, fatal_error_callback_counter);
-  CHECK(v8::Undefined(isolate).IsEmpty());
-  CHECK_EQ(3, fatal_error_callback_counter);
-  CHECK(v8::Null().IsEmpty());
-  CHECK_EQ(4, fatal_error_callback_counter);
-  CHECK(v8::Null(isolate).IsEmpty());
-  CHECK_EQ(5, fatal_error_callback_counter);
-  CHECK(v8::True().IsEmpty());
-  CHECK_EQ(6, fatal_error_callback_counter);
-  CHECK(v8::True(isolate).IsEmpty());
-  CHECK_EQ(7, fatal_error_callback_counter);
-  CHECK(v8::False().IsEmpty());
-  CHECK_EQ(8, fatal_error_callback_counter);
-  CHECK(v8::False(isolate).IsEmpty());
-  CHECK_EQ(9, fatal_error_callback_counter);
 }
 
 
@@ -18885,35 +19126,23 @@ TEST(StringEmpty) {
   i::Handle<i::Object> empty_string = factory->empty_string();
   CHECK(*v8::Utils::OpenHandle(*v8::String::Empty()) == *empty_string);
   CHECK(*v8::Utils::OpenHandle(*v8::String::Empty(isolate)) == *empty_string);
-
-  // Test after-death behavior.
-  CHECK(i::Internals::IsInitialized(isolate));
-  CHECK_EQ(0, fatal_error_callback_counter);
-  v8::V8::SetFatalErrorHandler(CountingErrorCallback);
-  v8::Utils::ReportApiFailure("StringEmpty()", "Kill V8");
-  i::Isolate::Current()->TearDown();
-  CHECK(!i::Internals::IsInitialized(isolate));
-  CHECK_EQ(1, fatal_error_callback_counter);
-  CHECK(v8::String::Empty().IsEmpty());
-  CHECK_EQ(2, fatal_error_callback_counter);
-  CHECK(v8::String::Empty(isolate).IsEmpty());
-  CHECK_EQ(3, fatal_error_callback_counter);
 }
 
 
 static int instance_checked_getter_count = 0;
-static Handle<Value> InstanceCheckedGetter(Local<String> name,
-                                           const AccessorInfo& info) {
+static void InstanceCheckedGetter(
+    Local<String> name,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   CHECK_EQ(name, v8_str("foo"));
   instance_checked_getter_count++;
-  return v8_num(11);
+  info.GetReturnValue().Set(v8_num(11));
 }
 
 
 static int instance_checked_setter_count = 0;
 static void InstanceCheckedSetter(Local<String> name,
                       Local<Value> value,
-                      const AccessorInfo& info) {
+                      const v8::PropertyCallbackInfo<void>& info) {
   CHECK_EQ(name, v8_str("foo"));
   CHECK_EQ(value, v8_num(23));
   instance_checked_setter_count++;
@@ -19297,14 +19526,26 @@ THREADED_TEST(Regress2535) {
   LocalContext context;
   v8::HandleScope scope(context->GetIsolate());
   Local<Value> set_value = CompileRun("new Set();");
-  Local<Object> set_object(Object::Cast(*set_value));
+  Local<Object> set_object(Local<Object>::Cast(set_value));
   CHECK_EQ(0, set_object->InternalFieldCount());
   Local<Value> map_value = CompileRun("new Map();");
-  Local<Object> map_object(Object::Cast(*map_value));
+  Local<Object> map_object(Local<Object>::Cast(map_value));
   CHECK_EQ(0, map_object->InternalFieldCount());
 }
 
 
+THREADED_TEST(Regress2746) {
+  LocalContext context;
+  v8::HandleScope scope(context->GetIsolate());
+  Local<Object> obj = Object::New();
+  Local<String> key = String::New("key");
+  obj->SetHiddenValue(key, v8::Undefined());
+  Local<Value> value = obj->GetHiddenValue(key);
+  CHECK(!value.IsEmpty());
+  CHECK(value->IsUndefined());
+}
+
+
 #ifndef WIN32
 class ThreadInterruptTest {
  public:
index 419ef35..54ec43f 100644 (file)
@@ -337,7 +337,9 @@ TEST(MIPS3) {
   CHECK_EQ(1.8066e16, t.e);
   CHECK_EQ(120.44, t.f);
   CHECK_EQ(10.97451593465515908537, t.g);
-  CHECK_EQ(6.875, t.h);
+  if (kArchVariant == kMips32r2) {
+    CHECK_EQ(6.875, t.h);
+  }
 }
 
 
index c72f87e..9f20110 100644 (file)
@@ -40,9 +40,8 @@ TEST(List) {
   CHECK_EQ(0, list->length());
 
   Isolate* isolate = Isolate::Current();
-  Zone* zone = isolate->runtime_zone();
-  ZoneScope zone_scope(zone, DELETE_ON_EXIT);
-  AstNodeFactory<AstNullVisitor> factory(isolate, zone);
+  Zone zone(isolate);
+  AstNodeFactory<AstNullVisitor> factory(isolate, &zone);
   AstNode* node = factory.NewEmptyStatement();
   list->Add(node);
   CHECK_EQ(1, list->length());
index affb8bd..258ab01 100644 (file)
 
 using namespace v8::internal;
 
-#define Types CompareNilICStub::Types
+typedef CompareNilICStub::State State;
 
-TEST(TypeConstructors) {
-  Types types;
-  types.Add(CompareNilICStub::MONOMORPHIC_MAP);
-  Types types2(types);
-  CHECK_EQ(types.ToIntegral(), types2.ToIntegral());
+TEST(StateConstructors) {
+  State state;
+  state.Add(CompareNilICStub::MONOMORPHIC_MAP);
+  State state2(state);
+  CHECK_EQ(state.ToIntegral(), state2.ToIntegral());
 }
 
 TEST(ExternalICStateParsing) {
-  Types types;
-  types.Add(CompareNilICStub::UNDEFINED);
-  CompareNilICStub stub(kUndefinedValue, types);
+  State state;
+  state.Add(CompareNilICStub::UNDEFINED);
+  CompareNilICStub stub(kUndefinedValue, state);
   CompareNilICStub stub2(stub.GetExtraICState());
   CHECK_EQ(stub.GetNilValue(), stub2.GetNilValue());
-  CHECK_EQ(stub.GetTypes().ToIntegral(), stub2.GetTypes().ToIntegral());
+  CHECK_EQ(stub.GetState().ToIntegral(), stub2.GetState().ToIntegral());
 }
 
-TEST(SettingTypes) {
-  Types state;
+TEST(SettingState) {
+  State state;
   CHECK(state.IsEmpty());
   state.Add(CompareNilICStub::NULL_TYPE);
   CHECK(!state.IsEmpty());
@@ -66,20 +66,22 @@ TEST(SettingTypes) {
   CHECK(!state.Contains(CompareNilICStub::UNDETECTABLE));
 }
 
-TEST(ClearTypes) {
-  Types state;
+TEST(ClearState) {
+  State state;
   state.Add(CompareNilICStub::NULL_TYPE);
   state.RemoveAll();
   CHECK(state.IsEmpty());
 }
 
-TEST(FullCompare) {
-  Types state;
-  CHECK(Types::FullCompare() != state);
+TEST(Generic) {
+  State state;
+  CHECK(State::Generic() != state);
   state.Add(CompareNilICStub::UNDEFINED);
-  CHECK(state != Types::FullCompare());
+  CHECK(state != State::Generic());
   state.Add(CompareNilICStub::NULL_TYPE);
-  CHECK(state != Types::FullCompare());
+  CHECK(state != State::Generic());
   state.Add(CompareNilICStub::UNDETECTABLE);
-  CHECK(state == Types::FullCompare());
+  CHECK(state != State::Generic());
+  state.Add(CompareNilICStub::GENERIC);
+  CHECK(state == State::Generic());
 }
index b74ccb2..bed8a6c 100644 (file)
@@ -47,7 +47,7 @@ class PrintExtension : public v8::Extension {
   PrintExtension() : v8::Extension("v8/print", kSource) { }
   virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction(
       v8::Handle<v8::String> name);
-  static v8::Handle<v8::Value> Print(const v8::Arguments& args);
+  static void Print(const v8::FunctionCallbackInfo<v8::Value>& args);
  private:
   static const char* kSource;
 };
@@ -62,16 +62,15 @@ v8::Handle<v8::FunctionTemplate> PrintExtension::GetNativeFunction(
 }
 
 
-v8::Handle<v8::Value> PrintExtension::Print(const v8::Arguments& args) {
+void PrintExtension::Print(const v8::FunctionCallbackInfo<v8::Value>& args) {
   for (int i = 0; i < args.Length(); i++) {
     if (i != 0) printf(" ");
     v8::HandleScope scope(args.GetIsolate());
     v8::String::Utf8Value str(args[i]);
-    if (*str == NULL) return v8::Undefined();
+    if (*str == NULL) return;
     printf("%s", *str);
   }
   printf("\n");
-  return v8::Undefined();
 }
 
 
@@ -350,6 +349,7 @@ TEST(OptimizedCodeSharing) {
   // Skip test if --cache-optimized-code is not activated by default because
   // FastNewClosureStub that is baked into the snapshot is incorrect.
   if (!FLAG_cache_optimized_code) return;
+  FLAG_stress_compaction = false;
   FLAG_allow_natives_syntax = true;
   CcTest::InitializeVM();
   v8::HandleScope scope(CcTest::isolate());
index a615fe9..e59687b 100644 (file)
@@ -31,6 +31,7 @@
 #include "v8.h"
 #include "cpu-profiler-inl.h"
 #include "cctest.h"
+#include "platform.h"
 #include "utils.h"
 #include "../include/v8-profiler.h"
 #undef V8_DISABLE_DEPRECATIONS
@@ -50,7 +51,7 @@ using i::Vector;
 TEST(StartStop) {
   CpuProfilesCollection profiles;
   ProfileGenerator generator(&profiles);
-  ProfilerEventsProcessor processor(&generator, &profiles);
+  ProfilerEventsProcessor processor(&generator);
   processor.Start();
   processor.Stop();
   processor.Join();
@@ -97,64 +98,89 @@ class TestSetup {
 
 }  // namespace
 
+
+i::Code* CreateCode(LocalContext* env) {
+  static int counter = 0;
+  i::EmbeddedVector<char, 256> script;
+  i::EmbeddedVector<char, 32> name;
+
+  i::OS::SNPrintF(name, "function_%d", ++counter);
+  const char* name_start = name.start();
+  i::OS::SNPrintF(script,
+      "function %s() {\n"
+           "var counter = 0;\n"
+           "for (var i = 0; i < %d; ++i) counter += i;\n"
+           "return '%s_' + counter;\n"
+       "}\n"
+       "%s();\n", name_start, counter, name_start, name_start);
+  CompileRun(script.start());
+  i::Handle<i::JSFunction> fun = v8::Utils::OpenHandle(
+      *v8::Local<v8::Function>::Cast(
+          (*env)->Global()->Get(v8_str(name_start))));
+  return fun->code();
+}
+
+
 TEST(CodeEvents) {
   CcTest::InitializeVM();
+  LocalContext env;
   i::Isolate* isolate = i::Isolate::Current();
-  i::Heap* heap = isolate->heap();
   i::Factory* factory = isolate->factory();
   TestSetup test_setup;
-  CpuProfilesCollection profiles;
-  profiles.StartProfiling("", 1, false);
-  ProfileGenerator generator(&profiles);
-  ProfilerEventsProcessor processor(&generator, &profiles);
+
+  i::HandleScope scope(isolate);
+
+  i::Code* aaa_code = CreateCode(&env);
+  i::Code* comment_code = CreateCode(&env);
+  i::Code* args5_code = CreateCode(&env);
+  i::Code* comment2_code = CreateCode(&env);
+  i::Code* moved_code = CreateCode(&env);
+  i::Code* args3_code = CreateCode(&env);
+  i::Code* args4_code = CreateCode(&env);
+
+  CpuProfilesCollection* profiles = new CpuProfilesCollection;
+  profiles->StartProfiling("", 1, false);
+  ProfileGenerator generator(profiles);
+  ProfilerEventsProcessor processor(&generator);
   processor.Start();
+  CpuProfiler profiler(isolate, profiles, &generator, &processor);
 
   // Enqueue code creation events.
-  i::HandleScope scope(isolate);
   const char* aaa_str = "aaa";
   i::Handle<i::String> aaa_name = factory->NewStringFromAscii(
       i::Vector<const char>(aaa_str, i::StrLength(aaa_str)));
-  processor.CodeCreateEvent(i::Logger::FUNCTION_TAG,
-                            *aaa_name,
-                            heap->empty_string(),
-                            0,
-                            ToAddress(0x1000),
-                            0x100,
-                            ToAddress(0x10000),
-                            NULL);
-  processor.CodeCreateEvent(i::Logger::BUILTIN_TAG,
-                            "bbb",
-                            ToAddress(0x1200),
-                            0x80);
-  processor.CodeCreateEvent(i::Logger::STUB_TAG, 5, ToAddress(0x1300), 0x10);
-  processor.CodeCreateEvent(i::Logger::BUILTIN_TAG,
-                            "ddd",
-                            ToAddress(0x1400),
-                            0x80);
-  processor.CodeMoveEvent(ToAddress(0x1400), ToAddress(0x1500));
-  processor.CodeCreateEvent(i::Logger::STUB_TAG, 3, ToAddress(0x1600), 0x10);
-  processor.CodeCreateEvent(i::Logger::STUB_TAG, 4, ToAddress(0x1605), 0x10);
+  profiler.CodeCreateEvent(i::Logger::FUNCTION_TAG, aaa_code, *aaa_name);
+  profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, comment_code, "comment");
+  profiler.CodeCreateEvent(i::Logger::STUB_TAG, args5_code, 5);
+  profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, comment2_code, "comment2");
+  profiler.CodeMoveEvent(comment2_code->address(), moved_code->address());
+  profiler.CodeCreateEvent(i::Logger::STUB_TAG, args3_code, 3);
+  profiler.CodeCreateEvent(i::Logger::STUB_TAG, args4_code, 4);
+
   // Enqueue a tick event to enable code events processing.
-  EnqueueTickSampleEvent(&processor, ToAddress(0x1000));
+  EnqueueTickSampleEvent(&processor, aaa_code->address());
 
   processor.Stop();
   processor.Join();
 
   // Check the state of profile generator.
-  CodeEntry* entry1 = generator.code_map()->FindEntry(ToAddress(0x1000));
-  CHECK_NE(NULL, entry1);
-  CHECK_EQ(aaa_str, entry1->name());
-  CodeEntry* entry2 = generator.code_map()->FindEntry(ToAddress(0x1200));
-  CHECK_NE(NULL, entry2);
-  CHECK_EQ("bbb", entry2->name());
-  CodeEntry* entry3 = generator.code_map()->FindEntry(ToAddress(0x1300));
-  CHECK_NE(NULL, entry3);
-  CHECK_EQ("5", entry3->name());
-  CHECK_EQ(NULL, generator.code_map()->FindEntry(ToAddress(0x1400)));
-  CodeEntry* entry4 = generator.code_map()->FindEntry(ToAddress(0x1500));
-  CHECK_NE(NULL, entry4);
-  CHECK_EQ("ddd", entry4->name());
-  CHECK_EQ(NULL, generator.code_map()->FindEntry(ToAddress(0x1600)));
+  CodeEntry* aaa = generator.code_map()->FindEntry(aaa_code->address());
+  CHECK_NE(NULL, aaa);
+  CHECK_EQ(aaa_str, aaa->name());
+
+  CodeEntry* comment = generator.code_map()->FindEntry(comment_code->address());
+  CHECK_NE(NULL, comment);
+  CHECK_EQ("comment", comment->name());
+
+  CodeEntry* args5 = generator.code_map()->FindEntry(args5_code->address());
+  CHECK_NE(NULL, args5);
+  CHECK_EQ("5", args5->name());
+
+  CHECK_EQ(NULL, generator.code_map()->FindEntry(comment2_code->address()));
+
+  CodeEntry* comment2 = generator.code_map()->FindEntry(moved_code->address());
+  CHECK_NE(NULL, comment2);
+  CHECK_EQ("comment2", comment2->name());
 }
 
 
@@ -165,32 +191,40 @@ static int CompareProfileNodes(const T* p1, const T* p2) {
 
 TEST(TickEvents) {
   TestSetup test_setup;
-  CpuProfilesCollection profiles;
-  profiles.StartProfiling("", 1, false);
-  ProfileGenerator generator(&profiles);
-  ProfilerEventsProcessor processor(&generator, &profiles);
-  processor.Start();
+  LocalContext env;
+  i::Isolate* isolate = i::Isolate::Current();
+  i::HandleScope scope(isolate);
+
+  i::Code* frame1_code = CreateCode(&env);
+  i::Code* frame2_code = CreateCode(&env);
+  i::Code* frame3_code = CreateCode(&env);
 
-  processor.CodeCreateEvent(i::Logger::BUILTIN_TAG,
-                            "bbb",
-                            ToAddress(0x1200),
-                            0x80);
-  processor.CodeCreateEvent(i::Logger::STUB_TAG, 5, ToAddress(0x1300), 0x10);
-  processor.CodeCreateEvent(i::Logger::BUILTIN_TAG,
-                            "ddd",
-                            ToAddress(0x1400),
-                            0x80);
-  EnqueueTickSampleEvent(&processor, ToAddress(0x1210));
-  EnqueueTickSampleEvent(&processor, ToAddress(0x1305), ToAddress(0x1220));
-  EnqueueTickSampleEvent(&processor,
-                         ToAddress(0x1404),
-                         ToAddress(0x1305),
-                         ToAddress(0x1230));
+  CpuProfilesCollection* profiles = new CpuProfilesCollection;
+  profiles->StartProfiling("", 1, false);
+  ProfileGenerator generator(profiles);
+  ProfilerEventsProcessor processor(&generator);
+  processor.Start();
+  CpuProfiler profiler(isolate, profiles, &generator, &processor);
+
+  profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, frame1_code, "bbb");
+  profiler.CodeCreateEvent(i::Logger::STUB_TAG, frame2_code, 5);
+  profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, frame3_code, "ddd");
+
+  EnqueueTickSampleEvent(&processor, frame1_code->instruction_start());
+  EnqueueTickSampleEvent(
+      &processor,
+      frame2_code->instruction_start() + frame2_code->ExecutableSize() / 2,
+      frame1_code->instruction_start() + frame2_code->ExecutableSize() / 2);
+  EnqueueTickSampleEvent(
+      &processor,
+      frame3_code->instruction_end() - 1,
+      frame2_code->instruction_end() - 1,
+      frame1_code->instruction_end() - 1);
 
   processor.Stop();
   processor.Join();
   CpuProfile* profile =
-      profiles.StopProfiling(TokenEnumerator::kNoSecurityToken, "", 1);
+      profiles->StopProfiling(TokenEnumerator::kNoSecurityToken, "", 1);
   CHECK_NE(NULL, profile);
 
   // Check call trees.
@@ -229,29 +263,33 @@ TEST(CrashIfStoppingLastNonExistentProfile) {
 // Long stacks (exceeding max frames limit) must not be erased.
 TEST(Issue1398) {
   TestSetup test_setup;
-  CpuProfilesCollection profiles;
-  profiles.StartProfiling("", 1, false);
-  ProfileGenerator generator(&profiles);
-  ProfilerEventsProcessor processor(&generator, &profiles);
+  LocalContext env;
+  i::Isolate* isolate = i::Isolate::Current();
+  i::HandleScope scope(isolate);
+
+  i::Code* code = CreateCode(&env);
+
+  CpuProfilesCollection* profiles = new CpuProfilesCollection;
+  profiles->StartProfiling("", 1, false);
+  ProfileGenerator generator(profiles);
+  ProfilerEventsProcessor processor(&generator);
   processor.Start();
+  CpuProfiler profiler(isolate, profiles, &generator, &processor);
 
-  processor.CodeCreateEvent(i::Logger::BUILTIN_TAG,
-                            "bbb",
-                            ToAddress(0x1200),
-                            0x80);
+  profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, code, "bbb");
 
   i::TickSample* sample = processor.TickSampleEvent();
-  sample->pc = ToAddress(0x1200);
+  sample->pc = code->address();
   sample->tos = 0;
   sample->frames_count = i::TickSample::kMaxFramesCount;
   for (int i = 0; i < sample->frames_count; ++i) {
-    sample->stack[i] = ToAddress(0x1200);
+    sample->stack[i] = code->address();
   }
 
   processor.Stop();
   processor.Join();
   CpuProfile* profile =
-      profiles.StopProfiling(TokenEnumerator::kNoSecurityToken, "", 1);
+      profiles->StopProfiling(TokenEnumerator::kNoSecurityToken, "", 1);
   CHECK_NE(NULL, profile);
 
   int actual_depth = 0;
@@ -412,6 +450,26 @@ TEST(DeleteCpuProfileDifferentTokens) {
 }
 
 
+TEST(GetProfilerWhenIsolateIsNotInitialized) {
+  v8::Isolate* isolate = v8::Isolate::GetCurrent();
+  CHECK(i::Isolate::Current()->IsDefaultIsolate());
+  CHECK(!i::Isolate::Current()->IsInitialized());
+  CHECK_EQ(NULL, isolate->GetCpuProfiler());
+  {
+    v8::Isolate::Scope isolateScope(isolate);
+    LocalContext env;
+    v8::HandleScope scope(isolate);
+    CHECK_NE(NULL, isolate->GetCpuProfiler());
+    isolate->GetCpuProfiler()->StartCpuProfiling(v8::String::New("Test"));
+    isolate->GetCpuProfiler()->StopCpuProfiling(v8::String::New("Test"));
+  }
+  CHECK(i::Isolate::Current()->IsInitialized());
+  CHECK_NE(NULL, isolate->GetCpuProfiler());
+  isolate->Dispose();
+  CHECK_EQ(NULL, isolate->GetCpuProfiler());
+}
+
+
 static bool ContainsString(v8::Handle<v8::String> string,
                            const Vector<v8::Handle<v8::String> >& vector) {
   for (int i = 0; i < vector.length(); i++) {
@@ -802,9 +860,7 @@ TEST(NativeAccessorMonomorphicIC) {
 
   const v8::CpuProfileNode* root = profile->GetTopDownRoot();
   const v8::CpuProfileNode* startNode = GetChild(root, "start");
-  // TODO(yurys): in LoadIC should be changed to report external callback
-  // invocation. See r13768 where it was LoadCallbackProperty was removed.
-  // GetChild(startNode, "get foo");
+  GetChild(startNode, "get foo");
   GetChild(startNode, "set foo");
 
   cpu_profiler->DeleteAllCpuProfiles();
@@ -911,9 +967,238 @@ TEST(NativeMethodMonomorphicIC) {
 
   const v8::CpuProfileNode* root = profile->GetTopDownRoot();
   GetChild(root, "start");
-  // TODO(yurys): in CallIC should be changed to report external callback
-  // invocation.
-  // GetChild(startNode, "fooMethod");
+  const v8::CpuProfileNode* startNode = GetChild(root, "start");
+  GetChild(startNode, "fooMethod");
+
+  cpu_profiler->DeleteAllCpuProfiles();
+}
+
+
+static const char* bound_function_test_source = "function foo(iterations) {\n"
+"  var r = 0;\n"
+"  for (var i = 0; i < iterations; i++) { r += i; }\n"
+"  return r;\n"
+"}\n"
+"function start(duration) {\n"
+"  var callback = foo.bind(this);\n"
+"  var start = Date.now();\n"
+"  while (Date.now() - start < duration) {\n"
+"    callback(10 * 1000);\n"
+"  }\n"
+"}";
+
+
+TEST(BoundFunctionCall) {
+  LocalContext env;
+  v8::HandleScope scope(env->GetIsolate());
+
+  v8::Script::Compile(v8::String::New(bound_function_test_source))->Run();
+  v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
+      env->Global()->Get(v8::String::New("start")));
+
+  v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
+  v8::Local<v8::String> profile_name = v8::String::New("my_profile");
+
+  cpu_profiler->StartCpuProfiling(profile_name);
+  int32_t duration_ms = 100;
+  v8::Handle<v8::Value> args[] = { v8::Integer::New(duration_ms) };
+  function->Call(env->Global(), ARRAY_SIZE(args), args);
+  const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name);
+
+  CHECK_NE(NULL, profile);
+  // Dump collected profile to have a better diagnostic in case of failure.
+  reinterpret_cast<i::CpuProfile*>(
+      const_cast<v8::CpuProfile*>(profile))->Print();
+
+  const v8::CpuProfileNode* root = profile->GetTopDownRoot();
+  ScopedVector<v8::Handle<v8::String> > names(3);
+  names[0] = v8::String::New(ProfileGenerator::kGarbageCollectorEntryName);
+  names[1] = v8::String::New(ProfileGenerator::kProgramEntryName);
+  names[2] = v8::String::New("start");
+  // Don't allow |foo| node to be at the top level.
+  CheckChildrenNames(root, names);
+
+  const v8::CpuProfileNode* startNode = GetChild(root, "start");
+  GetChild(startNode, "foo");
+
+  cpu_profiler->DeleteAllCpuProfiles();
+}
+
+
+static const char* call_function_test_source = "function bar(iterations) {\n"
+"}\n"
+"function start(duration) {\n"
+"  var start = Date.now();\n"
+"  while (Date.now() - start < duration) {\n"
+"    try {\n"
+"      bar.call(this, 10 * 1000);\n"
+"    } catch(e) {}\n"
+"  }\n"
+"}";
+
+
+// Test that if we sampled thread when it was inside FunctionCall buitin then
+// its caller frame will be '(unresolved function)' as we have no reliable way
+// to resolve it.
+//
+// [Top down]:
+//    96     0   (root) [-1] #1
+//     1     1    (garbage collector) [-1] #4
+//     5     0    (unresolved function) [-1] #5
+//     5     5      call [-1] #6
+//    71    70    start [-1] #3
+//     1     1      bar [-1] #7
+//    19    19    (program) [-1] #2
+TEST(FunctionCallSample) {
+  LocalContext env;
+  v8::HandleScope scope(env->GetIsolate());
+
+  v8::Script::Compile(v8::String::New(call_function_test_source))->Run();
+  v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
+      env->Global()->Get(v8::String::New("start")));
+
+  v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
+  v8::Local<v8::String> profile_name = v8::String::New("my_profile");
+
+  cpu_profiler->StartCpuProfiling(profile_name);
+  int32_t duration_ms = 100;
+#if defined(_WIN32) || defined(_WIN64)
+  // 100ms is not enough on Windows. See
+  // https://code.google.com/p/v8/issues/detail?id=2628
+  duration_ms = 400;
+#endif
+  v8::Handle<v8::Value> args[] = { v8::Integer::New(duration_ms) };
+  function->Call(env->Global(), ARRAY_SIZE(args), args);
+  const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name);
+
+  CHECK_NE(NULL, profile);
+  // Dump collected profile to have a better diagnostic in case of failure.
+  reinterpret_cast<i::CpuProfile*>(
+      const_cast<v8::CpuProfile*>(profile))->Print();
+
+  const v8::CpuProfileNode* root = profile->GetTopDownRoot();
+  {
+    ScopedVector<v8::Handle<v8::String> > names(4);
+    names[0] = v8::String::New(ProfileGenerator::kGarbageCollectorEntryName);
+    names[1] = v8::String::New(ProfileGenerator::kProgramEntryName);
+    names[2] = v8::String::New("start");
+    names[3] = v8::String::New(i::ProfileGenerator::kUnresolvedFunctionName);
+    // Don't allow |bar| and |call| nodes to be at the top level.
+    CheckChildrenNames(root, names);
+  }
+
+  // In case of GC stress tests all samples may be in GC phase and there
+  // won't be |start| node in the profiles.
+  bool is_gc_stress_testing =
+      (i::FLAG_gc_interval != -1) || i::FLAG_stress_compaction;
+  const v8::CpuProfileNode* startNode = FindChild(root, "start");
+  CHECK(is_gc_stress_testing || startNode);
+  if (startNode) {
+    ScopedVector<v8::Handle<v8::String> > names(2);
+    names[0] = v8::String::New("bar");
+    names[1] = v8::String::New("call");
+    CheckChildrenNames(startNode, names);
+  }
+
+  const v8::CpuProfileNode* unresolvedNode =
+      FindChild(root, i::ProfileGenerator::kUnresolvedFunctionName);
+  if (unresolvedNode) {
+    ScopedVector<v8::Handle<v8::String> > names(1);
+    names[0] = v8::String::New("call");
+    CheckChildrenNames(unresolvedNode, names);
+  }
+
+  cpu_profiler->DeleteAllCpuProfiles();
+}
+
+
+static const char* function_apply_test_source = "function bar(iterations) {\n"
+"}\n"
+"function test() {\n"
+"  bar.apply(this, [10 * 1000]);\n"
+"}\n"
+"function start(duration) {\n"
+"  var start = Date.now();\n"
+"  while (Date.now() - start < duration) {\n"
+"    try {\n"
+"      test();\n"
+"    } catch(e) {}\n"
+"  }\n"
+"}";
+
+
+// [Top down]:
+//    94     0   (root) [-1] #0 1
+//     2     2    (garbage collector) [-1] #0 7
+//    82    49    start [-1] #16 3
+//     1     0      (unresolved function) [-1] #0 8
+//     1     1        apply [-1] #0 9
+//    32    21      test [-1] #16 4
+//     2     2        bar [-1] #16 6
+//     9     9        apply [-1] #0 5
+//    10    10    (program) [-1] #0 2
+TEST(FunctionApplySample) {
+  LocalContext env;
+  v8::HandleScope scope(env->GetIsolate());
+
+  v8::Script::Compile(v8::String::New(function_apply_test_source))->Run();
+  v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
+      env->Global()->Get(v8::String::New("start")));
+
+  v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
+  v8::Local<v8::String> profile_name = v8::String::New("my_profile");
+
+  cpu_profiler->StartCpuProfiling(profile_name);
+  int32_t duration_ms = 100;
+#if defined(_WIN32) || defined(_WIN64)
+  // 100ms is not enough on Windows. See
+  // https://code.google.com/p/v8/issues/detail?id=2628
+  duration_ms = 400;
+#endif
+  v8::Handle<v8::Value> args[] = { v8::Integer::New(duration_ms) };
+  function->Call(env->Global(), ARRAY_SIZE(args), args);
+  const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name);
+
+  CHECK_NE(NULL, profile);
+  // Dump collected profile to have a better diagnostic in case of failure.
+  reinterpret_cast<i::CpuProfile*>(
+      const_cast<v8::CpuProfile*>(profile))->Print();
+
+  const v8::CpuProfileNode* root = profile->GetTopDownRoot();
+  {
+    ScopedVector<v8::Handle<v8::String> > names(3);
+    names[0] = v8::String::New(ProfileGenerator::kGarbageCollectorEntryName);
+    names[1] = v8::String::New(ProfileGenerator::kProgramEntryName);
+    names[2] = v8::String::New("start");
+    // Don't allow |test|, |bar| and |apply| nodes to be at the top level.
+    CheckChildrenNames(root, names);
+  }
+
+  const v8::CpuProfileNode* startNode = FindChild(root, "start");
+  if (startNode) {
+    {
+      ScopedVector<v8::Handle<v8::String> > names(2);
+      names[0] = v8::String::New("test");
+      names[1] = v8::String::New(ProfileGenerator::kUnresolvedFunctionName);
+      CheckChildrenNames(startNode, names);
+    }
+
+    const v8::CpuProfileNode* testNode = FindChild(startNode, "test");
+    if (testNode) {
+      ScopedVector<v8::Handle<v8::String> > names(2);
+      names[0] = v8::String::New("bar");
+      names[1] = v8::String::New("apply");
+      CheckChildrenNames(testNode, names);
+    }
+
+    if (const v8::CpuProfileNode* unresolvedNode =
+            FindChild(startNode, ProfileGenerator::kUnresolvedFunctionName)) {
+      ScopedVector<v8::Handle<v8::String> > names(1);
+      names[0] = v8::String::New("apply");
+      CheckChildrenNames(unresolvedNode, names);
+      GetChild(unresolvedNode, "apply");
+    }
+  }
 
   cpu_profiler->DeleteAllCpuProfiles();
 }
index ae33279..f3f0308 100644 (file)
@@ -36,17 +36,16 @@ using namespace v8::internal;
 
 TEST(BitVector) {
   v8::internal::V8::Initialize(NULL);
-  Zone* zone = Isolate::Current()->runtime_zone();
-  ZoneScope zone_scope(zone, DELETE_ON_EXIT);
+  Zone zone(Isolate::Current());
   {
-    BitVector v(15, zone);
+    BitVector v(15, &zone);
     v.Add(1);
     CHECK(v.Contains(1));
     v.Remove(0);
     CHECK(!v.Contains(0));
     v.Add(0);
     v.Add(1);
-    BitVector w(15, zone);
+    BitVector w(15, &zone);
     w.Add(1);
     v.Intersect(w);
     CHECK(!v.Contains(0));
@@ -54,7 +53,7 @@ TEST(BitVector) {
   }
 
   {
-    BitVector v(64, zone);
+    BitVector v(64, &zone);
     v.Add(27);
     v.Add(30);
     v.Add(31);
@@ -72,9 +71,9 @@ TEST(BitVector) {
   }
 
   {
-    BitVector v(15, zone);
+    BitVector v(15, &zone);
     v.Add(0);
-    BitVector w(15, zone);
+    BitVector w(15, &zone);
     w.Add(1);
     v.Union(w);
     CHECK(v.Contains(0));
@@ -82,13 +81,13 @@ TEST(BitVector) {
   }
 
   {
-    BitVector v(15, zone);
+    BitVector v(15, &zone);
     v.Add(0);
-    BitVector w(15, zone);
+    BitVector w(15, &zone);
     w = v;
     CHECK(w.Contains(0));
     w.Add(1);
-    BitVector u(w, zone);
+    BitVector u(w, &zone);
     CHECK(u.Contains(0));
     CHECK(u.Contains(1));
     v.Union(w);
@@ -97,9 +96,9 @@ TEST(BitVector) {
   }
 
   {
-    BitVector v(35, zone);
+    BitVector v(35, &zone);
     v.Add(0);
-    BitVector w(35, zone);
+    BitVector w(35, &zone);
     w.Add(33);
     v.Union(w);
     CHECK(v.Contains(0));
@@ -107,15 +106,15 @@ TEST(BitVector) {
   }
 
   {
-    BitVector v(35, zone);
+    BitVector v(35, &zone);
     v.Add(32);
     v.Add(33);
-    BitVector w(35, zone);
+    BitVector w(35, &zone);
     w.Add(33);
     v.Intersect(w);
     CHECK(!v.Contains(32));
     CHECK(v.Contains(33));
-    BitVector r(35, zone);
+    BitVector r(35, &zone);
     r.CopyFrom(v);
     CHECK(!r.Contains(32));
     CHECK(r.Contains(33));
index b22092a..788f7af 100644 (file)
@@ -143,6 +143,7 @@ class DebugLocalContext {
   inline ~DebugLocalContext() {
     context_->Exit();
   }
+  inline v8::Local<v8::Context> context() { return context_; }
   inline v8::Context* operator->() { return *context_; }
   inline v8::Context* operator*() { return *context_; }
   inline bool IsReady() { return !context_.IsEmpty(); }
@@ -508,7 +509,7 @@ void CheckDebugBreakFunction(DebugLocalContext* env,
   Handle<v8::internal::SharedFunctionInfo> shared(fun->shared());
   CHECK(Debug::HasDebugInfo(shared));
   TestBreakLocationIterator it1(Debug::GetDebugInfo(shared));
-  it1.FindBreakLocationFromPosition(position);
+  it1.FindBreakLocationFromPosition(position, v8::internal::STATEMENT_ALIGNED);
   v8::internal::RelocInfo::Mode actual_mode = it1.it()->rinfo()->rmode();
   if (actual_mode == v8::internal::RelocInfo::CODE_TARGET_WITH_ID) {
     actual_mode = v8::internal::RelocInfo::CODE_TARGET;
@@ -527,7 +528,7 @@ void CheckDebugBreakFunction(DebugLocalContext* env,
   CHECK(!debug->HasDebugInfo(shared));
   CHECK(debug->EnsureDebugInfo(shared, fun));
   TestBreakLocationIterator it2(Debug::GetDebugInfo(shared));
-  it2.FindBreakLocationFromPosition(position);
+  it2.FindBreakLocationFromPosition(position, v8::internal::STATEMENT_ALIGNED);
   actual_mode = it2.it()->rinfo()->rmode();
   if (actual_mode == v8::internal::RelocInfo::CODE_TARGET_WITH_ID) {
     actual_mode = v8::internal::RelocInfo::CODE_TARGET;
@@ -788,8 +789,8 @@ static void DebugEventCounter(v8::DebugEvent event,
     // Check whether the exception was uncaught.
     v8::Local<v8::String> fun_name = v8::String::New("uncaught");
     v8::Local<v8::Function> fun =
-        v8::Function::Cast(*event_data->Get(fun_name));
-    v8::Local<v8::Value> result = *fun->Call(event_data, 0, NULL);
+        v8::Local<v8::Function>::Cast(event_data->Get(fun_name));
+    v8::Local<v8::Value> result = fun->Call(event_data, 0, NULL);
     if (result->IsTrue()) {
       uncaught_exception_hit_count++;
     }
@@ -4140,6 +4141,7 @@ TEST(StepWithException) {
 
 
 TEST(DebugBreak) {
+  i::FLAG_stress_compaction = false;
 #ifdef VERIFY_HEAP
   i::FLAG_verify_heap = true;
 #endif
@@ -4263,43 +4265,46 @@ TEST(NoBreakWhenBootstrapping) {
   CheckDebuggerUnloaded();
 }
 
-static v8::Handle<v8::Array> NamedEnum(const v8::AccessorInfo&) {
+static void NamedEnum(const v8::PropertyCallbackInfo<v8::Array>& info) {
   v8::Handle<v8::Array> result = v8::Array::New(3);
   result->Set(v8::Integer::New(0), v8::String::New("a"));
   result->Set(v8::Integer::New(1), v8::String::New("b"));
   result->Set(v8::Integer::New(2), v8::String::New("c"));
-  return result;
+  info.GetReturnValue().Set(result);
 }
 
 
-static v8::Handle<v8::Array> IndexedEnum(const v8::AccessorInfo&) {
+static void IndexedEnum(const v8::PropertyCallbackInfo<v8::Array>& info) {
   v8::Handle<v8::Array> result = v8::Array::New(2);
   result->Set(v8::Integer::New(0), v8::Number::New(1));
   result->Set(v8::Integer::New(1), v8::Number::New(10));
-  return result;
+  info.GetReturnValue().Set(result);
 }
 
 
-static v8::Handle<v8::Value> NamedGetter(v8::Local<v8::String> name,
-                                         const v8::AccessorInfo& info) {
+static void NamedGetter(v8::Local<v8::String> name,
+                        const v8::PropertyCallbackInfo<v8::Value>& info) {
   v8::String::Utf8Value n(name);
   if (strcmp(*n, "a") == 0) {
-    return v8::String::New("AA");
+    info.GetReturnValue().Set(v8::String::New("AA"));
+    return;
   } else if (strcmp(*n, "b") == 0) {
-    return v8::String::New("BB");
+    info.GetReturnValue().Set(v8::String::New("BB"));
+    return;
   } else if (strcmp(*n, "c") == 0) {
-    return v8::String::New("CC");
+    info.GetReturnValue().Set(v8::String::New("CC"));
+    return;
   } else {
-    return v8::Undefined();
+    info.GetReturnValue().SetUndefined();
+    return;
   }
-
-  return name;
+  info.GetReturnValue().Set(name);
 }
 
 
-static v8::Handle<v8::Value> IndexedGetter(uint32_t index,
-                                           const v8::AccessorInfo& info) {
-  return v8::Number::New(index + 1);
+static void IndexedGetter(uint32_t index,
+                          const v8::PropertyCallbackInfo<v8::Value>& info) {
+  info.GetReturnValue().Set(static_cast<double>(index + 1));
 }
 
 
@@ -4529,9 +4534,10 @@ TEST(HiddenPrototypePropertyMirror) {
 }
 
 
-static v8::Handle<v8::Value> ProtperyXNativeGetter(
-    v8::Local<v8::String> property, const v8::AccessorInfo& info) {
-  return v8::Integer::New(10);
+static void ProtperyXNativeGetter(
+    v8::Local<v8::String> property,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
+  info.GetReturnValue().Set(10);
 }
 
 
@@ -4566,9 +4572,10 @@ TEST(NativeGetterPropertyMirror) {
 }
 
 
-static v8::Handle<v8::Value> ProtperyXNativeGetterThrowingError(
-    v8::Local<v8::String> property, const v8::AccessorInfo& info) {
-  return CompileRun("throw new Error('Error message');");
+static void ProtperyXNativeGetterThrowingError(
+    v8::Local<v8::String> property,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
+  CompileRun("throw new Error('Error message');");
 }
 
 
@@ -5111,9 +5118,9 @@ class DebuggerThread : public v8::internal::Thread {
 };
 
 
-static v8::Handle<v8::Value> ThreadedAtBarrier1(const v8::Arguments& args) {
+static void ThreadedAtBarrier1(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   threaded_debugging_barriers.barrier_1.Wait();
-  return v8::Undefined();
 }
 
 
@@ -5479,28 +5486,27 @@ v8::Handle<v8::Function> debugger_call_with_closure;
 
 // Function to retrieve the number of JavaScript frames by calling a JavaScript
 // in the debugger.
-static v8::Handle<v8::Value> CheckFrameCount(const v8::Arguments& args) {
+static void CheckFrameCount(const v8::FunctionCallbackInfo<v8::Value>& args) {
   CHECK(v8::Debug::Call(frame_count)->IsNumber());
   CHECK_EQ(args[0]->Int32Value(),
            v8::Debug::Call(frame_count)->Int32Value());
-  return v8::Undefined();
 }
 
 
 // Function to retrieve the source line of the top JavaScript frame by calling a
 // JavaScript function in the debugger.
-static v8::Handle<v8::Value> CheckSourceLine(const v8::Arguments& args) {
+static void CheckSourceLine(const v8::FunctionCallbackInfo<v8::Value>& args) {
   CHECK(v8::Debug::Call(frame_source_line)->IsNumber());
   CHECK_EQ(args[0]->Int32Value(),
            v8::Debug::Call(frame_source_line)->Int32Value());
-  return v8::Undefined();
 }
 
 
 // Function to test passing an additional parameter to a JavaScript function
 // called in the debugger. It also tests that functions called in the debugger
 // can throw exceptions.
-static v8::Handle<v8::Value> CheckDataParameter(const v8::Arguments& args) {
+static void CheckDataParameter(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   v8::Handle<v8::String> data = v8::String::New("Test");
   CHECK(v8::Debug::Call(debugger_call_with_data, data)->IsString());
 
@@ -5511,16 +5517,13 @@ static v8::Handle<v8::Value> CheckDataParameter(const v8::Arguments& args) {
   v8::Debug::Call(debugger_call_with_data);
   CHECK(catcher.HasCaught());
   CHECK(catcher.Exception()->IsString());
-
-  return v8::Undefined();
 }
 
 
 // Function to test using a JavaScript with closure in the debugger.
-static v8::Handle<v8::Value> CheckClosure(const v8::Arguments& args) {
+static void CheckClosure(const v8::FunctionCallbackInfo<v8::Value>& args) {
   CHECK(v8::Debug::Call(debugger_call_with_closure)->IsNumber());
   CHECK_EQ(3, v8::Debug::Call(debugger_call_with_closure)->Int32Value());
-  return v8::Undefined();
 }
 
 
@@ -6457,7 +6460,7 @@ static void ExecuteScriptForContextCheck() {
   // Enter and run function in the context.
   {
     v8::Context::Scope context_scope(context_1);
-    expected_context = v8::Local<v8::Context>(*context_1);
+    expected_context = context_1;
     expected_context_data = data_1;
     v8::Local<v8::Function> f = CompileFunction(source, "f");
     f->Call(context_1->Global(), 0, NULL);
@@ -6576,7 +6579,7 @@ TEST(ScriptCollectedEvent) {
 
   // Do garbage collection to ensure that only the script in this test will be
   // collected afterwards.
-  HEAP->CollectAllGarbage(Heap::kNoGCFlags);
+  HEAP->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
 
   script_collected_count = 0;
   v8::Debug::SetDebugEventListener(DebugEventScriptCollectedEvent,
@@ -6588,7 +6591,7 @@ TEST(ScriptCollectedEvent) {
 
   // Do garbage collection to collect the script above which is no longer
   // referenced.
-  HEAP->CollectAllGarbage(Heap::kNoGCFlags);
+  HEAP->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
 
   CHECK_EQ(2, script_collected_count);
 
@@ -6612,6 +6615,7 @@ static void ScriptCollectedMessageHandler(const v8::Debug::Message& message) {
 // Test that GetEventContext doesn't fail and return empty handle for
 // ScriptCollected events.
 TEST(ScriptCollectedEventContext) {
+  i::FLAG_stress_compaction = false;
   v8::Isolate* isolate = v8::Isolate::GetCurrent();
   v8::internal::Debug* debug =
       reinterpret_cast<v8::internal::Isolate*>(isolate)->debug();
@@ -6638,7 +6642,7 @@ TEST(ScriptCollectedEventContext) {
 
   // Do garbage collection to ensure that only the script in this test will be
   // collected afterwards.
-  HEAP->CollectAllGarbage(Heap::kNoGCFlags);
+  HEAP->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
 
   v8::Debug::SetMessageHandler2(ScriptCollectedMessageHandler);
   v8::Script::Compile(v8::String::New("eval('a=1')"))->Run();
@@ -6655,7 +6659,7 @@ TEST(ScriptCollectedEventContext) {
 
   // Do garbage collection to collect the script above which is no longer
   // referenced.
-  HEAP->CollectAllGarbage(Heap::kNoGCFlags);
+  HEAP->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
 
   CHECK_EQ(2, script_collected_message_count);
 
@@ -7016,9 +7020,9 @@ v8::Handle<v8::Context> debugger_context;
 
 // Property getter that checks that current and calling contexts
 // are both the debugee contexts.
-static v8::Handle<v8::Value> NamedGetterWithCallingContextCheck(
+static void NamedGetterWithCallingContextCheck(
     v8::Local<v8::String> name,
-    const v8::AccessorInfo& info) {
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
   CHECK_EQ(0, strcmp(*v8::String::Utf8Value(name), "a"));
   v8::Handle<v8::Context> current = v8::Context::GetCurrent();
   CHECK(current == debugee_context);
@@ -7026,7 +7030,7 @@ static v8::Handle<v8::Value> NamedGetterWithCallingContextCheck(
   v8::Handle<v8::Context> calling = v8::Context::GetCalling();
   CHECK(calling == debugee_context);
   CHECK(calling != debugger_context);
-  return v8::Int32::New(1);
+  info.GetReturnValue().Set(1);
 }
 
 
@@ -7041,11 +7045,11 @@ static void DebugEventGetAtgumentPropertyValue(
   if (event == v8::Break) {
     break_point_hit_count++;
     CHECK(debugger_context == v8::Context::GetCurrent());
-    v8::Handle<v8::Function> func(v8::Function::Cast(*CompileRun(
+    v8::Handle<v8::Function> func = v8::Handle<v8::Function>::Cast(CompileRun(
         "(function(exec_state) {\n"
         "    return (exec_state.frame(0).argumentValue(0).property('a').\n"
         "            value().value() == 1);\n"
-        "})")));
+        "})"));
     const int argc = 1;
     v8::Handle<v8::Value> argv[argc] = { exec_state };
     v8::Handle<v8::Value> result = func->Call(exec_state, argc, argv);
@@ -7063,7 +7067,7 @@ TEST(CallingContextIsNotDebugContext) {
 
   // Save handles to the debugger and debugee contexts to be used in
   // NamedGetterWithCallingContextCheck.
-  debugee_context = v8::Local<v8::Context>(*env);
+  debugee_context = env.context();
   debugger_context = v8::Utils::ToLocal(debug->debug_context());
 
   // Create object with 'a' property accessor.
@@ -7301,11 +7305,10 @@ static void DebugEventBreakWithOptimizedStack(v8::DebugEvent event,
 }
 
 
-static v8::Handle<v8::Value> ScheduleBreak(const v8::Arguments& args) {
+static void ScheduleBreak(const v8::FunctionCallbackInfo<v8::Value>& args) {
   v8::Debug::SetDebugEventListener(DebugEventBreakWithOptimizedStack,
                                    v8::Undefined());
   v8::Debug::DebugBreak();
-  return v8::Undefined();
 }
 
 
index a14c7fa..2d2f5cd 100644 (file)
@@ -120,8 +120,8 @@ static void VerifyRead(v8::Handle<v8::DeclaredAccessorDescriptor> descriptor,
   CreateConstructor(context, "Accessible", internal_field, "x", descriptor);
   // Setup object.
   CompileRun("var accessible = new Accessible();");
-  v8::Local<v8::Object> obj(
-      v8::Object::Cast(*context->Global()->Get(v8_str("accessible"))));
+  v8::Local<v8::Object> obj = v8::Local<v8::Object>::Cast(
+      context->Global()->Get(v8_str("accessible")));
   obj->SetAlignedPointerInInternalField(internal_field, internal_object);
   bool added_accessor;
   added_accessor = obj->SetAccessor(v8_str("y"), descriptor);
index de45cbc..0f6bb8f 100644 (file)
@@ -88,13 +88,13 @@ class DeclarationContext {
 
   // The handlers are called as static functions that forward
   // to the instance specific virtual methods.
-  static v8::Handle<Value> HandleGet(Local<String> key,
-                                     const AccessorInfo& info);
-  static v8::Handle<Value> HandleSet(Local<String> key,
-                                     Local<Value> value,
-                                     const AccessorInfo& info);
-  static v8::Handle<Integer> HandleQuery(Local<String> key,
-                                         const AccessorInfo& info);
+  static void HandleGet(Local<String> key,
+                        const v8::PropertyCallbackInfo<v8::Value>& info);
+  static void HandleSet(Local<String> key,
+                        Local<Value> value,
+                        const v8::PropertyCallbackInfo<v8::Value>& info);
+  static void HandleQuery(Local<String> key,
+                          const v8::PropertyCallbackInfo<v8::Integer>& info);
 
  private:
   bool is_initialized_;
@@ -104,7 +104,7 @@ class DeclarationContext {
   int set_count_;
   int query_count_;
 
-  static DeclarationContext* GetInstance(const AccessorInfo& info);
+  static DeclarationContext* GetInstance(Local<Value> data);
 };
 
 
@@ -173,33 +173,36 @@ void DeclarationContext::Check(const char* source,
 }
 
 
-v8::Handle<Value> DeclarationContext::HandleGet(Local<String> key,
-                                                const AccessorInfo& info) {
-  DeclarationContext* context = GetInstance(info);
+void DeclarationContext::HandleGet(
+    Local<String> key,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
+  DeclarationContext* context = GetInstance(info.Data());
   context->get_count_++;
-  return context->Get(key);
+  info.GetReturnValue().Set(context->Get(key));
 }
 
 
-v8::Handle<Value> DeclarationContext::HandleSet(Local<String> key,
-                                                Local<Value> value,
-                                                const AccessorInfo& info) {
-  DeclarationContext* context = GetInstance(info);
+void DeclarationContext::HandleSet(
+    Local<String> key,
+    Local<Value> value,
+    const v8::PropertyCallbackInfo<v8::Value>& info) {
+  DeclarationContext* context = GetInstance(info.Data());
   context->set_count_++;
-  return context->Set(key, value);
+  info.GetReturnValue().Set(context->Set(key, value));
 }
 
 
-v8::Handle<Integer> DeclarationContext::HandleQuery(Local<String> key,
-                                                    const AccessorInfo& info) {
-  DeclarationContext* context = GetInstance(info);
+void DeclarationContext::HandleQuery(
+    Local<String> key,
+    const v8::PropertyCallbackInfo<v8::Integer>& info) {
+  DeclarationContext* context = GetInstance(info.Data());
   context->query_count_++;
-  return context->Query(key);
+  info.GetReturnValue().Set(context->Query(key));
 }
 
 
-DeclarationContext* DeclarationContext::GetInstance(const AccessorInfo& info) {
-  void* value = External::Cast(*info.Data())->Value();
+DeclarationContext* DeclarationContext::GetInstance(Local<Value> data) {
+  void* value = Local<External>::Cast(data)->Value();
   return static_cast<DeclarationContext*>(value);
 }
 
index 27c4fe4..2bdf235 100644 (file)
@@ -103,6 +103,7 @@ TEST(ObjectHashTable) {
 
 #ifdef DEBUG
 TEST(ObjectHashSetCausesGC) {
+  i::FLAG_stress_compaction = false;
   LocalContext context;
   Isolate* isolate = Isolate::Current();
   Factory* factory = isolate->factory();
@@ -135,6 +136,7 @@ TEST(ObjectHashSetCausesGC) {
 
 #ifdef DEBUG
 TEST(ObjectHashTableCausesGC) {
+  i::FLAG_stress_compaction = false;
   LocalContext context;
   Isolate* isolate = Isolate::Current();
   Factory* factory = isolate->factory();
index e8ffb8b..b124b27 100644 (file)
@@ -36,7 +36,7 @@ using namespace v8;
 TEST(StrictUndeclaredGlobalVariable) {
   HandleScope scope(Isolate::GetCurrent());
   v8::Local<v8::String> var_name = v8_str("x");
-  v8::LocalContext context;
+  LocalContext context;
   v8::TryCatch try_catch;
   v8::Local<v8::Script> script = v8_compile("\"use strict\"; x = 42;");
   v8::Handle<v8::Object> proto = v8::Object::New();
index 4906296..6536269 100644 (file)
@@ -51,7 +51,7 @@ void generate(MacroAssembler* masm, i::Vector<const uint8_t> string) {
   // GenerateHashInit takes the first character as an argument so it can't
   // handle the zero length string.
   ASSERT(string.length() > 0);
-#ifdef V8_TARGET_ARCH_IA32
+#if V8_TARGET_ARCH_IA32
   __ push(ebx);
   __ push(ecx);
   __ mov(eax, Immediate(0));
@@ -116,7 +116,7 @@ void generate(MacroAssembler* masm, i::Vector<const uint8_t> string) {
 
 
 void generate(MacroAssembler* masm, uint32_t key) {
-#ifdef V8_TARGET_ARCH_IA32
+#if V8_TARGET_ARCH_IA32
   __ push(ebx);
   __ mov(eax, Immediate(key));
   __ GetNumberHash(eax, ebx);
index 254cd1e..5973941 100644 (file)
@@ -92,8 +92,9 @@ class NamedEntriesDetector {
 static const v8::HeapGraphNode* GetGlobalObject(
     const v8::HeapSnapshot* snapshot) {
   CHECK_EQ(2, snapshot->GetRoot()->GetChildrenCount());
+  // The 0th-child is (GC Roots), 1st is the user root.
   const v8::HeapGraphNode* global_obj =
-      snapshot->GetRoot()->GetChild(0)->GetToNode();
+      snapshot->GetRoot()->GetChild(1)->GetToNode();
   CHECK_EQ(0, strncmp("Object", const_cast<i::HeapEntry*>(
       reinterpret_cast<const i::HeapEntry*>(global_obj))->name(), 6));
   return global_obj;
@@ -658,7 +659,8 @@ TEST(HeapSnapshotJSONSerialization) {
       "  first_edge_indexes[i] = first_edge_index;\n"
       "  first_edge_index += edge_fields_count *\n"
       "      parsed.nodes[i * node_fields_count + edge_count_offset];\n"
-      "}\n");
+      "}\n"
+      "first_edge_indexes[node_count] = first_edge_index;\n");
   CHECK(!meta_analysis_result.IsEmpty());
 
   // A helper function for processing encoded nodes.
@@ -682,7 +684,7 @@ TEST(HeapSnapshotJSONSerialization) {
       "GetChildPosByProperty(\n"
       "  GetChildPosByProperty(\n"
       "    GetChildPosByProperty("
-      "      parsed.edges[edge_to_node_offset],"
+      "      parsed.edges[edge_fields_count + edge_to_node_offset],"
       "      \"b\", property_type),\n"
       "    \"x\", property_type),"
       "  \"s\", property_type)");
@@ -1507,12 +1509,45 @@ TEST(GetConstructorName) {
 }
 
 
-TEST(FastCaseGetter) {
+TEST(FastCaseAccessors) {
+  LocalContext env;
+  v8::HandleScope scope(env->GetIsolate());
+  v8::HeapProfiler* heap_profiler = env->GetIsolate()->GetHeapProfiler();
+
+  CompileRun("var obj1 = {};\n"
+             "obj1.__defineGetter__('propWithGetter', function Y() {\n"
+             "  return 42;\n"
+             "});\n"
+             "obj1.__defineSetter__('propWithSetter', function Z(value) {\n"
+             "  return this.value_ = value;\n"
+             "});\n");
+  const v8::HeapSnapshot* snapshot =
+      heap_profiler->TakeHeapSnapshot(v8_str("fastCaseAccessors"));
+
+  const v8::HeapGraphNode* global = GetGlobalObject(snapshot);
+  CHECK_NE(NULL, global);
+  const v8::HeapGraphNode* obj1 =
+      GetProperty(global, v8::HeapGraphEdge::kProperty, "obj1");
+  CHECK_NE(NULL, obj1);
+  const v8::HeapGraphNode* func;
+  func = GetProperty(obj1, v8::HeapGraphEdge::kProperty, "get propWithGetter");
+  CHECK_NE(NULL, func);
+  func = GetProperty(obj1, v8::HeapGraphEdge::kProperty, "set propWithGetter");
+  CHECK_EQ(NULL, func);
+  func = GetProperty(obj1, v8::HeapGraphEdge::kProperty, "set propWithSetter");
+  CHECK_NE(NULL, func);
+  func = GetProperty(obj1, v8::HeapGraphEdge::kProperty, "get propWithSetter");
+  CHECK_EQ(NULL, func);
+}
+
+
+TEST(SlowCaseAccessors) {
   LocalContext env;
   v8::HandleScope scope(env->GetIsolate());
   v8::HeapProfiler* heap_profiler = env->GetIsolate()->GetHeapProfiler();
 
   CompileRun("var obj1 = {};\n"
+             "for (var i = 0; i < 100; ++i) obj1['z' + i] = {};"
              "obj1.__defineGetter__('propWithGetter', function Y() {\n"
              "  return 42;\n"
              "});\n"
@@ -1520,21 +1555,25 @@ TEST(FastCaseGetter) {
              "  return this.value_ = value;\n"
              "});\n");
   const v8::HeapSnapshot* snapshot =
-      heap_profiler->TakeHeapSnapshot(v8_str("fastCaseGetter"));
+      heap_profiler->TakeHeapSnapshot(v8_str("slowCaseAccessors"));
 
   const v8::HeapGraphNode* global = GetGlobalObject(snapshot);
   CHECK_NE(NULL, global);
   const v8::HeapGraphNode* obj1 =
       GetProperty(global, v8::HeapGraphEdge::kProperty, "obj1");
   CHECK_NE(NULL, obj1);
-  const v8::HeapGraphNode* getterFunction =
-      GetProperty(obj1, v8::HeapGraphEdge::kProperty, "get-propWithGetter");
-  CHECK_NE(NULL, getterFunction);
-  const v8::HeapGraphNode* setterFunction =
-      GetProperty(obj1, v8::HeapGraphEdge::kProperty, "set-propWithSetter");
-  CHECK_NE(NULL, setterFunction);
+  const v8::HeapGraphNode* func;
+  func = GetProperty(obj1, v8::HeapGraphEdge::kProperty, "get propWithGetter");
+  CHECK_NE(NULL, func);
+  func = GetProperty(obj1, v8::HeapGraphEdge::kProperty, "set propWithGetter");
+  CHECK_EQ(NULL, func);
+  func = GetProperty(obj1, v8::HeapGraphEdge::kProperty, "set propWithSetter");
+  CHECK_NE(NULL, func);
+  func = GetProperty(obj1, v8::HeapGraphEdge::kProperty, "get propWithSetter");
+  CHECK_EQ(NULL, func);
 }
 
+
 TEST(HiddenPropertiesFastCase) {
   LocalContext env;
   v8::HandleScope scope(env->GetIsolate());
@@ -1582,10 +1621,10 @@ bool HasWeakGlobalHandle() {
   const v8::HeapSnapshot* snapshot =
       heap_profiler->TakeHeapSnapshot(v8_str("weaks"));
   const v8::HeapGraphNode* gc_roots = GetNode(
-      snapshot->GetRoot(), v8::HeapGraphNode::kObject, "(GC roots)");
+      snapshot->GetRoot(), v8::HeapGraphNode::kSynthetic, "(GC roots)");
   CHECK_NE(NULL, gc_roots);
   const v8::HeapGraphNode* global_handles = GetNode(
-      gc_roots, v8::HeapGraphNode::kObject, "(Global handles)");
+      gc_roots, v8::HeapGraphNode::kSynthetic, "(Global handles)");
   CHECK_NE(NULL, global_handles);
   return HasWeakEdge(global_handles);
 }
@@ -1605,9 +1644,7 @@ TEST(WeakGlobalHandle) {
   CHECK(!HasWeakGlobalHandle());
 
   v8::Persistent<v8::Object> handle(env->GetIsolate(), v8::Object::New());
-  handle.MakeWeak<v8::Value, void>(env->GetIsolate(),
-                                   NULL,
-                                   PersistentHandleCallback);
+  handle.MakeWeak<v8::Value, void>(NULL, PersistentHandleCallback);
 
   CHECK(HasWeakGlobalHandle());
 }
@@ -1621,10 +1658,10 @@ TEST(WeakNativeContextRefs) {
   const v8::HeapSnapshot* snapshot =
       heap_profiler->TakeHeapSnapshot(v8_str("weaks"));
   const v8::HeapGraphNode* gc_roots = GetNode(
-      snapshot->GetRoot(), v8::HeapGraphNode::kObject, "(GC roots)");
+      snapshot->GetRoot(), v8::HeapGraphNode::kSynthetic, "(GC roots)");
   CHECK_NE(NULL, gc_roots);
   const v8::HeapGraphNode* global_handles = GetNode(
-      gc_roots, v8::HeapGraphNode::kObject, "(Global handles)");
+      gc_roots, v8::HeapGraphNode::kSynthetic, "(Global handles)");
   CHECK_NE(NULL, global_handles);
   const v8::HeapGraphNode* native_context = GetNode(
       global_handles, v8::HeapGraphNode::kHidden, "system / NativeContext");
@@ -1689,10 +1726,10 @@ TEST(AllStrongGcRootsHaveNames) {
   const v8::HeapSnapshot* snapshot =
       heap_profiler->TakeHeapSnapshot(v8_str("snapshot"));
   const v8::HeapGraphNode* gc_roots = GetNode(
-      snapshot->GetRoot(), v8::HeapGraphNode::kObject, "(GC roots)");
+      snapshot->GetRoot(), v8::HeapGraphNode::kSynthetic, "(GC roots)");
   CHECK_NE(NULL, gc_roots);
   const v8::HeapGraphNode* strong_roots = GetNode(
-      gc_roots, v8::HeapGraphNode::kObject, "(Strong roots)");
+      gc_roots, v8::HeapGraphNode::kSynthetic, "(Strong roots)");
   CHECK_NE(NULL, strong_roots);
   for (int i = 0; i < strong_roots->GetChildrenCount(); ++i) {
     const v8::HeapGraphEdge* edge = strong_roots->GetChild(i);
index 68ed83d..be1098c 100644 (file)
@@ -403,6 +403,7 @@ static void TestWeakGlobalHandleCallback(v8::Isolate* isolate,
 
 
 TEST(WeakGlobalHandlesScavenge) {
+  i::FLAG_stress_compaction = false;
   CcTest::InitializeVM();
   Isolate* isolate = Isolate::Current();
   Heap* heap = isolate->heap();
@@ -489,6 +490,7 @@ TEST(WeakGlobalHandlesMark) {
 
 
 TEST(DeleteWeakGlobalHandle) {
+  i::FLAG_stress_compaction = false;
   CcTest::InitializeVM();
   Isolate* isolate = Isolate::Current();
   Heap* heap = isolate->heap();
@@ -877,6 +879,7 @@ TEST(StringAllocation) {
 static int ObjectsFoundInHeap(Heap* heap, Handle<Object> objs[], int size) {
   // Count the number of objects found in the heap.
   int found_count = 0;
+  heap->EnsureHeapIsIterable();
   HeapIterator iterator(heap);
   for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) {
     for (int i = 0; i < size; i++) {
@@ -1969,14 +1972,15 @@ TEST(PrototypeTransitionClearing) {
   CHECK(!space->LastPage()->Contains(
       map->GetPrototypeTransitions()->address()));
   CHECK(space->LastPage()->Contains(prototype->address()));
-  baseObject->SetPrototype(*prototype, false)->ToObjectChecked();
-  CHECK(map->GetPrototypeTransition(*prototype)->IsMap());
+  JSObject::SetPrototype(baseObject, prototype, false);
+  CHECK(Map::GetPrototypeTransition(map, prototype)->IsMap());
   HEAP->CollectAllGarbage(Heap::kNoGCFlags);
-  CHECK(map->GetPrototypeTransition(*prototype)->IsMap());
+  CHECK(Map::GetPrototypeTransition(map, prototype)->IsMap());
 }
 
 
 TEST(ResetSharedFunctionInfoCountersDuringIncrementalMarking) {
+  i::FLAG_stress_compaction = false;
   i::FLAG_allow_natives_syntax = true;
 #ifdef VERIFY_HEAP
   i::FLAG_verify_heap = true;
@@ -2033,6 +2037,7 @@ TEST(ResetSharedFunctionInfoCountersDuringIncrementalMarking) {
 
 
 TEST(ResetSharedFunctionInfoCountersDuringMarkSweep) {
+  i::FLAG_stress_compaction = false;
   i::FLAG_allow_natives_syntax = true;
 #ifdef VERIFY_HEAP
   i::FLAG_verify_heap = true;
@@ -2104,8 +2109,7 @@ TEST(OptimizedAllocationAlwaysInNewSpace) {
 }
 
 
-// Test pretenuring of array literals allocated with HAllocate.
-TEST(OptimizedPretenuringArrayLiterals) {
+TEST(OptimizedPretenuringObjectArrayLiterals) {
   i::FLAG_allow_natives_syntax = true;
   CcTest::InitializeVM();
   if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return;
@@ -2113,11 +2117,9 @@ TEST(OptimizedPretenuringArrayLiterals) {
   v8::HandleScope scope(CcTest::isolate());
   HEAP->SetNewSpaceHighPromotionModeActive(true);
 
-  AlwaysAllocateScope always_allocate;
   v8::Local<v8::Value> res = CompileRun(
       "function f() {"
-      "  var numbers = [1, 2, 3];"
-      "  numbers[0] = {};"
+      "  var numbers = [{}, {}, {}];"
       "  return numbers;"
       "};"
       "f(); f(); f();"
@@ -2128,21 +2130,22 @@ TEST(OptimizedPretenuringArrayLiterals) {
       v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
 
   CHECK(HEAP->InOldPointerSpace(o->elements()));
+  CHECK(HEAP->InOldPointerSpace(*o));
 }
 
 
-TEST(OptimizedPretenuringSimpleArrayLiterals) {
+TEST(OptimizedPretenuringMixedInObjectProperties) {
   i::FLAG_allow_natives_syntax = true;
-  i::FLAG_pretenuring = false;
   CcTest::InitializeVM();
   if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return;
   if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
   v8::HandleScope scope(CcTest::isolate());
+  HEAP->SetNewSpaceHighPromotionModeActive(true);
 
-  AlwaysAllocateScope always_allocate;
   v8::Local<v8::Value> res = CompileRun(
       "function f() {"
-      "  return [1, 2, 3];"
+      "  var numbers = {a: {c: 2.2, d: {}}, b: 1.1};"
+      "  return numbers;"
       "};"
       "f(); f(); f();"
       "%OptimizeFunctionOnNextCall(f);"
@@ -2151,62 +2154,198 @@ TEST(OptimizedPretenuringSimpleArrayLiterals) {
   Handle<JSObject> o =
       v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
 
-  CHECK(HEAP->InNewSpace(*o));
+  CHECK(HEAP->InOldPointerSpace(*o));
+  CHECK(HEAP->InOldPointerSpace(o->RawFastPropertyAt(0)));
+  CHECK(HEAP->InOldDataSpace(o->RawFastPropertyAt(1)));
+
+  JSObject* inner_object = reinterpret_cast<JSObject*>(o->RawFastPropertyAt(0));
+  CHECK(HEAP->InOldPointerSpace(inner_object));
+  CHECK(HEAP->InOldDataSpace(inner_object->RawFastPropertyAt(0)));
+  CHECK(HEAP->InOldPointerSpace(inner_object->RawFastPropertyAt(1)));
 }
 
 
-// Test regular array literals allocation.
-TEST(OptimizedAllocationArrayLiterals) {
+TEST(OptimizedPretenuringDoubleArrayProperties) {
   i::FLAG_allow_natives_syntax = true;
   CcTest::InitializeVM();
   if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return;
   if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
   v8::HandleScope scope(CcTest::isolate());
+  HEAP->SetNewSpaceHighPromotionModeActive(true);
 
-  AlwaysAllocateScope always_allocate;
   v8::Local<v8::Value> res = CompileRun(
       "function f() {"
-      "  var numbers = new Array(1, 2, 3);"
-      "  numbers[0] = 3.14;"
+      "  var numbers = {a: 1.1, b: 2.2};"
       "  return numbers;"
       "};"
       "f(); f(); f();"
       "%OptimizeFunctionOnNextCall(f);"
       "f();");
-  CHECK_EQ(static_cast<int>(3.14),
-           v8::Object::Cast(*res)->Get(v8_str("0"))->Int32Value());
 
   Handle<JSObject> o =
       v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
 
-  CHECK(HEAP->InNewSpace(o->elements()));
+  CHECK(HEAP->InOldPointerSpace(*o));
+  CHECK(HEAP->InOldDataSpace(o->properties()));
 }
 
 
-TEST(OptimizedPretenuringCallNew) {
+TEST(OptimizedPretenuringdoubleArrayLiterals) {
+  i::FLAG_allow_natives_syntax = true;
+  CcTest::InitializeVM();
+  if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return;
+  if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
+  v8::HandleScope scope(CcTest::isolate());
+  HEAP->SetNewSpaceHighPromotionModeActive(true);
+
+  v8::Local<v8::Value> res = CompileRun(
+      "function f() {"
+      "  var numbers = [1.1, 2.2, 3.3];"
+      "  return numbers;"
+      "};"
+      "f(); f(); f();"
+      "%OptimizeFunctionOnNextCall(f);"
+      "f();");
+
+  Handle<JSObject> o =
+      v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
+
+  CHECK(HEAP->InOldDataSpace(o->elements()));
+  CHECK(HEAP->InOldPointerSpace(*o));
+}
+
+
+TEST(OptimizedPretenuringNestedMixedArrayLiterals) {
+  i::FLAG_allow_natives_syntax = true;
+  CcTest::InitializeVM();
+  if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return;
+  if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
+  v8::HandleScope scope(CcTest::isolate());
+  HEAP->SetNewSpaceHighPromotionModeActive(true);
+
+  v8::Local<v8::Value> res = CompileRun(
+      "function f() {"
+      "  var numbers = [[{}, {}, {}],[1.1, 2.2, 3.3]];"
+      "  return numbers;"
+      "};"
+      "f(); f(); f();"
+      "%OptimizeFunctionOnNextCall(f);"
+      "f();");
+
+  v8::Local<v8::Value> int_array = v8::Object::Cast(*res)->Get(v8_str("0"));
+  Handle<JSObject> int_array_handle =
+      v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(int_array));
+  v8::Local<v8::Value> double_array = v8::Object::Cast(*res)->Get(v8_str("1"));
+  Handle<JSObject> double_array_handle =
+      v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(double_array));
+
+  Handle<JSObject> o =
+      v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
+  CHECK(HEAP->InOldPointerSpace(*o));
+  CHECK(HEAP->InOldPointerSpace(*int_array_handle));
+  CHECK(HEAP->InOldPointerSpace(int_array_handle->elements()));
+  CHECK(HEAP->InOldPointerSpace(*double_array_handle));
+  CHECK(HEAP->InOldDataSpace(double_array_handle->elements()));
+}
+
+
+TEST(OptimizedPretenuringNestedObjectLiterals) {
   i::FLAG_allow_natives_syntax = true;
-  i::FLAG_pretenuring_call_new = true;
   CcTest::InitializeVM();
   if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return;
   if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
   v8::HandleScope scope(CcTest::isolate());
   HEAP->SetNewSpaceHighPromotionModeActive(true);
 
-  AlwaysAllocateScope always_allocate;
   v8::Local<v8::Value> res = CompileRun(
-      "function g() { this.a = 0; }"
       "function f() {"
-      "  return new g();"
+      "  var numbers = [[{}, {}, {}],[{}, {}, {}]];"
+      "  return numbers;"
       "};"
       "f(); f(); f();"
       "%OptimizeFunctionOnNextCall(f);"
       "f();");
 
+  v8::Local<v8::Value> int_array_1 = v8::Object::Cast(*res)->Get(v8_str("0"));
+  Handle<JSObject> int_array_handle_1 =
+      v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(int_array_1));
+  v8::Local<v8::Value> int_array_2 = v8::Object::Cast(*res)->Get(v8_str("1"));
+  Handle<JSObject> int_array_handle_2 =
+      v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(int_array_2));
+
   Handle<JSObject> o =
       v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
   CHECK(HEAP->InOldPointerSpace(*o));
+  CHECK(HEAP->InOldPointerSpace(*int_array_handle_1));
+  CHECK(HEAP->InOldPointerSpace(int_array_handle_1->elements()));
+  CHECK(HEAP->InOldPointerSpace(*int_array_handle_2));
+  CHECK(HEAP->InOldPointerSpace(int_array_handle_2->elements()));
 }
 
+
+TEST(OptimizedPretenuringNestedDoubleLiterals) {
+  i::FLAG_allow_natives_syntax = true;
+  CcTest::InitializeVM();
+  if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return;
+  if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
+  v8::HandleScope scope(CcTest::isolate());
+  HEAP->SetNewSpaceHighPromotionModeActive(true);
+
+  v8::Local<v8::Value> res = CompileRun(
+      "function f() {"
+      "  var numbers = [[1.1, 1.2, 1.3],[2.1, 2.2, 2.3]];"
+      "  return numbers;"
+      "};"
+      "f(); f(); f();"
+      "%OptimizeFunctionOnNextCall(f);"
+      "f();");
+
+  v8::Local<v8::Value> double_array_1 =
+      v8::Object::Cast(*res)->Get(v8_str("0"));
+  Handle<JSObject> double_array_handle_1 =
+      v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(double_array_1));
+  v8::Local<v8::Value> double_array_2 =
+      v8::Object::Cast(*res)->Get(v8_str("1"));
+  Handle<JSObject> double_array_handle_2 =
+      v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(double_array_2));
+
+  Handle<JSObject> o =
+      v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
+  CHECK(HEAP->InOldPointerSpace(*o));
+  CHECK(HEAP->InOldPointerSpace(*double_array_handle_1));
+  CHECK(HEAP->InOldDataSpace(double_array_handle_1->elements()));
+  CHECK(HEAP->InOldPointerSpace(*double_array_handle_2));
+  CHECK(HEAP->InOldDataSpace(double_array_handle_2->elements()));
+}
+
+
+// Test regular array literals allocation.
+TEST(OptimizedAllocationArrayLiterals) {
+  i::FLAG_allow_natives_syntax = true;
+  CcTest::InitializeVM();
+  if (!i::V8::UseCrankshaft() || i::FLAG_always_opt) return;
+  if (i::FLAG_gc_global || i::FLAG_stress_compaction) return;
+  v8::HandleScope scope(CcTest::isolate());
+
+  v8::Local<v8::Value> res = CompileRun(
+      "function f() {"
+      "  var numbers = new Array(1, 2, 3);"
+      "  numbers[0] = 3.14;"
+      "  return numbers;"
+      "};"
+      "f(); f(); f();"
+      "%OptimizeFunctionOnNextCall(f);"
+      "f();");
+  CHECK_EQ(static_cast<int>(3.14),
+           v8::Object::Cast(*res)->Get(v8_str("0"))->Int32Value());
+
+  Handle<JSObject> o =
+      v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(res));
+
+  CHECK(HEAP->InNewSpace(o->elements()));
+}
+
+
 static int CountMapTransitions(Map* map) {
   return map->transitions()->number_of_transitions();
 }
@@ -2215,6 +2354,7 @@ static int CountMapTransitions(Map* map) {
 // Test that map transitions are cleared and maps are collected with
 // incremental marking as well.
 TEST(Regress1465) {
+  i::FLAG_stress_compaction = false;
   i::FLAG_allow_natives_syntax = true;
   i::FLAG_trace_incremental_marking = true;
   CcTest::InitializeVM();
@@ -2382,6 +2522,7 @@ TEST(ReleaseOverReservedPages) {
 
 
 TEST(Regress2237) {
+  i::FLAG_stress_compaction = false;
   CcTest::InitializeVM();
   Isolate* isolate = Isolate::Current();
   Factory* factory = isolate->factory();
@@ -2498,15 +2639,15 @@ TEST(IncrementalMarkingClearsTypeFeedbackCells) {
       f->shared()->code()->type_feedback_info())->type_feedback_cells());
 
   CHECK_EQ(2, cells->CellCount());
-  CHECK(cells->Cell(0)->value()->IsJSFunction());
-  CHECK(cells->Cell(1)->value()->IsJSFunction());
+  CHECK(cells->GetCell(0)->value()->IsJSFunction());
+  CHECK(cells->GetCell(1)->value()->IsJSFunction());
 
   SimulateIncrementalMarking();
   HEAP->CollectAllGarbage(Heap::kNoGCFlags);
 
   CHECK_EQ(2, cells->CellCount());
-  CHECK(cells->Cell(0)->value()->IsTheHole());
-  CHECK(cells->Cell(1)->value()->IsTheHole());
+  CHECK(cells->GetCell(0)->value()->IsTheHole());
+  CHECK(cells->GetCell(1)->value()->IsTheHole());
 }
 
 
@@ -2689,6 +2830,7 @@ TEST(ReleaseStackTraceData) {
 
 
 TEST(Regression144230) {
+  i::FLAG_stress_compaction = false;
   CcTest::InitializeVM();
   Isolate* isolate = Isolate::Current();
   Heap* heap = isolate->heap();
index 2c89a38..d02f4f4 100644 (file)
@@ -76,19 +76,20 @@ class DiffChunkStruct : public ZoneObject {
 
 class ListDiffOutputWriter : public Comparator::Output {
  public:
-  explicit ListDiffOutputWriter(DiffChunkStruct** next_chunk_pointer)
-      : next_chunk_pointer_(next_chunk_pointer) {
+  explicit ListDiffOutputWriter(DiffChunkStruct** next_chunk_pointer,
+                                Zone* zone)
+      : next_chunk_pointer_(next_chunk_pointer), zone_(zone) {
     (*next_chunk_pointer_) = NULL;
   }
   void AddChunk(int pos1, int pos2, int len1, int len2) {
-    current_chunk_ = new(Isolate::Current()->runtime_zone()) DiffChunkStruct(
-        pos1, pos2, len1, len2);
+    current_chunk_ = new(zone_) DiffChunkStruct(pos1, pos2, len1, len2);
     (*next_chunk_pointer_) = current_chunk_;
     next_chunk_pointer_ = &current_chunk_->next;
   }
  private:
   DiffChunkStruct** next_chunk_pointer_;
   DiffChunkStruct* current_chunk_;
+  Zone* zone_;
 };
 
 
@@ -96,10 +97,10 @@ void CompareStringsOneWay(const char* s1, const char* s2,
                           int expected_diff_parameter = -1) {
   StringCompareInput input(s1, s2);
 
-  ZoneScope zone_scope(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT);
+  Zone zone(Isolate::Current());
 
   DiffChunkStruct* first_chunk;
-  ListDiffOutputWriter writer(&first_chunk);
+  ListDiffOutputWriter writer(&first_chunk, &zone);
 
   Comparator::CalculateDifference(&input, &writer);
 
index 9d24535..072bbff 100644 (file)
@@ -207,7 +207,7 @@ static void StartJoinAndDeleteThreads(const i::List<JoinableThread*>& threads) {
 
 // Run many threads all locking on the same isolate
 TEST(IsolateLockingStress) {
-#ifdef V8_TARGET_ARCH_MIPS
+#if V8_TARGET_ARCH_MIPS
   const int kNThreads = 50;
 #else
   const int kNThreads = 100;
@@ -244,7 +244,7 @@ class IsolateNonlockingThread : public JoinableThread {
 
 // Run many threads each accessing its own isolate without locking
 TEST(MultithreadedParallelIsolates) {
-#if defined(V8_TARGET_ARCH_ARM) || defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_MIPS
   const int kNThreads = 10;
 #else
   const int kNThreads = 50;
@@ -282,7 +282,7 @@ class IsolateNestedLockingThread : public JoinableThread {
 
 // Run  many threads with nested locks
 TEST(IsolateNestedLocking) {
-#ifdef V8_TARGET_ARCH_MIPS
+#if V8_TARGET_ARCH_MIPS
   const int kNThreads = 50;
 #else
   const int kNThreads = 100;
@@ -323,7 +323,7 @@ class SeparateIsolatesLocksNonexclusiveThread : public JoinableThread {
 
 // Run parallel threads that lock and access different isolates in parallel
 TEST(SeparateIsolatesLocksNonexclusive) {
-#if defined(V8_TARGET_ARCH_ARM) || defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_MIPS
   const int kNThreads = 50;
 #else
   const int kNThreads = 100;
@@ -399,7 +399,7 @@ class LockerUnlockerThread : public JoinableThread {
 
 // Use unlocker inside of a Locker, multiple threads.
 TEST(LockerUnlocker) {
-#if defined(V8_TARGET_ARCH_ARM) || defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_MIPS
   const int kNThreads = 50;
 #else
   const int kNThreads = 100;
@@ -452,7 +452,7 @@ class LockTwiceAndUnlockThread : public JoinableThread {
 
 // Use Unlocker inside two Lockers.
 TEST(LockTwiceAndUnlock) {
-#if defined(V8_TARGET_ARCH_ARM) || defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_MIPS
   const int kNThreads = 50;
 #else
   const int kNThreads = 100;
@@ -573,7 +573,7 @@ class LockUnlockLockThread : public JoinableThread {
 
 // Locker inside an Unlocker inside a Locker.
 TEST(LockUnlockLockMultithreaded) {
-#ifdef V8_TARGET_ARCH_MIPS
+#if V8_TARGET_ARCH_MIPS
   const int kNThreads = 50;
 #else
   const int kNThreads = 100;
@@ -628,7 +628,7 @@ class LockUnlockLockDefaultIsolateThread : public JoinableThread {
 
 // Locker inside an Unlocker inside a Locker for default isolate.
 TEST(LockUnlockLockDefaultIsolateMultithreaded) {
-#ifdef V8_TARGET_ARCH_MIPS
+#if V8_TARGET_ARCH_MIPS
   const int kNThreads = 50;
 #else
   const int kNThreads = 100;
@@ -699,7 +699,7 @@ class IsolateGenesisThread : public JoinableThread {
 // Test installing extensions in separate isolates concurrently.
 // http://code.google.com/p/v8/issues/detail?id=1821
 TEST(ExtensionsRegistration) {
-#if defined(V8_TARGET_ARCH_ARM) || defined(V8_TARGET_ARCH_MIPS)
+#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_MIPS
   const int kNThreads = 10;
 #else
   const int kNThreads = 40;
index ca6c7ae..20f135d 100644 (file)
 #include "v8.h"
 
 #include "api.h"
-#include "codegen.h"
-#include "log.h"
-#include "isolate.h"
 #include "cctest.h"
+#include "codegen.h"
 #include "disassembler.h"
+#include "isolate.h"
+#include "log.h"
+#include "sampler.h"
 #include "vm-state-inl.h"
 
 using v8::Function;
@@ -51,6 +52,7 @@ using v8::internal::Address;
 using v8::internal::Handle;
 using v8::internal::Isolate;
 using v8::internal::JSFunction;
+using v8::internal::RegisterState;
 using v8::internal::TickSample;
 
 
@@ -65,11 +67,12 @@ static void InitTraceEnv(TickSample* sample) {
 
 
 static void DoTrace(Address fp) {
-  trace_env.sample->fp = fp;
+  RegisterState regs;
+  regs.fp = fp;
   // sp is only used to define stack high bound
-  trace_env.sample->sp =
+  regs.sp =
       reinterpret_cast<Address>(trace_env.sample) - 10240;
-  trace_env.sample->Trace(Isolate::Current());
+  trace_env.sample->Init(Isolate::Current(), regs);
 }
 
 
@@ -92,12 +95,12 @@ class TraceExtension : public v8::Extension {
   TraceExtension() : v8::Extension("v8/trace", kSource) { }
   virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction(
       v8::Handle<String> name);
-  static v8::Handle<v8::Value> Trace(const v8::Arguments& args);
-  static v8::Handle<v8::Value> JSTrace(const v8::Arguments& args);
-  static v8::Handle<v8::Value> JSEntrySP(const v8::Arguments& args);
-  static v8::Handle<v8::Value> JSEntrySPLevel2(const v8::Arguments& args);
+  static void Trace(const v8::FunctionCallbackInfo<v8::Value>& args);
+  static void JSTrace(const v8::FunctionCallbackInfo<v8::Value>& args);
+  static void JSEntrySP(const v8::FunctionCallbackInfo<v8::Value>& args);
+  static void JSEntrySPLevel2(const v8::FunctionCallbackInfo<v8::Value>& args);
  private:
-  static Address GetFP(const v8::Arguments& args);
+  static Address GetFP(const v8::FunctionCallbackInfo<v8::Value>& args);
   static const char* kSource;
 };
 
@@ -125,7 +128,7 @@ v8::Handle<v8::FunctionTemplate> TraceExtension::GetNativeFunction(
 }
 
 
-Address TraceExtension::GetFP(const v8::Arguments& args) {
+Address TraceExtension::GetFP(const v8::FunctionCallbackInfo<v8::Value>& args) {
   // Convert frame pointer from encoding as smis in the arguments to a pointer.
   CHECK_EQ(2, args.Length());  // Ignore second argument on 32-bit platform.
 #if defined(V8_HOST_ARCH_32_BIT)
@@ -142,15 +145,13 @@ Address TraceExtension::GetFP(const v8::Arguments& args) {
 }
 
 
-v8::Handle<v8::Value> TraceExtension::Trace(const v8::Arguments& args) {
+void TraceExtension::Trace(const v8::FunctionCallbackInfo<v8::Value>& args) {
   DoTrace(GetFP(args));
-  return v8::Undefined();
 }
 
 
-v8::Handle<v8::Value> TraceExtension::JSTrace(const v8::Arguments& args) {
+void TraceExtension::JSTrace(const v8::FunctionCallbackInfo<v8::Value>& args) {
   DoTraceHideCEntryFPAddress(GetFP(args));
-  return v8::Undefined();
 }
 
 
@@ -160,20 +161,19 @@ static Address GetJsEntrySp() {
 }
 
 
-v8::Handle<v8::Value> TraceExtension::JSEntrySP(const v8::Arguments& args) {
+void TraceExtension::JSEntrySP(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   CHECK_NE(0, GetJsEntrySp());
-  return v8::Undefined();
 }
 
 
-v8::Handle<v8::Value> TraceExtension::JSEntrySPLevel2(
-    const v8::Arguments& args) {
+void TraceExtension::JSEntrySPLevel2(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   v8::HandleScope scope(args.GetIsolate());
   const Address js_entry_sp = GetJsEntrySp();
   CHECK_NE(0, js_entry_sp);
   CompileRun("js_entry_sp();");
   CHECK_EQ(js_entry_sp, GetJsEntrySp());
-  return v8::Undefined();
 }
 
 
@@ -197,7 +197,7 @@ static bool IsAddressWithinFuncCode(const char* func_name, Address addr) {
 // This C++ function is called as a constructor, to grab the frame pointer
 // from the calling function.  When this function runs, the stack contains
 // a C_Entry frame and a Construct frame above the calling function's frame.
-static v8::Handle<Value> construct_call(const v8::Arguments& args) {
+static void construct_call(const v8::FunctionCallbackInfo<v8::Value>& args) {
   i::Isolate* isolate = reinterpret_cast<i::Isolate*>(args.GetIsolate());
   i::StackFrameIterator frame_iterator(isolate);
   CHECK(frame_iterator.frame()->is_exit());
@@ -219,7 +219,7 @@ static v8::Handle<Value> construct_call(const v8::Arguments& args) {
 #else
 #error Host architecture is neither 32-bit nor 64-bit.
 #endif
-  return args.This();
+  args.GetReturnValue().Set(args.This());
 }
 
 
index d2ef02d..6ccf58e 100644 (file)
@@ -392,8 +392,7 @@ TEST(Issue23768) {
 }
 
 
-static v8::Handle<v8::Value> ObjMethod1(const v8::Arguments& args) {
-  return v8::Handle<v8::Value>();
+static void ObjMethod1(const v8::FunctionCallbackInfo<v8::Value>& args) {
 }
 
 TEST(LogCallbacks) {
@@ -405,8 +404,7 @@ TEST(LogCallbacks) {
                                            v8::FunctionTemplate::New());
   obj->SetClassName(v8_str("Obj"));
   v8::Handle<v8::ObjectTemplate> proto = obj->PrototypeTemplate();
-  v8::Local<v8::Signature> signature =
-      v8::Signature::New(v8::Handle<v8::FunctionTemplate>(*obj));
+  v8::Local<v8::Signature> signature = v8::Signature::New(obj);
   proto->Set(v8_str("method1"),
              v8::FunctionTemplate::New(ObjMethod1,
                                        v8::Handle<v8::Value>(),
@@ -425,26 +423,24 @@ TEST(LogCallbacks) {
 
   i::EmbeddedVector<char, 100> ref_data;
   i::OS::SNPrintF(ref_data,
-                  "code-creation,Callback,-3,0x%" V8PRIxPTR ",1,\"method1\"\0",
+                  "code-creation,Callback,-2,0x%" V8PRIxPTR ",1,\"method1\"\0",
                   ObjMethod1);
 
   CHECK_NE(NULL, StrNStr(log.start(), ref_data.start(), log.length()));
 }
 
 
-static v8::Handle<v8::Value> Prop1Getter(v8::Local<v8::String> property,
-                                         const v8::AccessorInfo& info) {
-  return v8::Handle<v8::Value>();
+static void Prop1Getter(v8::Local<v8::String> property,
+                        const v8::PropertyCallbackInfo<v8::Value>& info) {
 }
 
 static void Prop1Setter(v8::Local<v8::String> property,
-                                         v8::Local<v8::Value> value,
-                                         const v8::AccessorInfo& info) {
+                        v8::Local<v8::Value> value,
+                        const v8::PropertyCallbackInfo<void>& info) {
 }
 
-static v8::Handle<v8::Value> Prop2Getter(v8::Local<v8::String> property,
-                                         const v8::AccessorInfo& info) {
-  return v8::Handle<v8::Value>();
+static void Prop2Getter(v8::Local<v8::String> property,
+                        const v8::PropertyCallbackInfo<v8::Value>& info) {
 }
 
 TEST(LogAccessorCallbacks) {
@@ -468,21 +464,21 @@ TEST(LogAccessorCallbacks) {
 
   EmbeddedVector<char, 100> prop1_getter_record;
   i::OS::SNPrintF(prop1_getter_record,
-                  "code-creation,Callback,-3,0x%" V8PRIxPTR ",1,\"get prop1\"",
+                  "code-creation,Callback,-2,0x%" V8PRIxPTR ",1,\"get prop1\"",
                   Prop1Getter);
   CHECK_NE(NULL,
            StrNStr(log.start(), prop1_getter_record.start(), log.length()));
 
   EmbeddedVector<char, 100> prop1_setter_record;
   i::OS::SNPrintF(prop1_setter_record,
-                  "code-creation,Callback,-3,0x%" V8PRIxPTR ",1,\"set prop1\"",
+                  "code-creation,Callback,-2,0x%" V8PRIxPTR ",1,\"set prop1\"",
                   Prop1Setter);
   CHECK_NE(NULL,
            StrNStr(log.start(), prop1_setter_record.start(), log.length()));
 
   EmbeddedVector<char, 100> prop2_getter_record;
   i::OS::SNPrintF(prop2_getter_record,
-                  "code-creation,Callback,-3,0x%" V8PRIxPTR ",1,\"get prop2\"",
+                  "code-creation,Callback,-2,0x%" V8PRIxPTR ",1,\"get prop2\"",
                   Prop2Getter);
   CHECK_NE(NULL,
            StrNStr(log.start(), prop2_getter_record.start(), log.length()));
index d4d0edb..3945f1b 100755 (executable)
@@ -1131,7 +1131,7 @@ TEST(SmiMul) {
 void TestSmiDiv(MacroAssembler* masm, Label* exit, int id, int x, int y) {
   bool division_by_zero = (y == 0);
   bool negative_zero = (x == 0 && y < 0);
-#ifdef V8_TARGET_ARCH_X64
+#if V8_TARGET_ARCH_X64
   bool overflow = (x == Smi::kMinValue && y < 0);  // Safe approx. used.
 #else
   bool overflow = (x == Smi::kMinValue && y == -1);
index 45cb39c..8be72d3 100644 (file)
@@ -283,6 +283,7 @@ static void GCEpilogueCallbackFunc() {
 
 
 TEST(GCCallback) {
+  i::FLAG_stress_compaction = false;
   CcTest::InitializeVM();
 
   HEAP->SetGlobalGCPrologueCallback(&GCPrologueCallbackFunc);
@@ -557,7 +558,7 @@ TEST(BootUpMemoryUse) {
       }
     } else {                            // 32-bit.
       if (v8::internal::Snapshot::IsEnabled()) {
-        CHECK_LE(delta, 2900 * 1024);
+        CHECK_LE(delta, 3100 * 1024);
       } else {
         CHECK_LE(delta, 3400 * 1024);
       }
@@ -565,4 +566,25 @@ TEST(BootUpMemoryUse) {
   }
 }
 
+
+intptr_t ShortLivingIsolate() {
+  v8::Isolate* isolate = v8::Isolate::New();
+  { v8::Isolate::Scope isolate_scope(isolate);
+    v8::Locker lock(isolate);
+    v8::HandleScope handle_scope;
+    v8::Local<v8::Context> context = v8::Context::New(isolate);
+    CHECK(!context.IsEmpty());
+  }
+  isolate->Dispose();
+  return MemoryInUse();
+}
+
+
+TEST(RegressJoinThreadsOnIsolateDeinit) {
+  intptr_t size_limit = ShortLivingIsolate() * 2;
+  for (int i = 0; i < 10; i++) {
+    CHECK_GT(size_limit, ShortLivingIsolate());
+  }
+}
+
 #endif  // __linux__ and !USE_SIMULATOR
index 0dd0265..3778fed 100644 (file)
@@ -57,7 +57,7 @@ class HarmonyIsolate {
 TEST(PerIsolateState) {
   HarmonyIsolate isolate;
   HandleScope scope(isolate.GetIsolate());
-  v8::LocalContext context1;
+  LocalContext context1;
   CompileRun(
       "var count = 0;"
       "var calls = 0;"
@@ -70,20 +70,20 @@ TEST(PerIsolateState) {
       "(function() { obj.foo = 'bar'; })");
   Handle<Value> notify_fun2;
   {
-    v8::LocalContext context2;
+    LocalContext context2;
     context2->Global()->Set(String::New("obj"), obj);
     notify_fun2 = CompileRun(
         "(function() { obj.foo = 'baz'; })");
   }
   Handle<Value> notify_fun3;
   {
-    v8::LocalContext context3;
+    LocalContext context3;
     context3->Global()->Set(String::New("obj"), obj);
     notify_fun3 = CompileRun(
         "(function() { obj.foo = 'bat'; })");
   }
   {
-    v8::LocalContext context4;
+    LocalContext context4;
     context4->Global()->Set(String::New("observer"), observer);
     context4->Global()->Set(String::New("fun1"), notify_fun1);
     context4->Global()->Set(String::New("fun2"), notify_fun2);
@@ -97,7 +97,7 @@ TEST(PerIsolateState) {
 TEST(EndOfMicrotaskDelivery) {
   HarmonyIsolate isolate;
   HandleScope scope(isolate.GetIsolate());
-  v8::LocalContext context;
+  LocalContext context;
   CompileRun(
       "var obj = {};"
       "var count = 0;"
@@ -110,7 +110,7 @@ TEST(EndOfMicrotaskDelivery) {
 TEST(DeliveryOrdering) {
   HarmonyIsolate isolate;
   HandleScope scope(isolate.GetIsolate());
-  v8::LocalContext context;
+  LocalContext context;
   CompileRun(
       "var obj1 = {};"
       "var obj2 = {};"
@@ -141,7 +141,7 @@ TEST(DeliveryOrdering) {
 TEST(DeliveryOrderingReentrant) {
   HarmonyIsolate isolate;
   HandleScope scope(isolate.GetIsolate());
-  v8::LocalContext context;
+  LocalContext context;
   CompileRun(
       "var obj = {};"
       "var reentered = false;"
@@ -172,7 +172,7 @@ TEST(DeliveryOrderingReentrant) {
 TEST(DeliveryOrderingDeliverChangeRecords) {
   HarmonyIsolate isolate;
   HandleScope scope(isolate.GetIsolate());
-  v8::LocalContext context;
+  LocalContext context;
   CompileRun(
       "var obj = {};"
       "var ordering = [];"
@@ -197,14 +197,14 @@ TEST(ObjectHashTableGrowth) {
   HarmonyIsolate isolate;
   HandleScope scope(isolate.GetIsolate());
   // Initializing this context sets up initial hash tables.
-  v8::LocalContext context;
+  LocalContext context;
   Handle<Value> obj = CompileRun("obj = {};");
   Handle<Value> observer = CompileRun(
       "var ran = false;"
       "(function() { ran = true })");
   {
     // As does initializing this context.
-    v8::LocalContext context2;
+    LocalContext context2;
     context2->Global()->Set(String::New("obj"), obj);
     context2->Global()->Set(String::New("observer"), observer);
     CompileRun(
@@ -224,7 +224,7 @@ TEST(ObjectHashTableGrowth) {
 
 TEST(GlobalObjectObservation) {
   HarmonyIsolate isolate;
-  v8::LocalContext context;
+  LocalContext context;
   HandleScope scope(isolate.GetIsolate());
   Handle<Object> global_proxy = context->Global();
   Handle<Object> inner_global = global_proxy->GetPrototype().As<Object>();
@@ -256,7 +256,7 @@ TEST(GlobalObjectObservation) {
   // to the old context.
   context->DetachGlobal();
   {
-    v8::LocalContext context2;
+    LocalContext context2;
     context2->DetachGlobal();
     context2->ReattachGlobal(global_proxy);
     CompileRun(
@@ -271,7 +271,7 @@ TEST(GlobalObjectObservation) {
   // Attaching by passing to Context::New
   {
     // Delegates to Context::New
-    v8::LocalContext context3(NULL, Handle<ObjectTemplate>(), global_proxy);
+    LocalContext context3(NULL, Handle<ObjectTemplate>(), global_proxy);
     CompileRun(
         "var records3 = [];"
         "Object.observe(this, function(r) { [].push.apply(records3, r) });"
@@ -320,7 +320,7 @@ static void ExpectRecords(Handle<Value> records,
 TEST(APITestBasicMutation) {
   HarmonyIsolate isolate;
   HandleScope scope(isolate.GetIsolate());
-  v8::LocalContext context;
+  LocalContext context;
   Handle<Object> obj = Handle<Object>::Cast(CompileRun(
       "var records = [];"
       "var obj = {};"
@@ -363,7 +363,7 @@ TEST(APITestBasicMutation) {
 TEST(HiddenPrototypeObservation) {
   HarmonyIsolate isolate;
   HandleScope scope(isolate.GetIsolate());
-  v8::LocalContext context;
+  LocalContext context;
   Handle<FunctionTemplate> tmpl = FunctionTemplate::New();
   tmpl->SetHiddenPrototype(true);
   tmpl->InstanceTemplate()->Set(String::New("foo"), Number::New(75));
@@ -412,7 +412,7 @@ static int NumberOfElements(i::Handle<i::JSWeakMap> map) {
 TEST(ObservationWeakMap) {
   HarmonyIsolate isolate;
   HandleScope scope(isolate.GetIsolate());
-  v8::LocalContext context;
+  LocalContext context;
   CompileRun(
       "var obj = {};"
       "Object.observe(obj, function(){});"
index 62a5bcc..9879886 100644 (file)
@@ -1048,8 +1048,9 @@ TEST(ScopePositions) {
 i::Handle<i::String> FormatMessage(i::ScriptDataImpl* data) {
   i::Isolate* isolate = i::Isolate::Current();
   i::Factory* factory = isolate->factory();
+  const char* message = data->BuildMessage();
   i::Handle<i::String> format = v8::Utils::OpenHandle(
-                                    *v8::String::New(data->BuildMessage()));
+                                    *v8::String::New(message));
   i::Vector<const char*> args = data->BuildArgs();
   i::Handle<i::JSArray> args_array = factory->NewJSArray(args.length());
   for (int i = 0; i < args.length(); i++) {
@@ -1068,6 +1069,11 @@ i::Handle<i::String> FormatMessage(i::ScriptDataImpl* data) {
       i::Execution::Call(format_fun, builtins, 2, arg_handles, &has_exception);
   CHECK(!has_exception);
   CHECK(result->IsString());
+  for (int i = 0; i < args.length(); i++) {
+    i::DeleteArray(args[i]);
+  }
+  i::DeleteArray(args.start());
+  i::DeleteArray(message);
   return i::Handle<i::String>::cast(result);
 }
 
@@ -1279,7 +1285,7 @@ TEST(ParserSync) {
             + kSuffixLen + i::StrLength("label: for (;;) {  }");
 
         // Plug the source code pieces together.
-        i::Vector<char> program = i::Vector<char>::New(kProgramSize + 1);
+        i::ScopedVector<char> program(kProgramSize + 1);
         int length = i::OS::SNPrintF(program,
             "label: for (;;) { %s%s%s%s }",
             context_data[i][0],
index 70091d9..7472669 100644 (file)
@@ -30,6 +30,7 @@
 #include "v8.h"
 #include "profile-generator-inl.h"
 #include "cctest.h"
+#include "cpu-profiler.h"
 #include "../include/v8-profiler.h"
 
 using i::CodeEntry;
@@ -87,20 +88,17 @@ TEST(TokenEnumerator) {
 TEST(ProfileNodeFindOrAddChild) {
   ProfileTree tree;
   ProfileNode node(&tree, NULL);
-  CodeEntry entry1(i::Logger::FUNCTION_TAG, "", "aaa", "", 0,
-                   TokenEnumerator::kNoSecurityToken);
+  CodeEntry entry1(i::Logger::FUNCTION_TAG, "aaa");
   ProfileNode* childNode1 = node.FindOrAddChild(&entry1);
   CHECK_NE(NULL, childNode1);
   CHECK_EQ(childNode1, node.FindOrAddChild(&entry1));
-  CodeEntry entry2(i::Logger::FUNCTION_TAG, "", "bbb", "", 0,
-                   TokenEnumerator::kNoSecurityToken);
+  CodeEntry entry2(i::Logger::FUNCTION_TAG, "bbb");
   ProfileNode* childNode2 = node.FindOrAddChild(&entry2);
   CHECK_NE(NULL, childNode2);
   CHECK_NE(childNode1, childNode2);
   CHECK_EQ(childNode1, node.FindOrAddChild(&entry1));
   CHECK_EQ(childNode2, node.FindOrAddChild(&entry2));
-  CodeEntry entry3(i::Logger::FUNCTION_TAG, "", "ccc", "", 0,
-                   TokenEnumerator::kNoSecurityToken);
+  CodeEntry entry3(i::Logger::FUNCTION_TAG, "ccc");
   ProfileNode* childNode3 = node.FindOrAddChild(&entry3);
   CHECK_NE(NULL, childNode3);
   CHECK_NE(childNode1, childNode3);
@@ -112,21 +110,18 @@ TEST(ProfileNodeFindOrAddChild) {
 
 
 TEST(ProfileNodeFindOrAddChildForSameFunction) {
-  const char* empty = "";
   const char* aaa = "aaa";
   ProfileTree tree;
   ProfileNode node(&tree, NULL);
-  CodeEntry entry1(i::Logger::FUNCTION_TAG, empty, aaa, empty, 0,
-                     TokenEnumerator::kNoSecurityToken);
+  CodeEntry entry1(i::Logger::FUNCTION_TAG, aaa);
   ProfileNode* childNode1 = node.FindOrAddChild(&entry1);
   CHECK_NE(NULL, childNode1);
   CHECK_EQ(childNode1, node.FindOrAddChild(&entry1));
   // The same function again.
-  CodeEntry entry2(i::Logger::FUNCTION_TAG, empty, aaa, empty, 0,
-                   TokenEnumerator::kNoSecurityToken);
+  CodeEntry entry2(i::Logger::FUNCTION_TAG, aaa);
   CHECK_EQ(childNode1, node.FindOrAddChild(&entry2));
   // Now with a different security token.
-  CodeEntry entry3(i::Logger::FUNCTION_TAG, empty, aaa, empty, 0,
+  CodeEntry entry3(i::Logger::FUNCTION_TAG, aaa,
                    TokenEnumerator::kNoSecurityToken + 1);
   CHECK_EQ(childNode1, node.FindOrAddChild(&entry3));
 }
@@ -162,12 +157,9 @@ class ProfileTreeTestHelper {
 }  // namespace
 
 TEST(ProfileTreeAddPathFromStart) {
-  CodeEntry entry1(i::Logger::FUNCTION_TAG, "", "aaa", "", 0,
-                   TokenEnumerator::kNoSecurityToken);
-  CodeEntry entry2(i::Logger::FUNCTION_TAG, "", "bbb", "", 0,
-                   TokenEnumerator::kNoSecurityToken);
-  CodeEntry entry3(i::Logger::FUNCTION_TAG, "", "ccc", "", 0,
-                   TokenEnumerator::kNoSecurityToken);
+  CodeEntry entry1(i::Logger::FUNCTION_TAG, "aaa");
+  CodeEntry entry2(i::Logger::FUNCTION_TAG, "bbb");
+  CodeEntry entry3(i::Logger::FUNCTION_TAG, "ccc");
   ProfileTree tree;
   ProfileTreeTestHelper helper(&tree);
   CHECK_EQ(NULL, helper.Walk(&entry1));
@@ -232,12 +224,9 @@ TEST(ProfileTreeAddPathFromStart) {
 
 
 TEST(ProfileTreeAddPathFromEnd) {
-  CodeEntry entry1(i::Logger::FUNCTION_TAG, "", "aaa", "", 0,
-                   TokenEnumerator::kNoSecurityToken);
-  CodeEntry entry2(i::Logger::FUNCTION_TAG, "", "bbb", "", 0,
-                   TokenEnumerator::kNoSecurityToken);
-  CodeEntry entry3(i::Logger::FUNCTION_TAG, "", "ccc", "", 0,
-                   TokenEnumerator::kNoSecurityToken);
+  CodeEntry entry1(i::Logger::FUNCTION_TAG, "aaa");
+  CodeEntry entry2(i::Logger::FUNCTION_TAG, "bbb");
+  CodeEntry entry3(i::Logger::FUNCTION_TAG, "ccc");
   ProfileTree tree;
   ProfileTreeTestHelper helper(&tree);
   CHECK_EQ(NULL, helper.Walk(&entry1));
@@ -315,8 +304,7 @@ TEST(ProfileTreeCalculateTotalTicks) {
   CHECK_EQ(1, empty_tree.root()->total_ticks());
   CHECK_EQ(1, empty_tree.root()->self_ticks());
 
-  CodeEntry entry1(i::Logger::FUNCTION_TAG, "", "aaa", "", 0,
-                   TokenEnumerator::kNoSecurityToken);
+  CodeEntry entry1(i::Logger::FUNCTION_TAG, "aaa");
   CodeEntry* e1_path[] = {&entry1};
   Vector<CodeEntry*> e1_path_vec(
       e1_path, sizeof(e1_path) / sizeof(e1_path[0]));
@@ -337,8 +325,7 @@ TEST(ProfileTreeCalculateTotalTicks) {
   CHECK_EQ(1, node1->total_ticks());
   CHECK_EQ(1, node1->self_ticks());
 
-  CodeEntry entry2(i::Logger::FUNCTION_TAG, "", "bbb", "", 0,
-                   TokenEnumerator::kNoSecurityToken);
+  CodeEntry entry2(i::Logger::FUNCTION_TAG, "bbb");
   CodeEntry* e1_e2_path[] = {&entry1, &entry2};
   Vector<CodeEntry*> e1_e2_path_vec(
       e1_e2_path, sizeof(e1_e2_path) / sizeof(e1_e2_path[0]));
@@ -373,8 +360,7 @@ TEST(ProfileTreeCalculateTotalTicks) {
   CodeEntry* e2_path[] = {&entry2};
   Vector<CodeEntry*> e2_path_vec(
       e2_path, sizeof(e2_path) / sizeof(e2_path[0]));
-  CodeEntry entry3(i::Logger::FUNCTION_TAG, "", "ccc", "", 0,
-                   TokenEnumerator::kNoSecurityToken);
+  CodeEntry entry3(i::Logger::FUNCTION_TAG, "ccc");
   CodeEntry* e3_path[] = {&entry3};
   Vector<CodeEntry*> e3_path_vec(
       e3_path, sizeof(e3_path) / sizeof(e3_path[0]));
@@ -432,12 +418,11 @@ TEST(ProfileTreeCalculateTotalTicks) {
 TEST(ProfileTreeFilteredClone) {
   ProfileTree source_tree;
   const int token0 = 0, token1 = 1, token2 = 2;
-  CodeEntry entry1(i::Logger::FUNCTION_TAG, "", "aaa", "", 0, token0);
-  CodeEntry entry2(i::Logger::FUNCTION_TAG, "", "bbb", "", 0, token1);
-  CodeEntry entry3(i::Logger::FUNCTION_TAG, "", "ccc", "", 0, token0);
-  CodeEntry entry4(
-      i::Logger::FUNCTION_TAG, "", "ddd", "", 0,
-      TokenEnumerator::kInheritsSecurityToken);
+  CodeEntry entry1(i::Logger::FUNCTION_TAG, "aaa", token0);
+  CodeEntry entry2(i::Logger::FUNCTION_TAG, "bbb", token1);
+  CodeEntry entry3(i::Logger::FUNCTION_TAG, "ccc", token0);
+  CodeEntry entry4(i::Logger::FUNCTION_TAG, "ddd",
+                   TokenEnumerator::kInheritsSecurityToken);
 
   {
     CodeEntry* e1_e2_path[] = {&entry1, &entry2};
@@ -534,14 +519,10 @@ static inline i::Address ToAddress(int n) {
 
 TEST(CodeMapAddCode) {
   CodeMap code_map;
-  CodeEntry entry1(i::Logger::FUNCTION_TAG, "", "aaa", "", 0,
-                   TokenEnumerator::kNoSecurityToken);
-  CodeEntry entry2(i::Logger::FUNCTION_TAG, "", "bbb", "", 0,
-                   TokenEnumerator::kNoSecurityToken);
-  CodeEntry entry3(i::Logger::FUNCTION_TAG, "", "ccc", "", 0,
-                   TokenEnumerator::kNoSecurityToken);
-  CodeEntry entry4(i::Logger::FUNCTION_TAG, "", "ddd", "", 0,
-                   TokenEnumerator::kNoSecurityToken);
+  CodeEntry entry1(i::Logger::FUNCTION_TAG, "aaa");
+  CodeEntry entry2(i::Logger::FUNCTION_TAG, "bbb");
+  CodeEntry entry3(i::Logger::FUNCTION_TAG, "ccc");
+  CodeEntry entry4(i::Logger::FUNCTION_TAG, "ddd");
   code_map.AddCode(ToAddress(0x1500), &entry1, 0x200);
   code_map.AddCode(ToAddress(0x1700), &entry2, 0x100);
   code_map.AddCode(ToAddress(0x1900), &entry3, 0x50);
@@ -568,10 +549,8 @@ TEST(CodeMapAddCode) {
 
 TEST(CodeMapMoveAndDeleteCode) {
   CodeMap code_map;
-  CodeEntry entry1(i::Logger::FUNCTION_TAG, "", "aaa", "", 0,
-                   TokenEnumerator::kNoSecurityToken);
-  CodeEntry entry2(i::Logger::FUNCTION_TAG, "", "bbb", "", 0,
-                   TokenEnumerator::kNoSecurityToken);
+  CodeEntry entry1(i::Logger::FUNCTION_TAG, "aaa");
+  CodeEntry entry2(i::Logger::FUNCTION_TAG, "bbb");
   code_map.AddCode(ToAddress(0x1500), &entry1, 0x200);
   code_map.AddCode(ToAddress(0x1700), &entry2, 0x100);
   CHECK_EQ(&entry1, code_map.FindEntry(ToAddress(0x1500)));
@@ -579,8 +558,7 @@ TEST(CodeMapMoveAndDeleteCode) {
   code_map.MoveCode(ToAddress(0x1500), ToAddress(0x1700));  // Deprecate bbb.
   CHECK_EQ(NULL, code_map.FindEntry(ToAddress(0x1500)));
   CHECK_EQ(&entry1, code_map.FindEntry(ToAddress(0x1700)));
-  CodeEntry entry3(i::Logger::FUNCTION_TAG, "", "ccc", "", 0,
-                   TokenEnumerator::kNoSecurityToken);
+  CodeEntry entry3(i::Logger::FUNCTION_TAG, "ccc");
   code_map.AddCode(ToAddress(0x1750), &entry3, 0x100);
   CHECK_EQ(NULL, code_map.FindEntry(ToAddress(0x1700)));
   CHECK_EQ(&entry3, code_map.FindEntry(ToAddress(0x1750)));
@@ -804,8 +782,8 @@ class ProfilerExtension : public v8::Extension {
   ProfilerExtension() : v8::Extension("v8/profiler", kSource) { }
   virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction(
       v8::Handle<v8::String> name);
-  static v8::Handle<v8::Value> StartProfiling(const v8::Arguments& args);
-  static v8::Handle<v8::Value> StopProfiling(const v8::Arguments& args);
+  static void StartProfiling(const v8::FunctionCallbackInfo<v8::Value>& args);
+  static void StopProfiling(const v8::FunctionCallbackInfo<v8::Value>& args);
  private:
   static const char* kSource;
 };
@@ -828,25 +806,23 @@ v8::Handle<v8::FunctionTemplate> ProfilerExtension::GetNativeFunction(
 }
 
 
-v8::Handle<v8::Value> ProfilerExtension::StartProfiling(
-    const v8::Arguments& args) {
+void ProfilerExtension::StartProfiling(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   v8::CpuProfiler* cpu_profiler = args.GetIsolate()->GetCpuProfiler();
   if (args.Length() > 0)
     cpu_profiler->StartCpuProfiling(args[0].As<v8::String>());
   else
     cpu_profiler->StartCpuProfiling(v8::String::New(""));
-  return v8::Undefined();
 }
 
 
-v8::Handle<v8::Value> ProfilerExtension::StopProfiling(
-    const v8::Arguments& args) {
+void ProfilerExtension::StopProfiling(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
   v8::CpuProfiler* cpu_profiler = args.GetIsolate()->GetCpuProfiler();
   if (args.Length() > 0)
     cpu_profiler->StopCpuProfiling(args[0].As<v8::String>());
   else
     cpu_profiler->StopCpuProfiling(v8::String::New(""));
-  return v8::Undefined();
 }
 
 
@@ -930,3 +906,62 @@ TEST(Issue51919) {
   for (int i = 0; i < CpuProfilesCollection::kMaxSimultaneousProfiles; ++i)
     i::DeleteArray(titles[i]);
 }
+
+
+static const v8::CpuProfileNode* PickChild(const v8::CpuProfileNode* parent,
+                                           const char* name) {
+  for (int i = 0; i < parent->GetChildrenCount(); ++i) {
+    const v8::CpuProfileNode* child = parent->GetChild(i);
+    v8::String::AsciiValue function_name(child->GetFunctionName());
+    if (strcmp(*function_name, name) == 0) return child;
+  }
+  return NULL;
+}
+
+
+TEST(ProfileNodeScriptId) {
+  // This test does not pass with inlining enabled since inlined functions
+  // don't appear in the stack trace.
+  i::FLAG_use_inlining = false;
+
+  const char* extensions[] = { "v8/profiler" };
+  v8::ExtensionConfiguration config(1, extensions);
+  LocalContext env(&config);
+  v8::HandleScope hs(env->GetIsolate());
+
+  v8::CpuProfiler* profiler = env->GetIsolate()->GetCpuProfiler();
+  CHECK_EQ(0, profiler->GetProfileCount());
+  v8::Handle<v8::Script> script_a = v8::Script::Compile(v8::String::New(
+      "function a() { startProfiling(); }\n"));
+  script_a->Run();
+  v8::Handle<v8::Script> script_b = v8::Script::Compile(v8::String::New(
+      "function b() { a(); }\n"
+      "b();\n"
+      "stopProfiling();\n"));
+  script_b->Run();
+  CHECK_EQ(1, profiler->GetProfileCount());
+  const v8::CpuProfile* profile = profiler->GetCpuProfile(0);
+  const v8::CpuProfileNode* current = profile->GetTopDownRoot();
+  reinterpret_cast<ProfileNode*>(
+      const_cast<v8::CpuProfileNode*>(current))->Print(0);
+  // The tree should look like this:
+  //  (root)
+  //   (anonymous function)
+  //     b
+  //       a
+  // There can also be:
+  //         startProfiling
+  // if the sampler managed to get a tick.
+  current = PickChild(current, i::ProfileGenerator::kAnonymousFunctionName);
+  CHECK_NE(NULL, const_cast<v8::CpuProfileNode*>(current));
+
+  current = PickChild(current, "b");
+  CHECK_NE(NULL, const_cast<v8::CpuProfileNode*>(current));
+  CHECK_EQ(script_b->GetId(), current->GetScriptId());
+
+  current = PickChild(current, "a");
+  CHECK_NE(NULL, const_cast<v8::CpuProfileNode*>(current));
+  CHECK_EQ(script_a->GetId(), current->GetScriptId());
+}
+
+
index ac62b75..f9eed1f 100644 (file)
 #else  // V8_INTERPRETED_REGEXP
 #include "macro-assembler.h"
 #include "code.h"
-#ifdef V8_TARGET_ARCH_ARM
+#if V8_TARGET_ARCH_ARM
 #include "arm/assembler-arm.h"
 #include "arm/macro-assembler-arm.h"
 #include "arm/regexp-macro-assembler-arm.h"
 #endif
-#ifdef V8_TARGET_ARCH_MIPS
+#if V8_TARGET_ARCH_MIPS
 #include "mips/assembler-mips.h"
 #include "mips/macro-assembler-mips.h"
 #include "mips/regexp-macro-assembler-mips.h"
 #endif
-#ifdef V8_TARGET_ARCH_X64
+#if V8_TARGET_ARCH_X64
 #include "x64/assembler-x64.h"
 #include "x64/macro-assembler-x64.h"
 #include "x64/regexp-macro-assembler-x64.h"
 #endif
-#ifdef V8_TARGET_ARCH_IA32
+#if V8_TARGET_ARCH_IA32
 #include "ia32/assembler-ia32.h"
 #include "ia32/macro-assembler-ia32.h"
 #include "ia32/regexp-macro-assembler-ia32.h"
@@ -72,37 +72,36 @@ using namespace v8::internal;
 static bool CheckParse(const char* input) {
   V8::Initialize(NULL);
   v8::HandleScope scope(v8::Isolate::GetCurrent());
-  ZoneScope zone_scope(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT);
+  Zone zone(Isolate::Current());
   FlatStringReader reader(Isolate::Current(), CStrVector(input));
   RegExpCompileData result;
   return v8::internal::RegExpParser::ParseRegExp(
-      &reader, false, &result, Isolate::Current()->runtime_zone());
+      &reader, false, &result, &zone);
 }
 
 
 static SmartArrayPointer<const char> Parse(const char* input) {
   V8::Initialize(NULL);
   v8::HandleScope scope(v8::Isolate::GetCurrent());
-  ZoneScope zone_scope(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT);
+  Zone zone(Isolate::Current());
   FlatStringReader reader(Isolate::Current(), CStrVector(input));
   RegExpCompileData result;
   CHECK(v8::internal::RegExpParser::ParseRegExp(
-      &reader, false, &result, Isolate::Current()->runtime_zone()));
+      &reader, false, &result, &zone));
   CHECK(result.tree != NULL);
   CHECK(result.error.is_null());
-  SmartArrayPointer<const char> output =
-      result.tree->ToString(Isolate::Current()->runtime_zone());
+  SmartArrayPointer<const char> output = result.tree->ToString(&zone);
   return output;
 }
 
 static bool CheckSimple(const char* input) {
   V8::Initialize(NULL);
   v8::HandleScope scope(v8::Isolate::GetCurrent());
-  ZoneScope zone_scope(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT);
+  Zone zone(Isolate::Current());
   FlatStringReader reader(Isolate::Current(), CStrVector(input));
   RegExpCompileData result;
   CHECK(v8::internal::RegExpParser::ParseRegExp(
-      &reader, false, &result, Isolate::Current()->runtime_zone()));
+      &reader, false, &result, &zone));
   CHECK(result.tree != NULL);
   CHECK(result.error.is_null());
   return result.simple;
@@ -116,11 +115,11 @@ struct MinMaxPair {
 static MinMaxPair CheckMinMaxMatch(const char* input) {
   V8::Initialize(NULL);
   v8::HandleScope scope(v8::Isolate::GetCurrent());
-  ZoneScope zone_scope(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT);
+  Zone zone(Isolate::Current());
   FlatStringReader reader(Isolate::Current(), CStrVector(input));
   RegExpCompileData result;
   CHECK(v8::internal::RegExpParser::ParseRegExp(
-      &reader, false, &result, Isolate::Current()->runtime_zone()));
+      &reader, false, &result, &zone));
   CHECK(result.tree != NULL);
   CHECK(result.error.is_null());
   int min_match = result.tree->min_match();
@@ -389,11 +388,11 @@ static void ExpectError(const char* input,
                         const char* expected) {
   V8::Initialize(NULL);
   v8::HandleScope scope(v8::Isolate::GetCurrent());
-  ZoneScope zone_scope(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT);
+  Zone zone(Isolate::Current());
   FlatStringReader reader(Isolate::Current(), CStrVector(input));
   RegExpCompileData result;
   CHECK(!v8::internal::RegExpParser::ParseRegExp(
-      &reader, false, &result, Isolate::Current()->runtime_zone()));
+      &reader, false, &result, &zone));
   CHECK(result.tree == NULL);
   CHECK(!result.error.is_null());
   SmartArrayPointer<char> str = result.error->ToCString(ALLOW_NULLS);
@@ -473,11 +472,10 @@ static bool NotWord(uc16 c) {
 
 
 static void TestCharacterClassEscapes(uc16 c, bool (pred)(uc16 c)) {
-  ZoneScope scope(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT);
-  Zone* zone = Isolate::Current()->runtime_zone();
+  Zone zone(Isolate::Current());
   ZoneList<CharacterRange>* ranges =
-      new(zone) ZoneList<CharacterRange>(2, zone);
-  CharacterRange::AddClassEscape(c, ranges, zone);
+      new(&zone) ZoneList<CharacterRange>(2, &zone);
+  CharacterRange::AddClassEscape(c, ranges, &zone);
   for (unsigned i = 0; i < (1 << 16); i++) {
     bool in_class = false;
     for (int j = 0; !in_class && j < ranges->length(); j++) {
@@ -501,14 +499,16 @@ TEST(CharacterClassEscapes) {
 }
 
 
-static RegExpNode* Compile(const char* input, bool multiline, bool is_ascii) {
+static RegExpNode* Compile(const char* input,
+                           bool multiline,
+                           bool is_ascii,
+                           Zone* zone) {
   V8::Initialize(NULL);
   Isolate* isolate = Isolate::Current();
   FlatStringReader reader(isolate, CStrVector(input));
   RegExpCompileData compile_data;
   if (!v8::internal::RegExpParser::ParseRegExp(&reader, multiline,
-                                               &compile_data,
-                                               isolate->runtime_zone()))
+                                               &compile_data, zone))
     return NULL;
   Handle<String> pattern = isolate->factory()->
       NewStringFromUtf8(CStrVector(input));
@@ -521,7 +521,7 @@ static RegExpNode* Compile(const char* input, bool multiline, bool is_ascii) {
                         pattern,
                         sample_subject,
                         is_ascii,
-                        isolate->runtime_zone());
+                        zone);
   return compile_data.node;
 }
 
@@ -531,8 +531,8 @@ static void Execute(const char* input,
                     bool is_ascii,
                     bool dot_output = false) {
   v8::HandleScope scope(v8::Isolate::GetCurrent());
-  ZoneScope zone_scope(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT);
-  RegExpNode* node = Compile(input, multiline, is_ascii);
+  Zone zone(Isolate::Current());
+  RegExpNode* node = Compile(input, multiline, is_ascii, &zone);
   USE(node);
 #ifdef DEBUG
   if (dot_output) {
@@ -571,8 +571,8 @@ static unsigned PseudoRandom(int i, int j) {
 TEST(SplayTreeSimple) {
   v8::internal::V8::Initialize(NULL);
   static const unsigned kLimit = 1000;
-  ZoneScope zone_scope(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT);
-  ZoneSplayTree<TestConfig> tree(Isolate::Current()->runtime_zone());
+  Zone zone(Isolate::Current());
+  ZoneSplayTree<TestConfig> tree(&zone);
   bool seen[kLimit];
   for (unsigned i = 0; i < kLimit; i++) seen[i] = false;
 #define CHECK_MAPS_EQUAL() do {                                      \
@@ -639,13 +639,12 @@ TEST(DispatchTableConstruction) {
     }
   }
   // Enter test data into dispatch table.
-  ZoneScope zone_scope(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT);
-  DispatchTable table(Isolate::Current()->runtime_zone());
+  Zone zone(Isolate::Current());
+  DispatchTable table(&zone);
   for (int i = 0; i < kRangeCount; i++) {
     uc16* range = ranges[i];
     for (int j = 0; j < 2 * kRangeSize; j += 2)
-      table.AddRange(CharacterRange(range[j], range[j + 1]), i,
-                     Isolate::Current()->runtime_zone());
+      table.AddRange(CharacterRange(range[j], range[j + 1]), i, &zone);
   }
   // Check that the table looks as we would expect
   for (int p = 0; p < kLimit; p++) {
@@ -708,8 +707,7 @@ class ContextInitializer {
  public:
   ContextInitializer()
       : scope_(v8::Isolate::GetCurrent()),
-        env_(v8::Context::New(v8::Isolate::GetCurrent())),
-        zone_(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT) {
+        env_(v8::Context::New(v8::Isolate::GetCurrent())) {
     env_->Enter();
   }
   ~ContextInitializer() {
@@ -718,7 +716,6 @@ class ContextInitializer {
  private:
   v8::HandleScope scope_;
   v8::Handle<v8::Context> env_;
-  v8::internal::ZoneScope zone_;
 };
 
 
@@ -743,10 +740,11 @@ static ArchRegExpMacroAssembler::Result Execute(Code* code,
 TEST(MacroAssemblerNativeSuccess) {
   v8::V8::Initialize();
   ContextInitializer initializer;
-  Factory* factory = Isolate::Current()->factory();
+  Isolate* isolate = Isolate::Current();
+  Factory* factory = isolate->factory();
+  Zone zone(isolate);
 
-  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4,
-                             Isolate::Current()->runtime_zone());
+  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4, &zone);
 
   m.Succeed();
 
@@ -779,10 +777,11 @@ TEST(MacroAssemblerNativeSuccess) {
 TEST(MacroAssemblerNativeSimple) {
   v8::V8::Initialize();
   ContextInitializer initializer;
-  Factory* factory = Isolate::Current()->factory();
+  Isolate* isolate = Isolate::Current();
+  Factory* factory = isolate->factory();
+  Zone zone(isolate);
 
-  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4,
-                             Isolate::Current()->runtime_zone());
+  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4, &zone);
 
   Label fail, backtrack;
   m.PushBacktrack(&fail);
@@ -844,10 +843,11 @@ TEST(MacroAssemblerNativeSimple) {
 TEST(MacroAssemblerNativeSimpleUC16) {
   v8::V8::Initialize();
   ContextInitializer initializer;
-  Factory* factory = Isolate::Current()->factory();
+  Isolate* isolate = Isolate::Current();
+  Factory* factory = isolate->factory();
+  Zone zone(isolate);
 
-  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::UC16, 4,
-                             Isolate::Current()->runtime_zone());
+  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::UC16, 4, &zone);
 
   Label fail, backtrack;
   m.PushBacktrack(&fail);
@@ -914,10 +914,11 @@ TEST(MacroAssemblerNativeSimpleUC16) {
 TEST(MacroAssemblerNativeBacktrack) {
   v8::V8::Initialize();
   ContextInitializer initializer;
-  Factory* factory = Isolate::Current()->factory();
+  Isolate* isolate = Isolate::Current();
+  Factory* factory = isolate->factory();
+  Zone zone(isolate);
 
-  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 0,
-                             Isolate::Current()->runtime_zone());
+  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 0, &zone);
 
   Label fail;
   Label backtrack;
@@ -953,10 +954,11 @@ TEST(MacroAssemblerNativeBacktrack) {
 TEST(MacroAssemblerNativeBackReferenceASCII) {
   v8::V8::Initialize();
   ContextInitializer initializer;
-  Factory* factory = Isolate::Current()->factory();
+  Isolate* isolate = Isolate::Current();
+  Factory* factory = isolate->factory();
+  Zone zone(isolate);
 
-  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4,
-                             Isolate::Current()->runtime_zone());
+  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4, &zone);
 
   m.WriteCurrentPositionToRegister(0, 0);
   m.AdvanceCurrentPosition(2);
@@ -1001,10 +1003,11 @@ TEST(MacroAssemblerNativeBackReferenceASCII) {
 TEST(MacroAssemblerNativeBackReferenceUC16) {
   v8::V8::Initialize();
   ContextInitializer initializer;
-  Factory* factory = Isolate::Current()->factory();
+  Isolate* isolate = Isolate::Current();
+  Factory* factory = isolate->factory();
+  Zone zone(isolate);
 
-  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::UC16, 4,
-                             Isolate::Current()->runtime_zone());
+  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::UC16, 4, &zone);
 
   m.WriteCurrentPositionToRegister(0, 0);
   m.AdvanceCurrentPosition(2);
@@ -1052,10 +1055,11 @@ TEST(MacroAssemblerNativeBackReferenceUC16) {
 TEST(MacroAssemblernativeAtStart) {
   v8::V8::Initialize();
   ContextInitializer initializer;
-  Factory* factory = Isolate::Current()->factory();
+  Isolate* isolate = Isolate::Current();
+  Factory* factory = isolate->factory();
+  Zone zone(isolate);
 
-  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 0,
-                             Isolate::Current()->runtime_zone());
+  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 0, &zone);
 
   Label not_at_start, newline, fail;
   m.CheckNotAtStart(&not_at_start);
@@ -1110,10 +1114,11 @@ TEST(MacroAssemblernativeAtStart) {
 TEST(MacroAssemblerNativeBackRefNoCase) {
   v8::V8::Initialize();
   ContextInitializer initializer;
-  Factory* factory = Isolate::Current()->factory();
+  Isolate* isolate = Isolate::Current();
+  Factory* factory = isolate->factory();
+  Zone zone(isolate);
 
-  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4,
-                             Isolate::Current()->runtime_zone());
+  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 4, &zone);
 
   Label fail, succ;
 
@@ -1168,10 +1173,11 @@ TEST(MacroAssemblerNativeBackRefNoCase) {
 TEST(MacroAssemblerNativeRegisters) {
   v8::V8::Initialize();
   ContextInitializer initializer;
-  Factory* factory = Isolate::Current()->factory();
+  Isolate* isolate = Isolate::Current();
+  Factory* factory = isolate->factory();
+  Zone zone(isolate);
 
-  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 6,
-                             Isolate::Current()->runtime_zone());
+  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 6, &zone);
 
   uc16 foo_chars[3] = {'f', 'o', 'o'};
   Vector<const uc16> foo(foo_chars, 3);
@@ -1272,9 +1278,9 @@ TEST(MacroAssemblerStackOverflow) {
   ContextInitializer initializer;
   Isolate* isolate = Isolate::Current();
   Factory* factory = isolate->factory();
+  Zone zone(isolate);
 
-  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 0,
-                             Isolate::Current()->runtime_zone());
+  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 0, &zone);
 
   Label loop;
   m.Bind(&loop);
@@ -1311,9 +1317,9 @@ TEST(MacroAssemblerNativeLotsOfRegisters) {
   ContextInitializer initializer;
   Isolate* isolate = Isolate::Current();
   Factory* factory = isolate->factory();
+  Zone zone(isolate);
 
-  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 2,
-                             Isolate::Current()->runtime_zone());
+  ArchRegExpMacroAssembler m(NativeRegExpMacroAssembler::ASCII, 2, &zone);
 
   // At least 2048, to ensure the allocated space for registers
   // span one full page.
@@ -1360,8 +1366,8 @@ TEST(MacroAssemblerNativeLotsOfRegisters) {
 TEST(MacroAssembler) {
   V8::Initialize(NULL);
   byte codes[1024];
-  RegExpMacroAssemblerIrregexp m(Vector<byte>(codes, 1024),
-                                 Isolate::Current()->runtime_zone());
+  Zone zone(Isolate::Current());
+  RegExpMacroAssemblerIrregexp m(Vector<byte>(codes, 1024), &zone);
   // ^f(o)o.
   Label start, fail, backtrack;
 
@@ -1428,20 +1434,17 @@ TEST(AddInverseToTable) {
   static const int kLimit = 1000;
   static const int kRangeCount = 16;
   for (int t = 0; t < 10; t++) {
-    ZoneScope zone_scope(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT);
-    Zone* zone = Isolate::Current()->runtime_zone();
+    Zone zone(Isolate::Current());
     ZoneList<CharacterRange>* ranges =
-        new(zone)
-        ZoneList<CharacterRange>(kRangeCount, zone);
+        new(&zone) ZoneList<CharacterRange>(kRangeCount, &zone);
     for (int i = 0; i < kRangeCount; i++) {
       int from = PseudoRandom(t + 87, i + 25) % kLimit;
       int to = from + (PseudoRandom(i + 87, t + 25) % (kLimit / 20));
       if (to > kLimit) to = kLimit;
-      ranges->Add(CharacterRange(from, to), zone);
+      ranges->Add(CharacterRange(from, to), &zone);
     }
-    DispatchTable table(zone);
-    DispatchTableConstructor cons(&table, false,
-                                  Isolate::Current()->runtime_zone());
+    DispatchTable table(&zone);
+    DispatchTableConstructor cons(&table, false, &zone);
     cons.set_choice_index(0);
     cons.AddInverse(ranges);
     for (int i = 0; i < kLimit; i++) {
@@ -1452,14 +1455,12 @@ TEST(AddInverseToTable) {
       CHECK_EQ(is_on, set->Get(0) == false);
     }
   }
-  ZoneScope zone_scope(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT);
-  Zone* zone = Isolate::Current()->runtime_zone();
+  Zone zone(Isolate::Current());
   ZoneList<CharacterRange>* ranges =
-      new(zone) ZoneList<CharacterRange>(1, zone);
-  ranges->Add(CharacterRange(0xFFF0, 0xFFFE), zone);
-  DispatchTable table(zone);
-  DispatchTableConstructor cons(&table, false,
-                                Isolate::Current()->runtime_zone());
+      new(&zone) ZoneList<CharacterRange>(1, &zone);
+  ranges->Add(CharacterRange(0xFFF0, 0xFFFE), &zone);
+  DispatchTable table(&zone);
+  DispatchTableConstructor cons(&table, false, &zone);
   cons.set_choice_index(0);
   cons.AddInverse(ranges);
   CHECK(!table.Get(0xFFFE)->Get(0));
@@ -1567,12 +1568,11 @@ TEST(UncanonicalizeEquivalence) {
 
 static void TestRangeCaseIndependence(CharacterRange input,
                                       Vector<CharacterRange> expected) {
-  ZoneScope zone_scope(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT);
-  Zone* zone = Isolate::Current()->runtime_zone();
+  Zone zone(Isolate::Current());
   int count = expected.length();
   ZoneList<CharacterRange>* list =
-      new(zone) ZoneList<CharacterRange>(count, zone);
-  input.AddCaseEquivalents(list, false, zone);
+      new(&zone) ZoneList<CharacterRange>(count, &zone);
+  input.AddCaseEquivalents(list, false, &zone);
   CHECK_EQ(count, list->length());
   for (int i = 0; i < list->length(); i++) {
     CHECK_EQ(expected[i].from(), list->at(i).from());
@@ -1633,16 +1633,14 @@ static bool InClass(uc16 c, ZoneList<CharacterRange>* ranges) {
 
 TEST(CharClassDifference) {
   v8::internal::V8::Initialize(NULL);
-  ZoneScope zone_scope(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT);
-  Zone* zone = Isolate::Current()->runtime_zone();
+  Zone zone(Isolate::Current());
   ZoneList<CharacterRange>* base =
-      new(zone) ZoneList<CharacterRange>(1, zone);
-  base->Add(CharacterRange::Everything(), zone);
+      new(&zone) ZoneList<CharacterRange>(1, &zone);
+  base->Add(CharacterRange::Everything(), &zone);
   Vector<const int> overlay = CharacterRange::GetWordBounds();
   ZoneList<CharacterRange>* included = NULL;
   ZoneList<CharacterRange>* excluded = NULL;
-  CharacterRange::Split(base, overlay, &included, &excluded,
-                        Isolate::Current()->runtime_zone());
+  CharacterRange::Split(base, overlay, &included, &excluded, &zone);
   for (int i = 0; i < (1 << 16); i++) {
     bool in_base = InClass(i, base);
     if (in_base) {
@@ -1663,15 +1661,14 @@ TEST(CharClassDifference) {
 
 TEST(CanonicalizeCharacterSets) {
   v8::internal::V8::Initialize(NULL);
-  ZoneScope scope(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT);
-  Zone* zone = Isolate::Current()->runtime_zone();
+  Zone zone(Isolate::Current());
   ZoneList<CharacterRange>* list =
-      new(zone) ZoneList<CharacterRange>(4, zone);
+      new(&zone) ZoneList<CharacterRange>(4, &zone);
   CharacterSet set(list);
 
-  list->Add(CharacterRange(10, 20), zone);
-  list->Add(CharacterRange(30, 40), zone);
-  list->Add(CharacterRange(50, 60), zone);
+  list->Add(CharacterRange(10, 20), &zone);
+  list->Add(CharacterRange(30, 40), &zone);
+  list->Add(CharacterRange(50, 60), &zone);
   set.Canonicalize();
   ASSERT_EQ(3, list->length());
   ASSERT_EQ(10, list->at(0).from());
@@ -1682,9 +1679,9 @@ TEST(CanonicalizeCharacterSets) {
   ASSERT_EQ(60, list->at(2).to());
 
   list->Rewind(0);
-  list->Add(CharacterRange(10, 20), zone);
-  list->Add(CharacterRange(50, 60), zone);
-  list->Add(CharacterRange(30, 40), zone);
+  list->Add(CharacterRange(10, 20), &zone);
+  list->Add(CharacterRange(50, 60), &zone);
+  list->Add(CharacterRange(30, 40), &zone);
   set.Canonicalize();
   ASSERT_EQ(3, list->length());
   ASSERT_EQ(10, list->at(0).from());
@@ -1695,11 +1692,11 @@ TEST(CanonicalizeCharacterSets) {
   ASSERT_EQ(60, list->at(2).to());
 
   list->Rewind(0);
-  list->Add(CharacterRange(30, 40), zone);
-  list->Add(CharacterRange(10, 20), zone);
-  list->Add(CharacterRange(25, 25), zone);
-  list->Add(CharacterRange(100, 100), zone);
-  list->Add(CharacterRange(1, 1), zone);
+  list->Add(CharacterRange(30, 40), &zone);
+  list->Add(CharacterRange(10, 20), &zone);
+  list->Add(CharacterRange(25, 25), &zone);
+  list->Add(CharacterRange(100, 100), &zone);
+  list->Add(CharacterRange(1, 1), &zone);
   set.Canonicalize();
   ASSERT_EQ(5, list->length());
   ASSERT_EQ(1, list->at(0).from());
@@ -1714,9 +1711,9 @@ TEST(CanonicalizeCharacterSets) {
   ASSERT_EQ(100, list->at(4).to());
 
   list->Rewind(0);
-  list->Add(CharacterRange(10, 19), zone);
-  list->Add(CharacterRange(21, 30), zone);
-  list->Add(CharacterRange(20, 20), zone);
+  list->Add(CharacterRange(10, 19), &zone);
+  list->Add(CharacterRange(21, 30), &zone);
+  list->Add(CharacterRange(20, 20), &zone);
   set.Canonicalize();
   ASSERT_EQ(1, list->length());
   ASSERT_EQ(10, list->at(0).from());
@@ -1726,10 +1723,9 @@ TEST(CanonicalizeCharacterSets) {
 
 TEST(CharacterRangeMerge) {
   v8::internal::V8::Initialize(NULL);
-  ZoneScope zone_scope(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT);
-  ZoneList<CharacterRange> l1(4, Isolate::Current()->runtime_zone());
-  ZoneList<CharacterRange> l2(4, Isolate::Current()->runtime_zone());
-  Zone* zone = Isolate::Current()->runtime_zone();
+  Zone zone(Isolate::Current());
+  ZoneList<CharacterRange> l1(4, &zone);
+  ZoneList<CharacterRange> l2(4, &zone);
   // Create all combinations of intersections of ranges, both singletons and
   // longer.
 
@@ -1744,8 +1740,8 @@ TEST(CharacterRangeMerge) {
   //       Y  - outside after
 
   for (int i = 0; i < 5; i++) {
-    l1.Add(CharacterRange::Singleton(offset + 2), zone);
-    l2.Add(CharacterRange::Singleton(offset + i), zone);
+    l1.Add(CharacterRange::Singleton(offset + 2), &zone);
+    l2.Add(CharacterRange::Singleton(offset + i), &zone);
     offset += 6;
   }
 
@@ -1760,8 +1756,8 @@ TEST(CharacterRangeMerge) {
   //        Y  - disjoint after
 
   for (int i = 0; i < 7; i++) {
-    l1.Add(CharacterRange::Range(offset + 2, offset + 4), zone);
-    l2.Add(CharacterRange::Singleton(offset + i), zone);
+    l1.Add(CharacterRange::Range(offset + 2, offset + 4), &zone);
+    l2.Add(CharacterRange::Singleton(offset + i), &zone);
     offset += 8;
   }
 
@@ -1781,35 +1777,35 @@ TEST(CharacterRangeMerge) {
   //     YYYYYYYYYYYY      - containing entirely.
 
   for (int i = 0; i < 9; i++) {
-    l1.Add(CharacterRange::Range(offset + 6, offset + 15), zone);  // Length 8.
-    l2.Add(CharacterRange::Range(offset + 2 * i, offset + 2 * i + 3), zone);
+    l1.Add(CharacterRange::Range(offset + 6, offset + 15), &zone);  // Length 8.
+    l2.Add(CharacterRange::Range(offset + 2 * i, offset + 2 * i + 3), &zone);
     offset += 22;
   }
-  l1.Add(CharacterRange::Range(offset + 6, offset + 15), zone);
-  l2.Add(CharacterRange::Range(offset + 6, offset + 15), zone);
+  l1.Add(CharacterRange::Range(offset + 6, offset + 15), &zone);
+  l2.Add(CharacterRange::Range(offset + 6, offset + 15), &zone);
   offset += 22;
-  l1.Add(CharacterRange::Range(offset + 6, offset + 15), zone);
-  l2.Add(CharacterRange::Range(offset + 4, offset + 17), zone);
+  l1.Add(CharacterRange::Range(offset + 6, offset + 15), &zone);
+  l2.Add(CharacterRange::Range(offset + 4, offset + 17), &zone);
   offset += 22;
 
   // Different kinds of multi-range overlap:
   // XXXXXXXXXXXXXXXXXXXXXX         XXXXXXXXXXXXXXXXXXXXXX
   //   YYYY  Y  YYYY  Y  YYYY  Y  YYYY  Y  YYYY  Y  YYYY  Y
 
-  l1.Add(CharacterRange::Range(offset, offset + 21), zone);
-  l1.Add(CharacterRange::Range(offset + 31, offset + 52), zone);
+  l1.Add(CharacterRange::Range(offset, offset + 21), &zone);
+  l1.Add(CharacterRange::Range(offset + 31, offset + 52), &zone);
   for (int i = 0; i < 6; i++) {
-    l2.Add(CharacterRange::Range(offset + 2, offset + 5), zone);
-    l2.Add(CharacterRange::Singleton(offset + 8), zone);
+    l2.Add(CharacterRange::Range(offset + 2, offset + 5), &zone);
+    l2.Add(CharacterRange::Singleton(offset + 8), &zone);
     offset += 9;
   }
 
   ASSERT(CharacterRange::IsCanonical(&l1));
   ASSERT(CharacterRange::IsCanonical(&l2));
 
-  ZoneList<CharacterRange> first_only(4, Isolate::Current()->runtime_zone());
-  ZoneList<CharacterRange> second_only(4, Isolate::Current()->runtime_zone());
-  ZoneList<CharacterRange> both(4, Isolate::Current()->runtime_zone());
+  ZoneList<CharacterRange> first_only(4, &zone);
+  ZoneList<CharacterRange> second_only(4, &zone);
+  ZoneList<CharacterRange> both(4, &zone);
 }
 
 
index 8973d54..f95ff65 100644 (file)
@@ -109,10 +109,10 @@ TEST(ExternalReferenceEncoder) {
            Encode(encoder, Builtins::kArrayCode));
   CHECK_EQ(make_code(v8::internal::RUNTIME_FUNCTION, Runtime::kAbort),
            Encode(encoder, Runtime::kAbort));
-  ExternalReference keyed_load_function_prototype =
-      ExternalReference(isolate->counters()->keyed_load_function_prototype());
-  CHECK_EQ(make_code(STATS_COUNTER, Counters::k_keyed_load_function_prototype),
-           encoder.Encode(keyed_load_function_prototype.address()));
+  ExternalReference total_compile_size =
+      ExternalReference(isolate->counters()->total_compile_size());
+  CHECK_EQ(make_code(STATS_COUNTER, Counters::k_total_compile_size),
+           encoder.Encode(total_compile_size.address()));
   ExternalReference stack_limit_address =
       ExternalReference::address_of_stack_limit(isolate);
   CHECK_EQ(make_code(UNCLASSIFIED, 4),
@@ -147,12 +147,12 @@ TEST(ExternalReferenceDecoder) {
   CHECK_EQ(AddressOf(Runtime::kAbort),
            decoder.Decode(make_code(v8::internal::RUNTIME_FUNCTION,
                                     Runtime::kAbort)));
-  ExternalReference keyed_load_function =
-      ExternalReference(isolate->counters()->keyed_load_function_prototype());
-  CHECK_EQ(keyed_load_function.address(),
+  ExternalReference total_compile_size =
+      ExternalReference(isolate->counters()->total_compile_size());
+  CHECK_EQ(total_compile_size.address(),
            decoder.Decode(
                make_code(STATS_COUNTER,
-                         Counters::k_keyed_load_function_prototype)));
+                         Counters::k_total_compile_size)));
   CHECK_EQ(ExternalReference::address_of_stack_limit(isolate).address(),
            decoder.Decode(make_code(UNCLASSIFIED, 4)));
   CHECK_EQ(ExternalReference::address_of_real_stack_limit(isolate).address(),
@@ -195,7 +195,8 @@ class FileByteSink : public SnapshotByteSink {
       int data_space_used,
       int code_space_used,
       int map_space_used,
-      int cell_space_used);
+      int cell_space_used,
+      int property_cell_space_used);
 
  private:
   FILE* fp_;
@@ -209,7 +210,8 @@ void FileByteSink::WriteSpaceUsed(
       int data_space_used,
       int code_space_used,
       int map_space_used,
-      int cell_space_used) {
+      int cell_space_used,
+      int property_cell_space_used) {
   int file_name_length = StrLength(file_name_) + 10;
   Vector<char> name = Vector<char>::New(file_name_length + 1);
   OS::SNPrintF(name, "%s.size", file_name_);
@@ -221,6 +223,7 @@ void FileByteSink::WriteSpaceUsed(
   fprintf(fp, "code %d\n", code_space_used);
   fprintf(fp, "map %d\n", map_space_used);
   fprintf(fp, "cell %d\n", cell_space_used);
+  fprintf(fp, "property cell %d\n", property_cell_space_used);
   fclose(fp);
 }
 
@@ -236,7 +239,8 @@ static bool WriteToFile(const char* snapshot_file) {
       ser.CurrentAllocationAddress(OLD_DATA_SPACE),
       ser.CurrentAllocationAddress(CODE_SPACE),
       ser.CurrentAllocationAddress(MAP_SPACE),
-      ser.CurrentAllocationAddress(CELL_SPACE));
+      ser.CurrentAllocationAddress(CELL_SPACE),
+      ser.CurrentAllocationAddress(PROPERTY_CELL_SPACE));
 
   return true;
 }
@@ -425,7 +429,8 @@ TEST(PartialSerialization) {
         p_ser.CurrentAllocationAddress(OLD_DATA_SPACE),
         p_ser.CurrentAllocationAddress(CODE_SPACE),
         p_ser.CurrentAllocationAddress(MAP_SPACE),
-        p_ser.CurrentAllocationAddress(CELL_SPACE));
+        p_ser.CurrentAllocationAddress(CELL_SPACE),
+        p_ser.CurrentAllocationAddress(PROPERTY_CELL_SPACE));
 
     startup_sink.WriteSpaceUsed(
         startup_serializer.CurrentAllocationAddress(NEW_SPACE),
@@ -433,7 +438,8 @@ TEST(PartialSerialization) {
         startup_serializer.CurrentAllocationAddress(OLD_DATA_SPACE),
         startup_serializer.CurrentAllocationAddress(CODE_SPACE),
         startup_serializer.CurrentAllocationAddress(MAP_SPACE),
-        startup_serializer.CurrentAllocationAddress(CELL_SPACE));
+        startup_serializer.CurrentAllocationAddress(CELL_SPACE),
+        startup_serializer.CurrentAllocationAddress(PROPERTY_CELL_SPACE));
     startup_name.Dispose();
   }
 }
@@ -446,7 +452,8 @@ static void ReserveSpaceForSnapshot(Deserializer* deserializer,
   OS::SNPrintF(name, "%s.size", file_name);
   FILE* fp = OS::FOpen(name.start(), "r");
   name.Dispose();
-  int new_size, pointer_size, data_size, code_size, map_size, cell_size;
+  int new_size, pointer_size, data_size, code_size, map_size, cell_size,
+      property_cell_size;
 #ifdef _MSC_VER
   // Avoid warning about unsafe fscanf from MSVC.
   // Please note that this is only fine if %c and %s are not being used.
@@ -458,6 +465,7 @@ static void ReserveSpaceForSnapshot(Deserializer* deserializer,
   CHECK_EQ(1, fscanf(fp, "code %d\n", &code_size));
   CHECK_EQ(1, fscanf(fp, "map %d\n", &map_size));
   CHECK_EQ(1, fscanf(fp, "cell %d\n", &cell_size));
+  CHECK_EQ(1, fscanf(fp, "property cell %d\n", &property_cell_size));
 #ifdef _MSC_VER
 #undef fscanf
 #endif
@@ -468,6 +476,7 @@ static void ReserveSpaceForSnapshot(Deserializer* deserializer,
   deserializer->set_reservation(CODE_SPACE, code_size);
   deserializer->set_reservation(MAP_SPACE, map_size);
   deserializer->set_reservation(CELL_SPACE, cell_size);
+  deserializer->set_reservation(PROPERTY_CELL_SPACE, property_cell_size);
 }
 
 
@@ -547,7 +556,7 @@ TEST(ContextSerialization) {
       v8::Local<v8::Context>::New(v8_isolate, env)->Exit();
     }
 
-    Object* raw_context = *(v8::Utils::OpenHandle(*env));
+    i::Object* raw_context = *v8::Utils::OpenPersistent(env);
 
     env.Dispose(v8_isolate);
 
@@ -566,7 +575,8 @@ TEST(ContextSerialization) {
         p_ser.CurrentAllocationAddress(OLD_DATA_SPACE),
         p_ser.CurrentAllocationAddress(CODE_SPACE),
         p_ser.CurrentAllocationAddress(MAP_SPACE),
-        p_ser.CurrentAllocationAddress(CELL_SPACE));
+        p_ser.CurrentAllocationAddress(CELL_SPACE),
+        p_ser.CurrentAllocationAddress(PROPERTY_CELL_SPACE));
 
     startup_sink.WriteSpaceUsed(
         startup_serializer.CurrentAllocationAddress(NEW_SPACE),
@@ -574,7 +584,8 @@ TEST(ContextSerialization) {
         startup_serializer.CurrentAllocationAddress(OLD_DATA_SPACE),
         startup_serializer.CurrentAllocationAddress(CODE_SPACE),
         startup_serializer.CurrentAllocationAddress(MAP_SPACE),
-        startup_serializer.CurrentAllocationAddress(CELL_SPACE));
+        startup_serializer.CurrentAllocationAddress(CELL_SPACE),
+        startup_serializer.CurrentAllocationAddress(PROPERTY_CELL_SPACE));
     startup_name.Dispose();
   }
 }
index 12d71e9..310d93c 100644 (file)
@@ -133,12 +133,12 @@ class AsciiResource: public v8::String::ExternalAsciiStringResource,
 static void InitializeBuildingBlocks(Handle<String>* building_blocks,
                                      int bb_length,
                                      bool long_blocks,
-                                     RandomNumberGenerator* rng) {
+                                     RandomNumberGenerator* rng,
+                                     Zone* zone) {
   // A list of pointers that we don't have any interest in cleaning up.
   // If they are reachable from a root then leak detection won't complain.
   Isolate* isolate = Isolate::Current();
   Factory* factory = isolate->factory();
-  Zone* zone = isolate->runtime_zone();
   for (int i = 0; i < bb_length; i++) {
     int len = rng->next(16);
     int slice_head_chars = 0;
@@ -263,7 +263,7 @@ void ConsStringStats::VerifyEqual(const ConsStringStats& that) const {
 class ConsStringGenerationData {
  public:
   static const int kNumberOfBuildingBlocks = 256;
-  explicit ConsStringGenerationData(bool long_blocks);
+  ConsStringGenerationData(bool long_blocks, Zone* zone);
   void Reset();
   inline Handle<String> block(int offset);
   inline Handle<String> block(uint32_t offset);
@@ -285,10 +285,11 @@ class ConsStringGenerationData {
 };
 
 
-ConsStringGenerationData::ConsStringGenerationData(bool long_blocks) {
+ConsStringGenerationData::ConsStringGenerationData(bool long_blocks,
+                                                   Zone* zone) {
   rng_.init();
   InitializeBuildingBlocks(
-      building_blocks_, kNumberOfBuildingBlocks, long_blocks, &rng_);
+      building_blocks_, kNumberOfBuildingBlocks, long_blocks, &rng_, zone);
   empty_string_ = Isolate::Current()->heap()->empty_string();
   Reset();
 }
@@ -570,8 +571,8 @@ TEST(Traverse) {
   printf("TestTraverse\n");
   CcTest::InitializeVM();
   v8::HandleScope scope(CcTest::isolate());
-  ZoneScope zone(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT);
-  ConsStringGenerationData data(false);
+  Zone zone(Isolate::Current());
+  ConsStringGenerationData data(false, &zone);
   Handle<String> flat = ConstructBalanced(&data);
   FlattenString(flat);
   Handle<String> left_asymmetric = ConstructLeft(&data, DEEP_DEPTH);
@@ -660,8 +661,8 @@ void TestStringCharacterStream(BuildString build, int test_cases) {
   CcTest::InitializeVM();
   Isolate* isolate = Isolate::Current();
   HandleScope outer_scope(isolate);
-  ZoneScope zone(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT);
-  ConsStringGenerationData data(true);
+  Zone zone(isolate);
+  ConsStringGenerationData data(true, &zone);
   for (int i = 0; i < test_cases; i++) {
     printf("%d\n", i);
     HandleScope inner_scope(isolate);
@@ -929,11 +930,11 @@ TEST(Utf8Conversion) {
 
 
 TEST(ExternalShortStringAdd) {
-  ZoneScope zonescope(Isolate::Current()->runtime_zone(), DELETE_ON_EXIT);
+  Isolate* isolate = Isolate::Current();
+  Zone zone(isolate);
 
   CcTest::InitializeVM();
   v8::HandleScope handle_scope(CcTest::isolate());
-  Zone* zone = Isolate::Current()->runtime_zone();
 
   // Make sure we cover all always-flat lengths and at least one above.
   static const int kMaxLength = 20;
@@ -947,25 +948,25 @@ TEST(ExternalShortStringAdd) {
 
   // Generate short ascii and non-ascii external strings.
   for (int i = 0; i <= kMaxLength; i++) {
-    char* ascii = zone->NewArray<char>(i + 1);
+    char* ascii = zone.NewArray<char>(i + 1);
     for (int j = 0; j < i; j++) {
       ascii[j] = 'a';
     }
     // Terminating '\0' is left out on purpose. It is not required for external
     // string data.
     AsciiResource* ascii_resource =
-        new(zone) AsciiResource(Vector<const char>(ascii, i));
+        new(&zone) AsciiResource(Vector<const char>(ascii, i));
     v8::Local<v8::String> ascii_external_string =
         v8::String::NewExternal(ascii_resource);
 
     ascii_external_strings->Set(v8::Integer::New(i), ascii_external_string);
-    uc16* non_ascii = zone->NewArray<uc16>(i + 1);
+    uc16* non_ascii = zone.NewArray<uc16>(i + 1);
     for (int j = 0; j < i; j++) {
       non_ascii[j] = 0x1234;
     }
     // Terminating '\0' is left out on purpose. It is not required for external
     // string data.
-    Resource* resource = new(zone) Resource(Vector<const uc16>(non_ascii, i));
+    Resource* resource = new(&zone) Resource(Vector<const uc16>(non_ascii, i));
     v8::Local<v8::String> non_ascii_external_string =
       v8::String::NewExternal(resource);
     non_ascii_external_strings->Set(v8::Integer::New(i),
@@ -1021,7 +1022,7 @@ TEST(CachedHashOverflow) {
   // values didn't fit in the hash field.
   // See http://code.google.com/p/v8/issues/detail?id=728
   Isolate* isolate = Isolate::Current();
-  ZoneScope zone(isolate->runtime_zone(), DELETE_ON_EXIT);
+  Zone zone(isolate);
 
   CcTest::InitializeVM();
   v8::HandleScope handle_scope(CcTest::isolate());
index 524a564..50be501 100644 (file)
 v8::internal::Semaphore* semaphore = NULL;
 
 
-v8::Handle<v8::Value> Signal(const v8::Arguments& args) {
+void Signal(const v8::FunctionCallbackInfo<v8::Value>& args) {
   semaphore->Signal();
-  return v8::Undefined();
 }
 
 
-v8::Handle<v8::Value> TerminateCurrentThread(const v8::Arguments& args) {
+void TerminateCurrentThread(const v8::FunctionCallbackInfo<v8::Value>& args) {
   CHECK(!v8::V8::IsExecutionTerminating());
   v8::V8::TerminateExecution();
-  return v8::Undefined();
 }
 
 
-v8::Handle<v8::Value> Fail(const v8::Arguments& args) {
+void Fail(const v8::FunctionCallbackInfo<v8::Value>& args) {
   CHECK(false);
-  return v8::Undefined();
 }
 
 
-v8::Handle<v8::Value> Loop(const v8::Arguments& args) {
+void Loop(const v8::FunctionCallbackInfo<v8::Value>& args) {
   CHECK(!v8::V8::IsExecutionTerminating());
   v8::Handle<v8::String> source =
       v8::String::New("try { doloop(); fail(); } catch(e) { fail(); }");
   v8::Handle<v8::Value> result = v8::Script::Compile(source)->Run();
   CHECK(result.IsEmpty());
   CHECK(v8::V8::IsExecutionTerminating());
-  return v8::Undefined();
 }
 
 
-v8::Handle<v8::Value> DoLoop(const v8::Arguments& args) {
+void DoLoop(const v8::FunctionCallbackInfo<v8::Value>& args) {
   v8::TryCatch try_catch;
   CHECK(!v8::V8::IsExecutionTerminating());
   v8::Script::Compile(v8::String::New("function f() {"
@@ -84,11 +80,10 @@ v8::Handle<v8::Value> DoLoop(const v8::Arguments& args) {
   CHECK(try_catch.Message().IsEmpty());
   CHECK(!try_catch.CanContinue());
   CHECK(v8::V8::IsExecutionTerminating());
-  return v8::Undefined();
 }
 
 
-v8::Handle<v8::Value> DoLoopNoCall(const v8::Arguments& args) {
+void DoLoopNoCall(const v8::FunctionCallbackInfo<v8::Value>& args) {
   v8::TryCatch try_catch;
   CHECK(!v8::V8::IsExecutionTerminating());
   v8::Script::Compile(v8::String::New("var term = true;"
@@ -101,13 +96,12 @@ v8::Handle<v8::Value> DoLoopNoCall(const v8::Arguments& args) {
   CHECK(try_catch.Message().IsEmpty());
   CHECK(!try_catch.CanContinue());
   CHECK(v8::V8::IsExecutionTerminating());
-  return v8::Undefined();
 }
 
 
 v8::Handle<v8::ObjectTemplate> CreateGlobalTemplate(
-    v8::InvocationCallback terminate,
-    v8::InvocationCallback doloop) {
+    v8::FunctionCallback terminate,
+    v8::FunctionCallback doloop) {
   v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New();
   global->Set(v8::String::New("terminate"),
               v8::FunctionTemplate::New(terminate));
@@ -268,19 +262,19 @@ TEST(TerminateMultipleV8ThreadsDefaultIsolate) {
 int call_count = 0;
 
 
-v8::Handle<v8::Value> TerminateOrReturnObject(const v8::Arguments& args) {
+void TerminateOrReturnObject(const v8::FunctionCallbackInfo<v8::Value>& args) {
   if (++call_count == 10) {
     CHECK(!v8::V8::IsExecutionTerminating());
     v8::V8::TerminateExecution();
-    return v8::Undefined();
+    return;
   }
   v8::Local<v8::Object> result = v8::Object::New();
   result->Set(v8::String::New("x"), v8::Integer::New(42));
-  return result;
+  args.GetReturnValue().Set(result);
 }
 
 
-v8::Handle<v8::Value> LoopGetProperty(const v8::Arguments& args) {
+void LoopGetProperty(const v8::FunctionCallbackInfo<v8::Value>& args) {
   v8::TryCatch try_catch;
   CHECK(!v8::V8::IsExecutionTerminating());
   v8::Script::Compile(v8::String::New("function f() {"
@@ -299,7 +293,6 @@ v8::Handle<v8::Value> LoopGetProperty(const v8::Arguments& args) {
   CHECK(try_catch.Message().IsEmpty());
   CHECK(!try_catch.CanContinue());
   CHECK(v8::V8::IsExecutionTerminating());
-  return v8::Undefined();
 }
 
 
@@ -329,7 +322,7 @@ TEST(TerminateLoadICException) {
   v8::Script::Compile(source)->Run();
 }
 
-v8::Handle<v8::Value> ReenterAfterTermination(const v8::Arguments& args) {
+void ReenterAfterTermination(const v8::FunctionCallbackInfo<v8::Value>& args) {
   v8::TryCatch try_catch;
   CHECK(!v8::V8::IsExecutionTerminating());
   v8::Script::Compile(v8::String::New("function f() {"
@@ -351,7 +344,6 @@ v8::Handle<v8::Value> ReenterAfterTermination(const v8::Arguments& args) {
   CHECK(!try_catch.CanContinue());
   CHECK(v8::V8::IsExecutionTerminating());
   v8::Script::Compile(v8::String::New("function f() { fail(); } f()"))->Run();
-  return v8::Undefined();
 }
 
 // Test that reentry into V8 while the termination exception is still pending
@@ -373,7 +365,7 @@ TEST(TerminateAndReenterFromThreadItself) {
                                             "f()"))->Run()->IsTrue());
 }
 
-v8::Handle<v8::Value> DoLoopCancelTerminate(const v8::Arguments& args) {
+void DoLoopCancelTerminate(const v8::FunctionCallbackInfo<v8::Value>& args) {
   v8::TryCatch try_catch;
   CHECK(!v8::V8::IsExecutionTerminating());
   v8::Script::Compile(v8::String::New("var term = true;"
@@ -390,7 +382,6 @@ v8::Handle<v8::Value> DoLoopCancelTerminate(const v8::Arguments& args) {
   CHECK(try_catch.HasTerminated());
   v8::V8::CancelTerminateExecution(v8::Isolate::GetCurrent());
   CHECK(!v8::V8::IsExecutionTerminating());
-  return v8::Undefined();
 }
 
 // Test that a single thread of JavaScript execution can terminate
index 3cdfdad..78abeba 100644 (file)
@@ -41,6 +41,62 @@ static Map* AsClass(Type* type) { return Map::cast(type); }
 static Object* AsConstant(Type* type) { return Box::cast(type)->value(); }
 static FixedArray* AsUnion(Type* type) { return FixedArray::cast(type); }
 
+
+static void CheckEqual(Handle<Type> type1, Handle<Type> type2) {
+  CHECK_EQ(IsBitset(*type1), IsBitset(*type2));
+  CHECK_EQ(IsClass(*type1), IsClass(*type2));
+  CHECK_EQ(IsConstant(*type1), IsConstant(*type2));
+  CHECK_EQ(IsUnion(*type1), IsUnion(*type2));
+  CHECK_EQ(type1->NumClasses(), type2->NumClasses());
+  CHECK_EQ(type1->NumConstants(), type2->NumConstants());
+  if (IsBitset(*type1)) {
+    CHECK_EQ(AsBitset(*type1), AsBitset(*type2));
+  } else if (IsClass(*type1)) {
+    CHECK_EQ(AsClass(*type1), AsClass(*type2));
+  } else if (IsConstant(*type1)) {
+    CHECK_EQ(AsConstant(*type1), AsConstant(*type2));
+  } else if (IsUnion(*type1)) {
+    CHECK_EQ(AsUnion(*type1)->length(), AsUnion(*type2)->length());
+  }
+  CHECK(type1->Is(type2));
+  CHECK(type2->Is(type1));
+}
+
+static void CheckSub(Handle<Type> type1, Handle<Type> type2) {
+  CHECK(type1->Is(type2));
+  CHECK(!type2->Is(type1));
+  if (IsBitset(*type1) && IsBitset(*type2)) {
+    CHECK_NE(AsBitset(*type1), AsBitset(*type2));
+  }
+}
+
+static void CheckUnordered(Handle<Type> type1, Handle<Type> type2) {
+  CHECK(!type1->Is(type2));
+  CHECK(!type2->Is(type1));
+  if (IsBitset(*type1) && IsBitset(*type2)) {
+    CHECK_NE(AsBitset(*type1), AsBitset(*type2));
+  }
+}
+
+static void CheckOverlap(Handle<Type> type1, Handle<Type> type2) {
+  CHECK(type1->Maybe(type2));
+  CHECK(type2->Maybe(type1));
+  if (IsBitset(*type1) && IsBitset(*type2)) {
+    CHECK_NE(0, AsBitset(*type1) & AsBitset(*type2));
+  }
+}
+
+static void CheckDisjoint(Handle<Type> type1, Handle<Type> type2) {
+  CHECK(!type1->Is(type2));
+  CHECK(!type2->Is(type1));
+  CHECK(!type1->Maybe(type2));
+  CHECK(!type2->Maybe(type1));
+  if (IsBitset(*type1) && IsBitset(*type2)) {
+    CHECK_EQ(0, AsBitset(*type1) & AsBitset(*type2));
+  }
+}
+
+
 class HandlifiedTypes {
  public:
   explicit HandlifiedTypes(Isolate* isolate) :
@@ -51,7 +107,8 @@ class HandlifiedTypes {
       Null(Type::Null(), isolate),
       Undefined(Type::Undefined(), isolate),
       Number(Type::Number(), isolate),
-      Smi(Type::Smi(), isolate),
+      Integer31(Type::Smi(), isolate),
+      Integer32(Type::Signed32(), isolate),
       Double(Type::Double(), isolate),
       Name(Type::Name(), isolate),
       UniqueName(Type::UniqueName(), isolate),
@@ -72,10 +129,11 @@ class HandlifiedTypes {
     array = isolate->factory()->NewJSArray(20);
     ObjectClass = handle(Type::Class(object_map), isolate);
     ArrayClass = handle(Type::Class(array_map), isolate);
-    SmiConstant = handle(Type::Constant(smi, isolate), isolate);
+    Integer31Constant = handle(Type::Constant(smi, isolate), isolate);
     ObjectConstant1 = handle(Type::Constant(object1), isolate);
     ObjectConstant2 = handle(Type::Constant(object2), isolate);
-    ArrayConstant = handle(Type::Constant(array), isolate);
+    ArrayConstant1 = handle(Type::Constant(array), isolate);
+    ArrayConstant2 = handle(Type::Constant(array), isolate);
   }
 
   Handle<Type> None;
@@ -85,7 +143,8 @@ class HandlifiedTypes {
   Handle<Type> Null;
   Handle<Type> Undefined;
   Handle<Type> Number;
-  Handle<Type> Smi;
+  Handle<Type> Integer31;
+  Handle<Type> Integer32;
   Handle<Type> Double;
   Handle<Type> Name;
   Handle<Type> UniqueName;
@@ -101,10 +160,11 @@ class HandlifiedTypes {
   Handle<Type> ObjectClass;
   Handle<Type> ArrayClass;
 
-  Handle<Type> SmiConstant;
+  Handle<Type> Integer31Constant;
   Handle<Type> ObjectConstant1;
   Handle<Type> ObjectConstant2;
-  Handle<Type> ArrayConstant;
+  Handle<Type> ArrayConstant1;
+  Handle<Type> ArrayConstant2;
 
   Handle<Map> object_map;
   Handle<Map> array_map;
@@ -117,6 +177,9 @@ class HandlifiedTypes {
   Handle<Type> Union(Handle<Type> type1, Handle<Type> type2) {
     return handle(Type::Union(type1, type2), isolate_);
   }
+  Handle<Type> Intersect(Handle<Type> type1, Handle<Type> type2) {
+    return handle(Type::Intersect(type1, type2), isolate_);
+  }
 
  private:
   Isolate* isolate_;
@@ -168,34 +231,20 @@ TEST(Constant) {
   HandleScope scope(isolate);
   HandlifiedTypes T(isolate);
 
-  CHECK(IsConstant(*T.SmiConstant));
+  CHECK(IsConstant(*T.Integer31Constant));
   CHECK(IsConstant(*T.ObjectConstant1));
   CHECK(IsConstant(*T.ObjectConstant2));
-  CHECK(IsConstant(*T.ArrayConstant));
+  CHECK(IsConstant(*T.ArrayConstant1));
+  CHECK(IsConstant(*T.ArrayConstant2));
 
-  CHECK(*T.smi == AsConstant(*T.SmiConstant));
+  CHECK(*T.smi == AsConstant(*T.Integer31Constant));
   CHECK(*T.object1 == AsConstant(*T.ObjectConstant1));
   CHECK(*T.object2 == AsConstant(*T.ObjectConstant2));
   CHECK(*T.object1 != AsConstant(*T.ObjectConstant2));
-  CHECK(*T.array == AsConstant(*T.ArrayConstant));
-}
-
-
-static void CheckSub(Handle<Type> type1, Handle<Type> type2) {
-  CHECK(type1->Is(type2));
-  CHECK(!type2->Is(type1));
-  if (IsBitset(*type1) && IsBitset(*type2)) {
-    CHECK_NE(AsBitset(*type1), AsBitset(*type2));
-  }
+  CHECK(*T.array == AsConstant(*T.ArrayConstant1));
+  CHECK(*T.array == AsConstant(*T.ArrayConstant2));
 }
 
-static void CheckUnordered(Handle<Type> type1, Handle<Type> type2) {
-  CHECK(!type1->Is(type2));
-  CHECK(!type2->Is(type1));
-  if (IsBitset(*type1) && IsBitset(*type2)) {
-    CHECK_NE(AsBitset(*type1), AsBitset(*type2));
-  }
-}
 
 TEST(Is) {
   CcTest::InitializeVM();
@@ -210,6 +259,7 @@ TEST(Is) {
 
   CHECK(T.ObjectClass->Is(T.ObjectClass));
   CHECK(T.ObjectConstant1->Is(T.ObjectConstant1));
+  CHECK(T.ArrayConstant1->Is(T.ArrayConstant2));
 
   // Symmetry and Transitivity
   CheckSub(T.None, T.Number);
@@ -224,9 +274,12 @@ TEST(Is) {
   CheckUnordered(T.Boolean, T.Undefined);
 
   CheckSub(T.Number, T.Any);
-  CheckSub(T.Smi, T.Number);
+  CheckSub(T.Integer31, T.Number);
+  CheckSub(T.Integer32, T.Number);
   CheckSub(T.Double, T.Number);
-  CheckUnordered(T.Smi, T.Double);
+  CheckSub(T.Integer31, T.Integer32);
+  CheckUnordered(T.Integer31, T.Double);
+  CheckUnordered(T.Integer32, T.Double);
 
   CheckSub(T.Name, T.Any);
   CheckSub(T.UniqueName, T.Any);
@@ -255,41 +308,24 @@ TEST(Is) {
   CheckSub(T.ArrayClass, T.Object);
   CheckUnordered(T.ObjectClass, T.ArrayClass);
 
-  CheckSub(T.SmiConstant, T.Smi);
-  CheckSub(T.SmiConstant, T.Number);
+  CheckSub(T.Integer31Constant, T.Integer31);
+  CheckSub(T.Integer31Constant, T.Integer32);
+  CheckSub(T.Integer31Constant, T.Number);
   CheckSub(T.ObjectConstant1, T.Object);
   CheckSub(T.ObjectConstant2, T.Object);
-  CheckSub(T.ArrayConstant, T.Object);
-  CheckSub(T.ArrayConstant, T.Array);
+  CheckSub(T.ArrayConstant1, T.Object);
+  CheckSub(T.ArrayConstant1, T.Array);
   CheckUnordered(T.ObjectConstant1, T.ObjectConstant2);
-  CheckUnordered(T.ObjectConstant1, T.ArrayConstant);
+  CheckUnordered(T.ObjectConstant1, T.ArrayConstant1);
 
   CheckUnordered(T.ObjectConstant1, T.ObjectClass);
   CheckUnordered(T.ObjectConstant2, T.ObjectClass);
   CheckUnordered(T.ObjectConstant1, T.ArrayClass);
   CheckUnordered(T.ObjectConstant2, T.ArrayClass);
-  CheckUnordered(T.ArrayConstant, T.ObjectClass);
+  CheckUnordered(T.ArrayConstant1, T.ObjectClass);
 }
 
 
-static void CheckOverlap(Handle<Type> type1, Handle<Type> type2) {
-  CHECK(type1->Maybe(type2));
-  CHECK(type2->Maybe(type1));
-  if (IsBitset(*type1) && IsBitset(*type2)) {
-    CHECK_NE(0, AsBitset(*type1) & AsBitset(*type2));
-  }
-}
-
-static void CheckDisjoint(Handle<Type> type1, Handle<Type> type2) {
-  CHECK(!type1->Is(type2));
-  CHECK(!type2->Is(type1));
-  CHECK(!type1->Maybe(type2));
-  CHECK(!type2->Maybe(type1));
-  if (IsBitset(*type1) && IsBitset(*type2)) {
-    CHECK_EQ(0, AsBitset(*type1) & AsBitset(*type2));
-  }
-}
-
 TEST(Maybe) {
   CcTest::InitializeVM();
   Isolate* isolate = Isolate::Current();
@@ -308,9 +344,9 @@ TEST(Maybe) {
   CheckDisjoint(T.Boolean, T.Undefined);
 
   CheckOverlap(T.Number, T.Any);
-  CheckOverlap(T.Smi, T.Number);
+  CheckOverlap(T.Integer31, T.Number);
   CheckOverlap(T.Double, T.Number);
-  CheckDisjoint(T.Smi, T.Double);
+  CheckDisjoint(T.Integer32, T.Double);
 
   CheckOverlap(T.Name, T.Any);
   CheckOverlap(T.UniqueName, T.Any);
@@ -340,43 +376,27 @@ TEST(Maybe) {
   CheckOverlap(T.ArrayClass, T.ArrayClass);
   CheckDisjoint(T.ObjectClass, T.ArrayClass);
 
-  CheckOverlap(T.SmiConstant, T.Smi);
-  CheckOverlap(T.SmiConstant, T.Number);
-  CheckDisjoint(T.SmiConstant, T.Double);
+  CheckOverlap(T.Integer31Constant, T.Integer31);
+  CheckOverlap(T.Integer31Constant, T.Integer32);
+  CheckOverlap(T.Integer31Constant, T.Number);
+  CheckDisjoint(T.Integer31Constant, T.Double);
   CheckOverlap(T.ObjectConstant1, T.Object);
   CheckOverlap(T.ObjectConstant2, T.Object);
-  CheckOverlap(T.ArrayConstant, T.Object);
-  CheckOverlap(T.ArrayConstant, T.Array);
+  CheckOverlap(T.ArrayConstant1, T.Object);
+  CheckOverlap(T.ArrayConstant1, T.Array);
+  CheckOverlap(T.ArrayConstant1, T.ArrayConstant2);
   CheckOverlap(T.ObjectConstant1, T.ObjectConstant1);
   CheckDisjoint(T.ObjectConstant1, T.ObjectConstant2);
-  CheckDisjoint(T.ObjectConstant1, T.ArrayConstant);
+  CheckDisjoint(T.ObjectConstant1, T.ArrayConstant1);
 
   CheckDisjoint(T.ObjectConstant1, T.ObjectClass);
   CheckDisjoint(T.ObjectConstant2, T.ObjectClass);
   CheckDisjoint(T.ObjectConstant1, T.ArrayClass);
   CheckDisjoint(T.ObjectConstant2, T.ArrayClass);
-  CheckDisjoint(T.ArrayConstant, T.ObjectClass);
+  CheckDisjoint(T.ArrayConstant1, T.ObjectClass);
 }
 
 
-static void CheckEqual(Handle<Type> type1, Handle<Type> type2) {
-  CHECK_EQ(IsBitset(*type1), IsBitset(*type2));
-  CHECK_EQ(IsClass(*type1), IsClass(*type2));
-  CHECK_EQ(IsConstant(*type1), IsConstant(*type2));
-  CHECK_EQ(IsUnion(*type1), IsUnion(*type2));
-  if (IsBitset(*type1)) {
-    CHECK_EQ(AsBitset(*type1), AsBitset(*type2));
-  } else if (IsClass(*type1)) {
-    CHECK_EQ(AsClass(*type1), AsClass(*type2));
-  } else if (IsConstant(*type1)) {
-    CHECK_EQ(AsConstant(*type1), AsConstant(*type2));
-  } else if (IsUnion(*type1)) {
-    CHECK_EQ(AsUnion(*type1)->length(), AsUnion(*type2)->length());
-  }
-  CHECK(type1->Is(type2));
-  CHECK(type2->Is(type1));
-}
-
 TEST(Union) {
   CcTest::InitializeVM();
   Isolate* isolate = Isolate::Current();
@@ -407,17 +427,22 @@ TEST(Union) {
 
   // Constant-constant
   CHECK(IsConstant(Type::Union(T.ObjectConstant1, T.ObjectConstant1)));
+  CHECK(IsConstant(Type::Union(T.ArrayConstant1, T.ArrayConstant1)));
   CHECK(IsUnion(Type::Union(T.ObjectConstant1, T.ObjectConstant2)));
 
   CheckEqual(T.Union(T.ObjectConstant1, T.ObjectConstant1), T.ObjectConstant1);
+  CheckEqual(T.Union(T.ArrayConstant1, T.ArrayConstant1), T.ArrayConstant1);
+  CheckEqual(T.Union(T.ArrayConstant1, T.ArrayConstant1), T.ArrayConstant2);
   CheckSub(T.ObjectConstant1, T.Union(T.ObjectConstant1, T.ObjectConstant2));
   CheckSub(T.ObjectConstant2, T.Union(T.ObjectConstant1, T.ObjectConstant2));
+  CheckSub(T.ArrayConstant2, T.Union(T.ArrayConstant1, T.ObjectConstant2));
   CheckSub(T.Union(T.ObjectConstant1, T.ObjectConstant2), T.Object);
   CheckUnordered(T.Union(T.ObjectConstant1, T.ObjectConstant2), T.ObjectClass);
-  CheckUnordered(T.Union(T.ObjectConstant1, T.ArrayConstant), T.Array);
-  CheckOverlap(T.Union(T.ObjectConstant1, T.ArrayConstant), T.Array);
-  CheckDisjoint(T.Union(T.ObjectConstant1, T.ArrayConstant), T.Number);
-  CheckDisjoint(T.Union(T.ObjectConstant1, T.ArrayConstant), T.ObjectClass);
+  CheckUnordered(T.Union(T.ObjectConstant1, T.ArrayConstant1), T.Array);
+  CheckOverlap(T.Union(T.ObjectConstant1, T.ArrayConstant1), T.Array);
+  CheckOverlap(T.Union(T.ObjectConstant1, T.ArrayConstant1), T.ArrayConstant2);
+  CheckDisjoint(T.Union(T.ObjectConstant1, T.ArrayConstant1), T.Number);
+  CheckDisjoint(T.Union(T.ObjectConstant1, T.ArrayConstant1), T.ObjectClass);
 
   // Bitset-class
   CHECK(IsBitset(Type::Union(T.ObjectClass, T.Object)));
@@ -425,21 +450,22 @@ TEST(Union) {
 
   CheckEqual(T.Union(T.ObjectClass, T.Object), T.Object);
   CheckSub(T.Union(T.ObjectClass, T.Number), T.Any);
-  CheckSub(T.Union(T.ObjectClass, T.Smi), T.Union(T.Object, T.Number));
+  CheckSub(T.Union(T.ObjectClass, T.Integer31), T.Union(T.Object, T.Number));
   CheckSub(T.Union(T.ObjectClass, T.Array), T.Object);
   CheckUnordered(T.Union(T.ObjectClass, T.String), T.Array);
   CheckOverlap(T.Union(T.ObjectClass, T.String), T.Object);
   CheckDisjoint(T.Union(T.ObjectClass, T.String), T.Number);
 
   // Bitset-constant
-  CHECK(IsBitset(Type::Union(T.SmiConstant, T.Number)));
+  CHECK(IsBitset(Type::Union(T.Integer31Constant, T.Number)));
   CHECK(IsBitset(Type::Union(T.ObjectConstant1, T.Object)));
   CHECK(IsUnion(Type::Union(T.ObjectConstant2, T.Number)));
 
-  CheckEqual(T.Union(T.SmiConstant, T.Number), T.Number);
+  CheckEqual(T.Union(T.Integer31Constant, T.Number), T.Number);
   CheckEqual(T.Union(T.ObjectConstant1, T.Object), T.Object);
   CheckSub(T.Union(T.ObjectConstant1, T.Number), T.Any);
-  CheckSub(T.Union(T.ObjectConstant1, T.Smi), T.Union(T.Object, T.Number));
+  CheckSub(
+      T.Union(T.ObjectConstant1, T.Integer32), T.Union(T.Object, T.Number));
   CheckSub(T.Union(T.ObjectConstant1, T.Array), T.Object);
   CheckUnordered(T.Union(T.ObjectConstant1, T.String), T.Array);
   CheckOverlap(T.Union(T.ObjectConstant1, T.String), T.Object);
@@ -455,7 +481,7 @@ TEST(Union) {
   CheckUnordered(T.ObjectClass, T.Union(T.ObjectConstant1, T.ArrayClass));
   CheckSub(
       T.Union(T.ObjectConstant1, T.ArrayClass), T.Union(T.Array, T.Object));
-  CheckUnordered(T.Union(T.ObjectConstant1, T.ArrayClass), T.ArrayConstant);
+  CheckUnordered(T.Union(T.ObjectConstant1, T.ArrayClass), T.ArrayConstant1);
   CheckDisjoint(T.Union(T.ObjectConstant1, T.ArrayClass), T.ObjectConstant2);
   CheckDisjoint(T.Union(T.ObjectConstant1, T.ArrayClass), T.ObjectClass);
 
@@ -504,30 +530,177 @@ TEST(Union) {
   CHECK(IsUnion(Type::Union(
       T.ObjectConstant1, T.Union(T.ObjectConstant1, T.ObjectConstant2))));
   CHECK(IsUnion(Type::Union(
-      T.Union(T.ArrayConstant, T.ObjectClass), T.ObjectConstant1)));
+      T.Union(T.ArrayConstant1, T.ObjectClass), T.ObjectConstant1)));
   CHECK(IsUnion(Type::Union(
-      T.Union(T.ArrayConstant, T.ObjectConstant2), T.ObjectConstant1)));
+      T.Union(T.ArrayConstant1, T.ObjectConstant2), T.ObjectConstant1)));
 
   CheckEqual(
       T.Union(T.ObjectConstant1, T.Union(T.ObjectConstant1, T.ObjectConstant2)),
       T.Union(T.ObjectConstant2, T.ObjectConstant1));
   CheckEqual(
-      T.Union(T.Union(T.ArrayConstant, T.ObjectConstant2), T.ObjectConstant1),
-      T.Union(T.ObjectConstant2, T.Union(T.ArrayConstant, T.ObjectConstant1)));
+      T.Union(T.Union(T.ArrayConstant1, T.ObjectConstant2), T.ObjectConstant1),
+      T.Union(T.ObjectConstant2, T.Union(T.ArrayConstant1, T.ObjectConstant1)));
 
   // Union-union
-  CHECK(IsBitset(
-      Type::Union(T.Union(T.Number, T.ArrayClass), T.Union(T.Smi, T.Array))));
+  CHECK(IsBitset(Type::Union(
+      T.Union(T.Number, T.ArrayClass), T.Union(T.Integer32, T.Array))));
+  CHECK(IsUnion(Type::Union(
+      T.Union(T.Number, T.ArrayClass), T.Union(T.ObjectClass, T.ArrayClass))));
 
   CheckEqual(
-      T.Union(T.Union(T.ObjectConstant2, T.ObjectConstant1),
-              T.Union(T.ObjectConstant1, T.ObjectConstant2)),
+      T.Union(
+          T.Union(T.ObjectConstant2, T.ObjectConstant1),
+          T.Union(T.ObjectConstant1, T.ObjectConstant2)),
       T.Union(T.ObjectConstant2, T.ObjectConstant1));
   CheckEqual(
-      T.Union(T.Union(T.ObjectConstant2, T.ArrayConstant),
-              T.Union(T.ObjectConstant1, T.ArrayConstant)),
-      T.Union(T.Union(T.ObjectConstant1, T.ObjectConstant2), T.ArrayConstant));
+      T.Union(
+          T.Union(T.ObjectConstant2, T.ArrayConstant1),
+          T.Union(T.ObjectConstant1, T.ArrayConstant2)),
+      T.Union(T.Union(T.ObjectConstant1, T.ObjectConstant2), T.ArrayConstant1));
   CheckEqual(
-      T.Union(T.Union(T.Number, T.ArrayClass), T.Union(T.Smi, T.Array)),
+      T.Union(T.Union(T.Number, T.ArrayClass), T.Union(T.Integer31, T.Array)),
       T.Union(T.Number, T.Array));
 }
+
+
+TEST(Intersect) {
+  CcTest::InitializeVM();
+  Isolate* isolate = Isolate::Current();
+  HandleScope scope(isolate);
+  HandlifiedTypes T(isolate);
+
+  // Bitset-bitset
+  CHECK(IsBitset(Type::Intersect(T.Object, T.Number)));
+  CHECK(IsBitset(Type::Intersect(T.Object, T.Object)));
+  CHECK(IsBitset(Type::Intersect(T.Any, T.None)));
+
+  CheckEqual(T.Intersect(T.None, T.Number), T.None);
+  CheckEqual(T.Intersect(T.Object, T.Proxy), T.None);
+  CheckEqual(T.Intersect(T.Name, T.String), T.Intersect(T.String, T.Name));
+  CheckEqual(T.Intersect(T.UniqueName, T.String), T.InternalizedString);
+
+  // Class-class
+  CHECK(IsClass(Type::Intersect(T.ObjectClass, T.ObjectClass)));
+  CHECK(IsBitset(Type::Intersect(T.ObjectClass, T.ArrayClass)));
+
+  CheckEqual(T.Intersect(T.ObjectClass, T.ObjectClass), T.ObjectClass);
+  CheckEqual(T.Intersect(T.ObjectClass, T.ArrayClass), T.None);
+
+  // Constant-constant
+  CHECK(IsConstant(Type::Intersect(T.ObjectConstant1, T.ObjectConstant1)));
+  CHECK(IsConstant(Type::Intersect(T.ArrayConstant1, T.ArrayConstant2)));
+  CHECK(IsBitset(Type::Intersect(T.ObjectConstant1, T.ObjectConstant2)));
+
+  CheckEqual(
+      T.Intersect(T.ObjectConstant1, T.ObjectConstant1), T.ObjectConstant1);
+  CheckEqual(
+      T.Intersect(T.ArrayConstant1, T.ArrayConstant2), T.ArrayConstant1);
+  CheckEqual(T.Intersect(T.ObjectConstant1, T.ObjectConstant2), T.None);
+
+  // Bitset-class
+  CHECK(IsClass(Type::Intersect(T.ObjectClass, T.Object)));
+  CHECK(IsBitset(Type::Intersect(T.ObjectClass, T.Number)));
+
+  CheckEqual(T.Intersect(T.ObjectClass, T.Object), T.ObjectClass);
+  CheckEqual(T.Intersect(T.ObjectClass, T.Array), T.None);
+  CheckEqual(T.Intersect(T.ObjectClass, T.Number), T.None);
+
+  // Bitset-constant
+  CHECK(IsBitset(Type::Intersect(T.Integer31, T.Number)));
+  CHECK(IsConstant(Type::Intersect(T.Integer31Constant, T.Number)));
+  CHECK(IsConstant(Type::Intersect(T.ObjectConstant1, T.Object)));
+
+  CheckEqual(T.Intersect(T.Integer31, T.Number), T.Integer31);
+  CheckEqual(T.Intersect(T.Integer31Constant, T.Number), T.Integer31Constant);
+  CheckEqual(T.Intersect(T.ObjectConstant1, T.Object), T.ObjectConstant1);
+
+  // Class-constant
+  CHECK(IsBitset(Type::Intersect(T.ObjectConstant1, T.ObjectClass)));
+  CHECK(IsBitset(Type::Intersect(T.ArrayClass, T.ObjectConstant2)));
+
+  CheckEqual(T.Intersect(T.ObjectConstant1, T.ObjectClass), T.None);
+  CheckEqual(T.Intersect(T.ArrayClass, T.ObjectConstant2), T.None);
+
+  // Bitset-union
+  CHECK(IsUnion(
+      Type::Intersect(T.Object, T.Union(T.ObjectConstant1, T.ObjectClass))));
+  CHECK(IsBitset(
+      Type::Intersect(T.Union(T.ArrayClass, T.ObjectConstant2), T.Number)));
+
+  CheckEqual(
+      T.Intersect(T.Object, T.Union(T.ObjectConstant1, T.ObjectClass)),
+      T.Union(T.ObjectConstant1, T.ObjectClass));
+  CheckEqual(
+      T.Intersect(T.Union(T.ArrayClass, T.ObjectConstant1), T.Number),
+      T.None);
+
+  // Class-union
+  CHECK(IsClass(
+      Type::Intersect(T.Union(T.ArrayClass, T.ObjectConstant2), T.ArrayClass)));
+  CHECK(IsClass(
+      Type::Intersect(T.Union(T.Object, T.Integer31Constant), T.ArrayClass)));
+  CHECK(IsBitset(
+      Type::Intersect(T.Union(T.ObjectClass, T.ArrayConstant1), T.ArrayClass)));
+
+  CheckEqual(
+      T.Intersect(T.ArrayClass, T.Union(T.ObjectConstant2, T.ArrayClass)),
+      T.ArrayClass);
+  CheckEqual(
+      T.Intersect(T.ArrayClass, T.Union(T.Object, T.Integer31Constant)),
+      T.ArrayClass);
+  CheckEqual(
+      T.Intersect(T.Union(T.ObjectClass, T.ArrayConstant1), T.ArrayClass),
+      T.None);
+
+  // Constant-union
+  CHECK(IsConstant(Type::Intersect(
+      T.ObjectConstant1, T.Union(T.ObjectConstant1, T.ObjectConstant2))));
+  CHECK(IsConstant(Type::Intersect(
+      T.Union(T.Number, T.ObjectClass), T.Integer31Constant)));
+  CHECK(IsBitset(Type::Intersect(
+      T.Union(T.ArrayConstant1, T.ObjectClass), T.ObjectConstant1)));
+
+  CheckEqual(
+      T.Intersect(
+          T.ObjectConstant1, T.Union(T.ObjectConstant1, T.ObjectConstant2)),
+      T.ObjectConstant1);
+  CheckEqual(
+      T.Intersect(T.Integer31Constant, T.Union(T.Number, T.ObjectConstant2)),
+      T.Integer31Constant);
+  CheckEqual(
+      T.Intersect(T.Union(T.ArrayConstant1, T.ObjectClass), T.ObjectConstant1),
+      T.None);
+
+  // Union-union
+  CHECK(IsUnion(Type::Intersect(
+      T.Union(T.Number, T.ArrayClass), T.Union(T.Integer32, T.Array))));
+  CHECK(IsBitset(Type::Intersect(
+      T.Union(T.Number, T.ObjectClass), T.Union(T.Integer32, T.Array))));
+
+  CheckEqual(
+      T.Intersect(
+          T.Union(T.Number, T.ArrayClass),
+          T.Union(T.Integer31, T.Array)),
+      T.Union(T.Integer31, T.ArrayClass));
+  CheckEqual(
+      T.Intersect(
+          T.Union(T.Number, T.ObjectClass),
+          T.Union(T.Integer32, T.Array)),
+      T.Integer32);
+  CheckEqual(
+      T.Intersect(
+          T.Union(T.ObjectConstant2, T.ObjectConstant1),
+          T.Union(T.ObjectConstant1, T.ObjectConstant2)),
+      T.Union(T.ObjectConstant2, T.ObjectConstant1));
+  CheckEqual(
+      T.Intersect(
+          T.Union(T.Union(T.ObjectConstant2, T.ObjectConstant1), T.ArrayClass),
+          T.Union(
+              T.ObjectConstant1, T.Union(T.ArrayConstant1, T.ObjectConstant2))),
+      T.Union(T.ObjectConstant2, T.ObjectConstant1));
+  CheckEqual(
+      T.Intersect(
+          T.Union(T.ObjectConstant2, T.ArrayConstant1),
+          T.Union(T.ObjectConstant1, T.ArrayConstant2)),
+      T.ArrayConstant1);
+}
index aef610d..fe1ef04 100644 (file)
@@ -44,7 +44,7 @@ static Isolate* GetIsolateFrom(LocalContext* context) {
 static int CountArrayBuffersInWeakList(Heap* heap) {
   int count = 0;
   for (Object* o = heap->array_buffers_list();
-       o != Smi::FromInt(0);
+       !o->IsUndefined();
        o = JSArrayBuffer::cast(o)->weak_next()) {
     count++;
   }
@@ -54,7 +54,7 @@ static int CountArrayBuffersInWeakList(Heap* heap) {
 
 static bool HasArrayBufferInWeakList(Heap* heap, JSArrayBuffer* ab) {
   for (Object* o = heap->array_buffers_list();
-       o != Smi::FromInt(0);
+       !o->IsUndefined();
        o = JSArrayBuffer::cast(o)->weak_next()) {
     if (ab == o) return true;
   }
@@ -62,22 +62,22 @@ static bool HasArrayBufferInWeakList(Heap* heap, JSArrayBuffer* ab) {
 }
 
 
-static int CountTypedArrays(JSArrayBuffer* array_buffer) {
+static int CountViews(JSArrayBuffer* array_buffer) {
   int count = 0;
-  for (Object* o = array_buffer->weak_first_array();
-       o != Smi::FromInt(0);
-       o = JSTypedArray::cast(o)->weak_next()) {
+  for (Object* o = array_buffer->weak_first_view();
+       !o->IsUndefined();
+       o = JSArrayBufferView::cast(o)->weak_next()) {
     count++;
   }
 
   return count;
 }
 
-static bool HasTypedArrayInWeakList(JSArrayBuffer* array_buffer,
-                                    JSTypedArray* ta) {
-  for (Object* o = array_buffer->weak_first_array();
-       o != Smi::FromInt(0);
-       o = JSTypedArray::cast(o)->weak_next()) {
+static bool HasViewInWeakList(JSArrayBuffer* array_buffer,
+                              JSArrayBufferView* ta) {
+  for (Object* o = array_buffer->weak_first_view();
+       !o->IsUndefined();
+       o = JSArrayBufferView::cast(o)->weak_next()) {
     if (ta == o) return true;
   }
   return false;
@@ -103,8 +103,7 @@ TEST(WeakArrayBuffersFromApi) {
       CHECK(HasArrayBufferInWeakList(isolate->heap(), *iab1));
       CHECK(HasArrayBufferInWeakList(isolate->heap(), *iab2));
     }
-    isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags);
-    isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags);
+    isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
     CHECK_EQ(1, CountArrayBuffersInWeakList(isolate->heap()));
     {
       HandleScope scope2(isolate);
@@ -114,8 +113,7 @@ TEST(WeakArrayBuffersFromApi) {
     }
   }
 
-  isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags);
-  isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags);
+  isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
   CHECK_EQ(0, CountArrayBuffersInWeakList(isolate->heap()));
 }
 
@@ -137,12 +135,12 @@ TEST(WeakArrayBuffersFromScript) {
         CompileRun("var ab1 = new ArrayBuffer(256);"
                    "var ab2 = new ArrayBuffer(256);"
                    "var ab3 = new ArrayBuffer(256);");
-        v8::Handle<v8::ArrayBuffer> ab1(
-            v8::ArrayBuffer::Cast(*CompileRun("ab1")));
-        v8::Handle<v8::ArrayBuffer> ab2(
-            v8::ArrayBuffer::Cast(*CompileRun("ab2")));
-        v8::Handle<v8::ArrayBuffer> ab3(
-            v8::ArrayBuffer::Cast(*CompileRun("ab3")));
+        v8::Handle<v8::ArrayBuffer> ab1 =
+            v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab1"));
+        v8::Handle<v8::ArrayBuffer> ab2 =
+            v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab2"));
+        v8::Handle<v8::ArrayBuffer> ab3 =
+            v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab3"));
 
         CHECK_EQ(3, CountArrayBuffersInWeakList(isolate->heap()));
         CHECK(HasArrayBufferInWeakList(isolate->heap(),
@@ -156,8 +154,7 @@ TEST(WeakArrayBuffersFromScript) {
       i::ScopedVector<char> source(1024);
       i::OS::SNPrintF(source, "ab%d = null;", i);
       CompileRun(source.start());
-      isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags);
-      isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags);
+      isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
 
       CHECK_EQ(2, CountArrayBuffersInWeakList(isolate->heap()));
 
@@ -166,8 +163,8 @@ TEST(WeakArrayBuffersFromScript) {
         for (int j = 1; j <= 3; j++) {
           if (j == i) continue;
           i::OS::SNPrintF(source, "ab%d", j);
-          v8::Handle<v8::ArrayBuffer> ab(
-              v8::ArrayBuffer::Cast(*CompileRun(source.start())));
+          v8::Handle<v8::ArrayBuffer> ab =
+              v8::Handle<v8::ArrayBuffer>::Cast(CompileRun(source.start()));
           CHECK(HasArrayBufferInWeakList(isolate->heap(),
                 *v8::Utils::OpenHandle(*ab)));
           }
@@ -176,14 +173,13 @@ TEST(WeakArrayBuffersFromScript) {
       CompileRun("ab1 = null; ab2 = null; ab3 = null;");
     }
 
-    isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags);
-    isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags);
+    isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
     CHECK_EQ(0, CountArrayBuffersInWeakList(isolate->heap()));
   }
 }
 
-template <typename TypedArray>
-void TestTypedArrayFromApi() {
+template <typename View>
+void TestViewFromApi() {
   v8::V8::Initialize();
   LocalContext context;
   Isolate* isolate = GetIsolateFrom(&context);
@@ -193,72 +189,75 @@ void TestTypedArrayFromApi() {
   Handle<JSArrayBuffer> iab = v8::Utils::OpenHandle(*ab);
   {
     v8::HandleScope s2(context->GetIsolate());
-    v8::Handle<TypedArray> ta1 = TypedArray::New(ab, 0, 256);
+    v8::Handle<View> ta1 = View::New(ab, 0, 256);
     {
       v8::HandleScope s3(context->GetIsolate());
-      v8::Handle<TypedArray> ta2 = TypedArray::New(ab, 0, 128);
+      v8::Handle<View> ta2 = View::New(ab, 0, 128);
 
-      Handle<JSTypedArray> ita1 = v8::Utils::OpenHandle(*ta1);
-      Handle<JSTypedArray> ita2 = v8::Utils::OpenHandle(*ta2);
-      CHECK_EQ(2, CountTypedArrays(*iab));
-      CHECK(HasTypedArrayInWeakList(*iab, *ita1));
-      CHECK(HasTypedArrayInWeakList(*iab, *ita2));
+      Handle<JSArrayBufferView> ita1 = v8::Utils::OpenHandle(*ta1);
+      Handle<JSArrayBufferView> ita2 = v8::Utils::OpenHandle(*ta2);
+      CHECK_EQ(2, CountViews(*iab));
+      CHECK(HasViewInWeakList(*iab, *ita1));
+      CHECK(HasViewInWeakList(*iab, *ita2));
     }
-    isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags);
-    isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags);
-    CHECK_EQ(1, CountTypedArrays(*iab));
-    Handle<JSTypedArray> ita1 = v8::Utils::OpenHandle(*ta1);
-    CHECK(HasTypedArrayInWeakList(*iab, *ita1));
+    isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
+    CHECK_EQ(1, CountViews(*iab));
+    Handle<JSArrayBufferView> ita1 = v8::Utils::OpenHandle(*ta1);
+    CHECK(HasViewInWeakList(*iab, *ita1));
   }
-  isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags);
-  isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags);
+  isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
 
-  CHECK_EQ(0, CountTypedArrays(*iab));
+  CHECK_EQ(0, CountViews(*iab));
 }
 
 
 TEST(Uint8ArrayFromApi) {
-  TestTypedArrayFromApi<v8::Uint8Array>();
+  TestViewFromApi<v8::Uint8Array>();
 }
 
 
 TEST(Int8ArrayFromApi) {
-  TestTypedArrayFromApi<v8::Int8Array>();
+  TestViewFromApi<v8::Int8Array>();
 }
 
 
 TEST(Uint16ArrayFromApi) {
-  TestTypedArrayFromApi<v8::Uint16Array>();
+  TestViewFromApi<v8::Uint16Array>();
 }
 
 
 TEST(Int16ArrayFromApi) {
-  TestTypedArrayFromApi<v8::Int16Array>();
+  TestViewFromApi<v8::Int16Array>();
 }
 
 
 TEST(Uint32ArrayFromApi) {
-  TestTypedArrayFromApi<v8::Uint32Array>();
+  TestViewFromApi<v8::Uint32Array>();
 }
 
 
 TEST(Int32ArrayFromApi) {
-  TestTypedArrayFromApi<v8::Int32Array>();
+  TestViewFromApi<v8::Int32Array>();
 }
 
 
 TEST(Float32ArrayFromApi) {
-  TestTypedArrayFromApi<v8::Float32Array>();
+  TestViewFromApi<v8::Float32Array>();
 }
 
 
 TEST(Float64ArrayFromApi) {
-  TestTypedArrayFromApi<v8::Float64Array>();
+  TestViewFromApi<v8::Float64Array>();
 }
 
 
 TEST(Uint8ClampedArrayFromApi) {
-  TestTypedArrayFromApi<v8::Uint8ClampedArray>();
+  TestViewFromApi<v8::Uint8ClampedArray>();
+}
+
+
+TEST(DataViewFromApi) {
+  TestViewFromApi<v8::DataView>();
 }
 
 template <typename TypedArray>
@@ -285,50 +284,54 @@ static void TestTypedArrayFromScript(const char* constructor) {
                   constructor, constructor, constructor);
 
       CompileRun(source.start());
-      v8::Handle<v8::ArrayBuffer> ab(v8::ArrayBuffer::Cast(*CompileRun("ab")));
-      v8::Handle<TypedArray> ta1(TypedArray::Cast(*CompileRun("ta1")));
-      v8::Handle<TypedArray> ta2(TypedArray::Cast(*CompileRun("ta2")));
-      v8::Handle<TypedArray> ta3(TypedArray::Cast(*CompileRun("ta3")));
+      v8::Handle<v8::ArrayBuffer> ab =
+          v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab"));
+      v8::Handle<TypedArray> ta1 =
+          v8::Handle<TypedArray>::Cast(CompileRun("ta1"));
+      v8::Handle<TypedArray> ta2 =
+          v8::Handle<TypedArray>::Cast(CompileRun("ta2"));
+      v8::Handle<TypedArray> ta3 =
+          v8::Handle<TypedArray>::Cast(CompileRun("ta3"));
       CHECK_EQ(1, CountArrayBuffersInWeakList(isolate->heap()));
       Handle<JSArrayBuffer> iab = v8::Utils::OpenHandle(*ab);
-      CHECK_EQ(3, CountTypedArrays(*iab));
-      CHECK(HasTypedArrayInWeakList(*iab, *v8::Utils::OpenHandle(*ta1)));
-      CHECK(HasTypedArrayInWeakList(*iab, *v8::Utils::OpenHandle(*ta2)));
-      CHECK(HasTypedArrayInWeakList(*iab, *v8::Utils::OpenHandle(*ta3)));
+      CHECK_EQ(3, CountViews(*iab));
+      CHECK(HasViewInWeakList(*iab, *v8::Utils::OpenHandle(*ta1)));
+      CHECK(HasViewInWeakList(*iab, *v8::Utils::OpenHandle(*ta2)));
+      CHECK(HasViewInWeakList(*iab, *v8::Utils::OpenHandle(*ta3)));
     }
 
     i::OS::SNPrintF(source, "ta%d = null;", i);
     CompileRun(source.start());
-    isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags);
-    isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags);
+    isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
 
     CHECK_EQ(1, CountArrayBuffersInWeakList(isolate->heap()));
 
     {
       v8::HandleScope s2(context->GetIsolate());
-      v8::Handle<v8::ArrayBuffer> ab(v8::ArrayBuffer::Cast(*CompileRun("ab")));
+      v8::Handle<v8::ArrayBuffer> ab =
+          v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab"));
       Handle<JSArrayBuffer> iab = v8::Utils::OpenHandle(*ab);
-      CHECK_EQ(2, CountTypedArrays(*iab));
+      CHECK_EQ(2, CountViews(*iab));
       for (int j = 1; j <= 3; j++) {
         if (j == i) continue;
         i::OS::SNPrintF(source, "ta%d", j);
-        v8::Handle<TypedArray> ta(
-            TypedArray::Cast(*CompileRun(source.start())));
-        CHECK(HasTypedArrayInWeakList(*iab, *v8::Utils::OpenHandle(*ta)));
+        v8::Handle<TypedArray> ta =
+            v8::Handle<TypedArray>::Cast(CompileRun(source.start()));
+        CHECK(HasViewInWeakList(*iab, *v8::Utils::OpenHandle(*ta)));
       }
     }
 
     CompileRun("ta1 = null; ta2 = null; ta3 = null;");
-    isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags);
-    isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags);
+    isolate->heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
 
     CHECK_EQ(1, CountArrayBuffersInWeakList(isolate->heap()));
 
     {
       v8::HandleScope s3(context->GetIsolate());
-      v8::Handle<v8::ArrayBuffer> ab(v8::ArrayBuffer::Cast(*CompileRun("ab")));
+      v8::Handle<v8::ArrayBuffer> ab =
+          v8::Handle<v8::ArrayBuffer>::Cast(CompileRun("ab"));
       Handle<JSArrayBuffer> iab = v8::Utils::OpenHandle(*ab);
-      CHECK_EQ(0, CountTypedArrays(*iab));
+      CHECK_EQ(0, CountViews(*iab));
     }
   }
 }
@@ -378,3 +381,7 @@ TEST(Uint8ClampedArrayFromScript) {
   TestTypedArrayFromScript<v8::Uint8ClampedArray>("Uint8ClampedArray");
 }
 
+
+TEST(DataViewFromScript) {
+  TestTypedArrayFromScript<v8::DataView>("DataView");
+}
index 11c0d19..411f71c 100644 (file)
@@ -95,7 +95,8 @@ class MessageTestSuite(testsuite.TestSuite):
     env = { "basename": os.path.basename(testpath + ".js") }
     if len(expected_lines) != len(actual_lines):
       return True
-    for (expected, actual) in itertools.izip(expected_lines, actual_lines):
+    for (expected, actual) in itertools.izip_longest(
+        expected_lines, actual_lines, fillvalue=''):
       pattern = re.escape(expected.rstrip() % env)
       pattern = pattern.replace("\\*", ".*")
       pattern = "^%s$" % pattern
index f533d61..86c28aa 100644 (file)
@@ -37,7 +37,6 @@
 
 // support_smi_only_arrays = %HasFastSmiElements(new Array(1,2,3,4,5,6,7,8));
 support_smi_only_arrays = true;
-optimize_constructed_arrays = true;
 
 if (support_smi_only_arrays) {
   print("Tests include smi-only arrays.");
@@ -45,12 +44,6 @@ if (support_smi_only_arrays) {
   print("Tests do NOT include smi-only arrays.");
 }
 
-if (optimize_constructed_arrays) {
-  print("Tests include constructed array optimizations.");
-} else {
-  print("Tests do NOT include constructed array optimizations.");
-}
-
 var elements_kind = {
   fast_smi_only            :  'fast smi only elements',
   fast                     :  'fast elements',
@@ -96,7 +89,6 @@ function assertNotHoley(obj, name_opt) {
 }
 
 if (support_smi_only_arrays) {
-
   obj = [];
   assertNotHoley(obj);
   assertKind(elements_kind.fast_smi_only, obj);
@@ -187,135 +179,151 @@ if (support_smi_only_arrays) {
   // sites work again for fast literals
   //assertKind(elements_kind.fast, obj);
 
-  if (optimize_constructed_arrays) {
-    function newarraycase_smidouble(value) {
-      var a = new Array();
-      a[0] = value;
-      return a;
-    }
+  function newarraycase_smidouble(value) {
+    var a = new Array();
+    a[0] = value;
+    return a;
+  }
 
-    // Case: new Array() as allocation site, smi->double
-    obj = newarraycase_smidouble(1);
-    assertKind(elements_kind.fast_smi_only, obj);
-    obj = newarraycase_smidouble(1.5);
-    assertKind(elements_kind.fast_double, obj);
-    obj = newarraycase_smidouble(2);
-    assertKind(elements_kind.fast_double, obj);
+  // Case: new Array() as allocation site, smi->double
+  obj = newarraycase_smidouble(1);
+  assertKind(elements_kind.fast_smi_only, obj);
+  obj = newarraycase_smidouble(1.5);
+  assertKind(elements_kind.fast_double, obj);
+  obj = newarraycase_smidouble(2);
+  assertKind(elements_kind.fast_double, obj);
 
-    function newarraycase_smiobj(value) {
-      var a = new Array();
-      a[0] = value;
-      return a;
-    }
+  function newarraycase_smiobj(value) {
+    var a = new Array();
+    a[0] = value;
+    return a;
+  }
 
-    // Case: new Array() as allocation site, smi->fast
-    obj = newarraycase_smiobj(1);
-    assertKind(elements_kind.fast_smi_only, obj);
-    obj = newarraycase_smiobj("gloria");
-    assertKind(elements_kind.fast, obj);
-    obj = newarraycase_smiobj(2);
-    assertKind(elements_kind.fast, obj);
-
-    function newarraycase_length_smidouble(value) {
-      var a = new Array(3);
-      a[0] = value;
-      return a;
-    }
-
-    // Case: new Array(length) as allocation site
-    obj = newarraycase_length_smidouble(1);
-    assertKind(elements_kind.fast_smi_only, obj);
-    obj = newarraycase_length_smidouble(1.5);
-    assertKind(elements_kind.fast_double, obj);
-    obj = newarraycase_length_smidouble(2);
-    assertKind(elements_kind.fast_double, obj);
+  // Case: new Array() as allocation site, smi->fast
+  obj = newarraycase_smiobj(1);
+  assertKind(elements_kind.fast_smi_only, obj);
+  obj = newarraycase_smiobj("gloria");
+  assertKind(elements_kind.fast, obj);
+  obj = newarraycase_smiobj(2);
+  assertKind(elements_kind.fast, obj);
 
-    // Try to continue the transition to fast object, but
-    // we will not pretransition from double->fast, because
-    // it may hurt performance ("poisoning").
-    obj = newarraycase_length_smidouble("coates");
-    assertKind(elements_kind.fast, obj);
-    obj = newarraycase_length_smidouble(2.5);
-    // However, because of optimistic transitions, we will
-    // transition to the most general kind of elements kind found,
-    // therefore I can't count on this assert yet.
-    // assertKind(elements_kind.fast_double, obj);
-
-    function newarraycase_length_smiobj(value) {
-      var a = new Array(3);
-      a[0] = value;
-      return a;
-    }
-
-    // Case: new Array(<length>) as allocation site, smi->fast
-    obj = newarraycase_length_smiobj(1);
-    assertKind(elements_kind.fast_smi_only, obj);
-    obj = newarraycase_length_smiobj("gloria");
-    assertKind(elements_kind.fast, obj);
-    obj = newarraycase_length_smiobj(2);
-    assertKind(elements_kind.fast, obj);
-
-    function newarraycase_list_smidouble(value) {
-      var a = new Array(1, 2, 3);
-      a[0] = value;
-      return a;
-    }
-
-    obj = newarraycase_list_smidouble(1);
-    assertKind(elements_kind.fast_smi_only, obj);
-    obj = newarraycase_list_smidouble(1.5);
-    assertKind(elements_kind.fast_double, obj);
-    obj = newarraycase_list_smidouble(2);
-    assertKind(elements_kind.fast_double, obj);
+  function newarraycase_length_smidouble(value) {
+    var a = new Array(3);
+    a[0] = value;
+    return a;
+  }
 
-    function newarraycase_list_smiobj(value) {
-      var a = new Array(4, 5, 6);
-      a[0] = value;
-      return a;
-    }
+  // Case: new Array(length) as allocation site
+  obj = newarraycase_length_smidouble(1);
+  assertKind(elements_kind.fast_smi_only, obj);
+  obj = newarraycase_length_smidouble(1.5);
+  assertKind(elements_kind.fast_double, obj);
+  obj = newarraycase_length_smidouble(2);
+  assertKind(elements_kind.fast_double, obj);
 
-    obj = newarraycase_list_smiobj(1);
-    assertKind(elements_kind.fast_smi_only, obj);
-    obj = newarraycase_list_smiobj("coates");
-    assertKind(elements_kind.fast, obj);
-    obj = newarraycase_list_smiobj(2);
-    assertKind(elements_kind.fast, obj);
-
-    function newarraycase_onearg(len, value) {
-      var a = new Array(len);
-      a[0] = value;
-      return a;
-    }
-
-    obj = newarraycase_onearg(5, 3.5);
-    assertKind(elements_kind.fast_double, obj);
-    obj = newarraycase_onearg(10, 5);
-    assertKind(elements_kind.fast_double, obj);
-    obj = newarraycase_onearg(0, 5);
-    assertKind(elements_kind.fast_double, obj);
-    // Now pass a length that forces the dictionary path.
-    obj = newarraycase_onearg(100000, 5);
-    assertKind(elements_kind.dictionary, obj);
-    assertTrue(obj.length == 100000);
-
-    // Verify that cross context calls work
-    var realmA = Realm.current();
-    var realmB = Realm.create();
-    assertEquals(0, realmA);
-    assertEquals(1, realmB);
-
-    function instanceof_check(type) {
-      assertTrue(new type() instanceof type);
-      assertTrue(new type(5) instanceof type);
-      assertTrue(new type(1,2,3) instanceof type);
-    }
-
-    var realmBArray = Realm.eval(realmB, "Array");
-    instanceof_check(Array);
-    instanceof_check(realmBArray);
-    %OptimizeFunctionOnNextCall(instanceof_check);
-    instanceof_check(Array);
-    instanceof_check(realmBArray);
-    assertTrue(2 != %GetOptimizationStatus(instanceof_check));
+  // Try to continue the transition to fast object, but
+  // we will not pretransition from double->fast, because
+  // it may hurt performance ("poisoning").
+  obj = newarraycase_length_smidouble("coates");
+  assertKind(elements_kind.fast, obj);
+  obj = newarraycase_length_smidouble(2.5);
+  // However, because of optimistic transitions, we will
+  // transition to the most general kind of elements kind found,
+  // therefore I can't count on this assert yet.
+  // assertKind(elements_kind.fast_double, obj);
+
+  function newarraycase_length_smiobj(value) {
+    var a = new Array(3);
+    a[0] = value;
+    return a;
   }
+
+  // Case: new Array(<length>) as allocation site, smi->fast
+  obj = newarraycase_length_smiobj(1);
+  assertKind(elements_kind.fast_smi_only, obj);
+  obj = newarraycase_length_smiobj("gloria");
+  assertKind(elements_kind.fast, obj);
+  obj = newarraycase_length_smiobj(2);
+  assertKind(elements_kind.fast, obj);
+
+  function newarraycase_list_smidouble(value) {
+    var a = new Array(1, 2, 3);
+    a[0] = value;
+    return a;
+  }
+
+  obj = newarraycase_list_smidouble(1);
+  assertKind(elements_kind.fast_smi_only, obj);
+  obj = newarraycase_list_smidouble(1.5);
+  assertKind(elements_kind.fast_double, obj);
+  obj = newarraycase_list_smidouble(2);
+  assertKind(elements_kind.fast_double, obj);
+
+  function newarraycase_list_smiobj(value) {
+    var a = new Array(4, 5, 6);
+    a[0] = value;
+    return a;
+  }
+
+  obj = newarraycase_list_smiobj(1);
+  assertKind(elements_kind.fast_smi_only, obj);
+  obj = newarraycase_list_smiobj("coates");
+  assertKind(elements_kind.fast, obj);
+  obj = newarraycase_list_smiobj(2);
+  assertKind(elements_kind.fast, obj);
+
+  function newarraycase_onearg(len, value) {
+    var a = new Array(len);
+    a[0] = value;
+    return a;
+  }
+
+  obj = newarraycase_onearg(5, 3.5);
+  assertKind(elements_kind.fast_double, obj);
+  obj = newarraycase_onearg(10, 5);
+  assertKind(elements_kind.fast_double, obj);
+  obj = newarraycase_onearg(0, 5);
+  assertKind(elements_kind.fast_double, obj);
+  // Now pass a length that forces the dictionary path.
+  obj = newarraycase_onearg(100000, 5);
+  assertKind(elements_kind.dictionary, obj);
+  assertTrue(obj.length == 100000);
+
+  // Verify that cross context calls work
+  var realmA = Realm.current();
+  var realmB = Realm.create();
+  assertEquals(0, realmA);
+  assertEquals(1, realmB);
+
+  function instanceof_check(type) {
+    assertTrue(new type() instanceof type);
+    assertTrue(new type(5) instanceof type);
+    assertTrue(new type(1,2,3) instanceof type);
+  }
+
+  var realmBArray = Realm.eval(realmB, "Array");
+  instanceof_check(Array);
+  instanceof_check(realmBArray);
+  %OptimizeFunctionOnNextCall(instanceof_check);
+
+  // No de-opt will occur because HCallNewArray wasn't selected, on account of
+  // the call site not being monomorphic to Array.
+  instanceof_check(Array);
+  assertTrue(2 != %GetOptimizationStatus(instanceof_check));
+  instanceof_check(realmBArray);
+  assertTrue(2 != %GetOptimizationStatus(instanceof_check));
+
+  // Try to optimize again, but first clear all type feedback, and allow it
+  // to be monomorphic on first call. Only after crankshafting do we introduce
+  // realmBArray. This should deopt the method.
+  %DeoptimizeFunction(instanceof_check);
+  %ClearFunctionTypeFeedback(instanceof_check);
+  instanceof_check(Array);
+  instanceof_check(Array);
+  %OptimizeFunctionOnNextCall(instanceof_check);
+  instanceof_check(Array);
+  assertTrue(2 != %GetOptimizationStatus(instanceof_check));
+
+  instanceof_check(realmBArray);
+  assertTrue(1 != %GetOptimizationStatus(instanceof_check));
 }
diff --git a/deps/v8/test/mjsunit/array-constructor-feedback.js b/deps/v8/test/mjsunit/array-constructor-feedback.js
new file mode 100644 (file)
index 0000000..e29e769
--- /dev/null
@@ -0,0 +1,217 @@
+// Copyright 2012 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --allow-natives-syntax --smi-only-arrays --expose-gc
+// Flags: --track-allocation-sites --noalways-opt
+
+// Test element kind of objects.
+// Since --smi-only-arrays affects builtins, its default setting at compile
+// time sticks if built with snapshot.  If --smi-only-arrays is deactivated
+// by default, only a no-snapshot build actually has smi-only arrays enabled
+// in this test case.  Depending on whether smi-only arrays are actually
+// enabled, this test takes the appropriate code path to check smi-only arrays.
+
+// support_smi_only_arrays = %HasFastSmiElements(new Array(1,2,3,4,5,6,7,8));
+support_smi_only_arrays = true;
+
+if (support_smi_only_arrays) {
+  print("Tests include smi-only arrays.");
+} else {
+  print("Tests do NOT include smi-only arrays.");
+}
+
+var elements_kind = {
+  fast_smi_only            :  'fast smi only elements',
+  fast                     :  'fast elements',
+  fast_double              :  'fast double elements',
+  dictionary               :  'dictionary elements',
+  external_byte            :  'external byte elements',
+  external_unsigned_byte   :  'external unsigned byte elements',
+  external_short           :  'external short elements',
+  external_unsigned_short  :  'external unsigned short elements',
+  external_int             :  'external int elements',
+  external_unsigned_int    :  'external unsigned int elements',
+  external_float           :  'external float elements',
+  external_double          :  'external double elements',
+  external_pixel           :  'external pixel elements'
+}
+
+function getKind(obj) {
+  if (%HasFastSmiElements(obj)) return elements_kind.fast_smi_only;
+  if (%HasFastObjectElements(obj)) return elements_kind.fast;
+  if (%HasFastDoubleElements(obj)) return elements_kind.fast_double;
+  if (%HasDictionaryElements(obj)) return elements_kind.dictionary;
+}
+
+function isHoley(obj) {
+  if (%HasFastHoleyElements(obj)) return true;
+  return false;
+}
+
+function assertKind(expected, obj, name_opt) {
+  if (!support_smi_only_arrays &&
+      expected == elements_kind.fast_smi_only) {
+    expected = elements_kind.fast;
+  }
+  assertEquals(expected, getKind(obj), name_opt);
+}
+
+if (support_smi_only_arrays) {
+
+  // Test: If a call site goes megamorphic, it loses the ability to
+  // use allocation site feedback.
+  (function() {
+    function bar(t, len) {
+      return new t(len);
+    }
+
+    a = bar(Array, 10);
+    a[0] = 3.5;
+    b = bar(Array, 1);
+    assertKind(elements_kind.fast_double, b);
+    c = bar(Object, 3);
+    b = bar(Array, 10);
+    assertKind(elements_kind.fast_smi_only, b);
+    b[0] = 3.5;
+    c = bar(Array, 10);
+    assertKind(elements_kind.fast_smi_only, c);
+  })();
+
+
+  // Test: ensure that crankshafted array constructor sites are deopted
+  // if another function is used.
+  (function() {
+    function bar0(t) {
+      return new t();
+    }
+    a = bar0(Array);
+    a[0] = 3.5;
+    b = bar0(Array);
+    assertKind(elements_kind.fast_double, b);
+    %OptimizeFunctionOnNextCall(bar0);
+    b = bar0(Array);
+    assertKind(elements_kind.fast_double, b);
+    assertTrue(2 != %GetOptimizationStatus(bar0));
+    // bar0 should deopt
+    b = bar0(Object);
+    assertTrue(1 != %GetOptimizationStatus(bar0));
+    // When it's re-optimized, we should call through the full stub
+    bar0(Array);
+    %OptimizeFunctionOnNextCall(bar0);
+    b = bar0(Array);
+    // We also lost our ability to record kind feedback, as the site
+    // is megamorphic now.
+    assertKind(elements_kind.fast_smi_only, b);
+    assertTrue(2 != %GetOptimizationStatus(bar0));
+    b[0] = 3.5;
+    c = bar0(Array);
+    assertKind(elements_kind.fast_smi_only, c);
+  })();
+
+
+  // Test: Ensure that bailouts from the stub don't deopt a crankshafted
+  // method with a call to that stub.
+  (function() {
+    function bar(len) {
+      return new Array(len);
+    }
+    a = bar(10);
+    a[0] = "a string";
+    a = bar(10);
+    assertKind(elements_kind.fast, a);
+    %OptimizeFunctionOnNextCall(bar);
+    a = bar(10);
+    assertKind(elements_kind.fast, a);
+    assertTrue(2 != %GetOptimizationStatus(bar));
+    // The stub bails out, but the method call should be fine.
+    a = bar(100000);
+    assertTrue(2 != %GetOptimizationStatus(bar));
+    assertKind(elements_kind.dictionary, a);
+
+    // If the argument isn't a smi, it bails out as well
+    a = bar("oops");
+    assertTrue(2 != %GetOptimizationStatus(bar));
+    assertKind(elements_kind.fast, a);
+
+    function barn(one, two, three) {
+      return new Array(one, two, three);
+    }
+
+    barn(1, 2, 3);
+    barn(1, 2, 3);
+    %OptimizeFunctionOnNextCall(barn);
+    barn(1, 2, 3);
+    assertTrue(2 != %GetOptimizationStatus(barn));
+    a = barn(1, "oops", 3);
+    // The stub should bail out but the method should remain optimized.
+    assertKind(elements_kind.fast, a);
+    assertTrue(2 != %GetOptimizationStatus(barn));
+  })();
+
+
+  // Test: When a method with array constructor is crankshafted, the type
+  // feedback for elements kind is baked in. Verify that transitions don't
+  // change it anymore
+  (function() {
+    function bar() {
+      return new Array();
+    }
+    a = bar();
+    bar();
+    %OptimizeFunctionOnNextCall(bar);
+    b = bar();
+    // This only makes sense to test if we allow crankshafting
+    if (4 != %GetOptimizationStatus(bar)) {
+      assertTrue(2 != %GetOptimizationStatus(bar));
+      %DebugPrint(3);
+      b[0] = 3.5;
+      c = bar();
+      assertKind(elements_kind.fast_smi_only, c);
+      assertTrue(2 != %GetOptimizationStatus(bar));
+    }
+  })();
+
+
+  // Test: create arrays in two contexts, verifying that the correct
+  // map for Array in that context will be used.
+  (function() {
+    function bar() { return new Array(); }
+    bar();
+    bar();
+    %OptimizeFunctionOnNextCall(bar);
+    a = bar();
+    assertTrue(a instanceof Array);
+
+    var contextB = Realm.create();
+    Realm.eval(contextB, "function bar2() { return new Array(); };");
+    Realm.eval(contextB, "bar2(); bar2();");
+    Realm.eval(contextB, "%OptimizeFunctionOnNextCall(bar2);");
+    Realm.eval(contextB, "bar2();");
+    assertFalse(Realm.eval(contextB, "bar2();") instanceof Array);
+    assertTrue(Realm.eval(contextB, "bar2() instanceof Array"));
+  })();
+}
diff --git a/deps/v8/test/mjsunit/array-feedback.js b/deps/v8/test/mjsunit/array-feedback.js
new file mode 100644 (file)
index 0000000..d1b3062
--- /dev/null
@@ -0,0 +1,216 @@
+// Copyright 2012 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --allow-natives-syntax --smi-only-arrays --expose-gc
+// Flags: --track-allocation-sites --noalways-opt
+
+// Test element kind of objects.
+// Since --smi-only-arrays affects builtins, its default setting at compile
+// time sticks if built with snapshot.  If --smi-only-arrays is deactivated
+// by default, only a no-snapshot build actually has smi-only arrays enabled
+// in this test case.  Depending on whether smi-only arrays are actually
+// enabled, this test takes the appropriate code path to check smi-only arrays.
+
+// support_smi_only_arrays = %HasFastSmiElements(new Array(1,2,3,4,5,6,7,8));
+support_smi_only_arrays = true;
+
+if (support_smi_only_arrays) {
+  print("Tests include smi-only arrays.");
+} else {
+  print("Tests do NOT include smi-only arrays.");
+}
+
+var elements_kind = {
+  fast_smi_only            :  'fast smi only elements',
+  fast                     :  'fast elements',
+  fast_double              :  'fast double elements',
+  dictionary               :  'dictionary elements',
+  external_byte            :  'external byte elements',
+  external_unsigned_byte   :  'external unsigned byte elements',
+  external_short           :  'external short elements',
+  external_unsigned_short  :  'external unsigned short elements',
+  external_int             :  'external int elements',
+  external_unsigned_int    :  'external unsigned int elements',
+  external_float           :  'external float elements',
+  external_double          :  'external double elements',
+  external_pixel           :  'external pixel elements'
+}
+
+function getKind(obj) {
+  if (%HasFastSmiElements(obj)) return elements_kind.fast_smi_only;
+  if (%HasFastObjectElements(obj)) return elements_kind.fast;
+  if (%HasFastDoubleElements(obj)) return elements_kind.fast_double;
+  if (%HasDictionaryElements(obj)) return elements_kind.dictionary;
+}
+
+function isHoley(obj) {
+  if (%HasFastHoleyElements(obj)) return true;
+  return false;
+}
+
+function assertKind(expected, obj, name_opt) {
+  if (!support_smi_only_arrays &&
+      expected == elements_kind.fast_smi_only) {
+    expected = elements_kind.fast;
+  }
+  assertEquals(expected, getKind(obj), name_opt);
+}
+
+if (support_smi_only_arrays) {
+
+  // Verify that basic elements kind feedback works for non-constructor
+  // array calls (as long as the call is made through an IC, and not
+  // a CallStub).
+  (function (){
+    function create0() {
+      return Array();
+    }
+
+    // Calls through ICs need warm up through uninitialized, then
+    // premonomorphic first.
+    create0();
+    create0();
+    a = create0();
+    assertKind(elements_kind.fast_smi_only, a);
+    a[0] = 3.5;
+    b = create0();
+    assertKind(elements_kind.fast_double, b);
+
+    function create1(arg) {
+      return Array(arg);
+    }
+
+    create1(0);
+    create1(0);
+    a = create1(0);
+    assertFalse(isHoley(a));
+    assertKind(elements_kind.fast_smi_only, a);
+    a[0] = "hello";
+    b = create1(10);
+    assertTrue(isHoley(b));
+    assertKind(elements_kind.fast, b);
+
+    a = create1(100000);
+    assertKind(elements_kind.dictionary, a);
+
+    function create3(arg1, arg2, arg3) {
+      return Array(arg1, arg2, arg3);
+    }
+
+    create3();
+    create3();
+    a = create3(1,2,3);
+    a[0] = 3.5;
+    b = create3(1,2,3);
+    assertKind(elements_kind.fast_double, b);
+    assertFalse(isHoley(b));
+  })();
+
+
+  // Verify that keyed calls work
+  (function (){
+    function create0(name) {
+      return this[name]();
+    }
+
+    name = "Array";
+    create0(name);
+    create0(name);
+    a = create0(name);
+    a[0] = 3.5;
+    b = create0(name);
+    assertKind(elements_kind.fast_double, b);
+  })();
+
+
+  // Verify that the IC can't be spoofed by patching
+  (function (){
+    function create0() {
+      return Array();
+    }
+
+    create0();
+    create0();
+    a = create0();
+    assertKind(elements_kind.fast_smi_only, a);
+    var oldArray = this.Array;
+    this.Array = function() { return ["hi"]; };
+    b = create0();
+    assertEquals(["hi"], b);
+    this.Array = oldArray;
+  })();
+
+  // Verify that calls are still made through an IC after crankshaft,
+  // though the type information is reset.
+  // TODO(mvstanton): instead, consume the type feedback gathered up
+  // until crankshaft time.
+  (function (){
+    function create0() {
+      return Array();
+    }
+
+    create0();
+    create0();
+    a = create0();
+    a[0] = 3.5;
+    %OptimizeFunctionOnNextCall(create0);
+    create0();
+    // This test only makes sense if crankshaft is allowed
+    if (4 != %GetOptimizationStatus(create0)) {
+      create0();
+      b = create0();
+      assertKind(elements_kind.fast_smi_only, b);
+      b[0] = 3.5;
+      c = create0();
+      assertKind(elements_kind.fast_double, c);
+      assertTrue(2 != %GetOptimizationStatus(create0));
+    }
+  })();
+
+
+  // Verify that cross context calls work
+  (function (){
+    var realmA = Realm.current();
+    var realmB = Realm.create();
+    assertEquals(0, realmA);
+    assertEquals(1, realmB);
+
+    function instanceof_check(type) {
+      assertTrue(type() instanceof type);
+      assertTrue(type(5) instanceof type);
+      assertTrue(type(1,2,3) instanceof type);
+    }
+
+    var realmBArray = Realm.eval(realmB, "Array");
+    instanceof_check(Array);
+    instanceof_check(Array);
+    instanceof_check(Array);
+    instanceof_check(realmBArray);
+    instanceof_check(realmBArray);
+    instanceof_check(realmBArray);
+  })();
+}
diff --git a/deps/v8/test/mjsunit/array-literal-feedback.js b/deps/v8/test/mjsunit/array-literal-feedback.js
new file mode 100644 (file)
index 0000000..8cc617e
--- /dev/null
@@ -0,0 +1,75 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --allow-natives-syntax --smi-only-arrays --expose-gc
+// Flags: --track-allocation-sites --noalways-opt
+
+// Test element kind of objects.
+// Since --smi-only-arrays affects builtins, its default setting at compile
+// time sticks if built with snapshot.  If --smi-only-arrays is deactivated
+// by default, only a no-snapshot build actually has smi-only arrays enabled
+// in this test case.  Depending on whether smi-only arrays are actually
+// enabled, this test takes the appropriate code path to check smi-only arrays.
+
+// support_smi_only_arrays = %HasFastSmiElements(new Array(1,2,3,4,5,6,7,8));
+support_smi_only_arrays = true;
+
+if (support_smi_only_arrays) {
+  print("Tests include smi-only arrays.");
+} else {
+  print("Tests do NOT include smi-only arrays.");
+}
+
+if (support_smi_only_arrays) {
+
+  function get_literal(x) {
+    var literal = [1, 2, x];
+    return literal;
+  }
+
+  get_literal(3);
+  get_literal(3);
+  %OptimizeFunctionOnNextCall(get_literal);
+  a = get_literal(3);
+  assertTrue(2 != %GetOptimizationStatus(get_literal));
+  assertTrue(%HasFastSmiElements(a));
+  a[0] = 3.5;
+
+  // We should have transitioned the boilerplate array to double, and
+  // crankshafted code should de-opt on the unexpected elements kind
+  b = get_literal(3);
+  assertTrue(%HasFastDoubleElements(b));
+  assertEquals([1, 2, 3], b);
+  assertTrue(1 != %GetOptimizationStatus(get_literal));
+
+  // Optimize again
+  get_literal(3);
+  %OptimizeFunctionOnNextCall(get_literal);
+  b = get_literal(3);
+  assertTrue(%HasFastDoubleElements(b));
+  assertTrue(2 != %GetOptimizationStatus(get_literal));
+}
index fa38ae3..afba963 100644 (file)
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-// Flags: --allow-natives-syntax
-%SetFlags("--noparallel-recompilation");
+// Flags: --allow-natives-syntax --noparallel-recompilation
+
+if (%IsParallelRecompilationSupported()) {
+  print("Parallel recompilation is turned on after all. Skipping this test.");
+  quit();
+}
 
 /**
  * This class shows how to use %GetOptimizationCount() and
index df1bd22..75d01b5 100644 (file)
@@ -266,3 +266,46 @@ test_toarr(toarr2);
     }
   }
 })();
+
+
+// Test materialization of arguments object with values in registers.
+(function () {
+  "use strict";
+  var forceDeopt = { deopt:false };
+  function inner(a,b,c,d,e,f,g,h,i,j) {
+    var args = arguments;
+    forceDeopt.deopt;
+    assertSame(10, args.length);
+    assertSame(a, args[0]);
+    assertSame(b, args[1]);
+    assertSame(c, args[2]);
+    assertSame(d, args[3]);
+    assertSame(e, args[4]);
+    assertSame(f, args[5]);
+    assertSame(g, args[6]);
+    assertSame(h, args[7]);
+    assertSame(i, args[8]);
+    assertSame(j, args[9]);
+  }
+
+  var a = 0.5;
+  var b = 1.7;
+  var c = 123;
+  function outer() {
+    inner(
+      a - 0.3,  // double in double register
+      b + 2.3,  // integer in double register
+      c + 321,  // integer in general register
+      c - 456,  // integer in stack slot
+      a + 0.1, a + 0.2, a + 0.3, a + 0.4, a + 0.5,
+      a + 0.6   // double in stack slot
+    );
+  }
+
+  outer();
+  outer();
+  %OptimizeFunctionOnNextCall(outer);
+  outer();
+  delete forceDeopt.deopt;
+  outer();
+})();
diff --git a/deps/v8/test/mjsunit/compiler/osr-big.js b/deps/v8/test/mjsunit/compiler/osr-big.js
new file mode 100644 (file)
index 0000000..ed71744
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --use-osr
+
+function f(x) {
+  var sum = 0;
+  var outer = 1000000;
+  var a = 1, b = 2, c = 3, d = 4, e = 5;
+  while (outer > 0) {
+    a = a + 5;
+    b = b + 4;
+    c = c + 3;
+    d = d + 2;
+    e = e + 1;
+    outer--;
+  }
+  return a + b + c + d + e;
+}
+
+assertEquals(15000015, f(5));
diff --git a/deps/v8/test/mjsunit/compiler/osr-nested.js b/deps/v8/test/mjsunit/compiler/osr-nested.js
new file mode 100644 (file)
index 0000000..4bdb082
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --use-osr
+
+function f() {
+  var sum = 0;
+  for (var i = 0; i < 10; i++) {
+    for (var j = 0; j < 100000; j++) {
+      var x = i + 2;
+      var y = x + 5;
+      var z = y + 3;
+      sum += z;
+    }
+  }
+  return sum;
+}
+
+
+assertEquals(14500000, f());
+assertEquals(14500000, f());
+assertEquals(14500000, f());
diff --git a/deps/v8/test/mjsunit/compiler/osr-one.js b/deps/v8/test/mjsunit/compiler/osr-one.js
new file mode 100644 (file)
index 0000000..2c27192
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --use-osr
+
+function f(x) {
+  var sum = 0;
+  var count = 10000000;
+  while (count > 0) {
+    sum += x;
+    count--;
+  }
+  return sum;
+}
+
+assertEquals(50000000, f(5));
diff --git a/deps/v8/test/mjsunit/compiler/osr-two.js b/deps/v8/test/mjsunit/compiler/osr-two.js
new file mode 100644 (file)
index 0000000..8ac4c2c
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --use-osr
+
+function f(x) {
+  var sum = 0;
+  var outer = 100;
+  while (outer > 0) {
+    var inner = 100000;
+    while (inner > 0) {
+      sum += x;
+      inner--;
+    }
+    outer--;
+  }
+  return sum;
+}
+
+assertEquals(50000000, f(5));
diff --git a/deps/v8/test/mjsunit/compiler/osr-with-args.js b/deps/v8/test/mjsunit/compiler/osr-with-args.js
new file mode 100644 (file)
index 0000000..44fa1cb
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --use-osr
+
+function f() {
+  var sum = 0;
+  for (var i = 0; i < 1000000; i++) {
+    var t = arguments[0] + 2;
+    var x = arguments[1] + 2;
+    var y = t + x + 5;
+    var z = y + 3;
+    sum += z;
+  }
+  return sum;
+}
+
+for (var i = 0; i < 4; i++) {
+  assertEquals(17000000, f(2, 3));
+}
index 74e6d86..2392a37 100644 (file)
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-// Flags: --allow-natives-syntax --parallel-recompilation
+// Flags: --allow-natives-syntax
+// Flags: --parallel-recompilation --parallel-recompilation-delay=50
+
+if (!%IsParallelRecompilationSupported()) {
+  print("Parallel recompilation is disabled. Skipping this test.");
+  quit();
+}
+
+function assertUnoptimized(fun) {
+  assertTrue(%GetOptimizationStatus(fun) != 1);
+}
 
 function f(foo) { return foo.bar(); }
 
@@ -36,10 +46,10 @@ assertEquals(1, f(o));
 assertEquals(1, f(o));
 
 %OptimizeFunctionOnNextCall(f, "parallel");
-assertEquals(1, f(o));
-// Change the prototype chain during optimization.
+assertEquals(1, f(o));     // Trigger optimization.
+assertUnoptimized(f);      // Optimization not yet done.
+// Change the prototype chain during optimization to trigger map invalidation.
 o.__proto__.__proto__ = { bar: function() { return 2; } };
-
-%WaitUntilOptimized(f);
-
+%CompleteOptimization(f);  // Conclude optimization with...
+assertUnoptimized(f);      // ... bailing out due to map dependency.
 assertEquals(2, f(o));
index 5aaa3bb..a1b7871 100644 (file)
@@ -150,7 +150,7 @@ assertTrue(isNaN(l.getUTCMilliseconds()));
 // date without the timezone information.
 function testToLocaleTimeString() {
   var d = new Date();
-  var s = d.toLocaleTimeString();
+  var s = d.toLocaleTimeString("en-GB");
   assertEquals(8, s.length);
 }
 
@@ -340,4 +340,4 @@ date.getYear();
 %OptimizeFunctionOnNextCall(Date.prototype.getYear);
 assertThrows(function() { Date.prototype.getYear.call(""); }, TypeError);
 opt_status = %GetOptimizationStatus(Date.prototype.getYear);
-assertTrue(%GetOptimizationStatus(Date.prototype.getTime) != 1);
\ No newline at end of file
+assertTrue(%GetOptimizationStatus(Date.prototype.getTime) != 1);
index 1302034..148acfc 100644 (file)
@@ -29,7 +29,7 @@
 // Get the Debug object exposed from the debug context global object.
 Debug = debug.Debug
 
-function f() {a=1;b=2};
+function f() {a=1;b=2}
 function g() {
   a=1;
   b=2;
@@ -121,13 +121,13 @@ assertTrue(Debug.showBreakPoints(g).indexOf("[B0]") < 0);
 
 
 // Tests for setting break points by script id and position.
-function setBreakpointByPosition(f, position)
+function setBreakpointByPosition(f, position, opt_position_alignment)
 {
   var break_point = Debug.setBreakPointByScriptIdAndPosition(
       Debug.findScript(f).id,
       position + Debug.sourcePosition(f),
       "",
-      true);
+      true, opt_position_alignment);
   return break_point.number();
 }
 
@@ -204,3 +204,22 @@ Debug.clearBreakPoint(bp3);
 //b=2;
 //}
 assertTrue(Debug.showBreakPoints(g).indexOf("[B0]") < 0);
+
+// Tests for setting break points without statement aligment.
+// (This may be sensitive to compiler break position map generation).
+function h() {a=f(f2(1,2),f3())+f3();b=f3();}
+var scenario = [
+  [5, "{a[B0]=f"],
+  [6, "{a=[B0]f("],
+  [7, "{a=f([B0]f2("],
+  [16, "f2(1,2),[B0]f3()"],
+  [22, "+[B0]f3()"]
+];
+for(var i = 0; i < scenario.length; i++) {
+  bp1 = setBreakpointByPosition(h, scenario[i][0],
+      Debug.BreakPositionAlignment.BreakPosition);
+  assertTrue(Debug.showBreakPoints(h, undefined,
+      Debug.BreakPositionAlignment.BreakPosition).indexOf(scenario[i][1]) > 0);
+  Debug.clearBreakPoint(bp1);
+}
+
index a68162d..e6326e1 100644 (file)
@@ -38,6 +38,7 @@ function h() {
   var b = 2;
   var eval = 5;  // Overriding eval should not break anything.
   debugger;  // Breakpoint.
+  return a;
 }
 
 function checkFrame0(frame) {
@@ -60,7 +61,7 @@ function checkFrame0(frame) {
 function g() {
   var a = 3;
   eval("var b = 4;");
-  h();
+  return h() + a;
 }
 
 function checkFrame1(frame) {
@@ -83,7 +84,7 @@ function f() {
   var a = 5;
   var b = 0;
   with ({b:6}) {
-    g();
+    return g();
   }
 }
 
@@ -125,6 +126,10 @@ function listener(event, exec_state, event_data, data) {
       assertEquals(6, exec_state.frame(2).evaluate('b').value());
       assertEquals("function",
                    typeof exec_state.frame(2).evaluate('eval').value());
+      assertEquals("foo",
+                   exec_state.frame(0).evaluate('a = "foo"').value());
+      assertEquals("bar",
+                   exec_state.frame(1).evaluate('a = "bar"').value());
       // Indicate that all was processed.
       listenerComplete = true;
     }
@@ -137,7 +142,9 @@ function listener(event, exec_state, event_data, data) {
 // Add the debug event listener.
 Debug.setListener(listener);
 
-f();
+var f_result = f();
+
+assertEquals('foobar', f_result);
 
 // Make sure that the debug event listener was invoked.
 assertFalse(exception, "exception in listener")
index afaa369..c456e6b 100644 (file)
@@ -61,9 +61,8 @@ for (i = 0; i < scripts.length; i++) {
 
 // This has to be updated if the number of native scripts change.
 assertEquals(16, named_native_count);
-// If no snapshot is used, only the 'gc' extension is loaded.
-// If snapshot is used, all extensions are cached in the snapshot.
-assertTrue(extension_count == 1 || extension_count == 5);
+// Only the 'gc' and (depending on flags) the 'i18n' extensions are loaded.
+assertTrue(extension_count == 1 || extension_count == 2);
 // This script and mjsunit.js has been loaded.  If using d8, d8 loads
 // a normal script during startup too.
 assertTrue(normal_count == 2 || normal_count == 3);
index 0e8e209..247aa89 100644 (file)
@@ -171,18 +171,21 @@ monomorphic(smi_only);
 
 if (support_smi_only_arrays) {
   function construct_smis() {
+    try {} catch (e) {} // TODO(titzer): DisableOptimization
     var a = [0, 0, 0];
     a[0] = 0;  // Send the COW array map to the steak house.
     assertKind(elements_kind.fast_smi_only, a);
     return a;
   }
   function construct_doubles() {
+    try {} catch (e) {} // TODO(titzer): DisableOptimization
     var a = construct_smis();
     a[0] = 1.5;
     assertKind(elements_kind.fast_double, a);
     return a;
   }
   function construct_objects() {
+    try {} catch (e) {} // TODO(titzer): DisableOptimization
     var a = construct_smis();
     a[0] = "one";
     assertKind(elements_kind.fast, a);
@@ -191,6 +194,7 @@ if (support_smi_only_arrays) {
 
   // Test crankshafted transition SMI->DOUBLE.
   function convert_to_double(array) {
+    try {} catch (e) {} // TODO(titzer): DisableOptimization
     array[1] = 2.5;
     assertKind(elements_kind.fast_double, array);
     assertEquals(2.5, array[1]);
@@ -202,6 +206,7 @@ if (support_smi_only_arrays) {
   convert_to_double(smis);
   // Test crankshafted transitions SMI->FAST and DOUBLE->FAST.
   function convert_to_fast(array) {
+    try {} catch (e) {} // TODO(titzer): DisableOptimization
     array[1] = "two";
     assertKind(elements_kind.fast, array);
     assertEquals("two", array[1]);
@@ -218,6 +223,7 @@ if (support_smi_only_arrays) {
   // Test transition chain SMI->DOUBLE->FAST (crankshafted function will
   // transition to FAST directly).
   function convert_mixed(array, value, kind) {
+    try {} catch (e) {} // TODO(titzer): DisableOptimization
     array[1] = value;
     assertKind(kind, array);
     assertEquals(value, array[1]);
index c9d5621..cffcab8 100644 (file)
@@ -520,30 +520,15 @@ assertSame(a.buffer, aa.buffer);
 assertThrows(function(){ a.subarray.call({}, 0) });
 assertThrows(function(){ a.subarray.call([], 0) });
 
-// Call constructors directly as functions, and through .call and .apply
-
-b = ArrayBuffer(100)
-a = Int8Array(b, 5, 77)
-assertInstance(b, ArrayBuffer)
-assertInstance(a, Int8Array)
-assertSame(b, a.buffer)
-assertEquals(5, a.byteOffset)
-assertEquals(77, a.byteLength)
-b = ArrayBuffer.call(null, 10)
-a = Uint16Array.call(null, b, 2, 4)
-assertInstance(b, ArrayBuffer)
-assertInstance(a, Uint16Array)
-assertSame(b, a.buffer)
-assertEquals(2, a.byteOffset)
-assertEquals(8, a.byteLength)
-b = ArrayBuffer.apply(null, [1000])
-a = Float32Array.apply(null, [b, 128, 1])
-assertInstance(b, ArrayBuffer)
-assertInstance(a, Float32Array)
-assertSame(b, a.buffer)
-assertEquals(128, a.byteOffset)
-assertEquals(4, a.byteLength)
+// Try to call constructors directly as functions, and through .call
+// and .apply. Should fail.
 
+assertThrows(function() { ArrayBuffer(100); }, TypeError);
+assertThrows(function() { Int8Array(b, 5, 77); }, TypeError);
+assertThrows(function() { ArrayBuffer.call(null, 10); }, TypeError);
+assertThrows(function() { Uint16Array.call(null, b, 2, 4); }, TypeError);
+assertThrows(function() { ArrayBuffer.apply(null, [1000]); }, TypeError);
+assertThrows(function() { Float32Array.apply(null, [b, 128, 1]); }, TypeError);
 
 // Test array.set in different combinations.
 
@@ -632,15 +617,15 @@ var b0 = a0.buffer
 
 var b1 = b0.slice(0)
 assertEquals(b0.byteLength, b1.byteLength)
-assertArrayPrefix([1, 2, 3, 4, 5, 6], Int8Array(b1))
+assertArrayPrefix([1, 2, 3, 4, 5, 6], new Int8Array(b1))
 
 var b2 = b0.slice(3)
 assertEquals(b0.byteLength - 3, b2.byteLength)
-assertArrayPrefix([4, 5, 6], Int8Array(b2))
+assertArrayPrefix([4, 5, 6], new Int8Array(b2))
 
 var b3 = b0.slice(2, 4)
 assertEquals(2, b3.byteLength)
-assertArrayPrefix([3, 4], Int8Array(b3))
+assertArrayPrefix([3, 4], new Int8Array(b3))
 
 function goo(a, i) {
   return a[i];
index bfdab8a..deb3c86 100644 (file)
@@ -519,30 +519,15 @@ assertSame(a.buffer, aa.buffer);
 assertThrows(function(){ a.subarray.call({}, 0) });
 assertThrows(function(){ a.subarray.call([], 0) });
 
-// Call constructors directly as functions, and through .call and .apply
-
-b = ArrayBuffer(100)
-a = Int8Array(b, 5, 77)
-assertInstance(b, ArrayBuffer)
-assertInstance(a, Int8Array)
-assertSame(b, a.buffer)
-assertEquals(5, a.byteOffset)
-assertEquals(77, a.byteLength)
-b = ArrayBuffer.call(null, 10)
-a = Uint16Array.call(null, b, 2, 4)
-assertInstance(b, ArrayBuffer)
-assertInstance(a, Uint16Array)
-assertSame(b, a.buffer)
-assertEquals(2, a.byteOffset)
-assertEquals(8, a.byteLength)
-b = ArrayBuffer.apply(null, [1000])
-a = Float32Array.apply(null, [b, 128, 1])
-assertInstance(b, ArrayBuffer)
-assertInstance(a, Float32Array)
-assertSame(b, a.buffer)
-assertEquals(128, a.byteOffset)
-assertEquals(4, a.byteLength)
+// Try to call constructors directly as functions, and through .call
+// and .apply. Should fail.
 
+assertThrows(function() { ArrayBuffer(100); }, TypeError);
+assertThrows(function() { Int8Array(b, 5, 77); }, TypeError);
+assertThrows(function() { ArrayBuffer.call(null, 10); }, TypeError);
+assertThrows(function() { Uint16Array.call(null, b, 2, 4); }, TypeError);
+assertThrows(function() { ArrayBuffer.apply(null, [1000]); }, TypeError);
+assertThrows(function() { Float32Array.apply(null, [b, 128, 1]); }, TypeError);
 
 // Test array.set in different combinations.
 
@@ -631,15 +616,15 @@ var b0 = a0.buffer
 
 var b1 = b0.slice(0)
 assertEquals(b0.byteLength, b1.byteLength)
-assertArrayPrefix([1, 2, 3, 4, 5, 6], Int8Array(b1))
+assertArrayPrefix([1, 2, 3, 4, 5, 6], new Int8Array(b1))
 
 var b2 = b0.slice(3)
 assertEquals(b0.byteLength - 3, b2.byteLength)
-assertArrayPrefix([4, 5, 6], Int8Array(b2))
+assertArrayPrefix([4, 5, 6], new Int8Array(b2))
 
 var b3 = b0.slice(2, 4)
 assertEquals(2, b3.byteLength)
-assertArrayPrefix([3, 4], Int8Array(b3))
+assertArrayPrefix([3, 4], new Int8Array(b3))
 
 function goo(a, i) {
   return a[i];
index 92792ac..38be10c 100644 (file)
@@ -151,6 +151,7 @@ var reducing_functions =
 
 function checkExpectedMessage(e) {
   assertTrue(e.message.indexOf("called on null or undefined") >= 0 ||
+             e.message.indexOf("invoked on undefined or null value") >= 0 ||
              e.message.indexOf("Cannot convert null to object") >= 0);
 }
 
index d5e1aee..8ca523c 100644 (file)
@@ -163,6 +163,8 @@ var knownProblems = {
   "ResolvePossiblyDirectEval": true,
   "Log": true,
   "DeclareGlobals": true,
+  "ArrayConstructor": true,
+  "InternalArrayConstructor": true,
 
   "PromoteScheduledException": true,
   "DeleteHandleScopeExtensions": true,
@@ -205,11 +207,18 @@ var knownProblems = {
   // Only applicable to generators.
   "_GeneratorNext": true,
   "_GeneratorThrow": true,
+
+  // Only applicable to DataViews.
+  "DataViewGetBuffer": true,
+  "DataViewGetByteLength": true,
+  "DataViewGetByteOffset": true
 };
 
 var currentlyUncallable = {
   // We need to find a way to test this without breaking the system.
-  "SystemBreak": true
+  "SystemBreak": true,
+  // Inserts an int3/stop instruction when run with --always-opt.
+  "_DebugBreakInOptimizedCode": true
 };
 
 function testNatives() {
index 699a341..ec84f35 100644 (file)
@@ -153,6 +153,7 @@ var knownProblems = {
   "ParallelRecompile": true,
   "InstallRecompiledCode": true,
   "NotifyDeoptimized": true,
+  "NotifyStubFailure": true,
   "NotifyOSR": true,
   "CreateObjectLiteralBoilerplate": true,
   "CloneLiteralBoilerplate": true,
@@ -206,11 +207,18 @@ var knownProblems = {
   // Only applicable to generators.
   "_GeneratorNext": true,
   "_GeneratorThrow": true,
+
+  // Only applicable to DataViews.
+  "DataViewGetBuffer": true,
+  "DataViewGetByteLength": true,
+  "DataViewGetByteOffset": true
 };
 
 var currentlyUncallable = {
   // We need to find a way to test this without breaking the system.
-  "SystemBreak": true
+  "SystemBreak": true,
+  // Inserts an int3/stop instruction when run with --always-opt.
+  "_DebugBreakInOptimizedCode": true
 };
 
 function testNatives() {
index 9739635..928fb46 100644 (file)
@@ -153,6 +153,7 @@ var knownProblems = {
   "ParallelRecompile": true,
   "InstallRecompiledCode": true,
   "NotifyDeoptimized": true,
+  "NotifyStubFailure": true,
   "NotifyOSR": true,
   "CreateObjectLiteralBoilerplate": true,
   "CloneLiteralBoilerplate": true,
@@ -162,6 +163,8 @@ var knownProblems = {
   "ResolvePossiblyDirectEval": true,
   "Log": true,
   "DeclareGlobals": true,
+  "ArrayConstructor": true,
+  "InternalArrayConstructor": true,
 
   "PromoteScheduledException": true,
   "DeleteHandleScopeExtensions": true,
@@ -204,11 +207,18 @@ var knownProblems = {
   // Only applicable to generators.
   "_GeneratorNext": true,
   "_GeneratorThrow": true,
+
+  // Only applicable to DataViews.
+  "DataViewGetBuffer": true,
+  "DataViewGetByteLength": true,
+  "DataViewGetByteOffset": true
 };
 
 var currentlyUncallable = {
   // We need to find a way to test this without breaking the system.
-  "SystemBreak": true
+  "SystemBreak": true,
+  // Inserts an int3/stop instruction when run with --always-opt.
+  "_DebugBreakInOptimizedCode": true
 };
 
 function testNatives() {
index 595af7d..d47db34 100644 (file)
@@ -153,6 +153,7 @@ var knownProblems = {
   "ParallelRecompile": true,
   "InstallRecompiledCode": true,
   "NotifyDeoptimized": true,
+  "NotifyStubFailure": true,
   "NotifyOSR": true,
   "CreateObjectLiteralBoilerplate": true,
   "CloneLiteralBoilerplate": true,
@@ -162,6 +163,8 @@ var knownProblems = {
   "ResolvePossiblyDirectEval": true,
   "Log": true,
   "DeclareGlobals": true,
+  "ArrayConstructor": true,
+  "InternalArrayConstructor": true,
 
   "PromoteScheduledException": true,
   "DeleteHandleScopeExtensions": true,
@@ -204,11 +207,18 @@ var knownProblems = {
   // Only applicable to generators.
   "_GeneratorNext": true,
   "_GeneratorThrow": true,
+
+  // Only applicable to DataViews.
+  "DataViewGetBuffer": true,
+  "DataViewGetByteLength": true,
+  "DataViewGetByteOffset": true
 };
 
 var currentlyUncallable = {
   // We need to find a way to test this without breaking the system.
-  "SystemBreak": true
+  "SystemBreak": true,
+  // Inserts an int3/stop instruction when run with --always-opt.
+  "_DebugBreakInOptimizedCode": true
 };
 
 function testNatives() {
index d60c59c..cf18745 100644 (file)
@@ -377,17 +377,39 @@ for (var i = 9; i >= 0; i--) {
   assertEquals(i, m.size);
 }
 
-// Test clear
-var a = new Set();
-s.add(42);
-assertTrue(s.has(42));
-s.clear();
-assertFalse(s.has(42));
-assertEquals(0, s.size);
 
-var m = new Map();
-m.set(42, true);
-assertTrue(m.has(42));
-m.clear();
-assertFalse(m.has(42));
-assertEquals(0, m.size);
+// Test Set clear
+(function() {
+  var s = new Set();
+  s.add(42);
+  assertTrue(s.has(42));
+  assertEquals(1, s.size);
+  s.clear();
+  assertFalse(s.has(42));
+  assertEquals(0, s.size);
+})();
+
+
+// Test Map clear
+(function() {
+  var m = new Map();
+  m.set(42, true);
+  assertTrue(m.has(42));
+  assertEquals(1, m.size);
+  m.clear();
+  assertFalse(m.has(42));
+  assertEquals(0, m.size);
+})();
+
+
+// Test WeakMap clear
+(function() {
+  var k = new Object();
+  var w = new WeakMap();
+  w.set(k, 23);
+  assertTrue(w.has(k));
+  assertEquals(23, w.get(k));
+  w.clear();
+  assertFalse(w.has(k));
+  assertEquals(undefined, w.get(k));
+})();
diff --git a/deps/v8/test/mjsunit/harmony/dataview-accessors.js b/deps/v8/test/mjsunit/harmony/dataview-accessors.js
new file mode 100644 (file)
index 0000000..9dd8fe3
--- /dev/null
@@ -0,0 +1,310 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// These tests are adapted from Khronos DataView tests
+
+var intArray1 =
+  [0, 1, 2, 3, 100, 101, 102, 103, 128, 129, 130, 131, 252, 253, 254, 255];
+var intArray2 =
+  [31, 32, 33, 0, 1, 2, 3, 100, 101, 102, 103, 128, 129, 130, 131, 252,
+    253, 254, 255];
+var initialArray =
+  [204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
+    204, 204, 204];
+
+var arayBuffer = null;
+var view = null;
+var viewStart = 0;
+var viewLength = 0;
+
+function getElementSize(func) {
+  switch (func) {
+    case "Int8":
+    case "Uint8":
+      return 1;
+    case "Int16":
+    case "Uint16":
+      return 2;
+    case "Int32":
+    case "Uint32":
+    case "Float32":
+      return 4;
+    case "Float64":
+      return 8;
+    default:
+      assertUnreachable(func);
+  }
+}
+
+function checkGet(func, index, expected, littleEndian) {
+  function doGet() {
+    return view["get" + func](index, littleEndian);
+  }
+  if (index >=0 && index + getElementSize(func) - 1 < view.byteLength)
+      assertSame(expected, doGet());
+  else
+      assertThrows(doGet, RangeError);
+}
+
+function checkSet(func, index, value, littleEndian) {
+  function doSet() {
+    view["set" + func](index, value, littleEndian);
+  }
+  if (index >= 0 &&
+      index + getElementSize(func) - 1 < view.byteLength) {
+    assertSame(undefined, doSet());
+    checkGet(func, index, value, littleEndian);
+  } else {
+    assertThrows(doSet, RangeError);
+  }
+}
+
+function test(isTestingGet, func, index, value, littleEndian) {
+  if (isTestingGet)
+    checkGet(func, index, value, littleEndian);
+  else
+    checkSet(func, index, value, littleEndian);
+}
+
+function createDataView(
+    array, frontPaddingNum, littleEndian, start, length) {
+  if (!littleEndian)
+    array.reverse();
+  var paddingArray = new Array(frontPaddingNum);
+  arrayBuffer = (new Uint8Array(paddingArray.concat(array))).buffer;
+  view = new DataView(arrayBuffer, viewStart, viewLength);
+  if (!littleEndian)
+    array.reverse(); // restore the array.
+}
+
+function runIntegerTestCases(isTestingGet, array, start, length) {
+  createDataView(array, 0, true, start, length);
+
+  test(isTestingGet, "Int8", 0, 0);
+  test(isTestingGet, "Int8", 8, -128);
+  test(isTestingGet, "Int8", 15, -1);
+
+  test(isTestingGet, "Uint8", 0, 0);
+  test(isTestingGet, "Uint8", 8, 128);
+  test(isTestingGet, "Uint8", 15, 255);
+
+  // Little endian.
+  test(isTestingGet, "Int16", 0, 256, true);
+  test(isTestingGet, "Int16", 5, 26213, true);
+  test(isTestingGet, "Int16", 9, -32127, true);
+  test(isTestingGet, "Int16", 14, -2, true);
+
+  // Big endian.
+  test(isTestingGet, "Int16", 0, 1);
+  test(isTestingGet, "Int16", 5, 25958);
+  test(isTestingGet, "Int16", 9, -32382);
+  test(isTestingGet, "Int16", 14, -257);
+
+  // Little endian.
+  test(isTestingGet, "Uint16", 0, 256, true);
+  test(isTestingGet, "Uint16", 5, 26213, true);
+  test(isTestingGet, "Uint16", 9, 33409, true);
+  test(isTestingGet, "Uint16", 14, 65534, true);
+
+  // Big endian.
+  test(isTestingGet, "Uint16", 0, 1);
+  test(isTestingGet, "Uint16", 5, 25958);
+  test(isTestingGet, "Uint16", 9, 33154);
+  test(isTestingGet, "Uint16", 14, 65279);
+
+  // Little endian.
+  test(isTestingGet, "Int32", 0, 50462976, true);
+  test(isTestingGet, "Int32", 3, 1717920771, true);
+  test(isTestingGet, "Int32", 6, -2122291354, true);
+  test(isTestingGet, "Int32", 9, -58490239, true);
+  test(isTestingGet, "Int32", 12,-66052, true);
+
+  // Big endian.
+  test(isTestingGet, "Int32", 0, 66051);
+  test(isTestingGet, "Int32", 3, 56911206);
+  test(isTestingGet, "Int32", 6, 1718059137);
+  test(isTestingGet, "Int32", 9, -2122152964);
+  test(isTestingGet, "Int32", 12, -50462977);
+
+  // Little endian.
+  test(isTestingGet, "Uint32", 0, 50462976, true);
+  test(isTestingGet, "Uint32", 3, 1717920771, true);
+  test(isTestingGet, "Uint32", 6, 2172675942, true);
+  test(isTestingGet, "Uint32", 9, 4236477057, true);
+  test(isTestingGet, "Uint32", 12,4294901244, true);
+
+  // Big endian.
+  test(isTestingGet, "Uint32", 0, 66051);
+  test(isTestingGet, "Uint32", 3, 56911206);
+  test(isTestingGet, "Uint32", 6, 1718059137);
+  test(isTestingGet, "Uint32", 9, 2172814332);
+  test(isTestingGet, "Uint32", 12, 4244504319);
+}
+
+function testFloat(isTestingGet, func, array, start, expected) {
+  // Little endian.
+  createDataView(array, 0, true, start);
+  test(isTestingGet, func, 0, expected, true);
+  createDataView(array, 3, true, start);
+  test(isTestingGet, func, 3, expected, true);
+  createDataView(array, 7, true, start);
+  test(isTestingGet, func, 7, expected, true);
+  createDataView(array, 10, true, start);
+  test(isTestingGet, func, 10, expected, true);
+
+  // Big endian.
+  createDataView(array, 0, false);
+  test(isTestingGet, func, 0, expected, false);
+  createDataView(array, 3, false);
+  test(isTestingGet, func, 3, expected, false);
+  createDataView(array, 7, false);
+  test(isTestingGet, func, 7, expected, false);
+  createDataView(array, 10, false);
+  test(isTestingGet, func, 10, expected, false);
+}
+
+function runFloatTestCases(isTestingGet, start) {
+  testFloat(isTestingGet, "Float32",
+    isTestingGet ? [0, 0, 32, 65] : initialArray, start, 10);
+
+  testFloat(isTestingGet, "Float32",
+    isTestingGet ? [164, 112, 157, 63] : initialArray,
+      start, 1.2300000190734863);
+  testFloat(isTestingGet, "Float32",
+    isTestingGet ? [95, 53, 50, 199] : initialArray,
+    start, -45621.37109375);
+  testFloat(isTestingGet, "Float32",
+    isTestingGet ? [255, 255, 255, 127] : initialArray,
+    start, NaN);
+  testFloat(isTestingGet, "Float32",
+    isTestingGet ? [255, 255, 255, 255] : initialArray,
+    start, -NaN);
+
+  testFloat(isTestingGet, "Float64",
+    isTestingGet ? [0, 0, 0, 0, 0, 0, 36, 64] : initialArray,
+    start, 10);
+  testFloat(isTestingGet, "Float64",
+    isTestingGet ? [174, 71, 225, 122, 20, 174, 243, 63] : initialArray,
+    start, 1.23);
+  testFloat(isTestingGet, "Float64",
+    isTestingGet ? [181, 55, 248, 30, 242, 179, 87, 193] : initialArray,
+    start, -6213576.4839);
+  testFloat(isTestingGet, "Float64",
+    isTestingGet ? [255, 255, 255, 255, 255, 255, 255, 127] : initialArray,
+    start, NaN);
+  testFloat(isTestingGet, "Float64",
+    isTestingGet ? [255, 255, 255, 255, 255, 255, 255, 255] : initialArray,
+    start, -NaN);
+}
+
+function runNegativeIndexTests(isTestingGet) {
+  createDataView(intArray1, 0, true, 0, 16);
+
+  test(isTestingGet, "Int8", -1, 0);
+  test(isTestingGet, "Int8", -2, 0);
+
+  test(isTestingGet, "Uint8", -1, 0);
+  test(isTestingGet, "Uint8", -2, 0);
+
+  test(isTestingGet, "Int16", -1, 1);
+  test(isTestingGet, "Int16", -2, 1);
+  test(isTestingGet, "Int16", -3, 1);
+
+  test(isTestingGet, "Uint16", -1, 1);
+  test(isTestingGet, "Uint16", -2, 1);
+  test(isTestingGet, "Uint16", -3, 1);
+
+  test(isTestingGet, "Int32", -1, 66051);
+  test(isTestingGet, "Int32", -3, 66051);
+  test(isTestingGet, "Int32", -5, 66051);
+
+  test(isTestingGet, "Uint32", -1, 66051);
+  test(isTestingGet, "Uint32", -3, 66051);
+  test(isTestingGet, "Uint32", -5, 66051);
+
+  createDataView([0, 0, 0, 0, 0, 0, 0, 0], 0, true, 0, 8);
+
+  test(isTestingGet, "Float32", -1, 0);
+  test(isTestingGet, "Float32", -3, 0);
+  test(isTestingGet, "Float32", -5, 0);
+
+  test(isTestingGet, "Float64", -1, 0);
+  test(isTestingGet, "Float64", -5, 0);
+  test(isTestingGet, "Float64", -9, 0);
+}
+
+
+function TestGetters() {
+  runIntegerTestCases(true, intArray1, 0, 16);
+  runFloatTestCases(true, 0);
+
+  runIntegerTestCases(true, intArray2, 3, 2);
+  runFloatTestCases(true, 3);
+
+  runNegativeIndexTests(true);
+}
+
+function TestSetters() {
+  runIntegerTestCases(false, initialArray, 0, 16);
+  runFloatTestCases(false);
+
+  runIntegerTestCases(false, initialArray, 3, 2);
+  runFloatTestCases(false, 7);
+
+  runNegativeIndexTests(false);
+
+}
+
+TestGetters();
+TestSetters();
+
+function TestGeneralAccessors() {
+  var a = new DataView(new ArrayBuffer(256));
+  function CheckAccessor(name) {
+    var f = a[name];
+    f.call(a, 0, 0); // should not throw
+    assertThrows(function() { f.call({}, 0, 0); }, TypeError);
+  }
+  CheckAccessor("getUint8");
+  CheckAccessor("setUint8");
+  CheckAccessor("getInt8");
+  CheckAccessor("setInt8");
+  CheckAccessor("getUint16");
+  CheckAccessor("setUint16");
+  CheckAccessor("getInt16");
+  CheckAccessor("setInt16");
+  CheckAccessor("getUint32");
+  CheckAccessor("setUint32");
+  CheckAccessor("getInt32");
+  CheckAccessor("setInt32");
+  CheckAccessor("getFloat32");
+  CheckAccessor("setFloat32");
+  CheckAccessor("getFloat64");
+  CheckAccessor("setFloat64");
+}
+
+TestGeneralAccessors();
index 01facd0..7fad97e 100644 (file)
@@ -324,6 +324,67 @@ TestGenerator(
     "foo",
     [2, "1foo3", 5, "4foo6", "foofoo"]);
 
+// Generator function instances.
+TestGenerator(GeneratorFunction(),
+              [undefined],
+              "foo",
+              [undefined]);
+
+TestGenerator(new GeneratorFunction(),
+              [undefined],
+              "foo",
+              [undefined]);
+
+TestGenerator(GeneratorFunction('yield 1;'),
+              [1, undefined],
+              "foo",
+              [1, undefined]);
+
+TestGenerator(
+    function() { return GeneratorFunction('x', 'y', 'yield x + y;')(1, 2) },
+    [3, undefined],
+    "foo",
+    [3, undefined]);
+
+// Access to this with formal arguments.
+TestGenerator(
+    function () {
+      return ({ x: 42, g: function* (a) { yield this.x } }).g(0);
+    },
+    [42, undefined],
+    "foo",
+    [42, undefined]);
+
+// Test that yield* re-yields received results without re-boxing.
+function TestDelegatingYield() {
+  function results(results) {
+    var i = 0;
+    function next() {
+      return results[i++];
+    }
+    return { next: next }
+  }
+  function* yield_results(expected) {
+    return yield* results(expected);
+  }
+  function collect_results(iter) {
+    var ret = [];
+    var result;
+    do {
+      result = iter.next();
+      ret.push(result);
+    } while (!result.done);
+    return ret;
+  }
+  // We have to put a full result for the end, because the return will re-box.
+  var expected = [{value: 1}, 13, "foo", {value: 34, done: true}];
+
+  // Sanity check.
+  assertEquals(expected, collect_results(results(expected)));
+  assertEquals(expected, collect_results(yield_results(expected)));
+}
+TestDelegatingYield();
+
 function TestTryCatch(instantiate) {
   function* g() { yield 1; try { yield 2; } catch (e) { yield e; } yield 3; }
   function Sentinel() {}
index 7667deb..aef063b 100644 (file)
@@ -110,6 +110,9 @@ function TestGeneratorFunction() {
   // Not all functions are generators.
   assertTrue(f instanceof Function);  // Sanity check.
   assertTrue(!(f instanceof GeneratorFunction));
+
+  assertTrue((new GeneratorFunction()) instanceof GeneratorFunction);
+  assertTrue(GeneratorFunction() instanceof GeneratorFunction);
 }
 TestGeneratorFunction();
 
index 21149c0..3bda78e 100644 (file)
@@ -54,6 +54,11 @@ assertThrows("function f() { for (var of of) { } }", SyntaxError);
 assertThrows("function f() { for (let of y) { } }", SyntaxError);
 assertThrows("function f() { for (let of of) { } }", SyntaxError);
 
+assertThrows("function f() { for (x = 3 of y) { } }", SyntaxError);
+assertThrows("function f() { for (var x = 3 of y) { } }", SyntaxError);
+assertThrows("function f() { for (let x = 3 of y) { } }", SyntaxError);
+
+
 // Alack, this appears to be valid.
 function f() { for (of of y) { } }
 function f() { for (let of of y) { } }
index c5c19e1..e1b0e65 100644 (file)
@@ -25,8 +25,6 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-// Flags: --harmony-typed-arrays
-
 // ArrayBuffer
 
 function TestByteLength(param, expectedByteLength) {
@@ -37,14 +35,15 @@ function TestByteLength(param, expectedByteLength) {
 function TestArrayBufferCreation() {
   TestByteLength(1, 1);
   TestByteLength(256, 256);
-  TestByteLength(-10, 0);
   TestByteLength(2.567, 2);
-  TestByteLength(-2.567, 0);
 
   TestByteLength("abc", 0);
 
   TestByteLength(0, 0);
 
+  assertThrows(function() { new ArrayBuffer(-10); }, RangeError);
+  assertThrows(function() { new ArrayBuffer(-2.567); }, RangeError);
+
 /* TODO[dslomov]: Reenable the test
   assertThrows(function() {
     var ab1 = new ArrayBuffer(0xFFFFFFFFFFFF)
@@ -91,6 +90,7 @@ function TestArrayBufferSlice() {
   TestSlice(0, 0, 1, 20);
   TestSlice(100, 100, 0, 100);
   TestSlice(100, 100, 0, 1000);
+
   TestSlice(0, 100, 5, 1);
 
   TestSlice(1, 100, -11, -10);
@@ -101,7 +101,7 @@ function TestArrayBufferSlice() {
   TestSlice(10, 100, 90, "100");
   TestSlice(10, 100, "90", "100");
 
-  TestSlice(0, 100, 90, "abc");
+  TestSlice(0,  100, 90, "abc");
   TestSlice(10, 100, "abc", 10);
 
   TestSlice(10, 100, 0.96, 10.96);
@@ -109,7 +109,6 @@ function TestArrayBufferSlice() {
   TestSlice(10, 100, 0.01, 10.01);
   TestSlice(10, 100, 0.01, 10.96);
 
-
   TestSlice(10, 100, 90);
   TestSlice(10, 100, -10);
 }
@@ -457,6 +456,74 @@ function TestTypedArraySet() {
 
 TestTypedArraySet();
 
+// DataView
+function TestDataViewConstructor() {
+  var ab = new ArrayBuffer(256);
+
+  var d1 = new DataView(ab, 1, 255);
+  assertSame(ab, d1.buffer);
+  assertSame(1, d1.byteOffset);
+  assertSame(255, d1.byteLength);
+
+  var d2 = new DataView(ab, 2);
+  assertSame(ab, d2.buffer);
+  assertSame(2, d2.byteOffset);
+  assertSame(254, d2.byteLength);
+
+  var d3 = new DataView(ab);
+  assertSame(ab, d3.buffer);
+  assertSame(0, d3.byteOffset);
+  assertSame(256, d3.byteLength);
+
+  var d3a = new DataView(ab, 1, 0);
+  assertSame(ab, d3a.buffer);
+  assertSame(1, d3a.byteOffset);
+  assertSame(0, d3a.byteLength);
+
+  var d3b = new DataView(ab, 256, 0);
+  assertSame(ab, d3b.buffer);
+  assertSame(256, d3b.byteOffset);
+  assertSame(0, d3b.byteLength);
+
+  var d3c = new DataView(ab, 256);
+  assertSame(ab, d3c.buffer);
+  assertSame(256, d3c.byteOffset);
+  assertSame(0, d3c.byteLength);
+
+  var d4 = new DataView(ab, 1, 3.1415926);
+  assertSame(ab, d4.buffer);
+  assertSame(1, d4.byteOffset);
+  assertSame(3, d4.byteLength);
+
+
+  // error cases
+  assertThrows(function() { new DataView(ab, -1); }, RangeError);
+  assertThrows(function() { new DataView(ab, 1, -1); }, RangeError);
+  assertThrows(function() { new DataView(); }, TypeError);
+  assertThrows(function() { new DataView([]); }, TypeError);
+  assertThrows(function() { new DataView(ab, 257); }, RangeError);
+  assertThrows(function() { new DataView(ab, 1, 1024); }, RangeError);
+}
+
+TestDataViewConstructor();
+
+function TestDataViewPropertyTypeChecks() {
+  var a = new DataView(new ArrayBuffer(10));
+  function CheckProperty(name) {
+    var d = Object.getOwnPropertyDescriptor(DataView.prototype, name);
+    var o = {}
+    assertThrows(function() {d.get.call(o);}, TypeError);
+    d.get.call(a); // shouldn't throw
+  }
+
+  CheckProperty("buffer");
+  CheckProperty("byteOffset");
+  CheckProperty("byteLength");
+}
+
+
+TestDataViewPropertyTypeChecks();
+
 // General tests for properties
 
 // Test property attribute [[Enumerable]]
@@ -475,6 +542,7 @@ TestEnumerable(ArrayBuffer, new ArrayBuffer());
 for(i = 0; i < typedArrayConstructors.lenght; i++) {
   TestEnumerable(typedArrayConstructors[i]);
 }
+TestEnumerable(DataView, new DataView(new ArrayBuffer()));
 
 // Test arbitrary properties on ArrayBuffer
 function TestArbitrary(m) {
@@ -491,8 +559,9 @@ TestArbitrary(new ArrayBuffer(256));
 for(i = 0; i < typedArrayConstructors.lenght; i++) {
   TestArbitary(new typedArrayConstructors[i](10));
 }
-
+TestArbitrary(new DataView(new ArrayBuffer(256)));
 
 
 // Test direct constructor call
-assertTrue(ArrayBuffer() instanceof ArrayBuffer);
+assertThrows(function() { ArrayBuffer(); }, TypeError);
+assertThrows(function() { DataView(new ArrayBuffer()); }, TypeError);
index 8d660e0..b502fb1 100644 (file)
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-// Flags: --allow-natives-syntax --expose-gc --parallel-recompilation
+// Flags: --allow-natives-syntax --expose-gc
+// Flags: --parallel-recompilation --parallel-recompilation-delay=50
+
+if (!%IsParallelRecompilationSupported()) {
+  print("Parallel recompilation is disabled. Skipping this test.");
+  quit();
+}
 
 function assertUnoptimized(fun) {
   assertTrue(%GetOptimizationStatus(fun) != 1);
 }
 
+function assertOptimized(fun) {
+  assertTrue(%GetOptimizationStatus(fun) != 2);
+}
+
 function f(x) {
   var xx = x * x;
   var xxstr = xx.toString();
@@ -53,10 +63,13 @@ assertUnoptimized(g);
 
 %OptimizeFunctionOnNextCall(f, "parallel");
 %OptimizeFunctionOnNextCall(g, "parallel");
-f(g(2));
+f(g(2));  // Trigger optimization.
 
-assertUnoptimized(f);
+assertUnoptimized(f);  // Not yet optimized.
 assertUnoptimized(g);
 
-%WaitUntilOptimized(f);
-%WaitUntilOptimized(g);
+%CompleteOptimization(f);  // Wait till optimized code is installed.
+%CompleteOptimization(g);
+
+assertOptimized(f);  // Optimized now.
+assertOptimized(g);
index 8d6274b..7e8d5b9 100644 (file)
@@ -47,10 +47,6 @@ regress/regress-crbug-160010: SKIP
 stack-traces-gc: PASS || FAIL
 
 ##############################################################################
-# TODO(wingo): Re-enable when GC bug from r15060 is solved.
-harmony/generators-iteration: SKIP
-
-##############################################################################
 # Too slow in debug mode with --stress-opt mode.
 compiler/regress-stacktrace-methods: PASS, SKIP if $mode == debug
 compiler/regress-funcaller: PASS, SKIP if $mode == debug
@@ -208,6 +204,9 @@ debug-liveedit-stack-padding: SKIP
 debug-liveedit-restart-frame: SKIP
 debug-liveedit-double-call: SKIP
 
+# Currently always deopt on minus zero
+math-floor-of-div-minus-zero: SKIP
+
 ##############################################################################
 # Native Client uses the ARM simulator so will behave similarly to arm
 # on mjsunit tests.
diff --git a/deps/v8/test/mjsunit/opt-elements-kind.js b/deps/v8/test/mjsunit/opt-elements-kind.js
new file mode 100644 (file)
index 0000000..3df1d9b
--- /dev/null
@@ -0,0 +1,161 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --allow-natives-syntax --smi-only-arrays --expose-gc
+// Flags: --notrack_allocation_sites
+
+// Limit the number of stress runs to reduce polymorphism it defeats some of the
+// assumptions made about how elements transitions work because transition stubs
+// end up going generic.
+// Flags: --stress-runs=2
+
+// Test element kind of objects.
+// Since --smi-only-arrays affects builtins, its default setting at compile
+// time sticks if built with snapshot.  If --smi-only-arrays is deactivated
+// by default, only a no-snapshot build actually has smi-only arrays enabled
+// in this test case.  Depending on whether smi-only arrays are actually
+// enabled, this test takes the appropriate code path to check smi-only arrays.
+
+support_smi_only_arrays = %HasFastSmiElements(new Array(1,2,3,4,5,6,7,8));
+
+if (support_smi_only_arrays) {
+  print("Tests include smi-only arrays.");
+} else {
+  print("Tests do NOT include smi-only arrays.");
+}
+
+var elements_kind = {
+  fast_smi_only            :  'fast smi only elements',
+  fast                     :  'fast elements',
+  fast_double              :  'fast double elements',
+  dictionary               :  'dictionary elements',
+  external_byte            :  'external byte elements',
+  external_unsigned_byte   :  'external unsigned byte elements',
+  external_short           :  'external short elements',
+  external_unsigned_short  :  'external unsigned short elements',
+  external_int             :  'external int elements',
+  external_unsigned_int    :  'external unsigned int elements',
+  external_float           :  'external float elements',
+  external_double          :  'external double elements',
+  external_pixel           :  'external pixel elements'
+}
+
+function getKind(obj) {
+  if (%HasFastSmiElements(obj)) return elements_kind.fast_smi_only;
+  if (%HasFastObjectElements(obj)) return elements_kind.fast;
+  if (%HasFastDoubleElements(obj)) return elements_kind.fast_double;
+  if (%HasDictionaryElements(obj)) return elements_kind.dictionary;
+  // Every external kind is also an external array.
+  assertTrue(%HasExternalArrayElements(obj));
+  if (%HasExternalByteElements(obj)) {
+    return elements_kind.external_byte;
+  }
+  if (%HasExternalUnsignedByteElements(obj)) {
+    return elements_kind.external_unsigned_byte;
+  }
+  if (%HasExternalShortElements(obj)) {
+    return elements_kind.external_short;
+  }
+  if (%HasExternalUnsignedShortElements(obj)) {
+    return elements_kind.external_unsigned_short;
+  }
+  if (%HasExternalIntElements(obj)) {
+    return elements_kind.external_int;
+  }
+  if (%HasExternalUnsignedIntElements(obj)) {
+    return elements_kind.external_unsigned_int;
+  }
+  if (%HasExternalFloatElements(obj)) {
+    return elements_kind.external_float;
+  }
+  if (%HasExternalDoubleElements(obj)) {
+    return elements_kind.external_double;
+  }
+  if (%HasExternalPixelElements(obj)) {
+    return elements_kind.external_pixel;
+  }
+}
+
+function assertKind(expected, obj, name_opt) {
+  if (!support_smi_only_arrays &&
+      expected == elements_kind.fast_smi_only) {
+    expected = elements_kind.fast;
+  }
+  assertEquals(expected, getKind(obj), name_opt);
+}
+
+function construct_smis() {
+  try {} catch (e) {} // TODO(titzer): DisableOptimization
+  var a = [0, 0, 0];
+  a[0] = 0;  // Send the COW array map to the steak house.
+  assertKind(elements_kind.fast_smi_only, a);
+  return a;
+}
+
+function construct_doubles() {
+  try {} catch (e) {} // TODO(titzer): DisableOptimization
+  var a = construct_smis();
+  a[0] = 1.5;
+  assertKind(elements_kind.fast_double, a);
+  return a;
+}
+
+function convert_mixed(array, value, kind) {
+  try {} catch (e) {} // TODO(titzer): DisableOptimization
+  array[1] = value;
+  assertKind(kind, array);
+  assertEquals(value, array[1]);
+}
+
+function test1() {
+  if (!support_smi_only_arrays) return;
+
+  // Test transition chain SMI->DOUBLE->FAST (crankshafted function will
+  // transition to FAST directly).
+  var smis = construct_smis();
+  convert_mixed(smis, 1.5, elements_kind.fast_double);
+
+  var doubles = construct_doubles();
+  convert_mixed(doubles, "three", elements_kind.fast);
+
+  convert_mixed(construct_smis(), "three", elements_kind.fast);
+  convert_mixed(construct_doubles(), "three", elements_kind.fast);
+
+  smis = construct_smis();
+  doubles = construct_doubles();
+  convert_mixed(smis, 1, elements_kind.fast);
+  convert_mixed(doubles, 1, elements_kind.fast);
+  assertTrue(%HaveSameMap(smis, doubles));
+}
+
+test1();
+gc(); // clear IC state
+test1();
+gc(); // clear IC state
+%OptimizeFunctionOnNextCall(test1);
+test1();
+gc(); // clear IC state
diff --git a/deps/v8/test/mjsunit/osr-elements-kind.js b/deps/v8/test/mjsunit/osr-elements-kind.js
new file mode 100644 (file)
index 0000000..9b0f506
--- /dev/null
@@ -0,0 +1,155 @@
+// Copyright 2012 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --allow-natives-syntax --smi-only-arrays --expose-gc
+// Flags: --notrack_allocation_sites
+
+// Limit the number of stress runs to reduce polymorphism it defeats some of the
+// assumptions made about how elements transitions work because transition stubs
+// end up going generic.
+// Flags: --stress-runs=2
+
+// Test element kind of objects.
+// Since --smi-only-arrays affects builtins, its default setting at compile
+// time sticks if built with snapshot.  If --smi-only-arrays is deactivated
+// by default, only a no-snapshot build actually has smi-only arrays enabled
+// in this test case.  Depending on whether smi-only arrays are actually
+// enabled, this test takes the appropriate code path to check smi-only arrays.
+
+support_smi_only_arrays = %HasFastSmiElements(new Array(1,2,3,4,5,6,7,8));
+
+if (support_smi_only_arrays) {
+  print("Tests include smi-only arrays.");
+} else {
+  print("Tests do NOT include smi-only arrays.");
+}
+
+var elements_kind = {
+  fast_smi_only            :  'fast smi only elements',
+  fast                     :  'fast elements',
+  fast_double              :  'fast double elements',
+  dictionary               :  'dictionary elements',
+  external_byte            :  'external byte elements',
+  external_unsigned_byte   :  'external unsigned byte elements',
+  external_short           :  'external short elements',
+  external_unsigned_short  :  'external unsigned short elements',
+  external_int             :  'external int elements',
+  external_unsigned_int    :  'external unsigned int elements',
+  external_float           :  'external float elements',
+  external_double          :  'external double elements',
+  external_pixel           :  'external pixel elements'
+}
+
+function getKind(obj) {
+  if (%HasFastSmiElements(obj)) return elements_kind.fast_smi_only;
+  if (%HasFastObjectElements(obj)) return elements_kind.fast;
+  if (%HasFastDoubleElements(obj)) return elements_kind.fast_double;
+  if (%HasDictionaryElements(obj)) return elements_kind.dictionary;
+  // Every external kind is also an external array.
+  assertTrue(%HasExternalArrayElements(obj));
+  if (%HasExternalByteElements(obj)) {
+    return elements_kind.external_byte;
+  }
+  if (%HasExternalUnsignedByteElements(obj)) {
+    return elements_kind.external_unsigned_byte;
+  }
+  if (%HasExternalShortElements(obj)) {
+    return elements_kind.external_short;
+  }
+  if (%HasExternalUnsignedShortElements(obj)) {
+    return elements_kind.external_unsigned_short;
+  }
+  if (%HasExternalIntElements(obj)) {
+    return elements_kind.external_int;
+  }
+  if (%HasExternalUnsignedIntElements(obj)) {
+    return elements_kind.external_unsigned_int;
+  }
+  if (%HasExternalFloatElements(obj)) {
+    return elements_kind.external_float;
+  }
+  if (%HasExternalDoubleElements(obj)) {
+    return elements_kind.external_double;
+  }
+  if (%HasExternalPixelElements(obj)) {
+    return elements_kind.external_pixel;
+  }
+}
+
+function assertKind(expected, obj, name_opt) {
+  if (!support_smi_only_arrays &&
+      expected == elements_kind.fast_smi_only) {
+    expected = elements_kind.fast;
+  }
+  assertEquals(expected, getKind(obj), name_opt);
+}
+
+// long-running loop forces OSR.
+for (var i = 0; i < 1000000; i++) { }
+
+if (support_smi_only_arrays) {
+  function construct_smis() {
+    try {} catch (e) {} // TODO(titzer): DisableOptimization
+    var a = [0, 0, 0];
+    a[0] = 0;  // Send the COW array map to the steak house.
+    assertKind(elements_kind.fast_smi_only, a);
+    return a;
+  }
+  function construct_doubles() {
+    try {} catch (e) {} // TODO(titzer): DisableOptimization
+    var a = construct_smis();
+    a[0] = 1.5;
+    assertKind(elements_kind.fast_double, a);
+    return a;
+  }
+
+  // Test transition chain SMI->DOUBLE->FAST (crankshafted function will
+  // transition to FAST directly).
+  function convert_mixed(array, value, kind) {
+    try {} catch (e) {} // TODO(titzer): DisableOptimization
+    array[1] = value;
+    assertKind(kind, array);
+    assertEquals(value, array[1]);
+  }
+  smis = construct_smis();
+  convert_mixed(smis, 1.5, elements_kind.fast_double);
+
+  doubles = construct_doubles();
+  convert_mixed(doubles, "three", elements_kind.fast);
+
+  convert_mixed(construct_smis(), "three", elements_kind.fast);
+  convert_mixed(construct_doubles(), "three", elements_kind.fast);
+
+  smis = construct_smis();
+  doubles = construct_doubles();
+  convert_mixed(smis, 1, elements_kind.fast);
+  convert_mixed(doubles, 1, elements_kind.fast);
+  assertTrue(%HaveSameMap(smis, doubles));
+}
+
+// Throw away type information in the ICs for next stress run.
+gc();
diff --git a/deps/v8/test/mjsunit/parallel-initial-prototype-change.js b/deps/v8/test/mjsunit/parallel-initial-prototype-change.js
new file mode 100644 (file)
index 0000000..9f698ba
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --allow-natives-syntax
+// Flags: --parallel-recompilation --parallel-recompilation-delay=50
+
+if (!%IsParallelRecompilationSupported()) {
+  print("Parallel recompilation is disabled. Skipping this test.");
+  quit();
+}
+
+function assertUnoptimized(fun) {
+  assertTrue(%GetOptimizationStatus(fun) != 1);
+}
+
+function f1(a, i) {
+  return a[i] + 0.5;
+}
+
+var arr = [0.0,,2.5];
+assertEquals(0.5, f1(arr, 0));
+assertEquals(0.5, f1(arr, 0));
+
+// Optimized code of f1 depends on initial object and array maps.
+%OptimizeFunctionOnNextCall(f1, "parallel");
+assertEquals(0.5, f1(arr, 0));
+assertUnoptimized(f1);      // Not yet optimized.
+Object.prototype[1] = 1.5;  // Invalidate current initial object map.
+assertEquals(2, f1(arr, 1));
+%CompleteOptimization(f1);  // Conclude optimization with...
+assertUnoptimized(f1);      // ... bailing out due to map dependency.
diff --git a/deps/v8/test/mjsunit/parallel-invalidate-transition-map.js b/deps/v8/test/mjsunit/parallel-invalidate-transition-map.js
new file mode 100644 (file)
index 0000000..2a2276f
--- /dev/null
@@ -0,0 +1,61 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --track-fields --track-double-fields --allow-natives-syntax
+// Flags: --parallel-recompilation --parallel-recompilation-delay=50
+
+if (!%IsParallelRecompilationSupported()) {
+  print("Parallel recompilation is disabled. Skipping this test.");
+  quit();
+}
+
+function assertUnoptimized(fun) {
+  assertTrue(%GetOptimizationStatus(fun) != 1);
+}
+
+function new_object() {
+  var o = {};
+  o.a = 1;
+  o.b = 2;
+  return o;
+}
+
+function add_field(obj) {
+  obj.c = 3;
+}
+
+add_field(new_object());
+add_field(new_object());
+%OptimizeFunctionOnNextCall(add_field, "parallel");
+
+var o = new_object();
+add_field(o);                      // Trigger optimization.
+assertUnoptimized(add_field);      // Not yet optimized.
+o.c = 2.2;                         // Invalidate transition map.
+%CompleteOptimization(add_field);  // Conclude optimization with...
+assertUnoptimized(add_field);      // ... bailing out due to map dependency.
+
index 86b375c..b56303e 100644 (file)
 // Flags: --nodead-code-elimination --parallel-recompilation
 // Flags: --allow-natives-syntax
 
+if (!%IsParallelRecompilationSupported()) {
+  print("Parallel recompilation is disabled. Skipping this test.");
+  quit();
+}
+
 function g() {  // g() cannot be optimized.
   const x = 1;
   x++;
@@ -43,4 +48,4 @@ f();
 %OptimizeFunctionOnNextCall(g, "parallel");
 f(0);  // g() is disabled for optimization on inlining attempt.
 // Attempt to optimize g() should not run into any assertion.
-%WaitUntilOptimized(g);
+%CompleteOptimization(g);
index 4b08f5a..387c8b4 100644 (file)
@@ -33,7 +33,7 @@ x="";
 function foo(){
   "use strict";
   var wxemsx=(4);
-  var wxemsx_0=Float32Array(wxemsx);
+  var wxemsx_0=new Float32Array(wxemsx);
   wxemsx_0[0]={};
 }
 
diff --git a/deps/v8/test/mjsunit/regress/regress-2691.js b/deps/v8/test/mjsunit/regress/regress-2691.js
new file mode 100644 (file)
index 0000000..e17be10
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --harmony-generators
+
+// Check that yield* on non-objects raises a TypeError.
+
+assertThrows('(function*() { yield* 10 })().next()', TypeError);
+assertThrows('(function*() { yield* {} })().next()', TypeError);
+assertThrows('(function*() { yield* undefined })().next()', TypeError);
index 8563e07..e61cb9f 100644 (file)
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-// Flags: --allow-natives-syntax
+// Flags: --noanalyze_environment_liveness
 
 var r = /r/;
-var a = "";
 function f() {
-  %OptimizeFunctionOnNextCall(f, "osr");
-  for (var i = 0; i < 1000000; i++) {
-    a += i.toString();
-    r[r] = function() {};
-  }
+  r[r] = function() {};
 }
 
-f();
+for (var i = 0; i < 300000; i++) {
+  f();
+}
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-245480.js b/deps/v8/test/mjsunit/regress/regress-crbug-245480.js
new file mode 100644 (file)
index 0000000..4769486
--- /dev/null
@@ -0,0 +1,90 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --allow-natives-syntax --smi-only-arrays --expose-gc
+// Flags: --track-allocation-sites --noalways-opt
+
+// Test element kind of objects.
+// Since --smi-only-arrays affects builtins, its default setting at compile
+// time sticks if built with snapshot.  If --smi-only-arrays is deactivated
+// by default, only a no-snapshot build actually has smi-only arrays enabled
+// in this test case.  Depending on whether smi-only arrays are actually
+// enabled, this test takes the appropriate code path to check smi-only arrays.
+
+// support_smi_only_arrays = %HasFastSmiElements(new Array(1,2,3,4,5,6,7,8));
+support_smi_only_arrays = true;
+
+if (support_smi_only_arrays) {
+  print("Tests include smi-only arrays.");
+} else {
+  print("Tests do NOT include smi-only arrays.");
+}
+
+function isHoley(obj) {
+  if (%HasFastHoleyElements(obj)) return true;
+  return false;
+}
+
+function assertHoley(obj, name_opt) {
+  assertEquals(true, isHoley(obj), name_opt);
+}
+
+function assertNotHoley(obj, name_opt) {
+  assertEquals(false, isHoley(obj), name_opt);
+}
+
+if (support_smi_only_arrays) {
+  function create_array(arg) {
+    return new Array(arg);
+  }
+
+  obj = create_array(0);
+  assertNotHoley(obj);
+  create_array(0);
+  %OptimizeFunctionOnNextCall(create_array);
+  obj = create_array(10);
+  assertHoley(obj);
+}
+
+// The code below would assert in debug or crash in release
+function f(length) {
+  return new Array(length)
+}
+
+f(0);
+f(0);
+%OptimizeFunctionOnNextCall(f);
+var a = f(10);
+
+function g(a) {
+  return a[0];
+}
+
+var b = [0];
+g(b);
+g(b);
+assertEquals(undefined, g(a));
\ No newline at end of file
diff --git a/deps/v8/test/mjsunit/regress/regress-debug-deopt-while-recompile.js b/deps/v8/test/mjsunit/regress/regress-debug-deopt-while-recompile.js
new file mode 100644 (file)
index 0000000..3a66235
--- /dev/null
@@ -0,0 +1,84 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --expose-debug-as debug --allow-natives-syntax
+
+Debug = debug.Debug;
+
+function listener(event, exec_state, event_data, data) {
+  if (event != Debug.DebugEvent.Break) return;
+  try {
+    assertEquals("foo", exec_state.frame(0).evaluate("bar").value());
+  } catch (e) {
+    exception = e;
+  };
+  listened++;
+};
+
+var exception = null;
+var listened = 0;
+
+var f = function() {
+  var bar = "foo";
+  var baz = bar;  // Break point should be here.
+  return bar;
+}
+
+var g = function() {
+  var bar = "foo";
+  var baz = bar;  // Break point should be here.
+  return bar;
+}
+
+f();
+f();
+g();
+g();
+
+// Mark with builtin.
+%OptimizeFunctionOnNextCall(f);
+if (%IsParallelRecompilationSupported()) {
+  %OptimizeFunctionOnNextCall(g, "parallel");
+}
+
+// Activate debugger.
+Debug.setListener(listener);
+
+ // Set break point.
+Debug.setBreakPoint(f, 2, 0);
+Debug.setBreakPoint(g, 2, 0);
+
+// Trigger break point.
+f();
+g();
+
+// Assert that break point is set at expected location.
+assertTrue(Debug.showBreakPoints(f).indexOf("[B0]var baz = bar;") > 0);
+assertTrue(Debug.showBreakPoints(g).indexOf("[B0]var baz = bar;") > 0);
+
+assertEquals(2, listened);
+assertNull(exception);
diff --git a/deps/v8/test/mjsunit/regress/regress-embedded-cons-string.js b/deps/v8/test/mjsunit/regress/regress-embedded-cons-string.js
new file mode 100644 (file)
index 0000000..afb3835
--- /dev/null
@@ -0,0 +1,66 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --fold-constants --nodead-code-elimination
+// Flags: --expose-gc --allow-natives-syntax
+// Flags: --parallel-recompilation --parallel-recompilation-delay=300
+
+if (!%IsParallelRecompilationSupported()) {
+  print("Parallel recompilation is disabled. Skipping this test.");
+  quit();
+}
+
+function assertUnoptimized(fun) {
+  assertTrue(%GetOptimizationStatus(fun) != 1);
+}
+
+function test(fun) {
+  fun();
+  fun();
+  %OptimizeFunctionOnNextCall(fun, "parallel");
+  fun();  // Trigger optimization in the background.
+  gc();   // Tenure cons string.
+  assertUnoptimized(fun);      // Compilation not complete yet.
+  %CompleteOptimization(fun);  // Compilation embeds tenured cons string.
+  gc();   // Visit embedded cons string during mark compact.
+}
+
+function f() {
+  return "abcdefghijklmn" + "123456789";
+}
+
+function g() {
+  return "abcdefghijklmn\u2603" + "123456789";
+}
+
+function h() {
+  return "abcdefghijklmn\u2603" + "123456789\u2604";
+}
+
+test(f);
+test(g);
+test(h);
diff --git a/deps/v8/test/mjsunit/regress/regress-function-length-strict.js b/deps/v8/test/mjsunit/regress/regress-function-length-strict.js
new file mode 100644 (file)
index 0000000..700f34a
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Test that the length property of a function is read-only in strict mode.
+
+"use strict";
+
+function foo(a, b, c) {
+  return b;
+}
+
+var desc = Object.getOwnPropertyDescriptor(foo, 'length');
+assertEquals(3, desc.value);
+assertFalse(desc.writable);
+assertFalse(desc.enumerable);
+assertFalse(desc.configurable);
+assertThrows(function() { foo.length = 2; }, TypeError);
diff --git a/deps/v8/test/mjsunit/regress/regress-opt-after-debug-deopt.js b/deps/v8/test/mjsunit/regress/regress-opt-after-debug-deopt.js
new file mode 100644 (file)
index 0000000..be12cc5
--- /dev/null
@@ -0,0 +1,69 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --expose-debug-as debug --allow-natives-syntax
+// Flags: --parallel-recompilation --parallel-recompilation-delay=300
+
+if (!%IsParallelRecompilationSupported()) {
+  print("Parallel recompilation is disabled. Skipping this test.");
+  quit();
+}
+
+Debug = debug.Debug;
+
+function listener(event, exec_state, event_data, data) {
+  if (event != Debug.DebugEvent.Break) return;
+  try {
+    assertEquals("foo", exec_state.frame(0).evaluate("a").value());
+  } catch (e) {
+    exception = e;
+  };
+  listened++;
+};
+
+var exception = null;
+var listened = 0;
+
+var f = function() {
+  var a = "foo";
+  var b = a.substring("1");
+  [a, b].sort();
+  return a;
+}
+
+f();
+f();
+%OptimizeFunctionOnNextCall(f, "parallel");  // Mark with builtin.
+f();                           // Kick off parallel recompilation.
+
+Debug.setListener(listener);   // Activate debugger.
+Debug.setBreakPoint(f, 2, 0);  // Force deopt.
+%CompleteOptimization(f);      // Install optimized code.
+
+f();                           // Trigger break point.
+assertEquals(1, listened);
+assertNull(exception);
diff --git a/deps/v8/test/mjsunit/regress/regress-polymorphic-store.js b/deps/v8/test/mjsunit/regress/regress-polymorphic-store.js
new file mode 100644 (file)
index 0000000..4723a7f
--- /dev/null
@@ -0,0 +1,48 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Flags: --allow-natives-syntax
+
+var o1 = {};
+o1.f1 = function() { return 10; };
+o1.x = 5;
+o1.y = 2;
+var o2 = {};
+o2.x = 5;
+o2.y = 5;
+
+function store(o, v) {
+  o.y = v;
+}
+
+store(o2, 0);
+store(o1, 0);
+store(o2, 0);
+%OptimizeFunctionOnNextCall(store);
+store(o1, 10);
+assertEquals(5, o1.x);
+assertEquals(10, o1.y);
diff --git a/deps/v8/test/mjsunit/regress/string-split-monkey-patching.js b/deps/v8/test/mjsunit/regress/string-split-monkey-patching.js
new file mode 100644 (file)
index 0000000..ea5c867
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Test that String.prototype.split with an regexp does not call the
+// monkey-patchable Array.prototype.push or PutValue.
+
+Array.prototype.push = assertUnreachable;
+
+Object.defineProperty(Array.prototype, "0", {
+  get: assertUnreachable,
+  set: assertUnreachable });
+
+"-".split(/-/);
+"I-must-not-use-push!".split(/-/);
+"Oh-no!".split(/(-)/);
+"a".split(/(a)|(b)/);
index 00e8f6e..626929d 100644 (file)
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+// This test case is not compatible with optimization stress because the
+// generated profile will look vastly different when more is optimized.
+// Flags: --nostress-opt --noalways-opt
+
 // Load implementations from <project root>/tools.
 // Files: tools/splaytree.js tools/codemap.js tools/csvparser.js
 // Files: tools/consarray.js tools/profile.js tools/profile_view.js
diff --git a/deps/v8/test/webkit/Array-isArray-expected.txt b/deps/v8/test/webkit/Array-isArray-expected.txt
new file mode 100644 (file)
index 0000000..5af2c15
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure correct behaviour of Array.array
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Array.isArray([]) is true
+PASS Array.isArray(new Array) is true
+PASS Array.isArray(Array()) is true
+PASS Array.isArray('abc'.match(/(a)*/g)) is true
+PASS (function(){ return Array.isArray(arguments); })() is false
+PASS Array.isArray() is false
+PASS Array.isArray(null) is false
+PASS Array.isArray(undefined) is false
+PASS Array.isArray(true) is false
+PASS Array.isArray(false) is false
+PASS Array.isArray('a string') is false
+PASS Array.isArray({}) is false
+PASS Array.isArray({length: 5}) is false
+PASS Array.isArray({__proto__: Array.prototype, length:1, 0:1, 1:2}) is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/Array-isArray.js b/deps/v8/test/webkit/Array-isArray.js
new file mode 100644 (file)
index 0000000..995d7dc
--- /dev/null
@@ -0,0 +1,39 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure correct behaviour of Array.array");
+
+shouldBeTrue("Array.isArray([])");
+shouldBeTrue("Array.isArray(new Array)");
+shouldBeTrue("Array.isArray(Array())");
+shouldBeTrue("Array.isArray('abc'.match(/(a)*/g))");
+shouldBeFalse("(function(){ return Array.isArray(arguments); })()");
+shouldBeFalse("Array.isArray()");
+shouldBeFalse("Array.isArray(null)");
+shouldBeFalse("Array.isArray(undefined)");
+shouldBeFalse("Array.isArray(true)");
+shouldBeFalse("Array.isArray(false)");
+shouldBeFalse("Array.isArray('a string')");
+shouldBeFalse("Array.isArray({})");
+shouldBeFalse("Array.isArray({length: 5})");
+shouldBeFalse("Array.isArray({__proto__: Array.prototype, length:1, 0:1, 1:2})");
diff --git a/deps/v8/test/webkit/JSON-stringify-replacer-expected.txt b/deps/v8/test/webkit/JSON-stringify-replacer-expected.txt
new file mode 100644 (file)
index 0000000..cea851e
--- /dev/null
@@ -0,0 +1,50 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure correct behaviour of replacer functions in JSON.stringify
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS JSON.stringify(object, returnUndefined) is undefined.
+PASS JSON.stringify(array, returnUndefined) is undefined.
+PASS JSON.stringify(object, returnObjectFor1) is '{"0":0,"1":{},"2":2}'
+PASS JSON.stringify(array, returnObjectFor1) is '[0,{},2,null]'
+PASS JSON.stringify(object, returnArrayFor1) is '{"0":0,"1":[],"2":2}'
+PASS JSON.stringify(array, returnArrayFor1) is '[0,[],2,null]'
+PASS JSON.stringify(object, returnUndefinedFor1) is '{"0":0,"2":2}'
+PASS JSON.stringify(array, returnUndefinedFor1) is '[0,null,2,null]'
+PASS JSON.stringify(object, returnFunctionFor1) is '{"0":0,"2":2}'
+PASS JSON.stringify(array, returnFunctionFor1) is '[0,null,2,null]'
+PASS JSON.stringify(object, returnNullFor1) is '{"0":0,"1":null,"2":2}'
+PASS JSON.stringify(array, returnNullFor1) is '[0,null,2,null]'
+PASS JSON.stringify(object, returnStringForUndefined) is '{"0":0,"1":1,"2":2,"3":"undefined value"}'
+PASS JSON.stringify(array, returnStringForUndefined) is '[0,1,2,"undefined value"]'
+PASS JSON.stringify(object, returnCycleObjectFor1) threw exception TypeError: Converting circular structure to JSON.
+PASS JSON.stringify(array, returnCycleObjectFor1) threw exception TypeError: Converting circular structure to JSON.
+PASS JSON.stringify(object, returnCycleArrayFor1) threw exception TypeError: Converting circular structure to JSON.
+PASS JSON.stringify(array, returnCycleArrayFor1) threw exception TypeError: Converting circular structure to JSON.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/JSON-stringify-replacer.js b/deps/v8/test/webkit/JSON-stringify-replacer.js
new file mode 100644 (file)
index 0000000..def10e8
--- /dev/null
@@ -0,0 +1,95 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure correct behaviour of replacer functions in JSON.stringify");
+
+var object = {0:0, 1:1, 2:2, 3:undefined};
+var array = [0, 1, 2, undefined];
+function returnUndefined(){}
+function returnObjectFor1(k, v) {
+    if (k == "1")
+        return {};
+    return v;
+}
+function returnArrayFor1(k, v) {
+    if (k == "1")
+        return [];
+    return v;
+}
+function returnUndefinedFor1(k, v) {
+    if (k == "1")
+        return undefined;
+    return v;
+}
+function returnNullFor1(k, v) {
+    if (k == "1")
+        return null;
+    return v;
+}
+function returnCycleObjectFor1(k, v) {
+    if (k == "1")
+        return object;
+    return v;
+}
+function returnCycleArrayFor1(k, v) {
+    if (k == "1")
+        return array;
+    return v;
+}
+function returnFunctionFor1(k, v) {
+    if (k == "1")
+        return function(){};
+    return v;
+}
+function returnStringForUndefined(k, v) {
+    if (v === undefined)
+        return "undefined value";
+    return v;
+}
+
+shouldBeUndefined("JSON.stringify(object, returnUndefined)");
+shouldBeUndefined("JSON.stringify(array, returnUndefined)");
+
+shouldBe("JSON.stringify(object, returnObjectFor1)", '\'{"0":0,"1":{},"2":2}\'');
+shouldBe("JSON.stringify(array, returnObjectFor1)", '\'[0,{},2,null]\'');
+
+shouldBe("JSON.stringify(object, returnArrayFor1)", '\'{"0":0,"1":[],"2":2}\'');
+shouldBe("JSON.stringify(array, returnArrayFor1)", '\'[0,[],2,null]\'');
+
+shouldBe("JSON.stringify(object, returnUndefinedFor1)", '\'{"0":0,"2":2}\'');
+shouldBe("JSON.stringify(array, returnUndefinedFor1)", '\'[0,null,2,null]\'');
+
+shouldBe("JSON.stringify(object, returnFunctionFor1)", '\'{"0":0,"2":2}\'');
+shouldBe("JSON.stringify(array, returnFunctionFor1)", '\'[0,null,2,null]\'');
+
+shouldBe("JSON.stringify(object, returnNullFor1)", '\'{"0":0,"1":null,"2":2}\'');
+shouldBe("JSON.stringify(array, returnNullFor1)", '\'[0,null,2,null]\'');
+
+shouldBe("JSON.stringify(object, returnStringForUndefined)", '\'{"0":0,"1":1,"2":2,"3":"undefined value"}\'');
+shouldBe("JSON.stringify(array, returnStringForUndefined)", '\'[0,1,2,"undefined value"]\'');
+
+shouldThrow("JSON.stringify(object, returnCycleObjectFor1)");
+shouldThrow("JSON.stringify(array, returnCycleObjectFor1)");
+
+shouldThrow("JSON.stringify(object, returnCycleArrayFor1)");
+shouldThrow("JSON.stringify(array, returnCycleArrayFor1)");
diff --git a/deps/v8/test/webkit/Object-create-expected.txt b/deps/v8/test/webkit/Object-create-expected.txt
new file mode 100644 (file)
index 0000000..519cfb4
--- /dev/null
@@ -0,0 +1,48 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure correct behaviour of Object.defineProperties
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Object.create() threw exception TypeError: Object prototype may only be an Object or null.
+PASS Object.create('a string') threw exception TypeError: Object prototype may only be an Object or null.
+PASS Object.create({}, 'a string') threw exception TypeError: Property description must be an object: a.
+PASS Object.create(null, 'a string') threw exception TypeError: Property description must be an object: a.
+PASS JSON.stringify(Object.create(null,{property:{value:'foo', enumerable:true}, property2:{value:'foo', enumerable:true}})) is '{"property":"foo","property2":"foo"}'
+PASS JSON.stringify(Object.create({},{property:{value:'foo', enumerable:true}, property2:{value:'foo', enumerable:true}})) is '{"property":"foo","property2":"foo"}'
+PASS JSON.stringify(Object.create({},{property:{value:'foo'}, property2:{value:'foo', enumerable:true}})) is '{"property2":"foo"}'
+PASS JSON.stringify(Object.create(null,{property:{value:'foo'}, property2:{value:'foo', enumerable:true}})) is '{"property2":"foo"}'
+PASS Object.getPrototypeOf(Object.create(Array.prototype)) is Array.prototype
+PASS Object.getPrototypeOf(Object.create(null)) is null
+PASS Object.create(null, DescriptorWithValueGetter).foo is true
+PASS Object.create(null, DescriptorWithEnumerableGetter).foo is true
+PASS Object.create(null, DescriptorWithConfigurableGetter).foo is true
+PASS Object.create(null, DescriptorWithWritableGetter).foo is true
+PASS Object.create(null, DescriptorWithGetGetter).foo is true
+PASS Object.create(null, DescriptorWithSetGetter).foo is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/Object-create.js b/deps/v8/test/webkit/Object-create.js
new file mode 100644 (file)
index 0000000..97fd740
--- /dev/null
@@ -0,0 +1,48 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure correct behaviour of Object.defineProperties");
+
+shouldThrow("Object.create()");
+shouldThrow("Object.create('a string')");
+shouldThrow("Object.create({}, 'a string')");
+shouldThrow("Object.create(null, 'a string')");
+shouldBe("JSON.stringify(Object.create(null,{property:{value:'foo', enumerable:true}, property2:{value:'foo', enumerable:true}}))", '\'{"property":"foo","property2":"foo"}\'');
+shouldBe("JSON.stringify(Object.create({},{property:{value:'foo', enumerable:true}, property2:{value:'foo', enumerable:true}}))", '\'{"property":"foo","property2":"foo"}\'');
+shouldBe("JSON.stringify(Object.create({},{property:{value:'foo'}, property2:{value:'foo', enumerable:true}}))", '\'{"property2":"foo"}\'');
+shouldBe("JSON.stringify(Object.create(null,{property:{value:'foo'}, property2:{value:'foo', enumerable:true}}))", '\'{"property2":"foo"}\'');
+shouldBe("Object.getPrototypeOf(Object.create(Array.prototype))", "Array.prototype");
+shouldBe("Object.getPrototypeOf(Object.create(null))", "null");
+function valueGet() { return true; }
+var DescriptorWithValueGetter = { foo: Object.create(null, { value: { get: valueGet }})};
+var DescriptorWithEnumerableGetter = { foo: Object.create(null, { value: {value: true}, enumerable: { get: valueGet }})};
+var DescriptorWithConfigurableGetter = { foo: Object.create(null, { value: {value: true}, configurable: { get: valueGet }})};
+var DescriptorWithWritableGetter = { foo: Object.create(null, { value: {value: true}, writable: { get: valueGet }})};
+var DescriptorWithGetGetter = { foo: Object.create(null, { get: { get: function() { return valueGet } }})};
+var DescriptorWithSetGetter = { foo: Object.create(null, { get: { value: valueGet}, set: { get: function(){ return valueGet; } }})};
+shouldBeTrue("Object.create(null, DescriptorWithValueGetter).foo");
+shouldBeTrue("Object.create(null, DescriptorWithEnumerableGetter).foo");
+shouldBeTrue("Object.create(null, DescriptorWithConfigurableGetter).foo");
+shouldBeTrue("Object.create(null, DescriptorWithWritableGetter).foo");
+shouldBeTrue("Object.create(null, DescriptorWithGetGetter).foo");
+shouldBeTrue("Object.create(null, DescriptorWithSetGetter).foo");
diff --git a/deps/v8/test/webkit/Object-defineProperties-expected.txt b/deps/v8/test/webkit/Object-defineProperties-expected.txt
new file mode 100644 (file)
index 0000000..50178b9
--- /dev/null
@@ -0,0 +1,42 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure correct behaviour of Object.defineProperties
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Object.defineProperties() threw exception TypeError: Object.defineProperties called on non-object.
+PASS Object.defineProperties('a string') threw exception TypeError: Object.defineProperties called on non-object.
+PASS Object.defineProperties({}, 'a string') threw exception TypeError: Property description must be an object: a.
+PASS JSON.stringify(Object.defineProperties({},{property:{value:'foo', enumerable:true}, property2:{value:'foo', enumerable:true}})) is '{"property":"foo","property2":"foo"}'
+PASS JSON.stringify(Object.defineProperties({},{property:{value:'foo'}, property2:{value:'foo', enumerable:true}})) is '{"property2":"foo"}'
+PASS JSON.stringify(Object.defineProperties({property:'foo'},{property:{value:'foo', enumerable:true}, property2:{value:'foo', enumerable:true}})) is '{"property":"foo","property2":"foo"}'
+PASS JSON.stringify(Object.defineProperties({property:'foo'},{property:{value:'foo', enumerable:false}, property2:{value:'foo', enumerable:true}})) is '{"property2":"foo"}'
+PASS JSON.stringify(Object.defineProperties({property:'foo'},{property:{value:'foo'}, property2:{value:'foo', enumerable:true}})) is '{"property":"foo","property2":"foo"}'
+PASS Object.defineProperties(emptyObject, {foo:{value: true}, bar:{get:function(){}, writable:true}}) threw exception TypeError: Invalid property.  A property cannot both have accessors and be writable or have a value, #<Object>.
+PASS 'foo' in emptyObject is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/Object-defineProperties.js b/deps/v8/test/webkit/Object-defineProperties.js
new file mode 100644 (file)
index 0000000..39067e6
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure correct behaviour of Object.defineProperties");
+
+shouldThrow("Object.defineProperties()");
+shouldThrow("Object.defineProperties('a string')");
+shouldThrow("Object.defineProperties({}, 'a string')");
+shouldBe("JSON.stringify(Object.defineProperties({},{property:{value:'foo', enumerable:true}, property2:{value:'foo', enumerable:true}}))", '\'{"property":"foo","property2":"foo"}\'');
+shouldBe("JSON.stringify(Object.defineProperties({},{property:{value:'foo'}, property2:{value:'foo', enumerable:true}}))", '\'{"property2":"foo"}\'');
+shouldBe("JSON.stringify(Object.defineProperties({property:'foo'},{property:{value:'foo', enumerable:true}, property2:{value:'foo', enumerable:true}}))", '\'{"property":"foo","property2":"foo"}\'');
+shouldBe("JSON.stringify(Object.defineProperties({property:'foo'},{property:{value:'foo', enumerable:false}, property2:{value:'foo', enumerable:true}}))", '\'{"property2":"foo"}\'');
+shouldBe("JSON.stringify(Object.defineProperties({property:'foo'},{property:{value:'foo'}, property2:{value:'foo', enumerable:true}}))", '\'{"property":"foo","property2":"foo"}\'');
+emptyObject={};
+shouldThrow("Object.defineProperties(emptyObject, {foo:{value: true}, bar:{get:function(){}, writable:true}})");
+shouldBeFalse("'foo' in emptyObject");
diff --git a/deps/v8/test/webkit/Object-keys-expected.txt b/deps/v8/test/webkit/Object-keys-expected.txt
new file mode 100644 (file)
index 0000000..f9aa9d1
--- /dev/null
@@ -0,0 +1,43 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure correct behaviour of Object.keys
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Object.keys({}) is []
+PASS Object.keys({a:null}) is ['a']
+PASS Object.keys({a:null, b:null}) is ['a', 'b']
+PASS Object.keys({b:null, a:null}) is ['b', 'a']
+PASS Object.keys([]) is []
+PASS Object.keys([null]) is ['0']
+PASS Object.keys([null,null]) is ['0','1']
+PASS Object.keys([null,null,,,,null]) is ['0','1','5']
+PASS Object.keys({__proto__:{a:null}}) is []
+PASS Object.keys({__proto__:[1,2,3]}) is []
+PASS x=[];x.__proto__=[1,2,3];Object.keys(x) is []
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/Object-keys.js b/deps/v8/test/webkit/Object-keys.js
new file mode 100644 (file)
index 0000000..a8aba48
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure correct behaviour of Object.keys");
+
+shouldBe("Object.keys({})", "[]");
+shouldBe("Object.keys({a:null})", "['a']");
+shouldBe("Object.keys({a:null, b:null})", "['a', 'b']");
+shouldBe("Object.keys({b:null, a:null})", "['b', 'a']");
+shouldBe("Object.keys([])", "[]");
+shouldBe("Object.keys([null])", "['0']");
+shouldBe("Object.keys([null,null])", "['0','1']");
+shouldBe("Object.keys([null,null,,,,null])", "['0','1','5']");
+shouldBe("Object.keys({__proto__:{a:null}})", "[]");
+shouldBe("Object.keys({__proto__:[1,2,3]})", "[]");
+shouldBe("x=[];x.__proto__=[1,2,3];Object.keys(x)", "[]");
diff --git a/deps/v8/test/webkit/ToNumber-expected.txt b/deps/v8/test/webkit/ToNumber-expected.txt
new file mode 100644 (file)
index 0000000..16efd12
--- /dev/null
@@ -0,0 +1,170 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test the JavaScript ToNumber operation.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS +undefined is NaN
+PASS +null is 0
+PASS +false is 0
+PASS +true is 1
+PASS +2 is 2
+PASS +'' is 0
+PASS +' ' is 0
+PASS +' 1' is 1
+PASS +'1 ' is 1
+PASS +'x1' is NaN
+PASS +'1x' is NaN
+PASS +'0x1' is 1
+PASS +'1x0' is NaN
+PASS +(nullCharacter + '1') is NaN
+PASS +('1' + nullCharacter) is NaN
+PASS +('1' + nullCharacter + '1') is NaN
+PASS +(nonASCIICharacter + '1') is NaN
+PASS +('1' + nonASCIICharacter) is NaN
+PASS +('1' + nonASCIICharacter + '1') is NaN
+PASS +('1' + nonASCIINonSpaceCharacter) is NaN
+PASS +(nonASCIINonSpaceCharacter + '1') is NaN
+PASS +('1' + nonASCIINonSpaceCharacter + '1') is NaN
+PASS +(illegalUTF16Sequence + '1') is NaN
+PASS +('1' + illegalUTF16Sequence) is NaN
+PASS +('1' + illegalUTF16Sequence + '1') is NaN
+PASS +'inf' is NaN
+PASS +'infinity' is NaN
+PASS +'Inf' is NaN
+PASS +'+inf' is NaN
+PASS +'+infinity' is NaN
+PASS +'+Inf' is NaN
+PASS +'-inf' is NaN
+PASS +'-infinity' is NaN
+PASS +'-Inf' is NaN
+PASS +'Infinity' is Infinity
+PASS +'+Infinity' is Infinity
+PASS +'-Infinity' is -Infinity
+PASS +'++1' is NaN
+PASS +'AB' is NaN
+PASS +'0xAB' is 171
+PASS +'1e1' is 10
+PASS +'1E1' is 10
+PASS +tab is 0
+PASS +nbsp is 0
+PASS +ff is 0
+PASS +vt is 0
+PASS +cr is 0
+PASS +lf is 0
+PASS +ls is 0
+PASS +ps is 0
+PASS +oghamSpaceMark is 0
+PASS +mongolianVowelSeparator is 0
+PASS +enQuad is 0
+PASS +emQuad is 0
+PASS +enSpace is 0
+PASS +emSpace is 0
+PASS +threePerEmSpace is 0
+PASS +fourPerEmSpace is 0
+PASS +sixPerEmSpace is 0
+PASS +figureSpace is 0
+PASS +punctuationSpace is 0
+PASS +thinSpace is 0
+PASS +hairSpace is 0
+PASS +narrowNoBreakSpace is 0
+PASS +mediumMathematicalSpace is 0
+PASS +ideographicSpace is 0
+PASS +(tab + '1') is 1
+PASS +(nbsp + '1') is 1
+PASS +(ff + '1') is 1
+PASS +(vt + '1') is 1
+PASS +(cr + '1') is 1
+PASS +(lf + '1') is 1
+PASS +(ls + '1') is 1
+PASS +(ps + '1') is 1
+PASS +(oghamSpaceMark + '1') is 1
+PASS +(mongolianVowelSeparator + '1') is 1
+PASS +(enQuad + '1') is 1
+PASS +(emQuad + '1') is 1
+PASS +(enSpace + '1') is 1
+PASS +(emSpace + '1') is 1
+PASS +(threePerEmSpace + '1') is 1
+PASS +(fourPerEmSpace + '1') is 1
+PASS +(sixPerEmSpace + '1') is 1
+PASS +(figureSpace + '1') is 1
+PASS +(punctuationSpace + '1') is 1
+PASS +(thinSpace + '1') is 1
+PASS +(hairSpace + '1') is 1
+PASS +(narrowNoBreakSpace + '1') is 1
+PASS +(mediumMathematicalSpace + '1') is 1
+PASS +(ideographicSpace + '1') is 1
+PASS +('1' + tab) is 1
+PASS +('1' + nbsp) is 1
+PASS +('1' + ff) is 1
+PASS +('1' + vt) is 1
+PASS +('1' + cr) is 1
+PASS +('1' + lf) is 1
+PASS +('1' + ls) is 1
+PASS +('1' + ps) is 1
+PASS +('1' + oghamSpaceMark) is 1
+PASS +('1' + mongolianVowelSeparator) is 1
+PASS +('1' + enQuad) is 1
+PASS +('1' + emQuad) is 1
+PASS +('1' + enSpace) is 1
+PASS +('1' + emSpace) is 1
+PASS +('1' + threePerEmSpace) is 1
+PASS +('1' + fourPerEmSpace) is 1
+PASS +('1' + sixPerEmSpace) is 1
+PASS +('1' + figureSpace) is 1
+PASS +('1' + punctuationSpace) is 1
+PASS +('1' + thinSpace) is 1
+PASS +('1' + hairSpace) is 1
+PASS +('1' + narrowNoBreakSpace) is 1
+PASS +('1' + mediumMathematicalSpace) is 1
+PASS +('1' + ideographicSpace) is 1
+PASS +('1' + tab + '1') is NaN
+PASS +('1' + nbsp + '1') is NaN
+PASS +('1' + ff + '1') is NaN
+PASS +('1' + vt + '1') is NaN
+PASS +('1' + cr + '1') is NaN
+PASS +('1' + lf + '1') is NaN
+PASS +('1' + ls + '1') is NaN
+PASS +('1' + ps + '1') is NaN
+PASS +('1' + oghamSpaceMark + '1') is NaN
+PASS +('1' + mongolianVowelSeparator + '1') is NaN
+PASS +('1' + enQuad + '1') is NaN
+PASS +('1' + emQuad + '1') is NaN
+PASS +('1' + enSpace + '1') is NaN
+PASS +('1' + emSpace + '1') is NaN
+PASS +('1' + threePerEmSpace + '1') is NaN
+PASS +('1' + fourPerEmSpace + '1') is NaN
+PASS +('1' + sixPerEmSpace + '1') is NaN
+PASS +('1' + figureSpace + '1') is NaN
+PASS +('1' + punctuationSpace + '1') is NaN
+PASS +('1' + thinSpace + '1') is NaN
+PASS +('1' + hairSpace + '1') is NaN
+PASS +('1' + narrowNoBreakSpace + '1') is NaN
+PASS +('1' + mediumMathematicalSpace + '1') is NaN
+PASS +('1' + ideographicSpace + '1') is NaN
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/ToNumber.js b/deps/v8/test/webkit/ToNumber.js
new file mode 100644 (file)
index 0000000..8d1a40b
--- /dev/null
@@ -0,0 +1,194 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Test the JavaScript ToNumber operation.')
+
+var nullCharacter = String.fromCharCode(0);
+var nonASCIICharacter = String.fromCharCode(0x100);
+var nonASCIINonSpaceCharacter = String.fromCharCode(0x13A0);
+var illegalUTF16Sequence = String.fromCharCode(0xD800);
+
+var tab = String.fromCharCode(9);
+var nbsp = String.fromCharCode(0xA0);
+var ff = String.fromCharCode(0xC);
+var vt = String.fromCharCode(0xB);
+var cr = String.fromCharCode(0xD);
+var lf = String.fromCharCode(0xA);
+var ls = String.fromCharCode(0x2028);
+var ps = String.fromCharCode(0x2029);
+
+var oghamSpaceMark = String.fromCharCode(0x1680);
+var mongolianVowelSeparator = String.fromCharCode(0x180E);
+var enQuad = String.fromCharCode(0x2000);
+var emQuad = String.fromCharCode(0x2001);
+var enSpace = String.fromCharCode(0x2002);
+var emSpace = String.fromCharCode(0x2003);
+var threePerEmSpace = String.fromCharCode(0x2004);
+var fourPerEmSpace = String.fromCharCode(0x2005);
+var sixPerEmSpace = String.fromCharCode(0x2006);
+var figureSpace = String.fromCharCode(0x2007);
+var punctuationSpace = String.fromCharCode(0x2008);
+var thinSpace = String.fromCharCode(0x2009);
+var hairSpace = String.fromCharCode(0x200A);
+var narrowNoBreakSpace = String.fromCharCode(0x202F);
+var mediumMathematicalSpace = String.fromCharCode(0x205F);
+var ideographicSpace = String.fromCharCode(0x3000);
+
+shouldBe("+undefined", "NaN");
+shouldBe("+null", "0");
+shouldBe("+false", "0");
+shouldBe("+true", "1");
+shouldBe("+2", "2");
+shouldBe("+''", "0");
+shouldBe("+' '", "0");
+shouldBe("+' 1'", "1");
+shouldBe("+'1 '", "1");
+shouldBe("+'x1'", "NaN");
+shouldBe("+'1x'", "NaN");
+shouldBe("+'0x1'", "1");
+shouldBe("+'1x0'", "NaN");
+shouldBe("+(nullCharacter + '1')", "NaN");
+shouldBe("+('1' + nullCharacter)", "NaN");
+shouldBe("+('1' + nullCharacter + '1')", "NaN");
+shouldBe("+(nonASCIICharacter + '1')", "NaN");
+shouldBe("+('1' + nonASCIICharacter)", "NaN");
+shouldBe("+('1' + nonASCIICharacter + '1')", "NaN");
+shouldBe("+('1' + nonASCIINonSpaceCharacter)", "NaN");
+shouldBe("+(nonASCIINonSpaceCharacter + '1')", "NaN");
+shouldBe("+('1' + nonASCIINonSpaceCharacter + '1')", "NaN");
+shouldBe("+(illegalUTF16Sequence + '1')", "NaN");
+shouldBe("+('1' + illegalUTF16Sequence)", "NaN");
+shouldBe("+('1' + illegalUTF16Sequence + '1')", "NaN");
+shouldBe("+'inf'", "NaN");
+shouldBe("+'infinity'", "NaN");
+shouldBe("+'Inf'", "NaN");
+shouldBe("+'+inf'", "NaN");
+shouldBe("+'+infinity'", "NaN");
+shouldBe("+'+Inf'", "NaN");
+shouldBe("+'-inf'", "NaN");
+shouldBe("+'-infinity'", "NaN");
+shouldBe("+'-Inf'", "NaN");
+shouldBe("+'Infinity'", "Infinity");
+shouldBe("+'+Infinity'", "Infinity");
+shouldBe("+'-Infinity'", "-Infinity");
+shouldBe("+'++1'", "NaN");
+shouldBe("+'AB'", "NaN");
+shouldBe("+'0xAB'", "171");
+shouldBe("+'1e1'", "10");
+shouldBe("+'1E1'", "10");
+shouldBe("+tab", "0");
+shouldBe("+nbsp", "0");
+shouldBe("+ff", "0");
+shouldBe("+vt", "0");
+shouldBe("+cr", "0");
+shouldBe("+lf", "0");
+shouldBe("+ls", "0");
+shouldBe("+ps", "0");
+shouldBe("+oghamSpaceMark", "0");
+shouldBe("+mongolianVowelSeparator", "0");
+shouldBe("+enQuad", "0");
+shouldBe("+emQuad", "0");
+shouldBe("+enSpace", "0");
+shouldBe("+emSpace", "0");
+shouldBe("+threePerEmSpace", "0");
+shouldBe("+fourPerEmSpace", "0");
+shouldBe("+sixPerEmSpace", "0");
+shouldBe("+figureSpace", "0");
+shouldBe("+punctuationSpace", "0");
+shouldBe("+thinSpace", "0");
+shouldBe("+hairSpace", "0");
+shouldBe("+narrowNoBreakSpace", "0");
+shouldBe("+mediumMathematicalSpace", "0");
+shouldBe("+ideographicSpace", "0");
+shouldBe("+(tab + '1')", "1");
+shouldBe("+(nbsp + '1')", "1");
+shouldBe("+(ff + '1')", "1");
+shouldBe("+(vt + '1')", "1");
+shouldBe("+(cr + '1')", "1");
+shouldBe("+(lf + '1')", "1");
+shouldBe("+(ls + '1')", "1");
+shouldBe("+(ps + '1')", "1");
+shouldBe("+(oghamSpaceMark + '1')", "1");
+shouldBe("+(mongolianVowelSeparator + '1')", "1");
+shouldBe("+(enQuad + '1')", "1");
+shouldBe("+(emQuad + '1')", "1");
+shouldBe("+(enSpace + '1')", "1");
+shouldBe("+(emSpace + '1')", "1");
+shouldBe("+(threePerEmSpace + '1')", "1");
+shouldBe("+(fourPerEmSpace + '1')", "1");
+shouldBe("+(sixPerEmSpace + '1')", "1");
+shouldBe("+(figureSpace + '1')", "1");
+shouldBe("+(punctuationSpace + '1')", "1");
+shouldBe("+(thinSpace + '1')", "1");
+shouldBe("+(hairSpace + '1')", "1");
+shouldBe("+(narrowNoBreakSpace + '1')", "1");
+shouldBe("+(mediumMathematicalSpace + '1')", "1");
+shouldBe("+(ideographicSpace + '1')", "1");
+shouldBe("+('1' + tab)", "1");
+shouldBe("+('1' + nbsp)", "1");
+shouldBe("+('1' + ff)", "1");
+shouldBe("+('1' + vt)", "1");
+shouldBe("+('1' + cr)", "1");
+shouldBe("+('1' + lf)", "1");
+shouldBe("+('1' + ls)", "1");
+shouldBe("+('1' + ps)", "1");
+shouldBe("+('1' + oghamSpaceMark)", "1");
+shouldBe("+('1' + mongolianVowelSeparator)", "1");
+shouldBe("+('1' + enQuad)", "1");
+shouldBe("+('1' + emQuad)", "1");
+shouldBe("+('1' + enSpace)", "1");
+shouldBe("+('1' + emSpace)", "1");
+shouldBe("+('1' + threePerEmSpace)", "1");
+shouldBe("+('1' + fourPerEmSpace)", "1");
+shouldBe("+('1' + sixPerEmSpace)", "1");
+shouldBe("+('1' + figureSpace)", "1");
+shouldBe("+('1' + punctuationSpace)", "1");
+shouldBe("+('1' + thinSpace)", "1");
+shouldBe("+('1' + hairSpace)", "1");
+shouldBe("+('1' + narrowNoBreakSpace)", "1");
+shouldBe("+('1' + mediumMathematicalSpace)", "1");
+shouldBe("+('1' + ideographicSpace)", "1");
+shouldBe("+('1' + tab + '1')", "NaN");
+shouldBe("+('1' + nbsp + '1')", "NaN");
+shouldBe("+('1' + ff + '1')", "NaN");
+shouldBe("+('1' + vt + '1')", "NaN");
+shouldBe("+('1' + cr + '1')", "NaN");
+shouldBe("+('1' + lf + '1')", "NaN");
+shouldBe("+('1' + ls + '1')", "NaN");
+shouldBe("+('1' + ps + '1')", "NaN");
+shouldBe("+('1' + oghamSpaceMark + '1')", "NaN");
+shouldBe("+('1' + mongolianVowelSeparator + '1')", "NaN");
+shouldBe("+('1' + enQuad + '1')", "NaN");
+shouldBe("+('1' + emQuad + '1')", "NaN");
+shouldBe("+('1' + enSpace + '1')", "NaN");
+shouldBe("+('1' + emSpace + '1')", "NaN");
+shouldBe("+('1' + threePerEmSpace + '1')", "NaN");
+shouldBe("+('1' + fourPerEmSpace + '1')", "NaN");
+shouldBe("+('1' + sixPerEmSpace + '1')", "NaN");
+shouldBe("+('1' + figureSpace + '1')", "NaN");
+shouldBe("+('1' + punctuationSpace + '1')", "NaN");
+shouldBe("+('1' + thinSpace + '1')", "NaN");
+shouldBe("+('1' + hairSpace + '1')", "NaN");
+shouldBe("+('1' + narrowNoBreakSpace + '1')", "NaN");
+shouldBe("+('1' + mediumMathematicalSpace + '1')", "NaN");
+shouldBe("+('1' + ideographicSpace + '1')", "NaN");
diff --git a/deps/v8/test/webkit/add-recovery-expected.txt b/deps/v8/test/webkit/add-recovery-expected.txt
new file mode 100644 (file)
index 0000000..1d961b5
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that speculation recovery of destructive additions on unboxed integers works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS destructiveAddForBoxedInteger({x:1}, 2, 4) is 9
+PASS destructiveAddForBoxedInteger({x:2147483647}, 2, 4) is 2147483655
+PASS destructiveAddForBoxedInteger({x:2}, 2147483647, 4) is 4294967300
+PASS destructiveAddForBoxedInteger({x:2147483647}, 2147483647, 4) is 6442450945
+PASS destructiveAddForBoxedInteger({x:1}, 2, 2147483647) is 2147483652
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/add-recovery.js b/deps/v8/test/webkit/add-recovery.js
new file mode 100644 (file)
index 0000000..d204ef1
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that speculation recovery of destructive additions on unboxed integers works."
+);
+
+function destructiveAddForBoxedInteger(a,b,c) {
+    var a_ = a.x;
+    var d = a_ + b;
+    return c + d + b;
+}
+
+// warm-up foo to be integer
+for (var i = 0; i < 100; ++i) {
+    destructiveAddForBoxedInteger({x:1}, 2, 3);
+}
+
+shouldBe("destructiveAddForBoxedInteger({x:1}, 2, 4)", "9");
+shouldBe("destructiveAddForBoxedInteger({x:2147483647}, 2, 4)", "2147483655");
+shouldBe("destructiveAddForBoxedInteger({x:2}, 2147483647, 4)", "4294967300");
+shouldBe("destructiveAddForBoxedInteger({x:2147483647}, 2147483647, 4)", "6442450945");
+shouldBe("destructiveAddForBoxedInteger({x:1}, 2, 2147483647)", "2147483652");
diff --git a/deps/v8/test/webkit/apply-varargs-expected.txt b/deps/v8/test/webkit/apply-varargs-expected.txt
new file mode 100644 (file)
index 0000000..9c0ccb9
--- /dev/null
@@ -0,0 +1,41 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test that we properly fill in missing args with "undefined" in JIT code.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS caller(0) is undefined
+PASS caller(1) is undefined
+PASS caller(2) is undefined
+PASS caller(3) is undefined
+PASS caller(4) is undefined
+PASS caller(5) is undefined
+PASS caller(6) is undefined
+PASS caller(7) is undefined
+PASS caller(8) is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/apply-varargs.js b/deps/v8/test/webkit/apply-varargs.js
new file mode 100644 (file)
index 0000000..cc7e380
--- /dev/null
@@ -0,0 +1,97 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Test that we properly fill in missing args with "undefined" in JIT code.');
+
+// Regression test for <rdar://problem/10763509>
+
+
+function callee(a1, a2, a3, a4, a5, a6, a7, a8)
+{
+    // We expect that the unused actual parameters will be filled
+    // with undefined.
+    if (a1 !== undefined)
+        return "Arg1 is wrong";
+    if (a2 !== undefined)
+        return "Arg2 is wrong";
+    if (a3 !== undefined)
+        return "Arg3 is wrong";
+    if (a4 !== undefined)
+        return "Arg4 is wrong";
+    if (a5 !== undefined)
+        return "Arg5 is wrong";
+    if (a6 !== undefined)
+        return "Arg6 is wrong";
+    if (a7 !== undefined)
+        return "Arg7 is wrong";
+    if (a8 !== undefined)
+        return "Arg8 is wrong";
+
+    return undefined;
+}
+
+function dummy(a1, a2, a3, a4, a5, a6, a7, a8)
+{
+}
+
+function BaseObj()
+{
+}
+
+function caller(testArgCount)
+{
+    var baseObj = new BaseObj();
+
+    var allArgs = [0, "String", callee, true, null, 2.5, [1, 2, 3], {'a': 1, 'b' : 2}];
+    argCounts = [8, testArgCount];
+
+    for (argCountIndex = 0; argCountIndex < argCounts.length; argCountIndex++) {
+        argCount = argCounts[argCountIndex];
+
+        var varArgs = [];
+        for (i = 0; i < argCount; i++)
+            varArgs[i] = undefined;
+
+        for (numCalls = 0; numCalls < 10; numCalls++) {
+            // Run multiple times so that the JIT kicks in
+            dummy.apply(baseObj, allArgs);
+            var result = callee.apply(baseObj, varArgs);
+            if (result != undefined)
+                return result;
+        }
+    }
+
+    return undefined;
+}
+
+shouldBe("caller(0)", 'undefined');
+shouldBe("caller(1)", 'undefined');
+shouldBe("caller(2)", 'undefined');
+shouldBe("caller(3)", 'undefined');
+shouldBe("caller(4)", 'undefined');
+shouldBe("caller(5)", 'undefined');
+shouldBe("caller(6)", 'undefined');
+shouldBe("caller(7)", 'undefined');
+shouldBe("caller(8)", 'undefined');
+
+var successfullyParsed = true;
diff --git a/deps/v8/test/webkit/arguments-bad-index-expected.txt b/deps/v8/test/webkit/arguments-bad-index-expected.txt
new file mode 100644 (file)
index 0000000..9295378
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks whether arguments crashes when passed a bad index.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS indexArguments(1, "a") is "a"
+PASS indexArguments("1 ", "a") is undefined
+PASS indexArguments(0xDEADBEEF) is undefined
+PASS indexArguments(0xFFFFFFFF) is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/arguments-bad-index.js b/deps/v8/test/webkit/arguments-bad-index.js
new file mode 100644 (file)
index 0000000..a4dd4d5
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks whether arguments crashes when passed a bad index."
+);
+
+function indexArguments(index)
+{
+    return arguments[index];
+}
+
+shouldBe('indexArguments(1, "a")', '"a"');
+shouldBe('indexArguments("1 ", "a")', 'undefined');
+shouldBe('indexArguments(0xDEADBEEF)', 'undefined');
+shouldBe('indexArguments(0xFFFFFFFF)', 'undefined');
+
diff --git a/deps/v8/test/webkit/array-constructor-host-call-expected.txt b/deps/v8/test/webkit/array-constructor-host-call-expected.txt
new file mode 100644 (file)
index 0000000..aeefefb
--- /dev/null
@@ -0,0 +1,38 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that array construction via a host call works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS array instanceof Array is true
+PASS array.length is 100
+PASS array instanceof Array is true
+PASS array.length is 100
+PASS array instanceof Array is true
+PASS array.length is 100
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-constructor-host-call.js b/deps/v8/test/webkit/array-constructor-host-call.js
new file mode 100644 (file)
index 0000000..50d6489
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that array construction via a host call works."
+);
+
+function constructArray(arrayConstructor) {
+    return new arrayConstructor(100);
+}
+
+for (var i = 0; i < 3; ++i) {
+    var array = constructArray(Array);
+    shouldBeTrue("array instanceof Array");
+    shouldBe("array.length", "100");
+}
diff --git a/deps/v8/test/webkit/array-defineOwnProperty-expected.txt b/deps/v8/test/webkit/array-defineOwnProperty-expected.txt
new file mode 100644 (file)
index 0000000..c35bb0a
--- /dev/null
@@ -0,0 +1,67 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks the behavior of [[DefineOwnProperty]] applied to Array objects (see ES5.1 15.4.5.1).
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Object.defineProperty([], 'x', { get:function(){return true;} }).x is true
+PASS Object.defineProperty([], 'length', { value: 1 }).length is 1
+PASS var a = Object.defineProperty([], 'length', { writable: false }); a[1] = 1; a.length is 0
+PASS var a = Object.defineProperty([], 'length', { writable: false }); a.length = 1; a.length is 0
+PASS var a = Object.defineProperty([], 'length', {}); a.length = 1; a.length is 1
+PASS Object.defineProperty([], 'length', { get:function(){return true;} }) threw exception TypeError: Cannot redefine property: length.
+PASS Object.defineProperty([], 'length', { enumerable: true }) threw exception TypeError: Cannot redefine property: length.
+PASS Object.defineProperty([], 'length', { configurable: true }) threw exception TypeError: Cannot redefine property: length.
+PASS Object.defineProperty(Object.defineProperty([], 'length', { writable: false }), 'length', { writable: true }) threw exception TypeError: Cannot redefine property: length.
+PASS var a = Object.defineProperty([], '0', { value: 42 }); a[0] is 42
+PASS var a = Object.defineProperty([42], '0', { writable: false }); a[0] = 1; a[0] is 42
+PASS var a = Object.defineProperty([42], '0', { enumerable: false }); a[0] + Object.keys(a).length is 42
+PASS var a = Object.defineProperty([42], '0', { configurable: false }); a.length = 0; a[0] is 42
+PASS var foo = 0; Object.defineProperty([], '0', { set:function(x){foo = x;} })[0] = 42; foo is 42
+PASS Object.defineProperty([], '0', { get:function(){return true;} })[0] is true
+PASS Object.defineProperty(Object.defineProperty([true], '0', { configurable:true, writable: false }), '0', { writable: true })[0] is true
+PASS Object.defineProperty(Object.defineProperty([true], '0', { configurable:false, writable: false }), '0', { writable: true })[0] threw exception TypeError: Cannot redefine property: 0.
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: 1, writable:true }), '0', { value: 2 })[0] is 2
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: 1 }), '0', { value: 1 })[0] is 1
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: Number.NaN }), '0', { value: -Number.NaN })[0] is Number.NaN
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: 'okay'.substring(0,2) }), '0', { value: 'not ok'.substring(4,6) })[0] is "ok"
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: true }), '0', { value: true })[0] is true
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: false }), '0', { value: false })[0] is false
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: null }), '0', { value: null })[0] is null
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: undefined }), '0', { value: undefined })[0] is undefined
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: Math }), '0', { value: Math })[0] is Math
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: 1 }), '0', { value: 2 })[0] threw exception TypeError: Cannot redefine property: 0.
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: 'okay' }), '0', { value: 'not ok' })[0] threw exception TypeError: Cannot redefine property: 0.
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: true }), '0', { value: false })[0] threw exception TypeError: Cannot redefine property: 0.
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: false }), '0', { value: true })[0] threw exception TypeError: Cannot redefine property: 0.
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: Math }), '0', { value: Object })[0] threw exception TypeError: Cannot redefine property: 0.
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: null }), '0', { value: undefined })[0] threw exception TypeError: Cannot redefine property: 0.
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: undefined }), '0', { value: null })[0] threw exception TypeError: Cannot redefine property: 0.
+PASS arrObj[0] = 42; arrObj.set; is true
+PASS arrObj[1] = true; arrObj[1]; is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-defineOwnProperty.js b/deps/v8/test/webkit/array-defineOwnProperty.js
new file mode 100644 (file)
index 0000000..68d4e19
--- /dev/null
@@ -0,0 +1,83 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This test checks the behavior of [[DefineOwnProperty]] applied to Array objects (see ES5.1 15.4.5.1).");
+
+// Test that properties other than length, array indices are handled as normal.
+shouldBeTrue("Object.defineProperty([], 'x', { get:function(){return true;} }).x");
+
+// The length property can be set, and can be made read-only.
+shouldBe("Object.defineProperty([], 'length', { value: 1 }).length", '1');
+shouldBe("var a = Object.defineProperty([], 'length', { writable: false }); a[1] = 1; a.length", '0');
+shouldBe("var a = Object.defineProperty([], 'length', { writable: false }); a.length = 1; a.length", '0');
+// If writable is not specified, it should not change.
+shouldBe("var a = Object.defineProperty([], 'length', {}); a.length = 1; a.length", '1');
+
+// The length property can be replaced with an accessor, or made either enumerable or configurable.
+shouldThrow("Object.defineProperty([], 'length', { get:function(){return true;} })");
+shouldThrow("Object.defineProperty([], 'length', { enumerable: true })");
+shouldThrow("Object.defineProperty([], 'length', { configurable: true })");
+shouldThrow("Object.defineProperty(Object.defineProperty([], 'length', { writable: false }), 'length', { writable: true })");
+
+// The value of an indexed property can be set.
+shouldBe("var a = Object.defineProperty([], '0', { value: 42 }); a[0]", '42');
+// An indexed property can be made non-writable/enumerable/configurable.
+shouldBe("var a = Object.defineProperty([42], '0', { writable: false }); a[0] = 1; a[0]", '42');
+shouldBe("var a = Object.defineProperty([42], '0', { enumerable: false }); a[0] + Object.keys(a).length", '42');
+shouldBe("var a = Object.defineProperty([42], '0', { configurable: false }); a.length = 0; a[0]", '42');
+// An indexed property can be defined as an accessor.
+shouldBe("var foo = 0; Object.defineProperty([], '0', { set:function(x){foo = x;} })[0] = 42; foo", '42');
+shouldBeTrue("Object.defineProperty([], '0', { get:function(){return true;} })[0]")
+// A configurable, non-writable property can be made writable, but a non-configurable one cannot.
+shouldBeTrue("Object.defineProperty(Object.defineProperty([true], '0', { configurable:true, writable: false }), '0', { writable: true })[0]");
+shouldThrow("Object.defineProperty(Object.defineProperty([true], '0', { configurable:false, writable: false }), '0', { writable: true })[0]");
+
+// Reassigning the value is okay if the property is writable.
+shouldBe("Object.defineProperty(Object.defineProperty([], '0', { value: 1, writable:true }), '0', { value: 2 })[0]", '2');
+// Reassigning the value is okay if the value doesn't change.
+shouldBe("Object.defineProperty(Object.defineProperty([], '0', { value: 1 }), '0', { value: 1 })[0]", '1');
+shouldBe("Object.defineProperty(Object.defineProperty([], '0', { value: Number.NaN }), '0', { value: -Number.NaN })[0]", 'Number.NaN');
+shouldBe("Object.defineProperty(Object.defineProperty([], '0', { value: 'okay'.substring(0,2) }), '0', { value: 'not ok'.substring(4,6) })[0]", '"ok"');
+shouldBe("Object.defineProperty(Object.defineProperty([], '0', { value: true }), '0', { value: true })[0]", 'true');
+shouldBe("Object.defineProperty(Object.defineProperty([], '0', { value: false }), '0', { value: false })[0]", 'false');
+shouldBe("Object.defineProperty(Object.defineProperty([], '0', { value: null }), '0', { value: null })[0]", 'null');
+shouldBe("Object.defineProperty(Object.defineProperty([], '0', { value: undefined }), '0', { value: undefined })[0]", 'undefined');
+shouldBe("Object.defineProperty(Object.defineProperty([], '0', { value: Math }), '0', { value: Math })[0]", 'Math');
+// Reassigning the value is not okay if the value changes.
+shouldThrow("Object.defineProperty(Object.defineProperty([], '0', { value: 1 }), '0', { value: 2 })[0]");
+shouldThrow("Object.defineProperty(Object.defineProperty([], '0', { value: 'okay' }), '0', { value: 'not ok' })[0]");
+shouldThrow("Object.defineProperty(Object.defineProperty([], '0', { value: true }), '0', { value: false })[0]");
+shouldThrow("Object.defineProperty(Object.defineProperty([], '0', { value: false }), '0', { value: true })[0]");
+shouldThrow("Object.defineProperty(Object.defineProperty([], '0', { value: Math }), '0', { value: Object })[0]");
+// Reassigning the value is not okay if the type changes.
+shouldThrow("Object.defineProperty(Object.defineProperty([], '0', { value: null }), '0', { value: undefined })[0]");
+shouldThrow("Object.defineProperty(Object.defineProperty([], '0', { value: undefined }), '0', { value: null })[0]");
+
+Object.defineProperty(Array.prototype, "0", { set: function () { throw false; } });
+Object.defineProperty(Array.prototype, "1", { set: function () { throw false; } });
+var arrObj = [ , false ];
+Object.defineProperty(arrObj, "0", { set: function (x) { this.set = x === 42; } });
+shouldBeTrue("arrObj[0] = 42; arrObj.set;");
+shouldBeTrue("arrObj[1] = true; arrObj[1];");
+
+successfullyParsed = true;
diff --git a/deps/v8/test/webkit/array-enumerators-functions-expected.txt b/deps/v8/test/webkit/array-enumerators-functions-expected.txt
new file mode 100644 (file)
index 0000000..0efdae4
--- /dev/null
@@ -0,0 +1,978 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks the behavior of the various array enumeration functions in certain edge case scenarios
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnFalse, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnFalse, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnElem, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnElem, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnIndex, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnIndex, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], increaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], increaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], decreaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], decreaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], halveLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], halveLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], decreaseLength, 0); count is 3
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], halveLength, 0); count is 3
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnTrue, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnTrue, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnElem, 0); count is 2
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 2
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 2
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnElem, 0); count is 2
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 2
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 2
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnIndex, 0); count is 2
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 2
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 2
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnIndex, 0); count is 2
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 2
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 2
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], decreaseLength, 0); count is 3
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], halveLength, 0); count is 3
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], decreaseLength, 0); count is 3
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], halveLength, 0); count is 3
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], decreaseLength, 0); count is 3
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], halveLength, 0); count is 3
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).map(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).map(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).map(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).map(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).map(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], decreaseLength, 0); count is 3
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).map(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], halveLength, 0); count is 3
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).map(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], halveLength, 0); count is 4
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-enumerators-functions.js b/deps/v8/test/webkit/array-enumerators-functions.js
new file mode 100644 (file)
index 0000000..b68d2ee
--- /dev/null
@@ -0,0 +1,145 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks the behavior of the various array enumeration functions in certain edge case scenarios"
+);
+
+var functions = ["every", "forEach", "some", "filter", "reduce", "map", "reduceRight"];
+var forwarders = [
+    function(elem, index, array) { return currentFunc.call(this, elem, index, array); },
+    function(elem, index, array) { return currentFunc.call(this, elem, index, array); },
+    function(elem, index, array) { return currentFunc.call(this, elem, index, array); },
+    function(elem, index, array) { return currentFunc.call(this, elem, index, array); },
+    function(prev, elem, index, array) { return currentFunc.call(this, elem, index, array); },
+    function(elem, index, array) { return currentFunc.call(this, elem, index, array); },
+    function(prev, elem, index, array) { return currentFunc.call(this, elem, index, array); }
+];
+
+function toObject(array) {
+    var o = {};
+    for (var i in array)
+        o[i] = array[i];
+    o.length = array.length;
+    return o;
+}
+function toUnorderedObject(array) {
+    var o = {};
+    var props = [];
+    for (var i in array)
+        props.push(i);
+    for (var i = props.length - 1; i >= 0; i--)
+        o[props[i]] = array[props[i]];
+    o.length = array.length;
+    return o;
+}
+function returnFalse() { count++; return false; }
+function returnTrue() { count++; return true; }
+function returnElem(elem) { count++; return elem; }
+function returnIndex(a, index) { if (lastIndex >= index) throw "Unordered traversal"; lastIndex = index; count++; return index; }
+function increaseLength(a, b, array) { count++; array.length++; }
+function decreaseLength(a, b, array) { count++; array.length--; }
+function halveLength(a, b, array) { count++; if (!array.halved) array.length = (array.length / 2) | 0; array.halved = true; }
+
+var testFunctions = ["returnFalse", "returnTrue", "returnElem", "returnIndex", "increaseLength", "decreaseLength", "halveLength"];
+
+var simpleArray = [0,1,2,3,4,5];
+var emptyArray = [];
+var largeEmptyArray = new Array(300);
+var largeSparseArray = [0,1,2,3,4,5];
+largeSparseArray[299] = 299;
+
+var arrays = ["simpleArray", "emptyArray", "largeEmptyArray", "largeSparseArray"];
+function copyArray(a) {
+    var g = [];
+    for (var i in a)
+        g[i] = a[i];
+    return g;
+}
+
+// Test object and array behaviour matches
+for (var f = 0; f < functions.length; f++) {
+    for (var t = 0; t < testFunctions.length; t++) {
+        for (var a = 0; a < arrays.length; a++) {
+            var functionName = functions[f];
+            currentFunc = this[testFunctions[t]];
+            if (arrays[a] === "largeEmptyArray" && functionName === "map")
+                continue;
+            if (currentFunc === returnIndex && functionName === "reduceRight")
+                continue;
+            shouldBe("count=0;lastIndex=-1;copyArray("+arrays[a]+")."+functionName+"(forwarders[f], "+testFunctions[t]+", 0)",
+                     "count=0;lastIndex=-1;Array.prototype."+functionName+".call(toObject("+arrays[a]+"), forwarders[f], "+testFunctions[t]+", 0)");
+        }
+    }
+}
+
+// Test unordered object and array behaviour matches
+for (var f = 0; f < functions.length; f++) {
+    for (var t = 0; t < testFunctions.length; t++) {
+        for (var a = 0; a < arrays.length; a++) {
+            var functionName = functions[f];
+            currentFunc = this[testFunctions[t]];
+            if (arrays[a] === "largeEmptyArray" && functionName === "map")
+                continue;
+            if (currentFunc === returnIndex && functionName === "reduceRight")
+                continue;
+            shouldBe("count=0;lastIndex=-1;copyArray("+arrays[a]+")."+functionName+"(forwarders[f], "+testFunctions[t]+", 0)",
+                     "count=0;lastIndex=-1;Array.prototype."+functionName+".call(toUnorderedObject("+arrays[a]+"), forwarders[f], "+testFunctions[t]+", 0)");
+        }
+    }
+}
+
+// Test number of function calls
+var callCounts = [
+[[1,0,0,1],[6,0,0,7],[1,0,0,1],[1,0,0,1],[1,0,0,1],[1,0,0,1],[1,0,0,1]],
+[[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[3,0,0,6],[3,0,0,6]],
+[[6,0,0,7],[1,0,0,1],[2,0,0,2],[2,0,0,2],[6,0,0,7],[3,0,0,6],[3,0,0,6]],
+[[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[3,0,0,6],[3,0,0,6]],
+[[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[3,0,0,6],[3,0,0,6]],
+[[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[3,0,0,6],[3,0,0,6]],
+[[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[4,0,0,7]]
+];
+var objCallCounts = [
+[[1,0,0,1],[6,0,0,7],[1,0,0,1],[1,0,0,1],[1,0,0,1],[1,0,0,1],[1,0,0,1]],
+[[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7]],
+[[6,0,0,7],[1,0,0,1],[2,0,0,2],[2,0,0,2],[6,0,0,7],[6,0,0,7],[6,0,0,7]],
+[[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7]],
+[[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7]],
+[[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7]],
+[[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7]]
+];
+for (var f = 0; f < functions.length; f++) {
+    for (var t = 0; t < testFunctions.length; t++) {
+        for (var a = 0; a < arrays.length; a++) {
+            var functionName = functions[f];
+            currentFunc = this[testFunctions[t]];
+            if (currentFunc === returnIndex && functionName === "reduceRight")
+                continue;
+            var expectedCnt = "" + callCounts[f][t][a];
+            shouldBe("count=0;lastIndex=-1;copyArray("+arrays[a]+")."+functionName+"(forwarders[f], "+testFunctions[t]+", 0); count", expectedCnt);
+            var expectedCnt = "" + objCallCounts[f][t][a];
+            shouldBe("count=0;lastIndex=-1;Array.prototype."+functionName+".call(toObject("+arrays[a]+"), forwarders[f], "+testFunctions[t]+", 0); count", expectedCnt);
+            shouldBe("count=0;lastIndex=-1;Array.prototype."+functionName+".call(toObject("+arrays[a]+"), forwarders[f], "+testFunctions[t]+", 0); count", expectedCnt);
+        }
+    }
+}
diff --git a/deps/v8/test/webkit/array-every-expected.txt b/deps/v8/test/webkit/array-every-expected.txt
new file mode 100644 (file)
index 0000000..e82e0fb
--- /dev/null
@@ -0,0 +1,75 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks the behavior of the every() method on Array objects.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+1.0 Single Argument Testing
+PASS [12, 5, 8, 130, 44].every(isBigEnough) is false
+PASS [12, 54, 18, 130, 44].every(isBigEnough) is true
+
+2.0 Two Argument Testing
+PASS [12, 5, 10, 130, 44].every(isBigEnough, predicate) is false
+PASS [12, 54, 18, 130, 44].every(isBigEnough, predicate) is true
+
+3.0 Array Mutation Tests
+
+3.1 Array Element Removal
+PASS [12, 5, 8, 130, 44].every(isBigEnoughAndPop) is false
+PASS [12, 54, 18, 130, 44].every(isBigEnoughAndPop) is true
+
+3.2 Array Element Changing
+PASS [12, 5, 8, 130, 44].every(isBigEnoughAndChange) is false
+PASS [12, 54, 18, 130, 44].every(isBigEnoughAndChange) is false
+
+3.3 Array Element Addition
+PASS [12, 5, 8, 130, 44].every(isBigEnoughAndPush) is false
+PASS [12, 54, 18, 130, 44].every(isBigEnoughAndPush) is false
+
+4.0 Exception Test
+PASS [12, 5, 8, 130, 44].every(isBigEnoughAndException) threw exception exception from function.
+PASS [12, 54, 18, 130, 44].every(isBigEnoughAndException) threw exception exception from function.
+
+5.0 Wrong Type for Callback Test
+PASS [12, 5, 8, 130, 44].every(5) threw exception TypeError: 5 is not a function.
+PASS [12, 5, 8, 130, 44].every('wrong') threw exception TypeError: wrong is not a function.
+PASS [12, 5, 8, 130, 44].every(new Object()) threw exception TypeError: #<Object> is not a function.
+PASS [12, 5, 8, 130, 44].every(null) threw exception TypeError: null is not a function.
+PASS [12, 5, 8, 130, 44].every(undefined) threw exception TypeError: undefined is not a function.
+PASS [12, 5, 8, 130, 44].every() threw exception TypeError: undefined is not a function.
+
+6.0 Early Exit ("Short Circuiting")
+PASS [12, 5, 8, 130, 44].every(isBigEnoughShortCircuit) is false
+PASS accumulator.toString() is [12, 5].toString()
+PASS [12, 54, 18, 130, 44].every(isBigEnoughShortCircuit) is true
+PASS accumulator.toString() is [12, 54, 18, 130, 44].toString()
+
+7.0 Behavior for Holes in Arrays
+PASS arr.every(isNotUndefined) is true
+PASS arr.every(isNotUndefined) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-every.js b/deps/v8/test/webkit/array-every.js
new file mode 100644 (file)
index 0000000..bbd50cb
--- /dev/null
@@ -0,0 +1,116 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks the behavior of the every() method on Array objects."
+);
+
+debug("1.0 Single Argument Testing");
+function isBigEnough(element, index, array) {
+    return (element >= 10);
+}
+shouldBeFalse("[12, 5, 8, 130, 44].every(isBigEnough)");
+shouldBeTrue("[12, 54, 18, 130, 44].every(isBigEnough)");
+debug("");
+
+debug("2.0 Two Argument Testing");
+var predicate = {
+    comparison:     11,
+    isBigEnough:    function(s) {
+                        return (s >= comparison);
+                    }
+};
+shouldBeFalse("[12, 5, 10, 130, 44].every(isBigEnough, predicate)");
+shouldBeTrue("[12, 54, 18, 130, 44].every(isBigEnough, predicate)");
+debug("");
+
+debug("3.0 Array Mutation Tests");
+debug("");
+
+debug("3.1 Array Element Removal");
+function isBigEnoughAndPop(element, index, array) {
+    array.pop();
+    return (element >= 10);
+}
+shouldBeFalse("[12, 5, 8, 130, 44].every(isBigEnoughAndPop)");
+shouldBeTrue("[12, 54, 18, 130, 44].every(isBigEnoughAndPop)");
+debug("");
+
+debug("3.2 Array Element Changing");
+function isBigEnoughAndChange(element, index, array) {
+    array[array.length-1-index]= 5;
+    return (element >= 10);
+}
+shouldBeFalse("[12, 5, 8, 130, 44].every(isBigEnoughAndChange)");
+shouldBeFalse("[12, 54, 18, 130, 44].every(isBigEnoughAndChange)");
+debug("");
+
+debug("3.3 Array Element Addition");
+function isBigEnoughAndPush(element, index, array) {
+    array.push(131);
+    return (element >= 131);
+}
+shouldBeFalse("[12, 5, 8, 130, 44].every(isBigEnoughAndPush)");
+shouldBeFalse("[12, 54, 18, 130, 44].every(isBigEnoughAndPush)");
+debug("");
+
+debug("4.0 Exception Test");
+function isBigEnoughAndException(element, index, array) {
+    if(index==1) throw "exception from function";
+    return (element >= 10);
+}
+shouldThrow("[12, 5, 8, 130, 44].every(isBigEnoughAndException)", '"exception from function"');
+shouldThrow("[12, 54, 18, 130, 44].every(isBigEnoughAndException)", '"exception from function"');
+debug("");
+
+debug("5.0 Wrong Type for Callback Test");
+shouldThrow("[12, 5, 8, 130, 44].every(5)");
+shouldThrow("[12, 5, 8, 130, 44].every('wrong')");
+shouldThrow("[12, 5, 8, 130, 44].every(new Object())");
+shouldThrow("[12, 5, 8, 130, 44].every(null)");
+shouldThrow("[12, 5, 8, 130, 44].every(undefined)");
+shouldThrow("[12, 5, 8, 130, 44].every()");
+debug("");
+
+debug('6.0 Early Exit ("Short Circuiting")');
+var accumulator = new Array();
+function isBigEnoughShortCircuit(element, index, array) {
+    accumulator.push(element);
+    return (element >= 10);
+}
+shouldBeFalse("[12, 5, 8, 130, 44].every(isBigEnoughShortCircuit)");
+shouldBe("accumulator.toString()", "[12, 5].toString()");
+accumulator.length = 0;
+shouldBeTrue("[12, 54, 18, 130, 44].every(isBigEnoughShortCircuit)");
+shouldBe("accumulator.toString()", "[12, 54, 18, 130, 44].toString()");
+debug("");
+
+debug('7.0 Behavior for Holes in Arrays');
+var arr = [5, 5, 5, 5];
+delete arr[1];
+function isNotUndefined(element, index, array) {
+    return typeof element !== "undefined";
+}
+shouldBeTrue("arr.every(isNotUndefined)");
+arr = new Array(20);
+shouldBeTrue("arr.every(isNotUndefined)");
diff --git a/deps/v8/test/webkit/array-filter-expected.txt b/deps/v8/test/webkit/array-filter-expected.txt
new file mode 100644 (file)
index 0000000..def49c6
--- /dev/null
@@ -0,0 +1,90 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests for Array.prototype.filter
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS [undefined].filter(passUndefined) is [undefined]
+PASS (new Array(20)).filter(passUndefined) is []
+PASS [0,1,2,3,4,5,6,7,8,9].filter(passEven) is [0,2,4,6,8]
+PASS [0,1,2,3,4,5,6,7,8,9].filter(passAfter5) is [5,6,7,8,9]
+PASS mixPartialAndFast.filter(passAfter5) is [5,6,7,8,9,sparseArrayLength-1]
+PASS toObject([undefined]).filter(passUndefined) is [undefined]
+PASS toObject(new Array(20)).filter(passUndefined) is []
+PASS toObject([0,1,2,3,4,5,6,7,8,9]).filter(passEven) is [0,2,4,6,8]
+PASS toObject([0,1,2,3,4,5,6,7,8,9]).filter(passAfter5) is [5,6,7,8,9]
+PASS toObject(mixPartialAndFast).filter(passAfter5) is [5,6,7,8,9,sparseArrayLength-1]
+PASS reverseInsertionOrder([undefined]).filter(passUndefined) is [undefined]
+PASS reverseInsertionOrder(new Array(20)).filter(passUndefined) is []
+PASS reverseInsertionOrder([0,1,2,3,4,5,6,7,8,9]).filter(passEven) is [0,2,4,6,8]
+PASS reverseInsertionOrder([0,1,2,3,4,5,6,7,8,9]).filter(passAfter5) is [5,6,7,8,9]
+PASS reverseInsertionOrder(mixPartialAndFast).filter(passAfter5) is [5,6,7,8,9,sparseArrayLength-1]
+,0,[object Object]
+PASS reverseInsertionOrder([undefined]).filter(filterLog(passUndefined)) is [undefined]
+PASS reverseInsertionOrder(new Array(20)).filter(filterLog(passUndefined)) is []
+0,0,[object Object]
+1,1,[object Object]
+2,2,[object Object]
+3,3,[object Object]
+4,4,[object Object]
+PASS reverseInsertionOrder([0,1,2,3,4]).filter(filterLog(passEven)) is [0,2,4]
+0,0,[object Object]
+1,1,[object Object]
+2,2,[object Object]
+3,3,[object Object]
+4,4,[object Object]
+5,5,[object Object]
+6,6,[object Object]
+7,7,[object Object]
+8,8,[object Object]
+9,9,[object Object]
+10099,10099,[object Object]
+PASS reverseInsertionOrder(mixPartialAndFast).filter(filterLog(passAfter5)) is [5,6,7,8,9,sparseArrayLength-1]
+,0,
+PASS ([undefined]).filter(filterLog(passUndefined)) is [undefined]
+PASS (new Array(20)).filter(filterLog(passUndefined)) is []
+0,0,0,1,2,3,4
+1,1,0,1,2,3,4
+2,2,0,1,2,3,4
+3,3,0,1,2,3,4
+4,4,0,1,2,3,4
+PASS ([0,1,2,3,4]).filter(filterLog(passEven)) is [0,2,4]
+0,0,0,1,2,3,4,5,6,7,8,9,
+1,1,0,1,2,3,4,5,6,7,8,9,
+2,2,0,1,2,3,4,5,6,7,8,9,
+3,3,0,1,2,3,4,5,6,7,8,9,
+4,4,0,1,2,3,4,5,6,7,8,9,
+5,5,0,1,2,3,4,5,6,7,8,9,
+6,6,0,1,2,3,4,5,6,7,8,9,
+7,7,0,1,2,3,4,5,6,7,8,9,
+8,8,0,1,2,3,4,5,6,7,8,9,
+9,9,0,1,2,3,4,5,6,7,8,9,
+10099,10099,0,1,2,3,4,5,6,7,8,9,
+PASS (mixPartialAndFast).filter(filterLog(passAfter5)) is [5,6,7,8,9,sparseArrayLength-1]
+PASS [1,2,3].filter(function(i,j,k,l,m){ return m=!m; }) is [1,2,3]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-filter.js b/deps/v8/test/webkit/array-filter.js
new file mode 100644 (file)
index 0000000..d0640c2
--- /dev/null
@@ -0,0 +1,100 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Tests for Array.prototype.filter");
+
+function passUndefined(element, index, array) {
+    return typeof element === "undefined";
+}
+function passEven(a) {
+    return !(a & 1);
+}
+function passAfter5(element, index) {
+    return index >= 5;
+}
+var sparseArrayLength = 10100;
+mixPartialAndFast = new Array(sparseArrayLength);
+mixPartialAndFast[sparseArrayLength - 1] = sparseArrayLength - 1;
+for(var i = 0; i < 10; i++)
+    mixPartialAndFast[i] = i;
+function toObject(array) {
+    var result = {};
+    result.length = array.length;
+    for (var i in array)
+        result[i] = array[i];
+    result.filter=Array.prototype.filter;
+    return result;
+}
+function reverseInsertionOrder(array) {
+    var obj = toObject(array);
+    var props = [];
+    for (var i in obj)
+        props.push(i);
+    var result = {};
+    for (var i = props.length - 1; i >= 0; i--)
+        result[props[i]] = obj[props[i]];
+    result.filter=Array.prototype.filter;
+    return result;
+}
+function filterLog(f) {
+    return function(i,j) {
+        try {
+        debug([i,j,arguments[2].toString().substring(0,20)].toString());
+        return f.apply(this, arguments);
+        } catch(e) {
+            console.error(e);
+        }
+    }
+}
+
+shouldBe("[undefined].filter(passUndefined)", "[undefined]");
+shouldBe("(new Array(20)).filter(passUndefined)", "[]");
+shouldBe("[0,1,2,3,4,5,6,7,8,9].filter(passEven)", "[0,2,4,6,8]");
+shouldBe("[0,1,2,3,4,5,6,7,8,9].filter(passAfter5)", "[5,6,7,8,9]");
+shouldBe("mixPartialAndFast.filter(passAfter5)", "[5,6,7,8,9,sparseArrayLength-1]");
+
+// Generic Object
+shouldBe("toObject([undefined]).filter(passUndefined)", "[undefined]");
+shouldBe("toObject(new Array(20)).filter(passUndefined)", "[]");
+shouldBe("toObject([0,1,2,3,4,5,6,7,8,9]).filter(passEven)", "[0,2,4,6,8]");
+shouldBe("toObject([0,1,2,3,4,5,6,7,8,9]).filter(passAfter5)", "[5,6,7,8,9]");
+shouldBe("toObject(mixPartialAndFast).filter(passAfter5)", "[5,6,7,8,9,sparseArrayLength-1]");
+
+// Reversed generic Object
+shouldBe("reverseInsertionOrder([undefined]).filter(passUndefined)", "[undefined]");
+shouldBe("reverseInsertionOrder(new Array(20)).filter(passUndefined)", "[]");
+shouldBe("reverseInsertionOrder([0,1,2,3,4,5,6,7,8,9]).filter(passEven)", "[0,2,4,6,8]");
+shouldBe("reverseInsertionOrder([0,1,2,3,4,5,6,7,8,9]).filter(passAfter5)", "[5,6,7,8,9]");
+shouldBe("reverseInsertionOrder(mixPartialAndFast).filter(passAfter5)", "[5,6,7,8,9,sparseArrayLength-1]");
+
+// Log evaluation order
+shouldBe("reverseInsertionOrder([undefined]).filter(filterLog(passUndefined))", "[undefined]");
+shouldBe("reverseInsertionOrder(new Array(20)).filter(filterLog(passUndefined))", "[]");
+shouldBe("reverseInsertionOrder([0,1,2,3,4]).filter(filterLog(passEven))", "[0,2,4]");
+shouldBe("reverseInsertionOrder(mixPartialAndFast).filter(filterLog(passAfter5))", "[5,6,7,8,9,sparseArrayLength-1]");
+shouldBe("([undefined]).filter(filterLog(passUndefined))", "[undefined]");
+shouldBe("(new Array(20)).filter(filterLog(passUndefined))", "[]");
+shouldBe("([0,1,2,3,4]).filter(filterLog(passEven))", "[0,2,4]");
+shouldBe("(mixPartialAndFast).filter(filterLog(passAfter5))", "[5,6,7,8,9,sparseArrayLength-1]");
+
+shouldBe("[1,2,3].filter(function(i,j,k,l,m){ return m=!m; })", "[1,2,3]")
diff --git a/deps/v8/test/webkit/array-holes-expected.txt b/deps/v8/test/webkit/array-holes-expected.txt
new file mode 100644 (file)
index 0000000..05e095f
--- /dev/null
@@ -0,0 +1,85 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that arrays have holes that you can see the prototype through, not just missing values.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS var a = []; a.length = 1; showHoles(a) is '[hole]'
+PASS var a = []; a[0] = undefined; showHoles(a) is '[undefined]'
+PASS var a = []; a[0] = undefined; delete a[0]; showHoles(a) is '[hole]'
+PASS showHoles([0, , 2]) is '[0, hole, 2]'
+PASS showHoles([0, 1, ,]) is '[0, 1, hole]'
+PASS showHoles([0, , 2].concat([3, , 5])) is '[0, hole, 2, 3, hole, 5]'
+PASS showHoles([0, , 2, 3].reverse()) is '[3, 2, hole, 0]'
+PASS a = [0, , 2, 3]; a.shift(); showHoles(a) is '[hole, 2, 3]'
+PASS showHoles([0, , 2, 3].slice(0, 3)) is '[0, hole, 2]'
+PASS showHoles([0, , 2, 3].sort()) is '[0, 2, 3, hole]'
+PASS showHoles([0, undefined, 2, 3].sort()) is '[0, 2, 3, undefined]'
+PASS a = [0, , 2, 3]; a.splice(2, 3, 5, 6); showHoles(a) is '[0, hole, 5, 6]'
+PASS a = [0, , 2, 3]; a.unshift(4); showHoles(a) is '[4, 0, hole, 2, 3]'
+PASS showHoles([0, , 2, 3].filter(returnTrue)) is '[0, 2, 3]'
+PASS showHoles([0, undefined, 2, 3].filter(returnTrue)) is '[0, undefined, 2, 3]'
+PASS showHoles([0, , 2, 3].map(returnTrue)) is '[true, hole, true, true]'
+PASS showHoles([0, undefined, 2, 3].map(returnTrue)) is '[true, true, true, true]'
+PASS a = []; [0, , 2, 3].every(addToArrayReturnTrue); showHoles(a) is '[0, 2, 3]'
+PASS a = []; [0, undefined, 2, 3].every(addToArrayReturnTrue); showHoles(a) is '[0, undefined, 2, 3]'
+PASS a = []; [0, , 2, 3].forEach(addToArray); showHoles(a) is '[0, 2, 3]'
+PASS a = []; [0, undefined, 2, 3].forEach(addToArray); showHoles(a) is '[0, undefined, 2, 3]'
+PASS a = []; [0, , 2, 3].some(addToArrayReturnFalse); showHoles(a) is '[0, 2, 3]'
+PASS a = []; [0, undefined, 2, 3].some(addToArrayReturnFalse); showHoles(a) is '[0, undefined, 2, 3]'
+PASS [0, , 2, 3].indexOf() is -1
+PASS [0, undefined, 2, 3].indexOf() is 1
+PASS [0, , 2, 3].lastIndexOf() is -1
+PASS [0, undefined, 2, 3].lastIndexOf() is 1
+PASS showHoles([0, , 2]) is '[0, hole, 2]'
+PASS showHoles([0, 1, ,]) is '[0, 1, hole]'
+PASS showHoles([0, , 2].concat([3, , 5])) is '[0, peekaboo, 2, 3, peekaboo, 5]'
+PASS showHoles([0, , 2, 3].reverse()) is '[3, 2, peekaboo, 0]'
+PASS a = [0, , 2, 3]; a.shift(); showHoles(a) is '[peekaboo, 2, 3]'
+PASS showHoles([0, , 2, 3].slice(0, 3)) is '[0, peekaboo, 2]'
+PASS showHoles([0, , 2, 3].sort()) is '[0, 2, 3, hole]'
+PASS showHoles([0, undefined, 2, 3].sort()) is '[0, 2, 3, undefined]'
+PASS a = [0, , 2, 3]; a.splice(2, 3, 5, 6); showHoles(a) is '[0, hole, 5, 6]'
+PASS a = [0, , 2, 3]; a.unshift(4); showHoles(a) is '[4, 0, peekaboo, 2, 3]'
+PASS showHoles([0, , 2, 3].filter(returnTrue)) is '[0, peekaboo, 2, 3]'
+PASS showHoles([0, undefined, 2, 3].filter(returnTrue)) is '[0, undefined, 2, 3]'
+PASS showHoles([0, , 2, 3].map(returnTrue)) is '[true, true, true, true]'
+PASS showHoles([0, undefined, 2, 3].map(returnTrue)) is '[true, true, true, true]'
+PASS a = []; [0, , 2, 3].every(addToArrayReturnTrue); showHoles(a) is '[0, peekaboo, 2, 3]'
+PASS a = []; [0, undefined, 2, 3].every(addToArrayReturnTrue); showHoles(a) is '[0, undefined, 2, 3]'
+PASS a = []; [0, , 2, 3].forEach(addToArray); showHoles(a) is '[0, peekaboo, 2, 3]'
+PASS a = []; [0, undefined, 2, 3].forEach(addToArray); showHoles(a) is '[0, undefined, 2, 3]'
+PASS a = []; [0, , 2, 3].some(addToArrayReturnFalse); showHoles(a) is '[0, peekaboo, 2, 3]'
+PASS a = []; [0, undefined, 2, 3].some(addToArrayReturnFalse); showHoles(a) is '[0, undefined, 2, 3]'
+PASS [0, , 2, 3].indexOf() is -1
+PASS [0, , 2, 3].indexOf('peekaboo') is 1
+PASS [0, undefined, 2, 3].indexOf() is 1
+PASS [0, , 2, 3].lastIndexOf() is -1
+PASS [0, , 2, 3].lastIndexOf('peekaboo') is 1
+PASS [0, undefined, 2, 3].lastIndexOf() is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-holes.js b/deps/v8/test/webkit/array-holes.js
new file mode 100644 (file)
index 0000000..007626b
--- /dev/null
@@ -0,0 +1,134 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This tests that arrays have holes that you can see the prototype through, not just missing values.");
+
+function isHole(array, index)
+{
+    if (index >= array.length)
+        return "bad index: past length";
+    // Check if we can see through the hole into another room.
+    Array.prototype[index] = "room";
+    var isHole = array[index] == "room";
+    delete Array.prototype[index];
+    return isHole;
+}
+
+function showHoles(array)
+{
+    var string = "[";
+    for (i = 0; i < array.length; ++i) {
+        if (i)
+            string += ", ";
+        if (isHole(array, i))
+            string += "hole";
+        else
+            string += array[i];
+    }
+    string += "]";
+    return string;
+}
+
+function returnTrue()
+{
+    return true;
+}
+
+var a;
+
+function addToArray(arg)
+{
+    a.push(arg);
+}
+
+function addToArrayReturnFalse(arg)
+{
+    a.push(arg);
+    return false;
+}
+
+function addToArrayReturnTrue(arg)
+{
+    a.push(arg);
+    return true;
+}
+
+shouldBe("var a = []; a.length = 1; showHoles(a)", "'[hole]'");
+shouldBe("var a = []; a[0] = undefined; showHoles(a)", "'[undefined]'");
+shouldBe("var a = []; a[0] = undefined; delete a[0]; showHoles(a)", "'[hole]'");
+
+shouldBe("showHoles([0, , 2])", "'[0, hole, 2]'");
+shouldBe("showHoles([0, 1, ,])", "'[0, 1, hole]'");
+shouldBe("showHoles([0, , 2].concat([3, , 5]))", "'[0, hole, 2, 3, hole, 5]'");
+shouldBe("showHoles([0, , 2, 3].reverse())", "'[3, 2, hole, 0]'");
+shouldBe("a = [0, , 2, 3]; a.shift(); showHoles(a)", "'[hole, 2, 3]'");
+shouldBe("showHoles([0, , 2, 3].slice(0, 3))", "'[0, hole, 2]'");
+shouldBe("showHoles([0, , 2, 3].sort())", "'[0, 2, 3, hole]'");
+shouldBe("showHoles([0, undefined, 2, 3].sort())", "'[0, 2, 3, undefined]'");
+shouldBe("a = [0, , 2, 3]; a.splice(2, 3, 5, 6); showHoles(a)", "'[0, hole, 5, 6]'");
+shouldBe("a = [0, , 2, 3]; a.unshift(4); showHoles(a)", "'[4, 0, hole, 2, 3]'");
+shouldBe("showHoles([0, , 2, 3].filter(returnTrue))", "'[0, 2, 3]'");
+shouldBe("showHoles([0, undefined, 2, 3].filter(returnTrue))", "'[0, undefined, 2, 3]'");
+shouldBe("showHoles([0, , 2, 3].map(returnTrue))", "'[true, hole, true, true]'");
+shouldBe("showHoles([0, undefined, 2, 3].map(returnTrue))", "'[true, true, true, true]'");
+shouldBe("a = []; [0, , 2, 3].every(addToArrayReturnTrue); showHoles(a)", "'[0, 2, 3]'");
+shouldBe("a = []; [0, undefined, 2, 3].every(addToArrayReturnTrue); showHoles(a)", "'[0, undefined, 2, 3]'");
+shouldBe("a = []; [0, , 2, 3].forEach(addToArray); showHoles(a)", "'[0, 2, 3]'");
+shouldBe("a = []; [0, undefined, 2, 3].forEach(addToArray); showHoles(a)", "'[0, undefined, 2, 3]'");
+shouldBe("a = []; [0, , 2, 3].some(addToArrayReturnFalse); showHoles(a)", "'[0, 2, 3]'");
+shouldBe("a = []; [0, undefined, 2, 3].some(addToArrayReturnFalse); showHoles(a)", "'[0, undefined, 2, 3]'");
+shouldBe("[0, , 2, 3].indexOf()", "-1");
+shouldBe("[0, undefined, 2, 3].indexOf()", "1");
+shouldBe("[0, , 2, 3].lastIndexOf()", "-1");
+shouldBe("[0, undefined, 2, 3].lastIndexOf()", "1");
+
+Object.prototype[1] = "peekaboo";
+
+shouldBe("showHoles([0, , 2])", "'[0, hole, 2]'");
+shouldBe("showHoles([0, 1, ,])", "'[0, 1, hole]'");
+shouldBe("showHoles([0, , 2].concat([3, , 5]))", "'[0, peekaboo, 2, 3, peekaboo, 5]'");
+shouldBe("showHoles([0, , 2, 3].reverse())", "'[3, 2, peekaboo, 0]'");
+shouldBe("a = [0, , 2, 3]; a.shift(); showHoles(a)", "'[peekaboo, 2, 3]'");
+shouldBe("showHoles([0, , 2, 3].slice(0, 3))", "'[0, peekaboo, 2]'");
+shouldBe("showHoles([0, , 2, 3].sort())", "'[0, 2, 3, hole]'");
+shouldBe("showHoles([0, undefined, 2, 3].sort())", "'[0, 2, 3, undefined]'");
+shouldBe("a = [0, , 2, 3]; a.splice(2, 3, 5, 6); showHoles(a)", "'[0, hole, 5, 6]'");
+shouldBe("a = [0, , 2, 3]; a.unshift(4); showHoles(a)", "'[4, 0, peekaboo, 2, 3]'");
+shouldBe("showHoles([0, , 2, 3].filter(returnTrue))", "'[0, peekaboo, 2, 3]'");
+shouldBe("showHoles([0, undefined, 2, 3].filter(returnTrue))", "'[0, undefined, 2, 3]'");
+shouldBe("showHoles([0, , 2, 3].map(returnTrue))", "'[true, true, true, true]'");
+shouldBe("showHoles([0, undefined, 2, 3].map(returnTrue))", "'[true, true, true, true]'");
+shouldBe("a = []; [0, , 2, 3].every(addToArrayReturnTrue); showHoles(a)", "'[0, peekaboo, 2, 3]'");
+shouldBe("a = []; [0, undefined, 2, 3].every(addToArrayReturnTrue); showHoles(a)", "'[0, undefined, 2, 3]'");
+shouldBe("a = []; [0, , 2, 3].forEach(addToArray); showHoles(a)", "'[0, peekaboo, 2, 3]'");
+shouldBe("a = []; [0, undefined, 2, 3].forEach(addToArray); showHoles(a)", "'[0, undefined, 2, 3]'");
+shouldBe("a = []; [0, , 2, 3].some(addToArrayReturnFalse); showHoles(a)", "'[0, peekaboo, 2, 3]'");
+shouldBe("a = []; [0, undefined, 2, 3].some(addToArrayReturnFalse); showHoles(a)", "'[0, undefined, 2, 3]'");
+shouldBe("[0, , 2, 3].indexOf()", "-1");
+shouldBe("[0, , 2, 3].indexOf('peekaboo')", "1");
+shouldBe("[0, undefined, 2, 3].indexOf()", "1");
+shouldBe("[0, , 2, 3].lastIndexOf()", "-1");
+shouldBe("[0, , 2, 3].lastIndexOf('peekaboo')", "1");
+shouldBe("[0, undefined, 2, 3].lastIndexOf()", "1");
+
+delete Object.prototype[1];
diff --git a/deps/v8/test/webkit/array-index-immediate-types-expected.txt b/deps/v8/test/webkit/array-index-immediate-types-expected.txt
new file mode 100644 (file)
index 0000000..0f74e19
--- /dev/null
@@ -0,0 +1,39 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks the behaviour of indexing an Array with immediate types.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS array[0] is "Zero"
+PASS array[null] is undefined
+PASS array[undefined] is undefined
+PASS array[true] is undefined
+PASS array[false] is undefined
+PASS putSelf([0], 0); is true
+PASS putSelf([0], 1/9); is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-index-immediate-types.js b/deps/v8/test/webkit/array-index-immediate-types.js
new file mode 100644 (file)
index 0000000..7bacc9d
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks the behaviour of indexing an Array with immediate types."
+);
+
+var array = ["Zero", "One"];
+
+shouldBe("array[0]", '"Zero"');
+shouldBe("array[null]", "undefined");
+shouldBe("array[undefined]", "undefined");
+shouldBe("array[true]", "undefined");
+shouldBe("array[false]", "undefined");
+
+function putSelf(array, index)
+{
+    index = index << 0;
+    array[index] = index;
+    return true;
+}
+
+shouldBeTrue("putSelf([0], 0);");
+shouldBeTrue("putSelf([0], 1/9);");
diff --git a/deps/v8/test/webkit/array-indexing-expected.txt b/deps/v8/test/webkit/array-indexing-expected.txt
new file mode 100644 (file)
index 0000000..4ddc498
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that array accessing doesn't do the wrong thing for negative indices
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS a.length is 0
+PASS a["-5"] is a[-5]
+PASS a[4] is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-indexing.js b/deps/v8/test/webkit/array-indexing.js
new file mode 100644 (file)
index 0000000..d4e751b
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that array accessing doesn't do the wrong thing for negative indices"
+);
+var a = [];
+a[-5] =  true;
+shouldBe('a.length', '0');
+shouldBe('a["-5"]', 'a[-5]');
+
+// Just some bounds paranoia
+a = [1,2,3,4];
+shouldBe('a[4]', 'undefined');
+
+a = [];
+for (var i = 0; i > -1000; i--) a[i] = i;
diff --git a/deps/v8/test/webkit/array-iterate-backwards-expected.txt b/deps/v8/test/webkit/array-iterate-backwards-expected.txt
new file mode 100644 (file)
index 0000000..7db2f99
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that iterating a large array backwards works correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS verify(32768) is true
+PASS verify(65536) is true
+PASS verify(120000) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-iterate-backwards.js b/deps/v8/test/webkit/array-iterate-backwards.js
new file mode 100644 (file)
index 0000000..301cbd5
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that iterating a large array backwards works correctly."
+);
+
+var bytes = new Array();
+
+function prepare(nbytes) {
+    var i = nbytes - 1;
+    while (i >= 0) {
+        bytes[i] = new Number(i);
+        i -= 1;
+    }
+}
+
+function verify(nbytes) {
+    var i = nbytes - 1;
+    while (i >= 0) {
+        if (bytes[i] != i)
+            return false;
+        i -= 1;
+    }
+    return true;
+}
+
+prepare(32768);
+shouldBeTrue('verify(32768)');
+
+prepare(65536);
+shouldBeTrue('verify(65536)');
+
+prepare(120000);
+shouldBeTrue('verify(120000)');
diff --git a/deps/v8/test/webkit/array-lastIndexOf-expected.txt b/deps/v8/test/webkit/array-lastIndexOf-expected.txt
new file mode 100644 (file)
index 0000000..0db9ba7
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks lastIndexOf for various values in an array
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS lastIndex is -1
+PASS lastIndex is 2
+PASS lastIndex is 3
+PASS lastIndex is -1
+PASS lastIndex is 3
+PASS lastIndex is 0
+PASS lastIndex is 0
+PASS lastIndex is 3
+PASS lastIndex is -1
+PASS lastIndex is -1
+PASS lastIndex is -1
+PASS lastIndex is 19
+PASS lastIndex is -1
+PASS lastIndex is -1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-lastIndexOf.js b/deps/v8/test/webkit/array-lastIndexOf.js
new file mode 100644 (file)
index 0000000..adc593e
--- /dev/null
@@ -0,0 +1,75 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This test checks lastIndexOf for various values in an array'
+);
+
+
+var testArray = [2, 5, 9, 2];
+var lastIndex = 0;
+
+lastIndex = testArray.lastIndexOf(2,-500);
+shouldBe('lastIndex', '-1');
+lastIndex = testArray.lastIndexOf(9,500);
+shouldBe('lastIndex', '2');
+lastIndex = testArray.lastIndexOf(2);
+shouldBe('lastIndex', '3');
+lastIndex = testArray.lastIndexOf(7);
+shouldBe('lastIndex', '-1');
+lastIndex = testArray.lastIndexOf(2, 3);
+shouldBe('lastIndex', '3');
+lastIndex = testArray.lastIndexOf(2, 2);
+shouldBe('lastIndex', '0');
+lastIndex = testArray.lastIndexOf(2, -2);
+shouldBe('lastIndex', '0');
+lastIndex = testArray.lastIndexOf(2, -1);
+shouldBe('lastIndex', '3');
+
+delete testArray[1];
+
+lastIndex = testArray.lastIndexOf(undefined);
+shouldBe('lastIndex', '-1');
+
+delete testArray[3];
+
+lastIndex = testArray.lastIndexOf(undefined);
+shouldBe('lastIndex', '-1');
+
+testArray = new Array(20);
+
+lastIndex = testArray.lastIndexOf(undefined);
+shouldBe('lastIndex', '-1');
+
+testArray[19] = undefined;
+
+lastIndex = testArray.lastIndexOf(undefined);
+shouldBe('lastIndex', '19');
+
+lastIndex = testArray.lastIndexOf(undefined, 18);
+shouldBe('lastIndex', '-1');
+
+delete testArray[19];
+
+lastIndex = testArray.lastIndexOf(undefined);
+shouldBe('lastIndex', '-1');
diff --git a/deps/v8/test/webkit/array-proto-func-length-getter-except-expected.txt b/deps/v8/test/webkit/array-proto-func-length-getter-except-expected.txt
new file mode 100644 (file)
index 0000000..95912e8
--- /dev/null
@@ -0,0 +1,50 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that functions on the array prototype correctly handle exceptions from length getters when called on non-array objects.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS test(Array.prototype.join) is true
+PASS test(Array.prototype.pop) is true
+PASS test(Array.prototype.push) is true
+PASS test(Array.prototype.reverse) is true
+PASS test(Array.prototype.shift) is true
+PASS test(Array.prototype.slice) is true
+PASS test(Array.prototype.sort) is true
+PASS test(Array.prototype.splice) is true
+PASS test(Array.prototype.unshift) is true
+PASS test(Array.prototype.indexOf) is true
+PASS test(Array.prototype.lastIndexOf) is true
+PASS test(Array.prototype.every) is true
+PASS test(Array.prototype.some) is true
+PASS test(Array.prototype.forEach) is true
+PASS test(Array.prototype.map) is true
+PASS test(Array.prototype.filter) is true
+PASS test(Array.prototype.reduce) is true
+PASS test(Array.prototype.reduceRight) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-proto-func-length-getter-except.js b/deps/v8/test/webkit/array-proto-func-length-getter-except.js
new file mode 100644 (file)
index 0000000..6584795
--- /dev/null
@@ -0,0 +1,64 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that functions on the array prototype correctly handle exceptions from length getters when called on non-array objects."
+);
+
+var testObj = {
+    0: "a",
+    1: "b",
+    2: "c"
+};
+var lengthGetter = {
+    get: (function() { throw true; })
+}
+Object.defineProperty(testObj, "length", lengthGetter);
+
+function test(f) {
+    try {
+        f.call(testObj, undefined);
+        return false;
+    } catch (e) {
+        return e === true;
+    }
+}
+
+shouldBeTrue("test(Array.prototype.join)");
+shouldBeTrue("test(Array.prototype.pop)");
+shouldBeTrue("test(Array.prototype.push)");
+shouldBeTrue("test(Array.prototype.reverse)");
+shouldBeTrue("test(Array.prototype.shift)");
+shouldBeTrue("test(Array.prototype.slice)");
+shouldBeTrue("test(Array.prototype.sort)");
+shouldBeTrue("test(Array.prototype.splice)");
+shouldBeTrue("test(Array.prototype.unshift)");
+shouldBeTrue("test(Array.prototype.indexOf)");
+shouldBeTrue("test(Array.prototype.lastIndexOf)");
+shouldBeTrue("test(Array.prototype.every)");
+shouldBeTrue("test(Array.prototype.some)");
+shouldBeTrue("test(Array.prototype.forEach)");
+shouldBeTrue("test(Array.prototype.map)");
+shouldBeTrue("test(Array.prototype.filter)");
+shouldBeTrue("test(Array.prototype.reduce)");
+shouldBeTrue("test(Array.prototype.reduceRight)");
diff --git a/deps/v8/test/webkit/array-proto-func-property-getter-except-expected.txt b/deps/v8/test/webkit/array-proto-func-property-getter-except-expected.txt
new file mode 100644 (file)
index 0000000..05dfb6f
--- /dev/null
@@ -0,0 +1,50 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that functions on the array prototype correctly handle exceptions from property getters when called on non-array objects.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS test(Array.prototype.sort) is true
+PASS test(Array.prototype.every) is true
+PASS test(Array.prototype.some) is true
+PASS test(Array.prototype.forEach) is true
+PASS test(Array.prototype.map) is true
+PASS test(Array.prototype.filter) is true
+PASS test(Array.prototype.reduce) is true
+PASS test(Array.prototype.reduceRight) is true
+PASS test(Array.prototype.join) is true
+PASS test(Array.prototype.pop) is true
+PASS test(Array.prototype.push) is false
+PASS test(Array.prototype.reverse) is true
+PASS test(Array.prototype.shift) is true
+PASS test(Array.prototype.slice) is true
+PASS test(Array.prototype.splice) is true
+PASS test(Array.prototype.unshift) is true
+PASS test(Array.prototype.indexOf) is true
+PASS test(Array.prototype.lastIndexOf) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-proto-func-property-getter-except.js b/deps/v8/test/webkit/array-proto-func-property-getter-except.js
new file mode 100644 (file)
index 0000000..82b70b2
--- /dev/null
@@ -0,0 +1,68 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that functions on the array prototype correctly handle exceptions from property getters when called on non-array objects."
+);
+
+function test(f) {
+
+    var testObj = {
+        length: 3
+    };
+    var propertyGetter = {
+        get: (function() { throw true; })
+    }
+    Object.defineProperty(testObj, 0, propertyGetter);
+    Object.defineProperty(testObj, 1, propertyGetter);
+    Object.defineProperty(testObj, 2, propertyGetter);
+
+    try {
+        f.call(testObj, function(){});
+        return false;
+    } catch (e) {
+        return e === true;
+    }
+}
+
+// This test makes sense for these functions: (they should get all properties on the array)
+shouldBeTrue("test(Array.prototype.sort)");
+shouldBeTrue("test(Array.prototype.every)");
+shouldBeTrue("test(Array.prototype.some)");
+shouldBeTrue("test(Array.prototype.forEach)");
+shouldBeTrue("test(Array.prototype.map)");
+shouldBeTrue("test(Array.prototype.filter)");
+shouldBeTrue("test(Array.prototype.reduce)");
+shouldBeTrue("test(Array.prototype.reduceRight)");
+
+// Probably not testing much of anything in these cases, but make sure they don't crash!
+shouldBeTrue("test(Array.prototype.join)");
+shouldBeTrue("test(Array.prototype.pop)");
+shouldBeFalse("test(Array.prototype.push)");
+shouldBeTrue("test(Array.prototype.reverse)");
+shouldBeTrue("test(Array.prototype.shift)");
+shouldBeTrue("test(Array.prototype.slice)");
+shouldBeTrue("test(Array.prototype.splice)");
+shouldBeTrue("test(Array.prototype.unshift)");
+shouldBeTrue("test(Array.prototype.indexOf)");
+shouldBeTrue("test(Array.prototype.lastIndexOf)");
diff --git a/deps/v8/test/webkit/array-reduce-expected.txt b/deps/v8/test/webkit/array-reduce-expected.txt
new file mode 100644 (file)
index 0000000..4fa6083
--- /dev/null
@@ -0,0 +1,63 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks the behavior of the reduce() method on a number of objects.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS [0,1,2,3].reduce(function(a,b){ return a + b; }) is 6
+PASS [1,2,3].reduce(function(a,b){ return a + b; }) is 6
+PASS [0,1,2,3].reduce(function(a,b){ return a + b; }, 4) is 10
+PASS [1,2,3].reduce(function(a,b){ return a + b; }, 4) is 10
+PASS toObject([0,1,2,3]).reduce(function(a,b){ return a + b; }) is 6
+PASS toObject([1,2,3]).reduce(function(a,b){ return a + b; }) is 6
+PASS toObject([0,1,2,3]).reduce(function(a,b){ return a + b; }, 4) is 10
+PASS toObject([1,2,3]).reduce(function(a,b){ return a + b; }, 4) is 10
+PASS toUnorderedObject([0,1,2,3]).reduce(function(a,b){ return a + b; }) is 6
+PASS toUnorderedObject([1,2,3]).reduce(function(a,b){ return a + b; }) is 6
+PASS toUnorderedObject([0,1,2,3]).reduce(function(a,b){ return a + b; }, 4) is 10
+PASS toUnorderedObject([1,2,3]).reduce(function(a,b){ return a + b; }, 4) is 10
+PASS sparseArray.reduce(function(a,b){ return a + b; }, 0) is 10
+PASS toObject(sparseArray).reduce(function(a,b){ return a + b; }, 0) is 10
+PASS sparseArray.reduce(function(a,b){ callCount++; }); callCount is 0
+PASS toObject(sparseArray).reduce(function(a,b){ callCount++; }); callCount is 0
+PASS sparseArray.reduce(function(a,b){ callCount++; }, 0); callCount is 1
+PASS toObject(sparseArray).reduce(function(a,b){ callCount++; }, 0); callCount is 1
+PASS [0,1,2,3,4].reduce(function(a,b){ callCount++; }, 0); callCount is 5
+PASS [0,1,2,3,4].reduce(function(a,b){ callCount++; }); callCount is 4
+PASS [1, 2, 3, 4].reduce(function(a,b, i, thisObj){ thisObj.length--; callCount++; return a + b; }, 0); callCount is 2
+PASS [1, 2, 3, 4].reduce(function(a,b, i, thisObj){ thisObj.length++; callCount++; return a + b; }, 0); callCount is 4
+PASS toObject([1, 2, 3, 4]).reduce(function(a,b, i, thisObj){ thisObj.length--; callCount++; return a + b; }, 0); callCount is 4
+PASS toObject([1, 2, 3, 4]).reduce(function(a,b, i, thisObj){ thisObj.length++; callCount++; return a + b; }, 0); callCount is 4
+PASS [[0,1], [2,3], [4,5]].reduce(function(a,b) {return a.concat(b);}, []) is [0,1,2,3,4,5]
+PASS toObject([[0,1], [2,3], [4,5]]).reduce(function(a,b) {return a.concat(b);}, []) is [0,1,2,3,4,5]
+PASS toObject([0,1,2,3,4,5]).reduce(function(a,b,i) {return a.concat([i,b]);}, []) is [0,0,1,1,2,2,3,3,4,4,5,5]
+PASS toUnorderedObject([[0,1], [2,3], [4,5]]).reduce(function(a,b) {return a.concat(b);}, []) is [0,1,2,3,4,5]
+PASS toUnorderedObject([0,1,2,3,4,5]).reduce(function(a,b,i) {return a.concat([i,b]);}, []) is [0,0,1,1,2,2,3,3,4,4,5,5]
+PASS [0,1,2,3,4,5].reduce(function(a,b,i) {return a.concat([i,b]);}, []) is [0,0,1,1,2,2,3,3,4,4,5,5]
+PASS [2,3].reduce(function() {'use strict'; return this;}) is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-reduce.js b/deps/v8/test/webkit/array-reduce.js
new file mode 100644 (file)
index 0000000..ff6457a
--- /dev/null
@@ -0,0 +1,91 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks the behavior of the reduce() method on a number of objects."
+);
+
+function toObject(array) {
+    var o = {};
+    for (var i in array)
+        o[i] = array[i];
+    o.length = array.length;
+    o.reduce = Array.prototype.reduce;
+    return o;
+}
+function toUnorderedObject(array) {
+    var o = {};
+    var props = [];
+    for (var i in array)
+        props.push(i);
+    for (var i = props.length - 1; i >= 0; i--)
+        o[props[i]] = array[props[i]];
+    o.length = array.length;
+    o.reduce = Array.prototype.reduce;
+    return o;
+}
+
+shouldBe("[0,1,2,3].reduce(function(a,b){ return a + b; })", "6");
+shouldBe("[1,2,3].reduce(function(a,b){ return a + b; })", "6");
+shouldBe("[0,1,2,3].reduce(function(a,b){ return a + b; }, 4)", "10");
+shouldBe("[1,2,3].reduce(function(a,b){ return a + b; }, 4)", "10");
+shouldBe("toObject([0,1,2,3]).reduce(function(a,b){ return a + b; })", "6");
+shouldBe("toObject([1,2,3]).reduce(function(a,b){ return a + b; })", "6");
+shouldBe("toObject([0,1,2,3]).reduce(function(a,b){ return a + b; }, 4)", "10");
+shouldBe("toObject([1,2,3]).reduce(function(a,b){ return a + b; }, 4)", "10");
+shouldBe("toUnorderedObject([0,1,2,3]).reduce(function(a,b){ return a + b; })", "6");
+shouldBe("toUnorderedObject([1,2,3]).reduce(function(a,b){ return a + b; })", "6");
+shouldBe("toUnorderedObject([0,1,2,3]).reduce(function(a,b){ return a + b; }, 4)", "10");
+shouldBe("toUnorderedObject([1,2,3]).reduce(function(a,b){ return a + b; }, 4)", "10");
+sparseArray = [];
+sparseArray[10] = 10;
+shouldBe("sparseArray.reduce(function(a,b){ return a + b; }, 0)", "10");
+shouldBe("toObject(sparseArray).reduce(function(a,b){ return a + b; }, 0)", "10");
+var callCount = 0;
+shouldBe("sparseArray.reduce(function(a,b){ callCount++; }); callCount", "0");
+callCount = 0;
+shouldBe("toObject(sparseArray).reduce(function(a,b){ callCount++; }); callCount", "0");
+var callCount = 0;
+shouldBe("sparseArray.reduce(function(a,b){ callCount++; }, 0); callCount", "1");
+callCount = 0;
+shouldBe("toObject(sparseArray).reduce(function(a,b){ callCount++; }, 0); callCount", "1");
+callCount = 0;
+shouldBe("[0,1,2,3,4].reduce(function(a,b){ callCount++; }, 0); callCount", "5");
+callCount = 0;
+shouldBe("[0,1,2,3,4].reduce(function(a,b){ callCount++; }); callCount", "4");
+callCount = 0;
+shouldBe("[1, 2, 3, 4].reduce(function(a,b, i, thisObj){ thisObj.length--; callCount++; return a + b; }, 0); callCount", "2");
+callCount = 0;
+shouldBe("[1, 2, 3, 4].reduce(function(a,b, i, thisObj){ thisObj.length++; callCount++; return a + b; }, 0); callCount", "4");
+callCount = 0;
+shouldBe("toObject([1, 2, 3, 4]).reduce(function(a,b, i, thisObj){ thisObj.length--; callCount++; return a + b; }, 0); callCount", "4");
+callCount = 0;
+shouldBe("toObject([1, 2, 3, 4]).reduce(function(a,b, i, thisObj){ thisObj.length++; callCount++; return a + b; }, 0); callCount", "4");
+
+shouldBe("[[0,1], [2,3], [4,5]].reduce(function(a,b) {return a.concat(b);}, [])", "[0,1,2,3,4,5]");
+shouldBe("toObject([[0,1], [2,3], [4,5]]).reduce(function(a,b) {return a.concat(b);}, [])", "[0,1,2,3,4,5]");
+shouldBe("toObject([0,1,2,3,4,5]).reduce(function(a,b,i) {return a.concat([i,b]);}, [])", "[0,0,1,1,2,2,3,3,4,4,5,5]");
+shouldBe("toUnorderedObject([[0,1], [2,3], [4,5]]).reduce(function(a,b) {return a.concat(b);}, [])", "[0,1,2,3,4,5]");
+shouldBe("toUnorderedObject([0,1,2,3,4,5]).reduce(function(a,b,i) {return a.concat([i,b]);}, [])", "[0,0,1,1,2,2,3,3,4,4,5,5]");
+shouldBe("[0,1,2,3,4,5].reduce(function(a,b,i) {return a.concat([i,b]);}, [])", "[0,0,1,1,2,2,3,3,4,4,5,5]");
+shouldBe("[2,3].reduce(function() {'use strict'; return this;})", "undefined");
diff --git a/deps/v8/test/webkit/array-reduceRight-expected.txt b/deps/v8/test/webkit/array-reduceRight-expected.txt
new file mode 100644 (file)
index 0000000..eedcfe0
--- /dev/null
@@ -0,0 +1,64 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks the behavior of the reduceRight() method on a number of objects.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS [0,1,2,3].reduceRight(function(a,b){ return a + b; }) is 6
+PASS [1,2,3].reduceRight(function(a,b){ return a + b; }) is 6
+PASS [0,1,2,3].reduceRight(function(a,b){ return a + b; }, 4) is 10
+PASS [1,2,3].reduceRight(function(a,b){ return a + b; }, 4) is 10
+PASS toObject([0,1,2,3]).reduceRight(function(a,b){ return a + b; }) is 6
+PASS toObject([1,2,3]).reduceRight(function(a,b){ return a + b; }) is 6
+PASS toObject([0,1,2,3]).reduceRight(function(a,b){ return a + b; }, 4) is 10
+PASS toObject([1,2,3]).reduceRight(function(a,b){ return a + b; }, 4) is 10
+PASS toUnorderedObject([0,1,2,3]).reduceRight(function(a,b){ return a + b; }) is 6
+PASS toUnorderedObject([1,2,3]).reduceRight(function(a,b){ return a + b; }) is 6
+PASS toUnorderedObject([0,1,2,3]).reduceRight(function(a,b){ return a + b; }, 4) is 10
+PASS toUnorderedObject([1,2,3]).reduceRight(function(a,b){ return a + b; }, 4) is 10
+PASS sparseArray.reduceRight(function(a,b){ return a + b; }, 0) is 10
+PASS toObject(sparseArray).reduceRight(function(a,b){ return a + b; }, 0) is 10
+PASS sparseArray.reduceRight(function(a,b){ callCount++; }); callCount is 0
+PASS toObject(sparseArray).reduceRight(function(a,b){ callCount++; }); callCount is 0
+PASS sparseArray.reduceRight(function(a,b){ callCount++; }, 0); callCount is 1
+PASS toObject(sparseArray).reduceRight(function(a,b){ callCount++; }, 0); callCount is 1
+PASS [0,1,2,3,4].reduceRight(function(a,b){ callCount++; }, 0); callCount is 5
+PASS [0,1,2,3,4].reduceRight(function(a,b){ callCount++; }); callCount is 4
+PASS [1, 2, 3, 4].reduceRight(function(a,b, i, thisObj){ thisObj.length--; callCount++; return a + b; }, 0); callCount is 4
+PASS [1, 2, 3, 4].reduceRight(function(a,b, i, thisObj){ thisObj.length = 1; callCount++; return a + b; }, 0); callCount is 2
+PASS [1, 2, 3, 4].reduceRight(function(a,b, i, thisObj){ thisObj.length++; callCount++; return a + b; }, 0); callCount is 4
+PASS toObject([1, 2, 3, 4]).reduceRight(function(a,b, i, thisObj){ thisObj.length--; callCount++; return a + b; }, 0); callCount is 4
+PASS toObject([1, 2, 3, 4]).reduceRight(function(a,b, i, thisObj){ thisObj.length++; callCount++; return a + b; }, 0); callCount is 4
+PASS [[0,1], [2,3], [4,5]].reduceRight(function(a,b) {return a.concat(b);}, []) is [4,5,2,3,0,1]
+PASS toObject([[0,1], [2,3], [4,5]]).reduceRight(function(a,b) {return a.concat(b);}, []) is [4,5,2,3,0,1]
+PASS toObject([0,1,2,3,4,5]).reduceRight(function(a,b,i) {return a.concat([i,b]);}, []) is [5,5,4,4,3,3,2,2,1,1,0,0]
+PASS toUnorderedObject([[0,1], [2,3], [4,5]]).reduceRight(function(a,b) {return a.concat(b);}, []) is [4,5,2,3,0,1]
+PASS toUnorderedObject([0,1,2,3,4,5]).reduceRight(function(a,b,i) {return a.concat([i,b]);}, []) is [5,5,4,4,3,3,2,2,1,1,0,0]
+PASS [0,1,2,3,4,5].reduceRight(function(a,b,i) {return a.concat([i,b]);}, []) is [5,5,4,4,3,3,2,2,1,1,0,0]
+PASS [2,3].reduceRight(function() {'use strict'; return this;}) is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-reduceRight.js b/deps/v8/test/webkit/array-reduceRight.js
new file mode 100644 (file)
index 0000000..805a46b
--- /dev/null
@@ -0,0 +1,93 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks the behavior of the reduceRight() method on a number of objects."
+);
+
+function toObject(array) {
+    var o = {};
+    for (var i in array)
+        o[i] = array[i];
+    o.length = array.length;
+    o.reduceRight = Array.prototype.reduceRight;
+    return o;
+}
+function toUnorderedObject(array) {
+    var o = {};
+    var props = [];
+    for (var i in array)
+        props.push(i);
+    for (var i = props.length - 1; i >= 0; i--)
+        o[props[i]] = array[props[i]];
+    o.length = array.length;
+    o.reduceRight = Array.prototype.reduceRight;
+    return o;
+}
+
+shouldBe("[0,1,2,3].reduceRight(function(a,b){ return a + b; })", "6");
+shouldBe("[1,2,3].reduceRight(function(a,b){ return a + b; })", "6");
+shouldBe("[0,1,2,3].reduceRight(function(a,b){ return a + b; }, 4)", "10");
+shouldBe("[1,2,3].reduceRight(function(a,b){ return a + b; }, 4)", "10");
+shouldBe("toObject([0,1,2,3]).reduceRight(function(a,b){ return a + b; })", "6");
+shouldBe("toObject([1,2,3]).reduceRight(function(a,b){ return a + b; })", "6");
+shouldBe("toObject([0,1,2,3]).reduceRight(function(a,b){ return a + b; }, 4)", "10");
+shouldBe("toObject([1,2,3]).reduceRight(function(a,b){ return a + b; }, 4)", "10");
+shouldBe("toUnorderedObject([0,1,2,3]).reduceRight(function(a,b){ return a + b; })", "6");
+shouldBe("toUnorderedObject([1,2,3]).reduceRight(function(a,b){ return a + b; })", "6");
+shouldBe("toUnorderedObject([0,1,2,3]).reduceRight(function(a,b){ return a + b; }, 4)", "10");
+shouldBe("toUnorderedObject([1,2,3]).reduceRight(function(a,b){ return a + b; }, 4)", "10");
+sparseArray = [];
+sparseArray[10] = 10;
+shouldBe("sparseArray.reduceRight(function(a,b){ return a + b; }, 0)", "10");
+shouldBe("toObject(sparseArray).reduceRight(function(a,b){ return a + b; }, 0)", "10");
+var callCount = 0;
+shouldBe("sparseArray.reduceRight(function(a,b){ callCount++; }); callCount", "0");
+callCount = 0;
+shouldBe("toObject(sparseArray).reduceRight(function(a,b){ callCount++; }); callCount", "0");
+var callCount = 0;
+shouldBe("sparseArray.reduceRight(function(a,b){ callCount++; }, 0); callCount", "1");
+callCount = 0;
+shouldBe("toObject(sparseArray).reduceRight(function(a,b){ callCount++; }, 0); callCount", "1");
+callCount = 0;
+shouldBe("[0,1,2,3,4].reduceRight(function(a,b){ callCount++; }, 0); callCount", "5");
+callCount = 0;
+shouldBe("[0,1,2,3,4].reduceRight(function(a,b){ callCount++; }); callCount", "4");
+callCount = 0;
+shouldBe("[1, 2, 3, 4].reduceRight(function(a,b, i, thisObj){ thisObj.length--; callCount++; return a + b; }, 0); callCount", "4");
+callCount = 0;
+shouldBe("[1, 2, 3, 4].reduceRight(function(a,b, i, thisObj){ thisObj.length = 1; callCount++; return a + b; }, 0); callCount", "2");
+callCount = 0;
+shouldBe("[1, 2, 3, 4].reduceRight(function(a,b, i, thisObj){ thisObj.length++; callCount++; return a + b; }, 0); callCount", "4");
+callCount = 0;
+shouldBe("toObject([1, 2, 3, 4]).reduceRight(function(a,b, i, thisObj){ thisObj.length--; callCount++; return a + b; }, 0); callCount", "4");
+callCount = 0;
+shouldBe("toObject([1, 2, 3, 4]).reduceRight(function(a,b, i, thisObj){ thisObj.length++; callCount++; return a + b; }, 0); callCount", "4");
+
+shouldBe("[[0,1], [2,3], [4,5]].reduceRight(function(a,b) {return a.concat(b);}, [])", "[4,5,2,3,0,1]");
+shouldBe("toObject([[0,1], [2,3], [4,5]]).reduceRight(function(a,b) {return a.concat(b);}, [])", "[4,5,2,3,0,1]");
+shouldBe("toObject([0,1,2,3,4,5]).reduceRight(function(a,b,i) {return a.concat([i,b]);}, [])", "[5,5,4,4,3,3,2,2,1,1,0,0]");
+shouldBe("toUnorderedObject([[0,1], [2,3], [4,5]]).reduceRight(function(a,b) {return a.concat(b);}, [])", "[4,5,2,3,0,1]");
+shouldBe("toUnorderedObject([0,1,2,3,4,5]).reduceRight(function(a,b,i) {return a.concat([i,b]);}, [])", "[5,5,4,4,3,3,2,2,1,1,0,0]");
+shouldBe("[0,1,2,3,4,5].reduceRight(function(a,b,i) {return a.concat([i,b]);}, [])", "[5,5,4,4,3,3,2,2,1,1,0,0]");
+shouldBe("[2,3].reduceRight(function() {'use strict'; return this;})", "undefined");
diff --git a/deps/v8/test/webkit/array-reset-large-index-expected.txt b/deps/v8/test/webkit/array-reset-large-index-expected.txt
new file mode 100644 (file)
index 0000000..9ab93cc
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test puts an item in a big index and then tries to change it. It shoudl change successfully.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS array[10001] is 5
+PASS array[10002] is "b"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-reset-large-index.js b/deps/v8/test/webkit/array-reset-large-index.js
new file mode 100644 (file)
index 0000000..532d9f0
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test puts an item in a big index and then tries to change it. It shoudl change successfully."
+);
+
+var array = [];
+array[10001] = 0;
+array[10001] = 5;
+array[10002] = "a";
+array[10002] = "b";
+
+shouldBe('array[10001]', '5');
+shouldBe('array[10002]', '"b"');
diff --git a/deps/v8/test/webkit/array-sort-numericCompare-expected.txt b/deps/v8/test/webkit/array-sort-numericCompare-expected.txt
new file mode 100644 (file)
index 0000000..a33e70f
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that a call to array.sort(compareFunction) works correctly for numeric comparisons (arg1 - arg2), and also for things that might look like numeric comparisons.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS [3,1,5,2,4].sort(doSort) is [1,2,3,4,5]
+PASS [3,1,5,2,4].sort(dontSort) is [3,1,5,2,4]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-sort-numericCompare.js b/deps/v8/test/webkit/array-sort-numericCompare.js
new file mode 100644 (file)
index 0000000..74df82f
--- /dev/null
@@ -0,0 +1,39 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that a call to array.sort(compareFunction) works correctly for numeric comparisons (arg1 - arg2), and also for things that might look like numeric comparisons."
+);
+
+function doSort(x, y)
+{
+    return x - y;
+}
+
+function dontSort(w, x, y)
+{
+    return x - y;
+}
+
+shouldBe("[3,1,5,2,4].sort(doSort)", "[1,2,3,4,5]");
+shouldBe("[3,1,5,2,4].sort(dontSort)", "[3,1,5,2,4]");
diff --git a/deps/v8/test/webkit/array-sort-reentrance-expected.txt b/deps/v8/test/webkit/array-sort-reentrance-expected.txt
new file mode 100644 (file)
index 0000000..7119af9
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that a call to array.sort(compareFunction) does not crash from within a sort comparison function.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-sort-reentrance.js b/deps/v8/test/webkit/array-sort-reentrance.js
new file mode 100644 (file)
index 0000000..690ab38
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that a call to array.sort(compareFunction) does not crash from within a sort comparison function."
+);
+
+var numbers1 = [1, 2, 3, 4, 5, 6, 7];
+var numbers2 = numbers1.slice();
+
+function compareFn1(a, b) {
+    return b - a;
+}
+
+function compareFn2(a, b) {
+    numbers1.sort(compareFn1);
+    return b - a;
+}
+
+numbers2.sort(compareFn2);
diff --git a/deps/v8/test/webkit/array-sort-small-sparse-array-with-large-length-expected.txt b/deps/v8/test/webkit/array-sort-small-sparse-array-with-large-length-expected.txt
new file mode 100644 (file)
index 0000000..1de82f5
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we can quickly sort a small sparse array that has a large length.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+array[0] = 42
+PASS result is "42"
+PASS array.length is 10000001
+PASS array[0] is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-sort-small-sparse-array-with-large-length.js b/deps/v8/test/webkit/array-sort-small-sparse-array-with-large-length.js
new file mode 100644 (file)
index 0000000..05478d6
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we can quickly sort a small sparse array that has a large length."
+);
+
+var array = [];
+array[10000000] = 42;
+array.sort();
+var result = "";
+for (var s in array) {
+    debug("array[" + s + "] = " + array[s]);
+    if (result)
+        result += ",";
+    result += array[s];
+}
+shouldBe("result", "\"42\"");
+shouldBe("array.length", "10000001");
+shouldBe("array[0]", "42");
diff --git a/deps/v8/test/webkit/array-sort-sparse-expected.txt b/deps/v8/test/webkit/array-sort-sparse-expected.txt
new file mode 100644 (file)
index 0000000..485092d
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that arrays and array like objects containing holes are sorted correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS testSort([,undefined,0,1]) is true
+PASS testSort({length:4,1:undefined,2:0,3:1}) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-sort-sparse.js b/deps/v8/test/webkit/array-sort-sparse.js
new file mode 100644 (file)
index 0000000..41a91f1
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that arrays and array like objects containing holes are sorted correctly."
+);
+
+function testSort(x)
+{
+    [].sort.call(x)
+    return x[0] < x[1] && x[2] === undefined && !(3 in x) && x.length == 4;
+}
+
+shouldBeTrue("testSort([,undefined,0,1])");
+shouldBeTrue("testSort({length:4,1:undefined,2:0,3:1})");
diff --git a/deps/v8/test/webkit/array-tostring-and-join-expected.txt b/deps/v8/test/webkit/array-tostring-and-join-expected.txt
new file mode 100644 (file)
index 0000000..9cf3062
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that toString and join share the same HashSet for visited elements.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS arr.join() is '1,2,,**'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-tostring-and-join.js b/deps/v8/test/webkit/array-tostring-and-join.js
new file mode 100644 (file)
index 0000000..b4fdb51
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+
+"This test checks that toString and join share the same HashSet for visited elements."
+
+);
+
+var arr = [1, 2];
+var obj = {};
+obj.__proto__.toString = function() { return "*" + arr + "*"; }
+arr[2] = arr;
+arr[3] = obj;
+
+shouldBe("arr.join()", "'1,2,,**'");
diff --git a/deps/v8/test/webkit/array-type-speculation-expected.txt b/deps/v8/test/webkit/array-type-speculation-expected.txt
new file mode 100644 (file)
index 0000000..de43631
--- /dev/null
@@ -0,0 +1,48 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that storing into something that is not array does not crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is "foo"
+PASS result is "foo"
+PASS result is undefined
+PASS result is undefined
+PASS result is undefined
+PASS result is "foo"
+PASS result is undefined
+PASS result is "foo"
+PASS result is "foo"
+PASS result is undefined
+PASS result is "foo"
+PASS result is undefined
+PASS result is undefined
+PASS result is undefined
+PASS result is "foo"
+PASS result is "foo"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/array-type-speculation.js b/deps/v8/test/webkit/array-type-speculation.js
new file mode 100644 (file)
index 0000000..a5467c0
--- /dev/null
@@ -0,0 +1,65 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that storing into something that is not array does not crash."
+);
+
+theCode = "\n\
+function storeFooByValOrDoArithmetic(o, p1, p2, v) {\n\
+    var x;\n\
+    if (p1) {\n\
+        x = o.foo;\n\
+    } else {\n\
+        x = v;\n\
+        if (p2) {\n\
+            x--;\n\
+        } else {\n\
+            x++;\n\
+        }\n\
+    }\n\
+    x[5] = \"foo\";\n\
+}\n\
+\n\
+function runTheTest(p1, p2) {\n\
+    var o = new Object();\n\
+    o.foo = new Object();\n\
+    storeFooByValOrDoArithmetic(o, p1, p2, 1);\n\
+    return o.foo[5];\n\
+}\n";
+
+function runWithPredicates(predicateArray) {
+    var myCode = theCode;
+
+    for (var i = 0; i < predicateArray.length; ++i) {
+        myCode += "result = runTheTest(" + predicateArray[i][0] + ", " + predicateArray[i][1] + ");\n";
+        myCode += "shouldBe(\"result\", " + predicateArray[i][2] + ");\n";
+    }
+
+    eval(myCode);
+}
+
+runWithPredicates([[true, true, "\"\\\"foo\\\"\""], [true, false, "\"\\\"foo\\\"\""], [false, true, "\"undefined\""], [false, false, "\"undefined\""]]);
+runWithPredicates([[false, false, "\"undefined\""], [true, false, "\"\\\"foo\\\"\""], [false, true, "\"undefined\""], [true, true, "\"\\\"foo\\\"\""]]);
+runWithPredicates([[true, true, "\"\\\"foo\\\"\""], [false, true, "\"undefined\""], [true, false, "\"\\\"foo\\\"\""], [false, false, "\"undefined\""]]);
+runWithPredicates([[false, false, "\"undefined\""], [false, true, "\"undefined\""], [true, false, "\"\\\"foo\\\"\""], [true, true, "\"\\\"foo\\\"\""]]);
diff --git a/deps/v8/test/webkit/avl-crash-expected.txt b/deps/v8/test/webkit/avl-crash-expected.txt
new file mode 100644 (file)
index 0000000..574a5f2
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for a crash in sort() that was seen on a particular input data set.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/avl-crash.js b/deps/v8/test/webkit/avl-crash.js
new file mode 100644 (file)
index 0000000..ff6a75e
--- /dev/null
@@ -0,0 +1,121 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks for a crash in sort() that was seen on a particular input data set."
+);
+
+function natcompare(a, b) {
+    if (a == b)
+        return 0;
+    return (a < b) ? -1 : 1;
+}
+
+SubwayData = [
+"23rd St-Broadway ",
+"45 Road-Court Sq",
+"LIC-Court Sq",
+"LIC-Court Sq",
+"23rd St-Park Ave S",
+"241st St",
+"242nd St",
+"25th Ave",
+"25th St",
+"28th St-7th Ave",
+"28th St-Broadway",
+"28th St-Park Ave S",
+"2nd Ave-Houston St",
+"30th Ave",
+"33rd St",
+"33rd St-Park Ave",
+"34th St-6th Ave",
+"34th St-7th Ave",
+"34th St-8th Ave",
+"36th Ave",
+"36th St",
+"36th St",
+"39th Ave",
+"3rd Ave-138th St",
+"3rd Ave-149th St",
+"3rd Ave-14th St",
+"40th St",
+"42nd St-5th Ave-6th Ave",
+"42nd St-5th Ave-6th Ave",
+"45th St",
+"46th St",
+"46th St",
+"47-50th Sts-Rockefeller Center",
+"49th St-7th Ave",
+"50th St-New Utrecht Ave",
+"9th Ave",
+"90th St-Elmhurst Ave",
+"96th St",
+"96th St",
+"96th St",
+"9th St-4th Ave",
+"Alabama Ave",
+"Allerton Ave",
+"Aqueduct-North Conduit Ave",
+"Astor Place",
+"Astoria Blvd",
+"Atlantic Ave",
+"Atlantic Ave-Pacific St",
+"Ave H",
+"Ave N",
+"Ave P",
+"Ave U",
+"Ave U",
+"Ave U",
+"Ave X",
+"Bay Pkwy",
+"Bay Pkwy",
+"Bay Pkwy-22nd Ave",
+"Bay Ridge Ave",
+"Baychester Ave",
+"Beach 105th St",
+"Beach 25th St",
+"Beach 36th St",
+"Beach 44th St",
+"Beach 60th St",
+"Beach 67th St",
+"Beach 90th St",
+"Beach 98th St",
+"Bedford Ave",
+"Bedford Park Blvd",
+"Broadway",
+"Broadway",
+"Bronx Park East",
+"Brook Ave",
+"Buhre Ave",
+"Burke Ave",
+"Burnside Ave",
+"Bushwick Ave",
+"Uptown Bleecker St-Lafayette St",
+"Downtown Bleecker St-Lafayette St",
+"Canal Street",
+"Canal Street",
+"Canal Street",
+"Canal-Church Sts"
+];
+
+SubwayData.sort(natcompare)
diff --git a/deps/v8/test/webkit/bitops-type-tag-expected.txt b/deps/v8/test/webkit/bitops-type-tag-expected.txt
new file mode 100644 (file)
index 0000000..7a1fb9c
--- /dev/null
@@ -0,0 +1,38 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Ensure various bit operators correctly tag the final result value
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS aDouble>>27 is 0
+PASS aDouble>>27|0 is 0
+PASS aDouble>>0 is 100000000
+PASS aDouble>>0|0 is 100000000
+PASS aDouble|0 is 100000000
+PASS (function(x){ return 2147483648>>>x; })(31) is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/bitops-type-tag.js b/deps/v8/test/webkit/bitops-type-tag.js
new file mode 100644 (file)
index 0000000..562ec0c
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Ensure various bit operators correctly tag the final result value");
+
+aDouble = 100000000.5;
+shouldBe("aDouble>>27", "0");
+shouldBe("aDouble>>27|0", "0");
+shouldBe("aDouble>>0", "100000000");
+shouldBe("aDouble>>0|0", "100000000");
+shouldBe("aDouble|0", "100000000");
+
+shouldBe("(function(x){ return 2147483648>>>x; })(31)", "1");
diff --git a/deps/v8/test/webkit/boolean-argument-prediction-expected.txt b/deps/v8/test/webkit/boolean-argument-prediction-expected.txt
new file mode 100644 (file)
index 0000000..2a98f4d
--- /dev/null
@@ -0,0 +1,48 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that arguments predicted to be boolean are checked.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS predictBooleanArgument(true) is "yes"
+PASS predictBooleanArgument(false) is "no"
+PASS predictBooleanArgument(true) is "yes"
+PASS predictBooleanArgument(false) is "no"
+PASS predictBooleanArgument(0) is "no"
+PASS predictBooleanArgument(1) is "yes"
+PASS predictBooleanArgument(2) is "yes"
+PASS predictBooleanArgument(3) is "yes"
+PASS predictBooleanArgument(4) is "yes"
+PASS predictBooleanArgument(true) is "yes"
+PASS predictBooleanArgument(false) is "no"
+PASS predictBooleanArgument(0) is "no"
+PASS predictBooleanArgument(1) is "yes"
+PASS predictBooleanArgument(2) is "yes"
+PASS predictBooleanArgument(3) is "yes"
+PASS predictBooleanArgument(4) is "yes"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/boolean-argument-prediction.js b/deps/v8/test/webkit/boolean-argument-prediction.js
new file mode 100644 (file)
index 0000000..ac0c615
--- /dev/null
@@ -0,0 +1,68 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that arguments predicted to be boolean are checked."
+);
+
+function predictBooleanArgument(b) {
+    if (b) {
+        return "yes";
+    } else {
+        return "no";
+    }
+}
+
+shouldBe("predictBooleanArgument(true)", "\"yes\"");
+shouldBe("predictBooleanArgument(false)", "\"no\"");
+
+for (var i = 0; i < 1000; ++i) {
+    predictBooleanArgument(true);
+    predictBooleanArgument(false);
+}
+
+shouldBe("predictBooleanArgument(true)", "\"yes\"");
+shouldBe("predictBooleanArgument(false)", "\"no\"");
+
+shouldBe("predictBooleanArgument(0)", "\"no\"");
+shouldBe("predictBooleanArgument(1)", "\"yes\"");
+shouldBe("predictBooleanArgument(2)", "\"yes\"");
+shouldBe("predictBooleanArgument(3)", "\"yes\"");
+shouldBe("predictBooleanArgument(4)", "\"yes\"");
+
+for (var i = 0; i < 1000; ++i) {
+    predictBooleanArgument(0);
+    predictBooleanArgument(1);
+    predictBooleanArgument(2);
+    predictBooleanArgument(3);
+    predictBooleanArgument(4);
+}
+
+shouldBe("predictBooleanArgument(true)", "\"yes\"");
+shouldBe("predictBooleanArgument(false)", "\"no\"");
+
+shouldBe("predictBooleanArgument(0)", "\"no\"");
+shouldBe("predictBooleanArgument(1)", "\"yes\"");
+shouldBe("predictBooleanArgument(2)", "\"yes\"");
+shouldBe("predictBooleanArgument(3)", "\"yes\"");
+shouldBe("predictBooleanArgument(4)", "\"yes\"");
diff --git a/deps/v8/test/webkit/boxed-double-to-int-expected.txt b/deps/v8/test/webkit/boxed-double-to-int-expected.txt
new file mode 100644 (file)
index 0000000..4cbaa0f
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that converting a boxed double to an integer does not crash the register allocator.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS boxedDoubleToInt(1, 2) is 3.5
+PASS boxedDoubleToInt(3, 4) is 4.5
+PASS boxedDoubleToInt(5, 6) is 7.5
+PASS boxedDoubleToInt(7, 8) is 8.5
+PASS boxedDoubleToInt(9, 10) is 11.5
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/boxed-double-to-int.js b/deps/v8/test/webkit/boxed-double-to-int.js
new file mode 100644 (file)
index 0000000..578ba04
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that converting a boxed double to an integer does not crash the register allocator."
+);
+
+function boxedDoubleToInt(x, y) {
+    var y = x / 2;
+    var z = y + 2;
+    return (y | 1) + z;
+}
+
+shouldBe("boxedDoubleToInt(1, 2)", "3.5");
+shouldBe("boxedDoubleToInt(3, 4)", "4.5");
+shouldBe("boxedDoubleToInt(5, 6)", "7.5");
+shouldBe("boxedDoubleToInt(7, 8)", "8.5");
+shouldBe("boxedDoubleToInt(9, 10)", "11.5");
diff --git a/deps/v8/test/webkit/break-ASI-expected.txt b/deps/v8/test/webkit/break-ASI-expected.txt
new file mode 100644 (file)
index 0000000..8188fea
--- /dev/null
@@ -0,0 +1,41 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to make sure we don't incorrectly insert a semi colon after a break statement
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS do { if(0) break
+;else true; } while (0) is true
+PASS do { if(0) continue
+;else true; } while (0) is true
+PASS (function(){if (0) return
+;else return true;})() is true
+PASS do { if(0) throw 'x';else true; } while (0) is true
+PASS if (0) throw
+'Shouldn't have parsed this.'; threw exception SyntaxError: Illegal newline after throw.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/break-ASI.js b/deps/v8/test/webkit/break-ASI.js
new file mode 100644 (file)
index 0000000..2ccdf2c
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to make sure we don't incorrectly insert a semi colon after a break statement");
+
+shouldBeTrue("do { if(0) break\n;else true; } while (0)")
+shouldBeTrue("do { if(0) continue\n;else true; } while (0)")
+shouldBeTrue("(function(){if (0) return\n;else return true;})()")
+shouldBeTrue("do { if(0) throw 'x';else true; } while (0)")
+shouldThrow("if (0) throw\n'Shouldn\'t have parsed this.';")
diff --git a/deps/v8/test/webkit/cached-call-uninitialized-arguments-expected.txt b/deps/v8/test/webkit/cached-call-uninitialized-arguments-expected.txt
new file mode 100644 (file)
index 0000000..79cf015
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that uninitialized parameters for cached call functions correctly defaults to undefined.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS arg4 is undefined.
+PASS arg5 is undefined.
+PASS arg6 is undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/cached-call-uninitialized-arguments.js b/deps/v8/test/webkit/cached-call-uninitialized-arguments.js
new file mode 100644 (file)
index 0000000..de3f098
--- /dev/null
@@ -0,0 +1,66 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that uninitialized parameters for cached call functions correctly defaults to undefined."
+
+);
+
+function doForEach(arr) {
+    function callback(element, index, array, arg4, arg5, arg6) {
+
+        function shouldBeUndefined(_a) {
+            var exception;
+            var _av;
+            try {
+                _av = eval(_a);
+            } catch (e) {
+                exception = e;
+            }
+
+            if (exception)
+                testFailed(_a + " should be undefined. Threw exception " + exception);
+            else if (typeof _av == "undefined")
+                testPassed(_a + " is undefined.");
+            else
+                testFailed(_a + " should be undefined. Was " + _av);
+        }
+
+        shouldBeUndefined("arg4");
+        shouldBeUndefined("arg5");
+        shouldBeUndefined("arg6");
+    }
+
+    arr.forEach(callback);
+}
+
+function callAfterRecursingForDepth(depth, func, arr) {
+    if (depth > 0) {
+        callAfterRecursingForDepth(depth - 1, func, arr);
+    } else {
+        func(arr);
+    }
+}
+
+var arr = [1];
+callAfterRecursingForDepth(20, doForEach, arr);
diff --git a/deps/v8/test/webkit/call-apply-crash-expected.txt b/deps/v8/test/webkit/call-apply-crash-expected.txt
new file mode 100644 (file)
index 0000000..3fdf802
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure that the registerfile is grown correctly when calling apply
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Did not crash using apply
+PASS Did not crash using apply
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/call-apply-crash.js b/deps/v8/test/webkit/call-apply-crash.js
new file mode 100644 (file)
index 0000000..766a0ee
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure that the registerfile is grown correctly when calling apply");
+
+function testLog() { testPassed(this); }
+(function () {
+    Function.prototype.call.apply(testLog, arguments);
+})('Did not crash using apply', 0, 0); // needs 3+ arguments
+(function () {
+    arguments; // reify the arguments object.
+    Function.prototype.call.apply(testLog, arguments);
+})('Did not crash using apply', 0, 0); // needs 3+ arguments
diff --git a/deps/v8/test/webkit/char-at-expected.txt b/deps/v8/test/webkit/char-at-expected.txt
new file mode 100644 (file)
index 0000000..f99301e
--- /dev/null
@@ -0,0 +1,110 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This is a test of the charAt and charCodeAt string functions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "".charAt() is ""
+PASS "".charCodeAt() is NaN
+PASS "".charAt(undefined) is ""
+PASS "".charCodeAt(undefined) is NaN
+PASS "".charAt(0) is ""
+PASS "".charCodeAt(0) is NaN
+PASS "".charAt(null) is ""
+PASS "".charCodeAt(null) is NaN
+PASS "".charAt(false) is ""
+PASS "".charCodeAt(false) is NaN
+PASS "".charAt(true) is ""
+PASS "".charCodeAt(true) is NaN
+PASS "".charAt(0) is ""
+PASS "".charCodeAt(0) is NaN
+PASS "".charAt(0.1) is ""
+PASS "".charCodeAt(0.1) is NaN
+PASS "".charAt(999) is ""
+PASS "".charCodeAt(999) is NaN
+PASS "".charAt(Infinity) is ""
+PASS "".charCodeAt(Infinity) is NaN
+PASS "".charAt(-1) is ""
+PASS "".charCodeAt(-1) is NaN
+PASS "".charAt(-Infinity) is ""
+PASS "".charCodeAt(-Infinity) is NaN
+PASS "".charAt(NaN) is ""
+PASS "".charCodeAt(NaN) is NaN
+PASS "x".charAt() is "x"
+PASS "x".charCodeAt() is 120
+PASS "x".charAt(undefined) is "x"
+PASS "x".charCodeAt(undefined) is 120
+PASS "x".charAt(0) is "x"
+PASS "x".charCodeAt(0) is 120
+PASS "x".charAt(null) is "x"
+PASS "x".charCodeAt(null) is 120
+PASS "x".charAt(false) is "x"
+PASS "x".charCodeAt(false) is 120
+PASS "x".charAt(true) is ""
+PASS "x".charCodeAt(true) is NaN
+PASS "x".charAt(0) is "x"
+PASS "x".charCodeAt(0) is 120
+PASS "x".charAt(0.1) is "x"
+PASS "x".charCodeAt(0.1) is 120
+PASS "x".charAt(999) is ""
+PASS "x".charCodeAt(999) is NaN
+PASS "x".charAt(Infinity) is ""
+PASS "x".charCodeAt(Infinity) is NaN
+PASS "x".charAt(-1) is ""
+PASS "x".charCodeAt(-1) is NaN
+PASS "x".charAt(-Infinity) is ""
+PASS "x".charCodeAt(-Infinity) is NaN
+PASS "x".charAt(NaN) is "x"
+PASS "x".charCodeAt(NaN) is 120
+PASS "xy".charAt() is "x"
+PASS "xy".charCodeAt() is 120
+PASS "xy".charAt(undefined) is "x"
+PASS "xy".charCodeAt(undefined) is 120
+PASS "xy".charAt(0) is "x"
+PASS "xy".charCodeAt(0) is 120
+PASS "xy".charAt(null) is "x"
+PASS "xy".charCodeAt(null) is 120
+PASS "xy".charAt(false) is "x"
+PASS "xy".charCodeAt(false) is 120
+PASS "xy".charAt(true) is "y"
+PASS "xy".charCodeAt(true) is 121
+PASS "xy".charAt(0) is "x"
+PASS "xy".charCodeAt(0) is 120
+PASS "xy".charAt(0.1) is "x"
+PASS "xy".charCodeAt(0.1) is 120
+PASS "xy".charAt(999) is ""
+PASS "xy".charCodeAt(999) is NaN
+PASS "xy".charAt(Infinity) is ""
+PASS "xy".charCodeAt(Infinity) is NaN
+PASS "xy".charAt(-1) is ""
+PASS "xy".charCodeAt(-1) is NaN
+PASS "xy".charAt(-Infinity) is ""
+PASS "xy".charCodeAt(-Infinity) is NaN
+PASS "xy".charAt(NaN) is "x"
+PASS "xy".charCodeAt(NaN) is 120
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/char-at.js b/deps/v8/test/webkit/char-at.js
new file mode 100644 (file)
index 0000000..7af8bc9
--- /dev/null
@@ -0,0 +1,131 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This is a test of the charAt and charCodeAt string functions.'
+);
+
+var undefined;
+
+var cases = [
+    ["", "omitted"],
+    ["", undefined],
+    ["", 0],
+    ["", null],
+    ["", false],
+    ["", true],
+    ["", 0.0],
+    ["", 0.1],
+    ["", 999],
+    ["", 1/0],
+    ["", -1],
+    ["", -1/0],
+    ["", 0/0],
+
+    ["x", "omitted"],
+    ["x", undefined],
+    ["x", 0],
+    ["x", null],
+    ["x", false],
+    ["x", true],
+    ["x", 0.0],
+    ["x", 0.1],
+    ["x", 999],
+    ["x", 1/0],
+    ["x", -1],
+    ["x", -1/0],
+    ["x", 0/0],
+
+    ["xy", "omitted"],
+    ["xy", undefined],
+    ["xy", 0],
+    ["xy", null],
+    ["xy", false],
+    ["xy", true],
+    ["xy", 0.0],
+    ["xy", 0.1],
+    ["xy", 999],
+    ["xy", 1/0],
+    ["xy", -1],
+    ["xy", -1/0],
+    ["xy", 0/0],
+];
+
+var answers = [['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['"x"', '120'],
+['"x"', '120'],
+['"x"', '120'],
+['"x"', '120'],
+['"x"', '120'],
+['""', 'NaN'],
+['"x"', '120'],
+['"x"', '120'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['"x"', '120'],
+['"x"', '120'],
+['"x"', '120'],
+['"x"', '120'],
+['"x"', '120'],
+['"x"', '120'],
+['"y"', '121'],
+['"x"', '120'],
+['"x"', '120'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['"x"', '120']];
+
+for (var i = 0; i < cases.length; ++i)
+{
+    var item = cases[i];
+    var result = answers[i];
+    if (item[1] == "omitted") {
+        shouldBe('"' + item[0] + '".charAt()', result[0]);
+        if (result[1] == 'NaN')
+            shouldBeNaN('"' + item[0] + '".charCodeAt()');
+        else
+            shouldBe('"' + item[0] + '".charCodeAt()', result[1]);
+    } else {
+        shouldBe('"' + item[0] + '".charAt(' + item[1] + ')', result[0]);
+        if (result[1] == 'NaN')
+            shouldBeNaN('"' + item[0] + '".charCodeAt(' + item[1] + ')');
+        else
+            shouldBe('"' + item[0] + '".charCodeAt(' + item[1] + ')', result[1]);
+    }
+}
diff --git a/deps/v8/test/webkit/closure-inside-extra-arg-call-expected.txt b/deps/v8/test/webkit/closure-inside-extra-arg-call-expected.txt
new file mode 100644 (file)
index 0000000..bc88972
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that activation objects for functions called with too many arguments are created properly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS c1() is "xyxy"
+PASS c2() is "xyxy"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/closure-inside-extra-arg-call.js b/deps/v8/test/webkit/closure-inside-extra-arg-call.js
new file mode 100644 (file)
index 0000000..15e7aeb
--- /dev/null
@@ -0,0 +1,79 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+
+"This test checks that activation objects for functions called with too many arguments are created properly."
+
+);
+
+
+var c1;
+
+function f1()
+{
+    var a = "x";
+    var b = "y";
+    var c = a + b;
+    var d = a + b + c;
+
+    c1 = function() { return d; }
+}
+
+f1(0, 0, 0, 0, 0, 0, 0, 0, 0);
+
+function s1() {
+    shouldBe("c1()", '"xyxy"');
+}
+
+function t1() {
+    var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p;
+    s1();
+}
+
+t1();
+
+var c2;
+
+function f2()
+{
+    var a = "x";
+    var b = "y";
+    var c = a + b;
+    var d = a + b + c;
+
+    c2 = function() { return d; }
+}
+
+new f2(0, 0, 0, 0, 0, 0, 0, 0, 0);
+
+function s2() {
+    shouldBe("c2()", '"xyxy"');
+}
+
+function t2() {
+    var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p;
+    s2();
+}
+
+t2();
diff --git a/deps/v8/test/webkit/codegen-assign-nontemporary-as-rexp-expected.txt b/deps/v8/test/webkit/codegen-assign-nontemporary-as-rexp-expected.txt
new file mode 100644 (file)
index 0000000..af1dc5b
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests whether bytecode codegen properly handles assignment as righthand expression.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS assign_as_rexp_1() is 'PASS'
+PASS assign_as_rexp_2() is 'PASS'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/codegen-assign-nontemporary-as-rexp.js b/deps/v8/test/webkit/codegen-assign-nontemporary-as-rexp.js
new file mode 100644 (file)
index 0000000..15fd1ec
--- /dev/null
@@ -0,0 +1,56 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests whether bytecode codegen properly handles assignment as righthand expression.'
+);
+
+
+function assign_as_rexp_1() {
+  var obj = {};
+  var victim = 'PASS';
+  obj.__defineSetter__('slot',
+      function(v) {
+          victim = 'FAIL';
+      });
+  var obj2 = {};
+  obj2.forward = (obj['slot'] = victim);
+  return obj2.forward;
+};
+
+shouldBe("assign_as_rexp_1()", "'PASS'");
+
+
+function assign_as_rexp_2() {
+  var obj = {};
+  var victim = 'PASS';
+  obj.__defineSetter__('slot',
+      function(v) {
+          victim = 'FAIL';
+      });
+  var obj2 = {};
+  obj2.forward = (obj.slot = victim);
+  return obj2.forward;
+};
+
+shouldBe("assign_as_rexp_2()", "'PASS'");
diff --git a/deps/v8/test/webkit/codegen-jless-expected.txt b/deps/v8/test/webkit/codegen-jless-expected.txt
new file mode 100644 (file)
index 0000000..e731e60
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests particular unusual cases of jump-if-less codegen.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS !(true && undefined > 0) ? 'true' : 'false' is 'true'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/codegen-jless.js b/deps/v8/test/webkit/codegen-jless.js
new file mode 100644 (file)
index 0000000..ba8ba6f
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests particular unusual cases of jump-if-less codegen."
+);
+
+shouldBe("!(true && undefined > 0) ? 'true' : 'false'", "'true'");
diff --git a/deps/v8/test/webkit/codegen-loops-logical-nodes-expected.txt b/deps/v8/test/webkit/codegen-loops-logical-nodes-expected.txt
new file mode 100644 (file)
index 0000000..f77b623
--- /dev/null
@@ -0,0 +1,127 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests loop codegen when the condition is a logical node.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS while_or_eq() is true
+PASS while_or_neq() is true
+PASS while_or_less() is true
+PASS while_or_lesseq() is true
+PASS while_and_eq() is true
+PASS while_and_neq() is true
+PASS while_and_less() is true
+PASS while_and_lesseq() is true
+PASS for_or_eq() is true
+PASS for_or_neq() is true
+PASS for_or_less() is true
+PASS for_or_lesseq() is true
+PASS for_and_eq() is true
+PASS for_and_neq() is true
+PASS for_and_less() is true
+PASS for_and_lesseq() is true
+PASS dowhile_or_eq() is true
+PASS dowhile_or_neq() is true
+PASS dowhile_or_less() is true
+PASS dowhile_or_lesseq() is true
+PASS dowhile_and_eq() is true
+PASS dowhile_and_neq() is true
+PASS dowhile_and_less() is true
+PASS dowhile_and_lesseq() is true
+PASS while_not_or_eq() is false
+PASS while_not_or_neq() is false
+PASS while_not_or_less() is false
+PASS while_not_or_lesseq() is false
+PASS while_not_and_eq() is false
+PASS while_not_and_neq() is false
+PASS while_not_and_less() is false
+PASS while_not_and_lesseq() is false
+PASS for_not_or_eq() is false
+PASS for_not_or_neq() is false
+PASS for_not_or_less() is false
+PASS for_not_or_lesseq() is false
+PASS for_not_and_eq() is false
+PASS for_not_and_neq() is false
+PASS for_not_and_less() is false
+PASS for_not_and_lesseq() is false
+PASS dowhile_not_or_eq() is false
+PASS dowhile_not_or_neq() is false
+PASS dowhile_not_or_less() is false
+PASS dowhile_not_or_lesseq() is false
+PASS dowhile_not_and_eq() is false
+PASS dowhile_not_and_neq() is false
+PASS dowhile_not_and_less() is false
+PASS dowhile_not_and_lesseq() is false
+PASS float_while_or_eq() is true
+PASS float_while_or_neq() is true
+PASS float_while_or_less() is true
+PASS float_while_or_lesseq() is true
+PASS float_while_and_eq() is true
+PASS float_while_and_neq() is true
+PASS float_while_and_less() is true
+PASS float_while_and_lesseq() is true
+PASS float_for_or_eq() is true
+PASS float_for_or_neq() is true
+PASS float_for_or_less() is true
+PASS float_for_or_lesseq() is true
+PASS float_for_and_eq() is true
+PASS float_for_and_neq() is true
+PASS float_for_and_less() is true
+PASS float_for_and_lesseq() is true
+PASS float_dowhile_or_eq() is true
+PASS float_dowhile_or_neq() is true
+PASS float_dowhile_or_less() is true
+PASS float_dowhile_or_lesseq() is true
+PASS float_dowhile_and_eq() is true
+PASS float_dowhile_and_neq() is true
+PASS float_dowhile_and_less() is true
+PASS float_dowhile_and_lesseq() is true
+PASS float_while_not_or_eq() is false
+PASS float_while_not_or_neq() is false
+PASS float_while_not_or_less() is false
+PASS float_while_not_or_lesseq() is false
+PASS float_while_not_and_eq() is false
+PASS float_while_not_and_neq() is false
+PASS float_while_not_and_less() is false
+PASS float_while_not_and_lesseq() is false
+PASS float_for_not_or_eq() is false
+PASS float_for_not_or_neq() is false
+PASS float_for_not_or_less() is false
+PASS float_for_not_or_lesseq() is false
+PASS float_for_not_and_eq() is false
+PASS float_for_not_and_neq() is false
+PASS float_for_not_and_less() is false
+PASS float_for_not_and_lesseq() is false
+PASS float_dowhile_not_or_eq() is false
+PASS float_dowhile_not_or_neq() is false
+PASS float_dowhile_not_or_less() is false
+PASS float_dowhile_not_or_lesseq() is false
+PASS float_dowhile_not_and_eq() is false
+PASS float_dowhile_not_and_neq() is false
+PASS float_dowhile_not_and_less() is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/codegen-loops-logical-nodes.js b/deps/v8/test/webkit/codegen-loops-logical-nodes.js
new file mode 100644 (file)
index 0000000..935c0fc
--- /dev/null
@@ -0,0 +1,1080 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests loop codegen when the condition is a logical node."
+);
+
+function while_or_eq()
+{
+    var a = 0;
+    while (a == 0 || a == 0)
+        return true;
+    return false;
+}
+
+shouldBeTrue("while_or_eq()");
+
+function while_or_neq()
+{
+    var a = 0;
+    while (a != 1 || a != 1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("while_or_neq()");
+
+function while_or_less()
+{
+    var a = 0;
+    while (a < 1 || a < 1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("while_or_less()");
+
+function while_or_lesseq()
+{
+    var a = 0;
+    while (a <= 1 || a <= 1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("while_or_lesseq()");
+
+function while_and_eq()
+{
+    var a = 0;
+    while (a == 0 && a == 0)
+        return true;
+    return false;
+}
+
+shouldBeTrue("while_and_eq()");
+
+function while_and_neq()
+{
+    var a = 0;
+    while (a != 1 && a != 1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("while_and_neq()");
+
+function while_and_less()
+{
+    var a = 0;
+    while (a < 1 && a < 1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("while_and_less()");
+
+function while_and_lesseq()
+{
+    var a = 0;
+    while (a <= 1 && a <= 1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("while_and_lesseq()");
+
+function for_or_eq()
+{
+    for (var a = 0; a == 0 || a == 0; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("for_or_eq()");
+
+function for_or_neq()
+{
+    for (var a = 0; a != 1 || a != 1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("for_or_neq()");
+
+function for_or_less()
+{
+    for (var a = 0; a < 1 || a < 1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("for_or_less()");
+
+function for_or_lesseq()
+{
+    for (var a = 0; a <= 1 || a <= 1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("for_or_lesseq()");
+
+function for_and_eq()
+{
+    for (var a = 0; a == 0 && a == 0; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("for_and_eq()");
+
+function for_and_neq()
+{
+    for (var a = 0; a != 1 && a != 1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("for_and_neq()");
+
+function for_and_less()
+{
+    for (var a = 0; a < 1 && a < 1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("for_and_less()");
+
+function for_and_lesseq()
+{
+    for (var a = 0; a <= 1 && a <= 1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("for_and_lesseq()");
+
+function dowhile_or_eq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (a == 0 || a == 0)
+    return false;
+}
+
+shouldBeTrue("dowhile_or_eq()");
+
+function dowhile_or_neq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (a != 1 || a != 1)
+    return false;
+}
+
+shouldBeTrue("dowhile_or_neq()");
+
+function dowhile_or_less()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (a < 1 || a < 1)
+    return false;
+}
+
+shouldBeTrue("dowhile_or_less()");
+
+function dowhile_or_lesseq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (a <= 1 || a <= 1)
+    return false;
+}
+
+shouldBeTrue("dowhile_or_lesseq()");
+
+function dowhile_and_eq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (a == 0 && a == 0)
+    return false;
+}
+
+shouldBeTrue("dowhile_and_eq()");
+
+function dowhile_and_neq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (a != 1 && a != 1)
+    return false;
+}
+
+shouldBeTrue("dowhile_and_neq()");
+
+function dowhile_and_less()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (a < 1 && a < 1)
+    return false;
+}
+
+shouldBeTrue("dowhile_and_less()");
+
+function dowhile_and_lesseq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (a <= 1 && a <= 1)
+    return false;
+}
+
+shouldBeTrue("dowhile_and_lesseq()");
+
+function while_not_or_eq()
+{
+    var a = 0;
+    while (!(a == 0 || a == 0))
+        return true;
+    return false;
+}
+
+shouldBeFalse("while_not_or_eq()");
+
+function while_not_or_neq()
+{
+    var a = 0;
+    while (!(a != 1 || a != 1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("while_not_or_neq()");
+
+function while_not_or_less()
+{
+    var a = 0;
+    while (!(a < 1 || a < 1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("while_not_or_less()");
+
+function while_not_or_lesseq()
+{
+    var a = 0;
+    while (!(a <= 1 || a <= 1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("while_not_or_lesseq()");
+
+function while_not_and_eq()
+{
+    var a = 0;
+    while (!(a == 0 && a == 0))
+        return true;
+    return false;
+}
+
+shouldBeFalse("while_not_and_eq()");
+
+function while_not_and_neq()
+{
+    var a = 0;
+    while (!(a != 1 && a != 1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("while_not_and_neq()");
+
+function while_not_and_less()
+{
+    var a = 0;
+    while (!(a < 1 && a < 1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("while_not_and_less()");
+
+function while_not_and_lesseq()
+{
+    var a = 0;
+    while (!(a <= 1 && a <= 1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("while_not_and_lesseq()");
+
+function for_not_or_eq()
+{
+    for (var a = 0; !(a == 0 || a == 0); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("for_not_or_eq()");
+
+function for_not_or_neq()
+{
+    for (var a = 0; !(a != 1 || a != 1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("for_not_or_neq()");
+
+function for_not_or_less()
+{
+    for (var a = 0; !(a < 1 || a < 1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("for_not_or_less()");
+
+function for_not_or_lesseq()
+{
+    for (var a = 0; !(a <= 1 || a <= 1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("for_not_or_lesseq()");
+
+function for_not_and_eq()
+{
+    for (var a = 0; !(a == 0 && a == 0); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("for_not_and_eq()");
+
+function for_not_and_neq()
+{
+    for (var a = 0; !(a != 1 && a != 1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("for_not_and_neq()");
+
+function for_not_and_less()
+{
+    for (var a = 0; !(a < 1 && a < 1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("for_not_and_less()");
+
+function for_not_and_lesseq()
+{
+    for (var a = 0; !(a <= 1 && a <= 1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("for_not_and_lesseq()");
+
+function dowhile_not_or_eq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (!(a == 0 || a == 0))
+    return false;
+}
+
+shouldBeFalse("dowhile_not_or_eq()");
+
+function dowhile_not_or_neq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (!(a != 1 || a != 1))
+    return false;
+}
+
+shouldBeFalse("dowhile_not_or_neq()");
+
+function dowhile_not_or_less()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (!(a < 1 || a < 1))
+    return false;
+}
+
+shouldBeFalse("dowhile_not_or_less()");
+
+function dowhile_not_or_lesseq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (!(a <= 1 || a <= 1))
+    return false;
+}
+
+shouldBeFalse("dowhile_not_or_lesseq()");
+
+function dowhile_not_and_eq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (!(a == 0 && a == 0))
+    return false;
+}
+
+shouldBeFalse("dowhile_not_and_eq()");
+
+function dowhile_not_and_neq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (!(a != 1 && a != 1))
+    return false;
+}
+
+shouldBeFalse("dowhile_not_and_neq()");
+
+function dowhile_not_and_less()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (!(a < 1 && a < 1))
+    return false;
+}
+
+shouldBeFalse("dowhile_not_and_less()");
+
+function dowhile_not_and_lesseq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (!(a <= 1 && a <= 1))
+    return false;
+}
+
+shouldBeFalse("dowhile_not_and_lesseq()");
+
+function float_while_or_eq()
+{
+    var a = 0.1;
+    while (a == 0.1 || a == 0.1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_while_or_eq()");
+
+function float_while_or_neq()
+{
+    var a = 0.1;
+    while (a != 1.1 || a != 1.1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_while_or_neq()");
+
+function float_while_or_less()
+{
+    var a = 0.1;
+    while (a < 1.1 || a < 1.1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_while_or_less()");
+
+function float_while_or_lesseq()
+{
+    var a = 0.1;
+    while (a <= 1.1 || a <= 1.1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_while_or_lesseq()");
+
+function float_while_and_eq()
+{
+    var a = 0.1;
+    while (a == 0.1 && a == 0.1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_while_and_eq()");
+
+function float_while_and_neq()
+{
+    var a = 0.1;
+    while (a != 1.1 && a != 1.1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_while_and_neq()");
+
+function float_while_and_less()
+{
+    var a = 0.1;
+    while (a < 1.1 && a < 1.1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_while_and_less()");
+
+function float_while_and_lesseq()
+{
+    var a = 0.1;
+    while (a <= 1.1 && a <= 1.1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_while_and_lesseq()");
+
+function float_for_or_eq()
+{
+    for (var a = 0.1; a == 0.1 || a == 0.1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_for_or_eq()");
+
+function float_for_or_neq()
+{
+    for (var a = 0.1; a != 1.1 || a != 1.1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_for_or_neq()");
+
+function float_for_or_less()
+{
+    for (var a = 0.1; a < 1.1 || a < 1.1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_for_or_less()");
+
+function float_for_or_lesseq()
+{
+    for (var a = 0.1; a <= 1.1 || a <= 1.1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_for_or_lesseq()");
+
+function float_for_and_eq()
+{
+    for (var a = 0.1; a == 0.1 && a == 0.1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_for_and_eq()");
+
+function float_for_and_neq()
+{
+    for (var a = 0.1; a != 1.1 && a != 1.1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_for_and_neq()");
+
+function float_for_and_less()
+{
+    for (var a = 0.1; a < 1.1 && a < 1.1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_for_and_less()");
+
+function float_for_and_lesseq()
+{
+    for (var a = 0.1; a <= 1.1 && a <= 1.1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_for_and_lesseq()");
+
+function float_dowhile_or_eq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (a == 0.1 || a == 0.1)
+    return false;
+}
+
+shouldBeTrue("float_dowhile_or_eq()");
+
+function float_dowhile_or_neq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (a != 1.1 || a != 1.1)
+    return false;
+}
+
+shouldBeTrue("float_dowhile_or_neq()");
+
+function float_dowhile_or_less()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (a < 1.1 || a < 1.1)
+    return false;
+}
+
+shouldBeTrue("float_dowhile_or_less()");
+
+function float_dowhile_or_lesseq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (a <= 1.1 || a <= 1.1)
+    return false;
+}
+
+shouldBeTrue("float_dowhile_or_lesseq()");
+
+function float_dowhile_and_eq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (a == 0.1 && a == 0.1)
+    return false;
+}
+
+shouldBeTrue("float_dowhile_and_eq()");
+
+function float_dowhile_and_neq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (a != 1.1 && a != 1.1)
+    return false;
+}
+
+shouldBeTrue("float_dowhile_and_neq()");
+
+function float_dowhile_and_less()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (a < 1.1 && a < 1.1)
+    return false;
+}
+
+shouldBeTrue("float_dowhile_and_less()");
+
+function float_dowhile_and_lesseq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (a <= 1.1 && a <= 1.1)
+    return false;
+}
+
+shouldBeTrue("float_dowhile_and_lesseq()");
+
+function float_while_not_or_eq()
+{
+    var a = 0.1;
+    while (!(a == 0.1 || a == 0.1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_while_not_or_eq()");
+
+function float_while_not_or_neq()
+{
+    var a = 0.1;
+    while (!(a != 1.1 || a != 1.1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_while_not_or_neq()");
+
+function float_while_not_or_less()
+{
+    var a = 0.1;
+    while (!(a < 1.1 || a < 1.1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_while_not_or_less()");
+
+function float_while_not_or_lesseq()
+{
+    var a = 0.1;
+    while (!(a <= 1.1 || a <= 1.1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_while_not_or_lesseq()");
+
+function float_while_not_and_eq()
+{
+    var a = 0.1;
+    while (!(a == 0.1 && a == 0.1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_while_not_and_eq()");
+
+function float_while_not_and_neq()
+{
+    var a = 0.1;
+    while (!(a != 1.1 && a != 1.1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_while_not_and_neq()");
+
+function float_while_not_and_less()
+{
+    var a = 0.1;
+    while (!(a < 1.1 && a < 1.1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_while_not_and_less()");
+
+function float_while_not_and_lesseq()
+{
+    var a = 0.1;
+    while (!(a <= 1.1 && a <= 1.1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_while_not_and_lesseq()");
+
+function float_for_not_or_eq()
+{
+    for (var a = 0.1; !(a == 0.1 || a == 0.1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_for_not_or_eq()");
+
+function float_for_not_or_neq()
+{
+    for (var a = 0.1; !(a != 1.1 || a != 1.1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_for_not_or_neq()");
+
+function float_for_not_or_less()
+{
+    for (var a = 0.1; !(a < 1.1 || a < 1.1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_for_not_or_less()");
+
+function float_for_not_or_lesseq()
+{
+    for (var a = 0.1; !(a <= 1.1 || a <= 1.1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_for_not_or_lesseq()");
+
+function float_for_not_and_eq()
+{
+    for (var a = 0.1; !(a == 0.1 && a == 0.1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_for_not_and_eq()");
+
+function float_for_not_and_neq()
+{
+    for (var a = 0.1; !(a != 1.1 && a != 1.1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_for_not_and_neq()");
+
+function float_for_not_and_less()
+{
+    for (var a = 0.1; !(a < 1.1 && a < 1.1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_for_not_and_less()");
+
+function float_for_not_and_lesseq()
+{
+    for (var a = 0.1; !(a <= 1.1 && a <= 1.1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_for_not_and_lesseq()");
+
+function float_dowhile_not_or_eq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (!(a == 0.1 || a == 0.1))
+    return false;
+}
+
+shouldBeFalse("float_dowhile_not_or_eq()");
+
+function float_dowhile_not_or_neq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (!(a != 1.1 || a != 1.1))
+    return false;
+}
+
+shouldBeFalse("float_dowhile_not_or_neq()");
+
+function float_dowhile_not_or_less()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (!(a < 1.1 || a < 1.1))
+    return false;
+}
+
+shouldBeFalse("float_dowhile_not_or_less()");
+
+function float_dowhile_not_or_lesseq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (!(a <= 1.1 || a <= 1.1))
+    return false;
+}
+
+shouldBeFalse("float_dowhile_not_or_lesseq()");
+
+function float_dowhile_not_and_eq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (!(a == 0.1 && a == 0.1))
+    return false;
+}
+
+shouldBeFalse("float_dowhile_not_and_eq()");
+
+function float_dowhile_not_and_neq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (!(a != 1.1 && a != 1.1))
+    return false;
+}
+
+shouldBeFalse("float_dowhile_not_and_neq()");
+
+function float_dowhile_not_and_less()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (!(a < 1.1 && a < 1.1))
+    return false;
+}
+
+shouldBeFalse("float_dowhile_not_and_less()");
+
+function float_dowhile_not_and_lesseq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (!(a <= 1.1 && a <= 1.1))
+    return false;
+}
diff --git a/deps/v8/test/webkit/codegen-peephole-locals-expected.txt b/deps/v8/test/webkit/codegen-peephole-locals-expected.txt
new file mode 100644 (file)
index 0000000..77c220b
--- /dev/null
@@ -0,0 +1,40 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests whether peephole optimizations on bytecode properly deal with local registers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS if_less_test() is true
+PASS if_else_less_test() is true
+PASS conditional_less_test() is true
+PASS logical_and_less_test() is true
+PASS logical_or_less_test() is true
+PASS do_while_less_test() is true
+PASS while_less_test() is true
+PASS for_less_test() is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/codegen-peephole-locals.js b/deps/v8/test/webkit/codegen-peephole-locals.js
new file mode 100644 (file)
index 0000000..0fe6039
--- /dev/null
@@ -0,0 +1,106 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests whether peephole optimizations on bytecode properly deal with local registers."
+);
+
+function if_less_test()
+{
+    var a = 0;
+    var b = 2;
+    if (a = 1 < 2)
+        return a == 1;
+}
+
+shouldBeTrue("if_less_test()");
+
+function if_else_less_test()
+{
+    var a = 0;
+    var b = 2;
+    if (a = 1 < 2)
+        return a == 1;
+    else
+        return false;
+}
+
+shouldBeTrue("if_else_less_test()");
+
+function conditional_less_test()
+{
+    var a = 0;
+    var b = 2;
+    return (a = 1 < 2) ? a == 1 : false;
+}
+
+shouldBeTrue("conditional_less_test()");
+
+function logical_and_less_test()
+{
+    var a = 0;
+    var b = 2;
+    return (a = 1 < 2) && a == 1;
+}
+
+shouldBeTrue("logical_and_less_test()");
+
+function logical_or_less_test()
+{
+    var a = 0;
+    var b = 2;
+    var result = (a = 1 < 2) || a == 1;
+    return a == 1;
+}
+
+shouldBeTrue("logical_or_less_test()");
+
+function do_while_less_test()
+{
+    var a = 0;
+    var count = 0;
+    do {
+        if (count == 1)
+            return a == 1;
+        count++;
+    } while (a = 1 < 2)
+}
+
+shouldBeTrue("do_while_less_test()");
+
+function while_less_test()
+{
+    var a = 0;
+    while (a = 1 < 2)
+        return a == 1;
+}
+
+shouldBeTrue("while_less_test()");
+
+function for_less_test()
+{
+    for (var a = 0; a = 1 < 2; )
+        return a == 1;
+}
+
+shouldBeTrue("for_less_test()");
diff --git a/deps/v8/test/webkit/codegen-temporaries-expected.txt b/deps/v8/test/webkit/codegen-temporaries-expected.txt
new file mode 100644 (file)
index 0000000..ecb7d79
--- /dev/null
@@ -0,0 +1,139 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests whether bytecode codegen properly handles temporaries.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS a is true
+PASS b is false
+PASS assign_test1() is 'PASS'
+PASS assign_test2() is 'PASS'
+PASS assign_test3() is 'PASS'
+PASS testObject4.test is 'PASS'
+PASS testObject5.test is 'PASS'
+PASS assign_test6() is 'PASS'
+PASS assign_test7() is 'PASS'
+PASS assign_test8() is 'PASS'
+PASS assign_test9() is 'PASS'
+PASS testObject10.test is 'PASS'
+PASS assign_test11() is 'PASS'
+PASS assign_test12() is 'PASS'
+PASS assign_test13() is 'PASS'
+PASS assign_test14() is 'PASS'
+PASS assign_test15() is 'PASS'
+PASS assign_test16() is 2
+PASS a17 is 3
+PASS assign_test18() is 3
+PASS a19.b is 3
+PASS assign_test20() is 3
+PASS a21['b'] is 3
+PASS assign_test22() is 3
+PASS assign_test23() is 3
+PASS assign_test24() is 3
+PASS assign_test25() is 3
+PASS assign_test26() is 3
+PASS assign_test27() is 3
+PASS assign_test28() is 3
+PASS assign_test29() is 3
+PASS assign_test30() is 'fooNaN'
+PASS assign_test31() is 'PASS'
+PASS bracket_test1() is -1
+PASS bracket_test2() is 1
+PASS bracket_test3() is 0
+PASS bracket_test4() is 0
+PASS bracket_test5() is 1
+PASS bracket_test6() is 1
+PASS mult_test1() is 2
+PASS mult_test2() is 2
+PASS mult_test3() is 2
+PASS div_test1() is 0.5
+PASS div_test2() is 0.5
+PASS div_test3() is 0.5
+PASS mod_test1() is 1
+PASS mod_test2() is 1
+PASS mod_test3() is 1
+PASS add_test1() is 3
+PASS add_test2() is 3
+PASS add_test3() is 3
+PASS sub_test1() is -1
+PASS sub_test2() is -1
+PASS sub_test3() is -1
+PASS lshift_test1() is 4
+PASS lshift_test2() is 4
+PASS lshift_test3() is 4
+PASS rshift_test1() is 1
+PASS rshift_test2() is 1
+PASS rshift_test3() is 1
+PASS urshift_test1() is 1
+PASS urshift_test2() is 1
+PASS urshift_test3() is 1
+PASS less_test1() is true
+PASS less_test2() is true
+PASS less_test3() is true
+PASS greater_test1() is true
+PASS greater_test2() is true
+PASS greater_test3() is true
+PASS lesseq_test1() is true
+PASS lesseq_test2() is true
+PASS lesseq_test3() is true
+PASS greatereq_test1() is true
+PASS greatereq_test2() is true
+PASS greatereq_test3() is true
+PASS instanceof_test1() is true
+PASS instanceof_test2() is true
+PASS instanceof_test3() is true
+PASS in_test1() is true
+PASS in_test2() is true
+PASS in_test3() is true
+PASS eq_test1() is false
+PASS eq_test2() is false
+PASS eq_test3() is false
+PASS neq_test1() is true
+PASS neq_test2() is true
+PASS neq_test3() is true
+PASS stricteq_test1() is false
+PASS stricteq_test2() is false
+PASS stricteq_test3() is false
+PASS nstricteq_test1() is true
+PASS nstricteq_test2() is true
+PASS nstricteq_test3() is true
+PASS bitand_test1() is 0
+PASS bitand_test2() is 0
+PASS bitand_test3() is 0
+PASS bitor_test1() is 3
+PASS bitor_test2() is 3
+PASS bitor_test3() is 3
+PASS bitxor_test1() is 3
+PASS bitxor_test2() is 3
+PASS bitxor_test3() is 3
+PASS switch_test1() is true
+PASS switch_test2() is true
+PASS switch_test3() is true
+PASS construct_test() is true
+PASS [(0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), ].length is 64
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/codegen-temporaries.js b/deps/v8/test/webkit/codegen-temporaries.js
new file mode 100644 (file)
index 0000000..55e5162
--- /dev/null
@@ -0,0 +1,955 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests whether bytecode codegen properly handles temporaries.'
+);
+
+var a = true;
+a = false || a;
+shouldBeTrue("a");
+
+var b = false;
+b = true && b;
+shouldBeFalse("b");
+
+function TestObject() {
+    this.toString = function() { return this.test; }
+    this.test = "FAIL";
+    return this;
+}
+
+function assign_test1()
+{
+    var testObject = new TestObject;
+    var a = testObject;
+    a.test = "PASS";
+    return testObject.test;
+}
+
+shouldBe("assign_test1()", "'PASS'");
+
+function assign_test2()
+{
+    var testObject = new TestObject;
+    var a = testObject;
+    a = a.test = "PASS";
+    return testObject.test;
+}
+
+shouldBe("assign_test2()", "'PASS'");
+
+function assign_test3()
+{
+    var testObject = new TestObject;
+    var a = testObject;
+    a.test = a = "PASS";
+    return testObject.test;
+}
+
+shouldBe("assign_test3()", "'PASS'");
+
+var testObject4 = new TestObject;
+var a4 = testObject4;
+a4.test = this.a4 = "PASS";
+
+shouldBe("testObject4.test", "'PASS'");
+
+var testObject5 = new TestObject;
+var a5 = testObject5;
+a5 = this.a5.test = "PASS";
+
+shouldBe("testObject5.test", "'PASS'");
+
+function assign_test6()
+{
+    var testObject = new TestObject;
+    var a = testObject;
+    a["test"] = "PASS";
+    return testObject.test;
+}
+
+shouldBe("assign_test6()", "'PASS'");
+
+function assign_test7()
+{
+    var testObject = new TestObject;
+    var a = testObject;
+    a = a["test"] = "PASS";
+    return testObject.test;
+}
+
+shouldBe("assign_test7()", "'PASS'");
+
+function assign_test8()
+{
+    var testObject = new TestObject;
+    var a = testObject;
+    a["test"] = a = "PASS";
+    return testObject.test;
+}
+
+shouldBe("assign_test8()", "'PASS'");
+
+function assign_test9()
+{
+    var testObject = new TestObject;
+    var a = testObject;
+    a["test"] = this.a = "PASS";
+    return testObject.test;
+}
+
+shouldBe("assign_test9()", "'PASS'");
+
+var testObject10 = new TestObject;
+var a10 = testObject10;
+a10 = this.a10["test"] = "PASS";
+
+shouldBe("testObject10.test", "'PASS'");
+
+function assign_test11()
+{
+    var testObject = new TestObject;
+    var a = testObject;
+    a[a = "test"] = "PASS";
+    return testObject.test;
+}
+
+shouldBe("assign_test11()", "'PASS'");
+
+function assign_test12()
+{
+    var test = "test";
+    var testObject = new TestObject;
+    var a = testObject;
+    a[test] = "PASS";
+    return testObject.test;
+}
+
+shouldBe("assign_test12()", "'PASS'");
+
+function assign_test13()
+{
+    var testObject = new TestObject;
+    var a = testObject;
+    a.test = (a = "FAIL", "PASS");
+    return testObject.test;
+}
+
+shouldBe("assign_test13()", "'PASS'");
+
+function assign_test14()
+{
+    var testObject = new TestObject;
+    var a = testObject;
+    a["test"] = (a = "FAIL", "PASS");
+    return testObject.test;
+}
+
+shouldBe("assign_test14()", "'PASS'");
+
+function assign_test15()
+{
+    var test = "test";
+    var testObject = new TestObject;
+    var a = testObject;
+    a[test] = (test = "FAIL", "PASS");
+    return testObject.test;
+}
+
+shouldBe("assign_test15()", "'PASS'");
+
+function assign_test16()
+{
+    var a = 1;
+    a = (a = 2);
+    return a;
+}
+
+shouldBe("assign_test16()", "2");
+
+var a17 = 1;
+a17 += (a17 += 1);
+
+shouldBe("a17", "3");
+
+function assign_test18()
+{
+    var a = 1;
+    a += (a += 1);
+    return a;
+}
+
+shouldBe("assign_test18()", "3");
+
+var a19 = { b: 1 };
+a19.b += (a19.b += 1);
+
+shouldBe("a19.b", "3");
+
+function assign_test20()
+{
+    var a = { b: 1 };
+    a.b += (a.b += 1);
+    return a.b;
+}
+
+shouldBe("assign_test20()", "3");
+
+var a21 = { b: 1 };
+a21["b"] += (a21["b"] += 1);
+
+shouldBe("a21['b']", "3");
+
+function assign_test22()
+{
+    var a = { b: 1 };
+    a["b"] += (a["b"] += 1);
+    return a["b"];
+}
+
+shouldBe("assign_test22()", "3");
+
+function assign_test23()
+{
+    var o = { b: 1 };
+    var a = o;
+    a.b += a = 2;
+    return o.b;
+}
+
+shouldBe("assign_test23()", "3");
+
+function assign_test24()
+{
+    var o = { b: 1 };
+    var a = o;
+    a["b"] += a = 2;
+    return o["b"];
+}
+
+shouldBe("assign_test24()", "3");
+
+function assign_test25()
+{
+    var o = { b: 1 };
+    var a = o;
+    a[a = "b"] += a = 2;
+    return o["b"];
+}
+
+shouldBe("assign_test25()", "3");
+
+function assign_test26()
+{
+    var o = { b: 1 };
+    var a = o;
+    var b = "b";
+    a[b] += a = 2;
+    return o["b"];
+}
+
+shouldBe("assign_test26()", "3");
+
+function assign_test27()
+{
+    var o = { b: 1 };
+    var a = o;
+    a.b += (a = 100, 2);
+    return o.b;
+}
+
+shouldBe("assign_test27()", "3");
+
+function assign_test28()
+{
+    var o = { b: 1 };
+    var a = o;
+    a["b"] += (a = 100, 2);
+    return o["b"];
+}
+
+shouldBe("assign_test28()", "3");
+
+function assign_test29()
+{
+    var o = { b: 1 };
+    var a = o;
+    var b = "b";
+    a[b] += (a = 100, 2);
+    return o["b"];
+}
+
+shouldBe("assign_test29()", "3");
+
+function assign_test30()
+{
+    var a = "foo";
+    a += (a++);
+    return a;
+}
+
+shouldBe("assign_test30()", "'fooNaN'");
+
+function assign_test31()
+{
+    function result() { return "PASS"; }
+    return (globalVar = result)()
+}
+
+shouldBe("assign_test31()", "'PASS'");
+
+function bracket_test1()
+{
+    var o = [-1];
+    var a = o[++o];
+    return a;
+}
+
+shouldBe("bracket_test1()", "-1");
+
+function bracket_test2()
+{
+    var o = [1];
+    var a = o[--o];
+    return a;
+}
+
+shouldBe("bracket_test2()", "1");
+
+function bracket_test3()
+{
+    var o = [0];
+    var a = o[o++];
+    return a;
+}
+
+shouldBe("bracket_test3()", "0");
+
+function bracket_test4()
+{
+    var o = [0];
+    var a = o[o--];
+    return a;
+}
+
+shouldBe("bracket_test4()", "0");
+
+function bracket_test5()
+{
+    var o = [1];
+    var a = o[o ^= 1];
+    return a;
+}
+
+shouldBe("bracket_test5()", "1");
+
+function bracket_test6()
+{
+    var o = { b: 1 }
+    var b = o[o = { b: 2 }, "b"];
+    return b;
+}
+
+shouldBe("bracket_test6()", "1");
+
+function mult_test1()
+{
+    var a = 1;
+    return a * (a = 2);
+}
+
+shouldBe("mult_test1()", "2");
+
+function mult_test2()
+{
+    var a = 1;
+    return a * ++a;
+}
+
+shouldBe("mult_test2()", "2");
+
+function mult_test3()
+{
+    var a = 1;
+    return a * (a += 1);
+}
+
+shouldBe("mult_test3()", "2");
+
+function div_test1()
+{
+    var a = 1;
+    return a / (a = 2);
+}
+
+shouldBe("div_test1()", "0.5");
+
+function div_test2()
+{
+    var a = 1;
+    return a / ++a;
+}
+
+shouldBe("div_test2()", "0.5");
+
+function div_test3()
+{
+    var a = 1;
+    return a / (a += 1);
+}
+
+shouldBe("div_test3()", "0.5");
+
+function mod_test1()
+{
+    var a = 1;
+    return a % (a = 2);
+}
+
+shouldBe("mod_test1()", "1");
+
+function mod_test2()
+{
+    var a = 1;
+    return a % ++a;
+}
+
+shouldBe("mod_test2()", "1");
+
+function mod_test3()
+{
+    var a = 1;
+    return a % (a += 1);
+}
+
+shouldBe("mod_test3()", "1");
+
+function add_test1()
+{
+    var a = 1;
+    return a + (a = 2);
+}
+
+shouldBe("add_test1()", "3");
+
+function add_test2()
+{
+    var a = 1;
+    return a + ++a;
+}
+
+shouldBe("add_test2()", "3");
+
+function add_test3()
+{
+    var a = 1;
+    return a + (a += 1);
+}
+
+shouldBe("add_test3()", "3");
+
+function sub_test1()
+{
+    var a = 1;
+    return a - (a = 2);
+}
+
+shouldBe("sub_test1()", "-1");
+
+function sub_test2()
+{
+    var a = 1;
+    return a - ++a;
+}
+
+shouldBe("sub_test2()", "-1");
+
+function sub_test3()
+{
+    var a = 1;
+    return a - (a += 1);
+}
+
+shouldBe("sub_test3()", "-1");
+
+function lshift_test1()
+{
+    var a = 1;
+    return a << (a = 2);
+}
+
+shouldBe("lshift_test1()", "4");
+
+function lshift_test2()
+{
+    var a = 1;
+    return a << ++a;
+}
+
+shouldBe("lshift_test2()", "4");
+
+function lshift_test3()
+{
+    var a = 1;
+    return a << (a += 1);
+}
+
+shouldBe("lshift_test3()", "4");
+
+function rshift_test1()
+{
+    var a = 4;
+    return a >> (a = 2);
+}
+
+shouldBe("rshift_test1()", "1");
+
+function rshift_test2()
+{
+    var a = 2;
+    return a >> --a;
+}
+
+shouldBe("rshift_test2()", "1");
+
+function rshift_test3()
+{
+    var a = 2;
+    return a >> (a -= 1);
+}
+
+shouldBe("rshift_test3()", "1");
+
+function urshift_test1()
+{
+    var a = 4;
+    return a >>> (a = 2);
+}
+
+shouldBe("urshift_test1()", "1");
+
+function urshift_test2()
+{
+    var a = 2;
+    return a >>> --a;
+}
+
+shouldBe("urshift_test2()", "1");
+
+function urshift_test3()
+{
+    var a = 2;
+    return a >>> (a -= 1);
+}
+
+shouldBe("urshift_test3()", "1");
+
+function less_test1()
+{
+    var a = 1;
+    return a < (a = 2);
+}
+
+shouldBeTrue("less_test1()");
+
+function less_test2()
+{
+    var a = 1;
+    return a < ++a;
+}
+
+shouldBeTrue("less_test2()");
+
+function less_test3()
+{
+    var a = 1;
+    return a < (a += 1);
+}
+
+shouldBeTrue("less_test3()");
+
+function greater_test1()
+{
+    var a = 2;
+    return a > (a = 1);
+}
+
+shouldBeTrue("greater_test1()");
+
+function greater_test2()
+{
+    var a = 2;
+    return a > --a;
+}
+
+shouldBeTrue("greater_test2()");
+
+function greater_test3()
+{
+    var a = 2;
+    return a > (a -= 1);
+}
+
+shouldBeTrue("greater_test3()");
+
+function lesseq_test1()
+{
+    var a = 1;
+    return a <= (a = 3, 2);
+}
+
+shouldBeTrue("lesseq_test1()");
+
+function lesseq_test2()
+{
+    var a = 1;
+    return a <= (++a, 1);
+}
+
+shouldBeTrue("lesseq_test2()");
+
+function lesseq_test3()
+{
+    var a = 1;
+    return a <= (a += 1, 1);
+}
+
+shouldBeTrue("lesseq_test3()");
+
+function greatereq_test1()
+{
+    var a = 2;
+    return a >= (a = 1, 2);
+}
+
+shouldBeTrue("greatereq_test1()");
+
+function greatereq_test2()
+{
+    var a = 2;
+    return a >= (--a, 2);
+}
+
+shouldBeTrue("greatereq_test2()");
+
+function greatereq_test3()
+{
+    var a = 2;
+    return a >= (a -= 1, 2);
+}
+
+shouldBeTrue("greatereq_test3()");
+
+function instanceof_test1()
+{
+    var a = { };
+    return a instanceof (a = 1, Object);
+}
+
+shouldBeTrue("instanceof_test1()");
+
+function instanceof_test2()
+{
+    var a = { valueOf: function() { return 1; } };
+    return a instanceof (++a, Object);
+}
+
+shouldBeTrue("instanceof_test2()");
+
+function instanceof_test3()
+{
+    var a = { valueOf: function() { return 1; } };
+    return a instanceof (a += 1, Object);
+}
+
+shouldBeTrue("instanceof_test3()");
+
+function in_test1()
+{
+    var a = "a";
+    return a in (a = "b", { a: 1 });
+}
+
+shouldBeTrue("in_test1()");
+
+function in_test2()
+{
+    var a = { toString: function() { return "a"; }, valueOf: function() { return 1; } };
+    return a in (++a, { a: 1 });
+}
+
+shouldBeTrue("in_test2()");
+
+function in_test3()
+{
+    var a = { toString: function() { return "a"; }, valueOf: function() { return 1; } };
+    return a in (a += 1, { a: 1 });
+}
+
+shouldBeTrue("in_test3()");
+
+function eq_test1()
+{
+    var a = 1;
+    return a == (a = 2);
+}
+
+shouldBeFalse("eq_test1()");
+
+function eq_test2()
+{
+    var a = 1;
+    return a == ++a;
+}
+
+shouldBeFalse("eq_test2()");
+
+function eq_test3()
+{
+    var a = 1;
+    return a == (a += 1);
+}
+
+shouldBeFalse("eq_test3()");
+
+function neq_test1()
+{
+    var a = 1;
+    return a != (a = 2);
+}
+
+shouldBeTrue("neq_test1()");
+
+function neq_test2()
+{
+    var a = 1;
+    return a != ++a;
+}
+
+shouldBeTrue("neq_test2()");
+
+function neq_test3()
+{
+    var a = 1;
+    return a != (a += 1);
+}
+
+shouldBeTrue("neq_test3()");
+
+function stricteq_test1()
+{
+    var a = 1;
+    return a === (a = 2);
+}
+
+shouldBeFalse("stricteq_test1()");
+
+function stricteq_test2()
+{
+    var a = 1;
+    return a === ++a;
+}
+
+shouldBeFalse("stricteq_test2()");
+
+function stricteq_test3()
+{
+    var a = 1;
+    return a === (a += 1);
+}
+
+shouldBeFalse("stricteq_test3()");
+
+function nstricteq_test1()
+{
+    var a = 1;
+    return a !== (a = 2);
+}
+
+shouldBeTrue("nstricteq_test1()");
+
+function nstricteq_test2()
+{
+    var a = 1;
+    return a !== ++a;
+}
+
+shouldBeTrue("nstricteq_test2()");
+
+function nstricteq_test3()
+{
+    var a = 1;
+    return a !== (a += 1);
+}
+
+shouldBeTrue("nstricteq_test3()");
+
+function bitand_test1()
+{
+    var a = 1;
+    return a & (a = 2);
+}
+
+shouldBe("bitand_test1()", "0");
+
+function bitand_test2()
+{
+    var a = 1;
+    return a & ++a;
+}
+
+shouldBe("bitand_test2()", "0");
+
+function bitand_test3()
+{
+    var a = 1;
+    return a & (a += 1);
+}
+
+shouldBe("bitand_test3()", "0");
+
+function bitor_test1()
+{
+    var a = 1;
+    return a | (a = 2);
+}
+
+shouldBe("bitor_test1()", "3");
+
+function bitor_test2()
+{
+    var a = 1;
+    return a | ++a;
+}
+
+shouldBe("bitor_test2()", "3");
+
+function bitor_test3()
+{
+    var a = 1;
+    return a | (a += 1);
+}
+
+shouldBe("bitor_test3()", "3");
+
+function bitxor_test1()
+{
+    var a = 1;
+    return a ^ (a = 2);
+}
+
+shouldBe("bitxor_test1()", "3");
+
+function bitxor_test2()
+{
+    var a = 1;
+    return a ^ ++a;
+}
+
+shouldBe("bitxor_test2()", "3");
+
+function bitxor_test3()
+{
+    var a = 1;
+    return a ^ (a += 1);
+}
+
+shouldBe("bitxor_test3()", "3");
+
+function switch_test1_helper(a, b)
+{
+    switch (a) {
+    case b:
+        break;
+    default:
+        break;
+    }
+
+    return b;
+}
+
+function switch_test1()
+{
+    return switch_test1_helper(0, 1) == 1;
+}
+
+shouldBeTrue("switch_test1()");
+
+function switch_test2_helper(a, b)
+{
+    var c = b;
+    switch (a) {
+    case c:
+        break;
+    default:
+        break;
+    }
+
+    return c;
+}
+
+function switch_test2()
+{
+    return switch_test2_helper(0, 1) == 1;
+}
+
+shouldBeTrue("switch_test2()");
+
+function switch_test3_helper(a)
+{
+    switch (a) {
+    case this:
+        break;
+    default:
+        break;
+    }
+
+    return this;
+}
+
+function switch_test3()
+{
+    return this == switch_test3_helper.call(this, 0);
+}
+
+shouldBeTrue("switch_test3()");
+
+function construct_test()
+{
+    var c = [function(a) { this.a = a; }];
+
+    function f()
+    {
+        return new c[0](true);
+    }
+
+    return f().a;
+}
+
+shouldBeTrue("construct_test()");
+var testStr = "[";
+for (var i = 0; i < 64; i++)
+    testStr += "(0/0), ";
+testStr += "].length";
+shouldBe(testStr, "64");
diff --git a/deps/v8/test/webkit/comparison-operators-expected.txt b/deps/v8/test/webkit/comparison-operators-expected.txt
new file mode 100644 (file)
index 0000000..dd617db
--- /dev/null
@@ -0,0 +1,2816 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+test that comparison operators work correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS return ("a"=="b"); is false
+PASS if (("a"=="b")) return true; return false; is false
+PASS var k = 0; while (("a"=="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"=="b"); ) if (k++) return true; return false; is false
+PASS return ("a"!="b"); is true
+PASS if (("a"!="b")) return true; return false; is true
+PASS var k = 0; while (("a"!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!="b"); ) if (k++) return true; return false; is true
+PASS return ("a"==="b"); is false
+PASS if (("a"==="b")) return true; return false; is false
+PASS var k = 0; while (("a"==="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"==="b"); ) if (k++) return true; return false; is false
+PASS return ("a"!=="b"); is true
+PASS if (("a"!=="b")) return true; return false; is true
+PASS var k = 0; while (("a"!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=="b"); ) if (k++) return true; return false; is true
+PASS return ("a"=="b") || 1; is true
+PASS if (("a"=="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"=="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!="b") || 1; is true
+PASS if (("a"!="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"==="b") || 1; is true
+PASS if (("a"==="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"==="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=="b") || 1; is true
+PASS if (("a"!=="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"=="b") && 1; is false
+PASS if (("a"=="b") && 1) return true; return false; is false
+PASS var k = 0; while (("a"=="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"=="b") && 1; ) if (k++) return true; return false; is false
+PASS return ("a"!="b") && 1; is true
+PASS if (("a"!="b") && 1) return true; return false; is true
+PASS var k = 0; while (("a"!="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!="b") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"==="b") && 1; is false
+PASS if (("a"==="b") && 1) return true; return false; is false
+PASS var k = 0; while (("a"==="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"==="b") && 1; ) if (k++) return true; return false; is false
+PASS return ("a"!=="b") && 1; is true
+PASS if (("a"!=="b") && 1) return true; return false; is true
+PASS var k = 0; while (("a"!=="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=="b") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"=="b") || 1; is true
+PASS if (("a"=="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"=="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!="b") || 1; is true
+PASS if (("a"!="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"==="b") || 1; is true
+PASS if (("a"==="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"==="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=="b") || 1; is true
+PASS if (("a"!=="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"=="b"); is true
+PASS if (1 || ("a"=="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"=="b"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!="b"); is true
+PASS if (1 || ("a"!="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!="b"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"==="b"); is true
+PASS if (1 || ("a"==="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"==="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"==="b"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!=="b"); is true
+PASS if (1 || ("a"!=="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!=="b"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"=="b"); is false
+PASS if (1 && ("a"=="b")) return true; return false; is false
+PASS var k = 0; while (1 && ("a"=="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"=="b"); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"!="b"); is true
+PASS if (1 && ("a"!="b")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"!="b"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"==="b"); is false
+PASS if (1 && ("a"==="b")) return true; return false; is false
+PASS var k = 0; while (1 && ("a"==="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"==="b"); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"!=="b"); is true
+PASS if (1 && ("a"!=="b")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"!=="b"); ) if (k++) return true; return false; is true
+PASS return ("a"=="a"); is true
+PASS if (("a"=="a")) return true; return false; is true
+PASS var k = 0; while (("a"=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"=="a"); ) if (k++) return true; return false; is true
+PASS return ("a"!="a"); is false
+PASS if (("a"!="a")) return true; return false; is false
+PASS var k = 0; while (("a"!="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!="a"); ) if (k++) return true; return false; is false
+PASS return ("a"==="a"); is true
+PASS if (("a"==="a")) return true; return false; is true
+PASS var k = 0; while (("a"==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==="a"); ) if (k++) return true; return false; is true
+PASS return ("a"!=="a"); is false
+PASS if (("a"!=="a")) return true; return false; is false
+PASS var k = 0; while (("a"!=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!=="a"); ) if (k++) return true; return false; is false
+PASS return ("a"=="a") || 1; is true
+PASS if (("a"=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"=="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!="a") || 1; is true
+PASS if (("a"!="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"==="a") || 1; is true
+PASS if (("a"==="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=="a") || 1; is true
+PASS if (("a"!=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"=="a") && 1; is true
+PASS if (("a"=="a") && 1) return true; return false; is true
+PASS var k = 0; while (("a"=="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"=="a") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"!="a") && 1; is false
+PASS if (("a"!="a") && 1) return true; return false; is false
+PASS var k = 0; while (("a"!="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!="a") && 1; ) if (k++) return true; return false; is false
+PASS return ("a"==="a") && 1; is true
+PASS if (("a"==="a") && 1) return true; return false; is true
+PASS var k = 0; while (("a"==="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==="a") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=="a") && 1; is false
+PASS if (("a"!=="a") && 1) return true; return false; is false
+PASS var k = 0; while (("a"!=="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!=="a") && 1; ) if (k++) return true; return false; is false
+PASS return ("a"=="a") || 1; is true
+PASS if (("a"=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"=="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!="a") || 1; is true
+PASS if (("a"!="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"==="a") || 1; is true
+PASS if (("a"==="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=="a") || 1; is true
+PASS if (("a"!=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"=="a"); is true
+PASS if (1 || ("a"=="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"=="a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!="a"); is true
+PASS if (1 || ("a"!="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!="a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"==="a"); is true
+PASS if (1 || ("a"==="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"==="a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!=="a"); is true
+PASS if (1 || ("a"!=="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!=="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"=="a"); is true
+PASS if (1 && ("a"=="a")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"=="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"!="a"); is false
+PASS if (1 && ("a"!="a")) return true; return false; is false
+PASS var k = 0; while (1 && ("a"!="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"!="a"); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"==="a"); is true
+PASS if (1 && ("a"==="a")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"==="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"!=="a"); is false
+PASS if (1 && ("a"!=="a")) return true; return false; is false
+PASS var k = 0; while (1 && ("a"!=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"!=="a"); ) if (k++) return true; return false; is false
+PASS return ("b"=="a"); is false
+PASS if (("b"=="a")) return true; return false; is false
+PASS var k = 0; while (("b"=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"=="a"); ) if (k++) return true; return false; is false
+PASS return ("b"!="a"); is true
+PASS if (("b"!="a")) return true; return false; is true
+PASS var k = 0; while (("b"!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!="a"); ) if (k++) return true; return false; is true
+PASS return ("b"==="a"); is false
+PASS if (("b"==="a")) return true; return false; is false
+PASS var k = 0; while (("b"==="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"==="a"); ) if (k++) return true; return false; is false
+PASS return ("b"!=="a"); is true
+PASS if (("b"!=="a")) return true; return false; is true
+PASS var k = 0; while (("b"!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=="a"); ) if (k++) return true; return false; is true
+PASS return ("b"=="a") || 1; is true
+PASS if (("b"=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"=="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!="a") || 1; is true
+PASS if (("b"!="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"==="a") || 1; is true
+PASS if (("b"==="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"==="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!=="a") || 1; is true
+PASS if (("b"!=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"=="a") && 1; is false
+PASS if (("b"=="a") && 1) return true; return false; is false
+PASS var k = 0; while (("b"=="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"=="a") && 1; ) if (k++) return true; return false; is false
+PASS return ("b"!="a") && 1; is true
+PASS if (("b"!="a") && 1) return true; return false; is true
+PASS var k = 0; while (("b"!="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!="a") && 1; ) if (k++) return true; return false; is true
+PASS return ("b"==="a") && 1; is false
+PASS if (("b"==="a") && 1) return true; return false; is false
+PASS var k = 0; while (("b"==="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"==="a") && 1; ) if (k++) return true; return false; is false
+PASS return ("b"!=="a") && 1; is true
+PASS if (("b"!=="a") && 1) return true; return false; is true
+PASS var k = 0; while (("b"!=="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=="a") && 1; ) if (k++) return true; return false; is true
+PASS return ("b"=="a") || 1; is true
+PASS if (("b"=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"=="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!="a") || 1; is true
+PASS if (("b"!="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"==="a") || 1; is true
+PASS if (("b"==="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"==="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!=="a") || 1; is true
+PASS if (("b"!=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b"=="a"); is true
+PASS if (1 || ("b"=="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"=="a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"!="a"); is true
+PASS if (1 || ("b"!="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"!="a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"==="a"); is true
+PASS if (1 || ("b"==="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"==="a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"!=="a"); is true
+PASS if (1 || ("b"!=="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"!=="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"=="a"); is false
+PASS if (1 && ("b"=="a")) return true; return false; is false
+PASS var k = 0; while (1 && ("b"=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"=="a"); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"!="a"); is true
+PASS if (1 && ("b"!="a")) return true; return false; is true
+PASS var k = 0; while (1 && ("b"!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b"!="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"==="a"); is false
+PASS if (1 && ("b"==="a")) return true; return false; is false
+PASS var k = 0; while (1 && ("b"==="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"==="a"); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"!=="a"); is true
+PASS if (1 && ("b"!=="a")) return true; return false; is true
+PASS var k = 0; while (1 && ("b"!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b"!=="a"); ) if (k++) return true; return false; is true
+PASS return (letterA=="b"); is false
+PASS if ((letterA=="b")) return true; return false; is false
+PASS var k = 0; while ((letterA=="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA=="b"); ) if (k++) return true; return false; is false
+PASS return (letterA!="b"); is true
+PASS if ((letterA!="b")) return true; return false; is true
+PASS var k = 0; while ((letterA!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="b"); ) if (k++) return true; return false; is true
+PASS return (letterA==="b"); is false
+PASS if ((letterA==="b")) return true; return false; is false
+PASS var k = 0; while ((letterA==="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA==="b"); ) if (k++) return true; return false; is false
+PASS return (letterA!=="b"); is true
+PASS if ((letterA!=="b")) return true; return false; is true
+PASS var k = 0; while ((letterA!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="b"); ) if (k++) return true; return false; is true
+PASS return (letterA=="b") || 1; is true
+PASS if ((letterA=="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!="b") || 1; is true
+PASS if ((letterA!="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==="b") || 1; is true
+PASS if ((letterA==="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=="b") || 1; is true
+PASS if ((letterA!=="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA=="b") && 1; is false
+PASS if ((letterA=="b") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA=="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA=="b") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA!="b") && 1; is true
+PASS if ((letterA!="b") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA!="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="b") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA==="b") && 1; is false
+PASS if ((letterA==="b") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA==="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA==="b") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA!=="b") && 1; is true
+PASS if ((letterA!=="b") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="b") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA=="b") || 1; is true
+PASS if ((letterA=="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!="b") || 1; is true
+PASS if ((letterA!="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==="b") || 1; is true
+PASS if ((letterA==="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=="b") || 1; is true
+PASS if ((letterA!=="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA=="b"); is true
+PASS if (1 || (letterA=="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA=="b"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!="b"); is true
+PASS if (1 || (letterA!="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!="b"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA==="b"); is true
+PASS if (1 || (letterA==="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA==="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA==="b"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!=="b"); is true
+PASS if (1 || (letterA!=="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!=="b"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA=="b"); is false
+PASS if (1 && (letterA=="b")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA=="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA=="b"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA!="b"); is true
+PASS if (1 && (letterA!="b")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA!="b"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA==="b"); is false
+PASS if (1 && (letterA==="b")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA==="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA==="b"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA!=="b"); is true
+PASS if (1 && (letterA!=="b")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA!=="b"); ) if (k++) return true; return false; is true
+PASS return (letterA=="a"); is true
+PASS if ((letterA=="a")) return true; return false; is true
+PASS var k = 0; while ((letterA=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="a"); ) if (k++) return true; return false; is true
+PASS return (letterA!="a"); is false
+PASS if ((letterA!="a")) return true; return false; is false
+PASS var k = 0; while ((letterA!="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!="a"); ) if (k++) return true; return false; is false
+PASS return (letterA==="a"); is true
+PASS if ((letterA==="a")) return true; return false; is true
+PASS var k = 0; while ((letterA==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="a"); ) if (k++) return true; return false; is true
+PASS return (letterA!=="a"); is false
+PASS if ((letterA!=="a")) return true; return false; is false
+PASS var k = 0; while ((letterA!=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!=="a"); ) if (k++) return true; return false; is false
+PASS return (letterA=="a") || 1; is true
+PASS if ((letterA=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!="a") || 1; is true
+PASS if ((letterA!="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==="a") || 1; is true
+PASS if ((letterA==="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=="a") || 1; is true
+PASS if ((letterA!=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA=="a") && 1; is true
+PASS if ((letterA=="a") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA=="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="a") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA!="a") && 1; is false
+PASS if ((letterA!="a") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA!="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!="a") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA==="a") && 1; is true
+PASS if ((letterA==="a") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA==="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="a") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=="a") && 1; is false
+PASS if ((letterA!=="a") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA!=="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!=="a") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA=="a") || 1; is true
+PASS if ((letterA=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!="a") || 1; is true
+PASS if ((letterA!="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==="a") || 1; is true
+PASS if ((letterA==="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=="a") || 1; is true
+PASS if ((letterA!=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA=="a"); is true
+PASS if (1 || (letterA=="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA=="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!="a"); is true
+PASS if (1 || (letterA!="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA==="a"); is true
+PASS if (1 || (letterA==="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA==="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!=="a"); is true
+PASS if (1 || (letterA!=="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!=="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA=="a"); is true
+PASS if (1 && (letterA=="a")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA=="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA!="a"); is false
+PASS if (1 && (letterA!="a")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA!="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA!="a"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA==="a"); is true
+PASS if (1 && (letterA==="a")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA==="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA!=="a"); is false
+PASS if (1 && (letterA!=="a")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA!=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA!=="a"); ) if (k++) return true; return false; is false
+PASS return ("b"=="a"); is false
+PASS if (("b"=="a")) return true; return false; is false
+PASS var k = 0; while (("b"=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"=="a"); ) if (k++) return true; return false; is false
+PASS return ("b"!="a"); is true
+PASS if (("b"!="a")) return true; return false; is true
+PASS var k = 0; while (("b"!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!="a"); ) if (k++) return true; return false; is true
+PASS return ("b"==="a"); is false
+PASS if (("b"==="a")) return true; return false; is false
+PASS var k = 0; while (("b"==="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"==="a"); ) if (k++) return true; return false; is false
+PASS return ("b"!=="a"); is true
+PASS if (("b"!=="a")) return true; return false; is true
+PASS var k = 0; while (("b"!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=="a"); ) if (k++) return true; return false; is true
+PASS return ("b"=="a") || 1; is true
+PASS if (("b"=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"=="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!="a") || 1; is true
+PASS if (("b"!="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"==="a") || 1; is true
+PASS if (("b"==="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"==="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!=="a") || 1; is true
+PASS if (("b"!=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"=="a") && 1; is false
+PASS if (("b"=="a") && 1) return true; return false; is false
+PASS var k = 0; while (("b"=="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"=="a") && 1; ) if (k++) return true; return false; is false
+PASS return ("b"!="a") && 1; is true
+PASS if (("b"!="a") && 1) return true; return false; is true
+PASS var k = 0; while (("b"!="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!="a") && 1; ) if (k++) return true; return false; is true
+PASS return ("b"==="a") && 1; is false
+PASS if (("b"==="a") && 1) return true; return false; is false
+PASS var k = 0; while (("b"==="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"==="a") && 1; ) if (k++) return true; return false; is false
+PASS return ("b"!=="a") && 1; is true
+PASS if (("b"!=="a") && 1) return true; return false; is true
+PASS var k = 0; while (("b"!=="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=="a") && 1; ) if (k++) return true; return false; is true
+PASS return ("b"=="a") || 1; is true
+PASS if (("b"=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"=="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!="a") || 1; is true
+PASS if (("b"!="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"==="a") || 1; is true
+PASS if (("b"==="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"==="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!=="a") || 1; is true
+PASS if (("b"!=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b"=="a"); is true
+PASS if (1 || ("b"=="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"=="a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"!="a"); is true
+PASS if (1 || ("b"!="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"!="a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"==="a"); is true
+PASS if (1 || ("b"==="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"==="a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"!=="a"); is true
+PASS if (1 || ("b"!=="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"!=="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"=="a"); is false
+PASS if (1 && ("b"=="a")) return true; return false; is false
+PASS var k = 0; while (1 && ("b"=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"=="a"); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"!="a"); is true
+PASS if (1 && ("b"!="a")) return true; return false; is true
+PASS var k = 0; while (1 && ("b"!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b"!="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"==="a"); is false
+PASS if (1 && ("b"==="a")) return true; return false; is false
+PASS var k = 0; while (1 && ("b"==="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"==="a"); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"!=="a"); is true
+PASS if (1 && ("b"!=="a")) return true; return false; is true
+PASS var k = 0; while (1 && ("b"!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b"!=="a"); ) if (k++) return true; return false; is true
+PASS return (letterA=="b"); is false
+PASS if ((letterA=="b")) return true; return false; is false
+PASS var k = 0; while ((letterA=="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA=="b"); ) if (k++) return true; return false; is false
+PASS return (letterA!="b"); is true
+PASS if ((letterA!="b")) return true; return false; is true
+PASS var k = 0; while ((letterA!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="b"); ) if (k++) return true; return false; is true
+PASS return (letterA==="b"); is false
+PASS if ((letterA==="b")) return true; return false; is false
+PASS var k = 0; while ((letterA==="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA==="b"); ) if (k++) return true; return false; is false
+PASS return (letterA!=="b"); is true
+PASS if ((letterA!=="b")) return true; return false; is true
+PASS var k = 0; while ((letterA!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="b"); ) if (k++) return true; return false; is true
+PASS return (letterA=="b") || 1; is true
+PASS if ((letterA=="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!="b") || 1; is true
+PASS if ((letterA!="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==="b") || 1; is true
+PASS if ((letterA==="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=="b") || 1; is true
+PASS if ((letterA!=="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA=="b") && 1; is false
+PASS if ((letterA=="b") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA=="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA=="b") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA!="b") && 1; is true
+PASS if ((letterA!="b") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA!="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="b") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA==="b") && 1; is false
+PASS if ((letterA==="b") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA==="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA==="b") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA!=="b") && 1; is true
+PASS if ((letterA!=="b") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="b") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA=="b") || 1; is true
+PASS if ((letterA=="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!="b") || 1; is true
+PASS if ((letterA!="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==="b") || 1; is true
+PASS if ((letterA==="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=="b") || 1; is true
+PASS if ((letterA!=="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA=="b"); is true
+PASS if (1 || (letterA=="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA=="b"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!="b"); is true
+PASS if (1 || (letterA!="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!="b"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA==="b"); is true
+PASS if (1 || (letterA==="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA==="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA==="b"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!=="b"); is true
+PASS if (1 || (letterA!=="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!=="b"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA=="b"); is false
+PASS if (1 && (letterA=="b")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA=="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA=="b"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA!="b"); is true
+PASS if (1 && (letterA!="b")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA!="b"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA==="b"); is false
+PASS if (1 && (letterA==="b")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA==="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA==="b"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA!=="b"); is true
+PASS if (1 && (letterA!=="b")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA!=="b"); ) if (k++) return true; return false; is true
+PASS return (letterA==letterA); is true
+PASS if ((letterA==letterA)) return true; return false; is true
+PASS var k = 0; while ((letterA==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==letterA); ) if (k++) return true; return false; is true
+PASS return (letterA!=letterA); is false
+PASS if ((letterA!=letterA)) return true; return false; is false
+PASS var k = 0; while ((letterA!=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!=letterA); ) if (k++) return true; return false; is false
+PASS return (letterA===letterA); is true
+PASS if ((letterA===letterA)) return true; return false; is true
+PASS var k = 0; while ((letterA===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA===letterA); ) if (k++) return true; return false; is true
+PASS return (letterA!==letterA); is false
+PASS if ((letterA!==letterA)) return true; return false; is false
+PASS var k = 0; while ((letterA!==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!==letterA); ) if (k++) return true; return false; is false
+PASS return (letterA==letterA) || 1; is true
+PASS if ((letterA==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=letterA) || 1; is true
+PASS if ((letterA!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA===letterA) || 1; is true
+PASS if ((letterA===letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!==letterA) || 1; is true
+PASS if ((letterA!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==letterA) && 1; is true
+PASS if ((letterA==letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((letterA==letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=letterA) && 1; is false
+PASS if ((letterA!=letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA!=letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!=letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA===letterA) && 1; is true
+PASS if ((letterA===letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((letterA===letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA===letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (letterA!==letterA) && 1; is false
+PASS if ((letterA!==letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA!==letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!==letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA==letterA) || 1; is true
+PASS if ((letterA==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=letterA) || 1; is true
+PASS if ((letterA!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA===letterA) || 1; is true
+PASS if ((letterA===letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!==letterA) || 1; is true
+PASS if ((letterA!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA==letterA); is true
+PASS if (1 || (letterA==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA==letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!=letterA); is true
+PASS if (1 || (letterA!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA===letterA); is true
+PASS if (1 || (letterA===letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA===letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!==letterA); is true
+PASS if (1 || (letterA!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA==letterA); is true
+PASS if (1 && (letterA==letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (letterA==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA!=letterA); is false
+PASS if (1 && (letterA!=letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA!=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA!=letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA===letterA); is true
+PASS if (1 && (letterA===letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (letterA===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA===letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA!==letterA); is false
+PASS if (1 && (letterA!==letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA!==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA!==letterA); ) if (k++) return true; return false; is false
+PASS return ("b"==letterA); is false
+PASS if (("b"==letterA)) return true; return false; is false
+PASS var k = 0; while (("b"==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"==letterA); ) if (k++) return true; return false; is false
+PASS return ("b"!=letterA); is true
+PASS if (("b"!=letterA)) return true; return false; is true
+PASS var k = 0; while (("b"!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=letterA); ) if (k++) return true; return false; is true
+PASS return ("b"===letterA); is false
+PASS if (("b"===letterA)) return true; return false; is false
+PASS var k = 0; while (("b"===letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"===letterA); ) if (k++) return true; return false; is false
+PASS return ("b"!==letterA); is true
+PASS if (("b"!==letterA)) return true; return false; is true
+PASS var k = 0; while (("b"!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!==letterA); ) if (k++) return true; return false; is true
+PASS return ("b"==letterA) || 1; is true
+PASS if (("b"==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!=letterA) || 1; is true
+PASS if (("b"!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"===letterA) || 1; is true
+PASS if (("b"===letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!==letterA) || 1; is true
+PASS if (("b"!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"==letterA) && 1; is false
+PASS if (("b"==letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("b"==letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"==letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("b"!=letterA) && 1; is true
+PASS if (("b"!=letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("b"!=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("b"===letterA) && 1; is false
+PASS if (("b"===letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("b"===letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"===letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("b"!==letterA) && 1; is true
+PASS if (("b"!==letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("b"!==letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!==letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("b"==letterA) || 1; is true
+PASS if (("b"==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!=letterA) || 1; is true
+PASS if (("b"!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"===letterA) || 1; is true
+PASS if (("b"===letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!==letterA) || 1; is true
+PASS if (("b"!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b"==letterA); is true
+PASS if (1 || ("b"==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"==letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"!=letterA); is true
+PASS if (1 || ("b"!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"===letterA); is true
+PASS if (1 || ("b"===letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"===letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"!==letterA); is true
+PASS if (1 || ("b"!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"!==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"==letterA); is false
+PASS if (1 && ("b"==letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("b"==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"==letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"!=letterA); is true
+PASS if (1 && ("b"!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("b"!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b"!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"===letterA); is false
+PASS if (1 && ("b"===letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("b"===letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"===letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"!==letterA); is true
+PASS if (1 && ("b"!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("b"!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b"!==letterA); ) if (k++) return true; return false; is true
+PASS return ("a"=="b"); is false
+PASS if (("a"=="b")) return true; return false; is false
+PASS var k = 0; while (("a"=="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"=="b"); ) if (k++) return true; return false; is false
+PASS return ("a"!="b"); is true
+PASS if (("a"!="b")) return true; return false; is true
+PASS var k = 0; while (("a"!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!="b"); ) if (k++) return true; return false; is true
+PASS return ("a"==="b"); is false
+PASS if (("a"==="b")) return true; return false; is false
+PASS var k = 0; while (("a"==="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"==="b"); ) if (k++) return true; return false; is false
+PASS return ("a"!=="b"); is true
+PASS if (("a"!=="b")) return true; return false; is true
+PASS var k = 0; while (("a"!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=="b"); ) if (k++) return true; return false; is true
+PASS return ("a"=="b") || 1; is true
+PASS if (("a"=="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"=="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!="b") || 1; is true
+PASS if (("a"!="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"==="b") || 1; is true
+PASS if (("a"==="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"==="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=="b") || 1; is true
+PASS if (("a"!=="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"=="b") && 1; is false
+PASS if (("a"=="b") && 1) return true; return false; is false
+PASS var k = 0; while (("a"=="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"=="b") && 1; ) if (k++) return true; return false; is false
+PASS return ("a"!="b") && 1; is true
+PASS if (("a"!="b") && 1) return true; return false; is true
+PASS var k = 0; while (("a"!="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!="b") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"==="b") && 1; is false
+PASS if (("a"==="b") && 1) return true; return false; is false
+PASS var k = 0; while (("a"==="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"==="b") && 1; ) if (k++) return true; return false; is false
+PASS return ("a"!=="b") && 1; is true
+PASS if (("a"!=="b") && 1) return true; return false; is true
+PASS var k = 0; while (("a"!=="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=="b") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"=="b") || 1; is true
+PASS if (("a"=="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"=="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!="b") || 1; is true
+PASS if (("a"!="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"==="b") || 1; is true
+PASS if (("a"==="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"==="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=="b") || 1; is true
+PASS if (("a"!=="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"=="b"); is true
+PASS if (1 || ("a"=="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"=="b"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!="b"); is true
+PASS if (1 || ("a"!="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!="b"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"==="b"); is true
+PASS if (1 || ("a"==="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"==="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"==="b"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!=="b"); is true
+PASS if (1 || ("a"!=="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!=="b"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"=="b"); is false
+PASS if (1 && ("a"=="b")) return true; return false; is false
+PASS var k = 0; while (1 && ("a"=="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"=="b"); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"!="b"); is true
+PASS if (1 && ("a"!="b")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"!="b"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"==="b"); is false
+PASS if (1 && ("a"==="b")) return true; return false; is false
+PASS var k = 0; while (1 && ("a"==="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"==="b"); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"!=="b"); is true
+PASS if (1 && ("a"!=="b")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"!=="b"); ) if (k++) return true; return false; is true
+PASS return ("a"==letterA); is true
+PASS if (("a"==letterA)) return true; return false; is true
+PASS var k = 0; while (("a"==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==letterA); ) if (k++) return true; return false; is true
+PASS return ("a"!=letterA); is false
+PASS if (("a"!=letterA)) return true; return false; is false
+PASS var k = 0; while (("a"!=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!=letterA); ) if (k++) return true; return false; is false
+PASS return ("a"===letterA); is true
+PASS if (("a"===letterA)) return true; return false; is true
+PASS var k = 0; while (("a"===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"===letterA); ) if (k++) return true; return false; is true
+PASS return ("a"!==letterA); is false
+PASS if (("a"!==letterA)) return true; return false; is false
+PASS var k = 0; while (("a"!==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!==letterA); ) if (k++) return true; return false; is false
+PASS return ("a"==letterA) || 1; is true
+PASS if (("a"==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=letterA) || 1; is true
+PASS if (("a"!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"===letterA) || 1; is true
+PASS if (("a"===letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!==letterA) || 1; is true
+PASS if (("a"!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"==letterA) && 1; is true
+PASS if (("a"==letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("a"==letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=letterA) && 1; is false
+PASS if (("a"!=letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("a"!=letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!=letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("a"===letterA) && 1; is true
+PASS if (("a"===letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("a"===letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"===letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("a"!==letterA) && 1; is false
+PASS if (("a"!==letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("a"!==letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!==letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("a"==letterA) || 1; is true
+PASS if (("a"==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=letterA) || 1; is true
+PASS if (("a"!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"===letterA) || 1; is true
+PASS if (("a"===letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!==letterA) || 1; is true
+PASS if (("a"!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"==letterA); is true
+PASS if (1 || ("a"==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"==letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!=letterA); is true
+PASS if (1 || ("a"!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"===letterA); is true
+PASS if (1 || ("a"===letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"===letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!==letterA); is true
+PASS if (1 || ("a"!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"==letterA); is true
+PASS if (1 && ("a"==letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("a"==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"!=letterA); is false
+PASS if (1 && ("a"!=letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("a"!=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"!=letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"===letterA); is true
+PASS if (1 && ("a"===letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("a"===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"===letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"!==letterA); is false
+PASS if (1 && ("a"!==letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("a"!==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"!==letterA); ) if (k++) return true; return false; is false
+PASS return ("b"==letterA); is false
+PASS if (("b"==letterA)) return true; return false; is false
+PASS var k = 0; while (("b"==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"==letterA); ) if (k++) return true; return false; is false
+PASS return ("b"!=letterA); is true
+PASS if (("b"!=letterA)) return true; return false; is true
+PASS var k = 0; while (("b"!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=letterA); ) if (k++) return true; return false; is true
+PASS return ("b"===letterA); is false
+PASS if (("b"===letterA)) return true; return false; is false
+PASS var k = 0; while (("b"===letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"===letterA); ) if (k++) return true; return false; is false
+PASS return ("b"!==letterA); is true
+PASS if (("b"!==letterA)) return true; return false; is true
+PASS var k = 0; while (("b"!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!==letterA); ) if (k++) return true; return false; is true
+PASS return ("b"==letterA) || 1; is true
+PASS if (("b"==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!=letterA) || 1; is true
+PASS if (("b"!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"===letterA) || 1; is true
+PASS if (("b"===letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!==letterA) || 1; is true
+PASS if (("b"!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"==letterA) && 1; is false
+PASS if (("b"==letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("b"==letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"==letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("b"!=letterA) && 1; is true
+PASS if (("b"!=letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("b"!=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("b"===letterA) && 1; is false
+PASS if (("b"===letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("b"===letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"===letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("b"!==letterA) && 1; is true
+PASS if (("b"!==letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("b"!==letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!==letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("b"==letterA) || 1; is true
+PASS if (("b"==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!=letterA) || 1; is true
+PASS if (("b"!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"===letterA) || 1; is true
+PASS if (("b"===letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!==letterA) || 1; is true
+PASS if (("b"!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b"==letterA); is true
+PASS if (1 || ("b"==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"==letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"!=letterA); is true
+PASS if (1 || ("b"!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"===letterA); is true
+PASS if (1 || ("b"===letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"===letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"!==letterA); is true
+PASS if (1 || ("b"!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"!==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"==letterA); is false
+PASS if (1 && ("b"==letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("b"==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"==letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"!=letterA); is true
+PASS if (1 && ("b"!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("b"!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b"!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"===letterA); is false
+PASS if (1 && ("b"===letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("b"===letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"===letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"!==letterA); is true
+PASS if (1 && ("b"!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("b"!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b"!==letterA); ) if (k++) return true; return false; is true
+PASS return ("a"==0); is false
+PASS if (("a"==0)) return true; return false; is false
+PASS var k = 0; while (("a"==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"==0); ) if (k++) return true; return false; is false
+PASS return ("a"!=0); is true
+PASS if (("a"!=0)) return true; return false; is true
+PASS var k = 0; while (("a"!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=0); ) if (k++) return true; return false; is true
+PASS return ("a"===0); is false
+PASS if (("a"===0)) return true; return false; is false
+PASS var k = 0; while (("a"===0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"===0); ) if (k++) return true; return false; is false
+PASS return ("a"!==0); is true
+PASS if (("a"!==0)) return true; return false; is true
+PASS var k = 0; while (("a"!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!==0); ) if (k++) return true; return false; is true
+PASS return ("a"==0) || 1; is true
+PASS if (("a"==0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=0) || 1; is true
+PASS if (("a"!=0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"===0) || 1; is true
+PASS if (("a"===0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"===0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!==0) || 1; is true
+PASS if (("a"!==0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!==0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"==0) && 1; is false
+PASS if (("a"==0) && 1) return true; return false; is false
+PASS var k = 0; while (("a"==0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"==0) && 1; ) if (k++) return true; return false; is false
+PASS return ("a"!=0) && 1; is true
+PASS if (("a"!=0) && 1) return true; return false; is true
+PASS var k = 0; while (("a"!=0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=0) && 1; ) if (k++) return true; return false; is true
+PASS return ("a"===0) && 1; is false
+PASS if (("a"===0) && 1) return true; return false; is false
+PASS var k = 0; while (("a"===0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"===0) && 1; ) if (k++) return true; return false; is false
+PASS return ("a"!==0) && 1; is true
+PASS if (("a"!==0) && 1) return true; return false; is true
+PASS var k = 0; while (("a"!==0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!==0) && 1; ) if (k++) return true; return false; is true
+PASS return ("a"==0) || 1; is true
+PASS if (("a"==0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=0) || 1; is true
+PASS if (("a"!=0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"===0) || 1; is true
+PASS if (("a"===0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"===0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!==0) || 1; is true
+PASS if (("a"!==0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!==0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"==0); is true
+PASS if (1 || ("a"==0)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"==0); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!=0); is true
+PASS if (1 || ("a"!=0)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!=0); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"===0); is true
+PASS if (1 || ("a"===0)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"===0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"===0); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!==0); is true
+PASS if (1 || ("a"!==0)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!==0); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"==0); is false
+PASS if (1 && ("a"==0)) return true; return false; is false
+PASS var k = 0; while (1 && ("a"==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"==0); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"!=0); is true
+PASS if (1 && ("a"!=0)) return true; return false; is true
+PASS var k = 0; while (1 && ("a"!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"!=0); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"===0); is false
+PASS if (1 && ("a"===0)) return true; return false; is false
+PASS var k = 0; while (1 && ("a"===0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"===0); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"!==0); is true
+PASS if (1 && ("a"!==0)) return true; return false; is true
+PASS var k = 0; while (1 && ("a"!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"!==0); ) if (k++) return true; return false; is true
+PASS return (0=="a"); is false
+PASS if ((0=="a")) return true; return false; is false
+PASS var k = 0; while ((0=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0=="a"); ) if (k++) return true; return false; is false
+PASS return (0!="a"); is true
+PASS if ((0!="a")) return true; return false; is true
+PASS var k = 0; while ((0!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!="a"); ) if (k++) return true; return false; is true
+PASS return (0==="a"); is false
+PASS if ((0==="a")) return true; return false; is false
+PASS var k = 0; while ((0==="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==="a"); ) if (k++) return true; return false; is false
+PASS return (0!=="a"); is true
+PASS if ((0!=="a")) return true; return false; is true
+PASS var k = 0; while ((0!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=="a"); ) if (k++) return true; return false; is true
+PASS return (0=="a") || 1; is true
+PASS if ((0=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0!="a") || 1; is true
+PASS if ((0!="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0==="a") || 1; is true
+PASS if ((0==="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0!=="a") || 1; is true
+PASS if ((0!=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0=="a") && 1; is false
+PASS if ((0=="a") && 1) return true; return false; is false
+PASS var k = 0; while ((0=="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0=="a") && 1; ) if (k++) return true; return false; is false
+PASS return (0!="a") && 1; is true
+PASS if ((0!="a") && 1) return true; return false; is true
+PASS var k = 0; while ((0!="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!="a") && 1; ) if (k++) return true; return false; is true
+PASS return (0==="a") && 1; is false
+PASS if ((0==="a") && 1) return true; return false; is false
+PASS var k = 0; while ((0==="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==="a") && 1; ) if (k++) return true; return false; is false
+PASS return (0!=="a") && 1; is true
+PASS if ((0!=="a") && 1) return true; return false; is true
+PASS var k = 0; while ((0!=="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=="a") && 1; ) if (k++) return true; return false; is true
+PASS return (0=="a") || 1; is true
+PASS if ((0=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0!="a") || 1; is true
+PASS if ((0!="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0==="a") || 1; is true
+PASS if ((0==="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0!=="a") || 1; is true
+PASS if ((0!=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0=="a"); is true
+PASS if (1 || (0=="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0=="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (0!="a"); is true
+PASS if (1 || (0!="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (0==="a"); is true
+PASS if (1 || (0==="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0==="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (0!=="a"); is true
+PASS if (1 || (0!=="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!=="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (0=="a"); is false
+PASS if (1 && (0=="a")) return true; return false; is false
+PASS var k = 0; while (1 && (0=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0=="a"); ) if (k++) return true; return false; is false
+PASS return 1 && (0!="a"); is true
+PASS if (1 && (0!="a")) return true; return false; is true
+PASS var k = 0; while (1 && (0!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (0==="a"); is false
+PASS if (1 && (0==="a")) return true; return false; is false
+PASS var k = 0; while (1 && (0==="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0==="a"); ) if (k++) return true; return false; is false
+PASS return 1 && (0!=="a"); is true
+PASS if (1 && (0!=="a")) return true; return false; is true
+PASS var k = 0; while (1 && (0!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!=="a"); ) if (k++) return true; return false; is true
+PASS return (letterA==0); is false
+PASS if ((letterA==0)) return true; return false; is false
+PASS var k = 0; while ((letterA==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA==0); ) if (k++) return true; return false; is false
+PASS return (letterA!=0); is true
+PASS if ((letterA!=0)) return true; return false; is true
+PASS var k = 0; while ((letterA!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=0); ) if (k++) return true; return false; is true
+PASS return (letterA===0); is false
+PASS if ((letterA===0)) return true; return false; is false
+PASS var k = 0; while ((letterA===0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA===0); ) if (k++) return true; return false; is false
+PASS return (letterA!==0); is true
+PASS if ((letterA!==0)) return true; return false; is true
+PASS var k = 0; while ((letterA!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!==0); ) if (k++) return true; return false; is true
+PASS return (letterA==0) || 1; is true
+PASS if ((letterA==0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=0) || 1; is true
+PASS if ((letterA!=0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA===0) || 1; is true
+PASS if ((letterA===0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA===0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!==0) || 1; is true
+PASS if ((letterA!==0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!==0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==0) && 1; is false
+PASS if ((letterA==0) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA==0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA==0) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA!=0) && 1; is true
+PASS if ((letterA!=0) && 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=0) && 1; ) if (k++) return true; return false; is true
+PASS return (letterA===0) && 1; is false
+PASS if ((letterA===0) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA===0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA===0) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA!==0) && 1; is true
+PASS if ((letterA!==0) && 1) return true; return false; is true
+PASS var k = 0; while ((letterA!==0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!==0) && 1; ) if (k++) return true; return false; is true
+PASS return (letterA==0) || 1; is true
+PASS if ((letterA==0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=0) || 1; is true
+PASS if ((letterA!=0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA===0) || 1; is true
+PASS if ((letterA===0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA===0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!==0) || 1; is true
+PASS if ((letterA!==0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!==0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA==0); is true
+PASS if (1 || (letterA==0)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA==0); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!=0); is true
+PASS if (1 || (letterA!=0)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!=0); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA===0); is true
+PASS if (1 || (letterA===0)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA===0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA===0); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!==0); is true
+PASS if (1 || (letterA!==0)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!==0); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA==0); is false
+PASS if (1 && (letterA==0)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA==0); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA!=0); is true
+PASS if (1 && (letterA!=0)) return true; return false; is true
+PASS var k = 0; while (1 && (letterA!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA!=0); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA===0); is false
+PASS if (1 && (letterA===0)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA===0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA===0); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA!==0); is true
+PASS if (1 && (letterA!==0)) return true; return false; is true
+PASS var k = 0; while (1 && (letterA!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA!==0); ) if (k++) return true; return false; is true
+PASS return (letterA=="a"); is true
+PASS if ((letterA=="a")) return true; return false; is true
+PASS var k = 0; while ((letterA=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="a"); ) if (k++) return true; return false; is true
+PASS return (letterA!="a"); is false
+PASS if ((letterA!="a")) return true; return false; is false
+PASS var k = 0; while ((letterA!="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!="a"); ) if (k++) return true; return false; is false
+PASS return (letterA==="a"); is true
+PASS if ((letterA==="a")) return true; return false; is true
+PASS var k = 0; while ((letterA==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="a"); ) if (k++) return true; return false; is true
+PASS return (letterA!=="a"); is false
+PASS if ((letterA!=="a")) return true; return false; is false
+PASS var k = 0; while ((letterA!=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!=="a"); ) if (k++) return true; return false; is false
+PASS return (letterA=="a") || 1; is true
+PASS if ((letterA=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!="a") || 1; is true
+PASS if ((letterA!="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==="a") || 1; is true
+PASS if ((letterA==="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=="a") || 1; is true
+PASS if ((letterA!=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA=="a") && 1; is true
+PASS if ((letterA=="a") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA=="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="a") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA!="a") && 1; is false
+PASS if ((letterA!="a") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA!="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!="a") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA==="a") && 1; is true
+PASS if ((letterA==="a") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA==="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="a") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=="a") && 1; is false
+PASS if ((letterA!=="a") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA!=="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!=="a") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA=="a") || 1; is true
+PASS if ((letterA=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!="a") || 1; is true
+PASS if ((letterA!="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==="a") || 1; is true
+PASS if ((letterA==="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=="a") || 1; is true
+PASS if ((letterA!=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA=="a"); is true
+PASS if (1 || (letterA=="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA=="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!="a"); is true
+PASS if (1 || (letterA!="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA==="a"); is true
+PASS if (1 || (letterA==="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA==="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!=="a"); is true
+PASS if (1 || (letterA!=="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!=="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA=="a"); is true
+PASS if (1 && (letterA=="a")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA=="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA!="a"); is false
+PASS if (1 && (letterA!="a")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA!="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA!="a"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA==="a"); is true
+PASS if (1 && (letterA==="a")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA==="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA!=="a"); is false
+PASS if (1 && (letterA!=="a")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA!=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA!=="a"); ) if (k++) return true; return false; is false
+PASS return (0=="a"); is false
+PASS if ((0=="a")) return true; return false; is false
+PASS var k = 0; while ((0=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0=="a"); ) if (k++) return true; return false; is false
+PASS return (0!="a"); is true
+PASS if ((0!="a")) return true; return false; is true
+PASS var k = 0; while ((0!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!="a"); ) if (k++) return true; return false; is true
+PASS return (0==="a"); is false
+PASS if ((0==="a")) return true; return false; is false
+PASS var k = 0; while ((0==="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==="a"); ) if (k++) return true; return false; is false
+PASS return (0!=="a"); is true
+PASS if ((0!=="a")) return true; return false; is true
+PASS var k = 0; while ((0!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=="a"); ) if (k++) return true; return false; is true
+PASS return (0=="a") || 1; is true
+PASS if ((0=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0!="a") || 1; is true
+PASS if ((0!="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0==="a") || 1; is true
+PASS if ((0==="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0!=="a") || 1; is true
+PASS if ((0!=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0=="a") && 1; is false
+PASS if ((0=="a") && 1) return true; return false; is false
+PASS var k = 0; while ((0=="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0=="a") && 1; ) if (k++) return true; return false; is false
+PASS return (0!="a") && 1; is true
+PASS if ((0!="a") && 1) return true; return false; is true
+PASS var k = 0; while ((0!="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!="a") && 1; ) if (k++) return true; return false; is true
+PASS return (0==="a") && 1; is false
+PASS if ((0==="a") && 1) return true; return false; is false
+PASS var k = 0; while ((0==="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==="a") && 1; ) if (k++) return true; return false; is false
+PASS return (0!=="a") && 1; is true
+PASS if ((0!=="a") && 1) return true; return false; is true
+PASS var k = 0; while ((0!=="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=="a") && 1; ) if (k++) return true; return false; is true
+PASS return (0=="a") || 1; is true
+PASS if ((0=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0!="a") || 1; is true
+PASS if ((0!="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0==="a") || 1; is true
+PASS if ((0==="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0!=="a") || 1; is true
+PASS if ((0!=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0=="a"); is true
+PASS if (1 || (0=="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0=="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (0!="a"); is true
+PASS if (1 || (0!="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (0==="a"); is true
+PASS if (1 || (0==="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0==="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (0!=="a"); is true
+PASS if (1 || (0!=="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!=="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (0=="a"); is false
+PASS if (1 && (0=="a")) return true; return false; is false
+PASS var k = 0; while (1 && (0=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0=="a"); ) if (k++) return true; return false; is false
+PASS return 1 && (0!="a"); is true
+PASS if (1 && (0!="a")) return true; return false; is true
+PASS var k = 0; while (1 && (0!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (0==="a"); is false
+PASS if (1 && (0==="a")) return true; return false; is false
+PASS var k = 0; while (1 && (0==="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0==="a"); ) if (k++) return true; return false; is false
+PASS return 1 && (0!=="a"); is true
+PASS if (1 && (0!=="a")) return true; return false; is true
+PASS var k = 0; while (1 && (0!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!=="a"); ) if (k++) return true; return false; is true
+PASS return (letterA==letterA); is true
+PASS if ((letterA==letterA)) return true; return false; is true
+PASS var k = 0; while ((letterA==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==letterA); ) if (k++) return true; return false; is true
+PASS return (letterA!=letterA); is false
+PASS if ((letterA!=letterA)) return true; return false; is false
+PASS var k = 0; while ((letterA!=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!=letterA); ) if (k++) return true; return false; is false
+PASS return (letterA===letterA); is true
+PASS if ((letterA===letterA)) return true; return false; is true
+PASS var k = 0; while ((letterA===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA===letterA); ) if (k++) return true; return false; is true
+PASS return (letterA!==letterA); is false
+PASS if ((letterA!==letterA)) return true; return false; is false
+PASS var k = 0; while ((letterA!==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!==letterA); ) if (k++) return true; return false; is false
+PASS return (letterA==letterA) || 1; is true
+PASS if ((letterA==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=letterA) || 1; is true
+PASS if ((letterA!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA===letterA) || 1; is true
+PASS if ((letterA===letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!==letterA) || 1; is true
+PASS if ((letterA!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==letterA) && 1; is true
+PASS if ((letterA==letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((letterA==letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=letterA) && 1; is false
+PASS if ((letterA!=letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA!=letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!=letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA===letterA) && 1; is true
+PASS if ((letterA===letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((letterA===letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA===letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (letterA!==letterA) && 1; is false
+PASS if ((letterA!==letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA!==letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!==letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA==letterA) || 1; is true
+PASS if ((letterA==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=letterA) || 1; is true
+PASS if ((letterA!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA===letterA) || 1; is true
+PASS if ((letterA===letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!==letterA) || 1; is true
+PASS if ((letterA!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA==letterA); is true
+PASS if (1 || (letterA==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA==letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!=letterA); is true
+PASS if (1 || (letterA!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA===letterA); is true
+PASS if (1 || (letterA===letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA===letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!==letterA); is true
+PASS if (1 || (letterA!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA==letterA); is true
+PASS if (1 && (letterA==letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (letterA==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA!=letterA); is false
+PASS if (1 && (letterA!=letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA!=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA!=letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA===letterA); is true
+PASS if (1 && (letterA===letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (letterA===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA===letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA!==letterA); is false
+PASS if (1 && (letterA!==letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA!==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA!==letterA); ) if (k++) return true; return false; is false
+PASS return (0==letterA); is false
+PASS if ((0==letterA)) return true; return false; is false
+PASS var k = 0; while ((0==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==letterA); ) if (k++) return true; return false; is false
+PASS return (0!=letterA); is true
+PASS if ((0!=letterA)) return true; return false; is true
+PASS var k = 0; while ((0!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=letterA); ) if (k++) return true; return false; is true
+PASS return (0===letterA); is false
+PASS if ((0===letterA)) return true; return false; is false
+PASS var k = 0; while ((0===letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0===letterA); ) if (k++) return true; return false; is false
+PASS return (0!==letterA); is true
+PASS if ((0!==letterA)) return true; return false; is true
+PASS var k = 0; while ((0!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==letterA); ) if (k++) return true; return false; is true
+PASS return (0==letterA) || 1; is true
+PASS if ((0==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0!=letterA) || 1; is true
+PASS if ((0!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0===letterA) || 1; is true
+PASS if ((0===letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0!==letterA) || 1; is true
+PASS if ((0!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0==letterA) && 1; is false
+PASS if ((0==letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0==letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0!=letterA) && 1; is true
+PASS if ((0!=letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((0!=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (0===letterA) && 1; is false
+PASS if ((0===letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0===letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0===letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0!==letterA) && 1; is true
+PASS if ((0!==letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((0!==letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (0==letterA) || 1; is true
+PASS if ((0==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0!=letterA) || 1; is true
+PASS if ((0!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0===letterA) || 1; is true
+PASS if ((0===letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0!==letterA) || 1; is true
+PASS if ((0!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0==letterA); is true
+PASS if (1 || (0==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0==letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (0!=letterA); is true
+PASS if (1 || (0!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (0===letterA); is true
+PASS if (1 || (0===letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0===letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (0!==letterA); is true
+PASS if (1 || (0!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (0==letterA); is false
+PASS if (1 && (0==letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0==letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (0!=letterA); is true
+PASS if (1 && (0!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (0!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (0===letterA); is false
+PASS if (1 && (0===letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0===letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0===letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (0!==letterA); is true
+PASS if (1 && (0!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (0!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!==letterA); ) if (k++) return true; return false; is true
+PASS return ("a"==letterA); is true
+PASS if (("a"==letterA)) return true; return false; is true
+PASS var k = 0; while (("a"==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==letterA); ) if (k++) return true; return false; is true
+PASS return ("a"!=letterA); is false
+PASS if (("a"!=letterA)) return true; return false; is false
+PASS var k = 0; while (("a"!=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!=letterA); ) if (k++) return true; return false; is false
+PASS return ("a"===letterA); is true
+PASS if (("a"===letterA)) return true; return false; is true
+PASS var k = 0; while (("a"===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"===letterA); ) if (k++) return true; return false; is true
+PASS return ("a"!==letterA); is false
+PASS if (("a"!==letterA)) return true; return false; is false
+PASS var k = 0; while (("a"!==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!==letterA); ) if (k++) return true; return false; is false
+PASS return ("a"==letterA) || 1; is true
+PASS if (("a"==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=letterA) || 1; is true
+PASS if (("a"!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"===letterA) || 1; is true
+PASS if (("a"===letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!==letterA) || 1; is true
+PASS if (("a"!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"==letterA) && 1; is true
+PASS if (("a"==letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("a"==letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=letterA) && 1; is false
+PASS if (("a"!=letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("a"!=letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!=letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("a"===letterA) && 1; is true
+PASS if (("a"===letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("a"===letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"===letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("a"!==letterA) && 1; is false
+PASS if (("a"!==letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("a"!==letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!==letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("a"==letterA) || 1; is true
+PASS if (("a"==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=letterA) || 1; is true
+PASS if (("a"!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"===letterA) || 1; is true
+PASS if (("a"===letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!==letterA) || 1; is true
+PASS if (("a"!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"==letterA); is true
+PASS if (1 || ("a"==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"==letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!=letterA); is true
+PASS if (1 || ("a"!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"===letterA); is true
+PASS if (1 || ("a"===letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"===letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!==letterA); is true
+PASS if (1 || ("a"!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"==letterA); is true
+PASS if (1 && ("a"==letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("a"==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"!=letterA); is false
+PASS if (1 && ("a"!=letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("a"!=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"!=letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"===letterA); is true
+PASS if (1 && ("a"===letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("a"===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"===letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"!==letterA); is false
+PASS if (1 && ("a"!==letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("a"!==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"!==letterA); ) if (k++) return true; return false; is false
+PASS return (0==letterA); is false
+PASS if ((0==letterA)) return true; return false; is false
+PASS var k = 0; while ((0==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==letterA); ) if (k++) return true; return false; is false
+PASS return (0!=letterA); is true
+PASS if ((0!=letterA)) return true; return false; is true
+PASS var k = 0; while ((0!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=letterA); ) if (k++) return true; return false; is true
+PASS return (0===letterA); is false
+PASS if ((0===letterA)) return true; return false; is false
+PASS var k = 0; while ((0===letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0===letterA); ) if (k++) return true; return false; is false
+PASS return (0!==letterA); is true
+PASS if ((0!==letterA)) return true; return false; is true
+PASS var k = 0; while ((0!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==letterA); ) if (k++) return true; return false; is true
+PASS return (0==letterA) || 1; is true
+PASS if ((0==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0!=letterA) || 1; is true
+PASS if ((0!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0===letterA) || 1; is true
+PASS if ((0===letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0!==letterA) || 1; is true
+PASS if ((0!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0==letterA) && 1; is false
+PASS if ((0==letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0==letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0!=letterA) && 1; is true
+PASS if ((0!=letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((0!=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (0===letterA) && 1; is false
+PASS if ((0===letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0===letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0===letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0!==letterA) && 1; is true
+PASS if ((0!==letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((0!==letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (0==letterA) || 1; is true
+PASS if ((0==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0!=letterA) || 1; is true
+PASS if ((0!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0===letterA) || 1; is true
+PASS if ((0===letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0!==letterA) || 1; is true
+PASS if ((0!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0==letterA); is true
+PASS if (1 || (0==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0==letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (0!=letterA); is true
+PASS if (1 || (0!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (0===letterA); is true
+PASS if (1 || (0===letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0===letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (0!==letterA); is true
+PASS if (1 || (0!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (0==letterA); is false
+PASS if (1 && (0==letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0==letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (0!=letterA); is true
+PASS if (1 && (0!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (0!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (0===letterA); is false
+PASS if (1 && (0===letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0===letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0===letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (0!==letterA); is true
+PASS if (1 && (0!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (0!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!==letterA); ) if (k++) return true; return false; is true
+PASS return (0==1); is false
+PASS if ((0==1)) return true; return false; is false
+PASS var k = 0; while ((0==1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==1); ) if (k++) return true; return false; is false
+PASS return (0!=1); is true
+PASS if ((0!=1)) return true; return false; is true
+PASS var k = 0; while ((0!=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=1); ) if (k++) return true; return false; is true
+PASS return (0===1); is false
+PASS if ((0===1)) return true; return false; is false
+PASS var k = 0; while ((0===1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0===1); ) if (k++) return true; return false; is false
+PASS return (0!==1); is true
+PASS if ((0!==1)) return true; return false; is true
+PASS var k = 0; while ((0!==1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==1); ) if (k++) return true; return false; is true
+PASS return (0==1) || 1; is true
+PASS if ((0==1) || 1) return true; return false; is true
+PASS var k = 0; while ((0==1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==1) || 1; ) if (k++) return true; return false; is true
+PASS return (0!=1) || 1; is true
+PASS if ((0!=1) || 1) return true; return false; is true
+PASS var k = 0; while ((0!=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=1) || 1; ) if (k++) return true; return false; is true
+PASS return (0===1) || 1; is true
+PASS if ((0===1) || 1) return true; return false; is true
+PASS var k = 0; while ((0===1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===1) || 1; ) if (k++) return true; return false; is true
+PASS return (0!==1) || 1; is true
+PASS if ((0!==1) || 1) return true; return false; is true
+PASS var k = 0; while ((0!==1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==1) || 1; ) if (k++) return true; return false; is true
+PASS return (0==1) && 1; is false
+PASS if ((0==1) && 1) return true; return false; is false
+PASS var k = 0; while ((0==1) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==1) && 1; ) if (k++) return true; return false; is false
+PASS return (0!=1) && 1; is true
+PASS if ((0!=1) && 1) return true; return false; is true
+PASS var k = 0; while ((0!=1) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=1) && 1; ) if (k++) return true; return false; is true
+PASS return (0===1) && 1; is false
+PASS if ((0===1) && 1) return true; return false; is false
+PASS var k = 0; while ((0===1) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0===1) && 1; ) if (k++) return true; return false; is false
+PASS return (0!==1) && 1; is true
+PASS if ((0!==1) && 1) return true; return false; is true
+PASS var k = 0; while ((0!==1) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==1) && 1; ) if (k++) return true; return false; is true
+PASS return (0==1) || 1; is true
+PASS if ((0==1) || 1) return true; return false; is true
+PASS var k = 0; while ((0==1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==1) || 1; ) if (k++) return true; return false; is true
+PASS return (0!=1) || 1; is true
+PASS if ((0!=1) || 1) return true; return false; is true
+PASS var k = 0; while ((0!=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=1) || 1; ) if (k++) return true; return false; is true
+PASS return (0===1) || 1; is true
+PASS if ((0===1) || 1) return true; return false; is true
+PASS var k = 0; while ((0===1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===1) || 1; ) if (k++) return true; return false; is true
+PASS return (0!==1) || 1; is true
+PASS if ((0!==1) || 1) return true; return false; is true
+PASS var k = 0; while ((0!==1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==1) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0==1); is true
+PASS if (1 || (0==1)) return true; return false; is true
+PASS var k = 0; while (1 || (0==1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0==1); ) if (k++) return true; return false; is true
+PASS return 1 || (0!=1); is true
+PASS if (1 || (0!=1)) return true; return false; is true
+PASS var k = 0; while (1 || (0!=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!=1); ) if (k++) return true; return false; is true
+PASS return 1 || (0===1); is true
+PASS if (1 || (0===1)) return true; return false; is true
+PASS var k = 0; while (1 || (0===1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0===1); ) if (k++) return true; return false; is true
+PASS return 1 || (0!==1); is true
+PASS if (1 || (0!==1)) return true; return false; is true
+PASS var k = 0; while (1 || (0!==1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!==1); ) if (k++) return true; return false; is true
+PASS return 1 && (0==1); is false
+PASS if (1 && (0==1)) return true; return false; is false
+PASS var k = 0; while (1 && (0==1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0==1); ) if (k++) return true; return false; is false
+PASS return 1 && (0!=1); is true
+PASS if (1 && (0!=1)) return true; return false; is true
+PASS var k = 0; while (1 && (0!=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!=1); ) if (k++) return true; return false; is true
+PASS return 1 && (0===1); is false
+PASS if (1 && (0===1)) return true; return false; is false
+PASS var k = 0; while (1 && (0===1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0===1); ) if (k++) return true; return false; is false
+PASS return 1 && (0!==1); is true
+PASS if (1 && (0!==1)) return true; return false; is true
+PASS var k = 0; while (1 && (0!==1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!==1); ) if (k++) return true; return false; is true
+PASS return (0==0); is true
+PASS if ((0==0)) return true; return false; is true
+PASS var k = 0; while ((0==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==0); ) if (k++) return true; return false; is true
+PASS return (0!=0); is false
+PASS if ((0!=0)) return true; return false; is false
+PASS var k = 0; while ((0!=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0!=0); ) if (k++) return true; return false; is false
+PASS return (0===0); is true
+PASS if ((0===0)) return true; return false; is true
+PASS var k = 0; while ((0===0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===0); ) if (k++) return true; return false; is true
+PASS return (0!==0); is false
+PASS if ((0!==0)) return true; return false; is false
+PASS var k = 0; while ((0!==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0!==0); ) if (k++) return true; return false; is false
+PASS return (0==0) || 1; is true
+PASS if ((0==0) || 1) return true; return false; is true
+PASS var k = 0; while ((0==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==0) || 1; ) if (k++) return true; return false; is true
+PASS return (0!=0) || 1; is true
+PASS if ((0!=0) || 1) return true; return false; is true
+PASS var k = 0; while ((0!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=0) || 1; ) if (k++) return true; return false; is true
+PASS return (0===0) || 1; is true
+PASS if ((0===0) || 1) return true; return false; is true
+PASS var k = 0; while ((0===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===0) || 1; ) if (k++) return true; return false; is true
+PASS return (0!==0) || 1; is true
+PASS if ((0!==0) || 1) return true; return false; is true
+PASS var k = 0; while ((0!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==0) || 1; ) if (k++) return true; return false; is true
+PASS return (0==0) && 1; is true
+PASS if ((0==0) && 1) return true; return false; is true
+PASS var k = 0; while ((0==0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==0) && 1; ) if (k++) return true; return false; is true
+PASS return (0!=0) && 1; is false
+PASS if ((0!=0) && 1) return true; return false; is false
+PASS var k = 0; while ((0!=0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0!=0) && 1; ) if (k++) return true; return false; is false
+PASS return (0===0) && 1; is true
+PASS if ((0===0) && 1) return true; return false; is true
+PASS var k = 0; while ((0===0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===0) && 1; ) if (k++) return true; return false; is true
+PASS return (0!==0) && 1; is false
+PASS if ((0!==0) && 1) return true; return false; is false
+PASS var k = 0; while ((0!==0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0!==0) && 1; ) if (k++) return true; return false; is false
+PASS return (0==0) || 1; is true
+PASS if ((0==0) || 1) return true; return false; is true
+PASS var k = 0; while ((0==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==0) || 1; ) if (k++) return true; return false; is true
+PASS return (0!=0) || 1; is true
+PASS if ((0!=0) || 1) return true; return false; is true
+PASS var k = 0; while ((0!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=0) || 1; ) if (k++) return true; return false; is true
+PASS return (0===0) || 1; is true
+PASS if ((0===0) || 1) return true; return false; is true
+PASS var k = 0; while ((0===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===0) || 1; ) if (k++) return true; return false; is true
+PASS return (0!==0) || 1; is true
+PASS if ((0!==0) || 1) return true; return false; is true
+PASS var k = 0; while ((0!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0==0); is true
+PASS if (1 || (0==0)) return true; return false; is true
+PASS var k = 0; while (1 || (0==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0==0); ) if (k++) return true; return false; is true
+PASS return 1 || (0!=0); is true
+PASS if (1 || (0!=0)) return true; return false; is true
+PASS var k = 0; while (1 || (0!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!=0); ) if (k++) return true; return false; is true
+PASS return 1 || (0===0); is true
+PASS if (1 || (0===0)) return true; return false; is true
+PASS var k = 0; while (1 || (0===0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0===0); ) if (k++) return true; return false; is true
+PASS return 1 || (0!==0); is true
+PASS if (1 || (0!==0)) return true; return false; is true
+PASS var k = 0; while (1 || (0!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!==0); ) if (k++) return true; return false; is true
+PASS return 1 && (0==0); is true
+PASS if (1 && (0==0)) return true; return false; is true
+PASS var k = 0; while (1 && (0==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0==0); ) if (k++) return true; return false; is true
+PASS return 1 && (0!=0); is false
+PASS if (1 && (0!=0)) return true; return false; is false
+PASS var k = 0; while (1 && (0!=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0!=0); ) if (k++) return true; return false; is false
+PASS return 1 && (0===0); is true
+PASS if (1 && (0===0)) return true; return false; is true
+PASS var k = 0; while (1 && (0===0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0===0); ) if (k++) return true; return false; is true
+PASS return 1 && (0!==0); is false
+PASS if (1 && (0!==0)) return true; return false; is false
+PASS var k = 0; while (1 && (0!==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0!==0); ) if (k++) return true; return false; is false
+PASS return (1==0); is false
+PASS if ((1==0)) return true; return false; is false
+PASS var k = 0; while ((1==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1==0); ) if (k++) return true; return false; is false
+PASS return (1!=0); is true
+PASS if ((1!=0)) return true; return false; is true
+PASS var k = 0; while ((1!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!=0); ) if (k++) return true; return false; is true
+PASS return (1===0); is false
+PASS if ((1===0)) return true; return false; is false
+PASS var k = 0; while ((1===0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1===0); ) if (k++) return true; return false; is false
+PASS return (1!==0); is true
+PASS if ((1!==0)) return true; return false; is true
+PASS var k = 0; while ((1!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!==0); ) if (k++) return true; return false; is true
+PASS return (1==0) || 1; is true
+PASS if ((1==0) || 1) return true; return false; is true
+PASS var k = 0; while ((1==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1==0) || 1; ) if (k++) return true; return false; is true
+PASS return (1!=0) || 1; is true
+PASS if ((1!=0) || 1) return true; return false; is true
+PASS var k = 0; while ((1!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!=0) || 1; ) if (k++) return true; return false; is true
+PASS return (1===0) || 1; is true
+PASS if ((1===0) || 1) return true; return false; is true
+PASS var k = 0; while ((1===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1===0) || 1; ) if (k++) return true; return false; is true
+PASS return (1!==0) || 1; is true
+PASS if ((1!==0) || 1) return true; return false; is true
+PASS var k = 0; while ((1!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!==0) || 1; ) if (k++) return true; return false; is true
+PASS return (1==0) && 1; is false
+PASS if ((1==0) && 1) return true; return false; is false
+PASS var k = 0; while ((1==0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1==0) && 1; ) if (k++) return true; return false; is false
+PASS return (1!=0) && 1; is true
+PASS if ((1!=0) && 1) return true; return false; is true
+PASS var k = 0; while ((1!=0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!=0) && 1; ) if (k++) return true; return false; is true
+PASS return (1===0) && 1; is false
+PASS if ((1===0) && 1) return true; return false; is false
+PASS var k = 0; while ((1===0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1===0) && 1; ) if (k++) return true; return false; is false
+PASS return (1!==0) && 1; is true
+PASS if ((1!==0) && 1) return true; return false; is true
+PASS var k = 0; while ((1!==0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!==0) && 1; ) if (k++) return true; return false; is true
+PASS return (1==0) || 1; is true
+PASS if ((1==0) || 1) return true; return false; is true
+PASS var k = 0; while ((1==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1==0) || 1; ) if (k++) return true; return false; is true
+PASS return (1!=0) || 1; is true
+PASS if ((1!=0) || 1) return true; return false; is true
+PASS var k = 0; while ((1!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!=0) || 1; ) if (k++) return true; return false; is true
+PASS return (1===0) || 1; is true
+PASS if ((1===0) || 1) return true; return false; is true
+PASS var k = 0; while ((1===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1===0) || 1; ) if (k++) return true; return false; is true
+PASS return (1!==0) || 1; is true
+PASS if ((1!==0) || 1) return true; return false; is true
+PASS var k = 0; while ((1!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!==0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (1==0); is true
+PASS if (1 || (1==0)) return true; return false; is true
+PASS var k = 0; while (1 || (1==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1==0); ) if (k++) return true; return false; is true
+PASS return 1 || (1!=0); is true
+PASS if (1 || (1!=0)) return true; return false; is true
+PASS var k = 0; while (1 || (1!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1!=0); ) if (k++) return true; return false; is true
+PASS return 1 || (1===0); is true
+PASS if (1 || (1===0)) return true; return false; is true
+PASS var k = 0; while (1 || (1===0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1===0); ) if (k++) return true; return false; is true
+PASS return 1 || (1!==0); is true
+PASS if (1 || (1!==0)) return true; return false; is true
+PASS var k = 0; while (1 || (1!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1!==0); ) if (k++) return true; return false; is true
+PASS return 1 && (1==0); is false
+PASS if (1 && (1==0)) return true; return false; is false
+PASS var k = 0; while (1 && (1==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (1==0); ) if (k++) return true; return false; is false
+PASS return 1 && (1!=0); is true
+PASS if (1 && (1!=0)) return true; return false; is true
+PASS var k = 0; while (1 && (1!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (1!=0); ) if (k++) return true; return false; is true
+PASS return 1 && (1===0); is false
+PASS if (1 && (1===0)) return true; return false; is false
+PASS var k = 0; while (1 && (1===0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (1===0); ) if (k++) return true; return false; is false
+PASS return 1 && (1!==0); is true
+PASS if (1 && (1!==0)) return true; return false; is true
+PASS var k = 0; while (1 && (1!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (1!==0); ) if (k++) return true; return false; is true
+PASS return (Zero==1); is false
+PASS if ((Zero==1)) return true; return false; is false
+PASS var k = 0; while ((Zero==1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero==1); ) if (k++) return true; return false; is false
+PASS return (Zero!=1); is true
+PASS if ((Zero!=1)) return true; return false; is true
+PASS var k = 0; while ((Zero!=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!=1); ) if (k++) return true; return false; is true
+PASS return (Zero===1); is false
+PASS if ((Zero===1)) return true; return false; is false
+PASS var k = 0; while ((Zero===1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero===1); ) if (k++) return true; return false; is false
+PASS return (Zero!==1); is true
+PASS if ((Zero!==1)) return true; return false; is true
+PASS var k = 0; while ((Zero!==1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!==1); ) if (k++) return true; return false; is true
+PASS return (Zero==1) || 1; is true
+PASS if ((Zero==1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero==1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero==1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero!=1) || 1; is true
+PASS if ((Zero!=1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero!=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!=1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero===1) || 1; is true
+PASS if ((Zero===1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero===1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero===1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero!==1) || 1; is true
+PASS if ((Zero!==1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero!==1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!==1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero==1) && 1; is false
+PASS if ((Zero==1) && 1) return true; return false; is false
+PASS var k = 0; while ((Zero==1) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero==1) && 1; ) if (k++) return true; return false; is false
+PASS return (Zero!=1) && 1; is true
+PASS if ((Zero!=1) && 1) return true; return false; is true
+PASS var k = 0; while ((Zero!=1) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!=1) && 1; ) if (k++) return true; return false; is true
+PASS return (Zero===1) && 1; is false
+PASS if ((Zero===1) && 1) return true; return false; is false
+PASS var k = 0; while ((Zero===1) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero===1) && 1; ) if (k++) return true; return false; is false
+PASS return (Zero!==1) && 1; is true
+PASS if ((Zero!==1) && 1) return true; return false; is true
+PASS var k = 0; while ((Zero!==1) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!==1) && 1; ) if (k++) return true; return false; is true
+PASS return (Zero==1) || 1; is true
+PASS if ((Zero==1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero==1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero==1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero!=1) || 1; is true
+PASS if ((Zero!=1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero!=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!=1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero===1) || 1; is true
+PASS if ((Zero===1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero===1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero===1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero!==1) || 1; is true
+PASS if ((Zero!==1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero!==1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!==1) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (Zero==1); is true
+PASS if (1 || (Zero==1)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero==1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero==1); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero!=1); is true
+PASS if (1 || (Zero!=1)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero!=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero!=1); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero===1); is true
+PASS if (1 || (Zero===1)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero===1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero===1); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero!==1); is true
+PASS if (1 || (Zero!==1)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero!==1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero!==1); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero==1); is false
+PASS if (1 && (Zero==1)) return true; return false; is false
+PASS var k = 0; while (1 && (Zero==1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero==1); ) if (k++) return true; return false; is false
+PASS return 1 && (Zero!=1); is true
+PASS if (1 && (Zero!=1)) return true; return false; is true
+PASS var k = 0; while (1 && (Zero!=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero!=1); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero===1); is false
+PASS if (1 && (Zero===1)) return true; return false; is false
+PASS var k = 0; while (1 && (Zero===1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero===1); ) if (k++) return true; return false; is false
+PASS return 1 && (Zero!==1); is true
+PASS if (1 && (Zero!==1)) return true; return false; is true
+PASS var k = 0; while (1 && (Zero!==1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero!==1); ) if (k++) return true; return false; is true
+PASS return (Zero==0); is true
+PASS if ((Zero==0)) return true; return false; is true
+PASS var k = 0; while ((Zero==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero==0); ) if (k++) return true; return false; is true
+PASS return (Zero!=0); is false
+PASS if ((Zero!=0)) return true; return false; is false
+PASS var k = 0; while ((Zero!=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero!=0); ) if (k++) return true; return false; is false
+PASS return (Zero===0); is true
+PASS if ((Zero===0)) return true; return false; is true
+PASS var k = 0; while ((Zero===0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero===0); ) if (k++) return true; return false; is true
+PASS return (Zero!==0); is false
+PASS if ((Zero!==0)) return true; return false; is false
+PASS var k = 0; while ((Zero!==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero!==0); ) if (k++) return true; return false; is false
+PASS return (Zero==0) || 1; is true
+PASS if ((Zero==0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero==0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero!=0) || 1; is true
+PASS if ((Zero!=0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!=0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero===0) || 1; is true
+PASS if ((Zero===0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero===0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero!==0) || 1; is true
+PASS if ((Zero!==0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!==0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero==0) && 1; is true
+PASS if ((Zero==0) && 1) return true; return false; is true
+PASS var k = 0; while ((Zero==0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero==0) && 1; ) if (k++) return true; return false; is true
+PASS return (Zero!=0) && 1; is false
+PASS if ((Zero!=0) && 1) return true; return false; is false
+PASS var k = 0; while ((Zero!=0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero!=0) && 1; ) if (k++) return true; return false; is false
+PASS return (Zero===0) && 1; is true
+PASS if ((Zero===0) && 1) return true; return false; is true
+PASS var k = 0; while ((Zero===0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero===0) && 1; ) if (k++) return true; return false; is true
+PASS return (Zero!==0) && 1; is false
+PASS if ((Zero!==0) && 1) return true; return false; is false
+PASS var k = 0; while ((Zero!==0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero!==0) && 1; ) if (k++) return true; return false; is false
+PASS return (Zero==0) || 1; is true
+PASS if ((Zero==0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero==0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero!=0) || 1; is true
+PASS if ((Zero!=0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!=0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero===0) || 1; is true
+PASS if ((Zero===0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero===0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero!==0) || 1; is true
+PASS if ((Zero!==0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!==0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (Zero==0); is true
+PASS if (1 || (Zero==0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero==0); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero!=0); is true
+PASS if (1 || (Zero!=0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero!=0); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero===0); is true
+PASS if (1 || (Zero===0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero===0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero===0); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero!==0); is true
+PASS if (1 || (Zero!==0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero!==0); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero==0); is true
+PASS if (1 && (Zero==0)) return true; return false; is true
+PASS var k = 0; while (1 && (Zero==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero==0); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero!=0); is false
+PASS if (1 && (Zero!=0)) return true; return false; is false
+PASS var k = 0; while (1 && (Zero!=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero!=0); ) if (k++) return true; return false; is false
+PASS return 1 && (Zero===0); is true
+PASS if (1 && (Zero===0)) return true; return false; is true
+PASS var k = 0; while (1 && (Zero===0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero===0); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero!==0); is false
+PASS if (1 && (Zero!==0)) return true; return false; is false
+PASS var k = 0; while (1 && (Zero!==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero!==0); ) if (k++) return true; return false; is false
+PASS return (1==Zero); is false
+PASS if ((1==Zero)) return true; return false; is false
+PASS var k = 0; while ((1==Zero)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1==Zero); ) if (k++) return true; return false; is false
+PASS return (1!=Zero); is true
+PASS if ((1!=Zero)) return true; return false; is true
+PASS var k = 0; while ((1!=Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!=Zero); ) if (k++) return true; return false; is true
+PASS return (1===Zero); is false
+PASS if ((1===Zero)) return true; return false; is false
+PASS var k = 0; while ((1===Zero)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1===Zero); ) if (k++) return true; return false; is false
+PASS return (1!==Zero); is true
+PASS if ((1!==Zero)) return true; return false; is true
+PASS var k = 0; while ((1!==Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!==Zero); ) if (k++) return true; return false; is true
+PASS return (1==Zero) || 1; is true
+PASS if ((1==Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1==Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1==Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1!=Zero) || 1; is true
+PASS if ((1!=Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1!=Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!=Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1===Zero) || 1; is true
+PASS if ((1===Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1===Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1===Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1!==Zero) || 1; is true
+PASS if ((1!==Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1!==Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!==Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1==Zero) && 1; is false
+PASS if ((1==Zero) && 1) return true; return false; is false
+PASS var k = 0; while ((1==Zero) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1==Zero) && 1; ) if (k++) return true; return false; is false
+PASS return (1!=Zero) && 1; is true
+PASS if ((1!=Zero) && 1) return true; return false; is true
+PASS var k = 0; while ((1!=Zero) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!=Zero) && 1; ) if (k++) return true; return false; is true
+PASS return (1===Zero) && 1; is false
+PASS if ((1===Zero) && 1) return true; return false; is false
+PASS var k = 0; while ((1===Zero) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1===Zero) && 1; ) if (k++) return true; return false; is false
+PASS return (1!==Zero) && 1; is true
+PASS if ((1!==Zero) && 1) return true; return false; is true
+PASS var k = 0; while ((1!==Zero) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!==Zero) && 1; ) if (k++) return true; return false; is true
+PASS return (1==Zero) || 1; is true
+PASS if ((1==Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1==Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1==Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1!=Zero) || 1; is true
+PASS if ((1!=Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1!=Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!=Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1===Zero) || 1; is true
+PASS if ((1===Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1===Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1===Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1!==Zero) || 1; is true
+PASS if ((1!==Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1!==Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!==Zero) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (1==Zero); is true
+PASS if (1 || (1==Zero)) return true; return false; is true
+PASS var k = 0; while (1 || (1==Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1==Zero); ) if (k++) return true; return false; is true
+PASS return 1 || (1!=Zero); is true
+PASS if (1 || (1!=Zero)) return true; return false; is true
+PASS var k = 0; while (1 || (1!=Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1!=Zero); ) if (k++) return true; return false; is true
+PASS return 1 || (1===Zero); is true
+PASS if (1 || (1===Zero)) return true; return false; is true
+PASS var k = 0; while (1 || (1===Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1===Zero); ) if (k++) return true; return false; is true
+PASS return 1 || (1!==Zero); is true
+PASS if (1 || (1!==Zero)) return true; return false; is true
+PASS var k = 0; while (1 || (1!==Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1!==Zero); ) if (k++) return true; return false; is true
+PASS return 1 && (1==Zero); is false
+PASS if (1 && (1==Zero)) return true; return false; is false
+PASS var k = 0; while (1 && (1==Zero)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (1==Zero); ) if (k++) return true; return false; is false
+PASS return 1 && (1!=Zero); is true
+PASS if (1 && (1!=Zero)) return true; return false; is true
+PASS var k = 0; while (1 && (1!=Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (1!=Zero); ) if (k++) return true; return false; is true
+PASS return 1 && (1===Zero); is false
+PASS if (1 && (1===Zero)) return true; return false; is false
+PASS var k = 0; while (1 && (1===Zero)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (1===Zero); ) if (k++) return true; return false; is false
+PASS return 1 && (1!==Zero); is true
+PASS if (1 && (1!==Zero)) return true; return false; is true
+PASS var k = 0; while (1 && (1!==Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (1!==Zero); ) if (k++) return true; return false; is true
+PASS return (0==One); is false
+PASS if ((0==One)) return true; return false; is false
+PASS var k = 0; while ((0==One)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==One); ) if (k++) return true; return false; is false
+PASS return (0!=One); is true
+PASS if ((0!=One)) return true; return false; is true
+PASS var k = 0; while ((0!=One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=One); ) if (k++) return true; return false; is true
+PASS return (0===One); is false
+PASS if ((0===One)) return true; return false; is false
+PASS var k = 0; while ((0===One)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0===One); ) if (k++) return true; return false; is false
+PASS return (0!==One); is true
+PASS if ((0!==One)) return true; return false; is true
+PASS var k = 0; while ((0!==One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==One); ) if (k++) return true; return false; is true
+PASS return (0==One) || 1; is true
+PASS if ((0==One) || 1) return true; return false; is true
+PASS var k = 0; while ((0==One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==One) || 1; ) if (k++) return true; return false; is true
+PASS return (0!=One) || 1; is true
+PASS if ((0!=One) || 1) return true; return false; is true
+PASS var k = 0; while ((0!=One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=One) || 1; ) if (k++) return true; return false; is true
+PASS return (0===One) || 1; is true
+PASS if ((0===One) || 1) return true; return false; is true
+PASS var k = 0; while ((0===One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===One) || 1; ) if (k++) return true; return false; is true
+PASS return (0!==One) || 1; is true
+PASS if ((0!==One) || 1) return true; return false; is true
+PASS var k = 0; while ((0!==One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==One) || 1; ) if (k++) return true; return false; is true
+PASS return (0==One) && 1; is false
+PASS if ((0==One) && 1) return true; return false; is false
+PASS var k = 0; while ((0==One) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==One) && 1; ) if (k++) return true; return false; is false
+PASS return (0!=One) && 1; is true
+PASS if ((0!=One) && 1) return true; return false; is true
+PASS var k = 0; while ((0!=One) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=One) && 1; ) if (k++) return true; return false; is true
+PASS return (0===One) && 1; is false
+PASS if ((0===One) && 1) return true; return false; is false
+PASS var k = 0; while ((0===One) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0===One) && 1; ) if (k++) return true; return false; is false
+PASS return (0!==One) && 1; is true
+PASS if ((0!==One) && 1) return true; return false; is true
+PASS var k = 0; while ((0!==One) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==One) && 1; ) if (k++) return true; return false; is true
+PASS return (0==One) || 1; is true
+PASS if ((0==One) || 1) return true; return false; is true
+PASS var k = 0; while ((0==One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==One) || 1; ) if (k++) return true; return false; is true
+PASS return (0!=One) || 1; is true
+PASS if ((0!=One) || 1) return true; return false; is true
+PASS var k = 0; while ((0!=One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=One) || 1; ) if (k++) return true; return false; is true
+PASS return (0===One) || 1; is true
+PASS if ((0===One) || 1) return true; return false; is true
+PASS var k = 0; while ((0===One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===One) || 1; ) if (k++) return true; return false; is true
+PASS return (0!==One) || 1; is true
+PASS if ((0!==One) || 1) return true; return false; is true
+PASS var k = 0; while ((0!==One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==One) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0==One); is true
+PASS if (1 || (0==One)) return true; return false; is true
+PASS var k = 0; while (1 || (0==One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0==One); ) if (k++) return true; return false; is true
+PASS return 1 || (0!=One); is true
+PASS if (1 || (0!=One)) return true; return false; is true
+PASS var k = 0; while (1 || (0!=One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!=One); ) if (k++) return true; return false; is true
+PASS return 1 || (0===One); is true
+PASS if (1 || (0===One)) return true; return false; is true
+PASS var k = 0; while (1 || (0===One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0===One); ) if (k++) return true; return false; is true
+PASS return 1 || (0!==One); is true
+PASS if (1 || (0!==One)) return true; return false; is true
+PASS var k = 0; while (1 || (0!==One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!==One); ) if (k++) return true; return false; is true
+PASS return 1 && (0==One); is false
+PASS if (1 && (0==One)) return true; return false; is false
+PASS var k = 0; while (1 && (0==One)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0==One); ) if (k++) return true; return false; is false
+PASS return 1 && (0!=One); is true
+PASS if (1 && (0!=One)) return true; return false; is true
+PASS var k = 0; while (1 && (0!=One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!=One); ) if (k++) return true; return false; is true
+PASS return 1 && (0===One); is false
+PASS if (1 && (0===One)) return true; return false; is false
+PASS var k = 0; while (1 && (0===One)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0===One); ) if (k++) return true; return false; is false
+PASS return 1 && (0!==One); is true
+PASS if (1 && (0!==One)) return true; return false; is true
+PASS var k = 0; while (1 && (0!==One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!==One); ) if (k++) return true; return false; is true
+PASS return (One==0); is false
+PASS if ((One==0)) return true; return false; is false
+PASS var k = 0; while ((One==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (One==0); ) if (k++) return true; return false; is false
+PASS return (One!=0); is true
+PASS if ((One!=0)) return true; return false; is true
+PASS var k = 0; while ((One!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One!=0); ) if (k++) return true; return false; is true
+PASS return (One===0); is false
+PASS if ((One===0)) return true; return false; is false
+PASS var k = 0; while ((One===0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (One===0); ) if (k++) return true; return false; is false
+PASS return (One!==0); is true
+PASS if ((One!==0)) return true; return false; is true
+PASS var k = 0; while ((One!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One!==0); ) if (k++) return true; return false; is true
+PASS return (One==0) || 1; is true
+PASS if ((One==0) || 1) return true; return false; is true
+PASS var k = 0; while ((One==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One==0) || 1; ) if (k++) return true; return false; is true
+PASS return (One!=0) || 1; is true
+PASS if ((One!=0) || 1) return true; return false; is true
+PASS var k = 0; while ((One!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One!=0) || 1; ) if (k++) return true; return false; is true
+PASS return (One===0) || 1; is true
+PASS if ((One===0) || 1) return true; return false; is true
+PASS var k = 0; while ((One===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One===0) || 1; ) if (k++) return true; return false; is true
+PASS return (One!==0) || 1; is true
+PASS if ((One!==0) || 1) return true; return false; is true
+PASS var k = 0; while ((One!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One!==0) || 1; ) if (k++) return true; return false; is true
+PASS return (One==0) && 1; is false
+PASS if ((One==0) && 1) return true; return false; is false
+PASS var k = 0; while ((One==0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (One==0) && 1; ) if (k++) return true; return false; is false
+PASS return (One!=0) && 1; is true
+PASS if ((One!=0) && 1) return true; return false; is true
+PASS var k = 0; while ((One!=0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One!=0) && 1; ) if (k++) return true; return false; is true
+PASS return (One===0) && 1; is false
+PASS if ((One===0) && 1) return true; return false; is false
+PASS var k = 0; while ((One===0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (One===0) && 1; ) if (k++) return true; return false; is false
+PASS return (One!==0) && 1; is true
+PASS if ((One!==0) && 1) return true; return false; is true
+PASS var k = 0; while ((One!==0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One!==0) && 1; ) if (k++) return true; return false; is true
+PASS return (One==0) || 1; is true
+PASS if ((One==0) || 1) return true; return false; is true
+PASS var k = 0; while ((One==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One==0) || 1; ) if (k++) return true; return false; is true
+PASS return (One!=0) || 1; is true
+PASS if ((One!=0) || 1) return true; return false; is true
+PASS var k = 0; while ((One!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One!=0) || 1; ) if (k++) return true; return false; is true
+PASS return (One===0) || 1; is true
+PASS if ((One===0) || 1) return true; return false; is true
+PASS var k = 0; while ((One===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One===0) || 1; ) if (k++) return true; return false; is true
+PASS return (One!==0) || 1; is true
+PASS if ((One!==0) || 1) return true; return false; is true
+PASS var k = 0; while ((One!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One!==0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (One==0); is true
+PASS if (1 || (One==0)) return true; return false; is true
+PASS var k = 0; while (1 || (One==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (One==0); ) if (k++) return true; return false; is true
+PASS return 1 || (One!=0); is true
+PASS if (1 || (One!=0)) return true; return false; is true
+PASS var k = 0; while (1 || (One!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (One!=0); ) if (k++) return true; return false; is true
+PASS return 1 || (One===0); is true
+PASS if (1 || (One===0)) return true; return false; is true
+PASS var k = 0; while (1 || (One===0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (One===0); ) if (k++) return true; return false; is true
+PASS return 1 || (One!==0); is true
+PASS if (1 || (One!==0)) return true; return false; is true
+PASS var k = 0; while (1 || (One!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (One!==0); ) if (k++) return true; return false; is true
+PASS return 1 && (One==0); is false
+PASS if (1 && (One==0)) return true; return false; is false
+PASS var k = 0; while (1 && (One==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (One==0); ) if (k++) return true; return false; is false
+PASS return 1 && (One!=0); is true
+PASS if (1 && (One!=0)) return true; return false; is true
+PASS var k = 0; while (1 && (One!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (One!=0); ) if (k++) return true; return false; is true
+PASS return 1 && (One===0); is false
+PASS if (1 && (One===0)) return true; return false; is false
+PASS var k = 0; while (1 && (One===0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (One===0); ) if (k++) return true; return false; is false
+PASS return 1 && (One!==0); is true
+PASS if (1 && (One!==0)) return true; return false; is true
+PASS var k = 0; while (1 && (One!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (One!==0); ) if (k++) return true; return false; is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/comparison-operators-greater-expected.txt b/deps/v8/test/webkit/comparison-operators-greater-expected.txt
new file mode 100644 (file)
index 0000000..29c0274
--- /dev/null
@@ -0,0 +1,1934 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+test that comparison operators work correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS return ("a">"b"); is false
+PASS if (("a">"b")) return true; return false; is false
+PASS var k = 0; while (("a">"b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">"b"); ) if (k++) return true; return false; is false
+PASS return ("a">="b"); is false
+PASS if (("a">="b")) return true; return false; is false
+PASS var k = 0; while (("a">="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">="b"); ) if (k++) return true; return false; is false
+PASS return ("a">"b") || 1; is true
+PASS if (("a">"b") || 1) return true; return false; is true
+PASS var k = 0; while (("a">"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">"b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a">="b") || 1; is true
+PASS if (("a">="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a">="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a">"b") && 1; is false
+PASS if (("a">"b") && 1) return true; return false; is false
+PASS var k = 0; while (("a">"b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">"b") && 1; ) if (k++) return true; return false; is false
+PASS return ("a">="b") && 1; is false
+PASS if (("a">="b") && 1) return true; return false; is false
+PASS var k = 0; while (("a">="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">="b") && 1; ) if (k++) return true; return false; is false
+PASS return ("a">"b") || 1; is true
+PASS if (("a">"b") || 1) return true; return false; is true
+PASS var k = 0; while (("a">"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">"b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a">="b") || 1; is true
+PASS if (("a">="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a">="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a">"b"); is true
+PASS if (1 || ("a">"b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a">"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">"b"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a">="b"); is true
+PASS if (1 || ("a">="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a">="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">="b"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a">"b"); is false
+PASS if (1 && ("a">"b")) return true; return false; is false
+PASS var k = 0; while (1 && ("a">"b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a">"b"); ) if (k++) return true; return false; is false
+PASS return 1 && ("a">="b"); is false
+PASS if (1 && ("a">="b")) return true; return false; is false
+PASS var k = 0; while (1 && ("a">="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a">="b"); ) if (k++) return true; return false; is false
+PASS return ("a">"a"); is false
+PASS if (("a">"a")) return true; return false; is false
+PASS var k = 0; while (("a">"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">"a"); ) if (k++) return true; return false; is false
+PASS return ("a">="a"); is true
+PASS if (("a">="a")) return true; return false; is true
+PASS var k = 0; while (("a">="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">="a"); ) if (k++) return true; return false; is true
+PASS return ("a">"a") || 1; is true
+PASS if (("a">"a") || 1) return true; return false; is true
+PASS var k = 0; while (("a">"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a">="a") || 1; is true
+PASS if (("a">="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a">="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a">"a") && 1; is false
+PASS if (("a">"a") && 1) return true; return false; is false
+PASS var k = 0; while (("a">"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">"a") && 1; ) if (k++) return true; return false; is false
+PASS return ("a">="a") && 1; is true
+PASS if (("a">="a") && 1) return true; return false; is true
+PASS var k = 0; while (("a">="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">="a") && 1; ) if (k++) return true; return false; is true
+PASS return ("a">"a") || 1; is true
+PASS if (("a">"a") || 1) return true; return false; is true
+PASS var k = 0; while (("a">"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a">="a") || 1; is true
+PASS if (("a">="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a">="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a">"a"); is true
+PASS if (1 || ("a">"a")) return true; return false; is true
+PASS var k = 0; while (1 || ("a">"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">"a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a">="a"); is true
+PASS if (1 || ("a">="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("a">="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a">"a"); is false
+PASS if (1 && ("a">"a")) return true; return false; is false
+PASS var k = 0; while (1 && ("a">"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a">"a"); ) if (k++) return true; return false; is false
+PASS return 1 && ("a">="a"); is true
+PASS if (1 && ("a">="a")) return true; return false; is true
+PASS var k = 0; while (1 && ("a">="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a">="a"); ) if (k++) return true; return false; is true
+PASS return ("b">"a"); is true
+PASS if (("b">"a")) return true; return false; is true
+PASS var k = 0; while (("b">"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">"a"); ) if (k++) return true; return false; is true
+PASS return ("b">="a"); is true
+PASS if (("b">="a")) return true; return false; is true
+PASS var k = 0; while (("b">="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">="a"); ) if (k++) return true; return false; is true
+PASS return ("b">"a") || 1; is true
+PASS if (("b">"a") || 1) return true; return false; is true
+PASS var k = 0; while (("b">"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b">="a") || 1; is true
+PASS if (("b">="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b">="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b">"a") && 1; is true
+PASS if (("b">"a") && 1) return true; return false; is true
+PASS var k = 0; while (("b">"a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">"a") && 1; ) if (k++) return true; return false; is true
+PASS return ("b">="a") && 1; is true
+PASS if (("b">="a") && 1) return true; return false; is true
+PASS var k = 0; while (("b">="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">="a") && 1; ) if (k++) return true; return false; is true
+PASS return ("b">"a") || 1; is true
+PASS if (("b">"a") || 1) return true; return false; is true
+PASS var k = 0; while (("b">"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b">="a") || 1; is true
+PASS if (("b">="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b">="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b">"a"); is true
+PASS if (1 || ("b">"a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b">"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b">"a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("b">="a"); is true
+PASS if (1 || ("b">="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b">="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b">="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("b">"a"); is true
+PASS if (1 && ("b">"a")) return true; return false; is true
+PASS var k = 0; while (1 && ("b">"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b">"a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("b">="a"); is true
+PASS if (1 && ("b">="a")) return true; return false; is true
+PASS var k = 0; while (1 && ("b">="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b">="a"); ) if (k++) return true; return false; is true
+PASS return (letterA>"b"); is false
+PASS if ((letterA>"b")) return true; return false; is false
+PASS var k = 0; while ((letterA>"b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>"b"); ) if (k++) return true; return false; is false
+PASS return (letterA>="b"); is false
+PASS if ((letterA>="b")) return true; return false; is false
+PASS var k = 0; while ((letterA>="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>="b"); ) if (k++) return true; return false; is false
+PASS return (letterA>"b") || 1; is true
+PASS if ((letterA>"b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>"b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>="b") || 1; is true
+PASS if ((letterA>="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>"b") && 1; is false
+PASS if ((letterA>"b") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA>"b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>"b") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA>="b") && 1; is false
+PASS if ((letterA>="b") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA>="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>="b") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA>"b") || 1; is true
+PASS if ((letterA>"b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>"b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>="b") || 1; is true
+PASS if ((letterA>="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>"b"); is true
+PASS if (1 || (letterA>"b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>"b"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>="b"); is true
+PASS if (1 || (letterA>="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>="b"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA>"b"); is false
+PASS if (1 && (letterA>"b")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA>"b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA>"b"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA>="b"); is false
+PASS if (1 && (letterA>="b")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA>="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA>="b"); ) if (k++) return true; return false; is false
+PASS return (letterA>"a"); is false
+PASS if ((letterA>"a")) return true; return false; is false
+PASS var k = 0; while ((letterA>"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>"a"); ) if (k++) return true; return false; is false
+PASS return (letterA>="a"); is true
+PASS if ((letterA>="a")) return true; return false; is true
+PASS var k = 0; while ((letterA>="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="a"); ) if (k++) return true; return false; is true
+PASS return (letterA>"a") || 1; is true
+PASS if ((letterA>"a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>"a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>="a") || 1; is true
+PASS if ((letterA>="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>"a") && 1; is false
+PASS if ((letterA>"a") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA>"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>"a") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA>="a") && 1; is true
+PASS if ((letterA>="a") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA>="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="a") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA>"a") || 1; is true
+PASS if ((letterA>"a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>"a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>="a") || 1; is true
+PASS if ((letterA>="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>"a"); is true
+PASS if (1 || (letterA>"a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>"a"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>="a"); is true
+PASS if (1 || (letterA>="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA>"a"); is false
+PASS if (1 && (letterA>"a")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA>"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA>"a"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA>="a"); is true
+PASS if (1 && (letterA>="a")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA>="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA>="a"); ) if (k++) return true; return false; is true
+PASS return ("b">"a"); is true
+PASS if (("b">"a")) return true; return false; is true
+PASS var k = 0; while (("b">"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">"a"); ) if (k++) return true; return false; is true
+PASS return ("b">="a"); is true
+PASS if (("b">="a")) return true; return false; is true
+PASS var k = 0; while (("b">="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">="a"); ) if (k++) return true; return false; is true
+PASS return ("b">"a") || 1; is true
+PASS if (("b">"a") || 1) return true; return false; is true
+PASS var k = 0; while (("b">"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b">="a") || 1; is true
+PASS if (("b">="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b">="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b">"a") && 1; is true
+PASS if (("b">"a") && 1) return true; return false; is true
+PASS var k = 0; while (("b">"a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">"a") && 1; ) if (k++) return true; return false; is true
+PASS return ("b">="a") && 1; is true
+PASS if (("b">="a") && 1) return true; return false; is true
+PASS var k = 0; while (("b">="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">="a") && 1; ) if (k++) return true; return false; is true
+PASS return ("b">"a") || 1; is true
+PASS if (("b">"a") || 1) return true; return false; is true
+PASS var k = 0; while (("b">"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b">="a") || 1; is true
+PASS if (("b">="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b">="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b">"a"); is true
+PASS if (1 || ("b">"a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b">"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b">"a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("b">="a"); is true
+PASS if (1 || ("b">="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b">="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b">="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("b">"a"); is true
+PASS if (1 && ("b">"a")) return true; return false; is true
+PASS var k = 0; while (1 && ("b">"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b">"a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("b">="a"); is true
+PASS if (1 && ("b">="a")) return true; return false; is true
+PASS var k = 0; while (1 && ("b">="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b">="a"); ) if (k++) return true; return false; is true
+PASS return (letterA>"b"); is false
+PASS if ((letterA>"b")) return true; return false; is false
+PASS var k = 0; while ((letterA>"b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>"b"); ) if (k++) return true; return false; is false
+PASS return (letterA>="b"); is false
+PASS if ((letterA>="b")) return true; return false; is false
+PASS var k = 0; while ((letterA>="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>="b"); ) if (k++) return true; return false; is false
+PASS return (letterA>"b") || 1; is true
+PASS if ((letterA>"b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>"b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>="b") || 1; is true
+PASS if ((letterA>="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>"b") && 1; is false
+PASS if ((letterA>"b") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA>"b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>"b") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA>="b") && 1; is false
+PASS if ((letterA>="b") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA>="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>="b") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA>"b") || 1; is true
+PASS if ((letterA>"b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>"b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>="b") || 1; is true
+PASS if ((letterA>="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>"b"); is true
+PASS if (1 || (letterA>"b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>"b"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>="b"); is true
+PASS if (1 || (letterA>="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>="b"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA>"b"); is false
+PASS if (1 && (letterA>"b")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA>"b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA>"b"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA>="b"); is false
+PASS if (1 && (letterA>="b")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA>="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA>="b"); ) if (k++) return true; return false; is false
+PASS return (letterA>letterA); is false
+PASS if ((letterA>letterA)) return true; return false; is false
+PASS var k = 0; while ((letterA>letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>letterA); ) if (k++) return true; return false; is false
+PASS return (letterA>=letterA); is true
+PASS if ((letterA>=letterA)) return true; return false; is true
+PASS var k = 0; while ((letterA>=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>=letterA); ) if (k++) return true; return false; is true
+PASS return (letterA>letterA) || 1; is true
+PASS if ((letterA>letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>=letterA) || 1; is true
+PASS if ((letterA>=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>letterA) && 1; is false
+PASS if ((letterA>letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA>letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA>=letterA) && 1; is true
+PASS if ((letterA>=letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((letterA>=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (letterA>letterA) || 1; is true
+PASS if ((letterA>letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>=letterA) || 1; is true
+PASS if ((letterA>=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>letterA); is true
+PASS if (1 || (letterA>letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>=letterA); is true
+PASS if (1 || (letterA>=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA>letterA); is false
+PASS if (1 && (letterA>letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA>letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA>letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA>=letterA); is true
+PASS if (1 && (letterA>=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (letterA>=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA>=letterA); ) if (k++) return true; return false; is true
+PASS return ("b">letterA); is true
+PASS if (("b">letterA)) return true; return false; is true
+PASS var k = 0; while (("b">letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">letterA); ) if (k++) return true; return false; is true
+PASS return ("b">=letterA); is true
+PASS if (("b">=letterA)) return true; return false; is true
+PASS var k = 0; while (("b">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">=letterA); ) if (k++) return true; return false; is true
+PASS return ("b">letterA) || 1; is true
+PASS if (("b">letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b">letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b">=letterA) || 1; is true
+PASS if (("b">=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b">=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b">letterA) && 1; is true
+PASS if (("b">letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("b">letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("b">=letterA) && 1; is true
+PASS if (("b">=letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("b">=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("b">letterA) || 1; is true
+PASS if (("b">letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b">letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b">=letterA) || 1; is true
+PASS if (("b">=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b">=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b">letterA); is true
+PASS if (1 || ("b">letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b">letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b">letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("b">=letterA); is true
+PASS if (1 || ("b">=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b">=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("b">letterA); is true
+PASS if (1 && ("b">letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("b">letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b">letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("b">=letterA); is true
+PASS if (1 && ("b">=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("b">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b">=letterA); ) if (k++) return true; return false; is true
+PASS return ("a">"b"); is false
+PASS if (("a">"b")) return true; return false; is false
+PASS var k = 0; while (("a">"b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">"b"); ) if (k++) return true; return false; is false
+PASS return ("a">="b"); is false
+PASS if (("a">="b")) return true; return false; is false
+PASS var k = 0; while (("a">="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">="b"); ) if (k++) return true; return false; is false
+PASS return ("a">"b") || 1; is true
+PASS if (("a">"b") || 1) return true; return false; is true
+PASS var k = 0; while (("a">"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">"b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a">="b") || 1; is true
+PASS if (("a">="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a">="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a">"b") && 1; is false
+PASS if (("a">"b") && 1) return true; return false; is false
+PASS var k = 0; while (("a">"b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">"b") && 1; ) if (k++) return true; return false; is false
+PASS return ("a">="b") && 1; is false
+PASS if (("a">="b") && 1) return true; return false; is false
+PASS var k = 0; while (("a">="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">="b") && 1; ) if (k++) return true; return false; is false
+PASS return ("a">"b") || 1; is true
+PASS if (("a">"b") || 1) return true; return false; is true
+PASS var k = 0; while (("a">"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">"b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a">="b") || 1; is true
+PASS if (("a">="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a">="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a">"b"); is true
+PASS if (1 || ("a">"b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a">"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">"b"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a">="b"); is true
+PASS if (1 || ("a">="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a">="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">="b"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a">"b"); is false
+PASS if (1 && ("a">"b")) return true; return false; is false
+PASS var k = 0; while (1 && ("a">"b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a">"b"); ) if (k++) return true; return false; is false
+PASS return 1 && ("a">="b"); is false
+PASS if (1 && ("a">="b")) return true; return false; is false
+PASS var k = 0; while (1 && ("a">="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a">="b"); ) if (k++) return true; return false; is false
+PASS return ("a">letterA); is false
+PASS if (("a">letterA)) return true; return false; is false
+PASS var k = 0; while (("a">letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">letterA); ) if (k++) return true; return false; is false
+PASS return ("a">=letterA); is true
+PASS if (("a">=letterA)) return true; return false; is true
+PASS var k = 0; while (("a">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">=letterA); ) if (k++) return true; return false; is true
+PASS return ("a">letterA) || 1; is true
+PASS if (("a">letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a">letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a">=letterA) || 1; is true
+PASS if (("a">=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a">=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a">letterA) && 1; is false
+PASS if (("a">letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("a">letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("a">=letterA) && 1; is true
+PASS if (("a">=letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("a">=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("a">letterA) || 1; is true
+PASS if (("a">letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a">letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a">=letterA) || 1; is true
+PASS if (("a">=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a">=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a">letterA); is true
+PASS if (1 || ("a">letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a">letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("a">=letterA); is true
+PASS if (1 || ("a">=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("a">letterA); is false
+PASS if (1 && ("a">letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("a">letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a">letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("a">=letterA); is true
+PASS if (1 && ("a">=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("a">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a">=letterA); ) if (k++) return true; return false; is true
+PASS return ("b">letterA); is true
+PASS if (("b">letterA)) return true; return false; is true
+PASS var k = 0; while (("b">letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">letterA); ) if (k++) return true; return false; is true
+PASS return ("b">=letterA); is true
+PASS if (("b">=letterA)) return true; return false; is true
+PASS var k = 0; while (("b">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">=letterA); ) if (k++) return true; return false; is true
+PASS return ("b">letterA) || 1; is true
+PASS if (("b">letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b">letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b">=letterA) || 1; is true
+PASS if (("b">=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b">=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b">letterA) && 1; is true
+PASS if (("b">letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("b">letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("b">=letterA) && 1; is true
+PASS if (("b">=letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("b">=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("b">letterA) || 1; is true
+PASS if (("b">letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b">letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b">=letterA) || 1; is true
+PASS if (("b">=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b">=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b">letterA); is true
+PASS if (1 || ("b">letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b">letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b">letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("b">=letterA); is true
+PASS if (1 || ("b">=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b">=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("b">letterA); is true
+PASS if (1 && ("b">letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("b">letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b">letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("b">=letterA); is true
+PASS if (1 && ("b">=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("b">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b">=letterA); ) if (k++) return true; return false; is true
+PASS return ("a">0); is false
+PASS if (("a">0)) return true; return false; is false
+PASS var k = 0; while (("a">0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">0); ) if (k++) return true; return false; is false
+PASS return ("a">=0); is false
+PASS if (("a">=0)) return true; return false; is false
+PASS var k = 0; while (("a">=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">=0); ) if (k++) return true; return false; is false
+PASS return ("a">0) || 1; is true
+PASS if (("a">0) || 1) return true; return false; is true
+PASS var k = 0; while (("a">0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a">=0) || 1; is true
+PASS if (("a">=0) || 1) return true; return false; is true
+PASS var k = 0; while (("a">=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">=0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a">0) && 1; is false
+PASS if (("a">0) && 1) return true; return false; is false
+PASS var k = 0; while (("a">0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">0) && 1; ) if (k++) return true; return false; is false
+PASS return ("a">=0) && 1; is false
+PASS if (("a">=0) && 1) return true; return false; is false
+PASS var k = 0; while (("a">=0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">=0) && 1; ) if (k++) return true; return false; is false
+PASS return ("a">0) || 1; is true
+PASS if (("a">0) || 1) return true; return false; is true
+PASS var k = 0; while (("a">0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a">=0) || 1; is true
+PASS if (("a">=0) || 1) return true; return false; is true
+PASS var k = 0; while (("a">=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a">0); is true
+PASS if (1 || ("a">0)) return true; return false; is true
+PASS var k = 0; while (1 || ("a">0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">0); ) if (k++) return true; return false; is true
+PASS return 1 || ("a">=0); is true
+PASS if (1 || ("a">=0)) return true; return false; is true
+PASS var k = 0; while (1 || ("a">=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">=0); ) if (k++) return true; return false; is true
+PASS return 1 && ("a">0); is false
+PASS if (1 && ("a">0)) return true; return false; is false
+PASS var k = 0; while (1 && ("a">0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a">0); ) if (k++) return true; return false; is false
+PASS return 1 && ("a">=0); is false
+PASS if (1 && ("a">=0)) return true; return false; is false
+PASS var k = 0; while (1 && ("a">=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a">=0); ) if (k++) return true; return false; is false
+PASS return (0>"a"); is false
+PASS if ((0>"a")) return true; return false; is false
+PASS var k = 0; while ((0>"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>"a"); ) if (k++) return true; return false; is false
+PASS return (0>="a"); is false
+PASS if ((0>="a")) return true; return false; is false
+PASS var k = 0; while ((0>="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>="a"); ) if (k++) return true; return false; is false
+PASS return (0>"a") || 1; is true
+PASS if ((0>"a") || 1) return true; return false; is true
+PASS var k = 0; while ((0>"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"a") || 1; ) if (k++) return true; return false; is true
+PASS return (0>="a") || 1; is true
+PASS if ((0>="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0>="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0>"a") && 1; is false
+PASS if ((0>"a") && 1) return true; return false; is false
+PASS var k = 0; while ((0>"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>"a") && 1; ) if (k++) return true; return false; is false
+PASS return (0>="a") && 1; is false
+PASS if ((0>="a") && 1) return true; return false; is false
+PASS var k = 0; while ((0>="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>="a") && 1; ) if (k++) return true; return false; is false
+PASS return (0>"a") || 1; is true
+PASS if ((0>"a") || 1) return true; return false; is true
+PASS var k = 0; while ((0>"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"a") || 1; ) if (k++) return true; return false; is true
+PASS return (0>="a") || 1; is true
+PASS if ((0>="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0>="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>"a"); is true
+PASS if (1 || (0>"a")) return true; return false; is true
+PASS var k = 0; while (1 || (0>"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>"a"); ) if (k++) return true; return false; is true
+PASS return 1 || (0>="a"); is true
+PASS if (1 || (0>="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0>="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (0>"a"); is false
+PASS if (1 && (0>"a")) return true; return false; is false
+PASS var k = 0; while (1 && (0>"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>"a"); ) if (k++) return true; return false; is false
+PASS return 1 && (0>="a"); is false
+PASS if (1 && (0>="a")) return true; return false; is false
+PASS var k = 0; while (1 && (0>="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>="a"); ) if (k++) return true; return false; is false
+PASS return (0>"0"); is false
+PASS if ((0>"0")) return true; return false; is false
+PASS var k = 0; while ((0>"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>"0"); ) if (k++) return true; return false; is false
+PASS return (0>="0"); is true
+PASS if ((0>="0")) return true; return false; is true
+PASS var k = 0; while ((0>="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="0"); ) if (k++) return true; return false; is true
+PASS return (0>"0") || 1; is true
+PASS if ((0>"0") || 1) return true; return false; is true
+PASS var k = 0; while ((0>"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"0") || 1; ) if (k++) return true; return false; is true
+PASS return (0>="0") || 1; is true
+PASS if ((0>="0") || 1) return true; return false; is true
+PASS var k = 0; while ((0>="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="0") || 1; ) if (k++) return true; return false; is true
+PASS return (0>"0") && 1; is false
+PASS if ((0>"0") && 1) return true; return false; is false
+PASS var k = 0; while ((0>"0") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>"0") && 1; ) if (k++) return true; return false; is false
+PASS return (0>="0") && 1; is true
+PASS if ((0>="0") && 1) return true; return false; is true
+PASS var k = 0; while ((0>="0") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="0") && 1; ) if (k++) return true; return false; is true
+PASS return (0>"0") || 1; is true
+PASS if ((0>"0") || 1) return true; return false; is true
+PASS var k = 0; while ((0>"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"0") || 1; ) if (k++) return true; return false; is true
+PASS return (0>="0") || 1; is true
+PASS if ((0>="0") || 1) return true; return false; is true
+PASS var k = 0; while ((0>="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="0") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>"0"); is true
+PASS if (1 || (0>"0")) return true; return false; is true
+PASS var k = 0; while (1 || (0>"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>"0"); ) if (k++) return true; return false; is true
+PASS return 1 || (0>="0"); is true
+PASS if (1 || (0>="0")) return true; return false; is true
+PASS var k = 0; while (1 || (0>="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>="0"); ) if (k++) return true; return false; is true
+PASS return 1 && (0>"0"); is false
+PASS if (1 && (0>"0")) return true; return false; is false
+PASS var k = 0; while (1 && (0>"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>"0"); ) if (k++) return true; return false; is false
+PASS return 1 && (0>="0"); is true
+PASS if (1 && (0>="0")) return true; return false; is true
+PASS var k = 0; while (1 && (0>="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0>="0"); ) if (k++) return true; return false; is true
+PASS return (Zero>letter0); is false
+PASS if ((Zero>letter0)) return true; return false; is false
+PASS var k = 0; while ((Zero>letter0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero>letter0); ) if (k++) return true; return false; is false
+PASS return (Zero>=letter0); is true
+PASS if ((Zero>=letter0)) return true; return false; is true
+PASS var k = 0; while ((Zero>=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>=letter0); ) if (k++) return true; return false; is true
+PASS return (Zero>letter0) || 1; is true
+PASS if ((Zero>letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>=letter0) || 1; is true
+PASS if ((Zero>=letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>=letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>=letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>letter0) && 1; is false
+PASS if ((Zero>letter0) && 1) return true; return false; is false
+PASS var k = 0; while ((Zero>letter0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero>letter0) && 1; ) if (k++) return true; return false; is false
+PASS return (Zero>=letter0) && 1; is true
+PASS if ((Zero>=letter0) && 1) return true; return false; is true
+PASS var k = 0; while ((Zero>=letter0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>=letter0) && 1; ) if (k++) return true; return false; is true
+PASS return (Zero>letter0) || 1; is true
+PASS if ((Zero>letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>=letter0) || 1; is true
+PASS if ((Zero>=letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>=letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>=letter0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (Zero>letter0); is true
+PASS if (1 || (Zero>letter0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero>letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero>letter0); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero>=letter0); is true
+PASS if (1 || (Zero>=letter0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero>=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero>=letter0); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero>letter0); is false
+PASS if (1 && (Zero>letter0)) return true; return false; is false
+PASS var k = 0; while (1 && (Zero>letter0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero>letter0); ) if (k++) return true; return false; is false
+PASS return 1 && (Zero>=letter0); is true
+PASS if (1 && (Zero>=letter0)) return true; return false; is true
+PASS var k = 0; while (1 && (Zero>=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero>=letter0); ) if (k++) return true; return false; is true
+PASS return (0>letter0); is false
+PASS if ((0>letter0)) return true; return false; is false
+PASS var k = 0; while ((0>letter0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>letter0); ) if (k++) return true; return false; is false
+PASS return (0>=letter0); is true
+PASS if ((0>=letter0)) return true; return false; is true
+PASS var k = 0; while ((0>=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=letter0); ) if (k++) return true; return false; is true
+PASS return (0>letter0) || 1; is true
+PASS if ((0>letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((0>letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=letter0) || 1; is true
+PASS if ((0>=letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (0>letter0) && 1; is false
+PASS if ((0>letter0) && 1) return true; return false; is false
+PASS var k = 0; while ((0>letter0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>letter0) && 1; ) if (k++) return true; return false; is false
+PASS return (0>=letter0) && 1; is true
+PASS if ((0>=letter0) && 1) return true; return false; is true
+PASS var k = 0; while ((0>=letter0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=letter0) && 1; ) if (k++) return true; return false; is true
+PASS return (0>letter0) || 1; is true
+PASS if ((0>letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((0>letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=letter0) || 1; is true
+PASS if ((0>=letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=letter0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>letter0); is true
+PASS if (1 || (0>letter0)) return true; return false; is true
+PASS var k = 0; while (1 || (0>letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>letter0); ) if (k++) return true; return false; is true
+PASS return 1 || (0>=letter0); is true
+PASS if (1 || (0>=letter0)) return true; return false; is true
+PASS var k = 0; while (1 || (0>=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>=letter0); ) if (k++) return true; return false; is true
+PASS return 1 && (0>letter0); is false
+PASS if (1 && (0>letter0)) return true; return false; is false
+PASS var k = 0; while (1 && (0>letter0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>letter0); ) if (k++) return true; return false; is false
+PASS return 1 && (0>=letter0); is true
+PASS if (1 && (0>=letter0)) return true; return false; is true
+PASS var k = 0; while (1 && (0>=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0>=letter0); ) if (k++) return true; return false; is true
+PASS return (Zero>"0"); is false
+PASS if ((Zero>"0")) return true; return false; is false
+PASS var k = 0; while ((Zero>"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero>"0"); ) if (k++) return true; return false; is false
+PASS return (Zero>="0"); is true
+PASS if ((Zero>="0")) return true; return false; is true
+PASS var k = 0; while ((Zero>="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>="0"); ) if (k++) return true; return false; is true
+PASS return (Zero>"0") || 1; is true
+PASS if ((Zero>"0") || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>"0") || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>="0") || 1; is true
+PASS if ((Zero>="0") || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>="0") || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>"0") && 1; is false
+PASS if ((Zero>"0") && 1) return true; return false; is false
+PASS var k = 0; while ((Zero>"0") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero>"0") && 1; ) if (k++) return true; return false; is false
+PASS return (Zero>="0") && 1; is true
+PASS if ((Zero>="0") && 1) return true; return false; is true
+PASS var k = 0; while ((Zero>="0") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>="0") && 1; ) if (k++) return true; return false; is true
+PASS return (Zero>"0") || 1; is true
+PASS if ((Zero>"0") || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>"0") || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>="0") || 1; is true
+PASS if ((Zero>="0") || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>="0") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (Zero>"0"); is true
+PASS if (1 || (Zero>"0")) return true; return false; is true
+PASS var k = 0; while (1 || (Zero>"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero>"0"); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero>="0"); is true
+PASS if (1 || (Zero>="0")) return true; return false; is true
+PASS var k = 0; while (1 || (Zero>="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero>="0"); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero>"0"); is false
+PASS if (1 && (Zero>"0")) return true; return false; is false
+PASS var k = 0; while (1 && (Zero>"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero>"0"); ) if (k++) return true; return false; is false
+PASS return 1 && (Zero>="0"); is true
+PASS if (1 && (Zero>="0")) return true; return false; is true
+PASS var k = 0; while (1 && (Zero>="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero>="0"); ) if (k++) return true; return false; is true
+PASS return (-1>"0"); is false
+PASS if ((-1>"0")) return true; return false; is false
+PASS var k = 0; while ((-1>"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (-1>"0"); ) if (k++) return true; return false; is false
+PASS return (-1>="0"); is false
+PASS if ((-1>="0")) return true; return false; is false
+PASS var k = 0; while ((-1>="0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (-1>="0"); ) if (k++) return true; return false; is false
+PASS return (-1>"0") || 1; is true
+PASS if ((-1>"0") || 1) return true; return false; is true
+PASS var k = 0; while ((-1>"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1>"0") || 1; ) if (k++) return true; return false; is true
+PASS return (-1>="0") || 1; is true
+PASS if ((-1>="0") || 1) return true; return false; is true
+PASS var k = 0; while ((-1>="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1>="0") || 1; ) if (k++) return true; return false; is true
+PASS return (-1>"0") && 1; is false
+PASS if ((-1>"0") && 1) return true; return false; is false
+PASS var k = 0; while ((-1>"0") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (-1>"0") && 1; ) if (k++) return true; return false; is false
+PASS return (-1>="0") && 1; is false
+PASS if ((-1>="0") && 1) return true; return false; is false
+PASS var k = 0; while ((-1>="0") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (-1>="0") && 1; ) if (k++) return true; return false; is false
+PASS return (-1>"0") || 1; is true
+PASS if ((-1>"0") || 1) return true; return false; is true
+PASS var k = 0; while ((-1>"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1>"0") || 1; ) if (k++) return true; return false; is true
+PASS return (-1>="0") || 1; is true
+PASS if ((-1>="0") || 1) return true; return false; is true
+PASS var k = 0; while ((-1>="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1>="0") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (-1>"0"); is true
+PASS if (1 || (-1>"0")) return true; return false; is true
+PASS var k = 0; while (1 || (-1>"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (-1>"0"); ) if (k++) return true; return false; is true
+PASS return 1 || (-1>="0"); is true
+PASS if (1 || (-1>="0")) return true; return false; is true
+PASS var k = 0; while (1 || (-1>="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (-1>="0"); ) if (k++) return true; return false; is true
+PASS return 1 && (-1>"0"); is false
+PASS if (1 && (-1>"0")) return true; return false; is false
+PASS var k = 0; while (1 && (-1>"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (-1>"0"); ) if (k++) return true; return false; is false
+PASS return 1 && (-1>="0"); is false
+PASS if (1 && (-1>="0")) return true; return false; is false
+PASS var k = 0; while (1 && (-1>="0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (-1>="0"); ) if (k++) return true; return false; is false
+PASS return (1>"0"); is true
+PASS if ((1>"0")) return true; return false; is true
+PASS var k = 0; while ((1>"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>"0"); ) if (k++) return true; return false; is true
+PASS return (1>="0"); is true
+PASS if ((1>="0")) return true; return false; is true
+PASS var k = 0; while ((1>="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>="0"); ) if (k++) return true; return false; is true
+PASS return (1>"0") || 1; is true
+PASS if ((1>"0") || 1) return true; return false; is true
+PASS var k = 0; while ((1>"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>"0") || 1; ) if (k++) return true; return false; is true
+PASS return (1>="0") || 1; is true
+PASS if ((1>="0") || 1) return true; return false; is true
+PASS var k = 0; while ((1>="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>="0") || 1; ) if (k++) return true; return false; is true
+PASS return (1>"0") && 1; is true
+PASS if ((1>"0") && 1) return true; return false; is true
+PASS var k = 0; while ((1>"0") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>"0") && 1; ) if (k++) return true; return false; is true
+PASS return (1>="0") && 1; is true
+PASS if ((1>="0") && 1) return true; return false; is true
+PASS var k = 0; while ((1>="0") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>="0") && 1; ) if (k++) return true; return false; is true
+PASS return (1>"0") || 1; is true
+PASS if ((1>"0") || 1) return true; return false; is true
+PASS var k = 0; while ((1>"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>"0") || 1; ) if (k++) return true; return false; is true
+PASS return (1>="0") || 1; is true
+PASS if ((1>="0") || 1) return true; return false; is true
+PASS var k = 0; while ((1>="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>="0") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (1>"0"); is true
+PASS if (1 || (1>"0")) return true; return false; is true
+PASS var k = 0; while (1 || (1>"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1>"0"); ) if (k++) return true; return false; is true
+PASS return 1 || (1>="0"); is true
+PASS if (1 || (1>="0")) return true; return false; is true
+PASS var k = 0; while (1 || (1>="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1>="0"); ) if (k++) return true; return false; is true
+PASS return 1 && (1>"0"); is true
+PASS if (1 && (1>"0")) return true; return false; is true
+PASS var k = 0; while (1 && (1>"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (1>"0"); ) if (k++) return true; return false; is true
+PASS return 1 && (1>="0"); is true
+PASS if (1 && (1>="0")) return true; return false; is true
+PASS var k = 0; while (1 && (1>="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (1>="0"); ) if (k++) return true; return false; is true
+PASS return (0>"-1"); is true
+PASS if ((0>"-1")) return true; return false; is true
+PASS var k = 0; while ((0>"-1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"-1"); ) if (k++) return true; return false; is true
+PASS return (0>="-1"); is true
+PASS if ((0>="-1")) return true; return false; is true
+PASS var k = 0; while ((0>="-1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="-1"); ) if (k++) return true; return false; is true
+PASS return (0>"-1") || 1; is true
+PASS if ((0>"-1") || 1) return true; return false; is true
+PASS var k = 0; while ((0>"-1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"-1") || 1; ) if (k++) return true; return false; is true
+PASS return (0>="-1") || 1; is true
+PASS if ((0>="-1") || 1) return true; return false; is true
+PASS var k = 0; while ((0>="-1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="-1") || 1; ) if (k++) return true; return false; is true
+PASS return (0>"-1") && 1; is true
+PASS if ((0>"-1") && 1) return true; return false; is true
+PASS var k = 0; while ((0>"-1") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"-1") && 1; ) if (k++) return true; return false; is true
+PASS return (0>="-1") && 1; is true
+PASS if ((0>="-1") && 1) return true; return false; is true
+PASS var k = 0; while ((0>="-1") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="-1") && 1; ) if (k++) return true; return false; is true
+PASS return (0>"-1") || 1; is true
+PASS if ((0>"-1") || 1) return true; return false; is true
+PASS var k = 0; while ((0>"-1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"-1") || 1; ) if (k++) return true; return false; is true
+PASS return (0>="-1") || 1; is true
+PASS if ((0>="-1") || 1) return true; return false; is true
+PASS var k = 0; while ((0>="-1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="-1") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>"-1"); is true
+PASS if (1 || (0>"-1")) return true; return false; is true
+PASS var k = 0; while (1 || (0>"-1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>"-1"); ) if (k++) return true; return false; is true
+PASS return 1 || (0>="-1"); is true
+PASS if (1 || (0>="-1")) return true; return false; is true
+PASS var k = 0; while (1 || (0>="-1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>="-1"); ) if (k++) return true; return false; is true
+PASS return 1 && (0>"-1"); is true
+PASS if (1 && (0>"-1")) return true; return false; is true
+PASS var k = 0; while (1 && (0>"-1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0>"-1"); ) if (k++) return true; return false; is true
+PASS return 1 && (0>="-1"); is true
+PASS if (1 && (0>="-1")) return true; return false; is true
+PASS var k = 0; while (1 && (0>="-1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0>="-1"); ) if (k++) return true; return false; is true
+PASS return (0>"1"); is false
+PASS if ((0>"1")) return true; return false; is false
+PASS var k = 0; while ((0>"1")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>"1"); ) if (k++) return true; return false; is false
+PASS return (0>="1"); is false
+PASS if ((0>="1")) return true; return false; is false
+PASS var k = 0; while ((0>="1")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>="1"); ) if (k++) return true; return false; is false
+PASS return (0>"1") || 1; is true
+PASS if ((0>"1") || 1) return true; return false; is true
+PASS var k = 0; while ((0>"1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"1") || 1; ) if (k++) return true; return false; is true
+PASS return (0>="1") || 1; is true
+PASS if ((0>="1") || 1) return true; return false; is true
+PASS var k = 0; while ((0>="1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="1") || 1; ) if (k++) return true; return false; is true
+PASS return (0>"1") && 1; is false
+PASS if ((0>"1") && 1) return true; return false; is false
+PASS var k = 0; while ((0>"1") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>"1") && 1; ) if (k++) return true; return false; is false
+PASS return (0>="1") && 1; is false
+PASS if ((0>="1") && 1) return true; return false; is false
+PASS var k = 0; while ((0>="1") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>="1") && 1; ) if (k++) return true; return false; is false
+PASS return (0>"1") || 1; is true
+PASS if ((0>"1") || 1) return true; return false; is true
+PASS var k = 0; while ((0>"1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"1") || 1; ) if (k++) return true; return false; is true
+PASS return (0>="1") || 1; is true
+PASS if ((0>="1") || 1) return true; return false; is true
+PASS var k = 0; while ((0>="1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="1") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>"1"); is true
+PASS if (1 || (0>"1")) return true; return false; is true
+PASS var k = 0; while (1 || (0>"1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>"1"); ) if (k++) return true; return false; is true
+PASS return 1 || (0>="1"); is true
+PASS if (1 || (0>="1")) return true; return false; is true
+PASS var k = 0; while (1 || (0>="1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>="1"); ) if (k++) return true; return false; is true
+PASS return 1 && (0>"1"); is false
+PASS if (1 && (0>"1")) return true; return false; is false
+PASS var k = 0; while (1 && (0>"1")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>"1"); ) if (k++) return true; return false; is false
+PASS return 1 && (0>="1"); is false
+PASS if (1 && (0>="1")) return true; return false; is false
+PASS var k = 0; while (1 && (0>="1")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>="1"); ) if (k++) return true; return false; is false
+PASS return (letterA>0); is false
+PASS if ((letterA>0)) return true; return false; is false
+PASS var k = 0; while ((letterA>0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>0); ) if (k++) return true; return false; is false
+PASS return (letterA>=0); is false
+PASS if ((letterA>=0)) return true; return false; is false
+PASS var k = 0; while ((letterA>=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>=0); ) if (k++) return true; return false; is false
+PASS return (letterA>0) || 1; is true
+PASS if ((letterA>0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>=0) || 1; is true
+PASS if ((letterA>=0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>=0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>0) && 1; is false
+PASS if ((letterA>0) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA>0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>0) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA>=0) && 1; is false
+PASS if ((letterA>=0) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA>=0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>=0) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA>0) || 1; is true
+PASS if ((letterA>0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>=0) || 1; is true
+PASS if ((letterA>=0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>0); is true
+PASS if (1 || (letterA>0)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>0); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>=0); is true
+PASS if (1 || (letterA>=0)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>=0); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA>0); is false
+PASS if (1 && (letterA>0)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA>0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA>0); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA>=0); is false
+PASS if (1 && (letterA>=0)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA>=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA>=0); ) if (k++) return true; return false; is false
+PASS return (letterA>"a"); is false
+PASS if ((letterA>"a")) return true; return false; is false
+PASS var k = 0; while ((letterA>"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>"a"); ) if (k++) return true; return false; is false
+PASS return (letterA>="a"); is true
+PASS if ((letterA>="a")) return true; return false; is true
+PASS var k = 0; while ((letterA>="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="a"); ) if (k++) return true; return false; is true
+PASS return (letterA>"a") || 1; is true
+PASS if ((letterA>"a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>"a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>="a") || 1; is true
+PASS if ((letterA>="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>"a") && 1; is false
+PASS if ((letterA>"a") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA>"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>"a") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA>="a") && 1; is true
+PASS if ((letterA>="a") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA>="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="a") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA>"a") || 1; is true
+PASS if ((letterA>"a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>"a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>="a") || 1; is true
+PASS if ((letterA>="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>"a"); is true
+PASS if (1 || (letterA>"a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>"a"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>="a"); is true
+PASS if (1 || (letterA>="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA>"a"); is false
+PASS if (1 && (letterA>"a")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA>"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA>"a"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA>="a"); is true
+PASS if (1 && (letterA>="a")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA>="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA>="a"); ) if (k++) return true; return false; is true
+PASS return (0>"a"); is false
+PASS if ((0>"a")) return true; return false; is false
+PASS var k = 0; while ((0>"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>"a"); ) if (k++) return true; return false; is false
+PASS return (0>="a"); is false
+PASS if ((0>="a")) return true; return false; is false
+PASS var k = 0; while ((0>="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>="a"); ) if (k++) return true; return false; is false
+PASS return (0>"a") || 1; is true
+PASS if ((0>"a") || 1) return true; return false; is true
+PASS var k = 0; while ((0>"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"a") || 1; ) if (k++) return true; return false; is true
+PASS return (0>="a") || 1; is true
+PASS if ((0>="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0>="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0>"a") && 1; is false
+PASS if ((0>"a") && 1) return true; return false; is false
+PASS var k = 0; while ((0>"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>"a") && 1; ) if (k++) return true; return false; is false
+PASS return (0>="a") && 1; is false
+PASS if ((0>="a") && 1) return true; return false; is false
+PASS var k = 0; while ((0>="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>="a") && 1; ) if (k++) return true; return false; is false
+PASS return (0>"a") || 1; is true
+PASS if ((0>"a") || 1) return true; return false; is true
+PASS var k = 0; while ((0>"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"a") || 1; ) if (k++) return true; return false; is true
+PASS return (0>="a") || 1; is true
+PASS if ((0>="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0>="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>"a"); is true
+PASS if (1 || (0>"a")) return true; return false; is true
+PASS var k = 0; while (1 || (0>"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>"a"); ) if (k++) return true; return false; is true
+PASS return 1 || (0>="a"); is true
+PASS if (1 || (0>="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0>="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (0>"a"); is false
+PASS if (1 && (0>"a")) return true; return false; is false
+PASS var k = 0; while (1 && (0>"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>"a"); ) if (k++) return true; return false; is false
+PASS return 1 && (0>="a"); is false
+PASS if (1 && (0>="a")) return true; return false; is false
+PASS var k = 0; while (1 && (0>="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>="a"); ) if (k++) return true; return false; is false
+PASS return (letterA>letterA); is false
+PASS if ((letterA>letterA)) return true; return false; is false
+PASS var k = 0; while ((letterA>letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>letterA); ) if (k++) return true; return false; is false
+PASS return (letterA>=letterA); is true
+PASS if ((letterA>=letterA)) return true; return false; is true
+PASS var k = 0; while ((letterA>=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>=letterA); ) if (k++) return true; return false; is true
+PASS return (letterA>letterA) || 1; is true
+PASS if ((letterA>letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>=letterA) || 1; is true
+PASS if ((letterA>=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>letterA) && 1; is false
+PASS if ((letterA>letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA>letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA>=letterA) && 1; is true
+PASS if ((letterA>=letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((letterA>=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (letterA>letterA) || 1; is true
+PASS if ((letterA>letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>=letterA) || 1; is true
+PASS if ((letterA>=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>letterA); is true
+PASS if (1 || (letterA>letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>=letterA); is true
+PASS if (1 || (letterA>=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA>letterA); is false
+PASS if (1 && (letterA>letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA>letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA>letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA>=letterA); is true
+PASS if (1 && (letterA>=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (letterA>=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA>=letterA); ) if (k++) return true; return false; is true
+PASS return (0>letterA); is false
+PASS if ((0>letterA)) return true; return false; is false
+PASS var k = 0; while ((0>letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>letterA); ) if (k++) return true; return false; is false
+PASS return (0>=letterA); is false
+PASS if ((0>=letterA)) return true; return false; is false
+PASS var k = 0; while ((0>=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>=letterA); ) if (k++) return true; return false; is false
+PASS return (0>letterA) || 1; is true
+PASS if ((0>letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0>letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=letterA) || 1; is true
+PASS if ((0>=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0>letterA) && 1; is false
+PASS if ((0>letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0>letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0>=letterA) && 1; is false
+PASS if ((0>=letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0>=letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>=letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0>letterA) || 1; is true
+PASS if ((0>letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0>letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=letterA) || 1; is true
+PASS if ((0>=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>letterA); is true
+PASS if (1 || (0>letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0>letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (0>=letterA); is true
+PASS if (1 || (0>=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0>=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (0>letterA); is false
+PASS if (1 && (0>letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0>letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (0>=letterA); is false
+PASS if (1 && (0>=letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0>=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>=letterA); ) if (k++) return true; return false; is false
+PASS return ("a">letterA); is false
+PASS if (("a">letterA)) return true; return false; is false
+PASS var k = 0; while (("a">letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">letterA); ) if (k++) return true; return false; is false
+PASS return ("a">=letterA); is true
+PASS if (("a">=letterA)) return true; return false; is true
+PASS var k = 0; while (("a">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">=letterA); ) if (k++) return true; return false; is true
+PASS return ("a">letterA) || 1; is true
+PASS if (("a">letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a">letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a">=letterA) || 1; is true
+PASS if (("a">=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a">=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a">letterA) && 1; is false
+PASS if (("a">letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("a">letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("a">=letterA) && 1; is true
+PASS if (("a">=letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("a">=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("a">letterA) || 1; is true
+PASS if (("a">letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a">letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a">=letterA) || 1; is true
+PASS if (("a">=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a">=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a">letterA); is true
+PASS if (1 || ("a">letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a">letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("a">=letterA); is true
+PASS if (1 || ("a">=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("a">letterA); is false
+PASS if (1 && ("a">letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("a">letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a">letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("a">=letterA); is true
+PASS if (1 && ("a">=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("a">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a">=letterA); ) if (k++) return true; return false; is true
+PASS return (0>letterA); is false
+PASS if ((0>letterA)) return true; return false; is false
+PASS var k = 0; while ((0>letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>letterA); ) if (k++) return true; return false; is false
+PASS return (0>=letterA); is false
+PASS if ((0>=letterA)) return true; return false; is false
+PASS var k = 0; while ((0>=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>=letterA); ) if (k++) return true; return false; is false
+PASS return (0>letterA) || 1; is true
+PASS if ((0>letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0>letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=letterA) || 1; is true
+PASS if ((0>=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0>letterA) && 1; is false
+PASS if ((0>letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0>letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0>=letterA) && 1; is false
+PASS if ((0>=letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0>=letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>=letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0>letterA) || 1; is true
+PASS if ((0>letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0>letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=letterA) || 1; is true
+PASS if ((0>=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>letterA); is true
+PASS if (1 || (0>letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0>letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (0>=letterA); is true
+PASS if (1 || (0>=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0>=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (0>letterA); is false
+PASS if (1 && (0>letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0>letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (0>=letterA); is false
+PASS if (1 && (0>=letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0>=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>=letterA); ) if (k++) return true; return false; is false
+PASS return (0>1); is false
+PASS if ((0>1)) return true; return false; is false
+PASS var k = 0; while ((0>1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>1); ) if (k++) return true; return false; is false
+PASS return (0>=1); is false
+PASS if ((0>=1)) return true; return false; is false
+PASS var k = 0; while ((0>=1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>=1); ) if (k++) return true; return false; is false
+PASS return (0>1) || 1; is true
+PASS if ((0>1) || 1) return true; return false; is true
+PASS var k = 0; while ((0>1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>1) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=1) || 1; is true
+PASS if ((0>=1) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=1) || 1; ) if (k++) return true; return false; is true
+PASS return (0>1) && 1; is false
+PASS if ((0>1) && 1) return true; return false; is false
+PASS var k = 0; while ((0>1) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>1) && 1; ) if (k++) return true; return false; is false
+PASS return (0>=1) && 1; is false
+PASS if ((0>=1) && 1) return true; return false; is false
+PASS var k = 0; while ((0>=1) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>=1) && 1; ) if (k++) return true; return false; is false
+PASS return (0>1) || 1; is true
+PASS if ((0>1) || 1) return true; return false; is true
+PASS var k = 0; while ((0>1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>1) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=1) || 1; is true
+PASS if ((0>=1) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=1) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>1); is true
+PASS if (1 || (0>1)) return true; return false; is true
+PASS var k = 0; while (1 || (0>1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>1); ) if (k++) return true; return false; is true
+PASS return 1 || (0>=1); is true
+PASS if (1 || (0>=1)) return true; return false; is true
+PASS var k = 0; while (1 || (0>=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>=1); ) if (k++) return true; return false; is true
+PASS return 1 && (0>1); is false
+PASS if (1 && (0>1)) return true; return false; is false
+PASS var k = 0; while (1 && (0>1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>1); ) if (k++) return true; return false; is false
+PASS return 1 && (0>=1); is false
+PASS if (1 && (0>=1)) return true; return false; is false
+PASS var k = 0; while (1 && (0>=1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>=1); ) if (k++) return true; return false; is false
+PASS return (0>0); is false
+PASS if ((0>0)) return true; return false; is false
+PASS var k = 0; while ((0>0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>0); ) if (k++) return true; return false; is false
+PASS return (0>=0); is true
+PASS if ((0>=0)) return true; return false; is true
+PASS var k = 0; while ((0>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=0); ) if (k++) return true; return false; is true
+PASS return (0>0) || 1; is true
+PASS if ((0>0) || 1) return true; return false; is true
+PASS var k = 0; while ((0>0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>0) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=0) || 1; is true
+PASS if ((0>=0) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=0) || 1; ) if (k++) return true; return false; is true
+PASS return (0>0) && 1; is false
+PASS if ((0>0) && 1) return true; return false; is false
+PASS var k = 0; while ((0>0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>0) && 1; ) if (k++) return true; return false; is false
+PASS return (0>=0) && 1; is true
+PASS if ((0>=0) && 1) return true; return false; is true
+PASS var k = 0; while ((0>=0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=0) && 1; ) if (k++) return true; return false; is true
+PASS return (0>0) || 1; is true
+PASS if ((0>0) || 1) return true; return false; is true
+PASS var k = 0; while ((0>0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>0) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=0) || 1; is true
+PASS if ((0>=0) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>0); is true
+PASS if (1 || (0>0)) return true; return false; is true
+PASS var k = 0; while (1 || (0>0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>0); ) if (k++) return true; return false; is true
+PASS return 1 || (0>=0); is true
+PASS if (1 || (0>=0)) return true; return false; is true
+PASS var k = 0; while (1 || (0>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>=0); ) if (k++) return true; return false; is true
+PASS return 1 && (0>0); is false
+PASS if (1 && (0>0)) return true; return false; is false
+PASS var k = 0; while (1 && (0>0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>0); ) if (k++) return true; return false; is false
+PASS return 1 && (0>=0); is true
+PASS if (1 && (0>=0)) return true; return false; is true
+PASS var k = 0; while (1 && (0>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0>=0); ) if (k++) return true; return false; is true
+PASS return (1>0); is true
+PASS if ((1>0)) return true; return false; is true
+PASS var k = 0; while ((1>0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>0); ) if (k++) return true; return false; is true
+PASS return (1>=0); is true
+PASS if ((1>=0)) return true; return false; is true
+PASS var k = 0; while ((1>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>=0); ) if (k++) return true; return false; is true
+PASS return (1>0) || 1; is true
+PASS if ((1>0) || 1) return true; return false; is true
+PASS var k = 0; while ((1>0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>0) || 1; ) if (k++) return true; return false; is true
+PASS return (1>=0) || 1; is true
+PASS if ((1>=0) || 1) return true; return false; is true
+PASS var k = 0; while ((1>=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>=0) || 1; ) if (k++) return true; return false; is true
+PASS return (1>0) && 1; is true
+PASS if ((1>0) && 1) return true; return false; is true
+PASS var k = 0; while ((1>0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>0) && 1; ) if (k++) return true; return false; is true
+PASS return (1>=0) && 1; is true
+PASS if ((1>=0) && 1) return true; return false; is true
+PASS var k = 0; while ((1>=0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>=0) && 1; ) if (k++) return true; return false; is true
+PASS return (1>0) || 1; is true
+PASS if ((1>0) || 1) return true; return false; is true
+PASS var k = 0; while ((1>0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>0) || 1; ) if (k++) return true; return false; is true
+PASS return (1>=0) || 1; is true
+PASS if ((1>=0) || 1) return true; return false; is true
+PASS var k = 0; while ((1>=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (1>0); is true
+PASS if (1 || (1>0)) return true; return false; is true
+PASS var k = 0; while (1 || (1>0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1>0); ) if (k++) return true; return false; is true
+PASS return 1 || (1>=0); is true
+PASS if (1 || (1>=0)) return true; return false; is true
+PASS var k = 0; while (1 || (1>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1>=0); ) if (k++) return true; return false; is true
+PASS return 1 && (1>0); is true
+PASS if (1 && (1>0)) return true; return false; is true
+PASS var k = 0; while (1 && (1>0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (1>0); ) if (k++) return true; return false; is true
+PASS return 1 && (1>=0); is true
+PASS if (1 && (1>=0)) return true; return false; is true
+PASS var k = 0; while (1 && (1>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (1>=0); ) if (k++) return true; return false; is true
+PASS return (Zero>1); is false
+PASS if ((Zero>1)) return true; return false; is false
+PASS var k = 0; while ((Zero>1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero>1); ) if (k++) return true; return false; is false
+PASS return (Zero>=1); is false
+PASS if ((Zero>=1)) return true; return false; is false
+PASS var k = 0; while ((Zero>=1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero>=1); ) if (k++) return true; return false; is false
+PASS return (Zero>1) || 1; is true
+PASS if ((Zero>1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>=1) || 1; is true
+PASS if ((Zero>=1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>=1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>1) && 1; is false
+PASS if ((Zero>1) && 1) return true; return false; is false
+PASS var k = 0; while ((Zero>1) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero>1) && 1; ) if (k++) return true; return false; is false
+PASS return (Zero>=1) && 1; is false
+PASS if ((Zero>=1) && 1) return true; return false; is false
+PASS var k = 0; while ((Zero>=1) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero>=1) && 1; ) if (k++) return true; return false; is false
+PASS return (Zero>1) || 1; is true
+PASS if ((Zero>1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>=1) || 1; is true
+PASS if ((Zero>=1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>=1) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (Zero>1); is true
+PASS if (1 || (Zero>1)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero>1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero>1); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero>=1); is true
+PASS if (1 || (Zero>=1)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero>=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero>=1); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero>1); is false
+PASS if (1 && (Zero>1)) return true; return false; is false
+PASS var k = 0; while (1 && (Zero>1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero>1); ) if (k++) return true; return false; is false
+PASS return 1 && (Zero>=1); is false
+PASS if (1 && (Zero>=1)) return true; return false; is false
+PASS var k = 0; while (1 && (Zero>=1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero>=1); ) if (k++) return true; return false; is false
+PASS return (Zero>0); is false
+PASS if ((Zero>0)) return true; return false; is false
+PASS var k = 0; while ((Zero>0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero>0); ) if (k++) return true; return false; is false
+PASS return (Zero>=0); is true
+PASS if ((Zero>=0)) return true; return false; is true
+PASS var k = 0; while ((Zero>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>=0); ) if (k++) return true; return false; is true
+PASS return (Zero>0) || 1; is true
+PASS if ((Zero>0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>=0) || 1; is true
+PASS if ((Zero>=0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>=0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>0) && 1; is false
+PASS if ((Zero>0) && 1) return true; return false; is false
+PASS var k = 0; while ((Zero>0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero>0) && 1; ) if (k++) return true; return false; is false
+PASS return (Zero>=0) && 1; is true
+PASS if ((Zero>=0) && 1) return true; return false; is true
+PASS var k = 0; while ((Zero>=0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>=0) && 1; ) if (k++) return true; return false; is true
+PASS return (Zero>0) || 1; is true
+PASS if ((Zero>0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>=0) || 1; is true
+PASS if ((Zero>=0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (Zero>0); is true
+PASS if (1 || (Zero>0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero>0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero>0); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero>=0); is true
+PASS if (1 || (Zero>=0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero>=0); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero>0); is false
+PASS if (1 && (Zero>0)) return true; return false; is false
+PASS var k = 0; while (1 && (Zero>0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero>0); ) if (k++) return true; return false; is false
+PASS return 1 && (Zero>=0); is true
+PASS if (1 && (Zero>=0)) return true; return false; is true
+PASS var k = 0; while (1 && (Zero>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero>=0); ) if (k++) return true; return false; is true
+PASS return (1>Zero); is true
+PASS if ((1>Zero)) return true; return false; is true
+PASS var k = 0; while ((1>Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>Zero); ) if (k++) return true; return false; is true
+PASS return (1>=Zero); is true
+PASS if ((1>=Zero)) return true; return false; is true
+PASS var k = 0; while ((1>=Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>=Zero); ) if (k++) return true; return false; is true
+PASS return (1>Zero) || 1; is true
+PASS if ((1>Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1>Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1>=Zero) || 1; is true
+PASS if ((1>=Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1>=Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>=Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1>Zero) && 1; is true
+PASS if ((1>Zero) && 1) return true; return false; is true
+PASS var k = 0; while ((1>Zero) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>Zero) && 1; ) if (k++) return true; return false; is true
+PASS return (1>=Zero) && 1; is true
+PASS if ((1>=Zero) && 1) return true; return false; is true
+PASS var k = 0; while ((1>=Zero) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>=Zero) && 1; ) if (k++) return true; return false; is true
+PASS return (1>Zero) || 1; is true
+PASS if ((1>Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1>Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1>=Zero) || 1; is true
+PASS if ((1>=Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1>=Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>=Zero) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (1>Zero); is true
+PASS if (1 || (1>Zero)) return true; return false; is true
+PASS var k = 0; while (1 || (1>Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1>Zero); ) if (k++) return true; return false; is true
+PASS return 1 || (1>=Zero); is true
+PASS if (1 || (1>=Zero)) return true; return false; is true
+PASS var k = 0; while (1 || (1>=Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1>=Zero); ) if (k++) return true; return false; is true
+PASS return 1 && (1>Zero); is true
+PASS if (1 && (1>Zero)) return true; return false; is true
+PASS var k = 0; while (1 && (1>Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (1>Zero); ) if (k++) return true; return false; is true
+PASS return 1 && (1>=Zero); is true
+PASS if (1 && (1>=Zero)) return true; return false; is true
+PASS var k = 0; while (1 && (1>=Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (1>=Zero); ) if (k++) return true; return false; is true
+PASS return (0>One); is false
+PASS if ((0>One)) return true; return false; is false
+PASS var k = 0; while ((0>One)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>One); ) if (k++) return true; return false; is false
+PASS return (0>=One); is false
+PASS if ((0>=One)) return true; return false; is false
+PASS var k = 0; while ((0>=One)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>=One); ) if (k++) return true; return false; is false
+PASS return (0>One) || 1; is true
+PASS if ((0>One) || 1) return true; return false; is true
+PASS var k = 0; while ((0>One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>One) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=One) || 1; is true
+PASS if ((0>=One) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=One) || 1; ) if (k++) return true; return false; is true
+PASS return (0>One) && 1; is false
+PASS if ((0>One) && 1) return true; return false; is false
+PASS var k = 0; while ((0>One) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>One) && 1; ) if (k++) return true; return false; is false
+PASS return (0>=One) && 1; is false
+PASS if ((0>=One) && 1) return true; return false; is false
+PASS var k = 0; while ((0>=One) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>=One) && 1; ) if (k++) return true; return false; is false
+PASS return (0>One) || 1; is true
+PASS if ((0>One) || 1) return true; return false; is true
+PASS var k = 0; while ((0>One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>One) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=One) || 1; is true
+PASS if ((0>=One) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=One) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>One); is true
+PASS if (1 || (0>One)) return true; return false; is true
+PASS var k = 0; while (1 || (0>One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>One); ) if (k++) return true; return false; is true
+PASS return 1 || (0>=One); is true
+PASS if (1 || (0>=One)) return true; return false; is true
+PASS var k = 0; while (1 || (0>=One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>=One); ) if (k++) return true; return false; is true
+PASS return 1 && (0>One); is false
+PASS if (1 && (0>One)) return true; return false; is false
+PASS var k = 0; while (1 && (0>One)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>One); ) if (k++) return true; return false; is false
+PASS return 1 && (0>=One); is false
+PASS if (1 && (0>=One)) return true; return false; is false
+PASS var k = 0; while (1 && (0>=One)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>=One); ) if (k++) return true; return false; is false
+PASS return (One>0); is true
+PASS if ((One>0)) return true; return false; is true
+PASS var k = 0; while ((One>0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One>0); ) if (k++) return true; return false; is true
+PASS return (One>=0); is true
+PASS if ((One>=0)) return true; return false; is true
+PASS var k = 0; while ((One>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One>=0); ) if (k++) return true; return false; is true
+PASS return (One>0) || 1; is true
+PASS if ((One>0) || 1) return true; return false; is true
+PASS var k = 0; while ((One>0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One>0) || 1; ) if (k++) return true; return false; is true
+PASS return (One>=0) || 1; is true
+PASS if ((One>=0) || 1) return true; return false; is true
+PASS var k = 0; while ((One>=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One>=0) || 1; ) if (k++) return true; return false; is true
+PASS return (One>0) && 1; is true
+PASS if ((One>0) && 1) return true; return false; is true
+PASS var k = 0; while ((One>0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One>0) && 1; ) if (k++) return true; return false; is true
+PASS return (One>=0) && 1; is true
+PASS if ((One>=0) && 1) return true; return false; is true
+PASS var k = 0; while ((One>=0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One>=0) && 1; ) if (k++) return true; return false; is true
+PASS return (One>0) || 1; is true
+PASS if ((One>0) || 1) return true; return false; is true
+PASS var k = 0; while ((One>0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One>0) || 1; ) if (k++) return true; return false; is true
+PASS return (One>=0) || 1; is true
+PASS if ((One>=0) || 1) return true; return false; is true
+PASS var k = 0; while ((One>=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One>=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (One>0); is true
+PASS if (1 || (One>0)) return true; return false; is true
+PASS var k = 0; while (1 || (One>0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (One>0); ) if (k++) return true; return false; is true
+PASS return 1 || (One>=0); is true
+PASS if (1 || (One>=0)) return true; return false; is true
+PASS var k = 0; while (1 || (One>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (One>=0); ) if (k++) return true; return false; is true
+PASS return 1 && (One>0); is true
+PASS if (1 && (One>0)) return true; return false; is true
+PASS var k = 0; while (1 && (One>0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (One>0); ) if (k++) return true; return false; is true
+PASS return 1 && (One>=0); is true
+PASS if (1 && (One>=0)) return true; return false; is true
+PASS var k = 0; while (1 && (One>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (One>=0); ) if (k++) return true; return false; is true
+PASS 0 >= 0 is true
+PASS 1 >= 0 is true
+PASS 1 >= 1 is true
+PASS 1 > 0 is true
+PASS 0 >= 1 is false
+PASS 1 >= 2 is false
+PASS 1 > 1 is false
+PASS 1 > 2 is false
+PASS if (0 >= 0 || 0) true; else false is true
+PASS if (1 >= 0 || 0) true; else false is true
+PASS if (1 >= 1 || 0) true; else false is true
+PASS if (0 <  1 || 0) true; else false is true
+PASS if (0 >= 1 || 0) true; else false is false
+PASS if (1 >= 2 || 0) true; else false is false
+PASS if (1 <  1 || 0) true; else false is false
+PASS if (2 <  1 || 0) true; else false is false
+PASS 0.5 >= 0 is true
+PASS 1.5 >= 0 is true
+PASS 1.5 >= 1 is true
+PASS 1.5 > 0 is true
+PASS 0.5 >= 1 is false
+PASS 1.5 >= 2 is false
+PASS 1.5 > 1 is true
+PASS 1.5 > 2 is false
+PASS if (0.5 >= 0 || 0) true; else false is true
+PASS if (1.5 >= 0 || 0) true; else false is true
+PASS if (1.5 >= 1 || 0) true; else false is true
+PASS if (0 <  1.5 || 0) true; else false is true
+PASS if (0.5 >= 1 || 0) true; else false is false
+PASS if (1.5 >= 2 || 0) true; else false is false
+PASS if (1 <  1.5 || 0) true; else false is true
+PASS if (2 <  1.5 || 0) true; else false is false
+PASS zero >= zero is true
+PASS 1 >= zero is true
+PASS 1 >= 1 is true
+PASS 1 > zero is true
+PASS zero >= 1 is false
+PASS 1 >= 2 is false
+PASS 1 > 1 is false
+PASS 1 > 2 is false
+PASS if (zero >= zero || 0) true; else false is true
+PASS if (1 >= zero || zero) true; else false is true
+PASS if (1 >= 1 || zero) true; else false is true
+PASS if (zero <  1 || zero) true; else false is true
+PASS if (zero >= 1 || zero) true; else false is false
+PASS if (1 >= 2 || zero) true; else false is false
+PASS if (1 <  1 || zero) true; else false is false
+PASS if (2 <  1 || zero) true; else false is false
+PASS p5 >= 0 is true
+PASS p15 >= 0 is true
+PASS p15 >= 1 is true
+PASS p15 > 0 is true
+PASS p5 >= 1 is false
+PASS p15 >= 2 is false
+PASS p15 > 1 is true
+PASS p15 > 2 is false
+PASS if (p5 >= 0 || 0) true; else false is true
+PASS if (p15 >= 0 || 0) true; else false is true
+PASS if (p15 >= 1 || 0) true; else false is true
+PASS if (0 <  p15 || 0) true; else false is true
+PASS if (p5 >= 1 || 0) true; else false is false
+PASS if (p15 >= 2 || 0) true; else false is false
+PASS if (1 <  p15 || 0) true; else false is true
+PASS if (2 <  p15 || 0) true; else false is false
+PASS zero >= zero is true
+PASS one >= zero is true
+PASS one >= one is true
+PASS one > zero is true
+PASS zero >= one is false
+PASS one >= two is false
+PASS one > one is false
+PASS one > two is false
+PASS if (zero >= zero || 0) true; else false is true
+PASS if (one >= zero || zero) true; else false is true
+PASS if (one >= one || zero) true; else false is true
+PASS if (zero <  one || zero) true; else false is true
+PASS if (zero >= one || zero) true; else false is false
+PASS if (one >= two || zero) true; else false is false
+PASS if (one <  one || zero) true; else false is false
+PASS if (two <  one || zero) true; else false is false
+PASS p5 >= 0 is true
+PASS p15 >= 0 is true
+PASS p15 >= one is true
+PASS p15 > 0 is true
+PASS p5 >= one is false
+PASS p15 >= two is false
+PASS p15 > one is true
+PASS p15 > two is false
+PASS if (p5 >= 0 || 0) true; else false is true
+PASS if (p15 >= 0 || 0) true; else false is true
+PASS if (p15 >= one || 0) true; else false is true
+PASS if (0 <  p15 || 0) true; else false is true
+PASS if (p5 >= one || 0) true; else false is false
+PASS if (p15 >= two || 0) true; else false is false
+PASS if (one <  p15 || 0) true; else false is true
+PASS if (two <  p15 || 0) true; else false is false
+PASS  0 >    NaN is false
+PASS  NaN >  NaN is false
+PASS  0 >=   NaN is false
+PASS  NaN >= NaN is false
+PASS  0.5 >  NaN is false
+PASS  NaN >  NaN is false
+PASS  0.5 >= NaN is false
+PASS  NaN >= NaN is false
+PASS  zero > NaN is false
+PASS zero >= NaN is false
+PASS  NaN >= NaN is false
+PASS  p5  >  NaN is false
+PASS NaN  >  NaN is false
+PASS p5  >=  NaN is false
+PASS NaN  >= NaN is false
+PASS if ( 0 >    NaN) true; else false; is false
+PASS if ( NaN >  NaN) true; else false; is false
+PASS if ( 0 >=   NaN) true; else false; is false
+PASS if ( NaN >= NaN) true; else false; is false
+PASS if ( 0.5 >  NaN) true; else false; is false
+PASS if ( NaN >  NaN) true; else false; is false
+PASS if ( 0.5 >= NaN) true; else false; is false
+PASS if ( NaN >= NaN) true; else false; is false
+PASS if ( zero > NaN) true; else false; is false
+PASS if (zero >= NaN) true; else false; is false
+PASS if ( NaN >= NaN) true; else false; is false
+PASS if ( p5  >  NaN) true; else false; is false
+PASS if (NaN  >  NaN) true; else false; is false
+PASS if (p5  >=  NaN) true; else false; is false
+PASS if (NaN  >= NaN) true; else false; is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/comparison-operators-greater.js b/deps/v8/test/webkit/comparison-operators-greater.js
new file mode 100644 (file)
index 0000000..73e8832
--- /dev/null
@@ -0,0 +1,253 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("test that comparison operators work correctly.")
+
+function makeTest(start, end, expression, relationship, override, invert) {
+    var resultValue = eval(relationship + expression + 0) || !!override;
+    if (invert)
+        resultValue = !resultValue;
+    var expr = start + expression + end;
+    var result = [];
+    function func(content) { var f = new Function(content); f.toString = function(){ return content}; return f; }
+    result.push([new func("return " + expr + ";"), resultValue]);
+    result.push([new func("if (" + expr + ") return true; return false;"), resultValue]);
+    result.push([new func("var k = 0; while (" + expr + ") if (k++) return true; return false;"), resultValue]);
+    result.push([new func("var k = 0; for (; " + expr + "; ) if (k++) return true; return false;"), resultValue]);
+    return result;
+}
+function doTest(lhs, rhs, relationship) {
+    var expressionParts = [["(",")"],["(", ") || 1", true],["(", ") && 1"],["(", ") || 1", true],["1 || (",")", true],["1 && (",")"]];
+    var expressions = [];
+    var tests = [];
+    for (var i = 0; i < expressionParts.length; i++) {
+        var start = expressionParts[i][0] + lhs;
+        var end = String(rhs) + expressionParts[i][1];
+        tests.push.apply(tests, makeTest(start, end, ">", relationship, expressionParts[i][2]));
+        tests.push.apply(tests, makeTest(start, end, ">=", relationship, expressionParts[i][2]));
+    }
+    for (var i = 0; i < tests.length; i++) {
+        if ((r=tests[i][0]()) == tests[i][1])
+            testPassed(tests[i][0] + " is " + tests[i][1]);
+        else
+            testFailed(tests[i][0] + " is " + r + " and should be " + tests[i][1] + ".");
+    }
+}
+
+var letterA = "a";
+var letterB = "b";
+var letter0 = "0";
+
+var One = 1;
+var Zero = 0;
+doTest('"a"', '"b"', -1);
+doTest('"a"', '"a"', 0);
+doTest('"b"', '"a"', 1);
+doTest('letterA', '"b"', -1);
+doTest('letterA', '"a"', 0);
+doTest('"b"', '"a"', 1);
+doTest('letterA', '"b"', -1);
+doTest('letterA', 'letterA', 0);
+doTest('"b"', 'letterA', 1);
+doTest('"a"', '"b"', -1);
+doTest('"a"', 'letterA', 0);
+doTest('"b"', 'letterA', 1);
+
+doTest('"a"', '0', NaN);
+doTest('0', '"a"', NaN);
+
+doTest('0', '"0"', 0);
+doTest('Zero', 'letter0', 0);
+doTest('0', 'letter0', 0);
+doTest('Zero', '"0"', 0);
+doTest('-1', '"0"', -1);
+doTest('1', '"0"', 1);
+doTest('0', '"-1"', 1);
+doTest('0', '"1"', -1);
+
+doTest('letterA', '0', NaN);
+doTest('letterA', '"a"', 0);
+doTest('0', '"a"', NaN);
+doTest('letterA', 'letterA', 0);
+doTest('0', 'letterA', NaN);
+doTest('"a"', 'letterA', 0);
+doTest('0', 'letterA', NaN);
+
+
+doTest('0', '1', -1);
+doTest('0', '0', 0);
+doTest('1', '0', 1);
+doTest('Zero', '1', -1);
+doTest('Zero', '0', 0);
+doTest('1', 'Zero', 1);
+doTest('0', 'One', -1);
+doTest('One', '0', 1);
+
+shouldBeTrue("0 >= 0");
+shouldBeTrue("1 >= 0");
+shouldBeTrue("1 >= 1");
+shouldBeTrue("1 > 0");
+shouldBeFalse("0 >= 1");
+shouldBeFalse("1 >= 2");
+shouldBeFalse("1 > 1");
+shouldBeFalse("1 > 2");
+
+ shouldBeTrue("if (0 >= 0 || 0) true; else false");
+ shouldBeTrue("if (1 >= 0 || 0) true; else false");
+ shouldBeTrue("if (1 >= 1 || 0) true; else false");
+ shouldBeTrue("if (0 <  1 || 0) true; else false");
+shouldBeFalse("if (0 >= 1 || 0) true; else false");
+shouldBeFalse("if (1 >= 2 || 0) true; else false");
+shouldBeFalse("if (1 <  1 || 0) true; else false");
+shouldBeFalse("if (2 <  1 || 0) true; else false");
+
+shouldBeTrue("0.5 >= 0");
+shouldBeTrue("1.5 >= 0");
+shouldBeTrue("1.5 >= 1");
+shouldBeTrue("1.5 > 0");
+shouldBeFalse("0.5 >= 1");
+shouldBeFalse("1.5 >= 2");
+shouldBeTrue("1.5 > 1");
+shouldBeFalse("1.5 > 2");
+
+ shouldBeTrue("if (0.5 >= 0 || 0) true; else false");
+ shouldBeTrue("if (1.5 >= 0 || 0) true; else false");
+ shouldBeTrue("if (1.5 >= 1 || 0) true; else false");
+ shouldBeTrue("if (0 <  1.5 || 0) true; else false");
+shouldBeFalse("if (0.5 >= 1 || 0) true; else false");
+shouldBeFalse("if (1.5 >= 2 || 0) true; else false");
+ shouldBeTrue("if (1 <  1.5 || 0) true; else false");
+shouldBeFalse("if (2 <  1.5 || 0) true; else false");
+
+var zero = 0;
+var one = 1;
+var two = 2;
+var p5 = 0.5;
+var p15 = 1.5;
+
+
+shouldBeTrue("zero >= zero");
+shouldBeTrue("1 >= zero");
+shouldBeTrue("1 >= 1");
+shouldBeTrue("1 > zero");
+shouldBeFalse("zero >= 1");
+shouldBeFalse("1 >= 2");
+shouldBeFalse("1 > 1");
+shouldBeFalse("1 > 2");
+
+ shouldBeTrue("if (zero >= zero || 0) true; else false");
+ shouldBeTrue("if (1 >= zero || zero) true; else false");
+ shouldBeTrue("if (1 >= 1 || zero) true; else false");
+ shouldBeTrue("if (zero <  1 || zero) true; else false");
+shouldBeFalse("if (zero >= 1 || zero) true; else false");
+shouldBeFalse("if (1 >= 2 || zero) true; else false");
+shouldBeFalse("if (1 <  1 || zero) true; else false");
+shouldBeFalse("if (2 <  1 || zero) true; else false");
+
+shouldBeTrue("p5 >= 0");
+shouldBeTrue("p15 >= 0");
+shouldBeTrue("p15 >= 1");
+shouldBeTrue("p15 > 0");
+shouldBeFalse("p5 >= 1");
+shouldBeFalse("p15 >= 2");
+shouldBeTrue("p15 > 1");
+shouldBeFalse("p15 > 2");
+
+ shouldBeTrue("if (p5 >= 0 || 0) true; else false");
+ shouldBeTrue("if (p15 >= 0 || 0) true; else false");
+ shouldBeTrue("if (p15 >= 1 || 0) true; else false");
+ shouldBeTrue("if (0 <  p15 || 0) true; else false");
+shouldBeFalse("if (p5 >= 1 || 0) true; else false");
+shouldBeFalse("if (p15 >= 2 || 0) true; else false");
+ shouldBeTrue("if (1 <  p15 || 0) true; else false");
+shouldBeFalse("if (2 <  p15 || 0) true; else false");
+
+
+shouldBeTrue("zero >= zero");
+shouldBeTrue("one >= zero");
+shouldBeTrue("one >= one");
+shouldBeTrue("one > zero");
+shouldBeFalse("zero >= one");
+shouldBeFalse("one >= two");
+shouldBeFalse("one > one");
+shouldBeFalse("one > two");
+
+ shouldBeTrue("if (zero >= zero || 0) true; else false");
+ shouldBeTrue("if (one >= zero || zero) true; else false");
+ shouldBeTrue("if (one >= one || zero) true; else false");
+ shouldBeTrue("if (zero <  one || zero) true; else false");
+shouldBeFalse("if (zero >= one || zero) true; else false");
+shouldBeFalse("if (one >= two || zero) true; else false");
+shouldBeFalse("if (one <  one || zero) true; else false");
+shouldBeFalse("if (two <  one || zero) true; else false");
+
+shouldBeTrue("p5 >= 0");
+shouldBeTrue("p15 >= 0");
+shouldBeTrue("p15 >= one");
+shouldBeTrue("p15 > 0");
+shouldBeFalse("p5 >= one");
+shouldBeFalse("p15 >= two");
+shouldBeTrue("p15 > one");
+shouldBeFalse("p15 > two");
+
+ shouldBeTrue("if (p5 >= 0 || 0) true; else false");
+ shouldBeTrue("if (p15 >= 0 || 0) true; else false");
+ shouldBeTrue("if (p15 >= one || 0) true; else false");
+ shouldBeTrue("if (0 <  p15 || 0) true; else false");
+shouldBeFalse("if (p5 >= one || 0) true; else false");
+shouldBeFalse("if (p15 >= two || 0) true; else false");
+ shouldBeTrue("if (one <  p15 || 0) true; else false");
+shouldBeFalse("if (two <  p15 || 0) true; else false");
+
+shouldBeFalse(" 0 >    NaN");
+shouldBeFalse(" NaN >  NaN");
+shouldBeFalse(" 0 >=   NaN");
+shouldBeFalse(" NaN >= NaN");
+shouldBeFalse(" 0.5 >  NaN");
+shouldBeFalse(" NaN >  NaN");
+shouldBeFalse(" 0.5 >= NaN");
+shouldBeFalse(" NaN >= NaN");
+shouldBeFalse(" zero > NaN");
+shouldBeFalse("zero >= NaN");
+shouldBeFalse(" NaN >= NaN");
+shouldBeFalse(" p5  >  NaN");
+shouldBeFalse("NaN  >  NaN");
+shouldBeFalse("p5  >=  NaN");
+shouldBeFalse("NaN  >= NaN");
+
+
+shouldBeFalse("if ( 0 >    NaN) true; else false;");
+shouldBeFalse("if ( NaN >  NaN) true; else false;");
+shouldBeFalse("if ( 0 >=   NaN) true; else false;");
+shouldBeFalse("if ( NaN >= NaN) true; else false;");
+shouldBeFalse("if ( 0.5 >  NaN) true; else false;");
+shouldBeFalse("if ( NaN >  NaN) true; else false;");
+shouldBeFalse("if ( 0.5 >= NaN) true; else false;");
+shouldBeFalse("if ( NaN >= NaN) true; else false;");
+shouldBeFalse("if ( zero > NaN) true; else false;");
+shouldBeFalse("if (zero >= NaN) true; else false;");
+shouldBeFalse("if ( NaN >= NaN) true; else false;");
+shouldBeFalse("if ( p5  >  NaN) true; else false;");
+shouldBeFalse("if (NaN  >  NaN) true; else false;");
+shouldBeFalse("if (p5  >=  NaN) true; else false;");
+shouldBeFalse("if (NaN  >= NaN) true; else false;");
diff --git a/deps/v8/test/webkit/comparison-operators-less-expected.txt b/deps/v8/test/webkit/comparison-operators-less-expected.txt
new file mode 100644 (file)
index 0000000..0527993
--- /dev/null
@@ -0,0 +1,1934 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+test that comparison operators work correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS return ("a"<"b"); is true
+PASS if (("a"<"b")) return true; return false; is true
+PASS var k = 0; while (("a"<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<"b"); ) if (k++) return true; return false; is true
+PASS return ("a"<="b"); is true
+PASS if (("a"<="b")) return true; return false; is true
+PASS var k = 0; while (("a"<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="b"); ) if (k++) return true; return false; is true
+PASS return ("a"<"b") || 1; is true
+PASS if (("a"<"b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<"b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<="b") || 1; is true
+PASS if (("a"<="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<"b") && 1; is true
+PASS if (("a"<"b") && 1) return true; return false; is true
+PASS var k = 0; while (("a"<"b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<"b") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"<="b") && 1; is true
+PASS if (("a"<="b") && 1) return true; return false; is true
+PASS var k = 0; while (("a"<="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="b") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"<"b") || 1; is true
+PASS if (("a"<"b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<"b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<="b") || 1; is true
+PASS if (("a"<="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<"b"); is true
+PASS if (1 || ("a"<"b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<"b"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<="b"); is true
+PASS if (1 || ("a"<="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<="b"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"<"b"); is true
+PASS if (1 && ("a"<"b")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"<"b"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"<="b"); is true
+PASS if (1 && ("a"<="b")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"<="b"); ) if (k++) return true; return false; is true
+PASS return ("a"<"a"); is false
+PASS if (("a"<"a")) return true; return false; is false
+PASS var k = 0; while (("a"<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"<"a"); ) if (k++) return true; return false; is false
+PASS return ("a"<="a"); is true
+PASS if (("a"<="a")) return true; return false; is true
+PASS var k = 0; while (("a"<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="a"); ) if (k++) return true; return false; is true
+PASS return ("a"<"a") || 1; is true
+PASS if (("a"<"a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<="a") || 1; is true
+PASS if (("a"<="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<"a") && 1; is false
+PASS if (("a"<"a") && 1) return true; return false; is false
+PASS var k = 0; while (("a"<"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"<"a") && 1; ) if (k++) return true; return false; is false
+PASS return ("a"<="a") && 1; is true
+PASS if (("a"<="a") && 1) return true; return false; is true
+PASS var k = 0; while (("a"<="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="a") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"<"a") || 1; is true
+PASS if (("a"<"a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<="a") || 1; is true
+PASS if (("a"<="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<"a"); is true
+PASS if (1 || ("a"<"a")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<"a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<="a"); is true
+PASS if (1 || ("a"<="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"<"a"); is false
+PASS if (1 && ("a"<"a")) return true; return false; is false
+PASS var k = 0; while (1 && ("a"<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"<"a"); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"<="a"); is true
+PASS if (1 && ("a"<="a")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"<="a"); ) if (k++) return true; return false; is true
+PASS return ("b"<"a"); is false
+PASS if (("b"<"a")) return true; return false; is false
+PASS var k = 0; while (("b"<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<"a"); ) if (k++) return true; return false; is false
+PASS return ("b"<="a"); is false
+PASS if (("b"<="a")) return true; return false; is false
+PASS var k = 0; while (("b"<="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<="a"); ) if (k++) return true; return false; is false
+PASS return ("b"<"a") || 1; is true
+PASS if (("b"<"a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<="a") || 1; is true
+PASS if (("b"<="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<"a") && 1; is false
+PASS if (("b"<"a") && 1) return true; return false; is false
+PASS var k = 0; while (("b"<"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<"a") && 1; ) if (k++) return true; return false; is false
+PASS return ("b"<="a") && 1; is false
+PASS if (("b"<="a") && 1) return true; return false; is false
+PASS var k = 0; while (("b"<="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<="a") && 1; ) if (k++) return true; return false; is false
+PASS return ("b"<"a") || 1; is true
+PASS if (("b"<"a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<="a") || 1; is true
+PASS if (("b"<="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b"<"a"); is true
+PASS if (1 || ("b"<"a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"<"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"<"a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"<="a"); is true
+PASS if (1 || ("b"<="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"<="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"<"a"); is false
+PASS if (1 && ("b"<"a")) return true; return false; is false
+PASS var k = 0; while (1 && ("b"<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"<"a"); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"<="a"); is false
+PASS if (1 && ("b"<="a")) return true; return false; is false
+PASS var k = 0; while (1 && ("b"<="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"<="a"); ) if (k++) return true; return false; is false
+PASS return (letterA<"b"); is true
+PASS if ((letterA<"b")) return true; return false; is true
+PASS var k = 0; while ((letterA<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"b"); ) if (k++) return true; return false; is true
+PASS return (letterA<="b"); is true
+PASS if ((letterA<="b")) return true; return false; is true
+PASS var k = 0; while ((letterA<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="b"); ) if (k++) return true; return false; is true
+PASS return (letterA<"b") || 1; is true
+PASS if ((letterA<"b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<="b") || 1; is true
+PASS if ((letterA<="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<"b") && 1; is true
+PASS if ((letterA<"b") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA<"b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"b") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA<="b") && 1; is true
+PASS if ((letterA<="b") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="b") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA<"b") || 1; is true
+PASS if ((letterA<"b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<="b") || 1; is true
+PASS if ((letterA<="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<"b"); is true
+PASS if (1 || (letterA<"b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<"b"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<="b"); is true
+PASS if (1 || (letterA<="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<="b"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA<"b"); is true
+PASS if (1 && (letterA<"b")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA<"b"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA<="b"); is true
+PASS if (1 && (letterA<="b")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA<="b"); ) if (k++) return true; return false; is true
+PASS return (letterA<"a"); is false
+PASS if ((letterA<"a")) return true; return false; is false
+PASS var k = 0; while ((letterA<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<"a"); ) if (k++) return true; return false; is false
+PASS return (letterA<="a"); is true
+PASS if ((letterA<="a")) return true; return false; is true
+PASS var k = 0; while ((letterA<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="a"); ) if (k++) return true; return false; is true
+PASS return (letterA<"a") || 1; is true
+PASS if ((letterA<"a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<="a") || 1; is true
+PASS if ((letterA<="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<"a") && 1; is false
+PASS if ((letterA<"a") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA<"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<"a") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA<="a") && 1; is true
+PASS if ((letterA<="a") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="a") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA<"a") || 1; is true
+PASS if ((letterA<"a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<="a") || 1; is true
+PASS if ((letterA<="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<"a"); is true
+PASS if (1 || (letterA<"a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<"a"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<="a"); is true
+PASS if (1 || (letterA<="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA<"a"); is false
+PASS if (1 && (letterA<"a")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA<"a"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA<="a"); is true
+PASS if (1 && (letterA<="a")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA<="a"); ) if (k++) return true; return false; is true
+PASS return ("b"<"a"); is false
+PASS if (("b"<"a")) return true; return false; is false
+PASS var k = 0; while (("b"<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<"a"); ) if (k++) return true; return false; is false
+PASS return ("b"<="a"); is false
+PASS if (("b"<="a")) return true; return false; is false
+PASS var k = 0; while (("b"<="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<="a"); ) if (k++) return true; return false; is false
+PASS return ("b"<"a") || 1; is true
+PASS if (("b"<"a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<="a") || 1; is true
+PASS if (("b"<="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<"a") && 1; is false
+PASS if (("b"<"a") && 1) return true; return false; is false
+PASS var k = 0; while (("b"<"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<"a") && 1; ) if (k++) return true; return false; is false
+PASS return ("b"<="a") && 1; is false
+PASS if (("b"<="a") && 1) return true; return false; is false
+PASS var k = 0; while (("b"<="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<="a") && 1; ) if (k++) return true; return false; is false
+PASS return ("b"<"a") || 1; is true
+PASS if (("b"<"a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<="a") || 1; is true
+PASS if (("b"<="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b"<"a"); is true
+PASS if (1 || ("b"<"a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"<"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"<"a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"<="a"); is true
+PASS if (1 || ("b"<="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"<="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"<"a"); is false
+PASS if (1 && ("b"<"a")) return true; return false; is false
+PASS var k = 0; while (1 && ("b"<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"<"a"); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"<="a"); is false
+PASS if (1 && ("b"<="a")) return true; return false; is false
+PASS var k = 0; while (1 && ("b"<="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"<="a"); ) if (k++) return true; return false; is false
+PASS return (letterA<"b"); is true
+PASS if ((letterA<"b")) return true; return false; is true
+PASS var k = 0; while ((letterA<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"b"); ) if (k++) return true; return false; is true
+PASS return (letterA<="b"); is true
+PASS if ((letterA<="b")) return true; return false; is true
+PASS var k = 0; while ((letterA<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="b"); ) if (k++) return true; return false; is true
+PASS return (letterA<"b") || 1; is true
+PASS if ((letterA<"b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<="b") || 1; is true
+PASS if ((letterA<="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<"b") && 1; is true
+PASS if ((letterA<"b") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA<"b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"b") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA<="b") && 1; is true
+PASS if ((letterA<="b") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="b") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA<"b") || 1; is true
+PASS if ((letterA<"b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<="b") || 1; is true
+PASS if ((letterA<="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<"b"); is true
+PASS if (1 || (letterA<"b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<"b"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<="b"); is true
+PASS if (1 || (letterA<="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<="b"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA<"b"); is true
+PASS if (1 && (letterA<"b")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA<"b"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA<="b"); is true
+PASS if (1 && (letterA<="b")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA<="b"); ) if (k++) return true; return false; is true
+PASS return (letterA<letterA); is false
+PASS if ((letterA<letterA)) return true; return false; is false
+PASS var k = 0; while ((letterA<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<letterA); ) if (k++) return true; return false; is false
+PASS return (letterA<=letterA); is true
+PASS if ((letterA<=letterA)) return true; return false; is true
+PASS var k = 0; while ((letterA<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<=letterA); ) if (k++) return true; return false; is true
+PASS return (letterA<letterA) || 1; is true
+PASS if ((letterA<letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<=letterA) || 1; is true
+PASS if ((letterA<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<letterA) && 1; is false
+PASS if ((letterA<letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA<letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA<=letterA) && 1; is true
+PASS if ((letterA<=letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((letterA<=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (letterA<letterA) || 1; is true
+PASS if ((letterA<letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<=letterA) || 1; is true
+PASS if ((letterA<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<letterA); is true
+PASS if (1 || (letterA<letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<=letterA); is true
+PASS if (1 || (letterA<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA<letterA); is false
+PASS if (1 && (letterA<letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA<letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA<=letterA); is true
+PASS if (1 && (letterA<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (letterA<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA<=letterA); ) if (k++) return true; return false; is true
+PASS return ("b"<letterA); is false
+PASS if (("b"<letterA)) return true; return false; is false
+PASS var k = 0; while (("b"<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<letterA); ) if (k++) return true; return false; is false
+PASS return ("b"<=letterA); is false
+PASS if (("b"<=letterA)) return true; return false; is false
+PASS var k = 0; while (("b"<=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<=letterA); ) if (k++) return true; return false; is false
+PASS return ("b"<letterA) || 1; is true
+PASS if (("b"<letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<=letterA) || 1; is true
+PASS if (("b"<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<letterA) && 1; is false
+PASS if (("b"<letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("b"<letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("b"<=letterA) && 1; is false
+PASS if (("b"<=letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("b"<=letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<=letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("b"<letterA) || 1; is true
+PASS if (("b"<letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<=letterA) || 1; is true
+PASS if (("b"<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b"<letterA); is true
+PASS if (1 || ("b"<letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"<letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"<letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"<=letterA); is true
+PASS if (1 || ("b"<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"<=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"<letterA); is false
+PASS if (1 && ("b"<letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("b"<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"<letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"<=letterA); is false
+PASS if (1 && ("b"<=letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("b"<=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"<=letterA); ) if (k++) return true; return false; is false
+PASS return ("a"<"b"); is true
+PASS if (("a"<"b")) return true; return false; is true
+PASS var k = 0; while (("a"<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<"b"); ) if (k++) return true; return false; is true
+PASS return ("a"<="b"); is true
+PASS if (("a"<="b")) return true; return false; is true
+PASS var k = 0; while (("a"<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="b"); ) if (k++) return true; return false; is true
+PASS return ("a"<"b") || 1; is true
+PASS if (("a"<"b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<"b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<="b") || 1; is true
+PASS if (("a"<="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<"b") && 1; is true
+PASS if (("a"<"b") && 1) return true; return false; is true
+PASS var k = 0; while (("a"<"b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<"b") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"<="b") && 1; is true
+PASS if (("a"<="b") && 1) return true; return false; is true
+PASS var k = 0; while (("a"<="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="b") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"<"b") || 1; is true
+PASS if (("a"<"b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<"b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<="b") || 1; is true
+PASS if (("a"<="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<"b"); is true
+PASS if (1 || ("a"<"b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<"b"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<="b"); is true
+PASS if (1 || ("a"<="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<="b"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"<"b"); is true
+PASS if (1 && ("a"<"b")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"<"b"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"<="b"); is true
+PASS if (1 && ("a"<="b")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"<="b"); ) if (k++) return true; return false; is true
+PASS return ("a"<letterA); is false
+PASS if (("a"<letterA)) return true; return false; is false
+PASS var k = 0; while (("a"<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"<letterA); ) if (k++) return true; return false; is false
+PASS return ("a"<=letterA); is true
+PASS if (("a"<=letterA)) return true; return false; is true
+PASS var k = 0; while (("a"<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<=letterA); ) if (k++) return true; return false; is true
+PASS return ("a"<letterA) || 1; is true
+PASS if (("a"<letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<=letterA) || 1; is true
+PASS if (("a"<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<letterA) && 1; is false
+PASS if (("a"<letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("a"<letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"<letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("a"<=letterA) && 1; is true
+PASS if (("a"<=letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("a"<=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("a"<letterA) || 1; is true
+PASS if (("a"<letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<=letterA) || 1; is true
+PASS if (("a"<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<letterA); is true
+PASS if (1 || ("a"<letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<=letterA); is true
+PASS if (1 || ("a"<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"<letterA); is false
+PASS if (1 && ("a"<letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("a"<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"<letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"<=letterA); is true
+PASS if (1 && ("a"<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("a"<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"<=letterA); ) if (k++) return true; return false; is true
+PASS return ("b"<letterA); is false
+PASS if (("b"<letterA)) return true; return false; is false
+PASS var k = 0; while (("b"<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<letterA); ) if (k++) return true; return false; is false
+PASS return ("b"<=letterA); is false
+PASS if (("b"<=letterA)) return true; return false; is false
+PASS var k = 0; while (("b"<=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<=letterA); ) if (k++) return true; return false; is false
+PASS return ("b"<letterA) || 1; is true
+PASS if (("b"<letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<=letterA) || 1; is true
+PASS if (("b"<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<letterA) && 1; is false
+PASS if (("b"<letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("b"<letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("b"<=letterA) && 1; is false
+PASS if (("b"<=letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("b"<=letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<=letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("b"<letterA) || 1; is true
+PASS if (("b"<letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<=letterA) || 1; is true
+PASS if (("b"<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b"<letterA); is true
+PASS if (1 || ("b"<letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"<letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"<letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"<=letterA); is true
+PASS if (1 || ("b"<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"<=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"<letterA); is false
+PASS if (1 && ("b"<letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("b"<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"<letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"<=letterA); is false
+PASS if (1 && ("b"<=letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("b"<=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"<=letterA); ) if (k++) return true; return false; is false
+PASS return ("a"<0); is false
+PASS if (("a"<0)) return true; return false; is false
+PASS var k = 0; while (("a"<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"<0); ) if (k++) return true; return false; is false
+PASS return ("a"<=0); is false
+PASS if (("a"<=0)) return true; return false; is false
+PASS var k = 0; while (("a"<=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"<=0); ) if (k++) return true; return false; is false
+PASS return ("a"<0) || 1; is true
+PASS if (("a"<0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<=0) || 1; is true
+PASS if (("a"<=0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<=0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<0) && 1; is false
+PASS if (("a"<0) && 1) return true; return false; is false
+PASS var k = 0; while (("a"<0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"<0) && 1; ) if (k++) return true; return false; is false
+PASS return ("a"<=0) && 1; is false
+PASS if (("a"<=0) && 1) return true; return false; is false
+PASS var k = 0; while (("a"<=0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"<=0) && 1; ) if (k++) return true; return false; is false
+PASS return ("a"<0) || 1; is true
+PASS if (("a"<0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<=0) || 1; is true
+PASS if (("a"<=0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<0); is true
+PASS if (1 || ("a"<0)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<0); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<=0); is true
+PASS if (1 || ("a"<=0)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<=0); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"<0); is false
+PASS if (1 && ("a"<0)) return true; return false; is false
+PASS var k = 0; while (1 && ("a"<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"<0); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"<=0); is false
+PASS if (1 && ("a"<=0)) return true; return false; is false
+PASS var k = 0; while (1 && ("a"<=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"<=0); ) if (k++) return true; return false; is false
+PASS return (0<"a"); is false
+PASS if ((0<"a")) return true; return false; is false
+PASS var k = 0; while ((0<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<"a"); ) if (k++) return true; return false; is false
+PASS return (0<="a"); is false
+PASS if ((0<="a")) return true; return false; is false
+PASS var k = 0; while ((0<="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<="a"); ) if (k++) return true; return false; is false
+PASS return (0<"a") || 1; is true
+PASS if ((0<"a") || 1) return true; return false; is true
+PASS var k = 0; while ((0<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"a") || 1; ) if (k++) return true; return false; is true
+PASS return (0<="a") || 1; is true
+PASS if ((0<="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0<"a") && 1; is false
+PASS if ((0<"a") && 1) return true; return false; is false
+PASS var k = 0; while ((0<"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<"a") && 1; ) if (k++) return true; return false; is false
+PASS return (0<="a") && 1; is false
+PASS if ((0<="a") && 1) return true; return false; is false
+PASS var k = 0; while ((0<="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<="a") && 1; ) if (k++) return true; return false; is false
+PASS return (0<"a") || 1; is true
+PASS if ((0<"a") || 1) return true; return false; is true
+PASS var k = 0; while ((0<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"a") || 1; ) if (k++) return true; return false; is true
+PASS return (0<="a") || 1; is true
+PASS if ((0<="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<"a"); is true
+PASS if (1 || (0<"a")) return true; return false; is true
+PASS var k = 0; while (1 || (0<"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<"a"); ) if (k++) return true; return false; is true
+PASS return 1 || (0<="a"); is true
+PASS if (1 || (0<="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (0<"a"); is false
+PASS if (1 && (0<"a")) return true; return false; is false
+PASS var k = 0; while (1 && (0<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<"a"); ) if (k++) return true; return false; is false
+PASS return 1 && (0<="a"); is false
+PASS if (1 && (0<="a")) return true; return false; is false
+PASS var k = 0; while (1 && (0<="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<="a"); ) if (k++) return true; return false; is false
+PASS return (letterA<0); is false
+PASS if ((letterA<0)) return true; return false; is false
+PASS var k = 0; while ((letterA<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<0); ) if (k++) return true; return false; is false
+PASS return (letterA<=0); is false
+PASS if ((letterA<=0)) return true; return false; is false
+PASS var k = 0; while ((letterA<=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<=0); ) if (k++) return true; return false; is false
+PASS return (letterA<0) || 1; is true
+PASS if ((letterA<0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<=0) || 1; is true
+PASS if ((letterA<=0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<=0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<0) && 1; is false
+PASS if ((letterA<0) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA<0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<0) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA<=0) && 1; is false
+PASS if ((letterA<=0) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA<=0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<=0) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA<0) || 1; is true
+PASS if ((letterA<0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<=0) || 1; is true
+PASS if ((letterA<=0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<0); is true
+PASS if (1 || (letterA<0)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<0); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<=0); is true
+PASS if (1 || (letterA<=0)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<=0); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA<0); is false
+PASS if (1 && (letterA<0)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA<0); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA<=0); is false
+PASS if (1 && (letterA<=0)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA<=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA<=0); ) if (k++) return true; return false; is false
+PASS return (letterA<"a"); is false
+PASS if ((letterA<"a")) return true; return false; is false
+PASS var k = 0; while ((letterA<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<"a"); ) if (k++) return true; return false; is false
+PASS return (letterA<="a"); is true
+PASS if ((letterA<="a")) return true; return false; is true
+PASS var k = 0; while ((letterA<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="a"); ) if (k++) return true; return false; is true
+PASS return (letterA<"a") || 1; is true
+PASS if ((letterA<"a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<="a") || 1; is true
+PASS if ((letterA<="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<"a") && 1; is false
+PASS if ((letterA<"a") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA<"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<"a") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA<="a") && 1; is true
+PASS if ((letterA<="a") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="a") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA<"a") || 1; is true
+PASS if ((letterA<"a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<="a") || 1; is true
+PASS if ((letterA<="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<"a"); is true
+PASS if (1 || (letterA<"a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<"a"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<="a"); is true
+PASS if (1 || (letterA<="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA<"a"); is false
+PASS if (1 && (letterA<"a")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA<"a"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA<="a"); is true
+PASS if (1 && (letterA<="a")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA<="a"); ) if (k++) return true; return false; is true
+PASS return (0<"a"); is false
+PASS if ((0<"a")) return true; return false; is false
+PASS var k = 0; while ((0<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<"a"); ) if (k++) return true; return false; is false
+PASS return (0<="a"); is false
+PASS if ((0<="a")) return true; return false; is false
+PASS var k = 0; while ((0<="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<="a"); ) if (k++) return true; return false; is false
+PASS return (0<"a") || 1; is true
+PASS if ((0<"a") || 1) return true; return false; is true
+PASS var k = 0; while ((0<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"a") || 1; ) if (k++) return true; return false; is true
+PASS return (0<="a") || 1; is true
+PASS if ((0<="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0<"a") && 1; is false
+PASS if ((0<"a") && 1) return true; return false; is false
+PASS var k = 0; while ((0<"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<"a") && 1; ) if (k++) return true; return false; is false
+PASS return (0<="a") && 1; is false
+PASS if ((0<="a") && 1) return true; return false; is false
+PASS var k = 0; while ((0<="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<="a") && 1; ) if (k++) return true; return false; is false
+PASS return (0<"a") || 1; is true
+PASS if ((0<"a") || 1) return true; return false; is true
+PASS var k = 0; while ((0<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"a") || 1; ) if (k++) return true; return false; is true
+PASS return (0<="a") || 1; is true
+PASS if ((0<="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<"a"); is true
+PASS if (1 || (0<"a")) return true; return false; is true
+PASS var k = 0; while (1 || (0<"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<"a"); ) if (k++) return true; return false; is true
+PASS return 1 || (0<="a"); is true
+PASS if (1 || (0<="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (0<"a"); is false
+PASS if (1 && (0<"a")) return true; return false; is false
+PASS var k = 0; while (1 && (0<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<"a"); ) if (k++) return true; return false; is false
+PASS return 1 && (0<="a"); is false
+PASS if (1 && (0<="a")) return true; return false; is false
+PASS var k = 0; while (1 && (0<="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<="a"); ) if (k++) return true; return false; is false
+PASS return (letterA<letterA); is false
+PASS if ((letterA<letterA)) return true; return false; is false
+PASS var k = 0; while ((letterA<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<letterA); ) if (k++) return true; return false; is false
+PASS return (letterA<=letterA); is true
+PASS if ((letterA<=letterA)) return true; return false; is true
+PASS var k = 0; while ((letterA<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<=letterA); ) if (k++) return true; return false; is true
+PASS return (letterA<letterA) || 1; is true
+PASS if ((letterA<letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<=letterA) || 1; is true
+PASS if ((letterA<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<letterA) && 1; is false
+PASS if ((letterA<letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA<letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA<=letterA) && 1; is true
+PASS if ((letterA<=letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((letterA<=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (letterA<letterA) || 1; is true
+PASS if ((letterA<letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<=letterA) || 1; is true
+PASS if ((letterA<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<letterA); is true
+PASS if (1 || (letterA<letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<=letterA); is true
+PASS if (1 || (letterA<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA<letterA); is false
+PASS if (1 && (letterA<letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA<letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA<=letterA); is true
+PASS if (1 && (letterA<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (letterA<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA<=letterA); ) if (k++) return true; return false; is true
+PASS return (0<letterA); is false
+PASS if ((0<letterA)) return true; return false; is false
+PASS var k = 0; while ((0<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<letterA); ) if (k++) return true; return false; is false
+PASS return (0<=letterA); is false
+PASS if ((0<=letterA)) return true; return false; is false
+PASS var k = 0; while ((0<=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<=letterA); ) if (k++) return true; return false; is false
+PASS return (0<letterA) || 1; is true
+PASS if ((0<letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=letterA) || 1; is true
+PASS if ((0<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0<letterA) && 1; is false
+PASS if ((0<letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0<letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0<=letterA) && 1; is false
+PASS if ((0<=letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0<=letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<=letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0<letterA) || 1; is true
+PASS if ((0<letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=letterA) || 1; is true
+PASS if ((0<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<letterA); is true
+PASS if (1 || (0<letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0<letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (0<=letterA); is true
+PASS if (1 || (0<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (0<letterA); is false
+PASS if (1 && (0<letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (0<=letterA); is false
+PASS if (1 && (0<=letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0<=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<=letterA); ) if (k++) return true; return false; is false
+PASS return ("a"<letterA); is false
+PASS if (("a"<letterA)) return true; return false; is false
+PASS var k = 0; while (("a"<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"<letterA); ) if (k++) return true; return false; is false
+PASS return ("a"<=letterA); is true
+PASS if (("a"<=letterA)) return true; return false; is true
+PASS var k = 0; while (("a"<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<=letterA); ) if (k++) return true; return false; is true
+PASS return ("a"<letterA) || 1; is true
+PASS if (("a"<letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<=letterA) || 1; is true
+PASS if (("a"<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<letterA) && 1; is false
+PASS if (("a"<letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("a"<letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"<letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("a"<=letterA) && 1; is true
+PASS if (("a"<=letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("a"<=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("a"<letterA) || 1; is true
+PASS if (("a"<letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<=letterA) || 1; is true
+PASS if (("a"<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<letterA); is true
+PASS if (1 || ("a"<letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<=letterA); is true
+PASS if (1 || ("a"<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"<letterA); is false
+PASS if (1 && ("a"<letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("a"<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"<letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"<=letterA); is true
+PASS if (1 && ("a"<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("a"<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"<=letterA); ) if (k++) return true; return false; is true
+PASS return (0<letterA); is false
+PASS if ((0<letterA)) return true; return false; is false
+PASS var k = 0; while ((0<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<letterA); ) if (k++) return true; return false; is false
+PASS return (0<=letterA); is false
+PASS if ((0<=letterA)) return true; return false; is false
+PASS var k = 0; while ((0<=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<=letterA); ) if (k++) return true; return false; is false
+PASS return (0<letterA) || 1; is true
+PASS if ((0<letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=letterA) || 1; is true
+PASS if ((0<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0<letterA) && 1; is false
+PASS if ((0<letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0<letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0<=letterA) && 1; is false
+PASS if ((0<=letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0<=letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<=letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0<letterA) || 1; is true
+PASS if ((0<letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=letterA) || 1; is true
+PASS if ((0<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<letterA); is true
+PASS if (1 || (0<letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0<letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (0<=letterA); is true
+PASS if (1 || (0<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (0<letterA); is false
+PASS if (1 && (0<letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (0<=letterA); is false
+PASS if (1 && (0<=letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0<=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<=letterA); ) if (k++) return true; return false; is false
+PASS return (0<"0"); is false
+PASS if ((0<"0")) return true; return false; is false
+PASS var k = 0; while ((0<"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<"0"); ) if (k++) return true; return false; is false
+PASS return (0<="0"); is true
+PASS if ((0<="0")) return true; return false; is true
+PASS var k = 0; while ((0<="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="0"); ) if (k++) return true; return false; is true
+PASS return (0<"0") || 1; is true
+PASS if ((0<"0") || 1) return true; return false; is true
+PASS var k = 0; while ((0<"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"0") || 1; ) if (k++) return true; return false; is true
+PASS return (0<="0") || 1; is true
+PASS if ((0<="0") || 1) return true; return false; is true
+PASS var k = 0; while ((0<="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="0") || 1; ) if (k++) return true; return false; is true
+PASS return (0<"0") && 1; is false
+PASS if ((0<"0") && 1) return true; return false; is false
+PASS var k = 0; while ((0<"0") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<"0") && 1; ) if (k++) return true; return false; is false
+PASS return (0<="0") && 1; is true
+PASS if ((0<="0") && 1) return true; return false; is true
+PASS var k = 0; while ((0<="0") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="0") && 1; ) if (k++) return true; return false; is true
+PASS return (0<"0") || 1; is true
+PASS if ((0<"0") || 1) return true; return false; is true
+PASS var k = 0; while ((0<"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"0") || 1; ) if (k++) return true; return false; is true
+PASS return (0<="0") || 1; is true
+PASS if ((0<="0") || 1) return true; return false; is true
+PASS var k = 0; while ((0<="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="0") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<"0"); is true
+PASS if (1 || (0<"0")) return true; return false; is true
+PASS var k = 0; while (1 || (0<"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<"0"); ) if (k++) return true; return false; is true
+PASS return 1 || (0<="0"); is true
+PASS if (1 || (0<="0")) return true; return false; is true
+PASS var k = 0; while (1 || (0<="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<="0"); ) if (k++) return true; return false; is true
+PASS return 1 && (0<"0"); is false
+PASS if (1 && (0<"0")) return true; return false; is false
+PASS var k = 0; while (1 && (0<"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<"0"); ) if (k++) return true; return false; is false
+PASS return 1 && (0<="0"); is true
+PASS if (1 && (0<="0")) return true; return false; is true
+PASS var k = 0; while (1 && (0<="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0<="0"); ) if (k++) return true; return false; is true
+PASS return (Zero<letter0); is false
+PASS if ((Zero<letter0)) return true; return false; is false
+PASS var k = 0; while ((Zero<letter0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero<letter0); ) if (k++) return true; return false; is false
+PASS return (Zero<=letter0); is true
+PASS if ((Zero<=letter0)) return true; return false; is true
+PASS var k = 0; while ((Zero<=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=letter0); ) if (k++) return true; return false; is true
+PASS return (Zero<letter0) || 1; is true
+PASS if ((Zero<letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<=letter0) || 1; is true
+PASS if ((Zero<=letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<=letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<letter0) && 1; is false
+PASS if ((Zero<letter0) && 1) return true; return false; is false
+PASS var k = 0; while ((Zero<letter0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero<letter0) && 1; ) if (k++) return true; return false; is false
+PASS return (Zero<=letter0) && 1; is true
+PASS if ((Zero<=letter0) && 1) return true; return false; is true
+PASS var k = 0; while ((Zero<=letter0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=letter0) && 1; ) if (k++) return true; return false; is true
+PASS return (Zero<letter0) || 1; is true
+PASS if ((Zero<letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<=letter0) || 1; is true
+PASS if ((Zero<=letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<=letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=letter0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (Zero<letter0); is true
+PASS if (1 || (Zero<letter0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero<letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero<letter0); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero<=letter0); is true
+PASS if (1 || (Zero<=letter0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero<=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero<=letter0); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero<letter0); is false
+PASS if (1 && (Zero<letter0)) return true; return false; is false
+PASS var k = 0; while (1 && (Zero<letter0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero<letter0); ) if (k++) return true; return false; is false
+PASS return 1 && (Zero<=letter0); is true
+PASS if (1 && (Zero<=letter0)) return true; return false; is true
+PASS var k = 0; while (1 && (Zero<=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero<=letter0); ) if (k++) return true; return false; is true
+PASS return (0<letter0); is false
+PASS if ((0<letter0)) return true; return false; is false
+PASS var k = 0; while ((0<letter0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<letter0); ) if (k++) return true; return false; is false
+PASS return (0<=letter0); is true
+PASS if ((0<=letter0)) return true; return false; is true
+PASS var k = 0; while ((0<=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=letter0); ) if (k++) return true; return false; is true
+PASS return (0<letter0) || 1; is true
+PASS if ((0<letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((0<letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=letter0) || 1; is true
+PASS if ((0<=letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (0<letter0) && 1; is false
+PASS if ((0<letter0) && 1) return true; return false; is false
+PASS var k = 0; while ((0<letter0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<letter0) && 1; ) if (k++) return true; return false; is false
+PASS return (0<=letter0) && 1; is true
+PASS if ((0<=letter0) && 1) return true; return false; is true
+PASS var k = 0; while ((0<=letter0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=letter0) && 1; ) if (k++) return true; return false; is true
+PASS return (0<letter0) || 1; is true
+PASS if ((0<letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((0<letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=letter0) || 1; is true
+PASS if ((0<=letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=letter0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<letter0); is true
+PASS if (1 || (0<letter0)) return true; return false; is true
+PASS var k = 0; while (1 || (0<letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<letter0); ) if (k++) return true; return false; is true
+PASS return 1 || (0<=letter0); is true
+PASS if (1 || (0<=letter0)) return true; return false; is true
+PASS var k = 0; while (1 || (0<=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<=letter0); ) if (k++) return true; return false; is true
+PASS return 1 && (0<letter0); is false
+PASS if (1 && (0<letter0)) return true; return false; is false
+PASS var k = 0; while (1 && (0<letter0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<letter0); ) if (k++) return true; return false; is false
+PASS return 1 && (0<=letter0); is true
+PASS if (1 && (0<=letter0)) return true; return false; is true
+PASS var k = 0; while (1 && (0<=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0<=letter0); ) if (k++) return true; return false; is true
+PASS return (Zero<"0"); is false
+PASS if ((Zero<"0")) return true; return false; is false
+PASS var k = 0; while ((Zero<"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero<"0"); ) if (k++) return true; return false; is false
+PASS return (Zero<="0"); is true
+PASS if ((Zero<="0")) return true; return false; is true
+PASS var k = 0; while ((Zero<="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<="0"); ) if (k++) return true; return false; is true
+PASS return (Zero<"0") || 1; is true
+PASS if ((Zero<"0") || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<"0") || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<="0") || 1; is true
+PASS if ((Zero<="0") || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<="0") || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<"0") && 1; is false
+PASS if ((Zero<"0") && 1) return true; return false; is false
+PASS var k = 0; while ((Zero<"0") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero<"0") && 1; ) if (k++) return true; return false; is false
+PASS return (Zero<="0") && 1; is true
+PASS if ((Zero<="0") && 1) return true; return false; is true
+PASS var k = 0; while ((Zero<="0") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<="0") && 1; ) if (k++) return true; return false; is true
+PASS return (Zero<"0") || 1; is true
+PASS if ((Zero<"0") || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<"0") || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<="0") || 1; is true
+PASS if ((Zero<="0") || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<="0") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (Zero<"0"); is true
+PASS if (1 || (Zero<"0")) return true; return false; is true
+PASS var k = 0; while (1 || (Zero<"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero<"0"); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero<="0"); is true
+PASS if (1 || (Zero<="0")) return true; return false; is true
+PASS var k = 0; while (1 || (Zero<="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero<="0"); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero<"0"); is false
+PASS if (1 && (Zero<"0")) return true; return false; is false
+PASS var k = 0; while (1 && (Zero<"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero<"0"); ) if (k++) return true; return false; is false
+PASS return 1 && (Zero<="0"); is true
+PASS if (1 && (Zero<="0")) return true; return false; is true
+PASS var k = 0; while (1 && (Zero<="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero<="0"); ) if (k++) return true; return false; is true
+PASS return (-1<"0"); is true
+PASS if ((-1<"0")) return true; return false; is true
+PASS var k = 0; while ((-1<"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1<"0"); ) if (k++) return true; return false; is true
+PASS return (-1<="0"); is true
+PASS if ((-1<="0")) return true; return false; is true
+PASS var k = 0; while ((-1<="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1<="0"); ) if (k++) return true; return false; is true
+PASS return (-1<"0") || 1; is true
+PASS if ((-1<"0") || 1) return true; return false; is true
+PASS var k = 0; while ((-1<"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1<"0") || 1; ) if (k++) return true; return false; is true
+PASS return (-1<="0") || 1; is true
+PASS if ((-1<="0") || 1) return true; return false; is true
+PASS var k = 0; while ((-1<="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1<="0") || 1; ) if (k++) return true; return false; is true
+PASS return (-1<"0") && 1; is true
+PASS if ((-1<"0") && 1) return true; return false; is true
+PASS var k = 0; while ((-1<"0") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1<"0") && 1; ) if (k++) return true; return false; is true
+PASS return (-1<="0") && 1; is true
+PASS if ((-1<="0") && 1) return true; return false; is true
+PASS var k = 0; while ((-1<="0") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1<="0") && 1; ) if (k++) return true; return false; is true
+PASS return (-1<"0") || 1; is true
+PASS if ((-1<"0") || 1) return true; return false; is true
+PASS var k = 0; while ((-1<"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1<"0") || 1; ) if (k++) return true; return false; is true
+PASS return (-1<="0") || 1; is true
+PASS if ((-1<="0") || 1) return true; return false; is true
+PASS var k = 0; while ((-1<="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1<="0") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (-1<"0"); is true
+PASS if (1 || (-1<"0")) return true; return false; is true
+PASS var k = 0; while (1 || (-1<"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (-1<"0"); ) if (k++) return true; return false; is true
+PASS return 1 || (-1<="0"); is true
+PASS if (1 || (-1<="0")) return true; return false; is true
+PASS var k = 0; while (1 || (-1<="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (-1<="0"); ) if (k++) return true; return false; is true
+PASS return 1 && (-1<"0"); is true
+PASS if (1 && (-1<"0")) return true; return false; is true
+PASS var k = 0; while (1 && (-1<"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (-1<"0"); ) if (k++) return true; return false; is true
+PASS return 1 && (-1<="0"); is true
+PASS if (1 && (-1<="0")) return true; return false; is true
+PASS var k = 0; while (1 && (-1<="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (-1<="0"); ) if (k++) return true; return false; is true
+PASS return (1<"0"); is false
+PASS if ((1<"0")) return true; return false; is false
+PASS var k = 0; while ((1<"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<"0"); ) if (k++) return true; return false; is false
+PASS return (1<="0"); is false
+PASS if ((1<="0")) return true; return false; is false
+PASS var k = 0; while ((1<="0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<="0"); ) if (k++) return true; return false; is false
+PASS return (1<"0") || 1; is true
+PASS if ((1<"0") || 1) return true; return false; is true
+PASS var k = 0; while ((1<"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<"0") || 1; ) if (k++) return true; return false; is true
+PASS return (1<="0") || 1; is true
+PASS if ((1<="0") || 1) return true; return false; is true
+PASS var k = 0; while ((1<="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<="0") || 1; ) if (k++) return true; return false; is true
+PASS return (1<"0") && 1; is false
+PASS if ((1<"0") && 1) return true; return false; is false
+PASS var k = 0; while ((1<"0") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<"0") && 1; ) if (k++) return true; return false; is false
+PASS return (1<="0") && 1; is false
+PASS if ((1<="0") && 1) return true; return false; is false
+PASS var k = 0; while ((1<="0") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<="0") && 1; ) if (k++) return true; return false; is false
+PASS return (1<"0") || 1; is true
+PASS if ((1<"0") || 1) return true; return false; is true
+PASS var k = 0; while ((1<"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<"0") || 1; ) if (k++) return true; return false; is true
+PASS return (1<="0") || 1; is true
+PASS if ((1<="0") || 1) return true; return false; is true
+PASS var k = 0; while ((1<="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<="0") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (1<"0"); is true
+PASS if (1 || (1<"0")) return true; return false; is true
+PASS var k = 0; while (1 || (1<"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1<"0"); ) if (k++) return true; return false; is true
+PASS return 1 || (1<="0"); is true
+PASS if (1 || (1<="0")) return true; return false; is true
+PASS var k = 0; while (1 || (1<="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1<="0"); ) if (k++) return true; return false; is true
+PASS return 1 && (1<"0"); is false
+PASS if (1 && (1<"0")) return true; return false; is false
+PASS var k = 0; while (1 && (1<"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (1<"0"); ) if (k++) return true; return false; is false
+PASS return 1 && (1<="0"); is false
+PASS if (1 && (1<="0")) return true; return false; is false
+PASS var k = 0; while (1 && (1<="0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (1<="0"); ) if (k++) return true; return false; is false
+PASS return (0<"-1"); is false
+PASS if ((0<"-1")) return true; return false; is false
+PASS var k = 0; while ((0<"-1")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<"-1"); ) if (k++) return true; return false; is false
+PASS return (0<="-1"); is false
+PASS if ((0<="-1")) return true; return false; is false
+PASS var k = 0; while ((0<="-1")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<="-1"); ) if (k++) return true; return false; is false
+PASS return (0<"-1") || 1; is true
+PASS if ((0<"-1") || 1) return true; return false; is true
+PASS var k = 0; while ((0<"-1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"-1") || 1; ) if (k++) return true; return false; is true
+PASS return (0<="-1") || 1; is true
+PASS if ((0<="-1") || 1) return true; return false; is true
+PASS var k = 0; while ((0<="-1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="-1") || 1; ) if (k++) return true; return false; is true
+PASS return (0<"-1") && 1; is false
+PASS if ((0<"-1") && 1) return true; return false; is false
+PASS var k = 0; while ((0<"-1") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<"-1") && 1; ) if (k++) return true; return false; is false
+PASS return (0<="-1") && 1; is false
+PASS if ((0<="-1") && 1) return true; return false; is false
+PASS var k = 0; while ((0<="-1") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<="-1") && 1; ) if (k++) return true; return false; is false
+PASS return (0<"-1") || 1; is true
+PASS if ((0<"-1") || 1) return true; return false; is true
+PASS var k = 0; while ((0<"-1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"-1") || 1; ) if (k++) return true; return false; is true
+PASS return (0<="-1") || 1; is true
+PASS if ((0<="-1") || 1) return true; return false; is true
+PASS var k = 0; while ((0<="-1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="-1") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<"-1"); is true
+PASS if (1 || (0<"-1")) return true; return false; is true
+PASS var k = 0; while (1 || (0<"-1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<"-1"); ) if (k++) return true; return false; is true
+PASS return 1 || (0<="-1"); is true
+PASS if (1 || (0<="-1")) return true; return false; is true
+PASS var k = 0; while (1 || (0<="-1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<="-1"); ) if (k++) return true; return false; is true
+PASS return 1 && (0<"-1"); is false
+PASS if (1 && (0<"-1")) return true; return false; is false
+PASS var k = 0; while (1 && (0<"-1")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<"-1"); ) if (k++) return true; return false; is false
+PASS return 1 && (0<="-1"); is false
+PASS if (1 && (0<="-1")) return true; return false; is false
+PASS var k = 0; while (1 && (0<="-1")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<="-1"); ) if (k++) return true; return false; is false
+PASS return (0<"1"); is true
+PASS if ((0<"1")) return true; return false; is true
+PASS var k = 0; while ((0<"1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"1"); ) if (k++) return true; return false; is true
+PASS return (0<="1"); is true
+PASS if ((0<="1")) return true; return false; is true
+PASS var k = 0; while ((0<="1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="1"); ) if (k++) return true; return false; is true
+PASS return (0<"1") || 1; is true
+PASS if ((0<"1") || 1) return true; return false; is true
+PASS var k = 0; while ((0<"1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"1") || 1; ) if (k++) return true; return false; is true
+PASS return (0<="1") || 1; is true
+PASS if ((0<="1") || 1) return true; return false; is true
+PASS var k = 0; while ((0<="1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="1") || 1; ) if (k++) return true; return false; is true
+PASS return (0<"1") && 1; is true
+PASS if ((0<"1") && 1) return true; return false; is true
+PASS var k = 0; while ((0<"1") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"1") && 1; ) if (k++) return true; return false; is true
+PASS return (0<="1") && 1; is true
+PASS if ((0<="1") && 1) return true; return false; is true
+PASS var k = 0; while ((0<="1") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="1") && 1; ) if (k++) return true; return false; is true
+PASS return (0<"1") || 1; is true
+PASS if ((0<"1") || 1) return true; return false; is true
+PASS var k = 0; while ((0<"1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"1") || 1; ) if (k++) return true; return false; is true
+PASS return (0<="1") || 1; is true
+PASS if ((0<="1") || 1) return true; return false; is true
+PASS var k = 0; while ((0<="1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="1") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<"1"); is true
+PASS if (1 || (0<"1")) return true; return false; is true
+PASS var k = 0; while (1 || (0<"1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<"1"); ) if (k++) return true; return false; is true
+PASS return 1 || (0<="1"); is true
+PASS if (1 || (0<="1")) return true; return false; is true
+PASS var k = 0; while (1 || (0<="1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<="1"); ) if (k++) return true; return false; is true
+PASS return 1 && (0<"1"); is true
+PASS if (1 && (0<"1")) return true; return false; is true
+PASS var k = 0; while (1 && (0<"1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0<"1"); ) if (k++) return true; return false; is true
+PASS return 1 && (0<="1"); is true
+PASS if (1 && (0<="1")) return true; return false; is true
+PASS var k = 0; while (1 && (0<="1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0<="1"); ) if (k++) return true; return false; is true
+PASS return (0<1); is true
+PASS if ((0<1)) return true; return false; is true
+PASS var k = 0; while ((0<1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<1); ) if (k++) return true; return false; is true
+PASS return (0<=1); is true
+PASS if ((0<=1)) return true; return false; is true
+PASS var k = 0; while ((0<=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=1); ) if (k++) return true; return false; is true
+PASS return (0<1) || 1; is true
+PASS if ((0<1) || 1) return true; return false; is true
+PASS var k = 0; while ((0<1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<1) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=1) || 1; is true
+PASS if ((0<=1) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=1) || 1; ) if (k++) return true; return false; is true
+PASS return (0<1) && 1; is true
+PASS if ((0<1) && 1) return true; return false; is true
+PASS var k = 0; while ((0<1) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<1) && 1; ) if (k++) return true; return false; is true
+PASS return (0<=1) && 1; is true
+PASS if ((0<=1) && 1) return true; return false; is true
+PASS var k = 0; while ((0<=1) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=1) && 1; ) if (k++) return true; return false; is true
+PASS return (0<1) || 1; is true
+PASS if ((0<1) || 1) return true; return false; is true
+PASS var k = 0; while ((0<1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<1) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=1) || 1; is true
+PASS if ((0<=1) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=1) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<1); is true
+PASS if (1 || (0<1)) return true; return false; is true
+PASS var k = 0; while (1 || (0<1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<1); ) if (k++) return true; return false; is true
+PASS return 1 || (0<=1); is true
+PASS if (1 || (0<=1)) return true; return false; is true
+PASS var k = 0; while (1 || (0<=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<=1); ) if (k++) return true; return false; is true
+PASS return 1 && (0<1); is true
+PASS if (1 && (0<1)) return true; return false; is true
+PASS var k = 0; while (1 && (0<1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0<1); ) if (k++) return true; return false; is true
+PASS return 1 && (0<=1); is true
+PASS if (1 && (0<=1)) return true; return false; is true
+PASS var k = 0; while (1 && (0<=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0<=1); ) if (k++) return true; return false; is true
+PASS return (0<0); is false
+PASS if ((0<0)) return true; return false; is false
+PASS var k = 0; while ((0<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<0); ) if (k++) return true; return false; is false
+PASS return (0<=0); is true
+PASS if ((0<=0)) return true; return false; is true
+PASS var k = 0; while ((0<=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=0); ) if (k++) return true; return false; is true
+PASS return (0<0) || 1; is true
+PASS if ((0<0) || 1) return true; return false; is true
+PASS var k = 0; while ((0<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<0) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=0) || 1; is true
+PASS if ((0<=0) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=0) || 1; ) if (k++) return true; return false; is true
+PASS return (0<0) && 1; is false
+PASS if ((0<0) && 1) return true; return false; is false
+PASS var k = 0; while ((0<0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<0) && 1; ) if (k++) return true; return false; is false
+PASS return (0<=0) && 1; is true
+PASS if ((0<=0) && 1) return true; return false; is true
+PASS var k = 0; while ((0<=0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=0) && 1; ) if (k++) return true; return false; is true
+PASS return (0<0) || 1; is true
+PASS if ((0<0) || 1) return true; return false; is true
+PASS var k = 0; while ((0<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<0) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=0) || 1; is true
+PASS if ((0<=0) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<0); is true
+PASS if (1 || (0<0)) return true; return false; is true
+PASS var k = 0; while (1 || (0<0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<0); ) if (k++) return true; return false; is true
+PASS return 1 || (0<=0); is true
+PASS if (1 || (0<=0)) return true; return false; is true
+PASS var k = 0; while (1 || (0<=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<=0); ) if (k++) return true; return false; is true
+PASS return 1 && (0<0); is false
+PASS if (1 && (0<0)) return true; return false; is false
+PASS var k = 0; while (1 && (0<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<0); ) if (k++) return true; return false; is false
+PASS return 1 && (0<=0); is true
+PASS if (1 && (0<=0)) return true; return false; is true
+PASS var k = 0; while (1 && (0<=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0<=0); ) if (k++) return true; return false; is true
+PASS return (1<0); is false
+PASS if ((1<0)) return true; return false; is false
+PASS var k = 0; while ((1<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<0); ) if (k++) return true; return false; is false
+PASS return (1<=0); is false
+PASS if ((1<=0)) return true; return false; is false
+PASS var k = 0; while ((1<=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<=0); ) if (k++) return true; return false; is false
+PASS return (1<0) || 1; is true
+PASS if ((1<0) || 1) return true; return false; is true
+PASS var k = 0; while ((1<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<0) || 1; ) if (k++) return true; return false; is true
+PASS return (1<=0) || 1; is true
+PASS if ((1<=0) || 1) return true; return false; is true
+PASS var k = 0; while ((1<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<=0) || 1; ) if (k++) return true; return false; is true
+PASS return (1<0) && 1; is false
+PASS if ((1<0) && 1) return true; return false; is false
+PASS var k = 0; while ((1<0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<0) && 1; ) if (k++) return true; return false; is false
+PASS return (1<=0) && 1; is false
+PASS if ((1<=0) && 1) return true; return false; is false
+PASS var k = 0; while ((1<=0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<=0) && 1; ) if (k++) return true; return false; is false
+PASS return (1<0) || 1; is true
+PASS if ((1<0) || 1) return true; return false; is true
+PASS var k = 0; while ((1<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<0) || 1; ) if (k++) return true; return false; is true
+PASS return (1<=0) || 1; is true
+PASS if ((1<=0) || 1) return true; return false; is true
+PASS var k = 0; while ((1<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (1<0); is true
+PASS if (1 || (1<0)) return true; return false; is true
+PASS var k = 0; while (1 || (1<0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1<0); ) if (k++) return true; return false; is true
+PASS return 1 || (1<=0); is true
+PASS if (1 || (1<=0)) return true; return false; is true
+PASS var k = 0; while (1 || (1<=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1<=0); ) if (k++) return true; return false; is true
+PASS return 1 && (1<0); is false
+PASS if (1 && (1<0)) return true; return false; is false
+PASS var k = 0; while (1 && (1<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (1<0); ) if (k++) return true; return false; is false
+PASS return 1 && (1<=0); is false
+PASS if (1 && (1<=0)) return true; return false; is false
+PASS var k = 0; while (1 && (1<=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (1<=0); ) if (k++) return true; return false; is false
+PASS return (Zero<1); is true
+PASS if ((Zero<1)) return true; return false; is true
+PASS var k = 0; while ((Zero<1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<1); ) if (k++) return true; return false; is true
+PASS return (Zero<=1); is true
+PASS if ((Zero<=1)) return true; return false; is true
+PASS var k = 0; while ((Zero<=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=1); ) if (k++) return true; return false; is true
+PASS return (Zero<1) || 1; is true
+PASS if ((Zero<1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<=1) || 1; is true
+PASS if ((Zero<=1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<1) && 1; is true
+PASS if ((Zero<1) && 1) return true; return false; is true
+PASS var k = 0; while ((Zero<1) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<1) && 1; ) if (k++) return true; return false; is true
+PASS return (Zero<=1) && 1; is true
+PASS if ((Zero<=1) && 1) return true; return false; is true
+PASS var k = 0; while ((Zero<=1) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=1) && 1; ) if (k++) return true; return false; is true
+PASS return (Zero<1) || 1; is true
+PASS if ((Zero<1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<=1) || 1; is true
+PASS if ((Zero<=1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=1) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (Zero<1); is true
+PASS if (1 || (Zero<1)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero<1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero<1); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero<=1); is true
+PASS if (1 || (Zero<=1)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero<=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero<=1); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero<1); is true
+PASS if (1 && (Zero<1)) return true; return false; is true
+PASS var k = 0; while (1 && (Zero<1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero<1); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero<=1); is true
+PASS if (1 && (Zero<=1)) return true; return false; is true
+PASS var k = 0; while (1 && (Zero<=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero<=1); ) if (k++) return true; return false; is true
+PASS return (Zero<0); is false
+PASS if ((Zero<0)) return true; return false; is false
+PASS var k = 0; while ((Zero<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero<0); ) if (k++) return true; return false; is false
+PASS return (Zero<=0); is true
+PASS if ((Zero<=0)) return true; return false; is true
+PASS var k = 0; while ((Zero<=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=0); ) if (k++) return true; return false; is true
+PASS return (Zero<0) || 1; is true
+PASS if ((Zero<0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<=0) || 1; is true
+PASS if ((Zero<=0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<0) && 1; is false
+PASS if ((Zero<0) && 1) return true; return false; is false
+PASS var k = 0; while ((Zero<0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero<0) && 1; ) if (k++) return true; return false; is false
+PASS return (Zero<=0) && 1; is true
+PASS if ((Zero<=0) && 1) return true; return false; is true
+PASS var k = 0; while ((Zero<=0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=0) && 1; ) if (k++) return true; return false; is true
+PASS return (Zero<0) || 1; is true
+PASS if ((Zero<0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<=0) || 1; is true
+PASS if ((Zero<=0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (Zero<0); is true
+PASS if (1 || (Zero<0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero<0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero<0); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero<=0); is true
+PASS if (1 || (Zero<=0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero<=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero<=0); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero<0); is false
+PASS if (1 && (Zero<0)) return true; return false; is false
+PASS var k = 0; while (1 && (Zero<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero<0); ) if (k++) return true; return false; is false
+PASS return 1 && (Zero<=0); is true
+PASS if (1 && (Zero<=0)) return true; return false; is true
+PASS var k = 0; while (1 && (Zero<=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero<=0); ) if (k++) return true; return false; is true
+PASS return (1<Zero); is false
+PASS if ((1<Zero)) return true; return false; is false
+PASS var k = 0; while ((1<Zero)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<Zero); ) if (k++) return true; return false; is false
+PASS return (1<=Zero); is false
+PASS if ((1<=Zero)) return true; return false; is false
+PASS var k = 0; while ((1<=Zero)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<=Zero); ) if (k++) return true; return false; is false
+PASS return (1<Zero) || 1; is true
+PASS if ((1<Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1<Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1<=Zero) || 1; is true
+PASS if ((1<=Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1<=Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<=Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1<Zero) && 1; is false
+PASS if ((1<Zero) && 1) return true; return false; is false
+PASS var k = 0; while ((1<Zero) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<Zero) && 1; ) if (k++) return true; return false; is false
+PASS return (1<=Zero) && 1; is false
+PASS if ((1<=Zero) && 1) return true; return false; is false
+PASS var k = 0; while ((1<=Zero) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<=Zero) && 1; ) if (k++) return true; return false; is false
+PASS return (1<Zero) || 1; is true
+PASS if ((1<Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1<Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1<=Zero) || 1; is true
+PASS if ((1<=Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1<=Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<=Zero) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (1<Zero); is true
+PASS if (1 || (1<Zero)) return true; return false; is true
+PASS var k = 0; while (1 || (1<Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1<Zero); ) if (k++) return true; return false; is true
+PASS return 1 || (1<=Zero); is true
+PASS if (1 || (1<=Zero)) return true; return false; is true
+PASS var k = 0; while (1 || (1<=Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1<=Zero); ) if (k++) return true; return false; is true
+PASS return 1 && (1<Zero); is false
+PASS if (1 && (1<Zero)) return true; return false; is false
+PASS var k = 0; while (1 && (1<Zero)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (1<Zero); ) if (k++) return true; return false; is false
+PASS return 1 && (1<=Zero); is false
+PASS if (1 && (1<=Zero)) return true; return false; is false
+PASS var k = 0; while (1 && (1<=Zero)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (1<=Zero); ) if (k++) return true; return false; is false
+PASS return (0<One); is true
+PASS if ((0<One)) return true; return false; is true
+PASS var k = 0; while ((0<One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<One); ) if (k++) return true; return false; is true
+PASS return (0<=One); is true
+PASS if ((0<=One)) return true; return false; is true
+PASS var k = 0; while ((0<=One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=One); ) if (k++) return true; return false; is true
+PASS return (0<One) || 1; is true
+PASS if ((0<One) || 1) return true; return false; is true
+PASS var k = 0; while ((0<One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<One) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=One) || 1; is true
+PASS if ((0<=One) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=One) || 1; ) if (k++) return true; return false; is true
+PASS return (0<One) && 1; is true
+PASS if ((0<One) && 1) return true; return false; is true
+PASS var k = 0; while ((0<One) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<One) && 1; ) if (k++) return true; return false; is true
+PASS return (0<=One) && 1; is true
+PASS if ((0<=One) && 1) return true; return false; is true
+PASS var k = 0; while ((0<=One) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=One) && 1; ) if (k++) return true; return false; is true
+PASS return (0<One) || 1; is true
+PASS if ((0<One) || 1) return true; return false; is true
+PASS var k = 0; while ((0<One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<One) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=One) || 1; is true
+PASS if ((0<=One) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=One) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<One); is true
+PASS if (1 || (0<One)) return true; return false; is true
+PASS var k = 0; while (1 || (0<One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<One); ) if (k++) return true; return false; is true
+PASS return 1 || (0<=One); is true
+PASS if (1 || (0<=One)) return true; return false; is true
+PASS var k = 0; while (1 || (0<=One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<=One); ) if (k++) return true; return false; is true
+PASS return 1 && (0<One); is true
+PASS if (1 && (0<One)) return true; return false; is true
+PASS var k = 0; while (1 && (0<One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0<One); ) if (k++) return true; return false; is true
+PASS return 1 && (0<=One); is true
+PASS if (1 && (0<=One)) return true; return false; is true
+PASS var k = 0; while (1 && (0<=One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0<=One); ) if (k++) return true; return false; is true
+PASS return (One<0); is false
+PASS if ((One<0)) return true; return false; is false
+PASS var k = 0; while ((One<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (One<0); ) if (k++) return true; return false; is false
+PASS return (One<=0); is false
+PASS if ((One<=0)) return true; return false; is false
+PASS var k = 0; while ((One<=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (One<=0); ) if (k++) return true; return false; is false
+PASS return (One<0) || 1; is true
+PASS if ((One<0) || 1) return true; return false; is true
+PASS var k = 0; while ((One<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One<0) || 1; ) if (k++) return true; return false; is true
+PASS return (One<=0) || 1; is true
+PASS if ((One<=0) || 1) return true; return false; is true
+PASS var k = 0; while ((One<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One<=0) || 1; ) if (k++) return true; return false; is true
+PASS return (One<0) && 1; is false
+PASS if ((One<0) && 1) return true; return false; is false
+PASS var k = 0; while ((One<0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (One<0) && 1; ) if (k++) return true; return false; is false
+PASS return (One<=0) && 1; is false
+PASS if ((One<=0) && 1) return true; return false; is false
+PASS var k = 0; while ((One<=0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (One<=0) && 1; ) if (k++) return true; return false; is false
+PASS return (One<0) || 1; is true
+PASS if ((One<0) || 1) return true; return false; is true
+PASS var k = 0; while ((One<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One<0) || 1; ) if (k++) return true; return false; is true
+PASS return (One<=0) || 1; is true
+PASS if ((One<=0) || 1) return true; return false; is true
+PASS var k = 0; while ((One<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One<=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (One<0); is true
+PASS if (1 || (One<0)) return true; return false; is true
+PASS var k = 0; while (1 || (One<0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (One<0); ) if (k++) return true; return false; is true
+PASS return 1 || (One<=0); is true
+PASS if (1 || (One<=0)) return true; return false; is true
+PASS var k = 0; while (1 || (One<=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (One<=0); ) if (k++) return true; return false; is true
+PASS return 1 && (One<0); is false
+PASS if (1 && (One<0)) return true; return false; is false
+PASS var k = 0; while (1 && (One<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (One<0); ) if (k++) return true; return false; is false
+PASS return 1 && (One<=0); is false
+PASS if (1 && (One<=0)) return true; return false; is false
+PASS var k = 0; while (1 && (One<=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (One<=0); ) if (k++) return true; return false; is false
+PASS 0 <= 0 is true
+PASS 0 <= 1 is true
+PASS 1 <= 1 is true
+PASS 0 < 1 is true
+PASS 1 <= 0 is false
+PASS 2 <= 1 is false
+PASS 1 < 1 is false
+PASS 2 < 1 is false
+PASS if (0 <= 0 || 0) true; else false is true
+PASS if (0 <= 1 || 0) true; else false is true
+PASS if (1 <= 1 || 0) true; else false is true
+PASS if (0 <  1 || 0) true; else false is true
+PASS if (1 <= 0 || 0) true; else false is false
+PASS if (2 <= 1 || 0) true; else false is false
+PASS if (1 <  1 || 0) true; else false is false
+PASS if (2 <  1 || 0) true; else false is false
+PASS 0 <= 0.5 is true
+PASS 0 <= 1.5 is true
+PASS 1 <= 1.5 is true
+PASS 0 < 1.5 is true
+PASS 1 <= 0.5 is false
+PASS 2 <= 1.5 is false
+PASS 1 < 1.5 is true
+PASS 2 < 1.5 is false
+PASS if (0 <= 0.5 || 0) true; else false is true
+PASS if (0 <= 1.5 || 0) true; else false is true
+PASS if (1 <= 1.5 || 0) true; else false is true
+PASS if (0 <  1.5 || 0) true; else false is true
+PASS if (1 <= 0.5 || 0) true; else false is false
+PASS if (2 <= 1.5 || 0) true; else false is false
+PASS if (1 <  1.5 || 0) true; else false is true
+PASS if (2 <  1.5 || 0) true; else false is false
+PASS zero <= zero is true
+PASS zero <= 1 is true
+PASS 1 <= 1 is true
+PASS zero < 1 is true
+PASS 1 <= zero is false
+PASS 2 <= 1 is false
+PASS 1 < 1 is false
+PASS 2 < 1 is false
+PASS if (zero <= zero || 0) true; else false is true
+PASS if (zero <= 1 || zero) true; else false is true
+PASS if (1 <= 1 || zero) true; else false is true
+PASS if (zero <  1 || zero) true; else false is true
+PASS if (1 <= zero || zero) true; else false is false
+PASS if (2 <= 1 || zero) true; else false is false
+PASS if (1 <  1 || zero) true; else false is false
+PASS if (2 <  1 || zero) true; else false is false
+PASS 0 <= p5 is true
+PASS 0 <= p15 is true
+PASS 1 <= p15 is true
+PASS 0 < p15 is true
+PASS 1 <= p5 is false
+PASS 2 <= p15 is false
+PASS 1 < p15 is true
+PASS 2 < p15 is false
+PASS if (0 <= p5 || 0) true; else false is true
+PASS if (0 <= p15 || 0) true; else false is true
+PASS if (1 <= p15 || 0) true; else false is true
+PASS if (0 <  p15 || 0) true; else false is true
+PASS if (1 <= p5 || 0) true; else false is false
+PASS if (2 <= p15 || 0) true; else false is false
+PASS if (1 <  p15 || 0) true; else false is true
+PASS if (2 <  p15 || 0) true; else false is false
+PASS zero <= zero is true
+PASS zero <= one is true
+PASS one <= one is true
+PASS zero < one is true
+PASS one <= zero is false
+PASS two <= one is false
+PASS one < one is false
+PASS two < one is false
+PASS if (zero <= zero || 0) true; else false is true
+PASS if (zero <= one || zero) true; else false is true
+PASS if (one <= one || zero) true; else false is true
+PASS if (zero <  one || zero) true; else false is true
+PASS if (one <= zero || zero) true; else false is false
+PASS if (two <= one || zero) true; else false is false
+PASS if (one <  one || zero) true; else false is false
+PASS if (two <  one || zero) true; else false is false
+PASS 0 <= p5 is true
+PASS 0 <= p15 is true
+PASS one <= p15 is true
+PASS 0 < p15 is true
+PASS one <= p5 is false
+PASS two <= p15 is false
+PASS one < p15 is true
+PASS two < p15 is false
+PASS if (0 <= p5 || 0) true; else false is true
+PASS if (0 <= p15 || 0) true; else false is true
+PASS if (one <= p15 || 0) true; else false is true
+PASS if (0 <  p15 || 0) true; else false is true
+PASS if (one <= p5 || 0) true; else false is false
+PASS if (two <= p15 || 0) true; else false is false
+PASS if (one <  p15 || 0) true; else false is true
+PASS if (two <  p15 || 0) true; else false is false
+PASS  0 <    NaN is false
+PASS  NaN <  NaN is false
+PASS  0 <=   NaN is false
+PASS  NaN <= NaN is false
+PASS  0.5 <  NaN is false
+PASS  NaN <  NaN is false
+PASS  0.5 <= NaN is false
+PASS  NaN <= NaN is false
+PASS  zero < NaN is false
+PASS zero <= NaN is false
+PASS  NaN <= NaN is false
+PASS  p5  <  NaN is false
+PASS NaN  <  NaN is false
+PASS p5  <=  NaN is false
+PASS NaN  <= NaN is false
+PASS if ( 0 <    NaN) true; else false; is false
+PASS if ( NaN <  NaN) true; else false; is false
+PASS if ( 0 <=   NaN) true; else false; is false
+PASS if ( NaN <= NaN) true; else false; is false
+PASS if ( 0.5 <  NaN) true; else false; is false
+PASS if ( NaN <  NaN) true; else false; is false
+PASS if ( 0.5 <= NaN) true; else false; is false
+PASS if ( NaN <= NaN) true; else false; is false
+PASS if ( zero < NaN) true; else false; is false
+PASS if (zero <= NaN) true; else false; is false
+PASS if ( NaN <= NaN) true; else false; is false
+PASS if ( p5  <  NaN) true; else false; is false
+PASS if (NaN  <  NaN) true; else false; is false
+PASS if (p5  <=  NaN) true; else false; is false
+PASS if (NaN  <= NaN) true; else false; is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/comparison-operators-less.js b/deps/v8/test/webkit/comparison-operators-less.js
new file mode 100644 (file)
index 0000000..89c81cf
--- /dev/null
@@ -0,0 +1,252 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("test that comparison operators work correctly.")
+
+function makeTest(start, end, expression, relationship, override, invert) {
+    var resultValue = eval(relationship + expression + 0) || !!override;
+    if (invert)
+        resultValue = !resultValue;
+    var expr = start + expression + end;
+    var result = [];
+    function func(content) { var f = new Function(content); f.toString = function(){ return content}; return f; }
+    result.push([new func("return " + expr + ";"), resultValue]);
+    result.push([new func("if (" + expr + ") return true; return false;"), resultValue]);
+    result.push([new func("var k = 0; while (" + expr + ") if (k++) return true; return false;"), resultValue]);
+    result.push([new func("var k = 0; for (; " + expr + "; ) if (k++) return true; return false;"), resultValue]);
+    return result;
+}
+function doTest(lhs, rhs, relationship) {
+    var expressionParts = [["(",")"],["(", ") || 1", true],["(", ") && 1"],["(", ") || 1", true],["1 || (",")", true],["1 && (",")"]];
+    var expressions = [];
+    var tests = [];
+    for (var i = 0; i < expressionParts.length; i++) {
+        var start = expressionParts[i][0] + lhs;
+        var end = String(rhs) + expressionParts[i][1];
+        tests.push.apply(tests, makeTest(start, end, "<", relationship, expressionParts[i][2]));
+        tests.push.apply(tests, makeTest(start, end, "<=", relationship, expressionParts[i][2]));
+    }
+    for (var i = 0; i < tests.length; i++) {
+        if ((r=tests[i][0]()) == tests[i][1])
+            testPassed(tests[i][0] + " is " + tests[i][1]);
+        else
+            testFailed(tests[i][0] + " is " + r + " and should be " + tests[i][1] + ".");
+    }
+}
+
+var letterA = "a";
+var letterB = "b";
+var letter0 = "0";
+var One = 1;
+var Zero = 0;
+doTest('"a"', '"b"', -1);
+doTest('"a"', '"a"', 0);
+doTest('"b"', '"a"', 1);
+doTest('letterA', '"b"', -1);
+doTest('letterA', '"a"', 0);
+doTest('"b"', '"a"', 1);
+doTest('letterA', '"b"', -1);
+doTest('letterA', 'letterA', 0);
+doTest('"b"', 'letterA', 1);
+doTest('"a"', '"b"', -1);
+doTest('"a"', 'letterA', 0);
+doTest('"b"', 'letterA', 1);
+
+doTest('"a"', '0', NaN);
+doTest('0', '"a"', NaN);
+doTest('letterA', '0', NaN);
+doTest('letterA', '"a"', 0);
+doTest('0', '"a"', NaN);
+doTest('letterA', 'letterA', 0);
+doTest('0', 'letterA', NaN);
+doTest('"a"', 'letterA', 0);
+doTest('0', 'letterA', NaN);
+
+
+doTest('0', '"0"', 0);
+doTest('Zero', 'letter0', 0);
+doTest('0', 'letter0', 0);
+doTest('Zero', '"0"', 0);
+doTest('-1', '"0"', -1);
+doTest('1', '"0"', 1);
+doTest('0', '"-1"', 1);
+doTest('0', '"1"', -1);
+
+doTest('0', '1', -1);
+doTest('0', '0', 0);
+doTest('1', '0', 1);
+doTest('Zero', '1', -1);
+doTest('Zero', '0', 0);
+doTest('1', 'Zero', 1);
+doTest('0', 'One', -1);
+doTest('One', '0', 1);
+
+shouldBeTrue("0 <= 0");
+shouldBeTrue("0 <= 1");
+shouldBeTrue("1 <= 1");
+shouldBeTrue("0 < 1");
+shouldBeFalse("1 <= 0");
+shouldBeFalse("2 <= 1");
+shouldBeFalse("1 < 1");
+shouldBeFalse("2 < 1");
+
+ shouldBeTrue("if (0 <= 0 || 0) true; else false");
+ shouldBeTrue("if (0 <= 1 || 0) true; else false");
+ shouldBeTrue("if (1 <= 1 || 0) true; else false");
+ shouldBeTrue("if (0 <  1 || 0) true; else false");
+shouldBeFalse("if (1 <= 0 || 0) true; else false");
+shouldBeFalse("if (2 <= 1 || 0) true; else false");
+shouldBeFalse("if (1 <  1 || 0) true; else false");
+shouldBeFalse("if (2 <  1 || 0) true; else false");
+
+shouldBeTrue("0 <= 0.5");
+shouldBeTrue("0 <= 1.5");
+shouldBeTrue("1 <= 1.5");
+shouldBeTrue("0 < 1.5");
+shouldBeFalse("1 <= 0.5");
+shouldBeFalse("2 <= 1.5");
+shouldBeTrue("1 < 1.5");
+shouldBeFalse("2 < 1.5");
+
+ shouldBeTrue("if (0 <= 0.5 || 0) true; else false");
+ shouldBeTrue("if (0 <= 1.5 || 0) true; else false");
+ shouldBeTrue("if (1 <= 1.5 || 0) true; else false");
+ shouldBeTrue("if (0 <  1.5 || 0) true; else false");
+shouldBeFalse("if (1 <= 0.5 || 0) true; else false");
+shouldBeFalse("if (2 <= 1.5 || 0) true; else false");
+ shouldBeTrue("if (1 <  1.5 || 0) true; else false");
+shouldBeFalse("if (2 <  1.5 || 0) true; else false");
+
+var zero = 0;
+var one = 1;
+var two = 2;
+var p5 = 0.5;
+var p15 = 1.5;
+
+
+shouldBeTrue("zero <= zero");
+shouldBeTrue("zero <= 1");
+shouldBeTrue("1 <= 1");
+shouldBeTrue("zero < 1");
+shouldBeFalse("1 <= zero");
+shouldBeFalse("2 <= 1");
+shouldBeFalse("1 < 1");
+shouldBeFalse("2 < 1");
+
+ shouldBeTrue("if (zero <= zero || 0) true; else false");
+ shouldBeTrue("if (zero <= 1 || zero) true; else false");
+ shouldBeTrue("if (1 <= 1 || zero) true; else false");
+ shouldBeTrue("if (zero <  1 || zero) true; else false");
+shouldBeFalse("if (1 <= zero || zero) true; else false");
+shouldBeFalse("if (2 <= 1 || zero) true; else false");
+shouldBeFalse("if (1 <  1 || zero) true; else false");
+shouldBeFalse("if (2 <  1 || zero) true; else false");
+
+shouldBeTrue("0 <= p5");
+shouldBeTrue("0 <= p15");
+shouldBeTrue("1 <= p15");
+shouldBeTrue("0 < p15");
+shouldBeFalse("1 <= p5");
+shouldBeFalse("2 <= p15");
+shouldBeTrue("1 < p15");
+shouldBeFalse("2 < p15");
+
+ shouldBeTrue("if (0 <= p5 || 0) true; else false");
+ shouldBeTrue("if (0 <= p15 || 0) true; else false");
+ shouldBeTrue("if (1 <= p15 || 0) true; else false");
+ shouldBeTrue("if (0 <  p15 || 0) true; else false");
+shouldBeFalse("if (1 <= p5 || 0) true; else false");
+shouldBeFalse("if (2 <= p15 || 0) true; else false");
+ shouldBeTrue("if (1 <  p15 || 0) true; else false");
+shouldBeFalse("if (2 <  p15 || 0) true; else false");
+
+
+shouldBeTrue("zero <= zero");
+shouldBeTrue("zero <= one");
+shouldBeTrue("one <= one");
+shouldBeTrue("zero < one");
+shouldBeFalse("one <= zero");
+shouldBeFalse("two <= one");
+shouldBeFalse("one < one");
+shouldBeFalse("two < one");
+
+ shouldBeTrue("if (zero <= zero || 0) true; else false");
+ shouldBeTrue("if (zero <= one || zero) true; else false");
+ shouldBeTrue("if (one <= one || zero) true; else false");
+ shouldBeTrue("if (zero <  one || zero) true; else false");
+shouldBeFalse("if (one <= zero || zero) true; else false");
+shouldBeFalse("if (two <= one || zero) true; else false");
+shouldBeFalse("if (one <  one || zero) true; else false");
+shouldBeFalse("if (two <  one || zero) true; else false");
+
+shouldBeTrue("0 <= p5");
+shouldBeTrue("0 <= p15");
+shouldBeTrue("one <= p15");
+shouldBeTrue("0 < p15");
+shouldBeFalse("one <= p5");
+shouldBeFalse("two <= p15");
+shouldBeTrue("one < p15");
+shouldBeFalse("two < p15");
+
+ shouldBeTrue("if (0 <= p5 || 0) true; else false");
+ shouldBeTrue("if (0 <= p15 || 0) true; else false");
+ shouldBeTrue("if (one <= p15 || 0) true; else false");
+ shouldBeTrue("if (0 <  p15 || 0) true; else false");
+shouldBeFalse("if (one <= p5 || 0) true; else false");
+shouldBeFalse("if (two <= p15 || 0) true; else false");
+ shouldBeTrue("if (one <  p15 || 0) true; else false");
+shouldBeFalse("if (two <  p15 || 0) true; else false");
+
+
+shouldBeFalse(" 0 <    NaN");
+shouldBeFalse(" NaN <  NaN");
+shouldBeFalse(" 0 <=   NaN");
+shouldBeFalse(" NaN <= NaN");
+shouldBeFalse(" 0.5 <  NaN");
+shouldBeFalse(" NaN <  NaN");
+shouldBeFalse(" 0.5 <= NaN");
+shouldBeFalse(" NaN <= NaN");
+shouldBeFalse(" zero < NaN");
+shouldBeFalse("zero <= NaN");
+shouldBeFalse(" NaN <= NaN");
+shouldBeFalse(" p5  <  NaN");
+shouldBeFalse("NaN  <  NaN");
+shouldBeFalse("p5  <=  NaN");
+shouldBeFalse("NaN  <= NaN");
+
+
+shouldBeFalse("if ( 0 <    NaN) true; else false;");
+shouldBeFalse("if ( NaN <  NaN) true; else false;");
+shouldBeFalse("if ( 0 <=   NaN) true; else false;");
+shouldBeFalse("if ( NaN <= NaN) true; else false;");
+shouldBeFalse("if ( 0.5 <  NaN) true; else false;");
+shouldBeFalse("if ( NaN <  NaN) true; else false;");
+shouldBeFalse("if ( 0.5 <= NaN) true; else false;");
+shouldBeFalse("if ( NaN <= NaN) true; else false;");
+shouldBeFalse("if ( zero < NaN) true; else false;");
+shouldBeFalse("if (zero <= NaN) true; else false;");
+shouldBeFalse("if ( NaN <= NaN) true; else false;");
+shouldBeFalse("if ( p5  <  NaN) true; else false;");
+shouldBeFalse("if (NaN  <  NaN) true; else false;");
+shouldBeFalse("if (p5  <=  NaN) true; else false;");
+shouldBeFalse("if (NaN  <= NaN) true; else false;");
diff --git a/deps/v8/test/webkit/comparison-operators.js b/deps/v8/test/webkit/comparison-operators.js
new file mode 100644 (file)
index 0000000..4a9d240
--- /dev/null
@@ -0,0 +1,94 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("test that comparison operators work correctly.")
+
+function makeTest(start, end, expression, relationship, override, invert) {
+    var resultValue = eval(relationship + expression + 0) || !!override;
+    if (invert)
+        resultValue = !resultValue;
+    var expr = start + expression + end;
+    var result = [];
+    function func(content) { var f = new Function(content); f.toString = function(){ return content}; return f; }
+    result.push([new func("return " + expr + ";"), resultValue]);
+    result.push([new func("if (" + expr + ") return true; return false;"), resultValue]);
+    result.push([new func("var k = 0; while (" + expr + ") if (k++) return true; return false;"), resultValue]);
+    result.push([new func("var k = 0; for (; " + expr + "; ) if (k++) return true; return false;"), resultValue]);
+    return result;
+}
+function doTest(lhs, rhs, relationship) {
+    var expressionParts = [["(",")"],["(", ") || 1", true],["(", ") && 1"],["(", ") || 1", true],["1 || (",")", true],["1 && (",")"]];
+    var expressions = [];
+    var tests = [];
+    for (var i = 0; i < expressionParts.length; i++) {
+        var start = expressionParts[i][0] + lhs;
+        var end = String(rhs) + expressionParts[i][1];
+        tests.push.apply(tests, makeTest(start, end, "==", relationship, expressionParts[i][2]));
+        tests.push.apply(tests, makeTest(start, end, "!=", relationship, expressionParts[i][2]));
+        tests.push.apply(tests, makeTest(start, end, "===", relationship, expressionParts[i][2]));
+        tests.push.apply(tests, makeTest(start, end, "!==", relationship, expressionParts[i][2]));
+    }
+    for (var i = 0; i < tests.length; i++) {
+        if ((r=tests[i][0]()) == tests[i][1])
+            testPassed(tests[i][0] + " is " + tests[i][1]);
+        else
+            testFailed(tests[i][0] + " is " + r + " and should be " + tests[i][1] + ".");
+    }
+}
+
+var letterA = "a";
+var letterB = "b";
+var One = 1;
+var Zero = 0;
+doTest('"a"', '"b"', -1);
+doTest('"a"', '"a"', 0);
+doTest('"b"', '"a"', 1);
+doTest('letterA', '"b"', -1);
+doTest('letterA', '"a"', 0);
+doTest('"b"', '"a"', 1);
+doTest('letterA', '"b"', -1);
+doTest('letterA', 'letterA', 0);
+doTest('"b"', 'letterA', 1);
+doTest('"a"', '"b"', -1);
+doTest('"a"', 'letterA', 0);
+doTest('"b"', 'letterA', 1);
+
+doTest('"a"', '0', NaN);
+doTest('0', '"a"', NaN);
+doTest('letterA', '0', NaN);
+doTest('letterA', '"a"', 0);
+doTest('0', '"a"', NaN);
+doTest('letterA', 'letterA', 0);
+doTest('0', 'letterA', NaN);
+doTest('"a"', 'letterA', 0);
+doTest('0', 'letterA', NaN);
+
+
+doTest('0', '1', -1);
+doTest('0', '0', 0);
+doTest('1', '0', 1);
+doTest('Zero', '1', -1);
+doTest('Zero', '0', 0);
+doTest('1', 'Zero', 1);
+doTest('0', 'One', -1);
+doTest('One', '0', 1);
diff --git a/deps/v8/test/webkit/concat-while-having-a-bad-time-expected.txt b/deps/v8/test/webkit/concat-while-having-a-bad-time-expected.txt
new file mode 100644 (file)
index 0000000..f949db9
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests the behavior of Array.prototype.concat while the array is having a bad time due to one of the elements we are concatenating.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS [42].concat() is [42]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/concat-while-having-a-bad-time.js b/deps/v8/test/webkit/concat-while-having-a-bad-time.js
new file mode 100644 (file)
index 0000000..dfda1e0
--- /dev/null
@@ -0,0 +1,31 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests the behavior of Array.prototype.concat while the array is having a bad time due to one of the elements we are concatenating."
+);
+
+Object.defineProperty(Array.prototype, 0, { writable: false });
+shouldBe("[42].concat()", "[42]");
+
+
diff --git a/deps/v8/test/webkit/const-without-initializer-expected.txt b/deps/v8/test/webkit/const-without-initializer-expected.txt
new file mode 100644 (file)
index 0000000..30ff8ef
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that declaring a const variable without initializing has the correct behavior and does not crash
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS f is undefined
+PASS f is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/const-without-initializer.js b/deps/v8/test/webkit/const-without-initializer.js
new file mode 100644 (file)
index 0000000..9eb0365
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests that declaring a const variable without initializing has the correct behavior and does not crash'
+);
+
+const f;
+
+shouldBe('f', 'undefined');
+
+f = 10;
+
+shouldBe('f', 'undefined');
diff --git a/deps/v8/test/webkit/constant-count-expected.txt b/deps/v8/test/webkit/constant-count-expected.txt
new file mode 100644 (file)
index 0000000..dde9347
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks exceptional cases for constant counting in the parser.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS a is undefined
+PASS f() is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/constant-count.js b/deps/v8/test/webkit/constant-count.js
new file mode 100644 (file)
index 0000000..7bc67e7
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks exceptional cases for constant counting in the parser."
+);
+
+const a;
+const b;
+--a;
+--b;
+
+shouldBe("a", "undefined");
+
+function f()
+{
+    const a;
+    const b;
+    --a;
+    --b;
+
+    return a;
+}
+
+shouldBe("f()", "undefined");
diff --git a/deps/v8/test/webkit/constant-encoding-expected.txt b/deps/v8/test/webkit/constant-encoding-expected.txt
new file mode 100644 (file)
index 0000000..42ba9a4
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test that we correctly encode patterned immediate values
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 0 >= 0x01000100 is false
+PASS 0 >= 0x01010000 is false
+PASS 0 >= 0x00000101 is false
+PASS 0 >= 0x00010001 is false
+PASS 0 >= 0x01010101 is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/constant-encoding.js b/deps/v8/test/webkit/constant-encoding.js
new file mode 100644 (file)
index 0000000..d0a4c8e
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test that we correctly encode patterned immediate values");
+
+shouldBeFalse("0 >= 0x01000100")
+shouldBeFalse("0 >= 0x01010000")
+shouldBeFalse("0 >= 0x00000101")
+shouldBeFalse("0 >= 0x00010001")
+shouldBeFalse("0 >= 0x01010101")
diff --git a/deps/v8/test/webkit/constant-folding-expected.txt b/deps/v8/test/webkit/constant-folding-expected.txt
new file mode 100644 (file)
index 0000000..f1fecde
--- /dev/null
@@ -0,0 +1,467 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks some cases that might be affected by constant folding.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "abc" + "2.1" is "abc2.1"
+PASS "123" + "2.1" is "1232.1"
+PASS "123" + "=" is "123="
+PASS "*" + "123" is "*123"
+PASS !"abc" is false
+PASS !"" is true
+PASS 10.3 + 2.1 is 12.4
+PASS 10.3 + "2.1" is "10.32.1"
+PASS "10.3" + 2.1  is "10.32.1"
+PASS "10.3" + "2.1" is "10.32.1"
+PASS 10.3 + true is 11.3
+PASS "10.3" + true is "10.3true"
+PASS 10.3 + false is 10.3
+PASS "10.3" + false is "10.3false"
+PASS true + 2.1 is 3.1
+PASS true + "2.1" is "true2.1"
+PASS false + 2.1 is 2.1
+PASS false + "2.1" is "false2.1"
+PASS 10.3 - 2.1 is 8.200000000000001
+PASS 10.3 - "2.1" is 8.200000000000001
+PASS "10.3" - 2.1  is 8.200000000000001
+PASS "10.3" - "2.1" is 8.200000000000001
+PASS 10.3 - true is 9.3
+PASS "10.3" - true is 9.3
+PASS 10.3 - false is 10.3
+PASS "10.3" - false is 10.3
+PASS true - 2.1 is -1.1
+PASS true - "2.1" is -1.1
+PASS false - 2.1 is -2.1
+PASS false - "2.1" is -2.1
+PASS 10.3 * 2.1 is 21.630000000000003
+PASS 10.3 * "2.1" is 21.630000000000003
+PASS "10.3" * 2.1 is 21.630000000000003
+PASS "10.3" * "2.1" is 21.630000000000003
+PASS 10.3 * true is 10.3
+PASS "10.3" * true is 10.3
+PASS 10.3 * false is 0
+PASS "10.3" * false is 0
+PASS true * 10.3 is 10.3
+PASS true * "10.3" is 10.3
+PASS false * 10.3 is 0
+PASS false * "10.3" is 0
+PASS 10.3 / 2 is 5.15
+PASS "10.3" / 2 is 5.15
+PASS 10.3 / "2" is 5.15
+PASS "10.3" / "2" is 5.15
+PASS 10.3 / true is 10.3
+PASS "10.3" / true is 10.3
+PASS true / 2 is 0.5
+PASS true / "2" is 0.5
+PASS false / 2 is 0
+PASS false / "2" is 0
+PASS 10.3 % 2.1 is 1.9000000000000004
+PASS "10.3" % 2.1 is 1.9000000000000004
+PASS 10.3 % "2.1" is 1.9000000000000004
+PASS "10.3" % "2.1" is 1.9000000000000004
+PASS 10.3 % true is 0.3000000000000007
+PASS "10.3" % true is 0.3000000000000007
+PASS true % 2 is 1
+PASS true % "2" is 1
+PASS false % 2 is 0
+PASS false % "2" is 0
+PASS 10.3 << 2.1 is 40
+PASS "10.3" << 2.1 is 40
+PASS 10.3 << "2.1" is 40
+PASS "10.3" << "2.1" is 40
+PASS 10.3 << true is 20
+PASS "10.3" << true is 20
+PASS 10.3 << false is 10
+PASS "10.3" << false is 10
+PASS true << 2.1 is 4
+PASS true << "2.1" is 4
+PASS false << 2.1 is 0
+PASS false << "2.1" is 0
+PASS 10.3 >> 2.1 is 2
+PASS "10.3" >> 2.1 is 2
+PASS 10.3 >> "2.1" is 2
+PASS "10.3" >> "2.1" is 2
+PASS 10.3 >> true is 5
+PASS "10.3" >> true is 5
+PASS 10.3 >> false is 10
+PASS "10.3" >> false is 10
+PASS true >> 2.1 is 0
+PASS true >> "2.1" is 0
+PASS false >> 2.1 is 0
+PASS false >> "2.1" is 0
+PASS -10.3 >>> 2.1 is 1073741821
+PASS "-10.3">>> 2.1 is 1073741821
+PASS -10.3 >>> "2.1" is 1073741821
+PASS "-10.3">>> "2.1" is 1073741821
+PASS -10.3 >>> true is 2147483643
+PASS "-10.3">>> true is 2147483643
+PASS -10.3 >>> false is 4294967286
+PASS "-10.3" >>> false is 4294967286
+PASS true >>> 2.1 is 0
+PASS true >>> "2.1" is 0
+PASS false >>> 2.1 is 0
+PASS false >>> "2.1" is 0
+PASS 10.3 & 3.1 is 2
+PASS "10.3" & 3.1 is 2
+PASS 10.3 & "3.1" is 2
+PASS "10.3" & "3.1" is 2
+PASS 10.3 & true is 0
+PASS "10.3" & true is 0
+PASS 11.3 & true is 1
+PASS "11.3" & true is 1
+PASS 10.3 & false is 0
+PASS "10.3" & false is 0
+PASS 11.3 & false is 0
+PASS "11.3" & false is 0
+PASS true & 3.1 is 1
+PASS true & "3.1" is 1
+PASS true & 2.1 is 0
+PASS true & "2.1" is 0
+PASS false & 3.1 is 0
+PASS false & "3.1" is 0
+PASS false & 2.1 is 0
+PASS false & "2.1" is 0
+PASS 10.3 | 3.1 is 11
+PASS "10.3" | 3.1 is 11
+PASS 10.3 | "3.1" is 11
+PASS "10.3" | "3.1" is 11
+PASS 10.3 | true is 11
+PASS "10.3" | true is 11
+PASS 11.3 | true is 11
+PASS "11.3" | true is 11
+PASS 10.3 | false is 10
+PASS "10.3" | false is 10
+PASS 11.3 | false is 11
+PASS "11.3" | false is 11
+PASS true | 3.1 is 3
+PASS true | "3.1" is 3
+PASS true | 2.1 is 3
+PASS true | "2.1" is 3
+PASS false | 3.1 is 3
+PASS false | "3.1" is 3
+PASS false | 2.1 is 2
+PASS false | "2.1" is 2
+PASS 10.3 ^ 3.1 is 9
+PASS "10.3" ^ 3.1 is 9
+PASS 10.3 ^ "3.1" is 9
+PASS "10.3" ^ "3.1" is 9
+PASS 10.3 ^ true is 11
+PASS "10.3" ^ true is 11
+PASS 11.3 ^ true is 10
+PASS "11.3" ^ true is 10
+PASS 10.3 ^ false is 10
+PASS "10.3" ^ false is 10
+PASS 11.3 ^ false is 11
+PASS "11.3" ^ false is 11
+PASS true ^ 3.1 is 2
+PASS true ^ "3.1" is 2
+PASS true ^ 2.1 is 3
+PASS true ^ "2.1" is 3
+PASS false ^ 3.1 is 3
+PASS false ^ "3.1" is 3
+PASS false ^ 2.1 is 2
+PASS false ^ "2.1" is 2
+PASS 10.3 == 3.1 is false
+PASS 3.1 == 3.1 is true
+PASS "10.3" == 3.1 is false
+PASS "3.1" == 3.1 is true
+PASS 10.3 == "3.1" is false
+PASS 3.1 == "3.1" is true
+PASS "10.3" == "3.1" is false
+PASS "3.1" == "3.1" is true
+PASS 10.3 == true is false
+PASS 1 == true is true
+PASS "10.3" == true is false
+PASS "1" == true is true
+PASS 10.3 == false is false
+PASS 0 == false is true
+PASS "10.3" == false is false
+PASS "0" == false is true
+PASS true == 3.1 is false
+PASS true == 1 is true
+PASS true == "3.1" is false
+PASS true == "1"  is true
+PASS false == 3.1 is false
+PASS false == 0 is true
+PASS false == "3.1" is false
+PASS false == "0" is true
+PASS true == true is true
+PASS false == true is false
+PASS true == false is false
+PASS false == false is true
+PASS 10.3 != 3.1 is true
+PASS 3.1 != 3.1 is false
+PASS "10.3" != 3.1 is true
+PASS "3.1" != 3.1 is false
+PASS 10.3 != "3.1" is true
+PASS 3.1 != "3.1" is false
+PASS "10.3" != "3.1" is true
+PASS "3.1" != "3.1" is false
+PASS 10.3 != true is true
+PASS 1 != true is false
+PASS "10.3" != true is true
+PASS "1" != true is false
+PASS 10.3 != false is true
+PASS 0 != false is false
+PASS "10.3" != false is true
+PASS "0" != false is false
+PASS true != 3.1 is true
+PASS true != 1 is false
+PASS true != "3.1" is true
+PASS true != "1"  is false
+PASS false != 3.1 is true
+PASS false != 0 is false
+PASS false != "3.1" is true
+PASS false != "0" is false
+PASS true != true is false
+PASS false != true is true
+PASS true != false is true
+PASS false != false is false
+PASS 10.3 > 3.1 is true
+PASS 3.1 > 3.1 is false
+PASS "10.3" > 3.1 is true
+PASS "3.1" > 3.1 is false
+PASS 10.3 > "3.1" is true
+PASS 3.1 > "3.1" is false
+PASS "10.3" > "3.1" is false
+PASS "3.1" > "3.1" is false
+PASS 10.3 > true is true
+PASS 0 > true is false
+PASS "10.3" > true is true
+PASS "0" > true is false
+PASS 10.3 > false is true
+PASS -1 > false is false
+PASS "10.3" > false is true
+PASS "-1" > false is false
+PASS true > 0.1 is true
+PASS true > 1.1 is false
+PASS true > "0.1" is true
+PASS true > "1.1" is false
+PASS false > -3.1 is true
+PASS false > 0 is false
+PASS false > "-3.1" is true
+PASS false > "0" is false
+PASS true > true is false
+PASS false > true is false
+PASS true > false is true
+PASS false > false is false
+PASS 10.3 < 3.1 is false
+PASS 2.1 < 3.1 is true
+PASS "10.3" < 3.1 is false
+PASS "2.1" < 3.1 is true
+PASS 10.3 < "3.1" is false
+PASS 2.1 < "3.1" is true
+PASS "10.3" < "3.1" is true
+PASS "2.1" < "3.1" is true
+PASS 10.3 < true is false
+PASS 0 < true is true
+PASS "10.3" < true is false
+PASS "0" < true is true
+PASS 10.3 < false is false
+PASS -1 < false is true
+PASS "10.3" < false is false
+PASS "-1" < false is true
+PASS true < 0.1 is false
+PASS true < 1.1 is true
+PASS true < "0.1" is false
+PASS true < "1.1" is true
+PASS false < -3.1 is false
+PASS false < 0.1 is true
+PASS false < "-3.1" is false
+PASS false < "0.1" is true
+PASS true < true is false
+PASS false < true is true
+PASS true < false is false
+PASS false < false is false
+PASS 10.3 >= 3.1 is true
+PASS 2.1 >= 3.1 is false
+PASS "10.3" >= 3.1 is true
+PASS "2.1" >= 3.1 is false
+PASS 10.3 >= "3.1" is true
+PASS 2.1 >= "3.1" is false
+PASS "10.3" >= "3.1" is false
+PASS "2.1" >= "3.1" is false
+PASS 10.3 >= true is true
+PASS 0 >= true is false
+PASS "10.3" >= true is true
+PASS "0" >= true is false
+PASS 10.3 >= false is true
+PASS -1 >= false is false
+PASS "10.3" >= false is true
+PASS "-1" >= false is false
+PASS true >= 0.1 is true
+PASS true >= 1.1 is false
+PASS true >= "0.1" is true
+PASS true >= "1.1" is false
+PASS false >= -3.1 is true
+PASS false >= 0 is true
+PASS false >= "-3.1" is true
+PASS false >= "0" is true
+PASS true >= true is true
+PASS false >= true is false
+PASS true >= false is true
+PASS false >= false is true
+PASS 10.3 <= 3.1 is false
+PASS 2.1 <= 3.1 is true
+PASS "10.3" <= 3.1 is false
+PASS "2.1" <= 3.1 is true
+PASS 10.3 <= "3.1" is false
+PASS 2.1 <= "3.1" is true
+PASS "10.3" <= "3.1" is true
+PASS "2.1" <= "3.1" is true
+PASS 10.3 <= true is false
+PASS 0 <= true is true
+PASS "10.3" <= true is false
+PASS "0" <= true is true
+PASS 10.3 <= false is false
+PASS -1 <= false is true
+PASS "10.3" <= false is false
+PASS "-1" <= false is true
+PASS true <= 0.1 is false
+PASS true <= 1.1 is true
+PASS true <= "0.1" is false
+PASS true <= "1.1" is true
+PASS false <= -3.1 is false
+PASS false <= 0.1 is true
+PASS false <= "-3.1" is false
+PASS false <= "0.1" is true
+PASS true <= true is true
+PASS false <= true is true
+PASS true <= false is false
+PASS false <= false is true
+PASS true && true is true
+PASS true && false is false
+PASS false && true is false
+PASS false && false is false
+PASS 1.1 && true is true
+PASS 1.1 && false is false
+PASS 0 && true is 0
+PASS 0 && false is 0
+PASS "1.1" && true is true
+PASS "1.1" && false is false
+PASS "0" && true is true
+PASS "0" && false is false
+PASS true && 1.1 is 1.1
+PASS true && 0 is 0
+PASS false && 1.1 is false
+PASS false && 0 is false
+PASS true && "1.1" is "1.1"
+PASS true && "0" is "0"
+PASS false && "1.1" is false
+PASS false && "0" is false
+PASS 1.1 && 1.1 is 1.1
+PASS 1.1 && 0 is 0
+PASS 0 && 1.1 is 0
+PASS 0 && 0 is 0
+PASS "1.1" && 1.1 is 1.1
+PASS "1.1" && 0 is 0
+PASS "0" && 1.1 is 1.1
+PASS "0" && 0 is 0
+PASS 1.1 && "1.1" is "1.1"
+PASS 1.1 && "0" is "0"
+PASS 0 && "1.1" is 0
+PASS 0 && "0" is 0
+PASS "1.1" && "1.1" is "1.1"
+PASS "1.1" && "0" is "0"
+PASS "0" && "1.1" is "1.1"
+PASS "0" && "0" is "0"
+PASS true || true is true
+PASS true || false is true
+PASS false || true is true
+PASS false || false is false
+PASS 1.1 || true is 1.1
+PASS 1.1 || false is 1.1
+PASS 0 || true is true
+PASS 0 || false is false
+PASS "1.1" || true is "1.1"
+PASS "1.1" || false is "1.1"
+PASS "0" || true is "0"
+PASS "0" || false is "0"
+PASS true || 1.1 is true
+PASS true || 0 is true
+PASS false || 1.1 is 1.1
+PASS false || 0 is 0
+PASS true || "1.1" is true
+PASS true || "0" is true
+PASS false || "1.1" is "1.1"
+PASS false || "0" is "0"
+PASS 1.1 || 1.1 is 1.1
+PASS 1.1 || 0 is 1.1
+PASS 0 || 1.1 is 1.1
+PASS 0 || 0 is 0
+PASS "1.1" || 1.1 is "1.1"
+PASS "1.1" || 0 is "1.1"
+PASS "0" || 1.1 is "0"
+PASS "0" || 0 is "0"
+PASS 1.1 || "1.1" is 1.1
+PASS 1.1 || "0" is 1.1
+PASS 0 || "1.1" is "1.1"
+PASS 0 || "0" is "0"
+PASS "1.1" || "1.1" is "1.1"
+PASS "1.1" || "0" is "1.1"
+PASS "0" || "1.1" is "0"
+PASS "0" || "0" is "0"
+PASS +3.1 is 3.1
+PASS + +3.1 is 3.1
+PASS +"3.1" is 3.1
+PASS +true is 1
+PASS +false is 0
+PASS -3.1 is -3.1
+PASS - -3.1 is 3.1
+PASS -"3.1" is -3.1
+PASS -true is -1
+PASS -false is -0
+PASS ~3 is -4
+PASS ~ ~3 is 3
+PASS ~"3" is -4
+PASS ~true is -2
+PASS ~false is -1
+PASS !true is false
+PASS !false is true
+PASS !3 is false
+PASS !0 is true
+PASS 10.3 / 0 is Infinity
+PASS "10.3" / 0 is Infinity
+PASS -10.3 / 0 is -Infinity
+PASS "-10.3" / 0 is -Infinity
+PASS true / 0 is Infinity
+PASS false / 0 is NaN
+PASS 0 / 0 is NaN
+PASS 10.3 / -0 is -Infinity
+PASS "10.3" / -0 is -Infinity
+PASS -10.3 / -0 is Infinity
+PASS "-10.3" / -0 is Infinity
+PASS true / -0 is -Infinity
+PASS false / -0 is NaN
+PASS 0 / -0 is NaN
+PASS 1 / -0 is -Infinity
+PASS 1 / - 0 is -Infinity
+PASS 1 / - -0 is Infinity
+PASS 1 / - - -0 is -Infinity
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/constant-folding.js b/deps/v8/test/webkit/constant-folding.js
new file mode 100644 (file)
index 0000000..a348eea
--- /dev/null
@@ -0,0 +1,491 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks some cases that might be affected by constant folding."
+);
+
+shouldBe('"abc" + "2.1"', '"abc2.1"');
+shouldBe('"123" + "2.1"', '"1232.1"');
+shouldBe('"123" + "="', '"123="');
+shouldBe('"*" + "123"', '"*123"');
+
+shouldBe('!"abc"', 'false');
+shouldBe('!""', 'true');
+
+shouldBe('10.3 + 2.1', '12.4');
+shouldBe('10.3 + "2.1"', '"10.32.1"');
+shouldBe('"10.3" + 2.1 ', '"10.32.1"');
+shouldBe('"10.3" + "2.1"', '"10.32.1"');
+shouldBe('10.3 + true', '11.3');
+shouldBe('"10.3" + true', '"10.3true"');
+shouldBe('10.3 + false', '10.3');
+shouldBe('"10.3" + false', '"10.3false"');
+shouldBe('true + 2.1', '3.1');
+shouldBe('true + "2.1"', '"true2.1"');
+shouldBe('false + 2.1', '2.1');
+shouldBe('false + "2.1"', '"false2.1"');
+
+shouldBe('10.3 - 2.1', '8.200000000000001');
+shouldBe('10.3 - "2.1"', '8.200000000000001');
+shouldBe('"10.3" - 2.1 ', '8.200000000000001');
+shouldBe('"10.3" - "2.1"', '8.200000000000001');
+shouldBe('10.3 - true', '9.3');
+shouldBe('"10.3" - true', '9.3');
+shouldBe('10.3 - false', '10.3');
+shouldBe('"10.3" - false', '10.3');
+shouldBe('true - 2.1', '-1.1');
+shouldBe('true - "2.1"', '-1.1');
+shouldBe('false - 2.1', '-2.1');
+shouldBe('false - "2.1"', '-2.1');
+
+shouldBe('10.3 * 2.1', '21.630000000000003');
+shouldBe('10.3 * "2.1"', '21.630000000000003');
+shouldBe('"10.3" * 2.1', '21.630000000000003');
+shouldBe('"10.3" * "2.1"', '21.630000000000003');
+shouldBe('10.3 * true', '10.3');
+shouldBe('"10.3" * true', '10.3');
+shouldBe('10.3 * false', '0');
+shouldBe('"10.3" * false', '0');
+shouldBe('true * 10.3', '10.3');
+shouldBe('true * "10.3"', '10.3');
+shouldBe('false * 10.3', '0');
+shouldBe('false * "10.3"', '0');
+
+shouldBe('10.3 / 2', '5.15');
+shouldBe('"10.3" / 2', '5.15');
+shouldBe('10.3 / "2"', '5.15');
+shouldBe('"10.3" / "2"', '5.15');
+shouldBe('10.3 / true', '10.3');
+shouldBe('"10.3" / true', '10.3');
+shouldBe('true / 2', '0.5');
+shouldBe('true / "2"', '0.5');
+shouldBe('false / 2', '0');
+shouldBe('false / "2"', '0');
+
+shouldBe('10.3 % 2.1', '1.9000000000000004');
+shouldBe('"10.3" % 2.1', '1.9000000000000004');
+shouldBe('10.3 % "2.1"', '1.9000000000000004');
+shouldBe('"10.3" % "2.1"', '1.9000000000000004');
+shouldBe('10.3 % true', '0.3000000000000007');
+shouldBe('"10.3" % true', '0.3000000000000007');
+shouldBe('true % 2', '1');
+shouldBe('true % "2"', '1');
+shouldBe('false % 2', '0');
+shouldBe('false % "2"', '0');
+
+shouldBe('10.3 << 2.1', '40');
+shouldBe('"10.3" << 2.1', '40');
+shouldBe('10.3 << "2.1"', '40');
+shouldBe('"10.3" << "2.1"', '40');
+shouldBe('10.3 << true', '20');
+shouldBe('"10.3" << true', '20');
+shouldBe('10.3 << false', '10');
+shouldBe('"10.3" << false', '10');
+shouldBe('true << 2.1', '4');
+shouldBe('true << "2.1"', '4');
+shouldBe('false << 2.1', '0');
+shouldBe('false << "2.1"', '0');
+
+shouldBe('10.3 >> 2.1', '2');
+shouldBe('"10.3" >> 2.1', '2');
+shouldBe('10.3 >> "2.1"', '2');
+shouldBe('"10.3" >> "2.1"', '2');
+shouldBe('10.3 >> true', '5');
+shouldBe('"10.3" >> true', '5');
+shouldBe('10.3 >> false', '10');
+shouldBe('"10.3" >> false', '10');
+shouldBe('true >> 2.1', '0');
+shouldBe('true >> "2.1"', '0');
+shouldBe('false >> 2.1', '0');
+shouldBe('false >> "2.1"', '0');
+
+shouldBe('-10.3 >>> 2.1', '1073741821');
+shouldBe('"-10.3">>> 2.1', '1073741821');
+shouldBe('-10.3 >>> "2.1"', '1073741821');
+shouldBe('"-10.3">>> "2.1"', '1073741821');
+shouldBe('-10.3 >>> true', '2147483643');
+shouldBe('"-10.3">>> true', '2147483643');
+shouldBe('-10.3 >>> false', '4294967286');
+shouldBe('"-10.3" >>> false', '4294967286');
+shouldBe('true >>> 2.1', '0');
+shouldBe('true >>> "2.1"', '0');
+shouldBe('false >>> 2.1', '0');
+shouldBe('false >>> "2.1"', '0');
+
+
+shouldBe('10.3 & 3.1', '2');
+shouldBe('"10.3" & 3.1', '2');
+shouldBe('10.3 & "3.1"', '2');
+shouldBe('"10.3" & "3.1"', '2');
+shouldBe('10.3 & true', '0');
+shouldBe('"10.3" & true', '0');
+shouldBe('11.3 & true', '1');
+shouldBe('"11.3" & true', '1');
+shouldBe('10.3 & false', '0');
+shouldBe('"10.3" & false', '0');
+shouldBe('11.3 & false', '0');
+shouldBe('"11.3" & false', '0');
+shouldBe('true & 3.1', '1');
+shouldBe('true & "3.1"', '1');
+shouldBe('true & 2.1', '0');
+shouldBe('true & "2.1"', '0');
+shouldBe('false & 3.1', '0');
+shouldBe('false & "3.1"', '0');
+shouldBe('false & 2.1', '0');
+shouldBe('false & "2.1"', '0');
+
+
+shouldBe('10.3 | 3.1', '11');
+shouldBe('"10.3" | 3.1', '11');
+shouldBe('10.3 | "3.1"', '11');
+shouldBe('"10.3" | "3.1"', '11');
+shouldBe('10.3 | true', '11');
+shouldBe('"10.3" | true', '11');
+shouldBe('11.3 | true', '11');
+shouldBe('"11.3" | true', '11');
+shouldBe('10.3 | false', '10');
+shouldBe('"10.3" | false', '10');
+shouldBe('11.3 | false', '11');
+shouldBe('"11.3" | false', '11');
+shouldBe('true | 3.1', '3');
+shouldBe('true | "3.1"', '3');
+shouldBe('true | 2.1', '3');
+shouldBe('true | "2.1"', '3');
+shouldBe('false | 3.1', '3');
+shouldBe('false | "3.1"', '3');
+shouldBe('false | 2.1', '2');
+shouldBe('false | "2.1"', '2');
+
+shouldBe('10.3 ^ 3.1', '9');
+shouldBe('"10.3" ^ 3.1', '9');
+shouldBe('10.3 ^ "3.1"', '9');
+shouldBe('"10.3" ^ "3.1"', '9');
+shouldBe('10.3 ^ true', '11');
+shouldBe('"10.3" ^ true', '11');
+shouldBe('11.3 ^ true', '10');
+shouldBe('"11.3" ^ true', '10');
+shouldBe('10.3 ^ false', '10');
+shouldBe('"10.3" ^ false', '10');
+shouldBe('11.3 ^ false', '11');
+shouldBe('"11.3" ^ false', '11');
+shouldBe('true ^ 3.1', '2');
+shouldBe('true ^ "3.1"', '2');
+shouldBe('true ^ 2.1', '3');
+shouldBe('true ^ "2.1"', '3');
+shouldBe('false ^ 3.1', '3');
+shouldBe('false ^ "3.1"', '3');
+shouldBe('false ^ 2.1', '2');
+shouldBe('false ^ "2.1"', '2');
+
+shouldBe('10.3 == 3.1', 'false');
+shouldBe('3.1 == 3.1', 'true');
+shouldBe('"10.3" == 3.1', 'false');
+shouldBe('"3.1" == 3.1', 'true');
+shouldBe('10.3 == "3.1"', 'false');
+shouldBe('3.1 == "3.1"', 'true');
+shouldBe('"10.3" == "3.1"', 'false');
+shouldBe('"3.1" == "3.1"', 'true');
+shouldBe('10.3 == true', 'false');
+shouldBe('1 == true', 'true');
+shouldBe('"10.3" == true', 'false');
+shouldBe('"1" == true', 'true');
+shouldBe('10.3 == false', 'false');
+shouldBe('0 == false', 'true');
+shouldBe('"10.3" == false', 'false');
+shouldBe('"0" == false', 'true');
+shouldBe('true == 3.1', 'false');
+shouldBe('true == 1', 'true');
+shouldBe('true == "3.1"', 'false');
+shouldBe('true == "1" ', 'true');
+shouldBe('false == 3.1', 'false');
+shouldBe('false == 0', 'true');
+shouldBe('false == "3.1"', 'false');
+shouldBe('false == "0"', 'true');
+shouldBe('true == true', 'true');
+shouldBe('false == true', 'false');
+shouldBe('true == false', 'false');
+shouldBe('false == false', 'true');
+
+shouldBe('10.3 != 3.1', 'true');
+shouldBe('3.1 != 3.1', 'false');
+shouldBe('"10.3" != 3.1', 'true');
+shouldBe('"3.1" != 3.1', 'false');
+shouldBe('10.3 != "3.1"', 'true');
+shouldBe('3.1 != "3.1"', 'false');
+shouldBe('"10.3" != "3.1"', 'true');
+shouldBe('"3.1" != "3.1"', 'false');
+shouldBe('10.3 != true', 'true');
+shouldBe('1 != true', 'false');
+shouldBe('"10.3" != true', 'true');
+shouldBe('"1" != true', 'false');
+shouldBe('10.3 != false', 'true');
+shouldBe('0 != false', 'false');
+shouldBe('"10.3" != false', 'true');
+shouldBe('"0" != false', 'false');
+shouldBe('true != 3.1', 'true');
+shouldBe('true != 1', 'false');
+shouldBe('true != "3.1"', 'true');
+shouldBe('true != "1" ', 'false');
+shouldBe('false != 3.1', 'true');
+shouldBe('false != 0', 'false');
+shouldBe('false != "3.1"', 'true');
+shouldBe('false != "0"', 'false');
+shouldBe('true != true', 'false');
+shouldBe('false != true', 'true');
+shouldBe('true != false', 'true');
+shouldBe('false != false', 'false');
+
+shouldBe('10.3 > 3.1', 'true');
+shouldBe('3.1 > 3.1', 'false');
+shouldBe('"10.3" > 3.1', 'true');
+shouldBe('"3.1" > 3.1', 'false');
+shouldBe('10.3 > "3.1"', 'true');
+shouldBe('3.1 > "3.1"', 'false');
+shouldBe('"10.3" > "3.1"', 'false');
+shouldBe('"3.1" > "3.1"', 'false');
+shouldBe('10.3 > true', 'true');
+shouldBe('0 > true', 'false');
+shouldBe('"10.3" > true', 'true');
+shouldBe('"0" > true', 'false');
+shouldBe('10.3 > false', 'true');
+shouldBe('-1 > false', 'false');
+shouldBe('"10.3" > false', 'true');
+shouldBe('"-1" > false', 'false');
+shouldBe('true > 0.1', 'true');
+shouldBe('true > 1.1', 'false');
+shouldBe('true > "0.1"', 'true');
+shouldBe('true > "1.1"', 'false');
+shouldBe('false > -3.1', 'true');
+shouldBe('false > 0', 'false');
+shouldBe('false > "-3.1"', 'true');
+shouldBe('false > "0"', 'false');
+shouldBe('true > true', 'false');
+shouldBe('false > true', 'false');
+shouldBe('true > false', 'true');
+shouldBe('false > false', 'false');
+
+shouldBe('10.3 < 3.1', 'false');
+shouldBe('2.1 < 3.1', 'true');
+shouldBe('"10.3" < 3.1', 'false');
+shouldBe('"2.1" < 3.1', 'true');
+shouldBe('10.3 < "3.1"', 'false');
+shouldBe('2.1 < "3.1"', 'true');
+shouldBe('"10.3" < "3.1"', 'true');
+shouldBe('"2.1" < "3.1"', 'true');
+shouldBe('10.3 < true', 'false');
+shouldBe('0 < true', 'true');
+shouldBe('"10.3" < true', 'false');
+shouldBe('"0" < true', 'true');
+shouldBe('10.3 < false', 'false');
+shouldBe('-1 < false', 'true');
+shouldBe('"10.3" < false', 'false');
+shouldBe('"-1" < false', 'true');
+shouldBe('true < 0.1', 'false');
+shouldBe('true < 1.1', 'true');
+shouldBe('true < "0.1"', 'false');
+shouldBe('true < "1.1"', 'true');
+shouldBe('false < -3.1', 'false');
+shouldBe('false < 0.1', 'true');
+shouldBe('false < "-3.1"', 'false');
+shouldBe('false < "0.1"', 'true');
+shouldBe('true < true', 'false');
+shouldBe('false < true', 'true');
+shouldBe('true < false', 'false');
+shouldBe('false < false', 'false');
+
+shouldBe('10.3 >= 3.1', 'true');
+shouldBe('2.1 >= 3.1', 'false');
+shouldBe('"10.3" >= 3.1', 'true');
+shouldBe('"2.1" >= 3.1', 'false');
+shouldBe('10.3 >= "3.1"', 'true');
+shouldBe('2.1 >= "3.1"', 'false');
+shouldBe('"10.3" >= "3.1"', 'false');
+shouldBe('"2.1" >= "3.1"', 'false');
+shouldBe('10.3 >= true', 'true');
+shouldBe('0 >= true', 'false');
+shouldBe('"10.3" >= true', 'true');
+shouldBe('"0" >= true', 'false');
+shouldBe('10.3 >= false', 'true');
+shouldBe('-1 >= false', 'false');
+shouldBe('"10.3" >= false', 'true');
+shouldBe('"-1" >= false', 'false');
+shouldBe('true >= 0.1', 'true');
+shouldBe('true >= 1.1', 'false');
+shouldBe('true >= "0.1"', 'true');
+shouldBe('true >= "1.1"', 'false');
+shouldBe('false >= -3.1', 'true');
+shouldBe('false >= 0', 'true');
+shouldBe('false >= "-3.1"', 'true');
+shouldBe('false >= "0"', 'true');
+shouldBe('true >= true', 'true');
+shouldBe('false >= true', 'false');
+shouldBe('true >= false', 'true');
+shouldBe('false >= false', 'true');
+
+shouldBe('10.3 <= 3.1', 'false');
+shouldBe('2.1 <= 3.1', 'true');
+shouldBe('"10.3" <= 3.1', 'false');
+shouldBe('"2.1" <= 3.1', 'true');
+shouldBe('10.3 <= "3.1"', 'false');
+shouldBe('2.1 <= "3.1"', 'true');
+shouldBe('"10.3" <= "3.1"', 'true');
+shouldBe('"2.1" <= "3.1"', 'true');
+shouldBe('10.3 <= true', 'false');
+shouldBe('0 <= true', 'true');
+shouldBe('"10.3" <= true', 'false');
+shouldBe('"0" <= true', 'true');
+shouldBe('10.3 <= false', 'false');
+shouldBe('-1 <= false', 'true');
+shouldBe('"10.3" <= false', 'false');
+shouldBe('"-1" <= false', 'true');
+shouldBe('true <= 0.1', 'false');
+shouldBe('true <= 1.1', 'true');
+shouldBe('true <= "0.1"', 'false');
+shouldBe('true <= "1.1"', 'true');
+shouldBe('false <= -3.1', 'false');
+shouldBe('false <= 0.1', 'true');
+shouldBe('false <= "-3.1"', 'false');
+shouldBe('false <= "0.1"', 'true');
+shouldBe('true <= true', 'true');
+shouldBe('false <= true', 'true');
+shouldBe('true <= false', 'false');
+shouldBe('false <= false', 'true');
+
+shouldBe('true && true', 'true');
+shouldBe('true && false', 'false');
+shouldBe('false && true', 'false');
+shouldBe('false && false', 'false');
+shouldBe('1.1 && true', 'true');
+shouldBe('1.1 && false', 'false');
+shouldBe('0 && true', '0');
+shouldBe('0 && false', '0');
+shouldBe('"1.1" && true', 'true');
+shouldBe('"1.1" && false', 'false');
+shouldBe('"0" && true', 'true');
+shouldBe('"0" && false', 'false');
+shouldBe('true && 1.1', '1.1');
+shouldBe('true && 0', '0');
+shouldBe('false && 1.1', 'false');
+shouldBe('false && 0', 'false');
+shouldBe('true && "1.1"', '"1.1"');
+shouldBe('true && "0"', '"0"');
+shouldBe('false && "1.1"', 'false');
+shouldBe('false && "0"', 'false');
+shouldBe('1.1 && 1.1', '1.1');
+shouldBe('1.1 && 0', '0');
+shouldBe('0 && 1.1', '0');
+shouldBe('0 && 0', '0');
+shouldBe('"1.1" && 1.1', '1.1');
+shouldBe('"1.1" && 0', '0');
+shouldBe('"0" && 1.1', '1.1');
+shouldBe('"0" && 0', '0');
+shouldBe('1.1 && "1.1"', '"1.1"');
+shouldBe('1.1 && "0"', '"0"');
+shouldBe('0 && "1.1"', '0');
+shouldBe('0 && "0"', '0');
+shouldBe('"1.1" && "1.1"', '"1.1"');
+shouldBe('"1.1" && "0"', '"0"');
+shouldBe('"0" && "1.1"', '"1.1"');
+shouldBe('"0" && "0"', '"0"');
+
+shouldBe('true || true', 'true');
+shouldBe('true || false', 'true');
+shouldBe('false || true', 'true');
+shouldBe('false || false', 'false');
+shouldBe('1.1 || true', '1.1');
+shouldBe('1.1 || false', '1.1');
+shouldBe('0 || true', 'true');
+shouldBe('0 || false', 'false');
+shouldBe('"1.1" || true', '"1.1"');
+shouldBe('"1.1" || false', '"1.1"');
+shouldBe('"0" || true', '"0"');
+shouldBe('"0" || false', '"0"');
+shouldBe('true || 1.1', 'true');
+shouldBe('true || 0', 'true');
+shouldBe('false || 1.1', '1.1');
+shouldBe('false || 0', '0');
+shouldBe('true || "1.1"', 'true');
+shouldBe('true || "0"', 'true');
+shouldBe('false || "1.1"', '"1.1"');
+shouldBe('false || "0"', '"0"');
+shouldBe('1.1 || 1.1', '1.1');
+shouldBe('1.1 || 0', '1.1');
+shouldBe('0 || 1.1', '1.1');
+shouldBe('0 || 0', '0');
+shouldBe('"1.1" || 1.1', '"1.1"');
+shouldBe('"1.1" || 0', '"1.1"');
+shouldBe('"0" || 1.1', '"0"');
+shouldBe('"0" || 0', '"0"');
+shouldBe('1.1 || "1.1"', '1.1');
+shouldBe('1.1 || "0"', '1.1');
+shouldBe('0 || "1.1"', '"1.1"');
+shouldBe('0 || "0"', '"0"');
+shouldBe('"1.1" || "1.1"', '"1.1"');
+shouldBe('"1.1" || "0"', '"1.1"');
+shouldBe('"0" || "1.1"', '"0"');
+shouldBe('"0" || "0"', '"0"');
+
+shouldBe('+3.1', '3.1');
+shouldBe('+ +3.1', '3.1');
+shouldBe('+"3.1"', '3.1');
+shouldBe('+true', '1');
+shouldBe('+false', '0');
+
+shouldBe('-3.1', '-3.1');
+shouldBe('- -3.1', '3.1');
+shouldBe('-"3.1"', '-3.1');
+shouldBe('-true', '-1');
+shouldBe('-false', '-0');
+
+shouldBe('~3', '-4');
+shouldBe('~ ~3', '3');
+shouldBe('~"3"', '-4');
+shouldBe('~true', '-2');
+shouldBe('~false', '-1');
+
+shouldBe('!true', 'false');
+shouldBe('!false', 'true');
+shouldBe('!3', 'false');
+shouldBe('!0', 'true');
+
+shouldBe('10.3 / 0', 'Infinity');
+shouldBe('"10.3" / 0', 'Infinity');
+shouldBe('-10.3 / 0', '-Infinity');
+shouldBe('"-10.3" / 0', '-Infinity');
+shouldBe('true / 0', 'Infinity');
+shouldBe('false / 0', 'NaN');
+shouldBe('0 / 0', 'NaN');
+
+shouldBe('10.3 / -0', '-Infinity');
+shouldBe('"10.3" / -0', '-Infinity');
+shouldBe('-10.3 / -0', 'Infinity');
+shouldBe('"-10.3" / -0', 'Infinity');
+shouldBe('true / -0', '-Infinity');
+shouldBe('false / -0', 'NaN');
+shouldBe('0 / -0', 'NaN');
+
+shouldBe('1 / -0', '-Infinity');
+shouldBe('1 / - 0', '-Infinity');
+shouldBe('1 / - -0', 'Infinity');
+shouldBe('1 / - - -0', '-Infinity');
diff --git a/deps/v8/test/webkit/continue-break-multiple-labels-expected.txt b/deps/v8/test/webkit/continue-break-multiple-labels-expected.txt
new file mode 100644 (file)
index 0000000..bf862b9
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks break and continue behaviour in the presence of multiple labels.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS test1() is '12356789'
+PASS test2() is '123'
+PASS test3() is 10
+PASS test4() is 1
+PASS test5() is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/continue-break-multiple-labels.js b/deps/v8/test/webkit/continue-break-multiple-labels.js
new file mode 100644 (file)
index 0000000..69d0834
--- /dev/null
@@ -0,0 +1,111 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This test checks break and continue behaviour in the presence of multiple labels.'
+);
+
+function test1()
+{
+    var s = "";
+
+    a:
+    b:
+    for (var i = 1; i < 10; i++) {
+       if (i == 4)
+            continue a;
+       s += i;
+    }
+
+    return s;
+}
+
+shouldBe("test1()", "'12356789'");
+
+function test2()
+{
+    var s = "";
+
+    a:
+    b:
+    for (var i = 1; i < 10; i++) {
+        if (i == 4)
+            break a;
+        s += i;
+    }
+
+    return s;
+}
+
+shouldBe("test2()", "'123'");
+
+function test3()
+{
+    var i;
+    for (i = 1; i < 10; i++) {
+        try {
+            continue;
+        } finally {
+            innerLoop:
+            while (1) {
+                break innerLoop;
+            }
+        }
+    }
+
+    return i;
+}
+
+shouldBe("test3()", "10");
+
+function test4()
+{
+    var i = 0;
+
+    a:
+    i++;
+    while (1) {
+        break;
+    }
+
+    return i;
+}
+
+shouldBe("test4()", "1");
+
+function test5()
+{
+    var i = 0;
+
+    switch (1) {
+    default:
+        while (1) {
+            break;
+        }
+        i++;
+    }
+
+    return i;
+}
+
+shouldBe("test5()", "1");
diff --git a/deps/v8/test/webkit/convert-nan-to-bool-expected.txt b/deps/v8/test/webkit/convert-nan-to-bool-expected.txt
new file mode 100644 (file)
index 0000000..f37e3ef
--- /dev/null
@@ -0,0 +1,97 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test ensures that NaN is handled correctly when converting numeric expressions to booleans.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS NaN ? true : false is false
+PASS 1 ? true : false is true
+PASS 0 ? true : false is false
+PASS -1 ? true : false is true
+PASS 1 * -1 ? true : false is true
+PASS 1 * 0 ? true : false is false
+PASS 1 * 1 ? true : false is true
+PASS 1 / -1 ? true : false is true
+PASS 1 / 0 ? true : false is true
+PASS 1 / 1 ? true : false is true
+PASS 1 % 2 ? true : false is true
+PASS 1 % 1 ? true : false is false
+PASS 1 + -1 ? true : false is false
+PASS 1 + 0 ? true : false is true
+PASS 1 + 1 ? true : false is true
+PASS 1 - -1 ? true : false is true
+PASS 1 - 0 ? true : false is true
+PASS 1 - 1 ? true : false is false
+PASS 1 & -1 ? true : false is true
+PASS 1 & 0 ? true : false is false
+PASS 1 & 1 ? true : false is true
+PASS 1 | -1 ? true : false is true
+PASS 1 | 0 ? true : false is true
+PASS 1 | 1 ? true : false is true
+PASS 1 ^ -1 ? true : false is true
+PASS 1 ^ 0 ? true : false is true
+PASS 1 ^ 1 ? true : false is false
+PASS NaN * -1 ? true : false is false
+PASS NaN * 0? true : false is false
+PASS NaN * 1? true : false is false
+PASS NaN / -1 ? true : false is false
+PASS NaN / 0? true : false is false
+PASS NaN / 1? true : false is false
+PASS NaN % -1 ? true : false is false
+PASS NaN % 0? true : false is false
+PASS NaN % 1? true : false is false
+PASS NaN + -1 ? true : false is false
+PASS NaN + 0? true : false is false
+PASS NaN + 1? true : false is false
+PASS NaN - -1 ? true : false is false
+PASS NaN - 0? true : false is false
+PASS NaN - 1? true : false is false
+PASS NaN & -1 ? true : false is false
+PASS NaN & 0? true : false is false
+PASS NaN & 1? true : false is false
+PASS NaN | -1 ? true : false is true
+PASS NaN | 0? true : false is false
+PASS NaN | 1? true : false is true
+PASS NaN ^ -1 ? true : false is true
+PASS NaN ^ 0? true : false is false
+PASS NaN ^ 1? true : false is true
+PASS +NaN ? true : false is false
+PASS -NaN ? true : false is false
+PASS NaN && true ? true : false is false
+PASS NaN && false ? true : false is false
+PASS NaN || true ? true : false is true
+PASS NaN || false ? true : false is false
+PASS (function(){var nan = NaN; return nan-- ? true : false})() is false
+PASS (function(){var nan = NaN; return nan++ ? true : false})() is false
+PASS (function(){var nan = NaN; return --nan ? true : false})() is false
+PASS (function(){var nan = NaN; return ++nan ? true : false})() is false
+PASS (function(){var Undefined = undefined; return Undefined-- ? true : false})() is false
+PASS (function(){var Undefined = undefined; return Undefined++ ? true : false})() is false
+PASS (function(){var Undefined = undefined; return --Undefined ? true : false})() is false
+PASS (function(){var Undefined = undefined; return ++Undefined ? true : false})() is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/convert-nan-to-bool.js b/deps/v8/test/webkit/convert-nan-to-bool.js
new file mode 100644 (file)
index 0000000..aae679e
--- /dev/null
@@ -0,0 +1,90 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This test ensures that NaN is handled correctly when converting numeric expressions to booleans.");
+
+shouldBe("NaN ? true : false", "false");
+shouldBe("1 ? true : false", "true");
+shouldBe("0 ? true : false", "false");
+shouldBe("-1 ? true : false", "true");
+shouldBe("1 * -1 ? true : false", "true");
+shouldBe("1 * 0 ? true : false", "false");
+shouldBe("1 * 1 ? true : false", "true");
+shouldBe("1 / -1 ? true : false", "true");
+shouldBe("1 / 0 ? true : false", "true");
+shouldBe("1 / 1 ? true : false", "true");
+shouldBe("1 % 2 ? true : false", "true");
+shouldBe("1 % 1 ? true : false", "false");
+shouldBe("1 + -1 ? true : false", "false");
+shouldBe("1 + 0 ? true : false", "true");
+shouldBe("1 + 1 ? true : false", "true");
+shouldBe("1 - -1 ? true : false", "true");
+shouldBe("1 - 0 ? true : false", "true");
+shouldBe("1 - 1 ? true : false", "false");
+shouldBe("1 & -1 ? true : false", "true");
+shouldBe("1 & 0 ? true : false", "false");
+shouldBe("1 & 1 ? true : false", "true");
+shouldBe("1 | -1 ? true : false", "true");
+shouldBe("1 | 0 ? true : false", "true");
+shouldBe("1 | 1 ? true : false", "true");
+shouldBe("1 ^ -1 ? true : false", "true");
+shouldBe("1 ^ 0 ? true : false", "true");
+shouldBe("1 ^ 1 ? true : false", "false");
+shouldBe("NaN * -1 ? true : false", "false");
+shouldBe("NaN * 0? true : false", "false");
+shouldBe("NaN * 1? true : false", "false");
+shouldBe("NaN / -1 ? true : false", "false");
+shouldBe("NaN / 0? true : false", "false");
+shouldBe("NaN / 1? true : false", "false");
+shouldBe("NaN % -1 ? true : false", "false");
+shouldBe("NaN % 0? true : false", "false");
+shouldBe("NaN % 1? true : false", "false");
+shouldBe("NaN + -1 ? true : false", "false");
+shouldBe("NaN + 0? true : false", "false");
+shouldBe("NaN + 1? true : false", "false");
+shouldBe("NaN - -1 ? true : false", "false");
+shouldBe("NaN - 0? true : false", "false");
+shouldBe("NaN - 1? true : false", "false");
+shouldBe("NaN & -1 ? true : false", "false");
+shouldBe("NaN & 0? true : false", "false");
+shouldBe("NaN & 1? true : false", "false");
+shouldBe("NaN | -1 ? true : false", "true");
+shouldBe("NaN | 0? true : false", "false");
+shouldBe("NaN | 1? true : false", "true");
+shouldBe("NaN ^ -1 ? true : false", "true");
+shouldBe("NaN ^ 0? true : false", "false");
+shouldBe("NaN ^ 1? true : false", "true");
+shouldBe("+NaN ? true : false", "false");
+shouldBe("-NaN ? true : false", "false");
+shouldBe("NaN && true ? true : false", "false");
+shouldBe("NaN && false ? true : false", "false");
+shouldBe("NaN || true ? true : false", "true");
+shouldBe("NaN || false ? true : false", "false");
+shouldBe("(function(){var nan = NaN; return nan-- ? true : false})()", "false");
+shouldBe("(function(){var nan = NaN; return nan++ ? true : false})()", "false");
+shouldBe("(function(){var nan = NaN; return --nan ? true : false})()", "false");
+shouldBe("(function(){var nan = NaN; return ++nan ? true : false})()", "false");
+shouldBe("(function(){var Undefined = undefined; return Undefined-- ? true : false})()", "false");
+shouldBe("(function(){var Undefined = undefined; return Undefined++ ? true : false})()", "false");
+shouldBe("(function(){var Undefined = undefined; return --Undefined ? true : false})()", "false");
+shouldBe("(function(){var Undefined = undefined; return ++Undefined ? true : false})()", "false");
diff --git a/deps/v8/test/webkit/cyclic-prototypes-expected.txt b/deps/v8/test/webkit/cyclic-prototypes-expected.txt
new file mode 100644 (file)
index 0000000..7ac87b0
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test makes sure we don't hang when setting cyclic prototype values: http://bugs.webkit.org/show_bug.cgi?id=6985
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o1.__proto__ = o3; threw exception Error: Cyclic __proto__ value.
+PASS ({}).hasOwnProperty.call(o1, '__proto__') is false
+PASS ({}).hasOwnProperty.call(o1, '__proto__') is true
+PASS Object.getPrototypeOf(o1) is null
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/cyclic-prototypes.js b/deps/v8/test/webkit/cyclic-prototypes.js
new file mode 100644 (file)
index 0000000..35f5775
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This test makes sure we don't hang when setting cyclic prototype values: http://bugs.webkit.org/show_bug.cgi?id=6985")
+
+var o1 = { p1: 1 };
+var o2 = { p2: 2 };
+o2.__proto__ = o1;
+var o3 = { p3: 3 };
+o3.__proto__ = o2;
+
+// Try to create a cyclical prototype chain.
+shouldThrow("o1.__proto__ = o3;");
+
+// This changes behaviour, since __proto__ is an accessor on Object.prototype.
+o1.__proto__ = null;
+
+shouldBeFalse("({}).hasOwnProperty.call(o1, '__proto__')");
+o1.__proto__ = o3;
+shouldBeTrue("({}).hasOwnProperty.call(o1, '__proto__')");
+shouldBe("Object.getPrototypeOf(o1)", "null");
diff --git a/deps/v8/test/webkit/date-DST-pre-1970-expected.txt b/deps/v8/test/webkit/date-DST-pre-1970-expected.txt
new file mode 100644 (file)
index 0000000..0bd2635
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests the DST status in dates earlier than 1970-01-01 00:00 UTC. Regardless of your time zone, it should not fail. This tests time zones: US/Pacific, US/Central, US/Mountain, US/Eastern, CET, Asia/Jerusalem and NZ.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS (new Date(1970, 0, 1)).getHours() is 0
+PASS (new Date(1969, 8, 1)).getHours() is 0
+PASS (new Date(1969, 9, 28)).getHours() is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/date-DST-pre-1970.js b/deps/v8/test/webkit/date-DST-pre-1970.js
new file mode 100644 (file)
index 0000000..a8ac4e7
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests the DST status in dates earlier than 1970-01-01 00:00 UTC. Regardless of your time zone, it should not fail. This tests time zones: US/Pacific, US/Central, US/Mountain, US/Eastern, CET, Asia/Jerusalem and NZ."
+);
+
+shouldBe("(new Date(1970, 0, 1)).getHours()", "0");
+shouldBe("(new Date(1969, 8, 1)).getHours()", "0");
+shouldBe("(new Date(1969, 9, 28)).getHours()", "0");
diff --git a/deps/v8/test/webkit/date-constructor-expected.txt b/deps/v8/test/webkit/date-constructor-expected.txt
new file mode 100644 (file)
index 0000000..366a39d
--- /dev/null
@@ -0,0 +1,63 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test case tests the Date constructor. In particular, it tests many cases of creating a Date from another Date and creating a Date from an object that has both valueOf and toString functions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS isNaN(new Date("")) is true
+PASS new Date(1111).getTime() is 1111
+PASS new Date(object).getTime() is 1111
+PASS new Date(new Date(1111)).getTime() is 1111
+PASS new Date(new Date(1111).toString()).getTime() is 1000
+PASS new Date(1111, 1).getTime() - timeZoneOffset is -27104803200000
+PASS new Date(1111, 1, 1).getTime() - timeZoneOffset is -27104803200000
+PASS new Date(1111, 1, 1, 1).getTime() - timeZoneOffset is -27104799600000
+PASS new Date(1111, 1, 1, 1, 1).getTime() - timeZoneOffset is -27104799540000
+PASS new Date(1111, 1, 1, 1, 1, 1).getTime() - timeZoneOffset is -27104799539000
+PASS new Date(1111, 1, 1, 1, 1, 1, 1).getTime() - timeZoneOffset is -27104799538999
+PASS new Date(1111, 1, 1, 1, 1, 1, 1, 1).getTime() - timeZoneOffset is -27104799538999
+PASS new Date(1111, 1, 1, 1, 1, 1, 1, 1, 1).getTime() - timeZoneOffset is -27104799538999
+PASS new Date(1111, 1, 1, 1, 1, 1, 1, 1, 1).getTime() - timeZoneOffset is -27104799538999
+PASS new Date(new Date(1111, 1)).getTime() - timeZoneOffset is -27104803200000
+PASS new Date(new Date(1111, 1, 1)).getTime() - timeZoneOffset is -27104803200000
+PASS new Date(new Date(1111, 1, 1, 1)).getTime() - timeZoneOffset is -27104799600000
+PASS new Date(new Date(1111, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset is -27104799539000
+PASS new Date(new Date(1111, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset is -27104799538999
+PASS new Date(new Date(1111, 1, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset is -27104799538999
+PASS new Date(new Date(1111, 1, 1, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset is -27104799538999
+PASS Number(new Date(new Date(Infinity, 1, 1, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset) is Number.NaN
+PASS Number(new Date(new Date(1, Infinity, 1, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset) is Number.NaN
+PASS Number(new Date(new Date(1, 1, Infinity, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset) is Number.NaN
+PASS Number(new Date(new Date(1, 1, 1, Infinity, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset) is Number.NaN
+PASS Number(new Date(new Date(1, 1, 1, 1, Infinity, 1, 1, 1, 1)).getTime() - timeZoneOffset) is Number.NaN
+PASS Number(new Date(new Date(1, 1, 1, 1, 1, Infinity, 1, 1, 1)).getTime() - timeZoneOffset) is Number.NaN
+PASS Number(new Date(new Date(1, 1, 1, 1, 1, 1, Infinity, 1, 1)).getTime() - timeZoneOffset) is Number.NaN
+PASS Number(new Date(new Date(1, 1, 1, 1, 1, 1, 1, 1, Infinity)).getTime() - timeZoneOffset) is -2174770738999
+PASS testStr is "1234567"
+PASS testStr is "1234567"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/date-constructor.js b/deps/v8/test/webkit/date-constructor.js
new file mode 100644 (file)
index 0000000..e96d970
--- /dev/null
@@ -0,0 +1,91 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This test case tests the Date constructor. ' +
+'In particular, it tests many cases of creating a Date from another Date ' +
+'and creating a Date from an object that has both valueOf and toString functions.'
+);
+
+var object = new Object;
+object.valueOf = function() { return 1111; }
+object.toString = function() { return "2222"; }
+
+shouldBe('isNaN(new Date(""))', 'true');
+
+var timeZoneOffset = Date.parse("Dec 25 1995") - Date.parse("Dec 25 1995 GMT");
+
+shouldBe('new Date(1111).getTime()', '1111');
+shouldBe('new Date(object).getTime()', '1111');
+shouldBe('new Date(new Date(1111)).getTime()', '1111');
+shouldBe('new Date(new Date(1111).toString()).getTime()', '1000');
+
+shouldBe('new Date(1111, 1).getTime() - timeZoneOffset', '-27104803200000');
+shouldBe('new Date(1111, 1, 1).getTime() - timeZoneOffset', '-27104803200000');
+shouldBe('new Date(1111, 1, 1, 1).getTime() - timeZoneOffset', '-27104799600000');
+shouldBe('new Date(1111, 1, 1, 1, 1).getTime() - timeZoneOffset', '-27104799540000');
+shouldBe('new Date(1111, 1, 1, 1, 1, 1).getTime() - timeZoneOffset', '-27104799539000');
+shouldBe('new Date(1111, 1, 1, 1, 1, 1, 1).getTime() - timeZoneOffset', '-27104799538999');
+shouldBe('new Date(1111, 1, 1, 1, 1, 1, 1, 1).getTime() - timeZoneOffset', '-27104799538999');
+shouldBe('new Date(1111, 1, 1, 1, 1, 1, 1, 1, 1).getTime() - timeZoneOffset', '-27104799538999');
+shouldBe('new Date(1111, 1, 1, 1, 1, 1, 1, 1, 1).getTime() - timeZoneOffset', '-27104799538999');
+
+shouldBe('new Date(new Date(1111, 1)).getTime() - timeZoneOffset', '-27104803200000');
+shouldBe('new Date(new Date(1111, 1, 1)).getTime() - timeZoneOffset', '-27104803200000');
+shouldBe('new Date(new Date(1111, 1, 1, 1)).getTime() - timeZoneOffset', '-27104799600000');
+shouldBe('new Date(new Date(1111, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset', '-27104799539000');
+shouldBe('new Date(new Date(1111, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset', '-27104799538999');
+shouldBe('new Date(new Date(1111, 1, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset', '-27104799538999');
+shouldBe('new Date(new Date(1111, 1, 1, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset', '-27104799538999');
+
+shouldBe("Number(new Date(new Date(Infinity, 1, 1, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset)", 'Number.NaN');
+shouldBe("Number(new Date(new Date(1, Infinity, 1, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset)", 'Number.NaN');
+shouldBe("Number(new Date(new Date(1, 1, Infinity, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset)", 'Number.NaN');
+shouldBe("Number(new Date(new Date(1, 1, 1, Infinity, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset)", 'Number.NaN');
+shouldBe("Number(new Date(new Date(1, 1, 1, 1, Infinity, 1, 1, 1, 1)).getTime() - timeZoneOffset)", 'Number.NaN');
+shouldBe("Number(new Date(new Date(1, 1, 1, 1, 1, Infinity, 1, 1, 1)).getTime() - timeZoneOffset)", 'Number.NaN');
+shouldBe("Number(new Date(new Date(1, 1, 1, 1, 1, 1, Infinity, 1, 1)).getTime() - timeZoneOffset)", 'Number.NaN');
+shouldBe("Number(new Date(new Date(1, 1, 1, 1, 1, 1, 1, 1, Infinity)).getTime() - timeZoneOffset)", '-2174770738999');
+
+// In Firefox, the results of the following tests are timezone-dependent, which likely implies that the implementation is not quite correct.
+// Our results are even worse, though, as the dates are clipped: (new Date(1111, 1201).getTime()) == (new Date(1111, 601).getTime())
+// shouldBe('new Date(1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111).getTime() - timeZoneOffset', '-24085894227889');
+// shouldBe('new Date(new Date(1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111)).getTime() - timeZoneOffset', '-24085894227889');
+
+// Regression test for Bug 26978 (https://bugs.webkit.org/show_bug.cgi?id=26978)
+var testStr = "";
+var year = { valueOf: function() { testStr += 1; return 2007; } };
+var month = { valueOf: function() { testStr += 2; return 2; } };
+var date = { valueOf: function() { testStr += 3; return 4; } };
+var hours = { valueOf: function() { testStr += 4; return 13; } };
+var minutes = { valueOf: function() { testStr += 5; return 50; } };
+var seconds = { valueOf: function() { testStr += 6; return 0; } };
+var ms = { valueOf: function() { testStr += 7; return 999; } };
+
+testStr = "";
+new Date(year, month, date, hours, minutes, seconds, ms);
+shouldBe('testStr', '\"1234567\"');
+
+testStr = "";
+Date.UTC(year, month, date, hours, minutes, seconds, ms);
+shouldBe('testStr', '\"1234567\"');
diff --git a/deps/v8/test/webkit/date-daysfrom1970-overflow-expected.txt b/deps/v8/test/webkit/date-daysfrom1970-overflow-expected.txt
new file mode 100644 (file)
index 0000000..bb9d221
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test confirms an assertion in dateToDaysFrom1970() in wtf/DateMath.cpp passes. The function had a bug setting a number larger than INT_MAX to an int variable.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS d.getTime() is NaN
+PASS Date.UTC(1970, 0, 1, 0, 0, 0, 0) is 0
+PASS d.getTime() is NaN
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/date-daysfrom1970-overflow.js b/deps/v8/test/webkit/date-daysfrom1970-overflow.js
new file mode 100644 (file)
index 0000000..69b40b3
--- /dev/null
@@ -0,0 +1,32 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('This test confirms an assertion in dateToDaysFrom1970() in wtf/DateMath.cpp passes. The function had a bug setting a number larger than INT_MAX to an int variable.');
+
+var d = new Date(20000000, 0, 1);
+shouldBe('d.getTime()', 'NaN');
+
+shouldBe('Date.UTC(1970, 0, 1, 0, 0, 0, 0)', '0');
+
+d = new Date(-20000000, 0, 1);
+shouldBe('d.getTime()', 'NaN');
diff --git a/deps/v8/test/webkit/date-parse-comments-test-expected.txt b/deps/v8/test/webkit/date-parse-comments-test-expected.txt
new file mode 100644 (file)
index 0000000..038f278
--- /dev/null
@@ -0,0 +1,170 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+test of JavaScript date parsing (comments in parentheses)
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Date.parse("Dec ((27) 26 (24)) 25 1995 1:30 PM UTC") == 819898200000 is true
+PASS Date.parse("DEC ((27) 26 (24)) 25 1995 1:30 PM UTC") == 819898200000 is true
+PASS Date.parse("dec ((27) 26 (24)) 25 1995 1:30 pm utc") == 819898200000 is true
+PASS Date.parse("Dec 25 1995 1:30 PM UTC (") == 819898200000 is true
+PASS Date.parse("DEC 25 1995 1:30 PM UTC (") == 819898200000 is true
+PASS Date.parse("dec 25 1995 1:30 pm utc (") == 819898200000 is true
+PASS Date.parse("Dec 25 1995 1:30 (PM)) UTC") is NaN
+PASS Date.parse("DEC 25 1995 1:30 (PM)) UTC") is NaN
+PASS Date.parse("dec 25 1995 1:30 (pm)) utc") is NaN
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) GMT (EST)") == 819849600000 is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) GMT (EST)") == 819849600000 is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) gmt (est)") == 819849600000 is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996)") == 819849600000 + timeZoneOffset is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996)") == 819849600000 + timeZoneOffset is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996)") == 819849600000 + timeZoneOffset is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 (1:40) GMT (EST)") == 819855000000 is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) 1:30 (1:40) GMT (EST)") == 819855000000 is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) 1:30 (1:40) gmt (est)") == 819855000000 is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 (1:40)") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) 1:30 (1:40)") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) 1:30 (1:40)") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 ") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) 1:30 ") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) 1:30 ") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 AM (1:40 PM) GMT (EST)") == 819855000000 is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) 1:30 AM (1:40 PM) GMT (EST)") == 819855000000 is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) 1:30 am (1:40 pm) gmt (est)") == 819855000000 is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 AM (1:40 PM)") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) 1:30 AM (1:40 PM)") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) 1:30 am (1:40 pm)") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("Dec 25 1995 1:30( )AM (PM)") is NaN
+PASS Date.parse("DEC 25 1995 1:30( )AM (PM)") is NaN
+PASS Date.parse("dec 25 1995 1:30( )am (pm)") is NaN
+PASS Date.parse("Dec 25 1995 1:30 AM (PM)") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("DEC 25 1995 1:30 AM (PM)") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("dec 25 1995 1:30 am (pm)") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) 13:30 (13:40) GMT (PST)") == 819898200000 is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) 13:30 (13:40) GMT (PST)") == 819898200000 is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) 13:30 (13:40) gmt (pst)") == 819898200000 is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) 13:30 (13:40)") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) 13:30 (13:40)") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) 13:30 (13:40)") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 13:30 (13:40) 1995 (1996)") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 13:30 (13:40) 1995 (1996)") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(nov) dec (24) 25 (26) 13:30 (13:40) 1995 (1996)") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) 13:30 (13:40) ") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) 13:30 (13:40) ") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) 13:30 (13:40) ") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 (1:40) PM (AM) GMT (PST)") == 819898200000 is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) 1:30 (1:40) PM (AM) GMT (PST)") == 819898200000 is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) 1:30 (1:40) pm (am) gmt (pst)") == 819898200000 is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 (1:40) PM (AM)") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) 1:30 (1:40) PM (AM)") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) 1:30 (1:40) pm (am)") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("Dec 25 1995 1:30(AM)PM") is NaN
+PASS Date.parse("DEC 25 1995 1:30(AM)PM") is NaN
+PASS Date.parse("dec 25 1995 1:30(am)pm") is NaN
+PASS Date.parse("Dec 25 1995 1:30 (AM)PM ") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("DEC 25 1995 1:30 (AM)PM ") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("dec 25 1995 1:30 (am)pm ") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("Dec 25 1995 (PDT)UTC(PST)") == 819849600000 is true
+PASS Date.parse("DEC 25 1995 (PDT)UTC(PST)") == 819849600000 is true
+PASS Date.parse("dec 25 1995 (pdt)utc(pst)") == 819849600000 is true
+PASS Date.parse("Dec 25 1995 (PDT)UT(PST)") == 819849600000 is true
+PASS Date.parse("DEC 25 1995 (PDT)UT(PST)") == 819849600000 is true
+PASS Date.parse("dec 25 1995 (pdt)ut(pst)") == 819849600000 is true
+PASS Date.parse("Dec 25 1995 (UTC)PST(GMT)") == 819878400000 is true
+PASS Date.parse("DEC 25 1995 (UTC)PST(GMT)") == 819878400000 is true
+PASS Date.parse("dec 25 1995 (utc)pst(gmt)") == 819878400000 is true
+PASS Date.parse("Dec 25 1995 (UTC)PDT(GMT)") == 819874800000 is true
+PASS Date.parse("DEC 25 1995 (UTC)PDT(GMT)") == 819874800000 is true
+PASS Date.parse("dec 25 1995 (utc)pdt(gmt)") == 819874800000 is true
+PASS Date.parse("Dec 25 1995 1:30 (PDT)UTC(PST)") == 819855000000 is true
+PASS Date.parse("DEC 25 1995 1:30 (PDT)UTC(PST)") == 819855000000 is true
+PASS Date.parse("dec 25 1995 1:30 (pdt)utc(pst)") == 819855000000 is true
+PASS Date.parse("Dec 25 1995 1:30 (PDT)UT(PST)") == 819855000000 is true
+PASS Date.parse("DEC 25 1995 1:30 (PDT)UT(PST)") == 819855000000 is true
+PASS Date.parse("dec 25 1995 1:30 (pdt)ut(pst)") == 819855000000 is true
+PASS Date.parse("Dec 25 1995 1:30 (UTC)PST(GMT)") == 819883800000 is true
+PASS Date.parse("DEC 25 1995 1:30 (UTC)PST(GMT)") == 819883800000 is true
+PASS Date.parse("dec 25 1995 1:30 (utc)pst(gmt)") == 819883800000 is true
+PASS Date.parse("Dec 25 1995 1:30 (UTC)PDT(GMT)") == 819880200000 is true
+PASS Date.parse("DEC 25 1995 1:30 (UTC)PDT(GMT)") == 819880200000 is true
+PASS Date.parse("dec 25 1995 1:30 (utc)pdt(gmt)") == 819880200000 is true
+PASS Date.parse("Dec 25 1995 1:30 (AM) PM (PST) UTC") == 819898200000 is true
+PASS Date.parse("DEC 25 1995 1:30 (AM) PM (PST) UTC") == 819898200000 is true
+PASS Date.parse("dec 25 1995 1:30 (am) pm (pst) utc") == 819898200000 is true
+PASS Date.parse("Dec 25 1995 1:30 PM (AM) (PST) UT") == 819898200000 is true
+PASS Date.parse("DEC 25 1995 1:30 PM (AM) (PST) UT") == 819898200000 is true
+PASS Date.parse("dec 25 1995 1:30 pm (am) (pst) ut") == 819898200000 is true
+PASS Date.parse("Dec 25 1995 1:30 PM (AM) (UTC) PST") == 819927000000 is true
+PASS Date.parse("DEC 25 1995 1:30 PM (AM) (UTC) PST") == 819927000000 is true
+PASS Date.parse("dec 25 1995 1:30 pm (am) (utc) pst") == 819927000000 is true
+PASS Date.parse("Dec 25 1995 1:30 (AM) PM PDT (UTC)") == 819923400000 is true
+PASS Date.parse("DEC 25 1995 1:30 (AM) PM PDT (UTC)") == 819923400000 is true
+PASS Date.parse("dec 25 1995 1:30 (am) pm pdt (utc)") == 819923400000 is true
+PASS Date.parse("Dec 25 1995 XXX (GMT)") is NaN
+PASS Date.parse("DEC 25 1995 XXX (GMT)") is NaN
+PASS Date.parse("dec 25 1995 xxx (gmt)") is NaN
+PASS Date.parse("Dec 25 1995 1:30 XXX (GMT)") is NaN
+PASS Date.parse("DEC 25 1995 1:30 XXX (GMT)") is NaN
+PASS Date.parse("dec 25 1995 1:30 xxx (gmt)") is NaN
+PASS Date.parse("Dec 25 1995 1:30 U(TC)") is NaN
+PASS Date.parse("DEC 25 1995 1:30 U(TC)") is NaN
+PASS Date.parse("dec 25 1995 1:30 u(tc)") is NaN
+PASS Date.parse("Dec 25 1995 1:30 V(UTC)") is NaN
+PASS Date.parse("DEC 25 1995 1:30 V(UTC)") is NaN
+PASS Date.parse("dec 25 1995 1:30 v(utc)") is NaN
+PASS Date.parse("Dec 25 1995 1:30 (UTC)W") is NaN
+PASS Date.parse("DEC 25 1995 1:30 (UTC)W") is NaN
+PASS Date.parse("dec 25 1995 1:30 (utc)w") is NaN
+PASS Date.parse("Dec 25 1995 1:30 (GMT)X") is NaN
+PASS Date.parse("DEC 25 1995 1:30 (GMT)X") is NaN
+PASS Date.parse("dec 25 1995 1:30 (gmt)x") is NaN
+PASS Date.parse("Dec 25 1995 0:30 (PM) GMT") == 819851400000 is true
+PASS Date.parse("DEC 25 1995 0:30 (PM) GMT") == 819851400000 is true
+PASS Date.parse("dec 25 1995 0:30 (pm) gmt") == 819851400000 is true
+PASS Date.parse("Dec 25 1995 (1)0:30 AM GMT") == 819851400000 is true
+PASS Date.parse("DEC 25 1995 (1)0:30 AM GMT") == 819851400000 is true
+PASS Date.parse("dec 25 1995 (1)0:30 am gmt") == 819851400000 is true
+PASS Date.parse("Dec 25 1995 (1)0:30 PM GMT") == 819894600000 is true
+PASS Date.parse("DEC 25 1995 (1)0:30 PM GMT") == 819894600000 is true
+PASS Date.parse("dec 25 1995 (1)0:30 pm gmt") == 819894600000 is true
+PASS Date.parse("Anf(Dec) 25 1995 GMT") is NaN
+PASS Date.parse("ANF(DEC) 25 1995 GMT") is NaN
+PASS Date.parse("anf(dec) 25 1995 gmt") is NaN
+PASS Date.parse("(Sat) Wed (Nov) Dec (Nov) 25 1995 1:30 GMT") == 819855000000 is true
+PASS Date.parse("(SAT) WED (NOV) DEC (NOV) 25 1995 1:30 GMT") == 819855000000 is true
+PASS Date.parse("(sat) wed (nov) dec (nov) 25 1995 1:30 gmt") == 819855000000 is true
+PASS Date.parse("Wed (comment 1) (comment 2) Dec 25 1995 1:30 GMT") == 819855000000 is true
+PASS Date.parse("WED (COMMENT 1) (COMMENT 2) DEC 25 1995 1:30 GMT") == 819855000000 is true
+PASS Date.parse("wed (comment 1) (comment 2) dec 25 1995 1:30 gmt") == 819855000000 is true
+PASS Date.parse("Wed(comment 1) (comment 2) Dec 25 1995 1:30 GMT") == 819855000000 is true
+PASS Date.parse("WED(COMMENT 1) (COMMENT 2) DEC 25 1995 1:30 GMT") == 819855000000 is true
+PASS Date.parse("wed(comment 1) (comment 2) dec 25 1995 1:30 gmt") == 819855000000 is true
+PASS Date.parse("We(comment 1) (comment 2) Dec 25 1995 1:30 GMT") == 819855000000 is true
+PASS Date.parse("WE(COMMENT 1) (COMMENT 2) DEC 25 1995 1:30 GMT") == 819855000000 is true
+PASS Date.parse("we(comment 1) (comment 2) dec 25 1995 1:30 gmt") == 819855000000 is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/date-parse-comments-test.js b/deps/v8/test/webkit/date-parse-comments-test.js
new file mode 100644 (file)
index 0000000..2a4d8b6
--- /dev/null
@@ -0,0 +1,98 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"test of JavaScript date parsing (comments in parentheses)"
+);
+
+function testDateParse(date, numericResult)
+{
+    if (numericResult == "NaN") {
+        shouldBeNaN('Date.parse("' + date + '")');
+        shouldBeNaN('Date.parse("' + date.toUpperCase() + '")');
+        shouldBeNaN('Date.parse("' + date.toLowerCase() + '")');
+    } else {
+        shouldBeTrue('Date.parse("' + date + '") == ' + numericResult);
+        shouldBeTrue('Date.parse("' + date.toUpperCase() + '") == ' + numericResult);
+        shouldBeTrue('Date.parse("' + date.toLowerCase() + '") == ' + numericResult);
+    }
+}
+
+var timeZoneOffset = Date.parse(" Dec 25 1995 1:30 ") - Date.parse(" Dec 25 1995 1:30 GMT ");
+
+testDateParse("Dec ((27) 26 (24)) 25 1995 1:30 PM UTC", "819898200000");
+testDateParse("Dec 25 1995 1:30 PM UTC (", "819898200000");
+testDateParse("Dec 25 1995 1:30 (PM)) UTC", "NaN");
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) GMT (EST)", "819849600000");
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996)", "819849600000 + timeZoneOffset");
+
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 (1:40) GMT (EST)", "819855000000");
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 (1:40)", "819855000000 + timeZoneOffset");
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 ", "819855000000 + timeZoneOffset");
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 AM (1:40 PM) GMT (EST)", "819855000000");
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 AM (1:40 PM)", "819855000000 + timeZoneOffset");
+testDateParse("Dec 25 1995 1:30( )AM (PM)", "NaN");
+testDateParse("Dec 25 1995 1:30 AM (PM)", "819855000000 + timeZoneOffset");
+
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) 13:30 (13:40) GMT (PST)", "819898200000");
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) 13:30 (13:40)", "819898200000 + timeZoneOffset");
+testDateParse('(Nov) Dec (24) 25 (26) 13:30 (13:40) 1995 (1996)', "819898200000 + timeZoneOffset");
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) 13:30 (13:40) ", "819898200000 + timeZoneOffset");
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 (1:40) PM (AM) GMT (PST)", "819898200000");
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 (1:40) PM (AM)", "819898200000 + timeZoneOffset");
+testDateParse("Dec 25 1995 1:30(AM)PM", "NaN");
+testDateParse("Dec 25 1995 1:30 (AM)PM ", "819898200000 + timeZoneOffset");
+
+testDateParse("Dec 25 1995 (PDT)UTC(PST)", "819849600000");
+testDateParse("Dec 25 1995 (PDT)UT(PST)", "819849600000");
+testDateParse("Dec 25 1995 (UTC)PST(GMT)", "819878400000");
+testDateParse("Dec 25 1995 (UTC)PDT(GMT)", "819874800000");
+
+testDateParse("Dec 25 1995 1:30 (PDT)UTC(PST)", "819855000000");
+testDateParse("Dec 25 1995 1:30 (PDT)UT(PST)", "819855000000");
+testDateParse("Dec 25 1995 1:30 (UTC)PST(GMT)", "819883800000");
+testDateParse("Dec 25 1995 1:30 (UTC)PDT(GMT)", "819880200000");
+
+testDateParse("Dec 25 1995 1:30 (AM) PM (PST) UTC", "819898200000");
+testDateParse("Dec 25 1995 1:30 PM (AM) (PST) UT", "819898200000");
+testDateParse("Dec 25 1995 1:30 PM (AM) (UTC) PST", "819927000000");
+testDateParse("Dec 25 1995 1:30 (AM) PM PDT (UTC)", "819923400000");
+
+testDateParse("Dec 25 1995 XXX (GMT)", "NaN");
+testDateParse("Dec 25 1995 1:30 XXX (GMT)", "NaN");
+
+testDateParse("Dec 25 1995 1:30 U(TC)", "NaN");
+testDateParse("Dec 25 1995 1:30 V(UTC)", "NaN");
+testDateParse("Dec 25 1995 1:30 (UTC)W", "NaN");
+testDateParse("Dec 25 1995 1:30 (GMT)X", "NaN");
+
+testDateParse("Dec 25 1995 0:30 (PM) GMT", "819851400000");
+testDateParse("Dec 25 1995 (1)0:30 AM GMT", "819851400000");
+testDateParse("Dec 25 1995 (1)0:30 PM GMT", "819894600000");
+
+testDateParse("Anf(Dec) 25 1995 GMT", "NaN");
+
+testDateParse("(Sat) Wed (Nov) Dec (Nov) 25 1995 1:30 GMT", "819855000000");
+testDateParse("Wed (comment 1) (comment 2) Dec 25 1995 1:30 GMT", "819855000000");
+testDateParse("Wed(comment 1) (comment 2) Dec 25 1995 1:30 GMT", "819855000000");
+testDateParse("We(comment 1) (comment 2) Dec 25 1995 1:30 GMT", "819855000000");
diff --git a/deps/v8/test/webkit/date-set-to-nan-expected.txt b/deps/v8/test/webkit/date-set-to-nan-expected.txt
new file mode 100644 (file)
index 0000000..4ec7869
--- /dev/null
@@ -0,0 +1,129 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests if the Date setters handle invalid parameters correctly resulting in a NaN date and if a recovery from such a NaN date is only possible by using the date.setTime() and date.set[[UTC]Full]Year() functions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS date.setTime(arg0)
+PASS date.setTime()
+PASS recover from NaN date using date.setTime()
+PASS date.setTime passed all tests
+PASS date.setMilliseconds(arg0)
+PASS date.setMilliseconds()
+PASS no recovering from NaN date using date.setMilliseconds(arg0)
+PASS date.setMilliseconds passed all tests
+PASS date.setUTCMilliseconds(arg0)
+PASS date.setUTCMilliseconds()
+PASS no recovering from NaN date using date.setUTCMilliseconds(arg0)
+PASS date.setUTCMilliseconds passed all tests
+PASS date.setSeconds(arg0, arg1)
+PASS no recovering from NaN date using date.setSeconds(arg0, 0)
+PASS date.setSeconds(arg0)
+PASS date.setSeconds()
+PASS no recovering from NaN date using date.setSeconds(arg0)
+PASS date.setSeconds passed all tests
+PASS date.setUTCSeconds(arg0, arg1)
+PASS no recovering from NaN date using date.setUTCSeconds(arg0, 0)
+PASS date.setUTCSeconds(arg0)
+PASS date.setUTCSeconds()
+PASS no recovering from NaN date using date.setUTCSeconds(arg0)
+PASS date.setUTCSeconds passed all tests
+PASS date.setMinutes(arg0, arg1, arg2)
+PASS no recovering from NaN date using date.setMinutes(arg0, 0, 0)
+PASS date.setMinutes(arg0, arg1)
+PASS no recovering from NaN date using date.setMinutes(arg0, 0)
+PASS date.setMinutes(arg0)
+PASS date.setMinutes()
+PASS no recovering from NaN date using date.setMinutes(arg0)
+PASS date.setMinutes passed all tests
+PASS date.setUTCMinutes(arg0, arg1, arg2)
+PASS no recovering from NaN date using date.setUTCMinutes(arg0, 0, 0)
+PASS date.setUTCMinutes(arg0, arg1)
+PASS no recovering from NaN date using date.setUTCMinutes(arg0, 0)
+PASS date.setUTCMinutes(arg0)
+PASS date.setUTCMinutes()
+PASS no recovering from NaN date using date.setUTCMinutes(arg0)
+PASS date.setUTCMinutes passed all tests
+PASS date.setHours(arg0, arg1, arg2, arg3)
+PASS no recovering from NaN date using date.setHours(arg0, 0, 0, 0)
+PASS date.setHours(arg0, arg1, arg2)
+PASS no recovering from NaN date using date.setHours(arg0, 0, 0)
+PASS date.setHours(arg0, arg1)
+PASS no recovering from NaN date using date.setHours(arg0, 0)
+PASS date.setHours(arg0)
+PASS date.setHours()
+PASS no recovering from NaN date using date.setHours(arg0)
+PASS date.setHours passed all tests
+PASS date.setUTCHours(arg0, arg1, arg2, arg3)
+PASS no recovering from NaN date using date.setUTCHours(arg0, 0, 0, 0)
+PASS date.setUTCHours(arg0, arg1, arg2)
+PASS no recovering from NaN date using date.setUTCHours(arg0, 0, 0)
+PASS date.setUTCHours(arg0, arg1)
+PASS no recovering from NaN date using date.setUTCHours(arg0, 0)
+PASS date.setUTCHours(arg0)
+PASS date.setUTCHours()
+PASS no recovering from NaN date using date.setUTCHours(arg0)
+PASS date.setUTCHours passed all tests
+PASS date.setDate(arg0)
+PASS date.setDate()
+PASS no recovering from NaN date using date.setDate(arg0)
+PASS date.setDate passed all tests
+PASS date.setUTCDate(arg0)
+PASS date.setUTCDate()
+PASS no recovering from NaN date using date.setUTCDate(arg0)
+PASS date.setUTCDate passed all tests
+PASS date.setMonth(arg0, arg1)
+PASS no recovering from NaN date using date.setMonth(arg0, 0)
+PASS date.setMonth(arg0)
+PASS date.setMonth()
+PASS no recovering from NaN date using date.setMonth(arg0)
+PASS date.setMonth passed all tests
+PASS date.setUTCMonth(arg0, arg1)
+PASS no recovering from NaN date using date.setUTCMonth(arg0, 0)
+PASS date.setUTCMonth(arg0)
+PASS date.setUTCMonth()
+PASS no recovering from NaN date using date.setUTCMonth(arg0)
+PASS date.setUTCMonth passed all tests
+PASS date.setFullYear(arg0, arg1, arg2)
+PASS date.setFullYear(arg0, arg1)
+PASS date.setFullYear(arg0)
+PASS date.setFullYear()
+PASS recover from NaN date using date.setFullYear()
+PASS date.setFullYear passed all tests
+PASS date.setUTCFullYear(arg0, arg1, arg2)
+PASS date.setUTCFullYear(arg0, arg1)
+PASS date.setUTCFullYear(arg0)
+PASS date.setUTCFullYear()
+PASS recover from NaN date using date.setUTCFullYear()
+PASS date.setUTCFullYear passed all tests
+PASS date.setYear(arg0)
+PASS date.setYear()
+PASS date.getYear() is compatible to JavaScript 1.3 and later
+PASS recover from NaN date using date.setUTCFullYear()
+PASS date.setYear passed all tests
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/date-set-to-nan.js b/deps/v8/test/webkit/date-set-to-nan.js
new file mode 100644 (file)
index 0000000..6d1c473
--- /dev/null
@@ -0,0 +1,473 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests if the Date setters handle invalid parameters correctly resulting in a NaN date and if a recovery from such a NaN date is only possible by using the date.setTime() and date.set[[UTC]Full]Year() functions."
+);
+
+var dateFunctionNameRoots = [
+    "Time",
+    "Milliseconds",
+    "UTCMilliseconds",
+    "Seconds",
+    "UTCSeconds",
+    "Minutes",
+    "UTCMinutes",
+    "Hours",
+    "UTCHours",
+    "Date",
+    "UTCDate",
+    "Month",
+    "UTCMonth",
+    "FullYear",
+    "UTCFullYear",
+    "Year"
+];
+
+var dateFunctionParameterNum = [
+    1,
+    1,
+    1,
+    2,
+    2,
+    3,
+    3,
+    4,
+    4,
+    1,
+    1,
+    2,
+    2,
+    3,
+    3,
+    1
+];
+
+var testValues = [
+    0,
+    Number.NaN,
+    Number.POSITIVE_INFINITY,
+    Number.NEGATIVE_INFINITY
+];
+
+function testDateFunctionWithValueNoRecoverNaN(functionNameRoot, steps)
+{
+    var date = new Date();
+    var setValue = date["get" + functionNameRoot]();
+    date.setMilliseconds(Number.NaN);
+    var params = [
+        "",
+        ", 0",
+        ", 0, 0",
+        ", 0, 0, 0"
+    ];
+    var setResult = (1 == steps) ?  date["set" + functionNameRoot](setValue)
+                  : ((2 == steps) ? date["set" + functionNameRoot](setValue, 0)
+                  : ((3 == steps) ? date["set" + functionNameRoot](setValue, 0, 0)
+                  :                  date["set" + functionNameRoot](setValue, 0, 0, 0)));
+    if (!isNaN(setResult)) {
+        testFailed("date(NaN).set" + functionNameRoot + "(" + setValue + params[steps - 1]
+                                   + ") was " + setResult + " instead of NaN");
+        return false;
+    }
+    var getResult = date["get" + functionNameRoot]();
+    if (!isNaN(getResult)) {
+        testFailed("date.get" + functionNameRoot + "() was " + getResult + " instead of NaN");
+        return false;
+    }
+    testPassed ("no recovering from NaN date using date.set" + functionNameRoot
+        + "(arg0" + params[steps - 1] + ")");
+    return true;
+}
+
+function testDateFunctionWithValueRecoverTime(functionNameRoot)
+{
+    var date = new Date();
+    var setValue = date["get" + functionNameRoot]();
+    date.setMilliseconds(Number.NaN);
+    var setResult = date["set" + functionNameRoot](setValue);
+    if (setValue != setResult) {
+        testFailed("date(NaN).set" + functionNameRoot + "(" + setValue + ") was " + setResult + " instead of " + setValue);
+        return false;
+    }
+    var getResult = date["get" + functionNameRoot]();
+    if (getResult != setValue) {
+        testFailed("date.get" + functionNameRoot + "() was " + getResult + " instead of " + setValue);
+        return false;
+    }
+    testPassed ("recover from NaN date using date.set" + functionNameRoot + "()");
+    return true;
+}
+
+function testDateFunctionWithValueRecoverFullYear(functionNameRoot)
+{
+    var result = true;
+    var date = new Date();
+    var setValue = date["get" + functionNameRoot]();
+    date.setMilliseconds(Number.NaN);
+    var setResult = date["set" + functionNameRoot](setValue);
+    var getResult = date["get" + functionNameRoot]();
+    if (getResult != setValue) {
+        testFailed("date.get" + functionNameRoot + "() was " + getResult + " instead of " + setValue);
+        result = false;
+    }
+    getResult = date.getMilliseconds();
+    if (getResult != 0) {
+        testFailed("date.getMilliseconds() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getSeconds();
+    if (getResult != 0) {
+        testFailed("date.getSeconds() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getMinutes();
+    if (getResult != 0) {
+        testFailed("date.getMinutes() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getHours();
+    if (getResult != 0) {
+        testFailed("date.getHours() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getDate();
+    if (getResult != 1) {
+        testFailed("date.getDate() was " + getResult + " instead of 1");
+        result = false;
+    }
+    getResult = date.getMonth();
+    if (getResult != 0) {
+        testFailed("date.getMonth() was " + getResult + " instead of 0");
+        result = false;
+    }
+    if (result)
+        testPassed ("recover from NaN date using date.setFullYear()");
+    else
+        testFailed ("recover from NaN date using date.setFullYear()");
+    return result;
+}
+
+function testDateFunctionWithValueRecoverUTCFullYear(functionNameRoot)
+{
+    var result = true;
+    var date = new Date();
+    var setValue = date["get" + functionNameRoot]();
+    date.setMilliseconds(Number.NaN);
+    var setResult = date["set" + functionNameRoot](setValue);
+    var getResult = date["get" + functionNameRoot]();
+    if (getResult != setValue) {
+        testFailed("date.get" + functionNameRoot + "() was " + getResult + " instead of " + setValue);
+        result = false;
+    }
+    getResult = date.getUTCMilliseconds();
+    if (getResult != 0) {
+        testFailed("date.getUTCMilliseconds() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getUTCSeconds();
+    if (getResult != 0) {
+        testFailed("date.getUTCSeconds() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getUTCMinutes();
+    if (getResult != 0) {
+        testFailed("date.getUTCMinutes() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getUTCHours();
+    if (getResult != 0) {
+        testFailed("date.getUTCHours() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getUTCDate();
+    if (getResult != 1) {
+        testFailed("date.getUTCDate() was " + getResult + " instead of 1");
+        result = false;
+    }
+    getResult = date.getUTCMonth();
+    if (getResult != 0) {
+        testFailed("date.getUTCMonth() was " + getResult + " instead of 0");
+        result = false;
+    }
+    if (result)
+        testPassed ("recover from NaN date using date.setUTCFullYear()");
+    else
+        testFailed ("recover from NaN date using date.setUTCFullYear()");
+    return result;
+}
+
+function testDateFunctionWithValueRecoverYear(functionNameRoot)
+{
+    var result = true;
+    var is13Compatible = true;
+
+    var date = new Date();
+    var setValue = date["get" + functionNameRoot]();
+    var fullYears = date.getFullYear() - 1900;
+    if (setValue != fullYears) {
+        testFailed("date.get" + functionNameRoot + "() was " + setValue + " instead of " + fullYears);
+        is13Compatible = false;
+    } else
+        testPassed("date.getYear() is compatible to JavaScript 1.3 and later");
+
+    date.setMilliseconds(Number.NaN);
+    var setResult = date["set" + functionNameRoot](setValue + 1900);
+    var getResult = date["get" + functionNameRoot]();
+    if (getResult != setValue) {
+        testFailed("date.get" + functionNameRoot + "() was " + getResult + " instead of " + setValue);
+        result = false;
+    }
+    getResult = date.getMilliseconds();
+    if (getResult != 0) {
+        testFailed("date.getMilliseconds() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getSeconds();
+    if (getResult != 0) {
+        testFailed("date.getSeconds() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getMinutes();
+    if (getResult != 0) {
+        testFailed("date.getMinutes() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getHours();
+    if (getResult != 0) {
+        testFailed("date.getHours() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getDate();
+    if (getResult != 1) {
+        testFailed("date.getDate() was " + getResult + " instead of 1");
+        result = false;
+    }
+    getResult = date.getMonth();
+    if (getResult != 0) {
+        testFailed("date.getMonth() was " + getResult + " instead of 0");
+        result = false;
+    }
+    if (result)
+        testPassed ("recover from NaN date using date.setUTCFullYear()");
+    else
+        testFailed ("recover from NaN date using date.setUTCFullYear()");
+    return result && is13Compatible;
+}
+
+function makeIEHappy(functionNameRoot, value)
+{
+    var date = new Date();
+    var setResult = date["set" + functionNameRoot](value);
+    if (!isNaN(setResult)) {
+        testFailed("date.set" + functionNameRoot
+                              + "() was "
+                              + setResult + " instead of NaN");
+         return false;
+    }
+    var getResult = date["get" + functionNameRoot]();
+    if (!isNaN(getResult)) {
+        testFailed("date.get" + functionNameRoot + "() was "
+                              + getResult + " instead of NaN");
+        return false;
+    }
+    return true
+}
+
+function testDateFunctionWithValueExpectingNaN1(functionNameRoot)
+{
+    var result = true;
+    for (var idx0 in testValues)
+        if (idx0 != 0) {
+            var date = new Date();
+            var setResult = date["set" + functionNameRoot](testValues[idx0]);
+            if (!isNaN(setResult)) {
+                testFailed("date.set" + functionNameRoot + "("
+                                      + testValues[idx0] + ") was "
+                                      + setResult + " instead of NaN");
+                result = false;
+            }
+            var getResult = date["get" + functionNameRoot]();
+            if (!isNaN(getResult)) {
+                testFailed("date.get" + functionNameRoot + "() was "
+                                      + getResult + " instead of NaN");
+                result = false;
+            }
+        } else if (!makeIEHappy(functionNameRoot))
+            result = false;
+    if (result) {
+        testPassed("date.set" + functionNameRoot + "(arg0)");
+        testPassed("date.set" + functionNameRoot + "()");
+    }
+    return result;
+}
+
+function testDateFunctionWithValueExpectingNaN2(functionNameRoot)
+{
+    var result = true;
+    for (var idx0 in testValues)
+        for (var idx1 in testValues)
+            if (idx0 != 0 || idx1 != 0) {
+                var date = new Date();
+                var setResult = date["set" + functionNameRoot](testValues[idx0],
+                                                               testValues[idx1]);
+
+                if (!isNaN(setResult)) {
+                    testFailed("date.set" + functionNameRoot + "("
+                                          + testValues[idx0] + ", "
+                                          + testValues[idx1] + ") was "
+                                          + setResult + " instead of NaN");
+                    result = false;
+                }
+                var getResult = date["get" + functionNameRoot]();
+                if (!isNaN(getResult)) {
+                    testFailed("date.get" + functionNameRoot + "() was "
+                                          + getResult + " instead of NaN");
+                    result = false;
+                }
+            }
+
+    if (result)
+        testPassed("date.set" + functionNameRoot + "(arg0, arg1)");
+    return result;
+}
+
+function testDateFunctionWithValueExpectingNaN3(functionNameRoot)
+{
+    var result = true;
+    for (var idx0 in testValues)
+        for (var idx1 in testValues)
+            for (var idx2 in testValues)
+                if (idx0 != 0 || idx1 != 0 || idx2 != 0) {
+                    var date = new Date();
+                    var setResult = date["set" + functionNameRoot](testValues[idx0],
+                                                                   testValues[idx1],
+                                                                   testValues[idx2]);
+                    if (!isNaN(setResult)) {
+                        testFailed("date.set" + functionNameRoot + "("
+                                              + testValues[idx0] + ", "
+                                              + testValues[idx1] + ", "
+                                              + testValues[idx2] + ") was "
+                                              + setResult + " instead of NaN");
+                        result = false;
+                    }
+                    var getResult = date["get" + functionNameRoot]();
+                    if (!isNaN(getResult)) {
+                        testFailed("date.get" + functionNameRoot + "() was "
+                                              + getResult + " instead of NaN");
+                        result = false;
+                    }
+                }
+
+    if (result)
+        testPassed("date.set" + functionNameRoot + "(arg0, arg1, arg2)");
+    return result;
+}
+
+function testDateFunctionWithValueExpectingNaN4(functionNameRoot)
+{
+    var result = true;
+    for (var idx0 in testValues)
+        for (var idx1 in testValues)
+            for (var idx2 in testValues)
+                for (var idx3 in testValues)
+                    if (idx0 != 0 || idx1 != 0 || idx2 != 0 || idx3 != 0) {
+                        var date = new Date();
+                        var setResult = date["set" + functionNameRoot](testValues[idx0],
+                                                                       testValues[idx1],
+                                                                       testValues[idx2],
+                                                                       testValues[idx3]);
+                        if (!isNaN(setResult)) {
+                            testFailed("date.set" + functionNameRoot + "("
+                                                  + testValues[idx0] + ", "
+                                                  + testValues[idx1] + ", "
+                                                  + testValues[idx2] + ", "
+                                                  + testValues[idx3] + ") was "
+                                                  + setResult + " instead of NaN");
+                            result = false;
+                        }
+                        var getResult = date["get" + functionNameRoot]();
+                        if (!isNaN(getResult)) {
+                            testFailed("date.get" + functionNameRoot + "() was "
+                                                  + getResult + " instead of NaN");
+                            result = false;
+                        }
+                    }
+    if (result)
+        testPassed("date.set" + functionNameRoot + "(arg0, arg1, arg2, arg3)");
+    return result;
+}
+
+
+
+function testDateFunction(functionNameRoot, functionParamNum)
+{
+    var success = true;
+
+    switch (functionParamNum) {
+    case 4:
+        success &= testDateFunctionWithValueExpectingNaN4(functionNameRoot);
+        if (functionNameRoot != "Time" &&
+            functionNameRoot != "FullYear" &&
+            functionNameRoot != "UTCFullYear" &&
+            functionNameRoot != "Year")
+            success &= testDateFunctionWithValueNoRecoverNaN(functionNameRoot, 4);
+
+    case 3:
+        success &= testDateFunctionWithValueExpectingNaN3(functionNameRoot);
+        if (functionNameRoot != "Time" &&
+            functionNameRoot != "FullYear" &&
+            functionNameRoot != "UTCFullYear" &&
+            functionNameRoot != "Year")
+            success &= testDateFunctionWithValueNoRecoverNaN(functionNameRoot, 3);
+
+    case 2:
+        success &= testDateFunctionWithValueExpectingNaN2(functionNameRoot);
+        if (functionNameRoot != "Time" &&
+            functionNameRoot != "FullYear" &&
+            functionNameRoot != "UTCFullYear" &&
+            functionNameRoot != "Year")
+            success &= testDateFunctionWithValueNoRecoverNaN(functionNameRoot, 2);
+
+    case 1:
+        success &= testDateFunctionWithValueExpectingNaN1(functionNameRoot);
+        if (functionNameRoot == "Time")
+            success &= testDateFunctionWithValueRecoverTime(functionNameRoot);
+        else if (functionNameRoot == "FullYear")
+            success &= testDateFunctionWithValueRecoverFullYear(functionNameRoot);
+        else if (functionNameRoot == "UTCFullYear")
+            success &= testDateFunctionWithValueRecoverUTCFullYear(functionNameRoot);
+        else if (functionNameRoot == "Year")
+            success &= testDateFunctionWithValueRecoverYear(functionNameRoot);
+        else
+            success &= testDateFunctionWithValueNoRecoverNaN(functionNameRoot, 1);
+    }
+
+    if (success)
+        testPassed("date.set" + functionNameRoot + " passed all tests");
+}
+
+for (var x in dateFunctionNameRoots)
+{
+    testDateFunction(dateFunctionNameRoots[x], dateFunctionParameterNum[x]);
+}
diff --git a/deps/v8/test/webkit/date-utc-timeclip-expected.txt b/deps/v8/test/webkit/date-utc-timeclip-expected.txt
new file mode 100644 (file)
index 0000000..4901631
--- /dev/null
@@ -0,0 +1,40 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Date.UTC() should apply TimeClip operation according to ECMA-262.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Date.UTC(275760, 8, 12, 23, 59, 59, 999) is 8639999999999999
+PASS Date.UTC(275760, 8, 13) is 8640000000000000
+PASS isNaN(Date.UTC(275760, 8, 13, 0, 0, 0, 1)) is true
+PASS isNaN(Date.UTC(275760, 8, 14)) is true
+PASS Date.UTC(-271821, 3, 20, 0, 0, 0, 1) is -8639999999999999
+PASS Date.UTC(-271821, 3, 20) is -8640000000000000
+PASS isNaN(Date.UTC(-271821, 3, 19, 23, 59, 59, 999)) is true
+PASS isNaN(Date.UTC(-271821, 3, 19)) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/date-utc-timeclip.js b/deps/v8/test/webkit/date-utc-timeclip.js
new file mode 100644 (file)
index 0000000..318a087
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Date.UTC() should apply TimeClip operation according to ECMA-262.');
+
+shouldBe('Date.UTC(275760, 8, 12, 23, 59, 59, 999)', '8639999999999999');
+shouldBe('Date.UTC(275760, 8, 13)', '8640000000000000');
+shouldBeTrue('isNaN(Date.UTC(275760, 8, 13, 0, 0, 0, 1))');
+shouldBeTrue('isNaN(Date.UTC(275760, 8, 14))');
+
+shouldBe('Date.UTC(-271821, 3, 20, 0, 0, 0, 1)', '-8639999999999999');
+shouldBe('Date.UTC(-271821, 3, 20)', '-8640000000000000');
+shouldBeTrue('isNaN(Date.UTC(-271821, 3, 19, 23, 59, 59, 999))');
+shouldBeTrue('isNaN(Date.UTC(-271821, 3, 19))');
diff --git a/deps/v8/test/webkit/debugger-expected.txt b/deps/v8/test/webkit/debugger-expected.txt
new file mode 100644 (file)
index 0000000..e9b4edf
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This file tests whether the 'debugger' statement throws a syntax error. (IE respects 'debugger' as a statement that behaves like a breakpoint).
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/debugger.js b/deps/v8/test/webkit/debugger.js
new file mode 100644 (file)
index 0000000..8bc980a
--- /dev/null
@@ -0,0 +1,29 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This file tests whether the 'debugger' statement throws a syntax error. (IE respects 'debugger' as a statement that behaves like a breakpoint)."
+);
+
+debugger
+debugger;
diff --git a/deps/v8/test/webkit/declaration-in-block-expected.txt b/deps/v8/test/webkit/declaration-in-block-expected.txt
new file mode 100644 (file)
index 0000000..a296cfd
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that declarations in an if block can be seen outside it.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/declaration-in-block.js b/deps/v8/test/webkit/declaration-in-block.js
new file mode 100644 (file)
index 0000000..39c4fc0
--- /dev/null
@@ -0,0 +1,29 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that declarations in an if block can be seen outside it."
+);
+
+if (0) { var b; }
+var a = b;
diff --git a/deps/v8/test/webkit/delete-getters-setters-expected.txt b/deps/v8/test/webkit/delete-getters-setters-expected.txt
new file mode 100644 (file)
index 0000000..4ade6ba
--- /dev/null
@@ -0,0 +1,48 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that deletion of properties works properly with getters and setters.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS b1.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS a2.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS b3.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS a4.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS b5.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS a6.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS b7.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS a8.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS o1.b.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS o1.a.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS o3.b.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS o4.a.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS o5.b.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS o6.a.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS o7.b.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS o8.a.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/delete-getters-setters.js b/deps/v8/test/webkit/delete-getters-setters.js
new file mode 100644 (file)
index 0000000..92f39fa
--- /dev/null
@@ -0,0 +1,122 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that deletion of properties works properly with getters and setters."
+);
+
+b1 = 1;
+this.__defineSetter__("a1", function() {});
+this.__defineSetter__("b1", function() {});
+delete a1;
+shouldThrow("b1.property");
+
+a2 = 1;
+this.__defineSetter__("a2", function() {});
+this.__defineSetter__("b2", function() {});
+delete b2;
+shouldThrow("a2.property");
+
+b3 = 1;
+this.__defineGetter__("a3", function() {});
+this.__defineGetter__("b3", function() {});
+delete a3;
+shouldThrow("b3.property");
+
+a4 = 1;
+this.__defineGetter__("a4", function() {});
+this.__defineGetter__("b4", function() {});
+delete b4;
+shouldThrow("a4.property");
+
+b5 = 1;
+this.__defineSetter__("a5", function() {});
+this.__defineGetter__("b5", function() {});
+delete a5;
+shouldThrow("b5.property");
+
+a6 = 1;
+this.__defineSetter__("a6", function() {});
+this.__defineGetter__("b6", function() {});
+delete b6;
+shouldThrow("a6.property");
+
+b7 = 1;
+this.__defineGetter__("a7", function() {});
+this.__defineSetter__("b7", function() {});
+delete a7;
+shouldThrow("b7.property");
+
+a8 = 1;
+this.__defineGetter__("a8", function() {});
+this.__defineSetter__("b8", function() {});
+delete b8;
+shouldThrow("a8.property");
+
+var o1 = { b: 1 };
+o1.__defineSetter__("a", function() {});
+o1.__defineSetter__("b", function() {});
+delete o1.a;
+shouldThrow("o1.b.property");
+
+var o2 = { a: 1 };
+o2.__defineSetter__("a", function() {});
+o2.__defineSetter__("b", function() {});
+delete o2.b;
+shouldThrow("o1.a.property");
+
+var o3 = { b: 1 };
+o3.__defineGetter__("a", function() {});
+o3.__defineGetter__("b", function() {});
+delete o3.a;
+shouldThrow("o3.b.property");
+
+var o4 = { a: 1 };
+o4.__defineGetter__("a", function() {});
+o4.__defineGetter__("b", function() {});
+delete o4.b;
+shouldThrow("o4.a.property");
+
+var o5 = { b: 1 };
+o5.__defineSetter__("a", function() {});
+o5.__defineSetter__("b", function() {});
+delete o5.a;
+shouldThrow("o5.b.property");
+
+var o6 = { a: 1 };
+o6.__defineSetter__("a", function() {});
+o6.__defineSetter__("b", function() {});
+delete o6.b;
+shouldThrow("o6.a.property");
+
+var o7 = { b: 1 };
+o7.__defineGetter__("a", function() {});
+o7.__defineGetter__("b", function() {});
+delete o7.a;
+shouldThrow("o7.b.property");
+
+var o8 = { a: 1 };
+o8.__defineGetter__("a", function() {});
+o8.__defineGetter__("b", function() {});
+delete o8.b;
+shouldThrow("o8.a.property");
diff --git a/deps/v8/test/webkit/delete-then-put-expected.txt b/deps/v8/test/webkit/delete-then-put-expected.txt
new file mode 100644 (file)
index 0000000..191bb35
--- /dev/null
@@ -0,0 +1,38 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests for a problem with put after delete that existed at one point in the past.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS props(a) is 'a,b,c,d,e'
+delete a.c
+PASS props(a) is 'a,b,d,e'
+define getter named c
+PASS props(a) is 'a,b,d,e,c'
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/delete-then-put.js b/deps/v8/test/webkit/delete-then-put.js
new file mode 100644 (file)
index 0000000..aa91e5d
--- /dev/null
@@ -0,0 +1,48 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This tests for a problem with put after delete that existed at one point in the past.'
+);
+
+function props(o)
+{
+    var s = "";
+    for (p in o) {
+        if (s.length != 0)
+            s += ",";
+        s += p;
+    }
+    return s;
+}
+
+var a = { a:1, b:2, c:3, d:4, e:5 }
+
+shouldBe("props(a)", "'a,b,c,d,e'");
+debug("delete a.c");
+delete a.c;
+shouldBe("props(a)", "'a,b,d,e'");
+debug("define getter named c");
+a.__defineGetter__("c", function() { return 3 });
+shouldBe("props(a)", "'a,b,d,e,c'");
+debug("");
diff --git a/deps/v8/test/webkit/dfg-abs-backwards-propagation-expected.txt b/deps/v8/test/webkit/dfg-abs-backwards-propagation-expected.txt
new file mode 100644 (file)
index 0000000..6d5ff63
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG knows that a function that appears like Math.abs could potentially use value in arbitrary ways, and not just in a context that converts values to numbers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(bar, [, 1.5], 0) is void 0
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-abs-backwards-propagation.js b/deps/v8/test/webkit/dfg-abs-backwards-propagation.js
new file mode 100644 (file)
index 0000000..828e2d6
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG knows that a function that appears like Math.abs could potentially use value in arbitrary ways, and not just in a context that converts values to numbers."
+);
+
+function foo(f, array, i) {
+    return f(array[i]);
+}
+
+function bar(value) {
+    return value;
+}
+
+for (var i = 0; i < 200; ++i) {
+    var f, array, expected;
+    if (i == 190) {
+        f = "bar";
+        array = "[, 1.5]";
+        expected = "void 0";
+    } else {
+        f = "Math.abs";
+        array = "[1.5]";
+        expected = "Math.abs(1.5)";
+    }
+    shouldBe("foo(" + f + ", " + array + ", 0)", expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-add-not-number-expected.txt b/deps/v8/test/webkit/dfg-add-not-number-expected.txt
new file mode 100644 (file)
index 0000000..b5fde86
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that adding things that aren't numbers using ++ does not crash or generate bogus code.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-add-not-number.js b/deps/v8/test/webkit/dfg-add-not-number.js
new file mode 100644 (file)
index 0000000..df6dcdf
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that adding things that aren't numbers using ++ does not crash or generate bogus code."
+);
+
+function foo(a) {
+    a++;
+    return a;
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo(\"foo\" + i)", "NaN");
+
diff --git a/deps/v8/test/webkit/dfg-arguments-alias-escape-expected.txt b/deps/v8/test/webkit/dfg-arguments-alias-escape-expected.txt
new file mode 100644 (file)
index 0000000..f681784
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests aliased uses of 'arguments' that escape.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-arguments-alias-escape.js b/deps/v8/test/webkit/dfg-arguments-alias-escape.js
new file mode 100644 (file)
index 0000000..f7a012e
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests aliased uses of 'arguments' that escape."
+);
+
+function foo() {
+    var result = 0;
+    var a = arguments;
+    for (var i = 0; i < a.length; ++i)
+        result += a[i];
+    return [result, a];
+}
+
+function bar(x) {
+    var result = foo(x);
+    return result[0] * result[1][0];
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("bar(42)", "1764");
+
diff --git a/deps/v8/test/webkit/dfg-arguments-alias-expected.txt b/deps/v8/test/webkit/dfg-arguments-alias-expected.txt
new file mode 100644 (file)
index 0000000..18135e1
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests aliased uses of 'arguments'.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-arguments-alias-one-block-expected.txt b/deps/v8/test/webkit/dfg-arguments-alias-one-block-expected.txt
new file mode 100644 (file)
index 0000000..475236a
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that if you alias the arguments in a very small function, arguments simplification still works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(i, i + 1) is 1
+PASS foo(i, i + 1) is 3
+PASS foo(i, i + 1) is 5
+PASS foo(i, i + 1) is 7
+PASS foo(i, i + 1) is 9
+PASS foo(i, i + 1) is 11
+PASS foo(i, i + 1) is 13
+PASS foo(i, i + 1) is 15
+PASS foo(i, i + 1) is 17
+PASS foo(i, i + 1) is 19
+PASS foo(i, i + 1) is 21
+PASS foo(i, i + 1) is 23
+PASS foo(i, i + 1) is 25
+PASS foo(i, i + 1) is 27
+PASS foo(i, i + 1) is 29
+PASS foo(i, i + 1) is 31
+PASS foo(i, i + 1) is 33
+PASS foo(i, i + 1) is 35
+PASS foo(i, i + 1) is 37
+PASS foo(i, i + 1) is 39
+PASS foo(i, i + 1) is 41
+PASS foo(i, i + 1) is 43
+PASS foo(i, i + 1) is 45
+PASS foo(i, i + 1) is 47
+PASS foo(i, i + 1) is 49
+PASS foo(i, i + 1) is 51
+PASS foo(i, i + 1) is 53
+PASS foo(i, i + 1) is 55
+PASS foo(i, i + 1) is 57
+PASS foo(i, i + 1) is 59
+PASS foo(i, i + 1) is 61
+PASS foo(i, i + 1) is 63
+PASS foo(i, i + 1) is 65
+PASS foo(i, i + 1) is 67
+PASS foo(i, i + 1) is 69
+PASS foo(i, i + 1) is 71
+PASS foo(i, i + 1) is 73
+PASS foo(i, i + 1) is 75
+PASS foo(i, i + 1) is 77
+PASS foo(i, i + 1) is 79
+PASS foo(i, i + 1) is 81
+PASS foo(i, i + 1) is 83
+PASS foo(i, i + 1) is 85
+PASS foo(i, i + 1) is 87
+PASS foo(i, i + 1) is 89
+PASS foo(i, i + 1) is 91
+PASS foo(i, i + 1) is 93
+PASS foo(i, i + 1) is 95
+PASS foo(i, i + 1) is 97
+PASS foo(i, i + 1) is 99
+PASS foo(i, i + 1) is 101
+PASS foo(i, i + 1) is 103
+PASS foo(i, i + 1) is 105
+PASS foo(i, i + 1) is 107
+PASS foo(i, i + 1) is 109
+PASS foo(i, i + 1) is 111
+PASS foo(i, i + 1) is 113
+PASS foo(i, i + 1) is 115
+PASS foo(i, i + 1) is 117
+PASS foo(i, i + 1) is 119
+PASS foo(i, i + 1) is 121
+PASS foo(i, i + 1) is 123
+PASS foo(i, i + 1) is 125
+PASS foo(i, i + 1) is 127
+PASS foo(i, i + 1) is 129
+PASS foo(i, i + 1) is 131
+PASS foo(i, i + 1) is 133
+PASS foo(i, i + 1) is 135
+PASS foo(i, i + 1) is 137
+PASS foo(i, i + 1) is 139
+PASS foo(i, i + 1) is 141
+PASS foo(i, i + 1) is 143
+PASS foo(i, i + 1) is 145
+PASS foo(i, i + 1) is 147
+PASS foo(i, i + 1) is 149
+PASS foo(i, i + 1) is 151
+PASS foo(i, i + 1) is 153
+PASS foo(i, i + 1) is 155
+PASS foo(i, i + 1) is 157
+PASS foo(i, i + 1) is 159
+PASS foo(i, i + 1) is 161
+PASS foo(i, i + 1) is 163
+PASS foo(i, i + 1) is 165
+PASS foo(i, i + 1) is 167
+PASS foo(i, i + 1) is 169
+PASS foo(i, i + 1) is 171
+PASS foo(i, i + 1) is 173
+PASS foo(i, i + 1) is 175
+PASS foo(i, i + 1) is 177
+PASS foo(i, i + 1) is 179
+PASS foo(i, i + 1) is 181
+PASS foo(i, i + 1) is 183
+PASS foo(i, i + 1) is 185
+PASS foo(i, i + 1) is 187
+PASS foo(i, i + 1) is 189
+PASS foo(i, i + 1) is 191
+PASS foo(i, i + 1) is 193
+PASS foo(i, i + 1) is 195
+PASS foo(i, i + 1) is 197
+PASS foo(i, i + 1) is 199
+PASS foo(i, i + 1) is 201
+PASS foo(i, i + 1) is 203
+PASS foo(i, i + 1) is 205
+PASS foo(i, i + 1) is 207
+PASS foo(i, i + 1) is 209
+PASS foo(i, i + 1) is 211
+PASS foo(i, i + 1) is 213
+PASS foo(i, i + 1) is 215
+PASS foo(i, i + 1) is 217
+PASS foo(i, i + 1) is 219
+PASS foo(i, i + 1) is 221
+PASS foo(i, i + 1) is 223
+PASS foo(i, i + 1) is 225
+PASS foo(i, i + 1) is 227
+PASS foo(i, i + 1) is 229
+PASS foo(i, i + 1) is 231
+PASS foo(i, i + 1) is 233
+PASS foo(i, i + 1) is 235
+PASS foo(i, i + 1) is 237
+PASS foo(i, i + 1) is 239
+PASS foo(i, i + 1) is 241
+PASS foo(i, i + 1) is 243
+PASS foo(i, i + 1) is 245
+PASS foo(i, i + 1) is 247
+PASS foo(i, i + 1) is 249
+PASS foo(i, i + 1) is 251
+PASS foo(i, i + 1) is 253
+PASS foo(i, i + 1) is 255
+PASS foo(i, i + 1) is 257
+PASS foo(i, i + 1) is 259
+PASS foo(i, i + 1) is 261
+PASS foo(i, i + 1) is 263
+PASS foo(i, i + 1) is 265
+PASS foo(i, i + 1) is 267
+PASS foo(i, i + 1) is 269
+PASS foo(i, i + 1) is 271
+PASS foo(i, i + 1) is 273
+PASS foo(i, i + 1) is 275
+PASS foo(i, i + 1) is 277
+PASS foo(i, i + 1) is 279
+PASS foo(i, i + 1) is 281
+PASS foo(i, i + 1) is 283
+PASS foo(i, i + 1) is 285
+PASS foo(i, i + 1) is 287
+PASS foo(i, i + 1) is 289
+PASS foo(i, i + 1) is 291
+PASS foo(i, i + 1) is 293
+PASS foo(i, i + 1) is 295
+PASS foo(i, i + 1) is 297
+PASS foo(i, i + 1) is 299
+PASS foo(i, i + 1) is 301
+PASS foo(i, i + 1) is 303
+PASS foo(i, i + 1) is 305
+PASS foo(i, i + 1) is 307
+PASS foo(i, i + 1) is 309
+PASS foo(i, i + 1) is 311
+PASS foo(i, i + 1) is 313
+PASS foo(i, i + 1) is 315
+PASS foo(i, i + 1) is 317
+PASS foo(i, i + 1) is 319
+PASS foo(i, i + 1) is 321
+PASS foo(i, i + 1) is 323
+PASS foo(i, i + 1) is 325
+PASS foo(i, i + 1) is 327
+PASS foo(i, i + 1) is 329
+PASS foo(i, i + 1) is 331
+PASS foo(i, i + 1) is 333
+PASS foo(i, i + 1) is 335
+PASS foo(i, i + 1) is 337
+PASS foo(i, i + 1) is 339
+PASS foo(i, i + 1) is 341
+PASS foo(i, i + 1) is 343
+PASS foo(i, i + 1) is 345
+PASS foo(i, i + 1) is 347
+PASS foo(i, i + 1) is 349
+PASS foo(i, i + 1) is 351
+PASS foo(i, i + 1) is 353
+PASS foo(i, i + 1) is 355
+PASS foo(i, i + 1) is 357
+PASS foo(i, i + 1) is 359
+PASS foo(i, i + 1) is 361
+PASS foo(i, i + 1) is 363
+PASS foo(i, i + 1) is 365
+PASS foo(i, i + 1) is 367
+PASS foo(i, i + 1) is 369
+PASS foo(i, i + 1) is 371
+PASS foo(i, i + 1) is 373
+PASS foo(i, i + 1) is 375
+PASS foo(i, i + 1) is 377
+PASS foo(i, i + 1) is 379
+PASS foo(i, i + 1) is 381
+PASS foo(i, i + 1) is 383
+PASS foo(i, i + 1) is 385
+PASS foo(i, i + 1) is 387
+PASS foo(i, i + 1) is 389
+PASS foo(i, i + 1) is 391
+PASS foo(i, i + 1) is 393
+PASS foo(i, i + 1) is 395
+PASS foo(i, i + 1) is 397
+PASS foo(i, i + 1) is 399
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-arguments-alias-one-block-osr-exit-expected.txt b/deps/v8/test/webkit/dfg-arguments-alias-one-block-osr-exit-expected.txt
new file mode 100644 (file)
index 0000000..76dc0ca
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that if you alias the arguments in a very small function, arguments simplification still works even if you OSR exit.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is "47101316192225283134374043464952555861646770737679828588919497100103106109112115118121124127130133136139142145148151154157160163166169172175178181184187190193196199202205208211214217220223226229232235238241244247250253256259262265268271274277280283286289292295298301304307310313316319322325328331334337340343346349352355358361364367370373376379382385388391394397400403406409412415418421424427430433436439442445448451454457460463466469472475478481484487490493496499502505508511514517520523526529532535538541544547550553556559562565568571574577580583586589592595598601hello201203hello202204hello203205hello204206hello205207hello206208hello207209hello208210hello209211hello210212hello211213hello212214hello213215hello214216hello215217hello216218hello217219hello218220hello219221hello220222hello221223hello222224hello223225hello224226hello225227hello226228hello227229hello228230hello229231hello230232hello231233hello232234hello233235hello234236hello235237hello236238hello237239hello238240hello239241hello240242hello241243hello242244hello243245hello244246hello245247hello246248hello247249hello248250hello249251hello250252hello251253hello252254hello253255hello254256hello255257hello256258hello257259hello258260hello259261hello260262hello261263hello262264hello263265hello264266hello265267hello266268hello267269hello268270hello269271hello270272hello271273hello272274hello273275hello274276hello275277hello276278hello277279hello278280hello279281hello280282hello281283hello282284hello283285hello284286hello285287hello286288hello287289hello288290hello289291hello290292hello291293hello292294hello293295hello294296hello295297hello296298hello297299hello298300hello299301hello300302"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-arguments-alias-one-block-osr-exit.js b/deps/v8/test/webkit/dfg-arguments-alias-one-block-osr-exit.js
new file mode 100644 (file)
index 0000000..dbf381b
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that if you alias the arguments in a very small function, arguments simplification still works even if you OSR exit."
+);
+
+function foo() {
+    var args = arguments;
+    return args[0] + args[1] + args[2];
+}
+
+var result = "";
+for (var i = 0; i < 300; ++i) {
+    var a;
+    if (i < 200)
+        a = i;
+    else
+        a = "hello";
+    var b = i + 1;
+    var c = i + 3;
+    result += foo(a, b, c);
+}
+
+shouldBe("result", "\"47101316192225283134374043464952555861646770737679828588919497100103106109112115118121124127130133136139142145148151154157160163166169172175178181184187190193196199202205208211214217220223226229232235238241244247250253256259262265268271274277280283286289292295298301304307310313316319322325328331334337340343346349352355358361364367370373376379382385388391394397400403406409412415418421424427430433436439442445448451454457460463466469472475478481484487490493496499502505508511514517520523526529532535538541544547550553556559562565568571574577580583586589592595598601hello201203hello202204hello203205hello204206hello205207hello206208hello207209hello208210hello209211hello210212hello211213hello212214hello213215hello214216hello215217hello216218hello217219hello218220hello219221hello220222hello221223hello222224hello223225hello224226hello225227hello226228hello227229hello228230hello229231hello230232hello231233hello232234hello233235hello234236hello235237hello236238hello237239hello238240hello239241hello240242hello241243hello242244hello243245hello244246hello245247hello246248hello247249hello248250hello249251hello250252hello251253hello252254hello253255hello254256hello255257hello256258hello257259hello258260hello259261hello260262hello261263hello262264hello263265hello264266hello265267hello266268hello267269hello268270hello269271hello270272hello271273hello272274hello273275hello274276hello275277hello276278hello277279hello278280hello279281hello280282hello281283hello282284hello283285hello284286hello285287hello286288hello287289hello288290hello289291hello290292hello291293hello292294hello293295hello294296hello295297hello296298hello297299hello298300hello299301hello300302\"");
diff --git a/deps/v8/test/webkit/dfg-arguments-alias-one-block-overwrite-arguments-expected.txt b/deps/v8/test/webkit/dfg-arguments-alias-one-block-overwrite-arguments-expected.txt
new file mode 100644 (file)
index 0000000..1b0ff6b
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that if you alias the arguments in a very small function, arguments simplification still works even if you overwrite the arguments register.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is "579111315171921232527293133353739414345474951535557596163656769717375777981838587899193959799101103105107109111113115117119121123125127129131133135137139141143145147149151153155157159161163165167169171173175177179181183185187189191193195197199201203205207209211213215217219221223225227229231233235237239241243245247249251253255257259261263265267269271273275277279281283285287289291293295297299301303305307309311313315317319321323325327329331333335337339341343345347349351353355357359361363365367369371373375377379381383385387389391393395397399401403hello2203hello2204hello2205hello2206hello2207hello2208hello2209hello2210hello2211hello2212hello2213hello2214hello2215hello2216hello2217hello2218hello2219hello2220hello2221hello2222hello2223hello2224hello2225hello2226hello2227hello2228hello2229hello2230hello2231hello2232hello2233hello2234hello2235hello2236hello2237hello2238hello2239hello2240hello2241hello2242hello2243hello2244hello2245hello2246hello2247hello2248hello2249hello2250hello2251hello2252hello2253hello2254hello2255hello2256hello2257hello2258hello2259hello2260hello2261hello2262hello2263hello2264hello2265hello2266hello2267hello2268hello2269hello2270hello2271hello2272hello2273hello2274hello2275hello2276hello2277hello2278hello2279hello2280hello2281hello2282hello2283hello2284hello2285hello2286hello2287hello2288hello2289hello2290hello2291hello2292hello2293hello2294hello2295hello2296hello2297hello2298hello2299hello2300hello2301hello2302"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-arguments-alias-one-block-overwrite-arguments.js b/deps/v8/test/webkit/dfg-arguments-alias-one-block-overwrite-arguments.js
new file mode 100644 (file)
index 0000000..b94638f
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that if you alias the arguments in a very small function, arguments simplification still works even if you overwrite the arguments register."
+);
+
+function foo() {
+    var args = arguments;
+    arguments = [1, 2, 3];
+    return args[0] + arguments[1] + args[2];
+}
+
+var result = "";
+for (var i = 0; i < 300; ++i) {
+    var a;
+    if (i < 200)
+        a = i;
+    else
+        a = "hello";
+    var b = i + 1;
+    var c = i + 3;
+    result += foo(a, b, c);
+}
+shouldBe("result", "\"579111315171921232527293133353739414345474951535557596163656769717375777981838587899193959799101103105107109111113115117119121123125127129131133135137139141143145147149151153155157159161163165167169171173175177179181183185187189191193195197199201203205207209211213215217219221223225227229231233235237239241243245247249251253255257259261263265267269271273275277279281283285287289291293295297299301303305307309311313315317319321323325327329331333335337339341343345347349351353355357359361363365367369371373375377379381383385387389391393395397399401403hello2203hello2204hello2205hello2206hello2207hello2208hello2209hello2210hello2211hello2212hello2213hello2214hello2215hello2216hello2217hello2218hello2219hello2220hello2221hello2222hello2223hello2224hello2225hello2226hello2227hello2228hello2229hello2230hello2231hello2232hello2233hello2234hello2235hello2236hello2237hello2238hello2239hello2240hello2241hello2242hello2243hello2244hello2245hello2246hello2247hello2248hello2249hello2250hello2251hello2252hello2253hello2254hello2255hello2256hello2257hello2258hello2259hello2260hello2261hello2262hello2263hello2264hello2265hello2266hello2267hello2268hello2269hello2270hello2271hello2272hello2273hello2274hello2275hello2276hello2277hello2278hello2279hello2280hello2281hello2282hello2283hello2284hello2285hello2286hello2287hello2288hello2289hello2290hello2291hello2292hello2293hello2294hello2295hello2296hello2297hello2298hello2299hello2300hello2301hello2302\"");
diff --git a/deps/v8/test/webkit/dfg-arguments-alias-one-block-overwrite-expected.txt b/deps/v8/test/webkit/dfg-arguments-alias-one-block-overwrite-expected.txt
new file mode 100644 (file)
index 0000000..ffc2308
--- /dev/null
@@ -0,0 +1,332 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that if you alias the arguments in a very small function, arguments simplification still works even if the variable isn't must-aliased.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-arguments-alias-one-block-overwrite.js b/deps/v8/test/webkit/dfg-arguments-alias-one-block-overwrite.js
new file mode 100644 (file)
index 0000000..e94ad8b
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that if you alias the arguments in a very small function, arguments simplification still works even if the variable isn't must-aliased."
+);
+
+function foo() {
+    var args = arguments;
+    args = [1, 2, 3];
+    return args[0] + args[1] + args[2];
+}
+
+var result = "";
+for (var i = 0; i < 300; ++i) {
+    var a;
+    if (i < 200)
+        a = i;
+    else
+        a = "hello";
+    var b = i + 1;
+    var c = i + 3;
+    shouldBe("foo(a, b, c)", "6");
+}
+
diff --git a/deps/v8/test/webkit/dfg-arguments-alias-one-block.js b/deps/v8/test/webkit/dfg-arguments-alias-one-block.js
new file mode 100644 (file)
index 0000000..46ed444
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that if you alias the arguments in a very small function, arguments simplification still works."
+);
+
+function foo() {
+    var args = arguments;
+    return args[0] + args[1];
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(i, i + 1)", "" + (i + i + 1));
diff --git a/deps/v8/test/webkit/dfg-arguments-alias.js b/deps/v8/test/webkit/dfg-arguments-alias.js
new file mode 100644 (file)
index 0000000..c30fe89
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests aliased uses of 'arguments'."
+);
+
+function foo() {
+    var result = 0;
+    var a = arguments;
+    for (var i = 0; i < a.length; ++i)
+        result += a[i];
+    return result;
+}
+
+function bar(x) {
+    return foo(x);
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("bar(42)", "42");
+
diff --git a/deps/v8/test/webkit/dfg-arguments-cross-code-origin-expected.txt b/deps/v8/test/webkit/dfg-arguments-cross-code-origin-expected.txt
new file mode 100644 (file)
index 0000000..08d699d
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests uses of 'arguments' that are aliased but span code origins.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-arguments-cross-code-origin.js b/deps/v8/test/webkit/dfg-arguments-cross-code-origin.js
new file mode 100644 (file)
index 0000000..0793dfa
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests uses of 'arguments' that are aliased but span code origins."
+);
+
+function foo() {
+    return arguments;
+}
+
+function bar(a) {
+    var result = 0;
+    for (var i = 0; i < a.length; ++i)
+        result += a[i];
+    return result;
+}
+
+function baz(x) {
+    return bar(foo(x));
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("baz(42)", "42");
diff --git a/deps/v8/test/webkit/dfg-arguments-mixed-alias-expected.txt b/deps/v8/test/webkit/dfg-arguments-mixed-alias-expected.txt
new file mode 100644 (file)
index 0000000..16481ca
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests functions that use 'arguments' in both an aliased and a non-aliased way.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-arguments-mixed-alias.js b/deps/v8/test/webkit/dfg-arguments-mixed-alias.js
new file mode 100644 (file)
index 0000000..477eac3
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests functions that use 'arguments' in both an aliased and a non-aliased way."
+);
+
+function foo() {
+    var result = 0;
+    var a = arguments;
+    for (var i = 0; i < a.length; ++i)
+        result += arguments[i];
+    return result;
+}
+
+function bar(x) {
+    return foo(x);
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("bar(42)", "42");
+
diff --git a/deps/v8/test/webkit/dfg-arguments-osr-exit-expected.txt b/deps/v8/test/webkit/dfg-arguments-osr-exit-expected.txt
new file mode 100644 (file)
index 0000000..0b83ec1
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests aliased uses of 'arguments' that require reification of the Arguments object on OSR exit.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-arguments-osr-exit-multiple-blocks-before-exit-expected.txt b/deps/v8/test/webkit/dfg-arguments-osr-exit-multiple-blocks-before-exit-expected.txt
new file mode 100644 (file)
index 0000000..f1c6657
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests aliased uses of 'arguments' that require reification of the Arguments object on OSR exit, in the case that there is some interesting control flow prior to the exit.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-arguments-osr-exit-multiple-blocks-before-exit.js b/deps/v8/test/webkit/dfg-arguments-osr-exit-multiple-blocks-before-exit.js
new file mode 100644 (file)
index 0000000..8acf9c3
--- /dev/null
@@ -0,0 +1,62 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests aliased uses of 'arguments' that require reification of the Arguments object on OSR exit, in the case that there is some interesting control flow prior to the exit."
+);
+
+function baz() {
+    return [variable];
+}
+
+var someThing = 0;
+
+function foo() {
+    var result = 0;
+    var a = arguments;
+    for (var i = 0; i < a.length; ++i) {
+        // Just some dummy control flow.
+        if (someThing < 0)
+            throw "Error";
+
+        result += a[i];
+        result += baz()[0];
+    }
+    return result;
+}
+
+function bar(x) {
+    return foo(x);
+}
+
+var variable = 32;
+var expected = "74";
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150) {
+        variable = "32";
+        expected = "\"4232\"";
+    }
+
+    shouldBe("bar(42)", expected);
+}
diff --git a/deps/v8/test/webkit/dfg-arguments-osr-exit-multiple-blocks-expected.txt b/deps/v8/test/webkit/dfg-arguments-osr-exit-multiple-blocks-expected.txt
new file mode 100644 (file)
index 0000000..7e413fe
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests aliased uses of 'arguments' that require reification of the Arguments object on OSR exit, in the case that there is some interesting control flow.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-arguments-osr-exit-multiple-blocks.js b/deps/v8/test/webkit/dfg-arguments-osr-exit-multiple-blocks.js
new file mode 100644 (file)
index 0000000..bc52cc6
--- /dev/null
@@ -0,0 +1,60 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests aliased uses of 'arguments' that require reification of the Arguments object on OSR exit, in the case that there is some interesting control flow."
+);
+
+function baz() {
+    return [variable];
+}
+
+function foo() {
+    var result = 0;
+    var a = arguments;
+    for (var i = 0; i < a.length; ++i) {
+        result += a[i];
+        result += baz()[0];
+
+        // Just some dummy control flow.
+        if (result < 0)
+            throw "Error";
+    }
+    return result;
+}
+
+function bar(x) {
+    return foo(x);
+}
+
+var variable = 32;
+var expected = "74";
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150) {
+        variable = "32";
+        expected = "\"4232\"";
+    }
+
+    shouldBe("bar(42)", expected);
+}
diff --git a/deps/v8/test/webkit/dfg-arguments-osr-exit.js b/deps/v8/test/webkit/dfg-arguments-osr-exit.js
new file mode 100644 (file)
index 0000000..c7a7d95
--- /dev/null
@@ -0,0 +1,56 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests aliased uses of 'arguments' that require reification of the Arguments object on OSR exit."
+);
+
+function baz() {
+    return [variable];
+}
+
+function foo() {
+    var result = 0;
+    var a = arguments;
+    for (var i = 0; i < a.length; ++i) {
+        result += a[i];
+        result += baz()[0];
+    }
+    return result;
+}
+
+function bar(x) {
+    return foo(x);
+}
+
+var variable = 32;
+var expected = "74";
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150) {
+        variable = "32";
+        expected = "\"4232\"";
+    }
+
+    shouldBe("bar(42)", expected);
+}
diff --git a/deps/v8/test/webkit/dfg-arguments-out-of-bounds-expected.txt b/deps/v8/test/webkit/dfg-arguments-out-of-bounds-expected.txt
new file mode 100644 (file)
index 0000000..2680386
--- /dev/null
@@ -0,0 +1,3032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests accessing arguments with an out-of-bounds index when the arguments have not been created but might be.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-arguments-out-of-bounds.js b/deps/v8/test/webkit/dfg-arguments-out-of-bounds.js
new file mode 100644 (file)
index 0000000..8774d2c
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests accessing arguments with an out-of-bounds index when the arguments have not been created but might be."
+);
+
+var p = false;
+
+function foo() {
+    function bar() { }
+    if (p)
+        return arguments;
+    return arguments[0];
+}
+
+var args = [42];
+var expected = "\"42\"";
+for (var i = 0; i < 3000; ++i) {
+    if (i == 1000) {
+        p = true;
+        expected = "\"[object Arguments]\"";
+    }
+    if (i == 2000) {
+        args = [];
+        p = false;
+        expected = "\"undefined\"";
+    }
+    result = "" +foo.apply(void 0, args);
+    shouldBe("result", expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-arguments-unexpected-escape-expected.txt b/deps/v8/test/webkit/dfg-arguments-unexpected-escape-expected.txt
new file mode 100644 (file)
index 0000000..c9827fa
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests aliased uses of 'arguments' that have an unexpected escape.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-arguments-unexpected-escape.js b/deps/v8/test/webkit/dfg-arguments-unexpected-escape.js
new file mode 100644 (file)
index 0000000..9dbf020
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests aliased uses of 'arguments' that have an unexpected escape."
+);
+
+function baz() {
+    return foo.arguments;
+}
+
+function foo() {
+    var result = 0;
+    var a = arguments;
+    for (var i = 0; i < a.length; ++i) {
+        result += a[i];
+        result += baz()[0];
+    }
+    return result;
+}
+
+function bar(x) {
+    return foo(x);
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("bar(42)", "84");
diff --git a/deps/v8/test/webkit/dfg-arith-add-overflow-check-elimination-predicted-but-not-proven-int-expected.txt b/deps/v8/test/webkit/dfg-arith-add-overflow-check-elimination-predicted-but-not-proven-int-expected.txt
new file mode 100644 (file)
index 0000000..f1cb1da
--- /dev/null
@@ -0,0 +1,140 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that when values predicted but not proven int are used in a tower of additions, we don't eliminate the overflow check unsoundly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(2147483645, 2147483644, {f:9007199254740990}) is -8
+PASS bar(2147483643, 2147483643, {f:18014398509481980}) is -16
+PASS bar(2147483643, 2147483642, {f:36028797018963960}) is -16
+PASS bar(2147483642, 2147483642, {f:36028797018963960}) is -16
+PASS bar(2147483641, 2147483640, {f:144115188075855840}) is -32
+PASS bar(2147483640, 2147483640, {f:144115188075855840}) is -64
+PASS bar(2147483640, 2147483639, {f:288230376151711680}) is -64
+PASS bar(2147483639, 2147483639, {f:288230376151711680}) is -64
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-arith-add-overflow-check-elimination-predicted-but-not-proven-int.js b/deps/v8/test/webkit/dfg-arith-add-overflow-check-elimination-predicted-but-not-proven-int.js
new file mode 100644 (file)
index 0000000..54c049f
--- /dev/null
@@ -0,0 +1,67 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that when values predicted but not proven int are used in a tower of additions, we don't eliminate the overflow check unsoundly."
+);
+
+function foo(a, b, o) {
+    return (a + b + o.f) | 0;
+}
+
+function bar(a, b, o) {
+    eval(""); // Prevent this function from being opt compiled.
+    return foo(a, b, o);
+}
+
+var badCases = [
+    {a:2147483645, b:2147483644, c:9007199254740990, expected:-8},
+    {a:2147483643, b:2147483643, c:18014398509481980, expected:-16},
+    {a:2147483643, b:2147483642, c:36028797018963960, expected:-16},
+    {a:2147483642, b:2147483642, c:36028797018963960, expected:-16},
+    {a:2147483641, b:2147483640, c:144115188075855840, expected:-32},
+    {a:2147483640, b:2147483640, c:144115188075855840, expected:-64},
+    {a:2147483640, b:2147483639, c:288230376151711680, expected:-64},
+    {a:2147483639, b:2147483639, c:288230376151711680, expected:-64}
+];
+
+var warmup = 100;
+
+for (var i = 0; i < warmup + badCases.length; ++i) {
+    var a, b, c;
+    var expected;
+    if (i < warmup) {
+        a = 1;
+        b = 2;
+        c = 3;
+        expected = 6;
+    } else {
+        var current = badCases[i - warmup];
+        a = current.a;
+        b = current.b;
+        c = current.c;
+        expected = current.expected;
+    }
+    shouldBe("bar(" + a + ", " + b + ", {f:" + c + "})", "" + expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-arith-add-overflow-check-elimination-tower-of-large-numbers-expected.txt b/deps/v8/test/webkit/dfg-arith-add-overflow-check-elimination-tower-of-large-numbers-expected.txt
new file mode 100644 (file)
index 0000000..a99cdb5
--- /dev/null
@@ -0,0 +1,233 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that if we have a tower of large numerical constants being added to each other, the DFG knows that a sufficiently large tower may produce a large enough value that overflow check elimination must be careful.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(2147483645, 2147483644) is -10
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-arith-add-overflow-check-elimination-tower-of-large-numbers.js b/deps/v8/test/webkit/dfg-arith-add-overflow-check-elimination-tower-of-large-numbers.js
new file mode 100644 (file)
index 0000000..292926e
--- /dev/null
@@ -0,0 +1,60 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that if we have a tower of large numerical constants being added to each other, the DFG knows that a sufficiently large tower may produce a large enough value that overflow check elimination must be careful."
+);
+
+function foo(a, b) {
+    return (a + b + 281474976710655 + 281474976710655 + 281474976710655 + 281474976710655 +
+            281474976710655 + 281474976710655 + 281474976710655 + 281474976710655 +
+            281474976710655 + 281474976710655 + 281474976710655 + 281474976710655 +
+            281474976710655 + 281474976710655 + 281474976710655 + 281474976710655 +
+            281474976710655 + 281474976710655 + 281474976710655 + 281474976710655 +
+            281474976710655 + 281474976710655 + 281474976710655 + 281474976710655 +
+            281474976710655 + 281474976710655 + 281474976710655 + 281474976710655 +
+            281474976710655 + 281474976710655 + 281474976710655 + 281474976710655 + 30) | 0;
+}
+
+function bar(a, b, o) {
+    eval(""); // Prevent this function from being opt compiled.
+    return foo(a, b, o);
+}
+
+var warmup = 200;
+
+for (var i = 0; i < warmup + 1; ++i) {
+    var a, b, c;
+    var expected;
+    if (i < warmup) {
+        a = 1;
+        b = 2;
+        expected = 0;
+    } else {
+        a = 2147483645;
+        b = 2147483644;
+        expected = -10;
+    }
+    shouldBe("bar(" + a + ", " + b + ")", "" + expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-array-dead-expected.txt b/deps/v8/test/webkit/dfg-array-dead-expected.txt
new file mode 100644 (file)
index 0000000..26dd76c
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that an array being dead does not result in register allocation failures.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-array-dead.js b/deps/v8/test/webkit/dfg-array-dead.js
new file mode 100644 (file)
index 0000000..a627617
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that an array being dead does not result in register allocation failures."
+);
+
+function foo() {
+    var z = new Array(00, 01, 02, 03, 04, 05, 06, 07, 08, 09,
+                      10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+                      20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+                      30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+                      40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+                      50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+                      60, 61, 62, 63, 64, 65, 66, 67, 68, 69);
+
+    z = bar(1);
+
+    return z.length;
+}
+
+function bar(x) {
+    var a = [];
+    a[x] = 1;
+
+    return a;
+}
+
+for (var i = 0; i < 1000; ++i) {
+    shouldBe("foo()", "2");
+}
+
diff --git a/deps/v8/test/webkit/dfg-array-length-dead-expected.txt b/deps/v8/test/webkit/dfg-array-length-dead-expected.txt
new file mode 100644 (file)
index 0000000..8582151
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that an array length access being dead does not result in register allocation failures.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-array-length-dead.js b/deps/v8/test/webkit/dfg-array-length-dead.js
new file mode 100644 (file)
index 0000000..5256fe1
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that an array length access being dead does not result in register allocation failures."
+);
+
+function foo(x) {
+    var y = x.f.length;
+    return 42;
+}
+
+for (var i = 0; i < 1000; ++i) {
+    shouldBe("foo({f:[]})", "42");
+}
+
diff --git a/deps/v8/test/webkit/dfg-array-pop-side-effects-expected.txt b/deps/v8/test/webkit/dfg-array-pop-side-effects-expected.txt
new file mode 100644 (file)
index 0000000..907b72f
--- /dev/null
@@ -0,0 +1,283 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that ArrayPop is known to the DFG to be a side effect.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+PASS ouches is 50
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-array-pop-side-effects.js b/deps/v8/test/webkit/dfg-array-pop-side-effects.js
new file mode 100644 (file)
index 0000000..8d4d5f3
--- /dev/null
@@ -0,0 +1,62 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that ArrayPop is known to the DFG to be a side effect."
+);
+
+function foo(a, b) {
+    var result = a.f;
+    result += b.pop();
+    result += a.g;
+    return result;
+}
+
+var ouches = 0;
+for (var i = 0; i < 200; ++i) {
+    var a = {f:1, g:2};
+    var b = [];
+    var expected;
+    if (i < 150) {
+        // Ensure that we always transition the array's structure to one that indicates
+        // that we have array storage.
+        b.__defineGetter__("0", function() {
+            testFailed("Should never get here");
+        });
+        b.length = 0;
+        b[0] = 42;
+        expected = "45";
+    } else {
+        b.__defineGetter__("0", function() {
+            debug("Ouch!");
+            ouches++;
+            delete a.g;
+            a.h = 43;
+            return 5;
+        });
+        expected = "0/0";
+    }
+    shouldBe("foo(a, b)", expected);
+}
+
+shouldBe("ouches", "50");
diff --git a/deps/v8/test/webkit/dfg-array-pop-value-clearing-expected.txt b/deps/v8/test/webkit/dfg-array-pop-value-clearing-expected.txt
new file mode 100644 (file)
index 0000000..d349201
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that array popping properly cleans up the popped element.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-array-pop-value-clearing.js b/deps/v8/test/webkit/dfg-array-pop-value-clearing.js
new file mode 100644 (file)
index 0000000..6ea310a
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that array popping properly cleans up the popped element."
+);
+
+function foo(a) {
+    var x = a.pop();
+    a[a.length + 1] = 42;
+    return [x, a.pop(), a.pop()];
+}
+
+for (var i = 0; i < 1000; ++i)
+    shouldBe("foo([1, 2])", "[2,42,,]");
diff --git a/deps/v8/test/webkit/dfg-arrayify-elimination-expected.txt b/deps/v8/test/webkit/dfg-arrayify-elimination-expected.txt
new file mode 100644 (file)
index 0000000..a5c148e
--- /dev/null
@@ -0,0 +1,1027 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-arrayify-elimination.js b/deps/v8/test/webkit/dfg-arrayify-elimination.js
new file mode 100644 (file)
index 0000000..3ac57d0
--- /dev/null
@@ -0,0 +1,39 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+function foo(a, i, j, k) {
+    a[i] = 42;
+    a[j] = 43;
+    a[k] = 44;
+}
+
+for (var i = 0; i < 1000; ++i) {
+    var array = [];
+    if (i % 2)
+        array.unshift(52);
+    foo(array, 1, 2, 3);
+    if (i % 2)
+        shouldBe("array", "[52,42,43,44]");
+    else
+        shouldBe("array", "[,42,43,44]");
+}
diff --git a/deps/v8/test/webkit/dfg-arrayify-when-late-prevent-extensions-expected.txt b/deps/v8/test/webkit/dfg-arrayify-when-late-prevent-extensions-expected.txt
new file mode 100644 (file)
index 0000000..374c7c1
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that Arraify does good things when Object.preventExtensions() has been called.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-arrayify-when-late-prevent-extensions.js b/deps/v8/test/webkit/dfg-arrayify-when-late-prevent-extensions.js
new file mode 100644 (file)
index 0000000..3995068
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that Arraify does good things when Object.preventExtensions() has been called."
+);
+
+function foo(o) {
+    o[0] = 42;
+    return o[0];
+}
+
+for (var i = 0; i < 200; ++i) {
+    var o = {};
+    var expected;
+    if (i >= 150) {
+        Object.preventExtensions(o);
+        expected = "void 0";
+    } else
+        expected = "42";
+    shouldBe("foo(o)", expected);
+}
diff --git a/deps/v8/test/webkit/dfg-arrayify-when-prevent-extensions-expected.txt b/deps/v8/test/webkit/dfg-arrayify-when-prevent-extensions-expected.txt
new file mode 100644 (file)
index 0000000..3202136
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that Arraify does good things when Object.preventExtensions() has been called.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-arrayify-when-prevent-extensions.js b/deps/v8/test/webkit/dfg-arrayify-when-prevent-extensions.js
new file mode 100644 (file)
index 0000000..78fb6bf
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that Arraify does good things when Object.preventExtensions() has been called."
+);
+
+function foo(o) {
+    o[0] = 42;
+    return o[0];
+}
+
+for (var i = 0; i < 200; ++i) {
+    var o = {};
+    Object.preventExtensions(o);
+    shouldBe("foo(o)", "void 0");
+}
diff --git a/deps/v8/test/webkit/dfg-bool-to-int32-reuse-expected.txt b/deps/v8/test/webkit/dfg-bool-to-int32-reuse-expected.txt
new file mode 100644 (file)
index 0000000..f9fbfa6
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that using a value predicted boolean after it is converted to an int32 doesn't crash the compiler while causing bad code gen.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-bool-to-int32-reuse.js b/deps/v8/test/webkit/dfg-bool-to-int32-reuse.js
new file mode 100644 (file)
index 0000000..8e7c72a
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that using a value predicted boolean after it is converted to an int32 doesn't crash the compiler while causing bad code gen."
+);
+
+function foo(x) {
+    return [x << 1, x];
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo(true)", "[2, true]");
diff --git a/deps/v8/test/webkit/dfg-branch-logical-not-peephole-around-osr-exit-expected.txt b/deps/v8/test/webkit/dfg-branch-logical-not-peephole-around-osr-exit-expected.txt
new file mode 100644 (file)
index 0000000..15f1e1f
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that our attempts to do peephole Branch(LogicalNot) optimization doesn't break OSR exit's ability to recover the value of LogicalNot.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 6
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 7
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 8
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 9
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 10
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 9
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 12
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 13
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 14
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 15
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 16
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 17
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 18
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 19
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 20
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 21
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 22
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 23
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 24
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 25
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 26
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 27
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 28
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 29
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 30
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 31
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 32
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 33
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 34
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 35
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 36
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 37
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 38
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 39
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 40
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 41
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 42
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 43
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 44
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 45
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 46
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 47
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 48
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 49
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 50
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 51
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 52
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 53
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 54
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 55
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 56
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 57
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 58
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 59
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 60
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 61
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 62
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 63
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 64
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 65
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 66
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 67
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 68
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 69
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 70
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 71
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 72
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 73
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 74
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 75
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 76
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 77
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 78
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 79
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 80
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 81
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 82
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 83
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 84
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 85
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 86
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 87
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 88
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 89
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 90
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 91
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 92
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 93
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 94
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 95
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 96
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 97
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 98
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 99
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 100
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 101
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 102
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 103
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 104
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 105
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 106
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 107
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 108
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 109
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 110
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 111
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 112
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 113
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 114
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 115
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 116
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 117
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 118
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 119
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 120
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 121
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 122
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 123
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 124
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 125
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 126
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 127
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 128
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 129
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 130
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 131
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 132
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 133
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 134
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 135
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 136
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 137
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 138
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 139
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 140
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 141
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 142
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 143
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 144
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 145
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 146
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 147
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 148
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 149
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 150
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 151
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 152
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 153
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 154
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 155
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 156
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 157
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 158
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 159
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 160
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 161
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 162
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 163
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 164
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 165
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 166
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 167
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 168
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 169
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 170
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 171
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 172
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 173
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 174
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 175
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 176
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 177
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 178
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 179
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 180
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 181
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 182
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 183
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 184
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 185
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 186
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 187
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 188
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 189
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 190
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 191
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 192
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 193
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 194
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 195
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 196
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 197
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 198
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 199
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 200
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 201
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 202
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 203
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 204
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 2147483847
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-branch-logical-not-peephole-around-osr-exit.js b/deps/v8/test/webkit/dfg-branch-logical-not-peephole-around-osr-exit.js
new file mode 100644 (file)
index 0000000..ab0215e
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that our attempts to do peephole Branch(LogicalNot) optimization doesn't break OSR exit's ability to recover the value of LogicalNot."
+);
+
+function foo(a, b, c) {
+    var x = a !== b;
+    var result = a + c;
+    if (x)
+        result++;
+    else
+        result--;
+    return result;
+}
+
+for (var i = 0; i < 200; ++i) {
+    var expected = i + (i == 199 ? 2147483647 : 5) + (i !== 5 ? 1 : -1)
+    shouldBe("foo(i, 5, i == 199 ? 2147483647 : 5)", "" + expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-branch-not-fail-expected.txt b/deps/v8/test/webkit/dfg-branch-not-fail-expected.txt
new file mode 100644 (file)
index 0000000..3803065
--- /dev/null
@@ -0,0 +1,832 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Check that short-circuiting Branch(LogicalNot(@a)) and then failing speculation does not result in the branch being taken the wrong way.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-branch-not-fail.js b/deps/v8/test/webkit/dfg-branch-not-fail.js
new file mode 100644 (file)
index 0000000..af7ba97
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Check that short-circuiting Branch(LogicalNot(@a)) and then failing speculation does not result in the branch being taken the wrong way."
+);
+
+function foo(a) {
+    if (a.f)
+        return 1;
+    return 0;
+}
+
+function bar(a) {
+    var b = !a.f;
+    if (b)
+        return 1;
+    return 0;
+}
+
+var True = true;
+var False = false;
+for (var i = 0; i < 200; ++i) {
+    var x;
+    if (i == 100) {
+        True = "string";
+        False = void 0;
+    }
+    shouldBe("foo({f:True})", "1");
+    shouldBe("foo({f:False})", "0");
+    shouldBe("bar({f:True})", "0");
+    shouldBe("bar({f:False})", "1");
+}
+
diff --git a/deps/v8/test/webkit/dfg-call-function-hit-watchpoint-expected.txt b/deps/v8/test/webkit/dfg-call-function-hit-watchpoint-expected.txt
new file mode 100644 (file)
index 0000000..fec96a9
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests correctness of function calls when the function is overwritten.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(i, i + 1) is 1
+PASS bar(i, i + 1) is 3
+PASS bar(i, i + 1) is 5
+PASS bar(i, i + 1) is 7
+PASS bar(i, i + 1) is 9
+PASS bar(i, i + 1) is 11
+PASS bar(i, i + 1) is 13
+PASS bar(i, i + 1) is 15
+PASS bar(i, i + 1) is 17
+PASS bar(i, i + 1) is 19
+PASS bar(i, i + 1) is 21
+PASS bar(i, i + 1) is 23
+PASS bar(i, i + 1) is 25
+PASS bar(i, i + 1) is 27
+PASS bar(i, i + 1) is 29
+PASS bar(i, i + 1) is 31
+PASS bar(i, i + 1) is 33
+PASS bar(i, i + 1) is 35
+PASS bar(i, i + 1) is 37
+PASS bar(i, i + 1) is 39
+PASS bar(i, i + 1) is 41
+PASS bar(i, i + 1) is 43
+PASS bar(i, i + 1) is 45
+PASS bar(i, i + 1) is 47
+PASS bar(i, i + 1) is 49
+PASS bar(i, i + 1) is 51
+PASS bar(i, i + 1) is 53
+PASS bar(i, i + 1) is 55
+PASS bar(i, i + 1) is 57
+PASS bar(i, i + 1) is 59
+PASS bar(i, i + 1) is 61
+PASS bar(i, i + 1) is 63
+PASS bar(i, i + 1) is 65
+PASS bar(i, i + 1) is 67
+PASS bar(i, i + 1) is 69
+PASS bar(i, i + 1) is 71
+PASS bar(i, i + 1) is 73
+PASS bar(i, i + 1) is 75
+PASS bar(i, i + 1) is 77
+PASS bar(i, i + 1) is 79
+PASS bar(i, i + 1) is 81
+PASS bar(i, i + 1) is 83
+PASS bar(i, i + 1) is 85
+PASS bar(i, i + 1) is 87
+PASS bar(i, i + 1) is 89
+PASS bar(i, i + 1) is 91
+PASS bar(i, i + 1) is 93
+PASS bar(i, i + 1) is 95
+PASS bar(i, i + 1) is 97
+PASS bar(i, i + 1) is 99
+PASS bar(i, i + 1) is 101
+PASS bar(i, i + 1) is 103
+PASS bar(i, i + 1) is 105
+PASS bar(i, i + 1) is 107
+PASS bar(i, i + 1) is 109
+PASS bar(i, i + 1) is 111
+PASS bar(i, i + 1) is 113
+PASS bar(i, i + 1) is 115
+PASS bar(i, i + 1) is 117
+PASS bar(i, i + 1) is 119
+PASS bar(i, i + 1) is 121
+PASS bar(i, i + 1) is 123
+PASS bar(i, i + 1) is 125
+PASS bar(i, i + 1) is 127
+PASS bar(i, i + 1) is 129
+PASS bar(i, i + 1) is 131
+PASS bar(i, i + 1) is 133
+PASS bar(i, i + 1) is 135
+PASS bar(i, i + 1) is 137
+PASS bar(i, i + 1) is 139
+PASS bar(i, i + 1) is 141
+PASS bar(i, i + 1) is 143
+PASS bar(i, i + 1) is 145
+PASS bar(i, i + 1) is 147
+PASS bar(i, i + 1) is 149
+PASS bar(i, i + 1) is 151
+PASS bar(i, i + 1) is 153
+PASS bar(i, i + 1) is 155
+PASS bar(i, i + 1) is 157
+PASS bar(i, i + 1) is 159
+PASS bar(i, i + 1) is 161
+PASS bar(i, i + 1) is 163
+PASS bar(i, i + 1) is 165
+PASS bar(i, i + 1) is 167
+PASS bar(i, i + 1) is 169
+PASS bar(i, i + 1) is 171
+PASS bar(i, i + 1) is 173
+PASS bar(i, i + 1) is 175
+PASS bar(i, i + 1) is 177
+PASS bar(i, i + 1) is 179
+PASS bar(i, i + 1) is 181
+PASS bar(i, i + 1) is 183
+PASS bar(i, i + 1) is 185
+PASS bar(i, i + 1) is 187
+PASS bar(i, i + 1) is 189
+PASS bar(i, i + 1) is 191
+PASS bar(i, i + 1) is 193
+PASS bar(i, i + 1) is 195
+PASS bar(i, i + 1) is 197
+PASS bar(i, i + 1) is 199
+PASS bar(i, i + 1) is 201
+PASS bar(i, i + 1) is 203
+PASS bar(i, i + 1) is 205
+PASS bar(i, i + 1) is 207
+PASS bar(i, i + 1) is 209
+PASS bar(i, i + 1) is 211
+PASS bar(i, i + 1) is 213
+PASS bar(i, i + 1) is 215
+PASS bar(i, i + 1) is 217
+PASS bar(i, i + 1) is 219
+PASS bar(i, i + 1) is 221
+PASS bar(i, i + 1) is 223
+PASS bar(i, i + 1) is 225
+PASS bar(i, i + 1) is 227
+PASS bar(i, i + 1) is 229
+PASS bar(i, i + 1) is 231
+PASS bar(i, i + 1) is 233
+PASS bar(i, i + 1) is 235
+PASS bar(i, i + 1) is 237
+PASS bar(i, i + 1) is 239
+PASS bar(i, i + 1) is 241
+PASS bar(i, i + 1) is 243
+PASS bar(i, i + 1) is 245
+PASS bar(i, i + 1) is 247
+PASS bar(i, i + 1) is 249
+PASS bar(i, i + 1) is 251
+PASS bar(i, i + 1) is 253
+PASS bar(i, i + 1) is 255
+PASS bar(i, i + 1) is 257
+PASS bar(i, i + 1) is 259
+PASS bar(i, i + 1) is 261
+PASS bar(i, i + 1) is 263
+PASS bar(i, i + 1) is 265
+PASS bar(i, i + 1) is 267
+PASS bar(i, i + 1) is 269
+PASS bar(i, i + 1) is 271
+PASS bar(i, i + 1) is 273
+PASS bar(i, i + 1) is 275
+PASS bar(i, i + 1) is 277
+PASS bar(i, i + 1) is 279
+PASS bar(i, i + 1) is 281
+PASS bar(i, i + 1) is 283
+PASS bar(i, i + 1) is 285
+PASS bar(i, i + 1) is 287
+PASS bar(i, i + 1) is 289
+PASS bar(i, i + 1) is 291
+PASS bar(i, i + 1) is 293
+PASS bar(i, i + 1) is 295
+PASS bar(i, i + 1) is 297
+PASS bar(i, i + 1) is 299
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-call-function-hit-watchpoint.js b/deps/v8/test/webkit/dfg-call-function-hit-watchpoint.js
new file mode 100644 (file)
index 0000000..5a332c1
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests correctness of function calls when the function is overwritten."
+);
+
+function foo(a, b) {
+    return a + b;
+}
+
+function bar(a, b) {
+    return foo(a, b);
+}
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150)
+        foo = function(a, b) { return a - b; }
+    var expected;
+    if (i < 150)
+        expected = i + i + 1;
+    else
+        expected = -1;
+    shouldBe("bar(i, i + 1)", "" + expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-call-method-hit-watchpoint-expected.txt b/deps/v8/test/webkit/dfg-call-method-hit-watchpoint-expected.txt
new file mode 100644 (file)
index 0000000..7ac11fa
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests correctness of method calls when the prototype is changed.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-call-method-hit-watchpoint.js b/deps/v8/test/webkit/dfg-call-method-hit-watchpoint.js
new file mode 100644 (file)
index 0000000..382f899
--- /dev/null
@@ -0,0 +1,53 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests correctness of method calls when the prototype is changed."
+);
+
+function Thingy() {
+}
+
+Thingy.prototype = {
+    foo: function() {
+        return 42;
+    }
+};
+
+function callFoo(o) {
+    return o.foo();
+}
+
+var o = new Thingy();
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150)
+        Thingy.prototype.foo = function() { return 56; }
+    var expected;
+    if (i < 150)
+        expected = 42;
+    else
+        expected = 56;
+    shouldBe("callFoo(o)", "" + expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-captured-var-get-local-expected.txt b/deps/v8/test/webkit/dfg-captured-var-get-local-expected.txt
new file mode 100644 (file)
index 0000000..90491d4
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that GetLocals on captured variables aren't eliminated too aggressively.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-captured-var-get-local.js b/deps/v8/test/webkit/dfg-captured-var-get-local.js
new file mode 100644 (file)
index 0000000..4abac74
--- /dev/null
@@ -0,0 +1,101 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that GetLocals on captured variables aren't eliminated too aggressively."
+);
+
+function foo() {
+    var x;
+    (function(){
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+    })();
+    var y = x;
+    return y;
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo()", "42");
diff --git a/deps/v8/test/webkit/dfg-cfa-merge-with-dead-use-at-tail-expected.txt b/deps/v8/test/webkit/dfg-cfa-merge-with-dead-use-at-tail-expected.txt
new file mode 100644 (file)
index 0000000..175dd60
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a dead use of a variable at the tail of a basic block doesn't confuse the CFA into believing that the variable being used is dead as well.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-cfa-merge-with-dead-use-at-tail.js b/deps/v8/test/webkit/dfg-cfa-merge-with-dead-use-at-tail.js
new file mode 100644 (file)
index 0000000..ab9f2a5
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a dead use of a variable at the tail of a basic block doesn't confuse the CFA into believing that the variable being used is dead as well."
+);
+
+function foo(p, q, v) {
+    var x, y;
+    if (p)
+        x = 0;
+    else {
+        if (q)
+            x = v;
+        else
+            x = 0;
+        y = x;
+    }
+    if (x)
+        return 42;
+    return 0;
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(false, true, 5)", "42");
diff --git a/deps/v8/test/webkit/dfg-cfa-prove-put-by-id-simple-when-storing-to-specialized-function-expected.txt b/deps/v8/test/webkit/dfg-cfa-prove-put-by-id-simple-when-storing-to-specialized-function-expected.txt
new file mode 100644 (file)
index 0000000..41b9b88
--- /dev/null
@@ -0,0 +1,234 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Checks that the DFG CFA does the right things if it proves that a put_by_id is a simple replace when storing to a specialized function property.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+fuzz!
+PASS bar.call({f:baz}, fuzz) is "fuzz"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-cfa-prove-put-by-id-simple-when-storing-to-specialized-function.js b/deps/v8/test/webkit/dfg-cfa-prove-put-by-id-simple-when-storing-to-specialized-function.js
new file mode 100644 (file)
index 0000000..6953ffa
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Checks that the DFG CFA does the right things if it proves that a put_by_id is a simple replace when storing to a specialized function property."
+);
+
+function foo(o, v) {
+    o.f = v;
+}
+
+// Warm up foo's put_by_id to make it look polymorphic.
+for (var i = 0; i < 100; ++i)
+    foo(i % 2 ? {a: 1} : {b: 2});
+
+function bar(f) {
+    foo(this, f);
+    return this.f();
+}
+
+function baz() {
+    debug("baz!");
+    return "baz";
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("bar.call({f:baz}, baz)", "\"baz\"");
+
+function fuzz() {
+    debug("fuzz!");
+    return "fuzz";
+}
+
+shouldBe("bar.call({f:baz}, fuzz)", "\"fuzz\"");
+
diff --git a/deps/v8/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null-and-decrement-expected.txt b/deps/v8/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null-and-decrement-expected.txt
new file mode 100644 (file)
index 0000000..626486d
--- /dev/null
@@ -0,0 +1,532 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens when CFG simplification leads to the elimination of a set local that had a type check, and then we branch on the variable not being null while decrementing the variable in the same basic block.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null-and-decrement.js b/deps/v8/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null-and-decrement.js
new file mode 100644 (file)
index 0000000..cac2d10
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens when CFG simplification leads to the elimination of a set local that had a type check, and then we branch on the variable not being null while decrementing the variable in the same basic block."
+);
+
+function foo(o) {
+    var x;
+    if (o.f)
+        x = o.g;
+    else
+        x = o.h;
+    var y = x != null;
+    x--;
+    if (y)
+        return y;
+    else
+        return false;
+}
+
+for (var i = 0; i < 500; ++i) {
+    var o = {f:foo};
+    var expected;
+    if (i < 450) {
+        o.g = i;
+        expected = "true";
+    } else {
+        o.g = null;
+        expected = "false";
+    }
+    shouldBe("foo(o)", expected);
+}
+
+
diff --git a/deps/v8/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null-expected.txt b/deps/v8/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null-expected.txt
new file mode 100644 (file)
index 0000000..4dfc7f6
--- /dev/null
@@ -0,0 +1,532 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens when CFG simplification leads to the elimination of a set local that had a type check, and then we branch on the variable not being null.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(o) is -1
+PASS foo(o) is 0
+PASS foo(o) is 1
+PASS foo(o) is 2
+PASS foo(o) is 3
+PASS foo(o) is 4
+PASS foo(o) is 5
+PASS foo(o) is 6
+PASS foo(o) is 7
+PASS foo(o) is 8
+PASS foo(o) is 9
+PASS foo(o) is 10
+PASS foo(o) is 11
+PASS foo(o) is 12
+PASS foo(o) is 13
+PASS foo(o) is 14
+PASS foo(o) is 15
+PASS foo(o) is 16
+PASS foo(o) is 17
+PASS foo(o) is 18
+PASS foo(o) is 19
+PASS foo(o) is 20
+PASS foo(o) is 21
+PASS foo(o) is 22
+PASS foo(o) is 23
+PASS foo(o) is 24
+PASS foo(o) is 25
+PASS foo(o) is 26
+PASS foo(o) is 27
+PASS foo(o) is 28
+PASS foo(o) is 29
+PASS foo(o) is 30
+PASS foo(o) is 31
+PASS foo(o) is 32
+PASS foo(o) is 33
+PASS foo(o) is 34
+PASS foo(o) is 35
+PASS foo(o) is 36
+PASS foo(o) is 37
+PASS foo(o) is 38
+PASS foo(o) is 39
+PASS foo(o) is 40
+PASS foo(o) is 41
+PASS foo(o) is 42
+PASS foo(o) is 43
+PASS foo(o) is 44
+PASS foo(o) is 45
+PASS foo(o) is 46
+PASS foo(o) is 47
+PASS foo(o) is 48
+PASS foo(o) is 49
+PASS foo(o) is 50
+PASS foo(o) is 51
+PASS foo(o) is 52
+PASS foo(o) is 53
+PASS foo(o) is 54
+PASS foo(o) is 55
+PASS foo(o) is 56
+PASS foo(o) is 57
+PASS foo(o) is 58
+PASS foo(o) is 59
+PASS foo(o) is 60
+PASS foo(o) is 61
+PASS foo(o) is 62
+PASS foo(o) is 63
+PASS foo(o) is 64
+PASS foo(o) is 65
+PASS foo(o) is 66
+PASS foo(o) is 67
+PASS foo(o) is 68
+PASS foo(o) is 69
+PASS foo(o) is 70
+PASS foo(o) is 71
+PASS foo(o) is 72
+PASS foo(o) is 73
+PASS foo(o) is 74
+PASS foo(o) is 75
+PASS foo(o) is 76
+PASS foo(o) is 77
+PASS foo(o) is 78
+PASS foo(o) is 79
+PASS foo(o) is 80
+PASS foo(o) is 81
+PASS foo(o) is 82
+PASS foo(o) is 83
+PASS foo(o) is 84
+PASS foo(o) is 85
+PASS foo(o) is 86
+PASS foo(o) is 87
+PASS foo(o) is 88
+PASS foo(o) is 89
+PASS foo(o) is 90
+PASS foo(o) is 91
+PASS foo(o) is 92
+PASS foo(o) is 93
+PASS foo(o) is 94
+PASS foo(o) is 95
+PASS foo(o) is 96
+PASS foo(o) is 97
+PASS foo(o) is 98
+PASS foo(o) is 99
+PASS foo(o) is 100
+PASS foo(o) is 101
+PASS foo(o) is 102
+PASS foo(o) is 103
+PASS foo(o) is 104
+PASS foo(o) is 105
+PASS foo(o) is 106
+PASS foo(o) is 107
+PASS foo(o) is 108
+PASS foo(o) is 109
+PASS foo(o) is 110
+PASS foo(o) is 111
+PASS foo(o) is 112
+PASS foo(o) is 113
+PASS foo(o) is 114
+PASS foo(o) is 115
+PASS foo(o) is 116
+PASS foo(o) is 117
+PASS foo(o) is 118
+PASS foo(o) is 119
+PASS foo(o) is 120
+PASS foo(o) is 121
+PASS foo(o) is 122
+PASS foo(o) is 123
+PASS foo(o) is 124
+PASS foo(o) is 125
+PASS foo(o) is 126
+PASS foo(o) is 127
+PASS foo(o) is 128
+PASS foo(o) is 129
+PASS foo(o) is 130
+PASS foo(o) is 131
+PASS foo(o) is 132
+PASS foo(o) is 133
+PASS foo(o) is 134
+PASS foo(o) is 135
+PASS foo(o) is 136
+PASS foo(o) is 137
+PASS foo(o) is 138
+PASS foo(o) is 139
+PASS foo(o) is 140
+PASS foo(o) is 141
+PASS foo(o) is 142
+PASS foo(o) is 143
+PASS foo(o) is 144
+PASS foo(o) is 145
+PASS foo(o) is 146
+PASS foo(o) is 147
+PASS foo(o) is 148
+PASS foo(o) is 149
+PASS foo(o) is 150
+PASS foo(o) is 151
+PASS foo(o) is 152
+PASS foo(o) is 153
+PASS foo(o) is 154
+PASS foo(o) is 155
+PASS foo(o) is 156
+PASS foo(o) is 157
+PASS foo(o) is 158
+PASS foo(o) is 159
+PASS foo(o) is 160
+PASS foo(o) is 161
+PASS foo(o) is 162
+PASS foo(o) is 163
+PASS foo(o) is 164
+PASS foo(o) is 165
+PASS foo(o) is 166
+PASS foo(o) is 167
+PASS foo(o) is 168
+PASS foo(o) is 169
+PASS foo(o) is 170
+PASS foo(o) is 171
+PASS foo(o) is 172
+PASS foo(o) is 173
+PASS foo(o) is 174
+PASS foo(o) is 175
+PASS foo(o) is 176
+PASS foo(o) is 177
+PASS foo(o) is 178
+PASS foo(o) is 179
+PASS foo(o) is 180
+PASS foo(o) is 181
+PASS foo(o) is 182
+PASS foo(o) is 183
+PASS foo(o) is 184
+PASS foo(o) is 185
+PASS foo(o) is 186
+PASS foo(o) is 187
+PASS foo(o) is 188
+PASS foo(o) is 189
+PASS foo(o) is 190
+PASS foo(o) is 191
+PASS foo(o) is 192
+PASS foo(o) is 193
+PASS foo(o) is 194
+PASS foo(o) is 195
+PASS foo(o) is 196
+PASS foo(o) is 197
+PASS foo(o) is 198
+PASS foo(o) is 199
+PASS foo(o) is 200
+PASS foo(o) is 201
+PASS foo(o) is 202
+PASS foo(o) is 203
+PASS foo(o) is 204
+PASS foo(o) is 205
+PASS foo(o) is 206
+PASS foo(o) is 207
+PASS foo(o) is 208
+PASS foo(o) is 209
+PASS foo(o) is 210
+PASS foo(o) is 211
+PASS foo(o) is 212
+PASS foo(o) is 213
+PASS foo(o) is 214
+PASS foo(o) is 215
+PASS foo(o) is 216
+PASS foo(o) is 217
+PASS foo(o) is 218
+PASS foo(o) is 219
+PASS foo(o) is 220
+PASS foo(o) is 221
+PASS foo(o) is 222
+PASS foo(o) is 223
+PASS foo(o) is 224
+PASS foo(o) is 225
+PASS foo(o) is 226
+PASS foo(o) is 227
+PASS foo(o) is 228
+PASS foo(o) is 229
+PASS foo(o) is 230
+PASS foo(o) is 231
+PASS foo(o) is 232
+PASS foo(o) is 233
+PASS foo(o) is 234
+PASS foo(o) is 235
+PASS foo(o) is 236
+PASS foo(o) is 237
+PASS foo(o) is 238
+PASS foo(o) is 239
+PASS foo(o) is 240
+PASS foo(o) is 241
+PASS foo(o) is 242
+PASS foo(o) is 243
+PASS foo(o) is 244
+PASS foo(o) is 245
+PASS foo(o) is 246
+PASS foo(o) is 247
+PASS foo(o) is 248
+PASS foo(o) is 249
+PASS foo(o) is 250
+PASS foo(o) is 251
+PASS foo(o) is 252
+PASS foo(o) is 253
+PASS foo(o) is 254
+PASS foo(o) is 255
+PASS foo(o) is 256
+PASS foo(o) is 257
+PASS foo(o) is 258
+PASS foo(o) is 259
+PASS foo(o) is 260
+PASS foo(o) is 261
+PASS foo(o) is 262
+PASS foo(o) is 263
+PASS foo(o) is 264
+PASS foo(o) is 265
+PASS foo(o) is 266
+PASS foo(o) is 267
+PASS foo(o) is 268
+PASS foo(o) is 269
+PASS foo(o) is 270
+PASS foo(o) is 271
+PASS foo(o) is 272
+PASS foo(o) is 273
+PASS foo(o) is 274
+PASS foo(o) is 275
+PASS foo(o) is 276
+PASS foo(o) is 277
+PASS foo(o) is 278
+PASS foo(o) is 279
+PASS foo(o) is 280
+PASS foo(o) is 281
+PASS foo(o) is 282
+PASS foo(o) is 283
+PASS foo(o) is 284
+PASS foo(o) is 285
+PASS foo(o) is 286
+PASS foo(o) is 287
+PASS foo(o) is 288
+PASS foo(o) is 289
+PASS foo(o) is 290
+PASS foo(o) is 291
+PASS foo(o) is 292
+PASS foo(o) is 293
+PASS foo(o) is 294
+PASS foo(o) is 295
+PASS foo(o) is 296
+PASS foo(o) is 297
+PASS foo(o) is 298
+PASS foo(o) is 299
+PASS foo(o) is 300
+PASS foo(o) is 301
+PASS foo(o) is 302
+PASS foo(o) is 303
+PASS foo(o) is 304
+PASS foo(o) is 305
+PASS foo(o) is 306
+PASS foo(o) is 307
+PASS foo(o) is 308
+PASS foo(o) is 309
+PASS foo(o) is 310
+PASS foo(o) is 311
+PASS foo(o) is 312
+PASS foo(o) is 313
+PASS foo(o) is 314
+PASS foo(o) is 315
+PASS foo(o) is 316
+PASS foo(o) is 317
+PASS foo(o) is 318
+PASS foo(o) is 319
+PASS foo(o) is 320
+PASS foo(o) is 321
+PASS foo(o) is 322
+PASS foo(o) is 323
+PASS foo(o) is 324
+PASS foo(o) is 325
+PASS foo(o) is 326
+PASS foo(o) is 327
+PASS foo(o) is 328
+PASS foo(o) is 329
+PASS foo(o) is 330
+PASS foo(o) is 331
+PASS foo(o) is 332
+PASS foo(o) is 333
+PASS foo(o) is 334
+PASS foo(o) is 335
+PASS foo(o) is 336
+PASS foo(o) is 337
+PASS foo(o) is 338
+PASS foo(o) is 339
+PASS foo(o) is 340
+PASS foo(o) is 341
+PASS foo(o) is 342
+PASS foo(o) is 343
+PASS foo(o) is 344
+PASS foo(o) is 345
+PASS foo(o) is 346
+PASS foo(o) is 347
+PASS foo(o) is 348
+PASS foo(o) is 349
+PASS foo(o) is 350
+PASS foo(o) is 351
+PASS foo(o) is 352
+PASS foo(o) is 353
+PASS foo(o) is 354
+PASS foo(o) is 355
+PASS foo(o) is 356
+PASS foo(o) is 357
+PASS foo(o) is 358
+PASS foo(o) is 359
+PASS foo(o) is 360
+PASS foo(o) is 361
+PASS foo(o) is 362
+PASS foo(o) is 363
+PASS foo(o) is 364
+PASS foo(o) is 365
+PASS foo(o) is 366
+PASS foo(o) is 367
+PASS foo(o) is 368
+PASS foo(o) is 369
+PASS foo(o) is 370
+PASS foo(o) is 371
+PASS foo(o) is 372
+PASS foo(o) is 373
+PASS foo(o) is 374
+PASS foo(o) is 375
+PASS foo(o) is 376
+PASS foo(o) is 377
+PASS foo(o) is 378
+PASS foo(o) is 379
+PASS foo(o) is 380
+PASS foo(o) is 381
+PASS foo(o) is 382
+PASS foo(o) is 383
+PASS foo(o) is 384
+PASS foo(o) is 385
+PASS foo(o) is 386
+PASS foo(o) is 387
+PASS foo(o) is 388
+PASS foo(o) is 389
+PASS foo(o) is 390
+PASS foo(o) is 391
+PASS foo(o) is 392
+PASS foo(o) is 393
+PASS foo(o) is 394
+PASS foo(o) is 395
+PASS foo(o) is 396
+PASS foo(o) is 397
+PASS foo(o) is 398
+PASS foo(o) is 399
+PASS foo(o) is 400
+PASS foo(o) is 401
+PASS foo(o) is 402
+PASS foo(o) is 403
+PASS foo(o) is 404
+PASS foo(o) is 405
+PASS foo(o) is 406
+PASS foo(o) is 407
+PASS foo(o) is 408
+PASS foo(o) is 409
+PASS foo(o) is 410
+PASS foo(o) is 411
+PASS foo(o) is 412
+PASS foo(o) is 413
+PASS foo(o) is 414
+PASS foo(o) is 415
+PASS foo(o) is 416
+PASS foo(o) is 417
+PASS foo(o) is 418
+PASS foo(o) is 419
+PASS foo(o) is 420
+PASS foo(o) is 421
+PASS foo(o) is 422
+PASS foo(o) is 423
+PASS foo(o) is 424
+PASS foo(o) is 425
+PASS foo(o) is 426
+PASS foo(o) is 427
+PASS foo(o) is 428
+PASS foo(o) is 429
+PASS foo(o) is 430
+PASS foo(o) is 431
+PASS foo(o) is 432
+PASS foo(o) is 433
+PASS foo(o) is 434
+PASS foo(o) is 435
+PASS foo(o) is 436
+PASS foo(o) is 437
+PASS foo(o) is 438
+PASS foo(o) is 439
+PASS foo(o) is 440
+PASS foo(o) is 441
+PASS foo(o) is 442
+PASS foo(o) is 443
+PASS foo(o) is 444
+PASS foo(o) is 445
+PASS foo(o) is 446
+PASS foo(o) is 447
+PASS foo(o) is 448
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null.js b/deps/v8/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null.js
new file mode 100644 (file)
index 0000000..7226424
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens when CFG simplification leads to the elimination of a set local that had a type check, and then we branch on the variable not being null."
+);
+
+function foo(o) {
+    var x;
+    if (o.f)
+        x = o.g;
+    else
+        x = o.h;
+    if (x != null)
+        return x - 1;
+    else
+        return x;
+}
+
+for (var i = 0; i < 500; ++i) {
+    var o = {f:foo};
+    var expected;
+    if (i < 450) {
+        o.g = i;
+        expected = "" + (i - 1);
+    } else {
+        o.g = null;
+        expected = "null";
+    }
+    shouldBe("foo(o)", expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-typeof-expected.txt b/deps/v8/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-typeof-expected.txt
new file mode 100644 (file)
index 0000000..d5f9fa3
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens when CFG simplification leads to the elimination of a set local that had a type check, and then we do a typeof on the value, which can be constant folded if the type check stays.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result[0] is "number"
+PASS result[1] is -1
+PASS result[0] is "number"
+PASS result[1] is 0
+PASS result[0] is "number"
+PASS result[1] is 1
+PASS result[0] is "number"
+PASS result[1] is 2
+PASS result[0] is "number"
+PASS result[1] is 3
+PASS result[0] is "number"
+PASS result[1] is 4
+PASS result[0] is "number"
+PASS result[1] is 5
+PASS result[0] is "number"
+PASS result[1] is 6
+PASS result[0] is "number"
+PASS result[1] is 7
+PASS result[0] is "number"
+PASS result[1] is 8
+PASS result[0] is "number"
+PASS result[1] is 9
+PASS result[0] is "number"
+PASS result[1] is 10
+PASS result[0] is "number"
+PASS result[1] is 11
+PASS result[0] is "number"
+PASS result[1] is 12
+PASS result[0] is "number"
+PASS result[1] is 13
+PASS result[0] is "number"
+PASS result[1] is 14
+PASS result[0] is "number"
+PASS result[1] is 15
+PASS result[0] is "number"
+PASS result[1] is 16
+PASS result[0] is "number"
+PASS result[1] is 17
+PASS result[0] is "number"
+PASS result[1] is 18
+PASS result[0] is "number"
+PASS result[1] is 19
+PASS result[0] is "number"
+PASS result[1] is 20
+PASS result[0] is "number"
+PASS result[1] is 21
+PASS result[0] is "number"
+PASS result[1] is 22
+PASS result[0] is "number"
+PASS result[1] is 23
+PASS result[0] is "number"
+PASS result[1] is 24
+PASS result[0] is "number"
+PASS result[1] is 25
+PASS result[0] is "number"
+PASS result[1] is 26
+PASS result[0] is "number"
+PASS result[1] is 27
+PASS result[0] is "number"
+PASS result[1] is 28
+PASS result[0] is "number"
+PASS result[1] is 29
+PASS result[0] is "number"
+PASS result[1] is 30
+PASS result[0] is "number"
+PASS result[1] is 31
+PASS result[0] is "number"
+PASS result[1] is 32
+PASS result[0] is "number"
+PASS result[1] is 33
+PASS result[0] is "number"
+PASS result[1] is 34
+PASS result[0] is "number"
+PASS result[1] is 35
+PASS result[0] is "number"
+PASS result[1] is 36
+PASS result[0] is "number"
+PASS result[1] is 37
+PASS result[0] is "number"
+PASS result[1] is 38
+PASS result[0] is "number"
+PASS result[1] is 39
+PASS result[0] is "number"
+PASS result[1] is 40
+PASS result[0] is "number"
+PASS result[1] is 41
+PASS result[0] is "number"
+PASS result[1] is 42
+PASS result[0] is "number"
+PASS result[1] is 43
+PASS result[0] is "number"
+PASS result[1] is 44
+PASS result[0] is "number"
+PASS result[1] is 45
+PASS result[0] is "number"
+PASS result[1] is 46
+PASS result[0] is "number"
+PASS result[1] is 47
+PASS result[0] is "number"
+PASS result[1] is 48
+PASS result[0] is "number"
+PASS result[1] is 49
+PASS result[0] is "number"
+PASS result[1] is 50
+PASS result[0] is "number"
+PASS result[1] is 51
+PASS result[0] is "number"
+PASS result[1] is 52
+PASS result[0] is "number"
+PASS result[1] is 53
+PASS result[0] is "number"
+PASS result[1] is 54
+PASS result[0] is "number"
+PASS result[1] is 55
+PASS result[0] is "number"
+PASS result[1] is 56
+PASS result[0] is "number"
+PASS result[1] is 57
+PASS result[0] is "number"
+PASS result[1] is 58
+PASS result[0] is "number"
+PASS result[1] is 59
+PASS result[0] is "number"
+PASS result[1] is 60
+PASS result[0] is "number"
+PASS result[1] is 61
+PASS result[0] is "number"
+PASS result[1] is 62
+PASS result[0] is "number"
+PASS result[1] is 63
+PASS result[0] is "number"
+PASS result[1] is 64
+PASS result[0] is "number"
+PASS result[1] is 65
+PASS result[0] is "number"
+PASS result[1] is 66
+PASS result[0] is "number"
+PASS result[1] is 67
+PASS result[0] is "number"
+PASS result[1] is 68
+PASS result[0] is "number"
+PASS result[1] is 69
+PASS result[0] is "number"
+PASS result[1] is 70
+PASS result[0] is "number"
+PASS result[1] is 71
+PASS result[0] is "number"
+PASS result[1] is 72
+PASS result[0] is "number"
+PASS result[1] is 73
+PASS result[0] is "number"
+PASS result[1] is 74
+PASS result[0] is "number"
+PASS result[1] is 75
+PASS result[0] is "number"
+PASS result[1] is 76
+PASS result[0] is "number"
+PASS result[1] is 77
+PASS result[0] is "number"
+PASS result[1] is 78
+PASS result[0] is "number"
+PASS result[1] is 79
+PASS result[0] is "number"
+PASS result[1] is 80
+PASS result[0] is "number"
+PASS result[1] is 81
+PASS result[0] is "number"
+PASS result[1] is 82
+PASS result[0] is "number"
+PASS result[1] is 83
+PASS result[0] is "number"
+PASS result[1] is 84
+PASS result[0] is "number"
+PASS result[1] is 85
+PASS result[0] is "number"
+PASS result[1] is 86
+PASS result[0] is "number"
+PASS result[1] is 87
+PASS result[0] is "number"
+PASS result[1] is 88
+PASS result[0] is "number"
+PASS result[1] is 89
+PASS result[0] is "number"
+PASS result[1] is 90
+PASS result[0] is "number"
+PASS result[1] is 91
+PASS result[0] is "number"
+PASS result[1] is 92
+PASS result[0] is "number"
+PASS result[1] is 93
+PASS result[0] is "number"
+PASS result[1] is 94
+PASS result[0] is "number"
+PASS result[1] is 95
+PASS result[0] is "number"
+PASS result[1] is 96
+PASS result[0] is "number"
+PASS result[1] is 97
+PASS result[0] is "number"
+PASS result[1] is 98
+PASS result[0] is "number"
+PASS result[1] is 99
+PASS result[0] is "number"
+PASS result[1] is 100
+PASS result[0] is "number"
+PASS result[1] is 101
+PASS result[0] is "number"
+PASS result[1] is 102
+PASS result[0] is "number"
+PASS result[1] is 103
+PASS result[0] is "number"
+PASS result[1] is 104
+PASS result[0] is "number"
+PASS result[1] is 105
+PASS result[0] is "number"
+PASS result[1] is 106
+PASS result[0] is "number"
+PASS result[1] is 107
+PASS result[0] is "number"
+PASS result[1] is 108
+PASS result[0] is "number"
+PASS result[1] is 109
+PASS result[0] is "number"
+PASS result[1] is 110
+PASS result[0] is "number"
+PASS result[1] is 111
+PASS result[0] is "number"
+PASS result[1] is 112
+PASS result[0] is "number"
+PASS result[1] is 113
+PASS result[0] is "number"
+PASS result[1] is 114
+PASS result[0] is "number"
+PASS result[1] is 115
+PASS result[0] is "number"
+PASS result[1] is 116
+PASS result[0] is "number"
+PASS result[1] is 117
+PASS result[0] is "number"
+PASS result[1] is 118
+PASS result[0] is "number"
+PASS result[1] is 119
+PASS result[0] is "number"
+PASS result[1] is 120
+PASS result[0] is "number"
+PASS result[1] is 121
+PASS result[0] is "number"
+PASS result[1] is 122
+PASS result[0] is "number"
+PASS result[1] is 123
+PASS result[0] is "number"
+PASS result[1] is 124
+PASS result[0] is "number"
+PASS result[1] is 125
+PASS result[0] is "number"
+PASS result[1] is 126
+PASS result[0] is "number"
+PASS result[1] is 127
+PASS result[0] is "number"
+PASS result[1] is 128
+PASS result[0] is "number"
+PASS result[1] is 129
+PASS result[0] is "number"
+PASS result[1] is 130
+PASS result[0] is "number"
+PASS result[1] is 131
+PASS result[0] is "number"
+PASS result[1] is 132
+PASS result[0] is "number"
+PASS result[1] is 133
+PASS result[0] is "number"
+PASS result[1] is 134
+PASS result[0] is "number"
+PASS result[1] is 135
+PASS result[0] is "number"
+PASS result[1] is 136
+PASS result[0] is "number"
+PASS result[1] is 137
+PASS result[0] is "number"
+PASS result[1] is 138
+PASS result[0] is "number"
+PASS result[1] is 139
+PASS result[0] is "number"
+PASS result[1] is 140
+PASS result[0] is "number"
+PASS result[1] is 141
+PASS result[0] is "number"
+PASS result[1] is 142
+PASS result[0] is "number"
+PASS result[1] is 143
+PASS result[0] is "number"
+PASS result[1] is 144
+PASS result[0] is "number"
+PASS result[1] is 145
+PASS result[0] is "number"
+PASS result[1] is 146
+PASS result[0] is "number"
+PASS result[1] is 147
+PASS result[0] is "number"
+PASS result[1] is 148
+PASS result[0] is "number"
+PASS result[1] is 149
+PASS result[0] is "number"
+PASS result[1] is 150
+PASS result[0] is "number"
+PASS result[1] is 151
+PASS result[0] is "number"
+PASS result[1] is 152
+PASS result[0] is "number"
+PASS result[1] is 153
+PASS result[0] is "number"
+PASS result[1] is 154
+PASS result[0] is "number"
+PASS result[1] is 155
+PASS result[0] is "number"
+PASS result[1] is 156
+PASS result[0] is "number"
+PASS result[1] is 157
+PASS result[0] is "number"
+PASS result[1] is 158
+PASS result[0] is "number"
+PASS result[1] is 159
+PASS result[0] is "number"
+PASS result[1] is 160
+PASS result[0] is "number"
+PASS result[1] is 161
+PASS result[0] is "number"
+PASS result[1] is 162
+PASS result[0] is "number"
+PASS result[1] is 163
+PASS result[0] is "number"
+PASS result[1] is 164
+PASS result[0] is "number"
+PASS result[1] is 165
+PASS result[0] is "number"
+PASS result[1] is 166
+PASS result[0] is "number"
+PASS result[1] is 167
+PASS result[0] is "number"
+PASS result[1] is 168
+PASS result[0] is "number"
+PASS result[1] is 169
+PASS result[0] is "number"
+PASS result[1] is 170
+PASS result[0] is "number"
+PASS result[1] is 171
+PASS result[0] is "number"
+PASS result[1] is 172
+PASS result[0] is "number"
+PASS result[1] is 173
+PASS result[0] is "number"
+PASS result[1] is 174
+PASS result[0] is "number"
+PASS result[1] is 175
+PASS result[0] is "number"
+PASS result[1] is 176
+PASS result[0] is "number"
+PASS result[1] is 177
+PASS result[0] is "number"
+PASS result[1] is 178
+PASS result[0] is "number"
+PASS result[1] is 179
+PASS result[0] is "number"
+PASS result[1] is 180
+PASS result[0] is "number"
+PASS result[1] is 181
+PASS result[0] is "number"
+PASS result[1] is 182
+PASS result[0] is "number"
+PASS result[1] is 183
+PASS result[0] is "number"
+PASS result[1] is 184
+PASS result[0] is "number"
+PASS result[1] is 185
+PASS result[0] is "number"
+PASS result[1] is 186
+PASS result[0] is "number"
+PASS result[1] is 187
+PASS result[0] is "number"
+PASS result[1] is 188
+PASS result[0] is "number"
+PASS result[1] is 189
+PASS result[0] is "number"
+PASS result[1] is 190
+PASS result[0] is "number"
+PASS result[1] is 191
+PASS result[0] is "number"
+PASS result[1] is 192
+PASS result[0] is "number"
+PASS result[1] is 193
+PASS result[0] is "number"
+PASS result[1] is 194
+PASS result[0] is "number"
+PASS result[1] is 195
+PASS result[0] is "number"
+PASS result[1] is 196
+PASS result[0] is "number"
+PASS result[1] is 197
+PASS result[0] is "number"
+PASS result[1] is 198
+PASS result[0] is "number"
+PASS result[1] is 199
+PASS result[0] is "number"
+PASS result[1] is 200
+PASS result[0] is "number"
+PASS result[1] is 201
+PASS result[0] is "number"
+PASS result[1] is 202
+PASS result[0] is "number"
+PASS result[1] is 203
+PASS result[0] is "number"
+PASS result[1] is 204
+PASS result[0] is "number"
+PASS result[1] is 205
+PASS result[0] is "number"
+PASS result[1] is 206
+PASS result[0] is "number"
+PASS result[1] is 207
+PASS result[0] is "number"
+PASS result[1] is 208
+PASS result[0] is "number"
+PASS result[1] is 209
+PASS result[0] is "number"
+PASS result[1] is 210
+PASS result[0] is "number"
+PASS result[1] is 211
+PASS result[0] is "number"
+PASS result[1] is 212
+PASS result[0] is "number"
+PASS result[1] is 213
+PASS result[0] is "number"
+PASS result[1] is 214
+PASS result[0] is "number"
+PASS result[1] is 215
+PASS result[0] is "number"
+PASS result[1] is 216
+PASS result[0] is "number"
+PASS result[1] is 217
+PASS result[0] is "number"
+PASS result[1] is 218
+PASS result[0] is "number"
+PASS result[1] is 219
+PASS result[0] is "number"
+PASS result[1] is 220
+PASS result[0] is "number"
+PASS result[1] is 221
+PASS result[0] is "number"
+PASS result[1] is 222
+PASS result[0] is "number"
+PASS result[1] is 223
+PASS result[0] is "number"
+PASS result[1] is 224
+PASS result[0] is "number"
+PASS result[1] is 225
+PASS result[0] is "number"
+PASS result[1] is 226
+PASS result[0] is "number"
+PASS result[1] is 227
+PASS result[0] is "number"
+PASS result[1] is 228
+PASS result[0] is "number"
+PASS result[1] is 229
+PASS result[0] is "number"
+PASS result[1] is 230
+PASS result[0] is "number"
+PASS result[1] is 231
+PASS result[0] is "number"
+PASS result[1] is 232
+PASS result[0] is "number"
+PASS result[1] is 233
+PASS result[0] is "number"
+PASS result[1] is 234
+PASS result[0] is "number"
+PASS result[1] is 235
+PASS result[0] is "number"
+PASS result[1] is 236
+PASS result[0] is "number"
+PASS result[1] is 237
+PASS result[0] is "number"
+PASS result[1] is 238
+PASS result[0] is "number"
+PASS result[1] is 239
+PASS result[0] is "number"
+PASS result[1] is 240
+PASS result[0] is "number"
+PASS result[1] is 241
+PASS result[0] is "number"
+PASS result[1] is 242
+PASS result[0] is "number"
+PASS result[1] is 243
+PASS result[0] is "number"
+PASS result[1] is 244
+PASS result[0] is "number"
+PASS result[1] is 245
+PASS result[0] is "number"
+PASS result[1] is 246
+PASS result[0] is "number"
+PASS result[1] is 247
+PASS result[0] is "number"
+PASS result[1] is 248
+PASS result[0] is "number"
+PASS result[1] is 249
+PASS result[0] is "number"
+PASS result[1] is 250
+PASS result[0] is "number"
+PASS result[1] is 251
+PASS result[0] is "number"
+PASS result[1] is 252
+PASS result[0] is "number"
+PASS result[1] is 253
+PASS result[0] is "number"
+PASS result[1] is 254
+PASS result[0] is "number"
+PASS result[1] is 255
+PASS result[0] is "number"
+PASS result[1] is 256
+PASS result[0] is "number"
+PASS result[1] is 257
+PASS result[0] is "number"
+PASS result[1] is 258
+PASS result[0] is "number"
+PASS result[1] is 259
+PASS result[0] is "number"
+PASS result[1] is 260
+PASS result[0] is "number"
+PASS result[1] is 261
+PASS result[0] is "number"
+PASS result[1] is 262
+PASS result[0] is "number"
+PASS result[1] is 263
+PASS result[0] is "number"
+PASS result[1] is 264
+PASS result[0] is "number"
+PASS result[1] is 265
+PASS result[0] is "number"
+PASS result[1] is 266
+PASS result[0] is "number"
+PASS result[1] is 267
+PASS result[0] is "number"
+PASS result[1] is 268
+PASS result[0] is "number"
+PASS result[1] is 269
+PASS result[0] is "number"
+PASS result[1] is 270
+PASS result[0] is "number"
+PASS result[1] is 271
+PASS result[0] is "number"
+PASS result[1] is 272
+PASS result[0] is "number"
+PASS result[1] is 273
+PASS result[0] is "number"
+PASS result[1] is 274
+PASS result[0] is "number"
+PASS result[1] is 275
+PASS result[0] is "number"
+PASS result[1] is 276
+PASS result[0] is "number"
+PASS result[1] is 277
+PASS result[0] is "number"
+PASS result[1] is 278
+PASS result[0] is "number"
+PASS result[1] is 279
+PASS result[0] is "number"
+PASS result[1] is 280
+PASS result[0] is "number"
+PASS result[1] is 281
+PASS result[0] is "number"
+PASS result[1] is 282
+PASS result[0] is "number"
+PASS result[1] is 283
+PASS result[0] is "number"
+PASS result[1] is 284
+PASS result[0] is "number"
+PASS result[1] is 285
+PASS result[0] is "number"
+PASS result[1] is 286
+PASS result[0] is "number"
+PASS result[1] is 287
+PASS result[0] is "number"
+PASS result[1] is 288
+PASS result[0] is "number"
+PASS result[1] is 289
+PASS result[0] is "number"
+PASS result[1] is 290
+PASS result[0] is "number"
+PASS result[1] is 291
+PASS result[0] is "number"
+PASS result[1] is 292
+PASS result[0] is "number"
+PASS result[1] is 293
+PASS result[0] is "number"
+PASS result[1] is 294
+PASS result[0] is "number"
+PASS result[1] is 295
+PASS result[0] is "number"
+PASS result[1] is 296
+PASS result[0] is "number"
+PASS result[1] is 297
+PASS result[0] is "number"
+PASS result[1] is 298
+PASS result[0] is "number"
+PASS result[1] is 299
+PASS result[0] is "number"
+PASS result[1] is 300
+PASS result[0] is "number"
+PASS result[1] is 301
+PASS result[0] is "number"
+PASS result[1] is 302
+PASS result[0] is "number"
+PASS result[1] is 303
+PASS result[0] is "number"
+PASS result[1] is 304
+PASS result[0] is "number"
+PASS result[1] is 305
+PASS result[0] is "number"
+PASS result[1] is 306
+PASS result[0] is "number"
+PASS result[1] is 307
+PASS result[0] is "number"
+PASS result[1] is 308
+PASS result[0] is "number"
+PASS result[1] is 309
+PASS result[0] is "number"
+PASS result[1] is 310
+PASS result[0] is "number"
+PASS result[1] is 311
+PASS result[0] is "number"
+PASS result[1] is 312
+PASS result[0] is "number"
+PASS result[1] is 313
+PASS result[0] is "number"
+PASS result[1] is 314
+PASS result[0] is "number"
+PASS result[1] is 315
+PASS result[0] is "number"
+PASS result[1] is 316
+PASS result[0] is "number"
+PASS result[1] is 317
+PASS result[0] is "number"
+PASS result[1] is 318
+PASS result[0] is "number"
+PASS result[1] is 319
+PASS result[0] is "number"
+PASS result[1] is 320
+PASS result[0] is "number"
+PASS result[1] is 321
+PASS result[0] is "number"
+PASS result[1] is 322
+PASS result[0] is "number"
+PASS result[1] is 323
+PASS result[0] is "number"
+PASS result[1] is 324
+PASS result[0] is "number"
+PASS result[1] is 325
+PASS result[0] is "number"
+PASS result[1] is 326
+PASS result[0] is "number"
+PASS result[1] is 327
+PASS result[0] is "number"
+PASS result[1] is 328
+PASS result[0] is "number"
+PASS result[1] is 329
+PASS result[0] is "number"
+PASS result[1] is 330
+PASS result[0] is "number"
+PASS result[1] is 331
+PASS result[0] is "number"
+PASS result[1] is 332
+PASS result[0] is "number"
+PASS result[1] is 333
+PASS result[0] is "number"
+PASS result[1] is 334
+PASS result[0] is "number"
+PASS result[1] is 335
+PASS result[0] is "number"
+PASS result[1] is 336
+PASS result[0] is "number"
+PASS result[1] is 337
+PASS result[0] is "number"
+PASS result[1] is 338
+PASS result[0] is "number"
+PASS result[1] is 339
+PASS result[0] is "number"
+PASS result[1] is 340
+PASS result[0] is "number"
+PASS result[1] is 341
+PASS result[0] is "number"
+PASS result[1] is 342
+PASS result[0] is "number"
+PASS result[1] is 343
+PASS result[0] is "number"
+PASS result[1] is 344
+PASS result[0] is "number"
+PASS result[1] is 345
+PASS result[0] is "number"
+PASS result[1] is 346
+PASS result[0] is "number"
+PASS result[1] is 347
+PASS result[0] is "number"
+PASS result[1] is 348
+PASS result[0] is "number"
+PASS result[1] is 349
+PASS result[0] is "number"
+PASS result[1] is 350
+PASS result[0] is "number"
+PASS result[1] is 351
+PASS result[0] is "number"
+PASS result[1] is 352
+PASS result[0] is "number"
+PASS result[1] is 353
+PASS result[0] is "number"
+PASS result[1] is 354
+PASS result[0] is "number"
+PASS result[1] is 355
+PASS result[0] is "number"
+PASS result[1] is 356
+PASS result[0] is "number"
+PASS result[1] is 357
+PASS result[0] is "number"
+PASS result[1] is 358
+PASS result[0] is "number"
+PASS result[1] is 359
+PASS result[0] is "number"
+PASS result[1] is 360
+PASS result[0] is "number"
+PASS result[1] is 361
+PASS result[0] is "number"
+PASS result[1] is 362
+PASS result[0] is "number"
+PASS result[1] is 363
+PASS result[0] is "number"
+PASS result[1] is 364
+PASS result[0] is "number"
+PASS result[1] is 365
+PASS result[0] is "number"
+PASS result[1] is 366
+PASS result[0] is "number"
+PASS result[1] is 367
+PASS result[0] is "number"
+PASS result[1] is 368
+PASS result[0] is "number"
+PASS result[1] is 369
+PASS result[0] is "number"
+PASS result[1] is 370
+PASS result[0] is "number"
+PASS result[1] is 371
+PASS result[0] is "number"
+PASS result[1] is 372
+PASS result[0] is "number"
+PASS result[1] is 373
+PASS result[0] is "number"
+PASS result[1] is 374
+PASS result[0] is "number"
+PASS result[1] is 375
+PASS result[0] is "number"
+PASS result[1] is 376
+PASS result[0] is "number"
+PASS result[1] is 377
+PASS result[0] is "number"
+PASS result[1] is 378
+PASS result[0] is "number"
+PASS result[1] is 379
+PASS result[0] is "number"
+PASS result[1] is 380
+PASS result[0] is "number"
+PASS result[1] is 381
+PASS result[0] is "number"
+PASS result[1] is 382
+PASS result[0] is "number"
+PASS result[1] is 383
+PASS result[0] is "number"
+PASS result[1] is 384
+PASS result[0] is "number"
+PASS result[1] is 385
+PASS result[0] is "number"
+PASS result[1] is 386
+PASS result[0] is "number"
+PASS result[1] is 387
+PASS result[0] is "number"
+PASS result[1] is 388
+PASS result[0] is "number"
+PASS result[1] is 389
+PASS result[0] is "number"
+PASS result[1] is 390
+PASS result[0] is "number"
+PASS result[1] is 391
+PASS result[0] is "number"
+PASS result[1] is 392
+PASS result[0] is "number"
+PASS result[1] is 393
+PASS result[0] is "number"
+PASS result[1] is 394
+PASS result[0] is "number"
+PASS result[1] is 395
+PASS result[0] is "number"
+PASS result[1] is 396
+PASS result[0] is "number"
+PASS result[1] is 397
+PASS result[0] is "number"
+PASS result[1] is 398
+PASS result[0] is "number"
+PASS result[1] is 399
+PASS result[0] is "number"
+PASS result[1] is 400
+PASS result[0] is "number"
+PASS result[1] is 401
+PASS result[0] is "number"
+PASS result[1] is 402
+PASS result[0] is "number"
+PASS result[1] is 403
+PASS result[0] is "number"
+PASS result[1] is 404
+PASS result[0] is "number"
+PASS result[1] is 405
+PASS result[0] is "number"
+PASS result[1] is 406
+PASS result[0] is "number"
+PASS result[1] is 407
+PASS result[0] is "number"
+PASS result[1] is 408
+PASS result[0] is "number"
+PASS result[1] is 409
+PASS result[0] is "number"
+PASS result[1] is 410
+PASS result[0] is "number"
+PASS result[1] is 411
+PASS result[0] is "number"
+PASS result[1] is 412
+PASS result[0] is "number"
+PASS result[1] is 413
+PASS result[0] is "number"
+PASS result[1] is 414
+PASS result[0] is "number"
+PASS result[1] is 415
+PASS result[0] is "number"
+PASS result[1] is 416
+PASS result[0] is "number"
+PASS result[1] is 417
+PASS result[0] is "number"
+PASS result[1] is 418
+PASS result[0] is "number"
+PASS result[1] is 419
+PASS result[0] is "number"
+PASS result[1] is 420
+PASS result[0] is "number"
+PASS result[1] is 421
+PASS result[0] is "number"
+PASS result[1] is 422
+PASS result[0] is "number"
+PASS result[1] is 423
+PASS result[0] is "number"
+PASS result[1] is 424
+PASS result[0] is "number"
+PASS result[1] is 425
+PASS result[0] is "number"
+PASS result[1] is 426
+PASS result[0] is "number"
+PASS result[1] is 427
+PASS result[0] is "number"
+PASS result[1] is 428
+PASS result[0] is "number"
+PASS result[1] is 429
+PASS result[0] is "number"
+PASS result[1] is 430
+PASS result[0] is "number"
+PASS result[1] is 431
+PASS result[0] is "number"
+PASS result[1] is 432
+PASS result[0] is "number"
+PASS result[1] is 433
+PASS result[0] is "number"
+PASS result[1] is 434
+PASS result[0] is "number"
+PASS result[1] is 435
+PASS result[0] is "number"
+PASS result[1] is 436
+PASS result[0] is "number"
+PASS result[1] is 437
+PASS result[0] is "number"
+PASS result[1] is 438
+PASS result[0] is "number"
+PASS result[1] is 439
+PASS result[0] is "number"
+PASS result[1] is 440
+PASS result[0] is "number"
+PASS result[1] is 441
+PASS result[0] is "number"
+PASS result[1] is 442
+PASS result[0] is "number"
+PASS result[1] is 443
+PASS result[0] is "number"
+PASS result[1] is 444
+PASS result[0] is "number"
+PASS result[1] is 445
+PASS result[0] is "number"
+PASS result[1] is 446
+PASS result[0] is "number"
+PASS result[1] is 447
+PASS result[0] is "number"
+PASS result[1] is 448
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-typeof.js b/deps/v8/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-typeof.js
new file mode 100644 (file)
index 0000000..bb4fee9
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens when CFG simplification leads to the elimination of a set local that had a type check, and then we do a typeof on the value, which can be constant folded if the type check stays."
+);
+
+function foo(o) {
+    var x;
+    if (o.f)
+        x = o.g;
+    else
+        x = o.h;
+    return [typeof x, x - 1];
+}
+
+for (var i = 0; i < 500; ++i) {
+    var o = {f:foo};
+    var expectedFirst;
+    var expectedSecond;
+    if (i < 450) {
+        o.g = i;
+        expectedFirst = "\"number\"";
+        expectedSecond = "" + (i - 1);
+    } else {
+        o.g = "42";
+        expectedFirst = "\"string\"";
+        expectedSecond = "41";
+    }
+    var result = foo(o);
+    shouldBe("result[0]", expectedFirst);
+    shouldBe("result[1]", expectedSecond);
+}
+
diff --git a/deps/v8/test/webkit/dfg-cfg-simplify-phantom-get-local-on-same-block-set-local-expected.txt b/deps/v8/test/webkit/dfg-cfg-simplify-phantom-get-local-on-same-block-set-local-expected.txt
new file mode 100644 (file)
index 0000000..4c64e0d
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that attempts by the DFG simplification to short-circuit a Phantom to a GetLocal on a variable that is SetLocal'd in the same block, and where the predecessor block(s) make no mention of that variable, do not result in crashes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-cfg-simplify-phantom-get-local-on-same-block-set-local.js b/deps/v8/test/webkit/dfg-cfg-simplify-phantom-get-local-on-same-block-set-local.js
new file mode 100644 (file)
index 0000000..65be965
--- /dev/null
@@ -0,0 +1,63 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that attempts by the DFG simplification to short-circuit a Phantom to a GetLocal on a variable that is SetLocal'd in the same block, and where the predecessor block(s) make no mention of that variable, do not result in crashes."
+);
+
+function baz() {
+    // Do something that prevents inlining.
+    return function() { }
+}
+
+function stuff(z) { }
+
+function foo(x, y) {
+    var a = arguments; // Force arguments to be captured, so that x is captured.
+    baz();
+    var z = x;
+    stuff(z); // Force a Flush, and then a Phantom on the GetLocal of x.
+    return 42;
+}
+
+var o = {
+    g: function(x) { }
+};
+
+function thingy(o) {
+    var p = {};
+    var result;
+    // Trick to delay control flow graph simplification until after the flush of x above gets turned into a phantom.
+    if (o.g)
+        p.f = true;
+    if (p.f) {
+        // Basic block that stores to x in foo(), which is a captured variable, with
+        // the predecessor block making no mention of x.
+        result = foo("hello", 2);
+    }
+    return result;
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("thingy(o)", "42");
+
diff --git a/deps/v8/test/webkit/dfg-cfg-simplify-redundant-dead-get-local-expected.txt b/deps/v8/test/webkit/dfg-cfg-simplify-redundant-dead-get-local-expected.txt
new file mode 100644 (file)
index 0000000..aad8d82
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests if the CFG simplifier gracefully handles the case where Block #1 and #2 are merged, #1 has a dead GetLocal, and #2 has a live GetLocal on the same local.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-cfg-simplify-redundant-dead-get-local.js b/deps/v8/test/webkit/dfg-cfg-simplify-redundant-dead-get-local.js
new file mode 100644 (file)
index 0000000..085af05
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests if the CFG simplifier gracefully handles the case where Block #1 and #2 are merged, #1 has a dead GetLocal, and #2 has a live GetLocal on the same local."
+);
+
+var array = [];
+
+var getDist = function () {
+    // a conditional absolutely MUST be here for the whole thing to break.
+    // the return value is irrelevant
+
+    if (false) return "I'm irrelevant!";
+
+    return Math.sqrt(5);
+}
+
+
+var calcError = function(){
+    var dist = 0; // initialisation is necessary for the bug to occur
+
+    true && (dist = getDist());
+
+    array.push(dist);
+}
+
+
+for(var a=0; a<1000; a++){ // the loop needs to be outside calcError, otherwise no bug...
+    calcError();
+}
+
+for (var i = 0; i < array.length; ++i)
+    shouldBe("array[i]", "2.23606797749979");
diff --git a/deps/v8/test/webkit/dfg-check-structure-elimination-for-non-cell-expected.txt b/deps/v8/test/webkit/dfg-check-structure-elimination-for-non-cell-expected.txt
new file mode 100644 (file)
index 0000000..63b6ba2
--- /dev/null
@@ -0,0 +1,233 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we do the right things when we prove that we can eliminate a structure check, but haven't proved that the value is definitely an object - i.e. we've proved that it's either an object with a specific structure, or it's not an object at all.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+Caught exception: TypeError: Cannot call method 'g' of null
+PASS baz(i) is "ERROR"
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-check-structure-elimination-for-non-cell.js b/deps/v8/test/webkit/dfg-check-structure-elimination-for-non-cell.js
new file mode 100644 (file)
index 0000000..264473c
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we do the right things when we prove that we can eliminate a structure check, but haven't proved that the value is definitely an object - i.e. we've proved that it's either an object with a specific structure, or it's not an object at all."
+);
+
+function foo(o, p) {
+    var x = o.f;
+    if (p)
+        o = null;
+    return x + o.g();
+}
+
+function bar() {
+    return 24;
+}
+
+function baz(i) {
+    try {
+        return foo({f:42, g:bar}, i == 190);
+    } catch (e) {
+        debug("Caught exception: " + e);
+        return "ERROR";
+    }
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("baz(i)", i == 190 ? "\"ERROR\"" : "66");
diff --git a/deps/v8/test/webkit/dfg-check-two-structures-expected.txt b/deps/v8/test/webkit/dfg-check-two-structures-expected.txt
new file mode 100644 (file)
index 0000000..03996e5
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that a polymorphic structure check is actually executed.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-check-two-structures.js b/deps/v8/test/webkit/dfg-check-two-structures.js
new file mode 100644 (file)
index 0000000..b5881ff
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that a polymorphic structure check is actually executed."
+);
+
+function foo(o, p) {
+    if (o == p)
+        return o.f;
+    else
+        return 75;
+}
+
+var o1 = {f:42, g:43};
+var o2 = {f:44};
+var o3 = {e:45, f:46};
+
+for (var i = 0; i < 200; ++i) {
+    var o;
+    var expected;
+    if (i < 150) {
+        if (i & 1) {
+            o = o1;
+            expected = 42;
+        } else {
+            o = o2;
+            expected = 44;
+        }
+    } else {
+        o = o3;
+        expected = 46;
+    }
+    shouldBe("foo(o, o)", "" + expected);
+}
diff --git a/deps/v8/test/webkit/dfg-compare-final-object-to-final-object-or-other-when-both-proven-final-object-expected.txt b/deps/v8/test/webkit/dfg-compare-final-object-to-final-object-or-other-when-both-proven-final-object-expected.txt
new file mode 100644 (file)
index 0000000..71c2f6b
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the CompareEq optimization for the case where one side is predicted final object and the other side is predicted either final object or other (i.e. null or undefined) doesn't assert when both sides are also proven final object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-compare-final-object-to-final-object-or-other-when-both-proven-final-object.js b/deps/v8/test/webkit/dfg-compare-final-object-to-final-object-or-other-when-both-proven-final-object.js
new file mode 100644 (file)
index 0000000..8b986a1
--- /dev/null
@@ -0,0 +1,39 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the CompareEq optimization for the case where one side is predicted final object and the other side is predicted either final object or other (i.e. null or undefined) doesn't assert when both sides are also proven final object."
+);
+
+function foo(a, b) {
+    return [a.f, b.f, a == b];
+}
+
+for (var i = 0; i < 100; ++i) {
+    if (i%2) {
+        var o = {f:42};
+        shouldBe("foo(o, o)", "[42, 42, true]");
+    } else
+        shouldThrow("foo({f:42}, null)");
+}
+
diff --git a/deps/v8/test/webkit/dfg-compare-final-object-to-final-object-or-other-when-proven-final-object-expected.txt b/deps/v8/test/webkit/dfg-compare-final-object-to-final-object-or-other-when-proven-final-object-expected.txt
new file mode 100644 (file)
index 0000000..c288823
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the CompareEq optimization for the case where one side is predicted final object and the other side is predicted either final object or other (i.e. null or undefined) doesn't assert when the other side is also proven final object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-compare-final-object-to-final-object-or-other-when-proven-final-object.js b/deps/v8/test/webkit/dfg-compare-final-object-to-final-object-or-other-when-proven-final-object.js
new file mode 100644 (file)
index 0000000..f49eed9
--- /dev/null
@@ -0,0 +1,39 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the CompareEq optimization for the case where one side is predicted final object and the other side is predicted either final object or other (i.e. null or undefined) doesn't assert when the other side is also proven final object."
+);
+
+function foo(a, b) {
+    return [b.f, a == b];
+}
+
+for (var i = 0; i < 100; ++i) {
+    if (i%2) {
+        var o = {f:42};
+        shouldBe("foo(o, o)", "[42, true]");
+    } else
+        shouldThrow("foo({f:42}, null)");
+}
+
diff --git a/deps/v8/test/webkit/dfg-constant-fold-first-local-read-after-block-merge-expected.txt b/deps/v8/test/webkit/dfg-constant-fold-first-local-read-after-block-merge-expected.txt
new file mode 100644 (file)
index 0000000..0607a6c
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG doesn't crash if we constant fold the first read of a local variable in a block that is the result of merging two blocks, where the first doesn't touch the local and the second reads it.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-constant-fold-first-local-read-after-block-merge.js b/deps/v8/test/webkit/dfg-constant-fold-first-local-read-after-block-merge.js
new file mode 100644 (file)
index 0000000..3969242
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG doesn't crash if we constant fold the first read of a local variable in a block that is the result of merging two blocks, where the first doesn't touch the local and the second reads it."
+);
+
+function foo(x, y) {
+    var o = {};
+    if (y == 5) {
+        o.f = 42;
+    }
+    var z = o.f;
+    if (x == 5) {
+        if (y == 5) {
+            return z;
+        }
+    }
+}
+
+function bar(x) {
+    return foo(x, 5);
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("bar(5)", "42");
+
diff --git a/deps/v8/test/webkit/dfg-constant-fold-logical-not-branch-expected.txt b/deps/v8/test/webkit/dfg-constant-fold-logical-not-branch-expected.txt
new file mode 100644 (file)
index 0000000..d4a84f2
--- /dev/null
@@ -0,0 +1,2032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens if we fail to constant fold a LogicalNot that leads into a branch, when the CFA proves that the LogicalNot has a constant value.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-constant-fold-logical-not-branch.js b/deps/v8/test/webkit/dfg-constant-fold-logical-not-branch.js
new file mode 100644 (file)
index 0000000..6a91b14
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens if we fail to constant fold a LogicalNot that leads into a branch, when the CFA proves that the LogicalNot has a constant value."
+);
+
+function foo1(o) {
+    if (!!o.thingy)
+        return o.thingy(42);
+    else
+        return o.otherThingy(57);
+}
+
+function foo2(o) {
+    if (!o.thingy)
+        return o.otherThingy(42);
+    else
+        return o.thingy(57);
+}
+
+function Stuff() {
+}
+
+Stuff.prototype = {
+    thingy: function(x) { return x + 1; },
+    otherThingy: function(x) { return x - 1; }
+};
+
+for (var i = 0; i < 1000; ++i) {
+    shouldBe("foo1(new Stuff())", "43");
+    shouldBe("foo2(new Stuff())", "58");
+}
+
+
diff --git a/deps/v8/test/webkit/dfg-constant-fold-misprediction-expected.txt b/deps/v8/test/webkit/dfg-constant-fold-misprediction-expected.txt
new file mode 100644 (file)
index 0000000..8d59b23
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that a constant folding on a node that has obviously mispredicted type doesn't send the compiler into an infinite loop.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(0.5) is 1000.50025
+PASS foo(0.5) is 1000.50025
+PASS foo(0.5) is 1000.50025
+PASS foo(0.5) is 1000.50025
+PASS foo(0.5) is 1000.50025
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-constant-fold-misprediction.js b/deps/v8/test/webkit/dfg-constant-fold-misprediction.js
new file mode 100644 (file)
index 0000000..cd73f70
--- /dev/null
@@ -0,0 +1,60 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that a constant folding on a node that has obviously mispredicted type doesn't send the compiler into an infinite loop."
+);
+
+// A function with an argument correctly predicted double.
+function foo(x) {
+    // Two variables holding constants such that the bytecode generation constant folder
+    // will not constant fold the division below, but the DFG constant folder will.
+    var a = 1;
+    var b = 4000;
+    // A division that is going to be predicted integer on the first compilation. The
+    // compilation will be triggered from the loop below so the slow case counter of the
+    // division will be 1, which is too low for the division to be predicted double.
+    // If we constant fold this division, we'll have a constant node that is predicted
+    // integer but that contains a double. The subsequent addition to x, which is
+    // predicted double, will lead the Fixup phase to inject an Int32ToDouble node on
+    // the constant-that-was-a-division; subsequent fases in the fixpoint will constant
+    // fold that Int32ToDouble. And hence we will have an infinite loop. The correct fix
+    // is to disable constant folding of mispredicted nodes; that allows the normal
+    // process of correcting predictions (OSR exit profiling, exiting to profiled code,
+    // and recompilation with exponential backoff) to take effect so that the next
+    // compilation does not make this same mistake.
+    var c = (a / b) + x;
+    // A pointless loop to force the first compilation to occur before the division got
+    // hot. If this loop was not here then the division would be known to produce doubles
+    // on the first compilation.
+    var d = 0;
+    for (var i = 0; i < 1000; ++i)
+        d++;
+    return c + d;
+}
+
+// Call foo() enough times to make totally sure that we optimize.
+for (var i = 0; i < 5; ++i)
+    shouldBe("foo(0.5)", "1000.50025");
+
+
diff --git a/deps/v8/test/webkit/dfg-constant-fold-uncaptured-variable-that-is-later-captured-expected.txt b/deps/v8/test/webkit/dfg-constant-fold-uncaptured-variable-that-is-later-captured-expected.txt
new file mode 100644 (file)
index 0000000..82c3610
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that constant folding an access to an uncaptured variable that is captured later in the same basic block doesn't lead to assertion failures.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-constant-fold-uncaptured-variable-that-is-later-captured.js b/deps/v8/test/webkit/dfg-constant-fold-uncaptured-variable-that-is-later-captured.js
new file mode 100644 (file)
index 0000000..392f5fc
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that constant folding an access to an uncaptured variable that is captured later in the same basic block doesn't lead to assertion failures."
+);
+
+var thingy = 456;
+
+function bar() {
+    return thingy;
+}
+
+function baz(a) {
+    if (a) // Here we have an access to r2. The bug was concerned with our assertions thinking that this access was invalid.
+        return arguments; // Force r2 (see below) to get captured.
+}
+
+function foo(p, a) {
+    // The temporary variable corresponding to the 'bar' callee coming out of the ternary expression will be allocated by
+    // the bytecompiler to some virtual register, say r2. This expression is engineered so that (1) the virtual register
+    // chosen for the callee here is the same as the one that will be chosen for the first non-this argument below,
+    // (2) that the callee ends up being constant but requires CFA to prove it, and (3) that we actually load that constant
+    // using GetLocal (which happens because of the CheckFunction to check the callee).
+    var x = (a + 1) + (p ? bar : bar)();
+    // The temporary variable corresponding to the first non-this argument to baz will be allocated to the same virtual
+    // register (i.e. r2).
+    return baz(x);
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo(true, 5)[0]", "462");
diff --git a/deps/v8/test/webkit/dfg-convert-this-dom-window-expected.txt b/deps/v8/test/webkit/dfg-convert-this-dom-window-expected.txt
new file mode 100644 (file)
index 0000000..3816537
--- /dev/null
@@ -0,0 +1,1232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that we can correctly call Function.prototype.call in the DFG, but more precisely, that we give the correct this object in case it is undefined
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-convert-this-dom-window.js b/deps/v8/test/webkit/dfg-convert-this-dom-window.js
new file mode 100644 (file)
index 0000000..fa6d74c
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that we can correctly call Function.prototype.call in the DFG, but more precisely, that we give the correct this object in case it is undefined"
+);
+
+var myObject = { call: function() { return [myObject, "myObject.call"] } };
+var myFunction = function (arg1) { return [this, "myFunction", arg1] };
+var myFunctionWithCall = function (arg1) { return [this, "myFunctionWithCall", arg1] };
+myFunctionWithCall.call = function (arg1) { return [this, "myFunctionWithCall.call", arg1] };
+Function.prototype.aliasedCall = Function.prototype.call;
+
+for (var i = 0; i < 100; ++i) {
+    shouldBe("myObject.call()", '[myObject, "myObject.call"]');
+    shouldBe("myFunction('arg1')", '[this, "myFunction", "arg1"]');
+    shouldBe("myFunction.call(myObject, 'arg1')", '[myObject, "myFunction", "arg1"]');
+    shouldBe("myFunction.call()", '[this, "myFunction", undefined]');
+    shouldBe("myFunction.call(null)", '[this, "myFunction", undefined]');
+    shouldBe("myFunction.call(undefined)", '[this, "myFunction", undefined]');
+    shouldBe("myFunction.aliasedCall(myObject, 'arg1')", '[myObject, "myFunction", "arg1"]');
+    shouldBe("myFunction.aliasedCall()", '[this, "myFunction", undefined]');
+    shouldBe("myFunction.aliasedCall(null)", '[this, "myFunction", undefined]');
+    shouldBe("myFunction.aliasedCall(undefined)", '[this, "myFunction", undefined]');
+    shouldBe("myFunctionWithCall.call(myObject, 'arg1')", '[myFunctionWithCall, "myFunctionWithCall.call", myObject]');
+    shouldBe("myFunctionWithCall.aliasedCall(myObject, 'arg1')", '[myObject, "myFunctionWithCall", "arg1"]');
+}
diff --git a/deps/v8/test/webkit/dfg-convert-this-object-then-exit-on-other-expected.txt b/deps/v8/test/webkit/dfg-convert-this-object-then-exit-on-other-expected.txt
new file mode 100644 (file)
index 0000000..8934e62
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a convert_this optimized for the case where this is an object behaves correctly when you then pass null.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-convert-this-object-then-exit-on-other.js b/deps/v8/test/webkit/dfg-convert-this-object-then-exit-on-other.js
new file mode 100644 (file)
index 0000000..810b47e
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a convert_this optimized for the case where this is an object behaves correctly when you then pass null."
+);
+
+function foo() {
+    return this.x;
+}
+
+x = 42;
+
+for (var i = 0; i < 200; ++i) {
+    var me;
+    if (i < 150)
+        me = this;
+    else
+        me = null;
+    shouldBe("foo.call(me)", "42");
+}
diff --git a/deps/v8/test/webkit/dfg-convert-this-other-then-exit-on-object-expected.txt b/deps/v8/test/webkit/dfg-convert-this-other-then-exit-on-object-expected.txt
new file mode 100644 (file)
index 0000000..3724ebd
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a convert_this optimized for the case where this is null behaves correctly when you then pass an object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-convert-this-other-then-exit-on-object.js b/deps/v8/test/webkit/dfg-convert-this-other-then-exit-on-object.js
new file mode 100644 (file)
index 0000000..a2bb6cb
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a convert_this optimized for the case where this is null behaves correctly when you then pass an object."
+);
+
+function foo() {
+    return this.x;
+}
+
+x = 42;
+
+for (var i = 0; i < 200; ++i) {
+    var me;
+    if (i < 150)
+        me = null;
+    else
+        me = this;
+    shouldBe("foo.call(me)", "42");
+}
diff --git a/deps/v8/test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-other-expected.txt b/deps/v8/test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-other-expected.txt
new file mode 100644 (file)
index 0000000..9146995
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a convert_this optimized for the case where this is an object with polymorphic structure behaves correctly when you then pass null.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-other.js b/deps/v8/test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-other.js
new file mode 100644 (file)
index 0000000..b2694d9
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a convert_this optimized for the case where this is an object with polymorphic structure behaves correctly when you then pass null."
+);
+
+function foo() {
+    return this.x;
+}
+
+x = 42;
+
+for (var i = 0; i < 1000; ++i) {
+    var me;
+    if (i < 150)
+        me = this;
+    else if (i < 950)
+        me = {x:42, y:62};
+    else
+        me = null;
+    shouldBe("foo.call(me)", "42");
+}
diff --git a/deps/v8/test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-string-expected.txt b/deps/v8/test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-string-expected.txt
new file mode 100644 (file)
index 0000000..b48d5c5
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a convert_this optimized for the case where this is an object with polymorphic structure behaves correctly when you then pass a string.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-string.js b/deps/v8/test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-string.js
new file mode 100644 (file)
index 0000000..14a4ecf
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a convert_this optimized for the case where this is an object with polymorphic structure behaves correctly when you then pass a string."
+);
+
+function foo() {
+    return this.x;
+}
+
+x = 42;
+
+String.prototype.x = 42;
+
+for (var i = 0; i < 1000; ++i) {
+    var me;
+    if (i < 150)
+        me = this;
+    else if (i < 950)
+        me = {x:42, y:62};
+    else
+        me = "hello";
+    shouldBe("foo.call(me)", "42");
+}
diff --git a/deps/v8/test/webkit/dfg-create-inlined-arguments-in-closure-inline-expected.txt b/deps/v8/test/webkit/dfg-create-inlined-arguments-in-closure-inline-expected.txt
new file mode 100644 (file)
index 0000000..4ab61f8
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that if the DFG tries to create inlined arguments from within a inlined call frame corresponding to a closure call, then we don't crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS value is 5
+PASS value is 6
+PASS value is 7
+PASS value is 8
+PASS value is 9
+PASS value is 10
+PASS value is 11
+PASS value is 12
+PASS value is 13
+PASS value is 14
+PASS value is 15
+PASS value is 16
+PASS value is 17
+PASS value is 18
+PASS value is 19
+PASS value is 20
+PASS value is 21
+PASS value is 22
+PASS value is 23
+PASS value is 24
+PASS value is 25
+PASS value is 26
+PASS value is 27
+PASS value is 28
+PASS value is 29
+PASS value is 30
+PASS value is 31
+PASS value is 32
+PASS value is 33
+PASS value is 34
+PASS value is 35
+PASS value is 36
+PASS value is 37
+PASS value is 38
+PASS value is 39
+PASS value is 40
+PASS value is 41
+PASS value is 42
+PASS value is 43
+PASS value is 44
+PASS value is 45
+PASS value is 46
+PASS value is 47
+PASS value is 48
+PASS value is 49
+PASS value is 50
+PASS value is 51
+PASS value is 52
+PASS value is 53
+PASS value is 54
+PASS value is 55
+PASS value is 56
+PASS value is 57
+PASS value is 58
+PASS value is 59
+PASS value is 60
+PASS value is 61
+PASS value is 62
+PASS value is 63
+PASS value is 64
+PASS value is 65
+PASS value is 66
+PASS value is 67
+PASS value is 68
+PASS value is 69
+PASS value is 70
+PASS value is 71
+PASS value is 72
+PASS value is 73
+PASS value is 74
+PASS value is 75
+PASS value is 76
+PASS value is 77
+PASS value is 78
+PASS value is 79
+PASS value is 80
+PASS value is 81
+PASS value is 82
+PASS value is 83
+PASS value is 84
+PASS value is 85
+PASS value is 86
+PASS value is 87
+PASS value is 88
+PASS value is 89
+PASS value is 90
+PASS value is 91
+PASS value is 92
+PASS value is 93
+PASS value is 94
+PASS value is 95
+PASS value is 96
+PASS value is 97
+PASS value is 98
+PASS value is 99
+PASS value is 100
+PASS value is 101
+PASS value is 102
+PASS value is 103
+PASS value is 104
+PASS value is 105
+PASS value is 106
+PASS value is 107
+PASS value is 108
+PASS value is 109
+PASS value is 110
+PASS value is 111
+PASS value is 112
+PASS value is 113
+PASS value is 114
+PASS value is 115
+PASS value is 116
+PASS value is 117
+PASS value is 118
+PASS value is 119
+PASS value is 120
+PASS value is 121
+PASS value is 122
+PASS value is 123
+PASS value is 124
+PASS value is 125
+PASS value is 126
+PASS value is 127
+PASS value is 128
+PASS value is 129
+PASS value is 130
+PASS value is 131
+PASS value is 132
+PASS value is 133
+PASS value is 134
+PASS value is 135
+PASS value is 136
+PASS value is 137
+PASS value is 138
+PASS value is 139
+PASS value is 140
+PASS value is 141
+PASS value is 142
+PASS value is 143
+PASS value is 144
+PASS value is 145
+PASS value is 146
+PASS value is 147
+PASS value is 148
+PASS value is 149
+PASS value is 150
+PASS value is 151
+PASS value is 152
+PASS value is 153
+PASS value is 154
+PASS value is 155
+PASS value is 156
+PASS value is 157
+PASS value is 158
+PASS value is 159
+PASS value is 160
+PASS value is 161
+PASS value is 162
+PASS value is 163
+PASS value is 164
+PASS value is 165
+PASS value is 166
+PASS value is 167
+PASS value is 168
+PASS value is 169
+PASS value is 170
+PASS value is 171
+PASS value is 172
+PASS value is 173
+PASS value is 174
+PASS value is 175
+PASS value is 176
+PASS value is 177
+PASS value is 178
+PASS value is 179
+PASS value is 180
+PASS value is 181
+PASS value is 182
+PASS value is 183
+PASS value is 184
+PASS value is 185
+PASS value is 186
+PASS value is 187
+PASS value is 188
+PASS value is 189
+PASS value is 190
+PASS value is 191
+PASS value is 192
+PASS value is 193
+PASS value is 194
+PASS value is 5.5
+PASS value is 5.5
+PASS value is 5.5
+PASS value is 5.5
+PASS value is 5.5
+PASS value is 5.5
+PASS value is 5.5
+PASS value is 5.5
+PASS value is 5.5
+PASS value is 5.5
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-create-inlined-arguments-in-closure-inline.js b/deps/v8/test/webkit/dfg-create-inlined-arguments-in-closure-inline.js
new file mode 100644 (file)
index 0000000..371638c
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that if the DFG tries to create inlined arguments from within a inlined call frame corresponding to a closure call, then we don't crash."
+);
+
+function foo(x, f) {
+    return f(x, 5)[0];
+}
+
+for (var i = 0; i < 200; ++i) {
+    var value = foo(i < 190 ? i : 0.5, function() {
+        var result = 0;
+        for (var j = 0; j < arguments.length; ++j)
+            result += arguments[j];
+        return [result, arguments];
+    });
+    if (i < 190)
+        shouldBe("value", "" + (i + 5));
+    else
+        shouldBe("value", "5.5");
+}
diff --git a/deps/v8/test/webkit/dfg-cse-cfa-discrepancy-expected.txt b/deps/v8/test/webkit/dfg-cse-cfa-discrepancy-expected.txt
new file mode 100644 (file)
index 0000000..28f56d6
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests stability when the CFA finds a constant in block-local data flow over captured variables but the CSE doesn't because of differences in heap modeling.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-cse-cfa-discrepancy.js b/deps/v8/test/webkit/dfg-cse-cfa-discrepancy.js
new file mode 100644 (file)
index 0000000..a40e7e6
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests stability when the CFA finds a constant in block-local data flow over captured variables but the CSE doesn't because of differences in heap modeling."
+);
+
+function foo(a, b) {
+    var x = a + b;
+    var y = a - b;
+    function bar() {
+        var m = x + y;
+        var n = x - y;
+        function baz() {
+            return m + n;
+        }
+        m = 23;
+        if (m < n) {
+            m = 12;
+            y = 72; // PutScopedVar appears to clobber world in CSE but only clobbers structures in CFA.
+            return m + 6 + n + baz();
+        } else
+            return 91;
+    }
+    x = 42;
+    if (y < 0) {
+        return x + 5 + y + bar();
+    } else
+        return 73;
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(i, i + 1)", "162");
+
diff --git a/deps/v8/test/webkit/dfg-cse-dead-get-scoped-var-expected.txt b/deps/v8/test/webkit/dfg-cse-dead-get-scoped-var-expected.txt
new file mode 100644 (file)
index 0000000..6fb33cc
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that CSE doesn't try to match against a dead GetScopedVar.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-cse-dead-get-scoped-var.js b/deps/v8/test/webkit/dfg-cse-dead-get-scoped-var.js
new file mode 100644 (file)
index 0000000..aec600b
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that CSE doesn't try to match against a dead GetScopedVar."
+);
+
+function foo(a) {
+    var x = a;
+    return function(p) {
+        if (p) {
+            var tmp = x;
+            return x;
+        }
+        return 42;
+    };
+}
+
+for (var i = 0; i < 1000; ++i)
+    shouldBe("foo(i)(false)", "42");
+
diff --git a/deps/v8/test/webkit/dfg-dead-min-one-arg-expected.txt b/deps/v8/test/webkit/dfg-dead-min-one-arg-expected.txt
new file mode 100644 (file)
index 0000000..71e7c37
--- /dev/null
@@ -0,0 +1,282 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a dummy use of Math.min(a) at least speculates that its argument is indeed a number.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS ok is 150
+PASS result is 37
+PASS ok is 151
+PASS result is 37
+PASS ok is 152
+PASS result is 37
+PASS ok is 153
+PASS result is 37
+PASS ok is 154
+PASS result is 37
+PASS ok is 155
+PASS result is 37
+PASS ok is 156
+PASS result is 37
+PASS ok is 157
+PASS result is 37
+PASS ok is 158
+PASS result is 37
+PASS ok is 159
+PASS result is 37
+PASS ok is 160
+PASS result is 37
+PASS ok is 161
+PASS result is 37
+PASS ok is 162
+PASS result is 37
+PASS ok is 163
+PASS result is 37
+PASS ok is 164
+PASS result is 37
+PASS ok is 165
+PASS result is 37
+PASS ok is 166
+PASS result is 37
+PASS ok is 167
+PASS result is 37
+PASS ok is 168
+PASS result is 37
+PASS ok is 169
+PASS result is 37
+PASS ok is 170
+PASS result is 37
+PASS ok is 171
+PASS result is 37
+PASS ok is 172
+PASS result is 37
+PASS ok is 173
+PASS result is 37
+PASS ok is 174
+PASS result is 37
+PASS ok is 175
+PASS result is 37
+PASS ok is 176
+PASS result is 37
+PASS ok is 177
+PASS result is 37
+PASS ok is 178
+PASS result is 37
+PASS ok is 179
+PASS result is 37
+PASS ok is 180
+PASS result is 37
+PASS ok is 181
+PASS result is 37
+PASS ok is 182
+PASS result is 37
+PASS ok is 183
+PASS result is 37
+PASS ok is 184
+PASS result is 37
+PASS ok is 185
+PASS result is 37
+PASS ok is 186
+PASS result is 37
+PASS ok is 187
+PASS result is 37
+PASS ok is 188
+PASS result is 37
+PASS ok is 189
+PASS result is 37
+PASS ok is 190
+PASS result is 37
+PASS ok is 191
+PASS result is 37
+PASS ok is 192
+PASS result is 37
+PASS ok is 193
+PASS result is 37
+PASS ok is 194
+PASS result is 37
+PASS ok is 195
+PASS result is 37
+PASS ok is 196
+PASS result is 37
+PASS ok is 197
+PASS result is 37
+PASS ok is 198
+PASS result is 37
+PASS ok is 199
+PASS result is 37
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-dead-min-one-arg.js b/deps/v8/test/webkit/dfg-dead-min-one-arg.js
new file mode 100644 (file)
index 0000000..48293be
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a dummy use of Math.min(a) at least speculates that its argument is indeed a number."
+);
+
+function foo(a) {
+    return Math.min(a.f);
+}
+
+var x = {f:42};
+var ok = null;
+var expected = 42;
+var empty = "";
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150) {
+        x = {f:{valueOf:function(){ ok = i; return 37; }}};
+        expected = 37;
+    }
+    var result = eval(empty + "foo(x)");
+    if (i >= 150)
+        shouldBe("ok", "" + i);
+    shouldBe("result", "" + expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-dead-min-two-args-expected.txt b/deps/v8/test/webkit/dfg-dead-min-two-args-expected.txt
new file mode 100644 (file)
index 0000000..2b7edc0
--- /dev/null
@@ -0,0 +1,532 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a dead use of Math.min(a,b) at least speculates that its arguments are indeed numbers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS ok is 150
+PASS result is 100
+PASS ok is 151
+PASS result is 100
+PASS ok is 152
+PASS result is 100
+PASS ok is 153
+PASS result is 100
+PASS ok is 154
+PASS result is 100
+PASS ok is 155
+PASS result is 100
+PASS ok is 156
+PASS result is 100
+PASS ok is 157
+PASS result is 100
+PASS ok is 158
+PASS result is 100
+PASS ok is 159
+PASS result is 100
+PASS ok is 160
+PASS result is 100
+PASS ok is 161
+PASS result is 100
+PASS ok is 162
+PASS result is 100
+PASS ok is 163
+PASS result is 100
+PASS ok is 164
+PASS result is 100
+PASS ok is 165
+PASS result is 100
+PASS ok is 166
+PASS result is 100
+PASS ok is 167
+PASS result is 100
+PASS ok is 168
+PASS result is 100
+PASS ok is 169
+PASS result is 100
+PASS ok is 170
+PASS result is 100
+PASS ok is 171
+PASS result is 100
+PASS ok is 172
+PASS result is 100
+PASS ok is 173
+PASS result is 100
+PASS ok is 174
+PASS result is 100
+PASS ok is 175
+PASS result is 100
+PASS ok is 176
+PASS result is 100
+PASS ok is 177
+PASS result is 100
+PASS ok is 178
+PASS result is 100
+PASS ok is 179
+PASS result is 100
+PASS ok is 180
+PASS result is 100
+PASS ok is 181
+PASS result is 100
+PASS ok is 182
+PASS result is 100
+PASS ok is 183
+PASS result is 100
+PASS ok is 184
+PASS result is 100
+PASS ok is 185
+PASS result is 100
+PASS ok is 186
+PASS result is 100
+PASS ok is 187
+PASS result is 100
+PASS ok is 188
+PASS result is 100
+PASS ok is 189
+PASS result is 100
+PASS ok is 190
+PASS result is 100
+PASS ok is 191
+PASS result is 100
+PASS ok is 192
+PASS result is 100
+PASS ok is 193
+PASS result is 100
+PASS ok is 194
+PASS result is 100
+PASS ok is 195
+PASS result is 100
+PASS ok is 196
+PASS result is 100
+PASS ok is 197
+PASS result is 100
+PASS ok is 198
+PASS result is 100
+PASS ok is 199
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS ok is 150
+PASS result is 100
+PASS ok is 151
+PASS result is 100
+PASS ok is 152
+PASS result is 100
+PASS ok is 153
+PASS result is 100
+PASS ok is 154
+PASS result is 100
+PASS ok is 155
+PASS result is 100
+PASS ok is 156
+PASS result is 100
+PASS ok is 157
+PASS result is 100
+PASS ok is 158
+PASS result is 100
+PASS ok is 159
+PASS result is 100
+PASS ok is 160
+PASS result is 100
+PASS ok is 161
+PASS result is 100
+PASS ok is 162
+PASS result is 100
+PASS ok is 163
+PASS result is 100
+PASS ok is 164
+PASS result is 100
+PASS ok is 165
+PASS result is 100
+PASS ok is 166
+PASS result is 100
+PASS ok is 167
+PASS result is 100
+PASS ok is 168
+PASS result is 100
+PASS ok is 169
+PASS result is 100
+PASS ok is 170
+PASS result is 100
+PASS ok is 171
+PASS result is 100
+PASS ok is 172
+PASS result is 100
+PASS ok is 173
+PASS result is 100
+PASS ok is 174
+PASS result is 100
+PASS ok is 175
+PASS result is 100
+PASS ok is 176
+PASS result is 100
+PASS ok is 177
+PASS result is 100
+PASS ok is 178
+PASS result is 100
+PASS ok is 179
+PASS result is 100
+PASS ok is 180
+PASS result is 100
+PASS ok is 181
+PASS result is 100
+PASS ok is 182
+PASS result is 100
+PASS ok is 183
+PASS result is 100
+PASS ok is 184
+PASS result is 100
+PASS ok is 185
+PASS result is 100
+PASS ok is 186
+PASS result is 100
+PASS ok is 187
+PASS result is 100
+PASS ok is 188
+PASS result is 100
+PASS ok is 189
+PASS result is 100
+PASS ok is 190
+PASS result is 100
+PASS ok is 191
+PASS result is 100
+PASS ok is 192
+PASS result is 100
+PASS ok is 193
+PASS result is 100
+PASS ok is 194
+PASS result is 100
+PASS ok is 195
+PASS result is 100
+PASS ok is 196
+PASS result is 100
+PASS ok is 197
+PASS result is 100
+PASS ok is 198
+PASS result is 100
+PASS ok is 199
+PASS result is 100
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-dead-min-two-args.js b/deps/v8/test/webkit/dfg-dead-min-two-args.js
new file mode 100644 (file)
index 0000000..f723f43
--- /dev/null
@@ -0,0 +1,70 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a dead use of Math.min(a,b) at least speculates that its arguments are indeed numbers."
+);
+
+function foo(a, b) {
+    Math.min(a.f, b.f);
+    return 100;
+}
+
+function bar(a, b) {
+    Math.min(a.f, b.f);
+    return 100;
+}
+
+var x = {f:42};
+var y = {f:43};
+var ok = null;
+var expected = 42;
+var empty = "";
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150) {
+        x = {f:{valueOf:function(){ ok = i; return 37; }}};
+        expected = 37;
+    }
+    var result = eval(empty + "foo(x, y)");
+    if (i >= 150)
+        shouldBe("ok", "" + i);
+    shouldBe("result", "100");
+}
+
+x = {f:42};
+y = {f:43};
+ok = null;
+expected = 42;
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150) {
+        y = {f:{valueOf:function(){ ok = i; return 37; }}};
+        expected = 37;
+    }
+    var result = eval(empty + "bar(x, y)");
+    if (i >= 150)
+        shouldBe("ok", "" + i);
+    shouldBe("result", "100");
+}
+
diff --git a/deps/v8/test/webkit/dfg-dead-redundant-get-array-length-expected.txt b/deps/v8/test/webkit/dfg-dead-redundant-get-array-length-expected.txt
new file mode 100644 (file)
index 0000000..e7dd654
--- /dev/null
@@ -0,0 +1,160 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that having a dead, and redundant, use of array.length doesn't cause compiler crashes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-dead-redundant-get-array-length.js b/deps/v8/test/webkit/dfg-dead-redundant-get-array-length.js
new file mode 100644 (file)
index 0000000..b82874f
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that having a dead, and redundant, use of array.length doesn't cause compiler crashes."
+);
+
+function foo(array) {
+    var x = array.length; // This is dead. If it wasn't, it would be redundant with the one below.
+    return array.length;
+}
+
+for (var i = 0; i < 128; ++i)
+    shouldBe("foo([1, 2, 3])", "3");
diff --git a/deps/v8/test/webkit/dfg-dead-speculation-expected.txt b/deps/v8/test/webkit/dfg-dead-speculation-expected.txt
new file mode 100644 (file)
index 0000000..d1fdf70
--- /dev/null
@@ -0,0 +1,432 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG will still perform speculations on dead things.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-dead-speculation.js b/deps/v8/test/webkit/dfg-dead-speculation.js
new file mode 100644 (file)
index 0000000..7778f5a
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG will still perform speculations on dead things."
+);
+
+function foo(a, b) {
+    var x = a.f - b;
+    return 10;
+}
+
+var thingy = {f:42};
+var variable = 84;
+var expected = 84;
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150) {
+        thingy = {f:{valueOf:function(){ variable = 24; return 5; }}};
+        expected = 24;
+    }
+    shouldBe("foo(thingy, i)", "10");
+    shouldBe("variable", "" + expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes-expected.txt b/deps/v8/test/webkit/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes-expected.txt
new file mode 100644 (file)
index 0000000..2b2e3a1
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that code that is dead, unreachable, and contains a chain of nodes that use each other in an untyped way doesn't result in the IR getting corrupted.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes.js b/deps/v8/test/webkit/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes.js
new file mode 100644 (file)
index 0000000..bded985
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that code that is dead, unreachable, and contains a chain of nodes that use each other in an untyped way doesn't result in the IR getting corrupted."
+);
+
+function foo(a) {
+    function bar(p) {
+        if (p) {
+            var x = a; // It's dead and unreachable, and it involves a GetScopeVar(GetScopeRegisters(GetMyScope())).
+        }
+        return 5;
+    }
+    return bar;
+}
+
+// Since the function contains unreachable code we need a higher optimization threshold.
+for (var i = 0; i < 1000; ++i)
+    shouldBe("foo(42)(false)", "5");
diff --git a/deps/v8/test/webkit/dfg-dead-variable-on-exit-expected.txt b/deps/v8/test/webkit/dfg-dead-variable-on-exit-expected.txt
new file mode 100644 (file)
index 0000000..b93fc5b
--- /dev/null
@@ -0,0 +1,332 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that if a variable is dead on OSR exit, it will at least contain a valid JS value.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](2); foo(firstArg, secondArg) is 1
+PASS array[1](3); foo(firstArg, secondArg) is 1
+PASS array[2](4, 5); foo(firstArg, secondArg) is 1
+PASS array[2](5, 6); foo(firstArg, secondArg) is 1
+PASS array[3](6, 7, 8); foo(firstArg, secondArg) is 1
+PASS array[3](7, 8, 9); foo(firstArg, secondArg) is 1
+PASS array[4](8, 9, 10, 11); foo(firstArg, secondArg) is 1
+PASS array[4](9, 10, 11, 12); foo(firstArg, secondArg) is 1
+PASS array[5](10, 11, 12, 13, 14); foo(firstArg, secondArg) is 1
+PASS array[5](11, 12, 13, 14, 15); foo(firstArg, secondArg) is 1
+PASS array[6](12, 13, 14, 15, 16, 17); foo(firstArg, secondArg) is 1
+PASS array[6](13, 14, 15, 16, 17, 18); foo(firstArg, secondArg) is 1
+PASS array[7](14, 15, 16, 17, 18, 19, 20); foo(firstArg, secondArg) is 1
+PASS array[7](15, 16, 17, 18, 19, 20, 21); foo(firstArg, secondArg) is 1
+PASS array[8](16, 17, 18, 19, 20, 21, 22, 23); foo(firstArg, secondArg) is 1
+PASS array[8](17, 18, 19, 20, 21, 22, 23, 24); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](20); foo(firstArg, secondArg) is 1
+PASS array[1](21); foo(firstArg, secondArg) is 1
+PASS array[2](22, 23); foo(firstArg, secondArg) is 1
+PASS array[2](23, 24); foo(firstArg, secondArg) is 1
+PASS array[3](24, 25, 26); foo(firstArg, secondArg) is 1
+PASS array[3](25, 26, 27); foo(firstArg, secondArg) is 1
+PASS array[4](26, 27, 28, 29); foo(firstArg, secondArg) is 1
+PASS array[4](27, 28, 29, 30); foo(firstArg, secondArg) is 1
+PASS array[5](28, 29, 30, 31, 32); foo(firstArg, secondArg) is 1
+PASS array[5](29, 30, 31, 32, 33); foo(firstArg, secondArg) is 1
+PASS array[6](30, 31, 32, 33, 34, 35); foo(firstArg, secondArg) is 1
+PASS array[6](31, 32, 33, 34, 35, 36); foo(firstArg, secondArg) is 1
+PASS array[7](32, 33, 34, 35, 36, 37, 38); foo(firstArg, secondArg) is 1
+PASS array[7](33, 34, 35, 36, 37, 38, 39); foo(firstArg, secondArg) is 1
+PASS array[8](34, 35, 36, 37, 38, 39, 40, 41); foo(firstArg, secondArg) is 1
+PASS array[8](35, 36, 37, 38, 39, 40, 41, 42); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](38); foo(firstArg, secondArg) is 1
+PASS array[1](39); foo(firstArg, secondArg) is 1
+PASS array[2](40, 41); foo(firstArg, secondArg) is 1
+PASS array[2](41, 42); foo(firstArg, secondArg) is 1
+PASS array[3](42, 43, 44); foo(firstArg, secondArg) is 1
+PASS array[3](43, 44, 45); foo(firstArg, secondArg) is 1
+PASS array[4](44, 45, 46, 47); foo(firstArg, secondArg) is 1
+PASS array[4](45, 46, 47, 48); foo(firstArg, secondArg) is 1
+PASS array[5](46, 47, 48, 49, 50); foo(firstArg, secondArg) is 1
+PASS array[5](47, 48, 49, 50, 51); foo(firstArg, secondArg) is 1
+PASS array[6](48, 49, 50, 51, 52, 53); foo(firstArg, secondArg) is 1
+PASS array[6](49, 50, 51, 52, 53, 54); foo(firstArg, secondArg) is 1
+PASS array[7](50, 51, 52, 53, 54, 55, 56); foo(firstArg, secondArg) is 1
+PASS array[7](51, 52, 53, 54, 55, 56, 57); foo(firstArg, secondArg) is 1
+PASS array[8](52, 53, 54, 55, 56, 57, 58, 59); foo(firstArg, secondArg) is 1
+PASS array[8](53, 54, 55, 56, 57, 58, 59, 60); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](56); foo(firstArg, secondArg) is 1
+PASS array[1](57); foo(firstArg, secondArg) is 1
+PASS array[2](58, 59); foo(firstArg, secondArg) is 1
+PASS array[2](59, 60); foo(firstArg, secondArg) is 1
+PASS array[3](60, 61, 62); foo(firstArg, secondArg) is 1
+PASS array[3](61, 62, 63); foo(firstArg, secondArg) is 1
+PASS array[4](62, 63, 64, 65); foo(firstArg, secondArg) is 1
+PASS array[4](63, 64, 65, 66); foo(firstArg, secondArg) is 1
+PASS array[5](64, 65, 66, 67, 68); foo(firstArg, secondArg) is 1
+PASS array[5](65, 66, 67, 68, 69); foo(firstArg, secondArg) is 1
+PASS array[6](66, 67, 68, 69, 70, 71); foo(firstArg, secondArg) is 1
+PASS array[6](67, 68, 69, 70, 71, 72); foo(firstArg, secondArg) is 1
+PASS array[7](68, 69, 70, 71, 72, 73, 74); foo(firstArg, secondArg) is 1
+PASS array[7](69, 70, 71, 72, 73, 74, 75); foo(firstArg, secondArg) is 1
+PASS array[8](70, 71, 72, 73, 74, 75, 76, 77); foo(firstArg, secondArg) is 1
+PASS array[8](71, 72, 73, 74, 75, 76, 77, 78); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](74); foo(firstArg, secondArg) is 1
+PASS array[1](75); foo(firstArg, secondArg) is 1
+PASS array[2](76, 77); foo(firstArg, secondArg) is 1
+PASS array[2](77, 78); foo(firstArg, secondArg) is 1
+PASS array[3](78, 79, 80); foo(firstArg, secondArg) is 1
+PASS array[3](79, 80, 81); foo(firstArg, secondArg) is 1
+PASS array[4](80, 81, 82, 83); foo(firstArg, secondArg) is 1
+PASS array[4](81, 82, 83, 84); foo(firstArg, secondArg) is 1
+PASS array[5](82, 83, 84, 85, 86); foo(firstArg, secondArg) is 1
+PASS array[5](83, 84, 85, 86, 87); foo(firstArg, secondArg) is 1
+PASS array[6](84, 85, 86, 87, 88, 89); foo(firstArg, secondArg) is 1
+PASS array[6](85, 86, 87, 88, 89, 90); foo(firstArg, secondArg) is 1
+PASS array[7](86, 87, 88, 89, 90, 91, 92); foo(firstArg, secondArg) is 1
+PASS array[7](87, 88, 89, 90, 91, 92, 93); foo(firstArg, secondArg) is 1
+PASS array[8](88, 89, 90, 91, 92, 93, 94, 95); foo(firstArg, secondArg) is 1
+PASS array[8](89, 90, 91, 92, 93, 94, 95, 96); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](92); foo(firstArg, secondArg) is 1
+PASS array[1](93); foo(firstArg, secondArg) is 1
+PASS array[2](94, 95); foo(firstArg, secondArg) is 1
+PASS array[2](95, 96); foo(firstArg, secondArg) is 1
+PASS array[3](96, 97, 98); foo(firstArg, secondArg) is 1
+PASS array[3](97, 98, 99); foo(firstArg, secondArg) is 1
+PASS array[4](98, 99, 100, 101); foo(firstArg, secondArg) is 1
+PASS array[4](99, 100, 101, 102); foo(firstArg, secondArg) is 1
+PASS array[5](100, 101, 102, 103, 104); foo(firstArg, secondArg) is 1
+PASS array[5](101, 102, 103, 104, 105); foo(firstArg, secondArg) is 1
+PASS array[6](102, 103, 104, 105, 106, 107); foo(firstArg, secondArg) is 1
+PASS array[6](103, 104, 105, 106, 107, 108); foo(firstArg, secondArg) is 1
+PASS array[7](104, 105, 106, 107, 108, 109, 110); foo(firstArg, secondArg) is 1
+PASS array[7](105, 106, 107, 108, 109, 110, 111); foo(firstArg, secondArg) is 1
+PASS array[8](106, 107, 108, 109, 110, 111, 112, 113); foo(firstArg, secondArg) is 1
+PASS array[8](107, 108, 109, 110, 111, 112, 113, 114); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](110); foo(firstArg, secondArg) is 1
+PASS array[1](111); foo(firstArg, secondArg) is 1
+PASS array[2](112, 113); foo(firstArg, secondArg) is 1
+PASS array[2](113, 114); foo(firstArg, secondArg) is 1
+PASS array[3](114, 115, 116); foo(firstArg, secondArg) is 1
+PASS array[3](115, 116, 117); foo(firstArg, secondArg) is 1
+PASS array[4](116, 117, 118, 119); foo(firstArg, secondArg) is 1
+PASS array[4](117, 118, 119, 120); foo(firstArg, secondArg) is 1
+PASS array[5](118, 119, 120, 121, 122); foo(firstArg, secondArg) is 1
+PASS array[5](119, 120, 121, 122, 123); foo(firstArg, secondArg) is 1
+PASS array[6](120, 121, 122, 123, 124, 125); foo(firstArg, secondArg) is 1
+PASS array[6](121, 122, 123, 124, 125, 126); foo(firstArg, secondArg) is 1
+PASS array[7](122, 123, 124, 125, 126, 127, 128); foo(firstArg, secondArg) is 1
+PASS array[7](123, 124, 125, 126, 127, 128, 129); foo(firstArg, secondArg) is 1
+PASS array[8](124, 125, 126, 127, 128, 129, 130, 131); foo(firstArg, secondArg) is 1
+PASS array[8](125, 126, 127, 128, 129, 130, 131, 132); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](128); foo(firstArg, secondArg) is 1
+PASS array[1](129); foo(firstArg, secondArg) is 1
+PASS array[2](130, 131); foo(firstArg, secondArg) is 1
+PASS array[2](131, 132); foo(firstArg, secondArg) is 1
+PASS array[3](132, 133, 134); foo(firstArg, secondArg) is 1
+PASS array[3](133, 134, 135); foo(firstArg, secondArg) is 1
+PASS array[4](134, 135, 136, 137); foo(firstArg, secondArg) is 1
+PASS array[4](135, 136, 137, 138); foo(firstArg, secondArg) is 1
+PASS array[5](136, 137, 138, 139, 140); foo(firstArg, secondArg) is 1
+PASS array[5](137, 138, 139, 140, 141); foo(firstArg, secondArg) is 1
+PASS array[6](138, 139, 140, 141, 142, 143); foo(firstArg, secondArg) is 1
+PASS array[6](139, 140, 141, 142, 143, 144); foo(firstArg, secondArg) is 1
+PASS array[7](140, 141, 142, 143, 144, 145, 146); foo(firstArg, secondArg) is 1
+PASS array[7](141, 142, 143, 144, 145, 146, 147); foo(firstArg, secondArg) is 1
+PASS array[8](142, 143, 144, 145, 146, 147, 148, 149); foo(firstArg, secondArg) is 1
+PASS array[8](143, 144, 145, 146, 147, 148, 149, 150); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](146); foo(firstArg, secondArg) is 1
+PASS array[1](147); foo(firstArg, secondArg) is 1
+PASS array[2](148, 149); foo(firstArg, secondArg) is 1
+PASS array[2](149, 150); foo(firstArg, secondArg) is 1
+PASS array[3](150, 151, 152); foo(firstArg, secondArg) is 1
+PASS array[3](151, 152, 153); foo(firstArg, secondArg) is 1
+PASS array[4](152, 153, 154, 155); foo(firstArg, secondArg) is 1
+PASS array[4](153, 154, 155, 156); foo(firstArg, secondArg) is 1
+PASS array[5](154, 155, 156, 157, 158); foo(firstArg, secondArg) is 1
+PASS array[5](155, 156, 157, 158, 159); foo(firstArg, secondArg) is 1
+PASS array[6](156, 157, 158, 159, 160, 161); foo(firstArg, secondArg) is 1
+PASS array[6](157, 158, 159, 160, 161, 162); foo(firstArg, secondArg) is 1
+PASS array[7](158, 159, 160, 161, 162, 163, 164); foo(firstArg, secondArg) is 1
+PASS array[7](159, 160, 161, 162, 163, 164, 165); foo(firstArg, secondArg) is 1
+PASS array[8](160, 161, 162, 163, 164, 165, 166, 167); foo(firstArg, secondArg) is 1
+PASS array[8](161, 162, 163, 164, 165, 166, 167, 168); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](164); foo(firstArg, secondArg) is 1
+PASS array[1](165); foo(firstArg, secondArg) is 1
+PASS array[2](166, 167); foo(firstArg, secondArg) is 1
+PASS array[2](167, 168); foo(firstArg, secondArg) is 1
+PASS array[3](168, 169, 170); foo(firstArg, secondArg) is 1
+PASS array[3](169, 170, 171); foo(firstArg, secondArg) is 1
+PASS array[4](170, 171, 172, 173); foo(firstArg, secondArg) is 1
+PASS array[4](171, 172, 173, 174); foo(firstArg, secondArg) is 1
+PASS array[5](172, 173, 174, 175, 176); foo(firstArg, secondArg) is 1
+PASS array[5](173, 174, 175, 176, 177); foo(firstArg, secondArg) is 1
+PASS array[6](174, 175, 176, 177, 178, 179); foo(firstArg, secondArg) is 1
+PASS array[6](175, 176, 177, 178, 179, 180); foo(firstArg, secondArg) is 1
+PASS array[7](176, 177, 178, 179, 180, 181, 182); foo(firstArg, secondArg) is 1
+PASS array[7](177, 178, 179, 180, 181, 182, 183); foo(firstArg, secondArg) is 1
+PASS array[8](178, 179, 180, 181, 182, 183, 184, 185); foo(firstArg, secondArg) is 1
+PASS array[8](179, 180, 181, 182, 183, 184, 185, 186); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](182); foo(firstArg, secondArg) is 1
+PASS array[1](183); foo(firstArg, secondArg) is 1
+PASS array[2](184, 185); foo(firstArg, secondArg) is 1
+PASS array[2](185, 186); foo(firstArg, secondArg) is 1
+PASS array[3](186, 187, 188); foo(firstArg, secondArg) is 1
+PASS array[3](187, 188, 189); foo(firstArg, secondArg) is 1
+PASS array[4](188, 189, 190, 191); foo(firstArg, secondArg) is 1
+PASS array[4](189, 190, 191, 192); foo(firstArg, secondArg) is 1
+PASS array[5](190, 191, 192, 193, 194); foo(firstArg, secondArg) is 1
+PASS array[5](191, 192, 193, 194, 195); foo(firstArg, secondArg) is 1
+PASS array[6](192, 193, 194, 195, 196, 197); foo(firstArg, secondArg) is 1
+PASS array[6](193, 194, 195, 196, 197, 198); foo(firstArg, secondArg) is 1
+PASS array[7](194, 195, 196, 197, 198, 199, 200); foo(firstArg, secondArg) is 1
+PASS array[7](195, 196, 197, 198, 199, 200, 201); foo(firstArg, secondArg) is 1
+PASS array[8](196, 197, 198, 199, 200, 201, 202, 203); foo(firstArg, secondArg) is 1
+PASS array[8](197, 198, 199, 200, 201, 202, 203, 204); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](200); foo(firstArg, secondArg) is 1
+PASS array[1](201); foo(firstArg, secondArg) is 1
+PASS array[2](202, 203); foo(firstArg, secondArg) is 1
+PASS array[2](203, 204); foo(firstArg, secondArg) is 1
+PASS array[3](204, 205, 206); foo(firstArg, secondArg) is 1
+PASS array[3](205, 206, 207); foo(firstArg, secondArg) is 1
+PASS array[4](206, 207, 208, 209); foo(firstArg, secondArg) is 1
+PASS array[4](207, 208, 209, 210); foo(firstArg, secondArg) is 1
+PASS array[5](208, 209, 210, 211, 212); foo(firstArg, secondArg) is 1
+PASS array[5](209, 210, 211, 212, 213); foo(firstArg, secondArg) is 1
+PASS array[6](210, 211, 212, 213, 214, 215); foo(firstArg, secondArg) is 1
+PASS array[6](211, 212, 213, 214, 215, 216); foo(firstArg, secondArg) is 1
+PASS array[7](212, 213, 214, 215, 216, 217, 218); foo(firstArg, secondArg) is 1
+PASS array[7](213, 214, 215, 216, 217, 218, 219); foo(firstArg, secondArg) is 1
+PASS array[8](214, 215, 216, 217, 218, 219, 220, 221); foo(firstArg, secondArg) is 1
+PASS array[8](215, 216, 217, 218, 219, 220, 221, 222); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](218); foo(firstArg, secondArg) is 1
+PASS array[1](219); foo(firstArg, secondArg) is 1
+PASS array[2](220, 221); foo(firstArg, secondArg) is 1
+PASS array[2](221, 222); foo(firstArg, secondArg) is 1
+PASS array[3](222, 223, 224); foo(firstArg, secondArg) is 1
+PASS array[3](223, 224, 225); foo(firstArg, secondArg) is 1
+PASS array[4](224, 225, 226, 227); foo(firstArg, secondArg) is 1
+PASS array[4](225, 226, 227, 228); foo(firstArg, secondArg) is 1
+PASS array[5](226, 227, 228, 229, 230); foo(firstArg, secondArg) is 1
+PASS array[5](227, 228, 229, 230, 231); foo(firstArg, secondArg) is 1
+PASS array[6](228, 229, 230, 231, 232, 233); foo(firstArg, secondArg) is 1
+PASS array[6](229, 230, 231, 232, 233, 234); foo(firstArg, secondArg) is 1
+PASS array[7](230, 231, 232, 233, 234, 235, 236); foo(firstArg, secondArg) is 1
+PASS array[7](231, 232, 233, 234, 235, 236, 237); foo(firstArg, secondArg) is 1
+PASS array[8](232, 233, 234, 235, 236, 237, 238, 239); foo(firstArg, secondArg) is 1
+PASS array[8](233, 234, 235, 236, 237, 238, 239, 240); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](236); foo(firstArg, secondArg) is 1
+PASS array[1](237); foo(firstArg, secondArg) is 1
+PASS array[2](238, 239); foo(firstArg, secondArg) is 1
+PASS array[2](239, 240); foo(firstArg, secondArg) is 1
+PASS array[3](240, 241, 242); foo(firstArg, secondArg) is 1
+PASS array[3](241, 242, 243); foo(firstArg, secondArg) is 1
+PASS array[4](242, 243, 244, 245); foo(firstArg, secondArg) is 1
+PASS array[4](243, 244, 245, 246); foo(firstArg, secondArg) is 1
+PASS array[5](244, 245, 246, 247, 248); foo(firstArg, secondArg) is 1
+PASS array[5](245, 246, 247, 248, 249); foo(firstArg, secondArg) is 1
+PASS array[6](246, 247, 248, 249, 250, 251); foo(firstArg, secondArg) is 1
+PASS array[6](247, 248, 249, 250, 251, 252); foo(firstArg, secondArg) is 1
+PASS array[7](248, 249, 250, 251, 252, 253, 254); foo(firstArg, secondArg) is 1
+PASS array[7](249, 250, 251, 252, 253, 254, 255); foo(firstArg, secondArg) is 1
+PASS array[8](250, 251, 252, 253, 254, 255, 256, 257); foo(firstArg, secondArg) is 1
+PASS array[8](251, 252, 253, 254, 255, 256, 257, 258); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](254); foo(firstArg, secondArg) is 1
+PASS array[1](255); foo(firstArg, secondArg) is 1
+PASS array[2](256, 257); foo(firstArg, secondArg) is 1
+PASS array[2](257, 258); foo(firstArg, secondArg) is 1
+PASS array[3](258, 259, 260); foo(firstArg, secondArg) is 1
+PASS array[3](259, 260, 261); foo(firstArg, secondArg) is 1
+PASS array[4](260, 261, 262, 263); foo(firstArg, secondArg) is 1
+PASS array[4](261, 262, 263, 264); foo(firstArg, secondArg) is 1
+PASS array[5](262, 263, 264, 265, 266); foo(firstArg, secondArg) is 1
+PASS array[5](263, 264, 265, 266, 267); foo(firstArg, secondArg) is 1
+PASS array[6](264, 265, 266, 267, 268, 269); foo(firstArg, secondArg) is 1
+PASS array[6](265, 266, 267, 268, 269, 270); foo(firstArg, secondArg) is 1
+PASS array[7](266, 267, 268, 269, 270, 271, 272); foo(firstArg, secondArg) is 1
+PASS array[7](267, 268, 269, 270, 271, 272, 273); foo(firstArg, secondArg) is 1
+PASS array[8](268, 269, 270, 271, 272, 273, 274, 275); foo(firstArg, secondArg) is 1
+PASS array[8](269, 270, 271, 272, 273, 274, 275, 276); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](272); foo(firstArg, secondArg) is 1
+PASS array[1](273); foo(firstArg, secondArg) is 1
+PASS array[2](274, 275); foo(firstArg, secondArg) is 1
+PASS array[2](275, 276); foo(firstArg, secondArg) is 1
+PASS array[3](276, 277, 278); foo(firstArg, secondArg) is 1
+PASS array[3](277, 278, 279); foo(firstArg, secondArg) is 1
+PASS array[4](278, 279, 280, 281); foo(firstArg, secondArg) is 1
+PASS array[4](279, 280, 281, 282); foo(firstArg, secondArg) is 1
+PASS array[5](280, 281, 282, 283, 284); foo(firstArg, secondArg) is 1
+PASS array[5](281, 282, 283, 284, 285); foo(firstArg, secondArg) is 1
+PASS array[6](282, 283, 284, 285, 286, 287); foo(firstArg, secondArg) is 1
+PASS array[6](283, 284, 285, 286, 287, 288); foo(firstArg, secondArg) is 1
+PASS array[7](284, 285, 286, 287, 288, 289, 290); foo(firstArg, secondArg) is 1
+PASS array[7](285, 286, 287, 288, 289, 290, 291); foo(firstArg, secondArg) is 1
+PASS array[8](286, 287, 288, 289, 290, 291, 292, 293); foo(firstArg, secondArg) is 1
+PASS array[8](287, 288, 289, 290, 291, 292, 293, 294); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](290); foo(firstArg, secondArg) is 1
+PASS array[1](291); foo(firstArg, secondArg) is 1
+PASS array[2](292, 293); foo(firstArg, secondArg) is 1
+PASS array[2](293, 294); foo(firstArg, secondArg) is 1
+PASS array[3](294, 295, 296); foo(firstArg, secondArg) is 1
+PASS array[3](295, 296, 297); foo(firstArg, secondArg) is 1
+PASS array[4](296, 297, 298, 299); foo(firstArg, secondArg) is 1
+PASS array[4](297, 298, 299, 300); foo(firstArg, secondArg) is 1
+PASS array[5](298, 299, 300, 301, 302); foo(firstArg, secondArg) is 1
+PASS array[5](299, 300, 301, 302, 303); foo(firstArg, secondArg) is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-dead-variable-on-exit.js b/deps/v8/test/webkit/dfg-dead-variable-on-exit.js
new file mode 100644 (file)
index 0000000..0f9f48c
--- /dev/null
@@ -0,0 +1,87 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that if a variable is dead on OSR exit, it will at least contain a valid JS value."
+);
+
+var array = [];
+
+for (var i = 0; i < 9; ++i) {
+    var code = "";
+    code += "(function(";
+    for (var j = 0; j < i; ++j) {
+        if (j)
+            code += ", ";
+        code += "arg" + j;
+    }
+    code += ") {\n";
+    code += "    return ";
+    if (i) {
+        for (var j = 0; j < i; ++j) {
+            if (j)
+                code += " + ";
+            code += "arg" + j;
+        }
+    } else
+        code += "void 0";
+    code += ";\n";
+    code += "})";
+    array[i] = eval(code);
+}
+
+function foo(a, b) {
+    var x = 0;
+    if (a.f < b.f) {
+        var result = b.g - a.g;
+        x = !x;
+        return result;
+    } else {
+        var result = a.g - b.g;
+        x = [x];
+        return result;
+    }
+}
+
+var firstArg = {f:2, g:3};
+var secondArg = {f:3, g:4};
+
+for (var i = 0; i < 300; ++i) {
+    var code = "";
+    code += "array[" + (((i / 2) | 0) % array.length) + "](";
+    for (var j = 0; j < (((i / 2) | 0) % array.length); ++j) {
+        if (j)
+            code += ", ";
+        code += i + j;
+    }
+    if (i == 150) {
+        firstArg = {f:2, g:2.5};
+        secondArg = {f:3, g:3.5};
+    }
+    var tmp = firstArg;
+    firstArg = secondArg;
+    secondArg = tmp;
+    code += "); foo(firstArg, secondArg)";
+    shouldBe(code, "1");
+}
+
diff --git a/deps/v8/test/webkit/dfg-double-addition-simplify-to-int-expected.txt b/deps/v8/test/webkit/dfg-double-addition-simplify-to-int-expected.txt
new file mode 100644 (file)
index 0000000..7bb5f0a
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG doesn't get confused about an edge being a double edge after we perform CFG simplification.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-double-addition-simplify-to-int.js b/deps/v8/test/webkit/dfg-double-addition-simplify-to-int.js
new file mode 100644 (file)
index 0000000..3e12b11
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG doesn't get confused about an edge being a double edge after we perform CFG simplification."
+);
+
+function foo(a, p) {
+    var p2;
+    var x;
+    var y;
+    if (p)
+        p2 = true;
+    else
+        p2 = true;
+    if (p2)
+        x = a;
+    else
+        x = 0.5;
+    if (p2)
+        y = a;
+    else
+        y = 0.7;
+    var result = x + y;
+    return [result, [x, y], [x, y], [x, y]];
+}
+
+for (var i = 0; i < 1000; ++i)
+    shouldBe("foo(42, true)[0]", "84");
diff --git a/deps/v8/test/webkit/dfg-double-use-of-post-simplification-double-prediction-expected.txt b/deps/v8/test/webkit/dfg-double-use-of-post-simplification-double-prediction-expected.txt
new file mode 100644 (file)
index 0000000..b01ff7e
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests stability of the DFG compiler when you have a double use of a variable that is not revealed to be a double until after CFG simplification.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-double-use-of-post-simplification-double-prediction.js b/deps/v8/test/webkit/dfg-double-use-of-post-simplification-double-prediction.js
new file mode 100644 (file)
index 0000000..cf38579
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests stability of the DFG compiler when you have a double use of a variable that is not revealed to be a double until after CFG simplification."
+);
+
+function foo(a) {
+    var p = true;
+    var x;
+    if (p)
+        x = 42;
+    else
+        x = "yo";
+    return x + a;
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(0.5)", "42.5");
+
diff --git a/deps/v8/test/webkit/dfg-double-vote-fuzz-expected.txt b/deps/v8/test/webkit/dfg-double-vote-fuzz-expected.txt
new file mode 100644 (file)
index 0000000..0c7dea4
--- /dev/null
@@ -0,0 +1,289 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that the static analysis we use to infer if a variable should be a double doesn't crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Result value is 54939
+Result value is 55039
+Result value is 55039
+Result value is 55139
+Result value is 55039
+Result value is 55139
+Result value is 55139
+Result value is 55239
+Result value is 55039
+Result value is 55139
+Result value is 55139
+Result value is 55239
+Result value is 55139
+Result value is 55239
+Result value is 55239
+Result value is 55339
+Result value is 55821
+Result value is 55921
+Result value is 55921
+Result value is 56021
+Result value is 55921
+Result value is 56021
+Result value is 56021
+Result value is 56121
+Result value is 55921
+Result value is 56021
+Result value is 56021
+Result value is 56121
+Result value is 56021
+Result value is 56121
+Result value is 56121
+Result value is 56221
+Result value is 55828.5
+Result value is 55928.5
+Result value is 55928.5
+Result value is 56028.5
+Result value is 55928.5
+Result value is 56028.5
+Result value is 56028.5
+Result value is 56128.5
+Result value is 55928.5
+Result value is 56028.5
+Result value is 56028.5
+Result value is 56128.5
+Result value is 56028.5
+Result value is 56128.5
+Result value is 56128.5
+Result value is 56228.5
+Result value is 56710.5
+Result value is 56810.5
+Result value is 56810.5
+Result value is 56910.5
+Result value is 56810.5
+Result value is 56910.5
+Result value is 56910.5
+Result value is 57010.5
+Result value is 56810.5
+Result value is 56910.5
+Result value is 56910.5
+Result value is 57010.5
+Result value is 56910.5
+Result value is 57010.5
+Result value is 57010.5
+Result value is 57110.5
+Result value is 55834
+Result value is 55934
+Result value is 55934
+Result value is 56034
+Result value is 55934
+Result value is 56034
+Result value is 56034
+Result value is 56134
+Result value is 55934
+Result value is 56034
+Result value is 56034
+Result value is 56134
+Result value is 56034
+Result value is 56134
+Result value is 56134
+Result value is 56234
+Result value is 56716
+Result value is 56816
+Result value is 56816
+Result value is 56916
+Result value is 56816
+Result value is 56916
+Result value is 56916
+Result value is 57016
+Result value is 56816
+Result value is 56916
+Result value is 56916
+Result value is 57016
+Result value is 56916
+Result value is 57016
+Result value is 57016
+Result value is 57116
+Result value is 56723.5
+Result value is 56823.5
+Result value is 56823.5
+Result value is 56923.5
+Result value is 56823.5
+Result value is 56923.5
+Result value is 56923.5
+Result value is 57023.5
+Result value is 56823.5
+Result value is 56923.5
+Result value is 56923.5
+Result value is 57023.5
+Result value is 56923.5
+Result value is 57023.5
+Result value is 57023.5
+Result value is 57123.5
+Result value is 57605.5
+Result value is 57705.5
+Result value is 57705.5
+Result value is 57805.5
+Result value is 57705.5
+Result value is 57805.5
+Result value is 57805.5
+Result value is 57905.5
+Result value is 57705.5
+Result value is 57805.5
+Result value is 57805.5
+Result value is 57905.5
+Result value is 57805.5
+Result value is 57905.5
+Result value is 57905.5
+Result value is 58005.5
+Result value is 55887.5
+Result value is 55987.5
+Result value is 55987.5
+Result value is 56087.5
+Result value is 55987.5
+Result value is 56087.5
+Result value is 56087.5
+Result value is 56187.5
+Result value is 55987.5
+Result value is 56087.5
+Result value is 56087.5
+Result value is 56187.5
+Result value is 56087.5
+Result value is 56187.5
+Result value is 56187.5
+Result value is 56287.5
+Result value is 56769.5
+Result value is 56869.5
+Result value is 56869.5
+Result value is 56969.5
+Result value is 56869.5
+Result value is 56969.5
+Result value is 56969.5
+Result value is 57069.5
+Result value is 56869.5
+Result value is 56969.5
+Result value is 56969.5
+Result value is 57069.5
+Result value is 56969.5
+Result value is 57069.5
+Result value is 57069.5
+Result value is 57169.5
+Result value is 56777
+Result value is 56877
+Result value is 56877
+Result value is 56977
+Result value is 56877
+Result value is 56977
+Result value is 56977
+Result value is 57077
+Result value is 56877
+Result value is 56977
+Result value is 56977
+Result value is 57077
+Result value is 56977
+Result value is 57077
+Result value is 57077
+Result value is 57177
+Result value is 57659
+Result value is 57759
+Result value is 57759
+Result value is 57859
+Result value is 57759
+Result value is 57859
+Result value is 57859
+Result value is 57959
+Result value is 57759
+Result value is 57859
+Result value is 57859
+Result value is 57959
+Result value is 57859
+Result value is 57959
+Result value is 57959
+Result value is 58059
+Result value is 56782.5
+Result value is 56882.5
+Result value is 56882.5
+Result value is 56982.5
+Result value is 56882.5
+Result value is 56982.5
+Result value is 56982.5
+Result value is 57082.5
+Result value is 56882.5
+Result value is 56982.5
+Result value is 56982.5
+Result value is 57082.5
+Result value is 56982.5
+Result value is 57082.5
+Result value is 57082.5
+Result value is 57182.5
+Result value is 57664.5
+Result value is 57764.5
+Result value is 57764.5
+Result value is 57864.5
+Result value is 57764.5
+Result value is 57864.5
+Result value is 57864.5
+Result value is 57964.5
+Result value is 57764.5
+Result value is 57864.5
+Result value is 57864.5
+Result value is 57964.5
+Result value is 57864.5
+Result value is 57964.5
+Result value is 57964.5
+Result value is 58064.5
+Result value is 57672
+Result value is 57772
+Result value is 57772
+Result value is 57872
+Result value is 57772
+Result value is 57872
+Result value is 57872
+Result value is 57972
+Result value is 57772
+Result value is 57872
+Result value is 57872
+Result value is 57972
+Result value is 57872
+Result value is 57972
+Result value is 57972
+Result value is 58072
+Result value is 58554
+Result value is 58654
+Result value is 58654
+Result value is 58754
+Result value is 58654
+Result value is 58754
+Result value is 58754
+Result value is 58854
+Result value is 58654
+Result value is 58754
+Result value is 58754
+Result value is 58854
+Result value is 58754
+Result value is 58854
+Result value is 58854
+Result value is 58954
+PASS grandResult is 14578304
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-double-vote-fuzz.js b/deps/v8/test/webkit/dfg-double-vote-fuzz.js
new file mode 100644 (file)
index 0000000..266bc15
--- /dev/null
@@ -0,0 +1,91 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that the static analysis we use to infer if a variable should be a double doesn't crash."
+);
+
+var grandResult = 0;
+
+for (var i = 0; i < 256; ++i) {
+    code  = "function foo(o, a, b) {\n";
+    code += "    var x = 0;\n";
+    code += "    var c = a + b;\n";
+    for (var j = 0; j < 8; ++j)
+        code += "    var " + String.fromCharCode("d".charCodeAt(0) + j) + " = " + ((i & (1 << ((j / 2) | 0))) ? "0.5" : "0") + ";\n";
+    code += "    for (var __i = 0; __i < 10; ++__i) {\n";
+    code += "        if (a + b + 1 > __i) {\n";
+    code += "            c = d;\n";
+    code += "            x += c;\n";
+    code += "        }\n";
+    code += "        if (a + b + 2 > __i) {\n";
+    code += "            c = e;\n";
+    code += "            x += c;\n";
+    code += "        }\n";
+    code += "        if (a + b + 3 > __i) {\n";
+    code += "            c = f;\n";
+    code += "            x += c;\n";
+    code += "        }\n";
+    code += "        if (a + b + 4 > __i) {\n";
+    code += "            c = g;\n";
+    code += "            x += c;\n";
+    code += "        }\n";
+    code += "        if (a + b + 5 > __i) {\n";
+    code += "            c = h;\n";
+    code += "            x += c;\n";
+    code += "        }\n";
+    code += "        if (a + b + 6 > __i) {\n";
+    code += "            c = i;\n";
+    code += "            x += c;\n";
+    code += "        }\n";
+    code += "        if (a + b + 7 > __i) {\n";
+    code += "            c = j;\n";
+    code += "            x += c;\n";
+    code += "        }\n";
+    code += "        if (a + b + 8 > __i) {\n";
+    code += "            c = k;\n";
+    code += "            x += c;\n";
+    code += "        }\n";
+    for (var j = 0; j < 8; ++j) {
+        code += "        if (a + b + " + (9 + j) + " > __i)\n";
+        code += "            " + String.fromCharCode("d".charCodeAt(0) + j) + " = __i + " + j + " + " + ((i & (1 << (((j / 2) | 0) + 4))) ? "0.5" : "0") + ";\n";
+    }
+    code += "    }\n";
+    code += "    return x + c;\n";
+    code += "}\n";
+    code += "\n";
+    code += "var result = 0;\n"
+    code += "for (var __j = 0; __j < 100; ++__j) {\n";
+    code += "    result += foo({}, __j, __j + 1);\n";
+    code += "}\n";
+    code += "\n";
+    code += "result";
+
+    var theResult = eval(code);
+    debug("Result value is " + theResult);
+    grandResult += theResult;
+}
+
+shouldBe("grandResult", "14578304");
+
+
diff --git a/deps/v8/test/webkit/dfg-ensure-array-storage-on-string-expected.txt b/deps/v8/test/webkit/dfg-ensure-array-storage-on-string-expected.txt
new file mode 100644 (file)
index 0000000..bb89fa6
--- /dev/null
@@ -0,0 +1,1233 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Checks that trying to arrayify a string to have array storage doesn't crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo("hello") is "0hello"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-ensure-array-storage-on-string.js b/deps/v8/test/webkit/dfg-ensure-array-storage-on-string.js
new file mode 100644 (file)
index 0000000..1b170fd
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Checks that trying to arrayify a string to have array storage doesn't crash."
+);
+
+function foo(array) {
+    var result = 0;
+    for (var i = 0; i < array.length; ++i)
+        result += array[i];
+    return result;
+}
+
+var array = [1, 2, 3];
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(array)", "6");
+
+array = [1, , 3];
+array.__defineGetter__(1, function() { return 6; });
+for (var i = 0; i < 1000; ++i)
+    shouldBe("foo(array)", "10");
+
+shouldBe("foo(\"hello\")", "\"0hello\"");
diff --git a/deps/v8/test/webkit/dfg-ensure-array-storage-on-window-expected.txt b/deps/v8/test/webkit/dfg-ensure-array-storage-on-window-expected.txt
new file mode 100644 (file)
index 0000000..eada7d1
--- /dev/null
@@ -0,0 +1,1233 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that passing the global object to an array access that will arrayify to ArrayWithArrayStorage doesn't break things.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(w) is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-ensure-array-storage-on-window.js b/deps/v8/test/webkit/dfg-ensure-array-storage-on-window.js
new file mode 100644 (file)
index 0000000..194aeda
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that passing the global object to an array access that will arrayify to ArrayWithArrayStorage doesn't break things."
+);
+
+function foo(array) {
+    var result = 0;
+    for (var i = 0; i < array.length; ++i)
+        result += array[i];
+    return result;
+}
+
+var array = [1, 2, 3];
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(array)", "6");
+
+array = [1, , 3];
+array.__defineGetter__(1, function() { return 6; });
+for (var i = 0; i < 1000; ++i)
+    shouldBe("foo(array)", "10");
+
+var w = this;
+w[0] = 1;
+w.length = 1;
+shouldBe("foo(w)", "1");
diff --git a/deps/v8/test/webkit/dfg-ensure-contiguous-on-string-expected.txt b/deps/v8/test/webkit/dfg-ensure-contiguous-on-string-expected.txt
new file mode 100644 (file)
index 0000000..3b054ef
--- /dev/null
@@ -0,0 +1,1233 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Checks that trying to arrayify a string doesn't crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo("hello") is "0hello"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-ensure-contiguous-on-string.js b/deps/v8/test/webkit/dfg-ensure-contiguous-on-string.js
new file mode 100644 (file)
index 0000000..a9e8937
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Checks that trying to arrayify a string doesn't crash."
+);
+
+function foo(array) {
+    var result = 0;
+    for (var i = 0; i < array.length; ++i)
+        result += array[i];
+    return result;
+}
+
+var array = [1, 2, 3];
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(array)", "6");
+
+array = [1, false, 3];
+for (var i = 0; i < 1000; ++i)
+    shouldBe("foo(array)", "4");
+
+shouldBe("foo(\"hello\")", "\"0hello\"");
diff --git a/deps/v8/test/webkit/dfg-ensure-non-array-array-storage-on-window-expected.txt b/deps/v8/test/webkit/dfg-ensure-non-array-array-storage-on-window-expected.txt
new file mode 100644 (file)
index 0000000..c612dd8
--- /dev/null
@@ -0,0 +1,2437 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that passing the global object to an array access that will arrayify to NonArrayWithArrayStorage doesn't break things.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(w) is 1
+PASS thingy is false
+PASS thingy is 42
+PASS foo(w) is 1
+PASS foo(w) is 0/0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-ensure-non-array-array-storage-on-window.js b/deps/v8/test/webkit/dfg-ensure-non-array-array-storage-on-window.js
new file mode 100644 (file)
index 0000000..3ae47c5
--- /dev/null
@@ -0,0 +1,88 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that passing the global object to an array access that will arrayify to NonArrayWithArrayStorage doesn't break things."
+);
+
+function foo(array) {
+    var result = 0;
+    for (var i = 0; i < array.length; ++i)
+        result += array[i];
+    return result;
+}
+
+function bar(array) {
+    array[1] = 42;
+}
+
+var array = {};
+array.length = 3;
+array[0] = 1;
+array[1] = 2;
+array[2] = 3;
+for (var i = 0; i < 200; ++i) {
+    shouldBe("foo(array)", "6");
+
+    var otherArray = {};
+    bar(otherArray);
+    shouldBe("otherArray[1]", "42");
+}
+
+for (var i = 0; i < 1000; ++i) {
+    // Do strange things to ensure that the get_by_id on length goes polymorphic.
+    var array = {};
+    if (i % 2)
+        array.x = 42;
+    array.length = 3;
+    array[0] = 1;
+    array[2] = 3;
+    array.__defineGetter__(1, function() { return 6; });
+
+    shouldBe("foo(array)", "10");
+
+    var otherArray = {};
+    otherArray.__defineSetter__(0, function(value) { throw "error"; });
+    bar(otherArray);
+    shouldBe("otherArray[1]", "42");
+}
+
+var w = this;
+w[0] = 1;
+w.length = 1;
+var thingy = false;
+w.__defineSetter__(1, function(value) { thingy = value; });
+shouldBe("foo(w)", "1");
+shouldBe("thingy", "false");
+
+// At this point we check to make sure that bar doesn't end up either creating array storage for
+// the window proxy, or equally badly, storing to the already created array storage on the proxy
+// (since foo() may have made the mistake of creating array storage). That's why we do the setter
+// thingy, to detect that for index 1 we fall through the proxy to the real window object.
+bar(w);
+
+shouldBe("thingy", "42");
+shouldBe("foo(w)", "1");
+w.length = 2;
+shouldBe("foo(w)", "0/0");
+
diff --git a/deps/v8/test/webkit/dfg-exception-expected.txt b/deps/v8/test/webkit/dfg-exception-expected.txt
new file mode 100644 (file)
index 0000000..55ec05e
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that exceptions are thrown correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS caughtException is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-exception.js b/deps/v8/test/webkit/dfg-exception.js
new file mode 100644 (file)
index 0000000..5126b1e
--- /dev/null
@@ -0,0 +1,113 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that exceptions are thrown correctly."
+);
+
+// A large function containing a try/catch - this prevent DFG compilation.
+function doesntDFGCompile()
+{
+    function callMe() {};
+
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+
+    try {
+        return 1;
+    } catch (e) {
+        return 2;
+    }
+};
+
+function test(x)
+{
+    return x();
+};
+
+// warmup the test method
+for (i = 0; i < 200; ++i)
+    test(doesntDFGCompile);
+
+//
+var caughtException = false;
+try {
+    test();
+} catch (e) {
+    caughtException = true;
+}
+
+shouldBe("caughtException", 'true');
+var successfullyParsed = true;
diff --git a/deps/v8/test/webkit/dfg-float32-array-nan-expected.txt b/deps/v8/test/webkit/dfg-float32-array-nan-expected.txt
new file mode 100644 (file)
index 0000000..d92eae4
--- /dev/null
@@ -0,0 +1,234 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens in the DFG JIT if we load from a Float32 array that contains a weirdly formatted NaN.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+-4587521
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+I didn't crash, which is a good thing.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-float32-array-nan.js b/deps/v8/test/webkit/dfg-float32-array-nan.js
new file mode 100644 (file)
index 0000000..4a62f40
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens in the DFG JIT if we load from a Float32 array that contains a weirdly formatted NaN."
+);
+
+var buffer = new ArrayBuffer(4);
+
+var int32View = new Int32Array(buffer);
+var floatView = new Float32Array(buffer);
+
+int32View[0] = -4587521;
+
+debug(int32View[0]);
+
+function foo(o) {
+    debug(o[0]);
+    return o[0];
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("\"\" + foo(floatView)", "\"NaN\"");
+
+debug("I didn't crash, which is a good thing.");
diff --git a/deps/v8/test/webkit/dfg-flush-get-local-expected.txt b/deps/v8/test/webkit/dfg-flush-get-local-expected.txt
new file mode 100644 (file)
index 0000000..ea7e368
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that if we emit a Flush of a GetLocal, we flush the source of the GetLocal.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is 500000
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-flush-get-local.js b/deps/v8/test/webkit/dfg-flush-get-local.js
new file mode 100644 (file)
index 0000000..4dc8338
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that if we emit a Flush of a GetLocal, we flush the source of the GetLocal."
+);
+
+function foo(a, b) {
+    return a.f + a.g + b;
+}
+
+function fuzz(a, b) {
+    if (a < b)
+        return a - b;
+    else
+        return b - a;
+}
+
+function bar(a, b) {
+    return foo({f:(a < b ? a - b : b - a), g:a}, b);
+}
+
+var result = 0;
+for (var i = 0; i < 1000; ++i)
+    result += bar(i, 1000 - i);
+
+shouldBe("result", "500000");
diff --git a/deps/v8/test/webkit/dfg-force-exit-then-sparse-conditional-constant-prop-in-loop-expected.txt b/deps/v8/test/webkit/dfg-force-exit-then-sparse-conditional-constant-prop-in-loop-expected.txt
new file mode 100644 (file)
index 0000000..cd9a3fd
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Checks that increased aggressiveness in sparse conditional constant propagation resultin from a node being proven to be force exit does not lead to a cascade of unsound decisions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-force-exit-then-sparse-conditional-constant-prop-in-loop.js b/deps/v8/test/webkit/dfg-force-exit-then-sparse-conditional-constant-prop-in-loop.js
new file mode 100644 (file)
index 0000000..6516ac4
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Checks that increased aggressiveness in sparse conditional constant propagation resultin from a node being proven to be force exit does not lead to a cascade of unsound decisions."
+);
+
+function foo(a) {
+    var i;
+    if (a.push)
+        i = 0;
+    else
+        i = a;
+    var result = 0;
+    while (i < 10) {
+        result += a[i];
+        i++;
+    }
+    return result;
+}
+
+var array = [54, 5432, 1234, 54, 1235, 64, 75, 532, 64, 2];
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(array)", "8746");
diff --git a/deps/v8/test/webkit/dfg-get-by-val-clobber-expected.txt b/deps/v8/test/webkit/dfg-get-by-val-clobber-expected.txt
new file mode 100644 (file)
index 0000000..8a385fd
--- /dev/null
@@ -0,0 +1,3032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that common subexpression elimination knows how to accurately model PutBuVal.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 0
+PASS doAccesses(array1, array1, i % 4, 0, i) is 0
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 1
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 2
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 3
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 4
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 5
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 6
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 7
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 8
+PASS doAccesses(array1, array1, i % 4, 0, i) is 8
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 9
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 10
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 11
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 12
+PASS doAccesses(array1, array1, i % 4, 0, i) is 12
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 13
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 14
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 15
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 16
+PASS doAccesses(array1, array1, i % 4, 0, i) is 16
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 17
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 18
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 19
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 20
+PASS doAccesses(array1, array1, i % 4, 0, i) is 20
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 21
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 22
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 23
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 24
+PASS doAccesses(array1, array1, i % 4, 0, i) is 24
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 25
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 26
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 27
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 28
+PASS doAccesses(array1, array1, i % 4, 0, i) is 28
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 29
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 30
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 31
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 32
+PASS doAccesses(array1, array1, i % 4, 0, i) is 32
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 33
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 34
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 35
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 36
+PASS doAccesses(array1, array1, i % 4, 0, i) is 36
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 37
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 38
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 39
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 40
+PASS doAccesses(array1, array1, i % 4, 0, i) is 40
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 41
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 42
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 43
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 44
+PASS doAccesses(array1, array1, i % 4, 0, i) is 44
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 45
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 46
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 47
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 48
+PASS doAccesses(array1, array1, i % 4, 0, i) is 48
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 49
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 50
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 51
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 52
+PASS doAccesses(array1, array1, i % 4, 0, i) is 52
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 53
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 54
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 55
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 56
+PASS doAccesses(array1, array1, i % 4, 0, i) is 56
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 57
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 58
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 59
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 60
+PASS doAccesses(array1, array1, i % 4, 0, i) is 60
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 61
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 62
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 63
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 64
+PASS doAccesses(array1, array1, i % 4, 0, i) is 64
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 65
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 66
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 67
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 68
+PASS doAccesses(array1, array1, i % 4, 0, i) is 68
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 69
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 70
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 71
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 72
+PASS doAccesses(array1, array1, i % 4, 0, i) is 72
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 73
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 74
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 75
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 76
+PASS doAccesses(array1, array1, i % 4, 0, i) is 76
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 77
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 78
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 79
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 80
+PASS doAccesses(array1, array1, i % 4, 0, i) is 80
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 81
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 82
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 83
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 84
+PASS doAccesses(array1, array1, i % 4, 0, i) is 84
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 85
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 86
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 87
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 88
+PASS doAccesses(array1, array1, i % 4, 0, i) is 88
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 89
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 90
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 91
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 92
+PASS doAccesses(array1, array1, i % 4, 0, i) is 92
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 93
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 94
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 95
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 96
+PASS doAccesses(array1, array1, i % 4, 0, i) is 96
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 97
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 98
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 99
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 100
+PASS doAccesses(array1, array1, i % 4, 0, i) is 100
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 101
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 102
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 103
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 104
+PASS doAccesses(array1, array1, i % 4, 0, i) is 104
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 105
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 106
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 107
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 108
+PASS doAccesses(array1, array1, i % 4, 0, i) is 108
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 109
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 110
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 111
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 112
+PASS doAccesses(array1, array1, i % 4, 0, i) is 112
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 113
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 114
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 115
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 116
+PASS doAccesses(array1, array1, i % 4, 0, i) is 116
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 117
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 118
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 119
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 120
+PASS doAccesses(array1, array1, i % 4, 0, i) is 120
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 121
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 122
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 123
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 124
+PASS doAccesses(array1, array1, i % 4, 0, i) is 124
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 125
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 126
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 127
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 128
+PASS doAccesses(array1, array1, i % 4, 0, i) is 128
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 129
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 130
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 131
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 132
+PASS doAccesses(array1, array1, i % 4, 0, i) is 132
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 133
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 134
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 135
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 136
+PASS doAccesses(array1, array1, i % 4, 0, i) is 136
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 137
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 138
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 139
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 140
+PASS doAccesses(array1, array1, i % 4, 0, i) is 140
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 141
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 142
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 143
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 144
+PASS doAccesses(array1, array1, i % 4, 0, i) is 144
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 145
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 146
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 147
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 148
+PASS doAccesses(array1, array1, i % 4, 0, i) is 148
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 149
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 150
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 151
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 152
+PASS doAccesses(array1, array1, i % 4, 0, i) is 152
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 153
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 154
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 155
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 156
+PASS doAccesses(array1, array1, i % 4, 0, i) is 156
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 157
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 158
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 159
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 160
+PASS doAccesses(array1, array1, i % 4, 0, i) is 160
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 161
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 162
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 163
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 164
+PASS doAccesses(array1, array1, i % 4, 0, i) is 164
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 165
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 166
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 167
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 168
+PASS doAccesses(array1, array1, i % 4, 0, i) is 168
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 169
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 170
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 171
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 172
+PASS doAccesses(array1, array1, i % 4, 0, i) is 172
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 173
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 174
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 175
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 176
+PASS doAccesses(array1, array1, i % 4, 0, i) is 176
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 177
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 178
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 179
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 180
+PASS doAccesses(array1, array1, i % 4, 0, i) is 180
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 181
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 182
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 183
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 184
+PASS doAccesses(array1, array1, i % 4, 0, i) is 184
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 185
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 186
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 187
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 188
+PASS doAccesses(array1, array1, i % 4, 0, i) is 188
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 189
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 190
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 191
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 192
+PASS doAccesses(array1, array1, i % 4, 0, i) is 192
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 193
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 194
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 195
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 196
+PASS doAccesses(array1, array1, i % 4, 0, i) is 196
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 197
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 198
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 199
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 200
+PASS doAccesses(array1, array1, i % 4, 0, i) is 200
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 201
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 202
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 203
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 204
+PASS doAccesses(array1, array1, i % 4, 0, i) is 204
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 205
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 206
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 207
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 208
+PASS doAccesses(array1, array1, i % 4, 0, i) is 208
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 209
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 210
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 211
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 212
+PASS doAccesses(array1, array1, i % 4, 0, i) is 212
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 213
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 214
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 215
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 216
+PASS doAccesses(array1, array1, i % 4, 0, i) is 216
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 217
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 218
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 219
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 220
+PASS doAccesses(array1, array1, i % 4, 0, i) is 220
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 221
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 222
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 223
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 224
+PASS doAccesses(array1, array1, i % 4, 0, i) is 224
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 225
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 226
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 227
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 228
+PASS doAccesses(array1, array1, i % 4, 0, i) is 228
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 229
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 230
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 231
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 232
+PASS doAccesses(array1, array1, i % 4, 0, i) is 232
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 233
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 234
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 235
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 236
+PASS doAccesses(array1, array1, i % 4, 0, i) is 236
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 237
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 238
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 239
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 240
+PASS doAccesses(array1, array1, i % 4, 0, i) is 240
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 241
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 242
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 243
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 244
+PASS doAccesses(array1, array1, i % 4, 0, i) is 244
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 245
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 246
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 247
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 248
+PASS doAccesses(array1, array1, i % 4, 0, i) is 248
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 249
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 250
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 251
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 252
+PASS doAccesses(array1, array1, i % 4, 0, i) is 252
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 253
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 254
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 255
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 256
+PASS doAccesses(array1, array1, i % 4, 0, i) is 256
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 257
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 258
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 259
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 260
+PASS doAccesses(array1, array1, i % 4, 0, i) is 260
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 261
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 262
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 263
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 264
+PASS doAccesses(array1, array1, i % 4, 0, i) is 264
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 265
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 266
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 267
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 268
+PASS doAccesses(array1, array1, i % 4, 0, i) is 268
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 269
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 270
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 271
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 272
+PASS doAccesses(array1, array1, i % 4, 0, i) is 272
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 273
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 274
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 275
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 276
+PASS doAccesses(array1, array1, i % 4, 0, i) is 276
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 277
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 278
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 279
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 280
+PASS doAccesses(array1, array1, i % 4, 0, i) is 280
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 281
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 282
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 283
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 284
+PASS doAccesses(array1, array1, i % 4, 0, i) is 284
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 285
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 286
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 287
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 288
+PASS doAccesses(array1, array1, i % 4, 0, i) is 288
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 289
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 290
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 291
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 292
+PASS doAccesses(array1, array1, i % 4, 0, i) is 292
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 293
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 294
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 295
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 296
+PASS doAccesses(array1, array1, i % 4, 0, i) is 296
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 297
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 298
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 299
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 300
+PASS doAccesses(array1, array1, i % 4, 0, i) is 300
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 301
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 302
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 303
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 304
+PASS doAccesses(array1, array1, i % 4, 0, i) is 304
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 305
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 306
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 307
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 308
+PASS doAccesses(array1, array1, i % 4, 0, i) is 308
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 309
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 310
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 311
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 312
+PASS doAccesses(array1, array1, i % 4, 0, i) is 312
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 313
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 314
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 315
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 316
+PASS doAccesses(array1, array1, i % 4, 0, i) is 316
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 317
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 318
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 319
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 320
+PASS doAccesses(array1, array1, i % 4, 0, i) is 320
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 321
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 322
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 323
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 324
+PASS doAccesses(array1, array1, i % 4, 0, i) is 324
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 325
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 326
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 327
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 328
+PASS doAccesses(array1, array1, i % 4, 0, i) is 328
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 329
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 330
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 331
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 332
+PASS doAccesses(array1, array1, i % 4, 0, i) is 332
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 333
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 334
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 335
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 336
+PASS doAccesses(array1, array1, i % 4, 0, i) is 336
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 337
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 338
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 339
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 340
+PASS doAccesses(array1, array1, i % 4, 0, i) is 340
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 341
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 342
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 343
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 344
+PASS doAccesses(array1, array1, i % 4, 0, i) is 344
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 345
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 346
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 347
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 348
+PASS doAccesses(array1, array1, i % 4, 0, i) is 348
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 349
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 350
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 351
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 352
+PASS doAccesses(array1, array1, i % 4, 0, i) is 352
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 353
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 354
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 355
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 356
+PASS doAccesses(array1, array1, i % 4, 0, i) is 356
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 357
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 358
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 359
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 360
+PASS doAccesses(array1, array1, i % 4, 0, i) is 360
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 361
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 362
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 363
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 364
+PASS doAccesses(array1, array1, i % 4, 0, i) is 364
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 365
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 366
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 367
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 368
+PASS doAccesses(array1, array1, i % 4, 0, i) is 368
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 369
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 370
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 371
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 372
+PASS doAccesses(array1, array1, i % 4, 0, i) is 372
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 373
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 374
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 375
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 376
+PASS doAccesses(array1, array1, i % 4, 0, i) is 376
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 377
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 378
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 379
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 380
+PASS doAccesses(array1, array1, i % 4, 0, i) is 380
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 381
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 382
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 383
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 384
+PASS doAccesses(array1, array1, i % 4, 0, i) is 384
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 385
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 386
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 387
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 388
+PASS doAccesses(array1, array1, i % 4, 0, i) is 388
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 389
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 390
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 391
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 392
+PASS doAccesses(array1, array1, i % 4, 0, i) is 392
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 393
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 394
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 395
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 396
+PASS doAccesses(array1, array1, i % 4, 0, i) is 396
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 397
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 398
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 399
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 400
+PASS doAccesses(array1, array1, i % 4, 0, i) is 400
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 401
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 402
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 403
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 404
+PASS doAccesses(array1, array1, i % 4, 0, i) is 404
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 405
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 406
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 407
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 408
+PASS doAccesses(array1, array1, i % 4, 0, i) is 408
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 409
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 410
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 411
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 412
+PASS doAccesses(array1, array1, i % 4, 0, i) is 412
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 413
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 414
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 415
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 416
+PASS doAccesses(array1, array1, i % 4, 0, i) is 416
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 417
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 418
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 419
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 420
+PASS doAccesses(array1, array1, i % 4, 0, i) is 420
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 421
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 422
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 423
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 424
+PASS doAccesses(array1, array1, i % 4, 0, i) is 424
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 425
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 426
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 427
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 428
+PASS doAccesses(array1, array1, i % 4, 0, i) is 428
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 429
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 430
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 431
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 432
+PASS doAccesses(array1, array1, i % 4, 0, i) is 432
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 433
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 434
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 435
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 436
+PASS doAccesses(array1, array1, i % 4, 0, i) is 436
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 437
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 438
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 439
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 440
+PASS doAccesses(array1, array1, i % 4, 0, i) is 440
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 441
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 442
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 443
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 444
+PASS doAccesses(array1, array1, i % 4, 0, i) is 444
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 445
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 446
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 447
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 448
+PASS doAccesses(array1, array1, i % 4, 0, i) is 448
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 449
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 450
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 451
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 452
+PASS doAccesses(array1, array1, i % 4, 0, i) is 452
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 453
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 454
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 455
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 456
+PASS doAccesses(array1, array1, i % 4, 0, i) is 456
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 457
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 458
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 459
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 460
+PASS doAccesses(array1, array1, i % 4, 0, i) is 460
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 461
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 462
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 463
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 464
+PASS doAccesses(array1, array1, i % 4, 0, i) is 464
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 465
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 466
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 467
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 468
+PASS doAccesses(array1, array1, i % 4, 0, i) is 468
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 469
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 470
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 471
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 472
+PASS doAccesses(array1, array1, i % 4, 0, i) is 472
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 473
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 474
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 475
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 476
+PASS doAccesses(array1, array1, i % 4, 0, i) is 476
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 477
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 478
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 479
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 480
+PASS doAccesses(array1, array1, i % 4, 0, i) is 480
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 481
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 482
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 483
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 484
+PASS doAccesses(array1, array1, i % 4, 0, i) is 484
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 485
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 486
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 487
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 488
+PASS doAccesses(array1, array1, i % 4, 0, i) is 488
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 489
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 490
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 491
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 492
+PASS doAccesses(array1, array1, i % 4, 0, i) is 492
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 493
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 494
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 495
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 496
+PASS doAccesses(array1, array1, i % 4, 0, i) is 496
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 497
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 498
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 499
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 500
+PASS doAccesses(array1, array1, i % 4, 0, i) is 500
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 501
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 502
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 503
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 504
+PASS doAccesses(array1, array1, i % 4, 0, i) is 504
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 505
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 506
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 507
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 508
+PASS doAccesses(array1, array1, i % 4, 0, i) is 508
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 509
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 510
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 511
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 512
+PASS doAccesses(array1, array1, i % 4, 0, i) is 512
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 513
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 514
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 515
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 516
+PASS doAccesses(array1, array1, i % 4, 0, i) is 516
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 517
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 518
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 519
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 520
+PASS doAccesses(array1, array1, i % 4, 0, i) is 520
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 521
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 522
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 523
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 524
+PASS doAccesses(array1, array1, i % 4, 0, i) is 524
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 525
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 526
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 527
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 528
+PASS doAccesses(array1, array1, i % 4, 0, i) is 528
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 529
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 530
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 531
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 532
+PASS doAccesses(array1, array1, i % 4, 0, i) is 532
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 533
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 534
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 535
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 536
+PASS doAccesses(array1, array1, i % 4, 0, i) is 536
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 537
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 538
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 539
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 540
+PASS doAccesses(array1, array1, i % 4, 0, i) is 540
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 541
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 542
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 543
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 544
+PASS doAccesses(array1, array1, i % 4, 0, i) is 544
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 545
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 546
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 547
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 548
+PASS doAccesses(array1, array1, i % 4, 0, i) is 548
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 549
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 550
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 551
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 552
+PASS doAccesses(array1, array1, i % 4, 0, i) is 552
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 553
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 554
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 555
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 556
+PASS doAccesses(array1, array1, i % 4, 0, i) is 556
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 557
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 558
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 559
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 560
+PASS doAccesses(array1, array1, i % 4, 0, i) is 560
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 561
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 562
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 563
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 564
+PASS doAccesses(array1, array1, i % 4, 0, i) is 564
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 565
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 566
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 567
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 568
+PASS doAccesses(array1, array1, i % 4, 0, i) is 568
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 569
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 570
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 571
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 572
+PASS doAccesses(array1, array1, i % 4, 0, i) is 572
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 573
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 574
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 575
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 576
+PASS doAccesses(array1, array1, i % 4, 0, i) is 576
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 577
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 578
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 579
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 580
+PASS doAccesses(array1, array1, i % 4, 0, i) is 580
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 581
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 582
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 583
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 584
+PASS doAccesses(array1, array1, i % 4, 0, i) is 584
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 585
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 586
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 587
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 588
+PASS doAccesses(array1, array1, i % 4, 0, i) is 588
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 589
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 590
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 591
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 592
+PASS doAccesses(array1, array1, i % 4, 0, i) is 592
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 593
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 594
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 595
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 596
+PASS doAccesses(array1, array1, i % 4, 0, i) is 596
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 597
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 598
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 599
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 600
+PASS doAccesses(array1, array1, i % 4, 0, i) is 600
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 601
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 602
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 603
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 604
+PASS doAccesses(array1, array1, i % 4, 0, i) is 604
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 605
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 606
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 607
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 608
+PASS doAccesses(array1, array1, i % 4, 0, i) is 608
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 609
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 610
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 611
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 612
+PASS doAccesses(array1, array1, i % 4, 0, i) is 612
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 613
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 614
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 615
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 616
+PASS doAccesses(array1, array1, i % 4, 0, i) is 616
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 617
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 618
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 619
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 620
+PASS doAccesses(array1, array1, i % 4, 0, i) is 620
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 621
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 622
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 623
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 624
+PASS doAccesses(array1, array1, i % 4, 0, i) is 624
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 625
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 626
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 627
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 628
+PASS doAccesses(array1, array1, i % 4, 0, i) is 628
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 629
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 630
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 631
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 632
+PASS doAccesses(array1, array1, i % 4, 0, i) is 632
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 633
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 634
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 635
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 636
+PASS doAccesses(array1, array1, i % 4, 0, i) is 636
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 637
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 638
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 639
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 640
+PASS doAccesses(array1, array1, i % 4, 0, i) is 640
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 641
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 642
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 643
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 644
+PASS doAccesses(array1, array1, i % 4, 0, i) is 644
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 645
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 646
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 647
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 648
+PASS doAccesses(array1, array1, i % 4, 0, i) is 648
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 649
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 650
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 651
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 652
+PASS doAccesses(array1, array1, i % 4, 0, i) is 652
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 653
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 654
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 655
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 656
+PASS doAccesses(array1, array1, i % 4, 0, i) is 656
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 657
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 658
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 659
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 660
+PASS doAccesses(array1, array1, i % 4, 0, i) is 660
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 661
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 662
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 663
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 664
+PASS doAccesses(array1, array1, i % 4, 0, i) is 664
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 665
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 666
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 667
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 668
+PASS doAccesses(array1, array1, i % 4, 0, i) is 668
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 669
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 670
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 671
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 672
+PASS doAccesses(array1, array1, i % 4, 0, i) is 672
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 673
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 674
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 675
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 676
+PASS doAccesses(array1, array1, i % 4, 0, i) is 676
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 677
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 678
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 679
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 680
+PASS doAccesses(array1, array1, i % 4, 0, i) is 680
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 681
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 682
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 683
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 684
+PASS doAccesses(array1, array1, i % 4, 0, i) is 684
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 685
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 686
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 687
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 688
+PASS doAccesses(array1, array1, i % 4, 0, i) is 688
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 689
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 690
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 691
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 692
+PASS doAccesses(array1, array1, i % 4, 0, i) is 692
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 693
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 694
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 695
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 696
+PASS doAccesses(array1, array1, i % 4, 0, i) is 696
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 697
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 698
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 699
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 700
+PASS doAccesses(array1, array1, i % 4, 0, i) is 700
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 701
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 702
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 703
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 704
+PASS doAccesses(array1, array1, i % 4, 0, i) is 704
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 705
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 706
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 707
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 708
+PASS doAccesses(array1, array1, i % 4, 0, i) is 708
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 709
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 710
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 711
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 712
+PASS doAccesses(array1, array1, i % 4, 0, i) is 712
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 713
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 714
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 715
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 716
+PASS doAccesses(array1, array1, i % 4, 0, i) is 716
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 717
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 718
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 719
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 720
+PASS doAccesses(array1, array1, i % 4, 0, i) is 720
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 721
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 722
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 723
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 724
+PASS doAccesses(array1, array1, i % 4, 0, i) is 724
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 725
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 726
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 727
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 728
+PASS doAccesses(array1, array1, i % 4, 0, i) is 728
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 729
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 730
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 731
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 732
+PASS doAccesses(array1, array1, i % 4, 0, i) is 732
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 733
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 734
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 735
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 736
+PASS doAccesses(array1, array1, i % 4, 0, i) is 736
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 737
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 738
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 739
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 740
+PASS doAccesses(array1, array1, i % 4, 0, i) is 740
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 741
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 742
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 743
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 744
+PASS doAccesses(array1, array1, i % 4, 0, i) is 744
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 745
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 746
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 747
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 748
+PASS doAccesses(array1, array1, i % 4, 0, i) is 748
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 749
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 750
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 751
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 752
+PASS doAccesses(array1, array1, i % 4, 0, i) is 752
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 753
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 754
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 755
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 756
+PASS doAccesses(array1, array1, i % 4, 0, i) is 756
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 757
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 758
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 759
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 760
+PASS doAccesses(array1, array1, i % 4, 0, i) is 760
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 761
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 762
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 763
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 764
+PASS doAccesses(array1, array1, i % 4, 0, i) is 764
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 765
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 766
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 767
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 768
+PASS doAccesses(array1, array1, i % 4, 0, i) is 768
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 769
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 770
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 771
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 772
+PASS doAccesses(array1, array1, i % 4, 0, i) is 772
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 773
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 774
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 775
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 776
+PASS doAccesses(array1, array1, i % 4, 0, i) is 776
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 777
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 778
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 779
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 780
+PASS doAccesses(array1, array1, i % 4, 0, i) is 780
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 781
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 782
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 783
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 784
+PASS doAccesses(array1, array1, i % 4, 0, i) is 784
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 785
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 786
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 787
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 788
+PASS doAccesses(array1, array1, i % 4, 0, i) is 788
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 789
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 790
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 791
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 792
+PASS doAccesses(array1, array1, i % 4, 0, i) is 792
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 793
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 794
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 795
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 796
+PASS doAccesses(array1, array1, i % 4, 0, i) is 796
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 797
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 798
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 799
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 800
+PASS doAccesses(array1, array1, i % 4, 0, i) is 800
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 801
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 802
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 803
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 804
+PASS doAccesses(array1, array1, i % 4, 0, i) is 804
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 805
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 806
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 807
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 808
+PASS doAccesses(array1, array1, i % 4, 0, i) is 808
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 809
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 810
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 811
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 812
+PASS doAccesses(array1, array1, i % 4, 0, i) is 812
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 813
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 814
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 815
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 816
+PASS doAccesses(array1, array1, i % 4, 0, i) is 816
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 817
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 818
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 819
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 820
+PASS doAccesses(array1, array1, i % 4, 0, i) is 820
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 821
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 822
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 823
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 824
+PASS doAccesses(array1, array1, i % 4, 0, i) is 824
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 825
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 826
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 827
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 828
+PASS doAccesses(array1, array1, i % 4, 0, i) is 828
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 829
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 830
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 831
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 832
+PASS doAccesses(array1, array1, i % 4, 0, i) is 832
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 833
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 834
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 835
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 836
+PASS doAccesses(array1, array1, i % 4, 0, i) is 836
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 837
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 838
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 839
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 840
+PASS doAccesses(array1, array1, i % 4, 0, i) is 840
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 841
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 842
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 843
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 844
+PASS doAccesses(array1, array1, i % 4, 0, i) is 844
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 845
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 846
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 847
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 848
+PASS doAccesses(array1, array1, i % 4, 0, i) is 848
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 849
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 850
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 851
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 852
+PASS doAccesses(array1, array1, i % 4, 0, i) is 852
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 853
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 854
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 855
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 856
+PASS doAccesses(array1, array1, i % 4, 0, i) is 856
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 857
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 858
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 859
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 860
+PASS doAccesses(array1, array1, i % 4, 0, i) is 860
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 861
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 862
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 863
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 864
+PASS doAccesses(array1, array1, i % 4, 0, i) is 864
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 865
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 866
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 867
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 868
+PASS doAccesses(array1, array1, i % 4, 0, i) is 868
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 869
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 870
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 871
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 872
+PASS doAccesses(array1, array1, i % 4, 0, i) is 872
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 873
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 874
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 875
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 876
+PASS doAccesses(array1, array1, i % 4, 0, i) is 876
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 877
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 878
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 879
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 880
+PASS doAccesses(array1, array1, i % 4, 0, i) is 880
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 881
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 882
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 883
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 884
+PASS doAccesses(array1, array1, i % 4, 0, i) is 884
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 885
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 886
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 887
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 888
+PASS doAccesses(array1, array1, i % 4, 0, i) is 888
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 889
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 890
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 891
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 892
+PASS doAccesses(array1, array1, i % 4, 0, i) is 892
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 893
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 894
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 895
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 896
+PASS doAccesses(array1, array1, i % 4, 0, i) is 896
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 897
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 898
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 899
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 900
+PASS doAccesses(array1, array1, i % 4, 0, i) is 900
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 901
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 902
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 903
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 904
+PASS doAccesses(array1, array1, i % 4, 0, i) is 904
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 905
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 906
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 907
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 908
+PASS doAccesses(array1, array1, i % 4, 0, i) is 908
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 909
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 910
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 911
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 912
+PASS doAccesses(array1, array1, i % 4, 0, i) is 912
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 913
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 914
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 915
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 916
+PASS doAccesses(array1, array1, i % 4, 0, i) is 916
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 917
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 918
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 919
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 920
+PASS doAccesses(array1, array1, i % 4, 0, i) is 920
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 921
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 922
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 923
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 924
+PASS doAccesses(array1, array1, i % 4, 0, i) is 924
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 925
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 926
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 927
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 928
+PASS doAccesses(array1, array1, i % 4, 0, i) is 928
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 929
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 930
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 931
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 932
+PASS doAccesses(array1, array1, i % 4, 0, i) is 932
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 933
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 934
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 935
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 936
+PASS doAccesses(array1, array1, i % 4, 0, i) is 936
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 937
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 938
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 939
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 940
+PASS doAccesses(array1, array1, i % 4, 0, i) is 940
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 941
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 942
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 943
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 944
+PASS doAccesses(array1, array1, i % 4, 0, i) is 944
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 945
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 946
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 947
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 948
+PASS doAccesses(array1, array1, i % 4, 0, i) is 948
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 949
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 950
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 951
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 952
+PASS doAccesses(array1, array1, i % 4, 0, i) is 952
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 953
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 954
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 955
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 956
+PASS doAccesses(array1, array1, i % 4, 0, i) is 956
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 957
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 958
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 959
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 960
+PASS doAccesses(array1, array1, i % 4, 0, i) is 960
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 961
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 962
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 963
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 964
+PASS doAccesses(array1, array1, i % 4, 0, i) is 964
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 965
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 966
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 967
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 968
+PASS doAccesses(array1, array1, i % 4, 0, i) is 968
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 969
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 970
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 971
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 972
+PASS doAccesses(array1, array1, i % 4, 0, i) is 972
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 973
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 974
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 975
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 976
+PASS doAccesses(array1, array1, i % 4, 0, i) is 976
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 977
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 978
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 979
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 980
+PASS doAccesses(array1, array1, i % 4, 0, i) is 980
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 981
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 982
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 983
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 984
+PASS doAccesses(array1, array1, i % 4, 0, i) is 984
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 985
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 986
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 987
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 988
+PASS doAccesses(array1, array1, i % 4, 0, i) is 988
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 989
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 990
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 991
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 992
+PASS doAccesses(array1, array1, i % 4, 0, i) is 992
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 993
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 994
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 995
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 996
+PASS doAccesses(array1, array1, i % 4, 0, i) is 996
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 997
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 998
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 999
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-get-by-val-clobber.js b/deps/v8/test/webkit/dfg-get-by-val-clobber.js
new file mode 100644 (file)
index 0000000..c6c57fe
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that common subexpression elimination knows how to accurately model PutBuVal."
+);
+
+function doAccesses(a, b, i, j, y) {
+    var x = a[i];
+    b[j] = y;
+    return a[i];
+}
+
+var array1 = [1, 2, 3, 4];
+var array2 = [5, 6, 7, 8];
+
+for (var i = 0; i < 1000; ++i) {
+    // Simple test, pretty easy to pass.
+    shouldBe("doAccesses(array1, array2, i % 4, (i + 1) % 4, i)", "" + ((i % 4) + 1));
+    shouldBe("array2[" + ((i + 1) % 4) + "]", "" + i);
+
+    // Undo.
+    array2[((i + 1) % 4)] = (i % 4) + 5;
+
+    // Now the evil test. This is constructed to minimize the likelihood that CSE will succeed through
+    // cleverness alone.
+    shouldBe("doAccesses(array1, array1, i % 4, 0, i)", "" + ((i % 4) == 0 ? i : (i % 4) + 1));
+
+    // Undo.
+    array1[0] = 1;
+}
+
diff --git a/deps/v8/test/webkit/dfg-getter-expected.txt b/deps/v8/test/webkit/dfg-getter-expected.txt
new file mode 100644 (file)
index 0000000..41fa3ad
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that DFG getter caching does not break the world.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(o) is 0
+PASS foo(o) is 1
+PASS foo(o) is 2
+PASS foo(o) is 3
+PASS foo(o) is 4
+PASS foo(o) is 5
+PASS foo(o) is 6
+PASS foo(o) is 7
+PASS foo(o) is 8
+PASS foo(o) is 9
+PASS foo(o) is 10
+PASS foo(o) is 11
+PASS foo(o) is 12
+PASS foo(o) is 13
+PASS foo(o) is 14
+PASS foo(o) is 15
+PASS foo(o) is 16
+PASS foo(o) is 17
+PASS foo(o) is 18
+PASS foo(o) is 19
+PASS foo(o) is 20
+PASS foo(o) is 21
+PASS foo(o) is 22
+PASS foo(o) is 23
+PASS foo(o) is 24
+PASS foo(o) is 25
+PASS foo(o) is 26
+PASS foo(o) is 27
+PASS foo(o) is 28
+PASS foo(o) is 29
+PASS foo(o) is 30
+PASS foo(o) is 31
+PASS foo(o) is 32
+PASS foo(o) is 33
+PASS foo(o) is 34
+PASS foo(o) is 35
+PASS foo(o) is 36
+PASS foo(o) is 37
+PASS foo(o) is 38
+PASS foo(o) is 39
+PASS foo(o) is 40
+PASS foo(o) is 41
+PASS foo(o) is 42
+PASS foo(o) is 43
+PASS foo(o) is 44
+PASS foo(o) is 45
+PASS foo(o) is 46
+PASS foo(o) is 47
+PASS foo(o) is 48
+PASS foo(o) is 49
+PASS foo(o) is 50
+PASS foo(o) is 51
+PASS foo(o) is 52
+PASS foo(o) is 53
+PASS foo(o) is 54
+PASS foo(o) is 55
+PASS foo(o) is 56
+PASS foo(o) is 57
+PASS foo(o) is 58
+PASS foo(o) is 59
+PASS foo(o) is 60
+PASS foo(o) is 61
+PASS foo(o) is 62
+PASS foo(o) is 63
+PASS foo(o) is 64
+PASS foo(o) is 65
+PASS foo(o) is 66
+PASS foo(o) is 67
+PASS foo(o) is 68
+PASS foo(o) is 69
+PASS foo(o) is 70
+PASS foo(o) is 71
+PASS foo(o) is 72
+PASS foo(o) is 73
+PASS foo(o) is 74
+PASS foo(o) is 75
+PASS foo(o) is 76
+PASS foo(o) is 77
+PASS foo(o) is 78
+PASS foo(o) is 79
+PASS foo(o) is 80
+PASS foo(o) is 81
+PASS foo(o) is 82
+PASS foo(o) is 83
+PASS foo(o) is 84
+PASS foo(o) is 85
+PASS foo(o) is 86
+PASS foo(o) is 87
+PASS foo(o) is 88
+PASS foo(o) is 89
+PASS foo(o) is 90
+PASS foo(o) is 91
+PASS foo(o) is 92
+PASS foo(o) is 93
+PASS foo(o) is 94
+PASS foo(o) is 95
+PASS foo(o) is 96
+PASS foo(o) is 97
+PASS foo(o) is 98
+PASS foo(o) is 99
+PASS foo(o) is 100
+PASS foo(o) is 101
+PASS foo(o) is 102
+PASS foo(o) is 103
+PASS foo(o) is 104
+PASS foo(o) is 105
+PASS foo(o) is 106
+PASS foo(o) is 107
+PASS foo(o) is 108
+PASS foo(o) is 109
+PASS foo(o) is 110
+PASS foo(o) is 111
+PASS foo(o) is 112
+PASS foo(o) is 113
+PASS foo(o) is 114
+PASS foo(o) is 115
+PASS foo(o) is 116
+PASS foo(o) is 117
+PASS foo(o) is 118
+PASS foo(o) is 119
+PASS foo(o) is 120
+PASS foo(o) is 121
+PASS foo(o) is 122
+PASS foo(o) is 123
+PASS foo(o) is 124
+PASS foo(o) is 125
+PASS foo(o) is 126
+PASS foo(o) is 127
+PASS foo(o) is 128
+PASS foo(o) is 129
+PASS foo(o) is 130
+PASS foo(o) is 131
+PASS foo(o) is 132
+PASS foo(o) is 133
+PASS foo(o) is 134
+PASS foo(o) is 135
+PASS foo(o) is 136
+PASS foo(o) is 137
+PASS foo(o) is 138
+PASS foo(o) is 139
+PASS foo(o) is 140
+PASS foo(o) is 141
+PASS foo(o) is 142
+PASS foo(o) is 143
+PASS foo(o) is 144
+PASS foo(o) is 145
+PASS foo(o) is 146
+PASS foo(o) is 147
+PASS foo(o) is 148
+PASS foo(o) is 149
+PASS foo(o) is 150
+PASS foo(o) is 151
+PASS foo(o) is 152
+PASS foo(o) is 153
+PASS foo(o) is 154
+PASS foo(o) is 155
+PASS foo(o) is 156
+PASS foo(o) is 157
+PASS foo(o) is 158
+PASS foo(o) is 159
+PASS foo(o) is 160
+PASS foo(o) is 161
+PASS foo(o) is 162
+PASS foo(o) is 163
+PASS foo(o) is 164
+PASS foo(o) is 165
+PASS foo(o) is 166
+PASS foo(o) is 167
+PASS foo(o) is 168
+PASS foo(o) is 169
+PASS foo(o) is 170
+PASS foo(o) is 171
+PASS foo(o) is 172
+PASS foo(o) is 173
+PASS foo(o) is 174
+PASS foo(o) is 175
+PASS foo(o) is 176
+PASS foo(o) is 177
+PASS foo(o) is 178
+PASS foo(o) is 179
+PASS foo(o) is 180
+PASS foo(o) is 181
+PASS foo(o) is 182
+PASS foo(o) is 183
+PASS foo(o) is 184
+PASS foo(o) is 185
+PASS foo(o) is 186
+PASS foo(o) is 187
+PASS foo(o) is 188
+PASS foo(o) is 189
+PASS foo(o) is 190
+PASS foo(o) is 191
+PASS foo(o) is 192
+PASS foo(o) is 193
+PASS foo(o) is 194
+PASS foo(o) is 195
+PASS foo(o) is 196
+PASS foo(o) is 197
+PASS foo(o) is 198
+PASS foo(o) is 199
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-getter-throw-expected.txt b/deps/v8/test/webkit/dfg-getter-throw-expected.txt
new file mode 100644 (file)
index 0000000..d56ea1f
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that DFG getter caching does not break the world if the getter throws an exception.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(o) is "Returned result: 0"
+PASS bar(o) is "Returned result: 1"
+PASS bar(o) is "Returned result: 2"
+PASS bar(o) is "Returned result: 3"
+PASS bar(o) is "Returned result: 4"
+PASS bar(o) is "Returned result: 5"
+PASS bar(o) is "Returned result: 6"
+PASS bar(o) is "Returned result: 7"
+PASS bar(o) is "Returned result: 8"
+PASS bar(o) is "Returned result: 9"
+PASS bar(o) is "Returned result: 10"
+PASS bar(o) is "Returned result: 11"
+PASS bar(o) is "Returned result: 12"
+PASS bar(o) is "Returned result: 13"
+PASS bar(o) is "Returned result: 14"
+PASS bar(o) is "Returned result: 15"
+PASS bar(o) is "Returned result: 16"
+PASS bar(o) is "Returned result: 17"
+PASS bar(o) is "Returned result: 18"
+PASS bar(o) is "Returned result: 19"
+PASS bar(o) is "Returned result: 20"
+PASS bar(o) is "Returned result: 21"
+PASS bar(o) is "Returned result: 22"
+PASS bar(o) is "Returned result: 23"
+PASS bar(o) is "Returned result: 24"
+PASS bar(o) is "Returned result: 25"
+PASS bar(o) is "Returned result: 26"
+PASS bar(o) is "Returned result: 27"
+PASS bar(o) is "Returned result: 28"
+PASS bar(o) is "Returned result: 29"
+PASS bar(o) is "Returned result: 30"
+PASS bar(o) is "Returned result: 31"
+PASS bar(o) is "Returned result: 32"
+PASS bar(o) is "Returned result: 33"
+PASS bar(o) is "Returned result: 34"
+PASS bar(o) is "Returned result: 35"
+PASS bar(o) is "Returned result: 36"
+PASS bar(o) is "Returned result: 37"
+PASS bar(o) is "Returned result: 38"
+PASS bar(o) is "Returned result: 39"
+PASS bar(o) is "Returned result: 40"
+PASS bar(o) is "Returned result: 41"
+PASS bar(o) is "Returned result: 42"
+PASS bar(o) is "Returned result: 43"
+PASS bar(o) is "Returned result: 44"
+PASS bar(o) is "Returned result: 45"
+PASS bar(o) is "Returned result: 46"
+PASS bar(o) is "Returned result: 47"
+PASS bar(o) is "Returned result: 48"
+PASS bar(o) is "Returned result: 49"
+PASS bar(o) is "Returned result: 50"
+PASS bar(o) is "Returned result: 51"
+PASS bar(o) is "Returned result: 52"
+PASS bar(o) is "Returned result: 53"
+PASS bar(o) is "Returned result: 54"
+PASS bar(o) is "Returned result: 55"
+PASS bar(o) is "Returned result: 56"
+PASS bar(o) is "Returned result: 57"
+PASS bar(o) is "Returned result: 58"
+PASS bar(o) is "Returned result: 59"
+PASS bar(o) is "Returned result: 60"
+PASS bar(o) is "Returned result: 61"
+PASS bar(o) is "Returned result: 62"
+PASS bar(o) is "Returned result: 63"
+PASS bar(o) is "Returned result: 64"
+PASS bar(o) is "Returned result: 65"
+PASS bar(o) is "Returned result: 66"
+PASS bar(o) is "Returned result: 67"
+PASS bar(o) is "Returned result: 68"
+PASS bar(o) is "Returned result: 69"
+PASS bar(o) is "Returned result: 70"
+PASS bar(o) is "Returned result: 71"
+PASS bar(o) is "Returned result: 72"
+PASS bar(o) is "Returned result: 73"
+PASS bar(o) is "Returned result: 74"
+PASS bar(o) is "Returned result: 75"
+PASS bar(o) is "Returned result: 76"
+PASS bar(o) is "Returned result: 77"
+PASS bar(o) is "Returned result: 78"
+PASS bar(o) is "Returned result: 79"
+PASS bar(o) is "Returned result: 80"
+PASS bar(o) is "Returned result: 81"
+PASS bar(o) is "Returned result: 82"
+PASS bar(o) is "Returned result: 83"
+PASS bar(o) is "Returned result: 84"
+PASS bar(o) is "Returned result: 85"
+PASS bar(o) is "Returned result: 86"
+PASS bar(o) is "Returned result: 87"
+PASS bar(o) is "Returned result: 88"
+PASS bar(o) is "Returned result: 89"
+PASS bar(o) is "Returned result: 90"
+PASS bar(o) is "Returned result: 91"
+PASS bar(o) is "Returned result: 92"
+PASS bar(o) is "Returned result: 93"
+PASS bar(o) is "Returned result: 94"
+PASS bar(o) is "Returned result: 95"
+PASS bar(o) is "Returned result: 96"
+PASS bar(o) is "Returned result: 97"
+PASS bar(o) is "Returned result: 98"
+PASS bar(o) is "Returned result: 99"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-getter-throw.js b/deps/v8/test/webkit/dfg-getter-throw.js
new file mode 100644 (file)
index 0000000..c77b33d
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that DFG getter caching does not break the world if the getter throws an exception."
+);
+
+function foo(o) {
+    return o.f;
+}
+
+function bar(o) {
+    try {
+        return "Returned result: " + foo(o);
+    } catch (e) {
+        return "Threw exception: " + e;
+    }
+}
+
+for (var i = 0; i < 200; ++i) {
+    var o = new Object();
+    o.__defineGetter__("f", function(){
+        if (i < 100)
+            return i;
+        else
+            throw "Oh hi, I'm an exception!";
+    });
+    shouldBe("bar(o)", i < 100 ? "\"Returned result: " + i + "\"" : "\"Threw exception: Oh hi, I'm an exception!\"");
+}
+
+
diff --git a/deps/v8/test/webkit/dfg-getter.js b/deps/v8/test/webkit/dfg-getter.js
new file mode 100644 (file)
index 0000000..dafd9f9
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that DFG getter caching does not break the world."
+);
+
+function foo(o) {
+    return o.f;
+}
+
+for (var i = 0; i < 200; ++i) {
+    var o = new Object();
+    o.__defineGetter__("f", function(){ return i; });
+    shouldBe("foo(o)", "" + i);
+}
+
+
diff --git a/deps/v8/test/webkit/dfg-holy-put-by-val-interferes-with-get-array-length-expected.txt b/deps/v8/test/webkit/dfg-holy-put-by-val-interferes-with-get-array-length-expected.txt
new file mode 100644 (file)
index 0000000..265b72d
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG's interference analysis knows that a holy PutByVal interferes with a GetArrayLength.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-holy-put-by-val-interferes-with-get-array-length.js b/deps/v8/test/webkit/dfg-holy-put-by-val-interferes-with-get-array-length.js
new file mode 100644 (file)
index 0000000..684ebe8
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG's interference analysis knows that a holy PutByVal interferes with a GetArrayLength."
+);
+
+function foo(array) {
+    var x = array.length;
+    array[1] = 42;
+    return [x, array.length];
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo([75])", "[1,2]");
+
+
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-become-double-expected.txt b/deps/v8/test/webkit/dfg-inline-arguments-become-double-expected.txt
new file mode 100644 (file)
index 0000000..b11b6ae
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining preserves function.arguments functionality if the arguments are reassigned to refer to an int32.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a0, 42.5, c0"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a1, 42.5, c1"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a2, 42.5, c2"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a3, 42.5, c3"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a4, 42.5, c4"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a5, 42.5, c5"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a6, 42.5, c6"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a7, 42.5, c7"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a8, 42.5, c8"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a9, 42.5, c9"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a10, 42.5, c10"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a11, 42.5, c11"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a12, 42.5, c12"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a13, 42.5, c13"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a14, 42.5, c14"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a15, 42.5, c15"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a16, 42.5, c16"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a17, 42.5, c17"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a18, 42.5, c18"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a19, 42.5, c19"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a20, 42.5, c20"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a21, 42.5, c21"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a22, 42.5, c22"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a23, 42.5, c23"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a24, 42.5, c24"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a25, 42.5, c25"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a26, 42.5, c26"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a27, 42.5, c27"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a28, 42.5, c28"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a29, 42.5, c29"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a30, 42.5, c30"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a31, 42.5, c31"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a32, 42.5, c32"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a33, 42.5, c33"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a34, 42.5, c34"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a35, 42.5, c35"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a36, 42.5, c36"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a37, 42.5, c37"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a38, 42.5, c38"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a39, 42.5, c39"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a40, 42.5, c40"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a41, 42.5, c41"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a42, 42.5, c42"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a43, 42.5, c43"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a44, 42.5, c44"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a45, 42.5, c45"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a46, 42.5, c46"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a47, 42.5, c47"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a48, 42.5, c48"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a49, 42.5, c49"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a50, 42.5, c50"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a51, 42.5, c51"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a52, 42.5, c52"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a53, 42.5, c53"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a54, 42.5, c54"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a55, 42.5, c55"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a56, 42.5, c56"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a57, 42.5, c57"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a58, 42.5, c58"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a59, 42.5, c59"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a60, 42.5, c60"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a61, 42.5, c61"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a62, 42.5, c62"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a63, 42.5, c63"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a64, 42.5, c64"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a65, 42.5, c65"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a66, 42.5, c66"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a67, 42.5, c67"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a68, 42.5, c68"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a69, 42.5, c69"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a70, 42.5, c70"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a71, 42.5, c71"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a72, 42.5, c72"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a73, 42.5, c73"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a74, 42.5, c74"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a75, 42.5, c75"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a76, 42.5, c76"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a77, 42.5, c77"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a78, 42.5, c78"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a79, 42.5, c79"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a80, 42.5, c80"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a81, 42.5, c81"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a82, 42.5, c82"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a83, 42.5, c83"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a84, 42.5, c84"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a85, 42.5, c85"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a86, 42.5, c86"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a87, 42.5, c87"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a88, 42.5, c88"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a89, 42.5, c89"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a90, 42.5, c90"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a91, 42.5, c91"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a92, 42.5, c92"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a93, 42.5, c93"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a94, 42.5, c94"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a95, 42.5, c95"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a96, 42.5, c96"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a97, 42.5, c97"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a98, 42.5, c98"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a99, 42.5, c99"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a100, 42.5, c100"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a101, 42.5, c101"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a102, 42.5, c102"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a103, 42.5, c103"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a104, 42.5, c104"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a105, 42.5, c105"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a106, 42.5, c106"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a107, 42.5, c107"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a108, 42.5, c108"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a109, 42.5, c109"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a110, 42.5, c110"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a111, 42.5, c111"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a112, 42.5, c112"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a113, 42.5, c113"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a114, 42.5, c114"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a115, 42.5, c115"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a116, 42.5, c116"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a117, 42.5, c117"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a118, 42.5, c118"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a119, 42.5, c119"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a120, 42.5, c120"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a121, 42.5, c121"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a122, 42.5, c122"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a123, 42.5, c123"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a124, 42.5, c124"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a125, 42.5, c125"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a126, 42.5, c126"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a127, 42.5, c127"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a128, 42.5, c128"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a129, 42.5, c129"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a130, 42.5, c130"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a131, 42.5, c131"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a132, 42.5, c132"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a133, 42.5, c133"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a134, 42.5, c134"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a135, 42.5, c135"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a136, 42.5, c136"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a137, 42.5, c137"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a138, 42.5, c138"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a139, 42.5, c139"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a140, 42.5, c140"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a141, 42.5, c141"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a142, 42.5, c142"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a143, 42.5, c143"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a144, 42.5, c144"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a145, 42.5, c145"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a146, 42.5, c146"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a147, 42.5, c147"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a148, 42.5, c148"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a149, 42.5, c149"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a150, 42.5, c150"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a151, 42.5, c151"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a152, 42.5, c152"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a153, 42.5, c153"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a154, 42.5, c154"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a155, 42.5, c155"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a156, 42.5, c156"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a157, 42.5, c157"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a158, 42.5, c158"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a159, 42.5, c159"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a160, 42.5, c160"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a161, 42.5, c161"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a162, 42.5, c162"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a163, 42.5, c163"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a164, 42.5, c164"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a165, 42.5, c165"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a166, 42.5, c166"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a167, 42.5, c167"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a168, 42.5, c168"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a169, 42.5, c169"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a170, 42.5, c170"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a171, 42.5, c171"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a172, 42.5, c172"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a173, 42.5, c173"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a174, 42.5, c174"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a175, 42.5, c175"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a176, 42.5, c176"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a177, 42.5, c177"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a178, 42.5, c178"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a179, 42.5, c179"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a180, 42.5, c180"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a181, 42.5, c181"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a182, 42.5, c182"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a183, 42.5, c183"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a184, 42.5, c184"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a185, 42.5, c185"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a186, 42.5, c186"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a187, 42.5, c187"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a188, 42.5, c188"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a189, 42.5, c189"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a190, 42.5, c190"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a191, 42.5, c191"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a192, 42.5, c192"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a193, 42.5, c193"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a194, 42.5, c194"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a195, 42.5, c195"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a196, 42.5, c196"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a197, 42.5, c197"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a198, 42.5, c198"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a199, 42.5, c199"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-become-double.js b/deps/v8/test/webkit/dfg-inline-arguments-become-double.js
new file mode 100644 (file)
index 0000000..b7db7ec
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining preserves function.arguments functionality if the arguments are reassigned to refer to an int32."
+);
+
+function foo() {
+    return bar.arguments;
+}
+
+function bar(a,b,c) {
+    b = 42.5;
+    return foo(a,b,c);
+}
+
+function baz(a,b,c) {
+    return bar(a,b,c);
+}
+
+function argsToStr(args) {
+    var str = args + ": ";
+    for (var i = 0; i < args.length; ++i) {
+        if (i)
+            str += ", ";
+        str += args[i];
+    }
+    return str;
+}
+
+for (var __i = 0; __i < 200; ++__i)
+    shouldBe("argsToStr(baz(\"a\" + __i, \"b\" + __i, \"c\" + __i))", "\"[object Arguments]: a" + __i + ", 42.5, c" + __i + "\"");
+
+var successfullyParsed = true;
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-become-int32-expected.txt b/deps/v8/test/webkit/dfg-inline-arguments-become-int32-expected.txt
new file mode 100644 (file)
index 0000000..e4a4ab0
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining preserves function.arguments functionality if the arguments are reassigned to refer to an int32.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a0, 42, c0"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a1, 42, c1"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a2, 42, c2"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a3, 42, c3"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a4, 42, c4"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a5, 42, c5"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a6, 42, c6"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a7, 42, c7"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a8, 42, c8"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a9, 42, c9"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a10, 42, c10"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a11, 42, c11"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a12, 42, c12"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a13, 42, c13"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a14, 42, c14"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a15, 42, c15"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a16, 42, c16"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a17, 42, c17"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a18, 42, c18"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a19, 42, c19"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a20, 42, c20"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a21, 42, c21"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a22, 42, c22"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a23, 42, c23"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a24, 42, c24"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a25, 42, c25"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a26, 42, c26"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a27, 42, c27"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a28, 42, c28"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a29, 42, c29"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a30, 42, c30"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a31, 42, c31"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a32, 42, c32"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a33, 42, c33"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a34, 42, c34"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a35, 42, c35"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a36, 42, c36"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a37, 42, c37"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a38, 42, c38"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a39, 42, c39"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a40, 42, c40"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a41, 42, c41"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a42, 42, c42"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a43, 42, c43"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a44, 42, c44"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a45, 42, c45"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a46, 42, c46"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a47, 42, c47"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a48, 42, c48"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a49, 42, c49"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a50, 42, c50"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a51, 42, c51"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a52, 42, c52"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a53, 42, c53"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a54, 42, c54"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a55, 42, c55"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a56, 42, c56"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a57, 42, c57"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a58, 42, c58"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a59, 42, c59"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a60, 42, c60"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a61, 42, c61"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a62, 42, c62"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a63, 42, c63"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a64, 42, c64"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a65, 42, c65"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a66, 42, c66"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a67, 42, c67"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a68, 42, c68"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a69, 42, c69"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a70, 42, c70"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a71, 42, c71"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a72, 42, c72"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a73, 42, c73"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a74, 42, c74"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a75, 42, c75"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a76, 42, c76"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a77, 42, c77"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a78, 42, c78"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a79, 42, c79"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a80, 42, c80"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a81, 42, c81"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a82, 42, c82"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a83, 42, c83"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a84, 42, c84"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a85, 42, c85"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a86, 42, c86"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a87, 42, c87"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a88, 42, c88"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a89, 42, c89"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a90, 42, c90"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a91, 42, c91"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a92, 42, c92"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a93, 42, c93"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a94, 42, c94"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a95, 42, c95"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a96, 42, c96"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a97, 42, c97"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a98, 42, c98"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a99, 42, c99"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a100, 42, c100"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a101, 42, c101"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a102, 42, c102"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a103, 42, c103"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a104, 42, c104"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a105, 42, c105"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a106, 42, c106"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a107, 42, c107"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a108, 42, c108"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a109, 42, c109"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a110, 42, c110"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a111, 42, c111"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a112, 42, c112"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a113, 42, c113"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a114, 42, c114"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a115, 42, c115"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a116, 42, c116"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a117, 42, c117"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a118, 42, c118"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a119, 42, c119"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a120, 42, c120"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a121, 42, c121"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a122, 42, c122"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a123, 42, c123"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a124, 42, c124"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a125, 42, c125"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a126, 42, c126"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a127, 42, c127"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a128, 42, c128"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a129, 42, c129"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a130, 42, c130"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a131, 42, c131"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a132, 42, c132"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a133, 42, c133"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a134, 42, c134"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a135, 42, c135"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a136, 42, c136"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a137, 42, c137"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a138, 42, c138"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a139, 42, c139"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a140, 42, c140"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a141, 42, c141"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a142, 42, c142"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a143, 42, c143"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a144, 42, c144"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a145, 42, c145"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a146, 42, c146"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a147, 42, c147"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a148, 42, c148"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a149, 42, c149"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a150, 42, c150"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a151, 42, c151"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a152, 42, c152"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a153, 42, c153"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a154, 42, c154"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a155, 42, c155"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a156, 42, c156"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a157, 42, c157"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a158, 42, c158"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a159, 42, c159"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a160, 42, c160"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a161, 42, c161"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a162, 42, c162"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a163, 42, c163"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a164, 42, c164"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a165, 42, c165"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a166, 42, c166"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a167, 42, c167"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a168, 42, c168"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a169, 42, c169"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a170, 42, c170"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a171, 42, c171"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a172, 42, c172"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a173, 42, c173"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a174, 42, c174"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a175, 42, c175"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a176, 42, c176"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a177, 42, c177"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a178, 42, c178"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a179, 42, c179"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a180, 42, c180"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a181, 42, c181"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a182, 42, c182"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a183, 42, c183"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a184, 42, c184"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a185, 42, c185"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a186, 42, c186"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a187, 42, c187"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a188, 42, c188"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a189, 42, c189"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a190, 42, c190"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a191, 42, c191"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a192, 42, c192"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a193, 42, c193"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a194, 42, c194"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a195, 42, c195"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a196, 42, c196"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a197, 42, c197"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a198, 42, c198"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a199, 42, c199"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-become-int32.js b/deps/v8/test/webkit/dfg-inline-arguments-become-int32.js
new file mode 100644 (file)
index 0000000..f4fb576
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining preserves function.arguments functionality if the arguments are reassigned to refer to an int32."
+);
+
+function foo() {
+    return bar.arguments;
+}
+
+function bar(a,b,c) {
+    b = 42;
+    return foo(a,b,c);
+}
+
+function baz(a,b,c) {
+    return bar(a,b,c);
+}
+
+function argsToStr(args) {
+    var str = args + ": ";
+    for (var i = 0; i < args.length; ++i) {
+        if (i)
+            str += ", ";
+        str += args[i];
+    }
+    return str;
+}
+
+for (var __i = 0; __i < 200; ++__i)
+    shouldBe("argsToStr(baz(\"a\" + __i, \"b\" + __i, \"c\" + __i))", "\"[object Arguments]: a" + __i + ", 42, c" + __i + "\"");
+
+var successfullyParsed = true;
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-int32-expected.txt b/deps/v8/test/webkit/dfg-inline-arguments-int32-expected.txt
new file mode 100644 (file)
index 0000000..421e027
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining preserves function.arguments functionality if the arguments were represented as unboxed int32.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 1, 2, 3"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 2, 3, 4"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 3, 4, 5"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 4, 5, 6"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 5, 6, 7"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 6, 7, 8"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 7, 8, 9"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 8, 9, 10"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 9, 10, 11"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 10, 11, 12"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 11, 12, 13"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 12, 13, 14"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 13, 14, 15"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 14, 15, 16"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 15, 16, 17"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 16, 17, 18"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 17, 18, 19"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 18, 19, 20"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 19, 20, 21"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 20, 21, 22"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 21, 22, 23"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 22, 23, 24"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 23, 24, 25"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 24, 25, 26"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 25, 26, 27"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 26, 27, 28"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 27, 28, 29"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 28, 29, 30"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 29, 30, 31"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 30, 31, 32"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 31, 32, 33"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 32, 33, 34"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 33, 34, 35"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 34, 35, 36"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 35, 36, 37"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 36, 37, 38"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 37, 38, 39"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 38, 39, 40"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 39, 40, 41"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 40, 41, 42"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 41, 42, 43"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 42, 43, 44"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 43, 44, 45"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 44, 45, 46"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 45, 46, 47"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 46, 47, 48"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 47, 48, 49"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 48, 49, 50"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 49, 50, 51"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 50, 51, 52"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 51, 52, 53"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 52, 53, 54"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 53, 54, 55"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 54, 55, 56"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 55, 56, 57"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 56, 57, 58"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 57, 58, 59"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 58, 59, 60"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 59, 60, 61"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 60, 61, 62"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 61, 62, 63"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 62, 63, 64"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 63, 64, 65"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 64, 65, 66"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 65, 66, 67"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 66, 67, 68"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 67, 68, 69"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 68, 69, 70"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 69, 70, 71"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 70, 71, 72"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 71, 72, 73"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 72, 73, 74"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 73, 74, 75"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 74, 75, 76"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 75, 76, 77"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 76, 77, 78"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 77, 78, 79"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 78, 79, 80"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 79, 80, 81"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 80, 81, 82"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 81, 82, 83"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 82, 83, 84"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 83, 84, 85"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 84, 85, 86"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 85, 86, 87"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 86, 87, 88"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 87, 88, 89"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 88, 89, 90"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 89, 90, 91"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 90, 91, 92"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 91, 92, 93"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 92, 93, 94"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 93, 94, 95"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 94, 95, 96"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 95, 96, 97"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 96, 97, 98"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 97, 98, 99"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 98, 99, 100"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 99, 100, 101"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 100, 101, 102"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 101, 102, 103"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 102, 103, 104"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 103, 104, 105"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 104, 105, 106"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 105, 106, 107"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 106, 107, 108"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 107, 108, 109"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 108, 109, 110"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 109, 110, 111"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 110, 111, 112"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 111, 112, 113"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 112, 113, 114"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 113, 114, 115"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 114, 115, 116"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 115, 116, 117"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 116, 117, 118"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 117, 118, 119"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 118, 119, 120"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 119, 120, 121"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 120, 121, 122"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 121, 122, 123"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 122, 123, 124"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 123, 124, 125"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 124, 125, 126"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 125, 126, 127"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 126, 127, 128"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 127, 128, 129"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 128, 129, 130"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 129, 130, 131"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 130, 131, 132"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 131, 132, 133"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 132, 133, 134"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 133, 134, 135"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 134, 135, 136"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 135, 136, 137"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 136, 137, 138"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 137, 138, 139"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 138, 139, 140"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 139, 140, 141"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 140, 141, 142"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 141, 142, 143"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 142, 143, 144"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 143, 144, 145"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 144, 145, 146"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 145, 146, 147"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 146, 147, 148"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 147, 148, 149"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 148, 149, 150"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 149, 150, 151"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 150, 151, 152"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 151, 152, 153"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 152, 153, 154"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 153, 154, 155"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 154, 155, 156"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 155, 156, 157"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 156, 157, 158"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 157, 158, 159"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 158, 159, 160"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 159, 160, 161"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 160, 161, 162"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 161, 162, 163"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 162, 163, 164"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 163, 164, 165"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 164, 165, 166"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 165, 166, 167"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 166, 167, 168"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 167, 168, 169"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 168, 169, 170"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 169, 170, 171"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 170, 171, 172"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 171, 172, 173"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 172, 173, 174"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 173, 174, 175"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 174, 175, 176"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 175, 176, 177"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 176, 177, 178"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 177, 178, 179"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 178, 179, 180"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 179, 180, 181"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 180, 181, 182"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 181, 182, 183"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 182, 183, 184"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 183, 184, 185"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 184, 185, 186"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 185, 186, 187"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 186, 187, 188"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 187, 188, 189"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 188, 189, 190"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 189, 190, 191"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 190, 191, 192"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 191, 192, 193"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 192, 193, 194"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 193, 194, 195"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 194, 195, 196"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 195, 196, 197"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 196, 197, 198"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 197, 198, 199"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 198, 199, 200"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 199, 200, 201"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 200, 201, 202"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-int32.js b/deps/v8/test/webkit/dfg-inline-arguments-int32.js
new file mode 100644 (file)
index 0000000..8d95c6f
--- /dev/null
@@ -0,0 +1,53 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining preserves function.arguments functionality if the arguments were represented as unboxed int32."
+);
+
+function foo() {
+    return bar.arguments;
+}
+
+function bar(a,b,c) {
+    return foo(a,b,c);
+}
+
+function baz(a,b,c) {
+    return bar(a,b,c);
+}
+
+function argsToStr(args) {
+    var str = args + ": ";
+    for (var i = 0; i < args.length; ++i) {
+        if (i)
+            str += ", ";
+        str += args[i];
+    }
+    return str;
+}
+
+for (var __i = 0; __i < 200; ++__i)
+    shouldBe("argsToStr(baz(__i + 1, __i + 2, __i + 3))", "\"[object Arguments]: " + (__i + 1) + ", " + (__i + 2) + ", " + (__i + 3) + "\"");
+
+var successfullyParsed = true;
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-osr-exit-and-capture-expected.txt b/deps/v8/test/webkit/dfg-inline-arguments-osr-exit-and-capture-expected.txt
new file mode 100644 (file)
index 0000000..10f7dd0
--- /dev/null
@@ -0,0 +1,332 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens if you OSR exit within inlined code that has interesting control flow with arguments that are specially formatted and you capture the arguments reflectively after the OSR exit.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS baz(arg1, arg2) is 43
+PASS baz(arg1, arg2) is 45
+PASS baz(arg1, arg2) is 47
+PASS baz(arg1, arg2) is 49
+PASS baz(arg1, arg2) is 51
+PASS baz(arg1, arg2) is 53
+PASS baz(arg1, arg2) is 55
+PASS baz(arg1, arg2) is 57
+PASS baz(arg1, arg2) is 59
+PASS baz(arg1, arg2) is 61
+PASS baz(arg1, arg2) is 63
+PASS baz(arg1, arg2) is 65
+PASS baz(arg1, arg2) is 67
+PASS baz(arg1, arg2) is 69
+PASS baz(arg1, arg2) is 71
+PASS baz(arg1, arg2) is 73
+PASS baz(arg1, arg2) is 75
+PASS baz(arg1, arg2) is 77
+PASS baz(arg1, arg2) is 79
+PASS baz(arg1, arg2) is 81
+PASS baz(arg1, arg2) is 83
+PASS baz(arg1, arg2) is 85
+PASS baz(arg1, arg2) is 87
+PASS baz(arg1, arg2) is 89
+PASS baz(arg1, arg2) is 91
+PASS baz(arg1, arg2) is 93
+PASS baz(arg1, arg2) is 95
+PASS baz(arg1, arg2) is 97
+PASS baz(arg1, arg2) is 99
+PASS baz(arg1, arg2) is 101
+PASS baz(arg1, arg2) is 103
+PASS baz(arg1, arg2) is 105
+PASS baz(arg1, arg2) is 107
+PASS baz(arg1, arg2) is 109
+PASS baz(arg1, arg2) is 111
+PASS baz(arg1, arg2) is 113
+PASS baz(arg1, arg2) is 115
+PASS baz(arg1, arg2) is 117
+PASS baz(arg1, arg2) is 119
+PASS baz(arg1, arg2) is 121
+PASS baz(arg1, arg2) is 123
+PASS baz(arg1, arg2) is 125
+PASS baz(arg1, arg2) is 127
+PASS baz(arg1, arg2) is 129
+PASS baz(arg1, arg2) is 131
+PASS baz(arg1, arg2) is 133
+PASS baz(arg1, arg2) is 135
+PASS baz(arg1, arg2) is 137
+PASS baz(arg1, arg2) is 139
+PASS baz(arg1, arg2) is 141
+PASS baz(arg1, arg2) is 143
+PASS baz(arg1, arg2) is 145
+PASS baz(arg1, arg2) is 147
+PASS baz(arg1, arg2) is 149
+PASS baz(arg1, arg2) is 151
+PASS baz(arg1, arg2) is 153
+PASS baz(arg1, arg2) is 155
+PASS baz(arg1, arg2) is 157
+PASS baz(arg1, arg2) is 159
+PASS baz(arg1, arg2) is 161
+PASS baz(arg1, arg2) is 163
+PASS baz(arg1, arg2) is 165
+PASS baz(arg1, arg2) is 167
+PASS baz(arg1, arg2) is 169
+PASS baz(arg1, arg2) is 171
+PASS baz(arg1, arg2) is 173
+PASS baz(arg1, arg2) is 175
+PASS baz(arg1, arg2) is 177
+PASS baz(arg1, arg2) is 179
+PASS baz(arg1, arg2) is 181
+PASS baz(arg1, arg2) is 183
+PASS baz(arg1, arg2) is 185
+PASS baz(arg1, arg2) is 187
+PASS baz(arg1, arg2) is 189
+PASS baz(arg1, arg2) is 191
+PASS baz(arg1, arg2) is 193
+PASS baz(arg1, arg2) is 195
+PASS baz(arg1, arg2) is 197
+PASS baz(arg1, arg2) is 199
+PASS baz(arg1, arg2) is 201
+PASS baz(arg1, arg2) is 203
+PASS baz(arg1, arg2) is 205
+PASS baz(arg1, arg2) is 207
+PASS baz(arg1, arg2) is 209
+PASS baz(arg1, arg2) is 211
+PASS baz(arg1, arg2) is 213
+PASS baz(arg1, arg2) is 215
+PASS baz(arg1, arg2) is 217
+PASS baz(arg1, arg2) is 219
+PASS baz(arg1, arg2) is 221
+PASS baz(arg1, arg2) is 223
+PASS baz(arg1, arg2) is 225
+PASS baz(arg1, arg2) is 227
+PASS baz(arg1, arg2) is 229
+PASS baz(arg1, arg2) is 231
+PASS baz(arg1, arg2) is 233
+PASS baz(arg1, arg2) is 235
+PASS baz(arg1, arg2) is 237
+PASS baz(arg1, arg2) is 239
+PASS baz(arg1, arg2) is 241
+PASS baz(arg1, arg2) is 243
+PASS baz(arg1, arg2) is 245
+PASS baz(arg1, arg2) is 247
+PASS baz(arg1, arg2) is 249
+PASS baz(arg1, arg2) is 251
+PASS baz(arg1, arg2) is 253
+PASS baz(arg1, arg2) is 255
+PASS baz(arg1, arg2) is 257
+PASS baz(arg1, arg2) is 259
+PASS baz(arg1, arg2) is 261
+PASS baz(arg1, arg2) is 263
+PASS baz(arg1, arg2) is 265
+PASS baz(arg1, arg2) is 267
+PASS baz(arg1, arg2) is 269
+PASS baz(arg1, arg2) is 271
+PASS baz(arg1, arg2) is 273
+PASS baz(arg1, arg2) is 275
+PASS baz(arg1, arg2) is 277
+PASS baz(arg1, arg2) is 279
+PASS baz(arg1, arg2) is 281
+PASS baz(arg1, arg2) is 283
+PASS baz(arg1, arg2) is 285
+PASS baz(arg1, arg2) is 287
+PASS baz(arg1, arg2) is 289
+PASS baz(arg1, arg2) is 291
+PASS baz(arg1, arg2) is 293
+PASS baz(arg1, arg2) is 295
+PASS baz(arg1, arg2) is 297
+PASS baz(arg1, arg2) is 299
+PASS baz(arg1, arg2) is 301
+PASS baz(arg1, arg2) is 303
+PASS baz(arg1, arg2) is 305
+PASS baz(arg1, arg2) is 307
+PASS baz(arg1, arg2) is 309
+PASS baz(arg1, arg2) is 311
+PASS baz(arg1, arg2) is 313
+PASS baz(arg1, arg2) is 315
+PASS baz(arg1, arg2) is 317
+PASS baz(arg1, arg2) is 319
+PASS baz(arg1, arg2) is 321
+PASS baz(arg1, arg2) is 323
+PASS baz(arg1, arg2) is 325
+PASS baz(arg1, arg2) is 327
+PASS baz(arg1, arg2) is 329
+PASS baz(arg1, arg2) is 331
+PASS baz(arg1, arg2) is 333
+PASS baz(arg1, arg2) is 335
+PASS baz(arg1, arg2) is 337
+PASS baz(arg1, arg2) is 339
+PASS baz(arg1, arg2) is 341
+PASS baz(arg1, arg2) is 343
+PASS baz(arg1, arg2) is 345
+PASS baz(arg1, arg2) is 347
+PASS baz(arg1, arg2) is 349
+PASS baz(arg1, arg2) is 351
+PASS baz(arg1, arg2) is 353
+PASS baz(arg1, arg2) is 355
+PASS baz(arg1, arg2) is 357
+PASS baz(arg1, arg2) is 359
+PASS baz(arg1, arg2) is 361
+PASS baz(arg1, arg2) is 363
+PASS baz(arg1, arg2) is 365
+PASS baz(arg1, arg2) is 367
+PASS baz(arg1, arg2) is 369
+PASS baz(arg1, arg2) is 371
+PASS baz(arg1, arg2) is 373
+PASS baz(arg1, arg2) is 375
+PASS baz(arg1, arg2) is 377
+PASS baz(arg1, arg2) is 379
+PASS baz(arg1, arg2) is 381
+PASS baz(arg1, arg2) is 383
+PASS baz(arg1, arg2) is 385
+PASS baz(arg1, arg2) is 387
+PASS baz(arg1, arg2) is 389
+PASS baz(arg1, arg2) is 391
+PASS baz(arg1, arg2) is 393
+PASS baz(arg1, arg2) is 395
+PASS baz(arg1, arg2) is 397
+PASS baz(arg1, arg2) is 399
+PASS baz(arg1, arg2) is 401
+PASS baz(arg1, arg2) is 403
+PASS baz(arg1, arg2) is 405
+PASS baz(arg1, arg2) is 407
+PASS baz(arg1, arg2) is 409
+PASS baz(arg1, arg2) is 411
+PASS baz(arg1, arg2) is 413
+PASS baz(arg1, arg2) is 415
+PASS baz(arg1, arg2) is 417
+PASS baz(arg1, arg2) is 419
+PASS baz(arg1, arg2) is 421
+PASS baz(arg1, arg2) is 423
+PASS baz(arg1, arg2) is 425
+PASS baz(arg1, arg2) is 427
+PASS baz(arg1, arg2) is 429
+PASS baz(arg1, arg2) is 431
+PASS baz(arg1, arg2) is 433
+PASS baz(arg1, arg2) is 435
+PASS baz(arg1, arg2) is 437
+PASS baz(arg1, arg2) is 439
+PASS baz(arg1, arg2) is 441
+PASS baz(arg1, arg2) is 443
+PASS baz(arg1, arg2) is 445
+PASS baz(arg1, arg2) is 447
+PASS baz(arg1, arg2) is 449
+PASS baz(arg1, arg2) is 451
+PASS baz(arg1, arg2) is 453
+PASS baz(arg1, arg2) is 455
+PASS baz(arg1, arg2) is 457
+PASS baz(arg1, arg2) is 459
+PASS baz(arg1, arg2) is 461
+PASS baz(arg1, arg2) is 463
+PASS baz(arg1, arg2) is 465
+PASS baz(arg1, arg2) is 467
+PASS baz(arg1, arg2) is 469
+PASS baz(arg1, arg2) is 471
+PASS baz(arg1, arg2) is 473
+PASS baz(arg1, arg2) is 475
+PASS baz(arg1, arg2) is 477
+PASS baz(arg1, arg2) is 479
+PASS baz(arg1, arg2) is 481
+PASS baz(arg1, arg2) is 483
+PASS baz(arg1, arg2) is 485
+PASS baz(arg1, arg2) is 487
+PASS baz(arg1, arg2) is 489
+PASS baz(arg1, arg2) is 491
+PASS baz(arg1, arg2) is 493
+PASS baz(arg1, arg2) is 495
+PASS baz(arg1, arg2) is 497
+PASS baz(arg1, arg2) is 499
+PASS baz(arg1, arg2) is 501
+PASS baz(arg1, arg2) is 503
+PASS baz(arg1, arg2) is 505
+PASS baz(arg1, arg2) is 507
+PASS baz(arg1, arg2) is 509
+PASS baz(arg1, arg2) is 511
+PASS baz(arg1, arg2) is 513
+PASS baz(arg1, arg2) is 515
+PASS baz(arg1, arg2) is 517
+PASS baz(arg1, arg2) is 519
+PASS baz(arg1, arg2) is 521
+PASS baz(arg1, arg2) is 523
+PASS baz(arg1, arg2) is 525
+PASS baz(arg1, arg2) is 527
+PASS baz(arg1, arg2) is 529
+PASS baz(arg1, arg2) is 531
+PASS baz(arg1, arg2) is 533
+PASS baz(arg1, arg2) is 535
+PASS baz(arg1, arg2) is 537
+PASS baz(arg1, arg2) is 539
+PASS baz(arg1, arg2) is 541
+PASS baz(arg1, arg2) is 293.5
+PASS baz(arg1, arg2) is 294.5
+PASS baz(arg1, arg2) is 295.5
+PASS baz(arg1, arg2) is 296.5
+PASS baz(arg1, arg2) is 297.5
+PASS baz(arg1, arg2) is 298.5
+PASS baz(arg1, arg2) is 299.5
+PASS baz(arg1, arg2) is 300.5
+PASS baz(arg1, arg2) is 301.5
+PASS baz(arg1, arg2) is 302.5
+PASS baz(arg1, arg2) is 303.5
+PASS baz(arg1, arg2) is 304.5
+PASS baz(arg1, arg2) is 305.5
+PASS baz(arg1, arg2) is 306.5
+PASS baz(arg1, arg2) is 307.5
+PASS baz(arg1, arg2) is 308.5
+PASS baz(arg1, arg2) is 309.5
+PASS baz(arg1, arg2) is 310.5
+PASS baz(arg1, arg2) is 311.5
+PASS baz(arg1, arg2) is 312.5
+PASS baz(arg1, arg2) is 313.5
+PASS baz(arg1, arg2) is 314.5
+PASS baz(arg1, arg2) is 315.5
+PASS baz(arg1, arg2) is 316.5
+PASS baz(arg1, arg2) is 317.5
+PASS baz(arg1, arg2) is 318.5
+PASS baz(arg1, arg2) is 319.5
+PASS baz(arg1, arg2) is 320.5
+PASS baz(arg1, arg2) is 321.5
+PASS baz(arg1, arg2) is 322.5
+PASS baz(arg1, arg2) is 323.5
+PASS baz(arg1, arg2) is 324.5
+PASS baz(arg1, arg2) is 325.5
+PASS baz(arg1, arg2) is 326.5
+PASS baz(arg1, arg2) is 327.5
+PASS baz(arg1, arg2) is 328.5
+PASS baz(arg1, arg2) is 329.5
+PASS baz(arg1, arg2) is 330.5
+PASS baz(arg1, arg2) is 331.5
+PASS baz(arg1, arg2) is 332.5
+PASS baz(arg1, arg2) is 333.5
+PASS baz(arg1, arg2) is 334.5
+PASS baz(arg1, arg2) is 335.5
+PASS baz(arg1, arg2) is 336.5
+PASS baz(arg1, arg2) is 337.5
+PASS baz(arg1, arg2) is 338.5
+PASS baz(arg1, arg2) is 339.5
+PASS baz(arg1, arg2) is 340.5
+PASS baz(arg1, arg2) is 341.5
+PASS baz(arg1, arg2) is 342.5
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-osr-exit-and-capture.js b/deps/v8/test/webkit/dfg-inline-arguments-osr-exit-and-capture.js
new file mode 100644 (file)
index 0000000..82a49fa
--- /dev/null
@@ -0,0 +1,56 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens if you OSR exit within inlined code that has interesting control flow with arguments that are specially formatted and you capture the arguments reflectively after the OSR exit."
+);
+
+function foo() {
+    return bar.arguments[0];
+}
+
+function bar(x, y) {
+    if (x + 5 > 4)
+        return y.f + 42 + foo();
+    else
+        return y.f + 43 + foo();
+}
+
+function baz(x, y) {
+    return bar(x, y);
+}
+
+for (var i = 0; i < 300; ++i) {
+    var expected;
+    var arg1 = i;
+    var arg2;
+    if (i < 250) {
+        arg2 = {f:i + 1};
+        expected = i + 1 + 42 + i;
+    } else {
+        arg2 = {f:1.5};
+        expected = 1.5 + 42 + i;
+    }
+    shouldBe("baz(arg1, arg2)", "" + expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-out-of-bounds-expected.txt b/deps/v8/test/webkit/dfg-inline-arguments-out-of-bounds-expected.txt
new file mode 100644 (file)
index 0000000..3b4593e
--- /dev/null
@@ -0,0 +1,3032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests accessing arguments with an out-of-bounds index in an inlined function when the arguments have not been created but might be.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-out-of-bounds.js b/deps/v8/test/webkit/dfg-inline-arguments-out-of-bounds.js
new file mode 100644 (file)
index 0000000..23b9184
--- /dev/null
@@ -0,0 +1,53 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests accessing arguments with an out-of-bounds index in an inlined function when the arguments have not been created but might be."
+);
+
+var p = false;
+
+function foo() {
+    if (p)
+        return arguments;
+    return arguments[0];
+}
+
+function bar() {
+    return foo();
+}
+
+var expected = "\"undefined\"";
+for (var i = 0; i < 3000; ++i) {
+    if (i == 1000) {
+        p = true;
+        expected = "\"[object Arguments]\"";
+    }
+    if (i == 2000) {
+        p = false;
+        expected = "\"undefined\"";
+    }
+    result = "" + bar();
+    shouldBe("result", expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-reset-changetype-expected.txt b/deps/v8/test/webkit/dfg-inline-arguments-reset-changetype-expected.txt
new file mode 100644 (file)
index 0000000..5bb386c
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining preserves function.arguments functionality if the arguments are reassigned with a different type.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a0, a0, c0"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a1, a1, c1"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a2, a2, c2"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a3, a3, c3"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a4, a4, c4"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a5, a5, c5"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a6, a6, c6"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a7, a7, c7"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a8, a8, c8"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a9, a9, c9"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a10, a10, c10"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a11, a11, c11"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a12, a12, c12"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a13, a13, c13"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a14, a14, c14"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a15, a15, c15"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a16, a16, c16"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a17, a17, c17"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a18, a18, c18"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a19, a19, c19"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a20, a20, c20"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a21, a21, c21"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a22, a22, c22"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a23, a23, c23"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a24, a24, c24"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a25, a25, c25"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a26, a26, c26"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a27, a27, c27"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a28, a28, c28"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a29, a29, c29"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a30, a30, c30"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a31, a31, c31"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a32, a32, c32"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a33, a33, c33"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a34, a34, c34"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a35, a35, c35"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a36, a36, c36"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a37, a37, c37"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a38, a38, c38"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a39, a39, c39"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a40, a40, c40"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a41, a41, c41"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a42, a42, c42"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a43, a43, c43"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a44, a44, c44"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a45, a45, c45"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a46, a46, c46"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a47, a47, c47"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a48, a48, c48"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a49, a49, c49"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a50, a50, c50"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a51, a51, c51"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a52, a52, c52"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a53, a53, c53"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a54, a54, c54"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a55, a55, c55"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a56, a56, c56"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a57, a57, c57"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a58, a58, c58"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a59, a59, c59"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a60, a60, c60"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a61, a61, c61"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a62, a62, c62"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a63, a63, c63"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a64, a64, c64"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a65, a65, c65"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a66, a66, c66"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a67, a67, c67"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a68, a68, c68"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a69, a69, c69"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a70, a70, c70"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a71, a71, c71"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a72, a72, c72"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a73, a73, c73"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a74, a74, c74"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a75, a75, c75"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a76, a76, c76"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a77, a77, c77"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a78, a78, c78"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a79, a79, c79"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a80, a80, c80"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a81, a81, c81"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a82, a82, c82"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a83, a83, c83"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a84, a84, c84"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a85, a85, c85"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a86, a86, c86"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a87, a87, c87"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a88, a88, c88"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a89, a89, c89"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a90, a90, c90"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a91, a91, c91"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a92, a92, c92"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a93, a93, c93"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a94, a94, c94"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a95, a95, c95"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a96, a96, c96"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a97, a97, c97"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a98, a98, c98"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a99, a99, c99"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a100, a100, c100"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a101, a101, c101"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a102, a102, c102"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a103, a103, c103"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a104, a104, c104"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a105, a105, c105"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a106, a106, c106"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a107, a107, c107"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a108, a108, c108"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a109, a109, c109"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a110, a110, c110"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a111, a111, c111"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a112, a112, c112"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a113, a113, c113"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a114, a114, c114"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a115, a115, c115"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a116, a116, c116"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a117, a117, c117"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a118, a118, c118"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a119, a119, c119"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a120, a120, c120"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a121, a121, c121"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a122, a122, c122"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a123, a123, c123"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a124, a124, c124"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a125, a125, c125"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a126, a126, c126"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a127, a127, c127"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a128, a128, c128"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a129, a129, c129"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a130, a130, c130"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a131, a131, c131"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a132, a132, c132"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a133, a133, c133"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a134, a134, c134"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a135, a135, c135"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a136, a136, c136"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a137, a137, c137"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a138, a138, c138"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a139, a139, c139"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a140, a140, c140"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a141, a141, c141"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a142, a142, c142"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a143, a143, c143"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a144, a144, c144"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a145, a145, c145"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a146, a146, c146"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a147, a147, c147"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a148, a148, c148"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a149, a149, c149"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a150, a150, c150"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a151, a151, c151"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a152, a152, c152"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a153, a153, c153"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a154, a154, c154"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a155, a155, c155"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a156, a156, c156"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a157, a157, c157"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a158, a158, c158"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a159, a159, c159"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a160, a160, c160"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a161, a161, c161"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a162, a162, c162"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a163, a163, c163"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a164, a164, c164"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a165, a165, c165"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a166, a166, c166"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a167, a167, c167"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a168, a168, c168"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a169, a169, c169"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a170, a170, c170"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a171, a171, c171"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a172, a172, c172"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a173, a173, c173"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a174, a174, c174"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a175, a175, c175"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a176, a176, c176"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a177, a177, c177"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a178, a178, c178"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a179, a179, c179"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a180, a180, c180"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a181, a181, c181"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a182, a182, c182"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a183, a183, c183"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a184, a184, c184"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a185, a185, c185"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a186, a186, c186"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a187, a187, c187"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a188, a188, c188"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a189, a189, c189"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a190, a190, c190"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a191, a191, c191"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a192, a192, c192"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a193, a193, c193"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a194, a194, c194"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a195, a195, c195"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a196, a196, c196"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a197, a197, c197"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a198, a198, c198"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a199, a199, c199"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-reset-changetype.js b/deps/v8/test/webkit/dfg-inline-arguments-reset-changetype.js
new file mode 100644 (file)
index 0000000..a7baa0f
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining preserves function.arguments functionality if the arguments are reassigned with a different type."
+);
+
+function foo() {
+    return bar.arguments;
+}
+
+function bar(a,b,c) {
+    b = a;
+    return foo(a,b,c);
+}
+
+function baz(a,b,c) {
+    return bar(a,b,c);
+}
+
+function argsToStr(args) {
+    var str = args + ": ";
+    for (var i = 0; i < args.length; ++i) {
+        if (i)
+            str += ", ";
+        str += args[i];
+    }
+    return str;
+}
+
+for (var __i = 0; __i < 200; ++__i)
+    shouldBe("argsToStr(baz(\"a\" + __i, __i + 2, \"c\" + __i))", "\"[object Arguments]: a" + __i + ", a" + __i + ", c" + __i + "\"");
+
+var successfullyParsed = true;
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-reset-expected.txt b/deps/v8/test/webkit/dfg-inline-arguments-reset-expected.txt
new file mode 100644 (file)
index 0000000..bec2e69
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining preserves function.arguments functionality if the arguments are reassigned.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a0, a0, c0"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a1, a1, c1"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a2, a2, c2"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a3, a3, c3"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a4, a4, c4"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a5, a5, c5"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a6, a6, c6"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a7, a7, c7"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a8, a8, c8"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a9, a9, c9"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a10, a10, c10"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a11, a11, c11"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a12, a12, c12"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a13, a13, c13"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a14, a14, c14"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a15, a15, c15"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a16, a16, c16"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a17, a17, c17"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a18, a18, c18"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a19, a19, c19"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a20, a20, c20"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a21, a21, c21"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a22, a22, c22"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a23, a23, c23"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a24, a24, c24"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a25, a25, c25"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a26, a26, c26"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a27, a27, c27"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a28, a28, c28"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a29, a29, c29"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a30, a30, c30"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a31, a31, c31"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a32, a32, c32"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a33, a33, c33"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a34, a34, c34"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a35, a35, c35"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a36, a36, c36"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a37, a37, c37"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a38, a38, c38"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a39, a39, c39"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a40, a40, c40"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a41, a41, c41"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a42, a42, c42"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a43, a43, c43"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a44, a44, c44"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a45, a45, c45"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a46, a46, c46"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a47, a47, c47"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a48, a48, c48"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a49, a49, c49"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a50, a50, c50"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a51, a51, c51"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a52, a52, c52"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a53, a53, c53"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a54, a54, c54"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a55, a55, c55"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a56, a56, c56"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a57, a57, c57"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a58, a58, c58"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a59, a59, c59"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a60, a60, c60"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a61, a61, c61"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a62, a62, c62"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a63, a63, c63"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a64, a64, c64"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a65, a65, c65"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a66, a66, c66"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a67, a67, c67"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a68, a68, c68"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a69, a69, c69"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a70, a70, c70"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a71, a71, c71"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a72, a72, c72"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a73, a73, c73"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a74, a74, c74"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a75, a75, c75"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a76, a76, c76"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a77, a77, c77"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a78, a78, c78"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a79, a79, c79"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a80, a80, c80"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a81, a81, c81"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a82, a82, c82"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a83, a83, c83"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a84, a84, c84"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a85, a85, c85"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a86, a86, c86"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a87, a87, c87"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a88, a88, c88"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a89, a89, c89"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a90, a90, c90"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a91, a91, c91"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a92, a92, c92"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a93, a93, c93"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a94, a94, c94"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a95, a95, c95"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a96, a96, c96"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a97, a97, c97"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a98, a98, c98"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a99, a99, c99"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a100, a100, c100"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a101, a101, c101"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a102, a102, c102"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a103, a103, c103"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a104, a104, c104"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a105, a105, c105"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a106, a106, c106"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a107, a107, c107"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a108, a108, c108"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a109, a109, c109"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a110, a110, c110"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a111, a111, c111"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a112, a112, c112"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a113, a113, c113"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a114, a114, c114"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a115, a115, c115"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a116, a116, c116"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a117, a117, c117"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a118, a118, c118"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a119, a119, c119"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a120, a120, c120"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a121, a121, c121"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a122, a122, c122"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a123, a123, c123"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a124, a124, c124"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a125, a125, c125"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a126, a126, c126"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a127, a127, c127"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a128, a128, c128"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a129, a129, c129"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a130, a130, c130"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a131, a131, c131"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a132, a132, c132"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a133, a133, c133"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a134, a134, c134"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a135, a135, c135"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a136, a136, c136"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a137, a137, c137"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a138, a138, c138"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a139, a139, c139"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a140, a140, c140"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a141, a141, c141"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a142, a142, c142"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a143, a143, c143"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a144, a144, c144"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a145, a145, c145"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a146, a146, c146"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a147, a147, c147"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a148, a148, c148"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a149, a149, c149"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a150, a150, c150"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a151, a151, c151"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a152, a152, c152"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a153, a153, c153"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a154, a154, c154"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a155, a155, c155"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a156, a156, c156"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a157, a157, c157"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a158, a158, c158"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a159, a159, c159"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a160, a160, c160"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a161, a161, c161"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a162, a162, c162"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a163, a163, c163"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a164, a164, c164"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a165, a165, c165"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a166, a166, c166"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a167, a167, c167"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a168, a168, c168"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a169, a169, c169"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a170, a170, c170"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a171, a171, c171"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a172, a172, c172"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a173, a173, c173"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a174, a174, c174"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a175, a175, c175"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a176, a176, c176"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a177, a177, c177"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a178, a178, c178"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a179, a179, c179"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a180, a180, c180"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a181, a181, c181"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a182, a182, c182"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a183, a183, c183"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a184, a184, c184"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a185, a185, c185"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a186, a186, c186"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a187, a187, c187"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a188, a188, c188"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a189, a189, c189"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a190, a190, c190"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a191, a191, c191"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a192, a192, c192"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a193, a193, c193"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a194, a194, c194"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a195, a195, c195"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a196, a196, c196"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a197, a197, c197"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a198, a198, c198"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a199, a199, c199"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-reset.js b/deps/v8/test/webkit/dfg-inline-arguments-reset.js
new file mode 100644 (file)
index 0000000..e4b9559
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining preserves function.arguments functionality if the arguments are reassigned."
+);
+
+function foo() {
+    return bar.arguments;
+}
+
+function bar(a,b,c) {
+    b = a;
+    return foo(a,b,c);
+}
+
+function baz(a,b,c) {
+    return bar(a,b,c);
+}
+
+function argsToStr(args) {
+    var str = args + ": ";
+    for (var i = 0; i < args.length; ++i) {
+        if (i)
+            str += ", ";
+        str += args[i];
+    }
+    return str;
+}
+
+for (var __i = 0; __i < 200; ++__i)
+    shouldBe("argsToStr(baz(\"a\" + __i, \"b\" + __i, \"c\" + __i))", "\"[object Arguments]: a" + __i + ", a" + __i + ", c" + __i + "\"");
+
+var successfullyParsed = true;
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-simple-expected.txt b/deps/v8/test/webkit/dfg-inline-arguments-simple-expected.txt
new file mode 100644 (file)
index 0000000..75064ac
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining preserves basic function.arguments functionality.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a0, b0, c0"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a1, b1, c1"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a2, b2, c2"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a3, b3, c3"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a4, b4, c4"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a5, b5, c5"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a6, b6, c6"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a7, b7, c7"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a8, b8, c8"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a9, b9, c9"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a10, b10, c10"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a11, b11, c11"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a12, b12, c12"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a13, b13, c13"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a14, b14, c14"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a15, b15, c15"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a16, b16, c16"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a17, b17, c17"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a18, b18, c18"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a19, b19, c19"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a20, b20, c20"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a21, b21, c21"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a22, b22, c22"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a23, b23, c23"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a24, b24, c24"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a25, b25, c25"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a26, b26, c26"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a27, b27, c27"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a28, b28, c28"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a29, b29, c29"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a30, b30, c30"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a31, b31, c31"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a32, b32, c32"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a33, b33, c33"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a34, b34, c34"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a35, b35, c35"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a36, b36, c36"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a37, b37, c37"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a38, b38, c38"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a39, b39, c39"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a40, b40, c40"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a41, b41, c41"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a42, b42, c42"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a43, b43, c43"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a44, b44, c44"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a45, b45, c45"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a46, b46, c46"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a47, b47, c47"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a48, b48, c48"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a49, b49, c49"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a50, b50, c50"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a51, b51, c51"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a52, b52, c52"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a53, b53, c53"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a54, b54, c54"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a55, b55, c55"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a56, b56, c56"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a57, b57, c57"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a58, b58, c58"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a59, b59, c59"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a60, b60, c60"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a61, b61, c61"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a62, b62, c62"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a63, b63, c63"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a64, b64, c64"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a65, b65, c65"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a66, b66, c66"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a67, b67, c67"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a68, b68, c68"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a69, b69, c69"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a70, b70, c70"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a71, b71, c71"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a72, b72, c72"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a73, b73, c73"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a74, b74, c74"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a75, b75, c75"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a76, b76, c76"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a77, b77, c77"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a78, b78, c78"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a79, b79, c79"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a80, b80, c80"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a81, b81, c81"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a82, b82, c82"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a83, b83, c83"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a84, b84, c84"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a85, b85, c85"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a86, b86, c86"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a87, b87, c87"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a88, b88, c88"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a89, b89, c89"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a90, b90, c90"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a91, b91, c91"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a92, b92, c92"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a93, b93, c93"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a94, b94, c94"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a95, b95, c95"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a96, b96, c96"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a97, b97, c97"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a98, b98, c98"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a99, b99, c99"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a100, b100, c100"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a101, b101, c101"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a102, b102, c102"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a103, b103, c103"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a104, b104, c104"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a105, b105, c105"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a106, b106, c106"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a107, b107, c107"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a108, b108, c108"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a109, b109, c109"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a110, b110, c110"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a111, b111, c111"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a112, b112, c112"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a113, b113, c113"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a114, b114, c114"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a115, b115, c115"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a116, b116, c116"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a117, b117, c117"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a118, b118, c118"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a119, b119, c119"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a120, b120, c120"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a121, b121, c121"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a122, b122, c122"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a123, b123, c123"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a124, b124, c124"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a125, b125, c125"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a126, b126, c126"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a127, b127, c127"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a128, b128, c128"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a129, b129, c129"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a130, b130, c130"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a131, b131, c131"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a132, b132, c132"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a133, b133, c133"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a134, b134, c134"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a135, b135, c135"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a136, b136, c136"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a137, b137, c137"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a138, b138, c138"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a139, b139, c139"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a140, b140, c140"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a141, b141, c141"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a142, b142, c142"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a143, b143, c143"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a144, b144, c144"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a145, b145, c145"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a146, b146, c146"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a147, b147, c147"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a148, b148, c148"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a149, b149, c149"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a150, b150, c150"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a151, b151, c151"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a152, b152, c152"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a153, b153, c153"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a154, b154, c154"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a155, b155, c155"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a156, b156, c156"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a157, b157, c157"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a158, b158, c158"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a159, b159, c159"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a160, b160, c160"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a161, b161, c161"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a162, b162, c162"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a163, b163, c163"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a164, b164, c164"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a165, b165, c165"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a166, b166, c166"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a167, b167, c167"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a168, b168, c168"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a169, b169, c169"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a170, b170, c170"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a171, b171, c171"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a172, b172, c172"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a173, b173, c173"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a174, b174, c174"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a175, b175, c175"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a176, b176, c176"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a177, b177, c177"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a178, b178, c178"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a179, b179, c179"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a180, b180, c180"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a181, b181, c181"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a182, b182, c182"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a183, b183, c183"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a184, b184, c184"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a185, b185, c185"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a186, b186, c186"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a187, b187, c187"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a188, b188, c188"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a189, b189, c189"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a190, b190, c190"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a191, b191, c191"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a192, b192, c192"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a193, b193, c193"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a194, b194, c194"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a195, b195, c195"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a196, b196, c196"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a197, b197, c197"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a198, b198, c198"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a199, b199, c199"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-simple.js b/deps/v8/test/webkit/dfg-inline-arguments-simple.js
new file mode 100644 (file)
index 0000000..547282c
--- /dev/null
@@ -0,0 +1,53 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining preserves basic function.arguments functionality."
+);
+
+function foo() {
+    return bar.arguments;
+}
+
+function bar(a,b,c) {
+    return foo(a,b,c);
+}
+
+function baz(a,b,c) {
+    return bar(a,b,c);
+}
+
+function argsToStr(args) {
+    var str = args + ": ";
+    for (var i = 0; i < args.length; ++i) {
+        if (i)
+            str += ", ";
+        str += args[i];
+    }
+    return str;
+}
+
+for (var __i = 0; __i < 200; ++__i)
+    shouldBe("argsToStr(baz(\"a\" + __i, \"b\" + __i, \"c\" + __i))", "\"[object Arguments]: a" + __i + ", b" + __i + ", c" + __i + "\"");
+
+var successfullyParsed = true;
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-use-directly-from-inlined-code-expected.txt b/deps/v8/test/webkit/dfg-inline-arguments-use-directly-from-inlined-code-expected.txt
new file mode 100644 (file)
index 0000000..fed012d
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining preserves basic function.arguments functionality when said functionality is used directly from within an inlined code block.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a0, b0, c0"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a1, b1, c1"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a2, b2, c2"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a3, b3, c3"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a4, b4, c4"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a5, b5, c5"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a6, b6, c6"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a7, b7, c7"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a8, b8, c8"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a9, b9, c9"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a10, b10, c10"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a11, b11, c11"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a12, b12, c12"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a13, b13, c13"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a14, b14, c14"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a15, b15, c15"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a16, b16, c16"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a17, b17, c17"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a18, b18, c18"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a19, b19, c19"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a20, b20, c20"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a21, b21, c21"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a22, b22, c22"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a23, b23, c23"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a24, b24, c24"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a25, b25, c25"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a26, b26, c26"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a27, b27, c27"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a28, b28, c28"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a29, b29, c29"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a30, b30, c30"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a31, b31, c31"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a32, b32, c32"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a33, b33, c33"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a34, b34, c34"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a35, b35, c35"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a36, b36, c36"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a37, b37, c37"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a38, b38, c38"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a39, b39, c39"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a40, b40, c40"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a41, b41, c41"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a42, b42, c42"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a43, b43, c43"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a44, b44, c44"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a45, b45, c45"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a46, b46, c46"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a47, b47, c47"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a48, b48, c48"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a49, b49, c49"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a50, b50, c50"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a51, b51, c51"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a52, b52, c52"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a53, b53, c53"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a54, b54, c54"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a55, b55, c55"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a56, b56, c56"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a57, b57, c57"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a58, b58, c58"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a59, b59, c59"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a60, b60, c60"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a61, b61, c61"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a62, b62, c62"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a63, b63, c63"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a64, b64, c64"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a65, b65, c65"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a66, b66, c66"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a67, b67, c67"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a68, b68, c68"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a69, b69, c69"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a70, b70, c70"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a71, b71, c71"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a72, b72, c72"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a73, b73, c73"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a74, b74, c74"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a75, b75, c75"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a76, b76, c76"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a77, b77, c77"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a78, b78, c78"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a79, b79, c79"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a80, b80, c80"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a81, b81, c81"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a82, b82, c82"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a83, b83, c83"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a84, b84, c84"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a85, b85, c85"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a86, b86, c86"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a87, b87, c87"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a88, b88, c88"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a89, b89, c89"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a90, b90, c90"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a91, b91, c91"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a92, b92, c92"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a93, b93, c93"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a94, b94, c94"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a95, b95, c95"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a96, b96, c96"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a97, b97, c97"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a98, b98, c98"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a99, b99, c99"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a100, b100, c100"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a101, b101, c101"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a102, b102, c102"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a103, b103, c103"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a104, b104, c104"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a105, b105, c105"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a106, b106, c106"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a107, b107, c107"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a108, b108, c108"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a109, b109, c109"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a110, b110, c110"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a111, b111, c111"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a112, b112, c112"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a113, b113, c113"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a114, b114, c114"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a115, b115, c115"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a116, b116, c116"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a117, b117, c117"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a118, b118, c118"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a119, b119, c119"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a120, b120, c120"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a121, b121, c121"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a122, b122, c122"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a123, b123, c123"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a124, b124, c124"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a125, b125, c125"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a126, b126, c126"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a127, b127, c127"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a128, b128, c128"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a129, b129, c129"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a130, b130, c130"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a131, b131, c131"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a132, b132, c132"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a133, b133, c133"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a134, b134, c134"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a135, b135, c135"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a136, b136, c136"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a137, b137, c137"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a138, b138, c138"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a139, b139, c139"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a140, b140, c140"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a141, b141, c141"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a142, b142, c142"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a143, b143, c143"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a144, b144, c144"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a145, b145, c145"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a146, b146, c146"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a147, b147, c147"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a148, b148, c148"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a149, b149, c149"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a150, b150, c150"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a151, b151, c151"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a152, b152, c152"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a153, b153, c153"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a154, b154, c154"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a155, b155, c155"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a156, b156, c156"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a157, b157, c157"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a158, b158, c158"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a159, b159, c159"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a160, b160, c160"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a161, b161, c161"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a162, b162, c162"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a163, b163, c163"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a164, b164, c164"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a165, b165, c165"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a166, b166, c166"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a167, b167, c167"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a168, b168, c168"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a169, b169, c169"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a170, b170, c170"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a171, b171, c171"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a172, b172, c172"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a173, b173, c173"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a174, b174, c174"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a175, b175, c175"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a176, b176, c176"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a177, b177, c177"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a178, b178, c178"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a179, b179, c179"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a180, b180, c180"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a181, b181, c181"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a182, b182, c182"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a183, b183, c183"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a184, b184, c184"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a185, b185, c185"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a186, b186, c186"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a187, b187, c187"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a188, b188, c188"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a189, b189, c189"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a190, b190, c190"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a191, b191, c191"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a192, b192, c192"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a193, b193, c193"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a194, b194, c194"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a195, b195, c195"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a196, b196, c196"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a197, b197, c197"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a198, b198, c198"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a199, b199, c199"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-use-directly-from-inlined-code.js b/deps/v8/test/webkit/dfg-inline-arguments-use-directly-from-inlined-code.js
new file mode 100644 (file)
index 0000000..a1c5ca2
--- /dev/null
@@ -0,0 +1,48 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining preserves basic function.arguments functionality when said functionality is used directly from within an inlined code block."
+);
+
+function foo(a,b,c) {
+    return foo.arguments;
+}
+
+function bar(a,b,c) {
+    return foo(a,b,c);
+}
+
+function argsToStr(args) {
+    var str = args + ": ";
+    for (var i = 0; i < args.length; ++i) {
+        if (i)
+            str += ", ";
+        str += args[i];
+    }
+    return str;
+}
+
+for (var __i = 0; __i < 200; ++__i)
+    shouldBe("argsToStr(bar(\"a\" + __i, \"b\" + __i, \"c\" + __i))", "\"[object Arguments]: a" + __i + ", b" + __i + ", c" + __i + "\"");
+
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-use-from-all-the-places-broken-expected.txt b/deps/v8/test/webkit/dfg-inline-arguments-use-from-all-the-places-broken-expected.txt
new file mode 100644 (file)
index 0000000..e5ff607
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This attempts to test that inlining preserves basic function.arguments functionality when said functionality is used from inside and outside getters and from inlined code, all at once; but it fails at this and instead finds other bugs particularly in the DFG stack layout machinery.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-use-from-all-the-places-broken.js b/deps/v8/test/webkit/dfg-inline-arguments-use-from-all-the-places-broken.js
new file mode 100644 (file)
index 0000000..b4fa6c1
--- /dev/null
@@ -0,0 +1,61 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This attempts to test that inlining preserves basic function.arguments functionality when said functionality is used from inside and outside getters and from inlined code, all at once; but it fails at this and instead finds other bugs particularly in the DFG stack layout machinery."
+);
+
+function foo(o,b,c) {
+    return [foo.arguments, bar.arguments].concat(o.f);
+}
+
+function fuzz(a, b) {
+    return [foo.arguments, bar.arguments, getter.arguments, fuzz.arguments];
+}
+
+function getter() {
+    return [foo.arguments, bar.arguments, getter.arguments].concat(fuzz(42, 56));
+}
+
+o = {}
+o.__defineGetter__("f", getter);
+
+function bar(o,b,c) {
+    return [bar.arguments].concat(foo(o,b,c));
+}
+
+function argsToStr(args) {
+    if (args.length === void 0 || args.charAt !== void 0)
+        return "" + args
+    var str = "[" + args + ": ";
+    for (var i = 0; i < args.length; ++i) {
+        if (i)
+            str += ", ";
+        str += argsToStr(args[i]);
+    }
+    return str + "]";
+}
+
+for (var __i = 0; __i < 200; ++__i)
+    shouldThrow("argsToStr(bar(\"a\" + __i, \"b\" + __i, \"c\" + __i))");
+
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-use-from-all-the-places-expected.txt b/deps/v8/test/webkit/dfg-inline-arguments-use-from-all-the-places-expected.txt
new file mode 100644 (file)
index 0000000..347a579
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining preserves basic function.arguments functionality when said functionality is used from inside and outside getters and from inlined code, all at once.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b0, c0], [[object Arguments]: [object Object], b0, c0], [[object Arguments]: [object Object], b0, c0], [[object Arguments]: [object Object], b0, c0], [[object Arguments]: [object Object], b0, c0], [[object Arguments]: ], [[object Arguments]: [object Object], b0, c0], [[object Arguments]: [object Object], b0, c0], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b1, c1], [[object Arguments]: [object Object], b1, c1], [[object Arguments]: [object Object], b1, c1], [[object Arguments]: [object Object], b1, c1], [[object Arguments]: [object Object], b1, c1], [[object Arguments]: ], [[object Arguments]: [object Object], b1, c1], [[object Arguments]: [object Object], b1, c1], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b2, c2], [[object Arguments]: [object Object], b2, c2], [[object Arguments]: [object Object], b2, c2], [[object Arguments]: [object Object], b2, c2], [[object Arguments]: [object Object], b2, c2], [[object Arguments]: ], [[object Arguments]: [object Object], b2, c2], [[object Arguments]: [object Object], b2, c2], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b3, c3], [[object Arguments]: [object Object], b3, c3], [[object Arguments]: [object Object], b3, c3], [[object Arguments]: [object Object], b3, c3], [[object Arguments]: [object Object], b3, c3], [[object Arguments]: ], [[object Arguments]: [object Object], b3, c3], [[object Arguments]: [object Object], b3, c3], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b4, c4], [[object Arguments]: [object Object], b4, c4], [[object Arguments]: [object Object], b4, c4], [[object Arguments]: [object Object], b4, c4], [[object Arguments]: [object Object], b4, c4], [[object Arguments]: ], [[object Arguments]: [object Object], b4, c4], [[object Arguments]: [object Object], b4, c4], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b5, c5], [[object Arguments]: [object Object], b5, c5], [[object Arguments]: [object Object], b5, c5], [[object Arguments]: [object Object], b5, c5], [[object Arguments]: [object Object], b5, c5], [[object Arguments]: ], [[object Arguments]: [object Object], b5, c5], [[object Arguments]: [object Object], b5, c5], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b6, c6], [[object Arguments]: [object Object], b6, c6], [[object Arguments]: [object Object], b6, c6], [[object Arguments]: [object Object], b6, c6], [[object Arguments]: [object Object], b6, c6], [[object Arguments]: ], [[object Arguments]: [object Object], b6, c6], [[object Arguments]: [object Object], b6, c6], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b7, c7], [[object Arguments]: [object Object], b7, c7], [[object Arguments]: [object Object], b7, c7], [[object Arguments]: [object Object], b7, c7], [[object Arguments]: [object Object], b7, c7], [[object Arguments]: ], [[object Arguments]: [object Object], b7, c7], [[object Arguments]: [object Object], b7, c7], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b8, c8], [[object Arguments]: [object Object], b8, c8], [[object Arguments]: [object Object], b8, c8], [[object Arguments]: [object Object], b8, c8], [[object Arguments]: [object Object], b8, c8], [[object Arguments]: ], [[object Arguments]: [object Object], b8, c8], [[object Arguments]: [object Object], b8, c8], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b9, c9], [[object Arguments]: [object Object], b9, c9], [[object Arguments]: [object Object], b9, c9], [[object Arguments]: [object Object], b9, c9], [[object Arguments]: [object Object], b9, c9], [[object Arguments]: ], [[object Arguments]: [object Object], b9, c9], [[object Arguments]: [object Object], b9, c9], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b10, c10], [[object Arguments]: [object Object], b10, c10], [[object Arguments]: [object Object], b10, c10], [[object Arguments]: [object Object], b10, c10], [[object Arguments]: [object Object], b10, c10], [[object Arguments]: ], [[object Arguments]: [object Object], b10, c10], [[object Arguments]: [object Object], b10, c10], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b11, c11], [[object Arguments]: [object Object], b11, c11], [[object Arguments]: [object Object], b11, c11], [[object Arguments]: [object Object], b11, c11], [[object Arguments]: [object Object], b11, c11], [[object Arguments]: ], [[object Arguments]: [object Object], b11, c11], [[object Arguments]: [object Object], b11, c11], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b12, c12], [[object Arguments]: [object Object], b12, c12], [[object Arguments]: [object Object], b12, c12], [[object Arguments]: [object Object], b12, c12], [[object Arguments]: [object Object], b12, c12], [[object Arguments]: ], [[object Arguments]: [object Object], b12, c12], [[object Arguments]: [object Object], b12, c12], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b13, c13], [[object Arguments]: [object Object], b13, c13], [[object Arguments]: [object Object], b13, c13], [[object Arguments]: [object Object], b13, c13], [[object Arguments]: [object Object], b13, c13], [[object Arguments]: ], [[object Arguments]: [object Object], b13, c13], [[object Arguments]: [object Object], b13, c13], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b14, c14], [[object Arguments]: [object Object], b14, c14], [[object Arguments]: [object Object], b14, c14], [[object Arguments]: [object Object], b14, c14], [[object Arguments]: [object Object], b14, c14], [[object Arguments]: ], [[object Arguments]: [object Object], b14, c14], [[object Arguments]: [object Object], b14, c14], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b15, c15], [[object Arguments]: [object Object], b15, c15], [[object Arguments]: [object Object], b15, c15], [[object Arguments]: [object Object], b15, c15], [[object Arguments]: [object Object], b15, c15], [[object Arguments]: ], [[object Arguments]: [object Object], b15, c15], [[object Arguments]: [object Object], b15, c15], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b16, c16], [[object Arguments]: [object Object], b16, c16], [[object Arguments]: [object Object], b16, c16], [[object Arguments]: [object Object], b16, c16], [[object Arguments]: [object Object], b16, c16], [[object Arguments]: ], [[object Arguments]: [object Object], b16, c16], [[object Arguments]: [object Object], b16, c16], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b17, c17], [[object Arguments]: [object Object], b17, c17], [[object Arguments]: [object Object], b17, c17], [[object Arguments]: [object Object], b17, c17], [[object Arguments]: [object Object], b17, c17], [[object Arguments]: ], [[object Arguments]: [object Object], b17, c17], [[object Arguments]: [object Object], b17, c17], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b18, c18], [[object Arguments]: [object Object], b18, c18], [[object Arguments]: [object Object], b18, c18], [[object Arguments]: [object Object], b18, c18], [[object Arguments]: [object Object], b18, c18], [[object Arguments]: ], [[object Arguments]: [object Object], b18, c18], [[object Arguments]: [object Object], b18, c18], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b19, c19], [[object Arguments]: [object Object], b19, c19], [[object Arguments]: [object Object], b19, c19], [[object Arguments]: [object Object], b19, c19], [[object Arguments]: [object Object], b19, c19], [[object Arguments]: ], [[object Arguments]: [object Object], b19, c19], [[object Arguments]: [object Object], b19, c19], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b20, c20], [[object Arguments]: [object Object], b20, c20], [[object Arguments]: [object Object], b20, c20], [[object Arguments]: [object Object], b20, c20], [[object Arguments]: [object Object], b20, c20], [[object Arguments]: ], [[object Arguments]: [object Object], b20, c20], [[object Arguments]: [object Object], b20, c20], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b21, c21], [[object Arguments]: [object Object], b21, c21], [[object Arguments]: [object Object], b21, c21], [[object Arguments]: [object Object], b21, c21], [[object Arguments]: [object Object], b21, c21], [[object Arguments]: ], [[object Arguments]: [object Object], b21, c21], [[object Arguments]: [object Object], b21, c21], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b22, c22], [[object Arguments]: [object Object], b22, c22], [[object Arguments]: [object Object], b22, c22], [[object Arguments]: [object Object], b22, c22], [[object Arguments]: [object Object], b22, c22], [[object Arguments]: ], [[object Arguments]: [object Object], b22, c22], [[object Arguments]: [object Object], b22, c22], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b23, c23], [[object Arguments]: [object Object], b23, c23], [[object Arguments]: [object Object], b23, c23], [[object Arguments]: [object Object], b23, c23], [[object Arguments]: [object Object], b23, c23], [[object Arguments]: ], [[object Arguments]: [object Object], b23, c23], [[object Arguments]: [object Object], b23, c23], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b24, c24], [[object Arguments]: [object Object], b24, c24], [[object Arguments]: [object Object], b24, c24], [[object Arguments]: [object Object], b24, c24], [[object Arguments]: [object Object], b24, c24], [[object Arguments]: ], [[object Arguments]: [object Object], b24, c24], [[object Arguments]: [object Object], b24, c24], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b25, c25], [[object Arguments]: [object Object], b25, c25], [[object Arguments]: [object Object], b25, c25], [[object Arguments]: [object Object], b25, c25], [[object Arguments]: [object Object], b25, c25], [[object Arguments]: ], [[object Arguments]: [object Object], b25, c25], [[object Arguments]: [object Object], b25, c25], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b26, c26], [[object Arguments]: [object Object], b26, c26], [[object Arguments]: [object Object], b26, c26], [[object Arguments]: [object Object], b26, c26], [[object Arguments]: [object Object], b26, c26], [[object Arguments]: ], [[object Arguments]: [object Object], b26, c26], [[object Arguments]: [object Object], b26, c26], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b27, c27], [[object Arguments]: [object Object], b27, c27], [[object Arguments]: [object Object], b27, c27], [[object Arguments]: [object Object], b27, c27], [[object Arguments]: [object Object], b27, c27], [[object Arguments]: ], [[object Arguments]: [object Object], b27, c27], [[object Arguments]: [object Object], b27, c27], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b28, c28], [[object Arguments]: [object Object], b28, c28], [[object Arguments]: [object Object], b28, c28], [[object Arguments]: [object Object], b28, c28], [[object Arguments]: [object Object], b28, c28], [[object Arguments]: ], [[object Arguments]: [object Object], b28, c28], [[object Arguments]: [object Object], b28, c28], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b29, c29], [[object Arguments]: [object Object], b29, c29], [[object Arguments]: [object Object], b29, c29], [[object Arguments]: [object Object], b29, c29], [[object Arguments]: [object Object], b29, c29], [[object Arguments]: ], [[object Arguments]: [object Object], b29, c29], [[object Arguments]: [object Object], b29, c29], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b30, c30], [[object Arguments]: [object Object], b30, c30], [[object Arguments]: [object Object], b30, c30], [[object Arguments]: [object Object], b30, c30], [[object Arguments]: [object Object], b30, c30], [[object Arguments]: ], [[object Arguments]: [object Object], b30, c30], [[object Arguments]: [object Object], b30, c30], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b31, c31], [[object Arguments]: [object Object], b31, c31], [[object Arguments]: [object Object], b31, c31], [[object Arguments]: [object Object], b31, c31], [[object Arguments]: [object Object], b31, c31], [[object Arguments]: ], [[object Arguments]: [object Object], b31, c31], [[object Arguments]: [object Object], b31, c31], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b32, c32], [[object Arguments]: [object Object], b32, c32], [[object Arguments]: [object Object], b32, c32], [[object Arguments]: [object Object], b32, c32], [[object Arguments]: [object Object], b32, c32], [[object Arguments]: ], [[object Arguments]: [object Object], b32, c32], [[object Arguments]: [object Object], b32, c32], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b33, c33], [[object Arguments]: [object Object], b33, c33], [[object Arguments]: [object Object], b33, c33], [[object Arguments]: [object Object], b33, c33], [[object Arguments]: [object Object], b33, c33], [[object Arguments]: ], [[object Arguments]: [object Object], b33, c33], [[object Arguments]: [object Object], b33, c33], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b34, c34], [[object Arguments]: [object Object], b34, c34], [[object Arguments]: [object Object], b34, c34], [[object Arguments]: [object Object], b34, c34], [[object Arguments]: [object Object], b34, c34], [[object Arguments]: ], [[object Arguments]: [object Object], b34, c34], [[object Arguments]: [object Object], b34, c34], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b35, c35], [[object Arguments]: [object Object], b35, c35], [[object Arguments]: [object Object], b35, c35], [[object Arguments]: [object Object], b35, c35], [[object Arguments]: [object Object], b35, c35], [[object Arguments]: ], [[object Arguments]: [object Object], b35, c35], [[object Arguments]: [object Object], b35, c35], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b36, c36], [[object Arguments]: [object Object], b36, c36], [[object Arguments]: [object Object], b36, c36], [[object Arguments]: [object Object], b36, c36], [[object Arguments]: [object Object], b36, c36], [[object Arguments]: ], [[object Arguments]: [object Object], b36, c36], [[object Arguments]: [object Object], b36, c36], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b37, c37], [[object Arguments]: [object Object], b37, c37], [[object Arguments]: [object Object], b37, c37], [[object Arguments]: [object Object], b37, c37], [[object Arguments]: [object Object], b37, c37], [[object Arguments]: ], [[object Arguments]: [object Object], b37, c37], [[object Arguments]: [object Object], b37, c37], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b38, c38], [[object Arguments]: [object Object], b38, c38], [[object Arguments]: [object Object], b38, c38], [[object Arguments]: [object Object], b38, c38], [[object Arguments]: [object Object], b38, c38], [[object Arguments]: ], [[object Arguments]: [object Object], b38, c38], [[object Arguments]: [object Object], b38, c38], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b39, c39], [[object Arguments]: [object Object], b39, c39], [[object Arguments]: [object Object], b39, c39], [[object Arguments]: [object Object], b39, c39], [[object Arguments]: [object Object], b39, c39], [[object Arguments]: ], [[object Arguments]: [object Object], b39, c39], [[object Arguments]: [object Object], b39, c39], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b40, c40], [[object Arguments]: [object Object], b40, c40], [[object Arguments]: [object Object], b40, c40], [[object Arguments]: [object Object], b40, c40], [[object Arguments]: [object Object], b40, c40], [[object Arguments]: ], [[object Arguments]: [object Object], b40, c40], [[object Arguments]: [object Object], b40, c40], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b41, c41], [[object Arguments]: [object Object], b41, c41], [[object Arguments]: [object Object], b41, c41], [[object Arguments]: [object Object], b41, c41], [[object Arguments]: [object Object], b41, c41], [[object Arguments]: ], [[object Arguments]: [object Object], b41, c41], [[object Arguments]: [object Object], b41, c41], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b42, c42], [[object Arguments]: [object Object], b42, c42], [[object Arguments]: [object Object], b42, c42], [[object Arguments]: [object Object], b42, c42], [[object Arguments]: [object Object], b42, c42], [[object Arguments]: ], [[object Arguments]: [object Object], b42, c42], [[object Arguments]: [object Object], b42, c42], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b43, c43], [[object Arguments]: [object Object], b43, c43], [[object Arguments]: [object Object], b43, c43], [[object Arguments]: [object Object], b43, c43], [[object Arguments]: [object Object], b43, c43], [[object Arguments]: ], [[object Arguments]: [object Object], b43, c43], [[object Arguments]: [object Object], b43, c43], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b44, c44], [[object Arguments]: [object Object], b44, c44], [[object Arguments]: [object Object], b44, c44], [[object Arguments]: [object Object], b44, c44], [[object Arguments]: [object Object], b44, c44], [[object Arguments]: ], [[object Arguments]: [object Object], b44, c44], [[object Arguments]: [object Object], b44, c44], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b45, c45], [[object Arguments]: [object Object], b45, c45], [[object Arguments]: [object Object], b45, c45], [[object Arguments]: [object Object], b45, c45], [[object Arguments]: [object Object], b45, c45], [[object Arguments]: ], [[object Arguments]: [object Object], b45, c45], [[object Arguments]: [object Object], b45, c45], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b46, c46], [[object Arguments]: [object Object], b46, c46], [[object Arguments]: [object Object], b46, c46], [[object Arguments]: [object Object], b46, c46], [[object Arguments]: [object Object], b46, c46], [[object Arguments]: ], [[object Arguments]: [object Object], b46, c46], [[object Arguments]: [object Object], b46, c46], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b47, c47], [[object Arguments]: [object Object], b47, c47], [[object Arguments]: [object Object], b47, c47], [[object Arguments]: [object Object], b47, c47], [[object Arguments]: [object Object], b47, c47], [[object Arguments]: ], [[object Arguments]: [object Object], b47, c47], [[object Arguments]: [object Object], b47, c47], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b48, c48], [[object Arguments]: [object Object], b48, c48], [[object Arguments]: [object Object], b48, c48], [[object Arguments]: [object Object], b48, c48], [[object Arguments]: [object Object], b48, c48], [[object Arguments]: ], [[object Arguments]: [object Object], b48, c48], [[object Arguments]: [object Object], b48, c48], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b49, c49], [[object Arguments]: [object Object], b49, c49], [[object Arguments]: [object Object], b49, c49], [[object Arguments]: [object Object], b49, c49], [[object Arguments]: [object Object], b49, c49], [[object Arguments]: ], [[object Arguments]: [object Object], b49, c49], [[object Arguments]: [object Object], b49, c49], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b50, c50], [[object Arguments]: [object Object], b50, c50], [[object Arguments]: [object Object], b50, c50], [[object Arguments]: [object Object], b50, c50], [[object Arguments]: [object Object], b50, c50], [[object Arguments]: ], [[object Arguments]: [object Object], b50, c50], [[object Arguments]: [object Object], b50, c50], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b51, c51], [[object Arguments]: [object Object], b51, c51], [[object Arguments]: [object Object], b51, c51], [[object Arguments]: [object Object], b51, c51], [[object Arguments]: [object Object], b51, c51], [[object Arguments]: ], [[object Arguments]: [object Object], b51, c51], [[object Arguments]: [object Object], b51, c51], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b52, c52], [[object Arguments]: [object Object], b52, c52], [[object Arguments]: [object Object], b52, c52], [[object Arguments]: [object Object], b52, c52], [[object Arguments]: [object Object], b52, c52], [[object Arguments]: ], [[object Arguments]: [object Object], b52, c52], [[object Arguments]: [object Object], b52, c52], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b53, c53], [[object Arguments]: [object Object], b53, c53], [[object Arguments]: [object Object], b53, c53], [[object Arguments]: [object Object], b53, c53], [[object Arguments]: [object Object], b53, c53], [[object Arguments]: ], [[object Arguments]: [object Object], b53, c53], [[object Arguments]: [object Object], b53, c53], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b54, c54], [[object Arguments]: [object Object], b54, c54], [[object Arguments]: [object Object], b54, c54], [[object Arguments]: [object Object], b54, c54], [[object Arguments]: [object Object], b54, c54], [[object Arguments]: ], [[object Arguments]: [object Object], b54, c54], [[object Arguments]: [object Object], b54, c54], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b55, c55], [[object Arguments]: [object Object], b55, c55], [[object Arguments]: [object Object], b55, c55], [[object Arguments]: [object Object], b55, c55], [[object Arguments]: [object Object], b55, c55], [[object Arguments]: ], [[object Arguments]: [object Object], b55, c55], [[object Arguments]: [object Object], b55, c55], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b56, c56], [[object Arguments]: [object Object], b56, c56], [[object Arguments]: [object Object], b56, c56], [[object Arguments]: [object Object], b56, c56], [[object Arguments]: [object Object], b56, c56], [[object Arguments]: ], [[object Arguments]: [object Object], b56, c56], [[object Arguments]: [object Object], b56, c56], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b57, c57], [[object Arguments]: [object Object], b57, c57], [[object Arguments]: [object Object], b57, c57], [[object Arguments]: [object Object], b57, c57], [[object Arguments]: [object Object], b57, c57], [[object Arguments]: ], [[object Arguments]: [object Object], b57, c57], [[object Arguments]: [object Object], b57, c57], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b58, c58], [[object Arguments]: [object Object], b58, c58], [[object Arguments]: [object Object], b58, c58], [[object Arguments]: [object Object], b58, c58], [[object Arguments]: [object Object], b58, c58], [[object Arguments]: ], [[object Arguments]: [object Object], b58, c58], [[object Arguments]: [object Object], b58, c58], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b59, c59], [[object Arguments]: [object Object], b59, c59], [[object Arguments]: [object Object], b59, c59], [[object Arguments]: [object Object], b59, c59], [[object Arguments]: [object Object], b59, c59], [[object Arguments]: ], [[object Arguments]: [object Object], b59, c59], [[object Arguments]: [object Object], b59, c59], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b60, c60], [[object Arguments]: [object Object], b60, c60], [[object Arguments]: [object Object], b60, c60], [[object Arguments]: [object Object], b60, c60], [[object Arguments]: [object Object], b60, c60], [[object Arguments]: ], [[object Arguments]: [object Object], b60, c60], [[object Arguments]: [object Object], b60, c60], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b61, c61], [[object Arguments]: [object Object], b61, c61], [[object Arguments]: [object Object], b61, c61], [[object Arguments]: [object Object], b61, c61], [[object Arguments]: [object Object], b61, c61], [[object Arguments]: ], [[object Arguments]: [object Object], b61, c61], [[object Arguments]: [object Object], b61, c61], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b62, c62], [[object Arguments]: [object Object], b62, c62], [[object Arguments]: [object Object], b62, c62], [[object Arguments]: [object Object], b62, c62], [[object Arguments]: [object Object], b62, c62], [[object Arguments]: ], [[object Arguments]: [object Object], b62, c62], [[object Arguments]: [object Object], b62, c62], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b63, c63], [[object Arguments]: [object Object], b63, c63], [[object Arguments]: [object Object], b63, c63], [[object Arguments]: [object Object], b63, c63], [[object Arguments]: [object Object], b63, c63], [[object Arguments]: ], [[object Arguments]: [object Object], b63, c63], [[object Arguments]: [object Object], b63, c63], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b64, c64], [[object Arguments]: [object Object], b64, c64], [[object Arguments]: [object Object], b64, c64], [[object Arguments]: [object Object], b64, c64], [[object Arguments]: [object Object], b64, c64], [[object Arguments]: ], [[object Arguments]: [object Object], b64, c64], [[object Arguments]: [object Object], b64, c64], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b65, c65], [[object Arguments]: [object Object], b65, c65], [[object Arguments]: [object Object], b65, c65], [[object Arguments]: [object Object], b65, c65], [[object Arguments]: [object Object], b65, c65], [[object Arguments]: ], [[object Arguments]: [object Object], b65, c65], [[object Arguments]: [object Object], b65, c65], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b66, c66], [[object Arguments]: [object Object], b66, c66], [[object Arguments]: [object Object], b66, c66], [[object Arguments]: [object Object], b66, c66], [[object Arguments]: [object Object], b66, c66], [[object Arguments]: ], [[object Arguments]: [object Object], b66, c66], [[object Arguments]: [object Object], b66, c66], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b67, c67], [[object Arguments]: [object Object], b67, c67], [[object Arguments]: [object Object], b67, c67], [[object Arguments]: [object Object], b67, c67], [[object Arguments]: [object Object], b67, c67], [[object Arguments]: ], [[object Arguments]: [object Object], b67, c67], [[object Arguments]: [object Object], b67, c67], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b68, c68], [[object Arguments]: [object Object], b68, c68], [[object Arguments]: [object Object], b68, c68], [[object Arguments]: [object Object], b68, c68], [[object Arguments]: [object Object], b68, c68], [[object Arguments]: ], [[object Arguments]: [object Object], b68, c68], [[object Arguments]: [object Object], b68, c68], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b69, c69], [[object Arguments]: [object Object], b69, c69], [[object Arguments]: [object Object], b69, c69], [[object Arguments]: [object Object], b69, c69], [[object Arguments]: [object Object], b69, c69], [[object Arguments]: ], [[object Arguments]: [object Object], b69, c69], [[object Arguments]: [object Object], b69, c69], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b70, c70], [[object Arguments]: [object Object], b70, c70], [[object Arguments]: [object Object], b70, c70], [[object Arguments]: [object Object], b70, c70], [[object Arguments]: [object Object], b70, c70], [[object Arguments]: ], [[object Arguments]: [object Object], b70, c70], [[object Arguments]: [object Object], b70, c70], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b71, c71], [[object Arguments]: [object Object], b71, c71], [[object Arguments]: [object Object], b71, c71], [[object Arguments]: [object Object], b71, c71], [[object Arguments]: [object Object], b71, c71], [[object Arguments]: ], [[object Arguments]: [object Object], b71, c71], [[object Arguments]: [object Object], b71, c71], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b72, c72], [[object Arguments]: [object Object], b72, c72], [[object Arguments]: [object Object], b72, c72], [[object Arguments]: [object Object], b72, c72], [[object Arguments]: [object Object], b72, c72], [[object Arguments]: ], [[object Arguments]: [object Object], b72, c72], [[object Arguments]: [object Object], b72, c72], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b73, c73], [[object Arguments]: [object Object], b73, c73], [[object Arguments]: [object Object], b73, c73], [[object Arguments]: [object Object], b73, c73], [[object Arguments]: [object Object], b73, c73], [[object Arguments]: ], [[object Arguments]: [object Object], b73, c73], [[object Arguments]: [object Object], b73, c73], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b74, c74], [[object Arguments]: [object Object], b74, c74], [[object Arguments]: [object Object], b74, c74], [[object Arguments]: [object Object], b74, c74], [[object Arguments]: [object Object], b74, c74], [[object Arguments]: ], [[object Arguments]: [object Object], b74, c74], [[object Arguments]: [object Object], b74, c74], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b75, c75], [[object Arguments]: [object Object], b75, c75], [[object Arguments]: [object Object], b75, c75], [[object Arguments]: [object Object], b75, c75], [[object Arguments]: [object Object], b75, c75], [[object Arguments]: ], [[object Arguments]: [object Object], b75, c75], [[object Arguments]: [object Object], b75, c75], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b76, c76], [[object Arguments]: [object Object], b76, c76], [[object Arguments]: [object Object], b76, c76], [[object Arguments]: [object Object], b76, c76], [[object Arguments]: [object Object], b76, c76], [[object Arguments]: ], [[object Arguments]: [object Object], b76, c76], [[object Arguments]: [object Object], b76, c76], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b77, c77], [[object Arguments]: [object Object], b77, c77], [[object Arguments]: [object Object], b77, c77], [[object Arguments]: [object Object], b77, c77], [[object Arguments]: [object Object], b77, c77], [[object Arguments]: ], [[object Arguments]: [object Object], b77, c77], [[object Arguments]: [object Object], b77, c77], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b78, c78], [[object Arguments]: [object Object], b78, c78], [[object Arguments]: [object Object], b78, c78], [[object Arguments]: [object Object], b78, c78], [[object Arguments]: [object Object], b78, c78], [[object Arguments]: ], [[object Arguments]: [object Object], b78, c78], [[object Arguments]: [object Object], b78, c78], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b79, c79], [[object Arguments]: [object Object], b79, c79], [[object Arguments]: [object Object], b79, c79], [[object Arguments]: [object Object], b79, c79], [[object Arguments]: [object Object], b79, c79], [[object Arguments]: ], [[object Arguments]: [object Object], b79, c79], [[object Arguments]: [object Object], b79, c79], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b80, c80], [[object Arguments]: [object Object], b80, c80], [[object Arguments]: [object Object], b80, c80], [[object Arguments]: [object Object], b80, c80], [[object Arguments]: [object Object], b80, c80], [[object Arguments]: ], [[object Arguments]: [object Object], b80, c80], [[object Arguments]: [object Object], b80, c80], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b81, c81], [[object Arguments]: [object Object], b81, c81], [[object Arguments]: [object Object], b81, c81], [[object Arguments]: [object Object], b81, c81], [[object Arguments]: [object Object], b81, c81], [[object Arguments]: ], [[object Arguments]: [object Object], b81, c81], [[object Arguments]: [object Object], b81, c81], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b82, c82], [[object Arguments]: [object Object], b82, c82], [[object Arguments]: [object Object], b82, c82], [[object Arguments]: [object Object], b82, c82], [[object Arguments]: [object Object], b82, c82], [[object Arguments]: ], [[object Arguments]: [object Object], b82, c82], [[object Arguments]: [object Object], b82, c82], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b83, c83], [[object Arguments]: [object Object], b83, c83], [[object Arguments]: [object Object], b83, c83], [[object Arguments]: [object Object], b83, c83], [[object Arguments]: [object Object], b83, c83], [[object Arguments]: ], [[object Arguments]: [object Object], b83, c83], [[object Arguments]: [object Object], b83, c83], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b84, c84], [[object Arguments]: [object Object], b84, c84], [[object Arguments]: [object Object], b84, c84], [[object Arguments]: [object Object], b84, c84], [[object Arguments]: [object Object], b84, c84], [[object Arguments]: ], [[object Arguments]: [object Object], b84, c84], [[object Arguments]: [object Object], b84, c84], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b85, c85], [[object Arguments]: [object Object], b85, c85], [[object Arguments]: [object Object], b85, c85], [[object Arguments]: [object Object], b85, c85], [[object Arguments]: [object Object], b85, c85], [[object Arguments]: ], [[object Arguments]: [object Object], b85, c85], [[object Arguments]: [object Object], b85, c85], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b86, c86], [[object Arguments]: [object Object], b86, c86], [[object Arguments]: [object Object], b86, c86], [[object Arguments]: [object Object], b86, c86], [[object Arguments]: [object Object], b86, c86], [[object Arguments]: ], [[object Arguments]: [object Object], b86, c86], [[object Arguments]: [object Object], b86, c86], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b87, c87], [[object Arguments]: [object Object], b87, c87], [[object Arguments]: [object Object], b87, c87], [[object Arguments]: [object Object], b87, c87], [[object Arguments]: [object Object], b87, c87], [[object Arguments]: ], [[object Arguments]: [object Object], b87, c87], [[object Arguments]: [object Object], b87, c87], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b88, c88], [[object Arguments]: [object Object], b88, c88], [[object Arguments]: [object Object], b88, c88], [[object Arguments]: [object Object], b88, c88], [[object Arguments]: [object Object], b88, c88], [[object Arguments]: ], [[object Arguments]: [object Object], b88, c88], [[object Arguments]: [object Object], b88, c88], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b89, c89], [[object Arguments]: [object Object], b89, c89], [[object Arguments]: [object Object], b89, c89], [[object Arguments]: [object Object], b89, c89], [[object Arguments]: [object Object], b89, c89], [[object Arguments]: ], [[object Arguments]: [object Object], b89, c89], [[object Arguments]: [object Object], b89, c89], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b90, c90], [[object Arguments]: [object Object], b90, c90], [[object Arguments]: [object Object], b90, c90], [[object Arguments]: [object Object], b90, c90], [[object Arguments]: [object Object], b90, c90], [[object Arguments]: ], [[object Arguments]: [object Object], b90, c90], [[object Arguments]: [object Object], b90, c90], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b91, c91], [[object Arguments]: [object Object], b91, c91], [[object Arguments]: [object Object], b91, c91], [[object Arguments]: [object Object], b91, c91], [[object Arguments]: [object Object], b91, c91], [[object Arguments]: ], [[object Arguments]: [object Object], b91, c91], [[object Arguments]: [object Object], b91, c91], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b92, c92], [[object Arguments]: [object Object], b92, c92], [[object Arguments]: [object Object], b92, c92], [[object Arguments]: [object Object], b92, c92], [[object Arguments]: [object Object], b92, c92], [[object Arguments]: ], [[object Arguments]: [object Object], b92, c92], [[object Arguments]: [object Object], b92, c92], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b93, c93], [[object Arguments]: [object Object], b93, c93], [[object Arguments]: [object Object], b93, c93], [[object Arguments]: [object Object], b93, c93], [[object Arguments]: [object Object], b93, c93], [[object Arguments]: ], [[object Arguments]: [object Object], b93, c93], [[object Arguments]: [object Object], b93, c93], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b94, c94], [[object Arguments]: [object Object], b94, c94], [[object Arguments]: [object Object], b94, c94], [[object Arguments]: [object Object], b94, c94], [[object Arguments]: [object Object], b94, c94], [[object Arguments]: ], [[object Arguments]: [object Object], b94, c94], [[object Arguments]: [object Object], b94, c94], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b95, c95], [[object Arguments]: [object Object], b95, c95], [[object Arguments]: [object Object], b95, c95], [[object Arguments]: [object Object], b95, c95], [[object Arguments]: [object Object], b95, c95], [[object Arguments]: ], [[object Arguments]: [object Object], b95, c95], [[object Arguments]: [object Object], b95, c95], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b96, c96], [[object Arguments]: [object Object], b96, c96], [[object Arguments]: [object Object], b96, c96], [[object Arguments]: [object Object], b96, c96], [[object Arguments]: [object Object], b96, c96], [[object Arguments]: ], [[object Arguments]: [object Object], b96, c96], [[object Arguments]: [object Object], b96, c96], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b97, c97], [[object Arguments]: [object Object], b97, c97], [[object Arguments]: [object Object], b97, c97], [[object Arguments]: [object Object], b97, c97], [[object Arguments]: [object Object], b97, c97], [[object Arguments]: ], [[object Arguments]: [object Object], b97, c97], [[object Arguments]: [object Object], b97, c97], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b98, c98], [[object Arguments]: [object Object], b98, c98], [[object Arguments]: [object Object], b98, c98], [[object Arguments]: [object Object], b98, c98], [[object Arguments]: [object Object], b98, c98], [[object Arguments]: ], [[object Arguments]: [object Object], b98, c98], [[object Arguments]: [object Object], b98, c98], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b99, c99], [[object Arguments]: [object Object], b99, c99], [[object Arguments]: [object Object], b99, c99], [[object Arguments]: [object Object], b99, c99], [[object Arguments]: [object Object], b99, c99], [[object Arguments]: ], [[object Arguments]: [object Object], b99, c99], [[object Arguments]: [object Object], b99, c99], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b100, c100], [[object Arguments]: [object Object], b100, c100], [[object Arguments]: [object Object], b100, c100], [[object Arguments]: [object Object], b100, c100], [[object Arguments]: [object Object], b100, c100], [[object Arguments]: ], [[object Arguments]: [object Object], b100, c100], [[object Arguments]: [object Object], b100, c100], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b101, c101], [[object Arguments]: [object Object], b101, c101], [[object Arguments]: [object Object], b101, c101], [[object Arguments]: [object Object], b101, c101], [[object Arguments]: [object Object], b101, c101], [[object Arguments]: ], [[object Arguments]: [object Object], b101, c101], [[object Arguments]: [object Object], b101, c101], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b102, c102], [[object Arguments]: [object Object], b102, c102], [[object Arguments]: [object Object], b102, c102], [[object Arguments]: [object Object], b102, c102], [[object Arguments]: [object Object], b102, c102], [[object Arguments]: ], [[object Arguments]: [object Object], b102, c102], [[object Arguments]: [object Object], b102, c102], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b103, c103], [[object Arguments]: [object Object], b103, c103], [[object Arguments]: [object Object], b103, c103], [[object Arguments]: [object Object], b103, c103], [[object Arguments]: [object Object], b103, c103], [[object Arguments]: ], [[object Arguments]: [object Object], b103, c103], [[object Arguments]: [object Object], b103, c103], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b104, c104], [[object Arguments]: [object Object], b104, c104], [[object Arguments]: [object Object], b104, c104], [[object Arguments]: [object Object], b104, c104], [[object Arguments]: [object Object], b104, c104], [[object Arguments]: ], [[object Arguments]: [object Object], b104, c104], [[object Arguments]: [object Object], b104, c104], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b105, c105], [[object Arguments]: [object Object], b105, c105], [[object Arguments]: [object Object], b105, c105], [[object Arguments]: [object Object], b105, c105], [[object Arguments]: [object Object], b105, c105], [[object Arguments]: ], [[object Arguments]: [object Object], b105, c105], [[object Arguments]: [object Object], b105, c105], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b106, c106], [[object Arguments]: [object Object], b106, c106], [[object Arguments]: [object Object], b106, c106], [[object Arguments]: [object Object], b106, c106], [[object Arguments]: [object Object], b106, c106], [[object Arguments]: ], [[object Arguments]: [object Object], b106, c106], [[object Arguments]: [object Object], b106, c106], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b107, c107], [[object Arguments]: [object Object], b107, c107], [[object Arguments]: [object Object], b107, c107], [[object Arguments]: [object Object], b107, c107], [[object Arguments]: [object Object], b107, c107], [[object Arguments]: ], [[object Arguments]: [object Object], b107, c107], [[object Arguments]: [object Object], b107, c107], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b108, c108], [[object Arguments]: [object Object], b108, c108], [[object Arguments]: [object Object], b108, c108], [[object Arguments]: [object Object], b108, c108], [[object Arguments]: [object Object], b108, c108], [[object Arguments]: ], [[object Arguments]: [object Object], b108, c108], [[object Arguments]: [object Object], b108, c108], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b109, c109], [[object Arguments]: [object Object], b109, c109], [[object Arguments]: [object Object], b109, c109], [[object Arguments]: [object Object], b109, c109], [[object Arguments]: [object Object], b109, c109], [[object Arguments]: ], [[object Arguments]: [object Object], b109, c109], [[object Arguments]: [object Object], b109, c109], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b110, c110], [[object Arguments]: [object Object], b110, c110], [[object Arguments]: [object Object], b110, c110], [[object Arguments]: [object Object], b110, c110], [[object Arguments]: [object Object], b110, c110], [[object Arguments]: ], [[object Arguments]: [object Object], b110, c110], [[object Arguments]: [object Object], b110, c110], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b111, c111], [[object Arguments]: [object Object], b111, c111], [[object Arguments]: [object Object], b111, c111], [[object Arguments]: [object Object], b111, c111], [[object Arguments]: [object Object], b111, c111], [[object Arguments]: ], [[object Arguments]: [object Object], b111, c111], [[object Arguments]: [object Object], b111, c111], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b112, c112], [[object Arguments]: [object Object], b112, c112], [[object Arguments]: [object Object], b112, c112], [[object Arguments]: [object Object], b112, c112], [[object Arguments]: [object Object], b112, c112], [[object Arguments]: ], [[object Arguments]: [object Object], b112, c112], [[object Arguments]: [object Object], b112, c112], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b113, c113], [[object Arguments]: [object Object], b113, c113], [[object Arguments]: [object Object], b113, c113], [[object Arguments]: [object Object], b113, c113], [[object Arguments]: [object Object], b113, c113], [[object Arguments]: ], [[object Arguments]: [object Object], b113, c113], [[object Arguments]: [object Object], b113, c113], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b114, c114], [[object Arguments]: [object Object], b114, c114], [[object Arguments]: [object Object], b114, c114], [[object Arguments]: [object Object], b114, c114], [[object Arguments]: [object Object], b114, c114], [[object Arguments]: ], [[object Arguments]: [object Object], b114, c114], [[object Arguments]: [object Object], b114, c114], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b115, c115], [[object Arguments]: [object Object], b115, c115], [[object Arguments]: [object Object], b115, c115], [[object Arguments]: [object Object], b115, c115], [[object Arguments]: [object Object], b115, c115], [[object Arguments]: ], [[object Arguments]: [object Object], b115, c115], [[object Arguments]: [object Object], b115, c115], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b116, c116], [[object Arguments]: [object Object], b116, c116], [[object Arguments]: [object Object], b116, c116], [[object Arguments]: [object Object], b116, c116], [[object Arguments]: [object Object], b116, c116], [[object Arguments]: ], [[object Arguments]: [object Object], b116, c116], [[object Arguments]: [object Object], b116, c116], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b117, c117], [[object Arguments]: [object Object], b117, c117], [[object Arguments]: [object Object], b117, c117], [[object Arguments]: [object Object], b117, c117], [[object Arguments]: [object Object], b117, c117], [[object Arguments]: ], [[object Arguments]: [object Object], b117, c117], [[object Arguments]: [object Object], b117, c117], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b118, c118], [[object Arguments]: [object Object], b118, c118], [[object Arguments]: [object Object], b118, c118], [[object Arguments]: [object Object], b118, c118], [[object Arguments]: [object Object], b118, c118], [[object Arguments]: ], [[object Arguments]: [object Object], b118, c118], [[object Arguments]: [object Object], b118, c118], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b119, c119], [[object Arguments]: [object Object], b119, c119], [[object Arguments]: [object Object], b119, c119], [[object Arguments]: [object Object], b119, c119], [[object Arguments]: [object Object], b119, c119], [[object Arguments]: ], [[object Arguments]: [object Object], b119, c119], [[object Arguments]: [object Object], b119, c119], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b120, c120], [[object Arguments]: [object Object], b120, c120], [[object Arguments]: [object Object], b120, c120], [[object Arguments]: [object Object], b120, c120], [[object Arguments]: [object Object], b120, c120], [[object Arguments]: ], [[object Arguments]: [object Object], b120, c120], [[object Arguments]: [object Object], b120, c120], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b121, c121], [[object Arguments]: [object Object], b121, c121], [[object Arguments]: [object Object], b121, c121], [[object Arguments]: [object Object], b121, c121], [[object Arguments]: [object Object], b121, c121], [[object Arguments]: ], [[object Arguments]: [object Object], b121, c121], [[object Arguments]: [object Object], b121, c121], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b122, c122], [[object Arguments]: [object Object], b122, c122], [[object Arguments]: [object Object], b122, c122], [[object Arguments]: [object Object], b122, c122], [[object Arguments]: [object Object], b122, c122], [[object Arguments]: ], [[object Arguments]: [object Object], b122, c122], [[object Arguments]: [object Object], b122, c122], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b123, c123], [[object Arguments]: [object Object], b123, c123], [[object Arguments]: [object Object], b123, c123], [[object Arguments]: [object Object], b123, c123], [[object Arguments]: [object Object], b123, c123], [[object Arguments]: ], [[object Arguments]: [object Object], b123, c123], [[object Arguments]: [object Object], b123, c123], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b124, c124], [[object Arguments]: [object Object], b124, c124], [[object Arguments]: [object Object], b124, c124], [[object Arguments]: [object Object], b124, c124], [[object Arguments]: [object Object], b124, c124], [[object Arguments]: ], [[object Arguments]: [object Object], b124, c124], [[object Arguments]: [object Object], b124, c124], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b125, c125], [[object Arguments]: [object Object], b125, c125], [[object Arguments]: [object Object], b125, c125], [[object Arguments]: [object Object], b125, c125], [[object Arguments]: [object Object], b125, c125], [[object Arguments]: ], [[object Arguments]: [object Object], b125, c125], [[object Arguments]: [object Object], b125, c125], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b126, c126], [[object Arguments]: [object Object], b126, c126], [[object Arguments]: [object Object], b126, c126], [[object Arguments]: [object Object], b126, c126], [[object Arguments]: [object Object], b126, c126], [[object Arguments]: ], [[object Arguments]: [object Object], b126, c126], [[object Arguments]: [object Object], b126, c126], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b127, c127], [[object Arguments]: [object Object], b127, c127], [[object Arguments]: [object Object], b127, c127], [[object Arguments]: [object Object], b127, c127], [[object Arguments]: [object Object], b127, c127], [[object Arguments]: ], [[object Arguments]: [object Object], b127, c127], [[object Arguments]: [object Object], b127, c127], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b128, c128], [[object Arguments]: [object Object], b128, c128], [[object Arguments]: [object Object], b128, c128], [[object Arguments]: [object Object], b128, c128], [[object Arguments]: [object Object], b128, c128], [[object Arguments]: ], [[object Arguments]: [object Object], b128, c128], [[object Arguments]: [object Object], b128, c128], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b129, c129], [[object Arguments]: [object Object], b129, c129], [[object Arguments]: [object Object], b129, c129], [[object Arguments]: [object Object], b129, c129], [[object Arguments]: [object Object], b129, c129], [[object Arguments]: ], [[object Arguments]: [object Object], b129, c129], [[object Arguments]: [object Object], b129, c129], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b130, c130], [[object Arguments]: [object Object], b130, c130], [[object Arguments]: [object Object], b130, c130], [[object Arguments]: [object Object], b130, c130], [[object Arguments]: [object Object], b130, c130], [[object Arguments]: ], [[object Arguments]: [object Object], b130, c130], [[object Arguments]: [object Object], b130, c130], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b131, c131], [[object Arguments]: [object Object], b131, c131], [[object Arguments]: [object Object], b131, c131], [[object Arguments]: [object Object], b131, c131], [[object Arguments]: [object Object], b131, c131], [[object Arguments]: ], [[object Arguments]: [object Object], b131, c131], [[object Arguments]: [object Object], b131, c131], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b132, c132], [[object Arguments]: [object Object], b132, c132], [[object Arguments]: [object Object], b132, c132], [[object Arguments]: [object Object], b132, c132], [[object Arguments]: [object Object], b132, c132], [[object Arguments]: ], [[object Arguments]: [object Object], b132, c132], [[object Arguments]: [object Object], b132, c132], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b133, c133], [[object Arguments]: [object Object], b133, c133], [[object Arguments]: [object Object], b133, c133], [[object Arguments]: [object Object], b133, c133], [[object Arguments]: [object Object], b133, c133], [[object Arguments]: ], [[object Arguments]: [object Object], b133, c133], [[object Arguments]: [object Object], b133, c133], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b134, c134], [[object Arguments]: [object Object], b134, c134], [[object Arguments]: [object Object], b134, c134], [[object Arguments]: [object Object], b134, c134], [[object Arguments]: [object Object], b134, c134], [[object Arguments]: ], [[object Arguments]: [object Object], b134, c134], [[object Arguments]: [object Object], b134, c134], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b135, c135], [[object Arguments]: [object Object], b135, c135], [[object Arguments]: [object Object], b135, c135], [[object Arguments]: [object Object], b135, c135], [[object Arguments]: [object Object], b135, c135], [[object Arguments]: ], [[object Arguments]: [object Object], b135, c135], [[object Arguments]: [object Object], b135, c135], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b136, c136], [[object Arguments]: [object Object], b136, c136], [[object Arguments]: [object Object], b136, c136], [[object Arguments]: [object Object], b136, c136], [[object Arguments]: [object Object], b136, c136], [[object Arguments]: ], [[object Arguments]: [object Object], b136, c136], [[object Arguments]: [object Object], b136, c136], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b137, c137], [[object Arguments]: [object Object], b137, c137], [[object Arguments]: [object Object], b137, c137], [[object Arguments]: [object Object], b137, c137], [[object Arguments]: [object Object], b137, c137], [[object Arguments]: ], [[object Arguments]: [object Object], b137, c137], [[object Arguments]: [object Object], b137, c137], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b138, c138], [[object Arguments]: [object Object], b138, c138], [[object Arguments]: [object Object], b138, c138], [[object Arguments]: [object Object], b138, c138], [[object Arguments]: [object Object], b138, c138], [[object Arguments]: ], [[object Arguments]: [object Object], b138, c138], [[object Arguments]: [object Object], b138, c138], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b139, c139], [[object Arguments]: [object Object], b139, c139], [[object Arguments]: [object Object], b139, c139], [[object Arguments]: [object Object], b139, c139], [[object Arguments]: [object Object], b139, c139], [[object Arguments]: ], [[object Arguments]: [object Object], b139, c139], [[object Arguments]: [object Object], b139, c139], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b140, c140], [[object Arguments]: [object Object], b140, c140], [[object Arguments]: [object Object], b140, c140], [[object Arguments]: [object Object], b140, c140], [[object Arguments]: [object Object], b140, c140], [[object Arguments]: ], [[object Arguments]: [object Object], b140, c140], [[object Arguments]: [object Object], b140, c140], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b141, c141], [[object Arguments]: [object Object], b141, c141], [[object Arguments]: [object Object], b141, c141], [[object Arguments]: [object Object], b141, c141], [[object Arguments]: [object Object], b141, c141], [[object Arguments]: ], [[object Arguments]: [object Object], b141, c141], [[object Arguments]: [object Object], b141, c141], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b142, c142], [[object Arguments]: [object Object], b142, c142], [[object Arguments]: [object Object], b142, c142], [[object Arguments]: [object Object], b142, c142], [[object Arguments]: [object Object], b142, c142], [[object Arguments]: ], [[object Arguments]: [object Object], b142, c142], [[object Arguments]: [object Object], b142, c142], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b143, c143], [[object Arguments]: [object Object], b143, c143], [[object Arguments]: [object Object], b143, c143], [[object Arguments]: [object Object], b143, c143], [[object Arguments]: [object Object], b143, c143], [[object Arguments]: ], [[object Arguments]: [object Object], b143, c143], [[object Arguments]: [object Object], b143, c143], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b144, c144], [[object Arguments]: [object Object], b144, c144], [[object Arguments]: [object Object], b144, c144], [[object Arguments]: [object Object], b144, c144], [[object Arguments]: [object Object], b144, c144], [[object Arguments]: ], [[object Arguments]: [object Object], b144, c144], [[object Arguments]: [object Object], b144, c144], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b145, c145], [[object Arguments]: [object Object], b145, c145], [[object Arguments]: [object Object], b145, c145], [[object Arguments]: [object Object], b145, c145], [[object Arguments]: [object Object], b145, c145], [[object Arguments]: ], [[object Arguments]: [object Object], b145, c145], [[object Arguments]: [object Object], b145, c145], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b146, c146], [[object Arguments]: [object Object], b146, c146], [[object Arguments]: [object Object], b146, c146], [[object Arguments]: [object Object], b146, c146], [[object Arguments]: [object Object], b146, c146], [[object Arguments]: ], [[object Arguments]: [object Object], b146, c146], [[object Arguments]: [object Object], b146, c146], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b147, c147], [[object Arguments]: [object Object], b147, c147], [[object Arguments]: [object Object], b147, c147], [[object Arguments]: [object Object], b147, c147], [[object Arguments]: [object Object], b147, c147], [[object Arguments]: ], [[object Arguments]: [object Object], b147, c147], [[object Arguments]: [object Object], b147, c147], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b148, c148], [[object Arguments]: [object Object], b148, c148], [[object Arguments]: [object Object], b148, c148], [[object Arguments]: [object Object], b148, c148], [[object Arguments]: [object Object], b148, c148], [[object Arguments]: ], [[object Arguments]: [object Object], b148, c148], [[object Arguments]: [object Object], b148, c148], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b149, c149], [[object Arguments]: [object Object], b149, c149], [[object Arguments]: [object Object], b149, c149], [[object Arguments]: [object Object], b149, c149], [[object Arguments]: [object Object], b149, c149], [[object Arguments]: ], [[object Arguments]: [object Object], b149, c149], [[object Arguments]: [object Object], b149, c149], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b150, c150], [[object Arguments]: [object Object], b150, c150], [[object Arguments]: [object Object], b150, c150], [[object Arguments]: [object Object], b150, c150], [[object Arguments]: [object Object], b150, c150], [[object Arguments]: ], [[object Arguments]: [object Object], b150, c150], [[object Arguments]: [object Object], b150, c150], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b151, c151], [[object Arguments]: [object Object], b151, c151], [[object Arguments]: [object Object], b151, c151], [[object Arguments]: [object Object], b151, c151], [[object Arguments]: [object Object], b151, c151], [[object Arguments]: ], [[object Arguments]: [object Object], b151, c151], [[object Arguments]: [object Object], b151, c151], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b152, c152], [[object Arguments]: [object Object], b152, c152], [[object Arguments]: [object Object], b152, c152], [[object Arguments]: [object Object], b152, c152], [[object Arguments]: [object Object], b152, c152], [[object Arguments]: ], [[object Arguments]: [object Object], b152, c152], [[object Arguments]: [object Object], b152, c152], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b153, c153], [[object Arguments]: [object Object], b153, c153], [[object Arguments]: [object Object], b153, c153], [[object Arguments]: [object Object], b153, c153], [[object Arguments]: [object Object], b153, c153], [[object Arguments]: ], [[object Arguments]: [object Object], b153, c153], [[object Arguments]: [object Object], b153, c153], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b154, c154], [[object Arguments]: [object Object], b154, c154], [[object Arguments]: [object Object], b154, c154], [[object Arguments]: [object Object], b154, c154], [[object Arguments]: [object Object], b154, c154], [[object Arguments]: ], [[object Arguments]: [object Object], b154, c154], [[object Arguments]: [object Object], b154, c154], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b155, c155], [[object Arguments]: [object Object], b155, c155], [[object Arguments]: [object Object], b155, c155], [[object Arguments]: [object Object], b155, c155], [[object Arguments]: [object Object], b155, c155], [[object Arguments]: ], [[object Arguments]: [object Object], b155, c155], [[object Arguments]: [object Object], b155, c155], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b156, c156], [[object Arguments]: [object Object], b156, c156], [[object Arguments]: [object Object], b156, c156], [[object Arguments]: [object Object], b156, c156], [[object Arguments]: [object Object], b156, c156], [[object Arguments]: ], [[object Arguments]: [object Object], b156, c156], [[object Arguments]: [object Object], b156, c156], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b157, c157], [[object Arguments]: [object Object], b157, c157], [[object Arguments]: [object Object], b157, c157], [[object Arguments]: [object Object], b157, c157], [[object Arguments]: [object Object], b157, c157], [[object Arguments]: ], [[object Arguments]: [object Object], b157, c157], [[object Arguments]: [object Object], b157, c157], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b158, c158], [[object Arguments]: [object Object], b158, c158], [[object Arguments]: [object Object], b158, c158], [[object Arguments]: [object Object], b158, c158], [[object Arguments]: [object Object], b158, c158], [[object Arguments]: ], [[object Arguments]: [object Object], b158, c158], [[object Arguments]: [object Object], b158, c158], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b159, c159], [[object Arguments]: [object Object], b159, c159], [[object Arguments]: [object Object], b159, c159], [[object Arguments]: [object Object], b159, c159], [[object Arguments]: [object Object], b159, c159], [[object Arguments]: ], [[object Arguments]: [object Object], b159, c159], [[object Arguments]: [object Object], b159, c159], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b160, c160], [[object Arguments]: [object Object], b160, c160], [[object Arguments]: [object Object], b160, c160], [[object Arguments]: [object Object], b160, c160], [[object Arguments]: [object Object], b160, c160], [[object Arguments]: ], [[object Arguments]: [object Object], b160, c160], [[object Arguments]: [object Object], b160, c160], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b161, c161], [[object Arguments]: [object Object], b161, c161], [[object Arguments]: [object Object], b161, c161], [[object Arguments]: [object Object], b161, c161], [[object Arguments]: [object Object], b161, c161], [[object Arguments]: ], [[object Arguments]: [object Object], b161, c161], [[object Arguments]: [object Object], b161, c161], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b162, c162], [[object Arguments]: [object Object], b162, c162], [[object Arguments]: [object Object], b162, c162], [[object Arguments]: [object Object], b162, c162], [[object Arguments]: [object Object], b162, c162], [[object Arguments]: ], [[object Arguments]: [object Object], b162, c162], [[object Arguments]: [object Object], b162, c162], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b163, c163], [[object Arguments]: [object Object], b163, c163], [[object Arguments]: [object Object], b163, c163], [[object Arguments]: [object Object], b163, c163], [[object Arguments]: [object Object], b163, c163], [[object Arguments]: ], [[object Arguments]: [object Object], b163, c163], [[object Arguments]: [object Object], b163, c163], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b164, c164], [[object Arguments]: [object Object], b164, c164], [[object Arguments]: [object Object], b164, c164], [[object Arguments]: [object Object], b164, c164], [[object Arguments]: [object Object], b164, c164], [[object Arguments]: ], [[object Arguments]: [object Object], b164, c164], [[object Arguments]: [object Object], b164, c164], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b165, c165], [[object Arguments]: [object Object], b165, c165], [[object Arguments]: [object Object], b165, c165], [[object Arguments]: [object Object], b165, c165], [[object Arguments]: [object Object], b165, c165], [[object Arguments]: ], [[object Arguments]: [object Object], b165, c165], [[object Arguments]: [object Object], b165, c165], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b166, c166], [[object Arguments]: [object Object], b166, c166], [[object Arguments]: [object Object], b166, c166], [[object Arguments]: [object Object], b166, c166], [[object Arguments]: [object Object], b166, c166], [[object Arguments]: ], [[object Arguments]: [object Object], b166, c166], [[object Arguments]: [object Object], b166, c166], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b167, c167], [[object Arguments]: [object Object], b167, c167], [[object Arguments]: [object Object], b167, c167], [[object Arguments]: [object Object], b167, c167], [[object Arguments]: [object Object], b167, c167], [[object Arguments]: ], [[object Arguments]: [object Object], b167, c167], [[object Arguments]: [object Object], b167, c167], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b168, c168], [[object Arguments]: [object Object], b168, c168], [[object Arguments]: [object Object], b168, c168], [[object Arguments]: [object Object], b168, c168], [[object Arguments]: [object Object], b168, c168], [[object Arguments]: ], [[object Arguments]: [object Object], b168, c168], [[object Arguments]: [object Object], b168, c168], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b169, c169], [[object Arguments]: [object Object], b169, c169], [[object Arguments]: [object Object], b169, c169], [[object Arguments]: [object Object], b169, c169], [[object Arguments]: [object Object], b169, c169], [[object Arguments]: ], [[object Arguments]: [object Object], b169, c169], [[object Arguments]: [object Object], b169, c169], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b170, c170], [[object Arguments]: [object Object], b170, c170], [[object Arguments]: [object Object], b170, c170], [[object Arguments]: [object Object], b170, c170], [[object Arguments]: [object Object], b170, c170], [[object Arguments]: ], [[object Arguments]: [object Object], b170, c170], [[object Arguments]: [object Object], b170, c170], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b171, c171], [[object Arguments]: [object Object], b171, c171], [[object Arguments]: [object Object], b171, c171], [[object Arguments]: [object Object], b171, c171], [[object Arguments]: [object Object], b171, c171], [[object Arguments]: ], [[object Arguments]: [object Object], b171, c171], [[object Arguments]: [object Object], b171, c171], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b172, c172], [[object Arguments]: [object Object], b172, c172], [[object Arguments]: [object Object], b172, c172], [[object Arguments]: [object Object], b172, c172], [[object Arguments]: [object Object], b172, c172], [[object Arguments]: ], [[object Arguments]: [object Object], b172, c172], [[object Arguments]: [object Object], b172, c172], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b173, c173], [[object Arguments]: [object Object], b173, c173], [[object Arguments]: [object Object], b173, c173], [[object Arguments]: [object Object], b173, c173], [[object Arguments]: [object Object], b173, c173], [[object Arguments]: ], [[object Arguments]: [object Object], b173, c173], [[object Arguments]: [object Object], b173, c173], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b174, c174], [[object Arguments]: [object Object], b174, c174], [[object Arguments]: [object Object], b174, c174], [[object Arguments]: [object Object], b174, c174], [[object Arguments]: [object Object], b174, c174], [[object Arguments]: ], [[object Arguments]: [object Object], b174, c174], [[object Arguments]: [object Object], b174, c174], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b175, c175], [[object Arguments]: [object Object], b175, c175], [[object Arguments]: [object Object], b175, c175], [[object Arguments]: [object Object], b175, c175], [[object Arguments]: [object Object], b175, c175], [[object Arguments]: ], [[object Arguments]: [object Object], b175, c175], [[object Arguments]: [object Object], b175, c175], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b176, c176], [[object Arguments]: [object Object], b176, c176], [[object Arguments]: [object Object], b176, c176], [[object Arguments]: [object Object], b176, c176], [[object Arguments]: [object Object], b176, c176], [[object Arguments]: ], [[object Arguments]: [object Object], b176, c176], [[object Arguments]: [object Object], b176, c176], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b177, c177], [[object Arguments]: [object Object], b177, c177], [[object Arguments]: [object Object], b177, c177], [[object Arguments]: [object Object], b177, c177], [[object Arguments]: [object Object], b177, c177], [[object Arguments]: ], [[object Arguments]: [object Object], b177, c177], [[object Arguments]: [object Object], b177, c177], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b178, c178], [[object Arguments]: [object Object], b178, c178], [[object Arguments]: [object Object], b178, c178], [[object Arguments]: [object Object], b178, c178], [[object Arguments]: [object Object], b178, c178], [[object Arguments]: ], [[object Arguments]: [object Object], b178, c178], [[object Arguments]: [object Object], b178, c178], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b179, c179], [[object Arguments]: [object Object], b179, c179], [[object Arguments]: [object Object], b179, c179], [[object Arguments]: [object Object], b179, c179], [[object Arguments]: [object Object], b179, c179], [[object Arguments]: ], [[object Arguments]: [object Object], b179, c179], [[object Arguments]: [object Object], b179, c179], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b180, c180], [[object Arguments]: [object Object], b180, c180], [[object Arguments]: [object Object], b180, c180], [[object Arguments]: [object Object], b180, c180], [[object Arguments]: [object Object], b180, c180], [[object Arguments]: ], [[object Arguments]: [object Object], b180, c180], [[object Arguments]: [object Object], b180, c180], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b181, c181], [[object Arguments]: [object Object], b181, c181], [[object Arguments]: [object Object], b181, c181], [[object Arguments]: [object Object], b181, c181], [[object Arguments]: [object Object], b181, c181], [[object Arguments]: ], [[object Arguments]: [object Object], b181, c181], [[object Arguments]: [object Object], b181, c181], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b182, c182], [[object Arguments]: [object Object], b182, c182], [[object Arguments]: [object Object], b182, c182], [[object Arguments]: [object Object], b182, c182], [[object Arguments]: [object Object], b182, c182], [[object Arguments]: ], [[object Arguments]: [object Object], b182, c182], [[object Arguments]: [object Object], b182, c182], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b183, c183], [[object Arguments]: [object Object], b183, c183], [[object Arguments]: [object Object], b183, c183], [[object Arguments]: [object Object], b183, c183], [[object Arguments]: [object Object], b183, c183], [[object Arguments]: ], [[object Arguments]: [object Object], b183, c183], [[object Arguments]: [object Object], b183, c183], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b184, c184], [[object Arguments]: [object Object], b184, c184], [[object Arguments]: [object Object], b184, c184], [[object Arguments]: [object Object], b184, c184], [[object Arguments]: [object Object], b184, c184], [[object Arguments]: ], [[object Arguments]: [object Object], b184, c184], [[object Arguments]: [object Object], b184, c184], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b185, c185], [[object Arguments]: [object Object], b185, c185], [[object Arguments]: [object Object], b185, c185], [[object Arguments]: [object Object], b185, c185], [[object Arguments]: [object Object], b185, c185], [[object Arguments]: ], [[object Arguments]: [object Object], b185, c185], [[object Arguments]: [object Object], b185, c185], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b186, c186], [[object Arguments]: [object Object], b186, c186], [[object Arguments]: [object Object], b186, c186], [[object Arguments]: [object Object], b186, c186], [[object Arguments]: [object Object], b186, c186], [[object Arguments]: ], [[object Arguments]: [object Object], b186, c186], [[object Arguments]: [object Object], b186, c186], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b187, c187], [[object Arguments]: [object Object], b187, c187], [[object Arguments]: [object Object], b187, c187], [[object Arguments]: [object Object], b187, c187], [[object Arguments]: [object Object], b187, c187], [[object Arguments]: ], [[object Arguments]: [object Object], b187, c187], [[object Arguments]: [object Object], b187, c187], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b188, c188], [[object Arguments]: [object Object], b188, c188], [[object Arguments]: [object Object], b188, c188], [[object Arguments]: [object Object], b188, c188], [[object Arguments]: [object Object], b188, c188], [[object Arguments]: ], [[object Arguments]: [object Object], b188, c188], [[object Arguments]: [object Object], b188, c188], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b189, c189], [[object Arguments]: [object Object], b189, c189], [[object Arguments]: [object Object], b189, c189], [[object Arguments]: [object Object], b189, c189], [[object Arguments]: [object Object], b189, c189], [[object Arguments]: ], [[object Arguments]: [object Object], b189, c189], [[object Arguments]: [object Object], b189, c189], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b190, c190], [[object Arguments]: [object Object], b190, c190], [[object Arguments]: [object Object], b190, c190], [[object Arguments]: [object Object], b190, c190], [[object Arguments]: [object Object], b190, c190], [[object Arguments]: ], [[object Arguments]: [object Object], b190, c190], [[object Arguments]: [object Object], b190, c190], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b191, c191], [[object Arguments]: [object Object], b191, c191], [[object Arguments]: [object Object], b191, c191], [[object Arguments]: [object Object], b191, c191], [[object Arguments]: [object Object], b191, c191], [[object Arguments]: ], [[object Arguments]: [object Object], b191, c191], [[object Arguments]: [object Object], b191, c191], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b192, c192], [[object Arguments]: [object Object], b192, c192], [[object Arguments]: [object Object], b192, c192], [[object Arguments]: [object Object], b192, c192], [[object Arguments]: [object Object], b192, c192], [[object Arguments]: ], [[object Arguments]: [object Object], b192, c192], [[object Arguments]: [object Object], b192, c192], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b193, c193], [[object Arguments]: [object Object], b193, c193], [[object Arguments]: [object Object], b193, c193], [[object Arguments]: [object Object], b193, c193], [[object Arguments]: [object Object], b193, c193], [[object Arguments]: ], [[object Arguments]: [object Object], b193, c193], [[object Arguments]: [object Object], b193, c193], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b194, c194], [[object Arguments]: [object Object], b194, c194], [[object Arguments]: [object Object], b194, c194], [[object Arguments]: [object Object], b194, c194], [[object Arguments]: [object Object], b194, c194], [[object Arguments]: ], [[object Arguments]: [object Object], b194, c194], [[object Arguments]: [object Object], b194, c194], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b195, c195], [[object Arguments]: [object Object], b195, c195], [[object Arguments]: [object Object], b195, c195], [[object Arguments]: [object Object], b195, c195], [[object Arguments]: [object Object], b195, c195], [[object Arguments]: ], [[object Arguments]: [object Object], b195, c195], [[object Arguments]: [object Object], b195, c195], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b196, c196], [[object Arguments]: [object Object], b196, c196], [[object Arguments]: [object Object], b196, c196], [[object Arguments]: [object Object], b196, c196], [[object Arguments]: [object Object], b196, c196], [[object Arguments]: ], [[object Arguments]: [object Object], b196, c196], [[object Arguments]: [object Object], b196, c196], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b197, c197], [[object Arguments]: [object Object], b197, c197], [[object Arguments]: [object Object], b197, c197], [[object Arguments]: [object Object], b197, c197], [[object Arguments]: [object Object], b197, c197], [[object Arguments]: ], [[object Arguments]: [object Object], b197, c197], [[object Arguments]: [object Object], b197, c197], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b198, c198], [[object Arguments]: [object Object], b198, c198], [[object Arguments]: [object Object], b198, c198], [[object Arguments]: [object Object], b198, c198], [[object Arguments]: [object Object], b198, c198], [[object Arguments]: ], [[object Arguments]: [object Object], b198, c198], [[object Arguments]: [object Object], b198, c198], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b199, c199], [[object Arguments]: [object Object], b199, c199], [[object Arguments]: [object Object], b199, c199], [[object Arguments]: [object Object], b199, c199], [[object Arguments]: [object Object], b199, c199], [[object Arguments]: ], [[object Arguments]: [object Object], b199, c199], [[object Arguments]: [object Object], b199, c199], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-use-from-all-the-places.js b/deps/v8/test/webkit/dfg-inline-arguments-use-from-all-the-places.js
new file mode 100644 (file)
index 0000000..4470d9c
--- /dev/null
@@ -0,0 +1,65 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining preserves basic function.arguments functionality when said functionality is used from inside and outside getters and from inlined code, all at once."
+);
+
+function foo(o,b,c) {
+    return [foo.arguments, bar.arguments].concat(o.f);
+}
+
+function fuzz(a, b) {
+    return [foo.arguments, bar.arguments, getter.arguments, fuzz.arguments];
+}
+
+function getter() {
+    return [foo.arguments, bar.arguments, getter.arguments].concat(fuzz(42, 56));
+}
+
+o = {}
+o.__defineGetter__("f", getter);
+
+function bar(o,b,c) {
+    return [bar.arguments].concat(foo(o,b,c));
+}
+
+function argsToStr(args) {
+    if (args.length === void 0 || args.charAt !== void 0)
+        return "" + args
+    var str = "[" + args + ": ";
+    for (var i = 0; i < args.length; ++i) {
+        if (i)
+            str += ", ";
+        str += argsToStr(args[i]);
+    }
+    return str + "]";
+}
+
+for (var __i = 0; __i < 200; ++__i) {
+    var text1 = "[[object Arguments]: [object Object], b" + __i + ", c" + __i + "]";
+    var text2 = "[[object Arguments]: ]";
+    var text3 = "[[object Arguments]: 42, 56]";
+    shouldBe("argsToStr(bar(o, \"b\" + __i, \"c\" + __i))", "\"[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: " + text1 + ", " + text1 + ", " + text1 + ", " + text1 + ", " + text1 + ", " + text2 + ", " + text1 + ", " + text1 + ", " + text2 + ", " + text3 + "]\"");
+}
+
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-use-from-getter-expected.txt b/deps/v8/test/webkit/dfg-inline-arguments-use-from-getter-expected.txt
new file mode 100644 (file)
index 0000000..6aa6ba2
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining preserves basic function.arguments functionality when said functionality is used from a getter.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b0, c0"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b1, c1"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b2, c2"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b3, c3"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b4, c4"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b5, c5"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b6, c6"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b7, c7"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b8, c8"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b9, c9"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b10, c10"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b11, c11"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b12, c12"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b13, c13"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b14, c14"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b15, c15"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b16, c16"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b17, c17"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b18, c18"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b19, c19"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b20, c20"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b21, c21"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b22, c22"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b23, c23"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b24, c24"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b25, c25"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b26, c26"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b27, c27"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b28, c28"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b29, c29"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b30, c30"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b31, c31"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b32, c32"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b33, c33"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b34, c34"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b35, c35"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b36, c36"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b37, c37"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b38, c38"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b39, c39"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b40, c40"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b41, c41"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b42, c42"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b43, c43"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b44, c44"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b45, c45"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b46, c46"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b47, c47"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b48, c48"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b49, c49"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b50, c50"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b51, c51"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b52, c52"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b53, c53"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b54, c54"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b55, c55"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b56, c56"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b57, c57"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b58, c58"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b59, c59"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b60, c60"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b61, c61"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b62, c62"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b63, c63"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b64, c64"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b65, c65"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b66, c66"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b67, c67"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b68, c68"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b69, c69"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b70, c70"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b71, c71"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b72, c72"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b73, c73"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b74, c74"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b75, c75"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b76, c76"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b77, c77"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b78, c78"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b79, c79"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b80, c80"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b81, c81"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b82, c82"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b83, c83"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b84, c84"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b85, c85"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b86, c86"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b87, c87"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b88, c88"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b89, c89"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b90, c90"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b91, c91"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b92, c92"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b93, c93"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b94, c94"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b95, c95"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b96, c96"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b97, c97"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b98, c98"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b99, c99"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b100, c100"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b101, c101"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b102, c102"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b103, c103"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b104, c104"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b105, c105"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b106, c106"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b107, c107"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b108, c108"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b109, c109"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b110, c110"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b111, c111"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b112, c112"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b113, c113"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b114, c114"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b115, c115"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b116, c116"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b117, c117"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b118, c118"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b119, c119"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b120, c120"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b121, c121"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b122, c122"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b123, c123"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b124, c124"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b125, c125"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b126, c126"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b127, c127"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b128, c128"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b129, c129"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b130, c130"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b131, c131"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b132, c132"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b133, c133"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b134, c134"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b135, c135"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b136, c136"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b137, c137"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b138, c138"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b139, c139"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b140, c140"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b141, c141"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b142, c142"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b143, c143"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b144, c144"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b145, c145"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b146, c146"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b147, c147"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b148, c148"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b149, c149"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b150, c150"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b151, c151"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b152, c152"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b153, c153"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b154, c154"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b155, c155"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b156, c156"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b157, c157"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b158, c158"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b159, c159"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b160, c160"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b161, c161"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b162, c162"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b163, c163"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b164, c164"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b165, c165"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b166, c166"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b167, c167"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b168, c168"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b169, c169"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b170, c170"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b171, c171"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b172, c172"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b173, c173"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b174, c174"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b175, c175"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b176, c176"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b177, c177"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b178, c178"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b179, c179"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b180, c180"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b181, c181"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b182, c182"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b183, c183"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b184, c184"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b185, c185"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b186, c186"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b187, c187"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b188, c188"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b189, c189"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b190, c190"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b191, c191"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b192, c192"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b193, c193"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b194, c194"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b195, c195"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b196, c196"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b197, c197"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b198, c198"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b199, c199"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-use-from-getter.js b/deps/v8/test/webkit/dfg-inline-arguments-use-from-getter.js
new file mode 100644 (file)
index 0000000..f532d35
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining preserves basic function.arguments functionality when said functionality is used from a getter."
+);
+
+function foo(o,b,c) {
+    return o.f;
+}
+
+o = {}
+o.__defineGetter__("f", function(){ return foo.arguments; });
+
+function bar(o,b,c) {
+    return foo(o,b,c);
+}
+
+function argsToStr(args) {
+    var str = args + ": ";
+    for (var i = 0; i < args.length; ++i) {
+        if (i)
+            str += ", ";
+        str += args[i];
+    }
+    return str;
+}
+
+for (var __i = 0; __i < 200; ++__i)
+    shouldBe("argsToStr(bar(o, \"b\" + __i, \"c\" + __i))", "\"[object Arguments]: [object Object], b" + __i + ", c" + __i + "\"");
+
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-use-from-uninlined-code-expected.txt b/deps/v8/test/webkit/dfg-inline-arguments-use-from-uninlined-code-expected.txt
new file mode 100644 (file)
index 0000000..3508a08
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining preserves basic function.arguments functionality when said functionality is used from outside of the code where inlining actually happened.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a0,b1,c2,a0,b1,c2"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a1,b2,c3,a1,b2,c3"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a2,b3,c4,a2,b3,c4"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a3,b4,c5,a3,b4,c5"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a4,b5,c6,a4,b5,c6"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a5,b6,c7,a5,b6,c7"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a6,b7,c8,a6,b7,c8"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a7,b8,c9,a7,b8,c9"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a8,b9,c10,a8,b9,c10"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a9,b10,c11,a9,b10,c11"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a10,b11,c12,a10,b11,c12"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a11,b12,c13,a11,b12,c13"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a12,b13,c14,a12,b13,c14"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a13,b14,c15,a13,b14,c15"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a14,b15,c16,a14,b15,c16"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a15,b16,c17,a15,b16,c17"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a16,b17,c18,a16,b17,c18"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a17,b18,c19,a17,b18,c19"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a18,b19,c20,a18,b19,c20"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a19,b20,c21,a19,b20,c21"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a20,b21,c22,a20,b21,c22"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a21,b22,c23,a21,b22,c23"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a22,b23,c24,a22,b23,c24"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a23,b24,c25,a23,b24,c25"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a24,b25,c26,a24,b25,c26"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a25,b26,c27,a25,b26,c27"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a26,b27,c28,a26,b27,c28"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a27,b28,c29,a27,b28,c29"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a28,b29,c30,a28,b29,c30"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a29,b30,c31,a29,b30,c31"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a30,b31,c32,a30,b31,c32"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a31,b32,c33,a31,b32,c33"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a32,b33,c34,a32,b33,c34"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a33,b34,c35,a33,b34,c35"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a34,b35,c36,a34,b35,c36"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a35,b36,c37,a35,b36,c37"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a36,b37,c38,a36,b37,c38"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a37,b38,c39,a37,b38,c39"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a38,b39,c40,a38,b39,c40"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a39,b40,c41,a39,b40,c41"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a40,b41,c42,a40,b41,c42"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a41,b42,c43,a41,b42,c43"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a42,b43,c44,a42,b43,c44"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a43,b44,c45,a43,b44,c45"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a44,b45,c46,a44,b45,c46"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a45,b46,c47,a45,b46,c47"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a46,b47,c48,a46,b47,c48"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a47,b48,c49,a47,b48,c49"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a48,b49,c50,a48,b49,c50"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a49,b50,c51,a49,b50,c51"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a50,b51,c52,a50,b51,c52"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a51,b52,c53,a51,b52,c53"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a52,b53,c54,a52,b53,c54"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a53,b54,c55,a53,b54,c55"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a54,b55,c56,a54,b55,c56"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a55,b56,c57,a55,b56,c57"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a56,b57,c58,a56,b57,c58"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a57,b58,c59,a57,b58,c59"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a58,b59,c60,a58,b59,c60"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a59,b60,c61,a59,b60,c61"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a60,b61,c62,a60,b61,c62"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a61,b62,c63,a61,b62,c63"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a62,b63,c64,a62,b63,c64"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a63,b64,c65,a63,b64,c65"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a64,b65,c66,a64,b65,c66"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a65,b66,c67,a65,b66,c67"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a66,b67,c68,a66,b67,c68"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a67,b68,c69,a67,b68,c69"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a68,b69,c70,a68,b69,c70"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a69,b70,c71,a69,b70,c71"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a70,b71,c72,a70,b71,c72"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a71,b72,c73,a71,b72,c73"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a72,b73,c74,a72,b73,c74"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a73,b74,c75,a73,b74,c75"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a74,b75,c76,a74,b75,c76"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a75,b76,c77,a75,b76,c77"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a76,b77,c78,a76,b77,c78"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a77,b78,c79,a77,b78,c79"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a78,b79,c80,a78,b79,c80"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a79,b80,c81,a79,b80,c81"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a80,b81,c82,a80,b81,c82"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a81,b82,c83,a81,b82,c83"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a82,b83,c84,a82,b83,c84"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a83,b84,c85,a83,b84,c85"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a84,b85,c86,a84,b85,c86"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a85,b86,c87,a85,b86,c87"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a86,b87,c88,a86,b87,c88"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a87,b88,c89,a87,b88,c89"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a88,b89,c90,a88,b89,c90"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a89,b90,c91,a89,b90,c91"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a90,b91,c92,a90,b91,c92"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a91,b92,c93,a91,b92,c93"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a92,b93,c94,a92,b93,c94"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a93,b94,c95,a93,b94,c95"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a94,b95,c96,a94,b95,c96"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a95,b96,c97,a95,b96,c97"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a96,b97,c98,a96,b97,c98"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a97,b98,c99,a97,b98,c99"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a98,b99,c100,a98,b99,c100"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a99,b100,c101,a99,b100,c101"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a100,b101,c102,a100,b101,c102"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a101,b102,c103,a101,b102,c103"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a102,b103,c104,a102,b103,c104"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a103,b104,c105,a103,b104,c105"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a104,b105,c106,a104,b105,c106"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a105,b106,c107,a105,b106,c107"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a106,b107,c108,a106,b107,c108"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a107,b108,c109,a107,b108,c109"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a108,b109,c110,a108,b109,c110"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a109,b110,c111,a109,b110,c111"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a110,b111,c112,a110,b111,c112"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a111,b112,c113,a111,b112,c113"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a112,b113,c114,a112,b113,c114"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a113,b114,c115,a113,b114,c115"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a114,b115,c116,a114,b115,c116"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a115,b116,c117,a115,b116,c117"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a116,b117,c118,a116,b117,c118"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a117,b118,c119,a117,b118,c119"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a118,b119,c120,a118,b119,c120"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a119,b120,c121,a119,b120,c121"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a120,b121,c122,a120,b121,c122"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a121,b122,c123,a121,b122,c123"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a122,b123,c124,a122,b123,c124"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a123,b124,c125,a123,b124,c125"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a124,b125,c126,a124,b125,c126"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a125,b126,c127,a125,b126,c127"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a126,b127,c128,a126,b127,c128"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a127,b128,c129,a127,b128,c129"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a128,b129,c130,a128,b129,c130"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a129,b130,c131,a129,b130,c131"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a130,b131,c132,a130,b131,c132"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a131,b132,c133,a131,b132,c133"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a132,b133,c134,a132,b133,c134"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a133,b134,c135,a133,b134,c135"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a134,b135,c136,a134,b135,c136"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a135,b136,c137,a135,b136,c137"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a136,b137,c138,a136,b137,c138"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a137,b138,c139,a137,b138,c139"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a138,b139,c140,a138,b139,c140"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a139,b140,c141,a139,b140,c141"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a140,b141,c142,a140,b141,c142"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a141,b142,c143,a141,b142,c143"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a142,b143,c144,a142,b143,c144"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a143,b144,c145,a143,b144,c145"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a144,b145,c146,a144,b145,c146"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a145,b146,c147,a145,b146,c147"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a146,b147,c148,a146,b147,c148"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a147,b148,c149,a147,b148,c149"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a148,b149,c150,a148,b149,c150"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a149,b150,c151,a149,b150,c151"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a150,b151,c152,a150,b151,c152"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a151,b152,c153,a151,b152,c153"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a152,b153,c154,a152,b153,c154"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a153,b154,c155,a153,b154,c155"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a154,b155,c156,a154,b155,c156"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a155,b156,c157,a155,b156,c157"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a156,b157,c158,a156,b157,c158"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a157,b158,c159,a157,b158,c159"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a158,b159,c160,a158,b159,c160"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a159,b160,c161,a159,b160,c161"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a160,b161,c162,a160,b161,c162"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a161,b162,c163,a161,b162,c163"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a162,b163,c164,a162,b163,c164"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a163,b164,c165,a163,b164,c165"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a164,b165,c166,a164,b165,c166"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a165,b166,c167,a165,b166,c167"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a166,b167,c168,a166,b167,c168"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a167,b168,c169,a167,b168,c169"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a168,b169,c170,a168,b169,c170"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a169,b170,c171,a169,b170,c171"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a170,b171,c172,a170,b171,c172"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a171,b172,c173,a171,b172,c173"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a172,b173,c174,a172,b173,c174"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a173,b174,c175,a173,b174,c175"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a174,b175,c176,a174,b175,c176"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a175,b176,c177,a175,b176,c177"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a176,b177,c178,a176,b177,c178"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a177,b178,c179,a177,b178,c179"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a178,b179,c180,a178,b179,c180"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a179,b180,c181,a179,b180,c181"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a180,b181,c182,a180,b181,c182"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a181,b182,c183,a181,b182,c183"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a182,b183,c184,a182,b183,c184"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a183,b184,c185,a183,b184,c185"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a184,b185,c186,a184,b185,c186"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a185,b186,c187,a185,b186,c187"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a186,b187,c188,a186,b187,c188"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a187,b188,c189,a187,b188,c189"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a188,b189,c190,a188,b189,c190"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a189,b190,c191,a189,b190,c191"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a190,b191,c192,a190,b191,c192"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a191,b192,c193,a191,b192,c193"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a192,b193,c194,a192,b193,c194"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a193,b194,c195,a193,b194,c195"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a194,b195,c196,a194,b195,c196"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a195,b196,c197,a195,b196,c197"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a196,b197,c198,a196,b197,c198"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a197,b198,c199,a197,b198,c199"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a198,b199,c200,a198,b199,c200"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a199,b200,c201,a199,b200,c201"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inline-arguments-use-from-uninlined-code.js b/deps/v8/test/webkit/dfg-inline-arguments-use-from-uninlined-code.js
new file mode 100644 (file)
index 0000000..aca6127
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining preserves basic function.arguments functionality when said functionality is used from outside of the code where inlining actually happened."
+);
+
+function foo() {
+    return bar.arguments;
+}
+
+function fuzz() {
+    return baz.arguments;
+}
+
+function bar(a,b,c) {
+    return foo(a,b,c);
+}
+
+function baz(a,b,c) {
+    var array1 = bar(a,b,c);
+    var array2 = fuzz(a,b,c);
+    var result = [];
+    for (var i = 0; i < array1.length; ++i)
+        result.push(array1[i]);
+    for (var i = 0; i < array2.length; ++i)
+        result.push(array2[i]);
+    return result;
+}
+
+for (var __i = 0; __i < 200; ++__i)
+    shouldBe("\"\" + baz(\"a\" + __i, \"b\" + (__i + 1), \"c\" + (__i + 2))",
+             "\"a" + __i + ",b" + (__i + 1) + ",c" + (__i + 2) + ",a" + __i + ",b" + (__i + 1) + ",c" + (__i + 2) + "\"");
+
+var successfullyParsed = true;
diff --git a/deps/v8/test/webkit/dfg-inline-constant-expected.txt b/deps/v8/test/webkit/dfg-inline-constant-expected.txt
new file mode 100644 (file)
index 0000000..18150fe
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that function inlining in the DFG JIT doesn't get confused by constants being reused between inliner and inlinee.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(6, 0) is 10
+PASS bar(6, 1) is 15
+PASS bar(6, false) is 10
+PASS bar(6, true) is 15
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inline-constant.js b/deps/v8/test/webkit/dfg-inline-constant.js
new file mode 100644 (file)
index 0000000..8c7f7eb
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that function inlining in the DFG JIT doesn't get confused by constants being reused between inliner and inlinee."
+);
+
+function foo(a, b) {
+    if (b)
+        return a + 4;
+    return b + 5;
+}
+
+function bar(a, b) {
+    return foo(a, b) + 5;
+}
+
+for (var i = 0; i < 1000; ++i)
+    bar(i, i + 1);
+
+shouldBe("bar(6, 0)", "10");
+shouldBe("bar(6, 1)", "15");
+shouldBe("bar(6, false)", "10");
+shouldBe("bar(6, true)", "15");
diff --git a/deps/v8/test/webkit/dfg-inline-constructor-that-uses-arguments-expected.txt b/deps/v8/test/webkit/dfg-inline-constructor-that-uses-arguments-expected.txt
new file mode 100644 (file)
index 0000000..14b249a
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we can inline a constructor that uses arguments without failing DFG validation.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inline-constructor-that-uses-arguments.js b/deps/v8/test/webkit/dfg-inline-constructor-that-uses-arguments.js
new file mode 100644 (file)
index 0000000..0a2862f
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we can inline a constructor that uses arguments without failing DFG validation."
+);
+
+function Foo() {
+    this.x = arguments[0];
+}
+
+function bar() {
+    return new Foo(42);
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("bar().x", "42");
diff --git a/deps/v8/test/webkit/dfg-inline-early-return-expected.txt b/deps/v8/test/webkit/dfg-inline-early-return-expected.txt
new file mode 100644 (file)
index 0000000..4b12ab2
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that an early return in the first basic block does not crash the DFG's bytecode parser whilst inlining.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(42) is 42
+PASS bar(42) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inline-early-return.js b/deps/v8/test/webkit/dfg-inline-early-return.js
new file mode 100644 (file)
index 0000000..986a7ec
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that an early return in the first basic block does not crash the DFG's bytecode parser whilst inlining."
+);
+
+function foo(a) {
+    {
+        return a;
+    }
+}
+
+function bar(a) {
+    return foo(a);
+}
+
+for (var i = 0; i < 100; ++i)
+    bar(i);
+
+shouldBe("foo(42)", "42");
+shouldBe("bar(42)", "42");
+
+var successfullyParsed = true;
diff --git a/deps/v8/test/webkit/dfg-inline-function-dot-caller-expected.txt b/deps/v8/test/webkit/dfg-inline-function-dot-caller-expected.txt
new file mode 100644 (file)
index 0000000..8ad5014
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that DFG inlining does not brak function.arguments.caller.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS resultArray.length is 4
+PASS resultArray[3] is "g"
+PASS resultArray[2] is "makeInlinableCall"
+PASS resultArray[1] is "inlineable"
+PASS resultArray[0] is "nonInlineable"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inline-function-dot-caller.js b/deps/v8/test/webkit/dfg-inline-function-dot-caller.js
new file mode 100644 (file)
index 0000000..c6dd2b2
--- /dev/null
@@ -0,0 +1,69 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that DFG inlining does not brak function.arguments.caller."
+);
+
+var callCount = 0;
+
+var resultArray = []
+
+function throwError() {
+   throw {};
+}
+var object = {
+   nonInlineable : function nonInlineable() {
+       if (0) return [arguments, function(){}];
+       if (++callCount == 999999) {
+           var f = nonInlineable;
+           while (f) {
+               resultArray.push(f.name);
+               f=f.arguments.callee.caller;
+           }
+       }
+   },
+   inlineable : function inlineable() {
+       this.nonInlineable();
+   }
+}
+function makeInlinableCall(o) {
+   for (var i = 0; i < 1000; i++)
+       o.inlineable();
+}
+
+function g() {
+    var j = 0;
+    for (var i = 0; i < 1000; i++) {
+        j++;
+        makeInlinableCall(object);
+    }
+}
+g();
+
+shouldBe("resultArray.length", "4");
+shouldBe("resultArray[3]", "\"g\"");
+shouldBe("resultArray[2]", "\"makeInlinableCall\"");
+shouldBe("resultArray[1]", "\"inlineable\"");
+shouldBe("resultArray[0]", "\"nonInlineable\"");
+
diff --git a/deps/v8/test/webkit/dfg-inline-new-array-buffer-expected.txt b/deps/v8/test/webkit/dfg-inline-new-array-buffer-expected.txt
new file mode 100644 (file)
index 0000000..fc2ec06
--- /dev/null
@@ -0,0 +1,72 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining correctly handles constant buffers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar()[0] is 1
+PASS bar()[1] is 2
+PASS bar()[2] is 3
+PASS bar()[3] is 4
+PASS bar()[0] is 1
+PASS bar()[1] is 2
+PASS bar()[2] is 3
+PASS bar()[3] is 4
+PASS bar()[0] is 1
+PASS bar()[1] is 2
+PASS bar()[2] is 3
+PASS bar()[3] is 4
+PASS bar()[0] is 1
+PASS bar()[1] is 2
+PASS bar()[2] is 3
+PASS bar()[3] is 4
+PASS bar()[0] is 1
+PASS bar()[1] is 2
+PASS bar()[2] is 3
+PASS bar()[3] is 4
+PASS bar()[0] is 1
+PASS bar()[1] is 2
+PASS bar()[2] is 3
+PASS bar()[3] is 4
+PASS bar()[0] is 1
+PASS bar()[1] is 2
+PASS bar()[2] is 3
+PASS bar()[3] is 4
+PASS bar()[0] is 1
+PASS bar()[1] is 2
+PASS bar()[2] is 3
+PASS bar()[3] is 4
+PASS bar()[0] is 1
+PASS bar()[1] is 2
+PASS bar()[2] is 3
+PASS bar()[3] is 4
+PASS bar()[0] is 1
+PASS bar()[1] is 2
+PASS bar()[2] is 3
+PASS bar()[3] is 4
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inline-new-array-buffer.js b/deps/v8/test/webkit/dfg-inline-new-array-buffer.js
new file mode 100644 (file)
index 0000000..c751f03
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining correctly handles constant buffers."
+);
+
+function foo() {
+    return [1, 2, 3, 4];
+}
+
+function bar() {
+    return foo();
+}
+
+for (var i = 0; i < 1000; ++i) {
+    bar();
+}
+
+for (var i = 0; i < 10; ++i) {
+    shouldBe("bar()[0]", "1")
+    shouldBe("bar()[1]", "2")
+    shouldBe("bar()[2]", "3")
+    shouldBe("bar()[3]", "4")
+}
+
+var successfullyParsed = true;
diff --git a/deps/v8/test/webkit/dfg-inline-unused-this-expected.txt b/deps/v8/test/webkit/dfg-inline-unused-this-expected.txt
new file mode 100644 (file)
index 0000000..eac21d0
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining a function that does not use this does not result in this being lost entirely.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS baz(object, 0, 0) is 0
+PASS baz(object, 1, 2) is 3
+PASS baz(object, 2, 4) is 6
+PASS baz(object, 3, 6) is 9
+PASS baz(object, 4, 8) is 12
+PASS baz(object, 5, 10) is 15
+PASS baz(object, 6, 12) is 18
+PASS baz(object, 7, 14) is 21
+PASS baz(object, 8, 16) is 24
+PASS baz(object, 9, 18) is 27
+PASS baz(object, 10, 20) is 30
+PASS baz(object, 11, 22) is 33
+PASS baz(object, 12, 24) is 36
+PASS baz(object, 13, 26) is 39
+PASS baz(object, 14, 28) is 42
+PASS baz(object, 15, 30) is 45
+PASS baz(object, 16, 32) is 48
+PASS baz(object, 17, 34) is 51
+PASS baz(object, 18, 36) is 54
+PASS baz(object, 19, 38) is 57
+PASS baz(object, 20, 40) is 60
+PASS baz(object, 21, 42) is 63
+PASS baz(object, 22, 44) is 66
+PASS baz(object, 23, 46) is 69
+PASS baz(object, 24, 48) is 72
+PASS baz(object, 25, 50) is 75
+PASS baz(object, 26, 52) is 78
+PASS baz(object, 27, 54) is 81
+PASS baz(object, 28, 56) is 84
+PASS baz(object, 29, 58) is 87
+PASS baz(object, 30, 60) is 90
+PASS baz(object, 31, 62) is 93
+PASS baz(object, 32, 64) is 96
+PASS baz(object, 33, 66) is 99
+PASS baz(object, 34, 68) is 102
+PASS baz(object, 35, 70) is 105
+PASS baz(object, 36, 72) is 108
+PASS baz(object, 37, 74) is 111
+PASS baz(object, 38, 76) is 114
+PASS baz(object, 39, 78) is 117
+PASS baz(object, 40, 80) is 120
+PASS baz(object, 41, 82) is 123
+PASS baz(object, 42, 84) is 126
+PASS baz(object, 43, 86) is 129
+PASS baz(object, 44, 88) is 132
+PASS baz(object, 45, 90) is 135
+PASS baz(object, 46, 92) is 138
+PASS baz(object, 47, 94) is 141
+PASS baz(object, 48, 96) is 144
+PASS baz(object, 49, 98) is 147
+PASS baz(object, 50, 100) is 150
+PASS baz(object, 51, 102) is 153
+PASS baz(object, 52, 104) is 156
+PASS baz(object, 53, 106) is 159
+PASS baz(object, 54, 108) is 162
+PASS baz(object, 55, 110) is 165
+PASS baz(object, 56, 112) is 168
+PASS baz(object, 57, 114) is 171
+PASS baz(object, 58, 116) is 174
+PASS baz(object, 59, 118) is 177
+PASS baz(object, 60, 120) is 180
+PASS baz(object, 61, 122) is 183
+PASS baz(object, 62, 124) is 186
+PASS baz(object, 63, 126) is 189
+PASS baz(object, 64, 128) is 192
+PASS baz(object, 65, 130) is 195
+PASS baz(object, 66, 132) is 198
+PASS baz(object, 67, 134) is 201
+PASS baz(object, 68, 136) is 204
+PASS baz(object, 69, 138) is 207
+PASS baz(object, 70, 140) is 210
+PASS baz(object, 71, 142) is 213
+PASS baz(object, 72, 144) is 216
+PASS baz(object, 73, 146) is 219
+PASS baz(object, 74, 148) is 222
+PASS baz(object, 75, 150) is 225
+PASS baz(object, 76, 152) is 228
+PASS baz(object, 77, 154) is 231
+PASS baz(object, 78, 156) is 234
+PASS baz(object, 79, 158) is 237
+PASS baz(object, 80, 160) is 240
+PASS baz(object, 81, 162) is 243
+PASS baz(object, 82, 164) is 246
+PASS baz(object, 83, 166) is 249
+PASS baz(object, 84, 168) is 252
+PASS baz(object, 85, 170) is 255
+PASS baz(object, 86, 172) is 258
+PASS baz(object, 87, 174) is 261
+PASS baz(object, 88, 176) is 264
+PASS baz(object, 89, 178) is 267
+PASS baz(object, 90, 180) is 270
+PASS baz(object, 91, 182) is 273
+PASS baz(object, 92, 184) is 276
+PASS baz(object, 93, 186) is 279
+PASS baz(object, 94, 188) is 282
+PASS baz(object, 95, 190) is 285
+PASS baz(object, 96, 192) is 288
+PASS baz(object, 97, 194) is 291
+PASS baz(object, 98, 196) is 294
+PASS baz(object, 99, 198) is 297
+PASS baz(object, 100, 200) is 300
+PASS baz(object, 101, 202) is 303
+PASS baz(object, 102, 204) is 306
+PASS baz(object, 103, 206) is 309
+PASS baz(object, 104, 208) is 312
+PASS baz(object, 105, 210) is 315
+PASS baz(object, 106, 212) is 318
+PASS baz(object, 107, 214) is 321
+PASS baz(object, 108, 216) is 324
+PASS baz(object, 109, 218) is 327
+PASS baz(object, 110, 220) is 330
+PASS baz(object, 111, 222) is 333
+PASS baz(object, 112, 224) is 336
+PASS baz(object, 113, 226) is 339
+PASS baz(object, 114, 228) is 342
+PASS baz(object, 115, 230) is 345
+PASS baz(object, 116, 232) is 348
+PASS baz(object, 117, 234) is 351
+PASS baz(object, 118, 236) is 354
+PASS baz(object, 119, 238) is 357
+PASS baz(object, 120, 240) is 360
+PASS baz(object, 121, 242) is 363
+PASS baz(object, 122, 244) is 366
+PASS baz(object, 123, 246) is 369
+PASS baz(object, 124, 248) is 372
+PASS baz(object, 125, 250) is 375
+PASS baz(object, 126, 252) is 378
+PASS baz(object, 127, 254) is 381
+PASS baz(object, 128, 256) is 384
+PASS baz(object, 129, 258) is 387
+PASS baz(object, 130, 260) is 390
+PASS baz(object, 131, 262) is 393
+PASS baz(object, 132, 264) is 396
+PASS baz(object, 133, 266) is 399
+PASS baz(object, 134, 268) is 402
+PASS baz(object, 135, 270) is 405
+PASS baz(object, 136, 272) is 408
+PASS baz(object, 137, 274) is 411
+PASS baz(object, 138, 276) is 414
+PASS baz(object, 139, 278) is 417
+PASS baz(object, 140, 280) is 420
+PASS baz(object, 141, 282) is 423
+PASS baz(object, 142, 284) is 426
+PASS baz(object, 143, 286) is 429
+PASS baz(object, 144, 288) is 432
+PASS baz(object, 145, 290) is 435
+PASS baz(object, 146, 292) is 438
+PASS baz(object, 147, 294) is 441
+PASS baz(object, 148, 296) is 444
+PASS baz(object, 149, 298) is 447
+PASS baz(object, 150, 300) is 450
+PASS baz(object, 151, 302) is 453
+PASS baz(object, 152, 304) is 456
+PASS baz(object, 153, 306) is 459
+PASS baz(object, 154, 308) is 462
+PASS baz(object, 155, 310) is 465
+PASS baz(object, 156, 312) is 468
+PASS baz(object, 157, 314) is 471
+PASS baz(object, 158, 316) is 474
+PASS baz(object, 159, 318) is 477
+PASS baz(object, 160, 320) is 480
+PASS baz(object, 161, 322) is 483
+PASS baz(object, 162, 324) is 486
+PASS baz(object, 163, 326) is 489
+PASS baz(object, 164, 328) is 492
+PASS baz(object, 165, 330) is 495
+PASS baz(object, 166, 332) is 498
+PASS baz(object, 167, 334) is 501
+PASS baz(object, 168, 336) is 504
+PASS baz(object, 169, 338) is 507
+PASS baz(object, 170, 340) is 510
+PASS baz(object, 171, 342) is 513
+PASS baz(object, 172, 344) is 516
+PASS baz(object, 173, 346) is 519
+PASS baz(object, 174, 348) is 522
+PASS baz(object, 175, 350) is 525
+PASS baz(object, 176, 352) is 528
+PASS baz(object, 177, 354) is 531
+PASS baz(object, 178, 356) is 534
+PASS baz(object, 179, 358) is 537
+PASS baz(object, 180, 360) is 540
+PASS baz(object, 181, 362) is 543
+PASS baz(object, 182, 364) is 546
+PASS baz(object, 183, 366) is 549
+PASS baz(object, 184, 368) is 552
+PASS baz(object, 185, 370) is 555
+PASS baz(object, 186, 372) is 558
+PASS baz(object, 187, 374) is 561
+PASS baz(object, 188, 376) is 564
+PASS baz(object, 189, 378) is 567
+PASS baz(object, 190, 380) is 570
+PASS baz(object, 191, 382) is 573
+PASS baz(object, 192, 384) is 576
+PASS baz(object, 193, 386) is 579
+PASS baz(object, 194, 388) is 582
+PASS baz(object, 195, 390) is 585
+PASS baz(object, 196, 392) is 588
+PASS baz(object, 197, 394) is 591
+PASS baz(object, 198, 396) is 594
+PASS baz(object, 199, 398) is 597
+PASS baz(object, 200, 400) is 600
+PASS baz(object, 201, 402) is 603
+PASS baz(object, 202, 404) is 606
+PASS baz(object, 203, 406) is 609
+PASS baz(object, 204, 408) is 612
+PASS baz(object, 205, 410) is 615
+PASS baz(object, 206, 412) is 618
+PASS baz(object, 207, 414) is 621
+PASS baz(object, 208, 416) is 624
+PASS baz(object, 209, 418) is 627
+PASS baz(object, 210, 420) is 630
+PASS baz(object, 211, 422) is 633
+PASS baz(object, 212, 424) is 636
+PASS baz(object, 213, 426) is 639
+PASS baz(object, 214, 428) is 642
+PASS baz(object, 215, 430) is 645
+PASS baz(object, 216, 432) is 648
+PASS baz(object, 217, 434) is 651
+PASS baz(object, 218, 436) is 654
+PASS baz(object, 219, 438) is 657
+PASS baz(object, 220, 440) is 660
+PASS baz(object, 221, 442) is 663
+PASS baz(object, 222, 444) is 666
+PASS baz(object, 223, 446) is 669
+PASS baz(object, 224, 448) is 672
+PASS baz(object, 225, 450) is 675
+PASS baz(object, 226, 452) is 678
+PASS baz(object, 227, 454) is 681
+PASS baz(object, 228, 456) is 684
+PASS baz(object, 229, 458) is 687
+PASS baz(object, 230, 460) is 690
+PASS baz(object, 231, 462) is 693
+PASS baz(object, 232, 464) is 696
+PASS baz(object, 233, 466) is 699
+PASS baz(object, 234, 468) is 702
+PASS baz(object, 235, 470) is 705
+PASS baz(object, 236, 472) is 708
+PASS baz(object, 237, 474) is 711
+PASS baz(object, 238, 476) is 714
+PASS baz(object, 239, 478) is 717
+PASS baz(object, 240, 480) is 720
+PASS baz(object, 241, 482) is 723
+PASS baz(object, 242, 484) is 726
+PASS baz(object, 243, 486) is 729
+PASS baz(object, 244, 488) is 732
+PASS baz(object, 245, 490) is 735
+PASS baz(object, 246, 492) is 738
+PASS baz(object, 247, 494) is 741
+PASS baz(object, 248, 496) is 744
+PASS baz(object, 249, 498) is 747
+PASS baz(object, 250, 500) is 750
+PASS baz(object, 251, 502) is 753
+PASS baz(object, 252, 504) is 756
+PASS baz(object, 253, 506) is 759
+PASS baz(object, 254, 508) is 762
+PASS baz(object, 255, 510) is 765
+PASS baz(object, 256, 512) is 768
+PASS baz(object, 257, 514) is 771
+PASS baz(object, 258, 516) is 774
+PASS baz(object, 259, 518) is 777
+PASS baz(object, 260, 520) is 780
+PASS baz(object, 261, 522) is 783
+PASS baz(object, 262, 524) is 786
+PASS baz(object, 263, 526) is 789
+PASS baz(object, 264, 528) is 792
+PASS baz(object, 265, 530) is 795
+PASS baz(object, 266, 532) is 798
+PASS baz(object, 267, 534) is 801
+PASS baz(object, 268, 536) is 804
+PASS baz(object, 269, 538) is 807
+PASS baz(object, 270, 540) is 810
+PASS baz(object, 271, 542) is 813
+PASS baz(object, 272, 544) is 816
+PASS baz(object, 273, 546) is 819
+PASS baz(object, 274, 548) is 822
+PASS baz(object, 275, 550) is 825
+PASS baz(object, 276, 552) is 828
+PASS baz(object, 277, 554) is 831
+PASS baz(object, 278, 556) is 834
+PASS baz(object, 279, 558) is 837
+PASS baz(object, 280, 560) is 840
+PASS baz(object, 281, 562) is 843
+PASS baz(object, 282, 564) is 846
+PASS baz(object, 283, 566) is 849
+PASS baz(object, 284, 568) is 852
+PASS baz(object, 285, 570) is 855
+PASS baz(object, 286, 572) is 858
+PASS baz(object, 287, 574) is 861
+PASS baz(object, 288, 576) is 864
+PASS baz(object, 289, 578) is 867
+PASS baz(object, 290, 580) is 870
+PASS baz(object, 291, 582) is 873
+PASS baz(object, 292, 584) is 876
+PASS baz(object, 293, 586) is 879
+PASS baz(object, 294, 588) is 882
+PASS baz(object, 295, 590) is 885
+PASS baz(object, 296, 592) is 888
+PASS baz(object, 297, 594) is 891
+PASS baz(object, 298, 596) is 894
+PASS baz(object, 299, 598) is 897
+PASS baz(object, 300, 600) is 900
+PASS baz(object, 301, 602) is 903
+PASS baz(object, 302, 604) is 906
+PASS baz(object, 303, 606) is 909
+PASS baz(object, 304, 608) is 912
+PASS baz(object, 305, 610) is 915
+PASS baz(object, 306, 612) is 918
+PASS baz(object, 307, 614) is 921
+PASS baz(object, 308, 616) is 924
+PASS baz(object, 309, 618) is 927
+PASS baz(object, 310, 620) is 930
+PASS baz(object, 311, 622) is 933
+PASS baz(object, 312, 624) is 936
+PASS baz(object, 313, 626) is 939
+PASS baz(object, 314, 628) is 942
+PASS baz(object, 315, 630) is 945
+PASS baz(object, 316, 632) is 948
+PASS baz(object, 317, 634) is 951
+PASS baz(object, 318, 636) is 954
+PASS baz(object, 319, 638) is 957
+PASS baz(object, 320, 640) is 960
+PASS baz(object, 321, 642) is 963
+PASS baz(object, 322, 644) is 966
+PASS baz(object, 323, 646) is 969
+PASS baz(object, 324, 648) is 972
+PASS baz(object, 325, 650) is 975
+PASS baz(object, 326, 652) is 978
+PASS baz(object, 327, 654) is 981
+PASS baz(object, 328, 656) is 984
+PASS baz(object, 329, 658) is 987
+PASS baz(object, 330, 660) is 990
+PASS baz(object, 331, 662) is 993
+PASS baz(object, 332, 664) is 996
+PASS baz(object, 333, 666) is 999
+PASS baz(object, 334, 668) is 1002
+PASS baz(object, 335, 670) is 1005
+PASS baz(object, 336, 672) is 1008
+PASS baz(object, 337, 674) is 1011
+PASS baz(object, 338, 676) is 1014
+PASS baz(object, 339, 678) is 1017
+PASS baz(object, 340, 680) is 1020
+PASS baz(object, 341, 682) is 1023
+PASS baz(object, 342, 684) is 1026
+PASS baz(object, 343, 686) is 1029
+PASS baz(object, 344, 688) is 1032
+PASS baz(object, 345, 690) is 1035
+PASS baz(object, 346, 692) is 1038
+PASS baz(object, 347, 694) is 1041
+PASS baz(object, 348, 696) is 1044
+PASS baz(object, 349, 698) is 1047
+PASS baz(object, 350, 700) is 1050
+PASS baz(object, 351, 702) is 1053
+PASS baz(object, 352, 704) is 1056
+PASS baz(object, 353, 706) is 1059
+PASS baz(object, 354, 708) is 1062
+PASS baz(object, 355, 710) is 1065
+PASS baz(object, 356, 712) is 1068
+PASS baz(object, 357, 714) is 1071
+PASS baz(object, 358, 716) is 1074
+PASS baz(object, 359, 718) is 1077
+PASS baz(object, 360, 720) is 1080
+PASS baz(object, 361, 722) is 1083
+PASS baz(object, 362, 724) is 1086
+PASS baz(object, 363, 726) is 1089
+PASS baz(object, 364, 728) is 1092
+PASS baz(object, 365, 730) is 1095
+PASS baz(object, 366, 732) is 1098
+PASS baz(object, 367, 734) is 1101
+PASS baz(object, 368, 736) is 1104
+PASS baz(object, 369, 738) is 1107
+PASS baz(object, 370, 740) is 1110
+PASS baz(object, 371, 742) is 1113
+PASS baz(object, 372, 744) is 1116
+PASS baz(object, 373, 746) is 1119
+PASS baz(object, 374, 748) is 1122
+PASS baz(object, 375, 750) is 1125
+PASS baz(object, 376, 752) is 1128
+PASS baz(object, 377, 754) is 1131
+PASS baz(object, 378, 756) is 1134
+PASS baz(object, 379, 758) is 1137
+PASS baz(object, 380, 760) is 1140
+PASS baz(object, 381, 762) is 1143
+PASS baz(object, 382, 764) is 1146
+PASS baz(object, 383, 766) is 1149
+PASS baz(object, 384, 768) is 1152
+PASS baz(object, 385, 770) is 1155
+PASS baz(object, 386, 772) is 1158
+PASS baz(object, 387, 774) is 1161
+PASS baz(object, 388, 776) is 1164
+PASS baz(object, 389, 778) is 1167
+PASS baz(object, 390, 780) is 1170
+PASS baz(object, 391, 782) is 1173
+PASS baz(object, 392, 784) is 1176
+PASS baz(object, 393, 786) is 1179
+PASS baz(object, 394, 788) is 1182
+PASS baz(object, 395, 790) is 1185
+PASS baz(object, 396, 792) is 1188
+PASS baz(object, 397, 794) is 1191
+PASS baz(object, 398, 796) is 1194
+PASS baz(object, 399, 798) is 1197
+PASS baz(object, 400, 800) is 1200
+PASS baz(object, 401, 802) is 1203
+PASS baz(object, 402, 804) is 1206
+PASS baz(object, 403, 806) is 1209
+PASS baz(object, 404, 808) is 1212
+PASS baz(object, 405, 810) is 1215
+PASS baz(object, 406, 812) is 1218
+PASS baz(object, 407, 814) is 1221
+PASS baz(object, 408, 816) is 1224
+PASS baz(object, 409, 818) is 1227
+PASS baz(object, 410, 820) is 1230
+PASS baz(object, 411, 822) is 1233
+PASS baz(object, 412, 824) is 1236
+PASS baz(object, 413, 826) is 1239
+PASS baz(object, 414, 828) is 1242
+PASS baz(object, 415, 830) is 1245
+PASS baz(object, 416, 832) is 1248
+PASS baz(object, 417, 834) is 1251
+PASS baz(object, 418, 836) is 1254
+PASS baz(object, 419, 838) is 1257
+PASS baz(object, 420, 840) is 1260
+PASS baz(object, 421, 842) is 1263
+PASS baz(object, 422, 844) is 1266
+PASS baz(object, 423, 846) is 1269
+PASS baz(object, 424, 848) is 1272
+PASS baz(object, 425, 850) is 1275
+PASS baz(object, 426, 852) is 1278
+PASS baz(object, 427, 854) is 1281
+PASS baz(object, 428, 856) is 1284
+PASS baz(object, 429, 858) is 1287
+PASS baz(object, 430, 860) is 1290
+PASS baz(object, 431, 862) is 1293
+PASS baz(object, 432, 864) is 1296
+PASS baz(object, 433, 866) is 1299
+PASS baz(object, 434, 868) is 1302
+PASS baz(object, 435, 870) is 1305
+PASS baz(object, 436, 872) is 1308
+PASS baz(object, 437, 874) is 1311
+PASS baz(object, 438, 876) is 1314
+PASS baz(object, 439, 878) is 1317
+PASS baz(object, 440, 880) is 1320
+PASS baz(object, 441, 882) is 1323
+PASS baz(object, 442, 884) is 1326
+PASS baz(object, 443, 886) is 1329
+PASS baz(object, 444, 888) is 1332
+PASS baz(object, 445, 890) is 1335
+PASS baz(object, 446, 892) is 1338
+PASS baz(object, 447, 894) is 1341
+PASS baz(object, 448, 896) is 1344
+PASS baz(object, 449, 898) is 1347
+PASS baz(object, 450, 900) is 1350
+PASS baz(object, 451, 902) is 1353
+PASS baz(object, 452, 904) is 1356
+PASS baz(object, 453, 906) is 1359
+PASS baz(object, 454, 908) is 1362
+PASS baz(object, 455, 910) is 1365
+PASS baz(object, 456, 912) is 1368
+PASS baz(object, 457, 914) is 1371
+PASS baz(object, 458, 916) is 1374
+PASS baz(object, 459, 918) is 1377
+PASS baz(object, 460, 920) is 1380
+PASS baz(object, 461, 922) is 1383
+PASS baz(object, 462, 924) is 1386
+PASS baz(object, 463, 926) is 1389
+PASS baz(object, 464, 928) is 1392
+PASS baz(object, 465, 930) is 1395
+PASS baz(object, 466, 932) is 1398
+PASS baz(object, 467, 934) is 1401
+PASS baz(object, 468, 936) is 1404
+PASS baz(object, 469, 938) is 1407
+PASS baz(object, 470, 940) is 1410
+PASS baz(object, 471, 942) is 1413
+PASS baz(object, 472, 944) is 1416
+PASS baz(object, 473, 946) is 1419
+PASS baz(object, 474, 948) is 1422
+PASS baz(object, 475, 950) is 1425
+PASS baz(object, 476, 952) is 1428
+PASS baz(object, 477, 954) is 1431
+PASS baz(object, 478, 956) is 1434
+PASS baz(object, 479, 958) is 1437
+PASS baz(object, 480, 960) is 1440
+PASS baz(object, 481, 962) is 1443
+PASS baz(object, 482, 964) is 1446
+PASS baz(object, 483, 966) is 1449
+PASS baz(object, 484, 968) is 1452
+PASS baz(object, 485, 970) is 1455
+PASS baz(object, 486, 972) is 1458
+PASS baz(object, 487, 974) is 1461
+PASS baz(object, 488, 976) is 1464
+PASS baz(object, 489, 978) is 1467
+PASS baz(object, 490, 980) is 1470
+PASS baz(object, 491, 982) is 1473
+PASS baz(object, 492, 984) is 1476
+PASS baz(object, 493, 986) is 1479
+PASS baz(object, 494, 988) is 1482
+PASS baz(object, 495, 990) is 1485
+PASS baz(object, 496, 992) is 1488
+PASS baz(object, 497, 994) is 1491
+PASS baz(object, 498, 996) is 1494
+PASS baz(object, 499, 998) is 1497
+PASS baz(object, 500, 1000) is 1500
+PASS baz(object, 501, 1002) is 1503
+PASS baz(object, 502, 1004) is 1506
+PASS baz(object, 503, 1006) is 1509
+PASS baz(object, 504, 1008) is 1512
+PASS baz(object, 505, 1010) is 1515
+PASS baz(object, 506, 1012) is 1518
+PASS baz(object, 507, 1014) is 1521
+PASS baz(object, 508, 1016) is 1524
+PASS baz(object, 509, 1018) is 1527
+PASS baz(object, 510, 1020) is 1530
+PASS baz(object, 511, 1022) is 1533
+PASS baz(object, 512, 1024) is 1536
+PASS baz(object, 513, 1026) is 1539
+PASS baz(object, 514, 1028) is 1542
+PASS baz(object, 515, 1030) is 1545
+PASS baz(object, 516, 1032) is 1548
+PASS baz(object, 517, 1034) is 1551
+PASS baz(object, 518, 1036) is 1554
+PASS baz(object, 519, 1038) is 1557
+PASS baz(object, 520, 1040) is 1560
+PASS baz(object, 521, 1042) is 1563
+PASS baz(object, 522, 1044) is 1566
+PASS baz(object, 523, 1046) is 1569
+PASS baz(object, 524, 1048) is 1572
+PASS baz(object, 525, 1050) is 1575
+PASS baz(object, 526, 1052) is 1578
+PASS baz(object, 527, 1054) is 1581
+PASS baz(object, 528, 1056) is 1584
+PASS baz(object, 529, 1058) is 1587
+PASS baz(object, 530, 1060) is 1590
+PASS baz(object, 531, 1062) is 1593
+PASS baz(object, 532, 1064) is 1596
+PASS baz(object, 533, 1066) is 1599
+PASS baz(object, 534, 1068) is 1602
+PASS baz(object, 535, 1070) is 1605
+PASS baz(object, 536, 1072) is 1608
+PASS baz(object, 537, 1074) is 1611
+PASS baz(object, 538, 1076) is 1614
+PASS baz(object, 539, 1078) is 1617
+PASS baz(object, 540, 1080) is 1620
+PASS baz(object, 541, 1082) is 1623
+PASS baz(object, 542, 1084) is 1626
+PASS baz(object, 543, 1086) is 1629
+PASS baz(object, 544, 1088) is 1632
+PASS baz(object, 545, 1090) is 1635
+PASS baz(object, 546, 1092) is 1638
+PASS baz(object, 547, 1094) is 1641
+PASS baz(object, 548, 1096) is 1644
+PASS baz(object, 549, 1098) is 1647
+PASS baz(object, 550, 1100) is 1650
+PASS baz(object, 551, 1102) is 1653
+PASS baz(object, 552, 1104) is 1656
+PASS baz(object, 553, 1106) is 1659
+PASS baz(object, 554, 1108) is 1662
+PASS baz(object, 555, 1110) is 1665
+PASS baz(object, 556, 1112) is 1668
+PASS baz(object, 557, 1114) is 1671
+PASS baz(object, 558, 1116) is 1674
+PASS baz(object, 559, 1118) is 1677
+PASS baz(object, 560, 1120) is 1680
+PASS baz(object, 561, 1122) is 1683
+PASS baz(object, 562, 1124) is 1686
+PASS baz(object, 563, 1126) is 1689
+PASS baz(object, 564, 1128) is 1692
+PASS baz(object, 565, 1130) is 1695
+PASS baz(object, 566, 1132) is 1698
+PASS baz(object, 567, 1134) is 1701
+PASS baz(object, 568, 1136) is 1704
+PASS baz(object, 569, 1138) is 1707
+PASS baz(object, 570, 1140) is 1710
+PASS baz(object, 571, 1142) is 1713
+PASS baz(object, 572, 1144) is 1716
+PASS baz(object, 573, 1146) is 1719
+PASS baz(object, 574, 1148) is 1722
+PASS baz(object, 575, 1150) is 1725
+PASS baz(object, 576, 1152) is 1728
+PASS baz(object, 577, 1154) is 1731
+PASS baz(object, 578, 1156) is 1734
+PASS baz(object, 579, 1158) is 1737
+PASS baz(object, 580, 1160) is 1740
+PASS baz(object, 581, 1162) is 1743
+PASS baz(object, 582, 1164) is 1746
+PASS baz(object, 583, 1166) is 1749
+PASS baz(object, 584, 1168) is 1752
+PASS baz(object, 585, 1170) is 1755
+PASS baz(object, 586, 1172) is 1758
+PASS baz(object, 587, 1174) is 1761
+PASS baz(object, 588, 1176) is 1764
+PASS baz(object, 589, 1178) is 1767
+PASS baz(object, 590, 1180) is 1770
+PASS baz(object, 591, 1182) is 1773
+PASS baz(object, 592, 1184) is 1776
+PASS baz(object, 593, 1186) is 1779
+PASS baz(object, 594, 1188) is 1782
+PASS baz(object, 595, 1190) is 1785
+PASS baz(object, 596, 1192) is 1788
+PASS baz(object, 597, 1194) is 1791
+PASS baz(object, 598, 1196) is 1794
+PASS baz(object, 599, 1198) is 1797
+PASS baz(object, 600, 1200) is 1842
+PASS baz(object, 601, 1202) is 1845
+PASS baz(object, 602, 1204) is 1848
+PASS baz(object, 603, 1206) is 1851
+PASS baz(object, 604, 1208) is 1854
+PASS baz(object, 605, 1210) is 1857
+PASS baz(object, 606, 1212) is 1860
+PASS baz(object, 607, 1214) is 1863
+PASS baz(object, 608, 1216) is 1866
+PASS baz(object, 609, 1218) is 1869
+PASS baz(object, 610, 1220) is 1872
+PASS baz(object, 611, 1222) is 1875
+PASS baz(object, 612, 1224) is 1878
+PASS baz(object, 613, 1226) is 1881
+PASS baz(object, 614, 1228) is 1884
+PASS baz(object, 615, 1230) is 1887
+PASS baz(object, 616, 1232) is 1890
+PASS baz(object, 617, 1234) is 1893
+PASS baz(object, 618, 1236) is 1896
+PASS baz(object, 619, 1238) is 1899
+PASS baz(object, 620, 1240) is 1902
+PASS baz(object, 621, 1242) is 1905
+PASS baz(object, 622, 1244) is 1908
+PASS baz(object, 623, 1246) is 1911
+PASS baz(object, 624, 1248) is 1914
+PASS baz(object, 625, 1250) is 1917
+PASS baz(object, 626, 1252) is 1920
+PASS baz(object, 627, 1254) is 1923
+PASS baz(object, 628, 1256) is 1926
+PASS baz(object, 629, 1258) is 1929
+PASS baz(object, 630, 1260) is 1932
+PASS baz(object, 631, 1262) is 1935
+PASS baz(object, 632, 1264) is 1938
+PASS baz(object, 633, 1266) is 1941
+PASS baz(object, 634, 1268) is 1944
+PASS baz(object, 635, 1270) is 1947
+PASS baz(object, 636, 1272) is 1950
+PASS baz(object, 637, 1274) is 1953
+PASS baz(object, 638, 1276) is 1956
+PASS baz(object, 639, 1278) is 1959
+PASS baz(object, 640, 1280) is 1962
+PASS baz(object, 641, 1282) is 1965
+PASS baz(object, 642, 1284) is 1968
+PASS baz(object, 643, 1286) is 1971
+PASS baz(object, 644, 1288) is 1974
+PASS baz(object, 645, 1290) is 1977
+PASS baz(object, 646, 1292) is 1980
+PASS baz(object, 647, 1294) is 1983
+PASS baz(object, 648, 1296) is 1986
+PASS baz(object, 649, 1298) is 1989
+PASS baz(object, 650, 1300) is 1992
+PASS baz(object, 651, 1302) is 1995
+PASS baz(object, 652, 1304) is 1998
+PASS baz(object, 653, 1306) is 2001
+PASS baz(object, 654, 1308) is 2004
+PASS baz(object, 655, 1310) is 2007
+PASS baz(object, 656, 1312) is 2010
+PASS baz(object, 657, 1314) is 2013
+PASS baz(object, 658, 1316) is 2016
+PASS baz(object, 659, 1318) is 2019
+PASS baz(object, 660, 1320) is 2022
+PASS baz(object, 661, 1322) is 2025
+PASS baz(object, 662, 1324) is 2028
+PASS baz(object, 663, 1326) is 2031
+PASS baz(object, 664, 1328) is 2034
+PASS baz(object, 665, 1330) is 2037
+PASS baz(object, 666, 1332) is 2040
+PASS baz(object, 667, 1334) is 2043
+PASS baz(object, 668, 1336) is 2046
+PASS baz(object, 669, 1338) is 2049
+PASS baz(object, 670, 1340) is 2052
+PASS baz(object, 671, 1342) is 2055
+PASS baz(object, 672, 1344) is 2058
+PASS baz(object, 673, 1346) is 2061
+PASS baz(object, 674, 1348) is 2064
+PASS baz(object, 675, 1350) is 2067
+PASS baz(object, 676, 1352) is 2070
+PASS baz(object, 677, 1354) is 2073
+PASS baz(object, 678, 1356) is 2076
+PASS baz(object, 679, 1358) is 2079
+PASS baz(object, 680, 1360) is 2082
+PASS baz(object, 681, 1362) is 2085
+PASS baz(object, 682, 1364) is 2088
+PASS baz(object, 683, 1366) is 2091
+PASS baz(object, 684, 1368) is 2094
+PASS baz(object, 685, 1370) is 2097
+PASS baz(object, 686, 1372) is 2100
+PASS baz(object, 687, 1374) is 2103
+PASS baz(object, 688, 1376) is 2106
+PASS baz(object, 689, 1378) is 2109
+PASS baz(object, 690, 1380) is 2112
+PASS baz(object, 691, 1382) is 2115
+PASS baz(object, 692, 1384) is 2118
+PASS baz(object, 693, 1386) is 2121
+PASS baz(object, 694, 1388) is 2124
+PASS baz(object, 695, 1390) is 2127
+PASS baz(object, 696, 1392) is 2130
+PASS baz(object, 697, 1394) is 2133
+PASS baz(object, 698, 1396) is 2136
+PASS baz(object, 699, 1398) is 2139
+PASS baz(object, 700, 1400) is 2142
+PASS baz(object, 701, 1402) is 2145
+PASS baz(object, 702, 1404) is 2148
+PASS baz(object, 703, 1406) is 2151
+PASS baz(object, 704, 1408) is 2154
+PASS baz(object, 705, 1410) is 2157
+PASS baz(object, 706, 1412) is 2160
+PASS baz(object, 707, 1414) is 2163
+PASS baz(object, 708, 1416) is 2166
+PASS baz(object, 709, 1418) is 2169
+PASS baz(object, 710, 1420) is 2172
+PASS baz(object, 711, 1422) is 2175
+PASS baz(object, 712, 1424) is 2178
+PASS baz(object, 713, 1426) is 2181
+PASS baz(object, 714, 1428) is 2184
+PASS baz(object, 715, 1430) is 2187
+PASS baz(object, 716, 1432) is 2190
+PASS baz(object, 717, 1434) is 2193
+PASS baz(object, 718, 1436) is 2196
+PASS baz(object, 719, 1438) is 2199
+PASS baz(object, 720, 1440) is 2202
+PASS baz(object, 721, 1442) is 2205
+PASS baz(object, 722, 1444) is 2208
+PASS baz(object, 723, 1446) is 2211
+PASS baz(object, 724, 1448) is 2214
+PASS baz(object, 725, 1450) is 2217
+PASS baz(object, 726, 1452) is 2220
+PASS baz(object, 727, 1454) is 2223
+PASS baz(object, 728, 1456) is 2226
+PASS baz(object, 729, 1458) is 2229
+PASS baz(object, 730, 1460) is 2232
+PASS baz(object, 731, 1462) is 2235
+PASS baz(object, 732, 1464) is 2238
+PASS baz(object, 733, 1466) is 2241
+PASS baz(object, 734, 1468) is 2244
+PASS baz(object, 735, 1470) is 2247
+PASS baz(object, 736, 1472) is 2250
+PASS baz(object, 737, 1474) is 2253
+PASS baz(object, 738, 1476) is 2256
+PASS baz(object, 739, 1478) is 2259
+PASS baz(object, 740, 1480) is 2262
+PASS baz(object, 741, 1482) is 2265
+PASS baz(object, 742, 1484) is 2268
+PASS baz(object, 743, 1486) is 2271
+PASS baz(object, 744, 1488) is 2274
+PASS baz(object, 745, 1490) is 2277
+PASS baz(object, 746, 1492) is 2280
+PASS baz(object, 747, 1494) is 2283
+PASS baz(object, 748, 1496) is 2286
+PASS baz(object, 749, 1498) is 2289
+PASS baz(object, 750, 1500) is 2292
+PASS baz(object, 751, 1502) is 2295
+PASS baz(object, 752, 1504) is 2298
+PASS baz(object, 753, 1506) is 2301
+PASS baz(object, 754, 1508) is 2304
+PASS baz(object, 755, 1510) is 2307
+PASS baz(object, 756, 1512) is 2310
+PASS baz(object, 757, 1514) is 2313
+PASS baz(object, 758, 1516) is 2316
+PASS baz(object, 759, 1518) is 2319
+PASS baz(object, 760, 1520) is 2322
+PASS baz(object, 761, 1522) is 2325
+PASS baz(object, 762, 1524) is 2328
+PASS baz(object, 763, 1526) is 2331
+PASS baz(object, 764, 1528) is 2334
+PASS baz(object, 765, 1530) is 2337
+PASS baz(object, 766, 1532) is 2340
+PASS baz(object, 767, 1534) is 2343
+PASS baz(object, 768, 1536) is 2346
+PASS baz(object, 769, 1538) is 2349
+PASS baz(object, 770, 1540) is 2352
+PASS baz(object, 771, 1542) is 2355
+PASS baz(object, 772, 1544) is 2358
+PASS baz(object, 773, 1546) is 2361
+PASS baz(object, 774, 1548) is 2364
+PASS baz(object, 775, 1550) is 2367
+PASS baz(object, 776, 1552) is 2370
+PASS baz(object, 777, 1554) is 2373
+PASS baz(object, 778, 1556) is 2376
+PASS baz(object, 779, 1558) is 2379
+PASS baz(object, 780, 1560) is 2382
+PASS baz(object, 781, 1562) is 2385
+PASS baz(object, 782, 1564) is 2388
+PASS baz(object, 783, 1566) is 2391
+PASS baz(object, 784, 1568) is 2394
+PASS baz(object, 785, 1570) is 2397
+PASS baz(object, 786, 1572) is 2400
+PASS baz(object, 787, 1574) is 2403
+PASS baz(object, 788, 1576) is 2406
+PASS baz(object, 789, 1578) is 2409
+PASS baz(object, 790, 1580) is 2412
+PASS baz(object, 791, 1582) is 2415
+PASS baz(object, 792, 1584) is 2418
+PASS baz(object, 793, 1586) is 2421
+PASS baz(object, 794, 1588) is 2424
+PASS baz(object, 795, 1590) is 2427
+PASS baz(object, 796, 1592) is 2430
+PASS baz(object, 797, 1594) is 2433
+PASS baz(object, 798, 1596) is 2436
+PASS baz(object, 799, 1598) is 2439
+PASS baz(object, 800, 1600) is 2442
+PASS baz(object, 801, 1602) is 2445
+PASS baz(object, 802, 1604) is 2448
+PASS baz(object, 803, 1606) is 2451
+PASS baz(object, 804, 1608) is 2454
+PASS baz(object, 805, 1610) is 2457
+PASS baz(object, 806, 1612) is 2460
+PASS baz(object, 807, 1614) is 2463
+PASS baz(object, 808, 1616) is 2466
+PASS baz(object, 809, 1618) is 2469
+PASS baz(object, 810, 1620) is 2472
+PASS baz(object, 811, 1622) is 2475
+PASS baz(object, 812, 1624) is 2478
+PASS baz(object, 813, 1626) is 2481
+PASS baz(object, 814, 1628) is 2484
+PASS baz(object, 815, 1630) is 2487
+PASS baz(object, 816, 1632) is 2490
+PASS baz(object, 817, 1634) is 2493
+PASS baz(object, 818, 1636) is 2496
+PASS baz(object, 819, 1638) is 2499
+PASS baz(object, 820, 1640) is 2502
+PASS baz(object, 821, 1642) is 2505
+PASS baz(object, 822, 1644) is 2508
+PASS baz(object, 823, 1646) is 2511
+PASS baz(object, 824, 1648) is 2514
+PASS baz(object, 825, 1650) is 2517
+PASS baz(object, 826, 1652) is 2520
+PASS baz(object, 827, 1654) is 2523
+PASS baz(object, 828, 1656) is 2526
+PASS baz(object, 829, 1658) is 2529
+PASS baz(object, 830, 1660) is 2532
+PASS baz(object, 831, 1662) is 2535
+PASS baz(object, 832, 1664) is 2538
+PASS baz(object, 833, 1666) is 2541
+PASS baz(object, 834, 1668) is 2544
+PASS baz(object, 835, 1670) is 2547
+PASS baz(object, 836, 1672) is 2550
+PASS baz(object, 837, 1674) is 2553
+PASS baz(object, 838, 1676) is 2556
+PASS baz(object, 839, 1678) is 2559
+PASS baz(object, 840, 1680) is 2562
+PASS baz(object, 841, 1682) is 2565
+PASS baz(object, 842, 1684) is 2568
+PASS baz(object, 843, 1686) is 2571
+PASS baz(object, 844, 1688) is 2574
+PASS baz(object, 845, 1690) is 2577
+PASS baz(object, 846, 1692) is 2580
+PASS baz(object, 847, 1694) is 2583
+PASS baz(object, 848, 1696) is 2586
+PASS baz(object, 849, 1698) is 2589
+PASS baz(object, 850, 1700) is 2592
+PASS baz(object, 851, 1702) is 2595
+PASS baz(object, 852, 1704) is 2598
+PASS baz(object, 853, 1706) is 2601
+PASS baz(object, 854, 1708) is 2604
+PASS baz(object, 855, 1710) is 2607
+PASS baz(object, 856, 1712) is 2610
+PASS baz(object, 857, 1714) is 2613
+PASS baz(object, 858, 1716) is 2616
+PASS baz(object, 859, 1718) is 2619
+PASS baz(object, 860, 1720) is 2622
+PASS baz(object, 861, 1722) is 2625
+PASS baz(object, 862, 1724) is 2628
+PASS baz(object, 863, 1726) is 2631
+PASS baz(object, 864, 1728) is 2634
+PASS baz(object, 865, 1730) is 2637
+PASS baz(object, 866, 1732) is 2640
+PASS baz(object, 867, 1734) is 2643
+PASS baz(object, 868, 1736) is 2646
+PASS baz(object, 869, 1738) is 2649
+PASS baz(object, 870, 1740) is 2652
+PASS baz(object, 871, 1742) is 2655
+PASS baz(object, 872, 1744) is 2658
+PASS baz(object, 873, 1746) is 2661
+PASS baz(object, 874, 1748) is 2664
+PASS baz(object, 875, 1750) is 2667
+PASS baz(object, 876, 1752) is 2670
+PASS baz(object, 877, 1754) is 2673
+PASS baz(object, 878, 1756) is 2676
+PASS baz(object, 879, 1758) is 2679
+PASS baz(object, 880, 1760) is 2682
+PASS baz(object, 881, 1762) is 2685
+PASS baz(object, 882, 1764) is 2688
+PASS baz(object, 883, 1766) is 2691
+PASS baz(object, 884, 1768) is 2694
+PASS baz(object, 885, 1770) is 2697
+PASS baz(object, 886, 1772) is 2700
+PASS baz(object, 887, 1774) is 2703
+PASS baz(object, 888, 1776) is 2706
+PASS baz(object, 889, 1778) is 2709
+PASS baz(object, 890, 1780) is 2712
+PASS baz(object, 891, 1782) is 2715
+PASS baz(object, 892, 1784) is 2718
+PASS baz(object, 893, 1786) is 2721
+PASS baz(object, 894, 1788) is 2724
+PASS baz(object, 895, 1790) is 2727
+PASS baz(object, 896, 1792) is 2730
+PASS baz(object, 897, 1794) is 2733
+PASS baz(object, 898, 1796) is 2736
+PASS baz(object, 899, 1798) is 2739
+PASS baz(object, 900, 1800) is 2742
+PASS baz(object, 901, 1802) is 2745
+PASS baz(object, 902, 1804) is 2748
+PASS baz(object, 903, 1806) is 2751
+PASS baz(object, 904, 1808) is 2754
+PASS baz(object, 905, 1810) is 2757
+PASS baz(object, 906, 1812) is 2760
+PASS baz(object, 907, 1814) is 2763
+PASS baz(object, 908, 1816) is 2766
+PASS baz(object, 909, 1818) is 2769
+PASS baz(object, 910, 1820) is 2772
+PASS baz(object, 911, 1822) is 2775
+PASS baz(object, 912, 1824) is 2778
+PASS baz(object, 913, 1826) is 2781
+PASS baz(object, 914, 1828) is 2784
+PASS baz(object, 915, 1830) is 2787
+PASS baz(object, 916, 1832) is 2790
+PASS baz(object, 917, 1834) is 2793
+PASS baz(object, 918, 1836) is 2796
+PASS baz(object, 919, 1838) is 2799
+PASS baz(object, 920, 1840) is 2802
+PASS baz(object, 921, 1842) is 2805
+PASS baz(object, 922, 1844) is 2808
+PASS baz(object, 923, 1846) is 2811
+PASS baz(object, 924, 1848) is 2814
+PASS baz(object, 925, 1850) is 2817
+PASS baz(object, 926, 1852) is 2820
+PASS baz(object, 927, 1854) is 2823
+PASS baz(object, 928, 1856) is 2826
+PASS baz(object, 929, 1858) is 2829
+PASS baz(object, 930, 1860) is 2832
+PASS baz(object, 931, 1862) is 2835
+PASS baz(object, 932, 1864) is 2838
+PASS baz(object, 933, 1866) is 2841
+PASS baz(object, 934, 1868) is 2844
+PASS baz(object, 935, 1870) is 2847
+PASS baz(object, 936, 1872) is 2850
+PASS baz(object, 937, 1874) is 2853
+PASS baz(object, 938, 1876) is 2856
+PASS baz(object, 939, 1878) is 2859
+PASS baz(object, 940, 1880) is 2862
+PASS baz(object, 941, 1882) is 2865
+PASS baz(object, 942, 1884) is 2868
+PASS baz(object, 943, 1886) is 2871
+PASS baz(object, 944, 1888) is 2874
+PASS baz(object, 945, 1890) is 2877
+PASS baz(object, 946, 1892) is 2880
+PASS baz(object, 947, 1894) is 2883
+PASS baz(object, 948, 1896) is 2886
+PASS baz(object, 949, 1898) is 2889
+PASS baz(object, 950, 1900) is 2892
+PASS baz(object, 951, 1902) is 2895
+PASS baz(object, 952, 1904) is 2898
+PASS baz(object, 953, 1906) is 2901
+PASS baz(object, 954, 1908) is 2904
+PASS baz(object, 955, 1910) is 2907
+PASS baz(object, 956, 1912) is 2910
+PASS baz(object, 957, 1914) is 2913
+PASS baz(object, 958, 1916) is 2916
+PASS baz(object, 959, 1918) is 2919
+PASS baz(object, 960, 1920) is 2922
+PASS baz(object, 961, 1922) is 2925
+PASS baz(object, 962, 1924) is 2928
+PASS baz(object, 963, 1926) is 2931
+PASS baz(object, 964, 1928) is 2934
+PASS baz(object, 965, 1930) is 2937
+PASS baz(object, 966, 1932) is 2940
+PASS baz(object, 967, 1934) is 2943
+PASS baz(object, 968, 1936) is 2946
+PASS baz(object, 969, 1938) is 2949
+PASS baz(object, 970, 1940) is 2952
+PASS baz(object, 971, 1942) is 2955
+PASS baz(object, 972, 1944) is 2958
+PASS baz(object, 973, 1946) is 2961
+PASS baz(object, 974, 1948) is 2964
+PASS baz(object, 975, 1950) is 2967
+PASS baz(object, 976, 1952) is 2970
+PASS baz(object, 977, 1954) is 2973
+PASS baz(object, 978, 1956) is 2976
+PASS baz(object, 979, 1958) is 2979
+PASS baz(object, 980, 1960) is 2982
+PASS baz(object, 981, 1962) is 2985
+PASS baz(object, 982, 1964) is 2988
+PASS baz(object, 983, 1966) is 2991
+PASS baz(object, 984, 1968) is 2994
+PASS baz(object, 985, 1970) is 2997
+PASS baz(object, 986, 1972) is 3000
+PASS baz(object, 987, 1974) is 3003
+PASS baz(object, 988, 1976) is 3006
+PASS baz(object, 989, 1978) is 3009
+PASS baz(object, 990, 1980) is 3012
+PASS baz(object, 991, 1982) is 3015
+PASS baz(object, 992, 1984) is 3018
+PASS baz(object, 993, 1986) is 3021
+PASS baz(object, 994, 1988) is 3024
+PASS baz(object, 995, 1990) is 3027
+PASS baz(object, 996, 1992) is 3030
+PASS baz(object, 997, 1994) is 3033
+PASS baz(object, 998, 1996) is 3036
+PASS baz(object, 999, 1998) is 3039
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inline-unused-this-method-check-expected.txt b/deps/v8/test/webkit/dfg-inline-unused-this-method-check-expected.txt
new file mode 100644 (file)
index 0000000..1bcd857
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining a function that does not use this does not result in this being lost entirely, if we succeed in doing method check optimizations.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS baz(object, 0, 0) is 0
+PASS baz(object, 1, 2) is 3
+PASS baz(object, 2, 4) is 6
+PASS baz(object, 3, 6) is 9
+PASS baz(object, 4, 8) is 12
+PASS baz(object, 5, 10) is 15
+PASS baz(object, 6, 12) is 18
+PASS baz(object, 7, 14) is 21
+PASS baz(object, 8, 16) is 24
+PASS baz(object, 9, 18) is 27
+PASS baz(object, 10, 20) is 30
+PASS baz(object, 11, 22) is 33
+PASS baz(object, 12, 24) is 36
+PASS baz(object, 13, 26) is 39
+PASS baz(object, 14, 28) is 42
+PASS baz(object, 15, 30) is 45
+PASS baz(object, 16, 32) is 48
+PASS baz(object, 17, 34) is 51
+PASS baz(object, 18, 36) is 54
+PASS baz(object, 19, 38) is 57
+PASS baz(object, 20, 40) is 60
+PASS baz(object, 21, 42) is 63
+PASS baz(object, 22, 44) is 66
+PASS baz(object, 23, 46) is 69
+PASS baz(object, 24, 48) is 72
+PASS baz(object, 25, 50) is 75
+PASS baz(object, 26, 52) is 78
+PASS baz(object, 27, 54) is 81
+PASS baz(object, 28, 56) is 84
+PASS baz(object, 29, 58) is 87
+PASS baz(object, 30, 60) is 90
+PASS baz(object, 31, 62) is 93
+PASS baz(object, 32, 64) is 96
+PASS baz(object, 33, 66) is 99
+PASS baz(object, 34, 68) is 102
+PASS baz(object, 35, 70) is 105
+PASS baz(object, 36, 72) is 108
+PASS baz(object, 37, 74) is 111
+PASS baz(object, 38, 76) is 114
+PASS baz(object, 39, 78) is 117
+PASS baz(object, 40, 80) is 120
+PASS baz(object, 41, 82) is 123
+PASS baz(object, 42, 84) is 126
+PASS baz(object, 43, 86) is 129
+PASS baz(object, 44, 88) is 132
+PASS baz(object, 45, 90) is 135
+PASS baz(object, 46, 92) is 138
+PASS baz(object, 47, 94) is 141
+PASS baz(object, 48, 96) is 144
+PASS baz(object, 49, 98) is 147
+PASS baz(object, 50, 100) is 150
+PASS baz(object, 51, 102) is 153
+PASS baz(object, 52, 104) is 156
+PASS baz(object, 53, 106) is 159
+PASS baz(object, 54, 108) is 162
+PASS baz(object, 55, 110) is 165
+PASS baz(object, 56, 112) is 168
+PASS baz(object, 57, 114) is 171
+PASS baz(object, 58, 116) is 174
+PASS baz(object, 59, 118) is 177
+PASS baz(object, 60, 120) is 180
+PASS baz(object, 61, 122) is 183
+PASS baz(object, 62, 124) is 186
+PASS baz(object, 63, 126) is 189
+PASS baz(object, 64, 128) is 192
+PASS baz(object, 65, 130) is 195
+PASS baz(object, 66, 132) is 198
+PASS baz(object, 67, 134) is 201
+PASS baz(object, 68, 136) is 204
+PASS baz(object, 69, 138) is 207
+PASS baz(object, 70, 140) is 210
+PASS baz(object, 71, 142) is 213
+PASS baz(object, 72, 144) is 216
+PASS baz(object, 73, 146) is 219
+PASS baz(object, 74, 148) is 222
+PASS baz(object, 75, 150) is 225
+PASS baz(object, 76, 152) is 228
+PASS baz(object, 77, 154) is 231
+PASS baz(object, 78, 156) is 234
+PASS baz(object, 79, 158) is 237
+PASS baz(object, 80, 160) is 240
+PASS baz(object, 81, 162) is 243
+PASS baz(object, 82, 164) is 246
+PASS baz(object, 83, 166) is 249
+PASS baz(object, 84, 168) is 252
+PASS baz(object, 85, 170) is 255
+PASS baz(object, 86, 172) is 258
+PASS baz(object, 87, 174) is 261
+PASS baz(object, 88, 176) is 264
+PASS baz(object, 89, 178) is 267
+PASS baz(object, 90, 180) is 270
+PASS baz(object, 91, 182) is 273
+PASS baz(object, 92, 184) is 276
+PASS baz(object, 93, 186) is 279
+PASS baz(object, 94, 188) is 282
+PASS baz(object, 95, 190) is 285
+PASS baz(object, 96, 192) is 288
+PASS baz(object, 97, 194) is 291
+PASS baz(object, 98, 196) is 294
+PASS baz(object, 99, 198) is 297
+PASS baz(object, 100, 200) is 300
+PASS baz(object, 101, 202) is 303
+PASS baz(object, 102, 204) is 306
+PASS baz(object, 103, 206) is 309
+PASS baz(object, 104, 208) is 312
+PASS baz(object, 105, 210) is 315
+PASS baz(object, 106, 212) is 318
+PASS baz(object, 107, 214) is 321
+PASS baz(object, 108, 216) is 324
+PASS baz(object, 109, 218) is 327
+PASS baz(object, 110, 220) is 330
+PASS baz(object, 111, 222) is 333
+PASS baz(object, 112, 224) is 336
+PASS baz(object, 113, 226) is 339
+PASS baz(object, 114, 228) is 342
+PASS baz(object, 115, 230) is 345
+PASS baz(object, 116, 232) is 348
+PASS baz(object, 117, 234) is 351
+PASS baz(object, 118, 236) is 354
+PASS baz(object, 119, 238) is 357
+PASS baz(object, 120, 240) is 360
+PASS baz(object, 121, 242) is 363
+PASS baz(object, 122, 244) is 366
+PASS baz(object, 123, 246) is 369
+PASS baz(object, 124, 248) is 372
+PASS baz(object, 125, 250) is 375
+PASS baz(object, 126, 252) is 378
+PASS baz(object, 127, 254) is 381
+PASS baz(object, 128, 256) is 384
+PASS baz(object, 129, 258) is 387
+PASS baz(object, 130, 260) is 390
+PASS baz(object, 131, 262) is 393
+PASS baz(object, 132, 264) is 396
+PASS baz(object, 133, 266) is 399
+PASS baz(object, 134, 268) is 402
+PASS baz(object, 135, 270) is 405
+PASS baz(object, 136, 272) is 408
+PASS baz(object, 137, 274) is 411
+PASS baz(object, 138, 276) is 414
+PASS baz(object, 139, 278) is 417
+PASS baz(object, 140, 280) is 420
+PASS baz(object, 141, 282) is 423
+PASS baz(object, 142, 284) is 426
+PASS baz(object, 143, 286) is 429
+PASS baz(object, 144, 288) is 432
+PASS baz(object, 145, 290) is 435
+PASS baz(object, 146, 292) is 438
+PASS baz(object, 147, 294) is 441
+PASS baz(object, 148, 296) is 444
+PASS baz(object, 149, 298) is 447
+PASS baz(object, 150, 300) is 450
+PASS baz(object, 151, 302) is 453
+PASS baz(object, 152, 304) is 456
+PASS baz(object, 153, 306) is 459
+PASS baz(object, 154, 308) is 462
+PASS baz(object, 155, 310) is 465
+PASS baz(object, 156, 312) is 468
+PASS baz(object, 157, 314) is 471
+PASS baz(object, 158, 316) is 474
+PASS baz(object, 159, 318) is 477
+PASS baz(object, 160, 320) is 480
+PASS baz(object, 161, 322) is 483
+PASS baz(object, 162, 324) is 486
+PASS baz(object, 163, 326) is 489
+PASS baz(object, 164, 328) is 492
+PASS baz(object, 165, 330) is 495
+PASS baz(object, 166, 332) is 498
+PASS baz(object, 167, 334) is 501
+PASS baz(object, 168, 336) is 504
+PASS baz(object, 169, 338) is 507
+PASS baz(object, 170, 340) is 510
+PASS baz(object, 171, 342) is 513
+PASS baz(object, 172, 344) is 516
+PASS baz(object, 173, 346) is 519
+PASS baz(object, 174, 348) is 522
+PASS baz(object, 175, 350) is 525
+PASS baz(object, 176, 352) is 528
+PASS baz(object, 177, 354) is 531
+PASS baz(object, 178, 356) is 534
+PASS baz(object, 179, 358) is 537
+PASS baz(object, 180, 360) is 540
+PASS baz(object, 181, 362) is 543
+PASS baz(object, 182, 364) is 546
+PASS baz(object, 183, 366) is 549
+PASS baz(object, 184, 368) is 552
+PASS baz(object, 185, 370) is 555
+PASS baz(object, 186, 372) is 558
+PASS baz(object, 187, 374) is 561
+PASS baz(object, 188, 376) is 564
+PASS baz(object, 189, 378) is 567
+PASS baz(object, 190, 380) is 570
+PASS baz(object, 191, 382) is 573
+PASS baz(object, 192, 384) is 576
+PASS baz(object, 193, 386) is 579
+PASS baz(object, 194, 388) is 582
+PASS baz(object, 195, 390) is 585
+PASS baz(object, 196, 392) is 588
+PASS baz(object, 197, 394) is 591
+PASS baz(object, 198, 396) is 594
+PASS baz(object, 199, 398) is 597
+PASS baz(object, 200, 400) is 600
+PASS baz(object, 201, 402) is 603
+PASS baz(object, 202, 404) is 606
+PASS baz(object, 203, 406) is 609
+PASS baz(object, 204, 408) is 612
+PASS baz(object, 205, 410) is 615
+PASS baz(object, 206, 412) is 618
+PASS baz(object, 207, 414) is 621
+PASS baz(object, 208, 416) is 624
+PASS baz(object, 209, 418) is 627
+PASS baz(object, 210, 420) is 630
+PASS baz(object, 211, 422) is 633
+PASS baz(object, 212, 424) is 636
+PASS baz(object, 213, 426) is 639
+PASS baz(object, 214, 428) is 642
+PASS baz(object, 215, 430) is 645
+PASS baz(object, 216, 432) is 648
+PASS baz(object, 217, 434) is 651
+PASS baz(object, 218, 436) is 654
+PASS baz(object, 219, 438) is 657
+PASS baz(object, 220, 440) is 660
+PASS baz(object, 221, 442) is 663
+PASS baz(object, 222, 444) is 666
+PASS baz(object, 223, 446) is 669
+PASS baz(object, 224, 448) is 672
+PASS baz(object, 225, 450) is 675
+PASS baz(object, 226, 452) is 678
+PASS baz(object, 227, 454) is 681
+PASS baz(object, 228, 456) is 684
+PASS baz(object, 229, 458) is 687
+PASS baz(object, 230, 460) is 690
+PASS baz(object, 231, 462) is 693
+PASS baz(object, 232, 464) is 696
+PASS baz(object, 233, 466) is 699
+PASS baz(object, 234, 468) is 702
+PASS baz(object, 235, 470) is 705
+PASS baz(object, 236, 472) is 708
+PASS baz(object, 237, 474) is 711
+PASS baz(object, 238, 476) is 714
+PASS baz(object, 239, 478) is 717
+PASS baz(object, 240, 480) is 720
+PASS baz(object, 241, 482) is 723
+PASS baz(object, 242, 484) is 726
+PASS baz(object, 243, 486) is 729
+PASS baz(object, 244, 488) is 732
+PASS baz(object, 245, 490) is 735
+PASS baz(object, 246, 492) is 738
+PASS baz(object, 247, 494) is 741
+PASS baz(object, 248, 496) is 744
+PASS baz(object, 249, 498) is 747
+PASS baz(object, 250, 500) is 750
+PASS baz(object, 251, 502) is 753
+PASS baz(object, 252, 504) is 756
+PASS baz(object, 253, 506) is 759
+PASS baz(object, 254, 508) is 762
+PASS baz(object, 255, 510) is 765
+PASS baz(object, 256, 512) is 768
+PASS baz(object, 257, 514) is 771
+PASS baz(object, 258, 516) is 774
+PASS baz(object, 259, 518) is 777
+PASS baz(object, 260, 520) is 780
+PASS baz(object, 261, 522) is 783
+PASS baz(object, 262, 524) is 786
+PASS baz(object, 263, 526) is 789
+PASS baz(object, 264, 528) is 792
+PASS baz(object, 265, 530) is 795
+PASS baz(object, 266, 532) is 798
+PASS baz(object, 267, 534) is 801
+PASS baz(object, 268, 536) is 804
+PASS baz(object, 269, 538) is 807
+PASS baz(object, 270, 540) is 810
+PASS baz(object, 271, 542) is 813
+PASS baz(object, 272, 544) is 816
+PASS baz(object, 273, 546) is 819
+PASS baz(object, 274, 548) is 822
+PASS baz(object, 275, 550) is 825
+PASS baz(object, 276, 552) is 828
+PASS baz(object, 277, 554) is 831
+PASS baz(object, 278, 556) is 834
+PASS baz(object, 279, 558) is 837
+PASS baz(object, 280, 560) is 840
+PASS baz(object, 281, 562) is 843
+PASS baz(object, 282, 564) is 846
+PASS baz(object, 283, 566) is 849
+PASS baz(object, 284, 568) is 852
+PASS baz(object, 285, 570) is 855
+PASS baz(object, 286, 572) is 858
+PASS baz(object, 287, 574) is 861
+PASS baz(object, 288, 576) is 864
+PASS baz(object, 289, 578) is 867
+PASS baz(object, 290, 580) is 870
+PASS baz(object, 291, 582) is 873
+PASS baz(object, 292, 584) is 876
+PASS baz(object, 293, 586) is 879
+PASS baz(object, 294, 588) is 882
+PASS baz(object, 295, 590) is 885
+PASS baz(object, 296, 592) is 888
+PASS baz(object, 297, 594) is 891
+PASS baz(object, 298, 596) is 894
+PASS baz(object, 299, 598) is 897
+PASS baz(object, 300, 600) is 900
+PASS baz(object, 301, 602) is 903
+PASS baz(object, 302, 604) is 906
+PASS baz(object, 303, 606) is 909
+PASS baz(object, 304, 608) is 912
+PASS baz(object, 305, 610) is 915
+PASS baz(object, 306, 612) is 918
+PASS baz(object, 307, 614) is 921
+PASS baz(object, 308, 616) is 924
+PASS baz(object, 309, 618) is 927
+PASS baz(object, 310, 620) is 930
+PASS baz(object, 311, 622) is 933
+PASS baz(object, 312, 624) is 936
+PASS baz(object, 313, 626) is 939
+PASS baz(object, 314, 628) is 942
+PASS baz(object, 315, 630) is 945
+PASS baz(object, 316, 632) is 948
+PASS baz(object, 317, 634) is 951
+PASS baz(object, 318, 636) is 954
+PASS baz(object, 319, 638) is 957
+PASS baz(object, 320, 640) is 960
+PASS baz(object, 321, 642) is 963
+PASS baz(object, 322, 644) is 966
+PASS baz(object, 323, 646) is 969
+PASS baz(object, 324, 648) is 972
+PASS baz(object, 325, 650) is 975
+PASS baz(object, 326, 652) is 978
+PASS baz(object, 327, 654) is 981
+PASS baz(object, 328, 656) is 984
+PASS baz(object, 329, 658) is 987
+PASS baz(object, 330, 660) is 990
+PASS baz(object, 331, 662) is 993
+PASS baz(object, 332, 664) is 996
+PASS baz(object, 333, 666) is 999
+PASS baz(object, 334, 668) is 1002
+PASS baz(object, 335, 670) is 1005
+PASS baz(object, 336, 672) is 1008
+PASS baz(object, 337, 674) is 1011
+PASS baz(object, 338, 676) is 1014
+PASS baz(object, 339, 678) is 1017
+PASS baz(object, 340, 680) is 1020
+PASS baz(object, 341, 682) is 1023
+PASS baz(object, 342, 684) is 1026
+PASS baz(object, 343, 686) is 1029
+PASS baz(object, 344, 688) is 1032
+PASS baz(object, 345, 690) is 1035
+PASS baz(object, 346, 692) is 1038
+PASS baz(object, 347, 694) is 1041
+PASS baz(object, 348, 696) is 1044
+PASS baz(object, 349, 698) is 1047
+PASS baz(object, 350, 700) is 1050
+PASS baz(object, 351, 702) is 1053
+PASS baz(object, 352, 704) is 1056
+PASS baz(object, 353, 706) is 1059
+PASS baz(object, 354, 708) is 1062
+PASS baz(object, 355, 710) is 1065
+PASS baz(object, 356, 712) is 1068
+PASS baz(object, 357, 714) is 1071
+PASS baz(object, 358, 716) is 1074
+PASS baz(object, 359, 718) is 1077
+PASS baz(object, 360, 720) is 1080
+PASS baz(object, 361, 722) is 1083
+PASS baz(object, 362, 724) is 1086
+PASS baz(object, 363, 726) is 1089
+PASS baz(object, 364, 728) is 1092
+PASS baz(object, 365, 730) is 1095
+PASS baz(object, 366, 732) is 1098
+PASS baz(object, 367, 734) is 1101
+PASS baz(object, 368, 736) is 1104
+PASS baz(object, 369, 738) is 1107
+PASS baz(object, 370, 740) is 1110
+PASS baz(object, 371, 742) is 1113
+PASS baz(object, 372, 744) is 1116
+PASS baz(object, 373, 746) is 1119
+PASS baz(object, 374, 748) is 1122
+PASS baz(object, 375, 750) is 1125
+PASS baz(object, 376, 752) is 1128
+PASS baz(object, 377, 754) is 1131
+PASS baz(object, 378, 756) is 1134
+PASS baz(object, 379, 758) is 1137
+PASS baz(object, 380, 760) is 1140
+PASS baz(object, 381, 762) is 1143
+PASS baz(object, 382, 764) is 1146
+PASS baz(object, 383, 766) is 1149
+PASS baz(object, 384, 768) is 1152
+PASS baz(object, 385, 770) is 1155
+PASS baz(object, 386, 772) is 1158
+PASS baz(object, 387, 774) is 1161
+PASS baz(object, 388, 776) is 1164
+PASS baz(object, 389, 778) is 1167
+PASS baz(object, 390, 780) is 1170
+PASS baz(object, 391, 782) is 1173
+PASS baz(object, 392, 784) is 1176
+PASS baz(object, 393, 786) is 1179
+PASS baz(object, 394, 788) is 1182
+PASS baz(object, 395, 790) is 1185
+PASS baz(object, 396, 792) is 1188
+PASS baz(object, 397, 794) is 1191
+PASS baz(object, 398, 796) is 1194
+PASS baz(object, 399, 798) is 1197
+PASS baz(object, 400, 800) is 1200
+PASS baz(object, 401, 802) is 1203
+PASS baz(object, 402, 804) is 1206
+PASS baz(object, 403, 806) is 1209
+PASS baz(object, 404, 808) is 1212
+PASS baz(object, 405, 810) is 1215
+PASS baz(object, 406, 812) is 1218
+PASS baz(object, 407, 814) is 1221
+PASS baz(object, 408, 816) is 1224
+PASS baz(object, 409, 818) is 1227
+PASS baz(object, 410, 820) is 1230
+PASS baz(object, 411, 822) is 1233
+PASS baz(object, 412, 824) is 1236
+PASS baz(object, 413, 826) is 1239
+PASS baz(object, 414, 828) is 1242
+PASS baz(object, 415, 830) is 1245
+PASS baz(object, 416, 832) is 1248
+PASS baz(object, 417, 834) is 1251
+PASS baz(object, 418, 836) is 1254
+PASS baz(object, 419, 838) is 1257
+PASS baz(object, 420, 840) is 1260
+PASS baz(object, 421, 842) is 1263
+PASS baz(object, 422, 844) is 1266
+PASS baz(object, 423, 846) is 1269
+PASS baz(object, 424, 848) is 1272
+PASS baz(object, 425, 850) is 1275
+PASS baz(object, 426, 852) is 1278
+PASS baz(object, 427, 854) is 1281
+PASS baz(object, 428, 856) is 1284
+PASS baz(object, 429, 858) is 1287
+PASS baz(object, 430, 860) is 1290
+PASS baz(object, 431, 862) is 1293
+PASS baz(object, 432, 864) is 1296
+PASS baz(object, 433, 866) is 1299
+PASS baz(object, 434, 868) is 1302
+PASS baz(object, 435, 870) is 1305
+PASS baz(object, 436, 872) is 1308
+PASS baz(object, 437, 874) is 1311
+PASS baz(object, 438, 876) is 1314
+PASS baz(object, 439, 878) is 1317
+PASS baz(object, 440, 880) is 1320
+PASS baz(object, 441, 882) is 1323
+PASS baz(object, 442, 884) is 1326
+PASS baz(object, 443, 886) is 1329
+PASS baz(object, 444, 888) is 1332
+PASS baz(object, 445, 890) is 1335
+PASS baz(object, 446, 892) is 1338
+PASS baz(object, 447, 894) is 1341
+PASS baz(object, 448, 896) is 1344
+PASS baz(object, 449, 898) is 1347
+PASS baz(object, 450, 900) is 1350
+PASS baz(object, 451, 902) is 1353
+PASS baz(object, 452, 904) is 1356
+PASS baz(object, 453, 906) is 1359
+PASS baz(object, 454, 908) is 1362
+PASS baz(object, 455, 910) is 1365
+PASS baz(object, 456, 912) is 1368
+PASS baz(object, 457, 914) is 1371
+PASS baz(object, 458, 916) is 1374
+PASS baz(object, 459, 918) is 1377
+PASS baz(object, 460, 920) is 1380
+PASS baz(object, 461, 922) is 1383
+PASS baz(object, 462, 924) is 1386
+PASS baz(object, 463, 926) is 1389
+PASS baz(object, 464, 928) is 1392
+PASS baz(object, 465, 930) is 1395
+PASS baz(object, 466, 932) is 1398
+PASS baz(object, 467, 934) is 1401
+PASS baz(object, 468, 936) is 1404
+PASS baz(object, 469, 938) is 1407
+PASS baz(object, 470, 940) is 1410
+PASS baz(object, 471, 942) is 1413
+PASS baz(object, 472, 944) is 1416
+PASS baz(object, 473, 946) is 1419
+PASS baz(object, 474, 948) is 1422
+PASS baz(object, 475, 950) is 1425
+PASS baz(object, 476, 952) is 1428
+PASS baz(object, 477, 954) is 1431
+PASS baz(object, 478, 956) is 1434
+PASS baz(object, 479, 958) is 1437
+PASS baz(object, 480, 960) is 1440
+PASS baz(object, 481, 962) is 1443
+PASS baz(object, 482, 964) is 1446
+PASS baz(object, 483, 966) is 1449
+PASS baz(object, 484, 968) is 1452
+PASS baz(object, 485, 970) is 1455
+PASS baz(object, 486, 972) is 1458
+PASS baz(object, 487, 974) is 1461
+PASS baz(object, 488, 976) is 1464
+PASS baz(object, 489, 978) is 1467
+PASS baz(object, 490, 980) is 1470
+PASS baz(object, 491, 982) is 1473
+PASS baz(object, 492, 984) is 1476
+PASS baz(object, 493, 986) is 1479
+PASS baz(object, 494, 988) is 1482
+PASS baz(object, 495, 990) is 1485
+PASS baz(object, 496, 992) is 1488
+PASS baz(object, 497, 994) is 1491
+PASS baz(object, 498, 996) is 1494
+PASS baz(object, 499, 998) is 1497
+PASS baz(object, 500, 1000) is 1500
+PASS baz(object, 501, 1002) is 1503
+PASS baz(object, 502, 1004) is 1506
+PASS baz(object, 503, 1006) is 1509
+PASS baz(object, 504, 1008) is 1512
+PASS baz(object, 505, 1010) is 1515
+PASS baz(object, 506, 1012) is 1518
+PASS baz(object, 507, 1014) is 1521
+PASS baz(object, 508, 1016) is 1524
+PASS baz(object, 509, 1018) is 1527
+PASS baz(object, 510, 1020) is 1530
+PASS baz(object, 511, 1022) is 1533
+PASS baz(object, 512, 1024) is 1536
+PASS baz(object, 513, 1026) is 1539
+PASS baz(object, 514, 1028) is 1542
+PASS baz(object, 515, 1030) is 1545
+PASS baz(object, 516, 1032) is 1548
+PASS baz(object, 517, 1034) is 1551
+PASS baz(object, 518, 1036) is 1554
+PASS baz(object, 519, 1038) is 1557
+PASS baz(object, 520, 1040) is 1560
+PASS baz(object, 521, 1042) is 1563
+PASS baz(object, 522, 1044) is 1566
+PASS baz(object, 523, 1046) is 1569
+PASS baz(object, 524, 1048) is 1572
+PASS baz(object, 525, 1050) is 1575
+PASS baz(object, 526, 1052) is 1578
+PASS baz(object, 527, 1054) is 1581
+PASS baz(object, 528, 1056) is 1584
+PASS baz(object, 529, 1058) is 1587
+PASS baz(object, 530, 1060) is 1590
+PASS baz(object, 531, 1062) is 1593
+PASS baz(object, 532, 1064) is 1596
+PASS baz(object, 533, 1066) is 1599
+PASS baz(object, 534, 1068) is 1602
+PASS baz(object, 535, 1070) is 1605
+PASS baz(object, 536, 1072) is 1608
+PASS baz(object, 537, 1074) is 1611
+PASS baz(object, 538, 1076) is 1614
+PASS baz(object, 539, 1078) is 1617
+PASS baz(object, 540, 1080) is 1620
+PASS baz(object, 541, 1082) is 1623
+PASS baz(object, 542, 1084) is 1626
+PASS baz(object, 543, 1086) is 1629
+PASS baz(object, 544, 1088) is 1632
+PASS baz(object, 545, 1090) is 1635
+PASS baz(object, 546, 1092) is 1638
+PASS baz(object, 547, 1094) is 1641
+PASS baz(object, 548, 1096) is 1644
+PASS baz(object, 549, 1098) is 1647
+PASS baz(object, 550, 1100) is 1650
+PASS baz(object, 551, 1102) is 1653
+PASS baz(object, 552, 1104) is 1656
+PASS baz(object, 553, 1106) is 1659
+PASS baz(object, 554, 1108) is 1662
+PASS baz(object, 555, 1110) is 1665
+PASS baz(object, 556, 1112) is 1668
+PASS baz(object, 557, 1114) is 1671
+PASS baz(object, 558, 1116) is 1674
+PASS baz(object, 559, 1118) is 1677
+PASS baz(object, 560, 1120) is 1680
+PASS baz(object, 561, 1122) is 1683
+PASS baz(object, 562, 1124) is 1686
+PASS baz(object, 563, 1126) is 1689
+PASS baz(object, 564, 1128) is 1692
+PASS baz(object, 565, 1130) is 1695
+PASS baz(object, 566, 1132) is 1698
+PASS baz(object, 567, 1134) is 1701
+PASS baz(object, 568, 1136) is 1704
+PASS baz(object, 569, 1138) is 1707
+PASS baz(object, 570, 1140) is 1710
+PASS baz(object, 571, 1142) is 1713
+PASS baz(object, 572, 1144) is 1716
+PASS baz(object, 573, 1146) is 1719
+PASS baz(object, 574, 1148) is 1722
+PASS baz(object, 575, 1150) is 1725
+PASS baz(object, 576, 1152) is 1728
+PASS baz(object, 577, 1154) is 1731
+PASS baz(object, 578, 1156) is 1734
+PASS baz(object, 579, 1158) is 1737
+PASS baz(object, 580, 1160) is 1740
+PASS baz(object, 581, 1162) is 1743
+PASS baz(object, 582, 1164) is 1746
+PASS baz(object, 583, 1166) is 1749
+PASS baz(object, 584, 1168) is 1752
+PASS baz(object, 585, 1170) is 1755
+PASS baz(object, 586, 1172) is 1758
+PASS baz(object, 587, 1174) is 1761
+PASS baz(object, 588, 1176) is 1764
+PASS baz(object, 589, 1178) is 1767
+PASS baz(object, 590, 1180) is 1770
+PASS baz(object, 591, 1182) is 1773
+PASS baz(object, 592, 1184) is 1776
+PASS baz(object, 593, 1186) is 1779
+PASS baz(object, 594, 1188) is 1782
+PASS baz(object, 595, 1190) is 1785
+PASS baz(object, 596, 1192) is 1788
+PASS baz(object, 597, 1194) is 1791
+PASS baz(object, 598, 1196) is 1794
+PASS baz(object, 599, 1198) is 1797
+PASS baz(object, 600, 1200) is 1842
+PASS baz(object, 601, 1202) is 1845
+PASS baz(object, 602, 1204) is 1848
+PASS baz(object, 603, 1206) is 1851
+PASS baz(object, 604, 1208) is 1854
+PASS baz(object, 605, 1210) is 1857
+PASS baz(object, 606, 1212) is 1860
+PASS baz(object, 607, 1214) is 1863
+PASS baz(object, 608, 1216) is 1866
+PASS baz(object, 609, 1218) is 1869
+PASS baz(object, 610, 1220) is 1872
+PASS baz(object, 611, 1222) is 1875
+PASS baz(object, 612, 1224) is 1878
+PASS baz(object, 613, 1226) is 1881
+PASS baz(object, 614, 1228) is 1884
+PASS baz(object, 615, 1230) is 1887
+PASS baz(object, 616, 1232) is 1890
+PASS baz(object, 617, 1234) is 1893
+PASS baz(object, 618, 1236) is 1896
+PASS baz(object, 619, 1238) is 1899
+PASS baz(object, 620, 1240) is 1902
+PASS baz(object, 621, 1242) is 1905
+PASS baz(object, 622, 1244) is 1908
+PASS baz(object, 623, 1246) is 1911
+PASS baz(object, 624, 1248) is 1914
+PASS baz(object, 625, 1250) is 1917
+PASS baz(object, 626, 1252) is 1920
+PASS baz(object, 627, 1254) is 1923
+PASS baz(object, 628, 1256) is 1926
+PASS baz(object, 629, 1258) is 1929
+PASS baz(object, 630, 1260) is 1932
+PASS baz(object, 631, 1262) is 1935
+PASS baz(object, 632, 1264) is 1938
+PASS baz(object, 633, 1266) is 1941
+PASS baz(object, 634, 1268) is 1944
+PASS baz(object, 635, 1270) is 1947
+PASS baz(object, 636, 1272) is 1950
+PASS baz(object, 637, 1274) is 1953
+PASS baz(object, 638, 1276) is 1956
+PASS baz(object, 639, 1278) is 1959
+PASS baz(object, 640, 1280) is 1962
+PASS baz(object, 641, 1282) is 1965
+PASS baz(object, 642, 1284) is 1968
+PASS baz(object, 643, 1286) is 1971
+PASS baz(object, 644, 1288) is 1974
+PASS baz(object, 645, 1290) is 1977
+PASS baz(object, 646, 1292) is 1980
+PASS baz(object, 647, 1294) is 1983
+PASS baz(object, 648, 1296) is 1986
+PASS baz(object, 649, 1298) is 1989
+PASS baz(object, 650, 1300) is 1992
+PASS baz(object, 651, 1302) is 1995
+PASS baz(object, 652, 1304) is 1998
+PASS baz(object, 653, 1306) is 2001
+PASS baz(object, 654, 1308) is 2004
+PASS baz(object, 655, 1310) is 2007
+PASS baz(object, 656, 1312) is 2010
+PASS baz(object, 657, 1314) is 2013
+PASS baz(object, 658, 1316) is 2016
+PASS baz(object, 659, 1318) is 2019
+PASS baz(object, 660, 1320) is 2022
+PASS baz(object, 661, 1322) is 2025
+PASS baz(object, 662, 1324) is 2028
+PASS baz(object, 663, 1326) is 2031
+PASS baz(object, 664, 1328) is 2034
+PASS baz(object, 665, 1330) is 2037
+PASS baz(object, 666, 1332) is 2040
+PASS baz(object, 667, 1334) is 2043
+PASS baz(object, 668, 1336) is 2046
+PASS baz(object, 669, 1338) is 2049
+PASS baz(object, 670, 1340) is 2052
+PASS baz(object, 671, 1342) is 2055
+PASS baz(object, 672, 1344) is 2058
+PASS baz(object, 673, 1346) is 2061
+PASS baz(object, 674, 1348) is 2064
+PASS baz(object, 675, 1350) is 2067
+PASS baz(object, 676, 1352) is 2070
+PASS baz(object, 677, 1354) is 2073
+PASS baz(object, 678, 1356) is 2076
+PASS baz(object, 679, 1358) is 2079
+PASS baz(object, 680, 1360) is 2082
+PASS baz(object, 681, 1362) is 2085
+PASS baz(object, 682, 1364) is 2088
+PASS baz(object, 683, 1366) is 2091
+PASS baz(object, 684, 1368) is 2094
+PASS baz(object, 685, 1370) is 2097
+PASS baz(object, 686, 1372) is 2100
+PASS baz(object, 687, 1374) is 2103
+PASS baz(object, 688, 1376) is 2106
+PASS baz(object, 689, 1378) is 2109
+PASS baz(object, 690, 1380) is 2112
+PASS baz(object, 691, 1382) is 2115
+PASS baz(object, 692, 1384) is 2118
+PASS baz(object, 693, 1386) is 2121
+PASS baz(object, 694, 1388) is 2124
+PASS baz(object, 695, 1390) is 2127
+PASS baz(object, 696, 1392) is 2130
+PASS baz(object, 697, 1394) is 2133
+PASS baz(object, 698, 1396) is 2136
+PASS baz(object, 699, 1398) is 2139
+PASS baz(object, 700, 1400) is 2142
+PASS baz(object, 701, 1402) is 2145
+PASS baz(object, 702, 1404) is 2148
+PASS baz(object, 703, 1406) is 2151
+PASS baz(object, 704, 1408) is 2154
+PASS baz(object, 705, 1410) is 2157
+PASS baz(object, 706, 1412) is 2160
+PASS baz(object, 707, 1414) is 2163
+PASS baz(object, 708, 1416) is 2166
+PASS baz(object, 709, 1418) is 2169
+PASS baz(object, 710, 1420) is 2172
+PASS baz(object, 711, 1422) is 2175
+PASS baz(object, 712, 1424) is 2178
+PASS baz(object, 713, 1426) is 2181
+PASS baz(object, 714, 1428) is 2184
+PASS baz(object, 715, 1430) is 2187
+PASS baz(object, 716, 1432) is 2190
+PASS baz(object, 717, 1434) is 2193
+PASS baz(object, 718, 1436) is 2196
+PASS baz(object, 719, 1438) is 2199
+PASS baz(object, 720, 1440) is 2202
+PASS baz(object, 721, 1442) is 2205
+PASS baz(object, 722, 1444) is 2208
+PASS baz(object, 723, 1446) is 2211
+PASS baz(object, 724, 1448) is 2214
+PASS baz(object, 725, 1450) is 2217
+PASS baz(object, 726, 1452) is 2220
+PASS baz(object, 727, 1454) is 2223
+PASS baz(object, 728, 1456) is 2226
+PASS baz(object, 729, 1458) is 2229
+PASS baz(object, 730, 1460) is 2232
+PASS baz(object, 731, 1462) is 2235
+PASS baz(object, 732, 1464) is 2238
+PASS baz(object, 733, 1466) is 2241
+PASS baz(object, 734, 1468) is 2244
+PASS baz(object, 735, 1470) is 2247
+PASS baz(object, 736, 1472) is 2250
+PASS baz(object, 737, 1474) is 2253
+PASS baz(object, 738, 1476) is 2256
+PASS baz(object, 739, 1478) is 2259
+PASS baz(object, 740, 1480) is 2262
+PASS baz(object, 741, 1482) is 2265
+PASS baz(object, 742, 1484) is 2268
+PASS baz(object, 743, 1486) is 2271
+PASS baz(object, 744, 1488) is 2274
+PASS baz(object, 745, 1490) is 2277
+PASS baz(object, 746, 1492) is 2280
+PASS baz(object, 747, 1494) is 2283
+PASS baz(object, 748, 1496) is 2286
+PASS baz(object, 749, 1498) is 2289
+PASS baz(object, 750, 1500) is 2292
+PASS baz(object, 751, 1502) is 2295
+PASS baz(object, 752, 1504) is 2298
+PASS baz(object, 753, 1506) is 2301
+PASS baz(object, 754, 1508) is 2304
+PASS baz(object, 755, 1510) is 2307
+PASS baz(object, 756, 1512) is 2310
+PASS baz(object, 757, 1514) is 2313
+PASS baz(object, 758, 1516) is 2316
+PASS baz(object, 759, 1518) is 2319
+PASS baz(object, 760, 1520) is 2322
+PASS baz(object, 761, 1522) is 2325
+PASS baz(object, 762, 1524) is 2328
+PASS baz(object, 763, 1526) is 2331
+PASS baz(object, 764, 1528) is 2334
+PASS baz(object, 765, 1530) is 2337
+PASS baz(object, 766, 1532) is 2340
+PASS baz(object, 767, 1534) is 2343
+PASS baz(object, 768, 1536) is 2346
+PASS baz(object, 769, 1538) is 2349
+PASS baz(object, 770, 1540) is 2352
+PASS baz(object, 771, 1542) is 2355
+PASS baz(object, 772, 1544) is 2358
+PASS baz(object, 773, 1546) is 2361
+PASS baz(object, 774, 1548) is 2364
+PASS baz(object, 775, 1550) is 2367
+PASS baz(object, 776, 1552) is 2370
+PASS baz(object, 777, 1554) is 2373
+PASS baz(object, 778, 1556) is 2376
+PASS baz(object, 779, 1558) is 2379
+PASS baz(object, 780, 1560) is 2382
+PASS baz(object, 781, 1562) is 2385
+PASS baz(object, 782, 1564) is 2388
+PASS baz(object, 783, 1566) is 2391
+PASS baz(object, 784, 1568) is 2394
+PASS baz(object, 785, 1570) is 2397
+PASS baz(object, 786, 1572) is 2400
+PASS baz(object, 787, 1574) is 2403
+PASS baz(object, 788, 1576) is 2406
+PASS baz(object, 789, 1578) is 2409
+PASS baz(object, 790, 1580) is 2412
+PASS baz(object, 791, 1582) is 2415
+PASS baz(object, 792, 1584) is 2418
+PASS baz(object, 793, 1586) is 2421
+PASS baz(object, 794, 1588) is 2424
+PASS baz(object, 795, 1590) is 2427
+PASS baz(object, 796, 1592) is 2430
+PASS baz(object, 797, 1594) is 2433
+PASS baz(object, 798, 1596) is 2436
+PASS baz(object, 799, 1598) is 2439
+PASS baz(object, 800, 1600) is 2442
+PASS baz(object, 801, 1602) is 2445
+PASS baz(object, 802, 1604) is 2448
+PASS baz(object, 803, 1606) is 2451
+PASS baz(object, 804, 1608) is 2454
+PASS baz(object, 805, 1610) is 2457
+PASS baz(object, 806, 1612) is 2460
+PASS baz(object, 807, 1614) is 2463
+PASS baz(object, 808, 1616) is 2466
+PASS baz(object, 809, 1618) is 2469
+PASS baz(object, 810, 1620) is 2472
+PASS baz(object, 811, 1622) is 2475
+PASS baz(object, 812, 1624) is 2478
+PASS baz(object, 813, 1626) is 2481
+PASS baz(object, 814, 1628) is 2484
+PASS baz(object, 815, 1630) is 2487
+PASS baz(object, 816, 1632) is 2490
+PASS baz(object, 817, 1634) is 2493
+PASS baz(object, 818, 1636) is 2496
+PASS baz(object, 819, 1638) is 2499
+PASS baz(object, 820, 1640) is 2502
+PASS baz(object, 821, 1642) is 2505
+PASS baz(object, 822, 1644) is 2508
+PASS baz(object, 823, 1646) is 2511
+PASS baz(object, 824, 1648) is 2514
+PASS baz(object, 825, 1650) is 2517
+PASS baz(object, 826, 1652) is 2520
+PASS baz(object, 827, 1654) is 2523
+PASS baz(object, 828, 1656) is 2526
+PASS baz(object, 829, 1658) is 2529
+PASS baz(object, 830, 1660) is 2532
+PASS baz(object, 831, 1662) is 2535
+PASS baz(object, 832, 1664) is 2538
+PASS baz(object, 833, 1666) is 2541
+PASS baz(object, 834, 1668) is 2544
+PASS baz(object, 835, 1670) is 2547
+PASS baz(object, 836, 1672) is 2550
+PASS baz(object, 837, 1674) is 2553
+PASS baz(object, 838, 1676) is 2556
+PASS baz(object, 839, 1678) is 2559
+PASS baz(object, 840, 1680) is 2562
+PASS baz(object, 841, 1682) is 2565
+PASS baz(object, 842, 1684) is 2568
+PASS baz(object, 843, 1686) is 2571
+PASS baz(object, 844, 1688) is 2574
+PASS baz(object, 845, 1690) is 2577
+PASS baz(object, 846, 1692) is 2580
+PASS baz(object, 847, 1694) is 2583
+PASS baz(object, 848, 1696) is 2586
+PASS baz(object, 849, 1698) is 2589
+PASS baz(object, 850, 1700) is 2592
+PASS baz(object, 851, 1702) is 2595
+PASS baz(object, 852, 1704) is 2598
+PASS baz(object, 853, 1706) is 2601
+PASS baz(object, 854, 1708) is 2604
+PASS baz(object, 855, 1710) is 2607
+PASS baz(object, 856, 1712) is 2610
+PASS baz(object, 857, 1714) is 2613
+PASS baz(object, 858, 1716) is 2616
+PASS baz(object, 859, 1718) is 2619
+PASS baz(object, 860, 1720) is 2622
+PASS baz(object, 861, 1722) is 2625
+PASS baz(object, 862, 1724) is 2628
+PASS baz(object, 863, 1726) is 2631
+PASS baz(object, 864, 1728) is 2634
+PASS baz(object, 865, 1730) is 2637
+PASS baz(object, 866, 1732) is 2640
+PASS baz(object, 867, 1734) is 2643
+PASS baz(object, 868, 1736) is 2646
+PASS baz(object, 869, 1738) is 2649
+PASS baz(object, 870, 1740) is 2652
+PASS baz(object, 871, 1742) is 2655
+PASS baz(object, 872, 1744) is 2658
+PASS baz(object, 873, 1746) is 2661
+PASS baz(object, 874, 1748) is 2664
+PASS baz(object, 875, 1750) is 2667
+PASS baz(object, 876, 1752) is 2670
+PASS baz(object, 877, 1754) is 2673
+PASS baz(object, 878, 1756) is 2676
+PASS baz(object, 879, 1758) is 2679
+PASS baz(object, 880, 1760) is 2682
+PASS baz(object, 881, 1762) is 2685
+PASS baz(object, 882, 1764) is 2688
+PASS baz(object, 883, 1766) is 2691
+PASS baz(object, 884, 1768) is 2694
+PASS baz(object, 885, 1770) is 2697
+PASS baz(object, 886, 1772) is 2700
+PASS baz(object, 887, 1774) is 2703
+PASS baz(object, 888, 1776) is 2706
+PASS baz(object, 889, 1778) is 2709
+PASS baz(object, 890, 1780) is 2712
+PASS baz(object, 891, 1782) is 2715
+PASS baz(object, 892, 1784) is 2718
+PASS baz(object, 893, 1786) is 2721
+PASS baz(object, 894, 1788) is 2724
+PASS baz(object, 895, 1790) is 2727
+PASS baz(object, 896, 1792) is 2730
+PASS baz(object, 897, 1794) is 2733
+PASS baz(object, 898, 1796) is 2736
+PASS baz(object, 899, 1798) is 2739
+PASS baz(object, 900, 1800) is 2742
+PASS baz(object, 901, 1802) is 2745
+PASS baz(object, 902, 1804) is 2748
+PASS baz(object, 903, 1806) is 2751
+PASS baz(object, 904, 1808) is 2754
+PASS baz(object, 905, 1810) is 2757
+PASS baz(object, 906, 1812) is 2760
+PASS baz(object, 907, 1814) is 2763
+PASS baz(object, 908, 1816) is 2766
+PASS baz(object, 909, 1818) is 2769
+PASS baz(object, 910, 1820) is 2772
+PASS baz(object, 911, 1822) is 2775
+PASS baz(object, 912, 1824) is 2778
+PASS baz(object, 913, 1826) is 2781
+PASS baz(object, 914, 1828) is 2784
+PASS baz(object, 915, 1830) is 2787
+PASS baz(object, 916, 1832) is 2790
+PASS baz(object, 917, 1834) is 2793
+PASS baz(object, 918, 1836) is 2796
+PASS baz(object, 919, 1838) is 2799
+PASS baz(object, 920, 1840) is 2802
+PASS baz(object, 921, 1842) is 2805
+PASS baz(object, 922, 1844) is 2808
+PASS baz(object, 923, 1846) is 2811
+PASS baz(object, 924, 1848) is 2814
+PASS baz(object, 925, 1850) is 2817
+PASS baz(object, 926, 1852) is 2820
+PASS baz(object, 927, 1854) is 2823
+PASS baz(object, 928, 1856) is 2826
+PASS baz(object, 929, 1858) is 2829
+PASS baz(object, 930, 1860) is 2832
+PASS baz(object, 931, 1862) is 2835
+PASS baz(object, 932, 1864) is 2838
+PASS baz(object, 933, 1866) is 2841
+PASS baz(object, 934, 1868) is 2844
+PASS baz(object, 935, 1870) is 2847
+PASS baz(object, 936, 1872) is 2850
+PASS baz(object, 937, 1874) is 2853
+PASS baz(object, 938, 1876) is 2856
+PASS baz(object, 939, 1878) is 2859
+PASS baz(object, 940, 1880) is 2862
+PASS baz(object, 941, 1882) is 2865
+PASS baz(object, 942, 1884) is 2868
+PASS baz(object, 943, 1886) is 2871
+PASS baz(object, 944, 1888) is 2874
+PASS baz(object, 945, 1890) is 2877
+PASS baz(object, 946, 1892) is 2880
+PASS baz(object, 947, 1894) is 2883
+PASS baz(object, 948, 1896) is 2886
+PASS baz(object, 949, 1898) is 2889
+PASS baz(object, 950, 1900) is 2892
+PASS baz(object, 951, 1902) is 2895
+PASS baz(object, 952, 1904) is 2898
+PASS baz(object, 953, 1906) is 2901
+PASS baz(object, 954, 1908) is 2904
+PASS baz(object, 955, 1910) is 2907
+PASS baz(object, 956, 1912) is 2910
+PASS baz(object, 957, 1914) is 2913
+PASS baz(object, 958, 1916) is 2916
+PASS baz(object, 959, 1918) is 2919
+PASS baz(object, 960, 1920) is 2922
+PASS baz(object, 961, 1922) is 2925
+PASS baz(object, 962, 1924) is 2928
+PASS baz(object, 963, 1926) is 2931
+PASS baz(object, 964, 1928) is 2934
+PASS baz(object, 965, 1930) is 2937
+PASS baz(object, 966, 1932) is 2940
+PASS baz(object, 967, 1934) is 2943
+PASS baz(object, 968, 1936) is 2946
+PASS baz(object, 969, 1938) is 2949
+PASS baz(object, 970, 1940) is 2952
+PASS baz(object, 971, 1942) is 2955
+PASS baz(object, 972, 1944) is 2958
+PASS baz(object, 973, 1946) is 2961
+PASS baz(object, 974, 1948) is 2964
+PASS baz(object, 975, 1950) is 2967
+PASS baz(object, 976, 1952) is 2970
+PASS baz(object, 977, 1954) is 2973
+PASS baz(object, 978, 1956) is 2976
+PASS baz(object, 979, 1958) is 2979
+PASS baz(object, 980, 1960) is 2982
+PASS baz(object, 981, 1962) is 2985
+PASS baz(object, 982, 1964) is 2988
+PASS baz(object, 983, 1966) is 2991
+PASS baz(object, 984, 1968) is 2994
+PASS baz(object, 985, 1970) is 2997
+PASS baz(object, 986, 1972) is 3000
+PASS baz(object, 987, 1974) is 3003
+PASS baz(object, 988, 1976) is 3006
+PASS baz(object, 989, 1978) is 3009
+PASS baz(object, 990, 1980) is 3012
+PASS baz(object, 991, 1982) is 3015
+PASS baz(object, 992, 1984) is 3018
+PASS baz(object, 993, 1986) is 3021
+PASS baz(object, 994, 1988) is 3024
+PASS baz(object, 995, 1990) is 3027
+PASS baz(object, 996, 1992) is 3030
+PASS baz(object, 997, 1994) is 3033
+PASS baz(object, 998, 1996) is 3036
+PASS baz(object, 999, 1998) is 3039
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inline-unused-this-method-check.js b/deps/v8/test/webkit/dfg-inline-unused-this-method-check.js
new file mode 100644 (file)
index 0000000..929592e
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining a function that does not use this does not result in this being lost entirely, if we succeed in doing method check optimizations."
+);
+
+function foo(a, b) {
+    return a + b;
+}
+
+function bar(a, b) {
+    return this.f + a + b;
+}
+
+function baz(o, a, b) {
+    return o.stuff(a, b);
+}
+
+var functionToCall = foo;
+var offset = 0;
+for (var i = 0; i < 1000; ++i) {
+    if (i == 600) {
+        functionToCall = bar;
+        offset = 42;
+    }
+
+    var object = {};
+    object.stuff = functionToCall;
+    object.f = 42;
+
+    shouldBe("baz(object, " + i + ", " + (i * 2) + ")", "" + (offset + i + i * 2));
+}
+
diff --git a/deps/v8/test/webkit/dfg-inline-unused-this.js b/deps/v8/test/webkit/dfg-inline-unused-this.js
new file mode 100644 (file)
index 0000000..5983d72
--- /dev/null
@@ -0,0 +1,57 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining a function that does not use this does not result in this being lost entirely."
+);
+
+function foo(a, b) {
+    return a + b;
+}
+
+function bar(a, b) {
+    return this.f + a + b;
+}
+
+function baz(o, a, b) {
+    return o.stuff(a, b);
+}
+
+var functionToCall = foo;
+var offset = 0;
+for (var i = 0; i < 1000; ++i) {
+    if (i == 600) {
+        functionToCall = bar;
+        offset = 42;
+    }
+
+    // Create some bizzare object to prevent method_check optimizations, since those will result in
+    // a failure while the function is still live.
+    var object = {};
+    object["a" + i] = i;
+    object.stuff = functionToCall;
+    object.f = 42;
+
+    shouldBe("baz(object, " + i + ", " + (i * 2) + ")", "" + (offset + i + i * 2));
+}
+
diff --git a/deps/v8/test/webkit/dfg-inlining-reg-alloc-expected.txt b/deps/v8/test/webkit/dfg-inlining-reg-alloc-expected.txt
new file mode 100644 (file)
index 0000000..8e7c55c
--- /dev/null
@@ -0,0 +1,3032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that register allocation still works under register pressure induced by inlining, out-of-line function calls (i.e. unconditional register flushing), and slow paths for object creation (i.e. conditional register flushing).
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS o.a is bar(2 * i + 1, i)
+PASS o.b is bar(2 * i, i)
+PASS o.c is i
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-inlining-reg-alloc.js b/deps/v8/test/webkit/dfg-inlining-reg-alloc.js
new file mode 100644 (file)
index 0000000..5429641
--- /dev/null
@@ -0,0 +1,166 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that register allocation still works under register pressure induced by inlining, out-of-line function calls (i.e. unconditional register flushing), and slow paths for object creation (i.e. conditional register flushing)."
+);
+
+// Inlineable constructor.
+function foo(a, b, c) {
+    this.a = a;
+    this.b = b;
+    this.c = c;
+}
+
+// Non-inlineable function. This relies on a size limit for inlining, but still
+// produces integers. It also relies on the VM not reasoning about Math.log deeply
+// enough to find some way of optimizing this code to be small enough to inline.
+function bar(a, b) {
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    a += b;
+    a -= b;
+    b ^= a;
+    a += Math.log(b);
+    b += a;
+    b -= a;
+    a ^= b;
+    return (a - b) | 0;
+}
+
+// Function into which we will inline foo but not bar.
+function baz(a, b) {
+    return new foo(bar(2 * a + 1, b - 1), bar(2 * a, b - 1), a);
+}
+
+// Do the test. It's crucial that o.a, o.b, and o.c are checked on each
+// loop iteration.
+for (var i = 0; i < 1000; ++i) {
+    var o = baz(i, i + 1);
+    shouldBe("o.a", "bar(2 * i + 1, i)");
+    shouldBe("o.b", "bar(2 * i, i)");
+    shouldBe("o.c", "i");
+}
diff --git a/deps/v8/test/webkit/dfg-int-overflow-in-loop-expected.txt b/deps/v8/test/webkit/dfg-int-overflow-in-loop-expected.txt
new file mode 100644 (file)
index 0000000..47e5e76
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that overflowing an integer in a loop and then only using it in an integer context produces a result that complies with double arithmetic.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(0) is -4094336
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-int-overflow-in-loop.js b/deps/v8/test/webkit/dfg-int-overflow-in-loop.js
new file mode 100644 (file)
index 0000000..8752a12
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that overflowing an integer in a loop and then only using it in an integer context produces a result that complies with double arithmetic."
+);
+
+function foo(a) {
+    var x = a;
+    // Make sure that this is the loop where we do OSR entry.
+    for (var i = 0; i < 100000; ++i)
+        x += 1;
+    // Now trigger overflow that is so severe that the floating point result would be different than the bigint result.
+    for (var i = 0; i < 160097152; ++i)
+        x += 2147483647;
+    return x | 0;
+}
+
+shouldBe("foo(0)", "-4094336");
+
diff --git a/deps/v8/test/webkit/dfg-int-overflow-large-constants-in-a-line-expected.txt b/deps/v8/test/webkit/dfg-int-overflow-large-constants-in-a-line-expected.txt
new file mode 100644 (file)
index 0000000..813f101
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that our optimization to elide overflow checks understands that if we keep adding huge numbers, we could end up creating a number that is not precisely representable using doubles.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-int-overflow-large-constants-in-a-line.js b/deps/v8/test/webkit/dfg-int-overflow-large-constants-in-a-line.js
new file mode 100644 (file)
index 0000000..4e2f970
--- /dev/null
@@ -0,0 +1,76 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that our optimization to elide overflow checks understands that if we keep adding huge numbers, we could end up creating a number that is not precisely representable using doubles."
+);
+
+function foo(a) {
+    var x = a;
+    x += 281474976710655;
+    x += 281474976710654;
+    x += 281474976710653;
+    x += 281474976710652;
+    x += 281474976710655;
+    x += 281474976710654;
+    x += 281474976710653;
+    x += 281474976710652;
+    x += 281474976710655;
+    x += 281474976710654;
+    x += 281474976710653;
+    x += 281474976710652;
+    x += 281474976710655;
+    x += 281474976710654;
+    x += 281474976710653;
+    x += 281474976710652;
+    x += 281474976710655;
+    x += 281474976710654;
+    x += 281474976710653;
+    x += 281474976710652;
+    x += 281474976710655;
+    x += 281474976710654;
+    x += 281474976710653;
+    x += 281474976710652;
+    x += 281474976710655;
+    x += 281474976710654;
+    x += 281474976710653;
+    x += 281474976710652;
+    x += 281474976710655;
+    x += 281474976710654;
+    x += 281474976710653;
+    x += 281474976710652;
+    x += 281474976710655;
+    x += 281474976710654;
+    x += 281474976710653;
+    x += 281474976710652;
+    x += 281474976710655;
+    x += 281474976710654;
+    x += 281474976710653;
+    x += 281474976710652;
+    return x | 0
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(2147483647)", "2147483552");
+
+
diff --git a/deps/v8/test/webkit/dfg-int32-to-double-on-known-number-expected.txt b/deps/v8/test/webkit/dfg-int32-to-double-on-known-number-expected.txt
new file mode 100644 (file)
index 0000000..3cfe35c
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we don't emit unnecessary speculation checks when performing an int32 to double conversion on a value that is proved to be a number, predicted to be an int32, but not proved to be an int32.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-int32-to-double-on-known-number.js b/deps/v8/test/webkit/dfg-int32-to-double-on-known-number.js
new file mode 100644 (file)
index 0000000..a3aecad
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we don't emit unnecessary speculation checks when performing an int32 to double conversion on a value that is proved to be a number, predicted to be an int32, but not proved to be an int32."
+);
+
+function foo(a, b) {
+    var x = a.f;
+    var y;
+    function bar() {
+        return y;
+    }
+    var z = x + b;
+    y = x;
+    if (z > 1)
+        return y + b + bar();
+    else
+        return 72;
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo({f:5}, 42.5)", "52.5");
diff --git a/deps/v8/test/webkit/dfg-int32-to-double-on-set-local-and-exit-expected.txt b/deps/v8/test/webkit/dfg-int32-to-double-on-set-local-and-exit-expected.txt
new file mode 100644 (file)
index 0000000..6e386a5
--- /dev/null
@@ -0,0 +1,1233 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that an Int32ToDouble placed on a SetLocal does a forward exit.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+PASS counter is 1200
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-int32-to-double-on-set-local-and-exit.js b/deps/v8/test/webkit/dfg-int32-to-double-on-set-local-and-exit.js
new file mode 100644 (file)
index 0000000..8686391
--- /dev/null
@@ -0,0 +1,63 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that an Int32ToDouble placed on a SetLocal does a forward exit."
+);
+
+var counter = 0;
+
+function checkpoint(text) {
+    debug("Checkpoint: " + text);
+    counter++;
+}
+
+function func1() {
+    checkpoint("a");
+    a = Date.now() + Date.now() + Date.now() + Date.now() + Date.now() + Date.now();
+    checkpoint("b");
+}
+function func2() {
+    checkpoint("c");
+    return Date.now() + Date.now() + Date.now() + Date.now() + Date.now() + Date.now();
+}
+
+function func3(s) {
+    checkpoint("1");
+    s = func1(); // The bug is that this function will be called twice, if our Int32ToDouble hoisting does a backward speculation.
+    checkpoint("2");
+    s = func2();
+    checkpoint("3");
+    return s;
+}
+
+function test() {
+    return func3(1);
+}
+
+
+for (var i=0; i < 200; i++) {
+    test();
+}
+
+shouldBe("counter", "1200");
diff --git a/deps/v8/test/webkit/dfg-int32-to-double-on-set-local-and-sometimes-exit-expected.txt b/deps/v8/test/webkit/dfg-int32-to-double-on-set-local-and-sometimes-exit-expected.txt
new file mode 100644 (file)
index 0000000..5799e95
--- /dev/null
@@ -0,0 +1,1233 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that an Int32ToDouble placed on a SetLocal does a forward exit, and works right even when the relevant variable is actually predicted numeric.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+PASS counter is 1200
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-int32-to-double-on-set-local-and-sometimes-exit.js b/deps/v8/test/webkit/dfg-int32-to-double-on-set-local-and-sometimes-exit.js
new file mode 100644 (file)
index 0000000..532198e
--- /dev/null
@@ -0,0 +1,65 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that an Int32ToDouble placed on a SetLocal does a forward exit, and works right even when the relevant variable is actually predicted numeric."
+);
+
+var counter = 0;
+
+function checkpoint(text) {
+    debug("Checkpoint: " + text);
+    counter++;
+}
+
+function func1() {
+    checkpoint("a");
+    a = Date.now() + Date.now() + Date.now() + Date.now() + Date.now() + Date.now();
+    checkpoint("b");
+    if (counter < 1100)
+        return 0;
+}
+function func2() {
+    checkpoint("c");
+    return Date.now() + Date.now() + Date.now() + Date.now() + Date.now() + Date.now();
+}
+
+function func3(s) {
+    checkpoint("1");
+    s = func1(); // The bug is that this function will be called twice, if our Int32ToDouble hoisting does a backward speculation.
+    checkpoint("2");
+    s = func2();
+    checkpoint("3");
+    return s;
+}
+
+function test() {
+    return func3(1);
+}
+
+
+for (var i=0; i < 200; i++) {
+    test();
+}
+
+shouldBe("counter", "1200");
diff --git a/deps/v8/test/webkit/dfg-integer-optimization-expected.txt b/deps/v8/test/webkit/dfg-integer-optimization-expected.txt
new file mode 100644 (file)
index 0000000..bad97ae
--- /dev/null
@@ -0,0 +1,2032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that integer addition optimizations in the DFG are not performed too overzealously.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result.a is 1
+PASS result.b is 1
+PASS result.a is 20000001
+PASS result.b is 20000001
+PASS result.a is 40000001
+PASS result.b is 40000001
+PASS result.a is 60000001
+PASS result.b is 60000001
+PASS result.a is 80000001
+PASS result.b is 80000001
+PASS result.a is 100000001
+PASS result.b is 100000001
+PASS result.a is 120000001
+PASS result.b is 120000001
+PASS result.a is 140000001
+PASS result.b is 140000001
+PASS result.a is 160000001
+PASS result.b is 160000001
+PASS result.a is 180000001
+PASS result.b is 180000001
+PASS result.a is 200000001
+PASS result.b is 200000001
+PASS result.a is 220000001
+PASS result.b is 220000001
+PASS result.a is 240000001
+PASS result.b is 240000001
+PASS result.a is 260000001
+PASS result.b is 260000001
+PASS result.a is 280000001
+PASS result.b is 280000001
+PASS result.a is 300000001
+PASS result.b is 300000001
+PASS result.a is 320000001
+PASS result.b is 320000001
+PASS result.a is 340000001
+PASS result.b is 340000001
+PASS result.a is 360000001
+PASS result.b is 360000001
+PASS result.a is 380000001
+PASS result.b is 380000001
+PASS result.a is 400000001
+PASS result.b is 400000001
+PASS result.a is 420000001
+PASS result.b is 420000001
+PASS result.a is 440000001
+PASS result.b is 440000001
+PASS result.a is 460000001
+PASS result.b is 460000001
+PASS result.a is 480000001
+PASS result.b is 480000001
+PASS result.a is 500000001
+PASS result.b is 500000001
+PASS result.a is 520000001
+PASS result.b is 520000001
+PASS result.a is 540000001
+PASS result.b is 540000001
+PASS result.a is 560000001
+PASS result.b is 560000001
+PASS result.a is 580000001
+PASS result.b is 580000001
+PASS result.a is 600000001
+PASS result.b is 600000001
+PASS result.a is 620000001
+PASS result.b is 620000001
+PASS result.a is 640000001
+PASS result.b is 640000001
+PASS result.a is 660000001
+PASS result.b is 660000001
+PASS result.a is 680000001
+PASS result.b is 680000001
+PASS result.a is 700000001
+PASS result.b is 700000001
+PASS result.a is 720000001
+PASS result.b is 720000001
+PASS result.a is 740000001
+PASS result.b is 740000001
+PASS result.a is 760000001
+PASS result.b is 760000001
+PASS result.a is 780000001
+PASS result.b is 780000001
+PASS result.a is 800000001
+PASS result.b is 800000001
+PASS result.a is 820000001
+PASS result.b is 820000001
+PASS result.a is 840000001
+PASS result.b is 840000001
+PASS result.a is 860000001
+PASS result.b is 860000001
+PASS result.a is 880000001
+PASS result.b is 880000001
+PASS result.a is 900000001
+PASS result.b is 900000001
+PASS result.a is 920000001
+PASS result.b is 920000001
+PASS result.a is 940000001
+PASS result.b is 940000001
+PASS result.a is 960000001
+PASS result.b is 960000001
+PASS result.a is 980000001
+PASS result.b is 980000001
+PASS result.a is 1000000001
+PASS result.b is 1000000001
+PASS result.a is 1020000001
+PASS result.b is 1020000001
+PASS result.a is 1040000001
+PASS result.b is 1040000001
+PASS result.a is 1060000001
+PASS result.b is 1060000001
+PASS result.a is 1080000001
+PASS result.b is 1080000001
+PASS result.a is 1100000001
+PASS result.b is 1100000001
+PASS result.a is 1120000001
+PASS result.b is 1120000001
+PASS result.a is 1140000001
+PASS result.b is 1140000001
+PASS result.a is 1160000001
+PASS result.b is 1160000001
+PASS result.a is 1180000001
+PASS result.b is 1180000001
+PASS result.a is 1200000001
+PASS result.b is 1200000001
+PASS result.a is 1220000001
+PASS result.b is 1220000001
+PASS result.a is 1240000001
+PASS result.b is 1240000001
+PASS result.a is 1260000001
+PASS result.b is 1260000001
+PASS result.a is 1280000001
+PASS result.b is 1280000001
+PASS result.a is 1300000001
+PASS result.b is 1300000001
+PASS result.a is 1320000001
+PASS result.b is 1320000001
+PASS result.a is 1340000001
+PASS result.b is 1340000001
+PASS result.a is 1360000001
+PASS result.b is 1360000001
+PASS result.a is 1380000001
+PASS result.b is 1380000001
+PASS result.a is 1400000001
+PASS result.b is 1400000001
+PASS result.a is 1420000001
+PASS result.b is 1420000001
+PASS result.a is 1440000001
+PASS result.b is 1440000001
+PASS result.a is 1460000001
+PASS result.b is 1460000001
+PASS result.a is 1480000001
+PASS result.b is 1480000001
+PASS result.a is 1500000001
+PASS result.b is 1500000001
+PASS result.a is 1520000001
+PASS result.b is 1520000001
+PASS result.a is 1540000001
+PASS result.b is 1540000001
+PASS result.a is 1560000001
+PASS result.b is 1560000001
+PASS result.a is 1580000001
+PASS result.b is 1580000001
+PASS result.a is 1600000001
+PASS result.b is 1600000001
+PASS result.a is 1620000001
+PASS result.b is 1620000001
+PASS result.a is 1640000001
+PASS result.b is 1640000001
+PASS result.a is 1660000001
+PASS result.b is 1660000001
+PASS result.a is 1680000001
+PASS result.b is 1680000001
+PASS result.a is 1700000001
+PASS result.b is 1700000001
+PASS result.a is 1720000001
+PASS result.b is 1720000001
+PASS result.a is 1740000001
+PASS result.b is 1740000001
+PASS result.a is 1760000001
+PASS result.b is 1760000001
+PASS result.a is 1780000001
+PASS result.b is 1780000001
+PASS result.a is 1800000001
+PASS result.b is 1800000001
+PASS result.a is 1820000001
+PASS result.b is 1820000001
+PASS result.a is 1840000001
+PASS result.b is 1840000001
+PASS result.a is 1860000001
+PASS result.b is 1860000001
+PASS result.a is 1880000001
+PASS result.b is 1880000001
+PASS result.a is 1900000001
+PASS result.b is 1900000001
+PASS result.a is 1920000001
+PASS result.b is 1920000001
+PASS result.a is 1940000001
+PASS result.b is 1940000001
+PASS result.a is 1960000001
+PASS result.b is 1960000001
+PASS result.a is 1980000001
+PASS result.b is 1980000001
+PASS result.a is 2000000001
+PASS result.b is 2000000001
+PASS result.a is 2020000001
+PASS result.b is 2020000001
+PASS result.a is 2040000001
+PASS result.b is 2040000001
+PASS result.a is 2060000001
+PASS result.b is 2060000001
+PASS result.a is 2080000001
+PASS result.b is 2080000001
+PASS result.a is 2100000001
+PASS result.b is 2100000001
+PASS result.a is 2120000001
+PASS result.b is 2120000001
+PASS result.a is 2140000001
+PASS result.b is 2140000001
+PASS result.a is -2134967295
+PASS result.b is 2160000001
+PASS result.a is -2114967295
+PASS result.b is 2180000001
+PASS result.a is -2094967295
+PASS result.b is 2200000001
+PASS result.a is -2074967295
+PASS result.b is 2220000001
+PASS result.a is -2054967295
+PASS result.b is 2240000001
+PASS result.a is -2034967295
+PASS result.b is 2260000001
+PASS result.a is -2014967295
+PASS result.b is 2280000001
+PASS result.a is -1994967295
+PASS result.b is 2300000001
+PASS result.a is -1974967295
+PASS result.b is 2320000001
+PASS result.a is -1954967295
+PASS result.b is 2340000001
+PASS result.a is -1934967295
+PASS result.b is 2360000001
+PASS result.a is -1914967295
+PASS result.b is 2380000001
+PASS result.a is -1894967295
+PASS result.b is 2400000001
+PASS result.a is -1874967295
+PASS result.b is 2420000001
+PASS result.a is -1854967295
+PASS result.b is 2440000001
+PASS result.a is -1834967295
+PASS result.b is 2460000001
+PASS result.a is -1814967295
+PASS result.b is 2480000001
+PASS result.a is -1794967295
+PASS result.b is 2500000001
+PASS result.a is -1774967295
+PASS result.b is 2520000001
+PASS result.a is -1754967295
+PASS result.b is 2540000001
+PASS result.a is -1734967295
+PASS result.b is 2560000001
+PASS result.a is -1714967295
+PASS result.b is 2580000001
+PASS result.a is -1694967295
+PASS result.b is 2600000001
+PASS result.a is -1674967295
+PASS result.b is 2620000001
+PASS result.a is -1654967295
+PASS result.b is 2640000001
+PASS result.a is -1634967295
+PASS result.b is 2660000001
+PASS result.a is -1614967295
+PASS result.b is 2680000001
+PASS result.a is -1594967295
+PASS result.b is 2700000001
+PASS result.a is -1574967295
+PASS result.b is 2720000001
+PASS result.a is -1554967295
+PASS result.b is 2740000001
+PASS result.a is -1534967295
+PASS result.b is 2760000001
+PASS result.a is -1514967295
+PASS result.b is 2780000001
+PASS result.a is -1494967295
+PASS result.b is 2800000001
+PASS result.a is -1474967295
+PASS result.b is 2820000001
+PASS result.a is -1454967295
+PASS result.b is 2840000001
+PASS result.a is -1434967295
+PASS result.b is 2860000001
+PASS result.a is -1414967295
+PASS result.b is 2880000001
+PASS result.a is -1394967295
+PASS result.b is 2900000001
+PASS result.a is -1374967295
+PASS result.b is 2920000001
+PASS result.a is -1354967295
+PASS result.b is 2940000001
+PASS result.a is -1334967295
+PASS result.b is 2960000001
+PASS result.a is -1314967295
+PASS result.b is 2980000001
+PASS result.a is -1294967295
+PASS result.b is 3000000001
+PASS result.a is -1274967295
+PASS result.b is 3020000001
+PASS result.a is -1254967295
+PASS result.b is 3040000001
+PASS result.a is -1234967295
+PASS result.b is 3060000001
+PASS result.a is -1214967295
+PASS result.b is 3080000001
+PASS result.a is -1194967295
+PASS result.b is 3100000001
+PASS result.a is -1174967295
+PASS result.b is 3120000001
+PASS result.a is -1154967295
+PASS result.b is 3140000001
+PASS result.a is -1134967295
+PASS result.b is 3160000001
+PASS result.a is -1114967295
+PASS result.b is 3180000001
+PASS result.a is -1094967295
+PASS result.b is 3200000001
+PASS result.a is -1074967295
+PASS result.b is 3220000001
+PASS result.a is -1054967295
+PASS result.b is 3240000001
+PASS result.a is -1034967295
+PASS result.b is 3260000001
+PASS result.a is -1014967295
+PASS result.b is 3280000001
+PASS result.a is -994967295
+PASS result.b is 3300000001
+PASS result.a is -974967295
+PASS result.b is 3320000001
+PASS result.a is -954967295
+PASS result.b is 3340000001
+PASS result.a is -934967295
+PASS result.b is 3360000001
+PASS result.a is -914967295
+PASS result.b is 3380000001
+PASS result.a is -894967295
+PASS result.b is 3400000001
+PASS result.a is -874967295
+PASS result.b is 3420000001
+PASS result.a is -854967295
+PASS result.b is 3440000001
+PASS result.a is -834967295
+PASS result.b is 3460000001
+PASS result.a is -814967295
+PASS result.b is 3480000001
+PASS result.a is -794967295
+PASS result.b is 3500000001
+PASS result.a is -774967295
+PASS result.b is 3520000001
+PASS result.a is -754967295
+PASS result.b is 3540000001
+PASS result.a is -734967295
+PASS result.b is 3560000001
+PASS result.a is -714967295
+PASS result.b is 3580000001
+PASS result.a is -694967295
+PASS result.b is 3600000001
+PASS result.a is -674967295
+PASS result.b is 3620000001
+PASS result.a is -654967295
+PASS result.b is 3640000001
+PASS result.a is -634967295
+PASS result.b is 3660000001
+PASS result.a is -614967295
+PASS result.b is 3680000001
+PASS result.a is -594967295
+PASS result.b is 3700000001
+PASS result.a is -574967295
+PASS result.b is 3720000001
+PASS result.a is -554967295
+PASS result.b is 3740000001
+PASS result.a is -534967295
+PASS result.b is 3760000001
+PASS result.a is -514967295
+PASS result.b is 3780000001
+PASS result.a is -494967295
+PASS result.b is 3800000001
+PASS result.a is -474967295
+PASS result.b is 3820000001
+PASS result.a is -454967295
+PASS result.b is 3840000001
+PASS result.a is -434967295
+PASS result.b is 3860000001
+PASS result.a is -414967295
+PASS result.b is 3880000001
+PASS result.a is -394967295
+PASS result.b is 3900000001
+PASS result.a is -374967295
+PASS result.b is 3920000001
+PASS result.a is -354967295
+PASS result.b is 3940000001
+PASS result.a is -334967295
+PASS result.b is 3960000001
+PASS result.a is -314967295
+PASS result.b is 3980000001
+PASS result.a is -294967295
+PASS result.b is 4000000001
+PASS result.a is -274967295
+PASS result.b is 4020000001
+PASS result.a is -254967295
+PASS result.b is 4040000001
+PASS result.a is -234967295
+PASS result.b is 4060000001
+PASS result.a is -214967295
+PASS result.b is 4080000001
+PASS result.a is -194967295
+PASS result.b is 4100000001
+PASS result.a is -174967295
+PASS result.b is 4120000001
+PASS result.a is -154967295
+PASS result.b is 4140000001
+PASS result.a is -134967295
+PASS result.b is 4160000001
+PASS result.a is -114967295
+PASS result.b is 4180000001
+PASS result.a is -94967295
+PASS result.b is 4200000001
+PASS result.a is -74967295
+PASS result.b is 4220000001
+PASS result.a is -54967295
+PASS result.b is 4240000001
+PASS result.a is -34967295
+PASS result.b is 4260000001
+PASS result.a is -14967295
+PASS result.b is 4280000001
+PASS result.a is 5032705
+PASS result.b is 4300000001
+PASS result.a is 25032705
+PASS result.b is 4320000001
+PASS result.a is 45032705
+PASS result.b is 4340000001
+PASS result.a is 65032705
+PASS result.b is 4360000001
+PASS result.a is 85032705
+PASS result.b is 4380000001
+PASS result.a is 105032705
+PASS result.b is 4400000001
+PASS result.a is 125032705
+PASS result.b is 4420000001
+PASS result.a is 145032705
+PASS result.b is 4440000001
+PASS result.a is 165032705
+PASS result.b is 4460000001
+PASS result.a is 185032705
+PASS result.b is 4480000001
+PASS result.a is 205032705
+PASS result.b is 4500000001
+PASS result.a is 225032705
+PASS result.b is 4520000001
+PASS result.a is 245032705
+PASS result.b is 4540000001
+PASS result.a is 265032705
+PASS result.b is 4560000001
+PASS result.a is 285032705
+PASS result.b is 4580000001
+PASS result.a is 305032705
+PASS result.b is 4600000001
+PASS result.a is 325032705
+PASS result.b is 4620000001
+PASS result.a is 345032705
+PASS result.b is 4640000001
+PASS result.a is 365032705
+PASS result.b is 4660000001
+PASS result.a is 385032705
+PASS result.b is 4680000001
+PASS result.a is 405032705
+PASS result.b is 4700000001
+PASS result.a is 425032705
+PASS result.b is 4720000001
+PASS result.a is 445032705
+PASS result.b is 4740000001
+PASS result.a is 465032705
+PASS result.b is 4760000001
+PASS result.a is 485032705
+PASS result.b is 4780000001
+PASS result.a is 505032705
+PASS result.b is 4800000001
+PASS result.a is 525032705
+PASS result.b is 4820000001
+PASS result.a is 545032705
+PASS result.b is 4840000001
+PASS result.a is 565032705
+PASS result.b is 4860000001
+PASS result.a is 585032705
+PASS result.b is 4880000001
+PASS result.a is 605032705
+PASS result.b is 4900000001
+PASS result.a is 625032705
+PASS result.b is 4920000001
+PASS result.a is 645032705
+PASS result.b is 4940000001
+PASS result.a is 665032705
+PASS result.b is 4960000001
+PASS result.a is 685032705
+PASS result.b is 4980000001
+PASS result.a is 705032705
+PASS result.b is 5000000001
+PASS result.a is 725032705
+PASS result.b is 5020000001
+PASS result.a is 745032705
+PASS result.b is 5040000001
+PASS result.a is 765032705
+PASS result.b is 5060000001
+PASS result.a is 785032705
+PASS result.b is 5080000001
+PASS result.a is 805032705
+PASS result.b is 5100000001
+PASS result.a is 825032705
+PASS result.b is 5120000001
+PASS result.a is 845032705
+PASS result.b is 5140000001
+PASS result.a is 865032705
+PASS result.b is 5160000001
+PASS result.a is 885032705
+PASS result.b is 5180000001
+PASS result.a is 905032705
+PASS result.b is 5200000001
+PASS result.a is 925032705
+PASS result.b is 5220000001
+PASS result.a is 945032705
+PASS result.b is 5240000001
+PASS result.a is 965032705
+PASS result.b is 5260000001
+PASS result.a is 985032705
+PASS result.b is 5280000001
+PASS result.a is 1005032705
+PASS result.b is 5300000001
+PASS result.a is 1025032705
+PASS result.b is 5320000001
+PASS result.a is 1045032705
+PASS result.b is 5340000001
+PASS result.a is 1065032705
+PASS result.b is 5360000001
+PASS result.a is 1085032705
+PASS result.b is 5380000001
+PASS result.a is 1105032705
+PASS result.b is 5400000001
+PASS result.a is 1125032705
+PASS result.b is 5420000001
+PASS result.a is 1145032705
+PASS result.b is 5440000001
+PASS result.a is 1165032705
+PASS result.b is 5460000001
+PASS result.a is 1185032705
+PASS result.b is 5480000001
+PASS result.a is 1205032705
+PASS result.b is 5500000001
+PASS result.a is 1225032705
+PASS result.b is 5520000001
+PASS result.a is 1245032705
+PASS result.b is 5540000001
+PASS result.a is 1265032705
+PASS result.b is 5560000001
+PASS result.a is 1285032705
+PASS result.b is 5580000001
+PASS result.a is 1305032705
+PASS result.b is 5600000001
+PASS result.a is 1325032705
+PASS result.b is 5620000001
+PASS result.a is 1345032705
+PASS result.b is 5640000001
+PASS result.a is 1365032705
+PASS result.b is 5660000001
+PASS result.a is 1385032705
+PASS result.b is 5680000001
+PASS result.a is 1405032705
+PASS result.b is 5700000001
+PASS result.a is 1425032705
+PASS result.b is 5720000001
+PASS result.a is 1445032705
+PASS result.b is 5740000001
+PASS result.a is 1465032705
+PASS result.b is 5760000001
+PASS result.a is 1485032705
+PASS result.b is 5780000001
+PASS result.a is 1505032705
+PASS result.b is 5800000001
+PASS result.a is 1525032705
+PASS result.b is 5820000001
+PASS result.a is 1545032705
+PASS result.b is 5840000001
+PASS result.a is 1565032705
+PASS result.b is 5860000001
+PASS result.a is 1585032705
+PASS result.b is 5880000001
+PASS result.a is 1605032705
+PASS result.b is 5900000001
+PASS result.a is 1625032705
+PASS result.b is 5920000001
+PASS result.a is 1645032705
+PASS result.b is 5940000001
+PASS result.a is 1665032705
+PASS result.b is 5960000001
+PASS result.a is 1685032705
+PASS result.b is 5980000001
+PASS result.a is 1705032705
+PASS result.b is 6000000001
+PASS result.a is 1725032705
+PASS result.b is 6020000001
+PASS result.a is 1745032705
+PASS result.b is 6040000001
+PASS result.a is 1765032705
+PASS result.b is 6060000001
+PASS result.a is 1785032705
+PASS result.b is 6080000001
+PASS result.a is 1805032705
+PASS result.b is 6100000001
+PASS result.a is 1825032705
+PASS result.b is 6120000001
+PASS result.a is 1845032705
+PASS result.b is 6140000001
+PASS result.a is 1865032705
+PASS result.b is 6160000001
+PASS result.a is 1885032705
+PASS result.b is 6180000001
+PASS result.a is 1905032705
+PASS result.b is 6200000001
+PASS result.a is 1925032705
+PASS result.b is 6220000001
+PASS result.a is 1945032705
+PASS result.b is 6240000001
+PASS result.a is 1965032705
+PASS result.b is 6260000001
+PASS result.a is 1985032705
+PASS result.b is 6280000001
+PASS result.a is 2005032705
+PASS result.b is 6300000001
+PASS result.a is 2025032705
+PASS result.b is 6320000001
+PASS result.a is 2045032705
+PASS result.b is 6340000001
+PASS result.a is 2065032705
+PASS result.b is 6360000001
+PASS result.a is 2085032705
+PASS result.b is 6380000001
+PASS result.a is 2105032705
+PASS result.b is 6400000001
+PASS result.a is 2125032705
+PASS result.b is 6420000001
+PASS result.a is 2145032705
+PASS result.b is 6440000001
+PASS result.a is -2129934591
+PASS result.b is 6460000001
+PASS result.a is -2109934591
+PASS result.b is 6480000001
+PASS result.a is -2089934591
+PASS result.b is 6500000001
+PASS result.a is -2069934591
+PASS result.b is 6520000001
+PASS result.a is -2049934591
+PASS result.b is 6540000001
+PASS result.a is -2029934591
+PASS result.b is 6560000001
+PASS result.a is -2009934591
+PASS result.b is 6580000001
+PASS result.a is -1989934591
+PASS result.b is 6600000001
+PASS result.a is -1969934591
+PASS result.b is 6620000001
+PASS result.a is -1949934591
+PASS result.b is 6640000001
+PASS result.a is -1929934591
+PASS result.b is 6660000001
+PASS result.a is -1909934591
+PASS result.b is 6680000001
+PASS result.a is -1889934591
+PASS result.b is 6700000001
+PASS result.a is -1869934591
+PASS result.b is 6720000001
+PASS result.a is -1849934591
+PASS result.b is 6740000001
+PASS result.a is -1829934591
+PASS result.b is 6760000001
+PASS result.a is -1809934591
+PASS result.b is 6780000001
+PASS result.a is -1789934591
+PASS result.b is 6800000001
+PASS result.a is -1769934591
+PASS result.b is 6820000001
+PASS result.a is -1749934591
+PASS result.b is 6840000001
+PASS result.a is -1729934591
+PASS result.b is 6860000001
+PASS result.a is -1709934591
+PASS result.b is 6880000001
+PASS result.a is -1689934591
+PASS result.b is 6900000001
+PASS result.a is -1669934591
+PASS result.b is 6920000001
+PASS result.a is -1649934591
+PASS result.b is 6940000001
+PASS result.a is -1629934591
+PASS result.b is 6960000001
+PASS result.a is -1609934591
+PASS result.b is 6980000001
+PASS result.a is -1589934591
+PASS result.b is 7000000001
+PASS result.a is -1569934591
+PASS result.b is 7020000001
+PASS result.a is -1549934591
+PASS result.b is 7040000001
+PASS result.a is -1529934591
+PASS result.b is 7060000001
+PASS result.a is -1509934591
+PASS result.b is 7080000001
+PASS result.a is -1489934591
+PASS result.b is 7100000001
+PASS result.a is -1469934591
+PASS result.b is 7120000001
+PASS result.a is -1449934591
+PASS result.b is 7140000001
+PASS result.a is -1429934591
+PASS result.b is 7160000001
+PASS result.a is -1409934591
+PASS result.b is 7180000001
+PASS result.a is -1389934591
+PASS result.b is 7200000001
+PASS result.a is -1369934591
+PASS result.b is 7220000001
+PASS result.a is -1349934591
+PASS result.b is 7240000001
+PASS result.a is -1329934591
+PASS result.b is 7260000001
+PASS result.a is -1309934591
+PASS result.b is 7280000001
+PASS result.a is -1289934591
+PASS result.b is 7300000001
+PASS result.a is -1269934591
+PASS result.b is 7320000001
+PASS result.a is -1249934591
+PASS result.b is 7340000001
+PASS result.a is -1229934591
+PASS result.b is 7360000001
+PASS result.a is -1209934591
+PASS result.b is 7380000001
+PASS result.a is -1189934591
+PASS result.b is 7400000001
+PASS result.a is -1169934591
+PASS result.b is 7420000001
+PASS result.a is -1149934591
+PASS result.b is 7440000001
+PASS result.a is -1129934591
+PASS result.b is 7460000001
+PASS result.a is -1109934591
+PASS result.b is 7480000001
+PASS result.a is -1089934591
+PASS result.b is 7500000001
+PASS result.a is -1069934591
+PASS result.b is 7520000001
+PASS result.a is -1049934591
+PASS result.b is 7540000001
+PASS result.a is -1029934591
+PASS result.b is 7560000001
+PASS result.a is -1009934591
+PASS result.b is 7580000001
+PASS result.a is -989934591
+PASS result.b is 7600000001
+PASS result.a is -969934591
+PASS result.b is 7620000001
+PASS result.a is -949934591
+PASS result.b is 7640000001
+PASS result.a is -929934591
+PASS result.b is 7660000001
+PASS result.a is -909934591
+PASS result.b is 7680000001
+PASS result.a is -889934591
+PASS result.b is 7700000001
+PASS result.a is -869934591
+PASS result.b is 7720000001
+PASS result.a is -849934591
+PASS result.b is 7740000001
+PASS result.a is -829934591
+PASS result.b is 7760000001
+PASS result.a is -809934591
+PASS result.b is 7780000001
+PASS result.a is -789934591
+PASS result.b is 7800000001
+PASS result.a is -769934591
+PASS result.b is 7820000001
+PASS result.a is -749934591
+PASS result.b is 7840000001
+PASS result.a is -729934591
+PASS result.b is 7860000001
+PASS result.a is -709934591
+PASS result.b is 7880000001
+PASS result.a is -689934591
+PASS result.b is 7900000001
+PASS result.a is -669934591
+PASS result.b is 7920000001
+PASS result.a is -649934591
+PASS result.b is 7940000001
+PASS result.a is -629934591
+PASS result.b is 7960000001
+PASS result.a is -609934591
+PASS result.b is 7980000001
+PASS result.a is -589934591
+PASS result.b is 8000000001
+PASS result.a is -569934591
+PASS result.b is 8020000001
+PASS result.a is -549934591
+PASS result.b is 8040000001
+PASS result.a is -529934591
+PASS result.b is 8060000001
+PASS result.a is -509934591
+PASS result.b is 8080000001
+PASS result.a is -489934591
+PASS result.b is 8100000001
+PASS result.a is -469934591
+PASS result.b is 8120000001
+PASS result.a is -449934591
+PASS result.b is 8140000001
+PASS result.a is -429934591
+PASS result.b is 8160000001
+PASS result.a is -409934591
+PASS result.b is 8180000001
+PASS result.a is -389934591
+PASS result.b is 8200000001
+PASS result.a is -369934591
+PASS result.b is 8220000001
+PASS result.a is -349934591
+PASS result.b is 8240000001
+PASS result.a is -329934591
+PASS result.b is 8260000001
+PASS result.a is -309934591
+PASS result.b is 8280000001
+PASS result.a is -289934591
+PASS result.b is 8300000001
+PASS result.a is -269934591
+PASS result.b is 8320000001
+PASS result.a is -249934591
+PASS result.b is 8340000001
+PASS result.a is -229934591
+PASS result.b is 8360000001
+PASS result.a is -209934591
+PASS result.b is 8380000001
+PASS result.a is -189934591
+PASS result.b is 8400000001
+PASS result.a is -169934591
+PASS result.b is 8420000001
+PASS result.a is -149934591
+PASS result.b is 8440000001
+PASS result.a is -129934591
+PASS result.b is 8460000001
+PASS result.a is -109934591
+PASS result.b is 8480000001
+PASS result.a is -89934591
+PASS result.b is 8500000001
+PASS result.a is -69934591
+PASS result.b is 8520000001
+PASS result.a is -49934591
+PASS result.b is 8540000001
+PASS result.a is -29934591
+PASS result.b is 8560000001
+PASS result.a is -9934591
+PASS result.b is 8580000001
+PASS result.a is 10065409
+PASS result.b is 8600000001
+PASS result.a is 30065409
+PASS result.b is 8620000001
+PASS result.a is 50065409
+PASS result.b is 8640000001
+PASS result.a is 70065409
+PASS result.b is 8660000001
+PASS result.a is 90065409
+PASS result.b is 8680000001
+PASS result.a is 110065409
+PASS result.b is 8700000001
+PASS result.a is 130065409
+PASS result.b is 8720000001
+PASS result.a is 150065409
+PASS result.b is 8740000001
+PASS result.a is 170065409
+PASS result.b is 8760000001
+PASS result.a is 190065409
+PASS result.b is 8780000001
+PASS result.a is 210065409
+PASS result.b is 8800000001
+PASS result.a is 230065409
+PASS result.b is 8820000001
+PASS result.a is 250065409
+PASS result.b is 8840000001
+PASS result.a is 270065409
+PASS result.b is 8860000001
+PASS result.a is 290065409
+PASS result.b is 8880000001
+PASS result.a is 310065409
+PASS result.b is 8900000001
+PASS result.a is 330065409
+PASS result.b is 8920000001
+PASS result.a is 350065409
+PASS result.b is 8940000001
+PASS result.a is 370065409
+PASS result.b is 8960000001
+PASS result.a is 390065409
+PASS result.b is 8980000001
+PASS result.a is 410065409
+PASS result.b is 9000000001
+PASS result.a is 430065409
+PASS result.b is 9020000001
+PASS result.a is 450065409
+PASS result.b is 9040000001
+PASS result.a is 470065409
+PASS result.b is 9060000001
+PASS result.a is 490065409
+PASS result.b is 9080000001
+PASS result.a is 510065409
+PASS result.b is 9100000001
+PASS result.a is 530065409
+PASS result.b is 9120000001
+PASS result.a is 550065409
+PASS result.b is 9140000001
+PASS result.a is 570065409
+PASS result.b is 9160000001
+PASS result.a is 590065409
+PASS result.b is 9180000001
+PASS result.a is 610065409
+PASS result.b is 9200000001
+PASS result.a is 630065409
+PASS result.b is 9220000001
+PASS result.a is 650065409
+PASS result.b is 9240000001
+PASS result.a is 670065409
+PASS result.b is 9260000001
+PASS result.a is 690065409
+PASS result.b is 9280000001
+PASS result.a is 710065409
+PASS result.b is 9300000001
+PASS result.a is 730065409
+PASS result.b is 9320000001
+PASS result.a is 750065409
+PASS result.b is 9340000001
+PASS result.a is 770065409
+PASS result.b is 9360000001
+PASS result.a is 790065409
+PASS result.b is 9380000001
+PASS result.a is 810065409
+PASS result.b is 9400000001
+PASS result.a is 830065409
+PASS result.b is 9420000001
+PASS result.a is 850065409
+PASS result.b is 9440000001
+PASS result.a is 870065409
+PASS result.b is 9460000001
+PASS result.a is 890065409
+PASS result.b is 9480000001
+PASS result.a is 910065409
+PASS result.b is 9500000001
+PASS result.a is 930065409
+PASS result.b is 9520000001
+PASS result.a is 950065409
+PASS result.b is 9540000001
+PASS result.a is 970065409
+PASS result.b is 9560000001
+PASS result.a is 990065409
+PASS result.b is 9580000001
+PASS result.a is 1010065409
+PASS result.b is 9600000001
+PASS result.a is 1030065409
+PASS result.b is 9620000001
+PASS result.a is 1050065409
+PASS result.b is 9640000001
+PASS result.a is 1070065409
+PASS result.b is 9660000001
+PASS result.a is 1090065409
+PASS result.b is 9680000001
+PASS result.a is 1110065409
+PASS result.b is 9700000001
+PASS result.a is 1130065409
+PASS result.b is 9720000001
+PASS result.a is 1150065409
+PASS result.b is 9740000001
+PASS result.a is 1170065409
+PASS result.b is 9760000001
+PASS result.a is 1190065409
+PASS result.b is 9780000001
+PASS result.a is 1210065409
+PASS result.b is 9800000001
+PASS result.a is 1230065409
+PASS result.b is 9820000001
+PASS result.a is 1250065409
+PASS result.b is 9840000001
+PASS result.a is 1270065409
+PASS result.b is 9860000001
+PASS result.a is 1290065409
+PASS result.b is 9880000001
+PASS result.a is 1310065409
+PASS result.b is 9900000001
+PASS result.a is 1330065409
+PASS result.b is 9920000001
+PASS result.a is 1350065409
+PASS result.b is 9940000001
+PASS result.a is 1370065409
+PASS result.b is 9960000001
+PASS result.a is 1390065409
+PASS result.b is 9980000001
+PASS result.a is 1410065409
+PASS result.b is 10000000001
+PASS result.a is 1430065409
+PASS result.b is 10020000001
+PASS result.a is 1450065409
+PASS result.b is 10040000001
+PASS result.a is 1470065409
+PASS result.b is 10060000001
+PASS result.a is 1490065409
+PASS result.b is 10080000001
+PASS result.a is 1510065409
+PASS result.b is 10100000001
+PASS result.a is 1530065409
+PASS result.b is 10120000001
+PASS result.a is 1550065409
+PASS result.b is 10140000001
+PASS result.a is 1570065409
+PASS result.b is 10160000001
+PASS result.a is 1590065409
+PASS result.b is 10180000001
+PASS result.a is 1610065409
+PASS result.b is 10200000001
+PASS result.a is 1630065409
+PASS result.b is 10220000001
+PASS result.a is 1650065409
+PASS result.b is 10240000001
+PASS result.a is 1670065409
+PASS result.b is 10260000001
+PASS result.a is 1690065409
+PASS result.b is 10280000001
+PASS result.a is 1710065409
+PASS result.b is 10300000001
+PASS result.a is 1730065409
+PASS result.b is 10320000001
+PASS result.a is 1750065409
+PASS result.b is 10340000001
+PASS result.a is 1770065409
+PASS result.b is 10360000001
+PASS result.a is 1790065409
+PASS result.b is 10380000001
+PASS result.a is 1810065409
+PASS result.b is 10400000001
+PASS result.a is 1830065409
+PASS result.b is 10420000001
+PASS result.a is 1850065409
+PASS result.b is 10440000001
+PASS result.a is 1870065409
+PASS result.b is 10460000001
+PASS result.a is 1890065409
+PASS result.b is 10480000001
+PASS result.a is 1910065409
+PASS result.b is 10500000001
+PASS result.a is 1930065409
+PASS result.b is 10520000001
+PASS result.a is 1950065409
+PASS result.b is 10540000001
+PASS result.a is 1970065409
+PASS result.b is 10560000001
+PASS result.a is 1990065409
+PASS result.b is 10580000001
+PASS result.a is 2010065409
+PASS result.b is 10600000001
+PASS result.a is 2030065409
+PASS result.b is 10620000001
+PASS result.a is 2050065409
+PASS result.b is 10640000001
+PASS result.a is 2070065409
+PASS result.b is 10660000001
+PASS result.a is 2090065409
+PASS result.b is 10680000001
+PASS result.a is 2110065409
+PASS result.b is 10700000001
+PASS result.a is 2130065409
+PASS result.b is 10720000001
+PASS result.a is -2144901887
+PASS result.b is 10740000001
+PASS result.a is -2124901887
+PASS result.b is 10760000001
+PASS result.a is -2104901887
+PASS result.b is 10780000001
+PASS result.a is -2084901887
+PASS result.b is 10800000001
+PASS result.a is -2064901887
+PASS result.b is 10820000001
+PASS result.a is -2044901887
+PASS result.b is 10840000001
+PASS result.a is -2024901887
+PASS result.b is 10860000001
+PASS result.a is -2004901887
+PASS result.b is 10880000001
+PASS result.a is -1984901887
+PASS result.b is 10900000001
+PASS result.a is -1964901887
+PASS result.b is 10920000001
+PASS result.a is -1944901887
+PASS result.b is 10940000001
+PASS result.a is -1924901887
+PASS result.b is 10960000001
+PASS result.a is -1904901887
+PASS result.b is 10980000001
+PASS result.a is -1884901887
+PASS result.b is 11000000001
+PASS result.a is -1864901887
+PASS result.b is 11020000001
+PASS result.a is -1844901887
+PASS result.b is 11040000001
+PASS result.a is -1824901887
+PASS result.b is 11060000001
+PASS result.a is -1804901887
+PASS result.b is 11080000001
+PASS result.a is -1784901887
+PASS result.b is 11100000001
+PASS result.a is -1764901887
+PASS result.b is 11120000001
+PASS result.a is -1744901887
+PASS result.b is 11140000001
+PASS result.a is -1724901887
+PASS result.b is 11160000001
+PASS result.a is -1704901887
+PASS result.b is 11180000001
+PASS result.a is -1684901887
+PASS result.b is 11200000001
+PASS result.a is -1664901887
+PASS result.b is 11220000001
+PASS result.a is -1644901887
+PASS result.b is 11240000001
+PASS result.a is -1624901887
+PASS result.b is 11260000001
+PASS result.a is -1604901887
+PASS result.b is 11280000001
+PASS result.a is -1584901887
+PASS result.b is 11300000001
+PASS result.a is -1564901887
+PASS result.b is 11320000001
+PASS result.a is -1544901887
+PASS result.b is 11340000001
+PASS result.a is -1524901887
+PASS result.b is 11360000001
+PASS result.a is -1504901887
+PASS result.b is 11380000001
+PASS result.a is -1484901887
+PASS result.b is 11400000001
+PASS result.a is -1464901887
+PASS result.b is 11420000001
+PASS result.a is -1444901887
+PASS result.b is 11440000001
+PASS result.a is -1424901887
+PASS result.b is 11460000001
+PASS result.a is -1404901887
+PASS result.b is 11480000001
+PASS result.a is -1384901887
+PASS result.b is 11500000001
+PASS result.a is -1364901887
+PASS result.b is 11520000001
+PASS result.a is -1344901887
+PASS result.b is 11540000001
+PASS result.a is -1324901887
+PASS result.b is 11560000001
+PASS result.a is -1304901887
+PASS result.b is 11580000001
+PASS result.a is -1284901887
+PASS result.b is 11600000001
+PASS result.a is -1264901887
+PASS result.b is 11620000001
+PASS result.a is -1244901887
+PASS result.b is 11640000001
+PASS result.a is -1224901887
+PASS result.b is 11660000001
+PASS result.a is -1204901887
+PASS result.b is 11680000001
+PASS result.a is -1184901887
+PASS result.b is 11700000001
+PASS result.a is -1164901887
+PASS result.b is 11720000001
+PASS result.a is -1144901887
+PASS result.b is 11740000001
+PASS result.a is -1124901887
+PASS result.b is 11760000001
+PASS result.a is -1104901887
+PASS result.b is 11780000001
+PASS result.a is -1084901887
+PASS result.b is 11800000001
+PASS result.a is -1064901887
+PASS result.b is 11820000001
+PASS result.a is -1044901887
+PASS result.b is 11840000001
+PASS result.a is -1024901887
+PASS result.b is 11860000001
+PASS result.a is -1004901887
+PASS result.b is 11880000001
+PASS result.a is -984901887
+PASS result.b is 11900000001
+PASS result.a is -964901887
+PASS result.b is 11920000001
+PASS result.a is -944901887
+PASS result.b is 11940000001
+PASS result.a is -924901887
+PASS result.b is 11960000001
+PASS result.a is -904901887
+PASS result.b is 11980000001
+PASS result.a is -884901887
+PASS result.b is 12000000001
+PASS result.a is -864901887
+PASS result.b is 12020000001
+PASS result.a is -844901887
+PASS result.b is 12040000001
+PASS result.a is -824901887
+PASS result.b is 12060000001
+PASS result.a is -804901887
+PASS result.b is 12080000001
+PASS result.a is -784901887
+PASS result.b is 12100000001
+PASS result.a is -764901887
+PASS result.b is 12120000001
+PASS result.a is -744901887
+PASS result.b is 12140000001
+PASS result.a is -724901887
+PASS result.b is 12160000001
+PASS result.a is -704901887
+PASS result.b is 12180000001
+PASS result.a is -684901887
+PASS result.b is 12200000001
+PASS result.a is -664901887
+PASS result.b is 12220000001
+PASS result.a is -644901887
+PASS result.b is 12240000001
+PASS result.a is -624901887
+PASS result.b is 12260000001
+PASS result.a is -604901887
+PASS result.b is 12280000001
+PASS result.a is -584901887
+PASS result.b is 12300000001
+PASS result.a is -564901887
+PASS result.b is 12320000001
+PASS result.a is -544901887
+PASS result.b is 12340000001
+PASS result.a is -524901887
+PASS result.b is 12360000001
+PASS result.a is -504901887
+PASS result.b is 12380000001
+PASS result.a is -484901887
+PASS result.b is 12400000001
+PASS result.a is -464901887
+PASS result.b is 12420000001
+PASS result.a is -444901887
+PASS result.b is 12440000001
+PASS result.a is -424901887
+PASS result.b is 12460000001
+PASS result.a is -404901887
+PASS result.b is 12480000001
+PASS result.a is -384901887
+PASS result.b is 12500000001
+PASS result.a is -364901887
+PASS result.b is 12520000001
+PASS result.a is -344901887
+PASS result.b is 12540000001
+PASS result.a is -324901887
+PASS result.b is 12560000001
+PASS result.a is -304901887
+PASS result.b is 12580000001
+PASS result.a is -284901887
+PASS result.b is 12600000001
+PASS result.a is -264901887
+PASS result.b is 12620000001
+PASS result.a is -244901887
+PASS result.b is 12640000001
+PASS result.a is -224901887
+PASS result.b is 12660000001
+PASS result.a is -204901887
+PASS result.b is 12680000001
+PASS result.a is -184901887
+PASS result.b is 12700000001
+PASS result.a is -164901887
+PASS result.b is 12720000001
+PASS result.a is -144901887
+PASS result.b is 12740000001
+PASS result.a is -124901887
+PASS result.b is 12760000001
+PASS result.a is -104901887
+PASS result.b is 12780000001
+PASS result.a is -84901887
+PASS result.b is 12800000001
+PASS result.a is -64901887
+PASS result.b is 12820000001
+PASS result.a is -44901887
+PASS result.b is 12840000001
+PASS result.a is -24901887
+PASS result.b is 12860000001
+PASS result.a is -4901887
+PASS result.b is 12880000001
+PASS result.a is 15098113
+PASS result.b is 12900000001
+PASS result.a is 35098113
+PASS result.b is 12920000001
+PASS result.a is 55098113
+PASS result.b is 12940000001
+PASS result.a is 75098113
+PASS result.b is 12960000001
+PASS result.a is 95098113
+PASS result.b is 12980000001
+PASS result.a is 115098113
+PASS result.b is 13000000001
+PASS result.a is 135098113
+PASS result.b is 13020000001
+PASS result.a is 155098113
+PASS result.b is 13040000001
+PASS result.a is 175098113
+PASS result.b is 13060000001
+PASS result.a is 195098113
+PASS result.b is 13080000001
+PASS result.a is 215098113
+PASS result.b is 13100000001
+PASS result.a is 235098113
+PASS result.b is 13120000001
+PASS result.a is 255098113
+PASS result.b is 13140000001
+PASS result.a is 275098113
+PASS result.b is 13160000001
+PASS result.a is 295098113
+PASS result.b is 13180000001
+PASS result.a is 315098113
+PASS result.b is 13200000001
+PASS result.a is 335098113
+PASS result.b is 13220000001
+PASS result.a is 355098113
+PASS result.b is 13240000001
+PASS result.a is 375098113
+PASS result.b is 13260000001
+PASS result.a is 395098113
+PASS result.b is 13280000001
+PASS result.a is 415098113
+PASS result.b is 13300000001
+PASS result.a is 435098113
+PASS result.b is 13320000001
+PASS result.a is 455098113
+PASS result.b is 13340000001
+PASS result.a is 475098113
+PASS result.b is 13360000001
+PASS result.a is 495098113
+PASS result.b is 13380000001
+PASS result.a is 515098113
+PASS result.b is 13400000001
+PASS result.a is 535098113
+PASS result.b is 13420000001
+PASS result.a is 555098113
+PASS result.b is 13440000001
+PASS result.a is 575098113
+PASS result.b is 13460000001
+PASS result.a is 595098113
+PASS result.b is 13480000001
+PASS result.a is 615098113
+PASS result.b is 13500000001
+PASS result.a is 635098113
+PASS result.b is 13520000001
+PASS result.a is 655098113
+PASS result.b is 13540000001
+PASS result.a is 675098113
+PASS result.b is 13560000001
+PASS result.a is 695098113
+PASS result.b is 13580000001
+PASS result.a is 715098113
+PASS result.b is 13600000001
+PASS result.a is 735098113
+PASS result.b is 13620000001
+PASS result.a is 755098113
+PASS result.b is 13640000001
+PASS result.a is 775098113
+PASS result.b is 13660000001
+PASS result.a is 795098113
+PASS result.b is 13680000001
+PASS result.a is 815098113
+PASS result.b is 13700000001
+PASS result.a is 835098113
+PASS result.b is 13720000001
+PASS result.a is 855098113
+PASS result.b is 13740000001
+PASS result.a is 875098113
+PASS result.b is 13760000001
+PASS result.a is 895098113
+PASS result.b is 13780000001
+PASS result.a is 915098113
+PASS result.b is 13800000001
+PASS result.a is 935098113
+PASS result.b is 13820000001
+PASS result.a is 955098113
+PASS result.b is 13840000001
+PASS result.a is 975098113
+PASS result.b is 13860000001
+PASS result.a is 995098113
+PASS result.b is 13880000001
+PASS result.a is 1015098113
+PASS result.b is 13900000001
+PASS result.a is 1035098113
+PASS result.b is 13920000001
+PASS result.a is 1055098113
+PASS result.b is 13940000001
+PASS result.a is 1075098113
+PASS result.b is 13960000001
+PASS result.a is 1095098113
+PASS result.b is 13980000001
+PASS result.a is 1115098113
+PASS result.b is 14000000001
+PASS result.a is 1135098113
+PASS result.b is 14020000001
+PASS result.a is 1155098113
+PASS result.b is 14040000001
+PASS result.a is 1175098113
+PASS result.b is 14060000001
+PASS result.a is 1195098113
+PASS result.b is 14080000001
+PASS result.a is 1215098113
+PASS result.b is 14100000001
+PASS result.a is 1235098113
+PASS result.b is 14120000001
+PASS result.a is 1255098113
+PASS result.b is 14140000001
+PASS result.a is 1275098113
+PASS result.b is 14160000001
+PASS result.a is 1295098113
+PASS result.b is 14180000001
+PASS result.a is 1315098113
+PASS result.b is 14200000001
+PASS result.a is 1335098113
+PASS result.b is 14220000001
+PASS result.a is 1355098113
+PASS result.b is 14240000001
+PASS result.a is 1375098113
+PASS result.b is 14260000001
+PASS result.a is 1395098113
+PASS result.b is 14280000001
+PASS result.a is 1415098113
+PASS result.b is 14300000001
+PASS result.a is 1435098113
+PASS result.b is 14320000001
+PASS result.a is 1455098113
+PASS result.b is 14340000001
+PASS result.a is 1475098113
+PASS result.b is 14360000001
+PASS result.a is 1495098113
+PASS result.b is 14380000001
+PASS result.a is 1515098113
+PASS result.b is 14400000001
+PASS result.a is 1535098113
+PASS result.b is 14420000001
+PASS result.a is 1555098113
+PASS result.b is 14440000001
+PASS result.a is 1575098113
+PASS result.b is 14460000001
+PASS result.a is 1595098113
+PASS result.b is 14480000001
+PASS result.a is 1615098113
+PASS result.b is 14500000001
+PASS result.a is 1635098113
+PASS result.b is 14520000001
+PASS result.a is 1655098113
+PASS result.b is 14540000001
+PASS result.a is 1675098113
+PASS result.b is 14560000001
+PASS result.a is 1695098113
+PASS result.b is 14580000001
+PASS result.a is 1715098113
+PASS result.b is 14600000001
+PASS result.a is 1735098113
+PASS result.b is 14620000001
+PASS result.a is 1755098113
+PASS result.b is 14640000001
+PASS result.a is 1775098113
+PASS result.b is 14660000001
+PASS result.a is 1795098113
+PASS result.b is 14680000001
+PASS result.a is 1815098113
+PASS result.b is 14700000001
+PASS result.a is 1835098113
+PASS result.b is 14720000001
+PASS result.a is 1855098113
+PASS result.b is 14740000001
+PASS result.a is 1875098113
+PASS result.b is 14760000001
+PASS result.a is 1895098113
+PASS result.b is 14780000001
+PASS result.a is 1915098113
+PASS result.b is 14800000001
+PASS result.a is 1935098113
+PASS result.b is 14820000001
+PASS result.a is 1955098113
+PASS result.b is 14840000001
+PASS result.a is 1975098113
+PASS result.b is 14860000001
+PASS result.a is 1995098113
+PASS result.b is 14880000001
+PASS result.a is 2015098113
+PASS result.b is 14900000001
+PASS result.a is 2035098113
+PASS result.b is 14920000001
+PASS result.a is 2055098113
+PASS result.b is 14940000001
+PASS result.a is 2075098113
+PASS result.b is 14960000001
+PASS result.a is 2095098113
+PASS result.b is 14980000001
+PASS result.a is 2115098113
+PASS result.b is 15000000001
+PASS result.a is 2135098113
+PASS result.b is 15020000001
+PASS result.a is -2139869183
+PASS result.b is 15040000001
+PASS result.a is -2119869183
+PASS result.b is 15060000001
+PASS result.a is -2099869183
+PASS result.b is 15080000001
+PASS result.a is -2079869183
+PASS result.b is 15100000001
+PASS result.a is -2059869183
+PASS result.b is 15120000001
+PASS result.a is -2039869183
+PASS result.b is 15140000001
+PASS result.a is -2019869183
+PASS result.b is 15160000001
+PASS result.a is -1999869183
+PASS result.b is 15180000001
+PASS result.a is -1979869183
+PASS result.b is 15200000001
+PASS result.a is -1959869183
+PASS result.b is 15220000001
+PASS result.a is -1939869183
+PASS result.b is 15240000001
+PASS result.a is -1919869183
+PASS result.b is 15260000001
+PASS result.a is -1899869183
+PASS result.b is 15280000001
+PASS result.a is -1879869183
+PASS result.b is 15300000001
+PASS result.a is -1859869183
+PASS result.b is 15320000001
+PASS result.a is -1839869183
+PASS result.b is 15340000001
+PASS result.a is -1819869183
+PASS result.b is 15360000001
+PASS result.a is -1799869183
+PASS result.b is 15380000001
+PASS result.a is -1779869183
+PASS result.b is 15400000001
+PASS result.a is -1759869183
+PASS result.b is 15420000001
+PASS result.a is -1739869183
+PASS result.b is 15440000001
+PASS result.a is -1719869183
+PASS result.b is 15460000001
+PASS result.a is -1699869183
+PASS result.b is 15480000001
+PASS result.a is -1679869183
+PASS result.b is 15500000001
+PASS result.a is -1659869183
+PASS result.b is 15520000001
+PASS result.a is -1639869183
+PASS result.b is 15540000001
+PASS result.a is -1619869183
+PASS result.b is 15560000001
+PASS result.a is -1599869183
+PASS result.b is 15580000001
+PASS result.a is -1579869183
+PASS result.b is 15600000001
+PASS result.a is -1559869183
+PASS result.b is 15620000001
+PASS result.a is -1539869183
+PASS result.b is 15640000001
+PASS result.a is -1519869183
+PASS result.b is 15660000001
+PASS result.a is -1499869183
+PASS result.b is 15680000001
+PASS result.a is -1479869183
+PASS result.b is 15700000001
+PASS result.a is -1459869183
+PASS result.b is 15720000001
+PASS result.a is -1439869183
+PASS result.b is 15740000001
+PASS result.a is -1419869183
+PASS result.b is 15760000001
+PASS result.a is -1399869183
+PASS result.b is 15780000001
+PASS result.a is -1379869183
+PASS result.b is 15800000001
+PASS result.a is -1359869183
+PASS result.b is 15820000001
+PASS result.a is -1339869183
+PASS result.b is 15840000001
+PASS result.a is -1319869183
+PASS result.b is 15860000001
+PASS result.a is -1299869183
+PASS result.b is 15880000001
+PASS result.a is -1279869183
+PASS result.b is 15900000001
+PASS result.a is -1259869183
+PASS result.b is 15920000001
+PASS result.a is -1239869183
+PASS result.b is 15940000001
+PASS result.a is -1219869183
+PASS result.b is 15960000001
+PASS result.a is -1199869183
+PASS result.b is 15980000001
+PASS result.a is -1179869183
+PASS result.b is 16000000001
+PASS result.a is -1159869183
+PASS result.b is 16020000001
+PASS result.a is -1139869183
+PASS result.b is 16040000001
+PASS result.a is -1119869183
+PASS result.b is 16060000001
+PASS result.a is -1099869183
+PASS result.b is 16080000001
+PASS result.a is -1079869183
+PASS result.b is 16100000001
+PASS result.a is -1059869183
+PASS result.b is 16120000001
+PASS result.a is -1039869183
+PASS result.b is 16140000001
+PASS result.a is -1019869183
+PASS result.b is 16160000001
+PASS result.a is -999869183
+PASS result.b is 16180000001
+PASS result.a is -979869183
+PASS result.b is 16200000001
+PASS result.a is -959869183
+PASS result.b is 16220000001
+PASS result.a is -939869183
+PASS result.b is 16240000001
+PASS result.a is -919869183
+PASS result.b is 16260000001
+PASS result.a is -899869183
+PASS result.b is 16280000001
+PASS result.a is -879869183
+PASS result.b is 16300000001
+PASS result.a is -859869183
+PASS result.b is 16320000001
+PASS result.a is -839869183
+PASS result.b is 16340000001
+PASS result.a is -819869183
+PASS result.b is 16360000001
+PASS result.a is -799869183
+PASS result.b is 16380000001
+PASS result.a is -779869183
+PASS result.b is 16400000001
+PASS result.a is -759869183
+PASS result.b is 16420000001
+PASS result.a is -739869183
+PASS result.b is 16440000001
+PASS result.a is -719869183
+PASS result.b is 16460000001
+PASS result.a is -699869183
+PASS result.b is 16480000001
+PASS result.a is -679869183
+PASS result.b is 16500000001
+PASS result.a is -659869183
+PASS result.b is 16520000001
+PASS result.a is -639869183
+PASS result.b is 16540000001
+PASS result.a is -619869183
+PASS result.b is 16560000001
+PASS result.a is -599869183
+PASS result.b is 16580000001
+PASS result.a is -579869183
+PASS result.b is 16600000001
+PASS result.a is -559869183
+PASS result.b is 16620000001
+PASS result.a is -539869183
+PASS result.b is 16640000001
+PASS result.a is -519869183
+PASS result.b is 16660000001
+PASS result.a is -499869183
+PASS result.b is 16680000001
+PASS result.a is -479869183
+PASS result.b is 16700000001
+PASS result.a is -459869183
+PASS result.b is 16720000001
+PASS result.a is -439869183
+PASS result.b is 16740000001
+PASS result.a is -419869183
+PASS result.b is 16760000001
+PASS result.a is -399869183
+PASS result.b is 16780000001
+PASS result.a is -379869183
+PASS result.b is 16800000001
+PASS result.a is -359869183
+PASS result.b is 16820000001
+PASS result.a is -339869183
+PASS result.b is 16840000001
+PASS result.a is -319869183
+PASS result.b is 16860000001
+PASS result.a is -299869183
+PASS result.b is 16880000001
+PASS result.a is -279869183
+PASS result.b is 16900000001
+PASS result.a is -259869183
+PASS result.b is 16920000001
+PASS result.a is -239869183
+PASS result.b is 16940000001
+PASS result.a is -219869183
+PASS result.b is 16960000001
+PASS result.a is -199869183
+PASS result.b is 16980000001
+PASS result.a is -179869183
+PASS result.b is 17000000001
+PASS result.a is -159869183
+PASS result.b is 17020000001
+PASS result.a is -139869183
+PASS result.b is 17040000001
+PASS result.a is -119869183
+PASS result.b is 17060000001
+PASS result.a is -99869183
+PASS result.b is 17080000001
+PASS result.a is -79869183
+PASS result.b is 17100000001
+PASS result.a is -59869183
+PASS result.b is 17120000001
+PASS result.a is -39869183
+PASS result.b is 17140000001
+PASS result.a is -19869183
+PASS result.b is 17160000001
+PASS result.a is 130817
+PASS result.b is 17180000001
+PASS result.a is 20130817
+PASS result.b is 17200000001
+PASS result.a is 40130817
+PASS result.b is 17220000001
+PASS result.a is 60130817
+PASS result.b is 17240000001
+PASS result.a is 80130817
+PASS result.b is 17260000001
+PASS result.a is 100130817
+PASS result.b is 17280000001
+PASS result.a is 120130817
+PASS result.b is 17300000001
+PASS result.a is 140130817
+PASS result.b is 17320000001
+PASS result.a is 160130817
+PASS result.b is 17340000001
+PASS result.a is 180130817
+PASS result.b is 17360000001
+PASS result.a is 200130817
+PASS result.b is 17380000001
+PASS result.a is 220130817
+PASS result.b is 17400000001
+PASS result.a is 240130817
+PASS result.b is 17420000001
+PASS result.a is 260130817
+PASS result.b is 17440000001
+PASS result.a is 280130817
+PASS result.b is 17460000001
+PASS result.a is 300130817
+PASS result.b is 17480000001
+PASS result.a is 320130817
+PASS result.b is 17500000001
+PASS result.a is 340130817
+PASS result.b is 17520000001
+PASS result.a is 360130817
+PASS result.b is 17540000001
+PASS result.a is 380130817
+PASS result.b is 17560000001
+PASS result.a is 400130817
+PASS result.b is 17580000001
+PASS result.a is 420130817
+PASS result.b is 17600000001
+PASS result.a is 440130817
+PASS result.b is 17620000001
+PASS result.a is 460130817
+PASS result.b is 17640000001
+PASS result.a is 480130817
+PASS result.b is 17660000001
+PASS result.a is 500130817
+PASS result.b is 17680000001
+PASS result.a is 520130817
+PASS result.b is 17700000001
+PASS result.a is 540130817
+PASS result.b is 17720000001
+PASS result.a is 560130817
+PASS result.b is 17740000001
+PASS result.a is 580130817
+PASS result.b is 17760000001
+PASS result.a is 600130817
+PASS result.b is 17780000001
+PASS result.a is 620130817
+PASS result.b is 17800000001
+PASS result.a is 640130817
+PASS result.b is 17820000001
+PASS result.a is 660130817
+PASS result.b is 17840000001
+PASS result.a is 680130817
+PASS result.b is 17860000001
+PASS result.a is 700130817
+PASS result.b is 17880000001
+PASS result.a is 720130817
+PASS result.b is 17900000001
+PASS result.a is 740130817
+PASS result.b is 17920000001
+PASS result.a is 760130817
+PASS result.b is 17940000001
+PASS result.a is 780130817
+PASS result.b is 17960000001
+PASS result.a is 800130817
+PASS result.b is 17980000001
+PASS result.a is 820130817
+PASS result.b is 18000000001
+PASS result.a is 840130817
+PASS result.b is 18020000001
+PASS result.a is 860130817
+PASS result.b is 18040000001
+PASS result.a is 880130817
+PASS result.b is 18060000001
+PASS result.a is 900130817
+PASS result.b is 18080000001
+PASS result.a is 920130817
+PASS result.b is 18100000001
+PASS result.a is 940130817
+PASS result.b is 18120000001
+PASS result.a is 960130817
+PASS result.b is 18140000001
+PASS result.a is 980130817
+PASS result.b is 18160000001
+PASS result.a is 1000130817
+PASS result.b is 18180000001
+PASS result.a is 1020130817
+PASS result.b is 18200000001
+PASS result.a is 1040130817
+PASS result.b is 18220000001
+PASS result.a is 1060130817
+PASS result.b is 18240000001
+PASS result.a is 1080130817
+PASS result.b is 18260000001
+PASS result.a is 1100130817
+PASS result.b is 18280000001
+PASS result.a is 1120130817
+PASS result.b is 18300000001
+PASS result.a is 1140130817
+PASS result.b is 18320000001
+PASS result.a is 1160130817
+PASS result.b is 18340000001
+PASS result.a is 1180130817
+PASS result.b is 18360000001
+PASS result.a is 1200130817
+PASS result.b is 18380000001
+PASS result.a is 1220130817
+PASS result.b is 18400000001
+PASS result.a is 1240130817
+PASS result.b is 18420000001
+PASS result.a is 1260130817
+PASS result.b is 18440000001
+PASS result.a is 1280130817
+PASS result.b is 18460000001
+PASS result.a is 1300130817
+PASS result.b is 18480000001
+PASS result.a is 1320130817
+PASS result.b is 18500000001
+PASS result.a is 1340130817
+PASS result.b is 18520000001
+PASS result.a is 1360130817
+PASS result.b is 18540000001
+PASS result.a is 1380130817
+PASS result.b is 18560000001
+PASS result.a is 1400130817
+PASS result.b is 18580000001
+PASS result.a is 1420130817
+PASS result.b is 18600000001
+PASS result.a is 1440130817
+PASS result.b is 18620000001
+PASS result.a is 1460130817
+PASS result.b is 18640000001
+PASS result.a is 1480130817
+PASS result.b is 18660000001
+PASS result.a is 1500130817
+PASS result.b is 18680000001
+PASS result.a is 1520130817
+PASS result.b is 18700000001
+PASS result.a is 1540130817
+PASS result.b is 18720000001
+PASS result.a is 1560130817
+PASS result.b is 18740000001
+PASS result.a is 1580130817
+PASS result.b is 18760000001
+PASS result.a is 1600130817
+PASS result.b is 18780000001
+PASS result.a is 1620130817
+PASS result.b is 18800000001
+PASS result.a is 1640130817
+PASS result.b is 18820000001
+PASS result.a is 1660130817
+PASS result.b is 18840000001
+PASS result.a is 1680130817
+PASS result.b is 18860000001
+PASS result.a is 1700130817
+PASS result.b is 18880000001
+PASS result.a is 1720130817
+PASS result.b is 18900000001
+PASS result.a is 1740130817
+PASS result.b is 18920000001
+PASS result.a is 1760130817
+PASS result.b is 18940000001
+PASS result.a is 1780130817
+PASS result.b is 18960000001
+PASS result.a is 1800130817
+PASS result.b is 18980000001
+PASS result.a is 1820130817
+PASS result.b is 19000000001
+PASS result.a is 1840130817
+PASS result.b is 19020000001
+PASS result.a is 1860130817
+PASS result.b is 19040000001
+PASS result.a is 1880130817
+PASS result.b is 19060000001
+PASS result.a is 1900130817
+PASS result.b is 19080000001
+PASS result.a is 1920130817
+PASS result.b is 19100000001
+PASS result.a is 1940130817
+PASS result.b is 19120000001
+PASS result.a is 1960130817
+PASS result.b is 19140000001
+PASS result.a is 1980130817
+PASS result.b is 19160000001
+PASS result.a is 2000130817
+PASS result.b is 19180000001
+PASS result.a is 2020130817
+PASS result.b is 19200000001
+PASS result.a is 2040130817
+PASS result.b is 19220000001
+PASS result.a is 2060130817
+PASS result.b is 19240000001
+PASS result.a is 2080130817
+PASS result.b is 19260000001
+PASS result.a is 2100130817
+PASS result.b is 19280000001
+PASS result.a is 2120130817
+PASS result.b is 19300000001
+PASS result.a is 2140130817
+PASS result.b is 19320000001
+PASS result.a is -2134836479
+PASS result.b is 19340000001
+PASS result.a is -2114836479
+PASS result.b is 19360000001
+PASS result.a is -2094836479
+PASS result.b is 19380000001
+PASS result.a is -2074836479
+PASS result.b is 19400000001
+PASS result.a is -2054836479
+PASS result.b is 19420000001
+PASS result.a is -2034836479
+PASS result.b is 19440000001
+PASS result.a is -2014836479
+PASS result.b is 19460000001
+PASS result.a is -1994836479
+PASS result.b is 19480000001
+PASS result.a is -1974836479
+PASS result.b is 19500000001
+PASS result.a is -1954836479
+PASS result.b is 19520000001
+PASS result.a is -1934836479
+PASS result.b is 19540000001
+PASS result.a is -1914836479
+PASS result.b is 19560000001
+PASS result.a is -1894836479
+PASS result.b is 19580000001
+PASS result.a is -1874836479
+PASS result.b is 19600000001
+PASS result.a is -1854836479
+PASS result.b is 19620000001
+PASS result.a is -1834836479
+PASS result.b is 19640000001
+PASS result.a is -1814836479
+PASS result.b is 19660000001
+PASS result.a is -1794836479
+PASS result.b is 19680000001
+PASS result.a is -1774836479
+PASS result.b is 19700000001
+PASS result.a is -1754836479
+PASS result.b is 19720000001
+PASS result.a is -1734836479
+PASS result.b is 19740000001
+PASS result.a is -1714836479
+PASS result.b is 19760000001
+PASS result.a is -1694836479
+PASS result.b is 19780000001
+PASS result.a is -1674836479
+PASS result.b is 19800000001
+PASS result.a is -1654836479
+PASS result.b is 19820000001
+PASS result.a is -1634836479
+PASS result.b is 19840000001
+PASS result.a is -1614836479
+PASS result.b is 19860000001
+PASS result.a is -1594836479
+PASS result.b is 19880000001
+PASS result.a is -1574836479
+PASS result.b is 19900000001
+PASS result.a is -1554836479
+PASS result.b is 19920000001
+PASS result.a is -1534836479
+PASS result.b is 19940000001
+PASS result.a is -1514836479
+PASS result.b is 19960000001
+PASS result.a is -1494836479
+PASS result.b is 19980000001
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-integer-optimization.js b/deps/v8/test/webkit/dfg-integer-optimization.js
new file mode 100644 (file)
index 0000000..31ec8fc
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that integer addition optimizations in the DFG are not performed too overzealously."
+);
+
+function doAdd(a,b) {
+    // The point of this test is to see if the DFG CSE's the second (a + b) against the first, after
+    // optimizing the first to be an integer addition. The first one certainly is an integer addition,
+    // but the second one isn't - it must either be an integer addition with overflow checking, or a
+    // double addition.
+    return {a:((a + b) | 0), b:(a + b)};
+}
+
+for (var i = 0; i < 1000; ++i) {
+    // Create numbers big enough that we'll start seeing doubles only after about 200 invocations.
+    var a = i * 1000 * 1000 * 10;
+    var b = i * 1000 * 1000 * 10 + 1;
+    var result = doAdd(a, b);
+
+    // Use eval() for computing the correct result, to force execution to happen outside the DFG.
+    shouldBe("result.a", "" + eval("((" + a + " + " + b + ") | 0)"))
+    shouldBe("result.b", "" + eval(a + " + " + b))
+}
+
diff --git a/deps/v8/test/webkit/dfg-intrinsic-osr-exit-expected.txt b/deps/v8/test/webkit/dfg-intrinsic-osr-exit-expected.txt
new file mode 100644 (file)
index 0000000..277a118
--- /dev/null
@@ -0,0 +1,43 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that an OSR exit inside of an intrinsic that was not loaded with a method check works correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo([Math.abs], {f:5}) is 5
+PASS foo([Math.abs], {f:5.5}) is 5.5
+PASS foo([Math.abs], {f:5.5}) is 5.5
+PASS foo([Math.abs], {f:5.5}) is 5.5
+PASS foo([Math.abs], {f:5.5}) is 5.5
+PASS foo([Math.abs], {f:5.5}) is 5.5
+PASS foo([Math.abs], {f:5.5}) is 5.5
+PASS foo([Math.abs], {f:5.5}) is 5.5
+PASS foo([Math.abs], {f:5.5}) is 5.5
+PASS foo([Math.abs], {f:5.5}) is 5.5
+PASS foo([Math.abs], {f:5.5}) is 5.5
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-intrinsic-osr-exit.js b/deps/v8/test/webkit/dfg-intrinsic-osr-exit.js
new file mode 100644 (file)
index 0000000..4ac756c
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that an OSR exit inside of an intrinsic that was not loaded with a method check works correctly."
+);
+
+function foo(a,b) {
+    return a[0](b.f);
+}
+
+for (var i = 0; i < 100; ++i)
+    foo([Math.abs], {f:5});
+
+shouldBe("foo([Math.abs], {f:5})", "5");
+
+for (var i = 0; i < 10; ++i)
+    shouldBe("foo([Math.abs], {f:5.5})", "5.5");
+
+var successfullyParsed = true;
diff --git a/deps/v8/test/webkit/dfg-intrinsic-side-effect-assignment-osr-exit-expected.txt b/deps/v8/test/webkit/dfg-intrinsic-side-effect-assignment-osr-exit-expected.txt
new file mode 100644 (file)
index 0000000..6b3e79d
--- /dev/null
@@ -0,0 +1,532 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens if we OSR exit on an assignment that was part of a side-effecting intrinsic.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-intrinsic-side-effect-assignment-osr-exit.js b/deps/v8/test/webkit/dfg-intrinsic-side-effect-assignment-osr-exit.js
new file mode 100644 (file)
index 0000000..4a32738
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens if we OSR exit on an assignment that was part of a side-effecting intrinsic."
+);
+
+function foo(array) {
+    var x = array.pop();
+    if (x)
+        return x;
+}
+
+for (var i = 0; i < 500; ++i) {
+    var array = [];
+    if (i == 50)
+        array.x = 42;
+    array.push("blah");
+    var expected;
+    if (i >= 450) {
+        array.push(2);
+        expected = "2";
+    } else {
+        array.push("bleh");
+        expected = "\"bleh\"";
+    }
+    shouldBe("foo(array)", expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-intrinsic-unused-this-expected.txt b/deps/v8/test/webkit/dfg-intrinsic-unused-this-expected.txt
new file mode 100644 (file)
index 0000000..dfebfbb
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that doing intrinsic function optimization does not result in this being lost entirely.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS baz(object, 0, 0) is 0
+PASS baz(object, 1, 2) is 2
+PASS baz(object, 2, 4) is 4
+PASS baz(object, 3, 6) is 6
+PASS baz(object, 4, 8) is 8
+PASS baz(object, 5, 10) is 10
+PASS baz(object, 6, 12) is 12
+PASS baz(object, 7, 14) is 14
+PASS baz(object, 8, 16) is 16
+PASS baz(object, 9, 18) is 18
+PASS baz(object, 10, 20) is 20
+PASS baz(object, 11, 22) is 22
+PASS baz(object, 12, 24) is 24
+PASS baz(object, 13, 26) is 26
+PASS baz(object, 14, 28) is 28
+PASS baz(object, 15, 30) is 30
+PASS baz(object, 16, 32) is 32
+PASS baz(object, 17, 34) is 34
+PASS baz(object, 18, 36) is 36
+PASS baz(object, 19, 38) is 38
+PASS baz(object, 20, 40) is 40
+PASS baz(object, 21, 42) is 42
+PASS baz(object, 22, 44) is 44
+PASS baz(object, 23, 46) is 46
+PASS baz(object, 24, 48) is 48
+PASS baz(object, 25, 50) is 50
+PASS baz(object, 26, 52) is 52
+PASS baz(object, 27, 54) is 54
+PASS baz(object, 28, 56) is 56
+PASS baz(object, 29, 58) is 58
+PASS baz(object, 30, 60) is 60
+PASS baz(object, 31, 62) is 62
+PASS baz(object, 32, 64) is 64
+PASS baz(object, 33, 66) is 66
+PASS baz(object, 34, 68) is 68
+PASS baz(object, 35, 70) is 70
+PASS baz(object, 36, 72) is 72
+PASS baz(object, 37, 74) is 74
+PASS baz(object, 38, 76) is 76
+PASS baz(object, 39, 78) is 78
+PASS baz(object, 40, 80) is 80
+PASS baz(object, 41, 82) is 82
+PASS baz(object, 42, 84) is 84
+PASS baz(object, 43, 86) is 86
+PASS baz(object, 44, 88) is 88
+PASS baz(object, 45, 90) is 90
+PASS baz(object, 46, 92) is 92
+PASS baz(object, 47, 94) is 94
+PASS baz(object, 48, 96) is 96
+PASS baz(object, 49, 98) is 98
+PASS baz(object, 50, 100) is 100
+PASS baz(object, 51, 102) is 102
+PASS baz(object, 52, 104) is 104
+PASS baz(object, 53, 106) is 106
+PASS baz(object, 54, 108) is 108
+PASS baz(object, 55, 110) is 110
+PASS baz(object, 56, 112) is 112
+PASS baz(object, 57, 114) is 114
+PASS baz(object, 58, 116) is 116
+PASS baz(object, 59, 118) is 118
+PASS baz(object, 60, 120) is 120
+PASS baz(object, 61, 122) is 122
+PASS baz(object, 62, 124) is 124
+PASS baz(object, 63, 126) is 126
+PASS baz(object, 64, 128) is 128
+PASS baz(object, 65, 130) is 130
+PASS baz(object, 66, 132) is 132
+PASS baz(object, 67, 134) is 134
+PASS baz(object, 68, 136) is 136
+PASS baz(object, 69, 138) is 138
+PASS baz(object, 70, 140) is 140
+PASS baz(object, 71, 142) is 142
+PASS baz(object, 72, 144) is 144
+PASS baz(object, 73, 146) is 146
+PASS baz(object, 74, 148) is 148
+PASS baz(object, 75, 150) is 150
+PASS baz(object, 76, 152) is 152
+PASS baz(object, 77, 154) is 154
+PASS baz(object, 78, 156) is 156
+PASS baz(object, 79, 158) is 158
+PASS baz(object, 80, 160) is 160
+PASS baz(object, 81, 162) is 162
+PASS baz(object, 82, 164) is 164
+PASS baz(object, 83, 166) is 166
+PASS baz(object, 84, 168) is 168
+PASS baz(object, 85, 170) is 170
+PASS baz(object, 86, 172) is 172
+PASS baz(object, 87, 174) is 174
+PASS baz(object, 88, 176) is 176
+PASS baz(object, 89, 178) is 178
+PASS baz(object, 90, 180) is 180
+PASS baz(object, 91, 182) is 182
+PASS baz(object, 92, 184) is 184
+PASS baz(object, 93, 186) is 186
+PASS baz(object, 94, 188) is 188
+PASS baz(object, 95, 190) is 190
+PASS baz(object, 96, 192) is 192
+PASS baz(object, 97, 194) is 194
+PASS baz(object, 98, 196) is 196
+PASS baz(object, 99, 198) is 198
+PASS baz(object, 100, 200) is 200
+PASS baz(object, 101, 202) is 202
+PASS baz(object, 102, 204) is 204
+PASS baz(object, 103, 206) is 206
+PASS baz(object, 104, 208) is 208
+PASS baz(object, 105, 210) is 210
+PASS baz(object, 106, 212) is 212
+PASS baz(object, 107, 214) is 214
+PASS baz(object, 108, 216) is 216
+PASS baz(object, 109, 218) is 218
+PASS baz(object, 110, 220) is 220
+PASS baz(object, 111, 222) is 222
+PASS baz(object, 112, 224) is 224
+PASS baz(object, 113, 226) is 226
+PASS baz(object, 114, 228) is 228
+PASS baz(object, 115, 230) is 230
+PASS baz(object, 116, 232) is 232
+PASS baz(object, 117, 234) is 234
+PASS baz(object, 118, 236) is 236
+PASS baz(object, 119, 238) is 238
+PASS baz(object, 120, 240) is 240
+PASS baz(object, 121, 242) is 242
+PASS baz(object, 122, 244) is 244
+PASS baz(object, 123, 246) is 246
+PASS baz(object, 124, 248) is 248
+PASS baz(object, 125, 250) is 250
+PASS baz(object, 126, 252) is 252
+PASS baz(object, 127, 254) is 254
+PASS baz(object, 128, 256) is 256
+PASS baz(object, 129, 258) is 258
+PASS baz(object, 130, 260) is 260
+PASS baz(object, 131, 262) is 262
+PASS baz(object, 132, 264) is 264
+PASS baz(object, 133, 266) is 266
+PASS baz(object, 134, 268) is 268
+PASS baz(object, 135, 270) is 270
+PASS baz(object, 136, 272) is 272
+PASS baz(object, 137, 274) is 274
+PASS baz(object, 138, 276) is 276
+PASS baz(object, 139, 278) is 278
+PASS baz(object, 140, 280) is 280
+PASS baz(object, 141, 282) is 282
+PASS baz(object, 142, 284) is 284
+PASS baz(object, 143, 286) is 286
+PASS baz(object, 144, 288) is 288
+PASS baz(object, 145, 290) is 290
+PASS baz(object, 146, 292) is 292
+PASS baz(object, 147, 294) is 294
+PASS baz(object, 148, 296) is 296
+PASS baz(object, 149, 298) is 298
+PASS baz(object, 150, 300) is 300
+PASS baz(object, 151, 302) is 302
+PASS baz(object, 152, 304) is 304
+PASS baz(object, 153, 306) is 306
+PASS baz(object, 154, 308) is 308
+PASS baz(object, 155, 310) is 310
+PASS baz(object, 156, 312) is 312
+PASS baz(object, 157, 314) is 314
+PASS baz(object, 158, 316) is 316
+PASS baz(object, 159, 318) is 318
+PASS baz(object, 160, 320) is 320
+PASS baz(object, 161, 322) is 322
+PASS baz(object, 162, 324) is 324
+PASS baz(object, 163, 326) is 326
+PASS baz(object, 164, 328) is 328
+PASS baz(object, 165, 330) is 330
+PASS baz(object, 166, 332) is 332
+PASS baz(object, 167, 334) is 334
+PASS baz(object, 168, 336) is 336
+PASS baz(object, 169, 338) is 338
+PASS baz(object, 170, 340) is 340
+PASS baz(object, 171, 342) is 342
+PASS baz(object, 172, 344) is 344
+PASS baz(object, 173, 346) is 346
+PASS baz(object, 174, 348) is 348
+PASS baz(object, 175, 350) is 350
+PASS baz(object, 176, 352) is 352
+PASS baz(object, 177, 354) is 354
+PASS baz(object, 178, 356) is 356
+PASS baz(object, 179, 358) is 358
+PASS baz(object, 180, 360) is 360
+PASS baz(object, 181, 362) is 362
+PASS baz(object, 182, 364) is 364
+PASS baz(object, 183, 366) is 366
+PASS baz(object, 184, 368) is 368
+PASS baz(object, 185, 370) is 370
+PASS baz(object, 186, 372) is 372
+PASS baz(object, 187, 374) is 374
+PASS baz(object, 188, 376) is 376
+PASS baz(object, 189, 378) is 378
+PASS baz(object, 190, 380) is 380
+PASS baz(object, 191, 382) is 382
+PASS baz(object, 192, 384) is 384
+PASS baz(object, 193, 386) is 386
+PASS baz(object, 194, 388) is 388
+PASS baz(object, 195, 390) is 390
+PASS baz(object, 196, 392) is 392
+PASS baz(object, 197, 394) is 394
+PASS baz(object, 198, 396) is 396
+PASS baz(object, 199, 398) is 398
+PASS baz(object, 200, 400) is 400
+PASS baz(object, 201, 402) is 402
+PASS baz(object, 202, 404) is 404
+PASS baz(object, 203, 406) is 406
+PASS baz(object, 204, 408) is 408
+PASS baz(object, 205, 410) is 410
+PASS baz(object, 206, 412) is 412
+PASS baz(object, 207, 414) is 414
+PASS baz(object, 208, 416) is 416
+PASS baz(object, 209, 418) is 418
+PASS baz(object, 210, 420) is 420
+PASS baz(object, 211, 422) is 422
+PASS baz(object, 212, 424) is 424
+PASS baz(object, 213, 426) is 426
+PASS baz(object, 214, 428) is 428
+PASS baz(object, 215, 430) is 430
+PASS baz(object, 216, 432) is 432
+PASS baz(object, 217, 434) is 434
+PASS baz(object, 218, 436) is 436
+PASS baz(object, 219, 438) is 438
+PASS baz(object, 220, 440) is 440
+PASS baz(object, 221, 442) is 442
+PASS baz(object, 222, 444) is 444
+PASS baz(object, 223, 446) is 446
+PASS baz(object, 224, 448) is 448
+PASS baz(object, 225, 450) is 450
+PASS baz(object, 226, 452) is 452
+PASS baz(object, 227, 454) is 454
+PASS baz(object, 228, 456) is 456
+PASS baz(object, 229, 458) is 458
+PASS baz(object, 230, 460) is 460
+PASS baz(object, 231, 462) is 462
+PASS baz(object, 232, 464) is 464
+PASS baz(object, 233, 466) is 466
+PASS baz(object, 234, 468) is 468
+PASS baz(object, 235, 470) is 470
+PASS baz(object, 236, 472) is 472
+PASS baz(object, 237, 474) is 474
+PASS baz(object, 238, 476) is 476
+PASS baz(object, 239, 478) is 478
+PASS baz(object, 240, 480) is 480
+PASS baz(object, 241, 482) is 482
+PASS baz(object, 242, 484) is 484
+PASS baz(object, 243, 486) is 486
+PASS baz(object, 244, 488) is 488
+PASS baz(object, 245, 490) is 490
+PASS baz(object, 246, 492) is 492
+PASS baz(object, 247, 494) is 494
+PASS baz(object, 248, 496) is 496
+PASS baz(object, 249, 498) is 498
+PASS baz(object, 250, 500) is 500
+PASS baz(object, 251, 502) is 502
+PASS baz(object, 252, 504) is 504
+PASS baz(object, 253, 506) is 506
+PASS baz(object, 254, 508) is 508
+PASS baz(object, 255, 510) is 510
+PASS baz(object, 256, 512) is 512
+PASS baz(object, 257, 514) is 514
+PASS baz(object, 258, 516) is 516
+PASS baz(object, 259, 518) is 518
+PASS baz(object, 260, 520) is 520
+PASS baz(object, 261, 522) is 522
+PASS baz(object, 262, 524) is 524
+PASS baz(object, 263, 526) is 526
+PASS baz(object, 264, 528) is 528
+PASS baz(object, 265, 530) is 530
+PASS baz(object, 266, 532) is 532
+PASS baz(object, 267, 534) is 534
+PASS baz(object, 268, 536) is 536
+PASS baz(object, 269, 538) is 538
+PASS baz(object, 270, 540) is 540
+PASS baz(object, 271, 542) is 542
+PASS baz(object, 272, 544) is 544
+PASS baz(object, 273, 546) is 546
+PASS baz(object, 274, 548) is 548
+PASS baz(object, 275, 550) is 550
+PASS baz(object, 276, 552) is 552
+PASS baz(object, 277, 554) is 554
+PASS baz(object, 278, 556) is 556
+PASS baz(object, 279, 558) is 558
+PASS baz(object, 280, 560) is 560
+PASS baz(object, 281, 562) is 562
+PASS baz(object, 282, 564) is 564
+PASS baz(object, 283, 566) is 566
+PASS baz(object, 284, 568) is 568
+PASS baz(object, 285, 570) is 570
+PASS baz(object, 286, 572) is 572
+PASS baz(object, 287, 574) is 574
+PASS baz(object, 288, 576) is 576
+PASS baz(object, 289, 578) is 578
+PASS baz(object, 290, 580) is 580
+PASS baz(object, 291, 582) is 582
+PASS baz(object, 292, 584) is 584
+PASS baz(object, 293, 586) is 586
+PASS baz(object, 294, 588) is 588
+PASS baz(object, 295, 590) is 590
+PASS baz(object, 296, 592) is 592
+PASS baz(object, 297, 594) is 594
+PASS baz(object, 298, 596) is 596
+PASS baz(object, 299, 598) is 598
+PASS baz(object, 300, 600) is 600
+PASS baz(object, 301, 602) is 602
+PASS baz(object, 302, 604) is 604
+PASS baz(object, 303, 606) is 606
+PASS baz(object, 304, 608) is 608
+PASS baz(object, 305, 610) is 610
+PASS baz(object, 306, 612) is 612
+PASS baz(object, 307, 614) is 614
+PASS baz(object, 308, 616) is 616
+PASS baz(object, 309, 618) is 618
+PASS baz(object, 310, 620) is 620
+PASS baz(object, 311, 622) is 622
+PASS baz(object, 312, 624) is 624
+PASS baz(object, 313, 626) is 626
+PASS baz(object, 314, 628) is 628
+PASS baz(object, 315, 630) is 630
+PASS baz(object, 316, 632) is 632
+PASS baz(object, 317, 634) is 634
+PASS baz(object, 318, 636) is 636
+PASS baz(object, 319, 638) is 638
+PASS baz(object, 320, 640) is 640
+PASS baz(object, 321, 642) is 642
+PASS baz(object, 322, 644) is 644
+PASS baz(object, 323, 646) is 646
+PASS baz(object, 324, 648) is 648
+PASS baz(object, 325, 650) is 650
+PASS baz(object, 326, 652) is 652
+PASS baz(object, 327, 654) is 654
+PASS baz(object, 328, 656) is 656
+PASS baz(object, 329, 658) is 658
+PASS baz(object, 330, 660) is 660
+PASS baz(object, 331, 662) is 662
+PASS baz(object, 332, 664) is 664
+PASS baz(object, 333, 666) is 666
+PASS baz(object, 334, 668) is 668
+PASS baz(object, 335, 670) is 670
+PASS baz(object, 336, 672) is 672
+PASS baz(object, 337, 674) is 674
+PASS baz(object, 338, 676) is 676
+PASS baz(object, 339, 678) is 678
+PASS baz(object, 340, 680) is 680
+PASS baz(object, 341, 682) is 682
+PASS baz(object, 342, 684) is 684
+PASS baz(object, 343, 686) is 686
+PASS baz(object, 344, 688) is 688
+PASS baz(object, 345, 690) is 690
+PASS baz(object, 346, 692) is 692
+PASS baz(object, 347, 694) is 694
+PASS baz(object, 348, 696) is 696
+PASS baz(object, 349, 698) is 698
+PASS baz(object, 350, 700) is 700
+PASS baz(object, 351, 702) is 702
+PASS baz(object, 352, 704) is 704
+PASS baz(object, 353, 706) is 706
+PASS baz(object, 354, 708) is 708
+PASS baz(object, 355, 710) is 710
+PASS baz(object, 356, 712) is 712
+PASS baz(object, 357, 714) is 714
+PASS baz(object, 358, 716) is 716
+PASS baz(object, 359, 718) is 718
+PASS baz(object, 360, 720) is 720
+PASS baz(object, 361, 722) is 722
+PASS baz(object, 362, 724) is 724
+PASS baz(object, 363, 726) is 726
+PASS baz(object, 364, 728) is 728
+PASS baz(object, 365, 730) is 730
+PASS baz(object, 366, 732) is 732
+PASS baz(object, 367, 734) is 734
+PASS baz(object, 368, 736) is 736
+PASS baz(object, 369, 738) is 738
+PASS baz(object, 370, 740) is 740
+PASS baz(object, 371, 742) is 742
+PASS baz(object, 372, 744) is 744
+PASS baz(object, 373, 746) is 746
+PASS baz(object, 374, 748) is 748
+PASS baz(object, 375, 750) is 750
+PASS baz(object, 376, 752) is 752
+PASS baz(object, 377, 754) is 754
+PASS baz(object, 378, 756) is 756
+PASS baz(object, 379, 758) is 758
+PASS baz(object, 380, 760) is 760
+PASS baz(object, 381, 762) is 762
+PASS baz(object, 382, 764) is 764
+PASS baz(object, 383, 766) is 766
+PASS baz(object, 384, 768) is 768
+PASS baz(object, 385, 770) is 770
+PASS baz(object, 386, 772) is 772
+PASS baz(object, 387, 774) is 774
+PASS baz(object, 388, 776) is 776
+PASS baz(object, 389, 778) is 778
+PASS baz(object, 390, 780) is 780
+PASS baz(object, 391, 782) is 782
+PASS baz(object, 392, 784) is 784
+PASS baz(object, 393, 786) is 786
+PASS baz(object, 394, 788) is 788
+PASS baz(object, 395, 790) is 790
+PASS baz(object, 396, 792) is 792
+PASS baz(object, 397, 794) is 794
+PASS baz(object, 398, 796) is 796
+PASS baz(object, 399, 798) is 798
+PASS baz(object, 400, 800) is 800
+PASS baz(object, 401, 802) is 802
+PASS baz(object, 402, 804) is 804
+PASS baz(object, 403, 806) is 806
+PASS baz(object, 404, 808) is 808
+PASS baz(object, 405, 810) is 810
+PASS baz(object, 406, 812) is 812
+PASS baz(object, 407, 814) is 814
+PASS baz(object, 408, 816) is 816
+PASS baz(object, 409, 818) is 818
+PASS baz(object, 410, 820) is 820
+PASS baz(object, 411, 822) is 822
+PASS baz(object, 412, 824) is 824
+PASS baz(object, 413, 826) is 826
+PASS baz(object, 414, 828) is 828
+PASS baz(object, 415, 830) is 830
+PASS baz(object, 416, 832) is 832
+PASS baz(object, 417, 834) is 834
+PASS baz(object, 418, 836) is 836
+PASS baz(object, 419, 838) is 838
+PASS baz(object, 420, 840) is 840
+PASS baz(object, 421, 842) is 842
+PASS baz(object, 422, 844) is 844
+PASS baz(object, 423, 846) is 846
+PASS baz(object, 424, 848) is 848
+PASS baz(object, 425, 850) is 850
+PASS baz(object, 426, 852) is 852
+PASS baz(object, 427, 854) is 854
+PASS baz(object, 428, 856) is 856
+PASS baz(object, 429, 858) is 858
+PASS baz(object, 430, 860) is 860
+PASS baz(object, 431, 862) is 862
+PASS baz(object, 432, 864) is 864
+PASS baz(object, 433, 866) is 866
+PASS baz(object, 434, 868) is 868
+PASS baz(object, 435, 870) is 870
+PASS baz(object, 436, 872) is 872
+PASS baz(object, 437, 874) is 874
+PASS baz(object, 438, 876) is 876
+PASS baz(object, 439, 878) is 878
+PASS baz(object, 440, 880) is 880
+PASS baz(object, 441, 882) is 882
+PASS baz(object, 442, 884) is 884
+PASS baz(object, 443, 886) is 886
+PASS baz(object, 444, 888) is 888
+PASS baz(object, 445, 890) is 890
+PASS baz(object, 446, 892) is 892
+PASS baz(object, 447, 894) is 894
+PASS baz(object, 448, 896) is 896
+PASS baz(object, 449, 898) is 898
+PASS baz(object, 450, 900) is 900
+PASS baz(object, 451, 902) is 902
+PASS baz(object, 452, 904) is 904
+PASS baz(object, 453, 906) is 906
+PASS baz(object, 454, 908) is 908
+PASS baz(object, 455, 910) is 910
+PASS baz(object, 456, 912) is 912
+PASS baz(object, 457, 914) is 914
+PASS baz(object, 458, 916) is 916
+PASS baz(object, 459, 918) is 918
+PASS baz(object, 460, 920) is 920
+PASS baz(object, 461, 922) is 922
+PASS baz(object, 462, 924) is 924
+PASS baz(object, 463, 926) is 926
+PASS baz(object, 464, 928) is 928
+PASS baz(object, 465, 930) is 930
+PASS baz(object, 466, 932) is 932
+PASS baz(object, 467, 934) is 934
+PASS baz(object, 468, 936) is 936
+PASS baz(object, 469, 938) is 938
+PASS baz(object, 470, 940) is 940
+PASS baz(object, 471, 942) is 942
+PASS baz(object, 472, 944) is 944
+PASS baz(object, 473, 946) is 946
+PASS baz(object, 474, 948) is 948
+PASS baz(object, 475, 950) is 950
+PASS baz(object, 476, 952) is 952
+PASS baz(object, 477, 954) is 954
+PASS baz(object, 478, 956) is 956
+PASS baz(object, 479, 958) is 958
+PASS baz(object, 480, 960) is 960
+PASS baz(object, 481, 962) is 962
+PASS baz(object, 482, 964) is 964
+PASS baz(object, 483, 966) is 966
+PASS baz(object, 484, 968) is 968
+PASS baz(object, 485, 970) is 970
+PASS baz(object, 486, 972) is 972
+PASS baz(object, 487, 974) is 974
+PASS baz(object, 488, 976) is 976
+PASS baz(object, 489, 978) is 978
+PASS baz(object, 490, 980) is 980
+PASS baz(object, 491, 982) is 982
+PASS baz(object, 492, 984) is 984
+PASS baz(object, 493, 986) is 986
+PASS baz(object, 494, 988) is 988
+PASS baz(object, 495, 990) is 990
+PASS baz(object, 496, 992) is 992
+PASS baz(object, 497, 994) is 994
+PASS baz(object, 498, 996) is 996
+PASS baz(object, 499, 998) is 998
+PASS baz(object, 500, 1000) is 1000
+PASS baz(object, 501, 1002) is 1002
+PASS baz(object, 502, 1004) is 1004
+PASS baz(object, 503, 1006) is 1006
+PASS baz(object, 504, 1008) is 1008
+PASS baz(object, 505, 1010) is 1010
+PASS baz(object, 506, 1012) is 1012
+PASS baz(object, 507, 1014) is 1014
+PASS baz(object, 508, 1016) is 1016
+PASS baz(object, 509, 1018) is 1018
+PASS baz(object, 510, 1020) is 1020
+PASS baz(object, 511, 1022) is 1022
+PASS baz(object, 512, 1024) is 1024
+PASS baz(object, 513, 1026) is 1026
+PASS baz(object, 514, 1028) is 1028
+PASS baz(object, 515, 1030) is 1030
+PASS baz(object, 516, 1032) is 1032
+PASS baz(object, 517, 1034) is 1034
+PASS baz(object, 518, 1036) is 1036
+PASS baz(object, 519, 1038) is 1038
+PASS baz(object, 520, 1040) is 1040
+PASS baz(object, 521, 1042) is 1042
+PASS baz(object, 522, 1044) is 1044
+PASS baz(object, 523, 1046) is 1046
+PASS baz(object, 524, 1048) is 1048
+PASS baz(object, 525, 1050) is 1050
+PASS baz(object, 526, 1052) is 1052
+PASS baz(object, 527, 1054) is 1054
+PASS baz(object, 528, 1056) is 1056
+PASS baz(object, 529, 1058) is 1058
+PASS baz(object, 530, 1060) is 1060
+PASS baz(object, 531, 1062) is 1062
+PASS baz(object, 532, 1064) is 1064
+PASS baz(object, 533, 1066) is 1066
+PASS baz(object, 534, 1068) is 1068
+PASS baz(object, 535, 1070) is 1070
+PASS baz(object, 536, 1072) is 1072
+PASS baz(object, 537, 1074) is 1074
+PASS baz(object, 538, 1076) is 1076
+PASS baz(object, 539, 1078) is 1078
+PASS baz(object, 540, 1080) is 1080
+PASS baz(object, 541, 1082) is 1082
+PASS baz(object, 542, 1084) is 1084
+PASS baz(object, 543, 1086) is 1086
+PASS baz(object, 544, 1088) is 1088
+PASS baz(object, 545, 1090) is 1090
+PASS baz(object, 546, 1092) is 1092
+PASS baz(object, 547, 1094) is 1094
+PASS baz(object, 548, 1096) is 1096
+PASS baz(object, 549, 1098) is 1098
+PASS baz(object, 550, 1100) is 1100
+PASS baz(object, 551, 1102) is 1102
+PASS baz(object, 552, 1104) is 1104
+PASS baz(object, 553, 1106) is 1106
+PASS baz(object, 554, 1108) is 1108
+PASS baz(object, 555, 1110) is 1110
+PASS baz(object, 556, 1112) is 1112
+PASS baz(object, 557, 1114) is 1114
+PASS baz(object, 558, 1116) is 1116
+PASS baz(object, 559, 1118) is 1118
+PASS baz(object, 560, 1120) is 1120
+PASS baz(object, 561, 1122) is 1122
+PASS baz(object, 562, 1124) is 1124
+PASS baz(object, 563, 1126) is 1126
+PASS baz(object, 564, 1128) is 1128
+PASS baz(object, 565, 1130) is 1130
+PASS baz(object, 566, 1132) is 1132
+PASS baz(object, 567, 1134) is 1134
+PASS baz(object, 568, 1136) is 1136
+PASS baz(object, 569, 1138) is 1138
+PASS baz(object, 570, 1140) is 1140
+PASS baz(object, 571, 1142) is 1142
+PASS baz(object, 572, 1144) is 1144
+PASS baz(object, 573, 1146) is 1146
+PASS baz(object, 574, 1148) is 1148
+PASS baz(object, 575, 1150) is 1150
+PASS baz(object, 576, 1152) is 1152
+PASS baz(object, 577, 1154) is 1154
+PASS baz(object, 578, 1156) is 1156
+PASS baz(object, 579, 1158) is 1158
+PASS baz(object, 580, 1160) is 1160
+PASS baz(object, 581, 1162) is 1162
+PASS baz(object, 582, 1164) is 1164
+PASS baz(object, 583, 1166) is 1166
+PASS baz(object, 584, 1168) is 1168
+PASS baz(object, 585, 1170) is 1170
+PASS baz(object, 586, 1172) is 1172
+PASS baz(object, 587, 1174) is 1174
+PASS baz(object, 588, 1176) is 1176
+PASS baz(object, 589, 1178) is 1178
+PASS baz(object, 590, 1180) is 1180
+PASS baz(object, 591, 1182) is 1182
+PASS baz(object, 592, 1184) is 1184
+PASS baz(object, 593, 1186) is 1186
+PASS baz(object, 594, 1188) is 1188
+PASS baz(object, 595, 1190) is 1190
+PASS baz(object, 596, 1192) is 1192
+PASS baz(object, 597, 1194) is 1194
+PASS baz(object, 598, 1196) is 1196
+PASS baz(object, 599, 1198) is 1198
+PASS baz(object, 600, 1200) is 1242
+PASS baz(object, 601, 1202) is 1244
+PASS baz(object, 602, 1204) is 1246
+PASS baz(object, 603, 1206) is 1248
+PASS baz(object, 604, 1208) is 1250
+PASS baz(object, 605, 1210) is 1252
+PASS baz(object, 606, 1212) is 1254
+PASS baz(object, 607, 1214) is 1256
+PASS baz(object, 608, 1216) is 1258
+PASS baz(object, 609, 1218) is 1260
+PASS baz(object, 610, 1220) is 1262
+PASS baz(object, 611, 1222) is 1264
+PASS baz(object, 612, 1224) is 1266
+PASS baz(object, 613, 1226) is 1268
+PASS baz(object, 614, 1228) is 1270
+PASS baz(object, 615, 1230) is 1272
+PASS baz(object, 616, 1232) is 1274
+PASS baz(object, 617, 1234) is 1276
+PASS baz(object, 618, 1236) is 1278
+PASS baz(object, 619, 1238) is 1280
+PASS baz(object, 620, 1240) is 1282
+PASS baz(object, 621, 1242) is 1284
+PASS baz(object, 622, 1244) is 1286
+PASS baz(object, 623, 1246) is 1288
+PASS baz(object, 624, 1248) is 1290
+PASS baz(object, 625, 1250) is 1292
+PASS baz(object, 626, 1252) is 1294
+PASS baz(object, 627, 1254) is 1296
+PASS baz(object, 628, 1256) is 1298
+PASS baz(object, 629, 1258) is 1300
+PASS baz(object, 630, 1260) is 1302
+PASS baz(object, 631, 1262) is 1304
+PASS baz(object, 632, 1264) is 1306
+PASS baz(object, 633, 1266) is 1308
+PASS baz(object, 634, 1268) is 1310
+PASS baz(object, 635, 1270) is 1312
+PASS baz(object, 636, 1272) is 1314
+PASS baz(object, 637, 1274) is 1316
+PASS baz(object, 638, 1276) is 1318
+PASS baz(object, 639, 1278) is 1320
+PASS baz(object, 640, 1280) is 1322
+PASS baz(object, 641, 1282) is 1324
+PASS baz(object, 642, 1284) is 1326
+PASS baz(object, 643, 1286) is 1328
+PASS baz(object, 644, 1288) is 1330
+PASS baz(object, 645, 1290) is 1332
+PASS baz(object, 646, 1292) is 1334
+PASS baz(object, 647, 1294) is 1336
+PASS baz(object, 648, 1296) is 1338
+PASS baz(object, 649, 1298) is 1340
+PASS baz(object, 650, 1300) is 1342
+PASS baz(object, 651, 1302) is 1344
+PASS baz(object, 652, 1304) is 1346
+PASS baz(object, 653, 1306) is 1348
+PASS baz(object, 654, 1308) is 1350
+PASS baz(object, 655, 1310) is 1352
+PASS baz(object, 656, 1312) is 1354
+PASS baz(object, 657, 1314) is 1356
+PASS baz(object, 658, 1316) is 1358
+PASS baz(object, 659, 1318) is 1360
+PASS baz(object, 660, 1320) is 1362
+PASS baz(object, 661, 1322) is 1364
+PASS baz(object, 662, 1324) is 1366
+PASS baz(object, 663, 1326) is 1368
+PASS baz(object, 664, 1328) is 1370
+PASS baz(object, 665, 1330) is 1372
+PASS baz(object, 666, 1332) is 1374
+PASS baz(object, 667, 1334) is 1376
+PASS baz(object, 668, 1336) is 1378
+PASS baz(object, 669, 1338) is 1380
+PASS baz(object, 670, 1340) is 1382
+PASS baz(object, 671, 1342) is 1384
+PASS baz(object, 672, 1344) is 1386
+PASS baz(object, 673, 1346) is 1388
+PASS baz(object, 674, 1348) is 1390
+PASS baz(object, 675, 1350) is 1392
+PASS baz(object, 676, 1352) is 1394
+PASS baz(object, 677, 1354) is 1396
+PASS baz(object, 678, 1356) is 1398
+PASS baz(object, 679, 1358) is 1400
+PASS baz(object, 680, 1360) is 1402
+PASS baz(object, 681, 1362) is 1404
+PASS baz(object, 682, 1364) is 1406
+PASS baz(object, 683, 1366) is 1408
+PASS baz(object, 684, 1368) is 1410
+PASS baz(object, 685, 1370) is 1412
+PASS baz(object, 686, 1372) is 1414
+PASS baz(object, 687, 1374) is 1416
+PASS baz(object, 688, 1376) is 1418
+PASS baz(object, 689, 1378) is 1420
+PASS baz(object, 690, 1380) is 1422
+PASS baz(object, 691, 1382) is 1424
+PASS baz(object, 692, 1384) is 1426
+PASS baz(object, 693, 1386) is 1428
+PASS baz(object, 694, 1388) is 1430
+PASS baz(object, 695, 1390) is 1432
+PASS baz(object, 696, 1392) is 1434
+PASS baz(object, 697, 1394) is 1436
+PASS baz(object, 698, 1396) is 1438
+PASS baz(object, 699, 1398) is 1440
+PASS baz(object, 700, 1400) is 1442
+PASS baz(object, 701, 1402) is 1444
+PASS baz(object, 702, 1404) is 1446
+PASS baz(object, 703, 1406) is 1448
+PASS baz(object, 704, 1408) is 1450
+PASS baz(object, 705, 1410) is 1452
+PASS baz(object, 706, 1412) is 1454
+PASS baz(object, 707, 1414) is 1456
+PASS baz(object, 708, 1416) is 1458
+PASS baz(object, 709, 1418) is 1460
+PASS baz(object, 710, 1420) is 1462
+PASS baz(object, 711, 1422) is 1464
+PASS baz(object, 712, 1424) is 1466
+PASS baz(object, 713, 1426) is 1468
+PASS baz(object, 714, 1428) is 1470
+PASS baz(object, 715, 1430) is 1472
+PASS baz(object, 716, 1432) is 1474
+PASS baz(object, 717, 1434) is 1476
+PASS baz(object, 718, 1436) is 1478
+PASS baz(object, 719, 1438) is 1480
+PASS baz(object, 720, 1440) is 1482
+PASS baz(object, 721, 1442) is 1484
+PASS baz(object, 722, 1444) is 1486
+PASS baz(object, 723, 1446) is 1488
+PASS baz(object, 724, 1448) is 1490
+PASS baz(object, 725, 1450) is 1492
+PASS baz(object, 726, 1452) is 1494
+PASS baz(object, 727, 1454) is 1496
+PASS baz(object, 728, 1456) is 1498
+PASS baz(object, 729, 1458) is 1500
+PASS baz(object, 730, 1460) is 1502
+PASS baz(object, 731, 1462) is 1504
+PASS baz(object, 732, 1464) is 1506
+PASS baz(object, 733, 1466) is 1508
+PASS baz(object, 734, 1468) is 1510
+PASS baz(object, 735, 1470) is 1512
+PASS baz(object, 736, 1472) is 1514
+PASS baz(object, 737, 1474) is 1516
+PASS baz(object, 738, 1476) is 1518
+PASS baz(object, 739, 1478) is 1520
+PASS baz(object, 740, 1480) is 1522
+PASS baz(object, 741, 1482) is 1524
+PASS baz(object, 742, 1484) is 1526
+PASS baz(object, 743, 1486) is 1528
+PASS baz(object, 744, 1488) is 1530
+PASS baz(object, 745, 1490) is 1532
+PASS baz(object, 746, 1492) is 1534
+PASS baz(object, 747, 1494) is 1536
+PASS baz(object, 748, 1496) is 1538
+PASS baz(object, 749, 1498) is 1540
+PASS baz(object, 750, 1500) is 1542
+PASS baz(object, 751, 1502) is 1544
+PASS baz(object, 752, 1504) is 1546
+PASS baz(object, 753, 1506) is 1548
+PASS baz(object, 754, 1508) is 1550
+PASS baz(object, 755, 1510) is 1552
+PASS baz(object, 756, 1512) is 1554
+PASS baz(object, 757, 1514) is 1556
+PASS baz(object, 758, 1516) is 1558
+PASS baz(object, 759, 1518) is 1560
+PASS baz(object, 760, 1520) is 1562
+PASS baz(object, 761, 1522) is 1564
+PASS baz(object, 762, 1524) is 1566
+PASS baz(object, 763, 1526) is 1568
+PASS baz(object, 764, 1528) is 1570
+PASS baz(object, 765, 1530) is 1572
+PASS baz(object, 766, 1532) is 1574
+PASS baz(object, 767, 1534) is 1576
+PASS baz(object, 768, 1536) is 1578
+PASS baz(object, 769, 1538) is 1580
+PASS baz(object, 770, 1540) is 1582
+PASS baz(object, 771, 1542) is 1584
+PASS baz(object, 772, 1544) is 1586
+PASS baz(object, 773, 1546) is 1588
+PASS baz(object, 774, 1548) is 1590
+PASS baz(object, 775, 1550) is 1592
+PASS baz(object, 776, 1552) is 1594
+PASS baz(object, 777, 1554) is 1596
+PASS baz(object, 778, 1556) is 1598
+PASS baz(object, 779, 1558) is 1600
+PASS baz(object, 780, 1560) is 1602
+PASS baz(object, 781, 1562) is 1604
+PASS baz(object, 782, 1564) is 1606
+PASS baz(object, 783, 1566) is 1608
+PASS baz(object, 784, 1568) is 1610
+PASS baz(object, 785, 1570) is 1612
+PASS baz(object, 786, 1572) is 1614
+PASS baz(object, 787, 1574) is 1616
+PASS baz(object, 788, 1576) is 1618
+PASS baz(object, 789, 1578) is 1620
+PASS baz(object, 790, 1580) is 1622
+PASS baz(object, 791, 1582) is 1624
+PASS baz(object, 792, 1584) is 1626
+PASS baz(object, 793, 1586) is 1628
+PASS baz(object, 794, 1588) is 1630
+PASS baz(object, 795, 1590) is 1632
+PASS baz(object, 796, 1592) is 1634
+PASS baz(object, 797, 1594) is 1636
+PASS baz(object, 798, 1596) is 1638
+PASS baz(object, 799, 1598) is 1640
+PASS baz(object, 800, 1600) is 1642
+PASS baz(object, 801, 1602) is 1644
+PASS baz(object, 802, 1604) is 1646
+PASS baz(object, 803, 1606) is 1648
+PASS baz(object, 804, 1608) is 1650
+PASS baz(object, 805, 1610) is 1652
+PASS baz(object, 806, 1612) is 1654
+PASS baz(object, 807, 1614) is 1656
+PASS baz(object, 808, 1616) is 1658
+PASS baz(object, 809, 1618) is 1660
+PASS baz(object, 810, 1620) is 1662
+PASS baz(object, 811, 1622) is 1664
+PASS baz(object, 812, 1624) is 1666
+PASS baz(object, 813, 1626) is 1668
+PASS baz(object, 814, 1628) is 1670
+PASS baz(object, 815, 1630) is 1672
+PASS baz(object, 816, 1632) is 1674
+PASS baz(object, 817, 1634) is 1676
+PASS baz(object, 818, 1636) is 1678
+PASS baz(object, 819, 1638) is 1680
+PASS baz(object, 820, 1640) is 1682
+PASS baz(object, 821, 1642) is 1684
+PASS baz(object, 822, 1644) is 1686
+PASS baz(object, 823, 1646) is 1688
+PASS baz(object, 824, 1648) is 1690
+PASS baz(object, 825, 1650) is 1692
+PASS baz(object, 826, 1652) is 1694
+PASS baz(object, 827, 1654) is 1696
+PASS baz(object, 828, 1656) is 1698
+PASS baz(object, 829, 1658) is 1700
+PASS baz(object, 830, 1660) is 1702
+PASS baz(object, 831, 1662) is 1704
+PASS baz(object, 832, 1664) is 1706
+PASS baz(object, 833, 1666) is 1708
+PASS baz(object, 834, 1668) is 1710
+PASS baz(object, 835, 1670) is 1712
+PASS baz(object, 836, 1672) is 1714
+PASS baz(object, 837, 1674) is 1716
+PASS baz(object, 838, 1676) is 1718
+PASS baz(object, 839, 1678) is 1720
+PASS baz(object, 840, 1680) is 1722
+PASS baz(object, 841, 1682) is 1724
+PASS baz(object, 842, 1684) is 1726
+PASS baz(object, 843, 1686) is 1728
+PASS baz(object, 844, 1688) is 1730
+PASS baz(object, 845, 1690) is 1732
+PASS baz(object, 846, 1692) is 1734
+PASS baz(object, 847, 1694) is 1736
+PASS baz(object, 848, 1696) is 1738
+PASS baz(object, 849, 1698) is 1740
+PASS baz(object, 850, 1700) is 1742
+PASS baz(object, 851, 1702) is 1744
+PASS baz(object, 852, 1704) is 1746
+PASS baz(object, 853, 1706) is 1748
+PASS baz(object, 854, 1708) is 1750
+PASS baz(object, 855, 1710) is 1752
+PASS baz(object, 856, 1712) is 1754
+PASS baz(object, 857, 1714) is 1756
+PASS baz(object, 858, 1716) is 1758
+PASS baz(object, 859, 1718) is 1760
+PASS baz(object, 860, 1720) is 1762
+PASS baz(object, 861, 1722) is 1764
+PASS baz(object, 862, 1724) is 1766
+PASS baz(object, 863, 1726) is 1768
+PASS baz(object, 864, 1728) is 1770
+PASS baz(object, 865, 1730) is 1772
+PASS baz(object, 866, 1732) is 1774
+PASS baz(object, 867, 1734) is 1776
+PASS baz(object, 868, 1736) is 1778
+PASS baz(object, 869, 1738) is 1780
+PASS baz(object, 870, 1740) is 1782
+PASS baz(object, 871, 1742) is 1784
+PASS baz(object, 872, 1744) is 1786
+PASS baz(object, 873, 1746) is 1788
+PASS baz(object, 874, 1748) is 1790
+PASS baz(object, 875, 1750) is 1792
+PASS baz(object, 876, 1752) is 1794
+PASS baz(object, 877, 1754) is 1796
+PASS baz(object, 878, 1756) is 1798
+PASS baz(object, 879, 1758) is 1800
+PASS baz(object, 880, 1760) is 1802
+PASS baz(object, 881, 1762) is 1804
+PASS baz(object, 882, 1764) is 1806
+PASS baz(object, 883, 1766) is 1808
+PASS baz(object, 884, 1768) is 1810
+PASS baz(object, 885, 1770) is 1812
+PASS baz(object, 886, 1772) is 1814
+PASS baz(object, 887, 1774) is 1816
+PASS baz(object, 888, 1776) is 1818
+PASS baz(object, 889, 1778) is 1820
+PASS baz(object, 890, 1780) is 1822
+PASS baz(object, 891, 1782) is 1824
+PASS baz(object, 892, 1784) is 1826
+PASS baz(object, 893, 1786) is 1828
+PASS baz(object, 894, 1788) is 1830
+PASS baz(object, 895, 1790) is 1832
+PASS baz(object, 896, 1792) is 1834
+PASS baz(object, 897, 1794) is 1836
+PASS baz(object, 898, 1796) is 1838
+PASS baz(object, 899, 1798) is 1840
+PASS baz(object, 900, 1800) is 1842
+PASS baz(object, 901, 1802) is 1844
+PASS baz(object, 902, 1804) is 1846
+PASS baz(object, 903, 1806) is 1848
+PASS baz(object, 904, 1808) is 1850
+PASS baz(object, 905, 1810) is 1852
+PASS baz(object, 906, 1812) is 1854
+PASS baz(object, 907, 1814) is 1856
+PASS baz(object, 908, 1816) is 1858
+PASS baz(object, 909, 1818) is 1860
+PASS baz(object, 910, 1820) is 1862
+PASS baz(object, 911, 1822) is 1864
+PASS baz(object, 912, 1824) is 1866
+PASS baz(object, 913, 1826) is 1868
+PASS baz(object, 914, 1828) is 1870
+PASS baz(object, 915, 1830) is 1872
+PASS baz(object, 916, 1832) is 1874
+PASS baz(object, 917, 1834) is 1876
+PASS baz(object, 918, 1836) is 1878
+PASS baz(object, 919, 1838) is 1880
+PASS baz(object, 920, 1840) is 1882
+PASS baz(object, 921, 1842) is 1884
+PASS baz(object, 922, 1844) is 1886
+PASS baz(object, 923, 1846) is 1888
+PASS baz(object, 924, 1848) is 1890
+PASS baz(object, 925, 1850) is 1892
+PASS baz(object, 926, 1852) is 1894
+PASS baz(object, 927, 1854) is 1896
+PASS baz(object, 928, 1856) is 1898
+PASS baz(object, 929, 1858) is 1900
+PASS baz(object, 930, 1860) is 1902
+PASS baz(object, 931, 1862) is 1904
+PASS baz(object, 932, 1864) is 1906
+PASS baz(object, 933, 1866) is 1908
+PASS baz(object, 934, 1868) is 1910
+PASS baz(object, 935, 1870) is 1912
+PASS baz(object, 936, 1872) is 1914
+PASS baz(object, 937, 1874) is 1916
+PASS baz(object, 938, 1876) is 1918
+PASS baz(object, 939, 1878) is 1920
+PASS baz(object, 940, 1880) is 1922
+PASS baz(object, 941, 1882) is 1924
+PASS baz(object, 942, 1884) is 1926
+PASS baz(object, 943, 1886) is 1928
+PASS baz(object, 944, 1888) is 1930
+PASS baz(object, 945, 1890) is 1932
+PASS baz(object, 946, 1892) is 1934
+PASS baz(object, 947, 1894) is 1936
+PASS baz(object, 948, 1896) is 1938
+PASS baz(object, 949, 1898) is 1940
+PASS baz(object, 950, 1900) is 1942
+PASS baz(object, 951, 1902) is 1944
+PASS baz(object, 952, 1904) is 1946
+PASS baz(object, 953, 1906) is 1948
+PASS baz(object, 954, 1908) is 1950
+PASS baz(object, 955, 1910) is 1952
+PASS baz(object, 956, 1912) is 1954
+PASS baz(object, 957, 1914) is 1956
+PASS baz(object, 958, 1916) is 1958
+PASS baz(object, 959, 1918) is 1960
+PASS baz(object, 960, 1920) is 1962
+PASS baz(object, 961, 1922) is 1964
+PASS baz(object, 962, 1924) is 1966
+PASS baz(object, 963, 1926) is 1968
+PASS baz(object, 964, 1928) is 1970
+PASS baz(object, 965, 1930) is 1972
+PASS baz(object, 966, 1932) is 1974
+PASS baz(object, 967, 1934) is 1976
+PASS baz(object, 968, 1936) is 1978
+PASS baz(object, 969, 1938) is 1980
+PASS baz(object, 970, 1940) is 1982
+PASS baz(object, 971, 1942) is 1984
+PASS baz(object, 972, 1944) is 1986
+PASS baz(object, 973, 1946) is 1988
+PASS baz(object, 974, 1948) is 1990
+PASS baz(object, 975, 1950) is 1992
+PASS baz(object, 976, 1952) is 1994
+PASS baz(object, 977, 1954) is 1996
+PASS baz(object, 978, 1956) is 1998
+PASS baz(object, 979, 1958) is 2000
+PASS baz(object, 980, 1960) is 2002
+PASS baz(object, 981, 1962) is 2004
+PASS baz(object, 982, 1964) is 2006
+PASS baz(object, 983, 1966) is 2008
+PASS baz(object, 984, 1968) is 2010
+PASS baz(object, 985, 1970) is 2012
+PASS baz(object, 986, 1972) is 2014
+PASS baz(object, 987, 1974) is 2016
+PASS baz(object, 988, 1976) is 2018
+PASS baz(object, 989, 1978) is 2020
+PASS baz(object, 990, 1980) is 2022
+PASS baz(object, 991, 1982) is 2024
+PASS baz(object, 992, 1984) is 2026
+PASS baz(object, 993, 1986) is 2028
+PASS baz(object, 994, 1988) is 2030
+PASS baz(object, 995, 1990) is 2032
+PASS baz(object, 996, 1992) is 2034
+PASS baz(object, 997, 1994) is 2036
+PASS baz(object, 998, 1996) is 2038
+PASS baz(object, 999, 1998) is 2040
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-intrinsic-unused-this-method-check-expected.txt b/deps/v8/test/webkit/dfg-intrinsic-unused-this-method-check-expected.txt
new file mode 100644 (file)
index 0000000..dc62c0b
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that doing intrinsic function optimization does not result in this being lost entirely, if method check optimizations succeed.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS baz(object, 0, 0) is 0
+PASS baz(object, 1, 2) is 2
+PASS baz(object, 2, 4) is 4
+PASS baz(object, 3, 6) is 6
+PASS baz(object, 4, 8) is 8
+PASS baz(object, 5, 10) is 10
+PASS baz(object, 6, 12) is 12
+PASS baz(object, 7, 14) is 14
+PASS baz(object, 8, 16) is 16
+PASS baz(object, 9, 18) is 18
+PASS baz(object, 10, 20) is 20
+PASS baz(object, 11, 22) is 22
+PASS baz(object, 12, 24) is 24
+PASS baz(object, 13, 26) is 26
+PASS baz(object, 14, 28) is 28
+PASS baz(object, 15, 30) is 30
+PASS baz(object, 16, 32) is 32
+PASS baz(object, 17, 34) is 34
+PASS baz(object, 18, 36) is 36
+PASS baz(object, 19, 38) is 38
+PASS baz(object, 20, 40) is 40
+PASS baz(object, 21, 42) is 42
+PASS baz(object, 22, 44) is 44
+PASS baz(object, 23, 46) is 46
+PASS baz(object, 24, 48) is 48
+PASS baz(object, 25, 50) is 50
+PASS baz(object, 26, 52) is 52
+PASS baz(object, 27, 54) is 54
+PASS baz(object, 28, 56) is 56
+PASS baz(object, 29, 58) is 58
+PASS baz(object, 30, 60) is 60
+PASS baz(object, 31, 62) is 62
+PASS baz(object, 32, 64) is 64
+PASS baz(object, 33, 66) is 66
+PASS baz(object, 34, 68) is 68
+PASS baz(object, 35, 70) is 70
+PASS baz(object, 36, 72) is 72
+PASS baz(object, 37, 74) is 74
+PASS baz(object, 38, 76) is 76
+PASS baz(object, 39, 78) is 78
+PASS baz(object, 40, 80) is 80
+PASS baz(object, 41, 82) is 82
+PASS baz(object, 42, 84) is 84
+PASS baz(object, 43, 86) is 86
+PASS baz(object, 44, 88) is 88
+PASS baz(object, 45, 90) is 90
+PASS baz(object, 46, 92) is 92
+PASS baz(object, 47, 94) is 94
+PASS baz(object, 48, 96) is 96
+PASS baz(object, 49, 98) is 98
+PASS baz(object, 50, 100) is 100
+PASS baz(object, 51, 102) is 102
+PASS baz(object, 52, 104) is 104
+PASS baz(object, 53, 106) is 106
+PASS baz(object, 54, 108) is 108
+PASS baz(object, 55, 110) is 110
+PASS baz(object, 56, 112) is 112
+PASS baz(object, 57, 114) is 114
+PASS baz(object, 58, 116) is 116
+PASS baz(object, 59, 118) is 118
+PASS baz(object, 60, 120) is 120
+PASS baz(object, 61, 122) is 122
+PASS baz(object, 62, 124) is 124
+PASS baz(object, 63, 126) is 126
+PASS baz(object, 64, 128) is 128
+PASS baz(object, 65, 130) is 130
+PASS baz(object, 66, 132) is 132
+PASS baz(object, 67, 134) is 134
+PASS baz(object, 68, 136) is 136
+PASS baz(object, 69, 138) is 138
+PASS baz(object, 70, 140) is 140
+PASS baz(object, 71, 142) is 142
+PASS baz(object, 72, 144) is 144
+PASS baz(object, 73, 146) is 146
+PASS baz(object, 74, 148) is 148
+PASS baz(object, 75, 150) is 150
+PASS baz(object, 76, 152) is 152
+PASS baz(object, 77, 154) is 154
+PASS baz(object, 78, 156) is 156
+PASS baz(object, 79, 158) is 158
+PASS baz(object, 80, 160) is 160
+PASS baz(object, 81, 162) is 162
+PASS baz(object, 82, 164) is 164
+PASS baz(object, 83, 166) is 166
+PASS baz(object, 84, 168) is 168
+PASS baz(object, 85, 170) is 170
+PASS baz(object, 86, 172) is 172
+PASS baz(object, 87, 174) is 174
+PASS baz(object, 88, 176) is 176
+PASS baz(object, 89, 178) is 178
+PASS baz(object, 90, 180) is 180
+PASS baz(object, 91, 182) is 182
+PASS baz(object, 92, 184) is 184
+PASS baz(object, 93, 186) is 186
+PASS baz(object, 94, 188) is 188
+PASS baz(object, 95, 190) is 190
+PASS baz(object, 96, 192) is 192
+PASS baz(object, 97, 194) is 194
+PASS baz(object, 98, 196) is 196
+PASS baz(object, 99, 198) is 198
+PASS baz(object, 100, 200) is 200
+PASS baz(object, 101, 202) is 202
+PASS baz(object, 102, 204) is 204
+PASS baz(object, 103, 206) is 206
+PASS baz(object, 104, 208) is 208
+PASS baz(object, 105, 210) is 210
+PASS baz(object, 106, 212) is 212
+PASS baz(object, 107, 214) is 214
+PASS baz(object, 108, 216) is 216
+PASS baz(object, 109, 218) is 218
+PASS baz(object, 110, 220) is 220
+PASS baz(object, 111, 222) is 222
+PASS baz(object, 112, 224) is 224
+PASS baz(object, 113, 226) is 226
+PASS baz(object, 114, 228) is 228
+PASS baz(object, 115, 230) is 230
+PASS baz(object, 116, 232) is 232
+PASS baz(object, 117, 234) is 234
+PASS baz(object, 118, 236) is 236
+PASS baz(object, 119, 238) is 238
+PASS baz(object, 120, 240) is 240
+PASS baz(object, 121, 242) is 242
+PASS baz(object, 122, 244) is 244
+PASS baz(object, 123, 246) is 246
+PASS baz(object, 124, 248) is 248
+PASS baz(object, 125, 250) is 250
+PASS baz(object, 126, 252) is 252
+PASS baz(object, 127, 254) is 254
+PASS baz(object, 128, 256) is 256
+PASS baz(object, 129, 258) is 258
+PASS baz(object, 130, 260) is 260
+PASS baz(object, 131, 262) is 262
+PASS baz(object, 132, 264) is 264
+PASS baz(object, 133, 266) is 266
+PASS baz(object, 134, 268) is 268
+PASS baz(object, 135, 270) is 270
+PASS baz(object, 136, 272) is 272
+PASS baz(object, 137, 274) is 274
+PASS baz(object, 138, 276) is 276
+PASS baz(object, 139, 278) is 278
+PASS baz(object, 140, 280) is 280
+PASS baz(object, 141, 282) is 282
+PASS baz(object, 142, 284) is 284
+PASS baz(object, 143, 286) is 286
+PASS baz(object, 144, 288) is 288
+PASS baz(object, 145, 290) is 290
+PASS baz(object, 146, 292) is 292
+PASS baz(object, 147, 294) is 294
+PASS baz(object, 148, 296) is 296
+PASS baz(object, 149, 298) is 298
+PASS baz(object, 150, 300) is 300
+PASS baz(object, 151, 302) is 302
+PASS baz(object, 152, 304) is 304
+PASS baz(object, 153, 306) is 306
+PASS baz(object, 154, 308) is 308
+PASS baz(object, 155, 310) is 310
+PASS baz(object, 156, 312) is 312
+PASS baz(object, 157, 314) is 314
+PASS baz(object, 158, 316) is 316
+PASS baz(object, 159, 318) is 318
+PASS baz(object, 160, 320) is 320
+PASS baz(object, 161, 322) is 322
+PASS baz(object, 162, 324) is 324
+PASS baz(object, 163, 326) is 326
+PASS baz(object, 164, 328) is 328
+PASS baz(object, 165, 330) is 330
+PASS baz(object, 166, 332) is 332
+PASS baz(object, 167, 334) is 334
+PASS baz(object, 168, 336) is 336
+PASS baz(object, 169, 338) is 338
+PASS baz(object, 170, 340) is 340
+PASS baz(object, 171, 342) is 342
+PASS baz(object, 172, 344) is 344
+PASS baz(object, 173, 346) is 346
+PASS baz(object, 174, 348) is 348
+PASS baz(object, 175, 350) is 350
+PASS baz(object, 176, 352) is 352
+PASS baz(object, 177, 354) is 354
+PASS baz(object, 178, 356) is 356
+PASS baz(object, 179, 358) is 358
+PASS baz(object, 180, 360) is 360
+PASS baz(object, 181, 362) is 362
+PASS baz(object, 182, 364) is 364
+PASS baz(object, 183, 366) is 366
+PASS baz(object, 184, 368) is 368
+PASS baz(object, 185, 370) is 370
+PASS baz(object, 186, 372) is 372
+PASS baz(object, 187, 374) is 374
+PASS baz(object, 188, 376) is 376
+PASS baz(object, 189, 378) is 378
+PASS baz(object, 190, 380) is 380
+PASS baz(object, 191, 382) is 382
+PASS baz(object, 192, 384) is 384
+PASS baz(object, 193, 386) is 386
+PASS baz(object, 194, 388) is 388
+PASS baz(object, 195, 390) is 390
+PASS baz(object, 196, 392) is 392
+PASS baz(object, 197, 394) is 394
+PASS baz(object, 198, 396) is 396
+PASS baz(object, 199, 398) is 398
+PASS baz(object, 200, 400) is 400
+PASS baz(object, 201, 402) is 402
+PASS baz(object, 202, 404) is 404
+PASS baz(object, 203, 406) is 406
+PASS baz(object, 204, 408) is 408
+PASS baz(object, 205, 410) is 410
+PASS baz(object, 206, 412) is 412
+PASS baz(object, 207, 414) is 414
+PASS baz(object, 208, 416) is 416
+PASS baz(object, 209, 418) is 418
+PASS baz(object, 210, 420) is 420
+PASS baz(object, 211, 422) is 422
+PASS baz(object, 212, 424) is 424
+PASS baz(object, 213, 426) is 426
+PASS baz(object, 214, 428) is 428
+PASS baz(object, 215, 430) is 430
+PASS baz(object, 216, 432) is 432
+PASS baz(object, 217, 434) is 434
+PASS baz(object, 218, 436) is 436
+PASS baz(object, 219, 438) is 438
+PASS baz(object, 220, 440) is 440
+PASS baz(object, 221, 442) is 442
+PASS baz(object, 222, 444) is 444
+PASS baz(object, 223, 446) is 446
+PASS baz(object, 224, 448) is 448
+PASS baz(object, 225, 450) is 450
+PASS baz(object, 226, 452) is 452
+PASS baz(object, 227, 454) is 454
+PASS baz(object, 228, 456) is 456
+PASS baz(object, 229, 458) is 458
+PASS baz(object, 230, 460) is 460
+PASS baz(object, 231, 462) is 462
+PASS baz(object, 232, 464) is 464
+PASS baz(object, 233, 466) is 466
+PASS baz(object, 234, 468) is 468
+PASS baz(object, 235, 470) is 470
+PASS baz(object, 236, 472) is 472
+PASS baz(object, 237, 474) is 474
+PASS baz(object, 238, 476) is 476
+PASS baz(object, 239, 478) is 478
+PASS baz(object, 240, 480) is 480
+PASS baz(object, 241, 482) is 482
+PASS baz(object, 242, 484) is 484
+PASS baz(object, 243, 486) is 486
+PASS baz(object, 244, 488) is 488
+PASS baz(object, 245, 490) is 490
+PASS baz(object, 246, 492) is 492
+PASS baz(object, 247, 494) is 494
+PASS baz(object, 248, 496) is 496
+PASS baz(object, 249, 498) is 498
+PASS baz(object, 250, 500) is 500
+PASS baz(object, 251, 502) is 502
+PASS baz(object, 252, 504) is 504
+PASS baz(object, 253, 506) is 506
+PASS baz(object, 254, 508) is 508
+PASS baz(object, 255, 510) is 510
+PASS baz(object, 256, 512) is 512
+PASS baz(object, 257, 514) is 514
+PASS baz(object, 258, 516) is 516
+PASS baz(object, 259, 518) is 518
+PASS baz(object, 260, 520) is 520
+PASS baz(object, 261, 522) is 522
+PASS baz(object, 262, 524) is 524
+PASS baz(object, 263, 526) is 526
+PASS baz(object, 264, 528) is 528
+PASS baz(object, 265, 530) is 530
+PASS baz(object, 266, 532) is 532
+PASS baz(object, 267, 534) is 534
+PASS baz(object, 268, 536) is 536
+PASS baz(object, 269, 538) is 538
+PASS baz(object, 270, 540) is 540
+PASS baz(object, 271, 542) is 542
+PASS baz(object, 272, 544) is 544
+PASS baz(object, 273, 546) is 546
+PASS baz(object, 274, 548) is 548
+PASS baz(object, 275, 550) is 550
+PASS baz(object, 276, 552) is 552
+PASS baz(object, 277, 554) is 554
+PASS baz(object, 278, 556) is 556
+PASS baz(object, 279, 558) is 558
+PASS baz(object, 280, 560) is 560
+PASS baz(object, 281, 562) is 562
+PASS baz(object, 282, 564) is 564
+PASS baz(object, 283, 566) is 566
+PASS baz(object, 284, 568) is 568
+PASS baz(object, 285, 570) is 570
+PASS baz(object, 286, 572) is 572
+PASS baz(object, 287, 574) is 574
+PASS baz(object, 288, 576) is 576
+PASS baz(object, 289, 578) is 578
+PASS baz(object, 290, 580) is 580
+PASS baz(object, 291, 582) is 582
+PASS baz(object, 292, 584) is 584
+PASS baz(object, 293, 586) is 586
+PASS baz(object, 294, 588) is 588
+PASS baz(object, 295, 590) is 590
+PASS baz(object, 296, 592) is 592
+PASS baz(object, 297, 594) is 594
+PASS baz(object, 298, 596) is 596
+PASS baz(object, 299, 598) is 598
+PASS baz(object, 300, 600) is 600
+PASS baz(object, 301, 602) is 602
+PASS baz(object, 302, 604) is 604
+PASS baz(object, 303, 606) is 606
+PASS baz(object, 304, 608) is 608
+PASS baz(object, 305, 610) is 610
+PASS baz(object, 306, 612) is 612
+PASS baz(object, 307, 614) is 614
+PASS baz(object, 308, 616) is 616
+PASS baz(object, 309, 618) is 618
+PASS baz(object, 310, 620) is 620
+PASS baz(object, 311, 622) is 622
+PASS baz(object, 312, 624) is 624
+PASS baz(object, 313, 626) is 626
+PASS baz(object, 314, 628) is 628
+PASS baz(object, 315, 630) is 630
+PASS baz(object, 316, 632) is 632
+PASS baz(object, 317, 634) is 634
+PASS baz(object, 318, 636) is 636
+PASS baz(object, 319, 638) is 638
+PASS baz(object, 320, 640) is 640
+PASS baz(object, 321, 642) is 642
+PASS baz(object, 322, 644) is 644
+PASS baz(object, 323, 646) is 646
+PASS baz(object, 324, 648) is 648
+PASS baz(object, 325, 650) is 650
+PASS baz(object, 326, 652) is 652
+PASS baz(object, 327, 654) is 654
+PASS baz(object, 328, 656) is 656
+PASS baz(object, 329, 658) is 658
+PASS baz(object, 330, 660) is 660
+PASS baz(object, 331, 662) is 662
+PASS baz(object, 332, 664) is 664
+PASS baz(object, 333, 666) is 666
+PASS baz(object, 334, 668) is 668
+PASS baz(object, 335, 670) is 670
+PASS baz(object, 336, 672) is 672
+PASS baz(object, 337, 674) is 674
+PASS baz(object, 338, 676) is 676
+PASS baz(object, 339, 678) is 678
+PASS baz(object, 340, 680) is 680
+PASS baz(object, 341, 682) is 682
+PASS baz(object, 342, 684) is 684
+PASS baz(object, 343, 686) is 686
+PASS baz(object, 344, 688) is 688
+PASS baz(object, 345, 690) is 690
+PASS baz(object, 346, 692) is 692
+PASS baz(object, 347, 694) is 694
+PASS baz(object, 348, 696) is 696
+PASS baz(object, 349, 698) is 698
+PASS baz(object, 350, 700) is 700
+PASS baz(object, 351, 702) is 702
+PASS baz(object, 352, 704) is 704
+PASS baz(object, 353, 706) is 706
+PASS baz(object, 354, 708) is 708
+PASS baz(object, 355, 710) is 710
+PASS baz(object, 356, 712) is 712
+PASS baz(object, 357, 714) is 714
+PASS baz(object, 358, 716) is 716
+PASS baz(object, 359, 718) is 718
+PASS baz(object, 360, 720) is 720
+PASS baz(object, 361, 722) is 722
+PASS baz(object, 362, 724) is 724
+PASS baz(object, 363, 726) is 726
+PASS baz(object, 364, 728) is 728
+PASS baz(object, 365, 730) is 730
+PASS baz(object, 366, 732) is 732
+PASS baz(object, 367, 734) is 734
+PASS baz(object, 368, 736) is 736
+PASS baz(object, 369, 738) is 738
+PASS baz(object, 370, 740) is 740
+PASS baz(object, 371, 742) is 742
+PASS baz(object, 372, 744) is 744
+PASS baz(object, 373, 746) is 746
+PASS baz(object, 374, 748) is 748
+PASS baz(object, 375, 750) is 750
+PASS baz(object, 376, 752) is 752
+PASS baz(object, 377, 754) is 754
+PASS baz(object, 378, 756) is 756
+PASS baz(object, 379, 758) is 758
+PASS baz(object, 380, 760) is 760
+PASS baz(object, 381, 762) is 762
+PASS baz(object, 382, 764) is 764
+PASS baz(object, 383, 766) is 766
+PASS baz(object, 384, 768) is 768
+PASS baz(object, 385, 770) is 770
+PASS baz(object, 386, 772) is 772
+PASS baz(object, 387, 774) is 774
+PASS baz(object, 388, 776) is 776
+PASS baz(object, 389, 778) is 778
+PASS baz(object, 390, 780) is 780
+PASS baz(object, 391, 782) is 782
+PASS baz(object, 392, 784) is 784
+PASS baz(object, 393, 786) is 786
+PASS baz(object, 394, 788) is 788
+PASS baz(object, 395, 790) is 790
+PASS baz(object, 396, 792) is 792
+PASS baz(object, 397, 794) is 794
+PASS baz(object, 398, 796) is 796
+PASS baz(object, 399, 798) is 798
+PASS baz(object, 400, 800) is 800
+PASS baz(object, 401, 802) is 802
+PASS baz(object, 402, 804) is 804
+PASS baz(object, 403, 806) is 806
+PASS baz(object, 404, 808) is 808
+PASS baz(object, 405, 810) is 810
+PASS baz(object, 406, 812) is 812
+PASS baz(object, 407, 814) is 814
+PASS baz(object, 408, 816) is 816
+PASS baz(object, 409, 818) is 818
+PASS baz(object, 410, 820) is 820
+PASS baz(object, 411, 822) is 822
+PASS baz(object, 412, 824) is 824
+PASS baz(object, 413, 826) is 826
+PASS baz(object, 414, 828) is 828
+PASS baz(object, 415, 830) is 830
+PASS baz(object, 416, 832) is 832
+PASS baz(object, 417, 834) is 834
+PASS baz(object, 418, 836) is 836
+PASS baz(object, 419, 838) is 838
+PASS baz(object, 420, 840) is 840
+PASS baz(object, 421, 842) is 842
+PASS baz(object, 422, 844) is 844
+PASS baz(object, 423, 846) is 846
+PASS baz(object, 424, 848) is 848
+PASS baz(object, 425, 850) is 850
+PASS baz(object, 426, 852) is 852
+PASS baz(object, 427, 854) is 854
+PASS baz(object, 428, 856) is 856
+PASS baz(object, 429, 858) is 858
+PASS baz(object, 430, 860) is 860
+PASS baz(object, 431, 862) is 862
+PASS baz(object, 432, 864) is 864
+PASS baz(object, 433, 866) is 866
+PASS baz(object, 434, 868) is 868
+PASS baz(object, 435, 870) is 870
+PASS baz(object, 436, 872) is 872
+PASS baz(object, 437, 874) is 874
+PASS baz(object, 438, 876) is 876
+PASS baz(object, 439, 878) is 878
+PASS baz(object, 440, 880) is 880
+PASS baz(object, 441, 882) is 882
+PASS baz(object, 442, 884) is 884
+PASS baz(object, 443, 886) is 886
+PASS baz(object, 444, 888) is 888
+PASS baz(object, 445, 890) is 890
+PASS baz(object, 446, 892) is 892
+PASS baz(object, 447, 894) is 894
+PASS baz(object, 448, 896) is 896
+PASS baz(object, 449, 898) is 898
+PASS baz(object, 450, 900) is 900
+PASS baz(object, 451, 902) is 902
+PASS baz(object, 452, 904) is 904
+PASS baz(object, 453, 906) is 906
+PASS baz(object, 454, 908) is 908
+PASS baz(object, 455, 910) is 910
+PASS baz(object, 456, 912) is 912
+PASS baz(object, 457, 914) is 914
+PASS baz(object, 458, 916) is 916
+PASS baz(object, 459, 918) is 918
+PASS baz(object, 460, 920) is 920
+PASS baz(object, 461, 922) is 922
+PASS baz(object, 462, 924) is 924
+PASS baz(object, 463, 926) is 926
+PASS baz(object, 464, 928) is 928
+PASS baz(object, 465, 930) is 930
+PASS baz(object, 466, 932) is 932
+PASS baz(object, 467, 934) is 934
+PASS baz(object, 468, 936) is 936
+PASS baz(object, 469, 938) is 938
+PASS baz(object, 470, 940) is 940
+PASS baz(object, 471, 942) is 942
+PASS baz(object, 472, 944) is 944
+PASS baz(object, 473, 946) is 946
+PASS baz(object, 474, 948) is 948
+PASS baz(object, 475, 950) is 950
+PASS baz(object, 476, 952) is 952
+PASS baz(object, 477, 954) is 954
+PASS baz(object, 478, 956) is 956
+PASS baz(object, 479, 958) is 958
+PASS baz(object, 480, 960) is 960
+PASS baz(object, 481, 962) is 962
+PASS baz(object, 482, 964) is 964
+PASS baz(object, 483, 966) is 966
+PASS baz(object, 484, 968) is 968
+PASS baz(object, 485, 970) is 970
+PASS baz(object, 486, 972) is 972
+PASS baz(object, 487, 974) is 974
+PASS baz(object, 488, 976) is 976
+PASS baz(object, 489, 978) is 978
+PASS baz(object, 490, 980) is 980
+PASS baz(object, 491, 982) is 982
+PASS baz(object, 492, 984) is 984
+PASS baz(object, 493, 986) is 986
+PASS baz(object, 494, 988) is 988
+PASS baz(object, 495, 990) is 990
+PASS baz(object, 496, 992) is 992
+PASS baz(object, 497, 994) is 994
+PASS baz(object, 498, 996) is 996
+PASS baz(object, 499, 998) is 998
+PASS baz(object, 500, 1000) is 1000
+PASS baz(object, 501, 1002) is 1002
+PASS baz(object, 502, 1004) is 1004
+PASS baz(object, 503, 1006) is 1006
+PASS baz(object, 504, 1008) is 1008
+PASS baz(object, 505, 1010) is 1010
+PASS baz(object, 506, 1012) is 1012
+PASS baz(object, 507, 1014) is 1014
+PASS baz(object, 508, 1016) is 1016
+PASS baz(object, 509, 1018) is 1018
+PASS baz(object, 510, 1020) is 1020
+PASS baz(object, 511, 1022) is 1022
+PASS baz(object, 512, 1024) is 1024
+PASS baz(object, 513, 1026) is 1026
+PASS baz(object, 514, 1028) is 1028
+PASS baz(object, 515, 1030) is 1030
+PASS baz(object, 516, 1032) is 1032
+PASS baz(object, 517, 1034) is 1034
+PASS baz(object, 518, 1036) is 1036
+PASS baz(object, 519, 1038) is 1038
+PASS baz(object, 520, 1040) is 1040
+PASS baz(object, 521, 1042) is 1042
+PASS baz(object, 522, 1044) is 1044
+PASS baz(object, 523, 1046) is 1046
+PASS baz(object, 524, 1048) is 1048
+PASS baz(object, 525, 1050) is 1050
+PASS baz(object, 526, 1052) is 1052
+PASS baz(object, 527, 1054) is 1054
+PASS baz(object, 528, 1056) is 1056
+PASS baz(object, 529, 1058) is 1058
+PASS baz(object, 530, 1060) is 1060
+PASS baz(object, 531, 1062) is 1062
+PASS baz(object, 532, 1064) is 1064
+PASS baz(object, 533, 1066) is 1066
+PASS baz(object, 534, 1068) is 1068
+PASS baz(object, 535, 1070) is 1070
+PASS baz(object, 536, 1072) is 1072
+PASS baz(object, 537, 1074) is 1074
+PASS baz(object, 538, 1076) is 1076
+PASS baz(object, 539, 1078) is 1078
+PASS baz(object, 540, 1080) is 1080
+PASS baz(object, 541, 1082) is 1082
+PASS baz(object, 542, 1084) is 1084
+PASS baz(object, 543, 1086) is 1086
+PASS baz(object, 544, 1088) is 1088
+PASS baz(object, 545, 1090) is 1090
+PASS baz(object, 546, 1092) is 1092
+PASS baz(object, 547, 1094) is 1094
+PASS baz(object, 548, 1096) is 1096
+PASS baz(object, 549, 1098) is 1098
+PASS baz(object, 550, 1100) is 1100
+PASS baz(object, 551, 1102) is 1102
+PASS baz(object, 552, 1104) is 1104
+PASS baz(object, 553, 1106) is 1106
+PASS baz(object, 554, 1108) is 1108
+PASS baz(object, 555, 1110) is 1110
+PASS baz(object, 556, 1112) is 1112
+PASS baz(object, 557, 1114) is 1114
+PASS baz(object, 558, 1116) is 1116
+PASS baz(object, 559, 1118) is 1118
+PASS baz(object, 560, 1120) is 1120
+PASS baz(object, 561, 1122) is 1122
+PASS baz(object, 562, 1124) is 1124
+PASS baz(object, 563, 1126) is 1126
+PASS baz(object, 564, 1128) is 1128
+PASS baz(object, 565, 1130) is 1130
+PASS baz(object, 566, 1132) is 1132
+PASS baz(object, 567, 1134) is 1134
+PASS baz(object, 568, 1136) is 1136
+PASS baz(object, 569, 1138) is 1138
+PASS baz(object, 570, 1140) is 1140
+PASS baz(object, 571, 1142) is 1142
+PASS baz(object, 572, 1144) is 1144
+PASS baz(object, 573, 1146) is 1146
+PASS baz(object, 574, 1148) is 1148
+PASS baz(object, 575, 1150) is 1150
+PASS baz(object, 576, 1152) is 1152
+PASS baz(object, 577, 1154) is 1154
+PASS baz(object, 578, 1156) is 1156
+PASS baz(object, 579, 1158) is 1158
+PASS baz(object, 580, 1160) is 1160
+PASS baz(object, 581, 1162) is 1162
+PASS baz(object, 582, 1164) is 1164
+PASS baz(object, 583, 1166) is 1166
+PASS baz(object, 584, 1168) is 1168
+PASS baz(object, 585, 1170) is 1170
+PASS baz(object, 586, 1172) is 1172
+PASS baz(object, 587, 1174) is 1174
+PASS baz(object, 588, 1176) is 1176
+PASS baz(object, 589, 1178) is 1178
+PASS baz(object, 590, 1180) is 1180
+PASS baz(object, 591, 1182) is 1182
+PASS baz(object, 592, 1184) is 1184
+PASS baz(object, 593, 1186) is 1186
+PASS baz(object, 594, 1188) is 1188
+PASS baz(object, 595, 1190) is 1190
+PASS baz(object, 596, 1192) is 1192
+PASS baz(object, 597, 1194) is 1194
+PASS baz(object, 598, 1196) is 1196
+PASS baz(object, 599, 1198) is 1198
+PASS baz(object, 600, 1200) is 1242
+PASS baz(object, 601, 1202) is 1244
+PASS baz(object, 602, 1204) is 1246
+PASS baz(object, 603, 1206) is 1248
+PASS baz(object, 604, 1208) is 1250
+PASS baz(object, 605, 1210) is 1252
+PASS baz(object, 606, 1212) is 1254
+PASS baz(object, 607, 1214) is 1256
+PASS baz(object, 608, 1216) is 1258
+PASS baz(object, 609, 1218) is 1260
+PASS baz(object, 610, 1220) is 1262
+PASS baz(object, 611, 1222) is 1264
+PASS baz(object, 612, 1224) is 1266
+PASS baz(object, 613, 1226) is 1268
+PASS baz(object, 614, 1228) is 1270
+PASS baz(object, 615, 1230) is 1272
+PASS baz(object, 616, 1232) is 1274
+PASS baz(object, 617, 1234) is 1276
+PASS baz(object, 618, 1236) is 1278
+PASS baz(object, 619, 1238) is 1280
+PASS baz(object, 620, 1240) is 1282
+PASS baz(object, 621, 1242) is 1284
+PASS baz(object, 622, 1244) is 1286
+PASS baz(object, 623, 1246) is 1288
+PASS baz(object, 624, 1248) is 1290
+PASS baz(object, 625, 1250) is 1292
+PASS baz(object, 626, 1252) is 1294
+PASS baz(object, 627, 1254) is 1296
+PASS baz(object, 628, 1256) is 1298
+PASS baz(object, 629, 1258) is 1300
+PASS baz(object, 630, 1260) is 1302
+PASS baz(object, 631, 1262) is 1304
+PASS baz(object, 632, 1264) is 1306
+PASS baz(object, 633, 1266) is 1308
+PASS baz(object, 634, 1268) is 1310
+PASS baz(object, 635, 1270) is 1312
+PASS baz(object, 636, 1272) is 1314
+PASS baz(object, 637, 1274) is 1316
+PASS baz(object, 638, 1276) is 1318
+PASS baz(object, 639, 1278) is 1320
+PASS baz(object, 640, 1280) is 1322
+PASS baz(object, 641, 1282) is 1324
+PASS baz(object, 642, 1284) is 1326
+PASS baz(object, 643, 1286) is 1328
+PASS baz(object, 644, 1288) is 1330
+PASS baz(object, 645, 1290) is 1332
+PASS baz(object, 646, 1292) is 1334
+PASS baz(object, 647, 1294) is 1336
+PASS baz(object, 648, 1296) is 1338
+PASS baz(object, 649, 1298) is 1340
+PASS baz(object, 650, 1300) is 1342
+PASS baz(object, 651, 1302) is 1344
+PASS baz(object, 652, 1304) is 1346
+PASS baz(object, 653, 1306) is 1348
+PASS baz(object, 654, 1308) is 1350
+PASS baz(object, 655, 1310) is 1352
+PASS baz(object, 656, 1312) is 1354
+PASS baz(object, 657, 1314) is 1356
+PASS baz(object, 658, 1316) is 1358
+PASS baz(object, 659, 1318) is 1360
+PASS baz(object, 660, 1320) is 1362
+PASS baz(object, 661, 1322) is 1364
+PASS baz(object, 662, 1324) is 1366
+PASS baz(object, 663, 1326) is 1368
+PASS baz(object, 664, 1328) is 1370
+PASS baz(object, 665, 1330) is 1372
+PASS baz(object, 666, 1332) is 1374
+PASS baz(object, 667, 1334) is 1376
+PASS baz(object, 668, 1336) is 1378
+PASS baz(object, 669, 1338) is 1380
+PASS baz(object, 670, 1340) is 1382
+PASS baz(object, 671, 1342) is 1384
+PASS baz(object, 672, 1344) is 1386
+PASS baz(object, 673, 1346) is 1388
+PASS baz(object, 674, 1348) is 1390
+PASS baz(object, 675, 1350) is 1392
+PASS baz(object, 676, 1352) is 1394
+PASS baz(object, 677, 1354) is 1396
+PASS baz(object, 678, 1356) is 1398
+PASS baz(object, 679, 1358) is 1400
+PASS baz(object, 680, 1360) is 1402
+PASS baz(object, 681, 1362) is 1404
+PASS baz(object, 682, 1364) is 1406
+PASS baz(object, 683, 1366) is 1408
+PASS baz(object, 684, 1368) is 1410
+PASS baz(object, 685, 1370) is 1412
+PASS baz(object, 686, 1372) is 1414
+PASS baz(object, 687, 1374) is 1416
+PASS baz(object, 688, 1376) is 1418
+PASS baz(object, 689, 1378) is 1420
+PASS baz(object, 690, 1380) is 1422
+PASS baz(object, 691, 1382) is 1424
+PASS baz(object, 692, 1384) is 1426
+PASS baz(object, 693, 1386) is 1428
+PASS baz(object, 694, 1388) is 1430
+PASS baz(object, 695, 1390) is 1432
+PASS baz(object, 696, 1392) is 1434
+PASS baz(object, 697, 1394) is 1436
+PASS baz(object, 698, 1396) is 1438
+PASS baz(object, 699, 1398) is 1440
+PASS baz(object, 700, 1400) is 1442
+PASS baz(object, 701, 1402) is 1444
+PASS baz(object, 702, 1404) is 1446
+PASS baz(object, 703, 1406) is 1448
+PASS baz(object, 704, 1408) is 1450
+PASS baz(object, 705, 1410) is 1452
+PASS baz(object, 706, 1412) is 1454
+PASS baz(object, 707, 1414) is 1456
+PASS baz(object, 708, 1416) is 1458
+PASS baz(object, 709, 1418) is 1460
+PASS baz(object, 710, 1420) is 1462
+PASS baz(object, 711, 1422) is 1464
+PASS baz(object, 712, 1424) is 1466
+PASS baz(object, 713, 1426) is 1468
+PASS baz(object, 714, 1428) is 1470
+PASS baz(object, 715, 1430) is 1472
+PASS baz(object, 716, 1432) is 1474
+PASS baz(object, 717, 1434) is 1476
+PASS baz(object, 718, 1436) is 1478
+PASS baz(object, 719, 1438) is 1480
+PASS baz(object, 720, 1440) is 1482
+PASS baz(object, 721, 1442) is 1484
+PASS baz(object, 722, 1444) is 1486
+PASS baz(object, 723, 1446) is 1488
+PASS baz(object, 724, 1448) is 1490
+PASS baz(object, 725, 1450) is 1492
+PASS baz(object, 726, 1452) is 1494
+PASS baz(object, 727, 1454) is 1496
+PASS baz(object, 728, 1456) is 1498
+PASS baz(object, 729, 1458) is 1500
+PASS baz(object, 730, 1460) is 1502
+PASS baz(object, 731, 1462) is 1504
+PASS baz(object, 732, 1464) is 1506
+PASS baz(object, 733, 1466) is 1508
+PASS baz(object, 734, 1468) is 1510
+PASS baz(object, 735, 1470) is 1512
+PASS baz(object, 736, 1472) is 1514
+PASS baz(object, 737, 1474) is 1516
+PASS baz(object, 738, 1476) is 1518
+PASS baz(object, 739, 1478) is 1520
+PASS baz(object, 740, 1480) is 1522
+PASS baz(object, 741, 1482) is 1524
+PASS baz(object, 742, 1484) is 1526
+PASS baz(object, 743, 1486) is 1528
+PASS baz(object, 744, 1488) is 1530
+PASS baz(object, 745, 1490) is 1532
+PASS baz(object, 746, 1492) is 1534
+PASS baz(object, 747, 1494) is 1536
+PASS baz(object, 748, 1496) is 1538
+PASS baz(object, 749, 1498) is 1540
+PASS baz(object, 750, 1500) is 1542
+PASS baz(object, 751, 1502) is 1544
+PASS baz(object, 752, 1504) is 1546
+PASS baz(object, 753, 1506) is 1548
+PASS baz(object, 754, 1508) is 1550
+PASS baz(object, 755, 1510) is 1552
+PASS baz(object, 756, 1512) is 1554
+PASS baz(object, 757, 1514) is 1556
+PASS baz(object, 758, 1516) is 1558
+PASS baz(object, 759, 1518) is 1560
+PASS baz(object, 760, 1520) is 1562
+PASS baz(object, 761, 1522) is 1564
+PASS baz(object, 762, 1524) is 1566
+PASS baz(object, 763, 1526) is 1568
+PASS baz(object, 764, 1528) is 1570
+PASS baz(object, 765, 1530) is 1572
+PASS baz(object, 766, 1532) is 1574
+PASS baz(object, 767, 1534) is 1576
+PASS baz(object, 768, 1536) is 1578
+PASS baz(object, 769, 1538) is 1580
+PASS baz(object, 770, 1540) is 1582
+PASS baz(object, 771, 1542) is 1584
+PASS baz(object, 772, 1544) is 1586
+PASS baz(object, 773, 1546) is 1588
+PASS baz(object, 774, 1548) is 1590
+PASS baz(object, 775, 1550) is 1592
+PASS baz(object, 776, 1552) is 1594
+PASS baz(object, 777, 1554) is 1596
+PASS baz(object, 778, 1556) is 1598
+PASS baz(object, 779, 1558) is 1600
+PASS baz(object, 780, 1560) is 1602
+PASS baz(object, 781, 1562) is 1604
+PASS baz(object, 782, 1564) is 1606
+PASS baz(object, 783, 1566) is 1608
+PASS baz(object, 784, 1568) is 1610
+PASS baz(object, 785, 1570) is 1612
+PASS baz(object, 786, 1572) is 1614
+PASS baz(object, 787, 1574) is 1616
+PASS baz(object, 788, 1576) is 1618
+PASS baz(object, 789, 1578) is 1620
+PASS baz(object, 790, 1580) is 1622
+PASS baz(object, 791, 1582) is 1624
+PASS baz(object, 792, 1584) is 1626
+PASS baz(object, 793, 1586) is 1628
+PASS baz(object, 794, 1588) is 1630
+PASS baz(object, 795, 1590) is 1632
+PASS baz(object, 796, 1592) is 1634
+PASS baz(object, 797, 1594) is 1636
+PASS baz(object, 798, 1596) is 1638
+PASS baz(object, 799, 1598) is 1640
+PASS baz(object, 800, 1600) is 1642
+PASS baz(object, 801, 1602) is 1644
+PASS baz(object, 802, 1604) is 1646
+PASS baz(object, 803, 1606) is 1648
+PASS baz(object, 804, 1608) is 1650
+PASS baz(object, 805, 1610) is 1652
+PASS baz(object, 806, 1612) is 1654
+PASS baz(object, 807, 1614) is 1656
+PASS baz(object, 808, 1616) is 1658
+PASS baz(object, 809, 1618) is 1660
+PASS baz(object, 810, 1620) is 1662
+PASS baz(object, 811, 1622) is 1664
+PASS baz(object, 812, 1624) is 1666
+PASS baz(object, 813, 1626) is 1668
+PASS baz(object, 814, 1628) is 1670
+PASS baz(object, 815, 1630) is 1672
+PASS baz(object, 816, 1632) is 1674
+PASS baz(object, 817, 1634) is 1676
+PASS baz(object, 818, 1636) is 1678
+PASS baz(object, 819, 1638) is 1680
+PASS baz(object, 820, 1640) is 1682
+PASS baz(object, 821, 1642) is 1684
+PASS baz(object, 822, 1644) is 1686
+PASS baz(object, 823, 1646) is 1688
+PASS baz(object, 824, 1648) is 1690
+PASS baz(object, 825, 1650) is 1692
+PASS baz(object, 826, 1652) is 1694
+PASS baz(object, 827, 1654) is 1696
+PASS baz(object, 828, 1656) is 1698
+PASS baz(object, 829, 1658) is 1700
+PASS baz(object, 830, 1660) is 1702
+PASS baz(object, 831, 1662) is 1704
+PASS baz(object, 832, 1664) is 1706
+PASS baz(object, 833, 1666) is 1708
+PASS baz(object, 834, 1668) is 1710
+PASS baz(object, 835, 1670) is 1712
+PASS baz(object, 836, 1672) is 1714
+PASS baz(object, 837, 1674) is 1716
+PASS baz(object, 838, 1676) is 1718
+PASS baz(object, 839, 1678) is 1720
+PASS baz(object, 840, 1680) is 1722
+PASS baz(object, 841, 1682) is 1724
+PASS baz(object, 842, 1684) is 1726
+PASS baz(object, 843, 1686) is 1728
+PASS baz(object, 844, 1688) is 1730
+PASS baz(object, 845, 1690) is 1732
+PASS baz(object, 846, 1692) is 1734
+PASS baz(object, 847, 1694) is 1736
+PASS baz(object, 848, 1696) is 1738
+PASS baz(object, 849, 1698) is 1740
+PASS baz(object, 850, 1700) is 1742
+PASS baz(object, 851, 1702) is 1744
+PASS baz(object, 852, 1704) is 1746
+PASS baz(object, 853, 1706) is 1748
+PASS baz(object, 854, 1708) is 1750
+PASS baz(object, 855, 1710) is 1752
+PASS baz(object, 856, 1712) is 1754
+PASS baz(object, 857, 1714) is 1756
+PASS baz(object, 858, 1716) is 1758
+PASS baz(object, 859, 1718) is 1760
+PASS baz(object, 860, 1720) is 1762
+PASS baz(object, 861, 1722) is 1764
+PASS baz(object, 862, 1724) is 1766
+PASS baz(object, 863, 1726) is 1768
+PASS baz(object, 864, 1728) is 1770
+PASS baz(object, 865, 1730) is 1772
+PASS baz(object, 866, 1732) is 1774
+PASS baz(object, 867, 1734) is 1776
+PASS baz(object, 868, 1736) is 1778
+PASS baz(object, 869, 1738) is 1780
+PASS baz(object, 870, 1740) is 1782
+PASS baz(object, 871, 1742) is 1784
+PASS baz(object, 872, 1744) is 1786
+PASS baz(object, 873, 1746) is 1788
+PASS baz(object, 874, 1748) is 1790
+PASS baz(object, 875, 1750) is 1792
+PASS baz(object, 876, 1752) is 1794
+PASS baz(object, 877, 1754) is 1796
+PASS baz(object, 878, 1756) is 1798
+PASS baz(object, 879, 1758) is 1800
+PASS baz(object, 880, 1760) is 1802
+PASS baz(object, 881, 1762) is 1804
+PASS baz(object, 882, 1764) is 1806
+PASS baz(object, 883, 1766) is 1808
+PASS baz(object, 884, 1768) is 1810
+PASS baz(object, 885, 1770) is 1812
+PASS baz(object, 886, 1772) is 1814
+PASS baz(object, 887, 1774) is 1816
+PASS baz(object, 888, 1776) is 1818
+PASS baz(object, 889, 1778) is 1820
+PASS baz(object, 890, 1780) is 1822
+PASS baz(object, 891, 1782) is 1824
+PASS baz(object, 892, 1784) is 1826
+PASS baz(object, 893, 1786) is 1828
+PASS baz(object, 894, 1788) is 1830
+PASS baz(object, 895, 1790) is 1832
+PASS baz(object, 896, 1792) is 1834
+PASS baz(object, 897, 1794) is 1836
+PASS baz(object, 898, 1796) is 1838
+PASS baz(object, 899, 1798) is 1840
+PASS baz(object, 900, 1800) is 1842
+PASS baz(object, 901, 1802) is 1844
+PASS baz(object, 902, 1804) is 1846
+PASS baz(object, 903, 1806) is 1848
+PASS baz(object, 904, 1808) is 1850
+PASS baz(object, 905, 1810) is 1852
+PASS baz(object, 906, 1812) is 1854
+PASS baz(object, 907, 1814) is 1856
+PASS baz(object, 908, 1816) is 1858
+PASS baz(object, 909, 1818) is 1860
+PASS baz(object, 910, 1820) is 1862
+PASS baz(object, 911, 1822) is 1864
+PASS baz(object, 912, 1824) is 1866
+PASS baz(object, 913, 1826) is 1868
+PASS baz(object, 914, 1828) is 1870
+PASS baz(object, 915, 1830) is 1872
+PASS baz(object, 916, 1832) is 1874
+PASS baz(object, 917, 1834) is 1876
+PASS baz(object, 918, 1836) is 1878
+PASS baz(object, 919, 1838) is 1880
+PASS baz(object, 920, 1840) is 1882
+PASS baz(object, 921, 1842) is 1884
+PASS baz(object, 922, 1844) is 1886
+PASS baz(object, 923, 1846) is 1888
+PASS baz(object, 924, 1848) is 1890
+PASS baz(object, 925, 1850) is 1892
+PASS baz(object, 926, 1852) is 1894
+PASS baz(object, 927, 1854) is 1896
+PASS baz(object, 928, 1856) is 1898
+PASS baz(object, 929, 1858) is 1900
+PASS baz(object, 930, 1860) is 1902
+PASS baz(object, 931, 1862) is 1904
+PASS baz(object, 932, 1864) is 1906
+PASS baz(object, 933, 1866) is 1908
+PASS baz(object, 934, 1868) is 1910
+PASS baz(object, 935, 1870) is 1912
+PASS baz(object, 936, 1872) is 1914
+PASS baz(object, 937, 1874) is 1916
+PASS baz(object, 938, 1876) is 1918
+PASS baz(object, 939, 1878) is 1920
+PASS baz(object, 940, 1880) is 1922
+PASS baz(object, 941, 1882) is 1924
+PASS baz(object, 942, 1884) is 1926
+PASS baz(object, 943, 1886) is 1928
+PASS baz(object, 944, 1888) is 1930
+PASS baz(object, 945, 1890) is 1932
+PASS baz(object, 946, 1892) is 1934
+PASS baz(object, 947, 1894) is 1936
+PASS baz(object, 948, 1896) is 1938
+PASS baz(object, 949, 1898) is 1940
+PASS baz(object, 950, 1900) is 1942
+PASS baz(object, 951, 1902) is 1944
+PASS baz(object, 952, 1904) is 1946
+PASS baz(object, 953, 1906) is 1948
+PASS baz(object, 954, 1908) is 1950
+PASS baz(object, 955, 1910) is 1952
+PASS baz(object, 956, 1912) is 1954
+PASS baz(object, 957, 1914) is 1956
+PASS baz(object, 958, 1916) is 1958
+PASS baz(object, 959, 1918) is 1960
+PASS baz(object, 960, 1920) is 1962
+PASS baz(object, 961, 1922) is 1964
+PASS baz(object, 962, 1924) is 1966
+PASS baz(object, 963, 1926) is 1968
+PASS baz(object, 964, 1928) is 1970
+PASS baz(object, 965, 1930) is 1972
+PASS baz(object, 966, 1932) is 1974
+PASS baz(object, 967, 1934) is 1976
+PASS baz(object, 968, 1936) is 1978
+PASS baz(object, 969, 1938) is 1980
+PASS baz(object, 970, 1940) is 1982
+PASS baz(object, 971, 1942) is 1984
+PASS baz(object, 972, 1944) is 1986
+PASS baz(object, 973, 1946) is 1988
+PASS baz(object, 974, 1948) is 1990
+PASS baz(object, 975, 1950) is 1992
+PASS baz(object, 976, 1952) is 1994
+PASS baz(object, 977, 1954) is 1996
+PASS baz(object, 978, 1956) is 1998
+PASS baz(object, 979, 1958) is 2000
+PASS baz(object, 980, 1960) is 2002
+PASS baz(object, 981, 1962) is 2004
+PASS baz(object, 982, 1964) is 2006
+PASS baz(object, 983, 1966) is 2008
+PASS baz(object, 984, 1968) is 2010
+PASS baz(object, 985, 1970) is 2012
+PASS baz(object, 986, 1972) is 2014
+PASS baz(object, 987, 1974) is 2016
+PASS baz(object, 988, 1976) is 2018
+PASS baz(object, 989, 1978) is 2020
+PASS baz(object, 990, 1980) is 2022
+PASS baz(object, 991, 1982) is 2024
+PASS baz(object, 992, 1984) is 2026
+PASS baz(object, 993, 1986) is 2028
+PASS baz(object, 994, 1988) is 2030
+PASS baz(object, 995, 1990) is 2032
+PASS baz(object, 996, 1992) is 2034
+PASS baz(object, 997, 1994) is 2036
+PASS baz(object, 998, 1996) is 2038
+PASS baz(object, 999, 1998) is 2040
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-intrinsic-unused-this-method-check.js b/deps/v8/test/webkit/dfg-intrinsic-unused-this-method-check.js
new file mode 100644 (file)
index 0000000..4424400
--- /dev/null
@@ -0,0 +1,50 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that doing intrinsic function optimization does not result in this being lost entirely, if method check optimizations succeed."
+);
+
+function bar(a, b) {
+    return this.f + Math.max(a, b);
+}
+
+function baz(o, a, b) {
+    return o.stuff(a, b);
+}
+
+var functionToCall = Math.max;
+var offset = 0;
+for (var i = 0; i < 1000; ++i) {
+    if (i == 600) {
+        functionToCall = bar;
+        offset = 42;
+    }
+
+    var object = {};
+    object.stuff = functionToCall;
+    object.f = 42;
+
+    shouldBe("baz(object, " + i + ", " + (i * 2) + ")", "" + (offset + Math.max(i, i * 2)));
+}
+
diff --git a/deps/v8/test/webkit/dfg-intrinsic-unused-this.js b/deps/v8/test/webkit/dfg-intrinsic-unused-this.js
new file mode 100644 (file)
index 0000000..f7d3aa5
--- /dev/null
@@ -0,0 +1,53 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that doing intrinsic function optimization does not result in this being lost entirely."
+);
+
+function bar(a, b) {
+    return this.f + Math.max(a, b);
+}
+
+function baz(o, a, b) {
+    return o.stuff(a, b);
+}
+
+var functionToCall = Math.max;
+var offset = 0;
+for (var i = 0; i < 1000; ++i) {
+    if (i == 600) {
+        functionToCall = bar;
+        offset = 42;
+    }
+
+    // Create some bizzare object to prevent method_check optimizations, since those will result in
+    // a failure while the function is still live.
+    var object = {};
+    object["a" + i] = i;
+    object.stuff = functionToCall;
+    object.f = 42;
+
+    shouldBe("baz(object, " + i + ", " + (i * 2) + ")", "" + (offset + Math.max(i, i * 2)));
+}
+
diff --git a/deps/v8/test/webkit/dfg-max-backwards-propagation-expected.txt b/deps/v8/test/webkit/dfg-max-backwards-propagation-expected.txt
new file mode 100644 (file)
index 0000000..28a9aa2
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG knows that a function that appears like Math.max could potentially use value in arbitrary ways, and not just in a context that converts values to numbers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(bar, [, 1.5], 0) is void 0
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-max-backwards-propagation.js b/deps/v8/test/webkit/dfg-max-backwards-propagation.js
new file mode 100644 (file)
index 0000000..b4041e1
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG knows that a function that appears like Math.max could potentially use value in arbitrary ways, and not just in a context that converts values to numbers."
+);
+
+function foo(f, array, i) {
+    return f(array[i], 2.5);
+}
+
+function bar(value) {
+    return value;
+}
+
+for (var i = 0; i < 200; ++i) {
+    var f, array, expected;
+    if (i == 190) {
+        f = "bar";
+        array = "[, 1.5]";
+        expected = "void 0";
+    } else {
+        f = "Math.max";
+        array = "[1.5]";
+        expected = "Math.max(1.5, 2.5)";
+    }
+    shouldBe("foo(" + f + ", " + array + ", 0)", expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-min-backwards-propagation-expected.txt b/deps/v8/test/webkit/dfg-min-backwards-propagation-expected.txt
new file mode 100644 (file)
index 0000000..6a7f8aa
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG knows that a function that appears like Math.min could potentially use value in arbitrary ways, and not just in a context that converts values to numbers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(bar, [, 1.5], 0) is void 0
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-min-backwards-propagation.js b/deps/v8/test/webkit/dfg-min-backwards-propagation.js
new file mode 100644 (file)
index 0000000..835aefa
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG knows that a function that appears like Math.min could potentially use value in arbitrary ways, and not just in a context that converts values to numbers."
+);
+
+function foo(f, array, i) {
+    return f(array[i], 2.5);
+}
+
+function bar(value) {
+    return value;
+}
+
+for (var i = 0; i < 200; ++i) {
+    var f, array, expected;
+    if (i == 190) {
+        f = "bar";
+        array = "[, 1.5]";
+        expected = "void 0";
+    } else {
+        f = "Math.min";
+        array = "[1.5]";
+        expected = "Math.min(1.5, 2.5)";
+    }
+    shouldBe("foo(" + f + ", " + array + ", 0)", expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-min-max-expected.txt b/deps/v8/test/webkit/dfg-min-max-expected.txt
new file mode 100644 (file)
index 0000000..fda7fee
--- /dev/null
@@ -0,0 +1,50 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that Math.min and Math.max for doubles works correctly in the DFG JIT.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS doMin(1.5, 2.5) is 1.5
+PASS doMin(2.5, 1.5) is 1.5
+PASS doMin(1.5, 1.5) is 1.5
+PASS doMin(2.5, 2.5) is 2.5
+PASS doMin(1.5, NaN) is NaN
+PASS doMin(2.5, NaN) is NaN
+PASS doMin(NaN, 1.5) is NaN
+PASS doMin(NaN, 2.5) is NaN
+PASS doMin(NaN, NaN) is NaN
+PASS doMax(1.5, 2.5) is 2.5
+PASS doMax(2.5, 1.5) is 2.5
+PASS doMax(1.5, 1.5) is 1.5
+PASS doMax(2.5, 2.5) is 2.5
+PASS doMax(1.5, NaN) is NaN
+PASS doMax(2.5, NaN) is NaN
+PASS doMax(NaN, 1.5) is NaN
+PASS doMax(NaN, 2.5) is NaN
+PASS doMax(NaN, NaN) is NaN
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-min-max.js b/deps/v8/test/webkit/dfg-min-max.js
new file mode 100644 (file)
index 0000000..da47ca2
--- /dev/null
@@ -0,0 +1,65 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that Math.min and Math.max for doubles works correctly in the DFG JIT."
+);
+
+function doMin(a, b) {
+    return Math.min(a, b);
+}
+
+function doMax(a, b) {
+    return Math.max(a, b);
+}
+
+for (var i = 0; i < 1000; ++i) {
+    doMin(1.5, 2.5);
+    doMax(1.5, 2.5);
+}
+
+shouldBe("doMin(1.5, 2.5)", "1.5");
+shouldBe("doMin(2.5, 1.5)", "1.5");
+shouldBe("doMin(1.5, 1.5)", "1.5");
+shouldBe("doMin(2.5, 2.5)", "2.5");
+
+shouldBe("doMin(1.5, NaN)", "NaN");
+shouldBe("doMin(2.5, NaN)", "NaN");
+shouldBe("doMin(NaN, 1.5)", "NaN");
+shouldBe("doMin(NaN, 2.5)", "NaN");
+
+shouldBe("doMin(NaN, NaN)", "NaN");
+
+shouldBe("doMax(1.5, 2.5)", "2.5");
+shouldBe("doMax(2.5, 1.5)", "2.5");
+shouldBe("doMax(1.5, 1.5)", "1.5");
+shouldBe("doMax(2.5, 2.5)", "2.5");
+
+shouldBe("doMax(1.5, NaN)", "NaN");
+shouldBe("doMax(2.5, NaN)", "NaN");
+shouldBe("doMax(NaN, 1.5)", "NaN");
+shouldBe("doMax(NaN, 2.5)", "NaN");
+
+shouldBe("doMax(NaN, NaN)", "NaN");
+
+var successfullyParsed = true;
diff --git a/deps/v8/test/webkit/dfg-mispredict-variable-but-prove-int-expected.txt b/deps/v8/test/webkit/dfg-mispredict-variable-but-prove-int-expected.txt
new file mode 100644 (file)
index 0000000..9a5eedf
--- /dev/null
@@ -0,0 +1,233 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a variable predicted to be either int or double but proven to be an int does confuse the Branch logic.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(0, 1, 0) is 0.5
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-mispredict-variable-but-prove-int.js b/deps/v8/test/webkit/dfg-mispredict-variable-but-prove-int.js
new file mode 100644 (file)
index 0000000..c312670
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a variable predicted to be either int or double but proven to be an int does confuse the Branch logic."
+);
+
+function foo(a, b, c) {
+    a = b;
+    if (c) {
+        if (a)
+            return 1;
+        else
+            return 2;
+    } else if (b)
+        a = 0.5;
+    return a;
+}
+
+shouldBe("foo(0, 1, 0)", "0.5");
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(i, i + 1, i + 2)", "1");
+
diff --git a/deps/v8/test/webkit/dfg-mul-big-integer-with-small-integer-and-bitor-expected.txt b/deps/v8/test/webkit/dfg-mul-big-integer-with-small-integer-and-bitor-expected.txt
new file mode 100644 (file)
index 0000000..13e5ed2
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens when you multiply a big unknown integer with a small known integer and use the result in a bitop.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-mul-big-integer-with-small-integer-and-bitor.js b/deps/v8/test/webkit/dfg-mul-big-integer-with-small-integer-and-bitor.js
new file mode 100644 (file)
index 0000000..51401ea
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens when you multiply a big unknown integer with a small known integer and use the result in a bitop."
+);
+
+function foo(a) {
+    return (a * 65536) | 0;
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo(2147483647)", "-65536");
+
+
+
diff --git a/deps/v8/test/webkit/dfg-mul-big-integer-with-small-integer-and-detect-overflow-expected.txt b/deps/v8/test/webkit/dfg-mul-big-integer-with-small-integer-and-detect-overflow-expected.txt
new file mode 100644 (file)
index 0000000..df0a2ea
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens when you multiply a big unknown integer with a small known integer and detect that we have had an overflow.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-mul-big-integer-with-small-integer-and-detect-overflow.js b/deps/v8/test/webkit/dfg-mul-big-integer-with-small-integer-and-detect-overflow.js
new file mode 100644 (file)
index 0000000..65ed8b7
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens when you multiply a big unknown integer with a small known integer and detect that we have had an overflow."
+);
+
+function foo(a) {
+    return a * 65536;
+}
+
+for (var i = 0; i < 1000; ++i)
+    shouldBe("foo(2147483647)", "140737488289792");
+
+
diff --git a/deps/v8/test/webkit/dfg-mul-big-integer-with-small-integer-expected.txt b/deps/v8/test/webkit/dfg-mul-big-integer-with-small-integer-expected.txt
new file mode 100644 (file)
index 0000000..8e9ed7f
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens when you multiply a big unknown integer with a small known integer.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-mul-big-integer-with-small-integer.js b/deps/v8/test/webkit/dfg-mul-big-integer-with-small-integer.js
new file mode 100644 (file)
index 0000000..8450ced
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens when you multiply a big unknown integer with a small known integer."
+);
+
+function foo(a) {
+    return a * 65536;
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo(2147483647)", "140737488289792");
diff --git a/deps/v8/test/webkit/dfg-mul-big-integers-expected.txt b/deps/v8/test/webkit/dfg-mul-big-integers-expected.txt
new file mode 100644 (file)
index 0000000..05d8a98
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens when you multiply large integers in an integer context.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-mul-big-integers.js b/deps/v8/test/webkit/dfg-mul-big-integers.js
new file mode 100644 (file)
index 0000000..0176a25
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens when you multiply large integers in an integer context."
+);
+
+function foo(a, b) {
+    return (a * b) | 0;
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo(2147483647, 2147483646)", "-2147483648");
+
+
diff --git a/deps/v8/test/webkit/dfg-multi-basic-block-structure-clobber-expected.txt b/deps/v8/test/webkit/dfg-multi-basic-block-structure-clobber-expected.txt
new file mode 100644 (file)
index 0000000..6912efb
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that a structure clobber in a basic block that does not touch a live variable causes that variable's structure to be correctly clobbered.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-multi-basic-block-structure-clobber.js b/deps/v8/test/webkit/dfg-multi-basic-block-structure-clobber.js
new file mode 100644 (file)
index 0000000..a4d8bdb
--- /dev/null
@@ -0,0 +1,56 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that a structure clobber in a basic block that does not touch a live variable causes that variable's structure to be correctly clobbered."
+);
+
+var clobberedObject;
+
+function bar() {
+    if (!clobberedObject)
+        return;
+    delete clobberedObject.f;
+    clobberedObject.g = 42;
+}
+
+function foo(p, o_) {
+    var o = o_.f; // Force this block to have a SetLocal.
+    var x = o.f;
+    if (p)
+        bar();
+    return x + o.f;
+}
+
+var expected = 2;
+
+for (var i = 0; i < 200; ++i) {
+    var object = {f:1};
+    var predicate = true;
+    if (i >= 150) {
+        clobberedObject = object;
+        expected = 0/0; // "NaN"
+    }
+    shouldBe("foo(predicate, {f:object})", "" + expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-multiply-expected.txt b/deps/v8/test/webkit/dfg-multiply-expected.txt
new file mode 100644 (file)
index 0000000..8cffb7e
--- /dev/null
@@ -0,0 +1,1052 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that the DFG can multiply numbers correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1073741824) is 2147483648
+PASS doMultiplyConstant2(2147483648) is 4294967296
+PASS doMultiplyConstant3(1073741824) is 3221225472
+PASS doMultiplyConstant3(2147483648) is 6442450944
+PASS doMultiplyConstant4(1073741824) is 4294967296
+PASS doMultiplyConstant4(2147483648) is 8589934592
+PASS doMultiplyConstant2(-1073741824) is -2147483648
+PASS doMultiplyConstant2(-2147483648) is -4294967296
+PASS doMultiplyConstant3(-1073741824) is -3221225472
+PASS doMultiplyConstant3(-2147483648) is -6442450944
+PASS doMultiplyConstant4(-1073741824) is -4294967296
+PASS doMultiplyConstant4(-2147483648) is -8589934592
+PASS doMultiplyConstant2(1073741824) is 2147483648
+PASS doMultiplyConstant2(2147483648) is 4294967296
+PASS doMultiplyConstant3(1073741824) is 3221225472
+PASS doMultiplyConstant3(2147483648) is 6442450944
+PASS doMultiplyConstant4(1073741824) is 4294967296
+PASS doMultiplyConstant4(2147483648) is 8589934592
+PASS doMultiplyConstant2(-1073741824) is -2147483648
+PASS doMultiplyConstant2(-2147483648) is -4294967296
+PASS doMultiplyConstant3(-1073741824) is -3221225472
+PASS doMultiplyConstant3(-2147483648) is -6442450944
+PASS doMultiplyConstant4(-1073741824) is -4294967296
+PASS doMultiplyConstant4(-2147483648) is -8589934592
+PASS doMultiplyConstant2(1073741824) is 2147483648
+PASS doMultiplyConstant2(2147483648) is 4294967296
+PASS doMultiplyConstant3(1073741824) is 3221225472
+PASS doMultiplyConstant3(2147483648) is 6442450944
+PASS doMultiplyConstant4(1073741824) is 4294967296
+PASS doMultiplyConstant4(2147483648) is 8589934592
+PASS doMultiplyConstant2(-1073741824) is -2147483648
+PASS doMultiplyConstant2(-2147483648) is -4294967296
+PASS doMultiplyConstant3(-1073741824) is -3221225472
+PASS doMultiplyConstant3(-2147483648) is -6442450944
+PASS doMultiplyConstant4(-1073741824) is -4294967296
+PASS doMultiplyConstant4(-2147483648) is -8589934592
+PASS doMultiplyConstant2(1073741824) is 2147483648
+PASS doMultiplyConstant2(2147483648) is 4294967296
+PASS doMultiplyConstant3(1073741824) is 3221225472
+PASS doMultiplyConstant3(2147483648) is 6442450944
+PASS doMultiplyConstant4(1073741824) is 4294967296
+PASS doMultiplyConstant4(2147483648) is 8589934592
+PASS doMultiplyConstant2(-1073741824) is -2147483648
+PASS doMultiplyConstant2(-2147483648) is -4294967296
+PASS doMultiplyConstant3(-1073741824) is -3221225472
+PASS doMultiplyConstant3(-2147483648) is -6442450944
+PASS doMultiplyConstant4(-1073741824) is -4294967296
+PASS doMultiplyConstant4(-2147483648) is -8589934592
+PASS doMultiplyConstant2(1073741824) is 2147483648
+PASS doMultiplyConstant2(2147483648) is 4294967296
+PASS doMultiplyConstant3(1073741824) is 3221225472
+PASS doMultiplyConstant3(2147483648) is 6442450944
+PASS doMultiplyConstant4(1073741824) is 4294967296
+PASS doMultiplyConstant4(2147483648) is 8589934592
+PASS doMultiplyConstant2(-1073741824) is -2147483648
+PASS doMultiplyConstant2(-2147483648) is -4294967296
+PASS doMultiplyConstant3(-1073741824) is -3221225472
+PASS doMultiplyConstant3(-2147483648) is -6442450944
+PASS doMultiplyConstant4(-1073741824) is -4294967296
+PASS doMultiplyConstant4(-2147483648) is -8589934592
+PASS doMultiplyConstant2(1073741824) is 2147483648
+PASS doMultiplyConstant2(2147483648) is 4294967296
+PASS doMultiplyConstant3(1073741824) is 3221225472
+PASS doMultiplyConstant3(2147483648) is 6442450944
+PASS doMultiplyConstant4(1073741824) is 4294967296
+PASS doMultiplyConstant4(2147483648) is 8589934592
+PASS doMultiplyConstant2(-1073741824) is -2147483648
+PASS doMultiplyConstant2(-2147483648) is -4294967296
+PASS doMultiplyConstant3(-1073741824) is -3221225472
+PASS doMultiplyConstant3(-2147483648) is -6442450944
+PASS doMultiplyConstant4(-1073741824) is -4294967296
+PASS doMultiplyConstant4(-2147483648) is -8589934592
+PASS doMultiplyConstant2(1073741824) is 2147483648
+PASS doMultiplyConstant2(2147483648) is 4294967296
+PASS doMultiplyConstant3(1073741824) is 3221225472
+PASS doMultiplyConstant3(2147483648) is 6442450944
+PASS doMultiplyConstant4(1073741824) is 4294967296
+PASS doMultiplyConstant4(2147483648) is 8589934592
+PASS doMultiplyConstant2(-1073741824) is -2147483648
+PASS doMultiplyConstant2(-2147483648) is -4294967296
+PASS doMultiplyConstant3(-1073741824) is -3221225472
+PASS doMultiplyConstant3(-2147483648) is -6442450944
+PASS doMultiplyConstant4(-1073741824) is -4294967296
+PASS doMultiplyConstant4(-2147483648) is -8589934592
+PASS doMultiplyConstant2(1073741824) is 2147483648
+PASS doMultiplyConstant2(2147483648) is 4294967296
+PASS doMultiplyConstant3(1073741824) is 3221225472
+PASS doMultiplyConstant3(2147483648) is 6442450944
+PASS doMultiplyConstant4(1073741824) is 4294967296
+PASS doMultiplyConstant4(2147483648) is 8589934592
+PASS doMultiplyConstant2(-1073741824) is -2147483648
+PASS doMultiplyConstant2(-2147483648) is -4294967296
+PASS doMultiplyConstant3(-1073741824) is -3221225472
+PASS doMultiplyConstant3(-2147483648) is -6442450944
+PASS doMultiplyConstant4(-1073741824) is -4294967296
+PASS doMultiplyConstant4(-2147483648) is -8589934592
+PASS doMultiplyConstant2(1073741824) is 2147483648
+PASS doMultiplyConstant2(2147483648) is 4294967296
+PASS doMultiplyConstant3(1073741824) is 3221225472
+PASS doMultiplyConstant3(2147483648) is 6442450944
+PASS doMultiplyConstant4(1073741824) is 4294967296
+PASS doMultiplyConstant4(2147483648) is 8589934592
+PASS doMultiplyConstant2(-1073741824) is -2147483648
+PASS doMultiplyConstant2(-2147483648) is -4294967296
+PASS doMultiplyConstant3(-1073741824) is -3221225472
+PASS doMultiplyConstant3(-2147483648) is -6442450944
+PASS doMultiplyConstant4(-1073741824) is -4294967296
+PASS doMultiplyConstant4(-2147483648) is -8589934592
+PASS doMultiplyConstant2(1073741824) is 2147483648
+PASS doMultiplyConstant2(2147483648) is 4294967296
+PASS doMultiplyConstant3(1073741824) is 3221225472
+PASS doMultiplyConstant3(2147483648) is 6442450944
+PASS doMultiplyConstant4(1073741824) is 4294967296
+PASS doMultiplyConstant4(2147483648) is 8589934592
+PASS doMultiplyConstant2(-1073741824) is -2147483648
+PASS doMultiplyConstant2(-2147483648) is -4294967296
+PASS doMultiplyConstant3(-1073741824) is -3221225472
+PASS doMultiplyConstant3(-2147483648) is -6442450944
+PASS doMultiplyConstant4(-1073741824) is -4294967296
+PASS doMultiplyConstant4(-2147483648) is -8589934592
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-multiply.js b/deps/v8/test/webkit/dfg-multiply.js
new file mode 100644 (file)
index 0000000..95f278f
--- /dev/null
@@ -0,0 +1,68 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that the DFG can multiply numbers correctly."
+);
+
+function doMultiplyConstant2(a) {
+    return a * 2;
+}
+
+function doMultiplyConstant3(a) {
+    return a * 3;
+}
+
+function doMultiplyConstant4(a) {
+    return a * 4;
+}
+
+// Get it to compile.
+for (var i = 0; i < 100; ++i) {
+    shouldBe("doMultiplyConstant2(1)", "2");
+    shouldBe("doMultiplyConstant2(2)", "4");
+    shouldBe("doMultiplyConstant2(4)", "8");
+    shouldBe("doMultiplyConstant3(1)", "3");
+    shouldBe("doMultiplyConstant3(2)", "6");
+    shouldBe("doMultiplyConstant3(4)", "12");
+    shouldBe("doMultiplyConstant4(1)", "4");
+    shouldBe("doMultiplyConstant4(2)", "8");
+    shouldBe("doMultiplyConstant4(4)", "16");
+}
+
+// Now do evil.
+for (var i = 0; i < 10; ++i) {
+    shouldBe("doMultiplyConstant2(1073741824)", "2147483648");
+    shouldBe("doMultiplyConstant2(2147483648)", "4294967296");
+    shouldBe("doMultiplyConstant3(1073741824)", "3221225472");
+    shouldBe("doMultiplyConstant3(2147483648)", "6442450944");
+    shouldBe("doMultiplyConstant4(1073741824)", "4294967296");
+    shouldBe("doMultiplyConstant4(2147483648)", "8589934592");
+    shouldBe("doMultiplyConstant2(-1073741824)", "-2147483648");
+    shouldBe("doMultiplyConstant2(-2147483648)", "-4294967296");
+    shouldBe("doMultiplyConstant3(-1073741824)", "-3221225472");
+    shouldBe("doMultiplyConstant3(-2147483648)", "-6442450944");
+    shouldBe("doMultiplyConstant4(-1073741824)", "-4294967296");
+    shouldBe("doMultiplyConstant4(-2147483648)", "-8589934592");
+}
+
diff --git a/deps/v8/test/webkit/dfg-negative-array-index-expected.txt b/deps/v8/test/webkit/dfg-negative-array-index-expected.txt
new file mode 100644 (file)
index 0000000..30d6a27
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that storing into a negative array index works right.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-negative-array-index.js b/deps/v8/test/webkit/dfg-negative-array-index.js
new file mode 100644 (file)
index 0000000..f23c7fb
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that storing into a negative array index works right."
+);
+
+function foo(a, i) {
+    a[i] = 42;
+}
+
+for (var i = 0; i < 100; ++i) {
+    var array = [];
+    foo(array, -1);
+    shouldBe("array[-1]", "42");
+}
+
diff --git a/deps/v8/test/webkit/dfg-obvious-constant-cfa-expected.txt b/deps/v8/test/webkit/dfg-obvious-constant-cfa-expected.txt
new file mode 100644 (file)
index 0000000..465a41d
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that if the CFA performs constant folding on an obvious set and then get of a captured local, then we don't crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is 228300
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-obvious-constant-cfa.js b/deps/v8/test/webkit/dfg-obvious-constant-cfa.js
new file mode 100644 (file)
index 0000000..fc5d3d6
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that if the CFA performs constant folding on an obvious set and then get of a captured local, then we don't crash."
+);
+
+function bar(a, b) {
+    var x;
+    var y;
+    function baz() {
+        return x + y;
+    }
+    x = 13;
+    y = 16;
+    if (y == 16) {
+        return x + a + b + baz();
+    } else
+        return 24;
+}
+
+var result = 0;
+for (var i = 0; i < 200; ++i)
+    result += bar(i, 1000);
+
+shouldBe("result", "228300");
diff --git a/deps/v8/test/webkit/dfg-other-branch-expected.txt b/deps/v8/test/webkit/dfg-other-branch-expected.txt
new file mode 100644 (file)
index 0000000..6ace446
--- /dev/null
@@ -0,0 +1,52 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that speculating other on a branch does not corrupt state.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo({f:i}) is "no"
+PASS foo({f:i}) is "yes"
+PASS foo({f:i}) is "yes"
+PASS foo({f:i}) is "yes"
+PASS foo({f:i}) is "yes"
+PASS foo({f:i}) is "yes"
+PASS foo({f:i}) is "yes"
+PASS foo({f:i}) is "yes"
+PASS foo({f:i}) is "yes"
+PASS foo({f:i}) is "yes"
+PASS bar({f:i}) is true
+PASS bar({f:i}) is false
+PASS bar({f:i}) is false
+PASS bar({f:i}) is false
+PASS bar({f:i}) is false
+PASS bar({f:i}) is false
+PASS bar({f:i}) is false
+PASS bar({f:i}) is false
+PASS bar({f:i}) is false
+PASS bar({f:i}) is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-other-branch.js b/deps/v8/test/webkit/dfg-other-branch.js
new file mode 100644 (file)
index 0000000..6aa22dc
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that speculating other on a branch does not corrupt state."
+);
+
+function foo(a) {
+    if (a.f)
+        return "yes";
+    else
+        return "no";
+}
+
+function bar(a) {
+    return !a.f;
+}
+
+for (var i = 0; i < 100; ++i)
+    foo({f:void(0)});
+
+for (var i = 0; i < 10; ++i)
+    shouldBe("foo({f:i})", i ? "\"yes\"" : "\"no\"");
+
+for (var i = 0; i < 100; ++i)
+    bar({f:void(0)});
+
+for (var i = 0; i < 10; ++i)
+    shouldBe("bar({f:i})", i ? "false" : "true");
+
+var successfullyParsed = true;
diff --git a/deps/v8/test/webkit/dfg-patchable-get-by-id-after-watchpoint-expected.txt b/deps/v8/test/webkit/dfg-patchable-get-by-id-after-watchpoint-expected.txt
new file mode 100644 (file)
index 0000000..d78f345
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that a patchable GetById right after a watchpoint has the appropriate nop padding.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-patchable-get-by-id-after-watchpoint.js b/deps/v8/test/webkit/dfg-patchable-get-by-id-after-watchpoint.js
new file mode 100644 (file)
index 0000000..9866126
--- /dev/null
@@ -0,0 +1,70 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that a patchable GetById right after a watchpoint has the appropriate nop padding."
+);
+
+function foo(o, p) {
+    var a = p.f;
+    var b = o.f; // Watchpoint.
+    var c = p.g; // Patchable GetById.
+    return b(a + c);
+}
+
+function O() {
+}
+
+O.prototype.f = function(x) { return x + 1; };
+
+var o = new O();
+
+function P1() {
+}
+
+P1.prototype.g = 42;
+
+function P2() {
+}
+
+P2.prototype.g = 24;
+
+var p1 = new P1();
+var p2 = new P2();
+
+p1.f = 1;
+p2.f = 2;
+
+for (var i = 0; i < 200; ++i) {
+    var p = (i % 2) ? p1 : p2;
+    var expected = (i % 2) ? 44 : 27;
+    if (i == 150) {
+        // Cause first the watchpoint on o.f to fire, and then the GetById
+        // to be reset.
+        O.prototype.g = 57; // Fire the watchpoint.
+        P1.prototype.h = 58; // Reset the GetById.
+        P2.prototype.h = 59; // Not necessary, but what the heck - this resets the GetById even more.
+    }
+    shouldBe("foo(o, p)", "" + expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object-expected.txt b/deps/v8/test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object-expected.txt
new file mode 100644 (file)
index 0000000..fb9ff07
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the peephole CompareEq optimization for the case where one side is predicted final object and the other side is predicted either final object or other (i.e. null or undefined) doesn't assert when both sides are also proven final object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object.js b/deps/v8/test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object.js
new file mode 100644 (file)
index 0000000..f8a6794
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the peephole CompareEq optimization for the case where one side is predicted final object and the other side is predicted either final object or other (i.e. null or undefined) doesn't assert when both sides are also proven final object."
+);
+
+function foo(a, b) {
+    var result = [];
+    result.push(a.f);
+    result.push(b.f);
+    if (a == b)
+        result.push(true);
+    else
+        result.push(false);
+    return result;
+}
+
+for (var i = 0; i < 100; ++i) {
+    if (i%2) {
+        var o = {f:42};
+        shouldBe("foo(o, o)", "[42, 42, true]");
+    } else
+        shouldThrow("foo({f:42}, null)");
+}
+
diff --git a/deps/v8/test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object-expected.txt b/deps/v8/test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object-expected.txt
new file mode 100644 (file)
index 0000000..52ca1ea
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the peephole CompareEq optimization for the case where one side is predicted final object and the other side is predicted either final object or other (i.e. null or undefined) doesn't assert when the other side is also proven final object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object.js b/deps/v8/test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object.js
new file mode 100644 (file)
index 0000000..5e27539
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the peephole CompareEq optimization for the case where one side is predicted final object and the other side is predicted either final object or other (i.e. null or undefined) doesn't assert when the other side is also proven final object."
+);
+
+function foo(a, b) {
+    var result = [];
+    result.push(b.f);
+    if (a == b)
+        result.push(true);
+    else
+        result.push(false);
+    return result;
+}
+
+for (var i = 0; i < 100; ++i) {
+    if (i%2) {
+        var o = {f:42};
+        shouldBe("foo(o, o)", "[42, true]");
+    } else
+        shouldThrow("foo({f:42}, null)");
+}
+
diff --git a/deps/v8/test/webkit/dfg-phantom-base-expected.txt b/deps/v8/test/webkit/dfg-phantom-base-expected.txt
new file mode 100644 (file)
index 0000000..15e7a99
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we use Phantom on the base of put_by_base correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-phantom-base.js b/deps/v8/test/webkit/dfg-phantom-base.js
new file mode 100644 (file)
index 0000000..f881b89
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we use Phantom on the base of put_by_base correctly."
+);
+
+function foo(o) {
+    var x = o;
+    var y = o.f;
+    if (y) {
+        o.g.h;
+        return !x;
+    }
+
+    // Do things to ensure that the structure check on o is not hoisted.
+    return o + o + o + o + o;
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}})", "false");
+
diff --git a/deps/v8/test/webkit/dfg-phantom-get-local-expected.txt b/deps/v8/test/webkit/dfg-phantom-get-local-expected.txt
new file mode 100644 (file)
index 0000000..df9d7ac
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that Phantom(GetLocal) is treated as being relevant to OSR.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-phantom-get-local.js b/deps/v8/test/webkit/dfg-phantom-get-local.js
new file mode 100644 (file)
index 0000000..d813436
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that Phantom(GetLocal) is treated as being relevant to OSR."
+);
+
+function foo(o) {
+    var x = o;
+    var y = o.f;
+    if (y) {
+        o.g.h;
+        return !x;
+    }
+
+    // Do things to ensure that the structure check on o is not hoisted.
+    return o + o + o + o + o;
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}})", "false");
+
diff --git a/deps/v8/test/webkit/dfg-post-inc-then-exit-expected.txt b/deps/v8/test/webkit/dfg-post-inc-then-exit-expected.txt
new file mode 100644 (file)
index 0000000..bbae5ca
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens if you post-inc and then OSR exit.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-post-inc-then-exit.js b/deps/v8/test/webkit/dfg-post-inc-then-exit.js
new file mode 100644 (file)
index 0000000..ddcc3e4
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens if you post-inc and then OSR exit."
+);
+
+function foo(o, i) {
+    o.f.f = i++;
+}
+
+for (var i = 0; i < 100; ++i) {
+    var o = {};
+    if (i == 99)
+        o.f = 42;
+    foo({f:o}, 0);
+    shouldBe("o.f", "0");
+}
diff --git a/deps/v8/test/webkit/dfg-proto-access-inline-osr-exit-expected.txt b/deps/v8/test/webkit/dfg-proto-access-inline-osr-exit-expected.txt
new file mode 100644 (file)
index 0000000..2a29f31
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens when we OSR exit on an inlined prototype access due to a change in the prototype chain.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-proto-access-inline-osr-exit.js b/deps/v8/test/webkit/dfg-proto-access-inline-osr-exit.js
new file mode 100644 (file)
index 0000000..3529980
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens when we OSR exit on an inlined prototype access due to a change in the prototype chain."
+);
+
+function foo(o) {
+    return o.g.f;
+}
+
+function Thingy() {
+}
+
+var myProto = {f:42};
+
+Thingy.prototype = myProto;
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150)
+        myProto.g = 67;
+    shouldBe("foo({g:new Thingy()})", "42");
+}
+
diff --git a/deps/v8/test/webkit/dfg-proto-stub-watchpoint-fire-expected.txt b/deps/v8/test/webkit/dfg-proto-stub-watchpoint-fire-expected.txt
new file mode 100644 (file)
index 0000000..eb91188
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we don't crash if a watchpoint on prototype access stubs is fired.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-proto-stub-watchpoint-fire.js b/deps/v8/test/webkit/dfg-proto-stub-watchpoint-fire.js
new file mode 100644 (file)
index 0000000..45e9dbd
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we don't crash if a watchpoint on prototype access stubs is fired."
+);
+
+function A() { }
+function B() { }
+
+A.prototype.f = 42;
+B.prototype.f = 43;
+
+
+function foo(o) {
+    return o.f;
+}
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150)
+        A.prototype.g = 63;
+    shouldBe("foo((i % 2) ? new A() : new B())", "" + ((i % 2) ? 42 : 43));
+}
diff --git a/deps/v8/test/webkit/dfg-proven-sqrt-backwards-propagation-expected.txt b/deps/v8/test/webkit/dfg-proven-sqrt-backwards-propagation-expected.txt
new file mode 100644 (file)
index 0000000..fdb5334
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG knows that a Math.sqrt could potentially use value in arbitrary ways, and not just in a context that converts values to numbers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is void 0
+PASS foo(array, 0) is void 0
+PASS foo(array, 0) is void 0
+PASS foo(array, 0) is void 0
+PASS foo(array, 0) is void 0
+PASS foo(array, 0) is void 0
+PASS foo(array, 0) is void 0
+PASS foo(array, 0) is void 0
+PASS foo(array, 0) is void 0
+PASS foo(array, 0) is void 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-proven-sqrt-backwards-propagation.js b/deps/v8/test/webkit/dfg-proven-sqrt-backwards-propagation.js
new file mode 100644 (file)
index 0000000..5bc66d9
--- /dev/null
@@ -0,0 +1,50 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG knows that a Math.sqrt could potentially use value in arbitrary ways, and not just in a context that converts values to numbers."
+);
+
+function foo(array, i) {
+    var x = array[i];
+    return Math.sqrt(x);
+}
+
+function bar(value) {
+    return value;
+}
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 190)
+        Math.sqrt = bar;
+    var array, expected;
+    if (i >= 190) {
+        array = [, 1.5];
+        expected = "void 0";
+    } else {
+        array = [1.5];
+        expected = "Math.sqrt(1.5)";
+    }
+    shouldBe("foo(array, 0)", expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-put-by-id-allocate-storage-expected.txt b/deps/v8/test/webkit/dfg-put-by-id-allocate-storage-expected.txt
new file mode 100644 (file)
index 0000000..0f3b10e
--- /dev/null
@@ -0,0 +1,1082 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a DFG PutById that allocates property storage works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-put-by-id-allocate-storage-polymorphic-expected.txt b/deps/v8/test/webkit/dfg-put-by-id-allocate-storage-polymorphic-expected.txt
new file mode 100644 (file)
index 0000000..192e923
--- /dev/null
@@ -0,0 +1,1232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a polymorphic DFG PutById that allocates property storage works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-put-by-id-allocate-storage-polymorphic.js b/deps/v8/test/webkit/dfg-put-by-id-allocate-storage-polymorphic.js
new file mode 100644 (file)
index 0000000..5a8e2c0
--- /dev/null
@@ -0,0 +1,58 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a polymorphic DFG PutById that allocates property storage works."
+);
+
+function foo(o) {
+    o.a = 1;
+    o.b = 2;
+    o.c = 3;
+    o.d = 4;
+    o.e = 5;
+    o.f = 6;
+    o.g = 7;
+}
+
+for (var i = 0; i < 150; ++i) {
+    var o;
+    if (i % 2)
+        o = {};
+    else
+        o = {foo: 42};
+    foo(o);
+    shouldBe("o.a", "1");
+    shouldBe("o.b", "2");
+    shouldBe("o.c", "3");
+    shouldBe("o.d", "4");
+    shouldBe("o.e", "5");
+    shouldBe("o.f", "6");
+    shouldBe("o.g", "7");
+    if (!(i % 2))
+        shouldBe("o.foo", "42");
+    else
+        shouldBe("o.foo", "void 0");
+}
+
+
diff --git a/deps/v8/test/webkit/dfg-put-by-id-allocate-storage.js b/deps/v8/test/webkit/dfg-put-by-id-allocate-storage.js
new file mode 100644 (file)
index 0000000..4bd9d45
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a DFG PutById that allocates property storage works."
+);
+
+function foo() {
+    var o = {};
+    o.a = 1;
+    o.b = 2;
+    o.c = 3;
+    o.d = 4;
+    o.e = 5;
+    o.f = 6;
+    o.g = 7;
+    return o;
+}
+
+for (var i = 0; i < 150; ++i) {
+    var o = foo();
+    shouldBe("o.a", "1");
+    shouldBe("o.b", "2");
+    shouldBe("o.c", "3");
+    shouldBe("o.d", "4");
+    shouldBe("o.e", "5");
+    shouldBe("o.f", "6");
+    shouldBe("o.g", "7");
+}
+
+
diff --git a/deps/v8/test/webkit/dfg-put-by-id-prototype-check-expected.txt b/deps/v8/test/webkit/dfg-put-by-id-prototype-check-expected.txt
new file mode 100644 (file)
index 0000000..74d9ccb
--- /dev/null
@@ -0,0 +1,1132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG CFA is not overzealous in removing prototype structure checks for put_by_id transitions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o.f is 0
+PASS o.f is 1
+PASS o.f is 2
+PASS o.f is 3
+PASS o.f is 4
+PASS o.f is 5
+PASS o.f is 6
+PASS o.f is 7
+PASS o.f is 8
+PASS o.f is 9
+PASS o.f is 10
+PASS o.f is 11
+PASS o.f is 12
+PASS o.f is 13
+PASS o.f is 14
+PASS o.f is 15
+PASS o.f is 16
+PASS o.f is 17
+PASS o.f is 18
+PASS o.f is 19
+PASS o.f is 20
+PASS o.f is 21
+PASS o.f is 22
+PASS o.f is 23
+PASS o.f is 24
+PASS o.f is 25
+PASS o.f is 26
+PASS o.f is 27
+PASS o.f is 28
+PASS o.f is 29
+PASS o.f is 30
+PASS o.f is 31
+PASS o.f is 32
+PASS o.f is 33
+PASS o.f is 34
+PASS o.f is 35
+PASS o.f is 36
+PASS o.f is 37
+PASS o.f is 38
+PASS o.f is 39
+PASS o.f is 40
+PASS o.f is 41
+PASS o.f is 42
+PASS o.f is 43
+PASS o.f is 44
+PASS o.f is 45
+PASS o.f is 46
+PASS o.f is 47
+PASS o.f is 48
+PASS o.f is 49
+PASS o.f is 50
+PASS o.f is 51
+PASS o.f is 52
+PASS o.f is 53
+PASS o.f is 54
+PASS o.f is 55
+PASS o.f is 56
+PASS o.f is 57
+PASS o.f is 58
+PASS o.f is 59
+PASS o.f is 60
+PASS o.f is 61
+PASS o.f is 62
+PASS o.f is 63
+PASS o.f is 64
+PASS o.f is 65
+PASS o.f is 66
+PASS o.f is 67
+PASS o.f is 68
+PASS o.f is 69
+PASS o.f is 70
+PASS o.f is 71
+PASS o.f is 72
+PASS o.f is 73
+PASS o.f is 74
+PASS o.f is 75
+PASS o.f is 76
+PASS o.f is 77
+PASS o.f is 78
+PASS o.f is 79
+PASS o.f is 80
+PASS o.f is 81
+PASS o.f is 82
+PASS o.f is 83
+PASS o.f is 84
+PASS o.f is 85
+PASS o.f is 86
+PASS o.f is 87
+PASS o.f is 88
+PASS o.f is 89
+PASS o.f is 90
+PASS o.f is 91
+PASS o.f is 92
+PASS o.f is 93
+PASS o.f is 94
+PASS o.f is 95
+PASS o.f is 96
+PASS o.f is 97
+PASS o.f is 98
+PASS o.f is 99
+PASS o.f is 100
+PASS o.f is 101
+PASS o.f is 102
+PASS o.f is 103
+PASS o.f is 104
+PASS o.f is 105
+PASS o.f is 106
+PASS o.f is 107
+PASS o.f is 108
+PASS o.f is 109
+PASS o.f is 110
+PASS o.f is 111
+PASS o.f is 112
+PASS o.f is 113
+PASS o.f is 114
+PASS o.f is 115
+PASS o.f is 116
+PASS o.f is 117
+PASS o.f is 118
+PASS o.f is 119
+PASS o.f is 120
+PASS o.f is 121
+PASS o.f is 122
+PASS o.f is 123
+PASS o.f is 124
+PASS o.f is 125
+PASS o.f is 126
+PASS o.f is 127
+PASS o.f is 128
+PASS o.f is 129
+PASS o.f is 130
+PASS o.f is 131
+PASS o.f is 132
+PASS o.f is 133
+PASS o.f is 134
+PASS o.f is 135
+PASS o.f is 136
+PASS o.f is 137
+PASS o.f is 138
+PASS o.f is 139
+PASS o.f is 140
+PASS o.f is 141
+PASS o.f is 142
+PASS o.f is 143
+PASS o.f is 144
+PASS o.f is 145
+PASS o.f is 146
+PASS o.f is 147
+PASS o.f is 148
+PASS o.f is 149
+PASS o.f is 150
+PASS o.f is 151
+PASS o.f is 152
+PASS o.f is 153
+PASS o.f is 154
+PASS o.f is 155
+PASS o.f is 156
+PASS o.f is 157
+PASS o.f is 158
+PASS o.f is 159
+PASS o.f is 160
+PASS o.f is 161
+PASS o.f is 162
+PASS o.f is 163
+PASS o.f is 164
+PASS o.f is 165
+PASS o.f is 166
+PASS o.f is 167
+PASS o.f is 168
+PASS o.f is 169
+PASS o.f is 170
+PASS o.f is 171
+PASS o.f is 172
+PASS o.f is 173
+PASS o.f is 174
+PASS o.f is 175
+PASS o.f is 176
+PASS o.f is 177
+PASS o.f is 178
+PASS o.f is 179
+PASS o.f is 180
+PASS o.f is 181
+PASS o.f is 182
+PASS o.f is 183
+PASS o.f is 184
+PASS o.f is 185
+PASS o.f is 186
+PASS o.f is 187
+PASS o.f is 188
+PASS o.f is 189
+PASS o.f is 190
+PASS o.f is 191
+PASS o.f is 192
+PASS o.f is 193
+PASS o.f is 194
+PASS o.f is 195
+PASS o.f is 196
+PASS o.f is 197
+PASS o.f is 198
+PASS o.f is 199
+PASS o.f is 200
+PASS o.f is 201
+PASS o.f is 202
+PASS o.f is 203
+PASS o.f is 204
+PASS o.f is 205
+PASS o.f is 206
+PASS o.f is 207
+PASS o.f is 208
+PASS o.f is 209
+PASS o.f is 210
+PASS o.f is 211
+PASS o.f is 212
+PASS o.f is 213
+PASS o.f is 214
+PASS o.f is 215
+PASS o.f is 216
+PASS o.f is 217
+PASS o.f is 218
+PASS o.f is 219
+PASS o.f is 220
+PASS o.f is 221
+PASS o.f is 222
+PASS o.f is 223
+PASS o.f is 224
+PASS o.f is 225
+PASS o.f is 226
+PASS o.f is 227
+PASS o.f is 228
+PASS o.f is 229
+PASS o.f is 230
+PASS o.f is 231
+PASS o.f is 232
+PASS o.f is 233
+PASS o.f is 234
+PASS o.f is 235
+PASS o.f is 236
+PASS o.f is 237
+PASS o.f is 238
+PASS o.f is 239
+PASS o.f is 240
+PASS o.f is 241
+PASS o.f is 242
+PASS o.f is 243
+PASS o.f is 244
+PASS o.f is 245
+PASS o.f is 246
+PASS o.f is 247
+PASS o.f is 248
+PASS o.f is 249
+PASS o.f is 250
+PASS o.f is 251
+PASS o.f is 252
+PASS o.f is 253
+PASS o.f is 254
+PASS o.f is 255
+PASS o.f is 256
+PASS o.f is 257
+PASS o.f is 258
+PASS o.f is 259
+PASS o.f is 260
+PASS o.f is 261
+PASS o.f is 262
+PASS o.f is 263
+PASS o.f is 264
+PASS o.f is 265
+PASS o.f is 266
+PASS o.f is 267
+PASS o.f is 268
+PASS o.f is 269
+PASS o.f is 270
+PASS o.f is 271
+PASS o.f is 272
+PASS o.f is 273
+PASS o.f is 274
+PASS o.f is 275
+PASS o.f is 276
+PASS o.f is 277
+PASS o.f is 278
+PASS o.f is 279
+PASS o.f is 280
+PASS o.f is 281
+PASS o.f is 282
+PASS o.f is 283
+PASS o.f is 284
+PASS o.f is 285
+PASS o.f is 286
+PASS o.f is 287
+PASS o.f is 288
+PASS o.f is 289
+PASS o.f is 290
+PASS o.f is 291
+PASS o.f is 292
+PASS o.f is 293
+PASS o.f is 294
+PASS o.f is 295
+PASS o.f is 296
+PASS o.f is 297
+PASS o.f is 298
+PASS o.f is 299
+PASS o.f is 300
+PASS o.f is 301
+PASS o.f is 302
+PASS o.f is 303
+PASS o.f is 304
+PASS o.f is 305
+PASS o.f is 306
+PASS o.f is 307
+PASS o.f is 308
+PASS o.f is 309
+PASS o.f is 310
+PASS o.f is 311
+PASS o.f is 312
+PASS o.f is 313
+PASS o.f is 314
+PASS o.f is 315
+PASS o.f is 316
+PASS o.f is 317
+PASS o.f is 318
+PASS o.f is 319
+PASS o.f is 320
+PASS o.f is 321
+PASS o.f is 322
+PASS o.f is 323
+PASS o.f is 324
+PASS o.f is 325
+PASS o.f is 326
+PASS o.f is 327
+PASS o.f is 328
+PASS o.f is 329
+PASS o.f is 330
+PASS o.f is 331
+PASS o.f is 332
+PASS o.f is 333
+PASS o.f is 334
+PASS o.f is 335
+PASS o.f is 336
+PASS o.f is 337
+PASS o.f is 338
+PASS o.f is 339
+PASS o.f is 340
+PASS o.f is 341
+PASS o.f is 342
+PASS o.f is 343
+PASS o.f is 344
+PASS o.f is 345
+PASS o.f is 346
+PASS o.f is 347
+PASS o.f is 348
+PASS o.f is 349
+PASS o.f is 350
+PASS o.f is 351
+PASS o.f is 352
+PASS o.f is 353
+PASS o.f is 354
+PASS o.f is 355
+PASS o.f is 356
+PASS o.f is 357
+PASS o.f is 358
+PASS o.f is 359
+PASS o.f is 360
+PASS o.f is 361
+PASS o.f is 362
+PASS o.f is 363
+PASS o.f is 364
+PASS o.f is 365
+PASS o.f is 366
+PASS o.f is 367
+PASS o.f is 368
+PASS o.f is 369
+PASS o.f is 370
+PASS o.f is 371
+PASS o.f is 372
+PASS o.f is 373
+PASS o.f is 374
+PASS o.f is 375
+PASS o.f is 376
+PASS o.f is 377
+PASS o.f is 378
+PASS o.f is 379
+PASS o.f is 380
+PASS o.f is 381
+PASS o.f is 382
+PASS o.f is 383
+PASS o.f is 384
+PASS o.f is 385
+PASS o.f is 386
+PASS o.f is 387
+PASS o.f is 388
+PASS o.f is 389
+PASS o.f is 390
+PASS o.f is 391
+PASS o.f is 392
+PASS o.f is 393
+PASS o.f is 394
+PASS o.f is 395
+PASS o.f is 396
+PASS o.f is 397
+PASS o.f is 398
+PASS o.f is 399
+PASS o.f is 400
+PASS o.f is 401
+PASS o.f is 402
+PASS o.f is 403
+PASS o.f is 404
+PASS o.f is 405
+PASS o.f is 406
+PASS o.f is 407
+PASS o.f is 408
+PASS o.f is 409
+PASS o.f is 410
+PASS o.f is 411
+PASS o.f is 412
+PASS o.f is 413
+PASS o.f is 414
+PASS o.f is 415
+PASS o.f is 416
+PASS o.f is 417
+PASS o.f is 418
+PASS o.f is 419
+PASS o.f is 420
+PASS o.f is 421
+PASS o.f is 422
+PASS o.f is 423
+PASS o.f is 424
+PASS o.f is 425
+PASS o.f is 426
+PASS o.f is 427
+PASS o.f is 428
+PASS o.f is 429
+PASS o.f is 430
+PASS o.f is 431
+PASS o.f is 432
+PASS o.f is 433
+PASS o.f is 434
+PASS o.f is 435
+PASS o.f is 436
+PASS o.f is 437
+PASS o.f is 438
+PASS o.f is 439
+PASS o.f is 440
+PASS o.f is 441
+PASS o.f is 442
+PASS o.f is 443
+PASS o.f is 444
+PASS o.f is 445
+PASS o.f is 446
+PASS o.f is 447
+PASS o.f is 448
+PASS o.f is 449
+PASS o.f is 450
+PASS o.f is 451
+PASS o.f is 452
+PASS o.f is 453
+PASS o.f is 454
+PASS o.f is 455
+PASS o.f is 456
+PASS o.f is 457
+PASS o.f is 458
+PASS o.f is 459
+PASS o.f is 460
+PASS o.f is 461
+PASS o.f is 462
+PASS o.f is 463
+PASS o.f is 464
+PASS o.f is 465
+PASS o.f is 466
+PASS o.f is 467
+PASS o.f is 468
+PASS o.f is 469
+PASS o.f is 470
+PASS o.f is 471
+PASS o.f is 472
+PASS o.f is 473
+PASS o.f is 474
+PASS o.f is 475
+PASS o.f is 476
+PASS o.f is 477
+PASS o.f is 478
+PASS o.f is 479
+PASS o.f is 480
+PASS o.f is 481
+PASS o.f is 482
+PASS o.f is 483
+PASS o.f is 484
+PASS o.f is 485
+PASS o.f is 486
+PASS o.f is 487
+PASS o.f is 488
+PASS o.f is 489
+PASS o.f is 490
+PASS o.f is 491
+PASS o.f is 492
+PASS o.f is 493
+PASS o.f is 494
+PASS o.f is 495
+PASS o.f is 496
+PASS o.f is 497
+PASS o.f is 498
+PASS o.f is 499
+PASS o.f is 500
+PASS o.f is 501
+PASS o.f is 502
+PASS o.f is 503
+PASS o.f is 504
+PASS o.f is 505
+PASS o.f is 506
+PASS o.f is 507
+PASS o.f is 508
+PASS o.f is 509
+PASS o.f is 510
+PASS o.f is 511
+PASS o.f is 512
+PASS o.f is 513
+PASS o.f is 514
+PASS o.f is 515
+PASS o.f is 516
+PASS o.f is 517
+PASS o.f is 518
+PASS o.f is 519
+PASS o.f is 520
+PASS o.f is 521
+PASS o.f is 522
+PASS o.f is 523
+PASS o.f is 524
+PASS o.f is 525
+PASS o.f is 526
+PASS o.f is 527
+PASS o.f is 528
+PASS o.f is 529
+PASS o.f is 530
+PASS o.f is 531
+PASS o.f is 532
+PASS o.f is 533
+PASS o.f is 534
+PASS o.f is 535
+PASS o.f is 536
+PASS o.f is 537
+PASS o.f is 538
+PASS o.f is 539
+PASS o.f is 540
+PASS o.f is 541
+PASS o.f is 542
+PASS o.f is 543
+PASS o.f is 544
+PASS o.f is 545
+PASS o.f is 546
+PASS o.f is 547
+PASS o.f is 548
+PASS o.f is 549
+PASS o.f is 550
+PASS o.f is 551
+PASS o.f is 552
+PASS o.f is 553
+PASS o.f is 554
+PASS o.f is 555
+PASS o.f is 556
+PASS o.f is 557
+PASS o.f is 558
+PASS o.f is 559
+PASS o.f is 560
+PASS o.f is 561
+PASS o.f is 562
+PASS o.f is 563
+PASS o.f is 564
+PASS o.f is 565
+PASS o.f is 566
+PASS o.f is 567
+PASS o.f is 568
+PASS o.f is 569
+PASS o.f is 570
+PASS o.f is 571
+PASS o.f is 572
+PASS o.f is 573
+PASS o.f is 574
+PASS o.f is 575
+PASS o.f is 576
+PASS o.f is 577
+PASS o.f is 578
+PASS o.f is 579
+PASS o.f is 580
+PASS o.f is 581
+PASS o.f is 582
+PASS o.f is 583
+PASS o.f is 584
+PASS o.f is 585
+PASS o.f is 586
+PASS o.f is 587
+PASS o.f is 588
+PASS o.f is 589
+PASS o.f is 590
+PASS o.f is 591
+PASS o.f is 592
+PASS o.f is 593
+PASS o.f is 594
+PASS o.f is 595
+PASS o.f is 596
+PASS o.f is 597
+PASS o.f is 598
+PASS o.f is 599
+PASS o.f is 600
+PASS o.f is 601
+PASS o.f is 602
+PASS o.f is 603
+PASS o.f is 604
+PASS o.f is 605
+PASS o.f is 606
+PASS o.f is 607
+PASS o.f is 608
+PASS o.f is 609
+PASS o.f is 610
+PASS o.f is 611
+PASS o.f is 612
+PASS o.f is 613
+PASS o.f is 614
+PASS o.f is 615
+PASS o.f is 616
+PASS o.f is 617
+PASS o.f is 618
+PASS o.f is 619
+PASS o.f is 620
+PASS o.f is 621
+PASS o.f is 622
+PASS o.f is 623
+PASS o.f is 624
+PASS o.f is 625
+PASS o.f is 626
+PASS o.f is 627
+PASS o.f is 628
+PASS o.f is 629
+PASS o.f is 630
+PASS o.f is 631
+PASS o.f is 632
+PASS o.f is 633
+PASS o.f is 634
+PASS o.f is 635
+PASS o.f is 636
+PASS o.f is 637
+PASS o.f is 638
+PASS o.f is 639
+PASS o.f is 640
+PASS o.f is 641
+PASS o.f is 642
+PASS o.f is 643
+PASS o.f is 644
+PASS o.f is 645
+PASS o.f is 646
+PASS o.f is 647
+PASS o.f is 648
+PASS o.f is 649
+PASS o.f is 650
+PASS o.f is 651
+PASS o.f is 652
+PASS o.f is 653
+PASS o.f is 654
+PASS o.f is 655
+PASS o.f is 656
+PASS o.f is 657
+PASS o.f is 658
+PASS o.f is 659
+PASS o.f is 660
+PASS o.f is 661
+PASS o.f is 662
+PASS o.f is 663
+PASS o.f is 664
+PASS o.f is 665
+PASS o.f is 666
+PASS o.f is 667
+PASS o.f is 668
+PASS o.f is 669
+PASS o.f is 670
+PASS o.f is 671
+PASS o.f is 672
+PASS o.f is 673
+PASS o.f is 674
+PASS o.f is 675
+PASS o.f is 676
+PASS o.f is 677
+PASS o.f is 678
+PASS o.f is 679
+PASS o.f is 680
+PASS o.f is 681
+PASS o.f is 682
+PASS o.f is 683
+PASS o.f is 684
+PASS o.f is 685
+PASS o.f is 686
+PASS o.f is 687
+PASS o.f is 688
+PASS o.f is 689
+PASS o.f is 690
+PASS o.f is 691
+PASS o.f is 692
+PASS o.f is 693
+PASS o.f is 694
+PASS o.f is 695
+PASS o.f is 696
+PASS o.f is 697
+PASS o.f is 698
+PASS o.f is 699
+PASS o.f is 700
+PASS o.f is 701
+PASS o.f is 702
+PASS o.f is 703
+PASS o.f is 704
+PASS o.f is 705
+PASS o.f is 706
+PASS o.f is 707
+PASS o.f is 708
+PASS o.f is 709
+PASS o.f is 710
+PASS o.f is 711
+PASS o.f is 712
+PASS o.f is 713
+PASS o.f is 714
+PASS o.f is 715
+PASS o.f is 716
+PASS o.f is 717
+PASS o.f is 718
+PASS o.f is 719
+PASS o.f is 720
+PASS o.f is 721
+PASS o.f is 722
+PASS o.f is 723
+PASS o.f is 724
+PASS o.f is 725
+PASS o.f is 726
+PASS o.f is 727
+PASS o.f is 728
+PASS o.f is 729
+PASS o.f is 730
+PASS o.f is 731
+PASS o.f is 732
+PASS o.f is 733
+PASS o.f is 734
+PASS o.f is 735
+PASS o.f is 736
+PASS o.f is 737
+PASS o.f is 738
+PASS o.f is 739
+PASS o.f is 740
+PASS o.f is 741
+PASS o.f is 742
+PASS o.f is 743
+PASS o.f is 744
+PASS o.f is 745
+PASS o.f is 746
+PASS o.f is 747
+PASS o.f is 748
+PASS o.f is 749
+PASS o.f is 750
+PASS o.f is 751
+PASS o.f is 752
+PASS o.f is 753
+PASS o.f is 754
+PASS o.f is 755
+PASS o.f is 756
+PASS o.f is 757
+PASS o.f is 758
+PASS o.f is 759
+PASS o.f is 760
+PASS o.f is 761
+PASS o.f is 762
+PASS o.f is 763
+PASS o.f is 764
+PASS o.f is 765
+PASS o.f is 766
+PASS o.f is 767
+PASS o.f is 768
+PASS o.f is 769
+PASS o.f is 770
+PASS o.f is 771
+PASS o.f is 772
+PASS o.f is 773
+PASS o.f is 774
+PASS o.f is 775
+PASS o.f is 776
+PASS o.f is 777
+PASS o.f is 778
+PASS o.f is 779
+PASS o.f is 780
+PASS o.f is 781
+PASS o.f is 782
+PASS o.f is 783
+PASS o.f is 784
+PASS o.f is 785
+PASS o.f is 786
+PASS o.f is 787
+PASS o.f is 788
+PASS o.f is 789
+PASS o.f is 790
+PASS o.f is 791
+PASS o.f is 792
+PASS o.f is 793
+PASS o.f is 794
+PASS o.f is 795
+PASS o.f is 796
+PASS o.f is 797
+PASS o.f is 798
+PASS o.f is 799
+PASS o.f is 800
+PASS o.f is 801
+PASS o.f is 802
+PASS o.f is 803
+PASS o.f is 804
+PASS o.f is 805
+PASS o.f is 806
+PASS o.f is 807
+PASS o.f is 808
+PASS o.f is 809
+PASS o.f is 810
+PASS o.f is 811
+PASS o.f is 812
+PASS o.f is 813
+PASS o.f is 814
+PASS o.f is 815
+PASS o.f is 816
+PASS o.f is 817
+PASS o.f is 818
+PASS o.f is 819
+PASS o.f is 820
+PASS o.f is 821
+PASS o.f is 822
+PASS o.f is 823
+PASS o.f is 824
+PASS o.f is 825
+PASS o.f is 826
+PASS o.f is 827
+PASS o.f is 828
+PASS o.f is 829
+PASS o.f is 830
+PASS o.f is 831
+PASS o.f is 832
+PASS o.f is 833
+PASS o.f is 834
+PASS o.f is 835
+PASS o.f is 836
+PASS o.f is 837
+PASS o.f is 838
+PASS o.f is 839
+PASS o.f is 840
+PASS o.f is 841
+PASS o.f is 842
+PASS o.f is 843
+PASS o.f is 844
+PASS o.f is 845
+PASS o.f is 846
+PASS o.f is 847
+PASS o.f is 848
+PASS o.f is 849
+PASS o.f is 850
+PASS o.f is 851
+PASS o.f is 852
+PASS o.f is 853
+PASS o.f is 854
+PASS o.f is 855
+PASS o.f is 856
+PASS o.f is 857
+PASS o.f is 858
+PASS o.f is 859
+PASS o.f is 860
+PASS o.f is 861
+PASS o.f is 862
+PASS o.f is 863
+PASS o.f is 864
+PASS o.f is 865
+PASS o.f is 866
+PASS o.f is 867
+PASS o.f is 868
+PASS o.f is 869
+PASS o.f is 870
+PASS o.f is 871
+PASS o.f is 872
+PASS o.f is 873
+PASS o.f is 874
+PASS o.f is 875
+PASS o.f is 876
+PASS o.f is 877
+PASS o.f is 878
+PASS o.f is 879
+PASS o.f is 880
+PASS o.f is 881
+PASS o.f is 882
+PASS o.f is 883
+PASS o.f is 884
+PASS o.f is 885
+PASS o.f is 886
+PASS o.f is 887
+PASS o.f is 888
+PASS o.f is 889
+PASS o.f is 890
+PASS o.f is 891
+PASS o.f is 892
+PASS o.f is 893
+PASS o.f is 894
+PASS o.f is 895
+PASS o.f is 896
+PASS o.f is 897
+PASS o.f is 898
+PASS o.f is 899
+PASS stuff is 900
+PASS o.f is undefined
+PASS stuff is 901
+PASS o.f is undefined
+PASS stuff is 902
+PASS o.f is undefined
+PASS stuff is 903
+PASS o.f is undefined
+PASS stuff is 904
+PASS o.f is undefined
+PASS stuff is 905
+PASS o.f is undefined
+PASS stuff is 906
+PASS o.f is undefined
+PASS stuff is 907
+PASS o.f is undefined
+PASS stuff is 908
+PASS o.f is undefined
+PASS stuff is 909
+PASS o.f is undefined
+PASS stuff is 910
+PASS o.f is undefined
+PASS stuff is 911
+PASS o.f is undefined
+PASS stuff is 912
+PASS o.f is undefined
+PASS stuff is 913
+PASS o.f is undefined
+PASS stuff is 914
+PASS o.f is undefined
+PASS stuff is 915
+PASS o.f is undefined
+PASS stuff is 916
+PASS o.f is undefined
+PASS stuff is 917
+PASS o.f is undefined
+PASS stuff is 918
+PASS o.f is undefined
+PASS stuff is 919
+PASS o.f is undefined
+PASS stuff is 920
+PASS o.f is undefined
+PASS stuff is 921
+PASS o.f is undefined
+PASS stuff is 922
+PASS o.f is undefined
+PASS stuff is 923
+PASS o.f is undefined
+PASS stuff is 924
+PASS o.f is undefined
+PASS stuff is 925
+PASS o.f is undefined
+PASS stuff is 926
+PASS o.f is undefined
+PASS stuff is 927
+PASS o.f is undefined
+PASS stuff is 928
+PASS o.f is undefined
+PASS stuff is 929
+PASS o.f is undefined
+PASS stuff is 930
+PASS o.f is undefined
+PASS stuff is 931
+PASS o.f is undefined
+PASS stuff is 932
+PASS o.f is undefined
+PASS stuff is 933
+PASS o.f is undefined
+PASS stuff is 934
+PASS o.f is undefined
+PASS stuff is 935
+PASS o.f is undefined
+PASS stuff is 936
+PASS o.f is undefined
+PASS stuff is 937
+PASS o.f is undefined
+PASS stuff is 938
+PASS o.f is undefined
+PASS stuff is 939
+PASS o.f is undefined
+PASS stuff is 940
+PASS o.f is undefined
+PASS stuff is 941
+PASS o.f is undefined
+PASS stuff is 942
+PASS o.f is undefined
+PASS stuff is 943
+PASS o.f is undefined
+PASS stuff is 944
+PASS o.f is undefined
+PASS stuff is 945
+PASS o.f is undefined
+PASS stuff is 946
+PASS o.f is undefined
+PASS stuff is 947
+PASS o.f is undefined
+PASS stuff is 948
+PASS o.f is undefined
+PASS stuff is 949
+PASS o.f is undefined
+PASS stuff is 950
+PASS o.f is undefined
+PASS stuff is 951
+PASS o.f is undefined
+PASS stuff is 952
+PASS o.f is undefined
+PASS stuff is 953
+PASS o.f is undefined
+PASS stuff is 954
+PASS o.f is undefined
+PASS stuff is 955
+PASS o.f is undefined
+PASS stuff is 956
+PASS o.f is undefined
+PASS stuff is 957
+PASS o.f is undefined
+PASS stuff is 958
+PASS o.f is undefined
+PASS stuff is 959
+PASS o.f is undefined
+PASS stuff is 960
+PASS o.f is undefined
+PASS stuff is 961
+PASS o.f is undefined
+PASS stuff is 962
+PASS o.f is undefined
+PASS stuff is 963
+PASS o.f is undefined
+PASS stuff is 964
+PASS o.f is undefined
+PASS stuff is 965
+PASS o.f is undefined
+PASS stuff is 966
+PASS o.f is undefined
+PASS stuff is 967
+PASS o.f is undefined
+PASS stuff is 968
+PASS o.f is undefined
+PASS stuff is 969
+PASS o.f is undefined
+PASS stuff is 970
+PASS o.f is undefined
+PASS stuff is 971
+PASS o.f is undefined
+PASS stuff is 972
+PASS o.f is undefined
+PASS stuff is 973
+PASS o.f is undefined
+PASS stuff is 974
+PASS o.f is undefined
+PASS stuff is 975
+PASS o.f is undefined
+PASS stuff is 976
+PASS o.f is undefined
+PASS stuff is 977
+PASS o.f is undefined
+PASS stuff is 978
+PASS o.f is undefined
+PASS stuff is 979
+PASS o.f is undefined
+PASS stuff is 980
+PASS o.f is undefined
+PASS stuff is 981
+PASS o.f is undefined
+PASS stuff is 982
+PASS o.f is undefined
+PASS stuff is 983
+PASS o.f is undefined
+PASS stuff is 984
+PASS o.f is undefined
+PASS stuff is 985
+PASS o.f is undefined
+PASS stuff is 986
+PASS o.f is undefined
+PASS stuff is 987
+PASS o.f is undefined
+PASS stuff is 988
+PASS o.f is undefined
+PASS stuff is 989
+PASS o.f is undefined
+PASS stuff is 990
+PASS o.f is undefined
+PASS stuff is 991
+PASS o.f is undefined
+PASS stuff is 992
+PASS o.f is undefined
+PASS stuff is 993
+PASS o.f is undefined
+PASS stuff is 994
+PASS o.f is undefined
+PASS stuff is 995
+PASS o.f is undefined
+PASS stuff is 996
+PASS o.f is undefined
+PASS stuff is 997
+PASS o.f is undefined
+PASS stuff is 998
+PASS o.f is undefined
+PASS stuff is 999
+PASS o.f is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-put-by-id-prototype-check.js b/deps/v8/test/webkit/dfg-put-by-id-prototype-check.js
new file mode 100644 (file)
index 0000000..a8b6137
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG CFA is not overzealous in removing prototype structure checks for put_by_id transitions."
+);
+
+function foo(a, b)
+{
+    a.f = b;
+}
+
+var Empty = "";
+
+function Foo() {
+}
+
+var stuff;
+
+for (var i = 0; i < 1000; ++i) {
+    if (i >= 900)
+        Foo.prototype.__defineSetter__("f", function(value) { stuff = value; });
+
+    var o = new Foo();
+    eval(Empty + "foo(o, i)");
+    if (i >= 900) {
+        shouldBe("stuff", "" + i);
+        shouldBe("o.f", "" + (void 0));
+    } else
+        shouldBe("o.f", "" + i);
+}
+
diff --git a/deps/v8/test/webkit/dfg-put-by-id-reallocate-storage-expected.txt b/deps/v8/test/webkit/dfg-put-by-id-reallocate-storage-expected.txt
new file mode 100644 (file)
index 0000000..85785bb
--- /dev/null
@@ -0,0 +1,2132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a DFG PutById that allocates, and then reallocates, property storage works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-put-by-id-reallocate-storage-polymorphic-expected.txt b/deps/v8/test/webkit/dfg-put-by-id-reallocate-storage-polymorphic-expected.txt
new file mode 100644 (file)
index 0000000..c1a07e6
--- /dev/null
@@ -0,0 +1,2282 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a polymorphic DFG PutById that allocates, and then reallocates, property storage works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-put-by-id-reallocate-storage-polymorphic.js b/deps/v8/test/webkit/dfg-put-by-id-reallocate-storage-polymorphic.js
new file mode 100644 (file)
index 0000000..c3fe0fd
--- /dev/null
@@ -0,0 +1,72 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a polymorphic DFG PutById that allocates, and then reallocates, property storage works."
+);
+
+function foo(o) {
+    o.a = 1;
+    o.b = 2;
+    o.c = 3;
+    o.d = 4;
+    o.e = 5;
+    o.f = 6;
+    o.g = 7;
+    o.h = 8;
+    o.i = 9;
+    o.j = 10;
+    o.k = 11;
+    o.l = 12;
+    o.m = 13;
+    o.n = 14;
+}
+
+for (var i = 0; i < 150; ++i) {
+    var o;
+    if (i % 2)
+        o = {};
+    else
+        o = {foo: 42};
+    foo(o);
+    shouldBe("o.a", "1");
+    shouldBe("o.b", "2");
+    shouldBe("o.c", "3");
+    shouldBe("o.d", "4");
+    shouldBe("o.e", "5");
+    shouldBe("o.f", "6");
+    shouldBe("o.g", "7");
+    shouldBe("o.h", "8");
+    shouldBe("o.i", "9");
+    shouldBe("o.j", "10");
+    shouldBe("o.k", "11");
+    shouldBe("o.l", "12");
+    shouldBe("o.m", "13");
+    shouldBe("o.n", "14");
+    if (!(i % 2))
+        shouldBe("o.foo", "42");
+    else
+        shouldBe("o.foo", "void 0");
+}
+
+
diff --git a/deps/v8/test/webkit/dfg-put-by-id-reallocate-storage.js b/deps/v8/test/webkit/dfg-put-by-id-reallocate-storage.js
new file mode 100644 (file)
index 0000000..e6c19ee
--- /dev/null
@@ -0,0 +1,65 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a DFG PutById that allocates, and then reallocates, property storage works."
+);
+
+function foo() {
+    var o = {};
+    o.a = 1;
+    o.b = 2;
+    o.c = 3;
+    o.d = 4;
+    o.e = 5;
+    o.f = 6;
+    o.g = 7;
+    o.h = 8;
+    o.i = 9;
+    o.j = 10;
+    o.k = 11;
+    o.l = 12;
+    o.m = 13;
+    o.n = 14;
+    return o;
+}
+
+for (var i = 0; i < 150; ++i) {
+    var o = foo();
+    shouldBe("o.a", "1");
+    shouldBe("o.b", "2");
+    shouldBe("o.c", "3");
+    shouldBe("o.d", "4");
+    shouldBe("o.e", "5");
+    shouldBe("o.f", "6");
+    shouldBe("o.g", "7");
+    shouldBe("o.h", "8");
+    shouldBe("o.i", "9");
+    shouldBe("o.j", "10");
+    shouldBe("o.k", "11");
+    shouldBe("o.l", "12");
+    shouldBe("o.m", "13");
+    shouldBe("o.n", "14");
+}
+
+
diff --git a/deps/v8/test/webkit/dfg-put-by-val-setter-then-get-by-val-expected.txt b/deps/v8/test/webkit/dfg-put-by-val-setter-then-get-by-val-expected.txt
new file mode 100644 (file)
index 0000000..c886e88
--- /dev/null
@@ -0,0 +1,432 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a GetByVal that accesses a value that was PutByVal'd, but where the PutByVal invoked a setter, works correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(array, -1, i) is 42
+PASS thingy is 0
+PASS foo(array, -1, i) is 42
+PASS thingy is 1
+PASS foo(array, -1, i) is 42
+PASS thingy is 2
+PASS foo(array, -1, i) is 42
+PASS thingy is 3
+PASS foo(array, -1, i) is 42
+PASS thingy is 4
+PASS foo(array, -1, i) is 42
+PASS thingy is 5
+PASS foo(array, -1, i) is 42
+PASS thingy is 6
+PASS foo(array, -1, i) is 42
+PASS thingy is 7
+PASS foo(array, -1, i) is 42
+PASS thingy is 8
+PASS foo(array, -1, i) is 42
+PASS thingy is 9
+PASS foo(array, -1, i) is 42
+PASS thingy is 10
+PASS foo(array, -1, i) is 42
+PASS thingy is 11
+PASS foo(array, -1, i) is 42
+PASS thingy is 12
+PASS foo(array, -1, i) is 42
+PASS thingy is 13
+PASS foo(array, -1, i) is 42
+PASS thingy is 14
+PASS foo(array, -1, i) is 42
+PASS thingy is 15
+PASS foo(array, -1, i) is 42
+PASS thingy is 16
+PASS foo(array, -1, i) is 42
+PASS thingy is 17
+PASS foo(array, -1, i) is 42
+PASS thingy is 18
+PASS foo(array, -1, i) is 42
+PASS thingy is 19
+PASS foo(array, -1, i) is 42
+PASS thingy is 20
+PASS foo(array, -1, i) is 42
+PASS thingy is 21
+PASS foo(array, -1, i) is 42
+PASS thingy is 22
+PASS foo(array, -1, i) is 42
+PASS thingy is 23
+PASS foo(array, -1, i) is 42
+PASS thingy is 24
+PASS foo(array, -1, i) is 42
+PASS thingy is 25
+PASS foo(array, -1, i) is 42
+PASS thingy is 26
+PASS foo(array, -1, i) is 42
+PASS thingy is 27
+PASS foo(array, -1, i) is 42
+PASS thingy is 28
+PASS foo(array, -1, i) is 42
+PASS thingy is 29
+PASS foo(array, -1, i) is 42
+PASS thingy is 30
+PASS foo(array, -1, i) is 42
+PASS thingy is 31
+PASS foo(array, -1, i) is 42
+PASS thingy is 32
+PASS foo(array, -1, i) is 42
+PASS thingy is 33
+PASS foo(array, -1, i) is 42
+PASS thingy is 34
+PASS foo(array, -1, i) is 42
+PASS thingy is 35
+PASS foo(array, -1, i) is 42
+PASS thingy is 36
+PASS foo(array, -1, i) is 42
+PASS thingy is 37
+PASS foo(array, -1, i) is 42
+PASS thingy is 38
+PASS foo(array, -1, i) is 42
+PASS thingy is 39
+PASS foo(array, -1, i) is 42
+PASS thingy is 40
+PASS foo(array, -1, i) is 42
+PASS thingy is 41
+PASS foo(array, -1, i) is 42
+PASS thingy is 42
+PASS foo(array, -1, i) is 42
+PASS thingy is 43
+PASS foo(array, -1, i) is 42
+PASS thingy is 44
+PASS foo(array, -1, i) is 42
+PASS thingy is 45
+PASS foo(array, -1, i) is 42
+PASS thingy is 46
+PASS foo(array, -1, i) is 42
+PASS thingy is 47
+PASS foo(array, -1, i) is 42
+PASS thingy is 48
+PASS foo(array, -1, i) is 42
+PASS thingy is 49
+PASS foo(array, -1, i) is 42
+PASS thingy is 50
+PASS foo(array, -1, i) is 42
+PASS thingy is 51
+PASS foo(array, -1, i) is 42
+PASS thingy is 52
+PASS foo(array, -1, i) is 42
+PASS thingy is 53
+PASS foo(array, -1, i) is 42
+PASS thingy is 54
+PASS foo(array, -1, i) is 42
+PASS thingy is 55
+PASS foo(array, -1, i) is 42
+PASS thingy is 56
+PASS foo(array, -1, i) is 42
+PASS thingy is 57
+PASS foo(array, -1, i) is 42
+PASS thingy is 58
+PASS foo(array, -1, i) is 42
+PASS thingy is 59
+PASS foo(array, -1, i) is 42
+PASS thingy is 60
+PASS foo(array, -1, i) is 42
+PASS thingy is 61
+PASS foo(array, -1, i) is 42
+PASS thingy is 62
+PASS foo(array, -1, i) is 42
+PASS thingy is 63
+PASS foo(array, -1, i) is 42
+PASS thingy is 64
+PASS foo(array, -1, i) is 42
+PASS thingy is 65
+PASS foo(array, -1, i) is 42
+PASS thingy is 66
+PASS foo(array, -1, i) is 42
+PASS thingy is 67
+PASS foo(array, -1, i) is 42
+PASS thingy is 68
+PASS foo(array, -1, i) is 42
+PASS thingy is 69
+PASS foo(array, -1, i) is 42
+PASS thingy is 70
+PASS foo(array, -1, i) is 42
+PASS thingy is 71
+PASS foo(array, -1, i) is 42
+PASS thingy is 72
+PASS foo(array, -1, i) is 42
+PASS thingy is 73
+PASS foo(array, -1, i) is 42
+PASS thingy is 74
+PASS foo(array, -1, i) is 42
+PASS thingy is 75
+PASS foo(array, -1, i) is 42
+PASS thingy is 76
+PASS foo(array, -1, i) is 42
+PASS thingy is 77
+PASS foo(array, -1, i) is 42
+PASS thingy is 78
+PASS foo(array, -1, i) is 42
+PASS thingy is 79
+PASS foo(array, -1, i) is 42
+PASS thingy is 80
+PASS foo(array, -1, i) is 42
+PASS thingy is 81
+PASS foo(array, -1, i) is 42
+PASS thingy is 82
+PASS foo(array, -1, i) is 42
+PASS thingy is 83
+PASS foo(array, -1, i) is 42
+PASS thingy is 84
+PASS foo(array, -1, i) is 42
+PASS thingy is 85
+PASS foo(array, -1, i) is 42
+PASS thingy is 86
+PASS foo(array, -1, i) is 42
+PASS thingy is 87
+PASS foo(array, -1, i) is 42
+PASS thingy is 88
+PASS foo(array, -1, i) is 42
+PASS thingy is 89
+PASS foo(array, -1, i) is 42
+PASS thingy is 90
+PASS foo(array, -1, i) is 42
+PASS thingy is 91
+PASS foo(array, -1, i) is 42
+PASS thingy is 92
+PASS foo(array, -1, i) is 42
+PASS thingy is 93
+PASS foo(array, -1, i) is 42
+PASS thingy is 94
+PASS foo(array, -1, i) is 42
+PASS thingy is 95
+PASS foo(array, -1, i) is 42
+PASS thingy is 96
+PASS foo(array, -1, i) is 42
+PASS thingy is 97
+PASS foo(array, -1, i) is 42
+PASS thingy is 98
+PASS foo(array, -1, i) is 42
+PASS thingy is 99
+PASS foo(array, -1, i) is 42
+PASS thingy is 100
+PASS foo(array, -1, i) is 42
+PASS thingy is 101
+PASS foo(array, -1, i) is 42
+PASS thingy is 102
+PASS foo(array, -1, i) is 42
+PASS thingy is 103
+PASS foo(array, -1, i) is 42
+PASS thingy is 104
+PASS foo(array, -1, i) is 42
+PASS thingy is 105
+PASS foo(array, -1, i) is 42
+PASS thingy is 106
+PASS foo(array, -1, i) is 42
+PASS thingy is 107
+PASS foo(array, -1, i) is 42
+PASS thingy is 108
+PASS foo(array, -1, i) is 42
+PASS thingy is 109
+PASS foo(array, -1, i) is 42
+PASS thingy is 110
+PASS foo(array, -1, i) is 42
+PASS thingy is 111
+PASS foo(array, -1, i) is 42
+PASS thingy is 112
+PASS foo(array, -1, i) is 42
+PASS thingy is 113
+PASS foo(array, -1, i) is 42
+PASS thingy is 114
+PASS foo(array, -1, i) is 42
+PASS thingy is 115
+PASS foo(array, -1, i) is 42
+PASS thingy is 116
+PASS foo(array, -1, i) is 42
+PASS thingy is 117
+PASS foo(array, -1, i) is 42
+PASS thingy is 118
+PASS foo(array, -1, i) is 42
+PASS thingy is 119
+PASS foo(array, -1, i) is 42
+PASS thingy is 120
+PASS foo(array, -1, i) is 42
+PASS thingy is 121
+PASS foo(array, -1, i) is 42
+PASS thingy is 122
+PASS foo(array, -1, i) is 42
+PASS thingy is 123
+PASS foo(array, -1, i) is 42
+PASS thingy is 124
+PASS foo(array, -1, i) is 42
+PASS thingy is 125
+PASS foo(array, -1, i) is 42
+PASS thingy is 126
+PASS foo(array, -1, i) is 42
+PASS thingy is 127
+PASS foo(array, -1, i) is 42
+PASS thingy is 128
+PASS foo(array, -1, i) is 42
+PASS thingy is 129
+PASS foo(array, -1, i) is 42
+PASS thingy is 130
+PASS foo(array, -1, i) is 42
+PASS thingy is 131
+PASS foo(array, -1, i) is 42
+PASS thingy is 132
+PASS foo(array, -1, i) is 42
+PASS thingy is 133
+PASS foo(array, -1, i) is 42
+PASS thingy is 134
+PASS foo(array, -1, i) is 42
+PASS thingy is 135
+PASS foo(array, -1, i) is 42
+PASS thingy is 136
+PASS foo(array, -1, i) is 42
+PASS thingy is 137
+PASS foo(array, -1, i) is 42
+PASS thingy is 138
+PASS foo(array, -1, i) is 42
+PASS thingy is 139
+PASS foo(array, -1, i) is 42
+PASS thingy is 140
+PASS foo(array, -1, i) is 42
+PASS thingy is 141
+PASS foo(array, -1, i) is 42
+PASS thingy is 142
+PASS foo(array, -1, i) is 42
+PASS thingy is 143
+PASS foo(array, -1, i) is 42
+PASS thingy is 144
+PASS foo(array, -1, i) is 42
+PASS thingy is 145
+PASS foo(array, -1, i) is 42
+PASS thingy is 146
+PASS foo(array, -1, i) is 42
+PASS thingy is 147
+PASS foo(array, -1, i) is 42
+PASS thingy is 148
+PASS foo(array, -1, i) is 42
+PASS thingy is 149
+PASS foo(array, -1, i) is 42
+PASS thingy is 150
+PASS foo(array, -1, i) is 42
+PASS thingy is 151
+PASS foo(array, -1, i) is 42
+PASS thingy is 152
+PASS foo(array, -1, i) is 42
+PASS thingy is 153
+PASS foo(array, -1, i) is 42
+PASS thingy is 154
+PASS foo(array, -1, i) is 42
+PASS thingy is 155
+PASS foo(array, -1, i) is 42
+PASS thingy is 156
+PASS foo(array, -1, i) is 42
+PASS thingy is 157
+PASS foo(array, -1, i) is 42
+PASS thingy is 158
+PASS foo(array, -1, i) is 42
+PASS thingy is 159
+PASS foo(array, -1, i) is 42
+PASS thingy is 160
+PASS foo(array, -1, i) is 42
+PASS thingy is 161
+PASS foo(array, -1, i) is 42
+PASS thingy is 162
+PASS foo(array, -1, i) is 42
+PASS thingy is 163
+PASS foo(array, -1, i) is 42
+PASS thingy is 164
+PASS foo(array, -1, i) is 42
+PASS thingy is 165
+PASS foo(array, -1, i) is 42
+PASS thingy is 166
+PASS foo(array, -1, i) is 42
+PASS thingy is 167
+PASS foo(array, -1, i) is 42
+PASS thingy is 168
+PASS foo(array, -1, i) is 42
+PASS thingy is 169
+PASS foo(array, -1, i) is 42
+PASS thingy is 170
+PASS foo(array, -1, i) is 42
+PASS thingy is 171
+PASS foo(array, -1, i) is 42
+PASS thingy is 172
+PASS foo(array, -1, i) is 42
+PASS thingy is 173
+PASS foo(array, -1, i) is 42
+PASS thingy is 174
+PASS foo(array, -1, i) is 42
+PASS thingy is 175
+PASS foo(array, -1, i) is 42
+PASS thingy is 176
+PASS foo(array, -1, i) is 42
+PASS thingy is 177
+PASS foo(array, -1, i) is 42
+PASS thingy is 178
+PASS foo(array, -1, i) is 42
+PASS thingy is 179
+PASS foo(array, -1, i) is 42
+PASS thingy is 180
+PASS foo(array, -1, i) is 42
+PASS thingy is 181
+PASS foo(array, -1, i) is 42
+PASS thingy is 182
+PASS foo(array, -1, i) is 42
+PASS thingy is 183
+PASS foo(array, -1, i) is 42
+PASS thingy is 184
+PASS foo(array, -1, i) is 42
+PASS thingy is 185
+PASS foo(array, -1, i) is 42
+PASS thingy is 186
+PASS foo(array, -1, i) is 42
+PASS thingy is 187
+PASS foo(array, -1, i) is 42
+PASS thingy is 188
+PASS foo(array, -1, i) is 42
+PASS thingy is 189
+PASS foo(array, -1, i) is 42
+PASS thingy is 190
+PASS foo(array, -1, i) is 42
+PASS thingy is 191
+PASS foo(array, -1, i) is 42
+PASS thingy is 192
+PASS foo(array, -1, i) is 42
+PASS thingy is 193
+PASS foo(array, -1, i) is 42
+PASS thingy is 194
+PASS foo(array, -1, i) is 42
+PASS thingy is 195
+PASS foo(array, -1, i) is 42
+PASS thingy is 196
+PASS foo(array, -1, i) is 42
+PASS thingy is 197
+PASS foo(array, -1, i) is 42
+PASS thingy is 198
+PASS foo(array, -1, i) is 42
+PASS thingy is 199
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-put-by-val-setter-then-get-by-val.js b/deps/v8/test/webkit/dfg-put-by-val-setter-then-get-by-val.js
new file mode 100644 (file)
index 0000000..40d79e0
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a GetByVal that accesses a value that was PutByVal'd, but where the PutByVal invoked a setter, works correctly."
+);
+
+function foo(a, i, v) {
+    a[i] = v;
+    return a[i];
+}
+
+var array = [];
+var thingy;
+array.__defineSetter__(
+    "-1", function(x) { thingy = x; }
+);
+array.__defineGetter__(
+    "-1", function() { return 42; }
+);
+
+for (var i = 0; i < 200; ++i) {
+    shouldBe("foo(array, -1, i)", "42");
+    shouldBe("thingy", "" + i);
+}
+
diff --git a/deps/v8/test/webkit/dfg-put-scoped-var-backward-flow-expected.txt b/deps/v8/test/webkit/dfg-put-scoped-var-backward-flow-expected.txt
new file mode 100644 (file)
index 0000000..8d68fa8
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG treats the operand to PutScopedVar as escaping in an unconstrained way.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-put-scoped-var-backward-flow.js b/deps/v8/test/webkit/dfg-put-scoped-var-backward-flow.js
new file mode 100644 (file)
index 0000000..9f3bfd3
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG treats the operand to PutScopedVar as escaping in an unconstrained way."
+);
+
+function sum(nums) {
+    var total = 0;
+    nums.forEach(function (num) {
+        total += num;
+    });
+    return total;
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("sum([2147483646, 2147483644])", "4294967290");
+
diff --git a/deps/v8/test/webkit/dfg-putbyval-cfa-clobber-expected.txt b/deps/v8/test/webkit/dfg-putbyval-cfa-clobber-expected.txt
new file mode 100644 (file)
index 0000000..ba91932
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that CFA knows that PutByVal can clobber the world.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-putbyval-cfa-clobber.js b/deps/v8/test/webkit/dfg-putbyval-cfa-clobber.js
new file mode 100644 (file)
index 0000000..423a171
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that CFA knows that PutByVal can clobber the world."
+);
+
+var theBar;
+
+function foo(a, b) {
+    var x;
+    function bar() {
+        x = 57;
+    }
+    theBar = bar;
+    x = 42;
+    a[b] = 73;
+    return x;
+}
+
+array = [];
+array.__defineSetter__("-1", function(v) { theBar(); });
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(array, -1)", "57");
diff --git a/deps/v8/test/webkit/dfg-redundant-load-of-captured-variable-proven-constant-expected.txt b/deps/v8/test/webkit/dfg-redundant-load-of-captured-variable-proven-constant-expected.txt
new file mode 100644 (file)
index 0000000..940ccee
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a redundant load of a captured variable that was proven to be a constant doesn't crash the compiler.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-redundant-load-of-captured-variable-proven-constant.js b/deps/v8/test/webkit/dfg-redundant-load-of-captured-variable-proven-constant.js
new file mode 100644 (file)
index 0000000..c97b9ed
--- /dev/null
@@ -0,0 +1,48 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a redundant load of a captured variable that was proven to be a constant doesn't crash the compiler."
+);
+
+function foo(o, p) {
+    var x = o.f;
+    if (p)
+        return function() { return x; }
+    else {
+        var a = x;
+        var b = x;
+        return [a, b];
+    }
+}
+
+var o = {f:function() { return 32; }};
+
+for (var i = 0; i < 100; ++i) {
+    var expected;
+    if (i % 2)
+        expected = "\"function () { return x; }\"";
+    else
+        expected = "\"function () { return 32; },function () { return 32; }\"";
+    shouldBe("\"\" + foo(o, i % 2)", expected);
+}
diff --git a/deps/v8/test/webkit/dfg-resolve-global-polymorphic-non-dictionary-expected.txt b/deps/v8/test/webkit/dfg-resolve-global-polymorphic-non-dictionary-expected.txt
new file mode 100644 (file)
index 0000000..1c61fda
--- /dev/null
@@ -0,0 +1,2032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG's support for ResolveGlobal works when the structure is not a dictionary but the resolve has gone polymorphic.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-resolve-global-polymorphic-non-dictionary.js b/deps/v8/test/webkit/dfg-resolve-global-polymorphic-non-dictionary.js
new file mode 100644 (file)
index 0000000..c6d97ff
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG's support for ResolveGlobal works when the structure is not a dictionary but the resolve has gone polymorphic."
+)
+
+function foo() {
+    return x;
+}
+
+x = 42;
+
+for (var i = 0; i < 1000; ++i) {
+    eval("i" + i + " = function() { }; i" + i + ".prototype = this; (function(){ var o = new i" + i + "(); var result = 0; for (var j = 0; j < 100; ++j) result += o.x; return result; })()");
+    for (var j = 0; j < 2; ++j)
+        shouldBe("foo()", "42");
+}
diff --git a/deps/v8/test/webkit/dfg-resolve-global-specific-dictionary-expected.txt b/deps/v8/test/webkit/dfg-resolve-global-specific-dictionary-expected.txt
new file mode 100644 (file)
index 0000000..a3d34ed
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the specific value optimization does not break when the relevant structure is a dictionary.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-resolve-global-specific-dictionary.js b/deps/v8/test/webkit/dfg-resolve-global-specific-dictionary.js
new file mode 100644 (file)
index 0000000..97c28b8
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the specific value optimization does not break when the relevant structure is a dictionary."
+)
+
+function foo() {
+    return x;
+}
+
+x = function() { };
+
+var expected = "\"function () { }\"";
+
+for (var i = 0; i < 1000; ++i) {
+    eval("i" + i + " = " + i);
+    if (i == 200) {
+        x = 42;
+        expected = "\"42\"";
+    }
+    shouldBe("\"\" + foo()", expected);
+}
diff --git a/deps/v8/test/webkit/dfg-rshift-by-zero-eliminate-valuetoint32-expected.txt b/deps/v8/test/webkit/dfg-rshift-by-zero-eliminate-valuetoint32-expected.txt
new file mode 100644 (file)
index 0000000..a485f1b
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that right shifting by zero and then doing other bitops doesn't eliminate the ValueToInt32 node.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-rshift-by-zero-eliminate-valuetoint32.js b/deps/v8/test/webkit/dfg-rshift-by-zero-eliminate-valuetoint32.js
new file mode 100644 (file)
index 0000000..715dfa3
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that right shifting by zero and then doing other bitops doesn't eliminate the ValueToInt32 node."
+);
+
+global = 32;
+
+function f() {
+    var Ha, fa;
+    Ha = global >> 0;
+    fa = Ha & 2;
+    global = Ha & 2;
+}
+
+for (var i = 0; i < 1000; ++i)
+    shouldBe("f()", "undefined");
diff --git a/deps/v8/test/webkit/dfg-side-effect-assignment-osr-exit-expected.txt b/deps/v8/test/webkit/dfg-side-effect-assignment-osr-exit-expected.txt
new file mode 100644 (file)
index 0000000..3fe919d
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens if we OSR exit on an assignment that was part of a side-effecting bytecode instruction.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(bar) is 42
+PASS count is 1
+PASS foo(bar) is 42
+PASS count is 2
+PASS foo(bar) is 42
+PASS count is 3
+PASS foo(bar) is 42
+PASS count is 4
+PASS foo(bar) is 42
+PASS count is 5
+PASS foo(bar) is 42
+PASS count is 6
+PASS foo(bar) is 42
+PASS count is 7
+PASS foo(bar) is 42
+PASS count is 8
+PASS foo(bar) is 42
+PASS count is 9
+PASS foo(bar) is 42
+PASS count is 10
+PASS foo(bar) is 42
+PASS count is 11
+PASS foo(bar) is 42
+PASS count is 12
+PASS foo(bar) is 42
+PASS count is 13
+PASS foo(bar) is 42
+PASS count is 14
+PASS foo(bar) is 42
+PASS count is 15
+PASS foo(bar) is 42
+PASS count is 16
+PASS foo(bar) is 42
+PASS count is 17
+PASS foo(bar) is 42
+PASS count is 18
+PASS foo(bar) is 42
+PASS count is 19
+PASS foo(bar) is 42
+PASS count is 20
+PASS foo(bar) is 42
+PASS count is 21
+PASS foo(bar) is 42
+PASS count is 22
+PASS foo(bar) is 42
+PASS count is 23
+PASS foo(bar) is 42
+PASS count is 24
+PASS foo(bar) is 42
+PASS count is 25
+PASS foo(bar) is 42
+PASS count is 26
+PASS foo(bar) is 42
+PASS count is 27
+PASS foo(bar) is 42
+PASS count is 28
+PASS foo(bar) is 42
+PASS count is 29
+PASS foo(bar) is 42
+PASS count is 30
+PASS foo(bar) is 42
+PASS count is 31
+PASS foo(bar) is 42
+PASS count is 32
+PASS foo(bar) is 42
+PASS count is 33
+PASS foo(bar) is 42
+PASS count is 34
+PASS foo(bar) is 42
+PASS count is 35
+PASS foo(bar) is 42
+PASS count is 36
+PASS foo(bar) is 42
+PASS count is 37
+PASS foo(bar) is 42
+PASS count is 38
+PASS foo(bar) is 42
+PASS count is 39
+PASS foo(bar) is 42
+PASS count is 40
+PASS foo(bar) is 42
+PASS count is 41
+PASS foo(bar) is 42
+PASS count is 42
+PASS foo(bar) is 42
+PASS count is 43
+PASS foo(bar) is 42
+PASS count is 44
+PASS foo(bar) is 42
+PASS count is 45
+PASS foo(bar) is 42
+PASS count is 46
+PASS foo(bar) is 42
+PASS count is 47
+PASS foo(bar) is 42
+PASS count is 48
+PASS foo(bar) is 42
+PASS count is 49
+PASS foo(bar) is 42
+PASS count is 50
+PASS foo(bar) is 42
+PASS count is 51
+PASS foo(bar) is 42
+PASS count is 52
+PASS foo(bar) is 42
+PASS count is 53
+PASS foo(bar) is 42
+PASS count is 54
+PASS foo(bar) is 42
+PASS count is 55
+PASS foo(bar) is 42
+PASS count is 56
+PASS foo(bar) is 42
+PASS count is 57
+PASS foo(bar) is 42
+PASS count is 58
+PASS foo(bar) is 42
+PASS count is 59
+PASS foo(bar) is 42
+PASS count is 60
+PASS foo(bar) is 42
+PASS count is 61
+PASS foo(bar) is 42
+PASS count is 62
+PASS foo(bar) is 42
+PASS count is 63
+PASS foo(bar) is 42
+PASS count is 64
+PASS foo(bar) is 42
+PASS count is 65
+PASS foo(bar) is 42
+PASS count is 66
+PASS foo(bar) is 42
+PASS count is 67
+PASS foo(bar) is 42
+PASS count is 68
+PASS foo(bar) is 42
+PASS count is 69
+PASS foo(bar) is 42
+PASS count is 70
+PASS foo(bar) is 42
+PASS count is 71
+PASS foo(bar) is 42
+PASS count is 72
+PASS foo(bar) is 42
+PASS count is 73
+PASS foo(bar) is 42
+PASS count is 74
+PASS foo(bar) is 42
+PASS count is 75
+PASS foo(bar) is 42
+PASS count is 76
+PASS foo(bar) is 42
+PASS count is 77
+PASS foo(bar) is 42
+PASS count is 78
+PASS foo(bar) is 42
+PASS count is 79
+PASS foo(bar) is 42
+PASS count is 80
+PASS foo(bar) is 42
+PASS count is 81
+PASS foo(bar) is 42
+PASS count is 82
+PASS foo(bar) is 42
+PASS count is 83
+PASS foo(bar) is 42
+PASS count is 84
+PASS foo(bar) is 42
+PASS count is 85
+PASS foo(bar) is 42
+PASS count is 86
+PASS foo(bar) is 42
+PASS count is 87
+PASS foo(bar) is 42
+PASS count is 88
+PASS foo(bar) is 42
+PASS count is 89
+PASS foo(bar) is 42
+PASS count is 90
+PASS foo(bar) is 42
+PASS count is 91
+PASS foo(bar) is 42
+PASS count is 92
+PASS foo(bar) is 42
+PASS count is 93
+PASS foo(bar) is 42
+PASS count is 94
+PASS foo(bar) is 42
+PASS count is 95
+PASS foo(bar) is 42
+PASS count is 96
+PASS foo(bar) is 42
+PASS count is 97
+PASS foo(bar) is 42
+PASS count is 98
+PASS foo(bar) is 42
+PASS count is 99
+PASS foo(bar) is 42
+PASS count is 100
+PASS foo(bar) is 42
+PASS count is 101
+PASS foo(bar) is 42
+PASS count is 102
+PASS foo(bar) is 42
+PASS count is 103
+PASS foo(bar) is 42
+PASS count is 104
+PASS foo(bar) is 42
+PASS count is 105
+PASS foo(bar) is 42
+PASS count is 106
+PASS foo(bar) is 42
+PASS count is 107
+PASS foo(bar) is 42
+PASS count is 108
+PASS foo(bar) is 42
+PASS count is 109
+PASS foo(bar) is 42
+PASS count is 110
+PASS foo(bar) is 42
+PASS count is 111
+PASS foo(bar) is 42
+PASS count is 112
+PASS foo(bar) is 42
+PASS count is 113
+PASS foo(bar) is 42
+PASS count is 114
+PASS foo(bar) is 42
+PASS count is 115
+PASS foo(bar) is 42
+PASS count is 116
+PASS foo(bar) is 42
+PASS count is 117
+PASS foo(bar) is 42
+PASS count is 118
+PASS foo(bar) is 42
+PASS count is 119
+PASS foo(bar) is 42
+PASS count is 120
+PASS foo(bar) is 42
+PASS count is 121
+PASS foo(bar) is 42
+PASS count is 122
+PASS foo(bar) is 42
+PASS count is 123
+PASS foo(bar) is 42
+PASS count is 124
+PASS foo(bar) is 42
+PASS count is 125
+PASS foo(bar) is 42
+PASS count is 126
+PASS foo(bar) is 42
+PASS count is 127
+PASS foo(bar) is 42
+PASS count is 128
+PASS foo(bar) is 42
+PASS count is 129
+PASS foo(bar) is 42
+PASS count is 130
+PASS foo(bar) is 42
+PASS count is 131
+PASS foo(bar) is 42
+PASS count is 132
+PASS foo(bar) is 42
+PASS count is 133
+PASS foo(bar) is 42
+PASS count is 134
+PASS foo(bar) is 42
+PASS count is 135
+PASS foo(bar) is 42
+PASS count is 136
+PASS foo(bar) is 42
+PASS count is 137
+PASS foo(bar) is 42
+PASS count is 138
+PASS foo(bar) is 42
+PASS count is 139
+PASS foo(bar) is 42
+PASS count is 140
+PASS foo(bar) is 42
+PASS count is 141
+PASS foo(bar) is 42
+PASS count is 142
+PASS foo(bar) is 42
+PASS count is 143
+PASS foo(bar) is 42
+PASS count is 144
+PASS foo(bar) is 42
+PASS count is 145
+PASS foo(bar) is 42
+PASS count is 146
+PASS foo(bar) is 42
+PASS count is 147
+PASS foo(bar) is 42
+PASS count is 148
+PASS foo(bar) is 42
+PASS count is 149
+PASS foo(bar) is 42
+PASS count is 150
+PASS foo(bar) is 42
+PASS count is 151
+PASS foo(bar) is 42
+PASS count is 152
+PASS foo(bar) is 42
+PASS count is 153
+PASS foo(bar) is 42
+PASS count is 154
+PASS foo(bar) is 42
+PASS count is 155
+PASS foo(bar) is 42
+PASS count is 156
+PASS foo(bar) is 42
+PASS count is 157
+PASS foo(bar) is 42
+PASS count is 158
+PASS foo(bar) is 42
+PASS count is 159
+PASS foo(bar) is 42
+PASS count is 160
+PASS foo(bar) is 42
+PASS count is 161
+PASS foo(bar) is 42
+PASS count is 162
+PASS foo(bar) is 42
+PASS count is 163
+PASS foo(bar) is 42
+PASS count is 164
+PASS foo(bar) is 42
+PASS count is 165
+PASS foo(bar) is 42
+PASS count is 166
+PASS foo(bar) is 42
+PASS count is 167
+PASS foo(bar) is 42
+PASS count is 168
+PASS foo(bar) is 42
+PASS count is 169
+PASS foo(bar) is 42
+PASS count is 170
+PASS foo(bar) is 42
+PASS count is 171
+PASS foo(bar) is 42
+PASS count is 172
+PASS foo(bar) is 42
+PASS count is 173
+PASS foo(bar) is 42
+PASS count is 174
+PASS foo(bar) is 42
+PASS count is 175
+PASS foo(bar) is 42
+PASS count is 176
+PASS foo(bar) is 42
+PASS count is 177
+PASS foo(bar) is 42
+PASS count is 178
+PASS foo(bar) is 42
+PASS count is 179
+PASS foo(bar) is 42
+PASS count is 180
+PASS foo(bar) is 42
+PASS count is 181
+PASS foo(bar) is 42
+PASS count is 182
+PASS foo(bar) is 42
+PASS count is 183
+PASS foo(bar) is 42
+PASS count is 184
+PASS foo(bar) is 42
+PASS count is 185
+PASS foo(bar) is 42
+PASS count is 186
+PASS foo(bar) is 42
+PASS count is 187
+PASS foo(bar) is 42
+PASS count is 188
+PASS foo(bar) is 42
+PASS count is 189
+PASS foo(bar) is 42
+PASS count is 190
+PASS foo(bar) is 42
+PASS count is 191
+PASS foo(bar) is 42
+PASS count is 192
+PASS foo(bar) is 42
+PASS count is 193
+PASS foo(bar) is 42
+PASS count is 194
+PASS foo(bar) is 42
+PASS count is 195
+PASS foo(bar) is 42
+PASS count is 196
+PASS foo(bar) is 42
+PASS count is 197
+PASS foo(bar) is 42
+PASS count is 198
+PASS foo(bar) is 42
+PASS count is 199
+PASS foo(bar) is 42
+PASS count is 200
+PASS foo(bar) is 42
+PASS count is 201
+PASS foo(bar) is 42
+PASS count is 202
+PASS foo(bar) is 42
+PASS count is 203
+PASS foo(bar) is 42
+PASS count is 204
+PASS foo(bar) is 42
+PASS count is 205
+PASS foo(bar) is 42
+PASS count is 206
+PASS foo(bar) is 42
+PASS count is 207
+PASS foo(bar) is 42
+PASS count is 208
+PASS foo(bar) is 42
+PASS count is 209
+PASS foo(bar) is 42
+PASS count is 210
+PASS foo(bar) is 42
+PASS count is 211
+PASS foo(bar) is 42
+PASS count is 212
+PASS foo(bar) is 42
+PASS count is 213
+PASS foo(bar) is 42
+PASS count is 214
+PASS foo(bar) is 42
+PASS count is 215
+PASS foo(bar) is 42
+PASS count is 216
+PASS foo(bar) is 42
+PASS count is 217
+PASS foo(bar) is 42
+PASS count is 218
+PASS foo(bar) is 42
+PASS count is 219
+PASS foo(bar) is 42
+PASS count is 220
+PASS foo(bar) is 42
+PASS count is 221
+PASS foo(bar) is 42
+PASS count is 222
+PASS foo(bar) is 42
+PASS count is 223
+PASS foo(bar) is 42
+PASS count is 224
+PASS foo(bar) is 42
+PASS count is 225
+PASS foo(bar) is 42
+PASS count is 226
+PASS foo(bar) is 42
+PASS count is 227
+PASS foo(bar) is 42
+PASS count is 228
+PASS foo(bar) is 42
+PASS count is 229
+PASS foo(bar) is 42
+PASS count is 230
+PASS foo(bar) is 42
+PASS count is 231
+PASS foo(bar) is 42
+PASS count is 232
+PASS foo(bar) is 42
+PASS count is 233
+PASS foo(bar) is 42
+PASS count is 234
+PASS foo(bar) is 42
+PASS count is 235
+PASS foo(bar) is 42
+PASS count is 236
+PASS foo(bar) is 42
+PASS count is 237
+PASS foo(bar) is 42
+PASS count is 238
+PASS foo(bar) is 42
+PASS count is 239
+PASS foo(bar) is 42
+PASS count is 240
+PASS foo(bar) is 42
+PASS count is 241
+PASS foo(bar) is 42
+PASS count is 242
+PASS foo(bar) is 42
+PASS count is 243
+PASS foo(bar) is 42
+PASS count is 244
+PASS foo(bar) is 42
+PASS count is 245
+PASS foo(bar) is 42
+PASS count is 246
+PASS foo(bar) is 42
+PASS count is 247
+PASS foo(bar) is 42
+PASS count is 248
+PASS foo(bar) is 42
+PASS count is 249
+PASS foo(bar) is 42
+PASS count is 250
+PASS foo(bar) is 42
+PASS count is 251
+PASS foo(bar) is 42
+PASS count is 252
+PASS foo(bar) is 42
+PASS count is 253
+PASS foo(bar) is 42
+PASS count is 254
+PASS foo(bar) is 42
+PASS count is 255
+PASS foo(bar) is 42
+PASS count is 256
+PASS foo(bar) is 42
+PASS count is 257
+PASS foo(bar) is 42
+PASS count is 258
+PASS foo(bar) is 42
+PASS count is 259
+PASS foo(bar) is 42
+PASS count is 260
+PASS foo(bar) is 42
+PASS count is 261
+PASS foo(bar) is 42
+PASS count is 262
+PASS foo(bar) is 42
+PASS count is 263
+PASS foo(bar) is 42
+PASS count is 264
+PASS foo(bar) is 42
+PASS count is 265
+PASS foo(bar) is 42
+PASS count is 266
+PASS foo(bar) is 42
+PASS count is 267
+PASS foo(bar) is 42
+PASS count is 268
+PASS foo(bar) is 42
+PASS count is 269
+PASS foo(bar) is 42
+PASS count is 270
+PASS foo(bar) is 42
+PASS count is 271
+PASS foo(bar) is 42
+PASS count is 272
+PASS foo(bar) is 42
+PASS count is 273
+PASS foo(bar) is 42
+PASS count is 274
+PASS foo(bar) is 42
+PASS count is 275
+PASS foo(bar) is 42
+PASS count is 276
+PASS foo(bar) is 42
+PASS count is 277
+PASS foo(bar) is 42
+PASS count is 278
+PASS foo(bar) is 42
+PASS count is 279
+PASS foo(bar) is 42
+PASS count is 280
+PASS foo(bar) is 42
+PASS count is 281
+PASS foo(bar) is 42
+PASS count is 282
+PASS foo(bar) is 42
+PASS count is 283
+PASS foo(bar) is 42
+PASS count is 284
+PASS foo(bar) is 42
+PASS count is 285
+PASS foo(bar) is 42
+PASS count is 286
+PASS foo(bar) is 42
+PASS count is 287
+PASS foo(bar) is 42
+PASS count is 288
+PASS foo(bar) is 42
+PASS count is 289
+PASS foo(bar) is 42
+PASS count is 290
+PASS foo(bar) is 42
+PASS count is 291
+PASS foo(bar) is 42
+PASS count is 292
+PASS foo(bar) is 42
+PASS count is 293
+PASS foo(bar) is 42
+PASS count is 294
+PASS foo(bar) is 42
+PASS count is 295
+PASS foo(bar) is 42
+PASS count is 296
+PASS foo(bar) is 42
+PASS count is 297
+PASS foo(bar) is 42
+PASS count is 298
+PASS foo(bar) is 42
+PASS count is 299
+PASS foo(bar) is 42
+PASS count is 300
+PASS foo(bar) is 42
+PASS count is 301
+PASS foo(bar) is 42
+PASS count is 302
+PASS foo(bar) is 42
+PASS count is 303
+PASS foo(bar) is 42
+PASS count is 304
+PASS foo(bar) is 42
+PASS count is 305
+PASS foo(bar) is 42
+PASS count is 306
+PASS foo(bar) is 42
+PASS count is 307
+PASS foo(bar) is 42
+PASS count is 308
+PASS foo(bar) is 42
+PASS count is 309
+PASS foo(bar) is 42
+PASS count is 310
+PASS foo(bar) is 42
+PASS count is 311
+PASS foo(bar) is 42
+PASS count is 312
+PASS foo(bar) is 42
+PASS count is 313
+PASS foo(bar) is 42
+PASS count is 314
+PASS foo(bar) is 42
+PASS count is 315
+PASS foo(bar) is 42
+PASS count is 316
+PASS foo(bar) is 42
+PASS count is 317
+PASS foo(bar) is 42
+PASS count is 318
+PASS foo(bar) is 42
+PASS count is 319
+PASS foo(bar) is 42
+PASS count is 320
+PASS foo(bar) is 42
+PASS count is 321
+PASS foo(bar) is 42
+PASS count is 322
+PASS foo(bar) is 42
+PASS count is 323
+PASS foo(bar) is 42
+PASS count is 324
+PASS foo(bar) is 42
+PASS count is 325
+PASS foo(bar) is 42
+PASS count is 326
+PASS foo(bar) is 42
+PASS count is 327
+PASS foo(bar) is 42
+PASS count is 328
+PASS foo(bar) is 42
+PASS count is 329
+PASS foo(bar) is 42
+PASS count is 330
+PASS foo(bar) is 42
+PASS count is 331
+PASS foo(bar) is 42
+PASS count is 332
+PASS foo(bar) is 42
+PASS count is 333
+PASS foo(bar) is 42
+PASS count is 334
+PASS foo(bar) is 42
+PASS count is 335
+PASS foo(bar) is 42
+PASS count is 336
+PASS foo(bar) is 42
+PASS count is 337
+PASS foo(bar) is 42
+PASS count is 338
+PASS foo(bar) is 42
+PASS count is 339
+PASS foo(bar) is 42
+PASS count is 340
+PASS foo(bar) is 42
+PASS count is 341
+PASS foo(bar) is 42
+PASS count is 342
+PASS foo(bar) is 42
+PASS count is 343
+PASS foo(bar) is 42
+PASS count is 344
+PASS foo(bar) is 42
+PASS count is 345
+PASS foo(bar) is 42
+PASS count is 346
+PASS foo(bar) is 42
+PASS count is 347
+PASS foo(bar) is 42
+PASS count is 348
+PASS foo(bar) is 42
+PASS count is 349
+PASS foo(bar) is 42
+PASS count is 350
+PASS foo(bar) is 42
+PASS count is 351
+PASS foo(bar) is 42
+PASS count is 352
+PASS foo(bar) is 42
+PASS count is 353
+PASS foo(bar) is 42
+PASS count is 354
+PASS foo(bar) is 42
+PASS count is 355
+PASS foo(bar) is 42
+PASS count is 356
+PASS foo(bar) is 42
+PASS count is 357
+PASS foo(bar) is 42
+PASS count is 358
+PASS foo(bar) is 42
+PASS count is 359
+PASS foo(bar) is 42
+PASS count is 360
+PASS foo(bar) is 42
+PASS count is 361
+PASS foo(bar) is 42
+PASS count is 362
+PASS foo(bar) is 42
+PASS count is 363
+PASS foo(bar) is 42
+PASS count is 364
+PASS foo(bar) is 42
+PASS count is 365
+PASS foo(bar) is 42
+PASS count is 366
+PASS foo(bar) is 42
+PASS count is 367
+PASS foo(bar) is 42
+PASS count is 368
+PASS foo(bar) is 42
+PASS count is 369
+PASS foo(bar) is 42
+PASS count is 370
+PASS foo(bar) is 42
+PASS count is 371
+PASS foo(bar) is 42
+PASS count is 372
+PASS foo(bar) is 42
+PASS count is 373
+PASS foo(bar) is 42
+PASS count is 374
+PASS foo(bar) is 42
+PASS count is 375
+PASS foo(bar) is 42
+PASS count is 376
+PASS foo(bar) is 42
+PASS count is 377
+PASS foo(bar) is 42
+PASS count is 378
+PASS foo(bar) is 42
+PASS count is 379
+PASS foo(bar) is 42
+PASS count is 380
+PASS foo(bar) is 42
+PASS count is 381
+PASS foo(bar) is 42
+PASS count is 382
+PASS foo(bar) is 42
+PASS count is 383
+PASS foo(bar) is 42
+PASS count is 384
+PASS foo(bar) is 42
+PASS count is 385
+PASS foo(bar) is 42
+PASS count is 386
+PASS foo(bar) is 42
+PASS count is 387
+PASS foo(bar) is 42
+PASS count is 388
+PASS foo(bar) is 42
+PASS count is 389
+PASS foo(bar) is 42
+PASS count is 390
+PASS foo(bar) is 42
+PASS count is 391
+PASS foo(bar) is 42
+PASS count is 392
+PASS foo(bar) is 42
+PASS count is 393
+PASS foo(bar) is 42
+PASS count is 394
+PASS foo(bar) is 42
+PASS count is 395
+PASS foo(bar) is 42
+PASS count is 396
+PASS foo(bar) is 42
+PASS count is 397
+PASS foo(bar) is 42
+PASS count is 398
+PASS foo(bar) is 42
+PASS count is 399
+PASS foo(bar) is 42
+PASS count is 400
+PASS foo(bar) is 42
+PASS count is 401
+PASS foo(bar) is 42
+PASS count is 402
+PASS foo(bar) is 42
+PASS count is 403
+PASS foo(bar) is 42
+PASS count is 404
+PASS foo(bar) is 42
+PASS count is 405
+PASS foo(bar) is 42
+PASS count is 406
+PASS foo(bar) is 42
+PASS count is 407
+PASS foo(bar) is 42
+PASS count is 408
+PASS foo(bar) is 42
+PASS count is 409
+PASS foo(bar) is 42
+PASS count is 410
+PASS foo(bar) is 42
+PASS count is 411
+PASS foo(bar) is 42
+PASS count is 412
+PASS foo(bar) is 42
+PASS count is 413
+PASS foo(bar) is 42
+PASS count is 414
+PASS foo(bar) is 42
+PASS count is 415
+PASS foo(bar) is 42
+PASS count is 416
+PASS foo(bar) is 42
+PASS count is 417
+PASS foo(bar) is 42
+PASS count is 418
+PASS foo(bar) is 42
+PASS count is 419
+PASS foo(bar) is 42
+PASS count is 420
+PASS foo(bar) is 42
+PASS count is 421
+PASS foo(bar) is 42
+PASS count is 422
+PASS foo(bar) is 42
+PASS count is 423
+PASS foo(bar) is 42
+PASS count is 424
+PASS foo(bar) is 42
+PASS count is 425
+PASS foo(bar) is 42
+PASS count is 426
+PASS foo(bar) is 42
+PASS count is 427
+PASS foo(bar) is 42
+PASS count is 428
+PASS foo(bar) is 42
+PASS count is 429
+PASS foo(bar) is 42
+PASS count is 430
+PASS foo(bar) is 42
+PASS count is 431
+PASS foo(bar) is 42
+PASS count is 432
+PASS foo(bar) is 42
+PASS count is 433
+PASS foo(bar) is 42
+PASS count is 434
+PASS foo(bar) is 42
+PASS count is 435
+PASS foo(bar) is 42
+PASS count is 436
+PASS foo(bar) is 42
+PASS count is 437
+PASS foo(bar) is 42
+PASS count is 438
+PASS foo(bar) is 42
+PASS count is 439
+PASS foo(bar) is 42
+PASS count is 440
+PASS foo(bar) is 42
+PASS count is 441
+PASS foo(bar) is 42
+PASS count is 442
+PASS foo(bar) is 42
+PASS count is 443
+PASS foo(bar) is 42
+PASS count is 444
+PASS foo(bar) is 42
+PASS count is 445
+PASS foo(bar) is 42
+PASS count is 446
+PASS foo(bar) is 42
+PASS count is 447
+PASS foo(bar) is 42
+PASS count is 448
+PASS foo(bar) is 42
+PASS count is 449
+PASS foo(bar) is 42
+PASS count is 450
+PASS foo(bar) is "stuff"
+PASS count is 451
+PASS foo(bar) is "stuff"
+PASS count is 452
+PASS foo(bar) is "stuff"
+PASS count is 453
+PASS foo(bar) is "stuff"
+PASS count is 454
+PASS foo(bar) is "stuff"
+PASS count is 455
+PASS foo(bar) is "stuff"
+PASS count is 456
+PASS foo(bar) is "stuff"
+PASS count is 457
+PASS foo(bar) is "stuff"
+PASS count is 458
+PASS foo(bar) is "stuff"
+PASS count is 459
+PASS foo(bar) is "stuff"
+PASS count is 460
+PASS foo(bar) is "stuff"
+PASS count is 461
+PASS foo(bar) is "stuff"
+PASS count is 462
+PASS foo(bar) is "stuff"
+PASS count is 463
+PASS foo(bar) is "stuff"
+PASS count is 464
+PASS foo(bar) is "stuff"
+PASS count is 465
+PASS foo(bar) is "stuff"
+PASS count is 466
+PASS foo(bar) is "stuff"
+PASS count is 467
+PASS foo(bar) is "stuff"
+PASS count is 468
+PASS foo(bar) is "stuff"
+PASS count is 469
+PASS foo(bar) is "stuff"
+PASS count is 470
+PASS foo(bar) is "stuff"
+PASS count is 471
+PASS foo(bar) is "stuff"
+PASS count is 472
+PASS foo(bar) is "stuff"
+PASS count is 473
+PASS foo(bar) is "stuff"
+PASS count is 474
+PASS foo(bar) is "stuff"
+PASS count is 475
+PASS foo(bar) is "stuff"
+PASS count is 476
+PASS foo(bar) is "stuff"
+PASS count is 477
+PASS foo(bar) is "stuff"
+PASS count is 478
+PASS foo(bar) is "stuff"
+PASS count is 479
+PASS foo(bar) is "stuff"
+PASS count is 480
+PASS foo(bar) is "stuff"
+PASS count is 481
+PASS foo(bar) is "stuff"
+PASS count is 482
+PASS foo(bar) is "stuff"
+PASS count is 483
+PASS foo(bar) is "stuff"
+PASS count is 484
+PASS foo(bar) is "stuff"
+PASS count is 485
+PASS foo(bar) is "stuff"
+PASS count is 486
+PASS foo(bar) is "stuff"
+PASS count is 487
+PASS foo(bar) is "stuff"
+PASS count is 488
+PASS foo(bar) is "stuff"
+PASS count is 489
+PASS foo(bar) is "stuff"
+PASS count is 490
+PASS foo(bar) is "stuff"
+PASS count is 491
+PASS foo(bar) is "stuff"
+PASS count is 492
+PASS foo(bar) is "stuff"
+PASS count is 493
+PASS foo(bar) is "stuff"
+PASS count is 494
+PASS foo(bar) is "stuff"
+PASS count is 495
+PASS foo(bar) is "stuff"
+PASS count is 496
+PASS foo(bar) is "stuff"
+PASS count is 497
+PASS foo(bar) is "stuff"
+PASS count is 498
+PASS foo(bar) is "stuff"
+PASS count is 499
+PASS foo(bar) is "stuff"
+PASS count is 500
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-side-effect-assignment-osr-exit.js b/deps/v8/test/webkit/dfg-side-effect-assignment-osr-exit.js
new file mode 100644 (file)
index 0000000..696393f
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens if we OSR exit on an assignment that was part of a side-effecting bytecode instruction."
+);
+
+function foo(f) {
+    var x = f();
+    if (x)
+        return x;
+}
+
+var count = 0;
+function bar() {
+    count++;
+    return eval(baz);
+}
+
+var baz = "42";
+
+for (var i = 0; i < 500; ++i) {
+    if (i == 450)
+        baz = "\"stuff\"";
+    shouldBe("foo(bar)", baz);
+    shouldBe("count", "" + (i + 1));
+}
diff --git a/deps/v8/test/webkit/dfg-sqrt-backwards-propagation-expected.txt b/deps/v8/test/webkit/dfg-sqrt-backwards-propagation-expected.txt
new file mode 100644 (file)
index 0000000..7a219c0
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG knows that a function that appears like Math.sqrt could potentially use value in arbitrary ways, and not just in a context that converts values to numbers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(bar, [, 1.5], 0) is void 0
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-sqrt-backwards-propagation.js b/deps/v8/test/webkit/dfg-sqrt-backwards-propagation.js
new file mode 100644 (file)
index 0000000..9954e3a
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG knows that a function that appears like Math.sqrt could potentially use value in arbitrary ways, and not just in a context that converts values to numbers."
+);
+
+function foo(f, array, i) {
+    return f(array[i]);
+}
+
+function bar(value) {
+    return value;
+}
+
+for (var i = 0; i < 200; ++i) {
+    var f, array, expected;
+    if (i == 190) {
+        f = "bar";
+        array = "[, 1.5]";
+        expected = "void 0";
+    } else {
+        f = "Math.sqrt";
+        array = "[1.5]";
+        expected = "Math.sqrt(1.5)";
+    }
+    shouldBe("foo(" + f + ", " + array + ", 0)", expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-store-unexpected-value-into-argument-and-osr-exit-expected.txt b/deps/v8/test/webkit/dfg-store-unexpected-value-into-argument-and-osr-exit-expected.txt
new file mode 100644 (file)
index 0000000..fe8905d
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens when you store an unexpected value into an argument (where the original argument value was the expected one) and then OSR exit.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-store-unexpected-value-into-argument-and-osr-exit.js b/deps/v8/test/webkit/dfg-store-unexpected-value-into-argument-and-osr-exit.js
new file mode 100644 (file)
index 0000000..1006c28
--- /dev/null
@@ -0,0 +1,64 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens when you store an unexpected value into an argument (where the original argument value was the expected one) and then OSR exit."
+);
+
+function foo(x, o, p) {
+    x = o.f;
+    if (p) {
+        var result = o.g + x;
+        x = true; // Force x to not have a hoisted integer speculation.
+        return result;
+    } else
+        return o.g - x;
+}
+
+for (var i = 0; i < 200; ++i) {
+    var expected;
+    var p, f, g;
+    if (i < 150) {
+        f = 42;
+        g = 43;
+        if (i%2) {
+            p = true;
+            expected = 85;
+        } else {
+            p = false;
+            expected = 1;
+        }
+    } else {
+        f = 42.5;
+        g = 43;
+        if (i%2) {
+            p = true;
+            expected = 85.5;
+        } else {
+            p = false;
+            expected = 0.5;
+        }
+    }
+    shouldBe("foo(3, {f:f, g:g}, p)", "" + expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-string-stricteq-expected.txt b/deps/v8/test/webkit/dfg-string-stricteq-expected.txt
new file mode 100644 (file)
index 0000000..cc6a86f
--- /dev/null
@@ -0,0 +1,2032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG does the right thing on strict equality for known strings.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo({f:"blah0"}, {f:"blah1000"}) is [13, false]
+PASS bar({f:"blah0"}, {f:"blah1000"}) is 12
+PASS foo({f:"blah1"}, {f:"blah999"}) is [12, false]
+PASS bar({f:"blah1"}, {f:"blah999"}) is 11
+PASS foo({f:"blah2"}, {f:"blah998"}) is [12, false]
+PASS bar({f:"blah2"}, {f:"blah998"}) is 11
+PASS foo({f:"blah3"}, {f:"blah997"}) is [12, false]
+PASS bar({f:"blah3"}, {f:"blah997"}) is 11
+PASS foo({f:"blah4"}, {f:"blah996"}) is [12, false]
+PASS bar({f:"blah4"}, {f:"blah996"}) is 11
+PASS foo({f:"blah5"}, {f:"blah995"}) is [12, false]
+PASS bar({f:"blah5"}, {f:"blah995"}) is 11
+PASS foo({f:"blah6"}, {f:"blah994"}) is [12, false]
+PASS bar({f:"blah6"}, {f:"blah994"}) is 11
+PASS foo({f:"blah7"}, {f:"blah993"}) is [12, false]
+PASS bar({f:"blah7"}, {f:"blah993"}) is 11
+PASS foo({f:"blah8"}, {f:"blah992"}) is [12, false]
+PASS bar({f:"blah8"}, {f:"blah992"}) is 11
+PASS foo({f:"blah9"}, {f:"blah991"}) is [12, false]
+PASS bar({f:"blah9"}, {f:"blah991"}) is 11
+PASS foo({f:"blah10"}, {f:"blah990"}) is [13, false]
+PASS bar({f:"blah10"}, {f:"blah990"}) is 12
+PASS foo({f:"blah11"}, {f:"blah989"}) is [13, false]
+PASS bar({f:"blah11"}, {f:"blah989"}) is 12
+PASS foo({f:"blah12"}, {f:"blah988"}) is [13, false]
+PASS bar({f:"blah12"}, {f:"blah988"}) is 12
+PASS foo({f:"blah13"}, {f:"blah987"}) is [13, false]
+PASS bar({f:"blah13"}, {f:"blah987"}) is 12
+PASS foo({f:"blah14"}, {f:"blah986"}) is [13, false]
+PASS bar({f:"blah14"}, {f:"blah986"}) is 12
+PASS foo({f:"blah15"}, {f:"blah985"}) is [13, false]
+PASS bar({f:"blah15"}, {f:"blah985"}) is 12
+PASS foo({f:"blah16"}, {f:"blah984"}) is [13, false]
+PASS bar({f:"blah16"}, {f:"blah984"}) is 12
+PASS foo({f:"blah17"}, {f:"blah983"}) is [13, false]
+PASS bar({f:"blah17"}, {f:"blah983"}) is 12
+PASS foo({f:"blah18"}, {f:"blah982"}) is [13, false]
+PASS bar({f:"blah18"}, {f:"blah982"}) is 12
+PASS foo({f:"blah19"}, {f:"blah981"}) is [13, false]
+PASS bar({f:"blah19"}, {f:"blah981"}) is 12
+PASS foo({f:"blah20"}, {f:"blah980"}) is [13, false]
+PASS bar({f:"blah20"}, {f:"blah980"}) is 12
+PASS foo({f:"blah21"}, {f:"blah979"}) is [13, false]
+PASS bar({f:"blah21"}, {f:"blah979"}) is 12
+PASS foo({f:"blah22"}, {f:"blah978"}) is [13, false]
+PASS bar({f:"blah22"}, {f:"blah978"}) is 12
+PASS foo({f:"blah23"}, {f:"blah977"}) is [13, false]
+PASS bar({f:"blah23"}, {f:"blah977"}) is 12
+PASS foo({f:"blah24"}, {f:"blah976"}) is [13, false]
+PASS bar({f:"blah24"}, {f:"blah976"}) is 12
+PASS foo({f:"blah25"}, {f:"blah975"}) is [13, false]
+PASS bar({f:"blah25"}, {f:"blah975"}) is 12
+PASS foo({f:"blah26"}, {f:"blah974"}) is [13, false]
+PASS bar({f:"blah26"}, {f:"blah974"}) is 12
+PASS foo({f:"blah27"}, {f:"blah973"}) is [13, false]
+PASS bar({f:"blah27"}, {f:"blah973"}) is 12
+PASS foo({f:"blah28"}, {f:"blah972"}) is [13, false]
+PASS bar({f:"blah28"}, {f:"blah972"}) is 12
+PASS foo({f:"blah29"}, {f:"blah971"}) is [13, false]
+PASS bar({f:"blah29"}, {f:"blah971"}) is 12
+PASS foo({f:"blah30"}, {f:"blah970"}) is [13, false]
+PASS bar({f:"blah30"}, {f:"blah970"}) is 12
+PASS foo({f:"blah31"}, {f:"blah969"}) is [13, false]
+PASS bar({f:"blah31"}, {f:"blah969"}) is 12
+PASS foo({f:"blah32"}, {f:"blah968"}) is [13, false]
+PASS bar({f:"blah32"}, {f:"blah968"}) is 12
+PASS foo({f:"blah33"}, {f:"blah967"}) is [13, false]
+PASS bar({f:"blah33"}, {f:"blah967"}) is 12
+PASS foo({f:"blah34"}, {f:"blah966"}) is [13, false]
+PASS bar({f:"blah34"}, {f:"blah966"}) is 12
+PASS foo({f:"blah35"}, {f:"blah965"}) is [13, false]
+PASS bar({f:"blah35"}, {f:"blah965"}) is 12
+PASS foo({f:"blah36"}, {f:"blah964"}) is [13, false]
+PASS bar({f:"blah36"}, {f:"blah964"}) is 12
+PASS foo({f:"blah37"}, {f:"blah963"}) is [13, false]
+PASS bar({f:"blah37"}, {f:"blah963"}) is 12
+PASS foo({f:"blah38"}, {f:"blah962"}) is [13, false]
+PASS bar({f:"blah38"}, {f:"blah962"}) is 12
+PASS foo({f:"blah39"}, {f:"blah961"}) is [13, false]
+PASS bar({f:"blah39"}, {f:"blah961"}) is 12
+PASS foo({f:"blah40"}, {f:"blah960"}) is [13, false]
+PASS bar({f:"blah40"}, {f:"blah960"}) is 12
+PASS foo({f:"blah41"}, {f:"blah959"}) is [13, false]
+PASS bar({f:"blah41"}, {f:"blah959"}) is 12
+PASS foo({f:"blah42"}, {f:"blah958"}) is [13, false]
+PASS bar({f:"blah42"}, {f:"blah958"}) is 12
+PASS foo({f:"blah43"}, {f:"blah957"}) is [13, false]
+PASS bar({f:"blah43"}, {f:"blah957"}) is 12
+PASS foo({f:"blah44"}, {f:"blah956"}) is [13, false]
+PASS bar({f:"blah44"}, {f:"blah956"}) is 12
+PASS foo({f:"blah45"}, {f:"blah955"}) is [13, false]
+PASS bar({f:"blah45"}, {f:"blah955"}) is 12
+PASS foo({f:"blah46"}, {f:"blah954"}) is [13, false]
+PASS bar({f:"blah46"}, {f:"blah954"}) is 12
+PASS foo({f:"blah47"}, {f:"blah953"}) is [13, false]
+PASS bar({f:"blah47"}, {f:"blah953"}) is 12
+PASS foo({f:"blah48"}, {f:"blah952"}) is [13, false]
+PASS bar({f:"blah48"}, {f:"blah952"}) is 12
+PASS foo({f:"blah49"}, {f:"blah951"}) is [13, false]
+PASS bar({f:"blah49"}, {f:"blah951"}) is 12
+PASS foo({f:"blah50"}, {f:"blah950"}) is [13, false]
+PASS bar({f:"blah50"}, {f:"blah950"}) is 12
+PASS foo({f:"blah51"}, {f:"blah949"}) is [13, false]
+PASS bar({f:"blah51"}, {f:"blah949"}) is 12
+PASS foo({f:"blah52"}, {f:"blah948"}) is [13, false]
+PASS bar({f:"blah52"}, {f:"blah948"}) is 12
+PASS foo({f:"blah53"}, {f:"blah947"}) is [13, false]
+PASS bar({f:"blah53"}, {f:"blah947"}) is 12
+PASS foo({f:"blah54"}, {f:"blah946"}) is [13, false]
+PASS bar({f:"blah54"}, {f:"blah946"}) is 12
+PASS foo({f:"blah55"}, {f:"blah945"}) is [13, false]
+PASS bar({f:"blah55"}, {f:"blah945"}) is 12
+PASS foo({f:"blah56"}, {f:"blah944"}) is [13, false]
+PASS bar({f:"blah56"}, {f:"blah944"}) is 12
+PASS foo({f:"blah57"}, {f:"blah943"}) is [13, false]
+PASS bar({f:"blah57"}, {f:"blah943"}) is 12
+PASS foo({f:"blah58"}, {f:"blah942"}) is [13, false]
+PASS bar({f:"blah58"}, {f:"blah942"}) is 12
+PASS foo({f:"blah59"}, {f:"blah941"}) is [13, false]
+PASS bar({f:"blah59"}, {f:"blah941"}) is 12
+PASS foo({f:"blah60"}, {f:"blah940"}) is [13, false]
+PASS bar({f:"blah60"}, {f:"blah940"}) is 12
+PASS foo({f:"blah61"}, {f:"blah939"}) is [13, false]
+PASS bar({f:"blah61"}, {f:"blah939"}) is 12
+PASS foo({f:"blah62"}, {f:"blah938"}) is [13, false]
+PASS bar({f:"blah62"}, {f:"blah938"}) is 12
+PASS foo({f:"blah63"}, {f:"blah937"}) is [13, false]
+PASS bar({f:"blah63"}, {f:"blah937"}) is 12
+PASS foo({f:"blah64"}, {f:"blah936"}) is [13, false]
+PASS bar({f:"blah64"}, {f:"blah936"}) is 12
+PASS foo({f:"blah65"}, {f:"blah935"}) is [13, false]
+PASS bar({f:"blah65"}, {f:"blah935"}) is 12
+PASS foo({f:"blah66"}, {f:"blah934"}) is [13, false]
+PASS bar({f:"blah66"}, {f:"blah934"}) is 12
+PASS foo({f:"blah67"}, {f:"blah933"}) is [13, false]
+PASS bar({f:"blah67"}, {f:"blah933"}) is 12
+PASS foo({f:"blah68"}, {f:"blah932"}) is [13, false]
+PASS bar({f:"blah68"}, {f:"blah932"}) is 12
+PASS foo({f:"blah69"}, {f:"blah931"}) is [13, false]
+PASS bar({f:"blah69"}, {f:"blah931"}) is 12
+PASS foo({f:"blah70"}, {f:"blah930"}) is [13, false]
+PASS bar({f:"blah70"}, {f:"blah930"}) is 12
+PASS foo({f:"blah71"}, {f:"blah929"}) is [13, false]
+PASS bar({f:"blah71"}, {f:"blah929"}) is 12
+PASS foo({f:"blah72"}, {f:"blah928"}) is [13, false]
+PASS bar({f:"blah72"}, {f:"blah928"}) is 12
+PASS foo({f:"blah73"}, {f:"blah927"}) is [13, false]
+PASS bar({f:"blah73"}, {f:"blah927"}) is 12
+PASS foo({f:"blah74"}, {f:"blah926"}) is [13, false]
+PASS bar({f:"blah74"}, {f:"blah926"}) is 12
+PASS foo({f:"blah75"}, {f:"blah925"}) is [13, false]
+PASS bar({f:"blah75"}, {f:"blah925"}) is 12
+PASS foo({f:"blah76"}, {f:"blah924"}) is [13, false]
+PASS bar({f:"blah76"}, {f:"blah924"}) is 12
+PASS foo({f:"blah77"}, {f:"blah923"}) is [13, false]
+PASS bar({f:"blah77"}, {f:"blah923"}) is 12
+PASS foo({f:"blah78"}, {f:"blah922"}) is [13, false]
+PASS bar({f:"blah78"}, {f:"blah922"}) is 12
+PASS foo({f:"blah79"}, {f:"blah921"}) is [13, false]
+PASS bar({f:"blah79"}, {f:"blah921"}) is 12
+PASS foo({f:"blah80"}, {f:"blah920"}) is [13, false]
+PASS bar({f:"blah80"}, {f:"blah920"}) is 12
+PASS foo({f:"blah81"}, {f:"blah919"}) is [13, false]
+PASS bar({f:"blah81"}, {f:"blah919"}) is 12
+PASS foo({f:"blah82"}, {f:"blah918"}) is [13, false]
+PASS bar({f:"blah82"}, {f:"blah918"}) is 12
+PASS foo({f:"blah83"}, {f:"blah917"}) is [13, false]
+PASS bar({f:"blah83"}, {f:"blah917"}) is 12
+PASS foo({f:"blah84"}, {f:"blah916"}) is [13, false]
+PASS bar({f:"blah84"}, {f:"blah916"}) is 12
+PASS foo({f:"blah85"}, {f:"blah915"}) is [13, false]
+PASS bar({f:"blah85"}, {f:"blah915"}) is 12
+PASS foo({f:"blah86"}, {f:"blah914"}) is [13, false]
+PASS bar({f:"blah86"}, {f:"blah914"}) is 12
+PASS foo({f:"blah87"}, {f:"blah913"}) is [13, false]
+PASS bar({f:"blah87"}, {f:"blah913"}) is 12
+PASS foo({f:"blah88"}, {f:"blah912"}) is [13, false]
+PASS bar({f:"blah88"}, {f:"blah912"}) is 12
+PASS foo({f:"blah89"}, {f:"blah911"}) is [13, false]
+PASS bar({f:"blah89"}, {f:"blah911"}) is 12
+PASS foo({f:"blah90"}, {f:"blah910"}) is [13, false]
+PASS bar({f:"blah90"}, {f:"blah910"}) is 12
+PASS foo({f:"blah91"}, {f:"blah909"}) is [13, false]
+PASS bar({f:"blah91"}, {f:"blah909"}) is 12
+PASS foo({f:"blah92"}, {f:"blah908"}) is [13, false]
+PASS bar({f:"blah92"}, {f:"blah908"}) is 12
+PASS foo({f:"blah93"}, {f:"blah907"}) is [13, false]
+PASS bar({f:"blah93"}, {f:"blah907"}) is 12
+PASS foo({f:"blah94"}, {f:"blah906"}) is [13, false]
+PASS bar({f:"blah94"}, {f:"blah906"}) is 12
+PASS foo({f:"blah95"}, {f:"blah905"}) is [13, false]
+PASS bar({f:"blah95"}, {f:"blah905"}) is 12
+PASS foo({f:"blah96"}, {f:"blah904"}) is [13, false]
+PASS bar({f:"blah96"}, {f:"blah904"}) is 12
+PASS foo({f:"blah97"}, {f:"blah903"}) is [13, false]
+PASS bar({f:"blah97"}, {f:"blah903"}) is 12
+PASS foo({f:"blah98"}, {f:"blah902"}) is [13, false]
+PASS bar({f:"blah98"}, {f:"blah902"}) is 12
+PASS foo({f:"blah99"}, {f:"blah901"}) is [13, false]
+PASS bar({f:"blah99"}, {f:"blah901"}) is 12
+PASS foo({f:"blah100"}, {f:"blah900"}) is [14, false]
+PASS bar({f:"blah100"}, {f:"blah900"}) is 13
+PASS foo({f:"blah101"}, {f:"blah899"}) is [14, false]
+PASS bar({f:"blah101"}, {f:"blah899"}) is 13
+PASS foo({f:"blah102"}, {f:"blah898"}) is [14, false]
+PASS bar({f:"blah102"}, {f:"blah898"}) is 13
+PASS foo({f:"blah103"}, {f:"blah897"}) is [14, false]
+PASS bar({f:"blah103"}, {f:"blah897"}) is 13
+PASS foo({f:"blah104"}, {f:"blah896"}) is [14, false]
+PASS bar({f:"blah104"}, {f:"blah896"}) is 13
+PASS foo({f:"blah105"}, {f:"blah895"}) is [14, false]
+PASS bar({f:"blah105"}, {f:"blah895"}) is 13
+PASS foo({f:"blah106"}, {f:"blah894"}) is [14, false]
+PASS bar({f:"blah106"}, {f:"blah894"}) is 13
+PASS foo({f:"blah107"}, {f:"blah893"}) is [14, false]
+PASS bar({f:"blah107"}, {f:"blah893"}) is 13
+PASS foo({f:"blah108"}, {f:"blah892"}) is [14, false]
+PASS bar({f:"blah108"}, {f:"blah892"}) is 13
+PASS foo({f:"blah109"}, {f:"blah891"}) is [14, false]
+PASS bar({f:"blah109"}, {f:"blah891"}) is 13
+PASS foo({f:"blah110"}, {f:"blah890"}) is [14, false]
+PASS bar({f:"blah110"}, {f:"blah890"}) is 13
+PASS foo({f:"blah111"}, {f:"blah889"}) is [14, false]
+PASS bar({f:"blah111"}, {f:"blah889"}) is 13
+PASS foo({f:"blah112"}, {f:"blah888"}) is [14, false]
+PASS bar({f:"blah112"}, {f:"blah888"}) is 13
+PASS foo({f:"blah113"}, {f:"blah887"}) is [14, false]
+PASS bar({f:"blah113"}, {f:"blah887"}) is 13
+PASS foo({f:"blah114"}, {f:"blah886"}) is [14, false]
+PASS bar({f:"blah114"}, {f:"blah886"}) is 13
+PASS foo({f:"blah115"}, {f:"blah885"}) is [14, false]
+PASS bar({f:"blah115"}, {f:"blah885"}) is 13
+PASS foo({f:"blah116"}, {f:"blah884"}) is [14, false]
+PASS bar({f:"blah116"}, {f:"blah884"}) is 13
+PASS foo({f:"blah117"}, {f:"blah883"}) is [14, false]
+PASS bar({f:"blah117"}, {f:"blah883"}) is 13
+PASS foo({f:"blah118"}, {f:"blah882"}) is [14, false]
+PASS bar({f:"blah118"}, {f:"blah882"}) is 13
+PASS foo({f:"blah119"}, {f:"blah881"}) is [14, false]
+PASS bar({f:"blah119"}, {f:"blah881"}) is 13
+PASS foo({f:"blah120"}, {f:"blah880"}) is [14, false]
+PASS bar({f:"blah120"}, {f:"blah880"}) is 13
+PASS foo({f:"blah121"}, {f:"blah879"}) is [14, false]
+PASS bar({f:"blah121"}, {f:"blah879"}) is 13
+PASS foo({f:"blah122"}, {f:"blah878"}) is [14, false]
+PASS bar({f:"blah122"}, {f:"blah878"}) is 13
+PASS foo({f:"blah123"}, {f:"blah877"}) is [14, false]
+PASS bar({f:"blah123"}, {f:"blah877"}) is 13
+PASS foo({f:"blah124"}, {f:"blah876"}) is [14, false]
+PASS bar({f:"blah124"}, {f:"blah876"}) is 13
+PASS foo({f:"blah125"}, {f:"blah875"}) is [14, false]
+PASS bar({f:"blah125"}, {f:"blah875"}) is 13
+PASS foo({f:"blah126"}, {f:"blah874"}) is [14, false]
+PASS bar({f:"blah126"}, {f:"blah874"}) is 13
+PASS foo({f:"blah127"}, {f:"blah873"}) is [14, false]
+PASS bar({f:"blah127"}, {f:"blah873"}) is 13
+PASS foo({f:"blah128"}, {f:"blah872"}) is [14, false]
+PASS bar({f:"blah128"}, {f:"blah872"}) is 13
+PASS foo({f:"blah129"}, {f:"blah871"}) is [14, false]
+PASS bar({f:"blah129"}, {f:"blah871"}) is 13
+PASS foo({f:"blah130"}, {f:"blah870"}) is [14, false]
+PASS bar({f:"blah130"}, {f:"blah870"}) is 13
+PASS foo({f:"blah131"}, {f:"blah869"}) is [14, false]
+PASS bar({f:"blah131"}, {f:"blah869"}) is 13
+PASS foo({f:"blah132"}, {f:"blah868"}) is [14, false]
+PASS bar({f:"blah132"}, {f:"blah868"}) is 13
+PASS foo({f:"blah133"}, {f:"blah867"}) is [14, false]
+PASS bar({f:"blah133"}, {f:"blah867"}) is 13
+PASS foo({f:"blah134"}, {f:"blah866"}) is [14, false]
+PASS bar({f:"blah134"}, {f:"blah866"}) is 13
+PASS foo({f:"blah135"}, {f:"blah865"}) is [14, false]
+PASS bar({f:"blah135"}, {f:"blah865"}) is 13
+PASS foo({f:"blah136"}, {f:"blah864"}) is [14, false]
+PASS bar({f:"blah136"}, {f:"blah864"}) is 13
+PASS foo({f:"blah137"}, {f:"blah863"}) is [14, false]
+PASS bar({f:"blah137"}, {f:"blah863"}) is 13
+PASS foo({f:"blah138"}, {f:"blah862"}) is [14, false]
+PASS bar({f:"blah138"}, {f:"blah862"}) is 13
+PASS foo({f:"blah139"}, {f:"blah861"}) is [14, false]
+PASS bar({f:"blah139"}, {f:"blah861"}) is 13
+PASS foo({f:"blah140"}, {f:"blah860"}) is [14, false]
+PASS bar({f:"blah140"}, {f:"blah860"}) is 13
+PASS foo({f:"blah141"}, {f:"blah859"}) is [14, false]
+PASS bar({f:"blah141"}, {f:"blah859"}) is 13
+PASS foo({f:"blah142"}, {f:"blah858"}) is [14, false]
+PASS bar({f:"blah142"}, {f:"blah858"}) is 13
+PASS foo({f:"blah143"}, {f:"blah857"}) is [14, false]
+PASS bar({f:"blah143"}, {f:"blah857"}) is 13
+PASS foo({f:"blah144"}, {f:"blah856"}) is [14, false]
+PASS bar({f:"blah144"}, {f:"blah856"}) is 13
+PASS foo({f:"blah145"}, {f:"blah855"}) is [14, false]
+PASS bar({f:"blah145"}, {f:"blah855"}) is 13
+PASS foo({f:"blah146"}, {f:"blah854"}) is [14, false]
+PASS bar({f:"blah146"}, {f:"blah854"}) is 13
+PASS foo({f:"blah147"}, {f:"blah853"}) is [14, false]
+PASS bar({f:"blah147"}, {f:"blah853"}) is 13
+PASS foo({f:"blah148"}, {f:"blah852"}) is [14, false]
+PASS bar({f:"blah148"}, {f:"blah852"}) is 13
+PASS foo({f:"blah149"}, {f:"blah851"}) is [14, false]
+PASS bar({f:"blah149"}, {f:"blah851"}) is 13
+PASS foo({f:"blah150"}, {f:"blah850"}) is [14, false]
+PASS bar({f:"blah150"}, {f:"blah850"}) is 13
+PASS foo({f:"blah151"}, {f:"blah849"}) is [14, false]
+PASS bar({f:"blah151"}, {f:"blah849"}) is 13
+PASS foo({f:"blah152"}, {f:"blah848"}) is [14, false]
+PASS bar({f:"blah152"}, {f:"blah848"}) is 13
+PASS foo({f:"blah153"}, {f:"blah847"}) is [14, false]
+PASS bar({f:"blah153"}, {f:"blah847"}) is 13
+PASS foo({f:"blah154"}, {f:"blah846"}) is [14, false]
+PASS bar({f:"blah154"}, {f:"blah846"}) is 13
+PASS foo({f:"blah155"}, {f:"blah845"}) is [14, false]
+PASS bar({f:"blah155"}, {f:"blah845"}) is 13
+PASS foo({f:"blah156"}, {f:"blah844"}) is [14, false]
+PASS bar({f:"blah156"}, {f:"blah844"}) is 13
+PASS foo({f:"blah157"}, {f:"blah843"}) is [14, false]
+PASS bar({f:"blah157"}, {f:"blah843"}) is 13
+PASS foo({f:"blah158"}, {f:"blah842"}) is [14, false]
+PASS bar({f:"blah158"}, {f:"blah842"}) is 13
+PASS foo({f:"blah159"}, {f:"blah841"}) is [14, false]
+PASS bar({f:"blah159"}, {f:"blah841"}) is 13
+PASS foo({f:"blah160"}, {f:"blah840"}) is [14, false]
+PASS bar({f:"blah160"}, {f:"blah840"}) is 13
+PASS foo({f:"blah161"}, {f:"blah839"}) is [14, false]
+PASS bar({f:"blah161"}, {f:"blah839"}) is 13
+PASS foo({f:"blah162"}, {f:"blah838"}) is [14, false]
+PASS bar({f:"blah162"}, {f:"blah838"}) is 13
+PASS foo({f:"blah163"}, {f:"blah837"}) is [14, false]
+PASS bar({f:"blah163"}, {f:"blah837"}) is 13
+PASS foo({f:"blah164"}, {f:"blah836"}) is [14, false]
+PASS bar({f:"blah164"}, {f:"blah836"}) is 13
+PASS foo({f:"blah165"}, {f:"blah835"}) is [14, false]
+PASS bar({f:"blah165"}, {f:"blah835"}) is 13
+PASS foo({f:"blah166"}, {f:"blah834"}) is [14, false]
+PASS bar({f:"blah166"}, {f:"blah834"}) is 13
+PASS foo({f:"blah167"}, {f:"blah833"}) is [14, false]
+PASS bar({f:"blah167"}, {f:"blah833"}) is 13
+PASS foo({f:"blah168"}, {f:"blah832"}) is [14, false]
+PASS bar({f:"blah168"}, {f:"blah832"}) is 13
+PASS foo({f:"blah169"}, {f:"blah831"}) is [14, false]
+PASS bar({f:"blah169"}, {f:"blah831"}) is 13
+PASS foo({f:"blah170"}, {f:"blah830"}) is [14, false]
+PASS bar({f:"blah170"}, {f:"blah830"}) is 13
+PASS foo({f:"blah171"}, {f:"blah829"}) is [14, false]
+PASS bar({f:"blah171"}, {f:"blah829"}) is 13
+PASS foo({f:"blah172"}, {f:"blah828"}) is [14, false]
+PASS bar({f:"blah172"}, {f:"blah828"}) is 13
+PASS foo({f:"blah173"}, {f:"blah827"}) is [14, false]
+PASS bar({f:"blah173"}, {f:"blah827"}) is 13
+PASS foo({f:"blah174"}, {f:"blah826"}) is [14, false]
+PASS bar({f:"blah174"}, {f:"blah826"}) is 13
+PASS foo({f:"blah175"}, {f:"blah825"}) is [14, false]
+PASS bar({f:"blah175"}, {f:"blah825"}) is 13
+PASS foo({f:"blah176"}, {f:"blah824"}) is [14, false]
+PASS bar({f:"blah176"}, {f:"blah824"}) is 13
+PASS foo({f:"blah177"}, {f:"blah823"}) is [14, false]
+PASS bar({f:"blah177"}, {f:"blah823"}) is 13
+PASS foo({f:"blah178"}, {f:"blah822"}) is [14, false]
+PASS bar({f:"blah178"}, {f:"blah822"}) is 13
+PASS foo({f:"blah179"}, {f:"blah821"}) is [14, false]
+PASS bar({f:"blah179"}, {f:"blah821"}) is 13
+PASS foo({f:"blah180"}, {f:"blah820"}) is [14, false]
+PASS bar({f:"blah180"}, {f:"blah820"}) is 13
+PASS foo({f:"blah181"}, {f:"blah819"}) is [14, false]
+PASS bar({f:"blah181"}, {f:"blah819"}) is 13
+PASS foo({f:"blah182"}, {f:"blah818"}) is [14, false]
+PASS bar({f:"blah182"}, {f:"blah818"}) is 13
+PASS foo({f:"blah183"}, {f:"blah817"}) is [14, false]
+PASS bar({f:"blah183"}, {f:"blah817"}) is 13
+PASS foo({f:"blah184"}, {f:"blah816"}) is [14, false]
+PASS bar({f:"blah184"}, {f:"blah816"}) is 13
+PASS foo({f:"blah185"}, {f:"blah815"}) is [14, false]
+PASS bar({f:"blah185"}, {f:"blah815"}) is 13
+PASS foo({f:"blah186"}, {f:"blah814"}) is [14, false]
+PASS bar({f:"blah186"}, {f:"blah814"}) is 13
+PASS foo({f:"blah187"}, {f:"blah813"}) is [14, false]
+PASS bar({f:"blah187"}, {f:"blah813"}) is 13
+PASS foo({f:"blah188"}, {f:"blah812"}) is [14, false]
+PASS bar({f:"blah188"}, {f:"blah812"}) is 13
+PASS foo({f:"blah189"}, {f:"blah811"}) is [14, false]
+PASS bar({f:"blah189"}, {f:"blah811"}) is 13
+PASS foo({f:"blah190"}, {f:"blah810"}) is [14, false]
+PASS bar({f:"blah190"}, {f:"blah810"}) is 13
+PASS foo({f:"blah191"}, {f:"blah809"}) is [14, false]
+PASS bar({f:"blah191"}, {f:"blah809"}) is 13
+PASS foo({f:"blah192"}, {f:"blah808"}) is [14, false]
+PASS bar({f:"blah192"}, {f:"blah808"}) is 13
+PASS foo({f:"blah193"}, {f:"blah807"}) is [14, false]
+PASS bar({f:"blah193"}, {f:"blah807"}) is 13
+PASS foo({f:"blah194"}, {f:"blah806"}) is [14, false]
+PASS bar({f:"blah194"}, {f:"blah806"}) is 13
+PASS foo({f:"blah195"}, {f:"blah805"}) is [14, false]
+PASS bar({f:"blah195"}, {f:"blah805"}) is 13
+PASS foo({f:"blah196"}, {f:"blah804"}) is [14, false]
+PASS bar({f:"blah196"}, {f:"blah804"}) is 13
+PASS foo({f:"blah197"}, {f:"blah803"}) is [14, false]
+PASS bar({f:"blah197"}, {f:"blah803"}) is 13
+PASS foo({f:"blah198"}, {f:"blah802"}) is [14, false]
+PASS bar({f:"blah198"}, {f:"blah802"}) is 13
+PASS foo({f:"blah199"}, {f:"blah801"}) is [14, false]
+PASS bar({f:"blah199"}, {f:"blah801"}) is 13
+PASS foo({f:"blah200"}, {f:"blah800"}) is [14, false]
+PASS bar({f:"blah200"}, {f:"blah800"}) is 13
+PASS foo({f:"blah201"}, {f:"blah799"}) is [14, false]
+PASS bar({f:"blah201"}, {f:"blah799"}) is 13
+PASS foo({f:"blah202"}, {f:"blah798"}) is [14, false]
+PASS bar({f:"blah202"}, {f:"blah798"}) is 13
+PASS foo({f:"blah203"}, {f:"blah797"}) is [14, false]
+PASS bar({f:"blah203"}, {f:"blah797"}) is 13
+PASS foo({f:"blah204"}, {f:"blah796"}) is [14, false]
+PASS bar({f:"blah204"}, {f:"blah796"}) is 13
+PASS foo({f:"blah205"}, {f:"blah795"}) is [14, false]
+PASS bar({f:"blah205"}, {f:"blah795"}) is 13
+PASS foo({f:"blah206"}, {f:"blah794"}) is [14, false]
+PASS bar({f:"blah206"}, {f:"blah794"}) is 13
+PASS foo({f:"blah207"}, {f:"blah793"}) is [14, false]
+PASS bar({f:"blah207"}, {f:"blah793"}) is 13
+PASS foo({f:"blah208"}, {f:"blah792"}) is [14, false]
+PASS bar({f:"blah208"}, {f:"blah792"}) is 13
+PASS foo({f:"blah209"}, {f:"blah791"}) is [14, false]
+PASS bar({f:"blah209"}, {f:"blah791"}) is 13
+PASS foo({f:"blah210"}, {f:"blah790"}) is [14, false]
+PASS bar({f:"blah210"}, {f:"blah790"}) is 13
+PASS foo({f:"blah211"}, {f:"blah789"}) is [14, false]
+PASS bar({f:"blah211"}, {f:"blah789"}) is 13
+PASS foo({f:"blah212"}, {f:"blah788"}) is [14, false]
+PASS bar({f:"blah212"}, {f:"blah788"}) is 13
+PASS foo({f:"blah213"}, {f:"blah787"}) is [14, false]
+PASS bar({f:"blah213"}, {f:"blah787"}) is 13
+PASS foo({f:"blah214"}, {f:"blah786"}) is [14, false]
+PASS bar({f:"blah214"}, {f:"blah786"}) is 13
+PASS foo({f:"blah215"}, {f:"blah785"}) is [14, false]
+PASS bar({f:"blah215"}, {f:"blah785"}) is 13
+PASS foo({f:"blah216"}, {f:"blah784"}) is [14, false]
+PASS bar({f:"blah216"}, {f:"blah784"}) is 13
+PASS foo({f:"blah217"}, {f:"blah783"}) is [14, false]
+PASS bar({f:"blah217"}, {f:"blah783"}) is 13
+PASS foo({f:"blah218"}, {f:"blah782"}) is [14, false]
+PASS bar({f:"blah218"}, {f:"blah782"}) is 13
+PASS foo({f:"blah219"}, {f:"blah781"}) is [14, false]
+PASS bar({f:"blah219"}, {f:"blah781"}) is 13
+PASS foo({f:"blah220"}, {f:"blah780"}) is [14, false]
+PASS bar({f:"blah220"}, {f:"blah780"}) is 13
+PASS foo({f:"blah221"}, {f:"blah779"}) is [14, false]
+PASS bar({f:"blah221"}, {f:"blah779"}) is 13
+PASS foo({f:"blah222"}, {f:"blah778"}) is [14, false]
+PASS bar({f:"blah222"}, {f:"blah778"}) is 13
+PASS foo({f:"blah223"}, {f:"blah777"}) is [14, false]
+PASS bar({f:"blah223"}, {f:"blah777"}) is 13
+PASS foo({f:"blah224"}, {f:"blah776"}) is [14, false]
+PASS bar({f:"blah224"}, {f:"blah776"}) is 13
+PASS foo({f:"blah225"}, {f:"blah775"}) is [14, false]
+PASS bar({f:"blah225"}, {f:"blah775"}) is 13
+PASS foo({f:"blah226"}, {f:"blah774"}) is [14, false]
+PASS bar({f:"blah226"}, {f:"blah774"}) is 13
+PASS foo({f:"blah227"}, {f:"blah773"}) is [14, false]
+PASS bar({f:"blah227"}, {f:"blah773"}) is 13
+PASS foo({f:"blah228"}, {f:"blah772"}) is [14, false]
+PASS bar({f:"blah228"}, {f:"blah772"}) is 13
+PASS foo({f:"blah229"}, {f:"blah771"}) is [14, false]
+PASS bar({f:"blah229"}, {f:"blah771"}) is 13
+PASS foo({f:"blah230"}, {f:"blah770"}) is [14, false]
+PASS bar({f:"blah230"}, {f:"blah770"}) is 13
+PASS foo({f:"blah231"}, {f:"blah769"}) is [14, false]
+PASS bar({f:"blah231"}, {f:"blah769"}) is 13
+PASS foo({f:"blah232"}, {f:"blah768"}) is [14, false]
+PASS bar({f:"blah232"}, {f:"blah768"}) is 13
+PASS foo({f:"blah233"}, {f:"blah767"}) is [14, false]
+PASS bar({f:"blah233"}, {f:"blah767"}) is 13
+PASS foo({f:"blah234"}, {f:"blah766"}) is [14, false]
+PASS bar({f:"blah234"}, {f:"blah766"}) is 13
+PASS foo({f:"blah235"}, {f:"blah765"}) is [14, false]
+PASS bar({f:"blah235"}, {f:"blah765"}) is 13
+PASS foo({f:"blah236"}, {f:"blah764"}) is [14, false]
+PASS bar({f:"blah236"}, {f:"blah764"}) is 13
+PASS foo({f:"blah237"}, {f:"blah763"}) is [14, false]
+PASS bar({f:"blah237"}, {f:"blah763"}) is 13
+PASS foo({f:"blah238"}, {f:"blah762"}) is [14, false]
+PASS bar({f:"blah238"}, {f:"blah762"}) is 13
+PASS foo({f:"blah239"}, {f:"blah761"}) is [14, false]
+PASS bar({f:"blah239"}, {f:"blah761"}) is 13
+PASS foo({f:"blah240"}, {f:"blah760"}) is [14, false]
+PASS bar({f:"blah240"}, {f:"blah760"}) is 13
+PASS foo({f:"blah241"}, {f:"blah759"}) is [14, false]
+PASS bar({f:"blah241"}, {f:"blah759"}) is 13
+PASS foo({f:"blah242"}, {f:"blah758"}) is [14, false]
+PASS bar({f:"blah242"}, {f:"blah758"}) is 13
+PASS foo({f:"blah243"}, {f:"blah757"}) is [14, false]
+PASS bar({f:"blah243"}, {f:"blah757"}) is 13
+PASS foo({f:"blah244"}, {f:"blah756"}) is [14, false]
+PASS bar({f:"blah244"}, {f:"blah756"}) is 13
+PASS foo({f:"blah245"}, {f:"blah755"}) is [14, false]
+PASS bar({f:"blah245"}, {f:"blah755"}) is 13
+PASS foo({f:"blah246"}, {f:"blah754"}) is [14, false]
+PASS bar({f:"blah246"}, {f:"blah754"}) is 13
+PASS foo({f:"blah247"}, {f:"blah753"}) is [14, false]
+PASS bar({f:"blah247"}, {f:"blah753"}) is 13
+PASS foo({f:"blah248"}, {f:"blah752"}) is [14, false]
+PASS bar({f:"blah248"}, {f:"blah752"}) is 13
+PASS foo({f:"blah249"}, {f:"blah751"}) is [14, false]
+PASS bar({f:"blah249"}, {f:"blah751"}) is 13
+PASS foo({f:"blah250"}, {f:"blah750"}) is [14, false]
+PASS bar({f:"blah250"}, {f:"blah750"}) is 13
+PASS foo({f:"blah251"}, {f:"blah749"}) is [14, false]
+PASS bar({f:"blah251"}, {f:"blah749"}) is 13
+PASS foo({f:"blah252"}, {f:"blah748"}) is [14, false]
+PASS bar({f:"blah252"}, {f:"blah748"}) is 13
+PASS foo({f:"blah253"}, {f:"blah747"}) is [14, false]
+PASS bar({f:"blah253"}, {f:"blah747"}) is 13
+PASS foo({f:"blah254"}, {f:"blah746"}) is [14, false]
+PASS bar({f:"blah254"}, {f:"blah746"}) is 13
+PASS foo({f:"blah255"}, {f:"blah745"}) is [14, false]
+PASS bar({f:"blah255"}, {f:"blah745"}) is 13
+PASS foo({f:"blah256"}, {f:"blah744"}) is [14, false]
+PASS bar({f:"blah256"}, {f:"blah744"}) is 13
+PASS foo({f:"blah257"}, {f:"blah743"}) is [14, false]
+PASS bar({f:"blah257"}, {f:"blah743"}) is 13
+PASS foo({f:"blah258"}, {f:"blah742"}) is [14, false]
+PASS bar({f:"blah258"}, {f:"blah742"}) is 13
+PASS foo({f:"blah259"}, {f:"blah741"}) is [14, false]
+PASS bar({f:"blah259"}, {f:"blah741"}) is 13
+PASS foo({f:"blah260"}, {f:"blah740"}) is [14, false]
+PASS bar({f:"blah260"}, {f:"blah740"}) is 13
+PASS foo({f:"blah261"}, {f:"blah739"}) is [14, false]
+PASS bar({f:"blah261"}, {f:"blah739"}) is 13
+PASS foo({f:"blah262"}, {f:"blah738"}) is [14, false]
+PASS bar({f:"blah262"}, {f:"blah738"}) is 13
+PASS foo({f:"blah263"}, {f:"blah737"}) is [14, false]
+PASS bar({f:"blah263"}, {f:"blah737"}) is 13
+PASS foo({f:"blah264"}, {f:"blah736"}) is [14, false]
+PASS bar({f:"blah264"}, {f:"blah736"}) is 13
+PASS foo({f:"blah265"}, {f:"blah735"}) is [14, false]
+PASS bar({f:"blah265"}, {f:"blah735"}) is 13
+PASS foo({f:"blah266"}, {f:"blah734"}) is [14, false]
+PASS bar({f:"blah266"}, {f:"blah734"}) is 13
+PASS foo({f:"blah267"}, {f:"blah733"}) is [14, false]
+PASS bar({f:"blah267"}, {f:"blah733"}) is 13
+PASS foo({f:"blah268"}, {f:"blah732"}) is [14, false]
+PASS bar({f:"blah268"}, {f:"blah732"}) is 13
+PASS foo({f:"blah269"}, {f:"blah731"}) is [14, false]
+PASS bar({f:"blah269"}, {f:"blah731"}) is 13
+PASS foo({f:"blah270"}, {f:"blah730"}) is [14, false]
+PASS bar({f:"blah270"}, {f:"blah730"}) is 13
+PASS foo({f:"blah271"}, {f:"blah729"}) is [14, false]
+PASS bar({f:"blah271"}, {f:"blah729"}) is 13
+PASS foo({f:"blah272"}, {f:"blah728"}) is [14, false]
+PASS bar({f:"blah272"}, {f:"blah728"}) is 13
+PASS foo({f:"blah273"}, {f:"blah727"}) is [14, false]
+PASS bar({f:"blah273"}, {f:"blah727"}) is 13
+PASS foo({f:"blah274"}, {f:"blah726"}) is [14, false]
+PASS bar({f:"blah274"}, {f:"blah726"}) is 13
+PASS foo({f:"blah275"}, {f:"blah725"}) is [14, false]
+PASS bar({f:"blah275"}, {f:"blah725"}) is 13
+PASS foo({f:"blah276"}, {f:"blah724"}) is [14, false]
+PASS bar({f:"blah276"}, {f:"blah724"}) is 13
+PASS foo({f:"blah277"}, {f:"blah723"}) is [14, false]
+PASS bar({f:"blah277"}, {f:"blah723"}) is 13
+PASS foo({f:"blah278"}, {f:"blah722"}) is [14, false]
+PASS bar({f:"blah278"}, {f:"blah722"}) is 13
+PASS foo({f:"blah279"}, {f:"blah721"}) is [14, false]
+PASS bar({f:"blah279"}, {f:"blah721"}) is 13
+PASS foo({f:"blah280"}, {f:"blah720"}) is [14, false]
+PASS bar({f:"blah280"}, {f:"blah720"}) is 13
+PASS foo({f:"blah281"}, {f:"blah719"}) is [14, false]
+PASS bar({f:"blah281"}, {f:"blah719"}) is 13
+PASS foo({f:"blah282"}, {f:"blah718"}) is [14, false]
+PASS bar({f:"blah282"}, {f:"blah718"}) is 13
+PASS foo({f:"blah283"}, {f:"blah717"}) is [14, false]
+PASS bar({f:"blah283"}, {f:"blah717"}) is 13
+PASS foo({f:"blah284"}, {f:"blah716"}) is [14, false]
+PASS bar({f:"blah284"}, {f:"blah716"}) is 13
+PASS foo({f:"blah285"}, {f:"blah715"}) is [14, false]
+PASS bar({f:"blah285"}, {f:"blah715"}) is 13
+PASS foo({f:"blah286"}, {f:"blah714"}) is [14, false]
+PASS bar({f:"blah286"}, {f:"blah714"}) is 13
+PASS foo({f:"blah287"}, {f:"blah713"}) is [14, false]
+PASS bar({f:"blah287"}, {f:"blah713"}) is 13
+PASS foo({f:"blah288"}, {f:"blah712"}) is [14, false]
+PASS bar({f:"blah288"}, {f:"blah712"}) is 13
+PASS foo({f:"blah289"}, {f:"blah711"}) is [14, false]
+PASS bar({f:"blah289"}, {f:"blah711"}) is 13
+PASS foo({f:"blah290"}, {f:"blah710"}) is [14, false]
+PASS bar({f:"blah290"}, {f:"blah710"}) is 13
+PASS foo({f:"blah291"}, {f:"blah709"}) is [14, false]
+PASS bar({f:"blah291"}, {f:"blah709"}) is 13
+PASS foo({f:"blah292"}, {f:"blah708"}) is [14, false]
+PASS bar({f:"blah292"}, {f:"blah708"}) is 13
+PASS foo({f:"blah293"}, {f:"blah707"}) is [14, false]
+PASS bar({f:"blah293"}, {f:"blah707"}) is 13
+PASS foo({f:"blah294"}, {f:"blah706"}) is [14, false]
+PASS bar({f:"blah294"}, {f:"blah706"}) is 13
+PASS foo({f:"blah295"}, {f:"blah705"}) is [14, false]
+PASS bar({f:"blah295"}, {f:"blah705"}) is 13
+PASS foo({f:"blah296"}, {f:"blah704"}) is [14, false]
+PASS bar({f:"blah296"}, {f:"blah704"}) is 13
+PASS foo({f:"blah297"}, {f:"blah703"}) is [14, false]
+PASS bar({f:"blah297"}, {f:"blah703"}) is 13
+PASS foo({f:"blah298"}, {f:"blah702"}) is [14, false]
+PASS bar({f:"blah298"}, {f:"blah702"}) is 13
+PASS foo({f:"blah299"}, {f:"blah701"}) is [14, false]
+PASS bar({f:"blah299"}, {f:"blah701"}) is 13
+PASS foo({f:"blah300"}, {f:"blah700"}) is [14, false]
+PASS bar({f:"blah300"}, {f:"blah700"}) is 13
+PASS foo({f:"blah301"}, {f:"blah699"}) is [14, false]
+PASS bar({f:"blah301"}, {f:"blah699"}) is 13
+PASS foo({f:"blah302"}, {f:"blah698"}) is [14, false]
+PASS bar({f:"blah302"}, {f:"blah698"}) is 13
+PASS foo({f:"blah303"}, {f:"blah697"}) is [14, false]
+PASS bar({f:"blah303"}, {f:"blah697"}) is 13
+PASS foo({f:"blah304"}, {f:"blah696"}) is [14, false]
+PASS bar({f:"blah304"}, {f:"blah696"}) is 13
+PASS foo({f:"blah305"}, {f:"blah695"}) is [14, false]
+PASS bar({f:"blah305"}, {f:"blah695"}) is 13
+PASS foo({f:"blah306"}, {f:"blah694"}) is [14, false]
+PASS bar({f:"blah306"}, {f:"blah694"}) is 13
+PASS foo({f:"blah307"}, {f:"blah693"}) is [14, false]
+PASS bar({f:"blah307"}, {f:"blah693"}) is 13
+PASS foo({f:"blah308"}, {f:"blah692"}) is [14, false]
+PASS bar({f:"blah308"}, {f:"blah692"}) is 13
+PASS foo({f:"blah309"}, {f:"blah691"}) is [14, false]
+PASS bar({f:"blah309"}, {f:"blah691"}) is 13
+PASS foo({f:"blah310"}, {f:"blah690"}) is [14, false]
+PASS bar({f:"blah310"}, {f:"blah690"}) is 13
+PASS foo({f:"blah311"}, {f:"blah689"}) is [14, false]
+PASS bar({f:"blah311"}, {f:"blah689"}) is 13
+PASS foo({f:"blah312"}, {f:"blah688"}) is [14, false]
+PASS bar({f:"blah312"}, {f:"blah688"}) is 13
+PASS foo({f:"blah313"}, {f:"blah687"}) is [14, false]
+PASS bar({f:"blah313"}, {f:"blah687"}) is 13
+PASS foo({f:"blah314"}, {f:"blah686"}) is [14, false]
+PASS bar({f:"blah314"}, {f:"blah686"}) is 13
+PASS foo({f:"blah315"}, {f:"blah685"}) is [14, false]
+PASS bar({f:"blah315"}, {f:"blah685"}) is 13
+PASS foo({f:"blah316"}, {f:"blah684"}) is [14, false]
+PASS bar({f:"blah316"}, {f:"blah684"}) is 13
+PASS foo({f:"blah317"}, {f:"blah683"}) is [14, false]
+PASS bar({f:"blah317"}, {f:"blah683"}) is 13
+PASS foo({f:"blah318"}, {f:"blah682"}) is [14, false]
+PASS bar({f:"blah318"}, {f:"blah682"}) is 13
+PASS foo({f:"blah319"}, {f:"blah681"}) is [14, false]
+PASS bar({f:"blah319"}, {f:"blah681"}) is 13
+PASS foo({f:"blah320"}, {f:"blah680"}) is [14, false]
+PASS bar({f:"blah320"}, {f:"blah680"}) is 13
+PASS foo({f:"blah321"}, {f:"blah679"}) is [14, false]
+PASS bar({f:"blah321"}, {f:"blah679"}) is 13
+PASS foo({f:"blah322"}, {f:"blah678"}) is [14, false]
+PASS bar({f:"blah322"}, {f:"blah678"}) is 13
+PASS foo({f:"blah323"}, {f:"blah677"}) is [14, false]
+PASS bar({f:"blah323"}, {f:"blah677"}) is 13
+PASS foo({f:"blah324"}, {f:"blah676"}) is [14, false]
+PASS bar({f:"blah324"}, {f:"blah676"}) is 13
+PASS foo({f:"blah325"}, {f:"blah675"}) is [14, false]
+PASS bar({f:"blah325"}, {f:"blah675"}) is 13
+PASS foo({f:"blah326"}, {f:"blah674"}) is [14, false]
+PASS bar({f:"blah326"}, {f:"blah674"}) is 13
+PASS foo({f:"blah327"}, {f:"blah673"}) is [14, false]
+PASS bar({f:"blah327"}, {f:"blah673"}) is 13
+PASS foo({f:"blah328"}, {f:"blah672"}) is [14, false]
+PASS bar({f:"blah328"}, {f:"blah672"}) is 13
+PASS foo({f:"blah329"}, {f:"blah671"}) is [14, false]
+PASS bar({f:"blah329"}, {f:"blah671"}) is 13
+PASS foo({f:"blah330"}, {f:"blah670"}) is [14, false]
+PASS bar({f:"blah330"}, {f:"blah670"}) is 13
+PASS foo({f:"blah331"}, {f:"blah669"}) is [14, false]
+PASS bar({f:"blah331"}, {f:"blah669"}) is 13
+PASS foo({f:"blah332"}, {f:"blah668"}) is [14, false]
+PASS bar({f:"blah332"}, {f:"blah668"}) is 13
+PASS foo({f:"blah333"}, {f:"blah667"}) is [14, false]
+PASS bar({f:"blah333"}, {f:"blah667"}) is 13
+PASS foo({f:"blah334"}, {f:"blah666"}) is [14, false]
+PASS bar({f:"blah334"}, {f:"blah666"}) is 13
+PASS foo({f:"blah335"}, {f:"blah665"}) is [14, false]
+PASS bar({f:"blah335"}, {f:"blah665"}) is 13
+PASS foo({f:"blah336"}, {f:"blah664"}) is [14, false]
+PASS bar({f:"blah336"}, {f:"blah664"}) is 13
+PASS foo({f:"blah337"}, {f:"blah663"}) is [14, false]
+PASS bar({f:"blah337"}, {f:"blah663"}) is 13
+PASS foo({f:"blah338"}, {f:"blah662"}) is [14, false]
+PASS bar({f:"blah338"}, {f:"blah662"}) is 13
+PASS foo({f:"blah339"}, {f:"blah661"}) is [14, false]
+PASS bar({f:"blah339"}, {f:"blah661"}) is 13
+PASS foo({f:"blah340"}, {f:"blah660"}) is [14, false]
+PASS bar({f:"blah340"}, {f:"blah660"}) is 13
+PASS foo({f:"blah341"}, {f:"blah659"}) is [14, false]
+PASS bar({f:"blah341"}, {f:"blah659"}) is 13
+PASS foo({f:"blah342"}, {f:"blah658"}) is [14, false]
+PASS bar({f:"blah342"}, {f:"blah658"}) is 13
+PASS foo({f:"blah343"}, {f:"blah657"}) is [14, false]
+PASS bar({f:"blah343"}, {f:"blah657"}) is 13
+PASS foo({f:"blah344"}, {f:"blah656"}) is [14, false]
+PASS bar({f:"blah344"}, {f:"blah656"}) is 13
+PASS foo({f:"blah345"}, {f:"blah655"}) is [14, false]
+PASS bar({f:"blah345"}, {f:"blah655"}) is 13
+PASS foo({f:"blah346"}, {f:"blah654"}) is [14, false]
+PASS bar({f:"blah346"}, {f:"blah654"}) is 13
+PASS foo({f:"blah347"}, {f:"blah653"}) is [14, false]
+PASS bar({f:"blah347"}, {f:"blah653"}) is 13
+PASS foo({f:"blah348"}, {f:"blah652"}) is [14, false]
+PASS bar({f:"blah348"}, {f:"blah652"}) is 13
+PASS foo({f:"blah349"}, {f:"blah651"}) is [14, false]
+PASS bar({f:"blah349"}, {f:"blah651"}) is 13
+PASS foo({f:"blah350"}, {f:"blah650"}) is [14, false]
+PASS bar({f:"blah350"}, {f:"blah650"}) is 13
+PASS foo({f:"blah351"}, {f:"blah649"}) is [14, false]
+PASS bar({f:"blah351"}, {f:"blah649"}) is 13
+PASS foo({f:"blah352"}, {f:"blah648"}) is [14, false]
+PASS bar({f:"blah352"}, {f:"blah648"}) is 13
+PASS foo({f:"blah353"}, {f:"blah647"}) is [14, false]
+PASS bar({f:"blah353"}, {f:"blah647"}) is 13
+PASS foo({f:"blah354"}, {f:"blah646"}) is [14, false]
+PASS bar({f:"blah354"}, {f:"blah646"}) is 13
+PASS foo({f:"blah355"}, {f:"blah645"}) is [14, false]
+PASS bar({f:"blah355"}, {f:"blah645"}) is 13
+PASS foo({f:"blah356"}, {f:"blah644"}) is [14, false]
+PASS bar({f:"blah356"}, {f:"blah644"}) is 13
+PASS foo({f:"blah357"}, {f:"blah643"}) is [14, false]
+PASS bar({f:"blah357"}, {f:"blah643"}) is 13
+PASS foo({f:"blah358"}, {f:"blah642"}) is [14, false]
+PASS bar({f:"blah358"}, {f:"blah642"}) is 13
+PASS foo({f:"blah359"}, {f:"blah641"}) is [14, false]
+PASS bar({f:"blah359"}, {f:"blah641"}) is 13
+PASS foo({f:"blah360"}, {f:"blah640"}) is [14, false]
+PASS bar({f:"blah360"}, {f:"blah640"}) is 13
+PASS foo({f:"blah361"}, {f:"blah639"}) is [14, false]
+PASS bar({f:"blah361"}, {f:"blah639"}) is 13
+PASS foo({f:"blah362"}, {f:"blah638"}) is [14, false]
+PASS bar({f:"blah362"}, {f:"blah638"}) is 13
+PASS foo({f:"blah363"}, {f:"blah637"}) is [14, false]
+PASS bar({f:"blah363"}, {f:"blah637"}) is 13
+PASS foo({f:"blah364"}, {f:"blah636"}) is [14, false]
+PASS bar({f:"blah364"}, {f:"blah636"}) is 13
+PASS foo({f:"blah365"}, {f:"blah635"}) is [14, false]
+PASS bar({f:"blah365"}, {f:"blah635"}) is 13
+PASS foo({f:"blah366"}, {f:"blah634"}) is [14, false]
+PASS bar({f:"blah366"}, {f:"blah634"}) is 13
+PASS foo({f:"blah367"}, {f:"blah633"}) is [14, false]
+PASS bar({f:"blah367"}, {f:"blah633"}) is 13
+PASS foo({f:"blah368"}, {f:"blah632"}) is [14, false]
+PASS bar({f:"blah368"}, {f:"blah632"}) is 13
+PASS foo({f:"blah369"}, {f:"blah631"}) is [14, false]
+PASS bar({f:"blah369"}, {f:"blah631"}) is 13
+PASS foo({f:"blah370"}, {f:"blah630"}) is [14, false]
+PASS bar({f:"blah370"}, {f:"blah630"}) is 13
+PASS foo({f:"blah371"}, {f:"blah629"}) is [14, false]
+PASS bar({f:"blah371"}, {f:"blah629"}) is 13
+PASS foo({f:"blah372"}, {f:"blah628"}) is [14, false]
+PASS bar({f:"blah372"}, {f:"blah628"}) is 13
+PASS foo({f:"blah373"}, {f:"blah627"}) is [14, false]
+PASS bar({f:"blah373"}, {f:"blah627"}) is 13
+PASS foo({f:"blah374"}, {f:"blah626"}) is [14, false]
+PASS bar({f:"blah374"}, {f:"blah626"}) is 13
+PASS foo({f:"blah375"}, {f:"blah625"}) is [14, false]
+PASS bar({f:"blah375"}, {f:"blah625"}) is 13
+PASS foo({f:"blah376"}, {f:"blah624"}) is [14, false]
+PASS bar({f:"blah376"}, {f:"blah624"}) is 13
+PASS foo({f:"blah377"}, {f:"blah623"}) is [14, false]
+PASS bar({f:"blah377"}, {f:"blah623"}) is 13
+PASS foo({f:"blah378"}, {f:"blah622"}) is [14, false]
+PASS bar({f:"blah378"}, {f:"blah622"}) is 13
+PASS foo({f:"blah379"}, {f:"blah621"}) is [14, false]
+PASS bar({f:"blah379"}, {f:"blah621"}) is 13
+PASS foo({f:"blah380"}, {f:"blah620"}) is [14, false]
+PASS bar({f:"blah380"}, {f:"blah620"}) is 13
+PASS foo({f:"blah381"}, {f:"blah619"}) is [14, false]
+PASS bar({f:"blah381"}, {f:"blah619"}) is 13
+PASS foo({f:"blah382"}, {f:"blah618"}) is [14, false]
+PASS bar({f:"blah382"}, {f:"blah618"}) is 13
+PASS foo({f:"blah383"}, {f:"blah617"}) is [14, false]
+PASS bar({f:"blah383"}, {f:"blah617"}) is 13
+PASS foo({f:"blah384"}, {f:"blah616"}) is [14, false]
+PASS bar({f:"blah384"}, {f:"blah616"}) is 13
+PASS foo({f:"blah385"}, {f:"blah615"}) is [14, false]
+PASS bar({f:"blah385"}, {f:"blah615"}) is 13
+PASS foo({f:"blah386"}, {f:"blah614"}) is [14, false]
+PASS bar({f:"blah386"}, {f:"blah614"}) is 13
+PASS foo({f:"blah387"}, {f:"blah613"}) is [14, false]
+PASS bar({f:"blah387"}, {f:"blah613"}) is 13
+PASS foo({f:"blah388"}, {f:"blah612"}) is [14, false]
+PASS bar({f:"blah388"}, {f:"blah612"}) is 13
+PASS foo({f:"blah389"}, {f:"blah611"}) is [14, false]
+PASS bar({f:"blah389"}, {f:"blah611"}) is 13
+PASS foo({f:"blah390"}, {f:"blah610"}) is [14, false]
+PASS bar({f:"blah390"}, {f:"blah610"}) is 13
+PASS foo({f:"blah391"}, {f:"blah609"}) is [14, false]
+PASS bar({f:"blah391"}, {f:"blah609"}) is 13
+PASS foo({f:"blah392"}, {f:"blah608"}) is [14, false]
+PASS bar({f:"blah392"}, {f:"blah608"}) is 13
+PASS foo({f:"blah393"}, {f:"blah607"}) is [14, false]
+PASS bar({f:"blah393"}, {f:"blah607"}) is 13
+PASS foo({f:"blah394"}, {f:"blah606"}) is [14, false]
+PASS bar({f:"blah394"}, {f:"blah606"}) is 13
+PASS foo({f:"blah395"}, {f:"blah605"}) is [14, false]
+PASS bar({f:"blah395"}, {f:"blah605"}) is 13
+PASS foo({f:"blah396"}, {f:"blah604"}) is [14, false]
+PASS bar({f:"blah396"}, {f:"blah604"}) is 13
+PASS foo({f:"blah397"}, {f:"blah603"}) is [14, false]
+PASS bar({f:"blah397"}, {f:"blah603"}) is 13
+PASS foo({f:"blah398"}, {f:"blah602"}) is [14, false]
+PASS bar({f:"blah398"}, {f:"blah602"}) is 13
+PASS foo({f:"blah399"}, {f:"blah601"}) is [14, false]
+PASS bar({f:"blah399"}, {f:"blah601"}) is 13
+PASS foo({f:"blah400"}, {f:"blah600"}) is [14, false]
+PASS bar({f:"blah400"}, {f:"blah600"}) is 13
+PASS foo({f:"blah401"}, {f:"blah599"}) is [14, false]
+PASS bar({f:"blah401"}, {f:"blah599"}) is 13
+PASS foo({f:"blah402"}, {f:"blah598"}) is [14, false]
+PASS bar({f:"blah402"}, {f:"blah598"}) is 13
+PASS foo({f:"blah403"}, {f:"blah597"}) is [14, false]
+PASS bar({f:"blah403"}, {f:"blah597"}) is 13
+PASS foo({f:"blah404"}, {f:"blah596"}) is [14, false]
+PASS bar({f:"blah404"}, {f:"blah596"}) is 13
+PASS foo({f:"blah405"}, {f:"blah595"}) is [14, false]
+PASS bar({f:"blah405"}, {f:"blah595"}) is 13
+PASS foo({f:"blah406"}, {f:"blah594"}) is [14, false]
+PASS bar({f:"blah406"}, {f:"blah594"}) is 13
+PASS foo({f:"blah407"}, {f:"blah593"}) is [14, false]
+PASS bar({f:"blah407"}, {f:"blah593"}) is 13
+PASS foo({f:"blah408"}, {f:"blah592"}) is [14, false]
+PASS bar({f:"blah408"}, {f:"blah592"}) is 13
+PASS foo({f:"blah409"}, {f:"blah591"}) is [14, false]
+PASS bar({f:"blah409"}, {f:"blah591"}) is 13
+PASS foo({f:"blah410"}, {f:"blah590"}) is [14, false]
+PASS bar({f:"blah410"}, {f:"blah590"}) is 13
+PASS foo({f:"blah411"}, {f:"blah589"}) is [14, false]
+PASS bar({f:"blah411"}, {f:"blah589"}) is 13
+PASS foo({f:"blah412"}, {f:"blah588"}) is [14, false]
+PASS bar({f:"blah412"}, {f:"blah588"}) is 13
+PASS foo({f:"blah413"}, {f:"blah587"}) is [14, false]
+PASS bar({f:"blah413"}, {f:"blah587"}) is 13
+PASS foo({f:"blah414"}, {f:"blah586"}) is [14, false]
+PASS bar({f:"blah414"}, {f:"blah586"}) is 13
+PASS foo({f:"blah415"}, {f:"blah585"}) is [14, false]
+PASS bar({f:"blah415"}, {f:"blah585"}) is 13
+PASS foo({f:"blah416"}, {f:"blah584"}) is [14, false]
+PASS bar({f:"blah416"}, {f:"blah584"}) is 13
+PASS foo({f:"blah417"}, {f:"blah583"}) is [14, false]
+PASS bar({f:"blah417"}, {f:"blah583"}) is 13
+PASS foo({f:"blah418"}, {f:"blah582"}) is [14, false]
+PASS bar({f:"blah418"}, {f:"blah582"}) is 13
+PASS foo({f:"blah419"}, {f:"blah581"}) is [14, false]
+PASS bar({f:"blah419"}, {f:"blah581"}) is 13
+PASS foo({f:"blah420"}, {f:"blah580"}) is [14, false]
+PASS bar({f:"blah420"}, {f:"blah580"}) is 13
+PASS foo({f:"blah421"}, {f:"blah579"}) is [14, false]
+PASS bar({f:"blah421"}, {f:"blah579"}) is 13
+PASS foo({f:"blah422"}, {f:"blah578"}) is [14, false]
+PASS bar({f:"blah422"}, {f:"blah578"}) is 13
+PASS foo({f:"blah423"}, {f:"blah577"}) is [14, false]
+PASS bar({f:"blah423"}, {f:"blah577"}) is 13
+PASS foo({f:"blah424"}, {f:"blah576"}) is [14, false]
+PASS bar({f:"blah424"}, {f:"blah576"}) is 13
+PASS foo({f:"blah425"}, {f:"blah575"}) is [14, false]
+PASS bar({f:"blah425"}, {f:"blah575"}) is 13
+PASS foo({f:"blah426"}, {f:"blah574"}) is [14, false]
+PASS bar({f:"blah426"}, {f:"blah574"}) is 13
+PASS foo({f:"blah427"}, {f:"blah573"}) is [14, false]
+PASS bar({f:"blah427"}, {f:"blah573"}) is 13
+PASS foo({f:"blah428"}, {f:"blah572"}) is [14, false]
+PASS bar({f:"blah428"}, {f:"blah572"}) is 13
+PASS foo({f:"blah429"}, {f:"blah571"}) is [14, false]
+PASS bar({f:"blah429"}, {f:"blah571"}) is 13
+PASS foo({f:"blah430"}, {f:"blah570"}) is [14, false]
+PASS bar({f:"blah430"}, {f:"blah570"}) is 13
+PASS foo({f:"blah431"}, {f:"blah569"}) is [14, false]
+PASS bar({f:"blah431"}, {f:"blah569"}) is 13
+PASS foo({f:"blah432"}, {f:"blah568"}) is [14, false]
+PASS bar({f:"blah432"}, {f:"blah568"}) is 13
+PASS foo({f:"blah433"}, {f:"blah567"}) is [14, false]
+PASS bar({f:"blah433"}, {f:"blah567"}) is 13
+PASS foo({f:"blah434"}, {f:"blah566"}) is [14, false]
+PASS bar({f:"blah434"}, {f:"blah566"}) is 13
+PASS foo({f:"blah435"}, {f:"blah565"}) is [14, false]
+PASS bar({f:"blah435"}, {f:"blah565"}) is 13
+PASS foo({f:"blah436"}, {f:"blah564"}) is [14, false]
+PASS bar({f:"blah436"}, {f:"blah564"}) is 13
+PASS foo({f:"blah437"}, {f:"blah563"}) is [14, false]
+PASS bar({f:"blah437"}, {f:"blah563"}) is 13
+PASS foo({f:"blah438"}, {f:"blah562"}) is [14, false]
+PASS bar({f:"blah438"}, {f:"blah562"}) is 13
+PASS foo({f:"blah439"}, {f:"blah561"}) is [14, false]
+PASS bar({f:"blah439"}, {f:"blah561"}) is 13
+PASS foo({f:"blah440"}, {f:"blah560"}) is [14, false]
+PASS bar({f:"blah440"}, {f:"blah560"}) is 13
+PASS foo({f:"blah441"}, {f:"blah559"}) is [14, false]
+PASS bar({f:"blah441"}, {f:"blah559"}) is 13
+PASS foo({f:"blah442"}, {f:"blah558"}) is [14, false]
+PASS bar({f:"blah442"}, {f:"blah558"}) is 13
+PASS foo({f:"blah443"}, {f:"blah557"}) is [14, false]
+PASS bar({f:"blah443"}, {f:"blah557"}) is 13
+PASS foo({f:"blah444"}, {f:"blah556"}) is [14, false]
+PASS bar({f:"blah444"}, {f:"blah556"}) is 13
+PASS foo({f:"blah445"}, {f:"blah555"}) is [14, false]
+PASS bar({f:"blah445"}, {f:"blah555"}) is 13
+PASS foo({f:"blah446"}, {f:"blah554"}) is [14, false]
+PASS bar({f:"blah446"}, {f:"blah554"}) is 13
+PASS foo({f:"blah447"}, {f:"blah553"}) is [14, false]
+PASS bar({f:"blah447"}, {f:"blah553"}) is 13
+PASS foo({f:"blah448"}, {f:"blah552"}) is [14, false]
+PASS bar({f:"blah448"}, {f:"blah552"}) is 13
+PASS foo({f:"blah449"}, {f:"blah551"}) is [14, false]
+PASS bar({f:"blah449"}, {f:"blah551"}) is 13
+PASS foo({f:"blah450"}, {f:"blah550"}) is [14, false]
+PASS bar({f:"blah450"}, {f:"blah550"}) is 13
+PASS foo({f:"blah451"}, {f:"blah549"}) is [14, false]
+PASS bar({f:"blah451"}, {f:"blah549"}) is 13
+PASS foo({f:"blah452"}, {f:"blah548"}) is [14, false]
+PASS bar({f:"blah452"}, {f:"blah548"}) is 13
+PASS foo({f:"blah453"}, {f:"blah547"}) is [14, false]
+PASS bar({f:"blah453"}, {f:"blah547"}) is 13
+PASS foo({f:"blah454"}, {f:"blah546"}) is [14, false]
+PASS bar({f:"blah454"}, {f:"blah546"}) is 13
+PASS foo({f:"blah455"}, {f:"blah545"}) is [14, false]
+PASS bar({f:"blah455"}, {f:"blah545"}) is 13
+PASS foo({f:"blah456"}, {f:"blah544"}) is [14, false]
+PASS bar({f:"blah456"}, {f:"blah544"}) is 13
+PASS foo({f:"blah457"}, {f:"blah543"}) is [14, false]
+PASS bar({f:"blah457"}, {f:"blah543"}) is 13
+PASS foo({f:"blah458"}, {f:"blah542"}) is [14, false]
+PASS bar({f:"blah458"}, {f:"blah542"}) is 13
+PASS foo({f:"blah459"}, {f:"blah541"}) is [14, false]
+PASS bar({f:"blah459"}, {f:"blah541"}) is 13
+PASS foo({f:"blah460"}, {f:"blah540"}) is [14, false]
+PASS bar({f:"blah460"}, {f:"blah540"}) is 13
+PASS foo({f:"blah461"}, {f:"blah539"}) is [14, false]
+PASS bar({f:"blah461"}, {f:"blah539"}) is 13
+PASS foo({f:"blah462"}, {f:"blah538"}) is [14, false]
+PASS bar({f:"blah462"}, {f:"blah538"}) is 13
+PASS foo({f:"blah463"}, {f:"blah537"}) is [14, false]
+PASS bar({f:"blah463"}, {f:"blah537"}) is 13
+PASS foo({f:"blah464"}, {f:"blah536"}) is [14, false]
+PASS bar({f:"blah464"}, {f:"blah536"}) is 13
+PASS foo({f:"blah465"}, {f:"blah535"}) is [14, false]
+PASS bar({f:"blah465"}, {f:"blah535"}) is 13
+PASS foo({f:"blah466"}, {f:"blah534"}) is [14, false]
+PASS bar({f:"blah466"}, {f:"blah534"}) is 13
+PASS foo({f:"blah467"}, {f:"blah533"}) is [14, false]
+PASS bar({f:"blah467"}, {f:"blah533"}) is 13
+PASS foo({f:"blah468"}, {f:"blah532"}) is [14, false]
+PASS bar({f:"blah468"}, {f:"blah532"}) is 13
+PASS foo({f:"blah469"}, {f:"blah531"}) is [14, false]
+PASS bar({f:"blah469"}, {f:"blah531"}) is 13
+PASS foo({f:"blah470"}, {f:"blah530"}) is [14, false]
+PASS bar({f:"blah470"}, {f:"blah530"}) is 13
+PASS foo({f:"blah471"}, {f:"blah529"}) is [14, false]
+PASS bar({f:"blah471"}, {f:"blah529"}) is 13
+PASS foo({f:"blah472"}, {f:"blah528"}) is [14, false]
+PASS bar({f:"blah472"}, {f:"blah528"}) is 13
+PASS foo({f:"blah473"}, {f:"blah527"}) is [14, false]
+PASS bar({f:"blah473"}, {f:"blah527"}) is 13
+PASS foo({f:"blah474"}, {f:"blah526"}) is [14, false]
+PASS bar({f:"blah474"}, {f:"blah526"}) is 13
+PASS foo({f:"blah475"}, {f:"blah525"}) is [14, false]
+PASS bar({f:"blah475"}, {f:"blah525"}) is 13
+PASS foo({f:"blah476"}, {f:"blah524"}) is [14, false]
+PASS bar({f:"blah476"}, {f:"blah524"}) is 13
+PASS foo({f:"blah477"}, {f:"blah523"}) is [14, false]
+PASS bar({f:"blah477"}, {f:"blah523"}) is 13
+PASS foo({f:"blah478"}, {f:"blah522"}) is [14, false]
+PASS bar({f:"blah478"}, {f:"blah522"}) is 13
+PASS foo({f:"blah479"}, {f:"blah521"}) is [14, false]
+PASS bar({f:"blah479"}, {f:"blah521"}) is 13
+PASS foo({f:"blah480"}, {f:"blah520"}) is [14, false]
+PASS bar({f:"blah480"}, {f:"blah520"}) is 13
+PASS foo({f:"blah481"}, {f:"blah519"}) is [14, false]
+PASS bar({f:"blah481"}, {f:"blah519"}) is 13
+PASS foo({f:"blah482"}, {f:"blah518"}) is [14, false]
+PASS bar({f:"blah482"}, {f:"blah518"}) is 13
+PASS foo({f:"blah483"}, {f:"blah517"}) is [14, false]
+PASS bar({f:"blah483"}, {f:"blah517"}) is 13
+PASS foo({f:"blah484"}, {f:"blah516"}) is [14, false]
+PASS bar({f:"blah484"}, {f:"blah516"}) is 13
+PASS foo({f:"blah485"}, {f:"blah515"}) is [14, false]
+PASS bar({f:"blah485"}, {f:"blah515"}) is 13
+PASS foo({f:"blah486"}, {f:"blah514"}) is [14, false]
+PASS bar({f:"blah486"}, {f:"blah514"}) is 13
+PASS foo({f:"blah487"}, {f:"blah513"}) is [14, false]
+PASS bar({f:"blah487"}, {f:"blah513"}) is 13
+PASS foo({f:"blah488"}, {f:"blah512"}) is [14, false]
+PASS bar({f:"blah488"}, {f:"blah512"}) is 13
+PASS foo({f:"blah489"}, {f:"blah511"}) is [14, false]
+PASS bar({f:"blah489"}, {f:"blah511"}) is 13
+PASS foo({f:"blah490"}, {f:"blah510"}) is [14, false]
+PASS bar({f:"blah490"}, {f:"blah510"}) is 13
+PASS foo({f:"blah491"}, {f:"blah509"}) is [14, false]
+PASS bar({f:"blah491"}, {f:"blah509"}) is 13
+PASS foo({f:"blah492"}, {f:"blah508"}) is [14, false]
+PASS bar({f:"blah492"}, {f:"blah508"}) is 13
+PASS foo({f:"blah493"}, {f:"blah507"}) is [14, false]
+PASS bar({f:"blah493"}, {f:"blah507"}) is 13
+PASS foo({f:"blah494"}, {f:"blah506"}) is [14, false]
+PASS bar({f:"blah494"}, {f:"blah506"}) is 13
+PASS foo({f:"blah495"}, {f:"blah505"}) is [14, false]
+PASS bar({f:"blah495"}, {f:"blah505"}) is 13
+PASS foo({f:"blah496"}, {f:"blah504"}) is [14, false]
+PASS bar({f:"blah496"}, {f:"blah504"}) is 13
+PASS foo({f:"blah497"}, {f:"blah503"}) is [14, false]
+PASS bar({f:"blah497"}, {f:"blah503"}) is 13
+PASS foo({f:"blah498"}, {f:"blah502"}) is [14, false]
+PASS bar({f:"blah498"}, {f:"blah502"}) is 13
+PASS foo({f:"blah499"}, {f:"blah501"}) is [14, false]
+PASS bar({f:"blah499"}, {f:"blah501"}) is 13
+PASS foo({f:"blah500"}, {f:"blah500"}) is [14, true]
+PASS bar({f:"blah500"}, {f:"blah500"}) is 15
+PASS foo({f:"blah501"}, {f:"blah499"}) is [14, false]
+PASS bar({f:"blah501"}, {f:"blah499"}) is 13
+PASS foo({f:"blah502"}, {f:"blah498"}) is [14, false]
+PASS bar({f:"blah502"}, {f:"blah498"}) is 13
+PASS foo({f:"blah503"}, {f:"blah497"}) is [14, false]
+PASS bar({f:"blah503"}, {f:"blah497"}) is 13
+PASS foo({f:"blah504"}, {f:"blah496"}) is [14, false]
+PASS bar({f:"blah504"}, {f:"blah496"}) is 13
+PASS foo({f:"blah505"}, {f:"blah495"}) is [14, false]
+PASS bar({f:"blah505"}, {f:"blah495"}) is 13
+PASS foo({f:"blah506"}, {f:"blah494"}) is [14, false]
+PASS bar({f:"blah506"}, {f:"blah494"}) is 13
+PASS foo({f:"blah507"}, {f:"blah493"}) is [14, false]
+PASS bar({f:"blah507"}, {f:"blah493"}) is 13
+PASS foo({f:"blah508"}, {f:"blah492"}) is [14, false]
+PASS bar({f:"blah508"}, {f:"blah492"}) is 13
+PASS foo({f:"blah509"}, {f:"blah491"}) is [14, false]
+PASS bar({f:"blah509"}, {f:"blah491"}) is 13
+PASS foo({f:"blah510"}, {f:"blah490"}) is [14, false]
+PASS bar({f:"blah510"}, {f:"blah490"}) is 13
+PASS foo({f:"blah511"}, {f:"blah489"}) is [14, false]
+PASS bar({f:"blah511"}, {f:"blah489"}) is 13
+PASS foo({f:"blah512"}, {f:"blah488"}) is [14, false]
+PASS bar({f:"blah512"}, {f:"blah488"}) is 13
+PASS foo({f:"blah513"}, {f:"blah487"}) is [14, false]
+PASS bar({f:"blah513"}, {f:"blah487"}) is 13
+PASS foo({f:"blah514"}, {f:"blah486"}) is [14, false]
+PASS bar({f:"blah514"}, {f:"blah486"}) is 13
+PASS foo({f:"blah515"}, {f:"blah485"}) is [14, false]
+PASS bar({f:"blah515"}, {f:"blah485"}) is 13
+PASS foo({f:"blah516"}, {f:"blah484"}) is [14, false]
+PASS bar({f:"blah516"}, {f:"blah484"}) is 13
+PASS foo({f:"blah517"}, {f:"blah483"}) is [14, false]
+PASS bar({f:"blah517"}, {f:"blah483"}) is 13
+PASS foo({f:"blah518"}, {f:"blah482"}) is [14, false]
+PASS bar({f:"blah518"}, {f:"blah482"}) is 13
+PASS foo({f:"blah519"}, {f:"blah481"}) is [14, false]
+PASS bar({f:"blah519"}, {f:"blah481"}) is 13
+PASS foo({f:"blah520"}, {f:"blah480"}) is [14, false]
+PASS bar({f:"blah520"}, {f:"blah480"}) is 13
+PASS foo({f:"blah521"}, {f:"blah479"}) is [14, false]
+PASS bar({f:"blah521"}, {f:"blah479"}) is 13
+PASS foo({f:"blah522"}, {f:"blah478"}) is [14, false]
+PASS bar({f:"blah522"}, {f:"blah478"}) is 13
+PASS foo({f:"blah523"}, {f:"blah477"}) is [14, false]
+PASS bar({f:"blah523"}, {f:"blah477"}) is 13
+PASS foo({f:"blah524"}, {f:"blah476"}) is [14, false]
+PASS bar({f:"blah524"}, {f:"blah476"}) is 13
+PASS foo({f:"blah525"}, {f:"blah475"}) is [14, false]
+PASS bar({f:"blah525"}, {f:"blah475"}) is 13
+PASS foo({f:"blah526"}, {f:"blah474"}) is [14, false]
+PASS bar({f:"blah526"}, {f:"blah474"}) is 13
+PASS foo({f:"blah527"}, {f:"blah473"}) is [14, false]
+PASS bar({f:"blah527"}, {f:"blah473"}) is 13
+PASS foo({f:"blah528"}, {f:"blah472"}) is [14, false]
+PASS bar({f:"blah528"}, {f:"blah472"}) is 13
+PASS foo({f:"blah529"}, {f:"blah471"}) is [14, false]
+PASS bar({f:"blah529"}, {f:"blah471"}) is 13
+PASS foo({f:"blah530"}, {f:"blah470"}) is [14, false]
+PASS bar({f:"blah530"}, {f:"blah470"}) is 13
+PASS foo({f:"blah531"}, {f:"blah469"}) is [14, false]
+PASS bar({f:"blah531"}, {f:"blah469"}) is 13
+PASS foo({f:"blah532"}, {f:"blah468"}) is [14, false]
+PASS bar({f:"blah532"}, {f:"blah468"}) is 13
+PASS foo({f:"blah533"}, {f:"blah467"}) is [14, false]
+PASS bar({f:"blah533"}, {f:"blah467"}) is 13
+PASS foo({f:"blah534"}, {f:"blah466"}) is [14, false]
+PASS bar({f:"blah534"}, {f:"blah466"}) is 13
+PASS foo({f:"blah535"}, {f:"blah465"}) is [14, false]
+PASS bar({f:"blah535"}, {f:"blah465"}) is 13
+PASS foo({f:"blah536"}, {f:"blah464"}) is [14, false]
+PASS bar({f:"blah536"}, {f:"blah464"}) is 13
+PASS foo({f:"blah537"}, {f:"blah463"}) is [14, false]
+PASS bar({f:"blah537"}, {f:"blah463"}) is 13
+PASS foo({f:"blah538"}, {f:"blah462"}) is [14, false]
+PASS bar({f:"blah538"}, {f:"blah462"}) is 13
+PASS foo({f:"blah539"}, {f:"blah461"}) is [14, false]
+PASS bar({f:"blah539"}, {f:"blah461"}) is 13
+PASS foo({f:"blah540"}, {f:"blah460"}) is [14, false]
+PASS bar({f:"blah540"}, {f:"blah460"}) is 13
+PASS foo({f:"blah541"}, {f:"blah459"}) is [14, false]
+PASS bar({f:"blah541"}, {f:"blah459"}) is 13
+PASS foo({f:"blah542"}, {f:"blah458"}) is [14, false]
+PASS bar({f:"blah542"}, {f:"blah458"}) is 13
+PASS foo({f:"blah543"}, {f:"blah457"}) is [14, false]
+PASS bar({f:"blah543"}, {f:"blah457"}) is 13
+PASS foo({f:"blah544"}, {f:"blah456"}) is [14, false]
+PASS bar({f:"blah544"}, {f:"blah456"}) is 13
+PASS foo({f:"blah545"}, {f:"blah455"}) is [14, false]
+PASS bar({f:"blah545"}, {f:"blah455"}) is 13
+PASS foo({f:"blah546"}, {f:"blah454"}) is [14, false]
+PASS bar({f:"blah546"}, {f:"blah454"}) is 13
+PASS foo({f:"blah547"}, {f:"blah453"}) is [14, false]
+PASS bar({f:"blah547"}, {f:"blah453"}) is 13
+PASS foo({f:"blah548"}, {f:"blah452"}) is [14, false]
+PASS bar({f:"blah548"}, {f:"blah452"}) is 13
+PASS foo({f:"blah549"}, {f:"blah451"}) is [14, false]
+PASS bar({f:"blah549"}, {f:"blah451"}) is 13
+PASS foo({f:"blah550"}, {f:"blah450"}) is [14, false]
+PASS bar({f:"blah550"}, {f:"blah450"}) is 13
+PASS foo({f:"blah551"}, {f:"blah449"}) is [14, false]
+PASS bar({f:"blah551"}, {f:"blah449"}) is 13
+PASS foo({f:"blah552"}, {f:"blah448"}) is [14, false]
+PASS bar({f:"blah552"}, {f:"blah448"}) is 13
+PASS foo({f:"blah553"}, {f:"blah447"}) is [14, false]
+PASS bar({f:"blah553"}, {f:"blah447"}) is 13
+PASS foo({f:"blah554"}, {f:"blah446"}) is [14, false]
+PASS bar({f:"blah554"}, {f:"blah446"}) is 13
+PASS foo({f:"blah555"}, {f:"blah445"}) is [14, false]
+PASS bar({f:"blah555"}, {f:"blah445"}) is 13
+PASS foo({f:"blah556"}, {f:"blah444"}) is [14, false]
+PASS bar({f:"blah556"}, {f:"blah444"}) is 13
+PASS foo({f:"blah557"}, {f:"blah443"}) is [14, false]
+PASS bar({f:"blah557"}, {f:"blah443"}) is 13
+PASS foo({f:"blah558"}, {f:"blah442"}) is [14, false]
+PASS bar({f:"blah558"}, {f:"blah442"}) is 13
+PASS foo({f:"blah559"}, {f:"blah441"}) is [14, false]
+PASS bar({f:"blah559"}, {f:"blah441"}) is 13
+PASS foo({f:"blah560"}, {f:"blah440"}) is [14, false]
+PASS bar({f:"blah560"}, {f:"blah440"}) is 13
+PASS foo({f:"blah561"}, {f:"blah439"}) is [14, false]
+PASS bar({f:"blah561"}, {f:"blah439"}) is 13
+PASS foo({f:"blah562"}, {f:"blah438"}) is [14, false]
+PASS bar({f:"blah562"}, {f:"blah438"}) is 13
+PASS foo({f:"blah563"}, {f:"blah437"}) is [14, false]
+PASS bar({f:"blah563"}, {f:"blah437"}) is 13
+PASS foo({f:"blah564"}, {f:"blah436"}) is [14, false]
+PASS bar({f:"blah564"}, {f:"blah436"}) is 13
+PASS foo({f:"blah565"}, {f:"blah435"}) is [14, false]
+PASS bar({f:"blah565"}, {f:"blah435"}) is 13
+PASS foo({f:"blah566"}, {f:"blah434"}) is [14, false]
+PASS bar({f:"blah566"}, {f:"blah434"}) is 13
+PASS foo({f:"blah567"}, {f:"blah433"}) is [14, false]
+PASS bar({f:"blah567"}, {f:"blah433"}) is 13
+PASS foo({f:"blah568"}, {f:"blah432"}) is [14, false]
+PASS bar({f:"blah568"}, {f:"blah432"}) is 13
+PASS foo({f:"blah569"}, {f:"blah431"}) is [14, false]
+PASS bar({f:"blah569"}, {f:"blah431"}) is 13
+PASS foo({f:"blah570"}, {f:"blah430"}) is [14, false]
+PASS bar({f:"blah570"}, {f:"blah430"}) is 13
+PASS foo({f:"blah571"}, {f:"blah429"}) is [14, false]
+PASS bar({f:"blah571"}, {f:"blah429"}) is 13
+PASS foo({f:"blah572"}, {f:"blah428"}) is [14, false]
+PASS bar({f:"blah572"}, {f:"blah428"}) is 13
+PASS foo({f:"blah573"}, {f:"blah427"}) is [14, false]
+PASS bar({f:"blah573"}, {f:"blah427"}) is 13
+PASS foo({f:"blah574"}, {f:"blah426"}) is [14, false]
+PASS bar({f:"blah574"}, {f:"blah426"}) is 13
+PASS foo({f:"blah575"}, {f:"blah425"}) is [14, false]
+PASS bar({f:"blah575"}, {f:"blah425"}) is 13
+PASS foo({f:"blah576"}, {f:"blah424"}) is [14, false]
+PASS bar({f:"blah576"}, {f:"blah424"}) is 13
+PASS foo({f:"blah577"}, {f:"blah423"}) is [14, false]
+PASS bar({f:"blah577"}, {f:"blah423"}) is 13
+PASS foo({f:"blah578"}, {f:"blah422"}) is [14, false]
+PASS bar({f:"blah578"}, {f:"blah422"}) is 13
+PASS foo({f:"blah579"}, {f:"blah421"}) is [14, false]
+PASS bar({f:"blah579"}, {f:"blah421"}) is 13
+PASS foo({f:"blah580"}, {f:"blah420"}) is [14, false]
+PASS bar({f:"blah580"}, {f:"blah420"}) is 13
+PASS foo({f:"blah581"}, {f:"blah419"}) is [14, false]
+PASS bar({f:"blah581"}, {f:"blah419"}) is 13
+PASS foo({f:"blah582"}, {f:"blah418"}) is [14, false]
+PASS bar({f:"blah582"}, {f:"blah418"}) is 13
+PASS foo({f:"blah583"}, {f:"blah417"}) is [14, false]
+PASS bar({f:"blah583"}, {f:"blah417"}) is 13
+PASS foo({f:"blah584"}, {f:"blah416"}) is [14, false]
+PASS bar({f:"blah584"}, {f:"blah416"}) is 13
+PASS foo({f:"blah585"}, {f:"blah415"}) is [14, false]
+PASS bar({f:"blah585"}, {f:"blah415"}) is 13
+PASS foo({f:"blah586"}, {f:"blah414"}) is [14, false]
+PASS bar({f:"blah586"}, {f:"blah414"}) is 13
+PASS foo({f:"blah587"}, {f:"blah413"}) is [14, false]
+PASS bar({f:"blah587"}, {f:"blah413"}) is 13
+PASS foo({f:"blah588"}, {f:"blah412"}) is [14, false]
+PASS bar({f:"blah588"}, {f:"blah412"}) is 13
+PASS foo({f:"blah589"}, {f:"blah411"}) is [14, false]
+PASS bar({f:"blah589"}, {f:"blah411"}) is 13
+PASS foo({f:"blah590"}, {f:"blah410"}) is [14, false]
+PASS bar({f:"blah590"}, {f:"blah410"}) is 13
+PASS foo({f:"blah591"}, {f:"blah409"}) is [14, false]
+PASS bar({f:"blah591"}, {f:"blah409"}) is 13
+PASS foo({f:"blah592"}, {f:"blah408"}) is [14, false]
+PASS bar({f:"blah592"}, {f:"blah408"}) is 13
+PASS foo({f:"blah593"}, {f:"blah407"}) is [14, false]
+PASS bar({f:"blah593"}, {f:"blah407"}) is 13
+PASS foo({f:"blah594"}, {f:"blah406"}) is [14, false]
+PASS bar({f:"blah594"}, {f:"blah406"}) is 13
+PASS foo({f:"blah595"}, {f:"blah405"}) is [14, false]
+PASS bar({f:"blah595"}, {f:"blah405"}) is 13
+PASS foo({f:"blah596"}, {f:"blah404"}) is [14, false]
+PASS bar({f:"blah596"}, {f:"blah404"}) is 13
+PASS foo({f:"blah597"}, {f:"blah403"}) is [14, false]
+PASS bar({f:"blah597"}, {f:"blah403"}) is 13
+PASS foo({f:"blah598"}, {f:"blah402"}) is [14, false]
+PASS bar({f:"blah598"}, {f:"blah402"}) is 13
+PASS foo({f:"blah599"}, {f:"blah401"}) is [14, false]
+PASS bar({f:"blah599"}, {f:"blah401"}) is 13
+PASS foo({f:"blah600"}, {f:"blah400"}) is [14, false]
+PASS bar({f:"blah600"}, {f:"blah400"}) is 13
+PASS foo({f:"blah601"}, {f:"blah399"}) is [14, false]
+PASS bar({f:"blah601"}, {f:"blah399"}) is 13
+PASS foo({f:"blah602"}, {f:"blah398"}) is [14, false]
+PASS bar({f:"blah602"}, {f:"blah398"}) is 13
+PASS foo({f:"blah603"}, {f:"blah397"}) is [14, false]
+PASS bar({f:"blah603"}, {f:"blah397"}) is 13
+PASS foo({f:"blah604"}, {f:"blah396"}) is [14, false]
+PASS bar({f:"blah604"}, {f:"blah396"}) is 13
+PASS foo({f:"blah605"}, {f:"blah395"}) is [14, false]
+PASS bar({f:"blah605"}, {f:"blah395"}) is 13
+PASS foo({f:"blah606"}, {f:"blah394"}) is [14, false]
+PASS bar({f:"blah606"}, {f:"blah394"}) is 13
+PASS foo({f:"blah607"}, {f:"blah393"}) is [14, false]
+PASS bar({f:"blah607"}, {f:"blah393"}) is 13
+PASS foo({f:"blah608"}, {f:"blah392"}) is [14, false]
+PASS bar({f:"blah608"}, {f:"blah392"}) is 13
+PASS foo({f:"blah609"}, {f:"blah391"}) is [14, false]
+PASS bar({f:"blah609"}, {f:"blah391"}) is 13
+PASS foo({f:"blah610"}, {f:"blah390"}) is [14, false]
+PASS bar({f:"blah610"}, {f:"blah390"}) is 13
+PASS foo({f:"blah611"}, {f:"blah389"}) is [14, false]
+PASS bar({f:"blah611"}, {f:"blah389"}) is 13
+PASS foo({f:"blah612"}, {f:"blah388"}) is [14, false]
+PASS bar({f:"blah612"}, {f:"blah388"}) is 13
+PASS foo({f:"blah613"}, {f:"blah387"}) is [14, false]
+PASS bar({f:"blah613"}, {f:"blah387"}) is 13
+PASS foo({f:"blah614"}, {f:"blah386"}) is [14, false]
+PASS bar({f:"blah614"}, {f:"blah386"}) is 13
+PASS foo({f:"blah615"}, {f:"blah385"}) is [14, false]
+PASS bar({f:"blah615"}, {f:"blah385"}) is 13
+PASS foo({f:"blah616"}, {f:"blah384"}) is [14, false]
+PASS bar({f:"blah616"}, {f:"blah384"}) is 13
+PASS foo({f:"blah617"}, {f:"blah383"}) is [14, false]
+PASS bar({f:"blah617"}, {f:"blah383"}) is 13
+PASS foo({f:"blah618"}, {f:"blah382"}) is [14, false]
+PASS bar({f:"blah618"}, {f:"blah382"}) is 13
+PASS foo({f:"blah619"}, {f:"blah381"}) is [14, false]
+PASS bar({f:"blah619"}, {f:"blah381"}) is 13
+PASS foo({f:"blah620"}, {f:"blah380"}) is [14, false]
+PASS bar({f:"blah620"}, {f:"blah380"}) is 13
+PASS foo({f:"blah621"}, {f:"blah379"}) is [14, false]
+PASS bar({f:"blah621"}, {f:"blah379"}) is 13
+PASS foo({f:"blah622"}, {f:"blah378"}) is [14, false]
+PASS bar({f:"blah622"}, {f:"blah378"}) is 13
+PASS foo({f:"blah623"}, {f:"blah377"}) is [14, false]
+PASS bar({f:"blah623"}, {f:"blah377"}) is 13
+PASS foo({f:"blah624"}, {f:"blah376"}) is [14, false]
+PASS bar({f:"blah624"}, {f:"blah376"}) is 13
+PASS foo({f:"blah625"}, {f:"blah375"}) is [14, false]
+PASS bar({f:"blah625"}, {f:"blah375"}) is 13
+PASS foo({f:"blah626"}, {f:"blah374"}) is [14, false]
+PASS bar({f:"blah626"}, {f:"blah374"}) is 13
+PASS foo({f:"blah627"}, {f:"blah373"}) is [14, false]
+PASS bar({f:"blah627"}, {f:"blah373"}) is 13
+PASS foo({f:"blah628"}, {f:"blah372"}) is [14, false]
+PASS bar({f:"blah628"}, {f:"blah372"}) is 13
+PASS foo({f:"blah629"}, {f:"blah371"}) is [14, false]
+PASS bar({f:"blah629"}, {f:"blah371"}) is 13
+PASS foo({f:"blah630"}, {f:"blah370"}) is [14, false]
+PASS bar({f:"blah630"}, {f:"blah370"}) is 13
+PASS foo({f:"blah631"}, {f:"blah369"}) is [14, false]
+PASS bar({f:"blah631"}, {f:"blah369"}) is 13
+PASS foo({f:"blah632"}, {f:"blah368"}) is [14, false]
+PASS bar({f:"blah632"}, {f:"blah368"}) is 13
+PASS foo({f:"blah633"}, {f:"blah367"}) is [14, false]
+PASS bar({f:"blah633"}, {f:"blah367"}) is 13
+PASS foo({f:"blah634"}, {f:"blah366"}) is [14, false]
+PASS bar({f:"blah634"}, {f:"blah366"}) is 13
+PASS foo({f:"blah635"}, {f:"blah365"}) is [14, false]
+PASS bar({f:"blah635"}, {f:"blah365"}) is 13
+PASS foo({f:"blah636"}, {f:"blah364"}) is [14, false]
+PASS bar({f:"blah636"}, {f:"blah364"}) is 13
+PASS foo({f:"blah637"}, {f:"blah363"}) is [14, false]
+PASS bar({f:"blah637"}, {f:"blah363"}) is 13
+PASS foo({f:"blah638"}, {f:"blah362"}) is [14, false]
+PASS bar({f:"blah638"}, {f:"blah362"}) is 13
+PASS foo({f:"blah639"}, {f:"blah361"}) is [14, false]
+PASS bar({f:"blah639"}, {f:"blah361"}) is 13
+PASS foo({f:"blah640"}, {f:"blah360"}) is [14, false]
+PASS bar({f:"blah640"}, {f:"blah360"}) is 13
+PASS foo({f:"blah641"}, {f:"blah359"}) is [14, false]
+PASS bar({f:"blah641"}, {f:"blah359"}) is 13
+PASS foo({f:"blah642"}, {f:"blah358"}) is [14, false]
+PASS bar({f:"blah642"}, {f:"blah358"}) is 13
+PASS foo({f:"blah643"}, {f:"blah357"}) is [14, false]
+PASS bar({f:"blah643"}, {f:"blah357"}) is 13
+PASS foo({f:"blah644"}, {f:"blah356"}) is [14, false]
+PASS bar({f:"blah644"}, {f:"blah356"}) is 13
+PASS foo({f:"blah645"}, {f:"blah355"}) is [14, false]
+PASS bar({f:"blah645"}, {f:"blah355"}) is 13
+PASS foo({f:"blah646"}, {f:"blah354"}) is [14, false]
+PASS bar({f:"blah646"}, {f:"blah354"}) is 13
+PASS foo({f:"blah647"}, {f:"blah353"}) is [14, false]
+PASS bar({f:"blah647"}, {f:"blah353"}) is 13
+PASS foo({f:"blah648"}, {f:"blah352"}) is [14, false]
+PASS bar({f:"blah648"}, {f:"blah352"}) is 13
+PASS foo({f:"blah649"}, {f:"blah351"}) is [14, false]
+PASS bar({f:"blah649"}, {f:"blah351"}) is 13
+PASS foo({f:"blah650"}, {f:"blah350"}) is [14, false]
+PASS bar({f:"blah650"}, {f:"blah350"}) is 13
+PASS foo({f:"blah651"}, {f:"blah349"}) is [14, false]
+PASS bar({f:"blah651"}, {f:"blah349"}) is 13
+PASS foo({f:"blah652"}, {f:"blah348"}) is [14, false]
+PASS bar({f:"blah652"}, {f:"blah348"}) is 13
+PASS foo({f:"blah653"}, {f:"blah347"}) is [14, false]
+PASS bar({f:"blah653"}, {f:"blah347"}) is 13
+PASS foo({f:"blah654"}, {f:"blah346"}) is [14, false]
+PASS bar({f:"blah654"}, {f:"blah346"}) is 13
+PASS foo({f:"blah655"}, {f:"blah345"}) is [14, false]
+PASS bar({f:"blah655"}, {f:"blah345"}) is 13
+PASS foo({f:"blah656"}, {f:"blah344"}) is [14, false]
+PASS bar({f:"blah656"}, {f:"blah344"}) is 13
+PASS foo({f:"blah657"}, {f:"blah343"}) is [14, false]
+PASS bar({f:"blah657"}, {f:"blah343"}) is 13
+PASS foo({f:"blah658"}, {f:"blah342"}) is [14, false]
+PASS bar({f:"blah658"}, {f:"blah342"}) is 13
+PASS foo({f:"blah659"}, {f:"blah341"}) is [14, false]
+PASS bar({f:"blah659"}, {f:"blah341"}) is 13
+PASS foo({f:"blah660"}, {f:"blah340"}) is [14, false]
+PASS bar({f:"blah660"}, {f:"blah340"}) is 13
+PASS foo({f:"blah661"}, {f:"blah339"}) is [14, false]
+PASS bar({f:"blah661"}, {f:"blah339"}) is 13
+PASS foo({f:"blah662"}, {f:"blah338"}) is [14, false]
+PASS bar({f:"blah662"}, {f:"blah338"}) is 13
+PASS foo({f:"blah663"}, {f:"blah337"}) is [14, false]
+PASS bar({f:"blah663"}, {f:"blah337"}) is 13
+PASS foo({f:"blah664"}, {f:"blah336"}) is [14, false]
+PASS bar({f:"blah664"}, {f:"blah336"}) is 13
+PASS foo({f:"blah665"}, {f:"blah335"}) is [14, false]
+PASS bar({f:"blah665"}, {f:"blah335"}) is 13
+PASS foo({f:"blah666"}, {f:"blah334"}) is [14, false]
+PASS bar({f:"blah666"}, {f:"blah334"}) is 13
+PASS foo({f:"blah667"}, {f:"blah333"}) is [14, false]
+PASS bar({f:"blah667"}, {f:"blah333"}) is 13
+PASS foo({f:"blah668"}, {f:"blah332"}) is [14, false]
+PASS bar({f:"blah668"}, {f:"blah332"}) is 13
+PASS foo({f:"blah669"}, {f:"blah331"}) is [14, false]
+PASS bar({f:"blah669"}, {f:"blah331"}) is 13
+PASS foo({f:"blah670"}, {f:"blah330"}) is [14, false]
+PASS bar({f:"blah670"}, {f:"blah330"}) is 13
+PASS foo({f:"blah671"}, {f:"blah329"}) is [14, false]
+PASS bar({f:"blah671"}, {f:"blah329"}) is 13
+PASS foo({f:"blah672"}, {f:"blah328"}) is [14, false]
+PASS bar({f:"blah672"}, {f:"blah328"}) is 13
+PASS foo({f:"blah673"}, {f:"blah327"}) is [14, false]
+PASS bar({f:"blah673"}, {f:"blah327"}) is 13
+PASS foo({f:"blah674"}, {f:"blah326"}) is [14, false]
+PASS bar({f:"blah674"}, {f:"blah326"}) is 13
+PASS foo({f:"blah675"}, {f:"blah325"}) is [14, false]
+PASS bar({f:"blah675"}, {f:"blah325"}) is 13
+PASS foo({f:"blah676"}, {f:"blah324"}) is [14, false]
+PASS bar({f:"blah676"}, {f:"blah324"}) is 13
+PASS foo({f:"blah677"}, {f:"blah323"}) is [14, false]
+PASS bar({f:"blah677"}, {f:"blah323"}) is 13
+PASS foo({f:"blah678"}, {f:"blah322"}) is [14, false]
+PASS bar({f:"blah678"}, {f:"blah322"}) is 13
+PASS foo({f:"blah679"}, {f:"blah321"}) is [14, false]
+PASS bar({f:"blah679"}, {f:"blah321"}) is 13
+PASS foo({f:"blah680"}, {f:"blah320"}) is [14, false]
+PASS bar({f:"blah680"}, {f:"blah320"}) is 13
+PASS foo({f:"blah681"}, {f:"blah319"}) is [14, false]
+PASS bar({f:"blah681"}, {f:"blah319"}) is 13
+PASS foo({f:"blah682"}, {f:"blah318"}) is [14, false]
+PASS bar({f:"blah682"}, {f:"blah318"}) is 13
+PASS foo({f:"blah683"}, {f:"blah317"}) is [14, false]
+PASS bar({f:"blah683"}, {f:"blah317"}) is 13
+PASS foo({f:"blah684"}, {f:"blah316"}) is [14, false]
+PASS bar({f:"blah684"}, {f:"blah316"}) is 13
+PASS foo({f:"blah685"}, {f:"blah315"}) is [14, false]
+PASS bar({f:"blah685"}, {f:"blah315"}) is 13
+PASS foo({f:"blah686"}, {f:"blah314"}) is [14, false]
+PASS bar({f:"blah686"}, {f:"blah314"}) is 13
+PASS foo({f:"blah687"}, {f:"blah313"}) is [14, false]
+PASS bar({f:"blah687"}, {f:"blah313"}) is 13
+PASS foo({f:"blah688"}, {f:"blah312"}) is [14, false]
+PASS bar({f:"blah688"}, {f:"blah312"}) is 13
+PASS foo({f:"blah689"}, {f:"blah311"}) is [14, false]
+PASS bar({f:"blah689"}, {f:"blah311"}) is 13
+PASS foo({f:"blah690"}, {f:"blah310"}) is [14, false]
+PASS bar({f:"blah690"}, {f:"blah310"}) is 13
+PASS foo({f:"blah691"}, {f:"blah309"}) is [14, false]
+PASS bar({f:"blah691"}, {f:"blah309"}) is 13
+PASS foo({f:"blah692"}, {f:"blah308"}) is [14, false]
+PASS bar({f:"blah692"}, {f:"blah308"}) is 13
+PASS foo({f:"blah693"}, {f:"blah307"}) is [14, false]
+PASS bar({f:"blah693"}, {f:"blah307"}) is 13
+PASS foo({f:"blah694"}, {f:"blah306"}) is [14, false]
+PASS bar({f:"blah694"}, {f:"blah306"}) is 13
+PASS foo({f:"blah695"}, {f:"blah305"}) is [14, false]
+PASS bar({f:"blah695"}, {f:"blah305"}) is 13
+PASS foo({f:"blah696"}, {f:"blah304"}) is [14, false]
+PASS bar({f:"blah696"}, {f:"blah304"}) is 13
+PASS foo({f:"blah697"}, {f:"blah303"}) is [14, false]
+PASS bar({f:"blah697"}, {f:"blah303"}) is 13
+PASS foo({f:"blah698"}, {f:"blah302"}) is [14, false]
+PASS bar({f:"blah698"}, {f:"blah302"}) is 13
+PASS foo({f:"blah699"}, {f:"blah301"}) is [14, false]
+PASS bar({f:"blah699"}, {f:"blah301"}) is 13
+PASS foo({f:"blah700"}, {f:"blah300"}) is [14, false]
+PASS bar({f:"blah700"}, {f:"blah300"}) is 13
+PASS foo({f:"blah701"}, {f:"blah299"}) is [14, false]
+PASS bar({f:"blah701"}, {f:"blah299"}) is 13
+PASS foo({f:"blah702"}, {f:"blah298"}) is [14, false]
+PASS bar({f:"blah702"}, {f:"blah298"}) is 13
+PASS foo({f:"blah703"}, {f:"blah297"}) is [14, false]
+PASS bar({f:"blah703"}, {f:"blah297"}) is 13
+PASS foo({f:"blah704"}, {f:"blah296"}) is [14, false]
+PASS bar({f:"blah704"}, {f:"blah296"}) is 13
+PASS foo({f:"blah705"}, {f:"blah295"}) is [14, false]
+PASS bar({f:"blah705"}, {f:"blah295"}) is 13
+PASS foo({f:"blah706"}, {f:"blah294"}) is [14, false]
+PASS bar({f:"blah706"}, {f:"blah294"}) is 13
+PASS foo({f:"blah707"}, {f:"blah293"}) is [14, false]
+PASS bar({f:"blah707"}, {f:"blah293"}) is 13
+PASS foo({f:"blah708"}, {f:"blah292"}) is [14, false]
+PASS bar({f:"blah708"}, {f:"blah292"}) is 13
+PASS foo({f:"blah709"}, {f:"blah291"}) is [14, false]
+PASS bar({f:"blah709"}, {f:"blah291"}) is 13
+PASS foo({f:"blah710"}, {f:"blah290"}) is [14, false]
+PASS bar({f:"blah710"}, {f:"blah290"}) is 13
+PASS foo({f:"blah711"}, {f:"blah289"}) is [14, false]
+PASS bar({f:"blah711"}, {f:"blah289"}) is 13
+PASS foo({f:"blah712"}, {f:"blah288"}) is [14, false]
+PASS bar({f:"blah712"}, {f:"blah288"}) is 13
+PASS foo({f:"blah713"}, {f:"blah287"}) is [14, false]
+PASS bar({f:"blah713"}, {f:"blah287"}) is 13
+PASS foo({f:"blah714"}, {f:"blah286"}) is [14, false]
+PASS bar({f:"blah714"}, {f:"blah286"}) is 13
+PASS foo({f:"blah715"}, {f:"blah285"}) is [14, false]
+PASS bar({f:"blah715"}, {f:"blah285"}) is 13
+PASS foo({f:"blah716"}, {f:"blah284"}) is [14, false]
+PASS bar({f:"blah716"}, {f:"blah284"}) is 13
+PASS foo({f:"blah717"}, {f:"blah283"}) is [14, false]
+PASS bar({f:"blah717"}, {f:"blah283"}) is 13
+PASS foo({f:"blah718"}, {f:"blah282"}) is [14, false]
+PASS bar({f:"blah718"}, {f:"blah282"}) is 13
+PASS foo({f:"blah719"}, {f:"blah281"}) is [14, false]
+PASS bar({f:"blah719"}, {f:"blah281"}) is 13
+PASS foo({f:"blah720"}, {f:"blah280"}) is [14, false]
+PASS bar({f:"blah720"}, {f:"blah280"}) is 13
+PASS foo({f:"blah721"}, {f:"blah279"}) is [14, false]
+PASS bar({f:"blah721"}, {f:"blah279"}) is 13
+PASS foo({f:"blah722"}, {f:"blah278"}) is [14, false]
+PASS bar({f:"blah722"}, {f:"blah278"}) is 13
+PASS foo({f:"blah723"}, {f:"blah277"}) is [14, false]
+PASS bar({f:"blah723"}, {f:"blah277"}) is 13
+PASS foo({f:"blah724"}, {f:"blah276"}) is [14, false]
+PASS bar({f:"blah724"}, {f:"blah276"}) is 13
+PASS foo({f:"blah725"}, {f:"blah275"}) is [14, false]
+PASS bar({f:"blah725"}, {f:"blah275"}) is 13
+PASS foo({f:"blah726"}, {f:"blah274"}) is [14, false]
+PASS bar({f:"blah726"}, {f:"blah274"}) is 13
+PASS foo({f:"blah727"}, {f:"blah273"}) is [14, false]
+PASS bar({f:"blah727"}, {f:"blah273"}) is 13
+PASS foo({f:"blah728"}, {f:"blah272"}) is [14, false]
+PASS bar({f:"blah728"}, {f:"blah272"}) is 13
+PASS foo({f:"blah729"}, {f:"blah271"}) is [14, false]
+PASS bar({f:"blah729"}, {f:"blah271"}) is 13
+PASS foo({f:"blah730"}, {f:"blah270"}) is [14, false]
+PASS bar({f:"blah730"}, {f:"blah270"}) is 13
+PASS foo({f:"blah731"}, {f:"blah269"}) is [14, false]
+PASS bar({f:"blah731"}, {f:"blah269"}) is 13
+PASS foo({f:"blah732"}, {f:"blah268"}) is [14, false]
+PASS bar({f:"blah732"}, {f:"blah268"}) is 13
+PASS foo({f:"blah733"}, {f:"blah267"}) is [14, false]
+PASS bar({f:"blah733"}, {f:"blah267"}) is 13
+PASS foo({f:"blah734"}, {f:"blah266"}) is [14, false]
+PASS bar({f:"blah734"}, {f:"blah266"}) is 13
+PASS foo({f:"blah735"}, {f:"blah265"}) is [14, false]
+PASS bar({f:"blah735"}, {f:"blah265"}) is 13
+PASS foo({f:"blah736"}, {f:"blah264"}) is [14, false]
+PASS bar({f:"blah736"}, {f:"blah264"}) is 13
+PASS foo({f:"blah737"}, {f:"blah263"}) is [14, false]
+PASS bar({f:"blah737"}, {f:"blah263"}) is 13
+PASS foo({f:"blah738"}, {f:"blah262"}) is [14, false]
+PASS bar({f:"blah738"}, {f:"blah262"}) is 13
+PASS foo({f:"blah739"}, {f:"blah261"}) is [14, false]
+PASS bar({f:"blah739"}, {f:"blah261"}) is 13
+PASS foo({f:"blah740"}, {f:"blah260"}) is [14, false]
+PASS bar({f:"blah740"}, {f:"blah260"}) is 13
+PASS foo({f:"blah741"}, {f:"blah259"}) is [14, false]
+PASS bar({f:"blah741"}, {f:"blah259"}) is 13
+PASS foo({f:"blah742"}, {f:"blah258"}) is [14, false]
+PASS bar({f:"blah742"}, {f:"blah258"}) is 13
+PASS foo({f:"blah743"}, {f:"blah257"}) is [14, false]
+PASS bar({f:"blah743"}, {f:"blah257"}) is 13
+PASS foo({f:"blah744"}, {f:"blah256"}) is [14, false]
+PASS bar({f:"blah744"}, {f:"blah256"}) is 13
+PASS foo({f:"blah745"}, {f:"blah255"}) is [14, false]
+PASS bar({f:"blah745"}, {f:"blah255"}) is 13
+PASS foo({f:"blah746"}, {f:"blah254"}) is [14, false]
+PASS bar({f:"blah746"}, {f:"blah254"}) is 13
+PASS foo({f:"blah747"}, {f:"blah253"}) is [14, false]
+PASS bar({f:"blah747"}, {f:"blah253"}) is 13
+PASS foo({f:"blah748"}, {f:"blah252"}) is [14, false]
+PASS bar({f:"blah748"}, {f:"blah252"}) is 13
+PASS foo({f:"blah749"}, {f:"blah251"}) is [14, false]
+PASS bar({f:"blah749"}, {f:"blah251"}) is 13
+PASS foo({f:"blah750"}, {f:"blah250"}) is [14, false]
+PASS bar({f:"blah750"}, {f:"blah250"}) is 13
+PASS foo({f:"blah751"}, {f:"blah249"}) is [14, false]
+PASS bar({f:"blah751"}, {f:"blah249"}) is 13
+PASS foo({f:"blah752"}, {f:"blah248"}) is [14, false]
+PASS bar({f:"blah752"}, {f:"blah248"}) is 13
+PASS foo({f:"blah753"}, {f:"blah247"}) is [14, false]
+PASS bar({f:"blah753"}, {f:"blah247"}) is 13
+PASS foo({f:"blah754"}, {f:"blah246"}) is [14, false]
+PASS bar({f:"blah754"}, {f:"blah246"}) is 13
+PASS foo({f:"blah755"}, {f:"blah245"}) is [14, false]
+PASS bar({f:"blah755"}, {f:"blah245"}) is 13
+PASS foo({f:"blah756"}, {f:"blah244"}) is [14, false]
+PASS bar({f:"blah756"}, {f:"blah244"}) is 13
+PASS foo({f:"blah757"}, {f:"blah243"}) is [14, false]
+PASS bar({f:"blah757"}, {f:"blah243"}) is 13
+PASS foo({f:"blah758"}, {f:"blah242"}) is [14, false]
+PASS bar({f:"blah758"}, {f:"blah242"}) is 13
+PASS foo({f:"blah759"}, {f:"blah241"}) is [14, false]
+PASS bar({f:"blah759"}, {f:"blah241"}) is 13
+PASS foo({f:"blah760"}, {f:"blah240"}) is [14, false]
+PASS bar({f:"blah760"}, {f:"blah240"}) is 13
+PASS foo({f:"blah761"}, {f:"blah239"}) is [14, false]
+PASS bar({f:"blah761"}, {f:"blah239"}) is 13
+PASS foo({f:"blah762"}, {f:"blah238"}) is [14, false]
+PASS bar({f:"blah762"}, {f:"blah238"}) is 13
+PASS foo({f:"blah763"}, {f:"blah237"}) is [14, false]
+PASS bar({f:"blah763"}, {f:"blah237"}) is 13
+PASS foo({f:"blah764"}, {f:"blah236"}) is [14, false]
+PASS bar({f:"blah764"}, {f:"blah236"}) is 13
+PASS foo({f:"blah765"}, {f:"blah235"}) is [14, false]
+PASS bar({f:"blah765"}, {f:"blah235"}) is 13
+PASS foo({f:"blah766"}, {f:"blah234"}) is [14, false]
+PASS bar({f:"blah766"}, {f:"blah234"}) is 13
+PASS foo({f:"blah767"}, {f:"blah233"}) is [14, false]
+PASS bar({f:"blah767"}, {f:"blah233"}) is 13
+PASS foo({f:"blah768"}, {f:"blah232"}) is [14, false]
+PASS bar({f:"blah768"}, {f:"blah232"}) is 13
+PASS foo({f:"blah769"}, {f:"blah231"}) is [14, false]
+PASS bar({f:"blah769"}, {f:"blah231"}) is 13
+PASS foo({f:"blah770"}, {f:"blah230"}) is [14, false]
+PASS bar({f:"blah770"}, {f:"blah230"}) is 13
+PASS foo({f:"blah771"}, {f:"blah229"}) is [14, false]
+PASS bar({f:"blah771"}, {f:"blah229"}) is 13
+PASS foo({f:"blah772"}, {f:"blah228"}) is [14, false]
+PASS bar({f:"blah772"}, {f:"blah228"}) is 13
+PASS foo({f:"blah773"}, {f:"blah227"}) is [14, false]
+PASS bar({f:"blah773"}, {f:"blah227"}) is 13
+PASS foo({f:"blah774"}, {f:"blah226"}) is [14, false]
+PASS bar({f:"blah774"}, {f:"blah226"}) is 13
+PASS foo({f:"blah775"}, {f:"blah225"}) is [14, false]
+PASS bar({f:"blah775"}, {f:"blah225"}) is 13
+PASS foo({f:"blah776"}, {f:"blah224"}) is [14, false]
+PASS bar({f:"blah776"}, {f:"blah224"}) is 13
+PASS foo({f:"blah777"}, {f:"blah223"}) is [14, false]
+PASS bar({f:"blah777"}, {f:"blah223"}) is 13
+PASS foo({f:"blah778"}, {f:"blah222"}) is [14, false]
+PASS bar({f:"blah778"}, {f:"blah222"}) is 13
+PASS foo({f:"blah779"}, {f:"blah221"}) is [14, false]
+PASS bar({f:"blah779"}, {f:"blah221"}) is 13
+PASS foo({f:"blah780"}, {f:"blah220"}) is [14, false]
+PASS bar({f:"blah780"}, {f:"blah220"}) is 13
+PASS foo({f:"blah781"}, {f:"blah219"}) is [14, false]
+PASS bar({f:"blah781"}, {f:"blah219"}) is 13
+PASS foo({f:"blah782"}, {f:"blah218"}) is [14, false]
+PASS bar({f:"blah782"}, {f:"blah218"}) is 13
+PASS foo({f:"blah783"}, {f:"blah217"}) is [14, false]
+PASS bar({f:"blah783"}, {f:"blah217"}) is 13
+PASS foo({f:"blah784"}, {f:"blah216"}) is [14, false]
+PASS bar({f:"blah784"}, {f:"blah216"}) is 13
+PASS foo({f:"blah785"}, {f:"blah215"}) is [14, false]
+PASS bar({f:"blah785"}, {f:"blah215"}) is 13
+PASS foo({f:"blah786"}, {f:"blah214"}) is [14, false]
+PASS bar({f:"blah786"}, {f:"blah214"}) is 13
+PASS foo({f:"blah787"}, {f:"blah213"}) is [14, false]
+PASS bar({f:"blah787"}, {f:"blah213"}) is 13
+PASS foo({f:"blah788"}, {f:"blah212"}) is [14, false]
+PASS bar({f:"blah788"}, {f:"blah212"}) is 13
+PASS foo({f:"blah789"}, {f:"blah211"}) is [14, false]
+PASS bar({f:"blah789"}, {f:"blah211"}) is 13
+PASS foo({f:"blah790"}, {f:"blah210"}) is [14, false]
+PASS bar({f:"blah790"}, {f:"blah210"}) is 13
+PASS foo({f:"blah791"}, {f:"blah209"}) is [14, false]
+PASS bar({f:"blah791"}, {f:"blah209"}) is 13
+PASS foo({f:"blah792"}, {f:"blah208"}) is [14, false]
+PASS bar({f:"blah792"}, {f:"blah208"}) is 13
+PASS foo({f:"blah793"}, {f:"blah207"}) is [14, false]
+PASS bar({f:"blah793"}, {f:"blah207"}) is 13
+PASS foo({f:"blah794"}, {f:"blah206"}) is [14, false]
+PASS bar({f:"blah794"}, {f:"blah206"}) is 13
+PASS foo({f:"blah795"}, {f:"blah205"}) is [14, false]
+PASS bar({f:"blah795"}, {f:"blah205"}) is 13
+PASS foo({f:"blah796"}, {f:"blah204"}) is [14, false]
+PASS bar({f:"blah796"}, {f:"blah204"}) is 13
+PASS foo({f:"blah797"}, {f:"blah203"}) is [14, false]
+PASS bar({f:"blah797"}, {f:"blah203"}) is 13
+PASS foo({f:"blah798"}, {f:"blah202"}) is [14, false]
+PASS bar({f:"blah798"}, {f:"blah202"}) is 13
+PASS foo({f:"blah799"}, {f:"blah201"}) is [14, false]
+PASS bar({f:"blah799"}, {f:"blah201"}) is 13
+PASS foo({f:"blah800"}, {f:"blah200"}) is [14, false]
+PASS bar({f:"blah800"}, {f:"blah200"}) is 13
+PASS foo({f:"blah801"}, {f:"blah199"}) is [14, false]
+PASS bar({f:"blah801"}, {f:"blah199"}) is 13
+PASS foo({f:"blah802"}, {f:"blah198"}) is [14, false]
+PASS bar({f:"blah802"}, {f:"blah198"}) is 13
+PASS foo({f:"blah803"}, {f:"blah197"}) is [14, false]
+PASS bar({f:"blah803"}, {f:"blah197"}) is 13
+PASS foo({f:"blah804"}, {f:"blah196"}) is [14, false]
+PASS bar({f:"blah804"}, {f:"blah196"}) is 13
+PASS foo({f:"blah805"}, {f:"blah195"}) is [14, false]
+PASS bar({f:"blah805"}, {f:"blah195"}) is 13
+PASS foo({f:"blah806"}, {f:"blah194"}) is [14, false]
+PASS bar({f:"blah806"}, {f:"blah194"}) is 13
+PASS foo({f:"blah807"}, {f:"blah193"}) is [14, false]
+PASS bar({f:"blah807"}, {f:"blah193"}) is 13
+PASS foo({f:"blah808"}, {f:"blah192"}) is [14, false]
+PASS bar({f:"blah808"}, {f:"blah192"}) is 13
+PASS foo({f:"blah809"}, {f:"blah191"}) is [14, false]
+PASS bar({f:"blah809"}, {f:"blah191"}) is 13
+PASS foo({f:"blah810"}, {f:"blah190"}) is [14, false]
+PASS bar({f:"blah810"}, {f:"blah190"}) is 13
+PASS foo({f:"blah811"}, {f:"blah189"}) is [14, false]
+PASS bar({f:"blah811"}, {f:"blah189"}) is 13
+PASS foo({f:"blah812"}, {f:"blah188"}) is [14, false]
+PASS bar({f:"blah812"}, {f:"blah188"}) is 13
+PASS foo({f:"blah813"}, {f:"blah187"}) is [14, false]
+PASS bar({f:"blah813"}, {f:"blah187"}) is 13
+PASS foo({f:"blah814"}, {f:"blah186"}) is [14, false]
+PASS bar({f:"blah814"}, {f:"blah186"}) is 13
+PASS foo({f:"blah815"}, {f:"blah185"}) is [14, false]
+PASS bar({f:"blah815"}, {f:"blah185"}) is 13
+PASS foo({f:"blah816"}, {f:"blah184"}) is [14, false]
+PASS bar({f:"blah816"}, {f:"blah184"}) is 13
+PASS foo({f:"blah817"}, {f:"blah183"}) is [14, false]
+PASS bar({f:"blah817"}, {f:"blah183"}) is 13
+PASS foo({f:"blah818"}, {f:"blah182"}) is [14, false]
+PASS bar({f:"blah818"}, {f:"blah182"}) is 13
+PASS foo({f:"blah819"}, {f:"blah181"}) is [14, false]
+PASS bar({f:"blah819"}, {f:"blah181"}) is 13
+PASS foo({f:"blah820"}, {f:"blah180"}) is [14, false]
+PASS bar({f:"blah820"}, {f:"blah180"}) is 13
+PASS foo({f:"blah821"}, {f:"blah179"}) is [14, false]
+PASS bar({f:"blah821"}, {f:"blah179"}) is 13
+PASS foo({f:"blah822"}, {f:"blah178"}) is [14, false]
+PASS bar({f:"blah822"}, {f:"blah178"}) is 13
+PASS foo({f:"blah823"}, {f:"blah177"}) is [14, false]
+PASS bar({f:"blah823"}, {f:"blah177"}) is 13
+PASS foo({f:"blah824"}, {f:"blah176"}) is [14, false]
+PASS bar({f:"blah824"}, {f:"blah176"}) is 13
+PASS foo({f:"blah825"}, {f:"blah175"}) is [14, false]
+PASS bar({f:"blah825"}, {f:"blah175"}) is 13
+PASS foo({f:"blah826"}, {f:"blah174"}) is [14, false]
+PASS bar({f:"blah826"}, {f:"blah174"}) is 13
+PASS foo({f:"blah827"}, {f:"blah173"}) is [14, false]
+PASS bar({f:"blah827"}, {f:"blah173"}) is 13
+PASS foo({f:"blah828"}, {f:"blah172"}) is [14, false]
+PASS bar({f:"blah828"}, {f:"blah172"}) is 13
+PASS foo({f:"blah829"}, {f:"blah171"}) is [14, false]
+PASS bar({f:"blah829"}, {f:"blah171"}) is 13
+PASS foo({f:"blah830"}, {f:"blah170"}) is [14, false]
+PASS bar({f:"blah830"}, {f:"blah170"}) is 13
+PASS foo({f:"blah831"}, {f:"blah169"}) is [14, false]
+PASS bar({f:"blah831"}, {f:"blah169"}) is 13
+PASS foo({f:"blah832"}, {f:"blah168"}) is [14, false]
+PASS bar({f:"blah832"}, {f:"blah168"}) is 13
+PASS foo({f:"blah833"}, {f:"blah167"}) is [14, false]
+PASS bar({f:"blah833"}, {f:"blah167"}) is 13
+PASS foo({f:"blah834"}, {f:"blah166"}) is [14, false]
+PASS bar({f:"blah834"}, {f:"blah166"}) is 13
+PASS foo({f:"blah835"}, {f:"blah165"}) is [14, false]
+PASS bar({f:"blah835"}, {f:"blah165"}) is 13
+PASS foo({f:"blah836"}, {f:"blah164"}) is [14, false]
+PASS bar({f:"blah836"}, {f:"blah164"}) is 13
+PASS foo({f:"blah837"}, {f:"blah163"}) is [14, false]
+PASS bar({f:"blah837"}, {f:"blah163"}) is 13
+PASS foo({f:"blah838"}, {f:"blah162"}) is [14, false]
+PASS bar({f:"blah838"}, {f:"blah162"}) is 13
+PASS foo({f:"blah839"}, {f:"blah161"}) is [14, false]
+PASS bar({f:"blah839"}, {f:"blah161"}) is 13
+PASS foo({f:"blah840"}, {f:"blah160"}) is [14, false]
+PASS bar({f:"blah840"}, {f:"blah160"}) is 13
+PASS foo({f:"blah841"}, {f:"blah159"}) is [14, false]
+PASS bar({f:"blah841"}, {f:"blah159"}) is 13
+PASS foo({f:"blah842"}, {f:"blah158"}) is [14, false]
+PASS bar({f:"blah842"}, {f:"blah158"}) is 13
+PASS foo({f:"blah843"}, {f:"blah157"}) is [14, false]
+PASS bar({f:"blah843"}, {f:"blah157"}) is 13
+PASS foo({f:"blah844"}, {f:"blah156"}) is [14, false]
+PASS bar({f:"blah844"}, {f:"blah156"}) is 13
+PASS foo({f:"blah845"}, {f:"blah155"}) is [14, false]
+PASS bar({f:"blah845"}, {f:"blah155"}) is 13
+PASS foo({f:"blah846"}, {f:"blah154"}) is [14, false]
+PASS bar({f:"blah846"}, {f:"blah154"}) is 13
+PASS foo({f:"blah847"}, {f:"blah153"}) is [14, false]
+PASS bar({f:"blah847"}, {f:"blah153"}) is 13
+PASS foo({f:"blah848"}, {f:"blah152"}) is [14, false]
+PASS bar({f:"blah848"}, {f:"blah152"}) is 13
+PASS foo({f:"blah849"}, {f:"blah151"}) is [14, false]
+PASS bar({f:"blah849"}, {f:"blah151"}) is 13
+PASS foo({f:"blah850"}, {f:"blah150"}) is [14, false]
+PASS bar({f:"blah850"}, {f:"blah150"}) is 13
+PASS foo({f:"blah851"}, {f:"blah149"}) is [14, false]
+PASS bar({f:"blah851"}, {f:"blah149"}) is 13
+PASS foo({f:"blah852"}, {f:"blah148"}) is [14, false]
+PASS bar({f:"blah852"}, {f:"blah148"}) is 13
+PASS foo({f:"blah853"}, {f:"blah147"}) is [14, false]
+PASS bar({f:"blah853"}, {f:"blah147"}) is 13
+PASS foo({f:"blah854"}, {f:"blah146"}) is [14, false]
+PASS bar({f:"blah854"}, {f:"blah146"}) is 13
+PASS foo({f:"blah855"}, {f:"blah145"}) is [14, false]
+PASS bar({f:"blah855"}, {f:"blah145"}) is 13
+PASS foo({f:"blah856"}, {f:"blah144"}) is [14, false]
+PASS bar({f:"blah856"}, {f:"blah144"}) is 13
+PASS foo({f:"blah857"}, {f:"blah143"}) is [14, false]
+PASS bar({f:"blah857"}, {f:"blah143"}) is 13
+PASS foo({f:"blah858"}, {f:"blah142"}) is [14, false]
+PASS bar({f:"blah858"}, {f:"blah142"}) is 13
+PASS foo({f:"blah859"}, {f:"blah141"}) is [14, false]
+PASS bar({f:"blah859"}, {f:"blah141"}) is 13
+PASS foo({f:"blah860"}, {f:"blah140"}) is [14, false]
+PASS bar({f:"blah860"}, {f:"blah140"}) is 13
+PASS foo({f:"blah861"}, {f:"blah139"}) is [14, false]
+PASS bar({f:"blah861"}, {f:"blah139"}) is 13
+PASS foo({f:"blah862"}, {f:"blah138"}) is [14, false]
+PASS bar({f:"blah862"}, {f:"blah138"}) is 13
+PASS foo({f:"blah863"}, {f:"blah137"}) is [14, false]
+PASS bar({f:"blah863"}, {f:"blah137"}) is 13
+PASS foo({f:"blah864"}, {f:"blah136"}) is [14, false]
+PASS bar({f:"blah864"}, {f:"blah136"}) is 13
+PASS foo({f:"blah865"}, {f:"blah135"}) is [14, false]
+PASS bar({f:"blah865"}, {f:"blah135"}) is 13
+PASS foo({f:"blah866"}, {f:"blah134"}) is [14, false]
+PASS bar({f:"blah866"}, {f:"blah134"}) is 13
+PASS foo({f:"blah867"}, {f:"blah133"}) is [14, false]
+PASS bar({f:"blah867"}, {f:"blah133"}) is 13
+PASS foo({f:"blah868"}, {f:"blah132"}) is [14, false]
+PASS bar({f:"blah868"}, {f:"blah132"}) is 13
+PASS foo({f:"blah869"}, {f:"blah131"}) is [14, false]
+PASS bar({f:"blah869"}, {f:"blah131"}) is 13
+PASS foo({f:"blah870"}, {f:"blah130"}) is [14, false]
+PASS bar({f:"blah870"}, {f:"blah130"}) is 13
+PASS foo({f:"blah871"}, {f:"blah129"}) is [14, false]
+PASS bar({f:"blah871"}, {f:"blah129"}) is 13
+PASS foo({f:"blah872"}, {f:"blah128"}) is [14, false]
+PASS bar({f:"blah872"}, {f:"blah128"}) is 13
+PASS foo({f:"blah873"}, {f:"blah127"}) is [14, false]
+PASS bar({f:"blah873"}, {f:"blah127"}) is 13
+PASS foo({f:"blah874"}, {f:"blah126"}) is [14, false]
+PASS bar({f:"blah874"}, {f:"blah126"}) is 13
+PASS foo({f:"blah875"}, {f:"blah125"}) is [14, false]
+PASS bar({f:"blah875"}, {f:"blah125"}) is 13
+PASS foo({f:"blah876"}, {f:"blah124"}) is [14, false]
+PASS bar({f:"blah876"}, {f:"blah124"}) is 13
+PASS foo({f:"blah877"}, {f:"blah123"}) is [14, false]
+PASS bar({f:"blah877"}, {f:"blah123"}) is 13
+PASS foo({f:"blah878"}, {f:"blah122"}) is [14, false]
+PASS bar({f:"blah878"}, {f:"blah122"}) is 13
+PASS foo({f:"blah879"}, {f:"blah121"}) is [14, false]
+PASS bar({f:"blah879"}, {f:"blah121"}) is 13
+PASS foo({f:"blah880"}, {f:"blah120"}) is [14, false]
+PASS bar({f:"blah880"}, {f:"blah120"}) is 13
+PASS foo({f:"blah881"}, {f:"blah119"}) is [14, false]
+PASS bar({f:"blah881"}, {f:"blah119"}) is 13
+PASS foo({f:"blah882"}, {f:"blah118"}) is [14, false]
+PASS bar({f:"blah882"}, {f:"blah118"}) is 13
+PASS foo({f:"blah883"}, {f:"blah117"}) is [14, false]
+PASS bar({f:"blah883"}, {f:"blah117"}) is 13
+PASS foo({f:"blah884"}, {f:"blah116"}) is [14, false]
+PASS bar({f:"blah884"}, {f:"blah116"}) is 13
+PASS foo({f:"blah885"}, {f:"blah115"}) is [14, false]
+PASS bar({f:"blah885"}, {f:"blah115"}) is 13
+PASS foo({f:"blah886"}, {f:"blah114"}) is [14, false]
+PASS bar({f:"blah886"}, {f:"blah114"}) is 13
+PASS foo({f:"blah887"}, {f:"blah113"}) is [14, false]
+PASS bar({f:"blah887"}, {f:"blah113"}) is 13
+PASS foo({f:"blah888"}, {f:"blah112"}) is [14, false]
+PASS bar({f:"blah888"}, {f:"blah112"}) is 13
+PASS foo({f:"blah889"}, {f:"blah111"}) is [14, false]
+PASS bar({f:"blah889"}, {f:"blah111"}) is 13
+PASS foo({f:"blah890"}, {f:"blah110"}) is [14, false]
+PASS bar({f:"blah890"}, {f:"blah110"}) is 13
+PASS foo({f:"blah891"}, {f:"blah109"}) is [14, false]
+PASS bar({f:"blah891"}, {f:"blah109"}) is 13
+PASS foo({f:"blah892"}, {f:"blah108"}) is [14, false]
+PASS bar({f:"blah892"}, {f:"blah108"}) is 13
+PASS foo({f:"blah893"}, {f:"blah107"}) is [14, false]
+PASS bar({f:"blah893"}, {f:"blah107"}) is 13
+PASS foo({f:"blah894"}, {f:"blah106"}) is [14, false]
+PASS bar({f:"blah894"}, {f:"blah106"}) is 13
+PASS foo({f:"blah895"}, {f:"blah105"}) is [14, false]
+PASS bar({f:"blah895"}, {f:"blah105"}) is 13
+PASS foo({f:"blah896"}, {f:"blah104"}) is [14, false]
+PASS bar({f:"blah896"}, {f:"blah104"}) is 13
+PASS foo({f:"blah897"}, {f:"blah103"}) is [14, false]
+PASS bar({f:"blah897"}, {f:"blah103"}) is 13
+PASS foo({f:"blah898"}, {f:"blah102"}) is [14, false]
+PASS bar({f:"blah898"}, {f:"blah102"}) is 13
+PASS foo({f:"blah899"}, {f:"blah101"}) is [14, false]
+PASS bar({f:"blah899"}, {f:"blah101"}) is 13
+PASS foo({f:"blah900"}, {f:"blah100"}) is [14, false]
+PASS bar({f:"blah900"}, {f:"blah100"}) is 13
+PASS foo({f:"blah901"}, {f:"blah99"}) is [13, false]
+PASS bar({f:"blah901"}, {f:"blah99"}) is 12
+PASS foo({f:"blah902"}, {f:"blah98"}) is [13, false]
+PASS bar({f:"blah902"}, {f:"blah98"}) is 12
+PASS foo({f:"blah903"}, {f:"blah97"}) is [13, false]
+PASS bar({f:"blah903"}, {f:"blah97"}) is 12
+PASS foo({f:"blah904"}, {f:"blah96"}) is [13, false]
+PASS bar({f:"blah904"}, {f:"blah96"}) is 12
+PASS foo({f:"blah905"}, {f:"blah95"}) is [13, false]
+PASS bar({f:"blah905"}, {f:"blah95"}) is 12
+PASS foo({f:"blah906"}, {f:"blah94"}) is [13, false]
+PASS bar({f:"blah906"}, {f:"blah94"}) is 12
+PASS foo({f:"blah907"}, {f:"blah93"}) is [13, false]
+PASS bar({f:"blah907"}, {f:"blah93"}) is 12
+PASS foo({f:"blah908"}, {f:"blah92"}) is [13, false]
+PASS bar({f:"blah908"}, {f:"blah92"}) is 12
+PASS foo({f:"blah909"}, {f:"blah91"}) is [13, false]
+PASS bar({f:"blah909"}, {f:"blah91"}) is 12
+PASS foo({f:"blah910"}, {f:"blah90"}) is [13, false]
+PASS bar({f:"blah910"}, {f:"blah90"}) is 12
+PASS foo({f:"blah911"}, {f:"blah89"}) is [13, false]
+PASS bar({f:"blah911"}, {f:"blah89"}) is 12
+PASS foo({f:"blah912"}, {f:"blah88"}) is [13, false]
+PASS bar({f:"blah912"}, {f:"blah88"}) is 12
+PASS foo({f:"blah913"}, {f:"blah87"}) is [13, false]
+PASS bar({f:"blah913"}, {f:"blah87"}) is 12
+PASS foo({f:"blah914"}, {f:"blah86"}) is [13, false]
+PASS bar({f:"blah914"}, {f:"blah86"}) is 12
+PASS foo({f:"blah915"}, {f:"blah85"}) is [13, false]
+PASS bar({f:"blah915"}, {f:"blah85"}) is 12
+PASS foo({f:"blah916"}, {f:"blah84"}) is [13, false]
+PASS bar({f:"blah916"}, {f:"blah84"}) is 12
+PASS foo({f:"blah917"}, {f:"blah83"}) is [13, false]
+PASS bar({f:"blah917"}, {f:"blah83"}) is 12
+PASS foo({f:"blah918"}, {f:"blah82"}) is [13, false]
+PASS bar({f:"blah918"}, {f:"blah82"}) is 12
+PASS foo({f:"blah919"}, {f:"blah81"}) is [13, false]
+PASS bar({f:"blah919"}, {f:"blah81"}) is 12
+PASS foo({f:"blah920"}, {f:"blah80"}) is [13, false]
+PASS bar({f:"blah920"}, {f:"blah80"}) is 12
+PASS foo({f:"blah921"}, {f:"blah79"}) is [13, false]
+PASS bar({f:"blah921"}, {f:"blah79"}) is 12
+PASS foo({f:"blah922"}, {f:"blah78"}) is [13, false]
+PASS bar({f:"blah922"}, {f:"blah78"}) is 12
+PASS foo({f:"blah923"}, {f:"blah77"}) is [13, false]
+PASS bar({f:"blah923"}, {f:"blah77"}) is 12
+PASS foo({f:"blah924"}, {f:"blah76"}) is [13, false]
+PASS bar({f:"blah924"}, {f:"blah76"}) is 12
+PASS foo({f:"blah925"}, {f:"blah75"}) is [13, false]
+PASS bar({f:"blah925"}, {f:"blah75"}) is 12
+PASS foo({f:"blah926"}, {f:"blah74"}) is [13, false]
+PASS bar({f:"blah926"}, {f:"blah74"}) is 12
+PASS foo({f:"blah927"}, {f:"blah73"}) is [13, false]
+PASS bar({f:"blah927"}, {f:"blah73"}) is 12
+PASS foo({f:"blah928"}, {f:"blah72"}) is [13, false]
+PASS bar({f:"blah928"}, {f:"blah72"}) is 12
+PASS foo({f:"blah929"}, {f:"blah71"}) is [13, false]
+PASS bar({f:"blah929"}, {f:"blah71"}) is 12
+PASS foo({f:"blah930"}, {f:"blah70"}) is [13, false]
+PASS bar({f:"blah930"}, {f:"blah70"}) is 12
+PASS foo({f:"blah931"}, {f:"blah69"}) is [13, false]
+PASS bar({f:"blah931"}, {f:"blah69"}) is 12
+PASS foo({f:"blah932"}, {f:"blah68"}) is [13, false]
+PASS bar({f:"blah932"}, {f:"blah68"}) is 12
+PASS foo({f:"blah933"}, {f:"blah67"}) is [13, false]
+PASS bar({f:"blah933"}, {f:"blah67"}) is 12
+PASS foo({f:"blah934"}, {f:"blah66"}) is [13, false]
+PASS bar({f:"blah934"}, {f:"blah66"}) is 12
+PASS foo({f:"blah935"}, {f:"blah65"}) is [13, false]
+PASS bar({f:"blah935"}, {f:"blah65"}) is 12
+PASS foo({f:"blah936"}, {f:"blah64"}) is [13, false]
+PASS bar({f:"blah936"}, {f:"blah64"}) is 12
+PASS foo({f:"blah937"}, {f:"blah63"}) is [13, false]
+PASS bar({f:"blah937"}, {f:"blah63"}) is 12
+PASS foo({f:"blah938"}, {f:"blah62"}) is [13, false]
+PASS bar({f:"blah938"}, {f:"blah62"}) is 12
+PASS foo({f:"blah939"}, {f:"blah61"}) is [13, false]
+PASS bar({f:"blah939"}, {f:"blah61"}) is 12
+PASS foo({f:"blah940"}, {f:"blah60"}) is [13, false]
+PASS bar({f:"blah940"}, {f:"blah60"}) is 12
+PASS foo({f:"blah941"}, {f:"blah59"}) is [13, false]
+PASS bar({f:"blah941"}, {f:"blah59"}) is 12
+PASS foo({f:"blah942"}, {f:"blah58"}) is [13, false]
+PASS bar({f:"blah942"}, {f:"blah58"}) is 12
+PASS foo({f:"blah943"}, {f:"blah57"}) is [13, false]
+PASS bar({f:"blah943"}, {f:"blah57"}) is 12
+PASS foo({f:"blah944"}, {f:"blah56"}) is [13, false]
+PASS bar({f:"blah944"}, {f:"blah56"}) is 12
+PASS foo({f:"blah945"}, {f:"blah55"}) is [13, false]
+PASS bar({f:"blah945"}, {f:"blah55"}) is 12
+PASS foo({f:"blah946"}, {f:"blah54"}) is [13, false]
+PASS bar({f:"blah946"}, {f:"blah54"}) is 12
+PASS foo({f:"blah947"}, {f:"blah53"}) is [13, false]
+PASS bar({f:"blah947"}, {f:"blah53"}) is 12
+PASS foo({f:"blah948"}, {f:"blah52"}) is [13, false]
+PASS bar({f:"blah948"}, {f:"blah52"}) is 12
+PASS foo({f:"blah949"}, {f:"blah51"}) is [13, false]
+PASS bar({f:"blah949"}, {f:"blah51"}) is 12
+PASS foo({f:"blah950"}, {f:"blah50"}) is [13, false]
+PASS bar({f:"blah950"}, {f:"blah50"}) is 12
+PASS foo({f:"blah951"}, {f:"blah49"}) is [13, false]
+PASS bar({f:"blah951"}, {f:"blah49"}) is 12
+PASS foo({f:"blah952"}, {f:"blah48"}) is [13, false]
+PASS bar({f:"blah952"}, {f:"blah48"}) is 12
+PASS foo({f:"blah953"}, {f:"blah47"}) is [13, false]
+PASS bar({f:"blah953"}, {f:"blah47"}) is 12
+PASS foo({f:"blah954"}, {f:"blah46"}) is [13, false]
+PASS bar({f:"blah954"}, {f:"blah46"}) is 12
+PASS foo({f:"blah955"}, {f:"blah45"}) is [13, false]
+PASS bar({f:"blah955"}, {f:"blah45"}) is 12
+PASS foo({f:"blah956"}, {f:"blah44"}) is [13, false]
+PASS bar({f:"blah956"}, {f:"blah44"}) is 12
+PASS foo({f:"blah957"}, {f:"blah43"}) is [13, false]
+PASS bar({f:"blah957"}, {f:"blah43"}) is 12
+PASS foo({f:"blah958"}, {f:"blah42"}) is [13, false]
+PASS bar({f:"blah958"}, {f:"blah42"}) is 12
+PASS foo({f:"blah959"}, {f:"blah41"}) is [13, false]
+PASS bar({f:"blah959"}, {f:"blah41"}) is 12
+PASS foo({f:"blah960"}, {f:"blah40"}) is [13, false]
+PASS bar({f:"blah960"}, {f:"blah40"}) is 12
+PASS foo({f:"blah961"}, {f:"blah39"}) is [13, false]
+PASS bar({f:"blah961"}, {f:"blah39"}) is 12
+PASS foo({f:"blah962"}, {f:"blah38"}) is [13, false]
+PASS bar({f:"blah962"}, {f:"blah38"}) is 12
+PASS foo({f:"blah963"}, {f:"blah37"}) is [13, false]
+PASS bar({f:"blah963"}, {f:"blah37"}) is 12
+PASS foo({f:"blah964"}, {f:"blah36"}) is [13, false]
+PASS bar({f:"blah964"}, {f:"blah36"}) is 12
+PASS foo({f:"blah965"}, {f:"blah35"}) is [13, false]
+PASS bar({f:"blah965"}, {f:"blah35"}) is 12
+PASS foo({f:"blah966"}, {f:"blah34"}) is [13, false]
+PASS bar({f:"blah966"}, {f:"blah34"}) is 12
+PASS foo({f:"blah967"}, {f:"blah33"}) is [13, false]
+PASS bar({f:"blah967"}, {f:"blah33"}) is 12
+PASS foo({f:"blah968"}, {f:"blah32"}) is [13, false]
+PASS bar({f:"blah968"}, {f:"blah32"}) is 12
+PASS foo({f:"blah969"}, {f:"blah31"}) is [13, false]
+PASS bar({f:"blah969"}, {f:"blah31"}) is 12
+PASS foo({f:"blah970"}, {f:"blah30"}) is [13, false]
+PASS bar({f:"blah970"}, {f:"blah30"}) is 12
+PASS foo({f:"blah971"}, {f:"blah29"}) is [13, false]
+PASS bar({f:"blah971"}, {f:"blah29"}) is 12
+PASS foo({f:"blah972"}, {f:"blah28"}) is [13, false]
+PASS bar({f:"blah972"}, {f:"blah28"}) is 12
+PASS foo({f:"blah973"}, {f:"blah27"}) is [13, false]
+PASS bar({f:"blah973"}, {f:"blah27"}) is 12
+PASS foo({f:"blah974"}, {f:"blah26"}) is [13, false]
+PASS bar({f:"blah974"}, {f:"blah26"}) is 12
+PASS foo({f:"blah975"}, {f:"blah25"}) is [13, false]
+PASS bar({f:"blah975"}, {f:"blah25"}) is 12
+PASS foo({f:"blah976"}, {f:"blah24"}) is [13, false]
+PASS bar({f:"blah976"}, {f:"blah24"}) is 12
+PASS foo({f:"blah977"}, {f:"blah23"}) is [13, false]
+PASS bar({f:"blah977"}, {f:"blah23"}) is 12
+PASS foo({f:"blah978"}, {f:"blah22"}) is [13, false]
+PASS bar({f:"blah978"}, {f:"blah22"}) is 12
+PASS foo({f:"blah979"}, {f:"blah21"}) is [13, false]
+PASS bar({f:"blah979"}, {f:"blah21"}) is 12
+PASS foo({f:"blah980"}, {f:"blah20"}) is [13, false]
+PASS bar({f:"blah980"}, {f:"blah20"}) is 12
+PASS foo({f:"blah981"}, {f:"blah19"}) is [13, false]
+PASS bar({f:"blah981"}, {f:"blah19"}) is 12
+PASS foo({f:"blah982"}, {f:"blah18"}) is [13, false]
+PASS bar({f:"blah982"}, {f:"blah18"}) is 12
+PASS foo({f:"blah983"}, {f:"blah17"}) is [13, false]
+PASS bar({f:"blah983"}, {f:"blah17"}) is 12
+PASS foo({f:"blah984"}, {f:"blah16"}) is [13, false]
+PASS bar({f:"blah984"}, {f:"blah16"}) is 12
+PASS foo({f:"blah985"}, {f:"blah15"}) is [13, false]
+PASS bar({f:"blah985"}, {f:"blah15"}) is 12
+PASS foo({f:"blah986"}, {f:"blah14"}) is [13, false]
+PASS bar({f:"blah986"}, {f:"blah14"}) is 12
+PASS foo({f:"blah987"}, {f:"blah13"}) is [13, false]
+PASS bar({f:"blah987"}, {f:"blah13"}) is 12
+PASS foo({f:"blah988"}, {f:"blah12"}) is [13, false]
+PASS bar({f:"blah988"}, {f:"blah12"}) is 12
+PASS foo({f:"blah989"}, {f:"blah11"}) is [13, false]
+PASS bar({f:"blah989"}, {f:"blah11"}) is 12
+PASS foo({f:"blah990"}, {f:"blah10"}) is [13, false]
+PASS bar({f:"blah990"}, {f:"blah10"}) is 12
+PASS foo({f:"blah991"}, {f:"blah9"}) is [12, false]
+PASS bar({f:"blah991"}, {f:"blah9"}) is 11
+PASS foo({f:"blah992"}, {f:"blah8"}) is [12, false]
+PASS bar({f:"blah992"}, {f:"blah8"}) is 11
+PASS foo({f:"blah993"}, {f:"blah7"}) is [12, false]
+PASS bar({f:"blah993"}, {f:"blah7"}) is 11
+PASS foo({f:"blah994"}, {f:"blah6"}) is [12, false]
+PASS bar({f:"blah994"}, {f:"blah6"}) is 11
+PASS foo({f:"blah995"}, {f:"blah5"}) is [12, false]
+PASS bar({f:"blah995"}, {f:"blah5"}) is 11
+PASS foo({f:"blah996"}, {f:"blah4"}) is [12, false]
+PASS bar({f:"blah996"}, {f:"blah4"}) is 11
+PASS foo({f:"blah997"}, {f:"blah3"}) is [12, false]
+PASS bar({f:"blah997"}, {f:"blah3"}) is 11
+PASS foo({f:"blah998"}, {f:"blah2"}) is [12, false]
+PASS bar({f:"blah998"}, {f:"blah2"}) is 11
+PASS foo({f:"blah999"}, {f:"blah1"}) is [12, false]
+PASS bar({f:"blah999"}, {f:"blah1"}) is 11
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-string-stricteq.js b/deps/v8/test/webkit/dfg-string-stricteq.js
new file mode 100644 (file)
index 0000000..27a809a
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG does the right thing on strict equality for known strings."
+);
+
+function foo(a, b) {
+    a = a.f;
+    b = b.f;
+    var c = a.length + b.length;
+    return [c, a === b];
+}
+
+function bar(a, b) {
+    a = a.f;
+    b = b.f;
+    var c = a.length + b.length;
+    if (a === b)
+        return c + 1;
+    else
+        return c - 1;
+}
+
+for (var i = 0; i < 1000; ++i) {
+    var a = "blah" + i;
+    var b = "blah" + (1000 - i);
+    var areEqual = i == 500;
+    shouldBe("foo({f:\"" + a + "\"}, {f:\"" + b + "\"})", "[" + (a.length + b.length) + ", " + areEqual + "]");
+    shouldBe("bar({f:\"" + a + "\"}, {f:\"" + b + "\"})", "" + (areEqual ? a.length + b.length + 1 : a.length + b.length - 1));
+}
+
diff --git a/deps/v8/test/webkit/dfg-tear-off-arguments-not-activation-expected.txt b/deps/v8/test/webkit/dfg-tear-off-arguments-not-activation-expected.txt
new file mode 100644 (file)
index 0000000..cad8d56
--- /dev/null
@@ -0,0 +1,432 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests the case that a function that might create an activation has not actually created one, but has created its arguments.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-tear-off-arguments-not-activation.js b/deps/v8/test/webkit/dfg-tear-off-arguments-not-activation.js
new file mode 100644 (file)
index 0000000..d3967cc
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests the case that a function that might create an activation has not actually created one, but has created its arguments."
+);
+
+function bar() {
+    return foo.arguments;
+}
+
+function foo(p) {
+    var x = 42;
+    if (p)
+        return (function() { return x; });
+    else
+        return bar();
+}
+
+for (var i = 0; i < 200; ++i) {
+    var thingy = foo(false);
+    shouldBe("thingy.length", "1");
+    shouldBe("thingy[0]", "false");
+}
+
diff --git a/deps/v8/test/webkit/dfg-tear-off-function-dot-arguments-expected.txt b/deps/v8/test/webkit/dfg-tear-off-function-dot-arguments-expected.txt
new file mode 100644 (file)
index 0000000..ab0b59c
--- /dev/null
@@ -0,0 +1,432 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests a function that might create 'arguments' but doesn't, but does create function.arguments.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-tear-off-function-dot-arguments.js b/deps/v8/test/webkit/dfg-tear-off-function-dot-arguments.js
new file mode 100644 (file)
index 0000000..a8582bf
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests a function that might create 'arguments' but doesn't, but does create function.arguments."
+);
+
+function bar() {
+    return foo.arguments;
+}
+
+function foo(p) {
+    var x = 42;
+    if (p)
+        return arguments[0];
+    else
+        return bar();
+}
+
+for (var i = 0; i < 200; ++i) {
+    var thingy = foo(false);
+    shouldBe("thingy.length", "1");
+    shouldBe("thingy[0]", "false");
+}
+
diff --git a/deps/v8/test/webkit/dfg-to-string-bad-toString-expected.txt b/deps/v8/test/webkit/dfg-to-string-bad-toString-expected.txt
new file mode 100644 (file)
index 0000000..13ade20
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we do ToString conversions correctly when String.prototype.valueOf is not what we wanted.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-to-string-bad-toString.js b/deps/v8/test/webkit/dfg-to-string-bad-toString.js
new file mode 100644 (file)
index 0000000..70198bc
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we do ToString conversions correctly when String.prototype.valueOf is not what we wanted."
+);
+
+String.prototype.toString = function() { return 42; }
+
+function foo(a) {
+    for (var i = 0; i < 100; ++i)
+        a = new String(a);
+    return a;
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("\"\" + foo(\"hello\")", "\"42\"");
diff --git a/deps/v8/test/webkit/dfg-to-string-bad-valueOf-expected.txt b/deps/v8/test/webkit/dfg-to-string-bad-valueOf-expected.txt
new file mode 100644 (file)
index 0000000..13ade20
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we do ToString conversions correctly when String.prototype.valueOf is not what we wanted.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-to-string-bad-valueOf.js b/deps/v8/test/webkit/dfg-to-string-bad-valueOf.js
new file mode 100644 (file)
index 0000000..69e2d55
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we do ToString conversions correctly when String.prototype.valueOf is not what we wanted."
+);
+
+String.prototype.valueOf = function() { return 42; }
+
+function foo(a) {
+    for (var i = 0; i < 100; ++i)
+        a = new String(a);
+    return a;
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("\"\" + foo(\"hello\")", "\"42\"");
diff --git a/deps/v8/test/webkit/dfg-to-string-int-expected.txt b/deps/v8/test/webkit/dfg-to-string-int-expected.txt
new file mode 100644 (file)
index 0000000..afd078e
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we do ToString conversions correctly when String.prototype.valueOf is not what we wanted.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-to-string-int-or-string-expected.txt b/deps/v8/test/webkit/dfg-to-string-int-or-string-expected.txt
new file mode 100644 (file)
index 0000000..5e1e906
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we do ToString conversions correctly when String.prototype.valueOf is not what we wanted.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-to-string-int-or-string.js b/deps/v8/test/webkit/dfg-to-string-int-or-string.js
new file mode 100644 (file)
index 0000000..54fabd0
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we do ToString conversions correctly when String.prototype.valueOf is not what we wanted."
+);
+
+function foo(a) {
+    for (var i = 0; i < 100; ++i)
+        a = new String(a);
+    return a;
+}
+
+for (var i = 0; i < 1000; ++i)
+    shouldBe("\"\" + foo(i % 2 ? 42 : \"hello\")", "i % 2 ? \"42\" : \"hello\"");
diff --git a/deps/v8/test/webkit/dfg-to-string-int.js b/deps/v8/test/webkit/dfg-to-string-int.js
new file mode 100644 (file)
index 0000000..89c320f
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we do ToString conversions correctly when String.prototype.valueOf is not what we wanted."
+);
+
+function foo(a) {
+    for (var i = 0; i < 100; ++i)
+        a = new String(a);
+    return a;
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("\"\" + foo(42)", "\"42\"");
diff --git a/deps/v8/test/webkit/dfg-to-string-on-cell-expected.txt b/deps/v8/test/webkit/dfg-to-string-on-cell-expected.txt
new file mode 100644 (file)
index 0000000..c430743
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that ToString on a cell works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-to-string-on-cell.js b/deps/v8/test/webkit/dfg-to-string-on-cell.js
new file mode 100644 (file)
index 0000000..8ae7388
--- /dev/null
@@ -0,0 +1,32 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Tests that ToString on a cell works.");
+
+function foo(a, o) {
+    return [a, String(o)];
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("\"\" + foo(\"foo\", i % 2 ? \"hello\" : [1, 2, 3])", i % 2 ? "\"foo,hello\"" : "\"foo,1,2,3\"");
+
diff --git a/deps/v8/test/webkit/dfg-to-string-on-value-expected.txt b/deps/v8/test/webkit/dfg-to-string-on-value-expected.txt
new file mode 100644 (file)
index 0000000..941339e
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that ToString on a possible-non-cell value works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-to-string-on-value.js b/deps/v8/test/webkit/dfg-to-string-on-value.js
new file mode 100644 (file)
index 0000000..0c89f3b
--- /dev/null
@@ -0,0 +1,32 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Tests that ToString on a possible-non-cell value works.");
+
+function foo(a, o) {
+    return [a, String(o)];
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("\"\" + foo(\"foo\", i % 2 ? \"hello\" : 42)", i % 2 ? "\"foo,hello\"" : "\"foo,42\"");
+
diff --git a/deps/v8/test/webkit/dfg-to-string-side-effect-clobbers-toString-expected.txt b/deps/v8/test/webkit/dfg-to-string-side-effect-clobbers-toString-expected.txt
new file mode 100644 (file)
index 0000000..3a59b2f
--- /dev/null
@@ -0,0 +1,282 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens when you do ToString twice, and it has a side effect that clobbers the toString method in between the two ToStrings.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello150"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello151"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello152"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello153"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello154"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello155"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello156"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello157"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello158"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello159"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello160"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello161"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello162"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello163"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello164"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello165"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello166"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello167"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello168"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello169"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello170"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello171"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello172"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello173"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello174"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello175"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello176"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello177"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello178"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello179"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello180"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello181"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello182"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello183"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello184"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello185"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello186"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello187"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello188"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello189"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello190"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello191"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello192"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello193"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello194"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello195"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello196"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello197"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello198"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello199"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-to-string-side-effect-clobbers-toString.js b/deps/v8/test/webkit/dfg-to-string-side-effect-clobbers-toString.js
new file mode 100644 (file)
index 0000000..5facc60
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens when you do ToString twice, and it has a side effect that clobbers the toString method in between the two ToStrings."
+);
+
+function foo(s, sideEffect) {
+    var a = String(s);
+    sideEffect(s);
+    var b = String(s);
+    return a + b;
+}
+
+var count = 0;
+for (var i = 0; i < 200; ++i) {
+    var code = "(function(s) { " + (i < 150 ? "return " + i + ";" : "count++; debug(\"hi!\"); s.toString = function() { return " + i + "; };") + " })";
+    var sideEffect = eval(code);
+    shouldBe("foo(new String(\"hello\"), sideEffect)", i < 150 ? "\"hellohello\"" : "\"hello" + i + "\"");
+}
diff --git a/deps/v8/test/webkit/dfg-to-string-side-effect-expected.txt b/deps/v8/test/webkit/dfg-to-string-side-effect-expected.txt
new file mode 100644 (file)
index 0000000..4be3e39
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we do ToString conversions correctly when String.prototype.valueOf is not what we wanted.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-to-string-side-effect.js b/deps/v8/test/webkit/dfg-to-string-side-effect.js
new file mode 100644 (file)
index 0000000..9b841e3
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we do ToString conversions correctly when String.prototype.valueOf is not what we wanted."
+);
+
+function foo(a) {
+    for (var i = 0; i < 100; ++i)
+        a = new String(a);
+    return a;
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("\"\" + foo({toString:function() { debug(\"hello\"); return 42; }})", "\"42\"");
diff --git a/deps/v8/test/webkit/dfg-to-string-toString-becomes-bad-expected.txt b/deps/v8/test/webkit/dfg-to-string-toString-becomes-bad-expected.txt
new file mode 100644 (file)
index 0000000..b97af50
--- /dev/null
@@ -0,0 +1,182 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we do ToString conversions correctly when String.prototype.valueOf is initially fine but then gets clobbered.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-to-string-toString-becomes-bad-with-check-structure-expected.txt b/deps/v8/test/webkit/dfg-to-string-toString-becomes-bad-with-check-structure-expected.txt
new file mode 100644 (file)
index 0000000..af5e73e
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG checks that the toString method didn't become bad even if the StringObject already had a CheckStructure.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "42"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-to-string-toString-becomes-bad-with-check-structure.js b/deps/v8/test/webkit/dfg-to-string-toString-becomes-bad-with-check-structure.js
new file mode 100644 (file)
index 0000000..e37fa99
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG checks that the toString method didn't become bad even if the StringObject already had a CheckStructure."
+);
+
+function foo() {
+    return String(this);
+}
+
+for (var i = 0; i < 100; ++i) {
+    if (i == 99)
+        String.prototype.toString = function() { return 42; }
+    shouldBe("foo.call(new String(\"foo\"))", i >= 99 ? "\"42\"" : "\"foo\"");
+}
+
diff --git a/deps/v8/test/webkit/dfg-to-string-toString-becomes-bad-with-dictionary-string-prototype-expected.txt b/deps/v8/test/webkit/dfg-to-string-toString-becomes-bad-with-dictionary-string-prototype-expected.txt
new file mode 100644 (file)
index 0000000..3e11db9
--- /dev/null
@@ -0,0 +1,182 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we do ToString conversions correctly when String.prototype.valueOf is initially fine but then gets clobbered, and was a dictionary all along.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-to-string-toString-becomes-bad-with-dictionary-string-prototype.js b/deps/v8/test/webkit/dfg-to-string-toString-becomes-bad-with-dictionary-string-prototype.js
new file mode 100644 (file)
index 0000000..6db3467
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we do ToString conversions correctly when String.prototype.valueOf is initially fine but then gets clobbered, and was a dictionary all along."
+);
+
+delete String.prototype.trim;
+delete String.prototype.toLowerCase;
+delete String.prototype.toLocaleUpperCase;
+
+for (var i = 0; i < 1000; ++i)
+    String.prototype["a" + i] = 42;
+
+function foo(a) {
+    for (var i = 0; i < 100; ++i)
+        a = new String(a);
+    return a;
+}
+
+var expected = "\"hello\"";
+for (var i = 0; i < 150; ++i) {
+    if (i == 100) {
+        String.prototype.toString = function() { return 42; }
+        expected = "\"42\"";
+    }
+    shouldBe("\"\" + foo(\"hello\")", expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-to-string-toString-becomes-bad.js b/deps/v8/test/webkit/dfg-to-string-toString-becomes-bad.js
new file mode 100644 (file)
index 0000000..d15917a
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we do ToString conversions correctly when String.prototype.valueOf is initially fine but then gets clobbered."
+);
+
+function foo(a) {
+    for (var i = 0; i < 100; ++i)
+        a = new String(a);
+    return a;
+}
+
+var expected = "\"hello\"";
+for (var i = 0; i < 150; ++i) {
+    if (i == 100) {
+        String.prototype.toString = function() { return 42; }
+        expected = "\"42\"";
+    }
+    shouldBe("\"\" + foo(\"hello\")", expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-to-string-toString-in-string-expected.txt b/deps/v8/test/webkit/dfg-to-string-toString-in-string-expected.txt
new file mode 100644 (file)
index 0000000..8529ae8
--- /dev/null
@@ -0,0 +1,182 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we do ToString conversions correctly when String.prototype.valueOf is fine but we define our own on the String object itself.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-to-string-toString-in-string.js b/deps/v8/test/webkit/dfg-to-string-toString-in-string.js
new file mode 100644 (file)
index 0000000..17f5794
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we do ToString conversions correctly when String.prototype.valueOf is fine but we define our own on the String object itself."
+);
+
+function foo(a) {
+    for (var i = 0; i < 100; ++i)
+        a = new String(a);
+    return a;
+}
+
+var argument = new String("hello");
+var expected = "\"hello\"";
+for (var i = 0; i < 150; ++i) {
+    if (i == 100) {
+        argument = new String("hello");
+        argument.toString = function() { return 42; }
+        expected = "\"42\"";
+    }
+    shouldBe("\"\" + foo(argument)", expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-to-string-valueOf-in-string-expected.txt b/deps/v8/test/webkit/dfg-to-string-valueOf-in-string-expected.txt
new file mode 100644 (file)
index 0000000..1e64890
--- /dev/null
@@ -0,0 +1,182 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we do ToString conversions correctly when String.prototype.valueOf is fine but we define our own on the String object itself.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-to-string-valueOf-in-string.js b/deps/v8/test/webkit/dfg-to-string-valueOf-in-string.js
new file mode 100644 (file)
index 0000000..e591bf7
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we do ToString conversions correctly when String.prototype.valueOf is fine but we define our own on the String object itself."
+);
+
+function foo(a) {
+    for (var i = 0; i < 100; ++i)
+        a = new String(a);
+    return a;
+}
+
+var argument = new String("hello");
+for (var i = 0; i < 150; ++i) {
+    if (i == 100) {
+        argument = new String("hello");
+        argument.valueOf = function() { return 42; }
+    }
+    shouldBe("\"\" + foo(argument)", "\"hello\"");
+}
+
diff --git a/deps/v8/test/webkit/dfg-uint32-to-number-expected.txt b/deps/v8/test/webkit/dfg-uint32-to-number-expected.txt
new file mode 100644 (file)
index 0000000..f3dc5cc
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that if the DFG fails to convert a uint32 to a number, it will OSR exit correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is 124500
+PASS foo({f:2147483648}, {f:32}) is 2147483648
+PASS foo({f:2147483648}, {f:31}) is 1
+PASS foo({f:2147483648}, {f:30}) is 2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-uint32-to-number-in-middle-of-copy-propagation-expected.txt b/deps/v8/test/webkit/dfg-uint32-to-number-in-middle-of-copy-propagation-expected.txt
new file mode 100644 (file)
index 0000000..b7de585
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that UInt32ToNumber and OSR exit are aware of copy propagation and correctly recover both versions of a variable that was subject to a UInt32ToNumber cast.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-uint32-to-number-in-middle-of-copy-propagation.js b/deps/v8/test/webkit/dfg-uint32-to-number-in-middle-of-copy-propagation.js
new file mode 100644 (file)
index 0000000..7705f03
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that UInt32ToNumber and OSR exit are aware of copy propagation and correctly recover both versions of a variable that was subject to a UInt32ToNumber cast."
+);
+
+function foo(b) {
+    var a = b | 0;
+    var x, y;
+    x = a;
+    y = a >>> 0;
+    return [x, y];
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo(-1)", "[-1, 4294967295]");
+
diff --git a/deps/v8/test/webkit/dfg-uint32-to-number-on-captured-variable-expected.txt b/deps/v8/test/webkit/dfg-uint32-to-number-on-captured-variable-expected.txt
new file mode 100644 (file)
index 0000000..8834bdd
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that storing the result of a uint32 to number conversion into a captured variable does not crash the compiler.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(0)() is 0
+PASS foo(1)() is 1
+PASS foo(2)() is 2
+PASS foo(3)() is 3
+PASS foo(4)() is 4
+PASS foo(5)() is 5
+PASS foo(6)() is 6
+PASS foo(7)() is 7
+PASS foo(8)() is 8
+PASS foo(9)() is 9
+PASS foo(10)() is 10
+PASS foo(11)() is 11
+PASS foo(12)() is 12
+PASS foo(13)() is 13
+PASS foo(14)() is 14
+PASS foo(15)() is 15
+PASS foo(16)() is 16
+PASS foo(17)() is 17
+PASS foo(18)() is 18
+PASS foo(19)() is 19
+PASS foo(20)() is 20
+PASS foo(21)() is 21
+PASS foo(22)() is 22
+PASS foo(23)() is 23
+PASS foo(24)() is 24
+PASS foo(25)() is 25
+PASS foo(26)() is 26
+PASS foo(27)() is 27
+PASS foo(28)() is 28
+PASS foo(29)() is 29
+PASS foo(30)() is 30
+PASS foo(31)() is 31
+PASS foo(32)() is 32
+PASS foo(33)() is 33
+PASS foo(34)() is 34
+PASS foo(35)() is 35
+PASS foo(36)() is 36
+PASS foo(37)() is 37
+PASS foo(38)() is 38
+PASS foo(39)() is 39
+PASS foo(40)() is 40
+PASS foo(41)() is 41
+PASS foo(42)() is 42
+PASS foo(43)() is 43
+PASS foo(44)() is 44
+PASS foo(45)() is 45
+PASS foo(46)() is 46
+PASS foo(47)() is 47
+PASS foo(48)() is 48
+PASS foo(49)() is 49
+PASS foo(50)() is 50
+PASS foo(51)() is 51
+PASS foo(52)() is 52
+PASS foo(53)() is 53
+PASS foo(54)() is 54
+PASS foo(55)() is 55
+PASS foo(56)() is 56
+PASS foo(57)() is 57
+PASS foo(58)() is 58
+PASS foo(59)() is 59
+PASS foo(60)() is 60
+PASS foo(61)() is 61
+PASS foo(62)() is 62
+PASS foo(63)() is 63
+PASS foo(64)() is 64
+PASS foo(65)() is 65
+PASS foo(66)() is 66
+PASS foo(67)() is 67
+PASS foo(68)() is 68
+PASS foo(69)() is 69
+PASS foo(70)() is 70
+PASS foo(71)() is 71
+PASS foo(72)() is 72
+PASS foo(73)() is 73
+PASS foo(74)() is 74
+PASS foo(75)() is 75
+PASS foo(76)() is 76
+PASS foo(77)() is 77
+PASS foo(78)() is 78
+PASS foo(79)() is 79
+PASS foo(80)() is 80
+PASS foo(81)() is 81
+PASS foo(82)() is 82
+PASS foo(83)() is 83
+PASS foo(84)() is 84
+PASS foo(85)() is 85
+PASS foo(86)() is 86
+PASS foo(87)() is 87
+PASS foo(88)() is 88
+PASS foo(89)() is 89
+PASS foo(90)() is 90
+PASS foo(91)() is 91
+PASS foo(92)() is 92
+PASS foo(93)() is 93
+PASS foo(94)() is 94
+PASS foo(95)() is 95
+PASS foo(96)() is 96
+PASS foo(97)() is 97
+PASS foo(98)() is 98
+PASS foo(99)() is 99
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-uint32-to-number-on-captured-variable.js b/deps/v8/test/webkit/dfg-uint32-to-number-on-captured-variable.js
new file mode 100644 (file)
index 0000000..ec2be1d
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that storing the result of a uint32 to number conversion into a captured variable does not crash the compiler."
+);
+
+function foo(a) {
+    var x = a >>> 0;
+    return (function() {
+        return x;
+    });
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo(" + i + ")()", "" + i);
+
diff --git a/deps/v8/test/webkit/dfg-uint32-to-number-skip-then-exit-expected.txt b/deps/v8/test/webkit/dfg-uint32-to-number-skip-then-exit-expected.txt
new file mode 100644 (file)
index 0000000..855312a
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that a skipped conversion of uint32 to number does not confuse OSR exit into thinking that the conversion is dead.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(i, 1, o) is 42
+PASS foo(i, 1, o) is 42
+PASS foo(i, 1, o) is 43
+PASS foo(i, 1, o) is 43
+PASS foo(i, 1, o) is 44
+PASS foo(i, 1, o) is 44
+PASS foo(i, 1, o) is 45
+PASS foo(i, 1, o) is 45
+PASS foo(i, 1, o) is 46
+PASS foo(i, 1, o) is 46
+PASS foo(i, 1, o) is 47
+PASS foo(i, 1, o) is 47
+PASS foo(i, 1, o) is 48
+PASS foo(i, 1, o) is 48
+PASS foo(i, 1, o) is 49
+PASS foo(i, 1, o) is 49
+PASS foo(i, 1, o) is 50
+PASS foo(i, 1, o) is 50
+PASS foo(i, 1, o) is 51
+PASS foo(i, 1, o) is 51
+PASS foo(i, 1, o) is 52
+PASS foo(i, 1, o) is 52
+PASS foo(i, 1, o) is 53
+PASS foo(i, 1, o) is 53
+PASS foo(i, 1, o) is 54
+PASS foo(i, 1, o) is 54
+PASS foo(i, 1, o) is 55
+PASS foo(i, 1, o) is 55
+PASS foo(i, 1, o) is 56
+PASS foo(i, 1, o) is 56
+PASS foo(i, 1, o) is 57
+PASS foo(i, 1, o) is 57
+PASS foo(i, 1, o) is 58
+PASS foo(i, 1, o) is 58
+PASS foo(i, 1, o) is 59
+PASS foo(i, 1, o) is 59
+PASS foo(i, 1, o) is 60
+PASS foo(i, 1, o) is 60
+PASS foo(i, 1, o) is 61
+PASS foo(i, 1, o) is 61
+PASS foo(i, 1, o) is 62
+PASS foo(i, 1, o) is 62
+PASS foo(i, 1, o) is 63
+PASS foo(i, 1, o) is 63
+PASS foo(i, 1, o) is 64
+PASS foo(i, 1, o) is 64
+PASS foo(i, 1, o) is 65
+PASS foo(i, 1, o) is 65
+PASS foo(i, 1, o) is 66
+PASS foo(i, 1, o) is 66
+PASS foo(i, 1, o) is 67
+PASS foo(i, 1, o) is 67
+PASS foo(i, 1, o) is 68
+PASS foo(i, 1, o) is 68
+PASS foo(i, 1, o) is 69
+PASS foo(i, 1, o) is 69
+PASS foo(i, 1, o) is 70
+PASS foo(i, 1, o) is 70
+PASS foo(i, 1, o) is 71
+PASS foo(i, 1, o) is 71
+PASS foo(i, 1, o) is 72
+PASS foo(i, 1, o) is 72
+PASS foo(i, 1, o) is 73
+PASS foo(i, 1, o) is 73
+PASS foo(i, 1, o) is 74
+PASS foo(i, 1, o) is 74
+PASS foo(i, 1, o) is 75
+PASS foo(i, 1, o) is 75
+PASS foo(i, 1, o) is 76
+PASS foo(i, 1, o) is 76
+PASS foo(i, 1, o) is 77
+PASS foo(i, 1, o) is 77
+PASS foo(i, 1, o) is 78
+PASS foo(i, 1, o) is 78
+PASS foo(i, 1, o) is 79
+PASS foo(i, 1, o) is 79
+PASS foo(i, 1, o) is 80
+PASS foo(i, 1, o) is 80
+PASS foo(i, 1, o) is 81
+PASS foo(i, 1, o) is 81
+PASS foo(i, 1, o) is 82
+PASS foo(i, 1, o) is 82
+PASS foo(i, 1, o) is 83
+PASS foo(i, 1, o) is 83
+PASS foo(i, 1, o) is 84
+PASS foo(i, 1, o) is 84
+PASS foo(i, 1, o) is 85
+PASS foo(i, 1, o) is 85
+PASS foo(i, 1, o) is 86
+PASS foo(i, 1, o) is 86
+PASS foo(i, 1, o) is 87
+PASS foo(i, 1, o) is 87
+PASS foo(i, 1, o) is 88
+PASS foo(i, 1, o) is 88
+PASS foo(i, 1, o) is 89
+PASS foo(i, 1, o) is 89
+PASS foo(i, 1, o) is 90
+PASS foo(i, 1, o) is 90
+PASS foo(i, 1, o) is 91
+PASS foo(i, 1, o) is 91
+PASS foo(i, 1, o) is 92
+PASS foo(i, 1, o) is 92
+PASS foo(i, 1, o) is 93
+PASS foo(i, 1, o) is 93
+PASS foo(i, 1, o) is 94
+PASS foo(i, 1, o) is 94
+PASS foo(i, 1, o) is 95
+PASS foo(i, 1, o) is 95
+PASS foo(i, 1, o) is 96
+PASS foo(i, 1, o) is 96
+PASS foo(i, 1, o) is 97
+PASS foo(i, 1, o) is 97
+PASS foo(i, 1, o) is 98
+PASS foo(i, 1, o) is 98
+PASS foo(i, 1, o) is 99
+PASS foo(i, 1, o) is 99
+PASS foo(i, 1, o) is 100
+PASS foo(i, 1, o) is 100
+PASS foo(i, 1, o) is 101
+PASS foo(i, 1, o) is 101
+PASS foo(i, 1, o) is 102
+PASS foo(i, 1, o) is 102
+PASS foo(i, 1, o) is 103
+PASS foo(i, 1, o) is 103
+PASS foo(i, 1, o) is 104
+PASS foo(i, 1, o) is 104
+PASS foo(i, 1, o) is 105
+PASS foo(i, 1, o) is 105
+PASS foo(i, 1, o) is 106
+PASS foo(i, 1, o) is 106
+PASS foo(i, 1, o) is 107
+PASS foo(i, 1, o) is 107
+PASS foo(i, 1, o) is 108
+PASS foo(i, 1, o) is 108
+PASS foo(i, 1, o) is 109
+PASS foo(i, 1, o) is 109
+PASS foo(i, 1, o) is 110
+PASS foo(i, 1, o) is 110
+PASS foo(i, 1, o) is 111
+PASS foo(i, 1, o) is 111
+PASS foo(i, 1, o) is 112
+PASS foo(i, 1, o) is 112
+PASS foo(i, 1, o) is 113
+PASS foo(i, 1, o) is 113
+PASS foo(i, 1, o) is 114
+PASS foo(i, 1, o) is 114
+PASS foo(i, 1, o) is 115
+PASS foo(i, 1, o) is 115
+PASS foo(i, 1, o) is 116
+PASS foo(i, 1, o) is 116
+PASS foo(i, 1, o) is 118
+PASS foo(i, 1, o) is 118
+PASS foo(i, 1, o) is 119
+PASS foo(i, 1, o) is 119
+PASS foo(i, 1, o) is 120
+PASS foo(i, 1, o) is 120
+PASS foo(i, 1, o) is 121
+PASS foo(i, 1, o) is 121
+PASS foo(i, 1, o) is 122
+PASS foo(i, 1, o) is 122
+PASS foo(i, 1, o) is 123
+PASS foo(i, 1, o) is 123
+PASS foo(i, 1, o) is 124
+PASS foo(i, 1, o) is 124
+PASS foo(i, 1, o) is 125
+PASS foo(i, 1, o) is 125
+PASS foo(i, 1, o) is 126
+PASS foo(i, 1, o) is 126
+PASS foo(i, 1, o) is 127
+PASS foo(i, 1, o) is 127
+PASS foo(i, 1, o) is 128
+PASS foo(i, 1, o) is 128
+PASS foo(i, 1, o) is 129
+PASS foo(i, 1, o) is 129
+PASS foo(i, 1, o) is 130
+PASS foo(i, 1, o) is 130
+PASS foo(i, 1, o) is 131
+PASS foo(i, 1, o) is 131
+PASS foo(i, 1, o) is 132
+PASS foo(i, 1, o) is 132
+PASS foo(i, 1, o) is 133
+PASS foo(i, 1, o) is 133
+PASS foo(i, 1, o) is 134
+PASS foo(i, 1, o) is 134
+PASS foo(i, 1, o) is 135
+PASS foo(i, 1, o) is 135
+PASS foo(i, 1, o) is 136
+PASS foo(i, 1, o) is 136
+PASS foo(i, 1, o) is 137
+PASS foo(i, 1, o) is 137
+PASS foo(i, 1, o) is 138
+PASS foo(i, 1, o) is 138
+PASS foo(i, 1, o) is 139
+PASS foo(i, 1, o) is 139
+PASS foo(i, 1, o) is 140
+PASS foo(i, 1, o) is 140
+PASS foo(i, 1, o) is 141
+PASS foo(i, 1, o) is 141
+PASS foo(i, 1, o) is 142
+PASS foo(i, 1, o) is 142
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-uint32-to-number-skip-then-exit.js b/deps/v8/test/webkit/dfg-uint32-to-number-skip-then-exit.js
new file mode 100644 (file)
index 0000000..13029d2
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that a skipped conversion of uint32 to number does not confuse OSR exit into thinking that the conversion is dead."
+);
+
+function foo(a, b, o) {
+    var x = a >>> b;
+    return o.f + (x | 0);
+}
+
+for (var i = 0; i < 200; ++i) {
+    var o;
+    var expected;
+    if (i < 150) {
+        o = {f:42};
+        expected = 42 + ((i / 2) | 0);
+    } else {
+        o = {f:43, g:44};
+        expected = 43 + ((i / 2) | 0);
+    }
+    shouldBe("foo(i, 1, o)", "" + expected);
+}
+
diff --git a/deps/v8/test/webkit/dfg-uint32-to-number.js b/deps/v8/test/webkit/dfg-uint32-to-number.js
new file mode 100644 (file)
index 0000000..f7c11d1
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that if the DFG fails to convert a uint32 to a number, it will OSR exit correctly."
+);
+
+function foo(a,b) {
+    return a.f >>> b.f;
+}
+
+var result = 0;
+for (var i = 0; i < 1000; ++i) {
+    result += foo({f:i + 0.5}, {f:2});
+}
+
+shouldBe("result", "124500");
+
+shouldBe("foo({f:2147483648}, {f:32})", "2147483648");
+shouldBe("foo({f:2147483648}, {f:31})", "1");
+shouldBe("foo({f:2147483648}, {f:30})", "2");
+
diff --git a/deps/v8/test/webkit/dfg-uint32array-overflow-constant-expected.txt b/deps/v8/test/webkit/dfg-uint32array-overflow-constant-expected.txt
new file mode 100644 (file)
index 0000000..b965f6e
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that storing a value that is outside of the int32 range into a Uint32Array results in correct wrap-around.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-uint32array-overflow-constant.js b/deps/v8/test/webkit/dfg-uint32array-overflow-constant.js
new file mode 100644 (file)
index 0000000..1de13a3
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that storing a value that is outside of the int32 range into a Uint32Array results in correct wrap-around."
+);
+
+function foo(a) {
+    a[0] = 0x8005465c;
+}
+
+var array = new Uint32Array(1);
+
+for (var i = 0; i < 200; ++i) {
+    foo(array);
+    shouldBe("array[0]", "0x8005465c");
+}
+
diff --git a/deps/v8/test/webkit/dfg-uint8clampedarray-out-of-bounds-put-by-val-alias-expected.txt b/deps/v8/test/webkit/dfg-uint8clampedarray-out-of-bounds-put-by-val-alias-expected.txt
new file mode 100644 (file)
index 0000000..8c92cad
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that out-of-bounds stores to a Uint8ClampedArray that are aliased to out-of-bounds loads don't crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-uint8clampedarray-out-of-bounds-put-by-val-alias.js b/deps/v8/test/webkit/dfg-uint8clampedarray-out-of-bounds-put-by-val-alias.js
new file mode 100644 (file)
index 0000000..8c0974c
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that out-of-bounds stores to a Uint8ClampedArray that are aliased to out-of-bounds loads don't crash."
+);
+
+function foo(a, i, v)
+{
+    var result = a[i];
+    a[i] = v;
+    return result;
+}
+
+for (var i = 0; i < 200; ++i) {
+    var array = new Uint8ClampedArray(1);
+    shouldBe("foo(array, 100000000, 42)", "" + (void 0));
+}
diff --git a/deps/v8/test/webkit/dfg-value-to-int32-with-side-effect-expected.txt b/deps/v8/test/webkit/dfg-value-to-int32-with-side-effect-expected.txt
new file mode 100644 (file)
index 0000000..9f6e2c7
--- /dev/null
@@ -0,0 +1,233 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a side-effecting ValueToInt32 only executes once when there is an OSR exit.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS counter is 100
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-value-to-int32-with-side-effect.js b/deps/v8/test/webkit/dfg-value-to-int32-with-side-effect.js
new file mode 100644 (file)
index 0000000..d001bab
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a side-effecting ValueToInt32 only executes once when there is an OSR exit."
+);
+
+function foo(a, b) {
+    var result = a | b.f;
+    return [result, a];
+}
+
+var counter = 0;
+for (var i = 0; i < 100; ++i) {
+    var result = foo({valueOf:function() { counter++; return 1; }}, {f:i == 99 ? 5.5 : 5});
+    shouldBe("result.length", "2");
+    shouldBe("result[0]", "5");
+}
+
+shouldBe("counter", "100");
diff --git a/deps/v8/test/webkit/dfg-weak-js-constant-silent-fill-expected.txt b/deps/v8/test/webkit/dfg-weak-js-constant-silent-fill-expected.txt
new file mode 100644 (file)
index 0000000..fd54f3a
--- /dev/null
@@ -0,0 +1,3032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that DFG silent spill and fill of WeakJSConstants does not result in nonsense.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dfg-weak-js-constant-silent-fill.js b/deps/v8/test/webkit/dfg-weak-js-constant-silent-fill.js
new file mode 100644 (file)
index 0000000..fa06a90
--- /dev/null
@@ -0,0 +1,48 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that DFG silent spill and fill of WeakJSConstants does not result in nonsense."
+);
+
+function foo(a, b, c, d)
+{
+    a.f = 42; // WeakJSConstants corresponding to the o.f transition get created here.
+    var x = !d; // Silent spilling and filling happens here.
+    b.f = x; // The WeakJSConstants get reused here.
+    var y = !d; // Silent spilling and filling happens here.
+    c.f = y; // The WeakJSConstants get reused here.
+}
+
+var Empty = "";
+
+for (var i = 0; i < 1000; ++i) {
+    var o1 = new Object();
+    var o2 = new Object();
+    var o3 = new Object();
+    eval(Empty + "foo(o1, o2, o3, \"stuff\")");
+    shouldBe("o1.f", "42");
+    shouldBe("o2.f", "false");
+    shouldBe("o3.f", "false");
+}
+
diff --git a/deps/v8/test/webkit/dictionary-no-cache-expected.txt b/deps/v8/test/webkit/dictionary-no-cache-expected.txt
new file mode 100644 (file)
index 0000000..b50a56d
--- /dev/null
@@ -0,0 +1,39 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure that we handle caching of prototype chains containing dictionaries.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foundNewPrototypeProperty is true
+PASS foundRemovedPrototypeProperty is false
+PASS calledNewPrototypeSetter is true
+PASS getTestProperty(test4) is "on prototype"
+PASS getTestProperty(test4) is "on self"
+PASS getTestProperty(test5) is "on prototype's prototype"
+PASS getTestProperty(test5) is "on self"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dictionary-no-cache.js b/deps/v8/test/webkit/dictionary-no-cache.js
new file mode 100644 (file)
index 0000000..cb71f35
--- /dev/null
@@ -0,0 +1,112 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure that we handle caching of prototype chains containing dictionaries.");
+
+var Test = function(){};
+
+var methodCount = 65;
+
+for (var i = 0; i < methodCount; i++){
+    Test.prototype['myMethod' + i] = function(){};
+}
+
+var test1 = new Test();
+
+for (var k in test1);
+
+Test.prototype.myAdditionalMethod = function(){};
+var test2 = new Test();
+var j = k;
+var foundNewPrototypeProperty = false;
+for (var k in test2){
+    if ("myAdditionalMethod" == k) foundNewPrototypeProperty = true;
+}
+shouldBeTrue('foundNewPrototypeProperty');
+
+var Test = function(){};
+for (var i = 0; i < methodCount; i++){
+    Test.prototype['myMethod' + i] = function(){};
+}
+var test1 = new Test();
+
+for (var k in test1);
+
+delete (Test.prototype)[k]
+var test2 = new Test();
+var j = k;
+var foundRemovedPrototypeProperty = false;
+for (var k in test2){
+    if (j == k) foundRemovedPrototypeProperty = true;
+}
+shouldBeFalse("foundRemovedPrototypeProperty");
+
+var Test = function(){};
+for (var i = 0; i < methodCount; i++){
+    Test.prototype['myMethod' + i] = function(){};
+}
+
+function update(test) {
+    test.newProperty = true;
+}
+var test1 = new Test();
+update(test1);
+
+var test2 = new Test();
+update(test2);
+
+var test3 = new Test();
+update(test3);
+var calledNewPrototypeSetter = false;
+Test.prototype.__defineSetter__("newProperty", function(){ calledNewPrototypeSetter = true; });
+var test4 = new Test();
+update(test4);
+shouldBeTrue('calledNewPrototypeSetter');
+
+var test4 = {__proto__:{prop:"on prototype"}};
+for (var i = 0; i < 200; i++)
+    test4[i]=[i];
+
+var test5 = {__proto__:{__proto__:{prop:"on prototype's prototype"}}};
+for (var i = 0; i < 200; i++)
+    test5[i]=[i];
+
+getTestProperty = function(o) {
+    return o.prop;
+}
+
+getTestProperty(test4);
+getTestProperty(test4);
+shouldBe("getTestProperty(test4)", '"on prototype"');
+test4.prop = "on self";
+shouldBe("getTestProperty(test4)", '"on self"');
+
+getTestProperty = function(o) {
+    return o.prop;
+}
+
+getTestProperty(test5);
+getTestProperty(test5);
+shouldBe("getTestProperty(test5)", '"on prototype\'s prototype"');
+test5.prop = "on self";
+shouldBe("getTestProperty(test5)", '"on self"');
diff --git a/deps/v8/test/webkit/dictionary-prototype-caching-expected.txt b/deps/v8/test/webkit/dictionary-prototype-caching-expected.txt
new file mode 100644 (file)
index 0000000..af01bb6
--- /dev/null
@@ -0,0 +1,39 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure correct behaviour of prototype caching with dictionary prototypes
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS protoTest(o) is 'PASS'
+PASS protoTest(o) is undefined.
+PASS protoKeys is [1,2,3]
+PASS protoKeys is [1,2,3]
+PASS testFunction(subclass1) is true
+PASS testFunction(subclass2) is true
+PASS testFunction(subclass2) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/dictionary-prototype-caching.js b/deps/v8/test/webkit/dictionary-prototype-caching.js
new file mode 100644 (file)
index 0000000..371cde8
--- /dev/null
@@ -0,0 +1,95 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure correct behaviour of prototype caching with dictionary prototypes");
+
+function protoTest(o) {
+    return o.protoProp;
+}
+
+var proto = {protoProp: "PASS", propToRemove: "foo"};
+var o = { __proto__: proto };
+
+delete proto.propToRemove;
+
+// Prototype lookup caching will attempt to convert proto back to an ordinary structure
+protoTest(o);
+protoTest(o);
+protoTest(o);
+shouldBe("protoTest(o)", "'PASS'");
+delete proto.protoProp;
+proto.fakeProtoProp = "FAIL";
+shouldBeUndefined("protoTest(o)");
+
+function protoTest2(o) {
+    return o.b;
+}
+
+var proto = {a:1, b:"meh", c:2};
+var o = { __proto__: proto };
+
+delete proto.b;
+proto.d = 3;
+protoTest2(o);
+protoTest2(o);
+protoTest2(o);
+var protoKeys = [];
+for (var i in proto)
+    protoKeys.push(proto[i]);
+
+shouldBe("protoKeys", "[1,2,3]");
+
+function protoTest3(o) {
+    return o.b;
+}
+
+var proto = {a:1, b:"meh", c:2};
+var o = { __proto__: proto };
+
+delete proto.b;
+protoTest2(o);
+protoTest2(o);
+protoTest2(o);
+proto.d = 3;
+var protoKeys = [];
+for (var i in proto)
+    protoKeys.push(proto[i]);
+
+shouldBe("protoKeys", "[1,2,3]");
+
+function testFunction(o) {
+    return o.test;
+}
+
+var proto = { test: true };
+var subclass1 = { __proto__: proto };
+var subclass2 = { __proto__: proto };
+for (var i = 0; i < 500; i++)
+    subclass2["a"+i]="a"+i;
+
+testFunction(subclass1);
+shouldBeTrue("testFunction(subclass1)");
+shouldBeTrue("testFunction(subclass2)");
+proto.test = false
+subclass2.test = true;
+shouldBeTrue("testFunction(subclass2)");
diff --git a/deps/v8/test/webkit/do-while-semicolon-expected.txt b/deps/v8/test/webkit/do-while-semicolon-expected.txt
new file mode 100644 (file)
index 0000000..065aba0
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that toString() round-trip on a function that has do..while in JavaScript does not insert extra semicolon.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS ueuf1 is uf1
+PASS ueuf2 is uf2
+PASS ueuf3 is uf3
+PASS ueuf4 is uf4
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/do-while-semicolon.js b/deps/v8/test/webkit/do-while-semicolon.js
new file mode 100644 (file)
index 0000000..cd7cf4c
--- /dev/null
@@ -0,0 +1,67 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that toString() round-trip on a function that has do..while in JavaScript does not insert extra semicolon."
+);
+
+function f1() {
+    do {} while(0);
+}
+
+function f2() {
+    do {} while(0)
+}
+
+function f3() {
+    do {} while(0)   ;
+}
+
+function f4() {
+    do {} while(0)  /*empty*/ ;
+}
+
+
+
+if (typeof uneval == "undefined")
+    uneval = function(x) { return '(' + x.toString()+ ')'; }
+
+
+uf1 = uneval(f1);
+ueuf1 = uneval(eval(uneval(f1)));
+
+uf2 = uneval(f2);
+ueuf2 = uneval(eval(uneval(f2)));
+
+uf3 = uneval(f3);
+ueuf3 = uneval(eval(uneval(f3)));
+
+uf4 = uneval(f4);
+ueuf4 = uneval(eval(uneval(f4)));
+
+
+
+shouldBe("ueuf1", "uf1");
+shouldBe("ueuf2", "uf2");
+shouldBe("ueuf3", "uf3");
+shouldBe("ueuf4", "uf4");
diff --git a/deps/v8/test/webkit/duplicate-param-crash-expected.txt b/deps/v8/test/webkit/duplicate-param-crash-expected.txt
new file mode 100644 (file)
index 0000000..083e6f0
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests to ensure that activations are built correctly in the face of duplicate parameter names and do not cause crashes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS test1("success")() is "success"
+PASS test2("success", "success", "success", "success", "success", "success", "success")() is "success"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/duplicate-param-crash.js b/deps/v8/test/webkit/duplicate-param-crash.js
new file mode 100644 (file)
index 0000000..29e42fc
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests to ensure that activations are built correctly in the face of duplicate parameter names and do not cause crashes.'
+);
+
+function test1(a, b, b, b, b, b, b) {
+    return function() {
+        return a;
+    }
+}
+
+shouldBe('test1("success")()', '"success"');
+
+function test2(a, a, a, a, a, a, b) {
+    return function() {
+        return b;
+    }
+}
+
+shouldBe('test2("success", "success", "success", "success", "success", "success", "success")()', '"success"');
diff --git a/deps/v8/test/webkit/duplicate-param-gc-crash-expected.txt b/deps/v8/test/webkit/duplicate-param-gc-crash-expected.txt
new file mode 100644 (file)
index 0000000..a842226
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests to ensure that activations are built correctly in the face of duplicate parameter names and do not cause crashes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS test1Closure() is "success"
+PASS test2Closure() is "success"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/duplicate-param-gc-crash.js b/deps/v8/test/webkit/duplicate-param-gc-crash.js
new file mode 100644 (file)
index 0000000..3436a94
--- /dev/null
@@ -0,0 +1,70 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests to ensure that activations are built correctly in the face of duplicate parameter names and do not cause crashes.'
+);
+
+function gc()
+{
+    if (this.GCController)
+        GCController.collect();
+    else
+        for (var i = 0; i < 10000; ++i) // Allocate a sufficient number of objects to force a GC.
+            ({});
+}
+
+function eatRegisters(param)
+{
+    if (param > 10)
+        return;
+    eatRegisters(param + 1);
+}
+
+function test1(a, b, b, b, b, b, b) {
+    return function() {
+        return a[0];
+    }
+}
+
+var test1Closure = test1(["success"]);
+
+var extra = test1("success");
+eatRegisters(0);
+gc();
+
+shouldBe('test1Closure()', '"success"');
+
+function test2(a, a, a, a, a, a, b) {
+    return function() {
+        return b[0];
+    }
+}
+
+var test2Closure = test2("success", "success", "success", "success", "success", "success", ["success"]);
+extra =  test2("success", "success", "success", "success", "success", "success", ["success"]);
+
+eatRegisters(0);
+gc();
+
+shouldBe('test2Closure()', '"success"');
diff --git a/deps/v8/test/webkit/enter-dictionary-indexing-mode-with-blank-indexing-type-expected.txt b/deps/v8/test/webkit/enter-dictionary-indexing-mode-with-blank-indexing-type-expected.txt
new file mode 100644 (file)
index 0000000..09b9612
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that putting an object into dictionary mode when it has a blank indexing type doesn't cause us to crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Object.isFrozen(Array.prototype) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/enter-dictionary-indexing-mode-with-blank-indexing-type.js b/deps/v8/test/webkit/enter-dictionary-indexing-mode-with-blank-indexing-type.js
new file mode 100644 (file)
index 0000000..4a95d84
--- /dev/null
@@ -0,0 +1,31 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that putting an object into dictionary mode when it has a blank indexing type doesn't cause us to crash."
+);
+
+// Freezing the Array prototype causes us to create ArrayStorage on the prototype, which has a blank indexing type.
+Object.freeze(Array.prototype);
+
+shouldBe("Object.isFrozen(Array.prototype)", "true");
diff --git a/deps/v8/test/webkit/equality-expected.txt b/deps/v8/test/webkit/equality-expected.txt
new file mode 100644 (file)
index 0000000..ee337df
--- /dev/null
@@ -0,0 +1,832 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for equality of many combinations types.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 0 == 0 is true
+PASS 0 == 1 is false
+PASS 0 == 0.1 is false
+PASS 0 == 2 is false
+PASS 0 == 3 is false
+PASS 0 == 4 is false
+PASS 0 == 5 is false
+PASS 0 == 6 is false
+PASS 0 == 7 is false
+PASS 0 == -0 is true
+PASS 0 == "0" is true
+PASS 0 == "1" is false
+PASS 0 == "0.1" is false
+PASS 0 == "-0" is true
+PASS 0 == null is false
+PASS 0 == undefined is false
+PASS 0 == false is true
+PASS 0 == true is false
+PASS 0 == new String("0") is true
+PASS 0 == new Object is false
+PASS 1 == 0 is false
+PASS 1 == 1 is true
+PASS 1 == 0.1 is false
+PASS 1 == 2 is false
+PASS 1 == 3 is false
+PASS 1 == 4 is false
+PASS 1 == 5 is false
+PASS 1 == 6 is false
+PASS 1 == 7 is false
+PASS 1 == -0 is false
+PASS 1 == "0" is false
+PASS 1 == "1" is true
+PASS 1 == "0.1" is false
+PASS 1 == "-0" is false
+PASS 1 == null is false
+PASS 1 == undefined is false
+PASS 1 == false is false
+PASS 1 == true is true
+PASS 1 == new String("0") is false
+PASS 1 == new Object is false
+PASS 0.1 == 0 is false
+PASS 0.1 == 1 is false
+PASS 0.1 == 0.1 is true
+PASS 0.1 == 2 is false
+PASS 0.1 == 3 is false
+PASS 0.1 == 4 is false
+PASS 0.1 == 5 is false
+PASS 0.1 == 6 is false
+PASS 0.1 == 7 is false
+PASS 0.1 == -0 is false
+PASS 0.1 == "0" is false
+PASS 0.1 == "1" is false
+PASS 0.1 == "0.1" is true
+PASS 0.1 == "-0" is false
+PASS 0.1 == null is false
+PASS 0.1 == undefined is false
+PASS 0.1 == false is false
+PASS 0.1 == true is false
+PASS 0.1 == new String("0") is false
+PASS 0.1 == new Object is false
+PASS 2 == 0 is false
+PASS 2 == 1 is false
+PASS 2 == 0.1 is false
+PASS 2 == 2 is true
+PASS 2 == 3 is false
+PASS 2 == 4 is false
+PASS 2 == 5 is false
+PASS 2 == 6 is false
+PASS 2 == 7 is false
+PASS 2 == -0 is false
+PASS 2 == "0" is false
+PASS 2 == "1" is false
+PASS 2 == "0.1" is false
+PASS 2 == "-0" is false
+PASS 2 == null is false
+PASS 2 == undefined is false
+PASS 2 == false is false
+PASS 2 == true is false
+PASS 2 == new String("0") is false
+PASS 2 == new Object is false
+PASS 3 == 0 is false
+PASS 3 == 1 is false
+PASS 3 == 0.1 is false
+PASS 3 == 2 is false
+PASS 3 == 3 is true
+PASS 3 == 4 is false
+PASS 3 == 5 is false
+PASS 3 == 6 is false
+PASS 3 == 7 is false
+PASS 3 == -0 is false
+PASS 3 == "0" is false
+PASS 3 == "1" is false
+PASS 3 == "0.1" is false
+PASS 3 == "-0" is false
+PASS 3 == null is false
+PASS 3 == undefined is false
+PASS 3 == false is false
+PASS 3 == true is false
+PASS 3 == new String("0") is false
+PASS 3 == new Object is false
+PASS 4 == 0 is false
+PASS 4 == 1 is false
+PASS 4 == 0.1 is false
+PASS 4 == 2 is false
+PASS 4 == 3 is false
+PASS 4 == 4 is true
+PASS 4 == 5 is false
+PASS 4 == 6 is false
+PASS 4 == 7 is false
+PASS 4 == -0 is false
+PASS 4 == "0" is false
+PASS 4 == "1" is false
+PASS 4 == "0.1" is false
+PASS 4 == "-0" is false
+PASS 4 == null is false
+PASS 4 == undefined is false
+PASS 4 == false is false
+PASS 4 == true is false
+PASS 4 == new String("0") is false
+PASS 4 == new Object is false
+PASS 5 == 0 is false
+PASS 5 == 1 is false
+PASS 5 == 0.1 is false
+PASS 5 == 2 is false
+PASS 5 == 3 is false
+PASS 5 == 4 is false
+PASS 5 == 5 is true
+PASS 5 == 6 is false
+PASS 5 == 7 is false
+PASS 5 == -0 is false
+PASS 5 == "0" is false
+PASS 5 == "1" is false
+PASS 5 == "0.1" is false
+PASS 5 == "-0" is false
+PASS 5 == null is false
+PASS 5 == undefined is false
+PASS 5 == false is false
+PASS 5 == true is false
+PASS 5 == new String("0") is false
+PASS 5 == new Object is false
+PASS 6 == 0 is false
+PASS 6 == 1 is false
+PASS 6 == 0.1 is false
+PASS 6 == 2 is false
+PASS 6 == 3 is false
+PASS 6 == 4 is false
+PASS 6 == 5 is false
+PASS 6 == 6 is true
+PASS 6 == 7 is false
+PASS 6 == -0 is false
+PASS 6 == "0" is false
+PASS 6 == "1" is false
+PASS 6 == "0.1" is false
+PASS 6 == "-0" is false
+PASS 6 == null is false
+PASS 6 == undefined is false
+PASS 6 == false is false
+PASS 6 == true is false
+PASS 6 == new String("0") is false
+PASS 6 == new Object is false
+PASS 7 == 0 is false
+PASS 7 == 1 is false
+PASS 7 == 0.1 is false
+PASS 7 == 2 is false
+PASS 7 == 3 is false
+PASS 7 == 4 is false
+PASS 7 == 5 is false
+PASS 7 == 6 is false
+PASS 7 == 7 is true
+PASS 7 == -0 is false
+PASS 7 == "0" is false
+PASS 7 == "1" is false
+PASS 7 == "0.1" is false
+PASS 7 == "-0" is false
+PASS 7 == null is false
+PASS 7 == undefined is false
+PASS 7 == false is false
+PASS 7 == true is false
+PASS 7 == new String("0") is false
+PASS 7 == new Object is false
+PASS -0 == 0 is true
+PASS -0 == 1 is false
+PASS -0 == 0.1 is false
+PASS -0 == 2 is false
+PASS -0 == 3 is false
+PASS -0 == 4 is false
+PASS -0 == 5 is false
+PASS -0 == 6 is false
+PASS -0 == 7 is false
+PASS -0 == -0 is true
+PASS -0 == "0" is true
+PASS -0 == "1" is false
+PASS -0 == "0.1" is false
+PASS -0 == "-0" is true
+PASS -0 == null is false
+PASS -0 == undefined is false
+PASS -0 == false is true
+PASS -0 == true is false
+PASS -0 == new String("0") is true
+PASS -0 == new Object is false
+PASS "0" == 0 is true
+PASS "0" == 1 is false
+PASS "0" == 0.1 is false
+PASS "0" == 2 is false
+PASS "0" == 3 is false
+PASS "0" == 4 is false
+PASS "0" == 5 is false
+PASS "0" == 6 is false
+PASS "0" == 7 is false
+PASS "0" == -0 is true
+PASS "0" == "0" is true
+PASS "0" == "1" is false
+PASS "0" == "0.1" is false
+PASS "0" == "-0" is false
+PASS "0" == null is false
+PASS "0" == undefined is false
+PASS "0" == false is true
+PASS "0" == true is false
+PASS "0" == new String("0") is true
+PASS "0" == new Object is false
+PASS "1" == 0 is false
+PASS "1" == 1 is true
+PASS "1" == 0.1 is false
+PASS "1" == 2 is false
+PASS "1" == 3 is false
+PASS "1" == 4 is false
+PASS "1" == 5 is false
+PASS "1" == 6 is false
+PASS "1" == 7 is false
+PASS "1" == -0 is false
+PASS "1" == "0" is false
+PASS "1" == "1" is true
+PASS "1" == "0.1" is false
+PASS "1" == "-0" is false
+PASS "1" == null is false
+PASS "1" == undefined is false
+PASS "1" == false is false
+PASS "1" == true is true
+PASS "1" == new String("0") is false
+PASS "1" == new Object is false
+PASS "0.1" == 0 is false
+PASS "0.1" == 1 is false
+PASS "0.1" == 0.1 is true
+PASS "0.1" == 2 is false
+PASS "0.1" == 3 is false
+PASS "0.1" == 4 is false
+PASS "0.1" == 5 is false
+PASS "0.1" == 6 is false
+PASS "0.1" == 7 is false
+PASS "0.1" == -0 is false
+PASS "0.1" == "0" is false
+PASS "0.1" == "1" is false
+PASS "0.1" == "0.1" is true
+PASS "0.1" == "-0" is false
+PASS "0.1" == null is false
+PASS "0.1" == undefined is false
+PASS "0.1" == false is false
+PASS "0.1" == true is false
+PASS "0.1" == new String("0") is false
+PASS "0.1" == new Object is false
+PASS "-0" == 0 is true
+PASS "-0" == 1 is false
+PASS "-0" == 0.1 is false
+PASS "-0" == 2 is false
+PASS "-0" == 3 is false
+PASS "-0" == 4 is false
+PASS "-0" == 5 is false
+PASS "-0" == 6 is false
+PASS "-0" == 7 is false
+PASS "-0" == -0 is true
+PASS "-0" == "0" is false
+PASS "-0" == "1" is false
+PASS "-0" == "0.1" is false
+PASS "-0" == "-0" is true
+PASS "-0" == null is false
+PASS "-0" == undefined is false
+PASS "-0" == false is true
+PASS "-0" == true is false
+PASS "-0" == new String("0") is false
+PASS "-0" == new Object is false
+PASS null == 0 is false
+PASS null == 1 is false
+PASS null == 0.1 is false
+PASS null == 2 is false
+PASS null == 3 is false
+PASS null == 4 is false
+PASS null == 5 is false
+PASS null == 6 is false
+PASS null == 7 is false
+PASS null == -0 is false
+PASS null == "0" is false
+PASS null == "1" is false
+PASS null == "0.1" is false
+PASS null == "-0" is false
+PASS null == null is true
+PASS null == undefined is true
+PASS null == false is false
+PASS null == true is false
+PASS null == new String("0") is false
+PASS null == new Object is false
+PASS undefined == 0 is false
+PASS undefined == 1 is false
+PASS undefined == 0.1 is false
+PASS undefined == 2 is false
+PASS undefined == 3 is false
+PASS undefined == 4 is false
+PASS undefined == 5 is false
+PASS undefined == 6 is false
+PASS undefined == 7 is false
+PASS undefined == -0 is false
+PASS undefined == "0" is false
+PASS undefined == "1" is false
+PASS undefined == "0.1" is false
+PASS undefined == "-0" is false
+PASS undefined == null is true
+PASS undefined == undefined is true
+PASS undefined == false is false
+PASS undefined == true is false
+PASS undefined == new String("0") is false
+PASS undefined == new Object is false
+PASS false == 0 is true
+PASS false == 1 is false
+PASS false == 0.1 is false
+PASS false == 2 is false
+PASS false == 3 is false
+PASS false == 4 is false
+PASS false == 5 is false
+PASS false == 6 is false
+PASS false == 7 is false
+PASS false == -0 is true
+PASS false == "0" is true
+PASS false == "1" is false
+PASS false == "0.1" is false
+PASS false == "-0" is true
+PASS false == null is false
+PASS false == undefined is false
+PASS false == false is true
+PASS false == true is false
+PASS false == new String("0") is true
+PASS false == new Object is false
+PASS true == 0 is false
+PASS true == 1 is true
+PASS true == 0.1 is false
+PASS true == 2 is false
+PASS true == 3 is false
+PASS true == 4 is false
+PASS true == 5 is false
+PASS true == 6 is false
+PASS true == 7 is false
+PASS true == -0 is false
+PASS true == "0" is false
+PASS true == "1" is true
+PASS true == "0.1" is false
+PASS true == "-0" is false
+PASS true == null is false
+PASS true == undefined is false
+PASS true == false is false
+PASS true == true is true
+PASS true == new String("0") is false
+PASS true == new Object is false
+PASS new String("0") == 0 is true
+PASS new String("0") == 1 is false
+PASS new String("0") == 0.1 is false
+PASS new String("0") == 2 is false
+PASS new String("0") == 3 is false
+PASS new String("0") == 4 is false
+PASS new String("0") == 5 is false
+PASS new String("0") == 6 is false
+PASS new String("0") == 7 is false
+PASS new String("0") == -0 is true
+PASS new String("0") == "0" is true
+PASS new String("0") == "1" is false
+PASS new String("0") == "0.1" is false
+PASS new String("0") == "-0" is false
+PASS new String("0") == null is false
+PASS new String("0") == undefined is false
+PASS new String("0") == false is true
+PASS new String("0") == true is false
+PASS new String("0") == new String("0") is false
+PASS new String("0") == new Object is false
+PASS new Object == 0 is false
+PASS new Object == 1 is false
+PASS new Object == 0.1 is false
+PASS new Object == 2 is false
+PASS new Object == 3 is false
+PASS new Object == 4 is false
+PASS new Object == 5 is false
+PASS new Object == 6 is false
+PASS new Object == 7 is false
+PASS new Object == -0 is false
+PASS new Object == "0" is false
+PASS new Object == "1" is false
+PASS new Object == "0.1" is false
+PASS new Object == "-0" is false
+PASS new Object == null is false
+PASS new Object == undefined is false
+PASS new Object == false is false
+PASS new Object == true is false
+PASS new Object == new String("0") is false
+PASS new Object == new Object is false
+PASS 0 === 0 is true
+PASS 0 === 1 is false
+PASS 0 === 0.1 is false
+PASS 0 === 2 is false
+PASS 0 === 3 is false
+PASS 0 === 4 is false
+PASS 0 === 5 is false
+PASS 0 === 6 is false
+PASS 0 === 7 is false
+PASS 0 === -0 is true
+PASS 0 === "0" is false
+PASS 0 === "1" is false
+PASS 0 === "0.1" is false
+PASS 0 === "-0" is false
+PASS 0 === null is false
+PASS 0 === undefined is false
+PASS 0 === false is false
+PASS 0 === true is false
+PASS 0 === new String("0") is false
+PASS 0 === new Object is false
+PASS 1 === 0 is false
+PASS 1 === 1 is true
+PASS 1 === 0.1 is false
+PASS 1 === 2 is false
+PASS 1 === 3 is false
+PASS 1 === 4 is false
+PASS 1 === 5 is false
+PASS 1 === 6 is false
+PASS 1 === 7 is false
+PASS 1 === -0 is false
+PASS 1 === "0" is false
+PASS 1 === "1" is false
+PASS 1 === "0.1" is false
+PASS 1 === "-0" is false
+PASS 1 === null is false
+PASS 1 === undefined is false
+PASS 1 === false is false
+PASS 1 === true is false
+PASS 1 === new String("0") is false
+PASS 1 === new Object is false
+PASS 0.1 === 0 is false
+PASS 0.1 === 1 is false
+PASS 0.1 === 0.1 is true
+PASS 0.1 === 2 is false
+PASS 0.1 === 3 is false
+PASS 0.1 === 4 is false
+PASS 0.1 === 5 is false
+PASS 0.1 === 6 is false
+PASS 0.1 === 7 is false
+PASS 0.1 === -0 is false
+PASS 0.1 === "0" is false
+PASS 0.1 === "1" is false
+PASS 0.1 === "0.1" is false
+PASS 0.1 === "-0" is false
+PASS 0.1 === null is false
+PASS 0.1 === undefined is false
+PASS 0.1 === false is false
+PASS 0.1 === true is false
+PASS 0.1 === new String("0") is false
+PASS 0.1 === new Object is false
+PASS 2 === 0 is false
+PASS 2 === 1 is false
+PASS 2 === 0.1 is false
+PASS 2 === 2 is true
+PASS 2 === 3 is false
+PASS 2 === 4 is false
+PASS 2 === 5 is false
+PASS 2 === 6 is false
+PASS 2 === 7 is false
+PASS 2 === -0 is false
+PASS 2 === "0" is false
+PASS 2 === "1" is false
+PASS 2 === "0.1" is false
+PASS 2 === "-0" is false
+PASS 2 === null is false
+PASS 2 === undefined is false
+PASS 2 === false is false
+PASS 2 === true is false
+PASS 2 === new String("0") is false
+PASS 2 === new Object is false
+PASS 3 === 0 is false
+PASS 3 === 1 is false
+PASS 3 === 0.1 is false
+PASS 3 === 2 is false
+PASS 3 === 3 is true
+PASS 3 === 4 is false
+PASS 3 === 5 is false
+PASS 3 === 6 is false
+PASS 3 === 7 is false
+PASS 3 === -0 is false
+PASS 3 === "0" is false
+PASS 3 === "1" is false
+PASS 3 === "0.1" is false
+PASS 3 === "-0" is false
+PASS 3 === null is false
+PASS 3 === undefined is false
+PASS 3 === false is false
+PASS 3 === true is false
+PASS 3 === new String("0") is false
+PASS 3 === new Object is false
+PASS 4 === 0 is false
+PASS 4 === 1 is false
+PASS 4 === 0.1 is false
+PASS 4 === 2 is false
+PASS 4 === 3 is false
+PASS 4 === 4 is true
+PASS 4 === 5 is false
+PASS 4 === 6 is false
+PASS 4 === 7 is false
+PASS 4 === -0 is false
+PASS 4 === "0" is false
+PASS 4 === "1" is false
+PASS 4 === "0.1" is false
+PASS 4 === "-0" is false
+PASS 4 === null is false
+PASS 4 === undefined is false
+PASS 4 === false is false
+PASS 4 === true is false
+PASS 4 === new String("0") is false
+PASS 4 === new Object is false
+PASS 5 === 0 is false
+PASS 5 === 1 is false
+PASS 5 === 0.1 is false
+PASS 5 === 2 is false
+PASS 5 === 3 is false
+PASS 5 === 4 is false
+PASS 5 === 5 is true
+PASS 5 === 6 is false
+PASS 5 === 7 is false
+PASS 5 === -0 is false
+PASS 5 === "0" is false
+PASS 5 === "1" is false
+PASS 5 === "0.1" is false
+PASS 5 === "-0" is false
+PASS 5 === null is false
+PASS 5 === undefined is false
+PASS 5 === false is false
+PASS 5 === true is false
+PASS 5 === new String("0") is false
+PASS 5 === new Object is false
+PASS 6 === 0 is false
+PASS 6 === 1 is false
+PASS 6 === 0.1 is false
+PASS 6 === 2 is false
+PASS 6 === 3 is false
+PASS 6 === 4 is false
+PASS 6 === 5 is false
+PASS 6 === 6 is true
+PASS 6 === 7 is false
+PASS 6 === -0 is false
+PASS 6 === "0" is false
+PASS 6 === "1" is false
+PASS 6 === "0.1" is false
+PASS 6 === "-0" is false
+PASS 6 === null is false
+PASS 6 === undefined is false
+PASS 6 === false is false
+PASS 6 === true is false
+PASS 6 === new String("0") is false
+PASS 6 === new Object is false
+PASS 7 === 0 is false
+PASS 7 === 1 is false
+PASS 7 === 0.1 is false
+PASS 7 === 2 is false
+PASS 7 === 3 is false
+PASS 7 === 4 is false
+PASS 7 === 5 is false
+PASS 7 === 6 is false
+PASS 7 === 7 is true
+PASS 7 === -0 is false
+PASS 7 === "0" is false
+PASS 7 === "1" is false
+PASS 7 === "0.1" is false
+PASS 7 === "-0" is false
+PASS 7 === null is false
+PASS 7 === undefined is false
+PASS 7 === false is false
+PASS 7 === true is false
+PASS 7 === new String("0") is false
+PASS 7 === new Object is false
+PASS -0 === 0 is true
+PASS -0 === 1 is false
+PASS -0 === 0.1 is false
+PASS -0 === 2 is false
+PASS -0 === 3 is false
+PASS -0 === 4 is false
+PASS -0 === 5 is false
+PASS -0 === 6 is false
+PASS -0 === 7 is false
+PASS -0 === -0 is true
+PASS -0 === "0" is false
+PASS -0 === "1" is false
+PASS -0 === "0.1" is false
+PASS -0 === "-0" is false
+PASS -0 === null is false
+PASS -0 === undefined is false
+PASS -0 === false is false
+PASS -0 === true is false
+PASS -0 === new String("0") is false
+PASS -0 === new Object is false
+PASS "0" === 0 is false
+PASS "0" === 1 is false
+PASS "0" === 0.1 is false
+PASS "0" === 2 is false
+PASS "0" === 3 is false
+PASS "0" === 4 is false
+PASS "0" === 5 is false
+PASS "0" === 6 is false
+PASS "0" === 7 is false
+PASS "0" === -0 is false
+PASS "0" === "0" is true
+PASS "0" === "1" is false
+PASS "0" === "0.1" is false
+PASS "0" === "-0" is false
+PASS "0" === null is false
+PASS "0" === undefined is false
+PASS "0" === false is false
+PASS "0" === true is false
+PASS "0" === new String("0") is false
+PASS "0" === new Object is false
+PASS "1" === 0 is false
+PASS "1" === 1 is false
+PASS "1" === 0.1 is false
+PASS "1" === 2 is false
+PASS "1" === 3 is false
+PASS "1" === 4 is false
+PASS "1" === 5 is false
+PASS "1" === 6 is false
+PASS "1" === 7 is false
+PASS "1" === -0 is false
+PASS "1" === "0" is false
+PASS "1" === "1" is true
+PASS "1" === "0.1" is false
+PASS "1" === "-0" is false
+PASS "1" === null is false
+PASS "1" === undefined is false
+PASS "1" === false is false
+PASS "1" === true is false
+PASS "1" === new String("0") is false
+PASS "1" === new Object is false
+PASS "0.1" === 0 is false
+PASS "0.1" === 1 is false
+PASS "0.1" === 0.1 is false
+PASS "0.1" === 2 is false
+PASS "0.1" === 3 is false
+PASS "0.1" === 4 is false
+PASS "0.1" === 5 is false
+PASS "0.1" === 6 is false
+PASS "0.1" === 7 is false
+PASS "0.1" === -0 is false
+PASS "0.1" === "0" is false
+PASS "0.1" === "1" is false
+PASS "0.1" === "0.1" is true
+PASS "0.1" === "-0" is false
+PASS "0.1" === null is false
+PASS "0.1" === undefined is false
+PASS "0.1" === false is false
+PASS "0.1" === true is false
+PASS "0.1" === new String("0") is false
+PASS "0.1" === new Object is false
+PASS "-0" === 0 is false
+PASS "-0" === 1 is false
+PASS "-0" === 0.1 is false
+PASS "-0" === 2 is false
+PASS "-0" === 3 is false
+PASS "-0" === 4 is false
+PASS "-0" === 5 is false
+PASS "-0" === 6 is false
+PASS "-0" === 7 is false
+PASS "-0" === -0 is false
+PASS "-0" === "0" is false
+PASS "-0" === "1" is false
+PASS "-0" === "0.1" is false
+PASS "-0" === "-0" is true
+PASS "-0" === null is false
+PASS "-0" === undefined is false
+PASS "-0" === false is false
+PASS "-0" === true is false
+PASS "-0" === new String("0") is false
+PASS "-0" === new Object is false
+PASS null === 0 is false
+PASS null === 1 is false
+PASS null === 0.1 is false
+PASS null === 2 is false
+PASS null === 3 is false
+PASS null === 4 is false
+PASS null === 5 is false
+PASS null === 6 is false
+PASS null === 7 is false
+PASS null === -0 is false
+PASS null === "0" is false
+PASS null === "1" is false
+PASS null === "0.1" is false
+PASS null === "-0" is false
+PASS null === null is true
+PASS null === undefined is false
+PASS null === false is false
+PASS null === true is false
+PASS null === new String("0") is false
+PASS null === new Object is false
+PASS undefined === 0 is false
+PASS undefined === 1 is false
+PASS undefined === 0.1 is false
+PASS undefined === 2 is false
+PASS undefined === 3 is false
+PASS undefined === 4 is false
+PASS undefined === 5 is false
+PASS undefined === 6 is false
+PASS undefined === 7 is false
+PASS undefined === -0 is false
+PASS undefined === "0" is false
+PASS undefined === "1" is false
+PASS undefined === "0.1" is false
+PASS undefined === "-0" is false
+PASS undefined === null is false
+PASS undefined === undefined is true
+PASS undefined === false is false
+PASS undefined === true is false
+PASS undefined === new String("0") is false
+PASS undefined === new Object is false
+PASS false === 0 is false
+PASS false === 1 is false
+PASS false === 0.1 is false
+PASS false === 2 is false
+PASS false === 3 is false
+PASS false === 4 is false
+PASS false === 5 is false
+PASS false === 6 is false
+PASS false === 7 is false
+PASS false === -0 is false
+PASS false === "0" is false
+PASS false === "1" is false
+PASS false === "0.1" is false
+PASS false === "-0" is false
+PASS false === null is false
+PASS false === undefined is false
+PASS false === false is true
+PASS false === true is false
+PASS false === new String("0") is false
+PASS false === new Object is false
+PASS true === 0 is false
+PASS true === 1 is false
+PASS true === 0.1 is false
+PASS true === 2 is false
+PASS true === 3 is false
+PASS true === 4 is false
+PASS true === 5 is false
+PASS true === 6 is false
+PASS true === 7 is false
+PASS true === -0 is false
+PASS true === "0" is false
+PASS true === "1" is false
+PASS true === "0.1" is false
+PASS true === "-0" is false
+PASS true === null is false
+PASS true === undefined is false
+PASS true === false is false
+PASS true === true is true
+PASS true === new String("0") is false
+PASS true === new Object is false
+PASS new String("0") === 0 is false
+PASS new String("0") === 1 is false
+PASS new String("0") === 0.1 is false
+PASS new String("0") === 2 is false
+PASS new String("0") === 3 is false
+PASS new String("0") === 4 is false
+PASS new String("0") === 5 is false
+PASS new String("0") === 6 is false
+PASS new String("0") === 7 is false
+PASS new String("0") === -0 is false
+PASS new String("0") === "0" is false
+PASS new String("0") === "1" is false
+PASS new String("0") === "0.1" is false
+PASS new String("0") === "-0" is false
+PASS new String("0") === null is false
+PASS new String("0") === undefined is false
+PASS new String("0") === false is false
+PASS new String("0") === true is false
+PASS new String("0") === new String("0") is false
+PASS new String("0") === new Object is false
+PASS new Object === 0 is false
+PASS new Object === 1 is false
+PASS new Object === 0.1 is false
+PASS new Object === 2 is false
+PASS new Object === 3 is false
+PASS new Object === 4 is false
+PASS new Object === 5 is false
+PASS new Object === 6 is false
+PASS new Object === 7 is false
+PASS new Object === -0 is false
+PASS new Object === "0" is false
+PASS new Object === "1" is false
+PASS new Object === "0.1" is false
+PASS new Object === "-0" is false
+PASS new Object === null is false
+PASS new Object === undefined is false
+PASS new Object === false is false
+PASS new Object === true is false
+PASS new Object === new String("0") is false
+PASS new Object === new Object is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/equality.js b/deps/v8/test/webkit/equality.js
new file mode 100644 (file)
index 0000000..6bf253c
--- /dev/null
@@ -0,0 +1,77 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test for equality of many combinations types.'
+);
+
+var values = [ '0', '1', '0.1', '2', '3', '4', '5', '6', '7', '-0', '"0"', '"1"', '"0.1"', '"-0"', 'null', 'undefined', 'false', 'true', 'new String("0")', 'new Object' ];
+
+var exceptions = [
+    '"-0" == false',
+    '"0" == false',
+    '"0" == new String("0")',
+    '"1" == true',
+    '-0 == "-0"',
+    '-0 == "0"',
+    '-0 == false',
+    '-0 == new String("0")',
+    '0 == "-0"',
+    '0 == "0"',
+    '0 == -0',
+    '0 == false',
+    '0 == new String("0")',
+    '0 === -0',
+    '0.1 == "0.1"',
+    '1 == "1"',
+    '1 == true',
+    'new Object == new Object',
+    'new Object === new Object',
+    'new String("0") == false',
+    'new String("0") == new String("0")',
+    'new String("0") === new String("0")',
+    'null == undefined',
+];
+
+var exceptionMap = new Object;
+
+var i, j;
+
+for (i = 0; i < exceptions.length; ++i)
+    exceptionMap[exceptions[i]] = 1;
+
+for (i = 0; i < values.length; ++i) {
+    for (j = 0; j < values.length; ++j) {
+        var expression = values[i] + " == " + values[j];
+        var reversed = values[j] + " == " + values[i];
+        shouldBe(expression, ((i == j) ^ (exceptionMap[expression] || exceptionMap[reversed])) ? "true" : "false");
+    }
+}
+
+for (i = 0; i < values.length; ++i) {
+    for (j = 0; j < values.length; ++j) {
+        var expression = values[i] + " === " + values[j];
+        var reversed = values[j] + " === " + values[i];
+        shouldBe(expression, ((i == j) ^ (exceptionMap[expression] || exceptionMap[reversed])) ? "true" : "false");
+    }
+}
diff --git a/deps/v8/test/webkit/eval-and-with-expected.txt b/deps/v8/test/webkit/eval-and-with-expected.txt
new file mode 100644 (file)
index 0000000..c1783b0
--- /dev/null
@@ -0,0 +1,41 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test case checks variable resolution in the presence of both eval and with.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS freeVarInsideEvalAndWith({}, "true")() is true
+PASS freeVarInsideEvalAndWith({}, "false")() is false
+PASS freeVarInsideEvalAndWith({}, "var x = 10; x")() == 10 is true
+PASS freeVarInsideEvalAndWith({}, "var x = 10; (function (){return x;})")()() == 10 is true
+PASS localVarInsideEvalAndWith({}, "true") is true
+PASS localVarInsideEvalAndWith({}, "false") is false
+PASS localVarInsideEvalAndWith({}, "var x = true; x") is true
+PASS localVarInsideEvalAndWith({}, "var x = 10; (function (){return x;})")() == 10 is true
+PASS localVarInsideEvalAndWith(y={x:false}, "var x = true; x && y.x") is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/eval-and-with.js b/deps/v8/test/webkit/eval-and-with.js
new file mode 100644 (file)
index 0000000..28c6598
--- /dev/null
@@ -0,0 +1,57 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test case checks variable resolution in the presence of both eval and with."
+);
+
+// Direct non-strict eval inside a with.
+
+function freeVarInsideEvalAndWith(o, str)
+{
+    with (o)
+    {
+        return function () { return eval(str); }
+    }
+}
+
+shouldBeTrue('freeVarInsideEvalAndWith({}, "true")()')
+shouldBeFalse('freeVarInsideEvalAndWith({}, "false")()')
+shouldBeTrue('freeVarInsideEvalAndWith({}, "var x = 10; x")() == 10')
+shouldBeTrue('freeVarInsideEvalAndWith({}, "var x = 10; (function (){return x;})")()() == 10')
+
+function localVarInsideEvalAndWith(o, str)
+{
+    with (o)
+    {
+        return eval(str);
+    }
+}
+
+shouldBeTrue('localVarInsideEvalAndWith({}, "true")')
+shouldBeFalse('localVarInsideEvalAndWith({}, "false")')
+shouldBeTrue('localVarInsideEvalAndWith({}, "var x = true; x")')
+shouldBeTrue('localVarInsideEvalAndWith({}, "var x = 10; (function (){return x;})")() == 10')
+
+var y;
+shouldBeTrue('localVarInsideEvalAndWith(y={x:false}, "var x = true; x && y.x")')
diff --git a/deps/v8/test/webkit/eval-cache-crash-expected.txt b/deps/v8/test/webkit/eval-cache-crash-expected.txt
new file mode 100644 (file)
index 0000000..b0f794d
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to make sure the eval code cache doesn't crash or give wrong results in odd situations.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS first is 'first'
+PASS second is 'second'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/eval-cache-crash.js b/deps/v8/test/webkit/eval-cache-crash.js
new file mode 100644 (file)
index 0000000..1d3bd98
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Test to make sure the eval code cache doesn't crash or give wrong results in odd situations."
+);
+
+
+var str = "(function () { return a; })";
+var a = "first";
+var first = eval(str)();
+shouldBe("first", "'first'");
+
+with ({a : "second"}) {
+    var second = eval(str)();
+}
+
+shouldBe("second", "'second'");
diff --git a/deps/v8/test/webkit/eval-throw-return-expected.txt b/deps/v8/test/webkit/eval-throw-return-expected.txt
new file mode 100644 (file)
index 0000000..662531a
--- /dev/null
@@ -0,0 +1,48 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test verifies the result returned by the eval function when exceptions are thrown and caught whithin the contents of the evaluated string.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS eval("1;") is 1
+PASS eval("1; try { foo = [2,3,throwFunc(), 4]; } catch (e){}") is 1
+PASS eval("1; try { 2; throw \"\"; } catch (e){}") is 2
+PASS eval("1; try { 2; throwFunc(); } catch (e){}") is 2
+PASS eval("1; try { 2; throwFunc(); } catch (e){3;} finally {}") is 3
+PASS eval("1; try { 2; throwFunc(); } catch (e){3;} finally {4;}") is 4
+PASS eval("function blah() { 1; }\n blah();") is undefined
+PASS eval("var x = 1;") is undefined
+PASS eval("if (true) { 1; } else { 2; }") is 1
+PASS eval("if (false) { 1; } else { 2; }") is 2
+PASS eval("try{1; if (true) { 2; throw \"\"; } else { 2; }} catch(e){}") is 2
+PASS eval("1; var i = 0; do { ++i; 2; } while(i!=1);") is 2
+PASS eval("try{1; var i = 0; do { ++i; 2; throw \"\"; } while(i!=1);} catch(e){}") is 2
+PASS eval("1; try{2; throwOnReturn();} catch(e){}") is 2
+PASS eval("1; twoFunc();") is undefined
+PASS eval("1; with ( { a: 0 } ) { 2; }") is 2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/eval-throw-return.js b/deps/v8/test/webkit/eval-throw-return.js
new file mode 100644 (file)
index 0000000..a5fd9f5
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('This test verifies the result returned by the eval function when exceptions are thrown and caught whithin the contents of the evaluated string.');
+
+function throwFunc() {
+  throw "";
+}
+
+function throwOnReturn(){
+  1;
+  return throwFunc();
+}
+
+function twoFunc() {
+  2;
+}
+
+shouldBe('eval("1;")', "1");
+shouldBe('eval("1; try { foo = [2,3,throwFunc(), 4]; } catch (e){}")', "1");
+shouldBe('eval("1; try { 2; throw \\"\\"; } catch (e){}")', "2");
+shouldBe('eval("1; try { 2; throwFunc(); } catch (e){}")', "2");
+shouldBe('eval("1; try { 2; throwFunc(); } catch (e){3;} finally {}")', "3");
+shouldBe('eval("1; try { 2; throwFunc(); } catch (e){3;} finally {4;}")', "4");
+shouldBe('eval("function blah() { 1; }\\n blah();")', "undefined");
+shouldBe('eval("var x = 1;")', "undefined");
+shouldBe('eval("if (true) { 1; } else { 2; }")', "1");
+shouldBe('eval("if (false) { 1; } else { 2; }")', "2");
+shouldBe('eval("try{1; if (true) { 2; throw \\"\\"; } else { 2; }} catch(e){}")', "2");
+shouldBe('eval("1; var i = 0; do { ++i; 2; } while(i!=1);")', "2");
+shouldBe('eval("try{1; var i = 0; do { ++i; 2; throw \\"\\"; } while(i!=1);} catch(e){}")', "2");
+shouldBe('eval("1; try{2; throwOnReturn();} catch(e){}")', "2");
+shouldBe('eval("1; twoFunc();")', "undefined");
+shouldBe('eval("1; with ( { a: 0 } ) { 2; }")', "2");
diff --git a/deps/v8/test/webkit/eval-var-decl-expected.txt b/deps/v8/test/webkit/eval-var-decl-expected.txt
new file mode 100644 (file)
index 0000000..4488a7f
--- /dev/null
@@ -0,0 +1,38 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test case checks whether variables cause properties to be defined even before reaching the declaration statement in various cases.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS this.hasOwnProperty("foo") is true
+PASS this.hasOwnProperty("bar") is true
+PASS firstEvalResult is true
+PASS secondEvalResult is false
+PASS thirdEvalResult is true
+PASS testEvalInCatch() is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/eval-var-decl.js b/deps/v8/test/webkit/eval-var-decl.js
new file mode 100644 (file)
index 0000000..05aead1
--- /dev/null
@@ -0,0 +1,65 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test case checks whether variables cause properties to be defined even before reaching the declaration statement in various cases."
+);
+
+shouldBeTrue('this.hasOwnProperty("foo")');
+var foo = 3;
+
+delete bar;
+shouldBeTrue('this.hasOwnProperty("bar")');
+var bar = 3;
+
+var firstEvalResult = eval('var result = this.hasOwnProperty("y"); var y = 3; result');
+shouldBeTrue("firstEvalResult");
+
+var secondEvalResult = eval('delete x; var result = this.hasOwnProperty("x"); var x = 3; result');
+shouldBeFalse("secondEvalResult");
+
+var thirdEvalResult = false;
+try {
+    thirdEvalResult = (function(){ var x=false; try { throw ""; } catch (e) { eval("var x = true;"); } return x; })();
+} catch (e) {
+    thirdEvalResult = "Threw exception!";
+}
+shouldBeTrue("thirdEvalResult");
+
+// Check that the correct this value is passed to a function called having been caught from a throw, where the catch block contains an eval (bug#).
+function checkThis()
+{
+    "use strict";
+    return this === undefined;
+}
+function testEvalInCatch()
+{
+    try {
+        throw checkThis;
+    } catch(e) {
+        eval('');
+        return e();
+    }
+    return false;
+}
+shouldBeTrue("testEvalInCatch()");
diff --git a/deps/v8/test/webkit/exception-for-nonobject-expected.txt b/deps/v8/test/webkit/exception-for-nonobject-expected.txt
new file mode 100644 (file)
index 0000000..86068b1
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for correct handling of exceptions from instanceof and 'new' expressions
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS new {}.undefined threw exception TypeError: undefined is not a function.
+PASS 1 instanceof {}.undefined threw exception TypeError: Expecting a function in instanceof check, but got 1.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/exception-for-nonobject.js b/deps/v8/test/webkit/exception-for-nonobject.js
new file mode 100644 (file)
index 0000000..d39c3e0
--- /dev/null
@@ -0,0 +1,27 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test for correct handling of exceptions from instanceof and 'new' expressions");
+
+shouldThrow("new {}.undefined");
+shouldThrow("1 instanceof {}.undefined");
diff --git a/deps/v8/test/webkit/exception-propagate-from-dfg-to-llint-expected.txt b/deps/v8/test/webkit/exception-propagate-from-dfg-to-llint-expected.txt
new file mode 100644 (file)
index 0000000..1be9838
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Ensures that we pass exceptions to the correct codeblock when throwing from the DFG to the LLInt.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Caught exception in correct codeblock
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/exception-propagate-from-dfg-to-llint.js b/deps/v8/test/webkit/exception-propagate-from-dfg-to-llint.js
new file mode 100644 (file)
index 0000000..51075fd
--- /dev/null
@@ -0,0 +1,210 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Ensures that we pass exceptions to the correct codeblock when throwing from the DFG to the LLInt.");
+var o = {
+    toString: function() { if (shouldThrow) throw {}; return ""; }
+};
+
+var shouldThrow = false;
+function h(o) {
+    return String(o);
+}
+
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+
+
+function g() {
+    with({})
+        h(o);
+}
+
+function f1() {
+    try {
+        g();
+    } catch (e) {
+        testFailed("Caught exception in wrong codeblock");
+    }
+}
+
+function f2() {
+    try {
+        g();
+    } catch (e) {
+        testPassed("Caught exception in correct codeblock");
+    }
+}
+
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+shouldThrow = true;
+f2();
+var successfullyParsed = true;
diff --git a/deps/v8/test/webkit/exception-try-finally-scope-error-expected.txt b/deps/v8/test/webkit/exception-try-finally-scope-error-expected.txt
new file mode 100644 (file)
index 0000000..7febcfa
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test makes sure stack unwinding works correctly in combination with dynamically added scopes
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is "inner scope"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/exception-try-finally-scope-error.js b/deps/v8/test/webkit/exception-try-finally-scope-error.js
new file mode 100644 (file)
index 0000000..cfb2b92
--- /dev/null
@@ -0,0 +1,59 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('This test makes sure stack unwinding works correctly in combination with dynamically added scopes');
+
+function gc()
+{
+    if (this.GCController)
+        GCController.collect();
+    else
+        for (var i = 0; i < 10000; ++i) // Allocate a sufficient number of objects to force a GC.
+            ({});
+}
+
+var result;
+function runTest() {
+    var test = "outer scope";
+    with({test:"inner scope"})
+       (function () { try { throw ""; } finally { result = test; shouldBe("result", '"inner scope"'); return;}})()
+}
+runTest();
+
+try{
+(function() {
+    try {
+        throw "";
+    } catch(y) {
+        throw (function(){});
+    } finally {
+    }
+})()
+}catch(r){
+}
+
+// Just clobber any temporaries
+a=({});
+a*=a*a*a;
+
+gc();
diff --git a/deps/v8/test/webkit/exception-with-handler-inside-eval-with-dynamic-scope-expected.txt b/deps/v8/test/webkit/exception-with-handler-inside-eval-with-dynamic-scope-expected.txt
new file mode 100644 (file)
index 0000000..d5b21a3
--- /dev/null
@@ -0,0 +1,43 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test makes sure stack unwinding works correctly when it occurs inside an eval contained in a dynamic scope.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is "inner scope"
+PASS result is "inner scope"
+PASS result is "innermost scope"
+PASS result is "innermost scope"
+PASS result is "inner scope"
+PASS result is "inner scope"
+PASS result is "inner scope"
+PASS result is "innermost scope"
+PASS result is "innermost scope"
+PASS result is "outer scope"
+PASS result is "outer scope"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/exception-with-handler-inside-eval-with-dynamic-scope.js b/deps/v8/test/webkit/exception-with-handler-inside-eval-with-dynamic-scope.js
new file mode 100644 (file)
index 0000000..68d4015
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('This test makes sure stack unwinding works correctly when it occurs inside an eval contained in a dynamic scope.');
+var result;
+function runTest() {
+    var test = "outer scope";
+    with({test:"inner scope"}) {
+        eval("try { throw ''; } catch (e) { result = test; shouldBe('result', '\"inner scope\"'); }");
+        result = null;
+        eval("try { with({test:'innermost scope'}) throw ''; } catch (e) { result = test; shouldBe('result', '\"inner scope\"'); }");
+        result = null;
+        eval("with ({test:'innermost scope'}) try { throw ''; } catch (e) { result = test; shouldBe('result', '\"innermost scope\"'); }");
+        result = null;
+        with ({test:'innermost scope'}) eval("try { throw ''; } catch (e) { result = test; shouldBe('result', '\"innermost scope\"'); }");
+        result = null;
+        try {
+            eval("try { throw ''; } finally { result = test; shouldBe('result', '\"inner scope\"'); result = null; undeclared; }");
+        } catch(e) {
+            result = test;
+            shouldBe('result', '"inner scope"');
+            result = null;
+            eval("try { with({test:'innermost scope'}) throw ''; } catch (e) { result = test; shouldBe('result', '\"inner scope\"'); }");
+            result = null;
+            eval("with ({test:'innermost scope'}) try { throw ''; } catch (e) { result = test; shouldBe('result', '\"innermost scope\"'); }");
+            result = null;
+            with ({test:'innermost scope'}) eval("try { throw ''; } catch (e) { result = test; shouldBe('result', '\"innermost scope\"'); }");
+        }
+    }
+    result = test;
+    eval("try { throw ''; } catch (e) { result = test; shouldBe('result', '\"outer scope\"'); }");
+    eval("result = test");
+    eval("try { throw ''; } catch (e) { result = test; shouldBe('result', '\"outer scope\"'); }");
+}
+runTest();
diff --git a/deps/v8/test/webkit/finally-codegen-failure-expected.txt b/deps/v8/test/webkit/finally-codegen-failure-expected.txt
new file mode 100644 (file)
index 0000000..0743392
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test that finally behaviour is correct.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS f() is true
+PASS (function () { var a = true; try { return a; } finally { a = false; }})() is true
+PASS (function () { var a = 'PASS'; try { throw a; } finally { a = 'FAIL'; }})() threw exception PASS.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/finally-codegen-failure.js b/deps/v8/test/webkit/finally-codegen-failure.js
new file mode 100644 (file)
index 0000000..0378656
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test that finally behaviour is correct.");
+
+a = {
+    f: function() { return true; }
+};
+
+a.f.toString = function() { return "Fail"; };
+
+function f() {
+    try {
+        a.f();
+        a.f();
+        return a.f();
+    } finally {
+        a.f();
+    }
+}
+shouldBeTrue("f()")
+
+shouldBeTrue("(function () { var a = true; try { return a; } finally { a = false; }})()");
+shouldThrow("(function () { var a = 'PASS'; try { throw a; } finally { a = 'FAIL'; }})()");
diff --git a/deps/v8/test/webkit/flatten-dictionary-structure-from-which-all-properties-were-deleted-expected.txt b/deps/v8/test/webkit/flatten-dictionary-structure-from-which-all-properties-were-deleted-expected.txt
new file mode 100644 (file)
index 0000000..8aaa345
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that deleting all properties from an object and then flattening it doesn't cause inconsistencies.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/flatten-dictionary-structure-from-which-all-properties-were-deleted.js b/deps/v8/test/webkit/flatten-dictionary-structure-from-which-all-properties-were-deleted.js
new file mode 100644 (file)
index 0000000..ccaccad
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that deleting all properties from an object and then flattening it doesn't cause inconsistencies."
+);
+
+var o = {};
+
+for (var i = 0; i < 1000; ++i)
+    o["a" + i] = i;
+
+for (var i = 0; i < 1000; ++i)
+    delete o["a" + i];
+
+var p = {};
+p.__proto__ = o;
+
+var q = {f:42};
+o.__proto__ = q;
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("p.f", "42");
diff --git a/deps/v8/test/webkit/for-in-avoid-duplicates-expected.txt b/deps/v8/test/webkit/for-in-avoid-duplicates-expected.txt
new file mode 100644 (file)
index 0000000..a6c1b5e
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that for/in statements don't report properties that are in both an object and its prototype more than once.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS i is 2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/for-in-avoid-duplicates.js b/deps/v8/test/webkit/for-in-avoid-duplicates.js
new file mode 100644 (file)
index 0000000..a961f91
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that for/in statements don't report properties that are in both an object and its prototype more than once."
+);
+
+
+function constr() {
+    this.xxx = "foo";
+    this.yyy = "bar";
+}
+
+constr.prototype = { xxx: "baz", yyy: "quux" };
+
+var obj = new constr();
+
+var i = 0;
+for (var prop in obj) {
+    ++i;
+}
+
+shouldBe("i", "2");
diff --git a/deps/v8/test/webkit/for-in-cached-expected.txt b/deps/v8/test/webkit/for-in-cached-expected.txt
new file mode 100644 (file)
index 0000000..0d0c337
--- /dev/null
@@ -0,0 +1,42 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that for/in statements behave correctly when cached.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS forIn1() is ['x', 'y']
+PASS forIn2() is ['x']
+PASS forIn3({ __proto__: { y1: 2 } }) is ['x', 'y1']
+PASS forIn3({ y2 : 2, __proto__: null }) is ['x', 'y2']
+PASS forIn3({ __proto__: { __proto__: { y3 : 2 } } }) is ['x', 'y3']
+PASS forIn4(objectWithArrayAsProto) is []
+PASS forIn4(objectWithArrayAsProto) is ['0']
+PASS forIn5({get foo() { return 'called getter'} }) is ['foo', 'called getter']
+PASS forIn5({set foo() { } }) is ['foo', undefined]
+PASS forIn5({get foo() { return 'called getter'}, set foo() { }}) is ['foo', 'called getter']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/for-in-cached.js b/deps/v8/test/webkit/for-in-cached.js
new file mode 100644 (file)
index 0000000..1842d61
--- /dev/null
@@ -0,0 +1,97 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that for/in statements behave correctly when cached."
+);
+
+function forIn1() {
+    var result = [];
+    var o = { x: 1 };
+    for (var p in o)
+        result.push(p);
+    return result;
+}
+forIn1();
+Object.prototype.y = 2;
+shouldBe("forIn1()", "['x', 'y']");
+delete Object.prototype.y;
+
+function forIn2() {
+    var result = [];
+    var o = { x: 1, __proto__: null };
+    for (var p in o)
+        result.push(p);
+    return result;
+}
+forIn2();
+shouldBe("forIn2()", "['x']");
+
+function forIn3(proto) {
+    var result = [];
+    var o = { x: 1, __proto__: proto };
+    for (var p in o)
+        result.push(p);
+    return result;
+}
+forIn3({ __proto__: { y1: 2 } });
+forIn3({ __proto__: { y1: 2 } });
+shouldBe("forIn3({ __proto__: { y1: 2 } })", "['x', 'y1']");
+
+forIn3({ y2 : 2, __proto__: null });
+forIn3({ y2 : 2, __proto__: null });
+shouldBe("forIn3({ y2 : 2, __proto__: null })", "['x', 'y2']");
+
+forIn3({ __proto__: { __proto__: { y3 : 2 } } });
+forIn3({ __proto__: { __proto__: { y3 : 2 } } });
+shouldBe("forIn3({ __proto__: { __proto__: { y3 : 2 } } })", "['x', 'y3']");
+
+function forIn4(o) {
+    var result = [];
+    for (var p in o)
+        result.push(p);
+    return result;
+}
+var objectWithArrayAsProto = {};
+objectWithArrayAsProto.__proto__ = [];
+shouldBe("forIn4(objectWithArrayAsProto)", "[]");
+objectWithArrayAsProto.__proto__[0]=1;
+shouldBe("forIn4(objectWithArrayAsProto)", "['0']");
+
+function forIn5(o) {
+    for (var i in o)
+        return [i, o[i]];
+}
+
+shouldBe("forIn5({get foo() { return 'called getter'} })", "['foo', 'called getter']");
+shouldBe("forIn5({set foo() { } })", "['foo', undefined]");
+shouldBe("forIn5({get foo() { return 'called getter'}, set foo() { }})", "['foo', 'called getter']");
+
+function cacheClearing() {
+    for(var j=0; j < 10; j++){
+        var o = {a:1,b:2,c:3,d:4,e:5}
+        try {for (i in o) { delete o.a; o = null; throw "" };}finally{continue}
+    }
+}
+
+cacheClearing()
diff --git a/deps/v8/test/webkit/for-in-exeception-expected.txt b/deps/v8/test/webkit/for-in-exeception-expected.txt
new file mode 100644 (file)
index 0000000..75e997b
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for (foo in somethingWhichThrows) to catch ASSERT
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS test(throwUndefinedException) is undefined.
+PASS test(throwNullException) is undefined.
+PASS test(throwStringException) threw exception PASSED.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/for-in-exeception.js b/deps/v8/test/webkit/for-in-exeception.js
new file mode 100644 (file)
index 0000000..f510185
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Test for (foo in somethingWhichThrows) to catch ASSERT');
+
+function throwNullException() {
+  throw null;
+}
+
+function throwUndefinedException() {
+  throw undefined;
+}
+
+function throwStringException() {
+  throw "PASSED"
+}
+
+function test(func) {
+  for (var foo in func()) {
+    testFailed("Shoud not be reached");
+  }
+}
+
+shouldBeUndefined("test(throwUndefinedException)");
+shouldBeUndefined("test(throwNullException)");
+shouldThrow("test(throwStringException)");
diff --git a/deps/v8/test/webkit/for-in-to-text-expected.txt b/deps/v8/test/webkit/for-in-to-text-expected.txt
new file mode 100644 (file)
index 0000000..2e11c6e
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that JavaScriptCore ForInNodes are converted correctly to text.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS test.toString().match('for *[(]j *in *index[)]') != null is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/for-in-to-text.js b/deps/v8/test/webkit/for-in-to-text.js
new file mode 100644 (file)
index 0000000..34f79d9
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that JavaScriptCore ForInNodes are converted correctly to text."
+);
+
+function test() {
+    for (j in index) {
+        testProperty(index[j]);
+    }
+}
+
+shouldBeTrue("test.toString().match('for *[(]j *in *index[)]') != null");
diff --git a/deps/v8/test/webkit/for-in-var-scope-expected.txt b/deps/v8/test/webkit/for-in-var-scope-expected.txt
new file mode 100644 (file)
index 0000000..1f66d8a
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that for/in statements properly scope a variable that's declared in one. In previous versions of JavaScriptCore there were two bugs that caused problems. First, the loop variable declaration would not be processed. Second, the code to set the loop variable would incorrectly walk the scope chain even after setting the loop variable.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS i is 'start i'
+PASS j is 'propName'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/for-in-var-scope.js b/deps/v8/test/webkit/for-in-var-scope.js
new file mode 100644 (file)
index 0000000..7ac8e04
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that for/in statements properly scope a variable that's declared in one. "
++ "In previous versions of JavaScriptCore there were two bugs that caused problems. "
++ "First, the loop variable declaration would not be processed. "
++ "Second, the code to set the loop variable would incorrectly walk the scope chain even after setting the loop variable."
+);
+
+var i = "start i";
+var j = "start j";
+
+function func() {
+    var object = new Object;
+    object.propName = "propValue";
+    for (var i in object) { j = i; }
+}
+func();
+
+shouldBe("i", "'start i'");
+shouldBe("j", "'propName'");
diff --git a/deps/v8/test/webkit/function-apply-aliased-expected.txt b/deps/v8/test/webkit/function-apply-aliased-expected.txt
new file mode 100644 (file)
index 0000000..b6c6c86
--- /dev/null
@@ -0,0 +1,54 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that we can correctly call Function.prototype.apply
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS myObject.apply() is [myObject, "myObject.apply"]
+PASS forwarder(myObject) is [myObject, "myObject.apply"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS forwarder(myFunction, null, ['arg1']) is [this, "myFunction", "arg1"]
+PASS myFunction.apply(myObject, ['arg1']) is [myObject, "myFunction", "arg1"]
+PASS myFunction.apply(myObject, arg1Array) is [myObject, "myFunction", "arg1"]
+PASS forwarder(myFunction, myObject, arg1Array) is [myObject, "myFunction", "arg1"]
+PASS myFunction.apply() is [this, "myFunction", undefined]
+PASS myFunction.apply(null) is [this, "myFunction", undefined]
+PASS myFunction.apply(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedApply(myObject, ['arg1']) is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedApply() is [this, "myFunction", undefined]
+PASS myFunction.aliasedApply(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedApply(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithApply.apply(myObject, ['arg1']) is [myFunctionWithApply, "myFunctionWithApply.apply", myObject]
+PASS myFunctionWithApply.aliasedApply(myObject, ['arg1']) is [myObject, "myFunctionWithApply", "arg1"]
+PASS myFunctionWithApply.apply(myObject, arg1Array) is [myFunctionWithApply, "myFunctionWithApply.apply", myObject]
+PASS forwarder(myFunctionWithApply, myObject, arg1Array) is [myFunctionWithApply, "myFunctionWithApply.apply", myObject]
+PASS myFunctionWithApply.aliasedApply(myObject, arg1Array) is [myObject, "myFunctionWithApply", "arg1"]
+PASS myFunction.apply(null, new Array(5000000)) threw exception RangeError: Maximum call stack size exceeded.
+PASS myFunction.apply(null, new Array(1 << 30)) threw exception RangeError: Maximum call stack size exceeded.
+PASS recurseArguments.apply(null, new Array(50000)) threw exception RangeError: Maximum call stack size exceeded.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/function-apply-aliased.js b/deps/v8/test/webkit/function-apply-aliased.js
new file mode 100644 (file)
index 0000000..cda3b1b
--- /dev/null
@@ -0,0 +1,84 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that we can correctly call Function.prototype.apply"
+);
+
+var myObject = { apply: function() { return [myObject, "myObject.apply"] } };
+var myFunction = function (arg1) {
+    return [this, "myFunction", arg1];
+};
+var myFunctionWithApply = function (arg1) {
+    return [this, "myFunctionWithApply", arg1];
+};
+
+function forwarder(f, thisValue, args) {
+    function g() {
+        return f.apply(thisValue, arguments);
+    }
+    return g.apply(null, args);
+}
+function recurseArguments() {
+    recurseArguments.apply(null, arguments);
+}
+
+myFunctionWithApply.apply = function (arg1) { return [this, "myFunctionWithApply.apply", arg1] };
+Function.prototype.aliasedApply = Function.prototype.apply;
+var arg1Array = ['arg1'];
+
+shouldBe("myObject.apply()", '[myObject, "myObject.apply"]');
+shouldBe("forwarder(myObject)", '[myObject, "myObject.apply"]');
+shouldBe("myFunction('arg1')", '[this, "myFunction", "arg1"]');
+shouldBe("forwarder(myFunction, null, ['arg1'])", '[this, "myFunction", "arg1"]');
+shouldBe("myFunction.apply(myObject, ['arg1'])", '[myObject, "myFunction", "arg1"]');
+shouldBe("myFunction.apply(myObject, arg1Array)", '[myObject, "myFunction", "arg1"]');
+shouldBe("forwarder(myFunction, myObject, arg1Array)", '[myObject, "myFunction", "arg1"]');
+shouldBe("myFunction.apply()", '[this, "myFunction", undefined]');
+shouldBe("myFunction.apply(null)", '[this, "myFunction", undefined]');
+shouldBe("myFunction.apply(undefined)", '[this, "myFunction", undefined]');
+shouldBe("myFunction.aliasedApply(myObject, ['arg1'])", '[myObject, "myFunction", "arg1"]');
+shouldBe("myFunction.aliasedApply()", '[this, "myFunction", undefined]');
+shouldBe("myFunction.aliasedApply(null)", '[this, "myFunction", undefined]');
+shouldBe("myFunction.aliasedApply(undefined)", '[this, "myFunction", undefined]');
+shouldBe("myFunctionWithApply.apply(myObject, ['arg1'])", '[myFunctionWithApply, "myFunctionWithApply.apply", myObject]');
+shouldBe("myFunctionWithApply.aliasedApply(myObject, ['arg1'])", '[myObject, "myFunctionWithApply", "arg1"]');
+shouldBe("myFunctionWithApply.apply(myObject, arg1Array)", '[myFunctionWithApply, "myFunctionWithApply.apply", myObject]');
+shouldBe("forwarder(myFunctionWithApply, myObject, arg1Array)", '[myFunctionWithApply, "myFunctionWithApply.apply", myObject]');
+shouldBe("myFunctionWithApply.aliasedApply(myObject, arg1Array)", '[myObject, "myFunctionWithApply", "arg1"]');
+
+function stackOverflowTest() {
+    try {
+        var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;
+        stackOverflowTest();
+    } catch(e) {
+        // Blow the stack with a sparse array
+        shouldThrow("myFunction.apply(null, new Array(5000000))");
+        // Blow the stack with a sparse array that is sufficiently large to cause int overflow
+        shouldThrow("myFunction.apply(null, new Array(1 << 30))");
+    }
+}
+stackOverflowTest();
+
+// Blow the stack recursing with arguments
+shouldThrow("recurseArguments.apply(null, new Array(50000))");
diff --git a/deps/v8/test/webkit/function-call-aliased-expected.txt b/deps/v8/test/webkit/function-call-aliased-expected.txt
new file mode 100644 (file)
index 0000000..21071dc
--- /dev/null
@@ -0,0 +1,44 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that we can correctly call Function.prototype.call
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/function-call-aliased.js b/deps/v8/test/webkit/function-call-aliased.js
new file mode 100644 (file)
index 0000000..e8e167f
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that we can correctly call Function.prototype.call"
+);
+
+var myObject = { call: function() { return [myObject, "myObject.call"] } };
+var myFunction = function (arg1) { return [this, "myFunction", arg1] };
+var myFunctionWithCall = function (arg1) { return [this, "myFunctionWithCall", arg1] };
+myFunctionWithCall.call = function (arg1) { return [this, "myFunctionWithCall.call", arg1] };
+Function.prototype.aliasedCall = Function.prototype.call;
+
+shouldBe("myObject.call()", '[myObject, "myObject.call"]');
+shouldBe("myFunction('arg1')", '[this, "myFunction", "arg1"]');
+shouldBe("myFunction.call(myObject, 'arg1')", '[myObject, "myFunction", "arg1"]');
+shouldBe("myFunction.call()", '[this, "myFunction", undefined]');
+shouldBe("myFunction.call(null)", '[this, "myFunction", undefined]');
+shouldBe("myFunction.call(undefined)", '[this, "myFunction", undefined]');
+shouldBe("myFunction.aliasedCall(myObject, 'arg1')", '[myObject, "myFunction", "arg1"]');
+shouldBe("myFunction.aliasedCall()", '[this, "myFunction", undefined]');
+shouldBe("myFunction.aliasedCall(null)", '[this, "myFunction", undefined]');
+shouldBe("myFunction.aliasedCall(undefined)", '[this, "myFunction", undefined]');
+shouldBe("myFunctionWithCall.call(myObject, 'arg1')", '[myFunctionWithCall, "myFunctionWithCall.call", myObject]');
+shouldBe("myFunctionWithCall.aliasedCall(myObject, 'arg1')", '[myObject, "myFunctionWithCall", "arg1"]');
diff --git a/deps/v8/test/webkit/function-call-register-allocation-expected.txt b/deps/v8/test/webkit/function-call-register-allocation-expected.txt
new file mode 100644 (file)
index 0000000..c1903fc
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for a specific regression that caused function calls to allocate too many temporary registers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS: Recursion did not run out of stack space.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/function-call-register-allocation.js b/deps/v8/test/webkit/function-call-register-allocation.js
new file mode 100644 (file)
index 0000000..8873bde
--- /dev/null
@@ -0,0 +1,62 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks for a specific regression that caused function calls to allocate too many temporary registers."
+);
+
+var message = "PASS: Recursion did not run out of stack space."
+try {
+    // Call a function recursively.
+    (function f(g, x) {
+        if (x > 3000)
+            return;
+
+        // Do lots of function calls -- when the bug was present, each
+        // of these calls would allocate a new temporary register. We can
+        // detect profligate register allocation because it will substantially
+        // curtail our recursion limit.
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+
+        f(g, ++x);
+    })(function() {}, 0);
+} catch(e) {
+    message = "FAIL: Recursion threw an exception: " + e;
+}
+
+debug(message);
diff --git a/deps/v8/test/webkit/function-constructor-newline-after-brace-expected.txt b/deps/v8/test/webkit/function-constructor-newline-after-brace-expected.txt
new file mode 100644 (file)
index 0000000..56a7f81
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that the Function constructor places a newline after the opening brace, for compatibility reasons. It passes if there are no syntax error exceptions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/function-constructor-newline-after-brace.js b/deps/v8/test/webkit/function-constructor-newline-after-brace.js
new file mode 100644 (file)
index 0000000..eeb8a4f
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that the Function constructor places a newline after the opening brace, for compatibility reasons. It passes if there are no syntax error exceptions."
+);
+
+function addToFunction(oldFunction, name)
+{
+    var tempString = "";
+    if (oldFunction != null)  {
+        tempString = oldFunction.toString();
+        var index = tempString.indexOf("{") + 2;
+        tempString = tempString.substr(index, tempString.length - index - 2);
+    }
+    return new Function(name + '_obj.initialize();' + tempString);
+}
+
+var f1 = addToFunction(null, "f1");
+addToFunction(f1, "f2");
+
+function addToFunctionWithArgument(oldFunction, name)
+{
+    var tempString = "";
+    if (oldFunction != null)  {
+        tempString = oldFunction.toString();
+        var index = tempString.indexOf("{") + 2;
+        tempString = tempString.substr(index, tempString.length - index - 2);
+    }
+    return new Function("arg", name + '_obj.initialize();' + tempString);
+}
+
+var g1 = addToFunctionWithArgument(null, "g1");
+addToFunctionWithArgument(g1, "g2");
diff --git a/deps/v8/test/webkit/function-constructor-single-line-comment-expected.txt b/deps/v8/test/webkit/function-constructor-single-line-comment-expected.txt
new file mode 100644 (file)
index 0000000..8735b1d
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that the Function constructor works correctly in the presence of single line comments.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS (new Function('return true//'))() is true
+PASS (new Function('return true;//'))() is true
+PASS (new Function('a', 'return a//'))(true) is true
+PASS (new Function('a', 'return a;//'))(true) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/function-constructor-single-line-comment.js b/deps/v8/test/webkit/function-constructor-single-line-comment.js
new file mode 100644 (file)
index 0000000..4586ee6
--- /dev/null
@@ -0,0 +1,31 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that the Function constructor works correctly in the presence of single line comments."
+);
+
+shouldBeTrue("(new Function('return true//'))()");
+shouldBeTrue("(new Function('return true;//'))()");
+shouldBeTrue("(new Function('a', 'return a//'))(true)");
+shouldBeTrue("(new Function('a', 'return a;//'))(true)");
diff --git a/deps/v8/test/webkit/function-declaration-expected.txt b/deps/v8/test/webkit/function-declaration-expected.txt
new file mode 100644 (file)
index 0000000..b59002e
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test ensures we correctly parse (or not) various function declarations
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS eval('function f(){return true;}') is undefined.
+PASS eval('function f(){return true;};f')() is true
+PASS eval('function(){return false;}')() threw exception SyntaxError: Unexpected token (.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/function-declaration-statement-expected.txt b/deps/v8/test/webkit/function-declaration-statement-expected.txt
new file mode 100644 (file)
index 0000000..1bbc7f5
--- /dev/null
@@ -0,0 +1,43 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that function declarations are treated as statements.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS ifTest() is true
+PASS ifElseTest() is true
+PASS doWhileTest() is true
+PASS whileTest() is true
+PASS forTest() is true
+PASS forVarTest() is true
+PASS forInTest() is true
+PASS forInVarTest() is true
+PASS forInVarInitTest() is true
+PASS withTest() is true
+PASS labelTest() is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/function-declaration-statement.js b/deps/v8/test/webkit/function-declaration-statement.js
new file mode 100644 (file)
index 0000000..e2ee343
--- /dev/null
@@ -0,0 +1,183 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that function declarations are treated as statements."
+);
+
+function f()
+{
+    return false;
+}
+
+function ifTest()
+{
+    if (true)
+        function f()
+        {
+            return true;
+        }
+
+    return f();
+}
+
+shouldBeTrue("ifTest()");
+
+function ifElseTest()
+{
+    if (false)
+        return false;
+    else
+        function f()
+        {
+            return true;
+        }
+
+    return f();
+}
+
+shouldBeTrue("ifElseTest()");
+
+function doWhileTest()
+{
+    var i = 0;
+    do
+        function f()
+        {
+            return true;
+        }
+    while (i++ < 10)
+
+    return f();
+}
+
+shouldBeTrue("doWhileTest()");
+
+function whileTest()
+{
+    var i = 0;
+    while (i++ < 10)
+        function f()
+        {
+            return true;
+        }
+
+    return f();
+}
+
+shouldBeTrue("whileTest()");
+
+function forTest()
+{
+    var i;
+    for (i = 0; i < 10; ++i)
+        function f()
+        {
+            return true;
+        }
+
+    return f();
+}
+
+shouldBeTrue("forTest()");
+
+function forVarTest()
+{
+    for (var i = 0; i < 10; ++i)
+        function f()
+        {
+            return true;
+        }
+
+    return f();
+}
+
+shouldBeTrue("forVarTest()");
+
+function forInTest()
+{
+    var a;
+    for (a in { field: false })
+        function f()
+        {
+            return true;
+        }
+
+    return f();
+}
+
+shouldBeTrue("forInTest()");
+
+function forInVarTest()
+{
+    var a;
+    for (var a in { field: false })
+        function f()
+        {
+            return true;
+        }
+
+    return f();
+}
+
+shouldBeTrue("forInVarTest()");
+
+function forInVarInitTest()
+{
+    var a;
+    for (var a = false in { field: false })
+        function f()
+        {
+            return true;
+        }
+
+    return f();
+}
+
+shouldBeTrue("forInVarInitTest()");
+
+function withTest()
+{
+    with ({ })
+        function f()
+        {
+            return true;
+        }
+
+    return f();
+}
+
+shouldBeTrue("withTest()");
+
+function labelTest()
+{
+    label:
+        function f()
+        {
+            return true;
+        }
+
+    return f();
+}
+
+shouldBeTrue("labelTest()");
diff --git a/deps/v8/test/webkit/function-declaration.js b/deps/v8/test/webkit/function-declaration.js
new file mode 100644 (file)
index 0000000..fbc4efb
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test ensures we correctly parse (or not) various function declarations"
+);
+
+shouldBeUndefined("eval('function f(){return true;}')");
+shouldBeTrue("eval('function f(){return true;};f')()");
+shouldThrow("eval('function(){return false;}')()");
diff --git a/deps/v8/test/webkit/function-declarations-in-switch-statement-expected.txt b/deps/v8/test/webkit/function-declarations-in-switch-statement-expected.txt
new file mode 100644 (file)
index 0000000..602b8b9
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+WARN: shouldBe() expects string arguments
+PASS 20 is 20
+WARN: shouldBe() expects string arguments
+PASS 20 is 20
+WARN: shouldBe() expects string arguments
+PASS 20 is 20
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/function-declarations-in-switch-statement.js b/deps/v8/test/webkit/function-declarations-in-switch-statement.js
new file mode 100644 (file)
index 0000000..7e7a505
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+function t(n) {
+    switch (n) {
+        case 1:
+            function f() {
+                return 10;
+            }
+            break;
+        case 2:
+            function f() {
+                return 20;
+            }
+            break;
+    }
+
+    try {
+      return f();
+    } catch (e) {
+      return -1;
+    }
+}
+
+shouldBe(t(1), '20');
+shouldBe(t(2), '20');
+shouldBe(t(3), '20');
diff --git a/deps/v8/test/webkit/function-dot-apply-replace-base-expected.txt b/deps/v8/test/webkit/function-dot-apply-replace-base-expected.txt
new file mode 100644 (file)
index 0000000..e93aa61
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that expressions of the form x = x.apply(...) don't break bytecode generation.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar() is 3
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/function-dot-apply-replace-base.js b/deps/v8/test/webkit/function-dot-apply-replace-base.js
new file mode 100644 (file)
index 0000000..ed0f84b
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that expressions of the form x = x.apply(...) don't break bytecode generation."
+);
+
+function foo(a,b) {
+    return a+b;
+}
+
+function bar() {
+    var x;
+
+    x = foo;
+
+    var array = [];
+    array.push(1);
+    array.push(2);
+
+    x = x.apply(void(0), array);
+
+    return x;
+}
+
+shouldBe("bar()", "3");
+
+
+
diff --git a/deps/v8/test/webkit/function-dot-length-read-only-expected.txt b/deps/v8/test/webkit/function-dot-length-read-only-expected.txt
new file mode 100644 (file)
index 0000000..1faff70
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that function.length correctly intercepts stores when a function is used as a prototype.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o.length is 0
+PASS o.length is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/function-dot-length-read-only.js b/deps/v8/test/webkit/function-dot-length-read-only.js
new file mode 100644 (file)
index 0000000..679d8b9
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that function.length correctly intercepts stores when a function is used as a prototype."
+);
+
+function foo() { }
+
+function Bar() { }
+Bar.prototype = foo;
+
+var o = new Bar();
+shouldBe("o.length", "0");
+o.length = 42;
+shouldBe("o.length", "0");
diff --git a/deps/v8/test/webkit/function-prototype-descriptor-expected.txt b/deps/v8/test/webkit/function-prototype-descriptor-expected.txt
new file mode 100644 (file)
index 0000000..c9a1090
--- /dev/null
@@ -0,0 +1,42 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for function.prototype's property descriptor.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS descriptor['writable'] is true
+PASS descriptor['enumerable'] is false
+PASS descriptor['configurable'] is false
+PASS descriptor['writable'] is true
+PASS descriptor['enumerable'] is false
+PASS descriptor['configurable'] is false
+PASS Object.defineProperty(c, 'prototype', { get: function(){} }) threw exception TypeError: Cannot redefine property: prototype.
+PASS descriptor['writable'] is true
+PASS descriptor['enumerable'] is false
+PASS descriptor['configurable'] is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/function-prototype-descriptor.js b/deps/v8/test/webkit/function-prototype-descriptor.js
new file mode 100644 (file)
index 0000000..89a19e9
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test for function.prototype\'s property descriptor.'
+);
+
+function test(func)
+{
+    // test function.prototype has the correct attributes - writable, enumerable, non-configurable.
+    descriptor = Object.getOwnPropertyDescriptor(func, 'prototype');
+    shouldBeTrue("descriptor['writable']");
+    shouldBeFalse("descriptor['enumerable']");
+    shouldBeFalse("descriptor['configurable']");
+}
+
+// Test prototype's attributes are correct.
+function a() {}
+test(a);
+
+// Test prototype's attributes are correct, if assigned without first having being accessed.
+function b() {}
+b.prototype = {};
+test(b);
+
+// Given that prototype is non-configurable, defineProperty should not be able to assign a getter to it.
+function c() {}
+shouldThrow("Object.defineProperty(c, 'prototype', { get: function(){} })");
+test(c);
diff --git a/deps/v8/test/webkit/function-toString-object-literals-expected.txt b/deps/v8/test/webkit/function-toString-object-literals-expected.txt
new file mode 100644 (file)
index 0000000..1b37162
--- /dev/null
@@ -0,0 +1,53 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that object literals are serialized properly. It's needed in part because JavaScriptCore converts numeric property names to string and back.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS compileAndSerialize('a = { 1: null }') is 'a = { 1: null }'
+PASS compileAndSerialize('a = { 0: null }') is 'a = { 0: null }'
+PASS compileAndSerialize('a = { 1.0: null }') is 'a = { 1.0: null }'
+PASS compileAndSerialize('a = { "1.0": null }') is 'a = { "1.0": null }'
+PASS compileAndSerialize('a = { 1e-500: null }') is 'a = { 1e-500: null }'
+PASS compileAndSerialize('a = { 1e-300: null }') is 'a = { 1e-300: null }'
+PASS compileAndSerialize('a = { 1e300: null }') is 'a = { 1e300: null }'
+PASS compileAndSerialize('a = { 1e500: null }') is 'a = { 1e500: null }'
+PASS compileAndSerialize('a = { NaN: null }') is 'a = { NaN: null }'
+PASS compileAndSerialize('a = { Infinity: null }') is 'a = { Infinity: null }'
+PASS compileAndSerialize('a = { "1": null }') is 'a = { "1": null }'
+PASS compileAndSerialize('a = { "1hi": null }') is 'a = { "1hi": null }'
+PASS compileAndSerialize('a = { "\'": null }') is 'a = { "\'": null }'
+PASS compileAndSerialize('a = { "\\"": null }') is 'a = { "\\"": null }'
+PASS compileAndSerialize('a = { get x() { } }') is 'a = { get x() { } }'
+PASS compileAndSerialize('a = { set x(y) { } }') is 'a = { set x(y) { } }'
+PASS compileAndSerialize('a = { --1: null }') threw exception SyntaxError: Unexpected token --.
+PASS compileAndSerialize('a = { -NaN: null }') threw exception SyntaxError: Unexpected token -.
+PASS compileAndSerialize('a = { -0: null }') threw exception SyntaxError: Unexpected token -.
+PASS compileAndSerialize('a = { -0.0: null }') threw exception SyntaxError: Unexpected token -.
+PASS compileAndSerialize('a = { -Infinity: null }') threw exception SyntaxError: Unexpected token -.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/function-toString-object-literals.js b/deps/v8/test/webkit/function-toString-object-literals.js
new file mode 100644 (file)
index 0000000..0cf18b9
--- /dev/null
@@ -0,0 +1,63 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that object literals are serialized properly. " +
+"It's needed in part because JavaScriptCore converts numeric property names to string and back."
+);
+
+function compileAndSerialize(expression)
+{
+    var f = eval("(function () { return " + expression + "; })");
+    var serializedString = f.toString();
+    serializedString = serializedString.replace(/[ \t\r\n]+/g, " ");
+    serializedString = serializedString.replace("function () { return ", "");
+    serializedString = serializedString.replace("; }", "");
+    return serializedString;
+}
+
+shouldBe("compileAndSerialize('a = { 1: null }')", "'a = { 1: null }'");
+shouldBe("compileAndSerialize('a = { 0: null }')", "'a = { 0: null }'");
+shouldBe("compileAndSerialize('a = { 1.0: null }')", "'a = { 1.0: null }'");
+shouldBe("compileAndSerialize('a = { \"1.0\": null }')", "'a = { \"1.0\": null }'");
+shouldBe("compileAndSerialize('a = { 1e-500: null }')", "'a = { 1e-500: null }'");
+shouldBe("compileAndSerialize('a = { 1e-300: null }')", "'a = { 1e-300: null }'");
+shouldBe("compileAndSerialize('a = { 1e300: null }')", "'a = { 1e300: null }'");
+shouldBe("compileAndSerialize('a = { 1e500: null }')", "'a = { 1e500: null }'");
+
+shouldBe("compileAndSerialize('a = { NaN: null }')", "'a = { NaN: null }'");
+shouldBe("compileAndSerialize('a = { Infinity: null }')", "'a = { Infinity: null }'");
+
+shouldBe("compileAndSerialize('a = { \"1\": null }')", "'a = { \"1\": null }'");
+shouldBe("compileAndSerialize('a = { \"1hi\": null }')", "'a = { \"1hi\": null }'");
+shouldBe("compileAndSerialize('a = { \"\\\'\": null }')", "'a = { \"\\\'\": null }'");
+shouldBe("compileAndSerialize('a = { \"\\\\\"\": null }')", "'a = { \"\\\\\"\": null }'");
+
+shouldBe("compileAndSerialize('a = { get x() { } }')", "'a = { get x() { } }'");
+shouldBe("compileAndSerialize('a = { set x(y) { } }')", "'a = { set x(y) { } }'");
+
+shouldThrow("compileAndSerialize('a = { --1: null }')");
+shouldThrow("compileAndSerialize('a = { -NaN: null }')");
+shouldThrow("compileAndSerialize('a = { -0: null }')");
+shouldThrow("compileAndSerialize('a = { -0.0: null }')");
+shouldThrow("compileAndSerialize('a = { -Infinity: null }')");
diff --git a/deps/v8/test/webkit/get-by-pname-expected.txt b/deps/v8/test/webkit/get-by-pname-expected.txt
new file mode 100644 (file)
index 0000000..29738eb
--- /dev/null
@@ -0,0 +1,532 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that op_get_by_pname is compiled correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/get-by-pname-non-final-object-expected.txt b/deps/v8/test/webkit/get-by-pname-non-final-object-expected.txt
new file mode 100644 (file)
index 0000000..b674132
--- /dev/null
@@ -0,0 +1,532 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that op_get_by_pname is compiled correctly for non-final objects.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/get-by-pname-non-final-object.js b/deps/v8/test/webkit/get-by-pname-non-final-object.js
new file mode 100644 (file)
index 0000000..f891af6
--- /dev/null
@@ -0,0 +1,73 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that op_get_by_pname is compiled correctly for non-final objects."
+);
+
+function foo(o) {
+    var result = 0;
+    for (var n in o)
+        result += o[n];
+    return result;
+}
+
+var o = new Date();
+var p = new Date();
+var q = new Date();
+var r = new Date();
+var s = new Date();
+o.a = 1;
+o.b = 3;
+o.c = 7;
+p.a = 1;
+p.b = 2;
+p.c = 3;
+p.d = 4;
+q.a = 1;
+q.b = 2;
+q.c = 3;
+q.d = 4;
+q.e = 3457;
+r.a = 1;
+r.b = 2;
+r.c = 3;
+r.d = 4;
+r.e = 91;
+r.f = 12;
+s.a = 1;
+s.b = 2;
+s.c = 3;
+s.d = 4;
+s.e = 91;
+s.f = 12;
+s.g = 69;
+
+for (var i = 0; i < 100; ++i) {
+    shouldBe("foo(o)", "11");
+    shouldBe("foo(p)", "10");
+    shouldBe("foo(q)", "3467");
+    shouldBe("foo(r)", "113");
+    shouldBe("foo(s)", "182");
+}
+
diff --git a/deps/v8/test/webkit/get-by-pname-that-looks-like-a-patchable-get-by-val-expected.txt b/deps/v8/test/webkit/get-by-pname-that-looks-like-a-patchable-get-by-val-expected.txt
new file mode 100644 (file)
index 0000000..b0e3837
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that using get_by_pname in a way that appears like a get_by_val that can be patched does not cause the patching machinery to crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo() is 300
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/get-by-pname-that-looks-like-a-patchable-get-by-val.js b/deps/v8/test/webkit/get-by-pname-that-looks-like-a-patchable-get-by-val.js
new file mode 100644 (file)
index 0000000..d3e69b6
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that using get_by_pname in a way that appears like a get_by_val that can be patched does not cause the patching machinery to crash."
+);
+
+function foo() {
+    var o = [1, 2, 3];
+    var result = 0;
+
+    for (var i = 0; i < 100; ++i) {
+        for (var s in o) {
+            s = 0;
+            result += o[s];
+        }
+    }
+
+    return result;
+}
+
+shouldBe("foo()", "300");
+
+
diff --git a/deps/v8/test/webkit/get-by-pname.js b/deps/v8/test/webkit/get-by-pname.js
new file mode 100644 (file)
index 0000000..13a7c5d
--- /dev/null
@@ -0,0 +1,48 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that op_get_by_pname is compiled correctly."
+);
+
+function foo(o) {
+    var result = 0;
+    for (var n in o)
+        result += o[n];
+    return result;
+}
+
+var o = {a:1, b:3, c:7};
+var p = {a:1, b:2, c:3, d:4};
+var q = {a:1, b:2, c:3, d:4, e:3457};
+var r = {a:1, b:2, c:3, d:4, e:91, f:12};
+var s = {a:1, b:2, c:3, d:4, e:91, f:12, g:69};
+
+for (var i = 0; i < 100; ++i) {
+    shouldBe("foo(o)", "11");
+    shouldBe("foo(p)", "10");
+    shouldBe("foo(q)", "3467");
+    shouldBe("foo(r)", "113");
+    shouldBe("foo(s)", "182");
+}
+
diff --git a/deps/v8/test/webkit/getter-setter-gc-expected.txt b/deps/v8/test/webkit/getter-setter-gc-expected.txt
new file mode 100644 (file)
index 0000000..08ca42f
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks whether getters and setters work correctly with garbage collection.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o.x is 242
+PASS o.x is 242
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/getter-setter-gc.js b/deps/v8/test/webkit/getter-setter-gc.js
new file mode 100644 (file)
index 0000000..108d8f2
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks whether getters and setters work correctly with garbage collection."
+);
+
+var o = {};
+o.__defineGetter__("x", function() { return 242; })
+
+shouldBe('o.x', '242');
+
+// Force a gc
+var i = 0;
+var s;
+while (i < 5000) {
+    i = i+1.11;
+    s = s + " ";
+}
+
+shouldBe('o.x', '242')
diff --git a/deps/v8/test/webkit/global-resolve-through-eval-expected.txt b/deps/v8/test/webkit/global-resolve-through-eval-expected.txt
new file mode 100644 (file)
index 0000000..ed09972
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Make sure we do a correct property resolution of a global object property when contained by eval.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS accessGlobal() is true
+PASS accessLocal() is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/global-resolve-through-eval.js b/deps/v8/test/webkit/global-resolve-through-eval.js
new file mode 100644 (file)
index 0000000..c638231
--- /dev/null
@@ -0,0 +1,32 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Make sure we do a correct property resolution of a global object property when contained by eval.");
+
+var pass = false;
+
+var accessGlobal = (function() { return eval("var pass=true; (function(){ return pass; })"); })();
+var accessLocal = (function() { var pass = false; return (function() { return eval("var pass=true; (function(){ return pass; })"); })(); })();
+
+shouldBeTrue("accessGlobal()");
+shouldBeTrue("accessLocal()");
diff --git a/deps/v8/test/webkit/gmail-re-re-expected.txt b/deps/v8/test/webkit/gmail-re-re-expected.txt
new file mode 100644 (file)
index 0000000..3adcf16
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Bug 7445, bug 7253: Handle Unicode escapes in regexps.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS cy("Re: Hello") is "Hello"
+PASS cy("Ответ: Hello") is "Hello"
+PASS regex.exec("24#Midnight").toString() is "24#Midnight,24,#,Midnight"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/gmail-re-re.js b/deps/v8/test/webkit/gmail-re-re.js
new file mode 100644 (file)
index 0000000..75ba4ba
--- /dev/null
@@ -0,0 +1,59 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Bug 7445, bug 7253: Handle Unicode escapes in regexps."
+);
+
+var I3=/^\s*(fwd|re|aw|antw|antwort|wg|sv|ang|odp|betreff|betr|transf|reenv\.|reenv|in|res|resp|resp\.|enc|\u8f6c\u53d1|\u56DE\u590D|\u041F\u0435\u0440\u0435\u0441\u043B|\u041E\u0442\u0432\u0435\u0442):\s*(.*)$/i;
+
+// Other RegExs from Gmail source
+var Ci=/\s+/g;
+var BC=/^ /;
+var BG=/ $/;
+
+// Strips leading Re or similar (from Gmail source)
+function cy(a) {
+    //var b = I3.exec(a);
+    var b = I3.exec(a);
+
+    if (b) {
+        a = b[2];
+    }
+
+    return Gn(a);
+}
+
+// This function replaces consecutive whitespace with a single space
+// then removes a leading and trailing space if they exist. (From Gmail)
+function Gn(a) {
+    return a.replace(Ci, " ").replace(BC, "").replace(BG, "");
+}
+
+shouldBe('cy("Re: Hello")', '"Hello"');
+shouldBe('cy("Ответ: Hello")', '"Hello"');
+
+// ---------------------------------------------------------------
+
+var regex = /^([^#<\u2264]+)([#<\u2264])(.*)$/;
+shouldBe('regex.exec("24#Midnight").toString()', '"24#Midnight,24,#,Midnight"');
diff --git a/deps/v8/test/webkit/has-own-property-expected.txt b/deps/v8/test/webkit/has-own-property-expected.txt
new file mode 100644 (file)
index 0000000..af68f3b
--- /dev/null
@@ -0,0 +1,38 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test verifies the behaviour of Object.prototype.hasOwnProperty, as documented in ECMA-262 rev3 section 15.2.4.5.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS typeof {foo : 'yum'}.hasOwnProperty is "function"
+PASS ({foo : 'yum'}).hasOwnProperty('foo') is true
+PASS ''.hasOwnProperty('length') is true
+PASS ({foo : 'yum'}).hasOwnProperty('bar') is false
+PASS ({foo : 'yum'}).hasOwnProperty('toString') is false
+PASS ''.hasOwnProperty('toString') is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/has-own-property.js b/deps/v8/test/webkit/has-own-property.js
new file mode 100644 (file)
index 0000000..0e0e9ec
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test verifies the behaviour of Object.prototype.hasOwnProperty, as documented in ECMA-262 rev3 section 15.2.4.5."
+);
+
+shouldBe("typeof {foo : 'yum'}.hasOwnProperty", '"function"');
+
+shouldBeTrue("({foo : 'yum'}).hasOwnProperty('foo')");
+shouldBeTrue("''.hasOwnProperty('length')");
+shouldBeFalse("({foo : 'yum'}).hasOwnProperty('bar')");
+shouldBeFalse("({foo : 'yum'}).hasOwnProperty('toString')");
+shouldBeFalse("''.hasOwnProperty('toString')");
diff --git a/deps/v8/test/webkit/ignored-result-null-comparison-crash-expected.txt b/deps/v8/test/webkit/ignored-result-null-comparison-crash-expected.txt
new file mode 100644 (file)
index 0000000..4efe681
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that bytecode generation doesn't crash on a comparison to null with an ignored result.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS equalToNullTest() is true
+PASS notEqualToNullTest() is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/ignored-result-null-comparison-crash.js b/deps/v8/test/webkit/ignored-result-null-comparison-crash.js
new file mode 100644 (file)
index 0000000..b648355
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that bytecode generation doesn't crash on a comparison to null with an ignored result."
+);
+
+function equalToNullTest(a)
+{
+    a == null;
+    return true;
+}
+
+shouldBeTrue("equalToNullTest()");
+
+function notEqualToNullTest(a)
+{
+    a != null;
+    return true;
+}
+
+shouldBeTrue("notEqualToNullTest()");
diff --git a/deps/v8/test/webkit/ignored-result-ref-crash-expected.txt b/deps/v8/test/webkit/ignored-result-ref-crash-expected.txt
new file mode 100644 (file)
index 0000000..115afd4
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that bytecode code generation doesn't crash when it encounters odd cases of an ignored result.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS emptyStatementDoWhileTest() is true
+PASS debuggerDoWhileTest() is true
+PASS continueDoWhileTest() is true
+PASS breakDoWhileTest() is true
+PASS tryDoWhileTest() is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/ignored-result-ref-crash.js b/deps/v8/test/webkit/ignored-result-ref-crash.js
new file mode 100644 (file)
index 0000000..d2deea2
--- /dev/null
@@ -0,0 +1,86 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that bytecode code generation doesn't crash when it encounters odd cases of an ignored result."
+);
+
+function emptyStatementDoWhileTest()
+{
+    do
+        ;
+    while (false) { }
+    return true;
+}
+
+shouldBeTrue("emptyStatementDoWhileTest()");
+
+function debuggerDoWhileTest()
+{
+    do
+        debugger;
+    while (false) { }
+    return true;
+}
+
+shouldBeTrue("debuggerDoWhileTest()");
+
+function continueDoWhileTest()
+{
+    var i = 0;
+    do
+        i++;
+    while (i < 10) {
+        do
+            continue;
+        while (false) { }
+    }
+    return true;
+}
+
+shouldBeTrue("continueDoWhileTest()");
+
+function breakDoWhileTest()
+{
+    var i = 0;
+    do
+        i++;
+    while (i < 10) {
+        do
+            continue;
+        while (false) { }
+    }
+    return true;
+}
+
+shouldBeTrue("breakDoWhileTest()");
+
+function tryDoWhileTest()
+{
+    do
+        try { } catch (o) { }
+    while (false) { }
+    return true;
+}
+
+shouldBeTrue("tryDoWhileTest()");
diff --git a/deps/v8/test/webkit/indexed-setter-on-global-object-expected.txt b/deps/v8/test/webkit/indexed-setter-on-global-object-expected.txt
new file mode 100644 (file)
index 0000000..36d2516
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that creating an indexed setter on the global object doesn't break things.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS thingy is "foo"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/indexed-setter-on-global-object.js b/deps/v8/test/webkit/indexed-setter-on-global-object.js
new file mode 100644 (file)
index 0000000..8453206
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that creating an indexed setter on the global object doesn't break things."
+);
+
+var thingy;
+
+this.__defineSetter__(42, function(value) {
+    thingy = value;
+});
+
+this[42] = "foo";
+
+shouldBe("thingy", "\"foo\"");
+
diff --git a/deps/v8/test/webkit/instance-of-immediates-expected.txt b/deps/v8/test/webkit/instance-of-immediates-expected.txt
new file mode 100644 (file)
index 0000000..a6f6cc5
--- /dev/null
@@ -0,0 +1,50 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test makes sure that instance of behaves correctly when the value, constructor, or its prototype are immediates.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS (1 instanceof 1) threw exception TypeError: Expecting a function in instanceof check, but got 1.
+PASS ({} instanceof 1) threw exception TypeError: Expecting a function in instanceof check, but got #<Object>.
+PASS (obj instanceof 1) threw exception TypeError: Expecting a function in instanceof check, but got #<Constructor>.
+PASS (1 instanceof {}) threw exception TypeError: Expecting a function in instanceof check, but got 1.
+PASS ({} instanceof {}) threw exception TypeError: Expecting a function in instanceof check, but got #<Object>.
+PASS (obj instanceof {}) threw exception TypeError: Expecting a function in instanceof check, but got #<Constructor>.
+PASS (1 instanceof Constructor) is false
+PASS ({} instanceof Constructor) is false
+PASS (obj instanceof Constructor) is true
+PASS (1 instanceof Constructor) is false
+PASS ({} instanceof Constructor) threw exception TypeError: Function has non-object prototype '1' in instanceof check.
+PASS (obj instanceof Constructor) threw exception TypeError: Function has non-object prototype '1' in instanceof check.
+PASS (1 instanceof Constructor) is false
+PASS ({} instanceof Constructor) is false
+PASS (obj instanceof Constructor) is false
+PASS (1 instanceof Constructor) is false
+PASS ({} instanceof Constructor) threw exception TypeError: Function has non-object prototype 'null' in instanceof check.
+PASS (obj instanceof Constructor) threw exception TypeError: Function has non-object prototype 'null' in instanceof check.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/instance-of-immediates.js b/deps/v8/test/webkit/instance-of-immediates.js
new file mode 100644 (file)
index 0000000..649a29f
--- /dev/null
@@ -0,0 +1,63 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('This test makes sure that instance of behaves correctly when the value, constructor, or its prototype are immediates.');
+
+// A Constructor to use check for instances of, and an instance called obj.
+function Constructor() {}
+var obj = new Constructor();
+
+// Run a batch of tests; call'testInstanceOf' three times, passing 1, {}, and the object 'obj', which is an instance of Constructor.
+function testSet(constructor, testMethod)
+{
+    testMethod["1"]("(1 instanceof " + constructor + ")");
+    testMethod["{}"]("({} instanceof " + constructor + ")");
+    testMethod["obj"]("(obj instanceof " + constructor + ")");
+}
+
+// Test set 1, test passing the integer 1 as the constructor to be tested for.
+// The constructor being an object is the first thing tested, so these should all throw.
+testSet("1", { "1":shouldThrow, "{}":shouldThrow, "obj":shouldThrow });
+
+// Test set 2, test passing an empty object ({}) as the constructor to be tested for.
+// As well as being an object, the constructor must implement 'HasInstance' (i.e. be a function), so these should all throw too.
+testSet("{}", { "1":shouldThrow, "{}":shouldThrow, "obj":shouldThrow });
+
+// Test set 3, test passing Constructor as the constructor to be tested for.
+// Nothing should except, the third test should pass, since obj is an instance of Constructor.
+testSet("Constructor", { "1":shouldBeFalse, "{}":shouldBeFalse, "obj":shouldBeTrue });
+
+// Test set 4, test passing Constructor as the constructor to be tested for - with Constructor.prototype set to the integer 1.
+// Constructor.prototype being a non-object will cause an exception, /unless/ value is also a non-object, since this is checked first.
+Constructor.prototype = 1;
+testSet("Constructor", { "1":shouldBeFalse, "{}":shouldThrow, "obj":shouldThrow });
+
+// Test set 5, test passing Constructor as the constructor to be tested for - with Constructor.prototype set to an empty object ({}).
+// All test fail, no reason to throw.  (obj instanceof Constructor) is now false, since Constructor.prototype has changed.
+Constructor.prototype = {};
+testSet("Constructor", { "1":shouldBeFalse, "{}":shouldBeFalse, "obj":shouldBeFalse });
+
+// Test set 6, test passing Constructor as the constructor to be tested for - with Constructor.prototype set to null.
+// Test that behaviour is the same as for test set 4.
+Constructor.prototype = null;
+testSet("Constructor", { "1":shouldBeFalse, "{}":shouldThrow, "obj":shouldThrow });
diff --git a/deps/v8/test/webkit/instanceof-operator-expected.txt b/deps/v8/test/webkit/instanceof-operator-expected.txt
new file mode 100644 (file)
index 0000000..6ea1d27
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+instanceof test
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS getterCalled is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/instanceof-operator.js b/deps/v8/test/webkit/instanceof-operator.js
new file mode 100644 (file)
index 0000000..1230181
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"instanceof test"
+);
+
+getterCalled = false;
+try {
+    ({} instanceof { get prototype(){ getterCalled = true; } });
+} catch (e) {
+}
+shouldBeFalse("getterCalled");
diff --git a/deps/v8/test/webkit/integer-extremes-expected.txt b/deps/v8/test/webkit/integer-extremes-expected.txt
new file mode 100644 (file)
index 0000000..3836be7
--- /dev/null
@@ -0,0 +1,641 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test verifies that the bit twiddling done in JavaScriptCore's integer machinery works correctly on the current platform.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS (-1).toString() is "-1"
+PASS (0).toString() is "0"
+PASS (-0).toString() is "0"
+
+bits used to store value: 8
+PASS min.toString() is "-128"
+PASS (min - 1).toString() is "-129"
+PASS max.toString() is "127"
+PASS (max + 1).toString() is "128"
+bits used to store value: 9
+PASS min.toString() is "-256"
+PASS (min - 1).toString() is "-257"
+PASS max.toString() is "255"
+PASS (max + 1).toString() is "256"
+bits used to store value: 10
+PASS min.toString() is "-512"
+PASS (min - 1).toString() is "-513"
+PASS max.toString() is "511"
+PASS (max + 1).toString() is "512"
+bits used to store value: 11
+PASS min.toString() is "-1024"
+PASS (min - 1).toString() is "-1025"
+PASS max.toString() is "1023"
+PASS (max + 1).toString() is "1024"
+bits used to store value: 12
+PASS min.toString() is "-2048"
+PASS (min - 1).toString() is "-2049"
+PASS max.toString() is "2047"
+PASS (max + 1).toString() is "2048"
+bits used to store value: 13
+PASS min.toString() is "-4096"
+PASS (min - 1).toString() is "-4097"
+PASS max.toString() is "4095"
+PASS (max + 1).toString() is "4096"
+bits used to store value: 14
+PASS min.toString() is "-8192"
+PASS (min - 1).toString() is "-8193"
+PASS max.toString() is "8191"
+PASS (max + 1).toString() is "8192"
+bits used to store value: 15
+PASS min.toString() is "-16384"
+PASS (min - 1).toString() is "-16385"
+PASS max.toString() is "16383"
+PASS (max + 1).toString() is "16384"
+bits used to store value: 16
+PASS min.toString() is "-32768"
+PASS (min - 1).toString() is "-32769"
+PASS max.toString() is "32767"
+PASS (max + 1).toString() is "32768"
+bits used to store value: 17
+PASS min.toString() is "-65536"
+PASS (min - 1).toString() is "-65537"
+PASS max.toString() is "65535"
+PASS (max + 1).toString() is "65536"
+bits used to store value: 18
+PASS min.toString() is "-131072"
+PASS (min - 1).toString() is "-131073"
+PASS max.toString() is "131071"
+PASS (max + 1).toString() is "131072"
+bits used to store value: 19
+PASS min.toString() is "-262144"
+PASS (min - 1).toString() is "-262145"
+PASS max.toString() is "262143"
+PASS (max + 1).toString() is "262144"
+bits used to store value: 20
+PASS min.toString() is "-524288"
+PASS (min - 1).toString() is "-524289"
+PASS max.toString() is "524287"
+PASS (max + 1).toString() is "524288"
+bits used to store value: 21
+PASS min.toString() is "-1048576"
+PASS (min - 1).toString() is "-1048577"
+PASS max.toString() is "1048575"
+PASS (max + 1).toString() is "1048576"
+bits used to store value: 22
+PASS min.toString() is "-2097152"
+PASS (min - 1).toString() is "-2097153"
+PASS max.toString() is "2097151"
+PASS (max + 1).toString() is "2097152"
+bits used to store value: 23
+PASS min.toString() is "-4194304"
+PASS (min - 1).toString() is "-4194305"
+PASS max.toString() is "4194303"
+PASS (max + 1).toString() is "4194304"
+bits used to store value: 24
+PASS min.toString() is "-8388608"
+PASS (min - 1).toString() is "-8388609"
+PASS max.toString() is "8388607"
+PASS (max + 1).toString() is "8388608"
+bits used to store value: 25
+PASS min.toString() is "-16777216"
+PASS (min - 1).toString() is "-16777217"
+PASS max.toString() is "16777215"
+PASS (max + 1).toString() is "16777216"
+bits used to store value: 26
+PASS min.toString() is "-33554432"
+PASS (min - 1).toString() is "-33554433"
+PASS max.toString() is "33554431"
+PASS (max + 1).toString() is "33554432"
+bits used to store value: 27
+PASS min.toString() is "-67108864"
+PASS (min - 1).toString() is "-67108865"
+PASS max.toString() is "67108863"
+PASS (max + 1).toString() is "67108864"
+bits used to store value: 28
+PASS min.toString() is "-134217728"
+PASS (min - 1).toString() is "-134217729"
+PASS max.toString() is "134217727"
+PASS (max + 1).toString() is "134217728"
+bits used to store value: 29
+PASS min.toString() is "-268435456"
+PASS (min - 1).toString() is "-268435457"
+PASS max.toString() is "268435455"
+PASS (max + 1).toString() is "268435456"
+bits used to store value: 30
+PASS min.toString() is "-536870912"
+PASS (min - 1).toString() is "-536870913"
+PASS max.toString() is "536870911"
+PASS (max + 1).toString() is "536870912"
+bits used to store value: 31
+PASS min.toString() is "-1073741824"
+PASS (min - 1).toString() is "-1073741825"
+PASS max.toString() is "1073741823"
+PASS (max + 1).toString() is "1073741824"
+bits used to store value: 32
+PASS min.toString() is "-2147483648"
+PASS (min - 1).toString() is "-2147483649"
+PASS max.toString() is "2147483647"
+PASS (max + 1).toString() is "2147483648"
+bits used to store value: 33
+PASS min.toString() is "-4294967296"
+PASS (min - 1).toString() is "-4294967297"
+PASS max.toString() is "4294967295"
+PASS (max + 1).toString() is "4294967296"
+bits used to store value: 34
+PASS min.toString() is "-8589934592"
+PASS (min - 1).toString() is "-8589934593"
+PASS max.toString() is "8589934591"
+PASS (max + 1).toString() is "8589934592"
+bits used to store value: 35
+PASS min.toString() is "-17179869184"
+PASS (min - 1).toString() is "-17179869185"
+PASS max.toString() is "17179869183"
+PASS (max + 1).toString() is "17179869184"
+bits used to store value: 36
+PASS min.toString() is "-34359738368"
+PASS (min - 1).toString() is "-34359738369"
+PASS max.toString() is "34359738367"
+PASS (max + 1).toString() is "34359738368"
+bits used to store value: 37
+PASS min.toString() is "-68719476736"
+PASS (min - 1).toString() is "-68719476737"
+PASS max.toString() is "68719476735"
+PASS (max + 1).toString() is "68719476736"
+bits used to store value: 38
+PASS min.toString() is "-137438953472"
+PASS (min - 1).toString() is "-137438953473"
+PASS max.toString() is "137438953471"
+PASS (max + 1).toString() is "137438953472"
+bits used to store value: 39
+PASS min.toString() is "-274877906944"
+PASS (min - 1).toString() is "-274877906945"
+PASS max.toString() is "274877906943"
+PASS (max + 1).toString() is "274877906944"
+bits used to store value: 40
+PASS min.toString() is "-549755813888"
+PASS (min - 1).toString() is "-549755813889"
+PASS max.toString() is "549755813887"
+PASS (max + 1).toString() is "549755813888"
+bits used to store value: 41
+PASS min.toString() is "-1099511627776"
+PASS (min - 1).toString() is "-1099511627777"
+PASS max.toString() is "1099511627775"
+PASS (max + 1).toString() is "1099511627776"
+bits used to store value: 42
+PASS min.toString() is "-2199023255552"
+PASS (min - 1).toString() is "-2199023255553"
+PASS max.toString() is "2199023255551"
+PASS (max + 1).toString() is "2199023255552"
+bits used to store value: 43
+PASS min.toString() is "-4398046511104"
+PASS (min - 1).toString() is "-4398046511105"
+PASS max.toString() is "4398046511103"
+PASS (max + 1).toString() is "4398046511104"
+bits used to store value: 44
+PASS min.toString() is "-8796093022208"
+PASS (min - 1).toString() is "-8796093022209"
+PASS max.toString() is "8796093022207"
+PASS (max + 1).toString() is "8796093022208"
+bits used to store value: 45
+PASS min.toString() is "-17592186044416"
+PASS (min - 1).toString() is "-17592186044417"
+PASS max.toString() is "17592186044415"
+PASS (max + 1).toString() is "17592186044416"
+bits used to store value: 46
+PASS min.toString() is "-35184372088832"
+PASS (min - 1).toString() is "-35184372088833"
+PASS max.toString() is "35184372088831"
+PASS (max + 1).toString() is "35184372088832"
+bits used to store value: 47
+PASS min.toString() is "-70368744177664"
+PASS (min - 1).toString() is "-70368744177665"
+PASS max.toString() is "70368744177663"
+PASS (max + 1).toString() is "70368744177664"
+bits used to store value: 48
+PASS min.toString() is "-140737488355328"
+PASS (min - 1).toString() is "-140737488355329"
+PASS max.toString() is "140737488355327"
+PASS (max + 1).toString() is "140737488355328"
+bits used to store value: 49
+PASS min.toString() is "-281474976710656"
+PASS (min - 1).toString() is "-281474976710657"
+PASS max.toString() is "281474976710655"
+PASS (max + 1).toString() is "281474976710656"
+bits used to store value: 50
+PASS min.toString() is "-562949953421312"
+PASS (min - 1).toString() is "-562949953421313"
+PASS max.toString() is "562949953421311"
+PASS (max + 1).toString() is "562949953421312"
+bits used to store value: 51
+PASS min.toString() is "-1125899906842624"
+PASS (min - 1).toString() is "-1125899906842625"
+PASS max.toString() is "1125899906842623"
+PASS (max + 1).toString() is "1125899906842624"
+bits used to store value: 52
+PASS min.toString() is "-2251799813685248"
+PASS (min - 1).toString() is "-2251799813685249"
+PASS max.toString() is "2251799813685247"
+PASS (max + 1).toString() is "2251799813685248"
+bits used to store value: 53
+PASS min.toString() is "-4503599627370496"
+PASS (min - 1).toString() is "-4503599627370497"
+PASS max.toString() is "4503599627370495"
+PASS (max + 1).toString() is "4503599627370496"
+bits used to store value: 54
+PASS min.toString() is "-9007199254740992"
+PASS (min - 1).toString() is "-9007199254740992"
+PASS max.toString() is "9007199254740991"
+PASS (max + 1).toString() is "9007199254740992"
+bits used to store value: 55
+PASS min.toString() is "-18014398509481984"
+PASS (min - 1).toString() is "-18014398509481984"
+PASS max.toString() is "18014398509481984"
+PASS (max + 1).toString() is "18014398509481984"
+bits used to store value: 56
+PASS min.toString() is "-36028797018963970"
+PASS (min - 1).toString() is "-36028797018963970"
+PASS max.toString() is "36028797018963970"
+PASS (max + 1).toString() is "36028797018963970"
+bits used to store value: 57
+PASS min.toString() is "-72057594037927940"
+PASS (min - 1).toString() is "-72057594037927940"
+PASS max.toString() is "72057594037927940"
+PASS (max + 1).toString() is "72057594037927940"
+bits used to store value: 58
+PASS min.toString() is "-144115188075855870"
+PASS (min - 1).toString() is "-144115188075855870"
+PASS max.toString() is "144115188075855870"
+PASS (max + 1).toString() is "144115188075855870"
+bits used to store value: 59
+PASS min.toString() is "-288230376151711740"
+PASS (min - 1).toString() is "-288230376151711740"
+PASS max.toString() is "288230376151711740"
+PASS (max + 1).toString() is "288230376151711740"
+bits used to store value: 60
+PASS min.toString() is "-576460752303423500"
+PASS (min - 1).toString() is "-576460752303423500"
+PASS max.toString() is "576460752303423500"
+PASS (max + 1).toString() is "576460752303423500"
+bits used to store value: 61
+PASS min.toString() is "-1152921504606847000"
+PASS (min - 1).toString() is "-1152921504606847000"
+PASS max.toString() is "1152921504606847000"
+PASS (max + 1).toString() is "1152921504606847000"
+bits used to store value: 62
+PASS min.toString() is "-2305843009213694000"
+PASS (min - 1).toString() is "-2305843009213694000"
+PASS max.toString() is "2305843009213694000"
+PASS (max + 1).toString() is "2305843009213694000"
+bits used to store value: 63
+PASS min.toString() is "-4611686018427388000"
+PASS (min - 1).toString() is "-4611686018427388000"
+PASS max.toString() is "4611686018427388000"
+PASS (max + 1).toString() is "4611686018427388000"
+bits used to store value: 64
+PASS min.toString() is "-9223372036854776000"
+PASS (min - 1).toString() is "-9223372036854776000"
+PASS max.toString() is "9223372036854776000"
+PASS (max + 1).toString() is "9223372036854776000"
+bits used to store value: 65
+PASS min.toString() is "-18446744073709552000"
+PASS (min - 1).toString() is "-18446744073709552000"
+PASS max.toString() is "18446744073709552000"
+PASS (max + 1).toString() is "18446744073709552000"
+bits used to store value: 66
+PASS min.toString() is "-36893488147419103000"
+PASS (min - 1).toString() is "-36893488147419103000"
+PASS max.toString() is "36893488147419103000"
+PASS (max + 1).toString() is "36893488147419103000"
+bits used to store value: 67
+PASS min.toString() is "-73786976294838210000"
+PASS (min - 1).toString() is "-73786976294838210000"
+PASS max.toString() is "73786976294838210000"
+PASS (max + 1).toString() is "73786976294838210000"
+bits used to store value: 68
+PASS min.toString() is "-147573952589676410000"
+PASS (min - 1).toString() is "-147573952589676410000"
+PASS max.toString() is "147573952589676410000"
+PASS (max + 1).toString() is "147573952589676410000"
+bits used to store value: 69
+PASS min.toString() is "-295147905179352830000"
+PASS (min - 1).toString() is "-295147905179352830000"
+PASS max.toString() is "295147905179352830000"
+PASS (max + 1).toString() is "295147905179352830000"
+bits used to store value: 70
+PASS min.toString() is "-590295810358705700000"
+PASS (min - 1).toString() is "-590295810358705700000"
+PASS max.toString() is "590295810358705700000"
+PASS (max + 1).toString() is "590295810358705700000"
+bits used to store value: 71
+PASS min.toString() is "-1.1805916207174113e+21"
+PASS (min - 1).toString() is "-1.1805916207174113e+21"
+PASS max.toString() is "1.1805916207174113e+21"
+PASS (max + 1).toString() is "1.1805916207174113e+21"
+bits used to store value: 72
+PASS min.toString() is "-2.3611832414348226e+21"
+PASS (min - 1).toString() is "-2.3611832414348226e+21"
+PASS max.toString() is "2.3611832414348226e+21"
+PASS (max + 1).toString() is "2.3611832414348226e+21"
+bits used to store value: 73
+PASS min.toString() is "-4.722366482869645e+21"
+PASS (min - 1).toString() is "-4.722366482869645e+21"
+PASS max.toString() is "4.722366482869645e+21"
+PASS (max + 1).toString() is "4.722366482869645e+21"
+bits used to store value: 74
+PASS min.toString() is "-9.44473296573929e+21"
+PASS (min - 1).toString() is "-9.44473296573929e+21"
+PASS max.toString() is "9.44473296573929e+21"
+PASS (max + 1).toString() is "9.44473296573929e+21"
+bits used to store value: 75
+PASS min.toString() is "-1.888946593147858e+22"
+PASS (min - 1).toString() is "-1.888946593147858e+22"
+PASS max.toString() is "1.888946593147858e+22"
+PASS (max + 1).toString() is "1.888946593147858e+22"
+bits used to store value: 76
+PASS min.toString() is "-3.777893186295716e+22"
+PASS (min - 1).toString() is "-3.777893186295716e+22"
+PASS max.toString() is "3.777893186295716e+22"
+PASS (max + 1).toString() is "3.777893186295716e+22"
+bits used to store value: 77
+PASS min.toString() is "-7.555786372591432e+22"
+PASS (min - 1).toString() is "-7.555786372591432e+22"
+PASS max.toString() is "7.555786372591432e+22"
+PASS (max + 1).toString() is "7.555786372591432e+22"
+bits used to store value: 78
+PASS min.toString() is "-1.5111572745182865e+23"
+PASS (min - 1).toString() is "-1.5111572745182865e+23"
+PASS max.toString() is "1.5111572745182865e+23"
+PASS (max + 1).toString() is "1.5111572745182865e+23"
+bits used to store value: 79
+PASS min.toString() is "-3.022314549036573e+23"
+PASS (min - 1).toString() is "-3.022314549036573e+23"
+PASS max.toString() is "3.022314549036573e+23"
+PASS (max + 1).toString() is "3.022314549036573e+23"
+bits used to store value: 80
+PASS min.toString() is "-6.044629098073146e+23"
+PASS (min - 1).toString() is "-6.044629098073146e+23"
+PASS max.toString() is "6.044629098073146e+23"
+PASS (max + 1).toString() is "6.044629098073146e+23"
+bits used to store value: 81
+PASS min.toString() is "-1.2089258196146292e+24"
+PASS (min - 1).toString() is "-1.2089258196146292e+24"
+PASS max.toString() is "1.2089258196146292e+24"
+PASS (max + 1).toString() is "1.2089258196146292e+24"
+bits used to store value: 82
+PASS min.toString() is "-2.4178516392292583e+24"
+PASS (min - 1).toString() is "-2.4178516392292583e+24"
+PASS max.toString() is "2.4178516392292583e+24"
+PASS (max + 1).toString() is "2.4178516392292583e+24"
+bits used to store value: 83
+PASS min.toString() is "-4.835703278458517e+24"
+PASS (min - 1).toString() is "-4.835703278458517e+24"
+PASS max.toString() is "4.835703278458517e+24"
+PASS (max + 1).toString() is "4.835703278458517e+24"
+bits used to store value: 84
+PASS min.toString() is "-9.671406556917033e+24"
+PASS (min - 1).toString() is "-9.671406556917033e+24"
+PASS max.toString() is "9.671406556917033e+24"
+PASS (max + 1).toString() is "9.671406556917033e+24"
+bits used to store value: 85
+PASS min.toString() is "-1.9342813113834067e+25"
+PASS (min - 1).toString() is "-1.9342813113834067e+25"
+PASS max.toString() is "1.9342813113834067e+25"
+PASS (max + 1).toString() is "1.9342813113834067e+25"
+bits used to store value: 86
+PASS min.toString() is "-3.8685626227668134e+25"
+PASS (min - 1).toString() is "-3.8685626227668134e+25"
+PASS max.toString() is "3.8685626227668134e+25"
+PASS (max + 1).toString() is "3.8685626227668134e+25"
+bits used to store value: 87
+PASS min.toString() is "-7.737125245533627e+25"
+PASS (min - 1).toString() is "-7.737125245533627e+25"
+PASS max.toString() is "7.737125245533627e+25"
+PASS (max + 1).toString() is "7.737125245533627e+25"
+bits used to store value: 88
+PASS min.toString() is "-1.5474250491067253e+26"
+PASS (min - 1).toString() is "-1.5474250491067253e+26"
+PASS max.toString() is "1.5474250491067253e+26"
+PASS (max + 1).toString() is "1.5474250491067253e+26"
+bits used to store value: 89
+PASS min.toString() is "-3.094850098213451e+26"
+PASS (min - 1).toString() is "-3.094850098213451e+26"
+PASS max.toString() is "3.094850098213451e+26"
+PASS (max + 1).toString() is "3.094850098213451e+26"
+bits used to store value: 90
+PASS min.toString() is "-6.189700196426902e+26"
+PASS (min - 1).toString() is "-6.189700196426902e+26"
+PASS max.toString() is "6.189700196426902e+26"
+PASS (max + 1).toString() is "6.189700196426902e+26"
+bits used to store value: 91
+PASS min.toString() is "-1.2379400392853803e+27"
+PASS (min - 1).toString() is "-1.2379400392853803e+27"
+PASS max.toString() is "1.2379400392853803e+27"
+PASS (max + 1).toString() is "1.2379400392853803e+27"
+bits used to store value: 92
+PASS min.toString() is "-2.4758800785707605e+27"
+PASS (min - 1).toString() is "-2.4758800785707605e+27"
+PASS max.toString() is "2.4758800785707605e+27"
+PASS (max + 1).toString() is "2.4758800785707605e+27"
+bits used to store value: 93
+PASS min.toString() is "-4.951760157141521e+27"
+PASS (min - 1).toString() is "-4.951760157141521e+27"
+PASS max.toString() is "4.951760157141521e+27"
+PASS (max + 1).toString() is "4.951760157141521e+27"
+bits used to store value: 94
+PASS min.toString() is "-9.903520314283042e+27"
+PASS (min - 1).toString() is "-9.903520314283042e+27"
+PASS max.toString() is "9.903520314283042e+27"
+PASS (max + 1).toString() is "9.903520314283042e+27"
+bits used to store value: 95
+PASS min.toString() is "-1.9807040628566084e+28"
+PASS (min - 1).toString() is "-1.9807040628566084e+28"
+PASS max.toString() is "1.9807040628566084e+28"
+PASS (max + 1).toString() is "1.9807040628566084e+28"
+bits used to store value: 96
+PASS min.toString() is "-3.961408125713217e+28"
+PASS (min - 1).toString() is "-3.961408125713217e+28"
+PASS max.toString() is "3.961408125713217e+28"
+PASS (max + 1).toString() is "3.961408125713217e+28"
+bits used to store value: 97
+PASS min.toString() is "-7.922816251426434e+28"
+PASS (min - 1).toString() is "-7.922816251426434e+28"
+PASS max.toString() is "7.922816251426434e+28"
+PASS (max + 1).toString() is "7.922816251426434e+28"
+bits used to store value: 98
+PASS min.toString() is "-1.5845632502852868e+29"
+PASS (min - 1).toString() is "-1.5845632502852868e+29"
+PASS max.toString() is "1.5845632502852868e+29"
+PASS (max + 1).toString() is "1.5845632502852868e+29"
+bits used to store value: 99
+PASS min.toString() is "-3.1691265005705735e+29"
+PASS (min - 1).toString() is "-3.1691265005705735e+29"
+PASS max.toString() is "3.1691265005705735e+29"
+PASS (max + 1).toString() is "3.1691265005705735e+29"
+bits used to store value: 100
+PASS min.toString() is "-6.338253001141147e+29"
+PASS (min - 1).toString() is "-6.338253001141147e+29"
+PASS max.toString() is "6.338253001141147e+29"
+PASS (max + 1).toString() is "6.338253001141147e+29"
+bits used to store value: 101
+PASS min.toString() is "-1.2676506002282294e+30"
+PASS (min - 1).toString() is "-1.2676506002282294e+30"
+PASS max.toString() is "1.2676506002282294e+30"
+PASS (max + 1).toString() is "1.2676506002282294e+30"
+bits used to store value: 102
+PASS min.toString() is "-2.535301200456459e+30"
+PASS (min - 1).toString() is "-2.535301200456459e+30"
+PASS max.toString() is "2.535301200456459e+30"
+PASS (max + 1).toString() is "2.535301200456459e+30"
+bits used to store value: 103
+PASS min.toString() is "-5.070602400912918e+30"
+PASS (min - 1).toString() is "-5.070602400912918e+30"
+PASS max.toString() is "5.070602400912918e+30"
+PASS (max + 1).toString() is "5.070602400912918e+30"
+bits used to store value: 104
+PASS min.toString() is "-1.0141204801825835e+31"
+PASS (min - 1).toString() is "-1.0141204801825835e+31"
+PASS max.toString() is "1.0141204801825835e+31"
+PASS (max + 1).toString() is "1.0141204801825835e+31"
+bits used to store value: 105
+PASS min.toString() is "-2.028240960365167e+31"
+PASS (min - 1).toString() is "-2.028240960365167e+31"
+PASS max.toString() is "2.028240960365167e+31"
+PASS (max + 1).toString() is "2.028240960365167e+31"
+bits used to store value: 106
+PASS min.toString() is "-4.056481920730334e+31"
+PASS (min - 1).toString() is "-4.056481920730334e+31"
+PASS max.toString() is "4.056481920730334e+31"
+PASS (max + 1).toString() is "4.056481920730334e+31"
+bits used to store value: 107
+PASS min.toString() is "-8.112963841460668e+31"
+PASS (min - 1).toString() is "-8.112963841460668e+31"
+PASS max.toString() is "8.112963841460668e+31"
+PASS (max + 1).toString() is "8.112963841460668e+31"
+bits used to store value: 108
+PASS min.toString() is "-1.6225927682921336e+32"
+PASS (min - 1).toString() is "-1.6225927682921336e+32"
+PASS max.toString() is "1.6225927682921336e+32"
+PASS (max + 1).toString() is "1.6225927682921336e+32"
+bits used to store value: 109
+PASS min.toString() is "-3.2451855365842673e+32"
+PASS (min - 1).toString() is "-3.2451855365842673e+32"
+PASS max.toString() is "3.2451855365842673e+32"
+PASS (max + 1).toString() is "3.2451855365842673e+32"
+bits used to store value: 110
+PASS min.toString() is "-6.490371073168535e+32"
+PASS (min - 1).toString() is "-6.490371073168535e+32"
+PASS max.toString() is "6.490371073168535e+32"
+PASS (max + 1).toString() is "6.490371073168535e+32"
+bits used to store value: 111
+PASS min.toString() is "-1.298074214633707e+33"
+PASS (min - 1).toString() is "-1.298074214633707e+33"
+PASS max.toString() is "1.298074214633707e+33"
+PASS (max + 1).toString() is "1.298074214633707e+33"
+bits used to store value: 112
+PASS min.toString() is "-2.596148429267414e+33"
+PASS (min - 1).toString() is "-2.596148429267414e+33"
+PASS max.toString() is "2.596148429267414e+33"
+PASS (max + 1).toString() is "2.596148429267414e+33"
+bits used to store value: 113
+PASS min.toString() is "-5.192296858534828e+33"
+PASS (min - 1).toString() is "-5.192296858534828e+33"
+PASS max.toString() is "5.192296858534828e+33"
+PASS (max + 1).toString() is "5.192296858534828e+33"
+bits used to store value: 114
+PASS min.toString() is "-1.0384593717069655e+34"
+PASS (min - 1).toString() is "-1.0384593717069655e+34"
+PASS max.toString() is "1.0384593717069655e+34"
+PASS (max + 1).toString() is "1.0384593717069655e+34"
+bits used to store value: 115
+PASS min.toString() is "-2.076918743413931e+34"
+PASS (min - 1).toString() is "-2.076918743413931e+34"
+PASS max.toString() is "2.076918743413931e+34"
+PASS (max + 1).toString() is "2.076918743413931e+34"
+bits used to store value: 116
+PASS min.toString() is "-4.153837486827862e+34"
+PASS (min - 1).toString() is "-4.153837486827862e+34"
+PASS max.toString() is "4.153837486827862e+34"
+PASS (max + 1).toString() is "4.153837486827862e+34"
+bits used to store value: 117
+PASS min.toString() is "-8.307674973655724e+34"
+PASS (min - 1).toString() is "-8.307674973655724e+34"
+PASS max.toString() is "8.307674973655724e+34"
+PASS (max + 1).toString() is "8.307674973655724e+34"
+bits used to store value: 118
+PASS min.toString() is "-1.661534994731145e+35"
+PASS (min - 1).toString() is "-1.661534994731145e+35"
+PASS max.toString() is "1.661534994731145e+35"
+PASS (max + 1).toString() is "1.661534994731145e+35"
+bits used to store value: 119
+PASS min.toString() is "-3.32306998946229e+35"
+PASS (min - 1).toString() is "-3.32306998946229e+35"
+PASS max.toString() is "3.32306998946229e+35"
+PASS (max + 1).toString() is "3.32306998946229e+35"
+bits used to store value: 120
+PASS min.toString() is "-6.64613997892458e+35"
+PASS (min - 1).toString() is "-6.64613997892458e+35"
+PASS max.toString() is "6.64613997892458e+35"
+PASS (max + 1).toString() is "6.64613997892458e+35"
+bits used to store value: 121
+PASS min.toString() is "-1.329227995784916e+36"
+PASS (min - 1).toString() is "-1.329227995784916e+36"
+PASS max.toString() is "1.329227995784916e+36"
+PASS (max + 1).toString() is "1.329227995784916e+36"
+bits used to store value: 122
+PASS min.toString() is "-2.658455991569832e+36"
+PASS (min - 1).toString() is "-2.658455991569832e+36"
+PASS max.toString() is "2.658455991569832e+36"
+PASS (max + 1).toString() is "2.658455991569832e+36"
+bits used to store value: 123
+PASS min.toString() is "-5.316911983139664e+36"
+PASS (min - 1).toString() is "-5.316911983139664e+36"
+PASS max.toString() is "5.316911983139664e+36"
+PASS (max + 1).toString() is "5.316911983139664e+36"
+bits used to store value: 124
+PASS min.toString() is "-1.0633823966279327e+37"
+PASS (min - 1).toString() is "-1.0633823966279327e+37"
+PASS max.toString() is "1.0633823966279327e+37"
+PASS (max + 1).toString() is "1.0633823966279327e+37"
+bits used to store value: 125
+PASS min.toString() is "-2.1267647932558654e+37"
+PASS (min - 1).toString() is "-2.1267647932558654e+37"
+PASS max.toString() is "2.1267647932558654e+37"
+PASS (max + 1).toString() is "2.1267647932558654e+37"
+bits used to store value: 126
+PASS min.toString() is "-4.253529586511731e+37"
+PASS (min - 1).toString() is "-4.253529586511731e+37"
+PASS max.toString() is "4.253529586511731e+37"
+PASS (max + 1).toString() is "4.253529586511731e+37"
+bits used to store value: 127
+PASS min.toString() is "-8.507059173023462e+37"
+PASS (min - 1).toString() is "-8.507059173023462e+37"
+PASS max.toString() is "8.507059173023462e+37"
+PASS (max + 1).toString() is "8.507059173023462e+37"
+bits used to store value: 128
+PASS min.toString() is "-1.7014118346046923e+38"
+PASS (min - 1).toString() is "-1.7014118346046923e+38"
+PASS max.toString() is "1.7014118346046923e+38"
+PASS (max + 1).toString() is "1.7014118346046923e+38"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/integer-extremes.js b/deps/v8/test/webkit/integer-extremes.js
new file mode 100644 (file)
index 0000000..523805c
--- /dev/null
@@ -0,0 +1,165 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test verifies that the bit twiddling done in JavaScriptCore's integer machinery works correctly on the current platform."
+);
+
+shouldBe("(-1).toString()", '"-1"');
+shouldBe("(0).toString()", '"0"');
+shouldBe("(-0).toString()", '"0"');
+debug("");
+
+var answers = [
+['"-128"', '"-129"', '"127"', '"128"'],
+['"-256"', '"-257"', '"255"', '"256"'],
+['"-512"', '"-513"', '"511"', '"512"'],
+['"-1024"', '"-1025"', '"1023"', '"1024"'],
+['"-2048"', '"-2049"', '"2047"', '"2048"'],
+['"-4096"', '"-4097"', '"4095"', '"4096"'],
+['"-8192"', '"-8193"', '"8191"', '"8192"'],
+['"-16384"', '"-16385"', '"16383"', '"16384"'],
+['"-32768"', '"-32769"', '"32767"', '"32768"'],
+['"-65536"', '"-65537"', '"65535"', '"65536"'],
+['"-131072"', '"-131073"', '"131071"', '"131072"'],
+['"-262144"', '"-262145"', '"262143"', '"262144"'],
+['"-524288"', '"-524289"', '"524287"', '"524288"'],
+['"-1048576"', '"-1048577"', '"1048575"', '"1048576"'],
+['"-2097152"', '"-2097153"', '"2097151"', '"2097152"'],
+['"-4194304"', '"-4194305"', '"4194303"', '"4194304"'],
+['"-8388608"', '"-8388609"', '"8388607"', '"8388608"'],
+['"-16777216"', '"-16777217"', '"16777215"', '"16777216"'],
+['"-33554432"', '"-33554433"', '"33554431"', '"33554432"'],
+['"-67108864"', '"-67108865"', '"67108863"', '"67108864"'],
+['"-134217728"', '"-134217729"', '"134217727"', '"134217728"'],
+['"-268435456"', '"-268435457"', '"268435455"', '"268435456"'],
+['"-536870912"', '"-536870913"', '"536870911"', '"536870912"'],
+['"-1073741824"', '"-1073741825"', '"1073741823"', '"1073741824"'],
+['"-2147483648"', '"-2147483649"', '"2147483647"', '"2147483648"'],
+['"-4294967296"', '"-4294967297"', '"4294967295"', '"4294967296"'],
+['"-8589934592"', '"-8589934593"', '"8589934591"', '"8589934592"'],
+['"-17179869184"', '"-17179869185"', '"17179869183"', '"17179869184"'],
+['"-34359738368"', '"-34359738369"', '"34359738367"', '"34359738368"'],
+['"-68719476736"', '"-68719476737"', '"68719476735"', '"68719476736"'],
+['"-137438953472"', '"-137438953473"', '"137438953471"', '"137438953472"'],
+['"-274877906944"', '"-274877906945"', '"274877906943"', '"274877906944"'],
+['"-549755813888"', '"-549755813889"', '"549755813887"', '"549755813888"'],
+['"-1099511627776"', '"-1099511627777"', '"1099511627775"', '"1099511627776"'],
+['"-2199023255552"', '"-2199023255553"', '"2199023255551"', '"2199023255552"'],
+['"-4398046511104"', '"-4398046511105"', '"4398046511103"', '"4398046511104"'],
+['"-8796093022208"', '"-8796093022209"', '"8796093022207"', '"8796093022208"'],
+['"-17592186044416"', '"-17592186044417"', '"17592186044415"', '"17592186044416"'],
+['"-35184372088832"', '"-35184372088833"', '"35184372088831"', '"35184372088832"'],
+['"-70368744177664"', '"-70368744177665"', '"70368744177663"', '"70368744177664"'],
+['"-140737488355328"', '"-140737488355329"', '"140737488355327"', '"140737488355328"'],
+['"-281474976710656"', '"-281474976710657"', '"281474976710655"', '"281474976710656"'],
+['"-562949953421312"', '"-562949953421313"', '"562949953421311"', '"562949953421312"'],
+['"-1125899906842624"', '"-1125899906842625"', '"1125899906842623"', '"1125899906842624"'],
+['"-2251799813685248"', '"-2251799813685249"', '"2251799813685247"', '"2251799813685248"'],
+['"-4503599627370496"', '"-4503599627370497"', '"4503599627370495"', '"4503599627370496"'],
+['"-9007199254740992"', '"-9007199254740992"', '"9007199254740991"', '"9007199254740992"'],
+['"-18014398509481984"', '"-18014398509481984"', '"18014398509481984"', '"18014398509481984"'],
+['"-36028797018963970"', '"-36028797018963970"', '"36028797018963970"', '"36028797018963970"'],
+['"-72057594037927940"', '"-72057594037927940"', '"72057594037927940"', '"72057594037927940"'],
+['"-144115188075855870"', '"-144115188075855870"', '"144115188075855870"', '"144115188075855870"'],
+['"-288230376151711740"', '"-288230376151711740"', '"288230376151711740"', '"288230376151711740"'],
+['"-576460752303423500"', '"-576460752303423500"', '"576460752303423500"', '"576460752303423500"'],
+['"-1152921504606847000"', '"-1152921504606847000"', '"1152921504606847000"', '"1152921504606847000"'],
+['"-2305843009213694000"', '"-2305843009213694000"', '"2305843009213694000"', '"2305843009213694000"'],
+['"-4611686018427388000"', '"-4611686018427388000"', '"4611686018427388000"', '"4611686018427388000"'],
+['"-9223372036854776000"', '"-9223372036854776000"', '"9223372036854776000"', '"9223372036854776000"'],
+['"-18446744073709552000"', '"-18446744073709552000"', '"18446744073709552000"', '"18446744073709552000"'],
+['"-36893488147419103000"', '"-36893488147419103000"', '"36893488147419103000"', '"36893488147419103000"'],
+['"-73786976294838210000"', '"-73786976294838210000"', '"73786976294838210000"', '"73786976294838210000"'],
+['"-147573952589676410000"', '"-147573952589676410000"', '"147573952589676410000"', '"147573952589676410000"'],
+['"-295147905179352830000"', '"-295147905179352830000"', '"295147905179352830000"', '"295147905179352830000"'],
+['"-590295810358705700000"', '"-590295810358705700000"', '"590295810358705700000"', '"590295810358705700000"'],
+['"-1.1805916207174113e+21"', '"-1.1805916207174113e+21"', '"1.1805916207174113e+21"', '"1.1805916207174113e+21"'],
+['"-2.3611832414348226e+21"', '"-2.3611832414348226e+21"', '"2.3611832414348226e+21"', '"2.3611832414348226e+21"'],
+['"-4.722366482869645e+21"', '"-4.722366482869645e+21"', '"4.722366482869645e+21"', '"4.722366482869645e+21"'],
+['"-9.44473296573929e+21"', '"-9.44473296573929e+21"', '"9.44473296573929e+21"', '"9.44473296573929e+21"'],
+['"-1.888946593147858e+22"', '"-1.888946593147858e+22"', '"1.888946593147858e+22"', '"1.888946593147858e+22"'],
+['"-3.777893186295716e+22"', '"-3.777893186295716e+22"', '"3.777893186295716e+22"', '"3.777893186295716e+22"'],
+['"-7.555786372591432e+22"', '"-7.555786372591432e+22"', '"7.555786372591432e+22"', '"7.555786372591432e+22"'],
+['"-1.5111572745182865e+23"', '"-1.5111572745182865e+23"', '"1.5111572745182865e+23"', '"1.5111572745182865e+23"'],
+['"-3.022314549036573e+23"', '"-3.022314549036573e+23"', '"3.022314549036573e+23"', '"3.022314549036573e+23"'],
+['"-6.044629098073146e+23"', '"-6.044629098073146e+23"', '"6.044629098073146e+23"', '"6.044629098073146e+23"'],
+['"-1.2089258196146292e+24"', '"-1.2089258196146292e+24"', '"1.2089258196146292e+24"', '"1.2089258196146292e+24"'],
+['"-2.4178516392292583e+24"', '"-2.4178516392292583e+24"', '"2.4178516392292583e+24"', '"2.4178516392292583e+24"'],
+['"-4.835703278458517e+24"', '"-4.835703278458517e+24"', '"4.835703278458517e+24"', '"4.835703278458517e+24"'],
+['"-9.671406556917033e+24"', '"-9.671406556917033e+24"', '"9.671406556917033e+24"', '"9.671406556917033e+24"'],
+['"-1.9342813113834067e+25"', '"-1.9342813113834067e+25"', '"1.9342813113834067e+25"', '"1.9342813113834067e+25"'],
+['"-3.8685626227668134e+25"', '"-3.8685626227668134e+25"', '"3.8685626227668134e+25"', '"3.8685626227668134e+25"'],
+['"-7.737125245533627e+25"', '"-7.737125245533627e+25"', '"7.737125245533627e+25"', '"7.737125245533627e+25"'],
+['"-1.5474250491067253e+26"', '"-1.5474250491067253e+26"', '"1.5474250491067253e+26"', '"1.5474250491067253e+26"'],
+['"-3.094850098213451e+26"', '"-3.094850098213451e+26"', '"3.094850098213451e+26"', '"3.094850098213451e+26"'],
+['"-6.189700196426902e+26"', '"-6.189700196426902e+26"', '"6.189700196426902e+26"', '"6.189700196426902e+26"'],
+['"-1.2379400392853803e+27"', '"-1.2379400392853803e+27"', '"1.2379400392853803e+27"', '"1.2379400392853803e+27"'],
+['"-2.4758800785707605e+27"', '"-2.4758800785707605e+27"', '"2.4758800785707605e+27"', '"2.4758800785707605e+27"'],
+['"-4.951760157141521e+27"', '"-4.951760157141521e+27"', '"4.951760157141521e+27"', '"4.951760157141521e+27"'],
+['"-9.903520314283042e+27"', '"-9.903520314283042e+27"', '"9.903520314283042e+27"', '"9.903520314283042e+27"'],
+['"-1.9807040628566084e+28"', '"-1.9807040628566084e+28"', '"1.9807040628566084e+28"', '"1.9807040628566084e+28"'],
+['"-3.961408125713217e+28"', '"-3.961408125713217e+28"', '"3.961408125713217e+28"', '"3.961408125713217e+28"'],
+['"-7.922816251426434e+28"', '"-7.922816251426434e+28"', '"7.922816251426434e+28"', '"7.922816251426434e+28"'],
+['"-1.5845632502852868e+29"', '"-1.5845632502852868e+29"', '"1.5845632502852868e+29"', '"1.5845632502852868e+29"'],
+['"-3.1691265005705735e+29"', '"-3.1691265005705735e+29"', '"3.1691265005705735e+29"', '"3.1691265005705735e+29"'],
+['"-6.338253001141147e+29"', '"-6.338253001141147e+29"', '"6.338253001141147e+29"', '"6.338253001141147e+29"'],
+['"-1.2676506002282294e+30"', '"-1.2676506002282294e+30"', '"1.2676506002282294e+30"', '"1.2676506002282294e+30"'],
+['"-2.535301200456459e+30"', '"-2.535301200456459e+30"', '"2.535301200456459e+30"', '"2.535301200456459e+30"'],
+['"-5.070602400912918e+30"', '"-5.070602400912918e+30"', '"5.070602400912918e+30"', '"5.070602400912918e+30"'],
+['"-1.0141204801825835e+31"', '"-1.0141204801825835e+31"', '"1.0141204801825835e+31"', '"1.0141204801825835e+31"'],
+['"-2.028240960365167e+31"', '"-2.028240960365167e+31"', '"2.028240960365167e+31"', '"2.028240960365167e+31"'],
+['"-4.056481920730334e+31"', '"-4.056481920730334e+31"', '"4.056481920730334e+31"', '"4.056481920730334e+31"'],
+['"-8.112963841460668e+31"', '"-8.112963841460668e+31"', '"8.112963841460668e+31"', '"8.112963841460668e+31"'],
+['"-1.6225927682921336e+32"', '"-1.6225927682921336e+32"', '"1.6225927682921336e+32"', '"1.6225927682921336e+32"'],
+['"-3.2451855365842673e+32"', '"-3.2451855365842673e+32"', '"3.2451855365842673e+32"', '"3.2451855365842673e+32"'],
+['"-6.490371073168535e+32"', '"-6.490371073168535e+32"', '"6.490371073168535e+32"', '"6.490371073168535e+32"'],
+['"-1.298074214633707e+33"', '"-1.298074214633707e+33"', '"1.298074214633707e+33"', '"1.298074214633707e+33"'],
+['"-2.596148429267414e+33"', '"-2.596148429267414e+33"', '"2.596148429267414e+33"', '"2.596148429267414e+33"'],
+['"-5.192296858534828e+33"', '"-5.192296858534828e+33"', '"5.192296858534828e+33"', '"5.192296858534828e+33"'],
+['"-1.0384593717069655e+34"', '"-1.0384593717069655e+34"', '"1.0384593717069655e+34"', '"1.0384593717069655e+34"'],
+['"-2.076918743413931e+34"', '"-2.076918743413931e+34"', '"2.076918743413931e+34"', '"2.076918743413931e+34"'],
+['"-4.153837486827862e+34"', '"-4.153837486827862e+34"', '"4.153837486827862e+34"', '"4.153837486827862e+34"'],
+['"-8.307674973655724e+34"', '"-8.307674973655724e+34"', '"8.307674973655724e+34"', '"8.307674973655724e+34"'],
+['"-1.661534994731145e+35"', '"-1.661534994731145e+35"', '"1.661534994731145e+35"', '"1.661534994731145e+35"'],
+['"-3.32306998946229e+35"', '"-3.32306998946229e+35"', '"3.32306998946229e+35"', '"3.32306998946229e+35"'],
+['"-6.64613997892458e+35"', '"-6.64613997892458e+35"', '"6.64613997892458e+35"', '"6.64613997892458e+35"'],
+['"-1.329227995784916e+36"', '"-1.329227995784916e+36"', '"1.329227995784916e+36"', '"1.329227995784916e+36"'],
+['"-2.658455991569832e+36"', '"-2.658455991569832e+36"', '"2.658455991569832e+36"', '"2.658455991569832e+36"'],
+['"-5.316911983139664e+36"', '"-5.316911983139664e+36"', '"5.316911983139664e+36"', '"5.316911983139664e+36"'],
+['"-1.0633823966279327e+37"', '"-1.0633823966279327e+37"', '"1.0633823966279327e+37"', '"1.0633823966279327e+37"'],
+['"-2.1267647932558654e+37"', '"-2.1267647932558654e+37"', '"2.1267647932558654e+37"', '"2.1267647932558654e+37"'],
+['"-4.253529586511731e+37"', '"-4.253529586511731e+37"', '"4.253529586511731e+37"', '"4.253529586511731e+37"'],
+['"-8.507059173023462e+37"', '"-8.507059173023462e+37"', '"8.507059173023462e+37"', '"8.507059173023462e+37"'],
+['"-1.7014118346046923e+38"', '"-1.7014118346046923e+38"', '"1.7014118346046923e+38"', '"1.7014118346046923e+38"']
+];
+
+for (var valueBits = 8; valueBits <= 128; valueBits++) {
+    debug("bits used to store value: " + valueBits);
+    var max = Math.pow(2, valueBits - 1) - 1;
+    var min = -Math.pow(2, valueBits - 1);
+    shouldBe("min.toString()", answers[valueBits-8][0]);
+    shouldBe("(min - 1).toString()", answers[valueBits-8][1]);
+    shouldBe("max.toString()", answers[valueBits-8][2]);
+    shouldBe("(max + 1).toString()", answers[valueBits-8][3]);
+}
diff --git a/deps/v8/test/webkit/interpreter-no-activation-expected.txt b/deps/v8/test/webkit/interpreter-no-activation-expected.txt
new file mode 100644 (file)
index 0000000..aebc900
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Make sure arguments tearoff works correctly when a functions activation has not been created.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS f1(false) is true
+PASS f2(true) is true
+PASS Didn't crash
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/interpreter-no-activation.js b/deps/v8/test/webkit/interpreter-no-activation.js
new file mode 100644 (file)
index 0000000..cec2276
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Make sure arguments tearoff works correctly when a functions activation has not been created.");
+
+function f1(a,b,c,d) {
+    if (0) (function (){ a; });
+    a = true;
+    return arguments[0];
+}
+shouldBeTrue("f1(false)");
+
+function f2(a,b,c,d) {
+    "use strict";
+    a = false;
+    if (0) (function (){ a; });
+    return arguments[0];
+}
+shouldBeTrue("f2(true)");
+testPassed("Didn't crash");
diff --git a/deps/v8/test/webkit/invalid-callframe-during-unwind-expected.txt b/deps/v8/test/webkit/invalid-callframe-during-unwind-expected.txt
new file mode 100644 (file)
index 0000000..2097abc
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure we have a valid callframe midway through unwinding
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS testUnwind() threw exception threw successfully.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/invalid-callframe-during-unwind.js b/deps/v8/test/webkit/invalid-callframe-during-unwind.js
new file mode 100644 (file)
index 0000000..c507896
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure we have a valid callframe midway through unwinding");
+
+function testUnwind(){with({}){ arguments; throw "threw successfully";}}
+
+shouldThrow("testUnwind()")
diff --git a/deps/v8/test/webkit/isPrototypeOf-expected.txt b/deps/v8/test/webkit/isPrototypeOf-expected.txt
new file mode 100644 (file)
index 0000000..9ab1fbb
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that isPrototypeOf works according to the ECMA spec.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Object.isPrototypeOf('string') is false
+PASS Array.prototype.isPrototypeOf(new Array()) is true
+PASS ObjectA.prototype.isPrototypeOf(objb) is true
+PASS ObjectA.prototype.isPrototypeOf(objc) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/isPrototypeOf.js b/deps/v8/test/webkit/isPrototypeOf.js
new file mode 100644 (file)
index 0000000..6cbc8c8
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that isPrototypeOf works according to the ECMA spec."
+);
+
+shouldBeFalse("Object.isPrototypeOf('string')");
+shouldBeTrue("Array.prototype.isPrototypeOf(new Array())");
+
+function ObjectA() { }
+function ObjectB() { }
+ObjectB.prototype = new ObjectA();
+var objb = new ObjectB();
+shouldBeTrue("ObjectA.prototype.isPrototypeOf(objb)");
+
+function ObjectC() {}
+ObjectC.prototype = new ObjectB();
+var objc = new ObjectC();
+shouldBeTrue("ObjectA.prototype.isPrototypeOf(objc)");
diff --git a/deps/v8/test/webkit/jit-float32-array-nan-expected.txt b/deps/v8/test/webkit/jit-float32-array-nan-expected.txt
new file mode 100644 (file)
index 0000000..f65d714
--- /dev/null
@@ -0,0 +1,234 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens in the Baseline JIT if we load from a Float32 array that contains a weirdly formatted NaN.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+-4587521
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+I didn't crash, which is a good thing.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/jit-float32-array-nan.js b/deps/v8/test/webkit/jit-float32-array-nan.js
new file mode 100644 (file)
index 0000000..369fa20
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens in the Baseline JIT if we load from a Float32 array that contains a weirdly formatted NaN."
+);
+
+var buffer = new ArrayBuffer(4);
+
+var int32View = new Int32Array(buffer);
+var floatView = new Float32Array(buffer);
+
+int32View[0] = -4587521;
+
+debug(int32View[0]);
+
+for (var i = 0; i < 100; ++i) {
+    debug(floatView[0]);
+    shouldBe("\"\" + floatView[0]", "\"NaN\"");
+}
+
+debug("I didn't crash, which is a good thing.");
diff --git a/deps/v8/test/webkit/js-continue-break-restrictions-expected.txt b/deps/v8/test/webkit/js-continue-break-restrictions-expected.txt
new file mode 100644 (file)
index 0000000..74b1726
--- /dev/null
@@ -0,0 +1,60 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Verify that invalid continue and break statements are handled correctly
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS L:{true;break L;false} is true
+PASS if (0) { L:{ break; } } threw exception SyntaxError: Illegal break statement.
+PASS if (0) { L:{ continue L; } } threw exception SyntaxError: Undefined label 'L'.
+PASS if (0) { L:{ continue; } } threw exception SyntaxError: Illegal continue statement.
+PASS if (0) { switch (1) { case 1: continue; } } threw exception SyntaxError: Illegal continue statement.
+PASS A:L:{true;break L;false} is true
+PASS if (0) { A:L:{ break; } } threw exception SyntaxError: Illegal break statement.
+PASS if (0) { A:L:{ continue L; } } threw exception SyntaxError: Undefined label 'L'.
+PASS if (0) { A:L:{ continue; } } threw exception SyntaxError: Illegal continue statement.
+PASS L:A:{true;break L;false} is true
+PASS if (0) { L:A:{ break; } } threw exception SyntaxError: Illegal break statement.
+PASS if (0) { L:A:{ continue L; } } threw exception SyntaxError: Undefined label 'L'.
+PASS if (0) { L:A:{ continue; } } threw exception SyntaxError: Illegal continue statement.
+PASS if(0){ L:for(;;) continue L; } is undefined.
+PASS if(0){ L:A:for(;;) continue L; } is undefined.
+PASS if(0){ A:L:for(;;) continue L; } is undefined.
+PASS if(0){ A:for(;;) L:continue L; } threw exception SyntaxError: Undefined label 'L'.
+PASS if(0){ L:for(;;) A:continue L; } is undefined.
+PASS if(0){ L:do continue L; while(0); } is undefined.
+PASS if(0){ L:A:do continue L; while(0); } is undefined.
+PASS if(0){ A:L:do continue L; while(0);} is undefined.
+PASS if(0){ A:do L:continue L; while(0); } threw exception SyntaxError: Undefined label 'L'.
+PASS if(0){ L:do A:continue L; while(0); } is undefined.
+PASS if(0){ L:while(0) continue L; } is undefined.
+PASS if(0){ L:A:while(0) continue L; } is undefined.
+PASS if(0){ A:L:while(0) continue L; } is undefined.
+PASS if(0){ A:while(0) L:continue L; } threw exception SyntaxError: Undefined label 'L'.
+PASS if(0){ L:while(0) A:continue L; } is undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/js-continue-break-restrictions.js b/deps/v8/test/webkit/js-continue-break-restrictions.js
new file mode 100644 (file)
index 0000000..18b60b9
--- /dev/null
@@ -0,0 +1,58 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Verify that invalid continue and break statements are handled correctly");
+
+shouldBeTrue("L:{true;break L;false}");
+shouldThrow("if (0) { L:{ break; } }");
+shouldThrow("if (0) { L:{ continue L; } }");
+shouldThrow("if (0) { L:{ continue; } }");
+shouldThrow("if (0) { switch (1) { case 1: continue; } }");
+shouldBeTrue("A:L:{true;break L;false}");
+shouldThrow("if (0) { A:L:{ break; } }");
+shouldThrow("if (0) { A:L:{ continue L; } }");
+shouldThrow("if (0) { A:L:{ continue; } }");
+
+shouldBeTrue("L:A:{true;break L;false}");
+shouldThrow("if (0) { L:A:{ break; } }");
+shouldThrow("if (0) { L:A:{ continue L; } }");
+shouldThrow("if (0) { L:A:{ continue; } }");
+
+shouldBeUndefined("if(0){ L:for(;;) continue L; }")
+shouldBeUndefined("if(0){ L:A:for(;;) continue L; }")
+shouldBeUndefined("if(0){ A:L:for(;;) continue L; }")
+shouldThrow("if(0){ A:for(;;) L:continue L; }")
+shouldBeUndefined("if(0){ L:for(;;) A:continue L; }")
+
+shouldBeUndefined("if(0){ L:do continue L; while(0); }")
+shouldBeUndefined("if(0){ L:A:do continue L; while(0); }")
+shouldBeUndefined("if(0){ A:L:do continue L; while(0);}")
+shouldThrow("if(0){ A:do L:continue L; while(0); }")
+shouldBeUndefined("if(0){ L:do A:continue L; while(0); }")
+
+
+shouldBeUndefined("if(0){ L:while(0) continue L; }")
+shouldBeUndefined("if(0){ L:A:while(0) continue L; }")
+shouldBeUndefined("if(0){ A:L:while(0) continue L; }")
+shouldThrow("if(0){ A:while(0) L:continue L; }")
+shouldBeUndefined("if(0){ L:while(0) A:continue L; }")
diff --git a/deps/v8/test/webkit/keywords-and-reserved_words-expected.txt b/deps/v8/test/webkit/keywords-and-reserved_words-expected.txt
new file mode 100644 (file)
index 0000000..7d70ec9
--- /dev/null
@@ -0,0 +1,96 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test verifies that keywords and reserved words match those specified in ES5 section 7.6.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS classifyIdentifier("x") is "identifier"
+PASS classifyIdentifier("id") is "identifier"
+PASS classifyIdentifier("identifier") is "identifier"
+PASS classifyIdentifier("keyword") is "identifier"
+PASS classifyIdentifier("strict") is "identifier"
+PASS classifyIdentifier("use") is "identifier"
+PASS classifyIdentifier("abstract") is "identifier"
+PASS classifyIdentifier("boolean") is "identifier"
+PASS classifyIdentifier("byte") is "identifier"
+PASS classifyIdentifier("char") is "identifier"
+PASS classifyIdentifier("double") is "identifier"
+PASS classifyIdentifier("final") is "identifier"
+PASS classifyIdentifier("float") is "identifier"
+PASS classifyIdentifier("goto") is "identifier"
+PASS classifyIdentifier("int") is "identifier"
+PASS classifyIdentifier("long") is "identifier"
+PASS classifyIdentifier("native") is "identifier"
+PASS classifyIdentifier("short") is "identifier"
+PASS classifyIdentifier("synchronized") is "identifier"
+PASS classifyIdentifier("throws") is "identifier"
+PASS classifyIdentifier("transient") is "identifier"
+PASS classifyIdentifier("volatile") is "identifier"
+PASS classifyIdentifier("break") is "keyword"
+PASS classifyIdentifier("case") is "keyword"
+PASS classifyIdentifier("catch") is "keyword"
+PASS classifyIdentifier("continue") is "keyword"
+PASS classifyIdentifier("debugger") is "keyword"
+PASS classifyIdentifier("default") is "keyword"
+PASS classifyIdentifier("delete") is "keyword"
+PASS classifyIdentifier("do") is "keyword"
+PASS classifyIdentifier("else") is "keyword"
+PASS classifyIdentifier("finally") is "keyword"
+PASS classifyIdentifier("for") is "keyword"
+PASS classifyIdentifier("function") is "keyword"
+PASS classifyIdentifier("if") is "keyword"
+PASS classifyIdentifier("in") is "keyword"
+PASS classifyIdentifier("instanceof") is "keyword"
+PASS classifyIdentifier("new") is "keyword"
+PASS classifyIdentifier("return") is "keyword"
+PASS classifyIdentifier("switch") is "keyword"
+PASS classifyIdentifier("this") is "keyword"
+PASS classifyIdentifier("throw") is "keyword"
+PASS classifyIdentifier("try") is "keyword"
+PASS classifyIdentifier("typeof") is "keyword"
+PASS classifyIdentifier("var") is "keyword"
+PASS classifyIdentifier("void") is "keyword"
+PASS classifyIdentifier("while") is "keyword"
+PASS classifyIdentifier("with") is "keyword"
+PASS classifyIdentifier("class") is "keyword"
+PASS classifyIdentifier("const") is "keyword"
+PASS classifyIdentifier("enum") is "keyword"
+PASS classifyIdentifier("export") is "keyword"
+PASS classifyIdentifier("extends") is "keyword"
+PASS classifyIdentifier("import") is "keyword"
+PASS classifyIdentifier("super") is "keyword"
+PASS classifyIdentifier("implements") is "strict"
+PASS classifyIdentifier("interface") is "strict"
+PASS classifyIdentifier("let") is "strict"
+PASS classifyIdentifier("package") is "strict"
+PASS classifyIdentifier("private") is "strict"
+PASS classifyIdentifier("protected") is "strict"
+PASS classifyIdentifier("public") is "strict"
+PASS classifyIdentifier("static") is "strict"
+PASS classifyIdentifier("yield") is "strict"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/keywords-and-reserved_words.js b/deps/v8/test/webkit/keywords-and-reserved_words.js
new file mode 100644 (file)
index 0000000..d57102f
--- /dev/null
@@ -0,0 +1,136 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test verifies that keywords and reserved words match those specified in ES5 section 7.6."
+);
+
+function isKeyword(x)
+{
+    try {
+        eval("var "+x+";");
+    } catch(e) {
+        return true;
+    }
+
+    return false;
+}
+
+function isStrictKeyword(x)
+{
+    try {
+        eval("'use strict'; var "+x+";");
+    } catch(e) {
+        return true;
+    }
+
+    return false;
+}
+
+function classifyIdentifier(x)
+{
+    if (isKeyword(x)) {
+        // All non-strict keywords are also keywords in strict code.
+        if (!isStrictKeyword(x))
+            return "ERROR";
+        return "keyword";
+    }
+
+    // Check for strict mode future reserved words.
+    if (isStrictKeyword(x))
+        return "strict";
+
+    return "identifier";
+}
+
+// Not keywords - these are all just identifiers.
+shouldBe('classifyIdentifier("x")', '"identifier"');
+shouldBe('classifyIdentifier("id")', '"identifier"');
+shouldBe('classifyIdentifier("identifier")', '"identifier"');
+shouldBe('classifyIdentifier("keyword")', '"identifier"');
+shouldBe('classifyIdentifier("strict")', '"identifier"');
+shouldBe('classifyIdentifier("use")', '"identifier"');
+// These are identifiers that we used to treat as keywords!
+shouldBe('classifyIdentifier("abstract")', '"identifier"');
+shouldBe('classifyIdentifier("boolean")', '"identifier"');
+shouldBe('classifyIdentifier("byte")', '"identifier"');
+shouldBe('classifyIdentifier("char")', '"identifier"');
+shouldBe('classifyIdentifier("double")', '"identifier"');
+shouldBe('classifyIdentifier("final")', '"identifier"');
+shouldBe('classifyIdentifier("float")', '"identifier"');
+shouldBe('classifyIdentifier("goto")', '"identifier"');
+shouldBe('classifyIdentifier("int")', '"identifier"');
+shouldBe('classifyIdentifier("long")', '"identifier"');
+shouldBe('classifyIdentifier("native")', '"identifier"');
+shouldBe('classifyIdentifier("short")', '"identifier"');
+shouldBe('classifyIdentifier("synchronized")', '"identifier"');
+shouldBe('classifyIdentifier("throws")', '"identifier"');
+shouldBe('classifyIdentifier("transient")', '"identifier"');
+shouldBe('classifyIdentifier("volatile")', '"identifier"');
+
+// Keywords.
+shouldBe('classifyIdentifier("break")', '"keyword"');
+shouldBe('classifyIdentifier("case")', '"keyword"');
+shouldBe('classifyIdentifier("catch")', '"keyword"');
+shouldBe('classifyIdentifier("continue")', '"keyword"');
+shouldBe('classifyIdentifier("debugger")', '"keyword"');
+shouldBe('classifyIdentifier("default")', '"keyword"');
+shouldBe('classifyIdentifier("delete")', '"keyword"');
+shouldBe('classifyIdentifier("do")', '"keyword"');
+shouldBe('classifyIdentifier("else")', '"keyword"');
+shouldBe('classifyIdentifier("finally")', '"keyword"');
+shouldBe('classifyIdentifier("for")', '"keyword"');
+shouldBe('classifyIdentifier("function")', '"keyword"');
+shouldBe('classifyIdentifier("if")', '"keyword"');
+shouldBe('classifyIdentifier("in")', '"keyword"');
+shouldBe('classifyIdentifier("instanceof")', '"keyword"');
+shouldBe('classifyIdentifier("new")', '"keyword"');
+shouldBe('classifyIdentifier("return")', '"keyword"');
+shouldBe('classifyIdentifier("switch")', '"keyword"');
+shouldBe('classifyIdentifier("this")', '"keyword"');
+shouldBe('classifyIdentifier("throw")', '"keyword"');
+shouldBe('classifyIdentifier("try")', '"keyword"');
+shouldBe('classifyIdentifier("typeof")', '"keyword"');
+shouldBe('classifyIdentifier("var")', '"keyword"');
+shouldBe('classifyIdentifier("void")', '"keyword"');
+shouldBe('classifyIdentifier("while")', '"keyword"');
+shouldBe('classifyIdentifier("with")', '"keyword"');
+// Technically these are "Future Reserved Words"!
+shouldBe('classifyIdentifier("class")', '"keyword"');
+shouldBe('classifyIdentifier("const")', '"keyword"');
+shouldBe('classifyIdentifier("enum")', '"keyword"');
+shouldBe('classifyIdentifier("export")', '"keyword"');
+shouldBe('classifyIdentifier("extends")', '"keyword"');
+shouldBe('classifyIdentifier("import")', '"keyword"');
+shouldBe('classifyIdentifier("super")', '"keyword"');
+
+// Future Reserved Words, in strict mode only.
+shouldBe('classifyIdentifier("implements")', '"strict"');
+shouldBe('classifyIdentifier("interface")', '"strict"');
+shouldBe('classifyIdentifier("let")', '"strict"');
+shouldBe('classifyIdentifier("package")', '"strict"');
+shouldBe('classifyIdentifier("private")', '"strict"');
+shouldBe('classifyIdentifier("protected")', '"strict"');
+shouldBe('classifyIdentifier("public")', '"strict"');
+shouldBe('classifyIdentifier("static")', '"strict"');
+shouldBe('classifyIdentifier("yield")', '"strict"');
diff --git a/deps/v8/test/webkit/legitimately-captured-argument-expected.txt b/deps/v8/test/webkit/legitimately-captured-argument-expected.txt
new file mode 100644 (file)
index 0000000..0231b58
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that using an argument as a captured variable, in the legitimate sense rather than the function.arguments sense, works as expected.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS counter() is 1
+PASS counter() is 2
+PASS counter() is 3
+PASS counter() is 4
+PASS counter() is 5
+PASS counter() is 6
+PASS counter() is 7
+PASS counter() is 8
+PASS counter() is 9
+PASS counter() is 10
+PASS counter() is 2
+PASS counter() is 3
+PASS counter() is 4
+PASS counter() is 5
+PASS counter() is 6
+PASS counter() is 7
+PASS counter() is 8
+PASS counter() is 9
+PASS counter() is 10
+PASS counter() is 11
+PASS counter() is 3
+PASS counter() is 4
+PASS counter() is 5
+PASS counter() is 6
+PASS counter() is 7
+PASS counter() is 8
+PASS counter() is 9
+PASS counter() is 10
+PASS counter() is 11
+PASS counter() is 12
+PASS counter() is 4
+PASS counter() is 5
+PASS counter() is 6
+PASS counter() is 7
+PASS counter() is 8
+PASS counter() is 9
+PASS counter() is 10
+PASS counter() is 11
+PASS counter() is 12
+PASS counter() is 13
+PASS counter() is 5
+PASS counter() is 6
+PASS counter() is 7
+PASS counter() is 8
+PASS counter() is 9
+PASS counter() is 10
+PASS counter() is 11
+PASS counter() is 12
+PASS counter() is 13
+PASS counter() is 14
+PASS counter() is 6
+PASS counter() is 7
+PASS counter() is 8
+PASS counter() is 9
+PASS counter() is 10
+PASS counter() is 11
+PASS counter() is 12
+PASS counter() is 13
+PASS counter() is 14
+PASS counter() is 15
+PASS counter() is 7
+PASS counter() is 8
+PASS counter() is 9
+PASS counter() is 10
+PASS counter() is 11
+PASS counter() is 12
+PASS counter() is 13
+PASS counter() is 14
+PASS counter() is 15
+PASS counter() is 16
+PASS counter() is 8
+PASS counter() is 9
+PASS counter() is 10
+PASS counter() is 11
+PASS counter() is 12
+PASS counter() is 13
+PASS counter() is 14
+PASS counter() is 15
+PASS counter() is 16
+PASS counter() is 17
+PASS counter() is 9
+PASS counter() is 10
+PASS counter() is 11
+PASS counter() is 12
+PASS counter() is 13
+PASS counter() is 14
+PASS counter() is 15
+PASS counter() is 16
+PASS counter() is 17
+PASS counter() is 18
+PASS counter() is 10
+PASS counter() is 11
+PASS counter() is 12
+PASS counter() is 13
+PASS counter() is 14
+PASS counter() is 15
+PASS counter() is 16
+PASS counter() is 17
+PASS counter() is 18
+PASS counter() is 19
+PASS counter() is 11
+PASS counter() is 12
+PASS counter() is 13
+PASS counter() is 14
+PASS counter() is 15
+PASS counter() is 16
+PASS counter() is 17
+PASS counter() is 18
+PASS counter() is 19
+PASS counter() is 20
+PASS counter() is 12
+PASS counter() is 13
+PASS counter() is 14
+PASS counter() is 15
+PASS counter() is 16
+PASS counter() is 17
+PASS counter() is 18
+PASS counter() is 19
+PASS counter() is 20
+PASS counter() is 21
+PASS counter() is 13
+PASS counter() is 14
+PASS counter() is 15
+PASS counter() is 16
+PASS counter() is 17
+PASS counter() is 18
+PASS counter() is 19
+PASS counter() is 20
+PASS counter() is 21
+PASS counter() is 22
+PASS counter() is 14
+PASS counter() is 15
+PASS counter() is 16
+PASS counter() is 17
+PASS counter() is 18
+PASS counter() is 19
+PASS counter() is 20
+PASS counter() is 21
+PASS counter() is 22
+PASS counter() is 23
+PASS counter() is 15
+PASS counter() is 16
+PASS counter() is 17
+PASS counter() is 18
+PASS counter() is 19
+PASS counter() is 20
+PASS counter() is 21
+PASS counter() is 22
+PASS counter() is 23
+PASS counter() is 24
+PASS counter() is 16
+PASS counter() is 17
+PASS counter() is 18
+PASS counter() is 19
+PASS counter() is 20
+PASS counter() is 21
+PASS counter() is 22
+PASS counter() is 23
+PASS counter() is 24
+PASS counter() is 25
+PASS counter() is 17
+PASS counter() is 18
+PASS counter() is 19
+PASS counter() is 20
+PASS counter() is 21
+PASS counter() is 22
+PASS counter() is 23
+PASS counter() is 24
+PASS counter() is 25
+PASS counter() is 26
+PASS counter() is 18
+PASS counter() is 19
+PASS counter() is 20
+PASS counter() is 21
+PASS counter() is 22
+PASS counter() is 23
+PASS counter() is 24
+PASS counter() is 25
+PASS counter() is 26
+PASS counter() is 27
+PASS counter() is 19
+PASS counter() is 20
+PASS counter() is 21
+PASS counter() is 22
+PASS counter() is 23
+PASS counter() is 24
+PASS counter() is 25
+PASS counter() is 26
+PASS counter() is 27
+PASS counter() is 28
+PASS counter() is 20
+PASS counter() is 21
+PASS counter() is 22
+PASS counter() is 23
+PASS counter() is 24
+PASS counter() is 25
+PASS counter() is 26
+PASS counter() is 27
+PASS counter() is 28
+PASS counter() is 29
+PASS counter() is 21
+PASS counter() is 22
+PASS counter() is 23
+PASS counter() is 24
+PASS counter() is 25
+PASS counter() is 26
+PASS counter() is 27
+PASS counter() is 28
+PASS counter() is 29
+PASS counter() is 30
+PASS counter() is 22
+PASS counter() is 23
+PASS counter() is 24
+PASS counter() is 25
+PASS counter() is 26
+PASS counter() is 27
+PASS counter() is 28
+PASS counter() is 29
+PASS counter() is 30
+PASS counter() is 31
+PASS counter() is 23
+PASS counter() is 24
+PASS counter() is 25
+PASS counter() is 26
+PASS counter() is 27
+PASS counter() is 28
+PASS counter() is 29
+PASS counter() is 30
+PASS counter() is 31
+PASS counter() is 32
+PASS counter() is 24
+PASS counter() is 25
+PASS counter() is 26
+PASS counter() is 27
+PASS counter() is 28
+PASS counter() is 29
+PASS counter() is 30
+PASS counter() is 31
+PASS counter() is 32
+PASS counter() is 33
+PASS counter() is 25
+PASS counter() is 26
+PASS counter() is 27
+PASS counter() is 28
+PASS counter() is 29
+PASS counter() is 30
+PASS counter() is 31
+PASS counter() is 32
+PASS counter() is 33
+PASS counter() is 34
+PASS counter() is 26
+PASS counter() is 27
+PASS counter() is 28
+PASS counter() is 29
+PASS counter() is 30
+PASS counter() is 31
+PASS counter() is 32
+PASS counter() is 33
+PASS counter() is 34
+PASS counter() is 35
+PASS counter() is 27
+PASS counter() is 28
+PASS counter() is 29
+PASS counter() is 30
+PASS counter() is 31
+PASS counter() is 32
+PASS counter() is 33
+PASS counter() is 34
+PASS counter() is 35
+PASS counter() is 36
+PASS counter() is 28
+PASS counter() is 29
+PASS counter() is 30
+PASS counter() is 31
+PASS counter() is 32
+PASS counter() is 33
+PASS counter() is 34
+PASS counter() is 35
+PASS counter() is 36
+PASS counter() is 37
+PASS counter() is 29
+PASS counter() is 30
+PASS counter() is 31
+PASS counter() is 32
+PASS counter() is 33
+PASS counter() is 34
+PASS counter() is 35
+PASS counter() is 36
+PASS counter() is 37
+PASS counter() is 38
+PASS counter() is 30
+PASS counter() is 31
+PASS counter() is 32
+PASS counter() is 33
+PASS counter() is 34
+PASS counter() is 35
+PASS counter() is 36
+PASS counter() is 37
+PASS counter() is 38
+PASS counter() is 39
+PASS counter() is 31
+PASS counter() is 32
+PASS counter() is 33
+PASS counter() is 34
+PASS counter() is 35
+PASS counter() is 36
+PASS counter() is 37
+PASS counter() is 38
+PASS counter() is 39
+PASS counter() is 40
+PASS counter() is 32
+PASS counter() is 33
+PASS counter() is 34
+PASS counter() is 35
+PASS counter() is 36
+PASS counter() is 37
+PASS counter() is 38
+PASS counter() is 39
+PASS counter() is 40
+PASS counter() is 41
+PASS counter() is 33
+PASS counter() is 34
+PASS counter() is 35
+PASS counter() is 36
+PASS counter() is 37
+PASS counter() is 38
+PASS counter() is 39
+PASS counter() is 40
+PASS counter() is 41
+PASS counter() is 42
+PASS counter() is 34
+PASS counter() is 35
+PASS counter() is 36
+PASS counter() is 37
+PASS counter() is 38
+PASS counter() is 39
+PASS counter() is 40
+PASS counter() is 41
+PASS counter() is 42
+PASS counter() is 43
+PASS counter() is 35
+PASS counter() is 36
+PASS counter() is 37
+PASS counter() is 38
+PASS counter() is 39
+PASS counter() is 40
+PASS counter() is 41
+PASS counter() is 42
+PASS counter() is 43
+PASS counter() is 44
+PASS counter() is 36
+PASS counter() is 37
+PASS counter() is 38
+PASS counter() is 39
+PASS counter() is 40
+PASS counter() is 41
+PASS counter() is 42
+PASS counter() is 43
+PASS counter() is 44
+PASS counter() is 45
+PASS counter() is 37
+PASS counter() is 38
+PASS counter() is 39
+PASS counter() is 40
+PASS counter() is 41
+PASS counter() is 42
+PASS counter() is 43
+PASS counter() is 44
+PASS counter() is 45
+PASS counter() is 46
+PASS counter() is 38
+PASS counter() is 39
+PASS counter() is 40
+PASS counter() is 41
+PASS counter() is 42
+PASS counter() is 43
+PASS counter() is 44
+PASS counter() is 45
+PASS counter() is 46
+PASS counter() is 47
+PASS counter() is 39
+PASS counter() is 40
+PASS counter() is 41
+PASS counter() is 42
+PASS counter() is 43
+PASS counter() is 44
+PASS counter() is 45
+PASS counter() is 46
+PASS counter() is 47
+PASS counter() is 48
+PASS counter() is 40
+PASS counter() is 41
+PASS counter() is 42
+PASS counter() is 43
+PASS counter() is 44
+PASS counter() is 45
+PASS counter() is 46
+PASS counter() is 47
+PASS counter() is 48
+PASS counter() is 49
+PASS counter() is 41
+PASS counter() is 42
+PASS counter() is 43
+PASS counter() is 44
+PASS counter() is 45
+PASS counter() is 46
+PASS counter() is 47
+PASS counter() is 48
+PASS counter() is 49
+PASS counter() is 50
+PASS counter() is 42
+PASS counter() is 43
+PASS counter() is 44
+PASS counter() is 45
+PASS counter() is 46
+PASS counter() is 47
+PASS counter() is 48
+PASS counter() is 49
+PASS counter() is 50
+PASS counter() is 51
+PASS counter() is 43
+PASS counter() is 44
+PASS counter() is 45
+PASS counter() is 46
+PASS counter() is 47
+PASS counter() is 48
+PASS counter() is 49
+PASS counter() is 50
+PASS counter() is 51
+PASS counter() is 52
+PASS counter() is 44
+PASS counter() is 45
+PASS counter() is 46
+PASS counter() is 47
+PASS counter() is 48
+PASS counter() is 49
+PASS counter() is 50
+PASS counter() is 51
+PASS counter() is 52
+PASS counter() is 53
+PASS counter() is 45
+PASS counter() is 46
+PASS counter() is 47
+PASS counter() is 48
+PASS counter() is 49
+PASS counter() is 50
+PASS counter() is 51
+PASS counter() is 52
+PASS counter() is 53
+PASS counter() is 54
+PASS counter() is 46
+PASS counter() is 47
+PASS counter() is 48
+PASS counter() is 49
+PASS counter() is 50
+PASS counter() is 51
+PASS counter() is 52
+PASS counter() is 53
+PASS counter() is 54
+PASS counter() is 55
+PASS counter() is 47
+PASS counter() is 48
+PASS counter() is 49
+PASS counter() is 50
+PASS counter() is 51
+PASS counter() is 52
+PASS counter() is 53
+PASS counter() is 54
+PASS counter() is 55
+PASS counter() is 56
+PASS counter() is 48
+PASS counter() is 49
+PASS counter() is 50
+PASS counter() is 51
+PASS counter() is 52
+PASS counter() is 53
+PASS counter() is 54
+PASS counter() is 55
+PASS counter() is 56
+PASS counter() is 57
+PASS counter() is 49
+PASS counter() is 50
+PASS counter() is 51
+PASS counter() is 52
+PASS counter() is 53
+PASS counter() is 54
+PASS counter() is 55
+PASS counter() is 56
+PASS counter() is 57
+PASS counter() is 58
+PASS counter() is 50
+PASS counter() is 51
+PASS counter() is 52
+PASS counter() is 53
+PASS counter() is 54
+PASS counter() is 55
+PASS counter() is 56
+PASS counter() is 57
+PASS counter() is 58
+PASS counter() is 59
+PASS counter() is 51
+PASS counter() is 52
+PASS counter() is 53
+PASS counter() is 54
+PASS counter() is 55
+PASS counter() is 56
+PASS counter() is 57
+PASS counter() is 58
+PASS counter() is 59
+PASS counter() is 60
+PASS counter() is 52
+PASS counter() is 53
+PASS counter() is 54
+PASS counter() is 55
+PASS counter() is 56
+PASS counter() is 57
+PASS counter() is 58
+PASS counter() is 59
+PASS counter() is 60
+PASS counter() is 61
+PASS counter() is 53
+PASS counter() is 54
+PASS counter() is 55
+PASS counter() is 56
+PASS counter() is 57
+PASS counter() is 58
+PASS counter() is 59
+PASS counter() is 60
+PASS counter() is 61
+PASS counter() is 62
+PASS counter() is 54
+PASS counter() is 55
+PASS counter() is 56
+PASS counter() is 57
+PASS counter() is 58
+PASS counter() is 59
+PASS counter() is 60
+PASS counter() is 61
+PASS counter() is 62
+PASS counter() is 63
+PASS counter() is 55
+PASS counter() is 56
+PASS counter() is 57
+PASS counter() is 58
+PASS counter() is 59
+PASS counter() is 60
+PASS counter() is 61
+PASS counter() is 62
+PASS counter() is 63
+PASS counter() is 64
+PASS counter() is 56
+PASS counter() is 57
+PASS counter() is 58
+PASS counter() is 59
+PASS counter() is 60
+PASS counter() is 61
+PASS counter() is 62
+PASS counter() is 63
+PASS counter() is 64
+PASS counter() is 65
+PASS counter() is 57
+PASS counter() is 58
+PASS counter() is 59
+PASS counter() is 60
+PASS counter() is 61
+PASS counter() is 62
+PASS counter() is 63
+PASS counter() is 64
+PASS counter() is 65
+PASS counter() is 66
+PASS counter() is 58
+PASS counter() is 59
+PASS counter() is 60
+PASS counter() is 61
+PASS counter() is 62
+PASS counter() is 63
+PASS counter() is 64
+PASS counter() is 65
+PASS counter() is 66
+PASS counter() is 67
+PASS counter() is 59
+PASS counter() is 60
+PASS counter() is 61
+PASS counter() is 62
+PASS counter() is 63
+PASS counter() is 64
+PASS counter() is 65
+PASS counter() is 66
+PASS counter() is 67
+PASS counter() is 68
+PASS counter() is 60
+PASS counter() is 61
+PASS counter() is 62
+PASS counter() is 63
+PASS counter() is 64
+PASS counter() is 65
+PASS counter() is 66
+PASS counter() is 67
+PASS counter() is 68
+PASS counter() is 69
+PASS counter() is 61
+PASS counter() is 62
+PASS counter() is 63
+PASS counter() is 64
+PASS counter() is 65
+PASS counter() is 66
+PASS counter() is 67
+PASS counter() is 68
+PASS counter() is 69
+PASS counter() is 70
+PASS counter() is 62
+PASS counter() is 63
+PASS counter() is 64
+PASS counter() is 65
+PASS counter() is 66
+PASS counter() is 67
+PASS counter() is 68
+PASS counter() is 69
+PASS counter() is 70
+PASS counter() is 71
+PASS counter() is 63
+PASS counter() is 64
+PASS counter() is 65
+PASS counter() is 66
+PASS counter() is 67
+PASS counter() is 68
+PASS counter() is 69
+PASS counter() is 70
+PASS counter() is 71
+PASS counter() is 72
+PASS counter() is 64
+PASS counter() is 65
+PASS counter() is 66
+PASS counter() is 67
+PASS counter() is 68
+PASS counter() is 69
+PASS counter() is 70
+PASS counter() is 71
+PASS counter() is 72
+PASS counter() is 73
+PASS counter() is 65
+PASS counter() is 66
+PASS counter() is 67
+PASS counter() is 68
+PASS counter() is 69
+PASS counter() is 70
+PASS counter() is 71
+PASS counter() is 72
+PASS counter() is 73
+PASS counter() is 74
+PASS counter() is 66
+PASS counter() is 67
+PASS counter() is 68
+PASS counter() is 69
+PASS counter() is 70
+PASS counter() is 71
+PASS counter() is 72
+PASS counter() is 73
+PASS counter() is 74
+PASS counter() is 75
+PASS counter() is 67
+PASS counter() is 68
+PASS counter() is 69
+PASS counter() is 70
+PASS counter() is 71
+PASS counter() is 72
+PASS counter() is 73
+PASS counter() is 74
+PASS counter() is 75
+PASS counter() is 76
+PASS counter() is 68
+PASS counter() is 69
+PASS counter() is 70
+PASS counter() is 71
+PASS counter() is 72
+PASS counter() is 73
+PASS counter() is 74
+PASS counter() is 75
+PASS counter() is 76
+PASS counter() is 77
+PASS counter() is 69
+PASS counter() is 70
+PASS counter() is 71
+PASS counter() is 72
+PASS counter() is 73
+PASS counter() is 74
+PASS counter() is 75
+PASS counter() is 76
+PASS counter() is 77
+PASS counter() is 78
+PASS counter() is 70
+PASS counter() is 71
+PASS counter() is 72
+PASS counter() is 73
+PASS counter() is 74
+PASS counter() is 75
+PASS counter() is 76
+PASS counter() is 77
+PASS counter() is 78
+PASS counter() is 79
+PASS counter() is 71
+PASS counter() is 72
+PASS counter() is 73
+PASS counter() is 74
+PASS counter() is 75
+PASS counter() is 76
+PASS counter() is 77
+PASS counter() is 78
+PASS counter() is 79
+PASS counter() is 80
+PASS counter() is 72
+PASS counter() is 73
+PASS counter() is 74
+PASS counter() is 75
+PASS counter() is 76
+PASS counter() is 77
+PASS counter() is 78
+PASS counter() is 79
+PASS counter() is 80
+PASS counter() is 81
+PASS counter() is 73
+PASS counter() is 74
+PASS counter() is 75
+PASS counter() is 76
+PASS counter() is 77
+PASS counter() is 78
+PASS counter() is 79
+PASS counter() is 80
+PASS counter() is 81
+PASS counter() is 82
+PASS counter() is 74
+PASS counter() is 75
+PASS counter() is 76
+PASS counter() is 77
+PASS counter() is 78
+PASS counter() is 79
+PASS counter() is 80
+PASS counter() is 81
+PASS counter() is 82
+PASS counter() is 83
+PASS counter() is 75
+PASS counter() is 76
+PASS counter() is 77
+PASS counter() is 78
+PASS counter() is 79
+PASS counter() is 80
+PASS counter() is 81
+PASS counter() is 82
+PASS counter() is 83
+PASS counter() is 84
+PASS counter() is 76
+PASS counter() is 77
+PASS counter() is 78
+PASS counter() is 79
+PASS counter() is 80
+PASS counter() is 81
+PASS counter() is 82
+PASS counter() is 83
+PASS counter() is 84
+PASS counter() is 85
+PASS counter() is 77
+PASS counter() is 78
+PASS counter() is 79
+PASS counter() is 80
+PASS counter() is 81
+PASS counter() is 82
+PASS counter() is 83
+PASS counter() is 84
+PASS counter() is 85
+PASS counter() is 86
+PASS counter() is 78
+PASS counter() is 79
+PASS counter() is 80
+PASS counter() is 81
+PASS counter() is 82
+PASS counter() is 83
+PASS counter() is 84
+PASS counter() is 85
+PASS counter() is 86
+PASS counter() is 87
+PASS counter() is 79
+PASS counter() is 80
+PASS counter() is 81
+PASS counter() is 82
+PASS counter() is 83
+PASS counter() is 84
+PASS counter() is 85
+PASS counter() is 86
+PASS counter() is 87
+PASS counter() is 88
+PASS counter() is 80
+PASS counter() is 81
+PASS counter() is 82
+PASS counter() is 83
+PASS counter() is 84
+PASS counter() is 85
+PASS counter() is 86
+PASS counter() is 87
+PASS counter() is 88
+PASS counter() is 89
+PASS counter() is 81
+PASS counter() is 82
+PASS counter() is 83
+PASS counter() is 84
+PASS counter() is 85
+PASS counter() is 86
+PASS counter() is 87
+PASS counter() is 88
+PASS counter() is 89
+PASS counter() is 90
+PASS counter() is 82
+PASS counter() is 83
+PASS counter() is 84
+PASS counter() is 85
+PASS counter() is 86
+PASS counter() is 87
+PASS counter() is 88
+PASS counter() is 89
+PASS counter() is 90
+PASS counter() is 91
+PASS counter() is 83
+PASS counter() is 84
+PASS counter() is 85
+PASS counter() is 86
+PASS counter() is 87
+PASS counter() is 88
+PASS counter() is 89
+PASS counter() is 90
+PASS counter() is 91
+PASS counter() is 92
+PASS counter() is 84
+PASS counter() is 85
+PASS counter() is 86
+PASS counter() is 87
+PASS counter() is 88
+PASS counter() is 89
+PASS counter() is 90
+PASS counter() is 91
+PASS counter() is 92
+PASS counter() is 93
+PASS counter() is 85
+PASS counter() is 86
+PASS counter() is 87
+PASS counter() is 88
+PASS counter() is 89
+PASS counter() is 90
+PASS counter() is 91
+PASS counter() is 92
+PASS counter() is 93
+PASS counter() is 94
+PASS counter() is 86
+PASS counter() is 87
+PASS counter() is 88
+PASS counter() is 89
+PASS counter() is 90
+PASS counter() is 91
+PASS counter() is 92
+PASS counter() is 93
+PASS counter() is 94
+PASS counter() is 95
+PASS counter() is 87
+PASS counter() is 88
+PASS counter() is 89
+PASS counter() is 90
+PASS counter() is 91
+PASS counter() is 92
+PASS counter() is 93
+PASS counter() is 94
+PASS counter() is 95
+PASS counter() is 96
+PASS counter() is 88
+PASS counter() is 89
+PASS counter() is 90
+PASS counter() is 91
+PASS counter() is 92
+PASS counter() is 93
+PASS counter() is 94
+PASS counter() is 95
+PASS counter() is 96
+PASS counter() is 97
+PASS counter() is 89
+PASS counter() is 90
+PASS counter() is 91
+PASS counter() is 92
+PASS counter() is 93
+PASS counter() is 94
+PASS counter() is 95
+PASS counter() is 96
+PASS counter() is 97
+PASS counter() is 98
+PASS counter() is 90
+PASS counter() is 91
+PASS counter() is 92
+PASS counter() is 93
+PASS counter() is 94
+PASS counter() is 95
+PASS counter() is 96
+PASS counter() is 97
+PASS counter() is 98
+PASS counter() is 99
+PASS counter() is 91
+PASS counter() is 92
+PASS counter() is 93
+PASS counter() is 94
+PASS counter() is 95
+PASS counter() is 96
+PASS counter() is 97
+PASS counter() is 98
+PASS counter() is 99
+PASS counter() is 100
+PASS counter() is 92
+PASS counter() is 93
+PASS counter() is 94
+PASS counter() is 95
+PASS counter() is 96
+PASS counter() is 97
+PASS counter() is 98
+PASS counter() is 99
+PASS counter() is 100
+PASS counter() is 101
+PASS counter() is 93
+PASS counter() is 94
+PASS counter() is 95
+PASS counter() is 96
+PASS counter() is 97
+PASS counter() is 98
+PASS counter() is 99
+PASS counter() is 100
+PASS counter() is 101
+PASS counter() is 102
+PASS counter() is 94
+PASS counter() is 95
+PASS counter() is 96
+PASS counter() is 97
+PASS counter() is 98
+PASS counter() is 99
+PASS counter() is 100
+PASS counter() is 101
+PASS counter() is 102
+PASS counter() is 103
+PASS counter() is 95
+PASS counter() is 96
+PASS counter() is 97
+PASS counter() is 98
+PASS counter() is 99
+PASS counter() is 100
+PASS counter() is 101
+PASS counter() is 102
+PASS counter() is 103
+PASS counter() is 104
+PASS counter() is 96
+PASS counter() is 97
+PASS counter() is 98
+PASS counter() is 99
+PASS counter() is 100
+PASS counter() is 101
+PASS counter() is 102
+PASS counter() is 103
+PASS counter() is 104
+PASS counter() is 105
+PASS counter() is 97
+PASS counter() is 98
+PASS counter() is 99
+PASS counter() is 100
+PASS counter() is 101
+PASS counter() is 102
+PASS counter() is 103
+PASS counter() is 104
+PASS counter() is 105
+PASS counter() is 106
+PASS counter() is 98
+PASS counter() is 99
+PASS counter() is 100
+PASS counter() is 101
+PASS counter() is 102
+PASS counter() is 103
+PASS counter() is 104
+PASS counter() is 105
+PASS counter() is 106
+PASS counter() is 107
+PASS counter() is 99
+PASS counter() is 100
+PASS counter() is 101
+PASS counter() is 102
+PASS counter() is 103
+PASS counter() is 104
+PASS counter() is 105
+PASS counter() is 106
+PASS counter() is 107
+PASS counter() is 108
+PASS counter() is 100
+PASS counter() is 101
+PASS counter() is 102
+PASS counter() is 103
+PASS counter() is 104
+PASS counter() is 105
+PASS counter() is 106
+PASS counter() is 107
+PASS counter() is 108
+PASS counter() is 109
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/legitimately-captured-argument.js b/deps/v8/test/webkit/legitimately-captured-argument.js
new file mode 100644 (file)
index 0000000..a7290e5
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that using an argument as a captured variable, in the legitimate sense rather than the function.arguments sense, works as expected."
+);
+
+function makeCounter(x) {
+    return function() {
+        return ++x;
+    };
+}
+
+for (var i = 0; i < 100; ++i) {
+    var counter = makeCounter(i);
+    for (var j = 0; j < 10; ++j)
+        shouldBe("counter()", "" + (i + j + 1));
+}
diff --git a/deps/v8/test/webkit/logical-or-jless-expected.txt b/deps/v8/test/webkit/logical-or-jless-expected.txt
new file mode 100644 (file)
index 0000000..983a51c
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks whether the pair of opcodes (less, jtrue) is incorrectly optimized in a LogicalOrNode.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/logical-or-jless.js b/deps/v8/test/webkit/logical-or-jless.js
new file mode 100644 (file)
index 0000000..458c06f
--- /dev/null
@@ -0,0 +1,31 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks whether the pair of opcodes (less, jtrue) is incorrectly optimized in a LogicalOrNode."
+);
+
+var failMessage = "FAIL";
+var temp = failMessage || failMessage;
+var result = 1 < 2 || false;
+shouldBeTrue("result");
diff --git a/deps/v8/test/webkit/math-expected.txt b/deps/v8/test/webkit/math-expected.txt
new file mode 100644 (file)
index 0000000..6b520f9
--- /dev/null
@@ -0,0 +1,194 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks the behavior of the Math object as described in 15.8 of the language specification.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Math.abs(NaN) is NaN
+PASS Math.abs(0) is 0
+PASS Math.abs(-0) is 0
+PASS Math.abs(1) is 1
+PASS Math.abs(-1) is 1
+PASS Math.abs(Number.MIN_VALUE) is Number.MIN_VALUE
+PASS Math.abs(-Number.MIN_VALUE) is Number.MIN_VALUE
+PASS Math.abs(Number.MAX_VALUE) is Number.MAX_VALUE
+PASS Math.abs(-Number.MAX_VALUE) is Number.MAX_VALUE
+PASS Math.abs(Infinity) is Infinity
+PASS Math.abs(-Infinity) is Infinity
+PASS Math.acos(NaN) is NaN
+PASS Math.acos(-0) is Math.acos(0)
+PASS Math.acos(1) is 0
+PASS Math.acos(1.1) is NaN
+PASS Math.acos(-1.1) is NaN
+PASS Math.acos(Infinity) is NaN
+PASS Math.acos(-Infinity) is NaN
+PASS Math.asin(NaN) is NaN
+PASS Math.asin(0) is 0
+PASS Math.asin(-0) is -0
+PASS Math.asin(1) is -Math.asin(-1)
+PASS Math.asin(1.1) is NaN
+PASS Math.asin(-1.1) is NaN
+PASS Math.asin(Infinity) is NaN
+PASS Math.asin(-Infinity) is NaN
+PASS Math.atan(NaN) is NaN
+PASS Math.atan(0) is 0
+PASS Math.atan(-0) is -0
+PASS Math.atan(Infinity) is -Math.atan(-Infinity)
+PASS Math.atan2(NaN, NaN) is NaN
+PASS Math.atan2(NaN, 0) is NaN
+PASS Math.atan2(NaN, -0) is NaN
+PASS Math.atan2(NaN, 1) is NaN
+PASS Math.atan2(NaN, Infinity) is NaN
+PASS Math.atan2(NaN, -Infinity) is NaN
+PASS Math.atan2(0, NaN) is NaN
+PASS Math.atan2(-0, NaN) is NaN
+PASS Math.atan2(1, NaN) is NaN
+PASS Math.atan2(Infinity, NaN) is NaN
+PASS Math.atan2(-Infinity, NaN) is NaN
+PASS testStr is "onetwo"
+PASS Math.ceil(NaN) is NaN
+PASS Math.ceil(0) is 0
+PASS Math.ceil(-0) is -0
+PASS Math.ceil(-0.5) is -0
+PASS Math.ceil(1) is 1
+PASS Math.ceil(-1) is -1
+PASS Math.ceil(1.1) is 2
+PASS Math.ceil(-1.1) is -1
+PASS Math.ceil(Number.MIN_VALUE) is 1
+PASS Math.ceil(-Number.MIN_VALUE) is -0
+PASS Math.ceil(Number.MAX_VALUE) is Number.MAX_VALUE
+PASS Math.ceil(-Number.MAX_VALUE) is -Number.MAX_VALUE
+PASS Math.ceil(Infinity) is Infinity
+PASS Math.ceil(-Infinity) is -Infinity
+PASS Math.cos(NaN) is NaN
+PASS Math.cos(0) is 1
+PASS Math.cos(-0) is 1
+PASS Math.cos(Infinity) is NaN
+PASS Math.cos(-Infinity) is NaN
+PASS Math.exp(NaN) is NaN
+PASS Math.exp(0) is 1
+PASS Math.exp(-0) is 1
+PASS Math.exp(Infinity) is Infinity
+PASS Math.exp(-Infinity) is 0
+PASS Math.floor(NaN) is NaN
+PASS Math.floor(0) is 0
+PASS Math.floor(-0) is -0
+PASS Math.floor(0.5) is 0
+PASS Math.floor(1) is 1
+PASS Math.floor(-1) is -1
+PASS Math.floor(1.1) is 1
+PASS Math.floor(-1.1) is -2
+PASS Math.floor(Number.MIN_VALUE) is 0
+PASS Math.floor(-Number.MIN_VALUE) is -1
+PASS Math.floor(Number.MAX_VALUE) is Number.MAX_VALUE
+PASS Math.floor(-Number.MAX_VALUE) is -Number.MAX_VALUE
+PASS Math.floor(Infinity) is Infinity
+PASS Math.floor(-Infinity) is -Infinity
+PASS Math.log(NaN) is NaN
+PASS Math.log(0) is -Infinity
+PASS Math.log(-0) is -Infinity
+PASS Math.log(1) is 0
+PASS Math.log(-1) is NaN
+PASS Math.log(-1.1) is NaN
+PASS Math.log(Infinity) is Infinity
+PASS Math.log(-Infinity) is NaN
+PASS Math.max() is -Infinity
+PASS Math.max(NaN) is NaN
+PASS Math.max(NaN,1) is NaN
+PASS Math.max(0) is 0
+PASS Math.max(-0) is -0
+PASS Math.max(-0, 0) is 0
+PASS Math.min() is Infinity
+PASS Math.min(NaN) is NaN
+PASS Math.min(NaN,1) is NaN
+PASS Math.min(0) is 0
+PASS Math.min(-0) is -0
+PASS Math.min(-0, 0) is -0
+PASS Math.pow(NaN, NaN) is NaN
+PASS Math.pow(NaN, 0) is 1
+PASS Math.pow(NaN, -0) is 1
+PASS Math.pow(NaN, 1) is NaN
+PASS Math.pow(NaN, Infinity) is NaN
+PASS Math.pow(NaN, -Infinity) is NaN
+PASS Math.pow(0, NaN) is NaN
+PASS Math.pow(-0, NaN) is NaN
+PASS Math.pow(1, NaN) is NaN
+PASS Math.pow(Infinity, NaN) is NaN
+PASS Math.pow(-Infinity, NaN) is NaN
+PASS Math.round(NaN) is NaN
+PASS Math.round(0) is 0
+PASS Math.round(-0) is -0
+PASS Math.round(0.4) is 0
+PASS Math.round(-0.4) is -0
+PASS Math.round(0.5) is 1
+PASS Math.round(-0.5) is -0
+PASS Math.round(0.6) is 1
+PASS Math.round(-0.6) is -1
+PASS Math.round(1) is 1
+PASS Math.round(-1) is -1
+PASS Math.round(1.1) is 1
+PASS Math.round(-1.1) is -1
+PASS Math.round(1.5) is 2
+PASS Math.round(-1.5) is -1
+PASS Math.round(1.6) is 2
+PASS Math.round(-1.6) is -2
+PASS Math.round(8640000000000000) is 8640000000000000
+PASS Math.round(8640000000000000.5) is 8640000000000000
+PASS Math.round(8640000000000001) is 8640000000000001
+PASS Math.round(8640000000000002) is 8640000000000002
+PASS Math.round(9007199254740990) is 9007199254740990
+PASS Math.round(9007199254740991) is 9007199254740991
+PASS Math.round(1.7976931348623157e+308) is 1.7976931348623157e+308
+PASS Math.round(-8640000000000000) is -8640000000000000
+PASS Math.round(-8640000000000001) is -8640000000000001
+PASS Math.round(-8640000000000002) is -8640000000000002
+PASS Math.round(-9007199254740990) is -9007199254740990
+PASS Math.round(-9007199254740991) is -9007199254740991
+PASS Math.round(-1.7976931348623157e+308) is -1.7976931348623157e+308
+PASS Math.round(Infinity) is Infinity
+PASS Math.round(-Infinity) is -Infinity
+PASS Math.sin(NaN) is NaN
+PASS Math.sin(0) is 0
+PASS Math.sin(-0) is -0
+PASS Math.sin(Infinity) is NaN
+PASS Math.sin(-Infinity) is NaN
+PASS Math.sqrt(NaN) is NaN
+PASS Math.sqrt(0) is 0
+PASS Math.sqrt(-0) is -0
+PASS Math.sqrt(1) is 1
+PASS Math.sqrt(-1) is NaN
+PASS Math.sqrt(Infinity) is Infinity
+PASS Math.sqrt(-Infinity) is NaN
+PASS Math.tan(NaN) is NaN
+PASS Math.tan(0) is 0
+PASS Math.tan(-0) is -0
+PASS Math.tan(Infinity) is NaN
+PASS Math.tan(-Infinity) is NaN
+PASS delete Math; is true
+PASS 'Math' in global() is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/math-transforms-expected.txt b/deps/v8/test/webkit/math-transforms-expected.txt
new file mode 100644 (file)
index 0000000..21669c8
--- /dev/null
@@ -0,0 +1,2254 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for potential edge case bugs with certain math transforms involving multiplication by 1 and unary plus.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS values.someInt * 1 is +values.someInt
+PASS values.someInt * 1 is 42
+PASS 1 * values.someInt is +values.someInt
+PASS 1 * values.someInt is 42
+PASS values.someFloat * 1 is +values.someFloat
+PASS values.someFloat * 1 is 42.42
+PASS 1 * values.someFloat is +values.someFloat
+PASS 1 * values.someFloat is 42.42
+PASS values.one * 1 is +values.one
+PASS values.one * 1 is 1
+PASS 1 * values.one is +values.one
+PASS 1 * values.one is 1
+PASS values.minusOne * 1 is +values.minusOne
+PASS values.minusOne * 1 is -1
+PASS 1 * values.minusOne is +values.minusOne
+PASS 1 * values.minusOne is -1
+PASS values.zero * 1 is +values.zero
+PASS values.zero * 1 is 0
+PASS 1 * values.zero is +values.zero
+PASS 1 * values.zero is 0
+PASS values.minusZero * 1 is +values.minusZero
+PASS values.minusZero * 1 is -0
+PASS 1 * values.minusZero is +values.minusZero
+PASS 1 * values.minusZero is -0
+PASS values.infinity * 1 is +values.infinity
+PASS values.infinity * 1 is Infinity
+PASS 1 * values.infinity is +values.infinity
+PASS 1 * values.infinity is Infinity
+PASS values.minusInfinity * 1 is +values.minusInfinity
+PASS values.minusInfinity * 1 is -Infinity
+PASS 1 * values.minusInfinity is +values.minusInfinity
+PASS 1 * values.minusInfinity is -Infinity
+PASS values.notANumber * 1 is +values.notANumber
+PASS values.notANumber * 1 is NaN
+PASS 1 * values.notANumber is +values.notANumber
+PASS 1 * values.notANumber is NaN
+PASS values.nonNumberString * 1 is +values.nonNumberString
+PASS values.nonNumberString * 1 is NaN
+PASS 1 * values.nonNumberString is +values.nonNumberString
+PASS 1 * values.nonNumberString is NaN
+PASS values.someFloatString * 1 is +values.someFloatString
+PASS values.someFloatString * 1 is 42.42
+PASS 1 * values.someFloatString is +values.someFloatString
+PASS 1 * values.someFloatString is 42.42
+PASS +values.someInt * values.someInt is values.someInt * values.someInt
+PASS +values.someInt * values.someInt is 1764
+PASS values.someInt * +values.someInt is values.someInt * values.someInt
+PASS values.someInt * +values.someInt is 1764
+PASS +values.someInt * +values.someInt is values.someInt * values.someInt
+PASS +values.someInt * +values.someInt is 1764
+PASS +values.someInt / values.someInt is values.someInt / values.someInt
+PASS +values.someInt / values.someInt is 1
+PASS values.someInt / +values.someInt is values.someInt / values.someInt
+PASS values.someInt / +values.someInt is 1
+PASS +values.someInt / +values.someInt is values.someInt / values.someInt
+PASS +values.someInt / +values.someInt is 1
+PASS +values.someInt - values.someInt is values.someInt - values.someInt
+PASS +values.someInt - values.someInt is 0
+PASS values.someInt - +values.someInt is values.someInt - values.someInt
+PASS values.someInt - +values.someInt is 0
+PASS +values.someInt - +values.someInt is values.someInt - values.someInt
+PASS +values.someInt - +values.someInt is 0
+PASS +values.someInt * values.someFloat is values.someInt * values.someFloat
+PASS +values.someInt * values.someFloat is 1781.64
+PASS values.someInt * +values.someFloat is values.someInt * values.someFloat
+PASS values.someInt * +values.someFloat is 1781.64
+PASS +values.someInt * +values.someFloat is values.someInt * values.someFloat
+PASS +values.someInt * +values.someFloat is 1781.64
+PASS +values.someInt / values.someFloat is values.someInt / values.someFloat
+PASS +values.someInt / values.someFloat is 0.9900990099009901
+PASS values.someInt / +values.someFloat is values.someInt / values.someFloat
+PASS values.someInt / +values.someFloat is 0.9900990099009901
+PASS +values.someInt / +values.someFloat is values.someInt / values.someFloat
+PASS +values.someInt / +values.someFloat is 0.9900990099009901
+PASS +values.someInt - values.someFloat is values.someInt - values.someFloat
+PASS +values.someInt - values.someFloat is -0.4200000000000017
+PASS values.someInt - +values.someFloat is values.someInt - values.someFloat
+PASS values.someInt - +values.someFloat is -0.4200000000000017
+PASS +values.someInt - +values.someFloat is values.someInt - values.someFloat
+PASS +values.someInt - +values.someFloat is -0.4200000000000017
+PASS +values.someInt * values.one is values.someInt * values.one
+PASS +values.someInt * values.one is 42
+PASS values.someInt * +values.one is values.someInt * values.one
+PASS values.someInt * +values.one is 42
+PASS +values.someInt * +values.one is values.someInt * values.one
+PASS +values.someInt * +values.one is 42
+PASS +values.someInt / values.one is values.someInt / values.one
+PASS +values.someInt / values.one is 42
+PASS values.someInt / +values.one is values.someInt / values.one
+PASS values.someInt / +values.one is 42
+PASS +values.someInt / +values.one is values.someInt / values.one
+PASS +values.someInt / +values.one is 42
+PASS +values.someInt - values.one is values.someInt - values.one
+PASS +values.someInt - values.one is 41
+PASS values.someInt - +values.one is values.someInt - values.one
+PASS values.someInt - +values.one is 41
+PASS +values.someInt - +values.one is values.someInt - values.one
+PASS +values.someInt - +values.one is 41
+PASS +values.someInt * values.minusOne is values.someInt * values.minusOne
+PASS +values.someInt * values.minusOne is -42
+PASS values.someInt * +values.minusOne is values.someInt * values.minusOne
+PASS values.someInt * +values.minusOne is -42
+PASS +values.someInt * +values.minusOne is values.someInt * values.minusOne
+PASS +values.someInt * +values.minusOne is -42
+PASS +values.someInt / values.minusOne is values.someInt / values.minusOne
+PASS +values.someInt / values.minusOne is -42
+PASS values.someInt / +values.minusOne is values.someInt / values.minusOne
+PASS values.someInt / +values.minusOne is -42
+PASS +values.someInt / +values.minusOne is values.someInt / values.minusOne
+PASS +values.someInt / +values.minusOne is -42
+PASS +values.someInt - values.minusOne is values.someInt - values.minusOne
+PASS +values.someInt - values.minusOne is 43
+PASS values.someInt - +values.minusOne is values.someInt - values.minusOne
+PASS values.someInt - +values.minusOne is 43
+PASS +values.someInt - +values.minusOne is values.someInt - values.minusOne
+PASS +values.someInt - +values.minusOne is 43
+PASS +values.someInt * values.zero is values.someInt * values.zero
+PASS +values.someInt * values.zero is 0
+PASS values.someInt * +values.zero is values.someInt * values.zero
+PASS values.someInt * +values.zero is 0
+PASS +values.someInt * +values.zero is values.someInt * values.zero
+PASS +values.someInt * +values.zero is 0
+PASS +values.someInt / values.zero is values.someInt / values.zero
+PASS +values.someInt / values.zero is Infinity
+PASS values.someInt / +values.zero is values.someInt / values.zero
+PASS values.someInt / +values.zero is Infinity
+PASS +values.someInt / +values.zero is values.someInt / values.zero
+PASS +values.someInt / +values.zero is Infinity
+PASS +values.someInt - values.zero is values.someInt - values.zero
+PASS +values.someInt - values.zero is 42
+PASS values.someInt - +values.zero is values.someInt - values.zero
+PASS values.someInt - +values.zero is 42
+PASS +values.someInt - +values.zero is values.someInt - values.zero
+PASS +values.someInt - +values.zero is 42
+PASS +values.someInt * values.minusZero is values.someInt * values.minusZero
+PASS +values.someInt * values.minusZero is -0
+PASS values.someInt * +values.minusZero is values.someInt * values.minusZero
+PASS values.someInt * +values.minusZero is -0
+PASS +values.someInt * +values.minusZero is values.someInt * values.minusZero
+PASS +values.someInt * +values.minusZero is -0
+PASS +values.someInt / values.minusZero is values.someInt / values.minusZero
+PASS +values.someInt / values.minusZero is -Infinity
+PASS values.someInt / +values.minusZero is values.someInt / values.minusZero
+PASS values.someInt / +values.minusZero is -Infinity
+PASS +values.someInt / +values.minusZero is values.someInt / values.minusZero
+PASS +values.someInt / +values.minusZero is -Infinity
+PASS +values.someInt - values.minusZero is values.someInt - values.minusZero
+PASS +values.someInt - values.minusZero is 42
+PASS values.someInt - +values.minusZero is values.someInt - values.minusZero
+PASS values.someInt - +values.minusZero is 42
+PASS +values.someInt - +values.minusZero is values.someInt - values.minusZero
+PASS +values.someInt - +values.minusZero is 42
+PASS +values.someInt * values.infinity is values.someInt * values.infinity
+PASS +values.someInt * values.infinity is Infinity
+PASS values.someInt * +values.infinity is values.someInt * values.infinity
+PASS values.someInt * +values.infinity is Infinity
+PASS +values.someInt * +values.infinity is values.someInt * values.infinity
+PASS +values.someInt * +values.infinity is Infinity
+PASS +values.someInt / values.infinity is values.someInt / values.infinity
+PASS +values.someInt / values.infinity is 0
+PASS values.someInt / +values.infinity is values.someInt / values.infinity
+PASS values.someInt / +values.infinity is 0
+PASS +values.someInt / +values.infinity is values.someInt / values.infinity
+PASS +values.someInt / +values.infinity is 0
+PASS +values.someInt - values.infinity is values.someInt - values.infinity
+PASS +values.someInt - values.infinity is -Infinity
+PASS values.someInt - +values.infinity is values.someInt - values.infinity
+PASS values.someInt - +values.infinity is -Infinity
+PASS +values.someInt - +values.infinity is values.someInt - values.infinity
+PASS +values.someInt - +values.infinity is -Infinity
+PASS +values.someInt * values.minusInfinity is values.someInt * values.minusInfinity
+PASS +values.someInt * values.minusInfinity is -Infinity
+PASS values.someInt * +values.minusInfinity is values.someInt * values.minusInfinity
+PASS values.someInt * +values.minusInfinity is -Infinity
+PASS +values.someInt * +values.minusInfinity is values.someInt * values.minusInfinity
+PASS +values.someInt * +values.minusInfinity is -Infinity
+PASS +values.someInt / values.minusInfinity is values.someInt / values.minusInfinity
+PASS +values.someInt / values.minusInfinity is -0
+PASS values.someInt / +values.minusInfinity is values.someInt / values.minusInfinity
+PASS values.someInt / +values.minusInfinity is -0
+PASS +values.someInt / +values.minusInfinity is values.someInt / values.minusInfinity
+PASS +values.someInt / +values.minusInfinity is -0
+PASS +values.someInt - values.minusInfinity is values.someInt - values.minusInfinity
+PASS +values.someInt - values.minusInfinity is Infinity
+PASS values.someInt - +values.minusInfinity is values.someInt - values.minusInfinity
+PASS values.someInt - +values.minusInfinity is Infinity
+PASS +values.someInt - +values.minusInfinity is values.someInt - values.minusInfinity
+PASS +values.someInt - +values.minusInfinity is Infinity
+PASS +values.someInt * values.notANumber is values.someInt * values.notANumber
+PASS +values.someInt * values.notANumber is NaN
+PASS values.someInt * +values.notANumber is values.someInt * values.notANumber
+PASS values.someInt * +values.notANumber is NaN
+PASS +values.someInt * +values.notANumber is values.someInt * values.notANumber
+PASS +values.someInt * +values.notANumber is NaN
+PASS +values.someInt / values.notANumber is values.someInt / values.notANumber
+PASS +values.someInt / values.notANumber is NaN
+PASS values.someInt / +values.notANumber is values.someInt / values.notANumber
+PASS values.someInt / +values.notANumber is NaN
+PASS +values.someInt / +values.notANumber is values.someInt / values.notANumber
+PASS +values.someInt / +values.notANumber is NaN
+PASS +values.someInt - values.notANumber is values.someInt - values.notANumber
+PASS +values.someInt - values.notANumber is NaN
+PASS values.someInt - +values.notANumber is values.someInt - values.notANumber
+PASS values.someInt - +values.notANumber is NaN
+PASS +values.someInt - +values.notANumber is values.someInt - values.notANumber
+PASS +values.someInt - +values.notANumber is NaN
+PASS +values.someInt * values.nonNumberString is values.someInt * values.nonNumberString
+PASS +values.someInt * values.nonNumberString is NaN
+PASS values.someInt * +values.nonNumberString is values.someInt * values.nonNumberString
+PASS values.someInt * +values.nonNumberString is NaN
+PASS +values.someInt * +values.nonNumberString is values.someInt * values.nonNumberString
+PASS +values.someInt * +values.nonNumberString is NaN
+PASS +values.someInt / values.nonNumberString is values.someInt / values.nonNumberString
+PASS +values.someInt / values.nonNumberString is NaN
+PASS values.someInt / +values.nonNumberString is values.someInt / values.nonNumberString
+PASS values.someInt / +values.nonNumberString is NaN
+PASS +values.someInt / +values.nonNumberString is values.someInt / values.nonNumberString
+PASS +values.someInt / +values.nonNumberString is NaN
+PASS +values.someInt - values.nonNumberString is values.someInt - values.nonNumberString
+PASS +values.someInt - values.nonNumberString is NaN
+PASS values.someInt - +values.nonNumberString is values.someInt - values.nonNumberString
+PASS values.someInt - +values.nonNumberString is NaN
+PASS +values.someInt - +values.nonNumberString is values.someInt - values.nonNumberString
+PASS +values.someInt - +values.nonNumberString is NaN
+PASS +values.someInt * values.someFloatString is values.someInt * values.someFloatString
+PASS +values.someInt * values.someFloatString is 1781.64
+PASS values.someInt * +values.someFloatString is values.someInt * values.someFloatString
+PASS values.someInt * +values.someFloatString is 1781.64
+PASS +values.someInt * +values.someFloatString is values.someInt * values.someFloatString
+PASS +values.someInt * +values.someFloatString is 1781.64
+PASS +values.someInt / values.someFloatString is values.someInt / values.someFloatString
+PASS +values.someInt / values.someFloatString is 0.9900990099009901
+PASS values.someInt / +values.someFloatString is values.someInt / values.someFloatString
+PASS values.someInt / +values.someFloatString is 0.9900990099009901
+PASS +values.someInt / +values.someFloatString is values.someInt / values.someFloatString
+PASS +values.someInt / +values.someFloatString is 0.9900990099009901
+PASS +values.someInt - values.someFloatString is values.someInt - values.someFloatString
+PASS +values.someInt - values.someFloatString is -0.4200000000000017
+PASS values.someInt - +values.someFloatString is values.someInt - values.someFloatString
+PASS values.someInt - +values.someFloatString is -0.4200000000000017
+PASS +values.someInt - +values.someFloatString is values.someInt - values.someFloatString
+PASS +values.someInt - +values.someFloatString is -0.4200000000000017
+PASS +values.someFloat * values.someInt is values.someFloat * values.someInt
+PASS +values.someFloat * values.someInt is 1781.64
+PASS values.someFloat * +values.someInt is values.someFloat * values.someInt
+PASS values.someFloat * +values.someInt is 1781.64
+PASS +values.someFloat * +values.someInt is values.someFloat * values.someInt
+PASS +values.someFloat * +values.someInt is 1781.64
+PASS +values.someFloat / values.someInt is values.someFloat / values.someInt
+PASS +values.someFloat / values.someInt is 1.01
+PASS values.someFloat / +values.someInt is values.someFloat / values.someInt
+PASS values.someFloat / +values.someInt is 1.01
+PASS +values.someFloat / +values.someInt is values.someFloat / values.someInt
+PASS +values.someFloat / +values.someInt is 1.01
+PASS +values.someFloat - values.someInt is values.someFloat - values.someInt
+PASS +values.someFloat - values.someInt is 0.4200000000000017
+PASS values.someFloat - +values.someInt is values.someFloat - values.someInt
+PASS values.someFloat - +values.someInt is 0.4200000000000017
+PASS +values.someFloat - +values.someInt is values.someFloat - values.someInt
+PASS +values.someFloat - +values.someInt is 0.4200000000000017
+PASS +values.someFloat * values.someFloat is values.someFloat * values.someFloat
+PASS +values.someFloat * values.someFloat is 1799.4564000000003
+PASS values.someFloat * +values.someFloat is values.someFloat * values.someFloat
+PASS values.someFloat * +values.someFloat is 1799.4564000000003
+PASS +values.someFloat * +values.someFloat is values.someFloat * values.someFloat
+PASS +values.someFloat * +values.someFloat is 1799.4564000000003
+PASS +values.someFloat / values.someFloat is values.someFloat / values.someFloat
+PASS +values.someFloat / values.someFloat is 1
+PASS values.someFloat / +values.someFloat is values.someFloat / values.someFloat
+PASS values.someFloat / +values.someFloat is 1
+PASS +values.someFloat / +values.someFloat is values.someFloat / values.someFloat
+PASS +values.someFloat / +values.someFloat is 1
+PASS +values.someFloat - values.someFloat is values.someFloat - values.someFloat
+PASS +values.someFloat - values.someFloat is 0
+PASS values.someFloat - +values.someFloat is values.someFloat - values.someFloat
+PASS values.someFloat - +values.someFloat is 0
+PASS +values.someFloat - +values.someFloat is values.someFloat - values.someFloat
+PASS +values.someFloat - +values.someFloat is 0
+PASS +values.someFloat * values.one is values.someFloat * values.one
+PASS +values.someFloat * values.one is 42.42
+PASS values.someFloat * +values.one is values.someFloat * values.one
+PASS values.someFloat * +values.one is 42.42
+PASS +values.someFloat * +values.one is values.someFloat * values.one
+PASS +values.someFloat * +values.one is 42.42
+PASS +values.someFloat / values.one is values.someFloat / values.one
+PASS +values.someFloat / values.one is 42.42
+PASS values.someFloat / +values.one is values.someFloat / values.one
+PASS values.someFloat / +values.one is 42.42
+PASS +values.someFloat / +values.one is values.someFloat / values.one
+PASS +values.someFloat / +values.one is 42.42
+PASS +values.someFloat - values.one is values.someFloat - values.one
+PASS +values.someFloat - values.one is 41.42
+PASS values.someFloat - +values.one is values.someFloat - values.one
+PASS values.someFloat - +values.one is 41.42
+PASS +values.someFloat - +values.one is values.someFloat - values.one
+PASS +values.someFloat - +values.one is 41.42
+PASS +values.someFloat * values.minusOne is values.someFloat * values.minusOne
+PASS +values.someFloat * values.minusOne is -42.42
+PASS values.someFloat * +values.minusOne is values.someFloat * values.minusOne
+PASS values.someFloat * +values.minusOne is -42.42
+PASS +values.someFloat * +values.minusOne is values.someFloat * values.minusOne
+PASS +values.someFloat * +values.minusOne is -42.42
+PASS +values.someFloat / values.minusOne is values.someFloat / values.minusOne
+PASS +values.someFloat / values.minusOne is -42.42
+PASS values.someFloat / +values.minusOne is values.someFloat / values.minusOne
+PASS values.someFloat / +values.minusOne is -42.42
+PASS +values.someFloat / +values.minusOne is values.someFloat / values.minusOne
+PASS +values.someFloat / +values.minusOne is -42.42
+PASS +values.someFloat - values.minusOne is values.someFloat - values.minusOne
+PASS +values.someFloat - values.minusOne is 43.42
+PASS values.someFloat - +values.minusOne is values.someFloat - values.minusOne
+PASS values.someFloat - +values.minusOne is 43.42
+PASS +values.someFloat - +values.minusOne is values.someFloat - values.minusOne
+PASS +values.someFloat - +values.minusOne is 43.42
+PASS +values.someFloat * values.zero is values.someFloat * values.zero
+PASS +values.someFloat * values.zero is 0
+PASS values.someFloat * +values.zero is values.someFloat * values.zero
+PASS values.someFloat * +values.zero is 0
+PASS +values.someFloat * +values.zero is values.someFloat * values.zero
+PASS +values.someFloat * +values.zero is 0
+PASS +values.someFloat / values.zero is values.someFloat / values.zero
+PASS +values.someFloat / values.zero is Infinity
+PASS values.someFloat / +values.zero is values.someFloat / values.zero
+PASS values.someFloat / +values.zero is Infinity
+PASS +values.someFloat / +values.zero is values.someFloat / values.zero
+PASS +values.someFloat / +values.zero is Infinity
+PASS +values.someFloat - values.zero is values.someFloat - values.zero
+PASS +values.someFloat - values.zero is 42.42
+PASS values.someFloat - +values.zero is values.someFloat - values.zero
+PASS values.someFloat - +values.zero is 42.42
+PASS +values.someFloat - +values.zero is values.someFloat - values.zero
+PASS +values.someFloat - +values.zero is 42.42
+PASS +values.someFloat * values.minusZero is values.someFloat * values.minusZero
+PASS +values.someFloat * values.minusZero is -0
+PASS values.someFloat * +values.minusZero is values.someFloat * values.minusZero
+PASS values.someFloat * +values.minusZero is -0
+PASS +values.someFloat * +values.minusZero is values.someFloat * values.minusZero
+PASS +values.someFloat * +values.minusZero is -0
+PASS +values.someFloat / values.minusZero is values.someFloat / values.minusZero
+PASS +values.someFloat / values.minusZero is -Infinity
+PASS values.someFloat / +values.minusZero is values.someFloat / values.minusZero
+PASS values.someFloat / +values.minusZero is -Infinity
+PASS +values.someFloat / +values.minusZero is values.someFloat / values.minusZero
+PASS +values.someFloat / +values.minusZero is -Infinity
+PASS +values.someFloat - values.minusZero is values.someFloat - values.minusZero
+PASS +values.someFloat - values.minusZero is 42.42
+PASS values.someFloat - +values.minusZero is values.someFloat - values.minusZero
+PASS values.someFloat - +values.minusZero is 42.42
+PASS +values.someFloat - +values.minusZero is values.someFloat - values.minusZero
+PASS +values.someFloat - +values.minusZero is 42.42
+PASS +values.someFloat * values.infinity is values.someFloat * values.infinity
+PASS +values.someFloat * values.infinity is Infinity
+PASS values.someFloat * +values.infinity is values.someFloat * values.infinity
+PASS values.someFloat * +values.infinity is Infinity
+PASS +values.someFloat * +values.infinity is values.someFloat * values.infinity
+PASS +values.someFloat * +values.infinity is Infinity
+PASS +values.someFloat / values.infinity is values.someFloat / values.infinity
+PASS +values.someFloat / values.infinity is 0
+PASS values.someFloat / +values.infinity is values.someFloat / values.infinity
+PASS values.someFloat / +values.infinity is 0
+PASS +values.someFloat / +values.infinity is values.someFloat / values.infinity
+PASS +values.someFloat / +values.infinity is 0
+PASS +values.someFloat - values.infinity is values.someFloat - values.infinity
+PASS +values.someFloat - values.infinity is -Infinity
+PASS values.someFloat - +values.infinity is values.someFloat - values.infinity
+PASS values.someFloat - +values.infinity is -Infinity
+PASS +values.someFloat - +values.infinity is values.someFloat - values.infinity
+PASS +values.someFloat - +values.infinity is -Infinity
+PASS +values.someFloat * values.minusInfinity is values.someFloat * values.minusInfinity
+PASS +values.someFloat * values.minusInfinity is -Infinity
+PASS values.someFloat * +values.minusInfinity is values.someFloat * values.minusInfinity
+PASS values.someFloat * +values.minusInfinity is -Infinity
+PASS +values.someFloat * +values.minusInfinity is values.someFloat * values.minusInfinity
+PASS +values.someFloat * +values.minusInfinity is -Infinity
+PASS +values.someFloat / values.minusInfinity is values.someFloat / values.minusInfinity
+PASS +values.someFloat / values.minusInfinity is -0
+PASS values.someFloat / +values.minusInfinity is values.someFloat / values.minusInfinity
+PASS values.someFloat / +values.minusInfinity is -0
+PASS +values.someFloat / +values.minusInfinity is values.someFloat / values.minusInfinity
+PASS +values.someFloat / +values.minusInfinity is -0
+PASS +values.someFloat - values.minusInfinity is values.someFloat - values.minusInfinity
+PASS +values.someFloat - values.minusInfinity is Infinity
+PASS values.someFloat - +values.minusInfinity is values.someFloat - values.minusInfinity
+PASS values.someFloat - +values.minusInfinity is Infinity
+PASS +values.someFloat - +values.minusInfinity is values.someFloat - values.minusInfinity
+PASS +values.someFloat - +values.minusInfinity is Infinity
+PASS +values.someFloat * values.notANumber is values.someFloat * values.notANumber
+PASS +values.someFloat * values.notANumber is NaN
+PASS values.someFloat * +values.notANumber is values.someFloat * values.notANumber
+PASS values.someFloat * +values.notANumber is NaN
+PASS +values.someFloat * +values.notANumber is values.someFloat * values.notANumber
+PASS +values.someFloat * +values.notANumber is NaN
+PASS +values.someFloat / values.notANumber is values.someFloat / values.notANumber
+PASS +values.someFloat / values.notANumber is NaN
+PASS values.someFloat / +values.notANumber is values.someFloat / values.notANumber
+PASS values.someFloat / +values.notANumber is NaN
+PASS +values.someFloat / +values.notANumber is values.someFloat / values.notANumber
+PASS +values.someFloat / +values.notANumber is NaN
+PASS +values.someFloat - values.notANumber is values.someFloat - values.notANumber
+PASS +values.someFloat - values.notANumber is NaN
+PASS values.someFloat - +values.notANumber is values.someFloat - values.notANumber
+PASS values.someFloat - +values.notANumber is NaN
+PASS +values.someFloat - +values.notANumber is values.someFloat - values.notANumber
+PASS +values.someFloat - +values.notANumber is NaN
+PASS +values.someFloat * values.nonNumberString is values.someFloat * values.nonNumberString
+PASS +values.someFloat * values.nonNumberString is NaN
+PASS values.someFloat * +values.nonNumberString is values.someFloat * values.nonNumberString
+PASS values.someFloat * +values.nonNumberString is NaN
+PASS +values.someFloat * +values.nonNumberString is values.someFloat * values.nonNumberString
+PASS +values.someFloat * +values.nonNumberString is NaN
+PASS +values.someFloat / values.nonNumberString is values.someFloat / values.nonNumberString
+PASS +values.someFloat / values.nonNumberString is NaN
+PASS values.someFloat / +values.nonNumberString is values.someFloat / values.nonNumberString
+PASS values.someFloat / +values.nonNumberString is NaN
+PASS +values.someFloat / +values.nonNumberString is values.someFloat / values.nonNumberString
+PASS +values.someFloat / +values.nonNumberString is NaN
+PASS +values.someFloat - values.nonNumberString is values.someFloat - values.nonNumberString
+PASS +values.someFloat - values.nonNumberString is NaN
+PASS values.someFloat - +values.nonNumberString is values.someFloat - values.nonNumberString
+PASS values.someFloat - +values.nonNumberString is NaN
+PASS +values.someFloat - +values.nonNumberString is values.someFloat - values.nonNumberString
+PASS +values.someFloat - +values.nonNumberString is NaN
+PASS +values.someFloat * values.someFloatString is values.someFloat * values.someFloatString
+PASS +values.someFloat * values.someFloatString is 1799.4564000000003
+PASS values.someFloat * +values.someFloatString is values.someFloat * values.someFloatString
+PASS values.someFloat * +values.someFloatString is 1799.4564000000003
+PASS +values.someFloat * +values.someFloatString is values.someFloat * values.someFloatString
+PASS +values.someFloat * +values.someFloatString is 1799.4564000000003
+PASS +values.someFloat / values.someFloatString is values.someFloat / values.someFloatString
+PASS +values.someFloat / values.someFloatString is 1
+PASS values.someFloat / +values.someFloatString is values.someFloat / values.someFloatString
+PASS values.someFloat / +values.someFloatString is 1
+PASS +values.someFloat / +values.someFloatString is values.someFloat / values.someFloatString
+PASS +values.someFloat / +values.someFloatString is 1
+PASS +values.someFloat - values.someFloatString is values.someFloat - values.someFloatString
+PASS +values.someFloat - values.someFloatString is 0
+PASS values.someFloat - +values.someFloatString is values.someFloat - values.someFloatString
+PASS values.someFloat - +values.someFloatString is 0
+PASS +values.someFloat - +values.someFloatString is values.someFloat - values.someFloatString
+PASS +values.someFloat - +values.someFloatString is 0
+PASS +values.one * values.someInt is values.one * values.someInt
+PASS +values.one * values.someInt is 42
+PASS values.one * +values.someInt is values.one * values.someInt
+PASS values.one * +values.someInt is 42
+PASS +values.one * +values.someInt is values.one * values.someInt
+PASS +values.one * +values.someInt is 42
+PASS +values.one / values.someInt is values.one / values.someInt
+PASS +values.one / values.someInt is 0.023809523809523808
+PASS values.one / +values.someInt is values.one / values.someInt
+PASS values.one / +values.someInt is 0.023809523809523808
+PASS +values.one / +values.someInt is values.one / values.someInt
+PASS +values.one / +values.someInt is 0.023809523809523808
+PASS +values.one - values.someInt is values.one - values.someInt
+PASS +values.one - values.someInt is -41
+PASS values.one - +values.someInt is values.one - values.someInt
+PASS values.one - +values.someInt is -41
+PASS +values.one - +values.someInt is values.one - values.someInt
+PASS +values.one - +values.someInt is -41
+PASS +values.one * values.someFloat is values.one * values.someFloat
+PASS +values.one * values.someFloat is 42.42
+PASS values.one * +values.someFloat is values.one * values.someFloat
+PASS values.one * +values.someFloat is 42.42
+PASS +values.one * +values.someFloat is values.one * values.someFloat
+PASS +values.one * +values.someFloat is 42.42
+PASS +values.one / values.someFloat is values.one / values.someFloat
+PASS +values.one / values.someFloat is 0.023573785950023574
+PASS values.one / +values.someFloat is values.one / values.someFloat
+PASS values.one / +values.someFloat is 0.023573785950023574
+PASS +values.one / +values.someFloat is values.one / values.someFloat
+PASS +values.one / +values.someFloat is 0.023573785950023574
+PASS +values.one - values.someFloat is values.one - values.someFloat
+PASS +values.one - values.someFloat is -41.42
+PASS values.one - +values.someFloat is values.one - values.someFloat
+PASS values.one - +values.someFloat is -41.42
+PASS +values.one - +values.someFloat is values.one - values.someFloat
+PASS +values.one - +values.someFloat is -41.42
+PASS +values.one * values.one is values.one * values.one
+PASS +values.one * values.one is 1
+PASS values.one * +values.one is values.one * values.one
+PASS values.one * +values.one is 1
+PASS +values.one * +values.one is values.one * values.one
+PASS +values.one * +values.one is 1
+PASS +values.one / values.one is values.one / values.one
+PASS +values.one / values.one is 1
+PASS values.one / +values.one is values.one / values.one
+PASS values.one / +values.one is 1
+PASS +values.one / +values.one is values.one / values.one
+PASS +values.one / +values.one is 1
+PASS +values.one - values.one is values.one - values.one
+PASS +values.one - values.one is 0
+PASS values.one - +values.one is values.one - values.one
+PASS values.one - +values.one is 0
+PASS +values.one - +values.one is values.one - values.one
+PASS +values.one - +values.one is 0
+PASS +values.one * values.minusOne is values.one * values.minusOne
+PASS +values.one * values.minusOne is -1
+PASS values.one * +values.minusOne is values.one * values.minusOne
+PASS values.one * +values.minusOne is -1
+PASS +values.one * +values.minusOne is values.one * values.minusOne
+PASS +values.one * +values.minusOne is -1
+PASS +values.one / values.minusOne is values.one / values.minusOne
+PASS +values.one / values.minusOne is -1
+PASS values.one / +values.minusOne is values.one / values.minusOne
+PASS values.one / +values.minusOne is -1
+PASS +values.one / +values.minusOne is values.one / values.minusOne
+PASS +values.one / +values.minusOne is -1
+PASS +values.one - values.minusOne is values.one - values.minusOne
+PASS +values.one - values.minusOne is 2
+PASS values.one - +values.minusOne is values.one - values.minusOne
+PASS values.one - +values.minusOne is 2
+PASS +values.one - +values.minusOne is values.one - values.minusOne
+PASS +values.one - +values.minusOne is 2
+PASS +values.one * values.zero is values.one * values.zero
+PASS +values.one * values.zero is 0
+PASS values.one * +values.zero is values.one * values.zero
+PASS values.one * +values.zero is 0
+PASS +values.one * +values.zero is values.one * values.zero
+PASS +values.one * +values.zero is 0
+PASS +values.one / values.zero is values.one / values.zero
+PASS +values.one / values.zero is Infinity
+PASS values.one / +values.zero is values.one / values.zero
+PASS values.one / +values.zero is Infinity
+PASS +values.one / +values.zero is values.one / values.zero
+PASS +values.one / +values.zero is Infinity
+PASS +values.one - values.zero is values.one - values.zero
+PASS +values.one - values.zero is 1
+PASS values.one - +values.zero is values.one - values.zero
+PASS values.one - +values.zero is 1
+PASS +values.one - +values.zero is values.one - values.zero
+PASS +values.one - +values.zero is 1
+PASS +values.one * values.minusZero is values.one * values.minusZero
+PASS +values.one * values.minusZero is -0
+PASS values.one * +values.minusZero is values.one * values.minusZero
+PASS values.one * +values.minusZero is -0
+PASS +values.one * +values.minusZero is values.one * values.minusZero
+PASS +values.one * +values.minusZero is -0
+PASS +values.one / values.minusZero is values.one / values.minusZero
+PASS +values.one / values.minusZero is -Infinity
+PASS values.one / +values.minusZero is values.one / values.minusZero
+PASS values.one / +values.minusZero is -Infinity
+PASS +values.one / +values.minusZero is values.one / values.minusZero
+PASS +values.one / +values.minusZero is -Infinity
+PASS +values.one - values.minusZero is values.one - values.minusZero
+PASS +values.one - values.minusZero is 1
+PASS values.one - +values.minusZero is values.one - values.minusZero
+PASS values.one - +values.minusZero is 1
+PASS +values.one - +values.minusZero is values.one - values.minusZero
+PASS +values.one - +values.minusZero is 1
+PASS +values.one * values.infinity is values.one * values.infinity
+PASS +values.one * values.infinity is Infinity
+PASS values.one * +values.infinity is values.one * values.infinity
+PASS values.one * +values.infinity is Infinity
+PASS +values.one * +values.infinity is values.one * values.infinity
+PASS +values.one * +values.infinity is Infinity
+PASS +values.one / values.infinity is values.one / values.infinity
+PASS +values.one / values.infinity is 0
+PASS values.one / +values.infinity is values.one / values.infinity
+PASS values.one / +values.infinity is 0
+PASS +values.one / +values.infinity is values.one / values.infinity
+PASS +values.one / +values.infinity is 0
+PASS +values.one - values.infinity is values.one - values.infinity
+PASS +values.one - values.infinity is -Infinity
+PASS values.one - +values.infinity is values.one - values.infinity
+PASS values.one - +values.infinity is -Infinity
+PASS +values.one - +values.infinity is values.one - values.infinity
+PASS +values.one - +values.infinity is -Infinity
+PASS +values.one * values.minusInfinity is values.one * values.minusInfinity
+PASS +values.one * values.minusInfinity is -Infinity
+PASS values.one * +values.minusInfinity is values.one * values.minusInfinity
+PASS values.one * +values.minusInfinity is -Infinity
+PASS +values.one * +values.minusInfinity is values.one * values.minusInfinity
+PASS +values.one * +values.minusInfinity is -Infinity
+PASS +values.one / values.minusInfinity is values.one / values.minusInfinity
+PASS +values.one / values.minusInfinity is -0
+PASS values.one / +values.minusInfinity is values.one / values.minusInfinity
+PASS values.one / +values.minusInfinity is -0
+PASS +values.one / +values.minusInfinity is values.one / values.minusInfinity
+PASS +values.one / +values.minusInfinity is -0
+PASS +values.one - values.minusInfinity is values.one - values.minusInfinity
+PASS +values.one - values.minusInfinity is Infinity
+PASS values.one - +values.minusInfinity is values.one - values.minusInfinity
+PASS values.one - +values.minusInfinity is Infinity
+PASS +values.one - +values.minusInfinity is values.one - values.minusInfinity
+PASS +values.one - +values.minusInfinity is Infinity
+PASS +values.one * values.notANumber is values.one * values.notANumber
+PASS +values.one * values.notANumber is NaN
+PASS values.one * +values.notANumber is values.one * values.notANumber
+PASS values.one * +values.notANumber is NaN
+PASS +values.one * +values.notANumber is values.one * values.notANumber
+PASS +values.one * +values.notANumber is NaN
+PASS +values.one / values.notANumber is values.one / values.notANumber
+PASS +values.one / values.notANumber is NaN
+PASS values.one / +values.notANumber is values.one / values.notANumber
+PASS values.one / +values.notANumber is NaN
+PASS +values.one / +values.notANumber is values.one / values.notANumber
+PASS +values.one / +values.notANumber is NaN
+PASS +values.one - values.notANumber is values.one - values.notANumber
+PASS +values.one - values.notANumber is NaN
+PASS values.one - +values.notANumber is values.one - values.notANumber
+PASS values.one - +values.notANumber is NaN
+PASS +values.one - +values.notANumber is values.one - values.notANumber
+PASS +values.one - +values.notANumber is NaN
+PASS +values.one * values.nonNumberString is values.one * values.nonNumberString
+PASS +values.one * values.nonNumberString is NaN
+PASS values.one * +values.nonNumberString is values.one * values.nonNumberString
+PASS values.one * +values.nonNumberString is NaN
+PASS +values.one * +values.nonNumberString is values.one * values.nonNumberString
+PASS +values.one * +values.nonNumberString is NaN
+PASS +values.one / values.nonNumberString is values.one / values.nonNumberString
+PASS +values.one / values.nonNumberString is NaN
+PASS values.one / +values.nonNumberString is values.one / values.nonNumberString
+PASS values.one / +values.nonNumberString is NaN
+PASS +values.one / +values.nonNumberString is values.one / values.nonNumberString
+PASS +values.one / +values.nonNumberString is NaN
+PASS +values.one - values.nonNumberString is values.one - values.nonNumberString
+PASS +values.one - values.nonNumberString is NaN
+PASS values.one - +values.nonNumberString is values.one - values.nonNumberString
+PASS values.one - +values.nonNumberString is NaN
+PASS +values.one - +values.nonNumberString is values.one - values.nonNumberString
+PASS +values.one - +values.nonNumberString is NaN
+PASS +values.one * values.someFloatString is values.one * values.someFloatString
+PASS +values.one * values.someFloatString is 42.42
+PASS values.one * +values.someFloatString is values.one * values.someFloatString
+PASS values.one * +values.someFloatString is 42.42
+PASS +values.one * +values.someFloatString is values.one * values.someFloatString
+PASS +values.one * +values.someFloatString is 42.42
+PASS +values.one / values.someFloatString is values.one / values.someFloatString
+PASS +values.one / values.someFloatString is 0.023573785950023574
+PASS values.one / +values.someFloatString is values.one / values.someFloatString
+PASS values.one / +values.someFloatString is 0.023573785950023574
+PASS +values.one / +values.someFloatString is values.one / values.someFloatString
+PASS +values.one / +values.someFloatString is 0.023573785950023574
+PASS +values.one - values.someFloatString is values.one - values.someFloatString
+PASS +values.one - values.someFloatString is -41.42
+PASS values.one - +values.someFloatString is values.one - values.someFloatString
+PASS values.one - +values.someFloatString is -41.42
+PASS +values.one - +values.someFloatString is values.one - values.someFloatString
+PASS +values.one - +values.someFloatString is -41.42
+PASS +values.minusOne * values.someInt is values.minusOne * values.someInt
+PASS +values.minusOne * values.someInt is -42
+PASS values.minusOne * +values.someInt is values.minusOne * values.someInt
+PASS values.minusOne * +values.someInt is -42
+PASS +values.minusOne * +values.someInt is values.minusOne * values.someInt
+PASS +values.minusOne * +values.someInt is -42
+PASS +values.minusOne / values.someInt is values.minusOne / values.someInt
+PASS +values.minusOne / values.someInt is -0.023809523809523808
+PASS values.minusOne / +values.someInt is values.minusOne / values.someInt
+PASS values.minusOne / +values.someInt is -0.023809523809523808
+PASS +values.minusOne / +values.someInt is values.minusOne / values.someInt
+PASS +values.minusOne / +values.someInt is -0.023809523809523808
+PASS +values.minusOne - values.someInt is values.minusOne - values.someInt
+PASS +values.minusOne - values.someInt is -43
+PASS values.minusOne - +values.someInt is values.minusOne - values.someInt
+PASS values.minusOne - +values.someInt is -43
+PASS +values.minusOne - +values.someInt is values.minusOne - values.someInt
+PASS +values.minusOne - +values.someInt is -43
+PASS +values.minusOne * values.someFloat is values.minusOne * values.someFloat
+PASS +values.minusOne * values.someFloat is -42.42
+PASS values.minusOne * +values.someFloat is values.minusOne * values.someFloat
+PASS values.minusOne * +values.someFloat is -42.42
+PASS +values.minusOne * +values.someFloat is values.minusOne * values.someFloat
+PASS +values.minusOne * +values.someFloat is -42.42
+PASS +values.minusOne / values.someFloat is values.minusOne / values.someFloat
+PASS +values.minusOne / values.someFloat is -0.023573785950023574
+PASS values.minusOne / +values.someFloat is values.minusOne / values.someFloat
+PASS values.minusOne / +values.someFloat is -0.023573785950023574
+PASS +values.minusOne / +values.someFloat is values.minusOne / values.someFloat
+PASS +values.minusOne / +values.someFloat is -0.023573785950023574
+PASS +values.minusOne - values.someFloat is values.minusOne - values.someFloat
+PASS +values.minusOne - values.someFloat is -43.42
+PASS values.minusOne - +values.someFloat is values.minusOne - values.someFloat
+PASS values.minusOne - +values.someFloat is -43.42
+PASS +values.minusOne - +values.someFloat is values.minusOne - values.someFloat
+PASS +values.minusOne - +values.someFloat is -43.42
+PASS +values.minusOne * values.one is values.minusOne * values.one
+PASS +values.minusOne * values.one is -1
+PASS values.minusOne * +values.one is values.minusOne * values.one
+PASS values.minusOne * +values.one is -1
+PASS +values.minusOne * +values.one is values.minusOne * values.one
+PASS +values.minusOne * +values.one is -1
+PASS +values.minusOne / values.one is values.minusOne / values.one
+PASS +values.minusOne / values.one is -1
+PASS values.minusOne / +values.one is values.minusOne / values.one
+PASS values.minusOne / +values.one is -1
+PASS +values.minusOne / +values.one is values.minusOne / values.one
+PASS +values.minusOne / +values.one is -1
+PASS +values.minusOne - values.one is values.minusOne - values.one
+PASS +values.minusOne - values.one is -2
+PASS values.minusOne - +values.one is values.minusOne - values.one
+PASS values.minusOne - +values.one is -2
+PASS +values.minusOne - +values.one is values.minusOne - values.one
+PASS +values.minusOne - +values.one is -2
+PASS +values.minusOne * values.minusOne is values.minusOne * values.minusOne
+PASS +values.minusOne * values.minusOne is 1
+PASS values.minusOne * +values.minusOne is values.minusOne * values.minusOne
+PASS values.minusOne * +values.minusOne is 1
+PASS +values.minusOne * +values.minusOne is values.minusOne * values.minusOne
+PASS +values.minusOne * +values.minusOne is 1
+PASS +values.minusOne / values.minusOne is values.minusOne / values.minusOne
+PASS +values.minusOne / values.minusOne is 1
+PASS values.minusOne / +values.minusOne is values.minusOne / values.minusOne
+PASS values.minusOne / +values.minusOne is 1
+PASS +values.minusOne / +values.minusOne is values.minusOne / values.minusOne
+PASS +values.minusOne / +values.minusOne is 1
+PASS +values.minusOne - values.minusOne is values.minusOne - values.minusOne
+PASS +values.minusOne - values.minusOne is 0
+PASS values.minusOne - +values.minusOne is values.minusOne - values.minusOne
+PASS values.minusOne - +values.minusOne is 0
+PASS +values.minusOne - +values.minusOne is values.minusOne - values.minusOne
+PASS +values.minusOne - +values.minusOne is 0
+PASS +values.minusOne * values.zero is values.minusOne * values.zero
+PASS +values.minusOne * values.zero is -0
+PASS values.minusOne * +values.zero is values.minusOne * values.zero
+PASS values.minusOne * +values.zero is -0
+PASS +values.minusOne * +values.zero is values.minusOne * values.zero
+PASS +values.minusOne * +values.zero is -0
+PASS +values.minusOne / values.zero is values.minusOne / values.zero
+PASS +values.minusOne / values.zero is -Infinity
+PASS values.minusOne / +values.zero is values.minusOne / values.zero
+PASS values.minusOne / +values.zero is -Infinity
+PASS +values.minusOne / +values.zero is values.minusOne / values.zero
+PASS +values.minusOne / +values.zero is -Infinity
+PASS +values.minusOne - values.zero is values.minusOne - values.zero
+PASS +values.minusOne - values.zero is -1
+PASS values.minusOne - +values.zero is values.minusOne - values.zero
+PASS values.minusOne - +values.zero is -1
+PASS +values.minusOne - +values.zero is values.minusOne - values.zero
+PASS +values.minusOne - +values.zero is -1
+PASS +values.minusOne * values.minusZero is values.minusOne * values.minusZero
+PASS +values.minusOne * values.minusZero is 0
+PASS values.minusOne * +values.minusZero is values.minusOne * values.minusZero
+PASS values.minusOne * +values.minusZero is 0
+PASS +values.minusOne * +values.minusZero is values.minusOne * values.minusZero
+PASS +values.minusOne * +values.minusZero is 0
+PASS +values.minusOne / values.minusZero is values.minusOne / values.minusZero
+PASS +values.minusOne / values.minusZero is Infinity
+PASS values.minusOne / +values.minusZero is values.minusOne / values.minusZero
+PASS values.minusOne / +values.minusZero is Infinity
+PASS +values.minusOne / +values.minusZero is values.minusOne / values.minusZero
+PASS +values.minusOne / +values.minusZero is Infinity
+PASS +values.minusOne - values.minusZero is values.minusOne - values.minusZero
+PASS +values.minusOne - values.minusZero is -1
+PASS values.minusOne - +values.minusZero is values.minusOne - values.minusZero
+PASS values.minusOne - +values.minusZero is -1
+PASS +values.minusOne - +values.minusZero is values.minusOne - values.minusZero
+PASS +values.minusOne - +values.minusZero is -1
+PASS +values.minusOne * values.infinity is values.minusOne * values.infinity
+PASS +values.minusOne * values.infinity is -Infinity
+PASS values.minusOne * +values.infinity is values.minusOne * values.infinity
+PASS values.minusOne * +values.infinity is -Infinity
+PASS +values.minusOne * +values.infinity is values.minusOne * values.infinity
+PASS +values.minusOne * +values.infinity is -Infinity
+PASS +values.minusOne / values.infinity is values.minusOne / values.infinity
+PASS +values.minusOne / values.infinity is -0
+PASS values.minusOne / +values.infinity is values.minusOne / values.infinity
+PASS values.minusOne / +values.infinity is -0
+PASS +values.minusOne / +values.infinity is values.minusOne / values.infinity
+PASS +values.minusOne / +values.infinity is -0
+PASS +values.minusOne - values.infinity is values.minusOne - values.infinity
+PASS +values.minusOne - values.infinity is -Infinity
+PASS values.minusOne - +values.infinity is values.minusOne - values.infinity
+PASS values.minusOne - +values.infinity is -Infinity
+PASS +values.minusOne - +values.infinity is values.minusOne - values.infinity
+PASS +values.minusOne - +values.infinity is -Infinity
+PASS +values.minusOne * values.minusInfinity is values.minusOne * values.minusInfinity
+PASS +values.minusOne * values.minusInfinity is Infinity
+PASS values.minusOne * +values.minusInfinity is values.minusOne * values.minusInfinity
+PASS values.minusOne * +values.minusInfinity is Infinity
+PASS +values.minusOne * +values.minusInfinity is values.minusOne * values.minusInfinity
+PASS +values.minusOne * +values.minusInfinity is Infinity
+PASS +values.minusOne / values.minusInfinity is values.minusOne / values.minusInfinity
+PASS +values.minusOne / values.minusInfinity is 0
+PASS values.minusOne / +values.minusInfinity is values.minusOne / values.minusInfinity
+PASS values.minusOne / +values.minusInfinity is 0
+PASS +values.minusOne / +values.minusInfinity is values.minusOne / values.minusInfinity
+PASS +values.minusOne / +values.minusInfinity is 0
+PASS +values.minusOne - values.minusInfinity is values.minusOne - values.minusInfinity
+PASS +values.minusOne - values.minusInfinity is Infinity
+PASS values.minusOne - +values.minusInfinity is values.minusOne - values.minusInfinity
+PASS values.minusOne - +values.minusInfinity is Infinity
+PASS +values.minusOne - +values.minusInfinity is values.minusOne - values.minusInfinity
+PASS +values.minusOne - +values.minusInfinity is Infinity
+PASS +values.minusOne * values.notANumber is values.minusOne * values.notANumber
+PASS +values.minusOne * values.notANumber is NaN
+PASS values.minusOne * +values.notANumber is values.minusOne * values.notANumber
+PASS values.minusOne * +values.notANumber is NaN
+PASS +values.minusOne * +values.notANumber is values.minusOne * values.notANumber
+PASS +values.minusOne * +values.notANumber is NaN
+PASS +values.minusOne / values.notANumber is values.minusOne / values.notANumber
+PASS +values.minusOne / values.notANumber is NaN
+PASS values.minusOne / +values.notANumber is values.minusOne / values.notANumber
+PASS values.minusOne / +values.notANumber is NaN
+PASS +values.minusOne / +values.notANumber is values.minusOne / values.notANumber
+PASS +values.minusOne / +values.notANumber is NaN
+PASS +values.minusOne - values.notANumber is values.minusOne - values.notANumber
+PASS +values.minusOne - values.notANumber is NaN
+PASS values.minusOne - +values.notANumber is values.minusOne - values.notANumber
+PASS values.minusOne - +values.notANumber is NaN
+PASS +values.minusOne - +values.notANumber is values.minusOne - values.notANumber
+PASS +values.minusOne - +values.notANumber is NaN
+PASS +values.minusOne * values.nonNumberString is values.minusOne * values.nonNumberString
+PASS +values.minusOne * values.nonNumberString is NaN
+PASS values.minusOne * +values.nonNumberString is values.minusOne * values.nonNumberString
+PASS values.minusOne * +values.nonNumberString is NaN
+PASS +values.minusOne * +values.nonNumberString is values.minusOne * values.nonNumberString
+PASS +values.minusOne * +values.nonNumberString is NaN
+PASS +values.minusOne / values.nonNumberString is values.minusOne / values.nonNumberString
+PASS +values.minusOne / values.nonNumberString is NaN
+PASS values.minusOne / +values.nonNumberString is values.minusOne / values.nonNumberString
+PASS values.minusOne / +values.nonNumberString is NaN
+PASS +values.minusOne / +values.nonNumberString is values.minusOne / values.nonNumberString
+PASS +values.minusOne / +values.nonNumberString is NaN
+PASS +values.minusOne - values.nonNumberString is values.minusOne - values.nonNumberString
+PASS +values.minusOne - values.nonNumberString is NaN
+PASS values.minusOne - +values.nonNumberString is values.minusOne - values.nonNumberString
+PASS values.minusOne - +values.nonNumberString is NaN
+PASS +values.minusOne - +values.nonNumberString is values.minusOne - values.nonNumberString
+PASS +values.minusOne - +values.nonNumberString is NaN
+PASS +values.minusOne * values.someFloatString is values.minusOne * values.someFloatString
+PASS +values.minusOne * values.someFloatString is -42.42
+PASS values.minusOne * +values.someFloatString is values.minusOne * values.someFloatString
+PASS values.minusOne * +values.someFloatString is -42.42
+PASS +values.minusOne * +values.someFloatString is values.minusOne * values.someFloatString
+PASS +values.minusOne * +values.someFloatString is -42.42
+PASS +values.minusOne / values.someFloatString is values.minusOne / values.someFloatString
+PASS +values.minusOne / values.someFloatString is -0.023573785950023574
+PASS values.minusOne / +values.someFloatString is values.minusOne / values.someFloatString
+PASS values.minusOne / +values.someFloatString is -0.023573785950023574
+PASS +values.minusOne / +values.someFloatString is values.minusOne / values.someFloatString
+PASS +values.minusOne / +values.someFloatString is -0.023573785950023574
+PASS +values.minusOne - values.someFloatString is values.minusOne - values.someFloatString
+PASS +values.minusOne - values.someFloatString is -43.42
+PASS values.minusOne - +values.someFloatString is values.minusOne - values.someFloatString
+PASS values.minusOne - +values.someFloatString is -43.42
+PASS +values.minusOne - +values.someFloatString is values.minusOne - values.someFloatString
+PASS +values.minusOne - +values.someFloatString is -43.42
+PASS +values.zero * values.someInt is values.zero * values.someInt
+PASS +values.zero * values.someInt is 0
+PASS values.zero * +values.someInt is values.zero * values.someInt
+PASS values.zero * +values.someInt is 0
+PASS +values.zero * +values.someInt is values.zero * values.someInt
+PASS +values.zero * +values.someInt is 0
+PASS +values.zero / values.someInt is values.zero / values.someInt
+PASS +values.zero / values.someInt is 0
+PASS values.zero / +values.someInt is values.zero / values.someInt
+PASS values.zero / +values.someInt is 0
+PASS +values.zero / +values.someInt is values.zero / values.someInt
+PASS +values.zero / +values.someInt is 0
+PASS +values.zero - values.someInt is values.zero - values.someInt
+PASS +values.zero - values.someInt is -42
+PASS values.zero - +values.someInt is values.zero - values.someInt
+PASS values.zero - +values.someInt is -42
+PASS +values.zero - +values.someInt is values.zero - values.someInt
+PASS +values.zero - +values.someInt is -42
+PASS +values.zero * values.someFloat is values.zero * values.someFloat
+PASS +values.zero * values.someFloat is 0
+PASS values.zero * +values.someFloat is values.zero * values.someFloat
+PASS values.zero * +values.someFloat is 0
+PASS +values.zero * +values.someFloat is values.zero * values.someFloat
+PASS +values.zero * +values.someFloat is 0
+PASS +values.zero / values.someFloat is values.zero / values.someFloat
+PASS +values.zero / values.someFloat is 0
+PASS values.zero / +values.someFloat is values.zero / values.someFloat
+PASS values.zero / +values.someFloat is 0
+PASS +values.zero / +values.someFloat is values.zero / values.someFloat
+PASS +values.zero / +values.someFloat is 0
+PASS +values.zero - values.someFloat is values.zero - values.someFloat
+PASS +values.zero - values.someFloat is -42.42
+PASS values.zero - +values.someFloat is values.zero - values.someFloat
+PASS values.zero - +values.someFloat is -42.42
+PASS +values.zero - +values.someFloat is values.zero - values.someFloat
+PASS +values.zero - +values.someFloat is -42.42
+PASS +values.zero * values.one is values.zero * values.one
+PASS +values.zero * values.one is 0
+PASS values.zero * +values.one is values.zero * values.one
+PASS values.zero * +values.one is 0
+PASS +values.zero * +values.one is values.zero * values.one
+PASS +values.zero * +values.one is 0
+PASS +values.zero / values.one is values.zero / values.one
+PASS +values.zero / values.one is 0
+PASS values.zero / +values.one is values.zero / values.one
+PASS values.zero / +values.one is 0
+PASS +values.zero / +values.one is values.zero / values.one
+PASS +values.zero / +values.one is 0
+PASS +values.zero - values.one is values.zero - values.one
+PASS +values.zero - values.one is -1
+PASS values.zero - +values.one is values.zero - values.one
+PASS values.zero - +values.one is -1
+PASS +values.zero - +values.one is values.zero - values.one
+PASS +values.zero - +values.one is -1
+PASS +values.zero * values.minusOne is values.zero * values.minusOne
+PASS +values.zero * values.minusOne is -0
+PASS values.zero * +values.minusOne is values.zero * values.minusOne
+PASS values.zero * +values.minusOne is -0
+PASS +values.zero * +values.minusOne is values.zero * values.minusOne
+PASS +values.zero * +values.minusOne is -0
+PASS +values.zero / values.minusOne is values.zero / values.minusOne
+PASS +values.zero / values.minusOne is -0
+PASS values.zero / +values.minusOne is values.zero / values.minusOne
+PASS values.zero / +values.minusOne is -0
+PASS +values.zero / +values.minusOne is values.zero / values.minusOne
+PASS +values.zero / +values.minusOne is -0
+PASS +values.zero - values.minusOne is values.zero - values.minusOne
+PASS +values.zero - values.minusOne is 1
+PASS values.zero - +values.minusOne is values.zero - values.minusOne
+PASS values.zero - +values.minusOne is 1
+PASS +values.zero - +values.minusOne is values.zero - values.minusOne
+PASS +values.zero - +values.minusOne is 1
+PASS +values.zero * values.zero is values.zero * values.zero
+PASS +values.zero * values.zero is 0
+PASS values.zero * +values.zero is values.zero * values.zero
+PASS values.zero * +values.zero is 0
+PASS +values.zero * +values.zero is values.zero * values.zero
+PASS +values.zero * +values.zero is 0
+PASS +values.zero / values.zero is values.zero / values.zero
+PASS +values.zero / values.zero is NaN
+PASS values.zero / +values.zero is values.zero / values.zero
+PASS values.zero / +values.zero is NaN
+PASS +values.zero / +values.zero is values.zero / values.zero
+PASS +values.zero / +values.zero is NaN
+PASS +values.zero - values.zero is values.zero - values.zero
+PASS +values.zero - values.zero is 0
+PASS values.zero - +values.zero is values.zero - values.zero
+PASS values.zero - +values.zero is 0
+PASS +values.zero - +values.zero is values.zero - values.zero
+PASS +values.zero - +values.zero is 0
+PASS +values.zero * values.minusZero is values.zero * values.minusZero
+PASS +values.zero * values.minusZero is -0
+PASS values.zero * +values.minusZero is values.zero * values.minusZero
+PASS values.zero * +values.minusZero is -0
+PASS +values.zero * +values.minusZero is values.zero * values.minusZero
+PASS +values.zero * +values.minusZero is -0
+PASS +values.zero / values.minusZero is values.zero / values.minusZero
+PASS +values.zero / values.minusZero is NaN
+PASS values.zero / +values.minusZero is values.zero / values.minusZero
+PASS values.zero / +values.minusZero is NaN
+PASS +values.zero / +values.minusZero is values.zero / values.minusZero
+PASS +values.zero / +values.minusZero is NaN
+PASS +values.zero - values.minusZero is values.zero - values.minusZero
+PASS +values.zero - values.minusZero is 0
+PASS values.zero - +values.minusZero is values.zero - values.minusZero
+PASS values.zero - +values.minusZero is 0
+PASS +values.zero - +values.minusZero is values.zero - values.minusZero
+PASS +values.zero - +values.minusZero is 0
+PASS +values.zero * values.infinity is values.zero * values.infinity
+PASS +values.zero * values.infinity is NaN
+PASS values.zero * +values.infinity is values.zero * values.infinity
+PASS values.zero * +values.infinity is NaN
+PASS +values.zero * +values.infinity is values.zero * values.infinity
+PASS +values.zero * +values.infinity is NaN
+PASS +values.zero / values.infinity is values.zero / values.infinity
+PASS +values.zero / values.infinity is 0
+PASS values.zero / +values.infinity is values.zero / values.infinity
+PASS values.zero / +values.infinity is 0
+PASS +values.zero / +values.infinity is values.zero / values.infinity
+PASS +values.zero / +values.infinity is 0
+PASS +values.zero - values.infinity is values.zero - values.infinity
+PASS +values.zero - values.infinity is -Infinity
+PASS values.zero - +values.infinity is values.zero - values.infinity
+PASS values.zero - +values.infinity is -Infinity
+PASS +values.zero - +values.infinity is values.zero - values.infinity
+PASS +values.zero - +values.infinity is -Infinity
+PASS +values.zero * values.minusInfinity is values.zero * values.minusInfinity
+PASS +values.zero * values.minusInfinity is NaN
+PASS values.zero * +values.minusInfinity is values.zero * values.minusInfinity
+PASS values.zero * +values.minusInfinity is NaN
+PASS +values.zero * +values.minusInfinity is values.zero * values.minusInfinity
+PASS +values.zero * +values.minusInfinity is NaN
+PASS +values.zero / values.minusInfinity is values.zero / values.minusInfinity
+PASS +values.zero / values.minusInfinity is -0
+PASS values.zero / +values.minusInfinity is values.zero / values.minusInfinity
+PASS values.zero / +values.minusInfinity is -0
+PASS +values.zero / +values.minusInfinity is values.zero / values.minusInfinity
+PASS +values.zero / +values.minusInfinity is -0
+PASS +values.zero - values.minusInfinity is values.zero - values.minusInfinity
+PASS +values.zero - values.minusInfinity is Infinity
+PASS values.zero - +values.minusInfinity is values.zero - values.minusInfinity
+PASS values.zero - +values.minusInfinity is Infinity
+PASS +values.zero - +values.minusInfinity is values.zero - values.minusInfinity
+PASS +values.zero - +values.minusInfinity is Infinity
+PASS +values.zero * values.notANumber is values.zero * values.notANumber
+PASS +values.zero * values.notANumber is NaN
+PASS values.zero * +values.notANumber is values.zero * values.notANumber
+PASS values.zero * +values.notANumber is NaN
+PASS +values.zero * +values.notANumber is values.zero * values.notANumber
+PASS +values.zero * +values.notANumber is NaN
+PASS +values.zero / values.notANumber is values.zero / values.notANumber
+PASS +values.zero / values.notANumber is NaN
+PASS values.zero / +values.notANumber is values.zero / values.notANumber
+PASS values.zero / +values.notANumber is NaN
+PASS +values.zero / +values.notANumber is values.zero / values.notANumber
+PASS +values.zero / +values.notANumber is NaN
+PASS +values.zero - values.notANumber is values.zero - values.notANumber
+PASS +values.zero - values.notANumber is NaN
+PASS values.zero - +values.notANumber is values.zero - values.notANumber
+PASS values.zero - +values.notANumber is NaN
+PASS +values.zero - +values.notANumber is values.zero - values.notANumber
+PASS +values.zero - +values.notANumber is NaN
+PASS +values.zero * values.nonNumberString is values.zero * values.nonNumberString
+PASS +values.zero * values.nonNumberString is NaN
+PASS values.zero * +values.nonNumberString is values.zero * values.nonNumberString
+PASS values.zero * +values.nonNumberString is NaN
+PASS +values.zero * +values.nonNumberString is values.zero * values.nonNumberString
+PASS +values.zero * +values.nonNumberString is NaN
+PASS +values.zero / values.nonNumberString is values.zero / values.nonNumberString
+PASS +values.zero / values.nonNumberString is NaN
+PASS values.zero / +values.nonNumberString is values.zero / values.nonNumberString
+PASS values.zero / +values.nonNumberString is NaN
+PASS +values.zero / +values.nonNumberString is values.zero / values.nonNumberString
+PASS +values.zero / +values.nonNumberString is NaN
+PASS +values.zero - values.nonNumberString is values.zero - values.nonNumberString
+PASS +values.zero - values.nonNumberString is NaN
+PASS values.zero - +values.nonNumberString is values.zero - values.nonNumberString
+PASS values.zero - +values.nonNumberString is NaN
+PASS +values.zero - +values.nonNumberString is values.zero - values.nonNumberString
+PASS +values.zero - +values.nonNumberString is NaN
+PASS +values.zero * values.someFloatString is values.zero * values.someFloatString
+PASS +values.zero * values.someFloatString is 0
+PASS values.zero * +values.someFloatString is values.zero * values.someFloatString
+PASS values.zero * +values.someFloatString is 0
+PASS +values.zero * +values.someFloatString is values.zero * values.someFloatString
+PASS +values.zero * +values.someFloatString is 0
+PASS +values.zero / values.someFloatString is values.zero / values.someFloatString
+PASS +values.zero / values.someFloatString is 0
+PASS values.zero / +values.someFloatString is values.zero / values.someFloatString
+PASS values.zero / +values.someFloatString is 0
+PASS +values.zero / +values.someFloatString is values.zero / values.someFloatString
+PASS +values.zero / +values.someFloatString is 0
+PASS +values.zero - values.someFloatString is values.zero - values.someFloatString
+PASS +values.zero - values.someFloatString is -42.42
+PASS values.zero - +values.someFloatString is values.zero - values.someFloatString
+PASS values.zero - +values.someFloatString is -42.42
+PASS +values.zero - +values.someFloatString is values.zero - values.someFloatString
+PASS +values.zero - +values.someFloatString is -42.42
+PASS +values.minusZero * values.someInt is values.minusZero * values.someInt
+PASS +values.minusZero * values.someInt is -0
+PASS values.minusZero * +values.someInt is values.minusZero * values.someInt
+PASS values.minusZero * +values.someInt is -0
+PASS +values.minusZero * +values.someInt is values.minusZero * values.someInt
+PASS +values.minusZero * +values.someInt is -0
+PASS +values.minusZero / values.someInt is values.minusZero / values.someInt
+PASS +values.minusZero / values.someInt is -0
+PASS values.minusZero / +values.someInt is values.minusZero / values.someInt
+PASS values.minusZero / +values.someInt is -0
+PASS +values.minusZero / +values.someInt is values.minusZero / values.someInt
+PASS +values.minusZero / +values.someInt is -0
+PASS +values.minusZero - values.someInt is values.minusZero - values.someInt
+PASS +values.minusZero - values.someInt is -42
+PASS values.minusZero - +values.someInt is values.minusZero - values.someInt
+PASS values.minusZero - +values.someInt is -42
+PASS +values.minusZero - +values.someInt is values.minusZero - values.someInt
+PASS +values.minusZero - +values.someInt is -42
+PASS +values.minusZero * values.someFloat is values.minusZero * values.someFloat
+PASS +values.minusZero * values.someFloat is -0
+PASS values.minusZero * +values.someFloat is values.minusZero * values.someFloat
+PASS values.minusZero * +values.someFloat is -0
+PASS +values.minusZero * +values.someFloat is values.minusZero * values.someFloat
+PASS +values.minusZero * +values.someFloat is -0
+PASS +values.minusZero / values.someFloat is values.minusZero / values.someFloat
+PASS +values.minusZero / values.someFloat is -0
+PASS values.minusZero / +values.someFloat is values.minusZero / values.someFloat
+PASS values.minusZero / +values.someFloat is -0
+PASS +values.minusZero / +values.someFloat is values.minusZero / values.someFloat
+PASS +values.minusZero / +values.someFloat is -0
+PASS +values.minusZero - values.someFloat is values.minusZero - values.someFloat
+PASS +values.minusZero - values.someFloat is -42.42
+PASS values.minusZero - +values.someFloat is values.minusZero - values.someFloat
+PASS values.minusZero - +values.someFloat is -42.42
+PASS +values.minusZero - +values.someFloat is values.minusZero - values.someFloat
+PASS +values.minusZero - +values.someFloat is -42.42
+PASS +values.minusZero * values.one is values.minusZero * values.one
+PASS +values.minusZero * values.one is -0
+PASS values.minusZero * +values.one is values.minusZero * values.one
+PASS values.minusZero * +values.one is -0
+PASS +values.minusZero * +values.one is values.minusZero * values.one
+PASS +values.minusZero * +values.one is -0
+PASS +values.minusZero / values.one is values.minusZero / values.one
+PASS +values.minusZero / values.one is -0
+PASS values.minusZero / +values.one is values.minusZero / values.one
+PASS values.minusZero / +values.one is -0
+PASS +values.minusZero / +values.one is values.minusZero / values.one
+PASS +values.minusZero / +values.one is -0
+PASS +values.minusZero - values.one is values.minusZero - values.one
+PASS +values.minusZero - values.one is -1
+PASS values.minusZero - +values.one is values.minusZero - values.one
+PASS values.minusZero - +values.one is -1
+PASS +values.minusZero - +values.one is values.minusZero - values.one
+PASS +values.minusZero - +values.one is -1
+PASS +values.minusZero * values.minusOne is values.minusZero * values.minusOne
+PASS +values.minusZero * values.minusOne is 0
+PASS values.minusZero * +values.minusOne is values.minusZero * values.minusOne
+PASS values.minusZero * +values.minusOne is 0
+PASS +values.minusZero * +values.minusOne is values.minusZero * values.minusOne
+PASS +values.minusZero * +values.minusOne is 0
+PASS +values.minusZero / values.minusOne is values.minusZero / values.minusOne
+PASS +values.minusZero / values.minusOne is 0
+PASS values.minusZero / +values.minusOne is values.minusZero / values.minusOne
+PASS values.minusZero / +values.minusOne is 0
+PASS +values.minusZero / +values.minusOne is values.minusZero / values.minusOne
+PASS +values.minusZero / +values.minusOne is 0
+PASS +values.minusZero - values.minusOne is values.minusZero - values.minusOne
+PASS +values.minusZero - values.minusOne is 1
+PASS values.minusZero - +values.minusOne is values.minusZero - values.minusOne
+PASS values.minusZero - +values.minusOne is 1
+PASS +values.minusZero - +values.minusOne is values.minusZero - values.minusOne
+PASS +values.minusZero - +values.minusOne is 1
+PASS +values.minusZero * values.zero is values.minusZero * values.zero
+PASS +values.minusZero * values.zero is -0
+PASS values.minusZero * +values.zero is values.minusZero * values.zero
+PASS values.minusZero * +values.zero is -0
+PASS +values.minusZero * +values.zero is values.minusZero * values.zero
+PASS +values.minusZero * +values.zero is -0
+PASS +values.minusZero / values.zero is values.minusZero / values.zero
+PASS +values.minusZero / values.zero is NaN
+PASS values.minusZero / +values.zero is values.minusZero / values.zero
+PASS values.minusZero / +values.zero is NaN
+PASS +values.minusZero / +values.zero is values.minusZero / values.zero
+PASS +values.minusZero / +values.zero is NaN
+PASS +values.minusZero - values.zero is values.minusZero - values.zero
+PASS +values.minusZero - values.zero is -0
+PASS values.minusZero - +values.zero is values.minusZero - values.zero
+PASS values.minusZero - +values.zero is -0
+PASS +values.minusZero - +values.zero is values.minusZero - values.zero
+PASS +values.minusZero - +values.zero is -0
+PASS +values.minusZero * values.minusZero is values.minusZero * values.minusZero
+PASS +values.minusZero * values.minusZero is 0
+PASS values.minusZero * +values.minusZero is values.minusZero * values.minusZero
+PASS values.minusZero * +values.minusZero is 0
+PASS +values.minusZero * +values.minusZero is values.minusZero * values.minusZero
+PASS +values.minusZero * +values.minusZero is 0
+PASS +values.minusZero / values.minusZero is values.minusZero / values.minusZero
+PASS +values.minusZero / values.minusZero is NaN
+PASS values.minusZero / +values.minusZero is values.minusZero / values.minusZero
+PASS values.minusZero / +values.minusZero is NaN
+PASS +values.minusZero / +values.minusZero is values.minusZero / values.minusZero
+PASS +values.minusZero / +values.minusZero is NaN
+PASS +values.minusZero - values.minusZero is values.minusZero - values.minusZero
+PASS +values.minusZero - values.minusZero is 0
+PASS values.minusZero - +values.minusZero is values.minusZero - values.minusZero
+PASS values.minusZero - +values.minusZero is 0
+PASS +values.minusZero - +values.minusZero is values.minusZero - values.minusZero
+PASS +values.minusZero - +values.minusZero is 0
+PASS +values.minusZero * values.infinity is values.minusZero * values.infinity
+PASS +values.minusZero * values.infinity is NaN
+PASS values.minusZero * +values.infinity is values.minusZero * values.infinity
+PASS values.minusZero * +values.infinity is NaN
+PASS +values.minusZero * +values.infinity is values.minusZero * values.infinity
+PASS +values.minusZero * +values.infinity is NaN
+PASS +values.minusZero / values.infinity is values.minusZero / values.infinity
+PASS +values.minusZero / values.infinity is -0
+PASS values.minusZero / +values.infinity is values.minusZero / values.infinity
+PASS values.minusZero / +values.infinity is -0
+PASS +values.minusZero / +values.infinity is values.minusZero / values.infinity
+PASS +values.minusZero / +values.infinity is -0
+PASS +values.minusZero - values.infinity is values.minusZero - values.infinity
+PASS +values.minusZero - values.infinity is -Infinity
+PASS values.minusZero - +values.infinity is values.minusZero - values.infinity
+PASS values.minusZero - +values.infinity is -Infinity
+PASS +values.minusZero - +values.infinity is values.minusZero - values.infinity
+PASS +values.minusZero - +values.infinity is -Infinity
+PASS +values.minusZero * values.minusInfinity is values.minusZero * values.minusInfinity
+PASS +values.minusZero * values.minusInfinity is NaN
+PASS values.minusZero * +values.minusInfinity is values.minusZero * values.minusInfinity
+PASS values.minusZero * +values.minusInfinity is NaN
+PASS +values.minusZero * +values.minusInfinity is values.minusZero * values.minusInfinity
+PASS +values.minusZero * +values.minusInfinity is NaN
+PASS +values.minusZero / values.minusInfinity is values.minusZero / values.minusInfinity
+PASS +values.minusZero / values.minusInfinity is 0
+PASS values.minusZero / +values.minusInfinity is values.minusZero / values.minusInfinity
+PASS values.minusZero / +values.minusInfinity is 0
+PASS +values.minusZero / +values.minusInfinity is values.minusZero / values.minusInfinity
+PASS +values.minusZero / +values.minusInfinity is 0
+PASS +values.minusZero - values.minusInfinity is values.minusZero - values.minusInfinity
+PASS +values.minusZero - values.minusInfinity is Infinity
+PASS values.minusZero - +values.minusInfinity is values.minusZero - values.minusInfinity
+PASS values.minusZero - +values.minusInfinity is Infinity
+PASS +values.minusZero - +values.minusInfinity is values.minusZero - values.minusInfinity
+PASS +values.minusZero - +values.minusInfinity is Infinity
+PASS +values.minusZero * values.notANumber is values.minusZero * values.notANumber
+PASS +values.minusZero * values.notANumber is NaN
+PASS values.minusZero * +values.notANumber is values.minusZero * values.notANumber
+PASS values.minusZero * +values.notANumber is NaN
+PASS +values.minusZero * +values.notANumber is values.minusZero * values.notANumber
+PASS +values.minusZero * +values.notANumber is NaN
+PASS +values.minusZero / values.notANumber is values.minusZero / values.notANumber
+PASS +values.minusZero / values.notANumber is NaN
+PASS values.minusZero / +values.notANumber is values.minusZero / values.notANumber
+PASS values.minusZero / +values.notANumber is NaN
+PASS +values.minusZero / +values.notANumber is values.minusZero / values.notANumber
+PASS +values.minusZero / +values.notANumber is NaN
+PASS +values.minusZero - values.notANumber is values.minusZero - values.notANumber
+PASS +values.minusZero - values.notANumber is NaN
+PASS values.minusZero - +values.notANumber is values.minusZero - values.notANumber
+PASS values.minusZero - +values.notANumber is NaN
+PASS +values.minusZero - +values.notANumber is values.minusZero - values.notANumber
+PASS +values.minusZero - +values.notANumber is NaN
+PASS +values.minusZero * values.nonNumberString is values.minusZero * values.nonNumberString
+PASS +values.minusZero * values.nonNumberString is NaN
+PASS values.minusZero * +values.nonNumberString is values.minusZero * values.nonNumberString
+PASS values.minusZero * +values.nonNumberString is NaN
+PASS +values.minusZero * +values.nonNumberString is values.minusZero * values.nonNumberString
+PASS +values.minusZero * +values.nonNumberString is NaN
+PASS +values.minusZero / values.nonNumberString is values.minusZero / values.nonNumberString
+PASS +values.minusZero / values.nonNumberString is NaN
+PASS values.minusZero / +values.nonNumberString is values.minusZero / values.nonNumberString
+PASS values.minusZero / +values.nonNumberString is NaN
+PASS +values.minusZero / +values.nonNumberString is values.minusZero / values.nonNumberString
+PASS +values.minusZero / +values.nonNumberString is NaN
+PASS +values.minusZero - values.nonNumberString is values.minusZero - values.nonNumberString
+PASS +values.minusZero - values.nonNumberString is NaN
+PASS values.minusZero - +values.nonNumberString is values.minusZero - values.nonNumberString
+PASS values.minusZero - +values.nonNumberString is NaN
+PASS +values.minusZero - +values.nonNumberString is values.minusZero - values.nonNumberString
+PASS +values.minusZero - +values.nonNumberString is NaN
+PASS +values.minusZero * values.someFloatString is values.minusZero * values.someFloatString
+PASS +values.minusZero * values.someFloatString is -0
+PASS values.minusZero * +values.someFloatString is values.minusZero * values.someFloatString
+PASS values.minusZero * +values.someFloatString is -0
+PASS +values.minusZero * +values.someFloatString is values.minusZero * values.someFloatString
+PASS +values.minusZero * +values.someFloatString is -0
+PASS +values.minusZero / values.someFloatString is values.minusZero / values.someFloatString
+PASS +values.minusZero / values.someFloatString is -0
+PASS values.minusZero / +values.someFloatString is values.minusZero / values.someFloatString
+PASS values.minusZero / +values.someFloatString is -0
+PASS +values.minusZero / +values.someFloatString is values.minusZero / values.someFloatString
+PASS +values.minusZero / +values.someFloatString is -0
+PASS +values.minusZero - values.someFloatString is values.minusZero - values.someFloatString
+PASS +values.minusZero - values.someFloatString is -42.42
+PASS values.minusZero - +values.someFloatString is values.minusZero - values.someFloatString
+PASS values.minusZero - +values.someFloatString is -42.42
+PASS +values.minusZero - +values.someFloatString is values.minusZero - values.someFloatString
+PASS +values.minusZero - +values.someFloatString is -42.42
+PASS +values.infinity * values.someInt is values.infinity * values.someInt
+PASS +values.infinity * values.someInt is Infinity
+PASS values.infinity * +values.someInt is values.infinity * values.someInt
+PASS values.infinity * +values.someInt is Infinity
+PASS +values.infinity * +values.someInt is values.infinity * values.someInt
+PASS +values.infinity * +values.someInt is Infinity
+PASS +values.infinity / values.someInt is values.infinity / values.someInt
+PASS +values.infinity / values.someInt is Infinity
+PASS values.infinity / +values.someInt is values.infinity / values.someInt
+PASS values.infinity / +values.someInt is Infinity
+PASS +values.infinity / +values.someInt is values.infinity / values.someInt
+PASS +values.infinity / +values.someInt is Infinity
+PASS +values.infinity - values.someInt is values.infinity - values.someInt
+PASS +values.infinity - values.someInt is Infinity
+PASS values.infinity - +values.someInt is values.infinity - values.someInt
+PASS values.infinity - +values.someInt is Infinity
+PASS +values.infinity - +values.someInt is values.infinity - values.someInt
+PASS +values.infinity - +values.someInt is Infinity
+PASS +values.infinity * values.someFloat is values.infinity * values.someFloat
+PASS +values.infinity * values.someFloat is Infinity
+PASS values.infinity * +values.someFloat is values.infinity * values.someFloat
+PASS values.infinity * +values.someFloat is Infinity
+PASS +values.infinity * +values.someFloat is values.infinity * values.someFloat
+PASS +values.infinity * +values.someFloat is Infinity
+PASS +values.infinity / values.someFloat is values.infinity / values.someFloat
+PASS +values.infinity / values.someFloat is Infinity
+PASS values.infinity / +values.someFloat is values.infinity / values.someFloat
+PASS values.infinity / +values.someFloat is Infinity
+PASS +values.infinity / +values.someFloat is values.infinity / values.someFloat
+PASS +values.infinity / +values.someFloat is Infinity
+PASS +values.infinity - values.someFloat is values.infinity - values.someFloat
+PASS +values.infinity - values.someFloat is Infinity
+PASS values.infinity - +values.someFloat is values.infinity - values.someFloat
+PASS values.infinity - +values.someFloat is Infinity
+PASS +values.infinity - +values.someFloat is values.infinity - values.someFloat
+PASS +values.infinity - +values.someFloat is Infinity
+PASS +values.infinity * values.one is values.infinity * values.one
+PASS +values.infinity * values.one is Infinity
+PASS values.infinity * +values.one is values.infinity * values.one
+PASS values.infinity * +values.one is Infinity
+PASS +values.infinity * +values.one is values.infinity * values.one
+PASS +values.infinity * +values.one is Infinity
+PASS +values.infinity / values.one is values.infinity / values.one
+PASS +values.infinity / values.one is Infinity
+PASS values.infinity / +values.one is values.infinity / values.one
+PASS values.infinity / +values.one is Infinity
+PASS +values.infinity / +values.one is values.infinity / values.one
+PASS +values.infinity / +values.one is Infinity
+PASS +values.infinity - values.one is values.infinity - values.one
+PASS +values.infinity - values.one is Infinity
+PASS values.infinity - +values.one is values.infinity - values.one
+PASS values.infinity - +values.one is Infinity
+PASS +values.infinity - +values.one is values.infinity - values.one
+PASS +values.infinity - +values.one is Infinity
+PASS +values.infinity * values.minusOne is values.infinity * values.minusOne
+PASS +values.infinity * values.minusOne is -Infinity
+PASS values.infinity * +values.minusOne is values.infinity * values.minusOne
+PASS values.infinity * +values.minusOne is -Infinity
+PASS +values.infinity * +values.minusOne is values.infinity * values.minusOne
+PASS +values.infinity * +values.minusOne is -Infinity
+PASS +values.infinity / values.minusOne is values.infinity / values.minusOne
+PASS +values.infinity / values.minusOne is -Infinity
+PASS values.infinity / +values.minusOne is values.infinity / values.minusOne
+PASS values.infinity / +values.minusOne is -Infinity
+PASS +values.infinity / +values.minusOne is values.infinity / values.minusOne
+PASS +values.infinity / +values.minusOne is -Infinity
+PASS +values.infinity - values.minusOne is values.infinity - values.minusOne
+PASS +values.infinity - values.minusOne is Infinity
+PASS values.infinity - +values.minusOne is values.infinity - values.minusOne
+PASS values.infinity - +values.minusOne is Infinity
+PASS +values.infinity - +values.minusOne is values.infinity - values.minusOne
+PASS +values.infinity - +values.minusOne is Infinity
+PASS +values.infinity * values.zero is values.infinity * values.zero
+PASS +values.infinity * values.zero is NaN
+PASS values.infinity * +values.zero is values.infinity * values.zero
+PASS values.infinity * +values.zero is NaN
+PASS +values.infinity * +values.zero is values.infinity * values.zero
+PASS +values.infinity * +values.zero is NaN
+PASS +values.infinity / values.zero is values.infinity / values.zero
+PASS +values.infinity / values.zero is Infinity
+PASS values.infinity / +values.zero is values.infinity / values.zero
+PASS values.infinity / +values.zero is Infinity
+PASS +values.infinity / +values.zero is values.infinity / values.zero
+PASS +values.infinity / +values.zero is Infinity
+PASS +values.infinity - values.zero is values.infinity - values.zero
+PASS +values.infinity - values.zero is Infinity
+PASS values.infinity - +values.zero is values.infinity - values.zero
+PASS values.infinity - +values.zero is Infinity
+PASS +values.infinity - +values.zero is values.infinity - values.zero
+PASS +values.infinity - +values.zero is Infinity
+PASS +values.infinity * values.minusZero is values.infinity * values.minusZero
+PASS +values.infinity * values.minusZero is NaN
+PASS values.infinity * +values.minusZero is values.infinity * values.minusZero
+PASS values.infinity * +values.minusZero is NaN
+PASS +values.infinity * +values.minusZero is values.infinity * values.minusZero
+PASS +values.infinity * +values.minusZero is NaN
+PASS +values.infinity / values.minusZero is values.infinity / values.minusZero
+PASS +values.infinity / values.minusZero is -Infinity
+PASS values.infinity / +values.minusZero is values.infinity / values.minusZero
+PASS values.infinity / +values.minusZero is -Infinity
+PASS +values.infinity / +values.minusZero is values.infinity / values.minusZero
+PASS +values.infinity / +values.minusZero is -Infinity
+PASS +values.infinity - values.minusZero is values.infinity - values.minusZero
+PASS +values.infinity - values.minusZero is Infinity
+PASS values.infinity - +values.minusZero is values.infinity - values.minusZero
+PASS values.infinity - +values.minusZero is Infinity
+PASS +values.infinity - +values.minusZero is values.infinity - values.minusZero
+PASS +values.infinity - +values.minusZero is Infinity
+PASS +values.infinity * values.infinity is values.infinity * values.infinity
+PASS +values.infinity * values.infinity is Infinity
+PASS values.infinity * +values.infinity is values.infinity * values.infinity
+PASS values.infinity * +values.infinity is Infinity
+PASS +values.infinity * +values.infinity is values.infinity * values.infinity
+PASS +values.infinity * +values.infinity is Infinity
+PASS +values.infinity / values.infinity is values.infinity / values.infinity
+PASS +values.infinity / values.infinity is NaN
+PASS values.infinity / +values.infinity is values.infinity / values.infinity
+PASS values.infinity / +values.infinity is NaN
+PASS +values.infinity / +values.infinity is values.infinity / values.infinity
+PASS +values.infinity / +values.infinity is NaN
+PASS +values.infinity - values.infinity is values.infinity - values.infinity
+PASS +values.infinity - values.infinity is NaN
+PASS values.infinity - +values.infinity is values.infinity - values.infinity
+PASS values.infinity - +values.infinity is NaN
+PASS +values.infinity - +values.infinity is values.infinity - values.infinity
+PASS +values.infinity - +values.infinity is NaN
+PASS +values.infinity * values.minusInfinity is values.infinity * values.minusInfinity
+PASS +values.infinity * values.minusInfinity is -Infinity
+PASS values.infinity * +values.minusInfinity is values.infinity * values.minusInfinity
+PASS values.infinity * +values.minusInfinity is -Infinity
+PASS +values.infinity * +values.minusInfinity is values.infinity * values.minusInfinity
+PASS +values.infinity * +values.minusInfinity is -Infinity
+PASS +values.infinity / values.minusInfinity is values.infinity / values.minusInfinity
+PASS +values.infinity / values.minusInfinity is NaN
+PASS values.infinity / +values.minusInfinity is values.infinity / values.minusInfinity
+PASS values.infinity / +values.minusInfinity is NaN
+PASS +values.infinity / +values.minusInfinity is values.infinity / values.minusInfinity
+PASS +values.infinity / +values.minusInfinity is NaN
+PASS +values.infinity - values.minusInfinity is values.infinity - values.minusInfinity
+PASS +values.infinity - values.minusInfinity is Infinity
+PASS values.infinity - +values.minusInfinity is values.infinity - values.minusInfinity
+PASS values.infinity - +values.minusInfinity is Infinity
+PASS +values.infinity - +values.minusInfinity is values.infinity - values.minusInfinity
+PASS +values.infinity - +values.minusInfinity is Infinity
+PASS +values.infinity * values.notANumber is values.infinity * values.notANumber
+PASS +values.infinity * values.notANumber is NaN
+PASS values.infinity * +values.notANumber is values.infinity * values.notANumber
+PASS values.infinity * +values.notANumber is NaN
+PASS +values.infinity * +values.notANumber is values.infinity * values.notANumber
+PASS +values.infinity * +values.notANumber is NaN
+PASS +values.infinity / values.notANumber is values.infinity / values.notANumber
+PASS +values.infinity / values.notANumber is NaN
+PASS values.infinity / +values.notANumber is values.infinity / values.notANumber
+PASS values.infinity / +values.notANumber is NaN
+PASS +values.infinity / +values.notANumber is values.infinity / values.notANumber
+PASS +values.infinity / +values.notANumber is NaN
+PASS +values.infinity - values.notANumber is values.infinity - values.notANumber
+PASS +values.infinity - values.notANumber is NaN
+PASS values.infinity - +values.notANumber is values.infinity - values.notANumber
+PASS values.infinity - +values.notANumber is NaN
+PASS +values.infinity - +values.notANumber is values.infinity - values.notANumber
+PASS +values.infinity - +values.notANumber is NaN
+PASS +values.infinity * values.nonNumberString is values.infinity * values.nonNumberString
+PASS +values.infinity * values.nonNumberString is NaN
+PASS values.infinity * +values.nonNumberString is values.infinity * values.nonNumberString
+PASS values.infinity * +values.nonNumberString is NaN
+PASS +values.infinity * +values.nonNumberString is values.infinity * values.nonNumberString
+PASS +values.infinity * +values.nonNumberString is NaN
+PASS +values.infinity / values.nonNumberString is values.infinity / values.nonNumberString
+PASS +values.infinity / values.nonNumberString is NaN
+PASS values.infinity / +values.nonNumberString is values.infinity / values.nonNumberString
+PASS values.infinity / +values.nonNumberString is NaN
+PASS +values.infinity / +values.nonNumberString is values.infinity / values.nonNumberString
+PASS +values.infinity / +values.nonNumberString is NaN
+PASS +values.infinity - values.nonNumberString is values.infinity - values.nonNumberString
+PASS +values.infinity - values.nonNumberString is NaN
+PASS values.infinity - +values.nonNumberString is values.infinity - values.nonNumberString
+PASS values.infinity - +values.nonNumberString is NaN
+PASS +values.infinity - +values.nonNumberString is values.infinity - values.nonNumberString
+PASS +values.infinity - +values.nonNumberString is NaN
+PASS +values.infinity * values.someFloatString is values.infinity * values.someFloatString
+PASS +values.infinity * values.someFloatString is Infinity
+PASS values.infinity * +values.someFloatString is values.infinity * values.someFloatString
+PASS values.infinity * +values.someFloatString is Infinity
+PASS +values.infinity * +values.someFloatString is values.infinity * values.someFloatString
+PASS +values.infinity * +values.someFloatString is Infinity
+PASS +values.infinity / values.someFloatString is values.infinity / values.someFloatString
+PASS +values.infinity / values.someFloatString is Infinity
+PASS values.infinity / +values.someFloatString is values.infinity / values.someFloatString
+PASS values.infinity / +values.someFloatString is Infinity
+PASS +values.infinity / +values.someFloatString is values.infinity / values.someFloatString
+PASS +values.infinity / +values.someFloatString is Infinity
+PASS +values.infinity - values.someFloatString is values.infinity - values.someFloatString
+PASS +values.infinity - values.someFloatString is Infinity
+PASS values.infinity - +values.someFloatString is values.infinity - values.someFloatString
+PASS values.infinity - +values.someFloatString is Infinity
+PASS +values.infinity - +values.someFloatString is values.infinity - values.someFloatString
+PASS +values.infinity - +values.someFloatString is Infinity
+PASS +values.minusInfinity * values.someInt is values.minusInfinity * values.someInt
+PASS +values.minusInfinity * values.someInt is -Infinity
+PASS values.minusInfinity * +values.someInt is values.minusInfinity * values.someInt
+PASS values.minusInfinity * +values.someInt is -Infinity
+PASS +values.minusInfinity * +values.someInt is values.minusInfinity * values.someInt
+PASS +values.minusInfinity * +values.someInt is -Infinity
+PASS +values.minusInfinity / values.someInt is values.minusInfinity / values.someInt
+PASS +values.minusInfinity / values.someInt is -Infinity
+PASS values.minusInfinity / +values.someInt is values.minusInfinity / values.someInt
+PASS values.minusInfinity / +values.someInt is -Infinity
+PASS +values.minusInfinity / +values.someInt is values.minusInfinity / values.someInt
+PASS +values.minusInfinity / +values.someInt is -Infinity
+PASS +values.minusInfinity - values.someInt is values.minusInfinity - values.someInt
+PASS +values.minusInfinity - values.someInt is -Infinity
+PASS values.minusInfinity - +values.someInt is values.minusInfinity - values.someInt
+PASS values.minusInfinity - +values.someInt is -Infinity
+PASS +values.minusInfinity - +values.someInt is values.minusInfinity - values.someInt
+PASS +values.minusInfinity - +values.someInt is -Infinity
+PASS +values.minusInfinity * values.someFloat is values.minusInfinity * values.someFloat
+PASS +values.minusInfinity * values.someFloat is -Infinity
+PASS values.minusInfinity * +values.someFloat is values.minusInfinity * values.someFloat
+PASS values.minusInfinity * +values.someFloat is -Infinity
+PASS +values.minusInfinity * +values.someFloat is values.minusInfinity * values.someFloat
+PASS +values.minusInfinity * +values.someFloat is -Infinity
+PASS +values.minusInfinity / values.someFloat is values.minusInfinity / values.someFloat
+PASS +values.minusInfinity / values.someFloat is -Infinity
+PASS values.minusInfinity / +values.someFloat is values.minusInfinity / values.someFloat
+PASS values.minusInfinity / +values.someFloat is -Infinity
+PASS +values.minusInfinity / +values.someFloat is values.minusInfinity / values.someFloat
+PASS +values.minusInfinity / +values.someFloat is -Infinity
+PASS +values.minusInfinity - values.someFloat is values.minusInfinity - values.someFloat
+PASS +values.minusInfinity - values.someFloat is -Infinity
+PASS values.minusInfinity - +values.someFloat is values.minusInfinity - values.someFloat
+PASS values.minusInfinity - +values.someFloat is -Infinity
+PASS +values.minusInfinity - +values.someFloat is values.minusInfinity - values.someFloat
+PASS +values.minusInfinity - +values.someFloat is -Infinity
+PASS +values.minusInfinity * values.one is values.minusInfinity * values.one
+PASS +values.minusInfinity * values.one is -Infinity
+PASS values.minusInfinity * +values.one is values.minusInfinity * values.one
+PASS values.minusInfinity * +values.one is -Infinity
+PASS +values.minusInfinity * +values.one is values.minusInfinity * values.one
+PASS +values.minusInfinity * +values.one is -Infinity
+PASS +values.minusInfinity / values.one is values.minusInfinity / values.one
+PASS +values.minusInfinity / values.one is -Infinity
+PASS values.minusInfinity / +values.one is values.minusInfinity / values.one
+PASS values.minusInfinity / +values.one is -Infinity
+PASS +values.minusInfinity / +values.one is values.minusInfinity / values.one
+PASS +values.minusInfinity / +values.one is -Infinity
+PASS +values.minusInfinity - values.one is values.minusInfinity - values.one
+PASS +values.minusInfinity - values.one is -Infinity
+PASS values.minusInfinity - +values.one is values.minusInfinity - values.one
+PASS values.minusInfinity - +values.one is -Infinity
+PASS +values.minusInfinity - +values.one is values.minusInfinity - values.one
+PASS +values.minusInfinity - +values.one is -Infinity
+PASS +values.minusInfinity * values.minusOne is values.minusInfinity * values.minusOne
+PASS +values.minusInfinity * values.minusOne is Infinity
+PASS values.minusInfinity * +values.minusOne is values.minusInfinity * values.minusOne
+PASS values.minusInfinity * +values.minusOne is Infinity
+PASS +values.minusInfinity * +values.minusOne is values.minusInfinity * values.minusOne
+PASS +values.minusInfinity * +values.minusOne is Infinity
+PASS +values.minusInfinity / values.minusOne is values.minusInfinity / values.minusOne
+PASS +values.minusInfinity / values.minusOne is Infinity
+PASS values.minusInfinity / +values.minusOne is values.minusInfinity / values.minusOne
+PASS values.minusInfinity / +values.minusOne is Infinity
+PASS +values.minusInfinity / +values.minusOne is values.minusInfinity / values.minusOne
+PASS +values.minusInfinity / +values.minusOne is Infinity
+PASS +values.minusInfinity - values.minusOne is values.minusInfinity - values.minusOne
+PASS +values.minusInfinity - values.minusOne is -Infinity
+PASS values.minusInfinity - +values.minusOne is values.minusInfinity - values.minusOne
+PASS values.minusInfinity - +values.minusOne is -Infinity
+PASS +values.minusInfinity - +values.minusOne is values.minusInfinity - values.minusOne
+PASS +values.minusInfinity - +values.minusOne is -Infinity
+PASS +values.minusInfinity * values.zero is values.minusInfinity * values.zero
+PASS +values.minusInfinity * values.zero is NaN
+PASS values.minusInfinity * +values.zero is values.minusInfinity * values.zero
+PASS values.minusInfinity * +values.zero is NaN
+PASS +values.minusInfinity * +values.zero is values.minusInfinity * values.zero
+PASS +values.minusInfinity * +values.zero is NaN
+PASS +values.minusInfinity / values.zero is values.minusInfinity / values.zero
+PASS +values.minusInfinity / values.zero is -Infinity
+PASS values.minusInfinity / +values.zero is values.minusInfinity / values.zero
+PASS values.minusInfinity / +values.zero is -Infinity
+PASS +values.minusInfinity / +values.zero is values.minusInfinity / values.zero
+PASS +values.minusInfinity / +values.zero is -Infinity
+PASS +values.minusInfinity - values.zero is values.minusInfinity - values.zero
+PASS +values.minusInfinity - values.zero is -Infinity
+PASS values.minusInfinity - +values.zero is values.minusInfinity - values.zero
+PASS values.minusInfinity - +values.zero is -Infinity
+PASS +values.minusInfinity - +values.zero is values.minusInfinity - values.zero
+PASS +values.minusInfinity - +values.zero is -Infinity
+PASS +values.minusInfinity * values.minusZero is values.minusInfinity * values.minusZero
+PASS +values.minusInfinity * values.minusZero is NaN
+PASS values.minusInfinity * +values.minusZero is values.minusInfinity * values.minusZero
+PASS values.minusInfinity * +values.minusZero is NaN
+PASS +values.minusInfinity * +values.minusZero is values.minusInfinity * values.minusZero
+PASS +values.minusInfinity * +values.minusZero is NaN
+PASS +values.minusInfinity / values.minusZero is values.minusInfinity / values.minusZero
+PASS +values.minusInfinity / values.minusZero is Infinity
+PASS values.minusInfinity / +values.minusZero is values.minusInfinity / values.minusZero
+PASS values.minusInfinity / +values.minusZero is Infinity
+PASS +values.minusInfinity / +values.minusZero is values.minusInfinity / values.minusZero
+PASS +values.minusInfinity / +values.minusZero is Infinity
+PASS +values.minusInfinity - values.minusZero is values.minusInfinity - values.minusZero
+PASS +values.minusInfinity - values.minusZero is -Infinity
+PASS values.minusInfinity - +values.minusZero is values.minusInfinity - values.minusZero
+PASS values.minusInfinity - +values.minusZero is -Infinity
+PASS +values.minusInfinity - +values.minusZero is values.minusInfinity - values.minusZero
+PASS +values.minusInfinity - +values.minusZero is -Infinity
+PASS +values.minusInfinity * values.infinity is values.minusInfinity * values.infinity
+PASS +values.minusInfinity * values.infinity is -Infinity
+PASS values.minusInfinity * +values.infinity is values.minusInfinity * values.infinity
+PASS values.minusInfinity * +values.infinity is -Infinity
+PASS +values.minusInfinity * +values.infinity is values.minusInfinity * values.infinity
+PASS +values.minusInfinity * +values.infinity is -Infinity
+PASS +values.minusInfinity / values.infinity is values.minusInfinity / values.infinity
+PASS +values.minusInfinity / values.infinity is NaN
+PASS values.minusInfinity / +values.infinity is values.minusInfinity / values.infinity
+PASS values.minusInfinity / +values.infinity is NaN
+PASS +values.minusInfinity / +values.infinity is values.minusInfinity / values.infinity
+PASS +values.minusInfinity / +values.infinity is NaN
+PASS +values.minusInfinity - values.infinity is values.minusInfinity - values.infinity
+PASS +values.minusInfinity - values.infinity is -Infinity
+PASS values.minusInfinity - +values.infinity is values.minusInfinity - values.infinity
+PASS values.minusInfinity - +values.infinity is -Infinity
+PASS +values.minusInfinity - +values.infinity is values.minusInfinity - values.infinity
+PASS +values.minusInfinity - +values.infinity is -Infinity
+PASS +values.minusInfinity * values.minusInfinity is values.minusInfinity * values.minusInfinity
+PASS +values.minusInfinity * values.minusInfinity is Infinity
+PASS values.minusInfinity * +values.minusInfinity is values.minusInfinity * values.minusInfinity
+PASS values.minusInfinity * +values.minusInfinity is Infinity
+PASS +values.minusInfinity * +values.minusInfinity is values.minusInfinity * values.minusInfinity
+PASS +values.minusInfinity * +values.minusInfinity is Infinity
+PASS +values.minusInfinity / values.minusInfinity is values.minusInfinity / values.minusInfinity
+PASS +values.minusInfinity / values.minusInfinity is NaN
+PASS values.minusInfinity / +values.minusInfinity is values.minusInfinity / values.minusInfinity
+PASS values.minusInfinity / +values.minusInfinity is NaN
+PASS +values.minusInfinity / +values.minusInfinity is values.minusInfinity / values.minusInfinity
+PASS +values.minusInfinity / +values.minusInfinity is NaN
+PASS +values.minusInfinity - values.minusInfinity is values.minusInfinity - values.minusInfinity
+PASS +values.minusInfinity - values.minusInfinity is NaN
+PASS values.minusInfinity - +values.minusInfinity is values.minusInfinity - values.minusInfinity
+PASS values.minusInfinity - +values.minusInfinity is NaN
+PASS +values.minusInfinity - +values.minusInfinity is values.minusInfinity - values.minusInfinity
+PASS +values.minusInfinity - +values.minusInfinity is NaN
+PASS +values.minusInfinity * values.notANumber is values.minusInfinity * values.notANumber
+PASS +values.minusInfinity * values.notANumber is NaN
+PASS values.minusInfinity * +values.notANumber is values.minusInfinity * values.notANumber
+PASS values.minusInfinity * +values.notANumber is NaN
+PASS +values.minusInfinity * +values.notANumber is values.minusInfinity * values.notANumber
+PASS +values.minusInfinity * +values.notANumber is NaN
+PASS +values.minusInfinity / values.notANumber is values.minusInfinity / values.notANumber
+PASS +values.minusInfinity / values.notANumber is NaN
+PASS values.minusInfinity / +values.notANumber is values.minusInfinity / values.notANumber
+PASS values.minusInfinity / +values.notANumber is NaN
+PASS +values.minusInfinity / +values.notANumber is values.minusInfinity / values.notANumber
+PASS +values.minusInfinity / +values.notANumber is NaN
+PASS +values.minusInfinity - values.notANumber is values.minusInfinity - values.notANumber
+PASS +values.minusInfinity - values.notANumber is NaN
+PASS values.minusInfinity - +values.notANumber is values.minusInfinity - values.notANumber
+PASS values.minusInfinity - +values.notANumber is NaN
+PASS +values.minusInfinity - +values.notANumber is values.minusInfinity - values.notANumber
+PASS +values.minusInfinity - +values.notANumber is NaN
+PASS +values.minusInfinity * values.nonNumberString is values.minusInfinity * values.nonNumberString
+PASS +values.minusInfinity * values.nonNumberString is NaN
+PASS values.minusInfinity * +values.nonNumberString is values.minusInfinity * values.nonNumberString
+PASS values.minusInfinity * +values.nonNumberString is NaN
+PASS +values.minusInfinity * +values.nonNumberString is values.minusInfinity * values.nonNumberString
+PASS +values.minusInfinity * +values.nonNumberString is NaN
+PASS +values.minusInfinity / values.nonNumberString is values.minusInfinity / values.nonNumberString
+PASS +values.minusInfinity / values.nonNumberString is NaN
+PASS values.minusInfinity / +values.nonNumberString is values.minusInfinity / values.nonNumberString
+PASS values.minusInfinity / +values.nonNumberString is NaN
+PASS +values.minusInfinity / +values.nonNumberString is values.minusInfinity / values.nonNumberString
+PASS +values.minusInfinity / +values.nonNumberString is NaN
+PASS +values.minusInfinity - values.nonNumberString is values.minusInfinity - values.nonNumberString
+PASS +values.minusInfinity - values.nonNumberString is NaN
+PASS values.minusInfinity - +values.nonNumberString is values.minusInfinity - values.nonNumberString
+PASS values.minusInfinity - +values.nonNumberString is NaN
+PASS +values.minusInfinity - +values.nonNumberString is values.minusInfinity - values.nonNumberString
+PASS +values.minusInfinity - +values.nonNumberString is NaN
+PASS +values.minusInfinity * values.someFloatString is values.minusInfinity * values.someFloatString
+PASS +values.minusInfinity * values.someFloatString is -Infinity
+PASS values.minusInfinity * +values.someFloatString is values.minusInfinity * values.someFloatString
+PASS values.minusInfinity * +values.someFloatString is -Infinity
+PASS +values.minusInfinity * +values.someFloatString is values.minusInfinity * values.someFloatString
+PASS +values.minusInfinity * +values.someFloatString is -Infinity
+PASS +values.minusInfinity / values.someFloatString is values.minusInfinity / values.someFloatString
+PASS +values.minusInfinity / values.someFloatString is -Infinity
+PASS values.minusInfinity / +values.someFloatString is values.minusInfinity / values.someFloatString
+PASS values.minusInfinity / +values.someFloatString is -Infinity
+PASS +values.minusInfinity / +values.someFloatString is values.minusInfinity / values.someFloatString
+PASS +values.minusInfinity / +values.someFloatString is -Infinity
+PASS +values.minusInfinity - values.someFloatString is values.minusInfinity - values.someFloatString
+PASS +values.minusInfinity - values.someFloatString is -Infinity
+PASS values.minusInfinity - +values.someFloatString is values.minusInfinity - values.someFloatString
+PASS values.minusInfinity - +values.someFloatString is -Infinity
+PASS +values.minusInfinity - +values.someFloatString is values.minusInfinity - values.someFloatString
+PASS +values.minusInfinity - +values.someFloatString is -Infinity
+PASS +values.notANumber * values.someInt is values.notANumber * values.someInt
+PASS +values.notANumber * values.someInt is NaN
+PASS values.notANumber * +values.someInt is values.notANumber * values.someInt
+PASS values.notANumber * +values.someInt is NaN
+PASS +values.notANumber * +values.someInt is values.notANumber * values.someInt
+PASS +values.notANumber * +values.someInt is NaN
+PASS +values.notANumber / values.someInt is values.notANumber / values.someInt
+PASS +values.notANumber / values.someInt is NaN
+PASS values.notANumber / +values.someInt is values.notANumber / values.someInt
+PASS values.notANumber / +values.someInt is NaN
+PASS +values.notANumber / +values.someInt is values.notANumber / values.someInt
+PASS +values.notANumber / +values.someInt is NaN
+PASS +values.notANumber - values.someInt is values.notANumber - values.someInt
+PASS +values.notANumber - values.someInt is NaN
+PASS values.notANumber - +values.someInt is values.notANumber - values.someInt
+PASS values.notANumber - +values.someInt is NaN
+PASS +values.notANumber - +values.someInt is values.notANumber - values.someInt
+PASS +values.notANumber - +values.someInt is NaN
+PASS +values.notANumber * values.someFloat is values.notANumber * values.someFloat
+PASS +values.notANumber * values.someFloat is NaN
+PASS values.notANumber * +values.someFloat is values.notANumber * values.someFloat
+PASS values.notANumber * +values.someFloat is NaN
+PASS +values.notANumber * +values.someFloat is values.notANumber * values.someFloat
+PASS +values.notANumber * +values.someFloat is NaN
+PASS +values.notANumber / values.someFloat is values.notANumber / values.someFloat
+PASS +values.notANumber / values.someFloat is NaN
+PASS values.notANumber / +values.someFloat is values.notANumber / values.someFloat
+PASS values.notANumber / +values.someFloat is NaN
+PASS +values.notANumber / +values.someFloat is values.notANumber / values.someFloat
+PASS +values.notANumber / +values.someFloat is NaN
+PASS +values.notANumber - values.someFloat is values.notANumber - values.someFloat
+PASS +values.notANumber - values.someFloat is NaN
+PASS values.notANumber - +values.someFloat is values.notANumber - values.someFloat
+PASS values.notANumber - +values.someFloat is NaN
+PASS +values.notANumber - +values.someFloat is values.notANumber - values.someFloat
+PASS +values.notANumber - +values.someFloat is NaN
+PASS +values.notANumber * values.one is values.notANumber * values.one
+PASS +values.notANumber * values.one is NaN
+PASS values.notANumber * +values.one is values.notANumber * values.one
+PASS values.notANumber * +values.one is NaN
+PASS +values.notANumber * +values.one is values.notANumber * values.one
+PASS +values.notANumber * +values.one is NaN
+PASS +values.notANumber / values.one is values.notANumber / values.one
+PASS +values.notANumber / values.one is NaN
+PASS values.notANumber / +values.one is values.notANumber / values.one
+PASS values.notANumber / +values.one is NaN
+PASS +values.notANumber / +values.one is values.notANumber / values.one
+PASS +values.notANumber / +values.one is NaN
+PASS +values.notANumber - values.one is values.notANumber - values.one
+PASS +values.notANumber - values.one is NaN
+PASS values.notANumber - +values.one is values.notANumber - values.one
+PASS values.notANumber - +values.one is NaN
+PASS +values.notANumber - +values.one is values.notANumber - values.one
+PASS +values.notANumber - +values.one is NaN
+PASS +values.notANumber * values.minusOne is values.notANumber * values.minusOne
+PASS +values.notANumber * values.minusOne is NaN
+PASS values.notANumber * +values.minusOne is values.notANumber * values.minusOne
+PASS values.notANumber * +values.minusOne is NaN
+PASS +values.notANumber * +values.minusOne is values.notANumber * values.minusOne
+PASS +values.notANumber * +values.minusOne is NaN
+PASS +values.notANumber / values.minusOne is values.notANumber / values.minusOne
+PASS +values.notANumber / values.minusOne is NaN
+PASS values.notANumber / +values.minusOne is values.notANumber / values.minusOne
+PASS values.notANumber / +values.minusOne is NaN
+PASS +values.notANumber / +values.minusOne is values.notANumber / values.minusOne
+PASS +values.notANumber / +values.minusOne is NaN
+PASS +values.notANumber - values.minusOne is values.notANumber - values.minusOne
+PASS +values.notANumber - values.minusOne is NaN
+PASS values.notANumber - +values.minusOne is values.notANumber - values.minusOne
+PASS values.notANumber - +values.minusOne is NaN
+PASS +values.notANumber - +values.minusOne is values.notANumber - values.minusOne
+PASS +values.notANumber - +values.minusOne is NaN
+PASS +values.notANumber * values.zero is values.notANumber * values.zero
+PASS +values.notANumber * values.zero is NaN
+PASS values.notANumber * +values.zero is values.notANumber * values.zero
+PASS values.notANumber * +values.zero is NaN
+PASS +values.notANumber * +values.zero is values.notANumber * values.zero
+PASS +values.notANumber * +values.zero is NaN
+PASS +values.notANumber / values.zero is values.notANumber / values.zero
+PASS +values.notANumber / values.zero is NaN
+PASS values.notANumber / +values.zero is values.notANumber / values.zero
+PASS values.notANumber / +values.zero is NaN
+PASS +values.notANumber / +values.zero is values.notANumber / values.zero
+PASS +values.notANumber / +values.zero is NaN
+PASS +values.notANumber - values.zero is values.notANumber - values.zero
+PASS +values.notANumber - values.zero is NaN
+PASS values.notANumber - +values.zero is values.notANumber - values.zero
+PASS values.notANumber - +values.zero is NaN
+PASS +values.notANumber - +values.zero is values.notANumber - values.zero
+PASS +values.notANumber - +values.zero is NaN
+PASS +values.notANumber * values.minusZero is values.notANumber * values.minusZero
+PASS +values.notANumber * values.minusZero is NaN
+PASS values.notANumber * +values.minusZero is values.notANumber * values.minusZero
+PASS values.notANumber * +values.minusZero is NaN
+PASS +values.notANumber * +values.minusZero is values.notANumber * values.minusZero
+PASS +values.notANumber * +values.minusZero is NaN
+PASS +values.notANumber / values.minusZero is values.notANumber / values.minusZero
+PASS +values.notANumber / values.minusZero is NaN
+PASS values.notANumber / +values.minusZero is values.notANumber / values.minusZero
+PASS values.notANumber / +values.minusZero is NaN
+PASS +values.notANumber / +values.minusZero is values.notANumber / values.minusZero
+PASS +values.notANumber / +values.minusZero is NaN
+PASS +values.notANumber - values.minusZero is values.notANumber - values.minusZero
+PASS +values.notANumber - values.minusZero is NaN
+PASS values.notANumber - +values.minusZero is values.notANumber - values.minusZero
+PASS values.notANumber - +values.minusZero is NaN
+PASS +values.notANumber - +values.minusZero is values.notANumber - values.minusZero
+PASS +values.notANumber - +values.minusZero is NaN
+PASS +values.notANumber * values.infinity is values.notANumber * values.infinity
+PASS +values.notANumber * values.infinity is NaN
+PASS values.notANumber * +values.infinity is values.notANumber * values.infinity
+PASS values.notANumber * +values.infinity is NaN
+PASS +values.notANumber * +values.infinity is values.notANumber * values.infinity
+PASS +values.notANumber * +values.infinity is NaN
+PASS +values.notANumber / values.infinity is values.notANumber / values.infinity
+PASS +values.notANumber / values.infinity is NaN
+PASS values.notANumber / +values.infinity is values.notANumber / values.infinity
+PASS values.notANumber / +values.infinity is NaN
+PASS +values.notANumber / +values.infinity is values.notANumber / values.infinity
+PASS +values.notANumber / +values.infinity is NaN
+PASS +values.notANumber - values.infinity is values.notANumber - values.infinity
+PASS +values.notANumber - values.infinity is NaN
+PASS values.notANumber - +values.infinity is values.notANumber - values.infinity
+PASS values.notANumber - +values.infinity is NaN
+PASS +values.notANumber - +values.infinity is values.notANumber - values.infinity
+PASS +values.notANumber - +values.infinity is NaN
+PASS +values.notANumber * values.minusInfinity is values.notANumber * values.minusInfinity
+PASS +values.notANumber * values.minusInfinity is NaN
+PASS values.notANumber * +values.minusInfinity is values.notANumber * values.minusInfinity
+PASS values.notANumber * +values.minusInfinity is NaN
+PASS +values.notANumber * +values.minusInfinity is values.notANumber * values.minusInfinity
+PASS +values.notANumber * +values.minusInfinity is NaN
+PASS +values.notANumber / values.minusInfinity is values.notANumber / values.minusInfinity
+PASS +values.notANumber / values.minusInfinity is NaN
+PASS values.notANumber / +values.minusInfinity is values.notANumber / values.minusInfinity
+PASS values.notANumber / +values.minusInfinity is NaN
+PASS +values.notANumber / +values.minusInfinity is values.notANumber / values.minusInfinity
+PASS +values.notANumber / +values.minusInfinity is NaN
+PASS +values.notANumber - values.minusInfinity is values.notANumber - values.minusInfinity
+PASS +values.notANumber - values.minusInfinity is NaN
+PASS values.notANumber - +values.minusInfinity is values.notANumber - values.minusInfinity
+PASS values.notANumber - +values.minusInfinity is NaN
+PASS +values.notANumber - +values.minusInfinity is values.notANumber - values.minusInfinity
+PASS +values.notANumber - +values.minusInfinity is NaN
+PASS +values.notANumber * values.notANumber is values.notANumber * values.notANumber
+PASS +values.notANumber * values.notANumber is NaN
+PASS values.notANumber * +values.notANumber is values.notANumber * values.notANumber
+PASS values.notANumber * +values.notANumber is NaN
+PASS +values.notANumber * +values.notANumber is values.notANumber * values.notANumber
+PASS +values.notANumber * +values.notANumber is NaN
+PASS +values.notANumber / values.notANumber is values.notANumber / values.notANumber
+PASS +values.notANumber / values.notANumber is NaN
+PASS values.notANumber / +values.notANumber is values.notANumber / values.notANumber
+PASS values.notANumber / +values.notANumber is NaN
+PASS +values.notANumber / +values.notANumber is values.notANumber / values.notANumber
+PASS +values.notANumber / +values.notANumber is NaN
+PASS +values.notANumber - values.notANumber is values.notANumber - values.notANumber
+PASS +values.notANumber - values.notANumber is NaN
+PASS values.notANumber - +values.notANumber is values.notANumber - values.notANumber
+PASS values.notANumber - +values.notANumber is NaN
+PASS +values.notANumber - +values.notANumber is values.notANumber - values.notANumber
+PASS +values.notANumber - +values.notANumber is NaN
+PASS +values.notANumber * values.nonNumberString is values.notANumber * values.nonNumberString
+PASS +values.notANumber * values.nonNumberString is NaN
+PASS values.notANumber * +values.nonNumberString is values.notANumber * values.nonNumberString
+PASS values.notANumber * +values.nonNumberString is NaN
+PASS +values.notANumber * +values.nonNumberString is values.notANumber * values.nonNumberString
+PASS +values.notANumber * +values.nonNumberString is NaN
+PASS +values.notANumber / values.nonNumberString is values.notANumber / values.nonNumberString
+PASS +values.notANumber / values.nonNumberString is NaN
+PASS values.notANumber / +values.nonNumberString is values.notANumber / values.nonNumberString
+PASS values.notANumber / +values.nonNumberString is NaN
+PASS +values.notANumber / +values.nonNumberString is values.notANumber / values.nonNumberString
+PASS +values.notANumber / +values.nonNumberString is NaN
+PASS +values.notANumber - values.nonNumberString is values.notANumber - values.nonNumberString
+PASS +values.notANumber - values.nonNumberString is NaN
+PASS values.notANumber - +values.nonNumberString is values.notANumber - values.nonNumberString
+PASS values.notANumber - +values.nonNumberString is NaN
+PASS +values.notANumber - +values.nonNumberString is values.notANumber - values.nonNumberString
+PASS +values.notANumber - +values.nonNumberString is NaN
+PASS +values.notANumber * values.someFloatString is values.notANumber * values.someFloatString
+PASS +values.notANumber * values.someFloatString is NaN
+PASS values.notANumber * +values.someFloatString is values.notANumber * values.someFloatString
+PASS values.notANumber * +values.someFloatString is NaN
+PASS +values.notANumber * +values.someFloatString is values.notANumber * values.someFloatString
+PASS +values.notANumber * +values.someFloatString is NaN
+PASS +values.notANumber / values.someFloatString is values.notANumber / values.someFloatString
+PASS +values.notANumber / values.someFloatString is NaN
+PASS values.notANumber / +values.someFloatString is values.notANumber / values.someFloatString
+PASS values.notANumber / +values.someFloatString is NaN
+PASS +values.notANumber / +values.someFloatString is values.notANumber / values.someFloatString
+PASS +values.notANumber / +values.someFloatString is NaN
+PASS +values.notANumber - values.someFloatString is values.notANumber - values.someFloatString
+PASS +values.notANumber - values.someFloatString is NaN
+PASS values.notANumber - +values.someFloatString is values.notANumber - values.someFloatString
+PASS values.notANumber - +values.someFloatString is NaN
+PASS +values.notANumber - +values.someFloatString is values.notANumber - values.someFloatString
+PASS +values.notANumber - +values.someFloatString is NaN
+PASS +values.nonNumberString * values.someInt is values.nonNumberString * values.someInt
+PASS +values.nonNumberString * values.someInt is NaN
+PASS values.nonNumberString * +values.someInt is values.nonNumberString * values.someInt
+PASS values.nonNumberString * +values.someInt is NaN
+PASS +values.nonNumberString * +values.someInt is values.nonNumberString * values.someInt
+PASS +values.nonNumberString * +values.someInt is NaN
+PASS +values.nonNumberString / values.someInt is values.nonNumberString / values.someInt
+PASS +values.nonNumberString / values.someInt is NaN
+PASS values.nonNumberString / +values.someInt is values.nonNumberString / values.someInt
+PASS values.nonNumberString / +values.someInt is NaN
+PASS +values.nonNumberString / +values.someInt is values.nonNumberString / values.someInt
+PASS +values.nonNumberString / +values.someInt is NaN
+PASS +values.nonNumberString - values.someInt is values.nonNumberString - values.someInt
+PASS +values.nonNumberString - values.someInt is NaN
+PASS values.nonNumberString - +values.someInt is values.nonNumberString - values.someInt
+PASS values.nonNumberString - +values.someInt is NaN
+PASS +values.nonNumberString - +values.someInt is values.nonNumberString - values.someInt
+PASS +values.nonNumberString - +values.someInt is NaN
+PASS +values.nonNumberString * values.someFloat is values.nonNumberString * values.someFloat
+PASS +values.nonNumberString * values.someFloat is NaN
+PASS values.nonNumberString * +values.someFloat is values.nonNumberString * values.someFloat
+PASS values.nonNumberString * +values.someFloat is NaN
+PASS +values.nonNumberString * +values.someFloat is values.nonNumberString * values.someFloat
+PASS +values.nonNumberString * +values.someFloat is NaN
+PASS +values.nonNumberString / values.someFloat is values.nonNumberString / values.someFloat
+PASS +values.nonNumberString / values.someFloat is NaN
+PASS values.nonNumberString / +values.someFloat is values.nonNumberString / values.someFloat
+PASS values.nonNumberString / +values.someFloat is NaN
+PASS +values.nonNumberString / +values.someFloat is values.nonNumberString / values.someFloat
+PASS +values.nonNumberString / +values.someFloat is NaN
+PASS +values.nonNumberString - values.someFloat is values.nonNumberString - values.someFloat
+PASS +values.nonNumberString - values.someFloat is NaN
+PASS values.nonNumberString - +values.someFloat is values.nonNumberString - values.someFloat
+PASS values.nonNumberString - +values.someFloat is NaN
+PASS +values.nonNumberString - +values.someFloat is values.nonNumberString - values.someFloat
+PASS +values.nonNumberString - +values.someFloat is NaN
+PASS +values.nonNumberString * values.one is values.nonNumberString * values.one
+PASS +values.nonNumberString * values.one is NaN
+PASS values.nonNumberString * +values.one is values.nonNumberString * values.one
+PASS values.nonNumberString * +values.one is NaN
+PASS +values.nonNumberString * +values.one is values.nonNumberString * values.one
+PASS +values.nonNumberString * +values.one is NaN
+PASS +values.nonNumberString / values.one is values.nonNumberString / values.one
+PASS +values.nonNumberString / values.one is NaN
+PASS values.nonNumberString / +values.one is values.nonNumberString / values.one
+PASS values.nonNumberString / +values.one is NaN
+PASS +values.nonNumberString / +values.one is values.nonNumberString / values.one
+PASS +values.nonNumberString / +values.one is NaN
+PASS +values.nonNumberString - values.one is values.nonNumberString - values.one
+PASS +values.nonNumberString - values.one is NaN
+PASS values.nonNumberString - +values.one is values.nonNumberString - values.one
+PASS values.nonNumberString - +values.one is NaN
+PASS +values.nonNumberString - +values.one is values.nonNumberString - values.one
+PASS +values.nonNumberString - +values.one is NaN
+PASS +values.nonNumberString * values.minusOne is values.nonNumberString * values.minusOne
+PASS +values.nonNumberString * values.minusOne is NaN
+PASS values.nonNumberString * +values.minusOne is values.nonNumberString * values.minusOne
+PASS values.nonNumberString * +values.minusOne is NaN
+PASS +values.nonNumberString * +values.minusOne is values.nonNumberString * values.minusOne
+PASS +values.nonNumberString * +values.minusOne is NaN
+PASS +values.nonNumberString / values.minusOne is values.nonNumberString / values.minusOne
+PASS +values.nonNumberString / values.minusOne is NaN
+PASS values.nonNumberString / +values.minusOne is values.nonNumberString / values.minusOne
+PASS values.nonNumberString / +values.minusOne is NaN
+PASS +values.nonNumberString / +values.minusOne is values.nonNumberString / values.minusOne
+PASS +values.nonNumberString / +values.minusOne is NaN
+PASS +values.nonNumberString - values.minusOne is values.nonNumberString - values.minusOne
+PASS +values.nonNumberString - values.minusOne is NaN
+PASS values.nonNumberString - +values.minusOne is values.nonNumberString - values.minusOne
+PASS values.nonNumberString - +values.minusOne is NaN
+PASS +values.nonNumberString - +values.minusOne is values.nonNumberString - values.minusOne
+PASS +values.nonNumberString - +values.minusOne is NaN
+PASS +values.nonNumberString * values.zero is values.nonNumberString * values.zero
+PASS +values.nonNumberString * values.zero is NaN
+PASS values.nonNumberString * +values.zero is values.nonNumberString * values.zero
+PASS values.nonNumberString * +values.zero is NaN
+PASS +values.nonNumberString * +values.zero is values.nonNumberString * values.zero
+PASS +values.nonNumberString * +values.zero is NaN
+PASS +values.nonNumberString / values.zero is values.nonNumberString / values.zero
+PASS +values.nonNumberString / values.zero is NaN
+PASS values.nonNumberString / +values.zero is values.nonNumberString / values.zero
+PASS values.nonNumberString / +values.zero is NaN
+PASS +values.nonNumberString / +values.zero is values.nonNumberString / values.zero
+PASS +values.nonNumberString / +values.zero is NaN
+PASS +values.nonNumberString - values.zero is values.nonNumberString - values.zero
+PASS +values.nonNumberString - values.zero is NaN
+PASS values.nonNumberString - +values.zero is values.nonNumberString - values.zero
+PASS values.nonNumberString - +values.zero is NaN
+PASS +values.nonNumberString - +values.zero is values.nonNumberString - values.zero
+PASS +values.nonNumberString - +values.zero is NaN
+PASS +values.nonNumberString * values.minusZero is values.nonNumberString * values.minusZero
+PASS +values.nonNumberString * values.minusZero is NaN
+PASS values.nonNumberString * +values.minusZero is values.nonNumberString * values.minusZero
+PASS values.nonNumberString * +values.minusZero is NaN
+PASS +values.nonNumberString * +values.minusZero is values.nonNumberString * values.minusZero
+PASS +values.nonNumberString * +values.minusZero is NaN
+PASS +values.nonNumberString / values.minusZero is values.nonNumberString / values.minusZero
+PASS +values.nonNumberString / values.minusZero is NaN
+PASS values.nonNumberString / +values.minusZero is values.nonNumberString / values.minusZero
+PASS values.nonNumberString / +values.minusZero is NaN
+PASS +values.nonNumberString / +values.minusZero is values.nonNumberString / values.minusZero
+PASS +values.nonNumberString / +values.minusZero is NaN
+PASS +values.nonNumberString - values.minusZero is values.nonNumberString - values.minusZero
+PASS +values.nonNumberString - values.minusZero is NaN
+PASS values.nonNumberString - +values.minusZero is values.nonNumberString - values.minusZero
+PASS values.nonNumberString - +values.minusZero is NaN
+PASS +values.nonNumberString - +values.minusZero is values.nonNumberString - values.minusZero
+PASS +values.nonNumberString - +values.minusZero is NaN
+PASS +values.nonNumberString * values.infinity is values.nonNumberString * values.infinity
+PASS +values.nonNumberString * values.infinity is NaN
+PASS values.nonNumberString * +values.infinity is values.nonNumberString * values.infinity
+PASS values.nonNumberString * +values.infinity is NaN
+PASS +values.nonNumberString * +values.infinity is values.nonNumberString * values.infinity
+PASS +values.nonNumberString * +values.infinity is NaN
+PASS +values.nonNumberString / values.infinity is values.nonNumberString / values.infinity
+PASS +values.nonNumberString / values.infinity is NaN
+PASS values.nonNumberString / +values.infinity is values.nonNumberString / values.infinity
+PASS values.nonNumberString / +values.infinity is NaN
+PASS +values.nonNumberString / +values.infinity is values.nonNumberString / values.infinity
+PASS +values.nonNumberString / +values.infinity is NaN
+PASS +values.nonNumberString - values.infinity is values.nonNumberString - values.infinity
+PASS +values.nonNumberString - values.infinity is NaN
+PASS values.nonNumberString - +values.infinity is values.nonNumberString - values.infinity
+PASS values.nonNumberString - +values.infinity is NaN
+PASS +values.nonNumberString - +values.infinity is values.nonNumberString - values.infinity
+PASS +values.nonNumberString - +values.infinity is NaN
+PASS +values.nonNumberString * values.minusInfinity is values.nonNumberString * values.minusInfinity
+PASS +values.nonNumberString * values.minusInfinity is NaN
+PASS values.nonNumberString * +values.minusInfinity is values.nonNumberString * values.minusInfinity
+PASS values.nonNumberString * +values.minusInfinity is NaN
+PASS +values.nonNumberString * +values.minusInfinity is values.nonNumberString * values.minusInfinity
+PASS +values.nonNumberString * +values.minusInfinity is NaN
+PASS +values.nonNumberString / values.minusInfinity is values.nonNumberString / values.minusInfinity
+PASS +values.nonNumberString / values.minusInfinity is NaN
+PASS values.nonNumberString / +values.minusInfinity is values.nonNumberString / values.minusInfinity
+PASS values.nonNumberString / +values.minusInfinity is NaN
+PASS +values.nonNumberString / +values.minusInfinity is values.nonNumberString / values.minusInfinity
+PASS +values.nonNumberString / +values.minusInfinity is NaN
+PASS +values.nonNumberString - values.minusInfinity is values.nonNumberString - values.minusInfinity
+PASS +values.nonNumberString - values.minusInfinity is NaN
+PASS values.nonNumberString - +values.minusInfinity is values.nonNumberString - values.minusInfinity
+PASS values.nonNumberString - +values.minusInfinity is NaN
+PASS +values.nonNumberString - +values.minusInfinity is values.nonNumberString - values.minusInfinity
+PASS +values.nonNumberString - +values.minusInfinity is NaN
+PASS +values.nonNumberString * values.notANumber is values.nonNumberString * values.notANumber
+PASS +values.nonNumberString * values.notANumber is NaN
+PASS values.nonNumberString * +values.notANumber is values.nonNumberString * values.notANumber
+PASS values.nonNumberString * +values.notANumber is NaN
+PASS +values.nonNumberString * +values.notANumber is values.nonNumberString * values.notANumber
+PASS +values.nonNumberString * +values.notANumber is NaN
+PASS +values.nonNumberString / values.notANumber is values.nonNumberString / values.notANumber
+PASS +values.nonNumberString / values.notANumber is NaN
+PASS values.nonNumberString / +values.notANumber is values.nonNumberString / values.notANumber
+PASS values.nonNumberString / +values.notANumber is NaN
+PASS +values.nonNumberString / +values.notANumber is values.nonNumberString / values.notANumber
+PASS +values.nonNumberString / +values.notANumber is NaN
+PASS +values.nonNumberString - values.notANumber is values.nonNumberString - values.notANumber
+PASS +values.nonNumberString - values.notANumber is NaN
+PASS values.nonNumberString - +values.notANumber is values.nonNumberString - values.notANumber
+PASS values.nonNumberString - +values.notANumber is NaN
+PASS +values.nonNumberString - +values.notANumber is values.nonNumberString - values.notANumber
+PASS +values.nonNumberString - +values.notANumber is NaN
+PASS +values.nonNumberString * values.nonNumberString is values.nonNumberString * values.nonNumberString
+PASS +values.nonNumberString * values.nonNumberString is NaN
+PASS values.nonNumberString * +values.nonNumberString is values.nonNumberString * values.nonNumberString
+PASS values.nonNumberString * +values.nonNumberString is NaN
+PASS +values.nonNumberString * +values.nonNumberString is values.nonNumberString * values.nonNumberString
+PASS +values.nonNumberString * +values.nonNumberString is NaN
+PASS +values.nonNumberString / values.nonNumberString is values.nonNumberString / values.nonNumberString
+PASS +values.nonNumberString / values.nonNumberString is NaN
+PASS values.nonNumberString / +values.nonNumberString is values.nonNumberString / values.nonNumberString
+PASS values.nonNumberString / +values.nonNumberString is NaN
+PASS +values.nonNumberString / +values.nonNumberString is values.nonNumberString / values.nonNumberString
+PASS +values.nonNumberString / +values.nonNumberString is NaN
+PASS +values.nonNumberString - values.nonNumberString is values.nonNumberString - values.nonNumberString
+PASS +values.nonNumberString - values.nonNumberString is NaN
+PASS values.nonNumberString - +values.nonNumberString is values.nonNumberString - values.nonNumberString
+PASS values.nonNumberString - +values.nonNumberString is NaN
+PASS +values.nonNumberString - +values.nonNumberString is values.nonNumberString - values.nonNumberString
+PASS +values.nonNumberString - +values.nonNumberString is NaN
+PASS +values.nonNumberString * values.someFloatString is values.nonNumberString * values.someFloatString
+PASS +values.nonNumberString * values.someFloatString is NaN
+PASS values.nonNumberString * +values.someFloatString is values.nonNumberString * values.someFloatString
+PASS values.nonNumberString * +values.someFloatString is NaN
+PASS +values.nonNumberString * +values.someFloatString is values.nonNumberString * values.someFloatString
+PASS +values.nonNumberString * +values.someFloatString is NaN
+PASS +values.nonNumberString / values.someFloatString is values.nonNumberString / values.someFloatString
+PASS +values.nonNumberString / values.someFloatString is NaN
+PASS values.nonNumberString / +values.someFloatString is values.nonNumberString / values.someFloatString
+PASS values.nonNumberString / +values.someFloatString is NaN
+PASS +values.nonNumberString / +values.someFloatString is values.nonNumberString / values.someFloatString
+PASS +values.nonNumberString / +values.someFloatString is NaN
+PASS +values.nonNumberString - values.someFloatString is values.nonNumberString - values.someFloatString
+PASS +values.nonNumberString - values.someFloatString is NaN
+PASS values.nonNumberString - +values.someFloatString is values.nonNumberString - values.someFloatString
+PASS values.nonNumberString - +values.someFloatString is NaN
+PASS +values.nonNumberString - +values.someFloatString is values.nonNumberString - values.someFloatString
+PASS +values.nonNumberString - +values.someFloatString is NaN
+PASS +values.someFloatString * values.someInt is values.someFloatString * values.someInt
+PASS +values.someFloatString * values.someInt is 1781.64
+PASS values.someFloatString * +values.someInt is values.someFloatString * values.someInt
+PASS values.someFloatString * +values.someInt is 1781.64
+PASS +values.someFloatString * +values.someInt is values.someFloatString * values.someInt
+PASS +values.someFloatString * +values.someInt is 1781.64
+PASS +values.someFloatString / values.someInt is values.someFloatString / values.someInt
+PASS +values.someFloatString / values.someInt is 1.01
+PASS values.someFloatString / +values.someInt is values.someFloatString / values.someInt
+PASS values.someFloatString / +values.someInt is 1.01
+PASS +values.someFloatString / +values.someInt is values.someFloatString / values.someInt
+PASS +values.someFloatString / +values.someInt is 1.01
+PASS +values.someFloatString - values.someInt is values.someFloatString - values.someInt
+PASS +values.someFloatString - values.someInt is 0.4200000000000017
+PASS values.someFloatString - +values.someInt is values.someFloatString - values.someInt
+PASS values.someFloatString - +values.someInt is 0.4200000000000017
+PASS +values.someFloatString - +values.someInt is values.someFloatString - values.someInt
+PASS +values.someFloatString - +values.someInt is 0.4200000000000017
+PASS +values.someFloatString * values.someFloat is values.someFloatString * values.someFloat
+PASS +values.someFloatString * values.someFloat is 1799.4564000000003
+PASS values.someFloatString * +values.someFloat is values.someFloatString * values.someFloat
+PASS values.someFloatString * +values.someFloat is 1799.4564000000003
+PASS +values.someFloatString * +values.someFloat is values.someFloatString * values.someFloat
+PASS +values.someFloatString * +values.someFloat is 1799.4564000000003
+PASS +values.someFloatString / values.someFloat is values.someFloatString / values.someFloat
+PASS +values.someFloatString / values.someFloat is 1
+PASS values.someFloatString / +values.someFloat is values.someFloatString / values.someFloat
+PASS values.someFloatString / +values.someFloat is 1
+PASS +values.someFloatString / +values.someFloat is values.someFloatString / values.someFloat
+PASS +values.someFloatString / +values.someFloat is 1
+PASS +values.someFloatString - values.someFloat is values.someFloatString - values.someFloat
+PASS +values.someFloatString - values.someFloat is 0
+PASS values.someFloatString - +values.someFloat is values.someFloatString - values.someFloat
+PASS values.someFloatString - +values.someFloat is 0
+PASS +values.someFloatString - +values.someFloat is values.someFloatString - values.someFloat
+PASS +values.someFloatString - +values.someFloat is 0
+PASS +values.someFloatString * values.one is values.someFloatString * values.one
+PASS +values.someFloatString * values.one is 42.42
+PASS values.someFloatString * +values.one is values.someFloatString * values.one
+PASS values.someFloatString * +values.one is 42.42
+PASS +values.someFloatString * +values.one is values.someFloatString * values.one
+PASS +values.someFloatString * +values.one is 42.42
+PASS +values.someFloatString / values.one is values.someFloatString / values.one
+PASS +values.someFloatString / values.one is 42.42
+PASS values.someFloatString / +values.one is values.someFloatString / values.one
+PASS values.someFloatString / +values.one is 42.42
+PASS +values.someFloatString / +values.one is values.someFloatString / values.one
+PASS +values.someFloatString / +values.one is 42.42
+PASS +values.someFloatString - values.one is values.someFloatString - values.one
+PASS +values.someFloatString - values.one is 41.42
+PASS values.someFloatString - +values.one is values.someFloatString - values.one
+PASS values.someFloatString - +values.one is 41.42
+PASS +values.someFloatString - +values.one is values.someFloatString - values.one
+PASS +values.someFloatString - +values.one is 41.42
+PASS +values.someFloatString * values.minusOne is values.someFloatString * values.minusOne
+PASS +values.someFloatString * values.minusOne is -42.42
+PASS values.someFloatString * +values.minusOne is values.someFloatString * values.minusOne
+PASS values.someFloatString * +values.minusOne is -42.42
+PASS +values.someFloatString * +values.minusOne is values.someFloatString * values.minusOne
+PASS +values.someFloatString * +values.minusOne is -42.42
+PASS +values.someFloatString / values.minusOne is values.someFloatString / values.minusOne
+PASS +values.someFloatString / values.minusOne is -42.42
+PASS values.someFloatString / +values.minusOne is values.someFloatString / values.minusOne
+PASS values.someFloatString / +values.minusOne is -42.42
+PASS +values.someFloatString / +values.minusOne is values.someFloatString / values.minusOne
+PASS +values.someFloatString / +values.minusOne is -42.42
+PASS +values.someFloatString - values.minusOne is values.someFloatString - values.minusOne
+PASS +values.someFloatString - values.minusOne is 43.42
+PASS values.someFloatString - +values.minusOne is values.someFloatString - values.minusOne
+PASS values.someFloatString - +values.minusOne is 43.42
+PASS +values.someFloatString - +values.minusOne is values.someFloatString - values.minusOne
+PASS +values.someFloatString - +values.minusOne is 43.42
+PASS +values.someFloatString * values.zero is values.someFloatString * values.zero
+PASS +values.someFloatString * values.zero is 0
+PASS values.someFloatString * +values.zero is values.someFloatString * values.zero
+PASS values.someFloatString * +values.zero is 0
+PASS +values.someFloatString * +values.zero is values.someFloatString * values.zero
+PASS +values.someFloatString * +values.zero is 0
+PASS +values.someFloatString / values.zero is values.someFloatString / values.zero
+PASS +values.someFloatString / values.zero is Infinity
+PASS values.someFloatString / +values.zero is values.someFloatString / values.zero
+PASS values.someFloatString / +values.zero is Infinity
+PASS +values.someFloatString / +values.zero is values.someFloatString / values.zero
+PASS +values.someFloatString / +values.zero is Infinity
+PASS +values.someFloatString - values.zero is values.someFloatString - values.zero
+PASS +values.someFloatString - values.zero is 42.42
+PASS values.someFloatString - +values.zero is values.someFloatString - values.zero
+PASS values.someFloatString - +values.zero is 42.42
+PASS +values.someFloatString - +values.zero is values.someFloatString - values.zero
+PASS +values.someFloatString - +values.zero is 42.42
+PASS +values.someFloatString * values.minusZero is values.someFloatString * values.minusZero
+PASS +values.someFloatString * values.minusZero is -0
+PASS values.someFloatString * +values.minusZero is values.someFloatString * values.minusZero
+PASS values.someFloatString * +values.minusZero is -0
+PASS +values.someFloatString * +values.minusZero is values.someFloatString * values.minusZero
+PASS +values.someFloatString * +values.minusZero is -0
+PASS +values.someFloatString / values.minusZero is values.someFloatString / values.minusZero
+PASS +values.someFloatString / values.minusZero is -Infinity
+PASS values.someFloatString / +values.minusZero is values.someFloatString / values.minusZero
+PASS values.someFloatString / +values.minusZero is -Infinity
+PASS +values.someFloatString / +values.minusZero is values.someFloatString / values.minusZero
+PASS +values.someFloatString / +values.minusZero is -Infinity
+PASS +values.someFloatString - values.minusZero is values.someFloatString - values.minusZero
+PASS +values.someFloatString - values.minusZero is 42.42
+PASS values.someFloatString - +values.minusZero is values.someFloatString - values.minusZero
+PASS values.someFloatString - +values.minusZero is 42.42
+PASS +values.someFloatString - +values.minusZero is values.someFloatString - values.minusZero
+PASS +values.someFloatString - +values.minusZero is 42.42
+PASS +values.someFloatString * values.infinity is values.someFloatString * values.infinity
+PASS +values.someFloatString * values.infinity is Infinity
+PASS values.someFloatString * +values.infinity is values.someFloatString * values.infinity
+PASS values.someFloatString * +values.infinity is Infinity
+PASS +values.someFloatString * +values.infinity is values.someFloatString * values.infinity
+PASS +values.someFloatString * +values.infinity is Infinity
+PASS +values.someFloatString / values.infinity is values.someFloatString / values.infinity
+PASS +values.someFloatString / values.infinity is 0
+PASS values.someFloatString / +values.infinity is values.someFloatString / values.infinity
+PASS values.someFloatString / +values.infinity is 0
+PASS +values.someFloatString / +values.infinity is values.someFloatString / values.infinity
+PASS +values.someFloatString / +values.infinity is 0
+PASS +values.someFloatString - values.infinity is values.someFloatString - values.infinity
+PASS +values.someFloatString - values.infinity is -Infinity
+PASS values.someFloatString - +values.infinity is values.someFloatString - values.infinity
+PASS values.someFloatString - +values.infinity is -Infinity
+PASS +values.someFloatString - +values.infinity is values.someFloatString - values.infinity
+PASS +values.someFloatString - +values.infinity is -Infinity
+PASS +values.someFloatString * values.minusInfinity is values.someFloatString * values.minusInfinity
+PASS +values.someFloatString * values.minusInfinity is -Infinity
+PASS values.someFloatString * +values.minusInfinity is values.someFloatString * values.minusInfinity
+PASS values.someFloatString * +values.minusInfinity is -Infinity
+PASS +values.someFloatString * +values.minusInfinity is values.someFloatString * values.minusInfinity
+PASS +values.someFloatString * +values.minusInfinity is -Infinity
+PASS +values.someFloatString / values.minusInfinity is values.someFloatString / values.minusInfinity
+PASS +values.someFloatString / values.minusInfinity is -0
+PASS values.someFloatString / +values.minusInfinity is values.someFloatString / values.minusInfinity
+PASS values.someFloatString / +values.minusInfinity is -0
+PASS +values.someFloatString / +values.minusInfinity is values.someFloatString / values.minusInfinity
+PASS +values.someFloatString / +values.minusInfinity is -0
+PASS +values.someFloatString - values.minusInfinity is values.someFloatString - values.minusInfinity
+PASS +values.someFloatString - values.minusInfinity is Infinity
+PASS values.someFloatString - +values.minusInfinity is values.someFloatString - values.minusInfinity
+PASS values.someFloatString - +values.minusInfinity is Infinity
+PASS +values.someFloatString - +values.minusInfinity is values.someFloatString - values.minusInfinity
+PASS +values.someFloatString - +values.minusInfinity is Infinity
+PASS +values.someFloatString * values.notANumber is values.someFloatString * values.notANumber
+PASS +values.someFloatString * values.notANumber is NaN
+PASS values.someFloatString * +values.notANumber is values.someFloatString * values.notANumber
+PASS values.someFloatString * +values.notANumber is NaN
+PASS +values.someFloatString * +values.notANumber is values.someFloatString * values.notANumber
+PASS +values.someFloatString * +values.notANumber is NaN
+PASS +values.someFloatString / values.notANumber is values.someFloatString / values.notANumber
+PASS +values.someFloatString / values.notANumber is NaN
+PASS values.someFloatString / +values.notANumber is values.someFloatString / values.notANumber
+PASS values.someFloatString / +values.notANumber is NaN
+PASS +values.someFloatString / +values.notANumber is values.someFloatString / values.notANumber
+PASS +values.someFloatString / +values.notANumber is NaN
+PASS +values.someFloatString - values.notANumber is values.someFloatString - values.notANumber
+PASS +values.someFloatString - values.notANumber is NaN
+PASS values.someFloatString - +values.notANumber is values.someFloatString - values.notANumber
+PASS values.someFloatString - +values.notANumber is NaN
+PASS +values.someFloatString - +values.notANumber is values.someFloatString - values.notANumber
+PASS +values.someFloatString - +values.notANumber is NaN
+PASS +values.someFloatString * values.nonNumberString is values.someFloatString * values.nonNumberString
+PASS +values.someFloatString * values.nonNumberString is NaN
+PASS values.someFloatString * +values.nonNumberString is values.someFloatString * values.nonNumberString
+PASS values.someFloatString * +values.nonNumberString is NaN
+PASS +values.someFloatString * +values.nonNumberString is values.someFloatString * values.nonNumberString
+PASS +values.someFloatString * +values.nonNumberString is NaN
+PASS +values.someFloatString / values.nonNumberString is values.someFloatString / values.nonNumberString
+PASS +values.someFloatString / values.nonNumberString is NaN
+PASS values.someFloatString / +values.nonNumberString is values.someFloatString / values.nonNumberString
+PASS values.someFloatString / +values.nonNumberString is NaN
+PASS +values.someFloatString / +values.nonNumberString is values.someFloatString / values.nonNumberString
+PASS +values.someFloatString / +values.nonNumberString is NaN
+PASS +values.someFloatString - values.nonNumberString is values.someFloatString - values.nonNumberString
+PASS +values.someFloatString - values.nonNumberString is NaN
+PASS values.someFloatString - +values.nonNumberString is values.someFloatString - values.nonNumberString
+PASS values.someFloatString - +values.nonNumberString is NaN
+PASS +values.someFloatString - +values.nonNumberString is values.someFloatString - values.nonNumberString
+PASS +values.someFloatString - +values.nonNumberString is NaN
+PASS +values.someFloatString * values.someFloatString is values.someFloatString * values.someFloatString
+PASS +values.someFloatString * values.someFloatString is 1799.4564000000003
+PASS values.someFloatString * +values.someFloatString is values.someFloatString * values.someFloatString
+PASS values.someFloatString * +values.someFloatString is 1799.4564000000003
+PASS +values.someFloatString * +values.someFloatString is values.someFloatString * values.someFloatString
+PASS +values.someFloatString * +values.someFloatString is 1799.4564000000003
+PASS +values.someFloatString / values.someFloatString is values.someFloatString / values.someFloatString
+PASS +values.someFloatString / values.someFloatString is 1
+PASS values.someFloatString / +values.someFloatString is values.someFloatString / values.someFloatString
+PASS values.someFloatString / +values.someFloatString is 1
+PASS +values.someFloatString / +values.someFloatString is values.someFloatString / values.someFloatString
+PASS +values.someFloatString / +values.someFloatString is 1
+PASS +values.someFloatString - values.someFloatString is values.someFloatString - values.someFloatString
+PASS +values.someFloatString - values.someFloatString is 0
+PASS values.someFloatString - +values.someFloatString is values.someFloatString - values.someFloatString
+PASS values.someFloatString - +values.someFloatString is 0
+PASS +values.someFloatString - +values.someFloatString is values.someFloatString - values.someFloatString
+PASS +values.someFloatString - +values.someFloatString is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/math-transforms.js b/deps/v8/test/webkit/math-transforms.js
new file mode 100644 (file)
index 0000000..9d9f8fb
--- /dev/null
@@ -0,0 +1,85 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+
+"This test checks for potential edge case bugs with certain math transforms involving multiplication by 1 and unary plus."
+
+);
+
+var values = {
+    someInt: 42,
+    someFloat: 42.42,
+    one: 1,
+    minusOne: -1,
+    zero: 0,
+    minusZero: -0,
+    infinity: Infinity,
+    minusInfinity: -Infinity,
+    notANumber: NaN,
+    nonNumberString: "x",
+    someFloatString: "42.42"
+};
+
+var numberForString = {
+    nonNumberString: "notANumber",
+    someFloatString: "someFloat"
+};
+
+for (var name in values) {
+    var numForStr = numberForString[name] ? numberForString[name] : name;
+
+    shouldBe("values." + name + " * 1", "+values." + name);
+    shouldBe("values." + name + " * 1", stringify(values[numForStr]));
+
+    shouldBe("1 * values." + name, "+values." + name);
+    shouldBe("1 * values." + name, stringify(values[numForStr]));
+}
+
+for (var name1 in values) {
+    var numForStr1 = numberForString[name1] ? numberForString[name1] : name1;
+    for (var name2 in values) {
+        var numForStr2 = numberForString[name2] ? numberForString[name2] : name2;
+
+        shouldBe("+values." + name1 + " * values." + name2, "values." + name1 + " * values." + name2);
+        shouldBe("+values." + name1 + " * values." + name2, stringify(values[name1] * values[name2]));
+        shouldBe("values." + name1 + " * +values." + name2, "values." + name1 + " * values." + name2);
+        shouldBe("values." + name1 + " * +values." + name2, stringify(values[name1] * values[name2]));
+        shouldBe("+values." + name1 + " * +values." + name2, "values." + name1 + " * values." + name2);
+        shouldBe("+values." + name1 + " * +values." + name2, stringify(values[name1] * values[name2]));
+
+        shouldBe("+values." + name1 + " / values." + name2, "values." + name1 + " / values." + name2);
+        shouldBe("+values." + name1 + " / values." + name2, stringify(values[name1] / values[name2]));
+        shouldBe("values." + name1 + " / +values." + name2, "values." + name1 + " / values." + name2);
+        shouldBe("values." + name1 + " / +values." + name2, stringify(values[name1] / values[name2]));
+        shouldBe("+values." + name1 + " / +values." + name2, "values." + name1 + " / values." + name2);
+        shouldBe("+values." + name1 + " / +values." + name2, stringify(values[name1] / values[name2]));
+
+        shouldBe("+values." + name1 + " - values." + name2, "values." + name1 + " - values." + name2);
+        shouldBe("+values." + name1 + " - values." + name2, stringify(values[name1] - values[name2]));
+        shouldBe("values." + name1 + " - +values." + name2, "values." + name1 + " - values." + name2);
+        shouldBe("values." + name1 + " - +values." + name2, stringify(values[name1] - values[name2]));
+        shouldBe("+values." + name1 + " - +values." + name2, "values." + name1 + " - values." + name2);
+        shouldBe("+values." + name1 + " - +values." + name2, stringify(values[name1] - values[name2]));
+    }
+}
diff --git a/deps/v8/test/webkit/math.js b/deps/v8/test/webkit/math.js
new file mode 100644 (file)
index 0000000..a84215f
--- /dev/null
@@ -0,0 +1,267 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+
+"This test checks the behavior of the Math object as described in 15.8 of the language specification."
+
+);
+
+shouldBe("Math.abs(NaN)", "NaN");
+shouldBe("Math.abs(0)", "0");
+shouldBe("Math.abs(-0)", "0");
+shouldBe("Math.abs(1)", "1");
+shouldBe("Math.abs(-1)", "1");
+shouldBe("Math.abs(Number.MIN_VALUE)", "Number.MIN_VALUE");
+shouldBe("Math.abs(-Number.MIN_VALUE)", "Number.MIN_VALUE");
+shouldBe("Math.abs(Number.MAX_VALUE)", "Number.MAX_VALUE");
+shouldBe("Math.abs(-Number.MAX_VALUE)", "Number.MAX_VALUE");
+shouldBe("Math.abs(Infinity)", "Infinity");
+shouldBe("Math.abs(-Infinity)", "Infinity");
+
+shouldBe("Math.acos(NaN)", "NaN");
+shouldBe("Math.acos(-0)", "Math.acos(0)");
+shouldBe("Math.acos(1)", "0");
+shouldBe("Math.acos(1.1)", "NaN");
+shouldBe("Math.acos(-1.1)", "NaN");
+shouldBe("Math.acos(Infinity)", "NaN");
+shouldBe("Math.acos(-Infinity)", "NaN");
+
+shouldBe("Math.asin(NaN)", "NaN");
+shouldBe("Math.asin(0)", "0");
+shouldBe("Math.asin(-0)", "-0");
+shouldBe("Math.asin(1)", "-Math.asin(-1)");
+shouldBe("Math.asin(1.1)", "NaN");
+shouldBe("Math.asin(-1.1)", "NaN");
+shouldBe("Math.asin(Infinity)", "NaN");
+shouldBe("Math.asin(-Infinity)", "NaN");
+
+shouldBe("Math.atan(NaN)", "NaN");
+shouldBe("Math.atan(0)", "0");
+shouldBe("Math.atan(-0)", "-0");
+shouldBe("Math.atan(Infinity)", "-Math.atan(-Infinity)");
+
+shouldBe("Math.atan2(NaN, NaN)", "NaN");
+shouldBe("Math.atan2(NaN, 0)", "NaN");
+shouldBe("Math.atan2(NaN, -0)", "NaN");
+shouldBe("Math.atan2(NaN, 1)", "NaN");
+shouldBe("Math.atan2(NaN, Infinity)", "NaN");
+shouldBe("Math.atan2(NaN, -Infinity)", "NaN");
+shouldBe("Math.atan2(0, NaN)", "NaN");
+shouldBe("Math.atan2(-0, NaN)", "NaN");
+shouldBe("Math.atan2(1, NaN)", "NaN");
+shouldBe("Math.atan2(Infinity, NaN)", "NaN");
+shouldBe("Math.atan2(-Infinity, NaN)", "NaN");
+
+// Regression test for Bug 26978 (https://bugs.webkit.org/show_bug.cgi?id=26978)
+var testStr = "";
+var v = { valueOf: function() { testStr += "one"; return 1; } };
+var w = { valueOf: function() { testStr += "two"; return 2; } };
+Math.atan2(v, w);
+shouldBe('testStr', '\"onetwo\"');
+
+/*
+• Ify>0andxis+0, theresult isanimplementation-dependent approximationto +π/2.
+• Ify>0andxis−0, theresult isanimplementation-dependent approximationto +π/2.
+• Ifyis+0andx>0, theresult is+0.
+• Ifyis+0andxis+0, theresult is+0.
+• Ifyis+0andxis−0, theresult isanimplementation-dependent approximationto +π.
+• Ifyis+0andx<0, theresult isanimplementation-dependent approximationto +π.
+• Ifyis−0andx>0, theresult is−0.
+• Ifyis−0andxis+0, theresult is−0.
+• Ifyis−0andxis−0, theresult isanimplementation-dependent approximationto −π.
+• Ifyis−0andx<0, theresult isanimplementation-dependent approximationto −π.
+• Ify<0andxis+0, theresult isanimplementation-dependent approximationto −π/2.
+• Ify<0andxis−0, theresult isanimplementation-dependent approximationto −π/2.
+• Ify>0andyisfiniteandxis+∞, theresult is+0.
+• Ify>0andyisfiniteandxis−∞, theresult ifanimplementation-dependent approximationto +π.
+• Ify<0andyisfiniteandxis+∞, theresult is−0.
+• Ify<0andyisfiniteandxis−∞, theresult isanimplementation-dependent approximationto−π.
+• Ifyis+∞andxisfinite, theresult isanimplementation-dependent approximationto +π/2.
+• Ifyis−∞andxisfinite, theresult isanimplementation-dependent approximationto −π/2.
+• Ifyis+∞andxis+∞, theresult isanimplementation-dependent approximationto +π/4.
+• Ifyis+∞andxis−∞, theresult isanimplementation-dependent approximationto +3π/4.
+• Ifyis−∞andxis+∞, theresult isanimplementation-dependent approximationto −π/4.
+• Ifyis−∞andxis−∞, theresult isanimplementation-dependent approximationto −3π/4.
+*/
+
+shouldBe("Math.ceil(NaN)", "NaN");
+shouldBe("Math.ceil(0)", "0");
+shouldBe("Math.ceil(-0)", "-0");
+shouldBe("Math.ceil(-0.5)", "-0");
+shouldBe("Math.ceil(1)", "1");
+shouldBe("Math.ceil(-1)", "-1");
+shouldBe("Math.ceil(1.1)", "2");
+shouldBe("Math.ceil(-1.1)", "-1");
+shouldBe("Math.ceil(Number.MIN_VALUE)", "1");
+shouldBe("Math.ceil(-Number.MIN_VALUE)", "-0");
+shouldBe("Math.ceil(Number.MAX_VALUE)", "Number.MAX_VALUE");
+shouldBe("Math.ceil(-Number.MAX_VALUE)", "-Number.MAX_VALUE");
+shouldBe("Math.ceil(Infinity)", "Infinity");
+shouldBe("Math.ceil(-Infinity)", "-Infinity");
+
+shouldBe("Math.cos(NaN)", "NaN");
+shouldBe("Math.cos(0)", "1");
+shouldBe("Math.cos(-0)", "1");
+shouldBe("Math.cos(Infinity)", "NaN");
+shouldBe("Math.cos(-Infinity)", "NaN");
+
+shouldBe("Math.exp(NaN)", "NaN");
+shouldBe("Math.exp(0)", "1");
+shouldBe("Math.exp(-0)", "1");
+shouldBe("Math.exp(Infinity)", "Infinity");
+shouldBe("Math.exp(-Infinity)", "0");
+
+shouldBe("Math.floor(NaN)", "NaN");
+shouldBe("Math.floor(0)", "0");
+shouldBe("Math.floor(-0)", "-0");
+shouldBe("Math.floor(0.5)", "0");
+shouldBe("Math.floor(1)", "1");
+shouldBe("Math.floor(-1)", "-1");
+shouldBe("Math.floor(1.1)", "1");
+shouldBe("Math.floor(-1.1)", "-2");
+shouldBe("Math.floor(Number.MIN_VALUE)", "0");
+shouldBe("Math.floor(-Number.MIN_VALUE)", "-1");
+shouldBe("Math.floor(Number.MAX_VALUE)", "Number.MAX_VALUE");
+shouldBe("Math.floor(-Number.MAX_VALUE)", "-Number.MAX_VALUE");
+shouldBe("Math.floor(Infinity)", "Infinity");
+shouldBe("Math.floor(-Infinity)", "-Infinity");
+
+shouldBe("Math.log(NaN)", "NaN");
+shouldBe("Math.log(0)", "-Infinity");
+shouldBe("Math.log(-0)", "-Infinity");
+shouldBe("Math.log(1)", "0");
+shouldBe("Math.log(-1)", "NaN");
+shouldBe("Math.log(-1.1)", "NaN");
+shouldBe("Math.log(Infinity)", "Infinity");
+shouldBe("Math.log(-Infinity)", "NaN");
+
+shouldBe("Math.max()", "-Infinity");
+shouldBe("Math.max(NaN)", "NaN");
+shouldBe("Math.max(NaN,1)", "NaN");
+shouldBe("Math.max(0)", "0");
+shouldBe("Math.max(-0)", "-0");
+shouldBe("Math.max(-0, 0)", "0");
+
+shouldBe("Math.min()", "Infinity");
+shouldBe("Math.min(NaN)", "NaN");
+shouldBe("Math.min(NaN,1)", "NaN");
+shouldBe("Math.min(0)", "0");
+shouldBe("Math.min(-0)", "-0");
+shouldBe("Math.min(-0, 0)", "-0");
+
+shouldBe("Math.pow(NaN, NaN)", "NaN");
+shouldBe("Math.pow(NaN, 0)", "1");
+shouldBe("Math.pow(NaN, -0)", "1");
+shouldBe("Math.pow(NaN, 1)", "NaN");
+shouldBe("Math.pow(NaN, Infinity)", "NaN");
+shouldBe("Math.pow(NaN, -Infinity)", "NaN");
+shouldBe("Math.pow(0, NaN)", "NaN");
+shouldBe("Math.pow(-0, NaN)", "NaN");
+shouldBe("Math.pow(1, NaN)", "NaN");
+shouldBe("Math.pow(Infinity, NaN)", "NaN");
+shouldBe("Math.pow(-Infinity, NaN)", "NaN");
+
+/*
+• Ifabs(x)>1andyis+∞, theresult is+∞.
+• Ifabs(x)>1andyis−∞, theresult is+0.
+• Ifabs(x)==1andyis+∞, theresult isNaN.
+• Ifabs(x)==1andyis−∞, theresult isNaN.
+• Ifabs(x)<1andyis+∞, theresult is+0.
+• Ifabs(x)<1andyis−∞, theresult is+∞.
+• Ifxis+∞andy>0, theresult is+∞.
+• Ifxis+∞andy<0, theresult is+0.
+• Ifxis−∞andy>0andyisanoddinteger, theresult is−∞.
+• Ifxis−∞andy>0andyisnot anoddinteger, theresult is+∞.
+• Ifxis−∞andy<0andyisanoddinteger, theresult is−0.
+• Ifxis−∞andy<0andyisnot anoddinteger, theresult is+0.
+• Ifxis+0andy>0, theresult is+0.
+• Ifxis+0andy<0, theresult is+∞.
+• Ifxis−0andy>0andyisanoddinteger, theresult is−0.
+• Ifxis−0andy>0andyisnot anoddinteger, theresult is+0.
+• Ifxis−0andy<0andyisanoddinteger, theresult is−∞.
+• Ifxis−0andy<0andyisnot anoddinteger, theresult is+∞.
+• Ifx<0andxisfiniteandyisfiniteandyisnot aninteger, theresult isNaN.
+*/
+
+shouldBe("Math.round(NaN)", "NaN");
+shouldBe("Math.round(0)", "0");
+shouldBe("Math.round(-0)", "-0");
+shouldBe("Math.round(0.4)", "0");
+shouldBe("Math.round(-0.4)", "-0");
+shouldBe("Math.round(0.5)", "1");
+shouldBe("Math.round(-0.5)", "-0");
+shouldBe("Math.round(0.6)", "1");
+shouldBe("Math.round(-0.6)", "-1");
+shouldBe("Math.round(1)", "1");
+shouldBe("Math.round(-1)", "-1");
+shouldBe("Math.round(1.1)", "1");
+shouldBe("Math.round(-1.1)", "-1");
+shouldBe("Math.round(1.5)", "2");
+shouldBe("Math.round(-1.5)", "-1");
+shouldBe("Math.round(1.6)", "2");
+shouldBe("Math.round(-1.6)", "-2");
+shouldBe("Math.round(8640000000000000)", "8640000000000000");
+// The following is expected. Double can't represent .5 in this case.
+shouldBe("Math.round(8640000000000000.5)", "8640000000000000");
+shouldBe("Math.round(8640000000000001)", "8640000000000001");
+shouldBe("Math.round(8640000000000002)", "8640000000000002");
+shouldBe("Math.round(9007199254740990)", "9007199254740990");
+shouldBe("Math.round(9007199254740991)", "9007199254740991");
+shouldBe("Math.round(1.7976931348623157e+308)", "1.7976931348623157e+308");
+shouldBe("Math.round(-8640000000000000)", "-8640000000000000");
+shouldBe("Math.round(-8640000000000001)", "-8640000000000001");
+shouldBe("Math.round(-8640000000000002)", "-8640000000000002");
+shouldBe("Math.round(-9007199254740990)", "-9007199254740990");
+shouldBe("Math.round(-9007199254740991)", "-9007199254740991");
+shouldBe("Math.round(-1.7976931348623157e+308)", "-1.7976931348623157e+308");
+shouldBe("Math.round(Infinity)", "Infinity");
+shouldBe("Math.round(-Infinity)", "-Infinity");
+
+shouldBe("Math.sin(NaN)", "NaN");
+shouldBe("Math.sin(0)", "0");
+shouldBe("Math.sin(-0)", "-0");
+shouldBe("Math.sin(Infinity)", "NaN");
+shouldBe("Math.sin(-Infinity)", "NaN");
+
+shouldBe("Math.sqrt(NaN)", "NaN");
+shouldBe("Math.sqrt(0)", "0");
+shouldBe("Math.sqrt(-0)", "-0");
+shouldBe("Math.sqrt(1)", "1");
+shouldBe("Math.sqrt(-1)", "NaN");
+shouldBe("Math.sqrt(Infinity)", "Infinity");
+shouldBe("Math.sqrt(-Infinity)", "NaN");
+
+shouldBe("Math.tan(NaN)", "NaN");
+shouldBe("Math.tan(0)", "0");
+shouldBe("Math.tan(-0)", "-0");
+shouldBe("Math.tan(Infinity)", "NaN");
+shouldBe("Math.tan(-Infinity)", "NaN");
+
+var __Math = Math;
+shouldBeTrue("delete Math;");
+
+function global() { return this; }
+shouldBeFalse("'Math' in global()");
+
+Math = __Math;
diff --git a/deps/v8/test/webkit/mod-by-zero-expected.txt b/deps/v8/test/webkit/mod-by-zero-expected.txt
new file mode 100644 (file)
index 0000000..4e792ba
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that modulo with zero does not crash but returns NaN.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS mod(0) is NaN
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/mod-by-zero.js b/deps/v8/test/webkit/mod-by-zero.js
new file mode 100644 (file)
index 0000000..e3c51dd
--- /dev/null
@@ -0,0 +1,32 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that modulo with zero does not crash but returns NaN."
+);
+
+function mod(b) {
+    return b%b;
+}
+
+shouldBeNaN("mod(0)");
diff --git a/deps/v8/test/webkit/mod-crash-expected.txt b/deps/v8/test/webkit/mod-crash-expected.txt
new file mode 100644 (file)
index 0000000..9c27b34
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that n % 0 doesn't crash with a floating-point exception.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 2 % 0 is NaN
+PASS n % 0 is NaN
+PASS f() is NaN
+PASS g() is NaN
+PASS nonSpeculativeModReuse(0.5) is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/mod-crash.js b/deps/v8/test/webkit/mod-crash.js
new file mode 100644 (file)
index 0000000..2bc01a1
--- /dev/null
@@ -0,0 +1,62 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that n % 0 doesn't crash with a floating-point exception."
+);
+
+shouldBe("2 % 0", "NaN");
+
+var n = 2;
+shouldBe("n % 0", "NaN");
+
+function f()
+{
+    return 2 % 0;
+}
+
+shouldBe("f()", "NaN");
+
+function g()
+{
+    var n = 2;
+    return n % 0;
+}
+
+shouldBe("g()", "NaN");
+
+// Test that reusing a floating point value after use in a modulus works correctly.
+function nonSpeculativeModReuseInner(argument, o1, o2)
+{
+         // The + operator on objects is a reliable way to avoid the speculative JIT path for now at least.
+    o1 + o2;
+
+    var knownDouble = argument - 0;
+    return knownDouble % 1 + knownDouble;
+}
+function nonSpeculativeModReuse(argument)
+{
+    return nonSpeculativeModReuseInner(argument, {}, {});
+}
+
+shouldBe("nonSpeculativeModReuse(0.5)", "1");
diff --git a/deps/v8/test/webkit/multiline-comment-newline-expected.txt b/deps/v8/test/webkit/multiline-comment-newline-expected.txt
new file mode 100644 (file)
index 0000000..3e81ba9
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that a multiline comment containing a newline is converted to a line terminator token.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS shouldBeUndefined is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/multiline-comment-newline.js b/deps/v8/test/webkit/multiline-comment-newline.js
new file mode 100644 (file)
index 0000000..8bad733
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that a multiline comment containing a newline is converted to a line terminator token."
+);
+
+var shouldBeUndefined = (function(){
+  return/*
+  */1
+})();
+
+shouldBe('shouldBeUndefined', 'undefined');
diff --git a/deps/v8/test/webkit/named-function-expression-expected.txt b/deps/v8/test/webkit/named-function-expression-expected.txt
new file mode 100644 (file)
index 0000000..4846470
--- /dev/null
@@ -0,0 +1,64 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests variable resolution rules for named function expressions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+anonymous function expression
+PASS var x = (function(a,b){ return a + b; }); x(1,2) is 3
+named function expression
+PASS var x = (function Named(a,b){ return a + b; }); x(2,3) is 5
+eval'd code should be able to access scoped variables
+PASS var z = 6; var x = eval('(function(a,b){ return a + b + z; })'); x(3,4) is 13
+eval'd code + self-check
+PASS var z = 10; var x = eval('(function Named(a,b){ return (!!Named) ? (a + b + z) : -999; })'); x(4,5) is 19
+named function expressions are not saved in the current context
+PASS (function Foo(){ return 1; }); try { Foo(); throw "FuncExpr was stored"; } catch(e) { if(typeof(e)=="string") throw e; } 1 is 1
+recursion is possible, though
+PASS var ctr = 3; var x = (function Named(a,b){ if(--ctr) return 2 * Named(a,b); else return a + b; }); x(5,6) is 44
+regression test where kjs regarded an anonymous function declaration (which is illegal) as a FunctionExpr
+PASS var hadError = 0; try { eval("function(){ return 2; };"); } catch(e) { hadError = 1; }; hadError; is 1
+
+-----
+
+PASS: (function closure() { return closure == arguments.callee && !this.closure; })() should be true and is.
+PASS: (function closure() { closure = 1; return closure == arguments.callee && !this.closure; })() should be true and is.
+PASS: (function closure(closure) { return closure == 1 && !this.closure; })(1) should be true and is.
+PASS: (function closure() { var closure = 1; return closure == 1 && !this.closure; })() should be true and is.
+PASS: (function closure() { function closure() { }; return closure != arguments.callee && !this.closure; })() should be true and is.
+PASS: (function closure() { return (function() { return closure && !this.closure; })(); })() should be true and is.
+PASS: (function closure() { return (function() { closure = null; return closure && !this.closure; })(); })() should be true and is.
+PASS: (function closure() { return (function() { return closure && !this.closure; }); })()() should be true and is.
+PASS: (function closure() { return (function() { closure = null; return closure && !this.closure; }); })()() should be true and is.
+PASS: (function closure() { eval("var closure"); return closure == undefined && !this.closure; })() should be true and is.
+PASS: (function closure() { eval("function closure() { }"); return closure != arguments.callee && !this.closure; })() should be true and is.
+PASS: (function closure() { eval("var closure;"); closure = 1; return closure == 1 && !this.closure; })() should be true and is.
+PASS: (function closure() { eval("var closure"); delete closure; return closure == arguments.callee && !this.closure; })() should be true and is.
+PASS: (function closure() { eval("function closure() { }"); delete closure; return closure == arguments.callee && !this.closure; })() should be true and is.
+PASS: (function closure() { eval("closure = 1;"); return closure == arguments.callee && !this.closure; })() should be true and is.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/named-function-expression.js b/deps/v8/test/webkit/named-function-expression.js
new file mode 100644 (file)
index 0000000..ecfbb90
--- /dev/null
@@ -0,0 +1,151 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests variable resolution rules for named function expressions."
+);
+
+function Call(lambda) { return lambda(); }
+
+debug("anonymous function expression");
+shouldBe("var x = (function(a,b){ return a + b; }); x(1,2)", "3");
+
+debug("named function expression");
+shouldBe("var x = (function Named(a,b){ return a + b; }); x(2,3)", "5");
+
+debug("eval'd code should be able to access scoped variables");
+shouldBe("var z = 6; var x = eval('(function(a,b){ return a + b + z; })'); x(3,4)", "13");
+
+debug("eval'd code + self-check");
+shouldBe("var z = 10; var x = eval('(function Named(a,b){ return (!!Named) ? (a + b + z) : -999; })'); x(4,5)", "19");
+
+debug("named function expressions are not saved in the current context");
+shouldBe('(function Foo(){ return 1; }); try { Foo(); throw "FuncExpr was stored"; } catch(e) { if(typeof(e)=="string") throw e; } 1', "1");
+
+debug("recursion is possible, though");
+shouldBe("var ctr = 3; var x = (function Named(a,b){ if(--ctr) return 2 * Named(a,b); else return a + b; }); x(5,6)", "44");
+
+debug("regression test where kjs regarded an anonymous function declaration (which is illegal) as a FunctionExpr");
+shouldBe('var hadError = 0; try { eval("function(){ return 2; };"); } catch(e) { hadError = 1; }; hadError;', "1");
+
+debug("\n-----\n");
+
+function shouldBeTrueWithDescription(x, xDescription)
+{
+        if (x) {
+                debug("PASS: " + xDescription + " should be true and is.");
+                return;
+        }
+
+        debug("FAIL: " + xDescription + " should be true but isn't.");
+}
+
+// Recursion.
+shouldBeTrueWithDescription(
+        (function closure() { return closure == arguments.callee && !this.closure; })(),
+        "(function closure() { return closure == arguments.callee && !this.closure; })()"
+);
+
+// Assignment.
+shouldBeTrueWithDescription(
+        (function closure() { closure = 1; return closure == arguments.callee && !this.closure; })(),
+        "(function closure() { closure = 1; return closure == arguments.callee && !this.closure; })()"
+);
+
+// Function name vs parameter.
+shouldBeTrueWithDescription(
+        (function closure(closure) { return closure == 1 && !this.closure; })(1),
+        "(function closure(closure) { return closure == 1 && !this.closure; })(1)"
+);
+
+// Function name vs var.
+shouldBeTrueWithDescription(
+        (function closure() { var closure = 1; return closure == 1 && !this.closure; })(),
+        "(function closure() { var closure = 1; return closure == 1 && !this.closure; })()"
+);
+
+// Function name vs declared function.
+shouldBeTrueWithDescription(
+        (function closure() { function closure() { }; return closure != arguments.callee && !this.closure; })(),
+        "(function closure() { function closure() { }; return closure != arguments.callee && !this.closure; })()"
+);
+
+// Resolve before tear-off.
+shouldBeTrueWithDescription(
+        (function closure() { return (function() { return closure && !this.closure; })(); })(),
+        "(function closure() { return (function() { return closure && !this.closure; })(); })()"
+);
+
+// Resolve assignment before tear-off.
+shouldBeTrueWithDescription(
+        (function closure() { return (function() { closure = null; return closure && !this.closure; })(); })(),
+        "(function closure() { return (function() { closure = null; return closure && !this.closure; })(); })()"
+);
+
+// Resolve after tear-off.
+shouldBeTrueWithDescription(
+        (function closure() { return (function() { return closure && !this.closure; }); })()(),
+        "(function closure() { return (function() { return closure && !this.closure; }); })()()"
+);
+
+// Resolve assignment after tear-off.
+shouldBeTrueWithDescription(
+        (function closure() { return (function() { closure = null; return closure && !this.closure; }); })()(),
+        "(function closure() { return (function() { closure = null; return closure && !this.closure; }); })()()"
+);
+
+// Eval var shadowing (should overwrite).
+shouldBeTrueWithDescription(
+        (function closure() { eval("var closure"); return closure == undefined && !this.closure; })(),
+        "(function closure() { eval(\"var closure\"); return closure == undefined && !this.closure; })()"
+);
+
+// Eval function shadowing (should overwrite).
+shouldBeTrueWithDescription(
+        (function closure() { eval("function closure() { }"); return closure != arguments.callee && !this.closure; })(),
+        "(function closure() { eval(\"function closure() { }\"); return closure != arguments.callee && !this.closure; })()"
+);
+
+// Eval shadowing (should overwrite), followed by put (should overwrite).
+shouldBeTrueWithDescription(
+        (function closure() { eval("var closure;"); closure = 1; return closure == 1 && !this.closure; })(),
+        "(function closure() { eval(\"var closure;\"); closure = 1; return closure == 1 && !this.closure; })()"
+);
+
+// Eval var shadowing, followed by delete (should not overwrite).
+shouldBeTrueWithDescription(
+        (function closure() { eval("var closure"); delete closure; return closure == arguments.callee && !this.closure; })(),
+        "(function closure() { eval(\"var closure\"); delete closure; return closure == arguments.callee && !this.closure; })()"
+);
+
+// Eval function shadowing, followed by delete (should not overwrite).
+shouldBeTrueWithDescription(
+        (function closure() { eval("function closure() { }"); delete closure; return closure == arguments.callee && !this.closure; })(),
+        "(function closure() { eval(\"function closure() { }\"); delete closure; return closure == arguments.callee && !this.closure; })()"
+);
+
+// Eval assignment (should not overwrite).
+shouldBeTrueWithDescription(
+        (function closure() { eval("closure = 1;"); return closure == arguments.callee && !this.closure; })(),
+        "(function closure() { eval(\"closure = 1;\"); return closure == arguments.callee && !this.closure; })()"
+);
diff --git a/deps/v8/test/webkit/nested-functions-expected.txt b/deps/v8/test/webkit/nested-functions-expected.txt
new file mode 100644 (file)
index 0000000..2afe465
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test ensures that properties of nested function code are not lost (due to cached function info).
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS passed1 is true
+PASS passed2 is true
+PASS passed3 is true
+PASS passed4 is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/nested-functions.js b/deps/v8/test/webkit/nested-functions.js
new file mode 100644 (file)
index 0000000..b421143
--- /dev/null
@@ -0,0 +1,57 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test ensures that properties of nested function code are not lost (due to cached function info)."
+);
+
+var passed1 = false;
+var passed2 = false;
+var passed3 = false;
+var passed4 = false;
+
+// Test cases deliberately nested!
+function runTests() {
+    // Formating of these functions is significant for regression
+    // testing; functions with small bodies are not cached!
+    function test1() { return this; }
+    function test2() { "use strict"; return this; }
+    function test3() {
+        return this ? "OKAY" : "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
+    }
+    function test4() {
+        "use strict";
+        return !this ? "OKAY" : "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
+    }
+
+    passed1 = test1() === this;
+    passed2 = test2() === undefined;
+    passed3 = test3() === "OKAY";
+    passed4 = test4() === "OKAY";
+};
+
+runTests();
+shouldBeTrue("passed1");
+shouldBeTrue("passed2");
+shouldBeTrue("passed3");
+shouldBeTrue("passed4");
diff --git a/deps/v8/test/webkit/new-array-double-with-holes-expected.txt b/deps/v8/test/webkit/new-array-double-with-holes-expected.txt
new file mode 100644 (file)
index 0000000..50fddf8
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that if array allocation profiling causes a new_array to allocate double arrays, then the holes end up being correctly initialized.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/new-array-double-with-holes.js b/deps/v8/test/webkit/new-array-double-with-holes.js
new file mode 100644 (file)
index 0000000..208fc91
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that if array allocation profiling causes a new_array to allocate double arrays, then the holes end up being correctly initialized."
+);
+
+function foo(array, i) {
+    return array[i];
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo([, 1.5], 0)", "void 0");
+
diff --git a/deps/v8/test/webkit/no-semi-insertion-at-end-of-script-expected.txt b/deps/v8/test/webkit/no-semi-insertion-at-end-of-script-expected.txt
new file mode 100644 (file)
index 0000000..0540da1
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to make sure we don't automatically insert semicolons at the end of a script.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS if (0) threw exception SyntaxError: Unexpected end of input.
+PASS eval('if (0)') threw exception SyntaxError: Unexpected end of input.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/no-semi-insertion-at-end-of-script.js b/deps/v8/test/webkit/no-semi-insertion-at-end-of-script.js
new file mode 100644 (file)
index 0000000..8af4eac
--- /dev/null
@@ -0,0 +1,27 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to make sure we don't automatically insert semicolons at the end of a script.");
+
+shouldThrow("if (0)");
+shouldThrow("eval('if (0)')");
diff --git a/deps/v8/test/webkit/number-cell-reuse-expected.txt b/deps/v8/test/webkit/number-cell-reuse-expected.txt
new file mode 100644 (file)
index 0000000..2aa0a27
--- /dev/null
@@ -0,0 +1,44 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks corner cases of the number cell reuse code. In particular, it checks for known cases where code generation for number cell reuse caused assertions to fail.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS leftConstantRightSimple(2) is 0.4
+PASS leftConstantRightComplex(1) is 0.2
+PASS leftSimpleRightConstant(2) is 0.4
+PASS leftComplexRightConstant(1) is 0.2
+PASS leftThisRightSimple(2) is NaN
+PASS leftThisRightSimple.call(2, 2) is 8
+PASS leftThisRightComplex(2) is NaN
+PASS leftThisRightComplex.call(2, 2) is 12
+PASS leftSimpleRightThis(2) is NaN
+PASS leftSimpleRightThis.call(2, 2) is 8
+PASS leftComplexRightThis(2) is NaN
+PASS leftComplexRightThis.call(2, 2) is 12
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/number-cell-reuse.js b/deps/v8/test/webkit/number-cell-reuse.js
new file mode 100644 (file)
index 0000000..5b1002f
--- /dev/null
@@ -0,0 +1,86 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks corner cases of the number cell reuse code. In particular, it checks for known cases where code generation for number cell reuse caused assertions to fail."
+);
+
+function leftConstantRightSimple(a)
+{
+    return 0.1 * (a * a);
+}
+
+shouldBe("leftConstantRightSimple(2)", "0.4");
+
+function leftConstantRightComplex(a)
+{
+    return 0.1 * (a * a + a);
+}
+
+shouldBe("leftConstantRightComplex(1)", "0.2");
+
+function leftSimpleRightConstant(a)
+{
+    return (a * a) * 0.1;
+}
+
+shouldBe("leftSimpleRightConstant(2)", "0.4");
+
+function leftComplexRightConstant(a)
+{
+    return (a * a + a) * 0.1;
+}
+
+shouldBe("leftComplexRightConstant(1)", "0.2");
+
+function leftThisRightSimple(a)
+{
+    return this * (a * a);
+}
+
+shouldBeNaN("leftThisRightSimple(2)");
+shouldBe("leftThisRightSimple.call(2, 2)", "8");
+
+function leftThisRightComplex(a)
+{
+    return this * (a * a + a);
+}
+
+shouldBeNaN("leftThisRightComplex(2)");
+shouldBe("leftThisRightComplex.call(2, 2)", "12");
+
+function leftSimpleRightThis(a)
+{
+    return (a * a) * this;
+}
+
+shouldBeNaN("leftSimpleRightThis(2)");
+shouldBe("leftSimpleRightThis.call(2, 2)", "8");
+
+function leftComplexRightThis(a)
+{
+    return (a * a + a) * this;
+}
+
+shouldBeNaN("leftComplexRightThis(2)");
+shouldBe("leftComplexRightThis.call(2, 2)", "12");
diff --git a/deps/v8/test/webkit/number-parsing-crash-expected.txt b/deps/v8/test/webkit/number-parsing-crash-expected.txt
new file mode 100644 (file)
index 0000000..7f179bb
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests edge cases of number parsing.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS x.toString() is "0.1111111111111111"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/number-parsing-crash.js b/deps/v8/test/webkit/number-parsing-crash.js
new file mode 100644 (file)
index 0000000..bdc0596
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests edge cases of number parsing."
+);
+
+var x = 0.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;
+
+shouldBe("x.toString()", '"0.1111111111111111"');
diff --git a/deps/v8/test/webkit/number-toExponential-expected.txt b/deps/v8/test/webkit/number-toExponential-expected.txt
new file mode 100644 (file)
index 0000000..1f104ba
--- /dev/null
@@ -0,0 +1,60 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+PASS (0.0).toExponential(4) is "0.0000e+0"
+PASS (-0.0).toExponential(4) is "0.0000e+0"
+PASS (0.0).toExponential() is "0e+0"
+PASS (-0.0).toExponential() is "0e+0"
+PASS (123.456).toExponential() is "1.23456e+2"
+PASS (123.456).toExponential(0) is "1e+2"
+PASS (123.456).toExponential(null) is "1e+2"
+PASS (123.456).toExponential(false) is "1e+2"
+PASS (123.456).toExponential('foo') is "1e+2"
+PASS (123.456).toExponential(nan) is "1e+2"
+PASS (123.456).toExponential(1) is "1.2e+2"
+PASS (123.456).toExponential(true) is "1.2e+2"
+PASS (123.456).toExponential('1') is "1.2e+2"
+PASS (123.456).toExponential(2) is "1.23e+2"
+PASS (123.456).toExponential(2.9) is "1.23e+2"
+PASS (123.456).toExponential(3) is "1.235e+2"
+PASS (123.456).toExponential(5) is "1.23456e+2"
+PASS (123.456).toExponential(6) is "1.234560e+2"
+PASS (123.456).toExponential(20) is "1.23456000000000003070e+2"
+PASS (123.456).toExponential(21) threw exception RangeError: toExponential() argument must be between 0 and 20.
+PASS (123.456).toExponential(100) threw exception RangeError: toExponential() argument must be between 0 and 20.
+PASS (123.456).toExponential(101) threw exception RangeError: toExponential() argument must be between 0 and 20.
+PASS (123.456).toExponential(-1) threw exception RangeError: toExponential() argument must be between 0 and 20.
+PASS (1234.567).toExponential(posInf) threw exception RangeError: toExponential() argument must be between 0 and 20.
+PASS (1234.567).toExponential(negInf) threw exception RangeError: toExponential() argument must be between 0 and 20.
+PASS posInf.toExponential() is "Infinity"
+PASS negInf.toExponential() is "-Infinity"
+PASS nan.toExponential() is "NaN"
+PASS (0.01).toExponential() is "1e-2"
+PASS (0.1).toExponential() is "1e-1"
+PASS (0.9).toExponential() is "9e-1"
+PASS (0.9999).toExponential() is "9.999e-1"
+PASS (0.9999).toExponential(2) is "1.00e+0"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/number-toExponential.js b/deps/v8/test/webkit/number-toExponential.js
new file mode 100644 (file)
index 0000000..3e86e8e
--- /dev/null
@@ -0,0 +1,71 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+var posInf = 1/0;
+var negInf = -1/0;
+var nan = 0/0;
+
+// From Acid3, http://bugs.webkit.org/show_bug.cgi?id=16640
+shouldBeEqualToString("(0.0).toExponential(4)", "0.0000e+0");
+shouldBeEqualToString("(-0.0).toExponential(4)", "0.0000e+0");
+shouldBeEqualToString("(0.0).toExponential()", "0e+0");
+shouldBeEqualToString("(-0.0).toExponential()", "0e+0");
+// From http://bugs.webkit.org/show_bug.cgi?id=5259
+shouldBeEqualToString("(123.456).toExponential()", "1.23456e+2");
+shouldBeEqualToString("(123.456).toExponential(0)", "1e+2");
+// 0 equivilents
+shouldBeEqualToString("(123.456).toExponential(null)", "1e+2");
+shouldBeEqualToString("(123.456).toExponential(false)", "1e+2");
+shouldBeEqualToString("(123.456).toExponential('foo')", "1e+2");
+shouldBeEqualToString("(123.456).toExponential(nan)", "1e+2"); // nan is treated like 0
+
+shouldBeEqualToString("(123.456).toExponential(1)", "1.2e+2");
+// 1 equivilents
+shouldBeEqualToString("(123.456).toExponential(true)", "1.2e+2"); // just like 1
+shouldBeEqualToString("(123.456).toExponential('1')", "1.2e+2");
+
+shouldBeEqualToString("(123.456).toExponential(2)", "1.23e+2");
+shouldBeEqualToString("(123.456).toExponential(2.9)", "1.23e+2");
+shouldBeEqualToString("(123.456).toExponential(3)", "1.235e+2");
+shouldBeEqualToString("(123.456).toExponential(5)", "1.23456e+2");
+shouldBeEqualToString("(123.456).toExponential(6)", "1.234560e+2");
+shouldBeEqualToString("(123.456).toExponential(20)", "1.23456000000000003070e+2");
+
+// SpiderMonkey allows precision values 0 to 100, we only allow 0 to 20 currently
+shouldThrow("(123.456).toExponential(21)");
+shouldThrow("(123.456).toExponential(100)");
+shouldThrow("(123.456).toExponential(101)");
+shouldThrow("(123.456).toExponential(-1)");
+
+shouldThrow("(1234.567).toExponential(posInf)");
+shouldThrow("(1234.567).toExponential(negInf)");
+
+shouldBeEqualToString("posInf.toExponential()", "Infinity");
+shouldBeEqualToString("negInf.toExponential()", "-Infinity");
+shouldBeEqualToString("nan.toExponential()", "NaN");
+
+shouldBeEqualToString("(0.01).toExponential()", "1e-2");
+shouldBeEqualToString("(0.1).toExponential()", "1e-1");
+shouldBeEqualToString("(0.9).toExponential()", "9e-1");
+shouldBeEqualToString("(0.9999).toExponential()", "9.999e-1");
+shouldBeEqualToString("(0.9999).toExponential(2)", "1.00e+0");
diff --git a/deps/v8/test/webkit/numeric-compare-expected.txt b/deps/v8/test/webkit/numeric-compare-expected.txt
new file mode 100644 (file)
index 0000000..984db7a
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that compiling a numeric comparison function does not crash
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/numeric-compare.js b/deps/v8/test/webkit/numeric-compare.js
new file mode 100644 (file)
index 0000000..3334a44
--- /dev/null
@@ -0,0 +1,29 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests that compiling a numeric comparison function does not crash'
+);
+
+var a, b;
+(function () { return a - b; })();
diff --git a/deps/v8/test/webkit/numeric-conversion-expected.txt b/deps/v8/test/webkit/numeric-conversion-expected.txt
new file mode 100644 (file)
index 0000000..05c6337
--- /dev/null
@@ -0,0 +1,50 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for accuracy in numeric conversions, particularly with large or infinite values.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Number(1152921504606847105).toString() is '1152921504606847200'
+PASS parseInt('1152921504606847105').toString() is '1152921504606847200'
+PASS (- (- '1152921504606847105')).toString() is '1152921504606847200'
+PASS Number(0x1000000000000081).toString(16) is '1000000000000100'
+PASS parseInt('0x1000000000000081', 16).toString(16) is '1000000000000100'
+PASS (- (- '0x1000000000000081')).toString(16) is '1000000000000100'
+PASS Number(0100000000000000000201).toString(8) is '100000000000000000400'
+PASS parseInt('100000000000000000201', 8).toString(8) is '100000000000000000400'
+PASS (- 'infinity').toString() is 'NaN'
+PASS parseInt('1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000').toString() is 'Infinity'
+PASS parseInt('0x100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 16).toString() is 'Infinity'
+PASS parseInt('100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 8).toString() is 'Infinity'
+PASS parseInt('9007199254740992e2000').toString() is '9007199254740992'
+PASS parseInt('9007199254740992.0e2000').toString() is '9007199254740992'
+PASS parseInt(NaN) is NaN
+PASS parseInt(-Infinity) is NaN
+PASS parseInt(Infinity) is NaN
+PASS parseInt(-0.6).toString() is '0'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/numeric-conversion.js b/deps/v8/test/webkit/numeric-conversion.js
new file mode 100644 (file)
index 0000000..628a472
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks for accuracy in numeric conversions, particularly with large or infinite values."
+);
+
+shouldBe("Number(1152921504606847105).toString()", "'1152921504606847200'");
+shouldBe("parseInt('1152921504606847105').toString()", "'1152921504606847200'");
+shouldBe("(- (- '1152921504606847105')).toString()", "'1152921504606847200'");
+
+shouldBe("Number(0x1000000000000081).toString(16)", "'1000000000000100'");
+shouldBe("parseInt('0x1000000000000081', 16).toString(16)", "'1000000000000100'");
+shouldBe("(- (- '0x1000000000000081')).toString(16)", "'1000000000000100'");
+
+shouldBe("Number(0100000000000000000201).toString(8)", "'100000000000000000400'");
+shouldBe("parseInt('100000000000000000201', 8).toString(8)", "'100000000000000000400'");
+
+shouldBe("(- 'infinity').toString()", "'NaN'");
+
+shouldBe("parseInt('1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000').toString()", "'Infinity'");
+shouldBe("parseInt('0x100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 16).toString()", "'Infinity'");
+shouldBe("parseInt('100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 8).toString()", "'Infinity'");
+
+shouldBe("parseInt('9007199254740992e2000').toString()", "'9007199254740992'");
+shouldBe("parseInt('9007199254740992.0e2000').toString()", "'9007199254740992'");
+
+shouldBe("parseInt(NaN)", "NaN");
+shouldBe("parseInt(-Infinity)", "NaN");
+shouldBe("parseInt(Infinity)", "NaN");
+
+shouldBe("parseInt(-0.6).toString()", "'0'");
diff --git a/deps/v8/test/webkit/object-literal-direct-put-expected.txt b/deps/v8/test/webkit/object-literal-direct-put-expected.txt
new file mode 100644 (file)
index 0000000..46793d2
--- /dev/null
@@ -0,0 +1,41 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test ensures that properties on an object literal are put directly onto the created object, and don't call setters in the prototype chain.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS ({a:true}).a is true
+PASS ({__proto__: {a:false}, a:true}).a is true
+PASS ({__proto__: {set a() {throw 'Should not call setter'; }}, a:true}).a is true
+PASS ({__proto__: {get a() {throw 'Should not reach getter'; }}, a:true}).a is true
+PASS ({__proto__: {get a() {throw 'Should not reach getter'; }, b:true}, a:true}).b is true
+PASS ({__proto__: {__proto__: {a:false}}, a:true}).a is true
+PASS ({__proto__: {__proto__: {set a() {throw 'Should not call setter'; }}}, a:true}).a is true
+PASS ({__proto__: {__proto__: {get a() {throw 'Should not reach getter'; }}}, a:true}).a is true
+PASS ({__proto__: {__proto__: {get a() {throw 'Should not reach getter'; }, b:true}}, a:true}).b is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/object-literal-direct-put.js b/deps/v8/test/webkit/object-literal-direct-put.js
new file mode 100644 (file)
index 0000000..69c085f
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This test ensures that properties on an object literal are put directly onto the created object, and don't call setters in the prototype chain.");
+
+shouldBeTrue("({a:true}).a");
+shouldBeTrue("({__proto__: {a:false}, a:true}).a");
+shouldBeTrue("({__proto__: {set a() {throw 'Should not call setter'; }}, a:true}).a");
+shouldBeTrue("({__proto__: {get a() {throw 'Should not reach getter'; }}, a:true}).a");
+shouldBeTrue("({__proto__: {get a() {throw 'Should not reach getter'; }, b:true}, a:true}).b");
+
+shouldBeTrue("({__proto__: {__proto__: {a:false}}, a:true}).a");
+shouldBeTrue("({__proto__: {__proto__: {set a() {throw 'Should not call setter'; }}}, a:true}).a");
+shouldBeTrue("({__proto__: {__proto__: {get a() {throw 'Should not reach getter'; }}}, a:true}).a");
+shouldBeTrue("({__proto__: {__proto__: {get a() {throw 'Should not reach getter'; }, b:true}}, a:true}).b");
diff --git a/deps/v8/test/webkit/object-literal-syntax-expected.txt b/deps/v8/test/webkit/object-literal-syntax-expected.txt
new file mode 100644 (file)
index 0000000..13b3499
--- /dev/null
@@ -0,0 +1,52 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Make sure that we correctly identify parse errors in object literals
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS ({a:1, get a(){}}) threw exception SyntaxError: Object literal may not have data and accessor property with the same name.
+PASS ({a:1, set a(){}}) threw exception SyntaxError: Object literal may not have data and accessor property with the same name.
+PASS ({get a(){}, a:1}) threw exception SyntaxError: Object literal may not have data and accessor property with the same name.
+PASS ({set a(){}, a:1}) threw exception SyntaxError: Object literal may not have data and accessor property with the same name.
+PASS ({get a(){}, get a(){}}) threw exception SyntaxError: Object literal may not have multiple get/set accessors with the same name.
+PASS ({set a(){}, set a(){}}) threw exception SyntaxError: Object literal may not have multiple get/set accessors with the same name.
+PASS ({set a(){}, get a(){}, set a(){}}) threw exception SyntaxError: Object literal may not have multiple get/set accessors with the same name.
+PASS (function(){({a:1, get a(){}})}) threw exception SyntaxError: Object literal may not have data and accessor property with the same name.
+PASS (function(){({a:1, set a(){}})}) threw exception SyntaxError: Object literal may not have data and accessor property with the same name.
+PASS (function(){({get a(){}, a:1})}) threw exception SyntaxError: Object literal may not have data and accessor property with the same name.
+PASS (function(){({set a(){}, a:1})}) threw exception SyntaxError: Object literal may not have data and accessor property with the same name.
+PASS (function(){({get a(){}, get a(){}})}) threw exception SyntaxError: Object literal may not have multiple get/set accessors with the same name.
+PASS (function(){({set a(){}, set a(){}})}) threw exception SyntaxError: Object literal may not have multiple get/set accessors with the same name.
+PASS (function(){({set a(){}, get a(){}, set a(){}})}) threw exception SyntaxError: Object literal may not have multiple get/set accessors with the same name.
+PASS ({a:1, a:1, a:1}), true is true
+PASS ({get a(){}, set a(){}}), true is true
+PASS ({set a(){}, get a(){}}), true is true
+PASS (function(){({a:1, a:1, a:1})}), true is true
+PASS (function(){({get a(){}, set a(){}})}), true is true
+PASS (function(){({set a(){}, get a(){}})}), true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/object-literal-syntax.js b/deps/v8/test/webkit/object-literal-syntax.js
new file mode 100644 (file)
index 0000000..6884bec
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Make sure that we correctly identify parse errors in object literals");
+
+shouldThrow("({a:1, get a(){}})");
+shouldThrow("({a:1, set a(){}})");
+shouldThrow("({get a(){}, a:1})");
+shouldThrow("({set a(){}, a:1})");
+shouldThrow("({get a(){}, get a(){}})");
+shouldThrow("({set a(){}, set a(){}})");
+shouldThrow("({set a(){}, get a(){}, set a(){}})");
+shouldThrow("(function(){({a:1, get a(){}})})");
+shouldThrow("(function(){({a:1, set a(){}})})");
+shouldThrow("(function(){({get a(){}, a:1})})");
+shouldThrow("(function(){({set a(){}, a:1})})");
+shouldThrow("(function(){({get a(){}, get a(){}})})");
+shouldThrow("(function(){({set a(){}, set a(){}})})");
+shouldThrow("(function(){({set a(){}, get a(){}, set a(){}})})");
+shouldBeTrue("({a:1, a:1, a:1}), true");
+shouldBeTrue("({get a(){}, set a(){}}), true");
+shouldBeTrue("({set a(){}, get a(){}}), true");
+shouldBeTrue("(function(){({a:1, a:1, a:1})}), true");
+shouldBeTrue("(function(){({get a(){}, set a(){}})}), true");
+shouldBeTrue("(function(){({set a(){}, get a(){}})}), true");
diff --git a/deps/v8/test/webkit/order-of-operations-expected.txt b/deps/v8/test/webkit/order-of-operations-expected.txt
new file mode 100644 (file)
index 0000000..9316e29
--- /dev/null
@@ -0,0 +1,45 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+PASS (function(){ leftRight = ""; left() > right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() >= right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() < right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() <= right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() + right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() - right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() / right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() * right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() % right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() << right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() >> right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() >>> right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() || right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() && right(); return leftRight; })() is "Left"
+PASS (function(){ leftRight = ""; left() & right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() | right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() ^ right(); return leftRight; })() is "LeftRight"
+PASS testEvaluationOfArguments() is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/order-of-operations.js b/deps/v8/test/webkit/order-of-operations.js
new file mode 100644 (file)
index 0000000..57a7706
--- /dev/null
@@ -0,0 +1,67 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+var leftRight;
+function left() {
+    leftRight = leftRight + "Left";
+}
+
+function right() {
+    leftRight = leftRight + "Right";
+}
+
+shouldBe('(function(){ leftRight = ""; left() > right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() >= right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() < right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() <= right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() + right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() - right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() / right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() * right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() % right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() << right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() >> right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() >>> right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() || right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() && right(); return leftRight; })()', '"Left"');
+shouldBe('(function(){ leftRight = ""; left() & right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() | right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() ^ right(); return leftRight; })()', '"LeftRight"');
+
+function testEvaluationOfArguments()
+{
+    function throwPass()
+    {
+        throw "PASS";
+    }
+
+    var nonFunction = 42;
+
+    try {
+        nonFunction(throwPass());
+    } catch (e) {
+        return e == "PASS";
+    }
+}
+
+shouldBeTrue("testEvaluationOfArguments()");
diff --git a/deps/v8/test/webkit/parse-nan-expected.txt b/deps/v8/test/webkit/parse-nan-expected.txt
new file mode 100644 (file)
index 0000000..08f4ad7
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for a crash when parsing NaN. You should see the text 'NaN' below.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+NaN
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/parse-nan.js b/deps/v8/test/webkit/parse-nan.js
new file mode 100644 (file)
index 0000000..5d7d5f3
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks for a crash when parsing NaN. You should see the text 'NaN' below."
+);
+
+debug(-parseFloat("NAN(ffffeeeeeff0f)"));
diff --git a/deps/v8/test/webkit/parseFloat-expected.txt b/deps/v8/test/webkit/parseFloat-expected.txt
new file mode 100644 (file)
index 0000000..4c5a087
--- /dev/null
@@ -0,0 +1,76 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests for the parseFloat function.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS parseFloat() is NaN
+PASS parseFloat('') is NaN
+PASS parseFloat(' ') is NaN
+PASS parseFloat(' 0') is 0
+PASS parseFloat('0 ') is 0
+PASS parseFloat('x0') is NaN
+PASS parseFloat('0x') is 0
+PASS parseFloat(' 1') is 1
+PASS parseFloat('1 ') is 1
+PASS parseFloat('x1') is NaN
+PASS parseFloat('1x') is 1
+PASS parseFloat(' 2.3') is 2.3
+PASS parseFloat('2.3 ') is 2.3
+PASS parseFloat('x2.3') is NaN
+PASS parseFloat('2.3x') is 2.3
+PASS parseFloat('0x2') is 0
+PASS parseFloat('1' + nonASCIINonSpaceCharacter) is 1
+PASS parseFloat(nonASCIINonSpaceCharacter + '1') is NaN
+PASS parseFloat('1' + illegalUTF16Sequence) is 1
+PASS parseFloat(illegalUTF16Sequence + '1') is NaN
+PASS parseFloat(tab + '1') is 1
+PASS parseFloat(nbsp + '1') is 1
+PASS parseFloat(ff + '1') is 1
+PASS parseFloat(vt + '1') is 1
+PASS parseFloat(cr + '1') is 1
+PASS parseFloat(lf + '1') is 1
+PASS parseFloat(ls + '1') is 1
+PASS parseFloat(ps + '1') is 1
+PASS parseFloat(oghamSpaceMark + '1') is 1
+PASS parseFloat(mongolianVowelSeparator + '1') is 1
+PASS parseFloat(enQuad + '1') is 1
+PASS parseFloat(emQuad + '1') is 1
+PASS parseFloat(enSpace + '1') is 1
+PASS parseFloat(emSpace + '1') is 1
+PASS parseFloat(threePerEmSpace + '1') is 1
+PASS parseFloat(fourPerEmSpace + '1') is 1
+PASS parseFloat(sixPerEmSpace + '1') is 1
+PASS parseFloat(figureSpace + '1') is 1
+PASS parseFloat(punctuationSpace + '1') is 1
+PASS parseFloat(thinSpace + '1') is 1
+PASS parseFloat(hairSpace + '1') is 1
+PASS parseFloat(narrowNoBreakSpace + '1') is 1
+PASS parseFloat(mediumMathematicalSpace + '1') is 1
+PASS parseFloat(ideographicSpace + '1') is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/parseFloat.js b/deps/v8/test/webkit/parseFloat.js
new file mode 100644 (file)
index 0000000..a52539a
--- /dev/null
@@ -0,0 +1,98 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Tests for the parseFloat function.');
+
+var nonASCIINonSpaceCharacter = String.fromCharCode(0x13A0);
+var illegalUTF16Sequence = String.fromCharCode(0xD800);
+
+var tab = String.fromCharCode(9);
+var nbsp = String.fromCharCode(0xA0);
+var ff = String.fromCharCode(0xC);
+var vt = String.fromCharCode(0xB);
+var cr = String.fromCharCode(0xD);
+var lf = String.fromCharCode(0xA);
+var ls = String.fromCharCode(0x2028);
+var ps = String.fromCharCode(0x2029);
+
+var oghamSpaceMark = String.fromCharCode(0x1680);
+var mongolianVowelSeparator = String.fromCharCode(0x180E);
+var enQuad = String.fromCharCode(0x2000);
+var emQuad = String.fromCharCode(0x2001);
+var enSpace = String.fromCharCode(0x2002);
+var emSpace = String.fromCharCode(0x2003);
+var threePerEmSpace = String.fromCharCode(0x2004);
+var fourPerEmSpace = String.fromCharCode(0x2005);
+var sixPerEmSpace = String.fromCharCode(0x2006);
+var figureSpace = String.fromCharCode(0x2007);
+var punctuationSpace = String.fromCharCode(0x2008);
+var thinSpace = String.fromCharCode(0x2009);
+var hairSpace = String.fromCharCode(0x200A);
+var narrowNoBreakSpace = String.fromCharCode(0x202F);
+var mediumMathematicalSpace = String.fromCharCode(0x205F);
+var ideographicSpace = String.fromCharCode(0x3000);
+
+shouldBe("parseFloat()", "NaN");
+shouldBe("parseFloat('')", "NaN");
+shouldBe("parseFloat(' ')", "NaN");
+shouldBe("parseFloat(' 0')", "0");
+shouldBe("parseFloat('0 ')", "0");
+shouldBe("parseFloat('x0')", "NaN");
+shouldBe("parseFloat('0x')", "0");
+shouldBe("parseFloat(' 1')", "1");
+shouldBe("parseFloat('1 ')", "1");
+shouldBe("parseFloat('x1')", "NaN");
+shouldBe("parseFloat('1x')", "1");
+shouldBe("parseFloat(' 2.3')", "2.3");
+shouldBe("parseFloat('2.3 ')", "2.3");
+shouldBe("parseFloat('x2.3')", "NaN");
+shouldBe("parseFloat('2.3x')", "2.3");
+shouldBe("parseFloat('0x2')", "0");
+shouldBe("parseFloat('1' + nonASCIINonSpaceCharacter)", "1");
+shouldBe("parseFloat(nonASCIINonSpaceCharacter + '1')", "NaN");
+shouldBe("parseFloat('1' + illegalUTF16Sequence)", "1");
+shouldBe("parseFloat(illegalUTF16Sequence + '1')", "NaN");
+shouldBe("parseFloat(tab + '1')", "1");
+shouldBe("parseFloat(nbsp + '1')", "1");
+shouldBe("parseFloat(ff + '1')", "1");
+shouldBe("parseFloat(vt + '1')", "1");
+shouldBe("parseFloat(cr + '1')", "1");
+shouldBe("parseFloat(lf + '1')", "1");
+shouldBe("parseFloat(ls + '1')", "1");
+shouldBe("parseFloat(ps + '1')", "1");
+shouldBe("parseFloat(oghamSpaceMark + '1')", "1");
+shouldBe("parseFloat(mongolianVowelSeparator + '1')", "1");
+shouldBe("parseFloat(enQuad + '1')", "1");
+shouldBe("parseFloat(emQuad + '1')", "1");
+shouldBe("parseFloat(enSpace + '1')", "1");
+shouldBe("parseFloat(emSpace + '1')", "1");
+shouldBe("parseFloat(threePerEmSpace + '1')", "1");
+shouldBe("parseFloat(fourPerEmSpace + '1')", "1");
+shouldBe("parseFloat(sixPerEmSpace + '1')", "1");
+shouldBe("parseFloat(figureSpace + '1')", "1");
+shouldBe("parseFloat(punctuationSpace + '1')", "1");
+shouldBe("parseFloat(thinSpace + '1')", "1");
+shouldBe("parseFloat(hairSpace + '1')", "1");
+shouldBe("parseFloat(narrowNoBreakSpace + '1')", "1");
+shouldBe("parseFloat(mediumMathematicalSpace + '1')", "1");
+shouldBe("parseFloat(ideographicSpace + '1')", "1");
diff --git a/deps/v8/test/webkit/parseInt-expected.txt b/deps/v8/test/webkit/parseInt-expected.txt
new file mode 100644 (file)
index 0000000..6a644a0
--- /dev/null
@@ -0,0 +1,69 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests for the parseInt function.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS parseInt('123') is 123
+PASS parseInt('123x4') is 123
+PASS parseInt('-123') is -123
+PASS parseInt('0x123') is 0x123
+PASS parseInt('0x123x4') is 0x123
+PASS parseInt('-0x123x4') is -0x123
+PASS parseInt('-') is Number.NaN
+PASS parseInt('0x') is Number.NaN
+PASS parseInt('-0x') is Number.NaN
+PASS parseInt('123', undefined) is 123
+PASS parseInt('123', null) is 123
+PASS parseInt('123', 0) is 123
+PASS parseInt('123', 10) is 123
+PASS parseInt('123', 16) is 0x123
+PASS parseInt('0x123', undefined) is 0x123
+PASS parseInt('0x123', null) is 0x123
+PASS parseInt('0x123', 0) is 0x123
+PASS parseInt('0x123', 10) is 0
+PASS parseInt('0x123', 16) is 0x123
+PASS parseInt(Math.pow(10, 20)) is 100000000000000000000
+PASS parseInt(Math.pow(10, 21)) is 1
+PASS parseInt(Math.pow(10, -6)) is 0
+PASS parseInt(Math.pow(10, -7)) is 1
+PASS parseInt(-Math.pow(10, 20)) is -100000000000000000000
+PASS parseInt(-Math.pow(10, 21)) is -1
+PASS parseInt(-Math.pow(10, -6)) is -0
+PASS parseInt(-Math.pow(10, -7)) is -1
+PASS parseInt('0') is 0
+PASS parseInt('-0') is -0
+PASS parseInt(0) is 0
+PASS parseInt(-0) is 0
+PASS parseInt(2147483647) is 2147483647
+PASS parseInt(2147483648) is 2147483648
+PASS parseInt('2147483647') is 2147483647
+PASS parseInt('2147483648') is 2147483648
+PASS state = null; try { parseInt('123', throwingRadix); } catch (e) {} state; is "throwingRadix"
+PASS state = null; try { parseInt(throwingString, throwingRadix); } catch (e) {} state; is "throwingString"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/parseInt.js b/deps/v8/test/webkit/parseInt.js
new file mode 100644 (file)
index 0000000..a59c8f0
--- /dev/null
@@ -0,0 +1,77 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Tests for the parseInt function.');
+
+// Simple hex & dec integer values.
+shouldBe("parseInt('123')", '123');
+shouldBe("parseInt('123x4')", '123');
+shouldBe("parseInt('-123')", '-123');
+shouldBe("parseInt('0x123')", '0x123');
+shouldBe("parseInt('0x123x4')", '0x123');
+shouldBe("parseInt('-0x123x4')", '-0x123');
+shouldBe("parseInt('-')", 'Number.NaN');
+shouldBe("parseInt('0x')", 'Number.NaN');
+shouldBe("parseInt('-0x')", 'Number.NaN');
+
+// These call default to base 10, unless radix is explicitly 16.
+shouldBe("parseInt('123', undefined)", '123');
+shouldBe("parseInt('123', null)", '123');
+shouldBe("parseInt('123', 0)", '123');
+shouldBe("parseInt('123', 10)", '123');
+shouldBe("parseInt('123', 16)", '0x123');
+// These call default to base 16, unless radix is explicitly 10.
+shouldBe("parseInt('0x123', undefined)", '0x123');
+shouldBe("parseInt('0x123', null)", '0x123');
+shouldBe("parseInt('0x123', 0)", '0x123');
+shouldBe("parseInt('0x123', 10)", '0');
+shouldBe("parseInt('0x123', 16)", '0x123');
+
+// Test edge cases for the Number.toString exponential ranges.
+shouldBe("parseInt(Math.pow(10, 20))", '100000000000000000000');
+shouldBe("parseInt(Math.pow(10, 21))", '1');
+shouldBe("parseInt(Math.pow(10, -6))", '0');
+shouldBe("parseInt(Math.pow(10, -7))", '1');
+shouldBe("parseInt(-Math.pow(10, 20))", '-100000000000000000000');
+shouldBe("parseInt(-Math.pow(10, 21))", '-1');
+shouldBe("parseInt(-Math.pow(10, -6))", '-0');
+shouldBe("parseInt(-Math.pow(10, -7))", '-1');
+
+// Test correct handling for -0.
+shouldBe("parseInt('0')", '0');
+shouldBe("parseInt('-0')", '-0');
+shouldBe("parseInt(0)", '0');
+shouldBe("parseInt(-0)", '0');
+
+// Test edge cases of our optimized int handling.
+shouldBe("parseInt(2147483647)", '2147483647');
+shouldBe("parseInt(2147483648)", '2147483648');
+shouldBe("parseInt('2147483647')", '2147483647');
+shouldBe("parseInt('2147483648')", '2147483648');
+
+// Add test cases where the ToString/ToInt32 conversions throw.
+var state;
+var throwingRadix = { valueOf: function(){ state = "throwingRadix"; throw null; } };
+var throwingString = { toString: function(){ state = "throwingString"; throw null; } };
+shouldBe("state = null; try { parseInt('123', throwingRadix); } catch (e) {} state;", '"throwingRadix"');
+shouldBe("state = null; try { parseInt(throwingString, throwingRadix); } catch (e) {} state;", '"throwingString"');
diff --git a/deps/v8/test/webkit/parser-high-byte-character-expected.txt b/deps/v8/test/webkit/parser-high-byte-character-expected.txt
new file mode 100644 (file)
index 0000000..e40cdd5
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that high-byte characters in comments do not crash or cause parser errors.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/parser-high-byte-character.js b/deps/v8/test/webkit/parser-high-byte-character.js
new file mode 100644 (file)
index 0000000..4e500fa
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that high-byte characters in comments do not crash or cause parser errors."
+);
+
+// Some high-byte characters: ¸´Ñ¡»ò²»¸´Ñ¡ËùÓеÄÁбí¶àÑ¡¿ò
+function runTest(_a, throws)
+{
+    testPassed();
+}
+
+/*
+Over 1024 bytes to ensure precompilation caching is triggered.
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXX
+*/
diff --git a/deps/v8/test/webkit/parser-xml-close-comment-expected.txt b/deps/v8/test/webkit/parser-xml-close-comment-expected.txt
new file mode 100644 (file)
index 0000000..6f9716b
--- /dev/null
@@ -0,0 +1,41 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure correct handling of --> as a single line comment when at the beginning of a line
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 'should be a syntax error' --> threw exception SyntaxError: Unexpected end of input.
+PASS /**/ 1 --> threw exception SyntaxError: Unexpected end of input.
+PASS 1 /**/ --> threw exception SyntaxError: Unexpected end of input.
+PASS 1/*
+*/--> threw exception SyntaxError: Unexpected token >.
+PASS --> is undefined.
+PASS /**/--> is undefined.
+PASS /*
+*/--> is undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/parser-xml-close-comment.js b/deps/v8/test/webkit/parser-xml-close-comment.js
new file mode 100644 (file)
index 0000000..d3f458f
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure correct handling of --> as a single line comment when at the beginning of a line");
+
+shouldThrow("'should be a syntax error' -->");
+shouldThrow("/**/ 1 -->");
+shouldThrow("1 /**/ -->");
+shouldThrow("1/*\n*/-->");
+
+shouldBeUndefined("-->");
+shouldBeUndefined("/**/-->");
+shouldBeUndefined("/*\n*/-->");
diff --git a/deps/v8/test/webkit/polymorphic-construct-expected.txt b/deps/v8/test/webkit/polymorphic-construct-expected.txt
new file mode 100644 (file)
index 0000000..34f8839
--- /dev/null
@@ -0,0 +1,44 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that polymorphic construction works correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS construct(Foo).field is 'foo'
+PASS construct(Foo).field is 'foo'
+PASS construct(Foo).field is 'foo'
+PASS construct(Foo).field is 'foo'
+PASS construct(Bar).field is 'bar'
+PASS construct(Baz).field is 'baz'
+PASS construct(Foo).field is 'foo'
+PASS construct(Bar).field is 'bar'
+PASS construct(Baz).field is 'baz'
+PASS construct(Foo).field is 'foo'
+PASS construct(Bar).field is 'bar'
+PASS construct(Baz).field is 'baz'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/polymorphic-construct.js b/deps/v8/test/webkit/polymorphic-construct.js
new file mode 100644 (file)
index 0000000..1a447b4
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that polymorphic construction works correctly."
+);
+
+function Foo() {
+    this.field = "foo";
+}
+
+function Bar() {
+    this.field = "bar";
+}
+
+function Baz() {
+    this.field = "baz";
+}
+
+function construct(what) {
+    return new what();
+}
+
+for (var i = 0; i < 3; ++i) {
+    shouldBe("construct(Foo).field", "'foo'");
+}
+
+for (var i = 0; i < 3; ++i) {
+    shouldBe("construct(Foo).field", "'foo'");
+    shouldBe("construct(Bar).field", "'bar'");
+    shouldBe("construct(Baz).field", "'baz'");
+}
diff --git a/deps/v8/test/webkit/pretty-print-expected.txt b/deps/v8/test/webkit/pretty-print-expected.txt
new file mode 100644 (file)
index 0000000..5362f9f
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that regexps, strings with special characters, object literals with non-identifier names, and array literals are pretty-printed correctly
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS g().toString() is ['a', 'b', 'c'].toString()
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/pretty-print.js b/deps/v8/test/webkit/pretty-print.js
new file mode 100644 (file)
index 0000000..67e4065
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that regexps, strings with special characters, object literals with non-identifier names, and array literals are pretty-printed correctly"
+);
+
+function f() {
+    var re = /test/g;
+    var s = '\n\r\\';
+}
+
+function g() {
+    var o = {"#000": 1};
+    return ["a", "b", "c"];
+}
+
+eval(f.toString());
+
+eval(g.toString());
+shouldBe("g().toString()", "['a', 'b', 'c'].toString()");
diff --git a/deps/v8/test/webkit/preventExtensions-expected.txt b/deps/v8/test/webkit/preventExtensions-expected.txt
new file mode 100644 (file)
index 0000000..196b0a8
--- /dev/null
@@ -0,0 +1,66 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks whether various seal/freeze/preventExtentions work on a regular object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS (new inextensible).prototypeExists is true
+PASS (new sealed).prototypeExists is true
+PASS (new frozen).prototypeExists is true
+PASS test(obj()) is "(b:4)(c:3)E"
+PASS test(preventExtensions(obj())) is "(b:4)"
+PASS test(seal(obj())) is "(a:1)(b:4)S"
+PASS test(freeze(obj())) is "(a:1)(b:2)SF"
+PASS Object.preventExtensions(Math.sin) is Math.sin
+PASS var o = {}; Object.preventExtensions(o); o.__proto__ = { newProp: "Should not see this" }; o.newProp; threw exception TypeError: #<Object> is not extensible.
+PASS "use strict"; var o = {}; Object.preventExtensions(o); o.__proto__ = { newProp: "Should not see this" }; o.newProp; threw exception TypeError: #<Object> is not extensible.
+PASS Object.preventExtensions(Math); Math.sqrt(4) is 2
+PASS var arr = Object.preventExtensions([]); arr[0] = 42; arr[0] is undefined.
+PASS var arr = Object.preventExtensions([]); arr[0] = 42; arr.length is 0
+PASS "use strict"; var arr = Object.preventExtensions([]); arr[0] = 42; arr[0] threw exception TypeError: Can't add property 0, object is not extensible.
+PASS obj.foo is 1
+PASS Object.isFrozen(func) is true
+PASS func.prototype === 42 is false
+PASS Object.getOwnPropertyDescriptor(func, "prototype").writable is false
+PASS Object.isFrozen(strictFunc) is true
+PASS strictFunc.prototype === 42 is false
+PASS Object.getOwnPropertyDescriptor(strictFunc, "prototype").writable is false
+PASS Object.isFrozen(array) is true
+PASS array[0] is 0
+PASS Object.getOwnPropertyDescriptor(array, "length").writable is false
+PASS Object.isFrozen(args) is true
+PASS args[0] is 0
+PASS Object.getOwnPropertyDescriptor(args, "length").writable is false
+PASS Object.getOwnPropertyDescriptor(args, "callee").writable is false
+PASS preventExtensionsFreezeIsFrozen(function foo(){}) is true
+PASS preventExtensionsFreezeIsFrozen(function foo(){ "use strict"; }) is true
+PASS preventExtensionsFreezeIsFrozen([0,1,2]) is true
+PASS preventExtensionsFreezeIsFrozen((function(){ return arguments; })(0,1,2)) is true
+PASS Object.getOwnPropertyDescriptor(freeze({0:0}), 0).configurable is false
+PASS Object.getOwnPropertyDescriptor(freeze({10000001:0}), 10000001).configurable is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/preventExtensions.js b/deps/v8/test/webkit/preventExtensions.js
new file mode 100644 (file)
index 0000000..ec92235
--- /dev/null
@@ -0,0 +1,157 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks whether various seal/freeze/preventExtentions work on a regular object."
+);
+
+function obj()
+{
+    // Add an accessor property to check 'isFrozen' returns the correct result for objects with accessors.
+    return Object.defineProperty({ a: 1, b: 2 }, 'g', { get: function() { return "getter"; } });
+}
+
+function test(obj)
+{
+    obj.c =3;
+    obj.b =4;
+    delete obj.a;
+
+    var result = "";
+    for (key in obj)
+        result += ("(" + key + ":" + obj[key] + ")");
+    if (Object.isSealed(obj))
+        result += "S";
+    if (Object.isFrozen(obj))
+        result += "F";
+    if (Object.isExtensible(obj))
+        result += "E";
+    return result;
+}
+
+function seal(obj)
+{
+    Object.seal(obj);
+    return obj;
+}
+
+function freeze(obj)
+{
+    Object.freeze(obj);
+    return obj;
+}
+
+function preventExtensions(obj)
+{
+    Object.preventExtensions(obj);
+    return obj;
+}
+
+function inextensible(){}
+function sealed(){}
+function frozen(){};
+preventExtensions(inextensible);
+seal(sealed);
+freeze(frozen);
+new inextensible;
+new sealed;
+new frozen;
+inextensible.prototype.prototypeExists = true;
+sealed.prototype.prototypeExists = true;
+frozen.prototype.prototypeExists = true;
+
+shouldBeTrue("(new inextensible).prototypeExists");
+shouldBeTrue("(new sealed).prototypeExists");
+shouldBeTrue("(new frozen).prototypeExists");
+
+shouldBe('test(obj())', '"(b:4)(c:3)E"'); // extensible, can delete a, can modify b, and can add c
+shouldBe('test(preventExtensions(obj()))', '"(b:4)"'); // <nothing>, can delete a, can modify b, and CANNOT add c
+shouldBe('test(seal(obj()))', '"(a:1)(b:4)S"'); // sealed, CANNOT delete a, can modify b, and CANNOT add c
+shouldBe('test(freeze(obj()))', '"(a:1)(b:2)SF"'); // sealed and frozen, CANNOT delete a, CANNOT modify b, and CANNOT add c
+
+// check that we can preventExtensions on a host function.
+shouldBe('Object.preventExtensions(Math.sin)', 'Math.sin');
+
+shouldThrow('var o = {}; Object.preventExtensions(o); o.__proto__ = { newProp: "Should not see this" }; o.newProp;');
+shouldThrow('"use strict"; var o = {}; Object.preventExtensions(o); o.__proto__ = { newProp: "Should not see this" }; o.newProp;');
+
+// check that we can still access static properties on an object after calling preventExtensions.
+shouldBe('Object.preventExtensions(Math); Math.sqrt(4)', '2');
+
+// Should not be able to add properties to a preventExtensions array.
+shouldBeUndefined('var arr = Object.preventExtensions([]); arr[0] = 42; arr[0]');
+shouldBe('var arr = Object.preventExtensions([]); arr[0] = 42; arr.length', '0');
+// In strict mode, this throws.
+shouldThrow('"use strict"; var arr = Object.preventExtensions([]); arr[0] = 42; arr[0]');
+
+// A read-only property on the prototype should prevent a [[Put]] .
+function Constructor() {}
+Constructor.prototype.foo = 1;
+Object.freeze(Constructor.prototype);
+var obj = new Constructor();
+obj.foo = 2;
+shouldBe('obj.foo', '1');
+
+// Check that freezing a function works correctly.
+var func = freeze(function foo(){});
+shouldBeTrue('Object.isFrozen(func)')
+func.prototype = 42;
+shouldBeFalse('func.prototype === 42');
+shouldBeFalse('Object.getOwnPropertyDescriptor(func, "prototype").writable')
+
+// Check that freezing a strict function works correctly.
+var strictFunc = freeze(function foo(){ "use strict"; });
+shouldBeTrue('Object.isFrozen(strictFunc)')
+strictFunc.prototype = 42;
+shouldBeFalse('strictFunc.prototype === 42');
+shouldBeFalse('Object.getOwnPropertyDescriptor(strictFunc, "prototype").writable')
+
+// Check that freezing array objects works correctly.
+var array = freeze([0,1,2]);
+shouldBeTrue('Object.isFrozen(array)')
+array[0] = 3;
+shouldBe('array[0]', '0');
+shouldBeFalse('Object.getOwnPropertyDescriptor(array, "length").writable')
+
+// Check that freezing arguments objects works correctly.
+var args = freeze((function(){ return arguments; })(0,1,2));
+shouldBeTrue('Object.isFrozen(args)')
+args[0] = 3;
+shouldBe('args[0]', '0');
+shouldBeFalse('Object.getOwnPropertyDescriptor(args, "length").writable')
+shouldBeFalse('Object.getOwnPropertyDescriptor(args, "callee").writable')
+
+// Check that freeze still works if preventExtensions has been called on the object.
+function preventExtensionsFreezeIsFrozen(x)
+{
+    Object.preventExtensions(x);
+    Object.freeze(x);
+    return Object.isFrozen(x);
+}
+shouldBeTrue('preventExtensionsFreezeIsFrozen(function foo(){})')
+shouldBeTrue('preventExtensionsFreezeIsFrozen(function foo(){ "use strict"; })')
+shouldBeTrue('preventExtensionsFreezeIsFrozen([0,1,2])')
+shouldBeTrue('preventExtensionsFreezeIsFrozen((function(){ return arguments; })(0,1,2))')
+
+shouldBeFalse('Object.getOwnPropertyDescriptor(freeze({0:0}), 0).configurable');
+shouldBeFalse('Object.getOwnPropertyDescriptor(freeze({10000001:0}), 10000001).configurable');
diff --git a/deps/v8/test/webkit/primitive-method-this-expected.txt b/deps/v8/test/webkit/primitive-method-this-expected.txt
new file mode 100644 (file)
index 0000000..99be8e0
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that methods called directly on primitive types get the wrapper, not the primitive, as the 'this' object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS (1).thisType() is 'object'
+PASS (2.3).thisType() is 'object'
+PASS 'xxx'.thisType() is 'object'
+PASS (false).thisType() is 'object'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/primitive-method-this.js b/deps/v8/test/webkit/primitive-method-this.js
new file mode 100644 (file)
index 0000000..ffffdd7
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+
+"This test checks that methods called directly on primitive types get the wrapper, not the primitive, as the 'this' object."
+
+);
+
+
+String.prototype.thisType = function() { return typeof this; };
+Number.prototype.thisType = function() { return typeof this; };
+Boolean.prototype.thisType = function() { return typeof this; };
+
+shouldBe("(1).thisType()", "'object'");
+shouldBe("(2.3).thisType()", "'object'");
+shouldBe("'xxx'.thisType()", "'object'");
+shouldBe("(false).thisType()", "'object'");
diff --git a/deps/v8/test/webkit/property-getters-and-setters-expected.txt b/deps/v8/test/webkit/property-getters-and-setters-expected.txt
new file mode 100644 (file)
index 0000000..0f2f4b6
--- /dev/null
@@ -0,0 +1,65 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This performs a number of different tests on JavaScript getters and setters.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+the get set object declaration syntax
+PASS o1.b is 8
+PASS o1.b is 11
+__defineGetter__ and __defineSetter__
+PASS o2.b is 8
+PASS o2.b is 11
+Setting a value without having a setter
+PASS o3.x = 10; o3.x is 42
+Getting a value without having a getter
+PASS o4.x is undefined.
+__lookupGetter__ and __lookupSetter__
+PASS o4.__lookupGetter__('b') is getB
+PASS o4.__lookupSetter__('b') is setB
+__defineGetter__ and __defineSetter__ with various invalid arguments
+PASS o5.__defineSetter__('a', null) threw exception TypeError: Object.prototype.__defineSetter__: Expecting function.
+PASS o5.__defineSetter__('a', o5) threw exception TypeError: Object.prototype.__defineSetter__: Expecting function.
+PASS o5.__defineGetter__('a', null) threw exception TypeError: Object.prototype.__defineGetter__: Expecting function.
+PASS o5.__defineGetter__('a', o5) threw exception TypeError: Object.prototype.__defineGetter__: Expecting function.
+setters and getters with exceptions
+PASS x = o6.x threw exception Exception in get.
+PASS x is 0
+PASS o6.x = 42 threw exception Exception in set.
+Defining a setter should also define a getter for the same property which returns undefined. Thus, a getter defined on the prototype should not be called.
+PASS o7.x is undefined.
+If an object has a property and its prototype has a setter function for that property, then setting the property should set the property directly and not call the setter function.
+PASS o8.numSets is 0
+PASS typeof testObj.getter is 'string'
+the get set with string property name
+PASS o9.b is 8
+PASS o9.b is 11
+the get set with numeric property name
+PASS o10[42] is 8
+PASS o10[42] is 11
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/property-getters-and-setters.js b/deps/v8/test/webkit/property-getters-and-setters.js
new file mode 100644 (file)
index 0000000..335d872
--- /dev/null
@@ -0,0 +1,104 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This performs a number of different tests on JavaScript getters and setters."
+);
+
+debug("the get set object declaration syntax");
+var o1 = { 'a':7, get b() { return this.a + 1 }, set b(x) { this.a = x } }
+shouldBe("o1.b", "8");
+o1.b = 10;
+shouldBe("o1.b", "11");
+
+debug("__defineGetter__ and __defineSetter__");
+var o2 = new Object()
+o2.a = 7;
+o2.__defineGetter__('b', function getB() { return this.a + 1} )
+o2.__defineSetter__('b', function setB(x) { this.a = x})
+shouldBe("o2.b", "8");
+o2.b = 10;
+shouldBe("o2.b", "11");
+
+debug("Setting a value without having a setter");
+var o3 = { get x() { return 42; } }
+shouldBe("o3.x = 10; o3.x", "42");
+
+debug("Getting a value without having a getter");
+var o4 = { set x(y) { }}
+shouldBeUndefined("o4.x");
+
+debug("__lookupGetter__ and __lookupSetter__");
+var o4 = new Object()
+function getB() { return this.a }
+function setB(x) { this.a = x }
+o4.__defineGetter__('b', getB)
+o4.__defineSetter__('b', setB)
+
+shouldBe("o4.__lookupGetter__('b')", "getB");
+shouldBe("o4.__lookupSetter__('b')", "setB");
+
+debug("__defineGetter__ and __defineSetter__ with various invalid arguments");
+var numExceptions = 0;
+var o5 = new Object();
+shouldThrow("o5.__defineSetter__('a', null)");
+shouldThrow("o5.__defineSetter__('a', o5)");
+shouldThrow("o5.__defineGetter__('a', null)");
+shouldThrow("o5.__defineGetter__('a', o5)");
+
+debug("setters and getters with exceptions");
+var o6 = { get x() { throw 'Exception in get'}, set x(f) { throw 'Exception in set'}}
+var x = 0;
+var numExceptions = 0;
+shouldThrow("x = o6.x");
+shouldBe("x", "0");
+shouldThrow("o6.x = 42");
+
+debug("Defining a setter should also define a getter for the same property which returns undefined. Thus, a getter defined on the prototype should not be called.");
+o7 = { 'a':7, set x(b) { this.a = b; }}
+o7.prototype = { get x() { return 42; }}
+shouldBeUndefined("o7.x")
+
+debug("If an object has a property and its prototype has a setter function for that property, then setting the property should set the property directly and not call the setter function.");
+var o8 = new Object()
+o8.numSets = 0;
+o8.x = 10;
+o8.__proto__.__defineSetter__('x', function() { this.numSets++; })
+o8.x = 20;
+shouldBe("o8.numSets", "0");
+
+({getter:"foo", b:"bar"});
+testObj=({get getter(){return 'getter was called.'}, b: 'bar'})
+shouldBe("typeof testObj.getter", "'string'");
+
+debug("the get set with string property name");
+var o9 = { 'a':7, get 'b'() { return this.a + 1 }, set 'b'(x) { this.a = x } }
+shouldBe("o9.b", "8");
+o9.b = 10;
+shouldBe("o9.b", "11");
+
+debug("the get set with numeric property name");
+var o10 = { 'a':7, get 42() { return this.a + 1 }, set 42(x) { this.a = x } }
+shouldBe("o10[42]", "8");
+o10[42] = 10;
+shouldBe("o10[42]", "11");
diff --git a/deps/v8/test/webkit/property-iteration-expected.txt b/deps/v8/test/webkit/property-iteration-expected.txt
new file mode 100644 (file)
index 0000000..edf3770
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests ordering of static properties.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS arrayEqual(before, after) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/property-iteration.js b/deps/v8/test/webkit/property-iteration.js
new file mode 100644 (file)
index 0000000..af7984e
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This tests ordering of static properties.");
+
+function arrayEqual(a,b)
+{
+    if (a.length != b.length)
+        return false;
+    for (var i in a)
+        if (a[i] !== b[i])
+            return false;
+    return true;
+}
+
+// Assigning to 'Math.sin' should not change iteration order of properties.
+var before = Object.getOwnPropertyNames(Math);
+Math.sin = 42;
+var after = Object.getOwnPropertyNames(Math);
+
+shouldBeTrue('arrayEqual(before, after)');
+
+successfullyParsed = true;
diff --git a/deps/v8/test/webkit/propertyIsEnumerable-expected.txt b/deps/v8/test/webkit/propertyIsEnumerable-expected.txt
new file mode 100644 (file)
index 0000000..e3fd215
--- /dev/null
@@ -0,0 +1,40 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that propertyIsEnumerable works according to the ECMA spec.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS a.propertyIsEnumerable('length') is false
+PASS a.propertyIsEnumerable ('foo') is true
+PASS a.propertyIsEnumerable ('non-existant') is false
+PASS global.propertyIsEnumerable ('aVarDecl') is true
+PASS global.propertyIsEnumerable ('aFunctionDecl') is true
+PASS global.propertyIsEnumerable ('Math') is false
+PASS global.propertyIsEnumerable ('NaN') is false
+PASS global.propertyIsEnumerable ('undefined') is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/propertyIsEnumerable.js b/deps/v8/test/webkit/propertyIsEnumerable.js
new file mode 100644 (file)
index 0000000..e6dc22f
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that propertyIsEnumerable works according to the ECMA spec."
+);
+
+a = new Array();
+a.foo='bar'
+
+var aVarDecl;
+function aFunctionDecl(){}
+var global = this;
+shouldBeFalse("a.propertyIsEnumerable('length')");
+shouldBeTrue("a.propertyIsEnumerable ('foo')");
+shouldBeFalse("a.propertyIsEnumerable ('non-existant')");
+
+shouldBeTrue("global.propertyIsEnumerable ('aVarDecl')");
+shouldBeTrue("global.propertyIsEnumerable ('aFunctionDecl')");
+shouldBeFalse("global.propertyIsEnumerable ('Math')");
+shouldBeFalse("global.propertyIsEnumerable ('NaN')");
+shouldBeFalse("global.propertyIsEnumerable ('undefined')");
diff --git a/deps/v8/test/webkit/prototypes-expected.txt b/deps/v8/test/webkit/prototypes-expected.txt
new file mode 100644 (file)
index 0000000..c2c35b1
--- /dev/null
@@ -0,0 +1,90 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test prototypes of various objects and the various means to access them.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS ('').__proto__ is String.prototype
+PASS (0).__proto__ is Number.prototype
+PASS ([]).__proto__ is Array.prototype
+PASS ({}).__proto__ is Object.prototype
+PASS (new Date).__proto__ is Date.prototype
+PASS (new Number).__proto__ is Number.prototype
+PASS (new Object).__proto__ is Object.prototype
+PASS (new String).__proto__ is String.prototype
+PASS Array.prototype.__proto__ is Object.prototype
+PASS Date.prototype.__proto__ is Object.prototype
+PASS Number.prototype.__proto__ is Object.prototype
+PASS Object.prototype.__proto__ is null
+PASS String.prototype.__proto__ is Object.prototype
+PASS Array.__proto__ is Object.__proto__
+PASS Date.__proto__ is Object.__proto__
+PASS Number.__proto__ is Object.__proto__
+PASS String.__proto__ is Object.__proto__
+PASS Object.getPrototypeOf('') threw exception TypeError: Object.getPrototypeOf called on non-object.
+PASS Object.getPrototypeOf(0) threw exception TypeError: Object.getPrototypeOf called on non-object.
+PASS Object.getPrototypeOf([]) is Array.prototype
+PASS Object.getPrototypeOf({}) is Object.prototype
+PASS Object.getPrototypeOf(new Date) is Date.prototype
+PASS Object.getPrototypeOf(new Number) is Number.prototype
+PASS Object.getPrototypeOf(new Object) is Object.prototype
+PASS Object.getPrototypeOf(new String) is String.prototype
+PASS Object.getPrototypeOf(Array.prototype) is Object.prototype
+PASS Object.getPrototypeOf(Date.prototype) is Object.prototype
+PASS Object.getPrototypeOf(Number.prototype) is Object.prototype
+PASS Object.getPrototypeOf(Object.prototype) is null
+PASS Object.getPrototypeOf(String.prototype) is Object.prototype
+PASS Object.getPrototypeOf(Array) is Object.__proto__
+PASS Object.getPrototypeOf(Date) is Object.__proto__
+PASS Object.getPrototypeOf(Number) is Object.__proto__
+PASS Object.getPrototypeOf(String) is Object.__proto__
+PASS String.prototype.isPrototypeOf('') is false
+PASS Number.prototype.isPrototypeOf(0) is false
+PASS Array.prototype.isPrototypeOf([]) is true
+PASS Object.prototype.isPrototypeOf({}) is true
+PASS Date.prototype.isPrototypeOf(new Date) is true
+PASS Number.prototype.isPrototypeOf(new Number) is true
+PASS Object.prototype.isPrototypeOf(new Object) is true
+PASS String.prototype.isPrototypeOf(new String) is true
+PASS Object.prototype.isPrototypeOf(Array.prototype) is true
+PASS Object.prototype.isPrototypeOf(Date.prototype) is true
+PASS Object.prototype.isPrototypeOf(Number.prototype) is true
+PASS Object.prototype.isPrototypeOf(String.prototype) is true
+PASS Object.__proto__.isPrototypeOf(Array) is true
+PASS Object.__proto__.isPrototypeOf(Date) is true
+PASS Object.__proto__.isPrototypeOf(Number) is true
+PASS Object.__proto__.isPrototypeOf(String) is true
+PASS var wasSet = false; var o = { }; o.__defineGetter__("__proto__", function() { wasSet = true }); o.__proto__; wasSet; is true
+PASS var wasSet = false; var o = { }; o.__defineSetter__("__proto__", function() { wasSet = true }); o.__proto__ = {}; wasSet; is true
+PASS var wasSet = false; var o = { }; Object.defineProperty(o, "__proto__", { "get": function() { wasSet = true } }); o.__proto__; wasSet; is true
+PASS var wasSet = false; var o = { }; Object.defineProperty(o, "__proto__", { "__proto__": function(x) { wasSet = true } }); o.__proto__ = {}; wasSet; is false
+PASS var o = {}; o.__proto__ = { x:true }; o.x is true
+PASS var o = {}; o.__proto__ = { x:true }; o.hasOwnProperty('__proto__') is false
+PASS var o = {}; o.__proto__ = { x:true }; o.x is undefined.
+PASS var o = {}; o.__proto__ = { x:true }; o.hasOwnProperty('__proto__') is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/prototypes.js b/deps/v8/test/webkit/prototypes.js
new file mode 100644 (file)
index 0000000..26ae286
--- /dev/null
@@ -0,0 +1,91 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test prototypes of various objects and the various means to access them.'
+);
+
+shouldBe("('').__proto__", "String.prototype");
+shouldBe("(0).__proto__", "Number.prototype");
+shouldBe("([]).__proto__", "Array.prototype");
+shouldBe("({}).__proto__", "Object.prototype");
+shouldBe("(new Date).__proto__", "Date.prototype");
+shouldBe("(new Number).__proto__", "Number.prototype");
+shouldBe("(new Object).__proto__", "Object.prototype");
+shouldBe("(new String).__proto__", "String.prototype");
+shouldBe("Array.prototype.__proto__", "Object.prototype");
+shouldBe("Date.prototype.__proto__", "Object.prototype");
+shouldBe("Number.prototype.__proto__", "Object.prototype");
+shouldBe("Object.prototype.__proto__", "null");
+shouldBe("String.prototype.__proto__", "Object.prototype");
+shouldBe("Array.__proto__", "Object.__proto__");
+shouldBe("Date.__proto__", "Object.__proto__");
+shouldBe("Number.__proto__", "Object.__proto__");
+shouldBe("String.__proto__", "Object.__proto__");
+
+shouldThrow("Object.getPrototypeOf('')");
+shouldThrow("Object.getPrototypeOf(0)");
+shouldBe("Object.getPrototypeOf([])", "Array.prototype");
+shouldBe("Object.getPrototypeOf({})", "Object.prototype");
+shouldBe("Object.getPrototypeOf(new Date)", "Date.prototype");
+shouldBe("Object.getPrototypeOf(new Number)", "Number.prototype");
+shouldBe("Object.getPrototypeOf(new Object)", "Object.prototype");
+shouldBe("Object.getPrototypeOf(new String)", "String.prototype");
+shouldBe("Object.getPrototypeOf(Array.prototype)", "Object.prototype");
+shouldBe("Object.getPrototypeOf(Date.prototype)", "Object.prototype");
+shouldBe("Object.getPrototypeOf(Number.prototype)", "Object.prototype");
+shouldBe("Object.getPrototypeOf(Object.prototype)", "null");
+shouldBe("Object.getPrototypeOf(String.prototype)", "Object.prototype");
+shouldBe("Object.getPrototypeOf(Array)", "Object.__proto__");
+shouldBe("Object.getPrototypeOf(Date)", "Object.__proto__");
+shouldBe("Object.getPrototypeOf(Number)", "Object.__proto__");
+shouldBe("Object.getPrototypeOf(String)", "Object.__proto__");
+
+shouldBeFalse("String.prototype.isPrototypeOf('')");
+shouldBeFalse("Number.prototype.isPrototypeOf(0)");
+shouldBeTrue("Array.prototype.isPrototypeOf([])");
+shouldBeTrue("Object.prototype.isPrototypeOf({})");
+shouldBeTrue("Date.prototype.isPrototypeOf(new Date)");
+shouldBeTrue("Number.prototype.isPrototypeOf(new Number)");
+shouldBeTrue("Object.prototype.isPrototypeOf(new Object)");
+shouldBeTrue("String.prototype.isPrototypeOf(new String)");
+shouldBeTrue("Object.prototype.isPrototypeOf(Array.prototype)");
+shouldBeTrue("Object.prototype.isPrototypeOf(Date.prototype)");
+shouldBeTrue("Object.prototype.isPrototypeOf(Number.prototype)");
+shouldBeTrue("Object.prototype.isPrototypeOf(String.prototype)");
+shouldBeTrue("Object.__proto__.isPrototypeOf(Array)");
+shouldBeTrue("Object.__proto__.isPrototypeOf(Date)");
+shouldBeTrue("Object.__proto__.isPrototypeOf(Number)");
+shouldBeTrue("Object.__proto__.isPrototypeOf(String)");
+
+shouldBeTrue("var wasSet = false; var o = { }; o.__defineGetter__(\"__proto__\", function() { wasSet = true }); o.__proto__; wasSet;");
+shouldBeTrue("var wasSet = false; var o = { }; o.__defineSetter__(\"__proto__\", function() { wasSet = true }); o.__proto__ = {}; wasSet;");
+shouldBeTrue("var wasSet = false; var o = { }; Object.defineProperty(o, \"__proto__\", { \"get\": function() { wasSet = true } }); o.__proto__; wasSet;");
+shouldBeFalse("var wasSet = false; var o = { }; Object.defineProperty(o, \"__proto__\", { \"__proto__\": function(x) { wasSet = true } }); o.__proto__ = {}; wasSet;");
+
+// Deleting Object.prototype.__proto__ removes the ability to set the object's prototype.
+shouldBeTrue("var o = {}; o.__proto__ = { x:true }; o.x");
+shouldBeFalse("var o = {}; o.__proto__ = { x:true }; o.hasOwnProperty('__proto__')");
+delete Object.prototype.__proto__;
+shouldBeUndefined("var o = {}; o.__proto__ = { x:true }; o.x");
+shouldBeTrue("var o = {}; o.__proto__ = { x:true }; o.hasOwnProperty('__proto__')");
diff --git a/deps/v8/test/webkit/reentrant-caching-expected.txt b/deps/v8/test/webkit/reentrant-caching-expected.txt
new file mode 100644 (file)
index 0000000..3257429
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test caching with re-entrancy.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/reentrant-caching.js b/deps/v8/test/webkit/reentrant-caching.js
new file mode 100644 (file)
index 0000000..1db5a17
--- /dev/null
@@ -0,0 +1,112 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+if (this.description)
+    description("Test caching with re-entrancy.");
+
+function test1() {
+    var objects = [{prop:1}, {get prop(){return 2}}];
+
+    function g(o) {
+        return o.prop;
+    }
+
+    for (var i = 0; i < 10000; i++) {
+        var o = {
+            get prop() {
+                try {
+                    g(objects[++j]);
+                }catch(e){
+                }
+                return 1;
+            }
+        };
+        o[i] = i;
+        objects.push(o);
+    }
+    var j=0;
+    g(objects[0]);
+    g(objects[1]);
+    g(objects[2]);
+    g(objects[3]);
+}
+
+
+function test2() {
+    var objects = [Object.create({prop:1}), Object.create({get prop(){return 2}})];
+
+    function g(o) {
+        return o.prop;
+    }
+    var proto = {
+        get prop() {
+            try {
+                g(objects[++j]);
+            }catch(e){
+            }
+            return 1;
+        }
+    };
+    for (var i = 0; i < 10000; i++) {
+        var o = Object.create(proto);
+        o[i] = i;
+        objects.push(o);
+    }
+    var j=0;
+    g(objects[0]);
+    g(objects[1]);
+    g(objects[2]);
+    g(objects[3]);
+}
+
+
+function test3() {
+    var objects = [Object.create(Object.create({prop:1})), Object.create(Object.create({get prop(){return 2}}))];
+
+    function g(o) {
+        return o.prop;
+    }
+    var proto = {
+        get prop() {
+            try {
+                g(objects[++j]);
+            }catch(e){
+            }
+            return 1;
+        }
+    };
+    for (var i = 0; i < 10000; i++) {
+        var o = Object.create(Object.create(proto));
+        o[i] = i;
+        objects.push(o);
+    }
+    var j=0;
+    g(objects[0]);
+    g(objects[1]);
+    g(objects[2]);
+    g(objects[3]);
+}
+
+test1();
+test2();
+test3();
diff --git a/deps/v8/test/webkit/reentrant-call-unwind-expected.txt b/deps/v8/test/webkit/reentrant-call-unwind-expected.txt
new file mode 100644 (file)
index 0000000..b8228b9
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that unwinding of exceptions properly copies registers of activation frames created by reentrant calls to JavaScript.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS f() is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/reentrant-call-unwind.js b/deps/v8/test/webkit/reentrant-call-unwind.js
new file mode 100644 (file)
index 0000000..9d4beb6
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that unwinding of exceptions properly copies registers of activation frames created by reentrant calls to JavaScript."
+);
+
+var f;
+
+try {
+    (function() {
+        var j = 0;
+        f = function() { return j; };
+        throw new Object();
+    }).apply();
+} catch (e) {
+    (function() {
+        shouldBe("f()", "0");
+    }).apply();
+}
diff --git a/deps/v8/test/webkit/regexp-alternatives-expected.txt b/deps/v8/test/webkit/regexp-alternatives-expected.txt
new file mode 100644 (file)
index 0000000..fe53041
--- /dev/null
@@ -0,0 +1,41 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test regular expression processing with alternatives.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS s1.match(/<((\/([^>]+)>)|(([^>]+)>))/) is ["<p>","p>",undefined,undefined,"p>","p"]
+PASS s1.match(/<((ABC>)|(\/([^>]+)>)|(([^>]+)>))/) is ["<p>","p>",undefined,undefined,undefined,"p>","p"]
+PASS s1.match(/<(a|\/p|.+?)>/) is ["<p>","p"]
+PASS s1.match(/<((\/([^>]+)>)|((([^>])+)>))/) is ["<p>","p>",undefined,undefined,"p>","p","p"]
+PASS s1.match(/<((ABC>)|(\/([^>]+)>)|((([^>])+)>))/) is ["<p>","p>",undefined,undefined,undefined,"p>","p","p"]
+PASS s1.match(/<(a|\/p|(.)+?)>/) is ["<p>","p","p"]
+PASS s2.match(/<((\/([^>]+)>)|(([^>]+)>))\5/) is ["<p>p","p>",undefined,undefined,"p>","p"]
+PASS s2.match(/<((ABC>)|(\/([^>]+)>)|(([^>]+)>))\6/) is ["<p>p","p>",undefined,undefined,undefined,"p>","p"]
+PASS s2.match(/<(a|\/p|.+?)>\1/) is ["<p>p","p"]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/regexp-alternatives.js b/deps/v8/test/webkit/regexp-alternatives.js
new file mode 100644 (file)
index 0000000..b0e5600
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test regular expression processing with alternatives.'
+);
+
+var s1 = "<p>content</p>";
+shouldBe('s1.match(/<((\\/([^>]+)>)|(([^>]+)>))/)', '["<p>","p>",undefined,undefined,"p>","p"]');
+shouldBe('s1.match(/<((ABC>)|(\\/([^>]+)>)|(([^>]+)>))/)', '["<p>","p>",undefined,undefined,undefined,"p>","p"]');
+shouldBe('s1.match(/<(a|\\/p|.+?)>/)', '["<p>","p"]');
+
+// Force YARR to use Interpreter by using iterative parentheses
+shouldBe('s1.match(/<((\\/([^>]+)>)|((([^>])+)>))/)', '["<p>","p>",undefined,undefined,"p>","p","p"]');
+shouldBe('s1.match(/<((ABC>)|(\\/([^>]+)>)|((([^>])+)>))/)', '["<p>","p>",undefined,undefined,undefined,"p>","p","p"]');
+shouldBe('s1.match(/<(a|\\/p|(.)+?)>/)', '["<p>","p","p"]');
+
+// Force YARR to use Interpreter by using backreference
+var s2 = "<p>p</p>";
+shouldBe('s2.match(/<((\\/([^>]+)>)|(([^>]+)>))\\5/)', '["<p>p","p>",undefined,undefined,"p>","p"]');
+shouldBe('s2.match(/<((ABC>)|(\\/([^>]+)>)|(([^>]+)>))\\6/)', '["<p>p","p>",undefined,undefined,undefined,"p>","p"]');
+shouldBe('s2.match(/<(a|\\/p|.+?)>\\1/)', '["<p>p","p"]');
diff --git a/deps/v8/test/webkit/regexp-backreferences-expected.txt b/deps/v8/test/webkit/regexp-backreferences-expected.txt
new file mode 100644 (file)
index 0000000..451ac63
--- /dev/null
@@ -0,0 +1,44 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure correct behaviour when using backreferences in a RegExp
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS /(...)\1$/.test('abcabc') is true
+PASS /(...)\1$/.test('abcdef') is false
+PASS /(...)\2$/.test('abcabc') is false
+PASS /(...)\2$/.test('abc') is false
+PASS /\1(...)$/.test('abcabc') is true
+PASS /\1(...)$/.test('abcdef') is true
+PASS /\2(...)$/.test('abcabc') is false
+PASS /\2(...)$/.test('abc') is false
+PASS /\1?(...)$/.test('abc') is true
+PASS /\1?(...)$/.test('abc') is true
+PASS re.test('axabcd') is false
+PASS re.test('axabcsz') is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/regexp-backreferences.js b/deps/v8/test/webkit/regexp-backreferences.js
new file mode 100644 (file)
index 0000000..58db012
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure correct behaviour when using backreferences in a RegExp");
+
+shouldBeTrue("/(...)\\1$/.test('abcabc')");
+shouldBeFalse("/(...)\\1$/.test('abcdef')");
+shouldBeFalse("/(...)\\2$/.test('abcabc')");
+shouldBeFalse("/(...)\\2$/.test('abc')");
+shouldBeTrue("/\\1(...)$/.test('abcabc')");
+shouldBeTrue("/\\1(...)$/.test('abcdef')");
+shouldBeFalse("/\\2(...)$/.test('abcabc')");
+shouldBeFalse("/\\2(...)$/.test('abc')");
+shouldBeTrue("/\\1?(...)$/.test('abc')");
+shouldBeTrue("/\\1?(...)$/.test('abc')");
+
+re = new RegExp("[^b]*((..)|(\\2))+Sz", "i");
+
+shouldBeFalse("re.test('axabcd')");
+shouldBeTrue("re.test('axabcsz')");
diff --git a/deps/v8/test/webkit/regexp-char-insensitive-expected.txt b/deps/v8/test/webkit/regexp-char-insensitive-expected.txt
new file mode 100644 (file)
index 0000000..2410364
--- /dev/null
@@ -0,0 +1,48 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks the case-insensitive matching of character literals.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS /å/i.test('/å/') is true
+PASS /å/i.test('/Å/') is true
+PASS /Å/i.test('/å/') is true
+PASS /Å/i.test('/Å/') is true
+PASS /å/i.test('P') is false
+PASS /å/i.test('PASS') is false
+PASS /Å/i.test('P') is false
+PASS /Å/i.test('PASS') is false
+PASS 'PASS'.match(/Å/i) is null
+PASS 'PASS'.match(/Å/i) is null
+PASS 'PASå'.replace(/å/ig, 'S') is 'PASS'
+PASS 'PASå'.replace(/Å/ig, 'S') is 'PASS'
+PASS 'PASÅ'.replace(/å/ig, 'S') is 'PASS'
+PASS 'PASÅ'.replace(/Å/ig, 'S') is 'PASS'
+PASS 'PASS'.replace(/å/ig, '%C3%A5') is 'PASS'
+PASS 'PASS'.replace(/Å/ig, '%C3%A5') is 'PASS'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/regexp-char-insensitive.js b/deps/v8/test/webkit/regexp-char-insensitive.js
new file mode 100644 (file)
index 0000000..14a10f6
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks the case-insensitive matching of character literals."
+);
+
+shouldBeTrue("/\u00E5/i.test('/\u00E5/')");
+shouldBeTrue("/\u00E5/i.test('/\u00C5/')");
+shouldBeTrue("/\u00C5/i.test('/\u00E5/')");
+shouldBeTrue("/\u00C5/i.test('/\u00C5/')");
+
+shouldBeFalse("/\u00E5/i.test('P')");
+shouldBeFalse("/\u00E5/i.test('PASS')");
+shouldBeFalse("/\u00C5/i.test('P')");
+shouldBeFalse("/\u00C5/i.test('PASS')");
+
+shouldBeNull("'PASS'.match(/\u00C5/i)");
+shouldBeNull("'PASS'.match(/\u00C5/i)");
+
+shouldBe("'PAS\u00E5'.replace(/\u00E5/ig, 'S')", "'PASS'");
+shouldBe("'PAS\u00E5'.replace(/\u00C5/ig, 'S')", "'PASS'");
+shouldBe("'PAS\u00C5'.replace(/\u00E5/ig, 'S')", "'PASS'");
+shouldBe("'PAS\u00C5'.replace(/\u00C5/ig, 'S')", "'PASS'");
+
+shouldBe("'PASS'.replace(/\u00E5/ig, '%C3%A5')", "'PASS'");
+shouldBe("'PASS'.replace(/\u00C5/ig, '%C3%A5')", "'PASS'");
diff --git a/deps/v8/test/webkit/regexp-character-match-out-of-order-expected.txt b/deps/v8/test/webkit/regexp-character-match-out-of-order-expected.txt
new file mode 100644 (file)
index 0000000..a9d7649
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure RegExp generates single character matches in the correct order
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS /[\w']+/.exec("'_'").toString() is "'_'"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/regexp-character-match-out-of-order.js b/deps/v8/test/webkit/regexp-character-match-out-of-order.js
new file mode 100644 (file)
index 0000000..1b16550
--- /dev/null
@@ -0,0 +1,26 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Test to ensure RegExp generates single character matches in the correct order');
+
+shouldBe("/[\\w']+/.exec(\"'_'\").toString()", "\"'_'\"");
diff --git a/deps/v8/test/webkit/regexp-compile-crash-expected.txt b/deps/v8/test/webkit/regexp-compile-crash-expected.txt
new file mode 100644 (file)
index 0000000..377e786
--- /dev/null
@@ -0,0 +1,39 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test regexp compiling to make sure it doens't crash like bug 16127
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS !!/\)[;s]+/ is true
+PASS /[/ threw exception SyntaxError: Invalid regular expression: missing /.
+PASS /[a/ threw exception SyntaxError: Invalid regular expression: missing /.
+PASS /[-/ threw exception SyntaxError: Invalid regular expression: missing /.
+PASS !!/(a)\ 1/ is true
+PASS !!/(a)\ 1{1,3}/ is true
+PASS No crashes, yay!
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/regexp-compile-crash.js b/deps/v8/test/webkit/regexp-compile-crash.js
new file mode 100644 (file)
index 0000000..87abbcb
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test regexp compiling to make sure it doens't crash like bug 16127");
+
+shouldBeTrue('!!/\\)[;\s]+/');
+shouldThrow('/[/');
+shouldThrow('/[a/');
+shouldThrow('/[-/');
+shouldBeTrue('!!/(a)\1/');
+shouldBeTrue('!!/(a)\1{1,3}/');
+
+testPassed("No crashes, yay!")
diff --git a/deps/v8/test/webkit/regexp-compile-expected.txt b/deps/v8/test/webkit/regexp-compile-expected.txt
new file mode 100644 (file)
index 0000000..d5c59ce
--- /dev/null
@@ -0,0 +1,52 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test RegExp.compile method.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS re.toString() is '/a/i'
+PASS re.multiline is false
+PASS re.ignoreCase is false
+PASS re.global is false
+PASS re.test('A') is false
+PASS re.toString() is '/a/'
+PASS re.toString() is '/b/g'
+PASS re.toString() is '/c/'
+PASS re.ignoreCase is true
+PASS re.test('C') is true
+PASS re.toString() is '/c/i'
+PASS re.compile(new RegExp('c'), 'i'); threw exception TypeError: Cannot supply flags when constructing one RegExp from another.
+PASS re.toString() is '/c/i'
+PASS re.compile(new RegExp('+')); threw exception SyntaxError: Invalid regular expression: /+/: Nothing to repeat.
+PASS re.toString() is '/undefined/'
+PASS re.toString() is '/null/'
+PASS re.toString() is '/(?:)/'
+PASS re.toString() is '/z/'
+PASS re.lastIndex is 0
+PASS re.lastIndex is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/regexp-compile.js b/deps/v8/test/webkit/regexp-compile.js
new file mode 100644 (file)
index 0000000..b06ac22
--- /dev/null
@@ -0,0 +1,74 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test RegExp.compile method.'
+);
+
+re = new RegExp("a", "i");
+shouldBe("re.toString()", "'/a/i'");
+
+re.compile("a");
+shouldBe("re.multiline", "false");
+shouldBe("re.ignoreCase", "false");
+shouldBe("re.global", "false");
+shouldBe("re.test('A')", "false");
+shouldBe("re.toString()", "'/a/'");
+
+re.compile("b", "g");
+shouldBe("re.toString()", "'/b/g'");
+
+re.compile(new RegExp("c"));
+shouldBe("re.toString()", "'/c/'");
+
+re.compile(new RegExp("c", "i"));
+shouldBe("re.ignoreCase", "true");
+shouldBe("re.test('C')", "true");
+shouldBe("re.toString()", "'/c/i'");
+
+shouldThrow("re.compile(new RegExp('c'), 'i');");
+
+// It's OK to supply a second argument, as long as the argument is "undefined".
+re.compile(re, undefined);
+shouldBe("re.toString()", "'/c/i'");
+
+shouldThrow("re.compile(new RegExp('+'));");
+
+re.compile(undefined);
+shouldBe("re.toString()", "'/undefined/'");
+
+re.compile(null);
+shouldBe("re.toString()", "'/null/'");
+
+re.compile();
+shouldBe("re.toString()", "'/(?:)/'");
+
+re.compile("z", undefined);
+shouldBe("re.toString()", "'/z/'");
+
+// Compiling should reset lastIndex.
+re.lastIndex = 100;
+re.compile(/a/g);
+shouldBe("re.lastIndex", "0");
+re.exec("aaa");
+shouldBe("re.lastIndex", "1");
diff --git a/deps/v8/test/webkit/regexp-divequal-expected.txt b/deps/v8/test/webkit/regexp-divequal-expected.txt
new file mode 100644 (file)
index 0000000..8de6313
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test JS parser handling of regex literals starting with /=
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS /=/.toString() is '/=/'
+PASS /=/.test('') is false
+PASS /=/.test('=') is true
+PASS '='.match(/=/) is ['=']
+PASS '='.match(/\=/) is ['=']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/regexp-divequal.js b/deps/v8/test/webkit/regexp-divequal.js
new file mode 100644 (file)
index 0000000..5f06a9a
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Test JS parser handling of regex literals starting with /=');
+
+shouldBe("/=/.toString()", "'/=/'");
+shouldBeFalse("/=/.test('')");
+shouldBeTrue("/=/.test('=')");
+shouldBe("'='.match(/=/)", "['=']");
+shouldBe("'='.match(/\\=/)", "['=']");
diff --git a/deps/v8/test/webkit/regexp-extended-characters-match-expected.txt b/deps/v8/test/webkit/regexp-extended-characters-match-expected.txt
new file mode 100644 (file)
index 0000000..c2a327c
--- /dev/null
@@ -0,0 +1,43 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks regular expressions using extended (> 255) characters and character classes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS (new RegExp("[Ā-ā]")).exec("a") is null
+PASS (new RegExp("[Ā]")).exec("a") is null
+PASS (new RegExp("Ā")).exec("a") is null
+PASS (new RegExp("[a]")).exec("a").toString() is "a"
+PASS (new RegExp("[Ā-āa]")).exec("a").toString() is "a"
+PASS (new RegExp("[Āa]")).exec("a").toString() is "a"
+PASS (new RegExp("a")).exec("a").toString() is "a"
+PASS (new RegExp("[a-Ā]")).exec("a").toString() is "a"
+PASS (new RegExp("[Ā]")).exec("Ā").toString() is "Ā"
+PASS (new RegExp("[Ā-ā]")).exec("Ā").toString() is "Ā"
+PASS (new RegExp("Ā")).exec("Ā").toString() is "Ā"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/regexp-extended-characters-match.js b/deps/v8/test/webkit/regexp-extended-characters-match.js
new file mode 100644 (file)
index 0000000..de40275
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks regular expressions using extended (> 255) characters and character classes."
+);
+
+// shouldThrow('var r = new RegExp("[\u0101-\u0100]"); r.exec("a")', 'null');
+
+shouldBe('(new RegExp("[\u0100-\u0101]")).exec("a")', 'null');
+shouldBe('(new RegExp("[\u0100]")).exec("a")', 'null');
+shouldBe('(new RegExp("\u0100")).exec("a")', 'null');
+shouldBe('(new RegExp("[\u0061]")).exec("a").toString()', '"a"');
+shouldBe('(new RegExp("[\u0100-\u0101a]")).exec("a").toString()', '"a"');
+shouldBe('(new RegExp("[\u0100a]")).exec("a").toString()', '"a"');
+shouldBe('(new RegExp("\u0061")).exec("a").toString()', '"a"');
+shouldBe('(new RegExp("[a-\u0100]")).exec("a").toString()', '"a"');
+shouldBe('(new RegExp("[\u0100]")).exec("\u0100").toString()', '"\u0100"');
+shouldBe('(new RegExp("[\u0100-\u0101]")).exec("\u0100").toString()', '"\u0100"');
+shouldBe('(new RegExp("\u0100")).exec("\u0100").toString()', '"\u0100"');
diff --git a/deps/v8/test/webkit/regexp-extended-characters-more-expected.txt b/deps/v8/test/webkit/regexp-extended-characters-more-expected.txt
new file mode 100644 (file)
index 0000000..ded2ed1
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks a few cases of extended (> 127) characters in repeat regular expressions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "foo\xa0\xa0\xa0".replace(/\xa0*/, "") is "foo\xa0\xa0\xa0"
+PASS "foo\xa0\xa0\xa0".replace(/\xa0+/, "") is "foo"
+PASS "foo\xa0\xa0\xa0".replace(/\xa0*$/, "") is "foo"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/regexp-extended-characters-more.js b/deps/v8/test/webkit/regexp-extended-characters-more.js
new file mode 100644 (file)
index 0000000..9cdf6be
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks a few cases of extended (> 127) characters in repeat regular expressions."
+);
+
+shouldBe('"foo\\xa0\\xa0\\xa0".replace(/\\xa0*/, "")', '"foo\\xa0\\xa0\\xa0"');
+shouldBe('"foo\\xa0\\xa0\\xa0".replace(/\\xa0+/, "")', '"foo"');
+shouldBe('"foo\\xa0\\xa0\\xa0".replace(/\\xa0*$/, "")', '"foo"');
diff --git a/deps/v8/test/webkit/regexp-find-first-asserted-expected.txt b/deps/v8/test/webkit/regexp-find-first-asserted-expected.txt
new file mode 100644 (file)
index 0000000..182a371
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests some regular expressions that were doing the wrong thing with the "find first asserted" optimization.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS /.*<body>(.*)<\/body>.*/.exec("foo<body>bar</body>baz").toString() is "foo<body>bar</body>baz,bar"
+PASS /\s*<!--([sS]*)\/\/\s*-->\s*/.exec("<!--// -->").toString() is "<!--// -->,"
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/regexp-find-first-asserted.js b/deps/v8/test/webkit/regexp-find-first-asserted.js
new file mode 100644 (file)
index 0000000..ce8628f
--- /dev/null
@@ -0,0 +1,31 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests some regular expressions that were doing the wrong thing with the "find first asserted" optimization.'
+);
+
+shouldBe('/.*<body>(.*)<\\/body>.*/.exec("foo<body>bar</body>baz").toString()', '"foo<body>bar</body>baz,bar"');
+shouldBe('/\\s*<!--([\s\S]*)\\/\\/\\s*-->\\s*/.exec("<!--// -->").toString()', '"<!--// -->,"');
+
+debug('');
diff --git a/deps/v8/test/webkit/regexp-in-and-foreach-handling-expected.txt b/deps/v8/test/webkit/regexp-in-and-foreach-handling-expected.txt
new file mode 100644 (file)
index 0000000..1c675d0
--- /dev/null
@@ -0,0 +1,44 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for bug 31689: RegExp#exec's returned Array-like object behaves differently from regular Arrays
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS testRegExpMatchesArray(0) is ["abcdef", "a", undefined, "c", undefined, "e", undefined]
+PASS testInOperator(0) is ["abcdef", "a", undefined, "c", undefined, "e", undefined]
+PASS testForEachFunction(0) is ["abcdef", "a", undefined, "c", undefined, "e", undefined]
+PASS testRegExpMatchesArray(1) is ["a", "a", undefined]
+PASS testInOperator(1) is ["a", "a", undefined]
+PASS testForEachFunction(1) is ["a", "a", undefined]
+PASS testRegExpMatchesArray(2) is ["xa", undefined, "a"]
+PASS testInOperator(2) is ["xa", undefined, "a"]
+PASS testForEachFunction(2) is ["xa", undefined, "a"]
+PASS testRegExpMatchesArray(3) is ["xa", undefined, "a", undefined]
+PASS testInOperator(3) is ["xa", undefined, "a", undefined]
+PASS testForEachFunction(3) is ["xa", undefined, "a", undefined]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/regexp-in-and-foreach-handling.js b/deps/v8/test/webkit/regexp-in-and-foreach-handling.js
new file mode 100644 (file)
index 0000000..a2430db
--- /dev/null
@@ -0,0 +1,72 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test for bug 31689: RegExp#exec's returned Array-like object behaves differently from regular Arrays");
+
+var tests = [
+    [ /(a)(_)?.+(c)(_)?.+(e)(_)?.+/, 'abcdef', '["abcdef", "a", undefined, "c", undefined, "e", undefined]' ],
+    [ /(a)(_)?/, 'abcdef', '["a", "a", undefined]' ],
+    [ /(_)?.+(a)/, 'xabcdef', '["xa", undefined, "a"]' ],
+    [ /(_)?.+(a)(_)?/, 'xabcdef', '["xa", undefined, "a", undefined]' ],
+];
+
+function testRegExpMatchesArray(i)
+{
+    return tests[i][0].exec(tests[i][1]);
+}
+
+function testInOperator(i)
+{
+    var re = tests[i][0],
+        str = tests[i][1],
+        inArray = [],
+        matches = re.exec(str);
+
+    for (var j = 0; j < matches.length; j++) {
+        if (j in matches) {
+            inArray.push(matches[j]);
+        }
+    }
+    return inArray;
+}
+
+function testForEachFunction(i)
+{
+    var re = tests[i][0],
+        str = tests[i][1],
+        inArray = [],
+        matches = re.exec(str);
+
+    matches.forEach(function(m) {
+        inArray.push(m);
+    });
+    return inArray;
+
+}
+
+for (var i in tests) {
+    shouldBe('testRegExpMatchesArray(' + i + ')', tests[i][2]);
+    shouldBe('testInOperator(' + i + ')', tests[i][2]);
+    shouldBe('testForEachFunction(' + i + ')', tests[i][2]);
+}
+
diff --git a/deps/v8/test/webkit/regexp-literals-arent-constants-expected.txt b/deps/v8/test/webkit/regexp-literals-arent-constants-expected.txt
new file mode 100644 (file)
index 0000000..415e020
--- /dev/null
@@ -0,0 +1,39 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test ensures that regeular expression literals are constants, and so persist over multiple executions
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS currentRegExp === lastRegExp is false
+PASS currentRegExp === lastRegExp is false
+PASS returnRegExpLiteral() === returnRegExpLiteral() is false
+PASS returnConditionalRegExpLiteral(true) === returnConditionalRegExpLiteral(true) is false
+PASS returnConditionalRegExpLiteral(false) === returnConditionalRegExpLiteral(false) is false
+PASS returnConditionalRegExpLiteral(true) === returnConditionalRegExpLiteral(false) is false
+PASS returnRegExpLiteral().someAddedProperty is undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/regexp-literals-arent-constants.js b/deps/v8/test/webkit/regexp-literals-arent-constants.js
new file mode 100644 (file)
index 0000000..4932f72
--- /dev/null
@@ -0,0 +1,57 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This test ensures that regeular expression literals are constants, and so persist over multiple executions");
+
+for (var i = 0; i < 2; i++) {
+    currentRegExp = /a/;
+    if (i)
+        shouldBeFalse("currentRegExp === lastRegExp");
+    lastRegExp = currentRegExp;
+}
+
+function test1() {
+    for (var i = 0; i < 2; i++) {
+        currentRegExp = /a/;
+        if (i)
+            shouldBeFalse("currentRegExp === lastRegExp");
+        lastRegExp = currentRegExp;
+    }
+}
+test1();
+
+function returnRegExpLiteral() { return /a/ }
+
+shouldBeFalse("returnRegExpLiteral() === returnRegExpLiteral()");
+
+function returnConditionalRegExpLiteral(first) {
+    if (first)
+        return /a/;
+    return /a/;
+}
+
+shouldBeFalse("returnConditionalRegExpLiteral(true) === returnConditionalRegExpLiteral(true)");
+shouldBeFalse("returnConditionalRegExpLiteral(false) === returnConditionalRegExpLiteral(false)");
+shouldBeFalse("returnConditionalRegExpLiteral(true) === returnConditionalRegExpLiteral(false)");
+returnRegExpLiteral().someAddedProperty = true;
+shouldBeUndefined("returnRegExpLiteral().someAddedProperty");
diff --git a/deps/v8/test/webkit/regexp-many-brackets-expected.txt b/deps/v8/test/webkit/regexp-many-brackets-expected.txt
new file mode 100644 (file)
index 0000000..a94955b
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test regular expression processing with many capturing brackets (200).
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 'hello'.match(manyBracketsRegExp) is manyHellosArray
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/regexp-many-brackets.js b/deps/v8/test/webkit/regexp-many-brackets.js
new file mode 100644 (file)
index 0000000..7c4b959
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test regular expression processing with many capturing brackets (200).'
+);
+
+var count = 200;
+
+var regexp = "";
+for (var i = 0; i < count; ++i)
+    regexp += "(";
+regexp += "hello";
+for (var i = 0; i < count; ++i)
+    regexp += ")";
+
+var manyHellosArray = new Array;
+for (var i = 0; i <= count; ++i)
+    manyHellosArray[i] = "hello";
+
+var manyBracketsRegExp = new RegExp(regexp);
+shouldBe("'hello'.match(manyBracketsRegExp)", "manyHellosArray");
+
+debug('');
diff --git a/deps/v8/test/webkit/regexp-negative-special-characters-expected.txt b/deps/v8/test/webkit/regexp-negative-special-characters-expected.txt
new file mode 100644 (file)
index 0000000..bf7675d
--- /dev/null
@@ -0,0 +1,74 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks Unicode in negative RegExp character classes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "\s", " \t\f\v\r\n".
+PASS "\S", "Проверка".
+PASS "\s", "Проверка".
+PASS "[\s]", "Проверка".
+PASS "[\S]", "Проверка".
+PASS "[^\s]", "Проверка".
+PASS "[^\S]", "Проверка".
+PASS "[\s\S]*", "\u2002Проверка\r\n\u00a0".
+PASS "\S\S", "уф".
+PASS "\S{2}", "уф".
+PASS "\w", "Проверка".
+PASS "\W", "Проверка".
+PASS "[\w]", "Проверка".
+PASS "[\W]", "Проверка".
+PASS "[^\w]", "Проверка".
+PASS "[^\W]", "Проверка".
+PASS "\W\W", "уф".
+PASS "\W{2}", "уф".
+PASS "\d", "Проверка".
+PASS "\D", "Проверка".
+PASS "[\d]", "Проверка".
+PASS "[\D]", "Проверка".
+PASS "[^\d]", "Проверка".
+PASS "[^\D]", "Проверка".
+PASS "\D\D", "уф".
+PASS "\D{2}", "уф".
+PASS "[\S\d]", "Проверка123".
+PASS "[\d\S]", "Проверка123".
+PASS "[^\S\d]", "Проверка123".
+PASS "[^\d\S]", "Проверка123".
+PASS "[ \S]", " Проверка ".
+PASS "[\S ]", " Проверка ".
+PASS "[ф \S]", " Проверка ".
+PASS "[\Sф ]", " Проверка ".
+PASS "[^р\S]", " Проверка ".
+PASS "[^\Sр]", " Проверка ".
+PASS "[^р\s]", " Проверка ".
+PASS "[^\sр]", " Проверка ".
+PASS "[ф \s\S]", "Проверка \r\n".
+PASS "[\S\sф ]", "Проверка \r\n".
+PASS "[^z]", "Проверка \r\n".
+PASS "[^ф]", "Проверка \r\n".
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/regexp-negative-special-characters.js b/deps/v8/test/webkit/regexp-negative-special-characters.js
new file mode 100644 (file)
index 0000000..f9fede4
--- /dev/null
@@ -0,0 +1,86 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks Unicode in negative RegExp character classes."
+);
+
+function test(pattern, str, expected_length) {
+  var result = eval('"' + str + '"').replace(new RegExp(pattern, 'img'), '');
+
+  if (result.length == expected_length)
+    testPassed('"' + pattern + '", ' + '"' + str + '".');
+  else
+    testFailed('"' + pattern + '", ' + '"' + str + '". Was "' + result + '".');
+}
+
+
+test("\\s", " \\t\\f\\v\\r\\n", 0); // ASCII whitespace.
+test("\\S", "Проверка", 0); // Cyrillic letters are non-whitespace...
+test("\\s", "Проверка", 8); // ...and they aren't whitespace.
+test("[\\s]", "Проверка", 8);
+test("[\\S]", "Проверка", 0);
+test("[^\\s]", "Проверка", 0);
+test("[^\\S]", "Проверка", 8);
+test("[\\s\\S]*", "\\u2002Проверка\\r\\n\\u00a0", 0);
+test("\\S\\S", "уф", 0);
+test("\\S{2}", "уф", 0);
+
+test("\\w", "Проверка", 8); // Alas, only ASCII characters count as word ones in JS.
+test("\\W", "Проверка", 0);
+test("[\\w]", "Проверка", 8);
+test("[\\W]", "Проверка", 0);
+test("[^\\w]", "Проверка", 0);
+test("[^\\W]", "Проверка", 8);
+test("\\W\\W", "уф", 0);
+test("\\W{2}", "уф", 0);
+
+test("\\d", "Проверка", 8); // Digit and non-digit.
+test("\\D", "Проверка", 0);
+test("[\\d]", "Проверка", 8);
+test("[\\D]", "Проверка", 0);
+test("[^\\d]", "Проверка", 0);
+test("[^\\D]", "Проверка", 8);
+test("\\D\\D", "уф", 0);
+test("\\D{2}", "уф", 0);
+
+test("[\\S\\d]", "Проверка123", 0);
+test("[\\d\\S]", "Проверка123", 0);
+test("[^\\S\\d]", "Проверка123", 11);
+test("[^\\d\\S]", "Проверка123", 11);
+
+test("[ \\S]", " Проверка ", 0);
+test("[\\S ]", " Проверка ", 0);
+test("[ф \\S]", " Проверка ", 0);
+test("[\\Sф ]", " Проверка ", 0);
+
+test("[^р\\S]", " Проверка ", 8);
+test("[^\\Sр]", " Проверка ", 8);
+test("[^р\\s]", " Проверка ", 4);
+test("[^\\sр]", " Проверка ", 4);
+
+test("[ф \\s\\S]", "Проверка \\r\\n", 0);
+test("[\\S\\sф ]", "Проверка \\r\\n", 0);
+
+test("[^z]", "Проверка \\r\\n", 0);
+test("[^ф]", "Проверка \\r\\n", 0);
diff --git a/deps/v8/test/webkit/regexp-non-bmp-expected.txt b/deps/v8/test/webkit/regexp-non-bmp-expected.txt
new file mode 100644 (file)
index 0000000..28d78e2
--- /dev/null
@@ -0,0 +1,41 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that regular expressions treat non-BMP characters as two separate characters. From a Unicode correctness point of view this is wrong, but it is what other browsers do. And given that we store strings as UTF-16, it is also more efficient to implement. Also test some other cases related to UTF-8 and UTF-16.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS /./.exec(surrogatePair).toString().length is 1
+PASS /\D/.exec(surrogatePair).toString().length is 1
+PASS /\S/.exec(surrogatePair).toString().length is 1
+PASS /\W/.exec(surrogatePair).toString().length is 1
+PASS /[^x]/.exec(surrogatePair).toString().length is 1
+
+PASS /.{1,2}/.exec("!!" + String.fromCharCode(0xA1)).toString().length is 2
+PASS /./.exec("") is null
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/regexp-non-bmp.js b/deps/v8/test/webkit/regexp-non-bmp.js
new file mode 100644 (file)
index 0000000..0711251
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests that regular expressions treat non-BMP characters as two separate characters. '
++ 'From a Unicode correctness point of view this is wrong, but it is what other browsers do. '
++ 'And given that we store strings as UTF-16, it is also more efficient to implement. '
++ 'Also test some other cases related to UTF-8 and UTF-16.'
+);
+
+var surrogatePair = String.fromCharCode(0xD800) + String.fromCharCode(0xDC00);
+
+shouldBe('/./.exec(surrogatePair).toString().length', '1');
+shouldBe('/\\D/.exec(surrogatePair).toString().length', '1');
+shouldBe('/\\S/.exec(surrogatePair).toString().length', '1');
+shouldBe('/\\W/.exec(surrogatePair).toString().length', '1');
+shouldBe('/[^x]/.exec(surrogatePair).toString().length', '1');
+
+debug('');
+
+shouldBe('/.{1,2}/.exec("!!" + String.fromCharCode(0xA1)).toString().length', '2');
+shouldBe('/./.exec("")', 'null');
+
+debug('');
diff --git a/deps/v8/test/webkit/regexp-non-character-expected.txt b/deps/v8/test/webkit/regexp-non-character-expected.txt
new file mode 100644 (file)
index 0000000..7c566fb
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for regular expressions with non-character values in them, specifically in character classes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "F".match(/[\uD7FF]/) is null
+PASS "0".match(/[\uD800]/) is null
+PASS "F".match(/[\uDFFF]/) is null
+PASS "E".match(/[\uE000]/) is null
+PASS "y".match(/[\uFDBF]/) is null
+PASS "y".match(/[\uFDD0]/) is null
+PASS "y".match(/[\uFDEF]/) is null
+PASS "y".match(/[\uFDF0]/) is null
+PASS "y".match(/[\uFEFF]/) is null
+PASS "y".match(/[\uFEFF]/) is null
+PASS "y".match(/[\uFFFE]/) is null
+PASS "y".match(/[\uFFFF]/) is null
+PASS "y".match(/[\u10FFFF]/) is null
+PASS "y".match(/[\u110000]/) is null
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/regexp-non-character.js b/deps/v8/test/webkit/regexp-non-character.js
new file mode 100644 (file)
index 0000000..1dfed02
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test for regular expressions with non-character values in them, specifically in character classes.'
+);
+
+shouldBe('"F".match(/[\\uD7FF]/)', 'null');
+shouldBe('"0".match(/[\\uD800]/)', 'null');
+shouldBe('"F".match(/[\\uDFFF]/)', 'null');
+shouldBe('"E".match(/[\\uE000]/)', 'null');
+shouldBe('"y".match(/[\\uFDBF]/)', 'null');
+shouldBe('"y".match(/[\\uFDD0]/)', 'null');
+shouldBe('"y".match(/[\\uFDEF]/)', 'null');
+shouldBe('"y".match(/[\\uFDF0]/)', 'null');
+shouldBe('"y".match(/[\\uFEFF]/)', 'null');
+shouldBe('"y".match(/[\\uFEFF]/)', 'null');
+shouldBe('"y".match(/[\\uFFFE]/)', 'null');
+shouldBe('"y".match(/[\\uFFFF]/)', 'null');
+shouldBe('"y".match(/[\\u10FFFF]/)', 'null');
+shouldBe('"y".match(/[\\u110000]/)', 'null');
diff --git a/deps/v8/test/webkit/regexp-norepeat-expected.txt b/deps/v8/test/webkit/regexp-norepeat-expected.txt
new file mode 100644 (file)
index 0000000..f46c8a5
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for https://bugs.webkit.org/show_bug.cgi?id=46077
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS re.test(str) is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/regexp-norepeat.js b/deps/v8/test/webkit/regexp-norepeat.js
new file mode 100644 (file)
index 0000000..bab6020
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test for https://bugs.webkit.org/show_bug.cgi?id=46077'
+);
+
+var re = /^b|^cd/;
+var str = "abcd";
+shouldBe('re.test(str)', 'false');
diff --git a/deps/v8/test/webkit/regexp-range-bound-ffff-expected.txt b/deps/v8/test/webkit/regexp-range-bound-ffff-expected.txt
new file mode 100644 (file)
index 0000000..1769c3c
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for rdar:/68455379, a case-insensitive regex containing a character class containing a range with an upper bound of ￿ can lead to an infinite-loop.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS ("A".match(/[\ 1-￿]/i) == "A") is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/regexp-range-bound-ffff.js b/deps/v8/test/webkit/regexp-range-bound-ffff.js
new file mode 100644 (file)
index 0000000..51663db
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+
+'Test for rdar:/68455379, a case-insensitive regex containing a character class containing a range with an upper bound of \uFFFF can lead to an infinite-loop.'
+
+);
+
+shouldBe('("A".match(/[\u0001-\uFFFF]/i) == "A")', 'true');
diff --git a/deps/v8/test/webkit/regexp-zero-length-alternatives-expected.txt b/deps/v8/test/webkit/regexp-zero-length-alternatives-expected.txt
new file mode 100644 (file)
index 0000000..3efbe4f
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test regular expression processing with alternatives that match consuming no characters
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS emptyStr.match(re1) is [""]
+PASS s1.match(re1) is [""]
+PASS s2.match(re1) is ["aaaa"]
+PASS s3.match(re1) is ["aa"]
+PASS emptyStr.match(re2) is [""]
+PASS s1.match(re2) is [""]
+PASS s2.match(re2) is ["aaaa"]
+PASS s3.match(re2) is ["aa"]
+PASS emptyStr.match(re3) is [""]
+PASS s1.match(re3) is [""]
+PASS s2.match(re3) is ["aaaa"]
+PASS s3.match(re3) is ["aa"]
+PASS emptyStr.match(re4) is ["", undefined]
+PASS s1.match(re4) is ["", undefined]
+PASS s2.match(re4) is ["aaaa", "a"]
+PASS s3.match(re4) is ["aa", "a"]
+PASS emptyStr.match(re5) is ["", undefined]
+PASS s1.match(re5) is ["", undefined]
+PASS s2.match(re5) is ["aaaa", "a"]
+PASS s3.match(re5) is ["aa", "a"]
+PASS emptyStr.match(re6) is ["", undefined]
+PASS s1.match(re6) is ["", undefined]
+PASS s2.match(re6) is ["aaaa", "a"]
+PASS s3.match(re6) is ["aa", "a"]
+PASS emptyStr.match(re7) is [""]
+PASS s1.match(re7) is [""]
+PASS s2.match(re7) is ["aaa"]
+PASS s3.match(re7) is ["aa"]
+PASS emptyStr.match(re8) is [""]
+PASS s1.match(re8) is [""]
+PASS s2.match(re8) is ["aaaa"]
+PASS s3.match(re8) is ["aa"]
+PASS emptyStr.match(re9) is [""]
+PASS s1.match(re9) is [""]
+PASS s2.match(re9) is ["aaaa"]
+PASS s3.match(re9) is ["aa"]
+PASS emptyStr.match(re10) is [""]
+PASS s1.match(re10) is [""]
+PASS s2.match(re10) is [""]
+PASS s3.match(re10) is [""]
+PASS emptyStr.match(re11) is [""]
+PASS s1.match(re11) is [""]
+PASS s2.match(re11) is [""]
+PASS s3.match(re11) is [""]
+PASS emptyStr.match(re12) is [""]
+PASS s1.match(re12) is [""]
+PASS s2.match(re12) is [""]
+PASS s3.match(re12) is [""]
+PASS emptyStr.match(re13) is ["", undefined]
+PASS s1.match(re13) is ["", undefined]
+PASS s2.match(re13) is ["", undefined]
+PASS s3.match(re13) is ["", undefined]
+PASS emptyStr.match(re14) is ["", undefined]
+PASS s1.match(re14) is ["", undefined]
+PASS s2.match(re14) is ["", undefined]
+PASS s3.match(re14) is ["", undefined]
+PASS emptyStr.match(re15) is ["", undefined]
+PASS s1.match(re15) is ["", undefined]
+PASS s2.match(re15) is ["", undefined]
+PASS s3.match(re15) is ["", undefined]
+PASS emptyStr.match(re16) is [""]
+PASS s1.match(re16) is [""]
+PASS s2.match(re16) is ["a"]
+PASS s3.match(re16) is ["a"]
+PASS emptyStr.match(re17) is [""]
+PASS s1.match(re17) is [""]
+PASS s2.match(re17) is ["a"]
+PASS s3.match(re17) is ["a"]
+PASS emptyStr.match(re18) is [""]
+PASS s1.match(re18) is [""]
+PASS s2.match(re18) is ["a"]
+PASS s3.match(re18) is ["a"]
+PASS emptyStr.match(re19) is ["", undefined]
+PASS s1.match(re19) is ["", undefined]
+PASS s2.match(re19) is ["a", "a"]
+PASS s3.match(re19) is ["a", "a"]
+PASS emptyStr.match(re20) is ["", undefined]
+PASS s1.match(re20) is ["", undefined]
+PASS s2.match(re20) is ["a", "a"]
+PASS s3.match(re20) is ["a", "a"]
+PASS emptyStr.match(re21) is ["", undefined]
+PASS s1.match(re21) is ["", undefined]
+PASS s2.match(re21) is ["a", "a"]
+PASS s3.match(re21) is ["a", "a"]
+PASS emptyStr.match(re22) is [""]
+PASS s1.match(re22) is [""]
+PASS s2.match(re22) is [""]
+PASS s3.match(re22) is [""]
+PASS emptyStr.match(re23) is [""]
+PASS s1.match(re23) is [""]
+PASS s2.match(re23) is [""]
+PASS s3.match(re23) is [""]
+PASS emptyStr.match(re24) is [""]
+PASS s1.match(re24) is [""]
+PASS s2.match(re24) is [""]
+PASS s3.match(re24) is [""]
+PASS emptyStr.match(re25) is ["", undefined]
+PASS s1.match(re25) is ["", undefined]
+PASS s2.match(re25) is ["", undefined]
+PASS s3.match(re25) is ["", undefined]
+PASS emptyStr.match(re26) is ["", undefined]
+PASS s1.match(re26) is ["", undefined]
+PASS s2.match(re26) is ["", undefined]
+PASS s3.match(re26) is ["", undefined]
+PASS emptyStr.match(re27) is ["", undefined]
+PASS s1.match(re27) is ["", undefined]
+PASS s2.match(re27) is ["", undefined]
+PASS s3.match(re27) is ["", undefined]
+PASS emptyStr.match(re28) is null
+PASS s1.match(re28) is ["x"]
+PASS s2.match(re28) is null
+PASS s3.match(re28) is ["aax"]
+PASS emptyStr.match(re29) is null
+PASS s1.match(re29) is ["x"]
+PASS s2.match(re29) is null
+PASS s3.match(re29) is ["aax"]
+PASS emptyStr.match(re30) is null
+PASS s1.match(re30) is ["x"]
+PASS s2.match(re30) is null
+PASS s3.match(re30) is ["aax"]
+PASS emptyStr.match(re31) is [""]
+PASS s1.match(re31) is [""]
+PASS s3.match(re31) is ["aa"]
+PASS s4.match(re31) is ["abab"]
+PASS emptyStr.match(re32) is [""]
+PASS s1.match(re32) is [""]
+PASS s2.match(re32) is ["aaaa"]
+PASS s4.match(re32) is ["abab"]
+PASS s5.match(re32) is ["ab"]
+PASS s6.match(re32) is [""]
+PASS emptyStr.match(re33) is [""]
+PASS s1.match(re33) is [""]
+PASS s7.match(re33) is ["g0"]
+PASS emptyStr.match(re34) is [""]
+PASS s1.match(re34) is [""]
+PASS s2.match(re34) is [""]
+PASS s3.match(re34) is [""]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/regexp-zero-length-alternatives.js b/deps/v8/test/webkit/regexp-zero-length-alternatives.js
new file mode 100644 (file)
index 0000000..6e18de0
--- /dev/null
@@ -0,0 +1,275 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test regular expression processing with alternatives that match consuming no characters'
+);
+
+var emptyStr = "";
+var s1 = "xxxx";
+var s2 = "aaaa";
+var s3 = "aax";
+var s4 = "abab";
+var s5 = "ab";
+var s6 = "xabx";
+var s7 = "g0";
+
+// Non-capturing empty first alternative greedy '*'
+var re1 = new RegExp(/(?:|a|z)*/);
+shouldBe('emptyStr.match(re1)', '[""]');
+shouldBe('s1.match(re1)', '[""]');
+shouldBe('s2.match(re1)', '["aaaa"]');
+shouldBe('s3.match(re1)', '["aa"]');
+
+// Non-capturing empty middle alternative greedy '*'
+var re2 = new RegExp(/(?:a||z)*/);
+shouldBe('emptyStr.match(re2)', '[""]');
+shouldBe('s1.match(re2)', '[""]');
+shouldBe('s2.match(re2)', '["aaaa"]');
+shouldBe('s3.match(re2)', '["aa"]');
+
+// Non-capturing empty last alternative greedy '*'
+var re3 = new RegExp(/(?:a|z|)*/);
+shouldBe('emptyStr.match(re3)', '[""]');
+shouldBe('s1.match(re3)', '[""]');
+shouldBe('s2.match(re3)', '["aaaa"]');
+shouldBe('s3.match(re3)', '["aa"]');
+
+// Capturing empty first alternative greedy '*'
+var re4 = new RegExp(/(|a|z)*/);
+shouldBe('emptyStr.match(re4)', '["", undefined]');
+shouldBe('s1.match(re4)', '["", undefined]');
+shouldBe('s2.match(re4)', '["aaaa", "a"]');
+shouldBe('s3.match(re4)', '["aa", "a"]');
+
+// Capturing empty middle alternative greedy '*'
+var re5 = new RegExp(/(a||z)*/);
+shouldBe('emptyStr.match(re5)', '["", undefined]');
+shouldBe('s1.match(re5)', '["", undefined]');
+shouldBe('s2.match(re5)', '["aaaa", "a"]');
+shouldBe('s3.match(re5)', '["aa", "a"]');
+
+// Capturing empty last alternative greedy '*'
+var re6 = new RegExp(/(a|z|)*/);
+shouldBe('emptyStr.match(re6)', '["", undefined]');
+shouldBe('s1.match(re6)', '["", undefined]');
+shouldBe('s2.match(re6)', '["aaaa", "a"]');
+shouldBe('s3.match(re6)', '["aa", "a"]');
+
+// Non-capturing empty first alternative fixed-count
+var re7 = new RegExp(/(?:|a|z){2,5}/);
+shouldBe('emptyStr.match(re7)', '[""]');
+shouldBe('s1.match(re7)', '[""]');
+shouldBe('s2.match(re7)', '["aaa"]');
+shouldBe('s3.match(re7)', '["aa"]');
+
+// Non-capturing empty middle alternative fixed-count
+var re8 = new RegExp(/(?:a||z){2,5}/);
+shouldBe('emptyStr.match(re8)', '[""]');
+shouldBe('s1.match(re8)', '[""]');
+shouldBe('s2.match(re8)', '["aaaa"]');
+shouldBe('s3.match(re8)', '["aa"]');
+
+// Non-capturing empty last alternative fixed-count
+var re9 = new RegExp(/(?:a|z|){2,5}/);
+shouldBe('emptyStr.match(re9)', '[""]');
+shouldBe('s1.match(re9)', '[""]');
+shouldBe('s2.match(re9)', '["aaaa"]');
+shouldBe('s3.match(re9)', '["aa"]');
+
+// Non-capturing empty first alternative non-greedy '*'
+var re10 = new RegExp(/(?:|a|z)*?/);
+shouldBe('emptyStr.match(re10)', '[""]');
+shouldBe('s1.match(re10)', '[""]');
+shouldBe('s2.match(re10)', '[""]');
+shouldBe('s3.match(re10)', '[""]');
+
+// Non-capturing empty middle alternative non-greedy '*'
+var re11 = new RegExp(/(?:a||z)*?/);
+shouldBe('emptyStr.match(re11)', '[""]');
+shouldBe('s1.match(re11)', '[""]');
+shouldBe('s2.match(re11)', '[""]');
+shouldBe('s3.match(re11)', '[""]');
+
+// Non-capturing empty last alternative non-greedy '*'
+var re12 = new RegExp(/(?:a|z|)*?/);
+shouldBe('emptyStr.match(re12)', '[""]');
+shouldBe('s1.match(re12)', '[""]');
+shouldBe('s2.match(re12)', '[""]');
+shouldBe('s3.match(re12)', '[""]');
+
+// Capturing empty first alternative non-greedy '*'
+var re13 = new RegExp(/(|a|z)*?/);
+shouldBe('emptyStr.match(re13)', '["", undefined]');
+shouldBe('s1.match(re13)', '["", undefined]');
+shouldBe('s2.match(re13)', '["", undefined]');
+shouldBe('s3.match(re13)', '["", undefined]');
+
+// Capturing empty middle alternative non-greedy '*'
+var re14 = new RegExp(/(a||z)*?/);
+shouldBe('emptyStr.match(re14)', '["", undefined]');
+shouldBe('s1.match(re14)', '["", undefined]');
+shouldBe('s2.match(re14)', '["", undefined]');
+shouldBe('s3.match(re14)', '["", undefined]');
+
+// Capturing empty last alternative non-greedy '*'
+var re15 = new RegExp(/(a|z|)*?/);
+shouldBe('emptyStr.match(re15)', '["", undefined]');
+shouldBe('s1.match(re15)', '["", undefined]');
+shouldBe('s2.match(re15)', '["", undefined]');
+shouldBe('s3.match(re15)', '["", undefined]');
+
+// Non-capturing empty first alternative greedy '?'
+var re16 = new RegExp(/(?:|a|z)?/);
+shouldBe('emptyStr.match(re16)', '[""]');
+shouldBe('s1.match(re16)', '[""]');
+shouldBe('s2.match(re16)', '["a"]');
+shouldBe('s3.match(re16)', '["a"]');
+
+// Non-capturing empty middle alternative greedy '?'
+var re17 = new RegExp(/(?:a||z)?/);
+shouldBe('emptyStr.match(re17)', '[""]');
+shouldBe('s1.match(re17)', '[""]');
+shouldBe('s2.match(re17)', '["a"]');
+shouldBe('s3.match(re17)', '["a"]');
+
+// Non-capturing empty last alternative greedy '?'
+var re18 = new RegExp(/(?:a|z|)?/);
+shouldBe('emptyStr.match(re18)', '[""]');
+shouldBe('s1.match(re18)', '[""]');
+shouldBe('s2.match(re18)', '["a"]');
+shouldBe('s3.match(re18)', '["a"]');
+
+// Capturing empty first alternative greedy '?'
+var re19 = new RegExp(/(|a|z)?/);
+shouldBe('emptyStr.match(re19)', '["", undefined]');
+shouldBe('s1.match(re19)', '["", undefined]');
+shouldBe('s2.match(re19)', '["a", "a"]');
+shouldBe('s3.match(re19)', '["a", "a"]');
+
+// Capturing empty middle alternative greedy '?'
+var re20 = new RegExp(/(a||z)?/);
+shouldBe('emptyStr.match(re20)', '["", undefined]');
+shouldBe('s1.match(re20)', '["", undefined]');
+shouldBe('s2.match(re20)', '["a", "a"]');
+shouldBe('s3.match(re20)', '["a", "a"]');
+
+// Capturing empty last alternative greedy '?'
+var re21 = new RegExp(/(a|z|)?/);
+shouldBe('emptyStr.match(re21)', '["", undefined]');
+shouldBe('s1.match(re21)', '["", undefined]');
+shouldBe('s2.match(re21)', '["a", "a"]');
+shouldBe('s3.match(re21)', '["a", "a"]');
+
+// Non-capturing empty first alternative non-greedy '?'
+var re22 = new RegExp(/(?:|a|z)??/);
+shouldBe('emptyStr.match(re22)', '[""]');
+shouldBe('s1.match(re22)', '[""]');
+shouldBe('s2.match(re22)', '[""]');
+shouldBe('s3.match(re22)', '[""]');
+
+// Non-capturing empty middle alternative non-greedy '?'
+var re23 = new RegExp(/(?:a||z)??/);
+shouldBe('emptyStr.match(re23)', '[""]');
+shouldBe('s1.match(re23)', '[""]');
+shouldBe('s2.match(re23)', '[""]');
+shouldBe('s3.match(re23)', '[""]');
+
+// Non-capturing empty last alternative non-greedy '?'
+var re24 = new RegExp(/(?:a|z|)??/);
+shouldBe('emptyStr.match(re24)', '[""]');
+shouldBe('s1.match(re24)', '[""]');
+shouldBe('s2.match(re24)', '[""]');
+shouldBe('s3.match(re24)', '[""]');
+
+// Capturing empty first alternative non-greedy '?'
+var re25 = new RegExp(/(|a|z)??/);
+shouldBe('emptyStr.match(re25)', '["", undefined]');
+shouldBe('s1.match(re25)', '["", undefined]');
+shouldBe('s2.match(re25)', '["", undefined]');
+shouldBe('s3.match(re25)', '["", undefined]');
+
+// Capturing empty middle alternative non-greedy '?'
+var re26 = new RegExp(/(a||z)??/);
+shouldBe('emptyStr.match(re26)', '["", undefined]');
+shouldBe('s1.match(re26)', '["", undefined]');
+shouldBe('s2.match(re26)', '["", undefined]');
+shouldBe('s3.match(re26)', '["", undefined]');
+
+// Capturing empty last alternative non-greedy '?'
+var re27 = new RegExp(/(a|z|)??/);
+shouldBe('emptyStr.match(re27)', '["", undefined]');
+shouldBe('s1.match(re27)', '["", undefined]');
+shouldBe('s2.match(re27)', '["", undefined]');
+shouldBe('s3.match(re27)', '["", undefined]');
+
+// Non-capturing empty first alternative greedy '*' non-terminal
+var re28 = new RegExp(/(?:|a|z)*x/);
+shouldBe('emptyStr.match(re28)', 'null');
+shouldBe('s1.match(re28)', '["x"]');
+shouldBe('s2.match(re28)', 'null');
+shouldBe('s3.match(re28)', '["aax"]');
+
+// Non-capturing empty middle alternative greedy '*' non-terminal
+var re29 = new RegExp(/(?:a||z)*x/);
+shouldBe('emptyStr.match(re29)', 'null');
+shouldBe('s1.match(re29)', '["x"]');
+shouldBe('s2.match(re29)', 'null');
+shouldBe('s3.match(re29)', '["aax"]');
+
+// Non-capturing empty last alternative greedy '*' non-terminal
+var re30 = new RegExp(/(?:a|z|)*x/);
+shouldBe('emptyStr.match(re30)', 'null');
+shouldBe('s1.match(re30)', '["x"]');
+shouldBe('s2.match(re30)', 'null');
+shouldBe('s3.match(re30)', '["aax"]');
+
+// Non-capturing two possibly empty alternatives greedy '*'
+var re31 = new RegExp(/(?:a*|b*)*/);
+shouldBe('emptyStr.match(re31)', '[""]');
+shouldBe('s1.match(re31)', '[""]');
+shouldBe('s3.match(re31)', '["aa"]');
+shouldBe('s4.match(re31)', '["abab"]');
+
+// Non-capturing two possibly empty non-greedy alternatives non-greedy '*'
+var re32 = new RegExp(/(?:a*?|b*?)*/);
+shouldBe('emptyStr.match(re32)', '[""]');
+shouldBe('s1.match(re32)', '[""]');
+shouldBe('s2.match(re32)', '["aaaa"]');
+shouldBe('s4.match(re32)', '["abab"]');
+shouldBe('s5.match(re32)', '["ab"]');
+shouldBe('s6.match(re32)', '[""]');
+
+// Three possibly empty alternatives with greedy +
+var re33 = new RegExp(/(?:(?:(?!))|g?|0*\*?)+/);
+shouldBe('emptyStr.match(re33)', '[""]');
+shouldBe('s1.match(re33)', '[""]');
+shouldBe('s7.match(re33)', '["g0"]');
+
+// first alternative zero length fixed count
+var re34 = new RegExp(/(?:|a)/);
+shouldBe('emptyStr.match(re34)', '[""]');
+shouldBe('s1.match(re34)', '[""]');
+shouldBe('s2.match(re34)', '[""]');
+shouldBe('s3.match(re34)', '[""]');
+
diff --git a/deps/v8/test/webkit/registerCachingAcrossBranchTargets-expected.txt b/deps/v8/test/webkit/registerCachingAcrossBranchTargets-expected.txt
new file mode 100644 (file)
index 0000000..e36bbcd
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test makes sure we don't incorrectly cache virtual registers in system registers across VM branches
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS (true ? function(){ return true; } : a.b)() is true
+PASS (function(){ return true; } || a.b)() is true
+PASS (function(){ return (true ? function(){return true;} : a.b)(); })() is true
+PASS (function(){ return (function(){return true;} || a.b)(); })() is true
+PASS (function(){ var i = 0; var result = false; var a = {c:true}.c; do { result = a; i++; } while (i < 2); return result; })() is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/registerCachingAcrossBranchTargets.js b/deps/v8/test/webkit/registerCachingAcrossBranchTargets.js
new file mode 100644 (file)
index 0000000..e2e3e7c
--- /dev/null
@@ -0,0 +1,32 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test makes sure we don't incorrectly cache virtual registers in system registers across VM branches"
+);
+
+shouldBeTrue("(true ? function(){ return true; } : a.b)()");
+shouldBeTrue("(function(){ return true; } || a.b)()");
+shouldBeTrue("(function(){ return (true ? function(){return true;} : a.b)(); })()");
+shouldBeTrue("(function(){ return (function(){return true;} || a.b)(); })()");
+shouldBeTrue("(function(){ var i = 0; var result = false; var a = {c:true}.c; do { result = a; i++; } while (i < 2); return result; })()");
diff --git a/deps/v8/test/webkit/rehash-assign-expected.txt b/deps/v8/test/webkit/rehash-assign-expected.txt
new file mode 100644 (file)
index 0000000..b4c9d7c
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that assignments to global variables behave properly when the property table is rehashed.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 1 is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/rehash-assign.js b/deps/v8/test/webkit/rehash-assign.js
new file mode 100644 (file)
index 0000000..72aae07
--- /dev/null
@@ -0,0 +1,136 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Tests that assignments to global variables behave properly when the property table is rehashed.");
+
+var result;
+
+result = (function() {
+    a = 0;
+    b = 1;
+    c = 2;
+    d = 3;
+    e = 4;
+    f = 5;
+    g = 6;
+    h = 7;
+    i = 8
+    j = 9;
+    k = 10;
+    l = 11;
+    m = 12;
+    n = 13;
+    o = 14;
+    p = 15;
+    q = 16;
+    r = 17;
+    s = 18;
+    t = 19;
+    u = 20;
+    v = 21;
+    w = 22;
+    x = 23;
+    y = 24;
+    z = 25;
+    aa = 0;
+    bb = 1;
+    cc = 2;
+    dd = 3;
+    ee = 4;
+    ff = 5;
+    gg = 6;
+    hh = 7;
+    ii = 8;
+    jj = 9;
+    kk = 10;
+    ll = 11;
+    mm = 12;
+    nn = 13;
+    oo = 14;
+    pp = 15;
+    qq = 16;
+    rr = 17;
+    ss = 18;
+    tt = 19;
+    uu = 20;
+    vv = 21;
+    ww = 22;
+    xx = 23;
+    yy = 24;
+    zz = 25;
+    aaa = 0;
+    bbb = 1;
+    ccc = 2;
+    ddd = 3;
+    eee = 4;
+    fff = 5;
+    ggg = 6;
+    hhh = 7;
+    iii = 8;
+    jjj = 9;
+    kkk = 10;
+    lll = 11;
+    mmm = 12;
+    nnn = 13;
+    ooo = 14;
+    ppp = 15;
+    qqq = 16;
+    rrr = 17;
+    sss = 18;
+    ttt = 19;
+    uuu = 20;
+    vvv = 21;
+    www = 22;
+    xxx = 23;
+    yyy = 24;
+    zzz = 25;
+    aaaa = 0;
+    bbbb = 1;
+    cccc = 2;
+    dddd = 3;
+    eeee = 4;
+    ffff = 5;
+    gggg = 6;
+    hhhh = 7;
+    iiii = 8;
+    jjjj = 9;
+    kkkk = 10;
+    llll = 11;
+    mmmm = 12;
+    nnnn = 13;
+    oooo = 14;
+    pppp = 15;
+    qqqq = 16;
+    rrrr = 17;
+    ssss = 18;
+    tttt = 19;
+    uuuu = 20;
+    vvvv = 21;
+    wwww = 22;
+    xxxx = 23;
+    yyyy = 24;
+    zzzz = 25;
+    return 1;
+})();
+
+shouldBe(result.toString(), "1");
diff --git a/deps/v8/test/webkit/reserved-words-expected.txt b/deps/v8/test/webkit/reserved-words-expected.txt
new file mode 100644 (file)
index 0000000..51c7265
--- /dev/null
@@ -0,0 +1,95 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This file checks which ECMAScript 3 keywords are treated as reserved words.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+SHOULD BE RESERVED:
+PASS isReserved('break') is true
+PASS isReserved('case') is true
+PASS isReserved('catch') is true
+PASS isReserved('class') is true
+PASS isReserved('const') is true
+PASS isReserved('continue') is true
+PASS isReserved('debugger') is true
+PASS isReserved('default') is true
+PASS isReserved('delete') is true
+PASS isReserved('do') is true
+PASS isReserved('else') is true
+PASS isReserved('enum') is true
+PASS isReserved('export') is true
+PASS isReserved('extends') is true
+PASS isReserved('false') is true
+PASS isReserved('finally') is true
+PASS isReserved('for') is true
+PASS isReserved('function') is true
+PASS isReserved('if') is true
+PASS isReserved('import') is true
+PASS isReserved('in') is true
+PASS isReserved('instanceof') is true
+PASS isReserved('new') is true
+PASS isReserved('null') is true
+PASS isReserved('return') is true
+PASS isReserved('super') is true
+PASS isReserved('switch') is true
+PASS isReserved('this') is true
+PASS isReserved('throw') is true
+PASS isReserved('true') is true
+PASS isReserved('try') is true
+PASS isReserved('typeof') is true
+PASS isReserved('var') is true
+PASS isReserved('void') is true
+PASS isReserved('while') is true
+PASS isReserved('with') is true
+
+SHOULD NOT BE RESERVED:
+PASS isReserved('abstract') is false
+PASS isReserved('boolean') is false
+PASS isReserved('byte') is false
+PASS isReserved('char') is false
+PASS isReserved('double') is false
+PASS isReserved('final') is false
+PASS isReserved('float') is false
+PASS isReserved('goto') is false
+PASS isReserved('implements') is false
+PASS isReserved('int') is false
+PASS isReserved('interface') is false
+PASS isReserved('long') is false
+PASS isReserved('native') is false
+PASS isReserved('package') is false
+PASS isReserved('private') is false
+PASS isReserved('protected') is false
+PASS isReserved('public') is false
+PASS isReserved('short') is false
+PASS isReserved('static') is false
+PASS isReserved('synchronized') is false
+PASS isReserved('throws') is false
+PASS isReserved('transient') is false
+PASS isReserved('volatile') is false
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/reserved-words.js b/deps/v8/test/webkit/reserved-words.js
new file mode 100644 (file)
index 0000000..6e62cc1
--- /dev/null
@@ -0,0 +1,118 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+function isReserved(word)
+{
+    try {
+        eval("var " + word + ";");
+        return false;
+    } catch (e) {
+        return true;
+    }
+}
+
+var reservedWords = [
+    "break",
+    "case",
+    "catch",
+    "class",
+    "const",
+    "continue",
+    "debugger",
+    "default",
+    "delete",
+    "do",
+    "else",
+    "enum",
+    "export",
+    "extends",
+    "false",
+    "finally",
+    "for",
+    "function",
+    "if",
+    "import",
+    "in",
+    "instanceof",
+    "new",
+    "null",
+    "return",
+    "super",
+    "switch",
+    "this",
+    "throw",
+    "true",
+    "try",
+    "typeof",
+    "var",
+    "void",
+    "while",
+    "with"
+];
+
+var unreservedWords = [
+    "abstract",
+    "boolean",
+    "byte",
+    "char",
+    "double",
+    "final",
+    "float",
+    "goto",
+    "implements",
+    "int",
+    "interface",
+    "long",
+    "native",
+    "package",
+    "private",
+    "protected",
+    "public",
+    "short",
+    "static",
+    "synchronized",
+    "throws",
+    "transient",
+    "volatile"
+];
+
+description(
+"This file checks which ECMAScript 3 keywords are treated as reserved words."
+);
+
+reservedWords.sort();
+unreservedWords.sort();
+
+debug("SHOULD BE RESERVED:");
+for (var p in reservedWords) {
+    shouldBeTrue("isReserved('" + reservedWords[p] + "')");
+}
+
+debug("");
+
+debug("SHOULD NOT BE RESERVED:");
+for (var p in unreservedWords) {
+    shouldBeFalse("isReserved('" + unreservedWords[p] + "')");
+}
+
+debug("");
diff --git a/deps/v8/test/webkit/resize-array-assign-expected.txt b/deps/v8/test/webkit/resize-array-assign-expected.txt
new file mode 100644 (file)
index 0000000..5c72cf0
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that assignments into arrays behave properly after the array is resized.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 1 is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/resize-array-assign.js b/deps/v8/test/webkit/resize-array-assign.js
new file mode 100644 (file)
index 0000000..20d101f
--- /dev/null
@@ -0,0 +1,39 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Tests that assignments into arrays behave properly after the array is resized.")
+
+function resize(X) {
+  X[9999] = 0;
+  return 1;
+}
+
+function getZerothEntry(X) {
+  return X[0];
+}
+
+var A = new Array();
+A[0] = 0;
+A[0] = resize(A);
+
+shouldBe(getZerothEntry(A).toString(), "1");
diff --git a/deps/v8/test/webkit/resolve-arguments-from-scope-expected.txt b/deps/v8/test/webkit/resolve-arguments-from-scope-expected.txt
new file mode 100644 (file)
index 0000000..1c08f7c
--- /dev/null
@@ -0,0 +1,332 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that doing repeated resolves of 'arguments' from some nested scope doesn't crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/resolve-arguments-from-scope.js b/deps/v8/test/webkit/resolve-arguments-from-scope.js
new file mode 100644 (file)
index 0000000..def7158
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that doing repeated resolves of 'arguments' from some nested scope doesn't crash."
+);
+
+function bar() {
+    throw "omg";
+}
+
+function foo() {
+    try {
+        bar();
+    } catch (e) {
+        return arguments;
+    }
+}
+
+for (var i = 0; i < 100; ++i) {
+    shouldBe("foo(42)[0]", "42");
+    shouldBe("foo(42).length", "1");
+    shouldBe("foo(42, 23)[1]", "23");
+}
+
diff --git a/deps/v8/test/webkit/resources/standalone-post.js b/deps/v8/test/webkit/resources/standalone-post.js
new file mode 100644 (file)
index 0000000..d157e78
--- /dev/null
@@ -0,0 +1,26 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+wasPostTestScriptParsed = true;
+
+finishJSTest();
diff --git a/deps/v8/test/webkit/resources/standalone-pre.js b/deps/v8/test/webkit/resources/standalone-pre.js
new file mode 100644 (file)
index 0000000..f1cbe9f
--- /dev/null
@@ -0,0 +1,191 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+var wasPostTestScriptParsed = false;
+var errorMessage;
+
+function description(msg)
+{
+    print(msg);
+    print("\nOn success, you will see a series of \"PASS\" messages, followed by \"TEST COMPLETE\".\n");
+    print();
+}
+
+function debug(msg)
+{
+    print(msg);
+}
+
+function escapeString(text)
+{
+    return text.replace(/\0/g, "");
+}
+
+function testPassed(msg)
+{
+    print("PASS", escapeString(msg));
+}
+
+function testFailed(msg)
+{
+    errorMessage = msg;
+    print("FAIL", escapeString(msg));
+}
+
+function areArraysEqual(_a, _b)
+{
+    if (Object.prototype.toString.call(_a) != Object.prototype.toString.call([]))
+        return false;
+    if (_a.length !== _b.length)
+        return false;
+    for (var i = 0; i < _a.length; i++)
+        if (_a[i] !== _b[i])
+            return false;
+    return true;
+}
+
+function isMinusZero(n)
+{
+    // the only way to tell 0 from -0 in JS is the fact that 1/-0 is
+    // -Infinity instead of Infinity
+    return n === 0 && 1/n < 0;
+}
+
+function isResultCorrect(_actual, _expected)
+{
+    if (_expected === 0)
+        return _actual === _expected && (1/_actual) === (1/_expected);
+    if (_actual === _expected)
+        return true;
+    if (typeof(_expected) == "number" && isNaN(_expected))
+        return typeof(_actual) == "number" && isNaN(_actual);
+    if (Object.prototype.toString.call(_expected) == Object.prototype.toString.call([]))
+        return areArraysEqual(_actual, _expected);
+    return false;
+}
+
+function stringify(v)
+{
+    if (v === 0 && 1/v < 0)
+        return "-0";
+    else return "" + v;
+}
+
+function shouldBe(_a, _b)
+{
+  if (typeof _a != "string" || typeof _b != "string")
+    debug("WARN: shouldBe() expects string arguments");
+  var exception;
+  var _av;
+  try {
+     _av = eval(_a);
+  } catch (e) {
+     exception = e;
+  }
+  var _bv = eval(_b);
+
+  if (exception)
+    testFailed(_a + " should be " + _bv + ". Threw exception " + exception);
+  else if (isResultCorrect(_av, _bv))
+    testPassed(_a + " is " + _b);
+  else if (typeof(_av) == typeof(_bv))
+    testFailed(_a + " should be " + _bv + ". Was " + stringify(_av) + ".");
+  else
+    testFailed(_a + " should be " + _bv + " (of type " + typeof _bv + "). Was " + _av + " (of type " + typeof _av + ").");
+}
+
+function shouldBeTrue(_a) { shouldBe(_a, "true"); }
+function shouldBeFalse(_a) { shouldBe(_a, "false"); }
+function shouldBeNaN(_a) { shouldBe(_a, "NaN"); }
+function shouldBeNull(_a) { shouldBe(_a, "null"); }
+
+function shouldBeEqualToString(a, b)
+{
+  if (typeof a !== "string" || typeof b !== "string")
+    debug("WARN: shouldBeEqualToString() expects string arguments");
+  var unevaledString = JSON.stringify(b);
+  shouldBe(a, unevaledString);
+}
+
+function shouldBeUndefined(_a)
+{
+  var exception;
+  var _av;
+  try {
+     _av = eval(_a);
+  } catch (e) {
+     exception = e;
+  }
+
+  if (exception)
+    testFailed(_a + " should be undefined. Threw exception " + exception);
+  else if (typeof _av == "undefined")
+    testPassed(_a + " is undefined.");
+  else
+    testFailed(_a + " should be undefined. Was " + _av);
+}
+
+
+function shouldThrow(_a, _e)
+{
+  var exception;
+  var _av;
+  try {
+     _av = eval(_a);
+  } catch (e) {
+     exception = e;
+  }
+
+  var _ev;
+  if (_e)
+      _ev =  eval(_e);
+
+  if (exception) {
+    if (typeof _e == "undefined" || exception == _ev)
+      testPassed(_a + " threw exception " + exception + ".");
+    else
+      testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Threw exception " + exception + ".");
+  } else if (typeof _av == "undefined")
+    testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Was undefined.");
+  else
+    testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Was " + _av + ".");
+}
+
+function isSuccessfullyParsed()
+{
+    // FIXME: Remove this and only report unexpected syntax errors.
+    if (!errorMessage)
+        successfullyParsed = true;
+    shouldBeTrue("successfullyParsed");
+    debug("\nTEST COMPLETE\n");
+}
+
+// It's possible for an async test to call finishJSTest() before js-test-post.js
+// has been parsed.
+function finishJSTest()
+{
+    wasFinishJSTestCalled = true;
+    if (!wasPostTestScriptParsed)
+        return;
+    isSuccessfullyParsed();
+}
diff --git a/deps/v8/test/webkit/slash-lineterminator-parse-expected.txt b/deps/v8/test/webkit/slash-lineterminator-parse-expected.txt
new file mode 100644 (file)
index 0000000..2961957
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for correct handling ofr backslash-newline in JS strings.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS mystring is "hellothere"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/slash-lineterminator-parse.js b/deps/v8/test/webkit/slash-lineterminator-parse.js
new file mode 100644 (file)
index 0000000..b7a05bf
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks for correct handling ofr backslash-newline in JS strings."
+);
+
+mystring = 'hello\
+there';
+shouldBe('mystring', '"hellothere"');
diff --git a/deps/v8/test/webkit/sort-large-array-expected.txt b/deps/v8/test/webkit/sort-large-array-expected.txt
new file mode 100644 (file)
index 0000000..dd4a10b
--- /dev/null
@@ -0,0 +1,40 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests sorting an array with more than 10,000 values.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS test.length is 10010
+PASS test[9999] is 9999
+PASS test[10000] is 10000
+PASS test.slice(0, 20).join(', ') is '0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19'
+PASS test.slice(9990, 10010).join(', ') is '9990, 9991, 9992, 9993, 9994, 9995, 9996, 9997, 9998, 9999, 10000, 10001, 10002, 10003, 10004, 10005, 10006, 10007, 10008, 10009'
+PASS testNoValues.length is 10110
+PASS testNoValues[9999] is undefined
+PASS testNoValues[10000] is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/sort-large-array.js b/deps/v8/test/webkit/sort-large-array.js
new file mode 100644 (file)
index 0000000..43eed3f
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This tests sorting an array with more than 10,000 values.");
+
+var test = [];
+for (var i = 0; i < 10010; i++)
+    test.push(10009 - i);
+test.sort(function(a, b) {return a - b;});
+
+shouldBe("test.length", "10010");
+shouldBe("test[9999]", "9999");
+shouldBe("test[10000]", "10000");
+shouldBe("test.slice(0, 20).join(', ')", "'0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19'");
+shouldBe("test.slice(9990, 10010).join(', ')", "'9990, 9991, 9992, 9993, 9994, 9995, 9996, 9997, 9998, 9999, 10000, 10001, 10002, 10003, 10004, 10005, 10006, 10007, 10008, 10009'");
+
+var testNoValues = [];
+testNoValues.length = 10110;
+testNoValues.sort(function(a, b) {return a < b;});
+
+shouldBe("testNoValues.length", "10110");
+shouldBe("testNoValues[9999]", "undefined");
+shouldBe("testNoValues[10000]", "undefined");
diff --git a/deps/v8/test/webkit/sort-no-jit-code-crash-expected.txt b/deps/v8/test/webkit/sort-no-jit-code-crash-expected.txt
new file mode 100644 (file)
index 0000000..1ae90b1
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that non-numeric sort functions always have JIT code. This test passes if it does not crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/sort-no-jit-code-crash.js b/deps/v8/test/webkit/sort-no-jit-code-crash.js
new file mode 100644 (file)
index 0000000..1b495ac
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that non-numeric sort functions always have JIT code. This test passes if it does not crash."
+);
+
+function f()
+{
+}
+
+[].sort(f);
+
+function g()
+{
+}
+
+function h(x)
+{
+    x();
+}
+
+h(g);
+h(g);
+h(g);
+h(f);
diff --git a/deps/v8/test/webkit/sort-non-numbers-expected.txt b/deps/v8/test/webkit/sort-non-numbers-expected.txt
new file mode 100644 (file)
index 0000000..b5c7c85
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests numerically sorting an array of non-numbers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS String(test) is '1,2,3'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/sort-non-numbers.js b/deps/v8/test/webkit/sort-non-numbers.js
new file mode 100644 (file)
index 0000000..cd92c3a
--- /dev/null
@@ -0,0 +1,31 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This tests numerically sorting an array of non-numbers.");
+
+var test = [ "2", "1", "3" ];
+test.sort(function (v1, v2) {
+    return v1 - v2;
+});
+
+shouldBe("String(test)", "'1,2,3'");
diff --git a/deps/v8/test/webkit/sort-randomly-expected.txt b/deps/v8/test/webkit/sort-randomly-expected.txt
new file mode 100644 (file)
index 0000000..03828c5
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that passing an inconsistent compareFn to sort() doesn't cause a crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/sort-randomly.js b/deps/v8/test/webkit/sort-randomly.js
new file mode 100644 (file)
index 0000000..bd18472
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that passing an inconsistent compareFn to sort() doesn't cause a crash."
+);
+
+for (var attempt = 0; attempt < 100; ++attempt) {
+    var arr = [];
+    for (var i = 0; i < 64; ++i)
+        arr[i] = i;
+    arr.sort(function() { return 0.5 - Math.random(); });
+}
+
+// Sorting objects that change each time sort() looks at them is the same as using a random compareFn.
+function RandomObject() {
+    this.toString = function() { return (Math.random() * 100).toString(); }
+}
+
+for (var attempt = 0; attempt < 100; ++attempt) {
+    var arr = [];
+    for (var i = 0; i < 64; ++i)
+        arr[i] = new RandomObject;
+    arr.sort();
+}
diff --git a/deps/v8/test/webkit/sort-with-side-effecting-comparisons-expected.txt b/deps/v8/test/webkit/sort-with-side-effecting-comparisons-expected.txt
new file mode 100644 (file)
index 0000000..fbe8a31
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Checks that sorting an array with a side-effecting comparison function doesn't trigger assertions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS It worked.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/sort-with-side-effecting-comparisons.js b/deps/v8/test/webkit/sort-with-side-effecting-comparisons.js
new file mode 100644 (file)
index 0000000..5dda02f
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Checks that sorting an array with a side-effecting comparison function doesn't trigger assertions."
+);
+
+var array = [];
+
+for (var i = 0; i < 20000; ++i)
+    array.push(i);
+
+array.sort(function(a, b) {
+    array.shift();
+    if (a < b)
+        return -1;
+    if (a > b)
+        return 1;
+    return 0;
+});
+
+testPassed("It worked.");
+
+
diff --git a/deps/v8/test/webkit/sparse-array-expected.txt b/deps/v8/test/webkit/sparse-array-expected.txt
new file mode 100644 (file)
index 0000000..510f5ec
--- /dev/null
@@ -0,0 +1,45 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests some sparse array operations.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS array[0] is undefined
+PASS array[49999] is undefined
+PASS array[50000] is 100
+PASS array[50001] is undefined
+PASS array[0] is NaN
+PASS array[49999] is undefined
+PASS array[50000] is 100
+PASS array[50001] is undefined
+PASS array[0] is NaN
+PASS array[49999] is undefined
+PASS array[50000] is 100
+PASS array[50001] is undefined
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/sparse-array.js b/deps/v8/test/webkit/sparse-array.js
new file mode 100644 (file)
index 0000000..f471a3a
--- /dev/null
@@ -0,0 +1,50 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This tests some sparse array operations.'
+);
+
+var array = [ ];
+
+array[50000] = 100;
+
+shouldBe('array[0]', 'undefined');
+shouldBe('array[49999]', 'undefined');
+shouldBe('array[50000]', '100');
+shouldBe('array[50001]', 'undefined');
+array[0]++;
+shouldBe('array[0]', 'NaN');
+shouldBe('array[49999]', 'undefined');
+shouldBe('array[50000]', '100');
+shouldBe('array[50001]', 'undefined');
+// This tests oscillation between being sparse and dense.
+delete array[50000];
+array.length = 5;
+array[50000] = 100;
+shouldBe('array[0]', 'NaN');
+shouldBe('array[49999]', 'undefined');
+shouldBe('array[50000]', '100');
+shouldBe('array[50001]', 'undefined');
+
+debug('');
diff --git a/deps/v8/test/webkit/stack-overflow-catch-expected.txt b/deps/v8/test/webkit/stack-overflow-catch-expected.txt
new file mode 100644 (file)
index 0000000..70786a8
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test that when the stack overflows, the exception goes to the last frame before the overflow
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS gotWrongCatch is false
+PASS (stackLevel) is (level - 1)
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/stack-overflow-catch.js b/deps/v8/test/webkit/stack-overflow-catch.js
new file mode 100644 (file)
index 0000000..440148e
--- /dev/null
@@ -0,0 +1,76 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Test that when the stack overflows, the exception goes to the last frame before the overflow');
+
+var level = 0;
+var stackLevel = 0;
+var gotWrongCatch = false;
+
+function test1()
+{
+    var myLevel = level;
+    var dummy;
+
+    try {
+        level = level + 1;
+        // Dummy code to make this funciton different from test2()
+        dummy = level * level + 1;
+        if (dummy == 0)
+            debug('Should never get here!!!!');
+    } catch(err) {
+        gotWrongCatch = true;
+    }
+
+    try {
+        test2();
+    } catch(err) {
+        stackLevel = myLevel;
+    }
+}
+
+function test2()
+{
+    var myLevel = level;
+
+    // Dummy code to make this funciton different from test1()
+    if (gotWrongCatch)
+        debug('Should never get here!!!!');
+
+    try {
+        level = level + 1;
+    } catch(err) {
+        gotWrongCatch = true;
+    }
+
+    try {
+        test1();
+    } catch(err) {
+        stackLevel = myLevel;
+    }
+}
+
+test1();
+
+shouldBeFalse("gotWrongCatch");
+shouldBe("(stackLevel)", "(level - 1)");
diff --git a/deps/v8/test/webkit/stack-unwinding-expected.txt b/deps/v8/test/webkit/stack-unwinding-expected.txt
new file mode 100644 (file)
index 0000000..afb1225
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that JavaScriptCore does not crash when uwinding the stack that includes a host function.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Two host functions called in a row.
+WARN: shouldBe() expects string arguments
+PASS 5,6,7 is 5,6,7
+PASS Exception thrown and caught
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/stack-unwinding.js b/deps/v8/test/webkit/stack-unwinding.js
new file mode 100644 (file)
index 0000000..8c737fa
--- /dev/null
@@ -0,0 +1,65 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+
+"This test checks that JavaScriptCore does not crash when uwinding the stack that includes a host function."
+
+);
+
+function twoHostFunctions() {
+    var stack = [];
+    stack.push({ "args": twoHostFunctions.arguments });
+    stack.push({ "args": twoHostFunctions.arguments });
+    testPassed("Two host functions called in a row.");
+}
+
+function arrayOperatorFunction(element) {
+    return element + 5;
+}
+
+var myArray = new Array (0, 1, 2);
+function hostCallsUser(array) {
+    return array.map(arrayOperatorFunction);
+}
+
+function throwException() {
+    throw "Exception thrown";
+}
+
+function hostAndException() {
+    var stack = [];
+    stack.push({ "args": hostAndException.arguments });
+    throwException();
+}
+
+twoHostFunctions();
+myArray = hostCallsUser(myArray);
+shouldBe(myArray, new Array( 5, 6, 7 ) );
+
+try {
+    hostAndException();
+} catch (e) {
+    testPassed("Exception thrown and caught");
+}
+
diff --git a/deps/v8/test/webkit/statement-list-register-crash-expected.txt b/deps/v8/test/webkit/statement-list-register-crash-expected.txt
new file mode 100644 (file)
index 0000000..217ad1e
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that code generation of statement lists properly reference counts registers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS f() is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/statement-list-register-crash.js b/deps/v8/test/webkit/statement-list-register-crash.js
new file mode 100644 (file)
index 0000000..b35908e
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests that code generation of statement lists properly reference counts registers.'
+);
+
+function f()
+{
+    for(; ; i++) {
+        a = 0;
+
+        if (1)
+            return true;
+    }
+}
+
+shouldBeTrue("f()");
diff --git a/deps/v8/test/webkit/static-scope-object-expected.txt b/deps/v8/test/webkit/static-scope-object-expected.txt
new file mode 100644 (file)
index 0000000..b628095
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test ensures that the correct "this" object is used when calling named function expressions or exceptions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS namedFunctionExpression() is globalObject
+PASS throwingFunctionAsException() is globalObject
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/static-scope-object.js b/deps/v8/test/webkit/static-scope-object.js
new file mode 100644 (file)
index 0000000..90b4ef5
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('This test ensures that the correct "this" object is used when calling named function expressions or exceptions.');
+
+this.toString = function() { return "the global object" };
+var globalObject = this;
+
+function namedFunctionExpression() {
+    return function f(i) { if (i > 0) return this; return f(1); }(0);
+}
+
+shouldBe("namedFunctionExpression()", 'globalObject');
+
+function throwingFunctionAsException() {
+    try {
+        throw function(){ return this; }
+    } catch(e) {
+        return e();
+    }
+}
+
+shouldBe("throwingFunctionAsException()", 'globalObject');
diff --git a/deps/v8/test/webkit/strict-callback-this-expected.txt b/deps/v8/test/webkit/strict-callback-this-expected.txt
new file mode 100644 (file)
index 0000000..6154d97
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that a call to array/string prototype methods pass the correct this value (undefined) to strict callees.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS testArrayPrototypeSort(strictThrowThisString) is undefinedString
+PASS testArrayPrototypeFilter(strictThrowThisString) is undefinedString
+PASS testArrayPrototypeMap(strictThrowThisString) is undefinedString
+PASS testArrayPrototypeEvery(strictThrowThisString) is undefinedString
+PASS testArrayPrototypeForEach(strictThrowThisString) is undefinedString
+PASS testArrayPrototypeSome(strictThrowThisString) is undefinedString
+PASS testStringPrototypeReplace(strictThrowThisString) is undefinedString
+PASS testArrayPrototypeSort(nonstrictThrowThisString) is globalObjectString
+PASS testArrayPrototypeFilter(nonstrictThrowThisString) is globalObjectString
+PASS testArrayPrototypeMap(nonstrictThrowThisString) is globalObjectString
+PASS testArrayPrototypeEvery(nonstrictThrowThisString) is globalObjectString
+PASS testArrayPrototypeForEach(nonstrictThrowThisString) is globalObjectString
+PASS testArrayPrototypeSome(nonstrictThrowThisString) is globalObjectString
+PASS testStringPrototypeReplace(nonstrictThrowThisString) is globalObjectString
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/strict-callback-this.js b/deps/v8/test/webkit/strict-callback-this.js
new file mode 100644 (file)
index 0000000..8e1ea6b
--- /dev/null
@@ -0,0 +1,126 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that a call to array/string prototype methods pass the correct this value (undefined) to strict callees."
+);
+
+var undefinedString = String(undefined);
+var globalObjectString = String(this);
+
+function strictThrowThisString()
+{
+    "use strict";
+    throw String(this);
+}
+
+function nonstrictThrowThisString()
+{
+    throw String(this);
+}
+
+function testArrayPrototypeSort(callback)
+{
+    try {
+        [1,2].sort(callback);
+    } catch (e) {
+        return e;
+    }
+    return "FAILED";
+}
+
+function testArrayPrototypeFilter(callback)
+{
+    try {
+        [1,2].filter(callback);
+    } catch (e) {
+        return e;
+    }
+    return "FAILED";
+}
+
+function testArrayPrototypeMap(callback)
+{
+    try {
+        [1,2].map(callback);
+    } catch (e) {
+        return e;
+    }
+    return "FAILED";
+}
+
+function testArrayPrototypeEvery(callback)
+{
+    try {
+        [1,2].every(callback);
+    } catch (e) {
+        return e;
+    }
+    return "FAILED";
+}
+
+function testArrayPrototypeForEach(callback)
+{
+    try {
+        [1,2].forEach(callback);
+    } catch (e) {
+        return e;
+    }
+    return "FAILED";
+}
+
+function testArrayPrototypeSome(callback)
+{
+    try {
+        [1,2].some(callback);
+    } catch (e) {
+        return e;
+    }
+    return "FAILED";
+}
+
+function testStringPrototypeReplace(callback)
+{
+    try {
+        "1,2".replace('1', callback);
+    } catch (e) {
+        return e;
+    }
+    return "FAILED";
+}
+
+shouldBe('testArrayPrototypeSort(strictThrowThisString)', 'undefinedString');
+shouldBe('testArrayPrototypeFilter(strictThrowThisString)', 'undefinedString');
+shouldBe('testArrayPrototypeMap(strictThrowThisString)', 'undefinedString');
+shouldBe('testArrayPrototypeEvery(strictThrowThisString)', 'undefinedString');
+shouldBe('testArrayPrototypeForEach(strictThrowThisString)', 'undefinedString');
+shouldBe('testArrayPrototypeSome(strictThrowThisString)', 'undefinedString');
+shouldBe('testStringPrototypeReplace(strictThrowThisString)', 'undefinedString');
+
+shouldBe('testArrayPrototypeSort(nonstrictThrowThisString)', 'globalObjectString');
+shouldBe('testArrayPrototypeFilter(nonstrictThrowThisString)', 'globalObjectString');
+shouldBe('testArrayPrototypeMap(nonstrictThrowThisString)', 'globalObjectString');
+shouldBe('testArrayPrototypeEvery(nonstrictThrowThisString)', 'globalObjectString');
+shouldBe('testArrayPrototypeForEach(nonstrictThrowThisString)', 'globalObjectString');
+shouldBe('testArrayPrototypeSome(nonstrictThrowThisString)', 'globalObjectString');
+shouldBe('testStringPrototypeReplace(nonstrictThrowThisString)', 'globalObjectString');
diff --git a/deps/v8/test/webkit/strict-throw-type-error-expected.txt b/deps/v8/test/webkit/strict-throw-type-error-expected.txt
new file mode 100644 (file)
index 0000000..607498e
--- /dev/null
@@ -0,0 +1,43 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ThrowTypeError is a singleton object
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS functionCaller1 === functionCaller2 is true
+PASS functionCaller1 === functionArguments1 is true
+PASS functionCaller1 === argumentsCaller1 is true
+PASS functionCaller1 === argumentsCallee1 is true
+PASS functionCaller1 === boundCaller1 is true
+PASS functionCaller1 === boundArguments1 is true
+PASS functionCaller2 === functionArguments2 is true
+PASS functionCaller2 === argumentsCaller2 is true
+PASS functionCaller2 === argumentsCallee2 is true
+PASS functionCaller2 === boundCaller2 is true
+PASS functionCaller2 === boundArguments2 is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/strict-throw-type-error.js b/deps/v8/test/webkit/strict-throw-type-error.js
new file mode 100644 (file)
index 0000000..c9e34a3
--- /dev/null
@@ -0,0 +1,73 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("ThrowTypeError is a singleton object");
+
+function getter(object, name)
+{
+    Object.getOwnPropertyDescriptor(object, name).get;
+}
+
+function strictArgumentsFunction1()
+{
+    "use strict";
+    return arguments;
+}
+var strictArguments1 = strictArgumentsFunction1();
+var boundFunction1 = strictArgumentsFunction1.bind();
+var functionCaller1 = getter(strictArgumentsFunction1, "caller");
+var functionArguments1 = getter(strictArgumentsFunction1, "arguments");
+var argumentsCaller1 = getter(strictArguments1, "caller");
+var argumentsCallee1 = getter(strictArguments1, "callee");
+var boundCaller1 = getter(boundFunction1, "caller");
+var boundArguments1 = getter(boundFunction1, "arguments");
+
+function strictArgumentsFunction2()
+{
+    "use strict";
+    return arguments;
+}
+var strictArguments2 = strictArgumentsFunction2();
+var boundFunction2 = strictArgumentsFunction2.bind();
+var functionCaller2 = getter(strictArgumentsFunction2, "caller");
+var functionArguments2 = getter(strictArgumentsFunction2, "arguments");
+var argumentsCaller2 = getter(strictArguments2, "caller");
+var argumentsCallee2 = getter(strictArguments2, "callee");
+var boundCaller2 = getter(boundFunction2, "caller");
+var boundArguments2 = getter(boundFunction2, "arguments");
+
+shouldBeTrue('functionCaller1 === functionCaller2');
+
+shouldBeTrue('functionCaller1 === functionArguments1');
+shouldBeTrue('functionCaller1 === argumentsCaller1');
+shouldBeTrue('functionCaller1 === argumentsCallee1');
+shouldBeTrue('functionCaller1 === boundCaller1');
+shouldBeTrue('functionCaller1 === boundArguments1');
+
+shouldBeTrue('functionCaller2 === functionArguments2');
+shouldBeTrue('functionCaller2 === argumentsCaller2');
+shouldBeTrue('functionCaller2 === argumentsCallee2');
+shouldBeTrue('functionCaller2 === boundCaller2');
+shouldBeTrue('functionCaller2 === boundArguments2');
+
+successfullyParsed = true;
diff --git a/deps/v8/test/webkit/string-from-char-code-expected.txt b/deps/v8/test/webkit/string-from-char-code-expected.txt
new file mode 100644 (file)
index 0000000..694149e
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test ensures that String.fromCharCode doesn't crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS String.fromCharCode(88) is "X"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/string-from-char-code.js b/deps/v8/test/webkit/string-from-char-code.js
new file mode 100644 (file)
index 0000000..a07c075
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test ensures that String.fromCharCode doesn't crash."
+);
+
+shouldBe('String.fromCharCode(88)', '"X"');
diff --git a/deps/v8/test/webkit/string-index-overflow-expected.txt b/deps/v8/test/webkit/string-index-overflow-expected.txt
new file mode 100644 (file)
index 0000000..f01eb41
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that accessing a string by an out of bounds index doesn't crash, furthermore the string should not appear to have out-of-bounds numeric properties.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "x"[10] is undefined.
+PASS "x".hasOwnProperty(10) is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/string-index-overflow.js b/deps/v8/test/webkit/string-index-overflow.js
new file mode 100644 (file)
index 0000000..362bbd0
--- /dev/null
@@ -0,0 +1,29 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that accessing a string by an out of bounds index doesn't crash, furthermore the string should not appear to have out-of-bounds numeric properties."
+);
+
+shouldBeUndefined('"x"[10]');
+shouldBeFalse('"x".hasOwnProperty(10)');
diff --git a/deps/v8/test/webkit/string-property-deletion-expected.txt b/deps/v8/test/webkit/string-property-deletion-expected.txt
new file mode 100644 (file)
index 0000000..08e23ab
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This page tests deletion of properties on a string object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS str.length is 3
+PASS delete str.length is false
+PASS delete str[0] is false
+PASS delete str[1] is false
+PASS delete str[2] is false
+PASS delete str[3] is true
+PASS delete str[-1] is true
+PASS delete str[4294967294] is true
+PASS delete str[4294967295] is true
+PASS delete str[4294967296] is true
+PASS delete str[0.0] is false
+PASS delete str[0.1] is true
+PASS delete str['0.0'] is true
+PASS delete str.foo is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/string-property-deletion.js b/deps/v8/test/webkit/string-property-deletion.js
new file mode 100644 (file)
index 0000000..204dc9b
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This page tests deletion of properties on a string object.");
+
+var str = "abc";
+shouldBe('str.length', '3');
+shouldBe('delete str.length', 'false');
+shouldBe('delete str[0]', 'false');
+shouldBe('delete str[1]', 'false');
+shouldBe('delete str[2]', 'false');
+shouldBe('delete str[3]', 'true');
+shouldBe('delete str[-1]', 'true');
+shouldBe('delete str[4294967294]', 'true');
+shouldBe('delete str[4294967295]', 'true');
+shouldBe('delete str[4294967296]', 'true');
+shouldBe('delete str[0.0]', 'false');
+shouldBe('delete str[0.1]', 'true');
+shouldBe('delete str[\'0.0\']', 'true');
+shouldBe('delete str.foo', 'true');
diff --git a/deps/v8/test/webkit/string-property-iteration-expected.txt b/deps/v8/test/webkit/string-property-iteration-expected.txt
new file mode 100644 (file)
index 0000000..cf3cb5b
--- /dev/null
@@ -0,0 +1,38 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This page tests iteration of properties on a string object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS stringProperties.length is 5
+PASS stringProperties[0] is "0"
+PASS stringProperties[1] is "1"
+PASS stringProperties[2] is "2"
+PASS stringProperties[3] is "3"
+PASS stringProperties[4] is "4"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/string-property-iteration.js b/deps/v8/test/webkit/string-property-iteration.js
new file mode 100644 (file)
index 0000000..30e2e7a
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This page tests iteration of properties on a string object.");
+
+var stringProperties = new Array();
+var i = 0;
+for (var property in "abcde") {
+    stringProperties[i++] = property;
+}
+
+shouldBe('stringProperties.length', '5');
+shouldBe('stringProperties[0]', '"0"');
+shouldBe('stringProperties[1]', '"1"');
+shouldBe('stringProperties[2]', '"2"');
+shouldBe('stringProperties[3]', '"3"');
+shouldBe('stringProperties[4]', '"4"');
diff --git a/deps/v8/test/webkit/string-slice-abnormal-values-expected.txt b/deps/v8/test/webkit/string-slice-abnormal-values-expected.txt
new file mode 100644 (file)
index 0000000..e9b4a67
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for handling of abnormal values passed to String.slice
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "abc".slice(0) is "abc"
+PASS "abc".slice(0, Infinity) is "abc"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/string-slice-abnormal-values.js b/deps/v8/test/webkit/string-slice-abnormal-values.js
new file mode 100644 (file)
index 0000000..dda6569
--- /dev/null
@@ -0,0 +1,29 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks for handling of abnormal values passed to String.slice"
+);
+
+shouldBe('"abc".slice(0)', '"abc"');
+shouldBe('"abc".slice(0, Infinity)', '"abc"');
diff --git a/deps/v8/test/webkit/string-sort-expected.txt b/deps/v8/test/webkit/string-sort-expected.txt
new file mode 100644 (file)
index 0000000..79548fe
--- /dev/null
@@ -0,0 +1,52 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This page tests sorting of string values
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "12" < "123" is true
+PASS ["12","123"].sort().toString() is "12,123"
+PASS "123" < "13" is true
+PASS ["123","13"].sort().toString() is "123,13"
+PASS "" < " " is true
+PASS [""," "].sort().toString() is ", "
+PASS "close" < "closed" is true
+PASS ["close","closed"].sort().toString() is "close,closed"
+PASS "a" < "~" is true
+PASS ["a","~"].sort().toString() is "a,~"
+PASS "_" < "a" is true
+PASS ["_","a"].sort().toString() is "_,a"
+PASS "0" < "A" is true
+PASS ["0","A"].sort().toString() is "0,A"
+PASS "-" < "0" is true
+PASS ["-","0"].sort().toString() is "-,0"
+PASS " " < "-" is true
+PASS [" ","-"].sort().toString() is " ,-"
+PASS "A" < "ABC" is true
+PASS ["A","ABC"].sort().toString() is "A,ABC"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/string-sort.js b/deps/v8/test/webkit/string-sort.js
new file mode 100644 (file)
index 0000000..df4cacb
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This page tests sorting of string values");
+
+function shouldBeInThisOrder(a)
+{
+    shouldBeTrue('"' + a[0] + '"' + " < " + '"' + a[1] + '"');
+    shouldBe('[' + '"' + a[0] + '"' + ',' + '"' + a[1] + '"' + '].sort().toString()', '"' + a + '"');
+}
+
+shouldBeInThisOrder(["12", "123"]);
+shouldBeInThisOrder(["123", "13"]);
+shouldBeInThisOrder(["", " "]);
+shouldBeInThisOrder(["close", "closed"]);
+shouldBeInThisOrder(["a", "~"]);
+shouldBeInThisOrder(["_", "a"]);
+shouldBeInThisOrder(["0", "A"]);
+shouldBeInThisOrder(["-", "0"]);
+shouldBeInThisOrder([" ", "-"]);
+shouldBeInThisOrder(["A", "ABC"]);
diff --git a/deps/v8/test/webkit/string-substr-expected.txt b/deps/v8/test/webkit/string-substr-expected.txt
new file mode 100644 (file)
index 0000000..21bed3a
--- /dev/null
@@ -0,0 +1,63 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks the boundary cases of substr().
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 'bar'.substr(0) is 'bar'
+PASS 'bar'.substr(3) is ''
+PASS 'bar'.substr(4) is ''
+PASS 'bar'.substr(-1) is 'r'
+PASS 'bar'.substr(-3) is 'bar'
+PASS 'bar'.substr(-4) is 'bar'
+PASS 'bar'.substr(0, 0) is ''
+PASS 'bar'.substr(0, 1) is 'b'
+PASS 'bar'.substr(0, 3) is 'bar'
+PASS 'bar'.substr(0, 4) is 'bar'
+PASS 'bar'.substr(1, 0) is ''
+PASS 'bar'.substr(1, 1) is 'a'
+PASS 'bar'.substr(1, 2) is 'ar'
+PASS 'bar'.substr(1, 3) is 'ar'
+PASS 'bar'.substr(3, 0) is ''
+PASS 'bar'.substr(3, 1) is ''
+PASS 'bar'.substr(3, 3) is ''
+PASS 'bar'.substr(4, 0) is ''
+PASS 'bar'.substr(4, 1) is ''
+PASS 'bar'.substr(4, 3) is ''
+PASS 'bar'.substr(-1, 0) is ''
+PASS 'bar'.substr(-1, 1) is 'r'
+PASS 'bar'.substr(-3, 1) is 'b'
+PASS 'bar'.substr(-3, 3) is 'bar'
+PASS 'bar'.substr(-3, 4) is 'bar'
+PASS 'bar'.substr(-4) is 'bar'
+PASS 'bar'.substr(-4, 0) is ''
+PASS 'bar'.substr(-4, 1) is 'b'
+PASS 'bar'.substr(-4, 3) is 'bar'
+PASS 'bar'.substr(-4, 4) is 'bar'
+PASS 'GMAIL_IMP=bf-i%2Fd-0-0%2Ftl-v'.substr(10) is 'bf-i%2Fd-0-0%2Ftl-v'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/string-substr.js b/deps/v8/test/webkit/string-substr.js
new file mode 100644 (file)
index 0000000..c9a4274
--- /dev/null
@@ -0,0 +1,66 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks the boundary cases of substr()."
+);
+
+shouldBe("'bar'.substr(0)", "'bar'");
+shouldBe("'bar'.substr(3)", "''");
+shouldBe("'bar'.substr(4)", "''");
+shouldBe("'bar'.substr(-1)", "'r'");
+shouldBe("'bar'.substr(-3)", "'bar'");
+shouldBe("'bar'.substr(-4)", "'bar'");
+
+shouldBe("'bar'.substr(0, 0)", "''");
+shouldBe("'bar'.substr(0, 1)", "'b'");
+shouldBe("'bar'.substr(0, 3)", "'bar'");
+shouldBe("'bar'.substr(0, 4)", "'bar'");
+
+shouldBe("'bar'.substr(1, 0)", "''");
+shouldBe("'bar'.substr(1, 1)", "'a'");
+shouldBe("'bar'.substr(1, 2)", "'ar'");
+shouldBe("'bar'.substr(1, 3)", "'ar'");
+
+shouldBe("'bar'.substr(3, 0)", "''");
+shouldBe("'bar'.substr(3, 1)", "''");
+shouldBe("'bar'.substr(3, 3)", "''");
+
+shouldBe("'bar'.substr(4, 0)", "''");
+shouldBe("'bar'.substr(4, 1)", "''");
+shouldBe("'bar'.substr(4, 3)", "''");
+
+shouldBe("'bar'.substr(-1, 0)", "''");
+shouldBe("'bar'.substr(-1, 1)", "'r'");
+
+shouldBe("'bar'.substr(-3, 1)", "'b'");
+shouldBe("'bar'.substr(-3, 3)", "'bar'");
+shouldBe("'bar'.substr(-3, 4)", "'bar'");
+
+shouldBe("'bar'.substr(-4)", "'bar'");
+shouldBe("'bar'.substr(-4, 0)", "''");
+shouldBe("'bar'.substr(-4, 1)", "'b'");
+shouldBe("'bar'.substr(-4, 3)", "'bar'");
+shouldBe("'bar'.substr(-4, 4)", "'bar'");
+
+shouldBe("'GMAIL_IMP=bf-i%2Fd-0-0%2Ftl-v'.substr(10)", "'bf-i%2Fd-0-0%2Ftl-v'");
diff --git a/deps/v8/test/webkit/string-trim-expected.txt b/deps/v8/test/webkit/string-trim-expected.txt
new file mode 100644 (file)
index 0000000..9540f1c
--- /dev/null
@@ -0,0 +1,134 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks String.trim(), String.trimLeft() and String.trimRight() methods.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS whitespace[0].s.trim() is ''
+PASS whitespace[0].s.trimLeft() is ''
+PASS whitespace[0].s.trimRight() is ''
+PASS whitespace[1].s.trim() is ''
+PASS whitespace[1].s.trimLeft() is ''
+PASS whitespace[1].s.trimRight() is ''
+PASS whitespace[2].s.trim() is ''
+PASS whitespace[2].s.trimLeft() is ''
+PASS whitespace[2].s.trimRight() is ''
+PASS whitespace[3].s.trim() is ''
+PASS whitespace[3].s.trimLeft() is ''
+PASS whitespace[3].s.trimRight() is ''
+PASS whitespace[4].s.trim() is ''
+PASS whitespace[4].s.trimLeft() is ''
+PASS whitespace[4].s.trimRight() is ''
+PASS whitespace[5].s.trim() is ''
+PASS whitespace[5].s.trimLeft() is ''
+PASS whitespace[5].s.trimRight() is ''
+PASS whitespace[6].s.trim() is ''
+PASS whitespace[6].s.trimLeft() is ''
+PASS whitespace[6].s.trimRight() is ''
+PASS whitespace[7].s.trim() is ''
+PASS whitespace[7].s.trimLeft() is ''
+PASS whitespace[7].s.trimRight() is ''
+PASS whitespace[8].s.trim() is ''
+PASS whitespace[8].s.trimLeft() is ''
+PASS whitespace[8].s.trimRight() is ''
+PASS whitespace[9].s.trim() is ''
+PASS whitespace[9].s.trimLeft() is ''
+PASS whitespace[9].s.trimRight() is ''
+PASS whitespace[10].s.trim() is ''
+PASS whitespace[10].s.trimLeft() is ''
+PASS whitespace[10].s.trimRight() is ''
+PASS whitespace[11].s.trim() is ''
+PASS whitespace[11].s.trimLeft() is ''
+PASS whitespace[11].s.trimRight() is ''
+PASS whitespace[12].s.trim() is ''
+PASS whitespace[12].s.trimLeft() is ''
+PASS whitespace[12].s.trimRight() is ''
+PASS whitespace[13].s.trim() is ''
+PASS whitespace[13].s.trimLeft() is ''
+PASS whitespace[13].s.trimRight() is ''
+PASS whitespace[14].s.trim() is ''
+PASS whitespace[14].s.trimLeft() is ''
+PASS whitespace[14].s.trimRight() is ''
+PASS whitespace[15].s.trim() is ''
+PASS whitespace[15].s.trimLeft() is ''
+PASS whitespace[15].s.trimRight() is ''
+PASS whitespace[16].s.trim() is ''
+PASS whitespace[16].s.trimLeft() is ''
+PASS whitespace[16].s.trimRight() is ''
+PASS whitespace[17].s.trim() is ''
+PASS whitespace[17].s.trimLeft() is ''
+PASS whitespace[17].s.trimRight() is ''
+PASS whitespace[18].s.trim() is ''
+PASS whitespace[18].s.trimLeft() is ''
+PASS whitespace[18].s.trimRight() is ''
+PASS whitespace[19].s.trim() is ''
+PASS whitespace[19].s.trimLeft() is ''
+PASS whitespace[19].s.trimRight() is ''
+PASS whitespace[20].s.trim() is ''
+PASS whitespace[20].s.trimLeft() is ''
+PASS whitespace[20].s.trimRight() is ''
+PASS whitespace[21].s.trim() is ''
+PASS whitespace[21].s.trimLeft() is ''
+PASS whitespace[21].s.trimRight() is ''
+PASS wsString.trim() is ''
+PASS wsString.trimLeft() is ''
+PASS wsString.trimRight() is ''
+PASS trimString.trim() is testString
+PASS trimString.trimLeft() is leftTrimString
+PASS trimString.trimRight() is rightTrimString
+PASS leftTrimString.trim() is testString
+PASS leftTrimString.trimLeft() is leftTrimString
+PASS leftTrimString.trimRight() is testString
+PASS rightTrimString.trim() is testString
+PASS rightTrimString.trimLeft() is testString
+PASS rightTrimString.trimRight() is rightTrimString
+PASS trim.call(0) is '0'
+PASS trimLeft.call(0) is '0'
+PASS trimRight.call(0) is '0'
+PASS trim.call(Infinity) is 'Infinity'
+PASS trimLeft.call(Infinity) is 'Infinity'
+PASS trimRight.call(Infinity) is 'Infinity'
+PASS trim.call(NaN) is 'NaN'
+PASS trimLeft.call(NaN) is 'NaN'
+PASS trimRight.call(NaN) is 'NaN'
+PASS trim.call(true) is 'true'
+PASS trimLeft.call(true) is 'true'
+PASS trimRight.call(true) is 'true'
+PASS trim.call(false) is 'false'
+PASS trimLeft.call(false) is 'false'
+PASS trimRight.call(false) is 'false'
+PASS trim.call(({})) is '[object Object]'
+PASS trimLeft.call(({})) is '[object Object]'
+PASS trimRight.call(({})) is '[object Object]'
+PASS trim.call(({toString:function(){return 'wibble'}})) is 'wibble'
+PASS trimLeft.call(({toString:function(){return 'wibble'}})) is 'wibble'
+PASS trimRight.call(({toString:function(){return 'wibble'}})) is 'wibble'
+PASS trim.call(['an','array']) is 'an,array'
+PASS trimLeft.call(['an','array']) is 'an,array'
+PASS trimRight.call(['an','array']) is 'an,array'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/string-trim.js b/deps/v8/test/webkit/string-trim.js
new file mode 100644 (file)
index 0000000..e644754
--- /dev/null
@@ -0,0 +1,95 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This test checks String.trim(), String.trimLeft() and String.trimRight() methods.");
+
+//references to trim(), trimLeft() and trimRight() functions for testing Function's *.call() and *.apply() methods
+var trim            = String.prototype.trim;
+var trimLeft        = String.prototype.trimLeft;
+var trimRight       = String.prototype.trimRight;
+
+var testString      = 'foo bar';
+var trimString      = '';
+var leftTrimString  = '';
+var rightTrimString = '';
+var wsString        = '';
+
+var whitespace      = [
+    {s : '\u0009', t : 'HORIZONTAL TAB'},
+    {s : '\u000A', t : 'LINE FEED OR NEW LINE'},
+    {s : '\u000B', t : 'VERTICAL TAB'},
+    {s : '\u000C', t : 'FORMFEED'},
+    {s : '\u000D', t : 'CARRIAGE RETURN'},
+    {s : '\u0020', t : 'SPACE'},
+    {s : '\u00A0', t : 'NO-BREAK SPACE'},
+    {s : '\u2000', t : 'EN QUAD'},
+    {s : '\u2001', t : 'EM QUAD'},
+    {s : '\u2002', t : 'EN SPACE'},
+    {s : '\u2003', t : 'EM SPACE'},
+    {s : '\u2004', t : 'THREE-PER-EM SPACE'},
+    {s : '\u2005', t : 'FOUR-PER-EM SPACE'},
+    {s : '\u2006', t : 'SIX-PER-EM SPACE'},
+    {s : '\u2007', t : 'FIGURE SPACE'},
+    {s : '\u2008', t : 'PUNCTUATION SPACE'},
+    {s : '\u2009', t : 'THIN SPACE'},
+    {s : '\u200A', t : 'HAIR SPACE'},
+    {s : '\u3000', t : 'IDEOGRAPHIC SPACE'},
+    {s : '\u2028', t : 'LINE SEPARATOR'},
+    {s : '\u2029', t : 'PARAGRAPH SEPARATOR'},
+    {s : '\u200B', t : 'ZERO WIDTH SPACE (category Cf)'}
+];
+
+for (var i = 0; i < whitespace.length; i++) {
+    shouldBe("whitespace["+i+"].s.trim()", "''");
+    shouldBe("whitespace["+i+"].s.trimLeft()", "''");
+    shouldBe("whitespace["+i+"].s.trimRight()", "''");
+    wsString += whitespace[i].s;
+}
+
+trimString      = wsString   + testString + wsString;
+leftTrimString  = testString + wsString;   //trimmed from the left
+rightTrimString = wsString   + testString; //trimmed from the right
+
+shouldBe("wsString.trim()",      "''");
+shouldBe("wsString.trimLeft()",  "''");
+shouldBe("wsString.trimRight()", "''");
+
+shouldBe("trimString.trim()",      "testString");
+shouldBe("trimString.trimLeft()",  "leftTrimString");
+shouldBe("trimString.trimRight()", "rightTrimString");
+
+shouldBe("leftTrimString.trim()",      "testString");
+shouldBe("leftTrimString.trimLeft()",  "leftTrimString");
+shouldBe("leftTrimString.trimRight()", "testString");
+
+shouldBe("rightTrimString.trim()",      "testString");
+shouldBe("rightTrimString.trimLeft()",  "testString");
+shouldBe("rightTrimString.trimRight()", "rightTrimString");
+
+var testValues = ["0", "Infinity", "NaN", "true", "false", "({})", "({toString:function(){return 'wibble'}})", "['an','array']"];
+for (var i = 0; i < testValues.length; i++) {
+    shouldBe("trim.call("+testValues[i]+")", "'"+eval(testValues[i])+"'");
+    shouldBe("trimLeft.call("+testValues[i]+")", "'"+eval(testValues[i])+"'");
+    shouldBe("trimRight.call("+testValues[i]+")", "'"+eval(testValues[i])+"'");
+}
+
diff --git a/deps/v8/test/webkit/string_replace-expected.txt b/deps/v8/test/webkit/string_replace-expected.txt
new file mode 100644 (file)
index 0000000..1293993
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This will test string.replace with {n, m} regexp patterns.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "YY".replace(/Y{1,4}/g,"YYYY") is "YYYY"
+PASS "MM".replace(/M{1,2}/g,"M") is "M"
+PASS "YY".replace(/Y{1,4}/g,"MMMM") is "MMMM"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/string_replace.js b/deps/v8/test/webkit/string_replace.js
new file mode 100644 (file)
index 0000000..be11835
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This will test string.replace with {n, m} regexp patterns."
+);
+
+shouldBe('"YY".replace(/Y{1,4}/g,"YYYY")', '"YYYY"');
+shouldBe('"MM".replace(/M{1,2}/g,"M")', '"M"');
+shouldBe('"YY".replace(/Y{1,4}/g,"MMMM")', '"MMMM"');
diff --git a/deps/v8/test/webkit/testcfg.py b/deps/v8/test/webkit/testcfg.py
new file mode 100644 (file)
index 0000000..e4e3f8f
--- /dev/null
@@ -0,0 +1,159 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+#       notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+#       copyright notice, this list of conditions and the following
+#       disclaimer in the documentation and/or other materials provided
+#       with the distribution.
+#     * Neither the name of Google Inc. nor the names of its
+#       contributors may be used to endorse or promote products derived
+#       from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import itertools
+import os
+import re
+
+from testrunner.local import testsuite
+from testrunner.objects import testcase
+
+FLAGS_PATTERN = re.compile(r"//\s+Flags:(.*)")
+FILES_PATTERN = re.compile(r"//\s+Files:(.*)")
+SELF_SCRIPT_PATTERN = re.compile(r"//\s+Env: TEST_FILE_NAME")
+
+
+# TODO (machenbach): Share commonalities with mjstest.
+class WebkitTestSuite(testsuite.TestSuite):
+
+  def __init__(self, name, root):
+    super(WebkitTestSuite, self).__init__(name, root)
+
+  def ListTests(self, context):
+    tests = []
+    for dirname, dirs, files in os.walk(self.root):
+      for dotted in [x for x in dirs if x.startswith('.')]:
+        dirs.remove(dotted)
+      if 'resources' in dirs:
+        dirs.remove('resources')
+
+      dirs.sort()
+      files.sort()
+      for filename in files:
+        if filename.endswith(".js"):
+          testname = os.path.join(dirname[len(self.root) + 1:], filename[:-3])
+          test = testcase.TestCase(self, testname)
+          tests.append(test)
+    return tests
+
+  def GetFlagsForTestCase(self, testcase, context):
+    source = self.GetSourceForTest(testcase)
+    flags = [] + context.mode_flags
+    flags_match = re.findall(FLAGS_PATTERN, source)
+    for match in flags_match:
+      flags += match.strip().split()
+
+    files_list = []  # List of file names to append to command arguments.
+    files_match = FILES_PATTERN.search(source);
+    # Accept several lines of 'Files:'.
+    while True:
+      if files_match:
+        files_list += files_match.group(1).strip().split()
+        files_match = FILES_PATTERN.search(source, files_match.end())
+      else:
+        break
+    files = [ os.path.normpath(os.path.join(self.root, '..', '..', f))
+              for f in files_list ]
+    testfilename = os.path.join(self.root, testcase.path + self.suffix())
+    if SELF_SCRIPT_PATTERN.search(source):
+      env = ["-e", "TEST_FILE_NAME=\"%s\"" % testfilename.replace("\\", "\\\\")]
+      files = env + files
+    files.append(os.path.join(self.root, "resources/standalone-pre.js"))
+    files.append(testfilename)
+    files.append(os.path.join(self.root, "resources/standalone-post.js"))
+
+    flags += files
+    if context.isolates:
+      flags.append("--isolate")
+      flags += files
+
+    return testcase.flags + flags
+
+  def GetSourceForTest(self, testcase):
+    filename = os.path.join(self.root, testcase.path + self.suffix())
+    with open(filename) as f:
+      return f.read()
+
+  # TODO(machenbach): Share with test/message/testcfg.py
+  def _IgnoreLine(self, string):
+    """Ignore empty lines, valgrind output and Android output."""
+    if not string: return True
+    return (string.startswith("==") or string.startswith("**") or
+            string.startswith("ANDROID") or
+            # These five patterns appear in normal Native Client output.
+            string.startswith("DEBUG MODE ENABLED") or
+            string.startswith("tools/nacl-run.py") or
+            string.find("BYPASSING ALL ACL CHECKS") > 0 or
+            string.find("Native Client module will be loaded") > 0 or
+            string.find("NaClHostDescOpen:") > 0)
+
+  def IsFailureOutput(self, output, testpath):
+    if super(WebkitTestSuite, self).IsFailureOutput(output, testpath):
+      return True
+    file_name = os.path.join(self.root, testpath) + "-expected.txt"
+    with file(file_name, "r") as expected:
+      expected_lines = expected.readlines()
+
+    def ExpIterator():
+      for line in expected_lines:
+        if line.startswith("#") or not line.strip(): continue
+        yield line.strip()
+
+    def ActIterator(lines):
+      for line in lines:
+        if self._IgnoreLine(line.strip()): continue
+        yield line.strip()
+
+    def ActBlockIterator():
+      """Iterates over blocks of actual output lines."""
+      lines = output.stdout.splitlines()
+      start_index = 0
+      found_eqeq = False
+      for index, line in enumerate(lines):
+        # If a stress test separator is found:
+        if line.startswith("=="):
+          # Iterate over all lines before a separator except the first.
+          if not found_eqeq:
+            found_eqeq = True
+          else:
+            yield ActIterator(lines[start_index:index])
+          # The next block of ouput lines starts after the separator.
+          start_index = index + 1
+      # Iterate over complete output if no separator was found.
+      if not found_eqeq:
+        yield ActIterator(lines)
+
+    for act_iterator in ActBlockIterator():
+      for (expected, actual) in itertools.izip_longest(
+          ExpIterator(), act_iterator, fillvalue=''):
+        if expected != actual:
+          return True
+      return False
+
+
+def GetSuite(name, root):
+  return WebkitTestSuite(name, root)
diff --git a/deps/v8/test/webkit/this-non-object-proto-expected.txt b/deps/v8/test/webkit/this-non-object-proto-expected.txt
new file mode 100644 (file)
index 0000000..0c26471
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that setting a non-object, non-null value for this.__proto__ does not lead to a crash when setting a property on the this object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS this.__proto__ is originalProto
+If we got to this point then we did not crash and the test has passed.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/this-non-object-proto.js b/deps/v8/test/webkit/this-non-object-proto.js
new file mode 100644 (file)
index 0000000..115b203
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This test checks that setting a non-object, non-null value for this.__proto__ does not lead to a crash when setting a property on the this object.'
+);
+
+originalProto = this.__proto__;
+this.__proto__ = 1;
+
+shouldBe("this.__proto__", "originalProto");
+
+someProperty = 1;
+debug('If we got to this point then we did not crash and the test has passed.');
diff --git a/deps/v8/test/webkit/throw-from-finally-expected.txt b/deps/v8/test/webkit/throw-from-finally-expected.txt
new file mode 100644 (file)
index 0000000..71b5877
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that throwing from a finally block has the expected effect.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + events is "1:try,1:finally,2:finally,2:thingy,3:thingy,3:finally,4:thingy,4:finally,4:another thingy,5:hi,5:wat"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/throw-from-finally.js b/deps/v8/test/webkit/throw-from-finally.js
new file mode 100644 (file)
index 0000000..baa4ae8
--- /dev/null
@@ -0,0 +1,81 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that throwing from a finally block has the expected effect."
+);
+
+var events = [];
+
+try {
+    events.push("1:try");
+} finally {
+    events.push("1:finally");
+}
+
+try {
+    try {
+        throw "2:thingy";
+    } finally {
+        events.push("2:finally");
+    }
+} catch (e) {
+    events.push(e);
+}
+
+try {
+    throw "3:thingy";
+} catch (e) {
+    events.push(e);
+} finally {
+    events.push("3:finally");
+}
+
+try {
+    try {
+        throw "4:thingy";
+    } catch (e) {
+        events.push(e);
+    } finally {
+        events.push("4:finally");
+        throw "4:another thingy";
+    }
+} catch (e) {
+    events.push(e);
+}
+
+try {
+    for (;;) {
+        try {
+            continue;
+        } finally {
+            events.push("5:hi");
+            throw "5:wat";
+        }
+    }
+} catch (e) {
+    events.push(e);
+}
+
+shouldBe("\"\" + events", "\"1:try,1:finally,2:finally,2:thingy,3:thingy,3:finally,4:thingy,4:finally,4:another thingy,5:hi,5:wat\"");
+
diff --git a/deps/v8/test/webkit/toString-elision-trailing-comma-expected.txt b/deps/v8/test/webkit/toString-elision-trailing-comma-expected.txt
new file mode 100644 (file)
index 0000000..c4b088f
--- /dev/null
@@ -0,0 +1,113 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that toString() round-trip on a function that has a array with elision does not remove a comma.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS typeof undefined is 'undefined'
+PASS f1().length is 1
+PASS f1()[1-1] is undefined
+PASS unevalf(eval(unevalf(f1))) is unevalf(f1)
+PASS eval(unevalf(f1))().length is 1
+PASS eval(unevalf(f1))()[1-1] is undefined
+PASS f2().length is 1
+PASS f2()[1-1] is 1
+PASS unevalf(eval(unevalf(f2))) is unevalf(f2)
+PASS eval(unevalf(f2))().length is 1
+PASS eval(unevalf(f2))()[1-1] is 1
+PASS f3().length is 1
+PASS f3()[1-1] is 1
+PASS unevalf(eval(unevalf(f3))) is unevalf(f3)
+PASS eval(unevalf(f3))().length is 1
+PASS eval(unevalf(f3))()[1-1] is 1
+PASS f4().length is 2
+PASS f4()[2-1] is undefined
+PASS unevalf(eval(unevalf(f4))) is unevalf(f4)
+PASS eval(unevalf(f4))().length is 2
+PASS eval(unevalf(f4))()[2-1] is undefined
+PASS f5().length is 3
+PASS f5()[3-1] is undefined
+PASS unevalf(eval(unevalf(f5))) is unevalf(f5)
+PASS eval(unevalf(f5))().length is 3
+PASS eval(unevalf(f5))()[3-1] is undefined
+PASS f6().length is 4
+PASS f6()[4-1] is 4
+PASS unevalf(eval(unevalf(f6))) is unevalf(f6)
+PASS eval(unevalf(f6))().length is 4
+PASS eval(unevalf(f6))()[4-1] is 4
+PASS f7().length is 2
+PASS f7()[2-1] is 2
+PASS unevalf(eval(unevalf(f7))) is unevalf(f7)
+PASS eval(unevalf(f7))().length is 2
+PASS eval(unevalf(f7))()[2-1] is 2
+PASS f8().length is 3
+PASS f8()[3-1] is undefined
+PASS unevalf(eval(unevalf(f8))) is unevalf(f8)
+PASS eval(unevalf(f8))().length is 3
+PASS eval(unevalf(f8))()[3-1] is undefined
+PASS f9().length is 5
+PASS f9()[5-1] is 5
+PASS unevalf(eval(unevalf(f9))) is unevalf(f9)
+PASS eval(unevalf(f9))().length is 5
+PASS eval(unevalf(f9))()[5-1] is 5
+PASS f10().length is 5
+PASS f10()[5-1] is undefined
+PASS unevalf(eval(unevalf(f10))) is unevalf(f10)
+PASS eval(unevalf(f10))().length is 5
+PASS eval(unevalf(f10))()[5-1] is undefined
+PASS f11().length is 6
+PASS f11()[6-1] is 6
+PASS unevalf(eval(unevalf(f11))) is unevalf(f11)
+PASS eval(unevalf(f11))().length is 6
+PASS eval(unevalf(f11))()[6-1] is 6
+PASS f12().length is 2
+PASS f12()[2-1] is undefined
+PASS unevalf(eval(unevalf(f12))) is unevalf(f12)
+PASS eval(unevalf(f12))().length is 2
+PASS eval(unevalf(f12))()[2-1] is undefined
+PASS f13().length is 2
+PASS f13()[2-1] is undefined
+PASS unevalf(eval(unevalf(f13))) is unevalf(f13)
+PASS eval(unevalf(f13))().length is 2
+PASS eval(unevalf(f13))()[2-1] is undefined
+PASS f14().length is 3
+PASS f14()[3-1] is undefined
+PASS unevalf(eval(unevalf(f14))) is unevalf(f14)
+PASS eval(unevalf(f14))().length is 3
+PASS eval(unevalf(f14))()[3-1] is undefined
+PASS f15().length is 2
+PASS f15()[2-1] is undefined
+PASS unevalf(eval(unevalf(f15))) is unevalf(f15)
+PASS eval(unevalf(f15))().length is 2
+PASS eval(unevalf(f15))()[2-1] is undefined
+PASS f16().length is 3
+PASS f16()[3-1] is undefined
+PASS unevalf(eval(unevalf(f16))) is unevalf(f16)
+PASS eval(unevalf(f16))().length is 3
+PASS eval(unevalf(f16))()[3-1] is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/toString-elision-trailing-comma.js b/deps/v8/test/webkit/toString-elision-trailing-comma.js
new file mode 100644 (file)
index 0000000..d649905
--- /dev/null
@@ -0,0 +1,131 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that toString() round-trip on a function that has a array with elision does not remove a comma."
+);
+
+function f1() {
+    return [,];
+}
+
+function f2() {
+    return [1];
+}
+
+function f3() {
+    return [1,];
+}
+
+// this is the first testcase that proves that trailing
+// elision comma is not removed
+function f4() {
+    return [1,,];
+}
+
+function f5() {
+    return [1,,,];
+}
+function f6() {
+    return [1,,,4];
+}
+
+function f7() {
+    return [,2,];
+}
+
+function f8() {
+    return [,2,,];
+}
+
+function f9() {
+    return [,2,,,5];
+}
+
+function f10() {
+    return [,,3,,,];
+}
+
+function f11() {
+    return [,,3,,,6];
+}
+
+function f12() {
+    return [,undefined];
+}
+
+function f13() {
+    return [,undefined,];
+}
+
+function f14() {
+    return [,undefined,,];
+}
+
+function f15() {
+    return [,,];
+}
+
+function f16() {
+    return [,,,];
+}
+
+shouldBe("typeof undefined", "'undefined'");
+
+unevalf = function(x) { return '(' + x.toString() + ')'; };
+
+function testToStringAndLength(fn, length, lastElement)
+{
+    // check that array length is correct
+    shouldBe(""+ fn +"().length", "" + length);
+
+    // check that last element is what it is supposed to be
+    shouldBe(""+ fn +"()[" + length +"-1]", "" + lastElement);
+
+    // check that toString result evaluates to code that can be evaluated
+    // and that toString doesn't remove the trailing elision comma.
+    shouldBe("unevalf(eval(unevalf("+fn+")))", "unevalf(" + fn + ")");
+
+    // check that toString()ed functions should retain semantics
+
+    shouldBe("eval(unevalf("+fn+"))().length", ""+length);
+    shouldBe("eval(unevalf("+fn+"))()[" + length +"-1]", ""+lastElement);
+}
+
+
+testToStringAndLength("f1", 1);
+testToStringAndLength("f2", 1, 1);
+testToStringAndLength("f3", 1,1);
+testToStringAndLength("f4", 2);
+testToStringAndLength("f5", 3);
+testToStringAndLength("f6", 4, 4);
+testToStringAndLength("f7", 2, 2);
+testToStringAndLength("f8", 3);
+testToStringAndLength("f9", 5, 5);
+testToStringAndLength("f10", 5);
+testToStringAndLength("f11", 6, 6);
+testToStringAndLength("f12", 2);
+testToStringAndLength("f13", 2);
+testToStringAndLength("f14", 3);
+testToStringAndLength("f15", 2);
+testToStringAndLength("f16", 3);
diff --git a/deps/v8/test/webkit/toString-for-var-decl-expected.txt b/deps/v8/test/webkit/toString-for-var-decl-expected.txt
new file mode 100644 (file)
index 0000000..e1d7428
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for a couple of specific ways that bugs in toString() round trips have changed the meanings of functions with var declarations inside for loops.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS unevalf(eval(unevalf(f1))) is unevalf(f1)
+PASS unevalf(eval(unevalf(f2))) is unevalf(f2)
+PASS unevalf(eval(unevalf(f3))) is unevalf(f3)
+PASS unevalf(eval(unevalf(f4))) is unevalf(f4)
+PASS unevalf(f2) != unevalf(f3) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/toString-for-var-decl.js b/deps/v8/test/webkit/toString-for-var-decl.js
new file mode 100644 (file)
index 0000000..2b4db73
--- /dev/null
@@ -0,0 +1,39 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks for a couple of specific ways that bugs in toString() round trips have changed the meanings of functions with var declarations inside for loops."
+);
+
+function f1() { for (var j = 1 in []) {}  }
+var f2 = function () { for (var j = 1; j < 10; ++j) {}  }
+var f3 = function () { for (j = 1;j < 10; ++j) {}  }
+var f4 = function () { for (var j;;) {}  }
+
+var unevalf = function(x) { return '(' + x.toString() + ')'; }
+
+shouldBe("unevalf(eval(unevalf(f1)))", "unevalf(f1)");
+shouldBe("unevalf(eval(unevalf(f2)))", "unevalf(f2)");
+shouldBe("unevalf(eval(unevalf(f3)))", "unevalf(f3)");
+shouldBe("unevalf(eval(unevalf(f4)))", "unevalf(f4)");
+shouldBe("unevalf(f2) != unevalf(f3)", "true");
diff --git a/deps/v8/test/webkit/toString-number-dot-expr-expected.txt b/deps/v8/test/webkit/toString-number-dot-expr-expected.txt
new file mode 100644 (file)
index 0000000..67dbd21
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that toString() round-trip on a function that has a expression of form 4..x does not lose its meaning. The expression accesses the property 'x' from number '4'.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS unevalf(eval(unevalf(f1))) is unevalf(f1)
+PASS unevalf(eval(unevalf(f2))) is unevalf(f2)
+PASS unevalf(eval(unevalf(f3))) is unevalf(f3)
+PASS unevalf(eval(unevalf(f4))) is unevalf(f4)
+PASS unevalf(eval(unevalf(f5))) is unevalf(f5)
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/toString-number-dot-expr.js b/deps/v8/test/webkit/toString-number-dot-expr.js
new file mode 100644 (file)
index 0000000..ebfc8bd
--- /dev/null
@@ -0,0 +1,214 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that toString() round-trip on a function that has a expression of form 4..x does not lose its meaning."
++ " The expression accesses the property 'x' from number '4'."
+);
+
+// construct same test-case for different kinds of number literals. the switch is used to avoid
+// individual returns getting optimized away (if the interpreter would do dead code elimination)
+
+// testcase for number literal with decimal point, i.e '4.'
+function f1(a) {
+    switch(a) {
+    case "member":
+        return 4..x;
+    case "arrayget":
+        return 4.["x"];
+    case "constr":
+        return 4.();
+    case "funccall":
+        return 4..f();
+    case "parenfunccall":
+        return (4..x)();
+    case "assignment":
+        return 4..x = 33;
+    case "assignment2":
+        return 4..x >>>= 1;
+    case "prefix":
+        return ++4..x;
+    case "postfix":
+        return 4..x++;
+   case "delete":
+        delete 4..x;
+        return 4..x;
+    }
+
+    return 0;
+}
+
+// '4. .'
+function f2(a) {
+    switch(a) {
+    case "member":
+        return 4. .x;
+    case "arrayget":
+        return 4. ["x"];
+    case "constr":
+        return 4.();
+    case "funccall":
+        return 4. .f();
+    case "parenfunccall":
+        return (4. .x)();
+    case "assignment":
+        return 4. .x = 33;
+    case "assignment2":
+        return 4. .x >>>= 1;
+    case "prefix":
+        return ++4. .x;
+    case "postfix":
+        return 4. .x++;
+    case "delete":
+        delete 4. .x;
+        return 4. .x;
+    }
+
+    return 0;
+}
+
+// '4e20'
+function f2(a) {
+    switch(a) {
+    case "member":
+        return 4e20.x;
+    case "arrayget":
+        return 4e20["x"];
+    case "constr":
+        return 4e20();
+    case "funccall":
+        return 4e20.f();
+    case "parenfunccall":
+        return (4e20.x)();
+    case "assignment":
+        return 4e20.x = 33;
+    case "assignment2":
+        return 4e20.x >>>= 1;
+    case "prefix":
+        return ++4e20.x;
+    case "postfix":
+        return 4e20.x++;
+    case "delete":
+        delete 4e20.x;
+        return 4e20.x;
+    }
+
+    return 0;
+}
+
+// '4.1e-20'
+function f3(a) {
+    switch(a) {
+    case "member":
+        return 4.1e-20.x;
+    case "arrayget":
+        return 4.1e-20["x"];
+    case "constr":
+        return 4.1e-20();
+    case "funccall":
+        return 4.1e-20.f();
+    case "parenfunccall":
+        return (4.1e-20.x)();
+    case "assignment":
+        return 4.1e-20.x = 33;
+    case "assignment2":
+        return 4.1e-20.x >>>= 1;
+    case "prefix":
+        return ++4.1e-20.x;
+    case "postfix":
+        return 4.1e-20.x++;
+   case "delete":
+        delete 4.1e-20.x;
+        return 4.1e-20.x;
+    }
+
+    return 0;
+}
+
+// '4'
+function f4(a) {
+    switch(a) {
+    case "member":
+        return 4 .x;
+    case "arrayget":
+        return 4["x"];
+    case "constr":
+        return 4();
+    case "funccall":
+        return 4 .f();
+    case "parenfunccall":
+        return (4 .x)();
+    case "assignment":
+        return 4 .x = 33;
+    case "assignment2":
+        return 4 .x >>>= 1;
+    case "prefix":
+        return ++4 .x;
+    case "postfix":
+        return 4 .x++;
+    case "delete":
+        delete 4 .x;
+        return 4 .x;
+
+    }
+
+    return 0;
+}
+
+// '(4)'
+function f5(a) {
+    switch(a) {
+    case "member":
+        return (4).x;
+    case "arrayget":
+        return (4)["x"];
+    case "constr":
+        return (4)();
+    case "funccall":
+        return (4).f();
+    case "parenfunccall":
+        return ((4).x)();
+    case "assignment":
+        return (4).x = 33;
+    case "assignment2":
+        return (4).x >>>= 1;
+    case "prefix":
+        return ++(4).x;
+    case "postfix":
+        return (4).x++;
+    case "delete":
+        delete (4).x;
+        return (4).x;
+    }
+
+    return 0;
+}
+unevalf = function(x) { return '(' + x.toString() + ')'; };
+
+function testToString(fn)
+{
+    shouldBe("unevalf(eval(unevalf(" + fn + ")))", "unevalf(" + fn + ")");
+}
+
+for(var i = 1; i < 6; ++i)
+    testToString("f" + i);
diff --git a/deps/v8/test/webkit/toString-prefix-postfix-preserve-parens-expected.txt b/deps/v8/test/webkit/toString-prefix-postfix-preserve-parens-expected.txt
new file mode 100644 (file)
index 0000000..e4841b2
--- /dev/null
@@ -0,0 +1,84 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that toString() round-trip on a function that has prefix, postfix and typeof operators applied to group expression will not remove the grouping. Also checks that evaluation of such a expression produces run-time exception
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS unevalf(eval(unevalf(prefix_should_preserve_parens))) is unevalf(prefix_should_preserve_parens)
+PASS /.*\(+x\)*, y\)/.test(unevalf(prefix_should_preserve_parens)) is true
+PASS prefix_should_preserve_parens(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+PASS eval(unevalf(prefix_should_preserve_parens))(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+PASS unevalf(eval(unevalf(postfix_should_preserve_parens))) is unevalf(postfix_should_preserve_parens)
+PASS /.*\(+x\)*, y\)/.test(unevalf(postfix_should_preserve_parens)) is true
+PASS postfix_should_preserve_parens(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in postfix operation.
+PASS eval(unevalf(postfix_should_preserve_parens))(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in postfix operation.
+PASS unevalf(eval(unevalf(both_should_preserve_parens))) is unevalf(both_should_preserve_parens)
+PASS /.*\(+x\)*, y\)/.test(unevalf(both_should_preserve_parens)) is true
+PASS both_should_preserve_parens(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+PASS eval(unevalf(both_should_preserve_parens))(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+PASS unevalf(eval(unevalf(prefix_should_preserve_parens_multi))) is unevalf(prefix_should_preserve_parens_multi)
+PASS /.*\(+x\)*, y\)/.test(unevalf(prefix_should_preserve_parens_multi)) is true
+PASS prefix_should_preserve_parens_multi(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+PASS eval(unevalf(prefix_should_preserve_parens_multi))(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+PASS unevalf(eval(unevalf(postfix_should_preserve_parens_multi))) is unevalf(postfix_should_preserve_parens_multi)
+PASS /.*\(+x\)*, y\)/.test(unevalf(postfix_should_preserve_parens_multi)) is true
+PASS postfix_should_preserve_parens_multi(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in postfix operation.
+PASS eval(unevalf(postfix_should_preserve_parens_multi))(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in postfix operation.
+PASS unevalf(eval(unevalf(prefix_should_preserve_parens_multi1))) is unevalf(prefix_should_preserve_parens_multi1)
+PASS /.*\(+x\)*, y\)/.test(unevalf(prefix_should_preserve_parens_multi1)) is true
+PASS prefix_should_preserve_parens_multi1(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+PASS eval(unevalf(prefix_should_preserve_parens_multi1))(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+PASS unevalf(eval(unevalf(postfix_should_preserve_parens_multi1))) is unevalf(postfix_should_preserve_parens_multi1)
+PASS /.*\(+x\)*, y\)/.test(unevalf(postfix_should_preserve_parens_multi1)) is true
+PASS postfix_should_preserve_parens_multi1(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in postfix operation.
+PASS eval(unevalf(postfix_should_preserve_parens_multi1))(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in postfix operation.
+PASS unevalf(eval(unevalf(prefix_should_preserve_parens_multi2))) is unevalf(prefix_should_preserve_parens_multi2)
+PASS /.*\(+x\)*, y\)/.test(unevalf(prefix_should_preserve_parens_multi2)) is true
+PASS prefix_should_preserve_parens_multi2(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+PASS eval(unevalf(prefix_should_preserve_parens_multi2))(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+PASS unevalf(eval(unevalf(postfix_should_preserve_parens_multi2))) is unevalf(postfix_should_preserve_parens_multi2)
+PASS /.*\(+x\)*, y\)/.test(unevalf(postfix_should_preserve_parens_multi2)) is true
+PASS postfix_should_preserve_parens_multi2(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in postfix operation.
+PASS eval(unevalf(postfix_should_preserve_parens_multi2))(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in postfix operation.
+PASS unevalf(eval(unevalf(typeof_should_preserve_parens))) is unevalf(typeof_should_preserve_parens)
+PASS /.*\(+x\)*, y\)/.test(unevalf(typeof_should_preserve_parens)) is true
+PASS typeof_should_preserve_parens('a', 1); is 'number'
+PASS eval(unevalf(typeof_should_preserve_parens))('a', 1); is 'number'
+PASS unevalf(eval(unevalf(typeof_should_preserve_parens1))) is unevalf(typeof_should_preserve_parens1)
+PASS /.*\(+x\)*, y\)/.test(unevalf(typeof_should_preserve_parens1)) is true
+PASS typeof_should_preserve_parens1('a', 1); is 'number'
+PASS eval(unevalf(typeof_should_preserve_parens1))('a', 1); is 'number'
+PASS unevalf(eval(unevalf(typeof_should_preserve_parens2))) is unevalf(typeof_should_preserve_parens2)
+PASS /.*\(+x\)*, y\)/.test(unevalf(typeof_should_preserve_parens2)) is true
+PASS typeof_should_preserve_parens2('a', 1); is 'number'
+PASS eval(unevalf(typeof_should_preserve_parens2))('a', 1); is 'number'
+PASS unevalf(eval(unevalf(typeof_should_preserve_parens_multi))) is unevalf(typeof_should_preserve_parens_multi)
+PASS /.*\(+x\)*, y\)/.test(unevalf(typeof_should_preserve_parens_multi)) is true
+PASS typeof_should_preserve_parens_multi('a', 1); is 'number'
+PASS eval(unevalf(typeof_should_preserve_parens_multi))('a', 1); is 'number'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/toString-prefix-postfix-preserve-parens.js b/deps/v8/test/webkit/toString-prefix-postfix-preserve-parens.js
new file mode 100644 (file)
index 0000000..192f278
--- /dev/null
@@ -0,0 +1,154 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that toString() round-trip on a function that has prefix, postfix and typeof operators applied to group expression will not remove the grouping. Also checks that evaluation of such a expression produces run-time exception"
+);
+
+function postfix_should_preserve_parens(x, y, z) {
+    (x, y)++;
+    return y;
+}
+
+function prefix_should_preserve_parens(x, y, z) {
+    ++(x, y);
+    return x;
+
+}
+
+function both_should_preserve_parens(x, y, z) {
+    ++(x, y)--;
+    return x;
+
+}
+
+function postfix_should_preserve_parens_multi(x, y, z) {
+    (((x, y)))--;
+    return x;
+}
+
+function prefix_should_preserve_parens_multi(x, y, z) {
+    --(((x, y)));
+    return x;
+}
+
+function both_should_preserve_parens_multi(x, y, z) {
+    ++(((x, y)))--;
+    return x;
+}
+
+function postfix_should_preserve_parens_multi1(x, y, z) {
+    (((x)), y)--;
+    return x;
+}
+
+function prefix_should_preserve_parens_multi1(x, y, z) {
+    --(((x)), y);
+    return x;
+}
+
+function prefix_should_preserve_parens_multi2(x, y, z) {
+    var z = 0;
+    --(((x), y), z);
+    return x;
+}
+
+function postfix_should_preserve_parens_multi2(x, y, z) {
+    var z = 0;
+    (((x), y) ,z)++;
+    return x;
+}
+
+// if these return a variable (such as y) instead of
+// the result of typeof, this means that the parenthesis
+// got lost somewhere.
+function typeof_should_preserve_parens(x, y, z) {
+    return typeof (x, y);
+}
+
+function typeof_should_preserve_parens1(x, y, z) {
+    return typeof ((x, y));
+}
+
+function typeof_should_preserve_parens2(x, y, z) {
+    var z = 33;
+    return typeof (z, (x, y));
+}
+
+function typeof_should_preserve_parens_multi(x, y, z) {
+    var z = 33;
+    return typeof ((z,(((x, y)))));
+}
+
+unevalf = function(x) { return '(' + x.toString() + ')'; };
+
+function testToString(fn) {
+    // check that toString result evaluates to code that can be evaluated
+    // this doesn't actually reveal the bug that this test is testing
+    shouldBe("unevalf(eval(unevalf("+fn+")))", "unevalf(" + fn + ")");
+
+    // check that grouping operator is still there (this test reveals the bug
+    // but will create possible false negative if toString output changes in
+    // the future)
+    shouldBeTrue("/.*\\(+x\\)*, y\\)/.test(unevalf("+fn+"))");
+
+}
+
+function testToStringAndRTFailure(fn)
+{
+    testToString(fn);
+
+    // check that function call produces run-time exception
+    shouldThrow(""+fn+ "(1, 2, 3);");
+
+    // check that function call produces run-time exception after eval(unevalf)
+    shouldThrow("eval(unevalf("+fn+ "))(1, 2, 3);");
+}
+
+function testToStringAndReturn(fn, p1, p2, retval)
+{
+
+    testToString(fn);
+
+    // check that function call produces correct result
+    shouldBe("" + fn + "(" + p1 + ", " + p2 +");", retval);
+
+    // check that function call produces correct result after eval(unevalf)
+    shouldBe("eval(unevalf("+fn+ "))" + "(" + p1 + ", " + p2 +");", retval);
+}
+
+
+testToStringAndRTFailure("prefix_should_preserve_parens");
+testToStringAndRTFailure("postfix_should_preserve_parens");
+testToStringAndRTFailure("both_should_preserve_parens");
+testToStringAndRTFailure("prefix_should_preserve_parens_multi");
+testToStringAndRTFailure("postfix_should_preserve_parens_multi");
+testToStringAndRTFailure("prefix_should_preserve_parens_multi1");
+testToStringAndRTFailure("postfix_should_preserve_parens_multi1");
+testToStringAndRTFailure("prefix_should_preserve_parens_multi2");
+testToStringAndRTFailure("postfix_should_preserve_parens_multi2");
+
+testToStringAndReturn("typeof_should_preserve_parens", "'a'", 1, "'number'");
+testToStringAndReturn("typeof_should_preserve_parens1", "'a'", 1, "'number'");
+testToStringAndReturn("typeof_should_preserve_parens2", "'a'", 1, "'number'");
+testToStringAndReturn("typeof_should_preserve_parens_multi", "'a'", 1, "'number'");
diff --git a/deps/v8/test/webkit/toString-recursion-expected.txt b/deps/v8/test/webkit/toString-recursion-expected.txt
new file mode 100644 (file)
index 0000000..a7ccb8f
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that toString() does not have a problem when an object has itself as a property.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS var array = []; array[0] = array; array + '' is ''
+PASS var error = new Error; error.name = error; error.message = error; error + '' is ''
+PASS var regexp = /a/; regexp.source = regexp; regexp + '' is '/a/'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/toString-recursion.js b/deps/v8/test/webkit/toString-recursion.js
new file mode 100644 (file)
index 0000000..51e9f98
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that toString() does not have a problem when an object has itself as a property."
+);
+
+// Array (elements)
+shouldBe("var array = []; array[0] = array; array + ''", "''");
+
+// Error (name, message)
+shouldBe("var error = new Error; error.name = error; error.message = error; error + ''", "''");
+
+// RegExp (source)
+shouldBe("var regexp = /a/; regexp.source = regexp; regexp + ''", "'/a/'");
diff --git a/deps/v8/test/webkit/tostring-exception-in-property-access-expected.txt b/deps/v8/test/webkit/tostring-exception-in-property-access-expected.txt
new file mode 100644 (file)
index 0000000..12bb751
--- /dev/null
@@ -0,0 +1,38 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that the various subscript operators handle subscript string conversion exceptions correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS PASS: Exception caught -- Exception thrown by toString
+PASS target[""] is 'Did not assign to property when setter subscript threw'
+PASS PASS: Exception caught -- Exception thrown by toString
+PASS target[""] is 'Did not delete property when subscript threw'
+PASS PASS: Exception caught -- Exception thrown by toString
+PASS localTest is 'Did not assign to result when subscript threw.'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/tostring-exception-in-property-access.js b/deps/v8/test/webkit/tostring-exception-in-property-access.js
new file mode 100644 (file)
index 0000000..2274255
--- /dev/null
@@ -0,0 +1,56 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This tests that the various subscript operators handle subscript string conversion exceptions correctly.");
+
+var toStringThrower = { toString: function() { throw "Exception thrown by toString"; }};
+var target = {"" : "Did not assign to property when setter subscript threw"};
+
+try {
+    target[toStringThrower] = "Assigned to property on object when subscript threw";
+} catch(e) {
+    testPassed("PASS: Exception caught -- " + e);
+}
+shouldBe('target[""]', "'Did not assign to property when setter subscript threw'");
+
+target[""] = "Did not delete property when subscript threw";
+try {
+    delete target[toStringThrower];
+} catch(e) {
+    testPassed("PASS: Exception caught -- " + e);
+}
+shouldBe('target[""]', "'Did not delete property when subscript threw'");
+
+delete target[""];
+
+target.__defineGetter__("", function(){
+                                testFailed('FAIL: Loaded property from object when subscript threw.');
+                                return "FAIL: Assigned to result when subscript threw.";
+                            });
+var localTest = "Did not assign to result when subscript threw.";
+try {
+    localTest = target[toStringThrower];
+} catch(e) {
+    testPassed("PASS: Exception caught -- " + e);
+}
+shouldBe('localTest', "'Did not assign to result when subscript threw.'");
diff --git a/deps/v8/test/webkit/try-catch-try-try-catch-try-finally-return-catch-finally-expected.txt b/deps/v8/test/webkit/try-catch-try-try-catch-try-finally-return-catch-finally-expected.txt
new file mode 100644 (file)
index 0000000..c74dc53
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what would happen if you a throwing operation at the beginning of a finally blow that gets inlined inside a complicated catch/finally stack. The correct outcome is for this test to not crash during exception throwing.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS It worked.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/try-catch-try-try-catch-try-finally-return-catch-finally.js b/deps/v8/test/webkit/try-catch-try-try-catch-try-finally-return-catch-finally.js
new file mode 100644 (file)
index 0000000..140ba7f
--- /dev/null
@@ -0,0 +1,53 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what would happen if you a throwing operation at the beginning of a finally blow that gets inlined inside a complicated catch/finally stack. The correct outcome is for this test to not crash during exception throwing."
+);
+
+function foo() {
+    try{
+        N
+    } catch(x) {
+        try {
+            try {
+                w
+            } catch(x) {
+                try {
+                } finally {
+                    return
+                }
+            }
+        } catch (a) {
+        }
+    } finally {
+        z
+    }
+}
+
+try {
+    foo();
+} catch (e) {
+    testPassed("It worked.");
+}
+
diff --git a/deps/v8/test/webkit/try-try-return-finally-finally-expected.txt b/deps/v8/test/webkit/try-try-return-finally-finally-expected.txt
new file mode 100644 (file)
index 0000000..e41618a
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what would happen if you have nested try-finally's with interesting control statements nested within them. The correct outcome is for this test to not crash during bytecompilation.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS It worked.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/try-try-return-finally-finally.js b/deps/v8/test/webkit/try-try-return-finally-finally.js
new file mode 100644 (file)
index 0000000..8eef642
--- /dev/null
@@ -0,0 +1,48 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what would happen if you have nested try-finally's with interesting control statements nested within them. The correct outcome is for this test to not crash during bytecompilation."
+);
+
+function foo() {
+    try{
+        while(a){
+            try{
+                if(b){return}
+            }finally{
+                c();
+            }
+            if(d){return}
+        }
+    }finally{
+        e();
+    }
+}
+
+try {
+    foo();
+} catch (e) {
+    testPassed("It worked.");
+}
+
diff --git a/deps/v8/test/webkit/typeof-codegen-crash-expected.txt b/deps/v8/test/webkit/typeof-codegen-crash-expected.txt
new file mode 100644 (file)
index 0000000..05f8a15
--- /dev/null
@@ -0,0 +1,39 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test for a crash when optimizing expressions of the form 'typeof o == constant' where 'constant' is not a string.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS typeof o == undefined is false
+PASS typeof o == null is false
+PASS typeof o == true is false
+PASS typeof o == false is false
+PASS typeof o == 1 is false
+PASS typeof o == 1.0 is false
+PASS typeof o == { } is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/typeof-codegen-crash.js b/deps/v8/test/webkit/typeof-codegen-crash.js
new file mode 100644 (file)
index 0000000..a8ea5e0
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test for a crash when optimizing expressions of the form 'typeof o == constant' where 'constant' is not a string."
+);
+
+var o = { };
+
+shouldBeFalse("typeof o == undefined");
+shouldBeFalse("typeof o == null");
+shouldBeFalse("typeof o == true");
+shouldBeFalse("typeof o == false");
+shouldBeFalse("typeof o == 1");
+shouldBeFalse("typeof o == 1.0");
+shouldBeFalse("typeof o == { }");
diff --git a/deps/v8/test/webkit/typeof-constant-string-expected.txt b/deps/v8/test/webkit/typeof-constant-string-expected.txt
new file mode 100644 (file)
index 0000000..274e197
--- /dev/null
@@ -0,0 +1,70 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that using the typeof operator on a JavaScript value and comparing it to a constant string works as expected.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS isUndefined(undefined) is true
+PASS isUndefined(1) is false
+PASS isUndefinedStrict(undefined) is true
+PASS isUndefinedStrict(1) is false
+PASS isBoolean(true) is true
+PASS isBoolean(false) is true
+PASS isBoolean(1) is false
+PASS isBooleanStrict(true) is true
+PASS isBooleanStrict(false) is true
+PASS isBooleanStrict(1) is false
+PASS isNumber(1) is true
+PASS isNumber(undefined) is false
+PASS isNumberStrict(1) is true
+PASS isNumberStrict(undefined) is false
+PASS isString('string') is true
+PASS isString(1) is false
+PASS isStringStrict('string') is true
+PASS isStringStrict(1) is false
+PASS isObject({ }) is true
+PASS isObject(1) is false
+PASS isObjectStrict({ }) is true
+PASS isObjectStrict(1) is false
+PASS isFunction(function () { }) is true
+PASS isFunction(1) is false
+PASS isFunctionStrict(function () { }) is true
+PASS isFunctionStrict(1) is false
+PASS complexIsUndefinedTest() is 'PASS'
+PASS complexIsBooleanTest() is 'PASS'
+PASS complexIsNumberTest() is 'PASS'
+PASS complexIsStringTest() is 'PASS'
+PASS complexIsObjectTest() is 'PASS'
+PASS complexIsFunctionTest() is 'PASS'
+PASS complexIsUndefinedStrictTest() is 'PASS'
+PASS complexIsBooleanStrictTest() is 'PASS'
+PASS complexIsNumberStrictTest() is 'PASS'
+PASS complexIsStringStrictTest() is 'PASS'
+PASS complexIsObjectStrictTest() is 'PASS'
+PASS complexIsFunctionStrictTest() is 'PASS'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/typeof-constant-string.js b/deps/v8/test/webkit/typeof-constant-string.js
new file mode 100644 (file)
index 0000000..ed27f98
--- /dev/null
@@ -0,0 +1,318 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that using the typeof operator on a JavaScript value and comparing it to a constant string works as expected."
+);
+
+function isUndefined(a)
+{
+    return typeof a == "undefined";
+}
+
+shouldBeTrue("isUndefined(undefined)");
+shouldBeFalse("isUndefined(1)");
+
+function isUndefinedStrict(a)
+{
+    return typeof a === "undefined";
+}
+
+shouldBeTrue("isUndefinedStrict(undefined)");
+shouldBeFalse("isUndefinedStrict(1)");
+
+function isBoolean(a)
+{
+    return typeof a == "boolean";
+}
+
+shouldBeTrue("isBoolean(true)");
+shouldBeTrue("isBoolean(false)");
+shouldBeFalse("isBoolean(1)");
+
+function isBooleanStrict(a)
+{
+    return typeof a === "boolean";
+}
+
+shouldBeTrue("isBooleanStrict(true)");
+shouldBeTrue("isBooleanStrict(false)");
+shouldBeFalse("isBooleanStrict(1)");
+
+function isNumber(a)
+{
+    return typeof a == "number";
+}
+
+shouldBeTrue("isNumber(1)");
+shouldBeFalse("isNumber(undefined)");
+
+function isNumberStrict(a)
+{
+    return typeof a === "number";
+}
+
+shouldBeTrue("isNumberStrict(1)");
+shouldBeFalse("isNumberStrict(undefined)");
+
+function isString(a)
+{
+    return typeof a == "string";
+}
+
+shouldBeTrue("isString('string')");
+shouldBeFalse("isString(1)");
+
+function isStringStrict(a)
+{
+    return typeof a === "string";
+}
+
+shouldBeTrue("isStringStrict('string')");
+shouldBeFalse("isStringStrict(1)");
+
+function isObject(a)
+{
+    return typeof a == "object";
+}
+
+shouldBeTrue("isObject({ })");
+shouldBeFalse("isObject(1)");
+
+function isObjectStrict(a)
+{
+    return typeof a === "object";
+}
+
+shouldBeTrue("isObjectStrict({ })");
+shouldBeFalse("isObjectStrict(1)");
+
+function isFunction(a)
+{
+    return typeof a == "function";
+}
+
+shouldBeTrue("isFunction(function () { })");
+shouldBeFalse("isFunction(1)");
+
+function isFunctionStrict(a)
+{
+    return typeof a === "function";
+}
+
+shouldBeTrue("isFunctionStrict(function () { })");
+shouldBeFalse("isFunctionStrict(1)");
+
+function complexIsUndefinedTest()
+{
+    function replace_formats() {
+        var o = ["text", 0];
+        if (typeof o == "string") {
+        } else if (typeof o == "undefined") {
+        } else if (typeof o == "object" && typeof o[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsUndefinedTest()", "'PASS'");
+
+function complexIsBooleanTest()
+{
+    function replace_formats() {
+        var o = ["text", 0];
+        if (typeof o == "string") {
+        } else if (typeof o == "boolean") {
+        } else if (typeof o == "object" && typeof o[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsBooleanTest()", "'PASS'");
+
+function complexIsNumberTest()
+{
+    function replace_formats() {
+        var o = ["text", 0];
+        if (typeof o == "string") {
+        } else if (typeof o == "number") {
+        } else if (typeof o == "object" && typeof o[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsNumberTest()", "'PASS'");
+
+function complexIsStringTest()
+{
+    function replace_formats() {
+        var o = ["text", 0];
+        if (typeof o == "string") {
+        } else if (typeof o == "string") {
+        } else if (typeof o == "object" && typeof o[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsStringTest()", "'PASS'");
+
+function complexIsObjectTest()
+{
+    var a = ["text", 0];
+    function replace_formats() {
+        var o = function () { };
+        if (typeof o == "string") {
+        } else if (typeof o == "object") {
+        } else if (typeof o == "function" && typeof a[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsObjectTest()", "'PASS'");
+
+function complexIsFunctionTest()
+{
+    function replace_formats() {
+        var o = ["text", 0];
+        if (typeof o == "string") {
+        } else if (typeof o == "function") {
+        } else if (typeof o == "object" && typeof o[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsFunctionTest()", "'PASS'");
+
+function complexIsUndefinedStrictTest()
+{
+    function replace_formats() {
+        var o = ["text", 0];
+        if (typeof o == "string") {
+        } else if (typeof o === "undefined") {
+        } else if (typeof o == "object" && typeof o[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsUndefinedStrictTest()", "'PASS'");
+
+function complexIsBooleanStrictTest()
+{
+    function replace_formats() {
+        var o = ["text", 0];
+        if (typeof o == "string") {
+        } else if (typeof o === "boolean") {
+        } else if (typeof o == "object" && typeof o[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsBooleanStrictTest()", "'PASS'");
+
+function complexIsNumberStrictTest()
+{
+    function replace_formats() {
+        var o = ["text", 0];
+        if (typeof o == "string") {
+        } else if (typeof o === "number") {
+        } else if (typeof o == "object" && typeof o[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsNumberStrictTest()", "'PASS'");
+
+function complexIsStringStrictTest()
+{
+    function replace_formats() {
+        var o = ["text", 0];
+        if (typeof o == "string") {
+        } else if (typeof o === "string") {
+        } else if (typeof o == "object" && typeof o[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsStringStrictTest()", "'PASS'");
+
+function complexIsObjectStrictTest()
+{
+    var a = ["text", 0];
+    function replace_formats() {
+        var o = function () { };
+        if (typeof o == "string") {
+        } else if (typeof o === "object") {
+        } else if (typeof o == "function" && typeof a[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsObjectStrictTest()", "'PASS'");
+
+function complexIsFunctionStrictTest()
+{
+    function replace_formats() {
+        var o = ["text", 0];
+        if (typeof o == "string") {
+        } else if (typeof o === "function") {
+        } else if (typeof o == "object" && typeof o[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsFunctionStrictTest()", "'PASS'");
diff --git a/deps/v8/test/webkit/unexpected-constant-crash-expected.txt b/deps/v8/test/webkit/unexpected-constant-crash-expected.txt
new file mode 100644 (file)
index 0000000..a8e143b
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that the regexp and unexpected constant counters are not confused with each other. It will fail with an assertion failure in a debug build if this is the case.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/unexpected-constant-crash.js b/deps/v8/test/webkit/unexpected-constant-crash.js
new file mode 100644 (file)
index 0000000..cbca94b
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that the regexp and unexpected constant counters are not confused with each other. It will fail with an assertion failure in a debug build if this is the case."
+);
+
+var r = / /;
+var s;
+delete s;
diff --git a/deps/v8/test/webkit/unmatching-argument-count-expected.txt b/deps/v8/test/webkit/unmatching-argument-count-expected.txt
new file mode 100644 (file)
index 0000000..f41c253
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+PASS eval("f()") is ""
+PASS eval("f(1)") is "1"
+PASS eval("f(1, 2)") is "1, 2"
+PASS eval("f(1, 2, 3)") is "1, 2, 3"
+PASS eval("f(1, 2, 3, 4)") is "1, 2, 3, 4"
+PASS eval("f(1, 2, 3, 4, 5)") is "1, 2, 3, 4, 5"
+PASS eval("f(1, 2, 3, 4, 5, 6)") is "1, 2, 3, 4, 5, 6"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/unmatching-argument-count.js b/deps/v8/test/webkit/unmatching-argument-count.js
new file mode 100644 (file)
index 0000000..0e10a6b
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+function f(a,b,c) {
+   var d, e;
+   var args = "";
+   for (var i = 0; i < arguments.length; i++)
+       args+=arguments[i]+ ((i == arguments.length - 1) ? "" : ", ");
+   return args;
+}
+var a = 0;
+var b = 0;
+var c = 0;
+var d = 0;
+shouldBe('eval("f()")', '""');
+shouldBe('eval("f(1)")', '"1"');
+shouldBe('eval("f(1, 2)")', '"1, 2"');
+shouldBe('eval("f(1, 2, 3)")', '"1, 2, 3"');
+shouldBe('eval("f(1, 2, 3, 4)")', '"1, 2, 3, 4"');
+shouldBe('eval("f(1, 2, 3, 4, 5)")', '"1, 2, 3, 4, 5"');
+shouldBe('eval("f(1, 2, 3, 4, 5, 6)")', '"1, 2, 3, 4, 5, 6"');
diff --git a/deps/v8/test/webkit/var-declarations-zero-width-expected.txt b/deps/v8/test/webkit/var-declarations-zero-width-expected.txt
new file mode 100644 (file)
index 0000000..7998a0f
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This page tests if U+200C and U+200D are allowed as part of an identifier.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS var x‌ = 42; x‌ is 42
+PASS var x‍ = 43; x‍ is 43
+PASS var x‌‍ = 44; x‌‍ is 44
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/var-declarations-zero-width.js b/deps/v8/test/webkit/var-declarations-zero-width.js
new file mode 100644 (file)
index 0000000..8b5f90f
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This page tests if U+200C and U+200D are allowed as part of an identifier.");
+
+shouldBe("var x\u200c = 42; x\u200c", "42");
+shouldBe("var x\u200d = 43; x\u200d", "43");
+shouldBe("var x\u200c\u200d = 44; x\u200c\u200d", "44");
\ No newline at end of file
diff --git a/deps/v8/test/webkit/var-shadows-arg-crash-expected.txt b/deps/v8/test/webkit/var-shadows-arg-crash-expected.txt
new file mode 100644 (file)
index 0000000..1831bc6
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests to ensure that activations are built correctly in the face of duplicate parameter names and do not cause crashes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS test()() is "success"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/var-shadows-arg-crash.js b/deps/v8/test/webkit/var-shadows-arg-crash.js
new file mode 100644 (file)
index 0000000..585fa2b
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests to ensure that activations are built correctly in the face of duplicate parameter names and do not cause crashes.'
+);
+
+
+function test(a) {
+    var b, a = "success";
+    return function() {
+        return a;
+    }
+}
+
+shouldBe('test()()', '"success"');
diff --git a/deps/v8/test/webkit/var-shadows-arg-gc-crash-expected.txt b/deps/v8/test/webkit/var-shadows-arg-gc-crash-expected.txt
new file mode 100644 (file)
index 0000000..f193b27
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests to ensure that activations mark their values correctly in the face of duplicate parameter names and does not crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS testClosure() is "success"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/var-shadows-arg-gc-crash.js b/deps/v8/test/webkit/var-shadows-arg-gc-crash.js
new file mode 100644 (file)
index 0000000..0819ec5
--- /dev/null
@@ -0,0 +1,57 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests to ensure that activations mark their values correctly in the face of duplicate parameter names and does not crash.'
+);
+
+function gc()
+{
+    if (this.GCController)
+        GCController.collect();
+    else
+        for (var i = 0; i < 10000; ++i) // Allocate a sufficient number of objects to force a GC.
+            ({});
+}
+
+function eatRegisters(param)
+{
+    if (param > 10)
+        return;
+    eatRegisters(param + 1);
+}
+
+function test(a, c) {
+    var b = ["success"], a, c;
+    return function() {
+        return b[0];
+    }
+}
+
+var testClosure = test();
+
+var extra = test();
+eatRegisters(0);
+gc();
+
+shouldBe('testClosure()', '"success"');
diff --git a/deps/v8/test/webkit/vardecl-blocks-init-expected.txt b/deps/v8/test/webkit/vardecl-blocks-init-expected.txt
new file mode 100644 (file)
index 0000000..935581c
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that variable declarations with initializers inside of catch and with blocks do not set values in a deeper scope.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS catchTest() is 'foo'
+PASS catchTest2() is 'baz'
+PASS withTest() is 'foo'
+PASS withTest2() is 'baz'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/deps/v8/test/webkit/vardecl-blocks-init.js b/deps/v8/test/webkit/vardecl-blocks-init.js
new file mode 100644 (file)
index 0000000..b77f191
--- /dev/null
@@ -0,0 +1,77 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that variable declarations with initializers inside of catch and with blocks do not set values in a deeper scope."
+);
+
+function catchTest() {
+  var e = "foo";
+
+  try {
+    throw "bar";
+  } catch (e) {
+    var e = "baz";
+  }
+
+  return e;
+}
+
+function catchTest2() {
+  var e = "foo";
+
+  try {
+    throw "bar";
+  } catch (e) {
+    var e = "baz";
+
+    return e;
+  }
+}
+
+function withTest() {
+  var e = "foo"
+  var object = { 'e' : "bar" };
+
+  with (object) {
+    var e = "baz";
+  }
+
+  return e;
+}
+
+function withTest2() {
+  var e = "foo"
+  var object = { 'e' : "bar" };
+
+  with (object) {
+    var e = "baz";
+
+    return e;
+  }
+}
+
+shouldBe("catchTest()", "'foo'");
+shouldBe("catchTest2()", "'baz'");
+shouldBe("withTest()", "'foo'");
+shouldBe("withTest2()", "'baz'");
diff --git a/deps/v8/test/webkit/webkit.status b/deps/v8/test/webkit/webkit.status
new file mode 100644 (file)
index 0000000..d65367b
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+#       notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+#       copyright notice, this list of conditions and the following
+#       disclaimer in the documentation and/or other materials provided
+#       with the distribution.
+#     * Neither the name of Google Inc. nor the names of its
+#       contributors may be used to endorse or promote products derived
+#       from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Too slow in debug mode.
+dfg-int-overflow-in-loop: PASS, SKIP if $mode == debug
+dfg-double-vote-fuzz: PASS, SKIP if $mode == debug
+reentrant-caching: PASS, SKIP if $mode == debug
+sort-large-array: PASS, SKIP if $mode == debug
index 1693c5b..dc13598 100755 (executable)
@@ -88,7 +88,7 @@ def Main():
     print("Usage: %s <command-to-run-on-device>" % sys.argv[0])
     return 1
   workspace = abspath(join(dirname(sys.argv[0]), '..'))
-  android_workspace = os.getenv("ANDROID_V8", "/data/local/v8")
+  android_workspace = os.getenv("ANDROID_V8", "/data/local/tmp/v8")
   args = [Escape(arg) for arg in sys.argv[1:]]
   script = (" ".join(args) + "\n"
             "case $? in\n"
index 49528a9..5c75db0 100644 (file)
@@ -1,23 +1,19 @@
-# Created by test_result_analyzer.py
-# Date:          2013-06-07 15:09:29.286522
-# Waterfall:     v8_blink
-# Revision type: webkit
-# Fail ratio:    0.2
-[ Linux Release x86 ] fast/js/JSON-stringify.html [ Skip ]
-[ Linux Release x86 ] fast/text/atsui-multiple-renderers.html [ Skip ]
-[ Linux Release x86 ] fast/text/international/complex-joining-using-gpos.html [ Skip ]
-[ Linux Release x86 ] fast/text/international/danda-space.html [ Skip ]
-[ Linux Release x86 ] fast/text/international/thai-baht-space.html [ Skip ]
-[ Linux Release x86 ] fast/text/international/thai-line-breaks.html [ Skip ]
-[ Linux Release x86 ] inspector/profiler/memory-instrumentation-external-array.html [ Skip ]
-[ Linux Release x86_64 ] fast/text/atsui-multiple-renderers.html [ Skip ]
-[ Linux Release x86_64 ] fast/text/international/complex-joining-using-gpos.html [ Skip ]
-[ Linux Release x86_64 ] fast/text/international/danda-space.html [ Skip ]
-[ Linux Release x86_64 ] fast/text/international/thai-baht-space.html [ Skip ]
-[ Linux Release x86_64 ] fast/text/international/thai-line-breaks.html [ Skip ]
-[ Linux Release x86_64 ] inspector/profiler/memory-instrumentation-external-array.html [ Skip ]
-[ Linux Debug ] fast/text/atsui-multiple-renderers.html [ Skip ]
-[ Linux Debug ] fast/text/international/complex-joining-using-gpos.html [ Skip ]
-[ Linux Debug ] fast/text/international/danda-space.html [ Skip ]
-[ Linux Debug ] fast/text/international/thai-baht-space.html [ Skip ]
-[ Linux Debug ] fast/text/international/thai-line-breaks.html [ Skip ]
+# Tests that sometimes fail only on the V8 waterfall:
+[ Linux Release x86 ] fast/js/JSON-stringify.html [ Pass Failure Slow ]
+[ Linux Release x86 ] fast/text/atsui-multiple-renderers.html [ Pass Failure Slow ]
+[ Linux Release x86 ] fast/text/international/complex-joining-using-gpos.html [ Pass Failure Slow ]
+[ Linux Release x86 ] fast/text/international/danda-space.html [ Pass Failure Slow ]
+[ Linux Release x86 ] fast/text/international/thai-baht-space.html [ Pass Failure Slow ]
+[ Linux Release x86 ] fast/text/international/thai-line-breaks.html [ Pass Failure Slow ]
+[ Linux Release x86 ] inspector/profiler/memory-instrumentation-external-array.html [ Pass Failure Slow ]
+[ Linux Release x86_64 ] fast/text/atsui-multiple-renderers.html [ Pass Failure Slow ]
+[ Linux Release x86_64 ] fast/text/international/complex-joining-using-gpos.html [ Pass Failure Slow ]
+[ Linux Release x86_64 ] fast/text/international/danda-space.html [ Pass Failure Slow ]
+[ Linux Release x86_64 ] fast/text/international/thai-baht-space.html [ Pass Failure Slow ]
+[ Linux Release x86_64 ] fast/text/international/thai-line-breaks.html [ Pass Failure Slow ]
+[ Linux Release x86_64 ] inspector/profiler/memory-instrumentation-external-array.html [ Pass Failure Slow ]
+[ Linux Debug ] fast/text/atsui-multiple-renderers.html [ Pass Failure Slow ]
+[ Linux Debug ] fast/text/international/complex-joining-using-gpos.html [ Pass Failure Slow ]
+[ Linux Debug ] fast/text/international/danda-space.html [ Pass Failure Slow ]
+[ Linux Debug ] fast/text/international/thai-baht-space.html [ Pass Failure Slow ]
+[ Linux Debug ] fast/text/international/thai-line-breaks.html [ Pass Failure Slow ]
index b259ee0..66aff94 100644 (file)
@@ -117,7 +117,8 @@ function InvokeClangPluginForEachFile(filenames, cfg, func)
       if FLAGS.verbose then print('popen ', action) end
       local pipe = io.popen(action)
       func(filename, pipe:lines())
-      pipe:close()
+      local success = pipe:close()
+      if not success then error("Failed to run: " .. action) end
    end
 end
 
diff --git a/deps/v8/tools/generate_shim_headers/generate_shim_headers.py b/deps/v8/tools/generate_shim_headers/generate_shim_headers.py
new file mode 100755 (executable)
index 0000000..d0e6d06
--- /dev/null
@@ -0,0 +1,122 @@
+#!/usr/bin/env python
+#
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+#       notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+#       copyright notice, this list of conditions and the following
+#       disclaimer in the documentation and/or other materials provided
+#       with the distribution.
+#     * Neither the name of Google Inc. nor the names of its
+#       contributors may be used to endorse or promote products derived
+#       from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""
+Generates shim headers that mirror the directory structure of bundled headers,
+but just forward to the system ones.
+
+This allows seamless compilation against system headers with no changes
+to our source code.
+"""
+
+
+import optparse
+import os.path
+import sys
+
+
+def GeneratorMain(argv):
+  parser = optparse.OptionParser()
+  parser.add_option('--headers-root', action='append')
+  parser.add_option('--define', action='append')
+  parser.add_option('--output-directory')
+  parser.add_option('--prefix', default='')
+  parser.add_option('--use-include-next', action='store_true')
+  parser.add_option('--outputs', action='store_true')
+  parser.add_option('--generate', action='store_true')
+
+  options, args = parser.parse_args(argv)
+
+  if not options.headers_root:
+    parser.error('Missing --headers-root parameter.')
+  if not options.output_directory:
+    parser.error('Missing --output-directory parameter.')
+  if not args:
+    parser.error('Missing arguments - header file names.')
+
+  source_tree_root = os.path.abspath(
+    os.path.join(os.path.dirname(__file__), '..', '..'))
+
+  for root in options.headers_root:
+    target_directory = os.path.join(
+      options.output_directory,
+      os.path.relpath(root, source_tree_root))
+    if options.generate and not os.path.exists(target_directory):
+      os.makedirs(target_directory)
+
+    for header_spec in args:
+      if ';' in header_spec:
+        (header_filename,
+         include_before,
+         include_after) = header_spec.split(';', 2)
+      else:
+        header_filename = header_spec
+        include_before = ''
+        include_after = ''
+      if options.outputs:
+        yield os.path.join(target_directory, header_filename)
+      if options.generate:
+        with open(os.path.join(target_directory, header_filename), 'w') as f:
+          if options.define:
+            for define in options.define:
+              key, value = define.split('=', 1)
+              # This non-standard push_macro extension is supported
+              # by compilers we support (GCC, clang).
+              f.write('#pragma push_macro("%s")\n' % key)
+              f.write('#undef %s\n' % key)
+              f.write('#define %s %s\n' % (key, value))
+
+          if include_before:
+            for header in include_before.split(':'):
+              f.write('#include %s\n' % header)
+
+          include_target = options.prefix + header_filename
+          if options.use_include_next:
+            f.write('#include_next <%s>\n' % include_target)
+          else:
+            f.write('#include <%s>\n' % include_target)
+
+          if include_after:
+            for header in include_after.split(':'):
+              f.write('#include %s\n' % header)
+
+          if options.define:
+            for define in options.define:
+              key, value = define.split('=', 1)
+              # This non-standard pop_macro extension is supported
+              # by compilers we support (GCC, clang).
+              f.write('#pragma pop_macro("%s")\n' % key)
+
+
+def DoMain(argv):
+  return '\n'.join(GeneratorMain(argv))
+
+
+if __name__ == '__main__':
+  DoMain(sys.argv[1:])
index 1be5cb8..ccdc4b3 100755 (executable)
@@ -31,6 +31,7 @@ import bisect
 import cmd
 import codecs
 import ctypes
+import datetime
 import disasm
 import mmap
 import optparse
@@ -40,7 +41,6 @@ import struct
 import sys
 import types
 
-
 USAGE="""usage: %prog [OPTIONS] [DUMP-FILE]
 
 Minidump analyzer.
@@ -442,13 +442,29 @@ MINIDUMP_THREAD_LIST = Descriptor([
   ("threads", lambda t: MINIDUMP_THREAD.ctype * t.thread_count)
 ])
 
+MINIDUMP_VS_FIXEDFILEINFO = Descriptor([
+  ("dwSignature", ctypes.c_uint32),
+  ("dwStrucVersion", ctypes.c_uint32),
+  ("dwFileVersionMS", ctypes.c_uint32),
+  ("dwFileVersionLS", ctypes.c_uint32),
+  ("dwProductVersionMS", ctypes.c_uint32),
+  ("dwProductVersionLS", ctypes.c_uint32),
+  ("dwFileFlagsMask", ctypes.c_uint32),
+  ("dwFileFlags", ctypes.c_uint32),
+  ("dwFileOS", ctypes.c_uint32),
+  ("dwFileType", ctypes.c_uint32),
+  ("dwFileSubtype", ctypes.c_uint32),
+  ("dwFileDateMS", ctypes.c_uint32),
+  ("dwFileDateLS", ctypes.c_uint32)
+])
+
 MINIDUMP_RAW_MODULE = Descriptor([
   ("base_of_image", ctypes.c_uint64),
   ("size_of_image", ctypes.c_uint32),
   ("checksum", ctypes.c_uint32),
   ("time_date_stamp", ctypes.c_uint32),
   ("module_name_rva", ctypes.c_uint32),
-  ("version_info", ctypes.c_uint32 * 13),
+  ("version_info", MINIDUMP_VS_FIXEDFILEINFO.ctype),
   ("cv_record", MINIDUMP_LOCATION_DESCRIPTOR.ctype),
   ("misc_record", MINIDUMP_LOCATION_DESCRIPTOR.ctype),
   ("reserved0", ctypes.c_uint32 * 2),
@@ -785,8 +801,9 @@ class MinidumpReader(object):
     try:
       symfile = os.path.join(self.symdir,
                              modulename.replace('.', '_') + ".pdb.sym")
-      self._LoadSymbolsFrom(symfile, module.base_of_image)
-      self.modules_with_symbols.append(module)
+      if os.path.isfile(symfile):
+        self._LoadSymbolsFrom(symfile, module.base_of_image)
+        self.modules_with_symbols.append(module)
     except Exception as e:
       print "  ... failure (%s)" % (e)
 
@@ -2011,6 +2028,21 @@ class InspectionShell(cmd.Cmd):
     print "Available memory regions:"
     self.reader.ForEachMemoryRegion(print_region)
 
+  def do_lm(self, arg):
+    """
+     List details for all loaded modules in the minidump. An argument can
+     be passed to limit the output to only those modules that contain the
+     argument as a substring (case insensitive match).
+    """
+    for module in self.reader.module_list.modules:
+      if arg:
+        name = GetModuleName(self.reader, module).lower()
+        if name.find(arg.lower()) >= 0:
+          PrintModuleDetails(self.reader, module)
+      else:
+        PrintModuleDetails(self.reader, module)
+    print
+
   def do_s(self, word):
     """
      Search for a given word in available memory regions. The given word
@@ -2069,10 +2101,32 @@ CONTEXT_FOR_ARCH = {
 
 KNOWN_MODULES = {'chrome.exe', 'chrome.dll'}
 
+def GetVersionString(ms, ls):
+  return "%d.%d.%d.%d" % (ms >> 16, ms & 0xffff, ls >> 16, ls & 0xffff)
+
+
 def GetModuleName(reader, module):
   name = reader.ReadMinidumpString(module.module_name_rva)
+  # simplify for path manipulation
+  name = name.encode('utf-8')
   return str(os.path.basename(str(name).replace("\\", "/")))
 
+
+def PrintModuleDetails(reader, module):
+  print "%s" % GetModuleName(reader, module)
+  file_version = GetVersionString(module.version_info.dwFileVersionMS,
+                                  module.version_info.dwFileVersionLS)
+  product_version = GetVersionString(module.version_info.dwProductVersionMS,
+                                     module.version_info.dwProductVersionLS)
+  print "  base: %s" % reader.FormatIntPtr(module.base_of_image)
+  print "  end: %s" % reader.FormatIntPtr(module.base_of_image +
+                                          module.size_of_image)
+  print "  file version: %s" % file_version
+  print "  product version: %s" % product_version
+  time_date_stamp = datetime.datetime.fromtimestamp(module.time_date_stamp)
+  print "  timestamp: %s" % time_date_stamp
+
+
 def AnalyzeMinidump(options, minidump_name):
   reader = MinidumpReader(options, minidump_name)
   heap = None
@@ -2093,14 +2147,13 @@ def AnalyzeMinidump(options, minidump_name):
     else:
       print "    eflags: %s" % bin(reader.exception_context.eflags)[2:]
 
-    # TODO(mstarzinger): Disabled because broken, needs investigation.
-    #print
-    #print "  modules:"
-    #for module in reader.module_list.modules:
-    #  name = GetModuleName(reader, module)
-    #  if name in KNOWN_MODULES:
-    #    print "    %s at %08X" % (name, module.base_of_image)
-    #    reader.TryLoadSymbolsFor(name, module)
+    print
+    print "  modules:"
+    for module in reader.module_list.modules:
+      name = GetModuleName(reader, module)
+      if name in KNOWN_MODULES:
+        print "    %s at %08X" % (name, module.base_of_image)
+        reader.TryLoadSymbolsFor(name, module)
     print
 
     stack_top = reader.ExceptionSP()
@@ -2137,12 +2190,15 @@ def AnalyzeMinidump(options, minidump_name):
   if options.full:
     FullDump(reader, heap)
 
+  if options.command:
+    InspectionShell(reader, heap).onecmd(options.command)
+
   if options.shell:
     try:
       InspectionShell(reader, heap).cmdloop("type help to get help")
     except KeyboardInterrupt:
       print "Kthxbye."
-  else:
+  elif not options.command:
     if reader.exception is not None:
       print "Annotated stack (from exception.esp to bottom):"
       for slot in xrange(stack_top, stack_bottom, reader.PointerSize()):
@@ -2163,6 +2219,8 @@ if __name__ == "__main__":
   parser = optparse.OptionParser(USAGE)
   parser.add_option("-s", "--shell", dest="shell", action="store_true",
                     help="start an interactive inspector shell")
+  parser.add_option("-c", "--command", dest="command", default="",
+                    help="run an interactive inspector shell command and exit")
   parser.add_option("-f", "--full", dest="full", action="store_true",
                     help="dump all information contained in the minidump")
   parser.add_option("--symdir", dest="symdir", default=".",
index ed37e72..892e437 100644 (file)
@@ -26,6 +26,9 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 {
+  'variables': {
+    'v8_code': 1,
+  },
   'includes': ['../../build/common.gypi'],
   'targets': [
     {
             ],
           },
         }],
+        ['v8_enable_i18n_support==1', {
+          'sources': [
+            '<(SHARED_INTERMEDIATE_DIR)/i18n-libraries.cc',
+          ],
+        }],
       ],
       'dependencies': [
         'v8_base.<(v8_target_arch)',
             'V8_SHARED',
           ],
         }],
+        ['v8_enable_i18n_support==1', {
+          'sources': [
+            '<(SHARED_INTERMEDIATE_DIR)/i18n-libraries.cc',
+          ],
+        }],
       ]
     },
     {
         '../../src/heap.h',
         '../../src/hydrogen-environment-liveness.cc',
         '../../src/hydrogen-environment-liveness.h',
+        '../../src/hydrogen-escape-analysis.cc',
+        '../../src/hydrogen-escape-analysis.h',
         '../../src/hydrogen-instructions.cc',
         '../../src/hydrogen-instructions.h',
         '../../src/hydrogen.cc',
         '../../src/hydrogen.h',
         '../../src/hydrogen-gvn.cc',
         '../../src/hydrogen-gvn.h',
+        '../../src/hydrogen-infer-representation.cc',
+        '../../src/hydrogen-infer-representation.h',
+        '../../src/hydrogen-range-analysis.cc',
+        '../../src/hydrogen-range-analysis.h',
+        '../../src/hydrogen-uint32-analysis.cc',
+        '../../src/hydrogen-uint32-analysis.h',
+        '../../src/hydrogen-osr.cc',
+        '../../src/hydrogen-osr.h',
         '../../src/ic-inl.h',
         '../../src/ic.cc',
         '../../src/ic.h',
             '<(SHARED_INTERMEDIATE_DIR)/debug-support.cc',
           ]
         }],
+        ['v8_enable_i18n_support==1', {
+          'sources': [
+            '../../src/extensions/i18n/break-iterator.cc',
+            '../../src/extensions/i18n/break-iterator.h',
+            '../../src/extensions/i18n/collator.cc',
+            '../../src/extensions/i18n/collator.h',
+            '../../src/extensions/i18n/date-format.cc',
+            '../../src/extensions/i18n/date-format.h',
+            '../../src/extensions/i18n/i18n-extension.cc',
+            '../../src/extensions/i18n/i18n-extension.h',
+            '../../src/extensions/i18n/i18n-utils.cc',
+            '../../src/extensions/i18n/i18n-utils.h',
+            '../../src/extensions/i18n/locale.cc',
+            '../../src/extensions/i18n/locale.h',
+            '../../src/extensions/i18n/number-format.cc',
+            '../../src/extensions/i18n/number-format.h',
+          ],
+          'dependencies': [
+            '<(DEPTH)/third_party/icu/icu.gyp:*',
+          ]
+        }],
       ],
     },
     {
         }, {
           'toolsets': ['target'],
         }],
+        ['v8_enable_i18n_support==1', {
+          'actions': [{
+            'action_name': 'js2c_i18n',
+            'inputs': [
+              '../../tools/js2c.py',
+              '<@(i18n_library_files)',
+            ],
+            'outputs': [
+              '<(SHARED_INTERMEDIATE_DIR)/i18n-libraries.cc',
+            ],
+            'action': [
+              'python',
+              '../../tools/js2c.py',
+              '<@(_outputs)',
+              'I18N',
+              '<(v8_compress_startup_data)',
+              '<@(i18n_library_files)'
+            ],
+          }],
+        }],
       ],
       'variables': {
         'library_files': [
           '../../src/typedarray.js',
           '../../src/generator.js'
         ],
+        'i18n_library_files': [
+          '../../src/extensions/i18n/header.js',
+          '../../src/extensions/i18n/globals.js',
+          '../../src/extensions/i18n/locale.js',
+          '../../src/extensions/i18n/collator.js',
+          '../../src/extensions/i18n/number-format.js',
+          '../../src/extensions/i18n/date-format.js',
+          '../../src/extensions/i18n/break-iterator.js',
+          '../../src/extensions/i18n/i18n-utils.js',
+          '../../src/extensions/i18n/overrides.js',
+          '../../src/extensions/i18n/footer.js',
+        ],
       },
       'actions': [
         {
diff --git a/deps/v8/tools/perf_tests/chromium_revision b/deps/v8/tools/perf_tests/chromium_revision
new file mode 100644 (file)
index 0000000..0cdcc11
--- /dev/null
@@ -0,0 +1 @@
+210122
index 221684d..0723150 100755 (executable)
@@ -62,9 +62,9 @@ if [[ "$@" != *--distortion* ]]; then
   echo $options
 fi
 
-echo -e "plot-range,$plot_range\ndistortion,$distortion" | cat - $log_file |
+cat $log_file |
     $d8_exec $tools_path/csvparser.js $tools_path/splaytree.js \
     $tools_path/codemap.js $tools_path/profile.js $tools_path/profile_view.js \
     $tools_path/logreader.js $tools_path/tickprocessor.js \
-    $tools_path/plot-timer-events.js -- $options $@ | less \
-    2>/dev/null | gnuplot > timer-events.png
+    $tools_path/profviz/composer.js $tools_path/profviz/stdio.js \
+    -- $@ $options 2>/dev/null | gnuplot > timer-events.png
diff --git a/deps/v8/tools/plot-timer-events.js b/deps/v8/tools/plot-timer-events.js
deleted file mode 100644 (file)
index 5412f8e..0000000
+++ /dev/null
@@ -1,510 +0,0 @@
-// Copyright 2012 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-//       notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-//       copyright notice, this list of conditions and the following
-//       disclaimer in the documentation and/or other materials provided
-//       with the distribution.
-//     * Neither the name of Google Inc. nor the names of its
-//       contributors may be used to endorse or promote products derived
-//       from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-var kV8BinarySuffixes = ["/d8", "/libv8.so"];
-var kStackFrames = 8;
-
-var kTimerEventWidth = 0.33;
-var kExecutionFrameWidth = 0.2;
-var kStackFrameWidth = 0.1;
-var kGapWidth = 0.05;
-
-var kY1Offset = 10;
-
-var kResX = 1600;
-var kResY = 600;
-var kPauseLabelPadding = 5;
-var kNumPauseLabels = 7;
-var kTickHalfDuration = 0.5;  // Milliseconds
-var kCodeKindLabelPadding = 100;
-var kMinRangeLength = 0.0005;  // Milliseconds
-
-var num_timer_event = kY1Offset + 0.5;
-
-var kNumThreads = 2;
-var kExecutionThreadId = 0;
-
-function assert(something, message) {
-  if (!something) {
-    print(new Error(message).stack);
-  }
-}
-
-function TimerEvent(color, pause, thread_id) {
-  assert(thread_id >= 0 && thread_id < kNumThreads, "invalid thread id");
-  this.color = color;
-  this.pause = pause;
-  this.ranges = [];
-  this.thread_id = thread_id;
-  this.index = ++num_timer_event;
-}
-
-
-var TimerEvents = {
-  'V8.Execute':              new TimerEvent("#000000", false, 0),
-  'V8.External':             new TimerEvent("#3399FF", false, 0),
-  'V8.CompileFullCode':      new TimerEvent("#CC0000",  true, 0),
-  'V8.RecompileSynchronous': new TimerEvent("#CC0044",  true, 0),
-  'V8.RecompileParallel':    new TimerEvent("#CC4499", false, 1),
-  'V8.CompileEval':          new TimerEvent("#CC4400",  true, 0),
-  'V8.Parse':                new TimerEvent("#00CC00",  true, 0),
-  'V8.PreParse':             new TimerEvent("#44CC00",  true, 0),
-  'V8.ParseLazy':            new TimerEvent("#00CC44",  true, 0),
-  'V8.GCScavenger':          new TimerEvent("#0044CC",  true, 0),
-  'V8.GCCompactor':          new TimerEvent("#4444CC",  true, 0),
-  'V8.GCContext':            new TimerEvent("#4400CC",  true, 0),
-}
-
-
-Array.prototype.top = function() {
-  if (this.length == 0) return undefined;
-  return this[this.length - 1];
-}
-
-var event_stack = [];
-var last_time_stamp = [];
-
-for (var i = 0; i < kNumThreads; i++) {
-  event_stack[i] = [];
-  last_time_stamp[i] = -1;
-}
-
-
-function CodeKind(color, kinds) {
-  this.color = color;
-  this.in_execution = [];
-  this.stack_frames = [];
-  for (var i = 0; i < kStackFrames; i++) this.stack_frames.push([]);
-  this.kinds = kinds;
-}
-
-
-var CodeKinds = {
-  'external ': new CodeKind("#3399FF", [-3]),
-  'reg.exp. ': new CodeKind("#0000FF", [-2]),
-  'runtime  ': new CodeKind("#000000", [-1]),
-  'full code': new CodeKind("#DD0000", [0]),
-  'opt code ': new CodeKind("#00EE00", [1]),
-  'code stub': new CodeKind("#FF00FF", [2]),
-  'built-in ': new CodeKind("#AA00AA", [3]),
-  'inl.cache': new CodeKind("#4444AA", [4, 5, 6, 7, 8, 9, 10, 11, 12, 13]),
-}
-
-
-var xrange_start;
-var xrange_end;
-var obj_index = 0;
-var execution_pauses = [];
-var code_map = new CodeMap();
-
-var xrange_start_override = undefined;
-var xrange_end_override = undefined;
-var distortion_per_entry = 0.005;  // Milliseconds
-var pause_tolerance = 0.005;  // Milliseconds.
-
-var distortion = 0;
-
-
-function Range(start, end) {
-  // Everthing from here are in milliseconds.
-  this.start = start;
-  this.end = end;
-}
-
-
-function Tick(tick) {
-  this.tick = tick;
-}
-
-
-Range.prototype.duration = function() { return this.end - this.start; }
-
-
-function ProcessTimerEventStart(name, start) {
-  // Find out the thread id.
-  var new_event = TimerEvents[name];
-  if (new_event === undefined) return;
-  var thread_id = new_event.thread_id;
-
-  start = Math.max(last_time_stamp[thread_id] + kMinRangeLength, start);
-
-  // Last event on this thread is done with the start of this event.
-  var last_event = event_stack[thread_id].top();
-  if (last_event !== undefined) {
-    var new_range = new Range(last_time_stamp[thread_id], start);
-    last_event.ranges.push(new_range);
-  }
-  event_stack[thread_id].push(new_event);
-  last_time_stamp[thread_id] = start;
-}
-
-
-function ProcessTimerEventEnd(name, end) {
-  // Find out about the thread_id.
-  var finished_event = TimerEvents[name];
-  var thread_id = finished_event.thread_id;
-  assert(finished_event === event_stack[thread_id].pop(),
-         "inconsistent event stack");
-
-  end = Math.max(last_time_stamp[thread_id] + kMinRangeLength, end);
-
-  var new_range = new Range(last_time_stamp[thread_id], end);
-  finished_event.ranges.push(new_range);
-  last_time_stamp[thread_id] = end;
-}
-
-
-function ProcessCodeCreateEvent(type, kind, address, size, name) {
-  var code_entry = new CodeMap.CodeEntry(size, name);
-  code_entry.kind = kind;
-  code_map.addCode(address, code_entry);
-}
-
-
-function ProcessCodeMoveEvent(from, to) {
-  code_map.moveCode(from, to);
-}
-
-
-function ProcessCodeDeleteEvent(address) {
-  code_map.deleteCode(address);
-}
-
-
-function ProcessSharedLibrary(name, start, end) {
-  var code_entry = new CodeMap.CodeEntry(end - start, name);
-  code_entry.kind = -3;  // External code kind.
-  for (var i = 0; i < kV8BinarySuffixes.length; i++) {
-    var suffix = kV8BinarySuffixes[i];
-    if (name.indexOf(suffix, name.length - suffix.length) >= 0) {
-      code_entry.kind = -1;  // V8 runtime code kind.
-      break;
-    }
-  }
-  code_map.addLibrary(start, code_entry);
-}
-
-
-function FindCodeKind(kind) {
-  for (name in CodeKinds) {
-    if (CodeKinds[name].kinds.indexOf(kind) >= 0) {
-      return CodeKinds[name];
-    }
-  }
-}
-
-
-function ProcessTickEvent(pc, sp, timer, unused_x, unused_y, vmstate, stack) {
-  var tick = new Tick(timer);
-
-  var entry = code_map.findEntry(pc);
-  if (entry) FindCodeKind(entry.kind).in_execution.push(tick);
-
-  for (var i = 0; i < kStackFrames; i++) {
-    if (!stack[i]) break;
-    var entry = code_map.findEntry(stack[i]);
-    if (entry) FindCodeKind(entry.kind).stack_frames[i].push(tick);
-  }
-}
-
-
-function FindPlotRange() {
-  var start_found = (xrange_start_override || xrange_start_override == 0);
-  var end_found = (xrange_end_override || xrange_end_override == 0);
-  xrange_start = start_found ? xrange_start_override : Infinity;
-  xrange_end = end_found ? xrange_end_override : -Infinity;
-
-  if (start_found && end_found) return;
-
-  for (name in TimerEvents) {
-    var ranges = TimerEvents[name].ranges;
-    for (var i = 0; i < ranges.length; i++) {
-      if (ranges[i].start < xrange_start && !start_found) {
-        xrange_start = ranges[i].start;
-      }
-      if (ranges[i].end > xrange_end && !end_found) {
-        xrange_end = ranges[i].end;
-      }
-    }
-  }
-
-  for (codekind in CodeKinds) {
-    var ticks = CodeKinds[codekind].in_execution;
-    for (var i = 0; i < ticks.length; i++) {
-      if (ticks[i].tick < xrange_start && !start_found) {
-        xrange_start = ticks[i].tick;
-      }
-      if (ticks[i].tick > xrange_end && !end_found) {
-        xrange_end = ticks[i].tick;
-      }
-    }
-  }
-
-  // Set pause tolerance to something appropriate for the plot resolution
-  // to make it easier for gnuplot.
-  pause_tolerance = (xrange_end - xrange_start) / kResX / 10;
-}
-
-
-function parseTimeStamp(timestamp) {
-  distortion += distortion_per_entry;
-  return parseInt(timestamp) / 1000 - distortion;
-}
-
-
-function ParseArguments(args) {
-  var processor = new ArgumentsProcessor(args);
-  do {
-    if (!processor.parse()) break;
-    var result = processor.result();
-    var distortion = parseInt(result.distortion);
-    if (isNaN(distortion)) break;
-    // Convert picoseconds to milliseconds.
-    distortion_per_entry = distortion / 1000000;
-    var rangelimits = result.range.split(",");
-    var range_start = parseInt(rangelimits[0]);
-    var range_end = parseInt(rangelimits[1]);
-    xrange_start_override = isNaN(range_start) ? undefined : range_start;
-    xrange_end_override = isNaN(range_end) ? undefined : range_end;
-    return;
-  } while (false);
-  processor.printUsageAndExit();
-}
-
-
-function CollectData() {
-  // Collect data from log.
-  var logreader = new LogReader(
-    { 'timer-event-start': { parsers: [null, parseTimeStamp],
-                             processor: ProcessTimerEventStart },
-      'timer-event-end':   { parsers: [null, parseTimeStamp],
-                             processor: ProcessTimerEventEnd },
-      'shared-library': { parsers: [null, parseInt, parseInt],
-                          processor: ProcessSharedLibrary },
-      'code-creation':  { parsers: [null, parseInt, parseInt, parseInt, null],
-                          processor: ProcessCodeCreateEvent },
-      'code-move':      { parsers: [parseInt, parseInt],
-                          processor: ProcessCodeMoveEvent },
-      'code-delete':    { parsers: [parseInt],
-                          processor: ProcessCodeDeleteEvent },
-      'tick':           { parsers: [parseInt, parseInt, parseTimeStamp,
-                                    null, null, parseInt, 'var-args'],
-                          processor: ProcessTickEvent }
-    });
-
-  var line;
-  while (line = readline()) {
-    logreader.processLogLine(line);
-  }
-
-  // Collect execution pauses.
-  for (name in TimerEvents) {
-    var event = TimerEvents[name];
-    if (!event.pause) continue;
-    var ranges = event.ranges;
-    for (var j = 0; j < ranges.length; j++) execution_pauses.push(ranges[j]);
-  }
-  execution_pauses = MergeRanges(execution_pauses);
-}
-
-
-function DrawBar(row, color, start, end, width) {
-  obj_index++;
-  command = "set object " + obj_index + " rect";
-  command += " from " + start + ", " + (row - width);
-  command += " to " + end + ", " + (row + width);
-  command += " fc rgb \"" + color + "\"";
-  print(command);
-}
-
-
-function TicksToRanges(ticks) {
-  var ranges = [];
-  for (var i = 0; i < ticks.length; i++) {
-    var tick = ticks[i].tick;
-    ranges.push(new Range(tick - kTickHalfDuration, tick + kTickHalfDuration));
-  }
-  return ranges;
-}
-
-
-function MergeRanges(ranges) {
-  ranges.sort(function(a, b) { return a.start - b.start; });
-  var result = [];
-  var j = 0;
-  for (var i = 0; i < ranges.length; i = j) {
-    var merge_start = ranges[i].start;
-    if (merge_start > xrange_end) break;  // Out of plot range.
-    var merge_end = ranges[i].end;
-    for (j = i + 1; j < ranges.length; j++) {
-      var next_range = ranges[j];
-      // Don't merge ranges if there is no overlap (including merge tolerance).
-      if (next_range.start > merge_end + pause_tolerance) break;
-      // Merge ranges.
-      if (next_range.end > merge_end) {  // Extend range end.
-        merge_end = next_range.end;
-      }
-    }
-    if (merge_end < xrange_start) continue;  // Out of plot range.
-    if (merge_end < merge_start) continue;  // Not an actual range.
-    result.push(new Range(merge_start, merge_end));
-  }
-  return result;
-}
-
-
-function RestrictRangesTo(ranges, start, end) {
-  var result = [];
-  for (var i = 0; i < ranges.length; i++) {
-    if (ranges[i].start <= end && ranges[i].end >= start) {
-      result.push(new Range(Math.max(ranges[i].start, start),
-                            Math.min(ranges[i].end, end)));
-    }
-  }
-  return result;
-}
-
-
-function GnuplotOutput() {
-  print("set terminal pngcairo size " + kResX + "," + kResY +
-        " enhanced font 'Helvetica,10'");
-  print("set yrange [0:" + (num_timer_event + 1) + "]");
-  print("set xlabel \"execution time in ms\"");
-  print("set xrange [" + xrange_start + ":" + xrange_end + "]");
-  print("set style fill pattern 2 bo 1");
-  print("set style rect fs solid 1 noborder");
-  print("set style line 1 lt 1 lw 1 lc rgb \"#000000\"");
-  print("set xtics out nomirror");
-  print("unset key");
-
-  var percentages = {};
-  var total = 0;
-  for (var name in TimerEvents) {
-    var event = TimerEvents[name];
-    var ranges = RestrictRangesTo(event.ranges, xrange_start, xrange_end);
-    ranges = MergeRanges(ranges);
-    var sum =
-      ranges.map(function(range) { return range.duration(); })
-          .reduce(function(a, b) { return a + b; }, 0);
-    percentages[name] = (sum / (xrange_end - xrange_start) * 100).toFixed(1);
-  }
-
-  // Name Y-axis.
-  var ytics = [];
-  for (name in TimerEvents) {
-    var index = TimerEvents[name].index;
-    ytics.push('"' + name + ' (' + percentages[name] + '%%)" ' + index);
-  }
-  ytics.push('"code kind being executed"' + ' ' + (kY1Offset - 1));
-  ytics.push('"top ' + kStackFrames + ' js stack frames"' + ' ' +
-             (kY1Offset - 2));
-  ytics.push('"pause times" 0');
-  print("set ytics out nomirror (" + ytics.join(', ') + ")");
-
-  // Plot timeline.
-  for (var name in TimerEvents) {
-    var event = TimerEvents[name];
-    var ranges = MergeRanges(event.ranges);
-    for (var i = 0; i < ranges.length; i++) {
-      DrawBar(event.index, event.color,
-              ranges[i].start, ranges[i].end,
-              kTimerEventWidth);
-    }
-  }
-
-  // Plot code kind gathered from ticks.
-  for (var name in CodeKinds) {
-    var code_kind = CodeKinds[name];
-    var offset = kY1Offset - 1;
-    // Top most frame.
-    var row = MergeRanges(TicksToRanges(code_kind.in_execution));
-    for (var j = 0; j < row.length; j++) {
-      DrawBar(offset, code_kind.color,
-              row[j].start, row[j].end, kExecutionFrameWidth);
-    }
-    offset = offset - 2 * kExecutionFrameWidth - kGapWidth;
-    // Javascript frames.
-    for (var i = 0; i < kStackFrames; i++) {
-      offset = offset - 2 * kStackFrameWidth - kGapWidth;
-      row = MergeRanges(TicksToRanges(code_kind.stack_frames[i]));
-      for (var j = 0; j < row.length; j++) {
-        DrawBar(offset, code_kind.color,
-                row[j].start, row[j].end, kStackFrameWidth);
-      }
-    }
-  }
-
-  // Add labels as legend for code kind colors.
-  var padding = kCodeKindLabelPadding * (xrange_end - xrange_start) / kResX;
-  var label_x = xrange_start;
-  var label_y = kY1Offset;
-  for (var name in CodeKinds) {
-    label_x += padding;
-    print("set label \"" + name + "\" at " + label_x + "," + label_y +
-          " textcolor rgb \"" + CodeKinds[name].color + "\"" +
-          " font \"Helvetica,9'\"");
-  }
-
-  if (execution_pauses.length == 0) {
-    // Force plot and return without plotting execution pause impulses.
-    print("plot 1/0");
-    return;
-  }
-
-  // Label the longest pauses.
-  execution_pauses.sort(
-      function(a, b) { return b.duration() - a.duration(); });
-
-  var max_pause_time = execution_pauses[0].duration();
-  padding = kPauseLabelPadding * (xrange_end - xrange_start) / kResX;
-  var y_scale = kY1Offset / max_pause_time / 2;
-  for (var i = 0; i < execution_pauses.length && i < kNumPauseLabels; i++) {
-    var pause = execution_pauses[i];
-    var label_content = (pause.duration() | 0) + " ms";
-    var label_x = pause.end + padding;
-    var label_y = Math.max(1, (pause.duration() * y_scale));
-    print("set label \"" + label_content + "\" at " +
-          label_x + "," + label_y + " font \"Helvetica,7'\"");
-  }
-
-  // Scale second Y-axis appropriately.
-  var y2range = max_pause_time * num_timer_event / kY1Offset * 2;
-  print("set y2range [0:" + y2range + "]");
-  // Plot graph with impulses as data set.
-  print("plot '-' using 1:2 axes x1y2 with impulses ls 1");
-  for (var i = 0; i < execution_pauses.length; i++) {
-    var pause = execution_pauses[i];
-    print(pause.end + " " + pause.duration());
-  }
-  print("e");
-}
-
-
-ParseArguments(arguments);
-CollectData();
-FindPlotRange();
-GnuplotOutput();
index 616505f..c717ee8 100755 (executable)
@@ -327,7 +327,8 @@ class SourceProcessor(SourceFileProcessor):
                        'libraries.cc',
                        'libraries-empty.cc',
                        'jsmin.py',
-                       'regexp-pcre.js']
+                       'regexp-pcre.js',
+                       'gnuplot-4.6.3-emscripten.js']
   IGNORE_TABS = IGNORE_COPYRIGHTS + ['unicode-test.js', 'html-comments.js']
 
   def ProcessContents(self, name, contents):
diff --git a/deps/v8/tools/profviz/composer.js b/deps/v8/tools/profviz/composer.js
new file mode 100644 (file)
index 0000000..bcc17b2
--- /dev/null
@@ -0,0 +1,580 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Array.prototype.top = function() {
+  if (this.length == 0) return undefined;
+  return this[this.length - 1];
+}
+
+
+function PlotScriptComposer(kResX, kResY) {
+  // Constants.
+  var kV8BinarySuffixes = ["/d8", "/libv8.so"];
+  var kStackFrames = 8;             // Stack frames to display in the plot.
+
+  var kTimerEventWidth = 0.33;      // Width of each timeline.
+  var kExecutionFrameWidth = 0.2;   // Width of the top stack frame line.
+  var kStackFrameWidth = 0.1;       // Width of the lower stack frame lines.
+  var kGapWidth = 0.05;             // Gap between stack frame lines.
+
+  var kY1Offset = 11;               // Offset for stack frame vs. event lines.
+  var kDeoptRow = 7;                // Row displaying deopts.
+  var kMaxDeoptLength = 4;          // Draw size of the largest deopt.
+  var kPauseLabelPadding = 5;       // Padding for pause time labels.
+  var kNumPauseLabels = 7;          // Number of biggest pauses to label.
+  var kCodeKindLabelPadding = 100;  // Padding for code kind labels.
+
+  var kTickHalfDuration = 0.5;      // Duration of half a tick in ms.
+  var kMinRangeLength = 0.0005;     // Minimum length for an event in ms.
+
+  var kNumThreads = 2;              // Number of threads.
+  var kExecutionThreadId = 0;       // ID of main thread.
+
+  // Init values.
+  var num_timer_event = kY1Offset + 0.5;
+
+  // Data structures.
+  function TimerEvent(label, color, pause, thread_id) {
+    assert(thread_id >= 0 && thread_id < kNumThreads, "invalid thread id");
+    this.label = label;
+    this.color = color;
+    this.pause = pause;
+    this.ranges = [];
+    this.thread_id = thread_id;
+    this.index = ++num_timer_event;
+  }
+
+  function CodeKind(color, kinds) {
+    this.color = color;
+    this.in_execution = [];
+    this.stack_frames = [];
+    for (var i = 0; i < kStackFrames; i++) this.stack_frames.push([]);
+    this.kinds = kinds;
+  }
+
+  function Range(start, end) {
+    this.start = start;  // In milliseconds.
+    this.end = end;      // In milliseconds.
+  }
+
+  function Deopt(time, size) {
+    this.time = time;  // In milliseconds.
+    this.size = size;  // In bytes.
+  }
+
+  Range.prototype.duration = function() { return this.end - this.start; }
+
+  function Tick(tick) {
+    this.tick = tick;
+  }
+
+  var TimerEvents = {
+      'V8.Execute':
+        new TimerEvent("execution", "#000000", false, 0),
+      'V8.External':
+        new TimerEvent("external", "#3399FF", false, 0),
+      'V8.CompileFullCode':
+        new TimerEvent("compile unopt", "#CC0000",  true, 0),
+      'V8.RecompileSynchronous':
+        new TimerEvent("recompile sync", "#CC0044",  true, 0),
+      'V8.RecompileParallel':
+        new TimerEvent("recompile async", "#CC4499", false, 1),
+      'V8.CompileEval':
+        new TimerEvent("compile eval", "#CC4400",  true, 0),
+      'V8.Parse':
+        new TimerEvent("parse", "#00CC00",  true, 0),
+      'V8.PreParse':
+        new TimerEvent("preparse", "#44CC00",  true, 0),
+      'V8.ParseLazy':
+        new TimerEvent("lazy parse", "#00CC44",  true, 0),
+      'V8.GCScavenger':
+        new TimerEvent("gc scavenge", "#0044CC",  true, 0),
+      'V8.GCCompactor':
+        new TimerEvent("gc compaction", "#4444CC",  true, 0),
+      'V8.GCContext':
+        new TimerEvent("gc context", "#4400CC",  true, 0),
+  };
+
+  var CodeKinds = {
+      'external ': new CodeKind("#3399FF", [-2]),
+      'runtime  ': new CodeKind("#000000", [-1]),
+      'full code': new CodeKind("#DD0000", [0]),
+      'opt code ': new CodeKind("#00EE00", [1]),
+      'code stub': new CodeKind("#FF00FF", [2]),
+      'built-in ': new CodeKind("#AA00AA", [3]),
+      'inl.cache': new CodeKind("#4444AA",
+                                [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]),
+      'reg.exp. ': new CodeKind("#0000FF", [15]),
+  };
+
+  var code_map = new CodeMap();
+  var execution_pauses = [];
+  var deopts = [];
+  var event_stack = [];
+  var last_time_stamp = [];
+  for (var i = 0; i < kNumThreads; i++) {
+    event_stack[i] = [];
+    last_time_stamp[i] = -1;
+  }
+
+  var range_start = undefined;
+  var range_end = undefined;
+  var obj_index = 0;
+  var pause_tolerance = 0.005;  // Milliseconds.
+  var distortion = 0;
+
+  // Utility functions.
+  function assert(something, message) {
+    if (!something) print(new Error(message).stack);
+  }
+
+  function FindCodeKind(kind) {
+    for (name in CodeKinds) {
+      if (CodeKinds[name].kinds.indexOf(kind) >= 0) {
+        return CodeKinds[name];
+      }
+    }
+  }
+
+  function TicksToRanges(ticks) {
+    var ranges = [];
+    for (var i = 0; i < ticks.length; i++) {
+      var tick = ticks[i].tick;
+      ranges.push(
+          new Range(tick - kTickHalfDuration, tick + kTickHalfDuration));
+    }
+    return ranges;
+  }
+
+  function MergeRanges(ranges) {
+    ranges.sort(function(a, b) { return a.start - b.start; });
+    var result = [];
+    var j = 0;
+    for (var i = 0; i < ranges.length; i = j) {
+      var merge_start = ranges[i].start;
+      if (merge_start > range_end) break;  // Out of plot range.
+      var merge_end = ranges[i].end;
+      for (j = i + 1; j < ranges.length; j++) {
+        var next_range = ranges[j];
+        // Don't merge ranges if there is no overlap (incl. merge tolerance).
+        if (next_range.start > merge_end + pause_tolerance) break;
+        // Merge ranges.
+        if (next_range.end > merge_end) {  // Extend range end.
+          merge_end = next_range.end;
+        }
+      }
+      if (merge_end < range_start) continue;  // Out of plot range.
+      if (merge_end < merge_start) continue;  // Not an actual range.
+      result.push(new Range(merge_start, merge_end));
+    }
+    return result;
+  }
+
+  function RestrictRangesTo(ranges, start, end) {
+    var result = [];
+    for (var i = 0; i < ranges.length; i++) {
+      if (ranges[i].start <= end && ranges[i].end >= start) {
+        result.push(new Range(Math.max(ranges[i].start, start),
+                              Math.min(ranges[i].end, end)));
+      }
+    }
+    return result;
+  }
+
+  // Public methods.
+  this.collectData = function(input, distortion_per_entry) {
+
+    // Parse functions.
+    var parseTimeStamp = function(timestamp) {
+      distortion += distortion_per_entry;
+      return parseInt(timestamp) / 1000 - distortion;
+    }
+
+    var processTimerEventStart = function(name, start) {
+      // Find out the thread id.
+      var new_event = TimerEvents[name];
+      if (new_event === undefined) return;
+      var thread_id = new_event.thread_id;
+
+      start = Math.max(last_time_stamp[thread_id] + kMinRangeLength, start);
+
+      // Last event on this thread is done with the start of this event.
+      var last_event = event_stack[thread_id].top();
+      if (last_event !== undefined) {
+        var new_range = new Range(last_time_stamp[thread_id], start);
+        last_event.ranges.push(new_range);
+      }
+      event_stack[thread_id].push(new_event);
+      last_time_stamp[thread_id] = start;
+    };
+
+    var processTimerEventEnd = function(name, end) {
+      // Find out about the thread_id.
+      var finished_event = TimerEvents[name];
+      var thread_id = finished_event.thread_id;
+      assert(finished_event === event_stack[thread_id].pop(),
+             "inconsistent event stack");
+
+      end = Math.max(last_time_stamp[thread_id] + kMinRangeLength, end);
+
+      var new_range = new Range(last_time_stamp[thread_id], end);
+      finished_event.ranges.push(new_range);
+      last_time_stamp[thread_id] = end;
+    };
+
+    var processCodeCreateEvent = function(type, kind, address, size, name) {
+      var code_entry = new CodeMap.CodeEntry(size, name);
+      code_entry.kind = kind;
+      code_map.addCode(address, code_entry);
+    };
+
+    var processCodeMoveEvent = function(from, to) {
+      code_map.moveCode(from, to);
+    };
+
+    var processCodeDeleteEvent = function(address) {
+      code_map.deleteCode(address);
+    };
+
+    var processSharedLibrary = function(name, start, end) {
+      var code_entry = new CodeMap.CodeEntry(end - start, name);
+      code_entry.kind = -2;  // External code kind.
+      for (var i = 0; i < kV8BinarySuffixes.length; i++) {
+        var suffix = kV8BinarySuffixes[i];
+        if (name.indexOf(suffix, name.length - suffix.length) >= 0) {
+          code_entry.kind = -1;  // V8 runtime code kind.
+          break;
+        }
+      }
+      code_map.addLibrary(start, code_entry);
+    };
+
+    var processTimerEventStart = function(name, start) {
+      // Find out the thread id.
+      var new_event = TimerEvents[name];
+      if (new_event === undefined) return;
+      var thread_id = new_event.thread_id;
+
+      start = Math.max(last_time_stamp[thread_id] + kMinRangeLength, start);
+
+      // Last event on this thread is done with the start of this event.
+      var last_event = event_stack[thread_id].top();
+      if (last_event !== undefined) {
+        var new_range = new Range(last_time_stamp[thread_id], start);
+        last_event.ranges.push(new_range);
+      }
+      event_stack[thread_id].push(new_event);
+      last_time_stamp[thread_id] = start;
+    };
+
+    var processTimerEventEnd = function(name, end) {
+      // Find out about the thread_id.
+      var finished_event = TimerEvents[name];
+      var thread_id = finished_event.thread_id;
+      assert(finished_event === event_stack[thread_id].pop(),
+             "inconsistent event stack");
+
+      end = Math.max(last_time_stamp[thread_id] + kMinRangeLength, end);
+
+      var new_range = new Range(last_time_stamp[thread_id], end);
+      finished_event.ranges.push(new_range);
+      last_time_stamp[thread_id] = end;
+    };
+
+    var processCodeCreateEvent = function(type, kind, address, size, name) {
+      var code_entry = new CodeMap.CodeEntry(size, name);
+      code_entry.kind = kind;
+      code_map.addCode(address, code_entry);
+    };
+
+    var processCodeMoveEvent = function(from, to) {
+      code_map.moveCode(from, to);
+    };
+
+    var processCodeDeleteEvent = function(address) {
+      code_map.deleteCode(address);
+    };
+
+    var processCodeDeoptEvent = function(time, size) {
+      deopts.push(new Deopt(time, size));
+    }
+
+    var processSharedLibrary = function(name, start, end) {
+      var code_entry = new CodeMap.CodeEntry(end - start, name);
+      code_entry.kind = -3;  // External code kind.
+      for (var i = 0; i < kV8BinarySuffixes.length; i++) {
+        var suffix = kV8BinarySuffixes[i];
+        if (name.indexOf(suffix, name.length - suffix.length) >= 0) {
+          code_entry.kind = -1;  // V8 runtime code kind.
+          break;
+        }
+      }
+      code_map.addLibrary(start, code_entry);
+    };
+
+    var processTickEvent = function(
+        pc, sp, timer, unused_x, unused_y, vmstate, stack) {
+      var tick = new Tick(timer);
+
+      var entry = code_map.findEntry(pc);
+      if (entry) FindCodeKind(entry.kind).in_execution.push(tick);
+
+      for (var i = 0; i < kStackFrames; i++) {
+        if (!stack[i]) break;
+        var entry = code_map.findEntry(stack[i]);
+        if (entry) FindCodeKind(entry.kind).stack_frames[i].push(tick);
+      }
+    };
+    // Collect data from log.
+    var logreader = new LogReader(
+      { 'timer-event-start': { parsers: [null, parseTimeStamp],
+                               processor: processTimerEventStart },
+        'timer-event-end':   { parsers: [null, parseTimeStamp],
+                               processor: processTimerEventEnd },
+        'shared-library': { parsers: [null, parseInt, parseInt],
+                            processor: processSharedLibrary },
+        'code-creation':  { parsers: [null, parseInt, parseInt, parseInt, null],
+                            processor: processCodeCreateEvent },
+        'code-move':      { parsers: [parseInt, parseInt],
+                            processor: processCodeMoveEvent },
+        'code-delete':    { parsers: [parseInt],
+                            processor: processCodeDeleteEvent },
+        'code-deopt':     { parsers: [parseTimeStamp, parseInt],
+                            processor: processCodeDeoptEvent },
+        'tick':           { parsers: [parseInt, parseInt, parseTimeStamp,
+                                      null, null, parseInt, 'var-args'],
+                            processor: processTickEvent }
+      });
+
+    var line;
+    while (line = input()) {
+      logreader.processLogLine(line);
+    }
+
+    // Collect execution pauses.
+    for (name in TimerEvents) {
+      var event = TimerEvents[name];
+      if (!event.pause) continue;
+      var ranges = event.ranges;
+      for (var j = 0; j < ranges.length; j++) execution_pauses.push(ranges[j]);
+    }
+    execution_pauses = MergeRanges(execution_pauses);
+  };
+
+
+  this.findPlotRange = function(
+    range_start_override, range_end_override, result_callback) {
+    var start_found = (range_start_override || range_start_override == 0);
+    var end_found = (range_end_override || range_end_override == 0);
+    range_start = start_found ? range_start_override : Infinity;
+    range_end = end_found ? range_end_override : -Infinity;
+
+    if (!start_found || !end_found) {
+      for (name in TimerEvents) {
+        var ranges = TimerEvents[name].ranges;
+        for (var i = 0; i < ranges.length; i++) {
+          if (ranges[i].start < range_start && !start_found) {
+            range_start = ranges[i].start;
+          }
+          if (ranges[i].end > range_end && !end_found) {
+            range_end = ranges[i].end;
+          }
+        }
+      }
+
+      for (codekind in CodeKinds) {
+        var ticks = CodeKinds[codekind].in_execution;
+        for (var i = 0; i < ticks.length; i++) {
+          if (ticks[i].tick < range_start && !start_found) {
+            range_start = ticks[i].tick;
+          }
+          if (ticks[i].tick > range_end && !end_found) {
+            range_end = ticks[i].tick;
+          }
+        }
+      }
+    }
+    // Set pause tolerance to something appropriate for the plot resolution
+    // to make it easier for gnuplot.
+    pause_tolerance = (range_end - range_start) / kResX / 10;
+
+    if (typeof result_callback === 'function') {
+      result_callback(range_start, range_end);
+    }
+  };
+
+
+  this.assembleOutput = function(output) {
+    output("set yrange [0:" + (num_timer_event + 1) + "]");
+    output("set xlabel \"execution time in ms\"");
+    output("set xrange [" + range_start + ":" + range_end + "]");
+    output("set style fill pattern 2 bo 1");
+    output("set style rect fs solid 1 noborder");
+    output("set style line 1 lt 1 lw 1 lc rgb \"#000000\"");
+    output("set border 15 lw 0.2");  // Draw thin border box.
+    output("set style line 2 lt 1 lw 1 lc rgb \"#9944CC\"");
+    output("set xtics out nomirror");
+    output("unset key");
+
+    function DrawBarBase(color, start, end, top, bottom) {
+      obj_index++;
+      command = "set object " + obj_index + " rect";
+      command += " from " + start + ", " + top;
+      command += " to " + end + ", " + bottom;
+      command += " fc rgb \"" + color + "\"";
+      output(command);
+    }
+
+    function DrawBar(row, color, start, end, width) {
+      DrawBarBase(color, start, end, row + width, row - width);
+    }
+
+    function DrawHalfBar(row, color, start, end, width) {
+      DrawBarBase(color, start, end, row, row - width);
+    }
+
+    var percentages = {};
+    var total = 0;
+    for (var name in TimerEvents) {
+      var event = TimerEvents[name];
+      var ranges = RestrictRangesTo(event.ranges, range_start, range_end);
+      ranges = MergeRanges(ranges);
+      var sum =
+        ranges.map(function(range) { return range.duration(); })
+            .reduce(function(a, b) { return a + b; }, 0);
+      percentages[name] = (sum / (range_end - range_start) * 100).toFixed(1);
+    }
+
+    // Plot deopts.
+    deopts.sort(function(a, b) { return b.size - a.size; });
+    var max_deopt_size = deopts.length > 0 ? deopts[0].size : Infinity;
+
+    for (var i = 0; i < deopts.length; i++) {
+      var deopt = deopts[i];
+      DrawHalfBar(kDeoptRow, "#9944CC", deopt.time,
+                  deopt.time + 10 * pause_tolerance,
+                  deopt.size / max_deopt_size * kMaxDeoptLength);
+    }
+
+    // Name Y-axis.
+    var ytics = [];
+    for (name in TimerEvents) {
+      var index = TimerEvents[name].index;
+      var label = TimerEvents[name].label;
+      ytics.push('"' + label + ' (' + percentages[name] + '%%)" ' + index);
+    }
+    ytics.push('"code kind color coding" ' + kY1Offset);
+    ytics.push('"code kind in execution" ' + (kY1Offset - 1));
+    ytics.push('"top ' + kStackFrames + ' js stack frames"' + ' ' +
+               (kY1Offset - 2));
+    ytics.push('"pause times" 0');
+    ytics.push('"max deopt size: ' + (max_deopt_size / 1024).toFixed(1) +
+               ' kB" ' + kDeoptRow);
+    output("set ytics out nomirror (" + ytics.join(', ') + ")");
+
+    // Plot timeline.
+    for (var name in TimerEvents) {
+      var event = TimerEvents[name];
+      var ranges = MergeRanges(event.ranges);
+      for (var i = 0; i < ranges.length; i++) {
+        DrawBar(event.index, event.color,
+                ranges[i].start, ranges[i].end,
+                kTimerEventWidth);
+      }
+    }
+
+    // Plot code kind gathered from ticks.
+    for (var name in CodeKinds) {
+      var code_kind = CodeKinds[name];
+      var offset = kY1Offset - 1;
+      // Top most frame.
+      var row = MergeRanges(TicksToRanges(code_kind.in_execution));
+      for (var j = 0; j < row.length; j++) {
+        DrawBar(offset, code_kind.color,
+                row[j].start, row[j].end, kExecutionFrameWidth);
+      }
+      offset = offset - 2 * kExecutionFrameWidth - kGapWidth;
+      // Javascript frames.
+      for (var i = 0; i < kStackFrames; i++) {
+        offset = offset - 2 * kStackFrameWidth - kGapWidth;
+        row = MergeRanges(TicksToRanges(code_kind.stack_frames[i]));
+        for (var j = 0; j < row.length; j++) {
+          DrawBar(offset, code_kind.color,
+                  row[j].start, row[j].end, kStackFrameWidth);
+        }
+      }
+    }
+
+    // Add labels as legend for code kind colors.
+    var padding = kCodeKindLabelPadding * (range_end - range_start) / kResX;
+    var label_x = range_start;
+    var label_y = kY1Offset;
+    for (var name in CodeKinds) {
+      label_x += padding;
+      output("set label \"" + name + "\" at " + label_x + "," + label_y +
+             " textcolor rgb \"" + CodeKinds[name].color + "\"" +
+             " font \"Helvetica,9'\"");
+      obj_index++;
+    }
+
+    if (execution_pauses.length == 0) {
+      // Force plot and return without plotting execution pause impulses.
+      output("plot 1/0");
+      return;
+    }
+
+    // Label the longest pauses.
+    execution_pauses.sort(
+        function(a, b) { return b.duration() - a.duration(); });
+
+    var max_pause_time = execution_pauses[0].duration();
+    padding = kPauseLabelPadding * (range_end - range_start) / kResX;
+    var y_scale = kY1Offset / max_pause_time / 2;
+    for (var i = 0; i < execution_pauses.length && i < kNumPauseLabels; i++) {
+      var pause = execution_pauses[i];
+      var label_content = (pause.duration() | 0) + " ms";
+      var label_x = pause.end + padding;
+      var label_y = Math.max(1, (pause.duration() * y_scale));
+      output("set label \"" + label_content + "\" at " +
+             label_x + "," + label_y + " font \"Helvetica,7'\"");
+      obj_index++;
+    }
+
+    // Scale second Y-axis appropriately.
+    var y2range = max_pause_time * num_timer_event / kY1Offset * 2;
+    output("set y2range [0:" + y2range + "]");
+    // Plot graph with impulses as data set.
+    output("plot '-' using 1:2 axes x1y2 with impulses ls 1");
+    for (var i = 0; i < execution_pauses.length; i++) {
+      var pause = execution_pauses[i];
+      output(pause.end + " " + pause.duration());
+      obj_index++;
+    }
+    output("e");
+    return obj_index;
+  };
+}
diff --git a/deps/v8/tools/profviz/gnuplot-4.6.3-emscripten.js b/deps/v8/tools/profviz/gnuplot-4.6.3-emscripten.js
new file mode 100644 (file)
index 0000000..42a21c8
--- /dev/null
@@ -0,0 +1,4658 @@
+// Copyright 1986 - 1993, 1998, 2004   Thomas Williams, Colin Kelley
+//
+// Permission to use, copy, and distribute this software and its
+// documentation for any purpose with or without fee is hereby granted,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation.
+//
+// Permission to modify the software is granted, but not the right to
+// distribute the complete modified source code.  Modifications are to
+// be distributed as patches to the released version.  Permission to
+// distribute binaries produced by compiling modified sources is granted,
+// provided you
+//    1. distribute the corresponding source modifications from the
+//       released version in the form of a patch file along with the binaries,
+//    2. add special version identification to distinguish your version
+//       in addition to the base release version number,
+//    3. provide your name and address as the primary contact for the
+//       support of your modified version, and
+//    4. retain our contact information in regard to use of the base
+//       software.
+// Permission to distribute the released version of the source code along
+// with corresponding source modifications in the form of a patch file is
+// granted with same provisions 2 through 4 for binary distributions.
+//
+// This software is provided "as is" without express or implied warranty
+// to the extent permitted by applicable law.
+
+// This Javascript port of gnuplot 4.6.3 [1] has been generated using
+// Emscripten [2].  This port has been made possible by Christian Huettig [3],
+// whose changes to gnuplot's source files can be found below [4] in
+// accordance to gnuplot's copyright.
+//
+// [1] http://www.gnuplot.info/
+// [2] https://github.com/kripken/emscripten/
+// [3] https://github.com/chhu/gnuplot-JS
+// [4] Patch to gnuplot 4.6.3
+// --- gnuplot-4.6.3/src/axis.c 2012-11-08 18:13:08.000000000 +0100
+// +++ gnuplot-4.6.3_mod/src/axis.c     2013-05-11 11:08:08.791587160 +0200
+// @@ -467,8 +467,9 @@ copy_or_invent_formatstring(AXIS_INDEX a
+//             int precision = (ceil(-log10(fabs(axmax-axmin))));
+//             if ((axmin*axmax > 0) && precision > 4)
+//                 sprintf(ticfmt[axis],"%%.%df", (precision>14) ? 14 : precision);
+// +           else
+// +               strcpy(ticfmt[axis], "%g");
+//         }
+// -
+//         return ticfmt[axis];
+//     }
+
+var Module = {
+    'noInitialRun': true,
+    print: function(text) {
+        self.postMessage({'transaction': -1, 'content': text});
+    },
+    printErr: function(text) {
+        self.postMessage({'transaction': -2, 'content': text});
+    },
+};
+function gnuplot_create() {
+// Note: For maximum-speed code, see "Optimizing Code" on the Emscripten wiki, https://github.com/kripken/emscripten/wiki/Optimizing-Code
+// Note: Some Emscripten settings may limit the speed of the generated code.
+try {
+  this['Module'] = Module;
+  Module.test;
+} catch(e) {
+  this['Module'] = Module = {};
+}
+// The environment setup code below is customized to use Module.
+// *** Environment setup code ***
+var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function';
+var ENVIRONMENT_IS_WEB = typeof window === 'object';
+var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';
+var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
+if (typeof module === "object") {
+  module.exports = Module;
+}
+if (ENVIRONMENT_IS_NODE) {
+  // Expose functionality in the same simple way that the shells work
+  // Note that we pollute the global namespace here, otherwise we break in node
+  Module['print'] = function(x) {
+    process['stdout'].write(x + '\n');
+  };
+  Module['printErr'] = function(x) {
+    process['stderr'].write(x + '\n');
+  };
+  var nodeFS = require('fs');
+  var nodePath = require('path');
+  Module['read'] = function(filename, binary) {
+    filename = nodePath['normalize'](filename);
+    var ret = nodeFS['readFileSync'](filename);
+    // The path is absolute if the normalized version is the same as the resolved.
+    if (!ret && filename != nodePath['resolve'](filename)) {
+      filename = path.join(__dirname, '..', 'src', filename);
+      ret = nodeFS['readFileSync'](filename);
+    }
+    if (ret && !binary) ret = ret.toString();
+    return ret;
+  };
+  Module['readBinary'] = function(filename) { return Module['read'](filename, true) };
+  Module['load'] = function(f) {
+    globalEval(read(f));
+  };
+  if (!Module['arguments']) {
+    Module['arguments'] = process['argv'].slice(2);
+  }
+}
+if (ENVIRONMENT_IS_SHELL) {
+  Module['print'] = print;
+  if (typeof printErr != 'undefined') Module['printErr'] = printErr; // not present in v8 or older sm
+  Module['read'] = read;
+  Module['readBinary'] = function(f) {
+    return read(f, 'binary');
+  };
+  if (!Module['arguments']) {
+    if (typeof scriptArgs != 'undefined') {
+      Module['arguments'] = scriptArgs;
+    } else if (typeof arguments != 'undefined') {
+      Module['arguments'] = arguments;
+    }
+  }
+}
+if (ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER) {
+  if (!Module['print']) {
+    Module['print'] = function(x) {
+      console.log(x);
+    };
+  }
+  if (!Module['printErr']) {
+    Module['printErr'] = function(x) {
+      console.log(x);
+    };
+  }
+}
+if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
+  Module['read'] = function(url) {
+    var xhr = new XMLHttpRequest();
+    xhr.open('GET', url, false);
+    xhr.send(null);
+    return xhr.responseText;
+  };
+  if (!Module['arguments']) {
+    if (typeof arguments != 'undefined') {
+      Module['arguments'] = arguments;
+    }
+  }
+}
+if (ENVIRONMENT_IS_WORKER) {
+  // We can do very little here...
+  var TRY_USE_DUMP = false;
+  if (!Module['print']) {
+    Module['print'] = (TRY_USE_DUMP && (typeof(dump) !== "undefined") ? (function(x) {
+      dump(x);
+    }) : (function(x) {
+      // self.postMessage(x); // enable this if you want stdout to be sent as messages
+    }));
+  }
+  Module['load'] = importScripts;
+}
+if (!ENVIRONMENT_IS_WORKER && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_SHELL) {
+  // Unreachable because SHELL is dependant on the others
+  throw 'Unknown runtime environment. Where are we?';
+}
+function globalEval(x) {
+  eval.call(null, x);
+}
+if (!Module['load'] == 'undefined' && Module['read']) {
+  Module['load'] = function(f) {
+    globalEval(Module['read'](f));
+  };
+}
+if (!Module['print']) {
+  Module['print'] = function(){};
+}
+if (!Module['printErr']) {
+  Module['printErr'] = Module['print'];
+}
+if (!Module['arguments']) {
+  Module['arguments'] = [];
+}
+// *** Environment setup code ***
+// Closure helpers
+Module.print = Module['print'];
+Module.printErr = Module['printErr'];
+// Callbacks
+if (!Module['preRun']) Module['preRun'] = [];
+if (!Module['postRun']) Module['postRun'] = [];
+// === Auto-generated preamble library stuff ===
+//========================================
+// Runtime code shared with compiler
+//========================================
+var Runtime = {
+  stackSave: function () {
+    return STACKTOP;
+  },
+  stackRestore: function (stackTop) {
+    STACKTOP = stackTop;
+  },
+  forceAlign: function (target, quantum) {
+    quantum = quantum || 4;
+    if (quantum == 1) return target;
+    if (isNumber(target) && isNumber(quantum)) {
+      return Math.ceil(target/quantum)*quantum;
+    } else if (isNumber(quantum) && isPowerOfTwo(quantum)) {
+      var logg = log2(quantum);
+      return '((((' +target + ')+' + (quantum-1) + ')>>' + logg + ')<<' + logg + ')';
+    }
+    return 'Math.ceil((' + target + ')/' + quantum + ')*' + quantum;
+  },
+  isNumberType: function (type) {
+    return type in Runtime.INT_TYPES || type in Runtime.FLOAT_TYPES;
+  },
+  isPointerType: function isPointerType(type) {
+  return type[type.length-1] == '*';
+},
+  isStructType: function isStructType(type) {
+  if (isPointerType(type)) return false;
+  if (isArrayType(type)) return true;
+  if (/<?{ ?[^}]* ?}>?/.test(type)) return true; // { i32, i8 } etc. - anonymous struct types
+  // See comment in isStructPointerType()
+  return type[0] == '%';
+},
+  INT_TYPES: {"i1":0,"i8":0,"i16":0,"i32":0,"i64":0},
+  FLOAT_TYPES: {"float":0,"double":0},
+  or64: function (x, y) {
+    var l = (x | 0) | (y | 0);
+    var h = (Math.round(x / 4294967296) | Math.round(y / 4294967296)) * 4294967296;
+    return l + h;
+  },
+  and64: function (x, y) {
+    var l = (x | 0) & (y | 0);
+    var h = (Math.round(x / 4294967296) & Math.round(y / 4294967296)) * 4294967296;
+    return l + h;
+  },
+  xor64: function (x, y) {
+    var l = (x | 0) ^ (y | 0);
+    var h = (Math.round(x / 4294967296) ^ Math.round(y / 4294967296)) * 4294967296;
+    return l + h;
+  },
+  getNativeTypeSize: function (type, quantumSize) {
+    if (Runtime.QUANTUM_SIZE == 1) return 1;
+    var size = {
+      '%i1': 1,
+      '%i8': 1,
+      '%i16': 2,
+      '%i32': 4,
+      '%i64': 8,
+      "%float": 4,
+      "%double": 8
+    }['%'+type]; // add '%' since float and double confuse Closure compiler as keys, and also spidermonkey as a compiler will remove 's from '_i8' etc
+    if (!size) {
+      if (type.charAt(type.length-1) == '*') {
+        size = Runtime.QUANTUM_SIZE; // A pointer
+      } else if (type[0] == 'i') {
+        var bits = parseInt(type.substr(1));
+        assert(bits % 8 == 0);
+        size = bits/8;
+      }
+    }
+    return size;
+  },
+  getNativeFieldSize: function (type) {
+    return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE);
+  },
+  dedup: function dedup(items, ident) {
+  var seen = {};
+  if (ident) {
+    return items.filter(function(item) {
+      if (seen[item[ident]]) return false;
+      seen[item[ident]] = true;
+      return true;
+    });
+  } else {
+    return items.filter(function(item) {
+      if (seen[item]) return false;
+      seen[item] = true;
+      return true;
+    });
+  }
+},
+  set: function set() {
+  var args = typeof arguments[0] === 'object' ? arguments[0] : arguments;
+  var ret = {};
+  for (var i = 0; i < args.length; i++) {
+    ret[args[i]] = 0;
+  }
+  return ret;
+},
+  STACK_ALIGN: 8,
+  getAlignSize: function (type, size, vararg) {
+    // we align i64s and doubles on 64-bit boundaries, unlike x86
+    if (type == 'i64' || type == 'double' || vararg) return 8;
+    if (!type) return Math.min(size, 8); // align structures internally to 64 bits
+    return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE);
+  },
+  calculateStructAlignment: function calculateStructAlignment(type) {
+    type.flatSize = 0;
+    type.alignSize = 0;
+    var diffs = [];
+    var prev = -1;
+    type.flatIndexes = type.fields.map(function(field) {
+      var size, alignSize;
+      if (Runtime.isNumberType(field) || Runtime.isPointerType(field)) {
+        size = Runtime.getNativeTypeSize(field); // pack char; char; in structs, also char[X]s.
+        alignSize = Runtime.getAlignSize(field, size);
+      } else if (Runtime.isStructType(field)) {
+        size = Types.types[field].flatSize;
+        alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize);
+      } else if (field[0] == 'b') {
+        // bN, large number field, like a [N x i8]
+        size = field.substr(1)|0;
+        alignSize = 1;
+      } else {
+        throw 'Unclear type in struct: ' + field + ', in ' + type.name_ + ' :: ' + dump(Types.types[type.name_]);
+      }
+      if (type.packed) alignSize = 1;
+      type.alignSize = Math.max(type.alignSize, alignSize);
+      var curr = Runtime.alignMemory(type.flatSize, alignSize); // if necessary, place this on aligned memory
+      type.flatSize = curr + size;
+      if (prev >= 0) {
+        diffs.push(curr-prev);
+      }
+      prev = curr;
+      return curr;
+    });
+    type.flatSize = Runtime.alignMemory(type.flatSize, type.alignSize);
+    if (diffs.length == 0) {
+      type.flatFactor = type.flatSize;
+    } else if (Runtime.dedup(diffs).length == 1) {
+      type.flatFactor = diffs[0];
+    }
+    type.needsFlattening = (type.flatFactor != 1);
+    return type.flatIndexes;
+  },
+  generateStructInfo: function (struct, typeName, offset) {
+    var type, alignment;
+    if (typeName) {
+      offset = offset || 0;
+      type = (typeof Types === 'undefined' ? Runtime.typeInfo : Types.types)[typeName];
+      if (!type) return null;
+      if (type.fields.length != struct.length) {
+        printErr('Number of named fields must match the type for ' + typeName + ': possibly duplicate struct names. Cannot return structInfo');
+        return null;
+      }
+      alignment = type.flatIndexes;
+    } else {
+      var type = { fields: struct.map(function(item) { return item[0] }) };
+      alignment = Runtime.calculateStructAlignment(type);
+    }
+    var ret = {
+      __size__: type.flatSize
+    };
+    if (typeName) {
+      struct.forEach(function(item, i) {
+        if (typeof item === 'string') {
+          ret[item] = alignment[i] + offset;
+        } else {
+          // embedded struct
+          var key;
+          for (var k in item) key = k;
+          ret[key] = Runtime.generateStructInfo(item[key], type.fields[i], alignment[i]);
+        }
+      });
+    } else {
+      struct.forEach(function(item, i) {
+        ret[item[1]] = alignment[i];
+      });
+    }
+    return ret;
+  },
+  dynCall: function (sig, ptr, args) {
+    if (args && args.length) {
+      if (!args.splice) args = Array.prototype.slice.call(args);
+      args.splice(0, 0, ptr);
+      return Module['dynCall_' + sig].apply(null, args);
+    } else {
+      return Module['dynCall_' + sig].call(null, ptr);
+    }
+  },
+  functionPointers: [],
+  addFunction: function (func) {
+    for (var i = 0; i < Runtime.functionPointers.length; i++) {
+      if (!Runtime.functionPointers[i]) {
+        Runtime.functionPointers[i] = func;
+        return 2 + 2*i;
+      }
+    }
+    throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';
+  },
+  removeFunction: function (index) {
+    Runtime.functionPointers[(index-2)/2] = null;
+  },
+  warnOnce: function (text) {
+    if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {};
+    if (!Runtime.warnOnce.shown[text]) {
+      Runtime.warnOnce.shown[text] = 1;
+      Module.printErr(text);
+    }
+  },
+  funcWrappers: {},
+  getFuncWrapper: function (func, sig) {
+    assert(sig);
+    if (!Runtime.funcWrappers[func]) {
+      Runtime.funcWrappers[func] = function() {
+        return Runtime.dynCall(sig, func, arguments);
+      };
+    }
+    return Runtime.funcWrappers[func];
+  },
+  UTF8Processor: function () {
+    var buffer = [];
+    var needed = 0;
+    this.processCChar = function (code) {
+      code = code & 0xff;
+      if (needed) {
+        buffer.push(code);
+        needed--;
+      }
+      if (buffer.length == 0) {
+        if (code < 128) return String.fromCharCode(code);
+        buffer.push(code);
+        if (code > 191 && code < 224) {
+          needed = 1;
+        } else {
+          needed = 2;
+        }
+        return '';
+      }
+      if (needed > 0) return '';
+      var c1 = buffer[0];
+      var c2 = buffer[1];
+      var c3 = buffer[2];
+      var ret;
+      if (c1 > 191 && c1 < 224) {
+        ret = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
+      } else {
+        ret = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
+      }
+      buffer.length = 0;
+      return ret;
+    }
+    this.processJSString = function(string) {
+      string = unescape(encodeURIComponent(string));
+      var ret = [];
+      for (var i = 0; i < string.length; i++) {
+        ret.push(string.charCodeAt(i));
+      }
+      return ret;
+    }
+  },
+  stackAlloc: function (size) { var ret = STACKTOP;STACKTOP = (STACKTOP + size)|0;STACKTOP = ((((STACKTOP)+7)>>3)<<3); return ret; },
+  staticAlloc: function (size) { var ret = STATICTOP;STATICTOP = (STATICTOP + size)|0;STATICTOP = ((((STATICTOP)+7)>>3)<<3); return ret; },
+  dynamicAlloc: function (size) { var ret = DYNAMICTOP;DYNAMICTOP = (DYNAMICTOP + size)|0;DYNAMICTOP = ((((DYNAMICTOP)+7)>>3)<<3); if (DYNAMICTOP >= TOTAL_MEMORY) enlargeMemory();; return ret; },
+  alignMemory: function (size,quantum) { var ret = size = Math.ceil((size)/(quantum ? quantum : 8))*(quantum ? quantum : 8); return ret; },
+  makeBigInt: function (low,high,unsigned) { var ret = (unsigned ? ((+(((low)>>>(0))))+((+(((high)>>>(0))))*(+(4294967296)))) : ((+(((low)>>>(0))))+((+(((high)|(0))))*(+(4294967296))))); return ret; },
+  GLOBAL_BASE: 8,
+  QUANTUM_SIZE: 4,
+  __dummy__: 0
+}
+//========================================
+// Runtime essentials
+//========================================
+var __THREW__ = 0; // Used in checking for thrown exceptions.
+var ABORT = false; // whether we are quitting the application. no code should run after this. set in exit() and abort()
+var undef = 0;
+// tempInt is used for 32-bit signed values or smaller. tempBigInt is used
+// for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of tempInt
+var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI, tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD;
+var tempI64, tempI64b;
+var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRet7, tempRet8, tempRet9;
+function abort(text) {
+  Module.print(text + ':\n' + (new Error).stack);
+  ABORT = true;
+  throw "Assertion: " + text;
+}
+function assert(condition, text) {
+  if (!condition) {
+    abort('Assertion failed: ' + text);
+  }
+}
+var globalScope = this;
+// C calling interface. A convenient way to call C functions (in C files, or
+// defined with extern "C").
+//
+// Note: LLVM optimizations can inline and remove functions, after which you will not be
+//       able to call them. Closure can also do so. To avoid that, add your function to
+//       the exports using something like
+//
+//         -s EXPORTED_FUNCTIONS='["_main", "_myfunc"]'
+//
+// @param ident      The name of the C function (note that C++ functions will be name-mangled - use extern "C")
+// @param returnType The return type of the function, one of the JS types 'number', 'string' or 'array' (use 'number' for any C pointer, and
+//                   'array' for JavaScript arrays and typed arrays).
+// @param argTypes   An array of the types of arguments for the function (if there are no arguments, this can be ommitted). Types are as in returnType,
+//                   except that 'array' is not possible (there is no way for us to know the length of the array)
+// @param args       An array of the arguments to the function, as native JS values (as in returnType)
+//                   Note that string arguments will be stored on the stack (the JS string will become a C string on the stack).
+// @return           The return value, as a native JS value (as in returnType)
+function ccall(ident, returnType, argTypes, args) {
+  return ccallFunc(getCFunc(ident), returnType, argTypes, args);
+}
+Module["ccall"] = ccall;
+// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)
+function getCFunc(ident) {
+  try {
+    var func = globalScope['Module']['_' + ident]; // closure exported function
+    if (!func) func = eval('_' + ident); // explicit lookup
+  } catch(e) {
+  }
+  assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)');
+  return func;
+}
+// Internal function that does a C call using a function, not an identifier
+function ccallFunc(func, returnType, argTypes, args) {
+  var stack = 0;
+  function toC(value, type) {
+    if (type == 'string') {
+      if (value === null || value === undefined || value === 0) return 0; // null string
+      if (!stack) stack = Runtime.stackSave();
+      var ret = Runtime.stackAlloc(value.length+1);
+      writeStringToMemory(value, ret);
+      return ret;
+    } else if (type == 'array') {
+      if (!stack) stack = Runtime.stackSave();
+      var ret = Runtime.stackAlloc(value.length);
+      writeArrayToMemory(value, ret);
+      return ret;
+    }
+    return value;
+  }
+  function fromC(value, type) {
+    if (type == 'string') {
+      return Pointer_stringify(value);
+    }
+    assert(type != 'array');
+    return value;
+  }
+  var i = 0;
+  var cArgs = args ? args.map(function(arg) {
+    return toC(arg, argTypes[i++]);
+  }) : [];
+  var ret = fromC(func.apply(null, cArgs), returnType);
+  if (stack) Runtime.stackRestore(stack);
+  return ret;
+}
+// Returns a native JS wrapper for a C function. This is similar to ccall, but
+// returns a function you can call repeatedly in a normal way. For example:
+//
+//   var my_function = cwrap('my_c_function', 'number', ['number', 'number']);
+//   alert(my_function(5, 22));
+//   alert(my_function(99, 12));
+//
+function cwrap(ident, returnType, argTypes) {
+  var func = getCFunc(ident);
+  return function() {
+    return ccallFunc(func, returnType, argTypes, Array.prototype.slice.call(arguments));
+  }
+}
+Module["cwrap"] = cwrap;
+// Sets a value in memory in a dynamic way at run-time. Uses the
+// type data. This is the same as makeSetValue, except that
+// makeSetValue is done at compile-time and generates the needed
+// code then, whereas this function picks the right code at
+// run-time.
+// Note that setValue and getValue only do *aligned* writes and reads!
+// Note that ccall uses JS types as for defining types, while setValue and
+// getValue need LLVM types ('i8', 'i32') - this is a lower-level operation
+function setValue(ptr, value, type, noSafe) {
+  type = type || 'i8';
+  if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
+    switch(type) {
+      case 'i1': HEAP8[(ptr)]=value; break;
+      case 'i8': HEAP8[(ptr)]=value; break;
+      case 'i16': HEAP16[((ptr)>>1)]=value; break;
+      case 'i32': HEAP32[((ptr)>>2)]=value; break;
+      case 'i64': (tempI64 = [value>>>0,Math.min(Math.floor((value)/(+(4294967296))), (+(4294967295)))>>>0],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;
+      case 'float': HEAPF32[((ptr)>>2)]=value; break;
+      case 'double': HEAPF64[((ptr)>>3)]=value; break;
+      default: abort('invalid type for setValue: ' + type);
+    }
+}
+Module['setValue'] = setValue;
+// Parallel to setValue.
+function getValue(ptr, type, noSafe) {
+  type = type || 'i8';
+  if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
+    switch(type) {
+      case 'i1': return HEAP8[(ptr)];
+      case 'i8': return HEAP8[(ptr)];
+      case 'i16': return HEAP16[((ptr)>>1)];
+      case 'i32': return HEAP32[((ptr)>>2)];
+      case 'i64': return HEAP32[((ptr)>>2)];
+      case 'float': return HEAPF32[((ptr)>>2)];
+      case 'double': return HEAPF64[((ptr)>>3)];
+      default: abort('invalid type for setValue: ' + type);
+    }
+  return null;
+}
+Module['getValue'] = getValue;
+var ALLOC_NORMAL = 0; // Tries to use _malloc()
+var ALLOC_STACK = 1; // Lives for the duration of the current function call
+var ALLOC_STATIC = 2; // Cannot be freed
+var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk
+var ALLOC_NONE = 4; // Do not allocate
+Module['ALLOC_NORMAL'] = ALLOC_NORMAL;
+Module['ALLOC_STACK'] = ALLOC_STACK;
+Module['ALLOC_STATIC'] = ALLOC_STATIC;
+Module['ALLOC_DYNAMIC'] = ALLOC_DYNAMIC;
+Module['ALLOC_NONE'] = ALLOC_NONE;
+// allocate(): This is for internal use. You can use it yourself as well, but the interface
+//             is a little tricky (see docs right below). The reason is that it is optimized
+//             for multiple syntaxes to save space in generated code. So you should
+//             normally not use allocate(), and instead allocate memory using _malloc(),
+//             initialize it with setValue(), and so forth.
+// @slab: An array of data, or a number. If a number, then the size of the block to allocate,
+//        in *bytes* (note that this is sometimes confusing: the next parameter does not
+//        affect this!)
+// @types: Either an array of types, one for each byte (or 0 if no type at that position),
+//         or a single type which is used for the entire block. This only matters if there
+//         is initial data - if @slab is a number, then this does not matter at all and is
+//         ignored.
+// @allocator: How to allocate memory, see ALLOC_*
+function allocate(slab, types, allocator, ptr) {
+  var zeroinit, size;
+  if (typeof slab === 'number') {
+    zeroinit = true;
+    size = slab;
+  } else {
+    zeroinit = false;
+    size = slab.length;
+  }
+  var singleType = typeof types === 'string' ? types : null;
+  var ret;
+  if (allocator == ALLOC_NONE) {
+    ret = ptr;
+  } else {
+    ret = [_malloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));
+  }
+  if (zeroinit) {
+    var ptr = ret, stop;
+    assert((ret & 3) == 0);
+    stop = ret + (size & ~3);
+    for (; ptr < stop; ptr += 4) {
+      HEAP32[((ptr)>>2)]=0;
+    }
+    stop = ret + size;
+    while (ptr < stop) {
+      HEAP8[((ptr++)|0)]=0;
+    }
+    return ret;
+  }
+  if (singleType === 'i8') {
+    if (slab.subarray || slab.slice) {
+      HEAPU8.set(slab, ret);
+    } else {
+      HEAPU8.set(new Uint8Array(slab), ret);
+    }
+    return ret;
+  }
+  var i = 0, type, typeSize, previousType;
+  while (i < size) {
+    var curr = slab[i];
+    if (typeof curr === 'function') {
+      curr = Runtime.getFunctionIndex(curr);
+    }
+    type = singleType || types[i];
+    if (type === 0) {
+      i++;
+      continue;
+    }
+    if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later
+    setValue(ret+i, curr, type);
+    // no need to look up size unless type changes, so cache it
+    if (previousType !== type) {
+      typeSize = Runtime.getNativeTypeSize(type);
+      previousType = type;
+    }
+    i += typeSize;
+  }
+  return ret;
+}
+Module['allocate'] = allocate;
+function Pointer_stringify(ptr, /* optional */ length) {
+  // Find the length, and check for UTF while doing so
+  var hasUtf = false;
+  var t;
+  var i = 0;
+  while (1) {
+    t = HEAPU8[(((ptr)+(i))|0)];
+    if (t >= 128) hasUtf = true;
+    else if (t == 0 && !length) break;
+    i++;
+    if (length && i == length) break;
+  }
+  if (!length) length = i;
+  var ret = '';
+  if (!hasUtf) {
+    var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack
+    var curr;
+    while (length > 0) {
+      curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));
+      ret = ret ? ret + curr : curr;
+      ptr += MAX_CHUNK;
+      length -= MAX_CHUNK;
+    }
+    return ret;
+  }
+  var utf8 = new Runtime.UTF8Processor();
+  for (i = 0; i < length; i++) {
+    t = HEAPU8[(((ptr)+(i))|0)];
+    ret += utf8.processCChar(t);
+  }
+  return ret;
+}
+Module['Pointer_stringify'] = Pointer_stringify;
+// Memory management
+var PAGE_SIZE = 4096;
+function alignMemoryPage(x) {
+  return ((x+4095)>>12)<<12;
+}
+var HEAP;
+var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
+var STATIC_BASE = 0, STATICTOP = 0, staticSealed = false; // static area
+var STACK_BASE = 0, STACKTOP = 0, STACK_MAX = 0; // stack area
+var DYNAMIC_BASE = 0, DYNAMICTOP = 0; // dynamic area handled by sbrk
+function enlargeMemory() {
+  abort('Cannot enlarge memory arrays in asm.js. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value, or (2) set Module.TOTAL_MEMORY before the program runs.');
+}
+var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880;
+var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 16777216;
+var FAST_MEMORY = Module['FAST_MEMORY'] || 2097152;
+// Initialize the runtime's memory
+// check for full engine support (use string 'subarray' to avoid closure compiler confusion)
+assert(!!Int32Array && !!Float64Array && !!(new Int32Array(1)['subarray']) && !!(new Int32Array(1)['set']),
+       'Cannot fallback to non-typed array case: Code is too specialized');
+var buffer = new ArrayBuffer(TOTAL_MEMORY);
+HEAP8 = new Int8Array(buffer);
+HEAP16 = new Int16Array(buffer);
+HEAP32 = new Int32Array(buffer);
+HEAPU8 = new Uint8Array(buffer);
+HEAPU16 = new Uint16Array(buffer);
+HEAPU32 = new Uint32Array(buffer);
+HEAPF32 = new Float32Array(buffer);
+HEAPF64 = new Float64Array(buffer);
+// Endianness check (note: assumes compiler arch was little-endian)
+HEAP32[0] = 255;
+assert(HEAPU8[0] === 255 && HEAPU8[3] === 0, 'Typed arrays 2 must be run on a little-endian system');
+Module['HEAP'] = HEAP;
+Module['HEAP8'] = HEAP8;
+Module['HEAP16'] = HEAP16;
+Module['HEAP32'] = HEAP32;
+Module['HEAPU8'] = HEAPU8;
+Module['HEAPU16'] = HEAPU16;
+Module['HEAPU32'] = HEAPU32;
+Module['HEAPF32'] = HEAPF32;
+Module['HEAPF64'] = HEAPF64;
+function callRuntimeCallbacks(callbacks) {
+  while(callbacks.length > 0) {
+    var callback = callbacks.shift();
+    if (typeof callback == 'function') {
+      callback();
+      continue;
+    }
+    var func = callback.func;
+    if (typeof func === 'number') {
+      if (callback.arg === undefined) {
+        Runtime.dynCall('v', func);
+      } else {
+        Runtime.dynCall('vi', func, [callback.arg]);
+      }
+    } else {
+      func(callback.arg === undefined ? null : callback.arg);
+    }
+  }
+}
+var __ATINIT__ = []; // functions called during startup
+var __ATMAIN__ = []; // functions called when main() is to be run
+var __ATEXIT__ = []; // functions called during shutdown
+var runtimeInitialized = false;
+function ensureInitRuntime() {
+  if (runtimeInitialized) return;
+  runtimeInitialized = true;
+  callRuntimeCallbacks(__ATINIT__);
+}
+function preMain() {
+  callRuntimeCallbacks(__ATMAIN__);
+}
+function exitRuntime() {
+  callRuntimeCallbacks(__ATEXIT__);
+}
+// Tools
+// This processes a JS string into a C-line array of numbers, 0-terminated.
+// For LLVM-originating strings, see parser.js:parseLLVMString function
+function intArrayFromString(stringy, dontAddNull, length /* optional */) {
+  var ret = (new Runtime.UTF8Processor()).processJSString(stringy);
+  if (length) {
+    ret.length = length;
+  }
+  if (!dontAddNull) {
+    ret.push(0);
+  }
+  return ret;
+}
+Module['intArrayFromString'] = intArrayFromString;
+function intArrayToString(array) {
+  var ret = [];
+  for (var i = 0; i < array.length; i++) {
+    var chr = array[i];
+    if (chr > 0xFF) {
+      chr &= 0xFF;
+    }
+    ret.push(String.fromCharCode(chr));
+  }
+  return ret.join('');
+}
+Module['intArrayToString'] = intArrayToString;
+// Write a Javascript array to somewhere in the heap
+function writeStringToMemory(string, buffer, dontAddNull) {
+  var array = intArrayFromString(string, dontAddNull);
+  var i = 0;
+  while (i < array.length) {
+    var chr = array[i];
+    HEAP8[(((buffer)+(i))|0)]=chr
+    i = i + 1;
+  }
+}
+Module['writeStringToMemory'] = writeStringToMemory;
+function writeArrayToMemory(array, buffer) {
+  for (var i = 0; i < array.length; i++) {
+    HEAP8[(((buffer)+(i))|0)]=array[i];
+  }
+}
+Module['writeArrayToMemory'] = writeArrayToMemory;
+function unSign(value, bits, ignore, sig) {
+  if (value >= 0) {
+    return value;
+  }
+  return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts
+                    : Math.pow(2, bits)         + value;
+}
+function reSign(value, bits, ignore, sig) {
+  if (value <= 0) {
+    return value;
+  }
+  var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32
+                        : Math.pow(2, bits-1);
+  if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that
+                                                       // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors
+                                                       // TODO: In i64 mode 1, resign the two parts separately and safely
+    value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts
+  }
+  return value;
+}
+if (!Math['imul']) Math['imul'] = function(a, b) {
+  var ah  = a >>> 16;
+  var al = a & 0xffff;
+  var bh  = b >>> 16;
+  var bl = b & 0xffff;
+  return (al*bl + ((ah*bl + al*bh) << 16))|0;
+};
+// A counter of dependencies for calling run(). If we need to
+// do asynchronous work before running, increment this and
+// decrement it. Incrementing must happen in a place like
+// PRE_RUN_ADDITIONS (used by emcc to add file preloading).
+// Note that you can add dependencies in preRun, even though
+// it happens right before run - run will be postponed until
+// the dependencies are met.
+var runDependencies = 0;
+var runDependencyTracking = {};
+var calledInit = false, calledRun = false;
+var runDependencyWatcher = null;
+function addRunDependency(id) {
+  runDependencies++;
+  if (Module['monitorRunDependencies']) {
+    Module['monitorRunDependencies'](runDependencies);
+  }
+  if (id) {
+    assert(!runDependencyTracking[id]);
+    runDependencyTracking[id] = 1;
+  } else {
+    Module.printErr('warning: run dependency added without ID');
+  }
+}
+Module['addRunDependency'] = addRunDependency;
+function removeRunDependency(id) {
+  runDependencies--;
+  if (Module['monitorRunDependencies']) {
+    Module['monitorRunDependencies'](runDependencies);
+  }
+  if (id) {
+    assert(runDependencyTracking[id]);
+    delete runDependencyTracking[id];
+  } else {
+    Module.printErr('warning: run dependency removed without ID');
+  }
+  if (runDependencies == 0) {
+    if (runDependencyWatcher !== null) {
+      clearInterval(runDependencyWatcher);
+      runDependencyWatcher = null;
+    }
+    // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)
+    if (!calledRun && shouldRunNow) run();
+  }
+}
+Module['removeRunDependency'] = removeRunDependency;
+Module["preloadedImages"] = {}; // maps url to image data
+Module["preloadedAudios"] = {}; // maps url to audio data
+function addPreRun(func) {
+  if (!Module['preRun']) Module['preRun'] = [];
+  else if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
+  Module['preRun'].push(func);
+}
+var awaitingMemoryInitializer = false;
+function loadMemoryInitializer(filename) {
+  function applyData(data) {
+    HEAPU8.set(data, STATIC_BASE);
+    runPostSets();
+  }
+  // always do this asynchronously, to keep shell and web as similar as possible
+  addPreRun(function() {
+    if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) {
+      applyData(Module['readBinary'](filename));
+    } else {
+      Browser.asyncLoad(filename, function(data) {
+        applyData(data);
+      }, function(data) {
+        throw 'could not load memory initializer ' + filename;
+      });
+    }
+  });
+  awaitingMemoryInitializer = false;
+}
+// === Body ===
+STATIC_BASE = 8;
+STATICTOP = STATIC_BASE + 243440;
+var _stdout;
+var _stdin;
+var _stderr;
+var _stdout = _stdout=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
+var _stdin = _stdin=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
+var _stderr = _stderr=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
+/* memory initializer */ allocate([0,0,128,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,90,71,110,117,112,108,111,116,80,0,0,0,0,0,0,0,90,71,110,117,112,108,111,116,68,0,0,0,0,0,0,0,90,71,110,117,112,108,111,116,0,0,0,0,0,0,0,0,58,140,48,226,142,121,69,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,139,1,0,240,84,3,0,80,126,1,0,0,0,0,0,80,131,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,134,1,0,248,132,1,0,232,123,1,0,0,0,0,0,224,128,1,0,0,0,0,0,0,85,1,0,8,0,0,0,208,80,1,0,9,0,0,0,192,76,1,0,10,0,0,0,64,73,1,0,13,0,0,0,240,70,1,0,27,0,0,0,40,67,1,0,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,244,1,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,1,0,0,0,1,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,3,0,0,0,1,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,154,153,153,153,153,153,169,63,184,30,133,235,81,184,158,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,2,0,0,0,1,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,123,20,174,71,225,122,148,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,118,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,193,1,0,16,189,1,0,16,220,1,0,192,222,1,0,0,0,0,0,96,133,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,253,1,0,0,0,0,0,160,149,1,0,32,148,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,5,0,0,0,1,0,0,0,20,0,0,0,26,0,0,0,21,0,0,0,27,0,0,0,14,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,26,1,0,0,0,0,0,0,2,0,0,0,94,1,0,0,1,0,0,0,2,0,0,0,88,0,0,0,0,0,0,0,2,0,0,0,26,0,0,0,1,0,0,0,2,0,0,0,58,0,0,0,0,0,0,0,2,0,0,0,48,1,0,0,1,0,0,0,1,0,0,0,96,0,0,0,1,0,0,0,2,0,0,0,96,0,0,0,1,0,0,0,3,0,0,0,96,0,0,0,3,0,0,0,1,0,0,0,96,0,0,0,3,0,0,0,2,0,0,0,96,0,0,0,3,0,0,0,3,0,0,0,96,0,0,0,3,0,0,0,2,0,0,0,26,1,0,0,3,0,0,0,2,0,0,0,88,0,0,0,3,0,0,0,2,0,0,0,58,0,0,0,1,0,0,0,2,0,0,0,134,1,0,0,3,0,0,0,2,0,0,0,134,1,0,0,1,0,0,0,2,0,0,0,140,1,0,0,1,0,0,0,2,0,0,0,8,0,0,0,1,0,0,0,2,0,0,0,38,1,0,0,1,0,0,0,2,0,0,0,54,1,0,0,1,0,0,0,2,0,0,0,94,0,0,0,1,0,0,0,2,0,0,0,182,0,0,0,3,0,0,0,2,0,0,0,140,1,0,0,1,0,0,0,2,0,0,0,14,0,0,0,1,0,0,0,2,0,0,0,16,0,0,0,1,0,0,0,2,0,0,0,24,1,0,0,1,0,0,0,2,0,0,0,132,0,0,0,1,0,0,0,2,0,0,0,118,1,0,0,1,0,0,0,2,0,0,0,108,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,3,0,0,0,2,0,0,0,1,0,0,0,3,0,0,0,3,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0,4,0,0,0,2,0,0,0,1,0,0,0,4,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,3,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,4,0,0,0,2,0,0,0,2,0,0,0,4,0,0,0,3,0,0,0,2,0,0,0,4,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,3,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0,3,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,2,0,0,0,1,0,0,0,3,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,1,0,0,0,3,0,0,0,4,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,154,153,153,153,153,153,185,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,93,1,0,8,93,1,0,248,92,1,0,240,92,1,0,208,92,1,0,200,92,1,0,184,92,1,0,160,92,1,0,0,0,0,0,0,0,0,0,119,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,42,2,0,1,0,0,0,176,34,3,0,2,0,0,0,32,42,2,0,3,0,0,0,0,0,0,0,0,0,0,0,117,110,115,32,112,109,51,100,59,115,101,32,108,109,97,114,103,32,115,99,114,101,32,48,46,48,53,59,115,101,32,114,109,97,114,103,32,115,99,114,101,32,48,46,57,55,53,59,32,115,101,32,98,109,97,114,103,32,115,99,114,101,32,48,46,50,50,59,32,115,101,32,116,109,97,114,103,32,115,99,114,101,32,48,46,56,54,59,115,101,32,103,114,105,100,59,115,101,32,116,105,99,115,32,115,99,97,108,101,32,48,59,32,115,101,32,120,116,105,99,115,32,48,44,48,46,49,59,115,101,32,121,116,105,99,115,32,48,44,48,46,49,59,115,101,32,107,101,121,32,116,111,112,32,114,105,103,104,116,32,97,116,32,115,99,114,101,32,48,46,57,55,53,44,48,46,57,55,53,32,104,111,114,105,122,111,110,116,97,108,32,116,105,116,108,101,32,39,82,44,71,44,66,32,112,114,111,102,105,108,101,115,32,111,102,32,116,104,101,32,99,117,114,114,101,110,116,32,99,111,108,111,114,32,112,97,108,101,116,116,101,39,59,0,0,0,0,0,115,112,108,111,116,32,49,47,48,59,10,10,10,0,0,0,114,101,115,101,116,59,115,101,116,32,109,117,108,116,105,59,117,110,115,32,98,111,114,100,101,114,59,117,110,115,32,107,101,121,59,115,101,116,32,116,105,99,32,105,110,59,117,110,115,32,120,116,105,99,115,59,117,110,115,32,121,116,105,99,115,59,115,101,32,99,98,116,105,99,32,48,44,48,46,49,44,49,32,109,105,114,114,32,102,111,114,109,97,116,32,39,39,59,115,101,32,120,114,91,48,58,49,93,59,115,101,32,121,114,91,48,58,49,93,59,115,101,32,122,114,91,48,58,49,93,59,115,101,32,99,98,114,91,48,58,49,93,59,115,101,32,112,109,51,100,32,109,97,112,59,115,101,116,32,99,111,108,111,114,98,111,120,32,104,111,114,32,117,115,101,114,32,111,114,105,103,32,48,46,48,53,44,48,46,48,50,32,115,105,122,101,32,48,46,57,50,53,44,48,46,49,50,59,0,0,0,0,0,0,0,0,10,10,10,117,110,115,32,109,117,108,116,105,59,10,0,0,248,110,3,0,56,16,3,0,100,0,0,0,100,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,48,1,0,0,190,0,0,0,190,0,0,0,190,0,0,0,2,0,0,0,190,0,0,0,126,0,0,0,126,0,0,0,90,0,0,0,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,13,3,0,128,10,3,0,220,5,0,0,132,3,0,0,45,0,0,0,22,0,0,0,20,0,0,0,20,0,0,0,20,0,0,0,142,1,0,0,158,1,0,0,18,1,0,0,2,0,0,0,120,0,0,0,82,0,0,0,34,0,0,0,174,0,0,0,40,0,0,0,62,0,0,0,158,0,0,0,54,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,9,3,0,176,7,3,0,32,3,0,0,184,1,0,0,20,0,0,0,9,0,0,0,8,0,0,0,6,0,0,0,102,0,0,0,48,0,0,0,218,0,0,0,98,0,0,0,2,0,0,0,12,1,0,0,50,0,0,0,96,0,0,0,158,0,0,0,42,0,0,0,164,0,0,0,124,0,0,0,54,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,6,3,0,176,4,3,0,255,15,0,0,59,12,0,0,71,0,0,0,51,0,0,0,36,0,0,0,36,0,0,0,48,1,0,0,8,0,0,0,104,1,0,0,100,0,0,0,2,0,0,0,52,0,0,0,102,0,0,0,86,0,0,0,38,0,0,0,80,0,0,0,160,0,0,0,124,0,0,0,72,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,2,3,0,96,0,3,0,0,4,0,0,12,3,0,0,25,0,0,0,14,0,0,0,11,0,0,0,11,0,0,0,48,1,0,0,20,1,0,0,40,1,0,0,170,0,0,0,2,0,0,0,172,0,0,0,128,0,0,0,60,0,0,0,106,1,0,0,78,0,0,0,12,0,0,0,124,0,0,0,54,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,253,2,0,160,251,2,0,0,4,0,0,12,3,0,0,25,0,0,0,14,0,0,0,11,0,0,0,11,0,0,0,48,1,0,0,234,0,0,0,50,0,0,0,170,0,0,0,2,0,0,0,172,0,0,0,136,0,0,0,42,0,0,0,40,0,0,0,62,0,0,0,12,0,0,0,124,0,0,0,54,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,245,2,0,64,243,2,0,0,4,0,0,12,3,0,0,25,0,0,0,14,0,0,0,11,0,0,0,11,0,0,0,48,1,0,0,20,1,0,0,40,1,0,0,66,0,0,0,2,0,0,0,6,0,0,0,136,0,0,0,42,0,0,0,40,0,0,0,62,0,0,0,12,0,0,0,124,0,0,0,54,0,0,0,48,0,0,0,152,0,0,0,0,0,0,0,65,0,0,0,66,0,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,234,2,0,192,220,2,0,112,23,0,0,160,15,0,0,100,0,0,0,80,0,0,0,100,0,0,0,100,0,0,0,206,0,0,0,148,0,0,0,222,0,0,0,116,1,0,0,2,0,0,0,180,1,0,0,100,0,0,0,130,0,0,0,140,0,0,0,118,0,0,0,34,0,0,0,20,0,0,0,70,0,0,0,48,0,0,0,60,0,0,0,30,0,0,0,1,11,0,0,0,0,0,0,0,0,0,0,52,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,0,0,0,0,0,0,0,56,0,0,0,98,0,0,0,0,0,0,0,4,0,0,0,120,1,0,0,102,0,0,0,24,0,0,0,130,0,0,0,0,0,0,0,0,0,0,0,128,218,2,0,160,216,2,0,73,127,0,0,182,91,0,0,12,3,0,0,177,1,0,0,153,1,0,0,153,1,0,0,106,0,0,0,150,0,0,0,168,0,0,0,2,0,0,0,2,0,0,0,176,1,0,0,40,0,0,0,106,0,0,0,230,0,0,0,28,0,0,0,96,0,0,0,50,0,0,0,58,0,0,0,48,0,0,0,106,0,0,0,40,0,0,0,4,9,0,0,0,0,0,0,0,0,0,0,50,0,0,0,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,42,1,0,0,150,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,214,2,0,120,212,2,0,72,23,0,0,32,28,0,0,220,0,0,0,132,0,0,0,90,0,0,0,90,0,0,0,24,0,0,0,28,1,0,0,62,0,0,0,56,1,0,0,2,0,0,0,46,1,0,0,144,0,0,0,54,0,0,0,28,0,0,0,38,0,0,0,138,0,0,0,146,0,0,0,60,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,210,2,0,248,208,2,0,79,0,0,0,24,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,196,0,0,0,40,0,0,0,242,0,0,0,34,1,0,0,2,0,0,0,86,0,0,0,108,0,0,0,18,0,0,0,146,0,0,0,104,0,0,0,12,0,0,0,124,0,0,0,110,0,0,0,42,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,28,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,207,2,0,0,206,2,0,32,28,0,0,192,18,0,0,124,0,0,0,100,0,0,0,120,0,0,0,120,0,0,0,48,1,0,0,126,1,0,0,254,0,0,0,182,0,0,0,2,0,0,0,90,0,0,0,104,0,0,0,124,0,0,0,70,1,0,0,64,0,0,0,8,0,0,0,194,0,0,0,60,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,204,2,0,144,202,2,0,122,105,0,0,28,79,0,0,38,2,0,0,254,0,0,0,168,0,0,0,168,0,0,0,50,1,0,0,246,0,0,0,148,1,0,0,32,0,0,0,2,0,0,0,74,1,0,0,28,0,0,0,48,0,0,0,220,0,0,0,102,0,0,0,36,0,0,0,184,0,0,0,50,0,0,0,48,0,0,0,180,0,0,0,20,0,0,0,4,25,0,0,0,0,0,0,0,0,0,0,32,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54,0,0,0,136,0,0,0,54,0,0,0,64,0,0,0,0,0,0,0,8,0,0,0,238,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,199,2,0,232,194,2,0,112,23,0,0,16,14,0,0,125,0,0,0,75,0,0,0,75,0,0,0,75,0,0,0,78,0,0,0,6,1,0,0,178,1,0,0,66,1,0,0,2,0,0,0,56,0,0,0,122,0,0,0,10,0,0,0,128,1,0,0,94,0,0,0,82,0,0,0,94,0,0,0,112,0,0,0,46,0,0,0,0,0,0,0,24,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,38,0,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,0,0,0,0,108,1,0,0,148,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,193,2,0,232,191,2,0,0,2,0,0,134,1,0,0,10,0,0,0,7,0,0,0,5,0,0,0,5,0,0,0,48,1,0,0,192,0,0,0,72,0,0,0,86,1,0,0,2,0,0,0,220,0,0,0,22,0,0,0,16,0,0,0,132,1,0,0,98,0,0,0,118,0,0,0,124,0,0,0,44,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,190,2,0,224,188,2,0,208,2,0,0,104,1,0,0,12,0,0,0,7,0,0,0,8,0,0,0,8,0,0,0,48,1,0,0,250,0,0,0,216,0,0,0,88,1,0,0,2,0,0,0,134,0,0,0,38,0,0,0,46,0,0,0,156,0,0,0,52,0,0,0,28,0,0,0,124,0,0,0,54,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,187,2,0,16,185,2,0,16,39,0,0,76,29,0,0,60,0,0,0,30,0,0,0,107,0,0,0,107,0,0,0,104,0,0,0,8,1,0,0,4,1,0,0,16,1,0,0,2,0,0,0,178,0,0,0,26,0,0,0,4,0,0,0,84,1,0,0,108,0,0,0,22,0,0,0,124,0,0,0,60,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,183,2,0,120,182,2,0,21,177,0,0,148,132,0,0,169,0,0,0,112,0,0,0,106,0,0,0,106,0,0,0,204,0,0,0,110,1,0,0,58,0,0,0,30,1,0,0,2,0,0,0,154,1,0,0,152,0,0,0,92,0,0,0,120,0,0,0,18,0,0,0,2,0,0,0,84,0,0,0,32,0,0,0,48,0,0,0,142,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,181,2,0,88,179,2,0,228,12,0,0,36,9,0,0,60,0,0,0,30,0,0,0,20,0,0,0,20,0,0,0,68,0,0,0,80,1,0,0,88,0,0,0,12,0,0,0,2,0,0,0,70,0,0,0,52,0,0,0,68,0,0,0,168,0,0,0,22,0,0,0,76,0,0,0,168,0,0,0,54,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,178,2,0,168,175,2,0,152,58,0,0,16,39,0,0,66,1,0,0,157,0,0,0,66,0,0,0,66,0,0,0,24,1,0,0,210,0,0,0,64,1,0,0,0,1,0,0,2,0,0,0,198,0,0,0,12,0,0,0,84,0,0,0,18,1,0,0,4,0,0,0,16,0,0,0,80,0,0,0,120,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,174,2,0,152,172,2,0,32,28,0,0,176,19,0,0,140,0,0,0,84,0,0,0,63,0,0,0,63,0,0,0,122,1,0,0,42,0,0,0,42,1,0,0,146,0,0,0,2,0,0,0,162,0,0,0,20,0,0,0,118,0,0,0,242,0,0,0,116,0,0,0,26,0,0,0,154,0,0,0,114,0,0,0,54,0,0,0,90,0,0,0,6,0,0,0,148,29,0,0,0,0,0,0,0,0,0,0,6,0,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,16,0,0,0,30,1,0,0,8,0,0,0,34,0,0,0,10,0,0,0,132,0,0,0,136,1,0,0,0,1,0,0,86,0,0,0,0,0,0,0,0,0,36,64,248,170,2,0,192,169,2,0,40,35,0,0,112,23,0,0,120,0,0,0,70,0,0,0,70,0,0,0,70,0,0,0,48,1,0,0,228,0,0,0,118,1,0,0,70,1,0,0,2,0,0,0,62,1,0,0,30,0,0,0,56,0,0,0,18,0,0,0,24,0,0,0,12,0,0,0,124,0,0,0,54,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0].concat([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,3,0,64,168,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,172,1,0,0,34,0,0,0,4,0,0,0,156,0,0,0,2,0,0,0,212,0,0,0,74,0,0,0,62,0,0,0,20,0,0,0,68,0,0,0,132,0,0,0,110,0,0,0,122,0,0,0,48,0,0,0,144,0,0,0,10,0,0,0,5,11,0,0,0,0,0,0,0,0,0,0,28,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,0,0,0,180,0,0,0,4,1,0,0,14,0,0,0,0,0,0,0,6,0,0,0,82,0,0,0,194,0,0,0,228,0,0,0,102,1,0,0,0,0,0,0,0,0,36,64,208,165,2,0,48,164,2,0,182,3,0,0,122,2,0,0,18,0,0,0,10,0,0,0,7,0,0,0,7,0,0,0,200,0,0,0,248,0,0,0,18,0,0,0,140,1,0,0,2,0,0,0,152,0,0,0,94,0,0,0,142,0,0,0,180,0,0,0,30,0,0,0,176,0,0,0,148,0,0,0,26,0,0,0,10,0,0,0,204,0,0,0,2,0,0,0,1,9,0,0,0,0,0,0,0,0,0,0,24,0,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,166,0,0,0,82,1,0,0,138,0,0,0,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,162,2,0,72,161,2,0,232,3,0,0,232,3,0,0,25,0,0,0,16,0,0,0,18,0,0,0,18,0,0,0,230,0,0,0,100,1,0,0,244,0,0,0,76,0,0,0,2,0,0,0,130,0,0,0,32,0,0,0,154,0,0,0,236,0,0,0,96,0,0,0,12,0,0,0,6,0,0,0,60,0,0,0,48,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,160,2,0,208,158,2,0,220,5,0,0,132,3,0,0,45,0,0,0,22,0,0,0,20,0,0,0,20,0,0,0,188,0,0,0,106,1,0,0,182,1,0,0,174,1,0,0,2,0,0,0,26,1,0,0,134,0,0,0,132,0,0,0,160,0,0,0,90,0,0,0,114,0,0,0,30,0,0,0,56,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,176,157,2,0,72,156,2,0,220,5,0,0,132,3,0,0,45,0,0,0,22,0,0,0,20,0,0,0,20,0,0,0,188,0,0,0,14,1,0,0,158,0,0,0,146,1,0,0,2,0,0,0,26,1,0,0,134,0,0,0,132,0,0,0,160,0,0,0,90,0,0,0,114,0,0,0,30,0,0,0,56,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,154,2,0,248,152,2,0,32,28,0,0,176,19,0,0,110,0,0,0,66,0,0,0,63,0,0,0,63,0,0,0,122,1,0,0,42,0,0,0,186,0,0,0,146,0,0,0,2,0,0,0,162,0,0,0,20,0,0,0,118,0,0,0,34,1,0,0,16,0,0,0,26,0,0,0,154,0,0,0,114,0,0,0,48,0,0,0,90,0,0,0,6,0,0,0,148,32,0,0,0,0,0,0,0,0,0,0,6,0,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,16,0,0,0,32,0,0,0,8,0,0,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,0,0,0,86,0,0,0,0,0,0,0,0,0,0,0,0,152,2,0,216,149,2,0,32,28,0,0,176,19,0,0,100,0,0,0,60,0,0,0,63,0,0,0,63,0,0,0,122,1,0,0,42,0,0,0,186,0,0,0,14,0,0,0,2,0,0,0,162,0,0,0,20,0,0,0,118,0,0,0,242,0,0,0,12,0,0,0,26,0,0,0,154,0,0,0,114,0,0,0,54,0,0,0,0,0,0,0,6,0,0,0,128,32,0,0,0,0,0,0,0,0,0,0,6,0,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,16,0,0,0,30,1,0,0,8,0,0,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,86,0,0,0,0,0,0,0,0,0,0,0,232,147,2,0,88,146,2,0,32,28,0,0,176,19,0,0,100,0,0,0,60,0,0,0,63,0,0,0,63,0,0,0,122,1,0,0,42,0,0,0,186,0,0,0,14,0,0,0,2,0,0,0,162,0,0,0,20,0,0,0,118,0,0,0,242,0,0,0,12,0,0,0,26,0,0,0,154,0,0,0,114,0,0,0,54,0,0,0,0,0,0,0,6,0,0,0,128,32,0,0,0,0,0,0,0,0,0,0,6,0,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,16,0,0,0,30,1,0,0,8,0,0,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,86,0,0,0,0,0,0,0,0,0,0,0,240,144,2,0,176,142,2,0,184,11,0,0,8,7,0,0,83,0,0,0,41,0,0,0,41,0,0,0,41,0,0,0,46,0,0,0,84,0,0,0,164,0,0,0,52,1,0,0,2,0,0,0,124,1,0,0,116,0,0,0,44,0,0,0,62,0,0,0,20,0,0,0,64,0,0,0,128,0,0,0,36,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,141,2,0,152,139,2,0,136,19,0,0,184,11,0,0,152,0,0,0,73,0,0,0,69,0,0,0,69,0,0,0,10,1,0,0,152,1,0,0,160,0,0,0,224,0,0,0,2,0,0,0,154,0,0,0,6,0,0,0,72,0,0,0,48,0,0,0,100,0,0,0,88,0,0,0,190,0,0,0,82,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,138,2,0,168,136,2,0,16,39,0,0,16,39,0,0,164,1,0,0,160,0,0,0,200,0,0,0,150,0,0,0,138,1,0,0,92,1,0,0,68,1,0,0,102,1,0,0,2,0,0,0,44,1,0,0,90,0,0,0,66,0,0,0,34,0,0,0,66,0,0,0,116,0,0,0,186,0,0,0,14,0,0,0,40,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,148,0,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,134,2,0,8,133,2,0,220,5,0,0,132,3,0,0,45,0,0,0,22,0,0,0,20,0,0,0,20,0,0,0,48,1,0,0,226,0,0,0,54,1,0,0,122,0,0,0,2,0,0,0,176,0,0,0,146,0,0,0,110,0,0,0,142,0,0,0,126,0,0,0,130,0,0,0,170,0,0,0,84,0,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,131,2,0,0,130,2,0,220,5,0,0,132,3,0,0,45,0,0,0,22,0,0,0,20,0,0,0,20,0,0,0,48,1,0,0,114,0,0,0,130,1,0,0,90,1,0,0,2,0,0,0,94,0,0,0,138,0,0,0,140,0,0,0,120,1,0,0,106,0,0,0,70,0,0,0,198,0,0,0,54,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,128,2,0,136,125,2,0,224,46,0,0,32,28,0,0,110,1,0,0,176,0,0,0,166,0,0,0,166,0,0,0,136,1,0,0,60,1,0,0,126,0,0,0,134,1,0,0,2,0,0,0,252,0,0,0,112,0,0,0,58,0,0,0,204,0,0,0,10,0,0,0,72,0,0,0,200,0,0,0,34,0,0,0,22,0,0,0,68,0,0,0,12,0,0,0,132,1,0,0,0,0,0,0,0,0,0,0,26,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,178,0,0,0,156,1,0,0,212,0,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,123,2,0,208,120,2,0,156,49,0,0,196,29,0,0,165,1,0,0,206,0,0,0,123,0,0,0,123,0,0,0,116,0,0,0,74,0,0,0,58,1,0,0,110,0,0,0,2,0,0,0,54,0,0,0,70,0,0,0,2,0,0,0,46,0,0,0,48,0,0,0,188,0,0,0,112,0,0,0,92,0,0,0,30,0,0,0,38,0,0,0,28,0,0,0,0,59,0,0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,140,0,0,0,0,0,0,0,178,0,0,0,114,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,63,0,0,0,0,0,0,128,63,0,0,0,0,0,0,240,65,0,0,0,0,0,0,112,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,93,0,0,0,0,0,0,9,46,46,46,105,116,32,105,115,78,101,119,76,101,118,101,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,115,0,0,0,0,0,0,0,97,65,101,69,102,70,103,71,0,0,0,0,0,0,0,0,99,100,105,111,117,120,88,0,104,108,76,113,106,122,90,116,67,83,112,110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,21,3,0,160,0,3,0,176,212,2,0,32,192,2,0,224,175,2,0,120,160,2,0,32,145,2,0,136,128,2,0,8,184,2,0,64,79,2,0,120,129,2,0,96,64,2,0,40,56,2,0,168,48,2,0,208,42,2,0,48,36,2,0,152,28,2,0,80,22,2,0,184,14,2,0,232,8,2,0,120,3,2,0,80,254,1,0,56,250,1,0,64,245,1,0,8,240,1,0,200,235,1,0])
+.concat([240,230,1,0,40,226,1,0,224,220,1,0,48,214,1,0,40,209,1,0,160,197,1,0,56,194,1,0,128,190,1,0,192,177,1,0,216,165,1,0,16,162,1,0,184,158,1,0,48,154,1,0,224,151,1,0,240,149,1,0,128,148,1,0,224,139,1,0,240,137,1,0,8,135,1,0,88,133,1,0,144,131,1,0,152,129,1,0,8,127,1,0,96,124,1,0,32,122,1,0,72,120,1,0,200,118,1,0,192,116,1,0,8,115,1,0,56,112,1,0,216,109,1,0,160,107,1,0,184,103,1,0,8,101,1,0,136,98,1,0,232,96,1,0,88,94,1,0,104,92,1,0,80,89,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,199,1,0,1,0,0,0,88,199,1,0,2,0,0,0,224,198,1,0,3,0,0,0,40,43,1,0,4,0,0,0,136,198,1,0,4,0,0,0,176,111,1,0,5,0,0,0,88,198,1,0,9,0,0,0,232,197,1,0,10,0,0,0,152,197,1,0,6,0,0,0,8,197,1,0,7,0,0,0,112,196,1,0,8,0,0,0,248,195,1,0,11,0,0,0,0,0,0,0,0,0,0,0,248,60,1,0,56,55,1,0,88,52,1,0,48,50,1,0,200,48,1,0,0,0,0,0,16,241,1,0,152,240,1,0,88,52,1,0,48,50,1,0,200,48,1,0,0,0,0,0,16,241,1,0,152,240,1,0,88,52,1,0,48,50,1,0,104,249,1,0,0,0,0,0,0,0,0,0,0,0,0,0,37,115,115,99,97,108,101,32,109,117,115,116,32,98,101,32,62,32,48,59,32,118,105,101,119,32,117,110,99,104,97,110,103,101,100,0,0,0,0,0,114,111,116,95,37,99,32,109,117,115,116,32,98,101,32,105,110,32,91,48,58,37,100,93,32,100,101,103,114,101,101,115,32,114,97,110,103,101,59,32,118,105,101,119,32,117,110,99,104,97,110,103,101,100,0,0,232,119,1,0,2,0,0,0,16,118,1,0,1,0,0,0,48,116,1,0,1,0,0,0,96,114,1,0,3,0,0,0,176,111,1,0,4,0,0,0,56,109,1,0,5,0,0,0,248,105,1,0,6,0,0,0,8,199,1,0,7,0,0,0,40,100,1,0,8,0,0,0,232,97,1,0,9,0,0,0,248,95,1,0,10,0,0,0,32,93,1,0,11,0,0,0,56,91,1,0,12,0,0,0,0,89,1,0,13,0,0,0,0,84,1,0,14,0,0,0,224,79,1,0,15,0,0,0,16,75,1,0,17,0,0,0,232,72,1,0,18,0,0,0,160,69,1,0,19,0,0,0,16,66,1,0,20,0,0,0,80,60,1,0,21,0,0,0,248,54,1,0,22,0,0,0,24,52,1,0,23,0,0,0,248,49,1,0,16,0,0,0,96,48,1,0,16,0,0,0,0,46,1,0,24,0,0,0,184,43,1,0,25,0,0,0,96,41,1,0,26,0,0,0,24,39,1,0,27,0,0,0,104,37,1,0,28,0,0,0,104,35,1,0,29,0,0,0,200,33,1,0,30,0,0,0,96,32,1,0,31,0,0,0,208,30,1,0,32,0,0,0,112,28,1,0,31,0,0,0,32,111,3,0,32,0,0,0,80,109,3,0,33,0,0,0,80,105,3,0,34,0,0,0,240,102,3,0,35,0,0,0,64,101,3,0,36,0,0,0,32,98,3,0,37,0,0,0,56,96,3,0,37,0,0,0,136,93,3,0,38,0,0,0,0,87,3,0,39,0,0,0,48,85,3,0,40,0,0,0,192,82,3,0,41,0,0,0,128,80,3,0,42,0,0,0,240,77,3,0,44,0,0,0,32,76,3,0,45,0,0,0,56,74,3,0,48,0,0,0,56,72,3,0,49,0,0,0,32,70,3,0,46,0,0,0,128,67,3,0,47,0,0,0,120,65,3,0,52,0,0,0,80,63,3,0,53,0,0,0,208,60,3,0,50,0,0,0,168,58,3,0,51,0,0,0,48,57,3,0,54,0,0,0,56,55,3,0,55,0,0,0,104,52,3,0,68,0,0,0,176,49,3,0,69,0,0,0,88,48,3,0,56,0,0,0,16,46,3,0,57,0,0,0,200,43,3,0,58,0,0,0,136,40,3,0,59,0,0,0,0,38,3,0,61,0,0,0,176,34,3,0,60,0,0,0,64,32,3,0,62,0,0,0,32,31,3,0,63,0,0,0,56,30,3,0,63,0,0,0,16,189,2,0,76,0,0,0,16,29,3,0,77,0,0,0,24,28,3,0,78,0,0,0,56,27,3,0,79,0,0,0,248,172,2,0,80,0,0,0,72,26,3,0,81,0,0,0,24,25,3,0,75,0,0,0,0,24,3,0,82,0,0,0,120,97,1,0,83,0,0,0,152,19,3,0,85,0,0,0,184,16,3,0,84,0,0,0,128,13,3,0,86,0,0,0,176,123,1,0,87,0,0,0,200,10,3,0,88,0,0,0,112,9,3,0,89,0,0,0,216,7,3,0,90,0,0,0,168,6,3,0,91,0,0,0,248,4,3,0,92,0,0,0,224,2,3,0,93,0,0,0,152,0,3,0,94,0,0,0,128,121,1,0,97,0,0,0,24,254,2,0,98,0,0,0,0,252,2,0,99,0,0,0,88,245,2,0,119,0,0,0,120,243,2,0,110,0,0,0,144,235,2,0,101,0,0,0,32,221,2,0,129,0,0,0,216,218,2,0,120,0,0,0,224,216,2,0,138,0,0,0,112,214,2,0,70,0,0,0,168,212,2,0,113,0,0,0,184,210,2,0,104,0,0,0,48,209,2,0,132,0,0,0,232,207,2,0,123,0,0,0,64,206,2,0,141,0,0,0,208,204,2,0,64,0,0,0,232,202,2,0,117,0,0,0,96,200,2,0,118,0,0,0,40,195,2,0,108,0,0,0,200,193,2,0,109,0,0,0,24,192,2,0,136,0,0,0,120,190,2,0,137,0,0,0,8,189,2,0,127,0,0,0,192,187,2,0,128,0,0,0,96,185,2,0,145,0,0,0,160,183,2,0,146,0,0,0,200,182,2,0,147,0,0,0,96,181,2,0,148,0,0,0,120,179,2,0,66,0,0,0,48,178,2,0,67,0,0,0,216,175,2,0,111,0,0,0,80,174,2,0,112,0,0,0,232,172,2,0,102,0,0,0,16,171,2,0,103,0,0,0,0,170,2,0,130,0,0,0,160,168,2,0,131,0,0,0,24,166,2,0,121,0,0,0,112,164,2,0,122,0,0,0,8,163,2,0,139,0,0,0,136,161,2,0,140,0,0,0,104,160,2,0,71,0,0,0,0,159,2,0,72,0,0,0,200,157,2,0,114,0,0,0,120,156,2,0,115,0,0,0,200,154,2,0,105,0,0,0,56,153,2,0,106,0,0,0,16,152,2,0,133,0,0,0,40,150,2,0,134,0,0,0,248,147,2,0,124,0,0,0,152,146,2,0,125,0,0,0,24,145,2,0,142,0,0,0,232,142,2,0,143,0,0,0,64,141,2,0,73,0,0,0,232,139,2,0,74,0,0,0,120,138,2,0,116,0,0,0,232,136,2,0,107,0,0,0,16,135,2,0,135,0,0,0,88,133,2,0,126,0,0,0,224,131,2,0,144,0,0,0,56,130,2,0,65,0,0,0,80,128,2,0,149,0,0,0,192,125,2,0,95,0,0,0,224,123,2,0,96,0,0,0,88,121,2,0,100,0,0,0,192,111,2,0,153,0,0,0,24,109,2,0,154,0,0,0,80,107,2,0,155,0,0,0,240,104,2,0,156,0,0,0,168,96,2,0,157,0,0,0,80,93,2,0,152,0,0,0,248,91,2,0,150,0,0,0,216,90,2,0,151,0,0,0,0,0,0,0,0,0,0,0,48,116,1,0,1,0,0,0,24,20,2,0,2,0,0,0,128,19,2,0,3,0,0,0,136,18,2,0,4,0,0,0,240,17,2,0,5,0,0,0,120,17,2,0,6,0,0,0,160,16,2,0,7,0,0,0,32,16,2,0,8,0,0,0,144,15,2,0,9,0,0,0,168,14,2,0,10,0,0,0,24,14,2,0,11,0,0,0,152,13,2,0,12,0,0,0,40,13,2,0,13,0,0,0,136,12,2,0,14,0,0,0,232,247,1,0,15,0,0,0,48,11,2,0,16,0,0,0,168,10,2,0,17,0,0,0,16,10,2,0,18,0,0,0,144,9,2,0,19,0,0,0,216,8,2,0,20,0,0,0,168,7,2,0,21,0,0,0,240,6,2,0,22,0,0,0,96,6,2,0,23,0,0,0,0,0,0,0,0,0,0,0,240,34,2,0,1,0,0,0,40,34,2,0,2,0,0,0,8,93,1,0,3,0,0,0,128,32,2,0,3,0,0,0,208,250,1,0,4,0,0,0,248,30,2,0,5,0,0,0,88,30,2,0,9,0,0,0,104,29,2,0,10,0,0,0,136,28,2,0,11,0,0,0,112,27,2,0,12,0,0,0,192,26,2,0,6,0,0,0,56,26,2,0,7,0,0,0,168,25,2,0,8,0,0,0,64,25,2,0,13,0,0,0,128,24,2,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,154,153,153,153,153,153,169,63,154,153,153,153,153,153,169,63,154,153,153,153,153,153,201,63,154,153,153,153,153,153,185,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,208,63,102,102,102,102,102,102,230,63,51,51,51,51,51,51,235,63,205,204,204,204,204,204,236,63,154,153,153,153,153,153,217,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,102,102,102,102,102,102,230,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,205,204,204,204,204,204,236,63,51,51,51,51,51,51,227,63,51,51,51,51,51,51,227,63,51,51,51,51,51,51,227,63,0,0,0,0,0,0,240,63,102,102,102,102,102,102,238,63,102,102,102,102,102,102,238,63,102,102,102,102,102,102,238,63,232,211,1,0,0,0,0,0,128,82,2,0,1,0,0,0,112,82,2,0,2,0,0,0,96,82,2,0,4,0,0,0,80,82,2,0,5,0,0,0,8,82,2,0,3,0,0,0,0,82,2,0,6,0,0,0,128,234,1,0,7,0,0,0,0,0,0,0,8,0,0,0,136,208,2,0,39,0,0,0,104,75,2,0,40,0,0,0,192,74,2,0,41,0,0,0,32,74,2,0,1,0,0,0,88,73,2,0,2,0,0,0,192,72,2,0,3,0,0,0,64,72,2,0,4,0,0,0,56,71,2,0,5,0,0,0,8,70,2,0,6,0,0,0,104,69,2,0,7,0,0,0,216,68,2,0,8,0,0,0,232,67,2,0,13,0,0,0,168,67,2,0,9,0,0,0,192,66,2,0,14,0,0,0,48,116,1,0,10,0,0,0,32,66,2,0,11,0,0,0,88,65,2,0,12,0,0,0,80,64,2,0,15,0,0,0,72,63,2,0,16,0,0,0,64,62,2,0,17,0,0,0,48,61,2,0,18,0,0,0,136,60,2,0,19,0,0,0,200,59,2,0,20,0,0,0,32,59,2,0,21,0,0,0,120,58,2,0,22,0,0,0,232,57,2,0,23,0,0,0,200,56,2,0,24,0,0,0,0,224,1,0,25,0,0,0,192,218,1,0,26,0,0,0,240,53,2,0,27,0,0,0,16,53,2,0,28,0,0,0,40,52,2,0,29,0,0,0,72,51,2,0,30,0,0,0,184,50,2,0,31,0,0,0,64,50,2,0,32,0,0,0,248,49,2,0,37,0,0,0,96,49,2,0,38,0,0,0,128,234,1,0,33,0,0,0,0,48,2,0,34,0,0,0,192,229,1,0,35,0,0,0,192,46,2,0,36,0,0,0,8,46,2,0,36,0,0,0,72,45,2,0,42,0,0,0,200,44,2,0,42,0,0,0,40,44,2,0,43,0,0,0,176,43,2,0,44,0,0,0,88,43,2,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,89,2,0,1,0,0,0,0,82,2,0,2,0,0,0,40,86,2,0,3,0,0,0,112,84,2,0,4,0,0,0,0,83,2,0,5,0,0,0,192,81,2,0,6,0,0,0,200,80,2,0,7,0,0,0,32,80,2,0,8,0,0,0,48,79,2,0,9,0,0,0,8,78,2,0,10,0,0,0,72,77,2,0,11,0,0,0,176,76,2,0,12,0,0,0,0,0,0,0,0,0,0,0,136,208,2,0,0,0,0,0,88,188,2,0,15,0,0,0,24,172,2,0,1,0,0,0,176,73,2,0,2,0,0,0,152,4,2,0,3,0,0,0,160,209,1,0,4,0,0,0,88,157,2,0,5,0,0,0,144,122,1,0,6,0,0,0,184,98,1,0,7,0,0,0,184,67,1,0,8,0,0,0,24,38,1,0,9,0,0,0,40,102,3,0,10,0,0,0,56,75,3,0,11,0,0,0,152,140,2,0,12,0,0,0,112,122,2,0,13,0,0,0,152,88,2,0,14,0,0,0,0,0,0,0,16,0,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,194,176,0,0,0,0,0,0,160,41,2,0,1,0,0,0,216,40,2,0,2,0,0,0,136,208,2,0,3,0,0,0,32,40,2,0,4,0,0,0,48,116,1,0,4,0,0,0,80,39,2,0,5,0,0,0,184,38,2,0,6,0,0,0,56,38,2,0,7,0,0,0,184,37,2,0,8,0,0,0,56,86,3,0,9,0,0,0,40,36,2,0,10,0,0,0,120,35,2,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,128,1,0,1,0,0,0,16,126,1,0,3,0,0,0,176,123,1,0,2,0,0,0,128,121,1,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,141,2,0,40,140,2,0,160,138,2,0,56,137,2,0,96,135,2,0,0,0,0,0,100,0,0,0,0,0,0,0,100,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,72,101,108,118,101,116,105,99,97,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,101,108,118,101,116,105,99,97,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,205,204,204,204,204,204,236,63,205,204,204,204,204,204,236,63,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,16,64,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,253,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,37,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,128,63,0,0,128,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,63,0,1,0,0,208,7,0,0,250,126,106,188,116,147,104,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,128,63,0,0,128,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,63,0,1,0,0,208,7,0,0,250,126,106,188,116,147,104,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,128,63,0,0,128,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,63,0,1,0,0,208,7,0,0,250,126,106,188,116,147,104,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,128,63,0,0,128,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,63,0,1,0,0,208,7,0,0,250,126,106,188,116,147,104,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,118,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,243,1,0,24,150,1,0,104,136,1,0,8,116,1,0,128,90,1,0,48,153,2,0,80,32,1,0,112,22,3,0,64,67,3,0,192,45,3,0,248,26,3,0,168,7,3,0,120,220,2,0,112,202,2,0,96,182,2,0,152,165,2,0,232,151,2,0,216,134,2,0,0,107,2,0,144,82,2,0,144,74,2,0,120,67,2,0,224,58,2,0,128,50,2,0,152,44,2,0,152,38,2,0,112,31,2,0,96,24,2,0,16,17,2,0,8,11,2,0,16,5,2,0,72,0,2,0,240,251,1,0,136,246,1,0,248,241,1,0,8,237,1,0,24,232,1,0,248,227,1,0,136,222,1,0,144,216,1,0,16,210,1,0,152,198,1,0,32,195,1,0,200,191,1,0,184,186,1,0,72,167,1,0,104,163,1,0,0,160,1,0,40,155,1,0,104,152,1,0,80,150,1,0,208,148,1,0,184,140,1,0,152,138,1,0,176,135,1,0,184,133,1,0,56,132,1,0,168,130,1,0,176,127,1,0,32,125,1,0,232,122,1,0,168,120,1,0,48,119,1,0,40,117,1,0,80,115,1,0,152,112,1,0,64,110,1,0,72,108,1,0,168,104,1,0,144,101,1,0,208,98,1,0,72,97,1,0,48,95,1,0,192,92,1,0,152,190,2,0,152,190,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,93,1,0,72,93,1,0,248,92,1,0,208,92,1,0,240,92,1,0,184,92,1,0,160,92,1,0,48,55,1,0,232,54,1,0,200,54,1,0,72,93,1,0,192,54,1,0,0,0,0,0,0,0,255,0,0,0,255,0,0,0,255,255,0,255,0,255,255,255,255,0,143,188,143,255,105,180,0,0,0,255,127,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,255,255,255,255,255,255,255,255,0,0,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,64,0,0,0,0,0,0,89,64,0,0,0,0,0,136,195,64,0,0,0,0,132,215,151,65,0,128,224,55,121,195,65,67,23,110,5,181,181,184,147,70,245,249,63,233,3,79,56,77,50,29,48,249,72,119,130,90,60,191,115,127,221,79,21,117,3,0,0,0,50,0,0,0,50,0,0,0,2,0,0,0,0,0,0,0,0,0,128,63,0,0,128,63,0,0,0,0,0,0,0,0,72,101,108,118,101,116,105,99,97,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,65,0,0,128,63,0,0,0,0,208,7,0,0,250,126,106,188,116,147,104,63,0,1,0,0,0,0,0,0,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,3,0,0,0,50,0,0,0,50,0,0,0,2,0,0,0,0,0,0,0,0,0,128,63,0,0,128,63,0,0,0,0,0,0,0,0,72,101,108,118,101,116,105,99,97,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,65,0,0,128,63,0,0,0,0,208,7,0,0,250,126,106,188,116,147,104,63,0,1,0,0,0,0,0,0,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,255,255,255,255,0,0,0,0,48,0,0,0,0,0,0,0,128,194,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,115,0,0,0,0,0,0,98,0,97,52,0,0,0,0,0,0,0,0,0,4,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,224,198,1,0,1,0,0,0,184,195,1,0,33,0,0,0,232,52,2,0,18,0,0,0,48,195,1,0,51,0,0,0,240,194,1,0,51,0,0,0,192,194,1,0,64,0,0,0,104,194,1,0,39,1,0,0])
+.concat([40,194,1,0,39,1,0,0,88,193,1,0,23,1,0,0,240,192,1,0,55,1,0,0,168,192,1,0,102,0,0,0,104,192,1,0,102,0,0,0,16,192,1,0,86,0,0,0,224,191,1,0,118,0,0,0,168,191,1,0,153,0,0,0,112,191,1,0,136,1,0,0,32,191,1,0,89,1,0,0,112,190,1,0,169,0,0,0,88,189,1,0,137,0,0,0,192,188,1,0,177,0,0,0,96,188,1,0,184,0,0,0,40,188,1,0,193,0,0,0,120,187,1,0,209,0,0,0,216,186,1,0,225,0,0,0,104,186,1,0,1,1,0,0,88,185,1,0,252,0,0,0,248,195,1,0,218,1,0,0,0,38,3,0,96,1,0,0,80,184,1,0,112,1,0,0,184,177,1,0,144,1,0,0,248,175,1,0,160,1,0,0,128,172,1,0,176,1,0,0,216,170,1,0,201,1,0,0,176,168,1,0,233,1,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,128,196,1,0,1,0,0,0,0,193,1,0,2,0,0,0,200,188,1,0,3,0,0,0,144,172,1,0,4,0,0,0,216,164,1,0,5,0,0,0,8,161,1,0,6,0,0,0,48,157,1,0,7,0,0,0,16,153,1,0,8,0,0,0,200,150,1,0,9,0,0,0,0,0,0,0,0,0,0,0,67,97,110,32,115,112,101,99,105,102,121,32,96,111,114,105,103,105,110,96,32,111,114,32,96,99,101,110,116,101,114,96,44,32,98,117,116,32,110,111,116,32,98,111,116,104,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,224,1,0,0,0,0,0,216,219,1,0,1,0,0,0,64,212,1,0,2,0,0,0,232,199,1,0,3,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,154,153,153,153,153,153,201,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,123,20,174,71,225,122,148,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,118,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,4,0,0,0,1,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,0,0,0,0,0,0,0,10,215,163,59,56,0,0,0,71,0,0,0,111,18,3,59,49,8,172,61,40,0,0,0,59,0,0,0,111,18,3,59,49,8,172,61,40,0,0,0,110,0,0,0,111,18,3,59,49,8,172,61,40,0,0,0,53,0,0,0,111,18,3,59,49,8,172,61,40,0,0,0,115,0,0,0,111,18,3,59,182,243,125,61,40,0,0,0,75,0,0,0,10,215,163,59,154,153,153,61,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,255,255,255,255,0,0,0,0,1,0,0,0,44,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,32,35,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,28,0,0,0,31,0,0,0,30,0,0,0,31,0,0,0,30,0,0,0,31,0,0,0,31,0,0,0,30,0,0,0,31,0,0,0,30,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,8,0,0,0,12,0,0,0,13,0,0,0,5,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,0,0,0,0,231,251,31,65,160,134,0,0,160,134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,12,0,0,0,3,0,0,0,0,0,0,0,9,0,0,0,8,0,0,0,14,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,43,3,0,136,43,3,0,0,43,3,0,168,42,3,0,120,42,3,0,64,42,3,0,216,41,3,0,128,41,3,0,64,41,3,0,240,40,3,0,152,40,3,0,120,40,3,0,32,40,3,0,0,40,3,0,192,39,3,0,128,39,3,0,64,39,3,0,0,39,3,0,176,38,3,0,160,38,3,0,8,38,3,0,184,37,3,0,48,37,3,0,248,36,3,0,176,36,3,0,80,36,3,0,40,36,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,200,1,0,240,196,1,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,150,1,0,48,153,2,0,240,152,2,0,224,156,0,0,232,152,2,0,224,152,2,0,112,169,2,0,0,0,0,0,128,152,2,0,120,152,2,0,96,152,2,0,24,152,2,0,8,152,2,0,248,151,2,0,224,151,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,127,0,0,0,0,255,255,255,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,64,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,205,204,204,204,204,204,236,63,205,204,204,204,204,204,236,63,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,16,64,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,253,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,117,1,0,32,235,1,0,80,230,1,0,192,224,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,236,175,203,174,131,28,212,63,5,131,82,81,72,84,238,63,69,54,70,161,27,144,249,63,152,255,235,55,110,60,2,64,78,179,64,187,67,42,8,64,182,126,159,22,40,30,15,64,4,60,105,225,178,74,246,63,1,185,171,244,102,150,205,63,22,140,132,149,142,226,195,191,74,181,106,247,109,120,121,63,254,41,194,141,220,23,24,63,203,225,243,45,104,14,165,190,132,27,223,205,9,48,240,63,248,153,229,120,38,16,232,191,53,126,55,150,221,183,137,63,17,80,205,36,107,134,132,63,156,200,73,125,117,186,47,191,218,83,12,136,64,206,160,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,15,0,0,14,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,56,15,0,14,53,15,0,14,59,15,0,14,58,15,0,14,60,15,0,15,124,15,0,14,61,15,0,14,43,15,0,0,0,0,0,14,121,15,0,14,123,15,0,0,0,0,0,0,0,0,0,0,0,0,0,14,48,15,0,14,122,15,0,14,126,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,122,15,0,14,125,15,0,14,119,15,0,14,120,15,0,0,0,0,0,14,57,15,0,14,33,15,0,14,96,15,0,14,34,15,0,14,97,15,0,14,88,15,0,14,80,15,0,14,83,15,0,14,52,15,0,14,35,15,0,14,92,15,0,14,36,15,0,14,37,15,0,14,102,15,0,14,101,15,0,14,38,15,0,14,39,15,0,14,99,15,0,14,54,15,0,14,104,15,0,14,103,15,0,14,95,15,0,14,105,15,0,14,90,15,0,0,0,0,0,14,82,15,0,14,45,15,0,14,109,15,0,14,46,15,0,14,91,15,0,0,0,0,0,14,112,15,0,14,94,15,0,14,72,15,0,14,68,15,0,14,64,15,0,14,98,15,0,14,76,15,0,14,84,15,0,14,87,15,0,14,53,15,0,14,73,15,0,14,69,15,0,14,65,15,0,14,77,15,0,14,89,15,0,14,85,15,0,14,81,15,0,14,93,15,0,14,100,15,0,14,55,15,0,14,74,15,0,14,70,15,0,14,66,15,0,14,106,15,0,14,78,15,0,0,0,0,0,14,86,15,0,14,75,15,0,14,71,15,0,14,67,15,0,14,79,15,0,0,0,0,0,14,113,15,0,14,111,15,0,14,52,15,0,14,79,15,0,14,69,15,0,14,64,15,0,14,76,15,0,14,72,15,0,14,84,15,0,14,53,15,0,14,65,15,0,14,77,15,0,14,73,15,0,14,93,15,0,14,81,15,0,14,89,15,0,14,88,15,0,14,80,15,0,14,92,15,0,14,87,15,0,14,83,15,0,14,66,15,0,14,78,15,0,14,74,15,0,14,67,15,0,14,75,15,0,14,111,15,0,14,90,15,0,14,91,15,0,14,86,15,0,14,59,15,0,14,82,15,0,0,0,0,0,14,62,15,0,14,68,15,0,14,85,15,0,14,70,15,0,14,71,15,0,14,55,15,0,14,54,15,0,14,121,15,0,14,122,15,0,14,57,15,0,0,0,0,0,0,0,0,0,14,120,15,0,14,119,15,0,14,56,15,0,14,123,15,0,14,125,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,96,15,0,14,34,15,0,14,33,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,63,15,0,14,60,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,98,15,0,14,97,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,58,15,0,14,100,15,0,14,99,15,0,14,36,15,0,14,37,15,0,14,35,15,0,0,0,0,0,14,101,15,0,14,38,15,0,14,39,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,102,15,0,0,0,0,0,14,103,15,0,14,94,15,0,14,95,15,0,14,104,15,0,14,106,15,0,14,105,15,0,0,0,0,0,14,113,15,0,14,112,15,0,14,109,15,0,14,46,15,0,14,45,15,0,0,0,0,0,0,0,0,0,14,48,15,0,14,40,15,0,14,118,15,0,14,126,15,0,0,0,0,0,0,0,0,0,0,0,0,0,14,61,15,0,0,0,0,0,0,0,0,0,14,122,15,0,14,43,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251,255,255,255,251,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,46,54,0,0,0,0,0,51,0,0,0,0,0,0,0,50,48,49,51,45,48,52,45,49,50,32,0,0,0,0,0,67,111,112,121,114,105,103,104,116,32,40,67,41,32,49,57,56,54,45,49,57,57,51,44,32,49,57,57,56,44,32,50,48,48,52,44,32,50,48,48,55,45,50,48,49,51,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,74,97,110,117,97,114,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,101,98,114,117,97,114,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,97,114,99,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,112,114,105,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,97,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,74,117,110,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,74,117,108,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,117,103,117,115,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,101,112,116,101,109,98,101,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,99,116,111,98,101,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,111,118,101,109,98,101,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,101,99,101,109,98,101,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,117,110,100,97,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
+.concat([77,111,110,100,97,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,117,101,115,100,97,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,87,101,100,110,101,115,100,97,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,104,117,114,115,100,97,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,114,105,100,97,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,97,116,117,114,100,97,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,78,3,0,116,1,0,0,72,75,2,0,32,1,0,0,112,5,2,0,64,1,0,0,64,210,1,0,62,1,0,0,96,150,1,0,36,1,0,0,152,76,3,0,10,1,0,0,248,109,3,0,188,0,0,0,72,68,1,0,128,0,0,0,216,150,1,0,100,0,0,0,104,102,3,0,170,0,0,0,136,75,3,0,210,0,0,0,88,54,3,0,80,1,0,0,224,30,3,0,72,1,0,0,120,15,3,0,222,0,0,0,136,250,2,0,78,1,0,0,176,208,2,0,28,1,0,0,120,188,2,0,232,0,0,0,168,42,2,0,56,1,0,0,24,36,2,0,252,0,0,0,184,140,2,0,172,0,0,0,32,111,3,0,68,0,0,0,168,88,2,0,74,0,0,0,40,77,2,0,124,0,0,0,184,69,2,0,206,0,0,0,0,62,2,0,192,0,0,0,136,53,2,0,166,0,0,0,224,46,2,0,72,0,0,0,80,41,2,0,246,0,0,0,88,34,2,0,96,1,0,0,152,26,2,0,216,0,0,0,192,19,2,0,214,0,0,0,112,13,2,0,74,1,0,0,160,6,2,0,2,0,0,0,208,1,2,0,84,0,0,0,64,253,1,0,208,0,0,0,16,248,1,0,114,1,0,0,184,243,1,0,82,1,0,0,184,238,1,0,104,0,0,0,112,234,1,0,234,0,0,0,176,229,1,0,6,1,0,0,208,223,1,0,30,0,0,0,152,190,2,0,0,0,0,0,72,158,1,0,240,0,0,0,144,199,1,0,104,1,0,0,0,196,1,0,104,1,0,0,144,42,2,0,116,0,0,0,112,188,1,0,176,0,0,0,240,170,1,0,2,1,0,0,120,164,1,0,98,1,0,0,184,160,1,0,12,0,0,0,248,156,1,0,152,0,0,0,216,152,1,0,112,1,0,0,168,150,1,0,110,0,0,0,72,149,1,0,250,0,0,0,120,145,1,0,184,0,0,0,0,139,1,0,130,1,0,0,96,136,1,0,126,0,0,0,80,134,1,0,134,0,0,0,144,132,1,0,20,1,0,0,240,130,1,0,60,0,0,0,64,128,1,0,66,0,0,0,208,125,1,0,70,0,0,0,112,123,1,0,90,1,0,0,88,121,1,0,76,1,0,0,184,119,1,0,76,0,0,0,216,117,1,0,110,1,0,0,0,116,1,0,68,1,0,0,224,113,1,0,36,0,0,0,96,182,2,0,196,0,0,0,0,137,1,0,122,0,0,0,208,105,1,0,106,0,0,0,136,102,1,0,6,0,0,0,224,99,1,0,224,0,0,0,192,97,1,0,226,0,0,0,208,95,1,0,46,1,0,0,0,93,1,0,44,1,0,0,120,90,1,0,82,0,0,0,160,87,1,0,202,0,0,0,168,83,1,0,154,0,0,0,168,79,1,0,164,0,0,0,144,74,1,0,186,0,0,0,184,72,1,0,218,0,0,0,104,69,1,0,44,0,0,0,136,65,1,0,12,1,0,0,184,59,1,0,112,0,0,0,208,54,1,0,8,1,0,0,248,51,1,0,58,1,0,0,208,49,1,0,122,1,0,0,0,48,1,0,78,0,0,0,216,45,1,0,66,1,0,0,120,43,1,0,118,0,0,0,48,41,1,0,52,1,0,0,208,38,1,0,126,1,0,0,48,37,1,0,244,0,0,0,72,35,1,0,64,0,0,0,152,33,1,0,14,1,0,0,72,32,1,0,88,1,0,0,144,30,1,0,254,0,0,0,72,28,1,0,124,1,0,0,240,110,3,0,190,0,0,0,192,108,3,0,50,1,0,0,56,105,3,0,50,0,0,0,208,102,3,0,86,1,0,0,192,165,1,0,60,1,0,0,200,97,3,0,42,0,0,0,32,96,3,0,40,1,0,0,48,93,3,0,198,0,0,0,144,86,3,0,114,1,0,0,240,84,3,0,238,0,0,0,240,161,1,0,238,0,0,0,24,80,3,0,248,0,0,0,192,77,3,0,22,1,0,0,32,42,2,0,10,0,0,0,8,74,3,0,92,1,0,0,0,72,3,0,162,0,0,0,208,69,3,0,162,0,0,0,56,67,3,0,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,25,2,0,232,18,2,0,200,12,2,0,48,6,2,0,128,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,121,1,0,0,0,0,0,8,120,1,0,0,0,0,0,192,172,1,0,240,164,1,0,102,105,116,46,108,111,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,118,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,167,1,0,0,0,0,0,96,167,1,0,1,0,0,0,8,167,1,0,2,0,0,0,176,166,1,0,3,0,0,0,88,166,1,0,4,0,0,0,160,76,2,0,9,0,0,0,96,244,2,0,10,0,0,0,208,164,1,0,11,0,0,0,112,164,1,0,12,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,80,3,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,50,0,0,0,50,0,0,0,0,0,0,0,0,0,1,0,0,0,128,63,0,0,128,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,65,0,0,128,63,1,0,0,0,208,7,0,0,250,126,106,188,116,147,104,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,2,0,0,0,50,0,0,0,50,0,0,0,0,0,0,0,0,0,1,0,0,0,128,63,0,0,128,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,65,0,0,128,63,1,0,0,0,208,7,0,0,250,126,106,188,116,147,104,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,0,0,241,104,227,136,181,248,228,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,236,1,0,96,25,3,0,176,73,2,0,152,4,2,0,160,209,1,0,32,150,1,0,144,122,1,0,184,98,1,0,184,67,1,0,24,38,1,0,40,102,3,0,56,75,3,0,0,54,3,0,176,30,3,0,240,14,3,0,48,246,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,251,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,65,0,0,0,0,0,0,0,0,0,0,240,63,65,114,105,97,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,65,0,0,0,0,65,114,105,97,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,64,0,0,0,0,0,0,160,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,7,0,0,0,8,0,0,0,0,0,0,0,12,0,0,0,10,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,121,1,0,24,121,1,0,216,120,1,0,152,120,1,0,128,120,1,0,104,120,1,0,88,120,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,57,2,0,1,0,0,0,0,0,1,0,184,49,2,0,0,0,0,0,1,0,1,0,56,49,2,0,3,0,0,0,0,0,2,0,48,43,2,0,2,0,0,0,1,0,2,0,168,36,2,0,5,0,0,0,0,0,4,0,232,28,2,0,4,0,0,0,1,0,4,0,192,22,2,0,7,0,0,0,0,0,8,0,248,14,2,0,6,0,0,0,1,0,8,0,16,9,2,0,8,0,0,0,2,0,4,0,152,3,2,0,9,0,0,0,2,0,8,0,160,254,1,0,8,0,0,0,2,0,4,0,160,250,1,0,9,0,0,0,2,0,8,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,0,0,32,73,2,0,0,0,0,0,0,66,2,0,3,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,101,120,101,99,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,10,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,104,149,1,0,1,0,0,0,72,147,1,0,2,0,0,0,88,139,1,0,3,0,0,0,0,137,1,0,4,0,0,0,120,134,1,0,5,0,0,0,192,132,1,0,6,0,0,0,24,131,1,0,7,0,0,0,0,0,0,0,8,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,129,2,0,88,59,3,0,16,92,2,0,8,161,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,1,0,1,2,2,1,0,1,3,2,1,0,152,187,0,0,10,0,0,0,248,186,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,219,0,0,2,0,0,0,0,0,0,0,1,0,0,0,248,7,0,0,2,0,0,0,1,0,0,0,1,0,0,0,72,3,0,0,2,0,0,0,2,0,0,0,2,0,0,0,168,3,0,0,2,0,0,0,3,0,0,0,2,0,0,0,88,3,0,0,1,0,0,0,6,0,0,0,4,0,0,0,184,3,0,0,1,0,0,0,7,0,0,0,4,0,0,0,80,3,0,0,1,0,0,0,10,0,0,0,8,0,0,0,176,3,0,0,1,0,0,0,11,0,0,0,8,0,0,0,0,165,0,0,1,0,0,0,8,0,0,0,4,0,0,0,8,165,0,0,1,0,0,0,9,0,0,0,8,0,0,0,168,211,0,0,3,0,0,0,0,0,0,0,1,0,0,0,240,7,0,0,1,0,0,0,1,0,0,0,1,0,0,0,88,85,0,0,1,0,0,0,2,0,0,0,2,0,0,0,112,4,0,0,1,0,0,0,3,0,0,0,2,0,0,0,64,146,0,0,4,0,0,0,4,0,0,0,4,0,0,0,184,7,0,0,2,0,0,0,5,0,0,0,4,0,0,0,64,137,0,0,2,0,0,0,6,0,0,0,4,0,0,0,176,7,0,0,2,0,0,0,7,0,0,0,4,0,0,0,16,165,0,0,2,0,0,0,8,0,0,0,4,0,0,0,96,201,0,0,2,0,0,0,9,0,0,0,8,0,0,0,72,55,1,0,253,255,255,255,252,255,255,255,251,255,255,255,200,125,2,0,252,255,255,255,251,255,255,255,253,255,255,255,224,90,2,0,251,255,255,255,253,255,255,255,252,255,255,255,0,78,2,0,252,255,255,255,253,255,255,255,251,255,255,255,48,71,2,0,253,255,255,255,251,255,255,255,252,255,255,255,64,63,2,0,251,255,255,255,252,255,255,255,253,255,255,255,32,55,2,0,253,255,255,255,252,255,255,255,251,255,255,255,248,47,2,0,252,255,255,255,251,255,255,255,253,255,255,255,24,42,2,0,251,255,255,255,253,255,255,255,252,255,255,255,112,35,2,0,252,255,255,255,253,255,255,255,251,255,255,255,88,27,2,0,253,255,255,255,251,255,255,255,252,255,255,255,224,20,2,0,251,255,255,255,252,255,255,255,253,255,255,255,160,76,2,0,253,255,255,255,252,255,255,255,251,255,255,255,64,69,2,0,252,255,255,255,253,255,255,255,251,255,255,255,96,174,2,0,253,255,255,255,252,255,255,255,251,255,255,255,16,159,2,0,252,255,255,255,253,255,255,255,251,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,253,255,255,255,252,255,255,255,251,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,220,1,0,202,0,0,0,240,153,1,0,174,0,0,0,224,126,1,0,164,1,0,0,80,103,1,0,164,1,0,0,80,87,3,0,142,0,0,0,24,42,1,0,124,0,0,0,232,105,3,0,2,1,0,0,80,78,3,0,2,1,0,0,128,57,3,0,144,0,0,0,160,32,3,0,174,0,0,0,224,109,1,0,174,0,0,0,40,17,3,0,64,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,194,176,0,0,0,0,0,0,1,0,0,0,1,0,1,0,18,0,0,0,1,0,1,0,33,0,0,0,1,0,1,0,51,0,0,0,1,0,1,0,64,0,0,0,1,0,1,0,86,0,0,0,2,0,1,0,102,0,0,0,2,0,1,0,118,0,0,0,3,0,1,0,137,0,0,0,3,0,1,0,153,0,0,0,1,0,1,0,169,0,0,0,3,0,1,0,177,0,0,0,1,0,1,0,193,0,0,0,1,0,1,0,184,0,0,0,1,0,1,0,209,0,0,0,1,0,1,0,225,0,0,0,2,0,2,0,252,0,0,0,4,0,1,0,1,1,0,0,4,0,1,0,218,1,0,0,2,0,1,0,23,1,0,0,2,0,1,0,39,1,0,0,2,0,1,0,55,1,0,0,3,0,1,0,89,1,0,0,1,0,1,0,96,1,0,0,1,0,2,0,112,1,0,0,2,0,1,0,136,1,0,0,1,0,0,0,144,1,0,0,1,0,2,0,160,1,0,0,3,0,2,0,176,1,0,0,4,0,2,0,201,1,0,0,2,0,1,0,233,1,0,0,2,0,3,0,0,0,0,0,255,255,255,255,0,0,0,0,1,0,0,0,1,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,3,0,0,0,1,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,154,153,153,153,153,153,169,63,184,30,133,235,81,184,158,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,73,1,0,255,255,255,0,72,93,1,0,0,0,0,0,48,5,2,0,160,160,160,0,248,92,1,0,0,0,255,0,32,4,2,0,0,192,0,0,208,3,2,0,255,128,0,0,104,3,2,0,255,0,192,0,136,2,2,0,238,238,0,0,8,2,2,0,0,64,192,0,184,1,2,0,0,200,200,0,96,1,2,0,225,105,65,0,184,0,2,0,32,192,255,0,120,0,2,0,64,128,0,0,0,0,2,0,255,128,192,0,104,255,1,0,128,96,48,0,208,254,1,0,0,0,139,0,64,254,1,0,0,128,64,0,200,253,1,0,255,128,255,0,104,253,1,0,212,255,127,0,200,92,1,0,42,42,165,0,48,55,1,0,0,255,255,0,160,252,1,0,208,224,64,0,16,252,1,0,0,0,0,0,208,251,1,0,26,26,26,0,88,251,1,0,51,51,51,0,216,250,1,0,77,77,77,0,48,250,1,0,102,102,102,0,128,249,1,0,127,127,127,0,88,248,1,0,153,153,153,0,240,247,1,0,179,179,179,0,128,32,2,0,192,192,192,0,144,247,1,0,204,204,204,0,24,247,1,0,229,229,229,0,168,246,1,0,255,255,255,0,64,246,1,0,50,50,240,0,232,245,1,0,144,238,144,0,160,245,1,0,230,216,173,0,48,245,1,0,240,85,240,0,112,244,1,0,255,255,224,0,232,243,1,0,130,221,238,0,144,243,1,0,193,182,255,0,8,243,1,0,238,238,175,0,120,242,1,0,0,215,255,0,208,92,1,0,0,255,0,0,200,241,1,0,0,100,0,0,0,241,1,0,127,255,0,0,136,240,1,0,34,139,34,0,248,239,1,0,87,139,46,0,240,92,1,0,255,0,0,0,248,238,1,0,139,0,0,0,104,238,1,0,112,25,25,0,232,237,1,0,128,0,0,0,104,237,1,0,205,0,0,0,48,237,1,0,235,206,135,0,160,92,1,0,255,255,0,0,184,92,1,0,255,0,255,0,32,236,1,0,209,206,0,0,184,235,1,0,147,20,255,0,192,54,1,0,80,127,255,0,160,234,1,0,128,128,240,0,72,234,1,0,0,69,255,0,216,233,1,0,114,128,250,0,128,233,1,0,122,150,233,0,168,232,1,0,140,230,240,0,240,231,1,0,107,183,189,0,144,231,1,0,11,134,184,0,64,231,1,0,220,245,245,0,232,230,1,0,32,128,160,0,128,230,1,0,0,165,255,0,232,229,1,0,238,130,238,0,136,229,1,0,211,0,148,0,32,229,1,0,221,160,221,0,160,228,1,0,64,80,144,0,56,228,1,0,47,107,85,0,176,227,1,0,0,20,128,0,104,227,1,0,20,20,128,0,176,226,1,0,20,64,128,0,32,226,1,0,128,64,128,0,224,224,1,0,192,96,128,0,56,224,1,0,255,96,128,0,184,223,1,0,0,128,128,0,120,223,1,0,64,128,255,0,40,223,1,0,64,160,255,0,176,222,1,0,96,160,255,0,64,222,1,0,112,160,255,0,216,221,1,0,192,192,255,0,72,221,1,0,128,255,255,0,208,220,1,0,192,255,255,0,56,220,1,0,158,183,205,0,200,219,1,0,240,255,240,0,168,218,1,0,205,182,160,0,96,218,1,0,193,255,193,0,24,218,1,0,176,192,205,0,80,217,1,0,64,255,124,0,112,216,1,0,32,255,160,0,8,93,1,0,190,190,190,0,24,216,1,0,211,211,211,0,120,215,1,0,211,211,211,0,32,214,1,0,160,160,160,0,152,213,1,0,205,182,160,0,56,212,1,0,0,0,0,0,192,211,1,0,26,26,26,0,56,211,1,0,51,51,51,0,248,210,1,0,77,77,77,0,56,210,1,0,102,102,102,0,232,209,1,0,127,127,127,0,152,209,1,0,153,153,153,0,112,209,1,0,179,179,179,0,32,209,1,0,204,204,204,0,152,200,1,0,229,229,229,0,224,199,1,0,255,255,255,0,0,0,0,0,255,255,255,255,100,118,1,0,254,255,255,255,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,205,204,204,204,204,204,236,63,154,153,153,153,153,153,201,63,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,154,153,153,153,153,153,169,63,51,51,51,51,51,51,227,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,2,0,0,0,1,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,123,20,174,71,225,122,148,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,118,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,253,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
+.concat([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,161,1,0,120,157,1,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,28,0,0,0,0,0,0,72,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,65,0,0,0,0,0,0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,83,119,105,116,122,101,114,108,97,110,100,76,105,103,104,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,85,3,0,88,83,3,0,72,89,1,0,40,81,3,0,96,78,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,56,46,51,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,9,2,0,10,0,0,0,152,31,3,0,160,1,0,0,168,77,2,0,96,0,0,0,80,7,2,0,72,1,0,0,96,212,1,0,30,0,0,0,224,150,1,0,76,1,0,0,208,123,1,0,60,0,0,0,64,100,1,0,214,0,0,0,184,69,1,0,166,1,0,0,64,39,1,0,140,0,0,0,224,194,2,0,98,1,0,0,104,76,3,0,98,1,0,0,96,55,3,0,236,0,0,0,48,31,3,0,166,0,0,0,200,16,3,0,132,1,0,0,8,252,2,0,94,1,0,0,80,209,2,0,36,0,0,0,16,189,2,0,240,0,0,0,248,172,2,0,150,1,0,0,208,157,2,0,112,0,0,0,80,141,2,0,166,1,0,0,232,123,2,0,170,1,0,0,88,89,2,0,208,0,0,0,80,77,2,0,22,1,0,0,24,70,2,0,138,0,0,0,80,62,2,0,128,0,0,0,248,53,2,0,114,1,0,0,144,47,2,0,38,1,0,0,176,41,2,0,184,0,0,0,0,35,2,0,38,0,0,0,208,26,2,0,22,0,0,0,40,20,2,0,108,1,0,0,160,13,2,0,26,0,0,0,0,7,2,0,32,1,0,0,24,2,2,0,232,0,0,0,120,253,1,0,194,0,0,0,96,248,1,0,84,1,0,0,248,243,1,0,144,1,0,0,8,239,1,0,96,1,0,0,176,234,1,0,36,1,0,0,240,148,1,0,118,0,0,0,0,0,0,0,112,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,157,255,255,255,0,0,0,0,24,24,2,0,114,0,0,0,216,23,2,0,104,0,0,0,88,23,2,0,99,0,0,0,72,22,2,0,121,0,0,0,240,20,2,0,120,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,8,124,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,13,2,0,144,7,2,0,72,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,191,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,176,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,254,255,255,255,0,0,0,0,254,255,255,255,254,255,255,255,254,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,112,213,0,0,0,0,0,0,72,101,108,118,101,116,105,99,97,32,66,111,108,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,191,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,97,1,0,0,0,0,0,57,180,200,118,190,159,240,63,224,95,1,0,0,0,0,0,47,221,36,6,129,149,241,63,16,93,1,0,0,0,0,0,135,22,217,206,247,83,241,63,32,91,1,0,0,0,0,0,147,24,4,86,14,45,240,63,104,134,1,0,0,0,0,0,49,8,172,28,90,100,239,63,8,131,1,0,0,0,0,0,133,235,81,184,30,133,239,63,176,132,1,0,0,0,0,0,227,165,155,196,32,176,238,63,88,128,1,0,0,0,0,0,0,0,0,0,0,0,240,63,48,109,1,0,0,0,0,0,8,172,28,90,100,59,245,63,176,102,1,0,0,0,0,0,8,172,28,90,100,59,245,63,232,105,1,0,0,0,0,0,176,114,104,145,237,124,243,63,16,100,1,0,0,0,0,0,219,249,126,106,188,116,245,63,224,45,1,0,0,0,0,0,78,98,16,88,57,180,236,63,168,141,2,0,0,0,0,0,155,85,159,171,173,216,243,63,88,141,2,0,0,0,0,0,210,111,95,7,206,25,237,63,40,141,2,0,0,0,0,0,39,194,134,167,87,202,243,63,8,141,2,0,0,0,0,0,188,150,144,15,122,54,237,63,240,140,2,0,0,0,0,0,84,82,39,160,137,176,246,63,216,140,2,0,0,0,0,0,215,163,112,61,10,215,241,63,192,140,2,0,0,0,0,0,233,72,46,255,33,253,236,63,160,140,2,0,0,0,0,0,28,124,97,50,85,48,246,63,120,140,2,0,0,0,0,0,224,190,14,156,51,162,246,63,88,140,2,0,0,0,0,0,238,235,192,57,35,74,243,63,48,140,2,0,0,0,0,0,208,213,86,236,47,187,242,63,248,139,2,0,0,0,0,0,201,118,190,159,26,47,245,63,208,139,2,0,0,0,0,0,178,157,239,167,198,75,245,63,128,139,2,0,0,0,0,0,238,235,192,57,35,74,243,63,104,139,2,0,0,0,0,0,121,88,168,53,205,59,243,63,64,139,2,0,0,0,0,0,121,88,168,53,205,59,243,63,16,139,2,0,0,0,0,0,233,72,46,255,33,253,236,63,248,138,2,0,0,0,0,0,233,72,46,255,33,253,236,63,216,138,2,0,0,0,0,0,233,72,46,255,33,253,236,63,200,138,2,0,0,0,0,0,135,22,217,206,247,83,249,63,168,138,2,0,0,0,0,0,211,77,98,16,88,57,242,63,128,138,2,0,0,0,0,0,211,77,98,16,88,57,242,63,96,138,2,0,0,0,0,0,47,221,36,6,129,149,241,63,56,138,2,0,0,0,0,0,147,24,4,86,14,45,240,63,40,138,2,0,0,0,0,0,176,114,104,145,237,124,243,63,16,138,2,0,0,0,0,0,219,249,126,106,188,116,245,63,0,138,2,0,0,0,0,0,227,165,155,196,32,176,238,63,232,137,2,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,160,15,0,0,0,0,0,0,255,255,255,255,0,0,0,0,112,23,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,251,255,255,255,0,0,0,0,152,190,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,36,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,153,1,0,40,151,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,240,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,63,1,0,0,0,6,0,0,0,252,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,1,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,2,0,0,0,0,0,0,0,0,0,0,0,0,56,143,192,0,0,0,0,0,56,143,192,0,0,0,0,0,56,143,192,0,0,0,0,0,56,143,192,0,0,0,0,0,56,143,192,0,0,0,0,0,56,143,192,0,0,0,0,0,56,143,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,37,45,49,55,115,32,32,37,115,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,1,0,0,0,0,0,0,0,0,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,1,0,0,0,252,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,46,1,0,0,0,0,0,224,61,3,0,1,0,0,0,112,22,3,0,2,0,0,0,96,89,1,0,3,0,0,0,96,231,1,0,4,0,0,0,88,166,1,0,5,0,0,0,176,166,1,0,6,0,0,0,96,244,2,0,7,0,0,0,208,174,2,0,8,0,0,0,192,222,1,0,9,0,0,0,8,112,3,0,10,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,122,0,0,0,1,0,0,0,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,121,0,0,0,5,0,0,0,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,120,0,0,0,5,0,0,0,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,99,98,0,0,5,0,0,0,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,122,50,0,0,0,0,0,0,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,121,50,0,0,0,0,0,0,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,120,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,64,114,0,0,0,2,0,0,0,0,0,0,0,0,0,20,192,0,0,0,0,0,0,20,64,116,0,0,0,0,0,0,0,0,0,0,0,0,0,20,192,0,0,0,0,0,0,20,64,117,0,0,0,0,0,0,0,0,0,0,0,0,0,20,192,0,0,0,0,0,0,20,64,118,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
+.concat([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,37,32,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,100,47,37,109,47,37,121,44,37,72,58,37,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,36,64,0,0,0,0,0,0,240,63,0,0,0,0,0,0,224,63,1,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,37,32,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,100,47,37,109,47,37,121,44,37,72,58,37,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,36,64,0,0,0,0,0,0,240,63,0,0,0,0,0,0,224,63,1,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,37,32,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,100,47,37,109,47,37,121,44,37,72,58,37,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,36,64,0,0,0,0,0,0,240,63,0,0,0,0,0,0,224,63,1,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,37,32,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,100,47,37,109,47,37,121,44,37,72,58,37,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,36,64,0,0,0,0,0,0,240,63,0,0,0,0,0,0,224,63,1,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,37,32,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,100,47,37,109,47,37,121,44,37,72,58,37,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,36,64,0,0,0,0,0,0,240,63,0,0,0,0,0,0,224,63,1,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,37,32,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,100,47,37,109,47,37,121,44,37,72,58,37,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,36,64,0,0,0,0,0,0,240,63,0,0,0,0,0,0,224,63,1,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,37,32,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,100,47,37,109,47,37,121,44,37,72,58,37,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,36,64,0,0,0,0,0,0,240,63,0,0,0,0,0,0,224,63,1,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,37,32,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,100,47,37,109,47,37,121,44,37,72,58,37,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,36,64,0,0,0,0,0,0,240,63,0,0,0,0,0,0,224,63,1,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,37,32,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,100,47,37,109,47,37,121,44,37,72,58,37,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,36,64,0,0,0,0,0,0,240,63,0,0,0,0,0,0,224,63,1,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,37,32,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,100,47,37,109,47,37,121,44,37,72,58,37,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,36,64,0,0,0,0,0,0,240,63,0,0,0,0,0,0,224,63,1,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,192,0,0,0,0,0,0,36,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
+.concat([0,0,0,0,1,37,32,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,100,47,37,109,47,37,121,44,37,72,58,37,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,36,64,0,0,0,0,0,0,240,63,0,0,0,0,0,0,224,63,1,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,77,2,0,176,69,2,0,240,61,2,0,128,53,2,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,74,97,110,0,0,0,0,0,70,101,98,0,0,0,0,0,77,97,114,0,0,0,0,0,65,112,114,0,0,0,0,0,77,97,121,0,0,0,0,0,74,117,110,0,0,0,0,0,74,117,108,0,0,0,0,0,65,117,103,0,0,0,0,0,83,101,112,0,0,0,0,0,79,99,116,0,0,0,0,0,78,111,118,0,0,0,0,0,68,101,99,0,0,0,0,0,83,117,110,0,0,0,0,0,77,111,110,0,0,0,0,0,84,117,101,0,0,0,0,0,87,101,100,0,0,0,0,0,84,104,117,0,0,0,0,0,70,114,105,0,0,0,0,0,83,97,116,0,0,0,0,0,0,0,0,0,0,0,0,0,112,108,111,116,95,97,120,105,115,95,120,109,97,120,0,0,71,80,86,65,76,95,88,95,77,65,88,0,0,0,0,0,103,110,117,112,108,111,116,95,115,118,103,46,37,115,32,61,32,37,103,59,10,0,0,0,87,105,108,108,32,110,111,116,32,99,104,101,99,107,32,102,111,114,32,117,110,100,101,102,105,110,101,100,32,100,97,116,97,112,111,105,110,116,115,32,40,109,97,121,32,99,97,117,115,101,32,99,114,97,115,104,101,115,41,46,10,0,0,0,117,110,100,101,102,105,110,101,100,32,118,97,114,105,97,98,108,101,58,32,37,115,0,0,101,120,101,99,117,116,105,110,103,58,32,37,115,0,0,0,112,108,111,116,95,97,120,105,115,95,120,109,105,110,0,0,65,109,98,105,103,117,111,117,115,32,114,101,113,117,101,115,116,32,39,37,46,42,115,39,59,32,112,111,115,115,105,98,108,101,32,109,97,116,99,104,101,115,58,10,0,0,0,0,103,110,117,112,108,111,116,95,115,118,103,46,37,115,32,61,32,37,100,59,10,0,0,0,116,109,95,109,100,97,121,0,97,108,108,95,116,101,114,109,95,110,97,109,101,115,50,0,71,80,86,65,76,95,88,95,77,73,78,0,0,0,0,0,108,115,0,0,0,0,0,0,105,110,100,101,120,95,109,105,110,0,0,0,0,0,0,0,110,111,32,99,111,108,117,109,110,32,119,105,116,104,32,104,101,97,100,101,114,32,34,37,115,34,0,0,0,0,0,0,103,110,117,112,108,111,116,95,115,118,103,46,112,108,111,116,95,104,101,105,103,104,116,32,61,32,37,46,49,102,59,10,0,0,0,0,0,0,0,0,10,9,85,115,101,114,32,97,110,100,32,100,101,102,97,117,108,116,32,118,97,114,105,97,98,108,101,115,58,10,0,0,114,101,108,36,97,116,105,118,101,0,0,0,0,0,0,0,103,110,117,112,108,111,116,95,115,118,103,46,112,108,111,116,95,119,105,100,116,104,32,61,32,37,46,49,102,59,10,0,99,104,97,110,103,101,32,118,105,101,119,32,40,115,99,97,108,105,110,103,41,46,32,85,115,101,32,60,99,116,114,108,62,32,116,111,32,115,99,97,108,101,32,116,104,101,32,97,120,101,115,32,111,110,108,121,46,0,0,0,0,0,0,0,103,110,117,112,108,111,116,95,115,118,103,46,112,108,111,116,95,121,116,111,112,32,61,32,37,46,49,102,59,10,0,0,103,110,117,112,108,111,116,95,115,118,103,46,112,108,111,116,95,121,98,111,116,32,61,32,37,46,49,102,59,10,0,0,103,110,117,112,108,111,116,95,115,118,103,46,112,108,111,116,95,120,109,97,120,32,61,32,37,46,49,102,59,10,0,0,101,108,108,105,112,115,101,0,103,110,117,112,108,111,116,95,115,118,103,46,112,108,111,116,95,120,109,105,110,32,61,32,37,46,49,102,59,10,0,0,103,110,117,112,108,111,116,95,115,118,103,46,112,108,111,116,95,116,101,114,109,95,121,109,97,120,32,61,32,37,100,59,10,0,0,0,0,0,0,0,67,111,110,116,105,110,117,101,46,0,0,0,0,0,0,0,103,110,117,112,108,111,116,95,115,118,103,46,112,108,111,116,95,116,101,114,109,95,120,109,97,120,32,61,32,37,100,59,10,0,0,0,0,0,0,0,122,116,105,99,115,0,0,0,47,47,32,112,108,111,116,32,98,111,117,110,100,97,114,105,101,115,32,97,110,100,32,97,120,105,115,32,115,99,97,108,105,110,103,32,105,110,102,111,114,109,97,116,105,111,110,32,102,111,114,32,109,111,117,115,105,110,103,32,10,0,0,0,116,109,95,104,111,117,114,0,37,115,32,0,0,0,0,0,10,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,34,62,60,33,91,67,68,65,84,65,91,10,0,0,0,0,0,0,108,105,110,101,116,121,112,101,36,115,0,0,0,0,0,0,115,117,109,115,113,0,0,0,115,116,114,105,110,103,99,111,108,117,109,110,40,41,32,99,97,108,108,101,100,32,102,114,111,109,32,105,110,118,97,108,105,100,32,99,111,110,116,101,120,116,0,0,0,0,0,0,32,57,44,52,44,49,44,52,44,49,44,52,0,0,0,0,10,9,86,97,114,105,97,98,108,101,115,32,98,101,103,105,110,110,105,110,103,32,119,105,116,104,32,37,115,58,10,0,32,56,44,52,44,50,44,52,0,0,0,0,0,0,0,0,116,105,109,101,32,102,111,114,109,97,116,32,115,116,114,105,110,103,32,101,120,112,101,99,116,101,100,0,0,0,0,0,10,37,115,111,98,106,101,99,116,32,37,50,100,32,0,0,68,105,109,95,49,0,0,0,60,66,50,45,77,111,116,105,111,110,62,0,0,0,0,0,104,101,97,100,32,115,105,122,101,32,101,120,112,101,99,116,101,100,0,0,0,0,0,0,32,50,44,52,0,0,0,0,32,53,44,56,0,0,0,0,83,117,98,116,111,112,105,99,32,111,102,32,0,0,0,0,32,100,61,39,0,0,0,0,99,108,97,115,115,61,34,103,114,105,100,108,105,110,101,34,32,0,0,0,0,0,0,0,115,116,114,111,107,101,45,100,97,115,104,97,114,114,97,121,61,39,37,115,39,32,0,0,83,116,111,112,46,0,0,0,115,116,114,111,107,101,61,39,37,115,39,32,0,0,0,0,115,116,114,111,107,101,61,39,114,103,98,40,37,51,100,44,32,37,51,100,44,32,37,51,100,41,39,32,0,0,0,0,116,109,95,109,105,110,0,0,32,0,0,0,0,0,0,0,9,60,112,97,116,104,32,0,108,105,110,101,115,36,116,121,108,101,0,0,0,0,0,0,77,37,46,49,102,44,37,46,49,102,32,0,0,0,0,0,10,9,65,108,108,32,97,118,97,105,108,97,98,108,101,32,118,97,114,105,97,98,108,101,115,58,10,0,0,0,0,0,10,9,9,9,32,32,32,32,116,111,32,0,0,0,0,0,10,9,9,0,0,0,0,0,76,37,46,49,102,44,37,46,49,102,32,0,0,0,0,0,99,104,97,110,103,101,32,118,105,101,119,32,40,114,111,116,97,116,105,111,110,41,46,32,85,115,101,32,60,99,116,114,108,62,32,116,111,32,114,111,116,97,116,101,32,116,104,101,32,97,120,101,115,32,111,110,108,121,46,0,0,0,0,0,60,47,116,101,120,116,62,10,9,60,47,103,62,10,0,0,38,97,109,112,59,0,0,0,38,108,116,59,0,0,0,0,9,9,60,116,101,120,116,62,0,0,0,0,0,0,0,0,10,10,40,83,41,116,111,112,32,102,105,116,44,32,40,67,41,111,110,116,105,110,117,101,44,32,40,69,41,120,101,99,117,116,101,32,70,73,84,95,83,67,82,73,80,84,58,32,32,0,0,0,0,0,0,0,9,9,60,116,101,120,116,32,120,109,108,58,115,112,97,99,101,61,34,112,114,101,115,101,114,118,101,34,62,0,0,0,32,32,0,0,0,0,0,0,116,109,95,115,101,99,0,0,97,108,108,95,116,101,114,109,95,110,97,109,101,115,0,0,32,116,101,120,116,45,97,110,99,104,111,114,58,37,115,34,62,10,0,0,0,0,0,0,108,97,36,98,101,108,0,0,99,114,101,97,116,101,95,97,110,100,95,115,101,116,95,118,97,114,0,0,0,0,0,0,99,111,108,117,109,110,40,41,32,99,97,108,108,101,100,32,102,114,111,109,32,105,110,118,97,108,105,100,32,99,111,110,116,101,120,116,0,0,0,0,32,102,111,110,116,45,115,116,121,108,101,58,37,115,59,0,97,108,108,0,0,0,0,0,32,102,111,110,116,45,119,101,105,103,104,116,58,37,115,59,0,0,0,0,0,0,0,0,37,97,32,37,98,32,37,100,32,37,72,58,37,77,58,37,83,32,37,89,0,0,0,0,37,115,111,98,106,101,99,116,32,37,50,100,32,112,111,108,121,103,111,110,32,0,0,0,60,66,49,45,77,111,116,105,111,110,62,0,0,0,0,0,110,111,102,105,108,108,36,101,100,0,0,0,0,0,0,0,59,32,102,111,110,116,45,102,97,109,105,108,121,58,37,115,59,32,102,111,110,116,45,115,105,122,101,58,37,46,50,102,112,116,59,0,0,0,0,0,114,103,98,40,37,100,44,37,100,44,37,100,41,0,0,0,104,101,108,112,32,112,114,111,109,112,116,0,0,0,0,0,34,32,115,116,121,108,101,61,34,115,116,114,111,107,101,58,110,111,110,101,59,32,102,105,108,108,58,0,0,0,0,0,32,114,111,116,97,116,101,40,37,105,41,0,0,0,0,0,9,60,103,32,116,114,97,110,115,102,111,114,109,61,34,116,114,97,110,115,108,97,116,101,40,37,46,49,102,44,37,46,49,102,41,0,0,0,0,0,37,115,95,101,114,114,0,0,101,110,100,0,0,0,0,0,109,105,100,100,108,101,0,0,101,120,112,105,110,116,0,0,32,32,37,49,53,115,32,32,37,115,10,0,0,0,0,0,115,116,97,114,116,0,0,0,107,101,121,116,36,105,116,108,101,0,0,0,0,0,0,0,112,111,115,95,109,97,120,95,121,0,0,0,0,0,0,0,68,97,116,97,32,102,105,108,101,32,105,115,32,101,109,112,116,121,0,0,0,0,0,0,9,60,117,115,101,32,120,108,105,110,107,58,104,114,101,102,61,39,35,103,112,80,116,37,117,39,32,116,114,97,110,115,102,111,114,109,61,39,116,114,97,110,115,108,97,116,101,40,37,46,49,102,44,37,46,49,102,41,32,115,99,97,108,101,40,37,46,50,102,41,39,37,115,47,62,10,0,0,0,0,108,105,110,101,115,116,121,108,101,32,110,111,116,32,102,111,117,110,100,0,0,0,0,0,9,60,117,115,101,32,120,108,105,110,107,58,104,114,101,102,61,39,35,103,112,68,111,116,39,32,120,61,39,37,46,49,102,39,32,121,61,39,37,46,49,102,39,37,115,47,62,10,0,0,0,0,0,0,0,0,109,97,114,107,32,122,111,111,109,32,114,101,103,105,111,110,32,40,111,110,108,121,32,102,111,114,32,50,100,45,112,108,111,116,115,32,97,110,100,32,109,97,112,115,41,46,0,0,32,99,111,108,111,114,61,39,37,115,39,0,0,0,0,0,32,99,111,108,111,114,61,39,114,103,98,40,37,51,100,44,32,37,51,100,44,32,37,51,100,41,39,0,0,0,0,0,104,101,108,112,32,98,117,102,102,101,114,0,0,0,0,0,98,111,108,100,0,0,0,0,105,116,97,108,105,99,0,0,47,117,115,114,47,108,111,99,97,108,47,115,104,97,114,101,47,103,110,117,112,108,111,116,47,52,46,54,0,0,0,0,32,73,116,97,108,105,99,0,37,46,48,102,0,0,0,0,32,105,116,97,108,105,99,0,101,120,112,101,99,116,101,100,32,111,112,116,105,111,110,97,108,32,97,120,105,115,32,110,97,109,101,0,0,0,0,0,37,109,47,37,100,47,37,121,0,0,0,0,0,0,0,0,32,66,111,108,100,0,0,0,97,105,114,121,0,0,0,0,10,65,118,97,105,108,97,98,108,101,32,116,101,114,109,105,110,97,108,32,116,121,112,101,115,58,10,0,0,0,0,0,32,98,111,108,100,0,0,0,34,62,10,0,0,0,0,0,107,36,101,121,0,0,0,0,112,111,115,95,109,105,110,95,121,0,0,0,0,0,0,0,68,97,116,97,32,102,105,108,101,32,114,101,97,100,32,101,114,114,111,114,0,0,0,0,80,65,71,69,82,0,0,0,9,108,105,110,101,115,116,121,108,101,32,37,100,44,32,0,109,105,116,101,114,0,0,0,60,66,51,62,0,0,0,0,102,105,108,108,36,101,100,0,59,32,115,116,114,111,107,101,45,119,105,100,116,104,58,37,46,50,102,59,32,115,116,114,111,107,101,45,108,105,110,101,99,97,112,58,37,115,59,32,115,116,114,111,107,101,45,108,105,110,101,106,111,105,110,58,37,115,0,0,0,0,0,0,99,117,114,114,101,110,116,67,111,108,111,114,0,0,0,0,99,112,49,50,53,48,0,0,32,111,112,101,110,32,121,108,111,119,32,121,104,105,103,104,32,121,99,108,111,115,101,32,119,105,100,116,104,0,0,0,114,103,98,40,37,51,100,44,32,37,51,100,44,32,37,51,100,41,0,0,0,0,0,0,60,103,32,115,116,121,108,101,61,34,102,105,108,108,58,110,111,110,101,59,32,99,111,108,111,114,58,37,115,59,32,115,116,114,111,107,101,58,0,0,37,54,46,51,102,32,0,0,9,9,60,47,112,97,116,116,101,114,110,62,10,9,60,47,100,101,102,115,62,10,0,0,9,9,9,60,112,97,116,104,32,115,116,121,108,101,32,61,32,39,37,115,32,37,115,58,99,117,114,114,101,110,116,67,111,108,111,114,39,32,100,61,39,37,115,39,47,62,10,0,108,97,109,98,101,114,116,119,0,0,0,0,0,0,0,0,108,105,115,116,95,116,101,114,109,115,0,0,0,0,0,0,9,9,9,60,112,97,116,104,32,115,116,121,108,101,32,61,32,39,37,115,32,37,115,58,37,115,39,32,100,61,32,39,37,115,39,47,62,10,0,0,105,115,36,111,115,97,109,112,108,101,115,0,0,0,0,0,32,32,68,97,116,97,32,66,108,111,99,107,115,58,32,32,37,42,108,100,10,0,0,0,102,36,105,116,0,0,0,0,9,9,9,60,112,97,116,104,32,115,116,121,108,101,61,39,37,115,32,37,115,58,114,103,98,40,37,100,44,37,100,44,37,100,41,39,32,100,61,39,37,115,39,47,62,10,0,0,108,105,110,101,116,121,112,101,32,110,111,116,32,102,111,117,110,100,0,0,0,0,0,0,83,116,97,116,115,32,99,111,109,109,97,110,100,32,110,111,116,32,97,118,97,105,108,97,98,108,101,32,105,110,32,112,111,108,97,114,32,109,111,100,101,0,0,0,0,0,0,0,115,116,114,111,107,101,58,110,111,110,101,59,0,0,0,0,114,101,109,111,118,101,32,108,97,98,101,108,32,99,108,111,115,101,32,116,111,32,112,111,105,110,116,101,114,32,105,102,32,96,115,101,116,32,109,111,117,115,101,32,108,97,98,101,108,115,96,32,105,115,32,111,110,0,0,0,0,0,0,0,102,105,108,108,58,110,111,110,101,59,0,0,0,0,0,0,10,37,115,32,0,0,0,0,77,45,50,44,48,32,76,52,44,49,50,32,77,48,44,45,52,32,76,56,44,49,50,32,77,52,44,45,52,32,76,49,48,44,56,0,0,0,0,0,77,45,50,44,56,32,76,52,44,45,52,32,77,48,44,49,50,32,76,56,44,45,52,32,77,52,44,49,50,32,76,49,48,44,48,0,0,0,0,0,77,45,52,44,56,32,76,56,44,45,52,32,77,48,44,49,50,32,76,49,50,44,48,0,77,45,52,44,48,32,76,56,44,49,50,32,77,48,44,45,52,32,76,49,50,44,56,0,37,45,49,53,46,49,53,115,0,0,0,0,0,0,0,0,85,110,114,101,99,111,103,110,105,122,101,100,32,111,112,116,105,111,110,46,32,83,101,101,32,39,104,101,108,112,32,115,104,111,119,39,46,0,0,0,77,48,44,48,32,76,48,44,56,32,76,56,44,56,32,76,56,44,48,32,76,48,44,48,0,0,0,0,0,0,0,0,77,48,44,48,32,76,56,44,56,32,77,48,44,56,32,76,56,44,48,32,77,48,44,52,32,76,52,44,56,32,76,56,44,52,32,76,52,44,48,32,76,48,44,52,0,0,0,0,97,116,97,110,104,0,0,0,90,97,112,102,32,68,105,110,103,98,97,116,115,0,0,0,77,48,44,48,32,76,56,44,56,32,77,48,44,56,32,76,56,44,48,0,0,0,0,0,104,105,115,36,116,111,114,121,115,105,122,101,0,0,0,0,32,32,66,108,97,110,107,58,32,32,32,32,32,32,32,32,37,42,108,100,10,0,0,0,46,46,46,0,0,0,0,0,9,60,100,101,102,115,62,10,9,9,60,112,97,116,116,101,114,110,32,105,100,61,39,103,112,80,97,116,37,100,39,32,112,97,116,116,101,114,110,85,110,105,116,115,61,39,117,115,101,114,83,112,97,99,101,79,110,85,115,101,39,32,120,61,39,48,39,32,121,61,39,48,39,32,119,105,100,116,104,61,39,56,39,32,104,101,105,103,104,116,61,39,56,39,62,10,0,0,0,0,0,0,0,0,9,108,105,110,101,116,121,112,101,32,37,100,44,32,0,0,110,111,102,111,114,116,36,114,97,110,0,0,0,0,0,0,103,112,98,105,110,0,0,0,32,117,110,105,116,115,32,0,115,116,114,111,107,101,0,0,60,67,116,114,108,45,66,50,62,0,0,0,0,0,0,0,9,60,103,32,115,116,121,108,101,32,61,32,39,115,116,114,111,107,101,58,110,111,110,101,59,32,115,104,97,112,101,45,114,101,110,100,101,114,105,110,103,58,99,114,105,115,112,69,100,103,101,115,39,62,10,0,103,101,110,95,111,110,101,95,99,111,110,116,111,117,114,58,32,110,111,32,99,111,110,116,111,117,114,32,102,111,117,110,100,10,0,0,0,0,0,0,37,115,32,61,32,39,99,117,114,114,101,110,116,67,111,108,111,114,39,0,0,0,0,0,32,60,32,0,0,0,0,0,37,115,32,61,32,39,37,115,39,0,0,0,0,0,0,0,99,97,110,110,111,116,32,98,101,32,104,101,114,101,0,0,78,101,101,100,32,102,117,108,108,32,117,115,105,110,103,32,115,112,101,99,32,102,111,114,32,121,32,116,105,109,101,32,100,97,116,97,0,0,0,0,37,115,32,61,32,39,114,103,98,40,37,51,100,44,32,37,51,100,44,32,37,51,100,41,39,0,0,0,0,0,0,0,102,105,108,108,0,0,0,0,45,45,100,101,102,97,117,108,116,45,115,101,116,116,105,110,103,115,0,0,0,0,0,0,37,45,54,46,54,115,32,0,39,47,62,10,0,0,0,0,117,115,101,114,32,102,117,110,99,0,0,0,0,0,0,0,37,46,49,102,44,37,46,49,102,37,115,0,0,0,0,0,97,99,111,115,104,0,0,0,90,97,112,102,32,67,104,97,110,99,101,114,121,32,77,101,100,105,117,109,32,73,116,97,108,105,99,0,0,0,0,0,32,112,111,105,110,116,115,32,61,32,39,0,0,0,0,0,109,111,114,101,62,32,0,0,104,105,100,36,100,101,110,51,100,0,0,0,0,0,0,0,32,32,73,110,118,97,108,105,100,58,32,32,32,32,32,32,37,42,108,100,10,0,0,0,96,98,117,105,108,116,105,110,45,116,111,103,103,108,101,45,114,117,108,101,114,96,0,0,37,46,55,55,115,37,115,10,37,115,58,37,100,58,0,0,32,102,105,108,108,32,61,32,39,117,114,108,40,35,103,112,80,97,116,37,100,41,39,0,9,76,105,110,101,116,121,112,101,115,32,114,101,112,101,97,116,32,101,118,101,114,121,32,37,100,32,117,110,108,101,115,115,32,101,120,112,108,105,99,105,116,108,121,32,100,101,102,105,110,101,100,10,0,0,0,32,32,97,110,103,108,101,32,37,103,0,0,0,0,0,0,32,102,105,108,108,45,111,112,97,99,105,116,121,32,61,32,39,37,102,39,0,0,0,0,47,121,115,116,101,112,32,49,32,105,109,97,120,32,100,105,118,32,100,101,102,32,47,121,48,32,48,32,100,101,102,32,47,105,105,32,48,32,100,101,102,10,0,0,0,0,0,0,67,97,110,110,111,116,32,111,112,101,110,32,37,115,32,102,105,108,101,32,39,37,115,39,0,0,0,0,0,0,0,0,99,117,114,118,101,0,0,0,120,32,112,111,115,0,0,0,111,114,32,100,114,97,119,32,108,97,98,101,108,115,32,105,102,32,96,115,101,116,32,109,111,117,115,101,32,108,97,98,101,108,115,32,105,115,32,111,110,96,0,0,0,0,0,0,32,102,105,108,108,32,61,32,39,37,115,39,0,0,0,0,105,110,116,101,114,110,97,108,32,101,114,114,111,114,32,58,32,116,121,112,101,32,110,101,105,116,104,101,114,32,73,78,84,32,111,114,32,67,77,80,76,88,0,0,0,0,0,0,9,9,60,112,111,108,121,103,111,110,32,0,0,0,0,0,99,97,110,110,111,116,32,115,101,116,32,114,97,110,103,101,32,119,105,116,104,32,114,101,112,108,111,116,0,0,0,0,32,120,109,108,58,115,112,97,99,101,61,34,112,114,101,115,101,114,118,101,34,0,0,0,32,102,105,108,108,61,34,110,111,110,101,34,0,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,32,100,121,61,34,37,46,50,102,112,116,34,0,0,0,0,32,100,120,61,34,37,46,50,102,101,109,34,0,0,0,0,97,115,105,110,104,0,0,0,83,121,109,98,111,108,0,0,32,102,111,110,116,45,115,116,121,108,101,61,34,37,115,34,32,0,0,0,0,0,0,0,103,36,114,105,100,0,0,0,32,32,79,117,116,32,111,102,32,114,97,110,103,101,58,32,37,42,108,100,10,0,0,0,82,101,119,105,110,100,105,110,103,32,102,100,32,37,100,10,0,0,0,0,0,0,0,0,32,102,111,110,116,45,119,101,105,103,104,116,61,34,37,115,34,32,0,0,0,0,0,0,40,37,115,37,103,44,32,37,115,37,103,44,32,37,115,37,103,41,0,0,0,0,0,0,122,0,0,0,0,0,0,0,44,32,37,115,37,103,0,0,110,111,114,109,97,108,0,0,73,110,32,108,111,103,32,109,111,100,101,32,114,114,97,110,103,101,32,109,117,115,116,32,110,111,116,32,105,110,99,108,117,100,101,32,48,0,0,0,97,110,110,111,116,97,116,101,32,116,104,101,32,103,114,97,112,104,32,117,115,105,110,103,32,96,109,111,117,115,101,102,111,114,109,97,116,96,32,40,115,101,101,32,107,101,121,115,32,39,49,39,44,32,39,50,39,41,0,0,0,0,0,0,32,102,111,110,116,45,115,105,122,101,61,34,37,46,49,102,112,116,34,0,0,0,0,0,32,115,116,121,108,101,61,34,102,111,110,116,45,102,97,109,105,108,121,58,37,115,34,32,0,0,0,0,0,0,0,0,60,116,115,112,97,110,0,0,60,116,115,112,97,110,32,100,120,61,34,45,37,46,49,102,101,109,34,32,100,121,61,34,37,46,49,102,112,116,34,62,0,0,0,0,0,0,0,0,79,110,108,121,32,117,110,100,101,102,105,110,101,100,32,100,97,116,97,112,111,105,110,116,115,32,97,114,101,32,111,109,105,116,116,101,100,32,102,114,111,109,32,116,104,101,32,115,117,114,102,97,99,101,46,10,0,0,0,0,0,0,0,0,37,115,60,47,116,115,112,97,110,62,0,0,0,0,0,0,10,10,99,111,114,114,101,108,97,116,105,111,110,32,109,97,116,114,105,120,32,111,102,32,116,104,101,32,102,105,116,32,112,97,114,97,109,101,116,101,114,115,58,10,10,0,0,0,60,47,103,62,10,0,0,0,10,72,101,108,112,32,116,111,112,105,99,115,32,97,118,97,105,108,97,98,108,101,58,10,0,0,0,0,0,0,0,0,62,10,0,0,0,0,0,0,105,110,118,110,111,114,109,0,80,97,108,97,116,105,110,111,32,66,111,108,100,32,73,116,97,108,105,99,0,0,0,0,111,110,99,108,105,99,107,61,34,103,110,117,112,108,111,116,95,115,118,103,46,116,111,103,103,108,101,86,105,115,105,98,105,108,105,116,121,40,101,118,116,44,39,37,115,95,112,108,111,116,95,37,100,37,115,39,41,34,0,0,0,0,0,0,102,117,36,110,99,116,105,111,110,115,0,0,0,0,0,0,32,32,82,101,99,111,114,100,115,58,32,32,32,32,32,32,37,42,108,100,10,0,0,0,83,107,105,112,112,105,110,103,32,117,110,114,101,97,100,97,98,108,101,32,102,105,108,101,32,34,37,115,34,0,0,0,9,60,103,32,118,105,115,105,98,105,108,105,116,121,61,34,118,105,115,105,98,108,101,34,32,0,0,0,0,0,0,0,40,99,104,97,114,97,99,116,101,114,32,117,110,105,116,115,41,32,0,0,0,0,0,0,37,115,111,98,106,101,99,116,32,37,50,100,32,101,108,108,105,112,115,101,32,0,0,0,62,60,116,105,116,108,101,62,37,115,95,112,108,111,116,95,37,100,37,115,60,47,116,105,116,108,101,62,10,0,0,0,84,104,105,115,32,112,108,111,116,32,115,116,121,108,101,32,100,111,101,115,32,110,111,116,32,119,111,114,107,32,119,105,116,104,32,54,32,99,111,108,115,46,32,83,101,116,116,105,110,103,32,116,111,32,120,121,101,114,114,111,114,98,97,114,115,0,0,0,0,0,0,0,60,66,50,62,0,0,0,0,9,60,103,32,105,100,61,34,37,115,95,112,108,111,116,95,37,100,37,115,34,32,0,0,103,110,117,112,108,111,116,0,105,110,118,97,108,105,100,32,99,111,109,109,97,110,100,0,9,60,47,103,62,10,0,0,32,104,48,46,48,49,39,47,62,0,0,0,0,0,0,0,90,32,0,0,0,0,0,0,43,47,45,0,0,0,0,0,100,36,97,115,104,101,100,0,91,0,0,0,0,0,0,0,105,110,118,101,114,102,0,0,80,97,108,97,116,105,110,111,32,66,111,108,100,0,0,0,108,36,97,110,100,115,99,97,112,101,0,0,0,0,0,0,102,117,36,110,99,116,105,111,110,0,0,0,0,0,0,0,42,32,70,73,76,69,58,32,10,0,0,0,0,0,0,0,114,98,0,0,0,0,0,0,112,36,111,114,116,114,97,105,116,0,0,0,0,0,0,0,40,115,99,114,101,101,110,32,117,110,105,116,115,41,32,0,32,97,114,99,32,91,37,103,58,37,103,93,32,0,0,0,32,37,115,32,102,111,110,116,32,34,37,115,44,37,117,34,0,0,0,0,0,0,0,0,85,110,114,101,99,111,103,110,105,122,101,100,32,53,32,99,111,108,117,109,110,32,112,108,111,116,32,115,116,121,108,101,59,32,114,101,115,101,116,116,105,110,103,32,116,111,32,98,111,120,101,114,114,111,114,98,97,114,115,0,0,0,0,0,32,108,105,110,101,119,105,100,116,104,32,37,102,0,0,0,112,114,105,110,116,32,99,111,111,114,100,105,110,97,116,101,115,32,116,111,32,99,108,105,112,98,111,97,114,100,32,117,115,105,110,103,32,96,99,108,105,112,98,111,97,114,100,102,111,114,109,97,116,96,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,40,115,101,101,32,107,101,121,115,32,39,51,39,44,32,39,52,39,41,0,0,97,114,114,111,119,115,36,116,121,108,101,0,0,0,0,0,69,68,70,95,66,105,110,97,114,121,70,105,108,101,80,111,115,105,116,105,111,110,0,0,32,109,111,110,111,99,104,114,111,109,101,0,0,0,0,0,78,101,119,32,112,97,114,97,109,101,116,101,114,32,102,105,108,101,110,97,109,101,32,101,120,112,101,99,116,101,100,0,108,97,110,100,115,99,97,112,101,0,0,0,0,0,0,0,112,111,114,116,114,97,105,116,0,0,0,0,0,0,0,0,37,115,32,91,37,117,44,37,117,93,0,0,0,0,0,0,37,45,49,53,46,49,53,115,32,61,32,37,45,49,53,103,32,32,37,45,51,46,51,115,32,37,45,49,50,46,52,103,32,40,37,46,52,103,37,37,41,10,0,0,0,0,0,0,69,120,112,101,99,116,105,110,103,32,102,111,110,116,32,110,97,109,101,32,0,0,0,0,101,120,112,101,99,116,105,110,103,32,39,93,39,0,0,0,110,111,114,109,0,0,0,0,80,97,108,97,116,105,110,111,32,73,116,97,108,105,99,0,93,0,0,0,0,0,0,0,102,111,36,114,109,97,116,0,111,117,116,111,102,114,97,110,103,101,0,0,0,0,0,0,34,37,115,34,32,105,115,32,97,32,100,105,114,101,99,116,111,114,121,0,0,0,0,0,39,44,39,32,101,120,112,101,99,116,101,100,0,0,0,0,40,103,114,97,112,104,32,117,110,105,116,115,41,32,0,0,110,111,101,113,117,97,108,36,95,97,120,101,115,0,0,0,37,115,37,103,0,0,0,0,110,111,46,32,119,105,110,100,111,119,115,58,32,91,104,111,114,105,122,111,110,116,97,108,44,118,101,114,116,105,99,97,108,93,32,101,120,112,101,99,116,101,100,0,0,0,0,0,84,104,105,115,32,112,108,111,116,32,115,116,121,108,101,32,100,111,101,115,32,110,111,116,32,119,111,114,107,32,119,105,116,104,32,52,32,99,111,108,115,46,32,83,101,116,116,105,110,103,32,116,111,32,121,101,114,114,111,114,98,97,114,115,0,0,0,0,0,0,0,0,108,105,110,101,119,105,100,116,104,58,32,111,117,116,32,111,102,32,114,97,110,103,101,0,50,120,60,66,49,62,0,0,97,114,114,111,119,115,116,121,108,101,32,37,100,32,110,111,116,32,102,111,117,110,100,0,108,105,110,101,119,105,100,116,104,58,32,119,105,100,116,104,32,105,115,32,110,111,116,32,115,112,101,99,105,102,105,101,100,46,0,0,0,0,0,0,80,97,114,97,109,101,116,101,114,32,102,105,108,101,110,97,109,101,32,101,120,112,101,99,116,101,100,0,0,0,0,0,37,37,84,71,73,70,32,50,46,49,53,45,112,55,10,115,116,97,116,101,40,37,100,44,51,48,44,37,117,44,48,44,48,44,37,117,44,49,54,44,49,44,57,44,49,44,49,44,48,44,48,44,48,44,48,44,49,44,48,44,39,37,115,39,44,48,44,37,117,44,48,44,48,44,49,44,49,48,44,48,44,48,44,49,44,49,44,48,44,49,54,44,48,44,48,44,49,44,49,44,49,41,46,10,37,37,10,37,37,32,64,40,35,41,67,114,101,97,116,111,114,58,32,103,110,117,112,108,111,116,32,37,115,32,112,97,116,99,104,108,101,118,101,108,32,37,115,10,37,37,32,37,37,87,37,37,10,37,37,10,112,97,103,101,40,49,44,34,34,41,46,10,0,0,0,0,119,97,114,110,105,110,103,58,32,117,115,105,110,103,32,115,116,97,110,100,97,114,100,32,109,117,108,116,105,112,108,111,116,10,0,0,0,0,0,0,101,114,114,111,114,58,32,110,117,109,98,101,114,32,111,102,32,112,108,111,116,115,32,62,32,112,108,111,116,115,32,112,101,114,32,112,97,103,101,10,0,0,0,0,0,0,0,0,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,32,32,32,32,32,32,32,32,32,32,32,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,10,0,99,111,114,97,108,0,0,0,72,111,116,80,105,110,107,0,99,101,105,108,0,0,0,0,80,97,108,97,116,105,110,111,32,82,111,109,97,110,0,0,68,97,114,107,83,101,97,71,114,101,101,110,0,0,0,0,102,111,110,116,36,112,97,116,104,0,0,0,0,0,0,0,98,108,111,99,107,115,0,0,99,97,110,110,111,116,32,99,114,101,97,116,101,32,112,105,112,101,32,102,111,114,32,100,97,116,97,0,0,0,0,0,121,101,108,108,111,119,0,0,40,115,101,99,111,110,100,32,97,120,101,115,41,32,0,0,120,121,122,0,0,0,0,0,37,115,111,98,106,101,99,116,32,37,50,100,32,99,105,114,99,108,101,32,0,0,0,0,116,101,120,116,40,39,37,115,39,44,37,117,44,37,117,44,39,37,115,39,44,48,44,37,117,44,49,44,37,117,44,37,117,44,49,44,53,53,44,49,49,57,44,37,117,44,48,44,49,53,44,52,44,48,44,48,44,48,44,48,44,91,10,9,34,37,115,34,93,41,46,10,0,0,0,0,0,0,0,0,84,104,105,115,32,112,108,111,116,32,115,116,121,108,101,32,100,111,101,115,32,110,111,116,32,119,111,114,107,32,119,105,116,104,32,51,32,99,111,108,115,46,32,83,101,116,116,105,110,103,32,116,111,32,121,101,114,114,111,114,98,97,114,115,0,0,0,0,0,0,0,0,117,110,114,101,99,111,103,110,105,122,101,100,32,99,111,108,111,114,32,110,97,109,101,32,97,110,100,32,110,111,116,32,97,32,115,116,114,105,110,103,32,34,35,65,65,82,82,71,71,66,66,34,0,0,0,0,112,111,108,121,103,111,110,40,39,37,115,39,44,55,44,91,10,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,93,44,49,44,49,44,49,44,48,44,37,117,44,48,44,48,44,48,44,48,44,48,44,91,10,93,41,46,10,0,0,0,0,0,97,114,99,40,39,37,115,39,44,49,44,49,44,49,44,48,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,48,44,37,46,49,102,44,37,46,49,102,44,53,55,54,48,44,49,55,50,56,48,44,37,117,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,46,10,0,0,0,0,0,111,110,108,121,32,107,101,121,119,111,114,100,115,32,97,114,101,32,39,116,101,114,109,105,110,97,108,39,32,97,110,100,32,39,112,97,108,101,116,116,101,39,0,0,0,0,0,0,97,114,99,40,39,37,115,39,44,49,44,49,44,49,44,48,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,48,44,37,46,49,102,44,37,46,49,102,44,49,49,53,50,48,44,49,55,50,56,48,44,37,117,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,46,10,0,0,0,0,97,114,99,40,39,37,115,39,44,49,44,49,44,49,44,48,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,48,44,37,46,49,102,44,37,46,49,102,44,49,49,53,50,48,44,49,49,53,50,48,44,37,117,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,46,10,0,0,0,0,115,121,110,116,97,120,32,101,114,114,111,114,32,105,110,32,112,97,114,97,109,101,116,101,114,32,102,105,108,101,32,37,115,0,0,0,0,0,0,0,97,114,99,40,39,37,115,39,44,49,44,49,44,49,44,48,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,48,44,37,46,49,102,44,37,46,49,102,44,49,55,50,56,48,44,49,55,50,56,48,44,37,117,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,46,10,0,0,0,0,70,105,110,97,108,32,115,101,116,32,111,102,32,112,97,114,97,109,101,116,101,114,115,32,32,32,32,32,32,32,32,32,32,32,32,65,115,121,109,112,116,111,116,105,99,32,83,116,97,110,100,97,114,100,32,69,114,114,111,114,10,0,0,0,97,114,99,40,39,37,115,39,44,49,44,49,44,49,44,48,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,48,44,37,46,49,102,44,37,46,49,102,44,49,55,50,56,48,44,49,49,53,50,48,44,37,117,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,46,10,0,0,0,0,97,114,99,40,39,37,115,39,44,49,44,49,44,49,44,48,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,48,44,37,46,49,102,44,37,46,49,102,44,49,55,50,56,48,44,53,55,54,48,44,37,117,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,46,10,0,0,0,0,0,102,108,111,111,114,0,0,0,78,101,119,32,67,101,110,116,117,114,121,32,83,99,104,111,111,108,98,111,111,107,32,66,111,108,100,32,73,116,97,108,105,99,0,0,0,0,0,0,97,114,99,40,39,37,115,39,44,49,44,49,44,49,44,48,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,48,44,37,46,49,102,44,37,46,49,102,44,48,44,49,55,50,56,48,44,37,117,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,46,10,0,0,0,0,0,0,0,0,102,105,116,0,0,0,0,0,98,108,97,110,107,115,0,0,99,97,110,110,111,116,32,111,112,101,110,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,102,111,114,32,114,101,97,100,105,110,103,32,100,97,116,97,0,0,0,0,97,114,99,40,39,37,115,39,44,49,44,49,44,49,44,48,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,48,44,37,46,49,102,44,37,46,49,102,44,53,55,54,48,44,49,49,53,50,48,44,37,117,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,46,10,0,0,0,0,0,40,102,105,114,115,116,32,97,120,101,115,41,32,0,0,0,97,114,99,40,39,37,115,39,44,49,44,49,44,49,44,48,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,48,44,37,46,49,102,44,37,46,49,102,44,49,49,53,50,48,44,53,55,54,48,44,37,117,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,46,10,0,0,0,0,0,84,104,105,115,32,112,108,111,116,32,115,116,121,108,101,32,100,111,101,115,32,110,111,116,32,119,111,114,107,32,119,105,116,104,32,49,32,111,114,32,50,32,99,111,108,115,46,32,83,101,116,116,105,110,103,32,116,111,32,112,111,105,110,116,115,0,0,0,0,0,0,0,98,105,110,100,95,97,112,112,101,110,100,45,62,110,101,119,0,0,0,0,0,0,0,0,35,37,108,120,0,0,0,0,97,114,99,40,39,37,115,39,44,49,44,49,44,49,44,48,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,48,44,37,46,49,102,44,37,46,49,102,44,48,44,49,49,53,50,48,44,37,117,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,46,10,0,0,0,0,0,0,0,0,97,114,99,40,39,37,115,39,44,49,44,49,44,49,44,48,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,48,44,37,46,49,102,44,37,46,49,102,44,53,55,54,48,44,53,55,54,48,44,37,117,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,46,10,0,0,0,0,0,0,115,99,114,101,101,110,100,117,109,112,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,10,0,0,0,0,0,97,114,99,40,39,37,115,39,44,49,44,49,44,49,44,48,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,48,44,37,46,49,102,44,37,46,49,102,44,48,44,53,55,54,48,44,37,117,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,46,10,0,97,114,99,40,39,37,115,39,44,49,44,49,44,49,44,48,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,48,44,37,46,49,102,44,37,46,49,102,44,52,52,56,48,44,50,53,54,48,44,37,117,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,46,10,0,0,0,0,0,0,9,103,110,117,112,108,111,116,114,99,32,105,115,32,114,101,97,100,32,102,114,111,109,32,37,115,10,0,0,0,0,0,112,111,108,121,103,111,110,40,39,37,115,39,44,54,44,91,10,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,93,44,49,44,49,44,49,44,48,44,37,117])
+.concat([44,48,44,48,44,48,44,48,44,48,44,91,10,93,41,46,10,0,0,0,0,0,0,0,67,97,108,99,117,108,97,116,105,111,110,32,101,114,114,111,114,58,32,110,111,110,45,112,111,115,105,116,105,118,101,32,100,105,97,103,111,110,97,108,32,101,108,101,109,101,110,116,32,105,110,32,99,111,118,97,114,46,32,109,97,116,114,105,120,0,0,0,0,0,0,0,70,111,114,109,97,116,32,99,104,97,114,97,99,116,101,114,32,109,105,115,109,97,116,99,104,58,32,37,37,76,32,105,115,32,111,110,108,121,32,118,97,108,105,100,32,119,105,116,104,32,37,37,108,0,0,0,112,111,108,121,103,111,110,40,39,37,115,39,44,54,44,91,10,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,93,44,48,44,49,44,49,44,48,44,37,117,44,48,44,48,44,48,44,48,44,48,44,91,10,93,41,46,10,0,0,0,0,0,0,0,37,100,47,37,109,47,37,121,44,37,72,58,37,77,0,0,37,42,100,0,0,0,0,0,112,111,108,121,103,111,110,40,39,37,115,39,44,53,44,91,10,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,93,44,49,44,49,44,49,44,48,44,37,117,44,48,44,48,44,48,44,48,44,48,44,91,10,93,41,46,10,0,114,97,110,100,0,0,0,0,112,111,108,121,103,111,110,40,39,37,115,39,44,53,44,91,10,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,93,44,48,44,49,44,49,44,48,44,37,117,44,48,44,48,44,48,44,48,44,48,44,91,10,93,41,46,10,0,78,101,119,32,67,101,110,116,117,114,121,32,83,99,104,111,111,108,98,111,111,107,32,66,111,108,100,0,0,0,0,0,100,101,99,36,105,109,97,108,115,105,103,110,0,0,0,0,105,110,118,97,108,105,100,0,112,111,108,121,103,111,110,40,39,37,115,39,44,52,44,91,10,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,93,44,49,44,49,44,49,44,48,44,37,117,44,48,44,48,44,48,44,48,44,48,44,91,10,93,41,46,10,0,0,0,9,32,32,102,111,110,116,32,34,37,115,34,10,0,0,0,101,113,117,97,108,36,95,97,120,101,115,0,0,0,0,0,102,114,111,109,32,0,0,0,112,111,108,121,103,111,110,40,39,37,115,39,44,52,44,91,10,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,93,44,48,44,49,44,49,44,48,44,37,117,44,48,44,48,44,48,44,48,44,48,44,91,10,93,41,46,10,0,0,0,84,111,111,32,109,97,110,121,32,99,111,108,117,109,110,115,32,105,110,32,117,115,105,110,103,32,115,112,101,99,105,102,105,99,97,116,105,111,110,0,68,101,108,101,116,101,0,0,111,118,97,108,40,39,37,115,39,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,49,44,49,44,49,44,37,117,44,48,44,48,44,48,44,91,10,93,41,46,10,0,0,0,0,0,111,118,97,108,40,39,37,115,39,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,50,44,49,44,49,44,37,117,44,48,44,48,44,48,44,91,10,93,41,46,10,0,0,0,0,0,67,97,110,110,111,116,32,111,112,101,110,32,115,97,118,101,32,102,105,108,101,0,0,0,99,112,57,53,48,0,0,0,98,111,120,40,39,37,115,39,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,49,44,49,44,49,44,37,117,44,48,44,48,44,48,44,91,10,93,41,46,10,0,0,0,0,0,0,32,111,112,101,110,32,121,108,111,119,32,121,104,105,103,104,32,121,99,108,111,115,101,0,98,111,120,40,39,37,115,39,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,50,44,49,44,49,44,37,117,44,48,44,48,44,48,44,91,10,93,41,46,10,0,0,0,0,0,0,99,97,108,108,110,0,0,0,112,111,108,121,40,39,37,115,39,44,50,44,91,10,9,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,93,44,48,44,50,44,49,44,37,117,44,48,44,48,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,46,10,0,0,0,0,0,0,0,70,73,84,95,87,83,83,82,0,0,0,0,0,0,0,0,112,111,108,121,40,39,37,115,39,44,50,44,91,10,9,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,93,44,48,44,50,44,49,44,37,117,44,48,44,48,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,10,0,0,0,0,0,0,0,0,112,111,108,121,40,39,37,115,39,44,50,44,91,10,9,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,93,44,48,44,50,44,49,44,37,117,44,48,44,48,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,44,10,0,0,0,0,0,0,0,67,97,110,110,111,116,32,115,112,108,111,116,32,105,110,32,112,111,108,97,114,32,99,111,111,114,100,105,110,97,116,101,32,115,121,115,116,101,109,46,0,0,0,0,0,0,0,0,105,103,97,109,109,97,0,0,103,114,111,117,112,40,91,10,0,0,0,0,0,0,0,0,78,101,119,32,67,101,110,116,117,114,121,32,83,99,104,111,111,108,98,111,111,107,32,73,116,97,108,105,99,0,0,0,101,110,99,36,111,100,105,110,103,0,0,0,0,0,0,0,114,101,99,111,114,100,115,0,101,120,36,105,116,0,0,0,99,97,110,110,111,116,32,112,108,111,116,32,102,114,111,109,32,115,116,100,105,110,47,115,116,100,111,117,116,47,115,116,100,101,114,114,0,0,0,0,103,114,111,117,112,40,91,10,112,111,108,121,40,39,37,115,39,44,50,44,91,10,9,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,93,44,48,44,50,44,49,44,37,117,44,48,44,48,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,46,10,112,111,108,121,40,39,37,115,39,44,50,44,91,10,9,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,93,44,48,44,50,44,49,44,37,117,44,48,44,48,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,46,10,0,0,0,0,0,0,83,116,97,116,115,32,99,111,109,109,97,110,100,32,110,111,116,32,97,118,97,105,108,97,98,108,101,32,105,110,32,116,105,109,101,100,97,116,97,32,109,111,100,101,0,0,0,0,32,115,105,122,101,32,0,0,93,44,10,37,117,44,48,44,91,10,93,41,46,10,0,0,78,111,116,32,101,110,111,117,103,104,32,99,111,108,117,109,110,115,32,105,110,32,117,115,105,110,103,32,115,112,101,99,105,102,105,99,97,116,105,111,110,0,0,0,0,0,0,0,69,115,99,97,112,101,0,0,99,111,108,111,114,115,112,101,99,32,111,112,116,105,111,110,32,110,111,116,32,114,101,99,111,103,110,105,122,101,100,0,103,114,111,117,112,40,91,10,112,111,108,121,40,39,37,115,39,44,50,44,91,10,9,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,93,44,48,44,50,44,49,44,37,117,44,48,44,48,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,44,10,112,111,108,121,40,39,37,115,39,44,50,44,91,10,9,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,93,44,48,44,50,44,49,44,37,117,44,48,44,48,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,10,0,0,0,0,0,0,0,112,111,108,121,40,39,37,115,39,44,50,44,91,10,9,37,46,49,102,44,37,46,49,102,44,37,46,49,102,44,37,46,49,102,93,44,48,44,49,44,49,44,37,117,44,48,44,48,44,48,44,48,44,56,44,51,44,48,44,91,10,93,41,46,10,0,0,0,0,0,0,0,112,111,108,121,40,39,37,115,39,44,37,100,44,91,10,9,37,117,44,37,117,44,37,117,44,37,117,93,44,49,44,37,117,44,49,44,37,117,44,48,44,48,44,37,117,44,48,44,56,44,51,44,48,44,91,10,93,41,46,10,0,0,0,0,37,117,44,37,117,93,44,48,44,37,117,44,49,44,37,117,44,48,44,48,44,37,117,44,48,44,56,44,51,44,48,44,91,10,93,41,46,10,0,0,112,111,108,121,40,39,37,115,39,44,37,100,44,91,10,9,0,0,0,0,0,0,0,0,91,110,111,110,101,93,0,0,70,73,84,95,83,84,68,70,73,84,0,0,0,0,0,0,35,37,46,50,120,37,46,50,120,37,46,50,120,0,0,0,93,44,37,100,44,49,44,48,44,48,44,37,117,44,48,44,48,44,48,44,48,44,91,10,93,41,46,10,0,0,0,0,118,111,105,103,116,0,0,0,37,117,44,37,117,0,0,0,78,101,119,32,67,101,110,116,117,114,121,32,83,99,104,111,111,108,98,111,111,107,32,82,111,109,97,110,0,0,0,0,100,117,36,109,109,121,0,0,37,115,9,37,108,100,10,0,105,110,118,97,108,105,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,116,101,103,101,114,0,10,9,0,0,0,0,0,0,9,32,0,0,0,0,0,0,116,36,105,109,101,0,0,0,99,101,110,116,101,114,32,0,37,117,44,37,117,44,0,0,82,101,116,117,114,110,0,0,112,97,108,101,116,116,101,32,102,114,97,99,116,105,111,110,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,0,112,111,108,121,103,111,110,40,39,37,115,39,44,37,100,44,91,10,9,0,0,0,0,0,99,111,110,116,111,117,114,32,116,114,105,100,105,97,103,32,109,0,0,0,0,0,0,0,119,104,105,116,101,0,0,0,110,111,32,112,114,101,118,105,111,117,115,32,112,108,111,116,0,0,0,0,0,0,0,0,105,36,110,116,101,114,97,99,116,105,118,101,0,0,0,0,98,108,45,105,110,116,101,114,112,32,98,101,116,119,101,101,110,32,115,99,97,110,0,0,78,101,101,100,32,102,117,108,108,32,117,115,105,110,103,32,115,112,101,99,32,102,111,114,32,120,32,116,105,109,101,32,100,97,116,97,0,0,0,0,85,110,100,101,102,105,110,101,100,32,118,97,108,117,101,32,116,104,105,114,100,32,99,111,108,111,114,32,100,117,114,105,110,103,32,102,117,110,99,116,105,111,110,32,101,118,97,108,117,97,116,105,111,110,0,0,112,36,101,114,108,116,107,0,108,97,98,101,108,112,111,105,110,116,32,108,97,98,101,108,0,0,0,0,0,0,0,0,105,110,116,101,114,97,99,116,105,118,101,0,0,0,0,0,45,100,0,0,0,0,0,0,70,73,84,95,78,68,70,0,112,101,114,108,116,107,0,0,37,115,32,37,115,0,0,0,105,98,101,116,97,0,0,0,105,102,32,123,91,115,116,114,105,110,103,32,108,101,110,103,116,104,32,36,121,50,109,93,62,48,125,32,123,112,117,116,115,32,34,32,36,121,50,109,34,125,32,101,108,115,101,32,123,112,117,116,115,32,34,32,91,101,120,112,114,32,48,46,53,42,40,36,121,50,115,43,36,121,50,101,41,93,34,125,10,0,0,0,0,0,0,0,72,101,108,118,101,116,105,99,97,32,78,97,114,114,111,119,32,66,111,108,100,32,79,98,108,105,113,117,101,0,0,0,100,103,36,114,105,100,51,100,0,0,0,0,0,0,0,0,32,32,77,101,100,105,97,110,58,32,32,32,37,115,32,10,0,0,0,0,0,0,0,0,116,117,114,110,105,110,103,32,114,117,108,101,114,32,111,102,102,46,10,0,0,0,0,0,100,97,116,97,102,105,108,101,32,108,105,110,101,32,98,117,102,102,101,114,0,0,0,0,105,102,32,123,91,115,116,114,105,110,103,32,108,101,110,103,116,104,32,36,120,50,109,93,62,48,125,32,123,112,117,116,115,32,45,110,111,110,101,119,108,105,110,101,32,34,32,36,120,50,109,34,125,32,101,108,115,101,32,123,112,117,116,115,32,45,110,111,110,101,119,108,105,110,101,32,34,32,91,101,120,112,114,32,48,46,53,42,40,36,120,50,115,43,36,120,50,101,41,93,34,125,10,0,41,10,0,0,0,0,0,0,110,111,119,114,105,36,116,101,98,97,99,107,0,0,0,0,105,102,32,123,91,115,116,114,105,110,103,32,108,101,110,103,116,104,32,36,121,49,109,93,62,48,125,32,123,112,117,116,115,32,45,110,111,110,101,119,108,105,110,101,32,34,32,36,121,49,109,34,125,32,101,108,115,101,32,123,112,117,116,115,32,45,110,111,110,101,119,108,105,110,101,32,34,32,91,101,120,112,114,32,48,46,53,42,40,36,121,49,115,43,36,121,49,101,41,93,34,125,10,0,115,101,116,32,0,0,0,0,73,110,118,97,108,105,100,32,115,117,98,115,116,105,116,117,116,105,111,110,32,36,37,99,0,0,0,0,0,0,0,0,37,105,32,37,105,32,116,114,97,110,115,108,97,116,101,32,37,105,32,37,105,32,115,99,97,108,101,32,48,32,115,101,116,108,105,110,101,119,105,100,116,104,10,0,0,0,0,0,115,112,108,105,110,101,32,104,101,108,112,32,118,101,99,116,111,114,0,0,0,0,0,0,75,80,95,69,110,116,101,114,0,0,0,0,0,0,0,0,101,120,112,101,99,116,101,100,32,112,97,108,101,116,116,101,32,102,114,97,99,116,105,111,110,0,0,0,0,0,0,0,105,102,32,123,91,115,116,114,105,110,103,32,108,101,110,103,116,104,32,36,120,49,109,93,62,48,125,32,123,112,117,116,115,32,45,110,111,110,101,119,108,105,110,101,32,34,32,36,120,49,109,34,125,32,101,108,115,101,32,123,112,117,116,115,32,45,110,111,110,101,119,108,105,110,101,32,34,32,91,101,120,112,114,32,48,46,53,42,40,36,120,49,115,43,36,120,49,101,41,93,34,125,10,0,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,102,95,115,117,109,32,99,111,117,108,100,32,110,111,116,32,97,99,99,101,115,115,32,115,117,109,109,97,116,105,111,110,32,99,111,101,102,102,105,99,105,101,110,116,32,102,117,110,99,116,105,111,110,0,0,0,117,115,101,114,95,103,110,117,112,108,111,116,95,99,111,111,114,100,105,110,97,116,101,115,32,36,119,105,110,32,36,105,100,32,36,120,49,115,32,36,121,49,115,32,36,120,50,115,32,36,121,50,115,32,36,120,49,101,32,36,121,49,101,32,36,120,50,101,32,36,121,50,101,32,36,120,49,109,32,36,121,49,109,32,36,120,50,109,32,36,121,50,109,10,0,0,73,110,116,101,114,110,97,108,32,101,114,114,111,114,32,45,32,114,101,102,114,101,115,104,32,111,102,32,117,110,107,110,111,119,110,32,112,108,111,116,32,116,121,112,101,0,0,0,115,101,116,32,105,100,32,91,36,119,105,110,32,102,105,110,100,32,119,105,116,104,116,97,103,32,99,117,114,114,101,110,116,93,10,0,0,0,0,0,85,110,100,101,102,105,110,101,100,32,118,97,108,117,101,32,115,101,99,111,110,100,32,99,111,108,111,114,32,100,117,114,105,110,103,32,102,117,110,99,116,105,111,110,32,101,118,97,108,117,97,116,105,111,110,0,105,102,32,123,40,91,108,108,101,110,103,116,104,32,91,105,110,102,111,32,99,111,109,109,97,110,100,115,32,117,115,101,114,95,103,110,117,112,108,111,116,95,99,111,111,114,100,105,110,97,116,101,115,93,93,41,125,32,123,10,0,0,0,0,112,114,111,99,32,103,110,117,112,108,111,116,95,120,121,32,123,119,105,110,32,120,49,115,32,121,49,115,32,120,50,115,32,121,50,115,32,120,49,101,32,121,49,101,32,120,50,101,32,121,50,101,32,120,49,109,32,121,49,109,32,120,50,109,32,121,50,109,125,32,123,10,0,0,0,0,0,0,0,0,118,97,114,105,97,110,99,101,32,111,102,32,114,101,115,105,100,117,97,108,115,32,40,114,101,100,117,99,101,100,32,99,104,105,115,113,117,97,114,101,41,32,61,32,87,83,83,82,47,110,100,102,32,32,32,58,32,37,103,10,10,0,0,0,114,101,116,117,114,110,32,123,37,102,32,37,102,32,37,102,32,37,102,32,37,102,32,37,102,32,37,102,32,37,102,125,10,0,0,0,0,0,0,0,112,114,111,99,32,103,110,117,112,108,111,116,95,97,120,105,115,114,97,110,103,101,115,32,123,125,32,123,10,0,0,0,108,103,97,109,109,97,0,0,114,101,116,117,114,110,32,123,37,100,32,37,100,32,37,100,32,37,100,125,10,0,0,0,72,101,108,118,101,116,105,99,97,32,78,97,114,114,111,119,32,66,111,108,100,0,0,0,100,97,116,97,36,102,105,108,101,0,0,0,0,0,0,0,32,32,81,117,97,114,116,105,108,101,58,32,37,115,32,10,0,0,0,0,0,0,0,0,112,114,111,99,32,103,110,117,112,108,111,116,95,112,108,111,116,97,114,101,97,32,123,125,32,123,10,0,0,0,0,0,100,117,112,108,105,99,97,116,101,100,32,111,114,32,99,111,110,116,114,97,100,105,99,116,105,110,103,32,97,114,103,117,109,101,110,116,115,32,105,110,32,100,97,116,97,102,105,108,101,32,111,112,116,105,111,110,115,0,0,0,0,0,0,0,44,32,0,0,0,0,0,0,119,114,36,105,116,101,98,97,99,107,0,0,0,0,0,0,125,10,0,0,0,0,0,0,9,0,0,0,0,0,0,0,105,110,116,101,114,110,97,108,32,101,114,114,111,114,32,58,32,100,102,95,114,101,97,100,108,105,110,101,32,114,101,116,117,114,110,101,100,32,37,100,32,58,32,100,97,116,97,102,105,108,101,32,108,105,110,101,32,37,100,0,0,0,0,0,84,97,98,0,0,0,0,0,112,114,105,110,116,32,34,92,110,34,10,0,0,0,0,0,105,102,32,40,108,101,110,103,116,104,40,36,121,50,109,41,62,48,41,32,123,112,114,105,110,116,32,34,32,36,121,50,109,34,59,125,32,101,108,115,101,32,123,112,114,105,110,116,32,34,32,34,44,32,48,46,53,42,40,36,121,50,115,43,36,121,50,101,41,59,125,10,0,0,0,0,0,0,0,0,99,97,110,110,111,116,32,114,101,102,114,101,115,104,32,102,114,111,109,32,116,104,105,115,32,115,116,97,116,101,46,32,116,114,121,105,110,103,32,102,117,108,108,32,114,101,112,108,111,116,0,0,0,0,0,0,105,102,32,40,108,101,110,103,116,104,40,36,120,50,109,41,62,48,41,32,123,112,114,105,110,116,32,34,32,36,120,50,109,34,59,125,32,101,108,115,101,32,123,112,114,105,110,116,32,34,32,34,44,32,48,46,53,42,40,36,120,50,115,43,36,120,50,101,41,59,125,10,0,0,0,0,0,0,0,0,85,110,100,101,102,105,110,101,100,32,118,97,108,117,101,32,102,105,114,115,116,32,99,111,108,111,114,32,100,117,114,105,110,103,32,102,117,110,99,116,105,111,110,32,101,118,97,108,117,97,116,105,111,110,0,0,105,102,32,40,108,101,110,103,116,104,40,36,121,49,109,41,62,48,41,32,123,112,114,105,110,116,32,34,32,36,121,49,109,34,59,125,32,101,108,115,101,32,123,112,114,105,110,116,32,34,32,34,44,32,48,46,53,42,40,36,121,49,115,43,36,121,49,101,41,59,125,10,0,0,0,0,0,0,0,0,105,102,32,40,108,101,110,103,116,104,40,36,120,49,109,41,62,48,41,32,123,112,114,105,110,116,32,34,32,36,120,49,109,34,59,125,32,101,108,115,101,32,123,112,114,105,110,116,32,34,32,34,44,32,48,46,53,42,40,36,120,49,115,43,36,120,49,101,41,59,125,10,0,0,0,0,0,0,0,0,79,117,116,114,97,110,103,101,100,32,97,110,100,32,117,110,100,101,102,105,110,101,100,32,100,97,116,97,112,111,105,110,116,115,32,97,114,101,32,111,109,105,116,116,101,100,32,102,114,111,109,32,116,104,101,32,115,117,114,102,97,99,101,46,10,0,0,0,0,0,0,0,114,109,115,32,111,102,32,114,101,115,105,100,117,97,108,115,32,32,32,32,32,32,40,70,73,84,95,83,84,68,70,73,84,41,32,61,32,115,113,114,116,40,87,83,83,82,47,110,100,102,41,32,32,32,32,58,32,37,103,10,0,0,0,0,125,32,101,108,115,101,32,123,10,0,0,0,0,0,0,0,58,10,0,0,0,0,0,0,117,115,101,114,95,103,110,117,112,108,111,116,95,99,111,111,114,100,105,110,97,116,101,115,32,36,119,105,110,44,32,36,105,100,44,32,36,120,49,115,44,32,36,121,49,115,44,32,36,120,50,115,44,32,36,121,50,115,44,32,36,120,49,101,44,32,36,121,49,101,44,32,36,120,50,101,44,32,36,121,50,101,44,32,36,120,49,109,44,32,36,121,49,109,44,32,36,120,50,109,44,32,36,121,50,109,10,0,0,0,0,0,103,97,109,109,97,0,0,0,109,121,32,36,105,100,32,61,32,36,119,105,110,45,62,102,105,110,100,40,39,119,105,116,104,116,97,103,39,44,32,39,99,117,114,114,101,110,116,39,41,59,10,0,0,0,0,0,72,101,108,118,101,116,105,99,97,32,78,97,114,114,111,119,32,79,98,108,105,113,117,101,0,0,0,0,0,0,0,0,100,97,36,116,97,0,0,0,32,32,77,97,120,105,109,117,109,58,32,32,37,115,32,91,37,42,108,100,93,10,0,0,105,102,32,40,100,101,102,105,110,101,100,32,38,117,115,101,114,95,103,110,117,112,108,111,116,95,99,111,111,114,100,105,110,97,116,101,115,41,32,123,10,0,0,0,0,0,0,0,110,111,97,117,116,111,36,115,99,97,108,101,0,0,0,0,109,121,32,40,36,119,105,110,44,32,36,120,49,115,44,32,36,121,49,115,44,32,36,120,50,115,44,32,36,121,50,115,44,32,36,120,49,101,44,32,36,121,49,101,44,32,36,120,50,101,44,32,36,121,50,101,44,32,36,120,49,109,44,32,36,121,49,109,44,32,36,120,50,109,44,32,36,121,50,109,41,32,61,32,64,95,59,10,0,0,0,0,0,0,0,0,37,115,111,98,106,101,99,116,32,37,50,100,32,114,101,99,116,32,0,0,0,0,0,0,78,111,116,32,101,110,111,117,103,104,32,99,111,108,117,109,110,115,32,102,111,114,32,118,97,114,105,97,98,108,101,32,99,111,108,111,114,0,0,0,66,97,99,107,83,112,97,99,101,0,0,0,0,0,0,0,101,120,112,101,99,116,101,100,32,99,98,32,118,97,108,117,101,0,0,0,0,0,0,0,115,117,98,32,103,110,117,112,108,111,116,95,120,121,32,123,10,0,0,0,0,0,0,0,114,101,116,117,114,110,32,40,37,102,44,32,37,102,44,32,37,102,44,32,37,102,44,32,37,102,44,32,37,102,44,32,37,102,44,32,37,102,41,59,10,0,0,0,0,0,0,0,110,111,32,97,99,116,105,118,101,32,112,108,111,116,59,32,99,97,110,110,111,116,32,114,101,102,114,101,115,104,0,0,115,117,98,32,103,110,117,112,108,111,116,95,97,120,105,115,114,97,110,103,101,115,32,123,10,0,0,0,0,0,0,0,105,110,32,108,97,98,101,108,95,119,105,100,116,104,0,0,37,115,58,37,100,32,111,111,111,112,115,58,32,85,110,107,110,111,119,110,32,99,111,108,111,114,77,111,100,101,32,39,37,99,39,46,10,0,0,0,114,101,116,117,114,110,32,40,37,100,44,32,37,100,44,32,37,100,44,32,37,100,41,59,10,0,0,0,0,0,0,0,115,117,98,32,103,110,117,112,108,111,116,95,112,108,111,116,97,114,101,97,32,123,10,0,100,101,103,114,101,101,115,32,111,102,32,102,114,101,101,100,111,109,32,32,32,32,40,70,73,84,95,78,68,70,41,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,58,32,37,100,10,0,0,0,0,125,59,10,0,0,0,0,0,112,114,111,99,32,103,110,117,112,108,111,116,32,99,97,110,32,123,10,36,99,97,110,32,100,101,108,101,116,101,32,97,108,108,10,115,101,116,32,99,109,120,32,91,101,120,112,114,32,91,119,105,110,102,111,32,119,105,100,116,104,32,36,99,97,110,93,45,50,42,91,36,99,97,110,32,99,103,101,116,32,45,98,111,114,100,101,114,93,45,50,42,91,36,99,97,110,32,99,103,101,116,32,45,104,105,103,104,108,105,103,104,116,116,104,105,99,107,110,101,115,115,93,93,10,105,102,32,123,36,99,109,120,32,60,61,32,49,125,32,123,115,101,116,32,99,109,120,32,91,36,99,97,110,32,99,103,101,116,32,45,119,105,100,116,104,93,125,10,115,101,116,32,99,109,121,32,91,101,120,112,114,32,91,119,105,110,102,111,32,104,101,105,103,104,116,32,36,99,97,110,93,45,50,42,91,36,99,97,110,32,99,103,101,116,32,45,98,111,114,100,101,114,93,45,50,42,91,36,99,97,110,32,99,103,101,116,32,45,104,105,103,104,108,105,103,104,116,116,104,105,99,107,110,101,115,115,93,93,10,105,102,32,123,36,99,109,121,32,60,61,32,49,125,32,123,115,101,116,32,99,109,121,32,91,36,99,97,110,32,99,103,101,116,32,45,104,101,105,103,104,116,93,125,10,0,0,0,0,0,0,0,101,114,102,99,0,0,0,0,115,117,98,32,123,10,109,121,40,36,99,97,110,41,32,61,32,64,95,59,10,36,99,97,110,45,62,100,101,108,101,116,101,40,39,97,108,108,39,41,59,10,109,121,32,36,99,109,120,32,61,32,36,99,97,110,45,62,119,105,100,116,104,32,45,32,50,32,42,32,36,99,97,110,45,62,99,103,101,116,40,45,98,111,114,100,101,114,41,32,45,32,50,32,42,32,36,99,97,110,45,62,99,103,101,116,40,45,104,105,103,104,108,105,103,104,116,116,104,105,99,107,110,101,115,115,41,59,10,105,102,32,40,36,99,109,120,32,60,61,32,49,41,32,123,10,36,99,109,120,32,61,32,40,36,99,97,110,45,62,99,103,101,116,40,45,119,105,100,116,104,41,41,59,10,125,10,109,121,32,36,99,109,121,32,61,32,36,99,97,110,45,62,104,101,105,103,104,116,32,45,32,50,32,42,32,36,99,97,110,45,62,99,103,101,116,40,45,98,111,114,100,101,114,41,32,45,32,50,32,42,32,36,99,97,110,45,62,99,103,101,116,40,45,104,105,103,104,108,105,103,104,116,116,104,105,99,107,110,101,115,115,41,59,10,105,102,32,40,36,99,109,121,32,60,61,32,49,41,32,123,10,36,99,109,121,32,61,32,40,36,99,97,110,45,62,99,103,101,116,40,45,104,101,105,103,104,116,41,41,59,10,125,10,0,0,0,0,0,0,72,101,108,118,101,116,105,99,97,32,78,97,114,114,111,119,0,0,0,0,0,0,0,0,99,111,36,110,116,111,117,114,115,0,0,0,0,0,0,0,32,32,77,105,110,105,109,117,109,58,32,32,37,115,32,91,37,42,108,100,93,10,0,0,34,10,0,0,0,0,0,0,118,111,108,97,116,105,108,101,0,0,0,0,0,0,0,0,32,123,125,0,0,0,0,0,103,114,97,112,104,32,0,0,71,80,95,76,65,83,84,95,75,69,89,0,0,0,0,0,99,98,0,0,0,0,0,0,93,32,60,66,117,116,116,111,110,62,32,34,103,110,117,112,108,111,116,95,120,121,32,37,37,87,32,37,102,32,37,102,32,37,102,32,37,102,32,37,102,32,37,102,32,37,102,32,37,102,0,0,0,0,0,0,93,41,59,10,0,0,0,0,100,97,116,97,102,105,108,101,32,110,97,109,101,0,0,0,112,114,105,110,116,32,99,117,114,114,101,110,116,32,100,105,114,0,0,0,0,0,0,0,32,34,34,0,0,0,0,0,32,37,102,0,0,0,0,0,32,34,34,44,0,0,0,0,10,72,109,109,109,109,46,46,46,46,32,83,117,109,32,111,102,32,115,113,117,97,114,101,100,32,114,101,115,105,100,117,97,108,115,32,105,115,32,122,101,114,111,46,32,67,97,110,39,116,32,99,111,109,112,117,116,101,32,101,114,114,111,114,115,46,10,10,0,0,0,0,32,37,102,44,0,0,0,0,44,32,39,60,66,117,116,116,111,110,62,39,32,61,62,32,91,92,38,103,110,117,112,108,111,116,95,120,121,44,32,37,102,44,32,37,102,44,32,37,102,44,32,37,102,44,32,37,102,44,32,37,102,44,32,37,102,44,32,37,102,44,0,0,101,114,102,0,0,0,0,0,112,111,112,32,49,0,0,0,36,99,97,110,32,99,114,101,97,116,101,32,108,105,110,101,32,91,101,120,112,114,32,36,99,109,120,32,42,32,37,100,32,47,49,48,48,48,93,32,91,101,120,112,114,32,36,99,109,121,32,42,32,37,100,32,47,49,48,48,48,93,32,91,101,120,112,114,32,36,99,109,120,32,42,32,37,100,32,47,49,48,48,48,93,32,91,101,120,112,114,32,36,99,109,121,32,42,32,37,100,32,47,49,48,48,48,93,32,45,102,105,108,108,32,37,115,32,45,119,105,100,116,104,32,37,102,32,45,99,97,112,115,116,121,108,101,32,114,111,117,110,100,10,0,0,0,0,0,0,0,0,72,101,108,118,101,116,105,99,97,32,66,111,108,100,32,79,98,108,105,113,117,101,0,0,99,110,36,116,114,112,97,114,97,109,0,0,0,0,0,0,32,32,67,79,71,58,32,32,32,32,32,32,37,115,32,37,115,10,0,0,0,0,0,0,36,99,97,110,45,62,99,114,101,97,116,101,76,105,110,101,40,36,99,109,120,32,42,32,37,100,32,47,32,49,48,48,48,44,32,36,99,109,121,32,42,32,37,100,32,47,32,49,48,48,48,44,32,36,99,109,120,32,42,32,37,100,32,47,32,49,48,48,48,44,32,36,99,109,121,32,42,32,37,100,32,47,32,49,48,48,48,44,32,45,102,105,108,108,32,61,62,32,113,123,37,115,125,44,32,45,119,105,100,116,104,32,61,62,32,37,102,44,32,45,99,97,112,115,116,121,108,101,32,61,62,32,113,123,114,111,117,110,100,125,41,0,0,0,117,36,115,105,110,103,0,0,9,32,32,101,120,112,108,105,99,105,116,32,108,105,115,116,32,40,0,0,0,0,0,0,36,99,97,110,32,98,105,110,100,32,91,10,0,0,0,0,37,115,32,37,115,37,103,44,32,37,115,37,103,44,32,37,115,37,103,44,32,37,115,37,103,10,0,0,0,0,0,0,78,111,116,32,101,110,111,117,103,104,32,99,111,108,117,109,110,115,32,102,111,114,32,116,104,105,115,32,115,116,121,108,101,0,0,0,0,0,0,0,66,117,116,116,111,110,49,0,112,97,108,101,116,116,101,32,122,32,110,111,116,32,112,111,115,115,105,98,108,101,32,104,101,114,101,0,0,0,0,0,36,99,97,110,45,62,98,105,110,100,40,0,0,0,0,0,99,121,97,110,0,0,0,0,60,115,116,100,101,114,114,62,0,0,0,0,0,0,0,0,109,97,103,101,110,116,97,0,50,42,120,32,45,32,49,0,98,114,111,119,110,0,0,0,103,114,101,101,110,0,0,0,37,45,49,53,46,49,53,115,32,61,32,37,45,49,53,103,10,0,0,0,0,0,0,0,98,108,117,101,0,0,0,0,114,101,100,0,0,0,0,0,98,101,115,121,49,0,0,0,103,114,97,121,0,0,0,0,72,101,108,118,101,116,105,99,97,32,66,111,108,100,0,0,99,36,108,105,112,0,0,0,32,32,77,97,120,105,109,117,109,58,32,32,37,115,32,91,37,42,108,100,32,37,108,100,32,93,10,0,0,0,0,0,98,108,97,99,107,0,0,0,116,104,114,117,36,0,0,0,117,110,107,110,111,119,110,32,116,105,99,100,101,102,32,116,121,112,101,32,105,110,32,115,104,111,119,95,116,105,99,100,101,102,40,41,0,0,0,0,101,118,97,108,32,36,99,97,110,32,99,114,101,97,116,101,32,116,101,120,116,32,91,101,120,112,114,32,36,99,109,120,32,42,32,37,100,32,47,49,48,48,48,93,32,91,101,120,112,114,32,36,99,109,121,32,42,32,37,100,32,47,49,48,48,48,93,32,45,116,101,120,116,32,92,123,37,115,92,125,32,45,102,105,108,108,32,37,115,32,45,97,110,99,104,111,114,32,37,115,32,91,101,120,112,114,32,91,105,110,102,111,32,101,120,105,115,116,115,32,102,111,110,116,93,63,34,45,102,111,110,116,32,92,36,102,111,110,116,34,58,123,125,93,10,0,0,0,0,0,0,0,32,112,111,105,110,116,105,110,116,101,114,118,97,108,32,37,100,0,0,0,0,0,0,0,84,111,111,32,109,97,110,121,32,117,115,105,110,103,32,115,112,101,99,115,32,102,111,114,32,116,104,105,115,32,115,116,121,108,101,0,0,0,0,0,67,108,111,115,101,0,0,0,84,75,95,112,117,116,95,116,101,120,116,58,32,113,117,111,116,101,100,32,115,116,114,105,110,103,0,0,0,0,0,0,36,99,97,110,45,62,99,114,101,97,116,101,84,101,120,116,40,36,99,109,120,32,42,32,37,100,32,47,32,49,48,48,48,44,32,36,99,109,121,32,42,32,37,100,32,47,32,49,48,48,48,44,32,45,116,101,120,116,32,61,62,32,113,123,37,115,125,44,32,45,102,105,108,108,32,61,62,32,113,123,37,115,125,44,32,45,97,110,99,104,111,114,32,61,62,32,39,37,115,39,44,32,40,100,101,102,105,110,101,100,32,36,102,111,110,116,32,63,32,40,45,102,111,110,116,32,61,62,32,36,102,111,110,116,41,32,58,32,40,41,41,41,59,10,0,0,0,0,0,0,0,0,60,115,116,100,111,117,116,62,0,0,0,0,0,0,0,0,99,101,110,116,101,114,0,0,50,32,109,117,108,32,49,32,115,117,98,0,0,0,0,0,110,101,119,32,112,97,114,97,109,101,116,101,114,32,102,105,108,101,32,37,115,32,99,111,117,108,100,32,110,111,116,32,98,101,32,99,114,101,97,116,101,100,0,0,0,0,0,0,93,10,0,0,0,0,0,0,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,32,10,10,0,0,0,0,0,0,32,45,115,105,122,101,32,37,100,0,0,0,0,0,0,0,115,101,116,32,102,111,110,116,32,91,102,111,110,116,32,99,114,101,97,116,101,32,45,102,97,109,105,108,121,32,37,115,0,0,0,0,0,0,0,0,98,101,115,121,48,0,0,0,41,59,10,125,10,0,0,0,72,101,108,118,101,116,105,99,97,32,79,98,108,105,113,117,101,0,0,0,0,0,0,0,99,108,36,97,98,101,108,0,32,32,77,105,110,105,109,117,109,58,32,32,37,115,32,91,37,42,108,100,32,37,108,100,32,93,10,0,0,0,0,0,44,32,45,115,105,122,101,32,61,62,32,37,100,0,0,0,101,118,36,101,114,121,0,0,32,32,110,111,32,97,117,116,111,45,103,101,110,101,114,97,116,101,100,32,116,105,99,115,10,0,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,39,91,39,32,111,114,32,39,114,101,115,116,111,114,101,39,0,0,0,0,0,0,105,102,32,40,36,99,97,110,45,62,99,97,110,40,39,102,111,110,116,67,114,101,97,116,101,39,41,41,32,123,10,36,102,111,110,116,32,61,32,36,99,97,110,45,62,102,111,110,116,67,114,101,97,116,101,40,45,102,97,109,105,108,121,32,61,62,32,113,123,37,115,125,0,0,0,0,0,0,0,0,32,112,111,105,110,116,115,105,122,101,32,37,46,51,102,0,118,97,114,99,111,108,111,114,32,97,114,114,97,121,0,0,70,49,50,0,0,0,0,0,111,110,108,121,32,116,99,32,108,116,32,60,110,62,32,112,111,115,115,105,98,108,101,32,104,101,114,101,0,0,0,0,99,97,116,99,104,32,123,117,110,115,101,116,32,36,102,111,110,116,125,10,0,0,0,0,117,110,100,101,102,32,36,102,111,110,116,59,10,0,0,0,110,111,36,114,111,116,97,116,101,0,0,0,0,0,0,0,50,42,120,32,45,32,48,46,53,0,0,0,0,0,0,0,114,111,116,36,97,116,101,0,9,108,111,97,100,112,97,116,104,32,105,115,32,101,109,112,116,121,10,0,0,0,0,0,115,105,36,122,101,0,0,0,70,105,110,97,108,32,115,101,116,32,111,102,32,112,97,114,97,109,101,116,101,114,115,32,10,0,0,0,0,0,0,0,114,36,111,109,97,110,0,0,37,48,42,100,0,0,0,0,99,36,111,117,114,105,101,114,0,0,0,0,0,0,0,0,98,101,115,106,49,0,0,0,32,110,111,114,111,116,97,116,101,0,0,0,0,0,0,0,72,101,108,118,101,116,105,99,97,0,0,0,0,0,0,0,98,111,120,36,119,105,100,116,104,0,0,0,0,0,0,0,32,32,83,117,109,32,83,113,46,58,32,32,37,115,10,0,115,105,122,101,32,37,46,50,102,105,110,44,32,37,46,50,102,105,110,32,0,0,0,0,105,36,110,100,101,120,0,0,32,117,110,116,105,108,32,0,115,105,122,101,32,37,46,50,102,99,109,44,32,37,46,50,102,99,109,32,0,0,0,0,32,112,111,105,110,116,115,105,122,101,32,100,101,102,97,117,108,116,0,0,0,0,0,0,65,108,108,32,112,111,105,110,116,115,32,105,110,32,104,105,115,116,111,103,114,97,109,32,85,78,68,69,70,73,78,69,68,0,0,0,0,0,0,0,70,49,49,0,0,0,0,0,105,108,108,101,103,97,108,32,108,105,110,101,116,121,112,101,0,0,0,0,0,0,0,0,114,111,109,97,110,0,0,0,99,111,117,114,105,101,114,0,99,112,56,53,50,0,0,0,37,115,32,37,100,0,0,0,49,32,121,50,0,0,0,0,50,32,109,117,108,32,48,46,53,32,115,117,98,0,0,0,40,100,111,99,117,109,101,110,116,32,115,112,101,99,105,102,105,99,32,102,111,110,116,41,0,0,0,0,0,0,0,0,73,110,32,116,104,105,115,32,100,101,103,101,110,101,114,97,116,101,32,99,97,115,101,44,32,97,108,108,32,101,114,114,111,114,115,32,97,114,101,32,122,101,114,111,32,98,121,32,100,101,102,105,110,105,116,105,111,110,46,10,10,0,0,0,99,109,116,116,0,0,0,0,37,37,32,71,78,85,80,76,79,84,58,32,76,97,84,101,88,32,112,105,99,116,117,114,101,10,92,115,101,116,108,101,110,103,116,104,123,92,117,110,105,116,108,101,110,103,116,104,125,123,37,102,112,116,125,10,92,105,102,120,92,112,108,111,116,112,111,105,110,116,92,117,110,100,101,102,105,110,101,100,92,110,101,119,115,97,118,101,98,111,120,123,92,112,108,111,116,112,111,105,110,116,125,92,102,105,10,0,0,0,0,0,37,115,58,37,100,32,111,111,111,112,115,58,32,85,110,107,110,111,119,110,32,99,111,108,111,114,32,109,111,100,101,108,32,39,37,99,39,10,0,0,98,101,115,106,48,0,0,0,92,102,111,110,116,92,103,110,117,112,108,111,116,61,37,115,49,48,32,97,116,32,37,100,112,116,10,92,103,110,117,112,108,111,116,10,0,0,0,0,67,111,117,114,105,101,114,32,66,111,108,100,32,79,98,108,105,113,117,101,0,0,0,0,98,111,114,36,100,101,114,0,32,32,83,117,109,58,32,32,32,32,32,32,37,115,10,0,101,118,97,108,36,117,97,116,101,0,0,0,0,0,0,0,100,111,99,0,0,0,0,0,110,111,110,117,110,105,36,102,111,114,109,0,0,0,0,0,32,115,101,99,115,0,0,0,114,101,36,115,116,111,114,101,0,0,0,0,0,0,0,0,83,116,97,116,115,32,99,111,109,109,97,110,100,32,110,111,116,32,97,118,97,105,108,97,98,108,101,32,119,105,116,104,32,108,111,103,115,99,97,108,101,32,97,99,116,105,118,101,0,0,0,0,0,0,0,0,92,98,101,103,105,110,123,112,105,99,116,117,114,101,125,40,37,100,44,37,100,41,40,48,44,48,41,10,0,0,0,0,32,112,111,105,110,116,115,105,122,101,32,118,97,114,105,97,98,108,101,0,0,0,0,0,115,116,97,99,107,104,101,105,103,104,116,32,97,114,114,97,121,0,0,0,0,0,0,0,70,49,48,0,0,0,0,0,101,120,112,101,99,116,101,100,32,108,105,110,101,116,121,112,101,0,0,0,0,0,0,0,92,109,117,108,116,105,112,117,116,40,37,117,44,37,117,41,40,37,46,51,102,44,37,46,51,102,41,123,37,117,125,123,37,115,125,10,0,0,0,0,92,112,117,116,40,37,46,50,102,44,37,46,50,102,41,123,37,115,125,10,0,0,0,0,92,115,112,101,99,105,97,108,123,101,109,58,108,105,110,101,119,105,100,116,104,32,37,46,49,102,112,116,125,37,37,10,0,0,0,0,0,0,0,0,50,42,120,0,0,0,0,0,92,115,98,111,120,123,92,112,108,111,116,112,111,105,110,116,125,123,92,114,117,108,101,91,37,46,51,102,112,116,93,123,37,46,51,102,112,116,125,123,37,46,51,102,112,116,125,125,37,37,10,0,0,0,0,0,123,92,114,111,116,97,116,101,98,111,120,123,37,100,125,0,84,101,114,109,105,110,97,108,32,111,112,116,105,111,110,115,32,97,114,101,32,39,37,115,39,10,0,0,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,115,112,97,100,101,115,117,105,116,36,125,0,0,0,0,0,10,69,120,97,99,116,108,121,32,97,115,32,109,97,110,121,32,100,97,116,97,32,112,111,105,110,116,115,32,97,115,32,116,104,101,114,101,32,97,114,101,32,112,97,114,97,109,101,116,101,114,115,46,10,0,0,103,101,116,95,111,102,102,115,101,116,115,0,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,104,101,97,114,116,115,117,105,116,36,125,0,0,0,0,0,108,111,103,0,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,98,108,97,99,107,108,111,122,101,110,103,101,36,125,0,0,67,111,117,114,105,101,114,32,66,111,108,100,0,0,0,0,32,32,83,116,100,32,68,101,118,58,32,32,37,115,10,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,108,111,122,101,110,103,101,36,125,0,0,0,0,0,0,0,32,98,121,32,37,103,37,115,0,0,0,0,0,0,0,0,105,110,116,101,103,101,114,32,111,118,101,114,102,108,111,119,59,32,99,104,97,110,103,105,110,103,32,116,111,32,102,108,111,97,116,105,110,103,32,112,111,105,110,116,0,0,0,0,101,120,112,101,99,116,105,110,103,32,114,105,103,104,116,32,112,97,114,101,110,116,104,101,115,105,115,32,41,0,0,0,101,104,102,0,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,98,108,97,99,107,116,114,105,97,110,103,108,101,100,111,119,110,36,125,0,0,0,0,0,32,112,111,105,110,116,116,121,112,101,32,37,100,0,0,0,98,111,120,112,108,111,116,32,104,97,115,32,117,110,100,101,102,105,110,101,100,32,120,32,99,111,111,114,100,105,110,97,116,101,0,0,0,0,0,0,70,57,0,0,0,0,0,0,101,120,112,101,99,116,101,100,32,99,111,108,111,114,115,112,101,99,0,0,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,116,114,105,97,110,103,108,101,100,111,119,110,36,125,0,0,99,111,110,116,111,117,114,32,100,50,121,0,0,0,0,0])
+.concat([92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,98,108,97,99,107,116,114,105,97,110,103,108,101,36,125,0,115,101,116,32,37,115,114,97,110,103,101,32,91,32,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,98,117,108,108,101,116,36,125,0,0,0,0,0,0,0,0,98,108,45,105,110,116,101,114,112,32,97,108,111,110,103,32,115,99,97,110,0,0,0,0,112,114,101,118,105,111,117,115,32,112,97,114,97,109,101,116,114,105,99,32,102,117,110,99,116,105,111,110,32,110,111,116,32,102,117,108,108,121,32,115,112,101,99,105,102,105,101,100,0,0,0,0,0,0,0,0,50,32,109,117,108,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,99,105,114,99,36,125,0,0,116,101,120,116,95,108,97,98,101,108,32,108,105,115,116,32,119,97,115,32,110,111,116,32,105,110,105,116,105,97,108,105,122,101,100,0,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,98,108,97,99,107,115,113,117,97,114,101,36,125,0,0,0,45,45,112,101,114,115,105,115,116,0,0,0,0,0,0,0,97,98,115,46,32,99,104,97,110,103,101,32,100,117,114,105,110,103,32,108,97,115,116,32,105,116,101,114,97,116,105,111,110,32,58,32,37,103,10,10,0,0,0,0,0,0,0,0,92,114,97,105,115,101,98,111,120,123,45,46,56,112,116,125,123,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,66,111,120,36,125,125,0,87,97,114,110,105,110,103,32,58,32,117,100,102,32,115,104,97,100,111,119,101,100,32,98,121,32,98,117,105,108,116,45,105,110,32,102,117,110,99,116,105,111,110,32,111,102,32,116,104,101,32,115,97,109,101,32,110,97,109,101,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,97,115,116,36,125,0,0,0,108,111,103,49,48,0,0,0,92,114,117,108,101,123,49,112,116,125,123,49,112,116,125,0,67,111,117,114,105,101,114,32,79,98,108,105,113,117,101,0,98,36,97,114,115,0,0,0,32,32,77,101,97,110,58,32,32,32,32,32,37,115,10,0,77,79,85,83,69,95,82,85,76,69,82,95,89,0,0,0,92,112,117,116,40,37,100,44,37,100,41,123,92,114,117,108,101,123,37,103,112,116,125,123,37,103,112,116,125,125,10,0,37,35,103,0,0,0,0,0,105,110,99,114,101,109,101,110,116,32,109,117,115,116,32,98,101,32,110,101,103,97,116,105,118,101,0,0,0,0,0,0,37,37,32,71,78,85,80,76,79,84,58,32,76,97,84,101,88,32,112,105,99,116,117,114,101,32,119,105,116,104,32,101,109,116,101,120,32,115,112,101,99,105,97,108,115,10,92,115,101,116,108,101,110,103,116,104,123,92,117,110,105,116,108,101,110,103,116,104,125,123,37,102,112,116,125,10,92,105,102,120,92,112,108,111,116,112,111,105,110,116,92,117,110,100,101,102,105,110,101,100,92,110,101,119,115,97,118,101,98,111,120,123,92,112,108,111,116,112,111,105,110,116,125,92,102,105,10,0,32,108,105,110,101,119,105,100,116,104,32,37,46,51,102,0,98,111,120,112,108,111,116,32,112,101,114,109,117,116,97,116,105,111,110,115,32,97,114,114,97,121,0,0,0,0,0,0,115,116,114,111,107,101,32,103,115,97,118,101,9,37,37,32,100,114,97,119,32,103,114,97,121,32,115,99,97,108,101,32,115,109,111,111,116,104,32,98,111,120,10,109,97,120,99,111,108,111,114,115,32,48,32,103,116,32,123,47,105,109,97,120,32,109,97,120,99,111,108,111,114,115,32,100,101,102,125,32,123,47,105,109,97,120,32,49,48,50,52,32,100,101,102,125,32,105,102,101,108,115,101,10,0,0,0,0,0,0,0,0,115,112,108,105,110,101,32,115,111,108,117,116,105,111,110,32,118,101,99,116,111,114,0,0,70,56,0,0,0,0,0,0,92,101,110,100,71,78,85,80,76,79,84,112,105,99,116,117,114,101,10,92,101,110,100,103,114,111,117,112,10,92,101,110,100,105,110,112,117,116,10,0,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,102,95,115,117,109,32,99,111,117,108,100,32,110,111,116,32,97,99,99,101,115,115,32,105,116,101,114,97,116,105,111,110,32,118,97,114,105,97,98,108,101,46,0,0,0,0,0,0,92,101,110,100,123,112,105,99,116,117,114,101,125,37,10,92,101,110,100,103,114,111,117,112,10,92,101,110,100,105,110,112,117,116,10,0,0,0,0,0,92,101,110,100,123,100,111,99,117,109,101,110,116,125,10,0,124,50,42,120,32,45,32,48,46,53,124,0,0,0,0,0,32,32,32,32,92,103,112,108,98,97,99,107,116,101,120,116,10,32,32,32,32,92,112,117,116,40,48,44,48,41,123,92,105,110,99,108,117,100,101,103,114,97,112,104,105,99,115,123,37,115,125,125,37,37,10,32,32,32,32,92,103,112,108,102,114,111,110,116,116,101,120,116,10,32,32,92,101,110,100,123,112,105,99,116,117,114,101,125,37,37,10,92,101,110,100,103,114,111,117,112,10,0,0,0,114,101,108,46,32,99,104,97,110,103,101,32,100,117,114,105,110,103,32,108,97,115,116,32,105,116,101,114,97,116,105,111,110,32,58,32,37,103,10,10,0,0,0,0,0,0,0,0,92,114,111,116,97,116,101,98,111,120,123,37,100,125,123,0,32,32,32,32,32,32,92,112,117,116,40,37,100,44,37,100,41,123,0,0,0,0,0,0,32,32,32,32,32,32,92,99,111,108,111,114,103,114,97,121,123,37,115,125,37,37,10,0,67,111,117,114,105,101,114,0,97,117,36,116,111,115,99,97,108,101,0,0,0,0,0,0,42,32,67,79,76,85,77,78,58,32,10,0,0,0,0,0,32,32,32,32,32,32,92,99,111,108,111,114,123,119,104,105,116,101,125,37,37,10,0,0,32,102,114,111,109,32,0,0,105,110,99,114,101,109,101,110,116,32,109,117,115,116,32,98,101,32,112,111,115,105,116,105,118,101,0,0,0,0,0,0,32,32,32,32,32,32,92,99,111,108,111,114,123,98,108,97,99,107,125,37,37,10,0,0,32,118,97,114,105,97,98,108,101,0,0,0,0,0,0,0,98,111,120,112,108,111,116,32,108,97,98,101,108,115,32,97,114,114,97,121,0,0,0,0,70,55,0,0,0,0,0,0,114,103,98,0,0,0,0,0,119,98,97,48,49,50,51,52,53,54,55,56,0,0,0,0,32,32,32,32,32,32,92,99,115,110,97,109,101,32,76,84,37,99,92,101,110,100,99,115,110,97,109,101,37,37,10,0,32,32,32,32,32,32,92,99,111,108,111,114,114,103,98,123,37,51,46,50,102,44,37,51,46,50,102,44,37,51,46,50,102,125,37,37,10,0,0,0,50,32,109,117,108,32,48,46,53,32,115,117,98,32,97,98,115,0,0,0,0,0,0,0,37,37,112,109,51,100,95,109,97,112,95,101,110,100,10,0,37,37,112,109,51,100,95,109,97,112,95,98,101,103,105,110,10,0,0,0,0,0,0,0,9,32,32,66,97,99,107,32,115,105,100,101,32,111,102,32,115,117,114,102,97,99,101,115,32,104,97,115,32,108,105,110,101,115,116,121,108,101,32,111,102,102,115,101,116,32,111,102,32,37,100,10,9,32,32,66,105,116,45,77,97,115,107,32,111,102,32,76,105,110,101,115,32,116,111,32,100,114,97,119,32,105,110,32,101,97,99,104,32,116,114,105,97,110,103,108,101,32,105,115,32,37,108,100,10,9,32,32,37,100,58,32,0,0,0,0,0,0,0,0,102,105,110,97,108,32,115,117,109,32,111,102,32,115,113,117,97,114,101,115,32,111,102,32,114,101,115,105,100,117,97,108,115,32,58,32,37,103,10,0,32,32,32,32,92,103,112,108,103,97,100,100,116,111,109,97,99,114,111,92,103,112,108,102,114,111,110,116,116,101,120,116,123,37,10,0,0,0,0,0,32,32,32,32,92,103,112,108,103,97,100,100,116,111,109,97,99,114,111,92,103,112,108,98,97,99,107,116,101,120,116,123,37,10,0,0,0,0,0,0,10,83,117,98,116,111,112,105,99,115,32,97,118,97,105,108,97,98,108,101,32,102,111,114,32,0,0,0,0,0,0,0,32,32,32,32,125,37,10,0,66,111,111,107,109,97,110,32,68,101,109,105,32,73,116,97,108,105,99,0,0,0,0,0,97,114,36,114,111,119,0,0,42,32,77,65,84,82,73,88,58,32,91,37,100,32,88,32,37,100,93,32,10,0,0,0,125,37,10,0,0,0,0,0,78,111,32,112,114,101,118,105,111,117,115,32,102,105,108,101,110,97,109,101,0,0,0,0,32,32,115,101,114,105,101,115,0,0,0,0,0,0,0,0,37,10,32,32,92,115,112,101,99,105,97,108,123,112,115,58,32,99,117,114,114,101,110,116,112,111,105,110,116,32,103,114,101,115,116,111,114,101,32,109,111,118,101,116,111,125,37,10,32,32,0,0,0,0,0,0,70,54,0,0,0,0,0,0,92,114,106,117,115,116,123,92,115,116,114,117,116,123,125,37,115,125,0,0,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,91,114,93,123,92,115,116,114,117,116,123,125,37,115,125,0,0,0,0,92,99,106,117,115,116,123,92,115,116,114,117,116,123,125,37,115,125,0,0,0,0,0,0,121,116,105,99,115,0,0,0,52,120,59,49,59,45,50,120,43,49,46,56,52,59,120,47,48,46,48,56,45,49,49,46,53,0,0,0,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,92,115,116,114,117,116,123,125,37,115,125,0,0,0,0,0,0,0,92,108,106,117,115,116,123,92,115,116,114,117,116,123,125,37,115,125,0,0,0,0,0,0,10,65,102,116,101,114,32,37,100,32,105,116,101,114,97,116,105,111,110,115,32,116,104,101,32,102,105,116,32,99,111,110,118,101,114,103,101,100,46,10,0,0,0,0,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,91,108,93,123,92,115,116,114,117,116,123,125,37,115,125,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,37,115,0,32,32,87,97,114,110,105,110,103,58,32,83,105,110,103,108,101,32,105,115,111,108,105,110,101,32,40,115,99,97,110,41,32,105,115,32,110,111,116,32,101,110,111,117,103,104,32,102,111,114,32,97,32,112,109,51,100,32,112,108,111,116,46,10,9,32,32,32,72,105,110,116,58,32,77,105,115,115,105,110,103,32,98,108,97,110,107,32,108,105,110,101,115,32,105,110,32,116,104,101,32,100,97,116,97,32,102,105,108,101,63,32,83,101,101,32,39,104,101,108,112,32,112,109,51,100,39,32,97,110,100,32,70,65,81,46,10,0,0,0,0,0,0,0,115,103,110,0,0,0,0,0,37,37,10,32,32,92,115,112,101,99,105,97,108,123,112,115,58,32,103,115,97,118,101,32,99,117,114,114,101,110,116,112,111,105,110,116,32,99,117,114,114,101,110,116,112,111,105,110,116,32,116,114,97,110,115,108,97,116,101,10,37,100,32,114,111,116,97,116,101,32,110,101,103,32,101,120,99,104,32,110,101,103,32,101,120,99,104,32,116,114,97,110,115,108,97,116,101,125,37,37,10,32,32,0,66,111,111,107,109,97,110,32,68,101,109,105,0,0,0,0,97,110,36,103,108,101,115,0,109,97,120,95,105,110,100,101,120,0,0,0,0,0,0,0,32,32,92,112,117,116,40,37,100,44,37,100,41,123,0,0,32,32,68,97,121,115,32,99,111,109,112,117,116,101,100,32,97,117,116,111,109,97,116,105,99,97,108,108,121,10,0,0,92,102,111,110,116,115,105,122,101,123,37,103,125,123,92,98,97,115,101,108,105,110,101,115,107,105,112,125,92,115,101,108,101,99,116,102,111,110,116,10,0,0,0,0,0,0,0,0,32,108,105,110,101,99,111,108,111,114,0,0,0,0,0,0,120,112,45,62,112,95,99,111,117,110,116,32,61,61,32,121,112,45,62,112,95,99,111,117,110,116,0,0,0,0,0,0,70,53,0,0,0,0,0,0,32,32,125,125,37,10,0,0,32,115,105,122,101,32,37,46,50,102,105,110,44,32,37,46,50,102,105,110,32,0,0,0,32,115,105,122,101,32,37,46,50,102,99,109,44,32,37,46,50,102,99,109,32,0,0,0,32,59,10,0,0,0,0,0,100,117,112,32,48,46,52,50,32,108,101,32,123,52,32,109,117,108,125,32,123,100,117,112,32,48,46,57,50,32,108,101,32,123,45,50,32,109,117,108,32,49,46,56,52,32,97,100,100,125,32,123,48,46,48,56,32,100,105,118,32,49,49,46,53,32,115,117,98,125,32,105,102,101,108,115,101,125,32,105,102,101,108,115,101,0,0,0,32,37,100,0,0,0,0,0,32,116,105,110,121,0,0,0,10,84,104,101,32,102,105,116,32,119,97,115,32,115,116,111,112,112,101,100,32,98,121,32,116,104,101,32,117,115,101,114,32,97,102,116,101,114,32,37,100,32,105,116,101,114,97,116,105,111,110,115,46,10,0,0,32,115,109,97,108,108,0,0,32,114,111,116,97,116,101,0,97,98,115,0,0,0,0,0,48,46,53,0,0,0,0,0,32,100,97,115,104,101,100,0,66,111,111,107,109,97,110,32,76,105,103,104,116,32,73,116,97,108,105,99,0,0,0,0,97,116,0,0,0,0,0,0,109,105,110,95,105,110,100,101,120,0,0,0,0,0,0,0,32,99,111,108,111,114,0,0,109,97,120,95,117,115,105,110,103,32,60,61,32,77,65,88,68,65,84,65,67,79,76,83,0,0,0,0,0,0,0,0,32,32,77,111,110,116,104,115,32,99,111,109,112,117,116,101,100,32,97,117,116,111,109,97,116,105,99,97,108,108,121,10,0,0,0,0,0,0,0,0,100,36,116,105,99,115,0,0,37,115,37,115,37,115,37,115,0,0,0,0,0,0,0,0,32,108,105,110,101,116,121,112,101,32,37,100,0,0,0,0,70,52,0,0,0,0,0,0,112,36,97,116,116,101,114,110,0,0,0,0,0,0,0,0,117,110,114,101,99,111,103,110,105,122,101,100,32,111,112,116,105,111,110,0,0,0,0,0,102,111,110,116,32,115,105,122,101,32,111,117,116,32,111,102,32,98,111,117,110,100,115,32,91,49,46,46,49,48,48,93,0,0,0,0,0,0,0,0,116,36,105,110,121,0,0,0,115,36,109,97,108,108,0,0,50,42,120,45,48,46,56,52,0,0,0,0,0,0,0,0,114,36,111,116,97,116,101,0,10,77,97,120,105,109,117,109,32,105,116,101,114,97,116,105,111,110,32,99,111,117,110,116,32,40,37,100,41,32,114,101,97,99,104,101,100,46,32,70,105,116,32,115,116,111,112,112,101,100,46,10,0,0,0,0,37,37,32,71,78,85,80,76,79,84,58,32,76,97,84,101,88,32,112,105,99,116,117,114,101,32,117,115,105,110,103,32,69,69,80,73,67,32,109,97,99,114,111,115,10,92,115,101,116,108,101,110,103,116,104,123,92,117,110,105,116,108,101,110,103,116,104,125,123,37,102,112,116,125,10,0,0,0,0,0,92,102,111,111,116,110,111,116,101,115,105,122,101,10,0,0,105,110,116,0,0,0,0,0,92,102,111,110,116,115,105,122,101,123,37,100,125,123,37,103,125,92,115,101,108,101,99,116,102,111,110,116,10,0,0,0,66,111,111,107,109,97,110,32,76,105,103,104,116,0,0,0,97,99,36,116,105,111,110,95,116,97,98,108,101,0,0,0,99,111,103,95,121,0,0,0,92,98,101,103,105,110,123,112,105,99,116,117,114,101,125,40,37,100,44,37,100,41,40,37,100,44,37,100,41,10,0,0,32,32,105,110,116,101,114,118,97,108,115,32,99,111,109,112,117,116,101,100,32,97,117,116,111,109,97,116,105,99,97,108,108,121,10,0,0,0,0,0,109,36,116,105,99,115,0,0,92,116,104,105,110,108,105,110,101,115,32,92,100,111,116,116,101,100,108,105,110,101,123,50,48,125,0,0,0,0,0,0,45,45,45,101,114,114,111,114,33,45,45,45,10,0,0,0,117,115,101,115,95,97,120,105,115,91,83,69,67,79,78,68,95,89,95,65,88,73,83,93,0,0,0,0,0,0,0,0,70,51,0,0,0,0,0,0,92,116,104,105,110,108,105,110,101,115,32,92,100,97,115,104,108,105,110,101,91,54,48,93,123,50,48,125,0,0,0,0,92,116,104,105,110,108,105,110,101,115,32,92,100,111,116,116,101,100,108,105,110,101,123,49,48,125,0,0,0,0,0,0,92,116,104,105,110,108,105,110,101,115,32,92,100,97,115,104,108,105,110,101,91,57,48,93,123,49,48,125,0,0,0,0,50,32,109,117,108,32,48,46,56,52,32,115,117,98,0,0,92,84,104,105,99,107,108,105,110,101,115,32,92,112,97,116,104,0,0,0,0,0,0,0,92,116,104,105,110,108,105,110,101,115,32,92,112,97,116,104,0,0,0,0,0,0,0,0,70,73,84,95,67,79,78,86,69,82,71,69,68,0,0,0,92,116,104,105,110,108,105,110,101,115,32,92,100,114,97,119,108,105,110,101,91,45,53,48,93,0,0,0,0,0,0,0,92,116,104,105,99,107,108,105,110,101,115,32,92,112,97,116,104,0,0,0,0,0,0,0,69,108,108,105,112,116,105,99,80,105,0,0,0,0,0,0,40,37,117,44,37,117,41,0,65,118,97,110,116,71,97,114,100,101,32,68,101,109,105,32,79,98,108,105,113,117,101,0,97,36,108,108,0,0,0,0,99,111,103,95,120,0,0,0,10,37,115,40,37,117,44,37,117,41,0,0,0,0,0,0,102,108,111,97,116,54,52,0,37,115,40,37,117,44,37,117,41,0,0,0,0,0,0,0,101,108,108,105,112,115,101,115,10,0,0,0,0,0,0,0,117,115,101,115,95,97,120,105,115,91,70,73,82,83,84,95,89,95,65,88,73,83,93,0,70,50,0,0,0,0,0,0,101,36,109,112,116,121,0,0,92,99,111,108,111,114,123,121,101,108,108,111,119,125,10,0,92,99,111,108,111,114,123,99,121,97,110,125,10,0,0,0,112,97,117,115,101,100,0,0,92,99,111,108,111,114,123,109,97,103,101,110,116,97,125,10,0,0,0,0,0,0,0,0,92,99,111,108,111,114,123,103,114,101,101,110,125,10,0,0,120,47,48,46,51,50,45,48,46,55,56,49,50,53,0,0,9,108,111,97,100,112,97,116,104,32,102,114,111,109,32,71,78,85,80,76,79,84,95,76,73,66,32,105,115,32,0,0,92,99,111,108,111,114,123,98,108,117,101,125,10,0,0,0,103,112,95,115,116,114,97,100,100,0,0,0,0,0,0,0,70,73,84,58,32,101,114,114,111,114,32,111,99,99,117,114,114,101,100,32,100,117,114,105,110,103,32,102,105,116,0,0,92,99,111,108,111,114,123,114,101,100,125,10,0,0,0,0,37,56,46,51,103,0,0,0,116,105,109,101,32,118,97,108,117,101,32,111,117,116,32,111,102,32,114,97,110,103,101,0,92,99,111,108,111,114,123,98,108,97,99,107,125,10,0,0,69,108,108,105,112,116,105,99,69,0,0,0,0,0,0,0,125,125,125,10,0,0,0,0,65,118,97,110,116,71,97,114,100,101,32,68,101,109,105,0,118,36,97,114,105,97,98,108,101,115,0,0,0,0,0,0,105,110,100,101,120,95,109,97,120,95,121,0,0,0,0,0,37,99,92,92,0,0,0,0,102,108,111,97,116,51,50,0,32,32,32,32,111,102,102,115,101,116,32,0,0,0,0,0,97,117,36,116,111,102,114,101,113,0,0,0,0,0,0,0,123,92,109,97,107,101,98,111,120,40,48,44,48,41,91,108,116,93,123,92,115,104,111,114,116,115,116,97,99,107,123,0,99,105,114,99,108,101,115,10,0,0,0,0,0,0,0,0,97,108,108,32,112,111,105,110,116,115,32,121,50,32,118,97,108,117,101,32,117,110,100,101,102,105,110,101,100,33,0,0,70,49,0,0,0,0,0,0,116,114,97,110,115,36,112,97,114,101,110,116,0,0,0,0,123,92,109,97,107,101,98,111,120,40,48,44,48,41,91,108,93,123,92,115,104,111,114,116,115,116,97,99,107,123,0,0,123,92,109,97,107,101,98,111,120,40,48,44,48,41,91,108,98,93,123,92,115,104,111,114,116,115,116,97,99,107,123,0,77,111,117,115,105,110,103,32,110,111,116,32,97,99,116,105,118,101,0,0,0,0,0,0,99,112,56,53,48,0,0,0,37,115,125,125,125,10,0,0,32,120,108,111,119,32,120,104,105,103,104,32,121,108,111,119,32,121,104,105,103,104,0,0,123,92,109,97,107,101,98,111,120,40,48,44,48,41,91,108,116,93,123,92,114,111,116,97,116,101,98,111,120,91,111,114,105,103,105,110,61,99,93,123,57,48,125,123,0,0,0,0,48,46,51,50,32,100,105,118,32,48,46,55,56,49,50,53,32,115,117,98,0,0,0,0,123,92,109,97,107,101,98,111,120,40,48,44,48,41,91,108,93,123,92,114,111,116,97,116,101,98,111,120,91,111,114,105,103,105,110,61,99,93,123,57,48,125,123,0,0,0,0,0,108,111,103,102,105,108,101,0,123,92,109,97,107,101,98,111,120,40,48,44,48,41,91,108,98,93,123,92,114,111,116,97,116,101,98,111,120,91,111,114,105,103,105,110,61,99,93,123,57,48,125,123,0,0,0,0,37,115,125,125,10,0,0,0,69,108,108,105,112,116,105,99,75,0,0,0,0,0,0,0,123,92,109,97,107,101,98,111,120,40,48,44,48,41,91,114,93,123,0,0,0,0,0,0,65,118,97,110,116,71,97,114,100,101,32,66,111,111,107,32,79,98,108,105,113,117,101,0,116,36,101,114,109,105,110,97,108,0,0,0,0,0,0,0,105,110,100,101,120,95,109,97,120,95,120,0,0,0,0,0,100,111,0,0,0,0,0,0,123,92,109,97,107,101,98,111,120,40,48,44,48,41,123,0,117,105,110,116,54,52,0,0,32,97,110,100,32,97,114,101,32,110,111,116,32,114,111,116,97,116,101,100,44,10,9,0,101,120,112,101,99,116,101,100,32,102,111,114,109,97,116,0,123,92,109,97,107,101,98,111,120,40,48,44,48,41,91,108,93,123,0,0,0,0,0,0,114,103,98,105,109,97,103,101,10,0,0,0,0,0,0,0,97,108,108,32,112,111,105,110,116,115,32,121,32,118,97,108,117,101,32,117,110,100,101,102,105,110,101,100,33,0,0,0,75,80,95,57,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,115,99,114,105,112,116,115,99,114,105,112,116,115,116,121,108,101,92,115,116,97,114,36,125,0,0,0,0,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,115,99,114,105,112,116,115,99,114,105,112,116,115,116,121,108,101,92,116,114,105,97,110,103,108,101,36,125,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,115,99,114,105,112,116,115,99,114,105,112,116,115,116,121,108,101,92,116,105,109,101,115,36,125,0,0,0,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,115,99,114,105,112,116,115,99,114,105,112,116,115,116,121,108,101,92,66,111,120,36,125,0,124,40,51,120,45,50,41,47,50,124,0,0,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,115,99,114,105,112,116,115,99,114,105,112,116,115,116,121,108,101,32,43,36,125,0,0,0,78,111,32,102,105,116,116,97,98,108,101,32,112,97,114,97,109,101,116,101,114,115,33,10,0,0,0,0,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,115,99,114,105,112,116,115,99,114,105,112,116,115,116,121,108,101,92,68,105,97,109,111,110,100,36,125,0,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,115,99,114,105,112,116,115,116,121,108,101,92,115,116,97,114,36,125,0,0,0,0,0,0,116,97,110,104,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,115,99,114,105,112,116,115,116,121,108,101,92,116,114,105,97,110,103,108,101,36,125,0,0,65,118,97,110,116,71,97,114,100,101,32,66,111,111,107,0,115,36,101,116,0,0,0,0,105,110,100,101,120,95,109,105,110,95,121,0,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,115,99,114,105,112,116,115,116,121,108,101,92,116,105,109,101,115,36,125,0,0,0,0,0,105,110,116,54,52,0,0,0,32,105,110,32,50,68,32,109,111,100,101,44,32,116,101,114,109,105,110,97,108,32,112,101,114,109,105,116,116,105,110,103,44,10,9,0,0,0,0,0,99,111,109,36,109,101,110,116,115,99,104,97,114,115,0,0,101,120,112,101,99,116,105,110,103,32,101,120,112,111,110,101,110,116,0,0,0,0,0,0,102,111,114,109,97,116,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,115,99,114,105,112,116,115,116,121,108,101,92,66,111,120,36,125,0,0,0,0,0,0,0,105,109,97,103,101,10,0,0,101,100,102,0,0,0,0,0,117,115,101,115,95,97,120,105,115,91,83,69,67,79,78,68,95,88,95,65,88,73,83,93,0,0,0,0,0,0,0,0,75,80,95,56,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,115,99,114,105,112,116,115,116,121,108,101,32,43,36,125,0,99,111,110,116,111,117,114,32,100,50,120,0,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,115,99,114,105,112,116,115,116,121,108,101,92,68,105,97,109,111,110,100,36,125,0,0,0,35,32,115,101,116,32,111,117,116,112,117,116,10,0,0,0,92,99,105,114,99,108,101,42,123,50,52,125,0,0,0,0,112,109,51,100,95,112,108,111,116,45,62,113,117,97,100,114,97,110,103,108,101,115,0,0,92,99,105,114,99,108,101,42,123,49,56,125,0,0,0,0,49,46,53,32,109,117,108,32,49,32,115,117,98,32,97,98,115,0,0,0,0,0,0,0,92,99,105,114,99,108,101,42,123,49,50,125,0,0,0,0,45,112,101,114,115,105,115,116,0,0,0,0,0,0,0,0,78,117,109,98,101,114,32,111,102,32,100,97,116,97,32,112,111,105,110,116,115,32,115,109,97,108,108,101,114,32,116,104,97,110,32,110,117,109,98,101,114,32,111,102,32,112,97,114,97,109,101,116,101,114,115,0,92,99,105,114,99,108,101,123,50,52,125,0,0,0,0,0,92,99,105,114,99,108,101,123,49,56,125,0,0,0,0,0,99,111,115,104,0,0,0,0,92,99,105,114,99,108,101,123,49,50,125,0,0,0,0,0,84,105,109,101,115,32,66,111,108,100,32,73,116,97,108,105,99,0,0,0,0,0,0,0,102,36,117,110,99,116,105,111,110,115,0,0,0,0,0,0,105,110,100,101,120,95,109,105,110,95,120,0,0,0,0,0,84,111,111,32,109,97,110,121,32,108,101,118,101,108,115,32,111,102,32,110,101,115,116,101,100,32,109,97,99,114,111,115,0,0,0,0,0,0,0,0,77,79,85,83,69,95,82,85,76,69,82,95,88,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,115,116,97,114,36,125,0,0,117,105,110,116,51,50,0,0,32,98,121,32,37,100,0,0,101,120,112,101,99,116,101,100,32,102,111,110,116,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,116,114,105,97,110,103,108,101,36,125,0,0,0,0,0,0,108,97,98,101,108,115,10,0,99,108,111,115,101,0,0,0,37,105,0,0,0,0,0,0,117,115,101,115,95,97,120,105,115,91,70,73,82,83,84,95,88,95,65,88,73,83,93,0,83,105,110,103,117,108,97,114,32,109,97,116,114,105,120,32,105,110,32,76,85,45,68,69,67,79,77,80,0,0,0,0,115,109,111,111,116,104,95,98,111,120,0,0,0,0,0,0,115,112,108,105,110,101,32,114,105,103,104,116,32,115,105,100,101,0,0,0,0,0,0,0,75,80,95,55,0,0,0,0,100,117,112,108,105,99,97,116,101,100,32,97,114,103,117,109,101,110,116,115,32,105,110,32,115,116,121,108,101,32,115,112,101,99,105,102,105,99,97,116,105,111,110,0,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,116,105,109,101,115,36,125,0,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,102,95,115,117,109,32,101,120,112,101,99,116,115,32,97,114,103,117,109,101,110,116,32,40,118,97,114,110,97,109,101,41,32,111,102,32,116,121,112,101,32,115,116,114,105,110,103,46,0,0,0,0,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,66,111,120,36,125,0,0,0,37,115,32,97,120,105,115,32,114,97,110,103,101,32,117,110,100,101,102,105,110,101,100,32,111,114,32,111,118,101,114,102,108,111,119,0,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,43,36,125,0,0,0,0,0,0,92,109,97,107,101,98,111,120,40,48,44,48,41,123,36,92,68,105,97,109,111,110,100,36,125,0,0,0,0,0,0,0,124,40,51,120,45,49,41,47,50,124,0,0,0,0,0,0,92,112,117,116,40,37,100,44,37,100,41,123,37,115,125,10,0,0,0,0,0,0,0,0,37,100,32,37,100,32,37,102,0,0,0,0,0,0,0,0,92,101,110,100,123,112,105,99,116,117,114,101,125,10,0,0,115,105,110,104,0,0,0,0,92,102,111,111,116,110,111,116,101,115,105,122,101,37,10,0,84,105,109,101,115,32,66,111,108,100,0,0,0,0,0,0,104,97,110,110,0,0,0,0,37,115,37,115,9,37,108,100,10,0,0,0,0,0,0,0,116,114,105,109,32,116,111,112,32,38,32,98,111,116,116,111,109,32,109,97,114,103,105,110,115,0,0,0,0,0,0,0,105,110,116,51,50,0,0,0,32,114,111,116,97,116,101,100,0,0,0,0,0,0,0,0,116,114,105,109,32,98,111,116,116,111,109,32,109,97,114,103,105,110,0,0,0,0,0,0,112,109,51,100,10,0,0,0,98,117,116,116,111,110,51,0,75,80,95,54,0,0,0,0,78,111,32,112,111,105,110,116,105,110,116,101,114,118,97,108,32,115,112,101,99,105,102,105,101,114,32,97,108,108,111,119,101,100,44,32,104,101,114,101,0,0,0,0,0,0,0,0,116,114,105,109,32,116,111,112,32,109,97,114,103,105,110,0,116,114,105,109,32,108,101,102,116,32,38,32,114,105,103,104,116,32,109,97,114,103,105,110,115,0,0,0,0,0,0,0,99,104,97,114,36,97,99,116,101,114,0,0,0,0,0,0,116,114,105,109,32,114,105,103,104,116,32,109,97,114,103,105,110,0,0,0,0,0,0,0,116,114,105,109,32,108,101,102,116,32,109,97,114,103,105,110,0,0,0,0,0,0,0,0,49,46,53,32,109,117,108,32,46,53,32,115,117,98,32,97,98,115,0,0,0,0,0,0,37,37,32,0,0,0,0,0,110,111,32,112,97,114,97,109,101,116,101,114,32,115,112,101,99,105,102,105,101,100,0,0,37,10,0,0,0,0,0,0,92,115,112,101,99,105,97,108,123,100,116,32,37,102,125,37,37,10,0,0,0,0,0,0,97,116,97,110,50,0,0,0,92,115,112,101,99,105,97,108,123,100,97,32,37,102,125,37,37,10,0,0,0,0,0,0,84,105,109,101,115,32,73,116,97,108,105,99,0,0,0,0,98,111,120,0,0,0,0,0,109,97,120,0,0,0,0,0,123,92,109,97,107,101,98,111,120,40,48,44,48,41,37,115,123,92,115,104,111,114,116,115,116,97,99,107,123,37,115,125,125,125,10,0,0,0,0,0,117,119,111,114,100,0,0,0,102,111,114,109,97,116,32,34,37,115,34,0,0,0,0,0,110,111,114,97,110,103,101,36,108,105,109,105,116,101,100,0,91,108,116,93,0,0,0,0,98,111,120,112,108,111,116,10,0,0,0,0,0,0,0,0,98,117,116,116,111,110,50,0,97,108,108,32,112,111,105,110,116,115,32,117,110,100,101,102,105,110,101,100,33,0,0,0,75,80,95,53,0,0,0,0,112,105,0,0,0,0,0,0,91,108,98,93,0,0,0,0,123,92,109,97,107,101,98,111,120,40,48,44,48,41,37,115,123,37,115,125,125,10,0,0,123,92,109,97,107,101,98,111,120,40,48,44,48,41,37,115,125,10,0,0,0,0,0,0,120,116,105,99,115,0,0,0,92,112,117,116,40,37,100,44,37,100,41,0,0,0,0,0,40,51,120,45,50,41,47,50,0,0,0,0,0,0,0,0,92,115,112,101,99,105,97,108,123,112,97,32,37,100,32,37,100,125,0,0,0,0,0,0,102,105,116,116,101,100,32,112,97,114,97,109,101,116,101,114,115,32,105,110,105,116,105,97,108,105,122,101,100,32,119,105,116,104,32,99,117,114,114,101,110,116,32,118,97,114,105,97,98,108,101,32,118,97,108,117,101,115,10,10,0,0,0,0,92,115,112,101,99,105,97,108,123,102,112,125,37,10,0,0,92,115,112,101,99,105,97,108,123,97,114,32,48,32,48,32,37,100,32,37,100,32,48,32,55,125,0,0,0,0,0,0,97,116,97,110,0,0,0,0,92,115,112,101,99,105,97,108,123,112,110,32,37,100,125,0,84,105,109,101,115,32,82,111,109,97,110,0,0,0,0,0,99,97,117,99,104,121,0,0,117,112,95,113,117,97,114,116,105,108,101,0,0,0,0,0,92,115,112,101,99,105,97,108,123,115,104,32,37,102,125,0,117,105,110,116,49,54,0,0,106,117,115,116,105,102,105,101,100,32,97,117,116,111,109,97,116,105,99,97,108,108,121,44,32,0,0,0,0,0,0,0,114,97,110,103,101,36,108,105,109,105,116,101,100,0,0,0,125,37,37,10,0,0,0,0,99,97,110,100,108,101,115,116,105,99,107,115,10,0,0,0,98,117,116,116,111,110,49,0,78,111,32,100,97,116,97,32,105,110,32,112,108,111,116,0,75,80,95,52,0,0,0,0,112,111,105,110,116,105,36,110,116,101,114,118,97,108,0,0,92,114,117,108,101,123,46,49,112,116,125,123,46,49,112,116,125,0,0,0,0,0,0,0,92,112,117,116,40,37,100,44,37,100,41,123,0,0,0,0,92,112,117,116,40,37,100,44,37,100,41,123,92,115,112,101,99,105,97,108,123,101,109,58,108,105,110,101,116,111,125,125,10,0,0,0,0,0,0,0,92,112,117,116,40,37,100,44,37,100,41,123,92,115,112,101,99,105,97,108,123,101,109,58,109,111,118,101,116,111,125,125,10,0,0,0,0,0,0,0,69,68,70,95,66,105,110,97,114,121,70,105,108,101,78,97,109,101,0,0,0,0,0,0,49,46,53,32,109,117,108,32,49,32,115,117,98,0,0,0,92,112,117,116,40,37,46,49,102,44,37,46,49,102,41,123,92,114,117,108,101,91,37,46,51,102,112,116,93,123,37,46,51,102,112,116,125,123,37,46,51,102,112,116,125,125,10,0,79,117,116,32,111,102,32,109,101,109,111,114,121,32,105,110,32,102,105,116,58,32,116,111,111,32,109,97,110,121,32,112,97,114,97,109,101,116,101,114,115,63,0,0,0,0,0,0,92,112,117,116,40,37,46,49,102,44,37,46,49,102,41,123,37,115,125,10,0,0,0,0,92,112,117,116,40,37,46,50,102,44,37,117,41,123,92,114,117,108,101,123,37,46,51,102,112,116,125,123,37,46,51,102,112,116,125,125,10,0,0,0,97,99,111,115,0,0,0,0,112,111,112,32,48,46,53,0,92,109,117,108,116,105,112,117,116,40,37,46,50,102,44,37,46,50,102,41,40,37,46,51,102,44,37,46,51,102,41,123,50,125,123,92,114,117,108,101,123,37,46,51,102,112,116,125,123,37,46,51,102,112,116,125,125,10,0,0,0,0,0,0,77,117,115,116,32,115,101,116,32,111,117,116,112,117,116,32,116,111,32,97,32,102,105,108,101,32,111,114,32,112,117,116,32,97,108,108,32,109,117,108,116,105,112,108,111,116,32,99,111,109,109,97,110,100,115,32,111,110,32,111,110,101,32,105,110,112,117,116,32,108,105,110,101,0,0,0,0,0,0,0,101,120,112,0,0,0,0,0,109,101,100,105,97,110,0,0,92,109,117,108,116,105,112,117,116,40,37,46,50,102,44,37,46,50,102,41,40,37,46,51,102,44,37,46,51,102,41,123,37,117,125,123,92,114,117,108,101,123,37,46,51,102,112,116,125,123,37,46,51,102,112,116,125,125,10,0,0,0,0,0,99,101,110,116,101,114,32,106,117,115,116,105,102,105,101,100,44,32,0,0,0,0,0,0,97,117,116,111,106,36,117,115,116,105,102,121,0,0,0,0,92,112,117,116,40,37,117,44,37,46,50,102,41,123,92,114,117,108,101,123,37,46,51,102,112,116,125,123,37,46,51,102,112,116,125,125,10,0,0,0,102,105,110,97,110,99,101,98,97,114,115,10,0,0,0,0,97,110,121,0,0,0,0,0,69,120,112,101,99,116,105,110,103,32,39,115,117,109,32,91,60,118,97,114,62,32,61,32,60,115,116,97,114,116,62,58,60,101,110,100,62,93,32,60,101,120,112,114,101,115,115,105,111,110,62,39,10,0,0,0,75,80,95,51,0,0,0,0,78,111,32,112,111,105,110,116,115,105,122,101,32,115,112,101,99,105,102,105,101,114,32,97,108,108,111,119,101,100,44,32,104,101,114,101,0,0,0,0,92,117,115,101,98,111,120,123,92,112,108,111,116,112,111,105,110,116,125,0,0,0,0,0,92,112,117,116,40,37,117,44,37,117,41,123,37,115,125,10,0,0,0,0,0,0,0,0,115,101,99,36,111,110,100,0,92,112,117,116,40,37,100,44,37,100,41,123,92,118,101,99,116,111,114,40,37,100,44,37,100,41,123,48,125,125,10,0,92,112,117,116,40,37,100,44,37,100,41,123,92,37,115,40,37,100,44,37,100,41,123,37,100,125,125,10,0,0,0,0,40,51,120,45,49,41,47,50,0,0,0,0,0,0,0,0,92,112,117,116,40,37,100,44,37,100,41,123,92,37,115,40,37,100,44,48,41,123,37,100,125,125,10,0,0,0,0,0,102,105,116,32,112,97,114,97,109,32,114,101,115,105,122,101,0,0,0,0,0,0,0,0,108,105,110,101,0,0,0,0,118,101,99,116,111,114,0,0,32,32,32,32,32,32,32,32,32,0,0,0,0,0,0,0,97,115,105,110,0,0,0,0,92,112,117,116,40,37,100,44,37,100,41,123,92,37,115,40,48,44,37,100,41,123,37,100,125,125,10,0,0,0,0,0,84,104,105,115,32,116,101,114,109,105,110,97,108,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,109,117,108,116,105,112,108,111,116,0,0,0,0,0,0,0,0,103,97,117,115,115,0,0,0,108,111,95,113,117,97,114,116,105,108,101,0,0,0,0,0,117,36,110,105,116,0,0,0,114,105,103,104,116,32,106,117,115,116,105,102,105,101,100,44,32,0,0,0,0,0,0,0,105,110,116,49,54,0,0,0,114,105,36,103,104,116,0,0,110,111,36,104,97,99,107,116,101,120,116,0,0,0,0,0,118,101,99,116,111,114,10,0,115,117,114,102,97,99,101,0,107,101,121,36,112,114,101,115,115,0,0,0,0,0,0,0,39,93,39,32,101,120,112,101,99,116,101,100,0,0,0,0,75,80,95,50,0,0,0,0,37,32,71,78,85,80,76,79,84,58,32,76,97,84,101,88,32,112,105,99,116,117,114,101,32,117,115,105,110,103,32,80,83,84,82,73,67,75,83,32,109,97,99,114,111,115,10,0,92,99,97,116,99,111,100,101,96,64,61,49,50,10,92,102,105,10,92,101,110,100,112,115,112,105,99,116,117,114,101,10,0,0,0,0,0,0,0,0,102,105,114,36,115,116,0,0,92,112,115,112,105,99,116,117,114,101,40,37,102,44,37,102,41,40,37,102,44,37,102,41,10,92,105,102,120,92,110,111,102,105,103,115,92,117,110,100,101,102,105,110,101,100,10,92,99,97,116,99,111,100,101,96,64,61,49,49,10,10,0,0,92,112,115,115,101,116,123,117,110,105,116,61,53,46,48,105,110,44,120,117,110,105,116,61,53,46,48,105,110,44,121,117,110,105,116,61,51,46,48,105,110,125,10,0,0,0,0,0,49,46,53,32,109,117,108,32,46,53,32,115,117,98,0,0,112,97,114,97,109,101,116,101,114,32,102,105,108,101,32,37,115,32,99,111,117,108,100,32,110,111,116,32,98,101,32,114,101,97,100,0,0,0,0,0,92,110,101,119,112,115,111,98,106,101,99,116,123,80,83,84,64,65,114,114,111,119,125,123,112,115,108,105,110,101,125,123,108,105,110,101,119,105,100,116,104,61,46,48,48,49,44,108,105,110,101,115,116,121,108,101,61,115,111,108,105,100,125,10,92,99,97,116,99,111,100,101,96,64,61,49,50,10,10,92,102,105,10,0,0,0,0,0,115,121,110,116,97,120,32,101,114,114,111,114,32,105,110,32,112,97,114,97,109,101,116,101,114,32,102,105,108,101,0,0,92,110,101,119,112,115,111,98,106,101,99,116,123,80,83,84,64,80,108,117,115,125,123,112,115,100,111,116,115,125,123,108,105,110,101,119,105,100,116,104,61,46,48,48,49,44,108,105,110,101,115,116,121,108,101,61,115,111,108,105,100,44,100,111,116,115,116,121,108,101,61,43,125,10,92,110,101,119,112,115,111,98,106,101,99,116,123,80,83,84,64,83,113,117,97,114,101,125,123,112,115,100,111,116,115,125,123,108,105,110,101,119,105,100,116,104,61,46,48,48,49,44,108,105,110,101,115,116,121,108,101,61,115,111,108,105,100,44,100,111,116,115,116,121,108,101,61,115,113,117,97,114,101,125,10,92,110,101,119,112,115,111,98,106,101,99,116,123,80,83,84,64,67,105,114,99,108,101,125,123,112,115,100,111,116,115,125,123,108,105,110,101,119,105,100,116,104,61,46,48,48,49,44,108,105,110,101,115,116,121,108,101,61,115,111,108,105,100,44,100,111,116,115,116,121,108,101,61,111,125,10,92,110,101,119,112,115,111,98,106,101,99,116,123,80,83,84,64,84,114,105,97,110,103,108,101,125,123,112,115,100,111,116,115,125,123,108,105,110,101,119,105,100,116,104,61,46,48,48,49,44,108,105,110,101,115,116,121,108,101,61,115,111,108,105,100,44,100,111,116,115,116,121,108,101,61,116,114,105,97,110,103,108,101,125,10,92,110,101,119,112,115,111,98,106,101,99,116,123,80,83,84,64,80,101,110,116,97,103,111,110,125,123,112,115,100,111,116,115,125,123,108,105,110,101,119,105,100,116,104,61,46,48,48,49,44,108,105,110,101,115,116,121,108,101,61,115,111,108,105,100,44,100,111,116,115,116,121,108,101,61,112,101,110,116,97,103,111,110,125,10,92,110,101,119,112,115,111,98,106,101,99,116,123,80,83,84,64,70,105,108,108,115,113,117,97,114,101,125,123,112,115,100,111,116,115,125,123,108,105,110,101,119,105,100,116,104,61,46,48,48,49,44,108,105,110,101,115,116,121,108,101,61,115,111,108,105,100,44,100,111,116,115,116,121,108,101,61,115,113,117,97,114,101,42,125,10,92,110,101,119,112,115,111,98,106,101,99,116,123,80,83,84,64,70,105,108,108,99,105,114,99,108,101,125,123,112,115,100,111,116,115,125,123,108,105,110,101,119,105,100,116,104,61,46,48,48,49,44,108,105,110,101,115,116,121,108,101,61,115,111,108,105,100,44,100,111,116,115,116,121,108,101,61,42,125,10,92,110,101,119,112,115,111,98,106,101,99,116,123,80,83,84,64,70,105,108,108,116,114,105,97,110,103,108,101,125,123,112,115,100,111,116,115,125,123,108,105,110,101,119,105,100,116,104,61,46,48,48,49,44,108,105,110,101,115,116,121,108,101,61,115,111,108,105,100,44,100,111,116,115,116,121,108,101,61,116,114,105,97,110,103,108,101,42,125,10,92,110,101,119,112,115,111,98,106,101,99,116,123,80,83])
+.concat([84,64,70,105,108,108,112,101,110,116,97,103,111,110,125,123,112,115,100,111,116,115,125,123,108,105,110,101,119,105,100,116,104,61,46,48,48,49,44,108,105,110,101,115,116,121,108,101,61,115,111,108,105,100,44,100,111,116,115,116,121,108,101,61,112,101,110,116,97,103,111,110,42,125,10,0,0,0,0,0,92,110,101,119,112,115,111,98,106,101,99,116,123,80,83,84,64,68,105,97,109,111,110,100,125,123,112,115,100,111,116,115,125,123,108,105,110,101,119,105,100,116,104,61,46,48,48,49,44,108,105,110,101,115,116,121,108,101,61,115,111,108,105,100,44,100,111,116,115,116,121,108,101,61,115,113,117,97,114,101,44,100,111,116,97,110,103,108,101,61,52,53,125,10,92,110,101,119,112,115,111,98,106,101,99,116,123,80,83,84,64,70,105,108,108,100,105,97,109,111,110,100,125,123,112,115,100,111,116,115,125,123,108,105,110,101,119,105,100,116,104,61,46,48,48,49,44,108,105,110,101,115,116,121,108,101,61,115,111,108,105,100,44,100,111,116,115,116,121,108,101,61,115,113,117,97,114,101,42,44,100,111,116,97,110,103,108,101,61,52,53,125,10,92,110,101,119,112,115,111,98,106,101,99,116,123,80,83,84,64,67,114,111,115,115,125,123,112,115,100,111,116,115,125,123,108,105,110,101,119,105,100,116,104,61,46,48,48,49,44,108,105,110,101,115,116,121,108,101,61,115,111,108,105,100,44,100,111,116,115,116,121,108,101,61,43,44,100,111,116,97,110,103,108,101,61,52,53,125,10,0,0,0,0,0,0,0,0,116,97,110,0,0,0,0,0,92,110,101,119,112,115,111,98,106,101,99,116,123,80,83,84,64,66,111,114,100,101,114,125,123,112,115,108,105,110,101,125,123,108,105,110,101,119,105,100,116,104,61,46,48,48,49,53,44,108,105,110,101,115,116,121,108,101,61,115,111,108,105,100,125,10,92,110,101,119,112,115,111,98,106,101,99,116,123,80,83,84,64,65,120,101,115,125,123,112,115,108,105,110,101,125,123,108,105,110,101,119,105,100,116,104,61,46,48,48,49,53,44,108,105,110,101,115,116,121,108,101,61,100,111,116,116,101,100,44,100,111,116,115,101,112,61,46,48,48,52,125,10,92,110,101,119,112,115,111,98,106,101,99,116,123,80,83,84,64,83,111,108,105,100,125,123,112,115,108,105,110,101,125,123,108,105,110,101,119,105,100,116,104,61,46,48,48,49,53,44,108,105,110,101,115,116,121,108,101,61,115,111,108,105,100,125,10,92,110,101,119,112,115,111,98,106,101,99,116,123,80,83,84,64,68,97,115,104,101,100,125,123,112,115,108,105,110,101,125,123,108,105,110,101,119,105,100,116,104,61,46,48,48,49,53,44,108,105,110,101,115,116,121,108,101,61,100,97,115,104,101,100,44,100,97,115,104,61,46,48,49,32,46,48,49,125,10,92,110,101,119,112,115,111,98,106,101,99,116,123,80,83,84,64,68,111,116,116,101,100,125,123,112,115,108,105,110,101,125,123,108,105,110,101,119,105,100,116,104,61,46,48,48,50,53,44,108,105,110,101,115,116,121,108,101,61,100,111,116,116,101,100,44,100,111,116,115,101,112,61,46,48,48,56,125,10,92,110,101,119,112,115,111,98,106,101,99,116,123,80,83,84,64,76,111,110,103,68,97,115,104,125,123,112,115,108,105,110,101,125,123,108,105,110,101,119,105,100,116,104,61,46,48,48,49,53,44,108,105,110,101,115,116,121,108,101,61,100,97,115,104,101,100,44,100,97,115,104,61,46,48,50,32,46,48,49,125,10,0,0,0,0,0,0,0,115,112,108,105,110,101,36,115,0,0,0,0,0,0,0,0,109,105,110,0,0,0,0,0,37,32,68,101,102,105,110,101,32,110,101,119,32,80,83,84,32,111,98,106,101,99,116,115,44,32,105,102,32,110,111,116,32,97,108,114,101,97,100,121,32,100,101,102,105,110,101,100,10,92,105,102,120,92,80,83,84,108,111,97,100,101,100,92,117,110,100,101,102,105,110,101,100,10,92,100,101,102,92,80,83,84,108,111,97,100,101,100,123,116,125,10,92,112,115,115,101,116,123,97,114,114,111,119,115,105,122,101,61,46,48,49,32,51,46,50,32,49,46,52,32,46,51,125,10,92,112,115,115,101,116,123,100,111,116,115,105,122,101,61,46,48,49,125,10,92,99,97,116,99,111,100,101,96,64,61,49,49,10,10,0,0,0,0,0,0,0,0,108,101,102,116,32,106,117,115,116,105,102,105,101,100,44,32,0,0,0,0,0,0,0,0,117,98,121,116,101,0,0,0,92,80,83,84,64,76,111,110,103,68,97,115,104,0,0,0,104,105,115,116,101,112,115,10,0,0,0,0,0,0,0,0,105,110,100,101,120,101,115,32,108,117,0,0,0,0,0,0,120,50,32,114,97,110,103,101,32,105,115,32,105,110,118,97,108,105,100,0,0,0,0,0,39,58,39,32,101,120,112,101,99,116,101,100,0,0,0,0,75,80,95,49,0,0,0,0,112,115,0,0,0,0,0,0,92,80,83,84,64,68,111,116,116,101,100,0,0,0,0,0,92,80,83,84,64,68,97,115,104,101,100,0,0,0,0,0,92,80,83,84,64,83,111,108,105,100,0,0,0,0,0,0,92,80,83,84,64,65,120,101,115,0,0,0,0,0,0,0,124,51,120,45,50,124,0,0,34,37,115,34,32,0,0,0,92,80,83,84,64,66,111,114,100,101,114,0,0,0,0,0,59,0,0,0,0,0,0,0,70,73,88,69,68,58,32,32,37,115,10,0,0,0,0,0,40,37,46,52,102,44,37,46,52,102,41,10,0,0,0,0,105,108,108,101,103,97,108,32,100,97,121,32,111,102,32,109,111,110,116,104,0,0,0,0,36,37,102,32,92,116,105,109,101,115,32,49,48,94,123,37,100,125,36,0,0,0,0,0,99,111,115,0,0,0,0,0,36,37,102,36,0,0,0,0,109,112,32,116,105,116,108,101,0,0,0,0,0,0,0,0,113,110,111,114,109,0,0,0,115,117,109,95,115,113,0,0,36,37,100,32,92,116,105,109,101,115,32,49,48,94,123,37,100,125,36,0,0,0,0,0,10,9,32,32,108,97,98,101,108,115,32,97,114,101,32,0,117,105,110,116,56,0,0,0,36,37,100,36,0,0,0,0,102,115,116,101,112,115,10,0,109,97,116,114,105,120,32,58,32,116,104,105,110,32,112,108,97,116,101,32,115,112,108,105,110,101,115,32,50,100,0,0,117,110,101,120,112,101,99,116,101,100,32,125,0,0,0,0,42,42,0,0,0,0,0,0,75,80,95,48,0,0,0,0,112,111,105,110,116,115,36,105,122,101,0,0,0,0,0,0,36,49,48,94,123,37,100,125,36,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,99,112,52,51,55,0,0,0,123,37,115,125,10,0,0,0,32,121,108,111,119,32,121,104,105,103,104,0,0,0,0,0,40,37,46,52,102,44,37,46,52,102,41,0,0,0,0,0,51,32,109,117,108,32,50,32,115,117,98,32,97,98,115,0,112,117,115,104,100,0,0,0,123,76,125,0,0,0,0,0,99,111,117,108,100,32,110,111,116,32,114,101,97,100,32,112,97,114,97,109,101,116,101,114,45,102,105,108,101,32,34,37,115,34,0,0,0,0,0,0,91,114,93,0,0,0,0,0,91,108,93,0,0,0,0,0,115,105,110,0,0,0,0,0,92,114,112,117,116,0,0,0,71,80,86,65,76,95,77,85,76,84,73,80,76,79,84,0,99,110,36,111,114,109,97,108,0,0,0,0,0,0,0,0,115,117,109,0,0,0,0,0,99,108,36,101,97,114,0,0,92,80,83,84,64,70,105,108,108,112,101,110,116,97,103,111,110,0,0,0,0,0,0,0,10,9,32,32,116,105,99,115,32,97,114,101,32,108,105,109,105,116,101,100,32,116,111,32,100,97,116,97,32,114,97,110,103,101,0,0,0,0,0,0,98,121,116,101,0,0,0,0,110,111,114,111,36,116,97,116,101,0,0,0,0,0,0,0,78,101,101,100,32,48,32,116,111,32,50,32,117,115,105,110,103,32,115,112,101,99,115,32,102,111,114,32,115,116,97,116,115,32,99,111,109,109,97,110,100,0,0,0,0,0,0,0,92,80,83,84,64,70,105,108,108,99,105,114,99,108,101,0,115,116,101,112,115,10,0,0,116,104,105,110,32,112,108,97,116,101,32,115,112,108,105,110,101,115,32,105,110,32,100,103,114,105,100,51,100,0,0,0,101,120,112,101,99,116,105,110,103,32,123,119,104,105,108,101,45,99,108,97,117,115,101,125,0,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,101,120,112,114,101,115,115,105,111,110,32,0,0,0,0,0,75,80,95,68,105,118,105,100,101,0,0,0,0,0,0,0,78,111,32,112,111,105,110,116,116,121,112,101,32,115,112,101,99,105,102,105,101,114,32,97,108,108,111,119,101,100,44,32,104,101,114,101,0,0,0,0,92,80,83,84,64,70,105,108,108,116,114,105,97,110,103,108,101,0,0,0,0,0,0,0,92,80,83,84,64,70,105,108,108,115,113,117,97,114,101,0,92,80,83,84,64,70,105,108,108,100,105,97,109,111,110,100,0,0,0,0,0,0,0,0,92,80,83,84,64,80,101,110,116,97,103,111,110,0,0,0,124,51,120,45,49,124,0,0,92,80,83,84,64,84,114,105,97,110,103,108,101,0,0,0,102,105,116,116,101,100,32,112,97,114,97,109,101,116,101,114,115,32,97,110,100,32,105,110,105,116,105,97,108,32,118,97,108,117,101,115,32,102,114,111,109,32,102,105,108,101,58,32,37,115,10,10,0,0,0,0,92,80,83,84,64,67,105,114,99,108,101,0,0,0,0,0,92,80,83,84,64,67,114,111,115,115,0,0,0,0,0,0,99,111,110,106,103,0,0,0,92,80,83,84,64,83,113,117,97,114,101,0,0,0,0,0,105,110,118,97,108,105,100,32,111,114,32,100,117,112,108,105,99,97,116,101,32,111,112,116,105,111,110,0,0,0,0,0,107,36,100,101,110,115,105,116,121,0,0,0,0,0,0,0,115,116,100,100,101,118,0,0,92,80,83,84,64,80,108,117,115,0,0,0,0,0,0,0,32,97,110,100,32,109,105,114,114,111,114,101,100,32,111,110,32,111,112,112,111,115,105,116,101,32,98,111,114,100,101,114,0,0,0,0,0,0,0,0,105,110,116,56,0,0,0,0,92,80,83,84,64,68,105,97,109,111,110,100,0,0,0,0,105,110,112,117,116,32,108,105,110,101,32,99,111,112,121,0,114,111,36,116,97,116,101,0,32,37,100,10,0,0,0,0,98,111,120,120,121,101,114,114,111,114,98,97,114,115,10,0,71,114,105,100,100,105,110,103,32,111,102,32,116,104,101,32,99,111,108,111,114,32,99,111,108,117,109,110,32,105,115,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,101,120,112,101,99,116,105,110,103,32,123,100,111,45,99,108,97,117,115,101,125,0,0,0,98,105,110,0,0,0,0,0,83,107,105,112,112,105,110,103,32,100,97,116,97,32,102,105,108,101,32,119,105,116,104,32,110,111,32,118,97,108,105,100,32,112,111,105,110,116,115,0,37,115,40,37,46,52,102,44,37,46,52,102,41,10,0,0,75,80,95,68,101,99,105,109,97,108,0,0,0,0,0,0,32,43,37,100,10,0,0,0,92,113,100,105,115,107,40,37,46,52,102,44,37,46,52,102,41,123,37,46,52,102,125,10,0,0,0,0,0,0,0,0,99,111,110,116,111,117,114,32,100,101,108,116,97,95,116,0,32,40,117,110,100,101,102,105,110,101,100,41,10,0,0,0,97,100,100,95,116,105,99,95,117,115,101,114,58,32,108,105,115,116,32,115,111,114,116,32,101,114,114,111,114,0,0,0,123,45,62,125,0,0,0,0,35,32,115,101,116,32,111,117,116,112,117,116,32,39,37,115,39,10,0,0,0,0,0,0,32,37,99,32,100,117,109,109,121,10,0,0,0,0,0,0,92,80,83,84,64,65,114,114,111,119,37,115,40,37,46,52,102,44,37,46,52,102,41,40,37,46,52,102,44,37,46,52,102,41,10,0,0,0,0,0,102,117,110,99,116,105,111,110,32,116,111,32,112,108,111,116,32,101,120,112,101,99,116,101,100,0,0,0,0,0,0,0,32,37,115,10,0,0,0,0,51,32,109,117,108,32,49,32,115,117,98,32,97,98,115,0,92,100,101,102,92,112,111,108,121,112,109,73,73,73,100,35,49,123,92,112,115,112,111,108,121,103,111,110,91,108,105,110,101,115,116,121,108,101,61,110,111,110,101,44,102,105,108,108,115,116,121,108,101,61,115,111,108,105,100,44,102,105,108,108,99,111,108,111,114,61,80,83,84,64,67,79,76,79,82,35,49,93,125,10,10,0,0,0,10,9,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,0,0,0,0,0,0,85,115,97,103,101,58,32,103,110,117,112,108,111,116,32,91,79,80,84,73,79,78,93,46,46,46,32,91,70,73,76,69,93,10,32,32,45,86,44,32,45,45,118,101,114,115,105,111,110,10,32,32,45,104,44,32,45,45,104,101,108,112,10,32,32,45,112,32,32,45,45,112,101,114,115,105,115,116,10,32,32,45,100,32,32,45,45,100,101,102,97,117,108,116,45,115,101,116,116,105,110,103,115,10,32,32,45,101,32,32,34,99,111,109,109,97,110,100,49,59,32,99,111,109,109,97,110,100,50,59,32,46,46,46,34,10,103,110,117,112,108,111,116,32,37,115,32,112,97,116,99,104,108,101,118,101,108,32,37,115,10,0,0,0,0,0,0,0,92,110,101,119,114,103,98,99,111,108,111,114,123,80,83,84,64,67,79,76,79,82,37,100,125,123,37,103,32,37,103,32,37,103,125,10,0,0,0,0,102,105,116,32,112,97,114,97,109,0,0,0,0,0,0,0,32,40,102,105,120,109,97,120,41,0,0,0,0,0,0,0,112,101,114,109,95,97,116,0,92,110,101,119,103,114,97,121,123,80,83,84,64,67,79,76,79,82,37,100,125,123,37,103,125,10,0,0,0,0,0,0,32,40,102,105,120,109,105,110,41,0,0,0,0,0,0,0,112,115,116,114,105,99,107,115,58,32,80,97,108,101,116,116,101,32,117,115,101,100,32,98,101,102,111,114,101,32,115,101,116,33,10,0,0,0,0,0,97,114,103,0,0,0,0,0,32,40,109,97,120,41,0,0,101,120,112,101,99,116,105,110,103,32,60,121,111,102,102,115,101,116,62,0,0,0,0,0,40,37,46,52,103,44,37,46,52,103,41,0,0,0,0,0,99,117,109,36,117,108,97,116,105,118,101,0,0,0,0,0,109,101,97,110,0,0,0,0,109,111,117,115,101,46,99,0,103,110,117,112,108,111,116,62,32,0,0,0,0,0,0,0,32,40,109,105,110,41,0,0,111,110,32,98,111,114,100,101,114,0,0,0,0,0,0,0,108,102,0,0,0,0,0,0,92,112,111,108,121,112,109,73,73,73,100,123,37,100,125,0,9,37,115,58,32,37,115,37,115,37,115,37,115,37,115,44,32,0,0,0,0,0,0,0,98,111,120,101,114,114,111,114,98,97,114,115,10,0,0,0,78,111,32,117,115,97,98,108,101,32,100,97,116,97,32,105,110,32,116,104,105,115,32,112,108,111,116,32,116,111,32,97,117,116,111,45,115,99,97,108,101,32,97,120,105,115,32,114,97,110,103,101,0,0,0,0,99,97,108,108,95,97,114,103,99,32,62,61,32,48,32,38,38,32,99,97,108,108,95,97,114,103,99,32,60,61,32,57,0,0,0,0,0,0,0,0,101,108,115,101,32,119,105,116,104,111,117,116,32,105,102,0,78,101,101,100,32,117,115,105,110,103,32,115,112,101,99,32,102,111,114,32,121,32,116,105,109,101,32,100,97,116,97,0,99,111,108,117,109,110,0,0,83,105,110,103,117,108,97,114,32,109,97,116,114,105,120,32,105,110,32,73,110,118,101,114,116,95,82,116,82,0,0,0,99,98,111,120,0,0,0,0,115,112,108,105,110,101,32,104,101,108,112,32,109,97,116,114,105,120,0,0,0,0,0,0,37,37,32,71,78,85,80,76,79,84,58,32,76,97,84,101,88,32,117,115,105,110,103,32,84,69,88,68,82,65,87,32,109,97,99,114,111,115,10,0,75,80,95,83,117,98,116,114,97,99,116,0,0,0,0,0,115,112,114,105,110,116,102,95,115,112,101,99,105,102,105,101,114,58,32,110,111,32,102,111,114,109,97,116,32,115,112,101,99,105,102,105,101,114,10,0,9,97,117,116,111,115,99,97,108,105,110,103,32,105,115,32,0,0,0,0,0,0,0,0,92,101,110,100,123,116,101,120,100,114,97,119,125,10,0,0,114,97,110,103,101,32,115,112,101,99,105,102,105,101,114,115,32,111,102,32,115,117,109,32,109,117,115,116,32,104,97,118,101,32,105,110,116,101,103,101,114,32,118,97,108,117,101,115,0,0,0,0,0,0,0,0,9,101,114,114,111,114,115,32,97,114,101,32,112,108,111,116,116,101,100,32,119,105,116,104,111,117,116,32,98,97,114,115,10,0,0,0,0,0,0,0,40,37,100,32,37,100,41,0,9,101,114,114,111,114,98,97,114,115,32,97,114,101,32,112,108,111,116,116,101,100,32,105,110,32,37,115,32,119,105,116,104,32,98,97,114,115,32,111,102,32,115,105,122,101,32,37,102,10,0,0,0,0,0,0,10,92,99,112,97,116,104,32,0,0,0,0,0,0,0,0,9,98,111,114,100,101,114,32,37,100,32,105,115,32,100,114,97,119,110,32,105,110,32,37,115,32,111,102,32,116,104,101,32,112,108,111,116,32,101,108,101,109,101,110,116,115,32,119,105,116,104,10,9,32,0,0,51,120,45,50,0,0,0,0,92,112,97,116,104,32,40,37,100,32,37,100,41,0,0,0,9,98,111,114,100,101,114,32,105,115,32,110,111,116,32,100,114,97,119,110,10,0,0,0,92,108,105,110,101,119,100,32,37,100,10,0,0,0,0,0,78,101,101,100,32,118,105,97,32,97,110,100,32,101,105,116,104,101,114,32,112,97,114,97,109,101,116,101,114,32,108,105,115,116,32,111,114,32,102,105,108,101,0,0,0,0,0,0,114,101,108,97,116,105,118,101,0,0,0,0,0,0,0,0,92,37,99,116,101,120,116,123,37,115,125,10,0,0,0,0,97,98,115,111,108,117,116,101,0,0,0,0,0,0,0,0,92,116,101,120,116,114,101,102,32,104,58,82,32,118,58,67,32,0,0,0,0,0,0,0,105,109,97,103,0,0,0,0,9,98,111,120,119,105,100,116,104,32,105,115,32,37,103,32,37,115,10,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,60,121,115,99,97,108,101,62,0,0,0,0,0,0,92,116,101,120,116,114,101,102,32,104,58,76,32,118,58,67,32,0,0,0,0,0,0,0,102,36,114,101,113,117,101,110,99,121,0,0,0,0,0,0,37,115,37,115,9,37,102,10,0,0,0,0,0,0,0,0,9,98,111,120,119,105,100,116,104,32,105,115,32,97,117,116,111,10,0,0,0,0,0,0,32,97,110,100,32,109,105,114,114,111,114,101,100,32,37,115,0,0,0,0,0,0,0,0,100,111,117,98,108,101,0,0,92,109,111,118,101,32,40,37,100,32,37,100,41,0,0,0,115,99,36,97,108,101,0,0,9,110,111,116,32,100,114,97,119,105,110,103,32,108,105,110,101,115,32,98,101,116,119,101,101,110,32,116,119,111,32,111,117,116,114,97,110,103,101,32,112,111,105,110,116,115,10,0,87,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,99,111,108,117,109,110,115,32,105,110,32,105,110,112,117,116,32,100,97,116,97,32,45,32,108,105,110,101,32,37,100,0,73,110,118,97,108,105,100,32,123,101,108,115,101,45,99,108,97,117,115,101,125,0,0,0,119,111,114,100,115,0,0,0,92,102,99,105,114,32,102,58,48,46,57,32,114,58,49,54,0,0,0,0,0,0,0,0,75,80,95,83,101,112,97,114,97,116,111,114,0,0,0,0,115,112,114,105,110,116,102,95,115,112,101,99,105,102,105,101,114,58,32,117,115,101,100,32,119,105,116,104,32,105,110,118,97,108,105,100,32,102,111,114,109,97,116,32,115,112,101,99,105,102,105,101,114,10,0,0,9,100,114,97,119,105,110,103,32,97,110,100,32,99,108,105,112,112,105,110,103,32,108,105,110,101,115,32,98,101,116,119,101,101,110,32,116,119,111,32,111,117,116,114,97,110,103,101,32,112,111,105,110,116,115,10,0,0,0,0,0,0,0,0,92,102,99,105,114,32,102,58,48,46,57,32,114,58,49,50,0,0,0,0,0,0,0,0,9,110,111,116,32,100,114,97,119,105,110,103,32,108,105,110,101,115,32,98,101,116,119,101,101,110,32,105,110,114,97,110,103,101,32,97,110,100,32,111,117,116,114,97,110,103,101,32,112,111,105,110,116,115,10,0,92,102,99,105,114,32,102,58,48,46,57,32,114,58,57,0,9,100,114,97,119,105,110,103,32,97,110,100,32,99,108,105,112,112,105,110,103,32,108,105,110,101,115,32,98,101,116,119,101,101,110,32,105,110,114,97,110,103,101,32,97,110,100,32,111,117,116,114,97,110,103,101,32,112,111,105,110,116,115,10,0,0,0,0,0,0,0,0,92,108,99,105,114,32,114,58,49,54,0,0,0,0,0,0,9,112,111,105,110,116,32,99,108,105,112,32,105,115,32,37,115,10,0,0,0,0,0,0,51,32,109,117,108,32,50,32,115,117,98,0,0,0,0,0,92,108,99,105,114,32,114,58,49,50,0,0,0,0,0,0,9,99,111,110,116,111,117,114,32,108,105,110,101,32,116,121,112,101,115,32,97,114,101,32,97,108,108,32,116,104,101,32,115,97,109,101,10,0,0,0,92,108,99,105,114,32,114,58,57,0,0,0,0,0,0,0,118,105,97,0,0,0,0,0,9,99,111,110,116,111,117,114,32,108,105,110,101,32,116,121,112,101,115,32,97,114,101,32,118,97,114,105,101,100,32,38,32,108,97,98,101,108,101,100,32,119,105,116,104,32,102,111,114,109,97,116,32,39,37,115,39,10,0,0,0,0,0,0,92,104,116,101,120,116,123,36,92,115,116,97,114,36,125,0,9,9,37,100,32,105,110,99,114,101,109,101,110,116,97,108,32,108,101,118,101,108,115,32,115,116,97,114,116,105,110,103,32,97,116,32,37,103,44,32,115,116,101,112,32,37,103,44,32,101,110,100,32,37,103,10,0,0,0,0,0,0,0,0,92,104,116,101,120,116,123,36,92,116,114,105,97,110,103,108,101,36,125,0,0,0,0,0,98,101,108,111,119,0,0,0,114,101,97,108,0,0,0,0,44,37,103,32,0,0,0,0,111,110,108,121,32,118,97,108,105,100,32,97,115,32,112,97,114,116,32,111,102,32,97,110,32,97,117,116,111,45,108,97,121,111,117,116,32,99,111,109,109,97,110,100,0,0,0,0,92,104,116,101,120,116,123,36,92,116,105,109,101,115,36,125,0,0,0,0,0,0,0,0,97,98,111,118,101,0,0,0,117,36,110,105,113,117,101,0,37,49,49,46,53,101,0,0,111,110,32,97,120,105,115,0,102,0,0,0,0,0,0,0,92,114,109,111,118,101,40,48,32,52,41,92,104,116,101,120,116,123,36,92,66,111,120,36,125,0,0,0,0,0,0,0,111,117,116,36,119,97,114,100,115,0,0,0,0,0,0,0,9,9,37,100,32,100,105,115,99,114,101,116,101,32,108,101,118,101,108,115,32,97,116,32,0,0,0,0,0,0,0,0,100,97,116,97,0,0,0,0,73,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,85,110,107,110,111,119,110,32,109,97,112,112,105,110,103,32,116,121,112,101,0,0,0,0,79,108,100,45,115,116,121,108,101,32,105,102,47,101,108,115,101,32,115,116,97,116,101,109,101,110,116,32,101,110,99,111,117,110,116,101,114,101,100,32,105,110,115,105,100,101,32,98,114,97,99,107,101,116,115,0,78,101,119,32,104,105,115,116,111,103,114,97,109,0,0,0,115,112,114,105,110,116,102,0,92,104,116,101,120,116,123,36,43,36,125,0,0,0,0,0,75,80,95,65,100,100,0,0,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,115,112,114,105,110,116,102,95,115,112,101,99,105,102,105,101,114,32,99,97,108,108,101,100,32,119,105,116,104,111,117,116,32,39,37,39,10,0,0,0,9,9,97,112,112,114,111,120,46,32,37,100,32,97,117,116,111,109,97,116,105,99,32,108,101,118,101,108,115,10,0,0,92,114,109,111,118,101,40,48,32,52,41,92,104,116,101,120,116,123,36,92,68,105,97,109,111,110,100,36,125,0,0,0,121,50,0,0,0,0,0,0,9,9,97,115,32,98,115,112,108,105,110,101,32,97,112,112,114,111,120,105,109,97,116,105,111,110,32,115,101,103,109,101,110,116,115,32,111,102,32,111,114,100,101,114,32,37,100,32,119,105,116,104,32,37,100,32,112,116,115,10,0,0,0,0,92,104,116,101,120,116,123,36,92,99,100,111,116,36,125,0,120,50,0,0,0,0,0,0,9,9,97,115,32,99,117,98,105,99,32,115,112,108,105,110,101,32,105,110,116,101,114,112,111,108,97,116,105,111,110,32,115,101,103,109,101,110,116,115,32,119,105,116,104,32,37,100,32,112,116,115,10,0,0,0,92,116,101,120,116,114,101,102,32,104,58,67,32,118,58,67,32,0,0,0,0,0,0,0,121,49,0,0,0,0,0,0,9,9,97,115,32,108,105,110,101,97,114,32,115,101,103,109,101,110,116,115,10,0,0,0,67,97,110,39,116,32,117,115,101,32,112,109,51,100,32,102,111,114,32,50,100,32,112,108,111,116,115,0,0,0,0,0,51,120,45,49,0,0,0,0,92,109,111,118,101,32,40,37,100,32,37,100,41,10,0,0,120,49,0,0,0,0,0,0,103,114,105,100,32,98,97,115,101,32,97,110,100,32,115,117,114,102,97,99,101,10,0,0,92,109,111,118,101,32,40,37,100,32,37,100,41,92,37,99,118,101,99,32,40,37,100,32,37,100,41,0,0,0,0,0,99,36,108,111,115,101,100,0,102,117,110,99,116,105,111,110,32,117,115,101,100,32,102,111,114,32,102,105,116,116,105,110,103,58,32,37,115,10,0,0,115,117,114,102,97,99,101,10,0,0,0,0,0,0,0,0,10,10,102,111,110,116,95,105,100,101,110,116,105,102,105,101,114,58,61,34,71,78,85,80,76,79,84,34,59,10,102,111,110,116,95,115,105,122,101,32,55,50,112,116,35,59,10,116,104,35,61,48,46,52,112,116,35,59,32,100,101,102,105,110,101,95,119,104,111,108,101,95,112,105,120,101,108,115,40,116,104,41,59,10,10,112,97,116,104,32,97,114,114,111,119,104,101,97,100,59,10,97,114,114,111,119,104,101,97,100,32,61,32,40,45,55,112,116,44,45,50,112,116,41,123,100,105,114,51,48,125,46,46,40,45,54,112,116,44,48,112,116,41,46,46,123,100,105,114,49,53,48,125,40,45,55,112,116,44,50,112,116,41,32,38,10,32,32,40,45,55,112,116,44,50,112,116,41,45,45,40,48,112,116,44,48,112,116,41,45,45,40,45,55,112,116,44,45,50,112,116,41,32,38,32,99,121,99,108,101,59,10,0,0,0,0,101,108,108,36,105,112,115,101,115,0,0,0,0,0,0,0,103,114,105,100,32,98,97,115,101,10,0,0,0,0,0,0,10,100,101,102,32,101,110,100,99,104,97,114,32,61,10,32,32,37,32,78,101,120,116,32,108,105,110,101,32,115,104,111,117,108,100,32,112,114,111,98,97,98,108,121,32,98,101,32,114,101,109,111,118,101,100,32,105,102,32,67,77,32,98,97,115,101,32,105,115,32,117,115,101,100,10,32,32,108,58,61,48,59,32,114,58,61,119,59,10,32,32,37,73,110,99,108,117,100,101,32,116,104,101,32,110,101,120,116,32,116,119,111,32,108,105,110,101,115,32,105,102,32,121,111,117,32,119,97,110,116,32,116,111,10,32,32,37,114,111,116,97,116,101,32,116,104,101,32,112,105,99,116,117,114,101,32,57,48,32,100,101,103,46,40,80,111,114,116,114,97,105,116,32,116,111,32,76,97,110,100,115,99,97,112,101,41,10,32,32,37,99,117,114,114,101,110,116,112,105,99,116,117,114,101,58,61,99,117,114,114,101,110,116,112,105,99,116,117,114,101,32,114,111,116,97,116,101,100,32,57,48,32,115,104,105,102,116,101,100,32,40,104,44,48,41,59,10,32,32,37,116,109,112,58,61,99,104,97,114,104,116,59,32,99,104,97,114,104,116,58,61,99,104,97,114,119,100,59,32,99,104,97,114,119,100,58,61,116,109,112,59,10,32,32,115,99,97,110,116,111,107,101,110,115,32,101,120,116,114,97,95,101,110,100,99,104,97,114,59,10,32,32,105,102,32,112,114,111,111,102,105,110,103,62,48,58,32,109,97,107,101,98,111,120,40,112,114,111,111,102,114,117,108,101,41,59,32,102,105,10,32,32,99,104,97,114,100,120,58,61,119,59,10,32,32,115,104,105,112,105,116,59,10,32,32,105,102,32,100,105,115,112,108,97,121,105,110,103,62,48,58,32,109,97,107,101,98,111,120,40,115,99,114,101,101,110,114,117,108,101,41,59,32,115,104,111,119,105,116,59,32,102,105,10,32,32,101,110,100,103,114,111,117,112,32,10,101,110,100,100,101,102,59,10,108,101,116,32,101,110,100,99,104,97,114,95,32,61,32,101,110,100,99,104,97,114,59,10,108,101,116,32,103,101,110,101,114,97,116,101,32,61,32,105,110,112,117,116,59,10,108,101,116,32,114,111,109,97,110,32,61,32,114,111,109,97,110,59,10,0,99,105,114,36,99,108,101,115,0,0,0,0,0,0,0,0,51,100,112,108,111,116,0,0,116,105,109,101,99,111,108,117,109,110,0,0,0,0,0,0,32,105,110,32,37,100,32,108,101,118,101,108,115,32,111,110,32,0,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,60,110,117,109,95,99,111,108,115,62,0,0,0,0,10,99,109,99,104,97,114,32,34,80,101,114,105,111,100,34,59,10,32,32,110,117,109,101,114,105,99,32,100,111,116,95,100,105,97,109,35,59,32,100,111,116,95,100,105,97,109,35,58,61,105,102,32,109,111,110,111,115,112,97,99,101,58,32,53,47,52,32,102,105,92,32,100,111,116,95,115,105,122,101,35,59,10,32,32,100,101,102,105,110,101,95,119,104,111,108,101,95,98,108,97,99,107,101,114,95,112,105,120,101,108,115,40,100,111,116,95,100,105,97,109,41,59,10,32,32,98,101,103,105,110,99,104,97,114,40,34,46,34,44,53,117,35,44,100,111,116,95,100,105,97,109,35,44,48,41,59,10,32,32,97,100,106,117,115,116,95,102,105,116,40,48,44,48,41,59,32,112,105,99,107,117,112,32,102,105,110,101,46,110,105,98,59,10,32,32,112,111,115,49,40,100,111,116,95,100,105,97,109,44,48,41,59,32,112,111,115,50,40,100,111,116,95,100,105,97,109,44,57,48,41,59,10,32,32,108,102,116,32,120,49,108,61,104,114,111,117,110,100,40,46,53,119,45,46,53,100,111,116,95,100,105,97,109,41,59,32,98,111,116,32,121,50,108,61,48,59,32,122,49,61,122,50,59,32,100,111,116,40,49,44,50,41,59,9,37,32,100,111,116,10,32,32,112,101,110,108,97,98,101,108,115,40,49,44,50,41,59,10,101,110,100,99,104,97,114,59,10,0,0,0,0,0,0,0,0,114,103,98,97,36,108,112,104,97,0,0,0,0,0,0,0,115,36,98,101,122,105,101,114,0,0,0,0,0,0,0,0,37,49,49,46,52,102,0,0,110,111,116,32,100,114,97,119,110,10,0,0,0,0,0,0,79,70,70,10,0,0,0,0,102,108,111,97,116,0,0,0,105,110,112,117,116,32,99,109,114,49,48,46,109,102,10,105,102,32,108,105,103,115,62,49,58,32,102,111,110,116,95,99,111,100,105,110,103,95,115,99,104,101,109,101,58,61,34,84,101,88,32,116,101,120,116,34,59,10,32,32,115,112,97,110,105,115,104,95,115,104,114,105,101,107,61,111,99,116,34,48,55,52,34,59,32,115,112,97,110,105,115,104,95,113,117,101,114,121,61,111,99,116,34,48,55,54,34,59,10,101,108,115,101,58,32,102,111,110,116,95,99,111,100,105,110,103,95,115,99,104,101,109,101,58,61,10,32,32,105,102,32,108,105,103,115,61,48,58,32,34,84,101,88,32,116,121,112,101,119,114,105,116,101,114,32,116,101,120,116,34,10,32,32,101,108,115,101,58,32,34,84,101,88,32,116,101,120,116,32,119,105,116,104,111,117,116,32,102,45,108,105,103,97,116,117,114,101,115,34,32,102,105,59,10,32,32,115,112,97,110,105,115,104,95,115,104,114,105,101,107,61,111,99,116,34,48,49,54,34,59,32,115,112,97,110,105,115,104,95,113,117,101,114,121,61,111,99,116,34,48,49,55,34,59,32,102,105,10,102,111,110,116,95,115,101,116,117,112,59,10,105,110,112,117,116,32,114,111,109,97,110,117,46,109,102,32,37,82,111,109,97,110,32,117,112,112,101,114,99,97,115,101,46,10,105,110,112,117,116,32,114,111,109,97,110,108,46,109,102,32,37,82,111,109,97,110,32,108,111,119,101,114,99,97,115,101,46,10,105,110,112,117,116,32,103,114,101,101,107,117,46,109,102,32,37,71,114,101,101,107,32,117,112,112,101,114,99,97,115,101,46,10,105,110,112,117,116,32,114,111,109,97,110,100,46,109,102,32,37,78,117,109,101,114,97,108,115,46,10,105,110,112,117,116,32,114,111,109,97,110,112,46,109,102,32,37,65,109,112,101,114,115,97,110,100,44,32,113,117,101,115,116,105,111,110,32,109,97,114,107,115,44,32,99,117,114,114,101,110,99,121,32,115,105,103,110,46,10,105,110,112,117,116,32,114,111,109,115,112,108,46,109,102,32,37,76,111,119,101,114,99,97,115,101,32,115,112,101,99,105,97,108,115,32,40,100,111,116,108,101,115,115,32,92,105,44,32,108,105,103,97,116,117,114,101,32,92,97,101,44,32,101,116,99,46,41,10,105,110,112,117,116,32,114,111,109,115,112,117,46,109,102,32,37,85,112,112,101,114,99,97,115,101,32,115,112,101,99,105,97,108,115,32,40,92,65,69,44,32,92,79,69,44,32,92,79,41,10,105,110,112,117,116,32,112,117,110,99,116,46,109,102,32,37,80,117,110,99,116,117,97,116,105,111,110,32,115,121,109,98,111,108,115,46,10,10,109,105,110,117,115,61,65,83,67,73,73,34,45,34,59,32,99,109,99,104,97,114,32,34,77,105,110,117,115,32,115,105,103,110,34,59,10,32,98,101,103,105,110,97,114,105,116,104,99,104,97,114,40,109,105,110,117,115,41,59,32,10,32,32,112,105,99,107,117,112,32,114,117,108,101,46,110,105,98,59,10,32,32,108,102,116,32,120,49,61,104,114,111,117,110,100,32,49,46,53,117,45,101,112,115,59,10,32,32,120,50,61,119,45,120,49,59,32,121,49,61,121,50,61,109,97,116,104,95,97,120,105,115,59,10,32,32,100,114,97,119,32,122,49,45,45,122,50,59,9,32,37,32,98,97,114,10,32,32,108,97,98,101,108,115,40,49,44,50,41,59,32,10,101,110,100,99,104,97,114,59,10,0,0,0,0,0,0,0,0,114,103,98,105,109,97,36,103,101,0,0,0,0,0,0,0,105,110,36,119,97,114,100,115,0,0,0,0,0,0,0,0,9,99,111,110,116,111,117,114,32,102,111,114,32,115,117,114,102,97,99,101,115,32,97,114,101,32,37,115,0,0,0,0,102,105,108,108,101,100,99,117,114,118,101,115,32,0,0,0,78,101,101,100,32,50,32,111,114,32,51,32,99,111,108,117,109,110,115,0,0,0,0,0,99,108,97,117,115,101,0,0,76,111,103,32,115,99,97,108,101,32,111,110,32,89,32,105,115,32,105,110,99,111,109,112,97,116,105,98,108,101,32,119,105,116,104,32,115,116,97,99,107,101,100,32,104,105,115,116,111,103,114,97,109,32,112,108,111,116,10,0,0,0,0,0,80,111,115,105,116,105,118,101,32,105,110,116,101,103,101,114,32,101,120,112,101,99,116,101,100,0,0,0,0,0,0,0,10,100,101,102,32,101,110,100,99,104,97,114,32,61,10,32,32,114,91,99,104,97,114,99,111,100,101,93,58,61,99,117,114,114,101,110,116,112,105,99,116,117,114,101,59,10,32,32,119,100,91,99,104,97,114,99,111,100,101,93,58,61,119,59,104,116,91,99,104,97,114,99,111,100,101,93,58,61,104,59,100,112,91,99,104,97,114,99,111,100,101,93,58,61,100,59,10,32,32,109,101,115,115,97,103,101,32,34,80,105,99,116,117,114,101,32,111,102,32,99,104,97,114,99,111,100,101,32,110,111,46,34,32,38,32,100,101,99,105,109,97,108,32,99,104,97,114,99,111,100,101,59,10,32,32,101,110,100,103,114,111,117,112,59,10,101,110,100,100,101,102,59,10,108,101,116,32,101,110,100,99,104,97,114,95,32,61,32,101,110,100,99,104,97,114,59,10,108,101,116,32,103,101,110,101,114,97,116,101,32,61,32,114,101,108,97,120,59,10,108,101,116,32,114,111,109,97,110,32,61,32,114,101,108,97,120,59,10,0,0,105,109,97,36,103,101,0,0,75,80,95,77,117,108,116,105,112,108,121,0,0,0,0,0,118,97,114,36,105,97,98,108,101,0,0,0,0,0,0,0,97,116,116,101,109,112,116,32,116,111,32,97,115,115,105,103,110,32,116,111,32,115,111,109,101,116,104,105,110,103,32,111,116,104,101,114,32,116,104,97,110,32,97,32,110,97,109,101,100,32,118,97,114,105,97,98,108,101,0,0,0,0,0,0,9,100,97,116,97,32,103,114,105,100,51,100,32,105,115,32,100,105,115,97,98,108,101,100,10,0,0,0,0,0,0,0,10,100,101,102,32,112,117,116,95,116,101,120,116,40,101,120,112,114,32,116,115,44,120,115,116,97,114,116,44,121,115,116,97,114,116,44,114,111,116,44,106,117,115,116,105,102,105,99,97,116,105,111,110,41,32,61,10,32,32,98,101,103,105,110,103,114,111,117,112,10,32,32,32,32,116,101,120,116,95,119,105,100,116,104,58,61,48,59,116,101,120,116,95,104,101,105,103,104,116,58,61,48,59,116,101,120,116,95,100,101,112,116,104,58,61,48,59,10,32,32,32,32,102,111,114,32,105,110,100,58,61,48,32,115,116,101,112,32,49,32,117,110,116,105,108,32,108,101,110,103,116,104,40,116,115,41,45,49,58,10,32,32,32,32,32,32,100,101,99,95,110,117,109,58,61,65,83,67,73,73,32,115,117,98,115,116,114,105,110,103,32,40,105,110,100,44,105,110,100,43,49,41,32,111,102,32,116,115,59,10,32,32,32,32,32,32,105,102,32,117,110,107,110,111,119,110,32,114,91,100,101,99,95,110,117,109,93,58,32,100,101,99,95,110,117,109,58,61,51,50,59,32,102,105,10,32,32,32,32,32,32,105,102,32,100,101,99,95,110,117,109,61,51,50,58,32,10,32,32,32,32,32,32,32,32,116,101,120,116,95,119,105,100,116,104,58,61,116,101,120,116,95,119,105,100,116,104,43,119,100,91,54,53,93,59,10,32,32,32,32,32,32,32,32,116,101,120,116,95,104,101,105,103,104,116,58,61,109,97,120,40,116,101,120,116,95,104,101,105,103,104,116,44,104,116,91,54,53,93,41,59,10,32,32,32,32,32,32,32,32,116,101,120,116,95,100,101,112,116,104,58,61,109,97,120,40,116,101,120,116,95,100,101,112,116,104,44,100,112,91,54,53,93,41,59,10,32,32,32,32,32,32,101,108,115,101,105,102,32,100,101,99,95,110,117,109,62,61,48,58,32,10,32,32,32,32,32,32,32,32,116,101,120,116,95,119,105,100,116,104,58,61,116,101,120,116,95,119,105,100,116,104,43,119,100,91,100,101,99,95,110,117,109,93,59,10,32,32,32,32,32,32,32,32,116,101,120,116,95,104,101,105,103,104,116,58,61,109,97,120,40,116,101,120,116,95,104,101,105,103,104,116,44,104,116,91,100,101,99,95,110,117,109,93,41,59,10,32,32,32,32,32,32,32,32,116,101,120,116,95,100,101,112,116,104,58,61,109,97,120,40,116,101,120,116,95,100,101,112,116,104,44,100,112,91,100,101,99,95,110,117,109,93,41,59,10,32,32,32,32,32,32,102,105,10,32,32,32,32,101,110,100,102,111,114,10,32,32,32,32,105,102,32,114,111,116,61,57,48,58,10,32,32,32,32,32,32,105,102,32,106,117,115,116,105,102,105,99,97,116,105,111,110,61,49,58,32,121,110,101,120,116,58,61,121,115,116,97,114,116,59,10,32,32,32,32,32,32,101,108,115,101,105,102,32,106,117,115,116,105,102,105,99,97,116,105,111,110,61,50,58,32,121,110,101,120,116,58,61,114,111,117,110,100,40,121,115,116,97,114,116,45,116,101,120,116,95,119,105,100,116,104,47,50,41,59,10,32,32,32,32,32,32,101,108,115,101,58,32,121,110,101,120,116,58,61,114,111,117,110,100,40,121,115,116,97,114,116,45,116,101,120,116,95,119,105,100,116,104,41,59,10,32,32,32,32,32,32,102,105,10,32,32,32,32,32,32,120,110,101,120,116,58,61,120,115,116,97,114,116,43,40,116,101,120,116,95,104,101,105,103,104,116,45,116,101,120,116,95,100,101,112,116,104,41,47,50,59,10,32,32,32,32,101,108,115,101,58,10,32,32,32,32,32,32,105,102,32,106,117,115,116,105,102,105,99,97,116,105,111,110,61,49,58,32,120,110,101,120,116,58,61,120,115,116,97,114,116,59,10,32,32,32,32,32,32,101,108,115,101,105,102,32,106,117,115,116,105,102,105,99,97,116,105,111,110,61,50,58,32,120,110,101,120,116,58,61,114,111,117,110,100,40,120,115,116,97,114,116,45,116,101,120,116,95,119,105,100,116,104,47,50,41,59,10,32,32,32,32,32,32,101,108,115,101,58,32,120,110,101,120,116,58,61,114,111,117,110,100,40,120,115,116,97,114,116,45,116,101,120,116,95,119,105,100,116,104,41,59,10,32,32,32,32,32,32,102,105,10,32,32,32,32,32,32,121,110,101,120,116,58,61,121,115,116,97,114,116,45,40,116,101,120,116,95,104,101,105,103,104,116,45,116,101,120,116,95,100,101,112,116,104,41,47,50,59,10,32,32,32,32,102,105,10,32,32,32,32,102,111,114,32,105,110,100,58,61,48,32,115,116,101,112,32,49,32,117,110,116,105,108,32,108,101,110,103,116,104,40,116,115,41,45,49,58,10,32,32,32,32,32,32,100,101,99,95,110,117,109,58,61,65,83,67,73,73,32,115,117,98,115,116,114,105,110,103,32,40,105,110,100,44,105,110,100,43,49,41,32,111,102,32,116,115,59,10,32,32,32,32,32,32,105,102,32,117,110,107,110,111,119,110,32,114,91,100,101,99,95,110,117,109,93,58,32,100,101,99,95,110,117,109,58,61,51,50,59,32,102,105,10,32,32,32,32,32,32,105,102,32,100,101,99,95,110,117,109,61,51,50,58,32,10,32,32,32,32,32,32,32,32,120,110,101,120,116,58,61,120,110,101,120,116,43,119,100,91,54,53,93,42,99,111,115,100,32,114,111,116,59,10,32,32,32,32,32,32,32,32,121,110,101,120,116,58,61,121,110,101,120,116,43,119,100,91,54,53,93,42,115,105,110,100,32,114,111,116,59,10,32,32,32,32,32,32,101,108,115,101,105,102,32,100,101,99,95,110,117,109,62,61,48,58,32,10,32,32,32,32,32,32,32,32,99,117,114,114,101,110,116,112,105,99,116,117,114,101,58,61,99,117,114,114,101,110,116,112,105,99,116,117,114,101,43,114,91,100,101,99,95,110,117,109,93,32,115,104,105,102,116,101,100,40,120,110,101,120,116,44,121,110,101,120,116,41,10,32,32,32,32,32,32,32,32,32,32,114,111,116,97,116,101,100,97,114,111,117,110,100,32,40,40,120,110,101,120,116,44,121,110,101,120,116,41,44,114,111,116,41,59,32,10,32,32,32,32,32,32,32,32,120,110,101,120,116,58,61,120,110,101,120,116,43,119,100,91,100,101,99,95,110,117,109,93,42,99,111,115,100,32,114,111,116,59,10,32,32,32,32,32,32,32,32,121,110,101,120,116,58,61])
+.concat([121,110,101,120,116,43,119,100,91,100,101,99,95,110,117,109,93,42,115,105,110,100,32,114,111,116,59,10,32,32,32,32,32,32,102,105,10,32,32,32,32,101,110,100,102,111,114,10,32,32,101,110,100,103,114,111,117,112,32,10,101,110,100,100,101,102,59,10,0,0,0,0,108,97,98,101,108,115,0,0,44,32,107,100,101,110,115,105,116,121,50,100,32,109,111,100,101,0,0,0,0,0,0,0,99,111,108,111,114,32,97,120,105,115,0,0,0,0,0,0,10,37,73,110,99,108,117,100,101,32,110,101,120,116,32,101,105,103,104,116,32,108,105,110,101,115,32,105,102,32,121,111,117,32,104,97,118,101,32,112,114,111,98,108,101,109,115,32,119,105,116,104,32,116,104,101,32,109,111,100,101,32,111,110,32,121,111,117,114,32,115,121,115,116,101,109,46,46,10,37,112,114,111,111,102,105,110,103,58,61,48,59,10,37,102,111,110,116,109,97,107,105,110,103,58,61,49,59,10,37,116,114,97,99,105,110,103,116,105,116,108,101,115,58,61,48,59,10,37,112,105,120,101,108,115,95,112,101,114,95,105,110,99,104,58,61,51,48,48,59,10,37,98,108,97,99,107,101,114,58,61,48,59,10,37,102,105,108,108,105,110,58,61,46,50,59,10,37,111,95,99,111,114,114,101,99,116,105,111,110,58,61,46,54,59,10,37,102,105,120,95,117,110,105,116,115,59,10,0,0,0,0,0,0,0,0,99,97,110,36,100,108,101,115,116,105,99,107,115,0,0,0,9,100,97,116,97,32,103,114,105,100,51,100,32,105,115,32,101,110,97,98,108,101,100,32,102,111,114,32,109,101,115,104,32,111,102,32,115,105,122,101,32,37,100,120,37,100,44,32,107,101,114,110,101,108,61,37,115,44,10,9,115,99,97,108,101,32,102,97,99,116,111,114,115,32,120,61,37,102,44,32,121,61,37,102,37,115,10,0,105,102,32,117,110,107,110,111,119,110,32,99,109,98,97,115,101,58,32,105,110,112,117,116,32,99,109,98,97,115,101,32,102,105,10,10,116,114,97,99,105,110,103,115,116,97,116,115,58,61,49,59,10,112,105,99,116,117,114,101,32,114,91,93,59,10,10,100,101,102,32,111,112,101,110,105,116,32,61,32,111,112,101,110,119,105,110,100,111,119,32,99,117,114,114,101,110,116,119,105,110,100,111,119,10,32,32,102,114,111,109,32,40,48,44,48,41,32,116,111,32,40,52,48,48,44,56,48,48,41,32,97,116,32,40,45,53,48,44,53,48,48,41,32,101,110,100,100,101,102,59,10,10,109,111,100,101,95,115,101,116,117,112,59,10,0,0,0,102,105,110,36,97,110,99,101,98,97,114,115,0,0,0,0,9,100,97,116,97,32,103,114,105,100,51,100,32,105,115,32,101,110,97,98,108,101,100,32,102,111,114,32,109,101,115,104,32,111,102,32,115,105,122,101,32,37,100,120,37,100,44,32,115,112,108,105,110,101,115,10,0,0,0,0,0,0,0,0,51,32,109,117,108,32,49,32,115,117,98,0,0,0,0,0,101,110,100,99,104,97,114,59,10,0,0,0,0,0,0,0,118,101,99,36,116,111,114,115,0,0,0,0,0,0,0,0,9,100,97,116,97,32,103,114,105,100,51,100,32,105,115,32,101,110,97,98,108,101,100,32,102,111,114,32,109,101,115,104,32,111,102,32,115,105,122,101,32,37,100,120,37,100,44,32,110,111,114,109,61,37,100,10,0,0,0,0,0,0,0,0,68,97,109,97,103,101,100,32,69,68,70,32,104,101,97,100,101,114,32,111,102,32,37,115,58,32,110,111,116,32,109,117,108,116,105,112,108,101,32,111,102,32,53,49,50,32,66,46,10,0,0,0,0,0,0,0,97,58,61,119,47,37,100,59,98,58,61,104,47,37,100,59,10,0,0,0,0,0,0,0,104,105,115,36,116,101,112,115,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,114,101,115,105,100,117,97,108,115,32,97,114,101,32,119,101,105,103,104,116,101,100,32,101,113,117,97,108,108,121,32,40,117,110,105,116,32,119,101,105,103,104,116,41,10,10,0,0,9,99,111,109,109,97,110,100,32,108,105,110,101,32,109,97,99,114,111,115,32,119,105,108,108,32,37,115,98,101,32,101,120,112,97,110,100,101,100,10,0,0,0,0,0,0,0,0,65,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,58,32,37,115,0,0,0,0,10,10,98,101,103,105,110,99,104,97,114,40,37,100,44,37,103,105,110,35,44,37,103,105,110,35,44,48,41,59,10,0,102,115,36,116,101,112,115,0,99,121,108,105,110,100,114,105,99,97,108,10,0,0,0,0,100,114,97,119,32,40,37,100,97,44,37,100,98,41,45,45,40,37,100,97,44,37,100,98,41,59,10,0,0,0,0,0,102,105,108,108,115,116,36,101,112,115,0,0,0,0,0,0,118,97,108,105,100,0,0,0,115,112,104,101,114,105,99,97,108,10,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,39,44,32,60,110,117,109,95,99,111,108,115,62,39,0,0,0,0,0,0,0,0,100,114,97,119,100,111,116,32,40,37,100,97,44,37,100,98,41,59,10,0,0,0,0,0,115,116,36,101,112,115,0,0,99,36,115,112,108,105,110,101,115,0,0,0,0,0,0,0,32,32,83,117,109,32,120,121,58,32,32,32,32,32,32,32,37,46,52,103,10,0,0,0,99,97,114,116,101,115,105,97,110,10,0,0,0,0,0,0,9,37,115,45,97,120,105,115,32,116,105,99,115,58,9,0,108,117,0,0,0,0,0,0,101,114,114,111,114,32,105,110,32,101,100,103,101,51,100,95,105,110,116,101,114,115,101,99,116,0,0,0,0,0,0,0,112,105,99,107,117,112,32,112,101,110,99,105,114,99,108,101,32,115,99,97,108,101,100,32,37,103,116,104,59,10,0,0,98,111,120,120,36,121,101,114,114,111,114,98,97,114,115,0,110,111,109,105,36,114,114,111,114,0,0,0,0,0,0,0,9,109,97,112,112,105,110,103,32,102,111,114,32,51,45,100,32,100,97,116,97,32,105,115,32,0,0,0,0,0,0,0,104,105,115,116,111,103,114,97,109,115,10,0,0,0,0,0,50,32,99,111,108,117,109,110,115,32,111,110,108,121,32,112,111,115,115,105,98,108,101,32,119,105,116,104,32,101,120,112,108,105,99,105,116,32,112,109,51,100,32,115,116,121,108,101,32,40,108,105,110,101,32,37,100,41,0,0,0,0,0,0,76,111,103,32,115,99,97,108,101,32,111,110,32,88,32,105,115,32,105,110,99,111,109,112,97,116,105,98,108,101,32,119,105,116,104,32,104,105,115,116,111,103,114,97,109,32,112,108,111,116,115,10,0,0,0,0,101,120,112,101,99,116,101,100,32,123,101,108,115,101,45,99,108,97,117,115,101,125,0,0,67,111,108,117,109,110,32,110,117,109,98,101,114,32,101,120,112,101,99,116,101,100,0,0,112,117,116,95,116,101,120,116,40,34,37,115,34,44,37,100,97,44,37,100,98,44,37,100,44,37,100,41,59,10,0,0,98,111,120,101,114,36,114,111,114,98,97,114,115,0,0,0,75,80,95,69,113,117,97,108,0,0,0,0,0,0,0,0,65,116,116,101,109,112,116,32,116,111,32,97,115,115,105,103,110,32,116,111,32,97,32,114,101,97,100,45,111,110,108,121,32,118,97,114,105,97,98,108,101,0,0,0,0,0,0,0,9,100,117,109,109,121,32,118,97,114,105,97,98,108,101,115,32,97,114,101,32,34,37,115,34,32,97,110,100,32,34,37,115,34,10,0,0,0,0,0,102,105,108,108,32,97,114,114,111,119,104,101,97,100,32,114,111,116,97,116,101,100,32,97,110,103,108,101,40,37,100,44,37,100,41,32,115,104,105,102,116,101,100,32,40,37,100,97,44,37,100,98,41,59,10,0,102,105,108,108,101,100,99,36,117,114,118,101,115,0,0,0,9,32,32,37,115,45,97,120,105,115,58,32,34,37,115,34,10,0,0,0,0,0,0,0,39,58,39,32,111,114,32,107,101,121,119,111,114,100,32,39,116,111,39,32,101,120,112,101,99,116,101,100,0,0,0,0,102,111,36,110,116,0,0,0,104,105,115,116,36,111,103,114,97,109,115,0,0,0,0,0,9,116,105,99,32,102,111,114,109,97,116,32,105,115,58,10,0,0,0,0,0,0,0,0,109,97,36,103,110,105,102,105,99,97,116,105,111,110,0,0,98,111,120,101,115,0,0,0,9,37,115,32,97,114,101,32,112,108,111,116,116,101,100,32,119,105,116,104,32,0,0,0,51,120,0,0,0,0,0,0,110,111,112,114,111,36,108,111,103,117,101,115,0,0,0,0,120,121,101,36,114,114,111,114,98,97,114,115,0,0,0,0,32,119,105,116,104,32,98,111,114,100,101,114,32,0,0,0,112,114,111,36,108,111,103,117,101,115,0,0,0,0,0,0,120,101,36,114,114,111,114,98,97,114,115,0,0,0,0,0,32,119,105,116,104,32,110,111,32,98,111,114,100,101,114,10,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,35,100,97,116,97,112,111,105,110,116,115,32,61,32,37,100,10,0,0,0,0,0,0,0,110,111,112,115,36,110,102,115,115,0,0,0,0,0,0,0,101,36,114,114,111,114,98,97,114,115,0,0,0,0,0,0,9,70,105,108,108,32,115,116,121,108,101,32,105,115,32,101,109,112,116,121,0,0,0,0,112,115,110,102,115,115,45,118,36,101,114,115,105,111,110,55,0,0,0,0,0,0,0,0,121,101,36,114,114,111,114,98,97,114,115,0,0,0,0,0,9,70,105,108,108,32,115,116,121,108,101,32,117,115,101,115,32,37,115,32,112,97,116,116,101,114,110,115,32,115,116,97,114,116,105,110,103,32,97,116,32,37,100,0,0,0,0,0,112,115,36,110,102,115,115,0,120,121,101,114,114,111,114,108,36,105,110,101,115,0,0,0,98,36,101,122,105,101,114,0,32,32,67,111,114,114,101,108,97,116,105,111,110,58,32,32,114,32,61,32,37,46,52,103,10,0,0,0,0,0,0,0,116,114,97,110,115,112,97,114,101,110,116,0,0,0,0,0,61,0,0,0,0,0,0,0,79,85,84,0,0,0,0,0,117,108,111,110,103,0,0,0,97,109,36,115,116,101,120,0,120,101,114,114,111,114,108,36,105,110,101,115,0,0,0,0,109,105,36,114,114,111,114,0,9,70,105,108,108,32,115,116,121,108,101,32,117,115,101,115,32,37,115,32,115,111,108,105,100,32,99,111,108,111,117,114,32,119,105,116,104,32,100,101,110,115,105,116,121,32,37,46,51,102,0,0,0,0,0,0,98,111,120,101,115,10,0,0,103,101,116,95,100,97,116,97,58,32,107,101,121,32,116,105,116,108,101,32,110,111,116,32,102,111,117,110,100,32,105,110,32,114,101,113,117,101,115,116,101,100,32,99,111,108,117,109,110,10,0,0,0,0,0,0,84,104,105,115,32,112,108,111,116,32,115,116,121,108,101,32,105,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,32,105,110,32,112,111,108,97,114,32,109,111,100,101,0,0,97,52,36,112,97,112,101,114,0,0,0,0,0,0,0,0,101,114,114,111,114,108,36,105,110,101,115,0,0,0,0,0,75,80,95,68,101,108,101,116,101,0,0,0,0,0,0,0,100,101,102,97,117,108,116,32,108,105,110,101,116,121,112,101,115,10,0,0,0,0,0,0,108,97,36,116,101,120,0,0,121,101,114,114,111,114,108,36,105,110,101,115,0,0,0,0,117,115,101,114,45,100,101,102,105,110,101,100,32,108,105,110,101,32,115,116,121,108,101,115,32,114,97,116,104,101,114,32,116,104,97,110,32,100,101,102,97,117,108,116,32,108,105,110,101,32,116,121,112,101,115,10,0,0,0,0,0,0,0,0,116,36,101,120,0,0,0,0,100,36,111,116,115,0,0,0,9,80,108,111,116,32,108,105,110,101,115,32,105,110,99,114,101,109,101,110,116,32,111,118,101,114,32,0,0,0,0,0,110,36,111,116,101,120,0,0,108,112,0,0,0,0,0,0,102,111,114,116,36,114,97,110,0,0,0,0,0,0,0,0,32,116,101,120,116,99,111,108,111,114,32,108,116,32,37,100,0,0,0,0,0,0,0,0,51,32,109,117,108,0,0,0,115,36,111,108,105,100,0,0,108,105,110,101,115,112,36,111,105,110,116,115,0,0,0,0,32,116,105,116,108,101,32,111,102,102,115,101,116,32,0,0,99,36,111,108,111,117,114,0,78,111,32,100,97,116,97,32,116,111,32,102,105,116,32,0,9,72,105,115,116,111,103,114,97,109,32,115,116,121,108,101,32,105,115,32,99,111,108,117,109,110,115,116,97,99,107,101,100,32,0,0,0,0,0,0,99,36,111,108,111,114,0,0,66,97,100,32,97,98,98,114,101,118,105,97,116,101,100,32,109,111,110,116,104,32,110,97,109,101,0,0,0,0,0,0,105,36,109,112,117,108,115,101,115,0,0,0,0,0,0,0,9,72,105,115,116,111,103,114,97,109,32,115,116,121,108,101,32,105,115,32,114,111,119,115,116,97,99,107,101,100,32,0,109,111,36,110,111,99,104,114,111,109,101,0,0,0,0,0,98,111,120,112,108,111,116,0,115,116,114,99,111,108,0,0,9,72,105,115,116,111,103,114,97,109,32,115,116,121,108,101,32,105,115,32,101,114,114,111,114,98,97,114,115,32,119,105,116,104,32,103,97,112,32,37,100,32,108,119,32,37,103,32,0,0,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,39,60,110,117,109,95,99,111,108,115,62,44,60,110,117,109,95,114,111,119,115,62,39,0,0,0,0,0,0,0,112,115,110,115,102,115,115,0,114,101,99,116,36,97,110,103,108,101,0,0,0,0,0,0,97,36,99,115,112,108,105,110,101,115,0,0,0,0,0,0,32,32,76,105,110,101,97,114,32,77,111,100,101,108,58,32,121,32,61,32,37,46,52,103,32,120,32,43,32,37,46,52,103,10,0,0,0,0,0,0,9,72,105,115,116,111,103,114,97,109,32,115,116,121,108,101,32,105,115,32,99,108,117,115,116,101,114,101,100,32,119,105,116,104,32,103,97,112,32,37,100,32,0,0,0,0,0,0,73,78,0,0,0,0,0,0,108,100,0,0,0,0,0,0,112,115,110,115,102,115,115,40,118,55,41,0,0,0,0,0,101,108,108,36,105,112,115,101,0,0,0,0,0,0,0,0,97,114,114,111,119,115,116,121,108,101,32,110,111,116,32,102,111,117,110,100,0,0,0,0,120,121,101,114,114,111,114,98,97,114,115,10,0,0,0,0,101,120,112,101,99,116,105,110,103,32,40,101,120,112,114,101,115,115,105,111,110,41,0,0,39,41,39,32,101,120,112,101,99,116,101,100,0,0,0,0,37,115,32,37,115,32,37,115,116,101,120,37,115,37,115,32,109,97,103,32,37,46,51,102,32,37,115,32,37,115,112,114,111,108,111,103,117,101,115,40,37,100,41,0,0,0,0,0,99,105,114,99,36,108,101,0,75,80,95,80,97,103,101,85,112,0,0,0,0,0,0,0,108,105,110,101,99,36,111,108,111,114,0,0,0,0,0,0,32,40,100,101,102,97,117,108,116,32,108,101,110,103,116,104,32,97,110,100,32,97,110,103,108,101,115,41,10,0,0,0,32,97,109,115,116,101,120,0,104,105,115,116,36,111,103,114,97,109,0,0,0,0,0,0,32,108,101,110,103,116,104,32,37,115,37,103,44,32,97,110,103,108,101,32,37,103,32,100,101,103,0,0,0,0,0,0,115,116,97,114,116,105,110,103,32,114,97,110,103,101,32,118,97,108,117,101,32,111,114,32,39,58,39,32,111,114,32,39,116,111,39,32,101,120,112,101,99,116,101,100,0,0,0,0,32,97,52,112,97,112,101,114,0,0,0,0,0,0,0,0,105,110,99,114,36,101,109,101,110,116,0,0,0,0,0,0,9,32,32,97,114,114,111,119,32,104,101,97,100,115,58,32,37,115,44,32,0,0,0,0,108,97,0,0,0,0,0,0,102,115,0,0,0,0,0,0,32,110,111,104,101,97,100,0,124,99,111,115,40,55,50,48,120,41,124,0,0,0,0,0,9,108,111,97,100,112,97,116,104,32,105,115,32,0,0,0,109,111,110,111,99,104,114,111,109,101,0,0,0,0,0,0,32,111,110,101,32,104,101,97,100,32,0,0,0,0,0,0,99,111,108,111,114,0,0,0,108,36,105,110,101,115,0,0,115,116,114,105,110,103,0,0,37,103,93,10,0,0,0,0,32,98,111,116,104,32,104,101,97,100,115,32,0,0,0,0,98,105,110,100,0,0,0,0,105,108,108,101,103,97,108,32,109,111,110,116,104,0,0,0,37,115,32,37,115,32,37,115,116,101,120,37,115,37,115,32,109,97,103,32,37,46,51,102,32,102,111,110,116,32,34,37,115,44,37,46,50,102,34,32,37,115,112,114,111,108,111,103,117,101,115,40,37,100,41,0,102,36,117,110,99,116,105,111,110,0,0,0,0,0,0,0,9,32,37,115,32,37,115,0,101,120,112,101,99,116,105,110,103,32,102,111,110,116,32,110,97,109,101,0,0,0,0,0,100,36,97,116,97,0,0,0,115,116,114,105,110,103,99,111,108,117,109,110,0,0,0,0,9,97,114,114,111,119,115,116,121,108,101,32,37,100,44,32,0,0,0,0,0,0,0,0,116,111,111,32,109,97,110,121,32,108,97,121,111,117,116,32,99,111,109,109,97,110,100,115,0,0,0,0,0,0,0,0,112,99,114,114,56,114,0,0,103,114,97,121,49,48,48,0,120,50,121,49,0,0,0,0,32,32,76,105,110,101,97,114,32,77,111,100,101,108,58,32,121,32,61,32,37,46,52,103,32,120,32,45,32,37,46,52,103,10,0,0,0,0,0,0,97,112,112,101,97,114,32,105,110,32,116,104,101,32,111,114,100,101,114,32,116,104,101,121,32,119,101,114,101,32,102,111,117,110,100,0,0,0,0,0,9,37,115,45,97,120,105,115,32,116,105,99,115,32,97,114,101,32,37,115,44,32,9,109,97,106,111,114,32,116,105,99,115,99,97,108,101,32,105,115,32,37,103,32,97,110,100,32,109,105,110,111,114,32,116,105,99,115,99,97,108,101,32,105,115,32,37,103,10,0,0,0,108,111,110,103,0,0,0,0,99,109,114,49,48,0,0,0,103,114,97,121,57,48,0,0,97,120,36,105,115,0,0,0,98,101,32,115,111,114,116,101,100,32,97,108,112,104,97,98,101,116,105,99,97,108,108,121,0,0,0,0,0,0,0,0,120,101,114,114,111,114,98,97,114,115,10,0,0,0,0,0,66,97,100,32,100,97,116,97,32,111,110,32,108,105,110,101,32,37,100,32,111,102,32,102,105,108,101,32,37,115,0,0,89,111,117,32,104,97,118,101,32,116,111,32,99,111,109,112,105,108,101,32,103,110,117,112,108,111,116,32,119,105,116,104,32,98,117,105,108,116,105,110,32,114,101,97,100,108,105,110,101,32,111,114,32,71,78,85,32,114,101,97,100,108,105,110,101,32,111,114,32,66,83,68,32,101,100,105,116,108,105,110,101,32,116,111,32,101,110,97,98,108,101,32,104,105,115,116,111,114,121,32,115,117,112,112,111,114,116,46,0,0,0,0,10,100,101,102,32,95,119,99,32,61,32,119,105,116,104,112,101,110,32,99,117,114,114,101,110,116,112,101,110,32,119,105,116,104,99,111,108,111,114,32,99,117,114,114,101,110,116,99,111,108,111,114,32,101,110,100,100,101,102,59,10,100,101,102,32,95,97,99,32,61,32,97,100,100,116,111,32,99,117,114,114,101,110,116,112,105,99,116,117,114,101,32,101,110,100,100,101,102,59,10,100,101,102,32,95,115,109,115,32,61,32,115,99,97,108,101,100,32,109,112,116,32,115,104,105,102,116,101,100,32,101,110,100,100,101,102,59,10,37,32,100,114,97,119,105,110,103,32,112,111,105,110,116,45,116,121,112,101,115,10,100,101,102,32,103,112,100,114,97,119,32,40,101,120,112,114,32,110,44,32,120,44,32,121,41,32,61,10,32,32,105,102,32,110,60,48,58,32,95,97,99,32,99,111,110,116,111,117,114,32,102,117,108,108,99,105,114,99,108,101,32,95,115,109,115,32,40,120,44,121,41,10,32,32,101,108,115,101,105,102,32,40,110,61,49,41,32,111,114,32,40,110,61,51,41,58,10,32,32,32,32,95,97,99,32,100,111,117,98,108,101,112,97,116,104,32,112,116,112,97,116,104,91,110,93,32,95,115,109,115,32,40,120,44,121,41,32,95,119,99,59,10,32,32,32,32,95,97,99,32,100,111,117,98,108,101,112,97,116,104,32,112,116,112,97,116,104,91,110,93,32,114,111,116,97,116,101,100,32,57,48,32,95,115,109,115,32,40,120,44,121,41,32,95,119,99,10,32,32,101,108,115,101,105,102,32,110,60,54,58,32,95,97,99,32,100,111,117,98,108,101,112,97,116,104,32,112,116,112,97,116,104,91,110,93,32,95,115,109,115,32,40,120,44,121,41,32,95,119,99,10,32,32,101,108,115,101,58,32,95,97,99,32,99,111,110,116,111,117,114,32,112,116,112,97,116,104,91,110,93,32,95,115,109,115,32,40,120,44,121,41,32,95,119,99,10,32,32,102,105,10,101,110,100,100,101,102,59,10,10,37,32,116,104,101,32,112,111,105,110,116,32,115,104,97,112,101,115,10,112,97,116,104,32,112,116,112,97,116,104,91,93,59,10,37,100,105,97,109,111,110,100,10,112,116,112,97,116,104,48,32,61,32,112,116,112,97,116,104,54,32,61,32,40,45,49,47,50,44,48,41,45,45,40,48,44,45,49,47,50,41,45,45,40,49,47,50,44,48,41,45,45,40,48,44,49,47,50,41,45,45,99,121,99,108,101,59,10,37,32,112,108,117,115,32,115,105,103,110,10,112,116,112,97,116,104,49,32,61,32,40,45,49,47,50,44,48,41,45,45,40,49,47,50,44,48,41,59,10,37,32,115,113,117,97,114,101,10,112,116,112,97,116,104,50,32,61,32,112,116,112,97,116,104,55,32,61,32,40,45,49,47,50,44,45,49,47,50,41,45,45,40,49,47,50,44,45,49,47,50,41,45,45,40,49,47,50,44,49,47,50,41,45,45,40,45,49,47,50,44,49,47,50,41,45,45,99,121,99,108,101,59,10,37,32,99,114,111,115,115,10,112,116,112,97,116,104,51,32,58,61,32,40,45,49,47,50,44,45,49,47,50,41,45,45,40,49,47,50,44,49,47,50,41,59,10,37,32,99,105,114,99,108,101,58,10,112,116,112,97,116,104,52,32,61,32,112,116,112,97,116,104,56,58,61,32,102,117,108,108,99,105,114,99,108,101,59,10,37,32,116,114,105,97,110,103,108,101,10,112,116,112,97,116,104,53,32,61,32,112,116,112,97,116,104,57,32,58,61,32,40,48,44,49,47,50,41,45,45,40,45,49,47,50,44,45,49,47,50,41,45,45,40,49,47,50,44,45,49,47,50,41,45,45,99,121,99,108,101,59,10,10,100,101,102,32,108,105,110,101,116,121,112,101,32,101,120,112,114,32,110,32,61,10,32,32,99,117,114,114,101,110,116,99,111,108,111,114,58,61,32,105,102,32,99,111,108,111,114,108,105,110,101,115,32,58,32,99,111,108,91,110,93,32,101,108,115,101,58,32,98,108,97,99,107,32,102,105,59,10,32,32,105,102,32,110,32,61,32,45,49,32,58,10,32,32,32,32,32,32,100,114,97,119,111,112,116,105,111,110,115,40,119,105,116,104,99,111,108,111,114,32,99,117,114,114,101,110,116,99,111,108,111,114,32,119,105,116,104,112,101,110,32,40,99,117,114,114,101,110,116,112,101,110,32,115,99,97,108,101,100,32,46,53,41,41,59,10,32,32,101,108,115,101,105,102,32,110,32,60,32,49,32,58,10,32,32,32,32,100,114,97,119,111,112,116,105,111,110,115,40,95,119,99,41,59,10,32,32,101,108,115,101,32,58,10,32,32,32,32,100,114,97,119,111,112,116,105,111,110,115,40,32,105,102,32,100,97,115,104,101,100,108,105,110,101,115,58,32,100,97,115,104,101,100,32,108,116,91,110,93,32,102,105,32,95,119,99,41,59,10,32,32,102,105,10,101,110,100,100,101,102,59,10,10,37,32,100,97,115,104,32,112,97,116,116,101,114,110,115,10,112,105,99,116,117,114,101,32,108,116,91,93,59,10,108,116,49,61,100,97,115,104,112,97,116,116,101,114,110,40,111,110,32,50,32,111,102,102,32,50,41,59,32,37,32,100,97,115,104,101,115,10,108,116,50,61,100,97,115,104,112,97,116,116,101,114,110,40,111,110,32,50,32,111,102,102,32,50,32,111,110,32,48,46,50,32,111,102,102,32,50,41,59,32,37,100,97,115,104,45,100,111,116,10,108,116,51,61,108,116,49,32,115,99,97,108,101,100,32,49,46,52,49,52,59,10,108,116,52,61,108,116,50,32,115,99,97,108,101,100,32,49,46,52,49,52,59,10,108,116,53,61,108,116,49,32,115,99,97,108,101,100,32,50,59,10,108,116,54,58,61,108,116,50,32,115,99,97,108,101,100,32,50,59,10,108,116,55,61,100,97,115,104,112,97,116,116,101,114,110,40,111,110,32,48,46,50,32,111,102,102,32,50,41,59,32,37,100,111,116,115,10,10,99,111,108,111,114,32,99,111,108,91,93,44,99,121,97,110,44,32,109,97,103,101,110,116,97,44,32,121,101,108,108,111,119,59,10,99,121,97,110,61,98,108,117,101,43,103,114,101,101,110,59,32,109,97,103,101,110,116,97,61,114,101,100,43,98,108,117,101,59,121,101,108,108,111,119,61,103,114,101,101,110,43,114,101,100,59,10,99,111,108,91,45,50,93,58,61,99,111,108,91,45,49,93,58,61,99,111,108,48,58,61,98,108,97,99,107,59,10,99,111,108,49,58,61,114,101,100,59,10,99,111,108,50,58,61,40,46,50,44,46,50,44,49,41,59,32,37,98,108,117,101,10,99,111,108,51,58,61,40,49,44,46,54,54,44,48,41,59,32,37,111,114,97,110,103,101,10,99,111,108,52,58,61,46,56,53,42,103,114,101,101,110,59,10,99,111,108,53,58,61,46,57,42,109,97,103,101,110,116,97,59,10,99,111,108,54,58,61,48,46,56,53,42,99,121,97,110,59,10,99,111,108,55,58,61,46,56,53,42,121,101,108,108,111,119,59,10,10,37,112,108,97,99,105,110,103,32,116,101,120,116,10,112,105,99,116,117,114,101,32,71,80,116,101,120,116,59,10,100,101,102,32,112,117,116,95,116,101,120,116,40,101,120,112,114,32,112,105,99,44,32,120,44,32,121,44,32,114,44,32,106,41,32,61,10,32,32,71,80,116,101,120,116,58,61,109,97,107,101,112,105,99,40,112,105,99,41,59,10,32,32,71,80,116,101,120,116,58,61,71,80,116,101,120,116,32,115,104,105,102,116,101,100,10,32,32,32,32,105,102,32,106,32,61,32,49,58,32,40,45,40,117,108,99,111,114,110,101,114,32,71,80,116,101,120,116,32,43,32,108,108,99,111,114,110,101,114,32,71,80,116,101,120,116,41,47,50,41,10,32,32,32,32,101,108,115,101,105,102,32,106,32,61,32,50,58,32,40,45,99,101,110,116,101,114,32,71,80,116,101,120,116,41,10,32,32,32,32,101,108,115,101,58,32,40,45,40,117,114,99,111,114,110,101,114,32,71,80,116,101,120,116,32,43,32,108,114,99,111,114,110,101,114,32,71,80,116,101,120,116,41,47,50,41,10,32,32,32,32,102,105,10,32,32,32,32,114,111,116,97,116,101,100,32,114,59,10,32,32,97,100,100,116,111,32,99,117,114,114,101,110,116,112,105,99,116,117,114,101,32,97,108,115,111,32,71,80,116,101,120,116,32,115,104,105,102,116,101,100,32,40,120,44,121,41,10,101,110,100,100,101,102,59,10,0,0,0,0,0,0,0,0,103,114,97,121,56,48,0,0,75,80,95,85,112,0,0,0,108,99,0,0,0,0,0,0,69,82,82,78,79,0,0,0,9,102,97,99,116,111,114,32,108,97,98,101,108,115,32,119,105,108,108,32,37,115,10,0,100,97,115,104,101,100,108,105,110,101,115,58,61,116,114,117,101,59,10,0,0,0,0,0,103,114,97,121,55,48,0,0,97,114,101,32,111,102,102,0,100,97,115,104,101,100,108,105,110,101,115,58,61,102,97,108,115,101,59,10,0,0,0,0,103,114,97,121,54,48,0,0,105,115,111,95,56,56,53,57,95,49,53,0,0,0,0,0,97,114,101,32,97,117,116,111,109,97,116,105,99,0,0,0,32,120,108,111,119,32,120,104,105,103,104,0,0,0,0,0,99,111,108,111,114,108,105,110,101,115,58,61,102,97,108,115,101,59,10,0,0,0,0,0,103,114,97,121,53,48,0,0,119,105,108,108,32,98,101,32,112,117,116,32,111,110,32,116,104,101,32,120,50,32,97,120,105,115,0,0,0,0,0,0,55,50,48,32,109,117,108,32,99,111,115,32,97,98,115,0,99,111,108,111,114,108,105,110,101,115,58,61,116,114,117,101,59,10,0,0,0,0,0,0,103,114,97,121,52,48,0,0,112,117,115,104,100,50,0,0,119,105,108,108,32,98,101,32,112,117,116,32,111,110,32,116,104,101,32,120,32,97,120,105,115,0,0,0,0,0,0,0,100,114,111,112,108,97,115,116,95,100,121,110,97,114,114,97,121,58,32,100,121,110,97,114,114,97,121,32,119,97,115,110,39,116,32,105,110,105,116,105,97,108,105,122,101,100,33,0,10,99,111,108,111,114,32,99,117,114,114,101,110,116,99,111,108,111,114,59,32,99,117,114,114,101,110,116,99,111,108,111,114,58,61,98,108,97,99,107,59,10,99,111,108,111,114,32,102,105,108,108,99,111,108,111,114,59,10,98,111,111,108,101,97,110,32,99,111,108,111,114,108,105,110,101,115,44,100,97,115,104,101,100,108,105,110,101,115,59,10,0,0,0,0,0,103,114,97,121,51,48,0,0,9,102,97,99,116,111,114,32,108,97,98,101,108,115,32,37,115,10,0,0,0,0,0,0,92,115,101,116,102,111,110,116,123,37,115,125,123,37,53,46,50,102,125,10,101,116,101,120,10,0,0,0,0,0,0,0,103,114,97,121,50,48,0,0,9,115,101,112,97,114,97,116,105,111,110,32,98,101,116,119,101,101,110,32,98,111,120,112,108,111,116,115,32,105,115,32,37,103,10,0,0,0,0,0,10,37,102,111,110,116,32,99,104,97,110,103,101,115,10,118,101,114,98,97,116,105,109,116,101,120,10,92,100,101,102,92,115,101,116,102,111,110,116,35,49,35,50,123,37,46,10,32,32,92,102,111,110,116,92,103,112,102,111,110,116,61,35,49,32,97,116,32,35,50,112,116,10,92,103,112,102,111,110,116,125,10,0,0,0,0,0,0,103,114,97,121,49,48,0,0,9,111,117,116,108,105,101,114,115,32,119,105,108,108,32,110,111,116,32,98,101,32,100,114,97,119,110,10,0,0,0,0,108,97,121,36,111,117,116,0,10,100,101,102,97,117,108,116,102,111,110,116,58,61,32,34,37,115,34,59,10,100,101,102,97,117,108,116,115,99,97,108,101,32,58,61,32,37,54,46,51,102,47,102,111,110,116,115,105,122,101,32,100,101,102,97,117,108,116,102,111,110,116,59,10,0,0,0,0,0,0,0,103,114,97,121,48,0,0,0,120,49,121,50,0,0,0,0,32,32,77,101,100,105,97,110,58,32,32,32,37,115,32,37,115,32,37,115,10,0,0,0,99,100,0,0,0,0,0,0,9,111,117,116,108,105,101,114,115,32,119,105,108,108,32,98,101,32,100,114,97,119,110,32,117,115,105,110,103,32,112,111,105,110,116,32,116,121,112,101,32,37,100,10,0,0,0,0,46,48,0,0,0,0,0,0,118,97,114,100,101,102,32,109,97,107,101,112,105,99,40,101,120,112,114,32,115,116,114,41,32,61,10,32,32,105,102,32,112,105,99,116,117,114,101,32,115,116,114,32,58,32,115,116,114,32,115,99,97,108,101,100,32,116,101,120,116,109,97,103,10,32,32,37,32,111,116,104,101,114,119,105,115,101,32,97,32,115,116,114,105,110,103,10,32,32,101,108,115,101,58,32,115,116,114,32,105,110,102,111,110,116,32,100,101,102,97,117,108,116,102,111,110,116,32,115,99,97,108,101,100,32,40,100,101,102,97,117,108,116,115,99,97,108,101,42,116,101,120,116,109,97,103,41,10,32,32,102,105,10,101,110,100,100,101,102,59,10,10,100,101,102,32,105,110,102,111,110,116,115,105,122,101,40,101,120,112,114,32,115,116,114,44,32,115,105,122,101,41,32,61,10,32,32,105,110,102,111,110,116,32,115,116,114,32,115,99,97,108,101,100,32,40,115,105,122,101,32,47,32,102,111,110,116,115,105,122,101,32,115,116,114,41,10,101,110,100,100,101,102,59,10,0,0,115,108,97,116,101,103,114,97,121,0,0,0,0,0,0,0,116,36,105,99,115,0,0,0,67,97,110,39,116,32,114,101,97,100,32,100,97,116,97,32,102,105,108,101,0,0,0,0,32,32,98,111,120,32,98,121,32,37,53,46,50,102,32,111,102,32,116,104,101,32,105,110,116,101,114,113,117,97,114,116,105,108,101,32,100,105,115,116,97,110,99,101,10,0,0,0,121,101,114,114,111,114,98,97,114,115,10,0,0,0,0,0,10,116,101,120,116,109,97,103,58,61,37,54,46,51,102,59,10,0,0,0,0,0,0,0,100,97,114,107,45,103,114,97,121,0,0,0,0,0,0,0,75,80,95,72,111,109,101,0,98,103,110,100,0,0,0,0,110,111,110,45,115,116,114,105,110,103,32,97,114,103,117,109,101,110,116,32,116,111,32,115,121,115,116,101,109,40,41,0,32,32,109,101,100,105,97,110,32,116,111,32,105,110,99,108,117,100,101,32,37,53,46,50,102,32,111,102,32,116,104,101,32,112,111,105,110,116,115,10,0,0,0,0,0,0,0,0,10,119,97,114,110,105,110,103,99,104,101,99,107,58,61,48,59,10,100,101,102,97,117,108,116,109,112,116,58,61,109,112,116,58,61,52,59,10,116,104,58,61,46,54,59,10,37,37,32,72,97,118,101,32,110,105,99,101,32,115,104,97,114,112,32,106,111,105,110,115,32,111,110,32,111,117,114,32,108,105,110,101,115,10,108,105,110,101,99,97,112,58,61,98,117,116,116,59,10,108,105,110,101,106,111,105,110,58,61,109,105,116,101,114,101,100,59,10,10,100,101,102,32,115,99,97,108,101,112,101,110,32,101,120,112,114,32,110,32,61,32,112,105,99,107,117,112,32,112,101,110,99,105,114,99,108,101,32,115,99,97,108,101,100,32,40,110,42,116,104,41,32,101,110,100,100,101,102,59,10,100,101,102,32,112,116,115,105,122,101,32,101,120,112,114,32,110,32,61,32,109,112,116,58,61,110,42,100,101,102,97,117,108,116,109,112,116,32,101,110,100,100,101,102,59,10,10,0,0,0,0,0,108,105,103,104,116,45,103,114,101,121,0,0,0,0,0,0,9,98,111,120,112,108,111,116,32,114,97,110,103,101,32,101,120,116,101,110,100,115,32,102,114,111,109,32,116,104,101,32,0,0,0,0,0,0,0,0,85,112,112,101,114,32,98,111,117,110,100,32,111,102,32,99,111,110,115,116,114,97,105,110,116,32,60,32,108,111,119,101,114,32,98,111,117,110,100,58,32,32,84,117,114,110,105,110,103,32,111,102,32,99,111,110,115,116,114,97,105,110,116,115,46,0,0,0,0,0,0,0,92,98,101,103,105,110,123,100,111,99,117,109,101,110,116,125,10,101,116,101,120,10,37,32,69,78,68,80,82,69,10,0,108,105,103,104,116,45,103,114,97,121,0,0,0,0,0,0,98,111,120,32,97,110,100,32,119,104,105,115,107,101,114,0,92,117,115,101,112,97,99,107,97,103,101,91,105,110,116,108,105,109,105,116,115,93,123,97,109,115,109,97,116,104,125,10,92,117,115,101,112,97,99,107,97,103,101,123,97,109,115,102,111,110,116,115,125,10,0,0,103,114,101,101,110,121,101,108,108,111,119,0,0,0,0,0,102,105,110,97,110,99,101,32,98,97,114,0,0,0,0,0,124,115,105,110,40,55,50,48,120,41,124,0,0,0,0,0,92,117,115,101,112,97,99,107,97,103,101,91,108,97,116,105,110,49,93,123,105,110,112,117,116,101,110,99,125,10,92,117,115,101,112,97,99,107,97,103,101,91,84,49,93,123,102,111,110,116,101,110,99,125,10,92,117,115,101,112,97,99,107,97,103,101,123,116,101,120,116,99,111,109,112,125,10,92,117,115,101,112,97,99,107,97,103,101,123,109,97,116,104,112,116,109,120,125,10,92,117,115,101,112,97,99,107,97,103,101,91,115,99,97,108,101,100,61,46,57,50,93,123,104,101,108,118,101,116,125,10,92,117,115,101,112,97,99,107,97,103,101,123,99,111,117,114,105,101,114,125,10,92,117,115,101,112,97,99,107,97,103,101,123,108,97,116,101,120,115,121,109,125,10,0,0,99,104,97,114,116,114,101,117,115,101,0,0,0,0,0,0,9,98,111,120,112,108,111,116,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,32,105,115,32,37,115,10,0,0,109,117,108,116,105,112,108,111,116,32,109,111,100,101,32,105,115,32,37,115,10,0,0,0,92,117,115,101,112,97,99,107,97,103,101,91,108,97,116,105,110,49,93,123,105,110,112,117,116,101,110,99,125,10,92,117,115,101,112,97,99,107,97,103,101,91,84,49,93,123,102,111,110,116,101,110,99,125,10,92,117,115,101,112,97,99,107,97,103,101,123,116,105,109,101,115,44,109,97,116,104,112,116,109,120,125,10,92,117,115,101,112,97,99,107,97,103,101,123,104,101,108,118,101,116,125,10,92,117,115,101,112,97,99,107,97,103,101,123,99,111,117,114,105,101,114,125,10,0,0,0,0,97,110,116,105,113,117,101,119,104,105,116,101,0,0,0,0,37,103,58,0,0,0,0,0,44,32,102,105,108,108,115,116,121,108,101,0,0,0,0,0,92,100,111,99,117,109,101,110,116,99,108,97,115,115,123,97,114,116,105,99,108,101,125,10,0,0,0,0,0,0,0,0,115,101,97,103,114,101,101,110,0,0,0,0,0,0,0,0,44,32,108,119,32,37,46,49,102,32,0,0,0,0,0,0,92,100,111,99,117,109,101,110,116,99,108,97,115,115,91,97,52,112,97,112,101,114,93,123,97,114,116,105,99,108,101,125,10,0,0,0,0,0,0,0,115,108,97,116,101,103,114,101,121,0,0,0,0,0,0,0,108,116,32,37,100,0,0,0,110,111,101,110,104,36,97,110,99,101,100,0,0,0,0,0,10,37,37,32,65,100,100,32,92,100,111,99,117,109,101,110,116,99,108,97,115,115,32,97,110,100,32,92,98,101,103,105,110,123,100,99,111,117,109,101,110,116,125,32,102,111,114,32,108,97,116,101,120,10,37,37,32,78,66,32,121,111,117,32,115,104,111,117,108,100,32,115,101,116,32,116,104,101,32,101,110,118,105,114,111,110,109,101,110,116,32,118,97,114,105,97,98,108,101,32,84,69,88,32,116,111,32,116,104,101,32,110,97,109,101,32,111,102,32,121,111,117,114,10,37,37,32,108,97,116,101,120,32,101,120,101,99,117,116,97,98,108,101,32,40,110,111,114,109,97,108,108,121,32,108,97,116,101,120,41,32,105,110,111,114,100,101,114,32,102,111,114,32,109,101,116,97,112,111,115,116,32,116,111,32,119,111,114,107,10,37,37,32,111,114,32,114,117,110,10,37,37,32,109,112,111,115,116,32,45,45,116,101,120,61,108,97,116,101,120,32,46,46,46,10,10,37,32,66,69,71,80,82,69,10,118,101,114,98,97,116,105,109,116,101,120,10,0,104,111,110,101,121,100,101,119,0,0,0,0,0,0,0,0,120,50,121,50,0,0,0,0,32,32,81,117,97,114,116,105,108,101,58,32,37,115,32,37,115,32,37,115,10,0,0,0,98,97,99,107,103,114,111,117,110,100,0,0,0,0,0,0,37,46,49,53,103,0,0,0,117,105,110,116,0,0,0,0,112,114,111,108,111,103,117,101,115,58,61,37,100,59,10,0,99,111,109,109,97,110,100,32,115,116,114,105,110,103,0,0,98,105,115,113,117,101,0,0,98,101,104,105,110,100,0,0,120,121,101,114,114,111,114,108,105,110,101,115,10,0,0,0,78,101,101,100,32,50,32,111,114,32,51,32,99,111,108,117,109,110,115,32,102,111,114,32,112,111,108,97,114,32,100,97,116,97,0,0,0,0,0,0,102,105,108,108,36,115,116,121,108,101,0,0,0,0,0,0,69,120,112,101,99,116,101,100,32,99,111,109,109,97,110,100,32,115,116,114,105,110,103,0,97,118,115,0,0,0,0,0,37,37,71,78,85,80,76,79,84,32,77,101,116,97,112,111,115,116,32,111,117,116,112,117,116,58,32,37,115,10,0,0,108,101,109,111,110,99,104,105,102,102,111,110,0,0,0,0,75,80,95,82,105,103,104,116,0,0,0,0,0,0,0,0,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,105,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,32,116,121,112,101,0,0,0,9,82,101,99,116,97,110,103,108,101,32,115,116,121,108,101,32,105,115,32,37,115,44,32,102,105,108,108,32,99,111,108,111,114,32,0,0,0,0,0,101,110,100,46,10,0,0,0,107,104,97,107,105,49,0,0,9,67,105,114,99,108,101,32,115,116,121,108,101,32,104,97,115,32,100,101,102,97,117,108,116,32,114,97,100,105,117,115,32,0,0,0,0,0,0,0,110,111,32,117,112,112,101,114,32,98,111,117,110,100,32,99,111,110,115,116,114,97,105,110,116,32,97,108,108,111,119,101,100,32,105,102,32,110,111,116,32,97,117,116,111,115,99,97,108,105,110,103,0,0,0,0,99,111,110,116,111,117,114,32,98,95,115,112,108,105,110,101,0,0,0,0,0,0,0,0,37,32,69,78,68,80,79,83,84,10,0,0,0,0,0,0,112,105,110,107,0,0,0,0,115,101,116,32,116,101,114,109,105,110,97,108,32,117,110,107,110,111,119,110,10,0,0,0,44,32,98,111,116,104,32,100,105,97,109,101,116,101,114,115,32,97,114,101,32,105,110,32,116,104,101,32,115,97,109,101,32,117,110,105,116,115,32,97,115,32,116,104,101,32,121,32,97,120,105,115,10,0,0,0,60,110,111,62,0,0,0,0,101,116,101,120,10,0,0,0,108,105,103,104,116,45,115,97,108,109,111,110,0,0,0,0,44,32,98,111,116,104,32,100,105,97,109,101,116,101,114,115,32,97,114,101,32,105,110,32,116,104,101,32,115,97,109,101,32,117,110,105,116,115,32,97,115,32,116,104,101,32,120,32,97,120,105,115,10,0,0,0,55,50,48,32,109,117,108,32,115,105,110,32,97,98,115,0,32,92,101,110,100,123,100,111,99,117,109,101,110,116,125,10,0,0,0,0,0,0,0,0,115,97,110,100,121,98,114,111,119,110,0,0,0,0,0,0,117,0,0,0,0,0,0,0,44,32,100,105,97,109,101,116,101,114,115,32,97,114,101,32,105,110,32,100,105,102,102,101,114,101,110,116,32,117,110,105,116,115,32,40,109,97,106,111,114,58,32,120,32,97,120,105,115,44,32,109,105,110,111,114,58,32,121,32,97,120,105,115,41,10,0,0,0,0,0,0,45,45,104,101,108,112,0,0,118,101,114,98,97,116,105,109,116,101,120,10,0,0,0,0,116,97,110,49,0,0,0,0,42,58,0,0,0,0,0,0,44,32,100,101,102,97,117,108,116,32,97,110,103,108,101,32,105,115,32,37,46,49,102,32,100,101,103,114,101,101,115,0,97,99,116,105,111,110,32,116,97,98,108,101,0,0,0,0,37,32,66,69,71,80,79,83,84,10,0,0,0,0,0,0,115,105,101,110,110,97,49,0,9,69,108,108,105,112,115,101,32,115,116,121,108,101,32,104,97,115,32,100,101,102,97,117,108,116,32,115,105,122,101,32,0,0,0,0,0,0,0,0,101,110,100,102,105,103,59,10,0,0,0,0,0,0,0,0,121,101,108,108,111,119,52,0,70,117,110,99,116,105,111,110,115,0,0,0,0,0,0,0,106,116,101,114,110,0,0,0,101,120,112,101,99,116,105,110,103,32,39,114,97,100,105,97,110,115,39,32,111,114,32,39,100,101,103,114,101,101,115,39,0,0,0,0,0,0,0,0,101,110,104,36,97,110,99,101])
+.concat([100,0,0,0,0,0,0,0,115,99,97,108,101,112,101,110,32,49,59,32,112,116,115,105,122,101,32,37,46,51,102,59,108,105,110,101,116,121,112,101,32,45,50,59,10,0,0,0,115,108,97,116,101,98,108,117,101,49,0,0,0,0,0,0,120,49,121,49,0,0,0,0,68,97,116,97,0,0,0,0,32,32,77,97,120,105,109,117,109,58,32,32,37,115,32,91,37,42,108,100,93,32,32,32,37,115,32,91,37,42,108,100,93,10,0,0,0,0,0,0,37,115,58,37,100,32,112,114,111,116,111,99,111,108,32,101,114,114,111,114,10,0,0,0,100,36,101,103,114,101,101,115,0,0,0,0,0,0,0,0,109,117,108,116,105,112,108,111,116,62,32,0,0,0,0,0,37,48,51,111,0,0,0,0,100,0,0,0,0,0,0,0,97,58,61,119,47,37,46,49,102,59,98,58,61,104,47,37,46,49,102,59,10,0,0,0,109,101,100,105,117,109,112,117,114,112,108,101,51,0,0,0,9,37,115,32,105,115,32,117,110,100,101,102,105,110,101,100,10,0,0,0,0,0,0,0,115,116,121,108,101,32,108,105,110,101,0,0,0,0,0,0,114,36,97,100,105,97,110,115,0,0,0,0,0,0,0,0,120,101,114,114,111,114,108,105,110,101,115,10,0,0,0,0,78,101,101,100,32,49,32,111,114,32,51,32,99,111,108,117,109,110,115,32,102,111,114,32,99,97,114,116,101,115,105,97,110,32,100,97,116,97,0,0,67,97,110,39,116,32,99,104,97,110,103,101,32,116,111,32,116,104,105,115,32,100,105,114,101,99,116,111,114,121,0,0,126,0,0,0,0,0,0,0,83,105,110,103,117,108,97,114,32,109,97,116,114,105,120,32,105,110,32,71,105,118,101,110,115,40,41,0,0,0,0,0,67,97,110,39,116,32,99,97,108,99,117,108,97,116,101,32,97,112,112,114,111,120,105,109,97,116,105,111,110,32,115,112,108,105,110,101,115,44,32,97,108,108,32,119,101,105,103,104,116,115,32,104,97,118,101,32,116,111,32,98,101,32,62,32,48,0,0,0,0,0,0,0,10,98,101,103,105,110,102,105,103,40,37,100,41,59,10,119,58,61,37,46,51,102,105,110,59,104,58,61,37,46,51,102,105,110,59,10,0,0,0,0,99,98,116,105,99,115,0,0,111,114,99,104,105,100,52,0,75,80,95,66,101,103,105,110,0,0,0,0,0,0,0,0,9,37,115,10,0,0,0,0,114,103,98,36,99,111,108,111,114,0,0,0,0,0,0,0,73,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,115,116,114,105,110,103,32,110,111,116,32,97,108,108,111,99,97,116,101,100,0,0,0,0,100,117,112,108,105,99,97,116,101,32,111,114,32,99,111,110,116,114,97,100,105,99,116,111,114,121,32,97,114,103,117,109,101,110,116,115,0,0,0,0,45,45,40,37,46,49,102,97,44,37,46,49,102,98,41,0,115,105,101,110,110,97,52,0,10,9,85,115,101,114,45,68,101,102,105,110,101,100,32,70,117,110,99,116,105,111,110,115,58,10,0,0,0,0,0,0,102,117,110,99,116,105,111,110,32,37,115,32,114,101,113,117,105,114,101,115,32,37,100,32,118,97,114,105,97,98,108,101,37,99,0,0,0,0,0,0,119,114,111,110,103,32,97,114,103,117,109,101,110,116,32,105,110,32,115,101,116,32,97,114,114,111,119,0,0,0,0,0,109,97,108,102,111,114,109,101,100,32,114,97,110,103,101,32,119,105,116,104,32,99,111,110,115,116,114,97,105,110,116,32,40,117,115,101,32,39,60,39,32,111,110,108,121,41,0,0,100,114,97,119,32,40,37,46,49,102,97,44,37,46,49,102,98,41,0,0,0,0,0,0,98,114,111,119,110,52,0,0,100,101,102,97,117,108,116,32,108,97,121,101,114,0,0,0,101,110,100,32,99,111,111,114,100,105,110,97,116,101,115,32,101,120,112,101,99,116,101,100,0,0,0,0,0,0,0,0,108,105,110,101,116,121,112,101,32,37,100,59,10,0,0,0,111,114,97,110,103,101,114,101,100,52,0,0,0,0,0,0,9,71,114,105,100,32,100,114,97,119,110,32,97,116,32,37,115,10,0,0,0,0,0,0,115,116,97,114,116,32,99,111,111,114,100,105,110,97,116,101,115,32,101,120,112,101,99,116,101,100,0,0,0,0,0,0,124,99,111,115,40,51,54,48,120,41,124,0,0,0,0,0,112,117,116,95,116,101,120,116,40,32,98,116,101,120,32,37,115,32,101,116,101,120,44,32,37,46,49,102,97,44,32,37,46,49,102,98,44,32,37,100,44,32,37,100,41,59,10,0,100,97,114,107,45,111,108,105,118,101,103,114,101,101,110,0,100,101,103,114,101,101,115,0,97,114,114,111,119,0,0,0,112,117,116,95,116,101,120,116,40,32,98,116,101,120,32,92,115,101,116,102,111,110,116,123,37,115,125,123,37,53,46,50,102,125,32,37,115,32,101,116,101,120,44,32,37,46,49,102,97,44,32,37,46,49,102,98,44,32,37,100,44,32,37,100,41,59,10,0,0,0,0,0,100,97,114,107,45,112,108,117,109,0,0,0,0,0,0,0,114,97,100,105,97,110,115,0,32,32,32,32,32,32,32,32,32,83,107,105,112,112,101,100,32,37,100,32,112,111,105,110,116,115,32,111,117,116,115,105,100,101,32,114,97,110,103,101,32,91,37,115,61,0,0,0,116,97,103,32,109,117,115,116,32,98,101,32,62,32,48,0,112,117,116,95,116,101,120,116,40,34,37,115,34,44,32,37,46,49,102,97,44,32,37,46,49,102,98,44,32,37,100,44,32,37,100,41,59,10,0,0,112,108,117,109,0,0,0,0,9,71,114,105,100,32,114,97,100,105,105,32,100,114,97,119,110,32,101,118,101,114,121,32,37,102,32,37,115,10,0,0,112,117,116,95,116,101,120,116,40,34,37,115,34,32,105,110,102,111,110,116,115,105,122,101,40,34,37,115,34,44,37,53,46,50,102,41,44,32,37,46,49,102,97,44,32,37,46,49,102,98,44,32,37,100,44,32,37,100,41,59,10,0,0,0,100,97,114,107,45,118,105,111,108,101,116,0,0,0,0,0,10,9,77,105,110,111,114,32,103,114,105,100,32,100,114,97,119,110,32,119,105,116,104,0,106,117,109,112,110,122,0,0,104,101,97,100,36,115,0,0,102,111,110,116,0,0,0,0,103,112,100,114,97,119,40,37,100,44,37,46,49,102,97,44,37,46,49,102,98,41,59,10,0,0,0,0,0,0,0,0,118,105,111,108,101,116,0,0,9,77,97,106,111,114,32,103,114,105,100,32,100,114,97,119,110,32,119,105,116,104,0,0,32,32,77,105,110,105,109,117,109,58,32,32,37,115,32,91,37,42,108,100,93,32,32,32,37,115,32,91,37,42,108,100,93,10,0,0,0,0,0,0,97,115,0,0,0,0,0,0,99,111,110,118,95,116,101,120,116,32,98,117,102,102,101,114,0,0,0,0,0,0,0,0,105,0,0,0,0,0,0,0,100,114,97,119,32,40,37,46,49,102,97,44,37,46,49,102,98,41,45,45,40,37,46,49,102,97,44,37,46,49,102,98,41,59,10,0,0,0,0,0,111,114,97,110,103,101,0,0,32,116,105,99,115,10,0,0,108,105,110,101,116,121,112,101,0,0,0,0,0,0,0,0,121,101,114,114,111,114,108,105,110,101,115,10,0,0,0,0,101,120,112,101,99,116,105,110,103,32,100,105,114,101,99,116,111,114,121,32,110,97,109,101,0,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,100,114,97,119,100,98,108,97,114,114,111,119,0,0,0,0,111,108,105,118,101,0,0,0,75,80,95,76,101,102,116,0,32,109,37,115,0,0,0,0,66,111,116,104,32,112,97,114,97,109,101,116,101,114,115,32,116,111,32,115,116,114,112,116,105,109,101,32,109,117,115,116,32,98,101,32,115,116,114,105,110,103,115,0,0,0,0,0,100,114,97,119,97,114,114,111,119,0,0,0,0,0,0,0,98,101,105,103,101,0,0,0,32,37,115,0,0,0,0,0,98,97,99,107,36,104,101,97,100,0,0,0,0,0,0,0,122,50,0,0,0,0,0,0,37,115,32,40,37,46,49,102,97,44,37,46,49,102,98,41,45,45,40,37,46,49,102,97,44,37,46,49,102,98,41,59,10,0,0,0,0,0,0,0,100,97,114,107,45,103,111,108,100,101,110,114,111,100,0,0,82,101,99,116,97,110,103,117,108,97,114,0,0,0,0,0,121,95,109,105,110,32,115,104,111,117,108,100,32,110,111,116,32,101,113,117,97,108,32,121,95,109,97,120,33,0,0,0,73,110,118,97,108,105,100,32,114,97,110,103,101,0,0,0,112,116,115,105,122,101,32,37,46,51,102,59,10,0,0,0,100,97,114,107,45,107,104,97,107,105,0,0,0,0,0,0,80,111,108,97,114,0,0,0,37,115,102,105,120,109,97,36,120,0,0,0,0,0,0,0,51,54,48,32,109,117,108,32,99,111,115,32,97,98,115,0,102,105,108,108,32,40,37,46,49,102,97,44,37,46,49,102,98,41,45,45,40,37,46,49,102,97,44,37,46,49,102,98,41,45,45,40,37,46,49,102,97,44,37,46,49,102,98,41,45,45,40,37,46,49,102,97,44,37,46,49,102,98,41,45,45,99,121,99,108,101,32,119,105,116,104,112,101,110,32,40,112,101,110,99,105,114,99,108,101,32,115,99,97,108,101,100,32,48,112,116,41,32,119,105,116,104,99,111,108,111,114,32,102,105,108,108,99,111,108,111,114,59,10,0,0,0,0,0,107,104,97,107,105,0,0,0,9,37,115,32,103,114,105,100,32,100,114,97,119,110,32,97,116,0,0,0,0,0,0,0,37,115,102,105,120,109,105,36,110,0,0,0,0,0,0,0,9,32,32,72,105,100,100,101,110,51,100,32,101,108,101,109,101,110,116,115,32,119,105,108,108,32,98,101,32,100,114,97,119,110,32,105,110,32,37,115,32,111,102,32,110,111,110,45,104,105,100,100,101,110,51,100,32,101,108,101,109,101,110,116,115,10,0,0,0,0,0,0,102,105,108,108,32,40,37,46,49,102,97,44,37,46,49,102,98,41,45,45,40,37,46,49,102,97,44,37,46,49,102,98,41,45,45,40,37,46,49,102,97,44,37,46,49,102,98,41,45,45,40,37,46,49,102,97,44,37,46,49,102,98,41,45,45,99,121,99,108,101,32,119,105,116,104,99,111,108,111,114,32,98,97,99,107,103,114,111,117,110,100,59,10,0,0,0,100,97,114,107,45,115,97,108,109,111,110,0,0,0,0,0,9,103,114,105,100,32,105,115,32,79,70,70,10,0,0,0,32,32,32,32,32,32,32,32,32,82,101,97,100,32,37,100,32,112,111,105,110,116,115,10,0,0,0,0,0,0,0,0,37,115,102,105,120,0,0,0,115,99,97,108,101,112,101,110,32,37,46,51,102,59,10,0,115,97,108,109,111,110,0,0,114,97,120,105,115,32,105,115,32,37,115,100,114,97,119,110,10,0,0,0,0,0,0,0,37,115,109,97,36,120,0,0,80,114,101,115,115,32,114,101,116,117,114,110,32,102,111,114,32,109,111,114,101,58,32,0,99,117,114,114,101,110,116,99,111,108,111,114,58,61,37,46,52,103,42,114,101,100,43,37,46,52,103,42,103,114,101,101,110,43,37,46,52,103,42,98,108,117,101,59,10,0,0,0,111,114,97,110,103,101,45,114,101,100,0,0,0,0,0,0,9,37,115,122,101,114,111,97,120,105,115,32,105,115,32,79,70,70,10,0,0,0,0,0,106,117,109,112,122,0,0,0,37,115,109,105,36,110,0,0,116,105,36,116,108,101,0,0,99,117,114,114,101,110,116,99,111,108,111,114,58,61,99,111,108,37,100,59,10,0,0,0,108,105,103,104,116,45,99,111,114,97,108,0,0,0,0,0,125,0,0,0,0,0,0,0,9,37,115,122,101,114,111,97,120,105,115,32,105,115,32,100,114,97,119,110,32,119,105,116,104,0,0,0,0,0,0,0,32,32,83,117,109,32,83,113,46,58,32,32,37,115,32,37,115,32,37,115,10,0,0,0,107,101,36,101,112,102,105,120,0,0,0,0,0,0,0,0,117,110,107,110,111,119,110,32,116,121,112,101,32,105,110,32,100,105,115,112,95,118,97,108,117,101,40,41,0,0,0,0,115,105,110,116,0,0,0,0,99,117,114,114,101,110,116,99,111,108,111,114,58,61,98,108,97,99,107,59,10,0,0,0,108,97,98,101,108,32,110,111,116,32,102,111,117,110,100,0,69,120,116,114,97,110,101,111,117,115,32,97,114,103,117,109,101,110,116,115,32,116,111,32,115,101,116,32,37,115,0,0,102,105,120,0,0,0,0,0,100,111,116,115,10,0,0,0,120,112,45,62,110,101,120,116,95,115,112,32,61,61,32,121,112,0,0,0,0,0,0,0,99,117,114,114,101,110,116,99,111,108,111,114,58,61,37,46,51,103,119,104,105,116,101,59,10,0,0,0,0,0,0,0,100,97,114,107,45,112,105,110,107,0,0,0,0,0,0,0,75,80,95,80,97,103,101,68,111,119,110,0,0,0,0,0,32,112,111,105,110,116,32,119,105,116,104,32,99,111,108,111,114,32,111,102,0,0,0,0,98,117,102,102,101,114,91,108,101,110,103,116,104,45,49,93,32,61,61,32,39,32,39,0,102,117,108,108,36,119,105,100,116,104,0,0,0,0,0,0,59,10,0,0,0,0,0,0,100,97,114,107,45,116,117,114,113,117,111,105,115,101,0,0,32,110,111,112,111,105,110,116,0,0,0,0,0,0,0,0,108,36,97,114,103,101,0,0,100,101,102,97,117,108,116,0,37,115,32,61,32,0,0,0,109,97,108,102,111,114,109,101,100,32,114,97,110,103,101,32,119,105,116,104,32,99,111,110,115,116,97,114,105,110,116,0,99,121,99,108,101,32,119,105,116,104,99,111,108,111,114,32,102,105,108,108,99,111,108,111,114,59,10,0,0,0,0,0,32,102,111,110,116,32,34,37,115,34,0,0,0,0,0,0,120,95,109,105,110,32,115,104,111,117,108,100,32,110,111,116,32,101,113,117,97,108,32,120,95,109,97,120,33,0,0,0,45,45,0,0,0,0,0,0,32,37,115,32,0,0,0,0,101,120,112,101,99,116,105,110,103,32,39,97,98,115,111,108,117,116,101,39,32,111,114,32,39,114,101,108,97,116,105,118,101,39,32,0,0,0,0,0,77,79,85,83,69,95,0,0,124,115,105,110,40,51,54,48,120,41,124,0,0,0,0,0,10,45,45,0,0,0,0,0,116,105,109,101,108,97,98,101,108,46,116,101,120,116,0,0,115,107,121,98,108,117,101,0,32,110,111,116,32,114,111,116,97,116,101,100,0,0,0,0,114,36,101,108,97,116,105,118,101,0,0,0,0,0,0,0,40,37,46,49,102,97,44,37,46,49,102,98,41,37,115,0,109,101,100,105,117,109,45,98,108,117,101,0,0,0,0,0,32,114,111,116,97,116,101,100,32,98,121,32,37,100,32,100,101,103,114,101,101,115,32,40,105,102,32,112,111,115,115,105,98,108,101,41,0,0,0,0,97,36,98,115,111,108,117,116,101,0,0,0,0,0,0,0,98,97,100,32,100,97,116,97,32,111,110,32,108,105,110,101,32,37,100,32,111,102,32,100,97,116,97,102,105,108,101,0,115,101,116,32,37,115,122,101,114,111,97,120,105,115,0,0,102,105,108,108,32,0,0,0,110,97,118,121,0,0,0,0,32,99,101,110,116,114,101,0,112,114,105,110,116,95,116,97,98,108,101,58,32,111,117,116,112,117,116,32,98,117,102,102,101,114,0,0,0,0,0,0,73,110,116,101,114,110,97,108,32,101,114,114,111,114,32,105,110,32,115,99,105,101,110,116,105,102,105,99,32,110,117,109,98,101,114,32,102,111,114,109,97,116,116,105,110,103,0,0,102,105,108,108,99,111,108,111,114,58,61,99,117,114,114,101,110,116,99,111,108,111,114,59,10,0,0,0,0,0,0,0,109,105,100,110,105,103,104,116,45,98,108,117,101,0,0,0,9,108,97,98,101,108,32,37,100,32,34,37,115,34,32,97,116,32,0,0,0,0,0,0,122,95,109,105,110,51,100,32,115,104,111,117,108,100,32,110,111,116,32,101,113,117,97,108,32,122,95,109,97,120,51,100,33,0,0,0,0,0,0,0,106,117,109,112,0,0,0,0,32,40,0,0,0,0,0,0,102,105,108,108,99,111,108,111,114,58,61,99,117,114,114,101,110,116,99,111,108,111,114,42,37,46,50,102,43,98,97,99,107,103,114,111,117,110,100,42,37,46,50,102,59,10,0,0,100,97,114,107,45,98,108,117,101,0,0,0,0,0,0,0,123,0,0,0,0,0,0,0,32,32,83,117,109,58,32,32,32,32,32,32,37,115,32,37,115,32,37,115,10,0,0,0,34,37,115,34,0,0,0,0,102,105,108,108,99,111,108,111,114,58,61,98,97,99,107,103,114,111,117,110,100,59,10,0,44,32,98,97,99,107,97,110,103,108,101,32,37,103,32,100,101,103,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,39,108,105,110,101,97,114,39,44,32,39,99,117,98,105,99,115,112,108,105,110,101,39,44,32,39,98,115,112,108,105,110,101,39,44,32,39,112,111,105,110,116,115,39,44,32,39,108,101,118,101,108,115,39,32,111,114,32,39,111,114,100,101,114,39,0,0,0,0,0,115,101,116,32,37,115,116,105,99,115,32,37,115,32,0,0,108,105,110,101,115,112,111,105,110,116,115,10,0,0,0,0,71,80,86,65,76,95,76,65,83,84,95,80,76,79,84,0,47,0,0,0,0,0,0,0,100,101,102,97,117,108,116,102,111,110,116,0,0,0,0,0,115,101,97,45,103,114,101,101,110,0,0,0,0,0,0,0,75,80,95,68,111,119,110,0,10,9,32,32,97,114,114,111,119,32,104,101,97,100,58,32,108,101,110,103,116,104,32,37,115,37,103,44,32,97,110,103,108,101,32,37,103,32,100,101,103,0,0,0,0,0,0,0,98,115,112,108,105,110,101,32,111,114,100,101,114,32,109,117,115,116,32,98,101,32,105,110,32,91,50,46,46,49,48,93,32,114,97,110,103,101,46,0,32,110,111,114,97,110,103,101,108,105,109,105,116,0,0,0,101,120,116,101,114,110,97,108,36,105,109,97,103,101,115,0,102,111,114,101,115,116,45,103,114,101,101,110,0,0,0,0,40,115,101,99,111,110,100,32,120,32,97,120,105,115,41,32,0,0,0,0,0,0,0,0,111,36,114,100,101,114,0,0,32,114,97,110,103,101,108,105,109,105,116,0,0,0,0,0,117,110,102,105,110,105,115,104,101,100,32,114,97,110,103,101,32,119,105,116,104,32,99,111,110,115,116,114,97,105,110,116,0,0,0,0,0,0,0,0,105,110,108,105,110,101,36,105,109,97,103,101,115,0,0,0,115,112,114,105,110,103,45,103,114,101,101,110,0,0,0,0,40,102,105,114,115,116,32,120,32,97,120,105,115,41,32,0,76,101,118,101,108,115,32,116,121,112,101,32,105,115,32,100,105,115,99,114,101,116,101,44,32,105,103,110,111,114,105,110,103,32,110,101,119,32,110,117,109,98,101,114,32,111,102,32,99,111,110,116,111,117,114,32,108,101,118,101,108,115,0,0,84,101,114,109,105,110,97,108,32,99,97,110,118,97,115,32,97,114,101,97,32,116,111,111,32,115,109,97,108,108,32,116,111,32,104,111,108,100,32,112,108,111,116,46,10,9,32,32,32,32,67,104,101,99,107,32,112,108,111,116,32,98,111,117,110,100,97,114,121,32,97,110,100,32,102,111,110,116,32,115,105,122,101,115,46,0,0,0,112,111,105,110,116,115,119,105,116,104,116,101,120,0,0,0,100,97,114,107,45,103,114,101,101,110,0,0,0,0,0,0,32,116,111,32,0,0,0,0,97,117,36,116,111,0,0,0,10,115,101,116,32,37,115,100,116,105,99,115,0,0,0,0,51,54,48,32,109,117,108,32,115,105,110,32,97,98,115,0,112,111,105,110,116,115,119,105,116,104,109,101,116,97,112,111,115,116,0,0,0,0,0,0,32,114,116,111,32,0,0,0,101,120,112,101,99,116,105,110,103,32,99,111,109,109,97,32,116,111,32,115,101,112,97,114,97,116,101,32,105,110,99,114,44,115,116,111,112,32,108,101,118,101,108,115,0,0,0,0,10,115,101,116,32,37,115,109,116,105,99,115,0,0,0,0,112,111,105,110,116,115,119,105,116,104,109,112,0,0,0,0,103,111,108,100,0,0,0,0,10,9,32,32,102,114,111,109,32,0,0,0,0,0,0,0,105,110,99,114,101,109,101,110,116,32,99,97,110,110,111,116,32,98,101,32,48,0,0,0,97,117,116,111,102,114,101,113,32,0,0,0,0,0,0,0,77,97,120,46,32,110,117,109,98,101,114,32,111,102,32,100,97,116,97,32,112,111,105,110,116,115,32,115,99,97,108,101,100,32,117,112,32,116,111,58,32,37,100,10,0,0,0,0,69,68,70,32,104,101,97,100,101,114,0,0,0,0,0,0,116,101,120,36,112,111,105,110,116,115,0,0,0,0,0,0,108,105,103,104,116,45,116,117,114,113,117,111,105,115,101,0,110,111,102,105,108,108,101,100,0,0,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,99,111,109,109,97,32,116,111,32,115,101,112,97,114,97,116,101,32,115,116,97,114,116,44,105,110,99,114,32,108,101,118,101,108,115,0,0,0,10,115,101,116,32,37,115,116,105,99,115,32,0,0,0,0,108,111,103,49,48,95,98,97,115,101,32,61,61,32,49,46,48,0,0,0,0,0,0,0,109,112,36,112,111,105,110,116,115,0,0,0,0,0,0,0,108,105,103,104,116,45,112,105,110,107,0,0,0,0,0,0,101,109,112,116,121,0,0,0,105,110,36,99,114,101,109,101,110,116,97,108,0,0,0,0,97,115,115,105,103,110,0,0,32,97,117,116,111,106,117,115,116,105,102,121,0,0,0,0,112,111,112,32,48,0,0,0,116,101,120,116,115,99,97,108,101,0,0,0,0,0,0,0,108,105,103,104,116,45,103,111,108,100,101,110,114,111,100,0,119,104,105,108,101,0,0,0,102,105,108,108,101,100,0,0,101,120,112,101,99,116,105,110,103,32,99,111,109,109,97,32,116,111,32,115,101,112,97,114,97,116,101,32,100,105,115,99,114,101,116,101,32,108,101,118,101,108,115,0,0,0,0,0,32,32,83,116,100,32,68,101,118,58,32,32,37,115,32,37,115,32,37,115,10,0,0,0,98,121,32,37,100,32,0,0,117,115,104,111,114,116,0,0,102,111,110,116,115,99,97,108,101,0,0,0,0,0,0,0,108,105,103,104,116,45,99,121,97,110,0,0,0,0,0,0,9,97,114,114,111,119,32,37,100,44,32,37,115,32,37,115,32,37,115,0,0,0,0,0,108,105,110,101,115,116,121,108,101,0,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,100,105,115,99,114,101,116,101,32,108,101,118,101,108,0,0,0,0,0,0,0,0,105,109,112,117,108,115,101,115,10,0,0,0,0,0,0,0,67,97,110,110,111,116,32,99,111,110,116,111,117,114,32,110,111,110,32,103,114,105,100,32,100,97,116,97,46,32,80,108,101,97,115,101,32,117,115,101,32,34,115,101,116,32,100,103,114,105,100,51,100,34,46,0,98,105,110,100,95,99,111,109,109,97,110,100,45,62,114,104,115,0,0,0,0,0,0,0,108,119,0,0,0,0,0,0,108,105,103,104,116,45,109,97,103,101,110,116,97,0,0,0,75,80,95,69,110,100,0,0,9,107,101,121,32,116,105,116,108,101,32,105,115,32,34,37,115,34,10,0,0,0,0,0,100,105,36,115,99,114,101,116,101,0,0,0,0,0,0,0,82,101,115,117,108,116,105,110,103,32,115,116,114,105,110,103,32,105,115,32,116,111,111,32,108,111,110,103,0,0,0,0,108,105,110,101,119,36,105,100,116,104,0,0,0,0,0,0,108,105,103,104,116,45,98,108,117,101,0,0,0,0,0,0,37,100,32,102,111,114,32,118,101,114,116,105,99,97,108,32,97,108,105,103,110,109,101,110,116,10,0,0,0,0,0,0,108,101,36,118,101,108,115,0,111,117,116,0,0,0,0,0,100,108,0,0,0,0,0,0,108,105,103,104,116,45,103,114,101,101,110,0,0,0,0,0,9,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,114,111,119,115,32,105,115,32,0,0,0,0,0,98,36,115,112,108,105,110,101,0,0,0,0,0,0,0,0,107,101,121,0,0,0,0,0,100,97,115,104,108,36,101,110,103,116,104,0,0,0,0,0,108,105,103,104,116,45,114,101,100,0,0,0,0,0,0,0,99,97,108,99,117,108,97,116,101,100,32,97,117,116,111,109,97,116,105,99,97,108,108,121,10,0,0,0,0,0,0,0,99,36,117,98,105,99,115,112,108,105,110,101,0,0,0,0,97,120,105,115,0,0,0,0,99,111,115,40,51,54,48,120,41,0,0,0,0,0,0,0,115,113,117,97,114,101,36,100,0,0,0,0,0,0,0,0,103,114,101,121,49,48,48,0,37,100,32,102,111,114,32,104,111,114,105,122,111,110,116,97,108,32,97,108,105,103,110,109,101,110,116,10,0,0,0,0,108,105,36,110,101,97,114,0,115,101,116,32,37,115,116,105,99,115,32,37,115,32,37,115,32,115,99,97,108,101,32,37,103,44,37,103,32,37,115,109,105,114,114,111,114,32,37,115,32,0,0,0,0,0,0,0,98,101,118,101,108,36,101,100,0,0,0,0,0,0,0,0,103,114,101,121,57,48,0,0,9,109,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,99,111,108,117,109,110,115,32,105,115,32,0,0,115,101,116,32,110,111,37,115,116,105,99,115,10,0,0,0,79,117,116,32,111,102,32,109,101,109,111,114,121,32,105,110,32,102,105,116,58,32,116,111,111,32,109,97,110,121,32,100,97,116,97,112,111,105,110,116,115,32,40,37,100,41,63,0,109,105,116,101,114,36,101,100,0,0,0,0,0,0,0,0,103,114,101,121,56,48,0,0,119,105,116,104,32,99,111,108,117,109,110,32,104,101,97,100,101,114,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,39,98,97,115,101,39,44,32,39,115,117,114,102,97,99,101,39,44,32,111,114,32,39,98,111,116,104,39,0,0,32,108,111,103,102,105,108,101,32,39,37,115,39,0,0,0,115,111,36,108,105,100,0,0,103,114,101,121,55,48,0,0,119,105,116,104,32,102,105,108,101,110,97,109,101,0,0,0,98,111,36,116,104,0,0,0,91,93,0,0,0,0,0,0,115,101,116,32,102,105,116,32,37,115,101,114,114,111,114,118,97,114,105,97,98,108,101,115,0,0,0,0,0,0,0,0,116,101,109,112,32,102,105,108,101,32,115,116,114,105,110,103,0,0,0,0,0,0,0,0,100,97,36,115,104,101,100,0,103,114,101,121,54,48,0,0,117,112,36,100,97,116,101,0,9,115,97,109,112,108,101,32,108,101,110,103,116,104,32,105,115,32,37,103,32,99,104,97,114,97,99,116,101,114,115,10,9,118,101,114,116,105,99,97,108,32,115,112,97,99,105,110,103,32,105,115,32,37,103,32,99,104,97,114,97,99,116,101,114,115,10,9,119,105,100,116,104,32,97,100,106,117,115,116,109,101,110,116,32,105,115,32,37,103,32,99,104,97,114,97,99,116,101,114,115,10,9,104,101,105,103,104,116,32,97,100,106,117,115,116,109,101,110,116,32,105,115,32,37,103,32,99,104,97,114,97,99,116,101,114,115,10,9,99,117,114,118,101,115,32,97,114,101,37,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,116,105,116,108,101,100,32,37,115,10,0,0,0,0,0,0,0,0,115,36,117,114,102,97,99,101,0,0,0,0,0,0,0,0,32,32,77,101,97,110,58,32,32,32,32,32,37,115,32,37,115,32,37,115,10,0,0,0,115,101,116,32,112,115,100,105,114,10,0,0,0,0,0,0,123,37,115,44,32,37,115,125,0,0,0,0,0,0,0,0,115,104,111,114,116,0,0,0,109,111,110,111,36,99,104,114,111,109,101,0,0,0,0,0,103,114,101,121,53,48,0,0,9,107,101,121,32,98,111,120,32,105,115,32,111,112,97,113,117,101,32,97,110,100,32,100,114,97,119,110,32,105,110,32,102,114,111,110,116,32,111,102,32,116,104,101,32,103,114,97,112,104,10,0,0,0,0,0,98,97,36,115,101,0,0,0,115,101,116,32,112,115,100,105,114,32,34,37,115,34,10,0,112,111,105,110,116,115,10,0,65,108,108,32,112,111,105,110,116,115,32,111,102,32,99,111,108,111,114,98,111,120,32,118,97,108,117,101,32,117,110,100,101,102,105,110,101,100,0,0,98,105,110,100,95,99,111,109,109,97,110,100,45,62,108,104,115,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,99,111,108,36,111,117,114,0,103,114,101,121,52,48,0,0,75,80,95,73,110,115,101,114,116,0,0,0,0,0,0,0,110,111,116,32,98,111,120,101,100,10,0,0,0,0,0,0,83,99,97,108,101,32,102,97,99,116,111,114,115,32,109,117,115,116,32,98,101,32,103,114,101,97,116,101,114,32,116,104,97,110,32,122,101,114,111,32,45,32,110,111,116,32,99,104,97,110,103,101,100,33,0,0,115,101,116,32,102,111,110,116,112,97,116,104,32,0,0,0,68,111,117,98,108,101,0,0,102,95,115,116,114,102,116,105,109,101,58,32,98,117,102,102,101,114,0,0,0,0,0,0,105,110,105,116,32,100,121,110,97,114,114,97,121,0,0,0,99,111,108,36,111,114,0,0,103,114,101,121,51,48,0,0,98,111,120,101,100,10,9,119,105,116,104,32,0,0,0,0,78,117,109,98,101,114,32,111,102,32,103,114,105,100,32,112,111,105,110,116,115,32,109,117,115,116,32,98,101,32,105,110,32,91,50,58,49,48,48,48,93,32,45,32,110,111,116,32,99,104,97,110,103,101,100,33,0,0,0,0,0,0,0,0,117,110,102,105,110,105,115,104,101,100,32,114,97,110,103,101,0,0,0,0,0,0,0,0,110,111,104,101,97,100,101,114,0,0,0,0,0,0,0,0,103,114,101,121,50,48,0,0,114,105,103,104,116,0,0,0,85,110,114,101,99,111,103,110,105,122,101,32,107,101,121,119,111,114,100,32,111,114,32,117,110,101,120,112,101,99,116,101,100,32,118,97,108,117,101,0,100,105,102,102,105,99,117,108,116,121,32,109,97,107,105,110,103,32,114,111,111,109,32,102,111,114,32,120,116,105,99,32,108,97,98,101,108,115,0,0,115,101,116,32,108,111,97,100,112,97,116,104,32,0,0,0,104,101,97,100,101,114,0,0,103,114,101,121,49,48,0,0,108,101,102,116,0,0,0,0,107,100,101,110,115,36,105,116,121,50,100,0,0,0,0,0,51,54,48,32,109,117,108,32,99,111,115,0,0,0,0,0,110,111,116,105,109,101,36,115,116,97,109,112,0,0,0,0,103,114,101,121,48,0,0,0,9,107,101,121,32,105,115,32,37,115,32,106,117,115,116,105,102,105,101,100,44,32,37,115,114,101,118,101,114,115,101,100,44,32,37,115,105,110,118,101,114,116,101,100,44,32,37,115,101,110,104,97,110,99,101,100,32,97,110,100,32,0,0,0,100,101,99,105,109,97,108,95,115,105,103,110,32,105,110,32,108,111,99,97,108,101,32,105,115,32,37,115,10,0,0,0,101,114,114,111,114,32,100,117,114,105,110,103,32,102,105,116,0,0,0,0,0,0,0,0,116,105,109,101,36,115,116,97,109,112,0,0,0,0,0,0,116,117,114,113,117,111,105,115,101,0,0,0,0,0,0,0,9,107,101,121,32,105,115,32,97,116,32,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,114,101,113,117,101,115,116,101,100,32,108,111,99,97,108,101,0,115,116,97,110,100,36,97,108,111,110,101,0,0,0,0,0,32,114,109,97,114,103,105,110,0,0,0,0,0,0,0,0,76,65,78,71,0,0,0,0,85,83,69,82,78,65,77,69,0,0,0,0,0,0,0,0,105,110,112,36,117,116,0,0,32,108,109,97,114,103,105,110,0,0,0,0,0,0,0,0,76,67,95,78,85,77,69,82,73,67,0,0,0,0,0,0,110,101,115,0,0,0,0,0,67,108,111,115,105,110,103,32,37,115,10,0,0,0,0,0,100,101,102,97,117,108,116,115,105,122,101,0,0,0,0,0,97,113,117,97,109,97,114,105,110,101,0,0,0,0,0,0,117,110,115,36,101,116,0,0,32,98,109,97,114,103,105,110,0,0,0,0,0,0,0,0,76,67,95,65,76,76,0,0,42,32,67,79,76,85,77,78,83,58,10,0,0,0,0,0,102,114,97,99,116,105,111,110,0,0,0,0,0,0,0,0,117,99,104,97,114,0,0,0,115,105,122,101,0,0,0,0,111,114,99,104,105,100,0,0,32,116,109,97,114,103,105,110,0,0,0,0,0,0,0,0,99,97,110,100,108,101,115,0,108,105,110,101,115,10,0,0,65,108,108,32,112,111,105,110,116,115,32,122,32,118,97,108,117,101,32,117,110,100,101,102,105,110,101,100,0,0,0,0,119,104,105,115,107,101,114,36,98,97,114,115,0,0,0,0,99,111,109,109,97,110,100,46,99,0,0,0,0,0,0,0,100,36,101,102,97,117,108,116,0,0,0,0,0,0,0,0,100,97,114,107,45,99,104,97,114,116,114,101,117,115,101,0,75,80,95,70,52,0,0,0,32,111,117,116,115,105,100,101,0,0,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,115,101,99,111,110,100,32,100,117,109,109,121,32,118,97,114,105,97,98,108,101,32,110,97,109,101,0,0,0,0,120,121,61,37,103,44,37,103,0,0,0,0,0,0,0,0,70,108,111,97,116,0,0,0,102,105,110,97,110,99,101,98,97,114,115,0,0,0,0,0,115,105,122,101,58,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,0,0,0,0,100,97,114,107,45,114,101,100,0,0,0,0,0,0,0,0,32,105,110,115,105,100,101,0,101,120,112,101,99,116,105,110,103,32,100,117,109,109,121,32,118,97,114,105,97,98,108,101,32,110,97,109,101,0,0,0,115,101,116,32,115,116,121,108,101,32,98,111,120,112,108,111,116,32,37,115,32,37,115,32,37,53,46,50,102,32,37,115,111,117,116,108,105,101,114,115,32,112,116,32,37,100,32,115,101,112,97,114,97,116,105,111,110,32,37,103,32,108,97,98,101,108,115,32,37,115,32,37,115,115,111,114,116,101,100,10,0,0,0,0,0,0,0,0,105,110,36,99,104,101,115,0,115,116,101,101,108,98,108,117,101,0,0,0,0,0,0,0,32,104,111,114,105,122,111,110,116,97,108,0,0,0,0,0,105,99,111,110,118,32,102,97,105,108,101,100,32,116,111,32,99,111,110,118,101,114,116,32,100,101,103,114,101,101,32,115,105,103,110,0,0,0,0,0,120,116,105,99,0,0,0,0,10,117,110,115,101,116,32,99,111,108,111,114,98,111,120,10,0,0,0,0,0,0,0,0,115,105,122,101,32,114,101,113,117,105,114,101,115,32,116,119,111,32,110,117,109,98,101,114,115,58,32,32,120,115,105,122,101,44,32,121,115,105,122,101,0,0,0,0,0,0,0,0,112,117,114,112,108,101,0,0,32,118,101,114,116,105,99,97,108,0,0,0,0,0,0,0,105,99,111,110,118,95,111,112,101,110,32,102,97,105,108,101,100,32,102,111,114,32,37,115,0,0,0,0,0,0,0,0,98,111,114,100,101,114,32,37,100,0,0,0,0,0,0,0,115,105,110,40,51,54,48,120,41,0,0,0,0,0,0,0,101,120,112,97,110,100,32,108,111,97,100,112,97,116,104,0,102,111,110,116,32,34,37,115,44,37,103,34,0,0,0,0,100,97,114,107,45,115,112,114,105,110,103,45,103,114,101,101,110,0,0,0,0,0,0,0,32,99,101,110,116,101,114,0,98,100,101,102,97,117,108,116,0,0,0,0,0,0,0,0,109,112,112,111,105,110,116,115,32,0,0,0,0,0,0,0,103,111,108,100,101,110,114,111,100,0,0,0,0,0,0,0,41,0,0,0,0,0,0,0,32,114,105,103,104,116,0,0,117,110,114,101,99,111,103,110,105,122,101,100,32,101,110,99,111,100,105,110,103,32,115,112,101,99,105,102,105,99,97,116,105,111,110,59,32,115,101,101,32,39,104,101,108,112,32,101,110,99,111,100,105,110,103,39,46,0,0,0,0,0,0,0,110,111,98,111,114,100,101,114,0,0,0,0,0,0,0,0,101,114,114,36,111,114,115,116,97,116,101,0,0,0,0,0,73,108,108,101,103,97,108,32,100,97,121,32,111,102,32,121,101,97,114,0,0,0,0,0,116,101,120,112,111,105,110,116,115,32,0,0,0,0,0,0,114,111,121,97,108,98,108,117,101,0,0,0,0,0,0,0,32,108,101,102,116,0,0,0,57,51,50,0,0,0,0,0,47,117,115,114,47,108,111,99,97,108,47,115,104,97,114,101,47,103,104,111,115,116,115,99,114,105,112,116,47,102,111,110,116,115,0,0,0,0,0,0,85,83,69,82,0,0,0,0,115,111,108,105,100,0,0,0,100,97,114,107,45,121,101,108,108,111,119,0,0,0,0,0,83,74,73,83,0,0,0,0,101,113,115,0,0,0,0,0,104,111,114,105,122,111,110,116,0,0,0,0,0,0,0,0,78,111,32,116,101,114,109,105,110,97,108,32,100,101,102,105,110,101,100,0,0,0,0,0,100,97,115,104,101,100,0,0,100,97,114,107,45,111,114,97,110,103,101,0,0,0,0,0,117,110,100,36,101,102,105,110,101,0,0,0,0,0,0,0,9,107,101,121,32,105,115,32,79,78,44,32,112,111,115,105,116,105,111,110,58,32,0,0,118,101,114,116,105,99,0,0,99,0,0,0,0,0,0,0,32,37,115,32,100,97,115,104,108,101,110,103,116,104,32,37,103,32,108,105,110,101,119,105,100,116,104,32,37,103,32,102,111,110,116,115,99,97,108,101,32,37,103,32,92,10,32,32,32,0,0,0,0,0,0,0,100,97,114,107,45,99,121,97,110,0,0,0,0,0,0,0,9,107,101,121,32,105,115,32,79,70,70,10,0,0,0,0,85,84,70,0,0,0,0,0,115,101,116,32,99,111,108,111,114,98,111,120,32,37,115,97,108,32,111,114,105,103,105,110,32,0,0,0,0,0,0,0,32,114,103,98,32,34,35,37,54,46,54,120,34,32,0,0,65,108,108,32,112,111,105,110,116,115,32,121,32,118,97,108,117,101,32,117,110,100,101,102,105,110,101,100,0,0,0,0,84,104,105,115,32,112,108,111,116,32,115,116,121,108,101,32,105,115,32,111,110,108,121,32,102,111,114,32,100,97,116,97,102,105,108,101,115,44,32,114,101,118,101,114,116,105,110,103,32,116,111,32,34,112,111,105,110,116,115,34,0,0,0,0,40,98,105,110,100,95,99,111,109,109,97,110,100,41,32,37,115,58,37,100,10,0,0,0,60,61,0,0,0,0,0,0,114,111,117,110,100,0,0,0,100,97,114,107,45,109,97,103,101,110,116,97,0,0,0,0,75,80,95,70,51,0,0,0,32,111,110,108,121,10,0,0,117,116,102,0,0,0,0,0,37,115,61,37,103,0,0,0,68,111,117,98,108,101,86,97,108,117,101,0,0,0,0,0,102,95,115,116,114,102,116,105,109,101,58,32,102,109,116,0,117,115,101,114,0,0,0,0,98,101,118,101,108,101,100,32,0,0,0,0,0,0,0,0,119,101,98,45,98,108,117,101,0,0,0,0,0,0,0,0,9,110,111,32,108,111,103,115,99,97,108,105,110,103,10,0,108,111,99,97,108,101,0,0,115,101,116,32,99,111,108,111,114,98,111,120,32,37,115,10,0,0,0,0,0,0,0,0,114,111,117,110,100,101,100,32,0,0,0,0,0,0,0,0,119,101,98,45,103,114,101,101,110,0,0,0,0,0,0,0,32,97,110,100,0,0,0,0,117,110,107,110,111,119,110,32,45,45,45,32,101,120,112,101,99,116,101,100,32,39,108,111,103,102,105,108,101,39,32,111,114,32,91,110,111,93,101,114,114,111,114,118,97,114,105,97,98,108,101,115,0,0,0,0,65,108,108,32,112,111,105,110,116,115,32,111,102,32,99,111,108,111,114,32,97,120,105,115,32,117,110,100,101,102,105,110,101,100,46,0,0,0,0,0,105,115,111,95,56,56,53,57,95,57,0,0,0,0,0,0,10,35,32,120,32,121,0,0,109,105,116,101,114,101,100,32,0,0,0,0,0,0,0,0,9,108,111,103,115,99,97,108,105,110,103,0,0,0,0,0,110,111,113,117,105,101,116,0,99,117,98,101,104,101,108,105,120,32,115,116,97,114,116,32,37,46,50,103,32,99,121,99,108,101,115,32,37,46,50,103,32,115,97,116,117,114,97,116,105,111,110,32,37,46,50,103,10,0,0,0,0,0,0,0,51,54,48,32,109,117,108,32,115,105,110,0,0,0,0,0,109,111,110,111,99,104,114,111,109,101,32,0,0,0,0,0,100,97,114,107,45,103,114,101,121,0,0,0,0,0,0,0,37,115,32,37,115,32,40,98,97,115,101,32,37,103,41,0,113,117,105,101,116,0,0,0,102,117,110,99,116,105,111,110,115,32,37,115,44,32,37,115,44,32,37,115,10,0,0,0,112,117,115,104,100,49,0,0,99,111,108,111,114,32,0,0,110,101,120,116,102,114,111,109,95,100,121,110,97,114,114,97,121,58,32,100,121,110,97,114,114,97,121,32,119,97,110,39,116,32,105,110,105,116,105,97,108,105,122,101,100,33,0,0,9,111,102,102,115,101,116,115,32,97,114,101,0,0,0,0,110,111,101,114,114,36,111,114,118,97,114,105,97,98,108,101,115,0,0,0,0,0,0,0,32,41,10,0,0,0,0,0,122,58,115,10,0,0,0,0,34,32,92,10,32,32,32,0,9,116,109,97,114,103,105,110,32,105,115,32,99,111,109,112,117,116,101,100,32,97,117,116,111,109,97,116,105,99,97,108,108,121,10,0,0,0,0,0,101,114,114,36,111,114,118,97,114,105,97,98,108,101,115,0,92,10,32,32,32,32,0,0,47,117,115,114,47,115,104,97,114,101,47,103,104,111,115,116,115,99,114,105,112,116,47,102,111,110,116,115,0,0,0,0,37,51,111,37,110,0,0,0,34,0,0,0,0,0,0,0,99,111,114,110,101,114,115,50,99,36,111,108,111,114,0,0,9,116,109,97,114,103,105,110,32,105,115,32,115,101,116,32,116,111,32,37,103,10,0,0,101,120,112,101,99,116,105,110,103,32,115,116,114,105,110,103,0,0,0,0,0,0,0,0,99,111,110,99,97,116,101,110,97,116,101,0,0,0,0,0,99,97,110,110,111,116,32,111,112,101,110,32,102,105,108,101,59,32,111,117,116,112,117,116,32,110,111,116,32,99,104,97,110,103,101,100,0,0,0,0,37,115,0,0,0,0,0,0,92,10,32,32,32,104,101,97,100,101,114,32,0,0,0,0,101,36,120,112,108,105,99,105,116,0,0,0,0,0,0,0,116,101,115,116,0,0,0,0,9,116,109,97,114,103,105,110,32,105,115,32,115,101,116,32,116,111,32,115,99,114,101,101,110,32,37,103,10,0,0,0,108,111,103,36,102,105,108,101,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,0,0,0,0,0,0,99,97,36,108,108,0,0,0,32,37,46,52,103,32,37,46,52,103,32,37,46,52,103,32,37,46,52,103,0,0,0,0,72,69,76,80,70,73,76,69,32,32,32,32,32,32,32,32,32,32,32,61,32,34,37,115,34,10,0,0,0,0,0,0,115,99,104,97,114,0,0,0,110,111,104,101,97,100,101,114,32,92,10,32,32,32,0,0,110,111,105,36,109,112,108,105,99,105,116,0,0,0,0,0,9,114,109,97,114,103,105,110,32,105,115,32,99,111,109,112,117,116,101,100,32,97,117,116,111,109,97,116,105,99,97,108,108,121,10,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,102,111,114,109,97,116,32,115,116,114,105,110,103,0,100,101,102,105,110,101,100,32,40,0,0,0,0,0,0,0])
+.concat([79,117,116,32,111,102,32,109,101,109,111,114,121,32,105,110,32,115,116,97,116,115,58,32,116,111,111,32,109,97,110,121,32,100,97,116,97,112,111,105,110,116,115,32,40,37,100,41,63,0,0,0,0,0,0,0,32,114,103,98,32,34,37,115,34,32,0,0,0,0,0,0,65,108,108,32,112,111,105,110,116,115,32,120,32,118,97,108,117,101,32,117,110,100,101,102,105,110,101,100,0,0,0,0,34,119,105,116,104,34,32,97,108,108,111,119,101,100,32,111,110,108,121,32,97,102,116,101,114,32,112,97,114,97,109,101,116,114,105,99,32,102,117,110,99,116,105,111,110,32,102,117,108,108,121,32,115,112,101,99,105,102,105,101,100,0,0,0,97,108,108,36,119,105,110,100,111,119,115,0,0,0,0,0,62,61,0,0,0,0,0,0,110,111,116,105,109,101,115,116,97,109,112,0,0,0,0,0,110,111,101,36,120,112,108,105,99,105,116,0,0,0,0,0,75,80,95,70,50,0,0,0,9,114,109,97,114,103,105,110,32,105,115,32,115,101,116,32,116,111,32,37,103,10,0,0,99,108,111,115,101,100,0,0,70,108,111,97,116,86,97,108,117,101,0,0,0,0,0,0,70,105,114,115,116,32,112,97,114,97,109,101,116,101,114,32,116,111,32,115,116,114,102,116,105,109,101,32,109,117,115,116,32,98,101,32,97,32,102,111,114,109,97,116,32,115,116,114,105,110,103,0,0,0,0,0,114,103,98,102,111,114,109,117,108,97,101,32,37,100,44,32,37,100,44,32,37,100,10,0,114,97,36,105,115,101,0,0,100,111,109,97,105,110,0,0,116,105,109,101,115,116,97,109,112,0,0,0,0,0,0,0,105,36,109,112,108,105,99,105,116,0,0,0,0,0,0,0,9,114,109,97,114,103,105,110,32,105,115,32,115,101,116,32,116,111,32,115,99,114,101,101,110,32,37,103,10,0,0,0,78,97,78,0,0,0,0,0,10,115,101,116,32,112,97,108,101,116,116,101,32,0,0,0,119,104,105,99,104,61,61,65,85,84,79,83,67,65,76,69,95,77,73,78,32,124,124,32,119,104,105,99,104,61,61,65,85,84,79,83,67,65,76,69,95,77,65,88,0,0,0,0,105,110,112,117,116,0,0,0,116,114,36,97,110,115,112,97,114,101,110,116,0,0,0,0,9,98,109,97,114,103,105,110,32,105,115,32,99,111,109,112,117,116,101,100,32,97,117,116,111,109,97,116,105,99,97,108,108,121,10,0,0,0,0,0,108,97,121,101,114,100,36,101,102,97,117,108,116,0,0,0,87,97,114,110,105,110,103,32,45,32,100,105,102,102,105,99,117,108,116,121,32,102,105,116,116,105,110,103,32,112,108,111,116,32,116,105,116,108,101,115,32,105,110,116,111,32,107,101,121,0,0,0,0,0,0,0,115,97,118,101,46,99,0,0,115,116,97,110,100,97,108,111,110,101,0,0,0,0,0,0,110,111,115,111,36,108,105,100,0,0,0,0,0,0,0,0,9,98,109,97,114,103,105,110,32,105,115,32,115,101,116,32,116,111,32,37,103,10,0,0,110,111,112,111,36,108,97,114,0,0,0,0,0,0,0,0,37,115,58,37,100,32,111,111,111,112,115,58,32,85,110,107,110,111,119,110,32,99,111,108,111,114,32,109,111,100,101,108,32,39,37,99,39,46,10,0,124,99,111,115,40,49,56,48,120,41,124,0,0,0,0,0,115,105,122,101,32,37,103,37,115,44,37,103,37,115,32,37,115,32,37,115,32,37,115,0,110,111,116,114,36,97,110,115,112,97,114,101,110,116,0,0,9,98,109,97,114,103,105,110,32,105,115,32,115,101,116,32,116,111,32,115,99,114,101,101,110,32,37,103,10,0,0,0,112,111,36,108,97,114,0,0,88,89,90,32,0,0,0,0,107,101,121,119,111,114,100,32,39,100,97,116,97,39,32,100,101,112,114,101,99,97,116,101,100,44,32,117,115,101,32,39,115,104,111,119,32,115,116,121,108,101,32,100,97,116,97,39,0,0,0,0,0,0,0,0,101,120,116,114,97,110,101,111,117,115,32,97,114,103,117,109,101,110,116,32,105,110,32,115,101,116,32,116,101,114,109,105,110,97,108,32,37,115,0,0,9,108,109,97,114,103,105,110,32,105,115,32,99,111,109,112,117,116,101,100,32,97,117,116,111,109,97,116,105,99,97,108,108,121,10,0,0,0,0,0,110,111,114,36,116,105,99,115,0,0,0,0,0,0,0,0,89,73,81,32,0,0,0,0,122,10,0,0,0,0,0,0,71,110,117,112,108,111,116,32,119,97,115,32,98,117,105,108,116,32,119,105,116,104,111,117,116,32,115,117,112,112,111,114,116,32,102,111,114,32,80,78,71,32,105,109,97,103,101,115,46,32,89,111,117,32,99,97,110,110,111,116,32,117,115,101,32,116,104,105,115,32,111,112,116,105,111,110,32,117,110,108,101,115,115,32,121,111,117,32,114,101,98,117,105,108,100,32,103,110,117,112,108,111,116,46,0,0,0,0,0,0,0,0,110,111,104,105,36,100,100,101,110,51,100,0,0,0,0,0,9,108,109,97,114,103,105,110,32,105,115,32,115,101,116,32,116,111,32,37,103,10,0,0,110,111,109,99,98,36,116,105,99,115,0,0,0,0,0,0,67,77,89,32,0,0,0,0,47,117,115,114,47,108,105,98,47,88,49,49,47,102,111,110,116,115,33,0,0,0,0,0,37,52,111,37,110,0,0,0,97,114,114,111,119,32,110,111,116,32,102,111,117,110,100,0,83,116,114,105,110,103,32,99,111,110,116,97,105,110,105,110,103,32,104,101,97,100,101,114,32,105,110,102,111,114,109,97,116,105,111,110,32,101,120,112,101,99,116,101,100,0,0,0,104,105,36,100,100,101,110,51,100,0,0,0,0,0,0,0,9,108,109,97,114,103,105,110,32,105,115,32,115,101,116,32,116,111,32,115,99,114,101,101,110,32,37,103,10,0,0,0,110,111,99,98,36,116,105,99,115,0,0,0,0,0,0,0,72,83,86,32,0,0,0,0,100,111,108,108,97,114,115,0,119,98,0,0,0,0,0,0,101,110,108,0,0,0,0,0,10,92,115,116,97,114,116,116,101,120,116,10,10,0,0,0,109,97,112,0,0,0,0,0,115,121,36,115,116,101,109,0,9,111,117,116,112,117,116,32,105,115,32,115,101,110,116,32,116,111,32,83,84,68,79,85,84,10,0,0,0,0,0,0,110,111,109,121,50,36,116,105,99,115,0,0,0,0,0,0,115,117,109,120,121,0,0,0,82,71,66,32,0,0,0,0,99,104,97,114,0,0,0,0,101,120,116,101,114,110,97,108,0,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,99,104,97,114,97,99,116,101,114,32,37,99,0,0,0,0,99,108,105,112,52,36,105,110,0,0,0,0,0,0,0,0,9,111,117,116,112,117,116,32,105,115,32,115,101,110,116,32,116,111,32,39,37,115,39,10,0,0,0,0,0,0,0,0,110,111,109,120,50,36,116,105,99,115,0,0,0,0,0,0,99,111,108,111,114,32,109,111,100,101,108,32,0,0,0,0,32,114,103,98,32,118,97,114,105,97,98,108,101,32,0,0,110,111,32,102,117,110,99,116,105,111,110,115,32,111,114,32,100,97,116,97,32,116,111,32,112,108,111,116,0,0,0,0,42,0,0,0,0,0,0,0,105,110,108,105,110,101,0,0,99,108,105,112,49,36,105,110,0,0,0,0,0,0,0,0,75,80,95,70,49,0,0,0,9,112,114,105,110,116,32,111,117,116,112,117,116,32,105,115,32,115,101,110,116,32,116,111,32,39,37,115,39,10,0,0,110,111,109,122,36,116,105,99,115,0,0,0,0,0,0,0,98,101,108,111,119,32,0,0,83,105,103,110,101,100,76,111,110,103,0,0,0,0,0,0,102,95,103,112,114,105,110,116,102,0,0,0,0,0,0,0,103,114,97,121,10,0,0,0,32,32,32,32,105,109,97,103,101,115,61,37,115,93,32,37,37,32,42,105,110,108,105,110,101,42,32,124,32,101,120,116,101,114,110,97,108,32,40,105,110,108,105,110,101,32,111,110,108,121,32,119,111,114,107,115,32,105,110,32,77,75,73,86,44,32,101,120,116,101,114,110,97,108,32,114,101,113,117,105,114,101,115,32,112,110,103,32,115,117,112,112,111,114,116,32,105,110,32,103,110,117,112,108,111,116,41,10,0,0,0,0,110,111,102,116,114,36,105,97,110,103,108,101,115,0,0,0,9,100,101,102,97,117,108,116,32,115,121,115,116,101,109,32,100,105,114,101,99,116,111,114,121,32,34,37,115,34,10,0,110,111,109,121,36,116,105,99,115,0,0,0,0,0,0,0,103,97,109,109,97,32,37,103,32,0,0,0,0,0,0,0,99,111,110,116,111,117,114,32,99,111,111,114,100,115,0,0,73,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,111,117,116,32,111,102,32,109,101,109,111,114,121,32,105,110,32,115,116,97,116,115,0,0,116,101,120,0,0,0,0,0,102,116,114,36,105,97,110,103,108,101,115,0,0,0,0,0,110,111,109,120,36,116,105,99,115,0,0,0,0,0,0,0,115,101,116,32,116,101,114,109,105,110,97,108,32,37,115,32,37,115,10,0,0,0,0,0,98,111,117,110,100,97,114,121,0,0,0,0,0,0,0,0,35,32,67,111,110,116,111,117,114,58,32,112,111,105,110,116,115,32,37,105,44,32,122,32,37,103,44,32,108,97,98,101,108,58,32,37,115,10,0,0,109,101,116,97,112,111,115,116,0,0,0,0,0,0,0,0,102,108,36,117,115,104,0,0,9,101,110,118,105,114,111,110,109,101,110,116,32,118,97,114,105,97,98,108,101,32,71,78,85,80,76,79,84,95,80,83,95,68,73,82,58,32,0,0,110,111,121,50,36,116,105,99,115,0,0,0,0,0,0,0,117,115,101,32,39,115,101,116,32,116,101,114,109,39,32,116,111,32,115,101,116,32,116,101,114,109,105,110,97,108,32,116,121,112,101,32,102,105,114,115,116,0,0,0,0,0,0,0,49,56,48,32,109,117,108,32,99,111,115,32,97,98,115,0,32,32,32,32,112,111,105,110,116,115,61,37,115,44,32,37,37,32,42,109,101,116,97,112,111,115,116,42,32,124,32,116,101,120,32,40,83,104,111,117,108,100,32,112,111,105,110,116,115,32,98,101,32,100,114,97,119,110,32,119,105,116,104,32,77,101,116,97,80,111,115,116,32,111,114,32,84,101,88,63,41,10,0,0,0,0,0,0,100,101,112,36,116,104,111,114,100,101,114,0,0,0,0,0,110,111,110,101,0,0,0,0,110,111,120,50,36,116,105,99,115,0,0,0,0,0,0,0,110,101,103,97,116,105,118,101,0,0,0,0,0,0,0,0,45,104,0,0,0,0,0,0,32,32,32,32,37,37,102,111,110,116,115,99,97,108,101,61,37,103,44,32,37,37,32,115,99,97,108,105,110,103,32,102,97,99,116,111,114,32,102,111,114,32,116,101,120,116,32,108,97,98,101,108,115,10,0,0,115,99,97,110,115,97,117,116,111,36,109,97,116,105,99,0,110,111,122,36,116,105,99,115,0,0,0,0,0,0,0,0,112,111,115,105,116,105,118,101,0,0,0,0,0,0,0,0,37,115,58,0,0,0,0,0,101,120,112,114,101,115,115,105,111,110,32,101,120,112,101,99,116,101,100,0,0,0,0,0,32,32,32,32,108,105,110,101,119,105,100,116,104,61,37,103,44,32,37,37,32,115,99,97,108,105,110,103,32,102,97,99,116,111,114,32,102,111,114,32,108,105,110,101,32,119,105,100,116,104,115,32,40,49,46,48,32,109,101,97,110,115,32,48,46,53,98,112,41,10,0,0,115,99,97,110,115,98,97,99,107,36,119,97,114,100,0,0,9,100,105,114,101,99,116,111,114,121,32,102,114,111,109,32,39,115,101,116,32,112,115,100,105,114,39,58,32,0,0,0,110,111,121,36,116,105,99,115,0,0,0,0,0,0,0,0,115,101,116,32,112,97,108,101,116,116,101,32,37,115,32,37,115,32,109,97,120,99,111,108,111,114,115,32,37,100,32,0,47,117,115,114,47,88,49,49,82,54,47,108,105,98,47,88,49,49,47,102,111,110,116,115,47,116,114,117,101,116,121,112,101,0,0,0,0,0,0,0,119,97,114,110,105,110,103,58,32,0,0,0,0,0,0,0,101,120,116,114,97,110,101,111,117,115,32,97,114,103,117,109,101,110,116,115,32,116,111,32,117,110,115,101,116,32,97,114,114,111,119,0,0,0,0,0,32,32,32,32,100,97,115,104,108,101,110,103,116,104,61,37,103,44,32,37,37,32,115,99,97,108,105,110,103,32,102,97,99,116,111,114,32,102,111,114,32,100,97,115,104,32,108,101,110,103,116,104,115,10,0,0,115,99,97,110,115,102,111,114,36,119,97,114,100,0,0,0,9,112,97,114,97,109,101,116,114,105,99,32,105,115,32,37,115,10,0,0,0,0,0,0,110,111,120,36,116,105,99,115,0,0,0,0,0,0,0,0,99,37,105,0,0,0,0,0,98,111,111,108,0,0,0,0,99,97,110,110,111,116,32,99,114,101,97,116,101,32,112,105,112,101,59,32,111,117,116,112,117,116,32,110,111,116,32,99,104,97,110,103,101,100,0,0,10,35,32,67,111,110,116,111,117,114,32,37,100,44,32,108,97,98,101,108,58,32,37,115,10,0,0,0,0,0,0,0,110,111,0,0,0,0,0,0,105,110,116,101,114,112,36,111,108,97,116,101,0,0,0,0,115,116,36,97,116,115,0,0,35,37,48,50,120,37,48,50,120,37,48,50,120,32,61,32,37,51,105,32,37,51,105,32,37,51,105,0,0,0,0,0,105,103,110,111,114,105,110,103,32,108,101,102,116,47,99,101,110,116,101,114,47,114,105,103,104,116,59,32,105,110,99,111,109,112,97,116,105,98,108,101,32,119,105,116,104,32,108,109,97,114,103,105,110,47,116,109,97,114,103,105,110,46,0,0,99,111,114,114,101,108,97,116,105,111,110,0,0,0,0,0,114,101,112,108,111,116,0,0,101,120,116,101,110,100,32,116,111,107,101,110,32,116,97,98,108,101,0,0,0,0,0,0,71,78,85,80,76,79,84,95,80,83,95,68,73,82,32,32,32,32,32,61,32,34,37,115,34,10,0,0,0,0,0,0,122,114,116,0,0,0,0,0,121,101,115,0,0,0,0,0,88,89,90,0,0,0,0,0,10,32,32,37,45,49,56,115,32,0,0,0,0,0,0,0,111,102,36,102,115,101,116,0,105,103,110,111,114,105,110,103,32,116,111,112,47,99,101,110,116,101,114,47,98,111,116,116,111,109,59,32,105,110,99,111,109,112,97,116,105,98,108,101,32,119,105,116,104,32,116,109,97,114,103,105,110,47,98,109,97,114,103,105,110,46,0,0,32,112,97,108,101,116,116,101,32,102,114,97,99,116,105,111,110,32,37,52,46,50,102,0,105,103,110,111,114,105,110,103,32,116,114,97,105,108,105,110,103,32,99,111,109,109,97,32,105,110,32,112,108,111,116,32,99,111,109,109,97,110,100,0,46,103,110,117,112,108,111,116,0,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,117,115,97,103,101,58,32,114,97,105,115,101,32,123,112,108,111,116,95,105,100,125,0,0,119,32,61,32,48,32,105,110,32,71,105,118,101,110,115,40,41,59,32,32,67,106,106,32,61,32,37,103,44,32,32,67,105,106,32,61,32,37,103,0,67,97,110,39,116,32,99,97,108,99,117,108,97,116,101,32,97,112,112,114,111,120,105,109,97,116,105,111,110,32,115,112,108,105,110,101,115,44,32,110,101,101,100,32,97,116,32,108,101,97,115,116,32,52,32,112,111,105,110,116,115,0,0,0,32,32,32,32,100,97,115,104,101,100,61,37,115,44,32,37,37,32,42,121,101,115,42,32,124,32,110,111,10,0,0,0,89,73,81,0,0,0,0,0,75,80,95,84,97,98,0,0,102,105,108,108,101,100,95,112,111,108,121,103,111,110,95,122,102,105,120,32,99,111,114,110,101,114,115,0,0,0,0,0,9,84,104,101,114,101,32,97,114,101,32,37,100,32,112,114,101,100,101,102,105,110,101,100,32,99,111,108,111,114,32,110,97,109,101,115,58,0,0,0,117,110,107,110,111,119,110,32,107,101,121,32,111,112,116,105,111,110,0,0,0,0,0,0,97,98,111,118,101,32,0,0,85,110,115,105,103,110,101,100,76,111,110,103,0,0,0,0,70,105,114,115,116,32,112,97,114,97,109,101,116,101,114,32,116,111,32,103,112,114,105,110,116,102,32,109,117,115,116,32,98,101,32,97,32,102,111,114,109,97,116,32,115,116,114,105,110,103,0,0,0,0,0,0,99,97,110,32,111,110,108,121,32,100,111,32,101,108,108,105,112,116,105,99,32,105,110,116,101,103,114,97,108,115,32,111,102,32,114,101,97,108,115,0,44,32,37,37,32,42,98,117,116,116,42,32,124,32,114,111,117,110,100,101,100,32,124,32,115,113,117,97,114,101,100,10,0,0,0,0,0,0,0,0,67,77,89,0,0,0,0,0,37,105,9,37,105,9,37,105,10,0,0,0,0,0,0,0,97,36,117,116,111,109,97,116,105,99,0,0,0,0,0,0,114,101,99,117,114,115,105,111,110,32,100,101,112,116,104,32,108,105,109,105,116,32,101,120,99,101,101,100,101,100,0,0,116,105,99,107,32,105,110,116,101,114,118,97,108,32,116,111,111,32,115,109,97,108,108,32,102,111,114,32,109,97,99,104,105,110,101,32,112,114,101,99,105,115,105,111,110,0,0,0,115,113,117,97,114,101,100,0,72,83,86,0,0,0,0,0,37,48,46,52,102,9,37,48,46,52,102,9,37,48,46,52,102,10,0,0,0,0,0,0,99,111,108,36,117,109,110,104,101,97,100,101,114,0,0,0,95,94,0,0,0,0,0,0,98,117,116,116,0,0,0,0,82,71,66,0,0,0,0,0,46,10,0,0,0,0,0,0,77,117,108,116,105,112,108,101,32,115,116,97,99,107,32,100,105,114,101,99,116,105,111,110,32,115,101,116,116,105,110,103,115,0,0,0,0,0,0,0,32,99,111,114,110,101,114,115,50,99,111,108,111,114,32,0,115,105,110,40,49,56,48,120,41,0,0,0,0,0,0,0,32,32,32,32,108,105,110,101,99,97,112,61,0,0,0,0,99,117,98,101,104,101,108,105,120,0,0,0,0,0,0,0,32,115,97,118,101,100,32,116,111,32,34,37,115,34,46,0,77,117,108,116,105,112,108,101,32,108,111,99,97,116,105,111,110,32,114,101,103,105,111,110,32,115,101,116,116,105,110,103,115,0,0,0,0,0,0,0,32,110,111,104,105,100,100,101,110,51,100,0,0,0,0,0,105,110,118,101,114,115,101,95,101,114,114,111,114,95,102,117,110,99,58,32,84,104,101,32,118,97,108,117,101,32,111,117,116,32,111,102,32,116,104,101,32,114,97,110,103,101,32,111,102,32,116,104,101,32,102,117,110,99,116,105,111,110,0,0,44,32,37,37,32,42,109,105,116,101,114,101,100,42,32,124,32,114,111,117,110,100,101,100,32,124,32,98,101,118,101,108,101,100,10,0,0,0,0,0,103,97,109,36,109,97,0,0,67,111,108,111,114,0,0,0,77,117,108,116,105,112,108,101,32,104,111,114,105,122,111,110,116,97,108,32,112,111,115,105,116,105,111,110,32,115,101,116,116,105,110,103,115,0,0,0,32,104,105,100,100,101,110,51,100,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,102,111,114,109,97,116,32,61,32,0,0,0,0,0,0,0,98,101,118,101,108,101,100,0,109,97,120,99,36,111,108,111,114,115,0,0,0,0,0,0,71,114,97,121,0,0,0,0,77,117,108,116,105,112,108,101,32,118,101,114,116,105,99,97,108,32,112,111,115,105,116,105,111,110,32,115,101,116,116,105,110,103,115,0,0,0,0,0,32,104,105,100,100,101,110,51,100,32,37,100,0,0,0,0,47,117,115,114,47,88,49,49,82,54,47,108,105,98,47,88,49,49,47,102,111,110,116,115,47,84,121,112,101,49,0,0,71,80,86,65,76,95,69,82,82,77,83,71,0,0,0,0,116,121,120,0,0,0,0,0,114,111,117,110,100,101,100,0,112,115,95,97,108,108,99,70,0,0,0,0,0,0,0,0,37,115,32,112,97,108,101,116,116,101,32,119,105,116,104,32,37,105,32,100,105,115,99,114,101,116,101,32,99,111,108,111,114,115,0,0,0,0,0,0,102,105,108,108,95,110,117,109,98,101,114,115,32,99,108,111,115,105,110,103,0,0,0,0,102,116,114,105,97,110,103,108,101,115,0,0,0,0,0,0,102,97,99,116,111,114,105,97,108,0,0,0,0,0,0,0,119,0,0,0,0,0,0,0,37,99,10,0,0,0,0,0,109,105,116,101,114,101,100,0,110,111,112,115,95,97,108,108,99,70,0,0,0,0,0,0,115,112,36,108,111,116,0,0,101,120,112,101,99,116,105,110,103,32,110,111,32,111,112,116,105,111,110,32,111,114,32,105,110,116,32,111,114,32,102,108,111,97,116,0,0,0,0,0,115,116,114,105,110,103,32,101,120,112,101,99,116,101,100,0,105,110,116,101,114,99,101,112,116,0,0,0,0,0,0,0,32,110,111,0,0,0,0,0,47,117,115,114,47,108,111,99,97,108,47,115,104,97,114,101,47,103,110,117,112,108,111,116,47,52,46,54,47,103,110,117,112,108,111,116,46,103,105,104,0,0,0,0,0,0,0,0,116,122,114,0,0,0,0,0,108,105,110,101,106,111,105,110,61,0,0,0,0,0,0,0,109,111,36,100,101,108,0,0,105,36,110,116,0,0,0,0,110,111,112,111,36,105,110,116,0,0,0,0,0,0,0,0,102,105,108,108,95,110,117,109,98,101,114,115,32,114,101,115,105,122,101,32,112,97,116,116,101,114,110,0,0,0,0,0,67,111,110,102,108,105,99,116,32,98,101,116,119,101,101,110,32,115,111,109,101,32,109,97,116,114,105,120,32,98,105,110,97,114,121,32,97,110,100,32,103,101,110,101,114,97,108,32,98,105,110,97,114,121,32,107,101,121,119,111,114,100,115,0,32,112,97,108,101,116,116,101,32,99,98,32,37,103,0,0,115,97,109,112,108,101,115,32,111,114,32,105,115,111,95,115,97,109,112,108,101,115,32,60,32,50,46,32,77,117,115,116,32,98,101,32,97,116,32,108,101,97,115,116,32,50,46,0,103,110,117,112,108,111,116,114,99,0,0,0,0,0,0,0,62,0,0,0,0,0,0,0,117,115,97,103,101,58,32,108,111,119,101,114,32,123,112,108,111,116,95,105,100,125,0,0,92,115,101,116,117,112,71,78,85,80,76,79,84,116,101,114,109,105,110,97,108,10,32,32,32,91,99,111,110,116,101,120,116,93,10,32,32,32,91,0,102,117,110,99,36,116,105,111,110,115,0,0,0,0,0,0,75,80,95,83,112,97,99,101,0,0,0,0,0,0,0,0,102,36,108,111,97,116,0,0,102,105,108,108,95,110,117,109,98,101,114,115,32,110,101,120,116,32,110,117,109,98,101,114,0,0,0,0,0,0,0,0,115,121,110,116,97,120,32,105,115,32,120,121,61,60,120,62,44,60,121,62,0,0,0,0,83,105,103,110,101,100,73,110,116,101,103,101,114,0,0,0,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,105,110,118,97,108,105,100,32,115,112,101,99,95,116,121,112,101,0,0,0,0,0,0,0,76,97,115,116,32,108,105,110,101,32,109,117,115,116,32,110,111,116,32,98,101,32,98,101,102,111,114,101,32,102,105,114,115,116,32,108,105,110,101,0,92,115,101,116,117,112,98,111,100,121,102,111,110,116,10,32,32,32,91,37,115,37,115,37,103,112,116,93,10,0,0,0,102,105,108,101,0,0,0,0,112,97,108,101,116,116,101,32,115,105,122,101,32,114,101,113,117,105,114,101,100,0,0,0,99,111,110,115,116,97,110,116,32,101,120,112,114,101,115,115,105,111,110,32,101,120,112,101,99,116,101,100,0,0,0,0,98,101,103,105,110,0,0,0,76,97,115,116,32,112,111,105,110,116,32,109,117,115,116,32,110,111,116,32,98,101,32,98,101,102,111,114,101,32,102,105,114,115,116,32,112,111,105,110,116,0,0,0,0,0,0,0,84,111,111,32,109,97,110,121,32,97,120,105,115,32,116,105,99,107,115,32,114,101,113,117,101,115,116,101,100,32,40,62,37,46,48,103,41,0,0,0,102,117,110,99,116,105,111,110,32,37,115,32,114,101,113,117,105,114,101,115,32,37,100,32,118,97,114,105,97,98,108,101,115,0,0,0,0,0,0,0,92,100,101,102,105,110,101,98,111,100,121,102,111,110,116,101,110,118,105,114,111,110,109,101,110,116,10,32,32,32,91,37,103,112,116,93,10,0,0,0,100,101,102,36,105,110,101,100,0,0,0,0,0,0,0,0,37,51,105,46,32,103,114,97,121,61,37,48,46,52,102,44,32,40,114,44,103,44,98,41,61,40,37,48,46,52,102,44,37,48,46,52,102,44,37,48,46,52,102,41,44,32,35,37,48,50,120,37,48,50,120,37,48,50,120,32,61,32,37,51,105,32,37,51,105,32,37,51,105,10,0,0,0,0,0,0,102,105,108,108,95,110,117,109,98,101,114,115,32,111,117,116,112,117,116,32,98,117,102,102,101,114,0,0,0,0,0,0,69,120,112,101,99,116,101,100,32,110,111,110,45,110,101,103,97,116,105,118,101,32,105,110,116,101,103,101,114,0,0,0,114,103,98,36,102,111,114,109,117,108,97,101,0,0,0,0,9,99,111,108,111,114,32,109,97,112,112,105,110,103,32,42,110,111,116,42,32,100,111,110,101,32,98,121,32,100,101,102,105,110,101,100,32,103,114,97,100,105,101,110,116,46,10,0,112,111,105,110,116,116,36,121,112,101,0,0,0,0,0,0,32,102,108,117,115,104,32,0,69,120,112,101,99,116,101,100,32,112,111,115,105,116,105,118,101,32,105,110,116,101,103,101,114,0,0,0,0,0,0,0,49,56,48,32,109,117,108,32,115,105,110,0,0,0,0,0,92,115,101,116,117,112,99,111,108,111,114,115,10,32,32,32,91,115,116,97,116,101,61,115,116,97,114,116,93,10,0,0,9,32,32,42,32,116,104,117,115,32,116,104,101,32,114,97,110,103,101,115,32,105,110,32,96,115,101,116,32,112,109,51,100,32,114,103,98,102,111,114,109,117,108,97,101,39,32,97,114,101,32,45,37,105,46,46,37,105,10,0,0,0,0,0,108,105,110,101,116,36,121,112,101,0,0,0,0,0,0,0,115,101,116,32,112,109,51,100,32,105,110,116,101,114,112,111,108,97,116,101,32,37,100,44,37,100,0,0,0,0,0,0,73,110,100,101,120,32,115,116,101,112,32,109,117,115,116,32,98,101,32,112,111,115,105,116,105,118,101,0,0,0,0,0,92,117,115,101,109,111,100,117,108,101,10,32,32,32,91,103,110,117,112,108,111,116,93,10,0,0,0,0,0,0,0,0,78,111,32,115,117,99,104,32,111,112,116,105,111,110,32,116,111,32,104,105,100,100,101,110,51,100,32,40,111,114,32,119,114,111,110,103,32,111,114,100,101,114,41,0,0,0,0,0,103,114,101,121,0,0,0,0,9,32,32,42,32,110,101,103,97,116,105,118,101,32,110,117,109,98,101,114,115,32,109,101,97,110,32,105,110,118,101,114,116,101,100,61,110,101,103,97,116,105,118,101,32,99,111,108,111,117,114,32,99,111,109,112,111,110,101,110,116,10,0,0,100,101,112,116,104,111,114,100,101,114,10,0,0,0,0,0,85,112,112,101,114,32,105,110,100,101,120,32,115,104,111,117,108,100,32,98,101,32,98,105,103,103,101,114,32,116,104,97,110,32,108,111,119,101,114,32,105,110,100,101,120,0,0,0,70,73,84,58,32,32,32,32,100,97,116,97,32,114,101,97,100,32,102,114,111,109,32,37,115,10,0,0,0,0,0,0,92,101,110,97,98,108,101,114,101,103,105,109,101,10,32,32,32,91,117,116,102,45,56,93,10,0,0,0,0,0,0,0,37,50,105,58,32,37,45,49,53,115,0,0,0,0,0,0,115,99,97,110,115,98,97,99,107,119,97,114,100,10,0,0,66,105,110,97,114,121,32,109,97,116,114,105,120,32,102,105,108,101,32,102,111,114,109,97,116,32,100,111,101,115,32,110,111,116,32,97,108,108,111,119,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,115,117,114,102,97,99,101,32,112,101,114,32,102,105,108,101,0,67,0,0,0,0,0,0,0,10,10,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,39,112,111,105,110,116,115,39,44,32,39,111,110,101,39,44,32,111,114,32,39,116,119,111,39,0,0,0,0,0,76,73,78,69,83,0,0,0,37,37,32,83,101,101,32,97,108,115,111,32,104,116,116,112,58,47,47,119,105,107,105,46,99,111,110,116,101,120,116,103,97,114,100,101,110,46,110,101,116,47,71,110,117,112,108,111,116,10,37,37,10,0,0,0,110,101,103,36,97,116,105,118,101,0,0,0,0,0,0,0,10,9,32,32,32,32,0,0,99,101,110,116,114,101,0,0,115,99,97,110,115,102,111,114,119,97,114,100,10,0,0,0,112,111,119,101,114,0,0,0,73,110,32,109,117,108,116,105,112,108,111,116,32,109,111,100,101,32,121,111,117,32,99,97,110,39,116,32,99,104,97,110,103,101,32,116,104,101,32,111,117,116,112,117,116,10,0,0,32,100,101,108,116,97,95,120,32,100,101,108,116,97,95,121,32,100,101,108,116,97,95,122,0,0,0,0,0,0,0,0,37,37,32,71,78,85,80,76,79,84,32,118,101,114,115,105,111,110,58,32,37,115,46,37,115,44,32,116,101,114,109,105,110,97,108,32,118,101,114,115,105,111,110,58,32,37,115,46,37,115,32,40,37,115,41,10,0,0,0,0,0,0,0,0,112,111,115,36,105,116,105,118,101,0,0,0,0,0,0,0,115,104,36,111,119,0,0,0,9,32,32,42,32,116,104,101,114,101,32,97,114,101,32,37,105,32,97,118,97,105,108,97,98,108,101,32,114,103,98,32,99,111,108,111,114,32,109,97,112,112,105,110,103,32,102,111,114,109,117,108,97,101,58,0,115,108,111,112,101,0,0,0,115,99,97,110,115,97,117,116,111,109,97,116,105,99,10,0,102,70,101,69,103,71,0,0,71,78,85,72,69,76,80,0,10,0,0,0,0,0,0,0,114,116,122,0,0,0,0,0,98,97,36,99,107,0,0,0,9,84,104,101,32,98,101,115,116,32,109,97,116,99,104,32,111,102,32,116,104,101,32,99,117,114,114,101,110,116,32,112,97,108,101,116,116,101,32,99,111,114,114,101,115,112,111,110,100,115,32,116,111,10,9,32,32,32,32,115,101,116,32,112,97,108,101,116,116,101,32,114,103,98,102,111,114,109,117,108,97,101,32,37,105,44,37,105,44,37,105,10,0,0,0,0,112,111,36,105,110,116,0,0,32,97,116,32,37,115,10,0,43,45,35,48,49,50,51,52,53,54,55,56,57,46,0,0,32,112,97,108,101,116,116,101,32,122,0,0,0,0,0,0,121,32,114,97,110,103,101,0,110,101,0,0,0,0,0,0,32,111,110,58,32,37,115,0,102,114,36,111,110,116,0,0,66,101,103,105,110,0,0,0,102,111,114,109,117,108,97,101,32,112,116,115,0,0,0,0,116,109,112,32,108,111,97,100,112,97,116,104,0,0,0,0,101,120,112,108,105,99,105,116,0,0,0,0,0,0,0,0,102,95,115,112,114,105,110,116,102,58,32,97,116,116,101,109,112,116,32,116,111,32,112,114,105,110,116,32,115,116,114,105,110,103,32,118,97,108,117,101,32,119,105,116,104,32,110,117,109,101,114,105,99,32,102,111,114,109,97,116,0,0,0,0,85,110,115,105,103,110,101,100,73,110,116,101,103,101,114,0,116,105,99,108,97,98,101,108,115,32,109,117,115,116,32,99,111,109,101,32,102,114,111,109,32,97,32,114,101,97,108,32,99,111,108,117,109,110,0,0,37,89,45,37,109,45,37,100,32,37,72,58,37,77,32,37,90,0,0,0,0,0,0,0,102,111,114,109,117,108,97,101,0,0,0,0,0,0,0,0,116,109,112,32,102,111,110,116,112,97,116,104,0,0,0,0,105,109,112,108,105,99,105,116,0,0,0,0,0,0,0,0,102,111,114,109,97,116,32,109,117,115,116,32,104,97,118,101,32,49,45,55,32,99,111,110,118,101,114,115,105,111,110,115,32,111,102,32,116,121,112,101,32,100,111,117,98,108,101,32,40,37,37,108,102,41,0,0,73,110,116,101,114,110,97,108,32,101,114,114,111,114,32,58,32,117,110,107,110,111,119,110,32,116,105,99,32,116,121,112,101,0,0,0,0,0,0,0,37,37,32,87,114,105,116,116,101,110,32,98,121,32,67,111,110,84,101,88,116,32,116,101,114,109,105,110,97,108,32,102,111,114,32,71,78,85,80,76,79,84,0,0,0,0,0,0,111,36,114,105,103,105,110,0,102,111,114,109,117,108,97,101,83,101,113,0,0,0,0,0,101,120,112,101,99,116,101,100,32,115,116,114,105,110,103,0,115,101,116,32,112,109,51,100,32,0,0,0,0,0,0,0,99,111,114,110,101,114,115,32,102,111,114,32,102,105,108,108,101,100,99,117,114,118,101,115,0,0,0,0,0,0,0,0,67,111,108,117,109,110,32,109,117,115,116,32,98,101,32,62,61,32,45,50,0,0,0,0,92,101,110,100,105,110,112,117,116,10,0,0,0,0,0,0,110,111,98,111,36,114,100,101,114,0,0,0,0,0,0,0,82,71,66,32,112,116,115,0,108,111,103,32,98,97,115,101,32,109,117,115,116,32,98,101,32,62,32,49,46,48,59,32,108,111,103,115,99,97,108,101,32,117,110,99,104,97,110,103,101,100,0,0,0,0,0,0,115,101,116,32,108,111,99,97,108,101,32,34,37,115,34,10,0,0,0,0,0,0,0,0,40,50,120,45,49,41,94,50,0,0,0,0,0,0,0,0,92,115,116,111,112,116,101,120,116,10,0,0,0,0,0,0,98,100,36,101,102,97,117,108,116,0,0,0,0,0,0,0,100,111,112,108,111,116,0,0,9,67,117,114,114,101,110,116,32,112,97,108,101,116,116,101,32,105,115,10,9,32,32,32,32,115,101,116,32,112,97,108,101,116,116,101,32,114,103,98,102,111,114,109,117,108,97,101,32,37,105,44,37,105,44,37,105,10,0,0,0,0,0,0,115,101,116,32,116,109,97,114,103,105,110,32,37,115,32,37,103,10,0,0,0,0,0,0,99,98,116,105,99,36,108,97,98,101,108,115,0,0,0,0,92,115,116,111,112,71,78,85,80,76,79,84,103,114,97,112,104,105,99,10,0,0,0,0,98,111,36,114,100,101,114,0,69,120,112,101,99,116,105,110,103,32,39,103,114,97,100,105,101,110,116,39,32,111,114,32,39,112,97,108,101,116,116,101,32,60,110,62,39,32,111,114,32,39,114,103,98,102,111,114,109,117,108,97,101,39,32,111,114,32,39,99,111,108,111,114,110,97,109,101,115,39,0,0,101,120,112,101,99,116,105,110,103,32,39,99,97,114,116,101,115,105,97,110,39,44,32,39,115,112,104,101,114,105,99,97,108,39,44,32,111,114,32,39,99,121,108,105,110,100,114,105,99,97,108,39,0,0,0,0,115,101,116,32,114,109,97,114,103,105,110,32,37,115,32,37,103,10,0,0,0,0,0,0,122,116,105,99,36,108,97,98,101,108,115,0,0,0,0,0,37,115,10,10,0,0,0,0,92,115,116,111,112,71,78,85,80,76,79,84,112,97,103,101,10,0,0,0,0,0,0,0,117,36,115,101,114,0,0,0,102,105,116,50,114,103,98,36,102,111,114,109,117,108,97,101,0,0,0,0,0,0,0,0,99,121,36,108,105,110,100,114,105,99,97,108,0,0,0,0,115,101,116,32,98,109,97,114,103,105,110,32,37,115,32,37,103,10,0,0,0,0,0,0,121,50,116,105,99,36,108,97,98,101,108,115,0,0,0,0,9,103,110,117,112,108,111,116,32,76,67,95,78,85,77,69,82,73,67,32,37,115,10,0,37,46,49,50,48,115,0,0,116,36,119,111,0,0,0,0,115,101,116,98,111,117,110,100,115,32,99,117,114,114,101,110,116,112,105,99,116,117,114,101,32,116,111,32,117,110,105,116,115,113,117,97,114,101,32,120,121,115,99,97,108,101,100,32,40,119,44,104,41,59,10,0,104,36,111,114,105,122,111,110,116,97,108,0,0,0,0,0,99,111,108,111,114,36,110,97,109,101,115,0,0,0,0,0,115,36,112,104,101,114,105,99,97,108,0,0,0,0,0,0,97,116,32,115,99,114,101,101,110,0,0,0,0,0,0,0,121,95,109,105,110,51,100,32,115,104,111,117,108,100,32,110,111,116,32,101,113,117,97,108,32,121,95,109,97,120,51,100,33,0,0,0,0,0,0,0,121,116,105,99,36,108,97,98,101,108,115,0,0,0,0,0,109,111,100,0,0,0,0,0,100,101,115,116,32,61,61,32,78,85,76,76,32,124,124,32,100,101,115,116,32,33,61,32,111,117,116,115,116,114,0,0,10,35,32,73,115,111,67,117,114,118,101,32,37,100,44,32,37,100,32,112,111,105,110,116,115,10,35,32,120,32,121,32,122,0,0,0,0,0,0,0,118,36,101,114,116,105,99,97,108,0,0,0,0,0,0,0,115,104,101,36,108,108,0,0,99,97,36,114,116,101,115,105,97,110,0,0,0,0,0,0,37,115,9,37,102,10,0,0,115,101,116,32,108,109,97,114,103,105,110,32,37,115,32,37,103,10,0,0,0,0,0,0,120,50,116,105,99,36,108,97,98,101,108,115,0,0,0,0,67,111,109,112,105,108,101,32,111,112,116,105,111,110,115,58,10,37,115,10,0,0,0,0,37,46,52,103,0,0,0,0,114,122,116,0,0,0,0,0,116,105,109,101,0,0,0,0,114,103,98,102,111,114,36,109,117,108,97,101,0,0,0,0,101,120,112,101,99,116,105,110,103,32,39,115,99,114,101,101,110,32,60,102,114,97,99,116,105,111,110,62,39,0,0,0,115,101,116,32,122,101,114,111,32,37,103,10,0,0,0,0,120,116,105,99,36,108,97,98,101,108,115,0,0,0,0,0,32,108,105,110,101,115,116,121,108,101,32,37,100,0,0,0,120,32,114,97,110,103,101,0,99,111,108,117,109,110,104,101,97,100,0,0,0,0,0,0,114,99,102,105,108,101,0,0,101,113,0,0,0,0,0,0,41,59,112,111,115,105,116,105,111,110,115,40,0,0,0,0,116,101,114,109,36,105,110,97,108,0,0,0,0,0,0,0,69,110,100,0,0,0,0,0,103,114,97,36,100,105,101,110,116,0,0,0,0,0,0,0,115,99,36,114,101,101,110,0,102,95,115,112,114,105,110,116,102,58,32,97,116,116,101,109,112,116,32,116,111,32,112,114,105,110,116,32,110,117,109,101,114,105,99,32,118,97,108,117,101,32,119,105,116,104,32,115,116,114,105,110,103,32,102,111,114,109,97,116,0,0,0,0,83,105,103,110,101,100,83,104,111,114,116,0,0,0,0,0,40,37,46,51,103,44,37,46,51,103,44,37,46,51,103,41,0,0,0,0,0,0,0,0,110,111,111,112,97,113,117,101,0,0,0,0,0,0,0,0,101,120,116,114,97,32,99,104,97,114,115,32,97,102,116,101,114,32,60,115,101,112,97,114,97,116,105,111,110,95,99,104,97,114,62,0,0,0,0,0,107,101,121,32,101,110,116,114,121,0,0,0,0,0,0,0,10,37,72,58,37,77,0,0,99,111,108,111,114,115,40,0,111,112,97,113,117,101,0,0,9,103,97,109,109,97,32,105,115,32,37,46,52,103,10,0,39,92,116,39,0,0,0,0,104,105,115,116,101,112,115,32,118,97,108,105,100,32,112,111,105,110,116,32,109,97,112,112,105,110,103,0,0,0,0,0,116,101,109,112,32,115,116,114,105,110,103,32,102,111,114,32,108,97,98,101,108,32,104,97,99,107,0,0,0,0,0,0,99,111,108,111,114,95,109,111,100,101,40,103,114,97,100,105,101,110,116,41,59,0,0,0,109,97,120,114,111,119,36,115,0,0,0,0,0,0,0,0,37,115,58,37,100,32,111,111,111,112,115,58,32,85,110,107,110,111,119,110,32,99,111,108,111,114,32,109,111,100,101,32,39,37,99,39,46,10,0,0,34,92,116,34,0,0,0,0,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,99,111,108,117,109,110,32,60,61,32,48,32,105,110,32,100,97,116,97,102,105,108,101,46,99,0,0,0,0,0,0,0,50,32,109,117,108,32,49,32,115,117,98,32,100,117,112,32,109,117,108,0,0,0,0,0,99,111,108,111,114,95,109,111,100,101,40,102,117,110,99,116,105,111,110,115,41,0,0,0,109,97,120,99,111,108,117,36,109,110,115,0,0,0,0,0,88,89,90,10,0,0,0,0,101,120,112,101,99,116,101,100,32,34,60,115,101,112,97,114,97,116,111,114,95,99,104,97,114,62,34,0,0,0,0,0,115,101,116,32,116,105,109,101,115,116,97,109,112,32,37,115,32,10,0,0,0,0,0,0,37,49,54,46,51,102,0,0,99,111,108,111,114,95,109,111,100,101,40,114,103,98,41,59,102,111,114,109,117,108,97,101,40,37,100,44,37,100,44,37,100,41,0,0,0,0,0,0,109,97,120,99,111,108,36,115,0,0,0,0,0,0,0,0,89,73,81,10,0,0,0,0,119,104,105,116,101,36,115,112,97,99,101,0,0,0,0,0,32,114,111,116,97,116,101,32,112,97,114,97,108,108,101,108,0,0,0,0,0,0,0,0,116,105,109,101,115,116,114,105,110,103,0,0,0,0,0,0,10,10,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,10,0,0,0,0,0,0,99,111,108,111,114,95,109,111,100,101,40,103,114,97,121,41,0,0,0,0,0,0,0,0,116,101,120,116,36,99,111,108,111,114,0,0,0,0,0,0,84,105,99,32,108,97,98,101,108,32,100,111,101,115,32,110,111,116,32,101,118,97,108,117,97,116,101,32,97,115,32,115,116,114,105,110,103,33,10,0,67,77,89,10,0,0,0,0,101,120,112,101,99,116,101,100,32,115,116,114,105,110,103,32,119,105,116,104,32,99,111,109,109,101,110,116,115,32,99,104,97,114,115,0,0,0,0,0,10,115,101,116,32,37,115,37,115,32,0,0,0,0,0,0,9,103,110,117,112,108,111,116,32,76,67,95,84,73,77,69,32,32,32,32,37,115,10,0,117,116,105,108,46,99,0,0,111,36,110,101,0,0,0,0,103,112,95,109,97,107,101,95,112,97,108,101,116,116,101,40,0,0,0,0,0,0,0,0,116,99,0,0,0,0,0,0,72,83,86,10,0,0,0,0,109,97,120,95,108,105,110,101,95,108,101,110,0,0,0,0,100,105,118,0,0,0,0,0,84,97,98,117,108,97,114,32,111,117,116,112,117,116,32,111,102,32,116,104,105,115,32,51,68,32,112,108,111,116,32,115,116,121,108,101,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,10,0,0,0,70,97,116,97,108,58,32,117,110,100,101,102,105,110,101,100,32,99,111,108,111,114,32,102,111,114,109,117,108,97,32,40,99,97,110,32,98,101,32,48,45,45,37,105,41,10,0,0,37,37,32,102,111,114,32,97,100,100,105,116,105,111,110,97,108,32,117,115,101,114,45,100,101,102,105,110,101,100,32,115,101,116,116,105,110,103,115,10,103,112,95,115,101,116,117,112,95,97,102,116,101,114,59,10,0,0,0,0,0,0,0,0,115,101,36,116,0,0,0,0,82,71,66,10,0,0,0,0,101,120,112,101,99,116,101,100,32,109,105,115,115,105,110,103,45,118,97,108,117,101,32,115,116,114,105,110,103,0,0,0,95,121,0,0,0,0,0,0,115,101,116,32,37,115,37,115,32,34,37,115,34,32,0,0,108,36,111,110,103,0,0,0,103,112,95,115,101,116,95,108,105,110,101,119,105,100,116,104,40,37,103,41,59,10,0,0,122,116,114,0,0,0,0,0,110,111,116,105,36,116,108,101])
+.concat([0,0,0,0,0,0,0,0,9,67,111,108,111,114,45,77,111,100,101,108,58,32,0,0,119,114,111,110,103,32,111,112,116,105,111,110,0,0,0,0,115,101,116,32,109,37,115,116,105,99,115,32,37,102,10,0,37,103,32,37,103,0,0,0,32,108,116,32,37,100,0,0,121,32,114,97,110,103,101,32,105,115,32,105,110,118,97,108,105,100,0,0,0,0,0,0,33,61,0,0,0,0,0,0,37,37,32,108,105,110,101,119,105,100,116,104,32,115,99,97,108,105,110,103,32,102,97,99,116,111,114,32,102,111,114,32,105,110,100,105,118,105,100,117,97,108,32,108,105,110,101,115,10,0,0,0,0,0,0,0,80,97,103,101,68,111,119,110,0,0,0,0,0,0,0,0,32,99,111,108,111,114,32,112,111,115,105,116,105,111,110,115,32,102,111,114,32,100,105,115,99,114,101,116,101,32,112,97,108,101,116,116,101,32,116,101,114,109,105,110,97,108,115,10,0,0,0,0,0,0,0,0,114,117,108,101,114,32,97,116,0,0,0,0,0,0,0,0,115,101,116,32,109,37,115,116,105,99,115,32,100,101,102,97,117,108,116,10,0,0,0,0,117,110,114,101,99,111,103,110,105,122,101,100,32,112,108,111,116,32,116,121,112,101,0,0,37,37,0,0,0,0,0,0,85,110,115,105,103,110,101,100,83,104,111,114,116,0,0,0,103,112,95,115,101,116,95,112,111,105,110,116,115,105,122,101,40,37,103,41,59,10,0,0,110,111,97,36,117,116,111,116,105,116,108,101,115,0,0,0,65,76,76,32,114,101,109,97,105,110,105,110,103,0,0,0,101,120,112,101,99,116,105,110,103,32,114,117,108,101,114,32,99,111,111,114,100,105,110,97,116,101,115,0,0,0,0,0,115,101,116,32,109,37,115,116,105,99,115,10,0,0,0,0,37,100,47,37,109,0,0,0,83,105,103,110,101,100,66,121,116,101,0,0,0,0,0,0,112,118,101,114,116,32,62,61,32,48,0,0,0,0,0,0,37,37,32,112,111,105,110,116,115,105,122,101,32,115,99,97,108,105,110,103,32,102,97,99,116,111,114,10,0,0,0,0,97,36,117,116,111,116,105,116,108,101,115,0,0,0,0,0,77,65,88,32,37,105,0,0,114,117,36,108,101,114,0,0,115,101,116,32,110,111,109,37,115,116,105,99,115,10,0,0,103,112,95,115,99,97,108,101,95,116,101,120,116,32,58,61,32,37,103,59,10,0,0,0,104,36,101,105,103,104,116,0,9,97,108,108,111,99,97,116,105,110,103,32,0,0,0,0,110,111,114,117,36,108,101,114,0,0,0,0,0,0,0,0,115,101,116,32,116,105,99,115,108,101,118,101,108,32,37,103,10,0,0,0,0,0,0,0,124,120,45,48,46,53,124,0,37,37,32,116,101,120,116,32,115,99,97,108,105,110,103,32,102,97,99,116,111,114,32,102,111,114,32,116,104,101,32,119,104,111,108,101,32,102,105,103,117,114,101,10,0,0,0,0,119,36,105,100,116,104,0,0,32,78,79,84,0,0,0,0,115,104,111,117,108,100,32,98,101,58,32,37,100,32,60,61,32,109,111,117,115,101,102,111,114,109,97,116,32,60,61,32,37,100,10,0,0,0,0,0,115,101,116,32,120,121,112,108,97,110,101,32,97,116,32,37,103,10,0,0,0,0,0,0,37,37,32,102,111,114,32,97,100,100,105,116,105,111,110,97,108,32,117,115,101,114,45,100,101,102,105,110,101,100,32,115,101,116,116,105,110,103,115,10,103,112,95,115,101,116,117,112,95,98,101,102,111,114,101,59,10,0,0,0,0,0,0,0,115,112,36,97,99,105,110,103,0,0,0,0,0,0,0,0,9,97,108,108,32,99,111,108,111,114,32,102,111,114,109,117,108,97,101,32,65,82,69,37,115,32,119,114,105,116,116,101,110,32,105,110,116,111,32,111,117,116,112,117,116,32,112,111,115,116,115,99,114,105,112,116,32,102,105,108,101,10,0,0,112,108,101,97,115,101,32,39,115,101,116,32,109,111,117,115,101,32,109,111,117,115,101,102,111,114,109,97,116,32,60,102,109,116,62,39,32,102,105,114,115,116,46,10,0,0,0,0,102,117,110,99,116,105,111,110,0,0,0,0,0,0,0,0,44,32,116,97,110,103,101,110,116,61,37,115,41,0,0,0,99,111,117,108,100,32,110,111,116,32,111,112,101,110,32,108,111,103,45,102,105,108,101,32,37,115,0,0,0,0,0,0,37,37,32,68,105,102,102,101,114,101,110,116,32,105,110,105,116,105,97,108,105,115,97,116,105,111,110,115,10,0,0,0,115,97,36,109,112,108,101,110,0,0,0,0,0,0,0,0,78,69,71,65,84,73,86,69,0,0,0,0,0,0,0,0,109,111,36,117,115,101,102,111,114,109,97,116,0,0,0,0,115,101,116,32,115,116,121,108,101,32,102,117,110,99,116,105,111,110,32,0,0,0,0,0,44,32,37,32,35,46,52,103,100,101,103,41,0,0,0,0,80,115,101,117,100,111,100,97,116,97,32,110,111,116,32,121,101,116,32,105,109,112,108,101,109,101,110,116,101,100,32,102,111,114,32,112,111,108,97,114,32,111,114,32,112,97,114,97,109,101,116,114,105,99,32,103,114,97,112,104,115,0,0,0,9,103,110,117,112,108,111,116,32,101,110,99,111,100,105,110,103,32,32,32,37,115,10,0,108,105,110,101,32,37,100,58,32,0,0,0,0,0,0,0,112,36,111,105,110,116,115,0,37,37,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,0,0,0,110,111,98,36,111,120,0,0,105,110,112,117,116,32,100,97,116,97,32,40,39,101,39,32,101,110,100,115,41,32,62,32,0,0,0,0,0,0,0,0,80,79,83,73,84,73,86,69,0,0,0,0,0,0,0,0,115,104,111,117,108,100,32,98,101,58,32,37,100,32,60,61,32,99,108,105,112,98,111,97,114,100,102,111,114,109,97,116,32,60,61,32,37,100,10,0,115,101,116,32,115,116,121,108,101,32,100,97,116,97,32,0,104,101,97,100,115,0,0,0,109,117,108,116,0,0,0,0,10,35,32,83,117,114,102,97,99,101,32,37,100,32,111,102,32,37,100,32,115,117,114,102,97,99,101,115,10,0,0,0,37,37,32,116,101,109,112,111,114,97,114,121,32,118,97,114,105,97,98,108,101,32,102,111,114,32,115,116,111,114,105,110,103,32,116,104,101,32,112,97,116,104,10,115,97,118,101,32,112,59,32,112,97,116,104,32,112,59,10,0,0,0,0,0,98,36,111,120,0,0,0,0,115,99,114,36,101,101,110,100,117,109,112,0,0,0,0,0,9,102,105,103,117,114,101,32,105,115,32,37,115,10,0,0,95,120,0,0,0,0,0,0,115,101,116,32,99,110,116,114,112,97,114,97,109,32,112,111,105,110,116,115,32,37,100,10,115,101,116,32,115,105,122,101,32,114,97,116,105,111,32,37,103,32,37,103,44,37,103,10,115,101,116,32,111,114,105,103,105,110,32,37,103,44,37,103,10,0,0,0,0,0,0,0,93,32,32,100,105,115,116,97,110,99,101,58,32,0,0,0,109,97,116,114,105,120,32,99,111,110,116,97,105,110,115,32,109,105,115,115,105,110,103,32,111,114,32,117,110,100,101,102,105,110,101,100,32,118,97,108,117,101,115,0,0,0,0,0,71,32,78,32,85,32,80,32,76,32,79,32,84,0,0,0,37,37,32,116,101,109,112,111,114,97,114,121,32,118,97,114,105,97,98,108,101,32,102,111,114,32,115,116,111,114,105,110,103,32,116,104,101,32,112,97,116,104,32,97,110,100,32,105,109,97,103,101,115,10,115,97,118,101,32,112,44,32,105,109,103,44,32,105,109,97,59,32,112,97,116,104,32,112,59,32,115,116,114,105,110,103,32,105,109,103,44,32,105,109,97,59,10,0,0,0,0,0,0,0,116,114,122,0,0,0,0,0,115,104,111,119,46,99,0,0,39,102,111,110,116,110,97,109,101,44,102,111,110,116,115,105,122,101,39,32,101,120,112,101,99,116,101,100,0,0,0,0,99,108,36,105,112,98,111,97,114,100,102,111,114,109,97,116,0,0,0,0,0,0,0,0,100,121,50,61,0,0,0,0,100,102,95,109,97,116,114,105,120,0,0,0,0,0,0,0,32,116,101,120,116,99,111,108,111,114,0,0,0,0,0,0,120,32,114,97,110,103,101,32,105,115,32,105,110,118,97,108,105,100,0,0,0,0,0,0,80,105,112,101,115,32,97,110,100,32,115,104,101,108,108,32,99,111,109,109,97,110,100,115,32,110,111,116,32,112,101,114,109,105,116,116,101,100,32,100,117,114,105,110,103,32,105,110,105,116,105,97,108,105,122,97,116,105,111,110,0,0,0,0,61,61,0,0,0,0,0,0,67,97,110,110,111,116,32,115,101,116,32,105,110,116,101,114,110,97,108,32,118,97,114,105,97,98,108,101,115,32,71,80,86,65,76,95,32,97,110,100,32,77,79,85,83,69,95,0,99,109,0,0,0,0,0,0,80,97,103,101,85,112,0,0,37,115,58,37,100,32,111,111,112,115,58,32,85,110,107,110,111,119,110,32,99,111,108,111,114,32,109,111,100,101,32,39,37,99,39,46,10,0,0,0,100,105,115,99,114,101,116,101,32,37,103,0,0,0,0,0,78,111,32,116,101,114,109,105,110,97,108,32,104,97,115,32,98,101,101,110,32,112,117,115,104,101,100,32,121,101,116,10,0,0,0,0,0,0,0,0,100,120,50,61,0,0,0,0,77,97,116,114,105,120,32,100,111,101,115,32,110,111,116,32,114,101,112,114,101,115,101,110,116,32,97,32,103,114,105,100,0,0,0,0,0,0,0,0,105,110,0,0,0,0,0,0,110,111,105,110,118,36,101,114,116,0,0,0,0,0,0,0,9,67,117,98,101,104,101,108,105,120,32,99,111,108,111,114,32,112,97,108,101,116,116,101,58,32,115,116,97,114,116,32,37,103,32,99,121,99,108,101,115,32,37,103,32,115,97,116,117,114,97,116,105,111,110,32,37,103,10,0,0,0,0,0,110,111,122,111,111,109,106,117,36,109,112,0,0,0,0,0,105,110,99,114,101,109,101,110,116,97,108,32,37,103,44,37,103,44,37,103,10,0,0,0,70,105,108,101,32,100,111,101,115,110,39,116,32,102,97,99,116,111,114,105,122,101,32,105,110,116,111,32,102,117,108,108,32,109,97,116,114,105,120,0,37,109,47,37,100,0,0,0,85,110,115,105,103,110,101,100,66,121,116,101,0,0,0,0,37,37,32,115,99,97,108,105,110,103,32,102,97,99,116,111,114,44,32,119,105,100,116,104,32,97,110,100,32,104,101,105,103,104,116,32,111,102,32,116,104,101,32,102,105,103,117,114,101,10,97,32,58,61,32,49,99,109,59,32,119,32,58,61,32,37,46,51,102,97,59,32,104,32,58,61,32,37,46,51,102,97,59,32,37,37,32,40,37,103,37,115,44,32,37,103,37,115,41,10,0,0,0,0,105,110,118,36,101,114,116,0,9,32,32,67,45,102,111,114,109,117,108,97,58,32,37,115,10,0,0,0,0,0,0,0,122,111,111,109,106,117,36,109,112,0,0,0,0,0,0,0,97,117,116,111,32,37,100,10,0,0,0,0,0,0,0,0,82,101,97,100,32,103,114,105,100,32,119,105,100,116,104,32,116,111,111,32,108,97,114,103,101,0,0,0,0,0,0,0,115,116,114,105,110,103,32,116,101,114,109,118,101,114,115,105,111,110,59,32,32,32,32,116,101,114,109,118,101,114,115,105,111,110,32,32,32,32,58,61,32,34,37,115,34,59,10,0,110,111,114,101,118,36,101,114,115,101,0,0,0,0,0,0,9,32,32,66,45,102,111,114,109,117,108,97,58,32,37,115,10,0,0,0,0,0,0,0,110,111,118,101,36,114,98,111,115,101,0,0,0,0,0,0,115,101,116,32,99,110,116,114,112,97,114,97,109,32,108,101,118,101,108,115,32,0,0,0,82,101,97,100,32,103,114,105,100,32,111,102,32,122,101,114,111,32,119,105,100,116,104,0,48,46,53,32,115,117,98,32,97,98,115,0,0,0,0,0,115,116,114,105,110,103,32,103,110,117,112,108,111,116,118,101,114,115,105,111,110,59,32,103,110,117,112,108,111,116,118,101,114,115,105,111,110,32,58,61,32,34,37,115,34,59,10,0,114,101,118,36,101,114,115,101,0,0,0,0,0,0,0,0,9,32,32,65,45,102,111,114,109,117,108,97,58,32,37,115,10,0,0,0,0,0,0,0,118,101,36,114,98,111,115,101,0,0,0,0,0,0,0,0,98,115,112,108,105,110,101,10,0,0,0,0,0,0,0,0,67,97,110,39,116,32,114,101,97,100,32,115,101,99,111,110,100,32,100,105,109,101,110,115,105,111,110,32,105,110,32,100,97,116,97,32,102,105,108,101,32,34,37,115,34,0,0,0,66,82,69,65,75,58,32,37,115,0,0,0,0,0,0,0,92,115,116,97,114,116,71,78,85,80,76,79,84,103,114,97,112,104,105,99,91,37,100,93,10,0,0,0,0,0,0,0,82,36,105,103,104,116,0,0,9,99,111,108,111,114,32,109,97,112,112,105,110,103,32,105,115,32,100,111,110,101,32,98,121,32,117,115,101,114,32,100,101,102,105,110,101,100,32,102,117,110,99,116,105,111,110,115,10,0,0,0,0,0,0,0,110,111,108,97,36,98,101,108,115,0,0,0,0,0,0,0,99,117,98,105,99,115,112,108,105,110,101,10,0,0,0,0,121,61,0,0,0,0,0,0,67,97,110,39,116,32,114,101,97,100,32,102,105,114,115,116,32,100,105,109,101,110,115,105,111,110,32,105,110,32,100,97,116,97,32,102,105,108,101,32,34,37,115,34,0,0,0,0,92,115,116,97,114,116,71,78,85,80,76,79,84,112,97,103,101,32,37,37,32,71,114,97,112,104,105,99,32,78,114,46,32,37,100,10,0,0,0,0,76,36,101,102,116,0,0,0,9,99,111,108,111,114,32,109,97,112,112,105,110,103,32,98,121,32,100,101,102,105,110,101,100,32,103,114,97,100,105,101,110,116,10,0,0,0,0,0,108,97,98,101,108,36,115,0,108,105,110,101,97,114,10,0,120,61,0,0,0,0,0,0,67,97,110,39,116,32,111,112,101,110,32,100,97,116,97,32,102,105,108,101,32,34,37,115,34,0,0,0,0,0,0,0,9,103,110,117,112,108,111,116,32,76,67,95,67,84,89,80,69,32,32,32,37,115,10,0,34,37,115,34,44,32,108,105,110,101,32,37,100,58,32,0,112,32,58,61,32,40,37,46,51,102,97,44,37,46,51,102,97,41,0,0,0,0,0,0,114,109,36,97,114,103,105,110,0,0,0,0,0,0,0,0,9,114,103,98,32,99,111,108,111,114,32,109,97,112,112,105,110,103,32,98,121,32,114,103,98,102,111,114,109,117,108,97,101,32,97,114,101,32,37,105,44,37,105,44,37,105,10,0,110,111,112,111,36,108,97,114,100,105,115,116,97,110,99,101,0,0,0,0,0,0,0,0,115,101,116,32,99,110,116,114,112,97,114,97,109,32,0,0,32,32,32,115,99,97,108,101,58,32,0,0,0,0,0,0,84,111,111,32,109,97,110,121,32,99,111,108,117,109,110,115,32,105,110,32,117,115,105,110,103,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,97,110,100,32,105,109,112,108,105,101,100,32,115,97,109,112,108,105,110,103,32,97,114,114,97,121,0,0,0,0,0,0,98,97,99,107,104,101,97,100,0,0,0,0,0,0,0,0,109,105,110,117,115,0,0,0,112,114,105,110,116,95,51,100,116,97,98,108,101,32,111,117,116,112,117,116,32,98,117,102,102,101,114,0,0,0,0,0,103,112,95,115,101,116,95,108,105,110,101,116,121,112,101,40,37,100,41,59,10,0,0,0,108,109,36,97,114,103,105,110,0,0,0,0,0,0,0,0,115,97,36,118,101,0,0,0,67,79,76,79,82,0,0,0,112,111,108,97,114,100,105,115,116,97,110,99,101,116,36,97,110,0,0,0,0,0,0,0,115,101,116,32,99,110,116,114,112,97,114,97,109,32,111,114,100,101,114,32,37,100,10,0,118,105,101,119,58,32,0,0,80,108,111,116,32,115,116,121,108,101,32,114,101,113,117,105,114,101,115,32,104,105,103,104,101,114,32,116,104,97,110,32,111,110,101,45,100,105,109,101,110,115,105,111,110,97,108,32,115,97,109,112,108,105,110,103,32,97,114,114,97,121,0,0,37,115,9,102,97,113,44,32,98,117,103,115,44,32,101,116,99,58,32,32,32,116,121,112,101,32,34,104,101,108,112,32,70,65,81,34,10,37,115,9,105,109,109,101,100,105,97,116,101,32,104,101,108,112,58,32,32,32,116,121,112,101,32,34,104,101,108,112,34,32,32,40,112,108,111,116,32,119,105,110,100,111,119,58,32,104,105,116,32,39,104,39,41,10,0,0,123,37,115,125,41,59,10,0,122,121,120,0,0,0,0,0,98,109,36,97,114,103,105,110,0,0,0,0,0,0,0,0,71,82,65,89,0,0,0,0,112,111,36,108,97,114,100,105,115,116,97,110,99,101,100,101,103,0,0,0,0,0,0,0,115,101,116,32,100,97,116,97,102,105,108,101,32,110,111,102,112,101,95,116,114,97,112,10,0,0,0,0,0,0,0,0,122,111,111,109,105,110,103,32,99,97,110,99,101,108,108,101,100,46,10,0,0,0,0,0,80,108,111,116,32,115,116,121,108,101,32,114,101,113,117,105,114,101,115,32,104,105,103,104,101,114,32,116,104,97,110,32,116,119,111,45,100,105,109,101,110,115,105,111,110,97,108,32,115,97,109,112,108,105,110,103,32,97,114,114,97,121,0,0,112,97,114,97,109,101,116,114,105,99,32,102,117,110,99,116,105,111,110,32,110,111,116,32,102,117,108,108,121,32,115,112,101,99,105,102,105,101,100,0,72,79,77,69,32,110,111,116,32,115,101,116,32,45,32,99,97,110,110,111,116,32,101,120,112,97,110,100,32,116,105,108,100,101,0,0,0,0,0,0,38,0,0,0,0,0,0,0,91,37,115,93,0,0,0,0,116,109,36,97,114,103,105,110,0,0,0,0,0,0,0,0,68,111,119,110,0,0,0,0,9,112,97,108,101,116,116,101,32,105,115,32,37,115,10,0,110,111,122,111,111,109,99,111,36,111,114,100,105,110,97,116,101,115,0,0,0,0,0,0,115,101,116,32,100,97,116,97,102,105,108,101,32,102,111,114,116,114,97,110,10,0,0,0,32,32,32,114,101,115,116,111,114,101,100,32,116,101,114,109,105,110,97,108,32,105,115,32,37,115,32,37,115,10,0,0,96,98,117,105,108,116,105,110,45,99,97,110,99,101,108,45,122,111,111,109,96,32,99,97,110,99,101,108,32,122,111,111,109,32,114,101,103,105,111,110,0,0,0,0,0,0,0,0,80,108,111,116,32,115,116,121,108,101,32,100,111,101,115,32,110,111,116,32,99,111,110,102,111,114,109,32,116,111,32,116,104,114,101,101,32,99,111,108,117,109,110,32,100,97,116,97,32,105,110,32,116,104,105,115,32,103,114,97,112,104,32,109,111,100,101,0,0,0,0,0,97,108,105,103,110,40,37,115,41,44,32,92,115,111,109,101,116,120,116,91,103,112,93,0,111,36,117,116,115,105,100,101,0,0,0,0,0,0,0,0,72,79,82,73,90,79,78,84,65,76,0,0,0,0,0,0,122,111,111,109,99,111,36,111,114,100,105,110,97,116,101,115,0,0,0,0,0,0,0,0,115,101,116,32,100,97,116,97,102,105,108,101,32,99,111,109,109,101,110,116,115,99,104,97,114,115,32,39,37,115,39,10,0,0,0,0,0,0,0,0,77,79,85,83,69,95,75,69,89,95,87,73,78,68,79,87,0,0,0,0,0,0,0,0,110,111,95,99,111,108,115,32,60,61,32,77,65,88,68,65,84,65,67,79,76,83,0,0,104,105,100,100,101,110,32,116,104,101,115,101,95,101,100,103,101,115,0,0,0,0,0,0,72,105,103,104,66,121,116,101,70,105,114,115,116,0,0,0,97,110,103,108,101,40,37,100,41,44,32,0,0,0,0,0,105,110,115,36,105,100,101,0,86,69,82,84,73,67,65,76,0,0,0,0,0,0,0,0,110,111,100,111,36,117,98,108,101,99,108,105,99,107,0,0,71,80,86,65,76,95,86,73,69,87,95,90,83,67,65,76,69,0,0,0,0,0,0,0,101,108,108,105,112,115,101,32,112,108,111,116,0,0,0,0,67,97,110,110,111,116,32,103,101,110,101,114,97,116,101,32,99,111,111,114,100,115,32,102,111,114,32,116,104,97,116,32,112,108,111,116,32,115,116,121,108,101,0,0,0,0,0,0,103,112,95,112,117,116,95,116,101,120,116,40,40,37,46,51,102,97,44,32,37,46,51,102,97,41,44,32,0,0,0,0,98,101,36,108,111,119,0,0,9,99,111,108,111,114,32,103,114,97,100,105,101,110,116,32,105,115,32,37,115,32,105,110,32,116,104,101,32,99,111,108,111,114,32,98,111,120,10,0,100,111,36,117,98,108,101,99,108,105,99,107,0,0,0,0,115,101,116,32,100,97,116,97,102,105,108,101,32,115,101,112,97,114,97,116,111,114,32,119,104,105,116,101,115,112,97,99,101,10,0,0,0,0,0,0,71,80,86,65,76,95,86,73,69,87,95,83,67,65,76,69,0,0,0,0,0,0,0,0,77,97,116,114,105,120,32,100,97,116,97,32,99,111,110,116,97,105,110,115,32,111,110,108,121,32,116,104,114,101,101,32,99,111,108,117,109,110,115,0,71,78,85,80,76,79,84,95,76,73,66,0,0,0,0,0,99,111,115,40,57,48,120,41,0,0,0,0,0,0,0,0,103,112,95,112,111,105,110,116,40,37,46,51,102,97,44,37,46,51,102,97,44,37,100,41,59,10,0,0,0,0,0,0,117,36,110,100,101,114,0,0,65,114,103,104,33,0,0,0,103,114,36,97,112,104,0,0,115,101,116,32,100,97,116,97,102,105,108,101,32,115,101,112,97,114,97,116,111,114,32,34,37,99,34,10,0,0,0,0,37,108,102,0,0,0,0,0,97,98,36,111,118,101,0,0,44,0,0,0,0,0,0,0,10,9,32,32,32,32,32,32,32,32,32,32,115,105,122,101,58,32,0,0,0,0,0,0,115,101,116,32,100,97,116,97,102,105,108,101,32,109,105,115,115,105,110,103,32,39,37,115,39,10,0,0,0,0,0,0,78,111,32,100,101,102,97,117,108,116,32,99,111,108,117,109,110,115,32,107,110,111,119,110,32,102,111,114,32,116,104,97,116,32,112,108,111,116,32,115,116,121,108,101,0,0,0,0,76,97,109,98,100,97,32,115,99,97,108,105,110,103,32,102,97,99,116,111,114,115,32,114,101,115,101,116,58,32,32,37,103,10,0,0,0,0,0,0,85,110,114,101,99,111,103,110,105,122,101,100,32,111,112,116,105,111,110,46,32,32,83,101,101,32,39,104,101,108,112,32,117,110,115,101,116,39,46,0,66,97,100,32,116,105,109,101,32,102,111,114,109,97,116,32,105,110,32,115,116,114,105,110,103,0,0,0,0,0,0,0,44,37,103,112,116,0,0,0,111,118,36,101,114,0,0,0,97,116,32,85,83,69,82,32,111,114,105,103,105,110,58,32,0,0,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,107,101,121,119,111,114,100,32,39,97,112,112,101,110,100,39,0,0,0,0,0,0,116,117,112,108,101,32,115,121,110,116,97,120,32,101,114,114,111,114,0,0,0,0,0,0,37,98,0,0,0,0,0,0,94,10,0,0,0,0,0,0,121,120,0,0,0,0,0,0,103,112,95,115,101,116,95,112,111,105,110,116,115,105,122,101,40,37,46,51,102,41,59,10,0,0,0,0,0,0,0,0,104,111,114,36,105,122,111,110,116,97,108,0,0,0,0,0,97,116,32,68,69,70,65,85,76,84,32,112,111,115,105,116,105,111,110,10,0,0,0,0,97,112,112,101,110,100,0,0,69,120,112,101,99,116,105,110,103,32,39,44,39,32,111,114,32,39,41,39,0,0,0,0,104,101,97,100,0,0,0,0,112,108,117,115,0,0,0,0,32,37,99,10,0,0,0,0,112,32,58,61,32,117,110,105,116,115,113,117,97,114,101,32,120,121,115,99,97,108,101,100,32,40,37,46,51,102,97,44,37,46,51,102,97,41,32,115,104,105,102,116,101,100,32,40,37,46,51,102,97,44,37,46,51,102,97,41,59,10,0,0,118,101,114,36,116,105,99,97,108,0,0,0,0,0,0,0,114,101,115,36,101,116,0,0,78,79,84,32,100,114,97,119,110,10,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,102,105,108,101,110,97,109,101,0,0,0,0,0,0,112,114,101,102,105,120,0,0,37,115,10,37,115,9,37,115,10,37,115,9,86,101,114,115,105,111,110,32,37,115,32,112,97,116,99,104,108,101,118,101,108,32,37,115,32,32,32,32,108,97,115,116,32,109,111,100,105,102,105,101,100,32,37,115,10,37,115,9,66,117,105,108,100,32,83,121,115,116,101,109,58,32,37,115,32,37,115,10,37,115,10,37,115,9,37,115,10,37,115,9,84,104,111,109,97,115,32,87,105,108,108,105,97,109,115,44,32,67,111,108,105,110,32,75,101,108,108,101,121,32,97,110,100,32,109,97,110,121,32,111,116,104,101,114,115,10,37,115,10,37,115,9,103,110,117,112,108,111,116,32,104,111,109,101,58,32,32,32,32,32,104,116,116,112,58,47,47,119,119,119,46,103,110,117,112,108,111,116,46,105,110,102,111,10,0,0,0,0,0,0,103,112,95,115,101,116,95,108,105,110,101,119,105,100,116,104,40,37,46,51,102,41,59,10,0,0,0,0,0,0,0,0,120,122,121,0,0,0,0,0,99,36,101,110,116,101,114,0,100,114,97,119,110,32,98,97,99,107,10,9,0,0,0,0,110,111,114,111,116,36,97,116,101,0,0,0,0,0,0,0,10,9,100,117,109,109,121,32,118,97,114,105,97,98,108,101,32,105,115,32,116,32,102,111,114,32,99,117,114,118,101,115,44,32,117,47,118,32,102,111,114,32,115,117,114,102,97,99,101,115,10,0,0,0,0,0,115,101,116,32,109,97,112,112,105,110,103,32,0,0,0,0,98,111,114,100,101,114,0,0,116,104,105,115,95,112,108,111,116,32,33,61,32,78,85,76,76,0,0,0,0,0,0,0,97,120,101,115,32,109,117,115,116,32,98,101,32,120,49,121,49,44,32,120,49,121,50,44,32,120,50,121,49,32,111,114,32,120,50,121,50,0,0,0,116,105,108,100,101,32,101,120,112,97,110,115,105,111,110,0,94,0,0,0,0,0,0,0,99,111,110,116,101,120,116,46,116,114,109,32,115,101,116,95,99,111,108,111,114,32,117,110,107,110,111,119,110,32,99,111,108,111,114,115,112,101,99,45,62,116,121,112,101,32,37,105,0,0,0,0,0,0,0,0,114,36,105,103,104,116,0,0,100,114,97,119,110,32,102,114,111,110,116,10,9,0,0,0,115,101,116,32,109,97,99,114,111,115,10,0,0,0,0,0,115,101,116,32,116,101,114,109,32,37,115,32,37,115,0,0,102,95,115,112,114,105,110,116,102,0,0,0,0,0,0,0,77,111,114,101,32,116,104,97,110,32,37,100,32,101,108,101,109,101,110,116,115,0,0,0,37,37,103,112,95,115,101,116,95,99,111,108,111,114,40,102,114,97,99,40,37,46,52,102,41,41,59,10,0,0,0,0,108,36,101,102,116,0,0,0,9,99,111,108,111,114,32,98,111,120,32,119,105,116,104,111,117,116,32,98,111,114,100,101,114,32,105,115,32,0,0,0,69,120,112,101,99,116,101,100,32,99,111,109,109,97,46,0,117,110,115,101,116,32,99,108,97,98,101,108,10,0,0,0,104,105,100,100,101,110,32,110,111,114,116,104,95,101,100,103,101,115,0,0,0,0,0,0,76,111,119,66,121,116,101,70,105,114,115,116,0,0,0,0,103,112,95,115,101,116,95,99,111,108,111,114,40,114,103,98,40,37,51,46,50,102,44,37,51,46,50,102,44,37,51,46,50,102,41,41,59,10,0,0,98,36,111,116,116,111,109,0,68,69,70,65,85,76,84,32,108,105,110,101,32,116,121,112,101,32,105,115,32,0,0,0,86,97,108,117,101,32,111,117,116,32,111,102,32,114,97,110,103,101,32,91,48,44,49,93,46,0,0,0,0,0,0,0,115,101,116,32,99,108,97,98,101,108,32,39,37,115,39,10,0,0,0,0,0,0,0,0,105,115,111,95,56,56,53,57,95,50,0,0,0,0,0,0,104,105,115,116,111,103,114,97,109,0,0,0,0,0,0,0,73,110,118,97,108,105,100,32,110,117,109,101,114,105,99,32,111,114,32,116,117,112,108,101,32,102,111,114,109,0,0,0,10,35,32,67,117,114,118,101,32,116,105,116,108,101,58,32,34,37,115,34,0,0,0,0,103,112,95,115,101,116,95,99,111,108,111,114,40,108,116,40,37,100,41,41,59,10,0,0,116,36,111,112,0,0,0,0,108,105,110,101,32,116,121,112,101,32,37,100,32,105,115,32,0,0,0,0,0,0,0,0,85,110,107,110,111,119,110,32,99,111,108,111,114,32,110,97,109,101,46,0,0,0,0,0,32,98,111,116,104,10,0,0,73,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,73,110,118,97,108,105,100,32,99,111,109,109,97,32,115,101,112,97,114,97,116,101,100,32,116,121,112,101,0,0,0,0,57,48,32,109,117,108,32,99,111,115,0,0,0,0,0,0,45,45,40,37,46,51,102,97,44,37,46,51,102,97,41,59,10,103,112,95,100,114,97,119,40,112,41,59,10,0,0,0,111,102,102,0,0,0,0,0,9,99,111,108,111,114,32,98,111,120,32,119,105,116,104,32,98,111,114,100,101,114,44,32,0,0,0,0,0,0,0,0,85,110,107,110,111,119,110,32,99,111,108,111,114,32,115,112,101,99,105,102,105,101,114,46,32,85,115,101,32,39,35,114,114,103,103,98,98,39,46,0,32,115,117,114,102,97,99,101,10,0,0,0,0,0,0,0,80,101,114,112,101,110,100,105,99,117,108,97,114,32,118,101,99,116,111,114,32,99,97,110,110,111,116,32,98,101,32,122,101,114,111,0,0,0,0,0,112,117,115,104,99,0,0,0,45,45,99,121,99,108,101,59,10,103,112,95,100,114,97,119,40,112,41,59,10,0,0,0,111,110,0,0,0,0,0,0,101,120,116,101,110,100,32,100,121,110,97,114,114,97,121,0,99,111,114,110,101,114,32,37,105,10,0,0,0,0,0,0,35,37,50,120,37,50,120,37,50,120,0,0,0,0,0,0,32,98,97,115,101,10,0,0,84,104,114,101,101,45,100,105,109,101,110,115,105,111,110,97,108,32,116,117,112,108,101,32,114,101,113,117,105,114,101,100,0,0,0,0,0,0,0,0,76,97,109,98,100,97,32,83,116,97,114,116,32,118,97,108,117,101,32,115,101,116,58,32,37,103,10,0,0,0,0,0,103,112,95,100,111,116,40,37,46,51,102,97,44,37,46,51,102,97,41,59,10,0,0,0,109,97,120,105,109,117,109,32,111,102,32,52,32,99,111,114,110,101,114,115,10,0,0,0,69,120,112,101,99,116,101,100,32,40,32,116,111,32,115,116,97,114,116,32,103,114,97,100,105,101,110,116,32,100,101,102,105,110,105,116,105,111,110,46,0,0,0,0,0,0,0,0,10,115,101,116,32,115,97,109,112,108,101,115,32,37,100,44,32,37,100,10,115,101,116,32,105,115,111,115,97,109,112,108,101,115,32,37,100,44,32,37,100,10,37,115,115,101,116,32,115,117,114,102,97,99,101,10,37,115,115,101,116,32,99,111,110,116,111,117,114,0,0,0,37,66,0,0,0,0,0,0,120,121,0,0,0,0,0,0,41,59,10,0,0,0,0,0,98,97,99,107,0,0,0,0,109,105,110,105,109,117,109,32,111,102,32,52,32,99,111,114,110,101,114,115,10,0,0,0,71,114,97,121,32,115,99,97,108,101,32,110,111,116,32,115,111,114,116,101,100,32,105,110,32,103,114,97,100,105,101,110,116,46,0,0,0,0,0,0,101,113,117,97,108,32,120,121,122,0,0,0,0,0,0,0,37,100,46,32,37,100,46,32,37,48,52,100,32,37,100,58,37,48,50,100,0,0,0,0,110,111,104,101,97,100,0,0,108,101,0,0,0,0,0,0,48,120,37,48,54,120,0,0,44,100,101,110,115,105,116,121,40,48,41,0,0,0,0,0,102,114,111,110,116,0,0,0,114,101,36,114,101,97,100,0,109,101,100,105,97,110,32,111,102,32,52,32,99,111,114,110,101,114,115,10,0,0,0,0,78,111,32,118,97,108,105,100,32,112,97,108,101,116,116,101,32,102,111,117,110,100,0,0,83,84,65,84,83,95,0,0,101,113,117,97,108,32,120,121,0,0,0,0,0,0,0,0,37,100,58,37,48,50,100,0,98,105,36,110,100,0,0,0,73,110,116,101,114,110,97,108,32,101,114,114,111,114,32,40,100,97,116,97,102,105,108,101,46,99,41,58,32,85,110,107,110,111,119,110,32,112,108,111,116,32,109,111,100,101,0,0,47,117,115,114,47,108,111,99,97,108,47,98,105,110,0,0,44,112,97,116,116,101,114,110,40,37,100,41,0,0,0,0,121,120,122,0,0,0,0,0,110,111,98,101,110,116,36,111,118,101,114,0,0,0,0,0,103,101,111,109,101,116,114,105,99,97,108,32,109,101,97,110,32,111,102,32,52,32,99,111,114,110,101,114,115,10,0,0,105,110,118,97,108,105,100,32,111,112,116,105,111,110,0,0,66,97,100,32,100,97,116,97,32,111,110,32,108,105,110,101,32,37,100,0,0,0,0,0,10,115,101,116,32,118,105,101,119,32,32,37,115,0,0,0,37,100,46,32,37,100,46,32,37,48,52,100,0,0,0,0,84,104,114,101,101,45,100,105,109,101,110,115,105,111,110,97,108,32,116,117,112,108,101,32,114,101,113,117,105,114,101,100,32,102,111,114,32,115,101,116,116,105,110,103,32,98,105,110,97,114,121,32,112,97,114,97,109,101,116,101,114,115,0,0,109,97,116,36,114,105,120,0,110,111,98,111,114,100,101,114,10,0,0,0,0,0,0,0,116,104,105,115,95,112,108,111,116,32,61,61,32,42,116,112,95,51,100,95,112,116,114,0,67,97,110,110,111,116,32,101,120,112,97,110,100,32,101,109,112,116,121,32,112,97,116,104,0,0,0,0,0,0,0,0,124,0,0,0,0,0,0,0,71,80,70,85,78,95,0,0,44,100,101,110,115,105,116,121,40,37,46,50,102,41,0,0,98,101,110,116,36,111,118,101,114,0,0,0,0,0,0,0,85,112,0,0,0,0,0,0,97,118,101,114,97,103,101,100,32,52,32,99,111,114,110,101,114,115,10,0,0,0,0,0,112,109,51,100,32,103,114,97,100,105,101,110,116,0,0,0,37,103,44,32,37,103,44,32,37,103,44,32,37,103,0,0,99,97,110,32,111,110,108,121,32,100,111,32,98,101,115,115,101,108,32,102,117,110,99,116,105,111,110,115,32,111,102,32,114,101,97,108,115,0,0,0,70,105,114,115,116,32,112,97,114,97,109,101,116,101,114,32,116,111,32,115,112,114,105,110,116,102,32,109,117,115,116,32,98,101,32,97,32,102,111,114,109,97,116,32,115,116,114,105,110,103,0,0,0,0,0,0,84,104,114,101,101,45,100,105,109,101,110,115,105,111,110,97,108,32,116,117,112,108,101,32,114,101,113,117,105,114,101,100,32,102,111,114,32,51,68,32,112,108,111,116,0,0,0,0,44,116,114,97,110,115,112,97,114,101,110,116,0,0,0,0,110,111,97,108,116,36,100,105,97,103,111,110,97,108,0,0,9,113,117,97,100,114,97,110,103,108,101,32,99,111,108,111,114,32,97,99,99,111,114,100,105,110,103,32,116,111,32,0,103,114,97,100,105,101,110,116,0,0,0,0,0,0,0,0,84,119,111,45,100,105,109,101,110,115,105,111,110,97,108,32,116,117,112,108,101,32,114,101,113,117,105,114,101,100,32,102,111,114,32,50,68,32,112,108,111,116,0,0,0,0,0,0,104,105,100,100,101,110,32,116,104,101,115,101,95,112,111,108,121,115,0,0,0,0,0,0,88,114,105,103,104,116,89,117,112,0,0,0,0,0,0,0,103,112,95,102,105,108,108,40,112,0,0,0,0,0,0,0,97,108,116,36,100,105,97,103,111,110,97,108,0,0,0,0,9,115,116,101,112,115,32,102,111,114,32,98,105,108,105,110,101,97,114,32,105,110,116,101,114,112,111,108,97,116,105,111,110,58,32,37,100,44,37,100,10,0,0,0,0,0,0,0,76,101,115,115,32,116,104,97,110,32,51,32,117,115,105,110,103,32,115,112,101,99,115,32,102,111,114,32,112,97,108,101,116,116,101,0,0,0,0,0,115,101,116,32,118,105,101,119,32,0,0,0,0,0,0,0,44,32,40,117,110,100,101,102,105,110,101,100,41,47,0,0,99,117,116,101,32,108,105,116,116,108,101,32,101,108,108,105,112,115,101,32,102,111,114,32,116,104,101,32,107,101,121,32,115,97,109,112,108,101,0,0,78,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,116,111,32,115,107,105,112,32,109,117,115,116,32,98,101,32,112,111,115,105,116,105,118,101,32,105,110,116,101,103,101,114,0,0,0,0,0,0,0,0,45,45,99,121,99,108,101,59,10,0,0,0,0,0,0,0,110,111,117,110,100,36,101,102,105,110,101,100,0,0,0,0,9,112,109,51,100,45,104,105,100,100,101,110,51,100,32,105,115,32,37,115,10,0,0,0,117,110,115,101,116,32,100,101,99,105,109,97,108,115,105,103,110,10,0,0,0,0,0,0,111,102,102,36,115,101,116,0,115,99,97,36,108,101,0,0,73,109,112,114,111,112,101,114,32,115,99,97,110,110,105,110,103,32,115,116,114,105,110,103,46,32,84,114,121,32,50,32,99,104,97,114,97,99,116,101,114,32,115,116,114,105,110,103,32,102,111,114,32,50,68,32,100,97,116,97,0,0,0,0,117,112,36,119,97,114,100,115,0,0,0,0,0,0,0,0,100,111,119,110,36,119,97,114,100,115,0,0,0,0,0,0,114,111,119,36,115,102,105,114,115,116,0,0,0,0,0,0,99,111,108,36,117,109,110,115,102,105,114,115,116,0,0,0,115,105,110,40,57,48,120,41,0,0,0,0,0,0,0,0,79,114,105,103,105,110,32,105,115,32,97,116,32,40,37,102,44,37,102,41,0,0,0,0,45,45,40,37,46,51,102,97,44,37,46,51,102,97,41,0,46,92,34,71,78,85,80,76,79,84,58,32,71,82,79,70,70,32,112,105,99,116,117,114,101,32,117,115,105,110,103,32,116,104,101,32,103,112,105,99,32,112,114,101,112,114,111,99,101,115,115,111,114,10,0,0,117,110,100,101,102,36,105,110,101,100,0,0,0,0,0,0,46,80,69,10,0,0,0,0,9,112,109,51,100,45,104,105,100,100,101,110,51,100,32,105,115,32,111,110,32,97,110,100,32,119,105,108,108,32,117,115,101,32,108,105,110,101,115,116,121,108,101,32,37,100,10,0,69,120,112,101,99,116,101,100,32,99,111,109,109,97,0,0,115,101,116,32,100,101,99,105,109,97,108,115,105,103,110,32,39,37,115,39,10,0,0,0,120,61,37,102,59,32,121,61,37,102,10,0,0,0,0,0,47,40,117,110,100,101,102,105,110,101,100,41,0,0,0,0,46,80,83,32,37,102,32,37,102,10,0,0,0,0,0,0,109,111,118,101,32,116,111,32,40,120,43,37,102,44,121,43,37,102,41,10,0,0,0,0,73,109,112,114,111,112,101,114,32,115,99,97,110,110,105,110,103,32,115,116,114,105,110,103,46,32,84,114,121,32,51,32,99,104,97,114,97,99,116,101,114,32,115,116,114,105,110,103,32,102,111,114,32,51,68,32,100,97,116,97,0,0,0,0,100,97,115,104,101,100,32,48,46,48,55,53,0,0,0,0,100,97,115,104,101,100,32,48,46,48,53,0,0,0,0,0,100,111,116,116,101,100,0,0,116,104,105,99,107,110,101,115,115,32,49,46,48,0,0,0,32,92,10,32,32,32,116,104,101,110,32,116,111,32,40,120,43,37,102,44,121,43,37,102,41,0,0,0,0,0,0,0,10,32,32,0,0,0,0,0,108,105,110,101,32,37,115,32,116,111,32,40,120,43,37,102,44,121,43,37,102,41,0,0,116,114,105,36,97,110,103,108,101,112,97,116,116,101,114,110,0,0,0,0,0,0,0,0,97,116,32,120,43,37,102,44,121,43,37,102,10,0,0,0,97,108,108,32,52,32,112,111,105,110,116,115,32,111,102,32,116,104,101,32,113,117,97,100,114,97,110,103,108,101,32,105,110,32,120,44,121,32,114,97,110,103,101,115,10,0,0,0,110,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,102,111,114,32,102,117,110,99,116,105,111,110,0,0,115,101,116,32,100,101,99,105,109,97,108,115,105,103,110,32,108,111,99,97,108,101,32,34,37,115,34,10,0,0,0,0,114,106,117,115,116,32,0,0,108,106,117,115,116,32,0,0,67,97,110,110,111,116,32,97,108,116,101,114,32,115,99,97,110,110,105,110,103,32,109,101,116,104,111,100,32,102,111,114,32,111,110,101,45,100,105,109,101,110,115,105,111,110,97,108,32,100,97,116,97,0,0,0,59,32,114,101,115,101,116,32,108,105,110,101,119,105,100,10,0,0,0,0,0,0,0,0,84,111,111,32,109,97,110,121,32,114,97,110,103,101,45,115,112,101,99,115,32,102,111,114,32,97,32,37,100,45,118,97,114,105,97,98,108,101,32,102,105,116,0,0,0,0,0,0,108,105,110,101,32,102,114,111,109,32,120,43,37,102,44,121,43,37,102,32,116,111,32,120,43,37,102,44,121,43,37,102,10,0,0,0,0,0,0,0,97,114,114,111,119,104,101,97,100,61,55,59,32,97,114,114,111,119,32,102,114,111,109,32,120,43,37,102,44,121,43,37,102,32,116,111,32,120,43,37,102,44,121,43,37,102,10,0,49,54,0,0,0,0,0,0,27,91,114,27,91,50,52,59,49,72,0,0,0,0,0,0,40,37,46,51,102,97,44,37,46,51,102,97,41,0,0,0,27,91,50,74,27,91,50,52,59,49,72,0,0,0,0,0,110,111,111,102,102,36,115,101,116,0,0,0,0,0,0,0,27,92,27,91,50,52,59,49,72,0,0,0,0,0,0,0,97,116,32,108,101,97,115,116,32,49,32,112,111,105,110,116,32,111,102,32,116,104,101,32,113,117,97,100,114,97,110,103,108,101,32,105,110,32,120,44,121,32,114,97,110,103,101,115,10,0,0,0,0,0,0,0,115,101,116,32,112,111,105,110,116,115,105,122,101,32,37,103,10,115,101,116,32,112,111,105,110,116,105,110,116,101,114,118,97,108,98,111,120,32,37,103,10,115,101,116,32,101,110,99,111,100,105,110,103,32,37,115,10,37,115,115,101,116,32,112,111,108,97,114,10,37,115,115,101,116,32,112,97,114,97,109,101,116,114,105,99,10,0,0,27,91,50,74,27,80,49,112,83,40,67,48,41,83,40,69,41,84,40,65,48,41,10,0,80,91,37,100,44,37,100,93,10,0,0,0,0,0,0,0,118,91,93,118,91,37,100,44,37,100,93,10,0,0,0,0,122,90,0,0,0,0,0,0,87,40,80,37,100,41,10,0,87,40,73,37,100,41,10,0,37,97,0,0,0,0,0,0,84,40,68,48,44,83,49,41,10,0,0,0,0,0,0,0,10,37,115,37,115,10,0,0,84,40,68,57,48,44,83,49,41,10,0,0,0,0,0,0,67,111,109,109,97,110,100,32,39,117,110,115,101,116,32,104,105,115,116,111,114,121,115,105,122,101,39,32,114,101,113,117,105,114,101,115,32,104,105,115,116,111,114,121,32,115,117,112,112,111,114,116,46,0,0,0,100,101,112,114,101,99,97,116,101,100,32,115,121,110,116,97,120,44,32,117,115,101,32,34,117,110,115,101,116,34,0,0,27,77,71,49,27,82,75,33,27,83,75,33,27,76,90,27,37,37,33,49,0,0,0,0,112,32,58,61,32,0,0,0,27,37,37,33,48,27,77,78,48,27,77,67,66,55,67,59,27,77,81,49,27,77,84,49,0,0,0,0,0,0,0,0,27,37,37,33,48,27,76,90,27,37,37,33,49,0,0,0,9,99,108,105,112,112,105,110])
+.concat([103,58,32,0,0,0,0,0,78,97,109,101,100,32,99,111,108,111,114,115,32,119,105,108,108,32,112,114,111,100,117,99,101,32,115,116,114,97,110,103,101,32,114,101,115,117,108,116,115,32,105,102,32,110,111,116,32,105,110,32,99,111,108,111,114,32,109,111,100,101,32,82,71,66,46,0,0,0,0,0,115,101,116,32,111,102,102,115,101,116,115,0,0,0,0,0,27,76,86,49,27,37,37,33,49,0,0,0,0,0,0,0,27,37,37,33,48,27,12,27,76,86,48,0,0,0,0,0,27,76,70,0,0,0,0,0,121,89,0,0,0,0,0,0,115,106,36,105,115,0,0,0,27,76,71,0,0,0,0,0,103,101,0,0,0,0,0,0,37,52,100,32,0,0,0,0,27,77,86,0,0,0,0,0,27,77,76,0,0,0,0,0,27,77,76,63,0,0,0,0,37,108,102,32,44,32,37,108,102,32,37,99,0,0,0,0,27,77,76,53,0,0,0,0,32,32,99,108,105,112,32,99,117,114,114,101,110,116,112,105,99,116,117,114,101,32,116,111,32,117,110,105,116,115,113,117,97,114,101,32,120,121,115,99,97,108,101,100,32,40,37,46,51,102,97,44,37,46,51,102,97,41,32,115,104,105,102,116,101,100,32,40,37,46,51,102,97,44,37,46,51,102,97,41,59,41,59,10,0,0,0,0,27,76,84,0,0,0,0,0,100,101,102,36,97,117,108,116,115,0,0,0,0,0,0,0,114,101,112,36,108,111,116,0,27,77,82,69,58,48,0,0,9,102,108,117,115,104,105,110,103,32,116,114,105,97,110,103,108,101,115,32,97,114,101,32,37,115,100,114,97,119,110,10,0,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,112,97,108,101,116,116,101,32,111,112,116,105,111,110,0,0,69,120,112,101,99,116,105,110,103,32,91,110,111,93,111,117,116,112,117,116,32,111,114,32,112,114,101,102,105,120,0,0,115,101,116,32,108,111,103,115,99,97,108,101,32,37,115,32,37,103,10,0,0,0,0,0,27,77,82,48,48,0,0,0,27,76,72,0,0,0,0,0,27,77,77,0,0,0,0,0,120,88,0,0,0,0,0,0,31,37,115,10,0,0,0,0,27,91,63,51,56,108,0,0,35,33,37,115,47,103,110,117,112,108,111,116,10,35,10,0,96,97,96,97,98,99,100,104,105,106,107,108,0,0,0,0,31,27,3,0,0,0,0,0,67,111,109,109,97,110,100,32,39,115,101,116,32,104,105,115,116,111,114,121,115,105,122,101,39,32,114,101,113,117,105,114,101,115,32,104,105,115,116,111,114,121,32,115,117,112,112,111,114,116,46,0,0,0,0,0,100,114,97,119,32,98,105,116,109,97,112,105,109,97,103,101,32,40,37,117,44,37,117,44,105,109,103,41,32,120,121,115,99,97,108,101,100,32,40,37,46,51,102,97,44,37,46,51,102,97,41,32,115,104,105,102,116,101,100,32,40,37,46,51,102,97,44,37,46,51,102,97,41,59,10,0,0,0,0,0,27,12,0,0,0,0,0,0,110,111,32,109,97,116,99,104,105,110,103,32,39,125,39,0,122,36,101,114,111,0,0,0,121,122,120,0,0,0,0,0,56,57,58,59,0,0,0,0,69,78,68,0,0,0,0,0,112,97,114,97,36,108,108,101,108,0,0,0,0,0,0,0,110,111,110,45,110,101,103,97,116,105,118,101,32,110,117,109,98,101,114,32,114,101,113,117,105,114,101,100,0,0,0,0,117,110,115,101,116,32,108,111,103,115,99,97,108,101,10,0,27,37,99,0,0,0,0,0,27,91,63,51,56,104,0,0,116,105,116,108,101,0,0,0,67,97,110,32,111,110,108,121,32,102,108,105,112,32,120,44,32,121,44,32,97,110,100,47,111,114,32,122,0,0,0,0,32,101,109,112,116,121,32,0,106,115,36,100,105,114,0,0,102,115,105,122,101,0,0,0,97,120,36,101,115,0,0,0,32,106,115,100,105,114,32,34,37,115,34,0,0,0,0,0,47,98,105,110,47,115,104,0,38,38,0,0,0,0,0,0,32,116,105,116,108,101,32,34,37,115,34,0,0,0,0,0,118,97,114,110,97,109,101,0,32,109,111,117,115,105,110,103,0,0,0,0,0,0,0,0,100,114,97,119,32,105,109,97,103,101,40,10,32,32,0,0,32,115,116,97,110,100,97,108,111,110,101,0,0,0,0,0,114,97,120,36,105,115,0,0,32,110,97,109,101,32,34,37,115,34,0,0,0,0,0,0,115,119,97,112,112,101,100,32,112,100,112,32,40,100,105,109,109,108,101,41,0,0,0,0,66,69,71,73,78,0,0,0,85,110,107,110,111,119,110,32,99,111,108,111,114,32,109,111,100,101,108,46,0,0,0,0,37,115,10,0,0,0,0,0,116,105,116,108,101,32,0,0,32,102,111,110,116,115,99,97,108,101,32,37,103,0,0,0,9,99,117,114,114,101,110,116,32,116,101,114,109,105,110,97,108,32,116,121,112,101,32,105,115,32,117,110,107,110,111,119,110,10,0,0,0,0,0,0,77,79,85,83,69,95,67,84,82,76,0,0,0,0,0,0,32,101,110,104,97,110,99,101,100,0,0,0,0,0,0,0,115,112,114,105,110,116,102,32,97,114,103,115,0,0,0,0,37,115,32,102,115,105,122,101,32,37,103,32,108,119,32,37,103,0,0,0,0,0,0,0,120,88,121,89,122,90,0,0,32,115,105,122,101,32,37,100,44,37,100,0,0,0,0,0,32,98,117,116,116,0,0,0,32,114,111,117,110,100,101,100,0,0,0,0,0,0,0,0,32,100,97,115,104,108,101,110,103,116,104,32,37,51,46,49,102,0,0,0,0,0,0,0,32,115,111,108,105,100,0,0,105,109,97,32,58,61,32,34,37,37,10,0,0,0,0,0,102,111,110,116,58,32,101,120,112,101,99,116,105,110,103,32,115,116,114,105,110,103,0,0,122,101,114,111,97,36,120,105,115,0,0,0,0,0,0,0,105,108,108,101,103,97,108,32,106,97,118,97,115,99,114,105,112,116,32,102,117,110,99,116,105,111,110,32,110,97,109,101,0,0,0,0,0,0,0,0,102,108,117,115,104,101,100,32,102,114,111,109,32,37,115,10,0,0,0,0,0,0,0,0,69,120,112,101,99,116,101,100,32,99,111,108,111,114,32,109,111,100,101,108,46,0,0,0,99,111,108,117,109,110,115,116,97,99,107,101,100,32,0,0,101,120,112,101,99,116,105,110,103,32,97,32,106,97,118,97,115,99,114,105,112,116,32,102,117,110,99,116,105,111,110,32,110,97,109,101,0,0,0,0,77,79,85,83,69,95,65,76,84,0,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,97,110,32,72,84,77,76,32,116,105,116,108,101,32,115,116,114,105,110,103,0,0,60,47,100,105,118,62,10,10,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,10,0,0,0,0,0,0,0,0,70,108,105,112,112,105,110,103,32,100,105,109,101,110,115,105,111,110,32,100,105,114,101,99,116,105,111,110,32,109,117,115,116,32,98,101,32,49,32,111,114,32,48,0,0,0,0,0,60,47,116,100,62,60,47,116,114,62,60,47,116,97,98,108,101,62,10,0,0,0,0,0,104,105,100,100,101,110,32,110,111,114,116,104,95,112,111,108,121,115,0,0,0,0,0,0,60,116,97,98,108,101,32,99,108,97,115,115,61,34,112,108,111,116,34,62,10,60,116,114,62,60,116,100,62,10,32,32,32,32,60,99,97,110,118,97,115,32,105,100,61,34,103,110,117,112,108,111,116,95,99,97,110,118,97,115,34,32,119,105,100,116,104,61,34,37,100,34,32,104,101,105,103,104,116,61,34,37,100,34,32,116,97,98,105,110,100,101,120,61,34,48,34,62,10,9,83,111,114,114,121,44,32,121,111,117,114,32,98,114,111,119,115,101,114,32,115,101,101,109,115,32,110,111,116,32,116,111,32,115,117,112,112,111,114,116,32,116,104,101,32,72,84,77,76,32,53,32,99,97,110,118,97,115,32,101,108,101,109,101,110,116,10,32,32,32,32,60,47,99,97,110,118,97,115,62,10,60,47,116,100,62,60,47,116,114,62,10,60,47,116,97,98,108,101,62,10,0,0,0,0,0,0,0,60,47,116,100,62,60,116,100,62,10,0,0,0,0,0,0,103,110,117,112,108,111,116,95,99,111,110,116,111,117,114,0,60,47,116,97,98,108,101,62,60,47,116,100,62,60,47,116,114,62,10,60,47,116,97,98,108,101,62,10,0,0,0,0,60,116,114,62,32,60,116,100,32,99,108,97,115,115,61,34,109,98,48,34,62,121,50,38,110,98,115,112,59,60,47,116,100,62,32,60,116,100,32,99,108,97,115,115,61,34,109,98,49,34,62,60,115,112,97,110,32,105,100,61,34,103,110,117,112,108,111,116,95,99,97,110,118,97,115,95,121,50,34,62,38,110,98,115,112,59,60,47,115,112,97,110,62,60,47,116,100,62,32,60,47,116,114,62,10,0,0,0,0,0,0,0,60,116,114,62,32,60,116,100,32,99,108,97,115,115,61,34,109,98,48,34,62,120,50,38,110,98,115,112,59,60,47,116,100,62,32,60,116,100,32,99,108,97,115,115,61,34,109,98,49,34,62,60,115,112,97,110,32,105,100,61,34,103,110,117,112,108,111,116,95,99,97,110,118,97,115,95,120,50,34,62,38,110,98,115,112,59,60,47,115,112,97,110,62,60,47,116,100,62,32,60,47,116,114,62,10,0,0,0,0,0,0,0,37,48,50,120,0,0,0,0,88,114,105,103,104,116,89,100,111,119,110,0,0,0,0,0,122,122,101,114,111,97,36,120,105,115,0,0,0,0,0,0,60,116,97,98,108,101,32,99,108,97,115,115,61,34,109,111,117,115,101,98,111,120,34,32,105,100,61,34,103,110,117,112,108,111,116,95,109,111,117,115,101,98,111,120,34,32,98,111,114,100,101,114,61,49,62,10,60,116,114,62,32,60,116,100,32,99,108,97,115,115,61,34,109,98,48,34,62,120,38,110,98,115,112,59,60,47,116,100,62,32,60,116,100,32,99,108,97,115,115,61,34,109,98,49,34,62,60,115,112,97,110,32,105,100,61,34,103,110,117,112,108,111,116,95,99,97,110,118,97,115,95,120,34,62,38,110,98,115,112,59,60,47,115,112,97,110,62,60,47,116,100,62,32,60,47,116,114,62,10,60,116,114,62,32,60,116,100,32,99,108,97,115,115,61,34,109,98,48,34,62,121,38,110,98,115,112,59,60,47,116,100,62,32,60,116,100,32,99,108,97,115,115,61,34,109,98,49,34,62,60,115,112,97,110,32,105,100,61,34,103,110,117,112,108,111,116,95,99,97,110,118,97,115,95,121,34,62,38,110,98,115,112,59,60,47,115,112,97,110,62,60,47,116,100,62,32,60,47,116,114,62,10,0,0,67,69,78,84,69,82,69,68,10,0,0,0,0,0,0,0,115,97,116,36,117,114,97,116,105,111,110,0,0,0,0,0,114,111,119,115,116,97,99,107,101,100,32,0,0,0,0,0,35,35,32,0,0,0,0,0,32,32,32,32,32,32,60,47,116,97,98,108,101,62,10,32,32,60,47,116,100,62,60,47,116,114,62,10,60,47,116,97,98,108,101,62,60,47,116,100,62,60,47,116,114,62,60,116,114,62,60,116,100,32,99,108,97,115,115,61,34,109,111,117,115,101,98,111,120,34,62,10,0,0,0,0,0,0,0,0,77,79,85,83,69,95,83,72,73,70,84,0,0,0,0,0,9,60,47,116,114,62,10,0,9,32,32,60,116,100,32,99,108,97,115,115,61,34,105,99,111,110,34,32,62,32,60,47,116,100,62,10,0,0,0,0,83,97,109,112,108,101,32,112,101,114,105,111,100,32,109,117,115,116,32,98,101,32,112,111,115,105,116,105,118,101,46,32,84,114,121,32,96,102,108,105,112,96,32,102,111,114,32,99,104,97,110,103,105,110,103,32,100,105,114,101,99,116,105,111,110,0,0,0,0,0,0,0,84,104,105,115,32,116,101,114,109,105,110,97,108,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,102,105,108,108,101,100,32,112,111,108,121,103,111,110,115,0,0,9,32,32,60,116,100,32,99,108,97,115,115,61,34,105,99,111,110,34,32,111,110,99,108,105,99,107,61,103,110,117,112,108,111,116,46,116,111,103,103,108,101,95,112,108,111,116,40,34,103,112,95,112,108,111,116,95,37,100,34,41,62,37,100,60,47,116,100,62,10,0,0,112,97,114,97,109,101,116,101,114,32,116,111,32,96,112,109,51,100,32,97,116,96,32,114,101,113,117,105,114,101,115,32,99,111,109,98,105,110,97,116,105,111,110,32,111,102,32,117,112,32,116,111,32,54,32,99,104,97,114,97,99,116,101,114,115,32,98,44,115,44,116,10,9,40,100,114,97,119,105,110,103,32,97,116,32,98,111,116,116,111,109,44,32,115,117,114,102,97,99,101,44,32,116,111,112,41,0,0,0,0,0,0,9,60,116,114,62,10,0,0,60,116,97,98,108,101,32,99,108,97,115,115,61,34,109,98,108,101,102,116,34,62,60,116,114,62,60,116,100,32,99,108,97,115,115,61,34,109,111,117,115,101,98,111,120,34,62,10,60,116,97,98,108,101,32,99,108,97,115,115,61,34,109,111,117,115,101,98,111,120,34,32,98,111,114,100,101,114,61,48,62,10,32,32,60,116,114,62,60,116,100,32,99,108,97,115,115,61,34,109,111,117,115,101,98,111,120,34,62,10,32,32,32,32,60,116,97,98,108,101,32,99,108,97,115,115,61,34,109,111,117,115,101,98,111,120,34,32,105,100,61,34,103,110,117,112,108,111,116,95,109,111,117,115,101,98,111,120,34,32,98,111,114,100,101,114,61,48,62,10,32,32,32,32,60,116,114,62,60,116,100,32,99,108,97,115,115,61,34,109,98,104,34,62,60,47,116,100,62,60,47,116,114,62,10,32,32,32,32,60,116,114,62,60,116,100,32,99,108,97,115,115,61,34,109,98,104,34,62,10,32,32,32,32,32,32,60,116,97,98,108,101,32,99,108,97,115,115,61,34,109,111,117,115,101,98,111,120,34,62,10,9,60,116,114,62,10,9,32,32,60,116,100,32,99,108,97,115,115,61,34,105,99,111,110,34,62,60,47,116,100,62,10,9,32,32,60,116,100,32,99,108,97,115,115,61,34,105,99,111,110,34,32,111,110,99,108,105,99,107,61,103,110,117,112,108,111,116,46,116,111,103,103,108,101,95,103,114,105,100,62,60,105,109,103,32,115,114,99,61,34,37,115,103,114,105,100,46,112,110,103,34,32,105,100,61,34,103,110,117,112,108,111,116,95,103,114,105,100,95,105,99,111,110,34,32,99,108,97,115,115,61,34,105,99,111,110,45,105,109,97,103,101,34,32,97,108,116,61,34,35,34,32,116,105,116,108,101,61,34,116,111,103,103,108,101,32,103,114,105,100,34,62,60,47,116,100,62,10,9,32,32,60,116,100,32,99,108,97,115,115,61,34,105,99,111,110,34,32,111,110,99,108,105,99,107,61,103,110,117,112,108,111,116,46,117,110,122,111,111,109,62,60,105,109,103,32,115,114,99,61,34,37,115,112,114,101,118,105,111,117,115,122,111,111,109,46,112,110,103,34,32,105,100,61,34,103,110,117,112,108,111,116,95,117,110,122,111,111,109,95,105,99,111,110,34,32,99,108,97,115,115,61,34,105,99,111,110,45,105,109,97,103,101,34,32,97,108,116,61,34,117,110,122,111,111,109,34,32,116,105,116,108,101,61,34,117,110,122,111,111,109,34,62,60,47,116,100,62,10,9,32,32,60,116,100,32,99,108,97,115,115,61,34,105,99,111,110,34,32,111,110,99,108,105,99,107,61,103,110,117,112,108,111,116,46,114,101,122,111,111,109,62,60,105,109,103,32,115,114,99,61,34,37,115,110,101,120,116,122,111,111,109,46,112,110,103,34,32,105,100,61,34,103,110,117,112,108,111,116,95,114,101,122,111,111,109,95,105,99,111,110,34,32,99,108,97,115,115,61,34,105,99,111,110,45,105,109,97,103,101,34,32,97,108,116,61,34,114,101,122,111,111,109,34,32,116,105,116,108,101,61,34,114,101,122,111,111,109,34,62,60,47,116,100,62,10,9,32,32,60,116,100,32,99,108,97,115,115,61,34,105,99,111,110,34,32,111,110,99,108,105,99,107,61,103,110,117,112,108,111,116,46,116,111,103,103,108,101,95,122,111,111,109,95,116,101,120,116,62,60,105,109,103,32,115,114,99,61,34,37,115,116,101,120,116,122,111,111,109,46,112,110,103,34,32,105,100,61,34,103,110,117,112,108,111,116,95,116,101,120,116,122,111,111,109,95,105,99,111,110,34,32,99,108,97,115,115,61,34,105,99,111,110,45,105,109,97,103,101,34,32,97,108,116,61,34,122,111,111,109,32,116,101,120,116,34,32,116,105,116,108,101,61,34,122,111,111,109,32,116,101,120,116,32,119,105,116,104,32,112,108,111,116,34,62,60,47,116,100,62,10,9,32,32,60,116,100,32,99,108,97,115,115,61,34,105,99,111,110,34,32,111,110,99,108,105,99,107,61,103,110,117,112,108,111,116,46,112,111,112,117,112,95,104,101,108,112,40,41,62,60,105,109,103,32,115,114,99,61,34,37,115,104,101,108,112,46,112,110,103,34,32,105,100,61,34,103,110,117,112,108,111,116,95,104,101,108,112,95,105,99,111,110,34,32,99,108,97,115,115,61,34,105,99,111,110,45,105,109,97,103,101,34,32,97,108,116,61,34,63,34,32,116,105,116,108,101,61,34,104,101,108,112,34,62,60,47,116,100,62,10,9,60,47,116,114,62,10,0,0,0,0,0,60,47,115,99,114,105,112,116,62,10,60,108,105,110,107,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,32,104,114,101,102,61,34,37,115,103,110,117,112,108,111,116,95,109,111,117,115,101,46,99,115,115,34,32,114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,62,10,60,47,104,101,97,100,62,10,60,98,111,100,121,32,111,110,108,111,97,100,61,34,103,110,117,112,108,111,116,95,99,97,110,118,97,115,40,41,59,32,103,110,117,112,108,111,116,46,105,110,105,116,40,41,59,34,32,111,110,99,111,110,116,101,120,116,109,101,110,117,61,34,114,101,116,117,114,110,32,102,97,108,115,101,59,34,62,10,10,60,100,105,118,32,99,108,97,115,115,61,34,103,110,117,112,108,111,116,34,62,10,0,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,116,105,109,101,97,120,105,115,95,120,32,61,32,34,34,59,10,0,0,34,59,10,0,0,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,116,105,109,101,97,120,105,115,95,120,32,61,32,34,37,115,34,59,10,0,0,0,0,0,0,0,0,121,50,122,101,114,111,97,36,120,105,115,0,0,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,97,120,105,115,95,120,109,97,120,32,61,32,37,46,51,102,59,10,0,9,115,117,98,115,101,113,117,101,110,116,32,115,99,97,110,115,32,119,105,116,104,32,100,105,102,102,101,114,101,110,116,32,110,98,32,111,102,32,112,116,115,32,97,114,101,32,0,99,121,99,36,108,101,115,0,101,114,114,111,114,98,97,114,115,32,103,97,112,32,37,100,32,108,119,32,37,103,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,97,120,105,115,95,120,109,105,110,32,61,32,37,46,51,102,59,10,0,77,79,85,83,69,95,89,50,0,0,0,0,0,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,97,120,105,115,95,104,101,105,103,104,116,32,61,32,103,110,117,112,108,111,116,46,112,108,111,116,95,97,120,105,115,95,121,109,97,120,32,45,32,103,110,117,112,108,111,116,46,112,108,111,116,95,97,120,105,115,95,121,109,105,110,59,10,0,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,97,120,105,115,95,119,105,100,116,104,32,61,32,103,110,117,112,108,111,116,46,112,108,111,116,95,97,120,105,115,95,120,109,97,120,32,45,32,103,110,117,112,108,111,116,46,112,108,111,116,95,97,120,105,115,95,120,109,105,110,59,10,0,0,0,0,0,77,111,114,101,32,112,97,114,97,109,101,116,101,114,115,32,115,112,101,99,105,102,105,101,100,32,116,104,97,110,32,100,97,116,97,32,114,101,99,111,114,100,115,32,115,112,101,99,105,102,105,101,100,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,108,111,103,97,120,105,115,95,114,32,61,32,37,100,59,10,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,108,111,103,97,120,105,115,95,121,32,61,32,37,100,59,10,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,108,111,103,97,120,105,115,95,120,32,61,32,37,100,59,10,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,97,120,105,115,95,121,50,109,105,110,32,61,32,34,110,111,110,101,34,10,0,0,0,0,0,0,0,57,48,32,109,117,108,32,115,105,110,0,0,0,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,97,120,105,115,95,121,50,109,97,120,0,37,48,50,120,37,48,50,120,37,48,50,120,0,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,97,120,105,115,95,121,50,109,105,110,0,121,122,101,114,111,97,36,120,105,115,0,0,0,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,97,120,105,115,95,120,50,109,105,110,32,61,32,34,110,111,110,101,34,10,0,0,0,0,0,0,0,9,116,97,107,105,110,103,32,115,99,97,110,115,32,100,105,114,101,99,116,105,111,110,32,97,117,116,111,109,97,116,105,99,97,108,108,121,10,0,0,99,108,117,115,116,101,114,101,100,32,103,97,112,32,37,100,32,0,0,0,0,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,97,120,105,115,95,120,50,109,97,120,0,101,120,112,97,110,100,105,110,103,32,99,117,114,118,101,32,118,97,114,105,97,98,108,101,32,99,111,108,111,114,115,0,77,79,85,83,69,95,88,50,0,0,0,0,0,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,97,120,105,115,95,120,50,109,105,110,0,103,110,117,112,108,111,116,46,112,108,111,116,95,97,120,105,115,95,114,109,105,110,32,61,32,37,103,59,10,0,0,0,67,97,110,110,111,116,32,102,108,105,112,32,97,32,110,111,110,45,101,120,105,115,116,101,110,116,32,100,105,109,101,110,115,105,111,110,0,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,97,120,105,115,95,121,109,97,120,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,97,120,105,115,95,121,109,105,110,0,0,103,110,117,112,108,111,116,32,37,115,32,112,97,116,99,104,108,101,118,101,108,32,37,115,10,0,0,0,0,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,97,120,105,115,95,120,109,97,120,0,0,37,115,32,61,32,37,103,59,10,0,0,0,0,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,97,120,105,115,95,120,109,105,110,0,0,37,37,10,0,0,0,0,0,37,115,32,61,32,37,100,59,10,0,0,0,0,0,0,0,120,50,122,101,114,111,97,36,120,105,115,0,0,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,104,101,105,103,104,116,32,61,32,37,46,49,102,59,10,0,0,0,0,66,65,67,75,87,65,82,68,0,0,0,0,0,0,0,0,99,111,108,111,114,32,102,111,114,109,117,108,97,32,111,117,116,32,111,102,32,114,97,110,103,101,32,40,117,115,101,32,96,115,104,111,119,32,112,97,108,101,116,116,101,32,114,103,98,102,111,114,109,117,108,97,101,39,32,116,111,32,100,105,115,112,108,97,121,32,116,104,101,32,114,97,110,103,101,41,0,0,0,0,0,0,0,0,115,101,116,32,115,116,121,108,101,32,104,105,115,116,111,103,114,97,109,32,0,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,119,105,100,116,104,32,61,32,37,46,49,102,59,10,0,0,0,0,0,77,79,85,83,69,95,89,0,103,110,117,112,108,111,116,46,112,108,111,116,95,121,116,111,112,32,61,32,37,46,49,102,59,10,0,0,0,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,121,98,111,116,32,61,32,37,46,49,102,59,10,0,0,0,0,0,0,70,111,114,109,97,116,32,115,112,101,99,105,102,105,101,114,32,109,117,115,116,32,98,101,103,105,110,32,119,105,116,104,32,39,37,39,0,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,120,109,97,120,32,61,32,37,46,49,102,59,10,0,0,0,0,0,0,67,97,110,39,116,32,114,101,45,110,97,109,101,32,39,121,39,32,105,110,32,97,32,111,110,101,45,118,97,114,105,97,98,108,101,32,102,105,116,0,117,110,100,101,102,105,110,101,100,32,118,97,108,117,101,0,103,110,117,112,108,111,116,46,112,108,111,116,95,120,109,105,110,32,61,32,37,46,49,102,59,10,0,0,0,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,116,101,114,109,95,121,109,97,120,32,61,32,37,100,59,10,0,0,0,103,110,117,112,108,111,116,46,112,108,111,116,95,116,101,114,109,95,120,109,97,120,32,61,32,37,100,59,10,0,0,0,10,47,47,32,112,108,111,116,32,98,111,117,110,100,97,114,105,101,115,32,97,110,100,32,97,120,105,115,32,115,99,97,108,105,110,103,32,105,110,102,111,114,109,97,116,105,111,110,32,102,111,114,32,109,111,117,115,105,110,103,32,10,0,0,105,109,103,32,58,61,32,34,37,37,10,0,0,0,0,0,67,97,110,118,97,115,84,101,120,116,70,117,110,99,116,105,111,110,115,46,101,110,97,98,108,101,40,99,116,120,41,59,10,99,116,120,46,115,116,114,111,107,101,83,116,121,108,101,32,61,32,34,114,103,98,40,50,49,53,44,50,49,53,44,50,49,53,41,34,59,10,99,116,120,46,108,105,110,101,87,105,100,116,104,32,61,32,37,46,49,103,59,10,10,0,0,120,122,101,114,111,97,36,120,105,115,0,0,0,0,0,0,99,116,120,46,102,105,108,108,83,116,121,108,101,32,61,32,34,37,115,34,59,10,99,116,120,46,102,105,108,108,82,101,99,116,40,48,44,48,44,37,100,44,37,100,41,59,10,0,70,79,82,87,65,82,68,0,99,111,110,102,108,105,99,116,105,110,103,32,111,112,116,105,111,110,115,0,0,0,0,0,99,116,120,46,108,105,110,101,67,97,112,32,61,32,34,37,115,34,59,32,99,116,120,46,108,105,110,101,74,111,105,110,32,61,32,34,37,115,34,59,10,0,0,0,0,0,0,0,77,79,85,83,69,95,88,0,103,110,117,112,108,111,116,46,100,97,115,104,108,101,110,103,116,104,32,61,32,37,100,59,10,0,0,0,0,0,0,0,47,47,32,115,104,111,114,116,32,102,111,114,109,115,32,111,102,32,99,111,109,109,97,110,100,115,32,112,114,111,118,105,100,101,100,32,98,121,32,103,110,117,112,108,111,116,95,99,111,109,109,111,110,46,106,115,10,102,117,110,99,116,105,111,110,32,68,84,32,32,40,100,116,41,32,32,123,103,110,117,112,108,111,116,46,100,97,115,104,116,121,112,101,40,100,116,41,59,125,59,10,102,117,110,99,116,105,111,110,32,68,83,32,32,40,120,44,121,41,32,123,103,110,117,112,108,111,116,46,100,97,115,104,115,116,97,114,116,40,120,44,121,41,59,125,59,10,102,117,110,99,116,105,111,110,32,68,76,32,32,40,120,44,121,41,32,123,103,110,117,112,108,111,116,46,100,97,115,104,115,116,101,112,40,120,44,121,41,59,125,59,10,102,117,110,99,116,105,111,110,32,77,32,32,32,40,120,44,121,41,32,123,105,102,32,40,103,110,117,112,108,111,116,46,112,97,116,116,101,114,110,46,108,101,110,103,116,104,32,62,32,48,41,32,68,83,40,120,44,121,41,59,32,101,108,115,101,32,103,110,117,112,108,111,116,46,77,40,120,44,121,41,59,125,59,10,102,117,110,99,116,105,111,110,32,76,32,32,32,40,120,44,121,41,32,123,105,102,32,40,103,110,117,112,108,111,116,46,112,97,116,116,101,114,110,46,108,101,110,103,116,104,32,62,32,48,41,32,68,76,40,120,44,121,41,59,32,101,108,115,101,32,103,110,117,112,108,111,116,46,76,40,120,44,121,41,59,125,59,10,102,117,110,99,116,105,111,110,32,68,111,116,32,40,120,44,121,41,32,123,103,110,117,112,108,111,116,46,68,111,116,40,120,47,49,48,46,44,121,47,49,48,46,41,59,125,59,10,102,117,110,99,116,105,111,110,32,80,116,32,32,40,78,44,120,44,121,44,119,41,32,123,103,110,117,112,108,111,116,46,80,116,40,78,44,120,47,49,48,46,44,121,47,49,48,46,44,119,47,49,48,46,41,59,125,59,10,102,117,110,99,116,105,111,110,32,82,32,32,32,40,120,44,121,44,119,44,104,41,32,123,103,110,117,112,108,111,116,46,82,40,120,44,121,44,119,44,104,41,59,125,59,10,102,117,110,99,116,105,111,110,32,84,32,32,32,40,120,44,121,44,102,111,110,116,115,105,122,101,44,106,117,115,116,105,102,121,44,115,116,114,105,110,103,41,32,123,103,110,117,112,108,111,116,46,84,40,120,44,121,44,102,111,110,116,115,105,122,101,44,106,117,115,116,105,102,121,44,115,116,114,105,110,103,41,59,125,59,10,102,117,110,99,116,105,111,110,32,84,82,32,32,40,120,44,121,44,97,110,103,108,101,44,102,111,110,116,115,105,122,101,44,106,117,115,116,105,102,121,44,115,116,114,105,110,103,41,32,123,103,110,117,112,108,111,116,46,84,82,40,120,44,121,44,97,110,103,108,101,44,102,111,110,116,115,105,122,101,44,106,117,115,116,105,102,121,44,115,116,114,105,110,103,41,59,125,59,10,102,117,110,99,116,105,111,110,32,98,112,32,32,40,120,44,121,41,32,123,103,110,117,112,108,111,116,46,98,112,40,120,44,121,41,59,125,59,10,102,117,110,99,116,105,111,110,32,99,102,112,32,40,41,32,123,103,110,117,112,108,111,116,46,99,102,112,40,41,59,125,59,10,102,117,110,99,116,105,111,110,32,99,102,115,112,40,41,32,123,103,110,117,112,108,111,116,46,99,102,115,112,40,41,59,125,59,10,10,0,85,110,114,101,99,111,103,110,105,122,101,100,32,98,105,110,97,114,121,32,102,111,114,109,97,116,32,115,112,101,99,105,102,105,99,97,116,105,111,110,0,0,0,0,0,0,0,0,47,47,32,71,110,117,112,108,111,116,32,118,101,114,115,105,111,110,32,37,115,46,37,115,10,0,0,0,0,0,0,0,47,47,32,82,101,105,110,105,116,105,97,108,105,122,101,32,109,111,117,115,101,32,116,114,97,99,107,105,110,103,32,97,110,100,32,122,111,111,109,32,102,111,114,32,116,104,105,115,32,112,97,114,116,105,99,117,108,97,114,32,112,108,111,116,10,105,102,32,40,40,116,121,112,101,111,102,40,103,110,117,112,108,111,116,46,97,99,116,105,118,101,95,112,108,111,116,41,32,61,61,32,34,117,110,100,101,102,105,110,101,100,34,32,124,124,32,103,110,117,112,108,111,116,46,97,99,116,105,118,101,95,112,108,111,116,32,33,61,32,37,115,41,32,32,38,38,32,32,116,121,112,101,111,102,40,103,110,117,112,108,111,116,46,109,111,117,115,101,95,117,112,100,97,116,101,41,32,33,61,32,34,117,110,100,101,102,105,110,101,100,34,41,32,123,10,32,32,103,110,117,112,108,111,116,46,97,99,116,105,118,101,95,112,108,111,116,95,110,97,109,101,32,61,32,34,37,115,34,59,10,32,32,103,110,117,112,108,111,116,46,97,99,116,105,118,101,95,112,108,111,116,32,61,32,37,115,59,10,32,32,99,97,110,118,97,115,46,111,110,109,111,117,115,101,109,111,118,101,32,61,32,103,110,117,112,108,111,116,46,109,111,117,115,101,95,117,112,100,97,116,101,59,10,32,32,99,97,110,118,97,115,46,111,110,109,111,117,115,101,117,112,32,61,32,103,110,117,112,108,111,116,46,122,111,111,109,95,105,110,59,10,32,32,99,97,110,118,97,115,46,111,110,109,111,117,115,101,100,111,119,110,32,61,32,103,110,117,112,108,111,116,46,115,97,118,101,99,108,105,99,107,59,10,32,32,99,97,110,118,97,115,46,111,110,107,101,121,112,114,101,115,115,32,61,32,103,110,117,112,108,111,116,46,100,111,95,104,111,116,107,101,121,59,10,32,32,105,102,32,40,99,97,110,118,97,115,46,97,116,116,97,99,104,69,118,101,110,116,41,32,123,99,97,110,118,97,115,46,97,116,116,97,99,104,69,118,101,110,116,40,39,109,111,117,115,101,111,118,101,114,39,44,32,37,115,41,59,125,10,32,32,101,108,115,101,32,105,102,32,40,99,97,110,118,97,115,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,41,32,123,99,97,110,118,97,115,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,40,39,109,111,117,115,101,111,118,101,114,39,44,32,37,115,44,32,102,97,108,115,101,41,59,125,32,10,32,32,103,110,117,112,108,111,116,46,122,111,111,109,101,100,32,61,32,102,97,108,115,101,59,10,32,32,103,110,117,112,108,111,116,46,122,111,111,109,95,97,120,105,115,95,119,105,100,116,104,32,61,32,48,59,10,32,32,103,110,117,112,108,111,116,46,122,111,111,109,95,105,110,95,112,114,111,103,114,101,115,115,32,61,32,102,97,108,115,101,59,10,32,32,103,110,117,112,108,111,116,46,112,111,108,97,114,95,109,111,100,101,32,61,32,37,115,59,10,32,32,99,116,120,46,99,108,101,97,114,82,101,99,116,40,48,44,48,44,37,100,44,37,100,41,59,10,125,10,0,37,65,0,0,0,0,0,0,102,117,110,99,116,105,111,110,32,37,115,40,41,32,123,10,99,97,110,118,97,115,32,61,32,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,34,37,115,34,41,59,10,99,116,120,32,61,32,99,97,110,118,97,115,46,103,101,116,67,111,110,116,101,120,116,40,34,50,100,34,41,59,10,0,102,111,114,109,97,116,32,116,111,111,32,108,111,110,103,32,100,117,101,32,116,111,32,108,111,110,103,32,100,101,99,105,109,97,108,115,105,103,110,32,115,116,114,105,110,103,0,0,101,120,116,114,97,110,101,111,117,115,32,97,114,103,117,109,101,110,116,115,32,116,111,32,117,110,115,101,116,32,108,97,98,101,108,0,0,0,0,0,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,34,62,10,118,97,114,32,99,97,110,118,97,115,44,32,99,116,120,59,10,103,110,117,112,108,111,116,46,103,114,105,100,95,108,105,110,101,115,32,61,32,116,114,117,101,59,10,103,110,117,112,108,111,116,46,122,111,111,109,101,100,32,61,32,102,97,108,115,101,59,10,103,110,117,112,108,111,116,46,97,99,116,105,118,101,95,112,108,111,116,95,110,97,109,101,32,61,32,34,103,110,117,112,108,111,116,95,99,97,110,118,97,115,34,59,10,10,102,117,110,99,116,105,111,110,32,103,110,117,112,108,111,116,95,99,97,110,118,97,115,40,41,32,123,10,99,97,110,118,97,115,32,61,32,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,34,103,110,117,112,108,111,116,95,99,97,110,118,97,115,34,41,59,10,99,116,120,32,61,32,99,97,110,118,97,115,46,103,101,116,67,111,110,116,101,120,116,40,34,50,100,34,41,59,10,0,0,0,0,0,0,0,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,34,62,103,110,117,112,108,111,116,46,105,110,105,116,32,61,32,102,117,110,99,116,105,111,110,40,41,32,123,125,59,60,47,115,99,114,105,112,116,62,10,0,0,67,111,110,84,101,88,116,32,119,105,116,104,32,77,101,116,97,70,117,110,32,40,102,111,114,32,80,68,70,32,100,111,99,117,109,101,110,116,115,41,0,0,0,0,0,0,0,0,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,34,62,32,103,110,117,112,108,111,116,46,104,101,108,112,95,85,82,76,32,61,32,34,37,115,47,99,97,110,118,97,115,95,104,101,108,112,46,104,116,109,108,34,59,32,60,47,115,99,114,105,112,116,62,10,0,0,0,0,118,114,36,97,110,103,101,0,60,115,99,114,105,112,116,32,115,114,99,61,34,37,115,103,110,117,112,108,111,116,95,109,111,117,115,101,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,0,0,0,0,0,9,116,97,107,105,110,103,32,115,99,97,110,115,32,105,110,32,37,115,32,100,105,114,101,99,116,105,111,110,10,0,0,105,110,118,97,108,105,100,32,99,111,108,111,114,98,111,120,32,111,112,116,105,111,110,0,115,101,116,32,115,116,121,108,101,32,97,114,114,111,119,32,37,100,0,0,0,0,0,0,60,115,99,114,105,112,116,32,115,114,99,61,34,37,115,103,110,117,112,108,111,116,95,100,97,115,104,101,100,108,105,110,101,115,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,0,0,0,0,0,0,0,107,101,121,95,99,104,97,114,0,0,0,0,0,0,0,0,99,97,110,118,97,115,116,101,120,116,0,0,0,0,0,0,99,97,110,118,97,115,109,97,116,104,0,0,0,0,0,0,70,97,105,108,117,114,101,32,105,110,32,98,105,110,97,114,121,32,116,97,98,108,101,32,105,110,105,116,105,97,108,105,122,97,116,105,111,110,0,0,107,111,105,56,36,117,0,0,60,33,45,45,91,105,102,32,73,69,93,62,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,34,32,115,114,99,61,34,101,120,99,97,110,118,97,115,46,106,115,34,62,60,47,115,99,114,105,112,116,62,60,33,91,101,110,100,105,102,93,45,45,62,10,60,115,99,114,105,112,116,32,115,114,99,61,34,37,115,37,115,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,60,115,99,114,105,112,116,32,115,114,99,61,34,37,115,103,110,117,112,108,111,116,95,99,111,109,109,111,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,0,60,109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,99,111,110,116,101,110,116,45,116,121,112,101,34,32,99,111,110,116,101,110,116,61,34,116,101,120,116,47,104,116,109,108,59,32,99,104,97,114,115,101,116,61,85,84,70,45,56,34,62,10,0,0,0,0,71,110,117,112,108,111,116,32,67,97,110,118,97,115,32,71,114,97,112,104,0,0,0,0,60,33,68,79,67,84,89,80,69,32,72,84,77,76,62,10,60,104,116,109,108,62,10,60,104,101,97,100,62,10,60,116,105,116,108,101,62,37,115,60,47,116,105,116,108,101,62,10,0,0,0,0,0,0,0,0,99,116,120,46,98,101,103,105,110,80,97,116,104,40,41,59,10,0,0,0,0,0,0,0,99,111,110,116,101,120,116,0,77,40,37,117,44,37,117,41,59,10,0,0,0,0,0,0,117,114,36,97,110,103,101,0,114,101,102,36,114,101,115,104,0,0,0,0,0,0,0,0,76,40,37,117,44,37,117,41,59,10,0,0,0,0,0,0,9,116,114,117,101,32,100,101,112,116,104,32,111,114,100,101,114,105,110,103,10,0,0,0,101,120,112,101,99,116,105,110,103,32,115,99,114,101,101,110,32,118,97,108,117,101,32,91,48,32,45,32,49,93,0,0,105,108,108,101,103,97,108,32,112,114,101,102,105,120,0,0,117,110,115,101,116,32,115,116,121,108,101,32,97,114,114,111,119,10,0,0,0,0,0,0,68,84,40,103,110,117,112,108,111,116,46,100,97,115,104,112,97,116,116,101,114,110,51,41,59,10,0,0,0,0,0,0,77,79,85,83,69,95,67,72,65,82,0,0,0,0,0,0,68,84,40,103,110,117,112,108,111,116,46,100,97,115,104,112,97,116,116,101,114,110,37,49,100,41,59,10,0,0,0,0,119,120,116,0,0,0,0,0,114,103,98,40,49,55,49,44,50,49,52,44,48,48,48,41,0,0,0,0,0,0,0,0,37,39,34,32,0,0,0,0,114,103,98,40,50,49,52,44,48,48,48,44,49,50,48,41,0,0,0,0,0,0,0,0,114,103,98,40,50,53,53,44,50,48,52,44,48,48,48,41,0,0,0,0,0,0,0,0,114,103,98,40,49,54,51,44,49,52,53,44,50,53,53,41,0,0,0,0,0,0,0,0,116,111,107,101,110,32,116,97,98,108,101,0,0,0,0,0,37,115,37,115,10,37,115,37,115,10,37,115,37,115,10,37,115,37,115,37,115,37,115,10,37,115,10,0,0,0,0,0,114,103,98,40,50,49,52,44,50,49,52,44,48,54,57,41,0,0,0,0,0,0,0,0,114,103,98,40,48,48,48,44,49,53,51,44,49,54,49,41,0,0,0,0,0,0,0,0,77,101,116,97,80,111,115,116,32,112,108,111,116,116,105,110,103,32,115,116,97,110,100,97,114,100,0,0,0,0,0,0,114,103,98,40,50,53,53,44,49,53,51,44,48,48,48,41,0,0,0,0,0,0,0,0,116,114,36,97,110,103,101,0,122,120,121,0,0,0,0,0,114,103,98,40,48,48,48,44,48,48,48,44,49,52,56,41,0,0,0,0,0,0,0,0,84,79,80,0,0,0,0,0,98,121,0,0,0,0,0,0,116,97,103,32,109,117,115,116,32,98,101,32,115,116,114,105,99,116,108,121,32,112,111,115,105,116,105,118,101,32,40,115,101,101,32,96,104,101,108,112,32,115,101,116,32,115,116,121,108,101,32,108,105,110,101,39,41,0,0,0,0,0,0,0,115,101,116,32,115,116,121,108,101,32,108,105,110,101,32,37,100,32,0,0,0,0,0,0,114,103,98,40,48,50,49,44,49,49,55,44,48,54,57,41,0,0,0,0,0,0,0,0,77,79,85,83,69,95,75,69,89,0,0,0,0,0,0,0,114,103,98,40,48,48,48,44,50,53,53,44,50,53,53,41,0,0,0,0,0,0,0,0,114,103,98,40,49,57,48,44,48,48,48,44,49,57,48,41,0,0,0,0,0,0,0,0,117,115,105,110,103,32,100,101,102,97,117,108,116,32,98,105,110,97,114,121,32,102,111,114,109,97,116,0,0,0,0,0,32,100,101,102,97,117,108,116,10,0,0,0,0,0,0,0,114,103,98,40,48,48,48,44,48,48,48,44,50,50,53,41,0,0,0,0,0,0,0,0,100,117,112,108,105,99,97,116,101,100,32,111,114,32,99,111,110,116,114,97,100,105,99,116,105,110,103,32,97,114,103,117,109,101,110,116,115,32,105,110,32,112,108,111,116,32,111,112,116,105,111,110,115,0,0,0,114,103,98,40,48,48,48,44,49,55,49,44,48,48,48,41,0,0,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,39,117,110,105,113,117,101,39,44,32,39,102,114,101,113,117,101,110,99,121,39,44,32,39,99,117,109,117,108,97,116,105,118,101,39,44,32,39,99,110,111,114,109,97,108,39,44,32,39,107,100,101,110,115,105,116,121,39,44,32,39,97,99,115,112,108,105,110,101,115,39,44,32,39,99,115,112,108,105,110,101,115,39,44,32,39,98,101,122,105,101,114,39,32,111,114,32,39,115,98,101,122,105,101,114,39,0,0,0,0,114,103,98,40,50,53,53,44,48,48,48,44,48,48,48,41,0,0,0,0,0,0,0,0,83,72,69,76,76,0,0,0,124,124,0,0,0,0,0,0,114,103,98,40,49,54,48,44,49,54,48,44,49,54,48,41,0,0,0,0,0,0,0,0,109,97,116,114,105,120,32,101,108,101,109,101,110,116,115,0])
+.concat([114,103,98,40,48,48,48,44,48,48,48,44,48,48,48,41,0,0,0,0,0,0,0,0,115,112,108,105,110,101,32,109,97,116,114,105,120,0,0,0,109,112,0,0,0,0,0,0,114,103,98,40,50,53,53,44,50,53,53,44,50,53,53,41,0,0,0,0,0,0,0,0,114,114,36,97,110,103,101,0,117,115,105,110,103,32,100,101,102,97,117,108,116,32,98,105,110,97,114,121,32,114,101,99,111,114,100,47,97,114,114,97,121,32,115,116,114,117,99,116,117,114,101,0,0,0,0,0,72,111,109,101,0,0,0,0,34,41,59,10,0,0,0,0,83,85,82,70,65,67,69,0,105,110,118,97,108,105,100,32,112,109,51,100,32,111,112,116,105,111,110,0,0,0,0,0,84,40,37,100,44,37,100,44,37,46,49,102,44,34,37,115,34,44,34,0,0,0,0,0,117,110,115,101,116,32,115,116,121,108,101,32,108,105,110,101,10,0,0,0,0,0,0,0,102,105,108,108,101,100,95,112,111,108,121,103,111,110,51,100,32,99,111,114,110,101,114,115,0,0,0,0,0,0,0,0,32,32,32,112,117,115,104,101,100,32,116,101,114,109,105,110,97,108,32,37,115,32,37,115,10,0,0,0,0,0,0,0,77,79,85,83,69,95,66,85,84,84,79,78,0,0,0,0,84,82,40,37,100,44,37,100,44,37,100,44,37,46,49,102,44,34,37,115,34,44,34,0,105,110,116,101,114,110,97,108,32,101,114,114,111,114,32,58,32,110,111,110,45,83,84,82,73,78,71,32,97,114,103,117,109,101,110,116,0,0,0,0,82,105,103,104,116,0,0,0,108,105,116,116,108,101,0,0,80,116,40,37,100,44,37,100,44,37,100,44,37,46,49,102,41,59,10,0,0,0,0,0,68,111,116,40,37,100,44,37,100,41,59,10,0,0,0,0,82,40,37,100,44,37,100,44,37,100,44,37,100,41,59,10,0,0,0,0,0,0,0,0,99,116,120,46,108,105,110,101,87,105,100,116,104,32,61,32,37,103,59,10,0,0,0,0,99,116,120,46,115,116,114,111,107,101,83,116,121,108,101,32,61,32,34,37,115,34,59,10,0,0,0,0,0,0,0,0,77,101,116,97,102,111,110,116,32,112,108,111,116,116,105,110,103,32,115,116,97,110,100,97,114,100,0,0,0,0,0,0,114,103,98,40,37,48,51,100,44,37,48,51,100,44,37,48,51,100,41,0,0,0,0,0,99,98,114,36,97,110,103,101,0,0,0,0,0,0,0,0,37,115,37,99,0,0,0,0,66,79,84,84,79,77,0,0,101,120,112,101,99,116,105,110,103,32,39,109,101,97,110,39,44,32,39,103,101,111,109,101,97,110,39,44,32,39,109,101,100,105,97,110,39,44,32,39,109,105,110,39,44,32,39,109,97,120,39,44,32,39,99,49,39,44,32,39,99,50,39,44,32,39,99,51,39,32,111,114,32,39,99,52,39,0,0,0,117,115,101,114,115,116,121,108,101,115,0,0,0,0,0,0,114,103,98,40,37,51,100,44,37,51,100,44,37,51,100,41,37,99,0,0,0,0,0,0,114,103,98,97,40,50,53,53,44,50,53,53,44,50,53,53,44,48,46,48,48,41,0,0,114,103,98,97,40,37,49,49,46,49,49,115,44,37,52,46,50,102,41,37,99,0,0,0,68,117,112,108,105,99,97,116,101,100,32,111,114,32,99,111,110,116,114,97,100,105,99,116,105,110,103,32,97,114,103,117,109,101,110,116,115,32,105,110,32,100,97,116,97,102,105,108,101,32,111,112,116,105,111,110,115,0,0,0,0,0,0,0,37,77,0,0,0,0,0,0,99,102,115,112,40,41,59,10,0,0,0,0,0,0,0,0,80,108,111,116,32,116,121,112,101,32,105,115,32,110,101,105,116,104,101,114,32,102,117,110,99,116,105,111,110,32,110,111,114,32,100,97,116,97,0,0,99,102,112,40,41,59,10,0,76,40,37,100,44,32,37,100,41,59,10,0,0,0,0,0,98,112,40,37,100,44,32,37,100,41,59,10,0,0,0,0,99,116,120,46,102,105,108,108,83,116,121,108,101,32,61,32,34,37,115,34,59,10,0,0,109,102,0,0,0,0,0,0,68,84,40,103,110,117,112,108,111,116,46,115,111,108,105,100,41,59,10,0,0,0,0,0,122,114,36,97,110,103,101,0,109,0,0,0,0,0,0,0,84,104,105,115,32,99,111,112,121,32,111,102,32,103,110,117,112,108,111,116,32,99,97,110,110,111,116,32,114,101,97,100,32,112,110,103,47,103,105,102,47,106,112,101,103,32,105,109,97,103,101,115,0,0,0,0,44,32,116,104,101,110,32,0,99,52,0,0,0,0,0,0,115,101,116,32,115,116,121,108,101,32,105,110,99,114,101,109,101,110,116,32,37,115,10,0,77,126,60,62,37,87,61,38,64,0,0,0,0,0,0,0,97,120,105,115,32,114,97,110,103,101,115,32,109,117,115,116,32,98,101,32,97,98,111,118,101,32,48,32,102,111,114,32,108,111,103,32,115,99,97,108,101,33,0,0,0,0,0,0,65,99,101,70,86,63,97,98,100,69,103,104,110,111,112,113,117,0,0,0,0,0,0,0,32,74,84,118,94,95,34,42,121,107,76,115,120,122,0,0,109,105,115,115,105,110,103,32,102,111,114,109,97,116,32,115,116,114,105,110,103,0,0,0,40,41,91,93,123,125,92,0,102,116,114,0,0,0,0,0,106,96,39,44,59,58,33,46,0,0,0,0,0,0,0,0,105,73,108,124,0,0,0,0,99,116,120,46,115,116,114,111,107,101,40,41,59,10,0,0,76,97,84,101,88,32,116,101,120,100,114,97,119,32,101,110,118,105,114,111,110,109,101,110,116,0,0,0,0,0,0,0,99,116,120,46,108,105,110,101,87,105,100,116,104,32,61,32,115,97,118,101,87,105,100,116,104,59,10,125,32,47,47,32,103,114,105,100,95,108,105,110,101,115,10,0,0,0,0,0,121,50,114,36,97,110,103,101,0,0,0,0,0,0,0,0,105,102,32,40,103,110,117,112,108,111,116,46,103,114,105,100,95,108,105,110,101,115,41,32,123,10,118,97,114,32,115,97,118,101,87,105,100,116,104,32,61,32,99,116,120,46,108,105,110,101,87,105,100,116,104,59,10,99,116,120,46,108,105,110,101,87,105,100,116,104,32,61,32,99,116,120,46,108,105,110,101,87,105,100,116,104,32,42,32,48,46,53,59,10,0,0,9,112,109,51,100,32,112,108,111,116,116,101,100,32,97,116,32,0,0,0,0,0,0,0,99,51,0,0,0,0,0,0,32,115,105,122,101,32,37,115,32,37,46,51,102,44,37,46,51,102,44,37,46,51,102,0,125,32,47,47,32,69,110,100,32,37,115,95,112,108,111,116,95,37,100,32,10,0,0,0,115,101,116,32,97,117,116,111,115,99,97,108,101,32,107,101,101,112,102,105,120,0,0,0,105,102,32,40,116,121,112,101,111,102,40,103,110,117,112,108,111,116,46,104,105,100,101,95,37,115,95,112,108,111,116,95,37,100,41,32,61,61,32,34,117,110,100,101,102,105,110,101,100,34,124,124,32,33,103,110,117,112,108,111,116,46,104,105,100,101,95,37,115,95,112,108,111,116,95,37,100,41,32,123,10,0,0,0,0,0,0,0,103,112,0,0,0,0,0,0,102,111,114,109,36,97,116,0,99,116,120,46,99,108,111,115,101,80,97,116,104,40,41,59,10,0,0,0,0,0,0,0,119,105,100,36,116,104,0,0,108,105,36,110,101,119,105,100,116,104,0,0,0,0,0,0,110,111,114,36,111,116,97,116,101,0,0,0,0,0,0,0,115,113,114,116,40,115,113,114,116,40,120,41,41,0,0,0,119,105,110,36,119,111,114,100,54,0,0,0,0,0,0,0,116,101,120,100,114,97,119,0,110,111,102,36,111,110,116,108,105,115,116,0,0,0,0,0,121,114,36,97,110,103,101,0,108,97,36,110,100,115,99,97,112,101,0,0,0,0,0,0,101,120,112,108,105,99,105,116,32,40,100,114,97,119,32,112,109,51,100,32,115,117,114,102,97,99,101,32,97,99,99,111,114,100,105,110,103,32,116,111,32,115,116,121,108,101,41,0,99,50,0,0,0,0,0,0,99,104,97,114,97,99,116,101,114,0,0,0,0,0,0,0,32,120,37,48,50,120,37,48,50,120,37,48,50,120,0,0,96,98,117,105,108,116,105,110,45,97,117,116,111,115,99,97,108,101,96,32,40,115,101,116,32,97,117,116,111,115,99,97,108,101,32,107,101,101,112,102,105,120,59,32,114,101,112,108,111,116,41,0,0,0,0,0,110,111,102,111,110,116,108,105,115,116,0,0,0,0,0,0,37,115,32,37,115,32,37,115,32,37,115,32,37,115,32,119,105,100,116,104,32,37,100,32,108,105,110,101,119,105,100,116,104,32,37,100,32,34,37,115,34,32,37,100,0,0,0,0,79,112,116,105,111,110,115,32,97,114,101,32,100,101,102,97,117,108,116,44,32,115,119,97,112,32,40,115,119,97,98,41,44,32,108,105,116,116,108,101,44,32,98,105,103,44,32,109,105,100,100,108,101,32,40,112,100,112,41,0,0,0,0,0,37,115,44,37,100,0,0,0,105,110,118,97,108,105,100,32,99,111,108,111,114,32,115,112,101,99,44,32,109,117,115,116,32,98,101,32,120,82,82,71,71,66,66,0,0,0,0,0,120,37,50,104,120,37,50,104,120,37,50,104,120,0,0,0,119,105,100,116,104,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,0,0,0,0,108,105,110,101,119,105,100,116,104,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,76,97,84,101,88,32,112,105,99,116,117,114,101,32,101,110,118,105,114,111,110,109,101,110,116,32,119,105,116,104,32,80,83,84,114,105,99,107,115,32,109,97,99,114,111,115,0,0,99,103,109,32,112,111,108,121,108,105,110,101,115,0,0,0,120,50,114,36,97,110,103,101,0,0,0,0,0,0,0,0,37,46,51,49,115,44,37,100,0,0,0,0,0,0,0,0,105,109,112,108,105,99,105,116,32,40,112,109,51,100,32,100,114,97,119,32,102,111,114,32,97,108,108,32,115,117,114,102,97,99,101,115,41,0,0,0,99,49,0,0,0,0,0,0,115,99,114,101,101,110,0,0,80,73,67,84,85,82,69,49,0,0,0,0,0,0,0,0,96,98,117,105,108,116,105,110,45,116,111,103,103,108,101,45,98,111,114,100,101,114,96,0,67,71,77,32,102,111,110,116,32,108,105,115,116,0,0,0,71,110,117,112,108,111,116,32,118,101,114,115,105,111,110,32,37,115,32,112,97,116,99,104,108,101,118,101,108,32,37,115,44,32,67,111,109,112,117,116,101,114,32,71,114,97,112,104,105,99,115,32,77,101,116,97,102,105,108,101,32,118,101,114,115,105,111,110,32,49,32,112,101,114,32,77,73,76,45,68,45,50,56,48,48,51,65,47,66,65,83,73,67,45,49,46,37,100,0,0,0,0,0,0,112,100,112,0,0,0,0,0,84,105,109,101,115,32,66,111,108,100,32,79,98,108,105,113,117,101,0,0,0,0,0,0,84,105,109,101,115,32,79,98,108,105,113,117,101,0,0,0,67,111,117,114,105,101,114,32,66,111,108,100,32,73,116,97,108,105,99,0,0,0,0,0,67,111,117,114,105,101,114,32,73,116,97,108,105,99,0,0,72,101,108,118,101,116,105,99,97,32,66,111,108,100,32,73,116,97,108,105,99,0,0,0,112,115,116,114,105,99,107,115,0,0,0,0,0,0,0,0,72,101,108,118,101,116,105,99,97,32,73,116,97,108,105,99,0,0,0,0,0,0,0,0,120,114,36,97,110,103,101,0,49,53,0,0,0,0,0,0,9,112,109,51,100,32,115,116,121,108,101,32,105,115,32,37,115,10,0,0,0,0,0,0,103,114,97,112,104,0,0,0,83,99,114,105,112,116,0,0,96,98,117,105,108,116,105,110,45,114,101,112,108,111,116,96,0,0,0,0,0,0,0,0,90,97,112,102,68,105,110,103,98,97,116,115,0,0,0,0,72,101,114,115,104,101,121,47,83,121,109,98,111,108,95,77,97,116,104,0,0,0,0,0,109,105,100,36,100,108,101,0,72,101,114,115,104,101,121,47,83,121,109,98,111,108,95,83,101,116,95,50,0,0,0,0,72,101,114,115,104,101,121,47,83,121,109,98,111,108,95,83,101,116,95,49,0,0,0,0,76,111,99,97,108,101,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,0,0,0,72,101,114,115,104,101,121,47,71,111,116,104,105,99,95,73,116,97,108,105,97,110,0,0,111,101,69,102,70,103,71,0,99,121,99,108,101,0,0,0,72,101,114,115,104,101,121,47,71,111,116,104,105,99,95,69,110,103,108,105,115,104,0,0,72,101,114,115,104,101,121,47,71,111,116,104,105,99,95,71,101,114,109,97,110,0,0,0,84,80,73,67,32,45,45,32,76,97,84,101,88,32,112,105,99,116,117,114,101,32,101,110,118,105,114,111,110,109,101,110,116,32,119,105,116,104,32,116,112,105,99,32,92,115,112,101,99,105,97,108,115,0,0,0,72,101,114,115,104,101,121,47,84,114,105,112,108,101,120,95,73,116,97,108,105,99,0,0,110,111,99,98,109,116,105,36,99,115,0,0,0,0,0,0,72,101,114,115,104,101,121,47,84,114,105,112,108,101,120,95,82,111,109,97,110,0,0,0,9,112,111,105,110,116,115,105,122,101,32,105,115,32,37,103,10,0,0,0,0,0,0,0,115,101,99,111,110,100,0,0,72,101,114,115,104,101,121,47,68,117,112,108,101,120,95,82,111,109,97,110,0,0,0,0,117,110,115,101,116,32,103,114,105,100,0,0,0,0,0,0,72,101,114,115,104,101,121,47,67,111,109,112,108,101,120,95,67,121,114,105,108,108,105,99,0,0,0,0,0,0,0,0,72,101,114,115,104,101,121,47,67,111,109,112,108,101,120,95,73,116,97,108,105,99,0,0,108,105,116,36,116,108,101,0,107,111,105,56,36,114,0,0,72,101,114,115,104,101,121,47,67,111,109,112,108,101,120,95,83,99,114,105,112,116,0,0,103,116,0,0,0,0,0,0,72,101,114,115,104,101,121,47,67,111,109,112,108,101,120,95,71,114,101,101,107,0,0,0,72,101,114,115,104,101,121,47,67,111,109,112,108,101,120,95,82,111,109,97,110,0,0,0,72,101,114,115,104,101,121,47,83,105,109,112,108,101,120,95,83,99,114,105,112,116,0,0,72,101,114,115,104,101,121,47,83,105,109,112,108,101,120,95,71,114,101,101,107,0,0,0,116,112,105,99,0,0,0,0,72,101,114,115,104,101,121,47,83,105,109,112,108,101,120,95,82,111,109,97,110,0,0,0,99,98,109,116,105,36,99,115,0,0,0,0,0,0,0,0,113,36,117,105,116,0,0,0,72,101,114,115,104,101,121,47,67,97,114,116,111,103,114,97,112,104,105,99,95,71,114,101,101,107,0,0,0,0,0,0,9,112,111,105,110,116,105,110,116,101,114,118,97,108,98,111,120,32,105,115,32,37,103,10,0,0,0,0,0,0,0,0,71,80,86,65,76,95,0,0,102,105,114,115,116,0,0,0,72,101,114,115,104,101,121,47,67,97,114,116,111,103,114,97,112,104,105,99,95,82,111,109,97,110,0,0,0,0,0,0,67,71,77,32,99,111,108,111,114,32,116,97,98,108,101,0,48,32,60,61,32,108,101,110,103,116,104,0,0,0,0,0,115,119,97,98,0,0,0,0,40,48,32,60,61,32,99,103,109,95,105,100,41,32,38,38,32,40,99,103,109,95,105,100,32,60,32,49,50,56,41,0,40,48,32,60,61,32,99,108,97,115,115,41,32,38,38,40,99,108,97,115,115,32,60,49,54,41,0,0,0,0,0,0,118,97,108,117,101,32,60,61,32,51,50,55,54,55,0,0,43,68,65,84,65,83,84,82,73,78,71,83,32,32,43,72,73,83,84,79,71,82,65,77,83,32,32,43,79,66,74,69,67,84,83,32,32,43,83,84,82,73,78,71,86,65,82,83,32,32,43,77,65,67,82,79,83,32,32,43,73,77,65,71,69,32,32,43,85,83,69,82,95,76,73,78,69,84,89,80,69,83,32,43,83,84,65,84,83,32,0,0,0,0,0,0,45,51,50,55,54,56,32,60,61,32,118,97,108,117,101,0,69,69,80,73,67,32,45,45,32,101,120,116,101,110,100,101,100,32,76,97,84,101,88,32,112,105,99,116,117,114,101,32,101,110,118,105,114,111,110,109,101,110,116,0,0,0,0,0,99,111,108,111,117,114,36,0,110,111,122,109,116,105,36,99,115,0,0,0,0,0,0,0,99,111,108,111,114,36,0,0,9,104,111,119,101,118,101,114,32,76,67,95,67,84,89,80,69,32,105,110,32,99,117,114,114,101,110,116,32,108,111,99,97,108,101,32,105,115,32,37,115,10,0,0,0,0,0,0,103,101,111,109,101,97,110,0,37,115,32,34,37,115,34,32,37,100,44,37,48,46,49,102,44,37,48,46,49,102,44,37,48,46,49,102,0,0,0,0,96,98,117,105,108,116,105,110,45,116,111,103,103,108,101,45,103,114,105,100,96,0,0,0,83,119,105,116,122,101,114,108,97,110,100,76,105,103,104,116,0,0,0,0,0,0,0,0,37,37,33,80,83,45,65,100,111,98,101,45,50,46,48,32,69,80,83,70,45,49,46,50,10,37,37,37,37,66,111,117,110,100,105,110,103,66,111,120,58,32,37,100,32,37,100,32,37,100,32,37,100,10,37,37,37,37,84,101,109,112,108,97,116,101,66,111,120,58,32,37,100,32,37,100,32,37,100,32,37,100,10,37,37,37,37,69,110,100,67,111,109,109,101,110,116,115,10,37,37,37,37,69,110,100,80,114,111,108,111,103,10,37,37,37,37,66,101,103,105,110,83,101,116,117,112,10,37,37,37,37,69,110,100,83,101,116,117,112,10,0,0,0,115,119,97,112,0,0,0,0,32,37,115,32,112,97,116,116,101,114,110,32,37,100,32,0,37,48,46,50,102,32,37,48,46,50,102,32,109,10,0,0,110,111,115,117,114,36,102,97,99,101,0,0,0,0,0,0,83,10,37,46,50,102,32,37,46,50,102,32,109,10,0,0,115,36,109,111,111,116,104,0,37,46,50,102,32,37,46,50,102,32,108,10,0,0,0,0,110,111,32,72,79,77,69,32,102,111,117,110,100,0,0,0,101,120,116,101,110,100,95,97,116,0,0,0,0,0,0,0,91,50,32,50,32,50,32,50,32,50,32,50,32,50,32,52,93,32,48,32,100,10,50,32,106,10,48,32,71,10,0,0,48,46,53,32,48,46,53,32,48,46,53,32,48,32,75,10,0,0,0,0,0,0,0,0,102,117,110,99,116,105,111,110,32,100,101,102,105,110,105,116,105,111,110,32,101,120,112,101,99,116,101,100,0,0,0,0,101,101,112,105,99,0,0,0,91,50,32,50,32,50,32,50,32,50,32,52,93,32,48,32,100,10,50,32,106,10,48,32,71,10,0,0,0,0,0,0,122,109,116,105,36,99,115,0,73,110,115,101,114,116,0,0,48,32,48,46,55,32,49,32,48,32,75,10,0,0,0,0,9,110,111,109,105,110,97,108,32,99,104,97,114,97,99,116,101,114,32,101,110,99,111,100,105,110,103,32,105,115,32,37,115,10,0,0,0,0,0,0,91,50,32,50,32,50,32,52,93,32,48,32,100,10,50,32,106,10,48,32,71,10,0,0,102,111,110,116,112,97,116,104,95,102,117,108,108,110,97,109,101,58,32,78,111,32,80,105,112,101,32,97,108,108,111,119,101,100,0,0,0,0,0,0,96,98,117,105,108,116,105,110,45,104,101,108,112,96,0,0,91,52,32,51,32,49,32,51,93,32,48,32,100,10,50,32,106,10,48,32,71,10,0,0,105,110,116,101,114,110,97,108,32,101,114,114,111,114,32,58,32,110,111,110,45,73,78,84,71,82,32,97,114,103,117,109,101,110,116,0,0,0,0,0,48,32,48,32,49,32,48,32,75,10,0,0,0,0,0,0,91,53,32,50,32,49,32,50,93,32,48,32,100,10,50,32,106,10,48,32,71,10,0,0,49,32,48,32,48,32,48,32,75,10,0,0,0,0,0,0,37,102,32,119,10,0,0,0,91,49,32,49,46,53,93,32,48,32,100,10,50,32,106,10,48,32,71,10,0,0,0,0,48,32,49,32,48,32,48,32,75,10,0,0,0,0,0,0,112,108,97,105,110,32,84,101,88,32,119,105,116,104,32,80,111,115,116,83,99,114,105,112,116,32,92,115,112,101,99,105,97,108,115,0,0,0,0,0,91,50,32,51,93,32,48,32,100,10,50,32,106,10,48,32,71,10,0,0,0,0,0,0,110,111,121,50,109,116,105,36,99,115,0,0,0,0,0,0,48,32,49,32,49,32,48,32,75,10,0,0,0,0,0,0,9,100,101,103,114,101,101,32,115,105,103,110,32,102,111,114,32,111,117,116,112,117,116,32,105,115,32,37,115,32,10,0,68,101,112,114,101,99,97,116,101,100,32,115,121,110,116,97,120,32,45,45,45,32,105,103,110,111,114,101,100,0,0,0,91,52,32,50,93,32,48,32,100,10,50,32,106,10,48,32,71,10,0,0,0,0,0,0,67,97,110,110,111,116,32,116,111,103,103,108,101,32,108,111,103,32,115,99,97,108,101,32,102,111,114,32,118,111,108,97,116,105,108,101,32,100,97,116,97,0,0,0,0,0,0,0,49,32,49,32,48,32,48,32,75,10,0,0,0,0,0,0,91,93,32,48,32,100,10,50,32,106,10,48,32,71,10,0,101,110,100,36,105,97,110,0,49,32,48,32,49,32,48,32,75,10,0,0,0,0,0,0,91,49,32,50,93,32,48,32,100,10,48,32,106,10,48,32,71,10,0,0,0,0,0,0,104,105,100,100,101,110,32,115,111,114,116,32,101,100,103,101,115,0,0,0,0,0,0,0,117,110,100,101,102,105,110,101,100,32,102,117,110,99,116,105,111,110,58,32,37,115,0,0,91,93,32,48,32,100,10,48,32,106,10,48,32,71,10,0,48,32,48,32,48,32,49,32,75,10,0,0,0,0,0,0,37,46,50,102,32,119,10,0,112,115,116,101,120,0,0,0,41,116,10,84,10,0,0,0,121,50,109,116,105,36,99,115,0,0,0,0,0,0,0,0,91,48,32,49,32,45,49,32,48,32,37,46,50,102,32,37,46,50,102,93,101,10,48,32,103,10,0,0,0,0,0,0,9,100,101,99,105,109,97,108,115,105,103,110,32,102,111,114,32,111,117,116,112,117,116,32,104,97,115,32,100,101,102,97,117,108,116,32,118,97,108,117,101,32,40,110,111,114,109,97,108,108,121,32,39,46,39,41,10,0,0,0,0,0,0,0,91,49,32,48,32,48,32,49,32,37,46,50,102,32,37,46,50,102,93,101,10,48,32,103,10,0,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,102,108,117,115,104,32,39,98,101,103,105,110,39,44,32,39,99,101,110,116,101,114,39,32,111,114,32,39,101,110,100,39,0,0,0,0,0,0,32,37,115,32,37,115,32,37,115,0,0,0,0,0,0,0,82,97,115,116,101,114,65,120,101,115,0,0,0,0,0,0,96,98,117,105,108,116,105,110,45,116,111,103,103,108,101,45,108,111,103,96,32,121,32,108,111,103,115,99,97,108,101,32,102,111,114,32,112,108,111,116,115,44,32,122,32,97,110,100,32,99,98,32,102,111,114,32,115,112,108,111,116,115,0,0,47,95,37,115,32,37,100,32,37,100,32,48,32,50,32,122,10,0,0,0,0,0,0,0,47,95,37,115,32,37,100,32,37,100,32,48,32,49,32,122,10,0,0,0,0,0,0,0,115,107,105,112,0,0,0,0,86,105,115,105,98,108,101,32,112,105,120,101,108,32,103,114,105,100,32,104,97,115,32,97,32,115,99,97,110,32,108,105,110,101,32,115,104,111,114,116,101,114,32,116,104,97,110,32,112,114,101,118,105,111,117,115,32,115,99,97,110,32,108,105,110,101,115,46,0,0,0,0,47,95,37,115,32,37,100,32,37,100,32,48,32,48,32,122,10,0,0,0,0,0,0,0,83,10,0,0,0,0,0,0,110,111,101,36,110,104,97,110,99,101,100,0,0,0,0,0,110,111,102,36,101,101,100,0,102,36,101,101,100,0,0,0,76,97,84,101,88,32,112,105,99,116,117,114,101,32,101,110,118,105,114,111,110,109,101,110,116,32,119,105,116,104,32,80,111,115,116,83,99,114,105,112,116,32,92,115,112,101,99,105,97,108,115,0,0,0,0,0,37,115,102,101,101,100,32,37,115,32,115,105,122,101,32,37,100,44,32,37,100,0,0,0,110,111,121,109,116,105,36,99,115,0,0,0,0,0,0,0,100,117,109,98,32,116,101,114,109,105,110,97,108,0,0,0,9,100,101,99,105,109,97,108,115,105,103,110,32,102,111,114,32,111,117,116,112,117,116,32,105,115,32,37,115,32,10,0,101,36,110,100,0,0,0,0,32,32,48,10,69,78,68,83,69,67,10,32,32,48,10,69,79,70,10,0,0,0,0,0,115,101,116,32,108,111,103,32,121,50,0,0,0,0,0,0,55,0,0,0,0,0,0,0,32,32,48,10,69,78,68,84,65,66,10,48,10,69,78,68,83,69,67,10,32,32,48,10,83,69,67,84,73,79,78,10,32,32,50,10,66,76,79,67,75,83,10,32,32,48,10,69,78,68,83,69,67,10,32,32,48,10,83,69,67,84,73,79,78,10,32,32,50,10,69,78,84,73,84,73,69,83,10,0,75,101,121,32,119,111,114,100,32,96,112,101,114,112,101,110,100,105,99,117,108,97,114,96,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,119,105,116,104,32,96,112,108,111,116,96,32,99,111,109,109,97,110,100,0,0,0,0,0,32,32,48,10,76,65,89,69,82,10,32,32,50,10,37,115,10,32,55,48,10,32,32,32,54,52,10,54,50,10,32,32,32,37,115,10,32,32,54,10,37,115,10,0,0,0,0,0,32,32,48,10,84,65,66,76,69,10,32,32,50,10,76,65,89,69,82,10,32,55,48,10,32,32,32,37,45,100,10,0,32,32,48,10,80,79,76,89,76,73,78,69,10,32,32,56,10,37,115,10,32,54,54,10,32,32,32,49,10,32,32,54,10,37,115,10,32,32,48,10,86,69,82,84,69,88,10,32,32,56,10,37,115,10,32,32,54,10,37,115,10,32,49,48,10,37,45,54,46,51,102,10,32,50,48,10,37,45,54,46,51,102,10,32,51,48,10,48,46,48,48,48,10,0,0,0,68,65,83,72,68,79,84,0,115,113,114,116,32,115,113,114,116,0,0,0,0,0,0,0,68,79,84,0,0,0,0,0,112,115,108,97,116,101,120,0,80,72,65,78,84,79,77,0,121,109,116,105,36,99,115,0,67,69,78,84,69,82,0,0,9,100,101,99,105,109,97,108,115,105,103,110,32,102,111,114,32,105,110,112,117,116,32,105,115,32,32,37,115,32,10,0,98,36,101,103,105,110,0,0,115,101,116,32,97,114,114,111,119,32,37,100,32,102,114,111,109,32,0,0,0,0,0,0,72,73,68,68,69,78,0,0,117,110,115,101,116,32,108,111,103,32,121,50,0,0,0,0,68,65,83,72,69,68,0,0,67,79,78,84,73,78,85,79,85,83,0,0,0,0,0,0,112,101,114,112,36,101,110,100,105,99,117,108,97,114,0,0,32,32,48,10,86,69,82,84,69,88,10,32,32,56,10,37,115,10,32,32,54,10,37,115,10,32,32,49,48,10,37,45,54,46,51,102,10,32,32,50,48,10,37,45,54,46,51,102,10,32,32,51,48,10,48,46,48,48,48,10,0,0,0,0,53,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,76,97,84,101,88,32,112,105,99,116,117,114,101,32,101,110,118,105,114,111,110,109,101,110,116,32,117,115,105,110,103,32,103,114,97,112,104,105,99,120,32,112,97,99,107,97,103,101,0,0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,110,111,120,50,109,116,105,36,99,115,0,0,0,0,0,0,83,84,65,78,68,65,82,68,0,0,0,0,0,0,0,0,78,111,32,102,117,114,116,104,101,114,32,111,112,116,105,111,110,115,32,97,108,108,111,119,101,100,32,97,102,116,101,114,32,39,100,101,102,97,117,108,116,115,39,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,115,116,101,112,32,118,97,108,117,101,115,32,105,44,106,0,0,0,0,0,0,0,117,110,115,101,116,32,97,114,114,111,119,10,0,0,0,0,32,55,50,10,37,100,10,32,49,49,10,37,45,54,46,51,102,10,32,50,49,10,37,45,54,46,51,102,10,32,51,49,10,48,46,48,48,48,10,0,115,101,116,32,108,111,103,32,120,50,0,0,0,0,0,0,32,49,48,10,37,45,54,46,51,102,10,32,50,48,10,37,45,54,46,51,102,10,32,51,48,10,48,46,48,48,48,10,32,52,48,10,37,45,54,46,51,102,10,32,32,49,10,37,115,10,32,53,48,10,37,45,54,46,51,102,10,32,32,55,10,37,115,10,0,0,0,0,32,32,48,10,84,69,88,84,10,32,32,56,10,37,115,10,0,0,0,0,0,0,0,0,32,32,48,10,83,69,81,69,78,68,10,0,0,0,0,0,38,35,120,37,50,46,50,120,59,0,0,0,0,0,0,0,123,125,94,95,64,38,126,0,32,98,97,99,107,103,114,111,117,110,100,32,34,35,37,48,54,120,34,0,0,0,0,0,32,100,97,115,104,108,101,110,103,116,104,32,37,46,49,102,0,0,0,0,0,0,0,0,101,112,115,108,97,116,101,120,0,0,0,0,0,0,0,0,32,108,119,32,37,46,49,102,0,0,0,0,0,0,0,0,120,50,109,116,105,36,99,115,0,0,0,0,0,0,0,0,114,111,116,36,97,116,105,111,110,0,0,0,0,0,0,0,32,115,105,122,101,32,37,100,44,37,100,32,0,0,0,0,9,108,111,103,45,102,105,108,101,32,102,111,114,32,102,105,116,115,32,105,115,32,117,110,99,104,97,110,103,101,100,32,102,114,111,109,32,116,104,101,32,101,110,118,105,114,111,110,109,101,110,116,32,100,101,102,97,117,108,116,32,111,102,10,9,39,37,115,39,10,0,0,32,112,111,105,110,116,0,0,32,102,111,110,116,115,99,97,108,101,32,37,46,49,102,0,117,110,115,101,116,32,108,111,103,32,120,50,0,0,0,0,32,101,110,104,97,110,99,101,100,32,0,0,0,0,0,0,37,115,32,37,115,32,37,115,32,102,111,110,116,32,34,37,115,44,37,103,34,0,0,0,99,111,110,116,111,117,114,32,112,111,108,121,103,111,110,0,37,103,0,0,0,0,0,0,110,111,112,114,111,36,112,111,114,116,105,111,110,97,108,0,98,97,99,107,36,103,114,111,117,110,100,0,0,0,0,0,66,97,100,32,102,111,114,109,97,116,32,99,104,97,114,97,99,116,101,114,0,0,0,0,100,101,36,102,97,117,108,116,0,0,0,0,0,0,0,0,101,120,116,114,97,110,101,111,117,115,32,97,114,103,117,109,101,110,116,115,32,116,111,32,117,110,115,101,116,32,114,101,99,116,97,110,103,108,101,0,116,101,114,109,111,112,116,36,105,111,110,0,0,0,0,0,101,109,102,95,109,111,118,101,58,32,40,37,100,44,37,100,41,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,76,97,84,101,88,32,112,105,99,116,117,114,101,32,101,110,118,105,114,111,110,109,101,110,116,32,119,105,116,104,32,101,109,84,101,88,32,115,112,101,99,105,97,108,115,0,0,0,110,111,120,109,116,105,36,99,115,0,0,0,0,0,0,0,101,109,102,95,115,111,108,105,100,95,118,101,99,116,111,114,58,32,40,37,100,44,37,100,41,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,9,108,111,103,45,102,105,108,101,32,102,111,114,32,102,105,116,115,32,105,115,32,119,97,115,32,115,101,116,32,98,121,32,116,104,101,32,117,115,101,114,32,116,111,32,98,101,32,10,9,39,37,115,39,10,0,10,9,100,117,109,109,121,32,118,97,114,105,97,98,108,101,32,105,115,32,116,32,102,111,114,32,99,117,114,118,101,115,10,0,0,0,0,0,0,0,105,99,111,110,118,32,102,97,105,108,101,100,0,0,0,0,115,101,116,32,108,111,103,32,121,0,0,0,0,0,0,0,105,99,111,110,118,95,111,112,101,110,32,102,97,105,108,101,100,0,0,0,0,0,0,0,85,84,70,45,49,54,76,69,0,0,0,0,0,0,0,0,99,112,52,36,51,55,0,0,83,104,105,102,116,95,74,73,83,0,0,0,0,0,0,0,32,34,37,115,34,10,0,0,85,84,70,45,56,0,0,0,105,99,111,110,118,32,115,116,114,105,110,103,0,0,0,0,32,83,116,114,105,107,101,79,117,116,0,0,0,0,0,0,32,83,116,114,105,107,101,111,117,116,0,0,0,0,0,0,101,109,116,101,120,0,0,0,32,115,116,114,105,107,101,111,117,116,0,0,0,0,0,0,120,109,116,105,36,99,115,0,112,119,100,0,0,0,0,0,32,85,110,100,101,114,108,105,110,101,0,0,0,0,0,0,32,110,111,116,0,0,0,0,117,110,114,101,99,111,103,110,105,122,101,100,32,111,98,106,101,99,116,32,116,121,112,101,0,0,0,0,0,0,0,0,32,117,110,100,101,114,108,105,110,101,0,0,0,0,0,0,117,110,115,101,116,32,108,111,103,32,121,0,0,0,0,0,101,109,102,95,100,97,115,104,101,100,95,118,101,99,116,111,114,58,32,40,37,100,44,37,100,41,32,111,117,116,32,111,102,32,114,97,110,103,101,0,32,105,46,44,59,58,124,33,39,0,0,0,0,0,0,0,111,114,105,103,36,105,110,0,109,119,60,62,0,0,0,0,32,105,106,108,46,44,59,58,124,33,40,41,91,93,73,45,39,0,0,0,0,0,0,0,118,36,101,114,115,105,111,110,0,0,0,0,0,0,0,0,43,85,83,69,95,77,79,85,83,69,32,32,0,0,0,0,116,101,120,116,115,36,112,101,99,105,97,108,0,0,0,0,116,101,120,116,114,36,105,103,105,100,0,0,0,0,0,0,76,97,84,101,88,32,112,105,99,116,117,114,101,32,101,110,118,105,114,111,110,109,101,110,116,0,0,0,0,0,0,0,116,101,120,116,110,36,111,114,109,97,108,0,0,0,0,0,110,111,99,98,100,116,105,36,99,115,0,0,0,0,0,0,114,116,0,0,0,0,0,0,116,101,120,116,104,36,105,100,100,101,110,0,0,0,0,0,9,102,105,116,32,119,105,108,108,37,115,32,112,108,97,99,101,32,112,97,114,97,109,101,116,101,114,32,101,114,114,111,114,115,32,105,110,32,118,97,114,105,97,98,108,101,115,10,0,0,0,0,0,0,0,0,117,110,107,110,111,119,110,32,111,98,106,101,99,116,0,0,116,36,104,105,99,107,110,101,115,115,0,0,0,0,0,0,115,101,116,32,108,111,103,32,120,0,0,0,0,0,0,0,115,109,36,97,108,108,0,0,112,111,114,36,116,114,97,105,116,0,0,0,0,0,0,0,116,114,97,110,115,36,112,111,115,101,0,0,0,0,0,0,112,111,105,36,110,116,115,109,97,120,0,0,0,0,0,0,109,101,36,116,114,105,99,0,110,111,99,111,110,36,116,111,117,114,115,0,0,0,0,0,35,32,32,32,32,69,79,70,10,0,0,0,0,0,0,0,102,36,111,110,116,115,105,122,101,0,0,0,0,0,0,0,72,79,77,69,0,0,0,0,101,120,112,101,99,116,105,110,103,32,39,58,39,0,0,0,100,101,36,112,116,104,0,0,98,36,105,103,0,0,0,0,102,117,110,99,116,105,111,110,32,99,111,110,116,97,105,110,115,32,116,111,111,32,109,97,110,121,32,112,97,114,97,109,101,116,101,114,115,0,0,0,108,97,116,101,120,0,0,0,32,115,105,122,101,32,37,102,32,37,102,0,0,0,0,0,99,98,100,116,105,36,99,115,0,0,0,0,0,0,0,0,83,121,115,95,82,101,113,0,32,115,105,122,101,32,37,100,32,37,100,0,0,0,0,0,79,70,70,0,0,0,0,0,112,111,108,121,36,103,111,110,0,0,0,0,0,0,0,0,118,101,114,115,105,111,110,0,108,111,97,100,112,97,116,104,95,102,111,112,101,110,0,0,117,110,115,101,116,32,108,111,103,32,120,0,0,0,0,0,100,101,112,116,104,0,0,0,109,101,116,114,105,99,0,0,115,99,97,110,0,0,0,0,105,110,99,104,101,115,0,0,112,111,105,110,116,115,109,97,120,0,0,0,0,0,0,0,115,109,97,108,108,0,0,0,98,105,103,0,0,0,0,0,37,115,32,37,115,32,37,115,32,37,100,32,37,115,32,37,115,32,37,115,37,115,32,37,115,32,34,37,115,44,37,100,34,32,37,115,32,37,100,32,37,115,32,37,100,32,37,115,32,37,115,0,0,0,0,0,84,107,47,84,99,108,32,99,97,110,118,97,115,32,119,105,100,103,101,116,32,91,112,101,114,108,116,107,93,32,91,105,110,116,101,114,97,99,116,105,118,101,93,0,0,0,0,0,32,116,101,120,116,114,105,103,105,100,0,0,0,0,0,0,110,111,122,100,116,105,36,99,115,0,0,0,0,0,0,0,32,116,101,120,116,104,105,100,100,101,110,0,0,0,0,0,79,78,0,0,0,0,0,0,32,114,111,116,97,116,101,32,98,121,32,37,100,0,0,0,32,116,101,120,116,115,112,101,99,105,97,108,0,0,0,0,115,101,116,32,108,111,103,32,122,0,0,0,0,0,0,0,37,115,37,115,37,115,0,0,32,116,101,120,116,110,111,114,109,97,108,0,0,0,0,0,110,111,102,108,105,112,0,0,37,72,0,0,0,0,0,0,119,114,111,110,103,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,44,32,109,117,115,116,32,98,101,32,51,46,49,32,111,114,32,51,46,50,0,0,0,0,0,0,0,0,104,105,100,100,101,110,32,115,111,114,116,97,114,114,97,121,0,0,0,0,0,0,0,0,118,101,114,115,105,111,110,58,32,51,46,49,32,111,114,32,51,46,50,32,101,120,112,101,99,116,101,100,0,0,0,0,112,111,105,110,116,115,109,97,120,58,32,110,117,109,98,101,114,32,111,117,116,32,111,102,32,114,97,110,103,101,32,40,50,44,37,108,100,41,0,0,109,97,120,46,32,112,111,105,110,116,115,32,112,101,114,32,112,111,108,121,108,105,110,101,58,32,110,117,109,98,101,114,32,101,120,112,101,99,116,101,100,0,0,0,0,0,0,0,100,101,112,116,104,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,0,0,0,0,116,107,99,97,110,118,97,115,0,0,0,0,0,0,0,0,100,101,112,116,104,58,32,110,117,109,98,101,114,32,101,120,112,101,99,116,101,100,0,0,122,100,116,105,36,99,115,0,116,104,105,99,107,110,101,115,115,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,9,112,111,108,97,114,32,105,115,32,37,115,10,0,0,0,116,104,105,99,107,110,101,115,115,58,32,110,117,109,98,101,114,32,101,120,112,101,99,116,101,100,0,0,0,0,0,0,117,110,115,101,116,32,108,111,103,32,122,0,0,0,0,0,115,105,122,101,58,32,50,32,110,117,109,98,101,114,115,32,101,120,112,101,99,116,101,100,0,0,0,0,0,0,0,0,80,83,105,122,101,95,50,0,83,105,110,103,108,101,0,0,102,108,105,112,0,0,0,0,86,105,115,105,98,108,101,32,112,105,120,101,108,32,103,114,105,100,32,104,97,115,32,97,32,115,99,97,110,32,108,105,110,101,32,108,111,110,103,101,114,32,116,104,97,110,32,112,114,101,118,105,111,117,115,32,115,99,97,110,32,108,105,110,101,115,46,0,0,0,0,0,65,52,0,0,0,0,0,0,76,101,116,116,101,114,0,0,35,70,73,71,32,51,46,50,10,37,115,10,37,115,10,37,115,10,37,115,10,37,54,46,50,102,10,37,115,10,37,100,10,37,100,32,37,100,10,0,51,46,50,0,0,0,0,0,77,101,116,114,105,99,0,0,84,71,73,70,32,88,49,49,32,91,109,111,100,101,93,32,91,120,44,121,93,32,91,100,97,115,104,101,100,93,32,91,34,102,111,110,116,34,32,91,102,111,110,116,115,105,122,101,93,93,0,0,0,0,0,0,73,110,99,104,101,115,0,0,110,111,121,50,100,116,105,36,99,115,0,0,0,0,0,0,67,101,110,116,101,114,0,0,100,101,103,114,101,101,115,10,0,0,0,0,0,0,0,0,115,101,116,32,108,97,98,101,108,32,37,100,32,34,37,115,34,32,97,116,32,0,0,0,35,70,73,71,32,51,46,49,10,37,115,10,37,115,10,37,115,10,37,100,32,37,100,10,0,0,0,0,0,0,0,0,115,101,116,32,108,111,103,32,99,98,0,0,0,0,0,0,51,46,49,0,0,0,0,0,70,73,71,95,112,111,105,110,116,115,0,0,0,0,0,0,102,108,105,112,122,0,0,0,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,54,46,51,102,32,37,54,46,51,102,32,37,100,32,37,54,46,51,102,32,37,54,46,51,102,32,37,100,32,37,100,32,37,115,92,48,48,49,10,0,0,0,0,0,0,70,73,71,32,116,101,120,116,0,0,0,0,0,0,0,0,52,10,9,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,10,0,0,0,0,0,53,10,9,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,10,0,0,0,0,0,0,0,115,113,114,116,40,120,41,0,50,32,51,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,54,46,51,102,32,48,32,48,32,48,32,48,32,48,32,0,0,0,0,0,0,0,116,103,105,102,0,0,0,0,49,32,51,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,54,46,51,102,32,49,32,48,46,48,48,48,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,10,0,121,50,100,116,105,36,99,115,0,0,0,0,0,0,0,0,37,100,32,37,100,32,37,100,32,37,100,10,0,0,0,0,114,97,100,105,97,110,115,10,0,0,0,0,0,0,0,0,37,100,32,37,100,32,37,46,51,102,32,37,46,51,102,32,37,46,51,102,10,0,0,0,115,97,109,112,108,105,110,103,32,114,97,116,101,32,109,117,115,116,32,98,101,32,62,32,49,59,32,115,97,109,112,108,105,110,103,32,117,110,99,104,97,110,103,101,100,0,0,0,117,110,115,101,116,32,108,97,98,101,108,10,0,0,0,0,114,101,99,116,0,0,0,0,117,110,115,101,116,32,108,111,103,32,99,98,0,0,0,0,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,57,46,51,102,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,10,0,0,0,0,0,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,54,46,51,102,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,10,32,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,10,0,0,0,0,0,77,117,115,116,32,115,112,101,99,105,102,121,32,97,32,115,97,109,112,108,105,110,103,32,97,114,114,97,121,32,115,105,122,101,32,98,101,102,111,114,101,32,105,110,100,105,99,97,116,105,110,103,32,102,108,105,112,32,105,110,32,115,101,99,111,110,100,32,100,105,109,101,110,115,105,111,110,0,0,0,102,105,103,58,32,65,116,116,101,109,112,116,32,116,111,32,115,101,116,32,112,97,108,101,116,116,101,32,116,119,105,99,101,10,0,0,0,0,0,0,37,100,32,37,100,32,35,37,50,46,50,120,37,50,46,50,120,37,50,46,50,120,10,0,77,111,110,111,99,104,114,111,109,101,32,102,105,103,32,102,105,108,101,58,32,117,115,105,110,103,32,103,114,97,121,32,112,97,108,101,116,116,101,32,105,110,115,116,101,97,100,32])
+.concat([111,102,32,99,111,108,111,114,10,0,0,0,0,0,0,0,102,105,103,58,32,80,97,108,101,116,116,101,32,117,115,101,100,32,98,101,102,111,114,101,32,115,101,116,10,0,0,0,32,37,100,32,37,100,0,0,87,51,67,32,83,99,97,108,97,98,108,101,32,86,101,99,116,111,114,32,71,114,97,112,104,105,99,115,32,100,114,105,118,101,114,0,0,0,0,0,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,57,46,51,102,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,108,100,10,9,0,0,0,110,111,121,100,116,105,36,99,115,0,0,0,0,0,0,0,45,54,10,0,0,0,0,0,9,65,110,103,108,101,115,32,97,114,101,32,105,110,32,0,73,108,108,101,103,97,108,32,118,97,108,117,101,32,102,111,114,32,115,105,122,101,0,0,117,110,115,101,116,32,107,101,121,10,0,0,0,0,0,0,35,32,69,110,100,32,112,108,111,116,32,35,37,100,10,0,96,98,117,105,108,116,105,110,45,110,101,97,114,101,115,116,45,108,111,103,96,32,116,111,103,103,108,101,32,108,111,103,115,99,97,108,101,32,111,102,32,97,120,105,115,32,110,101,97,114,101,115,116,32,99,117,114,115,111,114,0,0,0,0,35,32,66,101,103,105,110,32,112,108,111,116,32,35,37,100,10,0,0,0,0,0,0,0,32,37,100,32,37,100,32,37,100,32,37,100,10,0,0,0,102,108,105,112,121,0,0,0,54,0,0,0,0,0,0,0,78,101,101,100,32,50,32,116,111,32,55,32,117,115,105,110,103,32,115,112,101,99,115,0,27,42,109,112,49,109,50,97,50,81,0,0,0,0,0,0,27,42,100,101,84,0,0,0,27,42,100,97,102,108,115,67,0,0,0,0,0,0,0,0,27,42,112,0,0,0,0,0,81,77,83,47,81,85,73,67,32,76,97,115,101,114,32,112,114,105,110,116,101,114,32,40,97,108,115,111,32,84,97,108,97,114,105,115,32,49,50,48,48,32,97,110,100,32,111,116,104,101,114,115,41,0,0,0,27,42,109,37,100,66,0,0,121,100,116,105,36,99,115,0,27,42,100,84,0,0,0,0,9,115,97,109,112,108,105,110,103,32,114,97,116,101,32,105,115,32,37,100,44,32,37,100,10,0,0,0,0,0,0,0,110,111,115,113,36,117,97,114,101,0,0,0,0,0,0,0,115,101,116,32,107,101,121,32,37,115,111,112,97,113,117,101,10,0,0,0,0,0,0,0,72,80,50,54,0,0,0,0,116,117,114,110,105,110,103,32,109,111,117,115,101,32,111,102,102,46,10,0,0,0,0,0,37,100,44,37,100,79,0,0,37,100,44,37,100,80,0,0,102,108,105,112,120,0,0,0,27,42,100,0,0,0,0,0,27,42,109,37,100,78,0,0,9,102,111,110,116,112,97,116,104,32,105,115,32,101,109,112,116,121,10,0,0,0,0,0,27,42,109,49,109,49,110,49,51,54,44,49,99,90,0,0,120,50,94,123,37,100,125,0,27,42,100,97,99,90,0,0,105,110,118,97,108,105,100,32,97,120,105,115,0,0,0,0,27,42,112,97,102,37,100,44,37,100,90,0,0,0,0,0,113,109,115,0,0,0,0,0,27,42,112,98,102,37,100,44,37,100,90,0,0,0,0,0,110,111,120,50,100,116,105,36,99,115,0,0,0,0,0,0,27,42,109,37,100,98,90,0,9,105,115,111,32,115,97,109,112,108,105,110,103,32,114,97,116,101,32,105,115,32,37,100,44,32,37,100,10,0,0,0,110,111,114,97,36,116,105,111,0,0,0,0,0,0,0,0,10,115,101,116,32,107,101,121,32,109,97,120,99,111,108,117,109,110,115,32,37,100,32,109,97,120,114,111,119,115,32,37,100,0,0,0,0,0,0,0,27,42,108,37,115,10,0,0,116,117,114,110,105,110,103,32,109,111,117,115,101,32,111,110,46,10,0,0,0,0,0,0,27,42,109,37,100,110,90,10,0,0,0,0,0,0,0,0,110,111,101,106,101,99,116,0,120,95,109,105,110,51,100,32,115,104,111,117,108,100,32,110,111,116,32,101,113,117,97,108,32,120,95,109,97,120,51,100,33,0,0,0,0,0,0,0,67,117,114,114,101,110,116,108,121,32,110,111,116,32,115,117,112,112,111,114,116,105,110,103,32,116,104,114,101,101,45,100,105,109,101,110,115,105,111,110,97,108,32,115,97,109,112,108,105,110,103,0,0,0,0,0,105,115,111,36,95,56,56,53,57,95,49,0,0,0,0,0,101,106,101,99,116,0,0,0,32,116,121,112,101,10,0,0,37,100,32,112,101,110,115,32,37,115,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,34,101,106,101,99,116,34,32,111,114,32,110,117,109,98,101,114,32,111,102,32,112,101,110,115,0,0,0,0,0,78,117,109,98,101,114,32,111,102,32,112,101,110,115,32,109,117,115,116,32,98,101,32,112,111,115,105,116,105,118,101,0,101,106,101,36,99,116,0,0,80,111,115,116,83,99,114,105,112,116,32,103,114,97,112,104,105,99,115,44,32,105,110,99,108,117,100,105,110,103,32,69,80,83,70,32,101,109,98,101,100,100,101,100,32,102,105,108,101,115,32,40,42,46,101,112,115,41,0,0,0,0,0,0,80,85,83,80,48,59,80,71,59,27,46,90,10,0,0,0,120,50,100,116,105,36,99,115,0,0,0,0,0,0,0,0,112,114,36,105,110,116,0,0,80,85,83,80,48,59,27,46,90,10,0,0,0,0,0,0,105,110,100,101,112,101,110,100,101,110,116,108,121,32,115,99,97,108,101,100,0,0,0,0,114,97,36,116,105,111,0,0,112,114,101,36,102,105,120,0,10,115,101,116,32,107,101,121,32,37,115,105,110,118,101,114,116,32,115,97,109,112,108,101,110,32,37,103,32,115,112,97,99,105,110,103,32,37,103,32,119,105,100,116,104,32,37,103,32,104,101,105,103,104,116,32,37,103,32,0,0,0,0,0,67,65,55,59,0,0,0,0,96,98,117,105,108,116,105,110,45,116,111,103,103,108,101,45,109,111,117,115,101,96,0,0,73,78,59,37,115,10,83,67,48,44,37,100,44,48,44,37,100,59,10,83,82,37,102,44,37,102,59,10,0,0,0,0,27,46,89,10,27,46,73,56,49,59,59,49,55,58,27,46,78,59,49,57,58,27,46,77,53,48,48,58,10,0,0,0,100,122,0,0,0,0,0,0,80,85,59,80,65,37,100,44,37,100,59,10,0,0,0,0,80,65,37,100,44,37,100,59,10,0,0,0,0,0,0,0,80,68,59,80,65,37,100,44,37,100,59,10,0,0,0,0,45,85,83,69,95,67,87,68,82,67,32,32,0,0,0,0,80,85,59,10,83,80,37,100,59,10,0,0,0,0,0,0,3,10,0,0,0,0,0,0,112,111,115,116,115,99,114,105,112,116,0,0,0,0,0,0,76,66,0,0,0,0,0,0,110,111,120,100,116,105,36,99,115,0,0,0,0,0,0,0,116,114,0,0,0,0,0,0,68,73,48,44,49,59,10,0,111,110,32,116,104,101,32,115,97,109,101,32,115,99,97,108,101,0,0,0,0,0,0,0,115,113,36,117,97,114,101,0,110,111,98,111,120,0,0,0,68,73,48,44,45,49,59,10,0,0,0,0,0,0,0,0,96,98,117,105,108,116,105,110,45,112,114,101,118,105,111,117,115,45,109,111,117,115,101,45,102,111,114,109,97,116,96,0,68,73,49,44,48,59,10,0,116,0,0,0,0,0,0,0,112,36,115,112,111,105,110,116,115,0,0,0,0,0,0,0,77,117,115,116,32,115,112,101,99,105,102,121,32,97,32,115,97,109,112,108,105,110,103,32,97,114,114,97,121,32,115,105,122,101,32,98,101,102,111,114,101,32,105,110,100,105,99,97,116,105,110,103,32,115,112,97,99,105,110,103,32,105,110,32,115,101,99,111,110,100,32,100,105,109,101,110,115,105,111,110,0,0,0,0,0,0,0,0,32,37,115,32,115,111,108,105,100,32,37,46,50,102,32,0,110,36,111,112,115,112,111,105,110,116,115,0,0,0,0,0,110,111,104,105,100,100,101,110,36,51,100,0,0,0,0,0,102,36,111,110,116,0,0,0,115,121,110,116,97,120,32,101,114,114,111,114,0,0,0,0,100,97,115,36,104,101,100,0,115,111,108,36,105,100,0,0,110,111,112,115,112,111,105,110,116,115,0,0,0,0,0,0,70,114,97,109,101,32,109,97,107,101,114,32,77,73,70,32,51,46,48,48,32,102,111,114,109,97,116,0,0,0,0,0,112,115,112,111,105,110,116,115,0,0,0,0,0,0,0,0,120,100,116,105,36,99,115,0,83,99,114,111,108,108,95,76,111,99,107,0,0,0,0,0,112,105,116,99,104,0,0,0,120,47,121,47,122,0,0,0,101,120,116,114,97,110,101,111,117,115,32,111,114,32,111,117,116,45,111,102,45,111,114,100,101,114,32,97,114,103,117,109,101,110,116,115,32,105,110,32,115,101,116,32,97,114,114,111,119,115,116,121,108,101,0,0,104,101,105,103,104,116,0,0,115,119,105,116,99,104,101,100,32,109,111,117,115,101,32,102,111,114,109,97,116,32,102,114,111,109,32,37,108,100,32,116,111,32,37,108,100,10,0,0,32,37,115,32,37,100,32,37,115,32,92,10,32,32,32,37,115,32,37,115,32,37,102,32,37,115,0,0,0,0,0,0,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,115,117,98,115,116,114,105,110,103,32,114,97,110,103,101,32,111,112,101,114,97,116,111,114,32,97,112,112,108,105,101,100,32,116,111,32,110,111,110,45,83,84,82,73,78,71,32,116,121,112,101,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,112,111,105,110,116,32,115,105,122,101,58,32,114,101,97,108,32,110,117,109,98,101,114,0,0,0,0,0,0,0,100,114,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,102,111,110,116,58,32,115,116,105,99,107,44,32,99,103,95,116,105,109,101,115,44,32,117,110,105,118,101,114,115,44,32,122,97,112,102,95,100,105,110,103,98,97,116,115,44,32,97,110,116,105,113,117,101,95,111,108,105,118,101,44,10,97,114,105,97,108,44,32,99,111,117,114,105,101,114,44,32,103,97,114,97,109,111,110,100,95,97,110,116,105,103,117,97,44,32,108,101,116,116,101,114,95,103,111,116,104,105,99,44,32,99,103,95,111,109,101,103,97,44,32,97,108,98,101,114,116,117,115,44,10,116,105,109,101,115,95,110,101,119,95,114,111,109,97,110,44,32,99,108,97,114,101,110,100,111,110,44,32,99,111,114,111,110,101,116,44,32,109,97,114,105,103,111,108,100,44,32,116,114,117,101,116,121,112,101,95,115,121,109,98,111,108,115,44,32,111,114,32,119,105,110,103,100,105,110,103,115,0,0,0,0,0,0,78,117,109,98,101,114,32,111,102,32,112,101,110,115,32,109,117,115,116,32,98,101,32,97,32,112,111,115,105,116,105,118,101,0,0,0,0,0,0,0,108,101,116,116,101,114,0,0,108,101,116,36,116,101,114,0,108,101,103,97,108,0,0,0,109,105,102,0,0,0,0,0,108,101,103,36,97,108,0,0,110,111,99,98,116,105,36,99,115,0,0,0,0,0,0,0,110,111,101,120,116,101,110,100,101,100,0,0,0,0,0,0,120,47,121,0,0,0,0,0,97,114,114,111,119,115,116,121,108,101,0,0,0,0,0,0,110,111,97,117,116,111,116,105,116,108,101,115,0,0,0,0,110,111,101,120,116,36,101,110,100,101,100,0,0,0,0,0,96,98,117,105,108,116,105,110,45,110,101,120,116,45,109,111,117,115,101,45,102,111,114,109,97,116,96,0,0,0,0,0,101,120,116,101,110,100,101,100,0,0,0,0,0,0,0,0,101,120,116,36,101,110,100,101,100,0,0,0,0,0,0,0,100,121,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,109,111,100,101,58,32,112,111,114,116,114,97,105,116,32,111,114,32,108,97,110,100,115,99,97,112,101,0,0,0,109,36,111,100,101,0,0,0,42,65,108,108,42,32,101,100,103,101,115,32,117,110,100,101,102,105,110,101,100,32,111,114,32,111,117,116,32,111,102,32,114,97,110,103,101,44,32,116,104,117,115,32,110,111,32,112,108,111,116,46,0,0,0,0,27,38,108,48,79,0,0,0,27,38,108,49,79,0,0,0,27,69,27,38,108,49,88,37,115,10,0,0,0,0,0,0,73,109,97,103,101,110,32,108,97,115,101,114,32,112,114,105,110,116,101,114,0,0,0,0,27,37,48,65,27,69,10,0,99,98,116,105,36,99,115,0,27,37,49,65,27,38,108,48,72,10,0,0,0,0,0,0,9,9,37,115,32,97,120,101,115,32,97,114,101,32,37,115,10,0,0,0,0,0,0,0,111,98,106,101,99,116,32,105,110,105,116,105,97,108,105,122,97,116,105,111,110,32,102,97,105,108,117,114,101,0,0,0,97,117,116,111,116,105,116,108,101,115,0,0,0,0,0,0,85,76,49,44,49,48,48,59,10,85,76,50,44,56,44,56,44,57,44,56,44,56,44,57,44,56,44,56,44,57,44,56,44,56,44,57,59,10,85,76,51,44,54,44,54,44,54,44,55,44,54,44,54,44,54,44,55,44,54,44,54,44,54,44,55,44,54,44,54,44,54,44,55,59,10,85,76,52,44,53,44,53,44,53,44,49,48,44,53,44,53,44,53,44,49,48,44,53,44,53,44,53,44,49,48,59,10,85,76,53,44,53,44,53,44,53,44,53,44,53,44,56,44,53,44,53,44,53,44,53,44,53,44,56,44,53,44,53,44,53,44,53,44,53,44,57,59,10,85,76,54,44,56,44,56,44,48,44,57,44,56,44,56,44,48,44,57,44,56,44,56,44,48,44,57,59,10,85,76,55,44,52,44,52,44,52,44,52,44,48,44,52,44,52,44,52,44,52,44,52,44,48,44,52,44,52,44,52,44,52,44,52,44,48,44,52,59,10,85,76,56,44,54,44,54,44,54,44,54,44,54,44,54,44,48,44,54,44,54,44,54,44,54,44,54,44,54,44,54,44,48,44,54,59,10,0,96,98,117,105,108,116,105,110,45,100,101,99,114,101,109,101,110,116,45,99,108,105,112,98,111,97,114,100,109,111,100,101,96,0,0,0,0,0,0,0,73,78,83,80,49,83,68,49,44,37,100,44,50,44,37,100,44,0,0,0,0,0,0,0,27,37,48,66,0,0,0,0,80,83,105,122,101,95,49,0,100,116,0,0,0,0,0,0,105,109,97,103,101,0,0,0,80,69,60,0,0,0,0,0,80,69,0,0,0,0,0,0,46,48,56,0,0,0,0,0,105,109,97,103,101,110,0,0,46,49,54,0,0,0,0,0,110,111,114,116,105,36,99,115,0,0,0,0,0,0,0,0,46,50,52,0,0,0,0,0,37,103,32,114,111,116,95,120,44,32,37,103,32,114,111,116,95,122,44,32,37,103,32,115,99,97,108,101,44,32,37,103,32,115,99,97,108,101,95,122,10,0,0,0,0,0,0,0,111,98,106,101,99,116,0,0,97,117,116,111,116,105,116,108,101,115,32,99,111,108,117,109,110,104,101,97,100,0,0,0,44,50,0,0,0,0,0,0,115,119,105,116,99,104,101,100,32,99,108,105,112,98,111,97,114,100,32,102,111,114,109,97,116,32,102,114,111,109,32,37,108,100,32,116,111,32,37,108,100,10,0,0,0,0,0,0,80,87,46,49,76,84,49,44,46,50,53,0,0,0,0,0,80,87,46,50,76,84,0,0,100,120,0,0,0,0,0,0,80,87,37,115,76,84,0,0,80,87,37,115,76,84,37,100,37,115,0,0,0,0,0,0,80,85,59,10,83,80,49,59,10,80,87,46,50,76,84,49,44,46,50,53,0,0,0,0,80,85,59,10,83,80,49,59,10,80,87,46,50,76,84,0,115,113,114,116,0,0,0,0,80,85,59,10,83,80,37,100,59,10,76,84,59,0,0,0,72,80,32,68,101,115,105,103,110,106,101,116,32,55,53,48,67,44,32,72,80,32,76,97,115,101,114,106,101,116,32,73,73,73,47,73,86,44,32,101,116,99,46,32,40,109,97,110,121,32,111,112,116,105,111,110,115,41,0,0,0,0,0,0,80,85,59,10,83,80,37,100,59,10,76,84,37,100,59,0,114,116,105,36,99,115,0,0,76,66,37,115,3,10,0,0,109,97,112,10,0,0,0,0,73,110,99,111,110,115,105,115,116,101,110,116,32,111,112,116,105,111,110,115,0,0,0,0,68,73,49,44,48,0,0,0,96,98,117,105,108,116,105,110,45,105,110,99,114,101,109,101,110,116,45,99,108,105,112,98,111,97,114,100,109,111,100,101,96,0,0,0,0,0,0,0,68,73,48,44,45,49,0,0,68,73,48,44,49,0,0,0,97,114,114,36,97,121,0,0,76,79,55,0,0,0,0,0,76,79,52,0,0,0,0,0,76,79,49,0,0,0,0,0,87,71,37,46,50,102,44,49,56,48,44,49,56,48,59,69,80,59,10,0,0,0,0,0,69,87,37,46,50,102,44,48,44,49,56,48,59,10,0,0,112,99,108,53,0,0,0,0,80,77,50,59,70,84,49,48,44,51,48,59,70,80,59,69,80,59,70,84,59,10,0,0,110,111,122,116,105,36,99,115,0,0,0,0,0,0,0,0,70,84,49,48,44,51,48,59,87,71,37,46,50,102,44,48,44,51,54,48,59,69,80,59,70,84,59,10,0,0,0,0,9,118,105,101,119,32,105,115,32,0,0,0,0,0,0,0,85,110,114,101,99,111,103,110,105,122,101,100,32,111,114,32,100,117,112,108,105,99,97,116,101,32,111,112,116,105,111,110,0,0,0,0,0,0,0,0,76,101,102,116,0,0,0,0,70,84,49,48,44,51,48,59,82,65,37,100,44,37,100,59,69,80,59,70,84,59,10,0,110,111,116,0,0,0,0,0,82,65,37,100,44,37,100,59,69,80,59,10,0,0,0,0,87,71,37,100,44,48,44,51,54,48,59,69,80,59,10,0,114,101,99,36,111,114,100,0,87,71,37,100,44,57,48,44,50,55,48,59,69,80,59,69,87,37,100,44,48,44,57,48,59,10,0,0,0,0,0,0,87,71,37,100,44,49,56,48,44,50,55,48,59,69,80,59,69,87,37,100,44,57,48,44,57,48,59,10,0,0,0,0,87,71,37,100,44,49,56,48,44,49,56,48,59,69,80,59,69,87,37,100,44,48,44,49,56,48,59,10,0,0,0,0,87,71,37,100,44,50,55,48,44,50,55,48,59,69,80,59,69,87,37,100,44,49,56,48,44,57,48,59,10,0,0,0,87,71,37,100,44,57,48,44,57,48,59,69,80,59,69,87,37,100,44,49,56,48,44,57,48,59,87,71,37,100,44,50,55,48,44,57,48,59,69,80,59,69,87,37,100,44,48,44,57,48,59,10,0,0,0,0,72,80,55,52,55,53,32,97,110,100,32,114,101,108,97,116,105,118,101,115,32,91,110,117,109,98,101,114,32,111,102,32,112,101,110,115,93,32,91,101,106,101,99,116,93,0,0,0,87,71,37,100,44,50,55,48,44,49,56,48,59,69,80,59,69,87,37,100,44,57,48,44,49,56,48,59,10,0,0,0,122,116,105,36,99,115,0,0,87,71,37,100,44,50,55,48,44,57,48,59,69,80,59,69,87,37,100,44,48,44,50,55,48,59,10,0,0,0,0,0,9,115,117,114,102,97,99,101,32,105,115,32,37,115,100,114,97,119,110,10,0,0,0,0,102,105,108,108,99,36,111,108,111,114,0,0,0,0,0,0,104,111,114,105,122,111,110,116,97,108,0,0,0,0,0,0,87,71,37,100,44,48,44,50,55,48,59,69,80,59,69,87,37,100,44,50,55,48,44,57,48,59,10,0,0,0,0,0,100,105,115,116,97,110,99,101,32,116,111,32,114,117,108,101,114,32,119,105,108,108,32,37,115,32,98,101,32,115,104,111,119,110,32,105,110,32,112,111,108,97,114,32,99,111,111,114,100,105,110,97,116,101,115,46,10,0,0,0,0,0,0,0,87,71,37,100,44,57,48,44,49,56,48,59,69,80,59,69,87,37,100,44,50,55,48,44,49,56,48,59,10,0,0,0,87,71,37,100,44,48,44,57,48,59,69,80,59,69,87,37,100,44,57,48,44,57,48,59,87,71,37,100,44,49,56,48,44,57,48,59,69,80,59,69,87,37,100,44,50,55,48,44,57,48,59,10,0,0,0,0,85,110,114,101,99,111,103,110,105,122,101,100,32,102,105,108,101,116,121,112,101,59,32,116,114,121,32,34,115,104,111,119,32,100,97,116,97,102,105,108,101,32,98,105,110,97,114,121,32,102,105,108,101,116,121,112,101,115,34,0,0,0,0,0,87,71,37,100,44,49,56,48,44,57,48,59,69,80,59,69,87,37,100,44,50,55,48,44,50,55,48,59,10,0,0,0,87,71,37,100,44,48,44,49,56,48,59,69,80,59,69,87,37,100,44,49,56,48,44,49,56,48,59,10,0,0,0,0,9,115,121,115,116,101,109,32,102,111,110,116,112,97,116,104,32,105,115,32,0,0,0,0,87,71,37,100,44,57,48,44,57,48,59,69,80,59,69,87,37,100,44,49,56,48,44,50,55,48,59,10,0,0,0,0,120,50,94,123,37,100,125,89,105,0,0,0,0,0,0,0,87,71,37,100,44,48,44,57,48,59,69,80,59,69,87,37,100,44,57,48,44,50,55,48,59,10,0,0,0,0,0,0,121,111,117,32,99,97,110,39,116,32,99,104,97,110,103,101,32,116,104,101,32,111,117,116,112,117,116,32,105,110,32,109,117,108,116,105,112,108,111,116,32,109,111,100,101,0,0,0,37,72,58,37,77,58,37,83,0,0,0,0,0,0,0,0,67,73,37,100,59,10,0,0,104,112,103,108,0,0,0,0,80,77,50,59,70,80,59,69,80,59,10,0,0,0,0,0,110,111,121,50,116,105,36,99,115,0,0,0,0,0,0,0,80,77,48,59,10,0,0,0,100,114,97,119,110,0,0,0,102,99,0,0,0,0,0,0,118,101,114,116,105,99,97,108,0,0,0,0,0,0,0,0,87,71,37,46,50,102,44,48,44,51,54,48,59,69,80,59,10,0,0,0,0,0,0,0,96,98,117,105,108,116,105,110,45,116,111,103,103,108,101,45,112,111,108,97,114,100,105,115,116,97,110,99,101,96,0,0,67,73,37,46,50,102,59,10,0,0,0,0,0,0,0,0,82,65,37,46,50,102,44,37,46,50,102,59,69,80,59,10,0,0,0,0,0,0,0,0,117,116,102,36,56,0,0,0,119,105,110,103,100,105,110,103,115,0,0,0,0,0,0,0,32,32,99,111,108,111,114,0,98,97,110,100,0,0,0,0,119,36,105,110,103,100,105,110,103,115,0,0,0,0,0,0,116,114,117,101,116,121,112,101,95,115,121,109,98,111,108,115,0,0,0,0,0,0,0,0,116,114,36,117,101,116,121,112,101,95,115,121,109,98,111,108,115,0,0,0,0,0,0,0,103,101,116,99,111,108,111,114,46,99,0,0,0,0,0,0,109,97,114,105,103,111,108,100,0,0,0,0,0,0,0,0,72,80,50,54,52,56,32,97,110,100,32,72,80,50,54,52,55,0,0,0,0,0,0,0,109,36,97,114,105,103,111,108,100,0,0,0,0,0,0,0,121,50,116,105,36,99,115,0,112,36,108,111,116,0,0,0,99,111,114,111,110,101,116,0,114,101,109,111,118,101,100,0,73,110,118,97,108,105,100,32,99,111,109,109,97,110,100,32,45,32,100,105,100,32,121,111,117,32,109,101,97,110,32,39,117,110,115,101,116,32,115,116,121,108,101,32,114,101,99,116,97,110,103,108,101,39,63,0,110,111,111,117,116,36,112,117,116,0,0,0,0,0,0,0,32,37,115,32,37,115,32,37,115,114,101,118,101,114,115,101,32,37,115,101,110,104,97,110,99,101,100,32,37,115,32,0,99,111,114,36,111,110,101,116,0,0,0,0,0,0,0,0,99,111,109,109,117,110,105,99,97,116,105,111,110,32,99,111,109,109,97,110,100,115,32,119,105,108,108,32,98,101,32,101,99,104,111,101,100,46,10,0,99,108,97,114,101,110,100,111,110,0,0,0,0,0,0,0,99,108,36,97,114,101,110,100,111,110,0,0,0,0,0,0,102,105,108,101,36,116,121,112,101,0,0,0,0,0,0,0,116,105,109,101,115,95,110,101,119,95,114,111,109,97,110,0,116,105,36,109,101,115,95,110,101,119,95,114,111,109,97,110,0,0,0,0,0,0,0,0,97,108,98,101,114,116,117,115,0,0,0,0,0,0,0,0,43,66,73,78,65,82,89,95,68,65,84,65,32,32,0,0,97,108,36,98,101,114,116,117,115,0,0,0,0,0,0,0,99,103,95,111,109,101,103,97,0,0,0,0,0,0,0,0,104,112,50,54,52,56,0,0,99,103,95,111,36,109,101,103,97,0,0,0,0,0,0,0,110,111,121,116,105,36,99,115,0,0,0,0,0,0,0,0,108,101,116,116,101,114,95,103,111,116,104,105,99,0,0,0,0,0,0,0,0,0,0,0,9,104,105,100,100,101,110,32,115,117,114,102,97,99,101,32,105,115,32,37,115,10,0,0,99,36,101,110,116,114,101,0,32,98,111,116,116,111,109,0,108,36,101,116,116,101,114,95,103,111,116,104,105,99,0,0,101,99,104,111,105,110,103,32,111,102,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,99,111,109,109,97,110,100,115,32,105,115,32,116,117,114,110,101,100,32,111,102,102,46,10,0,0,0,0,0,0,0,103,97,114,97,109,111,110,100,95,97,110,116,105,103,117,97,0,0,0,0,0,0,0,0,103,36,97,114,97,109,111,110,100,95,97,110,116,105,103,117,97,0,0,0,0,0,0,0,100,97,116,97,102,105,108,101,32,99,111,108,117,109,110,0,115,101,116,32,97,117,116,111,115,99,97,108,101,32,37,115,102,105,120,109,97,120,10,0,99,111,117,36,114,105,101,114,0,0,0,0,0,0,0,0,97,114,105,97,108,0,0,0,97,114,36,105,97,108,0,0,99,117,114,118,101,32,112,111,105,110,116,115,0,0,0,0,117,110,114,101,99,111,103,110,105,122,101,100,32,111,112,116,105,111,110,32,37,115,10,0,105,116,101,114,97,116,105,111,110,32,108,105,110,107,101,100,32,108,105,115,116,0,0,0,97,110,116,105,113,117,101,95,111,108,105,118,101,0,0,0,97,110,36,116,105,113,117,101,95,111,108,105,118,101,0,0,72,80,50,54,50,51,65,32,97,110,100,32,109,97,121,98,101,32,111,116,104,101,114,115,0,0,0,0,0,0,0,0,122,97,112,102,95,100,105,110,103,98,97,116,115,0,0,0,121,116,105,36,99,115,0,0,80,97,117,115,101,0,0,0,122,36,97,112,102,95,100,105,110,103,98,97,116,115,0,0,9,84,114,121,32,116,111,32,115,101,116,32,76,79,67,75,69,68,32,97,115,112,101,99,116,32,114,97,116,105,111,32,116,111,32,37,103,58,49,46,48,10,0,0,0,0,0,0,85,110,114,101,99,111,103,105,110,105,122,101,100,32,111,98,106,101,99,116,32,116,121,112,101,0,0,0,0,0,0,0,32,116,111,112,0,0,0,0,99,103,95,116,105,109,101,115,0,0,0,0,0,0,0,0,108,102,32,116,111,107,101,110,115,0,0,0,0,0,0,0,96,98,117,105,108,116,105,110,45,116,111,103,103,108,101,45,118,101,114,98,111,115,101,96,0,0,0,0,0,0,0,0,99,103,95,116,36,105,109,101,115,0,0,0,0,0,0,0,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,115,117,98,115,116,114,105,110,103,32,114,97,110,103,101,32,115,112,101,99,105,102,105,101,114,115,32,109,117,115,116,32,104,97,118,101,32,105,110,116,101,103,101,114,32,118,97,108,117,101,115,0,0,0,0,0,115,116,105,99,107,0,0,0,100,102,95,110,111,95,117,115,101,95,115,112,101,99,115,32,61,61,32,48,32,124,124,32,111,117,116,112,117,116,32,61,61,32,100,102,95,110,111,95,117,115,101,95,115,112,101,99,115,32,124,124,32,111,117,116,112,117,116,32,61,61,32,109,97,120,0,0,0,0,0,0,115,36,116,105,99,107,0,0,117,110,105,118,101,114,115,0,117,36,110,105,118,101,114,115,0,0,0,0,0,0,0,0,53,44,37,100,44,54,44,37,100,44,55,44,37,100,59,83,83,59,10,0,0,0,0,0,51,44,37,102,44,0,0,0,104,112,50,54,50,51,65,0,52,44,37,102,44,0,0,0,110,111,120,50,116,105,36,99,115,0,0,0,0,0,0,0,83,68,49,44,37,100,44,50,44,37,100,44,0,0,0,0,9,78,111,32,97,116,116,101,109,112,116,32,116,111,32,99,111,110,116,114,111,108,32,97,115,112,101,99,116,32,114,97,116,105,111,10,0,0,0,0,85,110,114,101,99,111,103,110,105,122,101,100,32,112,111,108,121,103,111,110,32,115,121,110,116,97,120,0,0,0,0,0,36,0,0,0,0,0,0,0,115,101,116,32,115,105,122,101,32,115,113,117,97,114,101,0,37,100,32,37,115,32,91,37,49,100,44,37,49,100,93,0,99,111,117,114,0,0,0,0,105,110,116,101,114,110,97,108,32,101,114,114,111,114,58,32,117,110,107,110,111,119,110,32,99,111,108,117,109,110,32,116,121,112,101,0,0,0,0,0,37,37,46,37,100,102,0,0,37,115,37,48,50,100,0,0,64,100,111,99,117,109,101,110,116,40,108,97,110,103,117,97,103,101,32,105,109,112,114,101,115,115,44,32,112,97,112,101,114,32,97,52,41,0,0,0,99,111,110,118,101,114,116,101,100,32,108,97,98,101,108,32,115,116,114,105,110,103,0,0,63,36,0,0,0,0,0,0,104,36,101,108,112,0,0,0,70,73,71,32,103,114,97,112,104,105,99,115,32,108,97,110,103,117,97,103,101,32,102,111,114,32,88,70,73,71,32,103,114,97,112,104,105,99,115,32,101,100,105,116,111,114,0,0,112,36,111,108,121,108,105,110,101,0,0,0,0,0,0,0,120,50,116,105,36,99,115,0,118,36,101,99,116,111,114,115,0,0,0,0,0,0,0,0,9,84,114,121,32,116,111,32,115,101,116,32,97,115,112,101,99,116,32,114,97,116,105,111,32,116,111,32,37,103,58,49,46,48,10,0,0,0,0,0,80,111,108,121,103,111,110,32,105,115,32,110,111,116,32,99,108,111,115,101,100,32,45,32,97,100,100,105,110,103,32,101,120,116,114,97,32,118,101,114,116,101,120,10,0,0,0,0,118,101,99,116,111,114,115,0,115,101,116,32,115,105,122,101,32,110,111,115,113,117,97,114,101,0,0,0,0,0,0,0,112,111,108,121,108,105,110,101,0,0,0,0,0,0,0,0,99,111,108,111,117,114,0,0,113,117,111,116,101,0,0,0,85,115,97,103,101,58,32,115,101,116,32,116,101,114,109,105,110,97,108,32,109,105,102,32,91,111,112,116,105,111,110,115,93,10,9,111,112,116,105,111,110,115,58,10,9,9,99,111,108,111,117,114,32,47,32,32,32,32,32,32,32,32,68,114,97,119,32,112,114,105,109,105,116,105,118,101,115,32,119,105,116,104,32,108,105,110,101,32,116,121,112,101,115,32,62,61,32,48,32,105,110,32,99,111,108,111,117,114,32,40,115,101,112,46,32,50,45,55,41,10,9,9,109,111,110,111,99,104,114,111,109,101,32,32,32,32,32,32,68,114,97,119,32,112,114,105,109,105,116,105,118,101,115,32,105,110,32,98,108,97,99,107,32,40,115,101,112,46,32,48,41,10,10,9,9,112,111,108,121,108,105,110,101,32,47,32,32,32,32,32,32,68,114,97,119,32,108,105,110,101,115,32,97,115,32,99,111,110,116,105,110,117,111,117,115,32,99,117,114,118,101,115,10,9,9,118,101,99,116,111,114,115,32,32,32,32,32,32,32,32,32,68,114,97,119,32,108,105,110,101,115,32,97,115,32,99,111,108,108,101,99,116,105,111,110,115,32,111,102,32,118,101,99,116,111,114,115,10,10,9,9,104,101,108,112,32,47,32,63,32,32,32,32,32,32,32,32,80,114,105,110,116,32,115,104,111,114,116,32,117,115,97,103,101,32,100,101,115,99,114,105,112,116,105,111,110,32,111,110,32,115,116,100,101,114,114,10,0,0,0,0,0,0,0,78,117,109,98,101,114,32,111,102,32,112,105,120,101,108,115,32,99,97,110,110,111,116,32,98,101,32,102,97,99,116,111,114,101,100,32,105,110,116,111,32,105,110,116,101,103,101,114,115,32,109,97,116,99,104,105,110,103,32,103,114,105,100,46,32,78,32,61,32,37,100,32,32,75,32,61,32,37,100,0,67,101,110,116,101,114,95,50,0,0,0,0,0,0,0,0,60,77,73,70,70,105,108,101,32,51,46,48,48,62,32,35,32,71,101,110,101,114,97,116,101,100,32,98,121,32,103,110,117,112,108,111,116,32,118,101,114,115,105,111,110,32,37,115,32,112,97,116,99,104,108,101,118,101,108,32,37,115,59,32,105,100,101,110,116,105,102,105,101,115,32,116,104,105,115,32,97,115,32,97,32,77,73,70,32,102,105,108,101,10,35,10,35,32,115,104,111,119,32,98,111,114,100,101,114,115,10,60,68,111,99,117,109,101,110,116,10,60,68,66,111,114,100,101,114,115,79,110,32,89,101,115,62,10,62,10,35,32,83,101,116,32,97,32,100,101,102,97,117,108,116,32,112,101,110,32,112,97,116,116,101,114,110,44,32,112,101,110,32,119,105,100,116,104,44,32,117,110,105,116,32,97,110,100,32,102,111,110,116,32,102,111,114,32,115,117,98,115,101,113,117,101,110,116,32,111,98,106,101,99,116,115,10,60,80,101,110,32,48,62,10,60,70,105,108,108,32,49,53,62,10,60,80,101,110,87,105,100,116,104,32,48,46,53,32,112,116,62,10,60,83,101,112,97,114,97,116,105,111,110,32,48,62,10,60,85,110,105,116,115,32,85,99,109,62,10,60,70,111,110,116,67,97,116,97,108,111,103,10,9,60,70,111,110,116,32,60,70,84,97,103,32,96,37,115,39,62,60,70,70,97,109,105,108,121,32,96,84,105,109,101,115,39,62,60,70,83,105,122,101,32,37,100,62,60,70,80,108,97,105,110,32,89,101,115,62,62,10,9,60,70,111,110,116,32,60,70,84,97,103,32,96,37,115,39,62,60,70,70,97,109,105,108,121,32,96,90,97,112,102,68,105,110,103,98,97,116,115,39,62,60,70,83,105,122,101,32,55,46,48,32,112,116,62,60,70,80,108,97,105,110,32,89,101,115,62,62,10,9,60,70,111,110,116,32,60,70,84,97,103,32,96,37,115,39,62,60,70,70,97,109,105,108,121,32,96,83,121,109,98,111,108,39,62,60,70,83,105,122,101,32,53,46,48,32,112,116,62,60,70,80,108,97,105,110,32,89,101,115,62,62,10,62,10,35,10,0,0,0,0,0,0,35,10,35,32,69,110,100,32,111,102,32,77,73,70,70,105,108,101,10,0,0,0,0,0,62,10,35,32,69,110,100,32,111,102,32,70,114,97,109,101,32,110,117,109,98,101,114,32,37,100,10,35,10,0,0,0,37,115,95,37,115,95,37,115,0,0,0,0,0,0,0,0,9,60,71,114,111,117,112,10,9,9,60,73,68,32,37,100,62,10,9,62,10,0,0,0,102,105,103,0,0,0,0,0,9,35,10,9,35,32,71,114,111,117,112,32,116,104,101,32,116,104,101,32,111,98,106,101,99,116,115,32,105,110,32,103,114,111,117,112,115,32,116,111,32,109,97,107,101,32,116,104,101,32,99,104,97,114,116,32,101,97,115,105,101,114,32,116,111,32,109,97,110,105,112,117,108,97,116,101,10,9,35,32,97,102,116,101,114,32,105,116,39,115,32,105,109,112,111,114,116,101,100,32,105,110,116,111,32,70,114,97,109,101,77,97,107,101,114,46,10,0,0,0,110,111,120,116,105,36,99,115,0,0,0,0,0,0,0,0,35,10,35,32,70,114,97,109,101,32,110,117,109,98,101,114,32,37,100,32,119,105,116,104,32,112,108,111,116,32,111,102,32,103,114,97,112,104,105,99,115,10,60,70,114,97,109,101,10,9,60,80,101,110,32,49,53,62,10,9,60,70,105,108,108,32,49,53,62,10,9,60,80,101,110,87,105,100,116,104,32,32,48,46,53,32,112,116,62,10,9,60,83,101,112,97,114,97,116,105,111,110,32,48,62,10,9,60,66,82,101,99,116,32,50,46,48,48,48,32,37,46,51,102,32,37,46,51,102,32,37,46,51,102,62,10,9,60,78,83,79,102,102,115,101,116,32,32,48,46,48,48,48,62,10,9,60,66,76,79,102,102,115,101,116,32,32,48,46,48,48,48,62,10,0,0,9,115,105,122,101,32,105,115,32,115,99,97,108,101,100,32,98,121,32,37,103,44,37,103,10,0,0,0,0,0,0,0,112,111,108,121,103,111,110,32,118,101,114,116,101,120,0,0,77,73,70,32,100,114,105,118,101,114,0,0,0,0,0,0,115,101,116,32,115,105,122,101,32,114,97,116,105,111,32,45,49,0,0,0,0,0,0,0,32,60,80,101,110,32,37,100,62,32,0,0,0,0,0,0,32,60,70,111,110,116,32,60,70,83,101,112,97,114,97,116,105,111,110,32,37,100,62,62,32,0,0,0,0,0,0,0,76,97,115,116,32,112,111,105,110,116,32,105,110,32,116,104,101,32,98,105,110,97,114,121,32,102,105,108,101,32,100,105,100,32,110,111,116,32,109,97,116,99,104,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,96,117,115,105,110,103,96,32,99,111,108,117,109,110,115,0,0,0,0,0,0,0,32,60,83,101,112,97,114,97,116,105,111,110,32,37,100,62,32,0,0,0,0,0,0,0,32,60,80,101,110,87,105,100,116,104,32,48,46,49,32,112,116,62,32,0,0,0,0,0,32,60,70,111,110,116,32,60,70,83,101,112,97,114,97,116,105,111,110,32,48,62,62,32,0,0,0,0,0,0,0,0,32,60,80,101,110,87,105,100,116,104,32,49,46,48,32,112,116,62,32,0,0,0,0,0,71,80,86,65,76,95,68,65,84,65,0,0,0,0,0,0,120,94,52,0,0,0,0,0,32,60,83,101,112,97,114,97,116,105,111,110,32,48,62,32,0,0,0,0,0,0,0,0,69,110,104,97,110,99,101,100,32,77,101,116,97,102,105,108,101,32,102,111,114,109,97,116,0,0,0,0,0,0,0,0,9,9,60,84,76,79,114,105,103,105,110,32,32,37,46,51,102,32,37,46,51,102,62,32,37,115,32,60,65,110,103,108,101,32,37,100,62,32,60,83,116,114,105,110,103,32,96,37,115,39,62,10,9,62,10,0,120,116,105,36,99,115,0,0,9,60,84,101,120,116,76,105,110,101,32,60,71,114,111,117,112,73,68,32,37,100,62,32,37,115,32,37,115,32,37,115,32,37,115,10,0,0,0,0,9,111,114,105,103,105,110,32,105,115,32,115,101,116,32,116,111,32,37,103,44,37,103,10,0,0,0,0,0,0,0,0,69,120,112,101,99,116,105,110,103,32,97,114,99,32,91,60,98,101,103,105,110,62,58,60,101,110,100,62,93,0,0,0,97,116,32,0,0,0,0,0,32,60,84,76,65,108,105,103,110,109,101,110,116,32,82,105,103,104,116,62,32,0,0,0,96,98,117,105,108,116,105,110,45,116,111,103,103,108,101,45,114,97,116,105,111,96,0,0,32,60,84,76,65,108,105,103,110,109,101,110,116,32,67,101,110,116,101,114,62,32,0,0,45,86,0,0,0,0,0,0,32,60,84,76,65,108,105,103,110,109,101,110,116,32,76,101,102,116,62,32,0,0,0,0,110,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,99,114,101,97,116,101,32,118,101,99,116,111,114,0,0,0,0,0,0,9,60,80,111,108,121,76,105,110,101,32,60,71,114,111,117,112,73,68,32,37,100,62,32,37,115,32,37,115,32,37,115,32,60,70,105,108,108,32,49,53,62,10,0,0,0,0,0,9,9,60,70,111,110,116,10,9,9,9,60,70,84,97,103,32,96,37,115,39,62,10,9,9,62,10,0,0,0,0,0,9,62,10,0,0,0,0,0,9,9,60,84,76,79,114,105,103,105,110,32,32,37,46,51,102,32,37,46,51,102,62,32,37,115,32,60,83,116,114,105,110,103,32,96,37,99,39,62,10,0,0,0,0,0,0,0,76,79,71,0,0,0,0,0,9,60,84,101,120,116,76,105,110,101,32,60,71,114,111,117,112,73,68,32,37,100,62,32,37,115,10,0,0,0,0,0,101,109,102,0,0,0,0,0,9,9,60,83,104,97,112,101,82,101,99,116,32,37,46,51,102,32,37,46,51,102,32,37,46,51,102,32,37,46,51,102,62,10,0,0,0,0,0,0,99,98,108,36,97,98,101,108,0,0,0,0,0,0,0,0,9,60,82,101,99,116,97,110,103,108,101,32,60,71,114,111,117,112,73,68,32,37,100,62,32,37,115,10,0,0,0,0,9,116,101,114,109,105,110,97,108,32,116,121,112,101,32,105,115,32,117,110,107,110,111,119,110,10,0,0,0,0,0,0,58,0,0,0,0,0,0,0,114,109,97,114,103,105,110,0,10,9,62,10,0,0,0,0,110,101,120,116,32,122,111,111,109,46,10,0,0,0,0,0,60,80,111,105,110,116,32,32,37,46,51,102,32,37,46,51,102,62,32,0,0,0,0,0,9,9,60,78,117,109,80,111,105,110,116,115,32,37,100,62,32,0,0,0,0,0,0,0,103,112,98,105,110,97,114,121,32,109,97,116,114,105,120,32,114,111,119,0,0,0,0,0,9,9,60,70,105,108,108,32,37,100,62,10,0,0,0,0,9,60,80,111,108,121,103,111,110,32,60,71,114,111,117,112,73,68,32,37,100,62,10,0,110,111,98,97,99,107,103,36,114,111,117,110,100,0,0,0,110,111,97,100,111,98,101,36,103,108,121,112,104,110,97,109,101,115,0,0,0,0,0,0,77,65,88,0,0,0,0,0,97,100,111,98,101,36,103,108,121,112,104,110,97,109,101,115,0,0,0,0,0,0,0,0,100,120,102,45,102,105,108,101,32,102,111,114,32,65,117,116,111,67,97,100,32,40,100,101,102,97,117,108,116,32,115,105,122,101,32,49,50,48,120,56,48,41,0,0,0,0,0,0,110,101,119,36,115,116,121,108,101,0,0,0,0,0,0,0,122,108,36,97,98,101,108,0,111,108,100,36,115,116,121,108,101,0,0,0,0,0,0,0,32,32,32,116,101,114,109,105,110,97,108,32,116,121,112,101,32,105,115,32,37,115,32,37,115,10,0,0,0,0,0,0,65,110,103,108,101,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,0,0,0,0,108,109,97,114,103,105,110,0,110,111,97,36,117,120,102,105,108,101,0,0,0,0,0,0,96,98,117,105,108,116,105,110,45,122,111,111,109,45,110,101,120,116,96,32,103,111,32,116,111,32,110,101,120,116,32,122,111,111,109,32,105,110,32,116,104,101,32,122,111,111,109,32,115,116,97,99,107,0,0,0,97,36,117,120,102,105,108,101,0,0,0,0,0,0,0,0,110,36,111,114,111,116,97,116,101,0,0,0,0,0,0,0,66,105,110,97,114,121,32,100,97,116,97,32,116,121,112,101,32,117,110,107,110,111,119,110,0,0,0,0,0,0,0,0,112,97,108,102,36,117,110,99,112,97,114,97,109,0,0,0,110,111,102,111,110,116,102,36,105,108,101,115,0,0,0,0,9,102,111,110,116,112,97,116,104,32,105,115,32,0,0,0,102,111,110,116,102,36,105,108,101,0,0,0,0,0,0,0,32,107,77,71,84,80,69,90,89,0,0,0,0,0,0,0,114,111,117,36,110,100,101,100,0,0,0,0,0,0,0,0,10,9,100,117,109,109,121,32,118,97,114,105,97,98,108,101,32,105,115,32,120,32,102,111,114,32,99,117,114,118,101,115,44,32,120,47,121,32,102,111,114,32,115,117,114,102,97,99,101,115,10,0,0,0,0,0,46,37,48,42,100,0,0,0,77,73,78,0,0,0,0,0,100,101,102,97,117,108,116,112,36,108,101,120,0,0,0,0,100,120,102,0,0,0,0,0,100,117,36,112,108,101,120,0,121,50,108,36,97,98,101,108,0,0,0,0,0,0,0,0,115,105,36,109,112,108,101,120,0,0,0,0,0,0,0,0])
+.concat([97,114,99,0,0,0,0,0,98,109,97,114,103,105,110,0,99,111,108,111,117,114,116,36,101,120,116,0,0,0,0,0,112,114,101,118,105,111,117,115,32,122,111,111,109,46,10,0,99,111,108,111,114,116,36,101,120,116,0,0,0,0,0,0,98,36,108,97,99,107,116,101,120,116,0,0,0,0,0,0,67,111,117,108,100,110,39,116,32,115,108,117,114,112,32,37,108,100,32,98,121,116,101,115,32,40,114,101,116,117,114,110,32,119,97,115,32,37,122,100,41,10,0,0,0,0,0,0,100,101,102,36,97,117,108,116,0,0,0,0,0,0,0,0,109,36,111,110,111,99,104,114,111,109,101,0,0,0,0,0,116,104,105,115,0,0,0,0,120,111,114,0,0,0,0,0,101,112,36,115,102,0,0,0,32,102,111,110,116,115,99,97,108,101,32,37,51,46,49,102,32,0,0,0,0,0,0,0,37,103,32,0,0,0,0,0,71,80,86,65,76,0,0,0,34,37,115,34,32,37,103,32,0,0,0,0,0,0,0,0,97,115,99,105,105,32,97,114,116,32,102,111,114,32,97,110,121,116,104,105,110,103,32,116,104,97,116,32,112,114,105,110,116,115,32,116,101,120,116,0,34,37,115,34,32,37,103,37,115,32,0,0,0,0,0,0,121,108,36,97,98,101,108,0,100,102,95,114,101,97,100,98,105,110,97,114,121,32,115,108,117,114,112,101,114,0,0,0,112,97,36,117,115,101,0,0,32,37,115,97,100,111,98,101,103,108,121,112,104,110,97,109,101,115,32,92,10,32,32,32,0,0,0,0,0,0,0,0,114,97,100,105,117,115,0,0,111,117,116,36,112,117,116,0,116,109,97,114,103,105,110,0,110,111,104,101,97,100,101,114,32,0,0,0,0,0,0,0,96,98,117,105,108,116,105,110,45,122,111,111,109,45,112,114,101,118,105,111,117,115,96,32,103,111,32,116,111,32,112,114,101,118,105,111,117,115,32,122,111,111,109,32,105,110,32,116,104,101,32,122,111,111,109,32,115,116,97,99,107,0,0,0,104,101,97,100,101,114,32,34,37,115,34,32,0,0,0,0,110,111,97,117,120,102,105,108,101,0,0,0,0,0,0,0,97,117,120,102,105,108,101,0,37,115,32,37,115,32,0,0,32,32,32,112,97,108,102,117,110,99,112,97,114,97,109,32,37,100,44,37,103,32,92,10,32,32,32,0,0,0,0,0,45,66,65,67,75,87,65,82,68,83,95,67,79,77,80,65,84,73,66,73,76,73,84,89,32,32,0,0,0,0,0,0,32,32,32,110,111,98,97,99,107,103,114,111,117,110,100,32,92,10,0,0,0,0,0,0,71,80,86,65,76,95,84,69,82,77,95,89,83,73,90,69,0,0,0,0,0,0,0,0,32,32,32,98,97,99,107,103,114,111,117,110,100,32,34,35,37,48,50,120,37,48,50,120,37,48,50,120,34,32,92,10,0,0,0,0,0,0,0,0,100,117,109,98,0,0,0,0,110,111,99,108,105,112,0,0,120,50,108,36,97,98,101,108,0,0,0,0,0,0,0,0,99,108,105,112,0,0,0,0,116,105,99,115,32,97,114,101,32,105,110,32,37,115,32,111,102,32,112,108,111,116,10,0,99,101,110,36,116,101,114,0,111,117,116,115,105,100,101,0,99,111,108,111,114,116,101,120,116,0,0,0,0,0,0,0,98,108,97,99,107,116,101,120,116,0,0,0,0,0,0,0,108,101,118,101,108,100,101,102,97,117,108,116,0,0,0,0,83,99,97,110,32,115,105,122,101,32,111,102,32,109,97,116,114,105,120,32,105,115,32,122,101,114,111,0,0,0,0,0,115,101,116,32,97,117,116,111,115,99,97,108,101,32,37,115,102,105,120,109,105,110,10,0,108,101,118,101,108,49,0,0,84,104,105,115,32,112,108,111,116,32,115,116,121,108,101,32,105,115,32,111,110,108,121,32,102,111,114,32,100,97,116,97,102,105,108,101,115,32,44,32,114,101,118,101,114,116,105,110,103,32,116,111,32,34,112,111,105,110,116,115,34,0,0,0,32,32,32,37,115,32,37,115,32,37,115,32,92,10,32,32,32,37,115,32,100,97,115,104,108,101,110,103,116,104,32,37,46,49,102,32,108,105,110,101,119,105,100,116,104,32,37,46,49,102,32,37,115,32,37,115,32,92,10,0,0,0,0,0,32,97,117,120,102,105,108,101,0,0,0,0,0,0,0,0,115,121,110,116,97,120,58,32,32,103,110,117,112,108,111,116,32,45,101,32,34,99,111,109,109,97,110,100,115,34,10,0,110,111,114,111,116,97,116,101,0,0,0,0,0,0,0,0,71,80,86,65,76,95,84,69,82,77,95,88,83,73,90,69,0,0,0,0,0,0,0,0,114,111,116,97,116,101,0,0,114,101,102,114,101,115,104,32,110,111,116,32,112,111,115,115,105,98,108,101,32,97,110,100,32,114,101,112,108,111,116,32,105,115,32,100,105,115,97,98,108,101,100,0,0,0,0,0,69,80,83,32,102,111,114,109,97,116,32,102,111,114,32,67,111,114,101,108,68,82,65,87,0,0,0,0,0,0,0,0,100,101,102,97,117,108,116,112,108,101,120,0,0,0,0,0,120,108,36,97,98,101,108,0,67,108,101,97,114,0,0,0,115,105,109,112,108,101,120,0,9,120,121,112,108,97,110,101,32,116,105,99,115,108,101,118,101,108,32,105,115,32,37,103,10,0,0,0,0,0,0,0,69,120,112,101,99,116,105,110,103,32,116,111,32,111,114,32,114,116,111,0,0,0,0,0,105,110,115,105,100,101,0,0,100,117,112,108,101,120,0,0,108,111,97,100,47,101,118,97,108,32,110,101,115,116,101,100,32,116,111,111,32,100,101,101,112,108,121,0,0,0,0,0,59,32,115,101,116,32,120,50,114,91,37,32,35,103,58,37,32,35,103,93,59,32,115,101,116,32,121,50,114,91,37,32,35,103,58,37,32,35,103,93,0,0,0,0,0,0,0,0,110,111,101,110,104,97,110,99,101,100,0,0,0,0,0,0,105,110,116,101,114,110,97,108,32,101,114,114,111,114,32,58,32,110,111,110,45,83,84,82,73,78,71,32,97,114,103,117,109,101,110,116,32,116,111,32,115,116,114,115,116,114,116,0,37,115,32,37,115,32,37,115,32,92,10,0,0,0,0,0,100,102,95,110,111,95,98,105,110,95,99,111,108,115,0,0,32,102,111,110,116,102,105,108,101,32,34,37,115,34,0,0,112,115,95,102,111,110,116,102,105,108,101,95,99,104,97,114,0,0,0,0,0,0,0,0,37,115,44,37,103,0,0,0,111,102,32,102,111,110,116,32,110,97,109,101,0,0,0,0,71,80,86,65,76,95,84,69,82,77,95,89,77,65,88,0,116,101,114,109,105,110,97,108,32,37,115,32,100,111,101,115,32,110,111,116,32,97,108,108,111,119,32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,37,115,0,0,0,0,0,99,111,114,101,108,0,0,0,73,32,119,105,108,108,32,116,114,121,32,116,111,32,102,105,120,32,105,116,32,98,117,116,32,116,104,105,115,32,109,97,121,32,110,111,116,32,119,111,114,107,46,0,0,0,0,0,99,98,100,97,36,116,97,0,73,108,108,101,103,97,108,32,99,104,97,114,97,99,116,101,114,115,32,105,110,32,80,111,115,116,83,99,114,105,112,116,32,102,111,110,116,32,110,97,109,101,46,0,0,0,0,0,9,120,121,112,108,97,110,101,32,105,110,116,101,114,99,101,112,116,115,32,122,32,97,120,105,115,32,97,116,32,37,103,10,0,0,0,0,0,0,0,114,101,108,97,116,105,118,101,32,99,111,111,114,100,105,110,97,116,101,115,32,109,117,115,116,32,109,97,116,99,104,32,105,110,32,116,121,112,101,0,115,101,116,32,107,101,121,32,0,0,0,0,0,0,0,0,40,41,91,93,123,125,124,32,0,0,0,0,0,0,0,0,115,101,116,32,120,114,91,37,46,49,50,103,58,37,46,49,50,103,93,59,32,115,101,116,32,121,114,91,37,46,49,50,103,58,37,46,49,50,103,93,0,0,0,0,0,0,0,0,97,108,108,111,119,101,100,32,100,101,118,105,97,116,105,111,110,32,109,117,115,116,32,98,101,32,60,32,49,0,0,0,67,97,110,39,116,32,100,101,108,101,116,101,32,70,111,110,116,32,102,105,108,101,110,97,109,101,32,39,37,115,39,0,100,102,95,109,97,120,95,98,105,110,105,110,102,111,95,99,111,108,115,32,62,32,100,102,95,110,111,95,98,105,110,95,99,111,108,115,0,0,0,0,37,32,103,0,0,0,0,0,110,101,119,95,112,115,95,102,111,110,116,102,105,108,101,45,62,102,111,110,116,102,105,108,101,95,110,97,109,101,0,0,110,101,119,95,112,115,95,102,111,110,116,102,105,108,101,0,115,101,116,32,104,105,100,100,101,110,51,100,32,37,115,32,111,102,102,115,101,116,32,37,100,32,116,114,105,97,110,103,108,101,112,97,116,116,101,114,110,32,37,108,100,32,117,110,100,101,102,105,110,101,100,32,37,100,32,37,115,97,108,116,100,105,97,103,111,110,97,108,32,37,115,98,101,110,116,111,118,101,114,10,0,0,0,0,100,101,108,36,101,116,101,0,97,100,100,0,0,0,0,0,71,80,86,65,76,95,84,69,82,77,95,89,77,73,78,0,67,97,110,110,111,116,32,117,115,101,32,97,117,120,32,102,105,108,101,32,111,110,32,115,116,100,111,117,116,46,32,83,119,105,116,99,104,105,110,103,32,111,102,102,32,97,117,120,102,105,108,101,32,111,112,116,105,111,110,46,10,0,0,0,67,111,109,112,117,116,101,114,32,71,114,97,112,104,105,99,115,32,77,101,116,97,102,105,108,101,0,0,0,0,0,0,84,117,114,110,105,110,103,32,111,102,102,32,97,117,120,102,105,108,101,32,111,112,116,105,111,110,10,0,0,0,0,0,122,100,97,36,116,97,0,0,67,97,110,110,111,116,32,109,97,107,101,32,80,111,115,116,83,99,114,105,112,116,32,102,105,108,101,32,110,97,109,101,32,102,114,111,109,32,37,115,10,0,0,0,0,0,0,0,85,110,107,110,111,119,110,32,109,105,110,105,116,105,99,32,116,121,112,101,32,105,110,32,115,104,111,119,95,109,116,105,99,115,40,41,0,0,0,0,114,116,111,0,0,0,0,0,67,97,110,110,111,116,32,111,112,101,110,32,97,117,120,32,102,105,108,101,32,37,115,32,102,111,114,32,111,117,116,112,117,116,46,32,83,119,105,116,99,104,105,110,103,32,111,102,102,32,97,117,120,102,105,108,101,32,111,112,116,105,111,110,46,10,0,0,0,0,0,0,117,110,122,111,111,109,46,10,0,0,0,0,0,0,0,0,112,115,108,97,116,101,120,32,97,117,120,32,102,105,108,101,110,97,109,101,0,0,0,0,109,97,120,32,60,61,32,77,65,88,68,65,84,65,67,79,76,83,0,0,0,0,0,0,73,109,97,103,101,32,103,114,105,100,32,109,117,115,116,32,98,101,32,97,116,32,108,101,97,115,116,32,50,32,120,32,50,46,10,10,0,0,0,0,101,112,115,108,97,116,101,120,32,84,101,88,32,102,105,108,101,110,97,109,101,0,0,0,111,112,101,110,32,111,102,32,112,111,115,116,115,99,105,112,116,32,111,117,116,112,117,116,32,102,105,108,101,32,37,115,32,102,97,105,108,101,100,0,67,101,110,116,101,114,95,49,0,0,0,0,0,0,0,0,46,37,115,0,0,0,0,0,45,105,110,99,46,37,115,0,71,80,86,65,76,95,84,69,82,77,95,88,77,65,88,0,45,45,45,32,114,101,111,112,101,110,32,102,97,105,108,101,100,0,0,0,0,0,0,0,99,103,109,0,0,0,0,0,82,101,115,101,116,116,105,110,103,32,112,114,105,109,97,114,121,32,111,117,116,112,117,116,32,102,105,108,101,32,116,111,32,37,115,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,80,111,115,116,83,99,114,105,112,116,32,111,117,116,112,117,116,32,116,111,32,37,115,0,0,121,50,100,97,36,116,97,0,9,109,105,110,111,114,32,37,115,116,105,99,115,32,97,114,101,32,100,114,97,119,110,32,119,105,116,104,32,37,100,32,115,117,98,105,110,116,101,114,118,97,108,115,32,98,101,116,119,101,101,110,32,109,97,106,111,114,32,120,116,105,99,32,109,97,114,107,115,10,0,0,116,111,0,0,0,0,0,0,115,101,116,32,107,101,121,32,116,105,116,108,101,32,34,37,115,34,0,0,0,0,0,0,103,105,118,101,32,116,104,101,32,116,101,120,32,102,105,108,101,110,97,109,101,32,97,115,32,111,117,116,112,117,116,0,96,98,117,105,108,116,105,110,45,117,110,122,111,111,109,96,0,0,0,0,0,0,0,0,70,111,114,32,101,112,115,108,97,116,101,120,32,115,116,97,110,100,97,108,111,110,101,32,109,111,100,101,44,32,121,111,117,32,104,97,118,101,32,116,111,32,37,115,0,0,0,0,46,69,80,83,0,0,0,0,100,97,116,97,95,102,112,32,33,61,32,78,85,76,76,0,46,101,112,115,0,0,0,0,101,112,115,108,97,116,101,120,32,101,112,115,32,102,105,108,101,110,97,109,101,0,0,0,101,112,115,108,97,116,101,120,32,111,117,116,112,117,116,32,102,105,108,101,32,110,97,109,101,32,109,117,115,116,32,98,101,32,111,102,32,116,104,101,32,102,111,114,109,32,102,105,108,101,110,97,109,101,46,120,120,120,0,0,0,0,0,0,92,112,117,116,40,48,44,48,41,123,92,99,111,108,111,114,98,111,120,123,103,112,66,97,99,107,103,114,111,117,110,100,125,123,92,109,97,107,101,98,111,120,40,37,46,50,102,44,37,46,50,102,41,91,93,123,125,125,125,37,37,10,0,0,71,80,86,65,76,95,84,69,82,77,95,88,77,73,78,0,100,117,112,32,109,117,108,32,100,117,112,32,109,117,108,0,92,100,101,102,105,110,101,99,111,108,111,114,123,103,112,66,97,99,107,103,114,111,117,110,100,125,123,114,103,98,125,123,37,46,51,102,44,32,37,46,51,102,44,32,37,46,51,102,125,37,37,10,0,0,0,0,72,84,77,76,32,67,97,110,118,97,115,32,111,98,106,101,99,116,0,0,0,0,0,0,32,32,92,115,101,116,108,101,110,103,116,104,123,92,117,110,105,116,108,101,110,103,116,104,125,123,37,46,52,102,98,112,125,37,37,10,32,32,92,98,101,103,105,110,123,112,105,99,116,117,114,101,125,40,37,46,50,102,44,37,46,50,102,41,37,37,10,0,0,0,0,0,121,100,97,36,116,97,0,0,32,32,32,32,92,101,108,115,101,10,32,32,32,32,32,32,37,32,103,114,97,121,10,32,32,32,32,32,32,92,100,101,102,92,99,111,108,111,114,114,103,98,35,49,123,92,99,111,108,111,114,123,98,108,97,99,107,125,125,37,10,32,32,32,32,32,32,92,100,101,102,92,99,111,108,111,114,103,114,97,121,35,49,123,92,99,111,108,111,114,91,103,114,97,121,93,123,35,49,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,119,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,123,119,104,105,116,101,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,98,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,123,98,108,97,99,107,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,97,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,123,98,108,97,99,107,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,48,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,123,98,108,97,99,107,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,49,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,123,98,108,97,99,107,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,50,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,123,98,108,97,99,107,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,51,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,123,98,108,97,99,107,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,52,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,123,98,108,97,99,107,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,53,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,123,98,108,97,99,107,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,54,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,123,98,108,97,99,107,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,55,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,123,98,108,97,99,107,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,56,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,123,98,108,97,99,107,125,125,37,10,32,32,32,32,92,102,105,10,32,32,92,102,105,10,0,0,0,9,109,105,110,111,114,32,37,115,116,105,99,115,32,97,114,101,32,99,111,109,112,117,116,101,100,32,97,117,116,111,109,97,116,105,99,97,108,108,121,10,0,0,0,0,0,0,0,102,114,111,109,0,0,0,0,37,115,115,101,116,32,114,97,120,105,115,10,0,0,0,0,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,48,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,91,114,103,98,93,123,49,44,48,44,48,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,49,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,91,114,103,98,93,123,48,44,49,44,48,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,50,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,91,114,103,98,93,123,48,44,48,44,49,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,51,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,91,114,103,98,93,123,49,44,48,44,49,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,52,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,91,114,103,98,93,123,48,44,49,44,49,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,53,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,91,114,103,98,93,123,49,44,49,44,48,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,54,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,91,114,103,98,93,123,48,44,48,44,48,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,55,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,91,114,103,98,93,123,49,44,48,46,51,44,48,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,56,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,91,114,103,98,93,123,48,46,53,44,48,46,53,44,48,46,53,125,125,37,10,0,0,0,0,0,0,0,96,98,117,105,108,116,105,110,45,114,111,116,97,116,101,45,114,105,103,104,116,96,32,111,110,108,121,32,102,111,114,32,115,112,108,111,116,115,59,32,60,115,104,105,102,116,62,32,105,110,99,114,101,97,115,101,115,32,97,109,111,117,110,116,0,0,0,0,0,0,0,0,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,48,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,91,114,103,98,93,123,49,44,48,44,48,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,49,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,91,114,103,98,93,123,48,44,48,44,49,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,50,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,91,114,103,98,93,123,48,44,49,44,49,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,51,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,91,114,103,98,93,123,49,44,48,44,49,125,125,37,10,0,0,0,0,32,32,92,105,102,71,80,98,108,97,99,107,116,101,120,116,10,32,32,32,32,37,32,110,111,32,116,101,120,116,99,111,108,111,114,32,97,116,32,97,108,108,10,32,32,32,32,92,100,101,102,92,99,111,108,111,114,114,103,98,35,49,123,125,37,10,32,32,32,32,92,100,101,102,92,99,111,108,111,114,103,114,97,121,35,49,123,125,37,10,32,32,92,101,108,115,101,10,32,32,32,32,37,32,103,114,97,121,32,111,114,32,99,111,108,111,114,63,10,32,32,32,32,92,105,102,71,80,99,111,108,111,114,10,32,32,32,32,32,32,92,100,101,102,92,99,111,108,111,114,114,103,98,35,49,123,92,99,111,108,111,114,91,114,103,98,93,123,35,49,125,125,37,10,32,32,32,32,32,32,92,100,101,102,92,99,111,108,111,114,103,114,97,121,35,49,123,92,99,111,108,111,114,91,103,114,97,121,93,123,35,49,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,119,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,123,119,104,105,116,101,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,98,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,123,98,108,97,99,107,125,125,37,10,32,32,32,32,32,32,92,101,120,112,97,110,100,97,102,116,101,114,92,100,101,102,92,99,115,110,97,109,101,32,76,84,97,92,101,110,100,99,115,110,97,109,101,123,92,99,111,108,111,114,123,98,108,97,99,107,125,125,37,10,0,0,0,0,9,32,32,37,115,0,0,0,32,32,92,109,97,107,101,97,116,108,101,116,116,101,114,10,32,32,92,112,114,111,118,105,100,101,99,111,109,109,97,110,100,92,99,111,108,111,114,91,50,93,91,93,123,37,37,10,32,32,32,32,92,71,101,110,101,114,105,99,69,114,114,111,114,123,40,103,110,117,112,108,111,116,41,32,92,115,112,97,99,101,92,115,112,97,99,101,92,115,112,97,99,101,92,64,115,112,97,99,101,115,125,123,37,37,10,32,32,32,32,32,32,80,97,99,107,97,103,101,32,99,111,108,111,114,32,110,111,116,32,108,111,97,100,101,100,32,105,110,32,99,111,110,106,117,110,99,116,105,111,110,32,119,105,116,104,10,32,32,32,32,32,32,116,101,114,109,105,110,97,108,32,111,112,116,105,111,110,32,96,99,111,108,111,117,114,116,101,120,116,39,37,37,10,32,32,32,32,125,123,83,101,101,32,116,104,101,32,103,110,117,112,108,111,116,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,111,114,32,101,120,112,108,97,110,97,116,105,111,110,46,37,37,10,32,32,32,32,125,123,69,105,116,104,101,114,32,117,115,101,32,39,98,108,97,99,107,116,101,120,116,39,32,105,110,32,103,110,117,112,108,111,116,32,111,114,32,108,111,97,100,32,116,104,101,32,112,97,99,107,97,103,101,10,32,32,32,32,32,32,99,111,108,111,114,46,115,116,121,32,105,110,32,76,97,84,101,88,46,125,37,37,10,32,32,32,32,92,114,101,110,101,119,99,111,109,109,97,110,100,92,99,111,108,111,114,91,50,93,91,93,123,125,37,37,10,32,32,125,37,37,10,32,32,92,112,114,111,118,105,100,101,99,111,109,109,97,110,100,92,105,110,99,108,117,100,101,103,114,97,112,104,105,99,115,91,50,93,91,93,123,37,37,10,32,32,32,32,92,71,101,110,101,114,105,99,69,114,114,111,114,123,40,103,110,117,112,108,111,116,41,32,92,115,112,97,99,101,92,115,112,97,99,101,92,115,112,97,99,101,92,64,115,112,97,99,101,115,125,123,37,37,10,32,32,32,32,32,32,80,97,99,107,97,103,101,32,103,114,97,112,104,105,99,120,32,111,114,32,103,114,97,112,104,105,99,115,32,110,111,116,32,108,111,97,100,101,100,37,37,10,32,32,32,32,125,123,83,101,101,32,116,104,101,32,103,110,117,112,108,111,116,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,111,114,32,101,120,112,108,97,110,97,116,105,111,110,46,37,37,10,32,32,32,32,125,123,84,104,101,32,103,110,117,112,108,111,116,32,101,112,115,108,97,116,101,120,32,116,101,114,109,105,110,97,108,32,110,101,101,100,115,32,103,114,97,112,104,105,99,120,46,115,116,121,32,111,114,32,103,114,97,112,104,105,99,115,46,115,116,121,46,125,37,37,10,32,32,32,32,92,114,101,110,101,119,99,111,109,109,97,110,100,92,105,110,99,108,117,100,101,103,114,97,112,104,105,99,115,91,50,93,91,93,123,125,37,37,10,32,32,125,37,37,10,32,32,92,112,114,111,118,105,100,101,99,111,109,109,97,110,100,92,114,111,116,97,116,101,98,111,120,91,50,93,123,35,50,125,37,37,10,32,32,92,64,105,102,117,110,100,101,102,105,110,101,100,123,105,102,71,80,99,111,108,111,114,125,123,37,37,10,32,32,32,32,92,110,101,119,105,102,92,105,102,71,80,99,111,108,111,114,10,32,32,32,32,92,71,80,99,111,108,111,114,37,115,10,32,32,125,123,125,37,37,10,32,32,92,64,105,102,117,110,100,101,102,105,110,101,100,123,105,102,71,80,98,108,97,99,107,116,101,120,116,125,123,37,37,10,32,32,32,32,92,110,101,119,105,102,92,105,102,71,80,98,108,97,99,107,116,101,120,116,10,32,32,32,32,92,71,80,98,108,97,99,107,116,101,120,116,37,115,10,32,32,125,123,125,37,37,10,32,32,37,37,32,100,101,102,105,110,101,32,97,32,92,103,64,97,100,100,116,111,64,109,97,99,114,111,32,119,105,116,104,111,117,116,32,64,32,105,110,32,116,104,101,32,110,97,109,101,58,10,32,32,92,108,101,116,92,103,112,108,103,97,100,100,116,111,109,97,99,114,111,92,103,64,97,100,100,116,111,64,109,97,99,114,111,10,32,32,37,37,32,100,101,102,105,110,101,32,101,109,112,116,121,32,116,101,109,112,108,97,116,101,115,32,102,111,114,32,97,108,108,32,99,111,109,109,97,110,100,115,32,116,97,107,105,110,103,32,116,101,120,116,58,10,32,32,92,103,100,101,102,92,103,112,108,98,97,99,107,116,101,120,116,123,125,37,37,10,32,32,92,103,100,101,102,92,103,112,108,102,114,111,110,116,116,101,120,116,123,125,37,37,10,32,32,92,109,97,107,101,97,116,111,116,104,101,114,10,0,0,0,0,0,0,0,32,32,92,115,101,108,101,99,116,102,111,110,116,10,0,0,32,32,92,102,111,110,116,115,104,97,112,101,123,37,115,125,37,37,10,0,0,0,0,0,32,32,92,102,111,110,116,115,101,114,105,101,115,123,37,115,125,37,37,10,0,0,0,0,71,80,86,65,76,95,84,69,82,77,95,87,73,78,68,79,87,73,68,0,0,0,0,0,32,32,92,102,111,110,116,102,97,109,105,108,121,123,37,115,125,37,37,10,0,0,0,0,99,97,110,118,97,115,0,0,32,32,37,37,32,69,110,99,111,100,105,110,103,32,105,110,115,105,100,101,32,116,104,101,32,112,108,111,116,46,32,32,73,110,32,116,104,101,32,104,101,97,100,101,114,32,111,102,32,121,111,117,114,32,100,111,99,117,109,101,110,116,44,32,116,104,105,115,32,101,110,99,111,100,105,110,103,10,32,32,37,37,32,115,104,111,117,108,100,32,116,111,32,100,101,102,105,110,101,100,44,32,101,46,103,46,44,32,98,121,32,117,115,105,110,103,10,32,32,37,37,32,92,117,115,101,112,97,99,107,97,103,101,91,37,115,44,60,111,116,104,101,114,32,101,110,99,111,100,105,110,103,115,62,93,123,105,110,112,117,116,101,110,99,125,10,32,32,92,105,110,112,117,116,101,110,99,111,100,105,110,103,123,37,115,125,37,37,10,0,0,0,120,50,100,97,36,116,97,0,92,98,101,103,105,110,103,114,111,117,112,10,0,0,0,0,9,109,105,110,111,114,32,37,115,116,105,99,115,32,97,114,101,32,111,102,102,32,102,111,114,32,108,105,110,101,97,114,32,115,99,97,108,101,115,10,9,109,105,110,111,114,32,37,115,116,105,99,115,32,97,114,101,32,99,111,109,112,117,116,101,100,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,102,111,114,32,108,111,103,32,115,99,97,108,101,115,10,0,0,0,0,0,0,0,0,85,110,107,110,111,119,110,32,111,98,106,101,99,116,32,116,121,112,101,0,0,0,0,0,37,0,0,0,0,0,0,0,96,98,117,105,108,116,105,110,45,114,111,116,97,116,101,45,117,112,96,32,111,110,108,121,32,102,111,114,32,115,112,108,111,116,115,59,32,60,115,104,105,102,116,62,32,105,110,99,114,101,97,115,101,115,32,97,109,111,117,110,116,0,0,0,92,109,97,107,101,97,116,108,101,116,116,101,114,10,37,37,32,83,101,108,101,99,116,32,97,110,32,97,112,112,114,111,112,114,105,97,116,101,32,100,101,102,97,117,108,116,32,100,114,105,118,101,114,32,40,102,114,111,109,32,84,101,88,76,105,118,101,32,103,114,97,112,104,105,99,115,46,99,102,103,41,10,92,98,101,103,105,110,103,114,111,117,112,10,32,32,92,99,104,97,114,100,101,102,92,120,61,48,32,37,37,10,32,32,37,37,32,99,104,101,99,107,32,112,100,102,84,101,88,10,32,32,92,64,105,102,117,110,100,101,102,105,110,101,100,123,112,100,102,111,117,116,112,117,116,125,123,125,123,37,37,10,32,32,32,32,92,105,102,99,97,115,101,92,112,100,102,111,117,116,112,117,116,10,32,32,32,32,92,101,108,115,101,10,32,32,32,32,32,32,92,99,104,97,114,100,101,102,92,120,61,49,32,37,37,10,32,32,32,32,92,102,105,10,32,32,125,37,37,10,32,32,37,37,32,99,104,101,99,107,32,86,84,101,88,10,32,32,92,64,105,102,117,110,100,101,102,105,110,101,100,123,79,112,77,111,100,101,125,123,125,123,37,37,10,32,32,32,32,92,99,104,97,114,100,101,102,92,120,61,50,32,37,37,10,32,32,125,37,37,10,92,101,120,112,97,110,100,97,102,116,101,114,92,101,110,100,103,114,111,117,112,10,92,105,102,99,97,115,101,92,120,10,32,32,37,37,32,100,101,102,97,117,108,116,32,99,97,115,101,10,32,32,92,80,97,115,115,79,112,116,105,111,110,115,84,111,80,97,99,107,97,103,101,123,100,118,105,112,115,125,123,103,101,111,109,101,116,114,121,125,10,92,111,114,10,32,32,37,37,32,112,100,102,84,101,88,32,105,115,32,114,117,110,110,105,110,103,32,105,110,32,112,100,102,32,109,111,100,101,10,32,32,92,80,97,115,115,79,112,116,105,111,110,115,84,111,80,97,99,107,97,103,101,123,112,100,102,116,101,120,125,123,103,101,111,109,101,116,114,121,125,10,92,101,108,115,101,10,32,32,37,37,32,86,84,101,88,32,105,115,32,114,117,110,110,105,110,103,10,32,32,92,80,97,115,115,79,112,116,105,111,110,115,84,111,80,97,99,107,97,103,101,123,118,116,101,120,125,123,103,101,111,109,101,116,114,121,125,10,92,102,105,10,92,109,97,107,101,97,116,111,116,104,101,114,10,37,37,32,83,101,116,32,112,97,112,101,114,115,105,122,101,10,92,117,115,101,112,97,99,107,97,103,101,91,112,97,112,101,114,115,105,122,101,61,123,37,46,50,102,98,112,44,37,46,50,102,98,112,125,44,116,101,120,116,61,123,37,46,50,102,98,112,44,37,46,50,102,98,112,125,93,123,103,101,111,109,101,116,114,121,125,10,37,37,32,78,111,32,112,97,103,101,32,110,117,109,98,101,114,115,32,97,110,100,32,110,111,32,112,97,114,97,103,114,97,112,104,32,105,110,100,101,110,116,97,116,105,111,110,10,92,112,97,103,101,115,116,121,108,101,123,101,109,112,116,121,125,10,92,115,101,116,108,101,110,103,116,104,123,92,112,97,114,105,110,100,101,110,116,125,123,48,98,112,125,37,37,10,37,37,32,76,111,97,100,32,99,111,110,102,105,103,117,114,97,116,105,111,110,32,102,105,108,101,10,92,73,110,112,117,116,73,102,70,105,108,101,69,120,105,115,116,115,123,103,110,117,112,108,111,116,46,99,102,103,125,123,37,37,10,32,32,92,116,121,112,101,111,117,116,123,85,115,105,110,103,32,99,111,110,102,105,103,117,114,97,116,105,111,110,32,102,105,108,101,32,103,110,117,112,108,111,116,46,99,102,103,125,37,37,10,125,123,37,37,10,32,92,116,121,112,101,111,117,116,123,78,111,32,99,111,110,102,105,103,117,114,97,116,105,111,110,32,102,105,108,101,32,103,110,117,112,108,111,116,46,99,102,103,32,102,111,117,110,100,46,125,37,37,10,125,37,37,10,37,115,10,92,98,101,103,105,110,123,100,111,99,117,109,101,110,116,125,10,0,0,0,0,0,0,0,0,92,117,115,101,112,97,99,107,97,103,101,91,37,115,93,123,105,110,112,117,116,101,110,99,125,10,0,0,0,0,0,0,9,84,104,105,115,32,118,101,114,115,105,111,110,32,111,102,32,103,110,117,112,108,111,116,32,117,110,100,101,114,115,116,97,110,100,115,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,98,105,110,97,114,121,32,102,105,108,101,32,116,121,112,101,115,58,10,0,0,37,32,76,111,97,100,32,112,97,99,107,97,103,101,115,10,92,117,115,101,112,97,99,107,97,103,101,123,103,114,97,112,104,105,99,120,125,10,92,117,115,101,112,97,99,107,97,103,101,123,99,111,108,111,114,125,10,0,0,0,0,0,0,0,111,110,108,121,32,54,32,114,97,110,103,101,32,115,112,101,99,115,32,97,114,101,32,112,101,114,109,105,116,116,101,100,0,0,0,0,0,0,0,0,92,114,101,110,101,119,99,111,109,109,97,110,100,42,92,117,112,100,101,102,97,117,108,116,123,37,115,125,37,37,10,0,92,114,101,110,101,119,99,111,109,109,97,110,100,42,92,109,100,100,101,102,97,117,108,116,123,37,115,125,37,37,10,0,92,114,101,110,101,119,99,111,109,109,97,110,100,42,92,114,109,100,101,102,97,117,108,116,123,37,115,125,37,37,10,0,71,80,86,65,76,95,80,87,68,0,0,0,0,0,0,0,92,100,111,99,117,109,101,110,116,99,108,97,115,115,123,109,105,110,105,109,97,108,125,10,37,37,32,83,101,116,32,102,111,110,116,32,115,105,122,101,10,92,109,97,107,101,97,116,108,101,116,116,101,114,10,92,100,101,102,92,64,112,116,115,105,122,101,123,37,100,125,10,92,73,110,112,117,116,73,102,70,105,108,101,69,120,105,115,116,115,123,115,105,122,101,37,100,46,99,108,111,125,123,125,123,37,37,10,32,32,32,92,71,101,110,101,114,105,99,69,114,114,111,114,123,40,103,110,117,112,108,111,116,41,32,92,115,112,97,99,101,92,115,112,97,99,101,92,115,112,97,99,101,92,64,115,112,97,99,101,115,125,123,37,37,10,32,32,32,32,32,32,71,110,117,112,108,111,116,32,69,114,114,111,114,58,32,70,105,108,101,32,96,115,105,122,101,37,100,46,99,108,111,39,32,110,111,116,32,102,111,117,110,100,33,32,67,111,117,108,100,32,110,111,116,32,115,101,116,32,102,111,110,116,32,115,105,122,101,37,37,10,32,32,32,125,123,83,101,101,32,116,104,101,32,103,110,117,112,108,111,116,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,111,114,32,101,120,112,108,97,110,97,116,105,111,110,46,37,37,10,32,32,32,125,123,70,111,114,32,117,115,105,110,103,32,97,32,102,111,110,116,32,115,105,122,101,32,97,32,102,105,108,101,32,96,115,105,122,101,60,102,111,110,116,115,105,122,101,62,46,99,108,111,39,32,104,97,115,32,116,111,32,101,120,105,115,116,46,10,32,32,32,32,32,32,32,32,70,97,108,108,105,110,103,32,98,97,99,107,32,94,94,74,116,111,32,100,101,102,97,117,108,116,32,102,111,110,116,115,105,122,101,32,49,48,112,116,46,125,37,37,10,32,32,92,100,101,102,92,64,112,116,115,105,122,101,123,48,125,10,32,32,92,105,110,112,117,116,123,115,105,122,101,49,48,46,99,108,111,125,37,37,10,125,37,37,10,92,109,97,107,101,97,116,111,116,104,101,114,10,0,0,0,0,88,116,101,114,109,32,84,101,107,116,114,111,110,105,120,32,52,48,49,52,32,77,111,100,101,0,0,0,0,0,0,0,69,80,83,76,65,84,69,88,95,99,111,109,109,111,110,95,105,110,105,116,0,0,0,0,120,100,97,36,116,97,0,0,105,110,118,97,108,105,100,32,105,110,112,117,116,32,101,110,99,111,100,105,110,103,32,117,115,101,100,0,0,0,0,0,9,109,105,110,111,114,32,37,115,116,105,99,115,32,97,114,101,32,111,102,102,10,0,0,108,97,121,101,114,100,101,102,97,117,108,116,0,0,0,0,107,111,105,56,45,117,0,0,96,98,117,105,108,116,105,110,45,114,111,116,97,116,101,45,108,101,102,116,96,32,111,110,108,121,32,102,111,114,32,115,112,108,111,116,115,59,32,60,115,104,105,102,116,62,32,105,110,99,114,101,97,115,101,115,32,97,109,111,117,110,116,0,107,111,105,56,45,114,0,0,99,112,52,51,55,100,101,0,32,45,45,32,112,114,111,99,101,115,115,111,114,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,116,104,105,115,32,115,105,122,101,0,0,0,0,0,0,0,0,108,97,116,105,110,57,0,0,108,97,116,105,110,53,0,0,114,0,0,0,0,0,0,0,108,97,116,105,110,50,0,0,70,111,114,109,97,116,32,99,104,97,114,97,99,116,101,114,32,109,105,115,109,97,116,99,104,58,32,37,37,66,32,105,115,32,111,110,108,121,32,118,97,108,105,100,32,119,105,116,104,32,37,37,98,0,0,0,108,97,116,105,110,49,0,0,121,111,117,32,99,97,110,39,116,32,117,110,115,101,116,32,116,104,101,32,112,97,108,101,116,116,101,46,10,0,0,0,102,105,108,108,105,110,103,32,71,80,86,65,76,95,80,87,68,0,0,0,0,0,0,0,37,37,32,71,78,85,80,76,79,84,58,32,76,97,84,101,88,32,112,105,99,116,117,114,101,32,119,105,116,104,32,80,111,115,116,115,99,114,105,112,116,10,0,0,0,0,0,0,120,116,101,114,109,0,0,0,101,112,115,108,97,116,101,120,32,116,101,114,109,105,110,97,108,32,99,97,110,110,111,116,32,119,114,105,116,101,32,116,111,32,115,116,97,110,100,97,114,100,32,111,117,116,112,117,116,0,0,0,0,0,0,0,120,121,112,36,108,97,110,101,0,0,0,0,0,0,0,0,9,110,111,116,32,114,111,116,97,116,101,100,10,9,0,0,101,120,112,101,99,116,101,100,32,103,97,112,32,118,97,108,117,101,0,0,0,0,0,0,115,101,116,32,103,114,105,100,32,37,115,32,32,0,0,0,32,32,123,92,71,78,85,80,76,79,84,115,112,101,99,105,97,108,123,34,10,0,0,0,99,104,97,110,103,105,110,103,32,118,105,101,119,32,116,111,32,37,102,44,32,37,102,46,10,0,0,0,0,0,0,0,32,32,92,115,112,101,99,105,97,108,123,112,115,102,105,108,101,61,37,115,32,108,108,120,61,48,32,108,108,121,61,48,32,117,114,120,61,37,100,32,117,114,121,61,37,100,32,114,119,105,61,37,100,125,10,0,92,71,78,85,80,76,79,84,112,105,99,116,117,114,101,40,37,100,44,37,100,41,10,0,40,37,100,41,0,0,0,0,117,116,102,56,0,0,0,0,37,37,32,71,78,85,80,76,79,84,58,32,112,108,97,105,110,32,84,101,88,32,119,105,116,104,32,80,111,115,116,115,99,114,105,112,116,10,92,98,101,103,105,110,103,114,111,117,112,10,92,99,97,116,99,111,100,101,96,92,64,61,49,49,92,114,101,108,97,120,10,92,100,101,102,92,71,78,85,80,76,79,84,115,112,101,99,105,97,108,123,37,37,10,32,32,92,100,101,102,92,100,111,35,35,49,123,92,99,97,116,99,111,100,101,96,35,35,49,61,49,50,92,114,101,108,97,120,125,92,100,111,115,112,101,99,105,97,108,115,10,32,32,92,99,97,116,99,111,100,101,96,92,123,61,49,92,99,97,116,99,111,100,101,96,92,125,61,50,92,99,97,116,99,111,100,101,92,37,37,61,49,52,92,114,101,108,97,120,92,115,112,101,99,105,97,108,125,37,37,10,37,37,10,92,101,120,112,97,110,100,97,102,116,101,114,92,105,102,120,92,99,115,110,97,109,101,32,71,78,85,80,76,79,84,112,105,99,116,117,114,101,92,101,110,100,99,115,110,97,109,101,92,114,101,108,97,120,10,32,32,92,99,115,110,97,109,101,32,110,101,119,100,105,109,101,110,92,101,110,100,99,115,110,97,109,101,92,71,78,85,80,76,79,84,117,110,105,116,10,32,32,92,103,100,101,102,92,71,78,85,80,76,79,84,112,105,99,116,117,114,101,40,35,49,44,35,50,41,123,92,118,98,111,120,32,116,111,35,50,92,71,78,85,80,76,79,84,117,110,105,116,92,98,103,114,111,117,112,10,32,32,32,32,92,100,101,102,92,112,117,116,40,35,35,49,44,35,35,50,41,35,35,51,123,92,117,110,115,107,105,112,92,114,97,105,115,101,35,35,50,92,71,78,85,80,76,79,84,117,110,105,116,10,32,32,32,32,32,32,92,104,98,111,120,32,116,111,48,112,116,123,92,107,101,114,110,35,35,49,92,71,78,85,80,76,79,84,117,110,105,116,32,35,35,51,92,104,115,115,125,92,105,103])
+.concat([110,111,114,101,115,112,97,99,101,115,125,37,37,10,32,32,32,32,92,100,101,102,92,108,106,117,115,116,35,35,49,123,92,118,98,111,120,32,116,111,48,112,116,123,92,118,115,115,92,104,98,111,120,32,116,111,48,112,116,123,35,35,49,92,104,115,115,125,92,118,115,115,125,125,37,37,10,32,32,32,32,92,100,101,102,92,99,106,117,115,116,35,35,49,123,92,118,98,111,120,32,116,111,48,112,116,123,92,118,115,115,92,104,98,111,120,32,116,111,48,112,116,123,92,104,115,115,32,35,35,49,92,104,115,115,125,92,118,115,115,125,125,37,37,10,32,32,32,32,92,100,101,102,92,114,106,117,115,116,35,35,49,123,92,118,98,111,120,32,116,111,48,112,116,123,92,118,115,115,92,104,98,111,120,32,116,111,48,112,116,123,92,104,115,115,32,35,35,49,125,92,118,115,115,125,125,37,37,10,32,32,32,32,92,100,101,102,92,115,116,97,99,107,35,35,49,123,92,108,101,116,92,92,61,92,99,114,92,116,97,98,115,107,105,112,61,48,112,116,92,104,97,108,105,103,110,123,92,104,102,105,108,32,35,35,35,35,92,104,102,105,108,92,99,114,32,35,35,49,92,99,114,99,114,125,125,37,37,10,32,32,32,32,92,100,101,102,92,108,115,116,97,99,107,35,35,49,123,92,104,98,111,120,32,116,111,48,112,116,123,92,118,98,111,120,32,116,111,48,112,116,123,92,118,115,115,92,115,116,97,99,107,123,35,35,49,125,125,92,104,115,115,125,125,37,37,10,32,32,32,32,92,100,101,102,92,99,115,116,97,99,107,35,35,49,123,92,104,98,111,120,32,116,111,48,112,116,123,92,104,115,115,92,118,98,111,120,32,116,111,48,112,116,123,92,118,115,115,92,115,116,97,99,107,123,35,35,49,125,125,92,104,115,115,125,125,37,37,10,32,32,32,32,92,100,101,102,92,114,115,116,97,99,107,35,35,49,123,92,104,98,111,120,32,116,111,48,112,116,123,92,118,98,111,120,32,116,111,48,112,116,123,92,115,116,97,99,107,123,35,35,49,125,92,118,115,115,125,92,104,115,115,125,125,37,37,10,32,32,32,32,92,118,115,115,92,104,98,111,120,32,116,111,35,49,92,71,78,85,80,76,79,84,117,110,105,116,92,98,103,114,111,117,112,92,105,103,110,111,114,101,115,112,97,99,101,115,125,37,37,10,32,32,92,103,100,101,102,92,101,110,100,71,78,85,80,76,79,84,112,105,99,116,117,114,101,123,92,104,115,115,92,101,103,114,111,117,112,92,101,103,114,111,117,112,125,37,37,10,92,102,105,10,92,71,78,85,80,76,79,84,117,110,105,116,61,37,46,52,102,98,112,10,0,104,105,115,116,111,103,114,97,109,115,0,0,0,0,0,0,98,111,114,0,0,0,0,0,92,98,101,103,105,110,123,112,105,99,116,117,114,101,125,40,37,100,44,37,100,41,40,48,44,48,41,37,37,10,0,0,37,37,32,71,78,85,80,76,79,84,58,32,76,97,84,101,88,32,112,105,99,116,117,114,101,32,119,105,116,104,32,80,111,115,116,115,99,114,105,112,116,10,92,98,101,103,105,110,103,114,111,117,112,37,37,10,92,109,97,107,101,97,116,108,101,116,116,101,114,37,37,10,92,110,101,119,99,111,109,109,97,110,100,123,92,71,78,85,80,76,79,84,115,112,101,99,105,97,108,125,123,37,37,10,32,32,92,64,115,97,110,105,116,105,122,101,92,99,97,116,99,111,100,101,96,92,37,37,61,49,52,92,114,101,108,97,120,92,115,112,101,99,105,97,108,125,37,37,10,92,115,101,116,108,101,110,103,116,104,123,92,117,110,105,116,108,101,110,103,116,104,125,123,37,46,52,102,98,112,125,37,37,10,0,80,108,111,116,32,102,97,105,108,101,100,33,0,0,0,0,111,114,32,115,101,116,32,116,104,101,32,108,111,97,100,112,97,116,104,32,97,112,112,114,111,112,114,105,97,116,101,108,121,10,0,0,0,0,0,0,86,84,45,108,105,107,101,32,116,101,107,52,48,120,120,32,116,101,114,109,105,110,97,108,32,101,109,117,108,97,116,111,114,0,0,0,0,0,0,0,111,114,32,115,101,116,32,116,104,101,32,101,110,118,105,114,111,110,109,101,110,116,97,108,32,118,97,114,105,97,98,108,101,32,71,78,85,80,76,79,84,95,80,83,95,68,73,82,10,0,0,0,0,0,0,0,118,105,36,101,119,0,0,0,108,36,111,97,100,0,0,0,80,108,101,97,115,101,32,99,111,112,121,32,37,115,32,116,111,32,111,110,101,32,111,102,32,116,104,101,32,97,98,111,118,101,32,100,105,114,101,99,116,111,114,105,101,115,10,0,9,114,111,116,97,116,101,100,32,105,102,32,116,104,101,32,116,101,114,109,105,110,97,108,32,97,108,108,111,119,115,32,105,116,10,9,0,0,0,0,103,97,112,0,0,0,0,0,32,92,10,0,0,0,0,0,67,97,110,39,116,32,102,105,110,100,32,80,111,115,116,83,99,114,105,112,116,32,112,114,111,108,111,103,117,101,32,102,105,108,101,32,37,115,10,0,71,80,86,65,76,95,86,73,69,87,95,82,79,84,95,90,0,0,0,0,0,0,0,0,71,78,85,80,76,79,84,95,80,83,95,68,73,82,0,0,80,114,111,108,111,103,32,110,97,109,101,0,0,0,0,0,10,9,84,104,101,32,102,111,108,108,111,119,105,110,103,32,98,105,110,97,114,121,32,100,97,116,97,32,115,105,122,101,115,32,97,116,116,101,109,112,116,32,116,111,32,98,101,32,109,97,99,104,105,110,101,32,105,110,100,101,112,101,110,100,101,110,116,58,10,10,9,32,32,110,97,109,101,32,40,115,105,122,101,32,105,110,32,98,121,116,101,115,41,10,10,0,47,117,115,114,47,108,111,99,97,108,47,115,104,97,114,101,47,103,110,117,112,108,111,116,47,52,46,54,47,80,111,115,116,83,99,114,105,112,116,0,97,103,108,105,115,116,0,0,97,103,108,102,110,46,116,120,116,0,0,0,0,0,0,0,47,76,84,51,32,123,32,80,76,32,91,56,32,100,108,49,32,53,32,100,108,49,32,48,46,53,32,100,108,49,32,53,32,100,108,49,93,32,49,32,48,32,49,32,68,76,32,125,32,100,101,102,10,0,0,0,71,80,86,65,76,95,78,97,78,0,0,0,0,0,0,0,47,76,84,50,32,123,32,80,76,32,91,52,32,100,108,49,32,52,32,100,108,49,93,32,48,32,49,32,49,32,68,76,32,125,32,100,101,102,10,0,118,116,116,101,107,0,0,0,47,76,84,49,32,123,32,80,76,32,91,56,32,100,108,49,32,53,32,100,108,49,93,32,48,32,48,32,49,32,68,76,32,125,32,100,101,102,10,0,118,101,36,114,115,105,111,110,0,0,0,0,0,0,0,0,47,76,84,48,32,123,32,80,76,32,91,93,32,49,32,48,32,48,32,68,76,32,125,32,100,101,102,10,0,0,0,0,116,111,112,0,0,0,0,0,99,111,108,117,109,110,115,36,116,97,99,107,101,100,0,0,32,37,115,37,115,116,105,99,115,32,37,115,109,37,115,116,105,99,115,0,0,0,0,0,47,76,84,97,32,123,32,65,76,32,91,49,32,117,100,108,32,109,117,108,32,50,32,117,100,108,32,109,117,108,93,32,48,32,115,101,116,100,97,115,104,32,48,32,48,32,48,32,115,101,116,114,103,98,99,111,108,111,114,32,125,32,100,101,102,10,0,0,0,0,0,0,71,80,86,65,76,95,86,73,69,87,95,82,79,84,95,88,0,0,0,0,0,0,0,0,47,76,84,98,32,123,32,66,76,32,91,93,32,48,32,48,32,48,32,68,76,32,125,32,100,101,102,10,0,0,0,0,47,76,84,119,32,123,32,80,76,32,91,93,32,49,32,115,101,116,103,114,97,121,32,125,32,100,101,102,10,0,0,0,40,37,100,41,10,0,0,0,93,32,41,10,0,0,0,0,37,32,82,101,100,101,102,105,110,101,32,108,105,110,101,32,116,121,112,101,115,32,116,111,32,109,97,116,99,104,32,111,108,100,32,101,112,115,108,97,116,101,120,32,100,114,105,118,101,114,10,0,0,0,0,0,119,36,105,116,104,0,0,0,99,117,114,114,101,110,116,100,105,99,116,32,101,110,100,32,100,101,102,105,110,101,102,111,110,116,32,112,111,112,10,0,100,117,112,32,108,101,110,103,116,104,32,100,105,99,116,32,98,101,103,105,110,32,123,49,32,105,110,100,101,120,32,47,70,73,68,32,101,113,32,123,112,111,112,32,112,111,112,125,32,123,100,101,102,125,32,105,102,101,108,115,101,125,32,102,111,114,97,108,108,10,0,0,45,101,0,0,0,0,0,0,47,67,77,69,88,49,48,45,66,97,115,101,108,105,110,101,32,47,67,77,69,88,49,48,32,102,105,110,100,102,111,110,116,32,91,49,32,48,32,48,32,49,32,48,32,49,93,32,109,97,107,101,102,111,110,116,10,0,0,0,0,0,0,0,71,80,86,65,76,95,112,105,0,0,0,0,0,0,0,0,37,37,66,101,103,105,110,80,114,111,99,83,101,116,58,32,67,77,69,88,49,48,45,66,97,115,101,108,105,110,101,10,0,0,0,0,0,0,0,0,114,101,102,114,101,115,104,10,0,0,0,0,0,0,0,0,84,101,107,116,114,111,110,105,120,32,52,48,49,48,32,97,110,100,32,111,116,104,101,114,115,59,32,109,111,115,116,32,84,69,75,32,101,109,117,108,97,116,111,114,115,0,0,0,67,77,69,88,49,48,0,0,116,105,116,36,108,101,0,0,76,105,110,101,102,101,101,100,0,0,0,0,0,0,0,0,37,37,69,110,100,80,114,111,99,83,101,116,10,0,0,0,98,111,116,116,111,109,0,0,114,111,119,115,36,116,97,99,107,101,100,0,0,0,0,0,115,101,116,32,103,114,105,100,0,0,0,0,0,0,0,0,67,111,109,109,97,110,100,32,39,37,115,39,32,103,101,110,101,114,97,116,101,100,32,101,114,114,111,114,44,32,101,120,105,116,99,111,100,101,32,105,115,32,37,100,0,0,0,0,110,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,108,111,97,100,32,102,105,108,101,0,0,67,97,110,39,116,32,99,97,108,99,117,108,97,116,101,32,99,117,98,105,99,32,115,112,108,105,110,101,115,0,0,0,96,98,117,105,108,116,105,110,45,114,111,116,97,116,101,45,100,111,119,110,96,32,111,110,108,121,32,102,111,114,32,115,112,108,111,116,115,59,32,60,115,104,105,102,116,62,32,105,110,99,114,101,97,115,101,115,32,97,109,111,117,110,116,0,80,105,112,101,32,39,37,115,39,32,99,111,110,116,97,105,110,115,32,116,104,101,32,102,111,110,116,32,39,37,115,39,46,10,0,0,0,0,0,0,105,110,116,101,114,110,97,108,32,101,114,114,111,114,32,58,32,115,116,114,108,101,110,32,111,102,32,110,111,110,45,83,84,82,73,78,71,32,97,114,103,117,109,101,110,116,0,0,70,111,110,116,32,102,105,108,101,32,39,37,115,39,32,99,111,110,116,97,105,110,115,32,116,104,101,32,102,111,110,116,32,39,37,115,39,46,32,76,111,99,97,116,105,111,110,58,10,32,32,32,37,115,10,0,108,111,97,100,95,102,111,110,116,102,105,108,101,115,0,0,47,70,111,110,116,78,97,109,101,0,0,0,0,0,0,0,70,111,110,116,32,102,105,108,101,32,39,37,115,39,32,115,101,101,109,115,32,110,111,116,32,116,111,32,98,101,32,97,32,80,70,65,32,102,105,108,101,0,0,0,0,0,0,0,67,111,109,109,97,110,100,32,39,37,115,39,32,115,101,101,109,115,32,110,111,116,32,116,111,32,103,101,110,101,114,97,116,101,32,80,70,65,32,100,97,116,97,0,0,0,0,0,71,80,86,65,76,95,84,69,82,77,73,78,65,76,83,0,37,33,70,111,110,116,84,121,112,101,49,0,0,0,0,0,116,101,107,52,48,120,120,0,37,33,80,83,45,65,100,111,98,101,70,111,110,116,0,0,116,105,109,36,101,115,116,97,109,112,0,0,0,0,0,0,70,111,110,116,32,102,105,108,101,32,39,37,115,39,32,104,97,115,32,117,110,107,110,111,119,110,32,101,120,116,101,110,115,105,111,110,46,32,65,115,115,117,109,101,32,105,116,32,105,115,32,97,32,112,102,97,32,102,105,108,101,0,0,0,9,119,114,105,116,116,101,110,32,105,110,32,37,115,32,99,111,114,110,101,114,10,0,0,101,114,114,111,114,36,98,97,114,115,0,0,0,0,0,0,115,101,116,32,103,114,105,100,32,110,111,112,111,108,97,114,10,0,0,0,0,0,0,0,112,102,97,0,0,0,0,0,78,111,32,99,111,109,109,97,110,100,32,102,111,114,32,97,117,116,111,109,97,116,105,99,32,102,111,110,116,32,99,111,110,118,101,114,115,105,111,110,32,112,102,98,45,62,112,102,97,32,100,101,102,105,110,101,100,0,0,0,0,0,0,0,112,102,98,116,111,112,115,32,37,115,0,0,0,0,0,0,9,32,32,0,0,0,0,0,67,97,110,39,116,32,112,108,111,116,32,119,105,116,104,32,97,110,32,101,109,112,116,121,32,37,115,32,114,97,110,103,101,33,0,0,0,0,0,0,71,78,85,80,76,79,84,95,80,70,66,84,79,80,70,65,0,0,0,0,0,0,0,0,112,102,98,0,0,0,0,0,117,110,115,101,116,32,104,105,100,100,101,110,51,100,10,0,67,111,117,108,100,32,110,111,116,32,101,120,101,99,117,116,101,32,99,111,109,109,97,110,100,32,39,37,115,39,0,0,78,111,32,99,111,109,109,97,110,100,32,102,111,114,32,97,117,116,111,109,97,116,105,99,32,102,111,110,116,32,99,111,110,118,101,114,115,105,111,110,32,116,116,102,45,62,112,102,97,32,100,101,102,105,110,101,100,0,0,0,0,0,0,0,110,101,119,32,107,101,121,32,108,105,115,116,0,0,0,0,116,116,102,50,112,116,49,32,45,97,32,45,101,32,45,87,32,48,32,37,115,32,45,0,84,101,107,116,114,111,110,105,120,32,52,49,48,54,44,32,52,49,48,55,44,32,52,49,48,57,32,97,110,100,32,52,50,48,88,32,116,101,114,109,105,110,97,108,115,0,0,0,71,78,85,80,76,79,84,95,84,84,70,84,79,80,70,65,0,0,0,0,0,0,0,0,116,105,109,101,102,36,109,116,0,0,0,0,0,0,0,0,111,116,102,0,0,0,0,0,99,108,117,115,116,36,101,114,101,100,0,0,0,0,0,0,115,101,116,32,103,114,105,100,32,112,111,108,97,114,32,37,102,10,0,0,0,0,0,0,116,116,102,0,0,0,0,0,112,0,0,0,0,0,0,0,37,37,37,37,66,101,103,105,110,80,114,111,99,83,101,116,58,32,37,115,10,0,0,0,80,83,95,101,115,99,97,112,101,95,115,116,114,105,110,103,0,0,0,0,0,0,0,0,9,84,104,101,32,102,111,108,108,111,119,105,110,103,32,98,105,110,97,114,121,32,100,97,116,97,32,115,105,122,101,115,32,97,114,101,32,109,97,99,104,105,110,101,32,100,101,112,101,110,100,101,110,116,58,10,10,9,32,32,110,97,109,101,32,40,115,105,122,101,32,105,110,32,98,121,116,101,115,41,10,10,0,0,0,0,0,0,76,111,103,32,115,99,97,108,105,110,103,32,111,102,32,51,68,32,105,109,97,103,101,32,112,108,111,116,115,32,105,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,0,101,110,100,10,37,37,69,110,100,80,114,111,108,111,103,10,0,0,0,0,0,0,0,0,40,41,92,0,0,0,0,0,115,116,97,116,117,115,100,105,99,116,32,98,101,103,105,110,32,37,115,32,115,101,116,100,117,112,108,101,120,109,111,100,101,32,101,110,100,10,0,0,79,114,105,103,105,110,95,50,0,0,0,0,0,0,0,0,117,116,102,45,56,46,112,115,0,0,0,0,0,0,0,0,71,80,86,65,76,95,67,79,77,80,73,76,69,95,79,80,84,73,79,78,83,0,0,0,107,111,105,56,117,46,112,115,0,0,0,0,0,0,0,0,116,101,107,52,49,48,120,0,107,111,105,56,114,46,112,115,0,0,0,0,0,0,0,0,116,105,99,115,108,36,101,118,101,108,0,0,0,0,0,0,99,112,49,50,53,49,46,112,115,0,0,0,0,0,0,0,9,115,101,116,32,37,115,100,97,116,97,32,116,105,109,101,10,0,0,0,0,0,0,0,117,110,115,101,116,32,103,114,105,100,10,0,0,0,0,0,99,112,49,50,53,48,46,112,115,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,99,112,56,53,50,46,112,115,0,0,0,0,0,0,0,0,99,112,56,53,48,46,112,115,0,0,0,0,0,0,0,0,99,112,52,51,55,46,112,115,0,0,0,0,0,0,0,0,56,56,53,57,45,49,53,46,112,115,0,0,0,0,0,0,56,56,53,57,45,57,46,112,115,0,0,0,0,0,0,0,56,56,53,57,45,50,46,112,115,0,0,0,0,0,0,0,108,111,97,100,112,97,116,104,32,61,61,32,78,85,76,76,0,0,0,0,0,0,0,0,71,80,86,65,76,95,80,65,84,67,72,76,69,86,69,76,0,0,0,0,0,0,0,0,56,56,53,57,45,49,46,112,115,0,0,0,0,0,0,0,120,94,51,0,0,0,0,0,82,69,71,73,83,32,103,114,97,112,104,105,99,115,32,108,97,110,103,117,97,103,101,0,112,114,111,108,111,103,117,101,46,112,115,0,0,0,0,0,116,105,99,115,99,36,97,108,101,0,0,0,0,0,0,0,47,100,111,99,108,105,112,32,123,10,32,32,67,108,105,112,84,111,66,111,117,110,100,105,110,103,66,111,120,32,123,10,32,32,32,32,110,101,119,112,97,116,104,32,37,100,32,37,100,32,109,111,118,101,116,111,32,37,100,32,37,100,32,108,105,110,101,116,111,32,37,100,32,37,100,32,108,105,110,101,116,111,32,37,100,32,37,100,32,108,105,110,101,116,111,32,99,108,111,115,101,112,97,116,104,10,32,32,32,32,99,108,105,112,10,32,32,125,32,105,102,10,125,32,100,101,102,10,0,0,0,0,0,0,0,0,104,115,0,0,0,0,0,0,115,101,116,32,116,105,99,115,32,37,115,10,0,0,0,0,37,37,80,97,103,101,115,58,32,40,97,116,101,110,100,41,10,0,0,0,0,0,0,0,80,111,114,116,114,97,105,116,0,0,0,0,0,0,0,0,76,97,110,100,115,99,97,112,101,0,0,0,0,0,0,0,44,32,37,100,32,98,101,102,111,114,101,32,112,108,97,110,101,0,0,0,0,0,0,0,37,37,37,37,79,114,105,101,110,116,97,116,105,111,110,58,32,37,115,10,0,0,0,0,37,37,37,37,66,111,117,110,100,105,110,103,66,111,120,58,32,37,100,32,37,100,32,37,100,32,37,100,10,0,0,0,40,97,116,101,110,100,41,0,37,37,37,37,84,105,116,108,101,58,32,37,115,10,0,0,71,80,86,65,76,95,86,69,82,83,73,79,78,0,0,0,37,33,80,83,45,65,100,111,98,101,45,50,46,48,10,0,114,101,103,105,115,0,0,0,37,33,80,83,45,65,100,111,98,101,45,50,46,48,32,69,80,83,70,45,50,46,48,10,0,0,0,0,0,0,0,0,116,105,36,99,115,0,0,0,101,112,115,0,0,0,0,0,40,0,0,0,0,0,0,0,32,110,111,101,110,104,97,110,99,101,100,0,0,0,0,0,117,110,36,115,111,114,116,101,100,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,112,111,115,116,115,99,114,105,112,116,32,102,111,114,109,97,116,32,117,115,101,100,0,0,37,37,37,37,80,97,103,101,115,58,32,37,100,10,0,0,37,115,37,115,0,0,0,0,44,32,37,100,32,98,101,102,111,114,101,32,108,105,110,101,0,0,0,0,0,0,0,0,37,37,68,111,99,117,109,101,110,116,70,111,110,116,115,58,32,0,0,0,0,0,0,0,35,0,0,0,0,0,0,0,37,37,84,114,97,105,108,101,114,10,0,0,0,0,0,0,115,116,114,111,107,101,10,103,114,101,115,116,111,114,101,10,101,110,100,10,115,104,111,119,112,97,103,101,10,0,0,0,77,82,115,104,111,119,10,0,66,97,100,32,102,117,108,108,32,109,111,110,116,104,32,110,97,109,101,0,0,0,0,0,71,80,86,65,76,95,69,82,82,78,79,0,0,0,0,0,77,67,115,104,111,119,10,0,71,80,73,67,32,45,45,32,80,114,111,100,117,99,101,32,103,114,97,112,104,115,32,105,110,32,103,114,111,102,102,32,117,115,105,110,103,32,116,104,101,32,103,112,105,99,32,112,114,101,112,114,111,99,101,115,115,111,114,0,0,0,0,0,77,76,115,104,111,119,10,0,116,101,114,109,111,36,112,116,105,111,110,115,0,0,0,0,93,32,37,46,49,102,32,0,44,32,114,111,116,97,116,101,100,32,98,121,32,37,100,32,100,101,103,114,101,101,115,32,105,110,32,50,68,32,112,108,111,116,115,0,0,0,0,0,115,111,36,114,116,101,100,0,92,37,111,0,0,0,0,0,91,32,0,0,0,0,0,0,99,117,114,114,101,110,116,112,111,105,110,116,32,103,115,97,118,101,32,116,114,97,110,115,108,97,116,101,32,37,100,32,114,111,116,97,116,101,32,48,32,48,32,109,111,118,101,116,111,10,0,0,0,0,0,0,10,9,32,32,32,32,83,107,105,112,32,98,121,116,101,115,58,32,37,100,32,98,101,102,111,114,101,32,114,101,99,111,114,100,0,0,0,0,0,0,47,88,89,114,101,115,116,111,114,101,32,123,32,91,40,32,41,32,49,32,50,32,116,114,117,101,32,102,97,108,115,101,32,52,32,40,41,93,32,125,32,98,105,110,100,32,100,101,102,10,0,0,0,0,0,0,47,88,89,115,97,118,101,32,32,32,32,123,32,91,40,32,41,32,49,32,50,32,116,114,117,101,32,102,97,108,115,101,32,51,32,40,41,93,32,125,32,98,105,110,100,32,100,101,102,10,0,0,0,0,0,0,101,120,112,97,110,100,32,102,111,110,116,112,97,116,104,0,32,32,101,120,99,104,32,100,117,112,32,77,70,119,105,100,116,104,32,45,50,32,100,105,118,32,51,32,45,49,32,114,111,108,108,32,82,10,32,32,66,108,97,99,107,116,101,120,116,32,123,103,115,97,118,101,32,48,32,115,101,116,103,114,97,121,32,77,70,115,104,111,119,32,103,114,101,115,116,111,114,101,125,32,123,77,70,115,104,111,119,125,32,105,102,101,108,115,101,32,125,32,98,105,110,100,32,100,101,102,10,0,101,37,43,48,50,100,0,0,47,77,67,115,104,111,119,32,123,32,99,117,114,114,101,110,116,112,111,105,110,116,32,115,116,114,111,107,101,32,77,10,0,0,0,0,0,0,0,0,10,9,100,117,109,109,121,32,118,97,114,105,97,98,108,101,32,105,115,32,120,32,102,111,114,32,99,117,114,118,101,115,10,0,0,0,0,0,0,0,37,72,58,37,77,0,0,0,71,80,86,65,76,95,69,78,67,79,68,73,78,71,0,0,32,32,101,120,99,104,32,100,117,112,32,77,70,119,105,100,116,104,32,110,101,103,32,51,32,45,49,32,114,111,108,108,32,82,10,32,32,66,108,97,99,107,116,101,120,116,32,123,103,115,97,118,101,32,48,32,115,101,116,103,114,97,121,32,77,70,115,104,111,119,32,103,114,101,115,116,111,114,101,125,32,123,77,70,115,104,111,119,125,32,105,102,101,108,115,101,32,125,32,98,105,110,100,32,100,101,102,10,0,0,0,0,103,112,105,99,0,0,0,0,47,77,82,115,104,111,119,32,123,32,99,117,114,114,101,110,116,112,111,105,110,116,32,115,116,114,111,107,101,32,77,10,0,0,0,0,0,0,0,0,116,97,98,108,101,0,0,0,32,32,48,32,101,120,99,104,32,82,10,32,32,66,108,97,99,107,116,101,120,116,32,123,103,115,97,118,101,32,48,32,115,101,116,103,114,97,121,32,77,70,115,104,111,119,32,103,114,101,115,116,111,114,101,125,32,123,77,70,115,104,111,119,125,32,105,102,101,108,115,101,32,125,32,98,105,110,100,32,100,101,102,10,0,0,0,0,44,32,112,97,114,97,108,108,101,108,32,116,111,32,97,120,105,115,32,105,110,32,51,68,32,112,108,111,116,115,0,0,101,120,112,101,99,116,105,110,103,32,39,120,39,44,32,39,120,50,39,44,32,39,97,117,116,111,39,32,111,114,32,39,111,102,102,39,0,0,0,0,115,101,116,32,97,110,103,108,101,115,32,37,115,10,0,0,47,77,76,115,104,111,119,32,123,32,99,117,114,114,101,110,116,112,111,105,110,116,32,115,116,114,111,107,101,32,77,10,0,0,0,0,0,0,0,0,32,32,32,32,32,54,32,103,101,116,32,71,115,119,105,100,116,104,32,112,111,112,32,97,100,100,125,32,123,112,111,112,125,32,105,102,101,108,115,101,125,32,105,102,101,108,115,101,125,32,102,111,114,97,108,108,125,32,100,101,102,10,0,0,32,123,100,117,112,32,51,32,103,101,116,123,100,117,112,32,100,117,112,32,48,32,103,101,116,32,102,105,110,100,102,111,110,116,32,101,120,99,104,32,49,32,103,101,116,32,115,99,97,108,101,102,111,110,116,32,115,101,116,102,111,110,116,10,0,0,0,0,0,0,0,0,37,50,46,50,115,0,0,0,115,106,105,115,0,0,0,0,47,77,70,119,105,100,116,104,32,123,48,32,101,120,99,104,32,123,32,100,117,112,32,53,32,103,101,116,32,51,32,103,101,32,123,32,53,32,103,101,116,32,51,32,101,113,32,123,32,48,32,125,32,123,32,112,111,112,32,125,32,105,102,101,108,115,101,32,125,10,0,0,84,97,98,117,108,97,114,32,111,117,116,112,117,116,32,111,102,32,37,115,32,112,108,111,116,32,115,116,121,108,101,32,110,111,116,32,102,117,108,108,121,32,105,109,112,108,101,109,101,110,116,101,100,10,0,0,108,97,110,100,0,0,0,0,47,71,115,119,105,100,116,104,32,123,100,117,112,32,116,121,112,101,32,47,115,116,114,105,110,103,116,121,112,101,32,101,113,32,123,115,116,114,105,110,103,119,105,100,116,104,125,32,123,112,111,112,32,40,110,41,32,115,116,114,105,110,103,119,105,100,116,104,125,32,105,102,101,108,115,101,125,32,100,101,102,10,0,0,0,0,0,0,32,32,32,102,111,114,97,108,108,125,32,100,101,102,10,0,32,32,32,32,32,105,102,101,108,115,101,32,125,10,0,0,71,80,86,65,76,95,79,85,84,80,85,84,0,0,0,0,32,32,32,32,32,112,111,112,32,97,108,111,97,100,32,112,111,112,32,77,125,32,105,102,101,108,115,101,32,125,105,102,101,108,115,101,32,125,105,102,101,108,115,101,32,125,10,0,85,110,107,110,111,119,110,32,116,101,114,109,105,110,97,108,32,116,121,112,101,32,45,32,110,111,116,32,97,32,112,108,111,116,116,105,110,103,32,100,101,118,105,99,101,0,0,0,32,32,32,32,32,115,104,111,119,32,50,32,105,110,100,101,120,32,123,97,108,111,97,100,32,112,111,112,32,77,32,110,101,103,32,51,32,45,49,32,114,111,108,108,32,110,101,103,32,82,32,112,111,112,32,112,111,112,125,32,123,112,111,112,32,112,111,112,32,112,111,112,10,0,0,0,0,0,0,0,115,117,36,114,102,97,99,101,0,0,0,0,0,0,0,0,101,108,115,101,0,0,0,0,32,32,32,32,32,100,117,112,32,48,32,82,125,32,123,100,117,112,32,54,32,103,101,116,32,115,116,114,105,110,103,119,105,100,116,104,32,112,111,112,32,45,50,32,100,105,118,32,48,32,82,32,54,32,103,101,116,10,0,0,0,0,0,0,44,32,117,115,105,110,103,32,102,111,110,116,32,34,37,115,34,0,0,0,0,0,0,0,97,117,116,111,0,0,0,0,78,111,32,118,97,108,105,100,32,100,97,116,97,32,112,111,105,110,116,115,32,102,111,117,110,100,32,105,110,32,102,105,108,101,0,0,0,0,0,0,115,101,116,32,102,111,114,109,97,116,32,37,115,32,34,37,115,34,10,0,0,0,0,0,32,32,32,32,32,103,101,116,32,49,32,101,113,32,123,100,117,112,32,50,32,103,101,116,32,101,120,99,104,32,100,117,112,32,51,32,103,101,116,32,101,120,99,104,32,54,32,103,101,116,32,115,116,114,105,110,103,119,105,100,116,104,32,112,111,112,32,45,50,32,100,105,118,10,0,0,0,0,0,0,32,32,32,32,32,123,100,117,112,32,51,32,103,101,116,32,123,50,32,103,101,116,32,110,101,103,32,48,32,101,120,99,104,32,82,32,112,111,112,125,32,123,112,111,112,32,97,108,111,97,100,32,112,111,112,32,77,125,32,105,102,101,108,115,101,125,32,123,100,117,112,32,53,10,0,0,0,0,0,0,32,32,32,32,32,103,101,116,32,101,120,99,104,32,52,32,103,101,116,32,123,71,115,104,111,119,125,32,123,115,116,114,105,110,103,119,105,100,116,104,32,112,111,112,32,48,32,82,125,32,105,102,101,108,115,101,32,125,105,102,32,100,117,112,32,53,32,103,101,116,32,48,32,101,113,10,0,0,0,0,10,9,32,32,32,32,83,99,97,110,58,32,0,0,0,0,32,32,32,32,32,91,32,99,117,114,114,101,110,116,112,111,105,110,116,32,93,32,101,120,99,104,32,100,117,112,32,50,32,103,101,116,32,48,32,101,120,99,104,32,82,32,100,117,112,32,53,32,103,101,116,32,50,32,110,101,32,123,100,117,112,32,100,117,112,32,54,10,0,0,0,0,0,0,0,0,32,32,32,32,32,123,100,117,112,32,100,117,112,32,48,32,103,101,116,32,102,105,110,100,102,111,110,116,32,101,120,99,104,32,49,32,103,101,116,32,115,99,97,108,101,102,111,110,116,32,115,101,116,102,111,110,116,10,0,0,0,0,0,0,32,32,32,32,32,123,32,53,32,103,101,116,32,51,32,101,113,32,123,103,115,97,118,101,125,32,123,103,114,101,115,116,111,114,101,125,32,105,102,101,108,115,101,32,125,10,0,0,45,76,73,66,71,68,32,32,0,0,0,0,0,0,0,0,32,32,32,123,32,100,117,112,32,53,32,103,101,116,32,51,32,103,101,10,0,0,0,0,71,80,86,65,76,95,84,69,82,77,79,80,84,73,79,78,83,0,0,0,0,0,0,0,47,77,70,115,104,111,119,32,123,10,0,0,0,0,0,0,123,125,94,95,64,38,126,10,0,0,0,0,0,0,0,0,125,32,105,102,10,0,0,0,115,116,36,121,108,101,0,0,103,115,97,118,101,32,66,97,99,107,103,114,111,117,110,100,67,111,108,111,114,32,67,32,99,108,105,112,112,97,116,104,32,102,105,108,108,32,103,114,101,115,116,111,114,101,0,0,9,37,115,37,115,32,105,115,32,34,37,115,34,44,32,111,102,102,115,101,116,32,97,116,32,0,0,0,0,0,0,0,116,101,120,116,95,108,97,98,101,108,0,0,0,0,0,0,115,101,116,32,100,117,109,109,121,32,37,115,44,37,115,10,0,0,0,0,0,0,0,0,66,97,99,107,103,114,111,117,110,100,67,111,108,111,114,32,67,32,49,46,48,48,48,32,48,32,48,32,37,46,50,102,32,37,46,50,102,32,66,111,120,67,111,108,70,105,108,108,0,0,0,0,0,0,0,0,66,97,99,107,103,114,111,117,110,100,67,111,108,111,114,32,48,32,108,116,32,51,32,49,32,114,111,108,108,32,48,32,108,116,32,101,120,99,104,32,48,32,108,116,32,111,114,32,111,114,32,110,111,116,32,123,0,0,0,0,0,0,0,0,40,37,115,41,32,102,105,110,100,102,111,110,116,32,37,100,32,115,99,97,108,101,102,111,110,116,32,115,101,116,102,111,110,116,10,0,0,0,0,0,10,9,32,32,32,32,51,68,32,110,111,114,109,97,108,32,118,101,99,116,111,114,58,32,40,37,102,44,32,37,102,44,32,37,102,41,0,0,0,0,32,32,35,32,40,99,117,114,114,101,110,116,108,121,32,91,0,0,0,0,0,0,0,0,48,32,115,101,116,103,114,97,121,10,110,101,119,112,97,116,104,10,0,0,0,0,0,0,110,111,116,36,105,116,108,101,0,0,0,0,0,0,0,0,57,48,32,114,111,116,97,116,101,10,48,32,37,100,32,116,114,97,110,115,108,97,116,101,10,0,0,0,0,0,0,0,103,110,117,100,105,99,116,32,98,101,103,105,110,10,103,115,97,118,101,10,100,111,99,108,105,112,10,37,100,32,37,100,32,116,114,97,110,115,108,97,116,101,10,37,46,51,102,32,37,46,51,102,32,115,99,97,108,101,10,0,0,0,0,0,45,0,0,0,0,0,0,0,87,114,105,116,105,110,103,32,111,117,116,32,80,111,115,116,83,99,114,105,112,116,32,109,97,99,114,111,115,32,102,111,114,32,101,110,104,97,110,99,101,100,32,116,101,120,116,32,109,111,100,101,10,0,0,0,37,37,37,37,80,97,103,101,58,32,37,100,32,37,100,10,0,0,0,0,0,0,0,0,46,0,0,0,0,0,0,0,37,100,32,37,100,32,78,10,0,0,0,0,0,0,0,0,71,80,95,70,73,82,83,84,95,75,69,89,0,0,0,0,37,100,32,37,100,32,82,10,0,0,0,0,0,0,0,0,108,97,98,101,108,0,0,0,47,121,48,32,121,48,32,121,115,116,101,112,32,97,100,100,32,100,101,102,32,47,105,105,32,105,105,32,49,32,97,100,100,32,100,101,102,10,105,105,32,105,109,97,120,32,103,101,32,123,101,120,105,116,125,32,105,102,32,125,32,108,111,111,112,10,103,114,101,115,116,111,114,101,32,48,32,115,101,116,103,114,97,121,10,0,0,0,120,0,0,0,0,0,0,0,32,107,100,101,110,115,105,116,121,50,100,0,0,0,0,0,37,100,32,37,100,32,77,10,0,0,0,0,0,0,0,0,116,111,107,101,110,95,116,97,98,108,101,95,115,105,122,101,32,62,61,32,108,102,45,62,110,117,109,95,116,111,107,101,110,115,43,49,0,0,0,0,67,97,110,39,116,32,99,97,108,99,117,108,97,116,101,32,115,112,108,105,110,101,115,44,32,110,101,101,100,32,97,116,32,108,101,97,115,116,32,51,32,112,111,105,110,116,115,0,115,116,114,111,107,101,32,37,100,32,37,100,32,77,10,0,105,110,116,101,114,110,97,108,32,101,114,114,111,114,32,58,32,83,84,82,73,78,71,32,111,112,101,114,97,116,111,114,32,97,112,112,108,105,101,100,32,116,111,32,110,111,110,45,83,84,82,73,78,71,32,116,121,112,101,0,0,0,0,0,37,100,32,37,100,32,86,10,0,0,0,0,0,0,0,0,10,9,32,32,32,32,50,68,32,114,111,116,97,116,105,111,110,32,97,110,103,108,101,58,32,37,102,0,0,0,0,0,37,100,32,37,100,32,76,10,0,0,0,0,0,0,0,0,76,84,37,99,10,0,0,0,41,32,82,115,104,111,119,10,0,0,0,0,0,0,0,0,41,32,67,115,104,111,119,10,0,0,0,0,0,0,0,0,71,80,86,65,76,95,84,69,82,77,0,0,0,0,0,0,41,32,76,115,104,111,119,10,0,0,0,0,0,0,0,0,101,115,116,105,109,97,116,101,32,119,105,100,116,104,32,111,102,32,101,110,104,97,110,99,101,100,32,116,101,120,116,32,115,116,114,105,110,103,0,0,93,32,71,82,115,104,111,119,10,0,0,0,0,0,0,0,115,97,36,109,112,108,101,115,0,0,0,0,0,0,0,0,93,32,71,67,115,104,111,119,10,0,0,0,0,0,0,0,110,117,109,101,114,105,99,97,108,0,0,0,0,0,0,0,115,101,116,32,100,103,114,105,100,51,100,32,37,100,44,37,100,32,37,115,37,115,32,37,102,44,37,102,10,0,0,0,93,32,71,76,115,104,111,119,10,0,0,0,0,0,0,0,99,117,114,114,101,110,116,112,111,105,110,116,32,103,115,97,118,101,32,116,114,97,110,115,108,97,116,101,32,37,100,32,114,111,116,97,116,101,32,48,32,48,32,77,10,0,0,0,37,100,32,37,100,32,37,115,10,0,0,0,0,0,0,0,32,40,37,102,44,32,37,102,44,32,37,102,41,0,0,0,97,100,106,117,115,116,105,110,103,32,116,111,32,91,37,103,58,37,103,93,10,0,0,0,80,101,110,116,87,0,0,0,68,105,97,87,0,0,0,0,84,114,105,68,87,0,0,0,84,114,105,85,87,0,0,0,110,101,119,32,108,105,110,101,32,98,117,102,102,101,114,0,67,105,114,99,87,0,0,0,101,115,116,105,109,97,116,101,0,0,0,0,0,0,0,0,66,111,120,87,0,0,0,0,111,98,106,36,101,99,116,0,80,101,110,116,69,0,0,0,108,97,98,36,101,108,115,0,115,101,116,32,100,103,114,105,100,51,100,32,37,100,44,37,100,32,115,112,108,105,110,101,115,10,0,0,0,0,0,0,68,105,97,69,0,0,0,0,84,114,105,68,69,0,0,0,105,115,111,95,56,56,53,57,95,49,0,0,0,0,0,0,84,114,105,85,69,0,0,0,10,9,32,32,32,32,67,101,110,116,101,114,58,0,0,0,67,105,114,99,69,0,0,0,73,109,97,103,101,32,103,114,105,100,32,109,117,115,116,32,98,101,32,97,116,32,108,101,97,115,116,32,52,32,112,111,105,110,116,115,32,40,50,32,120,32,50,41,46,10,10,0,66,111,120,69,0,0,0,0,68,49,53,0,0,0,0,0,68,49,52,0,0,0,0,0,85,110,107,110,111,119,110,32,112,111,105,110,116,32,116,121,112,101,32,105,110,32,112,108,111,116,51,100,95,108,105,110,101,115,0,0,0,0,0,0,79,114,105,103,105,110,95,49,0,0,0,0,0,0,0,0,10,35,32,67,117,114,118,101,32,37,100,32,111,102,32,37,100,44,32,37,100,32,112,111,105,110,116,115,0,0,0,0,68,49,51,0,0,0,0,0,123,125,36,91,93,92,0,0,68,49,50,0,0,0,0,0,112,115,100,105,114,0,0,0,68,49,49,0,0,0,0,0,9,37,115,32,105,115,32,115,101,116,32,116,111,32,37,115,10,0,0,0,0,0,0,0,115,101,112,97,114,97,116,105,111,110,32,109,117,115,116,32,98,101,32,62,32,48,0,0,115,101,116,32,100,103,114,105,100,51,100,32,37,100,44,37,100,44,32,37,100,10,0,0,68,49,48,0,0,0,0,0,76,0,0,0,0,0,0,0,68,57,0,0,0,0,0,0,68,56,0,0,0,0,0,0,10,9,32,32,32,32,79,114,105,103,105,110,58,0,0,0,68,55,0,0,0,0,0,0,68,54,0,0,0,0,0,0,68,53,0,0,0,0,0,0,68,52,0,0,0,0,0,0,68,51,0,0,0,0,0,0,100,117,112,32,100,117,112,32,109,117,108,32,109,117,108,0,101,110,104,97,110,99,101,100,32,116,101,120,116,32,109,111,100,101,32,112,97,114,115,105,110,103,32,101,114,114,111,114,0,0,0,0,0,0,0,0,68,50,0,0,0,0,0,0,112,111,108,36,97,114,0,0,68,49,0,0,0,0,0,0,9,114,101,97,100,32,102,111,114,109,97,116,32,102,111,114,32,116,105,109,101,32,111,110,32,37,115,32,97,120,105,115,32,105,115,32,34,37,115,34,10,0,0,0,0,0,0,0,115,101,112,36,97,114,97,116,105,111,110,0,0,0,0,0,121,121,10,0,0,0,0,0,68,48,0,0,0,0,0,0,108,0,0,0,0,0,0,0,83,49,53,0,0,0,0,0,83,49,52,0,0,0,0,0,44,32,100,122,61,37,102,0,83,49,51,0,0,0,0,0,83,49,50,0,0,0,0,0,83,49,49,0,0,0,0,0,83,49,48,0,0,0,0,0,83,57,0,0,0,0,0,0,101,110,104,97,110,99,101,100,32,116,101,120,116,32,109,111,100,101,32,112,97,114,115,101,114,32,45,32,105,103,110,111,114,105,110,103,32,115,112,117,114,105,111,117,115,32,125,0,83,56,0,0,0,0,0,0,112,111,105,36,110,116,115,105,122,101,0,0,0,0,0,0,83,55,0,0,0,0,0,0,9,122,101,114,111,32,105,115,32,37,103,10,0,0,0,0,83,54,0,0,0,0,0,0,102,105,110,97,110,99,101,36,98,97,114,115,0,0,0,0,120,120,10,0,0,0,0,0,114,101,115,105,122,101,95,100,121,110,97,114,114,97,121,58,32,100,121,110,97,114,114,97,121,32,119,97,115,110,39,116,32,105,110,105,116,105,97,108,105,122,101,100,33,0,0,0,104,0,0,0,0,0,0,0,83,53,0,0,0,0,0,0,83,52,0,0,0,0,0,0,44,32,100,121,61,37,102,0,83,51,0,0,0,0,0,0,83,50,0,0,0,0,0,0,73,47,79,32,101,114,114,111,114,32,100,117,114,105,110,103,32,117,112,100,97,116,101,0,83,49,0,0,0,0,0,0,83,48,0,0,0,0,0,0,71,80,86,65,76,95,86,73,69,87,95,77,65,80,0,0,67,49,53,0,0,0,0,0,115,118,103,0,0,0,0,0,67,49,52,0,0,0,0,0,112,111,105,110,116,105,110,116,36,101,114,118,97,108,98,111,120,0,0,0,0,0,0,0,67,49,51,0,0,0,0,0,102,105,108,101,116,36,121,112,101,115,0,0,0,0,0,0,99,97,110,100,108,101,36,115,116,105,99,107,115,0,0,0,120,121,10,0,0,0,0,0,67,49,50,0,0,0,0,0,103,0,0,0,0,0,0,0,67,49,49,0,0,0,0,0,67,49,48,0,0,0,0,0,10,9,32,32,32,32,83,97,109,112,108,101,32,112,101,114,105,111,100,115,58,32,100,120,61,37,102,0,0,0,0,0,67,57,0,0,0,0,0,0,67,56,0,0,0,0,0,0,36,96,0,0,0,0,0,0,67,55,0,0,0,0,0,0,121,122,97,102,112,110,117,109,32,107,77,71,84,80,69,90,89,0,0,0,0,0,0,0,67,54,0,0,0,0,0,0,37,73,58,37,77,58,37,83,32,37,112,0,0,0,0,0,71,80,86,65,76,95,83,80,76,79,84,0,0,0,0,0,67,53,0,0,0,0,0,0,101,110,104,97,110,99,101,100,32,116,101,120,116,32,112,97,114,115,101,114,32,45,45,32,115,112,117,114,105,111,117,115,32,98,97,99,107,115,108,97,115,104,0,0,0,0,0,0,67,52,0,0,0,0,0,0,99,111,108,111,114,115,0,0,67,51,0,0,0,0,0,0,100,97,116,97,115,36,105,122,101,115,0,0,0,0,0,0,102,114,97,99,116,105,111,110,32,109,117,115,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,49,0,0,0,0,117,110,105,116,115,32,0,0,67,50,0,0,0,0,0,0,101,0,0,0,0,0,0,0,67,49,0,0,0,0,0,0,67,48,0,0,0,0,0,0,97,108,108,32,102,111,114,119,97,114,100,0,0,0,0,0,107,111,105,56,117,0,0,0,80,101,110,116,70,0,0,0,32,32,114,101,100,32,103,114,101,101,110,32,98,108,117,101,32,97,108,112,104,97,0,0,80,101,110,116,0,0,0,0,108,111,114,0,0,0,0,0,68,105,97,70,0,0,0,0,68,105,97,0,0,0,0,0,71,80,86,65,76,95,80,76,79,84,0,0,0,0,0,0,84,114,105,68,70,0,0,0,94,95,64,38,126,123,125,0,84,114,105,68,0,0,0,0,99,111,108,111,114,110,36,97,109,101,115,0,0,0,0,0,105,102,0,0,0,0,0,0,84,114,105,85,70,0,0,0,98,105,110,36,97,114,121,0,102,114,97,99,36,116,105,111,110,0,0,0,0,0,0,0,65,108,108,32,112,111,105,110,116,115,32,111,117,116,32,111,102,32,114,97,110,103,101,0,32,97,110,103,108,101,32,37,103,32,0,0,0,0,0,0,84,114,105,85,0,0,0,0,98,0,0,0,0,0,0,0,67,105,114,99,108,101,70,0,108,111,119,36,101,114,0,0,67,105,114,99,108,101,0,0,37,115,102,108,105,112,32,122,0,0,0,0,0,0,0,0,66,111,120,70,0,0,0,0,66,111,120,0,0,0,0,0,83,116,97,114,0,0,0,0,45,76,73,66,82,69,65,68,76,73,78,69,32,32,45,72,73,83,84,79,82,89,32,32,0,0,0,0,0,0,0,0,67,114,115,0,0,0,0,0,71,80,86,65,76,95,82,95,76,79,71,0,0,0,0,0])
+.concat([80,108,115,0,0,0,0,0,98,97,100,32,115,121,110,116,97,120,32,105,110,32,101,110,104,97,110,99,101,100,32,116,101,120,116,32,115,116,114,105,110,103,0,0,0,0,0,0,80,110,116,0,0,0,0,0,99,111,108,111,114,98,36,111,120,0,0,0,0,0,0,0,103,115,97,118,101,32,91,93,32,48,32,115,101,116,100,97,115,104,10,0,0,0,0,0,9,78,111,32,102,108,111,97,116,105,110,103,32,112,111,105,110,116,32,101,120,99,101,112,116,105,111,110,32,104,97,110,100,108,101,114,32,100,117,114,105,110,103,32,100,97,116,97,32,105,110,112,117,116,10,0,114,97,119,0,0,0,0,0,85,110,114,101,99,111,103,110,105,122,101,100,32,111,112,116,105,111,110,46,32,32,83,101,101,32,39,104,101,108,112,32,115,101,116,39,46,0,0,0,114,97,110,103,101,0,0,0,115,101,116,32,115,116,121,108,101,32,101,108,108,105,112,115,101,32,115,105,122,101,32,0,47,118,115,104,105,102,116,32,37,100,32,100,101,102,10,0,97,0,0,0,0,0,0,0,47,37,115,32,102,105,110,100,102,111,110,116,32,37,103,32,115,99,97,108,101,102,111,110,116,32,115,101,116,102,111,110,116,10,0,0,0,0,0,0,37,102,0,0,0,0,0,0,109,105,115,115,105,110,103,32,102,105,108,101,110,97,109,101,0,0,0,0,0,0,0,0,37,46,51,102,32,85,80,10,0,0,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,34,116,105,116,108,101,34,32,102,111,114,32,112,108,111,116,0,0,0,0,0,0,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,48,32,80,97,116,116,101,114,110,70,105,108,108,10,0,0,0,0,0,0,0,0,110,101,119,104,105,115,116,36,111,103,114,97,109,0,0,0,49,32,37,100,32,37,100,32,37,100,32,37,100,32,66,111,120,67,111,108,70,105,108,108,10,0,0,0,0,0,0,0,87,65,82,78,73,78,71,58,32,69,114,114,111,114,32,100,117,114,105,110,103,32,105,110,105,116,105,97,108,105,122,97,116,105,111,110,10,10,0,0,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,50,32,80,97,116,116,101,114,110,70,105,108,108,10,0,0,0,0,0,0,0,0,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,49,32,80,97,116,116,101,114,110,70,105,108,108,10,0,0,0,0,0,0,0,0,71,80,86,65,76,95,82,95,77,73,78,0,0,0,0,0,39,59,39,32,101,120,112,101,99,116,101,100,0,0,0,0,101,110,104,97,110,99,101,100,32,116,101,120,116,32,112,97,114,115,101,114,32,45,32,115,112,117,114,105,111,117,115,32,125,0,0,0,0,0,0,0,37,100,32,37,100,32,37,100,32,37,100,32,66,111,120,70,105,108,108,10,0,0,0,0,112,97,108,36,101,116,116,101,0,0,0,0,0,0,0,0,98,105,110,100,58,32,99,97,110,110,111,116,32,112,97,114,115,101,32,37,115,10,0,0,10,32,47,84,114,97,110,115,112,97,114,101,110,116,80,97,116,116,101,114,110,115,32,116,114,117,101,32,100,101,102,10,0,0,0,0,0,0,0,0,9,68,97,116,97,102,105,108,101,32,112,97,114,115,105,110,103,32,119,105,108,108,32,97,99,99,101,112,116,32,70,111,114,116,114,97,110,32,68,32,111,114,32,81,32,99,111,110,115,116,97,110,116,115,10,0,112,116,0,0,0,0,0,0,121,48,32,48,32,78,32,48,32,49,32,86,32,121,115,116,101,112,32,48,32,86,32,48,32,45,49,32,102,10,0,0,32,10,0,0,0,0,0,0,37,46,51,102,32,37,100,32,37,100,32,37,100,32,37,100,32,66,111,120,67,111,108,70,105,108,108,10,0,0,0,0,67,97,110,110,111,116,32,115,109,111,111,116,104,58,32,110,111,32,100,97,116,97,32,119,105,116,104,105,110,32,102,105,120,101,100,32,120,114,97,110,103,101,33,0,0,0,0,0,37,115,65,108,116,45,0,0,105,110,116,101,114,110,97,108,32,101,114,114,111,114,32,58,32,97,114,103,117,109,101,110,116,32,110,101,105,116,104,101,114,32,73,78,84,32,111,114,32,67,77,80,76,88,0,0,37,100,32,37,100,32,37,100,32,37,100,32,82,101,99,32,102,105,108,108,10,0,0,0,37,46,51,102,32,85,76,10,0,0,0,0,0,0,0,0,37,115,102,108,105,112,32,121,0,0,0,0,0,0,0,0,32,32,105,102,125,32,105,102,101,108,115,101,125,32,105,102,101,108,115,101,125,32,105,102,101,108,115,101,125,32,100,101,102,10,0,0,0,0,0,0,32,32,88,89,90,50,82,71,66,125,123,67,111,108,111,114,83,112,97,99,101,32,40,67,77,89,41,32,101,113,32,123,67,77,89,50,82,71,66,125,123,67,111,108,111,114,83,112,97,99,101,32,40,89,73,81,41,32,101,113,32,123,89,73,81,50,82,71,66,125,10,0,105,110,118,101,114,115,101,95,110,111,114,109,97,108,95,102,117,110,99,0,0,0,0,0,47,83,101,108,101,99,116,83,112,97,99,101,32,123,67,111,108,111,114,83,112,97,99,101,32,40,72,83,86,41,32,101,113,32,123,72,83,86,50,82,71,66,125,123,67,111,108,111,114,83,112,97,99,101,32,40,88,89,90,41,32,101,113,32,123,10,0,0,0,0,0,0,32,32,101,120,99,104,32,49,46,57,49,32,109,117,108,32,101,120,99,104,32,97,100,100,32,67,111,110,115,116,114,97,105,110,32,51,32,49,32,114,111,108,108,125,32,100,101,102,10,0,0,0,0,0,0,0,32,32,45,48,46,57,56,52,52,32,109,117,108,32,97,100,100,32,67,111,110,115,116,114,97,105,110,32,53,32,49,32,114,111,108,108,32,45,48,46,50,56,57,49,32,109,117,108,32,101,120,99,104,32,45,48,46,53,51,51,56,32,109,117,108,32,97,100,100,10,0,0,105,115,95,106,117,109,112,40,111,112,101,114,97,116,111,114,41,32,124,124,32,40,106,117,109,112,95,111,102,102,115,101,116,32,61,61,32,49,41,0,78,111,32,102,105,108,108,101,100,32,112,111,108,121,103,111,110,115,0,0,0,0,0,0,32,32,67,111,110,115,116,114,97,105,110,32,52,32,49,32,114,111,108,108,32,51,32,99,111,112,121,32,45,48,46,48,50,55,57,32,109,117,108,32,101,120,99,104,32,49,46,57,57,57,32,109,117,108,32,97,100,100,32,101,120,99,104,10,0,0,0,0,0,0,0,0,112,109,36,51,100,0,0,0,32,32,51,32,99,111,112,121,32,45,48,46,57,48,49,55,32,109,117,108,32,101,120,99,104,32,45,48,46,49,49,56,55,32,109,117,108,32,97,100,100,32,101,120,99,104,32,48,46,48,53,56,53,32,109,117,108,32,101,120,99,104,32,97,100,100,10,0,0,0,0,0,9,67,111,109,109,101,110,116,115,32,99,104,97,114,115,32,97,114,101,32,34,37,115,34,10,0,0,0,0,0,0,0,112,111,105,110,116,36,116,121,112,101,0,0,0,0,0,0,115,101,116,32,115,116,121,108,101,32,99,105,114,99,108,101,32,114,97,100,105,117,115,32,0,0,0,0,0,0,0,0,47,88,89,90,50,82,71,66,32,123,0,0,0,0,0,0,32,32,49,32,101,120,99,104,32,115,117,98,32,101,120,99,104,32,49,32,101,120,99,104,32,115,117,98,32,51,32,50,32,114,111,108,108,32,49,32,101,120,99,104,32,115,117,98,32,51,32,49,32,114,111,108,108,32,101,120,99,104,32,125,32,100,101,102,10,0,0,0,67,116,114,108,45,0,0,0,47,67,77,89,50,82,71,66,32,123,0,0,0,0,0,0,102,108,105,112,32,120,0,0,87,97,114,110,105,110,103,58,32,101,109,112,116,121,32,37,115,32,114,97,110,103,101,32,91,37,103,58,37,103,93,44,32,0,0,0,0,0,0,0,32,32,48,46,54,50,49,32,109,117,108,32,101,120,99,104,32,45,48,46,57,53,54,32,109,117,108,32,97,100,100,32,97,100,100,32,67,111,110,115,116,114,97,105,110,32,51,32,49,32,114,111,108,108,32,125,32,100,101,102,10,0,0,0,32,32,51,32,99,111,112,121,32,45,48,46,54,52,55,32,109,117,108,32,101,120,99,104,32,45,48,46,50,55,50,32,109,117,108,32,97,100,100,32,97,100,100,32,67,111,110,115,116,114,97,105,110,32,53,32,49,32,114,111,108,108,10,0,32,32,51,32,99,111,112,121,32,45,49,46,55,48,50,32,109,117,108,32,101,120,99,104,32,45,49,46,49,48,53,32,109,117,108,32,97,100,100,32,97,100,100,32,67,111,110,115,116,114,97,105,110,32,52,32,49,32,114,111,108,108,10,0,47,89,73,81,50,82,71,66,32,123,10,0,0,0,0,0,107,101,121,32,97,114,114,97,121,0,0,0,0,0,0,0,32,32,100,117,112,32,48,32,108,116,32,123,48,32,101,120,99,104,32,112,111,112,125,123,100,117,112,32,49,32,103,116,32,123,49,32,101,120,99,104,32,112,111,112,125,32,105,102,125,32,105,102,101,108,115,101,125,32,100,101,102,10,0,0,102,105,108,108,101,100,32,112,111,108,121,103,111,110,115,58,0,0,0,0,0,0,0,0,47,67,111,110,115,116,114,97,105,110,32,123,10,0,0,0,112,97,36,114,97,109,101,116,114,105,99,0,0,0,0,0,32,32,125,32,105,102,101,108,115,101,125,32,100,101,102,10,0,0,0,0,0,0,0,0,99,111,109,36,109,101,110,116,115,0,0,0,0,0,0,0,111,117,116,36,108,105,101,114,115,0,0,0,0,0,0,0,115,101,116,32,115,116,121,108,101,32,114,101,99,116,97,110,103,108,101,32,37,115,32,102,99,32,0,0,0,0,0,0,9,32,123,72,83,86,118,32,72,83,86,112,32,72,83,86,113,125,32,105,102,101,108,115,101,125,32,105,102,101,108,115,101,125,32,105,102,101,108,115,101,125,32,105,102,101,108,115,101,125,32,105,102,101,108,115,101,10,0,0,0,0,0,0,96,37,115,58,37,100,32,111,111,112,115,46,39,10,0,0,9,32,123,51,32,72,83,86,105,32,101,113,32,123,72,83,86,112,32,72,83,86,113,32,72,83,86,118,125,123,52,32,72,83,86,105,32,101,113,32,123,72,83,86,116,32,72,83,86,112,32,72,83,86,118,125,10,0,0,0,0,0,0,0,9,32,123,49,32,72,83,86,105,32,101,113,32,123,72,83,86,113,32,72,83,86,118,32,72,83,86,112,125,123,50,32,72,83,86,105,32,101,113,32,123,72,83,86,112,32,72,83,86,118,32,72,83,86,116,125,10,0,0,0,0,0,0,0,10,9,32,32,32,32,68,105,114,101,99,116,105,111,110,58,32,0,0,0,0,0,0,0,9,32,47,72,83,86,105,32,72,83,86,105,32,54,32,109,111,100,32,100,101,102,32,48,32,72,83,86,105,32,101,113,32,123,72,83,86,118,32,72,83,86,116,32,72,83,86,112,125,10,0,0,0,0,0,0,78,111,32,112,111,105,110,116,115,32,40,118,105,115,105,98,108,101,32,111,114,32,105,110,118,105,115,105,98,108,101,41,32,116,111,32,112,108,111,116,46,10,10,0,0,0,0,0,9,32,47,72,83,86,116,32,72,83,86,118,32,49,46,48,32,72,83,86,115,32,49,46,48,32,72,83,86,102,32,115,117,98,32,109,117,108,32,115,117,98,32,109,117,108,32,100,101,102,10,0,0,0,0,0,9,32,47,72,83,86,113,32,72,83,86,118,32,49,46,48,32,72,83,86,115,32,72,83,86,102,32,109,117,108,32,115,117,98,32,109,117,108,32,100,101,102,32,10,0,0,0,0,32,32,32,32,47,72,83,86,102,32,101,120,99,104,32,100,101,102,32,47,72,83,86,105,32,101,120,99,104,32,99,118,105,32,100,101,102,32,47,72,83,86,112,32,72,83,86,118,32,49,46,48,32,72,83,86,115,32,115,117,98,32,109,117,108,32,100,101,102,10,0,0,103,114,97,112,104,98,111,120,0,0,0,0,0,0,0,0,32,32,123,32,47,72,83,86,115,32,101,120,99,104,32,100,101,102,32,47,72,83,86,118,32,101,120,99,104,32,100,101,102,32,54,46,48,32,109,117,108,32,100,117,112,32,102,108,111,111,114,32,100,117,112,32,51,32,49,32,114,111,108,108,32,115,117,98,10,32,0,0,66,121,116,101,79,114,100,101,114,0,0,0,0,0,0,0,110,111,110,45,105,110,116,101,103,101,114,32,112,97,115,115,101,100,32,116,111,32,98,111,111,108,101,97,110,32,111,112,101,114,97,116,111,114,0,0,37,50,100,0,0,0,0,0,32,32,101,120,99,104,32,100,117,112,32,48,46,48,32,101,113,32,123,112,111,112,32,101,120,99,104,32,112,111,112,32,100,117,112,32,100,117,112,125,32,37,32,97,99,104,114,111,109,97,116,105,99,32,103,114,97,121,10,0,0,0,0,0,111,36,117,116,112,117,116,0,47,72,83,86,50,82,71,66,32,123,0,0,0,0,0,0,9,100,97,116,97,102,105,108,101,32,102,105,101,108,100,115,32,115,101,112,97,114,97,116,101,100,32,98,121,32,119,104,105,116,101,115,112,97,99,101,10,0,0,0,0,0,0,0,110,111,111,117,116,36,108,105,101,114,115,0,0,0,0,0,115,101,116,32,115,116,121,108,101,32,102,105,108,108,32,0,47,99,70,37,105,32,123,37,115,125,32,98,105,110,100,32,100,101,102,9,37,37,32,37,115,10,0,0,0,0,0,0,32,32,32,32,123,47,100,103,100,120,118,97,108,32,100,103,100,120,32,100,101,102,32,114,101,100,118,97,108,117,101,32,103,114,101,101,110,118,97,108,117,101,32,98,108,117,101,118,97,108,117,101,125,32,105,102,101,108,115,101,125,32,100,101,102,10,0,0,0,0,0,0,32,32,32,32,123,82,101,100,65,32,103,105,100,120,32,103,101,116,32,71,114,101,101,110,65,32,103,105,100,120,32,103,101,116,32,66,108,117,101,65,32,103,105,100,120,32,103,101,116,125,10,0,0,0,0,0,32,32,103,114,97,121,105,110,100,101,120,32,103,114,97,121,118,32,71,114,97,121,65,32,103,105,100,120,32,103,101,116,32,115,117,98,32,97,98,115,32,49,101,45,53,32,108,101,10,0,0,0,0,0,0,0,47,105,110,116,101,114,112,111,108,97,116,101,32,123,10,0,32,32,66,108,117,101,65,32,103,105,100,120,32,103,101,116,32,115,117,98,32,100,103,100,120,118,97,108,32,109,117,108,32,97,100,100,125,32,100,101,102,10,0,0,0,0,0,0,47,98,108,117,101,118,97,108,117,101,32,123,66,108,117,101,65,32,103,105,100,120,32,103,101,116,32,66,108,117,101,65,32,103,105,100,120,32,49,32,115,117,98,32,103,101,116,10,0,0,0,0,0,0,0,0,32,32,71,114,101,101,110,65,32,103,105,100,120,32,103,101,116,32,115,117,98,32,100,103,100,120,118,97,108,32,109,117,108,32,97,100,100,125,32,100,101,102,10,0,0,0,0,0,115,116,97,99,107,32,111,118,101,114,102,108,111,119,0,0,120,94,50,0,0,0,0,0,112,97,116,116,101,114,110,32,102,105,108,108,0,0,0,0,47,103,114,101,101,110,118,97,108,117,101,32,123,71,114,101,101,110,65,32,103,105,100,120,32,103,101,116,32,71,114,101,101,110,65,32,103,105,100,120,32,49,32,115,117,98,32,103,101,116,10,0,0,0,0,0,111,114,36,105,103,105,110,0,32,32,82,101,100,65,32,103,105,100,120,32,103,101,116,32,115,117,98,32,100,103,100,120,118,97,108,32,109,117,108,32,97,100,100,125,32,100,101,102,10,0,0,0,0,0,0,0,9,100,97,116,97,102,105,108,101,32,102,105,101,108,100,115,32,115,101,112,97,114,97,116,101,100,32,98,121,32,34,37,99,34,10,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,39,100,97,116,97,39,44,32,39,102,117,110,99,116,105,111,110,39,44,32,39,108,105,110,101,39,44,32,39,102,105,108,108,39,44,32,39,114,101,99,116,97,110,103,108,101,39,44,32,39,99,105,114,99,108,101,39,44,32,39,101,108,108,105,112,115,101,39,32,111,114,32,39,97,114,114,111,119,39,0,0,0,0,0,0,0,47,114,101,100,118,97,108,117,101,32,123,82,101,100,65,32,103,105,100,120,32,103,101,116,32,82,101,100,65,32,103,105,100,120,32,49,32,115,117,98,32,103,101,116,10,0,0,0,96,37,115,39,10,0,0,0,32,32,71,114,97,121,65,32,103,105,100,120,32,103,101,116,32,115,117,98,32,100,105,118,125,32,100,101,102,32,10,0,47,100,103,100,120,32,123,103,114,97,121,118,32,71,114,97,121,65,32,103,105,100,120,32,103,101,116,32,115,117,98,32,71,114,97,121,65,32,103,105,100,120,32,49,32,115,117,98,32,103,101,116,10,0,0,0,32,32,123,71,114,97,121,65,32,103,105,100,120,32,103,101,116,32,103,114,97,121,118,32,103,101,32,123,101,120,105,116,125,32,105,102,32,47,103,105,100,120,32,103,105,100,120,32,49,32,97,100,100,32,100,101,102,125,32,108,111,111,112,125,32,100,101,102,10,0,0,0,47,103,114,97,121,105,110,100,101,120,32,123,47,103,105,100,120,32,48,32,100,101,102,10,0,0,0,0,0,0,0,0,93,32,100,101,102,10,0,0,47,37,115,32,91,0,0,0,66,108,117,101,65,0,0,0,78,111,110,45,110,117,109,101,114,105,99,32,115,116,114,105,110,103,32,102,111,117,110,100,32,119,104,101,114,101,32,97,32,110,117,109,101,114,105,99,32,101,120,112,114,101,115,115,105,111,110,32,119,97,115,32,101,120,112,101,99,116,101,100,0,0,0,0,0,0,0,0,116,97,103,32,109,117,115,116,32,98,101,32,62,32,122,101,114,111,0,0,0,0,0,0,108,105,110,101,119,105,100,116,104,0,0,0,0,0,0,0,71,114,101,101,110,65,0,0,111,102,36,102,115,101,116,115,0,0,0,0,0,0,0,0,82,101,100,65,0,0,0,0,115,101,112,36,97,114,97,116,111,114,0,0,0,0,0,0,117,36,115,101,114,115,116,121,108,101,115,0,0,0,0,0,71,114,97,121,65,0,0,0,37,99,32,0,0,0,0,0,32,100,101,102,10,0,0,0,37,115,58,37,100,32,111,111,111,112,115,58,32,85,110,107,110,111,119,110,32,99,111,108,111,114,32,109,111,100,101,108,32,39,37,99,39,46,32,87,105,108,108,32,98,101,32,82,71,66,10,0,0,0,0,0,10,9,32,32,32,32,71,101,110,101,114,97,116,101,32,99,111,111,114,100,105,110,97,116,101,115,58,32,37,115,0,0,40,88,89,90,41,0,0,0,40,89,73,81,41,0,0,0,37,45,49,53,46,49,53,115,32,61,32,37,45,49,53,46,49,53,115,32,32,32,37,115,0,0,0,0,0,0,0,0,40,67,77,89,41,0,0,0,40,72,83,86,41,0,0,0,40,82,71,66,41,0,0,0,115,116,97,99,107,32,117,110,100,101,114,102,108,111,119,32,40,102,117,110,99,116,105,111,110,32,99,97,108,108,32,119,105,116,104,32,109,105,115,115,105,110,103,32,112,97,114,97,109,101,116,101,114,115,63,41,0,0,0,0,0,0,0,0,32,32,108,119,32,37,49,100,37,99,0,0,0,0,0,0,47,67,111,108,111,114,83,112,97,99,101,32,0,0,0,0,120,37,100,0,0,0,0,0,110,111,109,99,98,116,36,105,99,115,0,0,0,0,0,0,32,32,47,103,32,123,115,116,114,111,107,101,32,112,109,51,100,114,111,117,110,100,32,112,109,51,100,71,97,109,109,97,32,101,120,112,32,115,101,116,103,114,97,121,125,32,98,105,110,100,32,100,101,102,10,0,9,34,37,115,34,32,105,110,32,100,97,116,97,102,105,108,101,32,105,115,32,105,110,116,101,114,112,114,101,116,101,100,32,97,115,32,109,105,115,115,105,110,103,32,118,97,108,117,101,10,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,39,117,110,105,116,115,32,123,120,121,124,120,120,124,121,121,125,39,44,32,39,97,110,103,108,101,32,60,110,117,109,98,101,114,62,39,32,111,114,32,39,115,105,122,101,32,60,112,111,115,105,116,105,111,110,62,39,0,0,0,0,0,115,101,116,32,98,111,120,119,105,100,116,104,32,37,103,32,37,115,10,0,0,0,0,0,125,123,10,0,0,0,0,0,32,37,45,49,50,115,32,0,32,32,125,32,105,102,101,108,115,101,10,0,0,0,0,0,10,32,32,32,32,32,32,32,83,101,108,101,99,116,83,112,97,99,101,32,115,101,116,114,103,98,99,111,108,111,114,125,32,98,105,110,100,32,100,101,102,10,0,0,0,0,0,0,103,112,95,105,110,112,117,116,95,108,105,110,101,0,0,0,99,70,37,105,32,67,111,110,115,116,114,97,105,110,32,0,99,70,37,105,32,67,111,110,115,116,114,97,105,110,32,101,120,99,104,32,0,0,0,0,36,40,0,0,0,0,0,0,99,70,37,105,32,67,111,110,115,116,114,97,105,110,32,101,120,99,104,32,100,117,112,32,0,0,0,0,0,0,0,0,70,111,114,109,97,116,32,99,104,97,114,97,99,116,101,114,32,109,105,115,109,97,116,99,104,58,32,37,37,99,32,105,115,32,111,110,108,121,32,118,97,108,105,100,32,119,105,116,104,32,37,37,115,0,0,0,49,32,101,120,99,104,32,115,117,98,32,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,39,100,97,116,97,39,44,32,39,102,117,110,99,116,105,111,110,39,44,32,39,108,105,110,101,39,44,32,39,102,105,108,108,39,32,111,114,32,39,97,114,114,111,119,39,0,112,109,0,0,0,0,0,0,32,32,47,103,32,123,115,116,114,111,107,101,32,112,109,51,100,114,111,117,110,100,32,100,117,112,32,0,0,0,0,0,10,119,97,114,110,105,110,103,58,32,32,105,110,116,101,114,110,97,108,32,101,114,114,111,114,45,45,115,116,97,99,107,32,110,111,116,32,101,109,112,116,121,33,10,32,32,32,32,32,32,32,32,32,32,40,102,117,110,99,116,105,111,110,32,99,97,108,108,101,100,32,119,105,116,104,32,116,111,111,32,109,97,110,121,32,112,97,114,97,109,101,116,101,114,115,63,41,10,0,0,0,0,0,0,37,100,0,0,0,0,0,0,32,32,125,123,10,0,0,0,73,110,102,0,0,0,0,0,109,99,98,116,36,105,99,115,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,83,101,108,101,99,116,83,112,97,99,101,32,115,101,116,114,103,98,99,111,108,111,114,125,32,98,105,110,100,32,100,101,102,10,0,0,0,0,0,0,9,78,111,32,109,105,115,115,105,110,103,32,100,97,116,97,32,115,116,114,105,110,103,32,115,101,116,32,102,111,114,32,100,97,116,97,102,105,108,101,10,0,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,39,120,121,39,44,32,39,120,120,39,32,111,114,32,39,121,121,39,0,0,0,0,115,101,116,32,98,111,120,119,105,100,116,104,10,0,0,0,32,32,32,32,47,103,32,123,115,116,114,111,107,101,32,112,109,51,100,114,111,117,110,100,32,47,103,114,97,121,118,32,101,120,99,104,32,100,101,102,32,105,110,116,101,114,112,111,108,97,116,101,10,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,42,32,105,110,100,105,99,97,116,101,115,32,116,104,105,115,32,107,101,121,32,105,115,32,97,99,116,105,118,101,32,102,114,111,109,32,97,108,108,32,112,108,111,116,32,119,105,110,100,111,119,115,10,0,0,0,0,0,32,32,73,110,116,101,114,112,111,108,97,116,101,100,67,111,108,111,114,32,123,32,37,37,32,73,110,116,101,114,112,111,108,97,116,105,111,110,32,118,115,46,32,82,71,66,45,70,111,114,109,117,108,97,10,0,67,111,108,111,114,32,73,110,116,101,114,112,111,108,97,116,101,100,67,111,108,111,114,32,111,114,32,123,32,37,32,67,79,76,79,85,82,32,118,115,46,32,71,82,65,89,32,109,97,112,10,0,0,0,0,0,101,10,0,0,0,0,0,0,107,111,105,56,114,0,0,0,102,97,108,115,101,32,123,32,37,32,67,79,76,79,85,82,32,118,115,46,32,71,82,65,89,32,109,97,112,10,0,0,32,32,112,105,120,101,108,0,47,112,109,51,100,71,97,109,109,97,32,49,46,48,32,37,103,32,71,97,109,109,97,32,109,117,108,32,100,105,118,32,100,101,102,10,0,0,0,0,117,109,105,110,117,115,0,0,9,123,112,111,112,32,49,125,32,123,109,97,120,99,111,108,111,114,115,32,109,117,108,32,102,108,111,111,114,32,109,97,120,99,111,108,111,114,115,32,49,32,115,117,98,32,100,105,118,125,32,105,102,101,108,115,101,125,32,105,102,125,32,100,101,102,10,0,0,0,0,0,47,112,109,51,100,114,111,117,110,100,32,123,109,97,120,99,111,108,111,114,115,32,48,32,103,116,32,123,100,117,112,32,49,32,103,101,10,0,0,0,46,46,47,116,101,114,109,47,112,111,115,116,46,116,114,109,0,0,0,0,0,0,0,0,117,110,107,110,111,119,110,32,116,121,112,101,32,105,110,32,97,110,103,108,101,40,41,0,115,104,111,119,32,116,105,99,115,99,97,108,101,0,0,0,37,115,58,37,100,32,111,111,111,112,115,58,32,85,110,107,110,111,119,110,32,99,111,108,111,114,32,109,111,100,101,32,39,37,99,39,10,0,0,0,110,111,109,122,116,36,105,99,115,0,0,0,0,0,0,0,9,32,32,32,32,68,105,109,101,110,115,105,111,110,58,32,0,0,0,0,0,0,0,0,104,105,36,115,116,111,114,121,0,0,0,0,0,0,0,0,47,73,110,116,101,114,112,111,108,97,116,101,100,67,111,108,111,114,32,116,114,117,101,32,100,101,102,10,0,0,0,0,109,105,115,115,36,105,110,103,0,0,0,0,0,0,0,0,121,121,0,0,0,0,0,0,47,73,110,116,101,114,112,111,108,97,116,101,100,67,111,108,111,114,32,102,97,108,115,101,32,100,101,102,10,0,0,0,37,48,46,52,102,9,37,48,46,52,102,10,0,0,0,0,99,108,111,115,101,32,116,104,105,115,32,112,108,111,116,32,119,105,110,100,111,119,0,0,47,109,97,120,99,111,108,111,114,115,32,37,105,32,100,101,102,10,0,0,0,0,0,0,103,115,97,118,101,32,37,32,99,111,108,111,117,114,32,112,97,108,101,116,116,101,32,98,101,103,105,110,10,0,0,0,37,115,32,104,97,115,32,37,115,32,99,111,111,114,100,32,111,102,32,37,103,59,32,109,117,115,116,32,98,101,32,97,98,111,118,101,32,48,32,102,111,114,32,108,111,103,32,115,99,97,108,101,33,0,0,0,103,114,101,115,116,111,114,101,32,37,32,99,111,108,111,117,114,32,112,97,108,101,116,116,101,32,101,110,100,10,0,0,37,115,32,103,32,0,0,0,49,32,103,32,0,0,0,0,45,82,69,65,68,76,73,78,69,32,32,0,0,0,0,0,48,32,103,32,0,0,0,0,37,51,46,50,102,32,37,51,46,50,102,32,37,51,46,50,102,32,67,32,0,0,0,0,117,110,107,110,111,119,110,32,116,121,112,101,32,105,110,32,109,97,103,110,105,116,117,100,101,40,41,0,0,0,0,0,99,97,110,39,116,32,114,111,116,97,116,101,32,116,101,120,116,0,0,0,0,0,0,0,76,67,37,49,99,32,115,101,116,114,103,98,99,111,108,111,114,10,0,0,0,0,0,0,105,110,118,97,108,105,100,32,99,111,109,112,108,101,120,32,99,111,110,115,116,97,110,116,0,0,0,0,0,0,0,0,109,122,116,36,105,99,115,0,10,9,32,32,82,101,99,111,114,100,32,37,100,58,10,0,80,76,32,0,0,0,0,0,9,109,111,117,115,101,32,105,115,32,111,102,102,10,0,0,101,120,112,101,99,116,105,110,103,32,100,97,116,97,102,105,108,101,32,109,111,100,105,102,105,101,114,0,0,0,0,0,112,110,103,0,0,0,0,0,120,120,0,0,0,0,0,0,115,101,116,32,37,115,100,97,116,97,32,37,115,10,0,0,32,80,97,116,116,101,114,110,37,100,32,102,105,108,108,32,103,114,101,115,116,111,114,101,10,0,0,0,0,0,0,0,113,0,0,0,0,0,0,0,32,37,46,49,102,32,80,111,108,121,70,105,108,108,10,0,32,47,84,114,97,110,115,112,97,114,101,110,116,80,97,116,116,101,114,110,115,32,116,114,117,101,32,100,101,102,10,0,32,37,46,50,102,32,80,111,108,121,70,105,108,108,10,0,32,49,32,80,111,108,121,70,105,108,108,10,0,0,0,0,32,37,105,32,37,105,32,76,0,0,0,0,0,0,0,0,10,84,101,114,109,105,110,97,108,32,116,121,112,101,32,115,101,116,32,116,111,32,39,37,115,39,10,0,0,0,0,0,32,37,105,32,37,105,32,86,0,0,0,0,0,0,0,0,103,115,97,118,101,32,0,0,117,110,107,110,111,119,110,32,116,121,112,101,32,105,110,32,105,109,97,103,40,41,0,0,32,114,111,116,97,116,101,100,32,98,121,32,45,52,53,32,100,101,103,0,0,0,0,0,32,37,105,32,37,105,32,37,105,32,37,105,32,37,105,32,37,105,32,104,10,0,0,0,110,111,109,121,50,116,36,105,99,115,0,0,0,0,0,0,10,9,32,32,68,101,102,97,117,108,116,32,98,105,110,97,114,121,32,102,111,114,109,97,116,58,32,37,115,0,0,0,99,116,114,108,45,0,0,0,37,105,32,37,105,32,78,0,110,111,116,32,0,0,0,0,42,114,101,116,117,114,110,95,110,117,109,95,98,121,116,101,115,32,60,61,32,109,97,120,95,101,110,99,111,100,101,100,95,98,121,116,101,115,0,0,117,110,105,116,36,115,0,0,48,32,121,48,32,78,32,49,32,48,32,86,32,48,32,121,115,116,101,112,32,86,32,45,49,32,48,32,102,10,0,0,115,101,116,32,116,105,109,101,102,109,116,32,37,115,32,34,37,115,34,10,0,0,0,0,112,100,112,32,40,109,105,100,100,108,101,41,0,0,0,0,85,110,101,120,112,101,99,116,101,100,32,125,0,0,0,0,102,105,118,101,95,100,105,97,103,32,104,101,108,112,32,118,97,114,115,0,0,0,0,0,32,37,45,49,50,115,32,42,32,37,115,10,0,0,0,0,126,62,0,0,0,0,0,0,115,116,114,95,99,111,110,115,116,0,0,0,0,0,0,0,37,49,120,0,0,0,0,0,44,32,39,45,39,32,119,32,108,32,116,105,116,108,101,32,39,78,84,83,67,39,32,108,116,32,45,49,0,0,0,0,101,110,99,111,100,101,100,32,105,109,97,103,101,0,0,0,37,115,105,109,97,103,101,10,0,0,0,0,0,0,0,0,37,115,102,97,108,115,101,32,51,10,37,115,99,111,108,111,114,105,109,97,103,101,10,0,32,32,99,117,114,114,101,110,116,102,105,108,101,32,47,65,83,67,73,73,56,53,68,101,99,111,100,101,32,102,105,108,116,101,114,10,0,0,0,0,68,105,100,32,121,111,117,32,116,114,121,32,116,111,32,103,101,110,101,114,97,116,101,32,97,32,102,105,108,101,32,110,97,109,101,32,117,115,105,110,103,32,100,117,109,109,121,32,118,97,114,105,97,98,108,101,32,120,32,111,114,32,121,63,0,0,0,0,0,0,0,0,32,114,111,116,97,116,101,100,32,98,121,32,43,52,53,32,100,101,103,0,0,0,0,0,123,99,117,114,114,101,110,116,102,105,108,101,32,105,109,97,103,101,98,117,102,32,114,101,97,100,104,101,120,115,116,114,105,110,103,32,112,111,112,125,10,0,0,0,0,0,0,0,109,121,50,116,36,105,99,115,0,0,0,0,0,0,0,0,10,9,32,32,70,105,108,101,32,69,110,100,105,97,110,110,101,115,115,58,32,37,115,0,47,105,109,97,103,101,98,117,102,32,37,100,32,115,116,114,105,110,103,32,100,101,102,10,0,0,0,0,0,0,0,0,9,99,111,109,109,117,110,105,99,97,116,105,111,110,32,99,111,109,109,97,110,100,115,32,119,105,108,108,32,37,115,98,101,32,115,104,111,119,110,10,0,0,0,0,0,0,0,0,97,110,103,36,108,101,0,0,58,32,0,0,0,0,0,0,117,110,115,101,116,32,98,111,114,100,101,114,10,0,0,0,37,115,91,32,37,100,32,48,32,48,32,37,100,32,48,32,48,32,93,10,0,0,0,0,114,97,105,115,101,32,103,110,117,112,108,111,116,32,99,111,110,115,111,108,101,32,119,105,110,100,111,119,0,0,0,0,37,115,37,100,32,37,100,32,37,100,10,0,0,0,0,0,37,115,37,100,32,37,100,32,115,99,97,108,101,10,0,0,98,108,117,101,39,119,32,108,32,108,116,32,51,32,108,99,32,114,103,98,32,39,98,108,117,101,39,0,0,0,0,0,121,0,0,0,0,0,0,0,37,115,37,100,32,37,100,32,116,114,97,110,115,108,97,116,101,10,0,0,0,0,0,0,37,115,123,112,109,51,100,71,97,109,109,97,32,101,120,112,125,32,115,101,116,116,114,97,110,115,102,101,114,10,0,0,9,32,32,87,105,108,108,32,37,115,117,115,101,32,111,116,104,101,114,32,100,105,97,103,111,110,97,108,32,105,102,32,105,116,32,103,105,118,101,115,32,97,32,108,101,115,115,32,106,97,103,103,121,32,111,117,116,108,105,110,101,10,9,32,32,87,105,108,108,32,37,115,100,114,97,119,32,100,105,97,103,111,110,97,108,32,118,105,115,105,98,108,121,32,105,102,32,113,117,97,100,114,97,110,103,108,101,32,105,115,32,39,98,101,110,116,32,111,118,101,114,39,10,0,0,0,0,0,37,115,103,115,97,118,101,10,0,0,0,0,0,0,0,0,37,37,37,37,69,110,100,73,109,97,103,101,10,0,0,0,99,111,110,116,111,117,114,32,101,100,103,101,0,0,0,0,103,114,101,115,116,111,114,101,10,0,0,0,0,0,0,0,101,110,99,111,117,110,116,101,114,101,100,32,97,32,115,116,114,105,110,103,32,119,104,101,110,32,101,120,112,101,99,116,105,110,103,32,97,32,110,117,109,98,101,114,0,0,0,0,114,111,116,97,116,101,100,32,99,101,43,110,116,114,101,100,32,116,101,120,116,0,0,0,10,73,110,116,101,114,112,114,101,116,76,101,118,101,108,49,32,110,111,116,32,123,10,32,32,103,114,101,115,116,111,114,101,10,125,32,105,102,10,0,110,111,109,121,116,36,105,99,115,0,0,0,0,0,0,0,10,103,114,101,115,116,111,114,101,10,0,0,0,0,0,0,9,122,111,111,109,106,117,109,112,32,105,115,32,37,115,10,0,0,0,0,0,0,0,0,115,101,116,32,98,111,114,100,101,114,32,37,100,32,37,115,0,0,0,0,0,0,0,0,32,32,47,73,110,116,101,114,112,111,108,97,116,101,32,102,97,108,115,101,10,62,62,10,105,109,97,103,101,10,0,0,83,112,97,99,101,0,0,0,32,32,47,77,117,108,116,105,112,108,101,68,97,116,97,83,111,117,114,99,101,115,32,102,97,108,115,101,10,0,0,0,32,32,47,68,97,116,97,83,111,117,114,99,101,32,99,117,114,114,101,110,116,102,105,108,101,32,47,65,83,67,73,73,56,53,68,101,99,111,100,101,32,102,105,108,116,101,114,10,0,0,0,0,0,0,0,0,103,114,101,101,110,39,119,32,108,32,108,116,32,50,32,108,99,32,114,103,98,32,39,103,114,101,101,110,39,0,0,0,32,32,47,68,97,116,97,83,111,117,114,99,101,32,123,99,117,114,114,101,110,116,102,105,108,101,32,105,109,97,103,101,98,117,102,32,114,101,97,100,104,101,120,115,116,114,105,110,103,32,112,111,112,125,10,0,112,118,101,114,116,0,0,0,32,32,47,68,101,99,111,100,101,32,91,32,48,32,37,100,32,93,10,0,0,0,0,0,32,32,47,66,105,116,115,80,101,114,67,111,109,112,111,110,101,110,116,32,37,100,10,32,32,47,73,109,97,103,101,77,97,116,114,105,120,32,91,32,37,100,32,48,32,48,32,37,100,32,48,32,48,32,93,10,0,0,0,0,0,0,0,0,32,61,9,10,0,0,0,0,60,60,10,32,32,47,73,109,97,103,101,84,121,112,101,32,49,10,32,32,47,87,105,100,116,104,32,37,100,10,32,32,47,72,101,105,103,104,116,32,37,100,10,0,0,0,0,0,115,116,0,0,0,0,0,0,37,37,37,37,69,110,100,80,97,108,101,116,116,101,10,0,117,110,107,110,111,119,110,32,116,121,112,101,32,105,110,32,114,101,97,108,40,41,0,0,10,32,32,62,10,93,32,115,101,116,99,111,108,111,114,115,112,97,99,101,10,0,0,0,114,105,103,104,116,32,106,117,115,116,105,102,105,101,100,0,68,97,116,97,84,121,112,101,0,0,0,0,0,0,0,0,109,121,116,36,105,99,115,0,32,37,50,46,50,120,37,50,46,50,120,37,50,46,50,120,0,0,0,0,0,0,0,0,9,66,117,116,116,111,110,32,50,32,100,114,97,119,115,32,116,101,109,112,111,114,97,114,121,32,108,97,98,101,108,115,10,0,0,0,0,0,0,0,114,36,97,100,105,117,115,0,117,110,0,0,0,0,0,0,91,32,47,73,110,100,101,120,101,100,10,32,32,47,68,101,118,105,99,101,82,71,66,32,37,100,10,32,32,60,0,0,32,37,45,49,50,115,32,32,32,37,115,10,0,0,0,0,37,37,37,37,66,101,103,105,110,80,97,108,101,116,116,101,10,0,0,0,0,0,0,0,37,100,32,37,100,32,115,99,97,108,101,10,0,0,0,0,114,101,100,39,119,32,108,32,108,116,32,49,32,108,99,32,114,103,98,32,39,114,101,100,39,0,0,0,0,0,0,0,37,100,32,37,100,32,116,114,97,110,115,108,97,116,101,10,0,0,0,0,0,0,0,0,103,115,97,118,101,10,0,0,125,32,123,10,0,0,0,0,67,111,117,108,100,32,110,111,116,32,114,101,110,97,109,101,32,102,105,108,101,32,37,115,32,116,111,32,37,115,0,0,32,32,52,48,32,45,49,49,48,32,82,10,32,32,40,80,83,32,108,101,118,101,108,32,50,32,105,109,97,103,101,41,32,76,115,104,111,119,10,32,32,37,37,32,82,101,97,100,32,100,97,116,97,32,98,117,116,32,105,103,110,111,114,101,32,105,116,10,32,32,47,105,109,97,103,101,98,117,102,32,37,100,32,115,116,114,105,110,103,32,100,101,102,10,32,32,99,117,114,114,101,110,116,102,105,108,101,32,105,109,97,103,101,98,117,102,32,114,101,97,100,115,116,114,105,110,103,10,0,0,0,0,0,0,0,0,125,32,105,102,101,108,115,101,10,0,0,0,0,0,0,0,105,115,111,32,99,117,114,118,101,0,0,0,0,0,0,0,118,97,108,117,101,0,0,0,100,117,112,32,109,117,108,0,99,101,110,116,114,101,43,100,32,116,101,120,116,0,0,0,32,32,99,117,114,114,101,110,116,102,105,108,101,32,105,109,97,103,101,98,117,102,32,114,101,97,100,115,116,114,105,110,103,10,125,32,123,10,0,0,110,111,109,120,50,116,36,105,99,115,0,0,0,0,0,0,10,9,32,32,70,105,108,101,32,84,121,112,101,58,32,0,32,32,47,105,109,97,103,101,98,117,102,32,37,100,32,115,116,114,105,110,103,32,100,101,102,10,0,0,0,0,0,0,9,66,117,116,116,111,110,32,50,32,100,114,97,119,115,32,112,101,114,115,105,115,116,101,110,116,32,108,97,98,101,108,115,32,119,105,116,104,32,111,112,116,105,111,110,115,32,34,37,115,34,10,0,0,0,0,115,116,121,108,101,32,110,111,116,32,117,115,97,98,108,101,32,102,111,114,32,102,117,110,99,116,105,111,110,32,112,108,111,116,115,44,32,108,101,102,116,32,117,110,99,104,97,110,103,101,100,0,0,0,0,0,37,115,115,101,116,32,99,108,105,112,32,112,111,105,110,116,115,10,37,115,115,101,116,32,99,108,105,112,32,111,110,101,10,37,115,115,101,116,32,99,108,105,112,32,116,119,111,10,115,101,116,32,98,97,114,32,37,102,32,37,115,10,0,0,32,32,52,48,32,45,49,49,48,32,82,10,32,32,40,80,83,32,108,101,118,101,108,32,50,32,105,109,97,103,101,41,32,76,115,104,111,119,10,32,32,37,32,82,101,97,100,32,100,97,116,97,32,98,117,116,32,105,103,110,111,114,101,32,105,116,10,0,0,0,0,0,101,120,112,97,110,100,105,110,103,32,99,117,114,118,101,32,112,111,105,110,116,115,0,0,122,111,111,109,32,111,117,116,32,111,110,108,121,32,116,104,101,32,88,32,97,120,105,115,46,0,0,0,0,0,0,0,32,32,37,100,32,37,100,32,76,10,0,0,0,0,0,0,32,32,48,32,37,100,32,86,10,0,0,0,0,0,0,0,39,45,39,116,105,116,39,0,32,32,37,100,32,48,32,86,10,0,0,0,0,0,0,0,32,32,37,100,32,37,100,32,77,10,0,0,0,0,0,0,45,45,118,101,114,115,105,111,110,0,0,0,0,0,0,0,73,110,116,101,114,112,114,101,116,76,101,118,101,108,49,32,123,10,32,32,37,37,32,67,111,110,115,116,114,117,99,116,32,97,32,98,111,120,32,105,110,115,116,101,97,100,32,111,102,32,105,109,97,103,101,10,32,32,76,84,98,10,0,0,46,111,108,100,0,0,0,0,103,115,97,118,101,32,37,100,32,37,100,32,78,32,37,100,32,37,100,32,76,32,37,100,32,37,100,32,76,32,37,100,32,37,100,32,76,32,90,32,99,108,105,112,10,0,0,0,37,37,37,37,66,101,103,105,110,73,109,97,103,101,10,0,101,120,105,115,116,115,0,0,108,101,102,116,32,106,117,115,116,105,102,105,101,100,0,0,71,78,85,80,76,79,84,32,40,112,111,115,116,46,116,114,109,41,58,32,32,67,111,109,112,111,110,101,110,116,32,98,105,116,115,32,40,37,100,41,32,111,117,116,32,111,102,32,114,97,110,103,101,46,10,0,109,120,50,116,36,105,99,115,0,0,0,0,0,0,0,0,9,68,101,102,97,117,108,116,32,98,105,110,97,114,121,32,100,97,116,97,32,102,105,108,101,32,115,101,116,116,105,110,103,115,32,40,105,110,45,102,105,108,101,32,115,101,116,116,105,110,103,115,32,109,97,121,32,111,118,101,114,114,105,100,101,41,58,10,0,0,0,0,47,37,115,32,37,115,0,0,9,97,108,116,101,114,110,97,116,105,118,101,32,102,111,114,109,97,116,32,102,111,114,32,66,117,116,116,111,110,32,50,32,105,115,32,39,37,115,39,10,0,0,0,0,0,0,0,99,97,110,110,111,116,32,111,112,101,110,32,116,97,98,108,101,32,111,117,116,112,117,116,32,102,105,108,101,0,0,0,35,32,115,101,116,32,116,101,114,109,105,110,97,108,32,117,110,107,110,111,119,110,10,0,114,101,101,110,99,111,100,101,75,79,73,56,85,32,100,101,102,10,0,0,0,0,0,0,60,115,104,105,102,116,45,99,111,110,116,114,111,108,45,119,104,101,101,108,45,100,111,119,110,62,0,0,0,0,0,0,114,101,101,110,99,111,100,101,67,80,49,50,53,49,32,100,101,102,10,0,0,0,0,0,114,101,101,110,99,111,100,101,67,80,49,50,53,48,32,100,101,102,10,0,0,0,0,0,114,101,101,110,99,111,100,101,75,79,73,56,82,32,100,101,102,10,0,0,0,0,0,0,99,111,110,115,116,97,110,116,32,101,120,112,114,101,115,115,105,111,110,32,114,101,113,117,105,114,101,100,0,0,0,0,114,101,101,110,99,111,100,101,67,80,56,53,50,32,100,101,102,10,0,0,0,0,0,0,114,101,101,110,99,111,100,101,67,80,56,53,48,32,100,101,102,10,0,0,0,0,0,0,70,73,84,95,76,73,77,73,84,0,0,0,0,0,0,0,114,101,101,110,99,111,100,101,67,80,52,51,55,32,100,101,102,10,0,0,0,0,0,0,118,101,99,0,0,0,0,0,114,101,101,110,99,111,100,101,73,83,79,49,53,32,100,101,102,10,0,0,0,0,0,0,101,120,105,115,116,0,0,0])
+.concat([115,101,116,32,116,101,114,109,111,112,116,32,110,111,101,110,104,0,0,0,0,0,0,0,114,101,101,110,99,111,100,101,73,83,79,57,32,100,101,102,10,0,0,0,0,0,0,0,110,111,109,120,116,36,105,99,115,0,0,0,0,0,0,0,100,97,116,97,102,105,108,101,32,99,111,108,117,109,110,115,32,98,105,110,97,114,121,32,105,110,102,111,114,109,97,116,105,111,110,0,0,0,0,0,114,101,101,110,99,111,100,101,73,83,79,50,32,100,101,102,10,0,0,0,0,0,0,0,9,102,111,114,109,97,116,32,102,111,114,32,66,117,116,116,111,110,32,50,32,105,115,32,37,100,10,0,0,0,0,0,35,32,115,101,116,32,116,101,114,109,105,110,97,108,32,37,115,32,37,115,10,0,0,0,114,101,101,110,99,111,100,101,73,83,79,32,100,101,102,10,0,0,0,0,0,0,0,0,122,111,111,109,32,105,110,32,111,110,108,121,32,116,104,101,32,88,32,97,120,105,115,46,0,0,0,0,0,0,0,0,80,111,115,116,83,99,114,105,112,116,32,70,111,110,116,32,114,101,99,111,114,100,0,0,123,125,91,93,40,41,32,0,99,97,110,110,111,116,32,119,114,105,116,101,32,116,101,109,112,111,114,97,114,121,32,102,105,108,101,0,0,0,0,0,83,121,109,98,111,108,45,79,98,108,105,113,117,101,0,0,37,115,40,0,0,0,0,0,71,78,85,80,76,79,84,95,70,79,78,84,80,65,84,72,0,0,0,0,0,0,0,0,91,40,37,115,41,32,37,46,49,102,32,37,46,49,102,32,37,115,32,37,115,32,37,100,32,0,0,0,0,0,0,0,70,73,84,95,77,65,88,73,84,69,82,0,0,0,0,0,70,111,114,109,97,116,32,99,104,97,114,97,99,116,101,114,32,109,105,115,109,97,116,99,104,58,32,37,37,83,32,105,115,32,111,110,108,121,32,118,97,108,105,100,32,119,105,116,104,32,37,37,115,0,0,0,69,78,72,80,83,95,111,112,101,110,115,101,113,117,101,110,99,101,0,0,0,0,0,0,71,78,85,84,69,82,77,0,97,109,0,0,0,0,0,0,88,89,114,101,115,116,111,114,101,10,0,0,0,0,0,0,115,121,115,116,101,109,0,0,69,110,104,97,110,99,101,100,32,116,101,120,116,58,32,32,32,123,120,64,95,123,48,125,94,123,110,43,49,125,125,0,88,89,115,97,118,101,10,0,109,120,116,36,105,99,115,0,99,111,108,32,62,32,48,0,41,93,10,0,0,0,0,0,9,97,108,116,101,114,110,97,116,105,118,101,32,102,111,114,109,97,116,32,102,111,114,32,66,117,116,116,111,110,32,49,32,105,115,32,39,37,115,39,10,0,0,0,0,0,0,0,79,112,116,105,111,110,115,32,97,114,101,32,39,37,115,39,10,0,0,0,0,0,0,0,37,115,37,103,44,32,37,115,37,103,44,32,37,115,37,103,0,0,0,0,0,0,0,0,117,110,105,37,48,52,108,88,0,0,0,0,0,0,0,0,60,115,104,105,102,116,45,99,111,110,116,114,111,108,45,119,104,101,101,108,45,117,112,62,0,0,0,0,0,0,0,0,117,37,108,88,0,0,0,0,37,115,47,0,0,0,0,0,99,111,109,98,105,110,97,116,105,111,110,32,114,103,98,32,111,114,32,103,98,114,32,111,114,32,98,114,103,32,101,116,99,46,32,101,120,112,101,99,116,101,100,0,0,0,0,0,37,37,32,69,110,100,32,112,108,111,116,32,35,37,100,10,0,0,0,0,0,0,0,0,99,112,49,50,53,52,0,0,105,110,116,101,114,112,111,108,97,116,105,111,110,32,116,97,98,108,101,0,0,0,0,0,32,100,101,108,116,97,95,120,32,100,101,108,116,97,95,121,0,0,0,0,0,0,0,0,37,37,32,66,101,103,105,110,32,112,108,111,116,32,35,37,100,10,0,0,0,0,0,0,98,110,111,116,0,0,0,0,115,116,114,111,107,101,10,0,70,73,84,95,83,84,65,82,84,95,76,65,77,66,68,65,0,0,0,0,0,0,0,0,94,80,89,94,45,10,94,73,79,76,10,94,73,83,89,78,84,65,88,48,48,48,48,48,94,70,94,73,66,49,49,48,48,48,94,73,74,48,48,48,48,48,94,73,84,48,48,48,48,48,10,0,0,0,0,0,94,80,78,94,45,10,0,0,116,101,115,116,32,111,102,32,99,104,97,114,97,99,116,101,114,32,119,105,100,116,104,58,0,0,0,0,0,0,0,0,94,73,71,69,10,94,45,94,44,0,0,0,0,0,0,0,109,117,108,116,105,36,112,108,111,116,0,0,0,0,0,0,69,114,114,111,114,32,97,115,115,105,103,110,105,110,103,32,109,101,109,111,114,121,32,102,111,114,32,98,105,110,97,114,121,32,102,105,108,101,32,100,97,116,97,32,114,101,99,111,114,100,115,0,0,0,0,0,63,0,0,0,0,0,0,0,94,73,71,86,10,0,0,0,9,102,111,114,109,97,116,32,102,111,114,32,66,117,116,116,111,110,32,49,32,105,115,32,37,100,10,0,0,0,0,0,112,111,112,0,0,0,0,0,98,97,100,32,100,97,116,97,32,111,110,32,108,105,110,101,32,37,100,32,111,102,32,102,105,108,101,32,37,115,0,0,32,111,102,102,115,101,116,32,0,0,0,0,0,0,0,0,94,85,37,48,53,100,58,37,48,53,100,10,0,0,0,0,32,122,111,111,109,32,111,117,116,46,0,0,0,0,0,0,94,68,37,48,53,100,58,37,48,53,100,10,0,0,0,0,73,108,108,101,103,97,108,32,115,101,101,100,32,118,97,108,117,101,0,0,0,0,0,0,94,86,48,10,0,0,0,0,94,80,86,51,48,50,49,48,48,94,71,10,94,86,51,10,0,0,0,0,0,0,0,0,94,80,86,50,48,50,48,53,48,94,71,10,94,86,50,10,0,0,0,0,0,0,0,0,94,80,86,49,48,50,48,50,53,94,71,10,94,86,49,10,0,0,0,0,0,0,0,0,70,73,84,95,76,65,77,66,68,65,95,70,65,67,84,79,82,0,0,0,0,0,0,0,99,111,109,112,105,108,101,95,111,112,116,105,111,110,115,0,94,80,87,37,48,50,100,10,0,0,0,0,0,0,0,0,101,120,116,101,110,100,32,105,110,112,117,116,32,108,105,110,101,0,0,0,0,0,0,0,10,94,73,71,86,10,0,0,115,116,114,112,116,105,109,101,0,0,0,0,0,0,0,0,49,50,51,52,53,54,55,56,57,48,49,50,51,52,53,54,55,56,57,48,0,0,0,0,94,73,71,69,10,0,0,0,109,111,36,117,115,101,0,0,98,105,110,97,114,121,32,102,105,108,101,32,100,97,116,97,32,114,101,99,111,114,100,115,0,0,0,0,0,0,0,0,65,114,105,97,108,0,0,0,9,102,111,114,109,97,116,116,105,110,103,32,110,117,109,98,101,114,115,32,119,105,116,104,32,34,37,115,34,10,0,0,110,111,102,112,101,95,116,114,97,112,0,0,0,0,0,0,106,112,103,0,0,0,0,0,112,117,115,104,0,0,0,0,99,104,97,114,97,99,116,101,114,32,0,0,0,0,0,0,60,116,115,112,97,110,32,102,111,110,116,45,115,105,122,101,61,34,37,46,49,102,112,116,34,32,100,121,61,34,37,46,50,102,112,116,34,62,60,47,116,115,112,97,110,62,0,0,60,99,111,110,116,114,111,108,45,119,104,101,101,108,45,100,111,119,110,62,0,0,0,0,37,99,0,0,0,0,0,0,99,111,110,116,111,117,114,32,99,110,116,114,95,115,116,114,117,99,116,0,0,0,0,0,98,97,99,107,103,114,111,117,110,100,32,34,35,37,48,54,120,34,32,0,0,0,0,0,99,111,110,118,101,114,116,32,98,97,99,107,32,34,37,115,34,32,45,32,37,100,47,37,100,47,37,100,58,58,37,100,58,37,100,58,37,100,32,44,32,119,100,97,121,61,37,100,44,32,121,100,97,121,61,37,100,10,0,0,0,0,0,0,32,93,32,37,115,114,101,118,101,114,115,101,32,37,115,119,114,105,116,101,98,97,99,107,0,0,0,0,0,0,0,0,108,105,110,101,119,105,100,116,104,32,37,51,46,49,102,32,0,0,0,0,0,0,0,0,34,116,105,116,108,101,34,32,97,108,108,111,119,101,100,32,111,110,108,121,32,97,102,116,101,114,32,112,97,114,97,109,101,116,114,105,99,32,102,117,110,99,116,105,111,110,32,102,117,108,108,121,32,115,112,101,99,105,102,105,101,100,0,0,115,111,108,105,100,32,0,0,105,115,111,32,99,117,114,118,101,32,112,111,105,110,116,115,0,0,0,0,0,0,0,0,100,97,115,104,101,100,32,0,70,73,84,95,83,67,82,73,80,84,0,0,0,0,0,0,98,117,116,116,32,0,0,0,102,111,114,0,0,0,0,0,109,97,116,114,105,120,32,114,111,119,32,112,111,105,110,116,101,114,115,0,0,0,0,0,102,111,110,116,102,105,108,101,32,34,37,115,34,32,0,0,115,116,114,102,116,105,109,101,0,0,0,0,0,0,0,0,98,101,122,105,101,114,32,99,111,101,102,102,105,99,105,101,110,116,115,0,0,0,0,0,77,111,117,115,101,32,97,110,100,32,104,111,116,107,101,121,115,32,97,114,101,32,115,117,112,112,111,114,116,101,100,44,32,104,105,116,58,32,104,32,114,32,109,32,54,0,0,0,110,97,109,101,32,34,37,115,34,32,0,0,0,0,0,0,98,109,97,114,36,103,105,110,0,0,0,0,0,0,0,0,69,113,117,97,108,32,40,39,61,39,41,32,115,121,109,98,111,108,32,114,101,113,117,105,114,101,100,0,0,0,0,0,97,108,116,45,0,0,0,0,115,116,97,110,100,97,108,111,110,101,32,0,0,0,0,0,9,100,111,117,98,108,101,32,99,108,105,99,107,32,114,101,115,111,108,117,116,105,111,110,32,105,115,32,111,102,102,10,0,0,0,0,0,0,0,0,89,111,117,32,99,97,110,39,116,32,99,104,97,110,103,101,32,116,104,101,32,116,101,114,109,105,110,97,108,32,105,110,32,109,117,108,116,105,112,108,111,116,32,109,111,100,101,0,123,32,121,48,32,103,32,0,115,99,114,101,101,110,32,0,109,111,117,115,105,110,103,32,0,0,0,0,0,0,0,0,108,111,97,100,0,0,0,0,67,97,110,39,116,32,99,97,108,99,117,108,97,116,101,32,97,112,112,114,111,120,105,109,97,116,105,111,110,32,115,112,108,105,110,101,115,0,0,0,101,110,104,97,110,99,101,100,0,0,0,0,0,0,0,0,122,111,111,109,32,105,110,32,116,111,119,97,114,100,32,116,104,101,32,99,101,110,116,101,114,32,111,102,32,116,104,101,32,112,108,111,116,46,0,0,112,109,51,100,32,112,97,108,101,116,116,101,32,99,111,108,111,114,0,0,0,0,0,0,102,97,99,116,111,114,105,97,108,32,40,33,41,32,97,114,103,117,109,101,110,116,32,109,117,115,116,32,98,101,32,97,110,32,105,110,116,101,103,101,114,0,0,0,0,0,0,0,32,100,121,110,97,109,105,99,0,0,0,0,0,0,0,0,105,110,116,101,114,110,97,108,32,61,32,37,102,32,45,32,37,100,47,37,100,47,37,100,58,58,37,100,58,37,100,58,37,100,32,44,32,119,100,97,121,61,37,100,44,32,121,100,97,121,61,37,100,10,0,0,32,102,105,120,101,100,0,0,115,105,122,101,32,37,100,44,37,100,37,115,32,37,115,32,102,110,97,109,101,32,39,37,115,39,32,32,102,115,105,122,101,32,37,103,32,0,0,0,117,110,114,101,99,111,103,110,105,122,101,100,32,116,101,114,109,105,110,97,108,32,111,112,116,105,111,110,0,0,0,0,98,97,99,107,103,36,114,111,117,110,100,0,0,0,0,0,100,97,115,104,36,101,100,0,32,32,116,101,114,109,105,110,97,108,32,116,101,115,116,0,114,111,117,110,100,36,101,100,0,0,0,0,0,0,0,0,116,109,97,114,36,103,105,110,0,0,0,0,0,0,0,0,111,112,116,105,111,110,32,101,120,112,101,99,116,101,100,0,70,111,110,116,32,102,105,108,101,110,97,109,101,32,101,120,112,101,99,116,101,100,0,0,9,100,111,117,98,108,101,32,99,108,105,99,107,32,114,101,115,111,108,117,116,105,111,110,32,105,115,32,37,100,32,109,115,10,0,0,0,0,0,0,84,104,105,115,32,111,112,116,105,111,110,32,99,97,110,110,111,116,32,98,101,32,99,104,97,110,103,101,100,32,117,115,105,110,103,32,39,115,101,116,32,116,101,114,109,111,112,116,105,111,110,39,0,0,0,0,115,101,99,111,110,100,32,0,102,111,110,116,102,105,108,101,0,0,0,0,0,0,0,0,60,99,111,110,116,114,111,108,45,119,104,101,101,108,45,117,112,62,0,0,0,0,0,0,102,115,105,122,101,58,32,101,120,112,101,99,116,105,110,103,32,102,111,110,116,32,115,105,122,101,0,0,0,0,0,0,102,115,36,105,122,101,0,0,115,109,111,111,116,104,32,112,97,108,101,116,116,101,32,105,110,32,37,115,58,32,117,115,105,110,103,32,37,105,32,111,102,32,37,105,32,97,118,97,105,108,97,98,108,101,32,99,111,108,111,114,32,112,111,115,105,116,105,111,110,115,10,0,37,115,32,114,97,110,103,101,32,109,117,115,116,32,98,101,32,103,114,101,97,116,101,114,32,116,104,97,110,32,48,32,102,111,114,32,108,111,103,32,115,99,97,108,101,0,0,0,102,110,36,97,109,101,0,0,102,105,36,120,101,100,0,0,86,97,108,117,101,32,115,116,111,114,101,100,32,102,111,114,32,117,110,100,101,102,105,110,101,100,32,100,97,116,97,112,111,105,110,116,32,104,97,110,100,108,105,110,103,32,105,115,32,105,108,108,101,103,97,108,33,33,33,10,0,0,0,0,100,36,121,110,97,109,105,99,0,0,0,0,0,0,0,0,110,97,109,101,32,109,117,115,116,32,99,111,110,116,97,105,110,32,111,110,108,121,32,97,108,112,104,97,110,117,109,101,114,105,99,115,32,111,114,32,95,0,0,0,0,0,0,0,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,49,50,51,52,53,54,55,56,57,48,0,119,111,114,100,0,0,0,0,116,101,114,109,105,110,97,108,32,116,121,112,101,32,105,115,32,117,110,107,110,111,119,110,0,0,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,97,32,112,108,111,116,32,110,97,109,101,0,0,0,114,109,97,114,36,103,105,110,0,0,0,0,0,0,0,0,110,97,109,101,0,0,0,0,9,110,111,32,112,111,108,97,114,32,100,105,115,116,97,110,99,101,32,116,111,32,114,117,108,101,114,32,119,105,108,108,32,98,101,32,115,104,111,119,110,10,0,0,0,0,0,0,100,101,108,97,121,0,0,0,102,105,114,115,116,32,0,0,109,111,117,115,36,105,110,103,0,0,0,0,0,0,0,0,115,99,114,111,108,108,32,114,105,103,104,116,46,0,0,0,109,111,117,115,101,0,0,0,121,32,115,105,122,101,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,0,0,0,101,120,116,101,110,100,32,105,110,32,100,111,95,115,121,115,116,101,109,95,102,117,110,99,0,0,0,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,121,32,115,105,122,101,0,0,0,0,0,0,0,0,112,111,108,121,103,111,110,0,120,32,115,105,122,101,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,0,0,0,101,120,112,101,99,116,105,110,103,32,120,32,115,105,122,101,0,0,0,0,0,0,0,0,115,36,105,122,101,0,0,0,67,97,110,110,111,116,32,109,105,120,32,115,99,114,101,101,110,32,111,114,32,99,104,97,114,97,99,116,101,114,32,99,111,111,114,100,115,32,119,105,116,104,32,112,108,111,116,32,99,111,111,114,100,115,0,0,70,111,110,116,32,102,105,108,101,32,39,37,115,39,32,105,115,32,101,109,112,116,121,0,115,117,98,115,116,114,0,0,115,101,116,32,116,101,114,109,111,112,116,32,101,110,104,0,67,111,109,109,97,110,100,32,39,37,115,39,32,103,101,110,101,114,97,116,101,115,32,101,109,112,116,121,32,111,117,116,112,117,116,0,0,0,0,0,67,111,109,109,97,110,100,32,39,37,115,39,32,103,101,110,101,114,97,116,101,100,32,101,114,114,111,114,32,101,120,105,116,99,111,100,101,32,37,100,0,0,0,0,0,0,0,0,108,109,97,114,36,103,105,110,0,0,0,0,0,0,0,0,68,105,109,95,50,0,0,0,9,100,105,115,116,97,110,99,101,32,116,111,32,114,117,108,101,114,32,119,105,108,108,32,98,101,32,115,104,111,119,32,105,110,32,112,111,108,97,114,32,99,111,111,114,100,105,110,97,116,101,115,10,0,0,0,103,105,102,0,0,0,0,0,111,98,106,101,99,116,32,110,111,116,32,102,111,117,110,100,0,0,0,0,0,0,0,0,70,111,110,116,32,102,105,108,101,32,39,37,115,39,32,99,111,110,116,97,105,110,115,32,116,104,101,32,102,111,110,116,32,39,37,115,39,10,0,0,60,115,104,105,102,116,45,119,104,101,101,108,45,100,111,119,110,62,0,0,0,0,0,0,102,111,110,116,45,102,97,109,105,108,121,0,0,0,0,0,70,111,110,116,32,102,105,108,101,32,39,37,115,39,32,110,111,116,32,102,111,117,110,100,0,0,0,0,0,0,0,0,42,118,101,114,121,42,32,108,111,110,103,32,115,121,115,116,101,109,32,99,97,108,108,32,111,117,116,112,117,116,32,104,97,115,32,98,101,101,110,32,116,114,117,110,99,97,116,101,100,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,101,120,101,99,117,116,101,32,112,105,112,101,32,39,37,115,39,0,0,0,0,0,10,9,60,99,105,114,99,108,101,32,105,100,61,39,103,112,68,111,116,39,32,114,61,39,48,46,53,39,32,115,116,114,111,107,101,45,119,105,100,116,104,61,39,48,46,53,39,47,62,10,9,60,112,97,116,104,32,105,100,61,39,103,112,80,116,48,39,32,115,116,114,111,107,101,45,119,105,100,116,104,61,39,37,46,51,102,39,32,115,116,114,111,107,101,61,39,99,117,114,114,101,110,116,67,111,108,111,114,39,32,100,61,39,77,45,49,44,48,32,104,50,32,77,48,44,45,49,32,118,50,39,47,62,10,9,60,112,97,116,104,32,105,100,61,39,103,112,80,116,49,39,32,115,116,114,111,107,101,45,119,105,100,116,104,61,39,37,46,51,102,39,32,115,116,114,111,107,101,61,39,99,117,114,114,101,110,116,67,111,108,111,114,39,32,100,61,39,77,45,49,44,45,49,32,76,49,44,49,32,77,49,44,45,49,32,76,45,49,44,49,39,47,62,10,9,60,112,97,116,104,32,105,100,61,39,103,112,80,116,50,39,32,115,116,114,111,107,101,45,119,105,100,116,104,61,39,37,46,51,102,39,32,115,116,114,111,107,101,61,39,99,117,114,114,101,110,116,67,111,108,111,114,39,32,100,61,39,77,45,49,44,48,32,76,49,44,48,32,77,48,44,45,49,32,76,48,44,49,32,77,45,49,44,45,49,32,76,49,44,49,32,77,45,49,44,49,32,76,49,44,45,49,39,47,62,10,9,60,114,101,99,116,32,105,100,61,39,103,112,80,116,51,39,32,115,116,114,111,107,101,45,119,105,100,116,104,61,39,37,46,51,102,39,32,115,116,114,111,107,101,61,39,99,117,114,114,101,110,116,67,111,108,111,114,39,32,120,61,39,45,49,39,32,121,61,39,45,49,39,32,119,105,100,116,104,61,39,50,39,32,104,101,105,103,104,116,61,39,50,39,47,62,10,9,60,114,101,99,116,32,105,100,61,39,103,112,80,116,52,39,32,115,116,114,111,107,101,45,119,105,100,116,104,61,39,37,46,51,102,39,32,115,116,114,111,107,101,61,39,99,117,114,114,101,110,116,67,111,108,111,114,39,32,102,105,108,108,61,39,99,117,114,114,101,110,116,67,111,108,111,114,39,32,120,61,39,45,49,39,32,121,61,39,45,49,39,32,119,105,100,116,104,61,39,50,39,32,104,101,105,103,104,116,61,39,50,39,47,62,10,9,60,99,105,114,99,108,101,32,105,100,61,39,103,112,80,116,53,39,32,115,116,114,111,107,101,45,119,105,100,116,104,61,39,37,46,51,102,39,32,115,116,114,111,107,101,61,39,99,117,114,114,101,110,116,67,111,108,111,114,39,32,99,120,61,39,48,39,32,99,121,61,39,48,39,32,114,61,39,49,39,47,62,10,9,60,117,115,101,32,120,108,105,110,107,58,104,114,101,102,61,39,35,103,112,80,116,53,39,32,105,100,61,39,103,112,80,116,54,39,32,102,105,108,108,61,39,99,117,114,114,101,110,116,67,111,108,111,114,39,32,115,116,114,111,107,101,61,39,110,111,110,101,39,47,62,10,9,60,112,97,116,104,32,105,100,61,39,103,112,80,116,55,39,32,115,116,114,111,107,101,45,119,105,100,116,104,61,39,37,46,51,102,39,32,115,116,114,111,107,101,61,39,99,117,114,114,101,110,116,67,111,108,111,114,39,32,100,61,39,77,48,44,45,49,46,51,51,32,76,45,49,46,51,51,44,48,46,54,55,32,76,49,46,51,51,44,48,46,54,55,32,122,39,47,62,10,9,60,117,115,101,32,120,108,105,110,107,58,104,114,101,102,61,39,35,103,112,80,116,55,39,32,105,100,61,39,103,112,80,116,56,39,32,102,105,108,108,61,39,99,117,114,114,101,110,116,67,111,108,111,114,39,32,115,116,114,111,107,101,61,39,110,111,110,101,39,47,62,10,9,60,117,115,101,32,120,108,105,110,107,58,104,114,101,102,61,39,35,103,112,80,116,55,39,32,105,100,61,39,103,112,80,116,57,39,32,115,116,114,111,107,101,61,39,99,117,114,114,101,110,116,67,111,108,111,114,39,32,116,114,97,110,115,102,111,114,109,61,39,114,111,116,97,116,101,40,49,56,48,41,39,47,62,10,9,60,117,115,101,32,120,108,105,110,107,58,104,114,101,102,61,39,35,103,112,80,116,57,39,32,105,100,61,39,103,112,80,116,49,48,39,32,102,105,108,108,61,39,99,117,114,114,101,110,116,67,111,108,111,114,39,32,115,116,114,111,107,101,61,39,110,111,110,101,39,47,62,10,9,60,117,115,101,32,120,108,105,110,107,58,104,114,101,102,61,39,35,103,112,80,116,51,39,32,105,100,61,39,103,112,80,116,49,49,39,32,115,116,114,111,107,101,61,39,99,117,114,114,101,110,116,67,111,108,111,114,39,32,116,114,97,110,115,102,111,114,109,61,39,114,111,116,97,116,101,40,52,53,41,39,47,62,10,9,60,117,115,101,32,120,108,105,110,107,58,104,114,101,102,61,39,35,103,112,80,116,49,49,39,32,105,100,61,39,103,112,80,116,49,50,39,32,102,105,108,108,61,39,99,117,114,114,101,110,116,67,111,108,111,114,39,32,115,116,114,111,107,101,61,39,110,111,110,101,39,47,62,10,60,47,100,101,102,115,62,10,0,60,100,101,102,115,62,10,0,9,37,115,32,114,97,110,103,101,32,114,101,115,116,114,105,99,116,101,100,32,116,111,32,91,0,0,0,0,0,0,0,47,62,10,0,0,0,0,0,32,102,105,108,108,61,34,35,37,48,54,120,34,0,0,0,115,116,114,115,116,114,116,0,85,110,107,110,111,119,110,32,111,114,32,97,109,98,105,103,117,111,117,115,32,116,101,114,109,105,110,97,108,32,110,97,109,101,32,39,37,115,39,10,0,0,0,0,0,0,0,0,60,103,32,105,100,61,34,103,110,117,112,108,111,116,95,99,97,110,118,97,115,34,62,10,10,0,0,0,0,0,0,0,109,97,114,36,103,105,110,0,60,103,32,105,100,61,34,103,110,117,112,108,111,116,95,99,97,110,118,97,115,34,32,111,110,99,108,105,99,107,61,34,103,110,117,112,108,111,116,95,115,118,103,46,116,111,103,103,108,101,67,111,111,114,100,66,111,120,40,101,118,116,41,34,32,111,110,109,111,117,115,101,109,111,118,101,61,34,103,110,117,112,108,111,116,95,115,118,103,46,109,111,118,101,67,111,111,114,100,66,111,120,40,101,118,116,41,34,62,10,10,0,9,110,111,32,122,111,111,109,32,99,111,111,114,100,105,110,97,116,101,115,32,119,105,108,108,32,98,101,32,100,114,97,119,110,10,0,0,0,0,0,10,60,33,45,45,32,65,108,115,111,32,116,114,97,99,107,32,109,111,117,115,101,32,119,104,101,110,32,105,116,32,105,115,32,111,110,32,97,32,112,108,111,116,32,101,108,101,109,101,110,116,32,45,45,62,10,0,0,0,0,0,0,0,0,32,102,105,108,108,115,116,121,108,101,32,0,0,0,0,0,115,99,114,111,108,108,32,108,101,102,116,32,40,105,110,32,45,88,32,100,105,114,101,99,116,105,111,110,41,46,0,0,111,110,99,108,105,99,107,61,34,103,110,117,112,108,111,116,95,115,118,103,46,116,111,103,103,108,101,67,111,111,114,100,66,111,120,40,101,118,116,41,34,32,32,111,110,109,111,117,115,101,109,111,118,101,61,34,103,110,117,112,108,111,116,95,115,118,103,46,109,111,118,101,67,111,111,114,100,66,111,120,40,101,118,116,41,34,47,62,10,0,0,0,0,0,0,0,32,102,105,108,108,61,34,35,37,48,54,120,34,32,115,116,114,111,107,101,61,34,98,108,97,99,107,34,32,115,116,114,111,107,101,45,119,105,100,116,104,61,34,49,34,10,0,0,100,111,95,115,121,115,116,101,109,95,102,117,110,99,0,0,60,114,101,99,116,32,120,61,34,37,100,34,32,121,61,34,37,100,34,32,119,105,100,116,104,61,34,37,100,34,32,104,101,105,103,104,116,61,34,37,100,34,0,0,0,0,0,0,10,60,33,45,45,32,84,105,101,32,109,111,117,115,105,110,103,32,116,111,32,101,110,116,105,114,101,32,98,111,117,110,100,105,110,103,32,98,111,120,32,111,102,32,116,104,101,32,112,108,111,116,32,45,45,62,10,0,0,0,0,0,0,0,60,115,99,114,105,112,116,32,108,97,110,103,117,97,103,101,61,34,106,97,118,97,83,99,114,105,112,116,34,32,84,89,80,69,61,34,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,34,32,62,32,60,33,91,67,68,65,84,65,91,10,0,0,0,0,0,0,0,35,32,70,73,88,69,68,0,70,97,105,108,101,100,32,116,111,32,105,110,115,101,114,116,32,106,97,118,97,115,99,114,105,112,116,32,102,105,108,101,32,37,115,10,0,0,0,0,115,116,114,108,101,110,0,0,106,97,118,97,115,99,114,105,112,116,32,110,97,109,101,0,109,97,112,36,112,105,110,103,51,100,0,0,0,0,0,0,103,110,117,112,108,111,116,95,115,118,103,46,106,115,0,0,9,122,111,111,109,32,99,111,111,114,100,105,110,97,116,101,115,32,119,105,108,108,32,98,101,32,100,114,97,119,110,10,0,0,0,0,0,0,0,0,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,34,32,120,108,105,110,107,58,104,114,101,102,61,34,37,115,103,110,117,112,108,111,116,95,115,118,103,46,106,115,34,47,62,10,0,60,115,104,105,102,116,45,119,104,101,101,108,45,117,112,62,0,0,0,0,0,0,0,0,116,111,111,32,109,97,110,121,32,97,114,103,117,109,101,110,116,115,32,102,111,114,32,39,99,97,108,108,32,60,102,105,108,101,62,39,0,0,0,0,106,115,100,105,114,0,0,0,112,111,112,101,110,32,102,97,105,108,101,100,0,0,0,0,47,117,115,114,47,108,111,99,97,108,47,115,104,97,114,101,47,103,110,117,112,108,111,116,47,52,46,54,47,106,115,0,60,100,101,115,99,62,80,114,111,100,117,99,101,100,32,98,121,32,71,78,85,80,76,79,84,32,37,115,32,112,97,116,99,104,108,101,118,101,108,32,37,115,32,60,47,100,101,115,99,62,10,10,0,0,0,0,71,110,117,112,108,111,116,0,85,110,100,101,102,105,110,101,100,32,118,97,108,117,101,32,100,117,114,105,110,103,32,102,117,110,99,116,105,111,110,32,101,118,97,108,117,97,116,105,111,110,0,0,0,0,0,0,60,116,105,116,108,101,62,37,115,60,47,116,105,116,108,101,62,10,0,0,0,0,0,0,62,10,10,0,0,0,0,0,103,112,114,105,110,116,102,0,84,101,114,109,105,110,97,108,32,116,121,112,101,32,115,101,116,32,116,111,32,39,37,115,39,10,0,0,0,0,0,0,32,120,109,108,110,115,58,120,108,105,110,107,61,34,104,116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,49,57,57,57,47,120,108,105,110,107,34,10,0,0,0,0,109,97,112,36,112,105,110,103,0,0,0,0,0,0,0,0,112,108,111,116,32,116,105,116,108,101,0,0,0,0,0,0,32,120,109,108,110,115,61,34,104,116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,50,48,48,48,47,115,118,103,34,10,0,0,0,0,9,109,111,117,115,101,32,105,115,32,111,110,10,0,0,0,10,32,118,105,101,119,66,111,120,61,34,48,32,48,32,37,117,32,37,117,34,10,0,0,115,99,114,111,108,108,32,100,111,119,110,46,0,0,0,0,46,46,0,0,0,0,0,0,10,32,119,105,100,116,104,61,34,37,117,34,32,104,101,105,103,104,116,61,34,37,117,34,32,0,0,0,0,0,0,0,111,110,108,111,97,100,61,34,105,102,32,40,116,121,112,101,111,102,40,103,110,117,112,108,111,116,95,115,118,103,41,33,61,39,117,110,100,101,102,105,110,101,100,39,41,32,103,110,117,112,108,111,116,95,115,118,103,46,73,110,105,116,40,101,118,116,41,34,32,0,0,0,37,115,32,105,115,32,110,111,116,32,97,32,115,116,114,105,110,103,32,118,97,114,105,97,98,108,101,0,0,0,0,0,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,37,115,32,115,116,97,110,100,97,108,111,110,101,61,34,110,111,34,63,62,10,60,33,68,79,67,84,89,80,69,32,115,118,103,32,80,85,66,76,73,67,32,34,45,47,47,87,51,67,47,47,68,84,68,32,83,86,71,32,49,46,49,47,47,69,78,34,32,10,32,34,104,116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,71,114,97,112,104,105,99,115,47,83,86,71,47,49,46,49,47,68,84,68,47,115,118,103,49,49,46,100,116,100,34,62,10,60,115,118,103,32,0,0,0,0,0,101,110,99,111,100,105,110,103,61,34,117,116,102,45,56,34,32,0,0,0,0,0,0,0,102,111,110,116,112,97,116,104,32,61,61,32,78,85,76,76,0,0,0,0,0,0,0,0,101,110,99,111,100,105,110,103,61,34,83,104,105,102,116,95,74,73,83,34,32,0,0,0,37,45,49,53,46,49,53,115,32,61,32,37,103,10,0,0,70,111,114,109,97,116,32,99,104,97,114,97,99,116,101,114,32,109,105,115,109,97,116,99,104,58,32,37,37,84,32,105,115,32,111,110,108,121,32,118,97,108,105,100,32,119,105,116,104,32,37,37,116,0,0,0,101,110,99,111,100,105,110,103,61,34,107,111,105,56,45,117,34,32,0,0,0,0,0,0,68,101,112,114,101,99,97,116,101,100,32,115,121,110,116,97,120,32,45,32,112,108,101,97,115,101,32,117,115,101,32,39,115,101,116,32,116,105,99,115,32,115,99,97,108,101,32,100,101,102,97,117,108,116,39,0,37,89,45,37,109,45,37,100,0,0,0,0,0,0,0,0,101,110,99,111,100,105,110,103,61,34,107,111,105,56,45,114,34,32,0,0,0,0,0,0,87,97,114,110,105,110,103,58,32,115,99,97,108,101,32,105,110,116,101,114,102,97,99,101,32,105,115,32,110,111,116,32,110,117,108,108,95,115,99,97,108,101,32,45,32,109,97,121,32,110,111,116,32,119,111,114,107,32,119,105,116,104,32,109,117,108,116,105,112,108,111,116,10,0,0,0,0,0,0,0,101,110,99,111,100,105,110,103,61,34,119,105,110,100,111,119,115,45,49,50,53,49,34,32,0,0,0,0,0,0,0,0,109,97,99,36,114,111,115,0,116,105,109,101,99,111,108,117,109,110,40,41,32,99,97,108,108,101,100,32,102,114,111,109,32,105,110,118,97,108,105,100,32,99,111,110,116,101,120,116,0,0,0,0,0,0,0,0,101,110,99,111,100,105,110,103,61,34,119,105,110,100,111,119,115,45,49,50,53,48,34,32,0,0,0,0,0,0,0,0,9,108,97,115,116,32,112,108,111,116,32,99,111,109,109,97,110,100,32,119,97,115,58,32,37,115,10,0,0,0,0,0,102,99,32,0,0,0,0,0,101,110,99,111,100,105,110,103,61,34,99,112,57,53,48,34,32,0,0,0,0,0,0,0,60,119,104,101,101,108,45,100,111,119,110,62,0,0,0,0,101,110,99,111,100,105,110,103,61,34,105,98,109,45,56,53,50,34,32,0,0,0,0,0,101,110,99,111,100,105,110,103,61,34,105,98,109,45,56,53,48,34,32,0,0,0,0,0,115,116,114,105,110,103,32,118,97,114,105,97,98,108,101,0,99,112,49,50,53,49,0,0,101,110,99,111,100,105,110,103,61,34,105,115,111,45,56,56,53,57,45,49,53,34,32,0,32,108,97,98,101,108,0,0,101,110,99,111,100,105,110,103,61,34,105,115,111,45,56,56,53,57,45,57,34,32,0,0,108,110,111,116,0,0,0,0,101,110,99,111,100,105,110,103,61,34,105,115,111,45,56,56,53,57,45,50,34,32,0,0,105,110,105,116,105,97,108,32,115,101,116,32,111,102,32,102,114,101,101,0,0,0,0,0,101,110,99,111,100,105,110,103,61,34,105,115,111,45,56,56,53,57,45,49,34,32,0,0,35,37,50,46,50,88,37,50,46,50,88,37,50,46,50,88,0,0,0,0,0,0,0,0,116,109,95,121,100,97,121,0,120,49,49,0,0,0,0,0,60,47,115,118,103,62,10,10,0,0,0,0,0,0,0,0,108,111,103,36,115,99,97,108,101,0,0,0,0,0,0,0,64,67,79,76,85,77,78,72,69,65,68,64,0,0,0,0,32,32,32,32,111,110,99,108,105,99,107,61,39,103,110,117,112,108,111,116,95,115,118,103,46,116,111,103,103,108,101,71,114,105,100,40,41,59,39,47,62,10,0,0,0,0,0,0,61,32,0,0,0,0,0,0,83,116,97,116,115,32,99,111,109,109,97,110,100,32,110,111,116,32,97,118,97,105,108,97,98,108,101,32,105,110,32,112,97,114,97,109,101,116,114,105,99,32,109,111,100,101,0,0,108,119,32,37,46,49,102,32,0,0,0,0,0,0,0,0,10,32,32,60,105,109,97,103,101,32,120,61,39,49,48,39,32,121,61,39,37,100,39,32,119,105,100,116,104,61,39,49,54,39,32,104,101,105,103,104,116,61,39,49,54,39,32,120,108,105,110,107,58,104,114,101,102,61,39,103,114,105,100,46,112,110,103,39,10,0,0,0,115,99,114,111,108,108,32,117,112,32,40,105,110,32,43,89,32,100,105,114,101,99,116,105,111,110,41,46,0,0,0,0,102,111,110,116,112,97,116,104,95,102,117,108,108,110,97,109,101,0,0,0,0,0,0,0,32,32,118,105,115,105,98,105,108,105,116,121,61,34,104,105,100,100,101,110,34,62,32,60,47,116,101,120,116,62,10,0,37,115,32,101,114,114,111,114,10,0,0,0,0,0,0,0,32,32,102,111,110,116,45,115,105,122,101,61,34,49,50,34,32,102,111,110,116,45,102,97,109,105,108,121,61,34,65,114,105,97,108,34,10,0,0,0,115,121,115,116,101,109,40,41,32,102,97,105,108,101,100,0,10,32,32,60,116,101,120,116,32,105,100,61,34,99,111,111,114,100,95,116,101,120,116,34,32,116,101,120,116,45,97,110,99,104,111,114,61,34,115,116,97,114,116,34,32,112,111,105,110,116,101,114,45,101,118,101,110,116,115,61,34,110,111,110,101,34,10,0,0,0,0,0,93,93,62,10,60,47,115,99,114,105,112,116,62,10,0,0,103,110,117,112,108,111,116,95,115,118,103,46,112,108,111,116,95,116,105,109,101,97,120,105,115,95,120,32,61,32,34,34,59,10,0,0,0,0,0,0,114,101,115,117,108,116,97,110,116,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,111,114,32,100,101,112,114,101,99,97,116,101,100,32,115,121,110,116,97,120,0,0,0,0,68,97,116,101,84,105,109,101,0,0,0,0,0,0,0,0,84,105,109,101,0,0,0,0,116,109,95,119,100,97,121,0,88,49,49,0,0,0,0,0,68,97,116,101,0,0,0,0,108,111,99,36,97,108,101,0,97,110,97,108,121,122,101,95,115,103,108,95,99,111,108,117,109,110,0,0,0,0,0,0,99,111,108,117,109,110,104,101,97,100,40,41,32,99,97,108,108,101,100,32,102,114,111,109,32,105,110,118,97,108,105,100,32,99,111,110,116,101,120,116,0,0,0,0,0,0,0,0,103,110,117,112,108,111,116,95,115,118,103,46,112,108,111,116,95,116,105,109,101,97,120,105,115,95,120,32,61,32,34,37,115,34,59,10,0,0,0,0,9,37,45,42,115,32,0,0,102,112,101,95,116,114,97,112,0,0,0,0,0,0,0,0,102,110,97,109,101,0,0,0,106,112,101,103,0,0,0,0,103,110,117,112,108,111,116,95,115,118,103,46,112,108,111,116,95,97,120,105,115,95,120,109,97,120,32,61,32,37,46,51,102,59,10,0,0,0,0,0,60,119,104,101,101,108,45,117,112,62,0,0,0,0,0,0,114,101,99,117,114,115,105,118,101,102,117,108,108,110,97,109,101,0,0,0,0,0,0,0,103,110,117,112,108,111,116,95,115,118,103,46,112,108,111,116,95,97,120,105,115,95,120,109,105,110,32,61,32,37,46,51,102,59,10,0,0,0,0,0,116,114,97,99,101,95,99,111,110,116,111,117,114,58,32,117,110,101,120,112,101,99,116,101,100,32,101,110,100,32,111,102,32,99,111,110,116,111,117,114,10,0,0,0,0,0,0,0,103,110,117,112,108,111,116,95,115,118,103,46,112,108,111,116,95,108,111,103,97,120,105,115,95,114,32,61,32,37,100,59,10,0,0,0,0,0,0,0,73,109,112,111,115,115,105,98,108,101,32,99,97,115,101,32,105,110,32,115,119,105,116,99,104,0,0,0,0,0,0,0,32,58,32,0,0,0,0,0,103,110,117,112,108,111,116,95,115,118,103,46,112,108,111,116,95,108,111,103,97,120,105,115,95,121,32,61,32,37,100,59,10,0,0,0,0,0,0,0,112,109,51,100,32,115,99,97,110,32,97,114,114,97,121,0,116,36,105,116,108,101,0,0,103,110,117,112,108,111,116,95,115,118,103,46,112,108,111,116,95,108,111,103,97,120,105,115,95,120,32,61,32,37,100,59,10,0,0,0,0,0,0,0,108,97,98,101,108,112,111,105,110,116,32,116,101,120,116,0,103,110,117,112,108,111,116,95,115,118,103,46,112,108,111,116,95,97,120,105,115,95,121,50,109,105,110,32,61,32,34,110,111,110,101,34,10,0,0,0,67,111,117,108,100,32,110,111,116,32,108,105,110,101,98,117,102,102,101,114,32,115,116,100,111,117,116,10,0,0,0,0,10,10,32,73,116,101,114,97,116,105,111,110,32,37,100,10,32,87,83,83,82,32,32,32,32,32,32,32,32,58,32,37,45,49,53,103,32,32,32,100,101,108,116,97,40,87,83,83,82,41,47,87,83,83,82,32,32,32,58,32,37,103,10,32,100,101,108,116,97,40,87,83,83,82,41,32,58,32,37,45,49,53,103,32,32,32,108,105,109,105,116,32,102,111,114,32,115,116,111,112,112,105,110,103,32,58,32,37,103,10,32,108,97,109,98,100,97,9,32,32,58,32,37,103,10,10,37,115,32,112,97,114,97,109,101,116,101,114,32,118,97,108,117,101,115,10,10,0,0,0,0,0,112,108,111,116,95,97,120,105,115,95,121,50,109,97,120,0,69,120,112,101,99,116,105,110,103,32,105,116,101,114,97,116,111,114,32,9,102,111,114,32,91,60,118,97,114,62,32,61,32,60,115,116,97,114,116,62,32,58,32,60,101,110,100,62,93,10,9,9,9,111,114,9,102,111,114,32,91,60,118,97,114,62,32,105,110,32,34,115,116,114,105,110,103,32,111,102,32,119,111,114,100,115,34,93,0,0,0,0,0,0,0,0,71,80,86,65,76,95,89,50,95,77,65,88,0,0,0,0,116,109,95,121,101,97,114,0,117,110,107,110,111,119,110,32,111,114,32,97,109,98,105,103,117,111,117,115,32,116,101,114,109,105,110,97,108,32,116,121,112,101,59,32,116,121,112,101,32,106,117,115,116,32,39,115,101,116,32,116,101,114,109,105,110,97,108,39,32,102,111,114,32,97,32,108,105,115,116,0,112,108,111,116,95,97,120,105,115,95,121,50,109,105,110,0,83,121,110,116,97,120,32,101,114,114,111,114,58,32,109,105,115,115,105,110,103,32,98,108,111,99,107,32,116,101,114,109,105,110,97,116,111,114,32,125,0,0,0,0,0,0,0,0,108,111,97,36,100,112,97,116,104,0,0,0,0,0,0,0,98,108,97,110,107,0,0,0,116,117,114,110,105,110,103,32,114,117,108,101,114,32,111,110,46,10,0,0,0,0,0,0,71,80,86,65,76,95,89,50,95,77,73,78,0,0,0,0,101,120,116,114,97,110,101,111,117,115,32,97,114,103,117,109,101,110,116,115,32,105,110,32,115,101,116,32,116,105,99,115,0,0,0,0,0,0,0,0,123,32,48,46,57,57,57,57,57,32,121,48,32,115,117,98,32,103,32,0,0,0,0,0,103,110,117,112,108,111,116,95,115,118,103,46,112,108,111,116,95,97,120,105,115,95,120,50,109,105,110,32,61,32,34,110,111,110,101,34,10,0,0,0,99,97,108,108,0,0,0,0,121,32,112,111,115,0,0,0,118,101,114,116,105,99,97,108,32,109,111,116,105,111,110,32,45,45,32,99,104,97,110,103,101,32,120,121,112,108,97,110,101,0,0,0,0,0,0,0,102,97,105,108,115,97,102,101,0,0,0,0,0,0,0,0,112,108,111,116,95,97,120,105,115,95,120,50,109,97,120,0,99,97,110,32,111,110,108,121,32,109,111,100,32,105,110,116,115,0,0,0,0,0,0,0,71,80,86,65,76,95,88,50,95,77,65,88,0,0,0,0,83,111,114,114,121,44,32,110,111,32,104,101,108,112,32,102,111,114,32,39,37,115,39,10,0,0,0,0,0,0,0,0,112,108,111,116,95,97,120,105,115,95,120,50,109,105,110,0,71,80,86,65,76,95,88,50,95,77,73,78,0,0,0,0,103,110,117,112,108,111,116,95,115,118,103,46,112,108,111,116,95,97,120,105,115,95,114,109,105,110,32,61,32,37,103,59,10,0,0,0,0,0,0,0,102,97,108,115,101,0,0,0,116,114,117,101,0,0,0,0,116,109,95,109,111,110,0,0,117,110,107,110,111,119,110,0,103,110,117,112,108,111,116,95,115,118,103,46,112,111,108,97,114,95,109,111,100,101,32,61,32,37,115,59,10,0,0,0,108,116,0,0,0,0,0,0,105,110,100,101,120,95,109,97,120,0,0,0,0,0,0,0,112,97,114,116,105,97,108,32,109,97,116,99,104,32,97,103,97,105,110,115,116,32,99,111,108,117,109,110,32,37,100,32,104,101,97,100,101,114,32,37,115,0,0,0,0,0,0,0,112,108,111,116,95,97,120,105,115,95,121,109,97,120,0,0,68,101,112,114,101,99,97,116,101,100,32,115,121,110,116,97,120,32,45,32,112,108,101,97,115,101,32,117,115,101,32,39,115,101,116,32,116,105,99,115,32,115,99,97,108,101,39,32,107,101,121,119,111,114,100,0,71,80,86,65,76,95,89,95,77,65,88,0,0,0,0,0,60,83,104,105,102,116,45,66,50,45,77,111,116,105,111,110,62,0,0,0,0,0,0,0,112,108,111,116,95,97,120,105,115,95,121,109,105,110,0,0,71,80,86,65,76,95,89,95,77,73,78,0,0,0,0,0,72,101,108,112,32,116,111,112,105,99,58,32,0,0,0,0])
+.concat([118,0,0,0,0,0,0,0,111,117,116,32,111,102,32,109,101,109,111,114,121,32,102,111,114,32,37,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,32,71,78,85,80,76,79,84,58,32,76,97,84,101,88,32,112,105,99,116,117,114,101,32,117,115,105,110,103,32,116,112,105,99,32,92,115,112,101,99,105,97,108,115,10,37,37,32,32,32,32,32,32,32,32,32,32,119,105,116,104,32,37,100,32,112,111,105,110,116,32,116,121,112,101,115,32,97,110,100,32,37,100,32,108,105,110,101,32,116,121,112,101,115,10,37,37,32,79,112,116,105,111,110,115,58,32,112,111,105,110,116,115,105,122,101,32,61,32,37,100,44,32,108,105,110,101,119,105,100,116,104,32,61,32,37,100,44,32,105,110,116,101,114,118,97,108,32,61,32,37,102,10,37,37,32,84,111,32,99,104,97,110,103,101,32,97,98,111,118,101,32,111,112,116,105,111,110,115,44,32,115,97,121,58,10,37,37,32,115,101,116,32,116,101,114,109,105,110,97,108,32,116,112,105,99,32,112,111,105,110,116,115,105,122,101,95,118,97,108,117,101,32,108,105,110,101,119,105,100,116,104,95,118,97,108,117,101,32,105,110,116,101,114,118,97,108,95,118,97,108,117,101,10,37,37,32,40,112,111,105,110,116,115,105,122,101,32,97,110,100,32,108,105,110,101,119,105,100,116,104,32,45,32,105,110,116,101,103,101,114,115,32,105,110,32,109,105,108,108,105,45,105,110,99,104,101,115,46,10,37,37,32,32,105,110,116,101,114,118,97,108,32,45,32,97,32,102,108,111,97,116,32,105,110,32,105,110,99,104,101,115,46,32,32,73,102,32,122,101,114,111,32,105,115,32,115,112,101,99,105,102,105,101,100,44,32,10,37,37,32,32,116,104,101,32,100,101,102,97,117,108,116,32,118,97,108,117,101,32,105,115,32,99,104,111,115,101,110,46,41,10,92,115,101,116,108,101,110,103,116,104,123,92,117,110,105,116,108,101,110,103,116,104,125,123,37,102,105,110,125,37,37,10,0,0,0,0,37,115,92,98,101,103,105,110,123,112,105,99,116,117,114,101,125,40,37,100,44,37,100,41,40,37,100,44,37,100,41,37,37,32,37,115,10,0,0,0,64,74,1,0,0,0,0,0,184,73,1,0,1,0,0,0,0,0,0,0,2,0,0,0,232,195,1,0,0,0,0,0,144,195,1,0,1,0,0,0,80,195,1,0,1,0,0,0,144,245,1,0,2,0,0,0,40,245,1,0,2,0,0,0,32,50,1,0,3,0,0,0,232,49,1,0,4,0,0,0,200,49,1,0,5,0,0,0,40,195,1,0,6,0,0,0,192,49,1,0,7,0,0,0,192,229,1,0,8,0,0,0,72,236,1,0,10,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,166,1,0,200,165,1,0,248,164,1,0,184,164,1,0,88,164,1,0,8,164,1,0,176,163,1,0,120,163,1,0,64,163,1,0,232,162,1,0,152,162,1,0,248,161,1,0,4,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,92,98,101,103,105,110,123,116,101,120,100,114,97,119,125,10,92,110,111,114,109,97,108,115,105,122,101,10,92,105,102,120,92,112,97,116,104,68,69,70,73,78,69,68,92,114,101,108,97,120,92,101,108,115,101,92,108,101,116,92,112,97,116,104,68,69,70,73,78,69,68,92,114,101,108,97,120,10,32,92,100,101,102,92,81,116,71,102,114,123,92,105,102,120,32,40,92,84,71,114,101,32,92,108,101,116,92,89,104,101,116,84,92,99,112,97,116,104,92,101,108,115,101,92,108,101,116,92,89,104,101,116,84,92,114,101,108,97,120,92,102,105,92,89,104,101,116,84,125,10,32,92,100,101,102,92,112,97,116,104,32,40,35,49,32,35,50,41,123,92,109,111,118,101,32,40,35,49,32,35,50,41,92,102,117,116,117,114,101,108,101,116,92,84,71,114,101,92,81,116,71,102,114,125,10,32,92,100,101,102,92,99,112,97,116,104,32,40,35,49,32,35,50,41,123,92,108,118,101,99,32,40,35,49,32,35,50,41,92,102,117,116,117,114,101,108,101,116,92,84,71,114,101,92,81,116,71,102,114,125,10,92,102,105,10,92,100,114,97,119,100,105,109,32,112,116,10,92,115,101,116,117,110,105,116,115,99,97,108,101,32,37,50,46,50,102,10,92,108,105,110,101,119,100,32,37,100,10,92,116,101,120,116,114,101,102,32,104,58,76,32,118,58,67,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,18,0,0,0,0,0,0,255,255,255,255,0,0,0,0,112,23,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,0,0,0,0,0,0,40,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,152,190,2,0,192,31,1,0,184,31,1,0,72,31,1,0,24,31,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,253,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,1,0,0,0,3,0,0,0,2,0,0,0,1,0,0,0,3,0,0,0,2,0,0,0,1,0,0,0,0,0,0,0,7,0,0,0,7,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,32,3,0,240,30,3,0,160,31,3,0,8,32,3,0,240,31,3,0,192,31,3,0,232,30,3,0,144,31,3,0,184,31,3,0,0,0,0,0,56,32,3,0,8,32,3,0,240,31,3,0,200,31,3,0,192,31,3,0,184,31,3,0,160,31,3,0,144,31,3,0,128,31,3,0,56,31,3,0,24,31,3,0,8,31,3,0,240,30,3,0,232,30,3,0,216,30,3,0,184,30,3,0,152,30,3,0,144,30,3,0,128,30,3,0,64,30,3,0,48,30,3,0,248,29,3,0,208,29,3,0,176,29,3,0,160,29,3,0,152,29,3,0,112,29,3,0,104,29,3,0,88,29,3,0,40,29,3,0,8,29,3,0,248,28,3,0,224,28,3,0,216,28,3,0,184,28,3,0,176,28,3,0,160,28,3,0,152,28,3,0,64,28,3,0,40,28,3,0,16,28,3,0,216,27,3,0,208,27,3,0,200,27,3,0,192,27,3,0,184,27,3,0,168,27,3,0,160,27,3,0,144,27,3,0,64,27,3,0,48,27,3,0,240,26,3,0,232,26,3,0,224,26,3,0,216,26,3,0,208,26,3,0,184,26,3,0,176,26,3,0,160,26,3,0,80,26,3,0,64,26,3,0,48,26,3,0,208,25,3,0,200,25,3,0,192,25,3,0,136,25,3,0,112,25,3,0,88,25,3,0,80,25,3,0,32,25,3,0,16,25,3,0,248,24,3,0,224,24,3,0,216,24,3,0,208,24,3,0,200,24,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,254,1,0,3,0,0,0,32,50,1,0,0,0,0,0,232,49,1,0,1,0,0,0,184,208,2,0,2,0,0,0,0,224,1,0,4,0,0,0,192,218,1,0,5,0,0,0,152,208,2,0,9,0,0,0,144,195,1,0,10,0,0,0,80,195,1,0,10,0,0,0,72,208,2,0,11,0,0,0,56,208,2,0,12,0,0,0,24,208,2,0,12,0,0,0,232,247,1,0,13,0,0,0,80,248,1,0,14,0,0,0,48,246,1,0,15,0,0,0,224,245,1,0,15,0,0,0,144,245,1,0,16,0,0,0,40,245,1,0,16,0,0,0,192,253,1,0,39,0,0,0,248,207,2,0,17,0,0,0,224,207,2,0,18,0,0,0,200,207,2,0,19,0,0,0,16,24,2,0,21,0,0,0,112,207,2,0,20,0,0,0,200,210,2,0,22,0,0,0,176,210,2,0,23,0,0,0,80,207,2,0,24,0,0,0,96,244,1,0,30,0,0,0,48,207,2,0,25,0,0,0,32,207,2,0,26,0,0,0,96,211,2,0,27,0,0,0,24,211,2,0,28,0,0,0,192,229,1,0,29,0,0,0,224,252,1,0,7,0,0,0,24,253,1,0,8,0,0,0,200,251,1,0,37,0,0,0,72,251,1,0,38,0,0,0,56,117,1,0,31,0,0,0,240,206,2,0,32,0,0,0,224,206,2,0,33,0,0,0,152,206,2,0,34,0,0,0,72,206,2,0,35,0,0,0,48,206,2,0,36,0,0,0,232,205,2,0,40,0,0,0,200,205,2,0,41,0,0,0,136,82,3,0,42,0,0,0,184,205,2,0,43,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,101,108,118,101,116,105,99,97,44,49,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,101,118,101,108,49,32,83,117,112,112,114,101,115,115,80,68,70,77,97,114,107,32,111,114,32,10,123,125,32,123,10,47,83,68,105,99,116,32,49,48,32,100,105,99,116,32,100,101,102,10,115,121,115,116,101,109,100,105,99,116,32,47,112,100,102,109,97,114,107,32,107,110,111,119,110,32,110,111,116,32,123,10,32,32,117,115,101,114,100,105,99,116,32,47,112,100,102,109,97,114,107,32,115,121,115,116,101,109,100,105,99,116,32,47,99,108,101,97,114,116,111,109,97,114,107,32,103,101,116,32,112,117,116,10,125,32,105,102,10,83,68,105,99,116,32,98,101,103,105,110,32,91,10,32,32,47,84,105,116,108,101,32,40,37,115,41,10,32,32,47,83,117,98,106,101,99,116,32,40,103,110,117,112,108,111,116,32,112,108,111,116,41,10,32,32,47,67,114,101,97,116,111,114,32,40,103,110,117,112,108,111,116,32,37,115,32,112,97,116,99,104,108,101,118,101,108,32,37,115,41,10,32,32,47,65,117,116,104,111,114,32,40,37,115,41,10,37,37,32,32,47,80,114,111,100,117,99,101,114,32,40,103,110,117,112,108,111,116,41,10,37,37,32,32,47,75,101,121,119,111,114,100,115,32,40,41,10,32,32,47,67,114,101,97,116,105,111,110,68,97,116,101,32,40,37,115,41,10,32,32,47,68,79,67,73,78,70,79,32,112,100,102,109,97,114,107,10,101,110,100,10,125,32,105,102,101,108,115,101,10,0,0,0,37,37,37,37,69,110,100,67,111,109,109,101,110,116,115,10,37,37,37,37,66,101,103,105,110,80,114,111,108,111,103,10,47,103,110,117,100,105,99,116,32,50,53,54,32,100,105,99,116,32,100,101,102,10,103,110,117,100,105,99,116,32,98,101,103,105,110,10,37,37,10,37,37,32,84,104,101,32,102,111,108,108,111,119,105,110,103,32,116,114,117,101,47,102,97,108,115,101,32,102,108,97,103,115,32,109,97,121,32,98,101,32,101,100,105,116,101,100,32,98,121,32,104,97,110,100,32,105,102,32,100,101,115,105,114,101,100,46,10,37,37,32,84,104,101,32,117,110,105,116,32,108,105,110,101,32,119,105,100,116,104,32,97,110,100,32,103,114,97,121,115,99,97,108,101,32,105,109,97,103,101,32,103,97,109,109,97,32,99,111,114,114,101,99,116,105,111,110,32,109,97,121,32,97,108,115,111,32,98,101,32,99,104,97,110,103,101,100,46,10,37,37,10,47,67,111,108,111,114,32,37,115,32,100,101,102,10,47,66,108,97,99,107,116,101,120,116,32,37,115,32,100,101,102,10,47,83,111,108,105,100,32,37,115,32,100,101,102,10,47,68,97,115,104,108,101,110,103,116,104,32,37,103,32,100,101,102,10,47,76,97,110,100,115,99,97,112,101,32,37,115,32,100,101,102,10,47,76,101,118,101,108,49,32,37,115,32,100,101,102,10,47,82,111,117,110,100,101,100,32,37,115,32,100,101,102,10,47,67,108,105,112,84,111,66,111,117,110,100,105,110,103,66,111,120,32,37,115,32,100,101,102,10,47,83,117,112,112,114,101,115,115,80,68,70,77,97,114,107,32,102,97,108,115,101,32,100,101,102,10,47,84,114,97,110,115,112,97,114,101,110,116,80,97,116,116,101,114,110,115,32,102,97,108,115,101,32,100,101,102,10,47,103,110,117,108,105,110,101,119,105,100,116,104,32,37,46,51,102,32,100,101,102,10,47,117,115,101,114,108,105,110,101,119,105,100,116,104,32,103,110,117,108,105,110,101,119,105,100,116,104,32,100,101,102,10,47,71,97,109,109,97,32,49,46,48,32,100,101,102,10,47,66,97,99,107,103,114,111,117,110,100,67,111,108,111,114,32,123,37,46,51,102,32,37,46,51,102,32,37,46,51,102,125,32,100,101,102,10,37,37,10,47,118,115,104,105,102,116,32,37,100,32,100,101,102,10,47,100,108,49,32,123,10,32,32,37,46,49,102,32,68,97,115,104,108,101,110,103,116,104,32,109,117,108,32,109,117,108,10,32,32,82,111,117,110,100,101,100,32,123,32,99,117,114,114,101,110,116,108,105,110,101,119,105,100,116,104,32,48,46,55,53,32,109,117,108,32,115,117,98,32,100,117,112,32,48,32,108,101,32,123,32,112,111,112,32,48,46,48,49,32,125,32,105,102,32,125,32,105,102,10,125,32,100,101,102,10,47,100,108,50,32,123,10,32,32,37,46,49,102,32,68,97,115,104,108,101,110,103,116,104,32,109,117,108,32,109,117,108,10,32,32,82,111,117,110,100,101,100,32,123,32,99,117,114,114,101,110,116,108,105,110,101,119,105,100,116,104,32,48,46,55,53,32,109,117,108,32,97,100,100,32,125,32,105,102,10,125,32,100,101,102,10,47,104,112,116,95,32,37,46,49,102,32,100,101,102,10,47,118,112,116,95,32,37,46,49,102,32,100,101,102,10,47,104,112,116,32,104,112,116,95,32,100,101,102,10,47,118,112,116,32,118,112,116,95,32,100,101,102,10,0,0,0,0,0,0,37,37,37,37,67,114,101,97,116,111,114,58,32,103,110,117,112,108,111,116,32,37,115,32,112,97,116,99,104,108,101,118,101,108,32,37,115,10,37,37,37,37,67,114,101,97,116,105,111,110,68,97,116,101,58,32,37,115,10,37,37,37,37,68,111,99,117,109,101,110,116,70,111,110,116,115,58,32,37,115,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,153,1,0,40,153,1,0,224,152,1,0,200,152,1,0,184,152,1,0,112,152,1,0,88,152,1,0,64,152,1,0,48,152,1,0,24,152,1,0,112,151,1,0,232,150,1,0,0,0,0,0,0,0,0,0,224,148,1,0,192,148,1,0,176,148,1,0,160,148,1,0,144,148,1,0,40,148,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,49,1,0,112,51,1,0,64,179,2,0,21,177,0,0,148,132,0,0,32,50,1,0,128,51,1,0,56,179,2,0,148,132,0,0,21,177,0,0,40,139,3,0,0,0,0,0,64,178,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,195,1,0,0,0,0,0,144,195,1,0,1,0,0,0,80,195,1,0,1,0,0,0,40,195,1,0,2,0,0,0,80,248,1,0,3,0,0,0,232,194,1,0,4,0,0,0,184,194,1,0,5,0,0,0,96,194,1,0,6,0,0,0,24,194,1,0,7,0,0,0,80,193,1,0,11,0,0,0,232,192,1,0,8,0,0,0,144,192,1,0,9,0,0,0,88,192,1,0,10,0,0,0,0,192,1,0,14,0,0,0,208,191,1,0,15,0,0,0,152,191,1,0,16,0,0,0,104,191,1,0,12,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,254,255,255,255,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,208,2,0,0,0,0,0,144,195,1,0,1,0,0,0,80,195,1,0,1,0,0,0,48,195,2,0,2,0,0,0,24,195,2,0,3,0,0,0,224,194,2,0,4,0,0,0,216,194,2,0,4,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,192,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,63,5,0,0,0,6,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,0,0,192,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,63,15,0,0,0,10,0,0,0,15,0,0,0,10,0,0,0,0,0,0,0,0,0,192,63,10,0,0,0,15,0,0,0,10,0,0,0,15,0,0,0,0,0,0,0,0,0,192,63,20,0,0,0,10,0,0,0,5,0,0,0,10,0,0,0,0,0,0,0,0,0,192,63,10,0,0,0,6,0,0,0,10,0,0,0,6,0,0,0,0,0,0,0,0,0,192,63,15,0,0,0,6,0,0,0,5,0,0,0,10,0,0,0,0,0,0,0,0,0,192,63,10,0,0,0,6,0,0,0,10,0,0,0,10,0,0,0,0,0,0,0,0,0,192,63,5,0,0,0,6,0,0,0,5,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,1,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,1,0,0,0,4,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,150,1,0,152,190,2,0,152,150,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,130,1,0,208,129,1,0,184,105,1,0,80,105,1,0,240,104,1,0,176,104,1,0,56,104,1,0,0,129,1,0,8,104,1,0,216,103,1,0,88,103,1,0,208,102,1,0,144,102,1,0,104,102,1,0,0,102,1,0,0,0,0,0,176,97,1,0,0,0,0,0,160,97,1,0,1,0,0,0,48,254,1,0,2,0,0,0,120,97,1,0,3,0,0,0,88,97,1,0,4,0,0,0,56,97,1,0,5,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,205,204,204,62,0,0,0,0,205,204,204,62,0,0,160,64,205,204,76,63,0,0,0,0,0,0,128,63,0,0,160,64,154,153,153,63,0,0,0,0,0,0,128,63,0,0,32,65,10,0,0,0,0,0,0,0,100,111,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,4,0,0,0,0,0,0,0,0,3,8,0,0,0,0,0,0,0,0,8,8,0,0,0,0,0,0,0,0,16,6,3,6,0,0,0,0,0,0,16,6,8,6,0,0,0,0,0,0,16,4,1,4,8,4,1,4,0,0,16,4,1,8,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,9,0,0,0,0,0,0,228,12,0,0,0,0,0,0,36,9,0,0,0,0,0,0,228,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,50,1,0,0,0,0,0,232,49,1,0,1,0,0,0,0,0,0,0,2,0,0,0,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,255,255,255,0,0,0,0,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,246,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,181,2,0,88,181,2,0,72,181,2,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,246,255,255,255,0,0,0,0,112,249,1,0,0,0,0,0,208,250,1,0,1,0,0,0,40,250,1,0,1,0,0,0,144,175,2,0,2,0,0,0,136,175,2,0,3,0,0,0,112,175,2,0,4,0,0,0,56,86,3,0,5,0,0,0,80,175,2,0,6,0,0,0,216,174,2,0,7,0,0,0,0,0,0,0,8,0,0,0,6,0,0,0,0,0,0,0,152,190,2,0,200,181,2,0,200,181,2,0,200,181,2,0,200,181,2,0,200,181,2,0,200,181,2,0,200,181,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
+.concat([136,193,2,0,128,193,2,0,21,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,0,0,0,0,0,0,0,0,52,16,0,0,0,0,0,0,120,193,2,0,40,193,2,0,21,1,0,0,0,0,0,0,0,0,0,0,0,0,34,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,208,192,2,0,144,192,2,0,21,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,0,0,0,0,0,0,0,0,5,16,0,0,0,0,0,0,40,192,2,0,8,192,2,0,108,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,0,0,0,0,0,0,0,0,45,16,0,0,0,0,0,0,216,191,2,0,200,191,2,0,21,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,0,0,0,0,0,0,0,0,72,16,0,0,0,0,0,0,128,191,2,0,120,191,2,0,21,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,0,0,0,0,0,0,0,0,218,64,0,0,0,0,0,0,104,191,2,0,176,98,1,0,21,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,0,0,0,0,0,0,0,0,3,16,0,0,0,0,0,0,40,191,2,0,16,191,2,0,21,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,0,0,0,0,0,0,0,0,101,16,0,0,0,0,0,0,200,190,2,0,136,190,2,0,21,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,0,0,0,0,0,0,0,0,6,16,0,0,0,0,0,0,104,190,2,0,80,190,2,0,21,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,0,0,0,0,0,0,0,0,17,16,0,0,0,0,0,0,64,190,2,0,32,190,2,0,21,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,0,0,0,0,1,0,0,0,10,17,0,0,0,0,0,0,8,190,2,0,248,189,2,0,21,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,0,0,0,0,0,0,0,0,5,66,0,0,0,0,0,0,216,189,2,0,200,189,2,0,21,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,4,0,0,0,3,0,0,0,44,16,0,0,0,0,0,0,144,189,2,0,24,189,2,0,21,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,1,0,0,0,0,0,0,0,20,16,0,0,0,0,0,0,248,188,2,0,208,188,2,0,21,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,0,0,0,0,0,0,0,0,201,16,0,0,0,0,0,0,168,188,2,0,144,188,2,0,109,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,0,0,0,0,0,0,0,0,46,65,0,0,0,0,0,0,128,188,2,0,96,188,2,0,108,72,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,1,0,0,0,0,0,0,0,170,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,152,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,1,0,0,0,7,0,0,0,1,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,7,0,0,0,2,0,0,0,0,0,0,0,32,32,114,117,108,101,114,58,32,91,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,84,2,0,152,190,2,0,152,190,2,0,24,84,2,0,8,84,2,0,248,83,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,73,84,95,76,79,71,0,176,4,0,0,0,0,0,0,176,4,0,0,0,0,0,0,51,46,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,231,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,160,2,0,3,0,0,0,144,195,1,0,1,0,0,0,80,195,1,0,1,0,0,0,80,248,1,0,15,0,0,0,24,160,2,0,12,0,0,0,192,229,1,0,9,0,0,0,240,159,2,0,10,0,0,0,96,255,1,0,4,0,0,0,232,49,1,0,7,0,0,0,200,159,2,0,5,0,0,0,232,195,1,0,0,0,0,0,184,159,2,0,13,0,0,0,152,159,2,0,6,0,0,0,120,97,1,0,8,0,0,0,144,159,2,0,2,0,0,0,232,247,1,0,14,0,0,0,144,245,1,0,11,0,0,0,112,159,2,0,11,0,0,0,24,159,2,0,18,0,0,0,240,158,2,0,16,0,0,0,192,158,2,0,19,0,0,0,176,158,2,0,17,0,0,0,144,158,2,0,20,0,0,0,0,0,0,0,21,0,0,0,4,0,0,0,2,0,0,0,1,0,0,0,5,0,0,0,3,0,0,0,6,0,0,0,0,0,0,0,26,0,0,0,11,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,134,1,0,0,0,0,0,176,132,1,0,1,0,0,0,8,131,1,0,2,0,0,0,88,128,1,0,3,0,0,0,0,126,1,0,4,0,0,0,152,123,1,0,5,0,0,0,112,121,1,0,6,0,0,0,208,119,1,0,7,0,0,0,0,118,1,0,8,0,0,0,24,116,1,0,9,0,0,0,80,114,1,0,10,0,0,0,152,111,1,0,11,0,0,0,48,109,1,0,12,0,0,0,232,105,1,0,13,0,0,0,176,102,1,0,14,0,0,0,16,100,1,0,15,0,0,0,216,97,1,0,16,0,0,0,224,95,1,0,17,0,0,0,16,93,1,0,18,0,0,0,32,91,1,0,19,0,0,0,232,88,1,0,20,0,0,0,224,83,1,0,21,0,0,0,200,79,1,0,22,0,0,0,240,74,1,0,23,0,0,0,200,72,1,0,24,0,0,0,128,69,1,0,25,0,0,0,240,65,1,0,26,0,0,0,192,59,1,0,27,0,0,0,216,54,1,0,28,0,0,0,0,52,1,0,29,0,0,0,216,49,1,0,30,0,0,0,8,48,1,0,31,0,0,0,224,45,1,0,32,0,0,0,128,43,1,0,33,0,0,0,56,41,1,0,34,0,0,0,0,0,0,0,255,255,255,255,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,3,0,200,23,3,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,78,1,0,0,138,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,19,3,0,64,19,3,0,0,19,3,0,192,18,3,0,112,18,3,0,16,18,3,0,192,17,3,0,112,17,3,0,208,16,3,0,104,16,3,0,8,16,3,0,232,15,3,0,216,15,3,0,128,15,3,0,248,14,3,0,160,14,3,0,96,14,3,0,56,14,3,0,136,13,3,0,88,13,3,0,224,12,3,0,120,12,3,0,0,12,3,0,184,11,3,0,128,11,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0,0,0,255,0,0,0,0,255,0,255,0,255,0,0,0,128,0,128,0,0,0,0,128,128,0,0,0,0,0,128,128,128,0,0,128,64,0,128,128,0,0,128,0,128,0,192,192,192,0,0,255,255,0,255,255,0,0,0,0,0,0,5,0,0,0,8,0,0,0,5,0,0,0,8,0,0,0,5,0,0,0,8,0,0,0,5,0,0,0,8,0,0,0,4,0,0,0,2,0,0,0,4,0,0,0,2,0,0,0,4,0,0,0,2,0,0,0,4,0,0,0,2,0,0,0,4,0,0,0,8,0,0,0,4,0,0,0,2,0,0,0,4,0,0,0,8,0,0,0,4,0,0,0,2,0,0,0,4,0,0,0,9,0,0,0,4,0,0,0,2,0,0,0,4,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,130,1,0,112,130,1,0,48,130,1,0,208,129,1,0,0,129,1,0,200,128,1,0,72,128,1,0,48,128,1,0,32,128,1,0,200,127,1,0,160,127,1,0,120,127,1,0,64,127,1,0,16,127,1,0,176,126,1,0,40,126,1,0,216,125,1,0,168,125,1,0,72,128,1,0,48,128,1,0,200,127,1,0,160,127,1,0,0,0,0,0,0,0,0,0,120,125,1,0,48,125,1,0,248,124,1,0,200,124,1,0,152,124,1,0,104,124,1,0,72,128,1,0,200,127,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,119,1,0,128,119,1,0,88,119,1,0,160,119,1,0,64,119,1,0,0,0,0,0,0,0,0,0,0,0,0,0,160,119,1,0,128,119,1,0,88,119,1,0,16,119,1,0,240,118,1,0,208,118,1,0,120,118,1,0,0,0,0,0,160,119,1,0,128,119,1,0,88,119,1,0,88,119,1,0,88,119,1,0,88,119,1,0,88,119,1,0,88,119,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,10,84,65,66,76,69,10,32,32,50,10,76,84,89,80,69,10,32,55,48,10,32,32,32,32,37,100,10,48,10,76,84,89,80,69,10,32,32,50,10,67,79,78,84,73,78,85,79,85,83,10,32,55,48,10,32,32,32,32,54,52,10,32,32,51,10,83,111,108,105,100,32,108,105,110,101,10,32,55,50,10,32,32,32,32,54,53,10,32,55,51,10,32,32,32,32,32,32,48,10,32,52,48,10,48,46,48,10,32,32,48,10,76,84,89,80,69,10,32,32,50,10,68,65,83,72,69,68,10,32,55,48,10,32,32,32,32,54,52,10,32,32,51,10,95,95,32,95,95,32,95,95,32,95,95,32,95,95,32,95,95,32,95,95,32,95,95,32,95,95,32,95,95,32,95,95,32,95,95,32,95,95,32,95,95,32,95,95,10,32,55,50,10,32,32,32,32,54,53,10,32,55,51,10,32,32,32,32,32,50,10,32,52,48,10,48,46,55,53,10,32,52,57,10,48,46,53,10,32,52,57,10,45,48,46,50,53,10,32,32,48,10,76,84,89,80,69,10,32,32,50,10,72,73,68,68,69,78,10,32,55,48,10,32,32,32,32,54,52,10,32,32,51,10,95,32,95,32,95,32,95,32,95,32,95,32,95,32,95,32,95,32,95,32,95,32,95,32,95,32,95,32,95,32,95,32,95,32,95,32,95,32,95,32,95,32,95,32,95,10,32,55,50,10,32,32,32,32,54,53,10,32,55,51,10,32,32,32,32,32,50,10,32,52,48,10,48,46,51,55,53,10,32,52,57,10,48,46,50,53,10,32,52,57,10,45,48,46,49,50,53,10,32,32,48,10,76,84,89,80,69,10,32,32,50,10,67,69,78,84,69,82,10,32,55,48,10,32,32,32,32,54,52,10,32,32,51,10,95,95,95,95,32,95,32,95,95,95,95,32,95,32,95,95,95,95,32,95,32,95,95,95,95,32,95,32,95,95,95,95,32,95,32,95,95,95,95,32,95,32,95,95,95,95,10,32,55,50,10,32,32,32,32,54,53,10,32,55,51,10,32,32,32,32,32,52,10,32,52,48,10,50,46,48,10,32,52,57,10,49,46,50,53,10,32,52,57,10,45,48,46,50,53,10,32,52,57,10,48,46,50,53,10,32,52,57,10,45,48,46,50,53,10,32,32,48,10,76,84,89,80,69,10,32,32,50,10,80,72,65,78,84,79,77,10,32,55,48,10,32,32,32,32,54,52,10,32,32,51,10,95,95,95,95,95,32,95,32,95,32,95,95,95,95,95,32,95,32,95,32,95,95,95,95,95,32,95,32,95,32,95,95,95,95,95,32,95,32,95,32,95,95,95,95,10,32,55,50,10,32,32,32,32,54,53,10,32,55,51,10,32,32,32,32,32,54,10,32,52,48,10,50,46,53,10,32,52,57,10,49,46,50,53,10,32,52,57,10,45,48,46,50,53,10,32,52,57,10,48,46,50,53,10,32,52,57,10,45,48,46,50,53,10,32,52,57,10,48,46,50,53,10,32,52,57,10,45,48,46,50,53,10,32,32,48,10,76,84,89,80,69,10,32,32,50,10,68,79,84,10,32,55,48,10,32,32,32,32,54,52,10,32,32,51,10,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,10,32,55,50,10,32,32,32,32,54,53,10,32,55,51,10,32,32,32,32,32,50,10,32,52,48,10,48,46,50,53,10,32,52,57,10,48,46,48,10,32,52,57,10,45,48,46,50,53,10,32,32,48,10,76,84,89,80,69,10,32,32,50,10,68,65,83,72,68,79,84,10,32,55,48,10,32,32,32,32,54,52,10,32,32,51,10,95,95,32,46,32,95,95,32,46,32,95,95,32,46,32,95,95,32,46,32,95,95,32,46,32,95,95,32,46,32,95,95,32,46,32,95,95,32,46,32,95,95,32,46,32,95,95,10,32,55,50,10,32,32,32,32,54,53,10,32,55,51,10,32,32,32,32,32,52,10,32,52,48,10,49,46,48,10,32,52,57,10,48,46,53,10,32,52,57,10,45,48,46,50,53,10,32,52,57,10,48,46,48,10,32,52,57,10,45,48,46,50,53,10,32,32,48,10,69,78,68,84,65,66,10,0,0,0,0,0,0,0,57,57,57,10,37,37,32,71,78,85,80,76,79,84,58,32,100,120,102,32,102,105,108,101,32,102,111,114,32,65,117,116,111,67,97,100,10,32,32,48,10,83,69,67,84,73,79,78,10,32,32,50,10,72,69,65,68,69,82,10,32,32,57,10,36,69,88,84,77,73,78,10,32,49,48,10,48,46,48,48,48,10,32,50,48,10,48,46,48,48,48,10,32,32,57,10,36,69,88,84,77,65,88,10,32,49,48,10,37,45,54,46,51,102,10,32,50,48,10,37,45,54,46,51,102,10,32,32,57,10,36,76,73,77,77,73,78,10,32,49,48,10,48,46,48,48,48,10,32,50,48,10,48,46,48,48,48,10,32,32,57,10,36,76,73,77,77,65,88,10,32,49,48,10,37,45,54,46,51,102,10,32,50,48,10,37,45,54,46,51,102,10,32,32,57,10,36,84,69,88,84,83,84,89,76,69,10,32,32,55,10,37,115,10,32,32,57,10,36,84,69,88,84,83,73,90,69,10,32,52,48,10,37,45,54,46,51,102,10,32,32,57,10,36,80,76,73,78,69,87,73,68,10,32,52,48,10,37,45,54,46,52,102,10,32,32,57,10,36,76,84,83,67,65,76,69,10,32,32,52,48,10,37,45,54,46,51,102,10,32,32,57,10,36,67,79,79,82,68,83,10,32,55,48,10,32,32,49,10,32,32,57,10,36,67,69,76,84,89,80,69,10,32,54,10,66,89,76,65,89,69,82,10,32,32,57,10,36,67,76,65,89,69,82,10,32,32,56,10,48,10,32,32,57,10,36,67,69,67,79,76,79,82,10,32,54,50,10,32,32,32,37,115,10,32,32,57,10,36,77,69,78,85,10,32,32,49,10,97,99,97,100,10,32,32,48,10,69,78,68,83,69,67,10,32,32,48,10,83,69,67,84,73,79,78,10,32,32,50,10,84,65,66,76,69,83,10,0,0,0,0,0,208,149,2,0,0,0,0,0,200,149,2,0,1,0,0,0,0,224,1,0,2,0,0,0,184,149,2,0,3,0,0,0,192,253,1,0,4,0,0,0,0,0,0,0,5,0,0,0,42,35,36,37,64,38,61,0,0,0,0,0,0,0,0,0,200,172,3,0,0,0,0,0,255,255,255,255,255,255,15,0,255,0,255,0,255,15,240,0,255,127,240,0,7,7,7,7,255,7,255,7,255,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,208,2,0,0,0,0,0,112,249,1,0,1,0,0,0,248,142,2,0,2,0,0,0,224,142,2,0,2,0,0,0,0,0,0,0,3,0,0,0,49,46,48,0,0,0,0,0,50,48,49,49,45,49,49,45,48,53,0,0,0,0,0,0,99,101,110,116,101,114,0,0,0,0,108,101,102,116,0,0,0,0,0,0,114,105,103,104,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,64,0,0,0,0,0,0,8,64,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,0,0,0,0,0,0,20,64,0,0,0,0,0,0,8,64,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,48,254,1,0,0,0,0,0,192,253,1,0,1,0,0,0,88,253,1,0,2,0,0,0,24,253,1,0,3,0,0,0,224,252,1,0,4,0,0,0,144,252,1,0,5,0,0,0,0,252,1,0,6,0,0,0,200,251,1,0,7,0,0,0,72,251,1,0,8,0,0,0,208,250,1,0,9,0,0,0,40,250,1,0,9,0,0,0,112,249,1,0,10,0,0,0,80,248,1,0,11,0,0,0,232,247,1,0,12,0,0,0,128,247,1,0,13,0,0,0,48,26,2,0,14,0,0,0,8,247,1,0,15,0,0,0,16,24,2,0,16,0,0,0,96,3,2,0,17,0,0,0,152,246,1,0,18,0,0,0,48,246,1,0,19,0,0,0,224,245,1,0,19,0,0,0,144,245,1,0,20,0,0,0,40,245,1,0,20,0,0,0,96,244,1,0,21,0,0,0,216,243,1,0,21,0,0,0,128,243,1,0,22,0,0,0,248,242,1,0,23,0,0,0,104,242,1,0,22,0,0,0,8,242,1,0,22,0,0,0,184,241,1,0,23,0,0,0,240,240,1,0,24,0,0,0,120,240,1,0,25,0,0,0,192,229,1,0,27,0,0,0,232,239,1,0,26,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,253,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,50,1,0,0,0,0,0,24,135,2,0,1,0,0,0,224,155,2,0,2,0,0,0,0,135,2,0,11,0,0,0,232,134,2,0,11,0,0,0,152,208,2,0,3,0,0,0,144,195,1,0,4,0,0,0,80,195,1,0,4,0,0,0,56,117,1,0,5,0,0,0,200,134,2,0,6,0,0,0,80,248,1,0,7,0,0,0,40,195,1,0,8,0,0,0,184,134,2,0,9,0,0,0,40,245,1,0,9,0,0,0,176,134,2,0,10,0,0,0,136,82,3,0,12,0,0,0,0,0,0,0,13,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,16,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,5,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,1,0,0,0,5,0,0,0,1,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,1,0,0,0,8,0,0,0,1,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,1,0,0,0,13,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,4,0,0,0,2,0,0,0,5,0,0,0,2,0,0,0,6,0,0,0,4,0,0,0,1,0,0,0,4,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,7,0,0,0,4,0,0,0,11,0,0,0,4,0,0,0,12,0,0,0,4,0,0,0,15,0,0,0,4,0,0,0,16,0,0,0,4,0,0,0,17,0,0,0,4,0,0,0,18,0,0,0,4,0,0,0,19,0,0,0,5,0,0,0,2,0,0,0,5,0,0,0,3,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,5,0,0,0,7,0,0,0,5,0,0,0,8,0,0,0,5,0,0,0,10,0,0,0,5,0,0,0,14,0,0,0,5,0,0,0,15,0,0,0,5,0,0,0,16,0,0,0,5,0,0,0,18,0,0,0,5,0,0,0,22,0,0,0,5,0,0,0,23,0,0,0,5,0,0,0,24,0,0,0,5,0,0,0,27,0,0,0,5,0,0,0,28,0,0,0,5,0,0,0,29,0,0,0,5,0,0,0,30,0,0,0,5,0,0,0,34,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,5,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,8,0,0,0,5,0,0,0,8,0,0,0,5,0,0,0,8,0,0,0,5,0,0,0,8,0,0,0,5,0,0,0,3,0,0,0,5,0,0,0,3,0,0,0,5,0,0,0,3,0,0,0,5,0,0,0,3,0,0,0,4,0,0,0,1,0,0,0,4,0,0,0,1,0,0,0,4,0,0,0,1,0,0,0,4,0,0,0,1,0,0,0,4,0,0,0,8,0,0,0,4,0,0,0,1,0,0,0,4,0,0,0,8,0,0,0,4,0,0,0,1,0,0,0,4,0,0,0,9,0,0,0,4,0,0,0,1,0,0,0,4,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,10,0,0,0,4,0,0,0,1,0,0,0,4,0,0,0,1,0,0,0,4,0,0,0,1,0,0,0,4,0,0,0,10,0,0,0,4,0,0,0,10,0,0,0,4,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,10,0,0,0,4,0,0,0,10,0,0,0,4,0,0,0,1,0,0,0,4,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,192,229,1,0,1,0,0,0,128,91,2,0,2,0,0,0,64,85,3,0,3,0,0,0,192,253,1,0,0,0,0,0,152,10,2,0,4,0,0,0,136,85,3,0,7,0,0,0,168,85,3,0,7,0,0,0,120,91,2,0,8,0,0,0,0,224,1,0,9,0,0,0,192,218,1,0,10,0,0,0,40,245,1,0,6,0,0,0,144,245,1,0,6,0,0,0,72,91,2,0,5,0,0,0,96,244,1,0,11,0,0,0,176,1,2,0,12,0,0,0,152,82,3,0,13,0,0,0,48,246,1,0,14,0,0,0,224,245,1,0,14,0,0,0,176,82,3,0,15,0,0,0,16,24,2,0,16,0,0,0,136,82,3,0,17,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,128,2,0,8,128,2,0,224,127,2,0,184,127,2,0,40,127,2,0,216,126,2,0,144,126,2,0,120,126,2,0,80,126,2,0,208,125,2,0,168,125,2,0,112,125,2,0,88,125,2,0,16,125,2,0,248,124,2,0,224,124,2,0,192,124,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
+, "i8", ALLOC_NONE, Runtime.GLOBAL_BASE)
+function runPostSets() {
+}
+if (!awaitingMemoryInitializer) runPostSets();
+var tempDoublePtr = Runtime.alignMemory(allocate(12, "i8", ALLOC_STATIC), 8);
+assert(tempDoublePtr % 8 == 0);
+function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much
+  HEAP8[tempDoublePtr] = HEAP8[ptr];
+  HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
+  HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
+  HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
+}
+function copyTempDouble(ptr) {
+  HEAP8[tempDoublePtr] = HEAP8[ptr];
+  HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
+  HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
+  HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
+  HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];
+  HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];
+  HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];
+  HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];
+}
+  var _log=Math.log;
+  var _fabs=Math.abs;
+  var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:35,EIDRM:36,ECHRNG:37,EL2NSYNC:38,EL3HLT:39,EL3RST:40,ELNRNG:41,EUNATCH:42,ENOCSI:43,EL2HLT:44,EDEADLK:45,ENOLCK:46,EBADE:50,EBADR:51,EXFULL:52,ENOANO:53,EBADRQC:54,EBADSLT:55,EDEADLOCK:56,EBFONT:57,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:74,ELBIN:75,EDOTDOT:76,EBADMSG:77,EFTYPE:79,ENOTUNIQ:80,EBADFD:81,EREMCHG:82,ELIBACC:83,ELIBBAD:84,ELIBSCN:85,ELIBMAX:86,ELIBEXEC:87,ENOSYS:88,ENMFILE:89,ENOTEMPTY:90,ENAMETOOLONG:91,ELOOP:92,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:106,EPROTOTYPE:107,ENOTSOCK:108,ENOPROTOOPT:109,ESHUTDOWN:110,ECONNREFUSED:111,EADDRINUSE:112,ECONNABORTED:113,ENETUNREACH:114,ENETDOWN:115,ETIMEDOUT:116,EHOSTDOWN:117,EHOSTUNREACH:118,EINPROGRESS:119,EALREADY:120,EDESTADDRREQ:121,EMSGSIZE:122,EPROTONOSUPPORT:123,ESOCKTNOSUPPORT:124,EADDRNOTAVAIL:125,ENETRESET:126,EISCONN:127,ENOTCONN:128,ETOOMANYREFS:129,EPROCLIM:130,EUSERS:131,EDQUOT:132,ESTALE:133,ENOTSUP:134,ENOMEDIUM:135,ENOSHARE:136,ECASECLASH:137,EILSEQ:138,EOVERFLOW:139,ECANCELED:140,ENOTRECOVERABLE:141,EOWNERDEAD:142,ESTRPIPE:143};
+  var ___errno_state=0;function ___setErrNo(value) {
+      // For convenient setting and returning of errno.
+      HEAP32[((___errno_state)>>2)]=value
+      return value;
+    }
+  var _stdin=allocate(1, "i32*", ALLOC_STATIC);
+  var _stdout=allocate(1, "i32*", ALLOC_STATIC);
+  var _stderr=allocate(1, "i32*", ALLOC_STATIC);
+  var __impure_ptr=allocate(1, "i32*", ALLOC_STATIC);var FS={currentPath:"/",nextInode:2,streams:[null],ignorePermissions:true,createFileHandle:function (stream, fd) {
+        if (typeof stream === 'undefined') {
+          stream = null;
+        }
+        if (!fd) {
+          if (stream && stream.socket) {
+            for (var i = 1; i < 64; i++) {
+              if (!FS.streams[i]) {
+                fd = i;
+                break;
+              }
+            }
+            assert(fd, 'ran out of low fds for sockets');
+          } else {
+            fd = Math.max(FS.streams.length, 64);
+            for (var i = FS.streams.length; i < fd; i++) {
+              FS.streams[i] = null; // Keep dense
+            }
+          }
+        }
+        // Close WebSocket first if we are about to replace the fd (i.e. dup2)
+        if (FS.streams[fd] && FS.streams[fd].socket && FS.streams[fd].socket.close) {
+          FS.streams[fd].socket.close();
+        }
+        FS.streams[fd] = stream;
+        return fd;
+      },removeFileHandle:function (fd) {
+        FS.streams[fd] = null;
+      },joinPath:function (parts, forceRelative) {
+        var ret = parts[0];
+        for (var i = 1; i < parts.length; i++) {
+          if (ret[ret.length-1] != '/') ret += '/';
+          ret += parts[i];
+        }
+        if (forceRelative && ret[0] == '/') ret = ret.substr(1);
+        return ret;
+      },absolutePath:function (relative, base) {
+        if (typeof relative !== 'string') return null;
+        if (base === undefined) base = FS.currentPath;
+        if (relative && relative[0] == '/') base = '';
+        var full = base + '/' + relative;
+        var parts = full.split('/').reverse();
+        var absolute = [''];
+        while (parts.length) {
+          var part = parts.pop();
+          if (part == '' || part == '.') {
+            // Nothing.
+          } else if (part == '..') {
+            if (absolute.length > 1) absolute.pop();
+          } else {
+            absolute.push(part);
+          }
+        }
+        return absolute.length == 1 ? '/' : absolute.join('/');
+      },analyzePath:function (path, dontResolveLastLink, linksVisited) {
+        var ret = {
+          isRoot: false,
+          exists: false,
+          error: 0,
+          name: null,
+          path: null,
+          object: null,
+          parentExists: false,
+          parentPath: null,
+          parentObject: null
+        };
+        path = FS.absolutePath(path);
+        if (path == '/') {
+          ret.isRoot = true;
+          ret.exists = ret.parentExists = true;
+          ret.name = '/';
+          ret.path = ret.parentPath = '/';
+          ret.object = ret.parentObject = FS.root;
+        } else if (path !== null) {
+          linksVisited = linksVisited || 0;
+          path = path.slice(1).split('/');
+          var current = FS.root;
+          var traversed = [''];
+          while (path.length) {
+            if (path.length == 1 && current.isFolder) {
+              ret.parentExists = true;
+              ret.parentPath = traversed.length == 1 ? '/' : traversed.join('/');
+              ret.parentObject = current;
+              ret.name = path[0];
+            }
+            var target = path.shift();
+            if (!current.isFolder) {
+              ret.error = ERRNO_CODES.ENOTDIR;
+              break;
+            } else if (!current.read) {
+              ret.error = ERRNO_CODES.EACCES;
+              break;
+            } else if (!current.contents.hasOwnProperty(target)) {
+              ret.error = ERRNO_CODES.ENOENT;
+              break;
+            }
+            current = current.contents[target];
+            if (current.link && !(dontResolveLastLink && path.length == 0)) {
+              if (linksVisited > 40) { // Usual Linux SYMLOOP_MAX.
+                ret.error = ERRNO_CODES.ELOOP;
+                break;
+              }
+              var link = FS.absolutePath(current.link, traversed.join('/'));
+              ret = FS.analyzePath([link].concat(path).join('/'),
+                                   dontResolveLastLink, linksVisited + 1);
+              return ret;
+            }
+            traversed.push(target);
+            if (path.length == 0) {
+              ret.exists = true;
+              ret.path = traversed.join('/');
+              ret.object = current;
+            }
+          }
+        }
+        return ret;
+      },findObject:function (path, dontResolveLastLink) {
+        FS.ensureRoot();
+        var ret = FS.analyzePath(path, dontResolveLastLink);
+        if (ret.exists) {
+          return ret.object;
+        } else {
+          ___setErrNo(ret.error);
+          return null;
+        }
+      },createObject:function (parent, name, properties, canRead, canWrite) {
+        if (!parent) parent = '/';
+        if (typeof parent === 'string') parent = FS.findObject(parent);
+        if (!parent) {
+          ___setErrNo(ERRNO_CODES.EACCES);
+          throw new Error('Parent path must exist.');
+        }
+        if (!parent.isFolder) {
+          ___setErrNo(ERRNO_CODES.ENOTDIR);
+          throw new Error('Parent must be a folder.');
+        }
+        if (!parent.write && !FS.ignorePermissions) {
+          ___setErrNo(ERRNO_CODES.EACCES);
+          throw new Error('Parent folder must be writeable.');
+        }
+        if (!name || name == '.' || name == '..') {
+          ___setErrNo(ERRNO_CODES.ENOENT);
+          throw new Error('Name must not be empty.');
+        }
+        if (parent.contents.hasOwnProperty(name)) {
+          ___setErrNo(ERRNO_CODES.EEXIST);
+          throw new Error("Can't overwrite object.");
+        }
+        parent.contents[name] = {
+          read: canRead === undefined ? true : canRead,
+          write: canWrite === undefined ? false : canWrite,
+          timestamp: Date.now(),
+          inodeNumber: FS.nextInode++
+        };
+        for (var key in properties) {
+          if (properties.hasOwnProperty(key)) {
+            parent.contents[name][key] = properties[key];
+          }
+        }
+        return parent.contents[name];
+      },createFolder:function (parent, name, canRead, canWrite) {
+        var properties = {isFolder: true, isDevice: false, contents: {}};
+        return FS.createObject(parent, name, properties, canRead, canWrite);
+      },createPath:function (parent, path, canRead, canWrite) {
+        var current = FS.findObject(parent);
+        if (current === null) throw new Error('Invalid parent.');
+        path = path.split('/').reverse();
+        while (path.length) {
+          var part = path.pop();
+          if (!part) continue;
+          if (!current.contents.hasOwnProperty(part)) {
+            FS.createFolder(current, part, canRead, canWrite);
+          }
+          current = current.contents[part];
+        }
+        return current;
+      },createFile:function (parent, name, properties, canRead, canWrite) {
+        properties.isFolder = false;
+        return FS.createObject(parent, name, properties, canRead, canWrite);
+      },createDataFile:function (parent, name, data, canRead, canWrite) {
+        if (typeof data === 'string') {
+          var dataArray = new Array(data.length);
+          for (var i = 0, len = data.length; i < len; ++i) dataArray[i] = data.charCodeAt(i);
+          data = dataArray;
+        }
+        var properties = {
+          isDevice: false,
+          contents: data.subarray ? data.subarray(0) : data // as an optimization, create a new array wrapper (not buffer) here, to help JS engines understand this object
+        };
+        return FS.createFile(parent, name, properties, canRead, canWrite);
+      },createLazyFile:function (parent, name, url, canRead, canWrite) {
+        if (typeof XMLHttpRequest !== 'undefined') {
+          if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc';
+          // Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse.
+          var LazyUint8Array = function() {
+            this.lengthKnown = false;
+            this.chunks = []; // Loaded chunks. Index is the chunk number
+          }
+          LazyUint8Array.prototype.get = function(idx) {
+            if (idx > this.length-1 || idx < 0) {
+              return undefined;
+            }
+            var chunkOffset = idx % this.chunkSize;
+            var chunkNum = Math.floor(idx / this.chunkSize);
+            return this.getter(chunkNum)[chunkOffset];
+          }
+          LazyUint8Array.prototype.setDataGetter = function(getter) {
+            this.getter = getter;
+          }
+          LazyUint8Array.prototype.cacheLength = function() {
+              // Find length
+              var xhr = new XMLHttpRequest();
+              xhr.open('HEAD', url, false);
+              xhr.send(null);
+              if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
+              var datalength = Number(xhr.getResponseHeader("Content-length"));
+              var header;
+              var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes";
+              var chunkSize = 1024*1024; // Chunk size in bytes
+              if (!hasByteServing) chunkSize = datalength;
+              // Function to get a range from the remote URL.
+              var doXHR = (function(from, to) {
+                if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!");
+                if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!");
+                // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available.
+                var xhr = new XMLHttpRequest();
+                xhr.open('GET', url, false);
+                if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to);
+                // Some hints to the browser that we want binary data.
+                if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuffer';
+                if (xhr.overrideMimeType) {
+                  xhr.overrideMimeType('text/plain; charset=x-user-defined');
+                }
+                xhr.send(null);
+                if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
+                if (xhr.response !== undefined) {
+                  return new Uint8Array(xhr.response || []);
+                } else {
+                  return intArrayFromString(xhr.responseText || '', true);
+                }
+              });
+              var lazyArray = this;
+              lazyArray.setDataGetter(function(chunkNum) {
+                var start = chunkNum * chunkSize;
+                var end = (chunkNum+1) * chunkSize - 1; // including this byte
+                end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block
+                if (typeof(lazyArray.chunks[chunkNum]) === "undefined") {
+                  lazyArray.chunks[chunkNum] = doXHR(start, end);
+                }
+                if (typeof(lazyArray.chunks[chunkNum]) === "undefined") throw new Error("doXHR failed!");
+                return lazyArray.chunks[chunkNum];
+              });
+              this._length = datalength;
+              this._chunkSize = chunkSize;
+              this.lengthKnown = true;
+          }
+          var lazyArray = new LazyUint8Array();
+          Object.defineProperty(lazyArray, "length", {
+              get: function() {
+                  if(!this.lengthKnown) {
+                      this.cacheLength();
+                  }
+                  return this._length;
+              }
+          });
+          Object.defineProperty(lazyArray, "chunkSize", {
+              get: function() {
+                  if(!this.lengthKnown) {
+                      this.cacheLength();
+                  }
+                  return this._chunkSize;
+              }
+          });
+          var properties = { isDevice: false, contents: lazyArray };
+        } else {
+          var properties = { isDevice: false, url: url };
+        }
+        return FS.createFile(parent, name, properties, canRead, canWrite);
+      },createPreloadedFile:function (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile) {
+        Browser.init();
+        var fullname = FS.joinPath([parent, name], true);
+        function processData(byteArray) {
+          function finish(byteArray) {
+            if (!dontCreateFile) {
+              FS.createDataFile(parent, name, byteArray, canRead, canWrite);
+            }
+            if (onload) onload();
+            removeRunDependency('cp ' + fullname);
+          }
+          var handled = false;
+          Module['preloadPlugins'].forEach(function(plugin) {
+            if (handled) return;
+            if (plugin['canHandle'](fullname)) {
+              plugin['handle'](byteArray, fullname, finish, function() {
+                if (onerror) onerror();
+                removeRunDependency('cp ' + fullname);
+              });
+              handled = true;
+            }
+          });
+          if (!handled) finish(byteArray);
+        }
+        addRunDependency('cp ' + fullname);
+        if (typeof url == 'string') {
+          Browser.asyncLoad(url, function(byteArray) {
+            processData(byteArray);
+          }, onerror);
+        } else {
+          processData(url);
+        }
+      },createLink:function (parent, name, target, canRead, canWrite) {
+        var properties = {isDevice: false, link: target};
+        return FS.createFile(parent, name, properties, canRead, canWrite);
+      },createDevice:function (parent, name, input, output) {
+        if (!(input || output)) {
+          throw new Error('A device must have at least one callback defined.');
+        }
+        var ops = {isDevice: true, input: input, output: output};
+        return FS.createFile(parent, name, ops, Boolean(input), Boolean(output));
+      },forceLoadFile:function (obj) {
+        if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;
+        var success = true;
+        if (typeof XMLHttpRequest !== 'undefined') {
+          throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");
+        } else if (Module['read']) {
+          // Command-line.
+          try {
+            // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as
+            //          read() will try to parse UTF8.
+            obj.contents = intArrayFromString(Module['read'](obj.url), true);
+          } catch (e) {
+            success = false;
+          }
+        } else {
+          throw new Error('Cannot load without read() or XMLHttpRequest.');
+        }
+        if (!success) ___setErrNo(ERRNO_CODES.EIO);
+        return success;
+      },ensureRoot:function () {
+        if (FS.root) return;
+        // The main file system tree. All the contents are inside this.
+        FS.root = {
+          read: true,
+          write: true,
+          isFolder: true,
+          isDevice: false,
+          timestamp: Date.now(),
+          inodeNumber: 1,
+          contents: {}
+        };
+      },init:function (input, output, error) {
+        // Make sure we initialize only once.
+        assert(!FS.init.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)');
+        FS.init.initialized = true;
+        FS.ensureRoot();
+        // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here
+        input = input || Module['stdin'];
+        output = output || Module['stdout'];
+        error = error || Module['stderr'];
+        // Default handlers.
+        var stdinOverridden = true, stdoutOverridden = true, stderrOverridden = true;
+        if (!input) {
+          stdinOverridden = false;
+          input = function() {
+            if (!input.cache || !input.cache.length) {
+              var result;
+              if (typeof window != 'undefined' &&
+                  typeof window.prompt == 'function') {
+                // Browser.
+                result = window.prompt('Input: ');
+                if (result === null) result = String.fromCharCode(0); // cancel ==> EOF
+              } else if (typeof readline == 'function') {
+                // Command line.
+                result = readline();
+              }
+              if (!result) result = '';
+              input.cache = intArrayFromString(result + '\n', true);
+            }
+            return input.cache.shift();
+          };
+        }
+        var utf8 = new Runtime.UTF8Processor();
+        function simpleOutput(val) {
+          if (val === null || val === 10) {
+            output.printer(output.buffer.join(''));
+            output.buffer = [];
+          } else {
+            output.buffer.push(utf8.processCChar(val));
+          }
+        }
+        if (!output) {
+          stdoutOverridden = false;
+          output = simpleOutput;
+        }
+        if (!output.printer) output.printer = Module['print'];
+        if (!output.buffer) output.buffer = [];
+        if (!error) {
+          stderrOverridden = false;
+          error = simpleOutput;
+        }
+        if (!error.printer) error.printer = Module['print'];
+        if (!error.buffer) error.buffer = [];
+        // Create the temporary folder, if not already created
+        try {
+          FS.createFolder('/', 'tmp', true, true);
+        } catch(e) {}
+        // Create the I/O devices.
+        var devFolder = FS.createFolder('/', 'dev', true, true);
+        var stdin = FS.createDevice(devFolder, 'stdin', input);
+        var stdout = FS.createDevice(devFolder, 'stdout', null, output);
+        var stderr = FS.createDevice(devFolder, 'stderr', null, error);
+        FS.createDevice(devFolder, 'tty', input, output);
+        FS.createDevice(devFolder, 'null', function(){}, function(){});
+        // Create default streams.
+        FS.streams[1] = {
+          path: '/dev/stdin',
+          object: stdin,
+          position: 0,
+          isRead: true,
+          isWrite: false,
+          isAppend: false,
+          isTerminal: !stdinOverridden,
+          error: false,
+          eof: false,
+          ungotten: []
+        };
+        FS.streams[2] = {
+          path: '/dev/stdout',
+          object: stdout,
+          position: 0,
+          isRead: false,
+          isWrite: true,
+          isAppend: false,
+          isTerminal: !stdoutOverridden,
+          error: false,
+          eof: false,
+          ungotten: []
+        };
+        FS.streams[3] = {
+          path: '/dev/stderr',
+          object: stderr,
+          position: 0,
+          isRead: false,
+          isWrite: true,
+          isAppend: false,
+          isTerminal: !stderrOverridden,
+          error: false,
+          eof: false,
+          ungotten: []
+        };
+        // TODO: put these low in memory like we used to assert on: assert(Math.max(_stdin, _stdout, _stderr) < 15000); // make sure these are low, we flatten arrays with these
+        HEAP32[((_stdin)>>2)]=1;
+        HEAP32[((_stdout)>>2)]=2;
+        HEAP32[((_stderr)>>2)]=3;
+        // Other system paths
+        FS.createPath('/', 'dev/shm/tmp', true, true); // temp files
+        // Newlib initialization
+        for (var i = FS.streams.length; i < Math.max(_stdin, _stdout, _stderr) + 4; i++) {
+          FS.streams[i] = null; // Make sure to keep FS.streams dense
+        }
+        FS.streams[_stdin] = FS.streams[1];
+        FS.streams[_stdout] = FS.streams[2];
+        FS.streams[_stderr] = FS.streams[3];
+        allocate([ allocate(
+          [0, 0, 0, 0, _stdin, 0, 0, 0, _stdout, 0, 0, 0, _stderr, 0, 0, 0],
+          'void*', ALLOC_NORMAL) ], 'void*', ALLOC_NONE, __impure_ptr);
+      },quit:function () {
+        if (!FS.init.initialized) return;
+        // Flush any partially-printed lines in stdout and stderr. Careful, they may have been closed
+        if (FS.streams[2] && FS.streams[2].object.output.buffer.length > 0) FS.streams[2].object.output(10);
+        if (FS.streams[3] && FS.streams[3].object.output.buffer.length > 0) FS.streams[3].object.output(10);
+      },standardizePath:function (path) {
+        if (path.substr(0, 2) == './') path = path.substr(2);
+        return path;
+      },deleteFile:function (path) {
+        path = FS.analyzePath(path);
+        if (!path.parentExists || !path.exists) {
+          throw 'Invalid path ' + path;
+        }
+        delete path.parentObject.contents[path.name];
+      }};
+  function _send(fd, buf, len, flags) {
+      var info = FS.streams[fd];
+      if (!info) return -1;
+      info.sender(HEAPU8.subarray(buf, buf+len));
+      return len;
+    }
+  function _pwrite(fildes, buf, nbyte, offset) {
+      // ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
+      var stream = FS.streams[fildes];
+      if (!stream || stream.object.isDevice) {
+        ___setErrNo(ERRNO_CODES.EBADF);
+        return -1;
+      } else if (!stream.isWrite) {
+        ___setErrNo(ERRNO_CODES.EACCES);
+        return -1;
+      } else if (stream.object.isFolder) {
+        ___setErrNo(ERRNO_CODES.EISDIR);
+        return -1;
+      } else if (nbyte < 0 || offset < 0) {
+        ___setErrNo(ERRNO_CODES.EINVAL);
+        return -1;
+      } else {
+        var contents = stream.object.contents;
+        while (contents.length < offset) contents.push(0);
+        for (var i = 0; i < nbyte; i++) {
+          contents[offset + i] = HEAPU8[(((buf)+(i))|0)];
+        }
+        stream.object.timestamp = Date.now();
+        return i;
+      }
+    }function _write(fildes, buf, nbyte) {
+      // ssize_t write(int fildes, const void *buf, size_t nbyte);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
+      var stream = FS.streams[fildes];
+      if (stream && ('socket' in stream)) {
+          return _send(fildes, buf, nbyte, 0);
+      } else if (!stream) {
+        ___setErrNo(ERRNO_CODES.EBADF);
+        return -1;
+      } else if (!stream.isWrite) {
+        ___setErrNo(ERRNO_CODES.EACCES);
+        return -1;
+      } else if (nbyte < 0) {
+        ___setErrNo(ERRNO_CODES.EINVAL);
+        return -1;
+      } else {
+        if (stream.object.isDevice) {
+          if (stream.object.output) {
+            for (var i = 0; i < nbyte; i++) {
+              try {
+                stream.object.output(HEAP8[(((buf)+(i))|0)]);
+              } catch (e) {
+                ___setErrNo(ERRNO_CODES.EIO);
+                return -1;
+              }
+            }
+            stream.object.timestamp = Date.now();
+            return i;
+          } else {
+            ___setErrNo(ERRNO_CODES.ENXIO);
+            return -1;
+          }
+        } else {
+          var bytesWritten = _pwrite(fildes, buf, nbyte, stream.position);
+          if (bytesWritten != -1) stream.position += bytesWritten;
+          return bytesWritten;
+        }
+      }
+    }function _fwrite(ptr, size, nitems, stream) {
+      // size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fwrite.html
+      var bytesToWrite = nitems * size;
+      if (bytesToWrite == 0) return 0;
+      var bytesWritten = _write(stream, ptr, bytesToWrite);
+      if (bytesWritten == -1) {
+        if (FS.streams[stream]) FS.streams[stream].error = true;
+        return 0;
+      } else {
+        return Math.floor(bytesWritten / size);
+      }
+    }
+  Module["_strlen"] = _strlen;
+  function __reallyNegative(x) {
+      return x < 0 || (x === 0 && (1/x) === -Infinity);
+    }function __formatString(format, varargs) {
+      var textIndex = format;
+      var argIndex = 0;
+      function getNextArg(type) {
+        // NOTE: Explicitly ignoring type safety. Otherwise this fails:
+        //       int x = 4; printf("%c\n", (char)x);
+        var ret;
+        if (type === 'double') {
+          ret = HEAPF64[(((varargs)+(argIndex))>>3)];
+        } else if (type == 'i64') {
+          ret = [HEAP32[(((varargs)+(argIndex))>>2)],
+                 HEAP32[(((varargs)+(argIndex+8))>>2)]];
+          argIndex += 8; // each 32-bit chunk is in a 64-bit block
+        } else {
+          type = 'i32'; // varargs are always i32, i64, or double
+          ret = HEAP32[(((varargs)+(argIndex))>>2)];
+        }
+        argIndex += Math.max(Runtime.getNativeFieldSize(type), Runtime.getAlignSize(type, null, true));
+        return ret;
+      }
+      var ret = [];
+      var curr, next, currArg;
+      while(1) {
+        var startTextIndex = textIndex;
+        curr = HEAP8[(textIndex)];
+        if (curr === 0) break;
+        next = HEAP8[((textIndex+1)|0)];
+        if (curr == 37) {
+          // Handle flags.
+          var flagAlwaysSigned = false;
+          var flagLeftAlign = false;
+          var flagAlternative = false;
+          var flagZeroPad = false;
+          flagsLoop: while (1) {
+            switch (next) {
+              case 43:
+                flagAlwaysSigned = true;
+                break;
+              case 45:
+                flagLeftAlign = true;
+                break;
+              case 35:
+                flagAlternative = true;
+                break;
+              case 48:
+                if (flagZeroPad) {
+                  break flagsLoop;
+                } else {
+                  flagZeroPad = true;
+                  break;
+                }
+              default:
+                break flagsLoop;
+            }
+            textIndex++;
+            next = HEAP8[((textIndex+1)|0)];
+          }
+          // Handle width.
+          var width = 0;
+          if (next == 42) {
+            width = getNextArg('i32');
+            textIndex++;
+            next = HEAP8[((textIndex+1)|0)];
+          } else {
+            while (next >= 48 && next <= 57) {
+              width = width * 10 + (next - 48);
+              textIndex++;
+              next = HEAP8[((textIndex+1)|0)];
+            }
+          }
+          // Handle precision.
+          var precisionSet = false;
+          if (next == 46) {
+            var precision = 0;
+            precisionSet = true;
+            textIndex++;
+            next = HEAP8[((textIndex+1)|0)];
+            if (next == 42) {
+              precision = getNextArg('i32');
+              textIndex++;
+            } else {
+              while(1) {
+                var precisionChr = HEAP8[((textIndex+1)|0)];
+                if (precisionChr < 48 ||
+                    precisionChr > 57) break;
+                precision = precision * 10 + (precisionChr - 48);
+                textIndex++;
+              }
+            }
+            next = HEAP8[((textIndex+1)|0)];
+          } else {
+            var precision = 6; // Standard default.
+          }
+          // Handle integer sizes. WARNING: These assume a 32-bit architecture!
+          var argSize;
+          switch (String.fromCharCode(next)) {
+            case 'h':
+              var nextNext = HEAP8[((textIndex+2)|0)];
+              if (nextNext == 104) {
+                textIndex++;
+                argSize = 1; // char (actually i32 in varargs)
+              } else {
+                argSize = 2; // short (actually i32 in varargs)
+              }
+              break;
+            case 'l':
+              var nextNext = HEAP8[((textIndex+2)|0)];
+              if (nextNext == 108) {
+                textIndex++;
+                argSize = 8; // long long
+              } else {
+                argSize = 4; // long
+              }
+              break;
+            case 'L': // long long
+            case 'q': // int64_t
+            case 'j': // intmax_t
+              argSize = 8;
+              break;
+            case 'z': // size_t
+            case 't': // ptrdiff_t
+            case 'I': // signed ptrdiff_t or unsigned size_t
+              argSize = 4;
+              break;
+            default:
+              argSize = null;
+          }
+          if (argSize) textIndex++;
+          next = HEAP8[((textIndex+1)|0)];
+          // Handle type specifier.
+          switch (String.fromCharCode(next)) {
+            case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p': {
+              // Integer.
+              var signed = next == 100 || next == 105;
+              argSize = argSize || 4;
+              var currArg = getNextArg('i' + (argSize * 8));
+              var origArg = currArg;
+              var argText;
+              // Flatten i64-1 [low, high] into a (slightly rounded) double
+              if (argSize == 8) {
+                currArg = Runtime.makeBigInt(currArg[0], currArg[1], next == 117);
+              }
+              // Truncate to requested size.
+              if (argSize <= 4) {
+                var limit = Math.pow(256, argSize) - 1;
+                currArg = (signed ? reSign : unSign)(currArg & limit, argSize * 8);
+              }
+              // Format the number.
+              var currAbsArg = Math.abs(currArg);
+              var prefix = '';
+              if (next == 100 || next == 105) {
+                if (argSize == 8 && i64Math) argText = i64Math.stringify(origArg[0], origArg[1], null); else
+                argText = reSign(currArg, 8 * argSize, 1).toString(10);
+              } else if (next == 117) {
+                if (argSize == 8 && i64Math) argText = i64Math.stringify(origArg[0], origArg[1], true); else
+                argText = unSign(currArg, 8 * argSize, 1).toString(10);
+                currArg = Math.abs(currArg);
+              } else if (next == 111) {
+                argText = (flagAlternative ? '0' : '') + currAbsArg.toString(8);
+              } else if (next == 120 || next == 88) {
+                prefix = (flagAlternative && currArg != 0) ? '0x' : '';
+                if (argSize == 8 && i64Math) {
+                  if (origArg[1]) {
+                    argText = (origArg[1]>>>0).toString(16);
+                    var lower = (origArg[0]>>>0).toString(16);
+                    while (lower.length < 8) lower = '0' + lower;
+                    argText += lower;
+                  } else {
+                    argText = (origArg[0]>>>0).toString(16);
+                  }
+                } else
+                if (currArg < 0) {
+                  // Represent negative numbers in hex as 2's complement.
+                  currArg = -currArg;
+                  argText = (currAbsArg - 1).toString(16);
+                  var buffer = [];
+                  for (var i = 0; i < argText.length; i++) {
+                    buffer.push((0xF - parseInt(argText[i], 16)).toString(16));
+                  }
+                  argText = buffer.join('');
+                  while (argText.length < argSize * 2) argText = 'f' + argText;
+                } else {
+                  argText = currAbsArg.toString(16);
+                }
+                if (next == 88) {
+                  prefix = prefix.toUpperCase();
+                  argText = argText.toUpperCase();
+                }
+              } else if (next == 112) {
+                if (currAbsArg === 0) {
+                  argText = '(nil)';
+                } else {
+                  prefix = '0x';
+                  argText = currAbsArg.toString(16);
+                }
+              }
+              if (precisionSet) {
+                while (argText.length < precision) {
+                  argText = '0' + argText;
+                }
+              }
+              // Add sign if needed
+              if (flagAlwaysSigned) {
+                if (currArg < 0) {
+                  prefix = '-' + prefix;
+                } else {
+                  prefix = '+' + prefix;
+                }
+              }
+              // Add padding.
+              while (prefix.length + argText.length < width) {
+                if (flagLeftAlign) {
+                  argText += ' ';
+                } else {
+                  if (flagZeroPad) {
+                    argText = '0' + argText;
+                  } else {
+                    prefix = ' ' + prefix;
+                  }
+                }
+              }
+              // Insert the result into the buffer.
+              argText = prefix + argText;
+              argText.split('').forEach(function(chr) {
+                ret.push(chr.charCodeAt(0));
+              });
+              break;
+            }
+            case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': {
+              // Float.
+              var currArg = getNextArg('double');
+              var argText;
+              if (isNaN(currArg)) {
+                argText = 'nan';
+                flagZeroPad = false;
+              } else if (!isFinite(currArg)) {
+                argText = (currArg < 0 ? '-' : '') + 'inf';
+                flagZeroPad = false;
+              } else {
+                var isGeneral = false;
+                var effectivePrecision = Math.min(precision, 20);
+                // Convert g/G to f/F or e/E, as per:
+                // http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html
+                if (next == 103 || next == 71) {
+                  isGeneral = true;
+                  precision = precision || 1;
+                  var exponent = parseInt(currArg.toExponential(effectivePrecision).split('e')[1], 10);
+                  if (precision > exponent && exponent >= -4) {
+                    next = ((next == 103) ? 'f' : 'F').charCodeAt(0);
+                    precision -= exponent + 1;
+                  } else {
+                    next = ((next == 103) ? 'e' : 'E').charCodeAt(0);
+                    precision--;
+                  }
+                  effectivePrecision = Math.min(precision, 20);
+                }
+                if (next == 101 || next == 69) {
+                  argText = currArg.toExponential(effectivePrecision);
+                  // Make sure the exponent has at least 2 digits.
+                  if (/[eE][-+]\d$/.test(argText)) {
+                    argText = argText.slice(0, -1) + '0' + argText.slice(-1);
+                  }
+                } else if (next == 102 || next == 70) {
+                  argText = currArg.toFixed(effectivePrecision);
+                  if (currArg === 0 && __reallyNegative(currArg)) {
+                    argText = '-' + argText;
+                  }
+                }
+                var parts = argText.split('e');
+                if (isGeneral && !flagAlternative) {
+                  // Discard trailing zeros and periods.
+                  while (parts[0].length > 1 && parts[0].indexOf('.') != -1 &&
+                         (parts[0].slice(-1) == '0' || parts[0].slice(-1) == '.')) {
+                    parts[0] = parts[0].slice(0, -1);
+                  }
+                } else {
+                  // Make sure we have a period in alternative mode.
+                  if (flagAlternative && argText.indexOf('.') == -1) parts[0] += '.';
+                  // Zero pad until required precision.
+                  while (precision > effectivePrecision++) parts[0] += '0';
+                }
+                argText = parts[0] + (parts.length > 1 ? 'e' + parts[1] : '');
+                // Capitalize 'E' if needed.
+                if (next == 69) argText = argText.toUpperCase();
+                // Add sign.
+                if (flagAlwaysSigned && currArg >= 0) {
+                  argText = '+' + argText;
+                }
+              }
+              // Add padding.
+              while (argText.length < width) {
+                if (flagLeftAlign) {
+                  argText += ' ';
+                } else {
+                  if (flagZeroPad && (argText[0] == '-' || argText[0] == '+')) {
+                    argText = argText[0] + '0' + argText.slice(1);
+                  } else {
+                    argText = (flagZeroPad ? '0' : ' ') + argText;
+                  }
+                }
+              }
+              // Adjust case.
+              if (next < 97) argText = argText.toUpperCase();
+              // Insert the result into the buffer.
+              argText.split('').forEach(function(chr) {
+                ret.push(chr.charCodeAt(0));
+              });
+              break;
+            }
+            case 's': {
+              // String.
+              var arg = getNextArg('i8*');
+              var argLength = arg ? _strlen(arg) : '(null)'.length;
+              if (precisionSet) argLength = Math.min(argLength, precision);
+              if (!flagLeftAlign) {
+                while (argLength < width--) {
+                  ret.push(32);
+                }
+              }
+              if (arg) {
+                for (var i = 0; i < argLength; i++) {
+                  ret.push(HEAPU8[((arg++)|0)]);
+                }
+              } else {
+                ret = ret.concat(intArrayFromString('(null)'.substr(0, argLength), true));
+              }
+              if (flagLeftAlign) {
+                while (argLength < width--) {
+                  ret.push(32);
+                }
+              }
+              break;
+            }
+            case 'c': {
+              // Character.
+              if (flagLeftAlign) ret.push(getNextArg('i8'));
+              while (--width > 0) {
+                ret.push(32);
+              }
+              if (!flagLeftAlign) ret.push(getNextArg('i8'));
+              break;
+            }
+            case 'n': {
+              // Write the length written so far to the next parameter.
+              var ptr = getNextArg('i32*');
+              HEAP32[((ptr)>>2)]=ret.length
+              break;
+            }
+            case '%': {
+              // Literal percent sign.
+              ret.push(curr);
+              break;
+            }
+            default: {
+              // Unknown specifiers remain untouched.
+              for (var i = startTextIndex; i < textIndex + 2; i++) {
+                ret.push(HEAP8[(i)]);
+              }
+            }
+          }
+          textIndex += 2;
+          // TODO: Support a/A (hex float) and m (last error) specifiers.
+          // TODO: Support %1${specifier} for arg selection.
+        } else {
+          ret.push(curr);
+          textIndex += 1;
+        }
+      }
+      return ret;
+    }function _fprintf(stream, format, varargs) {
+      // int fprintf(FILE *restrict stream, const char *restrict format, ...);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
+      var result = __formatString(format, varargs);
+      var stack = Runtime.stackSave();
+      var ret = _fwrite(allocate(result, 'i8', ALLOC_STACK), 1, result.length, stream);
+      Runtime.stackRestore(stack);
+      return ret;
+    }
+  Module["_strcpy"] = _strcpy;
+  function _strncmp(px, py, n) {
+      var i = 0;
+      while (i < n) {
+        var x = HEAPU8[(((px)+(i))|0)];
+        var y = HEAPU8[(((py)+(i))|0)];
+        if (x == y && x == 0) return 0;
+        if (x == 0) return -1;
+        if (y == 0) return 1;
+        if (x == y) {
+          i ++;
+          continue;
+        } else {
+          return x > y ? 1 : -1;
+        }
+      }
+      return 0;
+    }function _strcmp(px, py) {
+      return _strncmp(px, py, TOTAL_MEMORY);
+    }
+  var _exp=Math.exp;
+  var _ceil=Math.ceil;
+  function _log10(x) {
+      return Math.log(x) / Math.LN10;
+    }
+  function _snprintf(s, n, format, varargs) {
+      // int snprintf(char *restrict s, size_t n, const char *restrict format, ...);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
+      var result = __formatString(format, varargs);
+      var limit = (n === undefined) ? result.length
+                                    : Math.min(result.length, Math.max(n - 1, 0));
+      if (s < 0) {
+        s = -s;
+        var buf = _malloc(limit+1);
+        HEAP32[((s)>>2)]=buf;
+        s = buf;
+      }
+      for (var i = 0; i < limit; i++) {
+        HEAP8[(((s)+(i))|0)]=result[i];
+      }
+      if (limit < n || (n === undefined)) HEAP8[(((s)+(i))|0)]=0;
+      return result.length;
+    }function _sprintf(s, format, varargs) {
+      // int sprintf(char *restrict s, const char *restrict format, ...);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
+      return _snprintf(s, undefined, format, varargs);
+    }
+  Module["_strcat"] = _strcat;
+  function _strchr(ptr, chr) {
+      ptr--;
+      do {
+        ptr++;
+        var val = HEAP8[(ptr)];
+        if (val == chr) return ptr;
+      } while (val);
+      return 0;
+    }
+  var _floor=Math.floor;
+  var _llvm_pow_f64=Math.pow;
+  Module["_memcpy"] = _memcpy;var _llvm_memcpy_p0i8_p0i8_i32=_memcpy;
+  Module["_memset"] = _memset;var _llvm_memset_p0i8_i32=_memset;
+  function _ftell(stream) {
+      // long ftell(FILE *stream);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/ftell.html
+      if (FS.streams[stream]) {
+        stream = FS.streams[stream];
+        if (stream.object.isDevice) {
+          ___setErrNo(ERRNO_CODES.ESPIPE);
+          return -1;
+        } else {
+          return stream.position;
+        }
+      } else {
+        ___setErrNo(ERRNO_CODES.EBADF);
+        return -1;
+      }
+    }
+  function _lseek(fildes, offset, whence) {
+      // off_t lseek(int fildes, off_t offset, int whence);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/lseek.html
+      if (FS.streams[fildes] && !FS.streams[fildes].object.isDevice) {
+        var stream = FS.streams[fildes];
+        var position = offset;
+        if (whence === 1) {  // SEEK_CUR.
+          position += stream.position;
+        } else if (whence === 2) {  // SEEK_END.
+          position += stream.object.contents.length;
+        }
+        if (position < 0) {
+          ___setErrNo(ERRNO_CODES.EINVAL);
+          return -1;
+        } else {
+          stream.ungotten = [];
+          stream.position = position;
+          return position;
+        }
+      } else {
+        ___setErrNo(ERRNO_CODES.EBADF);
+        return -1;
+      }
+    }function _fseek(stream, offset, whence) {
+      // int fseek(FILE *stream, long offset, int whence);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fseek.html
+      var ret = _lseek(stream, offset, whence);
+      if (ret == -1) {
+        return -1;
+      } else {
+        FS.streams[stream].eof = false;
+        return 0;
+      }
+    }function _rewind(stream) {
+      // void rewind(FILE *stream);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/rewind.html
+      _fseek(stream, 0, 0);  // SEEK_SET.
+      if (FS.streams[stream]) FS.streams[stream].error = false;
+    }
+  function _recv(fd, buf, len, flags) {
+      var info = FS.streams[fd];
+      if (!info) return -1;
+      if (!info.hasData()) {
+        ___setErrNo(ERRNO_CODES.EAGAIN); // no data, and all sockets are nonblocking, so this is the right behavior
+        return -1;
+      }
+      var buffer = info.inQueue.shift();
+      if (len < buffer.length) {
+        if (info.stream) {
+          // This is tcp (reliable), so if not all was read, keep it
+          info.inQueue.unshift(buffer.subarray(len));
+        }
+        buffer = buffer.subarray(0, len);
+      }
+      HEAPU8.set(buffer, buf);
+      return buffer.length;
+    }
+  function _pread(fildes, buf, nbyte, offset) {
+      // ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/read.html
+      var stream = FS.streams[fildes];
+      if (!stream || stream.object.isDevice) {
+        ___setErrNo(ERRNO_CODES.EBADF);
+        return -1;
+      } else if (!stream.isRead) {
+        ___setErrNo(ERRNO_CODES.EACCES);
+        return -1;
+      } else if (stream.object.isFolder) {
+        ___setErrNo(ERRNO_CODES.EISDIR);
+        return -1;
+      } else if (nbyte < 0 || offset < 0) {
+        ___setErrNo(ERRNO_CODES.EINVAL);
+        return -1;
+      } else {
+        var bytesRead = 0;
+        while (stream.ungotten.length && nbyte > 0) {
+          HEAP8[((buf++)|0)]=stream.ungotten.pop()
+          nbyte--;
+          bytesRead++;
+        }
+        var contents = stream.object.contents;
+        var size = Math.min(contents.length - offset, nbyte);
+        if (contents.subarray) { // typed array
+          HEAPU8.set(contents.subarray(offset, offset+size), buf);
+        } else
+        if (contents.slice) { // normal array
+          for (var i = 0; i < size; i++) {
+            HEAP8[(((buf)+(i))|0)]=contents[offset + i]
+          }
+        } else {
+          for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR
+            HEAP8[(((buf)+(i))|0)]=contents.get(offset + i)
+          }
+        }
+        bytesRead += size;
+        return bytesRead;
+      }
+    }function _read(fildes, buf, nbyte) {
+      // ssize_t read(int fildes, void *buf, size_t nbyte);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/read.html
+      var stream = FS.streams[fildes];
+      if (stream && ('socket' in stream)) {
+        return _recv(fildes, buf, nbyte, 0);
+      } else if (!stream) {
+        ___setErrNo(ERRNO_CODES.EBADF);
+        return -1;
+      } else if (!stream.isRead) {
+        ___setErrNo(ERRNO_CODES.EACCES);
+        return -1;
+      } else if (nbyte < 0) {
+        ___setErrNo(ERRNO_CODES.EINVAL);
+        return -1;
+      } else {
+        var bytesRead;
+        if (stream.object.isDevice) {
+          if (stream.object.input) {
+            bytesRead = 0;
+            while (stream.ungotten.length && nbyte > 0) {
+              HEAP8[((buf++)|0)]=stream.ungotten.pop()
+              nbyte--;
+              bytesRead++;
+            }
+            for (var i = 0; i < nbyte; i++) {
+              try {
+                var result = stream.object.input();
+              } catch (e) {
+                ___setErrNo(ERRNO_CODES.EIO);
+                return -1;
+              }
+              if (result === undefined && bytesRead === 0) {
+                ___setErrNo(ERRNO_CODES.EAGAIN);
+                return -1;
+              }
+              if (result === null || result === undefined) break;
+              bytesRead++;
+              HEAP8[(((buf)+(i))|0)]=result
+            }
+            return bytesRead;
+          } else {
+            ___setErrNo(ERRNO_CODES.ENXIO);
+            return -1;
+          }
+        } else {
+          var ungotSize = stream.ungotten.length;
+          bytesRead = _pread(fildes, buf, nbyte, stream.position);
+          if (bytesRead != -1) {
+            stream.position += (stream.ungotten.length - ungotSize) + bytesRead;
+          }
+          return bytesRead;
+        }
+      }
+    }function _fread(ptr, size, nitems, stream) {
+      // size_t fread(void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fread.html
+      var bytesToRead = nitems * size;
+      if (bytesToRead == 0) return 0;
+      var bytesRead = _read(stream, ptr, bytesToRead);
+      var streamObj = FS.streams[stream];
+      if (bytesRead == -1) {
+        if (streamObj) streamObj.error = true;
+        return 0;
+      } else {
+        if (bytesRead < bytesToRead) streamObj.eof = true;
+        return Math.floor(bytesRead / size);
+      }
+    }
+  function _close(fildes) {
+      // int close(int fildes);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/close.html
+      if (FS.streams[fildes]) {
+        if (FS.streams[fildes].currentEntry) {
+          _free(FS.streams[fildes].currentEntry);
+        }
+        FS.streams[fildes] = null;
+        return 0;
+      } else {
+        ___setErrNo(ERRNO_CODES.EBADF);
+        return -1;
+      }
+    }
+  function _fsync(fildes) {
+      // int fsync(int fildes);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fsync.html
+      if (FS.streams[fildes]) {
+        // We write directly to the file system, so there's nothing to do here.
+        return 0;
+      } else {
+        ___setErrNo(ERRNO_CODES.EBADF);
+        return -1;
+      }
+    }function _fclose(stream) {
+      // int fclose(FILE *stream);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fclose.html
+      _fsync(stream);
+      return _close(stream);
+    }
+  function _strcspn(pstr, pset) {
+      var str = pstr, set, strcurr, setcurr;
+      while (1) {
+        strcurr = HEAP8[(str)];
+        if (!strcurr) return str - pstr;
+        set = pset;
+        while (1) {
+          setcurr = HEAP8[(set)];
+          if (!setcurr || setcurr == strcurr) break;
+          set++;
+        }
+        if (setcurr) return str - pstr;
+        str++;
+      }
+    }
+  Module["_strncpy"] = _strncpy;
+  function _isspace(chr) {
+      return chr in { 32: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0 };
+    }function __parseInt(str, endptr, base, min, max, bits, unsign) {
+      // Skip space.
+      while (_isspace(HEAP8[(str)])) str++;
+      // Check for a plus/minus sign.
+      var multiplier = 1;
+      if (HEAP8[(str)] == 45) {
+        multiplier = -1;
+        str++;
+      } else if (HEAP8[(str)] == 43) {
+        str++;
+      }
+      // Find base.
+      var finalBase = base;
+      if (!finalBase) {
+        if (HEAP8[(str)] == 48) {
+          if (HEAP8[((str+1)|0)] == 120 ||
+              HEAP8[((str+1)|0)] == 88) {
+            finalBase = 16;
+            str += 2;
+          } else {
+            finalBase = 8;
+            str++;
+          }
+        }
+      } else if (finalBase==16) {
+        if (HEAP8[(str)] == 48) {
+          if (HEAP8[((str+1)|0)] == 120 ||
+              HEAP8[((str+1)|0)] == 88) {
+            str += 2;
+          }
+        }
+      }
+      if (!finalBase) finalBase = 10;
+      // Get digits.
+      var chr;
+      var ret = 0;
+      while ((chr = HEAP8[(str)]) != 0) {
+        var digit = parseInt(String.fromCharCode(chr), finalBase);
+        if (isNaN(digit)) {
+          break;
+        } else {
+          ret = ret * finalBase + digit;
+          str++;
+        }
+      }
+      // Apply sign.
+      ret *= multiplier;
+      // Set end pointer.
+      if (endptr) {
+        HEAP32[((endptr)>>2)]=str
+      }
+      // Unsign if needed.
+      if (unsign) {
+        if (Math.abs(ret) > max) {
+          ret = max;
+          ___setErrNo(ERRNO_CODES.ERANGE);
+        } else {
+          ret = unSign(ret, bits);
+        }
+      }
+      // Validate range.
+      if (ret > max || ret < min) {
+        ret = ret > max ? max : min;
+        ___setErrNo(ERRNO_CODES.ERANGE);
+      }
+      if (bits == 64) {
+        return ((asm["setTempRet0"](Math.min(Math.floor((ret)/(+(4294967296))), (+(4294967295)))>>>0),ret>>>0)|0);
+      }
+      return ret;
+    }function _strtol(str, endptr, base) {
+      return __parseInt(str, endptr, base, -2147483648, 2147483647, 32);  // LONG_MIN, LONG_MAX.
+    }function _atoi(ptr) {
+      return _strtol(ptr, null, 10);
+    }
+  function _strstr(ptr1, ptr2) {
+      var check = 0, start;
+      do {
+        if (!check) {
+          start = ptr1;
+          check = ptr2;
+        }
+        var curr1 = HEAP8[((ptr1++)|0)];
+        var curr2 = HEAP8[((check++)|0)];
+        if (curr2 == 0) return start;
+        if (curr2 != curr1) {
+          // rewind to one character after start, to find ez in eeez
+          ptr1 = start + 1;
+          check = 0;
+        }
+      } while (curr1);
+      return 0;
+    }
+  Module["_memcmp"] = _memcmp;
+  function _fputs(s, stream) {
+      // int fputs(const char *restrict s, FILE *restrict stream);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fputs.html
+      return _write(stream, s, _strlen(s));
+    }
+  Module["_memmove"] = _memmove;var _llvm_memmove_p0i8_p0i8_i32=_memmove;
+  function _fflush(stream) {
+      // int fflush(FILE *stream);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fflush.html
+      var flush = function(filedes) {
+        // Right now we write all data directly, except for output devices.
+        if (FS.streams[filedes] && FS.streams[filedes].object.output) {
+          if (!FS.streams[filedes].isTerminal) { // don't flush terminals, it would cause a \n to also appear
+            FS.streams[filedes].object.output(null);
+          }
+        }
+      };
+      try {
+        if (stream === 0) {
+          for (var i = 0; i < FS.streams.length; i++) if (FS.streams[i]) flush(i);
+        } else {
+          flush(stream);
+        }
+        return 0;
+      } catch (e) {
+        ___setErrNo(ERRNO_CODES.EIO);
+        return -1;
+      }
+    }
+  function __exit(status) {
+      // void _exit(int status);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html
+      function ExitStatus() {
+        this.name = "ExitStatus";
+        this.message = "Program terminated with exit(" + status + ")";
+        this.status = status;
+        Module.print('Exit Status: ' + status);
+      };
+      ExitStatus.prototype = new Error();
+      ExitStatus.prototype.constructor = ExitStatus;
+      exitRuntime();
+      ABORT = true;
+      throw new ExitStatus();
+    }function _exit(status) {
+      __exit(status);
+    }
+  function _fgetc(stream) {
+      // int fgetc(FILE *stream);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fgetc.html
+      if (!FS.streams[stream]) return -1;
+      var streamObj = FS.streams[stream];
+      if (streamObj.eof || streamObj.error) return -1;
+      var ret = _read(stream, _fgetc.ret, 1);
+      if (ret == 0) {
+        streamObj.eof = true;
+        return -1;
+      } else if (ret == -1) {
+        streamObj.error = true;
+        return -1;
+      } else {
+        return HEAPU8[((_fgetc.ret)|0)];
+      }
+    }function _fgets(s, n, stream) {
+      // char *fgets(char *restrict s, int n, FILE *restrict stream);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fgets.html
+      if (!FS.streams[stream]) return 0;
+      var streamObj = FS.streams[stream];
+      if (streamObj.error || streamObj.eof) return 0;
+      var byte_;
+      for (var i = 0; i < n - 1 && byte_ != 10; i++) {
+        byte_ = _fgetc(stream);
+        if (byte_ == -1) {
+          if (streamObj.error || (streamObj.eof && i == 0)) return 0;
+          else if (streamObj.eof) break;
+        }
+        HEAP8[(((s)+(i))|0)]=byte_
+      }
+      HEAP8[(((s)+(i))|0)]=0
+      return s;
+    }
+  function _usleep(useconds) {
+      // int usleep(useconds_t useconds);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/usleep.html
+      // We're single-threaded, so use a busy loop. Super-ugly.
+      var msec = useconds / 1000;
+      var start = Date.now();
+      while (Date.now() - start < msec) {
+        // Do nothing.
+      }
+      return 0;
+    }
+  function _fputc(c, stream) {
+      // int fputc(int c, FILE *stream);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fputc.html
+      var chr = unSign(c & 0xFF);
+      HEAP8[((_fputc.ret)|0)]=chr
+      var ret = _write(stream, _fputc.ret, 1);
+      if (ret == -1) {
+        if (FS.streams[stream]) FS.streams[stream].error = true;
+        return -1;
+      } else {
+        return chr;
+      }
+    }
+  function _pclose(stream) {
+      // int pclose(FILE *stream);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/pclose.html
+      // We allow only one process, so no pipes.
+      ___setErrNo(ERRNO_CODES.ECHILD);
+      return -1;
+    }
+  function _puts(s) {
+      // int puts(const char *s);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/puts.html
+      // NOTE: puts() always writes an extra newline.
+      var stdout = HEAP32[((_stdout)>>2)];
+      var ret = _fputs(s, stdout);
+      if (ret < 0) {
+        return ret;
+      } else {
+        var newlineRet = _fputc(10, stdout);
+        return (newlineRet < 0) ? -1 : ret + 1;
+      }
+    }
+  var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"No message of desired type",36:"Identifier removed",37:"Channel number out of range",38:"Level 2 not synchronized",39:"Level 3 halted",40:"Level 3 reset",41:"Link number out of range",42:"Protocol driver not attached",43:"No CSI structure available",44:"Level 2 halted",45:"Deadlock condition",46:"No record locks available",50:"Invalid exchange",51:"Invalid request descriptor",52:"Exchange full",53:"No anode",54:"Invalid request code",55:"Invalid slot",56:"File locking deadlock error",57:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",74:"Multihop attempted",75:"Inode is remote (not really error)",76:"Cross mount point (not really error)",77:"Trying to read unreadable message",79:"Inappropriate file type or format",80:"Given log. name not unique",81:"f.d. invalid for this operation",82:"Remote address changed",83:"Can\t access a needed shared lib",84:"Accessing a corrupted shared lib",85:".lib section in a.out corrupted",86:"Attempting to link in too many libs",87:"Attempting to exec a shared library",88:"Function not implemented",89:"No more files",90:"Directory not empty",91:"File or path name too long",92:"Too many symbolic links",95:"Operation not supported on transport endpoint",96:"Protocol family not supported",104:"Connection reset by peer",105:"No buffer space available",106:"Address family not supported by protocol family",107:"Protocol wrong type for socket",108:"Socket operation on non-socket",109:"Protocol not available",110:"Can't send after socket shutdown",111:"Connection refused",112:"Address already in use",113:"Connection aborted",114:"Network is unreachable",115:"Network interface is not configured",116:"Connection timed out",117:"Host is down",118:"Host is unreachable",119:"Connection already in progress",120:"Socket already connected",121:"Destination address required",122:"Message too long",123:"Unknown protocol",124:"Socket type not supported",125:"Address not available",126:"ENETRESET",127:"Socket is already connected",128:"Socket is not connected",129:"TOOMANYREFS",130:"EPROCLIM",131:"EUSERS",132:"EDQUOT",133:"ESTALE",134:"Not supported",135:"No medium (in tape drive)",136:"No such host or network path",137:"Filename exists with different case",138:"EILSEQ",139:"Value too large for defined data type",140:"Operation canceled",141:"State not recoverable",142:"Previous owner died",143:"Streams pipe error"};function _strerror_r(errnum, strerrbuf, buflen) {
+      if (errnum in ERRNO_MESSAGES) {
+        if (ERRNO_MESSAGES[errnum].length > buflen - 1) {
+          return ___setErrNo(ERRNO_CODES.ERANGE);
+        } else {
+          var msg = ERRNO_MESSAGES[errnum];
+          for (var i = 0; i < msg.length; i++) {
+            HEAP8[(((strerrbuf)+(i))|0)]=msg.charCodeAt(i)
+          }
+          HEAP8[(((strerrbuf)+(i))|0)]=0
+          return 0;
+        }
+      } else {
+        return ___setErrNo(ERRNO_CODES.EINVAL);
+      }
+    }function _strerror(errnum) {
+      if (!_strerror.buffer) _strerror.buffer = _malloc(256);
+      _strerror_r(errnum, _strerror.buffer, 256);
+      return _strerror.buffer;
+    }
+  function ___errno_location() {
+      return ___errno_state;
+    }function _perror(s) {
+      // void perror(const char *s);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/perror.html
+      var stdout = HEAP32[((_stdout)>>2)];
+      if (s) {
+        _fputs(s, stdout);
+        _fputc(58, stdout);
+        _fputc(32, stdout);
+      }
+      var errnum = HEAP32[((___errno_location())>>2)];
+      _puts(_strerror(errnum));
+    }
+  function _popen(command, mode) {
+      // FILE *popen(const char *command, const char *mode);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/popen.html
+      // We allow only one process, so no pipes.
+      ___setErrNo(ERRNO_CODES.EMFILE);
+      return 0;
+    }
+  var ___dirent_struct_layout={__size__:1040,d_ino:0,d_name:4,d_off:1028,d_reclen:1032,d_type:1036};function _open(path, oflag, varargs) {
+      // int open(const char *path, int oflag, ...);
+      // http://pubs.opengroup.org/onlinepubs/009695399/functions/open.html
+      // NOTE: This implementation tries to mimic glibc rather than strictly
+      // following the POSIX standard.
+      var mode = HEAP32[((varargs)>>2)];
+      // Simplify flags.
+      var accessMode = oflag & 3;
+      var isWrite = accessMode != 0;
+      var isRead = accessMode != 1;
+      var isCreate = Boolean(oflag & 512);
+      var isExistCheck = Boolean(oflag & 2048);
+      var isTruncate = Boolean(oflag & 1024);
+      var isAppend = Boolean(oflag & 8);
+      // Verify path.
+      var origPath = path;
+      path = FS.analyzePath(Pointer_stringify(path));
+      if (!path.parentExists) {
+        ___setErrNo(path.error);
+        return -1;
+      }
+      var target = path.object || null;
+      var finalPath;
+      // Verify the file exists, create if needed and allowed.
+      if (target) {
+        if (isCreate && isExistCheck) {
+          ___setErrNo(ERRNO_CODES.EEXIST);
+          return -1;
+        }
+        if ((isWrite || isCreate || isTruncate) && target.isFolder) {
+          ___setErrNo(ERRNO_CODES.EISDIR);
+          return -1;
+        }
+        if (isRead && !target.read || isWrite && !target.write) {
+          ___setErrNo(ERRNO_CODES.EACCES);
+          return -1;
+        }
+        if (isTruncate && !target.isDevice) {
+          target.contents = [];
+        } else {
+          if (!FS.forceLoadFile(target)) {
+            ___setErrNo(ERRNO_CODES.EIO);
+            return -1;
+          }
+        }
+        finalPath = path.path;
+      } else {
+        if (!isCreate) {
+          ___setErrNo(ERRNO_CODES.ENOENT);
+          return -1;
+        }
+        if (!path.parentObject.write) {
+          ___setErrNo(ERRNO_CODES.EACCES);
+          return -1;
+        }
+        target = FS.createDataFile(path.parentObject, path.name, [],
+                                   mode & 0x100, mode & 0x80);  // S_IRUSR, S_IWUSR.
+        finalPath = path.parentPath + '/' + path.name;
+      }
+      // Actually create an open stream.
+      var id;
+      if (target.isFolder) {
+        var entryBuffer = 0;
+        if (___dirent_struct_layout) {
+          entryBuffer = _malloc(___dirent_struct_layout.__size__);
+        }
+        var contents = [];
+        for (var key in target.contents) contents.push(key);
+        id = FS.createFileHandle({
+          path: finalPath,
+          object: target,
+          // An index into contents. Special values: -2 is ".", -1 is "..".
+          position: -2,
+          isRead: true,
+          isWrite: false,
+          isAppend: false,
+          error: false,
+          eof: false,
+          ungotten: [],
+          // Folder-specific properties:
+          // Remember the contents at the time of opening in an array, so we can
+          // seek between them relying on a single order.
+          contents: contents,
+          // Each stream has its own area for readdir() returns.
+          currentEntry: entryBuffer
+        });
+      } else {
+        id = FS.createFileHandle({
+          path: finalPath,
+          object: target,
+          position: 0,
+          isRead: isRead,
+          isWrite: isWrite,
+          isAppend: isAppend,
+          error: false,
+          eof: false,
+          ungotten: []
+        });
+      }
+      return id;
+    }function _fopen(filename, mode) {
+      // FILE *fopen(const char *restrict filename, const char *restrict mode);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fopen.html
+      var flags;
+      mode = Pointer_stringify(mode);
+      if (mode[0] == 'r') {
+        if (mode.indexOf('+') != -1) {
+          flags = 2;
+        } else {
+          flags = 0;
+        }
+      } else if (mode[0] == 'w') {
+        if (mode.indexOf('+') != -1) {
+          flags = 2;
+        } else {
+          flags = 1;
+        }
+        flags |= 512;
+        flags |= 1024;
+      } else if (mode[0] == 'a') {
+        if (mode.indexOf('+') != -1) {
+          flags = 2;
+        } else {
+          flags = 1;
+        }
+        flags |= 512;
+        flags |= 8;
+      } else {
+        ___setErrNo(ERRNO_CODES.EINVAL);
+        return 0;
+      }
+      var ret = _open(filename, flags, allocate([0x1FF, 0, 0, 0], 'i32', ALLOC_STACK));  // All creation permissions.
+      return (ret == -1) ? 0 : ret;
+    }
+  var _putc=_fputc;
+  function _getcwd(buf, size) {
+      // char *getcwd(char *buf, size_t size);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/getcwd.html
+      if (size == 0) {
+        ___setErrNo(ERRNO_CODES.EINVAL);
+        return 0;
+      } else if (size < FS.currentPath.length + 1) {
+        ___setErrNo(ERRNO_CODES.ERANGE);
+        return 0;
+      } else {
+        for (var i = 0; i < FS.currentPath.length; i++) {
+          HEAP8[(((buf)+(i))|0)]=FS.currentPath.charCodeAt(i)
+        }
+        HEAP8[(((buf)+(i))|0)]=0
+        return buf;
+      }
+    }
+  var _environ=allocate(1, "i32*", ALLOC_STATIC);var ___environ=_environ;function ___buildEnvironment(env) {
+      // WARNING: Arbitrary limit!
+      var MAX_ENV_VALUES = 64;
+      var TOTAL_ENV_SIZE = 1024;
+      // Statically allocate memory for the environment.
+      var poolPtr;
+      var envPtr;
+      if (!___buildEnvironment.called) {
+        ___buildEnvironment.called = true;
+        // Set default values. Use string keys for Closure Compiler compatibility.
+        ENV['USER'] = 'root';
+        ENV['PATH'] = '/';
+        ENV['PWD'] = '/';
+        ENV['HOME'] = '/home/emscripten';
+        ENV['LANG'] = 'en_US.UTF-8';
+        ENV['_'] = './this.program';
+        // Allocate memory.
+        poolPtr = allocate(TOTAL_ENV_SIZE, 'i8', ALLOC_STATIC);
+        envPtr = allocate(MAX_ENV_VALUES * 4,
+                          'i8*', ALLOC_STATIC);
+        HEAP32[((envPtr)>>2)]=poolPtr
+        HEAP32[((_environ)>>2)]=envPtr;
+      } else {
+        envPtr = HEAP32[((_environ)>>2)];
+        poolPtr = HEAP32[((envPtr)>>2)];
+      }
+      // Collect key=value lines.
+      var strings = [];
+      var totalSize = 0;
+      for (var key in env) {
+        if (typeof env[key] === 'string') {
+          var line = key + '=' + env[key];
+          strings.push(line);
+          totalSize += line.length;
+        }
+      }
+      if (totalSize > TOTAL_ENV_SIZE) {
+        throw new Error('Environment size exceeded TOTAL_ENV_SIZE!');
+      }
+      // Make new.
+      var ptrSize = 4;
+      for (var i = 0; i < strings.length; i++) {
+        var line = strings[i];
+        for (var j = 0; j < line.length; j++) {
+          HEAP8[(((poolPtr)+(j))|0)]=line.charCodeAt(j);
+        }
+        HEAP8[(((poolPtr)+(j))|0)]=0;
+        HEAP32[(((envPtr)+(i * ptrSize))>>2)]=poolPtr;
+        poolPtr += line.length + 1;
+      }
+      HEAP32[(((envPtr)+(strings.length * ptrSize))>>2)]=0;
+    }var ENV={};function _getenv(name) {
+      // char *getenv(const char *name);
+      // http://pubs.opengroup.org/onlinepubs/009695399/functions/getenv.html
+      if (name === 0) return 0;
+      name = Pointer_stringify(name);
+      if (!ENV.hasOwnProperty(name)) return 0;
+      if (_getenv.ret) _free(_getenv.ret);
+      _getenv.ret = allocate(intArrayFromString(ENV[name]), 'i8', ALLOC_NORMAL);
+      return _getenv.ret;
+    }
+  function _strncat(pdest, psrc, num) {
+      var len = _strlen(pdest);
+      var i = 0;
+      while(1) {
+        HEAP8[((pdest+len+i)|0)]=HEAP8[((psrc+i)|0)];
+        if (HEAP8[(((pdest)+(len+i))|0)] == 0) break;
+        i ++;
+        if (i == num) {
+          HEAP8[(((pdest)+(len+i))|0)]=0
+          break;
+        }
+      }
+      return pdest;
+    }
+  function _printf(format, varargs) {
+      // int printf(const char *restrict format, ...);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
+      var stdout = HEAP32[((_stdout)>>2)];
+      return _fprintf(stdout, format, varargs);
+    }
+  function _system(command) {
+      // int system(const char *command);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/system.html
+      // Can't call external programs.
+      ___setErrNo(ERRNO_CODES.EAGAIN);
+      return -1;
+    }
+  function _isalpha(chr) {
+      return (chr >= 97 && chr <= 122) ||
+             (chr >= 65 && chr <= 90);
+    }
+  function _isalnum(chr) {
+      return (chr >= 48 && chr <= 57) ||
+             (chr >= 97 && chr <= 122) ||
+             (chr >= 65 && chr <= 90);
+    }
+  var _getc=_fgetc;
+  function _chdir(path) {
+      // int chdir(const char *path);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/chdir.html
+      // NOTE: The path argument may be a string, to simplify fchdir().
+      if (typeof path !== 'string') path = Pointer_stringify(path);
+      path = FS.analyzePath(path);
+      if (!path.exists) {
+        ___setErrNo(path.error);
+        return -1;
+      } else if (!path.object.isFolder) {
+        ___setErrNo(ERRNO_CODES.ENOTDIR);
+        return -1;
+      } else {
+        FS.currentPath = path.path;
+        return 0;
+      }
+    }
+  function _tmpnam(s, dir, prefix) {
+      // char *tmpnam(char *s);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/tmpnam.html
+      // NOTE: The dir and prefix arguments are for internal use only.
+      var folder = FS.findObject(dir || '/tmp');
+      if (!folder || !folder.isFolder) {
+        dir = '/tmp';
+        folder = FS.findObject(dir);
+        if (!folder || !folder.isFolder) return 0;
+      }
+      var name = prefix || 'file';
+      do {
+        name += String.fromCharCode(65 + Math.floor(Math.random() * 25));
+      } while (name in folder.contents);
+      var result = dir + '/' + name;
+      if (!_tmpnam.buffer) _tmpnam.buffer = _malloc(256);
+      if (!s) s = _tmpnam.buffer;
+      for (var i = 0; i < result.length; i++) {
+        HEAP8[(((s)+(i))|0)]=result.charCodeAt(i);
+      }
+      HEAP8[(((s)+(i))|0)]=0;
+      return s;
+    }function _tmpfile() {
+      // FILE *tmpfile(void);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/tmpfile.html
+      // TODO: Delete the created file on closing.
+      if (_tmpfile.mode) {
+        _tmpfile.mode = allocate(intArrayFromString('w+'), 'i8', ALLOC_NORMAL);
+      }
+      return _fopen(_tmpnam(0), _tmpfile.mode);
+    }
+  function _memchr(ptr, chr, num) {
+      chr = unSign(chr);
+      for (var i = 0; i < num; i++) {
+        if (HEAP8[(ptr)] == chr) return ptr;
+        ptr++;
+      }
+      return 0;
+    }
+  var _sqrt=Math.sqrt;
+  function _fileno(stream) {
+      // int fileno(FILE *stream);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fileno.html
+      // We use file descriptor numbers and FILE* streams interchangeably.
+      return stream;
+    }
+  function _fdopen(fildes, mode) {
+      // FILE *fdopen(int fildes, const char *mode);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fdopen.html
+      if (FS.streams[fildes]) {
+        var stream = FS.streams[fildes];
+        mode = Pointer_stringify(mode);
+        if ((mode.indexOf('w') != -1 && !stream.isWrite) ||
+            (mode.indexOf('r') != -1 && !stream.isRead) ||
+            (mode.indexOf('a') != -1 && !stream.isAppend) ||
+            (mode.indexOf('+') != -1 && (!stream.isRead || !stream.isWrite))) {
+          ___setErrNo(ERRNO_CODES.EINVAL);
+          return 0;
+        } else {
+          stream.error = false;
+          stream.eof = false;
+          return fildes;
+        }
+      } else {
+        ___setErrNo(ERRNO_CODES.EBADF);
+        return 0;
+      }
+    }
+  var ___stat_struct_layout={__size__:68,st_dev:0,st_ino:4,st_mode:8,st_nlink:12,st_uid:16,st_gid:20,st_rdev:24,st_size:28,st_atime:32,st_spare1:36,st_mtime:40,st_spare2:44,st_ctime:48,st_spare3:52,st_blksize:56,st_blocks:60,st_spare4:64};function _stat(path, buf, dontResolveLastLink) {
+      // http://pubs.opengroup.org/onlinepubs/7908799/xsh/stat.html
+      // int stat(const char *path, struct stat *buf);
+      // NOTE: dontResolveLastLink is a shortcut for lstat(). It should never be
+      //       used in client code.
+      var obj = FS.findObject(Pointer_stringify(path), dontResolveLastLink);
+      if (obj === null || !FS.forceLoadFile(obj)) return -1;
+      var offsets = ___stat_struct_layout;
+      // Constants.
+      HEAP32[(((buf)+(offsets.st_nlink))>>2)]=1
+      HEAP32[(((buf)+(offsets.st_uid))>>2)]=0
+      HEAP32[(((buf)+(offsets.st_gid))>>2)]=0
+      HEAP32[(((buf)+(offsets.st_blksize))>>2)]=4096
+      // Variables.
+      HEAP32[(((buf)+(offsets.st_ino))>>2)]=obj.inodeNumber
+      var time = Math.floor(obj.timestamp / 1000);
+      if (offsets.st_atime === undefined) {
+        offsets.st_atime = offsets.st_atim.tv_sec;
+        offsets.st_mtime = offsets.st_mtim.tv_sec;
+        offsets.st_ctime = offsets.st_ctim.tv_sec;
+        var nanosec = (obj.timestamp % 1000) * 1000;
+        HEAP32[(((buf)+(offsets.st_atim.tv_nsec))>>2)]=nanosec
+        HEAP32[(((buf)+(offsets.st_mtim.tv_nsec))>>2)]=nanosec
+        HEAP32[(((buf)+(offsets.st_ctim.tv_nsec))>>2)]=nanosec
+      }
+      HEAP32[(((buf)+(offsets.st_atime))>>2)]=time
+      HEAP32[(((buf)+(offsets.st_mtime))>>2)]=time
+      HEAP32[(((buf)+(offsets.st_ctime))>>2)]=time
+      var mode = 0;
+      var size = 0;
+      var blocks = 0;
+      var dev = 0;
+      var rdev = 0;
+      if (obj.isDevice) {
+        //  Device numbers reuse inode numbers.
+        dev = rdev = obj.inodeNumber;
+        size = blocks = 0;
+        mode = 0x2000;  // S_IFCHR.
+      } else {
+        dev = 1;
+        rdev = 0;
+        // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize),
+        //       but this is not required by the standard.
+        if (obj.isFolder) {
+          size = 4096;
+          blocks = 1;
+          mode = 0x4000;  // S_IFDIR.
+        } else {
+          var data = obj.contents || obj.link;
+          size = data.length;
+          blocks = Math.ceil(data.length / 4096);
+          mode = obj.link === undefined ? 0x8000 : 0xA000;  // S_IFREG, S_IFLNK.
+        }
+      }
+      HEAP32[(((buf)+(offsets.st_dev))>>2)]=dev;
+      HEAP32[(((buf)+(offsets.st_rdev))>>2)]=rdev;
+      HEAP32[(((buf)+(offsets.st_size))>>2)]=size
+      HEAP32[(((buf)+(offsets.st_blocks))>>2)]=blocks
+      if (obj.read) mode |= 0x16D;  // S_IRUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH.
+      if (obj.write) mode |= 0x92;  // S_IWUSR | S_IWGRP | S_IWOTH.
+      HEAP32[(((buf)+(offsets.st_mode))>>2)]=mode
+      return 0;
+    }
+  function _feof(stream) {
+      // int feof(FILE *stream);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/feof.html
+      return Number(FS.streams[stream] && FS.streams[stream].eof);
+    }
+  function _setlocale(category, locale) {
+      if (!_setlocale.ret) _setlocale.ret = allocate([0], 'i8', ALLOC_NORMAL);
+      return _setlocale.ret;
+    }
+  function ___fpclassifyf(x) {
+      if (isNaN(x)) return 0;
+      if (!isFinite(x)) return 1;
+      if (x == 0) return 2;
+      // FP_SUBNORMAL..?
+      return 4;
+    }var ___fpclassifyd=___fpclassifyf;
+  var _cos=Math.cos;
+  var _sin=Math.sin;
+  Module["_tolower"] = _tolower;
+  Module["_strncasecmp"] = _strncasecmp;
+  Module["_strcasecmp"] = _strcasecmp;
+  function _strrchr(ptr, chr) {
+      var ptr2 = ptr + _strlen(ptr);
+      do {
+        if (HEAP8[(ptr2)] == chr) return ptr2;
+        ptr2--;
+      } while (ptr2 >= ptr);
+      return 0;
+    }
+  function _strspn(pstr, pset) {
+      var str = pstr, set, strcurr, setcurr;
+      while (1) {
+        strcurr = HEAP8[(str)];
+        if (!strcurr) return str - pstr;
+        set = pset;
+        while (1) {
+          setcurr = HEAP8[(set)];
+          if (!setcurr || setcurr == strcurr) break;
+          set++;
+        }
+        if (!setcurr) return str - pstr;
+        str++;
+      }
+    }
+  function _strpbrk(ptr1, ptr2) {
+      var curr;
+      var searchSet = {};
+      while (1) {
+        var curr = HEAP8[((ptr2++)|0)];
+        if (!curr) break;
+        searchSet[curr] = 1;
+      }
+      while (1) {
+        curr = HEAP8[(ptr1)];
+        if (!curr) break;
+        if (curr in searchSet) return ptr1;
+        ptr1++;
+      }
+      return 0;
+    }
+  function __isFloat(text) {
+      return !!(/^[+-]?[0-9]*\.?[0-9]+([eE][+-]?[0-9]+)?$/.exec(text));
+    }function __scanString(format, get, unget, varargs) {
+      if (!__scanString.whiteSpace) {
+        __scanString.whiteSpace = {};
+        __scanString.whiteSpace[32] = 1;
+        __scanString.whiteSpace[9] = 1;
+        __scanString.whiteSpace[10] = 1;
+        __scanString.whiteSpace[11] = 1;
+        __scanString.whiteSpace[12] = 1;
+        __scanString.whiteSpace[13] = 1;
+        __scanString.whiteSpace[' '] = 1;
+        __scanString.whiteSpace['\t'] = 1;
+        __scanString.whiteSpace['\n'] = 1;
+        __scanString.whiteSpace['\v'] = 1;
+        __scanString.whiteSpace['\f'] = 1;
+        __scanString.whiteSpace['\r'] = 1;
+      }
+      // Supports %x, %4x, %d.%d, %lld, %s, %f, %lf.
+      // TODO: Support all format specifiers.
+      format = Pointer_stringify(format);
+      var soFar = 0;
+      if (format.indexOf('%n') >= 0) {
+        // need to track soFar
+        var _get = get;
+        get = function() {
+          soFar++;
+          return _get();
+        }
+        var _unget = unget;
+        unget = function() {
+          soFar--;
+          return _unget();
+        }
+      }
+      var formatIndex = 0;
+      var argsi = 0;
+      var fields = 0;
+      var argIndex = 0;
+      var next;
+      mainLoop:
+      for (var formatIndex = 0; formatIndex < format.length;) {
+        if (format[formatIndex] === '%' && format[formatIndex+1] == 'n') {
+          var argPtr = HEAP32[(((varargs)+(argIndex))>>2)];
+          argIndex += Runtime.getAlignSize('void*', null, true);
+          HEAP32[((argPtr)>>2)]=soFar;
+          formatIndex += 2;
+          continue;
+        }
+        // TODO: Support strings like "%5c" etc.
+        if (format[formatIndex] === '%' && format[formatIndex+1] == 'c') {
+          var argPtr = HEAP32[(((varargs)+(argIndex))>>2)];
+          argIndex += Runtime.getAlignSize('void*', null, true);
+          fields++;
+          next = get();
+          HEAP8[(argPtr)]=next
+          formatIndex += 2;
+          continue;
+        }
+        // remove whitespace
+        while (1) {
+          next = get();
+          if (next == 0) return fields;
+          if (!(next in __scanString.whiteSpace)) break;
+        }
+        unget();
+        if (format[formatIndex] === '%') {
+          formatIndex++;
+          var suppressAssignment = false;
+          if (format[formatIndex] == '*') {
+            suppressAssignment = true;
+            formatIndex++;
+          }
+          var maxSpecifierStart = formatIndex;
+          while (format[formatIndex].charCodeAt(0) >= 48 &&
+                 format[formatIndex].charCodeAt(0) <= 57) {
+            formatIndex++;
+          }
+          var max_;
+          if (formatIndex != maxSpecifierStart) {
+            max_ = parseInt(format.slice(maxSpecifierStart, formatIndex), 10);
+          }
+          var long_ = false;
+          var half = false;
+          var longLong = false;
+          if (format[formatIndex] == 'l') {
+            long_ = true;
+            formatIndex++;
+            if (format[formatIndex] == 'l') {
+              longLong = true;
+              formatIndex++;
+            }
+          } else if (format[formatIndex] == 'h') {
+            half = true;
+            formatIndex++;
+          }
+          var type = format[formatIndex];
+          formatIndex++;
+          var curr = 0;
+          var buffer = [];
+          // Read characters according to the format. floats are trickier, they may be in an unfloat state in the middle, then be a valid float later
+          if (type == 'f' || type == 'e' || type == 'g' ||
+              type == 'F' || type == 'E' || type == 'G') {
+            var last = 0;
+            next = get();
+            while (next > 0) {
+              buffer.push(String.fromCharCode(next));
+              if (__isFloat(buffer.join(''))) {
+                last = buffer.length;
+              }
+              next = get();
+            }
+            for (var i = 0; i < buffer.length - last + 1; i++) {
+              unget();
+            }
+            buffer.length = last;
+          } else {
+            next = get();
+            var first = true;
+            while ((curr < max_ || isNaN(max_)) && next > 0) {
+              if (!(next in __scanString.whiteSpace) && // stop on whitespace
+                  (type == 's' ||
+                   ((type === 'd' || type == 'u' || type == 'i') && ((next >= 48 && next <= 57) ||
+                                                                     (first && next == 45))) ||
+                   ((type === 'x' || type === 'X') && (next >= 48 && next <= 57 ||
+                                     next >= 97 && next <= 102 ||
+                                     next >= 65 && next <= 70))) &&
+                  (formatIndex >= format.length || next !== format[formatIndex].charCodeAt(0))) { // Stop when we read something that is coming up
+                buffer.push(String.fromCharCode(next));
+                next = get();
+                curr++;
+                first = false;
+              } else {
+                break;
+              }
+            }
+            unget();
+          }
+          if (buffer.length === 0) return 0;  // Failure.
+          if (suppressAssignment) continue;
+          var text = buffer.join('');
+          var argPtr = HEAP32[(((varargs)+(argIndex))>>2)];
+          argIndex += Runtime.getAlignSize('void*', null, true);
+          switch (type) {
+            case 'd': case 'u': case 'i':
+              if (half) {
+                HEAP16[((argPtr)>>1)]=parseInt(text, 10);
+              } else if (longLong) {
+                (tempI64 = [parseInt(text, 10)>>>0,Math.min(Math.floor((parseInt(text, 10))/(+(4294967296))), (+(4294967295)))>>>0],HEAP32[((argPtr)>>2)]=tempI64[0],HEAP32[(((argPtr)+(4))>>2)]=tempI64[1]);
+              } else {
+                HEAP32[((argPtr)>>2)]=parseInt(text, 10);
+              }
+              break;
+            case 'X':
+            case 'x':
+              HEAP32[((argPtr)>>2)]=parseInt(text, 16)
+              break;
+            case 'F':
+            case 'f':
+            case 'E':
+            case 'e':
+            case 'G':
+            case 'g':
+            case 'E':
+              // fallthrough intended
+              if (long_) {
+                HEAPF64[((argPtr)>>3)]=parseFloat(text)
+              } else {
+                HEAPF32[((argPtr)>>2)]=parseFloat(text)
+              }
+              break;
+            case 's':
+              var array = intArrayFromString(text);
+              for (var j = 0; j < array.length; j++) {
+                HEAP8[(((argPtr)+(j))|0)]=array[j]
+              }
+              break;
+          }
+          fields++;
+        } else if (format[formatIndex] in __scanString.whiteSpace) {
+          next = get();
+          while (next in __scanString.whiteSpace) {
+            if (next <= 0) break mainLoop;  // End of input.
+            next = get();
+          }
+          unget(next);
+          formatIndex++;
+        } else {
+          // Not a specifier.
+          next = get();
+          if (format[formatIndex].charCodeAt(0) !== next) {
+            unget(next);
+            break mainLoop;
+          }
+          formatIndex++;
+        }
+      }
+      return fields;
+    }function _sscanf(s, format, varargs) {
+      // int sscanf(const char *restrict s, const char *restrict format, ... );
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/scanf.html
+      var index = 0;
+      var get = function() { return HEAP8[(((s)+(index++))|0)]; };
+      var unget = function() { index--; };
+      return __scanString(format, get, unget, varargs);
+    }
+  var _atan2=Math.atan2;
+  var ___errno=___errno_location;
+  function _putchar(c) {
+      // int putchar(int c);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/putchar.html
+      return _fputc(c, HEAP32[((_stdout)>>2)]);
+    }
+  Module["_saveSetjmp"] = _saveSetjmp;
+  Module["_testSetjmp"] = _testSetjmp;var _setjmp=undefined;
+  function _signal(sig, func) {
+      // TODO
+      return 0;
+    }
+  function _toupper(chr) {
+      if (chr >= 97 && chr <= 122) {
+        return chr - 97 + 65;
+      } else {
+        return chr;
+      }
+    }
+  function _longjmp(env, value) {
+      asm['setThrew'](env, value || 1);
+      throw 'longjmp';
+    }
+  function _time(ptr) {
+      var ret = Math.floor(Date.now()/1000);
+      if (ptr) {
+        HEAP32[((ptr)>>2)]=ret
+      }
+      return ret;
+    }
+  var ___tm_struct_layout={__size__:44,tm_sec:0,tm_min:4,tm_hour:8,tm_mday:12,tm_mon:16,tm_year:20,tm_wday:24,tm_yday:28,tm_isdst:32,tm_gmtoff:36,tm_zone:40};
+  var ___tm_current=allocate(4*26, "i8", ALLOC_STATIC);
+  var ___tm_timezones={};
+  var __tzname=allocate(8, "i32*", ALLOC_STATIC);
+  var __daylight=allocate(1, "i32*", ALLOC_STATIC);
+  var __timezone=allocate(1, "i32*", ALLOC_STATIC);function _tzset() {
+      // TODO: Use (malleable) environment variables instead of system settings.
+      if (_tzset.called) return;
+      _tzset.called = true;
+      HEAP32[((__timezone)>>2)]=-(new Date()).getTimezoneOffset() * 60
+      var winter = new Date(2000, 0, 1);
+      var summer = new Date(2000, 6, 1);
+      HEAP32[((__daylight)>>2)]=Number(winter.getTimezoneOffset() != summer.getTimezoneOffset())
+      var winterName = 'GMT'; // XXX do not rely on browser timezone info, it is very unpredictable | winter.toString().match(/\(([A-Z]+)\)/)[1];
+      var summerName = 'GMT'; // XXX do not rely on browser timezone info, it is very unpredictable | summer.toString().match(/\(([A-Z]+)\)/)[1];
+      var winterNamePtr = allocate(intArrayFromString(winterName), 'i8', ALLOC_NORMAL);
+      var summerNamePtr = allocate(intArrayFromString(summerName), 'i8', ALLOC_NORMAL);
+      HEAP32[((__tzname)>>2)]=winterNamePtr
+      HEAP32[(((__tzname)+(4))>>2)]=summerNamePtr
+    }function _localtime_r(time, tmPtr) {
+      _tzset();
+      var offsets = ___tm_struct_layout;
+      var date = new Date(HEAP32[((time)>>2)]*1000);
+      HEAP32[(((tmPtr)+(offsets.tm_sec))>>2)]=date.getSeconds()
+      HEAP32[(((tmPtr)+(offsets.tm_min))>>2)]=date.getMinutes()
+      HEAP32[(((tmPtr)+(offsets.tm_hour))>>2)]=date.getHours()
+      HEAP32[(((tmPtr)+(offsets.tm_mday))>>2)]=date.getDate()
+      HEAP32[(((tmPtr)+(offsets.tm_mon))>>2)]=date.getMonth()
+      HEAP32[(((tmPtr)+(offsets.tm_year))>>2)]=date.getFullYear()-1900
+      HEAP32[(((tmPtr)+(offsets.tm_wday))>>2)]=date.getDay()
+      var start = new Date(date.getFullYear(), 0, 1);
+      var yday = Math.floor((date.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));
+      HEAP32[(((tmPtr)+(offsets.tm_yday))>>2)]=yday
+      HEAP32[(((tmPtr)+(offsets.tm_gmtoff))>>2)]=start.getTimezoneOffset() * 60
+      var dst = Number(start.getTimezoneOffset() != date.getTimezoneOffset());
+      HEAP32[(((tmPtr)+(offsets.tm_isdst))>>2)]=dst
+      var timezone = 'GMT'; // XXX do not rely on browser timezone info, it is very unpredictable | date.toString().match(/\(([A-Z]+)\)/)[1];
+      if (!(timezone in ___tm_timezones)) {
+        ___tm_timezones[timezone] = allocate(intArrayFromString(timezone), 'i8', ALLOC_NORMAL);
+      }
+      HEAP32[(((tmPtr)+(offsets.tm_zone))>>2)]=___tm_timezones[timezone]
+      return tmPtr;
+    }function _localtime(time) {
+      return _localtime_r(time, ___tm_current);
+    }
+  var ___tm_formatted=allocate(4*26, "i8", ALLOC_STATIC);
+  function _mktime(tmPtr) {
+      _tzset();
+      var offsets = ___tm_struct_layout;
+      var year = HEAP32[(((tmPtr)+(offsets.tm_year))>>2)];
+      var timestamp = new Date(year >= 1900 ? year : year + 1900,
+                               HEAP32[(((tmPtr)+(offsets.tm_mon))>>2)],
+                               HEAP32[(((tmPtr)+(offsets.tm_mday))>>2)],
+                               HEAP32[(((tmPtr)+(offsets.tm_hour))>>2)],
+                               HEAP32[(((tmPtr)+(offsets.tm_min))>>2)],
+                               HEAP32[(((tmPtr)+(offsets.tm_sec))>>2)],
+                               0).getTime() / 1000;
+      HEAP32[(((tmPtr)+(offsets.tm_wday))>>2)]=new Date(timestamp).getDay()
+      var yday = Math.round((timestamp - (new Date(year, 0, 1)).getTime()) / (1000 * 60 * 60 * 24));
+      HEAP32[(((tmPtr)+(offsets.tm_yday))>>2)]=yday
+      return timestamp;
+    }function _asctime_r(tmPtr, buf) {
+      var date = new Date(_mktime(tmPtr)*1000);
+      var formatted = date.toString();
+      var datePart = formatted.replace(/\d{4}.*/, '').replace(/ 0/, '  ');
+      var timePart = formatted.match(/\d{2}:\d{2}:\d{2}/)[0];
+      formatted = datePart + timePart + ' ' + date.getFullYear() + '\n';
+      formatted.split('').forEach(function(chr, index) {
+        HEAP8[(((buf)+(index))|0)]=chr.charCodeAt(0)
+      });
+      HEAP8[(((buf)+(25))|0)]=0
+      return buf;
+    }function _asctime(tmPtr) {
+      return _asctime_r(tmPtr, ___tm_formatted);
+    }function _ctime(timer) {
+      return _asctime(_localtime(timer));
+    }
+  var _llvm_va_start=undefined;
+  function _vfprintf(s, f, va_arg) {
+      return _fprintf(s, f, HEAP32[((va_arg)>>2)]);
+    }
+  function _llvm_va_end() {}
+  function _rename(old, new_) {
+      // int rename(const char *old, const char *new);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/rename.html
+      var oldObj = FS.analyzePath(Pointer_stringify(old));
+      var newObj = FS.analyzePath(Pointer_stringify(new_));
+      if (newObj.path == oldObj.path) {
+        return 0;
+      } else if (!oldObj.exists) {
+        ___setErrNo(oldObj.error);
+        return -1;
+      } else if (oldObj.isRoot || oldObj.path == FS.currentPath) {
+        ___setErrNo(ERRNO_CODES.EBUSY);
+        return -1;
+      } else if (newObj.parentPath &&
+                 newObj.parentPath.indexOf(oldObj.path) == 0) {
+        ___setErrNo(ERRNO_CODES.EINVAL);
+        return -1;
+      } else if (newObj.exists && newObj.object.isFolder) {
+        ___setErrNo(ERRNO_CODES.EISDIR);
+        return -1;
+      } else {
+        delete oldObj.parentObject.contents[oldObj.name];
+        newObj.parentObject.contents[newObj.name] = oldObj.object;
+        return 0;
+      }
+    }
+  function _strftime(s, maxsize, format, timeptr) {
+      // size_t strftime(char *restrict s, size_t maxsize, const char *restrict format, const struct tm *restrict timeptr);
+      // http://pubs.opengroup.org/onlinepubs/009695399/functions/strftime.html
+      // TODO: Implement.
+      return 0;
+    }
+  function _qsort(base, num, size, cmp) {
+      if (num == 0 || size == 0) return;
+      // forward calls to the JavaScript sort method
+      // first, sort the items logically
+      var comparator = function(x, y) {
+        return Runtime.dynCall('iii', cmp, [x, y]);
+      }
+      var keys = [];
+      for (var i = 0; i < num; i++) keys.push(i);
+      keys.sort(function(a, b) {
+        return comparator(base+a*size, base+b*size);
+      });
+      // apply the sort
+      var temp = _malloc(num*size);
+      _memcpy(temp, base, num*size);
+      for (var i = 0; i < num; i++) {
+        if (keys[i] == i) continue; // already in place
+        _memcpy(base+i*size, temp+keys[i]*size, size);
+      }
+      _free(temp);
+    }
+  function _gettimeofday(ptr) {
+      // %struct.timeval = type { i32, i32 }
+      var now = Date.now();
+      HEAP32[((ptr)>>2)]=Math.floor(now/1000); // seconds
+      HEAP32[(((ptr)+(4))>>2)]=Math.floor((now-1000*Math.floor(now/1000))*1000); // microseconds
+      return 0;
+    }
+  function _opendir(dirname) {
+      // DIR *opendir(const char *dirname);
+      // http://pubs.opengroup.org/onlinepubs/007908799/xsh/opendir.html
+      // NOTE: Calculating absolute path redundantly since we need to associate it
+      //       with the opened stream.
+      var path = FS.absolutePath(Pointer_stringify(dirname));
+      if (path === null) {
+        ___setErrNo(ERRNO_CODES.ENOENT);
+        return 0;
+      }
+      var target = FS.findObject(path);
+      if (target === null) return 0;
+      if (!target.isFolder) {
+        ___setErrNo(ERRNO_CODES.ENOTDIR);
+        return 0;
+      } else if (!target.read) {
+        ___setErrNo(ERRNO_CODES.EACCES);
+        return 0;
+      }
+      var contents = [];
+      for (var key in target.contents) contents.push(key);
+      var id = FS.createFileHandle({
+        path: path,
+        object: target,
+        // An index into contents. Special values: -2 is ".", -1 is "..".
+        position: -2,
+        isRead: true,
+        isWrite: false,
+        isAppend: false,
+        error: false,
+        eof: false,
+        ungotten: [],
+        // Folder-specific properties:
+        // Remember the contents at the time of opening in an array, so we can
+        // seek between them relying on a single order.
+        contents: contents,
+        // Each stream has its own area for readdir() returns.
+        currentEntry: _malloc(___dirent_struct_layout.__size__)
+      });
+      return id;
+    }
+  function _readdir_r(dirp, entry, result) {
+      // int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
+      // http://pubs.opengroup.org/onlinepubs/007908799/xsh/readdir_r.html
+      if (!FS.streams[dirp] || !FS.streams[dirp].object.isFolder) {
+        return ___setErrNo(ERRNO_CODES.EBADF);
+      }
+      var stream = FS.streams[dirp];
+      var loc = stream.position;
+      var entries = 0;
+      for (var key in stream.contents) entries++;
+      if (loc < -2 || loc >= entries) {
+        HEAP32[((result)>>2)]=0
+      } else {
+        var name, inode, type;
+        if (loc === -2) {
+          name = '.';
+          inode = 1;  // Really undefined.
+          type = 4; //DT_DIR
+        } else if (loc === -1) {
+          name = '..';
+          inode = 1;  // Really undefined.
+          type = 4; //DT_DIR
+        } else {
+          var object;
+          name = stream.contents[loc];
+          object = stream.object.contents[name];
+          inode = object.inodeNumber;
+          type = object.isDevice ? 2 // DT_CHR, character device.
+                : object.isFolder ? 4 // DT_DIR, directory.
+                : object.link !== undefined ? 10 // DT_LNK, symbolic link.
+                : 8; // DT_REG, regular file.
+        }
+        stream.position++;
+        var offsets = ___dirent_struct_layout;
+        HEAP32[(((entry)+(offsets.d_ino))>>2)]=inode
+        HEAP32[(((entry)+(offsets.d_off))>>2)]=stream.position
+        HEAP32[(((entry)+(offsets.d_reclen))>>2)]=name.length + 1
+        for (var i = 0; i < name.length; i++) {
+          HEAP8[(((entry + offsets.d_name)+(i))|0)]=name.charCodeAt(i)
+        }
+        HEAP8[(((entry + offsets.d_name)+(i))|0)]=0
+        HEAP8[(((entry)+(offsets.d_type))|0)]=type
+        HEAP32[((result)>>2)]=entry
+      }
+      return 0;
+    }function _readdir(dirp) {
+      // struct dirent *readdir(DIR *dirp);
+      // http://pubs.opengroup.org/onlinepubs/007908799/xsh/readdir_r.html
+      if (!FS.streams[dirp] || !FS.streams[dirp].object.isFolder) {
+        ___setErrNo(ERRNO_CODES.EBADF);
+        return 0;
+      } else {
+        if (!_readdir.result) _readdir.result = _malloc(4);
+        _readdir_r(dirp, FS.streams[dirp].currentEntry, _readdir.result);
+        if (HEAP32[((_readdir.result)>>2)] === 0) {
+          return 0;
+        } else {
+          return FS.streams[dirp].currentEntry;
+        }
+      }
+    }
+  function _closedir(dirp) {
+      // int closedir(DIR *dirp);
+      // http://pubs.opengroup.org/onlinepubs/007908799/xsh/closedir.html
+      if (!FS.streams[dirp] || !FS.streams[dirp].object.isFolder) {
+        return ___setErrNo(ERRNO_CODES.EBADF);
+      } else {
+        _free(FS.streams[dirp].currentEntry);
+        FS.streams[dirp] = null;
+        return 0;
+      }
+    }
+  function _ungetc(c, stream) {
+      // int ungetc(int c, FILE *stream);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/ungetc.html
+      if (FS.streams[stream]) {
+        c = unSign(c & 0xFF);
+        FS.streams[stream].ungotten.push(c);
+        return c;
+      } else {
+        return -1;
+      }
+    }
+  function _fmod(x, y) {
+      return x % y;
+    }
+  function _gmtime_r(time, tmPtr) {
+      var date = new Date(HEAP32[((time)>>2)]*1000);
+      var offsets = ___tm_struct_layout;
+      HEAP32[(((tmPtr)+(offsets.tm_sec))>>2)]=date.getUTCSeconds()
+      HEAP32[(((tmPtr)+(offsets.tm_min))>>2)]=date.getUTCMinutes()
+      HEAP32[(((tmPtr)+(offsets.tm_hour))>>2)]=date.getUTCHours()
+      HEAP32[(((tmPtr)+(offsets.tm_mday))>>2)]=date.getUTCDate()
+      HEAP32[(((tmPtr)+(offsets.tm_mon))>>2)]=date.getUTCMonth()
+      HEAP32[(((tmPtr)+(offsets.tm_year))>>2)]=date.getUTCFullYear()-1900
+      HEAP32[(((tmPtr)+(offsets.tm_wday))>>2)]=date.getUTCDay()
+      HEAP32[(((tmPtr)+(offsets.tm_gmtoff))>>2)]=0
+      HEAP32[(((tmPtr)+(offsets.tm_isdst))>>2)]=0
+      var start = new Date(date.getFullYear(), 0, 1);
+      var yday = Math.round((date.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));
+      HEAP32[(((tmPtr)+(offsets.tm_yday))>>2)]=yday
+      var timezone = "GMT";
+      if (!(timezone in ___tm_timezones)) {
+        ___tm_timezones[timezone] = allocate(intArrayFromString(timezone), 'i8', ALLOC_NORMAL);
+      }
+      HEAP32[(((tmPtr)+(offsets.tm_zone))>>2)]=___tm_timezones[timezone]
+      return tmPtr;
+    }function _gmtime(time) {
+      return _gmtime_r(time, ___tm_current);
+    }
+  function _setvbuf(stream, buf, type, size) {
+      // int setvbuf(FILE *restrict stream, char *restrict buf, int type, size_t size);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/setvbuf.html
+      // TODO: Implement custom buffering.
+      return 0;
+    }function _setbuf(stream, buf) {
+      // void setbuf(FILE *restrict stream, char *restrict buf);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/setbuf.html
+      if (buf) _setvbuf(stream, buf, 0, 8192);  // _IOFBF, BUFSIZ.
+      else _setvbuf(stream, buf, 2, 8192);  // _IONBF, BUFSIZ.
+    }
+  function _atexit(func, arg) {
+      __ATEXIT__.unshift({ func: func, arg: arg });
+    }
+  function _isatty(fildes) {
+      // int isatty(int fildes);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/isatty.html
+      if (!FS.streams[fildes]) {
+        ___setErrNo(ERRNO_CODES.EBADF);
+        return 0;
+      }
+      if (FS.streams[fildes].isTerminal) return 1;
+      ___setErrNo(ERRNO_CODES.ENOTTY);
+      return 0;
+    }
+  var ___utsname_struct_layout={__size__:160,sysname:0,nodename:32,release:64,version:96,machine:128};function _uname(name) {
+      // int uname(struct utsname *name);
+      // http://pubs.opengroup.org/onlinepubs/009695399/functions/uname.html
+      function copyString(element, value) {
+        var offset = ___utsname_struct_layout[element];
+        for (var i = 0; i < value.length; i++) {
+          HEAP8[(((name)+(offset + i))|0)]=value.charCodeAt(i)
+        }
+        HEAP8[(((name)+(offset + i))|0)]=0
+      }
+      if (name === 0) {
+        return -1;
+      } else {
+        copyString('sysname', 'Emscripten');
+        copyString('nodename', 'emscripten');
+        copyString('release', '1.0');
+        copyString('version', '#1');
+        copyString('machine', 'x86-JS');
+        return 0;
+      }
+    }
+  function _nl_langinfo(item) {
+      // char *nl_langinfo(nl_item item);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/nl_langinfo.html
+      var result;
+      switch (item) {
+        case 0:
+          result = 'ANSI_X3.4-1968';
+          break;
+        case 1:
+          result = '%a %b %e %H:%M:%S %Y';
+          break;
+        case 2:
+          result = '%m/%d/%y';
+          break;
+        case 3:
+          result = '%H:%M:%S';
+          break;
+        case 4:
+          result = '%I:%M:%S %p';
+          break;
+        case 5:
+          result = 'AM';
+          break;
+        case 6:
+          result = 'PM';
+          break;
+        case 7:
+          result = 'Sunday';
+          break;
+        case 8:
+          result = 'Monday';
+          break;
+        case 9:
+          result = 'Tuesday';
+          break;
+        case 10:
+          result = 'Wednesday';
+          break;
+        case 11:
+          result = 'Thursday';
+          break;
+        case 12:
+          result = 'Friday';
+          break;
+        case 13:
+          result = 'Saturday';
+          break;
+        case 14:
+          result = 'Sun';
+          break;
+        case 15:
+          result = 'Mon';
+          break;
+        case 16:
+          result = 'Tue';
+          break;
+        case 17:
+          result = 'Wed';
+          break;
+        case 18:
+          result = 'Thu';
+          break;
+        case 19:
+          result = 'Fri';
+          break;
+        case 20:
+          result = 'Sat';
+          break;
+        case 21:
+          result = 'January';
+          break;
+        case 22:
+          result = 'February';
+          break;
+        case 23:
+          result = 'March';
+          break;
+        case 24:
+          result = 'April';
+          break;
+        case 25:
+          result = 'May';
+          break;
+        case 26:
+          result = 'June';
+          break;
+        case 27:
+          result = 'July';
+          break;
+        case 28:
+          result = 'August';
+          break;
+        case 29:
+          result = 'September';
+          break;
+        case 30:
+          result = 'October';
+          break;
+        case 31:
+          result = 'November';
+          break;
+        case 32:
+          result = 'December';
+          break;
+        case 33:
+          result = 'Jan';
+          break;
+        case 34:
+          result = 'Feb';
+          break;
+        case 35:
+          result = 'Mar';
+          break;
+        case 36:
+          result = 'Apr';
+          break;
+        case 37:
+          result = 'May';
+          break;
+        case 38:
+          result = 'Jun';
+          break;
+        case 39:
+          result = 'Jul';
+          break;
+        case 40:
+          result = 'Aug';
+          break;
+        case 41:
+          result = 'Sep';
+          break;
+        case 42:
+          result = 'Oct';
+          break;
+        case 43:
+          result = 'Nov';
+          break;
+        case 44:
+          result = 'Dec';
+          break;
+        case 49:
+          result = '';
+          break;
+        case 50:
+          result = '.';
+          break;
+        case 51:
+          result = '';
+          break;
+        case 52:
+          result = '^[yY]';
+          break;
+        case 53:
+          result = '^[nN]';
+          break;
+        case 56:
+          result = '-';
+          break;
+        case 45:
+        case 46:
+        case 47:
+        case 48:
+        default:
+          result = '';
+          break;
+      }
+      var me = _nl_langinfo;
+      if (!me.ret) me.ret = _malloc(32);
+      for (var i = 0; i < result.length; i++) {
+        HEAP8[(((me.ret)+(i))|0)]=result.charCodeAt(i)
+      }
+      HEAP8[(((me.ret)+(i))|0)]=0
+      return me.ret;
+    }
+  function _iconv_open() {
+  Module['printErr']('missing function: iconv_open'); abort(-1);
+  }
+  function _iconv() {
+  Module['printErr']('missing function: iconv'); abort(-1);
+  }
+  function _iconv_close() {
+  Module['printErr']('missing function: iconv_close'); abort(-1);
+  }
+  function _localeconv() {
+      // %struct.timeval = type { char* decimal point, other stuff... }
+      // var indexes = Runtime.calculateStructAlignment({ fields: ['i32', 'i32'] });
+      var me = _localeconv;
+      if (!me.ret) {
+        me.ret = allocate([allocate(intArrayFromString('.'), 'i8', ALLOC_NORMAL)], 'i8*', ALLOC_NORMAL); // just decimal point, for now
+      }
+      return me.ret;
+    }
+  function _isprint(chr) {
+      return 0x1F < chr && chr < 0x7F;
+    }
+  function _erfc(x) {
+      var MATH_TOLERANCE = 1E-12;
+      var ONE_SQRTPI = 0.564189583547756287;
+      var a = 1;
+      var b = x;
+      var c = x;
+      var d = x * x + 0.5;
+      var n = 1.0;
+      var q2 = b / d;
+      var q1, t;
+      if (Math.abs(x) < 2.2) {
+        return 1.0 - _erf(x);
+      }
+      if (x < 0) {
+        return 2.0 - _erfc(-x);
+      }
+      do {
+        t = a * n + b * x;
+        a = b;
+        b = t;
+        t = c * n + d * x;
+        c = d;
+        d = t;
+        n += 0.5;
+        q1 = q2;
+        q2 = b / d;
+      } while (Math.abs(q1 - q2) / q2 > MATH_TOLERANCE);
+      return (ONE_SQRTPI * Math.exp(- x * x) * q2);
+    }function _erf(x) {
+      var MATH_TOLERANCE = 1E-12;
+      var TWO_SQRTPI = 1.128379167095512574;
+      var sum = x;
+      var term = x;
+      var xsqr = x*x;
+      var j = 1;
+      if (Math.abs(x) > 2.2) {
+        return 1.0 - _erfc(x);
+      }
+      do {
+        term *= xsqr / j;
+        sum -= term / (2 * j + 1);
+        ++j;
+        term *= xsqr / j;
+        sum += term / (2 * j + 1);
+        ++j;
+      } while (Math.abs(term / sum) > MATH_TOLERANCE);
+      return (TWO_SQRTPI * sum);
+    }
+  function _lgamma() {
+  Module['printErr']('missing function: lgamma'); abort(-1);
+  }
+  function ___signgam() {
+  Module['printErr']('missing function: __signgam'); abort(-1);
+  }
+  function _modf(x, intpart) {
+      HEAPF64[((intpart)>>3)]=Math.floor(x)
+      return x - HEAPF64[((intpart)>>3)];
+    }
+  function _cosh(x) {
+      var p = Math.pow(Math.E, x);
+      return (p + (1 / p)) / 2;
+    }
+  function _sinh(x) {
+      var p = Math.pow(Math.E, x);
+      return (p - (1 / p)) / 2;
+    }
+  var _tan=Math.tan;
+  var _asin=Math.asin;
+  var _acos=Math.acos;
+  var _atan=Math.atan;
+  function _sleep(seconds) {
+      // unsigned sleep(unsigned seconds);
+      // http://pubs.opengroup.org/onlinepubs/000095399/functions/sleep.html
+      return _usleep(seconds * 1e6);
+    }
+  function _strdup(ptr) {
+      var len = _strlen(ptr);
+      var newStr = _malloc(len + 1);
+      _memcpy(newStr, ptr, len);
+      HEAP8[(((newStr)+(len))|0)]=0;
+      return newStr;
+    }
+  function _vsnprintf(s, n, format, va_arg) {
+      return _snprintf(s, n, format, HEAP32[((va_arg)>>2)]);
+    }
+  function _abort() {
+      ABORT = true;
+      throw 'abort() at ' + (new Error().stack);
+    }
+  function _sysconf(name) {
+      // long sysconf(int name);
+      // http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html
+      switch(name) {
+        case 8: return PAGE_SIZE;
+        case 54:
+        case 56:
+        case 21:
+        case 61:
+        case 63:
+        case 22:
+        case 67:
+        case 23:
+        case 24:
+        case 25:
+        case 26:
+        case 27:
+        case 69:
+        case 28:
+        case 101:
+        case 70:
+        case 71:
+        case 29:
+        case 30:
+        case 199:
+        case 75:
+        case 76:
+        case 32:
+        case 43:
+        case 44:
+        case 80:
+        case 46:
+        case 47:
+        case 45:
+        case 48:
+        case 49:
+        case 42:
+        case 82:
+        case 33:
+        case 7:
+        case 108:
+        case 109:
+        case 107:
+        case 112:
+        case 119:
+        case 121:
+          return 200809;
+        case 13:
+        case 104:
+        case 94:
+        case 95:
+        case 34:
+        case 35:
+        case 77:
+        case 81:
+        case 83:
+        case 84:
+        case 85:
+        case 86:
+        case 87:
+        case 88:
+        case 89:
+        case 90:
+        case 91:
+        case 94:
+        case 95:
+        case 110:
+        case 111:
+        case 113:
+        case 114:
+        case 115:
+        case 116:
+        case 117:
+        case 118:
+        case 120:
+        case 40:
+        case 16:
+        case 79:
+        case 19:
+          return -1;
+        case 92:
+        case 93:
+        case 5:
+        case 72:
+        case 6:
+        case 74:
+        case 92:
+        case 93:
+        case 96:
+        case 97:
+        case 98:
+        case 99:
+        case 102:
+        case 103:
+        case 105:
+          return 1;
+        case 38:
+        case 66:
+        case 50:
+        case 51:
+        case 4:
+          return 1024;
+        case 15:
+        case 64:
+        case 41:
+          return 32;
+        case 55:
+        case 37:
+        case 17:
+          return 2147483647;
+        case 18:
+        case 1:
+          return 47839;
+        case 59:
+        case 57:
+          return 99;
+        case 68:
+        case 58:
+          return 2048;
+        case 0: return 2097152;
+        case 3: return 65536;
+        case 14: return 32768;
+        case 73: return 32767;
+        case 39: return 16384;
+        case 60: return 1000;
+        case 106: return 700;
+        case 52: return 256;
+        case 62: return 255;
+        case 2: return 100;
+        case 65: return 64;
+        case 36: return 20;
+        case 100: return 16;
+        case 20: return 6;
+        case 53: return 4;
+        case 10: return 1;
+      }
+      ___setErrNo(ERRNO_CODES.EINVAL);
+      return -1;
+    }
+  function _sbrk(bytes) {
+      // Implement a Linux-like 'memory area' for our 'process'.
+      // Changes the size of the memory area by |bytes|; returns the
+      // address of the previous top ('break') of the memory area
+      // We control the "dynamic" memory - DYNAMIC_BASE to DYNAMICTOP
+      var self = _sbrk;
+      if (!self.called) {
+        DYNAMICTOP = alignMemoryPage(DYNAMICTOP); // make sure we start out aligned
+        self.called = true;
+        assert(Runtime.dynamicAlloc);
+        self.alloc = Runtime.dynamicAlloc;
+        Runtime.dynamicAlloc = function() { abort('cannot dynamically allocate, sbrk now has control') };
+      }
+      var ret = DYNAMICTOP;
+      if (bytes != 0) self.alloc(bytes);
+      return ret;  // Previous break location.
+    }
+  function _llvm_lifetime_start() {}
+  function _llvm_lifetime_end() {}
+  var _llvm_memset_p0i8_i64=_memset;
+  var _llvm_memcpy_p0i8_p0i8_i64=_memcpy;
+  function _llvm_trap() {
+      throw 'trap! ' + new Error().stack;
+    }
+  var Browser={mainLoop:{scheduler:null,shouldPause:false,paused:false,queue:[],pause:function () {
+          Browser.mainLoop.shouldPause = true;
+        },resume:function () {
+          if (Browser.mainLoop.paused) {
+            Browser.mainLoop.paused = false;
+            Browser.mainLoop.scheduler();
+          }
+          Browser.mainLoop.shouldPause = false;
+        },updateStatus:function () {
+          if (Module['setStatus']) {
+            var message = Module['statusMessage'] || 'Please wait...';
+            var remaining = Browser.mainLoop.remainingBlockers;
+            var expected = Browser.mainLoop.expectedBlockers;
+            if (remaining) {
+              if (remaining < expected) {
+                Module['setStatus'](message + ' (' + (expected - remaining) + '/' + expected + ')');
+              } else {
+                Module['setStatus'](message);
+              }
+            } else {
+              Module['setStatus']('');
+            }
+          }
+        }},isFullScreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function () {
+        if (Browser.initted) return;
+        Browser.initted = true;
+        try {
+          new Blob();
+          Browser.hasBlobConstructor = true;
+        } catch(e) {
+          Browser.hasBlobConstructor = false;
+          console.log("warning: no blob constructor, cannot create blobs with mimetypes");
+        }
+        Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : (typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : (!Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null));
+        Browser.URLObject = typeof window != "undefined" ? (window.URL ? window.URL : window.webkitURL) : console.log("warning: cannot create object URLs");
+        // Support for plugins that can process preloaded files. You can add more of these to
+        // your app by creating and appending to Module.preloadPlugins.
+        //
+        // Each plugin is asked if it can handle a file based on the file's name. If it can,
+        // it is given the file's raw data. When it is done, it calls a callback with the file's
+        // (possibly modified) data. For example, a plugin might decompress a file, or it
+        // might create some side data structure for use later (like an Image element, etc.).
+        function getMimetype(name) {
+          return {
+            'jpg': 'image/jpeg',
+            'jpeg': 'image/jpeg',
+            'png': 'image/png',
+            'bmp': 'image/bmp',
+            'ogg': 'audio/ogg',
+            'wav': 'audio/wav',
+            'mp3': 'audio/mpeg'
+          }[name.substr(name.lastIndexOf('.')+1)];
+        }
+        if (!Module["preloadPlugins"]) Module["preloadPlugins"] = [];
+        var imagePlugin = {};
+        imagePlugin['canHandle'] = function(name) {
+          return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/.exec(name);
+        };
+        imagePlugin['handle'] = function(byteArray, name, onload, onerror) {
+          var b = null;
+          if (Browser.hasBlobConstructor) {
+            try {
+              b = new Blob([byteArray], { type: getMimetype(name) });
+            } catch(e) {
+              Runtime.warnOnce('Blob constructor present but fails: ' + e + '; falling back to blob builder');
+            }
+          }
+          if (!b) {
+            var bb = new Browser.BlobBuilder();
+            bb.append((new Uint8Array(byteArray)).buffer); // we need to pass a buffer, and must copy the array to get the right data range
+            b = bb.getBlob();
+          }
+          var url = Browser.URLObject.createObjectURL(b);
+          var img = new Image();
+          img.onload = function() {
+            assert(img.complete, 'Image ' + name + ' could not be decoded');
+            var canvas = document.createElement('canvas');
+            canvas.width = img.width;
+            canvas.height = img.height;
+            var ctx = canvas.getContext('2d');
+            ctx.drawImage(img, 0, 0);
+            Module["preloadedImages"][name] = canvas;
+            Browser.URLObject.revokeObjectURL(url);
+            if (onload) onload(byteArray);
+          };
+          img.onerror = function(event) {
+            console.log('Image ' + url + ' could not be decoded');
+            if (onerror) onerror();
+          };
+          img.src = url;
+        };
+        Module['preloadPlugins'].push(imagePlugin);
+        var audioPlugin = {};
+        audioPlugin['canHandle'] = function(name) {
+          return !Module.noAudioDecoding && name.substr(-4) in { '.ogg': 1, '.wav': 1, '.mp3': 1 };
+        };
+        audioPlugin['handle'] = function(byteArray, name, onload, onerror) {
+          var done = false;
+          function finish(audio) {
+            if (done) return;
+            done = true;
+            Module["preloadedAudios"][name] = audio;
+            if (onload) onload(byteArray);
+          }
+          function fail() {
+            if (done) return;
+            done = true;
+            Module["preloadedAudios"][name] = new Audio(); // empty shim
+            if (onerror) onerror();
+          }
+          if (Browser.hasBlobConstructor) {
+            try {
+              var b = new Blob([byteArray], { type: getMimetype(name) });
+            } catch(e) {
+              return fail();
+            }
+            var url = Browser.URLObject.createObjectURL(b); // XXX we never revoke this!
+            var audio = new Audio();
+            audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926
+            audio.onerror = function(event) {
+              if (done) return;
+              console.log('warning: browser could not fully decode audio ' + name + ', trying slower base64 approach');
+              function encode64(data) {
+                var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+                var PAD = '=';
+                var ret = '';
+                var leftchar = 0;
+                var leftbits = 0;
+                for (var i = 0; i < data.length; i++) {
+                  leftchar = (leftchar << 8) | data[i];
+                  leftbits += 8;
+                  while (leftbits >= 6) {
+                    var curr = (leftchar >> (leftbits-6)) & 0x3f;
+                    leftbits -= 6;
+                    ret += BASE[curr];
+                  }
+                }
+                if (leftbits == 2) {
+                  ret += BASE[(leftchar&3) << 4];
+                  ret += PAD + PAD;
+                } else if (leftbits == 4) {
+                  ret += BASE[(leftchar&0xf) << 2];
+                  ret += PAD;
+                }
+                return ret;
+              }
+              audio.src = 'data:audio/x-' + name.substr(-3) + ';base64,' + encode64(byteArray);
+              finish(audio); // we don't wait for confirmation this worked - but it's worth trying
+            };
+            audio.src = url;
+            // workaround for chrome bug 124926 - we do not always get oncanplaythrough or onerror
+            Browser.safeSetTimeout(function() {
+              finish(audio); // try to use it even though it is not necessarily ready to play
+            }, 10000);
+          } else {
+            return fail();
+          }
+        };
+        Module['preloadPlugins'].push(audioPlugin);
+        // Canvas event setup
+        var canvas = Module['canvas'];
+        canvas.requestPointerLock = canvas['requestPointerLock'] ||
+                                    canvas['mozRequestPointerLock'] ||
+                                    canvas['webkitRequestPointerLock'];
+        canvas.exitPointerLock = document['exitPointerLock'] ||
+                                 document['mozExitPointerLock'] ||
+                                 document['webkitExitPointerLock'] ||
+                                 function(){}; // no-op if function does not exist
+        canvas.exitPointerLock = canvas.exitPointerLock.bind(document);
+        function pointerLockChange() {
+          Browser.pointerLock = document['pointerLockElement'] === canvas ||
+                                document['mozPointerLockElement'] === canvas ||
+                                document['webkitPointerLockElement'] === canvas;
+        }
+        document.addEventListener('pointerlockchange', pointerLockChange, false);
+        document.addEventListener('mozpointerlockchange', pointerLockChange, false);
+        document.addEventListener('webkitpointerlockchange', pointerLockChange, false);
+        if (Module['elementPointerLock']) {
+          canvas.addEventListener("click", function(ev) {
+            if (!Browser.pointerLock && canvas.requestPointerLock) {
+              canvas.requestPointerLock();
+              ev.preventDefault();
+            }
+          }, false);
+        }
+      },createContext:function (canvas, useWebGL, setInModule) {
+        var ctx;
+        try {
+          if (useWebGL) {
+            ctx = canvas.getContext('experimental-webgl', {
+              alpha: false
+            });
+          } else {
+            ctx = canvas.getContext('2d');
+          }
+          if (!ctx) throw ':(';
+        } catch (e) {
+          Module.print('Could not create canvas - ' + e);
+          return null;
+        }
+        if (useWebGL) {
+          // Set the background of the WebGL canvas to black
+          canvas.style.backgroundColor = "black";
+          // Warn on context loss
+          canvas.addEventListener('webglcontextlost', function(event) {
+            alert('WebGL context lost. You will need to reload the page.');
+          }, false);
+        }
+        if (setInModule) {
+          Module.ctx = ctx;
+          Module.useWebGL = useWebGL;
+          Browser.moduleContextCreatedCallbacks.forEach(function(callback) { callback() });
+          Browser.init();
+        }
+        return ctx;
+      },destroyContext:function (canvas, useWebGL, setInModule) {},fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:function (lockPointer, resizeCanvas) {
+        Browser.lockPointer = lockPointer;
+        Browser.resizeCanvas = resizeCanvas;
+        if (typeof Browser.lockPointer === 'undefined') Browser.lockPointer = true;
+        if (typeof Browser.resizeCanvas === 'undefined') Browser.resizeCanvas = false;
+        var canvas = Module['canvas'];
+        function fullScreenChange() {
+          Browser.isFullScreen = false;
+          if ((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] ||
+               document['mozFullScreenElement'] || document['mozFullscreenElement'] ||
+               document['fullScreenElement'] || document['fullscreenElement']) === canvas) {
+            canvas.cancelFullScreen = document['cancelFullScreen'] ||
+                                      document['mozCancelFullScreen'] ||
+                                      document['webkitCancelFullScreen'];
+            canvas.cancelFullScreen = canvas.cancelFullScreen.bind(document);
+            if (Browser.lockPointer) canvas.requestPointerLock();
+            Browser.isFullScreen = true;
+            if (Browser.resizeCanvas) Browser.setFullScreenCanvasSize();
+          } else if (Browser.resizeCanvas){
+            Browser.setWindowedCanvasSize();
+          }
+          if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullScreen);
+        }
+        if (!Browser.fullScreenHandlersInstalled) {
+          Browser.fullScreenHandlersInstalled = true;
+          document.addEventListener('fullscreenchange', fullScreenChange, false);
+          document.addEventListener('mozfullscreenchange', fullScreenChange, false);
+          document.addEventListener('webkitfullscreenchange', fullScreenChange, false);
+        }
+        canvas.requestFullScreen = canvas['requestFullScreen'] ||
+                                   canvas['mozRequestFullScreen'] ||
+                                   (canvas['webkitRequestFullScreen'] ? function() { canvas['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT']) } : null);
+        canvas.requestFullScreen();
+      },requestAnimationFrame:function (func) {
+        if (!window.requestAnimationFrame) {
+          window.requestAnimationFrame = window['requestAnimationFrame'] ||
+                                         window['mozRequestAnimationFrame'] ||
+                                         window['webkitRequestAnimationFrame'] ||
+                                         window['msRequestAnimationFrame'] ||
+                                         window['oRequestAnimationFrame'] ||
+                                         window['setTimeout'];
+        }
+        window.requestAnimationFrame(func);
+      },safeCallback:function (func) {
+        return function() {
+          if (!ABORT) return func.apply(null, arguments);
+        };
+      },safeRequestAnimationFrame:function (func) {
+        return Browser.requestAnimationFrame(function() {
+          if (!ABORT) func();
+        });
+      },safeSetTimeout:function (func, timeout) {
+        return setTimeout(function() {
+          if (!ABORT) func();
+        }, timeout);
+      },safeSetInterval:function (func, timeout) {
+        return setInterval(function() {
+          if (!ABORT) func();
+        }, timeout);
+      },getUserMedia:function (func) {
+        if(!window.getUserMedia) {
+          window.getUserMedia = navigator['getUserMedia'] ||
+                                navigator['mozGetUserMedia'];
+        }
+        window.getUserMedia(func);
+      },getMovementX:function (event) {
+        return event['movementX'] ||
+               event['mozMovementX'] ||
+               event['webkitMovementX'] ||
+               0;
+      },getMovementY:function (event) {
+        return event['movementY'] ||
+               event['mozMovementY'] ||
+               event['webkitMovementY'] ||
+               0;
+      },mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,calculateMouseEvent:function (event) { // event should be mousemove, mousedown or mouseup
+        if (Browser.pointerLock) {
+          // When the pointer is locked, calculate the coordinates
+          // based on the movement of the mouse.
+          // Workaround for Firefox bug 764498
+          if (event.type != 'mousemove' &&
+              ('mozMovementX' in event)) {
+            Browser.mouseMovementX = Browser.mouseMovementY = 0;
+          } else {
+            Browser.mouseMovementX = Browser.getMovementX(event);
+            Browser.mouseMovementY = Browser.getMovementY(event);
+          }
+          Browser.mouseX = SDL.mouseX + Browser.mouseMovementX;
+          Browser.mouseY = SDL.mouseY + Browser.mouseMovementY;
+        } else {
+          // Otherwise, calculate the movement based on the changes
+          // in the coordinates.
+          var rect = Module["canvas"].getBoundingClientRect();
+          var x = event.pageX - (window.scrollX + rect.left);
+          var y = event.pageY - (window.scrollY + rect.top);
+          // the canvas might be CSS-scaled compared to its backbuffer;
+          // SDL-using content will want mouse coordinates in terms
+          // of backbuffer units.
+          var cw = Module["canvas"].width;
+          var ch = Module["canvas"].height;
+          x = x * (cw / rect.width);
+          y = y * (ch / rect.height);
+          Browser.mouseMovementX = x - Browser.mouseX;
+          Browser.mouseMovementY = y - Browser.mouseY;
+          Browser.mouseX = x;
+          Browser.mouseY = y;
+        }
+      },xhrLoad:function (url, onload, onerror) {
+        var xhr = new XMLHttpRequest();
+        xhr.open('GET', url, true);
+        xhr.responseType = 'arraybuffer';
+        xhr.onload = function() {
+          if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
+            onload(xhr.response);
+          } else {
+            onerror();
+          }
+        };
+        xhr.onerror = onerror;
+        xhr.send(null);
+      },asyncLoad:function (url, onload, onerror, noRunDep) {
+        Browser.xhrLoad(url, function(arrayBuffer) {
+          assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).');
+          onload(new Uint8Array(arrayBuffer));
+          if (!noRunDep) removeRunDependency('al ' + url);
+        }, function(event) {
+          if (onerror) {
+            onerror();
+          } else {
+            throw 'Loading data file "' + url + '" failed.';
+          }
+        });
+        if (!noRunDep) addRunDependency('al ' + url);
+      },resizeListeners:[],updateResizeListeners:function () {
+        var canvas = Module['canvas'];
+        Browser.resizeListeners.forEach(function(listener) {
+          listener(canvas.width, canvas.height);
+        });
+      },setCanvasSize:function (width, height, noUpdates) {
+        var canvas = Module['canvas'];
+        canvas.width = width;
+        canvas.height = height;
+        if (!noUpdates) Browser.updateResizeListeners();
+      },windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:function () {
+        var canvas = Module['canvas'];
+        this.windowedWidth = canvas.width;
+        this.windowedHeight = canvas.height;
+        canvas.width = screen.width;
+        canvas.height = screen.height;
+        var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
+        flags = flags | 0x00800000; // set SDL_FULLSCREEN flag
+        HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
+        Browser.updateResizeListeners();
+      },setWindowedCanvasSize:function () {
+        var canvas = Module['canvas'];
+        canvas.width = this.windowedWidth;
+        canvas.height = this.windowedHeight;
+        var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
+        flags = flags & ~0x00800000; // clear SDL_FULLSCREEN flag
+        HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
+        Browser.updateResizeListeners();
+      }};
+__ATINIT__.unshift({ func: function() { if (!Module["noFSInit"] && !FS.init.initialized) FS.init() } });__ATMAIN__.push({ func: function() { FS.ignorePermissions = false } });__ATEXIT__.push({ func: function() { FS.quit() } });Module["FS_createFolder"] = FS.createFolder;Module["FS_createPath"] = FS.createPath;Module["FS_createDataFile"] = FS.createDataFile;Module["FS_createPreloadedFile"] = FS.createPreloadedFile;Module["FS_createLazyFile"] = FS.createLazyFile;Module["FS_createLink"] = FS.createLink;Module["FS_createDevice"] = FS.createDevice;
+___errno_state = Runtime.staticAlloc(4); HEAP32[((___errno_state)>>2)]=0;
+_fgetc.ret = allocate([0], "i8", ALLOC_STATIC);
+_fputc.ret = allocate([0], "i8", ALLOC_STATIC);
+___buildEnvironment(ENV);
+Module["requestFullScreen"] = function(lockPointer, resizeCanvas) { Browser.requestFullScreen(lockPointer, resizeCanvas) };
+  Module["requestAnimationFrame"] = function(func) { Browser.requestAnimationFrame(func) };
+  Module["pauseMainLoop"] = function() { Browser.mainLoop.pause() };
+  Module["resumeMainLoop"] = function() { Browser.mainLoop.resume() };
+  Module["getUserMedia"] = function() { Browser.getUserMedia() }
+STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP);
+staticSealed = true; // seal the static portion of memory
+STACK_MAX = STACK_BASE + 5242880;
+DYNAMIC_BASE = DYNAMICTOP = Runtime.alignMemory(STACK_MAX);
+assert(DYNAMIC_BASE < TOTAL_MEMORY); // Stack must fit in TOTAL_MEMORY; allocations from here on may enlarge TOTAL_MEMORY
+var Math_min = Math.min;
+function invoke_viiiii(index,a1,a2,a3,a4,a5) {
+  try {
+    Module["dynCall_viiiii"](index,a1,a2,a3,a4,a5);
+  } catch(e) {
+    if (typeof e !== 'number' && e !== 'longjmp') throw e;
+    asm["setThrew"](1, 0);
+  }
+}
+function invoke_viffiii(index,a1,a2,a3,a4,a5,a6) {
+  try {
+    Module["dynCall_viffiii"](index,a1,a2,a3,a4,a5,a6);
+  } catch(e) {
+    if (typeof e !== 'number' && e !== 'longjmp') throw e;
+    asm["setThrew"](1, 0);
+  }
+}
+function invoke_vf(index,a1) {
+  try {
+    Module["dynCall_vf"](index,a1);
+  } catch(e) {
+    if (typeof e !== 'number' && e !== 'longjmp') throw e;
+    asm["setThrew"](1, 0);
+  }
+}
+function invoke_i(index) {
+  try {
+    return Module["dynCall_i"](index);
+  } catch(e) {
+    if (typeof e !== 'number' && e !== 'longjmp') throw e;
+    asm["setThrew"](1, 0);
+  }
+}
+function invoke_vi(index,a1) {
+  try {
+    Module["dynCall_vi"](index,a1);
+  } catch(e) {
+    if (typeof e !== 'number' && e !== 'longjmp') throw e;
+    asm["setThrew"](1, 0);
+  }
+}
+function invoke_vii(index,a1,a2) {
+  try {
+    Module["dynCall_vii"](index,a1,a2);
+  } catch(e) {
+    if (typeof e !== 'number' && e !== 'longjmp') throw e;
+    asm["setThrew"](1, 0);
+  }
+}
+function invoke_ii(index,a1) {
+  try {
+    return Module["dynCall_ii"](index,a1);
+  } catch(e) {
+    if (typeof e !== 'number' && e !== 'longjmp') throw e;
+    asm["setThrew"](1, 0);
+  }
+}
+function invoke_iff(index,a1,a2) {
+  try {
+    return Module["dynCall_iff"](index,a1,a2);
+  } catch(e) {
+    if (typeof e !== 'number' && e !== 'longjmp') throw e;
+    asm["setThrew"](1, 0);
+  }
+}
+function invoke_iiii(index,a1,a2,a3) {
+  try {
+    return Module["dynCall_iiii"](index,a1,a2,a3);
+  } catch(e) {
+    if (typeof e !== 'number' && e !== 'longjmp') throw e;
+    asm["setThrew"](1, 0);
+  }
+}
+function invoke_viii(index,a1,a2,a3) {
+  try {
+    Module["dynCall_viii"](index,a1,a2,a3);
+  } catch(e) {
+    if (typeof e !== 'number' && e !== 'longjmp') throw e;
+    asm["setThrew"](1, 0);
+  }
+}
+function invoke_v(index) {
+  try {
+    Module["dynCall_v"](index);
+  } catch(e) {
+    if (typeof e !== 'number' && e !== 'longjmp') throw e;
+    asm["setThrew"](1, 0);
+  }
+}
+function invoke_vifiii(index,a1,a2,a3,a4,a5) {
+  try {
+    Module["dynCall_vifiii"](index,a1,a2,a3,a4,a5);
+  } catch(e) {
+    if (typeof e !== 'number' && e !== 'longjmp') throw e;
+    asm["setThrew"](1, 0);
+  }
+}
+function invoke_iiiii(index,a1,a2,a3,a4) {
+  try {
+    return Module["dynCall_iiiii"](index,a1,a2,a3,a4);
+  } catch(e) {
+    if (typeof e !== 'number' && e !== 'longjmp') throw e;
+    asm["setThrew"](1, 0);
+  }
+}
+function invoke_fii(index,a1,a2) {
+  try {
+    return Module["dynCall_fii"](index,a1,a2);
+  } catch(e) {
+    if (typeof e !== 'number' && e !== 'longjmp') throw e;
+    asm["setThrew"](1, 0);
+  }
+}
+function invoke_iii(index,a1,a2) {
+  try {
+    return Module["dynCall_iii"](index,a1,a2);
+  } catch(e) {
+    if (typeof e !== 'number' && e !== 'longjmp') throw e;
+    asm["setThrew"](1, 0);
+  }
+}
+function asmPrintInt(x, y) {
+  Module.print('int ' + x + ',' + y);// + ' ' + new Error().stack);
+}
+function asmPrintFloat(x, y) {
+  Module.print('float ' + x + ',' + y);// + ' ' + new Error().stack);
+}
+// EMSCRIPTEN_START_ASM
+var asm=(function(global,env,buffer){"use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.STACKTOP|0;var j=env.STACK_MAX|0;var k=env.tempDoublePtr|0;var l=env.ABORT|0;var m=env._stderr|0;var n=env._stdout|0;var o=env._stdin|0;var p=+env.NaN;var q=+env.Infinity;var r=0;var s=0;var t=0;var u=0;var v=0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0,D=0.0;var E=0;var F=0;var G=0;var H=0;var I=0;var J=0;var K=0;var L=0;var M=0;var N=0;var O=global.Math.floor;var P=global.Math.abs;var Q=global.Math.sqrt;var R=global.Math.pow;var S=global.Math.cos;var T=global.Math.sin;var U=global.Math.tan;var V=global.Math.acos;var W=global.Math.asin;var X=global.Math.atan;var Y=global.Math.atan2;var Z=global.Math.exp;var _=global.Math.log;var $=global.Math.ceil;var aa=global.Math.imul;var ab=env.abort;var ac=env.assert;var ad=env.asmPrintInt;var ae=env.asmPrintFloat;var af=env.copyTempDouble;var ag=env.copyTempFloat;var ah=env.min;var ai=env.invoke_viiiii;var aj=env.invoke_viffiii;var ak=env.invoke_vf;var al=env.invoke_i;var am=env.invoke_vi;var an=env.invoke_vii;var ao=env.invoke_ii;var ap=env.invoke_iff;var aq=env.invoke_iiii;var ar=env.invoke_viii;var as=env.invoke_v;var at=env.invoke_vifiii;var au=env.invoke_iiiii;var av=env.invoke_fii;var aw=env.invoke_iii;var ax=env._lseek;var ay=env.__scanString;var az=env._fclose;var aA=env._uname;var aB=env._sleep;var aC=env.__isFloat;var aD=env._fflush;var aE=env._strtol;var aF=env._fputc;var aG=env._iconv;var aH=env.___signgam;var aI=env._fwrite;var aJ=env._send;var aK=env._fputs;var aL=env._tmpnam;var aM=env._isspace;var aN=env._localtime;var aO=env._read;var aP=env._ceil;var aQ=env._strstr;var aR=env._fileno;var aS=env._perror;var aT=env._ctime;var aU=env._fsync;var aV=env._signal;var aW=env._opendir;var aX=env._fmod;var aY=env._strcmp;var aZ=env._memchr;var a_=env._strncmp;var a$=env._tmpfile;var a0=env._snprintf;var a1=env._fgetc;var a2=env._pclose;var a3=env._readdir;var a4=env._cosh;var a5=env._atexit;var a6=env._fgets;var a7=env._close;var a8=env._strchr;var a9=env._asin;var ba=env._llvm_lifetime_start;var bb=env.___setErrNo;var bc=env._ftell;var bd=env._exit;var be=env._sprintf;var bf=env._llvm_lifetime_end;var bg=env._asctime;var bh=env._strrchr;var bi=env._iconv_open;var bj=env._modf;var bk=env._strcspn;var bl=env._getcwd;var bm=env._gmtime;var bn=env._localtime_r;var bo=env._asctime_r;var bp=env._recv;var bq=env._cos;var br=env._putchar;var bs=env._isalnum;var bt=env._popen;var bu=env._erfc;var bv=env.__exit;var bw=env._strftime;var bx=env._llvm_va_end;var by=env._tzset;var bz=env._sinh;var bA=env._setlocale;var bB=env._isprint;var bC=env._toupper;var bD=env._printf;var bE=env._pread;var bF=env._fopen;var bG=env._open;var bH=env._usleep;var bI=env._log;var bJ=env._puts;var bK=env._mktime;var bL=env._fdopen;var bM=env._qsort;var bN=env._system;var bO=env._isalpha;var bP=env._strdup;var bQ=env._log10;var bR=env._closedir;var bS=env._isatty;var bT=env.__formatString;var bU=env._getenv;var bV=env._gettimeofday;var bW=env._atoi;var bX=env._vfprintf;var bY=env._chdir;var bZ=env._llvm_pow_f64;var b_=env._sbrk;var b$=env._localeconv;var b0=env.___errno_location;var b1=env._strerror;var b2=env._lgamma;var b3=env._erf;var b4=env._strspn;var b5=env.__parseInt;var b6=env._ungetc;var b7=env._llvm_trap;var b8=env._rename;var b9=env._vsnprintf;var ca=env._sscanf;var cb=env._sysconf;var cc=env._acos;var cd=env._fread;var ce=env._abort;var cf=env._fprintf;var cg=env.___fpclassifyf;var ch=env._tan;var ci=env.___buildEnvironment;var cj=env._feof;var ck=env._strncat;var cl=env._gmtime_r;var cm=env._fabs;var cn=env._floor;var co=env.__reallyNegative;var cp=env._fseek;var cq=env._sqrt;var cr=env._write;var cs=env._rewind;var ct=env._sin;var cu=env._stat;var cv=env._longjmp;var cw=env._atan;var cx=env._readdir_r;var cy=env._strpbrk;var cz=env._iconv_close;var cA=env._setbuf;var cB=env._nl_langinfo;var cC=env._pwrite;var cD=env._strerror_r;var cE=env._atan2;var cF=env._exp;var cG=env._time;var cH=env._setvbuf;
+// EMSCRIPTEN_START_FUNCS
+function cX(a){a=a|0;var b=0;b=i;i=i+a|0;i=i+7>>3<<3;return b|0}function cY(){return i|0}function cZ(a){a=a|0;i=a}function c_(a,b){a=a|0;b=b|0;if((r|0)==0){r=a;s=b}}function c$(a){a=a|0;E=a}function c0(a){a=a|0;F=a}function c1(a){a=a|0;G=a}function c2(a){a=a|0;H=a}function c3(a){a=a|0;I=a}function c4(a){a=a|0;J=a}function c5(a){a=a|0;K=a}function c6(a){a=a|0;L=a}function c7(a){a=a|0;M=a}function c8(a){a=a|0;N=a}function c9(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,x=0.0;d=i;i=i+96|0;e=d|0;f=d+48|0;do{if((c[64808+(b*688&-1)>>2]|0)==1){if((a[64812+(b*688&-1)|0]&1)==0){break}g=4968+(b*51&-1)|0;a[g]=0;j=4608+(b<<2)|0;k=+da(c[j>>2]|0,+h[64664+(b*688&-1)>>3]);t3(e,k);k=+da(c[j>>2]|0,+h[64672+(b*688&-1)>>3]);t3(f,k);l=c[f+20>>2]|0;m=c[e+20>>2]|0;n=(l|0)==(m|0);do{if(n){if((c[f+28>>2]|0)!=(c[e+28>>2]|0)){break}if((c[f+8>>2]|0)!=(c[e+8>>2]|0)){a[g]=a[172544]|0;a[g+1|0]=a[172545|0]|0;a[g+2|0]=a[172546|0]|0}o=c[j>>2]|0;if(o>>>0>=4){p=g;i=d;return p|0}if((a[g]|0)!=0){q=(uA(g|0)|0)+(4968+(b*51&-1))|0;w=58;a[q]=w&255;w=w>>8;a[q+1|0]=w&255}q=(uA(g|0)|0)+(4968+(b*51&-1))|0;a[q]=a[164672]|0;a[q+1|0]=a[164673|0]|0;a[q+2|0]=a[164674|0]|0;if(o>>>0>=3){p=g;i=d;return p|0}o=(uA(g|0)|0)+(4968+(b*51&-1))|0;w=5449018;a[o]=w&255;w=w>>8;a[o+1|0]=w&255;w=w>>8;a[o+2|0]=w&255;w=w>>8;a[o+3|0]=w&255;p=g;i=d;return p|0}}while(0);o=64813+(b*688&-1)|0;q=a8(o|0,109)|0;r=q>>>0<(a8(o|0,100)|0)>>>0;do{if(n){if(r){a[g]=a[145768]|0;a[g+1|0]=a[145769|0]|0;a[g+2|0]=a[145770|0]|0;a[g+3|0]=a[145771|0]|0;a[g+4|0]=a[145772|0]|0;a[g+5|0]=a[145773|0]|0;break}else{a[g]=a[143792]|0;a[g+1|0]=a[143793|0]|0;a[g+2|0]=a[143794|0]|0;a[g+3|0]=a[143795|0]|0;a[g+4|0]=a[143796|0]|0;a[g+5|0]=a[143797|0]|0;break}}else{o=g;q=o|0;w=r?623865125:623862821;a[q]=w&255;w=w>>8;a[q+1|0]=w&255;w=w>>8;a[q+2|0]=w&255;w=w>>8;a[q+3|0]=w&255;q=o+4|0;w=r?2436964:2436973;a[q]=w&255;w=w>>8;a[q+1|0]=w&255;w=w>>8;a[q+2|0]=w&255;w=w>>8;a[q+3|0]=w&255;q=(uA(g|0)|0)+(4968+(b*51&-1))|0;if(((l|0)/100&-1|0)==((m|0)/100&-1|0)){w=121;a[q]=w&255;w=w>>8;a[q+1|0]=w&255;break}else{w=89;a[q]=w&255;w=w>>8;a[q+1|0]=w&255;break}}}while(0);if((c[j>>2]|0)>>>0>=5){p=g;i=d;return p|0}m=(uA(g|0)|0)+(4968+(b*51&-1))|0;a[m]=a[142240]|0;a[m+1|0]=a[142241|0]|0;a[m+2|0]=a[142242|0]|0;a[m+3|0]=a[142243|0]|0;a[m+4|0]=a[142244|0]|0;a[m+5|0]=a[142245|0]|0;a[m+6|0]=a[142246|0]|0;p=g;i=d;return p|0}}while(0);e=4968+(b*51&-1)|0;uB(e|0,64864+(b*688&-1)|0);if((aY(e|0,186288)|0)!=0){p=e;i=d;return p|0}k=+h[64664+(b*688&-1)>>3];if((a[64788+(b*688&-1)|0]&1)==0){s=+h[64672+(b*688&-1)>>3];t=k}else{u=+h[64800+(b*688&-1)>>3];x=+Z(+(k*u));s=+Z(+(+h[64672+(b*688&-1)>>3]*u));t=x}b=~~+$(+(-0.0- +bQ(+(+P(+(s-t))))));if(t*s>0.0&(b|0)>4){f=(b|0)>14?14:b;be(e|0,180872,(v=i,i=i+8|0,c[v>>2]=f,v)|0);p=e;i=d;return p|0}else{a[e]=a[170912]|0;a[e+1|0]=a[170913|0]|0;a[e+2|0]=a[170914|0]|0;p=e;i=d;return p|0}return 0}function da(a,b){a=a|0;b=+b;var d=0,e=0,f=0.0,g=0,h=0,j=0;d=i;i=i+48|0;e=d|0;if(a>>>0<2){f=b;i=d;return+f}t3(e,b);g=e|0;if((c[g>>2]|0)>55){h=e+4|0;c[h>>2]=(c[h>>2]|0)+1}c[g>>2]=0;do{if(a>>>0>2){g=e+4|0;if((c[g>>2]|0)>55){h=e+8|0;c[h>>2]=(c[h>>2]|0)+1}c[g>>2]=0;if(a>>>0<=3){break}g=e+8|0;if((c[g>>2]|0)>22){c[g>>2]=0;c[e+12>>2]=0;g=e+28|0;c[g>>2]=(c[g>>2]|0)+1;b=+t2(e);t3(e,b)}if(a>>>0<=5){break}g=e+12|0;do{if((c[g>>2]|0)>25){h=e+16|0;j=(c[h>>2]|0)+1|0;c[h>>2]=j;if((j|0)<=11){break}j=e+20|0;c[j>>2]=(c[j>>2]|0)+1;c[h>>2]=0}}while(0);c[g>>2]=1}}while(0);f=+t2(e);i=d;return+f}function db(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=i;do{if((a|0)==0){f=ut(b)|0;if((f|0)!=0){g=f;break}gk();f=ut(b)|0;if((f|0)!=0|(d|0)==0){g=f;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=d,v)|0);return 0}else{f=uv(a,b)|0;if((f|0)!=0){g=f;break}gk();f=uv(a,b)|0;if((f|0)!=0|(d|0)==0){g=f;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=d,v)|0);return 0}}while(0);i=e;return g|0}function dc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0,j=0.0,k=0,l=0,n=0.0,o=0,p=0,q=0;d=i;e=64664+(a*688&-1)|0;f=+h[e>>3];g=64672+(a*688&-1)|0;j=+h[g>>3];k=(b|0)!=0;do{if(k){if(!(f==8.988465674311579e+307|j==-8.988465674311579e+307)){break}uf(c[13898]|0,b,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);if(j-f!=0.0){i=d;return}b=64648+(a*688&-1)|0;l=c[b>>2]|0;if((l|0)==0){uf(-1,197584,(v=i,i=i+8|0,c[v>>2]=56832+(a*24&-1),v)|0)}if(j==0.0){n=1.0}else{n=+P(+j)*.01}o=(a|0)!=0|k;if(o){k=c[m>>2]|0;p=56832+(a*24&-1)|0;cf(k|0,206616,(v=i,i=i+24|0,c[v>>2]=p,h[v+8>>3]=f,h[v+16>>3]=j,v)|0);q=c[b>>2]|0}else{q=l}if((q&1|0)!=0){h[e>>3]=+h[e>>3]-n}if((q&2|0)!=0){h[g>>3]=n+ +h[g>>3]}if(!o){i=d;return}n=+h[g>>3];cf(c[m>>2]|0,202928,(v=i,i=i+16|0,h[v>>3]=+h[e>>3],h[v+8>>3]=n,v)|0);i=d;return}function dd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,Q=0.0,S=0,T=0.0,U=0.0;e=i;f=c[64648+(b*688&-1)>>2]|0;g=(f&1|0)==0;if(g){j=0}else{j=(f&4|0)==0}k=(f&2|0)==0;if(k){l=0}else{l=(f&8|0)==0}do{if(!g){if((c[64728+(b*688&-1)>>2]&2|0)==0){break}f=64664+(b*688&-1)|0;m=+h[64744+(b*688&-1)>>3];if(+h[f>>3]<=m){break}h[f>>3]=m}}while(0);do{if(!k){if((c[64732+(b*688&-1)>>2]&1|0)==0){break}g=64672+(b*688&-1)|0;m=+h[64752+(b*688&-1)>>3];if(+h[g>>3]>=m){break}h[g>>3]=m}}while(0);if((c[64916+(b*688&-1)>>2]|0)==0){i=e;return}k=64920+(b*688&-1)|0;g=c[k>>2]|0;do{if((g|0)==2){m=+h[64960+(b*688&-1)>>3];h[4880+(b<<3)>>3]=m;if(j){n=+h[64952+(b*688&-1)>>3]==-8.988465674311579e+307}else{n=0}if(!l){o=0;p=n;q=m;break}o=+h[64968+(b*688&-1)>>3]==8.988465674311579e+307;p=n;q=m}else if((g|0)==1){m=+h[64664+(b*688&-1)>>3]- +h[64672+(b*688&-1)>>3];r=+P(+m);do{if(m==0.0){s=1.0}else{if(r>=8.988465674311579e+307){uf(-1,98888,(v=i,i=i+8|0,c[v>>2]=56832+(b*24&-1),v)|0)}t=+R(10.0,+(+O(+(+bQ(+r)))));u=r/t;w=+(d|0);x=w/u;do{if(x>40.0){y=.05}else{if(x>20.0){y=.1;break}if(x>10.0){y=.2;break}if(x>4.0){y=.5;break}if(x>2.0){y=1.0;break}if(x>.5){y=2.0;break}y=+$(+u)}}while(0);u=t*y;x=(a[64788+(b*688&-1)|0]&1)!=0&u<1.0?1.0:u;if((c[64808+(b*688&-1)>>2]|0)!=1){s=x;break}f=(d*3&-1|0)/5&-1;z=4608+(b<<2)|0;c[z>>2]=1;do{if(x>5.0){u=r/60.0;A=+R(12.0,+(+O(+(+_(+u)/2.4849066497880004))));B=u/A;u=+(f|0)/B;do{if(u>24.0){C=A/24.0}else{if(u>12.0){C=A/12.0;break}if(u>6.0){C=A/6.0;break}if(u>4.0){C=A*.25;break}if(u>2.0){C=A*.5;break}if(u>1.0){C=A;break}if(u>.5){C=A*2.0;break}if(u>.3333333333333333){C=A*3.0;break}else{C=A*+$(+B);break}}}while(0);B=C*60.0;if(B<60.0){D=B;break}c[z>>2]=2;D=B}else{D=x}}while(0);do{if(D>300.0){x=r/3600.0;t=+R(12.0,+(+O(+(+_(+x)/2.4849066497880004))));B=x/t;x=+(f|0)/B;do{if(x>24.0){E=t/24.0}else{if(x>12.0){E=t/12.0;break}if(x>6.0){E=t/6.0;break}if(x>4.0){E=t*.25;break}if(x>2.0){E=t*.5;break}if(x>1.0){E=t;break}if(x>.5){E=t*2.0;break}if(x>.3333333333333333){E=t*3.0;break}else{E=t*+$(+B);break}}}while(0);B=E*3600.0;if(B<3600.0){F=B;break}c[z>>2]=3;F=B}else{F=D}}while(0);do{if(F>3600.0){B=r/86400.0;t=+R(12.0,+(+O(+(+_(+B)/2.4849066497880004))));x=B/t;B=+(f|0)/x;do{if(B>24.0){G=t/24.0}else{if(B>12.0){G=t/12.0;break}if(B>6.0){G=t/6.0;break}if(B>4.0){G=t*.25;break}if(B>2.0){G=t*.5;break}if(B>1.0){G=t;break}if(B>.5){G=t*2.0;break}if(B>.3333333333333333){G=t*3.0;break}else{G=t*+$(+x);break}}}while(0);x=G*86400.0;if(x<86400.0){H=x;break}c[z>>2]=4;H=x}else{H=F}}while(0);do{if(H>172800.0){x=r/604800.0;t=+R(10.0,+(+O(+(+bQ(+x)))));B=x/t;x=w/B;do{if(x>40.0){I=.05}else{if(x>20.0){I=.1;break}if(x>10.0){I=.2;break}if(x>4.0){I=.5;break}if(x>2.0){I=1.0;break}if(x>.5){I=2.0;break}I=+$(+B)}}while(0);B=t*I*604800.0;x=B<604800.0?604800.0:B;if(x<604800.0){J=x;break}c[z>>2]=5;J=x}else{J=H}}while(0);do{if(J>1814400.0){x=r/2629800.0;B=+R(10.0,+(+O(+(+bQ(+x)))));A=x/B;x=w/A;do{if(x>40.0){K=.05}else{if(x>20.0){K=.1;break}if(x>10.0){K=.2;break}if(x>4.0){K=.5;break}if(x>2.0){K=1.0;break}if(x>.5){K=2.0;break}K=+$(+A)}}while(0);A=B*K*2629800.0;x=A<2629800.0?2629800.0:A;if(x<2629800.0){L=x;break}c[z>>2]=6;L=x}else{L=J}}while(0);if(L<=2629800.0){s=L;break}w=r/31557600.0;x=+R(12.0,+(+O(+(+_(+w)/2.4849066497880004))));A=w/x;w=+(f|0)/A;do{if(w>24.0){M=x/24.0}else{if(w>12.0){M=x/12.0;break}if(w>6.0){M=x/6.0;break}if(w>4.0){M=x*.25;break}if(w>2.0){M=x*.5;break}if(w>1.0){M=x;break}if(w>.5){M=x*2.0;break}if(w>.3333333333333333){M=x*3.0;break}else{M=x*+$(+A);break}}}while(0);A=M*31557600.0;if(A<31557600.0){s=A;break}c[z>>2]=7;s=A}}while(0);h[4880+(b<<3)>>3]=s;o=l;p=j;q=s}else{o=0;p=0;q=0.0}}while(0);j=(c[64808+(b*688&-1)>>2]|0)==1;do{if(j){if((c[k>>2]|0)!=2){break}if(q>=31536.0e3){c[4608+(b<<2)>>2]=7;break}if(q>=2419200.0){c[4608+(b<<2)>>2]=6;break}if(q>=604800.0){c[4608+(b<<2)>>2]=5;break}if(q>=86400.0){c[4608+(b<<2)>>2]=4;break}if(q>=3600.0){c[4608+(b<<2)>>2]=3;break}l=4608+(b<<2)|0;if(q<60.0){c[l>>2]=1;break}else{c[l>>2]=2;break}}}while(0);do{if(p){k=64664+(b*688&-1)|0;q=+h[k>>3];l=q>=+h[64672+(b*688&-1)>>3];s=+h[4880+(b<<3)>>3];M=q/s;if(l){N=+$(+M)}else{N=+O(+M)}M=s*N;do{if(j){s=+da(c[4608+(b<<2)>>2]|0,M);if(s>M&l){Q=s;break}if(s<M&(l^1)){Q=s}else{S=231}}else{S=231}}while(0);if((S|0)==231){Q=M}h[k>>3]=Q;if((c[64728+(b*688&-1)>>2]&1|0)==0){break}s=+h[64736+(b*688&-1)>>3];if(Q>=s){break}h[k>>3]=s}}while(0);do{if(o){j=64672+(b*688&-1)|0;Q=+h[j>>3];p=+h[64664+(b*688&-1)>>3]<Q;N=+h[4880+(b<<3)>>3];s=Q/N;if(p){T=+$(+s)}else{T=+O(+s)}s=N*T;do{if((c[64808+(b*688&-1)>>2]|0)==1){N=+da(c[4608+(b<<2)>>2]|0,s);if(N>s&p){U=N;break}if(N<s&(p^1)){U=N}else{S=242}}else{S=242}}while(0);if((S|0)==242){U=s}h[j>>3]=U;if((c[64732+(b*688&-1)>>2]&2|0)==0){break}M=+h[64760+(b*688&-1)>>3];if(U<=M){break}h[j>>3]=M}}while(0);c9(b);i=e;return}function de(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0.0,D=0.0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,Q=0,S=0,T=0,U=0,V=0,W=0,X=0.0,Y=0.0,aa=0.0,ab=0.0,ac=0.0,ad=0.0,ae=0.0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0.0,ap=0.0,aq=0.0,ar=0.0,as=0.0,at=0.0,au=0,av=0.0,aw=0.0,ax=0.0,ay=0,az=0.0,aA=0.0,aB=0.0,aC=0.0,aD=0.0,aE=0.0,aF=0.0,aG=0.0,aH=0.0,aI=0.0,aJ=0.0,aK=0.0,aL=0.0,aM=0.0,aN=0.0,aO=0.0,aP=0.0,aQ=0.0,aR=0.0,aS=0.0,aT=0.0;e=i;i=i+432|0;f=e|0;g=e+48|0;j=e+96|0;k=e+152|0;l=e+208|0;m=e+264|0;n=e+320|0;o=e+376|0;p=64920+(b*688&-1)|0;q=c[65040+(b*688&-1)>>2]|0;r=+h[65048+(b*688&-1)>>3];s=j;c[s>>2]=c[10012];c[s+4>>2]=c[10013];c[s+8>>2]=c[10014];c[s+12>>2]=c[10015];c[s+16>>2]=c[10016];c[s+20>>2]=c[10017];c[s+24>>2]=c[10018];c[s+28>>2]=c[10019];c[s+32>>2]=c[10020];c[s+36>>2]=c[10021];c[s+40>>2]=c[10022];c[s+44>>2]=c[10023];c[s+48>>2]=c[10024];c[s+52>>2]=c[10025];t=k;c[t>>2]=c[8694];c[t+4>>2]=c[8695];c[t+8>>2]=c[8696];c[t+12>>2]=c[8697];c[t+16>>2]=c[8698];c[t+20>>2]=c[8699];c[t+24>>2]=c[8700];c[t+28>>2]=c[8701];c[t+32>>2]=c[8702];c[t+36>>2]=c[8703];c[t+40>>2]=c[8704];c[t+44>>2]=c[8705];c[t+48>>2]=c[8706];c[t+52>>2]=c[8707];if((a[65036+(b*688&-1)|0]&1)==0){c[j+4>>2]=-3}if((a[65037+(b*688&-1)|0]&1)==0){c[k+4>>2]=-3}u=64944+(b*688&-1)|0;do{if((c[u>>2]|0)==0){w=64664+(b*688&-1)|0;x=64672+(b*688&-1)|0;y=64788+(b*688&-1)|0}else{z=64672+(b*688&-1)|0;A=+h[z>>3];B=64664+(b*688&-1)|0;C=+h[B>>3];D=(A-C)/10.0*.01;E=64788+(b*688&-1)|0;if((a[E]&1)==0){F=1.0}else{F=+bQ(+(+h[64792+(b*688&-1)>>3]))}if((a[30528]&1)==0){G=C;H=A;I=0.0}else{J=c[200]|0;G=+h[64664+(J*688&-1)>>3];H=+h[64672+(J*688&-1)>>3];I=(c[17366]&1|0)==0?+h[8685]:0.0}A=G-D;C=D+H;J=c[u>>2]|0;if((J|0)!=0){K=(b|0)==7;L=A<C;M=m;N=j+4|0;Q=n;S=64808+(b*688&-1)|0;T=l|0;U=4968+(b*51&-1)|0;V=64800+(b*688&-1)|0;W=J;do{if(K){D=+h[W>>3];if((a[69604]&1)==0){X=I;Y=D}else{aa=+_(+D);ab=+h[8702];X=+_(+I)/ab;Y=aa/ab}ac=Y-X;ad=D}else{D=+h[W>>3];if((a[E]&1)==0){ae=D}else{ab=+_(+D);ae=ab/+h[V>>3]}ac=ae-I;ad=D}if(L){if(!(ac<A|ac>C)){af=272}}else{if(!(ac<C|ac>A)){af=272}}do{if((af|0)==272){af=0;J=W+12|0;ag=c[W+8>>2]|0;do{if((c[J>>2]|0)<0){ah=ag;ai=ag;af=280}else{if((ag|0)==0){af=275}else{if((a8(ag|0,37)|0)==0){aj=ag}else{af=275}}do{if((af|0)==275){af=0;ak=(ag|0)!=0?ag:U;if((c[S>>2]|0)==1){t3(g,ad);D=ad- +O(+ad);t4(T,49,ak,g,D);aj=T;break}else{ud(T,50,ak,F,ad);aj=T;break}}}while(0);ak=(c[J>>2]|0)>0;al=ak?0:aj;if(!ak){ah=aj;ai=al;af=280;break}c[M>>2]=c[t>>2];c[M+4>>2]=c[t+4>>2];c[M+8>>2]=c[t+8>>2];c[M+12>>2]=c[t+12>>2];c[M+16>>2]=c[t+16>>2];c[M+20>>2]=c[t+20>>2];c[M+24>>2]=c[t+24>>2];c[M+28>>2]=c[t+28>>2];c[M+32>>2]=c[t+32>>2];c[M+36>>2]=c[t+36>>2];c[M+40>>2]=c[t+40>>2];c[M+44>>2]=c[t+44>>2];c[M+48>>2]=c[t+48>>2];c[M+52>>2]=c[t+52>>2];am=aj;an=al}}while(0);if((af|0)==280){af=0;c[M>>2]=c[s>>2];c[M+4>>2]=c[s+4>>2];c[M+8>>2]=c[s+8>>2];c[M+12>>2]=c[s+12>>2];c[M+16>>2]=c[s+16>>2];c[M+20>>2]=c[s+20>>2];c[M+24>>2]=c[s+24>>2];c[M+28>>2]=c[s+28>>2];c[M+32>>2]=c[s+32>>2];c[M+36>>2]=c[s+36>>2];c[M+40>>2]=c[s+40>>2];c[M+44>>2]=c[s+44>>2];c[M+48>>2]=c[s+48>>2];c[M+52>>2]=c[s+52>>2];am=ah;an=ai}cT[d&15](b,ac,an,m,0);if(!K){break}if((c[17433]&4|0)==0){break}ag=c[N>>2]|0;c[N>>2]=-3;al=(c[J>>2]|0)>0;if(al){c[Q>>2]=c[t>>2];c[Q+4>>2]=c[t+4>>2];c[Q+8>>2]=c[t+8>>2];c[Q+12>>2]=c[t+12>>2];c[Q+16>>2]=c[t+16>>2];c[Q+20>>2]=c[t+20>>2];c[Q+24>>2]=c[t+24>>2];c[Q+28>>2]=c[t+28>>2];c[Q+32>>2]=c[t+32>>2];c[Q+36>>2]=c[t+36>>2];c[Q+40>>2]=c[t+40>>2];c[Q+44>>2]=c[t+44>>2];c[Q+48>>2]=c[t+48>>2];c[Q+52>>2]=c[t+52>>2]}else{c[Q>>2]=c[s>>2];c[Q+4>>2]=c[s+4>>2];c[Q+8>>2]=c[s+8>>2];c[Q+12>>2]=c[s+12>>2];c[Q+16>>2]=c[s+16>>2];c[Q+20>>2]=c[s+20>>2];c[Q+24>>2]=c[s+24>>2];c[Q+28>>2]=c[s+28>>2];c[Q+32>>2]=c[s+32>>2];c[Q+36>>2]=c[s+36>>2];c[Q+40>>2]=c[s+40>>2];c[Q+44>>2]=c[s+44>>2];c[Q+48>>2]=c[s+48>>2];c[Q+52>>2]=c[s+52>>2]}cT[d&15](7,-0.0-ac,al?0:am,n,0);c[N>>2]=ag}}while(0);W=c[W+16>>2]|0;}while((W|0)!=0)}if((c[p>>2]|0)!=3){w=B;x=z;y=E;break}i=e;return}}while(0);ac=+h[w>>3];ad=+h[x>>3];if((a[y]&1)==0){ao=1.0}else{ao=+bQ(+(+h[64792+(b*688&-1)>>3]))}x=ad<ac;F=x?ad:ac;I=x?ac:ad;x=p|0;p=c[x>>2]|0;do{if((p|0)==2){if((a[y]&1)==0|(b|0)==7){ad=+h[64952+(b*688&-1)>>3];ac=+h[64960+(b*688&-1)>>3];ae=+h[64968+(b*688&-1)>>3];if(ad==-8.988465674311579e+307){ap=ac*+O(+(F/ac))}else{ap=ad}if(ae!=8.988465674311579e+307){aq=ae;ar=ac;as=ap;break}aq=ac*+$(+(I/ac));ar=ac;as=ap;break}ac=+h[64968+(b*688&-1)>>3];if(ac<=0.0){i=e;return}ae=+h[64960+(b*688&-1)>>3];if(ae<=0.0){i=e;return}ad=+_(+ae);ae=+h[64800+(b*688&-1)>>3];X=ad/ae;ad=+h[64952+(b*688&-1)>>3];if(ad>0.0){at=+_(+ad)/ae}else{at=X*+O(+(F/X))}if(ac==8.988465674311579e+307){aq=X*+$(+(I/X));ar=X;as=at;break}else{aq=+_(+ac)/ae;ar=X;as=at;break}}else if((p|0)==1){X=+h[4880+(b<<3)>>3];ae=X*+O(+(F/X));aq=X*+$(+(I/X));ar=X;as=ae}else if((p|0)==4){ae=+O(+F);X=+$(+I);ac=+O(+((X-ae)/12.0));if(ac>=1.0){aq=X;ar=ac;as=ae;break}aq=X;ar=1.0;as=ae}else if((p|0)==5){ae=+O(+F);X=+$(+I);ac=+O(+((X-ae)/14.0));if(ac>=1.0){aq=X;ar=ac;as=ae;break}aq=X;ar=1.0;as=ae}else{uk(140640,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);p=aq<as;at=p?aq:as;ap=p?as:aq;aq=+P(+ar);L424:do{if((q|0)==0){au=0;av=1.0;aw=1.0;ax=0.0}else{if(+h[65064+(b*688&-1)>>3]==0.0){au=q;av=1.0;aw=1.0;ax=0.0;break}do{if((q|0)==2){if(r<=0.0){au=0;av=1.0;aw=1.0;ax=0.0;break L424}as=aq/r;if((a[y]&1)==0){ay=2;az=aq;aA=as;break}ae=+h[64792+(b*688&-1)>>3];ay=2;az=aq*ae;aA=as*ae}else{if((a[y]&1)!=0){if(aq<=1.5){ae=+h[64792+(b*688&-1)>>3];as=ap-at;if(as>=10.0){au=0;av=ae;aw=1.0;ax=0.0;break L424}au=q;av=ae;aw=as<5.0?1.0:3.0;ax=2.0;break L424}as=aq*.2;if(aq<65535.0){aB=+(~~as|0)}else{aB=as}ay=q;az=aq;aA=aB<1.0?1.0:aB;break}if((c[64808+(b*688&-1)>>2]|0)!=1){if((q|0)!=3){au=0;av=1.0;aw=1.0;ax=0.0;break L424}as=+P(+aq);ay=3;az=aq;aA=aq*((~~(as/+R(10.0,+(+O(+(+bQ(+as))))))|0)==2?.5:.2);break}p=c[4608+(b<<2)>>2]|0;w=(p|0)<1?1:p;do{if((w|0)==1|(w|0)==2){if(aq<1440.0){aC=aq<720.0?aq<360.0?aq<120.0?aq<60.0?aq<20.0?aq<10.0?aq<5.0?0.0:1.0:5.0:10.0:20.0:60.0:120.0:180.0;break}aC=360.0}else if((w|0)==3){if(aq<86400.0){aC=aq<43200.0?aq<21600.0?aq<7200.0?aq<3600.0?aq<1200.0?0.0:600.0:1800.0:3600.0:7200.0:10800.0;break}aC=21600.0}else if((w|0)==4){if(aq<=172800.0){aC=aq>86400.0?43200.0:aq>46800.0?21600.0:aq>25200.0?10800.0:aq>14400.0?7200.0:aq>7200.0?3600.0:0.0;break}aC=86400.0}else if((w|0)==5){if(aq<=604800.0){aC=aq>172800.0?86400.0:0.0;break}aC=604800.0}else if((w|0)==6){if(aq<=63115200.0){aC=aq>15778800.0?7889400.0:aq>5259600.0?2629800.0:aq>1296.0e3?864.0e3:aq>172800.0?86400.0:0.0;break}aC=31557600.0}else if((w|0)==7){if(aq<=946728.0e4){aC=aq>631152.0e4?157788.0e4:aq>315576.0e4?631152.0e3:aq>157788.0e4?315576.0e3:aq>315576.0e3?157788.0e3:aq>63115200.0?31557600.0:aq>15778800.0?7889400.0:aq>5259600.0?2629800.0:0.0;break}aC=315576.0e4}else{aC=0.0}}while(0);ay=q;az=aq*.9;aA=aC}}while(0);if(aA>0.0){au=ay;av=az;aw=aA;ax=aA;break}au=0;av=az;aw=aA;ax=aA}}while(0);aA=aq*.01;az=ap+aA;ap=+P(+I);if(aq<ap+ +P(+F)){aD=I+aA;aE=F-aA}else{aD=I;aE=F}if(ar==0.0){i=e;return}ar=(aD-aE)/aq;if(ar>+((c[(c[3524]|0)+8>>2]|0)>>>0>>>0)){uh(-1,138720,(v=i,i=i+8|0,h[v>>3]=ar,v)|0);i=e;return}h[111]=at-aq;h[110]=at;L473:do{if(+h[110]>az){aF=aq}else{ar=aq*.25;while(1){if(+P(+(+h[110]- +h[111]))<ar){break}h[111]=+h[110];h[110]=aq+ +h[110];if(+h[110]>az){aF=aq;break L473}}uh(-1,137120,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);aF=az-at}}while(0);if(at>az){i=e;return}ay=(b|0)==7;q=(au|0)==0;au=65064+(b*688&-1)|0;E=64808+(b*688&-1)|0;z=4608+(b<<2)|0;B=aE<aD;aq=aF*.01;ar=at-aq;F=az+aq;w=ar<F;p=aF>1.5;n=64800+(b*688&-1)|0;am=o|0;o=4968+(b*51&-1)|0;s=65024+(b*688&-1)|0;t=j+4|0;m=64712+(b*688&-1)|0;an=64720+(b*688&-1)|0;I=at;at=0.0;while(1){do{if(ay){aG=at;aH=I}else{if((a[y]&1)!=0){aG=+Z(+(I*+h[n>>3]));aH=I;break}if((c[E>>2]|0)==1){aI=+da(c[z>>2]|0,I)}else{aI=I}aG=+P(+aI)<aq?0.0:aI;aH=aI}}while(0);if(aH>aD){af=427;break}L495:do{if(aH<aE){aJ=aH;af=382}else{ai=c[x>>2]|0;if((ai|0)==5){ah=(~~+O(+(aG+.5))|0)%7&-1;cT[d&15](b,aH,72464+(((ah|0)<0?ah+7|0:ah)<<3)|0,j,c[u>>2]|0);aJ=aH;af=382;break}else if((ai|0)==4){ai=(~~+O(+(aG+-1.0))|0)%12&-1;cT[d&15](b,aH,72368+(((ai|0)<0?ai+12|0:ai)<<3)|0,j,c[u>>2]|0);aJ=aH;af=382;break}else{do{if((c[E>>2]|0)==1){t3(f,aG);aA=aG- +O(+aG);t4(am,49,o,f,aA);aK=aH}else{if((a[30528]&1)==0){ud(am,50,o,ao,aG);aK=aH;break}aA=+h[8685];ap=(c[17366]&1|0)==0?aA:0.0;aC=+P(+aG)+ap;if(ay){if((a[y]&1)==0){aL=aA;aM=I}else{ap=+_(+I);aB=+h[n>>3];aL=+_(+aA)/aB;aM=ap/aB}aN=I;aO=aM-aL}else{aN=aC;aO=aH}ud(am,50,o,ao,aN);aK=aO}}while(0);do{if((a[s]&1)!=0){aC=+h[m>>3];aB=+h[an>>3];if(aC<aB){if(aK<aC|aK>aB){break L495}else{break}}else{if(aK<aB|aK>aC){break L495}else{break}}}}while(0);cT[d&15](b,aK,am,j,c[u>>2]|0);if(!ay){aJ=aK;af=382;break}if((c[17433]&4|0)==0){aJ=aK;af=382;break}ai=c[t>>2]|0;c[t>>2]=-3;cT[d&15](7,-0.0-aK,am,j,c[u>>2]|0);c[t>>2]=ai;aJ=aK;af=382;break}}}while(0);L522:do{if((af|0)==382){af=0;if(q){break}if(+h[au>>3]==0.0|ax>=av){break}if(p){aC=ax;while(1){if((c[E>>2]|0)==1){aP=+da((c[z>>2]|0)-1|0,aJ+aC)}else{aP=aJ+aC}if(B){if(!(aP<aE|aP>aD)){af=392}}else{if(!(aP<aD|aP>aE)){af=392}}do{if((af|0)==392){af=0;if(w){if(aP<ar|aP>F){break}}else{if(aP<F|aP>ar){break}}cT[d&15](b,aP,0,k,0)}}while(0);aC=aw+aC;if(aC>=av){break L522}}}if(B){aC=ax;do{if((c[E>>2]|0)==1){aQ=+da((c[z>>2]|0)-1|0,aJ+aC)}else{if((a[y]&1)==0){aR=aC}else{aB=+_(+aC);aR=aB/+h[n>>3]}aQ=aJ+aR}do{if(!(aQ<aE|aQ>aD)){if(w){if(aQ<ar|aQ>F){break}}else{if(aQ<F|aQ>ar){break}}cT[d&15](b,aQ,0,k,0)}}while(0);aC=aw+aC;}while(aC<av)}else{aC=ax;do{if((c[E>>2]|0)==1){aS=+da((c[z>>2]|0)-1|0,aJ+aC)}else{if((a[y]&1)==0){aT=aC}else{aB=+_(+aC);aT=aB/+h[n>>3]}aS=aJ+aT}do{if(!(aS<aD|aS>aE)){if(w){if(aS<ar|aS>F){break}}else{if(aS<F|aS>ar){break}}cT[d&15](b,aS,0,k,0)}}while(0);aC=aw+aC;}while(aC<av)}}}while(0);aC=aF+I;if(aC>az){af=428;break}else{I=aC;at=aG}}if((af|0)==427){i=e;return}else if((af|0)==428){i=e;return}}function df(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0,w=0.0,x=0.0,y=0.0,z=0,A=0;g=c[3524]|0;i=(b&3|0)==1;j=(b&-4|0)==4;if(e>>>0>3){k=64768+(e*688&-1)|0;l=64772+(e*688&-1)|0}else{k=64772+(e*688&-1)|0;l=64768+(e*688&-1)|0}m=c[k>>2]|0;k=c[l>>2]|0;l=64916+(b*688&-1)|0;if((c[l>>2]|0)==0){return}n=65032+(b*688&-1)|0;o=c[n>>2]|0;do{if((o|0)==-270){if((cO[c[g+72>>2]&255](-270)|0)==0){p=c[n>>2]|0;q=441;break}if(i){c[1398]=1;r=j?0:2}else{c[1398]=j?0:2;r=1}c[1384]=r;c[6586]=-270;if((b|0)!=1){break}c[d>>2]=(c[d>>2]|0)+((c[g+16>>2]|0)>>>1)}else{p=o;q=441}}while(0);L599:do{if((q|0)==441){do{if((p|0)!=0){if((cO[c[g+72>>2]&255](p)|0)==0){break}if((b|0)==5){c[1398]=0}else if((b|0)==2){c[1398]=0}else if((b|0)==6){c[1398]=0}else if((b|0)==1){c[d>>2]=~~(+(c[d>>2]|0)+ +((c[g+20>>2]|0)>>>0>>>0)*2.5);c[1398]=2}else{c[1398]=0}c[1384]=1;c[6586]=c[n>>2];break L599}}while(0);if(i){c[1398]=j?0:2;s=1}else{c[1398]=1;s=j?2:0}c[1384]=s;c[6586]=0}}while(0);if((a[65272+(b*688&-1)|0]&1)==0){c[65128+(b*688&-1)>>2]=c[1398]}else{c[1398]=c[65128+(b*688&-1)>>2]}s=c[l>>2]|0;l=(s&4|0)==0;c[1396]=l?-1:m;do{if((s&2|0)==0){q=481}else{if((a[64788+(e*688&-1)|0]&1)!=0){q=481;break}t=+h[64664+(e*688&-1)>>3];u=+h[64672+(e*688&-1)>>3];if(t<u){if(t>0.0|u<0.0){q=481;break}}else{if(u>0.0|t<0.0){q=481;break}}m=~~(+(c[64768+(e*688&-1)>>2]|0)+(0.0-t)*+h[64776+(e*688&-1)>>3]+.5);c[1394]=m;n=j?1:-1;c[1400]=n;if(!l){c[1396]=m}p=aa(m-k|0,j?-1:1);if(i){o=g+20|0;do{if(p>>>0>((c[o>>2]|0)*3&-1)>>>0){q=469}else{r=c[11692]|0;if(j){if((r&8|0)==0){q=469;break}else{v=k;break}}else{if((r&2|0)==0){q=469;break}else{v=k;break}}}}while(0);if((q|0)==469){v=m}c[1392]=v;c[1392]=aa(c[o>>2]|0,n)+v;break}r=g+16|0;do{if(p>>>0>c[r>>2]<<1>>>0){t=+(m|0);if(j){w=0.0;x=t;q=479}else{y=t;q=478}}else{z=c[11692]|0;if(j){if((z&4|0)!=0){A=k;break}w=0.0;x=+(m|0);q=479;break}else{if((z&1|0)!=0){A=k;break}y=+(m|0);q=478;break}}}while(0);if((q|0)==478){w=+((c[g+24>>2]|0)>>>0>>>0)*(-0.0- +h[65056+(b*688&-1)>>3]);x=y;q=479}if((q|0)==479){A=~~(x+w)}c[1392]=A;c[1392]=A-(c[r>>2]|0)}}while(0);if((q|0)==481){c[1394]=k;c[1400]=aa((a[65072+(b*688&-1)|0]&1)!=0?1:-1,j?-1:1);c[1392]=c[d>>2]}de(b,f);cO[c[g+72>>2]&255](0);return}function dg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=i;i=i+16|0;f=e|0;g=+h[64664+(d*688&-1)>>3];if(g>0.0){j=+h[64672+(d*688&-1)>>3];if(j>0.0){k=j}else{l=488}}else{l=488}do{if((l|0)==488){if((a[64788+(d*688&-1)|0]&1)!=0){k=+h[64672+(d*688&-1)>>3];break}do{if(g<0.0){j=+h[64672+(d*688&-1)>>3];if(j>=0.0){break}if(j<g){m=64768+(d*688&-1)|0}else{m=64772+(d*688&-1)|0}c[64784+(d*688&-1)>>2]=c[m>>2];i=e;return}}while(0);c[64784+(d*688&-1)>>2]=~~(+(c[64768+(d*688&-1)>>2]|0)+(0.0-g)*+h[64776+(d*688&-1)>>3]+.5);n=c[65284+(b*688&-1)>>2]|0;if((n|0)<=-3){i=e;return}o=f;p=65320+(b*688&-1)|0;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];do{if((c[65280+(b*688&-1)>>2]|0)!=0){j=+h[65304+(b*688&-1)>>3];p=c[(c[3524]|0)+92>>2]|0;if(j<0.0){cK[p&63](+h[3817]);break}else{cK[p&63](j);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[65296+(b*688&-1)>>3]);p=c[(c[3524]|0)+64>>2]|0;if((n|0)<-5){cM[p&511](-2)}else{cM[p&511](n)}p=c[3524]|0;do{if((a[65312+(b*688&-1)|0]&1)==0){if((c[p+96>>2]&1024|0)!=0){q=p;break}c[f>>2]=1;c[f+4>>2]=n;l=511}else{l=511}}while(0);if((l|0)==511){fn(f,p);q=c[3524]|0}n=c[q+56>>2]|0;if((b&3|0)==2){o=64784+(d*688&-1)|0;cN[n&255](c[64768+(b*688&-1)>>2]|0,c[o>>2]|0);cN[c[(c[3524]|0)+60>>2]&255](c[64772+(b*688&-1)>>2]|0,c[o>>2]|0);i=e;return}else{o=64784+(d*688&-1)|0;cN[n&255](c[o>>2]|0,c[64768+(b*688&-1)>>2]|0);cN[c[(c[3524]|0)+60>>2]&255](c[o>>2]|0,c[64772+(b*688&-1)>>2]|0);i=e;return}}}while(0);if(k<g){r=64772+(d*688&-1)|0}else{r=64768+(d*688&-1)|0}c[64784+(d*688&-1)>>2]=c[r>>2];i=e;return}function dh(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0.0,V=0.0,W=0.0;g=i;i=i+208|0;j=g|0;k=g+24|0;l=g+48|0;m=g+72|0;n=g+96|0;o=g+144|0;p=g+152|0;q=g+200|0;r=(f|0)==1;s=(f|0)==2;if((f-1|0)>>>0>=2){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=133592,v)|0)}t=c[13898]|0;u=(c[8272]|0)>(t|0);L710:do{if(u){w=c[1054]|0;if((a[w+(t*40&-1)|0]&1)==0){x=533;break}y=c[w+(t*40&-1)+36>>2]|0;z=w+(t*40&-1)+32|0;w=c[10036]|0;A=0;while(1){if((A|0)>=(y|0)){break}if((a[w+((c[z>>2]|0)+A|0)|0]|0)==(a[A+134808|0]|0)){A=A+1|0}else{x=533;break L710}}if((A|0)!=1){x=533;break}c[e>>2]=c[e>>2]|f;if(r){z=64728+(b*688&-1)|0;c[z>>2]=c[z>>2]&-2;h[64736+(b*688&-1)>>3]=0.0}else{z=64732+(b*688&-1)|0;c[z>>2]=c[z>>2]&-2;h[64752+(b*688&-1)>>3]=0.0}z=(c[13898]|0)+1|0;c[13898]=z;B=z}else{x=533}}while(0);L722:do{if((x|0)==533){a[25288]=1;L724:do{if((c[64808+(b*688&-1)>>2]|0)==1){z=c[1054]|0;w=(a[z+(t*40&-1)|0]&1)==0;if(w){x=536}else{y=c[10036]|0;C=a[y+(c[z+(t*40&-1)+32>>2]|0)|0]|0;if((C<<24>>24|0)==39|(C<<24>>24|0)==34){D=y}else{x=536}}if((x|0)==536){y=c[10810]|0;if((y|0)==0){x=558;break}C=z+(t*40&-1)+36|0;E=z+(t*40&-1)+32|0;F=c[10036]|0;G=y;L731:while(1){y=c[G+4>>2]|0;L733:do{if(!(w|u^1)){H=c[C>>2]|0;I=0;while(1){if((I|0)>=(H|0)){break}if((a[F+((c[E>>2]|0)+I|0)|0]|0)==(a[y+I|0]|0)){I=I+1|0}else{break L733}}if((a[y+I|0]|0)==0){break L731}}}while(0);y=c[G>>2]|0;if((y|0)==0){x=558;break L724}else{G=y}}if((a[G+8|0]&1)!=0){x=558;break}if((c[G+16>>2]|0)==3){D=F}else{x=558;break}}L743:do{if(u){L745:do{if(!w){E=c[z+(t*40&-1)+36>>2]|0;C=z+(t*40&-1)+32|0;y=0;while(1){if((y|0)>=(E|0)){break}if((a[D+((c[C>>2]|0)+y|0)|0]|0)==(a[y+103664|0]|0)){y=y+1|0}else{break L745}}if((y|0)==1){J=0;break L743}}}while(0);a[14176]=1;is(m);a[14176]=0;if((c[m>>2]|0)==3){J=c[m+8>>2]|0;break}else{c[13898]=t;J=0;break}}else{J=0}}while(0);if((t1(J,64813+(b*688&-1)|0,n,o)|0)==0){K=0.0}else{L=+t2(n);K=L+ +h[o>>3]}uu(J);M=K}else{x=558}}while(0);do{if((x|0)==558){A=is(l)|0;z=c[A>>2]|0;if((z|0)==1){N=+(c[A+8>>2]|0)}else if((z|0)==2){N=+h[A+8>>3]}else if((z|0)==3){N=+uz(c[A+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}A=l|0;if((c[A>>2]|0)!=3){M=N;break}uu(c[l+8>>2]|0);c[A>>2]=1;M=N}}while(0);a[25288]=0;A=c[13898]|0;z=c[8272]|0;if((A|0)>=(z|0)){uf(A,129840,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}w=c[1054]|0;F=(a[w+(A*40&-1)|0]&1)==0;L772:do{if(!F){G=c[w+(A*40&-1)+36>>2]|0;C=w+(A*40&-1)+32|0;E=c[10036]|0;I=0;while(1){if((I|0)>=(G|0)){x=570;break}if((a[E+((c[C>>2]|0)+I|0)|0]|0)==(a[I+103664|0]|0)){I=I+1|0}else{break}}do{if((x|0)==570){if((I|0)!=1){break}uf(A,129840,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);if(F){break}I=c[w+(A*40&-1)+36>>2]|0;C=w+(A*40&-1)+32|0;E=c[10036]|0;G=0;while(1){if((G|0)>=(I|0)){x=576;break}if((a[E+((c[C>>2]|0)+G|0)|0]|0)==(a[G+136608|0]|0)){G=G+1|0}else{break}}do{if((x|0)==576){if((G|0)!=1){break}C=A+1|0;c[13898]=C;if((C|0)>=(z|0)){uf(C,127176,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}I=(a[w+(C*40&-1)|0]&1)==0;if(I){uf(C,126040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}H=c[w+(C*40&-1)+36>>2]|0;O=w+(C*40&-1)+32|0;P=0;while(1){if((P|0)>=(H|0)){x=582;break}if((a[E+((c[O>>2]|0)+P|0)|0]|0)==(a[P+103664|0]|0)){P=P+1|0}else{break}}do{if((x|0)==582){if((P|0)!=1){break}uf(C,127176,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);if(I){uf(C,126040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}P=c[w+(C*40&-1)+36>>2]|0;O=w+(C*40&-1)+32|0;H=0;while(1){if((H|0)>=(P|0)){break}if((a[E+((c[O>>2]|0)+H|0)|0]|0)==(a[H+134808|0]|0)){H=H+1|0}else{x=695;break}}if((x|0)==695){uf(C,126040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((H|0)!=1){uf(C,126040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[e>>2]=c[e>>2]|f;if(r){O=64728+(b*688&-1)|0;c[O>>2]=c[O>>2]|1;h[64736+(b*688&-1)>>3]=M}else{O=64732+(b*688&-1)|0;c[O>>2]=c[O>>2]|1;h[64752+(b*688&-1)>>3]=M}O=(c[13898]|0)+1|0;c[13898]=O;B=O;break L722}}while(0);if(F){break}E=c[w+(A*40&-1)+36>>2]|0;G=w+(A*40&-1)+32|0;O=c[10036]|0;P=0;while(1){if((P|0)>=(E|0)){break}if((a[O+((c[G>>2]|0)+P|0)|0]|0)==(a[P+138304|0]|0)){P=P+1|0}else{break L772}}if((P|0)!=1){break}uf(A,123680,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);c[e>>2]=c[e>>2]&(f^-1);if(r){c[64728+(b*688&-1)>>2]=0;h[64744+(b*688&-1)>>3]=0.0}else{c[64732+(b*688&-1)>>2]=0;h[64760+(b*688&-1)>>3]=0.0}h[d>>3]=M;B=c[13898]|0}}while(0);d=c[8272]|0;l=(B|0)>=(d|0);L830:do{if((c[e>>2]&f|0)==0){if(l){break}J=c[1054]|0;L923:do{if((a[J+(B*40&-1)|0]&1)!=0){o=c[J+(B*40&-1)+36>>2]|0;n=J+(B*40&-1)+32|0;t=c[10036]|0;m=0;while(1){if((m|0)>=(o|0)){break}if((a[t+((c[n>>2]|0)+m|0)|0]|0)==(a[m+103664|0]|0)){m=m+1|0}else{break L923}}if((m|0)==1){break L830}}}while(0);J=c[1054]|0;L930:do{if((a[J+(B*40&-1)|0]&1)!=0){n=c[J+(B*40&-1)+36>>2]|0;t=J+(B*40&-1)+32|0;o=c[10036]|0;P=0;while(1){if((P|0)>=(n|0)){break}if((a[o+((c[t>>2]|0)+P|0)|0]|0)==(a[P+136608|0]|0)){P=P+1|0}else{break L930}}if((P|0)!=1){break}uf(B,122232,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);J=c[1054]|0;if((a[J+(B*40&-1)|0]&1)==0){break}t=c[J+(B*40&-1)+36>>2]|0;o=J+(B*40&-1)+32|0;J=c[10036]|0;n=0;while(1){if((n|0)>=(t|0)){break}if((a[J+((c[o>>2]|0)+n|0)|0]|0)==(a[n+138304|0]|0)){n=n+1|0}else{break L830}}if((n|0)!=1){break}uf(B,122232,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if(l){uf(B,129840,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}o=c[1054]|0;L835:do{if((a[o+(B*40&-1)|0]&1)!=0){J=c[o+(B*40&-1)+36>>2]|0;t=o+(B*40&-1)+32|0;m=c[10036]|0;D=0;while(1){if((D|0)>=(J|0)){break}if((a[m+((c[t>>2]|0)+D|0)|0]|0)==(a[D+103664|0]|0)){D=D+1|0}else{break L835}}if((D|0)!=1){break}uf(B,129840,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);o=c[1054]|0;L843:do{if((a[o+(B*40&-1)|0]&1)!=0){n=c[o+(B*40&-1)+36>>2]|0;t=o+(B*40&-1)+32|0;m=c[10036]|0;J=0;while(1){if((J|0)>=(n|0)){break}if((a[m+((c[t>>2]|0)+J|0)|0]|0)==(a[J+136608|0]|0)){J=J+1|0}else{break L843}}if((J|0)!=1){break}t=B+1|0;c[13898]=t;if((t|0)>=(d|0)){uf(t,127176,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}n=(a[o+(t*40&-1)|0]&1)==0;L853:do{if(!n){D=c[o+(t*40&-1)+36>>2]|0;P=o+(t*40&-1)+32|0;u=0;while(1){if((u|0)>=(D|0)){break}if((a[m+((c[P>>2]|0)+u|0)|0]|0)==(a[u+103664|0]|0)){u=u+1|0}else{break L853}}if((u|0)!=1){break}uf(t,127176,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);L861:do{if((c[64808+(b*688&-1)>>2]|0)==1){do{if(n){x=627}else{J=a[m+(c[o+(t*40&-1)+32>>2]|0)|0]|0;if(!((J<<24>>24|0)==39|(J<<24>>24|0)==34)){x=627;break}Q=j;x=639}}while(0);if((x|0)==627){u=c[10810]|0;if((u|0)==0){x=649;break}J=o+(t*40&-1)+36|0;P=o+(t*40&-1)+32|0;D=u;L869:while(1){u=c[D+4>>2]|0;L871:do{if(!n){C=c[J>>2]|0;H=0;while(1){if((H|0)>=(C|0)){break}if((a[m+((c[P>>2]|0)+H|0)|0]|0)==(a[u+H|0]|0)){H=H+1|0}else{break L871}}if((a[u+H|0]|0)==0){break L869}}}while(0);u=c[D>>2]|0;if((u|0)==0){x=649;break L861}else{D=u}}if((a[D+8|0]&1)!=0){x=649;break}if((c[D+16>>2]|0)!=3){x=649;break}P=j;if(n){R=P;x=643}else{Q=P;x=639}}L881:do{if((x|0)==639){P=c[o+(t*40&-1)+36>>2]|0;J=o+(t*40&-1)+32|0;u=0;while(1){if((u|0)>=(P|0)){break}if((a[m+((c[J>>2]|0)+u|0)|0]|0)==(a[u+103664|0]|0)){u=u+1|0}else{R=Q;x=643;break L881}}if((u|0)==1){S=0;T=Q}else{R=Q;x=643}}}while(0);do{if((x|0)==643){a[14176]=1;is(j);a[14176]=0;if((c[j>>2]|0)==3){S=c[j+8>>2]|0;T=R;break}else{c[13898]=t;S=0;T=R;break}}}while(0);if((t1(S,64813+(b*688&-1)|0,p,q)|0)==0){U=0.0}else{M=+t2(p);U=M+ +h[q>>3]}uu(S);V=U}else{x=649}}while(0);do{if((x|0)==649){t=is(k)|0;m=c[t>>2]|0;if((m|0)==1){W=+(c[t+8>>2]|0)}else if((m|0)==2){W=+h[t+8>>3]}else if((m|0)==3){W=+uz(c[t+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}t=k|0;if((c[t>>2]|0)!=3){V=W;break}uu(c[k+8>>2]|0);c[t>>2]=1;V=W}}while(0);if(r){t=64728+(b*688&-1)|0;c[t>>2]=c[t>>2]|2;h[64744+(b*688&-1)>>3]=V;break L830}else{t=64732+(b*688&-1)|0;c[t>>2]=c[t>>2]|2;h[64760+(b*688&-1)>>3]=V;break L830}}}while(0);o=c[1054]|0;L910:do{if((a[o+(B*40&-1)|0]&1)!=0){t=c[o+(B*40&-1)+36>>2]|0;m=o+(B*40&-1)+32|0;n=c[10036]|0;D=0;while(1){if((D|0)>=(t|0)){break}if((a[n+((c[m>>2]|0)+D|0)|0]|0)==(a[D+138304|0]|0)){D=D+1|0}else{break L910}}if((D|0)!=1){break}uf(B,123680,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);if(r){o=64728+(b*688&-1)|0;c[o>>2]=c[o>>2]&-3;h[64744+(b*688&-1)>>3]=0.0;break}else{o=64732+(b*688&-1)|0;c[o>>2]=c[o>>2]&-3;h[64760+(b*688&-1)>>3]=0.0;break}}}while(0);if((c[e>>2]&f|0)==0){i=g;return}do{if(r){f=64728+(b*688&-1)|0;if((c[f>>2]|0)!=3){break}if(+h[64744+(b*688&-1)>>3]>=+h[64736+(b*688&-1)>>3]){break}uh(c[13898]|0,120752,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);c[f>>2]=0}}while(0);if(!s){i=g;return}s=64732+(b*688&-1)|0;if((c[s>>2]|0)!=3){i=g;return}if(+h[64760+(b*688&-1)>>3]>=+h[64752+(b*688&-1)>>3]){i=g;return}uh(c[13898]|0,120752,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);c[s>>2]=0;i=g;return}function di(a,b,d,e,f){a=a|0;b=+b;d=d|0;e=e|0;f=f|0;f=i;a=e;e=i;i=i+56|0;uD(e,a,56);do{if((d|0)!=0){a=ga(d,0)|0;if((a|0)<=(c[216]|0)){break}c[216]=a}}while(0);i=f;return}function dj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0.0,A=0.0;g=i;i=i+8|0;j=g|0;c[j>>2]=f;k=c[13898]|0;l=c[8272]|0;m=(l|0)>(k|0);if(!m){uf(k,116248,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}n=c[1054]|0;do{if((a[n+(k*40&-1)|0]&1)!=0){o=c[n+(k*40&-1)+36>>2]|0;p=n+(k*40&-1)+32|0;q=c[10036]|0;r=0;while(1){if((r|0)>=(o|0)){s=723;break}if((a[q+((c[p>>2]|0)+r|0)|0]|0)==(a[r+78864|0]|0)){r=r+1|0}else{break}}do{if((s|0)==723){if((r|0)!=1){break}c[64728+(b*688&-1)>>2]=0;c[64732+(b*688&-1)>>2]=0;t=f;i=g;return t|0}}while(0);if(m){break}uf(k,116248,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}}while(0);m=c[1054]|0;f=(a[m+(k*40&-1)|0]&1)==0;L984:do{if(f){s=742}else{n=c[m+(k*40&-1)+36>>2]|0;r=m+(k*40&-1)+32|0;p=c[10036]|0;q=0;while(1){if((q|0)>=(n|0)){s=730;break}if((a[p+((c[r>>2]|0)+q|0)|0]|0)==(a[q+103664|0]|0)){q=q+1|0}else{break}}do{if((s|0)==730){if((q|0)!=1){break}uf(k,116248,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}}while(0);if(f){s=742;break}q=c[m+(k*40&-1)+36>>2]|0;r=m+(k*40&-1)+32|0;p=c[10036]|0;n=0;while(1){if((n|0)>=(q|0)){s=736;break}if((a[p+((c[r>>2]|0)+n|0)|0]|0)==(a[n+187176|0]|0)){n=n+1|0}else{break}}if((s|0)==736){if((n|0)==2){u=k;w=l;break}}if(f){s=742;break}r=c[m+(k*40&-1)+36>>2]|0;p=m+(k*40&-1)+32|0;q=c[10036]|0;o=0;while(1){if((o|0)>=(r|0)){break}if((a[q+((c[p>>2]|0)+o|0)|0]|0)==(a[o+183584|0]|0)){o=o+1|0}else{s=742;break L984}}if((o|0)==1){u=k;w=l}else{s=742}}}while(0);if((s|0)==742){dh(b,d,j,1);u=c[13898]|0;w=c[8272]|0}l=(w|0)>(u|0);if(!l){uf(u,114504,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}k=c[1054]|0;do{if((a[k+(u*40&-1)|0]&1)==0){s=750}else{m=c[k+(u*40&-1)+36>>2]|0;f=k+(u*40&-1)+32|0;p=c[10036]|0;q=0;while(1){if((q|0)>=(m|0)){s=748;break}if((a[p+((c[f>>2]|0)+q|0)|0]|0)==(a[q+187176|0]|0)){q=q+1|0}else{break}}if((s|0)==748){if((q|0)==2){x=k;y=p;break}}if(l){s=750;break}uf(u,114504,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}}while(0);do{if((s|0)==750){l=c[1054]|0;if((a[l+(u*40&-1)|0]&1)==0){uf(u,114504,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}k=c[l+(u*40&-1)+36>>2]|0;f=l+(u*40&-1)+32|0;m=c[10036]|0;o=0;while(1){if((o|0)>=(k|0)){break}if((a[m+((c[f>>2]|0)+o|0)|0]|0)==(a[o+183584|0]|0)){o=o+1|0}else{s=774;break}}if((s|0)==774){uf(u,114504,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}if((o|0)==1){x=l;y=m;break}uf(u,114504,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}}while(0);f=u+1|0;c[13898]=f;L1033:do{if((w|0)>(f|0)){if((a[x+(f*40&-1)|0]&1)==0){s=762;break}u=c[x+(f*40&-1)+36>>2]|0;k=x+(f*40&-1)+32|0;p=0;while(1){if((p|0)>=(u|0)){break}if((a[y+((c[k>>2]|0)+p|0)|0]|0)==(a[p+78864|0]|0)){p=p+1|0}else{s=762;break L1033}}if((p|0)!=1){s=762}}else{s=762}}while(0);if((s|0)==762){dh(b,e,j,2)}s=c[j>>2]|0;if((s&3|0)!=0){t=s;i=g;return t|0}z=+h[e>>3];A=+h[d>>3];if(z>=A){t=s;i=g;return t|0}h[d>>3]=z;h[e>>3]=A;e=64656+(b*688&-1)|0;c[e>>2]=c[e>>2]|2;t=s;i=g;return t|0}function dk(){var b=0,d=0,e=0.0,f=0.0,g=0.0,j=0,k=0.0,l=0.0,m=0.0,n=0.0;b=i;d=c[16679]|0;e=+h[8341];if((d&1|0)==0|e<8.988465674311579e+307){f=e}else{e=+h[64664+((c[34]|0)*688&-1)>>3];if((a[64788]&1)==0){g=e}else{g=+Z(+(e*+h[8100]))}h[8341]=g;f=g}j=(a[66852]&1)==0;do{if(j){k=f}else{if(f>0.0){g=+_(+f);k=g/+h[8358];break}else{uk(210984,(v=i,i=i+24|0,c[v>>2]=112752,c[v+8>>2]=56904,h[v+16>>3]=f,v)|0);return 0}}}while(0);h[8341]=k;f=+h[8342];if((d&2|0)==0|f>-8.988465674311579e+307){l=f}else{f=+h[64672+((c[34]|0)*688&-1)>>3];if((a[64788]&1)==0){m=f}else{m=+Z(+(f*+h[8100]))}h[8342]=m;l=m}do{if(j){n=l}else{if(l>0.0){m=+_(+l);n=m/+h[8358];break}else{uk(210984,(v=i,i=i+24|0,c[v>>2]=112752,c[v+8>>2]=56904,h[v+16>>3]=l,v)|0);return 0}}}while(0);h[8342]=n;if(k<=n){i=b;return 1}h[8342]=k;h[8341]=n;i=b;return 1}function dl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0.0,N=0,O=0,P=0,Q=0.0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0.0;e=i;i=i+328|0;f=e|0;g=e+24|0;j=e+48|0;k=e+72|0;l=e+96|0;m=e+120|0;n=e+144|0;o=e+152|0;p=e+160|0;q=e+208|0;r=e+216|0;s=e+264|0;t=e+272|0;u=e+320|0;c[o>>2]=d;uE(b|0,0,40);dm(o,n);d=c[o>>2]|0;c[b>>2]=d;w=c[n>>2]|0;L1080:do{if((w|0)>-1){if((c[64808+((w+2|0)*688&-1)>>2]|0)!=1){x=826;break}y=c[13898]|0;z=c[1054]|0;A=(a[z+(y*40&-1)|0]&1)==0;if(A){x=804}else{B=c[10036]|0;C=a[B+(c[z+(y*40&-1)+32>>2]|0)|0]|0;if((C<<24>>24|0)==39|(C<<24>>24|0)==34){D=B}else{x=804}}if((x|0)==804){B=c[10810]|0;if((B|0)==0){x=826;break}C=c[8272]|0;E=z+(y*40&-1)+36|0;F=z+(y*40&-1)+32|0;G=c[10036]|0;H=B;L1088:while(1){B=c[H+4>>2]|0;L1090:do{if(!((C|0)<=(y|0)|A)){I=c[E>>2]|0;J=0;while(1){if((J|0)>=(I|0)){break}if((a[G+((c[F>>2]|0)+J|0)|0]|0)==(a[B+J|0]|0)){J=J+1|0}else{break L1090}}if((a[B+J|0]|0)==0){break L1088}}}while(0);B=c[H>>2]|0;if((B|0)==0){x=826;break L1080}else{H=B}}if((a[H+8|0]&1)!=0){x=826;break}if((c[H+16>>2]|0)==3){D=G}else{x=826;break}}L1100:do{if((y|0)<(c[8272]|0)){L1102:do{if(!A){F=c[z+(y*40&-1)+36>>2]|0;E=z+(y*40&-1)+32|0;C=0;while(1){if((C|0)>=(F|0)){break}if((a[D+((c[E>>2]|0)+C|0)|0]|0)==(a[C+103664|0]|0)){C=C+1|0}else{break L1102}}if((C|0)==1){K=0;break L1100}}}while(0);a[14176]=1;is(l);a[14176]=0;if((c[l>>2]|0)==3){K=c[l+8>>2]|0;break}else{c[13898]=y;K=0;break}}else{K=0}}while(0);if((t1(K,66189,p,q)|0)!=0){L=+t2(p);h[b+16>>3]=L+ +h[q>>3]}uu(K)}else{x=826}}while(0);if((x|0)==826){K=is(k)|0;q=c[K>>2]|0;if((q|0)==1){M=+(c[K+8>>2]|0)}else if((q|0)==2){M=+h[K+8>>3]}else if((q|0)==3){M=+uz(c[K+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}K=k|0;if((c[K>>2]|0)==3){uu(c[k+8>>2]|0);c[K>>2]=1}h[b+16>>3]=M}K=c[13898]|0;L1128:do{if((c[8272]|0)>(K|0)){k=c[1054]|0;if((a[k+(K*40&-1)|0]&1)==0){x=874;break}q=c[k+(K*40&-1)+36>>2]|0;p=k+(K*40&-1)+32|0;k=c[10036]|0;l=0;while(1){if((l|0)>=(q|0)){break}if((a[k+((c[p>>2]|0)+l|0)|0]|0)==(a[l+148464|0]|0)){l=l+1|0}else{x=874;break L1128}}if((l|0)!=1){x=874;break}c[13898]=K+1;dm(o,n);p=c[o>>2]|0;c[b+4>>2]=p;k=c[n>>2]|0;L1136:do{if((k|0)>-1){if((c[64808+((k+1|0)*688&-1)>>2]|0)!=1){break}q=c[13898]|0;D=c[1054]|0;w=(a[D+(q*40&-1)|0]&1)==0;if(w){x=844}else{y=c[10036]|0;z=a[y+(c[D+(q*40&-1)+32>>2]|0)|0]|0;if((z<<24>>24|0)==39|(z<<24>>24|0)==34){N=y}else{x=844}}if((x|0)==844){y=c[10810]|0;if((y|0)==0){break}z=c[8272]|0;A=D+(q*40&-1)+36|0;G=D+(q*40&-1)+32|0;H=c[10036]|0;E=y;L1144:while(1){y=c[E+4>>2]|0;L1146:do{if(!((z|0)<=(q|0)|w)){F=c[A>>2]|0;J=0;while(1){if((J|0)>=(F|0)){break}if((a[H+((c[G>>2]|0)+J|0)|0]|0)==(a[y+J|0]|0)){J=J+1|0}else{break L1146}}if((a[y+J|0]|0)==0){break L1144}}}while(0);y=c[E>>2]|0;if((y|0)==0){break L1136}else{E=y}}if((a[E+8|0]&1)!=0){break}if((c[E+16>>2]|0)==3){N=H}else{break}}L1156:do{if((q|0)<(c[8272]|0)){L1158:do{if(!w){G=c[D+(q*40&-1)+36>>2]|0;A=D+(q*40&-1)+32|0;z=0;while(1){if((z|0)>=(G|0)){break}if((a[N+((c[A>>2]|0)+z|0)|0]|0)==(a[z+103664|0]|0)){z=z+1|0}else{break L1158}}if((z|0)==1){O=0;break L1156}}}while(0);a[14176]=1;is(j);a[14176]=0;if((c[j>>2]|0)==3){O=c[j+8>>2]|0;break}else{c[13898]=q;O=0;break}}else{O=0}}while(0);if((t1(O,65501,r,s)|0)!=0){M=+t2(r);h[b+24>>3]=M+ +h[s>>3]}uu(O);P=p;break L1128}}while(0);k=is(g)|0;l=c[k>>2]|0;if((l|0)==1){Q=+(c[k+8>>2]|0)}else if((l|0)==2){Q=+h[k+8>>3]}else if((l|0)==3){Q=+uz(c[k+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}k=g|0;if((c[k>>2]|0)==3){uu(c[g+8>>2]|0);c[k>>2]=1}h[b+24>>3]=Q;P=p}else{x=874}}while(0);if((x|0)==874){h[b+24>>3]=0.0;c[b+4>>2]=d;P=d}d=c[13898]|0;g=c[8272]|0;L1185:do{if((g|0)>(d|0)){O=c[1054]|0;if((a[O+(d*40&-1)|0]&1)==0){break}s=c[O+(d*40&-1)+36>>2]|0;r=O+(d*40&-1)+32|0;j=c[10036]|0;N=0;while(1){if((N|0)>=(s|0)){break}if((a[j+((c[r>>2]|0)+N|0)|0]|0)==(a[N+148464|0]|0)){N=N+1|0}else{break L1185}}if((N|0)!=1){break}r=d+1|0;s=(a[O+(r*40&-1)|0]&1)==0;if(!s){p=a[j+(c[O+(r*40&-1)+32>>2]|0)|0]|0;if((p<<24>>24|0)==39|(p<<24>>24|0)==34){break}}p=c[10810]|0;L1196:do{if((p|0)==0){R=O+(r*40&-1)+36|0;S=O+(r*40&-1)+32|0}else{K=O+(r*40&-1)+36|0;k=O+(r*40&-1)+32|0;l=p;L1199:while(1){q=c[l+4>>2]|0;L1201:do{if(!((g|0)<=(r|0)|s)){D=c[K>>2]|0;w=0;while(1){if((w|0)>=(D|0)){break}if((a[j+((c[k>>2]|0)+w|0)|0]|0)==(a[q+w|0]|0)){w=w+1|0}else{break L1201}}if((a[q+w|0]|0)==0){break L1199}}}while(0);q=c[l>>2]|0;if((q|0)==0){R=K;S=k;break L1196}else{l=q}}if((a[l+8|0]&1)!=0){R=K;S=k;break}if((c[l+16>>2]|0)==3){break L1185}else{R=K;S=k}}}while(0);p=c[R>>2]|0;O=c[S>>2]|0;L1211:do{if((p|0)>0&(s^1)){N=0;q=0;D=O;while(1){if((a[N+205224|0]|0)==(a[j+(N+D|0)|0]|0)){T=D;U=q}else{if((N|0)!=7){break}T=D-1|0;U=1}z=N+1|0;if((z|0)<(U+p|0)){N=z;q=U;D=T}else{x=899;break}}if((x|0)==899){if((U|0)!=0){break L1185}if((N|0)==6|(N|0)==12){break L1185}}if((p|0)>0&(s^1)){V=0}else{break}do{if((a[V+217064|0]|0)!=(a[j+(V+O|0)|0]|0)){break L1211}V=V+1|0;}while((V|0)<(p|0));if((V|0)==3){break L1185}}}while(0);c[13898]=r;dm(o,n);c[b+8>>2]=c[o>>2];p=c[n>>2]|0;L1227:do{if((p|0)>-1){if((c[64808+(p*688&-1)>>2]|0)!=1){break}O=c[13898]|0;j=c[1054]|0;s=(a[j+(O*40&-1)|0]&1)==0;if(s){x=909}else{N=c[10036]|0;D=a[N+(c[j+(O*40&-1)+32>>2]|0)|0]|0;if((D<<24>>24|0)==39|(D<<24>>24|0)==34){W=N}else{x=909}}if((x|0)==909){N=c[10810]|0;if((N|0)==0){break}D=c[8272]|0;q=j+(O*40&-1)+36|0;k=j+(O*40&-1)+32|0;K=c[10036]|0;l=N;L1235:while(1){N=c[l+4>>2]|0;L1237:do{if(!((D|0)<=(O|0)|s)){z=c[q>>2]|0;H=0;while(1){if((H|0)>=(z|0)){break}if((a[K+((c[k>>2]|0)+H|0)|0]|0)==(a[N+H|0]|0)){H=H+1|0}else{break L1237}}if((a[N+H|0]|0)==0){break L1235}}}while(0);N=c[l>>2]|0;if((N|0)==0){break L1227}else{l=N}}if((a[l+8|0]&1)!=0){break}if((c[l+16>>2]|0)==3){W=K}else{break}}L1247:do{if((O|0)<(c[8272]|0)){L1249:do{if(!s){k=c[j+(O*40&-1)+36>>2]|0;q=j+(O*40&-1)+32|0;D=0;while(1){if((D|0)>=(k|0)){break}if((a[W+((c[q>>2]|0)+D|0)|0]|0)==(a[D+103664|0]|0)){D=D+1|0}else{break L1249}}if((D|0)==1){X=0;break L1247}}}while(0);a[14176]=1;is(f);a[14176]=0;if((c[f>>2]|0)==3){X=c[f+8>>2]|0;break}else{c[13898]=O;X=0;break}}else{X=0}}while(0);if((t1(X,64813,t,u)|0)!=0){Q=+t2(t);h[b+32>>3]=Q+ +h[u>>3]}uu(X);i=e;return}}while(0);p=is(m)|0;r=c[p>>2]|0;if((r|0)==1){Y=+(c[p+8>>2]|0)}else if((r|0)==2){Y=+h[p+8>>3]}else if((r|0)==3){Y=+uz(c[p+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}p=m|0;if((c[p>>2]|0)==3){uu(c[m+8>>2]|0);c[p>>2]=1}h[b+32>>3]=Y;i=e;return}}while(0);h[b+32>>3]=0.0;c[b+8>>2]=P;i=e;return}function dm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;e=c[13898]|0;f=c[1054]|0;g=c[f+(e*40&-1)+36>>2]|0;h=c[f+(e*40&-1)+32>>2]|0;i=(a[f+(e*40&-1)|0]&1)==0;L1278:do{if((g|0)>0&(i^1)){f=c[10036]|0;j=0;k=0;l=h;while(1){if((a[j+101440|0]|0)==(a[f+(j+l|0)|0]|0)){m=l;n=k}else{if((j|0)!=3){break}m=l-1|0;n=1}o=j+1|0;if((o|0)<(n+g|0)){j=o;k=n;l=m}else{p=950;break}}do{if((p|0)==950){if((n|0)==0){if(!((j|0)==5|(j|0)==2)){break}}c[13898]=e+1;c[b>>2]=0;p=990;break L1278}}while(0);if(!((g|0)>0&(i^1))){p=989;break}j=c[10036]|0;l=0;k=0;f=h;while(1){if((a[l+100944|0]|0)==(a[j+(l+f|0)|0]|0)){q=f;r=k}else{if((l|0)!=3){break}q=f-1|0;r=1}o=l+1|0;if((o|0)<(r+g|0)){l=o;k=r;f=q}else{p=959;break}}do{if((p|0)==959){if((r|0)==0){if(!((l|0)==6|(l|0)==2)){break}}c[13898]=e+1;c[b>>2]=1;p=991;break L1278}}while(0);if(!((g|0)>0&(i^1))){p=989;break}l=c[10036]|0;f=0;k=0;j=h;while(1){if((a[f+148408|0]|0)==(a[l+(f+j|0)|0]|0)){s=j;t=k}else{if((f|0)!=2){break}s=j-1|0;t=1}o=f+1|0;if((o|0)<(t+g|0)){f=o;k=t;j=s}else{p=968;break}}do{if((p|0)==968){if((t|0)==0){if(!((f|0)==5|(f|0)==1)){break}}c[13898]=e+1;c[b>>2]=2;p=992;break L1278}}while(0);if(!((g|0)>0&(i^1))){p=989;break}f=c[10036]|0;j=0;k=0;l=h;while(1){if((a[j+142056|0]|0)==(a[f+(j+l|0)|0]|0)){u=l;v=k}else{if((j|0)!=2){break}u=l-1|0;v=1}o=j+1|0;if((o|0)<(v+g|0)){j=o;k=v;l=u}else{p=977;break}}do{if((p|0)==977){if((v|0)==0){if(!((j|0)==6|(j|0)==1)){break}}c[13898]=e+1;c[b>>2]=3;p=992;break L1278}}while(0);if(!((g|0)>0&(i^1))){p=989;break}j=c[10036]|0;l=0;k=0;f=h;while(1){if((a[l+99320|0]|0)==(a[j+(l+f|0)|0]|0)){w=f;x=k}else{if((l|0)!=4){p=989;break L1278}w=f-1|0;x=1}o=l+1|0;if((o|0)<(x+g|0)){l=o;k=x;f=w}else{break}}if((x|0)==0){if(!((l|0)==3|(l|0)==9)){p=989;break}}c[13898]=e+1;c[b>>2]=4;p=992}else{p=989}}while(0);if((p|0)==989){e=c[b>>2]|0;if((e|0)==0){p=990}else if((e|0)==1){p=991}else{p=992}}if((p|0)==992){c[d>>2]=-1;return}else if((p|0)==990){c[d>>2]=0;return}else if((p|0)==991){c[d>>2]=4;return}}function dn(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;b=c[8272]|0;d=c[13898]|0;L1352:while(1){e=d+1|0;c[13898]=e;L1354:do{if((b|0)>(d|0)){f=c[1054]|0;if((a[f+(d*40&-1)|0]&1)==0){g=1004;break}h=c[f+(d*40&-1)+36>>2]|0;i=f+(d*40&-1)+32|0;f=c[10036]|0;j=0;while(1){if((j|0)>=(h|0)){break}if((a[f+((c[i>>2]|0)+j|0)|0]|0)==(a[j+78864|0]|0)){j=j+1|0}else{g=1004;break L1354}}if(!((j|0)!=1&(e|0)<(b|0))){g=1011;break L1352}}else{g=1004}}while(0);if((g|0)==1004){g=0;if((e|0)>=(b|0)){g=1012;break}}i=c[1054]|0;if((a[i+(e*40&-1)|0]&1)==0){d=e;continue}f=c[i+(e*40&-1)+36>>2]|0;h=i+(e*40&-1)+32|0;i=c[10036]|0;k=0;while(1){if((k|0)>=(f|0)){break}if((a[i+((c[h>>2]|0)+k|0)|0]|0)==(a[k+103664|0]|0)){k=k+1|0}else{d=e;continue L1352}}if((k|0)==1){g=1013;break}else{d=e}}if((g|0)==1013){return}else if((g|0)==1011){return}else if((g|0)==1012){return}}function dp(b,d,e,f){b=b|0;d=d|0;e=+e;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0;g=i;i=i+24|0;j=g|0;k=(d|0)!=0;if((f|0)<0&(k^1)){i=g;return}if((a[64976+(b*688&-1)|0]&1)==0){c[64920+(b*688&-1)>>2]=3}l=64944+(b*688&-1)|0;b=c[l>>2]|0;m=j+16|0;c[m>>2]=b;h[j>>3]=-1.7976931348623157e+308;n=j;j=b;while(1){o=n+16|0;if((j|0)==0){p=1022;break}q=+h[j>>3];if(q>=e){p=1021;break}n=j;j=c[j+16>>2]|0}do{if((p|0)==1021){if(q>e){p=1022;break}if(q!=e){uh(-1,105096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);r=c[o>>2]|0}else{r=j}if((c[r+12>>2]|0)<(f|0)){i=g;return}n=r+8|0;b=c[n>>2]|0;if((b|0)==0){s=r;break}uu(b);c[n>>2]=0;s=r}}while(0);if((p|0)==1022){p=ut(24)|0;if((p|0)==0){gk();t=ut(24)|0}else{t=p}p=t;h[t>>3]=e;c[t+12>>2]=f;c[t+16>>2]=c[o>>2];c[o>>2]=p;s=p}if(k){c[s+8>>2]=bP(d|0)|0}else{c[s+8>>2]=0}c[l>>2]=c[m>>2];i=g;return}function dq(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;e=c[13898]|0;if((c[8272]|0)<=(e|0)){i=d;return}f=c[1054]|0;if((a[f+(e*40&-1)|0]&1)==0){i=d;return}g=c[f+(e*40&-1)+36>>2]|0;h=f+(e*40&-1)+32|0;f=c[10036]|0;j=0;while(1){if((j|0)>=(g|0)){break}if((a[f+((c[h>>2]|0)+j|0)|0]|0)==(a[j+78280|0]|0)){j=j+1|0}else{k=1056;break}}if((k|0)==1056){i=d;return}if((j|0)!=1){i=d;return}c[13898]=e+1;e=64648+(b*688&-1)|0;c[e>>2]=dj(b,64664+(b*688&-1)|0,64672+(b*688&-1)|0,c[e>>2]|0)|0;e=c[13898]|0;L1421:do{if((c[8272]|0)>(e|0)){b=c[1054]|0;if((a[b+(e*40&-1)|0]&1)==0){break}j=c[b+(e*40&-1)+36>>2]|0;k=b+(e*40&-1)+32|0;b=c[10036]|0;h=0;while(1){if((h|0)>=(j|0)){break}if((a[b+((c[k>>2]|0)+h|0)|0]|0)==(a[h+78864|0]|0)){h=h+1|0}else{break L1421}}if((h|0)!=1){break}c[13898]=e+1;i=d;return}}while(0);uf(e,101328,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}function dr(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;f=i;g=c[13898]|0;if((c[8272]|0)<=(g|0)){h=e;i=f;return h|0}j=c[1054]|0;if((a[j+(g*40&-1)|0]&1)==0){h=e;i=f;return h|0}k=c[j+(g*40&-1)+36>>2]|0;l=j+(g*40&-1)+32|0;m=c[10036]|0;n=0;while(1){if((n|0)>=(k|0)){break}if((a[m+((c[l>>2]|0)+n|0)|0]|0)==(a[n+78280|0]|0)){n=n+1|0}else{h=e;o=1085;break}}if((o|0)==1085){i=f;return h|0}if((n|0)!=1){h=e;i=f;return h|0}n=g+1|0;c[13898]=n;L1447:do{if((a[j+(n*40&-1)|0]&1)==0){p=e}else{if((bO(d[m+(c[j+(n*40&-1)+32>>2]|0)|0]|0|0)|0)==0){if((a[(c[10036]|0)+(c[(c[1054]|0)+(n*40&-1)+32>>2]|0)|0]|0)!=95){p=e;break}}g=c[13898]|0;l=g+1|0;if((c[8272]|0)<=(l|0)){p=e;break}k=c[1054]|0;if((a[k+(l*40&-1)|0]&1)==0){p=e;break}q=c[k+(l*40&-1)+36>>2]|0;r=k+(l*40&-1)+32|0;l=c[10036]|0;k=0;while(1){if((k|0)>=(q|0)){break}if((a[l+((c[r>>2]|0)+k|0)|0]|0)==(a[k+115e3|0]|0)){k=k+1|0}else{p=e;break L1447}}if((k|0)!=1){p=e;break}c[13898]=g+2;p=g}}while(0);e=64648+(b*688&-1)|0;c[e>>2]=dj(b,64664+(b*688&-1)|0,64672+(b*688&-1)|0,c[e>>2]|0)|0;e=c[13898]|0;if((c[8272]|0)<=(e|0)){uf(e,101328,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}b=c[1054]|0;if((a[b+(e*40&-1)|0]&1)==0){uf(e,101328,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}n=c[b+(e*40&-1)+36>>2]|0;j=b+(e*40&-1)+32|0;b=c[10036]|0;m=0;while(1){if((m|0)>=(n|0)){break}if((a[b+((c[j>>2]|0)+m|0)|0]|0)==(a[m+78864|0]|0)){m=m+1|0}else{o=1089;break}}if((o|0)==1089){uf(e,101328,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}if((m|0)!=1){uf(e,101328,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}c[13898]=e+1;h=p;i=f;return h|0}function ds(){var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0;d=i;e=hA(c[11932]|0,78360)|0;if((e|0)==0){uj(-1,146640,(v=i,i=i+8|0,c[v>>2]=c[11932],v)|0)}else{f=0;g=0}L1479:while(1){if((g|0)!=0){if((a_(f+(g-2|0)|0,86144,2)|0)==0){j=1104;break}}k=g+512|0;l=g+513|0;do{if((f|0)==0){m=ut(l)|0;if((m|0)!=0){n=m;break}gk();m=ut(l)|0;if((m|0)==0){j=1099;break L1479}else{n=m}}else{n=db(f,l,127720)|0}}while(0);l=n+g|0;a[l]=0;if((cd(l|0,512,1,e|0)|0)==0){j=1102;break}a[n+k|0]=0;f=n;g=k}if((j|0)==1099){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=127720,v)|0)}else if((j|0)==1102){uu(n);uj(-1,113448,(v=i,i=i+8|0,c[v>>2]=c[11932],v)|0)}else if((j|0)==1104){az(e|0);e=c[11864]|0;do{if((e|0)<1){n=1-e|0;do{if((c[11880]|0)<1){l=db(c[12172]|0,232,216568)|0;c[12172]=l;if((l|0)==0){c[11880]=0;uf(c[13898]|0,216112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{c[11880]=1;break}}}while(0);if((n|0)<=0){break}k=c[12172]|0;l=0;m=c[11864]|0;do{uD(k+(m*232&-1)|0,48440,232);m=(c[11864]|0)+1|0;c[11864]=m;l=l+1|0;}while((l|0)<(n|0))}}while(0);e=aQ(f|0,100248)|0;L1506:do{if((e|0)==0){j=1122}else{n=a8(e+18|0,61)|0;do{n=n+1|0;}while((aM(a[n]|0|0)|0)!=0);if((n|0)==0){j=1122;break}l=bk(n|0,95048)|0;m=db(c[11932]|0,l+1|0,88488)|0;c[11932]=m;uF(m|0,n|0,l|0);a[(c[11932]|0)+l|0]=0;l=aQ(f|0,78632)|0;do{if((l|0)!=0){m=a8(l+22|0,61)|0;do{m=m+1|0;}while((aM(a[m]|0|0)|0)!=0);if((m|0)==0){break}k=bW(m|0)|0;c[(c[12172]|0)+128>>2]=k;break L1506}}while(0);c[(c[12172]|0)+128>>2]=0}}while(0);if((j|0)==1122){c[(c[12172]|0)+128>>2]=g}c[(c[12172]|0)+152>>2]=1;c[(c[12172]|0)+156>>2]=-1;a[(c[12172]|0)+124|0]=1;c[(c[12172]|0)+112>>2]=-3;c[(c[12172]|0)+116>>2]=-4;eQ(1);g=c[11950]|0;if((c[11884]|0)<1){j=db(g,12,215112)|0;c[11950]=j;c[11884]=1;o=j}else{o=g}c[o>>2]=0;o=c[11950]|0;if((c[11884]|0)<2){g=db(o,24,215112)|0;c[11950]=g;c[11884]=2;p=g}else{p=o}c[p+12>>2]=0;c[11870]=1;c[262]=1;p=aQ(f|0,73608)|0;do{if((p|0)!=0){o=a8(p+5|0,61)|0;do{o=o+1|0;}while((aM(a[o]|0|0)|0)!=0);if((o|0)==0){break}g=bW(o|0)|0;c[(c[12172]|0)+140>>2]=g}}while(0);p=aQ(f|0,218896)|0;do{if((p|0)!=0){g=a8(p+5|0,61)|0;do{g=g+1|0;}while((aM(a[g]|0|0)|0)!=0);if((g|0)==0){break}o=bW(g|0)|0;c[(c[12172]|0)+144>>2]=o}}while(0);p=aQ(f|0,213352)|0;L1542:do{if((p|0)!=0){o=a8(p+8|0,61)|0;do{o=o+1|0;}while((aM(a[o]|0|0)|0)!=0);if((o|0)==0){break}else{q=-1}while(1){r=q+1|0;g=c[46440+(r*12&-1)>>2]|0;if((r|0)==12){break L1542}if((a_(o|0,g|0,uA(g|0)|0)|0)==0){break}else{q=r}}if((r|0)<=-1){break}o=b[46448+(r*12&-1)>>1]|0;if((o|0)==1){g=1328>>>(r>>>0);do{if((g&1|0)==0){j=2752>>>(r>>>0);if(((j|g)&1|0)!=0){s=(j&1|0)!=0?11:5;break}if((q-1|0)>>>0<2){s=3;break}s=r>>>0<2?1:12}else{s=7}}while(0);g=c[11950]|0;if((c[11884]|0)<1){j=db(g,12,215112)|0;c[11950]=j;c[11884]=1;t=j}else{t=g}c[t+4>>2]=s;b[(c[11950]|0)+8>>1]=b[48036+(s<<4)>>1]|0;break}else if((o|0)==2){if((1328>>>(r>>>0)&1|0)==0){u=(2752>>>(r>>>0)&1|0)!=0?9:12}else{u=8}g=c[11950]|0;if((c[11884]|0)<1){j=db(g,12,215112)|0;c[11950]=j;c[11884]=1;w=j}else{w=g}c[w+4>>2]=u;b[(c[11950]|0)+8>>1]=b[48036+(u<<4)>>1]|0;break}else if((o|0)==0){g=1328>>>(r>>>0);do{if((g&1|0)==0){j=2752>>>(r>>>0);if(((j|g)&1|0)!=0){x=(j&1|0)!=0?10:4;break}if((q-1|0)>>>0<2){x=2;break}x=r>>>0<2?0:12}else{x=6}}while(0);g=c[11950]|0;if((c[11884]|0)<1){o=db(g,12,215112)|0;c[11950]=o;c[11884]=1;y=o}else{y=g}c[y+4>>2]=x;b[(c[11950]|0)+8>>1]=b[48036+(x<<4)>>1]|0;break}else{break}}}while(0);x=aQ(f|0,207688)|0;L1579:do{if((x|0)!=0){y=a8(x+9|0,61)|0;do{y=y+1|0;}while((aM(a[y]|0|0)|0)!=0);if((y|0)==0){break}do{if((aY(y|0,149792)|0)==0){z=0}else{r=(a_(y|0,149792,12)|0)!=0;if((aY(y|0,147968)|0)==0){z=1;break}q=(a_(y|0,147968,13)|0)==0&r?1:r<<31>>31;if((q|0)>-1){z=q}else{break L1579}}}while(0);c[12208]=c[46604+(z<<3)>>2]}}while(0);z=aQ(f|0,203264)|0;do{if((z|0)!=0){x=a8(z+8|0,61)|0;do{x=x+1|0;}while((aM(a[x]|0|0)|0)!=0);if((x|0)==0){break}A=+uz(x,0);y=c[12172]|0;h[y+200>>3]=A;c[y+192>>2]=1}}while(0);z=aQ(f|0,198216)|0;do{if((z|0)!=0){y=a8(z+8|0,61)|0;do{y=y+1|0;}while((aM(a[y]|0|0)|0)!=0);if((y|0)==0){break}A=+uz(y,0);x=c[12172]|0;h[x+208>>3]=A;c[x+192>>2]=1}}while(0);z=aQ(f|0,186936)|0;do{if((z|0)!=0){x=a8(z+8|0,61)|0;do{x=x+1|0;}while((aM(a[x]|0|0)|0)!=0);if((x|0)==0){break}A=+uz(x,0);y=c[12172]|0;h[y+200>>3]=A;c[y+192>>2]=2}}while(0);z=aQ(f|0,181632)|0;do{if((z|0)!=0){y=a8(z+8|0,61)|0;do{y=y+1|0;}while((aM(a[y]|0|0)|0)!=0);if((y|0)==0){break}A=+uz(y,0);x=c[12172]|0;h[x+208>>3]=A;c[x+192>>2]=2}}while(0);z=aQ(f|0,177440)|0;do{if((z|0)!=0){x=a8(z+7|0,61)|0;do{x=x+1|0;}while((aM(a[x]|0|0)|0)!=0);if((x|0)==0){break}A=+uz(x,0);h[(c[12172]|0)+168>>3]=A}}while(0);z=aQ(f|0,172936)|0;do{if((z|0)!=0){y=a8(z+7|0,61)|0;do{y=y+1|0;}while((aM(a[y]|0|0)|0)!=0);if((y|0)==0){break}A=+uz(y,0);h[(c[12172]|0)+176>>3]=A}}while(0);z=aQ(f|0,169160)|0;if((z|0)==0){uu(f);i=d;return}x=a8(z+10|0,61)|0;do{x=x+1|0;}while((aM(a[x]|0|0)|0)!=0);if((x|0)==0){uu(f);i=d;return}do{if((aY(x|0,155800)|0)==0){c[(c[12172]|0)+152>>2]=1;B=(c[12172]|0)+156|0}else{if((aY(x|0,151720)|0)==0){c[(c[12172]|0)+152>>2]=1;C=(c[12172]|0)+156|0}else{z=(a_(x|0,155800,11)|0)!=0;q=(a_(x|0,151720,9)|0)==0&z;c[(c[12172]|0)+152>>2]=1;z=(c[12172]|0)+156|0;if(q){C=z}else{B=z;break}}c[C>>2]=1;c[(c[12172]|0)+112>>2]=-3;c[(c[12172]|0)+116>>2]=-4;uu(f);i=d;return}}while(0);c[B>>2]=-1;c[(c[12172]|0)+112>>2]=-3;c[(c[12172]|0)+116>>2]=-4;uu(f);i=d;return}}function dt(){du(0)}function du(a){a=a|0;uf(-1,164848,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}function dv(){du(0)}function dw(){du(0)}function dx(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0.0,l=0;d=i;i=i+16|0;e=d|0;f=c[12372]|0;if((f|0)==2|(f|0)==5){g=(c[12374]<<4&65520)+f|0;j=1226}else if((f|0)==1|(f|0)==4){g=(c[12373]<<4&65520)+f|0;j=1226}else if((f|0)==0){c[b+8>>2]=1601}else{g=0;j=1226}if((j|0)==1226){c[b+8>>2]=g}cN[c[(c[3524]|0)+148>>2]&255](4,b);if((c[7661]|0)==0){i=d;return}g=e;c[g>>2]=c[7654];c[g+4>>2]=c[30620>>2];c[g+8>>2]=c[30624>>2];c[g+12>>2]=c[30628>>2];g=c[7645]|0;do{if((c[7644]|0)!=0){k=+h[3825];f=c[(c[3524]|0)+92>>2]|0;if(k<0.0){cK[f&63](+h[3817]);break}else{cK[f&63](k);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[3824]);f=c[(c[3524]|0)+64>>2]|0;if((g|0)<-5){cM[f&511](-2)}else{cM[f&511](g)}f=c[3524]|0;do{if((a[30608]&1)==0){if((c[f+96>>2]&1024|0)!=0){l=f;break}c[e>>2]=1;c[e+4>>2]=g;j=1238}else{j=1238}}while(0);if((j|0)==1238){fn(e,f);l=c[3524]|0}f=b|0;e=b+4|0;cN[c[l+56>>2]&255](c[f>>2]|0,c[e>>2]|0);cN[c[(c[3524]|0)+60>>2]&255](c[b+36>>2]|0,c[b+40>>2]|0);cN[c[(c[3524]|0)+60>>2]&255](c[b+24>>2]|0,c[b+28>>2]|0);cN[c[(c[3524]|0)+60>>2]&255](c[b+12>>2]|0,c[b+16>>2]|0);cN[c[(c[3524]|0)+60>>2]&255](c[f>>2]|0,c[e>>2]|0);i=d;return}function dy(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,g=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0,D=0.0,E=0,F=0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0;b=i;i=i+48|0;d=b|0;e=+h[64664+((c[200]|0)*688&-1)>>3];f=+h[91];g=+h[96];j=+h[64664+((c[144]|0)*688&-1)>>3];k=+h[21];l=+h[68];m=+h[5279];n=+h[2];o=+h[12];p=+h[403];q=+h[391];r=+h[395];s=+h[399];t=+h[404];u=+h[392];v=+h[396];w=+h[400];x=+h[406];y=+h[394];z=+h[398];A=+h[402];B=+(c[180]|0);C=c[186]|0;D=+(c[40]|0);E=c[46]|0;F=0;do{G=(+h[a+(F<<5)>>3]-e)*f+g+-1.0;H=(+h[a+(F<<5)+8>>3]-j)*k+l+-1.0;I=(+h[a+(F<<5)+16>>3]-m)*n+o+-1.0;J=x+G*y+H*z+I*A;K=J==0.0?1.0e-5:J;c[d+(F*12&-1)>>2]=~~((p+G*q+H*r+I*s)/K*B)+C;c[d+(F*12&-1)+4>>2]=~~((t+G*u+H*v+I*w)/K*D)+E;F=F+1|0;}while((F|0)<4);dx(d|0);i=b;return}function dz(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;b=i;d=c[(c[3524]|0)+136>>2]|0;if((d|0)==0){e=1;i=b;return e|0}f=cO[d&255](0)|0;c[5169]=f;if((f|0)==0){if((uG(29056,20648,1024)|0)==0){e=0;i=b;return e|0}d=c[(c[3524]|0)+136>>2]|0;cO[d&255](20648);uD(29056,20648,1024);e=0;i=b;return e|0}d=c[5168]|0;do{if((d|0)>0){if((c[5163]|0)==100){c[5169]=f;g=f;break}if((f|0)<=(d|0)){g=f;break}c[5169]=d;g=d}else{g=f}}while(0);d=c[7264]|0;do{if((d|0)>-1&(c[5162]|0)==(d|0)){if((c[5163]|0)!=(c[7265]|0)){h=1261;break}if((c[5164]|0)!=(c[7266]|0)){h=1261;break}if((c[5165]|0)!=(c[7267]|0)){h=1261;break}if((c[5166]|0)!=(c[7268]|0)){h=1261;break}if(!((a[20668]|0)==(a[29076]|0)&(g|0)==(c[7271]|0))){h=1261}}else{h=1261}}while(0);do{if((h|0)==1261){if((a[37400]&1)==0){break}d=c[m>>2]|0;j=c[c[3524]>>2]|0;cf(d|0,218032,(v=i,i=i+24|0,c[v>>2]=j,c[v+8>>2]=g,c[v+16>>2]=f,v)|0)}}while(0);uD(29056,20648,1024);f=c[5170]|0;if((f|0)!=0){uu(f);c[5170]=0}f=(c[5169]|0)*24&-1;g=ut(f)|0;do{if((g|0)==0){gk();h=ut(f)|0;if((h|0)!=0){k=h;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=217512,v)|0);return 0}else{k=g}}while(0);g=k;c[5170]=g;k=c[5169]|0;L1722:do{if((k|0)>0){f=0;h=k;j=g;while(1){fq(+(f|0)/+(h-1|0),j+(f*24&-1)|0);d=f+1|0;l=c[5169]|0;if((d|0)>=(l|0)){break L1722}f=d;h=l;j=c[5170]|0}}}while(0);cO[c[(c[3524]|0)+136>>2]&255](20648);e=0;i=b;return e|0}function dA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0;d=i;e=a*12&-1;f=ut(e)|0;do{if((f|0)==0){gk();g=ut(e)|0;if((g|0)!=0){j=g;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=164072,v)|0)}else{j=f}}while(0);f=j;if((a|0)>0){e=0;do{k=(+h[b+(e<<6)+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;l=(+h[b+(e<<6)+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;m=(+h[b+(e<<6)+24>>3]- +h[5279])*+h[2]+ +h[12]+-1.0;n=+h[406]+k*+h[394]+l*+h[398]+m*+h[402];o=n==0.0?1.0e-5:n;g=~~((+h[404]+k*+h[392]+l*+h[396]+m*+h[400])/o*+(c[40]|0))+(c[46]|0)|0;c[f+(e*12&-1)>>2]=~~((+h[403]+k*+h[391]+l*+h[395]+m*+h[399])/o*+(c[180]|0))+(c[186]|0);c[f+(e*12&-1)+4>>2]=g;e=e+1|0;}while((e|0)<(a|0))}e=c[12372]|0;if((e|0)==1|(e|0)==4){p=(c[12373]<<4&65520)+e|0}else if((e|0)==2|(e|0)==5){p=(c[12374]<<4&65520)+e|0}else if((e|0)==0){c[j+8>>2]=1601;q=c[3524]|0;r=q+148|0;s=c[r>>2]|0;cN[s&255](a,f);uu(j);i=d;return}else{p=0}c[j+8>>2]=p;q=c[3524]|0;r=q+148|0;s=c[r>>2]|0;cN[s&255](a,f);uu(j);i=d;return}function dB(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0,j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0;e=i;f=a*12&-1;g=ut(f)|0;do{if((g|0)==0){gk();j=ut(f)|0;if((j|0)!=0){k=j;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=136792,v)|0)}else{k=g}}while(0);g=k;if((a|0)>0){f=0;do{l=(+h[b+(f<<6)+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;m=(+h[b+(f<<6)+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;n=(d- +h[5279])*+h[2]+ +h[12]+-1.0;o=+h[406]+l*+h[394]+m*+h[398]+n*+h[402];p=o==0.0?1.0e-5:o;j=~~((+h[404]+l*+h[392]+m*+h[396]+n*+h[400])/p*+(c[40]|0))+(c[46]|0)|0;c[g+(f*12&-1)>>2]=~~((+h[403]+l*+h[391]+m*+h[395]+n*+h[399])/p*+(c[180]|0))+(c[186]|0);c[g+(f*12&-1)+4>>2]=j;f=f+1|0;}while((f|0)<(a|0))}f=c[12372]|0;if((f|0)==0){c[k+8>>2]=1601;q=c[3524]|0;r=q+148|0;s=c[r>>2]|0;cN[s&255](a,g);uu(k);i=e;return}else if((f|0)==1|(f|0)==4){t=(c[12373]<<4&65520)+f|0}else if((f|0)==2|(f|0)==5){t=(c[12374]<<4&65520)+f|0}else{t=0}c[k+8>>2]=t;q=c[3524]|0;r=q+148|0;s=c[r>>2]|0;cN[s&255](a,g);uu(k);i=e;return}function dC(b,d,e,f,g){b=b|0;d=+d;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;j=i;i=i+64|0;k=f;f=i;i=i+56|0;uD(f,k,56);k=j|0;l=j+16|0;m=j+32|0;n=j+48|0;o=j+56|0;p=(e|0)!=0;q=c[3524]|0;r=~~(+((c[q+28>>2]|0)>>>0>>>0)*(p?+h[8390]:+h[8391])*((a[67136]&1)!=0?-1.0:1.0));s=+h[8341];t=(d-s)/(+h[8342]-s);if((a[54017]|0)==104){u=c[13528]|0;v=~~(+(u|0)+t*+((c[13529]|0)-u|0));u=c[13530]|0;w=u-r|0;x=v;y=u;z=v}else{v=c[13529]|0;u=c[13530]|0;A=~~(+(u|0)+t*+((c[13531]|0)-u|0));w=A;x=v+r|0;y=A;z=v}v=c[f+4>>2]|0;do{if((v|0)>-3){A=m;u=f+40|0;c[A>>2]=c[u>>2];c[A+4>>2]=c[u+4>>2];c[A+8>>2]=c[u+8>>2];c[A+12>>2]=c[u+12>>2];do{if((c[f>>2]|0)!=0){t=+h[f+24>>3];u=c[q+92>>2]|0;if(t<0.0){cK[u&63](+h[3817]);break}else{cK[u&63](t);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[f+16>>3]);u=c[(c[3524]|0)+64>>2]|0;if((v|0)<-5){cM[u&511](-2)}else{cM[u&511](v)}u=c[3524]|0;do{if((a[f+32|0]&1)==0){if((c[u+96>>2]&1024|0)!=0){B=u;break}c[m>>2]=1;c[m+4>>2]=v;C=1317}else{C=1317}}while(0);if((C|0)==1317){fn(m,u);B=c[3524]|0}A=c[B+56>>2]|0;if((a[54017]|0)==104){cN[A&255](z,c[13530]|0);cN[c[(c[3524]|0)+60>>2]&255](z,c[13531]|0)}else{cN[A&255](c[13528]|0,y);cN[c[(c[3524]|0)+60>>2]&255](c[13529]|0,y)}A=l;c[A>>2]=c[14084];c[A+4>>2]=c[56340>>2];c[A+8>>2]=c[56344>>2];c[A+12>>2]=c[56348>>2];A=c[14075]|0;do{if((c[14074]|0)!=0){t=+h[7040];D=c[(c[3524]|0)+92>>2]|0;if(t<0.0){cK[D&63](+h[3817]);break}else{cK[D&63](t);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[7039]);u=c[(c[3524]|0)+64>>2]|0;if((A|0)<-5){cM[u&511](-2)}else{cM[u&511](A)}u=c[3524]|0;if((a[56328]&1)==0){if((c[u+96>>2]&1024|0)!=0){E=u;break}c[l>>2]=1;c[l+4>>2]=A}fn(l,u);E=c[3524]|0}else{E=q}}while(0);cN[c[E+56>>2]&255](z,y);cN[c[(c[3524]|0)+60>>2]&255](x,w);do{if(p){L1804:do{if((g|0)==0){F=e}else{t=+h[8342]- +h[8341];E=g;while(1){if(+P(+((d- +h[E>>3])/t))<=.001){F=0;break L1804}q=c[E+16>>2]|0;if((q|0)==0){F=e;break}else{E=q}}}}while(0);fx(64984+(b*688&-1)|0,n,o,123416);A=64928+(b*688&-1)|0;if((c[A>>2]|0)!=0){fn(A,c[3524]|0)}do{if((a[54017]|0)==104){A=c[3524]|0;E=(c[13530]|0)-(c[A+16>>2]|0)|0;q=65032+(b*688&-1)|0;l=c[q>>2]|0;do{if((l|0)==0){G=0}else{if((cO[c[A+72>>2]&255](l)|0)==0){G=0;break}G=c[q>>2]|0}}while(0);q=E+((r|0)>0?-r|0:0)|0;l=(G|0)!=0;if((a[65272+(b*688&-1)|0]&1)==0){H=l&1^1}else{H=c[65128+(b*688&-1)>>2]|0}ln((c[n>>2]|0)+x|0,(c[o>>2]|0)+((q|0)<0?0:q)|0,F,H,1,G,c[64924+(b*688&-1)>>2]|0);if(!l){break}l=c[(c[3524]|0)+72>>2]|0;cO[l&255](0)}else{if((a[65272+(b*688&-1)|0]&1)==0){I=0}else{I=c[65128+(b*688&-1)>>2]|0}ln((((c[13529]|0)+((r|0)>0?r:0)|0)+(c[(c[3524]|0)+20>>2]|0)|0)+(c[n>>2]|0)|0,(c[o>>2]|0)+w|0,F,I,1,0,c[64924+(b*688&-1)>>2]|0)}}while(0);l=k;c[l>>2]=c[14084];c[l+4>>2]=c[56340>>2];c[l+8>>2]=c[56344>>2];c[l+12>>2]=c[56348>>2];l=c[14075]|0;do{if((c[14074]|0)!=0){t=+h[7040];q=c[(c[3524]|0)+92>>2]|0;if(t<0.0){cK[q&63](+h[3817]);break}else{cK[q&63](t);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[7039]);q=c[(c[3524]|0)+64>>2]|0;if((l|0)<-5){cM[q&511](-2)}else{cM[q&511](l)}q=c[3524]|0;if((a[56328]&1)==0){if((c[q+96>>2]&1024|0)!=0){break}c[k>>2]=1;c[k+4>>2]=l}fn(k,q)}}while(0);if((c[16745]&4|0)==0){i=j;return}if((a[54017]|0)==104){k=c[13531]|0;J=k+r|0;K=x;L=k;M=z}else{z=c[13528]|0;J=w;K=z-r|0;L=y;M=z}cN[c[(c[3524]|0)+56>>2]&255](M,L);cN[c[(c[3524]|0)+60>>2]&255](K,J);i=j;return}function dD(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ab=0.0,ac=0.0,ad=0.0,ae=0.0,af=0.0,ag=0.0,ah=0.0,ai=0.0,aj=0.0,ak=0.0,al=0.0,am=0.0,an=0.0,ao=0.0,ap=0.0,aq=0.0,ar=0.0,as=0.0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aJ=0,aK=0.0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0.0,aW=0.0,aX=0,aY=0,aZ=0,a_=0.0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0;d=i;i=i+304|0;e=d|0;f=d+16|0;g=d+32|0;j=d+48|0;k=d+64|0;l=d+80|0;m=d+128|0;n=d+136|0;o=d+144|0;p=d+152|0;q=d+160|0;r=d+168|0;s=d+176|0;t=d+184|0;u=d+192|0;w=d+232|0;x=d+272|0;y=d+280|0;z=d+288|0;A=d+296|0;B=c[10028]|0;C=a[54016]|0;if(C<<24>>24==110){i=d;return}D=c[3524]|0;if((c[D+148>>2]|0)==0){i=d;return}do{if(C<<24>>24==117){do{if((a[37384]&1)==0){fR(54032,o,p,106096);c[13528]=~~+h[o>>3];c[13530]=~~+h[p>>3];fN(54072,q,r,106096);E=~~+h[q>>3];c[13529]=E;F=~~+h[r>>3];c[13531]=F;G=E;H=F}else{if((c[5094]|0)==0){F=D+8|0;c[13528]=~~(+h[6756]*+((c[F>>2]|0)>>>0>>>0)+.5);E=D+12|0;c[13530]=~~(+h[6757]*+((c[E>>2]|0)>>>0>>>0)+.5);I=~~(+h[6761]*+(((c[F>>2]|0)-1|0)>>>0>>>0)+.5);c[13529]=I;F=~~(+h[6762]*+(((c[E>>2]|0)-1|0)>>>0>>>0)+.5);c[13531]=F;G=I;H=F;break}else{fK(54032,s,t,106096);c[13528]=~~+h[s>>3];c[13530]=~~+h[t>>3];fx(54072,54116,54124,106096);G=c[13529]|0;H=c[13531]|0;break}}}while(0);F=c[13528]|0;I=G+F|0;c[13529]=I;E=c[13530]|0;J=H+E|0;c[13531]=J;K=E;L=J;M=F;N=I}else{do{if((b|0)!=2|(c[5094]|0)!=0){if((a[37384]&1)==0){uE(u|0,0,40);c[u>>2]=2;c[u+4>>2]=2;c[u+8>>2]=2;h[u+16>>3]=1.025;uE(w|0,0,40);c[w>>2]=2;c[w+4>>2]=2;c[w+8>>2]=2;h[w+16>>3]=.05;h[w+24>>3]=1.0;fR(u,m,n,106096);I=~~+h[m>>3];c[13530]=~~+h[n>>3];c[13528]=I+(c[13507]|0);fN(w,x,y,106096);I=c[13528]|0;F=~~(+h[x>>3]+ +(I|0));c[13529]=F;J=c[13530]|0;E=~~(+h[y>>3]+ +(J|0));c[13531]=E;O=J;P=E;Q=I;R=F;break}else{F=c[200]|0;S=+h[64672+(F*688&-1)>>3];T=+h[64664+(F*688&-1)>>3];U=S-T;F=c[144]|0;V=+h[64664+(F*688&-1)>>3];W=+h[91];X=+h[96];Y=(S+U*.025-T)*W+X+-1.0;Z=+h[21];_=+h[68];$=(V-V)*Z+_+-1.0;aa=+h[5279];ab=+h[2];ac=+h[12];ad=(+h[7076]-aa)*ab+ac+-1.0;ae=+h[403];af=+h[391];ag=+h[395];ah=+h[399];ai=+h[404];aj=+h[392];ak=+h[396];al=+h[400];am=+h[406];an=+h[394];ao=+h[398];ap=+h[402];aq=am+Y*an+$*ao+ad*ap;ar=aq==0.0?1.0e-5:aq;aq=+(c[180]|0);I=c[186]|0;E=~~((ae+Y*af+$*ag+ad*ah)/ar*aq)+I|0;as=+(c[40]|0);J=c[46]|0;at=~~((ai+Y*aj+$*ak+ad*al)/ar*as)+J|0;c[13528]=E;c[13530]=at;ar=(U*.075+S-T)*W+X+-1.0;X=(+h[64672+(F*688&-1)>>3]-V)*Z+_+-1.0;_=(+h[6915]-aa)*ab+ac+-1.0;ac=am+ar*an+X*ao+_*ap;ap=ac==0.0?1.0e-5:ac;F=~~((ae+ar*af+X*ag+_*ah)/ap*aq)+I|0;I=~~((ai+ar*aj+X*ak+_*al)/ap*as)+J|0;c[13529]=F;c[13531]=I;O=at;P=I;Q=E;R=F;break}}else{as=+(c[186]|0);ap=+(c[180]|0);F=~~(as+ap*.709);c[13528]=F;E=~~(as+ap*.778);c[13529]=E;ap=+(c[46]|0);as=+(c[40]|0);I=~~(ap-as*.147);c[13530]=I;at=~~(ap+as*.497);c[13531]=at;O=I;P=at;Q=F;R=E}}while(0);if((a[54017]|0)!=118){K=O;L=P;M=Q;N=R;break}as=+((c[(c[3524]|0)+28>>2]|0)>>>0>>>0);E=~~(+h[8390]*((a[67136]&1)!=0?-1.0:1.0)*as);F=c[144]|0;at=~~(as*+h[65056+(F*688&-1)>>3]*((a[65072+(F*688&-1)|0]&1)!=0?-1.0:1.0));do{if((E|0)>0){if((c[16745]&4|0)==0){au=Q;av=R;break}F=Q+E|0;c[13528]=F;I=R+E|0;c[13529]=I;au=F;av=I}else{au=Q;av=R}}while(0);if((at|0)<=0){K=O;L=P;M=au;N=av;break}if((c[16401]&4|0)==0){K=O;L=P;M=au;N=av;break}E=au+at|0;c[13528]=E;I=av+at|0;c[13529]=I;K=O;L=P;M=E;N=I}}while(0);if((K|0)>(L|0)){c[13531]=K;c[13530]=L;aw=L;ax=K}else{aw=K;ax=L}if((c[(c[3524]|0)+96>>2]&16|0)==0){if((a[54017]|0)==118){L=l+36|0;c[L>>2]=M;K=l|0;c[K>>2]=M;P=l+24|0;c[P>>2]=N;O=l+12|0;c[O>>2]=N;ay=ax-aw|0;az=ax;aA=aw;aB=l+16|0;aC=l+4|0;aD=l+40|0;aE=l+28|0;aF=L;aG=K;aH=P;aJ=O}else{O=l+16|0;c[O>>2]=aw;P=l+4|0;c[P>>2]=aw;K=l+40|0;c[K>>2]=ax;L=l+28|0;c[L>>2]=ax;ay=N-M|0;az=N;aA=M;aB=O;aC=P;aD=K;aE=L;aF=l+36|0;aG=l|0;aH=l+24|0;aJ=l+12|0}as=+(ay|0)*.0078125;ap=+(az-aA|0);ay=1-aA|0;L=l+8|0;K=l|0;l=k|0;P=k+8|0;O=k+4|0;av=aA;au=0;R=0;while(1){Q=~~(as*+(R+1|0))+aA|0;al=+(ay+av|0)/ap;if((a[20668]|0)==110){aK=1.0-al}else{aK=al}y=(c[3524]|0)+144|0;if((c[y>>2]|0)!=0){c[l>>2]=5;h[P>>3]=aK;c[O>>2]=0;cM[c[y>>2]&511](k)}L1909:do{if((c[5163]|0)==100){y=c[5172]|0;x=c[5173]|0;w=au;n=au;while(1){if((w|0)>=(y|0)){aL=R;aM=n;aN=Q;break L1909}aO=~~(ap*+h[x+(w<<5)>>3])+aA|0;if((av|0)<(aO|0)){if((Q|0)>(aO|0)){break}else{aP=n}}else{aP=w}if((Q|0)<(aO|0)){aL=R;aM=aP;aN=Q;break L1909}else{w=w+1|0;n=aP}}aL=R-1|0;aM=n;aN=aO}else{aL=R;aM=au;aN=Q}}while(0);if((a[54017]|0)==118){c[aB>>2]=av;c[aC>>2]=av;Q=aN+1|0;at=(az|0)<(Q|0)?az:Q;c[aD>>2]=at;c[aE>>2]=at}else{c[aF>>2]=av;c[aG>>2]=av;at=aN+1|0;Q=(az|0)<(at|0)?az:at;c[aH>>2]=Q;c[aJ>>2]=Q}Q=c[12372]|0;if((Q|0)==0){aQ=1601}else if((Q|0)==1|(Q|0)==4){aR=(c[12373]<<4&65520)+Q|0;aS=1421}else if((Q|0)==2|(Q|0)==5){aR=(c[12374]<<4&65520)+Q|0;aS=1421}else{aR=0;aS=1421}if((aS|0)==1421){aS=0;aQ=aR}c[L>>2]=aQ;cN[c[(c[3524]|0)+148>>2]&255](4,K);Q=aL+1|0;if((Q|0)<128){av=aN;au=aM;R=Q}else{break}}}else{aI(92952,104,1,B|0);R=c[13530]|0;cf(B|0,85112,(v=i,i=i+32|0,c[v>>2]=c[13528],c[v+8>>2]=R,c[v+16>>2]=N-M,c[v+24>>2]=ax-aw,v)|0);aI(76928,42,1,B|0);if((a[20668]|0)==110){aI(224696,19,1,B|0)}else{aI(217376,7,1,B|0)}if((a[54017]|0)==118){aI(211744,30,1,B|0)}else{aI(205632,30,1,B|0)}aI(202264,85,1,B|0)}do{if((a[54018]|0)!=0){B=c[13505]|0;do{if((B|0)>-1){aw=c[14074]|0;ap=+h[7039];aK=+h[7040];ax=a[56328]|0;as=+h[7043];M=43280;while(1){aT=c[M>>2]|0;if((aT|0)==0){aS=1429;break}if((c[aT+4>>2]|0)==(B|0)){aS=1428;break}else{M=aT|0}}L1952:do{if((aS|0)==1428){M=c[aT+12>>2]|0;n=a[aT+40|0]|0;N=(n&1)==0;aU=M;aV=+h[aT+24>>3];aW=+h[aT+32>>3];aX=n;aY=N?1:c[aT+48>>2]|0;aZ=N?M:c[aT+52>>2]|0;a_=+h[aT+56>>3]}else if((aS|0)==1429){M=c[8798]|0;N=(M|0)>0;n=B;L1955:while(1){R=43264;while(1){a$=c[R>>2]|0;if((a$|0)==0){break}if((c[a$+4>>2]|0)==(n|0)){break L1955}else{R=a$|0}}R=n-1|0;if(!((n|0)>(M|0)&N)){aU=R;aV=ap;aW=aK;aX=ax;aY=1;aZ=R;a_=as;break L1952}n=((R|0)%(M|0)&-1)+1|0}M=c[a$+12>>2]|0;al=+h[a$+24>>3];_=+h[a$+32>>3];N=a[a$+40|0]|0;R=c[a$+48>>2]|0;aM=c[a$+52>>2]|0;ak=+h[a$+56>>3];if((c[(c[3524]|0)+96>>2]&1024|0)!=0){aU=n;aV=al;aW=_;aX=0;aY=R;aZ=aM;a_=ak;break}au=(N&1)==0;aU=M;aV=al;aW=_;aX=N;aY=au?1:R;aZ=au?M:aM;a_=ak}}while(0);ax=j|0;c[ax>>2]=aY;aM=j+4|0;c[aM>>2]=aZ;h[j+8>>3]=a_;do{if((aw|0)!=0){M=c[(c[3524]|0)+92>>2]|0;if(aW<0.0){cK[M&63](+h[3817]);break}else{cK[M&63](aW);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](aV);aw=c[(c[3524]|0)+64>>2]|0;if((aU|0)<-5){cM[aw&511](-2)}else{cM[aw&511](aU)}aw=c[3524]|0;if((aX&1)==0){if((c[aw+96>>2]&1024|0)!=0){break}c[ax>>2]=1;c[aM>>2]=aU}fn(j,aw)}else{aw=g;c[aw>>2]=c[14084];c[aw+4>>2]=c[56340>>2];c[aw+8>>2]=c[56344>>2];c[aw+12>>2]=c[56348>>2];aw=c[14075]|0;do{if((c[14074]|0)!=0){as=+h[7040];M=c[(c[3524]|0)+92>>2]|0;if(as<0.0){cK[M&63](+h[3817]);break}else{cK[M&63](as);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[7039]);aM=c[(c[3524]|0)+64>>2]|0;if((aw|0)<-5){cM[aM&511](-2)}else{cM[aM&511](aw)}aM=c[3524]|0;if((a[56328]&1)==0){if((c[aM+96>>2]&1024|0)!=0){break}c[g>>2]=1;c[g+4>>2]=aw}fn(g,aM)}}while(0);B=c[3524]|0;aM=c[B+172>>2]|0;if((aM|0)==0){a0=B}else{cM[aM&511](0);a0=c[3524]|0}cN[c[a0+56>>2]&255](c[13528]|0,c[13530]|0);cN[c[(c[3524]|0)+60>>2]&255](c[13529]|0,c[13530]|0);cN[c[(c[3524]|0)+60>>2]&255](c[13529]|0,c[13531]|0);cN[c[(c[3524]|0)+60>>2]&255](c[13528]|0,c[13531]|0);cN[c[(c[3524]|0)+60>>2]&255](c[13528]|0,c[13530]|0);aM=c[(c[3524]|0)+172>>2]|0;if((aM|0)!=0){cM[aM&511](1)}aM=f;c[aM>>2]=c[14084];c[aM+4>>2]=c[56340>>2];c[aM+8>>2]=c[56344>>2];c[aM+12>>2]=c[56348>>2];aM=c[14075]|0;do{if((c[14074]|0)!=0){as=+h[7040];B=c[(c[3524]|0)+92>>2]|0;if(as<0.0){cK[B&63](+h[3817]);break}else{cK[B&63](as);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[7039]);B=c[(c[3524]|0)+64>>2]|0;if((aM|0)<-5){cM[B&511](-2)}else{cM[B&511](aM)}B=c[3524]|0;if((a[56328]&1)==0){if((c[B+96>>2]&1024|0)!=0){break}c[f>>2]=1;c[f+4>>2]=aM}fn(f,B)}}while(0);if((c[16745]|0)!=0){f=e;c[f>>2]=c[14084];c[f+4>>2]=c[56340>>2];c[f+8>>2]=c[56344>>2];c[f+12>>2]=c[56348>>2];f=c[14075]|0;do{if((c[14074]|0)!=0){aV=+h[7040];a0=c[(c[3524]|0)+92>>2]|0;if(aV<0.0){cK[a0&63](+h[3817]);break}else{cK[a0&63](aV);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[7039]);a0=c[(c[3524]|0)+64>>2]|0;if((f|0)<-5){cM[a0&511](-2)}else{cM[a0&511](f)}a0=c[3524]|0;do{if((a[56328]&1)==0){if((c[a0+96>>2]&1024|0)!=0){break}c[e>>2]=1;c[e+4>>2]=f;aS=1485}else{aS=1485}}while(0);if((aS|0)==1485){fn(e,a0)}de(3,8)}if((c[16801]|0)==0){i=d;return}fn(67216,c[3524]|0);aV=+h[8390];a0=(a[67136]&1)!=0;do{if((a[54017]|0)==104){e=~~(aV*(a0?1.0:-1.0)*+((c[(c[3524]|0)+24>>2]|0)>>>0>>>0));fx(67288,z,A,98672);aS=(c[z>>2]|0)+(((c[13529]|0)+(c[13528]|0)|0)/2&-1)|0;c[z>>2]=aS;f=~~(+(c[A>>2]|0)+(+(c[13530]|0)+ +((c[(c[3524]|0)+16>>2]|0)>>>0>>>0)*-2.7))+((e|0)<0?e:0)|0;c[A>>2]=f;if((aS|0)<0){c[z>>2]=0;a1=0}else{a1=aS}if((f|0)<0){c[A>>2]=0;a2=0}else{a2=f}ln(a1,a2,c[16801]|0,1,1,0,c[16802]|0)}else{f=~~(aV*(a0?-1.0:1.0)*+((c[(c[3524]|0)+28>>2]|0)>>>0>>>0));c[216]=0;if((c[16745]&1|0)!=0){c[216]=0;de(3,14)}fx(67288,z,A,98672);aS=c[3524]|0;e=~~(+(c[z>>2]|0)+(+(c[13529]|0)+(+(c[216]|0)+1.5)*+((c[aS+20>>2]|0)>>>0>>>0)))+((f|0)>0?f:0)|0;c[z>>2]=e;f=(c[A>>2]|0)+(((c[13531]|0)+(c[13530]|0)|0)/2&-1)|0;c[A>>2]=f;if((e|0)<0){c[z>>2]=0;a3=0}else{a3=e}if((f|0)<0){c[A>>2]=0;a4=0}else{a4=f}f=(cO[c[aS+72>>2]&255](c[16799]|0)|0)==0;aS=c[16801]|0;if(f){ln(a3,a4,aS,0,0,0,c[16802]|0);break}else{ln(a3,a4,aS,1,0,c[16799]|0,c[16802]|0);aS=c[(c[3524]|0)+72>>2]|0;cO[aS&255](0);break}}}while(0);if((c[16804]|0)==0){i=d;return}cM[c[(c[3524]|0)+64>>2]&511](-2);i=d;return}function dE(){c[13544]=(c[13544]|0)+1;c[13898]=(c[13898]|0)+1;return}function dF(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,n=0,p=0,q=0;c[12906]=b;do{if((d|0)==0){if((a[37400]&1)!=0){e=b;f=0;break}c[8272]=0;c[13898]=0;a[c[10036]|0]=0;e=b;f=0}else{e=b;f=d}}while(0);L2054:while(1){d=(c[10036]|0)+f|0;b=(c[10034]|0)-f|0;if((a[37400]&1)!=0){g=c[m>>2]|0;aK(e|0,g|0)}if((a6(d|0,b|0,c[o>>2]|0)|0)==0){h=1518;break}b=c[10036]|0;d=uA(b|0)|0;g=d-1|0;if((g|0)<=-1){break}i=b+g|0;b=a[i]|0;do{if(b<<24>>24==10){a[i]=0;do{if((g|0)>0){j=d-2|0;k=(c[10036]|0)+j|0;if((a[k]|0)!=13){l=g;break}a[k]=0;l=j}else{l=g}}while(0);j=(((l|0)>0)<<31>>31)+l|0;n=j;p=a[(c[10036]|0)+j|0]|0}else{if((d+1|0)>>>0<(c[10034]|0)>>>0){n=g;p=b;break}dG();e=138304;f=d;continue L2054}}while(0);d=p<<24>>24==92;if(d){e=138304;f=d?n:f}else{q=0;h=1533;break}}if((h|0)==1533){return q|0}do{if((h|0)==1518){if((a[37400]&1)!=0){n=c[m>>2]|0;aF(10,n|0)}a[(c[10036]|0)+f|0]=0;c[9354]=(c[9354]|0)+1;if((f|0)>0&(c[12918]|0)==0){break}else{q=1}return q|0}}while(0);q=0;return q|0}function dG(){var b=0,d=0,e=0,f=0;b=i;d=c[10034]|0;if((d|0)!=0){c[10036]=db(c[10036]|0,d+1024|0,216480)|0;c[10034]=(c[10034]|0)+1024;i=b;return}d=ut(1024)|0;do{if((d|0)==0){gk();e=ut(1024)|0;if((e|0)!=0){f=e;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=209632,v)|0)}else{f=d}}while(0);c[10036]=f;c[10034]=1024;a[f]=0;i=b;return}function dH(){var a=0,b=0,d=0,e=0;a=i;b=c[1052]|0;if((b|0)!=0){d=db(c[1054]|0,(b*40&-1)+16e3|0,136360)|0;c[1054]=d;uE(d+((c[1052]|0)*40&-1)|0,0,16e3);c[1052]=(c[1052]|0)+400;i=a;return}d=ut(16e3)|0;do{if((d|0)==0){gk();b=ut(16e3)|0;if((b|0)!=0){e=b;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=163112,v)|0)}else{e=d}}while(0);c[1054]=e;c[1052]=400;uE(e|0,0,16e3);i=a;return}function dI(){var b=0,d=0,e=0;b=i;do{if((a[33512]&1)==0){if((dF(105808,0)|0)==0){break}else{d=1}i=b;return d|0}else{do{if((a[14080]&1)!=0){do{if((a[37400]&1)!=0){e=c[(c[3524]|0)+96>>2]|0;if((e&1|0)!=0){break}if((c[10030]|0)!=(c[n>>2]|0)){if((e&2|0)==0){break}}lm();if((c[(c[3524]|0)+96>>2]&2|0)==0){uf(-1,100528,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else{uf(-1,101160,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}}}while(0);if(a[13032]|0){break}e=c[(c[3524]|0)+100>>2]|0;if((e|0)==0){break}cS[e&511]();a[13032]=1}}while(0);if((dF(123048,0)|0)==0){break}else{d=1}i=b;return d|0}}while(0);a[25280]=a[37400]&1;d=(dJ()|0)!=0&1;i=b;return d|0}function dJ(){var b=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,x=0,y=0,z=0,A=0,B=0;b=i;do{if((a[43472]&1)!=0){if((dK()|0)==0){break}if((dK()|0)==0){break}if((dK()|0)==0){break}if((dK()|0)==0){break}uf(-1,98448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}}while(0);e=c[10036]|0;while(1){if((aM(d[e]|0|0)|0)==0){break}else{e=e+1|0}}do{if((a8(e|0,35)|0)!=0){f=jl(40144,40136)|0;c[8272]=f;g=(c[10036]|0)+(c[(c[1054]|0)+(f*40&-1)+32>>2]|0)|0;if((a[g]|0)!=35){break}a[g]=0}}while(0);g=c[10036]|0;if((e|0)==(g|0)){h=e}else{uH(g|0,e|0,uA(e|0)|0);g=uA(e|0)|0;a[(c[10036]|0)+g|0]=0;h=c[10036]|0}if((a[h]|0)==33){g=h+1|0;if((g|0)==0){j=0;i=b;return j|0}if(!(a[14168]|0)){uf(-1,145320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}bN(g|0);j=0;i=b;return j|0}c[9368]=0;g=jl(40144,40136)|0;c[8272]=g;h=c[12918]|0;if((h|0)<0){uf(-1,211816,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}do{if((h|0)>0){while(1){if((a[37400]&1)==0){if((a[33232]&1)==0){k=1600;break}}e=c[10036]|0;f=e+(uA(e|0)|0)|0;w=59;a[f]=w&255;w=w>>8;a[f+1|0]=w&255;if((dF(76720,uA(c[10036]|0)|0)|0)!=0){k=1597;break}f=jl(40144,40136)|0;c[8272]=f;e=(c[10036]|0)+(c[(c[1054]|0)+(f*40&-1)+32>>2]|0)|0;if((a[e]|0)==35){a[e]=0}if((c[12918]|0)<=0){k=1601;break}}if((k|0)==1597){uf(-1,224544,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((k|0)==1600){uf(-1,224544,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((k|0)==1601){l=c[8272]|0;break}}else{l=g}}while(0);c[13898]=0;if((l|0)>0){m=0}else{j=0;i=b;return j|0}L2171:while(1){a[55600]=0;a[55651]=0;a[55702]=0;a[55753]=0;a[55804]=0;a[55855]=0;a[55906]=0;a[55957]=0;a[56008]=0;a[56059]=0;a[56110]=0;a[56161]=0;if((t9(m)|0)==0){l=c[13898]|0;g=c[1054]|0;h=c[g+(l*40&-1)+36>>2]|0;e=c[g+(l*40&-1)+32>>2]|0;f=(a[g+(l*40&-1)|0]&1)==0;l=(h|0)>0;g=c[10036]|0;n=53600;o=133488;L2176:while(1){L2178:do{if(!f){if(l){p=0;q=0;r=e;while(1){s=a[o+p|0]|0;if(s<<24>>24==(a[g+(p+r|0)|0]|0)){t=r;u=q}else{if(s<<24>>24!=36){break L2178}t=r-1|0;u=1}x=p+1|0;if((x|0)<(u+h|0)){p=x;q=u;r=t}else{break}}if((u|0)==0){y=x}else{z=n;break L2176}}else{y=0}r=a[o+y|0]|0;if((r<<24>>24|0)==36|(r<<24>>24|0)==0){z=n;break L2176}}}while(0);r=n+8|0;q=c[r>>2]|0;if((q|0)==0){z=r;break}else{n=r;o=q}}cS[c[z+4>>2]&511]()}else{dT()}if((c[13484]|0)!=0){k=1617;break}A=c[13898]|0;o=c[8272]|0;L2193:do{if((A|0)<(o|0)){n=c[1054]|0;h=(a[n+(A*40&-1)|0]&1)==0;if(h){k=1649;break L2171}g=c[n+(A*40&-1)+36>>2]|0;e=n+(A*40&-1)+32|0;l=c[10036]|0;f=0;while(1){if((f|0)>=(g|0)){k=1623;break}if((a[l+((c[e>>2]|0)+f|0)|0]|0)==(a[f+103664|0]|0)){f=f+1|0}else{break}}do{if((k|0)==1623){k=0;if((f|0)!=1){break}e=A+1|0;c[13898]=e;B=e;break L2193}}while(0);if(h){k=1651;break L2171}f=c[n+(A*40&-1)+36>>2]|0;e=n+(A*40&-1)+32|0;l=c[10036]|0;g=0;while(1){if((g|0)>=(f|0)){k=1630;break}if((a[l+((c[e>>2]|0)+g|0)|0]|0)==(a[g+126728|0]|0)){g=g+1|0}else{break}}do{if((k|0)==1630){k=0;if((g|0)!=1){break}c[13544]=(c[13544]|0)+1;e=A+1|0;c[13898]=e;B=e;break L2193}}while(0);if(h){k=1647;break L2171}g=c[n+(A*40&-1)+36>>2]|0;e=n+(A*40&-1)+32|0;l=c[10036]|0;f=0;while(1){if((f|0)>=(g|0)){break}if((a[l+((c[e>>2]|0)+f|0)|0]|0)==(a[f+125616|0]|0)){f=f+1|0}else{k=1650;break L2171}}if((f|0)!=1){k=1648;break L2171}e=c[13544]|0;if((e|0)==0){k=1638;break L2171}c[13544]=e-1;e=A+1|0;c[13898]=e;B=e}else{B=A}}while(0);if((B|0)<(o|0)){m=B}else{j=0;k=1646;break}}if((k|0)==1646){i=b;return j|0}else if((k|0)==1647){uf(A,205408,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((k|0)==1648){uf(A,205408,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((k|0)==1649){uf(A,205408,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((k|0)==1638){uf(A,103896,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((k|0)==1617){c[13484]=0;j=1;i=b;return j|0}else if((k|0)==1650){uf(A,205408,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((k|0)==1651){uf(A,205408,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}return 0}function dK(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;b=i;if((a8(c[10036]|0,64)|0)==0){d=0;i=b;return d|0}e=c[10034]|0;f=ut(e)|0;do{if((f|0)==0){gk();g=ut(e)|0;if((g|0)!=0){h=g;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=222744,v)|0);return 0}else{h=f}}while(0);f=c[10036]|0;e=uA(f|0)|0;g=c[10034]|0;j=e>>>0<g>>>0?e:g-1|0;uF(h|0,f|0,j|0);a[h+j|0]=0;L2237:do{if((j|0)==0|(h|0)==0){k=0;l=0}else{f=0;g=0;e=j;m=0;n=0;o=h;p=0;q=0;while(1){r=a[o]|0;if(r<<24>>24==0){k=m;l=n;break L2237}s=r<<24>>24;L2241:do{if((s|0)==64){do{if(q|p|g){t=r}else{u=o+1|0;if((bO(a[u]|0|0)|0)==0){t=a[o]|0;break}else{w=u}while(1){if((bs(a[w]|0|0)|0)==0){x=a[w]|0;if(x<<24>>24!=95){break}}w=w+1|0}a[w]=0;y=e6(u)|0;do{if((y|0)==0){z=1671}else{if((c[y+16>>2]|0)!=3){z=1671;break}A=n+1|0;B=c[y+24>>2]|0;C=m+e|0;D=C+(uA(B|0)|0)|0;if(D>>>0>(c[10034]|0)>>>0){do{dG();D=C+(uA(B|0)|0)|0;}while(D>>>0>(c[10034]|0)>>>0)}C=a[B]|0;if(C<<24>>24==0){E=A;F=m;break}else{G=m;H=B;I=C}while(1){C=H+1|0;D=G+1|0;a[(c[10036]|0)+G|0]=I;J=a[C]|0;if(J<<24>>24==0){E=A;F=D;break}else{G=D;H=C;I=J}}}}while(0);if((z|0)==1671){z=0;uh(-1,221968,(v=i,i=i+8|0,c[v>>2]=u,v)|0);E=n;F=m}a[w]=x;K=0;L=0;M=w-1|0;N=E;O=F;P=0;Q=0;break L2241}}while(0);a[(c[10036]|0)+m|0]=t;K=q;L=p;M=o;N=n;O=m+1|0;P=g;Q=0}else if((s|0)==34){a[(c[10036]|0)+m|0]=r;K=q;L=p^(f^1);M=o;N=n;O=m+1|0;P=g;Q=0}else if((s|0)==39){a[(c[10036]|0)+m|0]=r;K=q^1;L=p;M=o;N=n;O=m+1|0;P=g;Q=0}else if((s|0)==92){a[(c[10036]|0)+m|0]=r;K=q;L=p;M=o;N=n;O=m+1|0;P=g;Q=f^p}else if((s|0)==35){if(q){R=g;z=1679;break}R=g|p^1;z=1679}else{R=g;z=1679}}while(0);if((z|0)==1679){z=0;a[(c[10036]|0)+m|0]=r;K=q;L=p;M=o;N=n;O=m+1|0;P=R;Q=0}s=M+1|0;y=e-1|0;if((y|0)==0|(s|0)==0){k=O;l=N;break}else{f=Q;g=P;e=y;m=O;n=N;o=s;p=L;q=K}}}}while(0);a[(c[10036]|0)+k|0]=0;uu(h);d=l;i=b;return d|0}function dL(b){b=b|0;var d=0,e=0;d=i;if((c[8501]|0)!=0){e=c[m>>2]|0;cf(e|0,154696,(v=i,i=i+8|0,c[v>>2]=b,v)|0)}hx(0,0,b);e=c[10034]|0;if(e>>>0<((uA(b|0)|0)+1|0)>>>0){do{dG();e=c[10034]|0;}while(e>>>0<((uA(b|0)|0)+1|0)>>>0)}uB(c[10036]|0,b|0);a[25280]=0;c[13484]=dJ()|0;hy();i=d;return}function dM(b){b=b|0;var d=0,e=0;d=i;if((b|0)==0){e=0}else{e=bP(b|0)|0}dL(e);if((a[872]&1)!=0&(c[6928]|0)!=0){if((c[8501]|0)!=0){e=c[m>>2]|0;aI(196688,8,1,e|0)}dO();i=d;return}if((a[27704]&1)==0){dP();i=d;return}else{uh(-1,185416,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);i=d;return}}function dN(){var a=0,b=0;a=i;b=c[13544]|0;if((b|0)==0){uf(c[13898]|0,103896,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{c[13544]=b-1;c[13898]=(c[13898]|0)+1;i=a;return}}function dO(){var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0.0,l=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0;b=i;d=c[10814]|0;e=c[6928]|0;if((d|0)==0&(e|0)==2){uf(-1,87408,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=c[10828]|0;if((f|0)==0&(e|0)==3){uf(-1,87408,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((e|0)==0){uh(-1,86328,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);dP();i=b;return}g=c[16507]|0;c[16506]=g;do{if((g&1|0)==0){j=+h[8257];if((a[66164]&1)==0){k=j;break}l=+_(+j);k=l/+h[8272]}else{k=8.988465674311578e+304}}while(0);h[8255]=k;m=a[66164]|0;do{if((g&2|0)==0){k=+h[8258];if((m&1)==0){n=k;break}l=+_(+k);n=l/+h[8272]}else{n=-8.988465674311578e+304}}while(0);h[8256]=n;if((m&1)==0){o=0.0}else{o=+_(+(+h[8271]))}h[8272]=o;m=c[16335]|0;c[16334]=m;do{if((m&1|0)==0){o=+h[8171];if((a[65476]&1)==0){p=o;break}n=+_(+o);p=n/+h[8186]}else{p=8.988465674311578e+304}}while(0);h[8169]=p;g=a[65476]|0;do{if((m&2|0)==0){p=+h[8172];if((g&1)==0){q=p;break}n=+_(+p);q=n/+h[8186]}else{q=-8.988465674311578e+304}}while(0);h[8170]=q;if((g&1)==0){r=0.0}else{r=+_(+(+h[8185]))}h[8186]=r;g=c[17195]|0;c[17194]=g;do{if((g&1|0)==0){r=+h[8601];if((a[68916]&1)==0){s=r;break}q=+_(+r);s=q/+h[8616]}else{s=8.988465674311578e+304}}while(0);h[8599]=s;m=a[68916]|0;do{if((g&2|0)==0){s=+h[8602];if((m&1)==0){t=s;break}q=+_(+s);t=q/+h[8616]}else{t=-8.988465674311578e+304}}while(0);h[8600]=t;if((m&1)==0){u=0.0}else{u=+_(+(+h[8615]))}h[8616]=u;m=c[17023]|0;c[17022]=m;do{if((m&1|0)==0){u=+h[8515];if((a[68228]&1)==0){w=u;break}t=+_(+u);w=t/+h[8530]}else{w=8.988465674311578e+304}}while(0);h[8513]=w;g=a[68228]|0;do{if((m&2|0)==0){w=+h[8516];if((g&1)==0){x=w;break}t=+_(+w);x=t/+h[8530]}else{x=-8.988465674311578e+304}}while(0);h[8514]=x;if((g&1)==0){y=0.0}else{y=+_(+(+h[8529]))}h[8530]=y;g=c[17539]|0;if((g&1|0)==0){y=+h[8773];if((a[70292]&1)==0){z=y}else{x=+_(+y);z=x/+h[8788]}h[8771]=z}if((g&2|0)==0){z=+h[8774];if((a[70292]&1)==0){A=z}else{x=+_(+z);A=x/+h[8788]}h[8772]=A}g=c[17367]|0;if((g&1|0)==0){A=+h[8687];if((a[69604]&1)==0){B=A}else{x=+_(+A);B=x/+h[8702]}h[8685]=B}if((g&2|0)==0){B=+h[8688];if((a[69604]&1)==0){C=B}else{x=+_(+B);C=x/+h[8702]}h[8686]=C}g=c[16163]|0;if((g&1|0)==0){C=+h[8085];if((a[64788]&1)==0){D=C}else{x=+_(+C);D=x/+h[8100]}h[8083]=D}if((g&2|0)==0){D=+h[8086];if((a[64788]&1)==0){E=D}else{x=+_(+D);E=x/+h[8100]}h[8084]=E}g=c[16679]|0;if((g&1|0)==0){E=+h[8343];if((a[66852]&1)==0){F=E}else{x=+_(+E);F=x/+h[8358]}h[8341]=F}if((g&2|0)==0){F=+h[8344];if((a[66852]&1)==0){G=F}else{x=+_(+F);G=x/+h[8358]}h[8342]=G}if((e|0)==2){iU(d,c[6930]|0)}else if((e|0)==3){i$(f,c[6930]|0)}if((c[16508]&2|0)!=0){G=+h[8256];h[8256]=+h[8255];h[8255]=G}if((c[16336]&2|0)!=0){G=+h[8170];h[8170]=+h[8169];h[8169]=G}if((c[17196]&2|0)!=0){G=+h[8600];h[8600]=+h[8599];h[8599]=G}if((c[17024]&2|0)!=0){G=+h[8514];h[8514]=+h[8513];h[8513]=G}f=c[6928]|0;if((f|0)==2){fS(c[10814]|0,c[6930]|0);i=b;return}else if((f|0)==3){fv(c[10828]|0,c[6930]|0,0);i=b;return}else{uf(-1,85504,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function dP(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0;b=i;d=c[13898]|0;e=c[8272]|0;f=(e|0)>(d|0);L2430:do{if(f){g=c[1054]|0;if((a[g+(d*40&-1)|0]&1)!=0){h=c[g+(d*40&-1)+36>>2]|0;j=g+(d*40&-1)+32|0;g=c[10036]|0;k=0;while(1){if((k|0)>=(h|0)){l=1801;break}if((a[g+((c[j>>2]|0)+k|0)|0]|0)==(a[k+78280|0]|0)){k=k+1|0}else{break}}do{if((l|0)==1801){if((k|0)!=1){break}uf(d,77152,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);if(!f){l=1804;break}}k=c[1054]|0;L2442:do{if((a[k+(d*40&-1)|0]&1)==0){m=k+(d*40&-1)+32|0}else{j=c[k+(d*40&-1)+36>>2]|0;g=k+(d*40&-1)+32|0;h=c[10036]|0;n=0;while(1){if((n|0)>=(j|0)){break}if((a[h+((c[g>>2]|0)+n|0)|0]|0)==(a[n+103664|0]|0)){n=n+1|0}else{m=g;break L2442}}if((n|0)==1){o=k;p=h;l=1811;break L2430}else{m=g}}}while(0);j=e-1|0;q=uA(c[6924]|0)|0;r=c[k+(j*40&-1)+32>>2]|0;s=c[k+(j*40&-1)+36>>2]|0;j=c[m>>2]|0;t=(((q+3|0)+r|0)+s|0)-j|0;q=s+r|0;r=db(0,(q+1|0)-j|0,116456)|0;j=c[(c[1054]|0)+(d*40&-1)+32>>2]|0;L2450:do{if((j|0)<(q|0)){s=j;u=r;while(1){w=a[(c[10036]|0)+s|0]|0;if(w<<24>>24==0){x=u;break L2450}y=u+1|0;a[u]=w;w=s+1|0;if((w|0)<(q|0)){s=w;u=y}else{x=y;break}}}else{x=r}}while(0);a[x]=0;if((c[10034]|0)>>>0<t>>>0){do{dG();}while((c[10034]|0)>>>0<t>>>0)}t=c[10036]|0;q=c[6924]|0;uB(t|0,q|0);q=c[10036]|0;t=q+(uA(q|0)|0)|0;a[t]=a[86120]|0;a[t+1|0]=a[86121|0]|0;a[t+2|0]=a[86122|0]|0;t=c[10036]|0;uC(t|0,r|0);uu(r)}else{l=1804}}while(0);if((l|0)==1804){o=c[1054]|0;p=c[10036]|0;l=1811}if((l|0)==1811){l=p+(c[o+(d*40&-1)+32>>2]|0)|0;d=uA(c[6924]|0)|0;o=uA(l|0)|0;x=o+1|0;uH(p|0,l|0,x|0);l=(d+1|0)+o|0;if((c[10034]|0)>>>0<l>>>0){do{dG();}while((c[10034]|0)>>>0<l>>>0)}l=c[10036]|0;uH(l+d|0,l|0,x|0);uD(c[10036]|0,c[6924]|0,d)}c[7738]=0;c[6928]=0;a[25280]=0;c[8272]=jl(40144,40136)|0;c[13898]=1;if((a[37384]&1)==0){iS();i=b;return}else{iZ();i=b;return}}function dQ(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;b=i;i=i+56|0;d=b|0;e=d|0;f=(c[13898]|0)+1|0;c[13898]=f;g=c[8272]|0;if((f|0)>=(g|0)){i=b;return}h=d|0;j=f;f=g;L2477:while(1){g=c[1054]|0;k=c[g+(j*40&-1)+36>>2]|0;L2479:do{if((a[g+(j*40&-1)|0]&1)==0){l=c[10036]|0;m=g+(j*40&-1)+32|0}else{n=g+(j*40&-1)+32|0;o=c[10036]|0;p=0;while(1){if((p|0)>=(k|0)){break}if((a[o+((c[n>>2]|0)+p|0)|0]|0)==(a[p+103664|0]|0)){p=p+1|0}else{l=o;m=n;break L2479}}if((p|0)==1){q=1848;break L2477}else{l=o;m=n}}}while(0);uD(e|0,l+(c[m>>2]|0)|0,(k|0)<49?k:49);a[d+((k|0)>49?49:k)|0]=0;r=j+1|0;L2487:do{if((f|0)>(r|0)){if((a[g+(r*40&-1)|0]&1)==0){s=0;t=j;break}u=c[g+(r*40&-1)+36>>2]|0;v=g+(r*40&-1)+32|0;w=0;while(1){if((w|0)>=(u|0)){break}if((a[l+((c[v>>2]|0)+w|0)|0]|0)==(a[w+134808|0]|0)){w=w+1|0}else{s=0;t=j;break L2487}}if((w|0)!=1){s=0;t=j;break}c[13898]=r;s=1;t=r}else{s=0;t=j}}while(0);do{if((a_(h|0,167320,6)|0)==0){x=t;y=f}else{if((a_(h|0,126208,6)|0)==0){x=t;y=f;break}e2(h,s);x=c[13898]|0;y=c[8272]|0}}while(0);r=x+1|0;c[13898]=r;if((r|0)<(y|0)){j=r;f=y}else{q=1847;break}}if((q|0)==1847){i=b;return}else if((q|0)==1848){i=b;return}}function dR(){dU(0);return}function dS(){dU(1);return}function dT(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;b=i;i=i+696|0;d=b|0;e=b+56|0;f=b+80|0;g=c[13898]|0;h=g+1|0;j=c[8272]|0;k=c[1054]|0;L2506:do{if((j|0)>(h|0)){if((a[k+(h*40&-1)|0]&1)==0){break}l=c[k+(h*40&-1)+36>>2]|0;m=k+(h*40&-1)+32|0;n=c[10036]|0;o=0;while(1){if((o|0)>=(l|0)){break}if((a[n+((c[m>>2]|0)+o|0)|0]|0)==(a[o+199040|0]|0)){o=o+1|0}else{break L2506}}if((o|0)!=1){break}uD(f|0,55600,612);m=0;l=g;L2514:while(1){p=l+2|0;c[13898]=p;q=c[k+(p*40&-1)+36>>2]|0;r=(q|0)>49?49:q;q=c[k+(p*40&-1)+32>>2]|0;s=0;while(1){t=s+1|0;a[55600+(m*51&-1)+s|0]=a[n+q|0]|0;if((t|0)==(r|0)){break}else{q=q+1|0;s=t}}u=m+1|0;a[55600+(m*51&-1)+r|0]=0;w=l+3|0;x=(j|0)>(w|0);if(!x){break}if((a[k+(w*40&-1)|0]&1)==0){y=1867;break}s=c[k+(w*40&-1)+36>>2]|0;q=k+(w*40&-1)+32|0;t=0;while(1){if((t|0)>=(s|0)){break}if((a[n+((c[q>>2]|0)+t|0)|0]|0)==(a[t+148464|0]|0)){t=t+1|0}else{y=1866;break L2514}}if((t|0)==1&(u|0)<12){m=u;l=p}else{y=1866;break}}if((y|0)==1866){if(x){y=1867}}L2527:do{if((y|0)==1867){if((a[k+(w*40&-1)|0]&1)==0){break}m=c[k+(w*40&-1)+36>>2]|0;o=k+(w*40&-1)+32|0;q=0;while(1){if((q|0)>=(m|0)){break}if((a[n+((c[o>>2]|0)+q|0)|0]|0)==(a[q+148464|0]|0)){q=q+1|0}else{break L2527}}if((q|0)!=1){break}uf(l+4|0,172072,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);o=l+5|0;c[13898]=o;if((o|0)>=(j|0)){uf(o,168144,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}L2539:do{if((a[k+(o*40&-1)|0]&1)!=0){m=c[k+(o*40&-1)+36>>2]|0;p=k+(o*40&-1)+32|0;t=0;while(1){if((t|0)>=(m|0)){break}if((a[n+((c[p>>2]|0)+t|0)|0]|0)==(a[t+103664|0]|0)){t=t+1|0}else{break L2539}}if((t|0)!=1){break}uf(o,168144,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);o=iv(g)|0;c[11670]=o;c[o+16>>2]=u;it();n=c[18070]|0;l=db(n,c[n>>2]<<5|8,105624)|0;c[18070]=0;if((l|0)==0){uf(g,152776,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}n=o+8|0;p=c[n>>2]|0;if((p|0)!=0){e1(p)}c[n>>2]=l;uD(55600,f|0,612);l=o+12|0;n=(c[13898]|0)-1|0;p=c[1054]|0;m=(c[p+(n*40&-1)+36>>2]|0)+(c[p+(n*40&-1)+32>>2]|0)|0;n=db(c[l>>2]|0,(m+1|0)-(c[p+(g*40&-1)+32>>2]|0)|0,116456)|0;c[l>>2]=n;p=c[(c[1054]|0)+(g*40&-1)+32>>2]|0;L2553:do{if((p|0)<(m|0)){q=p;s=n;while(1){r=a[(c[10036]|0)+q|0]|0;if(r<<24>>24==0){z=s;break L2553}A=s+1|0;a[s]=r;r=q+1|0;if((r|0)<(m|0)){q=r;s=A}else{z=A;break}}}else{z=n}}while(0);a[z]=0;c[11670]=0;n=o+4|0;m=(uA(c[n>>2]|0)|0)+8|0;p=ut(m)|0;do{if((p|0)==0){gk();s=ut(m)|0;if((s|0)!=0){B=s;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=154560,v)|0)}else{B=p}}while(0);a[B]=a[151320]|0;a[B+1|0]=a[151321|0]|0;a[B+2|0]=a[151322|0]|0;a[B+3|0]=a[151323|0]|0;a[B+4|0]=a[151324|0]|0;a[B+5|0]=a[151325|0]|0;a[B+6|0]=a[151326|0]|0;uC(B|0,c[n>>2]|0);p=c[l>>2]|0;m=e6(B)|0;L2562:do{if((m|0)!=0){o=m+8|0;do{if((a[o]&1)==0){s=c[m+24>>2]|0;if((aY(s|0,p|0)|0)==0){break L2562}q=m+16|0;if((c[q>>2]|0)!=3){break}uu(s);c[q>>2]=1}else{a[o]=0}}while(0);if((p|0)==0){C=0}else{C=bP(p|0)|0}c[m+16>>2]=3;c[m+24>>2]=C}}while(0);uu(B);i=b;return}}while(0);B=c[10036]|0;C=k+(g*40&-1)+32|0;z=B+(c[C>>2]|0)|0;if((a_(z|0,167320,6)|0)==0){uf(g,145392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((a_(z|0,126208,6)|0)==0){uf(g,145392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[13898]=g+2;z=d|0;f=c[k+(g*40&-1)+36>>2]|0;g=(f|0)>49?49:f;f=c[C>>2]|0;C=0;while(1){k=C+1|0;a[d+C|0]=a[B+f|0]|0;if((k|0)==(g|0)){break}else{f=f+1|0;C=k}}a[d+g|0]=0;g=e6(z)|0;is(e);z=g+8|0;do{if((a[z]&1)==0){d=g+16|0;if((c[d>>2]|0)!=3){break}uu(c[g+24>>2]|0);c[d>>2]=1}}while(0);d=g+16|0;g=e;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];c[d+16>>2]=c[g+16>>2];c[d+20>>2]=c[g+20>>2];a[z]=0;i=b;return}function dU(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;d=i;i=i+24|0;e=d|0;f=c[13898]|0;g=f+1|0;c[13898]=g;h=c[8272]|0;if((g|0)>=(h|0)){i=d;return}j=c[1054]|0;k=(a[j+(g*40&-1)|0]&1)==0;L2594:do{if(k){l=g}else{m=c[j+(g*40&-1)+36>>2]|0;n=j+(g*40&-1)+32|0;o=c[10036]|0;p=0;while(1){if((p|0)>=(m|0)){q=1921;break}if((a[o+((c[n>>2]|0)+p|0)|0]|0)==(a[p+103664|0]|0)){p=p+1|0}else{break}}do{if((q|0)==1921){if((p|0)!=1){break}i=d;return}}while(0);if(k){l=g;break}p=c[j+(g*40&-1)+36>>2]|0;n=j+(g*40&-1)+32|0;o=c[10036]|0;m=0;while(1){if((m|0)>=(p|0)){q=1926;break}if((a[o+((c[n>>2]|0)+m|0)|0]|0)==(a[m+202112|0]|0)){m=m+1|0}else{q=1927;break}}if((q|0)==1926){if((m|0)!=1){q=1927}}if((q|0)==1927){if(k){l=g;break}n=c[j+(g*40&-1)+36>>2]|0;o=j+(g*40&-1)+32|0;p=c[10036]|0;r=0;while(1){if((r|0)>=(n|0)){break}if((a[p+((c[o>>2]|0)+r|0)|0]|0)==(a[r+129568|0]|0)){r=r+1|0}else{l=g;break L2594}}if((r|0)!=1){l=g;break}}o=f+2|0;c[13898]=o;l=o}}while(0);L2618:do{if((l|0)<(h|0)){f=(a[j+(l*40&-1)|0]&1)==0;do{if(!f){g=c[j+(l*40&-1)+36>>2]|0;k=j+(l*40&-1)+32|0;o=c[10036]|0;p=0;while(1){if((p|0)>=(g|0)){q=1938;break}if((a[o+((c[k>>2]|0)+p|0)|0]|0)==(a[p+103664|0]|0)){p=p+1|0}else{q=1939;break}}if((q|0)==1938){if((p|0)==1|f^1){break L2618}else{break}}else if((q|0)==1939){if(f){break}else{break L2618}}}}while(0);f=is(e)|0;r=c[f>>2]|0;if((r|0)==3){k=c[f+8>>2]|0;uz(k,0)}else if(!((r|0)==1|(r|0)==2)){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}r=e|0;if((c[r>>2]|0)==3){uu(c[e+8>>2]|0);c[r>>2]=1}c[13898]=(c[13898]|0)+1;i=d;return}}while(0);if((b|0)==0){uf(l,136616,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{uf(l,138312,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function dV(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;b=i;d=c[13898]|0;e=d+1|0;c[13898]=e;f=c[8272]|0;g=(e|0)<(f|0);L2642:do{if(g){h=c[1054]|0;j=(a[h+(e*40&-1)|0]&1)==0;if(!j){k=c[h+(e*40&-1)+36>>2]|0;l=h+(e*40&-1)+32|0;n=c[10036]|0;o=0;while(1){if((o|0)>=(k|0)){p=1958;break}if((a[n+((c[l>>2]|0)+o|0)|0]|0)==(a[o+103664|0]|0)){o=o+1|0}else{p=1959;break}}if((p|0)==1959){if(!j){p=1960}}else if((p|0)==1958){if(!((o|0)==1|j)){p=1960}}L2652:do{if((p|0)==1960){l=c[h+(e*40&-1)+36>>2]|0;n=h+(e*40&-1)+32|0;k=c[10036]|0;q=0;while(1){if((q|0)>=(l|0)){break}if((a[k+((c[n>>2]|0)+q|0)|0]|0)==(a[q+124624|0]|0)){q=q+1|0}else{break L2652}}if((q|0)!=1){break}n=c[14128]|0;if((n|0)==0){r=e}else{k=n;while(1){n=k+12|0;l=c[n>>2]|0;if((l|0)!=0){uu(l);c[n>>2]=0}n=c[k+24>>2]|0;uu(k);if((n|0)==0){break}else{k=n}}r=c[13898]|0}c[14128]=0;c[13898]=r+1;i=b;return}}while(0);if(!g){s=0;t=e;break}}h=c[1054]|0;j=(a[h+(e*40&-1)|0]&1)==0;if(j){s=0;t=e;break}o=c[h+(e*40&-1)+36>>2]|0;k=h+(e*40&-1)+32|0;h=c[10036]|0;q=0;while(1){if((q|0)>=(o|0)){p=1975;break}if((a[h+((c[k>>2]|0)+q|0)|0]|0)==(a[q+103664|0]|0)){q=q+1|0}else{break}}if((p|0)==1975){if((q|0)==1){s=0;t=e;break}}if(!((o|0)>0&(j^1))){s=0;t=e;break}h=c[10036]|0;n=0;l=0;u=c[k>>2]|0;while(1){if((a[n+133296|0]|0)==(a[h+(n+u|0)|0]|0)){w=u;x=l}else{if((n|0)!=3){s=0;t=e;break L2642}w=u-1|0;x=1}y=n+1|0;if((y|0)<(x+o|0)){n=y;l=x;u=w}else{break}}if((x|0)==0){if(!((n|0)==2|(n|0)==10)){s=0;t=e;break}}u=d+2|0;c[13898]=u;s=1;t=u}else{s=0;t=e}}while(0);L2689:do{if((t|0)<(f|0)){e=c[1054]|0;L2691:do{if((a[e+(t*40&-1)|0]&1)==0){z=c[10036]|0;A=e+(t*40&-1)+32|0}else{d=c[e+(t*40&-1)+36>>2]|0;x=e+(t*40&-1)+32|0;w=c[10036]|0;g=0;while(1){if((g|0)>=(d|0)){break}if((a[w+((c[x>>2]|0)+g|0)|0]|0)==(a[g+103664|0]|0)){g=g+1|0}else{z=w;A=x;break L2691}}if((g|0)==1){B=0;C=t;D=f;break L2689}else{z=w;A=x}}}while(0);e=z+(c[A>>2]|0)|0;n=e;d=(a8(e|0,32)|0)-n|0;do{if((d|0)<0){r=(a8(e|0,0)|0)-n|0;if((r|0)>=0){E=r;break}r=c[m>>2]|0;cf(r|0,131904,(v=i,i=i+16|0,c[v>>2]=130592,c[v+8>>2]=754,v)|0);i=b;return}else{E=d}}while(0);d=E+1|0;n=ut(d)|0;do{if((n|0)==0){gk();e=ut(d)|0;if((e|0)!=0){F=e;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=129544,v)|0)}else{F=n}}while(0);n=c[13898]|0;d=c[1054]|0;e=a[d+(n*40&-1)|0]|0;do{if((e&1)==0){p=2e3}else{r=c[d+(n*40&-1)+32>>2]|0;u=c[10036]|0;l=a[u+r|0]|0;if(!((l<<24>>24|0)==39|(l<<24>>24|0)==34)){p=2e3;break}l=(c[d+(n*40&-1)+36>>2]|0)-2|0;L2711:do{if((l|0)>0){o=r;h=0;k=u;while(1){j=o+1|0;q=h+1|0;a[F+h|0]=a[k+j|0]|0;if((q|0)==(l|0)){G=l;break L2711}o=j;h=q;k=c[10036]|0}}else{G=0}}while(0);a[F+G|0]=0;if((a[(c[10036]|0)+(c[(c[1054]|0)+(n*40&-1)+32>>2]|0)|0]|0)==34){ua(F);break}else{H=F;I=F}while(1){l=a[I]|0;if((l<<24>>24|0)==0){break}else if((l<<24>>24|0)==39){u=I+1|0;r=(a[u]|0)==39?u:I;J=r;K=a[r]|0}else{J=I;K=l}a[H]=K;H=H+1|0;I=J+1|0}a[H]=0}}while(0);L2724:do{if((p|0)==2e3){if((n|0)<(c[8272]|0)){L=F;M=n;N=d;O=e}else{break}while(1){l=c[N+(M*40&-1)+36>>2]|0;r=N+(M*40&-1)+32|0;L2728:do{if((O&1)!=0){u=c[10036]|0;x=0;while(1){if((x|0)>=(l|0)){break}if((a[u+((c[r>>2]|0)+x|0)|0]|0)==(a[x+103664|0]|0)){x=x+1|0}else{break L2728}}if((x|0)==1){break L2724}}}while(0);u=c[r>>2]|0;w=0;while(1){g=w+1|0;a[L+w|0]=a[(c[10036]|0)+u|0]|0;if((g|0)==(l|0)){break}u=u+1|0;w=g}a[L+l|0]=0;w=c[13898]|0;u=c[1054]|0;r=c[u+(w*40&-1)+36>>2]|0;g=a[(c[10036]|0)+((c[u+(w*40&-1)+32>>2]|0)+r|0)|0]|0;if((g<<24>>24|0)==32|(g<<24>>24|0)==9|(g<<24>>24|0)==0){break L2724}g=w+1|0;c[13898]=g;if((g|0)>=(c[8272]|0)){break L2724}L=L+r|0;M=g;N=u;O=a[u+(g*40&-1)|0]|0}}}while(0);e=(c[13898]|0)+1|0;c[13898]=e;B=F;C=e;D=c[8272]|0}else{B=0;C=t;D=f}}while(0);L2743:do{if((C|0)<(D|0)){f=c[1054]|0;L2745:do{if((a[f+(C*40&-1)|0]&1)==0){P=c[10036]|0}else{t=c[f+(C*40&-1)+36>>2]|0;F=f+(C*40&-1)+32|0;O=c[10036]|0;N=0;while(1){if((N|0)>=(t|0)){break}if((a[O+((c[F>>2]|0)+N|0)|0]|0)==(a[N+103664|0]|0)){N=N+1|0}else{P=O;break L2745}}if((N|0)==1){Q=0;break L2743}else{P=O}}}while(0);f=(uA(P|0)|0)+1|0;F=ut(f)|0;do{if((F|0)==0){gk();t=ut(f)|0;if((t|0)!=0){R=t;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=128272,v)|0)}else{R=F}}while(0);F=c[13898]|0;f=c[1054]|0;t=a[f+(F*40&-1)|0]|0;do{if((t&1)!=0){M=c[f+(F*40&-1)+32>>2]|0;L=c[10036]|0;p=a[L+M|0]|0;if(!((p<<24>>24|0)==39|(p<<24>>24|0)==34)){break}p=(c[f+(F*40&-1)+36>>2]|0)-2|0;L2760:do{if((p|0)>0){H=M;J=0;I=L;while(1){K=H+1|0;G=J+1|0;a[R+J|0]=a[I+K|0]|0;if((G|0)==(p|0)){S=p;break L2760}H=K;J=G;I=c[10036]|0}}else{S=0}}while(0);a[R+S|0]=0;if((a[(c[10036]|0)+(c[(c[1054]|0)+(F*40&-1)+32>>2]|0)|0]|0)==34){ua(R)}else{p=R;L=R;while(1){M=a[L]|0;if((M<<24>>24|0)==39){O=L+1|0;N=(a[O]|0)==39?O:L;T=N;U=a[N]|0}else if((M<<24>>24|0)==0){break}else{T=L;U=M}a[p]=U;p=p+1|0;L=T+1|0}a[p]=0}c[13898]=(c[13898]|0)+1;Q=R;break L2743}}while(0);if((F|0)<(c[8272]|0)){V=R;W=F;X=f;Y=t}else{Q=R;break}while(1){L=c[X+(W*40&-1)+36>>2]|0;M=X+(W*40&-1)+32|0;L2777:do{if((Y&1)!=0){N=c[10036]|0;O=0;while(1){if((O|0)>=(L|0)){break}if((a[N+((c[M>>2]|0)+O|0)|0]|0)==(a[O+103664|0]|0)){O=O+1|0}else{break L2777}}if((O|0)==1){Q=R;break L2743}}}while(0);p=c[M>>2]|0;N=0;while(1){I=N+1|0;a[V+N|0]=a[(c[10036]|0)+p|0]|0;if((I|0)==(L|0)){break}p=p+1|0;N=I}a[V+L|0]=0;N=c[13898]|0;p=c[1054]|0;M=c[p+(N*40&-1)+36>>2]|0;I=V+M|0;J=a[(c[10036]|0)+((c[p+(N*40&-1)+32>>2]|0)+M|0)|0]|0;if((J<<24>>24|0)==32|(J<<24>>24|0)==9|(J<<24>>24|0)==0){J=V+(M+1|0)|0;a[I]=32;a[J]=0;Z=J;_=c[13898]|0}else{Z=I;_=N}N=_+1|0;c[13898]=N;if((N|0)>=(c[8272]|0)){Q=R;break L2743}I=c[1054]|0;V=Z;W=N;X=I;Y=a[I+(N*40&-1)|0]|0}}else{Q=0}}while(0);hR(B,Q,s);i=b;return}function dW(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;b=i;i=i+32|0;d=b|0;e=b+24|0;c[e>>2]=0;f=(c[13898]|0)+1|0;c[13898]=f;L2795:do{if((f|0)<(c[8272]|0)){g=c[1054]|0;L2797:do{if((a[g+(f*40&-1)|0]&1)!=0){h=c[g+(f*40&-1)+36>>2]|0;j=g+(f*40&-1)+32|0;k=c[10036]|0;l=0;while(1){if((l|0)>=(h|0)){break}if((a[k+((c[j>>2]|0)+l|0)|0]|0)==(a[l+103664|0]|0)){l=l+1|0}else{break L2797}}if((l|0)==1){break L2795}}}while(0);a[14176]=1;is(d);a[14176]=0;if((c[d>>2]|0)!=3){c[13898]=f;break}g=c[d+8>>2]|0;c[e>>2]=g;if((g|0)!=0){iQ(e);g=c[e>>2]|0;hw(hA(g,193632)|0,g,1);i=b;return}m=c[13898]|0;uf(m,149040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);c[e>>2]=0;m=f;uf(m,149040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}function dX(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;b=i;i=i+32|0;d=b|0;e=b+24|0;c[e>>2]=0;f=(c[13898]|0)+1|0;c[13898]=f;L2814:do{if((f|0)<(c[8272]|0)){g=c[1054]|0;L2816:do{if((a[g+(f*40&-1)|0]&1)!=0){h=c[g+(f*40&-1)+36>>2]|0;j=g+(f*40&-1)+32|0;k=c[10036]|0;l=0;while(1){if((l|0)>=(h|0)){break}if((a[k+((c[j>>2]|0)+l|0)|0]|0)==(a[l+103664|0]|0)){l=l+1|0}else{break L2816}}if((l|0)==1){break L2814}}}while(0);a[14176]=1;is(d);a[14176]=0;if((c[d>>2]|0)!=3){c[13898]=f;break}g=c[d+8>>2]|0;c[e>>2]=g;if((g|0)==0){m=c[13898]|0;uf(m,124592,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}iQ(e);g=c[e>>2]|0;if((bY(g|0)|0)==0){e7(5);uu(g);i=b;return}else{uf(c[13898]|0,123232,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);c[e>>2]=0;m=f;uf(m,124592,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}function dY(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0.0;if((a[14080]&1)==0){lk()}do{if(a[14088]|0){if((a[33512]&1)==0){break}if(!(a[13032]|0)){break}b=c[(c[3524]|0)+104>>2]|0;if((b|0)!=0){cS[b&511]()}a[13032]=0}else{cS[c[(c[3524]|0)+52>>2]&511]();a[14088]=1}}while(0);cM[c[(c[3524]|0)+168>>2]&511](0);b=c[3524]|0;if((c[b+96>>2]&16|0)!=0){c[7271]=-1}c[13880]=0;d=b+8|0;c[13881]=(c[d>>2]|0)-1;c[13882]=0;e=b+12|0;c[13883]=(c[e>>2]|0)-1;if((a[33512]&1)==0){lh();a[25280]=0;f=c[13898]|0;h=f+1|0;c[13898]=h;return}i=c[b+108>>2]|0;if((i|0)==0){lh();a[25280]=0;f=c[13898]|0;h=f+1|0;c[13898]=h;return}j=+((c[d>>2]|0)>>>0>>>0);k=+((c[e>>2]|0)>>>0>>>0);cI[i&63](0,~~(+g[184]*j),~~(+g[44]*k),~~(j*+g[178]),~~(k*+g[38]));lh();a[25280]=0;f=c[13898]|0;h=f+1|0;c[13898]=h;return}function dZ(){var a=0;a=i;c[13898]=(c[13898]|0)+1;uh(-1,116984,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);i=a;return}function d_(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;b=i;i=i+24|0;d=b|0;e=(c[13898]|0)+1|0;c[13898]=e;L2860:do{if((e|0)<(c[8272]|0)){f=c[1054]|0;L2862:do{if((a[f+(e*40&-1)|0]&1)!=0){g=c[f+(e*40&-1)+36>>2]|0;h=f+(e*40&-1)+32|0;j=c[10036]|0;k=0;while(1){if((k|0)>=(g|0)){break}if((a[j+((c[h>>2]|0)+k|0)|0]|0)==(a[k+103664|0]|0)){k=k+1|0}else{break L2862}}if((k|0)==1){l=e;break L2860}}}while(0);a[14176]=1;is(d);a[14176]=0;if((c[d>>2]|0)!=3){c[13898]=e;l=e;break}f=c[d+8>>2]|0;if((f|0)==0){l=c[13898]|0;break}else{dL(f);i=b;return}}else{l=e}}while(0);uf(l,122e3,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}function d$(){var b=0,d=0,e=0,f=0,g=0;b=(c[13898]|0)+1|0;if((c[8272]|0)<=(b|0)){c[13484]=1;return}d=c[1054]|0;if((a[d+(b*40&-1)|0]&1)==0){c[13484]=1;return}e=c[d+(b*40&-1)+36>>2]|0;f=d+(b*40&-1)+32|0;b=c[10036]|0;d=0;while(1){if((d|0)>=(e|0)){break}if((a[b+((c[f>>2]|0)+d|0)|0]|0)==(a[d+78208|0]|0)){d=d+1|0}else{g=2133;break}}if((g|0)==2133){c[13484]=1;return}if((d|0)==7){bd(0)}else{c[13484]=1;return}}function d0(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;b=i;i=i+24|0;d=b|0;e=(c[13898]|0)+1|0;c[13898]=e;if((c[8272]|0)<=(e|0)){uf(e,116032,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=c[1054]|0;if((a[f+(e*40&-1)|0]&1)==0){uf(e,116032,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=c[f+(e*40&-1)+36>>2]|0;j=f+(e*40&-1)+32|0;f=c[10036]|0;k=0;while(1){if((k|0)>=(g|0)){break}if((a[f+((c[j>>2]|0)+k|0)|0]|0)==(a[k+199040|0]|0)){k=k+1|0}else{l=2234;break}}if((l|0)==2234){uf(e,116032,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((k|0)!=1){uf(e,116032,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=is(d)|0;k=c[e>>2]|0;if((k|0)==1){m=+(c[e+8>>2]|0)}else if((k|0)==3){m=+uz(c[e+8>>2]|0,0)}else if((k|0)==2){m=+h[e+8>>3]}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=d|0;if((c[e>>2]|0)==3){uu(c[d+8>>2]|0);c[e>>2]=1}e=c[13898]|0;d=c[8272]|0;k=(d|0)>(e|0);L2917:do{if(k){j=c[1054]|0;if((a[j+(e*40&-1)|0]&1)==0){break}f=c[j+(e*40&-1)+36>>2]|0;g=j+(e*40&-1)+32|0;n=c[10036]|0;o=0;while(1){if((o|0)>=(f|0)){break}if((a[n+((c[g>>2]|0)+o|0)|0]|0)==(a[o+126728|0]|0)){o=o+1|0}else{break L2917}}if((o|0)!=1){break}f=c[g>>2]|0;p=e+1|0;c[13898]=p;q=1;r=p;while(1){if((r|0)>=(d|0)){l=2159;break}L2928:do{if((a[j+(r*40&-1)|0]&1)==0){l=2166}else{p=c[j+(r*40&-1)+36>>2]|0;s=j+(r*40&-1)+32|0;t=0;while(1){if((t|0)>=(p|0)){break}if((a[n+((c[s>>2]|0)+t|0)|0]|0)==(a[t+126728|0]|0)){t=t+1|0}else{l=2166;break L2928}}if((t|0)!=1){l=2166;break}u=q+1|0}}while(0);if((l|0)==2166){l=0;L2937:do{if((a[j+(r*40&-1)|0]&1)==0){w=0}else{s=c[j+(r*40&-1)+36>>2]|0;p=j+(r*40&-1)+32|0;x=0;while(1){if((x|0)>=(s|0)){break}if((a[n+((c[p>>2]|0)+x|0)|0]|0)==(a[x+125616|0]|0)){x=x+1|0}else{w=0;break L2937}}w=((x|0)==1)<<31>>31}}while(0);u=w+q|0}p=r+1|0;if((u|0)==0){y=p;break}else{q=u;r=p}}if((l|0)==2159){y=r+1|0}q=c[j+(r*40&-1)+32>>2]|0;c[13898]=y;L2948:do{if((d|0)>(y|0)){if((a[j+(y*40&-1)|0]&1)==0){z=0;A=0;B=y;break}g=c[j+(y*40&-1)+36>>2]|0;o=j+(y*40&-1)+32|0;p=0;while(1){if((p|0)>=(g|0)){break}if((a[n+((c[o>>2]|0)+p|0)|0]|0)==(a[p+200904|0]|0)){p=p+1|0}else{z=0;A=0;B=y;break L2948}}if((p|0)!=4){z=0;A=0;B=y;break}o=y+1|0;c[13898]=o;if((d|0)<=(o|0)){uf(o,114208,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((a[j+(o*40&-1)|0]&1)==0){uf(o,114208,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=c[j+(o*40&-1)+36>>2]|0;s=j+(o*40&-1)+32|0;t=0;while(1){if((t|0)>=(g|0)){break}if((a[n+((c[s>>2]|0)+t|0)|0]|0)==(a[t+126728|0]|0)){t=t+1|0}else{l=2242;break}}if((l|0)==2242){uf(o,114208,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((t|0)!=1){uf(o,114208,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=c[s>>2]|0;p=y+2|0;c[13898]=p;C=1;D=p;while(1){if((D|0)>=(d|0)){l=2188;break}L2974:do{if((a[j+(D*40&-1)|0]&1)==0){l=2195}else{p=c[j+(D*40&-1)+36>>2]|0;E=j+(D*40&-1)+32|0;F=0;while(1){if((F|0)>=(p|0)){break}if((a[n+((c[E>>2]|0)+F|0)|0]|0)==(a[F+126728|0]|0)){F=F+1|0}else{l=2195;break L2974}}if((F|0)!=1){l=2195;break}G=C+1|0}}while(0);if((l|0)==2195){l=0;L2983:do{if((a[j+(D*40&-1)|0]&1)==0){H=0}else{x=c[j+(D*40&-1)+36>>2]|0;E=j+(D*40&-1)+32|0;p=0;while(1){if((p|0)>=(x|0)){break}if((a[n+((c[E>>2]|0)+p|0)|0]|0)==(a[p+125616|0]|0)){p=p+1|0}else{H=0;break L2983}}H=((p|0)==1)<<31>>31}}while(0);G=H+C|0}E=D+1|0;if((G|0)==0){I=E;break}else{C=G;D=E}}if((l|0)==2188){I=D+1|0}C=c[j+(D*40&-1)+32>>2]|0;c[13898]=I;z=C;A=g;B=I}else{z=0;A=0;B=y}}while(0);j=m!=0.0;n=j?f:A;a[37480]=j&1;r=(A|0)==0;a[37464]=r&1;c[13544]=(c[13544]|0)+1;if(j|r^1){r=(j?q:z)-n|0;j=ut(r)|0;do{if((j|0)==0){gk();C=ut(r)|0;if((C|0)!=0){J=C;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=110688,v)|0)}else{J=j}}while(0);uD(J|0,(c[10036]|0)+(n+1|0)|0,r);a[J+(r-1|0)|0]=0;dL(J);K=c[13898]|0}else{K=B}c[13898]=K-1;i=b;return}}while(0);if((c[13544]|0)>0){uf(e,107896,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[9368]=(c[9368]|0)+1;if(m!=0.0){K=d-1|0;B=c[1054]|0;J=(c[B+(K*40&-1)+36>>2]|0)+(c[B+(K*40&-1)+32>>2]|0)|0;K=e-1|0;c[13898]=K;c[B+(K*40&-1)+36>>2]=1;K=J+2|0;c[(c[1054]|0)+((c[13898]|0)*40&-1)+32>>2]=K;a[(c[10036]|0)+K|0]=59;a[(c[10036]|0)+(J+3|0)|0]=0;a[37480]=1;i=b;return}L3011:do{if(k){J=e;L3012:while(1){L3014:do{if((J|0)<(d|0)){K=c[1054]|0;B=J;while(1){L3018:do{if((a[K+(B*40&-1)|0]&1)==0){l=2221}else{z=c[K+(B*40&-1)+36>>2]|0;A=K+(B*40&-1)+32|0;y=c[10036]|0;I=0;while(1){if((I|0)>=(z|0)){break}if((a[y+((c[A>>2]|0)+I|0)|0]|0)==(a[I+103664|0]|0)){I=I+1|0}else{l=2221;break L3018}}A=B+1|0;c[13898]=A;if((I|0)==1){L=A;break L3014}else{M=A}}}while(0);if((l|0)==2221){l=0;p=B+1|0;c[13898]=p;M=p}if((M|0)<(d|0)){B=M}else{N=M;l=2216;break}}}else{N=J;l=2216}}while(0);if((l|0)==2216){l=0;g=N+1|0;c[13898]=g;L=g}L3030:do{if((d|0)>(L|0)){g=c[1054]|0;if((a[g+(L*40&-1)|0]&1)==0){break}D=c[g+(L*40&-1)+36>>2]|0;B=g+(L*40&-1)+32|0;g=c[10036]|0;K=0;while(1){if((K|0)>=(D|0)){break}if((a[g+((c[B>>2]|0)+K|0)|0]|0)==(a[K+200904|0]|0)){K=K+1|0}else{break L3030}}if((K|0)==4){break L3012}}}while(0);if((L|0)<(d|0)){J=L}else{break L3011}}a[37480]=0;c[13898]=L-1;i=b;return}}while(0);c[8272]=0;c[13898]=0;i=b;return}function d1(){return}function d2(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0;b=i;d=c[13898]|0;e=d+1|0;f=c[8272]|0;L3044:do{if((f|0)>(e|0)){g=c[1054]|0;if((a[g+(e*40&-1)|0]&1)==0){break}h=c[g+(e*40&-1)+36>>2]|0;j=g+(e*40&-1)+32|0;k=c[10036]|0;l=0;while(1){if((l|0)>=(h|0)){break}if((a[k+((c[j>>2]|0)+l|0)|0]|0)==(a[l+126728|0]|0)){l=l+1|0}else{break L3044}}if((l|0)!=1){break}if((a[37464]&1)==0){uf(d,106968,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}a[37464]=0;c[13898]=e;h=c[j>>2]|0;m=d+2|0;c[13898]=m;n=1;o=m;while(1){if((o|0)>=(f|0)){p=2256;break}L3058:do{if((a[g+(o*40&-1)|0]&1)==0){p=2263}else{m=c[g+(o*40&-1)+36>>2]|0;q=g+(o*40&-1)+32|0;r=0;while(1){if((r|0)>=(m|0)){break}if((a[k+((c[q>>2]|0)+r|0)|0]|0)==(a[r+126728|0]|0)){r=r+1|0}else{p=2263;break L3058}}if((r|0)!=1){p=2263;break}s=n+1|0}}while(0);if((p|0)==2263){p=0;L3067:do{if((a[g+(o*40&-1)|0]&1)==0){t=0}else{q=c[g+(o*40&-1)+36>>2]|0;m=g+(o*40&-1)+32|0;u=0;while(1){if((u|0)>=(q|0)){break}if((a[k+((c[m>>2]|0)+u|0)|0]|0)==(a[u+125616|0]|0)){u=u+1|0}else{t=0;break L3067}}t=((u|0)==1)<<31>>31}}while(0);s=t+n|0}m=o+1|0;if((s|0)==0){w=m;break}else{n=s;o=m}}if((p|0)==2256){w=o+1|0}n=c[g+(o*40&-1)+32>>2]|0;c[13898]=w-1;c[13544]=(c[13544]|0)+1;if((a[37480]&1)!=0){i=b;return}k=n-h|0;n=ut(k)|0;do{if((n|0)==0){gk();j=ut(k)|0;if((j|0)!=0){x=j;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=110688,v)|0)}else{x=n}}while(0);uD(x|0,(c[10036]|0)+(h+1|0)|0,k);a[x+(k-1|0)|0]=0;dL(x);i=b;return}}while(0);x=c[9368]|0;if((x|0)<1){uf(d,106008,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[9368]=x-1;if((a[37480]&1)==0){x=c[1054]|0;w=c[x+(d*40&-1)+32>>2]|0;c[x+(d*40&-1)+36>>2]=1;a[(c[10036]|0)+w|0]=59;a[(c[10036]|0)+(w+1|0)|0]=32;a[(c[10036]|0)+(w+2|0)|0]=32;a[(c[10036]|0)+(w+3|0)|0]=32;a[37480]=1;i=b;return}else{c[8272]=0;c[13898]=0;i=b;return}}function d3(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,x=0;b=i;c[13898]=(c[13898]|0)+1;d=iw()|0;e=c[13898]|0;f=c[8272]|0;if((f|0)<=(e|0)){uf(e,104920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=c[1054]|0;if((a[g+(e*40&-1)|0]&1)==0){uf(e,104920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}h=c[g+(e*40&-1)+36>>2]|0;j=g+(e*40&-1)+32|0;k=c[10036]|0;l=0;while(1){if((l|0)>=(h|0)){break}if((a[k+((c[j>>2]|0)+l|0)|0]|0)==(a[l+126728|0]|0)){l=l+1|0}else{m=2323;break}}if((m|0)==2323){uf(e,104920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((l|0)!=1){uf(e,104920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}l=c[j>>2]|0;j=e+1|0;c[13898]=j;e=1;h=j;while(1){if((h|0)>=(f|0)){m=2295;break}L3114:do{if((a[g+(h*40&-1)|0]&1)==0){m=2302}else{j=c[g+(h*40&-1)+36>>2]|0;n=g+(h*40&-1)+32|0;o=0;while(1){if((o|0)>=(j|0)){break}if((a[k+((c[n>>2]|0)+o|0)|0]|0)==(a[o+126728|0]|0)){o=o+1|0}else{m=2302;break L3114}}if((o|0)!=1){m=2302;break}p=e+1|0}}while(0);if((m|0)==2302){m=0;L3123:do{if((a[g+(h*40&-1)|0]&1)==0){q=0}else{n=c[g+(h*40&-1)+36>>2]|0;j=g+(h*40&-1)+32|0;r=0;while(1){if((r|0)>=(n|0)){break}if((a[k+((c[j>>2]|0)+r|0)|0]|0)==(a[r+125616|0]|0)){r=r+1|0}else{q=0;break L3123}}q=((r|0)==1)<<31>>31}}while(0);p=q+e|0}j=h+1|0;if((p|0)==0){s=j;break}else{e=p;h=j}}if((m|0)==2295){s=h+1|0}m=c[g+(h*40&-1)+32>>2]|0;c[13544]=(c[13544]|0)+1;c[13898]=s-1;s=m-l|0;m=s+2|0;h=ut(m)|0;do{if((h|0)==0){gk();g=ut(m)|0;if((g|0)!=0){t=g;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=110688,v)|0)}else{t=h}}while(0);uD(t|0,(c[10036]|0)+(l+1|0)|0,s);a[t+(s-1|0)|0]=0;s=(d|0)==0;do{if(!s){if((a[d+38|0]&1)==0){break}l=t;w=59;a[l]=w&255;w=w>>8;a[l+1|0]=w&255}}while(0);l=(t|0)==0;do{if(l){u=0}else{u=bP(t|0)|0}dL(u);}while(ix(d)|0);uu(t);if(s){i=b;return}else{x=d}while(1){d=c[x>>2]|0;uu(c[x+12>>2]|0);uu(x);if((d|0)==0){break}else{x=d}}i=b;return}function d4(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0.0;b=i;i=i+48|0;d=b|0;e=b+24|0;f=(c[13898]|0)+1|0;c[13898]=f;g=is(e)|0;j=c[g>>2]|0;if((j|0)==1){k=+(c[g+8>>2]|0)}else if((j|0)==2){k=+h[g+8>>3]}else if((j|0)==3){k=+uz(c[g+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=e|0;if((c[g>>2]|0)==3){uu(c[e+8>>2]|0);c[g>>2]=1}g=c[13898]|0;e=c[8272]|0;if((e|0)<=(g|0)){uf(g,104360,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}j=c[1054]|0;if((a[j+(g*40&-1)|0]&1)==0){uf(g,104360,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}l=c[j+(g*40&-1)+36>>2]|0;m=j+(g*40&-1)+32|0;n=c[10036]|0;o=0;while(1){if((o|0)>=(l|0)){break}if((a[n+((c[m>>2]|0)+o|0)|0]|0)==(a[o+126728|0]|0)){o=o+1|0}else{p=2374;break}}if((p|0)==2374){uf(g,104360,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((o|0)!=1){uf(g,104360,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}o=c[m>>2]|0;m=g+1|0;c[13898]=m;g=1;l=m;while(1){if((l|0)>=(e|0)){p=2344;break}L3181:do{if((a[j+(l*40&-1)|0]&1)==0){p=2351}else{m=c[j+(l*40&-1)+36>>2]|0;q=j+(l*40&-1)+32|0;r=0;while(1){if((r|0)>=(m|0)){break}if((a[n+((c[q>>2]|0)+r|0)|0]|0)==(a[r+126728|0]|0)){r=r+1|0}else{p=2351;break L3181}}if((r|0)!=1){p=2351;break}s=g+1|0}}while(0);if((p|0)==2351){p=0;L3190:do{if((a[j+(l*40&-1)|0]&1)==0){t=0}else{q=c[j+(l*40&-1)+36>>2]|0;m=j+(l*40&-1)+32|0;u=0;while(1){if((u|0)>=(q|0)){break}if((a[n+((c[m>>2]|0)+u|0)|0]|0)==(a[u+125616|0]|0)){u=u+1|0}else{t=0;break L3190}}t=((u|0)==1)<<31>>31}}while(0);s=t+g|0}m=l+1|0;if((s|0)==0){w=m;break}else{g=s;l=m}}if((p|0)==2344){w=l+1|0}s=(c[j+(l*40&-1)+32>>2]|0)-o|0;l=ut(s)|0;do{if((l|0)==0){gk();j=ut(s)|0;if((j|0)!=0){x=j;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=110688,v)|0)}else{x=l}}while(0);uD(x|0,(c[10036]|0)+(o+1|0)|0,s);a[x+(s-1|0)|0]=0;c[13544]=(c[13544]|0)+1;if(k==0.0){uu(x);c[13898]=w;i=b;return}s=d|0;o=d+8|0;while(1){dL(bP(x|0)|0);c[13898]=f;l=is(d)|0;j=c[l>>2]|0;if((j|0)==1){y=+(c[l+8>>2]|0)}else if((j|0)==3){y=+uz(c[l+8>>2]|0,0)}else if((j|0)==2){y=+h[l+8>>3]}else{p=2367;break}if((c[s>>2]|0)==3){uu(c[o>>2]|0);c[s>>2]=1}if(y==0.0){p=2377;break}}if((p|0)==2377){uu(x);c[13898]=w;i=b;return}else if((p|0)==2367){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function d5(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,o=0;b=i;i=i+32|0;d=b|0;e=b+24|0;f=(c[13898]|0)+1|0;c[13898]=f;L3222:do{if((f|0)<(c[8272]|0)){g=c[1054]|0;L3224:do{if((a[g+(f*40&-1)|0]&1)!=0){h=c[g+(f*40&-1)+36>>2]|0;j=g+(f*40&-1)+32|0;k=c[10036]|0;l=0;while(1){if((l|0)>=(h|0)){break}if((a[k+((c[j>>2]|0)+l|0)|0]|0)==(a[l+103664|0]|0)){l=l+1|0}else{break L3224}}if((l|0)==1){break L3222}}}while(0);a[14176]=1;is(d);a[14176]=0;if((c[d>>2]|0)!=3){c[13898]=f;break}g=c[d+8>>2]|0;c[e>>2]=g;if((g|0)==0){m=c[13898]|0;uf(m,149040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}iQ(e);g=c[e>>2]|0;if((aY(g|0,202112)|0)==0){o=c[n>>2]|0;hw(o,g,0);i=b;return}else{o=hA(g,193632)|0;hw(o,g,0);i=b;return}}}while(0);c[e>>2]=0;m=f;uf(m,149040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}function d6(){var b=0;b=c[13898]|0;c[13898]=b+1;c[7738]=b;a[30664]=0;hY(1);a[(e6(159824)|0)+8|0]=1;a[(e6(159208)|0)+8|0]=1;a[(e6(158720)|0)+8|0]=1;a[(e6(158096)|0)+8|0]=1;a[(e6(164136)|0)+8|0]=1;a[(e6(156232)|0)+8|0]=1;a[(e6(155120)|0)+8|0]=1;a[(e6(154768)|0)+8|0]=1;iS();return}function d7(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;b=i;i=i+24|0;d=b|0;if((c[7262]|0)==0){c[7262]=c[m>>2]}a[25280]=0;e=d|0;f=d+8|0;g=0;h=c[13898]|0;L3250:while(1){c[13898]=h+1;is(d);do{if((c[e>>2]|0)==3){j=c[f>>2]|0;k=c[7262]|0;aK(j|0,k|0);if((c[e>>2]|0)!=3){l=0;break}uu(c[f>>2]|0);c[e>>2]=1;l=0}else{if((g|0)!=0){k=c[7262]|0;aF(32,k|0)}j5(c[7262]|0,d,0);l=1}}while(0);k=c[13898]|0;if((k|0)>=(c[8272]|0)){break}j=c[1054]|0;n=(a[j+(k*40&-1)|0]&1)==0;if(n){break}o=c[j+(k*40&-1)+36>>2]|0;p=j+(k*40&-1)+32|0;q=c[10036]|0;r=0;while(1){if((r|0)>=(o|0)){s=2413;break}if((a[q+((c[p>>2]|0)+r|0)|0]|0)==(a[r+103664|0]|0)){r=r+1|0}else{s=2414;break}}if((s|0)==2413){s=0;if((r|0)==1|n){break}}else if((s|0)==2414){s=0;if(n){break}}p=c[j+(k*40&-1)+36>>2]|0;q=j+(k*40&-1)+32|0;o=c[10036]|0;t=0;while(1){if((t|0)>=(p|0)){break}if((a[o+((c[q>>2]|0)+t|0)|0]|0)==(a[t+148464|0]|0)){t=t+1|0}else{break L3250}}if((t|0)==1){g=l;h=k}else{break}}aF(10,c[7262]|0);aD(c[7262]|0);i=b;return}function d8(){c[13898]=(c[13898]|0)+1;dO();return}function d9(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,n=0,p=0,q=0,r=0,s=0.0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0,O=0,P=0;b=i;i=i+48|0;d=b|0;e=b+24|0;f=c[13898]|0;g=f+1|0;c[13898]=g;c[8026]=0;j=c[8272]|0;L3276:do{if((j|0)>(g|0)){k=c[1054]|0;if((a[k+(g*40&-1)|0]&1)==0){l=2487;break}n=c[k+(g*40&-1)+36>>2]|0;p=k+(g*40&-1)+32|0;q=c[10036]|0;r=0;while(1){if((r|0)>=(n|0)){break}if((a[q+((c[p>>2]|0)+r|0)|0]|0)==(a[r+218536|0]|0)){r=r+1|0}else{l=2487;break L3276}}if((r|0)!=5){l=2487;break}p=f+2|0;c[13898]=p;if(!((c[8496]|0)!=0&(c[3524]|0)!=0)){uh(-1,96888,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);s=-1.0;break}L3287:do{if((p|0)<(j|0)){n=0;t=p;while(1){u=t;L3290:while(1){w=(a[k+(u*40&-1)|0]&1)==0;x=c[k+(u*40&-1)+36>>2]|0;y=k+(u*40&-1)+32|0;L3292:do{if(w){z=c[y>>2]|0}else{A=0;while(1){if((A|0)>=(x|0)){l=2434;break}if((a[q+((c[y>>2]|0)+A|0)|0]|0)==(a[A+103664|0]|0)){A=A+1|0}else{break}}if((l|0)==2434){l=0;if((A|0)==1){B=n;break L3287}}C=c[y>>2]|0;if((x|0)>0&(w^1)){D=0;E=0;F=C}else{z=C;break}while(1){if((a[D+101312|0]|0)==(a[q+(D+F|0)|0]|0)){G=F;H=E}else{if((D|0)!=3){z=C;break L3292}G=F-1|0;H=1}I=D+1|0;if((I|0)<(H+x|0)){D=I;E=H;F=G}else{break}}if((H|0)!=0){l=2442;break L3290}if((D|0)==2|(D|0)==8){l=2442;break L3290}else{z=C}}}while(0);J=(j|0)>(u|0);if(!J){B=n;break L3287}if(w){l=2451;break}else{K=0}while(1){if((K|0)>=(x|0)){break}if((a[q+(z+K|0)|0]|0)==(a[K+148464|0]|0)){K=K+1|0}else{l=2450;break L3290}}if((K|0)!=1){l=2450;break}x=u+1|0;c[13898]=x;if((x|0)<(j|0)){u=x}else{B=n;break L3287}}if((l|0)==2450){l=0;if(J){l=2451}else{B=n;break L3287}}else if((l|0)==2442){l=0;x=u+1|0;c[13898]=x;L=n|8;M=x}L3318:do{if((l|0)==2451){l=0;L3320:do{if((a[k+(u*40&-1)|0]&1)!=0){x=c[k+(u*40&-1)+36>>2]|0;w=k+(u*40&-1)+32|0;y=0;while(1){if((y|0)>=(x|0)){break}if((a[q+((c[w>>2]|0)+y|0)|0]|0)==(a[y+100784|0]|0)){y=y+1|0}else{break L3320}}if((y|0)!=3){break}w=u+1|0;c[13898]=w;L=n|63;M=w;break L3318}}while(0);if(!J){B=n;break L3287}if((a[k+(u*40&-1)|0]&1)!=0){w=c[k+(u*40&-1)+36>>2]|0;x=k+(u*40&-1)+32|0;C=0;while(1){if((C|0)>=(w|0)){l=2462;break}if((a[q+((c[x>>2]|0)+C|0)|0]|0)==(a[C+100080|0]|0)){C=C+1|0}else{break}}do{if((l|0)==2462){l=0;if((C|0)!=7){break}x=u+1|0;c[13898]=x;L=n|1;M=x;break L3318}}while(0);if(!J){B=n;break L3287}}L3339:do{if((a[k+(u*40&-1)|0]&1)!=0){C=c[k+(u*40&-1)+36>>2]|0;x=k+(u*40&-1)+32|0;w=0;while(1){if((w|0)>=(C|0)){break}if((a[q+((c[x>>2]|0)+w|0)|0]|0)==(a[w+99640|0]|0)){w=w+1|0}else{break L3339}}if((w|0)!=7){break}x=u+1|0;c[13898]=x;L=n|2;M=x;break L3318}}while(0);if(!J){B=n;break L3287}if((a[k+(u*40&-1)|0]&1)!=0){x=c[k+(u*40&-1)+36>>2]|0;C=k+(u*40&-1)+32|0;y=0;while(1){if((y|0)>=(x|0)){l=2476;break}if((a[q+((c[C>>2]|0)+y|0)|0]|0)==(a[y+99208|0]|0)){y=y+1|0}else{break}}do{if((l|0)==2476){l=0;if((y|0)!=7){break}C=u+1|0;c[13898]=C;L=n|4;M=C;break L3318}}while(0);if(!J){B=n;break L3287}}if((a[k+(u*40&-1)|0]&1)==0){B=n;break L3287}y=c[k+(u*40&-1)+36>>2]|0;C=k+(u*40&-1)+32|0;x=0;while(1){if((x|0)>=(y|0)){break}if((a[q+((c[C>>2]|0)+x|0)|0]|0)==(a[x+98600|0]|0)){x=x+1|0}else{B=n;break L3287}}if((x|0)!=5){B=n;break L3287}C=u+1|0;c[13898]=C;L=n|16;M=C}}while(0);if((M|0)<(j|0)){n=L;t=M}else{B=L;break}}}else{B=0}}while(0);c[8026]=(B|0)==0?7:B;q=e6(163432)|0;a[q+8|0]=0;c[q+16>>2]=1;c[q+24>>2]=-1;q=e6(164136)|0;a[q+8|0]=0;c[q+16>>2]=1;c[q+24>>2]=-1;s=-1.0}else{l=2487}}while(0);do{if((l|0)==2487){B=is(d)|0;L=c[B>>2]|0;if((L|0)==1){N=+(c[B+8>>2]|0)}else if((L|0)==2){N=+h[B+8>>3]}else if((L|0)==3){N=+uz(c[B+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}B=d|0;if((c[B>>2]|0)!=3){s=N;break}uu(c[d+8>>2]|0);c[B>>2]=1;s=N}}while(0);d=c[13898]|0;L3376:do{if((d|0)<(c[8272]|0)){B=c[1054]|0;L3378:do{if((a[B+(d*40&-1)|0]&1)!=0){L=c[B+(d*40&-1)+36>>2]|0;M=B+(d*40&-1)+32|0;j=c[10036]|0;J=0;while(1){if((J|0)>=(L|0)){break}if((a[j+((c[M>>2]|0)+J|0)|0]|0)==(a[J+103664|0]|0)){J=J+1|0}else{break L3378}}if((J|0)==1){l=2500;break L3376}}}while(0);uu(c[8028]|0);B=c[13898]|0;L3385:do{if((B|0)<(c[8272]|0)){M=c[1054]|0;L3387:do{if((a[M+(B*40&-1)|0]&1)!=0){j=c[M+(B*40&-1)+36>>2]|0;L=M+(B*40&-1)+32|0;K=c[10036]|0;z=0;while(1){if((z|0)>=(j|0)){break}if((a[K+((c[L>>2]|0)+z|0)|0]|0)==(a[z+103664|0]|0)){z=z+1|0}else{break L3387}}if((z|0)==1){break L3385}}}while(0);a[14176]=1;is(e);a[14176]=0;if((c[e>>2]|0)!=3){c[13898]=B;break}M=c[e+8>>2]|0;c[8028]=M;if((M|0)!=0){J=c[m>>2]|0;aK(M|0,J|0);O=1;break L3376}P=c[13898]|0;uf(P,132744,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);c[8028]=0;P=B;uf(P,132744,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{l=2500}}while(0);if((l|0)==2500){uu(c[8028]|0);c[8028]=bP(96376)|0;O=0}L3406:do{if(s<0.0){l=c[3524]|0;do{if((l|0)!=0){P=c[l+116>>2]|0;if((P|0)==0){break}cL[P&7]();break L3406}}while(0);l=c[8028]|0;B=uA(l|0)|0;P=c[o>>2]|0;a6(l|0,B|0,P|0)}}while(0);if(s>0.0){P=~~(s*1.0e6);bH(P|0)}if((O|0)==0|s<0.0){a[25280]=0;i=b;return}aF(10,c[m>>2]|0);a[25280]=0;i=b;return}function ea(b,d){b=b|0;d=d|0;var e=0,f=0;e=i;f=c[7262]|0;do{if(!((f|0)==0|(f|0)==(c[m>>2]|0)|(f|0)==(c[n>>2]|0))){if((a[c[7260]|0]|0)==124){if((a2(f|0)|0)>=0){break}aS(c[7260]|0);break}else{if((az(f|0)|0)>=0){break}aS(c[7260]|0);break}}}while(0);f=c[7260]|0;if((f|0)!=0){uu(f)}c[7260]=0;if((b|0)==0){c[7262]=c[m>>2];i=e;return}if((aY(b|0,202112)|0)==0){c[7262]=c[n>>2];i=e;return}if((a[b]|0)!=124){f=bF(b|0,(d?205056:137896)|0)|0;c[7262]=f;if((f|0)==0){aS(b|0);i=e;return}else{c[7260]=b;i=e;return}}if(!(a[14168]|0)){uf(-1,145320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=bt(b+1|0,137896)|0;c[7262]=f;if((f|0)==0){aS(b|0);i=e;return}else{c[7260]=b;i=e;return}}function eb(){var a=0,b=0,d=0,e=0;a=i;b=ut(4096)|0;do{if((b|0)==0){gk();d=ut(4096)|0;if((d|0)!=0){e=d;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=88504,v)|0)}else{e=b}}while(0);bl(e|0,4096);cf(c[m>>2]|0,154696,(v=i,i=i+8|0,c[v>>2]=e,v)|0);uu(e);c[13898]=(c[13898]|0)+1;i=a;return}function ec(){var a=0,b=0;a=c[8804]|0;do{if((a|0)!=0){b=c[a>>2]|0;if((b|0)==0){break}cs(b|0)}}while(0);c[13898]=(c[13898]|0)+1;return}function ed(){c[13898]=(c[13898]|0)+1;aI(81576,27,1,c[m>>2]|0);return}function ee(){var b=0;b=c[13898]|0;c[13898]=b+1;c[7738]=b;a[30664]=0;hY(2);a[(e6(159824)|0)+8|0]=1;a[(e6(159208)|0)+8|0]=1;a[(e6(158720)|0)+8|0]=1;a[(e6(158096)|0)+8|0]=1;a[(e6(164136)|0)+8|0]=1;iZ();return}function ef(){k9();return}function eg(){var b=0,d=0,e=0;b=i;if((a[c[6924]|0]|0)==0){uf(c[13898]|0,84384,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((a[27704]&1)!=0){a[27704]=0;iL()}d=c[3524]|0;e=c[13898]|0;if((d|0)==0){uf(e,135392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[13898]=e+1;if((c[d+96>>2]&8|0)==0){dP();i=b;return}cS[c[d+36>>2]&511]();dP();i=b;return}function eh(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;b=i;i=i+32|0;d=b|0;e=b+24|0;c[e>>2]=0;f=c[13898]|0;g=f+1|0;c[13898]=g;h=c[1054]|0;j=c[h+(g*40&-1)+36>>2]|0;k=c[h+(g*40&-1)+32>>2]|0;l=(a[h+(g*40&-1)|0]&1)==0;m=(j|0)>0;o=c[10036]|0;L3484:do{if(l){p=2648}else{L3486:do{if(m){q=0;r=0;s=k;while(1){if((a[q+98416|0]|0)==(a[o+(q+s|0)|0]|0)){t=s;u=r}else{if((q|0)!=1){break L3486}t=s-1|0;u=1}w=q+1|0;if((w|0)<(u+j|0)){q=w;r=u;s=t}else{break}}if((u|0)==0){x=w;p=2585}else{y=25296;break L3484}}else{x=0;p=2585}}while(0);if((p|0)==2585){s=a[x+98416|0]|0;if((s<<24>>24|0)==36|(s<<24>>24|0)==0){y=25296;break}}if(l){p=2648;break}L3498:do{if(m){s=0;r=0;q=k;while(1){if((a[s+97808|0]|0)==(a[o+(s+q|0)|0]|0)){z=q;A=r}else{if((s|0)!=1){break L3498}z=q-1|0;A=1}B=s+1|0;if((B|0)<(A+j|0)){s=B;r=A;q=z}else{break}}if((A|0)==0){C=B;p=2631}else{y=25304;break L3484}}else{C=0;p=2631}}while(0);if((p|0)==2631){q=a[C+97808|0]|0;if((q<<24>>24|0)==36|(q<<24>>24|0)==0){y=25304;break}}if(l){p=2648;break}L3510:do{if(m){q=0;r=0;s=k;while(1){if((a[q+97200|0]|0)==(a[o+(q+s|0)|0]|0)){D=s;E=r}else{if((q|0)!=1){break L3510}D=s-1|0;E=1}F=q+1|0;if((F|0)<(E+j|0)){q=F;r=E;s=D}else{break}}if((E|0)==0){G=F;p=2639}else{y=25312;break L3484}}else{G=0;p=2639}}while(0);if((p|0)==2639){s=a[G+97200|0]|0;if((s<<24>>24|0)==36|(s<<24>>24|0)==0){y=25312;break}}if(l){p=2648;break}if(m){s=0;r=0;q=k;while(1){if((a[s+96640|0]|0)==(a[o+(s+q|0)|0]|0)){H=q;I=r}else{if((s|0)!=1){p=2648;break L3484}H=q-1|0;I=1}J=s+1|0;if((J|0)<(I+j|0)){s=J;r=I;q=H}else{break}}if((I|0)==0){K=J}else{y=25320;break}}else{K=0}q=a[K+96640|0]|0;if((q<<24>>24|0)==36|(q<<24>>24|0)==0){y=25320}else{p=2648}}}while(0);if((p|0)==2648){y=25328}p=c[y+4>>2]|0;if((p-1|0)>>>0<4){y=f+2|0;c[13898]=y;L=y}else{L=g}L3537:do{if((L|0)<(c[8272]|0)){L3539:do{if((a[h+(L*40&-1)|0]&1)!=0){g=c[h+(L*40&-1)+36>>2]|0;y=h+(L*40&-1)+32|0;f=0;while(1){if((f|0)>=(g|0)){break}if((a[o+((c[y>>2]|0)+f|0)|0]|0)==(a[f+103664|0]|0)){f=f+1|0}else{break L3539}}if((f|0)==1){break L3537}}}while(0);a[14176]=1;is(d);a[14176]=0;if((c[d>>2]|0)!=3){c[13898]=L;break}y=c[d+8>>2]|0;c[e>>2]=y;if((y|0)==0){M=c[13898]|0;uf(M,149040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}do{if((a[y]|0)==124){if(a[14168]|0){N=bt(y+1|0,137896)|0;O=y;break}else{uf(-1,145320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}else{iQ(e);g=c[e>>2]|0;if((aY(g|0,202112)|0)==0){N=c[n>>2]|0;O=g;break}else{N=hA(g,137896)|0;O=g;break}}}while(0);if((N|0)==0){uj(c[13898]|0,82848,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((p|0)==4){jI(N);i8(N);aI(172e3,9,1,N|0)}else if((p|0)==1){jI(N);y=c[10812]|0;if((y|0)!=0){g=y;do{y=c[g+12>>2]|0;if((y|0)!=0){cf(N|0,154696,(v=i,i=i+8|0,c[v>>2]=y,v)|0)}g=c[g>>2]|0;}while((g|0)!=0)}aI(172e3,9,1,N|0)}else if((p|0)==3){jI(N);jb(N);aI(172e3,9,1,N|0)}else if((p|0)==2){jd(N)}else{jc(N)}if((c[n>>2]|0)==(N|0)){uu(O);i=b;return}if((a[O]|0)==124){a2(N|0);uu(O);i=b;return}else{az(N|0);uu(O);i=b;return}}}while(0);c[e>>2]=0;M=L;uf(M,149040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}function ei(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;b=i;i=i+24|0;d=b|0;e=(c[13898]|0)+1|0;c[13898]=e;if((e|0)>=(c[8272]|0)){f=0;uu(f);i=b;return}g=c[1054]|0;L3594:do{if((a[g+(e*40&-1)|0]&1)!=0){h=c[g+(e*40&-1)+36>>2]|0;j=g+(e*40&-1)+32|0;k=c[10036]|0;l=0;while(1){if((l|0)>=(h|0)){break}if((a[k+((c[j>>2]|0)+l|0)|0]|0)==(a[l+103664|0]|0)){l=l+1|0}else{break L3594}}if((l|0)==1){f=0}else{break}uu(f);i=b;return}}while(0);a[14176]=1;is(d);a[14176]=0;if((c[d>>2]|0)!=3){c[13898]=e;f=0;uu(f);i=b;return}e=c[d+8>>2]|0;if((e|0)==0){f=0;uu(f);i=b;return}if(!(a[14168]|0)){uf(-1,145320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}bN(e|0);f=e;uu(f);i=b;return}function ej(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0.0,Y=0.0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0.0;b=i;i=i+8312|0;d=b|0;e=b+2048|0;f=b+8192|0;g=b+8240|0;j=b+8248|0;k=b+8256|0;l=b+8304|0;n=c[13898]|0;o=n+1|0;c[13898]=o;p=c[3524]|0;if((p|0)==0){uf(o,135392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}L3617:do{if((o|0)<(c[8272]|0)){q=c[1054]|0;r=(a[q+(o*40&-1)|0]&1)==0;L3619:do{if(r){s=c[10036]|0;t=2765}else{u=c[q+(o*40&-1)+36>>2]|0;w=q+(o*40&-1)+32|0;x=c[10036]|0;y=0;while(1){if((y|0)>=(u|0)){t=2680;break}if((a[x+((c[w>>2]|0)+y|0)|0]|0)==(a[y+103664|0]|0)){y=y+1|0}else{break}}if((t|0)==2680){if((y|0)==1){break L3617}}z=c[w>>2]|0;A=(u|0)>0;if(r){s=x;t=2765;break}L3629:do{if(A){B=0;C=0;D=z;while(1){if((a[B+142016|0]|0)==(a[x+(B+D|0)|0]|0)){E=D;F=C}else{if((B|0)!=4){break L3629}E=D-1|0;F=1}G=B+1|0;if((G|0)<(F+u|0)){B=G;C=F;D=E}else{break}}if((F|0)==0){H=G;t=2689}else{I=5696;J=x;break L3619}}else{H=0;t=2689}}while(0);if((t|0)==2689){w=a[H+142016|0]|0;if((w<<24>>24|0)==36|(w<<24>>24|0)==0){I=5696;J=x;break}}if(r){s=x;t=2765;break}L3641:do{if(A){w=0;y=0;D=z;while(1){if((a[w+205488|0]|0)==(a[x+(w+D|0)|0]|0)){K=D;L=y}else{if((w|0)!=3){break L3641}K=D-1|0;L=1}M=w+1|0;if((M|0)<(L+u|0)){w=M;y=L;D=K}else{break}}if((L|0)==0){N=M;t=2759}else{I=5704;J=x;break L3619}}else{N=0;t=2759}}while(0);if((t|0)==2759){D=a[N+205488|0]|0;if((D<<24>>24|0)==36|(D<<24>>24|0)==0){I=5704;J=x;break}}if(r){s=x;t=2765;break}if(A){D=0;while(1){if((a[D+141856|0]|0)!=(a[x+(D+z|0)|0]|0)){s=x;t=2765;break L3619}y=D+1|0;if((y|0)<(u|0)){D=y}else{P=y;break}}}else{P=0}D=a[P+141856|0]|0;if((D<<24>>24|0)==36|(D<<24>>24|0)==0){I=5712;J=x}else{s=x;t=2765}}}while(0);if((t|0)==2765){I=5720;J=s}r=c[I+4>>2]|0;if((r|0)==2){if((c[p+136>>2]|0)==0){Q=0}else{Q=(c[p+144>>2]|0)!=0}D=a$()|0;u=c[13898]|0;z=u+1|0;c[13898]=z;L3666:do{if((z|0)<(c[8272]|0)){A=c[1054]|0;y=c[A+(z*40&-1)+36>>2]|0;L3668:do{if((a[A+(z*40&-1)|0]&1)==0){R=c[10036]|0;S=A+(z*40&-1)+32|0}else{w=A+(z*40&-1)+32|0;C=c[10036]|0;B=0;while(1){if((B|0)>=(y|0)){break}if((a[C+((c[w>>2]|0)+B|0)|0]|0)==(a[B+103664|0]|0)){B=B+1|0}else{R=C;S=w;break L3668}}if((B|0)==1){T=93664;break L3666}else{R=C;S=w}}}while(0);A=(y|0)!=3;x=A&1;U=R+(c[S>>2]|0)|0;if(A){V=x}else{A=((aZ(U|0,114,3)|0)==0&1)+x|0;x=A+((aZ(U|0,103,3)|0)==0&1)|0;V=x+((aZ(U|0,98,3)|0)==0&1)|0}if((V|0)==0){c[13898]=u+2;T=U;break}else{uf(z,215792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}else{T=93664}}while(0);if((D|0)==0){uf(-1,215320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{W=0}do{X=+(W|0)/255.0;h[d+(W<<3)>>3]=X;if((a[20668]|0)==110){Y=1.0-X}else{Y=X}fq(Y,e+(W*24&-1)|0);W=W+1|0;}while((W|0)<256);c[11254]=0;z=c[6924]|0;if((z|0)==0){Z=0}else{Z=bP(z|0)|0}z=a[37384]&1;aI(5992,208,1,D|0);if(Q){aI(5976,13,1,D|0)}aI(5728,243,1,D|0);aF(112,D|0);if((a[T]|0)!=0){u=0;do{if((u|0)>0){aF(44,D|0)}aI(214288,7,1,D|0);U=a[T+u|0]|0;if((U|0)==114){aI(213544,25,1,D|0)}else if((U|0)==103){aI(213024,29,1,D|0)}else if((U|0)==98){aI(212416,27,1,D|0)}u=u+1|0;}while(u>>>0<(uA(T|0)|0)>>>0)}aI(211904,28,1,D|0);aF(10,D|0);u=a[T]|0;U=0;do{if((u<<24>>24|0)==103){_=e+(U*24&-1)+8|0}else if((u<<24>>24|0)==114){_=e+(U*24&-1)|0}else{_=e+(U*24&-1)+16|0}X=+h[_>>3];cf(D|0,210888,(v=i,i=i+16|0,h[v>>3]=+h[d+(U<<3)>>3],h[v+8>>3]=X,v)|0);U=U+1|0;}while((U|0)<256);aI(210424,2,1,D|0);U=a[T+1|0]|0;u=0;do{if((U<<24>>24|0)==103){$=e+(u*24&-1)+8|0}else if((U<<24>>24|0)==114){$=e+(u*24&-1)|0}else{$=e+(u*24&-1)+16|0}X=+h[$>>3];cf(D|0,210888,(v=i,i=i+16|0,h[v>>3]=+h[d+(u<<3)>>3],h[v+8>>3]=X,v)|0);u=u+1|0;}while((u|0)<256);aI(210424,2,1,D|0);u=a[T+2|0]|0;U=0;do{if((u<<24>>24|0)==103){aa=e+(U*24&-1)+8|0}else if((u<<24>>24|0)==114){aa=e+(U*24&-1)|0}else{aa=e+(U*24&-1)+16|0}X=+h[aa>>3];cf(D|0,210888,(v=i,i=i+16|0,h[v>>3]=+h[d+(U<<3)>>3],h[v+8>>3]=X,v)|0);U=U+1|0;}while((U|0)<256);aI(210424,2,1,D|0);U=0;do{X=+h[e+(U*24&-1)>>3]*.299+ +h[e+(U*24&-1)+8>>3]*.587+ +h[e+(U*24&-1)+16>>3]*.114;cf(D|0,210888,(v=i,i=i+16|0,h[v>>3]=+h[d+(U<<3)>>3],h[v+8>>3]=X,v)|0);U=U+1|0;}while((U|0)<256);aI(210424,2,1,D|0);aI(6208,14,1,D|0);jI(D);jb(D);aI(172e3,9,1,D|0);cs(D|0);hw(D,0,0);c[11254]=1;uu(c[6924]|0);c[6924]=Z;a[37384]=z;c[8272]=0;c[13898]=0;i=b;return}else if((r|0)==3){U=k;c[g>>2]=0;c[j>>2]=0;u=n+2|0;c[13898]=u;if((a[q+(u*40&-1)|0]&1)==0){i=b;return}x=a[J+(c[q+(u*40&-1)+32>>2]|0)|0]|0;if(!((x<<24>>24|0)==39|(x<<24>>24|0)==34)){i=b;return}ub(g,u,u);u=(c[13898]|0)+1|0;c[13898]=u;x=c[1054]|0;do{if((a[x+(u*40&-1)|0]&1)!=0){A=a[(c[10036]|0)+(c[x+(u*40&-1)+32>>2]|0)|0]|0;if(!((A<<24>>24|0)==39|(A<<24>>24|0)==34)){break}ub(j,u,u);uE(U|0,0,44);A=c[j>>2]|0;ab=c[g>>2]|0;t1(A,ab,k,l);X=+t2(k);ac=c[m>>2]|0;ad=k+12|0;ae=c[ad>>2]|0;af=k+16|0;ag=(c[af>>2]|0)+1|0;ah=k+20|0;ai=(c[ah>>2]|0)%100&-1;aj=k+8|0;ak=c[aj>>2]|0;al=k+4|0;am=c[al>>2]|0;an=k|0;ao=c[an>>2]|0;ap=k+24|0;aq=c[ap>>2]|0;ar=k+28|0;as=c[ar>>2]|0;cf(ac|0,217600,(v=i,i=i+72|0,h[v>>3]=X,c[v+8>>2]=ae,c[v+16>>2]=ag,c[v+24>>2]=ai,c[v+32>>2]=ak,c[v+40>>2]=am,c[v+48>>2]=ao,c[v+56>>2]=aq,c[v+64>>2]=as,v)|0);uE(U|0,0,44);t3(k,X);as=uA(A|0)|0;t3(f,X);at=X- +O(+X);t4(A,as,ab,f,at);ab=c[m>>2]|0;as=c[ad>>2]|0;ad=(c[af>>2]|0)+1|0;af=(c[ah>>2]|0)%100&-1;ah=c[aj>>2]|0;aj=c[al>>2]|0;al=c[an>>2]|0;an=c[ap>>2]|0;ap=c[ar>>2]|0;cf(ab|0,216816,(v=i,i=i+72|0,c[v>>2]=A,c[v+8>>2]=as,c[v+16>>2]=ad,c[v+24>>2]=af,c[v+32>>2]=ah,c[v+40>>2]=aj,c[v+48>>2]=al,c[v+56>>2]=an,c[v+64>>2]=ap,v)|0);uu(A);c[13898]=(c[13898]|0)+1}}while(0);uu(c[g>>2]|0);i=b;return}else if((r|0)==1){lG();i=b;return}else{uf(o,80152,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);lG();i=b;return}function ek(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;b=i;i=i+48|0;d=b|0;e=b+24|0;f=(c[13898]|0)+1|0;c[13898]=f;if((f|0)>=(c[8272]|0)){g=f;uf(g,79192,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}h=c[1054]|0;L3758:do{if((a[h+(f*40&-1)|0]&1)!=0){j=c[h+(f*40&-1)+36>>2]|0;k=h+(f*40&-1)+32|0;l=c[10036]|0;m=0;while(1){if((m|0)>=(j|0)){break}if((a[l+((c[k>>2]|0)+m|0)|0]|0)==(a[m+103664|0]|0)){m=m+1|0}else{break L3758}}if((m|0)==1){g=f}else{break}uf(g,79192,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);a[14176]=1;is(e);a[14176]=0;if((c[e>>2]|0)!=3){c[13898]=f;g=f;uf(g,79192,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=c[e+8>>2]|0;e=c[13898]|0;if((f|0)==0){g=e;uf(g,79192,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((e|0)>=(c[8272]|0)){n=0;fc(f,n);uu(n);uu(f);i=b;return}g=c[1054]|0;h=(a[g+(e*40&-1)|0]&1)==0;L3776:do{if(h){o=d}else{k=c[g+(e*40&-1)+36>>2]|0;l=g+(e*40&-1)+32|0;j=c[10036]|0;p=0;while(1){if((p|0)>=(k|0)){q=2788;break}if((a[j+((c[l>>2]|0)+p|0)|0]|0)==(a[p+103664|0]|0)){p=p+1|0}else{break}}do{if((q|0)==2788){if((p|0)==1){n=0}else{break}fc(f,n);uu(n);uu(f);i=b;return}}while(0);p=d;if(h){o=p;break}l=c[g+(e*40&-1)+36>>2]|0;j=g+(e*40&-1)+32|0;k=c[10036]|0;m=0;while(1){if((m|0)>=(l|0)){break}if((a[k+((c[j>>2]|0)+m|0)|0]|0)==(a[m+103664|0]|0)){m=m+1|0}else{o=p;break L3776}}if((m|0)==1){r=e}else{o=p;break}uf(r,78672,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);a[14176]=1;is(d);a[14176]=0;if((c[d>>2]|0)!=3){c[13898]=e;r=e;uf(r,78672,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=c[d+8>>2]|0;if((e|0)!=0){n=e;fc(f,n);uu(n);uu(f);i=b;return}r=c[13898]|0;uf(r,78672,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}function el(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0;b=c[13898]|0;d=c[8272]|0;L3802:do{if((b|0)<(d|0)){e=c[1054]|0;f=b;do{L3806:do{if((a[e+(f*40&-1)|0]&1)!=0){g=c[e+(f*40&-1)+36>>2]|0;h=e+(f*40&-1)+32|0;j=c[10036]|0;k=0;while(1){if((k|0)>=(g|0)){break}if((a[j+((c[h>>2]|0)+k|0)|0]|0)==(a[k+103664|0]|0)){k=k+1|0}else{break L3806}}if((k|0)==1){break L3802}}}while(0);f=f+1|0;c[13898]=f;}while((f|0)<(d|0))}}while(0);uf(b,78216,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}function em(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;b=i;i=i+8|0;d=b|0;e=bU(140128)|0;f=(e|0)==0?138024:e;if((c[10010]|0)==0){e=ut(1024)|0;do{if((e|0)==0){gk();g=ut(1024)|0;if((g|0)!=0){h=g;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74912,v)|0)}else{h=e}}while(0);c[10010]=h;h=ut(1024)|0;do{if((h|0)==0){gk();e=ut(1024)|0;if((e|0)!=0){j=e;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74440,v)|0)}else{j=h}}while(0);c[10008]=j;a[j]=0;a[c[10010]|0]=0}if(!(a[40024]|0)){a[c[10008]|0]=0;a[c[10010]|0]=0}a[40024]=0;j=c[10010]|0;h=uA(j|0)|0;e=(c[13898]|0)+1|0;c[13898]=e;g=c[8272]|0;L3829:do{if((e|0)<(g|0)){k=c[1054]|0;l=e;while(1){L3833:do{if((a[k+(l*40&-1)|0]&1)!=0){m=c[k+(l*40&-1)+36>>2]|0;n=k+(l*40&-1)+32|0;o=c[10036]|0;p=0;while(1){if((p|0)>=(m|0)){break}if((a[o+((c[n>>2]|0)+p|0)|0]|0)==(a[p+103664|0]|0)){p=p+1|0}else{break L3833}}if((p|0)==1){q=l;break L3829}}}while(0);n=l+1|0;c[13898]=n;if((n|0)<(g|0)){l=n}else{q=n;break}}}else{q=e}}while(0);if((h|0)>0){a[j+h|0]=32;r=h+1|0;s=c[10010]|0;t=c[13898]|0}else{r=h;s=j;t=q}q=s+r|0;s=t-1|0;t=1024-r|0;r=c[1054]|0;j=(c[r+(s*40&-1)+36>>2]|0)+(c[r+(s*40&-1)+32>>2]|0)|0;s=c[r+(e*40&-1)+32>>2]|0;if((j-s|0)<(t|0)){u=j}else{u=(t-1|0)+s|0}L3847:do{if((s|0)<(u|0)){t=q;j=s;while(1){e=a[(c[10036]|0)+j|0]|0;if(e<<24>>24==0){w=t;break L3847}r=t+1|0;a[t]=e;e=j+1|0;if((e|0)<(u|0)){t=r;j=e}else{w=r;break}}}else{w=q}}while(0);a[w]=0;w=(c[10010]|0)+h|0;q=a[w]|0;if(q<<24>>24==0){x=w}else{u=w;s=w;w=0;j=q;while(1){do{if((aM(j&255|0)|0)==0){a[s]=a[u]|0;y=0;z=s+1|0}else{if(w){y=1;z=s;break}a[s]=32;y=1;z=s+1|0}}while(0);q=u+1|0;t=a[q]|0;if(t<<24>>24==0){x=z;break}else{u=q;s=z;w=y;j=t}}}a[x]=0;x=c[10010]|0;j=uA(x|0)|0;if((aY(x+((h|0)==0?0:h+1|0)|0,216168)|0)==0){a[d]=1;a[x+h|0]=0;A=1;B=c[10010]|0}else{a[d]=0;A=0;B=x}x=gm(B,f,d)|0;if((x|0)==1){B=c[10010]|0;bD(224888,(v=i,i=i+8|0,c[v>>2]=B,v)|0);C=c[10010]|0;D=C+h|0;a[D]=0;i=b;return}else if((x|0)==0){a[25280]=0;if((a[d]&1)==0|A){C=c[10010]|0;D=C+h|0;a[D]=0;i=b;return}A=(j|0)>0;L3873:while(1){j=c[10008]|0;if(A){uD(j|0,73672,13);B=c[10010]|0;ck(j|0,B|0,1008);B=c[10008]|0;y=B+(uA(B|0)|0)|0;a[y]=a[212304]|0;a[y+1|0]=a[212305|0]|0;a[y+2|0]=a[212306|0]|0;E=c[10008]|0}else{uD(j|0,225272,13);E=j}dF(E,0);j=jl(40144,40136)|0;c[8272]=j;c[13898]=0;if((j|0)<1){F=2870;break}j=c[1054]|0;L3880:do{if((a[j|0]&1)!=0){y=c[j+36>>2]|0;B=j+32|0;w=c[10036]|0;z=0;while(1){if((z|0)>=(y|0)){break}if((a[w+((c[B>>2]|0)+z|0)|0]|0)==(a[z+103664|0]|0)){z=z+1|0}else{break L3880}}if((z|0)==1){F=2871;break L3873}}}while(0);c[13898]=-1;a[40024]=1;em();if((a[d]&1)==0){F=2872;break}}if((F|0)==2870){C=c[10010]|0;D=C+h|0;a[D]=0;i=b;return}else if((F|0)==2871){C=c[10010]|0;D=C+h|0;a[D]=0;i=b;return}else if((F|0)==2872){C=c[10010]|0;D=C+h|0;a[D]=0;i=b;return}}else if((x|0)==(-1|0)){aS(f|0);C=c[10010]|0;D=C+h|0;a[D]=0;i=b;return}else{uf(-1,223936,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function en(){var b=0,d=0,e=0,f=0,g=0;b=i;a[25280]=0;c[13898]=(c[13898]|0)+1;d=c[256]|0;if((d|0)==0){e=c[m>>2]|0;f=aF(10,e|0)|0;i=b;return}g=uF(46781,d|0,93)|0;if((uA(d|0)|0)>>>0>=93){a[46873]=0}if((bN(g|0)|0)==0){e=c[m>>2]|0;f=aF(10,e|0)|0;i=b;return}else{uj(-1,223328,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function eo(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=i;if(!(a[14168]|0)){uf(-1,145320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}f=bt(b|0,193632|0)|0;if((f|0)==0){uj(-1,221448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}b=ut(1024)|0;do{if((b|0)==0){gk();g=ut(1024)|0;if((g|0)!=0){h=g;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=220968,v)|0);return 0}else{h=b}}while(0);a[h]=0;b=h;h=0;g=1024;L3914:while(1){j=h;while(1){k=a1(f|0)|0;if((k|0)==-1){l=2898;break L3914}m=j+1|0;n=b+j|0;a[n]=k&255;if((m|0)==(g|0)){break}else{j=m}}if((g|0)>1048575){l=2896;break}m=g+1024|0;b=db(b,m,218568)|0;h=g;g=m}if((l|0)==2898){o=b+j|0;a[o]=0;p=a2(f|0)|0;q=uA(b|0)|0;r=q+1|0;s=db(b,r,220968)|0;c[d>>2]=s;i=e;return p|0}else if((l|0)==2896){uh(-1,219104,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);o=n;a[o]=0;p=a2(f|0)|0;q=uA(b|0)|0;r=q+1|0;s=db(b,r,220968)|0;c[d>>2]=s;i=e;return p|0}return 0}function ep(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,w=0.0,x=0.0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0,N=0.0,S=0.0,T=0,U=0.0,V=0,W=0.0,X=0.0,Y=0.0,ab=0.0,ac=0.0,ad=0.0,ae=0.0,af=0.0,ag=0.0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aY=0,aZ=0,a_=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,ba=0,bb=0,bc=0,bd=0,be=0.0,bf=0.0,bg=0.0,bh=0,bi=0.0,bj=0.0,bk=0.0,bl=0,bm=0,bn=0,bo=0,bp=0,bq=0,br=0,bs=0,bt=0,bu=0,bv=0,bw=0,bx=0,by=0,bz=0,bA=0.0,bB=0.0,bC=0.0,bD=0,bE=0,bF=0.0,bG=0,bH=0,bI=0,bJ=0.0,bK=0.0,bL=0,bM=0,bN=0,bO=0,bP=0,bR=0,bS=0,bT=0,bU=0,bV=0,bW=0,bX=0,bY=0,bZ=0,b_=0,b$=0,b0=0,b1=0,b2=0.0,b3=0,b4=0,b5=0,b6=0,b7=0,b8=0.0,b9=0,ca=0,cb=0.0,cc=0,cd=0,ce=0,cf=0,cg=0,ch=0,ci=0,cj=0,ck=0.0;e=i;i=i+24|0;f=e|0;g=e+8|0;j=e+16|0;k=c[13374]|0;c[9348]=c[13378];c[13370]=0;l=d+8|0;n=c[l>>2]|0;h[15]=8.988465674311579e+307;h[70]=8.988465674311579e+307;h[98]=8.988465674311579e+307;h[16]=-8.988465674311579e+307;h[71]=-8.988465674311579e+307;h[99]=-8.988465674311579e+307;if((b|0)>0){o=(n|0)>0;p=0;q=d;r=-8.988465674311579e+307;s=-8.988465674311579e+307;t=-8.988465674311579e+307;u=8.988465674311579e+307;w=8.988465674311579e+307;x=8.988465674311579e+307;while(1){y=c[q+12>>2]|0;if(o){z=0;A=r;B=s;C=t;D=u;E=w;F=x;while(1){do{if((c[y+(z<<6)>>2]|0)==2){G=A;H=B;I=C;J=D;K=E;L=F}else{M=y+(z<<6)+8|0;N=+h[M>>3];if(N>A){h[99]=N;S=N}else{S=A}T=y+(z<<6)+16|0;N=+h[T>>3];if(N>B){h[71]=N;U=N}else{U=B}V=y+(z<<6)+24|0;N=+h[V>>3];if(N>C){h[16]=N;W=N}else{W=C}N=+h[M>>3];if(N<D){h[98]=N;X=N}else{X=D}N=+h[T>>3];if(N<E){h[70]=N;Y=N}else{Y=E}N=+h[V>>3];if(N>=F){G=S;H=U;I=W;J=X;K=Y;L=F;break}h[15]=N;G=S;H=U;I=W;J=X;K=Y;L=N}}while(0);V=z+1|0;if((V|0)<(n|0)){z=V;A=G;B=H;C=I;D=J;E=K;F=L}else{ab=G;ac=H;ad=I;ae=J;af=K;ag=L;break}}}else{ab=r;ac=s;ad=t;ae=u;af=w;ag=x}z=p+1|0;if((z|0)<(b|0)){p=z;q=c[q>>2]|0;r=ab;s=ac;t=ad;u=ae;w=af;x=ag}else{break}}}q=c[d+12>>2]|0;p=(c[l>>2]|0)-1|0;l=(p|0)>0;L3955:do{if(l){n=0;o=0;z=0;L3956:while(1){y=q+(z<<6)|0;V=z+1|0;T=q+(V<<6)|0;do{if((c[y>>2]|0)==0){if((c[T>>2]|0)!=0){ah=o;ai=n;break}M=ut(28)|0;if((M|0)==0){gk();aj=ut(28)|0;if((aj|0)==0){break L3956}else{ak=aj}}else{ak=M}M=ak;c[ak>>2]=0;c[ak+4>>2]=0;c[ak+8>>2]=y;c[ak+12>>2]=T;c[ak+16>>2]=0;c[ak+24>>2]=1;if((o|0)==0){ah=M;ai=M;break}c[o+16>>2]=M;ah=M;ai=n}else{ah=o;ai=n}}while(0);if((V|0)<(p|0)){n=ai;o=ah;z=V}else{al=ai;am=ah;break L3955}}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=212672,v)|0);return 0}else{al=0;am=0}}while(0);L3968:do{if((b|0)>1){ah=al;ai=am;ak=0;z=2;o=q;n=d;T=al;y=0;L3969:while(1){M=c[n>>2]|0;aj=c[M+12>>2]|0;do{if((c[o>>2]|0)==0){if((c[aj>>2]|0)!=0){an=0;ao=ai;ap=T;break}aq=ut(28)|0;if((aq|0)==0){gk();ar=ut(28)|0;if((ar|0)==0){as=2935;break L3969}else{at=ar}}else{at=aq}aq=at;c[at>>2]=0;c[at+4>>2]=0;c[at+8>>2]=o;c[at+12>>2]=aj;c[at+16>>2]=0;c[at+24>>2]=1;if((ai|0)==0){an=aq;ao=aq;ap=aq;break}c[ai+16>>2]=aq;an=aq;ao=aq;ap=T}else{an=0;ao=ai;ap=T}}while(0);do{if(l){V=0;aq=ao;ar=0;au=ak;av=an;aw=ah;ax=0;ay=ap;az=y;while(1){do{if((aw|0)==0){aA=0;aB=0}else{if((c[aw+8>>2]|0)!=(o+(ax<<6)|0)){aA=aw;aB=0;break}aA=c[aw+16>>2]|0;aB=aw}}while(0);aC=ax+1|0;aD=o+(aC<<6)|0;aE=aj+(ax<<6)|0;aF=aD|0;aG=aE|0;do{if((c[aF>>2]|0)==0){if((c[aG>>2]|0)!=0){aH=au;aJ=0;aK=1;aL=aq;aM=ay;aN=az;break}aO=ut(28)|0;if((aO|0)==0){gk();aP=ut(28)|0;if((aP|0)==0){as=2946;break L3969}else{aQ=aP}}else{aQ=aO}aO=aQ;aP=aQ;c[aP>>2]=0;aR=aQ+4|0;c[aR>>2]=0;c[aQ+8>>2]=aD;c[aQ+12>>2]=aE;c[aQ+16>>2]=0;aS=aQ+24|0;c[aS>>2]=1;if((aq|0)==0){aT=aO}else{c[aq+16>>2]=aO;aT=ay}c[aS>>2]=3;if((av|0)==0|(aB|0)==0){aH=au;aJ=aO;aK=0;aL=aO;aM=aT;aN=az;break}aS=ut(16)|0;if((aS|0)==0){gk();aU=ut(16)|0;if((aU|0)==0){as=2952;break L3969}else{aV=aU}}else{aV=aS}aS=aV;c[aV>>2]=av;c[aV+4>>2]=aO;c[aV+8>>2]=aB;c[aV+12>>2]=0;aU=av|0;if((c[aU>>2]|0)==0){c[aU>>2]=aS}else{c[av+4>>2]=aS}if((c[aP>>2]|0)==0){c[aP>>2]=aS}else{c[aR>>2]=aS}aR=aB|0;if((c[aR>>2]|0)==0){c[aR>>2]=aS}else{c[aB+4>>2]=aS}if((au|0)==0){aH=aS;aJ=aO;aK=0;aL=aO;aM=aT;aN=aS;break}c[au+12>>2]=aS;aH=aS;aJ=aO;aK=0;aL=aO;aM=aT;aN=az}else{aH=au;aJ=0;aK=1;aL=aq;aM=ay;aN=az}}while(0);aO=aj+(aC<<6)|0;do{if((c[aG>>2]|0)==0){if((c[aO>>2]|0)!=0){aW=0;aX=ar;aY=V;break}aS=ut(28)|0;if((aS|0)==0){gk();aR=ut(28)|0;if((aR|0)==0){as=2968;break L3969}else{aZ=aR}}else{aZ=aS}aS=aZ;c[aZ>>2]=0;c[aZ+4>>2]=0;c[aZ+8>>2]=aE;c[aZ+12>>2]=aO;c[aZ+16>>2]=0;c[aZ+24>>2]=1;if((ar|0)==0){aW=aS;aX=aS;aY=aS;break}c[ar+16>>2]=aS;aW=aS;aX=aS;aY=V}else{aW=0;aX=ar;aY=V}}while(0);do{if((c[aF>>2]|0)==0){if((c[aO>>2]|0)!=0){a_=aH;a$=aL;a0=0;a1=aM;a2=aN;break}aE=ut(28)|0;if((aE|0)==0){gk();aG=ut(28)|0;if((aG|0)==0){as=2975;break L3969}else{a3=aG}}else{a3=aE}aE=a3;aG=a3;c[aG>>2]=0;aS=a3+4|0;c[aS>>2]=0;c[a3+8>>2]=aD;c[a3+12>>2]=aO;c[a3+16>>2]=0;c[a3+24>>2]=1;if((aL|0)==0){a4=aE}else{c[aL+16>>2]=aE;a4=aM}if(aK|(aW|0)==0){a_=aH;a$=aE;a0=aE;a1=a4;a2=aN;break}aR=ut(16)|0;if((aR|0)==0){gk();aP=ut(16)|0;if((aP|0)==0){as=2981;break L3969}else{a5=aP}}else{a5=aR}aR=a5;c[a5>>2]=aJ;c[a5+4>>2]=aW;c[a5+8>>2]=aE;c[a5+12>>2]=0;aP=aJ|0;if((c[aP>>2]|0)==0){c[aP>>2]=aR}else{c[aJ+4>>2]=aR}aP=aW|0;if((c[aP>>2]|0)==0){c[aP>>2]=aR}else{c[aW+4>>2]=aR}if((c[aG>>2]|0)==0){c[aG>>2]=aR}else{c[aS>>2]=aR}if((aH|0)==0){a_=aR;a$=aE;a0=aE;a1=a4;a2=aR;break}c[aH+12>>2]=aR;a_=aR;a$=aE;a0=aE;a1=a4;a2=aN}else{a_=aH;a$=aL;a0=0;a1=aM;a2=aN}}while(0);if((aC|0)<(p|0)){V=aY;aq=a$;ar=aX;au=a_;av=a0;aw=aA;ax=aC;ay=a1;az=a2}else{break}}if((aY|0)==0){a6=a$;a7=a_;a8=0;a9=a1;ba=a2;break}if((a1|0)==0){a6=aX;a7=a_;a8=aY;a9=aY;ba=a2;break}c[a$+16>>2]=aY;a6=aX;a7=a_;a8=aY;a9=a1;ba=a2}else{a6=ao;a7=ak;a8=0;a9=ap;ba=y}}while(0);if((z|0)>=(b|0)){bb=a9;bc=ba;break L3968}ah=a8;ai=a6;ak=a7;z=z+1|0;o=aj;n=M;T=a9;y=ba}if((as|0)==2968){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=212672,v)|0);return 0}else if((as|0)==2935){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=212672,v)|0);return 0}else if((as|0)==2952){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=170896,v)|0);return 0}else if((as|0)==2975){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=212672,v)|0);return 0}else if((as|0)==2981){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=170896,v)|0);return 0}else if((as|0)==2946){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=212672,v)|0);return 0}}else{bb=al;bc=0}}while(0);al=(bb|0)==0;if(!al){ba=bb;do{if((c[ba>>2]|0)==0){as=3001}else{if((c[ba+4>>2]|0)==0){as=3001}}if((as|0)==3001){as=0;c[ba+24>>2]=2}ba=c[ba+16>>2]|0;}while((ba|0)!=0)}c[12922]=0;if((c[13372]|0)==0){ag=+h[16]- +h[15];if(ag==0.0){bd=0;i=e;return bd|0}x=+P(+ag);ba=(c[13374]<<1)+2|0;ag=+R(10.0,+(+O(+(+bQ(+x)))));af=x/ag;x=+(ba|0)/af;do{if(x>40.0){be=.05}else{if(x>20.0){be=.1;break}if(x>10.0){be=.2;break}if(x>4.0){be=.5;break}if(x>2.0){be=1.0;break}if(x>.5){be=2.0;break}be=+$(+af)}}while(0);af=ag*be;be=af*+O(+(+h[15]/af));bf=af;bg=be;bh=~~+O(+((+h[16]-be)/af))}else{bf=0.0;bg=0.0;bh=k}L4084:do{if((bh|0)>0){af=bf*.01;k=0;be=bg;L4086:while(1){ba=c[13372]|0;do{if((ba|0)==2){ag=+h[(c[11662]|0)+(k<<3)>>3];if((a[64788]&1)==0){bi=ag;break}x=+_(+ag);bi=x/+h[8100]}else if((ba|0)==0){x=bf+be;bi=+P(+x)<af?0.0:x}else if((ba|0)==1){a9=c[11662]|0;x=+h[a9>>3];if((a[64788]&1)==0){bj=+h[a9+8>>3];bk=x}else{ag=+_(+x);x=+h[8100];bj=+_(+(+h[a9+8>>3]))/x;bk=ag/x}bi=bk+ +(k|0)*bj}else{bi=be}}while(0);h[6688]=bi;ba=c[13370]|0;x=+h[98];ag=+h[99];w=+h[70];ae=+h[71];do{if(al){c[j>>2]=0}else{M=bb;aj=0;while(1){a9=M+20|0;if(+h[(c[M+8>>2]|0)+24>>3]>=bi^+h[(c[M+12>>2]|0)+24>>3]>=bi){a[a9]=1;bl=aj+1|0}else{a[a9]=0;bl=aj}a9=c[M+16>>2]|0;if((a9|0)==0){break}else{M=a9;aj=bl}}c[j>>2]=bl;if((bl|0)<=0){break}u=ag-x;ad=ae-w;aj=0;while(1){L4110:do{if((aj&1)==0){M=bb;while(1){if((a[M+20|0]&1)!=0){if((c[M+24>>2]|0)==2){break}}a9=c[M+16>>2]|0;if((a9|0)==0){bm=1;as=3037;break L4110}else{M=a9}}bn=eu(M,bi,j,0)|0;bo=aj;as=3043}else{bm=aj;as=3037}}while(0);do{if((as|0)==3037){as=0;aC=bb;while(1){if((a[aC+20|0]&1)!=0){if((c[aC+24>>2]|0)!=2){as=3042;break}}a9=c[aC+16>>2]|0;if((a9|0)==0){as=3041;break}else{aC=a9}}if((as|0)==3041){as=0;c[j>>2]=0;M=c[m>>2]|0;aI(76408,34,1,M|0);bp=bm;break}else if((as|0)==3042){as=0;bn=eu(aC,bi,j,1)|0;bo=1;as=3043;break}}}while(0);do{if((as|0)==3043){as=0;M=(bo&1)!=0;if((bn|0)==0){bp=bo;break}a9=c[9348]|0;L4130:do{if((a9|0)==1){do{if(M){bq=1}else{a7=bn;while(1){a6=c[a7+16>>2]|0;if((a6|0)==0){break}else{a7=a6}}t=+P(+(+h[99]- +h[98]));if(+P(+(+h[a7>>3]- +h[bn>>3]))>=t*1.0e-5){bq=0;break}t=+P(+(+h[71]- +h[70]));bq=+P(+(+h[a7+8>>3]- +h[bn+8>>3]))<t*1.0e-5}}while(0);a6=bn;a8=0;while(1){br=a8+1|0;b=c[a6+16>>2]|0;if((b|0)==0){bs=bn;break}else{a6=b;a8=br}}while(1){bt=bs+16|0;a6=c[bt>>2]|0;if((a6|0)==0){break}else{bs=a6}}do{if(bq){t=+P(+(+h[99]- +h[98]));if(+P(+(+h[bs>>3]- +h[bn>>3]))<t*1.0e-5){t=+P(+(+h[71]- +h[70]));if(+P(+(+h[bs+8>>3]- +h[bn+8>>3]))<t*1.0e-5){bu=br;break}}c[bt>>2]=bn;bu=a8+2|0}else{bu=br}}while(0);a8=bu<<3;a6=ut(a8)|0;if((a6|0)==0){gk();b=ut(a8)|0;if((b|0)==0){as=3081;break L4086}else{bv=b}}else{bv=a6}a6=bv;b=ut(a8)|0;if((b|0)==0){gk();ap=ut(a8)|0;if((ap|0)==0){as=3084;break L4086}else{bw=ap}}else{bw=b}b=bw;ap=ut(a8)|0;if((ap|0)==0){gk();ao=ut(a8)|0;if((ao|0)==0){as=3087;break L4086}else{bx=ao}}else{bx=ap}ap=bx;t=+h[11];L4158:do{if((bu|0)>2){ac=ad>t?ad:t;s=u>t?u:t;ao=bu*24&-1;a8=ut(ao)|0;if((a8|0)==0){gk();a2=ut(ao)|0;if((a2|0)==0){as=3091;break L4086}else{by=a2}}else{by=a8}a8=by;a2=bu-1|0;if((a2|0)>0){ao=0;a1=bn;while(1){aY=a1+16|0;a_=b+(ao<<3)|0;h[a_>>3]=+h[c[aY>>2]>>3]- +h[a1>>3];ab=+h[(c[aY>>2]|0)+8>>3]- +h[a1+8>>3];aX=ap+(ao<<3)|0;h[aX>>3]=ab;r=+h[a_>>3]/s;L=ab/ac;ab=+Q(+(r*r+L*L));a$=a6+(ao<<3)|0;h[a$>>3]=ab;h[a_>>3]=+h[a_>>3]/ab;h[aX>>3]=+h[aX>>3]/+h[a$>>3];a$=ao+1|0;if((a$|0)<(a2|0)){ao=a$;a1=c[aY>>2]|0}else{break}}}if(bq){h[a6+(a2<<3)>>3]=+h[a6>>3];h[b+(a2<<3)>>3]=+h[b>>3];h[ap+(a2<<3)>>3]=+h[ap>>3];bz=a2}else{bz=bu-2|0}a1=(bz|0)>0;if(a1){ao=0;while(1){a7=a6+(ao<<3)|0;h[a8+(ao*24&-1)>>3]=+h[a7>>3];aY=ao+1|0;a$=a6+(aY<<3)|0;h[a8+(ao*24&-1)+8>>3]=(+h[a7>>3]+ +h[a$>>3])*2.0;h[a8+(ao*24&-1)+16>>3]=+h[a$>>3];a$=b+(ao<<3)|0;h[a$>>3]=(+h[b+(aY<<3)>>3]- +h[a$>>3])*6.0;a7=ap+(ao<<3)|0;ab=(+h[ap+(aY<<3)>>3]- +h[a7>>3])*6.0;h[a7>>3]=ab;L=+h[a$>>3];r=L/s;K=ab/ac;ab=+Q(+(r*r+K*K))/8.5;if(ab>1.0){h[a$>>3]=L/ab;h[a7>>3]=+h[a7>>3]/ab}if((aY|0)<(bz|0)){ao=aY}else{break}}}if(!bq){ao=by;aY=by+8|0;h[aY>>3]=+h[ao>>3]+ +h[aY>>3];h[ao>>3]=0.0;ao=bz-1|0;aY=a8+(ao*24&-1)+16|0;a7=a8+(ao*24&-1)+8|0;h[a7>>3]=+h[aY>>3]+ +h[a7>>3];h[aY>>3]=0.0}L4180:do{if((bz|0)>=1){ac=+h[by+8>>3];if(ac<=0.0){break}s=+h[by>>3];aY=a8+((bz-1|0)*24&-1)+8|0;ab=+h[aY>>3];a7=bz-2|0;if((a7|0)>0){ao=0;L=s;K=ab;r=ac;while(1){a$=a8+(ao*24&-1)+16|0;J=+h[a$>>3];I=J/r;h[a$>>3]=I;H=L/r;h[a8+(ao*24&-1)>>3]=H;a$=ao+1|0;aX=a8+(a$*24&-1)+8|0;G=+h[aX>>3]-J*I;if(G<=0.0){break L4180}J=L*(-0.0-I);I=K-L*H;h[aX>>3]=G;if((a$|0)<(a7|0)){ao=a$;L=J;K=I;r=G}else{bA=J;bB=I;bC=G;break}}}else{bA=s;bB=ab;bC=ac}if((bz|0)>1){r=bA+ +h[a8+(a7*24&-1)+16>>3];K=r/bC;h[a8+(a7*24&-1)>>3]=K;L=bB-K*r;h[aY>>3]=L;if(L<=0.0){break}}et(a8,b,bz);et(a8,ap,bz);if(a1){ao=bz;while(1){a$=ao-1|0;h[b+(ao<<3)>>3]=+h[b+(a$<<3)>>3];h[ap+(ao<<3)>>3]=+h[ap+(a$<<3)>>3];if((a$|0)>0){ao=a$}else{break}}}if(bq){h[b>>3]=+h[b+(bz<<3)>>3];h[ap>>3]=+h[ap+(bz<<3)>>3]}else{h[b>>3]=+h[bw+8>>3];h[ap>>3]=+h[bx+8>>3];ao=bz+1|0;h[b+(ao<<3)>>3]=+h[b+(bz<<3)>>3];h[ap+(ao<<3)>>3]=+h[ap+(bz<<3)>>3]}uu(by);bD=a2;break L4158}}while(0);uu(by);uu(bv);uu(bw);uu(bx);if(!bq){bE=bn;break L4130}c[bt>>2]=0;bE=bn;break L4130}else{if((bu|0)>1){h[b>>3]=0.0;h[ap>>3]=0.0;h[bw+8>>3]=0.0;h[bx+8>>3]=0.0;h[a6>>3]=1.0;bD=bu-1|0;break}uu(bv);uu(bw);uu(bx);if(!bq){bE=bn;break L4130}c[bt>>2]=0;bE=bn;break L4130}}while(0);a2=aa(c[13366]|0,bD);a1=(bD|0)>0;if(a1){t=0.0;a8=0;do{t=t+ +h[a6+(a8<<3)>>3];a8=a8+1|0;}while((a8|0)<(bD|0));bF=t*.9999999}else{bF=0.0}ac=bF/+(a2|0);ab=+h[bn>>3];s=+h[bn+8>>3];a8=c[12922]|0;if((a8|0)>98){ao=ut(56)|0;if((ao|0)==0){gk();aY=ut(56)|0;if((aY|0)==0){as=3127;break L4086}else{bG=aY}}else{bG=ao}ao=bG;aY=c[12922]<<6;a7=ut(aY)|0;if((a7|0)==0){gk();a$=ut(aY)|0;if((a$|0)==0){as=3130;break L4086}else{bH=a$}}else{bH=a7}a7=bH;a$=bG+4|0;c[a$>>2]=a7;aY=c[12922]|0;L4220:do{if((aY|0)>0){aX=0;a_=a7;while(1){aA=aX<<1;h[a_+(aX<<6)+8>>3]=+h[51696+(aA<<3)>>3];h[(c[a$>>2]|0)+(aX<<6)+16>>3]=+h[51696+((aA|1)<<3)>>3];h[(c[a$>>2]|0)+(aX<<6)+24>>3]=+h[6688];aA=aX+1|0;if((aA|0)>=(aY|0)){break L4220}aX=aA;a_=c[a$>>2]|0}}}while(0);c[bG+44>>2]=aY;c[bG>>2]=c[13370];c[13370]=ao;a[bG+8|0]=0;a$=a8<<1;h[6462]=+h[51696+(a$-2<<3)>>3];h[6463]=+h[51696+(a$-1<<3)>>3];c[12922]=1;bI=1}else{bI=a8}a$=bI<<1;h[51696+(a$<<3)>>3]=ab;h[51696+((a$|1)<<3)>>3]=s;a$=bI+1|0;c[12922]=a$;L4226:do{if(a1){t=s;L=ab;r=ac+0.0;a7=bn;a2=0;a_=a$;while(1){aX=c[a7+16>>2]|0;aA=a6+(a2<<3)|0;K=+h[aA>>3];G=+h[aX>>3];I=+h[aX+8>>3];J=(G-L)/K;H=(I-t)/K;a0=a2+1|0;Y=+h[b+(a0<<3)>>3];X=+h[b+(a2<<3)>>3];W=(Y+X*2.0)/6.0;U=+h[ap+(a0<<3)>>3];S=+h[ap+(a2<<3)>>3];F=(U+S*2.0)/6.0;E=K*6.0;D=(Y-X)/E;X=(U-S)/E;if(r>K){bJ=r;bK=K;bL=a_}else{E=r;p=a_;while(1){S=E-K;U=L+E*(J+S*(W+D*E));Y=t+E*(H+S*(F+X*E));if((p|0)>98){aN=ut(56)|0;if((aN|0)==0){gk();aM=ut(56)|0;if((aM|0)==0){as=3141;break L4086}else{bM=aM}}else{bM=aN}aN=bM;aM=c[12922]<<6;aL=ut(aM)|0;if((aL|0)==0){gk();aH=ut(aM)|0;if((aH|0)==0){as=3144;break L4086}else{bN=aH}}else{bN=aL}aL=bN;aH=bM+4|0;c[aH>>2]=aL;aM=c[12922]|0;L4241:do{if((aM|0)>0){a4=0;aW=aL;while(1){aJ=a4<<1;h[aW+(a4<<6)+8>>3]=+h[51696+(aJ<<3)>>3];h[(c[aH>>2]|0)+(a4<<6)+16>>3]=+h[51696+((aJ|1)<<3)>>3];h[(c[aH>>2]|0)+(a4<<6)+24>>3]=+h[6688];aJ=a4+1|0;if((aJ|0)>=(aM|0)){break L4241}a4=aJ;aW=c[aH>>2]|0}}}while(0);c[bM+44>>2]=aM;c[bM>>2]=c[13370];c[13370]=aN;a[bM+8|0]=0;aH=p<<1;h[6462]=+h[51696+(aH-2<<3)>>3];h[6463]=+h[51696+(aH-1<<3)>>3];c[12922]=1;bO=1}else{bO=p}aH=bO<<1;h[51696+(aH<<3)>>3]=U;h[51696+((aH|1)<<3)>>3]=Y;aH=bO+1|0;c[12922]=aH;S=ac+E;C=+h[aA>>3];if(S>C){bJ=S;bK=C;bL=aH;break}else{E=S;p=aH}}}if((a0|0)>=(bD|0)){break L4226}t=I;L=G;r=bJ-bK;a7=aX;a2=a0;a_=bL}}}while(0);uu(bv);uu(bw);uu(bx);if(bq){c[bt>>2]=0}ap=ut(56)|0;if((ap|0)==0){gk();b=ut(56)|0;if((b|0)==0){as=3156;break L4086}else{bP=b}}else{bP=ap}ap=bP;b=c[12922]<<6;a6=ut(b)|0;if((a6|0)==0){gk();a$=ut(b)|0;if((a$|0)==0){as=3159;break L4086}else{bR=a$}}else{bR=a6}a6=bR;a$=bP+4|0;c[a$>>2]=a6;b=c[12922]|0;L4259:do{if((b|0)>0){a1=0;a8=a6;while(1){ao=a1<<1;h[a8+(a1<<6)+8>>3]=+h[51696+(ao<<3)>>3];h[(c[a$>>2]|0)+(a1<<6)+16>>3]=+h[51696+((ao|1)<<3)>>3];h[(c[a$>>2]|0)+(a1<<6)+24>>3]=+h[6688];ao=a1+1|0;if((ao|0)>=(b|0)){break L4259}a1=ao;a8=c[a$>>2]|0}}}while(0);c[bP+44>>2]=b;c[bP>>2]=c[13370];c[13370]=ap;a[bP+8|0]=0;c[12922]=0;bE=bn}else if((a9|0)==0){a$=bn;a6=c[12922]|0;do{ac=+h[a$>>3];ab=+h[a$+8>>3];if((a6|0)>98){a8=ut(56)|0;if((a8|0)==0){gk();a1=ut(56)|0;if((a1|0)==0){as=3049;break L4086}else{bS=a1}}else{bS=a8}a8=bS;a1=c[12922]<<6;ao=ut(a1)|0;if((ao|0)==0){gk();aY=ut(a1)|0;if((aY|0)==0){as=3052;break L4086}else{bT=aY}}else{bT=ao}ao=bT;aY=bS+4|0;c[aY>>2]=ao;a1=c[12922]|0;L4275:do{if((a1|0)>0){a_=0;a2=ao;while(1){a7=a_<<1;h[a2+(a_<<6)+8>>3]=+h[51696+(a7<<3)>>3];h[(c[aY>>2]|0)+(a_<<6)+16>>3]=+h[51696+((a7|1)<<3)>>3];h[(c[aY>>2]|0)+(a_<<6)+24>>3]=+h[6688];a7=a_+1|0;if((a7|0)>=(a1|0)){break L4275}a_=a7;a2=c[aY>>2]|0}}}while(0);c[bS+44>>2]=a1;c[bS>>2]=c[13370];c[13370]=a8;a[bS+8|0]=0;aY=a6<<1;h[6462]=+h[51696+(aY-2<<3)>>3];h[6463]=+h[51696+(aY-1<<3)>>3];c[12922]=1;bU=1}else{bU=a6}aY=bU<<1;h[51696+(aY<<3)>>3]=ac;h[51696+((aY|1)<<3)>>3]=ab;a6=bU+1|0;c[12922]=a6;a$=c[a$+16>>2]|0;}while((a$|0)!=0);a$=ut(56)|0;if((a$|0)==0){gk();a6=ut(56)|0;if((a6|0)==0){as=3060;break L4086}else{bV=a6}}else{bV=a$}a$=bV;a6=c[12922]<<6;ap=ut(a6)|0;if((ap|0)==0){gk();b=ut(a6)|0;if((b|0)==0){as=3063;break L4086}else{bW=b}}else{bW=ap}ap=bW;b=bV+4|0;c[b>>2]=ap;a6=c[12922]|0;L4288:do{if((a6|0)>0){aY=0;ao=ap;while(1){a2=aY<<1;h[ao+(aY<<6)+8>>3]=+h[51696+(a2<<3)>>3];h[(c[b>>2]|0)+(aY<<6)+16>>3]=+h[51696+((a2|1)<<3)>>3];h[(c[b>>2]|0)+(aY<<6)+24>>3]=+h[6688];a2=aY+1|0;if((a2|0)>=(a6|0)){break L4288}aY=a2;ao=c[b>>2]|0}}}while(0);c[bV+44>>2]=a6;c[bV>>2]=c[13370];c[13370]=a$;a[bV+8|0]=0;c[12922]=0;bE=bn}else if((a9|0)==2){do{if(M){bX=1}else{b=bn;while(1){ap=c[b+16>>2]|0;if((ap|0)==0){break}else{b=ap}}ab=+P(+(+h[99]- +h[98]));if(+P(+(+h[b>>3]- +h[bn>>3]))>=ab*1.0e-5){bX=0;break}ab=+P(+(+h[71]- +h[70]));bX=+P(+(+h[b+8>>3]- +h[bn+8>>3]))<ab*1.0e-5}}while(0);a$=c[13368]|0;a6=bn;ap=0;while(1){bY=ap+1|0;ao=c[a6+16>>2]|0;if((ao|0)==0){break}else{a6=ao;ap=bY}}a6=a$-1|0;if((bY|0)<2){bE=bn;break}ao=(a6|0)>(ap|0)?ap:a6;do{if(bX){a6=bn;while(1){bZ=a6+16|0;aY=c[bZ>>2]|0;if((aY|0)==0){break}else{a6=aY}}ab=+P(+(+h[99]- +h[98]));do{if(+P(+(+h[a6>>3]- +h[bn>>3]))<ab*1.0e-5){ac=+P(+(+h[71]- +h[70]));if(+P(+(+h[a6+8>>3]- +h[bn+8>>3]))>=ac*1.0e-5){b_=bY;b$=bn;break}b_=ap;b$=c[bn+16>>2]|0}else{b_=bY;b$=bn}}while(0);c[bZ>>2]=b$;b=b_+ao|0;b0=a6;b1=b;b2=+(ao|0);b3=b;as=3179}else{if((bY|0)<=(ao|0)){b4=bn;b5=ao;b6=bY;b7=0;b8=0.0;break}b0=0;b1=bY;b2=0.0;b3=bY-ao|0;as=3179}}while(0);L4314:do{if((as|0)==3179){as=0;ab=+(b3|0);ac=1.0/+(c[13366]|0);if(b2>=ab){b4=bn;b5=ao;b6=b1;b7=b0;b8=ab;break}ap=b1-ao|0;a$=2;G=b2;I=b2+1.0;b=ao;aY=bn;while(1){if(G>I){b9=c[aY+16>>2]|0;ca=b+1|0;cb=I+1.0}else{b9=aY;ca=b;cb=I}ev(G,b9,b1,ao,ca,bX,f,g);s=+h[f>>3];r=+h[g>>3];a8=c[12922]|0;if((a8|0)>98){a1=ut(56)|0;if((a1|0)==0){gk();a2=ut(56)|0;if((a2|0)==0){as=3186;break L4086}else{cc=a2}}else{cc=a1}a1=cc;a2=c[12922]<<6;a_=ut(a2)|0;if((a_|0)==0){gk();a0=ut(a2)|0;if((a0|0)==0){as=3189;break L4086}else{cd=a0}}else{cd=a_}a_=cd;a0=cc+4|0;c[a0>>2]=a_;a2=c[12922]|0;L4330:do{if((a2|0)>0){aX=0;a7=a_;while(1){p=aX<<1;h[a7+(aX<<6)+8>>3]=+h[51696+(p<<3)>>3];h[(c[a0>>2]|0)+(aX<<6)+16>>3]=+h[51696+((p|1)<<3)>>3];h[(c[a0>>2]|0)+(aX<<6)+24>>3]=+h[6688];p=aX+1|0;if((p|0)>=(a2|0)){break L4330}aX=p;a7=c[a0>>2]|0}}}while(0);c[cc+44>>2]=a2;c[cc>>2]=c[13370];c[13370]=a1;a[cc+8|0]=0;a0=a8<<1;h[6462]=+h[51696+(a0-2<<3)>>3];h[6463]=+h[51696+(a0-1<<3)>>3];c[12922]=1;ce=1}else{ce=a8}a0=ce<<1;h[51696+(a0<<3)>>3]=s;h[51696+((a0|1)<<3)>>3]=r;c[12922]=ce+1;if((a$|0)==(aa(c[13366]|0,ap)+1|0)){b4=b9;b5=ca;b6=b1;b7=b0;b8=ab;break L4314}Y=ac+G;if(Y<ab){a$=a$+1|0;G=Y;I=cb;b=ca;aY=b9}else{b4=b9;b5=ca;b6=b1;b7=b0;b8=ab;break}}}}while(0);ev(b8+-1.0e-5,b4,b6,ao,b5,bX,f,g);ab=+h[f>>3];I=+h[g>>3];aY=c[12922]|0;if((aY|0)>98){b=ut(56)|0;if((b|0)==0){gk();a$=ut(56)|0;if((a$|0)==0){as=3199;break L4086}else{cf=a$}}else{cf=b}b=cf;a$=c[12922]<<6;ap=ut(a$)|0;if((ap|0)==0){gk();a6=ut(a$)|0;if((a6|0)==0){as=3202;break L4086}else{cg=a6}}else{cg=ap}ap=cg;a6=cf+4|0;c[a6>>2]=ap;a$=c[12922]|0;L4346:do{if((a$|0)>0){a0=0;a_=ap;while(1){a7=a0<<1;h[a_+(a0<<6)+8>>3]=+h[51696+(a7<<3)>>3];h[(c[a6>>2]|0)+(a0<<6)+16>>3]=+h[51696+((a7|1)<<3)>>3];h[(c[a6>>2]|0)+(a0<<6)+24>>3]=+h[6688];a7=a0+1|0;if((a7|0)>=(a$|0)){break L4346}a0=a7;a_=c[a6>>2]|0}}}while(0);c[cf+44>>2]=a$;c[cf>>2]=c[13370];c[13370]=b;a[cf+8|0]=0;a6=aY<<1;h[6462]=+h[51696+(a6-2<<3)>>3];h[6463]=+h[51696+(a6-1<<3)>>3];c[12922]=1;ch=1}else{ch=aY}a6=ch<<1;h[51696+(a6<<3)>>3]=ab;h[51696+((a6|1)<<3)>>3]=I;c[12922]=ch+1;if(bX){c[b7+16>>2]=0}a6=ut(56)|0;if((a6|0)==0){gk();ap=ut(56)|0;if((ap|0)==0){as=3211;break L4086}else{ci=ap}}else{ci=a6}a6=ci;ap=c[12922]<<6;ao=ut(ap)|0;if((ao|0)==0){gk();a_=ut(ap)|0;if((a_|0)==0){as=3214;break L4086}else{cj=a_}}else{cj=ao}ao=cj;a_=ci+4|0;c[a_>>2]=ao;ap=c[12922]|0;L4361:do{if((ap|0)>0){a0=0;a7=ao;while(1){aX=a0<<1;h[a7+(a0<<6)+8>>3]=+h[51696+(aX<<3)>>3];h[(c[a_>>2]|0)+(a0<<6)+16>>3]=+h[51696+((aX|1)<<3)>>3];h[(c[a_>>2]|0)+(a0<<6)+24>>3]=+h[6688];aX=a0+1|0;if((aX|0)>=(ap|0)){break L4361}a0=aX;a7=c[a_>>2]|0}}}while(0);c[ci+44>>2]=ap;c[ci>>2]=c[13370];c[13370]=a6;a[ci+8|0]=0;c[12922]=0;bE=bn}else{bE=bn}}while(0);while(1){M=c[bE+16>>2]|0;uu(bE);if((M|0)==0){bp=bo;break}else{bE=M}}}}while(0);if((c[j>>2]|0)>0){aj=bp}else{break}}}}while(0);aj=c[13370]|0;if((aj|0)!=(ba|0)){a[aj+8|0]=1;aj=(c[13370]|0)+9|0;if((a[64788]&1)==0){ck=bi}else{ck=+Z(+(bi*+h[8100]))}ud(aj,32,53520,1.0,ck);h[(c[13370]|0)+48>>3]=bi}aj=k+1|0;if((aj|0)<(bh|0)){k=aj;be=bi}else{break L4084}}if((as|0)==3052){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=135136,v)|0);return 0}else if((as|0)==3081){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=105064,v)|0);return 0}else if((as|0)==3084){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=98096,v)|0);return 0}else if((as|0)==3049){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=155520,v)|0);return 0}else if((as|0)==3087){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=92152,v)|0);return 0}else if((as|0)==3091){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=84352,v)|0);return 0}else if((as|0)==3127){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=155520,v)|0);return 0}else if((as|0)==3063){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=135136,v)|0);return 0}else if((as|0)==3060){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=155520,v)|0);return 0}else if((as|0)==3130){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=135136,v)|0);return 0}else if((as|0)==3141){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=155520,v)|0);return 0}else if((as|0)==3144){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=135136,v)|0);return 0}else if((as|0)==3156){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=155520,v)|0);return 0}else if((as|0)==3159){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=135136,v)|0);return 0}else if((as|0)==3186){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=155520,v)|0);return 0}else if((as|0)==3189){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=135136,v)|0);return 0}else if((as|0)==3199){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=155520,v)|0);return 0}else if((as|0)==3202){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=135136,v)|0);return 0}else if((as|0)==3211){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=155520,v)|0);return 0}else if((as|0)==3214){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=135136,v)|0);return 0}}}while(0);if((bc|0)!=0){as=bc;while(1){bc=c[as+12>>2]|0;uu(as);if((bc|0)==0){break}else{as=bc}}}if(!al){al=bb;while(1){bb=c[al+16>>2]|0;uu(al);if((bb|0)==0){break}else{al=bb}}}bd=c[13370]|0;i=e;return bd|0}function eq(){a[47544]=0;a[47856]=1;return}function er(){a[47544]=1;a[47856]=1;return}function es(){return}function et(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0,f=0,g=0,i=0.0,j=0.0,k=0,l=0,m=0.0,n=0.0,o=0.0;d=b+(c-1<<3)|0;e=+h[d>>3];f=c-2|0;if((f|0)>0){g=0;i=e;j=+h[b>>3];while(1){k=g+1|0;l=b+(k<<3)|0;m=+h[l>>3]- +h[a+(g*24&-1)+16>>3]*j;h[l>>3]=m;n=i- +h[a+(g*24&-1)>>3]*j;if((k|0)<(f|0)){g=k;i=n;j=m}else{o=n;break}}}else{o=e}g=(c|0)>1;if(g){h[d>>3]=o- +h[a+(f*24&-1)>>3]*+h[b+(f<<3)>>3]}if((c|0)>0){k=0;do{l=b+(k<<3)|0;h[l>>3]=+h[l>>3]/+h[a+(k*24&-1)+8>>3];k=k+1|0;}while((k|0)<(c|0))}o=+h[d>>3];if(g){g=b+(f<<3)|0;h[g>>3]=+h[g>>3]-o*+h[a+(f*24&-1)>>3]}g=c-3|0;if((g|0)<=-1){return}c=g;e=+h[b+(f<<3)>>3];while(1){f=b+(c<<3)|0;j=+h[f>>3]-(+h[a+(c*24&-1)+16>>3]*e+o*+h[a+(c*24&-1)>>3]);h[f>>3]=j;if((c|0)>0){c=c-1|0;e=j}else{break}}return}function eu(b,d,e,f){b=b|0;d=+d;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;if(!f){a[b+20|0]=0;c[e>>2]=(c[e>>2]|0)-1}do{if((c[b>>2]|0)==0){if((c[b+4>>2]|0)==0){g=0}else{break}return g|0}}while(0);f=ew(b,d)|0;i=0;j=b;k=f;while(1){l=c[j>>2]|0;if((l|0)==(i|0)){n=c[j+4>>2]|0}else{n=l}l=c[n>>2]|0;if((l|0)==(j|0)){o=0}else{o=(a[l+20|0]&1)==0?0:l}l=c[n+4>>2]|0;if((l|0)==(j|0)){p=o}else{p=(a[l+20|0]&1)==0?o:l}l=c[n+8>>2]|0;if((l|0)==(j|0)){q=p}else{q=(a[l+20|0]&1)==0?p:l}if((q|0)==0){r=3261;break}a[q+20|0]=0;c[e>>2]=(c[e>>2]|0)-1;l=q+24|0;do{if((c[l>>2]|0)==3){s=k}else{t=ew(q,d)|0;c[k+16>>2]=t;u=+P(+(+h[99]- +h[98]));if(+P(+(+h[k>>3]- +h[t>>3]))>=u*1.0e-5){s=t;break}u=+P(+(+h[71]- +h[70]));if(+P(+(+h[k+8>>3]- +h[t+8>>3]))>=u*1.0e-5){s=t;break}uu(t);s=k}}while(0);if((q|0)==(b|0)){r=3271;break}if((c[l>>2]|0)==2){r=3270;break}else{i=n;j=q;k=s}}if((r|0)==3270){c[s+16>>2]=0;g=f;return g|0}else if((r|0)==3261){c[k+16>>2]=0;if((f|0)!=0){k=f;while(1){q=c[k+16>>2]|0;uu(k);if((q|0)==0){break}else{k=q}}}aI(223848,41,1,c[m>>2]|0);g=0;return g|0}else if((r|0)==3271){c[s+16>>2]=0;h[f>>3]=+h[s>>3];h[f+8>>3]=+h[s+8>>3];g=f;return g|0}return 0}function ev(a,b,d,e,f,g,j,k){a=+a;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,w=0.0,x=0,y=0,z=0.0,A=0,B=0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0.0,I=0.0,J=0,K=0.0;l=i;m=f+e<<3;n=ut(m)|0;do{if((n|0)==0){gk();o=ut(m)|0;if((o|0)!=0){p=o;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=122288,v)|0)}else{p=n}}while(0);n=p;o=ut(m)|0;do{if((o|0)==0){gk();q=ut(m)|0;if((q|0)!=0){r=q;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=122288,v)|0)}else{r=o}}while(0);o=r;m=f-e|0;if((e|0)<0){s=n+(f<<3)|0;t=+h[s>>3];h[j>>3]=t;u=o+(f<<3)|0;w=+h[u>>3];h[k>>3]=w;uu(p);uu(r);i=l;return}else{x=m;y=b}while(1){h[n+(x<<3)>>3]=+h[y>>3];h[o+(x<<3)>>3]=+h[y+8>>3];b=x+1|0;if((b|0)>(f|0)){break}else{x=b;y=c[y+16>>2]|0}}if((e|0)<1){s=n+(f<<3)|0;t=+h[s>>3];h[j>>3]=t;u=o+(f<<3)|0;w=+h[u>>3];h[k>>3]=w;uu(p);uu(r);i=l;return}y=e+1|0;z=+(d-e|0);x=1;b=-1;while(1){q=x+m|0;if((q|0)<=(f|0)){A=y+b|0;B=f;while(1){do{if(g){C=+(A+B|0);D=+(B|0)}else{do{if((B|0)>(e|0)){if((B|0)>(d|0)){E=z;break}E=+(B-e|0)}else{E=0.0}}while(0);F=A+B|0;if((F|0)<=(e|0)){C=0.0;D=E;break}if((F|0)>(d|0)){C=z;D=E;break}C=+(F-e|0);D=E}}while(0);if(D==C){G=B-1|0}else{F=n+(B<<3)|0;H=a-D;I=C-D;J=B-1|0;K=C-a;h[F>>3]=H*+h[F>>3]/I+K*+h[n+(J<<3)>>3]/I;F=o+(B<<3)|0;h[F>>3]=H*+h[F>>3]/I+K*+h[o+(J<<3)>>3]/I;G=J}if((G|0)<(q|0)){break}else{B=G}}}B=x+1|0;q=x^-1;if((B|0)>(e|0)){break}else{x=B;b=q}}s=n+(f<<3)|0;t=+h[s>>3];h[j>>3]=t;u=o+(f<<3)|0;w=+h[u>>3];h[k>>3]=w;uu(p);uu(r);i=l;return}function ew(a,b){a=a|0;b=+b;var d=0,e=0,f=0.0,g=0,j=0.0,k=0,l=0;d=i;e=a+8|0;f=+h[(c[e>>2]|0)+24>>3];g=a+12|0;j=(b-f)/(+h[(c[g>>2]|0)+24>>3]-f);f=j<0.0?0.0:j;j=f>1.0?1.0:f;a=ut(24)|0;do{if((a|0)==0){gk();k=ut(24)|0;if((k|0)!=0){l=k;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=216768,v)|0);return 0}else{l=a}}while(0);f=1.0-j;h[l>>3]=j*+h[(c[g>>2]|0)+8>>3]+f*+h[(c[e>>2]|0)+8>>3];h[l+8>>3]=j*+h[(c[g>>2]|0)+16>>3]+f*+h[(c[e>>2]|0)+16>>3];i=d;return l|0}function ex(){var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0;d=i;i=i+16|0;e=d|0;f=d+8|0;g=hA(c[11932]|0,78360)|0;if((g|0)==0){uj(-1,146640,(v=i,i=i+8|0,c[v>>2]=c[11932],v)|0)}h=e;if((cd(h|0,4,1,g|0)|0)==0){uj(-1,146480,(v=i,i=i+8|0,c[v>>2]=c[11932],v)|0)}j=c[e>>2]|0;k=j>>>0>65535?3:0;l=(k-2|0)>>>0<2;L4523:do{if(l){m=0;n=3;o=j&255;while(1){p=h+n|0;a[h+m|0]=a[p]|0;a[p]=o;p=m+1|0;q=n-1|0;if((p|0)>=(q|0)){break L4523}m=p;n=q;o=a[h+p|0]|0}}}while(0);j=(k-1|0)>>>0<2;if(j){k=h+2|0;o=a[k]|0;n=h+3|0;a[k]=a[n]|0;a[n]=o;o=a[h]|0;n=h+1|0;a[h]=a[n]|0;a[n]=o}o=f;if((cd(o|0,4,1,g|0)|0)==0){uj(-1,146280,(v=i,i=i+8|0,c[v>>2]=c[11932],v)|0)}if(l){l=0;n=3;do{h=o+l|0;k=a[h]|0;m=o+n|0;a[h]=a[m]|0;a[m]=k;l=l+1|0;n=n-1|0;}while((l|0)<(n|0))}if(j){j=o+2|0;n=a[j]|0;l=o+3|0;a[j]=a[l]|0;a[l]=n;n=a[o]|0;l=o+1|0;a[o]=a[l]|0;a[l]=n}az(g|0);a[47544]=0;a[47856]=1;c[(c[12172]|0)+128>>2]=8;c[(c[12172]|0)+140>>2]=c[e>>2];c[(c[12172]|0)+144>>2]=c[f>>2];c[(c[12172]|0)+152>>2]=1;c[(c[12172]|0)+156>>2]=-1;a[(c[12172]|0)+124|0]=1;c[(c[12172]|0)+112>>2]=-3;c[(c[12172]|0)+116>>2]=-4;eQ(4);f=c[11950]|0;if((c[11884]|0)<1){e=db(f,12,215112)|0;c[11950]=e;c[11884]=1;r=e}else{r=f}c[r+4>>2]=1;b[(c[11950]|0)+8>>1]=b[24026]|0;r=c[11950]|0;if((c[11884]|0)<2){f=db(r,24,215112)|0;c[11950]=f;c[11884]=2;s=f}else{s=r}c[s+16>>2]=1;b[(c[11950]|0)+20>>1]=b[24026]|0;s=c[11950]|0;if((c[11884]|0)<3){r=db(s,36,215112)|0;c[11950]=r;c[11884]=3;t=r}else{t=s}c[t+28>>2]=1;b[(c[11950]|0)+32>>1]=b[24026]|0;t=c[11950]|0;if((c[11884]|0)<4){s=db(t,48,215112)|0;c[11950]=s;c[11884]=4;u=s}else{u=t}c[u+40>>2]=1;b[(c[11950]|0)+44>>1]=b[24026]|0;u=c[11950]|0;if((c[11884]|0)>=1){w=u;x=w|0;c[x>>2]=0;c[11870]=4;c[262]=2;c[265]=3;c[268]=4;c[271]=1;i=d;return}t=db(u,12,215112)|0;c[11950]=t;c[11884]=1;w=t;x=w|0;c[x>>2]=0;c[11870]=4;c[262]=2;c[265]=3;c[268]=4;c[271]=1;i=d;return}function ey(e,f,j){e=e|0;f=f|0;j=j|0;var k=0,l=0,p=0,q=0,r=0,s=0,t=0,u=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0,aN=0,aO=0,aP=0,aQ=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aY=0,a_=0,a$=0,a0=0,a1=0.0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a9=0.0,ba=0,bb=0.0,bd=0,be=0,bf=0,bg=0,bh=0.0,bi=0,bj=0,bk=0,bl=0.0,bm=0,bn=0,bo=0,bp=0.0,bq=0,br=0,bs=0,bu=0.0,bv=0,bw=0,bx=0,by=0.0,bz=0,bA=0.0,bB=0,bC=0,bD=0,bE=0,bF=0,bG=0,bH=0,bI=0,bJ=0,bK=0,bM=0,bN=0,bO=0,bQ=0,bR=0,bS=0,bT=0,bU=0,bV=0,bW=0,bX=0,bY=0,bZ=0,b_=0,b$=0,b0=0,b1=0,b2=0,b3=0,b4=0,b5=0,b6=0,b7=0,b8=0,b9=0,ca=0,cb=0,cc=0,cd=0,ce=0,cf=0,cg=0,ch=0,ci=0,cj=0,ck=0,cl=0,cm=0,cn=0,co=0.0,cq=0,cr=0,cs=0,ct=0,cv=0,cw=0,cx=0,cy=0,cz=0,cA=0,cB=0,cC=0,cD=0,cE=0.0,cF=0,cG=0,cH=0,cI=0,cJ=0,cK=0,cL=0,cM=0,cN=0,cO=0,cP=0,cQ=0,cR=0,cS=0,cT=0,cU=0,cV=0,cW=0,cX=0,cY=0,cZ=0,c_=0,c$=0,c0=0,c1=0,c2=0,c3=0,c4=0,c5=0,c6=0,c7=0,c8=0,c9=0,da=0,dc=0,dd=0,de=0,df=0,dg=0,dh=0,di=0;k=i;i=i+504|0;l=k|0;p=k+24|0;q=k+48|0;r=k+72|0;s=k+96|0;t=k+120|0;u=k+144|0;x=k+168|0;y=k+192|0;z=k+216|0;A=k+240|0;B=k+264|0;C=k+288|0;D=k+312|0;E=k+336|0;F=k+424|0;G=k+432|0;H=(c[13898]|0)-1|0;a[43464]=1;if((c[12892]|0)!=0){ez();c[12892]=0}uu(c[11930]|0);c[11930]=0;c[11872]=0;uu(c[11902]|0);c[11902]=0;eA();c[11942]=-1;c[11900]=0;c[11898]=0;c[11904]=1;c[11762]=2147483647;uu(c[9356]|0);c[9356]=0;c[11946]=0;c[14126]=2;c[10874]=1;c[10872]=1;c[10808]=0;c[10806]=0;c[8834]=2147483647;c[8832]=2147483647;a[47544]=0;a[47856]=0;c[11858]=0;c[11864]=0;a[47584]=0;a[47464]=0;a[47736]=0;c[11944]=j;c[13488]=-99;a[32928]=0;a[48872]=0;if((f|0)>=8){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=95312,v)|0);return 0}if((e|0)==0){uf(c[13898]|0,205112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}I=c[11932]|0;do{if((a[e]|0)==0){if((I|0)==0){J=c[13898]|0;uf(J,94168,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}if((a[I]|0)!=0){break}J=c[13898]|0;uf(J,94168,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else{uu(I);c[11932]=bP(e|0)|0}}while(0);e=c[60]|0;if((e|0)!=0){e1(e)}c[60]=0;e=c[13898]|0;I=c[8272]|0;L4579:do{if((e|0)<(I|0)){J=j+23|0;K=r|0;L=r+8|0;M=p|0;N=p+8|0;O=l|0;P=l+8|0;Q=q|0;R=q+8|0;S=z|0;T=z+8|0;U=y|0;V=y+8|0;W=x|0;X=x+8|0;Y=u|0;Z=u+8|0;_=t|0;$=t+8|0;ab=s|0;ac=s+8|0;ad=D|0;ae=D+8|0;af=C|0;ag=C+8|0;ah=B|0;ai=B+8|0;aj=A|0;ak=A+8|0;al=0;am=0;an=0;ao=0;ap=0;aq=e;ar=I;L4581:while(1){as=c[1054]|0;at=(a[as+(aq*40&-1)|0]&1)==0;if(at){break L4579}au=c[as+(aq*40&-1)+36>>2]|0;av=as+(aq*40&-1)+32|0;aw=c[10036]|0;ax=0;while(1){if((ax|0)>=(au|0)){ay=3362;break}if((a[aw+((c[av>>2]|0)+ax|0)|0]|0)==(a[ax+103664|0]|0)){ax=ax+1|0}else{break}}if((ay|0)==3362){ay=0;if((ax|0)==1){break L4579}}aw=c[av>>2]|0;if(!((au|0)>0&(at^1))){break L4579}az=c[10036]|0;aA=0;aB=0;aC=aw;while(1){if((a[aA+204608|0]|0)==(a[az+(aA+aC|0)|0]|0)){aD=aC;aF=aB}else{if((aA|0)!=3){ay=3393;break}aD=aC-1|0;aF=1}aG=aA+1|0;if((aG|0)<(aF+au|0)){aA=aG;aB=aF;aC=aD}else{ay=3369;break}}do{if((ay|0)==3369){ay=0;if((aF|0)==0){if(!((aA|0)==6|(aA|0)==2)){ay=3393;break}}aC=aq+1|0;c[13898]=aC;if((a[47856]&1)!=0){aH=aC;ay=4033;break L4581}a[47856]=1;a[47544]=1;c[12170]=0;c[12220]=0;c[12222]=0;c[12224]=0;c[11876]=0;aC=c[11950]|0;if((c[11884]|0)<1){aB=db(aC,12,215112)|0;c[11950]=aB;c[11884]=1;aI=aB}else{aI=aC}c[aI>>2]=0;aC=c[12172]|0;aB=c[11864]|0;if((aB|0)>0){az=0;av=aB;while(1){aB=aC+(az*232&-1)+224|0;ax=c[aB>>2]|0;if((ax|0)==0){aJ=av}else{uu(ax);c[aB>>2]=0;aJ=c[11864]|0}aB=az+1|0;if((aB|0)<(aJ|0)){az=aB;av=aJ}else{break}}}c[11864]=0;av=c[11862]|0;if((av|0)==0){c[12204]=c[12200];c[12208]=0;az=c[12172]|0;if((c[11880]|0)<1){aC=db(az,232,216568)|0;aB=aC;c[12172]=aB;if((aC|0)==0){ay=3388;break L4581}c[11880]=1;aK=c[11864]|0;aL=aB}else{aK=0;aL=az}uD(aL+(aK*232&-1)|0,48440,232);c[11864]=(c[11864]|0)+1}else{c[12204]=c[12202];c[12208]=c[12206];if((av|0)>(c[11880]|0)){az=db(c[12172]|0,av*232&-1,216568)|0;c[12172]=az;if((az|0)==0){ay=3381;break L4581}c[11880]=av}az=c[12172]|0;aB=c[11864]|0;if((av|0)>0){aC=0;ax=aB;while(1){uD(az+(ax*232&-1)|0,48440,232);aG=(c[11864]|0)+1|0;c[11864]=aG;aN=aC+1|0;if((aN|0)<(av|0)){aC=aN;ax=aG}else{aO=aG;break}}}else{aO=aB}uD(az|0,c[12168]|0,aO*232&-1)}eB(ap,0);aP=ap;aQ=ao;aS=an;aT=am;aU=al}}while(0);L4629:do{if((ay|0)==3393){ay=0;if(!((au|0)>0&(at^1))){break L4579}aA=c[10036]|0;ax=0;aC=0;av=aw;while(1){if((a[ax+151232|0]|0)==(a[aA+(ax+av|0)|0]|0)){aV=av;aW=aC}else{if((ax|0)!=3){break}aV=av-1|0;aW=1}aG=ax+1|0;if((aG|0)<(aW+au|0)){ax=aG;aC=aW;av=aV}else{ay=3399;break}}do{if((ay|0)==3399){ay=0;if((aW|0)==0){if(!((ax|0)==6|(ax|0)==2)){break}}aX=aq+1|0;c[13898]=aX;if(ap){aH=aX;ay=4035;break L4581}if((a[47544]&1)==0){if((a[47856]&1)!=0){ay=3404;break L4581}}a[47544]=1;a[43464]=0;aP=1;aQ=ao;aS=an;aT=am;aU=al;break L4629}}while(0);if(!((au|0)>0&(at^1))){break L4579}ax=c[10036]|0;av=0;aC=0;aA=aw;while(1){if((a[av+91224|0]|0)==(a[ax+(av+aA|0)|0]|0)){aY=aA;a_=aC}else{if((av|0)!=6){break}aY=aA-1|0;a_=1}az=av+1|0;if((az|0)<(a_+au|0)){av=az;aC=a_;aA=aY}else{ay=3412;break}}do{if((ay|0)==3412){ay=0;if((a_|0)==0){if(!((av|0)==10|(av|0)==5)){break}}c[13898]=aq+1;a[47544]=1;a[47464]=1;a[43464]=0;aP=ap;aQ=ao;aS=an;aT=am;aU=al;break L4629}}while(0);if(!((au|0)>0&(at^1))){break L4579}av=c[10036]|0;aA=0;aC=0;ax=aw;while(1){if((a[aA+90656|0]|0)==(a[av+(aA+ax|0)|0]|0)){a$=ax;a0=aC}else{if((aA|0)!=1){break}a$=ax-1|0;a0=1}az=aA+1|0;if((az|0)<(a0+au|0)){aA=az;aC=a0;ax=a$}else{ay=3421;break}}do{if((ay|0)==3421){ay=0;if((a0|0)==0){if(!((aA|0)==0|(aA|0)==5)){break}}if(al){aH=aq;ay=4034;break L4581}if((a[47856]&1)!=0){if((a[47544]&1)!=0){ay=3426;break L4581}}ax=aq+1|0;c[13898]=ax;L4677:do{if((ax|0)<(ar|0)){L4679:do{if((a[as+(ax*40&-1)|0]&1)!=0){aC=c[as+(ax*40&-1)+36>>2]|0;av=as+(ax*40&-1)+32|0;az=c[10036]|0;aB=0;while(1){if((aB|0)>=(aC|0)){break}if((a[az+((c[av>>2]|0)+aB|0)|0]|0)==(a[aB+103664|0]|0)){aB=aB+1|0}else{break L4679}}if((aB|0)==1){ay=3435;break L4677}}}while(0);a[14176]=1;is(D);a[14176]=0;if((c[ad>>2]|0)!=3){c[13898]=ax;ay=3435;break}av=c[ae>>2]|0;c[9356]=av;if((av|0)==0){break}a[37432]=0;aP=ap;aQ=ao;aS=an;aT=am;aU=1;break L4629}else{ay=3435}}while(0);if((ay|0)==3435){ay=0;c[9356]=0}ax=is(C)|0;av=c[ax>>2]|0;if((av|0)==1){a1=+(c[ax+8>>2]|0)}else if((av|0)==2){a1=+h[ax+8>>3]}else if((av|0)==3){a1=+uz(c[ax+8>>2]|0,0)}else{ay=3442;break L4581}if((c[af>>2]|0)==3){uu(c[ag>>2]|0);c[af>>2]=1}ax=~~a1;c[11898]=ax;av=c[13898]|0;az=c[8272]|0;L4701:do{if((az|0)>(av|0)){aC=c[1054]|0;if((a[aC+(av*40&-1)|0]&1)==0){break}aG=c[aC+(av*40&-1)+36>>2]|0;aN=aC+(av*40&-1)+32|0;a2=c[10036]|0;a3=0;while(1){if((a3|0)>=(aG|0)){break}if((a[a2+((c[aN>>2]|0)+a3|0)|0]|0)==(a[a3+183584|0]|0)){a3=a3+1|0}else{break L4701}}if((a3|0)!=1){break}aN=av+1|0;c[13898]=aN;L4709:do{if((az|0)>(aN|0)){if((a[aC+(aN*40&-1)|0]&1)==0){ay=3458;break}aG=c[aC+(aN*40&-1)+36>>2]|0;a4=aC+(aN*40&-1)+32|0;a5=0;while(1){if((a5|0)>=(aG|0)){break}if((a[a2+((c[a4>>2]|0)+a5|0)|0]|0)==(a[a5+183584|0]|0)){a5=a5+1|0}else{ay=3458;break L4709}}if((a5|0)!=1){ay=3458;break}c[11762]=2147483647;a6=aN;a7=az}else{ay=3458}}while(0);if((ay|0)==3458){ay=0;aN=is(B)|0;a2=c[aN>>2]|0;if((a2|0)==3){a9=+uz(c[aN+8>>2]|0,0)}else if((a2|0)==1){a9=+(c[aN+8>>2]|0)}else if((a2|0)==2){a9=+h[aN+8>>3]}else{ay=3462;break L4581}if((c[ah>>2]|0)==3){uu(c[ai>>2]|0);c[ah>>2]=1}aN=~~a9;c[11762]=aN;ba=c[13898]|0;if((aN|0)<(c[11898]|0)){ay=3467;break L4581}a6=ba;a7=c[8272]|0}if((a7|0)<=(a6|0)){aP=ap;aQ=ao;aS=an;aT=am;aU=1;break L4629}aN=c[1054]|0;if((a[aN+(a6*40&-1)|0]&1)==0){aP=ap;aQ=ao;aS=an;aT=am;aU=1;break L4629}a2=c[aN+(a6*40&-1)+36>>2]|0;aC=aN+(a6*40&-1)+32|0;aN=c[10036]|0;a3=0;while(1){if((a3|0)>=(a2|0)){break}if((a[aN+((c[aC>>2]|0)+a3|0)|0]|0)==(a[a3+183584|0]|0)){a3=a3+1|0}else{aP=ap;aQ=ao;aS=an;aT=am;aU=1;break L4629}}if((a3|0)!=1){aP=ap;aQ=ao;aS=an;aT=am;aU=1;break L4629}c[13898]=a6+1;aC=is(A)|0;aN=c[aC>>2]|0;if((aN|0)==1){bb=+(c[aC+8>>2]|0)}else if((aN|0)==2){bb=+h[aC+8>>3]}else if((aN|0)==3){bb=+uz(c[aC+8>>2]|0,0)}else{ay=3478;break L4581}if((c[aj>>2]|0)==3){uu(c[ak>>2]|0);c[aj>>2]=1}aC=~~bb;aN=(aC|0)>-1?aC:-aC|0;c[11904]=aN;if((aN|0)<1){ay=3482;break L4581}else{aP=ap;aQ=ao;aS=an;aT=am;aU=1;break L4629}}}while(0);c[11762]=ax;aP=ap;aQ=ao;aS=an;aT=am;aU=1;break L4629}}while(0);if(at){break L4579}L4747:do{if((au|0)>0){aA=c[10036]|0;az=0;av=0;aN=aw;while(1){if((a[az+90160|0]|0)==(a[aA+(az+aN|0)|0]|0)){bd=aN;be=av}else{if((az|0)!=2){break L4747}bd=aN-1|0;be=1}aC=az+1|0;if((aC|0)<(be+au|0)){az=aC;av=be;aN=bd}else{break}}if((be|0)==0){if(!((az|0)==1|(az|0)==5)){break}}if(am){aH=aq;ay=4036;break L4581}a[43464]=0;aN=aq+1|0;c[13898]=aN;L4760:do{if((ar|0)>(aN|0)){if((a[as+(aN*40&-1)|0]&1)==0){ay=3500;break}av=c[as+(aN*40&-1)+36>>2]|0;aA=as+(aN*40&-1)+32|0;ax=c[10036]|0;aC=0;while(1){if((aC|0)>=(av|0)){break}if((a[ax+((c[aA>>2]|0)+aC|0)|0]|0)==(a[aC+183584|0]|0)){aC=aC+1|0}else{ay=3500;break L4760}}if((aC|0)==1){bf=aN;bg=ar}else{ay=3500}}else{ay=3500}}while(0);if((ay|0)==3500){ay=0;aN=is(z)|0;az=c[aN>>2]|0;if((az|0)==1){bh=+(c[aN+8>>2]|0)}else if((az|0)==2){bh=+h[aN+8>>3]}else if((az|0)==3){bh=+uz(c[aN+8>>2]|0,0)}else{ay=3504;break L4581}if((c[S>>2]|0)==3){uu(c[T>>2]|0);c[S>>2]=1}aN=~~bh;c[10872]=aN;bi=c[13898]|0;if((aN|0)<1){ay=3509;break L4581}bf=bi;bg=c[8272]|0}L4779:do{if((bg|0)>(bf|0)){aN=c[1054]|0;if((a[aN+(bf*40&-1)|0]&1)==0){bj=bf;bk=bg;break}az=c[aN+(bf*40&-1)+36>>2]|0;aA=aN+(bf*40&-1)+32|0;ax=c[10036]|0;av=0;while(1){if((av|0)>=(az|0)){break}if((a[ax+((c[aA>>2]|0)+av|0)|0]|0)==(a[av+183584|0]|0)){av=av+1|0}else{bj=bf;bk=bg;break L4779}}if((av|0)!=1){bj=bf;bk=bg;break}aA=bf+1|0;c[13898]=aA;L4787:do{if((bg|0)>(aA|0)){if((a[aN+(aA*40&-1)|0]&1)==0){break}az=c[aN+(aA*40&-1)+36>>2]|0;aC=aN+(aA*40&-1)+32|0;a3=0;while(1){if((a3|0)>=(az|0)){break}if((a[ax+((c[aC>>2]|0)+a3|0)|0]|0)==(a[a3+183584|0]|0)){a3=a3+1|0}else{break L4787}}if((a3|0)==1){bj=aA;bk=bg;break L4779}}}while(0);aA=is(y)|0;ax=c[aA>>2]|0;if((ax|0)==1){bl=+(c[aA+8>>2]|0)}else if((ax|0)==2){bl=+h[aA+8>>3]}else if((ax|0)==3){bl=+uz(c[aA+8>>2]|0,0)}else{ay=3526;break L4581}if((c[U>>2]|0)==3){uu(c[V>>2]|0);c[U>>2]=1}aA=~~bl;c[10874]=aA;bm=c[13898]|0;if((aA|0)<1){ay=3531;break L4581}bj=bm;bk=c[8272]|0}else{bj=bf;bk=bg}}while(0);L4805:do{if((bk|0)>(bj|0)){aA=c[1054]|0;if((a[aA+(bj*40&-1)|0]&1)==0){bn=bj;bo=bk;break}ax=c[aA+(bj*40&-1)+36>>2]|0;aN=aA+(bj*40&-1)+32|0;av=c[10036]|0;aC=0;while(1){if((aC|0)>=(ax|0)){break}if((a[av+((c[aN>>2]|0)+aC|0)|0]|0)==(a[aC+183584|0]|0)){aC=aC+1|0}else{bn=bj;bo=bk;break L4805}}if((aC|0)!=1){bn=bj;bo=bk;break}aN=bj+1|0;c[13898]=aN;L4813:do{if((bk|0)>(aN|0)){if((a[aA+(aN*40&-1)|0]&1)==0){break}ax=c[aA+(aN*40&-1)+36>>2]|0;az=aA+(aN*40&-1)+32|0;a5=0;while(1){if((a5|0)>=(ax|0)){break}if((a[av+((c[az>>2]|0)+a5|0)|0]|0)==(a[a5+183584|0]|0)){a5=a5+1|0}else{break L4813}}if((a5|0)==1){bn=aN;bo=bk;break L4805}}}while(0);aN=is(x)|0;av=c[aN>>2]|0;if((av|0)==1){bp=+(c[aN+8>>2]|0)}else if((av|0)==2){bp=+h[aN+8>>3]}else if((av|0)==3){bp=+uz(c[aN+8>>2]|0,0)}else{ay=3548;break L4581}if((c[W>>2]|0)==3){uu(c[X>>2]|0);c[W>>2]=1}aN=~~bp;c[10806]=aN;bq=c[13898]|0;if((aN|0)<0){ay=3553;break L4581}bn=bq;bo=c[8272]|0}else{bn=bj;bo=bk}}while(0);L4831:do{if((bo|0)>(bn|0)){aN=c[1054]|0;if((a[aN+(bn*40&-1)|0]&1)==0){br=bn;bs=bo;break}av=c[aN+(bn*40&-1)+36>>2]|0;aA=aN+(bn*40&-1)+32|0;aC=c[10036]|0;az=0;while(1){if((az|0)>=(av|0)){break}if((a[aC+((c[aA>>2]|0)+az|0)|0]|0)==(a[az+183584|0]|0)){az=az+1|0}else{br=bn;bs=bo;break L4831}}if((az|0)!=1){br=bn;bs=bo;break}aA=bn+1|0;c[13898]=aA;L4839:do{if((bo|0)>(aA|0)){if((a[aN+(aA*40&-1)|0]&1)==0){break}av=c[aN+(aA*40&-1)+36>>2]|0;ax=aN+(aA*40&-1)+32|0;a3=0;while(1){if((a3|0)>=(av|0)){break}if((a[aC+((c[ax>>2]|0)+a3|0)|0]|0)==(a[a3+183584|0]|0)){a3=a3+1|0}else{break L4839}}if((a3|0)==1){br=aA;bs=bo;break L4831}}}while(0);aA=is(u)|0;aC=c[aA>>2]|0;if((aC|0)==1){bu=+(c[aA+8>>2]|0)}else if((aC|0)==2){bu=+h[aA+8>>3]}else if((aC|0)==3){bu=+uz(c[aA+8>>2]|0,0)}else{ay=3570;break L4581}if((c[Y>>2]|0)==3){uu(c[Z>>2]|0);c[Y>>2]=1}aA=~~bu;c[10808]=aA;bv=c[13898]|0;if((aA|0)<0){ay=3575;break L4581}br=bv;bs=c[8272]|0}else{br=bn;bs=bo}}while(0);L4857:do{if((bs|0)>(br|0)){aA=c[1054]|0;if((a[aA+(br*40&-1)|0]&1)==0){bw=br;bx=bs;break}aC=c[aA+(br*40&-1)+36>>2]|0;aN=aA+(br*40&-1)+32|0;az=c[10036]|0;ax=0;while(1){if((ax|0)>=(aC|0)){break}if((a[az+((c[aN>>2]|0)+ax|0)|0]|0)==(a[ax+183584|0]|0)){ax=ax+1|0}else{bw=br;bx=bs;break L4857}}if((ax|0)!=1){bw=br;bx=bs;break}aN=br+1|0;c[13898]=aN;L4865:do{if((bs|0)>(aN|0)){if((a[aA+(aN*40&-1)|0]&1)==0){break}aC=c[aA+(aN*40&-1)+36>>2]|0;av=aA+(aN*40&-1)+32|0;a5=0;while(1){if((a5|0)>=(aC|0)){break}if((a[az+((c[av>>2]|0)+a5|0)|0]|0)==(a[a5+183584|0]|0)){a5=a5+1|0}else{break L4865}}if((a5|0)==1){bw=aN;bx=bs;break L4857}}}while(0);aN=is(t)|0;az=c[aN>>2]|0;if((az|0)==1){by=+(c[aN+8>>2]|0)}else if((az|0)==2){by=+h[aN+8>>3]}else if((az|0)==3){by=+uz(c[aN+8>>2]|0,0)}else{ay=3592;break L4581}if((c[_>>2]|0)==3){uu(c[$>>2]|0);c[_>>2]=1}aN=~~by;c[8832]=aN;bz=c[13898]|0;if((aN|0)<(c[10806]|0)){ay=3597;break L4581}bw=bz;bx=c[8272]|0}else{bw=br;bx=bs}}while(0);if((bx|0)<=(bw|0)){aP=ap;aQ=ao;aS=an;aT=1;aU=al;break L4629}aN=c[1054]|0;if((a[aN+(bw*40&-1)|0]&1)==0){aP=ap;aQ=ao;aS=an;aT=1;aU=al;break L4629}az=c[aN+(bw*40&-1)+36>>2]|0;aA=aN+(bw*40&-1)+32|0;aN=c[10036]|0;ax=0;while(1){if((ax|0)>=(az|0)){break}if((a[aN+((c[aA>>2]|0)+ax|0)|0]|0)==(a[ax+183584|0]|0)){ax=ax+1|0}else{aP=ap;aQ=ao;aS=an;aT=1;aU=al;break L4629}}if((ax|0)!=1){aP=ap;aQ=ao;aS=an;aT=1;aU=al;break L4629}c[13898]=bw+1;aA=is(s)|0;aN=c[aA>>2]|0;if((aN|0)==1){bA=+(c[aA+8>>2]|0)}else if((aN|0)==2){bA=+h[aA+8>>3]}else if((aN|0)==3){bA=+uz(c[aA+8>>2]|0,0)}else{ay=3608;break L4581}if((c[ab>>2]|0)==3){uu(c[ac>>2]|0);c[ab>>2]=1}aA=~~bA;c[8834]=aA;if((aA|0)<(c[10808]|0)){ay=3612;break L4581}else{aP=ap;aQ=ao;aS=an;aT=1;aU=al;break L4629}}}while(0);if(!((au|0)>0&(at^1))){break L4579}aA=c[10036]|0;aN=0;az=0;av=aw;while(1){if((a[aN+89424|0]|0)==(a[aA+(aN+av|0)|0]|0)){bB=av;bC=az}else{if((aN|0)!=4){break}bB=av-1|0;bC=1}aC=aN+1|0;if((aC|0)<(bC+au|0)){aN=aC;az=bC;av=bB}else{ay=3619;break}}do{if((ay|0)==3619){ay=0;if((bC|0)==0){if((aN-3|0)>>>0>=2){break}}if(an){aH=aq;ay=4037;break L4581}c[13898]=aq+1;uB(55600,24544);c[11670]=232;w=121;a[55702]=w&255;w=w>>8;a[55703|0]=w&255;it();av=c[18070]|0;az=db(av,c[av>>2]<<5|8,105624)|0;c[18070]=0;c[60]=az;c[11670]=0;aP=ap;aQ=ao;aS=1;aT=am;aU=al;break L4629}}while(0);if(at){break L4579}L4914:do{if((au|0)>0){aN=c[10036]|0;az=0;av=0;aA=aw;while(1){if((a[az+89072|0]|0)==(a[aN+(az+aA|0)|0]|0)){bD=aA;bE=av}else{if((az|0)!=1){break L4914}bD=aA-1|0;bE=1}aC=az+1|0;if((aC|0)<(bE+au|0)){az=aC;av=bE;aA=bD}else{break}}if((bE|0)==0){if(!((az|0)==0|(az|0)==5)){break}}if(ao){aH=aq;ay=4038;break L4581}if((a[47856]&1)==0){bF=aq;bG=ar}else{eA();bF=c[13898]|0;bG=c[8272]|0}L4930:do{if((bF|0)<(bG|0)){aA=c[1054]|0;L4932:do{if((a[aA+(bF*40&-1)|0]&1)!=0){av=c[aA+(bF*40&-1)+36>>2]|0;aN=aA+(bF*40&-1)+32|0;ax=c[10036]|0;aC=0;while(1){if((aC|0)>=(av|0)){break}if((a[ax+((c[aN>>2]|0)+aC|0)|0]|0)==(a[aC+103664|0]|0)){aC=aC+1|0}else{break L4932}}if((aC|0)==1){bH=bF;bI=bG;break L4930}}}while(0);aN=bF+1|0;c[13898]=aN;if((a[aA+(aN*40&-1)|0]&1)==0){bH=aN;bI=bG;break}ax=c[aA+(aN*40&-1)+32>>2]|0;av=c[10036]|0;a5=a[av+ax|0]|0;if(!((a5<<24>>24|0)==39|(a5<<24>>24|0)==34)){bH=aN;bI=bG;break}L4941:do{if((aN|0)<(bG|0)){a5=c[aA+(aN*40&-1)+36>>2]|0;a3=0;while(1){if((a3|0)>=(a5|0)){ay=3647;break}if((a[av+(a3+ax|0)|0]|0)==(a[a3+103664|0]|0)){a3=a3+1|0}else{break}}if((ay|0)==3647){ay=0;if((a3|0)==1){ay=3650;break}}a[14176]=1;is(r);a[14176]=0;if((c[K>>2]|0)!=3){c[13898]=aN;ay=3650;break}a5=c[L>>2]|0;c[11930]=a5;if((a5|0)==0){bJ=0;break}else{bK=0;bM=a5}L4952:while(1){aC=a8(bM|0,37)|0;if((aC|0)==0){break}else{bN=aC}while(1){aC=bN+1|0;a2=a[aC]|0;if((aZ(140272,a2|0,15)|0)!=0){bN=aC;continue}if((a2|0)==108){break}else if(!((a2|0)==42|(a2|0)==37)){bJ=a5;break L4941}a2=a8(bN+2|0,37)|0;if((a2|0)==0){break L4952}else{bN=a2}}a2=bN+2|0;if((aZ(140120,a[a2]|0|0,7)|0)==0){bJ=a5;break L4941}else{bK=bK+1|0;bM=a2}}if((bK-1|0)>>>0<7){aP=ap;aQ=1;aS=an;aT=am;aU=al;break L4629}else{bJ=a5}}else{ay=3650}}while(0);if((ay|0)==3650){ay=0;c[11930]=0;bJ=0}uu(bJ);c[11930]=0;c[13898]=aN;bH=aN;bI=c[8272]|0}else{bH=bF;bI=bG}}while(0);L4964:do{if((bH|0)<(bI|0)){az=c[1054]|0;L4966:do{if((a[az+(bH*40&-1)|0]&1)==0){bO=0;bQ=bH;bR=bI;bS=az}else{ax=c[az+(bH*40&-1)+36>>2]|0;av=az+(bH*40&-1)+32|0;aA=c[10036]|0;a3=0;while(1){if((a3|0)>=(ax|0)){break}if((a[aA+((c[av>>2]|0)+a3|0)|0]|0)==(a[a3+103664|0]|0)){a3=a3+1|0}else{bO=0;bQ=bH;bR=bI;bS=az;break L4966}}if((a3|0)==1){bT=0;bU=bH;bV=bI;break L4964}else{bO=0;bQ=bH;bR=bI;bS=az}}}while(0);while(1){az=c[11870]|0;if((az|0)>=(f|0)){ay=3666;break L4581}aN=(bR|0)>(bQ|0);av=a[bS+(bQ*40&-1)|0]|0;L4975:do{if(aN){aA=(av&1)==0;if(aA){ay=3680;break}ax=c[bS+(bQ*40&-1)+36>>2]|0;a5=bS+(bQ*40&-1)+32|0;a2=c[10036]|0;aC=0;while(1){if((aC|0)>=(ax|0)){ay=3672;break}if((a[a2+((c[a5>>2]|0)+aC|0)|0]|0)==(a[aC+183584|0]|0)){aC=aC+1|0}else{break}}do{if((ay|0)==3672){ay=0;if((aC|0)!=1){break}c[1048+(az*12&-1)>>2]=az;c[11870]=az+1;bW=(az|0)>(bO|0)?az:bO;break L4975}}while(0);if(aA){ay=3680;break}aC=c[bS+(bQ*40&-1)+36>>2]|0;a5=bS+(bQ*40&-1)+32|0;a2=c[10036]|0;ax=0;while(1){if((ax|0)>=(aC|0)){break}if((a[a2+((c[a5>>2]|0)+ax|0)|0]|0)==(a[ax+199040|0]|0)){ax=ax+1|0}else{ay=3680;break L4975}}if((ax|0)!=1){ay=3680;break}a[43464]=0;c[11670]=0;c[18068]=-99;it();a5=c[18070]|0;a2=db(a5,c[a5>>2]<<5|8,105624)|0;c[18070]=0;a5=c[11870]|0;c[1056+(a5*12&-1)>>2]=a2;a2=c[18068]|0;c[11870]=a5+1;c[1048+(a5*12&-1)>>2]=a2;bW=(bO|0)<(a2|0)?a2:bO}else{ay=3680}}while(0);L4991:do{if((ay|0)==3680){ay=0;az=c[bS+(bQ*40&-1)+36>>2]|0;a3=c[bS+(bQ*40&-1)+32>>2]|0;a2=(av&1)==0;L4993:do{if((az|0)>0&(a2^1)){a5=c[10036]|0;aC=0;aA=0;a4=a3;while(1){if((a[aC+141928|0]|0)==(a[a5+(aC+a4|0)|0]|0)){bX=a4;bY=aA}else{if((aC|0)!=4){break}bX=a4-1|0;bY=1}aG=aC+1|0;if((aG|0)<(bY+az|0)){aC=aG;aA=bY;a4=bX}else{ay=3686;break}}do{if((ay|0)==3686){ay=0;if((bY|0)==0){if(!((aC|0)==3|(aC|0)==10)){break}}eY(3);bW=bO;break L4991}}while(0);if(a2){break}else{bZ=0;b_=0;b$=a3}while(1){if((a[bZ+141800|0]|0)==(a[a5+(bZ+b$|0)|0]|0)){b0=b$;b1=b_}else{if((bZ|0)!=5){b2=0;b3=0;b4=a3;break}b0=b$-1|0;b1=1}aC=bZ+1|0;if((aC|0)<(b1+az|0)){bZ=aC;b_=b1;b$=b0}else{ay=3694;break}}do{if((ay|0)==3694){ay=0;if((b1|0)==0){if(!((bZ|0)==4|(bZ|0)==11)){b2=0;b3=0;b4=a3;break}}eY(4);bW=bO;break L4991}}while(0);while(1){if((a[b2+141632|0]|0)==(a[a5+(b2+b4|0)|0]|0)){b5=b4;b6=b3}else{if((b2|0)!=4){b7=0;b8=0;b9=a3;break}b5=b4-1|0;b6=1}aC=b2+1|0;if((aC|0)<(b6+az|0)){b2=aC;b3=b6;b4=b5}else{ay=3701;break}}do{if((ay|0)==3701){ay=0;if((b6|0)==0){if(!((b2|0)==3|(b2|0)==10)){b7=0;b8=0;b9=a3;break}}eY(5);bW=bO;break L4991}}while(0);while(1){if((a[b7+141416|0]|0)==(a[a5+(b7+b9|0)|0]|0)){ca=b9;cb=b8}else{if((b7|0)!=5){cc=0;cd=0;ce=a3;break}ca=b9-1|0;cb=1}aC=b7+1|0;if((aC|0)<(cb+az|0)){b7=aC;b8=cb;b9=ca}else{ay=3708;break}}do{if((ay|0)==3708){ay=0;if((cb|0)==0){if(!((b7|0)==4|(b7|0)==11)){cc=0;cd=0;ce=a3;break}}eY(6);bW=bO;break L4991}}while(0);while(1){if((a[cc+141296|0]|0)==(a[a5+(cc+ce|0)|0]|0)){cf=ce;cg=cd}else{if((cc|0)!=4){ch=0;ci=0;cj=a3;break}cf=ce-1|0;cg=1}aC=cc+1|0;if((aC|0)<(cg+az|0)){cc=aC;cd=cg;ce=cf}else{ay=3715;break}}do{if((ay|0)==3715){ay=0;if((cg|0)==0){if(!((cc|0)==3|(cc|0)==10)){ch=0;ci=0;cj=a3;break}}eY(7);bW=bO;break L4991}}while(0);while(1){if((a[ch+141096|0]|0)==(a[a5+(ch+cj|0)|0]|0)){ck=cj;cl=ci}else{if((ch|0)!=5){cm=0;break}ck=cj-1|0;cl=1}aC=ch+1|0;if((aC|0)<(cl+az|0)){ch=aC;ci=cl;cj=ck}else{ay=3722;break}}do{if((ay|0)==3722){ay=0;if((cl|0)==0){if(!((ch|0)==4|(ch|0)==11)){cm=0;break}}eY(8);bW=bO;break L4991}}while(0);do{if((a[cm+128552|0]|0)!=(a[a5+(cm+a3|0)|0]|0)){break L4993}cm=cm+1|0;}while((cm|0)<(az|0));if((cm|0)!=3){break}eY(2);bW=bO;break L4991}}while(0);L5068:do{if(aN){L5070:do{if(!a2){ax=c[10036]|0;a5=0;while(1){if((a5|0)>=(az|0)){break}if((a[ax+(a5+a3|0)|0]|0)==(a[a5+103664|0]|0)){a5=a5+1|0}else{break L5070}}if((a5|0)==1){break L5068}}}while(0);a[14176]=1;is(p);a[14176]=0;if((c[M>>2]|0)!=3){c[13898]=bQ;break}ax=c[N>>2]|0;if((ax|0)==0){break}aC=ut(68)|0;if((aC|0)==0){gk();a4=ut(68)|0;if((a4|0)==0){ay=3740;break L4581}else{cn=a4}}else{cn=aC}c[cn>>2]=2;c[cn+8>>2]=1;c[cn+16>>2]=3;c[cn+24>>2]=ax;c[cn+40>>2]=42;c[cn+48>>2]=0;aC=c[11870]|0;c[1056+(aC*12&-1)>>2]=cn;a4=aC+1|0;c[11870]=a4;c[1048+(aC*12&-1)>>2]=-99;a[32928]=1;a[43464]=0;if((a4|0)!=2){bW=bO;break L4991}uu(c[11902]|0);c[11902]=bP(ax|0)|0;bW=bO;break L4991}}while(0);a3=is(l)|0;az=c[a3>>2]|0;if((az|0)==1){co=+(c[a3+8>>2]|0)}else if((az|0)==2){co=+h[a3+8>>3]}else if((az|0)==3){co=+uz(c[a3+8>>2]|0,0)}else{ay=3747;break L4581}if((c[O>>2]|0)==3){uu(c[P>>2]|0);c[O>>2]=1}a3=~~co;if((a3|0)<-2){ay=3751;break L4581}az=c[11870]|0;c[11870]=az+1;c[1048+(az*12&-1)>>2]=a3;bW=(a3|0)>(bO|0)?a3:bO}}while(0);aN=c[13898]|0;av=c[8272]|0;if((av|0)<=(aN|0)){bT=bW;bU=aN;bV=av;break L4964}a3=c[1054]|0;if((a[a3+(aN*40&-1)|0]&1)==0){bT=bW;bU=aN;bV=av;break L4964}az=c[a3+(aN*40&-1)+36>>2]|0;a2=a3+(aN*40&-1)+32|0;ax=c[10036]|0;a4=0;while(1){if((a4|0)>=(az|0)){break}if((a[ax+((c[a2>>2]|0)+a4|0)|0]|0)==(a[a4+183584|0]|0)){a4=a4+1|0}else{bT=bW;bU=aN;bV=av;break L4964}}if((a4|0)!=1){bT=bW;bU=aN;bV=av;break L4964}a2=aN+1|0;c[13898]=a2;if((a2|0)==0){bT=bW;bU=0;bV=av;break}else{bO=bW;bQ=a2;bR=av;bS=a3}}}else{bT=0;bU=bH;bV=bI}}while(0);if((a[47856]&1)==0){cq=bU;cr=bV}else{eQ(bT);cq=c[13898]|0;cr=c[8272]|0}if((cq|0)>=(cr|0)){aP=ap;aQ=1;aS=an;aT=am;aU=al;break L4629}a2=c[1054]|0;if((a[a2+(cq*40&-1)|0]&1)==0){aP=ap;aQ=1;aS=an;aT=am;aU=al;break L4629}ax=c[a2+(cq*40&-1)+36>>2]|0;az=a2+(cq*40&-1)+32|0;a2=c[10036]|0;aC=0;while(1){if((aC|0)>=(ax|0)){ay=3767;break}aA=c[az>>2]|0;if((a[a2+(aA+aC|0)|0]|0)==(a[aC+103664|0]|0)){aC=aC+1|0}else{cs=aA;break}}if((ay|0)==3767){ay=0;if((aC|0)==1){aP=ap;aQ=1;aS=an;aT=am;aU=al;break L4629}cs=c[az>>2]|0}aA=a[a2+cs|0]|0;if((aA<<24>>24|0)==39|(aA<<24>>24|0)==34){ct=0}else{aP=ap;aQ=1;aS=an;aT=am;aU=al;break L4629}while(1){if((ct|0)>=(ax|0)){ay=3772;break}if((a[a2+(ct+cs|0)|0]|0)==(a[ct+103664|0]|0)){ct=ct+1|0}else{break}}if((ay|0)==3772){ay=0;if((ct|0)==1){break L4581}}a[14176]=1;is(q);a[14176]=0;if((c[Q>>2]|0)!=3){ay=3774;break L4581}a2=c[R>>2]|0;c[11930]=a2;if((a2|0)==0){ay=4050;break L4581}else{cv=0;cw=a2}L5123:while(1){a2=a8(cw|0,37)|0;if((a2|0)==0){break}else{cx=a2}while(1){a2=cx+1|0;ax=a[a2]|0;if((aZ(140272,ax|0,15)|0)!=0){cx=a2;continue}if((ax|0)==108){break}else if(!((ax|0)==42|(ax|0)==37)){ay=4051;break L4581}ax=a8(cx+2|0,37)|0;if((ax|0)==0){break L5123}else{cx=ax}}ax=cx+2|0;if((aZ(140120,a[ax]|0|0,7)|0)==0){ay=4052;break L4581}else{cv=cv+1|0;cw=ax}}if((cv-1|0)>>>0<7){aP=ap;aQ=1;aS=an;aT=am;aU=al;break L4629}else{ay=4053;break L4581}}}while(0);if(!((au|0)>0&(at^1))){break L4579}ax=c[10036]|0;a2=0;while(1){if((a[a2+88368|0]|0)!=(a[ax+(a2+aw|0)|0]|0)){break}cy=a2+1|0;if((cy|0)<(au|0)){a2=cy}else{ay=3788;break}}do{if((ay|0)==3788){ay=0;if((cy|0)!=8){break}c[13898]=aq+1;a[872]=1;aP=ap;aQ=ao;aS=an;aT=am;aU=al;break L4629}}while(0);if(!((au|0)>0&(at^1))){break L4579}a2=c[10036]|0;ax=0;az=0;aC=aw;while(1){if((a[ax+87120|0]|0)==(a[a2+(ax+aC|0)|0]|0)){cz=aC;cA=az}else{if((ax|0)!=6){break L4579}cz=aC-1|0;cA=1}aA=ax+1|0;if((aA|0)<(cA+au|0)){ax=aA;az=cA;aC=cz}else{break}}if((cA|0)==0){if(!((ax|0)==5|(ax|0)==11)){break L4579}}c[13898]=aq+1;a[J]=1;aP=ap;aQ=ao;aS=an;aT=am;aU=al}}while(0);au=c[13898]|0;aw=c[8272]|0;if((au|0)<(aw|0)){al=aU;am=aT;an=aS;ao=aQ;ap=aP;aq=au;ar=aw}else{break L4579}}if((ay|0)==3462){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3509){uf(bi,139088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3388){c[11880]=0;uf(c[13898]|0,216112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3478){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3404){uf(aX,138160,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3482){uf(c[13898]|0,139280,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3526){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3531){uf(bm,139088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3575){uf(bv,138968,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3442){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3381){c[11880]=0;uf(c[13898]|0,216112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3426){uf(aq,139624,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3570){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3467){uf(ba,139480,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3504){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3548){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3553){uf(bq,138968,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3592){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3597){uf(bz,138672,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3608){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3612){uf(c[13898]|0,138528,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3666){uf(bQ,82688,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3740){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=179864,v)|0);return 0}else if((ay|0)==3747){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3751){uf(c[13898]|0,140816,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3774){c[13898]=cq}else if((ay|0)==4033){uf(aH,86056,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==4034){uf(aH,86056,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==4035){uf(aH,86056,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==4036){uf(aH,86056,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==4037){uf(aH,86056,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==4038){uf(aH,86056,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==4050){cB=c[13898]|0;uf(cB,140584,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==4051){cB=c[13898]|0;uf(cB,140584,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==4052){cB=c[13898]|0;uf(cB,140584,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==4053){cB=c[13898]|0;uf(cB,140584,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}c[11930]=0;cB=c[13898]|0;uf(cB,140584,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}}while(0);L5192:do{if((c[9056]|0)==2){if((c[11870]|0)==1){c[13488]=c[262];break}do{if((j|0)!=0){if((c[j+8>>2]|0)!=3){break}c[13488]=c[268];break L5192}}while(0);c[13488]=c[265]}}while(0);c[7638]=-1;c[8800]=0;c[11854]=0;c[11852]=0;c[11850]=0;if((c[8716]|0)>>>0<160){c[8716]=160;j=ut(160)|0;do{if((j|0)==0){gk();aq=ut(160)|0;if((aq|0)!=0){cC=aq;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=84816,v)|0);return 0}else{cC=j}}while(0);c[8802]=cC}cC=c[11932]|0;j=a[cC]|0;L5209:do{if((j<<24>>24|0)==60){do{if((uA(cC|0)|0)>>>0>1){if((a[cC+1|0]|0)!=38){if((j<<24>>24|0)==60){break}else if((j<<24>>24|0)==45){ay=3830;break L5209}else if((j<<24>>24|0)==43){ay=3836;break L5209}else{ay=3840;break L5209}}aq=aE(cC+2|0,F|0,10)|0;c[12894]=aq;cB=c[F>>2]|0;if((a[cB]|0)!=0|(aq|0)<0){uf(H,84216,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}if((cB|0)==((c[11932]|0)+2|0)){uf(H,84216,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}if((aq|0)==(aR(c[o>>2]|0)|0)){uf(H,83392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}aq=c[12894]|0;if((aq|0)==(aR(c[n>>2]|0)|0)){uf(H,83392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}aq=c[12894]|0;if((aq|0)==(aR(c[m>>2]|0)|0)){uf(H,83392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}aq=bL(c[12894]|0,193632)|0;c[12892]=aq;if((aq|0)!=0){break L5209}uf(H,80992,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}}while(0);if(!(a[14168]|0)){uf(-1,145320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}aq=bt(cC+1|0,193632)|0;c[12892]=aq;if((aq|0)==0){uj(H,79632,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else{a[47440]=1;break}}else if((j<<24>>24|0)==45){ay=3830}else if((j<<24>>24|0)==43){ay=3836}else{ay=3840}}while(0);do{if((ay|0)==3830){if((uA(cC|0)|0)!=1){ay=3840;break}a[30664]=1;a[872]=1;j=c[8804]|0;if((j|0)==0){c[12892]=0;ay=3834}else{F=c[j>>2]|0;c[12892]=F;if((F|0)==0){ay=3834}}if((ay|0)==3834){c[12892]=c[o>>2]}a[34104]=1}else if((ay|0)==3836){F=uA(cC|0)|0;if((F|0)==1){c[11854]=1;break}if(!((a[cC+1|0]|0)==43&(F|0)==2)){break}c[11854]=2}}while(0);do{if((ay|0)==3840){iQ(47728);do{if((cu(c[11932]|0,G|0)|0)>-1){if((c[G+8>>2]&61440|0)!=16384){break}uj(H,78896,(v=i,i=i+8|0,c[v>>2]=c[11932],v)|0);return 0}}while(0);cC=hA(c[11932]|0,(a[47856]&1)!=0?78360:193632)|0;c[12892]=cC;if((cC|0)!=0){break}uh(-1,77960,(v=i,i=i+8|0,c[v>>2]=c[11932],v)|0);a[47736]=1;cD=-1;i=k;return cD|0}}while(0);do{if((a[47544]&1)!=0){H=c[12892]|0;if((a[47856]&1)!=0){G=~~+eE(H);if((G|0)==0){uf(-1,146120,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}if((G|0)>1e8){uf(-1,145960,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}co=+eE(H);h[5944]=co;if((G|0)>1){cC=(G<<2)-8|0;cp(H|0,cC|0,1);cE=+eE(H)}else{cE=co}h[5946]=cE;h[5945]=+eE(H);cp(H|0,0,2);cC=(bc(H|0)|0)>>>2;F=G+1|0;j=(cC|0)/(F|0)&-1;if((aa(j,F)|0)==(cC|0)){cC=G<<2^-4;cp(H|0,cC|0,2);h[5947]=+eE(H);c[(c[12172]|0)+140>>2]=G;c[(c[12172]|0)+144>>2]=j;cp(H|0,0,0);break}else{uf(-1,145728,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}}H=c[11940]|0;if((H|0)!=0){uu(H)}c[12170]=0;c[12220]=0;c[12222]=0;c[12224]=0;c[11876]=0;H=c[11950]|0;if((c[11884]|0)<1){j=db(H,12,215112)|0;c[11950]=j;c[11884]=1;cF=j}else{cF=H}c[cF>>2]=0;H=c[12172]|0;j=c[11864]|0;if((j|0)>0){G=0;cC=j;while(1){j=H+(G*232&-1)+224|0;F=c[j>>2]|0;if((F|0)==0){cG=cC}else{uu(F);c[j>>2]=0;cG=c[11864]|0}j=G+1|0;if((j|0)<(cG|0)){G=j;cC=cG}else{break}}}c[11864]=0;cC=c[11862]|0;if((cC|0)==0){c[12204]=c[12200];c[12208]=0;G=c[12172]|0;do{if((c[11880]|0)<1){H=db(G,232,216568)|0;j=H;c[12172]=j;if((H|0)==0){c[11880]=0;uf(c[13898]|0,216112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else{c[11880]=1;cH=c[11864]|0;cI=j;break}}else{cH=0;cI=G}}while(0);uD(cI+(cH*232&-1)|0,48440,232);G=(c[11864]|0)+1|0;c[11864]=G;cJ=G;cK=cI}else{c[12204]=c[12202];c[12208]=c[12206];G=c[12172]|0;do{if((cC|0)>(c[11880]|0)){j=db(G,cC*232&-1,216568)|0;H=j;c[12172]=H;if((j|0)==0){c[11880]=0;uf(c[13898]|0,216112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else{c[11880]=cC;cL=c[11864]|0;cM=H;break}}else{cL=0;cM=G}}while(0);if((cC|0)>0){G=0;H=cL;while(1){uD(cM+(H*232&-1)|0,48440,232);j=(c[11864]|0)+1|0;c[11864]=j;F=G+1|0;if((F|0)<(cC|0)){G=F;H=j}else{cN=j;break}}}else{cN=cL}uD(cM|0,c[12168]|0,cN*232&-1);cJ=c[11864]|0;cK=c[12172]|0}if((cJ|0)>0){H=0;G=cJ;while(1){cC=cK+(H*232&-1)+224|0;j=c[cC>>2]|0;if((j|0)==0){cO=G}else{uu(j);c[cC>>2]=0;cO=c[11864]|0}cC=H+1|0;if((cC|0)<(cO|0)){H=cC;G=cO}else{break}}}c[11864]=0;G=0;H=0;cC=0;j=0;F=0;aq=0;L5319:while(1){cB=cC;aH=j;cq=F;bQ=aq;L5321:while(1){cP=cB;while(1){bz=eV()|0;if((bz|0)==0){ay=3886;break L5321}else{cQ=bz}while(1){if((aM(d[cQ]|0|0)|0)==0){break}else{cQ=cQ+1|0}}cR=a[cQ]|0;if(cR<<24>>24!=0){if((a8(c[11948]|0,cR<<24>>24|0)|0)==0){break}}if((cP|0)==0){cP=0}else{ay=3891;break L5321}}if(a[34104]|0){if((cR<<24>>24|0)==101|(cR<<24>>24|0)==69){ay=3894;break}}cS=eX(cQ)|0;if((cS|0)==0){ay=3911;break}if(!((cq|0)==0|(cS|0)==(cq|0))){ay=3897;break L5319}cT=bQ+1|0;if((cT|0)>(aH|0)){ax=aH<<1;bz=(ax|0)>1?ax:1;cU=db(cP,aa(bz<<2,cS),145264)|0;cV=bz}else{cU=cP;cV=aH}if((cS|0)>0){cW=H;cX=G;cY=0;ay=3903;break}else{cB=cU;aH=cV;cq=cS;bQ=cT}}if((ay|0)==3886){ay=0;a[47736]=1;ay=3911}else if((ay|0)==3891){ay=0;c[11940]=cP}else if((ay|0)==3894){ay=0;a[47736]=1;ay=3911}else if((ay|0)==3903){while(1){ay=0;aH=c[11952]|0;do{if((cY|0)<(c[10806]|0)){if((c[aH+(cY*24&-1)+8>>2]|0)==1){ay=3906;break}g[cU+(cX<<2)>>2]=0.0}else{ay=3906}}while(0);if((ay|0)==3906){ay=0;g[cU+(cX<<2)>>2]=+h[aH+(cY*24&-1)>>3]}cB=cX+1|0;do{if((c[(c[11952]|0)+(cY*24&-1)+8>>2]|0)==1){cZ=cW}else{bz=cW+1|0;if((cW|0)!=0){cZ=bz;break}uh(-1,145016,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);cZ=bz}}while(0);aH=cY+1|0;if((aH|0)<(cS|0)){cW=cZ;cX=cB;cY=aH;ay=3903}else{break}}G=cS+G|0;H=cZ;cC=cU;j=cV;F=cS;aq=cT;continue}if((ay|0)==3911){ay=0;c[11940]=cP;if((cP|0)==0){ay=3919;break}}aH=c[11864]|0;if((a[47464]&1)==0){c_=cq;c$=bQ}else{c_=cq-1|0;c$=bQ-1|0}bz=aH+1|0;ax=c[12172]|0;if((bz|0)>(c[11880]|0)){bq=db(ax,bz*232&-1,216568)|0;ba=bq;c[12172]=ba;if((bq|0)==0){ay=3916;break}c[11880]=bz;c0=c[11864]|0;c1=c[11940]|0;c2=ba}else{c0=aH;c1=cP;c2=ax}uD(c2+(c0*232&-1)|0,48440,232);c[11864]=(c[11864]|0)+1;c[c2+(aH*232&-1)+224>>2]=c1;c[11940]=0;c[(c[12172]|0)+(aH*232&-1)+140>>2]=c_;c[(c[12172]|0)+(aH*232&-1)+144>>2]=c$;c[(c[12172]|0)+(aH*232&-1)+148>>2]=0;c[12208]=0;G=0;H=0;cC=0;j=0;F=0;aq=0}if((ay|0)==3897){if((cP|0)==0){uf(-1,145560,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}uu(cP);uf(-1,145560,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3916){c[11880]=0;uf(c[13898]|0,216112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==3919){a[47736]=0;break}}}while(0);cP=a[47856]|0;c$=a[47544]|0;do{if((cP&1)==0){if((c$&1)!=0){ay=3922;break}a[47392]=0}else{ay=3922}}while(0);L5379:do{if((ay|0)==3922){a[47392]=1;c_=E;c1=(c$&1)==0;if((c$&cP&1)!=0){a[47464]=1}c2=c[13898]|0;c0=c[8272]|0;L5384:do{if((c2|0)<(c0|0)){cT=c[1054]|0;cS=c2;while(1){L5388:do{if((a[cT+(cS*40&-1)|0]&1)!=0){cV=c[cT+(cS*40&-1)+36>>2]|0;cU=cT+(cS*40&-1)+32|0;cZ=c[10036]|0;cY=0;while(1){if((cY|0)>=(cV|0)){ay=3930;break}if((a[cZ+((c[cU>>2]|0)+cY|0)|0]|0)==(a[cY+103664|0]|0)){cY=cY+1|0}else{break}}if((ay|0)==3930){ay=0;if((cY|0)==1){c3=cS;break L5384}}if((cV|0)<=0){break}cX=0;cW=0;cQ=c[cU>>2]|0;while(1){if((a[cX+196448|0]|0)==(a[cZ+(cX+cQ|0)|0]|0)){c4=cQ;c5=cW}else{if((cX|0)!=1){break L5388}c4=cQ-1|0;c5=1}cR=cX+1|0;if((cR|0)<(c5+cV|0)){cX=cR;cW=c5;cQ=c4}else{break}}if((c5|0)!=0){c3=cS;break L5384}if((cX|0)==0|(cX|0)==4){c3=cS;break L5384}}}while(0);cB=cS+1|0;c[13898]=cB;if((cB|0)<(c0|0)){cS=cB}else{c3=cB;break}}}else{c3=c2}}while(0);L5407:do{if((c3|0)<(c0|0)){cS=c[1054]|0;L5409:do{if((a[cS+(c3*40&-1)|0]&1)==0){c6=c[10036]|0}else{cT=c[cS+(c3*40&-1)+36>>2]|0;bQ=cS+(c3*40&-1)+32|0;cq=c[10036]|0;cB=0;while(1){if((cB|0)>=(cT|0)){break}if((a[cq+((c[bQ>>2]|0)+cB|0)|0]|0)==(a[cB+103664|0]|0)){cB=cB+1|0}else{c6=cq;break L5409}}if((cB|0)==1){c7=1;break L5407}else{c6=cq}}}while(0);bQ=c3+1|0;c[13898]=bQ;cT=c[cS+(bQ*40&-1)+36>>2]|0;cQ=c[cS+(bQ*40&-1)+32>>2]|0;cW=(a[cS+(bQ*40&-1)|0]&1)==0;bQ=(cT|0)>0;cV=30672;cZ=116448;L5417:while(1){L5419:do{if(!cW){if(bQ){cU=0;cY=0;cR=cQ;while(1){cO=a[cZ+cU|0]|0;if(cO<<24>>24==(a[c6+(cU+cR|0)|0]|0)){c8=cR;c9=cY}else{if(cO<<24>>24!=36){break L5419}c8=cR-1|0;c9=1}da=cU+1|0;if((da|0)<(c9+cT|0)){cU=da;cY=c9;cR=c8}else{break}}if((c9|0)==0){dc=da}else{dd=cV;break L5417}}else{dc=0}cR=a[cZ+dc|0]|0;if((cR<<24>>24|0)==36|(cR<<24>>24|0)==0){dd=cV;break L5417}}}while(0);cq=cV+8|0;cB=c[cq>>2]|0;if((cB|0)==0){dd=cq;break}else{cV=cq;cZ=cB}}cZ=c[dd+4>>2]|0;cV=c3+2|0;c[13898]=cV;if((cZ|0)!=-1){c7=cZ;break}uf(cV,143640,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else{c7=1}}while(0);c[13898]=c2;c0=0;while(1){if(c0>>>0>=31){break}if((c[48912+(c0<<3)>>2]|0)==(c7|0)){break}else{c0=c0+1|0}}if((c0|0)==31){uf(c2,148528,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}do{if(!c1){if((c[11876]|0)>3){uf(-1,148288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else{eQ(3);break}}}while(0);do{if((c[11870]|0)==0){if((a[47544]&1)!=0){c1=b[48918+(c0<<3)>>1]|0;if((c1<<16>>16|0)==2){if((b[48916+(c0<<3)>>1]|0)==1){c[11870]=3;break}else{uf(-1,147704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}}else if((c1<<16>>16|0)==1){if((b[48916+(c0<<3)>>1]|0)!=1){uf(-1,147704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}if((c[11856]|0)==2){c[11870]=3;break}else{c[11870]=2;c[265]=3;break}}else{uf(-1,147704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}}c1=b[48916+(c0<<3)>>1]|0;cV=c1<<16>>16;if(c1<<16>>16==0){uf(c2,148528,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}do{if((c[11864]|0)==0){ay=3976}else{if((a[(c[12172]|0)+124|0]&1)==0){ay=3976;break}if((b[48918+(c0<<3)>>1]|0)!=0){de=cV;break}uf(c2,148080,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}}while(0);do{if((ay|0)==3976){c1=(b[48918+(c0<<3)>>1]|0)+cV|0;if((c[11856]|0)!=2){de=c1;break}de=c1+1|0}}while(0);if((de|0)<8){c[11870]=de;eQ(de);break}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=147920,v)|0);return 0}}}while(0);c2=c[11864]|0;if((c2|0)==0){break}cV=c[12172]|0;if((a[cV+124|0]&1)==0){break}if((a[47544]&1)!=0){break}uD(c_|0,1048,84);if((c[cV>>2]|0)==0){if((c[cV+140>>2]|0)==0){df=0}else{ay=3994}}else{ay=3994}do{if((ay|0)==3994){if((c[cV+4>>2]|0)==0){if((c[cV+144>>2]|0)==0){df=1;break}}if((c[cV+8>>2]|0)==0){if((c[cV+148>>2]|0)==0){df=2;break}}df=3}}while(0);c1=c[11870]|0;cZ=c1+df|0;if((cZ|0)>6){uf(-1,146856,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}uD(1048+(df*12&-1)|0,c_|0,c1*12&-1);if((df|0)!=0){c1=0;do{c[1048+(c1*12&-1)>>2]=c[cV+112+(c1<<2)>>2];c[1056+(c1*12&-1)>>2]=0;c1=c1+1|0;}while((c1|0)<(df|0))}c[11870]=cZ;if(!((c[11856]|0)==2&(c2|0)>0)){break}c1=48918+(c0<<3)|0;c_=0;cT=cZ;L5502:while(1){do{if((c[cV+(c_*232&-1)+8>>2]|0)==0){if((c[cV+(c_*232&-1)+148>>2]|0)!=0){dg=cT;break}cQ=b[c1>>1]|0;if(cQ<<16>>16>2){ay=4004;break L5502}do{if((c[cV+(c_*232&-1)+4>>2]|0)==0){if((c[cV+(c_*232&-1)+144>>2]|0)!=0){dh=cT;break}if(cQ<<16>>16>1){ay=4008;break L5502}if((cT|0)>6){ay=4011;break L5502}if((cT|0)>1){bQ=cT;while(1){cW=bQ-1|0;cS=1048+(bQ*12&-1)|0;cB=1048+(cW*12&-1)|0;c[cS>>2]=c[cB>>2];c[cS+4>>2]=c[cB+4>>2];c[cS+8>>2]=c[cB+8>>2];if((cW|0)>1){bQ=cW}else{break}}}c[265]=-4;c[267]=0;bQ=cT+1|0;c[11870]=bQ;dh=bQ}else{dh=cT}}while(0);if((dh|0)>6){ay=4016;break L5502}if((dh|0)>2){cQ=dh;while(1){bQ=cQ-1|0;cW=1048+(cQ*12&-1)|0;cB=1048+(bQ*12&-1)|0;c[cW>>2]=c[cB>>2];c[cW+4>>2]=c[cB+4>>2];c[cW+8>>2]=c[cB+8>>2];if((bQ|0)>2){cQ=bQ}else{break}}}c[268]=-5;c[270]=0;cQ=dh+1|0;c[11870]=cQ;dg=cQ}else{dg=cT}}while(0);cQ=c_+1|0;if((cQ|0)<(c2|0)){c_=cQ;cT=dg}else{break L5379}}if((ay|0)==4004){uf(-1,147376,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==4008){uf(-1,147096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==4011){uf(-1,146856,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((ay|0)==4016){uf(-1,146856,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}}}while(0);do{if((a[47544]&1)==0){if((c[11864]|0)!=1){di=0;break}ay=c[12172]|0;if((c[ay+4>>2]|0)>0){di=1;break}di=(c[ay+144>>2]|0)>0&1}else{di=1}}while(0);a[47584]=di;cD=c[11870]|0;i=k;return cD|0}function ez(){var b=0,d=0,e=0;b=i;c[11874]=0;if((c[12892]|0)==0){i=b;return}d=c[60]|0;if((d|0)!=0){e1(d);c[60]=0}d=c[264]|0;if((d|0)!=0){e1(d);c[264]=0}d=c[267]|0;if((d|0)!=0){e1(d);c[267]=0}d=c[270]|0;if((d|0)!=0){e1(d);c[270]=0}d=c[273]|0;if((d|0)!=0){e1(d);c[273]=0}d=c[276]|0;if((d|0)!=0){e1(d);c[276]=0}d=c[279]|0;if((d|0)!=0){e1(d);c[279]=0}d=c[282]|0;if((d|0)!=0){e1(d);c[282]=0}if((a[47584]&1)!=0&(c[11864]|0)>0){d=0;do{uu(c[(c[12172]|0)+(d*232&-1)+224>>2]|0);c[(c[12172]|0)+(d*232&-1)+224>>2]=0;d=d+1|0;}while((d|0)<(c[11864]|0))}do{if(!(a[34104]|0)){d=c[12894]|0;if((d|0)==(aR(c[12892]|0)|0)){cs(c[12892]|0);d=c[m>>2]|0;e=c[12894]|0;cf(d|0,77344,(v=i,i=i+8|0,c[v>>2]=e,v)|0);break}e=c[12892]|0;if(a[47440]|0){a2(e|0);a[47440]=0;break}else{az(e|0);break}}}while(0);a[34104]=0;c[12892]=0;i=b;return}function eA(){var a=0;c[11870]=0;c[262]=1;c[263]=0;a=c[264]|0;if((a|0)!=0){e1(a);c[264]=0}c[12210]=99;c[265]=2;c[266]=0;a=c[267]|0;if((a|0)!=0){e1(a);c[267]=0}c[12211]=99;c[268]=3;c[269]=0;a=c[270]|0;if((a|0)!=0){e1(a);c[270]=0}c[12212]=99;c[271]=4;c[272]=0;a=c[273]|0;if((a|0)!=0){e1(a);c[273]=0}c[12213]=99;c[274]=5;c[275]=0;a=c[276]|0;if((a|0)!=0){e1(a);c[276]=0}c[12214]=99;c[277]=6;c[278]=0;a=c[279]|0;if((a|0)!=0){e1(a);c[279]=0}c[12215]=99;c[280]=7;c[281]=0;a=c[282]|0;if((a|0)==0){c[12216]=99;return}e1(a);c[282]=0;c[12216]=99;return}function eB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aZ=0,a_=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0;e=i;i=i+56|0;f=e|0;g=e+24|0;j=e+48|0;k=j;l=i;i=i+47|0;i=i+7>>3<<3;m=c[12202]|0;if((m|0)>-1){c[12204]=m}m=c[13898]|0;n=c[1054]|0;o=n+(m*40&-1)+36|0;p=c[o>>2]|0;q=n+(m*40&-1)+32|0;r=c[q>>2]|0;s=n+(m*40&-1)|0;L5605:do{if((a[s]&1)==0){t=0;u=4113}else{if((p|0)>0){w=c[10036]|0;x=0;y=0;z=r;while(1){if((a[x+179688|0]|0)==(a[w+(x+z|0)|0]|0)){A=z;B=y}else{if((x|0)!=4){t=0;u=4113;break L5605}A=z-1|0;B=1}C=x+1|0;if((C|0)<(B+p|0)){x=C;y=B;z=A}else{break}}if((B|0)!=0|(C|0)==4){u=4117;break}else{D=C}}else{D=0}t=(D|0)==9;u=4113}}while(0);if((u|0)==4113){if(t|(c[12204]|0)>-1){u=4117}else{E=m}}if((u|0)==4117){c[j>>2]=0;c[j+4>>2]=0;if(b){uf(m,138160,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}a[47544]=0;j=c[o>>2]|0;L5624:do{if((a[s]&1)!=0&(j|0)>0){o=c[10036]|0;t=0;D=0;C=c[q>>2]|0;while(1){if((a[t+179688|0]|0)==(a[o+(t+C|0)|0]|0)){F=C;G=D}else{if((t|0)!=4){break L5624}F=C-1|0;G=1}B=t+1|0;if((B|0)<(G+j|0)){t=B;D=G;C=F}else{break}}if((G|0)==0){if(!((t|0)==3|(t|0)==8)){break}}C=m+1|0;c[13898]=C;if((c[8272]|0)<=(C|0)){H=c[10880]|0;uf(C,H,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((a[n+(C*40&-1)|0]&1)==0){H=c[10880]|0;uf(C,H,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}D=c[n+(C*40&-1)+36>>2]|0;o=n+(C*40&-1)+32|0;B=c[10036]|0;A=0;while(1){if((A|0)>=(D|0)){break}if((a[B+((c[o>>2]|0)+A|0)|0]|0)==(a[A+115e3|0]|0)){A=A+1|0}else{u=4519;break}}if((u|0)==4519){H=c[10880]|0;uf(C,H,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((A|0)!=1){H=c[10880]|0;uf(C,H,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}o=m+2|0;c[13898]=o;D=c[n+(o*40&-1)+36>>2]|0;uD(k|0,B+(c[n+(o*40&-1)+32>>2]|0)|0,(D|0)<7?D:7);a[k+((D|0)>7?7:D)|0]=0;D=0;while(1){t=c[48696+(D<<3)>>2]|0;if((t|0)==0){break}if((uK(k|0,t|0)|0)==0){u=4137;break}else{D=D+1|0}}if((u|0)==4137){c[14150]=c[48700+(D<<3)>>2];c[12204]=D}if((c[12204]|0)==(D|0)){c[13898]=m+3;break}else{uf(o,178808,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if((c[11856]|0)!=0){do{if((aY(201e3,c[48696+(c[12204]<<3)>>2]|0)|0)==0){m=bh(c[11932]|0,46)|0;k=m+1|0;do{if((m|0)!=0){n=c[12174]|0;if((n|0)==0){break}else{I=0;J=n}do{if((uK(k|0,J|0)|0)==0){c[14150]=c[48700+(I<<3)>>2]}I=I+1|0;J=c[48696+(I<<3)>>2]|0;}while((J|0)!=0)}}while(0);if((c[14150]|0)!=64){break}uf(-1,178808,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);cS[c[14150]&511]()}if((c[11864]|0)>0){J=0;do{I=c[12172]|0;if((c[I+(J*232&-1)+140>>2]|0)==(c[12145]|0)){K=I}else{c[I+(J*232&-1)>>2]=0;c[(c[12172]|0)+(J*232&-1)+4>>2]=0;c[(c[12172]|0)+(J*232&-1)+8>>2]=0;K=c[12172]|0}do{if(+h[K+(J*232&-1)+168>>3]!=0.0){if((c[K+(J*232&-1)+112>>2]|0)==-3){h[K+(J*232&-1)+24>>3]=0.0}if((c[K+(J*232&-1)+116>>2]|0)==-3){h[K+(J*232&-1)+32>>3]=0.0}if((c[K+(J*232&-1)+120>>2]|0)!=-3){break}h[K+(J*232&-1)+40>>3]=0.0}}while(0);do{if(+h[K+(J*232&-1)+176>>3]!=0.0){if((c[K+(J*232&-1)+112>>2]|0)==-4){h[K+(J*232&-1)+24>>3]=0.0}if((c[K+(J*232&-1)+116>>2]|0)==-4){h[K+(J*232&-1)+32>>3]=0.0}if((c[K+(J*232&-1)+120>>2]|0)!=-4){break}h[K+(J*232&-1)+40>>3]=0.0}}while(0);do{if(+h[K+(J*232&-1)+184>>3]!=0.0){if((c[K+(J*232&-1)+112>>2]|0)==-5){h[K+(J*232&-1)+24>>3]=0.0}if((c[K+(J*232&-1)+116>>2]|0)==-5){h[K+(J*232&-1)+32>>3]=0.0}if((c[K+(J*232&-1)+120>>2]|0)!=-5){break}h[K+(J*232&-1)+40>>3]=0.0}}while(0);if((c[K+(J*232&-1)+192>>2]|0)!=0){c[K+(J*232&-1)+48>>2]=0}J=J+1|0;}while((J|0)<(c[11864]|0))}E=c[13898]|0}J=c[8272]|0;L5717:do{if((E|0)<(J|0)){K=l|0;I=f|0;k=f+8|0;m=g|0;o=g+8|0;D=0;n=0;H=0;G=0;F=0;j=0;q=0;s=0;B=0;C=0;A=0;t=0;p=0;r=0;z=0;y=0;x=E;w=J;L5719:while(1){L=c[1054]|0;M=(a[L+(x*40&-1)|0]&1)==0;N=c[L+(x*40&-1)+36>>2]|0;O=L+(x*40&-1)+32|0;L5721:do{if(M){uD(K|0,31040,47);P=c[O>>2]|0;u=4193}else{Q=c[10036]|0;R=0;while(1){if((R|0)>=(N|0)){u=4166;break}if((a[Q+((c[O>>2]|0)+R|0)|0]|0)==(a[R+103664|0]|0)){R=R+1|0}else{break}}if((u|0)==4166){u=0;if((R|0)==1){S=y;break L5717}}uD(K|0,31040,47);Q=c[O>>2]|0;if(!((N|0)>0&(M^1))){P=Q;u=4193;break}T=c[10036]|0;U=0;V=0;W=Q;while(1){if((a[U+178256|0]|0)==(a[T+(U+W|0)|0]|0)){X=W;Y=V}else{if((U|0)!=3){break}X=W-1|0;Y=1}Z=U+1|0;if((Z|0)<(Y+N|0)){U=Z;V=Y;W=X}else{u=4173;break}}do{if((u|0)==4173){u=0;if((Y|0)==0){if(!((U|0)==2|(U|0)==6)){break}}if(r){u=4538;break L5719}_=x+1|0;c[13898]=_;if(b){u=4177;break L5719}a[47544]=0;eS();$=y;aa=z;ab=1;ac=p;ad=t;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=H;an=n;ao=D;break L5721}}while(0);if(!((N|0)>0&(M^1))){P=Q;u=4193;break}U=c[10036]|0;W=0;V=0;T=Q;while(1){if((a[W+177976|0]|0)==(a[U+(W+T|0)|0]|0)){ap=T;aq=V}else{if((W|0)!=3){P=Q;u=4193;break L5721}ap=T-1|0;aq=1}R=W+1|0;if((R|0)<(aq+N|0)){W=R;V=aq;T=ap}else{break}}if((aq|0)==0){if(!((W|0)==2|(W|0)==5)){P=Q;u=4193;break}}if(H){u=4544;break L5719}ar=x+1|0;c[13898]=ar;if(b){u=4190;break L5719}a[47544]=0;eS();if((c[11864]|0)>0){as=0}else{$=y;aa=z;ab=r;ac=p;ad=t;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=1;an=n;ao=D;break}while(1){a[(c[12172]|0)+(as*232&-1)+124|0]=1;T=as+1|0;if((T|0)<(c[11864]|0)){as=T}else{$=y;aa=z;ab=r;ac=p;ad=t;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=1;an=n;ao=D;break}}}}while(0);L5760:do{if((u|0)==4193){u=0;O=(w|0)>(x|0);L5762:do{if(O){if(M){S=y;break L5717}Q=c[10036]|0;W=0;while(1){if((W|0)>=(N|0)){u=4198;break}if((a[Q+(P+W|0)|0]|0)==(a[W+177688|0]|0)){W=W+1|0}else{u=4199;break}}if((u|0)==4198){u=0;if((W|0)!=2){u=4199}}do{if((u|0)==4199){u=0;if(!O){break L5762}if(M){S=y;break L5717}Q=c[10036]|0;T=0;while(1){if((T|0)>=(N|0)){u=4204;break}if((a[Q+(P+T|0)|0]|0)==(a[T+177448|0]|0)){T=T+1|0}else{break}}if((u|0)==4204){u=0;if((T|0)==2){break}}if(!O){break L5762}if(M){S=y;break L5717}Q=c[10036]|0;V=0;while(1){if((V|0)>=(N|0)){u=4218;break}if((a[Q+(P+V|0)|0]|0)==(a[V+176840|0]|0)){V=V+1|0}else{u=4219;break}}if((u|0)==4218){u=0;if((V|0)!=2){u=4219}}do{if((u|0)==4219){u=0;if(!O){break L5762}if(M){S=y;break L5717}Q=c[10036]|0;T=0;while(1){if((T|0)>=(N|0)){u=4224;break}if((a[Q+(P+T|0)|0]|0)==(a[T+176376|0]|0)){T=T+1|0}else{break}}if((u|0)==4224){u=0;if((T|0)==2){break}}if(!O){break L5762}if(M){S=y;break L5717}Q=c[10036]|0;U=0;while(1){if((U|0)>=(N|0)){u=4236;break}if((a[Q+(P+U|0)|0]|0)==(a[U+175576|0]|0)){U=U+1|0}else{break}}if((u|0)==4236){u=0;if((U|0)==2){u=4237;break L5719}}if(!O){break L5762}if(M){S=y;break L5717}Q=c[10036]|0;T=0;while(1){if((T|0)>=(N|0)){u=4243;break}if((a[Q+(P+T|0)|0]|0)==(a[T+174728|0]|0)){T=T+1|0}else{break}}do{if((u|0)==4243){u=0;if((T|0)!=5){break}if(t){u=4537;break L5719}U=x+1|0;c[13898]=U;L5814:do{if((w|0)>(U|0)){if((a[L+(U*40&-1)|0]&1)==0){break}R=c[L+(U*40&-1)+36>>2]|0;Z=L+(U*40&-1)+32|0;at=0;while(1){if((at|0)>=(R|0)){break}if((a[Q+((c[Z>>2]|0)+at|0)|0]|0)==(a[at+115e3|0]|0)){at=at+1|0}else{break L5814}}if((at|0)!=1){break}eT(1,0);$=y;aa=z;ab=r;ac=p;ad=1;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=H;an=n;ao=D;break L5760}}while(0);if((c[11864]|0)>0){au=0}else{$=y;aa=z;ab=r;ac=p;ad=1;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=H;an=n;ao=D;break L5760}while(1){c[(c[12172]|0)+(au*232&-1)+12>>2]=-1;U=au+1|0;if((U|0)<(c[11864]|0)){au=U}else{$=y;aa=z;ab=r;ac=p;ad=1;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=H;an=n;ao=D;break L5760}}}}while(0);if(!O){break L5762}if(M){S=y;break L5717}Q=c[10036]|0;T=0;while(1){if((T|0)>=(N|0)){u=4259;break}if((a[Q+(P+T|0)|0]|0)==(a[T+174440|0]|0)){T=T+1|0}else{break}}do{if((u|0)==4259){u=0;if((T|0)!=5){break}if(p){u=4549;break L5719}U=c[12172]|0;if(!(H|(U|0)!=0)){u=4262;break L5719}Z=x+1|0;c[13898]=Z;L5836:do{if((w|0)>(Z|0)){if((a[L+(Z*40&-1)|0]&1)==0){break}R=c[L+(Z*40&-1)+36>>2]|0;av=L+(Z*40&-1)+32|0;aw=0;while(1){if((aw|0)>=(R|0)){break}if((a[Q+((c[av>>2]|0)+aw|0)|0]|0)==(a[aw+115e3|0]|0)){aw=aw+1|0}else{break L5836}}if((aw|0)!=1){break}eT(1,1);$=y;aa=z;ab=r;ac=1;ad=t;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=H;an=n;ao=D;break L5760}}while(0);if((c[11864]|0)>0){ax=0;ay=U}else{$=y;aa=z;ab=r;ac=1;ad=t;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=H;an=n;ao=D;break L5760}while(1){c[ay+(ax*232&-1)+16>>2]=-1;Z=ax+1|0;if((Z|0)>=(c[11864]|0)){$=y;aa=z;ab=r;ac=1;ad=t;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=H;an=n;ao=D;break L5760}ax=Z;ay=c[12172]|0}}}while(0);if(!O){break L5762}if(M){S=y;break L5717}Q=c[10036]|0;T=0;while(1){if((T|0)>=(N|0)){u=4278;break}if((a[Q+(P+T|0)|0]|0)==(a[T+173304|0]|0)){T=T+1|0}else{break}}if((u|0)==4278){u=0;if((T|0)==5){u=4279;break L5719}}if(!O){break L5762}if(M){S=y;break L5717}Q=c[10036]|0;U=0;while(1){if((U|0)>=(N|0)){u=4285;break}if((a[Q+(P+U|0)|0]|0)==(a[U+172952|0]|0)){U=U+1|0}else{break}}do{if((u|0)==4285){u=0;if((U|0)!=4){break}if(C){u=4535;break L5719}c[13898]=x+1;eT(2,-1);$=y;aa=z;ab=r;ac=p;ad=t;ae=A;af=1;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=H;an=n;ao=D;break L5760}}while(0);if(!O){break L5762}if(M){S=y;break L5717}U=c[10036]|0;Q=0;while(1){if((Q|0)>=(N|0)){u=4293;break}if((a[U+(P+Q|0)|0]|0)==(a[Q+172536|0]|0)){Q=Q+1|0}else{break}}do{if((u|0)==4293){u=0;if((Q|0)!=6){break}if(A){u=4546;break L5719}c[13898]=x+1;eT(2,1);$=y;aa=z;ab=r;ac=p;ad=t;ae=1;af=C;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=H;an=n;ao=D;break L5760}}while(0);if(!O){break L5762}if(M){S=y;break L5717}Q=c[10036]|0;U=0;while(1){if((U|0)>=(N|0)){break}if((a[Q+(P+U|0)|0]|0)==(a[U+172256|0]|0)){U=U+1|0}else{break L5762}}if((U|0)!=4){break L5762}if(z){u=4541;break L5719}c[13898]=x+1;eT(3,0);$=y;aa=1;ab=r;ac=p;ad=t;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=H;an=n;ao=D;break L5760}}while(0);if(n){u=4536;break L5719}if(!(H|(c[12172]|0)!=0)){u=4227;break L5719}c[13898]=x+1;eT(0,1);if((c[11864]|0)<=0){$=y;aa=z;ab=r;ac=p;ad=t;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=H;an=1;ao=D;break L5760}V=c[12172]|0;Q=0;while(1){h[V+(Q*232&-1)+40>>3]=+h[V+(Q*232&-1)+32>>3];T=Q+1|0;if((T|0)<(c[11864]|0)){Q=T}else{$=y;aa=z;ab=r;ac=p;ad=t;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=H;an=1;ao=D;break L5760}}}}while(0);if(D){u=4540;break L5719}c[13898]=x+1;eT(0,0);W=c[11864]|0;if(n){az=W}else{if((W|0)<=0){$=y;aa=z;ab=r;ac=p;ad=t;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=H;an=0;ao=1;break L5760}W=c[12172]|0;Q=0;while(1){h[W+(Q*232&-1)+32>>3]=+h[W+(Q*232&-1)+24>>3];V=Q+1|0;T=c[11864]|0;if((V|0)<(T|0)){Q=V}else{az=T;break}}}if((az|0)<=0){$=y;aa=z;ab=r;ac=p;ad=t;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=H;an=n;ao=1;break L5760}Q=c[12172]|0;W=0;while(1){h[Q+(W*232&-1)+40>>3]=+h[Q+(W*232&-1)+24>>3];T=W+1|0;if((T|0)<(c[11864]|0)){W=T}else{$=y;aa=z;ab=r;ac=p;ad=t;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=H;an=n;ao=1;break L5760}}}}while(0);if(!((N|0)>0&(M^1))){S=y;break L5717}O=c[10036]|0;W=0;Q=0;T=P;while(1){if((a[W+171944|0]|0)==(a[O+(W+T|0)|0]|0)){aA=T;aB=Q}else{if((W|0)!=5){break}aA=T-1|0;aB=1}V=W+1|0;if((V|0)<(aB+N|0)){W=V;Q=aB;T=aA}else{u=4310;break}}do{if((u|0)==4310){u=0;if((aB|0)==0){if(!((W|0)==4|(W|0)==9)){break}}if(z){u=4543;break L5719}c[13898]=x+1;if((c[11864]|0)<=0){$=y;aa=1;ab=r;ac=p;ad=t;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=H;an=n;ao=D;break L5760}T=c[12172]|0;Q=0;while(1){O=T+(Q*232&-1)+112|0;c[O>>2]=c[12099];c[O+4>>2]=c[48400>>2];c[O+8>>2]=c[48404>>2];O=Q+1|0;if((O|0)<(c[11864]|0)){Q=O}else{$=y;aa=1;ab=r;ac=p;ad=t;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=H;an=n;ao=D;break L5760}}}}while(0);if(M){S=y;break L5717}L5921:do{if((N|0)>0){W=c[10036]|0;Q=0;T=0;O=P;while(1){if((a[Q+171624|0]|0)==(a[W+(Q+O|0)|0]|0)){aC=O;aD=T}else{if((Q|0)!=4){break L5921}aC=O-1|0;aD=1}V=Q+1|0;if((V|0)<(aD+N|0)){Q=V;T=aD;O=aC}else{break}}if((aD|0)==0){if(!((Q|0)==3|(Q|0)==6)){break}}if(G){u=4326;break L5719}if(F){u=4548;break L5719}c[13898]=x+1;eT(4,c[11856]|0);$=y;aa=z;ab=r;ac=p;ad=t;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=1;al=0;am=H;an=n;ao=D;break L5760}}while(0);if(!((N|0)>0&(M^1))){S=y;break L5717}O=c[10036]|0;T=0;W=0;V=P;while(1){if((a[T+185064|0]|0)==(a[O+(T+V|0)|0]|0)){aE=V;aF=W}else{if((T|0)!=3){break}aE=V-1|0;aF=1}Z=T+1|0;if((Z|0)<(aF+N|0)){T=Z;W=aF;V=aE}else{u=4335;break}}do{if((u|0)==4335){u=0;if((aF|0)==0){if(!((T|0)==2|(T|0)==6)){break}}if(F){u=4338;break L5719}if(G){u=4539;break L5719}c[13898]=x+1;eT(5,c[11856]|0);$=y;aa=z;ab=r;ac=p;ad=t;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=0;al=1;am=H;an=n;ao=D;break L5760}}while(0);if(M){S=y;break L5717}L5952:do{if((N|0)>0){T=c[10036]|0;V=0;W=0;O=P;while(1){if((a[V+170712|0]|0)==(a[T+(V+O|0)|0]|0)){aG=O;aH=W}else{if((V|0)!=3){u=4350;break L5952}aG=O-1|0;aH=1}Z=V+1|0;if((Z|0)<(aH+N|0)){V=Z;W=aH;O=aG}else{break}}if((aH|0)!=0){break}if(!((V|0)==2|(V|0)==8)){u=4350}}else{u=4350}}while(0);do{if((u|0)==4350){u=0;if(!((N|0)>0&(M^1))){S=y;break L5717}O=c[10036]|0;W=0;T=0;Q=P;while(1){if((a[W+90456|0]|0)==(a[O+(W+Q|0)|0]|0)){aI=Q;aJ=T}else{if((W|0)!=3){break}aI=Q-1|0;aJ=1}Z=W+1|0;if((Z|0)<(aJ+N|0)){W=Z;T=aJ;Q=aI}else{u=4356;break}}if((u|0)==4356){u=0;if((aJ|0)!=0){break}if((W|0)==2|(W|0)==6){break}}if(M){S=y;break L5717}L5976:do{if((N|0)>0){Q=c[10036]|0;T=0;O=0;V=P;while(1){if((a[T+170128|0]|0)==(a[Q+(T+V|0)|0]|0)){aK=V;aL=O}else{if((T|0)!=4){break L5976}aK=V-1|0;aL=1}Z=T+1|0;if((Z|0)<(aL+N|0)){T=Z;O=aL;V=aK}else{break}}if((aL|0)==0){if(!((T|0)==3|(T|0)==13)){break}}if((c[11856]|0)==1){u=4370;break L5719}if(B){u=4545;break L5719}c[13898]=x+1;eT(7,0);$=y;aa=z;ab=r;ac=p;ad=t;ae=A;af=C;ag=1;ah=s;ai=q;aj=j;ak=F;al=G;am=H;an=n;ao=D;break L5760}}while(0);if(!((N|0)>0&(M^1))){S=y;break L5717}W=c[10036]|0;V=0;while(1){if((a[V+169288|0]|0)!=(a[W+(V+P|0)|0]|0)){break}aM=V+1|0;if((aM|0)<(N|0)){V=aM}else{u=4377;break}}do{if((u|0)==4377){u=0;if((aM|0)!=4){break}if(j){u=4550;break L5719}c[13898]=x+1;eT(8,0);$=y;aa=z;ab=r;ac=p;ad=t;ae=A;af=C;ag=B;ah=s;ai=q;aj=1;ak=F;al=G;am=H;an=n;ao=D;break L5760}}while(0);if(M){S=y;break L5717}L6001:do{if((N|0)>0){V=c[10036]|0;W=0;O=0;Q=P;while(1){if((a[W+168800|0]|0)==(a[V+(W+Q|0)|0]|0)){aN=Q;aO=O}else{if((W|0)!=3){break L6001}aN=Q-1|0;aO=1}Z=W+1|0;if((Z|0)<(aO+N|0)){W=Z;O=aO;Q=aN}else{break}}if((aO|0)==0){if(!((W|0)==2|(W|0)==6)){break}}if(q){u=4551;break L5719}aP=x+1|0;c[13898]=aP;if((w|0)<=(aP|0)){u=4515;break L5719}if((a[L+(aP*40&-1)|0]&1)==0){u=4516;break L5719}Q=c[L+(aP*40&-1)+36>>2]|0;O=L+(aP*40&-1)+32|0;V=c[10036]|0;T=0;while(1){if((T|0)>=(Q|0)){break}if((a[V+((c[O>>2]|0)+T|0)|0]|0)==(a[T+115e3|0]|0)){T=T+1|0}else{u=4513;break L5719}}if((T|0)!=1){u=4514;break L5719}aQ=x+2|0;c[13898]=aQ;O=c[L+(aQ*40&-1)+36>>2]|0;Q=c[L+(aQ*40&-1)+32>>2]|0;W=(a[L+(aQ*40&-1)|0]&1)==0;L6021:do{if((O|0)>0&(W^1)){Z=0;av=0;R=Q;while(1){if((a[Z+184456|0]|0)==(a[V+(Z+R|0)|0]|0)){aR=R;aS=av}else{if((Z|0)!=3){u=4405;break L6021}aR=R-1|0;aS=1}at=Z+1|0;if((at|0)<(aS+O|0)){Z=at;av=aS;R=aR}else{break}}if((aS|0)==0){if(!((Z|0)==2|(Z|0)==7)){u=4405;break}}c[12208]=0}else{u=4405}}while(0);L6032:do{if((u|0)==4405){u=0;T=(w|0)>(aQ|0);L6034:do{if(T){if(W){u=4521;break L5719}else{aT=0}while(1){if((aT|0)>=(O|0)){u=4409;break}if((a[V+(Q+aT|0)|0]|0)==(a[aT+167960|0]|0)){aT=aT+1|0}else{u=4410;break}}if((u|0)==4409){u=0;if((aT|0)!=4){u=4410}}if((u|0)==4410){u=0;if(!T){break}if(W){u=4522;break L5719}else{aU=0}while(1){if((aU|0)>=(O|0)){break}if((a[V+(Q+aU|0)|0]|0)==(a[aU+167400|0]|0)){aU=aU+1|0}else{break L6034}}if((aU|0)!=4){break}}c[12208]=c[12208]&3^3;break L6032}}while(0);L6050:do{if((O|0)>0&(W^1)){Z=0;R=0;av=Q;while(1){if((a[Z+167056|0]|0)==(a[V+(Z+av|0)|0]|0)){aV=av;aW=R}else{if((Z|0)!=3){break L6050}aV=av-1|0;aW=1}U=Z+1|0;if((U|0)<(aW+O|0)){Z=U;R=aW;av=aV}else{break}}if((aW|0)==0){if(!((Z|0)==2|(Z|0)==6)){break}}c[12208]=0;break L6032}}while(0);L6062:do{if(T){if(W){u=4523;break L5719}else{aX=0}while(1){if((aX|0)>=(O|0)){break}if((a[V+(Q+aX|0)|0]|0)==(a[aX+172296|0]|0)){aX=aX+1|0}else{break L6062}}if((aX|0)!=3){break}c[12208]=3;break L6032}}while(0);L6070:do{if((O|0)>0&(W^1)){Z=0;av=0;R=Q;while(1){if((a[Z+166640|0]|0)==(a[V+(Z+R|0)|0]|0)){aZ=R;a_=av}else{if((Z|0)!=3){u=4437;break L6070}aZ=R-1|0;a_=1}U=Z+1|0;if((U|0)<(a_+O|0)){Z=U;av=a_;R=aZ}else{break}}if((a_|0)!=0){break}if(!((Z|0)==2|(Z|0)==6)){u=4437}}else{u=4437}}while(0);if((u|0)==4437){u=0;if(W|T^1){u=4524;break L5719}else{a$=0}while(1){if((a$|0)>=(O|0)){break}if((a[V+(Q+a$|0)|0]|0)==(a[a$+166368|0]|0)){a$=a$+1|0}else{u=4525;break L5719}}if((a$|0)!=3){u=4526;break L5719}}c[12208]=1}}while(0);c[13898]=x+3;$=y;aa=z;ab=r;ac=p;ad=t;ae=A;af=C;ag=B;ah=s;ai=1;aj=j;ak=F;al=G;am=H;an=n;ao=D;break L5760}}while(0);if(!((N|0)>0&(M^1))){S=y;break L5717}Q=c[10036]|0;V=0;O=0;W=P;while(1){if((a[V+165520|0]|0)==(a[Q+(V+W|0)|0]|0)){a0=W;a1=O}else{if((V|0)!=4){S=y;break L5717}a0=W-1|0;a1=1}T=V+1|0;if((T|0)<(a1+N|0)){V=T;O=a1;W=a0}else{break}}if((a1|0)==0){if(!((V|0)==3|(V|0)==6)){S=y;break L5717}}if(y){u=4547;break L5719}a2=x+1|0;c[13898]=a2;if(b){u=4454;break L5719}a[47544]=0;if((w|0)<=(a2|0)){u=4527;break L5719}if((a[L+(a2*40&-1)|0]&1)==0){u=4528;break L5719}W=c[L+(a2*40&-1)+36>>2]|0;O=L+(a2*40&-1)+32|0;Q=c[10036]|0;T=0;while(1){if((T|0)>=(W|0)){break}if((a[Q+((c[O>>2]|0)+T|0)|0]|0)==(a[T+115e3|0]|0)){T=T+1|0}else{u=4529;break L5719}}if((T|0)!=1){u=4530;break L5719}a3=x+2|0;c[13898]=a3;if(!d){if((a3|0)>=(w|0)){a4=a3;u=4531;break L5719}L6111:do{if((a[L+(a3*40&-1)|0]&1)!=0){O=c[L+(a3*40&-1)+36>>2]|0;W=L+(a3*40&-1)+32|0;V=0;while(1){if((V|0)>=(O|0)){break}if((a[Q+((c[W>>2]|0)+V|0)|0]|0)==(a[V+103664|0]|0)){V=V+1|0}else{break L6111}}if((V|0)==1){a4=a3;u=4532;break L5719}}}while(0);a[14176]=1;is(g);a[14176]=0;if((c[m>>2]|0)!=3){u=4480;break L5719}Q=c[o>>2]|0;if((Q|0)==0){u=4482;break L5719}eU(Q);uu(Q);$=1;aa=z;ab=r;ac=p;ad=t;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=H;an=n;ao=D;break L5760}uu(c[11962]|0);Q=c[13898]|0;L6121:do{if((Q|0)<(c[8272]|0)){T=c[1054]|0;L6123:do{if((a[T+(Q*40&-1)|0]&1)!=0){W=c[T+(Q*40&-1)+36>>2]|0;O=T+(Q*40&-1)+32|0;R=c[10036]|0;av=0;while(1){if((av|0)>=(W|0)){break}if((a[R+((c[O>>2]|0)+av|0)|0]|0)==(a[av+103664|0]|0)){av=av+1|0}else{break L6123}}if((av|0)==1){a5=0;break L6121}}}while(0);a[14176]=1;is(f);a[14176]=0;if((c[I>>2]|0)==3){a5=c[k>>2]|0;break}else{c[13898]=Q;a5=0;break}}else{a5=0}}while(0);c[11962]=a5;$=1;aa=z;ab=r;ac=p;ad=t;ae=A;af=C;ag=B;ah=s;ai=q;aj=j;ak=F;al=G;am=H;an=n;ao=D;break L5760}}while(0);if(s){u=4542;break L5719}c[13898]=x+1;eT(6,0);$=y;aa=z;ab=r;ac=p;ad=t;ae=A;af=C;ag=B;ah=1;ai=q;aj=j;ak=F;al=G;am=H;an=n;ao=D}}while(0);L=c[13898]|0;N=c[8272]|0;if((L|0)<(N|0)){D=ao;n=an;H=am;G=al;F=ak;j=aj;q=ai;s=ah;B=ag;C=af;A=ae;t=ad;p=ac;r=ab;z=aa;y=$;x=L;w=N}else{S=$;break L5717}}if((u|0)==4227){uf(x,175848,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4237){uf(x,175072,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4177){uf(_,138160,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4338){uf(x,K,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4279){uf(x,175072,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4190){uf(ar,138160,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4370){uf(x,169712,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4513){a6=c[10880]|0;uf(aP,a6,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4514){a6=c[10880]|0;uf(aP,a6,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4515){a6=c[10880]|0;uf(aP,a6,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4516){a6=c[10880]|0;uf(aP,a6,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4521){uf(aQ,165880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4522){uf(aQ,165880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4523){uf(aQ,165880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4524){uf(aQ,165880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4525){uf(aQ,165880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4526){uf(aQ,165880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4527){a7=c[10880]|0;uf(a2,a7,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4528){a7=c[10880]|0;uf(a2,a7,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4529){a7=c[10880]|0;uf(a2,a7,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4530){a7=c[10880]|0;uf(a2,a7,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4531){uf(a4,165048,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4532){uf(a4,165048,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4535){uf(x,164608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4536){uf(x,164608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4537){uf(x,164608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4538){uf(x,164608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4539){uf(x,164608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4540){uf(x,164608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4541){uf(x,164608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4542){uf(x,164608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4543){uf(x,164608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4544){uf(x,164608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4545){uf(x,164608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4546){uf(x,164608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4547){uf(x,164608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4548){uf(x,164608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4549){uf(x,164608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4550){uf(x,164608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4551){uf(x,164608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4454){uf(a2,138160,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4326){uf(x,K,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4262){uf(x,173896,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4480){c[13898]=a3;a4=a3;uf(a4,165048,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==4482){a4=c[13898]|0;uf(a4,165048,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}else{S=0}}while(0);do{if(!d){if(!((c[11862]|0)!=0&(b^1))){break}uh(-1,163928,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);if(S){i=e;return}S=c[11962]|0;if(!((a[47544]&1)==0&(S|0)!=0)){i=e;return}eU(S);uh(-1,163496,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);i=e;return}function eC(f,j){f=f|0;j=j|0;var k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,R=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0.0,am=0.0,an=0.0,ao=0.0,ap=0.0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0.0,aD=0.0,aE=0,aF=0,aG=0,aH=0,aJ=0,aK=0,aL=0,aN=0,aO=0.0,aP=0.0,aQ=0.0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0.0,aX=0.0,aZ=0.0,a$=0.0,a0=0.0,a1=0.0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a9=0,ba=0,bb=0,bc=0,bd=0,bf=0,bg=0,bh=0,bi=0,bj=0.0,bk=0,bl=0.0,bm=0.0,bn=0,bo=0.0,bp=0,bq=0,br=0.0,bs=0.0,bt=0,bu=0,bv=0;k=i;i=i+216|0;l=k|0;n=k+24|0;o=k+48|0;p=k+96|0;q=k+104|0;r=k+152|0;s=k+160|0;t=k+168|0;u=k+192|0;x=c[12892]|0;if(!((x|0)!=0|(c[11854]|0)!=0)){y=-1;i=k;return y|0}if((a[47392]&1)==0){if((c[8716]|0)==0){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=143056,v)|0);return 0}if((j|0)>=8){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=186808,v)|0);return 0}if(a[47736]|0){y=-1;i=k;return y|0}z=eV()|0;L6212:do{if((z|0)!=0){A=l|0;B=l+8|0;C=n|0;D=n+8|0;E=D;F=D;D=n+8|0;G=z;L6214:while(1){c[11900]=(c[11900]|0)+1;c[11874]=0;H=G;while(1){if((aM(d[H]|0|0)|0)==0){break}else{H=H+1|0}}I=a[H]|0;J=I<<24>>24==0;do{if(J){K=4799}else{if((a8(c[11948]|0,I<<24>>24|0)|0)==0){K=4799;break}if((c[9356]|0)==0){break}else{L=H;M=I}while(1){N=M<<24>>24;if(M<<24>>24==0){K=4793}else{if((a8(c[11948]|0,N|0)|0)==0){K=4793}}if((K|0)==4793){K=0;if((aM(N|0)|0)==0){break}}N=L+1|0;L=N;M=a[N]|0}if((a[L]|0)==0){break}N=c[9356]|0;if((a_(L|0,N|0,uA(N|0)|0)|0)!=0){break}a[37432]=1}}while(0);L6232:do{if((K|0)==4799){K=0;N=a[34104]|0;if(N){if((I<<24>>24|0)==101|(I<<24>>24|0)==69){K=4801;break L6214}else if((I<<24>>24|0)==0){K=4803}}else{if(J){K=4803}}if((K|0)==4803){K=0;c[7638]=-1;O=c[14126]|0;R=O+1|0;c[14126]=R;if((O|0)==0){c[8800]=(c[8800]|0)+1}do{if((R|0)==2){U=(c[11946]|0)+1|0;c[11946]=U;c[8800]=0;c[11942]=-1;V=c[9356]|0;if((V|0)!=0){if(a[37432]|0){K=4809;break L6214}}if((U|0)<=(c[11898]|0)){break L6232}if((U|0)<=(c[11762]|0)){W=V;break}if(N){break L6232}else{K=4813;break L6214}}else{W=c[9356]|0}}while(0);if((W|0)!=0){if(!(a[37432]|0)){break}}if((c[11946]|0)<(c[11898]|0)|(R|0)>2){break}else{K=4817;break L6214}}c[14126]=0;if((c[9356]|0)!=0){if(!(a[37432]|0)){break}}N=c[11946]|0;V=c[11898]|0;if((N|0)<(V|0)|(N|0)>(c[11762]|0)){break}if(((N-V|0)%(c[11904]|0)&-1|0)!=0){break}if((a[32928]&1)!=0|(c[13488]|0)>0){if(a[48872]|0){K=4824}}else{K=4824}if((K|0)==4824){K=0;V=c[8800]|0;N=c[10808]|0;if((V|0)<(N|0)|(V|0)>(c[8834]|0)){break}if(((V-N|0)%(c[10874]|0)&-1|0)!=0){break}N=(c[7638]|0)+1|0;c[7638]=N;V=c[10806]|0;if((N|0)<(V|0)|(N|0)>(c[8832]|0)){break}if(((N-V|0)%(c[10872]|0)&-1|0)!=0){break}}c[11942]=(c[11942]|0)+1;do{if((c[11930]|0)==0){eX(H)}else{do{if((c[11882]|0)<7){V=db(c[11952]|0,168,180032)|0;c[11952]=V;N=c[11882]|0;if((N|0)>=7){break}h[V+(N*24&-1)>>3]=0.0;c[V+(N*24&-1)+16>>2]=0;N=(c[11882]|0)+1|0;c[11882]=N;if((N|0)<7){X=N}else{break}do{N=c[11952]|0;h[N+(X*24&-1)>>3]=0.0;c[N+(X*24&-1)+16>>2]=0;X=(c[11882]|0)+1|0;c[11882]=X;}while((X|0)<7)}}while(0);N=c[11952]|0;V=ca(c[8802]|0,c[11930]|0,(v=i,i=i+56|0,c[v>>2]=N,c[v+8>>2]=N+24,c[v+16>>2]=N+48,c[v+24>>2]=N+72,c[v+32>>2]=N+96,c[v+40>>2]=N+120,c[v+48>>2]=N+144,v)|0)|0;c[11874]=V;if((V|0)==-1){K=4835;break L6214}if((V|0)>0){Y=0}else{break}do{c[(c[11952]|0)+(Y*24&-1)+8>>2]=1;c[(c[11952]|0)+(Y*24&-1)+12>>2]=0;Y=Y+1|0;}while((Y|0)<(c[11874]|0))}}while(0);do{if((c[11942]|0)==0){if(a[48872]|0){break}R=c[11874]|0;if((R|0)>0){V=0;while(1){uu(c[(c[11952]|0)+(V*24&-1)+16>>2]|0);N=eD(c[(c[11952]|0)+(V*24&-1)+12>>2]|0)|0;c[(c[11952]|0)+(V*24&-1)+16>>2]=N;N=V+1|0;U=c[11874]|0;if((N|0)<(U|0)){V=N}else{Z=U;break}}}else{Z=R}a[48872]=1;V=c[13488]|0;if((V|0)>(Z|0)){c[13488]=Z;_=Z}else{_=V}if((_|0)>0){K=4845;break L6214}if((a[32928]&1)!=0){K=4850;break L6214}}}while(0);V=c[11870]|0;U=c[11872]|0;N=(V|0)==0?7:U+V|0;$=U+j|0;ab=(N|0)>($|0)?$:N;if((ab|0)>0){ac=0;ad=1}else{ae=0;af=U;ag=V;break L6214}L6293:while(1){V=c[1048+(ac*12&-1)>>2]|0;c[12902]=ac;U=1052+(ac*12&-1)|0;N=c[U>>2]|0;L6295:do{if((N|0)>2){$=c[11944]|0;ah=($|0)==0;if(!ah){if((c[$+12>>2]|0)==474){ai=ad;break}}if((N|0)==5){aj=1;ak=1}else if((N|0)==6){aj=1;ak=5}else if((N|0)==7){aj=2;ak=0}else if((N|0)==8){aj=3;ak=3}else if((N|0)==4){aj=0;ak=6}else{aj=0;ak=2}do{if((ac|0)==1){if((aj|0)==0){al=+(c[11942]|0);break}else{al=+h[f+(aj-1<<3)>>3];break}}else{al=+h[f+(aj<<3)>>3]}}while(0);am=al;do{if(ah){an=am}else{if((c[$+12>>2]|0)!=392){an=am;break}if((ac|0)>1){if((aj|0)==0){ao=+(c[11942]|0)}else{ao=+h[f+(aj-1<<3)>>3]}ap=ao}else{ap=am}an=ap+ +h[(c[$+276>>2]|0)+16>>3]}}while(0);$=c[1056+(ac*12&-1)>>2]|0;if(($|0)==0){ah=eD(c[47056+(ac<<2)>>2]|0)|0;dp(ak,ah,an,-1);uu(ah);aq=ad;K=4942;break}a[43504]=1;e4($,l);a[43504]=0;if((c[A>>2]|0)==3){$=c[B>>2]|0;dp(ak,$,an,-1);uu($);c[A>>2]=1;aq=ad;K=4942;break}else{$=c[m>>2]|0;aI(142872,39,1,$|0);aq=ad;K=4942;break}}else{if((N|0)==2){$=eD(c[47056+(ac<<2)>>2]|0)|0;if((c[11944]|0)!=0){ah=c[11942]|0;ar=ut(192)|0;if((ar|0)==0){gk();as=ut(192)|0;if((as|0)==0){K=4883;break L6214}else{at=as}}else{at=ar}ar=at;if((c[(c[11944]|0)+224>>2]|0)==0){as=ut(192)|0;if((as|0)==0){gk();au=ut(192)|0;if((au|0)==0){K=4887;break L6214}else{av=au}}else{av=as}c[(c[11944]|0)+224>>2]=av;as=(c[11944]|0)+224|0;uE(c[as>>2]|0,0,192);c[(c[as>>2]|0)+4>>2]=-1}if(($|0)==0){aw=0}else{aw=bP($|0)|0}c[at+60>>2]=aw;c[at+4>>2]=ah;c[at+64>>2]=0;c[at>>2]=c[c[(c[11944]|0)+224>>2]>>2];c[c[(c[11944]|0)+224>>2]>>2]=ar}uu($);aq=ad;K=4942;break}$=c[1056+(ac*12&-1)>>2]|0;if(($|0)==0){if((V|0)==(-2|0)){h[f+(ac<<3)>>3]=+(c[11946]|0);aq=ad;K=4942;break}else if((V|0)==(-1|0)){h[f+(ac<<3)>>3]=+(c[8800]|0);aq=ad;K=4942;break}else if((V|0)==0){h[f+(ac<<3)>>3]=+(c[11942]|0);aq=ad;K=4942;break}else{if((V|0)<1){K=4928;break L6214}ar=c[48840+(ac<<2)>>2]|0;do{if((ar|0)!=99){if((c[64808+(ar*688&-1)>>2]|0)!=1){break}h[r>>3]=0.0;if((V|0)>(c[11874]|0)){K=4935;break L6293}ah=V-1|0;as=c[11952]|0;if((c[as+(ah*24&-1)+8>>2]|0)==-5){K=4935;break L6293}au=c[as+(ah*24&-1)+12>>2]|0;if((au|0)==0){K=4935;break L6293}if((t1(au,64813+(ar*688&-1)|0,q,r)|0)==0){K=4935;break L6293}am=+t2(q);h[f+(ac<<3)>>3]=am+ +h[r>>3];aq=ad;K=4942;break L6295}}while(0);if((N|0)==1){ax=ad;K=4945;break}if((V|0)>(c[11874]|0)){K=4941;break L6293}ar=V-1|0;au=c[11952]|0;ah=c[au+(ar*24&-1)+8>>2]|0;if((ah|0)==(-5|0)){y=-5;K=4984;break L6214}else if((ah|0)!=1){K=4941;break L6293}h[f+(ac<<3)>>3]=+h[au+(ar*24&-1)>>3];aq=ad;K=4942;break}}a[43504]=1;e4($,n);a[43504]=0;if((a[1960]&1)!=0){y=-2;K=4981;break L6214}ar=48840+(ac<<2)|0;au=c[ar>>2]|0;do{if((au|0)==99){ay=0;K=4908}else{if((c[64808+(au*688&-1)>>2]|0)!=1){ay=0;K=4908;break}ah=c[C>>2]|0;if((ah|0)==3){az=1;break}if((aY(64813+(au*688&-1)|0,132824)|0)!=0){ay=1;K=4908;break}as=ut(20)|0;if((as|0)==0){gk();aA=ut(20)|0;if((aA|0)==0){K=4901;break L6214}else{aB=aA}}else{aB=as}if((ah|0)==1){aC=+(c[F>>2]|0)}else if((ah|0)==2){aC=+h[D>>3]}else if((ah|0)==3){aC=+uz(c[E>>2]|0,0)}else{K=4906;break L6214}be(aB|0,142616,(v=i,i=i+8|0,h[v>>3]=aC,v)|0);c[C>>2]=3;c[E>>2]=aB;ay=1;K=4908}}while(0);do{if((K|0)==4908){K=0;au=c[C>>2]|0;if((au|0)==3){az=ay;break}else if((au|0)==1){aD=+(c[F>>2]|0)}else if((au|0)==2){aD=+h[D>>3]}else{K=4921;break L6214}h[f+(ac<<3)>>3]=aD;aq=ad;K=4942;break L6295}}while(0);if((c[U>>2]|0)==1){au=c[E>>2]|0;$=(uA(au|0)|0)+3|0;ah=ut($)|0;if((ah|0)==0){gk();as=ut($)|0;if((as|0)==0){K=4912;break L6214}else{aE=as}}else{aE=ah}a[aE]=34;ah=aE+1|0;uB(ah|0,au|0);au=aE+(uA(aE|0)|0)|0;w=34;a[au]=w&255;w=w>>8;a[au+1|0]=w&255;au=47088+(ac<<2)|0;uu(c[au>>2]|0);c[au>>2]=aE;c[47056+(ac<<2)>>2]=aE}do{if(az){h[p>>3]=0.0;au=c[E>>2]|0;if((t1(au,64813+((c[ar>>2]|0)*688&-1)|0,o,p)|0)==0){aF=0;aG=au;break}am=+t2(o);h[f+(ac<<3)>>3]=am+ +h[p>>3];aF=ad;aG=au}else{aF=ad;aG=c[E>>2]|0}}while(0);uu(aG);c[C>>2]=1;aq=aF;K=4942}}while(0);do{if((K|0)==4942){K=0;if((c[U>>2]|0)!=1){ai=aq;break}if((c[1056+(ac*12&-1)>>2]|0)==0){ax=aq;K=4945;break}if((c[47056+(ac<<2)>>2]|0)==0){ax=aq;K=4945}else{ai=aq}}}while(0);do{if((K|0)==4945){K=0;if(!((V|0)==(-1|0)|(V|0)==(-2|0)|(V|0)==0)){ai=ax;break}U=ut(32)|0;if((U|0)==0){gk();N=ut(32)|0;if((N|0)==0){K=4948;break L6214}else{aH=N}}else{aH=U}U=~~+h[f+(ac<<3)>>3];be(aH|0,21e4,(v=i,i=i+8|0,c[v>>2]=U,v)|0);U=47088+(ac<<2)|0;uu(c[U>>2]|0);c[U>>2]=aH;c[47056+(ac<<2)>>2]=aH;ai=ax}}while(0);V=ac+1|0;if((V|0)<(ab|0)){ac=V;ad=ai}else{aJ=ai;aK=V;break}}if((K|0)==4935){K=0;aJ=(c[11870]|0)==0?ad:0;aK=ac}else if((K|0)==4941){K=0;aJ=(c[11870]|0)==0?ad:0;aK=ac}if((aJ|0)!=0){K=4952;break L6214}}}while(0);G=eV()|0;if((G|0)==0){break L6212}}if((K|0)==4984){i=k;return y|0}else if((K|0)==4883){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=142224,v)|0);return 0}else if((K|0)==4928){uf(-1,142440,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((K|0)==4850){c[11942]=(c[11942]|0)-1;a[32928]=0;y=-9;i=k;return y|0}else if((K|0)==4887){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=142224,v)|0);return 0}else if((K|0)==4912){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=181200,v)|0);return 0}else if((K|0)==4845){G=c[(c[11952]|0)+((_-1|0)*24&-1)+16>>2]|0;if((G|0)==0){c[11902]=0;y=-7;i=k;return y|0}C=bP(G|0)|0;c[11902]=C;if((C|0)==0){y=-7;i=k;return y|0}c[11942]=(c[11942]|0)-1;c[13488]=-99;a[32928]=0;y=-6;i=k;return y|0}else if((K|0)==4801){a[47736]=1;y=-1;i=k;return y|0}else if((K|0)==4809){a[47736]=1;y=-1;i=k;return y|0}else if((K|0)==4813){a[47736]=1;y=-1;i=k;return y|0}else if((K|0)==4817){y=-3-O|0;i=k;return y|0}else if((K|0)==4835){a[47736]=1;y=-1;i=k;return y|0}else if((K|0)==4921){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((K|0)==4952){ae=aK;af=c[11872]|0;ag=c[11870]|0}else if((K|0)==4901){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=142728,v)|0);return 0}else if((K|0)==4981){i=k;return y|0}else if((K|0)==4906){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((K|0)==4948){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=142320,v)|0);return 0}C=ae-af|0;if((ag|0)==0|(C|0)==(ag|0)|(C|0)==(j|0)){y=C;i=k;return y|0}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=180528,v)|0);return 0}}}while(0);c[11874]=0;a[47736]=1;y=-1;i=k;return y|0}ag=s;if((x|0)==0){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=187320,v)|0);return 0}if((j|0)>=8){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=186808,v)|0);return 0}x=c[11876]|0;if((c[11884]|0)<=(x|0)){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=186248,v)|0);return 0}if((x|0)==0){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=185768,v)|0);return 0}if(a[47736]|0){y=-1;i=k;return y|0}do{if((c[11882]|0)<(x|0)){af=db(c[11952]|0,x*24&-1,180032)|0;c[11952]=af;ae=c[11882]|0;if((ae|0)>=(x|0)){break}h[af+(ae*24&-1)>>3]=0.0;c[af+(ae*24&-1)+16>>2]=0;ae=(c[11882]|0)+1|0;c[11882]=ae;if((ae|0)<(x|0)){aL=ae}else{break}do{ae=c[11952]|0;h[ae+(aL*24&-1)>>3]=0.0;c[ae+(aL*24&-1)+16>>2]=0;aL=(c[11882]|0)+1|0;c[11882]=aL;}while((aL|0)<(x|0))}}while(0);do{if((c[12222]|c[12224]|c[12220]|0)==0){x=c[12172]|0;aL=c[12170]|0;c[11788]=0;c[11787]=0;c[11786]=0;aD=+h[x+(aL*232&-1)+80>>3];if(+P(+aD)<.001){c[11822]=c[6578];c[11823]=c[6579];c[11824]=c[6580];c[11825]=c[6581];c[11826]=c[6582];c[11827]=c[6583];c[11828]=c[6584];c[11829]=c[6585];aN=0;aO=1.0;aP=0.0;aQ=0.0}else{aC=+S(+aD);h[5911]=aC;an=+T(+aD);aD=-0.0-an;h[5912]=aD;h[5913]=an;h[5914]=aC;aN=1;aO=aC;aP=aD;aQ=an}ae=x+(aL*232&-1)+88|0;an=+h[ae>>3];af=x+(aL*232&-1)+96|0;aD=+h[af>>3];aC=an*an+aD*aD;aK=x+(aL*232&-1)+104|0;aD=+h[aK>>3];ap=+Q(+(aC+aD*aD));ao=+Q(+aC);if(ap<1.0e-9|ao<ap*1.0e-4){uD(47320,26240,72);aR=0}else{aC=1.0/(ap*ao);h[5915]=an*aD*aC;h[5916]=aC*ap*(-0.0- +h[af>>3]);h[5917]=aC*ao*+h[ae>>3];h[5918]=aC*+h[af>>3]*+h[aK>>3];h[5919]=aC*ap*+h[ae>>3];h[5920]=aC*ao*+h[af>>3];h[5921]=ao*(-0.0-ao)*aC;h[5922]=0.0;h[5923]=aC*ao*+h[aK>>3];aR=1}aK=aN?1:aR;a[47128]=aK;if((a[47544]&1)==0){af=x+(aL*232&-1)+48|0;ae=x+(aL*232&-1)+192|0;O=x+(aL*232&-1)+124|0;_=0;do{aJ=x+(aL*232&-1)+(_<<2)|0;ac=c[aJ>>2]|0;do{if((ac|0)==0){if((c[x+(aL*232&-1)+140+(_<<2)>>2]|0)!=0){K=4589;break}aS=-3-(c[x+(aL*232&-1)+112+(_<<2)>>2]|0)|0;K=4595}else{K=4589}}while(0);do{if((K|0)==4589){K=0;ad=x+(aL*232&-1)+112+(_<<2)|0;if((a[O]&1)==0){aT=ac}else{c[1048+(_*12&-1)>>2]=c[ad>>2];aT=c[aJ>>2]|0}ai=-3-(c[ad>>2]|0)|0;if((aT|0)>0){c[47144+(ai<<2)>>2]=aT;aU=aT;aV=ai;break}if((aT|0)>=0){aS=ai;K=4595;break}c[47144+(ai<<2)>>2]=2147483647;aU=2147483647;aV=ai}}while(0);if((K|0)==4595){K=0;aJ=c[x+(aL*232&-1)+140+(aS<<2)>>2]|0;c[47144+(aS<<2)>>2]=aJ;aU=aJ;aV=aS}ao=+h[x+(aL*232&-1)+24+(_<<3)>>3];if(ao!=0.0){h[47240+(aV<<3)>>3]=ao;aW=ao}else{ao=+h[x+(aL*232&-1)+168+(aV<<3)>>3];h[47240+(aV<<3)>>3]=ao;aW=ao}ao=aW*+(aa(c[x+(aL*232&-1)+12+(_<<2)>>2]|0,c[x+(aL*232&-1)+152+(aV<<2)>>2]|0)|0);h[47240+(aV<<3)>>3]=ao;do{if((c[af>>2]|0)==0){if((c[ae>>2]|0)!=0){h[47176+(_<<3)>>3]=+h[x+(aL*232&-1)+200+(aV<<3)>>3];break}if((aU|0)>0){h[47176+(_<<3)>>3]=+(aU-1|0)*+P(+ao)*.5;break}else{h[47176+(_<<3)>>3]=0.0;break}}else{h[47176+(_<<3)>>3]=+h[x+(aL*232&-1)+56+(_<<3)>>3]}}while(0);aJ=c[af>>2]|0;if((aJ|0)==0){if((c[ae>>2]|0)==1){K=4608}else{K=4611}}else if((aJ|0)==1){K=4608}else{K=4611}do{if((K|0)==4608){K=0;if((aU|0)>0&ao<0.0){h[47264+(_<<3)>>3]=+(aU-1|0)*ao;break}else{h[47264+(_<<3)>>3]=0.0;break}}else if((K|0)==4611){K=0;if((aU|0)>0){h[47264+(_<<3)>>3]=+(aU-1|0)*ao*.5;break}else{h[47264+(_<<3)>>3]=0.0;break}}}while(0);_=_+1|0;}while((_|0)<3)}else{_=c[x+(aL*232&-1)+140>>2]|0;c[11786]=_;c[11787]=c[x+(aL*232&-1)+144>>2];if((_|0)==0){uf(-1,185128,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}_=x+(aL*232&-1)+12|0;h[5911]=aO*+(c[_>>2]|0);h[5912]=aP*+(c[_>>2]|0);_=x+(aL*232&-1)+16|0;h[5913]=aQ*+(c[_>>2]|0);h[5914]=aO*+(c[_>>2]|0);_=x+(aL*232&-1)+48|0;if((c[_>>2]|0)==0){aX=(+h[5946]+ +h[5944])*.5}else{aX=+h[x+(aL*232&-1)+56>>3]}h[5897]=aX;if((c[_>>2]|0)==0){aZ=(+h[5947]+ +h[5945])*.5}else{aZ=+h[x+(aL*232&-1)+64>>3]}h[5898]=aZ;if((c[_>>2]|0)==0){a$=0.0}else{a$=+h[x+(aL*232&-1)+72>>3]}h[5899]=a$;if((c[_>>2]|0)==1){a0=+h[5944]}else{a0=(+h[5946]+ +h[5944])*.5}h[5908]=a0;if((c[_>>2]|0)==1){a1=+h[5945]}else{a1=(+h[5947]+ +h[5945])*.5}h[5909]=a1;h[5910]=0.0;c[11802]=0}do{if(aK<<24>>24==0){if(+h[5908]!=+h[5897]){a2=1;break}if(+h[5909]!=+h[5898]){a2=1;break}a2=+h[5910]!=+h[5899]&1}else{a2=1}}while(0);a[47128]=a2;aK=x+(aL*232&-1)+224|0;_=c[aK>>2]|0;c[11800]=_;ae=c[12208]|0;c[11792]=a[47816+(ae>>>0<3?ae:3)|0]|0;ae=c[x+(aL*232&-1)+128>>2]|0;c[11790]=ae;a[47224]=0;a[47232]=0;c[7638]=-1;c[8800]=0;c[11946]=aL;if((_|0)!=0|(c[12204]|0)>0){break}if((a[47856]&1)==0){break}if((a[47584]&1)==0){break}if((a[47464]&1)!=0){break}_=c[11876]|0;af=c[11950]|0;if((_|0)>0){O=0;aJ=0;while(1){ac=((c[af+(aJ*12&-1)>>2]|0)+O|0)+(e[af+(aJ*12&-1)+8>>1]|0)|0;ai=aJ+1|0;if((ai|0)<(_|0)){O=ac;aJ=ai}else{a3=ac;break}}}else{a3=0}aJ=c[11786]|0;O=aa((aJ|0)<1?1:aJ,(c[af+(_*12&-1)>>2]|0)+a3|0);aJ=c[11787]|0;aL=aa(O,(aJ|0)<1?1:aJ);aJ=c[11788]|0;O=aa(aL,(aJ|0)<1?1:aJ)+ae|0;aJ=ut(O)|0;do{if((aJ|0)==0){gk();aL=ut(O)|0;if((aL|0)!=0){a4=aL;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=184632,v)|0);return 0}else{a4=aJ}}while(0);c[11800]=a4;c[aK>>2]=a4;aJ=cd(c[11800]|0,1,O|0,c[12892]|0)|0;if((aJ|0)==(O|0)){break}uh(-1,184408,(v=i,i=i+16|0,c[v>>2]=O,c[v+8>>2]=aJ,v)|0);a[47736]=1;y=-1;i=k;return y|0}}while(0);L6578:do{if(!(a[47736]|0)){a4=s;a3=s;a2=s|0;aU=s;aV=s;aS=f+8|0;aT=f+16|0;aR=t|0;aN=t+8|0;aJ=aN;ae=aN;aN=t+8|0;_=0;L6580:while(1){if(a[47224]|0){K=4629;break}if(a[47232]|0){K=4631;break}af=c[11790]|0;if((af|0)==0){a5=0}else{aL=c[11800]|0;if((aL|0)==0){if((eR(af)|0)!=0){y=-1;K=4966;break}}else{c[11800]=aL+af}c[11790]=0;a5=0}while(1){af=c[(c[11950]|0)+(a5*12&-1)>>2]|0;do{if((af|0)!=0){aL=c[11800]|0;if((aL|0)==0){if((eR(af)|0)==0){break}else{y=-1;K=4967;break L6580}}else{c[11800]=aL+af;break}}}while(0);if((a5|0)==(c[11876]|0)){K=4642;break}do{if((c[11858]|0)==0){af=c[11800]|0;aL=(c[11950]|0)+(a5*12&-1)+8|0;x=b[aL>>1]|0;if((af|0)==0){if((cd(ag|0,x&65535|0,1,c[12892]|0)|0)==1){break}else{K=4649;break L6580}}if(x<<16>>16==0){break}else{a6=0;a7=af}while(1){af=a7+1|0;c[11800]=af;a[ag+a6|0]=a[a7]|0;x=a6+1|0;if((x|0)<(e[aL>>1]|0|0)){a6=x;a7=af}else{break}}}else{a[ag]=0}}while(0);aL=c[11792]|0;af=c[11950]|0;x=e[af+(a5*12&-1)+8>>1]|0;do{if((aL-2|0)>>>0<2){ac=x-1|0;if((ac|0)>0){a9=0;ba=ac}else{break}do{ac=ag+a9|0;ai=a[ac]|0;ad=ag+ba|0;a[ac]=a[ad]|0;a[ad]=ai;a9=a9+1|0;ba=ba-1|0;}while((a9|0)<(ba|0))}}while(0);do{if((aL-1|0)>>>0<2){ai=x-1|0;if((ai|0)>0){bb=ai}else{break}do{ai=ag+(bb-1|0)|0;ad=a[ai]|0;ac=ag+bb|0;a[ai]=a[ac]|0;a[ac]=ad;bb=bb-2|0;}while((bb|0)>0)}}while(0);x=c[af+(a5*12&-1)+4>>2]|0;if((x|0)==0){aL=c[11952]|0;h[aL+(a5*24&-1)>>3]=+(a[ag]|0|0);bc=aL}else if((x|0)==1){aL=c[11952]|0;h[aL+(a5*24&-1)>>3]=+((d[ag]|0)>>>0);bc=aL}else if((x|0)==2){aL=c[11952]|0;h[aL+(a5*24&-1)>>3]=+(b[a4>>1]|0|0);bc=aL}else if((x|0)==3){aL=c[11952]|0;h[aL+(a5*24&-1)>>3]=+((e[a4>>1]|0)>>>0);bc=aL}else if((x|0)==4){aL=c[11952]|0;h[aL+(a5*24&-1)>>3]=+(c[a3>>2]|0);bc=aL}else if((x|0)==5){aL=c[11952]|0;h[aL+(a5*24&-1)>>3]=+((c[a3>>2]|0)>>>0>>>0);bc=aL}else if((x|0)==6){aL=c[11952]|0;h[aL+(a5*24&-1)>>3]=+(c[a3>>2]|0);bc=aL}else if((x|0)==7){aL=c[11952]|0;h[aL+(a5*24&-1)>>3]=+((c[a3>>2]|0)>>>0>>>0);bc=aL}else if((x|0)==10){aL=c[11952]|0;h[aL+(a5*24&-1)>>3]=+((c[a2>>2]|0)>>>0)+ +(c[a2+4>>2]|0)*4294967296.0;bc=aL}else if((x|0)==11){aL=c[11952]|0;h[aL+(a5*24&-1)>>3]=+((c[a2>>2]|0)>>>0)+ +((c[a2+4>>2]|0)>>>0)*4294967296.0;bc=aL}else if((x|0)==8){aL=c[11952]|0;h[aL+(a5*24&-1)>>3]=+g[aU>>2];bc=aL}else if((x|0)==9){x=c[11952]|0;h[x+(a5*24&-1)>>3]=+h[aV>>3];bc=x}else{K=4669;break L6580}c[bc+(a5*24&-1)+8>>2]=1;c[(c[11952]|0)+(a5*24&-1)+12>>2]=0;x=a[47544]|0;if((x&1)!=0){bd=x;break}a5=a5+1|0}if((K|0)==4642){K=0;bd=a[47544]|0}L6636:do{if((bd&1)==0){c[11942]=(c[7638]|0)+1;if((a5|0)==(c[11876]|0)){K=4702}else{K=4697;break L6580}}else{do{if((a[47464]&1)!=0){x=c[12224]|0;if(!((x|0)!=0|_)){h[5902]=+h[(c[11952]|0)+(a5*24&-1)>>3];bf=1;break L6636}if((c[12222]|x|c[12220]|0)!=0){break}x=c[11802]|0;aL=c[11786]|0;if((x|0)>=(aL|0)){break}ad=c[11784]|0;if((x|0)==0){ac=db(ad,aL<<2,183672)|0;aL=ac;c[11784]=aL;if((ac|0)==0){K=4682;break L6580}bg=c[11802]|0;bh=aL}else{bg=x;bh=ad}g[bh+(bg<<2)>>2]=+h[(c[11952]|0)+(a5*24&-1)>>3];ad=(c[11802]|0)+1|0;c[11802]=ad;bf=_&(ad|0)!=(c[11786]|0);break L6636}}while(0);c[11942]=~~+h[(c[11952]|0)+(a5*24&-1)>>3];af=c[11876]|0;if((af|0)>0){bi=af}else{K=4702;break}while(1){af=bi-1|0;if((bi|0)==1){ad=c[12224]|0;if((a[47464]&1)==0){bj=+(ad|0)}else{bj=+g[(c[11784]|0)+(ad<<2)>>2]}ad=c[11952]|0;h[ad+(af*24&-1)>>3]=bj;bk=ad}else if((bi|0)==2){if((a[47464]&1)==0){bl=+(c[12222]|0)}else{bl=+h[5902]}ad=c[11952]|0;h[ad+(af*24&-1)>>3]=bl;bk=ad}else{ad=c[11952]|0;h[ad+(af*24&-1)>>3]=+h[ad+(a5*24&-1)>>3];bk=ad}c[bk+(af*24&-1)+8>>2]=1;c[(c[11952]|0)+(af*24&-1)+12>>2]=0;if((af|0)>0){bi=af}else{K=4702;break}}}}while(0);do{if((K|0)==4702){K=0;af=c[12224]|0;ad=c[12222]|0;x=c[12220]|0;aL=af+1|0;c[12224]=aL;ac=c[11786]|0;do{if(!((ac|0)<1|(aL|0)<(ac|0))){c[12224]=0;ai=ad+1|0;c[12222]=ai;a[47224]=1;ax=c[11787]|0;if((ax|0)<0|(ai|0)<(ax|0)){break}c[12222]=0;ax=x+1|0;c[12220]=ax;ai=c[11788]|0;if((ai|0)<0|(ax|0)<(ai|0)){break}c[12220]=0;a[47232]=1;ai=(c[12170]|0)+1|0;c[12170]=ai;if((ai|0)<(c[11864]|0)){break}a[47736]=1}}while(0);ac=c[11946]|0;aL=c[11898]|0;if((ac|0)<(aL|0)|(ac|0)>(c[11762]|0)){bf=_;break}if(((ac-aL|0)%(c[11904]|0)&-1|0)!=0){bf=_;break}aL=c[8800]|0;ac=c[10808]|0;if((aL|0)<(ac|0)|(aL|0)>(c[8834]|0)){bf=_;break}if(((aL-ac|0)%(c[10874]|0)&-1|0)!=0){bf=_;break}ac=(c[7638]|0)+1|0;c[7638]=ac;aL=c[10806]|0;if((ac|0)<(aL|0)|(ac|0)>(c[8832]|0)){bf=_;break}if(((ac-aL|0)%(c[10872]|0)&-1|0)!=0){bf=_;break}c[11874]=c[11876];aL=c[11870]|0;ac=(aL|0)!=0?aL:7;aL=(ac|0)>(j|0)?j:ac;L6680:do{if((aL|0)>0){a1=+(x|0);a0=+(ad|0);a$=+(af|0);ac=0;L6682:while(1){ai=c[1048+(ac*12&-1)>>2]|0;ax=c[1056+(ac*12&-1)>>2]|0;do{if((ax|0)==0){if((ai|0)==(-5|0)){aH=c[(c[11944]|0)+12>>2]|0;if((aH|0)==400|(aH|0)==416){aZ=a1*+h[5907];h[f+(ac<<3)>>3]=aZ;bm=aZ;break}else{aZ=+h[c[11952]>>3];h[f+(ac<<3)>>3]=aZ;bm=aZ;break}}else if((ai|0)==(-4|0)){aZ=a0*+h[5906];h[f+(ac<<3)>>3]=aZ;bm=aZ;break}else if((ai|0)==(-3|0)){aZ=a$*+h[5905];h[f+(ac<<3)>>3]=aZ;bm=aZ;break}else if((ai|0)==(-2|0)){aZ=+(c[11946]|0);h[f+(ac<<3)>>3]=aZ;bm=aZ;break}else if((ai|0)==(-1|0)){aZ=+(c[8800]|0);h[f+(ac<<3)>>3]=aZ;bm=aZ;break}else if((ai|0)==0){aZ=+(c[11942]|0);h[f+(ac<<3)>>3]=aZ;bm=aZ;break}else{if((ai|0)<1){K=4738;break L6580}if((ai|0)>(c[11874]|0)){break L6682}aH=ai-1|0;aq=c[11952]|0;aF=c[aq+(aH*24&-1)+8>>2]|0;if((aF|0)==(-5|0)){y=-5;K=4971;break L6580}else if((aF|0)!=1){break L6682}aZ=+h[aq+(aH*24&-1)>>3];h[f+(ac<<3)>>3]=aZ;bm=aZ;break}}else{a[43504]=1;e4(ax,t);a[43504]=0;if((a[1960]&1)!=0){y=-2;K=4970;break L6580}aH=c[aR>>2]|0;if((aH|0)==3){aq=c[aJ>>2]|0;if((c[1052+(ac*12&-1)>>2]|0)==1){aF=(uA(aq|0)|0)+3|0;aG=ut(aF)|0;if((aG|0)==0){gk();p=ut(aF)|0;if((p|0)==0){K=4721;break L6580}else{bn=p}}else{bn=aG}a[bn]=34;aG=bn+1|0;uB(aG|0,aq|0);aG=bn+(uA(bn|0)|0)|0;w=34;a[aG]=w&255;w=w>>8;a[aG+1|0]=w&255;aG=47088+(ac<<2)|0;uu(c[aG>>2]|0);c[aG>>2]=bn;c[47056+(ac<<2)>>2]=bn}uu(aq);c[aR>>2]=1;bm=+h[f+(ac<<3)>>3];break}else if((aH|0)==1){bo=+(c[ae>>2]|0)}else if((aH|0)==2){bo=+h[aN>>3]}else{K=4726;break L6580}h[f+(ac<<3)>>3]=bo;bm=bo}}while(0);if((cg(+bm)|0)==0){if((a[47584]&1)==0){y=-2;K=4972;break L6580}}ax=ac+1|0;if((ax|0)<(aL|0)){ac=ax}else{bp=1;bq=ax;break L6680}}bp=(c[11870]|0)==0&1;bq=ac}else{bp=1;bq=0}}while(0);do{if((a[47128]&1)!=0){a$=+h[f>>3]- +h[5908];a0=+h[aS>>3]- +h[5909];a1=a$*+h[5911]+a0*+h[5912];h[f>>3]=a1;aZ=a$*+h[5913]+a0*+h[5914];h[aS>>3]=aZ;if((c[11856]|0)==2){a0=+h[aT>>3]- +h[5910];a$=a1*+h[5915]+aZ*+h[5916]+a0*+h[5917];h[f>>3]=a$;aX=a1*+h[5918]+aZ*+h[5919]+a0*+h[5920];h[aS>>3]=aX;h[aT>>3]=a1*+h[5921]+aZ*+h[5922]+a0*+h[5923];br=a$;bs=aX}else{br=a1;bs=aZ}h[f>>3]=br+ +h[5897];h[aS>>3]=bs+ +h[5898];if((c[11856]|0)!=2){break}h[aT>>3]=+h[5899]+ +h[aT>>3]}}while(0);if((bp|0)==0){bf=_}else{K=4752;break L6580}}}while(0);if(a[47736]|0){break L6578}else{_=bf}}if((K|0)==4629){a[47224]=0;c[7638]=-1;c[8800]=(c[8800]|0)+1;y=-3;i=k;return y|0}else if((K|0)==4631){a[47232]=0;c[8800]=0;y=-4;i=k;return y|0}else if((K|0)==4649){a[47736]=1;y=-1;i=k;return y|0}else if((K|0)==4669){uf(-1,184064,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((K|0)==4682){uf(-1,183240,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((K|0)==4697){if((cj(c[12892]|0)|0)==0){uf(-1,c[6942]|0,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}if((a5|0)!=0){uf(-1,182696,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}a[47736]=1;y=-1;i=k;return y|0}else if((K|0)==4721){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=181200,v)|0);return 0}else if((K|0)==4726){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((K|0)==4738){uf(-1,180832,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((K|0)==4752){_=c[11870]|0;if((c[11872]|0)>0){aT=u|0;aS=u+8|0;aN=_;while(1){ae=1052+(aN*12&-1)|0;do{if((c[ae>>2]|0)>2){aR=c[1056+(aN*12&-1)>>2]|0;if((aR|0)==0){break}a[43504]=1;e4(aR,u);a[43504]=0;aR=c[ae>>2]|0;if((aR|0)==4){bt=0;bu=6}else if((aR|0)==5){bt=1;bu=1}else if((aR|0)==6){bt=1;bu=5}else if((aR|0)==7){bt=2;bu=0}else if((aR|0)==8){bt=2;bu=3}else{bt=0;bu=2}if((c[aT>>2]|0)!=3){break}aR=c[aS>>2]|0;dp(bu,aR,+h[f+(bt<<3)>>3],-1);uu(aR);c[aT>>2]=1}}while(0);ae=aN+1|0;aR=c[11870]|0;if((ae|0)<((c[11872]|0)+aR|0)){aN=ae}else{bv=aR;break}}}else{bv=_}if((bv|0)==0|(bq|0)==(bv|0)|(bq|0)==(j|0)){y=bq;i=k;return y|0}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=180528,v)|0);return 0}}else if((K|0)==4966){i=k;return y|0}else if((K|0)==4967){i=k;return y|0}else if((K|0)==4970){i=k;return y|0}else if((K|0)==4971){i=k;return y|0}else if((K|0)==4972){i=k;return y|0}}}while(0);a[47736]=1;y=-1;i=k;return y|0}function eD(b){b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0;c=i;i=i+8|0;d=c|0;if((b|0)==0){e=0;i=c;return e|0}do{if((a[b]|0)==34){f=b+1|0;if((f|0)==0){g=0}else{g=bP(f|0)|0}a[g+(bk(g|0,132696)|0)|0]=0;h=g}else{f=a[47120]|0;if(f<<24>>24==0){j=bP(b|0)|0;a[j+(bk(j|0,84256)|0)|0]=0;h=j;break}else{j=d|0;a[j]=f;a[d+1|0]=34;a[d+2|0]=0;f=bP(b|0)|0;a[f+(bk(f|0,j|0)|0)|0]=0;h=f;break}}}while(0);ua(h);e=h;i=c;return e|0}function eE(b){b=b|0;var d=0,e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0.0;d=i;i=i+8|0;e=d|0;f=e;if((cd(f|0,4,1,b|0)|0)!=1){if((cj(b|0)|0)==0){uf(-1,c[6942]|0,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0.0}else{uf(-1,74632,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0.0}}b=c[12208]|0;h=a[47816+(b>>>0<3?b:3)|0]|0;if((h-2|0)>>>0<2){b=0;j=3;do{k=f+b|0;l=a[k]|0;m=f+j|0;a[k]=a[m]|0;a[m]=l;b=b+1|0;j=j-1|0;}while((b|0)<(j|0))}if((h-1|0)>>>0>=2){n=+g[e>>2];i=d;return+n}h=f+2|0;j=a[h]|0;b=f+3|0;a[h]=a[b]|0;a[b]=j;j=a[f]|0;b=f+1|0;a[f]=a[b]|0;a[b]=j;n=+g[e>>2];i=d;return+n}function eF(b){b=b|0;var d=0,e=0,f=0,g=0,j=0.0,k=0;d=i;e=b+8|0;f=c[e>>2]|0;g=f-1|0;if((f|0)==0){f=c[6354]|0;if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}j=+(c[11942]|0);k=f+1|0;c[6354]=k;c[14296+(k*24&-1)>>2]=2;h[14304+(k*24&-1)>>3]=j;h[14312+(k*24&-1)>>3]=0.0;i=d;return}do{if((g|0)<(c[11874]|0)){k=c[11952]|0;if((c[k+(g*24&-1)+8>>2]|0)!=1){break}f=c[6354]|0;if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}j=+h[k+(g*24&-1)>>3];k=f+1|0;c[6354]=k;c[14296+(k*24&-1)>>2]=2;h[14304+(k*24&-1)>>3]=j;h[14312+(k*24&-1)>>3]=0.0;i=d;return}}while(0);a[1960]=1;g=c[6354]|0;if((g|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}k=g+1|0;c[6354]=k;g=14296+(k*24&-1)|0;k=b;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=c[k+20>>2];if((c[b>>2]|0)!=3){i=d;return}b=c[e>>2]|0;if((b|0)==0){i=d;return}e=bP(b|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=e;i=d;return}function eG(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0.0,l=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0;b=i;i=i+8|0;d=b|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=e-1;f=14296+(e*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=14304+(e*24&-1)|0;k=+h[f>>3];l=c[f>>2]|0;h[d>>3]=k;m=+h[14312+(e*24&-1)>>3];e=l;l=e;if((a[43504]&1)==0){uf((c[13898]|0)-1|0,74216,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((g|0)==1){n=+(e|0);o=5045}else if((g|0)==2){n=k;o=5045}else if((g|0)==3){e=d;f=c[11874]|0;L6842:do{if((f|0)>0){p=0;q=f;while(1){r=c[(c[11952]|0)+(p*24&-1)+16>>2]|0;if((r|0)==0){s=q}else{if(ui(l,r+((a[r]|0)==34&1)|0)|0){break}s=c[11874]|0}r=p+1|0;if((r|0)<(s|0)){p=r;q=s}else{t=-9;break L6842}}q=p+1|0;if((c[11902]|0)!=0){t=q;break}r=c[(c[11952]|0)+(p*24&-1)+16>>2]|0;if((r|0)==0){u=0}else{u=bP(r|0)|0}c[11902]=u;t=q}else{t=-9}}while(0);uu(c[e>>2]|0);w=t;x=1}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((o|0)==5045){w=~~n;x=g}if((w|0)==(-2|0)){c[d>>2]=c[11946];g=c[6354]|0;if((g|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}o=g+1|0;c[6354]=o;g=14296+(o*24&-1)|0;c[g>>2]=1;c[g+4>>2]=j;h[14304+(o*24&-1)>>3]=+h[d>>3];h[14312+(o*24&-1)>>3]=m;i=b;return}else if((w|0)==(-1|0)){c[d>>2]=c[8800];o=c[6354]|0;if((o|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=o+1|0;c[6354]=g;o=14296+(g*24&-1)|0;c[o>>2]=1;c[o+4>>2]=j;h[14304+(g*24&-1)>>3]=+h[d>>3];h[14312+(g*24&-1)>>3]=m;i=b;return}else if((w|0)==0){n=+(c[11942]|0);h[d>>3]=n;g=c[6354]|0;if((g|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}o=g+1|0;c[6354]=o;g=14296+(o*24&-1)|0;c[g>>2]=2;c[g+4>>2]=j;h[14304+(o*24&-1)>>3]=n;h[14312+(o*24&-1)>>3]=0.0;i=b;return}else{do{if(!((w|0)<1|(w|0)>(c[11874]|0))){o=w-1|0;g=c[11952]|0;if((c[g+(o*24&-1)+8>>2]|0)!=1){break}n=+h[g+(o*24&-1)>>3];h[d>>3]=n;o=c[6354]|0;if((o|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=o+1|0;c[6354]=g;o=14296+(g*24&-1)|0;c[o>>2]=2;c[o+4>>2]=j;h[14304+(g*24&-1)>>3]=n;h[14312+(g*24&-1)>>3]=0.0;i=b;return}}while(0);a[1960]=1;w=c[6354]|0;if((w|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=w+1|0;c[6354]=g;w=14296+(g*24&-1)|0;c[w>>2]=x;c[w+4>>2]=j;j=c[d>>2]|0;h[14304+(g*24&-1)>>3]=+h[d>>3];h[14312+(g*24&-1)>>3]=m;g=j;if((x|0)!=3|(g|0)==0){i=b;return}x=bP(g|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=x;i=b;return}}function eH(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0;b=i;i=i+104|0;d=b|0;e=b+8|0;f=b+40|0;g=b+72|0;j=c[6354]|0;if((j|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=j-1;k=14296+(j*24&-1)|0;l=c[k>>2]|0;m=c[k+4>>2]|0;k=14304+(j*24&-1)|0;n=+h[k>>3];o=c[k>>2]|0;h[d>>3]=n;p=+h[14312+(j*24&-1)>>3];j=o;o=j;if((a[43504]&1)==0){q=c[13898]|0;r=q-1|0;uf(r,73448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((a[47584]&1)!=0){q=c[13898]|0;r=q-1|0;uf(r,73448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((l|0)==3){r=d;q=c[11874]|0;L6902:do{if((q|0)>0){k=0;s=q;while(1){t=c[(c[11952]|0)+(k*24&-1)+16>>2]|0;if((t|0)==0){u=s}else{if(ui(o,t+((a[t]|0)==34&1)|0)|0){break}u=c[11874]|0}t=k+1|0;if((t|0)<(u|0)){k=t;s=u}else{w=5088;break L6902}}s=k+1|0;if((c[11902]|0)==0){t=c[(c[11952]|0)+(k*24&-1)+16>>2]|0;if((t|0)==0){x=0}else{x=bP(t|0)|0}c[11902]=x}if((s|0)==-9){w=5088}else{y=s}}else{w=5088}}while(0);do{if((w|0)==5088){if((a[47040]&1)==0){y=-9;break}a[47040]=0;uh(-1,72840,(v=i,i=i+8|0,c[v>>2]=c[r>>2],v)|0);x=c[11874]|0;if((x|0)>0){z=0;A=x}else{y=-9;break}while(1){x=c[(c[11952]|0)+(z*24&-1)+16>>2]|0;do{if((x|0)==0){B=A}else{u=x+((a[x]|0)==34&1)|0;if((a_(o|0,u|0,uA(o|0)|0)|0)!=0){B=A;break}uh(-1,225080,(v=i,i=i+16|0,c[v>>2]=z+1,c[v+8>>2]=x,v)|0);B=c[11874]|0}}while(0);x=z+1|0;if((x|0)<(B|0)){z=x;A=B}else{y=-9;break}}}}while(0);uu(c[r>>2]|0);C=y;D=1}else if((l|0)==1){E=+(j|0);w=5097}else if((l|0)==2){E=n;w=5097}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((w|0)==5097){C=~~E;D=l}if((C|0)==(-2|0)){l=e|0;e=c[11946]|0;be(l|0,21e4,(v=i,i=i+8|0,c[v>>2]=e,v)|0);c[d>>2]=l;l=c[6354]|0;if((l|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=l+1|0;c[6354]=e;l=14296+(e*24&-1)|0;c[l>>2]=3;c[l+4>>2]=m;l=c[d>>2]|0;h[14304+(e*24&-1)>>3]=+h[d>>3];h[14312+(e*24&-1)>>3]=p;e=l;if((e|0)==0){i=b;return}l=bP(e|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=l;i=b;return}else if((C|0)==(-1|0)){l=f|0;be(l|0,21e4,(v=i,i=i+8|0,c[v>>2]=c[8800],v)|0);c[d>>2]=l;l=c[6354]|0;if((l|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=l+1|0;c[6354]=f;l=14296+(f*24&-1)|0;c[l>>2]=3;c[l+4>>2]=m;l=c[d>>2]|0;h[14304+(f*24&-1)>>3]=+h[d>>3];h[14312+(f*24&-1)>>3]=p;f=l;if((f|0)==0){i=b;return}l=bP(f|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=l;i=b;return}else if((C|0)==0){l=g|0;be(l|0,21e4,(v=i,i=i+8|0,c[v>>2]=c[11942],v)|0);c[d>>2]=l;l=c[6354]|0;if((l|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=l+1|0;c[6354]=g;l=14296+(g*24&-1)|0;c[l>>2]=3;c[l+4>>2]=m;l=c[d>>2]|0;h[14304+(g*24&-1)>>3]=+h[d>>3];h[14312+(g*24&-1)>>3]=p;g=l;if((g|0)==0){i=b;return}l=bP(g|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=l;i=b;return}else{if((C|0)<1|(C|0)>(c[11874]|0)){a[1960]=1;l=c[6354]|0;if((l|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=l+1|0;c[6354]=g;l=14296+(g*24&-1)|0;c[l>>2]=D;c[l+4>>2]=m;l=c[d>>2]|0;h[14304+(g*24&-1)>>3]=+h[d>>3];h[14312+(g*24&-1)>>3]=p;g=l;if((D|0)!=3|(g|0)==0){i=b;return}D=bP(g|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=D;i=b;return}else{D=eD(c[(c[11952]|0)+((C-1|0)*24&-1)+12>>2]|0)|0;c[d>>2]=D;C=c[6354]|0;if((C|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=C+1|0;c[6354]=g;C=14296+(g*24&-1)|0;c[C>>2]=3;c[C+4>>2]=m;m=c[d>>2]|0;h[14304+(g*24&-1)>>3]=+h[d>>3];h[14312+(g*24&-1)>>3]=p;g=m;if((g|0)!=0){m=bP(g|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=m}uu(D);i=b;return}}}function eI(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0.0,m=0,n=0.0,o=0.0,p=0;b=i;i=i+8|0;d=b|0;if((a[43504]&1)==0){uf((c[13898]|0)-1|0,223600,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e-1|0;c[6354]=f;g=14296+(e*24&-1)|0;j=c[g>>2]|0;k=c[g+4>>2]|0;g=14304+(e*24&-1)|0;l=+h[g>>3];m=c[g>>2]|0;h[d>>3]=l;n=+h[14312+(e*24&-1)>>3];e=m;if((j|0)==2){o=l;p=f}else if((j|0)==1){o=+(e|0);p=f}else if((j|0)==3){l=+uz(e,0);o=l;p=c[6354]|0}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[13488]=~~o;c[d>>2]=222976;if((p|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=p+1|0;c[6354]=e;p=14296+(e*24&-1)|0;c[p>>2]=3;c[p+4>>2]=k;k=c[d>>2]|0;h[14304+(e*24&-1)>>3]=+h[d>>3];h[14312+(e*24&-1)>>3]=n;e=k;if((e|0)==0){i=b;return}k=bP(e|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=k;i=b;return}function eJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,w=0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=d-1|0;c[6354]=e;f=14296+(d*24&-1)|0;g=f|0;j=c[g>>2]|0;k=f+4|0;f=c[k>>2]|0;l=14304+(d*24&-1)|0;m=+h[l>>3];n=c[l>>2]|0;h[b>>3]=m;o=14312+(d*24&-1)|0;p=+h[o>>3];q=n;do{if((j|0)==2){r=+P(+m);s=+P(+p);if(p==0.0){t=r;break}if(r>s){u=s/r;t=r*+Q(+(u*u+1.0));break}else{u=r/s;t=s*+Q(+(u*u+1.0));break}}else if((j|0)==1){t=+(((q|0)>-1?q:-q|0)|0)}else{uf(-1,211136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);q=~~t;j=q-1|0;if((q|0)>0&(j|0)<(c[11874]|0)){w=(c[(c[11952]|0)+(j*24&-1)+8>>2]|0)==1&1}else{w=0}c[b>>2]=w;if((e|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{c[6354]=d;c[g>>2]=1;c[k>>2]=f;h[l>>3]=+h[b>>3];h[o>>3]=p;i=a;return}}function eK(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,w=0,x=0;b=i;i=i+56|0;d=b|0;e=b+48|0;h[e>>3]=0.0;f=c[6354]|0;if((f|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=f-1|0;c[6354]=g;j=14296+(f*24&-1)|0;k=c[j>>2]|0;l=c[j+4>>2]|0;j=14304+(f*24&-1)|0;m=+h[j>>3];n=+h[14312+(f*24&-1)>>3];f=c[j>>2]|0;j=f;do{if((k|0)==1){o=+(((f|0)>-1?f:-f|0)|0)}else if((k|0)==2){p=+P(+m);q=+P(+n);if(n==0.0){o=p;break}if(p>q){r=q/p;o=p*+Q(+(r*r+1.0));break}else{r=p/q;o=q*+Q(+(r*r+1.0));break}}else{uf(-1,211136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);s=~~o;if((a[43504]&1)==0){uf((c[13898]|0)-1|0,222536,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}t=c[48840+(c[12902]<<2)>>2]|0;do{if((s|0)<1|(s|0)>(c[11874]|0)){u=g}else{w=c[(c[11952]|0)+((s-1|0)*24&-1)+12>>2]|0;if((w|0)==0){u=g;break}x=(t1(w,64813+(t*688&-1)|0,d,e)|0)==0;w=c[6354]|0;if(x){u=w;break}if((w|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}o=+h[e>>3];r=+t2(d)+o;x=w+1|0;c[6354]=x;w=14296+(x*24&-1)|0;c[w>>2]=2;c[w+4>>2]=l;h[14304+(x*24&-1)>>3]=r;h[14312+(x*24&-1)>>3]=0.0;i=b;return}}while(0);a[1960]=1;if((u|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}d=u+1|0;c[6354]=d;u=14296+(d*24&-1)|0;c[u>>2]=k;c[u+4>>2]=l;h[14304+(d*24&-1)>>3]=m;h[14312+(d*24&-1)>>3]=n;if((k|0)!=3|(f|0)==0){i=b;return}f=bP(j|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=f;i=b;return}function eL(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0;d=i;e=c[11902]|0;if((e|0)==0){i=d;return}if((c[b+12>>2]|0)==392&(c[9670]|0)==2){dp(2,e,+(c[b+280>>2]|0)+ +h[(c[b+276>>2]|0)+16>>3],-1);uu(c[11902]|0);c[11902]=0;i=d;return}f=b+16|0;g=c[f>>2]|0;do{if((g|0)!=0){if((a[b+21|0]&1)!=0){break}j=aQ(g|0,222976)|0;if((j|0)==0){i=d;return}k=uA(g|0)|0;l=(uA(e|0)|0)+k|0;k=ut(l)|0;do{if((k|0)==0){gk();m=ut(l)|0;if((m|0)!=0){n=m;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=221744,v)|0)}else{n=k}}while(0);a[j]=0;k=c[f>>2]|0;l=c[11902]|0;m=j+12|0;be(n|0,172512,(v=i,i=i+24|0,c[v>>2]=k,c[v+8>>2]=l,c[v+16>>2]=m,v)|0);uu(c[11902]|0);c[11902]=n}}while(0);if((a[b+22|0]&1)!=0){i=d;return}n=c[f>>2]|0;if((n|0)!=0){uu(n)}a[b+20|0]=a[36231]&1^1;c[f>>2]=c[11902];c[11902]=0;i=d;return}function eM(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0.0;d=i;i=i+48|0;e=d|0;f=d+24|0;g=c[13898]|0;j=g+1|0;c[13898]=j;k=(c[8272]|0)>(j|0);L7071:do{if(k){l=c[1054]|0;if((a[l+(j*40&-1)|0]&1)!=0){m=c[l+(j*40&-1)+36>>2]|0;n=l+(j*40&-1)+32|0;l=c[10036]|0;o=0;while(1){if((o|0)>=(m|0)){p=5212;break}if((a[l+((c[n>>2]|0)+o|0)|0]|0)==(a[o+199040|0]|0)){o=o+1|0}else{break}}do{if((p|0)==5212){if((o|0)!=1){break}c[13898]=g+2;n=is(f)|0;l=c[n>>2]|0;if((l|0)==2){q=+h[n+8>>3]}else if((l|0)==3){q=+uz(c[n+8>>2]|0,0)}else if((l|0)==1){q=+(c[n+8>>2]|0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}n=f|0;if((c[n>>2]|0)==3){uu(c[f+8>>2]|0);c[n>>2]=1}n=~~q;c[13488]=n;c[13898]=(c[13898]|0)+1;r=n;break L7071}}while(0);if(!k){p=5236;break}}o=c[1054]|0;n=(a[o+(j*40&-1)|0]&1)==0;do{if(!n){l=c[o+(j*40&-1)+36>>2]|0;m=o+(j*40&-1)+32|0;s=c[10036]|0;t=0;while(1){if((t|0)>=(l|0)){p=5226;break}if((a[s+((c[m>>2]|0)+t|0)|0]|0)==(a[t+103664|0]|0)){t=t+1|0}else{p=5227;break}}if((p|0)==5226){if((t|0)==1|n^1){p=5236;break L7071}else{break}}else if((p|0)==5227){if(n){break}else{p=5236;break L7071}}}}while(0);n=is(e)|0;o=c[n>>2]|0;if((o|0)==1){u=+(c[n+8>>2]|0)}else if((o|0)==2){u=+h[n+8>>3]}else if((o|0)==3){u=+uz(c[n+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}n=e|0;if((c[n>>2]|0)==3){uu(c[e+8>>2]|0);c[n>>2]=1}n=~~u;c[13488]=n;r=n}else{p=5236}}while(0);do{if((p|0)==5236){if((c[11870]|0)==1){e=c[262]|0;c[13488]=e;r=e;break}if((c[b+8>>2]|0)==3){e=c[268]|0;c[13488]=e;r=e;break}else{e=c[265]|0;c[13488]=e;r=e;break}}}while(0);if((r|0)!=-99){i=d;return}c[b+16>>2]=bP(222976)|0;i=d;return}function eN(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,w=0,x=0.0,y=0.0,z=0;d=i;aI(214576,68,1,b|0);e=c[11862]|0;f=(e|0)==0;g=f?1:e;e=f?48440:c[12168]|0;aI(213904,15,1,b|0);f=c[12202]|0;if((f|0)>-1){j=c[48696+(f<<3)>>2]|0;aK(j|0,b|0)}else{aI(135560,4,1,b|0)}cf(b|0,212192,(v=i,i=i+8|0,c[v>>2]=c[47744+(c[12206]<<2)>>2],v)|0);j=c[11962]|0;cf(b|0,211640,(v=i,i=i+8|0,c[v>>2]=(j|0)!=0?j:135560,v)|0);if((g|0)>0){k=0}else{i=d;return}do{cf(b|0,211256,(v=i,i=i+8|0,c[v>>2]=k,v)|0);aI(210760,16,1,b|0);j=c[e+(k*232&-1)>>2]|0;do{if((j|0)<0){aI(210016,3,1,b|0);l=1}else{cf(b|0,21e4,(v=i,i=i+8|0,c[v>>2]=j,v)|0);f=c[e+(k*232&-1)+4>>2]|0;if((f|0)<=0){l=1;break}cf(b|0,209320,(v=i,i=i+8|0,c[v>>2]=f,v)|0);f=c[e+(k*232&-1)+8>>2]|0;if((f|0)<=0){l=2;break}cf(b|0,209320,(v=i,i=i+8|0,c[v>>2]=f,v)|0);l=3}}while(0);j=e+(k*232&-1)+124|0;cf(b|0,209120,(v=i,i=i+8|0,c[v>>2]=(a[j]&1)!=0?136424:136208,v)|0);do{if((a[j]&1)!=0){aI(207296,17,1,b|0);if((c[e+(k*232&-1)+12>>2]|0)==-1){aI(206608,6,1,b|0);m=0}else{m=1}f=l>>>0>1;L7143:do{if(f){if((c[e+(k*232&-1)+16>>2]|0)==-1){n=m?179864:86120;cf(b|0,205848,(v=i,i=i+8|0,c[v>>2]=n,v)|0);o=0}else{o=m}do{if((l|0)==3){if((c[e+(k*232&-1)+20>>2]|0)!=-1){p=1;break}n=o?179864:86120;cf(b|0,204712,(v=i,i=i+8|0,c[v>>2]=n,v)|0);q=1;r=5268;break L7143}else{p=0}}while(0);if(o){s=p;r=5267}else{q=p;r=5268}}else{if(m){s=0;r=5267;break}t=+h[e+(k*232&-1)+24>>3];cf(b|0,204152,(v=i,i=i+8|0,h[v>>3]=t,v)|0);u=0}}while(0);if((r|0)==5267){r=0;aI(204448,11,1,b|0);q=s;r=5268}do{if((r|0)==5268){r=0;t=+h[e+(k*232&-1)+24>>3];cf(b|0,204152,(v=i,i=i+8|0,h[v>>3]=t,v)|0);if(f){t=+h[e+(k*232&-1)+32>>3];cf(b|0,203944,(v=i,i=i+8|0,h[v>>3]=t,v)|0);if(!q){u=0;break}}else{if(!q){u=0;break}}t=+h[e+(k*232&-1)+40>>3];cf(b|0,203696,(v=i,i=i+8|0,h[v>>3]=t,v)|0);u=1}}while(0);n=e+(k*232&-1)+48|0;w=c[n>>2]|0;if((w|0)==1){aI(203456,13,1,b|0)}else if((w|0)==2){aI(203128,13,1,b|0)}if(((c[n>>2]|0)-1|0)>>>0<2){t=+h[e+(k*232&-1)+56>>3];x=+h[e+(k*232&-1)+64>>3];y=+h[e+(k*232&-1)+72>>3];cf(b|0,202912,(v=i,i=i+24|0,h[v>>3]=t,h[v+8>>3]=x,h[v+16>>3]=y,v)|0)}y=+h[e+(k*232&-1)+80>>3];cf(b|0,202576,(v=i,i=i+8|0,h[v>>3]=y,v)|0);y=+h[e+(k*232&-1)+88>>3];x=+h[e+(k*232&-1)+96>>3];t=+h[e+(k*232&-1)+104>>3];cf(b|0,201912,(v=i,i=i+24|0,h[v>>3]=y,h[v+8>>3]=x,h[v+16>>3]=t,v)|0);n=e+(k*232&-1)+112|0;w=0;while(1){if(w>>>0>=12){break}if((a_(n|0,48188+(w<<4)|0,12)|0)==0){r=5280;break}else{w=w+1|0}}if((r|0)==5280){r=0;aI(201312,12,1,b|0);n=(c[e+(k*232&-1)+8>>2]|0)!=0?132824:200424;z=c[48184+(w<<4)>>2]|0;cf(b|0,n|0,(v=i,i=i+8|0,c[v>>2]=z,v)|0)}cf(b|0,199512,(v=i,i=i+8|0,c[v>>2]=c[e+(k*232&-1)+128>>2],v)|0);if(f){z=c[e+(k*232&-1)+132>>2]|0;cf(b|0,199136,(v=i,i=i+8|0,c[v>>2]=z,v)|0)}if(!u){break}cf(b|0,198848,(v=i,i=i+8|0,c[v>>2]=c[e+(k*232&-1)+136>>2],v)|0)}}while(0);aF(10,b|0);k=k+1|0;}while((k|0)<(g|0));i=d;return}function eO(a){a=a|0;var d=0,f=0,g=0,h=0,j=0;d=i;aI(198008,82,1,a|0);f=0;do{aI(197576,3,1,a|0);g=48028+(f<<4)|0;if((b[g>>1]|0)!=0){h=48024+(f<<4)|0;j=0;do{cf(a|0,103640,(v=i,i=i+8|0,c[v>>2]=c[(c[h>>2]|0)+(j<<2)>>2],v)|0);j=j+1|0;}while((j|0)<(e[g>>1]|0|0))}cf(a|0,196376,(v=i,i=i+8|0,c[v>>2]=e[48036+(f<<4)>>1]|0,v)|0);f=f+1|0;}while(f>>>0<10);aI(195800,95,1,a|0);f=0;do{aI(197576,3,1,a|0);g=47868+(f<<4)|0;if((b[g>>1]|0)!=0){j=47864+(f<<4)|0;h=0;do{cf(a|0,103640,(v=i,i=i+8|0,c[v>>2]=c[(c[j>>2]|0)+(h<<2)>>2],v)|0);h=h+1|0;}while((h|0)<(e[g>>1]|0|0))}cf(a|0,194088,(v=i,i=i+8|0,c[v>>2]=e[47876+(f<<4)>>1]|0,v)|0);if((c[47872+(f<<4)>>2]|0)==12){aI(193568,40,1,a|0)}aF(10,a|0);f=f+1|0;}while(f>>>0<10);i=d;return}function eP(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0;b=i;d=(c[13898]|0)+1|0;c[13898]=d;if((d|0)>=(c[8272]|0)){uf(d,217808,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=c[1054]|0;L7206:do{if((a[e+(d*40&-1)|0]&1)!=0){f=c[e+(d*40&-1)+36>>2]|0;g=e+(d*40&-1)+32|0;h=c[10036]|0;j=0;while(1){if((j|0)>=(f|0)){break}if((a[h+((c[g>>2]|0)+j|0)|0]|0)==(a[j+103664|0]|0)){j=j+1|0}else{break L7206}}if((j|0)!=1){break}uf(d,217808,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);d=c[12172]|0;e=c[11864]|0;if((e|0)>0){g=0;h=e;while(1){e=d+(g*232&-1)+224|0;f=c[e>>2]|0;if((f|0)==0){k=h}else{uu(f);c[e>>2]=0;k=c[11864]|0}e=g+1|0;if((e|0)<(k|0)){g=e;h=k}else{break}}}c[11864]=0;if((c[12168]|0)==0){c[12204]=c[12200];c[12208]=0;k=c[12172]|0;do{if((c[11880]|0)<1){h=db(k,232,216568)|0;g=h;c[12172]=g;if((h|0)==0){c[11880]=0;uf(c[13898]|0,216112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{c[11880]=1;l=c[11864]|0;m=g;break}}else{l=0;m=k}}while(0);uD(m+(l*232&-1)|0,48440,232);c[11864]=(c[11864]|0)+1}else{c[12204]=c[12202];c[12208]=c[12206];l=c[11862]|0;do{if((l|0)>(c[11880]|0)){m=db(c[12172]|0,l*232&-1,216568)|0;c[12172]=m;if((m|0)==0){c[11880]=0;uf(c[13898]|0,216112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{c[11880]=l;break}}}while(0);m=c[12172]|0;k=c[11864]|0;if((l|0)>0){g=0;h=k;while(1){uD(m+(h*232&-1)|0,48440,232);d=(c[11864]|0)+1|0;c[11864]=d;e=g+1|0;if((e|0)<(l|0)){g=e;h=d}else{n=d;break}}}else{n=k}uD(m|0,c[12168]|0,n*232&-1)}c[11856]=0;eB(0,1);c[12202]=c[12204];c[12206]=c[12208];n=c[12168]|0;m=c[11862]|0;if((m|0)>0){k=0;h=m;while(1){m=n+(k*232&-1)+224|0;g=c[m>>2]|0;if((g|0)==0){o=h}else{uu(g);c[m>>2]=0;o=c[11862]|0}m=k+1|0;if((m|0)<(o|0)){k=m;h=o}else{break}}}c[11862]=0;o=c[11864]|0;do{if((o|0)>(c[11878]|0)){h=db(c[12168]|0,o*232&-1,216568)|0;c[12168]=h;if((h|0)==0){c[11878]=0;uf(c[13898]|0,216112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{c[11878]=o;break}}}while(0);h=c[12168]|0;k=c[11862]|0;if((o|0)>0){p=0;q=k}else{r=k;s=h;t=c[12172]|0;u=t;w=r*232&-1;uD(s|0,u|0,w);i=b;return}while(1){uD(h+(q*232&-1)|0,48440,232);k=(c[11862]|0)+1|0;c[11862]=k;n=p+1|0;if((n|0)<(o|0)){p=n;q=k}else{r=k;break}}s=h;t=c[12172]|0;u=t;w=r*232&-1;uD(s|0,u|0,w);i=b;return}function eQ(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;d=i;e=c[11876]|0;if((e|0)>=(a|0)){i=d;return}if((e|0)>0){f=c[(c[11950]|0)+((e-1|0)*12&-1)+4>>2]|0}else{f=8}e=48036+(f<<4)|0;g=a;while(1){h=g+1|0;if((h|0)<=0){j=5346;break}k=c[11950]|0;if((c[11884]|0)<(h|0)){l=db(k,h*12&-1,215112)|0;c[11950]=l;c[11884]=h;m=l}else{m=k}c[m+(g*12&-1)>>2]=0;if((g|0)<=0){j=5350;break}k=c[11950]|0;if((c[11884]|0)<(g|0)){l=db(k,g*12&-1,215112)|0;c[11950]=l;c[11884]=g;n=l}else{n=k}k=g-1|0;c[n+(k*12&-1)+4>>2]=f;b[(c[11950]|0)+(k*12&-1)+8>>1]=b[e>>1]|0;if((k|0)>(c[11876]|0)){g=k}else{j=5354;break}}if((j|0)==5354){c[11876]=a;i=d;return}else if((j|0)==5350){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=215616,v)|0)}else if((j|0)==5346){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=215616,v)|0)}}function eR(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;i=i+8|0;e=d|0;do{if(a[47440]|0){f=b}else{if((a[30664]&1)!=0){f=b;break}if((cp(c[12892]|0,b|0,1)|0)==0){g=0;i=d;return g|0}if((cj(c[12892]|0)|0)==0){uf(-1,c[6942]|0,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}a[47736]=1;g=-1;i=d;return g|0}}while(0);while(1){if((f|0)==0){g=0;h=5372;break}if((cd(e|0,1,1,c[12892]|0)|0)==1){f=f-1|0}else{break}}if((h|0)==5372){i=d;return g|0}if((cj(c[12892]|0)|0)==0){uf(-1,c[6942]|0,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}a[47736]=1;g=-1;i=d;return g|0}function eS(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0,Y=0.0;b=i;i=i+80|0;d=b|0;e=b+24|0;f=b+48|0;g=b+72|0;j=g|0;k=i;i=i+4|0;i=i+7>>3<<3;l=c[13898]|0;if((c[8272]|0)<=(l|0)){m=c[10880]|0;uf(l,m,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}n=c[1054]|0;if((a[n+(l*40&-1)|0]&1)==0){m=c[10880]|0;uf(l,m,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}o=c[n+(l*40&-1)+36>>2]|0;p=n+(l*40&-1)+32|0;q=c[10036]|0;r=0;while(1){if((r|0)>=(o|0)){break}if((a[q+((c[p>>2]|0)+r|0)|0]|0)==(a[r+115e3|0]|0)){r=r+1|0}else{s=5462;break}}if((s|0)==5462){m=c[10880]|0;uf(l,m,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((r|0)!=1){m=c[10880]|0;uf(l,m,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}m=c[12172]|0;r=c[11864]|0;if((r|0)>0){p=0;q=r;while(1){r=m+(p*232&-1)+224|0;o=c[r>>2]|0;if((o|0)==0){t=q}else{uu(o);c[r>>2]=0;t=c[11864]|0}r=p+1|0;if((r|0)<(t|0)){p=r;q=t}else{break}}u=c[13898]|0;w=c[1054]|0}else{u=l;w=n}c[11864]=0;n=e|0;l=e+8|0;t=g|0;q=g+1|0;p=d|0;m=d+8|0;r=f|0;o=f+8|0;x=0;y=u;u=w;L7326:while(1){w=y+1|0;c[13898]=w;L7328:do{if((a[u+(w*40&-1)|0]&1)==0){z=x+1|0;A=c[11864]|0;if((z|0)>(A|0)){B=A+1|0;if((B|0)>(c[11880]|0)){C=db(c[12172]|0,B*232&-1,216568)|0;c[12172]=C;if((C|0)==0){s=5391;break L7326}c[11880]=B;D=c[11864]|0}else{D=A}uD((c[12172]|0)+(D*232&-1)|0,48440,232);c[11864]=(c[11864]|0)+1}A=is(e)|0;B=c[A>>2]|0;if((B|0)==2){E=+h[A+8>>3]}else if((B|0)==1){E=+(c[A+8>>2]|0)}else if((B|0)==3){E=+uz(c[A+8>>2]|0,0)}else{s=5398;break L7326}if((c[n>>2]|0)==3){uu(c[l>>2]|0);c[n>>2]=1}c[(c[12172]|0)+(((c[11864]|0)-1|0)*232&-1)>>2]=~~E;A=c[13898]|0;B=c[8272]|0;if((A|0)>=(B|0)){F=z;G=A;H=B;break}C=c[1054]|0;L7346:do{if((a[C+(A*40&-1)|0]&1)==0){I=c[10036]|0;J=C+(A*40&-1)+32|0;K=C+(A*40&-1)+36|0}else{L=C+(A*40&-1)+36|0;M=c[L>>2]|0;N=C+(A*40&-1)+32|0;O=c[10036]|0;P=0;while(1){if((P|0)>=(M|0)){break}if((a[O+((c[N>>2]|0)+P|0)|0]|0)==(a[P+103664|0]|0)){P=P+1|0}else{I=O;J=N;K=L;break L7346}}if((P|0)==1){F=z;G=A;H=B;break L7328}else{I=O;J=N;K=L}}}while(0);c[k>>2]=0;C=c[K>>2]|0;uD(j|0,I+(c[J>>2]|0)|0,(C|0)<5?C:5);a[g+((C|0)>5?5:C)|0]=0;if((a[t]|0)!=120){F=z;G=A;H=B;break}ca(q|0,21e4,(v=i,i=i+8|0,c[v>>2]=k,v)|0);c[(c[12172]|0)+(((c[11864]|0)-1|0)*232&-1)+4>>2]=c[k>>2];C=(c[13898]|0)+1|0;c[13898]=C;F=z;G=C;H=c[8272]|0}else{C=c[8272]|0;if((C|0)<=(w|0)){F=x;G=w;H=C;break}M=c[u+(w*40&-1)+36>>2]|0;Q=u+(w*40&-1)+32|0;R=c[10036]|0;S=0;while(1){if((S|0)>=(M|0)){break}if((a[R+((c[Q>>2]|0)+S|0)|0]|0)==(a[S+199040|0]|0)){S=S+1|0}else{F=x;G=w;H=C;break L7328}}if((S|0)!=1){F=x;G=w;H=C;break}c[13898]=y+2;Q=x+1|0;R=c[11864]|0;if((Q|0)>(R|0)){M=R+1|0;if((M|0)>(c[11880]|0)){z=db(c[12172]|0,M*232&-1,216568)|0;c[12172]=z;if((z|0)==0){s=5418;break L7326}c[11880]=M;T=c[11864]|0}else{T=R}uD((c[12172]|0)+(T*232&-1)|0,48440,232);c[11864]=(c[11864]|0)+1}R=is(d)|0;M=c[R>>2]|0;if((M|0)==1){U=+(c[R+8>>2]|0)}else if((M|0)==2){U=+h[R+8>>3]}else if((M|0)==3){U=+uz(c[R+8>>2]|0,0)}else{s=5425;break L7326}if((c[p>>2]|0)==3){uu(c[m>>2]|0);c[p>>2]=1}c[(c[12172]|0)+(((c[11864]|0)-1|0)*232&-1)>>2]=~~U;R=c[13898]|0;M=c[8272]|0;L7377:do{if((M|0)>(R|0)){z=c[1054]|0;if((a[z+(R*40&-1)|0]&1)==0){V=R;W=M;break}B=c[z+(R*40&-1)+36>>2]|0;A=z+(R*40&-1)+32|0;z=c[10036]|0;X=0;while(1){if((X|0)>=(B|0)){break}if((a[z+((c[A>>2]|0)+X|0)|0]|0)==(a[X+148464|0]|0)){X=X+1|0}else{V=R;W=M;break L7377}}if((X|0)!=1){V=R;W=M;break}c[13898]=R+1;A=is(f)|0;z=c[A>>2]|0;if((z|0)==1){Y=+(c[A+8>>2]|0)}else if((z|0)==2){Y=+h[A+8>>3]}else if((z|0)==3){Y=+uz(c[A+8>>2]|0,0)}else{s=5438;break L7326}if((c[r>>2]|0)==3){uu(c[o>>2]|0);c[r>>2]=1}c[(c[12172]|0)+(((c[11864]|0)-1|0)*232&-1)+4>>2]=~~Y;V=c[13898]|0;W=c[8272]|0}else{V=R;W=M}}while(0);if((W|0)<=(V|0)){s=5459;break L7326}M=c[1054]|0;if((a[M+(V*40&-1)|0]&1)==0){s=5460;break L7326}R=c[M+(V*40&-1)+36>>2]|0;C=M+(V*40&-1)+32|0;M=c[10036]|0;S=0;while(1){if((S|0)>=(R|0)){break}if((a[M+((c[C>>2]|0)+S|0)|0]|0)==(a[S+131272|0]|0)){S=S+1|0}else{s=5457;break L7326}}if((S|0)!=1){s=5458;break L7326}C=V+1|0;c[13898]=C;F=Q;G=C;H=W}}while(0);if((H|0)<=(G|0)){s=5465;break}w=c[1054]|0;if((a[w+(G*40&-1)|0]&1)==0){s=5466;break}C=c[w+(G*40&-1)+36>>2]|0;M=w+(G*40&-1)+32|0;R=c[10036]|0;A=0;while(1){if((A|0)>=(C|0)){break}if((a[R+((c[M>>2]|0)+A|0)|0]|0)==(a[A+183584|0]|0)){A=A+1|0}else{s=5467;break L7326}}if((A|0)==1){x=F;y=G;u=w}else{s=5468;break}}if((s|0)==5391){c[11880]=0;uf(c[13898]|0,216112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((s|0)==5457){uf(V,148760,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((s|0)==5458){uf(V,148760,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((s|0)==5460){uf(V,148760,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((s|0)==5438){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((s|0)==5459){uf(V,148760,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((s|0)==5466){i=b;return}else if((s|0)==5467){i=b;return}else if((s|0)==5468){i=b;return}else if((s|0)==5418){c[11880]=0;uf(c[13898]|0,216112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((s|0)==5425){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((s|0)==5398){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((s|0)==5465){i=b;return}}function eT(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0.0,X=0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0;e=i;i=i+80|0;f=e|0;g=e+24|0;j=e+48|0;k=e+72|0;l=c[13898]|0;m=c[8272]|0;if((m|0)<=(l|0)){n=c[10880]|0;uf(l,n,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}o=c[1054]|0;if((a[o+(l*40&-1)|0]&1)==0){n=c[10880]|0;uf(l,n,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}p=c[o+(l*40&-1)+36>>2]|0;q=o+(l*40&-1)+32|0;r=c[10036]|0;s=0;while(1){if((s|0)>=(p|0)){break}if((a[r+((c[q>>2]|0)+s|0)|0]|0)==(a[s+115e3|0]|0)){s=s+1|0}else{t=5660;break}}if((t|0)==5660){n=c[10880]|0;uf(l,n,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((s|0)!=1){n=c[10880]|0;uf(l,n,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}n=l+1|0;c[13898]=n;if((n|0)>=(m|0)){i=e;return}l=f|0;s=f+8|0;q=j|0;p=k|0;u=(b|0)==4?1:2;w=j+16|0;x=j;y=j+8|0;j=g|0;z=g+8|0;A=0;B=n;n=o;o=m;m=r;L7441:while(1){r=(a[n+(B*40&-1)|0]&1)==0;L7443:do{if(!r){C=c[n+(B*40&-1)+36>>2]|0;D=n+(B*40&-1)+32|0;E=0;while(1){if((E|0)>=(C|0)){break}if((a[m+((c[D>>2]|0)+E|0)|0]|0)==(a[E+103664|0]|0)){E=E+1|0}else{break L7443}}if((E|0)==1){t=5677;break L7441}}}while(0);if((b|0)==4|(b|0)==5|(b|0)==7){if((o|0)<=(B|0)|r){F=B;t=5651;break}D=c[n+(B*40&-1)+36>>2]|0;C=n+(B*40&-1)+32|0;G=0;while(1){if((G|0)>=(D|0)){break}if((a[m+((c[C>>2]|0)+G|0)|0]|0)==(a[G+199040|0]|0)){G=G+1|0}else{F=B;t=5652;break L7441}}if((G|0)!=1){F=B;t=5654;break}C=B+1|0;c[13898]=C;if((C|0)<(o|0)){H=q;I=1;J=0;K=C;L=o;M=n}else{F=C;t=5653;break}L7467:while(1){C=I;N=K;while(1){D=(a[M+(N*40&-1)|0]&1)==0;L7471:do{if(!D){r=c[M+(N*40&-1)+36>>2]|0;O=M+(N*40&-1)+32|0;P=c[10036]|0;Q=0;while(1){if((Q|0)>=(r|0)){break}if((a[P+((c[O>>2]|0)+Q|0)|0]|0)==(a[Q+103664|0]|0)){Q=Q+1|0}else{break L7471}}if((Q|0)==1){F=N;t=5656;break L7441}}}while(0);if(C){break}if(D|(L|0)<=(N|0)){t=5648;break L7441}R=c[M+(N*40&-1)+36>>2]|0;S=M+(N*40&-1)+32|0;T=c[10036]|0;O=0;while(1){if((O|0)>=(R|0)){break}if((a[T+((c[S>>2]|0)+O|0)|0]|0)==(a[O+148464|0]|0)){O=O+1|0}else{U=0;break L7467}}if((O|0)!=1){U=0;break L7467}D=N+1|0;c[13898]=D;if((D|0)<(L|0)){C=1;N=D}else{F=D;t=5655;break L7441}}V=J+1|0;if((V|0)>=4){t=5507;break L7441}C=is(g)|0;E=c[C>>2]|0;if((E|0)==1){W=+(c[C+8>>2]|0)}else if((E|0)==3){W=+uz(c[C+8>>2]|0,0)}else if((E|0)==2){W=+h[C+8>>3]}else{t=5502;break L7441}if((c[j>>2]|0)==3){uu(c[z>>2]|0);c[j>>2]=1}h[H>>3]=W;C=c[13898]|0;E=c[8272]|0;if((C|0)>=(E|0)){F=C;t=5657;break L7441}H=H+8|0;I=0;J=V;K=C;L=E;M=c[1054]|0}while(1){if((U|0)>=(R|0)){break}if((a[T+((c[S>>2]|0)+U|0)|0]|0)==(a[U+131272|0]|0)){U=U+1|0}else{t=5649;break L7441}}if((U|0)!=1){t=5647;break}G=N+1|0;c[13898]=G;if((J|0)==0){F=G;t=5650;break}else{X=J}}else if((b|0)==3|(b|0)==2){X=1}else{G=is(f)|0;E=c[G>>2]|0;if((E|0)==2){Y=+h[G+8>>3]}else if((E|0)==3){Y=+uz(c[G+8>>2]|0,0)}else if((E|0)==1){Y=+(c[G+8>>2]|0)}else{t=5522;break}if((c[l>>2]|0)==3){uu(c[s>>2]|0);c[l>>2]=1}h[q>>3]=Y;X=1}if((A|0)>=(c[11864]|0)){t=5528;break}do{if((b|0)==7){if((X|0)!=3){t=5615;break L7441}Z=+h[q>>3];_=+h[y>>3];$=+h[w>>3];if(Z*Z+_*_+$*$<2.220446049250313e-14){t=5617;break L7441}G=(c[12172]|0)+(A*232&-1)+88|0;c[G>>2]=c[x>>2];c[G+4>>2]=c[x+4>>2];c[G+8>>2]=c[x+8>>2];c[G+12>>2]=c[x+12>>2];c[G+16>>2]=c[x+16>>2];c[G+20>>2]=c[x+20>>2]}else if((b|0)==2){aa=c[13898]|0;G=c[1054]|0;E=c[G+(aa*40&-1)+36>>2]|0;C=(E|0)>3?3:E;E=c[10036]|0;D=c[G+(aa*40&-1)+32>>2]|0;G=0;while(1){P=G+1|0;a[k+G|0]=a[E+D|0]|0;if((P|0)==(C|0)){break}else{D=D+1|0;G=P}}a[k+C|0]=0;G=uA(p|0)|0;if((G|0)!=(b4(p|0,154840)|0)){t=5542;break L7441}if((cy(p|0,154104)|0)!=0){G=c[12172]|0;if((c[G+(A*232&-1)>>2]|0)==0){t=5546;break L7441}c[G+(A*232&-1)+12>>2]=d}if((cy(p|0,153744)|0)!=0){G=c[12172]|0;if((c[G+(A*232&-1)+4>>2]|0)==0){t=5550;break L7441}c[G+(A*232&-1)+16>>2]=d}if((cy(p|0,153360)|0)!=0){G=c[12172]|0;if((c[G+(A*232&-1)+8>>2]|0)==0){t=5554;break L7441}c[G+(A*232&-1)+20>>2]=d}c[13898]=(c[13898]|0)+1}else if((b|0)==1){G=c[12172]|0;if((c[G+(A*232&-1)>>2]|0)==0){t=5538;break L7441}$=+h[q>>3];if($==0.0){c[G+(A*232&-1)+12+(d<<2)>>2]=0;break}if($!=1.0){t=5537;break L7441}c[G+(A*232&-1)+12+(d<<2)>>2]=1}else if((b|0)==0){$=+h[q>>3];h[(c[12172]|0)+(A*232&-1)+24+(d<<3)>>3]=$;if($<=0.0){t=5531;break L7441}}else if((b|0)==3){G=c[12172]|0;if((c[G+(A*232&-1)>>2]|0)==0){if((c[G+(A*232&-1)+140>>2]|0)==0){t=5659;break L7441}}if((c[G+(A*232&-1)+4>>2]|0)==0){if((c[G+(A*232&-1)+144>>2]|0)==0){t=5658;break L7441}}do{if((c[G+(A*232&-1)+8>>2]|0)==0){if((c[G+(A*232&-1)+148>>2]|0)!=0){t=5564;break}D=c[13898]|0;E=(c[8272]|0)>(D|0);P=c[1054]|0;r=P+(D*40&-1)|0;ab=P+(D*40&-1)+36|0;ac=P+(D*40&-1)+32|0;D=c[10036]|0;P=c[12094]|0;if(!E){t=5668;break L7441}do{if((a[r]&1)==0){t=5629}else{ad=c[ab>>2]|0;ae=0;while(1){if((ae|0)>=(ad|0)){t=5580;break}if((a[D+((c[ac>>2]|0)+ae|0)|0]|0)==(a[P+ae|0]|0)){ae=ae+1|0}else{break}}if((t|0)==5580){t=0;if((a[P+ae|0]|0)==0){af=0;break}}if(E){t=5629}else{t=5666;break L7441}}}while(0);L7551:do{if((t|0)==5629){t=0;P=c[12098]|0;L7553:do{if((a[r]&1)!=0){O=c[ab>>2]|0;ad=0;while(1){if((ad|0)>=(O|0)){break}if((a[D+((c[ac>>2]|0)+ad|0)|0]|0)==(a[P+ad|0]|0)){ad=ad+1|0}else{break L7553}}if((a[P+ad|0]|0)==0){af=1;break L7551}}}while(0);P=c[12102]|0;if(!E){t=5669;break L7441}if((a[r]&1)!=0){ae=c[ab>>2]|0;O=0;while(1){if((O|0)>=(ae|0)){t=5639;break}if((a[D+((c[ac>>2]|0)+O|0)|0]|0)==(a[P+O|0]|0)){O=O+1|0}else{break}}if((t|0)==5639){t=0;if((a[P+O|0]|0)==0){af=2;break}}if(!E){t=5667;break L7441}}ae=c[12106]|0;if((a[r]&1)==0){t=5670;break L7441}Q=c[ab>>2]|0;ag=0;while(1){if((ag|0)>=(Q|0)){break}if((a[D+((c[ac>>2]|0)+ag|0)|0]|0)==(a[ae+ag|0]|0)){ag=ag+1|0}else{t=5665;break L7441}}if((a[ae+ag|0]|0)==0){af=3}else{t=5664;break L7441}}}while(0);ac=G+(A*232&-1)+112|0;D=48380+(af<<4)|0;c[ac>>2]=c[D>>2];c[ac+4>>2]=c[D+4>>2];c[ac+8>>2]=c[D+8>>2]}else{t=5564}}while(0);if((t|0)==5564){t=0;C=c[13898]|0;D=(c[8272]|0)>(C|0);ac=c[1054]|0;ab=ac+(C*40&-1)|0;r=ac+(C*40&-1)+36|0;E=ac+(C*40&-1)+32|0;C=c[10036]|0;ac=0;L7579:while(1){Q=c[48184+(ac<<4)>>2]|0;L7581:do{if(D){if((a[ab]&1)==0){break}O=c[r>>2]|0;P=0;while(1){if((P|0)>=(O|0)){break}if((a[C+((c[E>>2]|0)+P|0)|0]|0)==(a[Q+P|0]|0)){P=P+1|0}else{break L7581}}if((a[Q+P|0]|0)==0){t=5571;break L7579}}}while(0);Q=ac+1|0;if(Q>>>0<12){ac=Q}else{ah=Q;break}}if((t|0)==5571){t=0;E=G+(A*232&-1)+112|0;C=48188+(ac<<4)|0;c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];ah=ac}if((ah|0)==12){t=5574;break L7441}}C=G+(A*232&-1)+152|0;c[C>>2]=c[12148];c[C+4>>2]=c[48596>>2];c[C+8>>2]=c[48600>>2];c[13898]=(c[13898]|0)+1}else if((b|0)==4|(b|0)==5){c[(c[12172]|0)+(A*232&-1)+48>>2]=u;if((d|0)==2){if((X|0)!=3){t=5592;break L7441}}else if((d|0)==0){if((X|0)!=3){t=5594;break L7441}}else if((d|0)==1){if((X|0)!=2){t=5589;break L7441}h[w>>3]=0.0}else{t=5595;break L7441}C=(c[12172]|0)+(A*232&-1)+56|0;c[C>>2]=c[x>>2];c[C+4>>2]=c[x+4>>2];c[C+8>>2]=c[x+8>>2];c[C+12>>2]=c[x+12>>2];c[C+16>>2]=c[x+16>>2];c[C+20>>2]=c[x+20>>2]}else if((b|0)==8){$=+h[q>>3];c[(c[12172]|0)+(A*232&-1)+128>>2]=~~$;C=c[(c[12172]|0)+(A*232&-1)+128>>2]|0;if(+(C|0)!=$|(C|0)<0){t=5586;break L7441}}else if((b|0)==6){C=c[13898]|0;E=c[1054]|0;r=a[E+(C*40&-1)|0]|0;L7602:do{if((c[8272]|0)>(C|0)){if((r&1)==0){t=5604;break}ab=c[E+(C*40&-1)+36>>2]|0;D=E+(C*40&-1)+32|0;Q=c[10036]|0;O=0;while(1){if((O|0)>=(ab|0)){break}if((a[Q+((c[D>>2]|0)+O|0)|0]|0)==(a[O+99680|0]|0)){O=O+1|0}else{t=5604;break L7602}}if((O|0)!=2){t=5604;break}h[q>>3]=+h[q>>3]*3.141592653589793;c[13898]=C+1}else{t=5604}}while(0);L7610:do{if((t|0)==5604){t=0;G=c[E+(C*40&-1)+36>>2]|0;if(!((r&1)!=0&(G|0)>0)){break}ac=c[10036]|0;D=0;Q=0;ab=c[E+(C*40&-1)+32>>2]|0;while(1){if((a[D+123032|0]|0)==(a[ac+(D+ab|0)|0]|0)){ai=ab;aj=Q}else{if((D|0)!=1){break L7610}ai=ab-1|0;aj=1}ag=D+1|0;if((ag|0)<(aj+G|0)){D=ag;Q=aj;ab=ai}else{break}}if((aj|0)==0){if(!((D|0)==0|(D|0)==7)){break}}h[q>>3]=+h[q>>3]*.017453292519943295;c[13898]=C+1}}while(0);h[(c[12172]|0)+(A*232&-1)+80>>3]=+h[q>>3]}else{t=5619;break L7441}}while(0);C=c[13898]|0;E=c[8272]|0;if((E|0)<=(C|0)){t=5674;break}r=c[1054]|0;if((a[r+(C*40&-1)|0]&1)==0){t=5675;break}ab=c[r+(C*40&-1)+36>>2]|0;Q=r+(C*40&-1)+32|0;G=c[10036]|0;ac=0;while(1){if((ac|0)>=(ab|0)){break}if((a[G+((c[Q>>2]|0)+ac|0)|0]|0)==(a[ac+183584|0]|0)){ac=ac+1|0}else{t=5676;break L7441}}if((ac|0)!=1){t=5671;break}Q=C+1|0;c[13898]=Q;if((Q|0)<(E|0)){A=A+1|0;B=Q;n=r;o=E;m=G}else{t=5672;break}}if((t|0)==5649){uf(N,148888,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5650){uf(F,149968,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5651){uf(F,149968,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5652){uf(F,149968,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5542){uf(aa,154448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5546){uf(aa,158792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5528){uf(c[13898]|0,158272,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5574){uf(c[13898]|0,152504,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5592){uf(c[13898]|0,151520,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5615){uf(c[13898]|0,150440,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5531){uf((c[13898]|0)-2|0,156288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5554){uf(c[13898]|0,158792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5550){uf(c[13898]|0,158792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5647){uf(N,148888,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5648){uf(N,148888,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5594){uf(c[13898]|0,151168,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5595){uf(c[13898]|0,150960,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5666){ak=c[13898]|0;uf(ak,152080,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5667){ak=c[13898]|0;uf(ak,152080,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5668){ak=c[13898]|0;uf(ak,152080,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5669){ak=c[13898]|0;uf(ak,152080,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5537){uf((c[13898]|0)-1|0,155200,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5538){uf(c[13898]|0,158792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5589){uf(c[13898]|0,151648,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5653){uf(F,149968,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5654){uf(F,149968,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5655){uf(F,149968,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5656){uf(F,149968,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5657){uf(F,149968,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5617){uf(c[13898]|0,150304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5619){uf(-1,150112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5670){ak=c[13898]|0;uf(ak,152080,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5671){i=e;return}else if((t|0)==5672){i=e;return}else if((t|0)==5674){i=e;return}else if((t|0)==5675){i=e;return}else if((t|0)==5676){i=e;return}else if((t|0)==5586){uf(c[13898]|0,151928,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5502){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5522){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5507){uf(N-1|0,149640,(v=i,i=i+8|0,c[v>>2]=V,v)|0)}else if((t|0)==5664){ak=c[13898]|0;uf(ak,152080,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5665){ak=c[13898]|0;uf(ak,152080,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5658){al=c[13898]|0;uf(al,152856,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5659){al=c[13898]|0;uf(al,152856,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==5677){i=e;return}}function eU(d){d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;f=i;i=i+8|0;g=f|0;c[g>>2]=d;h=8;j=0;k=d;L7680:while(1){d=k;while(1){l=a[d]|0;if((l<<24>>24|0)==0|(l<<24>>24|0)==34|(l<<24>>24|0)==39){m=5681;break L7680}else if((l<<24>>24|0)==37){break}else if((l<<24>>24|0)!=32){m=5715;break L7680}l=d+1|0;c[g>>2]=l;d=l}l=d+1|0;c[g>>2]=l;n=a[l]|0;o=n<<24>>24==42;if(o){p=d+2|0;c[g>>2]=p;q=p;r=a[p]|0}else{q=l;r=n}if(((r<<24>>24)-48|0)>>>0<10){n=aE(q|0,g|0,10)|0;s=n;t=c[g>>2]|0}else{s=1;t=q}n=b[23918]|0;L7692:do{if(n<<16>>16==0){u=0;m=5710}else{l=c[11958]|0;p=0;while(1){w=b[l+(p<<4)+4>>1]|0;if(w<<16>>16==0){x=0}else{y=c[l+(p<<4)>>2]|0;z=0;while(1){A=c[y+(z<<2)>>2]|0;B=uA(A|0)|0;if((a_(t|0,A|0,B|0)|0)==0){A=t+B|0;if((aZ(163032,a[A]|0|0,5)|0)!=0){C=A;D=p;E=47832;F=l;break L7692}}A=z+1|0;if((A|0)<(w&65535|0)){z=A}else{x=A;break}}}z=p+1|0;if((z|0)<(n&65535|0)){p=z}else{u=x;m=5710;break}}}}while(0);L7704:do{if((m|0)==5710){m=0;n=b[23922]|0;if(n<<16>>16==0){G=0;H=u}else{d=c[11960]|0;p=0;while(1){l=b[d+(p<<4)+4>>1]|0;if(l<<16>>16==0){I=0}else{z=c[d+(p<<4)>>2]|0;w=0;while(1){y=c[z+(w<<2)>>2]|0;A=uA(y|0)|0;if((a_(t|0,y|0,A|0)|0)==0){y=t+A|0;if((aZ(163032,a[y]|0|0,5)|0)!=0){C=y;D=p;E=47840;F=d;break L7704}}y=w+1|0;if((y|0)<(l&65535|0)){w=y}else{I=y;break}}}w=p+1|0;if((w|0)<(n&65535|0)){p=w}else{G=w;H=I;break}}}if((G|0)!=(e[23922]|0|0)){h=h;j=j;k=t;continue L7680}if((H|0)==(e[(c[11960]|0)+(G-1<<4)+4>>1]|0|0)){m=5714;break L7680}else{h=h;j=j;k=t;continue L7680}}}while(0);c[g>>2]=C;if(o){p=c[11950]|0;if((p|0)==0){m=5706;break}n=aa(e[F+(D<<4)+12>>1]|0,s);d=p+(j*12&-1)|0;c[d>>2]=n+(c[d>>2]|0);h=h;j=j;k=C;continue}if((s|0)>0){J=j;K=0}else{h=h;j=j;k=C;continue}while(1){L=J+1|0;d=J+2|0;if((d|0)<=0){m=5697;break L7680}n=c[11950]|0;if((c[11884]|0)<(d|0)){p=db(n,d*12&-1,215112)|0;c[11950]=p;c[11884]=d;M=p}else{M=n}c[M+(L*12&-1)>>2]=0;n=c[(c[E>>2]|0)+(D<<4)+8>>2]|0;if((L|0)<=0){m=5701;break L7680}p=c[11950]|0;if((c[11884]|0)<(L|0)){d=db(p,L*12&-1,215112)|0;c[11950]=d;c[11884]=L;N=d}else{N=p}c[N+(J*12&-1)+4>>2]=n;b[(c[11950]|0)+(J*12&-1)+8>>1]=b[48036+(n<<4)>>1]|0;n=K+1|0;if((n|0)<(s|0)){J=L;K=n}else{break}}h=c[(c[E>>2]|0)+(D<<4)+8>>2]|0;j=L;k=C}if((m|0)==5706){uf(-1,162376,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((m|0)==5714){uf(c[13898]|0,160672,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((m|0)==5715){uf(c[13898]|0,159280,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((m|0)==5701){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=215616,v)|0)}else if((m|0)==5697){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=215616,v)|0)}else if((m|0)==5681){if((j|0)>=(c[11876]|0)){O=j;c[11876]=O;i=f;return}C=48036+(h<<4)|0;k=j;while(1){j=k+1|0;if((j|0)<=0){m=5717;break}L=c[11950]|0;if((c[11884]|0)<(j|0)){D=db(L,j*12&-1,215112)|0;c[11950]=D;c[11884]=j;P=D}else{P=L}c[P+(k*12&-1)>>2]=0;if((k|0)<=0){m=5721;break}L=c[11950]|0;if((c[11884]|0)<(k|0)){D=db(L,k*12&-1,215112)|0;c[11950]=D;c[11884]=k;Q=D}else{Q=L}L=k-1|0;c[Q+(L*12&-1)>>2]=0;D=c[11950]|0;if((c[11884]|0)<(k|0)){E=db(D,k*12&-1,215112)|0;c[11950]=E;c[11884]=k;R=E}else{R=D}c[R+(L*12&-1)+4>>2]=h;b[(c[11950]|0)+(L*12&-1)+8>>1]=b[C>>1]|0;if((j|0)<(c[11876]|0)){k=j}else{O=j;m=5735;break}}if((m|0)==5717){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=215616,v)|0)}else if((m|0)==5721){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=215616,v)|0)}else if((m|0)==5735){c[11876]=O;i=f;return}}}function eV(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0,R=0.0,S=0.0;b=i;do{if(a[34104]|0){if((a[37400]&1)==0){break}d=c[m>>2]|0;aI(144664,24,1,d|0)}}while(0);d=c[11854]|0;if((d|0)==1){e=5741}else if((d|0)==0){if((a6(c[8802]|0,c[8716]|0,c[12892]|0)|0)==0){f=0;i=b;return f|0}if(a[34104]|0){c[9354]=(c[9354]|0)+1;g=0}else{g=0}while(1){j=c[8802]|0;k=(uA(j+g|0)|0)+g|0;if((k|0)>0){l=j+(k-1|0)|0;if((a[l]|0)==10){e=5792;break}}n=c[8716]|0;if((n-k|0)>>>0<32){o=n<<1;c[8716]=o;p=db(j,o,84816)|0;c[8802]=p;q=p;r=c[8716]|0}else{q=j;r=n}if((a6(q+k|0,r-k|0,c[12892]|0)|0)==0){e=5796;break}else{g=k}}if((e|0)==5792){a[l]=0;f=c[8802]|0;i=b;return f|0}else if((e|0)==5796){f=c[8802]|0;i=b;return f|0}}else{s=d}if((e|0)==5741){e=c[11852]|0;d=c[6352]|0;if((e|0)>=(d|0)){f=0;i=b;return f|0}if((e|0)==0){if((a[32936]&1)!=0){uf(-1,144512,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}if((a[30528]&1)!=0){uf(-1,144512,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}if(+h[8256]==-8.988465674311579e+307){h[8256]=10.0}if(+h[8255]==8.988465674311579e+307){h[8255]=-10.0}l=c[200]|0;t=+h[64664+(l*688&-1)>>3];h[5960]=t;u=+h[64672+(l*688&-1)>>3];h[5961]=u;g=a[64788+(l*688&-1)|0]|0;do{if((g&1)==0){w=u;x=t}else{if(t>0.0&u>0.0){y=+_(+t);z=+h[64800+(l*688&-1)>>3];A=y/z;h[5960]=A;y=+_(+u)/z;h[5961]=y;w=y;x=A;break}else{uf(-1,218096,(v=i,i=i+8|0,c[v>>2]=56832+(l*24&-1),v)|0);return 0}}}while(0);u=(w-x)/+(d-1|0);h[5959]=u;B=x;C=u;D=l;E=g}else{g=c[200]|0;B=+h[5960];C=+h[5959];D=g;E=a[64788+(g*688&-1)|0]|0}u=B+ +(e|0)*C;if((E&1)==0){F=u}else{F=+Z(+(u*+h[64800+(D*688&-1)>>3]))}D=c[8802]|0;be(D|0,170912,(v=i,i=i+8|0,h[v>>3]=F,v)|0);c[11852]=(c[11852]|0)+1;s=c[11854]|0}if((s|0)==2){s=c[11852]|0;if((s|0)>=(c[11926]|0)&(s|0)>0){c[11852]=0;D=(c[11850]|0)+1|0;c[11850]=D;f=(D|0)<(c[11924]|0)?179864:0;i=b;return f|0}D=c[11850]|0;if((D|0)==0){if((c[6352]|0)<2|(c[6350]|0)<2|(c[9344]|0)<2|(c[9342]|0)<2){uf(-1,138240,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}dc(2,145296);dc(1,143440);F=+h[8255];E=a[66164]|0;do{if((E&1)==0){h[5957]=F;G=+h[8256];H=F}else{if(F<=0.0){uk(210984,(v=i,i=i+24|0,c[v>>2]=141960,c[v+8>>2]=56880,h[v+16>>3]=F,v)|0);return 0}u=+_(+F);C=+h[8272];B=u/C;h[5957]=B;u=+h[8256];if(u>0.0){G=+_(+u)/C;H=B;break}else{uk(210984,(v=i,i=i+24|0,c[v>>2]=141960,c[v+8>>2]=56880,h[v+16>>3]=u,v)|0);return 0}}}while(0);h[5958]=G;F=+h[8169];do{if((a[65476]&1)==0){h[5953]=F;I=+h[8170];J=F}else{if(F<=0.0){uk(210984,(v=i,i=i+24|0,c[v>>2]=140304,c[v+8>>2]=56856,h[v+16>>3]=F,v)|0);return 0}u=+_(+F);B=+h[8186];C=u/B;h[5953]=C;u=+h[8170];if(u>0.0){I=+_(+u)/B;J=C;break}else{uk(210984,(v=i,i=i+24|0,c[v>>2]=140304,c[v+8>>2]=56856,h[v+16>>3]=u,v)|0);return 0}}}while(0);h[5954]=I;e=(a[38984]&1)==0?c[6352]|0:c[9344]|0;F=(G-H)/+(e-1|0);h[5956]=F;c[11926]=e;e=c[9342]|0;G=(I-J)/+(e-1|0);h[5955]=G;c[11924]=e;K=c[11852]|0;L=c[11850]|0;M=H;N=F;O=I;P=G;Q=E}else{K=s;L=D;M=+h[5957];N=+h[5956];O=+h[5954];P=+h[5955];Q=a[66164]|0}G=M+N*+(K|0);N=O-P*+(L|0);L=c[8802]|0;if((Q&1)==0){R=G}else{R=+Z(+(G*+h[8272]))}if((a[65476]&1)==0){S=N}else{S=+Z(+(N*+h[8186]))}be(L|0,143424,(v=i,i=i+16|0,h[v>>3]=R,h[v+8>>3]=S,v)|0);c[11852]=(c[11852]|0)+1}f=c[8802]|0;i=b;return f|0}function eW(a){a=a|0;c[9340]=c[a>>2];return}function eX(b){b=b|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;e=i;i=i+16|0;f=e|0;g=e+8|0;uE(47056,0,28);c[11874]=0;if((a[b]|0)==0){j=0;i=e;return j|0}else{k=b;l=0}while(1){b=c[11882]|0;do{if((b|0)<=(l|0)){m=(b|0)<20?b+20|0:b<<1;n=db(c[11952]|0,m*24&-1,180032)|0;c[11952]=n;o=c[11882]|0;if((o|0)>=(m|0)){break}h[n+(o*24&-1)>>3]=0.0;c[n+(o*24&-1)+16>>2]=0;o=(c[11882]|0)+1|0;c[11882]=o;if((o|0)<(m|0)){p=o}else{break}do{o=c[11952]|0;h[o+(p*24&-1)>>3]=0.0;c[o+(p*24&-1)+16>>2]=0;p=(c[11882]|0)+1|0;c[11882]=p;}while((p|0)<(m|0))}}while(0);c[(c[11952]|0)+((c[11874]|0)*24&-1)+12>>2]=k;b=c[11874]|0;do{if((b|0)==((c[262]|0)-1|0)){c[11764]=k;if((c[263]|0)!=1){q=b;break}c[(c[11952]|0)+(b*24&-1)+8>>2]=1;q=c[11874]|0}else{q=b}}while(0);do{if((q|0)==((c[265]|0)-1|0)){c[11765]=k;if((c[266]|0)!=1){r=q;break}c[(c[11952]|0)+(q*24&-1)+8>>2]=1;r=c[11874]|0}else{r=q}}while(0);do{if((r|0)==((c[268]|0)-1|0)){c[11766]=k;if((c[269]|0)!=1){s=r;break}c[(c[11952]|0)+(r*24&-1)+8>>2]=1;s=c[11874]|0}else{s=r}}while(0);do{if((s|0)==((c[271]|0)-1|0)){c[11767]=k;if((c[272]|0)!=1){t=s;break}c[(c[11952]|0)+(s*24&-1)+8>>2]=1;t=c[11874]|0}else{t=s}}while(0);do{if((t|0)==((c[274]|0)-1|0)){c[11768]=k;if((c[275]|0)!=1){u=t;break}c[(c[11952]|0)+(t*24&-1)+8>>2]=1;u=c[11874]|0}else{u=t}}while(0);do{if((u|0)==((c[277]|0)-1|0)){c[11769]=k;if((c[278]|0)!=1){v=u;break}c[(c[11952]|0)+(u*24&-1)+8>>2]=1;v=c[11874]|0}else{v=u}}while(0);do{if((v|0)==((c[280]|0)-1|0)){c[11770]=k;if((c[281]|0)!=1){break}c[(c[11952]|0)+(v*24&-1)+8>>2]=1}}while(0);b=a[k]|0;if(b<<24>>24!=34|(a[47120]|0)==0){w=k;x=0;y=b}else{b=k+1|0;c[(c[11952]|0)+((c[11874]|0)*24&-1)+12>>2]=b;w=b;x=1;y=a[b]|0}L7903:do{if(y<<24>>24==34){c[(c[11952]|0)+((c[11874]|0)*24&-1)+8>>2]=-5;c[(c[11952]|0)+((c[11874]|0)*24&-1)+8>>2]=-8;c[11874]=(c[11874]|0)+1;if(x){z=w}else{A=w;B=5850}}else{b=c[8528]|0;do{if((b|0)!=0){m=uA(b|0)|0;if((a_(w|0,b|0,m|0)|0)!=0){break}o=w+m|0;if((aM(d[o]|0|0)|0)==0){if((a[o]|0)!=0){break}}c[(c[11952]|0)+((c[11874]|0)*24&-1)+8>>2]=-5;C=+uz(133568,0);o=c[11874]|0;h[(c[11952]|0)+(o*24&-1)>>3]=C;c[11874]=o+1;if(x){A=w;B=5850;break L7903}else{z=w;break L7903}}}while(0);b=(c[11874]|0)+1|0;o=c[11870]|0;L7912:do{if((o|0)==0|a[43464]^1){B=5835}else{do{if((o|0)>0){if((c[262]|0)==(b|0)){B=5835;break L7912}if((o|0)<=1){D=w;break}if((c[265]|0)==(b|0)){B=5835;break L7912}if((o|0)<=2){D=w;break}if((c[268]|0)==(b|0)){B=5835;break L7912}if((o|0)<=3){D=w;break}if((c[271]|0)==(b|0)){B=5835;break L7912}if((o|0)<=4){D=w;break}if((c[274]|0)==(b|0)|(o|0)>5){B=5835;break L7912}else{D=w}}else{D=w}}while(0);while(1){m=(aM(d[D]|0|0)|0)!=0;E=a[D]|0;F=a[47120]|0;G=E<<24>>24!=F<<24>>24;if(!(m&G)){break}D=D+1|0}m=E<<24>>24==0?0:G&1;if(F<<24>>24==0|x^1){H=D;I=x;J=E}else{n=D;while(1){K=n+1|0;L=a[K]|0;if((L<<24>>24|0)==0|(L<<24>>24|0)==34){H=K;I=0;J=L;break}else{n=K}}}n=H;K=J;while(1){if((aM(K&255|0)|0)!=0){M=n;N=I;O=m;P=0;break L7912}L=a[n]|0;Q=n+1|0;if(L<<24>>24==0|L<<24>>24==(a[47120]|0)){M=n;N=I;O=m;P=0;break L7912}n=Q;K=a[Q]|0}}}while(0);if((B|0)==5835){B=0;C=+uz(w,f);h[(c[11952]|0)+((c[11874]|0)*24&-1)>>3]=C;o=c[f>>2]|0;M=w;N=x;O=(o|0)!=(w|0)&1;P=o-w|0}do{if((a[47712]&1)!=0&(O|0)==1){o=M+P|0;b=a[o]|0;if(!((b<<24>>24|0)==100|(b<<24>>24|0)==68|(b<<24>>24|0)==113|(b<<24>>24|0)==81)){R=1;break}a[o]=101;C=+uz(M,g);h[(c[11952]|0)+((c[11874]|0)*24&-1)>>3]=C;K=(c[g>>2]|0)!=(M|0)&1;a[o]=b;R=K}else{R=O}}while(0);c[(c[11952]|0)+((c[11874]|0)*24&-1)+8>>2]=(R|0)==1&1;K=(cg(+(+h[(c[11952]|0)+((c[11874]|0)*24&-1)>>3]))|0)==0;b=c[11874]|0;if(K){c[(c[11952]|0)+(b*24&-1)+8>>2]=0;c[11874]=(c[11874]|0)+1;if(N){A=M;B=5850;break}else{z=M;break}}else{c[11874]=b+1;if(N){A=M;B=5850;break}else{z=M;break}}}}while(0);if((B|0)==5850){while(1){B=0;b=A+1|0;K=a[b]|0;if((K<<24>>24|0)==0|(K<<24>>24|0)==34){z=b;break}else{A=b;B=5850}}}b=a[47120]|0;L7951:do{if(b<<24>>24==0){K=z;while(1){if((aM(d[K]|0|0)|0)!=0){S=K;break}if((a[K]|0)==0){S=K;break}K=K+1|0}while(1){if((aM(d[S]|0|0)|0)==0){T=S;break L7951}S=S+1|0}}else{K=z;while(1){U=a[K]|0;if(!(U<<24>>24!=0&U<<24>>24!=b<<24>>24)){break}K=K+1|0}if(U<<24>>24==b<<24>>24){V=K}else{T=K;break}while(1){o=V+1|0;n=a[o]|0;if(n<<24>>24==0){T=o;break L7951}if((aM(n&255|0)|0)==0){T=o;break L7951}if((a[o]|0)==(a[47120]|0)){T=o;break}else{V=o}}}}while(0);b=c[11874]|0;if((a[T]|0)==0){j=b;break}else{k=T;l=b}}i=e;return j|0}function eY(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;d=i;i=i+24|0;e=d|0;f=(c[13898]|0)+2|0;c[13898]=f;g=c[1054]|0;L7970:do{if((a[g+(f*40&-1)|0]&1)!=0){j=c[10810]|0;L7972:do{if((j|0)!=0){k=(c[8272]|0)>(f|0);l=g+(f*40&-1)+36|0;m=g+(f*40&-1)+32|0;n=c[10036]|0;o=j;L7974:while(1){p=c[o+4>>2]|0;L7976:do{if(k){q=c[l>>2]|0;r=0;while(1){if((r|0)>=(q|0)){break}if((a[n+((c[m>>2]|0)+r|0)|0]|0)==(a[p+r|0]|0)){r=r+1|0}else{break L7976}}if((a[p+r|0]|0)==0){break L7974}}}while(0);p=c[o>>2]|0;if((p|0)==0){break L7972}else{o=p}}if((a[o+8|0]&1)!=0){break}if((c[o+16>>2]|0)==1){break L7970}}}while(0);it();j=c[18070]|0;m=db(j,c[j>>2]<<5|8,105624)|0;c[18070]=0;j=c[11870]|0;n=c[11872]|0;c[1056+((n+j|0)*12&-1)>>2]=m;a[43464]=0;s=1;t=c[13898]|0;u=j;w=n;x=t+1|0;c[13898]=x;y=w+u|0;z=1052+(y*12&-1)|0;c[z>>2]=b;A=1048+(y*12&-1)|0;c[A>>2]=s;B=w+1|0;c[11872]=B;i=d;return}}while(0);f=is(e)|0;g=c[f>>2]|0;if((g|0)==3){C=+uz(c[f+8>>2]|0,0)}else if((g|0)==2){C=+h[f+8>>3]}else if((g|0)==1){C=+(c[f+8>>2]|0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e|0;if((c[f>>2]|0)==3){uu(c[e+8>>2]|0);c[f>>2]=1}f=~~C;e=c[11870]|0;g=c[11872]|0;c[1056+((g+e|0)*12&-1)>>2]=0;n=c[13898]|0;if((f|0)<1){uf(n,140472,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{s=f;t=n;u=e;w=g;x=t+1|0;c[13898]=x;y=w+u|0;z=1052+(y*12&-1)|0;c[z>>2]=b;A=1048+(y*12&-1)|0;c[A>>2]=s;B=w+1|0;c[11872]=B;i=d;return}}function eZ(a){a=a|0;var b=0;a=c[6354]|0;if((c[14296+(a*24&-1)>>2]|0)==1){b=14304+(a*24&-1)|0;c[b>>2]=(c[b>>2]|0)!=0&1;i=i;return}else{uf(-1,207704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function e_(a){a=a|0;var b=0,d=0;b=i;d=c[6354]|0;if((c[14296+(d*24&-1)>>2]|0)!=1){uf(-1,207704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((c[14304+(d*24&-1)>>2]|0)==0){c[9340]=c[a>>2];i=b;return}if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;i=b;return}function e$(a){a=a|0;var b=0,d=0;b=i;d=c[6354]|0;if((c[14296+(d*24&-1)>>2]|0)!=1){uf(-1,207704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((c[14304+(d*24&-1)>>2]|0)!=0){c[9340]=c[a>>2];i=b;return}if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;i=b;return}function e0(a){a=a|0;var b=0,d=0;b=i;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;if((c[14296+(d*24&-1)>>2]|0)!=1){uf(-1,207704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((c[14304+(d*24&-1)>>2]|0)!=0){i=b;return}c[9340]=c[a>>2];i=b;return}function e1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;if((a|0)==0){return}b=a|0;if((c[b>>2]|0)>0){d=0;do{e=a+8+(d<<5)|0;f=c[e>>2]|0;do{if((f|0)==1|(f|0)==31){g=a+8+(d<<5)+8|0;if((c[g>>2]|0)!=3){h=f;break}uu(c[a+8+(d<<5)+16>>2]|0);c[g>>2]=1;h=c[e>>2]|0}else{h=f}}while(0);if((h|0)==8){f=a+8+(d<<5)+8|0;e1(c[(c[f>>2]|0)+8>>2]|0);uu(c[f>>2]|0)}d=d+1|0;}while((d|0)<(c[b>>2]|0))}uu(a);return}function e2(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=c[10810]|0;if((e|0)==0){return}else{f=e}L8058:while(1){e=c[f+4>>2]|0;do{if(d){if((a_(b|0,e|0,uA(b|0)|0)|0)!=0){break}a[f+8|0]=1;g=f+16|0;if((c[g>>2]|0)!=3){break}uu(c[f+24>>2]|0);c[g>>2]=1}else{if((aY(b|0,e|0)|0)==0){break L8058}}}while(0);e=c[f>>2]|0;if((e|0)==0){h=5965;break}else{f=e}}if((h|0)==5965){return}a[f+8|0]=1;h=f+16|0;if((c[h>>2]|0)!=3){return}uu(c[f+24>>2]|0);c[h>>2]=1;return}function e3(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=e6(b)|0;if((e|0)==0){return}b=e+8|0;do{if((a[b]&1)==0){if((aY(c[e+24>>2]|0,d|0)|0)==0){return}f=e+16|0;if((c[f>>2]|0)!=3){break}uu(c[e+24>>2]|0);c[f>>2]=1}else{a[b]=0}}while(0);if((d|0)==0){g=0}else{g=bP(d|0)|0}c[e+16>>2]=3;c[e+24>>2]=g;return}function e4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,t=0.0;e=i;f=1;g=0;j=i;i=i+168|0;c[j>>2]=0;while(1)switch(f|0){case 1:a[1960]=0;k=al(4)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}r=s=0;c[k>>2]=0;c[6354]=-1;if((a[43504]&1)==0){f=3;break}else{f=2;break};case 2:if((a[47472]&1)==0){f=3;break}else{f=5;break};case 3:l=uL(42120,f,j)|0;f=27;break;case 27:if((l|0)==0){f=4;break}else{f=26;break};case 4:av(2,8,136);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}r=s=0;f=5;break;case 5:n=c[9340]|0;o=0;f=6;break;case 6:if((o|0)<(c[b>>2]|0)){f=7;break}else{f=9;break};case 7:k=c[b+8+(o<<5)>>2]|0;c[9340]=1;am(c[41164+(k<<3)>>2]|0,b+8+(o<<5)+8|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}r=s=0;p=c[9340]|0;if((k-37|0)>>>0<4|(p|0)==1){o=p+o|0;f=6;break}else{f=8;break};case 8:ar(6,-1|0,113648,(v=i,i=i+8|0,c[v>>2]=206200,v)|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}r=s=0;case 9:c[9340]=n;if((a[43504]&1)==0){f=11;break}else{f=10;break};case 10:if((a[47472]&1)==0){f=11;break}else{f=12;break};case 11:av(2,8,0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}r=s=0;f=12;break;case 12:p=al(4)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}r=s=0;if((c[p>>2]|0)==33){f=14;break}else{f=13;break};case 13:p=al(4)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}r=s=0;if((c[p>>2]|0)==34){f=14;break}else{f=15;break};case 14:a[1960]=1;f=26;break;case 15:if((a[1960]&1)==0){f=16;break}else{f=26;break};case 16:q=c[6354]|0;if((q|0)<0){f=17;break}else{f=18;break};case 17:ar(6,-1|0,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}r=s=0;case 18:c[6354]=q-1;p=d;k=14296+(q*24&-1)|0;c[p>>2]=c[k>>2];c[p+4>>2]=c[k+4>>2];c[p+8>>2]=c[k+8>>2];c[p+12>>2]=c[k+12>>2];c[p+16>>2]=c[k+16>>2];c[p+20>>2]=c[k+20>>2];if((q|0)==0){f=20;break}else{f=19;break};case 19:au(4,209896,98,1,c[m>>2]|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}r=s=0;f=20;break;case 20:k=c[d>>2]|0;if((k|0)==1){f=21;break}else if((k|0)==2){f=22;break}else if((k|0)==3){t=0.0;f=24;break}else{f=23;break};case 21:t=+(c[d+8>>2]|0);f=24;break;case 22:t=+h[d+8>>3];f=24;break;case 23:ar(6,-1|0,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}r=s=0;case 24:if(t>8.988465674311579e+307|t<-8.988465674311579e+307){f=25;break}else{f=26;break};case 25:a[1960]=1;f=26;break;case 26:i=e;return;case-1:if((g|0)==3){l=s;f=27}r=s=0;break}}function e5(b){b=b|0;aV(8,136);a[1960]=1;cv(42120|0,1)}function e6(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;e=43240;while(1){f=c[e>>2]|0;if((f|0)==0){break}if((aY(b|0,c[f+4>>2]|0)|0)==0){g=f;h=5992;break}else{e=f|0}}if((h|0)==5992){i=d;return g|0}h=ut(40)|0;do{if((h|0)==0){gk();f=ut(40)|0;if((f|0)!=0){j=f;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=213816,v)|0);return 0}else{j=h}}while(0);c[e>>2]=j;c[j>>2]=0;if((b|0)==0){k=0}else{k=bP(b|0)|0}c[(c[e>>2]|0)+4>>2]=k;a[(c[e>>2]|0)+8|0]=1;c[(c[e>>2]|0)+16>>2]=0;g=c[e>>2]|0;i=d;return g|0}function e7(b){b=b|0;var d=0,e=0,f=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0;d=i;if((b|0)==3|(b|0)==2|(b|0)==0){e=6024}else if((b|0)==1){e8(2);e8(1);e8(6);e8(5);e8(0);e8(3);e8(8);e8(9);e8(10);f=+h[8685];j=e6(205392)|0;if((j|0)!=0){a[j+8|0]=0;c[j+16>>2]=2;h[j+24>>3]=f;h[j+32>>3]=0.0}f=+h[8701];j=e6(204792)|0;if((j|0)!=0){a[j+8|0]=0;c[j+16>>2]=2;h[j+24>>3]=f;h[j+32>>3]=0.0}j=c[16536]|0;f=+h[(c[3524]|0)+176>>3];k=e6(187496)|0;if((k|0)!=0){a[k+8|0]=0;c[k+16>>2]=1;c[k+24>>2]=~~(+(j|0)/f)}j=c[16537]|0;f=+h[(c[3524]|0)+176>>3];k=e6(186968)|0;if((k|0)!=0){a[k+8|0]=0;c[k+16>>2]=1;c[k+24>>2]=~~(+(j|0)/f)}j=c[16364]|0;f=+h[(c[3524]|0)+176>>3];k=e6(186448)|0;if((k|0)!=0){a[k+8|0]=0;c[k+16>>2]=1;c[k+24>>2]=~~(+(j|0)/f)}j=c[16365]|0;f=+h[(c[3524]|0)+176>>3];k=e6(185848)|0;if((k|0)!=0){a[k+8|0]=0;c[k+16>>2]=1;c[k+24>>2]=~~(+(j|0)/f)}j=c[13881]|0;k=e6(185384)|0;if((k|0)!=0){a[k+8|0]=0;c[k+16>>2]=1;c[k+24>>2]=j+1}j=c[13883]|0;k=e6(184936)|0;if((k|0)!=0){a[k+8|0]=0;c[k+16>>2]=1;c[k+24>>2]=j+1}j=a[37384]|0;k=e6(204536)|0;if((k|0)!=0){a[k+8|0]=0;c[k+16>>2]=1;c[k+24>>2]=(j&1^1)&255}j=a[37384]|0;k=e6(204264)|0;if((k|0)!=0){a[k+8|0]=0;c[k+16>>2]=1;c[k+24>>2]=j&1}j=c[5094]|0;k=e6(204008)|0;if((k|0)!=0){a[k+8|0]=0;c[k+16>>2]=1;c[k+24>>2]=(j|0)!=0&1}f=+g[3538];j=e6(196288)|0;if((j|0)!=0){a[j+8|0]=0;c[j+16>>2]=2;h[j+24>>3]=f;h[j+32>>3]=0.0}f=+g[3536];j=e6(195744)|0;if((j|0)!=0){a[j+8|0]=0;c[j+16>>2]=2;h[j+24>>3]=f;h[j+32>>3]=0.0}f=+g[3534];j=e6(148264)|0;if((j|0)!=0){a[j+8|0]=0;c[j+16>>2]=2;h[j+24>>3]=f;h[j+32>>3]=0.0}f=+g[3532];j=e6(148040)|0;if((j|0)==0){i=d;return}a[j+8|0]=0;c[j+16>>2]=2;h[j+24>>3]=f;h[j+32>>3]=0.0;i=d;return}do{if((e|0)==6024){j=c[3524]|0;L8156:do{if((j|0)==0){k=e6(202664)|0;if((k|0)==0){break}l=k+8|0;do{if((a[l]&1)==0){if((aY(c[k+24>>2]|0,225016)|0)==0){break L8156}m=k+16|0;if((c[m>>2]|0)!=3){n=m;break}uu(c[k+24>>2]|0);c[m>>2]=1;n=m}else{a[l]=0;n=k+16|0}}while(0);l=bP(225016)|0;c[n>>2]=3;c[k+24>>2]=l}else{e3(202664,c[j>>2]|0)}}while(0);j=e6(201560)|0;L8167:do{if((j|0)!=0){l=j+8|0;do{if((a[l]&1)==0){if((aY(c[j+24>>2]|0,13048)|0)==0){break L8167}m=j+16|0;if((c[m>>2]|0)!=3){o=m;break}uu(c[j+24>>2]|0);c[m>>2]=1;o=m}else{a[l]=0;o=j+16|0}}while(0);l=bP(13048)|0;c[o>>2]=3;c[j+24>>2]=l}}while(0);j=c[8244]|0;e3(200696,(j|0)!=0?j:179864);e3(199888,c[44936+(c[11252]<<2)>>2]|0);if((b|0)==3){p=43240}else if((b|0)==2){j=e6(199272)|0;if((j|0)==0){i=d;return}else{a[j+8|0]=0;c[j+16>>2]=1;c[j+24>>2]=1;break}}else{break}while(1){j=c[p>>2]|0;if((j|0)==0){e=6045;break}if((aY(198952,c[j+4>>2]|0)|0)==0){q=j;e=6049;break}else{p=j|0}}if((e|0)==6045){j=ut(40)|0;do{if((j|0)==0){gk();l=ut(40)|0;if((l|0)!=0){r=l;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=213816,v)|0)}else{r=j}}while(0);c[p>>2]=r;c[r>>2]=0;j=bP(198952)|0;c[(c[p>>2]|0)+4>>2]=j;a[(c[p>>2]|0)+8|0]=1;c[(c[p>>2]|0)+16>>2]=0;j=c[p>>2]|0;if((j|0)==0){s=43240}else{q=j;e=6049}}do{if((e|0)==6049){j=q+8|0;if((a[j]&1)==0){s=43240;break}a[j]=0;f=+uz(40152,0);c[q+16>>2]=2;h[q+24>>3]=f;h[q+32>>3]=0.0;s=43240}}while(0);while(1){j=c[s>>2]|0;if((j|0)==0){e=6053;break}if((aY(198528,c[j+4>>2]|0)|0)==0){t=j;e=6057;break}else{s=j|0}}if((e|0)==6053){j=ut(40)|0;do{if((j|0)==0){gk();l=ut(40)|0;if((l|0)!=0){u=l;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=213816,v)|0)}else{u=j}}while(0);c[s>>2]=u;c[u>>2]=0;j=bP(198528)|0;c[(c[s>>2]|0)+4>>2]=j;a[(c[s>>2]|0)+8|0]=1;c[(c[s>>2]|0)+16>>2]=0;j=c[s>>2]|0;if((j|0)==0){w=43240}else{t=j;e=6057}}L8202:do{if((e|0)==6057){if((a[t+8|0]&1)==0){w=43240;break}j=e6(198528)|0;if((j|0)==0){w=43240;break}l=j+8|0;do{if((a[l]&1)==0){if((aY(c[j+24>>2]|0,40160)|0)==0){w=43240;break L8202}k=j+16|0;if((c[k>>2]|0)!=3){x=k;break}uu(c[j+24>>2]|0);c[k>>2]=1;x=k}else{a[l]=0;x=j+16|0}}while(0);l=bP(40160)|0;c[x>>2]=3;c[j+24>>2]=l;w=43240}}while(0);while(1){l=c[w>>2]|0;if((l|0)==0){e=6067;break}if((aY(198248,c[l+4>>2]|0)|0)==0){y=l;e=6071;break}else{w=l|0}}if((e|0)==6067){l=ut(40)|0;do{if((l|0)==0){gk();k=ut(40)|0;if((k|0)!=0){z=k;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=213816,v)|0)}else{z=l}}while(0);c[w>>2]=z;c[z>>2]=0;l=bP(198248)|0;c[(c[w>>2]|0)+4>>2]=l;a[(c[w>>2]|0)+8|0]=1;c[(c[w>>2]|0)+16>>2]=0;l=c[w>>2]|0;if((l|0)!=0){y=l;e=6071}}do{if((e|0)==6071){if((a[y+8|0]&1)==0){break}e3(198248,c[13388]|0)}}while(0);l=e6(104120)|0;if((l|0)!=0){a[l+8|0]=0;c[l+16>>2]=1;c[l+24>>2]=0}l=e6(204536)|0;if((l|0)!=0){a[l+8|0]=0;c[l+16>>2]=1;c[l+24>>2]=0}l=e6(204264)|0;if((l|0)!=0){a[l+8|0]=0;c[l+16>>2]=1;c[l+24>>2]=0}l=lt()|0;e3(197288,l);uu(l);e3(199888,c[44936+(c[11252]<<2)>>2]|0);l=e6(196632)|0;if((l|0)!=0){a[l+8|0]=0;c[l+16>>2]=2;h[l+24>>3]=3.141592653589793;h[l+32>>3]=0.0}f=+uz(133568,0);l=e6(196016)|0;if((l|0)==0){break}a[l+8|0]=0;c[l+16>>2]=2;h[l+24>>3]=f;h[l+32>>3]=0.0}}while(0);L8239:do{if((b-3|0)>>>0<2){y=e6(199272)|0;if((y|0)!=0){a[y+8|0]=0;c[y+16>>2]=1;c[y+24>>2]=0}y=e6(137752)|0;if((y|0)==0){break}w=y+8|0;do{if((a[w]&1)==0){if((a[c[y+24>>2]|0]|0)==0){break L8239}z=y+16|0;if((c[z>>2]|0)!=3){A=z;break}uu(c[y+24>>2]|0);c[z>>2]=1;A=z}else{a[w]=0;A=y+16|0}}while(0);w=bP(179864)|0;c[A>>2]=3;c[y+24>>2]=w}}while(0);if((b|0)==5|(b|0)==3){e=6094}else if((b|0)!=6){i=d;return}do{if((e|0)==6094){A=ut(4096)|0;do{if((A|0)==0){gk();w=ut(4096)|0;if((w|0)!=0){B=w;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=193744,v)|0)}else{B=A}}while(0);bl(B|0,4096);e3(192848,B);uu(B);if((b|0)==6){break}i=d;return}}while(0);b=c[12900]|0;B=e6(191128)|0;if((B|0)==0){i=d;return}a[B+8|0]=0;c[B+16>>2]=1;c[B+24>>2]=b;i=d;return}function e8(b){b=b|0;var d=0,e=0,f=0.0,g=0.0,j=0.0,k=0.0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0;d=i;i=i+24|0;e=64788+(b*688&-1)|0;f=+h[64664+(b*688&-1)>>3];if((a[e]&1)==0){g=+h[64672+(b*688&-1)>>3];j=f}else{k=+h[64800+(b*688&-1)>>3];l=+Z(+(f*k));g=+Z(+(+h[64672+(b*688&-1)>>3]*k));j=l}m=(c[64656+(b*688&-1)>>2]&2|0)!=0&j>g;l=m?j:g;k=m?g:j;m=d|0;n=56832+(b*24&-1)|0;be(m|0,182200,(v=i,i=i+24|0,c[v>>2]=184544,c[v+8>>2]=n,c[v+16>>2]=184256,v)|0);o=a[m]|0;if(o<<24>>24!=0){p=m;q=o;do{a[p]=bC(q<<24>>24|0)&255;p=p+1|0;q=a[p]|0;}while(q<<24>>24!=0)}q=e6(m)|0;if((q|0)!=0){a[q+8|0]=0;c[q+16>>2]=2;h[q+24>>3]=k;h[q+32>>3]=0.0}be(m|0,182200,(v=i,i=i+24|0,c[v>>2]=184544,c[v+8>>2]=n,c[v+16>>2]=183776,v)|0);q=a[m]|0;if(q<<24>>24!=0){p=m;o=q;do{a[p]=bC(o<<24>>24|0)&255;p=p+1|0;o=a[p]|0;}while(o<<24>>24!=0)}o=e6(m)|0;if((o|0)!=0){a[o+8|0]=0;c[o+16>>2]=2;h[o+24>>3]=l;h[o+32>>3]=0.0}l=+h[64792+(b*688&-1)>>3];be(m|0,182200,(v=i,i=i+24|0,c[v>>2]=184544,c[v+8>>2]=n,c[v+16>>2]=183416,v)|0);o=a[m]|0;if(o<<24>>24!=0){p=m;q=o;do{a[p]=bC(q<<24>>24|0)&255;p=p+1|0;q=a[p]|0;}while(q<<24>>24!=0)}q=e6(m)|0;if((q|0)!=0){a[q+8|0]=0;c[q+16>>2]=2;h[q+24>>3]=l;h[q+32>>3]=0.0}if(b>>>0>=7){i=d;return}l=+h[64712+(b*688&-1)>>3];if((a[e]&1)==0){r=l}else{r=+Z(+(l*+h[64800+(b*688&-1)>>3]))}be(m|0,182200,(v=i,i=i+24|0,c[v>>2]=182880,c[v+8>>2]=n,c[v+16>>2]=184256,v)|0);q=a[m]|0;if(q<<24>>24!=0){p=m;o=q;do{a[p]=bC(o<<24>>24|0)&255;p=p+1|0;o=a[p]|0;}while(o<<24>>24!=0)}o=e6(m)|0;if((o|0)!=0){a[o+8|0]=0;c[o+16>>2]=2;h[o+24>>3]=r;h[o+32>>3]=0.0}r=+h[64720+(b*688&-1)>>3];if((a[e]&1)==0){s=r}else{s=+Z(+(r*+h[64800+(b*688&-1)>>3]))}be(m|0,182200,(v=i,i=i+24|0,c[v>>2]=182880,c[v+8>>2]=n,c[v+16>>2]=183776,v)|0);n=a[m]|0;if(n<<24>>24!=0){b=m;e=n;do{a[b]=bC(e<<24>>24|0)&255;b=b+1|0;e=a[b]|0;}while(e<<24>>24!=0)}e=e6(m)|0;if((e|0)==0){i=d;return}a[e+8|0]=0;c[e+16>>2]=2;h[e+24>>3]=s;h[e+32>>3]=0.0;i=d;return}function e9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=i;i=i+16|0;d=c[6354]|0;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}e=d+1|0;c[6354]=e;d=14296+(e*24&-1)|0;c[d>>2]=3;c[14304+(e*24&-1)>>2]=a;f=d+12|0;d=b|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];if((a|0)==0){g=e}else{e=bP(a|0)|0;a=c[6354]|0;c[14304+(a*24&-1)>>2]=e;g=a}if((g|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}a=g+1|0;c[6354]=a;g=14296+(a*24&-1)|0;c[g>>2]=1;c[14304+(a*24&-1)>>2]=-1;a=g+12|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];hb(0);d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else{c[6354]=d-1;i=b;return c[14304+(d*24&-1)>>2]|0}return 0}function fa(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;i=i+16|0;e=c[6354]|0;if((e|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}f=e+1|0;c[6354]=f;e=14296+(f*24&-1)|0;c[e>>2]=3;c[14304+(f*24&-1)>>2]=a;g=e+12|0;e=d|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];if((a|0)==0){h=f}else{f=bP(a|0)|0;a=c[6354]|0;c[14304+(a*24&-1)>>2]=f;h=a}if((h|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}a=h+1|0;c[6354]=a;h=14296+(a*24&-1)|0;c[h>>2]=1;c[14304+(a*24&-1)>>2]=b;b=h+12|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];hb(0);e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else{c[6354]=e-1;i=d;return c[14304+(e*24&-1)>>2]|0}return 0}function fb(){var b=0,d=0;uD(42280,101104,9);b=a8(42280,0)|0;while(1){d=b-1|0;if((a[d]|0)==10){b=d}else{break}}d=b;w=10;a[d]=w&255;w=w>>8;a[d+1|0]=w&255;aK(42280,c[m>>2]|0);d=b+1|0;w=10;a[d]=w&255;w=w>>8;a[d+1|0]=w&255;d=c[8762]|0;if((d|0)!=0){cf(d|0,146328,(v=i,i=i+8|0,c[v>>2]=42280,v)|0);d=c[8762]|0;az(d|0);c[8762]=0}d=c[10062]|0;if((d|0)!=0){e1(d);c[10062]=0}aV(2,4);aV(13,1);uf(-1,130168,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}function fc(d,e){d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0,O=0,P=0.0,Q=0,R=0.0,S=0,T=0,U=0;f=i;i=i+968|0;g=f|0;j=f+256|0;k=f+512|0;l=f+576|0;m=f+704|0;n=f+960|0;o=j|0;do{if((e|0)==0){p=6169}else{if((a[e]|0)==0){p=6169;break}q=m|0;uF(q|0,d|0,256);if((uA(d|0)|0)>>>0<256){r=e;break}a[m+255|0]=0;r=e}}while(0);do{if((p|0)==6169){e=m|0;uB(e|0,d|0);q=m+(uA(e|0)|0)|0;a[q]=a[214408]|0;a[q+1|0]=a[214409|0]|0;a[q+2|0]=a[214410|0]|0;a[q+3|0]=a[214411|0]|0;a[q+4|0]=a[214412|0]|0;if((b8(d|0,e|0)|0)==0){r=d;break}be(42289,213616,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=e,v)|0);fb()}}while(0);d=m|0;e=g|0;g=(uA(d|0)|0)-1|0;q=m+g|0;L8361:do{if((g|0)<0){s=q}else{m=q;while(1){t=a[m]|0;if((t<<24>>24|0)==92|(t<<24>>24|0)==47|(t<<24>>24|0)==58){s=m;break L8361}t=m-1|0;if(t>>>0<d>>>0){s=t;break}else{m=t}}}}while(0);uB(e|0,s+1|0);s=hA(d,193632)|0;if((s|0)==0){be(42289,101576,(v=i,i=i+8|0,c[v>>2]=d,v)|0);fb()}d=bF(r|0,137896)|0;if((d|0)==0){be(42289,89920,(v=i,i=i+8|0,c[v>>2]=r,v)|0);fb()}L8372:do{if((a6(o|0,256,s|0)|0)!=0){r=l|0;q=l;g=l+126|0;m=k|0;t=k+63|0;u=0;L8374:while(1){w=o;while(1){x=a[w]|0;if((x<<24>>24|0)==35|(x<<24>>24|0)==0){aK(o|0,d|0);if((a6(o|0,256,s|0)|0)==0){break L8372}else{w=o;continue}}else if((x<<24>>24|0)==32|(x<<24>>24|0)==9|(x<<24>>24|0)==10){w=w+1|0;continue}else{break}}w=a8(o|0,35)|0;if((w|0)==0){b[q>>1]=10;y=o}else{uF(r|0,w|0,127);if((uA(w|0)|0)>>>0>=127){a[g]=0}a[w]=0;y=o}while(1){w=a[y]|0;if((w<<24>>24|0)==10|(w<<24>>24|0)==0){z=0;A=u;B=o;break}else if(!((w<<24>>24|0)==32|(w<<24>>24|0)==9|(w<<24>>24|0)==61)){p=6190;break}y=y+1|0}if((p|0)==6190){p=0;w=cy(y|0,213208)|0;if((w|0)==0){C=y+(uA(y|0)|0)|0}else{C=w}w=a[C]|0;a[C]=0;z=y;A=w;B=C+1|0}w=a[z]|0;if(w<<24>>24!=0){x=z;D=w;do{if((bs(D&255|0)|0)==0){if((a[x]|0)!=95){p=6244;break L8374}}x=x+1|0;D=a[x]|0;}while(D<<24>>24!=0)}if((uA(z|0)|0)>>>0>50){p=6243;break}uF(m|0,z|0,64);if((uA(z|0)|0)>>>0>=64){a[t]=0}if(A<<24>>24==61){E=B}else{D=a8(B|0,61)|0;if((D|0)==0){p=6203;break}E=D+1|0}D=E;while(1){x=a[D]|0;if((x<<24>>24|0)==10|(x<<24>>24|0)==0){F=0;G=A;H=E;break}else if(!((x<<24>>24|0)==32|(x<<24>>24|0)==9|(x<<24>>24|0)==61)){p=6208;break}D=D+1|0}if((p|0)==6208){p=0;x=cy(D|0,213208)|0;if((x|0)==0){I=D+(uA(D|0)|0)|0}else{I=x}x=a[I]|0;a[I]=0;F=D;G=x;H=I+1|0}if((ca(F|0,148448,(v=i,i=i+8|0,c[v>>2]=n,v)|0)|0)==0){p=6212;break}else{J=H}while(1){x=a[J]|0;if((x<<24>>24|0)==10|(x<<24>>24|0)==0){K=G;break}else if(!((x<<24>>24|0)==32|(x<<24>>24|0)==9|(x<<24>>24|0)==61)){p=6215;break}J=J+1|0}if((p|0)==6215){p=0;D=cy(J|0,213208)|0;if((D|0)==0){L=J+(uA(J|0)|0)|0}else{L=D}D=a[L]|0;a[L]=0;if((J|0)==0){K=D}else{p=6218;break}}D=43240;while(1){M=c[D>>2]|0;if((M|0)==0){p=6221;break}if((aY(m|0,c[M+4>>2]|0)|0)==0){p=6223;break}else{D=M|0}}if((p|0)==6223){p=0;D=c[M+16>>2]|0;if((D|0)==1){N=+(c[M+24>>2]|0)}else if((D|0)==3){N=+uz(c[M+24>>2]|0,0)}else if((D|0)==2){N=+h[M+24>>3]}else{p=6227;break}h[n>>3]=N;if(N==0.0){O=43240;p=6229}else{P=N}}else if((p|0)==6221){p=0;h[n>>3]=0.0;O=43240;p=6229}if((p|0)==6229){while(1){p=0;Q=c[O>>2]|0;if((Q|0)==0){R=0.0;break}if((aY(m|0,c[Q+4>>2]|0)|0)==0){p=6231;break}else{O=Q|0;p=6229}}do{if((p|0)==6231){p=0;if((c[Q+16>>2]|0)!=1){R=0.0;break}R=+(c[Q+24>>2]|0)}}while(0);h[n>>3]=R;P=R}be(o|0,170912,(v=i,i=i+8|0,h[v>>3]=P,v)|0);do{if((a8(o|0,46)|0)==0){if((a8(o|0,101)|0)!=0){break}D=j+(uA(o|0)|0)|0;a[D]=a[119960]|0;a[D+1|0]=a[119961|0]|0;a[D+2|0]=a[119962|0]|0}}while(0);cf(d|0,209168,(v=i,i=i+24|0,c[v>>2]=m,c[v+8>>2]=o,c[v+16>>2]=r,v)|0);if((a6(o|0,256,s|0)|0)==0){break L8372}else{u=K}}if((p|0)==6243){S=az(d|0)|0;T=az(s|0)|0;U=be(42289,80408,(v=i,i=i+8|0,c[v>>2]=e,v)|0)|0;fb()}else if((p|0)==6203){az(d|0);az(s|0);be(42289,80408,(v=i,i=i+8|0,c[v>>2]=e,v)|0);fb()}else if((p|0)==6212){az(d|0);az(s|0);be(42289,80408,(v=i,i=i+8|0,c[v>>2]=e,v)|0);fb()}else if((p|0)==6244){S=az(d|0)|0;T=az(s|0)|0;U=be(42289,80408,(v=i,i=i+8|0,c[v>>2]=e,v)|0)|0;fb()}else if((p|0)==6227){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((p|0)==6218){az(d|0);az(s|0);be(42289,80408,(v=i,i=i+8|0,c[v>>2]=e,v)|0);fb()}}}while(0);if((az(d|0)|0)!=0){uD(42289,203968,24);fb()}if((az(s|0)|0)==0){i=f;return}else{uD(42289,203968,24);fb()}}function fd(){var b=0,e=0,f=0,g=0,j=0,k=0,l=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0,D=0.0,E=0.0,F=0,G=0.0,H=0,I=0.0,J=0.0,K=0.0,L=0,M=0.0,N=0.0,R=0.0,S=0,T=0.0,U=0.0,V=0.0,W=0,X=0.0,Y=0.0,Z=0.0,$=0.0,ab=0.0,ac=0.0,ad=0.0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0.0,aq=0,ar=0,as=0,at=0,au=0.0,av=0,aw=0.0,ax=0,ay=0,aA=0,aB=0,aC=0,aD=0,aE=0,aG=0,aH=0,aJ=0,aL=0,aM=0,aN=0,aO=0,aP=0,aR=0,aS=0,aU=0.0,aW=0,aX=0,aZ=0,a_=0,a$=0,a0=0,a2=0,a3=0,a4=0,a5=0,a7=0,a9=0,ba=0,bb=0.0,bc=0,bd=0,bf=0,bg=0,bh=0,bi=0,bj=0,bk=0,bl=0,bm=0,bn=0,bo=0,bp=0,bq=0,br=0,bt=0,bu=0,bv=0,bw=0,bx=0,by=0,bz=0,bB=0,bC=0.0,bE=0,bG=0.0,bH=0.0,bI=0.0,bK=0,bL=0.0,bM=0,bN=0.0,bQ=0,bR=0,bS=0.0,bT=0,bV=0.0,bW=0.0,bX=0.0,bY=0,bZ=0,b_=0,b$=0,b0=0,b1=0,b2=0,b3=0,b4=0,b5=0,b6=0.0;b=i;i=i+320|0;e=b|0;f=b+8|0;g=b+16|0;j=b+40|0;k=b+88|0;l=b+136|0;n=b+216|0;p=b+240|0;q=b+272|0;r=q;s=i;i=i+56|0;t=i;i=i+4|0;i=i+7>>3<<3;u=i;i=i+688|0;w=i;i=i+8|0;x=i;i=i+1025|0;i=i+7>>3<<3;uE(p|0,-1|0,28);y=(c[13898]|0)+1|0;c[13898]=y;z=c[16507]|0;c[16506]=z;if((z&3|0)==0){A=+h[8258];B=+h[8257];if(A<B){C=66056;D=A}else{E=B;F=6250}}else{E=+h[8257];F=6250}if((F|0)==6250){C=66064;D=E}h[8255]=D;h[8256]=+h[C>>3];if((a[66164]&1)==0){G=0.0}else{G=+_(+(+h[8271]))}h[8272]=G;h[8261]=8.988465674311579e+307;h[8262]=-8.988465674311579e+307;C=c[16335]|0;c[16334]=C;if((C&3|0)==0){G=+h[8172];D=+h[8171];if(G<D){H=65368;I=G}else{J=D;F=6256}}else{J=+h[8171];F=6256}if((F|0)==6256){H=65376;I=J}h[8169]=I;h[8170]=+h[H>>3];if((a[65476]&1)==0){K=0.0}else{K=+_(+(+h[8185]))}h[8186]=K;h[8175]=8.988465674311579e+307;h[8176]=-8.988465674311579e+307;H=c[17539]|0;c[17538]=H;if((H&3|0)==0){K=+h[8774];I=+h[8773];if(K<I){L=70184;M=K}else{N=I;F=6262}}else{N=+h[8773];F=6262}if((F|0)==6262){L=70192;M=N}h[8771]=M;h[8772]=+h[L>>3];if((a[70292]&1)==0){R=0.0}else{R=+_(+(+h[8787]))}h[8788]=R;h[8777]=8.988465674311579e+307;h[8778]=-8.988465674311579e+307;L=c[17711]|0;c[17710]=L;if((L&3|0)==0){R=+h[8860];M=+h[8859];if(R<M){S=70872;T=R}else{U=M;F=6268}}else{U=+h[8859];F=6268}if((F|0)==6268){S=70880;T=U}h[8857]=T;h[8858]=+h[S>>3];if((a[70980]&1)==0){V=0.0}else{V=+_(+(+h[8873]))}h[8874]=V;h[8863]=8.988465674311579e+307;h[8864]=-8.988465674311579e+307;S=c[17883]|0;c[17882]=S;if((S&3|0)==0){V=+h[8946];T=+h[8945];if(V<T){W=71560;X=V}else{Y=T;F=6274}}else{Y=+h[8945];F=6274}if((F|0)==6274){W=71568;X=Y}h[8943]=X;h[8944]=+h[W>>3];if((a[71668]&1)==0){Z=0.0}else{Z=+_(+(+h[8959]))}h[8960]=Z;h[8949]=8.988465674311579e+307;h[8950]=-8.988465674311579e+307;W=c[16163]|0;c[16162]=W;do{if((W&3|0)==0){Z=+h[8086];X=+h[8085];if(Z>=X){$=X;ab=Z;F=6281;break}h[8083]=Z;ac=X}else{$=+h[8085];ab=+h[8086];F=6281}}while(0);if((F|0)==6281){h[8083]=(W&1|0)==0?$:8.988465674311579e+307;ac=(W&2|0)==0?ab:-8.988465674311579e+307}h[8084]=ac;if((a[64788]&1)==0){ad=0.0}else{ad=+_(+(+h[8099]))}h[8100]=ad;h[8089]=8.988465674311579e+307;h[8090]=-8.988465674311579e+307;c[200]=2;c[144]=1;c[34]=0;L8524:do{if((c[8272]|0)>(y|0)){W=u;S=p+24|0;L=-1;H=0;C=y;while(1){z=c[1054]|0;if((a[z+(C*40&-1)|0]&1)==0){ae=L;af=H;ag=C;break L8524}ah=c[z+(C*40&-1)+36>>2]|0;ai=z+(C*40&-1)+32|0;z=c[10036]|0;aj=0;while(1){if((aj|0)>=(ah|0)){break}if((a[z+((c[ai>>2]|0)+aj|0)|0]|0)==(a[aj+78280|0]|0)){aj=aj+1|0}else{ae=L;af=H;ag=C;break L8524}}if((aj|0)!=1){ae=L;af=H;ag=C;break L8524}if((H|0)>5){break}ai=c[42584+(H<<2)>>2]|0;uD(W|0,64648+(ai*688&-1)|0,688);c[S>>2]=c[p+(ai<<2)>>2];c[p+(H<<2)>>2]=dr(ai,-1)|0;ai=c[13898]|0;z=H+1|0;if((c[8272]|0)>(ai|0)){L=ai;H=z;C=ai}else{ae=ai;af=z;ag=ai;break L8524}}uf(C,192712,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{ae=-1;af=0;ag=y}}while(0);y=c[10062]|0;if((y|0)!=0){e1(y);c[10062]=0}c[11670]=40240;uB(42608,24544);uB(42659,24595);y=0;do{H=c[p+(y<<2)>>2]|0;if((H|0)>-1){L=c[1054]|0;S=c[L+(H*40&-1)+36>>2]|0;W=(S|0)>49?49:S;S=c[10036]|0;ai=c[L+(H*40&-1)+32>>2]|0;H=0;while(1){L=H+1|0;a[55600+(y*51&-1)+H|0]=a[S+ai|0]|0;if((L|0)==(W|0)){break}else{ai=ai+1|0;H=L}}a[55600+(y*51&-1)+W|0]=0}else{uB(55600+(y*51&-1)|0,42608+(y*51&-1)|0)}y=y+1|0;}while((y|0)<5);it();y=c[18070]|0;H=db(y,c[y>>2]<<5|8,105624)|0;c[18070]=0;c[10062]=H;c[11670]=0;H=c[13898]|0;if((H|0)>=(c[8272]|0)){ak=H;uf(ak,205112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}y=c[1054]|0;L8553:do{if((a[y+(H*40&-1)|0]&1)!=0){ai=c[y+(H*40&-1)+36>>2]|0;S=y+(H*40&-1)+32|0;C=c[10036]|0;L=0;while(1){if((L|0)>=(ai|0)){break}if((a[C+((c[S>>2]|0)+L|0)|0]|0)==(a[L+103664|0]|0)){L=L+1|0}else{break L8553}}if((L|0)==1){ak=H}else{break}uf(ak,205112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);a[14176]=1;is(n);a[14176]=0;if((c[n>>2]|0)!=3){c[13898]=H;ak=H;uf(ak,205112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}y=c[n+8>>2]|0;if((y|0)==0){ak=c[13898]|0;uf(ak,205112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[11856]=0;c[13486]=ey(y,7,0)|0;uu(y);y=c[13486]|0;if((y|0)<0){uf(-1,120240,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((y|0)==1){uf(c[13898]|0,174456,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}ak=(y|0)<3?1:y-2|0;c[8304]=ak;if((c[64808+((c[200]|0)*688&-1)>>2]|0)==1&(y|0)<2){uf(c[13898]|0,84448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((c[64808+((c[144]|0)*688&-1)>>2]|0)==1&(y|0)<1){uf(c[13898]|0,106024,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((ak|0)>0){y=(ak|0)>1?ak:1;uD(48840,42584,y<<2);al=y}else{al=0}c[48840+(al<<2)>>2]=0;c[48840+(al+1<<2)>>2]=99;al=c[p+4>>2]|0;if((al|0)>-1&(ak|0)==1){uf(al,159352,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}al=ak+1|0;if((af|0)>(al|0)){uf(ae,152936,(v=i,i=i+8|0,c[v>>2]=ak,v)|0)}if((af|0)==(al|0)&(ak|0)<5){ak=af-1|0;af=c[42584+(ak<<2)>>2]|0;al=64648+(af*688&-1)|0;ae=al|0;y=c[34]|0;c[64648+(y*688&-1)>>2]=c[ae>>2];n=c[ae>>2]|0;if((n&1|0)==0){h[64664+(y*688&-1)>>3]=+h[64664+(af*688&-1)>>3];am=c[ae>>2]|0}else{am=n}if((am&2|0)==0){h[64672+(y*688&-1)>>3]=+h[64672+(af*688&-1)>>3]}uD(al|0,u|0,688);c[p+(ak<<2)>>2]=c[p+24>>2]}p=c[13898]|0;ak=43240;while(1){an=c[ak>>2]|0;if((an|0)==0){ao=43240;break}if((aY(214968,c[an+4>>2]|0)|0)==0){F=6337;break}else{ak=an|0}}do{if((F|0)==6337){ak=c[an+16>>2]|0;if((ak|0)==2){ap=+h[an+24>>3]}else if((ak|0)==3){ap=+uz(c[an+24>>2]|0,0)}else if((ak|0)==1){ap=+(c[an+24>>2]|0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(!(ap<1.0&ap>0.0)){ao=43240;break}h[5479]=ap;ao=43240}}while(0);while(1){aq=c[ao>>2]|0;if((aq|0)==0){ar=0;break}if((aY(215432,c[aq+4>>2]|0)|0)==0){F=6346;break}else{ao=aq|0}}do{if((F|0)==6346){if((c[aq+16>>2]|0)!=1){ar=0;break}ar=c[aq+24>>2]|0}}while(0);c[8708]=ar;ar=43240;while(1){as=c[ar>>2]|0;if((as|0)==0){at=43240;break}if((aY(215960,c[as+4>>2]|0)|0)==0){F=6351;break}else{ar=as|0}}do{if((F|0)==6351){ar=c[as+16>>2]|0;if((ar|0)==1){au=+(c[as+24>>2]|0)}else if((ar|0)==2){au=+h[as+24>>3]}else if((ar|0)==3){au=+uz(c[as+24>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(au<=0.0){at=43240;break}h[1782]=au;bD(150480,(v=i,i=i+8|0,h[v>>3]=au,v)|0);at=43240}}while(0);while(1){av=c[at>>2]|0;if((av|0)==0){break}if((aY(216424,c[av+4>>2]|0)|0)==0){F=6360;break}else{at=av|0}}do{if((F|0)==6360){at=c[av+16>>2]|0;if((at|0)==1){aw=+(c[av+24>>2]|0)}else if((at|0)==2){aw=+h[av+24>>3]}else if((at|0)==3){aw=+uz(c[av+24>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(aw<=0.0){break}h[4485]=aw;h[4484]=aw;bD(148576,(v=i,i=i+8|0,h[v>>3]=aw,v)|0)}}while(0);uu(c[10638]|0);c[10638]=0;av=bU(217040)|0;if((av|0)!=0){c[10638]=bP(av|0)|0}av=fg()|0;at=c[8762]|0;do{if((at|0)==0){as=bF(av|0,205056)|0;c[8762]=as;if((as|0)!=0){ax=as;break}be(42289,144360,(v=i,i=i+8|0,c[v>>2]=av,v)|0);fb()}else{ax=at}}while(0);if((av|0)==0){ay=ax}else{uu(av);ay=c[8762]|0}aI(142744,82,1,ay|0);cG(t|0);ay=c[8762]|0;av=aT(t|0)|0;cf(ay|0,141312,(v=i,i=i+8|0,c[v>>2]=av,v)|0);av=p-1|0;p=c[1054]|0;ay=(c[p+(av*40&-1)+36>>2]|0)+(c[p+(av*40&-1)+32>>2]|0)|0;av=db(0,(ay+1|0)-(c[p+(H*40&-1)+32>>2]|0)|0,116456)|0;p=c[(c[1054]|0)+(H*40&-1)+32>>2]|0;L8653:do{if((p|0)<(ay|0)){t=p;ax=av;while(1){at=a[(c[10036]|0)+t|0]|0;if(at<<24>>24==0){aA=ax;break L8653}as=ax+1|0;a[ax]=at;at=t+1|0;if((at|0)<(ay|0)){t=at;ax=as}else{aA=as;break}}}else{aA=av}}while(0);a[aA]=0;cf(c[8762]|0,139528,(v=i,i=i+8|0,c[v>>2]=av,v)|0);aI(137608,17,1,c[8762]|0);uu(av);L8658:do{if((c[8304]|0)>0){av=0;while(1){aA=c[13486]|0;ay=c[8762]|0;if((av|0)>=(aA-1|0)){aB=ay;aC=aA;break L8658}cf(ay|0,135712,(v=i,i=i+8|0,c[v>>2]=55600+(av*51&-1),v)|0);ay=av+1|0;if((ay|0)<(c[8304]|0)){av=ay}else{F=6378;break}}}else{F=6378}}while(0);if((F|0)==6378){aB=c[8762]|0;aC=c[13486]|0}cf(aB|0,((aC|0)<3?134160:132576)|0,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);aC=c[8304]|0;if((aC|0)<0){aD=aC}else{aB=l|0;l=0;av=0;ay=aC;while(1){if((c[64648+(l*688&-1)>>2]&3|0)==3){aE=ay}else{aC=c[8762]|0;if((av|0)==0){aG=77416}else{aG=55600+(av*51&-1)|0}cf(aC|0,220408,(v=i,i=i+8|0,c[v>>2]=aG,v)|0);aA=64648+(l*688&-1)|0;do{if((c[aA>>2]&1|0)==0){if((c[64808+(l*688&-1)>>2]|0)==1){aF(34,aC|0);p=64813+(l*688&-1)|0;aw=+h[64664+(l*688&-1)>>3];t3(k,aw);au=aw- +O(+aw);t4(aB,80,p,k,au);aK(aB|0,aC|0);aF(34,aC|0);break}else{au=+h[64664+(l*688&-1)>>3];cf(aC|0,92736,(v=i,i=i+8|0,h[v>>3]=au,v)|0);break}}else{aF(42,aC|0)}}while(0);aI(223968,3,1,aC|0);do{if((c[aA>>2]&2|0)==0){if((c[64808+(l*688&-1)>>2]|0)==1){aF(34,aC|0);p=64813+(l*688&-1)|0;au=+h[64672+(l*688&-1)>>3];t3(j,au);aw=au- +O(+au);t4(aB,80,p,j,aw);aK(aB|0,aC|0);aF(34,aC|0);break}else{aw=+h[64672+(l*688&-1)>>3];cf(aC|0,92736,(v=i,i=i+8|0,h[v>>3]=aw,v)|0);break}}else{aF(42,aC|0)}}while(0);aI(89968,2,1,aC|0);aE=c[8304]|0}aA=av+1|0;if((aA|0)>(aE|0)){aD=aE;break}else{l=c[42584+(av<<2)>>2]|0;av=aA;ay=aE}}}c[8718]=2048;do{if((aD<<11|0)<1){c[10636]=0;aH=2048;F=6405}else{aE=aD<<14;ay=ut(aE)|0;do{if((ay|0)==0){gk();av=ut(aE)|0;if((av|0)!=0){aJ=av;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=215008,v)|0)}else{aJ=ay}}while(0);ay=c[8718]|0;c[10636]=aJ;if((ay|0)>=1){aH=ay;F=6405;break}c[10634]=0;aL=0}}while(0);do{if((F|0)==6405){aJ=aH<<3;aD=ut(aJ)|0;do{if((aD|0)==0){gk();ay=ut(aJ)|0;if((ay|0)!=0){aM=ay;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=215008,v)|0)}else{aM=aD}}while(0);aD=c[8718]|0;c[10634]=aM;if((aD|0)<1){aL=0;break}aJ=aD<<3;aD=ut(aJ)|0;do{if((aD|0)==0){gk();ay=ut(aJ)|0;if((ay|0)!=0){aN=ay;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=215008,v)|0)}else{aN=aD}}while(0);aL=aN}}while(0);c[10878]=aL;c[8306]=0;uE(r|0,0,48);r=c[8270]|0;do{if((r|0)!=0){if((aY(r|0,139696)|0)==0){break}bA(4,r|0)}}while(0);r=s|0;aL=eC(r,7)|0;L8714:do{if((aL|0)==-1){aO=0}else{aN=q|0;aM=s+8|0;aH=0;aD=aL;while(1){aJ=c[8718]|0;if((c[8306]|0)>=(aJ|0)){ay=(aJ*3&-1|0)/2&-1;c[8718]=ay;aJ=aa(c[8304]|0,ay);if((aJ|0)<1){F=6420;break}ay=db(c[10636]|0,aJ<<3,215008)|0;c[10636]=ay;if((ay|0)==0){F=6711;break}ay=c[8718]|0;if((ay|0)<1){F=6423;break}aJ=db(c[10634]|0,ay<<3,215008)|0;c[10634]=aJ;if((aJ|0)==0){F=6714;break}aJ=c[8718]|0;if((aJ|0)<1){F=6426;break}ay=db(c[10878]|0,aJ<<3,215008)|0;c[10878]=ay;if((ay|0)==0){F=6716;break}ay=c[m>>2]|0;aJ=c[8718]|0;cf(ay|0,127672,(v=i,i=i+8|0,c[v>>2]=aJ,v)|0)}if((aD|0)==1){h[aM>>3]=+h[r>>3];h[r>>3]=+(c[11942]|0);F=6434}else if((aD|0)==(-5|0)|(aD|0)==(-2|0)|(aD|0)==(-3|0)|(aD|0)==(-4|0)){aP=aH}else if((aD|0)==0){F=6432;break}else{F=6434}L8729:do{if((F|0)==6434){F=0;aJ=aH+1|0;ay=c[8304]|0;L8731:do{if((ay|0)>0){aE=aa(ay,c[8306]|0);aC=c[10636]|0;av=0;while(1){aR=c[42584+(av<<2)>>2]|0;l=c[64648+(aR*688&-1)>>2]|0;if((l&1|0)==0){if(+h[s+(av<<3)>>3]<+h[64664+(aR*688&-1)>>3]){F=6438;break}}aw=+h[s+(av<<3)>>3];if((l&2|0)==0){if(aw>+h[64672+(aR*688&-1)>>3]){F=6441;break}}h[aC+(aE+av<<3)>>3]=aw;l=av+1|0;if((l|0)<(ay|0)){av=l}else{aS=l;break L8731}}if((F|0)==6441){F=0;av=q+(aR<<2)|0;c[av>>2]=(c[av>>2]|0)+1;aP=aJ;break L8729}else if((F|0)==6438){F=0;av=q+(aR<<2)|0;c[av>>2]=(c[av>>2]|0)+1;aP=aJ;break L8729}}else{aS=0}}while(0);ay=c[16162]|0;do{if((ay&1|0)==0){if(+h[s+(aS<<3)>>3]>=+h[8083]){break}c[aN>>2]=(c[aN>>2]|0)+1;aP=aJ;break L8729}}while(0);aw=+h[s+(aS<<3)>>3];if((ay&2|0)==0&aw>+h[8084]){c[aN>>2]=(c[aN>>2]|0)+1;aP=aJ;break}av=c[8306]|0;h[(c[10634]|0)+(av<<3)>>3]=aw;if((c[13486]|0)>2){aU=+h[s+(aS+1<<3)>>3]}else{aU=1.0}c[8306]=av+1;h[(c[10878]|0)+(av<<3)>>3]=aU;aP=aJ}}while(0);aj=eC(r,7)|0;if((aj|0)==-1){aO=aP;break L8714}else{aH=aP;aD=aj}}if((F|0)==6423){c[10634]=0;ez();aW=c[8718]|0;aX=be(42289,128848,(v=i,i=i+8|0,c[v>>2]=aW,v)|0)|0;fb()}else if((F|0)==6420){c[10636]=0;ez();aW=c[8718]|0;aX=be(42289,128848,(v=i,i=i+8|0,c[v>>2]=aW,v)|0)|0;fb()}else if((F|0)==6426){c[10878]=0;ez();aW=c[8718]|0;aX=be(42289,128848,(v=i,i=i+8|0,c[v>>2]=aW,v)|0)|0;fb()}else if((F|0)==6711){ez();aW=c[8718]|0;aX=be(42289,128848,(v=i,i=i+8|0,c[v>>2]=aW,v)|0)|0;fb()}else if((F|0)==6714){ez();aW=c[8718]|0;aX=be(42289,128848,(v=i,i=i+8|0,c[v>>2]=aW,v)|0)|0;fb()}else if((F|0)==6716){ez();aW=c[8718]|0;aX=be(42289,128848,(v=i,i=i+8|0,c[v>>2]=aW,v)|0)|0;fb()}else if((F|0)==6432){be(42289,126384,(v=i,i=i+8|0,c[v>>2]=c[11900],v)|0);fb()}}}while(0);ez();aW=c[8270]|0;do{if((aW|0)!=0){if((aY(aW|0,139696)|0)==0){break}bA(4,139696)}}while(0);aW=c[8306]|0;if((aW|0)<2){bD(125344,(v=i,i=i+8|0,c[v>>2]=aO,v)|0);aO=0;do{aX=c[42584+(aO<<2)>>2]|0;aP=c[q+(aX<<2)>>2]|0;do{if((aP|0)!=0){if((aO|0)<5){aZ=55600+(aO*51&-1)|0}else{aZ=77416}bD(124088,(v=i,i=i+16|0,c[v>>2]=aP,c[v+8>>2]=aZ,v)|0);r=64648+(aX*688&-1)|0;if((c[r>>2]&1|0)==0){aU=+h[64664+(aX*688&-1)>>3];bD(121384,(v=i,i=i+8|0,h[v>>3]=aU,v)|0)}else{bD(122672,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((c[r>>2]&2|0)==0){aU=+h[64672+(aX*688&-1)>>3];bD(116464,(v=i,i=i+8|0,h[v>>3]=aU,v)|0);break}else{bJ(14192);break}}}while(0);aO=aO+1|0;}while((aO|0)<6);uD(42289,115544,16);fb()}aO=aa(c[8304]|0,aW);do{if((aO|0)<1){c[10636]=0;a_=aW;F=6471}else{aZ=db(c[10636]|0,aO<<3,215008)|0;q=c[8306]|0;c[10636]=aZ;if((q|0)>=1){a_=q;F=6471;break}c[10634]=0;a$=0;a0=q}}while(0);do{if((F|0)==6471){aO=db(c[10634]|0,a_<<3,215008)|0;aW=c[8306]|0;c[10634]=aO;if((aW|0)<1){a$=0;a0=aW;break}aO=db(c[10878]|0,aW<<3,215008)|0;a$=aO;a0=c[8306]|0}}while(0);c[10878]=a$;cf(c[8762]|0,114744,(v=i,i=i+8|0,c[v>>2]=a0,v)|0);if((c[13486]|0)<3){a0=c[8762]|0;aI(113544,54,1,a0|0)}a0=H-1|0;H=c[1054]|0;a$=(c[H+(a0*40&-1)+36>>2]|0)+(c[H+(a0*40&-1)+32>>2]|0)|0;a0=db(0,(a$+1|0)-(c[H+(ag*40&-1)+32>>2]|0)|0,116456)|0;H=c[(c[1054]|0)+(ag*40&-1)+32>>2]|0;L8802:do{if((H|0)<(a$|0)){ag=H;a_=a0;while(1){aO=a[(c[10036]|0)+ag|0]|0;if(aO<<24>>24==0){a2=a_;break L8802}aW=a_+1|0;a[a_]=aO;aO=ag+1|0;if((aO|0)<(a$|0)){ag=aO;a_=aW}else{a2=aW;break}}}else{a2=a0}}while(0);a[a2]=0;cf(c[8762]|0,108456,(v=i,i=i+8|0,c[v>>2]=a0,v)|0);uu(a0);c[8714]=32;a0=c[13898]|0;a2=a0+1|0;c[13898]=a2;if((c[8272]|0)<=(a0|0)){uf(a2,106560,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}a$=c[1054]|0;if((a[a$+(a0*40&-1)|0]&1)==0){uf(a2,106560,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}H=c[a$+(a0*40&-1)+36>>2]|0;a_=a$+(a0*40&-1)+32|0;a0=c[10036]|0;a$=0;while(1){if((a$|0)>=(H|0)){break}if((a[a0+((c[a_>>2]|0)+a$|0)|0]|0)==(a[a$+107456|0]|0)){a$=a$+1|0}else{F=6705;break}}if((F|0)==6705){uf(a2,106560,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((a$|0)!=3){uf(a2,106560,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}a2=ut(256)|0;do{if((a2|0)==0){gk();a$=ut(256)|0;if((a$|0)!=0){a3=a$;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=215008,v)|0)}else{a3=a2}}while(0);a2=((c[8714]|0)*51&-1)+51|0;c[18130]=a3;a3=ut(a2)|0;do{if((a3|0)==0){gk();a$=ut(a2)|0;if((a$|0)!=0){a4=a$;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=105592,v)|0)}else{a4=a3}}while(0);c[8236]=a4;c[8302]=0;a4=c[13898]|0;a3=c[1054]|0;a2=(a[a3+(a4*40&-1)|0]&1)==0;if(a2){F=6493}else{a$=a[(c[10036]|0)+(c[a3+(a4*40&-1)+32>>2]|0)|0]|0;if((a$<<24>>24|0)==39|(a$<<24>>24|0)==34){F=6503}else{F=6493}}L8832:do{if((F|0)==6493){a$=c[10810]|0;L8834:do{if((a$|0)!=0){a_=c[8272]|0;a0=a3+(a4*40&-1)+36|0;H=a3+(a4*40&-1)+32|0;ag=c[10036]|0;aW=a$;L8836:while(1){aO=c[aW+4>>2]|0;L8838:do{if(!((a_|0)<=(a4|0)|a2)){q=c[a0>>2]|0;aZ=0;while(1){if((aZ|0)>=(q|0)){break}if((a[ag+((c[H>>2]|0)+aZ|0)|0]|0)==(a[aO+aZ|0]|0)){aZ=aZ+1|0}else{break L8838}}if((a[aO+aZ|0]|0)==0){break L8836}}}while(0);aO=c[aW>>2]|0;if((aO|0)==0){break L8834}else{aW=aO}}if((a[aW+8|0]&1)!=0){break}if((c[aW+16>>2]|0)==3){F=6503;break L8832}}}while(0);a$=c[8762]|0;aI(99808,60,1,a$|0);a$=c[13898]|0;H=c[1054]|0;L8848:while(1){if((a[H+(a$*40&-1)|0]&1)==0){F=6725;break}ag=(bO(d[(c[10036]|0)+(c[H+(a$*40&-1)+32>>2]|0)|0]|0|0)|0)==0;a0=c[1054]|0;if(ag){if((a[(c[10036]|0)+(c[a0+(a$*40&-1)+32>>2]|0)|0]|0)!=95){F=6726;break}}ag=(c[8236]|0)+((c[8302]|0)*51&-1)|0;a_=c[13898]|0;aO=c[a0+(a_*40&-1)+32>>2]|0;aJ=c[a0+(a_*40&-1)+36>>2]|0;a_=((aJ|0)>50?50:aJ)+aO|0;L8854:do{if((aO|0)<(a_|0)){aJ=ag;a0=aO;while(1){ay=a[(c[10036]|0)+a0|0]|0;if(ay<<24>>24==0){a5=aJ;break L8854}q=aJ+1|0;a[aJ]=ay;ay=a0+1|0;if((ay|0)<(a_|0)){aJ=q;a0=ay}else{a5=q;break}}}else{a5=ag}}while(0);a[a5]=0;ag=c[8302]|0;a_=c[8714]|0;if((ag|0)<(a_|0)){a7=ag;a9=c[8236]|0}else{ag=a_*3&-1;a_=(ag|0)/2&-1;c[8714]=a_;if((ag|0)<2){F=6577;break}ag=db(c[18130]|0,a_<<3,215008)|0;c[18130]=ag;if((ag|0)==0){F=6728;break}ag=db(c[8236]|0,((c[8714]|0)*51&-1)+51|0,101064)|0;a_=ag;c[8236]=a_;if((ag|0)==0){F=6729;break}a7=c[8302]|0;a9=a_}a_=a9+(a7*51&-1)|0;ag=43240;while(1){ba=c[ag>>2]|0;if((ba|0)==0){F=6592;break}if((aY(a_|0,c[ba+4>>2]|0)|0)==0){F=6585;break}else{ag=ba|0}}do{if((F|0)==6585){F=0;ag=ba+8|0;if((a[ag]&1)!=0){a[ag]=0;c[ba+16>>2]=2;h[ba+24>>3]=1.0;h[ba+32>>3]=0.0;bb=1.0;break}ag=ba+16|0;aO=c[ag>>2]|0;if((aO|0)==2){bb=+h[ba+24>>3];break}else if((aO|0)==1){aU=+(c[ba+24>>2]|0);c[ag>>2]=2;h[ba+24>>3]=aU;h[ba+32>>3]=0.0;bb=aU;break}else if((aO|0)==3){bb=+uz(c[ba+24>>2]|0,0);break}else{F=6591;break L8848}}else if((F|0)==6592){F=0;aO=e6(a_)|0;c[aO+16>>2]=2;h[aO+24>>3]=1.0;h[aO+32>>3]=0.0;a[aO+8|0]=0;bb=1.0}}while(0);a_=c[8302]|0;h[(c[18130]|0)+(a_<<3)>>3]=bb;aO=a_+1|0;c[8302]=aO;a_=c[13898]|0;ag=a_+1|0;c[13898]=ag;if((c[8272]|0)<=(ag|0)){bc=aO;break L8832}aW=c[1054]|0;if((a[aW+(ag*40&-1)|0]&1)==0){bc=aO;break L8832}a0=c[aW+(ag*40&-1)+36>>2]|0;aJ=aW+(ag*40&-1)+32|0;ag=c[10036]|0;q=0;while(1){if((q|0)>=(a0|0)){break}if((a[ag+((c[aJ>>2]|0)+q|0)|0]|0)==(a[q+148464|0]|0)){q=q+1|0}else{bc=aO;break L8832}}if((q|0)!=1){bc=aO;break L8832}aJ=a_+2|0;c[13898]=aJ;if((aJ|0)==0){bc=aO;break L8832}else{a$=aJ;H=aW}}if((F|0)==6725){uD(42289,99416,23);fb()}else if((F|0)==6726){uD(42289,99416,23);fb()}else if((F|0)==6728){uD(42289,100336,43);fb()}else if((F|0)==6729){uD(42289,100336,43);fb()}else if((F|0)==6591){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((F|0)==6577){c[18130]=0;uD(42289,100336,43);fb()}}}while(0);if((F|0)==6503){uu(c[10644]|0);ba=c[13898]|0;L8897:do{if((ba|0)<(c[8272]|0)){a7=c[1054]|0;L8899:do{if((a[a7+(ba*40&-1)|0]&1)!=0){a9=c[a7+(ba*40&-1)+36>>2]|0;a5=a7+(ba*40&-1)+32|0;a2=c[10036]|0;a4=0;while(1){if((a4|0)>=(a9|0)){break}if((a[a2+((c[a5>>2]|0)+a4|0)|0]|0)==(a[a4+103664|0]|0)){a4=a4+1|0}else{break L8899}}if((a4|0)==1){bd=0;break L8897}}}while(0);a[14176]=1;is(g);a[14176]=0;if((c[g>>2]|0)==3){bd=c[g+8>>2]|0;break}else{c[13898]=ba;bd=0;break}}else{bd=0}}while(0);c[10644]=bd;ba=c[8762]|0;cf(ba|0,104576,(v=i,i=i+8|0,c[v>>2]=bd,v)|0);bd=hA(c[10644]|0,193632)|0;if((bd|0)==0){ba=c[10644]|0;be(42289,104048,(v=i,i=i+8|0,c[v>>2]=ba,v)|0);fb()}ba=x|0;L8913:do{if((a6(ba|0,1025,bd|0)|0)!=0){x=0;L8914:while(1){L8916:while(1){g=aQ(ba|0,221168)|0;if((g|0)==0){bf=0}else{a[g]=0;g=c[8762]|0;cf(g|0,103672,(v=i,i=i+8|0,c[v>>2]=ba,v)|0);bf=1}g=a8(ba|0,35)|0;if((g|0)==0){bg=ba}else{a[g]=0;bg=ba}while(1){g=a[bg]|0;if((g<<24>>24|0)==35|(g<<24>>24|0)==0){break}else if(!((g<<24>>24|0)==32|(g<<24>>24|0)==9|(g<<24>>24|0)==10)){bh=ba;break L8916}bg=bg+1|0}if((a6(ba|0,1025,bd|0)|0)==0){break L8913}}while(1){a4=a[bh]|0;if((a4<<24>>24|0)==10|(a4<<24>>24|0)==0){bi=0;bj=ba;bk=x;break}else if(!((a4<<24>>24|0)==32|(a4<<24>>24|0)==9|(a4<<24>>24|0)==61)){F=6525;break}bh=bh+1|0}if((F|0)==6525){F=0;a4=cy(bh|0,213208)|0;if((a4|0)==0){bl=bh+(uA(bh|0)|0)|0}else{bl=a4}a4=a[bl]|0;a[bl]=0;bi=bh;bj=bl+1|0;bk=a4}a4=a[bi]|0;if(a4<<24>>24!=0){g=bi;a7=a4;do{if((bs(a7&255|0)|0)==0){if((a[g]|0)!=95){F=6720;break L8914}}g=g+1|0;a7=a[g]|0;}while(a7<<24>>24!=0)}if((uA(bi|0)|0)>>>0>50){F=6719;break}a7=c[8302]|0;g=c[8236]|0;uF(g+(a7*51&-1)|0,bi|0,51);if((uA(bi|0)|0)>>>0>=51){a[g+(a7*51&-1)+50|0]=0}if(bk<<24>>24==61){bm=bj}else{a7=a8(bj|0,61)|0;if((a7|0)==0){F=6538;break}bm=a7+1|0}a7=bm;while(1){g=a[a7]|0;if((g<<24>>24|0)==10|(g<<24>>24|0)==0){bn=0;bo=bm;bp=bk;break}else if(!((g<<24>>24|0)==32|(g<<24>>24|0)==9|(g<<24>>24|0)==61)){F=6543;break}a7=a7+1|0}if((F|0)==6543){F=0;g=cy(a7|0,213208)|0;if((g|0)==0){bq=a7+(uA(a7|0)|0)|0}else{bq=g}g=a[bq]|0;a[bq]=0;bn=a7;bo=bq+1|0;bp=g}if((ca(bn|0,148448,(v=i,i=i+8|0,c[v>>2]=w,v)|0)|0)!=1){F=6547;break}if(bf){bb=+h[w>>3];g=e6((c[8236]|0)+((c[8302]|0)*51&-1)|0)|0;c[g+16>>2]=2;c[g+20>>2]=br;h[g+24>>3]=bb;h[g+32>>3]=0.0;a[g+8|0]=0;bt=bo}else{g=c[8302]|0;a4=c[8714]|0;if((g|0)<(a4|0)){bu=g}else{g=a4*3&-1;a4=(g|0)/2&-1;c[8714]=a4;if((g|0)<2){F=6552;break}g=db(c[18130]|0,a4<<3,215008)|0;c[18130]=g;if((g|0)==0){F=6709;break}g=db(c[8236]|0,((c[8714]|0)*51&-1)+51|0,101064)|0;c[8236]=g;if((g|0)==0){F=6710;break}bu=c[8302]|0}bb=+h[w>>3];c[8302]=bu+1;h[(c[18130]|0)+(bu<<3)>>3]=bb;bt=bo}while(1){g=a[bt]|0;if((g<<24>>24|0)==10|(g<<24>>24|0)==0){bv=bp;break}else if(!((g<<24>>24|0)==32|(g<<24>>24|0)==9|(g<<24>>24|0)==61)){F=6560;break}bt=bt+1|0}if((F|0)==6560){F=0;a7=cy(bt|0,213208)|0;if((a7|0)==0){bw=bt+(uA(bt|0)|0)|0}else{bw=a7}a7=a[bw]|0;a[bw]=0;if((bt|0)==0){bv=a7}else{F=6564;break}}if((a6(ba|0,1025,bd|0)|0)==0){break L8913}else{x=bv}}if((F|0)==6709){bx=az(bd|0)|0;uD(42289,100336,43);fb()}else if((F|0)==6710){bx=az(bd|0)|0;uD(42289,100336,43);fb()}else if((F|0)==6719){by=az(bd|0)|0;uD(42289,101704,31);fb()}else if((F|0)==6720){by=az(bd|0)|0;uD(42289,101704,31);fb()}else if((F|0)==6552){c[18130]=0;bx=az(bd|0)|0;uD(42289,100336,43);fb()}else if((F|0)==6547){az(bd|0);uD(42289,101704,31);fb()}else if((F|0)==6564){az(bd|0);uD(42289,101704,31);fb()}else if((F|0)==6538){az(bd|0);uD(42289,101704,31);fb()}}}while(0);az(bd|0);bc=c[8302]|0}if((bc|0)<1){bz=0;bB=bc}else{bd=db(c[18130]|0,bc<<3,215008)|0;bz=bd;bB=c[8302]|0}c[18130]=bz;c[8236]=db(c[8236]|0,(bB*51&-1)+51|0,105592)|0;bB=c[8306]|0;bz=c[8302]|0;if((bB|0)<(bz|0)){uD(42289,98280,56);fb()}if((bz|0)>0){bd=c[18130]|0;bc=0;do{bx=bd+(bc<<3)|0;if(+h[bx>>3]==0.0){h[bx>>3]=1.0e-30}bc=bc+1|0;}while((bc|0)<(bz|0))}if((bz|0)==0){uh(-1,97624,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{bc=c[18130]|0;h[e>>3]=1.0e+30;bd=hp(bz+bB|0,bz)|0;h[f>>3]=-1.0;aV(2,52);if((fh(bc,bd,e,f)|0)==1){uD(42289,96504,31);fb()}bb=+h[e>>3];aU=+h[f>>3];do{if((a[42560]&1)==0){bz=c[m>>2]|0;aw=bb-bb;if(bb>1.0e-30){bC=aw/bb}else{bC=0.0}au=+h[5479];cf(bz|0,224168,(v=i,i=i+56|0,c[v>>2]=0,h[v+8>>3]=bb,h[v+16>>3]=bC,h[v+24>>3]=aw,h[v+32>>3]=au,h[v+40>>3]=aU,c[v+48>>2]=222856,v)|0);if((c[8302]|0)>0){bE=0}else{bG=aw;break}while(1){au=+h[bc+(bE<<3)>>3];cf(bz|0,222224,(v=i,i=i+16|0,c[v>>2]=(c[8236]|0)+(bE*51&-1),h[v+8>>3]=au,v)|0);bB=bE+1|0;if((bB|0)<(c[8302]|0)){bE=bB}else{bG=aw;break}}}else{bG=bb-bb}}while(0);bE=c[8762]|0;if(bb>1.0e-30){bH=bG/bb}else{bH=0.0}bC=+h[5479];cf(bE|0,224168,(v=i,i=i+56|0,c[v>>2]=0,h[v+8>>3]=bb,h[v+16>>3]=bH,h[v+24>>3]=bG,h[v+32>>3]=bC,h[v+40>>3]=aU,c[v+48>>2]=222856,v)|0);if((c[8302]|0)>0){bz=0;do{bC=+h[bc+(bz<<3)>>3];cf(bE|0,222224,(v=i,i=i+16|0,c[v>>2]=(c[8236]|0)+(bz*51&-1),h[v+8>>3]=bC,v)|0);bz=bz+1|0;}while((bz|0)<(c[8302]|0))}bz=e6(96112)|0;a[bz+8|0]=0;c[bz+16>>2]=1;c[bz+24>>2]=0;a[1016]=0;bC=1.0e+30;bz=0;bE=2;bG=aU;L9027:while(1){if(a[51680]|0){aU=+h[e>>3];bB=c[m>>2]|0;bH=aU-bC;if(aU>1.0e-30){bI=bH/aU}else{bI=0.0}bb=+h[5479];bx=(bz|0)>0?223472:222856;cf(bB|0,224168,(v=i,i=i+56|0,c[v>>2]=bz,h[v+8>>3]=aU,h[v+16>>3]=bI,h[v+24>>3]=bH,h[v+32>>3]=bb,h[v+40>>3]=bG,c[v+48>>2]=bx,v)|0);if((c[8302]|0)>0){bx=0;do{bb=+h[bc+(bx<<3)>>3];cf(bB|0,222224,(v=i,i=i+16|0,c[v>>2]=(c[8236]|0)+(bx*51&-1),h[v+8>>3]=bb,v)|0);bx=bx+1|0;}while((bx|0)<(c[8302]|0))}a[51680]=0;while(1){aI(74040,49,1,c[m>>2]|0);bx=a1(c[o>>2]|0)|0;if((bx|0)==99|(bx|0)==67){break}else if((bx|0)==(-1|0)|(bx|0)==115|(bx|0)==83){F=6637;break L9027}else if(!((bx|0)==101|(bx|0)==69)){continue}bx=c[10638]|0;bB=(bx|0)!=0?bx:136352;cf(c[m>>2]|0,72672,(v=i,i=i+8|0,c[v>>2]=bB,v)|0);if((c[8302]|0)>0){bx=0;do{bb=+h[(c[18130]|0)+(bx<<3)>>3];by=e6((c[8236]|0)+(bx*51&-1)|0)|0;c[by+16>>2]=2;h[by+24>>3]=bb;h[by+32>>3]=0.0;a[by+8|0]=0;bx=bx+1|0;}while((bx|0)<(c[8302]|0))}if((bB|0)==0){bK=0}else{bK=bP(bB|0)|0}dL(bK)}aI(73232,9,1,c[m>>2]|0)}if((bE|0)==2){bL=+h[e>>3];bM=bz+1|0}else{bL=bC;bM=bz}bx=fh(bc,bd,e,f)|0;if((bx|0)==1){bN=bL;bQ=bM;bR=1;break}else if((bx|0)==2){do{if((a[42560]&1)==0){bb=+h[e>>3];bH=+h[f>>3];by=c[m>>2]|0;aU=bb-bL;if(bb>1.0e-30){bS=aU/bb}else{bS=0.0}aw=+h[5479];bv=(bM|0)>0?223472:222856;cf(by|0,224168,(v=i,i=i+56|0,c[v>>2]=bM,h[v+8>>3]=bb,h[v+16>>3]=bS,h[v+24>>3]=aU,h[v+32>>3]=aw,h[v+40>>3]=bH,c[v+48>>2]=bv,v)|0);if((c[8302]|0)>0){bT=0}else{bV=bH;break}while(1){aw=+h[bc+(bT<<3)>>3];cf(by|0,222224,(v=i,i=i+16|0,c[v>>2]=(c[8236]|0)+(bT*51&-1),h[v+8>>3]=aw,v)|0);bv=bT+1|0;if((bv|0)<(c[8302]|0)){bT=bv}else{bV=bH;break}}}else{bV=+h[f>>3]}}while(0);if(bV<1.0e20){bW=bV}else{bN=bL;bQ=bM;bR=2;break}}else{bH=+h[f>>3];if(bH<1.0e20){bW=bH}else{bN=bL;bQ=bM;bR=bx;break}}by=c[8708]|0;if((by|0)!=0&(bM|0)>(by|0)){bN=bL;bQ=bM;bR=bx;break}if((bx|0)==3){bC=bL;bz=bM;bE=3;bG=bW;continue}bH=+h[e>>3];aw=bL-bH;if(bH>1.0e-30){bX=aw/bH}else{bX=aw}if(bX>+h[5479]){bC=bL;bz=bM;bE=bx;bG=bW}else{bN=bL;bQ=bM;bR=bx;break}}if((F|0)==6637){bM=c[m>>2]|0;aI(73744,5,1,bM|0);a[1016]=1;bN=bC;bQ=bz;bR=bE}aV(2,4);aV(13,1);bE=c[8708]|0;do{if((bE|0)>0&(bQ|0)>(bE|0)){fe(95552,(v=i,i=i+8|0,c[v>>2]=bE,v)|0)}else{if(a[1016]|0){fe(95160,(v=i,i=i+8|0,c[v>>2]=bQ,v)|0);break}else{fe(94448,(v=i,i=i+8|0,c[v>>2]=bQ,v)|0);bz=e6(96112)|0;a[bz+8|0]=0;c[bz+16>>2]=1;c[bz+24>>2]=1;break}}}while(0);bC=+h[e>>3];fe(93944,(v=i,i=i+8|0,h[v>>3]=bC,v)|0);bL=bC-bN;if(bC>1.0e-30){fe(93376,(v=i,i=i+8|0,h[v>>3]=bL/bC,v)|0)}else{fe(92448,(v=i,i=i+8|0,h[v>>3]=bL,v)|0)}if((bR|0)==1){uD(42289,96504,31);fb()}bR=c[8302]|0;if((a[42568]&1)!=0&(bR|0)>0){bQ=0;while(1){fi((c[8236]|0)+(bQ*51&-1)|0,0.0);bE=bQ+1|0;bz=c[8302]|0;if((bE|0)<(bz|0)){bQ=bE}else{bY=bz;break}}}else{bY=bR}bR=c[8306]|0;L9092:do{if((bR|0)==(bY|0)){fe(91680,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);fe(90880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);fe(90496,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);fe(89976,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);bQ=c[8302]|0;if((bQ|0)>0){bZ=0}else{b_=bQ;break}while(1){bL=+h[bc+(bZ<<3)>>3];fe(89304,(v=i,i=i+16|0,c[v>>2]=(c[8236]|0)+(bZ*51&-1),h[v+8>>3]=bL,v)|0);bQ=bZ+1|0;bz=c[8302]|0;if((bQ|0)<(bz|0)){bZ=bQ}else{b_=bz;break}}}else{if(bC<1.0e-30){fe(88552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);fe(90496,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);fe(89976,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);bx=c[8302]|0;if((bx|0)>0){b$=0}else{b_=bx;break}while(1){bL=+h[bc+(b$<<3)>>3];fe(89304,(v=i,i=i+16|0,c[v>>2]=(c[8236]|0)+(b$*51&-1),h[v+8>>3]=bL,v)|0);bx=b$+1|0;bz=c[8302]|0;if((bx|0)<(bz|0)){b$=bx}else{b_=bz;break L9092}}}bz=bR-bY|0;bL=bC/+(bz|0);bN=+Q(+bL);fe(87584,(v=i,i=i+8|0,c[v>>2]=bz,v)|0);fe(86752,(v=i,i=i+8|0,h[v>>3]=bN,v)|0);fe(85792,(v=i,i=i+8|0,h[v>>3]=bL,v)|0);bx=e6(84600)|0;a[bx+8|0]=0;c[bx+16>>2]=1;c[bx+24>>2]=bz;bz=e6(84088)|0;a[bz+8|0]=0;c[bz+16>>2]=2;h[bz+24>>3]=bN;h[bz+32>>3]=0.0;bz=e6(83096)|0;a[bz+8|0]=0;c[bz+16>>2]=2;h[bz+24>>3]=bC;h[bz+32>>3]=0.0;hr(bd,0,0,0,c[8306]|0,c[8302]|0,0);bz=c[8306]|0;hs(bd,bd+(bz<<2)|0,c[8302]|0);bx=c[8302]|0;do{if((bx|0)<1){b0=bx;b1=0;b2=0}else{bQ=bx<<3;bE=ut(bQ)|0;do{if((bE|0)==0){gk();bM=ut(bQ)|0;if((bM|0)!=0){b3=bM;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=215008,v)|0)}else{b3=bE}}while(0);bE=b3;bQ=c[8302]|0;if((bQ|0)>0){b4=0}else{b0=bQ;b1=0;b2=bE;break}while(1){bN=+h[(c[bd+(b4+bz<<2)>>2]|0)+(b4<<3)>>3];if(bN<=0.0){F=6678;break}h[bE+(b4<<3)>>3]=+Q(+bN);bM=b4+1|0;if((bM|0)<(bQ|0)){b4=bM}else{b5=0;break}}if((F|0)==6678){uD(42289,81952,66);fb()}while(1){bM=bE+(b5<<3)|0;bT=bd+(b5+bz<<2)|0;bK=0;do{by=(c[bT>>2]|0)+(bK<<3)|0;h[by>>3]=+h[by>>3]/(+h[bM>>3]*+h[bE+(bK<<3)>>3]);bK=bK+1|0;}while((bK|0)<=(b5|0));bK=b5+1|0;if((bK|0)<(bQ|0)){b5=bK}else{b0=bQ;b1=1;b2=bE;break}}}}while(0);bN=+Q(+(bC/+((c[8306]|0)-b0|0)));h[e>>3]=bN;if(b1){bx=0;do{bE=b2+(bx<<3)|0;h[bE>>3]=bN*+h[bE>>3];bx=bx+1|0;}while((bx|0)<(b0|0))}fe(80552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);fe(79488,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);if((c[8302]|0)>0){bx=0;do{bN=+h[bc+(bx<<3)>>3];bE=+P(+bN)<1.0e-30;bQ=b2+(bx<<3)|0;bL=+h[bQ>>3];if(bE){b6=0.0}else{b6=+P(+(bL*100.0/bN))}fe(78752,(v=i,i=i+40|0,c[v>>2]=(c[8236]|0)+(bx*51&-1),h[v+8>>3]=bN,c[v+16>>2]=78264,h[v+24>>3]=bL,h[v+32>>3]=b6,v)|0);if((a[42568]&1)!=0){fi((c[8236]|0)+(bx*51&-1)|0,+h[bQ>>3])}bx=bx+1|0;}while((bx|0)<(c[8302]|0))}fe(77728,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);fe(77224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);if((c[8302]|0)>0){bx=0;do{fe(76616,(v=i,i=i+8|0,c[v>>2]=(c[8236]|0)+(bx*51&-1),v)|0);bx=bx+1|0;}while((bx|0)<(c[8302]|0))}fe(140136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);if((c[8302]|0)>0){bx=0;do{fe(75944,(v=i,i=i+8|0,c[v>>2]=(c[8236]|0)+(bx*51&-1),v)|0);bQ=bd+(bx+bz<<2)|0;bE=0;do{fe(75392,(v=i,i=i+8|0,h[v>>3]=+h[(c[bQ>>2]|0)+(bE<<3)>>3],v)|0);bE=bE+1|0;}while((bE|0)<=(bx|0));fe(140136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);bx=bx+1|0;}while((bx|0)<(c[8302]|0))}uu(b2);b_=c[8302]|0}}while(0);b2=b_-1|0;b6=+h[bc+(b2<<3)>>3];b_=e6((c[8236]|0)+(b2*51&-1)|0)|0;c[b_+16>>2]=2;h[b_+24>>3]=b6;h[b_+32>>3]=0.0;a[b_+8|0]=0;h[f>>3]=-2.0;fh(bc,bd,e,f);uu(c[bd>>2]|0);uu(bd)}az(c[8762]|0);c[8762]=0;uu(c[10636]|0);uu(c[10634]|0);uu(c[10878]|0);uu(c[18130]|0);uu(c[8236]|0);bd=c[10062]|0;if((bd|0)!=0){e1(bd);c[10062]=0}bd=c[10036]|0;uF(35352,bd|0,512);if((uA(bd|0)|0)>>>0<512){i=b;return}a[35863]=0;i=b;return}function fe(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;f=e|0;g=f|0;h=f;c[h>>2]=d;c[h+4>>2]=0;if((a[42560]&1)==0){f=c[m>>2]|0;bX(f|0,b|0,g|0)}c[h>>2]=d;c[h+4>>2]=0;bX(c[8762]|0,b|0,g|0);i=e;return}function ff(b){b=b|0;aV(2,52);a[51680]=1;return}function fg(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0;b=i;d=c[10568]|0;if((d|0)!=0){e=bP(d|0)|0;i=b;return e|0}d=bU(236952)|0;do{if((d|0)!=0){if((a[d]|0)==0){break}f=a[d+((uA(d|0)|0)-1|0)|0]|0;if(!((f<<24>>24|0)==47|(f<<24>>24|0)==92)){e=bP(d|0)|0;i=b;return e|0}f=(uA(d|0)|0)+8|0;g=ut(f)|0;do{if((g|0)==0){gk();h=ut(f)|0;if((h|0)!=0){j=h;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=97072,v)|0);return 0}else{j=g}}while(0);uB(j|0,d|0);g=j+(uA(j|0)|0)|0;f=g|0;w=779381094;a[f]=w&255;w=w>>8;a[f+1|0]=w&255;w=w>>8;a[f+2|0]=w&255;w=w>>8;a[f+3|0]=w&255;f=g+4|0;w=6778732;a[f]=w&255;w=w>>8;a[f+1|0]=w&255;w=w>>8;a[f+2|0]=w&255;w=w>>8;a[f+3|0]=w&255;e=j;i=b;return e|0}}while(0);e=bP(42264)|0;i=b;return e|0}function fh(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0.0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0.0,U=0,V=0.0,W=0.0,X=0.0,Y=0;g=i;i=i+8|0;j=g|0;k=+h[f>>3];if(k!=-1.0){if(k==-2.0){uu(c[8730]|0);uu(c[8720]|0);uu(c[8728]|0);uu(c[8724]|0);uu(c[8726]|0);l=c[8722]|0;uu(c[l>>2]|0);uu(l);n=0;i=g;return n|0}l=c[8306]|0;o=c[8302]|0;if((o+l|0)>0){p=0;q=o;while(1){uD(c[(c[8722]|0)+(p<<2)>>2]|0,c[d+(p<<2)>>2]|0,q<<3);o=p+1|0;r=c[8306]|0;s=c[8302]|0;if((o|0)<(s+r|0)){p=o;q=s}else{t=r;break}}}else{t=l}uD(c[8720]|0,c[8730]|0,t<<3);t=c[8302]|0;if((t|0)>0){l=c[8306]|0;q=c[8722]|0;p=c[8720]|0;r=0;while(1){s=l+r|0;h[(c[q+(s<<2)>>2]|0)+(r<<3)>>3]=+h[f>>3];h[p+(s<<3)>>3]=0.0;s=r+1|0;if((s|0)<(t|0)){r=s}else{u=q;w=p;x=l;break}}}else{u=c[8722]|0;w=c[8720]|0;x=c[8306]|0}hr(u,w,c[8728]|0,c[8726]|0,x+t|0,t,1);t=c[8302]|0;if((t|0)>0){x=c[8728]|0;w=c[8724]|0;u=0;while(1){h[w+(u<<3)>>3]=+h[b+(u<<3)>>3]+ +h[x+(u<<3)>>3];l=u+1|0;if((l|0)<(t|0)){u=l}else{y=w;break}}}else{y=c[8724]|0}fj(y,c[8722]|0,c[8720]|0,j);k=+h[j>>3];if(k>=+h[e>>3]){if((a[42560]&1)==0){j=c[m>>2]|0;aF(42,j|0)}h[f>>3]=+h[4484]*+h[f>>3];n=3;i=g;return n|0}z=+h[f>>3];if(z>1.0e-20){if((a[42560]&1)==0){j=c[m>>2]|0;aF(47,j|0);A=+h[f>>3]}else{A=z}h[f>>3]=A/+h[4485]}h[e>>3]=k;if((c[8306]|0)>0){j=0;do{uD(c[d+(j<<2)>>2]|0,c[(c[8722]|0)+(j<<2)>>2]|0,c[8302]<<3);h[(c[8730]|0)+(j<<3)>>3]=+h[(c[8720]|0)+(j<<3)>>3];j=j+1|0;}while((j|0)<(c[8306]|0))}j=c[8302]|0;if((j|0)<=0){n=2;i=g;return n|0}y=c[8724]|0;w=0;while(1){h[b+(w<<3)>>3]=+h[y+(w<<3)>>3];u=w+1|0;if((u|0)<(j|0)){w=u}else{n=2;break}}i=g;return n|0}w=c[8302]|0;if((w|0)<1){B=0;C=w}else{j=w<<3;w=ut(j)|0;do{if((w|0)==0){gk();y=ut(j)|0;if((y|0)!=0){D=y;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=215008,v)|0);return 0}else{D=w}}while(0);B=D;C=c[8302]|0}c[8724]=B;B=c[8306]|0;D=C+B|0;if((D|0)<1){E=0;F=B;G=C}else{C=D<<3;D=ut(C)|0;do{if((D|0)==0){gk();B=ut(C)|0;if((B|0)!=0){H=B;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=215008,v)|0);return 0}else{H=D}}while(0);E=H;F=c[8306]|0;G=c[8302]|0}c[8730]=E;E=G+F|0;if((E|0)<1){I=0;J=G}else{G=E<<3;E=ut(G)|0;do{if((E|0)==0){gk();F=ut(G)|0;if((F|0)!=0){K=F;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=215008,v)|0);return 0}else{K=E}}while(0);I=K;J=c[8302]|0}c[8720]=I;if((J|0)<1){L=0;M=J}else{I=J<<3;J=ut(I)|0;do{if((J|0)==0){gk();K=ut(I)|0;if((K|0)!=0){N=K;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=215008,v)|0);return 0}else{N=J}}while(0);L=N;M=c[8302]|0}c[8728]=L;L=c[8306]|0;N=M+L|0;if((N|0)<1){O=0;P=L;R=M}else{M=N<<3;N=ut(M)|0;do{if((N|0)==0){gk();L=ut(M)|0;if((L|0)!=0){S=L;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=215008,v)|0);return 0}else{S=N}}while(0);O=S;P=c[8306]|0;R=c[8302]|0}c[8726]=O;c[8722]=hp(R+P|0,R)|0;fj(b,d,c[8730]|0,e);k=+h[1782];if(k!=0.0){T=k;U=c[8302]|0}else{h[f>>3]=0.0;e=c[8306]|0;b=c[8302]|0;if((e|0)>0){R=0;k=0.0;while(1){if((b|0)>0){P=d+(R<<2)|0;O=0;A=k;while(1){z=+h[(c[P>>2]|0)+(O<<3)>>3];V=A+z*z;h[f>>3]=V;S=O+1|0;if((S|0)<(b|0)){O=S;A=V}else{W=V;break}}}else{W=k}O=R+1|0;if((O|0)<(e|0)){R=O;k=W}else{X=W;break}}}else{X=0.0}T=+Q(+(X/+(e|0)/+(b|0)));U=b}h[f>>3]=T;if((U|0)>0){Y=0}else{n=0;i=g;return n|0}while(1){if((Y|0)>0){f=c[8306]|0;b=0;do{h[(c[d+(f+Y<<2)>>2]|0)+(b<<3)>>3]=0.0;h[(c[d+(f+b<<2)>>2]|0)+(Y<<3)>>3]=0.0;b=b+1|0;}while((b|0)<(Y|0))}b=Y+1|0;if((b|0)<(U|0)){Y=b}else{n=0;break}}i=g;return n|0}function fi(b,d){b=b|0;d=+d;var e=0,f=0,g=0,j=0,k=0;e=i;f=(uA(b|0)|0)+5|0;g=ut(f)|0;do{if((g|0)==0){gk();j=ut(f)|0;if((j|0)!=0){k=j;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=179864,v)|0)}else{k=g}}while(0);be(k|0,74544,(v=i,i=i+8|0,c[v>>2]=b,v)|0);b=e6(k)|0;c[b+16>>2]=2;h[b+24>>3]=d;h[b+32>>3]=0.0;a[b+8|0]=0;uu(k);i=e;return}function fj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0,t=0;f=i;h[e>>3]=0.0;g=c[8306]|0;if((g|0)<1){j=0}else{k=g<<3;g=ut(k)|0;do{if((g|0)==0){gk();l=ut(k)|0;if((l|0)!=0){m=l;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=215008,v)|0)}else{m=g}}while(0);j=m}m=c[8302]|0;if((m|0)<1){n=0}else{g=m<<3;m=ut(g)|0;do{if((m|0)==0){gk();k=ut(g)|0;if((k|0)!=0){o=k;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=215008,v)|0)}else{o=m}}while(0);n=o}o=n;fk(a,d);m=c[8302]|0;if((m|0)>0){g=0;while(1){h[n+(g<<3)>>3]=+h[a+(g<<3)>>3];k=g+1|0;if((k|0)<(m|0)){g=k}else{p=0;break}}do{g=a+(p<<3)|0;q=+h[g>>3];r=+P(+q)<1.0e-30?1.0e-30:q;m=n+(p<<3)|0;h[m>>3]=r*1.001;fk(n,j);k=c[8306]|0;if((k|0)>0){q=r*.001;l=0;do{h[(c[b+(l<<2)>>2]|0)+(p<<3)>>3]=(+h[j+(l<<3)>>3]- +h[d+(l<<3)>>3])/q;l=l+1|0;}while((l|0)<(k|0))}h[m>>3]=+h[g>>3];p=p+1|0;}while((p|0)<(c[8302]|0))}uu(j);uu(o);o=c[8306]|0;if((o|0)<=0){i=f;return}j=c[10634]|0;p=c[10878]|0;n=c[8302]|0;a=0;do{k=d+(a<<3)|0;l=p+(a<<3)|0;q=(+h[k>>3]- +h[j+(a<<3)>>3])/+h[l>>3];h[k>>3]=q;h[e>>3]=+h[e>>3]+q*q;if((n|0)>0){k=b+(a<<2)|0;s=0;do{t=(c[k>>2]|0)+(s<<3)|0;h[t>>3]=+h[t>>3]/+h[l>>3];s=s+1|0;}while((s|0)<(n|0))}a=a+1|0;}while((a|0)<(o|0));i=f;return}function fk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0.0;e=i;i=i+24|0;f=e|0;if((c[8302]|0)>0){g=f|0;j=f+8|0;k=f+16|0;l=f;m=0;do{n=+h[b+(m<<3)>>3];c[g>>2]=2;h[j>>3]=n;h[k>>3]=0.0;o=e6((c[8236]|0)+(m*51&-1)|0)|0;p=o+16|0;c[p>>2]=c[l>>2];c[p+4>>2]=c[l+4>>2];c[p+8>>2]=c[l+8>>2];c[p+12>>2]=c[l+12>>2];c[p+16>>2]=c[l+16>>2];c[p+20>>2]=c[l+20>>2];a[o+8|0]=0;m=m+1|0;}while((m|0)<(c[8302]|0))}if((c[8306]|0)<=0){i=e;return}m=f|0;l=f+8|0;k=l;j=f+8|0;g=l;l=0;L9333:while(1){b=0;do{o=55600+(b*51&-1)|0;L9337:do{if((a[(e6(o)|0)+8|0]&1)==0){p=43240;while(1){q=c[p>>2]|0;if((q|0)==0){r=0.0;break L9337}if((aY(o|0,c[q+4>>2]|0)|0)==0){break}else{p=q|0}}p=c[q+16>>2]|0;if((p|0)==3){r=+uz(c[q+24>>2]|0,0);break}else if((p|0)==1){r=+(c[q+24>>2]|0);break}else if((p|0)==2){r=+h[q+24>>3];break}else{s=6863;break L9333}}else{r=0.0}}while(0);c[40264+(b*24&-1)>>2]=2;h[40272+(b*24&-1)>>3]=r;h[40280+(b*24&-1)>>3]=0.0;b=b+1|0;}while((b|0)<5);b=c[8304]|0;if((b|0)>0){o=c[10636]|0;p=0;do{n=+h[o+(aa(b,l)+p<<3)>>3];c[40264+(p*24&-1)>>2]=2;h[40272+(p*24&-1)>>3]=n;h[40280+(p*24&-1)>>3]=0.0;p=p+1|0;}while((p|0)<(b|0))}e4(c[10062]|0,f);if((a[1960]&1)!=0){s=6869;break}b=c[m>>2]|0;if((b|0)==2){t=+h[j>>3]}else if((b|0)==3){t=+uz(c[g>>2]|0,0)}else if((b|0)==1){t=+(c[k>>2]|0)}else{s=6874;break}h[d+(l<<3)>>3]=t;b=l+1|0;if((b|0)<(c[8306]|0)){l=b}else{s=6877;break}}if((s|0)==6869){uD(42289,221560,43);fb()}else if((s|0)==6874){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((s|0)==6877){i=e;return}else if((s|0)==6863){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function fl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;f=i;i=i+32|0;g=f|0;h=f+16|0;j=c[a>>2]|0;k=c[b>>2]|0;l=c[13542]|0;if((l|0)==0){m=0;n=0;o=0}else{p=c[l>>2]|0;q=(p|0)>(j|0)&1;r=c[l+4>>2]|0;s=(r|0)<(j|0)?q|2:q;q=c[l+8>>2]|0;t=(q|0)>(k|0)?s|4:s;s=c[l+12>>2]|0;u=c[d>>2]|0;v=c[e>>2]|0;w=(p|0)>(u|0)&1;p=(r|0)<(u|0)?w|2:w;w=(q|0)>(v|0)?p|4:p;m=(s|0)<(v|0)?w|8:w;n=(s|0)<(k|0)?t|8:t;o=l}l=(n|0)!=0;t=l^1;s=(m|0)==0;if(s&t){x=1;i=f;return x|0}if((m&n|0)!=0){x=0;i=f;return x|0}n=c[d>>2]|0;m=n-j|0;w=c[e>>2]|0;v=w-k|0;do{if((w|0)==(k|0)){y=0;z=k}else{p=c[o+8>>2]|0;q=((aa(p-w|0,m)|0)/(v|0)&-1)+n|0;u=c[o>>2]|0;do{if((q|0)<(u|0)){A=0}else{if((q|0)>(c[o+4>>2]|0)){A=0;break}c[g>>2]=q;c[h>>2]=p;A=1}}while(0);p=o+12|0;q=n+((aa((c[p>>2]|0)-w|0,m)|0)/(v|0)&-1)|0;if((q|0)<(u|0)){y=A;z=w;break}if((q|0)>(c[o+4>>2]|0)){y=A;z=w;break}c[g+(A<<2)>>2]=q;c[h+(A<<2)>>2]=c[p>>2];y=A+1|0;z=w}}while(0);do{if((n|0)==(j|0)){B=y;C=j}else{w=c[o>>2]|0;A=z+((aa(w-n|0,v)|0)/(m|0)&-1)|0;p=o+8|0;q=c[p>>2]|0;do{if((A|0)<(q|0)){D=y;E=q}else{if((A|0)>(c[o+12>>2]|0)){D=y;E=q;break}c[g+(y<<2)>>2]=w;c[h+(y<<2)>>2]=A;D=y+1|0;E=c[p>>2]|0}}while(0);p=c[o+4>>2]|0;A=z+((aa(p-n|0,v)|0)/(m|0)&-1)|0;if((A|0)<(E|0)){B=D;C=n;break}if((A|0)>(c[o+12>>2]|0)){B=D;C=n;break}c[g+(D<<2)>>2]=p;c[h+(D<<2)>>2]=A;B=D+1|0;C=n}}while(0);if((B|0)<2){x=0;i=f;return x|0}B=(j|0)<(C|0);n=B?C:j;D=B?j:C;B=(k|0)<(z|0);o=B?z:k;E=B?k:z;L9395:do{if(s|t){B=c[g>>2]|0;if(l){y=aa(C-B|0,m);A=c[h>>2]|0;if((aa(z-A|0,v)+y|0)>0){c[a>>2]=B;c[b>>2]=A;break}else{c[a>>2]=c[g+4>>2];c[b>>2]=c[h+4>>2];break}}else{A=aa(B-j|0,m);y=c[h>>2]|0;if((aa(y-k|0,v)+A|0)>0){c[d>>2]=B;c[e>>2]=y;break}else{c[d>>2]=c[g+4>>2];c[e>>2]=c[h+4>>2];break}}}else{y=c[g+4>>2]|0;B=c[g>>2]|0;A=(aa(y-B|0,m)|0)<0;p=c[h+4>>2]|0;w=c[h>>2]|0;do{if(!A){if((aa(p-w|0,v)|0)<0){break}c[a>>2]=B;c[b>>2]=w;c[d>>2]=y;c[e>>2]=p;break L9395}}while(0);c[a>>2]=y;c[b>>2]=p;c[d>>2]=B;c[e>>2]=w}}while(0);v=c[a>>2]|0;if((v|0)<(D|0)|(v|0)>(n|0)){x=0;i=f;return x|0}v=c[d>>2]|0;if((v|0)<(D|0)|(v|0)>(n|0)){x=0;i=f;return x|0}n=c[b>>2]|0;if((n|0)<(E|0)|(n|0)>(o|0)){x=0;i=f;return x|0}else{x=c[e>>2]|0;i=f;return((x|0)<=(o|0)&(x|0)>=(E|0))<<31>>31|0}return 0}function fm(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;g=i;i=i+32|0;h=g|0;j=g+8|0;k=g+16|0;l=g+24|0;c[h>>2]=a;c[j>>2]=b;c[k>>2]=d;c[l>>2]=e;m=c[3524]|0;n=c[13542]|0;if((n|0)==0){o=1;p=f}else{q=c[n>>2]|0;r=(q|0)>(a|0)&1;s=c[n+4>>2]|0;t=(s|0)<(a|0)?r|2:r;r=c[n+8>>2]|0;a=(r|0)>(b|0)?t|4:t;t=c[n+12>>2]|0;n=(q|0)>(d|0)&1;q=(s|0)<(d|0)?n|2:n;n=(r|0)>(e|0)?q|4:q;o=(((t|0)<(e|0)?n|8:n)|0)==0;p=(((t|0)<(b|0)?a|8:a)|0)==0?f:f&-3}fl(h,j,k,l);cI[c[m+84>>2]&63](c[h>>2]|0,c[j>>2]|0,c[k>>2]|0,c[l>>2]|0,o?p:p&-2);i=g;return}function fn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0;e=i;i=i+104|0;f=e|0;g=e+16|0;j=e+32|0;k=e+48|0;l=c[b>>2]|0;if((l|0)==2){m=c[b+4>>2]|0;n=43280;while(1){o=c[n>>2]|0;if((o|0)==0){p=6930;break}if((c[o+4>>2]|0)==(m|0)){p=6928;break}else{n=o|0}}do{if((p|0)==6930){n=c[8798]|0;q=(n|0)>0;r=m;L9433:while(1){s=43264;while(1){t=c[s>>2]|0;if((t|0)==0){break}if((c[t+4>>2]|0)==(r|0)){break L9433}else{s=t|0}}u=r-1|0;if(!((r|0)>(n|0)&q)){p=6940;break}r=((u|0)%(n|0)&-1)+1|0}if((p|0)==6940){c[k+4>>2]=u;c[k+40>>2]=1;c[k+44>>2]=u;c[k+8>>2]=u;break}n=k;q=t+8|0;c[n>>2]=c[q>>2];c[n+4>>2]=c[q+4>>2];c[n+8>>2]=c[q+8>>2];c[n+12>>2]=c[q+12>>2];c[n+16>>2]=c[q+16>>2];c[n+20>>2]=c[q+20>>2];c[n+24>>2]=c[q+24>>2];c[n+28>>2]=c[q+28>>2];c[n+32>>2]=c[q+32>>2];c[n+36>>2]=c[q+36>>2];c[n+40>>2]=c[q+40>>2];c[n+44>>2]=c[q+44>>2];c[n+48>>2]=c[q+48>>2];c[n+52>>2]=c[q+52>>2];if((c[(c[3524]|0)+96>>2]&1024|0)!=0){c[k+4>>2]=r;a[k+32|0]=0;break}if((a[k+32|0]&1)!=0){break}c[k+40>>2]=1;c[k+44>>2]=c[k+4>>2]}else if((p|0)==6928){q=k;n=o+8|0;c[q>>2]=c[n>>2];c[q+4>>2]=c[n+4>>2];c[q+8>>2]=c[n+8>>2];c[q+12>>2]=c[n+12>>2];c[q+16>>2]=c[n+16>>2];c[q+20>>2]=c[n+20>>2];c[q+24>>2]=c[n+24>>2];c[q+28>>2]=c[n+28>>2];c[q+32>>2]=c[n+32>>2];c[q+36>>2]=c[n+36>>2];c[q+40>>2]=c[n+40>>2];c[q+44>>2]=c[n+44>>2];c[q+48>>2]=c[n+48>>2];c[q+52>>2]=c[n+52>>2];if((a[k+32|0]&1)!=0){break}c[k+40>>2]=1;c[k+44>>2]=c[k+4>>2]}}while(0);o=k+40|0;v=o;w=c[o>>2]|0}else{v=b;w=l}do{if((w|0)==0){cM[c[d+64>>2]&511](-2);i=e;return}else if((w|0)==1){l=c[d+144>>2]|0;if((l|0)==0){cM[c[d+64>>2]&511](c[v+4>>2]|0);i=e;return}else{cM[l&511](v);i=e;return}}else if((w|0)==3){l=c[d+144>>2]|0;if((l|0)==0){break}cM[l&511](v);i=e;return}}while(0);do{if(a[31104]|0){if((c[d+144>>2]|0)==0){break}if((w|0)==6){x=+h[v+8>>3];l=c[34]|0;b=(a[66852]&1)==0;do{if((a[64788+(l*688&-1)|0]&1)==0){if(b){y=x;break}if(x>0.0){z=+_(+x);y=z/+h[8358];break}else{y=+h[8341];break}}else{if(b){y=+Z(+(x*+h[64800+(l*688&-1)>>3]));break}if(+h[64792+(l*688&-1)>>3]==+h[8357]){y=x;break}y=x*+h[64800+(l*688&-1)>>3]/+h[8358]}}while(0);x=+h[8341];do{if(x<y){z=+h[8342];if(z<=y){A=+((a[20668]|0)==112&1|0);break}B=(y-x)/(z-x);if((a[20668]|0)==112){A=B;break}A=1.0-B}else{A=+((a[20668]|0)!=112&1|0)}}while(0);l=(c[3524]|0)+144|0;if((c[l>>2]|0)==0){i=e;return}c[f>>2]=5;h[f+8>>3]=A;c[f+4>>2]=0;cM[c[l>>2]&511](f);i=e;return}else if((w|0)==4){x=+h[v+8>>3];B=+h[8341];do{if(B<x){z=+h[8342];if(z<=x){C=+((a[20668]|0)==112&1|0);break}D=(x-B)/(z-B);if((a[20668]|0)==112){C=D;break}C=1.0-D}else{C=+((a[20668]|0)!=112&1|0)}}while(0);l=(c[3524]|0)+144|0;if((c[l>>2]|0)==0){i=e;return}c[g>>2]=5;h[g+8>>3]=C;c[g+4>>2]=0;cM[c[l>>2]&511](g);i=e;return}else if((w|0)==5){B=+h[v+8>>3];if((a[20668]|0)==112){E=B}else{E=1.0-B}l=(c[3524]|0)+144|0;if((c[l>>2]|0)==0){i=e;return}c[j>>2]=5;h[j+8>>3]=E;c[j+4>>2]=0;cM[c[l>>2]&511](j);i=e;return}else{i=e;return}}}while(0);cM[c[d+64>>2]&511](-2);i=e;return}function fo(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0;g=i;i=i+32|0;j=g|0;k=g+8|0;l=g+16|0;m=g+24|0;if((c[b+88>>2]|0)==0){c[e>>2]=0;n=0}else{c[e>>2]=~~(+h[3817]*+((c[d+28>>2]|0)>>>0>>>0)*.5);n=~~(+h[3817]*+((c[d+24>>2]|0)>>>0>>>0)*.5)}c[f>>2]=n;n=b+144|0;if((a[37384]&1)==0){fN(n,l,m,91736);c[e>>2]=(c[e>>2]|0)+~~+h[l>>3];o=(c[f>>2]|0)+~~+h[m>>3]|0;c[f>>2]=o;i=g;return}else{fx(n,j,k,91736);c[e>>2]=(c[e>>2]|0)+(c[j>>2]|0);o=(c[f>>2]|0)+(c[k>>2]|0)|0;c[f>>2]=o;i=g;return}}function fp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0;f=i;i=i+48|0;g=f|0;j=f+16|0;k=f+32|0;l=f+40|0;fn(e+72|0,c[3524]|0);m=a[e+184|0]&1;do{if(m<<24>>24!=0){if((a[37456]&1)!=0){break}a[37456]=1;n=c[(c[3524]|0)+88>>2]|0;if((n|0)==0){break}cO[n&255](179864)}}while(0);a[37456]=m;fo(e,c[3524]|0,k,l);m=e+52|0;n=c[m>>2]|0;do{if((n|0)==0){o=7011}else{if((cO[c[(c[3524]|0)+72>>2]&255](n)|0)==0){o=7011;break}ln((c[k>>2]|0)+b|0,(c[l>>2]|0)+d|0,c[e+60>>2]|0,c[e+48>>2]|0,0,c[m>>2]|0,c[e+64>>2]|0);p=c[(c[3524]|0)+72>>2]|0;cO[p&255](0)}}while(0);if((o|0)==7011){ln((c[k>>2]|0)+b|0,(c[l>>2]|0)+d|0,c[e+60>>2]|0,c[e+48>>2]|0,0,0,c[e+64>>2]|0)}if((c[e+88>>2]|0)==0){a[37456]=0;i=f;return}l=c[3524]|0;do{if((c[l+96>>2]&128|0)==0){if((b|0)<=0){a[37456]=0;i=f;return}if(!((c[l+8>>2]|0)>>>0>b>>>0&(d|0)>0)){a[37456]=0;i=f;return}if((c[l+12>>2]|0)>>>0>d>>>0){break}a[37456]=0;i=f;return}}while(0);k=g;m=e+128|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];m=c[e+92>>2]|0;q=+h[e+112>>3];k=c[l+92>>2]|0;if(q<0.0){cK[k&63](+h[3817])}else{cK[k&63](q)}cK[c[(c[3524]|0)+112>>2]&63](+h[e+104>>3]);k=c[(c[3524]|0)+64>>2]|0;if((m|0)<-5){cM[k&511](-2)}else{cM[k&511](m)}k=c[3524]|0;do{if((a[e+120|0]&1)==0){if((c[k+96>>2]&1024|0)!=0){r=k;break}c[g>>2]=1;c[g+4>>2]=m;o=7026}else{o=7026}}while(0);if((o|0)==7026){fn(g,k);r=c[3524]|0}cR[c[r+80>>2]&127](b,d,c[e+96>>2]|0);e=j;c[e>>2]=c[14084];c[e+4>>2]=c[56340>>2];c[e+8>>2]=c[56344>>2];c[e+12>>2]=c[56348>>2];e=c[14075]|0;do{if((c[14074]|0)!=0){q=+h[7040];d=c[(c[3524]|0)+92>>2]|0;if(q<0.0){cK[d&63](+h[3817]);break}else{cK[d&63](q);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[7039]);d=c[(c[3524]|0)+64>>2]|0;if((e|0)<-5){cM[d&511](-2)}else{cM[d&511](e)}d=c[3524]|0;do{if((a[56328]&1)==0){if((c[d+96>>2]&1024|0)==0){c[j>>2]=1;c[j+4>>2]=e;break}else{a[37456]=0;i=f;return}}}while(0);fn(j,d);a[37456]=0;i=f;return}function fq(a,b){a=+a;b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0.0,l=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0.0,u=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0;d=i;ft(a,b);if((c[5163]|0)==103){i=d;return}e=c[5174]|0;if((e|0)==104){f=b|0;g=b+8|0;a=+h[g>>3];j=b+16|0;k=+h[j>>3];if(a==0.0){h[j>>3]=k;h[g>>3]=k;h[f>>3]=k;i=d;return}l=+h[f>>3]*6.0;n=~~+O(+l);o=l- +(n|0);l=k*(1.0-a);p=k*(1.0-a*o);q=k*(1.0-a*(1.0-o));r=(n|0)%6&-1;if((r|0)==1){h[f>>3]=p;h[g>>3]=k;h[j>>3]=l;i=d;return}else if((r|0)==0){h[f>>3]=k;h[g>>3]=q;h[j>>3]=l;i=d;return}else if((r|0)==4){h[f>>3]=q;h[g>>3]=l;h[j>>3]=k;i=d;return}else if((r|0)==3){h[f>>3]=l;h[g>>3]=p;h[j>>3]=k;i=d;return}else if((r|0)==2){h[f>>3]=l;h[g>>3]=k;h[j>>3]=q;i=d;return}else{h[f>>3]=k;h[g>>3]=l;h[j>>3]=p;i=d;return}}else if((e|0)==121){j=b|0;p=+h[j>>3];g=b+8|0;l=+h[g>>3];f=b+16|0;k=+h[f>>3];q=p-l*.956+k*.621;do{if(q<0.0){s=0.0}else{if(q>1.0){s=1.0;break}s=q}}while(0);h[j>>3]=s;s=p-l*.272-k*.647;do{if(s<0.0){t=0.0}else{if(s>1.0){t=1.0;break}t=s}}while(0);h[g>>3]=t;t=p-l*1.105-k*1.702;do{if(t<0.0){u=0.0}else{if(t>1.0){u=1.0;break}u=t}}while(0);h[f>>3]=u;i=d;return}else if((e|0)==99){f=b|0;g=b+8|0;u=+h[g>>3];j=b+16|0;t=+h[j>>3];k=1.0- +h[f>>3];do{if(k<0.0){w=0.0}else{if(k>1.0){w=1.0;break}w=k}}while(0);h[f>>3]=w;w=1.0-u;do{if(w<0.0){x=0.0}else{if(w>1.0){x=1.0;break}x=w}}while(0);h[g>>3]=x;x=1.0-t;do{if(x<0.0){y=0.0}else{if(x>1.0){y=1.0;break}y=x}}while(0);h[j>>3]=y;i=d;return}else if((e|0)==120){j=b|0;y=+h[j>>3];g=b+8|0;x=+h[g>>3];f=b+16|0;t=+h[f>>3];w=y*1.91-x*.5338-t*.2891;do{if(w<0.0){z=0.0}else{if(w>1.0){z=1.0;break}z=w}}while(0);h[j>>3]=z;z=y*-.9844+x*1.999-t*.0279;do{if(z<0.0){A=0.0}else{if(z>1.0){A=1.0;break}A=z}}while(0);h[g>>3]=A;A=y*.0585-x*.1187-t*.9017;do{if(A<0.0){B=0.0}else{if(A>1.0){B=1.0;break}B=A}}while(0);h[f>>3]=B;i=d;return}else if((e|0)==114){i=d;return}else{cf(c[m>>2]|0,91064,(v=i,i=i+24|0,c[v>>2]=179392,c[v+8>>2]=310,c[v+16>>2]=e<<24>>24,v)|0);i=d;return}}function fr(b,d){b=+b;d=d|0;var e=0,f=0,g=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0.0,p=0,q=0.0,r=0,s=0.0;e=i;i=i+24|0;f=e|0;g=c[5168]|0;L9652:do{if((g|0)==0){j=b}else{k=+O(+(+(g|0)*b))/+(g-1|0);if((c[5163]|0)!=100){j=k;break}l=c[5172]|0;if((l|0)<3&k==0.0){j=k;break}m=c[5173]|0;n=0;o=k;while(1){if((n|0)>=(l|0)){j=o;break L9652}k=+h[m+(n<<5)>>3];p=n+1|0;q=+h[m+(p<<5)>>3];r=q>b;do{if(k<=b&r){if(!(o<k|o>q)){s=o;break}s=(k+q)*.5}else{s=o}}while(0);if(r){j=s;break}else{n=p;o=s}}}}while(0);fq(j,f);j=+h[f+8>>3];s=+h[f+16>>3];a[d|0]=~~(+h[f>>3]*255.0+.5);a[d+1|0]=~~(j*255.0+.5);a[d+2|0]=~~(s*255.0+.5);i=e;return}function fs(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,g=0,j=0.0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,Q=0.0,R=0.0,S=0.0,T=0,U=0,V=0,W=0,X=0,Y=0;a=i;i=i+24|0;f=a|0;g=(b|0)<1?2e3:b;j=d>0.0?d:.003;b=ut(1600)|0;k=b;l=ut(2400)|0;m=l;ft(0.0,m);h[b>>3]=0.0;n=b+8|0;c[n>>2]=c[l>>2];c[n+4>>2]=c[l+4>>2];c[n+8>>2]=c[l+8>>2];c[n+12>>2]=c[l+12>>2];c[n+16>>2]=c[l+16>>2];c[n+20>>2]=c[l+20>>2];d=+(g|0);ft(1.0/d,l+24|0);do{if((g|0)>0){l=0;o=0.0;n=50;b=k;p=100;q=m;r=1;while(1){s=q;t=p;u=o;v=2;while(1){w=v+l|0;if((w|0)>(g|0)){x=s;y=t;z=u;break}A=+(w|0)/d;if((v|0)==(t|0)){B=v+50|0;C=uv(s,B<<5)|0;D=B}else{C=s;D=t}B=C+(v*24&-1)|0;ft(A,B);E=v-2|0;F=v-1|0;G=+h[C+(E*24&-1)>>3];H=+h[C+(E*24&-1)+8>>3];I=+h[C+(E*24&-1)+16>>3];J=+h[C+(F*24&-1)>>3];K=+h[C+(F*24&-1)+8>>3];L=+h[C+(F*24&-1)+16>>3];M=+h[B>>3];N=+h[C+(v*24&-1)+8>>3];O=+h[C+(v*24&-1)+16>>3];if(G<J&J>M){x=C;y=D;z=A;break}if(H<K&K>N){x=C;y=D;z=A;break}if(I<L&L>O){x=C;y=D;z=A;break}if(G>J&J<M){x=C;y=D;z=A;break}if(H>K&K<N){x=C;y=D;z=A;break}if(I>L&L<O){x=C;y=D;z=A;break}L=+h[C>>3];I=+h[C+8>>3];K=+h[C+16>>3];H=+(v|0);J=(M-L)/H;M=(N-I)/H;N=(O-K)/H;H=0.0;B=1;while(1){if((B|0)>=(v|0)){Q=H;break}O=+(B|0);G=+P(+(L+J*O- +h[C+(B*24&-1)>>3]));R=+P(+(I+M*O- +h[C+(B*24&-1)+8>>3]));S=+P(+(K+N*O- +h[C+(B*24&-1)+16>>3]));O=G>H?G:H;G=R>O?R:O;O=S>G?S:G;if(O<j){H=O;B=B+1|0}else{Q=O;break}}if(Q>j){x=C;y=D;z=A;break}else{s=C;t=D;u=A;v=v+1|0}}if((r|0)==(n|0)){t=r+25|0;T=uv(b,t<<5)|0;U=t}else{T=b;U=n}h[T+(r<<5)>>3]=z;t=T+(r<<5)+8|0;s=x+((v-1|0)*24&-1)|0;c[t>>2]=c[s>>2];c[t+4>>2]=c[s+4>>2];c[t+8>>2]=c[s+8>>2];c[t+12>>2]=c[s+12>>2];c[t+16>>2]=c[s+16>>2];c[t+20>>2]=c[s+20>>2];V=r+1|0;t=x;c[t>>2]=c[s>>2];c[t+4>>2]=c[s+4>>2];c[t+8>>2]=c[s+8>>2];c[t+12>>2]=c[s+12>>2];c[t+16>>2]=c[s+16>>2];c[t+20>>2]=c[s+20>>2];s=x+24|0;t=x+(v*24&-1)|0;c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];c[s+8>>2]=c[t+8>>2];c[s+12>>2]=c[t+12>>2];c[s+16>>2]=c[t+16>>2];c[s+20>>2]=c[t+20>>2];if((w|0)<(g|0)){l=w;o=z;n=U;b=T;p=y;q=x;r=V}else{break}}ft(1.0,f);if((V|0)!=(U|0)){W=T;X=V;Y=x;break}W=uv(T,(V<<5)+32|0)|0;X=V;Y=x}else{ft(1.0,f);W=k;X=1;Y=m}}while(0);h[W+(X<<5)>>3]=1.0;m=W+(X<<5)+8|0;k=f;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];c[m+16>>2]=c[k+16>>2];c[m+20>>2]=c[k+20>>2];uu(Y);c[e>>2]=X+1;i=a;return W|0}function ft(b,d){b=+b;d=d|0;var e=0,f=0,g=0.0,j=0,k=0.0,l=0.0,n=0.0,o=0.0,p=0,q=0.0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0;e=i;i=i+24|0;f=e|0;do{if(b<0.0){g=0.0}else{if(b<=1.0){g=b;break}g=1.0}}while(0);j=c[5163]|0;if((j|0)==99){b=(+h[2706]/3.0+g*+h[2707])*6.283185307179586;k=+h[2705];if(k!=1.0){l=+R(+g,+(1.0/k))}else{l=g}k=(1.0-l)*l*+h[2708]*.5;n=+S(+b);o=+T(+b);b=l+k*(n*-.14861+o*1.78277);p=d|0;h[p>>3]=b;q=l+k*(n*-.29227-o*.90649);r=d+8|0;h[r>>3]=q;o=l+n*1.97294*k;s=d+16|0;h[s>>3]=o;do{if(b>1.0){h[p>>3]=1.0}else{if(b>=0.0){break}h[p>>3]=0.0}}while(0);do{if(q>1.0){h[r>>3]=1.0}else{if(q>=0.0){break}h[r>>3]=0.0}}while(0);if(o>1.0){h[s>>3]=1.0;i=e;return}if(o>=0.0){i=e;return}h[s>>3]=0.0;i=e;return}else if((j|0)==100){if(g<0.0){h[d>>3]=+h[(c[5173]|0)+8>>3];h[d+8>>3]=+h[(c[5173]|0)+16>>3];h[d+16>>3]=+h[(c[5173]|0)+24>>3];i=e;return}s=c[5172]|0;if(g>1.0){r=s-1|0;h[d>>3]=+h[(c[5173]|0)+(r<<5)+8>>3];h[d+8>>3]=+h[(c[5173]|0)+(r<<5)+16>>3];h[d+16>>3]=+h[(c[5173]|0)+(r<<5)+24>>3];i=e;return}L9731:do{if((s|0)>1){r=c[5173]|0;p=0;t=s-1|0;L9733:while(1){u=p;while(1){if((u|0)==(t|0)){w=t;x=r;break L9731}y=(u+t|0)/2&-1;if(+h[r+(y<<5)>>3]<g){u=y+1|0}else{p=u;t=y;continue L9733}}}}else{w=0;x=c[5173]|0}}while(0);s=x+(w<<5)+8|0;o=+h[x+(w<<5)>>3];if(o==g){h[d>>3]=+h[s>>3];h[d+8>>3]=+h[x+(w<<5)+16>>3];h[d+16>>3]=+h[x+(w<<5)+24>>3];i=e;return}else{t=w-1|0;q=+h[x+(t<<5)>>3];b=(g-q)/(o-q);q=+h[x+(t<<5)+8>>3];h[d>>3]=q+b*(+h[s>>3]-q);q=+h[x+(t<<5)+16>>3];h[d+8>>3]=q+b*(+h[x+(w<<5)+16>>3]-q);q=+h[x+(t<<5)+24>>3];h[d+16>>3]=q+b*(+h[x+(w<<5)+24>>3]-q);i=e;return}}else if((j|0)==114){h[d>>3]=+fu(c[5164]|0,g);h[d+8>>3]=+fu(c[5165]|0,g);h[d+16>>3]=+fu(c[5166]|0,g);i=e;return}else if((j|0)==102){c[5182]=2;h[2592]=g;h[2593]=0.0;e4(c[5178]|0,f);if((a[1960]&1)!=0){uf(-1,86464,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}w=f|0;x=c[w>>2]|0;if((x|0)==1){z=+(c[f+8>>2]|0)}else if((x|0)==3){z=+uz(c[f+8>>2]|0,0)}else if((x|0)==2){z=+h[f+8>>3]}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(z<0.0){A=0.0}else{A=z>1.0?1.0:z}c[5260]=2;h[2631]=g;h[2632]=0.0;e4(c[5256]|0,f);if((a[1960]&1)!=0){uf(-1,85592,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}x=c[w>>2]|0;if((x|0)==3){B=+uz(c[f+8>>2]|0,0)}else if((x|0)==1){B=+(c[f+8>>2]|0)}else if((x|0)==2){B=+h[f+8>>3]}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(B<0.0){C=0.0}else{C=B>1.0?1.0:B}c[5338]=2;h[2670]=g;h[2671]=0.0;e4(c[5334]|0,f);if((a[1960]&1)!=0){uf(-1,84488,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}x=c[w>>2]|0;if((x|0)==1){D=+(c[f+8>>2]|0)}else if((x|0)==3){D=+uz(c[f+8>>2]|0,0)}else if((x|0)==2){D=+h[f+8>>3]}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(D<0.0){E=0.0}else{E=D>1.0?1.0:D}h[d>>3]=A;h[d+8>>3]=C;h[d+16>>3]=E;i=e;return}else if((j|0)==103){E=+R(+g,+(1.0/+h[2705]));h[d+16>>3]=E;h[d+8>>3]=E;h[d>>3]=E;i=e;return}else{cf(c[m>>2]|0,87488,(v=i,i=i+24|0,c[v>>2]=179392,c[v+8>>2]=272,c[v+16>>2]=j<<24>>24,v)|0);i=e;return}}function fu(a,b){a=a|0;b=+b;var d=0,e=0.0,f=0,g=0.0,h=0.0;d=i;if((a|0)<0){e=1.0-b;f=-a|0}else{e=b;f=a}do{if((f|0)==18){g=+P(+(+S(+(e*360.0*.017453292519943295))))}else if((f|0)==33){g=+P(+(e*2.0+-.5))}else if((f|0)==0){h=0.0;i=d;return+h}else if((f|0)==25){g=+P(+(e*3.0+-2.0))}else if((f|0)==10){g=+S(+(e*90.0*.017453292519943295))}else if((f|0)==2){h=1.0;i=d;return+h}else if((f|0)==11){g=+P(+(e+-.5))}else if((f|0)==31){if(e<=.42){h=0.0;i=d;return+h}if(e<.92){g=e*2.0+-.84;break}else{h=1.0;i=d;return+h}}else if((f|0)==15){g=+T(+(e*360.0*.017453292519943295))}else if((f|0)==16){g=+S(+(e*360.0*.017453292519943295))}else if((f|0)==26){g=e*1.5+-.5}else if((f|0)==21){g=e*3.0}else if((f|0)==14){g=+P(+(+S(+(e*180.0*.017453292519943295))))}else if((f|0)==19){g=+P(+(+T(+(e*720.0*.017453292519943295))))}else if((f|0)==20){g=+P(+(+S(+(e*720.0*.017453292519943295))))}else if((f|0)==23){g=e*3.0+-2.0}else if((f|0)==24){g=+P(+(e*3.0+-1.0))}else if((f|0)==28){g=+P(+(e*1.5+-.5))}else if((f|0)==3){g=e}else if((f|0)==22){g=e*3.0+-1.0}else if((f|0)==29){g=+P(+(e*1.5+-1.0))}else if((f|0)==27){g=e*1.5+-1.0}else if((f|0)==1){h=.5;i=d;return+h}else if((f|0)==30){if(e<=.25){h=0.0;i=d;return+h}if(e<.57){g=e/.32+-.78125;break}else{h=1.0;i=d;return+h}}else if((f|0)==34){g=e*2.0}else if((f|0)==35){g=e*2.0+-.5}else if((f|0)==5){g=e*e*e}else if((f|0)==6){g=e*e*e*e}else if((f|0)==9){g=+T(+(e*90.0*.017453292519943295))}else if((f|0)==36){g=e*2.0+-1.0}else if((f|0)==4){g=e*e}else if((f|0)==12){b=e*2.0+-1.0;g=b*b}else if((f|0)==32){if(e<=.42){g=e*4.0;break}if(e>.92){g=e/.08-11.5;break}else{g=e*-2.0+1.84;break}}else if((f|0)==7){g=+Q(+e)}else if((f|0)==13){g=+T(+(e*180.0*.017453292519943295))}else if((f|0)==8){g=+Q(+(+Q(+e)))}else if((f|0)==17){g=+P(+(+T(+(e*360.0*.017453292519943295))))}else{cf(c[m>>2]|0,143136,(v=i,i=i+8|0,c[v>>2]=(c[5162]|0)-1,v)|0);bd(1);return 0.0}}while(0);if(g<=0.0){h=0.0;i=d;return+h}h=g<1.0?g:1.0;i=d;return+h}function fv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0,R=0,U=0,V=0,W=0,X=0,Y=0,$=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aJ=0.0,aK=0.0,aL=0.0,aM=0.0,aO=0.0,aP=0,aQ=0,aR=0.0,aS=0.0,aT=0.0,aU=0.0,aV=0.0,aW=0.0,aX=0,aY=0,aZ=0,a_=0.0,a$=0,a0=0,a1=0.0,a2=0.0,a3=0,a4=0.0,a5=0,a6=0,a7=0,a9=0,ba=0,bb=0,bc=0,bd=0,be=0,bf=0,bg=0,bh=0,bi=0,bj=0,bk=0,bl=0,bm=0,bn=0,bo=0,bp=0,bq=0,br=0,bs=0,bt=0,bu=0,bv=0,bx=0,by=0,bz=0,bA=0,bB=0.0,bC=0,bD=0,bE=0,bF=0,bG=0,bH=0,bI=0,bJ=0,bK=0,bL=0,bM=0,bN=0,bO=0,bP=0,bQ=0,bR=0,bS=0,bT=0,bU=0,bV=0,bW=0,bX=0.0,bY=0,bZ=0,b_=0.0,b$=0.0,b0=0.0,b1=0.0,b2=0.0,b3=0.0,b5=0.0,b6=0.0,b7=0.0,b8=0,b9=0,ca=0,cb=0.0,cc=0.0,cd=0.0,ce=0.0,cf=0.0,cg=0,ch=0,ci=0.0,cj=0,ck=0.0,cl=0.0,cm=0.0,cn=0.0,co=0.0,cp=0.0,cq=0.0,cr=0.0,cs=0.0,ct=0.0,cu=0.0,cv=0.0,cw=0.0,cx=0.0,cy=0.0,cz=0.0,cA=0.0,cB=0,cC=0,cD=0.0,cE=0,cF=0,cH=0,cI=0.0,cJ=0,cL=0,cP=0,cQ=0,cT=0,cU=0,cV=0,cW=0,cX=0,cY=0,cZ=0,c_=0,c$=0,c0=0,c1=0,c2=0,c3=0,c4=0,c5=0,c6=0.0,c7=0.0,c8=0,c9=0,da=0,db=0,dc=0,dd=0,de=0,df=0,dg=0,dh=0,di=0,dj=0.0,dk=0.0,dl=0,dm=0.0,dn=0,dp=0,dq=0.0,dr=0,ds=0,dt=0,du=0,dv=0,dw=0.0,dx=0.0,dy=0,dA=0,dB=0,dC=0,dE=0,dF=0,dG=0,dH=0,dI=0,dJ=0,dK=0,dL=0,dM=0,dN=0,dO=0,dP=0,dQ=0.0,dR=0.0,dS=0,dT=0,dU=0,dV=0,dW=0.0,dX=0,dY=0,dZ=0,d_=0;f=i;i=i+1992|0;j=f|0;k=f+48|0;l=f+96|0;n=f+104|0;o=f+112|0;p=f+120|0;q=f+128|0;r=f+144|0;s=f+160|0;t=f+168|0;u=f+176|0;w=f+184|0;x=f+192|0;y=f+200|0;z=f+208|0;A=f+216|0;B=f+224|0;C=f+240|0;D=f+256|0;E=f+264|0;F=f+272|0;G=f+312|0;H=f+328|0;I=f+336|0;J=f+344|0;K=f+384|0;L=f+400|0;M=f+424|0;N=f+432|0;O=f+440|0;Q=f+448|0;R=f+456|0;U=f+464|0;V=f+472|0;W=f+480|0;X=f+488|0;Y=f+496|0;$=f+504|0;ab=f+512|0;ac=f+520|0;ad=f+528|0;ae=f+536|0;af=f+544|0;ag=f+552|0;ah=f+560|0;ai=f+568|0;aj=f+576|0;ak=f+584|0;al=f+600|0;am=f+608|0;an=f+616|0;ao=f+624|0;ap=f+632|0;aq=f+648|0;ar=f+664|0;as=f+672|0;at=f+680|0;au=f+688|0;av=f+696|0;aw=f+704|0;ax=f+712|0;ay=f+728|0;az=f+736|0;aA=f+864|0;aB=f+872|0;aC=f+880|0;aD=f+1912|0;aE=f+1920|0;aF=f+1928|0;aG=f+1936|0;aH=c[3524]|0;aJ=+g[3536]*.017453292519943295;aK=+S(+aJ);aL=+T(+aJ);uE(3136,0,24);uE(3176,0,32);h[401]=1.0;uE(3216,0,32);h[406]=1.0;h[391]=aK;aJ=-0.0-aL;h[392]=aJ;h[395]=aL;h[396]=aK;aL=+g[3538]*.017453292519943295;aM=+S(+aL);aO=+T(+aL);aL=-0.0-aO;aP=az;aQ=0;aR=aK;aK=aJ;aJ=0.0;aS=0.0;while(1){aT=aK*0.0;aU=aJ*0.0;aV=aS*0.0;h[az+(aQ<<5)>>3]=aR+0.0+aT+aU+aV;aW=aR*0.0+0.0;h[az+(aQ<<5)+8>>3]=aW+aM*aK+aO*aJ+aV;h[az+(aQ<<5)+16>>3]=aW+aK*aL+aM*aJ+aV;h[az+(aQ<<5)+24>>3]=aS+(aW+aT+aU);aX=aQ+1|0;if((aX|0)>=4){break}aQ=aX;aR=+h[3128+(aX<<5)>>3];aK=+h[3136+(aX<<5)>>3];aJ=+h[3144+(aX<<5)>>3];aS=+h[3152+(aX<<5)>>3]}c[782]=c[aP>>2];c[783]=c[aP+4>>2];c[784]=c[aP+8>>2];c[785]=c[aP+12>>2];c[786]=c[aP+16>>2];c[787]=c[aP+20>>2];c[788]=c[aP+24>>2];c[789]=c[aP+28>>2];aQ=az+32|0;c[790]=c[aQ>>2];c[3164>>2]=c[aQ+4>>2];c[3168>>2]=c[aQ+8>>2];c[3172>>2]=c[aQ+12>>2];c[3176>>2]=c[aQ+16>>2];c[3180>>2]=c[aQ+20>>2];c[3184>>2]=c[aQ+24>>2];c[3188>>2]=c[aQ+28>>2];aX=az+64|0;c[798]=c[aX>>2];c[3196>>2]=c[aX+4>>2];c[3200>>2]=c[aX+8>>2];c[3204>>2]=c[aX+12>>2];c[3208>>2]=c[aX+16>>2];c[3212>>2]=c[aX+20>>2];c[3216>>2]=c[aX+24>>2];c[3220>>2]=c[aX+28>>2];aY=az+96|0;c[806]=c[aY>>2];c[3228>>2]=c[aY+4>>2];c[3232>>2]=c[aY+8>>2];c[3236>>2]=c[aY+12>>2];c[3240>>2]=c[aY+16>>2];c[3244>>2]=c[aY+20>>2];c[3248>>2]=c[aY+24>>2];c[3252>>2]=c[aY+28>>2];aS=+g[3534]*.5;aZ=0;do{aJ=+h[3128+(aZ<<5)>>3];aK=+h[3136+(aZ<<5)>>3];aR=aK*0.0;aM=+h[3144+(aZ<<5)>>3];aL=aM*0.0;aO=+h[3152+(aZ<<5)>>3];aU=aO*0.0;h[az+(aZ<<5)>>3]=aS*aJ+0.0+aR+aL+aU;aT=aJ*0.0+0.0;h[az+(aZ<<5)+8>>3]=aT+aS*aK+aL+aU;aK=aT+aR;h[az+(aZ<<5)+16>>3]=aK+aS*aM+aU;h[az+(aZ<<5)+24>>3]=aO+(aK+aL);aZ=aZ+1|0;}while((aZ|0)<4);c[782]=c[aP>>2];c[783]=c[aP+4>>2];c[784]=c[aP+8>>2];c[785]=c[aP+12>>2];c[786]=c[aP+16>>2];c[787]=c[aP+20>>2];c[788]=c[aP+24>>2];c[789]=c[aP+28>>2];c[790]=c[aQ>>2];c[3164>>2]=c[aQ+4>>2];c[3168>>2]=c[aQ+8>>2];c[3172>>2]=c[aQ+12>>2];c[3176>>2]=c[aQ+16>>2];c[3180>>2]=c[aQ+20>>2];c[3184>>2]=c[aQ+24>>2];c[3188>>2]=c[aQ+28>>2];c[798]=c[aX>>2];c[3196>>2]=c[aX+4>>2];c[3200>>2]=c[aX+8>>2];c[3204>>2]=c[aX+12>>2];c[3208>>2]=c[aX+16>>2];c[3212>>2]=c[aX+20>>2];c[3216>>2]=c[aX+24>>2];c[3220>>2]=c[aX+28>>2];c[806]=c[aY>>2];c[3228>>2]=c[aY+4>>2];c[3232>>2]=c[aY+8>>2];c[3236>>2]=c[aY+12>>2];c[3240>>2]=c[aY+16>>2];c[3244>>2]=c[aY+20>>2];c[3248>>2]=c[aY+24>>2];c[3252>>2]=c[aY+28>>2];if((a[30528]&1)!=0){uk(83256,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}do{if((a[624]&1)==0){aY=c[34]|0;aS=+h[64664+(aY*688&-1)>>3];a_=aS-(+h[64672+(aY*688&-1)>>3]-aS)*+h[77]}else{aS=+h[77];if((a[64788]&1)==0){a_=aS;break}aL=+_(+aS);a_=aL/+h[8100]}}while(0);h[7076]=a_;aY=c[200]|0;L9870:do{if((c[64916+(aY*688&-1)>>2]|0)==0){if((c[64916+((c[144]|0)*688&-1)>>2]|0)==0){a$=0}else{a0=7282;break}while(1){if(a$>>>0>=8){break}if((a[65036+(a$*688&-1)|0]&1)!=0){a0=7282;break L9870}if((a[65037+(a$*688&-1)|0]&1)==0){a$=a$+1|0}else{a0=7282;break L9870}}aX=c[34]|0;aL=+h[64664+(aX*688&-1)>>3];h[5279]=aL;aS=+h[64672+(aX*688&-1)>>3];h[6915]=aS;a1=aL;a2=aS}else{a0=7282}}while(0);do{if((a0|0)==7282){a$=c[34]|0;aS=+h[64664+(a$*688&-1)>>3];if((c[64656+(a$*688&-1)>>2]&2|0)==0){h[5279]=aS<a_?aS:a_;aL=+h[64672+(a$*688&-1)>>3];h[6915]=aL>a_?aL:a_;a1=aS;a2=aL;break}else{h[5279]=aS>a_?aS:a_;aL=+h[64672+(a$*688&-1)>>3];h[6915]=aL<a_?aL:a_;a1=aS;a2=aL;break}}}while(0);if(+h[64664+(aY*688&-1)>>3]==+h[64672+(aY*688&-1)>>3]){uk(175032,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}aY=c[144]|0;if(+h[64664+(aY*688&-1)>>3]==+h[64672+(aY*688&-1)>>3]){uk(141592,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(a1==a2){uk(126608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((a[14080]&1)==0){lk()}do{if(a[14088]|0){if((a[33512]&1)==0){break}if(!(a[13032]|0)){break}aY=c[(c[3524]|0)+104>>2]|0;if((aY|0)!=0){cS[aY&511]()}a[13032]=0}else{cS[c[(c[3524]|0)+52>>2]&511]();a[14088]=1}}while(0);cM[c[(c[3524]|0)+168>>2]&511](0);aY=c[3524]|0;if((c[aY+96>>2]&16|0)!=0){c[7271]=-1}c[13880]=0;c[13881]=(c[aY+8>>2]|0)-1;c[13882]=0;c[13883]=(c[aY+12>>2]|0)-1;a[25280]=0;cM[c[aY+168>>2]&511](1);aY=c[3524]|0;c[1100]=0;a$=aY+24|0;aX=aY+28|0;a2=+h[4524];if(a2<0.0){a3=0;a4=+h[3817]}else{a1=+h[3817];a3=~~(a2*+((c[aY+20>>2]|0)>>>0>>>0)+a1*+((c[aX>>2]|0)>>>0>>>0));a4=a1}c[9002]=a3;a1=+h[4525];a3=~~(a1*a4*+((c[a$>>2]|0)>>>0>>>0)*1.25);c[9022]=a3;aQ=aY+16|0;aP=c[aQ>>2]|0;if(a3>>>0<aP>>>0){c[9022]=~~(a1*+(aP>>>0>>>0))}aP=(d|0)>0;if(aP){a3=0;aZ=0;az=0;a5=b;while(1){a6=c[a5+16>>2]|0;do{if((a6|0)==0){a7=aZ;a9=a3}else{if((a[a6]|0)==0){a7=aZ;a9=a3;break}if((a[a5+22|0]&1)!=0){a7=aZ;a9=a3;break}ba=lp(a6)|0;a7=(ba|0)>(aZ|0)?ba:aZ;a9=a3+1|0}}while(0);do{if((c[11690]|0)==0){bb=a7;bc=a9}else{a6=a[35888]|0;if((a6&1)==0){bb=a7;bc=a9;break}ba=c[a5+256>>2]|0;if((ba|0)==0){bb=a7;bc=a9;break}else{bd=0;be=0;bf=ba;bg=a6}while(1){do{if((bg&1)==0){bh=be;bi=bd}else{if((a[bf+8|0]|0)==0){bh=be;bi=bd;break}a6=bf+9|0;ba=lp(a6)|0;bj=b4(a6|0,73808)|0;a6=ba-bj|0;bh=((ba|0)!=(bj|0)&1)+be|0;bi=(a6|0)>(bd|0)?a6:bd}}while(0);a6=c[bf>>2]|0;if((a6|0)==0){break}bd=bi;be=bh;bf=a6;bg=a[35888]|0}bb=(bi|0)>(a7|0)?bi:a7;bc=bh+a9|0}}while(0);a6=az+1|0;if((a6|0)<(d|0)){a3=bc;aZ=bb;az=a6;a5=c[a5>>2]|0}else{bk=bc;bl=bb;break}}}else{bk=0;bl=0}c[6962]=bk;c[8712]=bl;a1=+(ga(36288,ay)|0);bl=~~(a1-(+h[4524]+2.0));a1=+(c[ay>>2]|0);h[4487]=a1;bk=c[8712]|0;if((bl|0)>(bk|0)){c[8712]=bl;bm=bl}else{bm=bk}bk=bm+4|0;bm=aY+20|0;bl=aa(bk,c[bm>>2]|0);bb=c[9002]|0;bc=bl+bb|0;c[9028]=bc;bl=c[8786]|0;a5=(bl|0)==3;a4=+h[4395];do{if(a5){az=~~(a4*+((c[aY+8>>2]|0)>>>0>>>0)+.5);c[7938]=az;bn=az}else{az=c[bm>>2]|0;if(a4<0.0){aZ=(c[aX>>2]|0)+(az<<1)|0;c[7938]=aZ;bn=aZ;break}else{aZ=~~(a4*+(az>>>0>>>0)+.5);c[7938]=aZ;bn=aZ;break}}}while(0);aZ=c[6598]|0;az=(aZ|0)==3;if(az){bo=~~(+h[3301]*+((c[aY+8>>2]|0)>>>0>>>0)+.5)}else{bo=~~(+g[178]*+((c[aY+8>>2]|0)>>>0>>>0)- +(c[bm>>2]<<1>>>0>>>0)- +((c[aX>>2]|0)>>>0>>>0))}c[7939]=bo;a3=c[6962]|0;c[9014]=a3;c[9024]=1;a9=c[9339]|0;bh=(a9|0)>0;if((a3|0)>(a9|0)&bh){c[9014]=a9;a7=((a3-1|0)/(a9|0)&-1)+1|0;c[9024]=a7;bp=a9;bq=a7}else{bp=a3;bq=1}a7=a[36120]&1;bi=a7<<24>>24==0;do{if(bi){br=bp;bs=bc;bt=bq}else{if(!(((c[9031]|0)-1|0)>>>0<2&(c[9032]|0)==1)){br=bp;bs=bc;bt=bq;break}if((a3|0)>0){bg=bo-bn|0;bf=(bg>>>0)/((aa(c[bm>>2]|0,bk)+bb|0)>>>0)>>>0;be=a3-1|0;bd=((be|0)/(((bf|0)==0?1:bf)|0)&-1)+1|0;bf=(bd|0)>(a9|0)&bh?a9:bd;c[9014]=bf;bd=((be|0)/(bf|0)&-1)+1|0;c[9024]=bd;be=(bg|0)/(bd|0)&-1;c[9028]=be;br=bf;bs=be;bt=bd;break}else{c[9028]=0;c[9024]=0;c[9014]=0;br=0;bs=0;bt=0;break}}}while(0);bb=(c[14100]|0)==3;do{if(bb){bk=~~(+h[7052]*+((c[aY+12>>2]|0)>>>0>>>0)+.5);c[7940]=bk;bu=bk}else{a4=+h[7052];bk=c[aQ>>2]|0;if((c[5094]|0)!=0&a4>=0.0){bq=~~(a4*+(bk>>>0>>>0));c[7940]=bq;bu=bq;break}else{bq=~~(+(bk>>>0>>>0)*2.5+1.0);c[7940]=bq;bu=bq;break}}}while(0);do{if(a7<<24>>24!=0&(br|0)!=0){if(!(((c[9031]|0)-1|0)>>>0<2&(c[9032]|0)==1)){bv=bu;break}a4=+(aa(c[9022]|0,br)|0);bq=~~(+(bu|0)+(a4+a1*+((c[aQ>>2]|0)>>>0>>>0)));c[7940]=bq;bv=bq}else{bv=bu}}while(0);bu=c[1119]|0;L9970:do{if((bu|0)!=0){br=(c[1100]|0)+1|0;c[1100]=br;c[ay>>2]=0;a7=a[bu]|0;if(a7<<24>>24==0){break}else{bx=1;by=br;bz=a7}while(1){if(bz<<24>>24==92){a7=by+1|0;c[1100]=a7;bA=a7}else{bA=by}c[ay>>2]=bx;if(bx>>>0>=(uA(bu|0)|0)>>>0){break L9970}a7=a[bu+bx|0]|0;bx=bx+1|0;by=bA;bz=a7}}}while(0);bz=(c[1066]|0)==3;if(bz){bB=+h[535]*+((c[aY+12>>2]|0)>>>0>>>0)+.5}else{bB=+g[38]*+((c[aY+12>>2]|0)>>>0>>>0)- +((c[aQ>>2]|0)>>>0>>>0)*(+(c[1100]|0)+1.5)+-1.0}bA=~~bB;c[7941]=bA;do{if(bi){bC=bn;bD=bl;bE=aZ;bF=bo}else{by=c[9031]|0;if((by|0)==0){a0=7360}else if((by|0)==1|(by|0)==2){if((c[9032]|0)==3){a0=7360}else{bG=bt}}else{bG=bt}do{if((a0|0)==7360){bx=~~(+(((((bA-bv|0)>>>0)/((c[aQ>>2]|0)>>>0)>>>0)-1|0)>>>0>>>0)-a1);bu=(bx|0)>(a9|0)&bh?a9:bx;bx=(bu|0)==0?1:bu;c[ay>>2]=bx;if((a3|0)<=(bx|0)){bG=bt;break}bu=a3-1|0;a7=((bu|0)/(bx|0)&-1)+1|0;c[9024]=a7;c[9014]=((bu|0)/(a7|0)&-1)+1;bG=a7}}while(0);a7=by-1|0;bu=c[9032]|0;bx=(bu|0)!=3|a7>>>0>1;if(bx|az){bH=bx?aZ:3;bI=bo}else{bx=c[bm>>2]|0;br=((bo-bs|0)-aa(bG-1|0,bs)|0)+(bx<<1)|0;c[7939]=br;bH=aZ;bI=br}if(!(a7>>>0<2&(bu|0)==2)){bC=bn;bD=bl;bE=bH;bF=bI;break}if(a5){bC=bn;bD=3;bE=bH;bF=bI;break}bu=c[bm>>2]|0;a7=((bs+bn|0)+aa(bG-1|0,bs)|0)-(bu<<1)|0;c[7938]=a7;bC=a7;bD=bl;bE=bH;bF=bI}}while(0);bI=(c[5094]|0)==0;bH=c[18072]|0;do{if(bI&(bH|0)>0){bl=bA-bv|0;bs=bF-bC|0;if((bl|0)>(bs|0)){bG=(bl-bs|0)/2&-1;bn=bG+bv|0;c[7940]=bn;bm=bA-bG|0;c[7941]=bm;bJ=bF;bK=bC;bL=bm;bM=bn;break}else{bn=(bs-bl|0)/2&-1;bl=bn+bC|0;c[7938]=bl;bs=bF-bn|0;c[7939]=bs;bJ=bs;bK=bl;bL=bA;bM=bv;break}}else{bJ=bF;bK=bC;bL=bA;bM=bv}}while(0);bv=(bD|0)==3;if(bv){bN=bK}else{bD=~~(+(bK|0)+ +((c[aY+8>>2]|0)>>>0>>>0)*+g[184]);c[7938]=bD;bN=bD}bD=(bE|0)==3;if(bD){bO=bJ}else{bE=~~(+(bJ|0)+ +((c[aY+8>>2]|0)>>>0>>>0)*+g[184]);c[7939]=bE;bO=bE}if(bz){bP=bL}else{bE=~~(+(bL|0)+ +((c[aY+12>>2]|0)>>>0>>>0)*+g[44]);c[7941]=bE;bP=bE}if(bb){bQ=bM}else{bE=~~(+(bM|0)+ +((c[aY+12>>2]|0)>>>0>>>0)*+g[44]);c[7940]=bE;bQ=bE}bE=(bO+bN|0)/2&-1;c[186]=bE;aY=(bQ+bP|0)/2&-1;c[46]=aY;bM=bO-bN|0;bL=(bM<<2|0)/7&-1;c[180]=bL;bJ=bP-bQ|0;bK=(bJ<<2|0)/7&-1;c[40]=bK;if(bz|bb){bb=~~(+(bJ|0)/+g[3534]);c[40]=bb;bR=bb}else{bR=bK}if(bD|bv){bv=~~(+(bM|0)/+g[3534]);c[180]=bv;bS=bv}else{bS=bL}if((bR|0)==0){c[40]=1;bT=1}else{bT=bR}if((bS|0)==0){c[180]=1;bU=1}else{bU=bS}do{if(bI){if((c[(c[3524]|0)+96>>2]&128|0)==0){c[13542]=55520;bV=bU;bW=bT;break}else{c[13542]=0;bV=bU;bW=bT;break}}else{a1=+g[18074];do{if(a1!=0.0){do{if(a1<0.0){bS=c[200]|0;bB=+h[64672+(bS*688&-1)>>3]- +h[64664+(bS*688&-1)>>3];if(bB==0.0){a0=7392;break}bS=c[144]|0;bX=(-0.0-a1)*+P(+((+h[64672+(bS*688&-1)>>3]- +h[64664+(bS*688&-1)>>3])/bB))}else{a0=7392}}while(0);if((a0|0)==7392){bX=a1}if(!(bX>=.01&bX<=100.0)){bY=bU;bZ=bT;break}bB=+(bT|0);a4=+(bU|0);a2=bX*+((c[a$>>2]|0)>>>0>>>0)/+((c[aX>>2]|0)>>>0>>>0);if(bB/a4>a2){bS=~~(a4*a2);c[40]=bS;bY=bU;bZ=bS;break}else{bS=~~(bB/a2);c[180]=bS;bY=bS;bZ=bT;break}}else{bY=bU;bZ=bT}}while(0);c[13542]=31752;bV=bY;bW=bZ}}while(0);c[16536]=bN;c[16537]=bO;c[16364]=bQ;c[16365]=bP;bX=+h[5279];a1=+h[6915];c[16192]=~~bX;c[16193]=~~a1;a2=a1-bX;a1=2.0/a2*+g[3532];h[2]=a1;bP=c[144]|0;bB=+h[64664+(bP*688&-1)>>3];a4=2.0/(+h[64672+(bP*688&-1)>>3]-bB);h[21]=a4;bP=c[200]|0;a_=+h[64664+(bP*688&-1)>>3];aL=2.0/(+h[64672+(bP*688&-1)>>3]-a_);h[91]=aL;h[12]=0.0;h[68]=0.0;h[96]=0.0;do{if((bH|0)>1){do{if(a4>aL){aS=1.0-aL/a4;h[68]=aS;h[21]=aL;b_=aL;b$=0.0;b0=aL;b1=aS}else{if(aL<=a4){b_=aL;b$=0.0;b0=a4;b1=0.0;break}aS=1.0-a4/aL;h[96]=aS;h[91]=a4;b_=a4;b$=aS;b0=a4;b1=0.0}}while(0);if((bH|0)<=2){b2=a1;b3=b_;b5=b$;b6=b0;b7=b1;break}h[2]=b_;b2=b_;b3=b_;b5=b$;b6=b0;b7=b1}else{b2=a1;b3=aL;b5=0.0;b6=a4;b7=0.0}}while(0);a4=b2*a2*-.5+1.0;h[12]=a4;if(!bI){a2=+h[8255];aL=+h[8169];a1=(a2-a_)*b3+b5+-1.0;b1=(aL-bB)*b6+b7+-1.0;b0=a4+(0.0-bX)*b2+-1.0;b2=+h[403];bX=+h[391];a4=+h[395];b$=b0*+h[399];b_=+h[404];aS=+h[392];aK=+h[396];aO=b0*+h[400];aU=+h[406];aM=+h[394];aR=+h[398];aT=b0*+h[402];b0=aU+a1*aM+b1*aR+aT;aJ=b0==0.0?1.0e-5:b0;b0=+(bV|0);bV=~~((b2+a1*bX+b1*a4+b$)/aJ*b0)+bE|0;aW=+(bW|0);bW=~~((b_+a1*aS+b1*aK+aO)/aJ*aW)+aY|0;aJ=+h[8256];b1=+h[8170];a1=b5+b3*(aJ-a_)+-1.0;a_=b7+b6*(b1-bB)+-1.0;bB=aT+(aU+aM*a1+aR*a_);aR=bB==0.0?1.0e-5:bB;bI=~~(b0*((b$+(b2+bX*a1+a4*a_))/aR))+bE|0;bE=~~(aW*((aO+(b_+aS*a1+aK*a_))/aR))+aY|0;h[8269]=+(bI-bV|0)/(aJ-a2);h[8183]=+(bE-bW|0)/(b1-aL);c[16536]=bV;c[16537]=bI;c[16364]=bW;c[16365]=bE}bE=(e|0)!=0;if(!bE){do{if(a[31104]|0){if((dz()|0)!=0){b8=0;break}b8=(c[(c[3524]|0)+144>>2]|0)!=0&1}else{b8=0}}while(0);a[55536]=b8}fO(c[10818]|0,-1,3);b8=ax;c[b8>>2]=c[14084];c[b8+4>>2]=c[56340>>2];c[b8+8>>2]=c[56344>>2];c[b8+12>>2]=c[56348>>2];b8=c[14075]|0;do{if((c[14074]|0)!=0){aL=+h[7040];e=c[(c[3524]|0)+92>>2]|0;if(aL<0.0){cK[e&63](+h[3817]);break}else{cK[e&63](aL);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[7039]);e=c[(c[3524]|0)+64>>2]|0;if((b8|0)<-5){cM[e&511](-2)}else{cM[e&511](b8)}e=c[3524]|0;do{if((a[56328]&1)==0){if((c[e+96>>2]&1024|0)!=0){break}c[ax>>2]=1;c[ax+4>>2]=b8;a0=7425}else{a0=7425}}while(0);if((a0|0)==7425){fn(ax,e)}e=~~(+g[3536]/90.0);ax=c[200]|0;if((e+1&2|0)==0){aL=+h[64664+(ax*688&-1)>>3];h[14]=aL;b1=+h[64672+(ax*688&-1)>>3];h[3305]=b1;b8=c[144]|0;a2=+h[64672+(b8*688&-1)>>3];h[7088]=a2;b9=64664+(b8*688&-1)|0;ca=b8;cb=aL;cc=a2;cd=b1}else{b1=+h[64672+(ax*688&-1)>>3];h[14]=b1;a2=+h[64664+(ax*688&-1)>>3];h[3305]=a2;ax=c[144]|0;aL=+h[64664+(ax*688&-1)>>3];h[7088]=aL;b9=64672+(ax*688&-1)|0;ca=ax;cb=a2;cc=aL;cd=b1}b1=+h[b9>>3];h[5263]=b1;if((e&2|0)==0){h[13]=+h[64664+(ca*688&-1)>>3];ce=cd;cf=cb;cg=64672+(ca*688&-1)|0}else{h[13]=+h[64672+(ca*688&-1)>>3];ce=cb;cf=cd;cg=64664+(ca*688&-1)|0}h[3304]=+h[cg>>3];h[7089]=cf;h[5264]=ce;cg=+g[3538]>90.0;h[69]=cg?cf:ce;h[97]=cg?cc:b1;do{if((a[38984]&1)==0&(c[10026]|0)==0){fw(b,d,0,0)}else{if(!((c[5094]|0)!=0&(c[14088]|0)==0)){break}fw(b,d,3,0)}}while(0);if((a[38984]&1)==0&(c[10026]|0)==-1){fw(b,d,2,0)}cg=(c[5094]|0)==0;if(cg){b1=+h[7076];ca=c[200]|0;cc=+h[64664+(ca*688&-1)>>3];ce=+h[91];cf=+h[96];cd=(+h[14]-cc)*ce+cf+-1.0;e=c[144]|0;cb=+h[64664+(e*688&-1)>>3];aL=+h[21];a2=+h[68];aJ=(+h[13]-cb)*aL+a2+-1.0;aR=+h[5279];a_=+h[2];aK=+h[12];a1=(b1-aR)*a_+aK+-1.0;aS=+h[403];b_=+h[391];aO=+h[395];aW=+h[399];a4=a1*aW;bX=+h[406];b2=+h[394];b$=+h[398];b0=+h[402];bB=a1*b0;a1=bX+cd*b2+aJ*b$+bB;b9=c[180]|0;aM=+(b9|0);ax=c[186]|0;b8=~~((aS+cd*b_+aJ*aO+a4)/(a1==0.0?1.0e-5:a1)*aM)+ax|0;a1=cf+ce*(+h[7089]-cc)+-1.0;aJ=a2+aL*(+h[7088]-cb)+-1.0;cd=bB+(bX+b2*a1+b$*aJ);bW=~~(aM*((a4+(aS+b_*a1+aO*aJ))/(cd==0.0?1.0e-5:cd)))+ax|0;cd=cf+ce*(+h[3305]-cc)+-1.0;aJ=a2+aL*(+h[3304]-cb)+-1.0;a1=bB+(bX+b2*cd+b$*aJ);bI=~~(aM*((a4+(aS+b_*cd+aO*aJ))/(a1==0.0?1.0e-5:a1)))+ax|0;c[7938]=(b8|0)<(bW|0)?b8:bW;c[7939]=(bW|0)>(bI|0)?bW:bI;ch=ca;ci=cc;cj=e;ck=cb;cl=b1;cm=ce;cn=cf;co=aL;cp=a2;cq=aR;cr=a_;cs=aK;ct=aS;cu=b_;cv=aO;cw=aW;cx=bX;cy=b2;cz=b$;cA=b0;cB=b9;cC=ax}else{ax=c[200]|0;b0=+h[64664+(ax*688&-1)>>3];b9=c[144]|0;b$=+h[64664+(b9*688&-1)>>3];b2=+h[7076];bX=+h[91];aW=+h[96];aO=(b0-b0)*bX+aW+-1.0;b_=+h[21];aS=+h[68];aK=(b$-b$)*b_+aS+-1.0;a_=+h[5279];aR=+h[2];a2=+h[12];aL=(b2-a_)*aR+a2+-1.0;cf=+h[403];ce=+h[391];b1=+h[395];cb=+h[399];cc=aL*cb;a1=+h[404];aJ=+h[392];cd=+h[396];a4=aL*+h[400];aM=+h[406];bB=+h[394];aU=+h[398];aT=+h[402];b6=aL*aT;aL=aM+aO*bB+aK*aU+b6;b7=aL==0.0?1.0e-5:aL;e=c[180]|0;aL=+(e|0);ca=c[186]|0;b3=+(c[40]|0);bI=c[46]|0;b5=aW+bX*(+h[64672+(ax*688&-1)>>3]-b0)+-1.0;aV=aS+b_*(+h[64672+(b9*688&-1)>>3]-b$)+-1.0;cD=b6+(aM+bB*b5+aU*aV);b6=cD==0.0?1.0e-5:cD;c[7938]=~~((cf+aO*ce+aK*b1+cc)/b7*aL)+ca;c[7939]=~~(aL*((cc+(cf+ce*b5+b1*aV))/b6))+ca;c[7940]=~~(b3*((a4+(a1+aJ*b5+cd*aV))/b6))+bI;c[7941]=~~((a1+aO*aJ+aK*cd+a4)/b7*b3)+bI;ch=ax;ci=b0;cj=b9;ck=b$;cl=b2;cm=bX;cn=aW;co=b_;cp=aS;cq=a_;cr=aR;cs=a2;ct=cf;cu=ce;cv=b1;cw=cb;cx=aM;cy=bB;cz=aU;cA=aT;cB=e;cC=ca}if((c[1119]|0)!=0){if(cg){fx(4560,aA,aB,109288);cg=(c[aA>>2]|0)+(((c[7939]|0)+(c[7938]|0)|0)/2&-1)|0;ca=(c[aB>>2]|0)+(c[7941]|0)|0;cE=cg;cF=ca+aa(c[aH+20>>2]|0,c[1100]|0)|0}else{if((c[64916+(ch*688&-1)>>2]&4|0)==0){cH=0}else{ca=~~(+((c[(c[3524]|0)+24>>2]|0)>>>0>>>0)*+h[65056+(ch*688&-1)>>3]*((a[65072+(ch*688&-1)|0]&1)!=0?-1.0:1.0));cH=(ca|0)<0?0:ca}aT=(ci-ci)*cm+cn+-1.0;aU=(ck-ck)*co+cp+-1.0;bB=(cl-cq)*cr+cs+-1.0;cs=bB*cw;cw=bB*cA;cA=cx+aT*cy+aU*cz+cw;cr=cA==0.0?1.0e-5:cA;cA=+(cB|0);cB=~~((+h[404]+aT*+h[392]+aU*+h[396]+bB*+h[400])/cr*+(c[40]|0));ca=c[46]|0;bB=cn+cm*(+h[64672+(ch*688&-1)>>3]-ci)+-1.0;ci=cp+co*(+h[64672+(cj*688&-1)>>3]-ck)+-1.0;ck=cw+(cx+cy*bB+cz*ci);fx(4560,aA,aB,109288);cE=(c[aA>>2]|0)+(((~~(cA*((cs+(ct+cu*bB+cv*ci))/(ck==0.0?1.0e-5:ck)))+~~((ct+aT*cu+aU*cv+cs)/cr*cA)|0)+(cC<<1)|0)/2&-1)|0;cF=~~(+(((ca+cH|0)+cB|0)+(c[aB>>2]|0)|0)+ +((c[aH+16>>2]|0)>>>0>>>0)*(+(c[1100]|0)+1.0+-.5))}aB=a[4600]&1;do{if(aB<<24>>24!=0){if((a[37456]&1)!=0){break}a[37456]=1;cB=c[(c[3524]|0)+88>>2]|0;if((cB|0)==0){break}cO[cB&255](179864)}}while(0);a[37456]=aB;fn(4488,aH);ln(cE,cF,c[1119]|0,1,0,0,c[1120]|0);if((c[1122]|0)!=0){cM[c[aH+64>>2]&511](-2)}a[37456]=0}L10120:do{if((c[1183]|0)!=0){fx(4816,aE,aF,109288);cF=c[aH+16>>2]|0;cE=(c[aE>>2]|0)+cF|0;if((c[1166]|0)==0){cI=+((((c[7941]|0)-cF|0)+(c[aF>>2]|0)|0)>>>0>>>0)}else{cI=+(cF>>>0>>>0)+(+g[44]*+h[64672+((c[144]|0)*688&-1)>>3]+ +(c[aF>>2]|0))}cF=~~cI;cG(aD|0);aB=aC|0;cB=c[1183]|0;cH=aN(aD|0)|0;bw(aB|0,1024,cB|0,cH|0);do{if((c[1164]|0)!=0){cH=aH+72|0;if((cO[c[cH>>2]&255](-270)|0)==0){break}cB=c[1184]|0;if((c[1166]|0)==0){ln(cE,cF,aB,2,0,-270,cB)}else{ln(cE,cF,aB,0,0,-270,cB)}cB=c[cH>>2]|0;cO[cB&255](0);break L10120}}while(0);cB=c[1184]|0;if((c[1166]|0)==0){ln(cE,cF,aB,0,0,0,cB);break}else{ln(cE,cF,aB,0,2,0,cB);break}}}while(0);do{if(!bE){if((a[55536]&1)==0){break}if(!(a[31104]|0)){break}if(!((a[54016]|0)!=110&(c[13506]|0)==0)){break}dD(2)}}while(0);fO(c[10818]|0,0,3);aD=c[10822]|0;aC=c[(c[3524]|0)+92>>2]|0;if((aC|0)!=0){cK[aC&63](+h[3817])}if((aD|0)!=0){aC=aD;do{if((c[aC+56>>2]|0)==0){fK(aC+8|0,at,au,202256);fp(~~+h[at>>3],~~+h[au>>3],aC)}aC=c[aC>>2]|0;}while((aC|0)!=0)}fy(0);cM[c[(c[3524]|0)+168>>2]&511](2);do{if((a[38984]&1)!=0){if((a[46752]&1)==0|bE){break}gs();c[225]=0;c[11605]=0;c[7625]=0}}while(0);if((a[36229]&1)==0){c[9010]=0;aC=c[9002]|0;c[9006]=aC;au=aH+20|0;at=c[8712]|0;c[8990]=aa(at+1|0,-(c[au>>2]|0)|0);c[8986]=-(c[au>>2]|0);aD=~~(+((c[au>>2]|0)>>>0>>>0)*(+h[4526]+ +(at+2|0)));c[8998]=aD;at=aC+(c[au>>2]|0)|0;c[8994]=at;cJ=0;cL=aC;cP=aD;cQ=at}else{at=c[9002]|0;aD=-at|0;c[9010]=aD;c[9006]=0;aC=aH+20|0;c[8990]=c[aC>>2];au=c[8712]|0;c[8986]=aa(au+1|0,c[aC>>2]|0);aF=~~(+((c[aC>>2]|0)>>>0>>>0)*(+(au+2|0)+ +h[4526]));c[8994]=aF;au=at+(c[aC>>2]|0)|0;c[8998]=au;cJ=aD;cL=0;cP=au;cQ=aF}c[9018]=(cL+cJ|0)/2&-1;cJ=c[9031]|0;L10163:do{if((a[36120]&1)==0){cT=0;cU=cP;a0=7507}else{do{if((cJ|0)==0){a0=7493}else if((cJ|0)==3){a0=7508;break L10163}else{if((c[9032]|0)!=1){a0=7493;break}cL=c[6962]|0;if((cL|0)<=0){cV=0;cW=cP;cX=c[aH+16>>2]|0;break}aF=c[7938]|0;au=(c[7939]|0)-aF|0;aD=(au|0)/(c[9028]|0)&-1;aC=(aD|0)<1?1:aD;c[9024]=aC;aD=cL-1|0;cL=(aD+aC|0)/(aC|0)&-1;c[9014]=cL;aC=c[9339]|0;if((cL|0)>(aC|0)&(aC|0)>0){c[9014]=aC;cY=aC}else{cY=cL}cL=(aD+cY|0)/(cY|0)&-1;c[9024]=cL;c[9028]=(au|0)/(cL|0)&-1;aD=aa(au,cP);au=((aD|0)/(aa(cQ+cP|0,cL)|0)&-1)+aF|0;cI=+g[44]*+((c[aH+12>>2]|0)>>>0>>>0);cA=cI+ +(aa(c[9022]|0,cY)|0);aF=c[aH+16>>2]|0;cV=~~(cA+(+h[4487]+2.0)*+(aF>>>0>>>0));cW=au;cX=aF}}while(0);L10174:do{if((a0|0)==7493){if((c[9044]|0)==0){aB=c[aH+16>>2]|0;cZ=((c[7941]|0)-(c[aH+24>>2]|0)|0)-aB|0;c_=aB}else{aB=(c[aH+24>>2]|0)+(c[7940]|0)|0;cA=+((aB+aa(c[9014]|0,c[9022]|0)|0)>>>0>>>0);aB=c[aH+16>>2]|0;cZ=~~(cA+ +h[4487]*+(aB>>>0>>>0));c_=aB}aB=(cJ|0)!=0;cF=c[9032]|0;if(aB&(cF|0)==3){cV=cZ;cW=((c[aH+28>>2]|0)+(c[7939]|0)|0)+cP|0;cX=c_;break}if(aB&(cF|0)==2){cV=cZ;cW=(c[aH+20>>2]<<1)+cP|0;cX=c_;break}if((c[9045]|0)==0){cV=cZ;cW=((c[aH+28>>2]|0)+(c[7938]|0)|0)+cP|0;cX=c_;break}do{if((c[6598]|0)==3){if((cJ-1|0)>>>0>=2){break}cV=cZ;cW=(((c[7939]|0)-cQ|0)+(c[9028]|0)|0)-(c[aH+20>>2]<<1)|0;cX=c_;break L10174}}while(0);cF=(c[7939]|0)-cQ|0;cV=cZ;cW=cF-aa((c[9024]|0)-1|0,c[9028]|0)|0;cX=c_}}while(0);c[56]=~~(+(cV|0)- +h[4487]*+(cX>>>0>>>0));cT=cV;cU=cW;a0=7507}}while(0);if((a0|0)==7507){if((cJ|0)==3){a0=7508}else{c$=cT;c0=cU;c1=cQ;c2=cP}}if((a0|0)==7508){fK(36136,ar,as,128552);c$=~~+h[as>>3];c0=~~+h[ar>>3];c1=c[8994]|0;c2=c[8998]|0}ar=(c1+c0|0)+aa((c[9024]|0)-1|0,c[9028]|0)|0;c[9335]=ar;c1=c0-c2|0;c[9334]=c1;cA=+(c$|0);c2=aH+16|0;c[9337]=~~(cA+ +((c[c2>>2]|0)>>>0>>>0)*+h[4487]);c[9336]=c$-aa(c[9014]|0,c[9022]|0);if((c1|0)<0){c[9334]=0;c3=0}else{c3=c1}c1=a[36120]|0;if((c1&1)==0|(a[36288]|0)==0){c4=c$;c5=c1}else{if((c[9330]|0)==3&+h[4666]<0.0){fn(36272,aH)}else{fn(37320,aH)}c1=aH+96|0;if((c[c1>>2]&32|0)==0){c6=0.0}else{c6=(a8(36288,94)|0)==0?0.0:.51}ln((c3+ar|0)/2&-1,~~(+(c[9337]|0)-(c6*.5+.5)*+((c[c2>>2]|0)>>>0>>>0)),36288,1,0,0,c[9329]|0);do{if((c[c1>>2]&32|0)==0){c7=c6}else{if((a8(36288,95)|0)==0){c7=c6;break}c7=c6+.3}}while(0);h[4487]=c7+ +h[4487];c6=c7*+((c[c2>>2]|0)>>>0>>>0);c[9336]=~~(+(c[9336]|0)-c6);cM[c[aH+64>>2]&511](-2);c4=~~(cA-c6);c5=a[36120]|0}c1=c[9059]|0;do{if((c5&1)!=0&(c1|0)>-3){ar=c[9336]|0;if((c[9337]|0)==(ar|0)){c8=c4;break}c3=~~(+h[4527]*.5*+((c[c2>>2]|0)>>>0>>>0));c[9336]=ar-(c3<<1);ar=c4-c3|0;c3=aq;c[c3>>2]=c[9068];c[c3+4>>2]=c[36276>>2];c[c3+8>>2]=c[36280>>2];c[c3+12>>2]=c[36284>>2];do{if((c[9058]|0)!=0){c6=+h[4532];c3=c[(c[3524]|0)+92>>2]|0;if(c6<0.0){cK[c3&63](+h[3817]);break}else{cK[c3&63](c6);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[4531]);c3=c[(c[3524]|0)+64>>2]|0;if((c1|0)<-5){cM[c3&511](-2)}else{cM[c3&511](c1)}c3=c[3524]|0;do{if((a[36264]&1)==0){if((c[c3+96>>2]&1024|0)!=0){c9=c3;break}c[aq>>2]=1;c[aq+4>>2]=c1;a0=7533}else{a0=7533}}while(0);if((a0|0)==7533){fn(aq,c3);c9=c[3524]|0}c$=c[c9+172>>2]|0;if((c$|0)!=0){cM[c$&511](0)}c$=aH+56|0;cN[c[c$>>2]&255](c[9334]|0,c[9336]|0);as=aH+60|0;cN[c[as>>2]&255](c[9334]|0,c[9337]|0);cN[c[as>>2]&255](c[9335]|0,c[9337]|0);cN[c[as>>2]&255](c[9335]|0,c[9336]|0);cN[c[as>>2]&255](c[9334]|0,c[9336]|0);cP=c[(c[3524]|0)+172>>2]|0;if((cP|0)!=0){cM[cP&511](1)}cN[c[c$>>2]&255](c[9334]|0,~~(+(c[9337]|0)- +h[4487]*+((c[c2>>2]|0)>>>0>>>0)));cN[c[as>>2]&255](c[9335]|0,~~(+(c[9337]|0)- +h[4487]*+((c[c2>>2]|0)>>>0>>>0)));c8=ar}else{c8=c4}}while(0);do{if((a[38984]&1)!=0&(c[9744]|0)==0){if((a[46752]&1)==0|bE){break}cM[c[(c[3524]|0)+168>>2]&511](6);gv(b,d);cM[c[(c[3524]|0)+168>>2]&511](7)}}while(0);c4=c8-((c[9022]|0)/2&-1)|0;c[56]=c4;do{if((d|0)==1){if((c[b+252>>2]|0)!=1){break}if((a[55536]&1)==0){break}if(!((c[b+12>>2]|0)==352|(c[7662]|0)==1)){break}c8=c[m>>2]|0;aI(94544,137,1,c8|0)}}while(0);if((c[11690]|0)==0&(a[55536]&1)!=0&(a[30641]|0)==100){c8=c[6952]|0;if((c8|0)!=0){uu(c8)}c[6952]=0;c[18084]=0;c[12904]=0;da=1}else{da=0}L10258:do{if(!(bE|aP^1)){c8=ap;c2=ap|0;c9=ap+4|0;aq=aG;c1=aG+4|0;c5=C;as=aG+40|0;c$=as;cP=aG|0;cQ=aG+16|0;cU=aG+32|0;cT=C|0;cJ=C+4|0;cW=aH+64|0;cV=B;cX=B|0;c_=B+4|0;cZ=aG+24|0;cY=j|0;cF=j+8|0;aB=j+16|0;cE=j+32|0;aF=j+40|0;au=k|0;cL=k+8|0;aD=k+16|0;aC=k+32|0;at=k+40|0;aE=aG+40|0;cB=r|0;cH=r+8|0;ca=r+4|0;cC=aG+44|0;aA=aG+48|0;cj=q;ch=q|0;cg=q+4|0;e=ak|0;b9=ak+4|0;ax=ak+8|0;bI=L|0;bW=K;b8=L+7|0;bV=K|0;aY=K+4|0;bH=J;bP=J+4|0;bQ=J+8|0;bO=J+16|0;bN=J|0;bZ=G;bY=G|0;bT=G+4|0;bU=F;aX=F+4|0;a$=F+8|0;by=F+16|0;bS=F|0;bR=c0;bL=c4;bv=0;bM=b;bD=1;while(1){if((a[55536]&1)==0){db=0}else{db=(a[bM+56|0]&1)!=0}if((c[bM+8>>2]|0)==4){dc=bv;dd=bL;de=bR}else{cM[c[(c[3524]|0)+168>>2]&511](6);if((a[55536]&1)!=0&(c[7662]|0)==1){i5(bM)}do{if((a[36120]&1)==0){df=0}else{bK=bM+16|0;bb=c[bK>>2]|0;if((bb|0)==0){df=0;break}if((a[bb]|0)==0){df=0;break}if((a[bM+22|0]&1)!=0){df=0;break}if((c[9330]|0)==0){cM[c[cW>>2]&511](-2)}else{fn(37320,aH)}bb=a[bM+20|0]&1;do{if(bb<<24>>24!=0){if((a[37456]&1)!=0){break}a[37456]=1;bJ=c[(c[3524]|0)+88>>2]|0;if((bJ|0)==0){break}cO[bJ&255](179864)}}while(0);a[37456]=bb;fz(bR,bL,c[bK>>2]|0);a[37456]=0;df=1}}while(0);bJ=bM+24|0;bz=bM+64|0;c[c8>>2]=c[bz>>2];c[c8+4>>2]=c[bz+4>>2];c[c8+8>>2]=c[bz+8>>2];c[c8+12>>2]=c[bz+12>>2];bz=c[bM+28>>2]|0;bA=bJ|0;do{if((c[bA>>2]|0)!=0){c6=+h[bM+48>>3];bC=c[(c[3524]|0)+92>>2]|0;if(c6<0.0){cK[bC&63](+h[3817]);break}else{cK[bC&63](c6);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[bM+40>>3]);bC=c[(c[3524]|0)+64>>2]|0;if((bz|0)<-5){cM[bC&511](-2)}else{cM[bC&511](bz)}bC=bM+56|0;bF=c[3524]|0;do{if((a[bC]&1)==0){if((c[bF+96>>2]&1024|0)!=0){break}c[c2>>2]=1;c[c9>>2]=bz;a0=7580}else{a0=7580}}while(0);if((a0|0)==7580){a0=0;fn(ap,bF)}bz=bM+12|0;bl=c[bz>>2]|0;L10301:do{if((bl|0)==64){if((a[46752]&1)==0){break}if((a[bM+238|0]&1)!=0){break}c[bM+32>>2]=-1;c[bA>>2]=1;do{if(df){if((a[bC]&1)!=0){fD(bM,bR,bL,-1);break}bs=c[13542]|0;bn=c[3524]|0;c[13542]=(c[bn+96>>2]&128|0)==0?55520:0;cM[c[bn+168>>2]&511](8);bn=(c[9018]|0)+bR|0;bm=c[13542]|0;if((bm|0)==0){a0=7690}else{bG=(c[bm>>2]|0)>(bn|0)&1;a5=(c[bm+4>>2]|0)<(bn|0)?bG|2:bG;bG=(c[bm+8>>2]|0)>(bL|0)?a5|4:a5;if((((c[bm+12>>2]|0)<(bL|0)?bG|8:bG)|0)==0){a0=7690}}if((a0|0)==7690){a0=0;cR[c[(c[3524]|0)+80>>2]&127](bn,bL,-1)}cM[c[(c[3524]|0)+168>>2]&511](9);c[13542]=bs}}while(0);if((a[38984]&1)!=0){if((a[bM+236|0]&1)==0){break}}fE(bM,-1)}else if((bl|0)==225){do{if(df){if((a[bC]&1)!=0){fA(bM,bR,bL);break}bK=c[13542]|0;bb=c[3524]|0;c[13542]=(c[bb+96>>2]&128|0)==0?55520:0;cM[c[bb+168>>2]&511](8);bb=(c[9006]|0)+bR|0;c[M>>2]=(c[9010]|0)+bR;c[N>>2]=bL;c[O>>2]=bb;c[Q>>2]=bL;bb=c[3524]|0;if((fl(M,N,O,Q)|0)!=0){cN[c[bb+56>>2]&255](c[M>>2]|0,c[N>>2]|0);cN[c[bb+60>>2]&255](c[O>>2]|0,c[Q>>2]|0)}cM[c[(c[3524]|0)+168>>2]&511](9);c[13542]=bK}}while(0);if((a[38984]&1)!=0){if((a[bM+236|0]&1)==0){break}}bK=bM+260|0;bb=c[bK>>2]|0;bs=c[bb+12>>2]|0;bn=c[(c[bb>>2]|0)+12>>2]|0;bb=c[bM+88>>2]|0;bG=c[bM+92>>2]|0;c6=+h[bM+104>>3];cA=+h[bM+112>>3];bm=a[bM+120|0]|0;uD(bI|0,bM+121|0,23);a5=c[bM+144>>2]|0;c7=+h[bM+152>>3];aZ=c[bM+160>>2]|0;cI=+h[bM+168>>3];cr=+h[bM+176>>3];bo=c[bM+184>>2]|0;uD(bW|0,b8|0,16);do{if((bb|0)!=0){az=c[(c[3524]|0)+92>>2]|0;if(cA<0.0){cK[az&63](+h[3817]);break}else{cK[az&63](cA);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](c6);bb=c[(c[3524]|0)+64>>2]|0;if((bG|0)<-5){cM[bb&511](-2)}else{cM[bb&511](bG)}bb=c[3524]|0;do{if((bm&1)==0){if((c[bb+96>>2]&1024|0)!=0){break}c[bV>>2]=1;c[aY>>2]=bG;a0=7713}else{a0=7713}}while(0);if((a0|0)==7713){a0=0;fn(K,bb)}bG=c[200]|0;h[64776+(bG*688&-1)>>3]=+((c[7939]|0)-(c[7938]|0)|0)/(+h[64672+(bG*688&-1)>>3]- +h[64664+(bG*688&-1)>>3]);c[12912]=bo;c[12910]=0;if(c7>0.0){uE(bH|0,0,40);c[bP>>2]=2;c[bQ>>2]=2;h[bO>>3]=c7;c[bN>>2]=aZ;fN(J,H,I,123984);h[6458]=cI;h[6457]=cr;c[12910]=~~+h[H>>3]}if((c[(c[bK>>2]|0)+8>>2]|0)<=0){break}bG=bM+80|0;bm=a5;az=0;while(1){a3=bs+(az<<6)|0;bt=a3|0;do{if((c[bt>>2]|0)==2){dg=bm}else{ay=bn+(az<<6)|0;if((c[ay>>2]|0)==2){dg=bm;break}do{if((c[bG>>2]|0)==-3){a9=~~+h[bs+(az<<6)+32>>3];bh=43296;while(1){dh=c[bh>>2]|0;if((dh|0)==0){a0=7724;break}if((c[dh+4>>2]|0)==(a9|0)){a0=7725;break}else{bh=dh|0}}do{if((a0|0)==7724){a0=0;uD(bI|0,51521,23);uh(-1,79128,(v=i,i=i+8|0,c[v>>2]=a9,v)|0);uD(bZ|0,b8|0,16);di=0;dj=90.0;dk=15.0;dl=0;dm=0.0;dn=1;dp=0;dq=1.0;dr=-2}else if((a0|0)==7725){a0=0;bh=c[dh+16>>2]|0;aQ=c[dh+20>>2]|0;c6=+h[dh+32>>3];cA=+h[dh+40>>3];bi=a[dh+48|0]|0;uD(bI|0,dh+49|0,23);a7=c[dh+72>>2]|0;cs=+h[dh+80>>3];bu=c[dh+88>>2]|0;cv=+h[dh+96>>3];aU=+h[dh+104>>3];br=c[dh+112>>2]|0;uD(bZ|0,b8|0,16);if((bh|0)==0){di=br;dj=aU;dk=cv;dl=bu;dm=cs;dn=a7;dp=bi;dq=c6;dr=aQ;break}bh=c[(c[3524]|0)+92>>2]|0;if(cA<0.0){cK[bh&63](+h[3817]);di=br;dj=aU;dk=cv;dl=bu;dm=cs;dn=a7;dp=bi;dq=c6;dr=aQ;break}else{cK[bh&63](cA);di=br;dj=aU;dk=cv;dl=bu;dm=cs;dn=a7;dp=bi;dq=c6;dr=aQ;break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](dq);a9=c[(c[3524]|0)+64>>2]|0;if((dr|0)<-5){cM[a9&511](-2)}else{cM[a9&511](dr)}a9=c[3524]|0;do{if((dp&1)==0){if((c[a9+96>>2]&1024|0)!=0){break}c[bY>>2]=1;c[bT>>2]=dr;a0=7735}else{a0=7735}}while(0);if((a0|0)==7735){a0=0;fn(G,a9)}c[12912]=di;c[12910]=0;if(dm<=0.0){ds=dn;break}uE(bU|0,0,40);c[aX>>2]=2;c[a$>>2]=2;h[by>>3]=dm;c[bS>>2]=dl;fN(F,D,E,123984);h[6458]=dk;h[6457]=dj;c[12910]=~~+h[D>>3];ds=dn}else{fL(bM,a3);ds=bm}}while(0);if((c[bt>>2]|0)!=0){dg=ds;break}if((c[ay>>2]|0)!=0){dg=ds;break}c6=+h[64664+((c[200]|0)*688&-1)>>3];cs=+h[91];cv=+h[96];aU=(+h[bs+(az<<6)+8>>3]-c6)*cs+cv+-1.0;cA=+h[64664+((c[144]|0)*688&-1)>>3];cu=+h[21];aT=+h[68];ct=(+h[bs+(az<<6)+16>>3]-cA)*cu+aT+-1.0;ck=+h[5279];ci=+h[2];bB=+h[12];cz=(+h[bs+(az<<6)+24>>3]-ck)*ci+bB+-1.0;cy=+h[403];cx=+h[391];cw=+h[395];co=+h[399];cp=+h[404];cm=+h[392];cn=+h[396];cq=+h[400];cl=+h[406];aM=+h[394];cb=+h[398];b1=+h[402];ce=cl+aU*aM+ct*cb+cz*b1;cf=ce==0.0?1.0e-5:ce;ce=+(c[180]|0);aQ=c[186]|0;a2=+(c[40]|0);bi=c[46]|0;aR=cv+cs*(+h[bn+(az<<6)+8>>3]-c6)+-1.0;c6=aT+cu*(+h[bn+(az<<6)+16>>3]-cA)+-1.0;cA=bB+ci*(+h[bn+(az<<6)+24>>3]-ck)+-1.0;ck=cl+aM*aR+cb*c6+b1*cA;b1=ck==0.0?1.0e-5:ck;fm(~~((cy+aU*cx+ct*cw+cz*co)/cf*ce)+aQ|0,~~((cp+aU*cm+ct*cn+cz*cq)/cf*a2)+bi|0,~~(ce*((cy+cx*aR+cw*c6+co*cA)/b1))+aQ|0,~~(a2*((cp+cm*aR+cn*c6+cq*cA)/b1))+bi|0,ds);dg=ds}}while(0);bt=az+1|0;if((bt|0)<(c[(c[bK>>2]|0)+8>>2]|0)){bm=dg;az=bt}else{break}}}else if((bl|0)==416){c[bM+228>>2]=1;f3(bM,0)}else if((bl|0)==432){c[bM+228>>2]=2;f3(bM,0)}else if((bl|0)==295|(bl|0)==279|(bl|0)==311|(bl|0)==102|(bl|0)==86|(bl|0)==118|(bl|0)==137|(bl|0)==169|(bl|0)==252|(bl|0)==474|(bl|0)==257|(bl|0)==457|(bl|0)==489|(bl|0)==18){if((a[46752]&1)==0){break}if((a[bM+238|0]&1)!=0){break}do{if(df){az=c[bM+32>>2]|0;if((a[bC]&1)!=0){fD(bM,bR,bL,az);break}bm=c[13542]|0;bK=c[3524]|0;c[13542]=(c[bK+96>>2]&128|0)==0?55520:0;cM[c[bK+168>>2]&511](8);bK=(c[9018]|0)+bR|0;bn=c[13542]|0;if((bn|0)==0){a0=7655}else{bs=(c[bn>>2]|0)>(bK|0)&1;bG=(c[bn+4>>2]|0)<(bK|0)?bs|2:bs;bs=(c[bn+8>>2]|0)>(bL|0)?bG|4:bG;if((((c[bn+12>>2]|0)<(bL|0)?bs|8:bs)|0)==0){a0=7655}}if((a0|0)==7655){a0=0;cR[c[(c[3524]|0)+80>>2]&127](bK,bL,az)}cM[c[(c[3524]|0)+168>>2]&511](9);c[13542]=bm}}while(0);if((a[38984]&1)!=0){if((a[bM+236|0]&1)==0){break}}fE(bM,c[bM+32>>2]|0)}else if((bl|0)==368){if((a[38984]&1)!=0){if((a[bM+236|0]&1)==0){break}}bm=c[c[bM+224>>2]>>2]|0;az=c[(c[3524]|0)+92>>2]|0;if((az|0)!=0){cK[az&63](+h[3817])}if((bm|0)==0){break}else{dt=bm}do{L10414:do{if((c[dt+56>>2]|0)==99){cr=(+h[dt+24>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;cI=(+h[dt+32>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;c7=(+h[dt+40>>3]- +h[5279])*+h[2]+ +h[12]+-1.0;b1=+h[406]+cr*+h[394]+cI*+h[398]+c7*+h[402];cA=b1==0.0?1.0e-5:b1;bm=~~((+h[403]+cr*+h[391]+cI*+h[395]+c7*+h[399])/cA*+(c[180]|0))+(c[186]|0)|0;az=~~((+h[404]+cr*+h[392]+cI*+h[396]+c7*+h[400])/cA*+(c[40]|0))+(c[46]|0)|0;do{if((c[5094]|0)!=0){bK=c[13542]|0;if((bK|0)==0){break}bs=(c[bK>>2]|0)>(bm|0)&1;bn=(c[bK+4>>2]|0)<(bm|0)?bs|2:bs;bs=(c[bK+8>>2]|0)>(az|0)?bn|4:bn;if((((c[bK+12>>2]|0)<(az|0)?bs|8:bs)|0)!=0){break L10414}}}while(0);fp(bm,az,dt)}}while(0);dt=c[dt>>2]|0;}while((dt|0)!=0)}else if((bl|0)==400){c[bM+228>>2]=0;f3(bM,0)}else if((bl|0)==352){if((a[46752]&1)==0){break}if((a[bM+238|0]&1)!=0){break}if(!((a[55536]&1)!=0&(c[7662]|0)!=1)){break}i5(bM);if(da){break}i3()}else if((bl|0)==153|(bl|0)==345|(bl|0)==33){if(df){ay=c[13542]|0;bs=c[3524]|0;c[13542]=(c[bs+96>>2]&128|0)==0?55520:0;cM[c[bs+168>>2]&511](8);bs=(c[9006]|0)+bR|0;c[al>>2]=(c[9010]|0)+bR;c[am>>2]=bL;c[an>>2]=bs;c[ao>>2]=bL;bs=c[3524]|0;if((fl(al,am,an,ao)|0)!=0){cN[c[bs+56>>2]&255](c[al>>2]|0,c[am>>2]|0);cN[c[bs+60>>2]&255](c[an>>2]|0,c[ao>>2]|0)}cM[c[(c[3524]|0)+168>>2]&511](9);c[13542]=ay}do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}if((a[bM+238|0]&1)==0){break L10301}}}while(0);ay=c[bM+260>>2]|0;bs=c[bM+64>>2]|0;do{if((a[55536]&1)==0){du=0}else{if((a[bM+239|0]&1)==0){du=0;break}du=+h[bM+72>>3]<0.0}}while(0);do{if(!((bs|0)!=3|du)){bK=c[bM+68>>2]|0;bn=(c[3524]|0)+144|0;if((c[bn>>2]|0)==0){break}c[e>>2]=3;c[b9>>2]=bK;h[ax>>3]=0.0;cM[c[bn>>2]&511](ak)}}while(0);if((ay|0)==0){break}else{dv=ay}do{bs=c[dv+12>>2]|0;bn=dv+8|0;if((c[bn>>2]|0)>0){bK=0;do{bG=bs+(bK<<6)|0;fL(bM,bG);a5=c[bG>>2]|0;L10451:do{if((a5|0)==0){cA=+h[bs+(bK<<6)+24>>3];c7=(+h[bs+(bK<<6)+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;cI=(+h[bs+(bK<<6)+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;cr=+h[5279];b1=+h[2];cq=+h[12];c6=(cA-cr)*b1+cq+-1.0;cn=+h[403]+c7*+h[391]+cI*+h[395];aR=+h[399];cm=+h[404]+c7*+h[392]+cI*+h[396];cp=+h[400];a2=+h[406]+c7*+h[394]+cI*+h[398];cI=+h[402];c7=a2+c6*cI;co=c7==0.0?1.0e-5:c7;c7=+(c[180]|0);bG=c[186]|0;aZ=~~((cn+c6*aR)/co*c7)+bG|0;cw=+(c[40]|0);bo=c[46]|0;bb=~~((cm+c6*cp)/co*cw)+bo|0;bt=c[34]|0;co=+h[64664+(bt*688&-1)>>3];c6=+h[64672+(bt*688&-1)>>3];if(co<c6){if(co>0.0|c6<0.0){a0=7602}else{a0=7601}}else{if(c6>0.0|co<0.0){a0=7602}else{a0=7601}}do{if((a0|0)==7601){a0=0;cx=(0.0-cr)*b1+cq+-1.0;cy=a2+cx*cI;ce=cy==0.0?1.0e-5:cy;dw=(cm+cx*cp)/ce;dx=(cn+cx*aR)/ce}else if((a0|0)==7602){a0=0;if(cA>0.0){if(co<0.0|co>cA){a0=7606}else{a0=7605}}else{if(co<cA|co>0.0){a0=7606}else{a0=7605}}if((a0|0)==7605){a0=0;ce=cq+b1*(co-cr)+-1.0;cx=a2+cI*ce;cy=cx==0.0?1.0e-5:cx;dw=(cm+cp*ce)/cy;dx=(cn+aR*ce)/cy;break}else if((a0|0)==7606){a0=0;cy=cq+b1*(c6-cr)+-1.0;ce=a2+cI*cy;cx=ce==0.0?1.0e-5:ce;dw=(cm+cp*cy)/cx;dx=(cn+aR*cy)/cx;break}}}while(0);a9=~~(cw*dw)+bo|0;bt=~~(c7*dx)+bG|0;c[8490]=bt;c[8488]=a9;c[ac>>2]=bt;c[ad>>2]=a9;c[ae>>2]=aZ;c[af>>2]=bb;a9=c[3524]|0;if((fl(ac,ad,ae,af)|0)!=0){cN[c[a9+56>>2]&255](c[ac>>2]|0,c[ad>>2]|0);cN[c[a9+60>>2]&255](c[ae>>2]|0,c[af>>2]|0)}c[8490]=aZ;c[8488]=bb}else if((a5|0)==1){a9=c[200]|0;aR=+h[64664+(a9*688&-1)>>3];cn=+h[64672+(a9*688&-1)>>3];cp=+h[bs+(bK<<6)+8>>3];if(aR<cn){if(cp<aR|cp>cn){break}}else{if(cp<cn|cp>aR){break}}a9=c[144]|0;cn=+h[64664+(a9*688&-1)>>3];cm=+h[64672+(a9*688&-1)>>3];cI=+h[bs+(bK<<6)+16>>3];if(cn<cm){if(cI<cn|cI>cm){break}}else{if(cI<cm|cI>cn){break}}a9=c[34]|0;cm=+h[64664+(a9*688&-1)>>3];a2=+h[64672+(a9*688&-1)>>3];if(cm<a2){if(cm>0.0|a2<0.0){a0=7624}else{a0=7619}}else{if(a2>0.0|cm<0.0){a0=7624}else{a0=7619}}do{if((a0|0)==7619){a0=0;cr=(cp-aR)*+h[91]+ +h[96]+-1.0;c6=(cI-cn)*+h[21]+ +h[68]+-1.0;b1=+h[5279];cq=+h[2];co=+h[12];cA=(0.0-b1)*cq+co+-1.0;cx=+h[403]+cr*+h[391]+c6*+h[395];cy=+h[399];ce=+h[404]+cr*+h[392]+c6*+h[396];cf=+h[400];cz=+h[406]+cr*+h[394]+c6*+h[398];c6=+h[402];cr=cz+cA*c6;ct=cr==0.0?1.0e-5:cr;cr=+(c[180]|0);a9=c[186]|0;bt=~~((cx+cA*cy)/ct*cr)+a9|0;aU=+(c[40]|0);a3=c[46]|0;bi=~~((ce+cA*cf)/ct*aU)+a3|0;ct=+h[bs+(bK<<6)+24>>3];if(ct>0.0){if(cm<=ct&cm>=0.0&cm!=0.0&cm!=ct){a0=7622}else{a0=7623}}else{if(cm<=0.0&cm>=ct&cm!=0.0&cm!=ct){a0=7622}else{a0=7623}}if((a0|0)==7622){a0=0;ct=(cm-b1)*cq+co+-1.0;cA=cz+ct*c6;ck=cA==0.0?1.0e-5:cA;dy=bi;dA=bt;dB=~~(aU*((ce+ct*cf)/ck))+a3|0;dC=~~(cr*((cx+ct*cy)/ck))+a9|0;break}else if((a0|0)==7623){a0=0;ck=(a2-b1)*cq+co+-1.0;co=cz+ck*c6;c6=co==0.0?1.0e-5:co;dy=bi;dA=bt;dB=~~(aU*((ce+ck*cf)/c6))+a3|0;dC=~~(cr*((cx+ck*cy)/c6))+a9|0;break}}else if((a0|0)==7624){a0=0;c6=+h[bs+(bK<<6)+24>>3];if(c6>0.0){if(cm<0.0|cm>c6){break L10451}if(a2<0.0|a2>c6){break L10451}}else{if(cm<c6|cm>0.0){break L10451}if(a2<c6|a2>0.0){break L10451}}c6=(cp-aR)*+h[91]+ +h[96]+-1.0;cy=(cI-cn)*+h[21]+ +h[68]+-1.0;ck=+h[5279];cx=+h[2];cr=+h[12];cf=(a2-ck)*cx+cr+-1.0;ce=+h[403]+c6*+h[391]+cy*+h[395];aU=+h[399];co=+h[404]+c6*+h[392]+cy*+h[396];cz=+h[400];cq=+h[406]+c6*+h[394]+cy*+h[398];cy=+h[402];c6=cq+cf*cy;b1=c6==0.0?1.0e-5:c6;c6=+(c[180]|0);a9=c[186]|0;ct=+(c[40]|0);a3=c[46]|0;cA=cr+cx*(cm-ck)+-1.0;ck=cq+cA*cy;cy=ck==0.0?1.0e-5:ck;dy=~~(ct*((co+cA*cz)/cy))+a3|0;dA=~~(c6*((ce+cA*aU)/cy))+a9|0;dB=~~((co+cf*cz)/b1*ct)+a3|0;dC=~~((ce+cf*aU)/b1*c6)+a9|0}}while(0);c[8490]=dA;c[8488]=dy;c[ag>>2]=dA;c[ah>>2]=dy;c[ai>>2]=dC;c[aj>>2]=dB;bb=c[3524]|0;if((fl(ag,ah,ai,aj)|0)!=0){cN[c[bb+56>>2]&255](c[ag>>2]|0,c[ah>>2]|0);cN[c[bb+60>>2]&255](c[ai>>2]|0,c[aj>>2]|0)}c[8490]=dC;c[8488]=dB}}while(0);bK=bK+1|0;}while((bK|0)<(c[bn>>2]|0))}dv=c[dv>>2]|0;}while((dv|0)!=0)}else if((bl|0)==51){if((a[46752]&1)==0){break}if((a[bM+238|0]&1)!=0){break}do{if(df){if((a[bC]&1)!=0){fA(bM,bR,bL);break}ay=c[13542]|0;bn=c[3524]|0;c[13542]=(c[bn+96>>2]&128|0)==0?55520:0;cM[c[bn+168>>2]&511](8);bn=(c[9006]|0)+bR|0;c[R>>2]=(c[9010]|0)+bR;c[U>>2]=bL;c[V>>2]=bn;c[W>>2]=bL;bn=c[3524]|0;if((fl(R,U,V,W)|0)!=0){cN[c[bn+56>>2]&255](c[R>>2]|0,c[U>>2]|0);cN[c[bn+60>>2]&255](c[V>>2]|0,c[W>>2]|0)}cM[c[(c[3524]|0)+168>>2]&511](9);c[13542]=ay}}while(0);if((a[38984]&1)==0){a0=7670}else{if((a[bM+236|0]&1)!=0){a0=7670}}do{if((a0|0)==7670){a0=0;if(db){fB(bM);break}else{fC(bM);break}}}while(0);do{if(df){ay=c[bM+32>>2]|0;if((a[bC]&1)!=0){fD(bM,bR,bL,ay);break}bn=c[13542]|0;bK=c[3524]|0;c[13542]=(c[bK+96>>2]&128|0)==0?55520:0;cM[c[bK+168>>2]&511](8);bK=(c[9018]|0)+bR|0;bs=c[13542]|0;if((bs|0)==0){a0=7678}else{a5=(c[bs>>2]|0)>(bK|0)&1;az=(c[bs+4>>2]|0)<(bK|0)?a5|2:a5;a5=(c[bs+8>>2]|0)>(bL|0)?az|4:az;if((((c[bs+12>>2]|0)<(bL|0)?a5|8:a5)|0)==0){a0=7678}}if((a0|0)==7678){a0=0;cR[c[(c[3524]|0)+80>>2]&127](bK,bL,ay)}cM[c[(c[3524]|0)+168>>2]&511](9);c[13542]=bn}}while(0);if((a[38984]&1)!=0){if((a[bM+236|0]&1)==0){break}}fE(bM,c[bM+32>>2]|0)}else if((bl|0)==177|(bl|0)==184|(bl|0)==193|(bl|0)==209|(bl|0)==1){if((a[46752]&1)==0){break}if((a[bM+238|0]&1)!=0){break}do{if(df){if((a[bC]&1)!=0){fA(bM,bR,bL);break}bn=c[13542]|0;ay=c[3524]|0;c[13542]=(c[ay+96>>2]&128|0)==0?55520:0;cM[c[ay+168>>2]&511](8);ay=(c[9006]|0)+bR|0;c[X>>2]=(c[9010]|0)+bR;c[Y>>2]=bL;c[$>>2]=ay;c[ab>>2]=bL;ay=c[3524]|0;if((fl(X,Y,$,ab)|0)!=0){cN[c[ay+56>>2]&255](c[X>>2]|0,c[Y>>2]|0);cN[c[ay+60>>2]&255](c[$>>2]|0,c[ab>>2]|0)}cM[c[(c[3524]|0)+168>>2]&511](9);c[13542]=bn}}while(0);if((a[38984]&1)!=0){if((a[bM+236|0]&1)==0){break}}if(db){fB(bM);break}else{fC(bM);break}}}while(0);do{if(df){bC=bv+1|0;if((bC|0)<(c[9014]|0)){dE=bC;dF=bL-(c[9022]|0)|0;dG=bR;break}else{dE=0;dF=c[56]|0;dG=(c[9028]|0)+bR|0;break}}else{dE=bv;dF=bL;dG=bR}}while(0);do{if((c[11690]|0)==0){dH=dE;dI=dF;dJ=dG}else{bC=c[bM+256>>2]|0;if((bC|0)==0){dH=dE;dI=dF;dJ=dG;break}bl=bJ;c[aq>>2]=c[bl>>2];c[aq+4>>2]=c[bl+4>>2];c[aq+8>>2]=c[bl+8>>2];c[aq+12>>2]=c[bl+12>>2];c[aq+16>>2]=c[bl+16>>2];c[aq+20>>2]=c[bl+20>>2];c[aq+24>>2]=c[bl+24>>2];c[aq+28>>2]=c[bl+28>>2];c[aq+32>>2]=c[bl+32>>2];c[aq+36>>2]=c[bl+36>>2];c[aq+40>>2]=c[bl+40>>2];c[aq+44>>2]=c[bl+44>>2];c[aq+48>>2]=c[bl+48>>2];c[aq+52>>2]=c[bl+52>>2];bl=(a[38984]&1)+(c[c1>>2]|0)|0;c[c1>>2]=bl;c[c5>>2]=c[c$>>2];c[c5+4>>2]=c[c$+4>>2];c[c5+8>>2]=c[c$+8>>2];c[c5+12>>2]=c[c$+12>>2];do{if((c[cP>>2]|0)!=0){cm=+h[cZ>>3];bA=c[(c[3524]|0)+92>>2]|0;if(cm<0.0){cK[bA&63](+h[3817]);break}else{cK[bA&63](cm);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[cQ>>3]);bA=c[(c[3524]|0)+64>>2]|0;if((bl|0)<-5){cM[bA&511](-2)}else{cM[bA&511](bl)}bA=c[3524]|0;do{if((a[cU]&1)==0){if((c[bA+96>>2]&1024|0)!=0){break}c[cT>>2]=1;c[cJ>>2]=bl;a0=7778}else{a0=7778}}while(0);if((a0|0)==7778){a0=0;fn(C,bA)}do{if((a[36120]&1)==0){dK=dE;dL=dF;dM=dG}else{bl=bM+16|0;bF=c[bl>>2]|0;if((bF|0)==0){dK=dE;dL=dF;dM=dG;break}if((a[bF]|0)==0){dK=dE;dL=dF;dM=dG;break}if((a[bM+22|0]&1)!=0){dK=dE;dL=dF;dM=dG;break}if((a[46752]&1)!=0){dK=dE;dL=dF;dM=dG;break}if((a[35888]&1)!=0){dK=dE;dL=dF;dM=dG;break}cM[c[cW>>2]&511](-2);fz(dG,dF,c[bl>>2]|0);c[cV>>2]=c[c$>>2];c[cV+4>>2]=c[c$+4>>2];c[cV+8>>2]=c[c$+8>>2];c[cV+12>>2]=c[c$+12>>2];bl=c[c1>>2]|0;do{if((c[cP>>2]|0)!=0){cm=+h[cZ>>3];bF=c[(c[3524]|0)+92>>2]|0;if(cm<0.0){cK[bF&63](+h[3817]);break}else{cK[bF&63](cm);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[cQ>>3]);bF=c[(c[3524]|0)+64>>2]|0;if((bl|0)<-5){cM[bF&511](-2)}else{cM[bF&511](bl)}bF=c[3524]|0;do{if((a[cU]&1)==0){if((c[bF+96>>2]&1024|0)!=0){break}c[cX>>2]=1;c[c_>>2]=bl;a0=7795}else{a0=7795}}while(0);if((a0|0)==7795){a0=0;fn(B,bF)}bl=c[bz>>2]|0;if((bl|0)==33|(bl|0)==1|(bl|0)==153|(bl|0)==345|(bl|0)==225|(bl|0)==177|(bl|0)==193|(bl|0)==209){bn=c[13542]|0;ay=c[3524]|0;c[13542]=(c[ay+96>>2]&128|0)==0?55520:0;cM[c[ay+168>>2]&511](8);ay=(c[9006]|0)+dG|0;c[x>>2]=(c[9010]|0)+dG;c[y>>2]=dF;c[z>>2]=ay;c[A>>2]=dF;ay=c[3524]|0;if((fl(x,y,z,A)|0)!=0){cN[c[ay+56>>2]&255](c[x>>2]|0,c[y>>2]|0);cN[c[ay+60>>2]&255](c[z>>2]|0,c[A>>2]|0)}cM[c[(c[3524]|0)+168>>2]&511](9);c[13542]=bn}else if((bl|0)==295|(bl|0)==279|(bl|0)==311|(bl|0)==102|(bl|0)==86|(bl|0)==118|(bl|0)==169|(bl|0)==137|(bl|0)==252|(bl|0)==474|(bl|0)==257|(bl|0)==457|(bl|0)==489|(bl|0)==18){bn=c[bM+32>>2]|0;ay=c[13542]|0;bK=c[3524]|0;c[13542]=(c[bK+96>>2]&128|0)==0?55520:0;cM[c[bK+168>>2]&511](8);bK=(c[9018]|0)+dG|0;a5=c[13542]|0;if((a5|0)==0){a0=7802}else{bs=(c[a5>>2]|0)>(bK|0)&1;az=(c[a5+4>>2]|0)<(bK|0)?bs|2:bs;bs=(c[a5+8>>2]|0)>(dF|0)?az|4:az;if((((c[a5+12>>2]|0)<(dF|0)?bs|8:bs)|0)==0){a0=7802}}if((a0|0)==7802){a0=0;cR[c[(c[3524]|0)+80>>2]&127](bK,dF,bn)}cM[c[(c[3524]|0)+168>>2]&511](9);c[13542]=ay}else if((bl|0)==51){ay=c[13542]|0;bn=c[3524]|0;c[13542]=(c[bn+96>>2]&128|0)==0?55520:0;cM[c[bn+168>>2]&511](8);bn=(c[9006]|0)+dG|0;c[s>>2]=(c[9010]|0)+dG;c[t>>2]=dF;c[u>>2]=bn;c[w>>2]=dF;bn=c[3524]|0;if((fl(s,t,u,w)|0)!=0){cN[c[bn+56>>2]&255](c[s>>2]|0,c[t>>2]|0);cN[c[bn+60>>2]&255](c[u>>2]|0,c[w>>2]|0)}cM[c[(c[3524]|0)+168>>2]&511](9);c[13542]=ay}else if((bl|0)==64){bl=c[13542]|0;ay=c[3524]|0;c[13542]=(c[ay+96>>2]&128|0)==0?55520:0;cM[c[ay+168>>2]&511](8);ay=(c[9018]|0)+dG|0;bn=c[13542]|0;if((bn|0)==0){a0=7809}else{bK=(c[bn>>2]|0)>(ay|0)&1;bs=(c[bn+4>>2]|0)<(ay|0)?bK|2:bK;bK=(c[bn+8>>2]|0)>(dF|0)?bs|4:bs;if((((c[bn+12>>2]|0)<(dF|0)?bK|8:bK)|0)==0){a0=7809}}if((a0|0)==7809){a0=0;cR[c[(c[3524]|0)+80>>2]&127](ay,dF,-1)}cM[c[(c[3524]|0)+168>>2]&511](9);c[13542]=bl}bl=dE+1|0;if((bl|0)<(c[9014]|0)){dK=bl;dL=dF-(c[9022]|0)|0;dM=dG;break}else{dK=0;dL=c[56]|0;dM=(c[9028]|0)+dG|0;break}}}while(0);bA=bM+22|0;bl=bM+32|0;ay=dM;bK=dL;bn=dK;bs=bC;while(1){do{if((a[35888]&1)==0){dN=bn;dO=bK;dP=ay}else{if((a[bs+8|0]|0)==0){dN=bn;dO=bK;dP=ay;break}do{if((a[36120]&1)!=0){if((a[bA]&1)!=0){break}cM[c[cW>>2]&511](-2);fz(ay,bK,bs+9|0)}}while(0);do{if(db){if((c[aE>>2]|0)!=6){a0=7839;break}cm=+h[bs+48>>3];a5=c[34]|0;az=(a[66852]&1)==0;do{if((a[64788+(a5*688&-1)|0]&1)==0){if(az){dQ=cm;break}if(cm>0.0){a2=+_(+cm);dQ=a2/+h[8358];break}else{dQ=+h[8341];break}}else{if(az){dQ=+Z(+(cm*+h[64800+(a5*688&-1)>>3]));break}if(+h[64792+(a5*688&-1)>>3]==+h[8357]){dQ=cm;break}dQ=cm*+h[64800+(a5*688&-1)>>3]/+h[8358]}}while(0);cm=+h[8341];do{if(cm<dQ){a2=+h[8342];if(a2<=dQ){dR=+((a[20668]|0)==112&1|0);break}cn=(dQ-cm)/(a2-cm);if((a[20668]|0)==112){dR=cn;break}dR=1.0-cn}else{dR=+((a[20668]|0)!=112&1|0)}}while(0);a5=(c[3524]|0)+144|0;if((c[a5>>2]|0)==0){break}c[cB>>2]=5;h[cH>>3]=dR;c[ca>>2]=0;cM[c[a5>>2]&511](r)}else{a0=7839}}while(0);do{if((a0|0)==7839){a0=0;cm=+h[aA>>3];a5=c[c1>>2]|0;if((a5|0)==-6){c[c1>>2]=0;a[cU]=1;dS=0}else{dS=a5}L10667:do{if((a[30080]&1)==0){a0=7855}else{if((a[35888]&1)==0){a0=7855;break}a5=dS+1|0;c[c1>>2]=a5;az=dS+2|0;bm=43280;while(1){dT=c[bm>>2]|0;if((dT|0)==0){break}if((c[dT+4>>2]|0)==(az|0)){a0=7846;break}else{bm=dT|0}}if((a0|0)==7846){a0=0;bm=(a[dT+40|0]&1)==0;dU=bm?1:c[dT+48>>2]|0;dV=bm?c[dT+12>>2]|0:c[dT+52>>2]|0;dW=+h[dT+56>>3];dX=a5;break}bm=c[8798]|0;bb=(bm|0)>0;aZ=az;L10676:while(1){bG=43264;while(1){dY=c[bG>>2]|0;if((dY|0)==0){break}if((c[dY+4>>2]|0)==(aZ|0)){break L10676}else{bG=dY|0}}bG=aZ-1|0;if(!((aZ|0)>(bm|0)&bb)){dU=1;dV=bG;dW=cm;dX=a5;break L10667}aZ=((bG|0)%(bm|0)&-1)+1|0}bm=c[dY+48>>2]|0;aZ=c[dY+52>>2]|0;cn=+h[dY+56>>3];if((c[(c[3524]|0)+96>>2]&1024|0)!=0){dU=bm;dV=aZ;dW=cn;dX=a5;break}bb=(a[dY+40|0]&1)==0;dU=bb?1:bm;dV=bb?c[dY+12>>2]|0:aZ;dW=cn;dX=a5}}while(0);L10685:do{if((a0|0)==7855){a0=0;aZ=dS+1|0;c[c1>>2]=aZ;bb=c[8798]|0;bm=(bb|0)>0;az=dS+2|0;L10687:while(1){bG=43264;while(1){dZ=c[bG>>2]|0;if((dZ|0)==0){break}if((c[dZ+4>>2]|0)==(az|0)){break L10687}else{bG=dZ|0}}bG=az-1|0;if(!((az|0)>(bb|0)&bm)){dU=1;dV=bG;dW=cm;dX=aZ;break L10685}az=((bG|0)%(bb|0)&-1)+1|0}bb=c[dZ+48>>2]|0;az=c[dZ+52>>2]|0;cn=+h[dZ+56>>3];if((c[(c[3524]|0)+96>>2]&1024|0)!=0){dU=bb;dV=az;dW=cn;dX=aZ;break}bm=(a[dZ+40|0]&1)==0;dU=bm?1:bb;dV=bm?c[dZ+12>>2]|0:az;dW=cn;dX=aZ}}while(0);c[aE>>2]=dU;c[cC>>2]=dV;h[aA>>3]=dW;c[cj>>2]=c[c$>>2];c[cj+4>>2]=c[c$+4>>2];c[cj+8>>2]=c[c$+8>>2];c[cj+12>>2]=c[c$+12>>2];do{if((c[cP>>2]|0)!=0){cm=+h[cZ>>3];az=c[(c[3524]|0)+92>>2]|0;if(cm<0.0){cK[az&63](+h[3817]);break}else{cK[az&63](cm);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[cQ>>3]);az=c[(c[3524]|0)+64>>2]|0;if((dX|0)<-5){cM[az&511](-2)}else{cM[az&511](dX)}az=c[3524]|0;if((a[cU]&1)==0){if((c[az+96>>2]&1024|0)!=0){break}c[ch>>2]=1;c[cg>>2]=dX}fn(q,az)}}while(0);if((a[36120]&1)==0){dN=bn;dO=bK;dP=ay;break}if((a[bA]&1)!=0){dN=bn;dO=bK;dP=ay;break}az=c[bz>>2]|0;if((az|0)==33|(az|0)==1|(az|0)==51|(az|0)==153|(az|0)==345|(az|0)==225|(az|0)==177|(az|0)==193|(az|0)==209|(az|0)==352){bm=c[13542]|0;bb=c[3524]|0;c[13542]=(c[bb+96>>2]&128|0)==0?55520:0;cM[c[bb+168>>2]&511](8);bb=(c[9006]|0)+ay|0;c[l>>2]=(c[9010]|0)+ay;c[n>>2]=bK;c[o>>2]=bb;c[p>>2]=bK;bb=c[3524]|0;if((fl(l,n,o,p)|0)!=0){cN[c[bb+56>>2]&255](c[l>>2]|0,c[n>>2]|0);cN[c[bb+60>>2]&255](c[o>>2]|0,c[p>>2]|0)}cM[c[(c[3524]|0)+168>>2]&511](9);c[13542]=bm}else if((az|0)==295|(az|0)==279|(az|0)==311|(az|0)==102|(az|0)==86|(az|0)==118|(az|0)==169|(az|0)==137|(az|0)==252|(az|0)==474|(az|0)==257|(az|0)==457|(az|0)==489|(az|0)==18){bm=c[bl>>2]|0;bb=c[13542]|0;a5=c[3524]|0;c[13542]=(c[a5+96>>2]&128|0)==0?55520:0;cM[c[a5+168>>2]&511](8);a5=(c[9018]|0)+ay|0;bG=c[13542]|0;if((bG|0)==0){a0=7882}else{bo=(c[bG>>2]|0)>(a5|0)&1;a9=(c[bG+4>>2]|0)<(a5|0)?bo|2:bo;bo=(c[bG+8>>2]|0)>(bK|0)?a9|4:a9;if((((c[bG+12>>2]|0)<(bK|0)?bo|8:bo)|0)==0){a0=7882}}if((a0|0)==7882){a0=0;cR[c[(c[3524]|0)+80>>2]&127](a5,bK,bm)}cM[c[(c[3524]|0)+168>>2]&511](9);c[13542]=bb}else if((az|0)==64){az=c[13542]|0;bb=c[3524]|0;c[13542]=(c[bb+96>>2]&128|0)==0?55520:0;cM[c[bb+168>>2]&511](8);bb=(c[9018]|0)+ay|0;bm=c[13542]|0;if((bm|0)==0){a0=7886}else{a5=(c[bm>>2]|0)>(bb|0)&1;bo=(c[bm+4>>2]|0)<(bb|0)?a5|2:a5;a5=(c[bm+8>>2]|0)>(bK|0)?bo|4:bo;if((((c[bm+12>>2]|0)<(bK|0)?a5|8:a5)|0)==0){a0=7886}}if((a0|0)==7886){a0=0;cR[c[(c[3524]|0)+80>>2]&127](bb,bK,-1)}cM[c[(c[3524]|0)+168>>2]&511](9);c[13542]=az}az=bn+1|0;if((az|0)<(c[9014]|0)){dN=az;dO=bK-(c[9022]|0)|0;dP=ay;break}else{dN=0;dO=c[56]|0;dP=(c[9028]|0)+ay|0;break}}}while(0);bF=c[bz>>2]|0;do{if((bF|0)==153|(bF|0)==345|(bF|0)==225|(bF|0)==33){if((c[11690]&2|0)==0){fG(bs,aG);break}az=bs+44|0;if((c[az>>2]|0)<=0){break}bb=bs+4|0;a5=0;do{bm=c[bb>>2]|0;bo=bm+(a5<<6)+24|0;cm=+h[bo>>3];cn=(+h[bm+(a5<<6)+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;a2=(+h[bm+(a5<<6)+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;cI=+h[5279];aR=+h[2];cp=+h[12];c7=(cm-cI)*aR+cp+-1.0;cw=+h[403]+cn*+h[391]+a2*+h[395];c6=+h[399];b1=+h[404]+cn*+h[392]+a2*+h[396];aU=+h[400];cf=+h[405]+cn*+h[393]+a2*+h[397];ce=+h[401];ct=+h[406]+cn*+h[394]+a2*+h[398];a2=+h[402];cn=ct+c7*a2;cz=cn==0.0?1.0e-5:cn;h[cY>>3]=(cw+c7*c6)/cz;h[cF>>3]=(b1+c7*aU)/cz;h[aB>>3]=(cf+c7*ce)/cz;h[cE>>3]=cm;c[aF>>2]=0;cm=(0.0-cI)*aR+cp+-1.0;cp=ct+cm*a2;a2=cp==0.0?1.0e-5:cp;h[au>>3]=(cw+cm*c6)/a2;h[cL>>3]=(b1+cm*aU)/a2;h[aD>>3]=(cf+cm*ce)/a2;h[aC>>3]=0.0;c[at>>2]=0;h[aC>>3]=+h[bo>>3];do{if((a[38984]&1)==0){a0=7898}else{if((a[46752]&1)==0){a0=7898;break}gt(j,k,aG)}}while(0);if((a0|0)==7898){a0=0;un(j,k,aG,as)}a5=a5+1|0;}while((a5|0)<(c[az>>2]|0))}else if((bF|0)==177|(bF|0)==193|(bF|0)==209|(bF|0)==1|(bF|0)==352){fF(bs,aG)}else if((bF|0)==51){fF(bs,aG);a0=7903}else if((bF|0)==295|(bF|0)==279|(bF|0)==311|(bF|0)==102|(bF|0)==86|(bF|0)==118|(bF|0)==169|(bF|0)==137|(bF|0)==252|(bF|0)==257|(bF|0)==457|(bF|0)==489|(bF|0)==64|(bF|0)==18){a0=7903}}while(0);if((a0|0)==7903){a0=0;fG(bs,aG)}bF=c[bs>>2]|0;if((bF|0)==0){dH=dN;dI=dO;dJ=dP;break}else{ay=dP;bK=dO;bn=dN;bs=bF}}}}while(0);cM[c[(c[3524]|0)+168>>2]&511](7);dc=dH;dd=dI;de=dJ}if((bD|0)>=(d|0)){break L10258}bR=de;bL=dd;bv=dc;bM=c[bM>>2]|0;bD=bD+1|0}}}while(0);if(da){i3()}da=a[38984]|0;do{if((da&1)!=0&(c[9744]|0)==1){if((a[46752]&1)==0|bE){d_=da;break}cM[c[(c[3524]|0)+168>>2]&511](6);gv(b,d);cM[c[(c[3524]|0)+168>>2]&511](7);d_=a[38984]|0}else{d_=da}}while(0);da=c[10026]|0;do{if((d_&1)!=0|(da|0)==1){fw(b,d,0,1)}else{if((da|0)!=-1){break}fw(b,d,1,1)}}while(0);if((c[5094]|0)!=0&(c[14088]|0)==1){fw(b,d,3,1)}do{if(!bE){if((a[55536]&1)==0){break}if(!(a[31104]|0)){break}if(!((a[54016]|0)!=110&(c[13506]|0)==1)){break}dD(2)}}while(0);fO(c[10818]|0,1,3);bE=c[10822]|0;d=c[(c[3524]|0)+92>>2]|0;if((d|0)!=0){cK[d&63](+h[3817])}if((bE|0)!=0){d=bE;do{if((c[d+56>>2]|0)==1){fK(d+8|0,av,aw,202256);fp(~~+h[av>>3],~~+h[aw>>3],d)}d=c[d>>2]|0;}while((d|0)!=0)}fy(1);d=c[200]|0;dW=+h[64664+(d*688&-1)>>3];aw=c[144]|0;dR=+h[64664+(aw*688&-1)>>3];dQ=+h[91];dx=+h[96];dw=(dW-dW)*dQ+dx+-1.0;dj=+h[21];dk=+h[68];dm=(dR-dR)*dj+dk+-1.0;dq=(+h[7076]- +h[5279])*+h[2]+ +h[12]+-1.0;a2=+h[403];ce=+h[391];cm=a2+dw*ce;cf=+h[395];aU=dm*cf;b1=dq*+h[399];c6=+h[404];cw=+h[392];cp=c6+dw*cw;ct=+h[396];aR=dm*ct;cI=dq*+h[400];cz=+h[406];c7=+h[394];cn=cz+dw*c7;dw=+h[398];co=dm*dw;dm=dq*+h[402];dq=cn+co+dm;cy=dq==0.0?1.0e-5:dq;dq=+(c[180]|0);av=c[186]|0;bE=~~((cm+aU+b1)/cy*dq)+av|0;cA=+(c[40]|0);b=c[46]|0;da=~~((cp+aR+cI)/cy*cA)+b|0;c[18064]=bE;c[18062]=da;cy=(+h[64672+(d*688&-1)>>3]-dW)*dQ+dx+-1.0;dx=cz+cy*c7+co+dm;co=dx==0.0?1.0e-5:dx;c[18060]=(~~((a2+cy*ce+aU+b1)/co*dq)+av|0)-bE;c[18058]=(~~((c6+cy*cw+aR+cI)/co*cA)+b|0)-da;co=(+h[64672+(aw*688&-1)>>3]-dR)*dj+dk+-1.0;dk=cn+co*dw+dm;dm=dk==0.0?1.0e-5:dk;c[18056]=(~~((cm+co*cf+b1)/dm*dq)+av|0)-bE;c[18054]=(~~((cp+co*ct+cI)/dm*cA)+b|0)-da;do{if(a[31104]|0){da=c[(c[3524]|0)+140>>2]|0;if((da|0)==0){break}cS[da&511]()}}while(0);lh();if((a[38984]&1)==0){i=f;return}if((a[46752]&1)==0){i=f;return}uu(c[7628]|0);c[7628]=0;c[7624]=0;c[7625]=0;uu(c[11608]|0);c[11608]=0;c[11604]=0;c[11605]=0;uu(c[228]|0);c[228]=0;c[224]=0;c[225]=0;i=f;return}function fw(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Z=0,_=0,$=0,aa=0.0,ab=0,ac=0,ad=0.0,ae=0.0,af=0.0,ag=0.0,ah=0,ai=0.0,aj=0.0,ak=0.0,al=0.0,am=0.0,an=0.0,ao=0.0,ap=0.0,aq=0.0,ar=0.0,as=0.0,at=0.0,au=0.0,av=0.0,aw=0.0,ax=0.0,ay=0.0,az=0.0,aA=0.0,aB=0.0,aC=0.0,aD=0.0,aE=0,aF=0,aG=0.0,aH=0.0,aI=0.0,aJ=0.0,aK=0.0,aL=0.0,aM=0.0,aN=0.0,aO=0.0,aP=0.0,aQ=0.0,aR=0.0,aS=0.0,aT=0.0,aU=0.0,aV=0.0,aW=0.0,aX=0.0,aY=0.0,aZ=0.0,a_=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a9=0,ba=0,bb=0,bc=0,bd=0,be=0,bf=0,bg=0,bh=0,bi=0,bj=0,bk=0,bl=0,bm=0.0,bn=0.0,bo=0,bp=0.0,bq=0.0,br=0.0,bs=0,bt=0.0,bu=0.0,bv=0.0,bw=0,bx=0,by=0,bz=0.0,bA=0,bB=0,bC=0,bD=0.0,bE=0.0,bF=0.0,bG=0,bH=0.0,bI=0.0,bJ=0,bK=0,bL=0.0,bM=0.0,bN=0.0,bO=0,bP=0,bQ=0,bR=0,bS=0,bT=0.0,bU=0.0,bV=0.0,bW=0.0,bX=0,bY=0,bZ=0,b_=0,b$=0,b0=0,b1=0,b2=0,b3=0;j=i;i=i+1392|0;k=j|0;l=j+16|0;m=j+32|0;n=j+80|0;o=j+128|0;p=j+176|0;q=j+224|0;r=j+272|0;s=j+320|0;t=j+368|0;u=j+416|0;v=j+464|0;w=j+512|0;x=j+560|0;y=j+608|0;z=j+640|0;A=j+672|0;B=j+720|0;C=j+768|0;D=j+816|0;E=j+864|0;F=j+912|0;G=j+960|0;H=j+1008|0;I=j+1056|0;J=j+1064|0;K=j+1072|0;L=j+1080|0;M=j+1088|0;N=j+1136|0;Q=j+1184|0;R=j+1232|0;S=j+1280|0;T=j+1328|0;U=j+1376|0;V=j+1384|0;W=c[3524]|0;X=c[13542]|0;Z=c[11692]|0;_=(Z|0)!=0;L10803:do{if(_&(c[5094]|0)!=0){if((c[14088]|0)!=(f|0)){break}$=l;c[$>>2]=c[14084];c[$+4>>2]=c[56340>>2];c[$+8>>2]=c[56344>>2];c[$+12>>2]=c[56348>>2];$=c[14075]|0;do{if((c[14074]|0)!=0){aa=+h[7040];ab=c[W+92>>2]|0;if(aa<0.0){cK[ab&63](+h[3817]);break}else{cK[ab&63](aa);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[7039]);ab=c[(c[3524]|0)+64>>2]|0;if(($|0)<-5){cM[ab&511](-2)}else{cM[ab&511]($)}ab=c[3524]|0;do{if((a[56328]&1)==0){if((c[ab+96>>2]&1024|0)!=0){break}c[l>>2]=1;c[l+4>>2]=$;ac=7953}else{ac=7953}}while(0);if((ac|0)==7953){fn(l,ab)}do{if((c[11692]&15|0)==15){$=c[(c[3524]|0)+172>>2]|0;if(($|0)==0){break}cM[$&511](0)}}while(0);aa=(+h[14]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;ad=(+h[13]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;ae=(+h[7076]- +h[5279])*+h[2]+ +h[12]+-1.0;af=+h[406]+aa*+h[394]+ad*+h[398]+ae*+h[402];ag=af==0.0?1.0e-5:af;cN[c[(c[3524]|0)+56>>2]&255](~~((+h[403]+aa*+h[391]+ad*+h[395]+ae*+h[399])/ag*+(c[180]|0))+(c[186]|0)|0,~~((+h[404]+aa*+h[392]+ad*+h[396]+ae*+h[400])/ag*+(c[40]|0))+(c[46]|0)|0);ag=(+h[7089]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;ae=(+h[7088]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;ad=(+h[7076]- +h[5279])*+h[2]+ +h[12]+-1.0;aa=+h[406]+ag*+h[394]+ae*+h[398]+ad*+h[402];af=aa==0.0?1.0e-5:aa;ab=~~((+h[403]+ag*+h[391]+ae*+h[395]+ad*+h[399])/af*+(c[180]|0))+(c[186]|0)|0;$=~~((+h[404]+ag*+h[392]+ae*+h[396]+ad*+h[400])/af*+(c[40]|0))+(c[46]|0)|0;ah=c[3524]|0;if((c[11692]&2|0)==0){cN[c[ah+56>>2]&255](ab,$)}else{cN[c[ah+60>>2]&255](ab,$)}af=(+h[3305]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;ad=(+h[3304]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;ae=(+h[7076]- +h[5279])*+h[2]+ +h[12]+-1.0;ag=+h[406]+af*+h[394]+ad*+h[398]+ae*+h[402];aa=ag==0.0?1.0e-5:ag;$=~~((+h[403]+af*+h[391]+ad*+h[395]+ae*+h[399])/aa*+(c[180]|0))+(c[186]|0)|0;ab=~~((+h[404]+af*+h[392]+ad*+h[396]+ae*+h[400])/aa*+(c[40]|0))+(c[46]|0)|0;ah=c[3524]|0;if((c[11692]&8|0)==0){cN[c[ah+56>>2]&255]($,ab)}else{cN[c[ah+60>>2]&255]($,ab)}aa=(+h[5264]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;ae=(+h[5263]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;ad=(+h[7076]- +h[5279])*+h[2]+ +h[12]+-1.0;af=+h[406]+aa*+h[394]+ae*+h[398]+ad*+h[402];ag=af==0.0?1.0e-5:af;ab=~~((+h[403]+aa*+h[391]+ae*+h[395]+ad*+h[399])/ag*+(c[180]|0))+(c[186]|0)|0;$=~~((+h[404]+aa*+h[392]+ae*+h[396]+ad*+h[400])/ag*+(c[40]|0))+(c[46]|0)|0;ah=c[3524]|0;if((c[11692]&4|0)==0){cN[c[ah+56>>2]&255](ab,$)}else{cN[c[ah+60>>2]&255](ab,$)}ag=(+h[14]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;ad=(+h[13]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;ae=(+h[7076]- +h[5279])*+h[2]+ +h[12]+-1.0;aa=+h[406]+ag*+h[394]+ad*+h[398]+ae*+h[402];af=aa==0.0?1.0e-5:aa;$=~~((+h[403]+ag*+h[391]+ad*+h[395]+ae*+h[399])/af*+(c[180]|0))+(c[186]|0)|0;ab=~~((+h[404]+ag*+h[392]+ad*+h[396]+ae*+h[400])/af*+(c[40]|0))+(c[46]|0)|0;ah=c[3524]|0;if((c[11692]&1|0)==0){cN[c[ah+56>>2]&255]($,ab)}else{cN[c[ah+60>>2]&255]($,ab)}if((c[11692]&15|0)!=15){break}ab=c[(c[3524]|0)+172>>2]|0;if((ab|0)==0){break}cM[ab&511](1)}else{if(!_){break}af=+h[7076];ae=+h[64664+((c[200]|0)*688&-1)>>3];ad=+h[91];ag=+h[96];aa=(+h[14]-ae)*ad+ag+-1.0;ai=+h[64664+((c[144]|0)*688&-1)>>3];aj=+h[21];ak=+h[68];al=(+h[13]-ai)*aj+ak+-1.0;am=(af- +h[5279])*+h[2]+ +h[12]+-1.0;an=+h[403];ao=+h[391];ap=+h[395];aq=am*+h[399];ar=+h[404];as=+h[392];at=+h[396];au=am*+h[400];av=+h[405];aw=+h[393];ax=+h[397];ay=am*+h[401];az=+h[406];aA=+h[394];aB=+h[398];aC=am*+h[402];am=az+aa*aA+al*aB+aC;aD=am==0.0?1.0e-5:am;h[m>>3]=(an+aa*ao+al*ap+aq)/aD;h[m+8>>3]=(ar+aa*as+al*at+au)/aD;h[m+16>>3]=(av+aa*aw+al*ax+ay)/aD;h[m+32>>3]=af;c[m+40>>2]=0;aD=(+h[7089]-ae)*ad+ag+-1.0;al=(+h[7088]-ai)*aj+ak+-1.0;aa=az+aD*aA+al*aB+aC;am=aa==0.0?1.0e-5:aa;h[n>>3]=(an+aD*ao+al*ap+aq)/am;h[n+8>>3]=(ar+aD*as+al*at+au)/am;h[n+16>>3]=(av+aD*aw+al*ax+ay)/am;h[n+32>>3]=af;c[n+40>>2]=0;am=(+h[3305]-ae)*ad+ag+-1.0;al=(+h[3304]-ai)*aj+ak+-1.0;aD=az+am*aA+al*aB+aC;aa=aD==0.0?1.0e-5:aD;h[o>>3]=(an+am*ao+al*ap+aq)/aa;h[o+8>>3]=(ar+am*as+al*at+au)/aa;h[o+16>>3]=(av+am*aw+al*ax+ay)/aa;h[o+32>>3]=af;c[o+40>>2]=0;aa=(+h[5264]-ae)*ad+ag+-1.0;ag=(+h[5263]-ai)*aj+ak+-1.0;ak=az+aa*aA+ag*aB+aC;aC=ak==0.0?1.0e-5:ak;h[p>>3]=(an+aa*ao+ag*ap+aq)/aC;h[p+8>>3]=(ar+aa*as+ag*at+au)/aC;h[p+16>>3]=(av+aa*aw+ag*ax+ay)/aC;h[p+32>>3]=af;c[p+40>>2]=0;ab=(e|0)!=2;do{if(ab){L10808:do{if((Z&4|0)!=0){do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(o,p,56296);break L10808}}while(0);un(o,p,56296,56336)}}while(0);L10815:do{if((c[11692]&1|0)!=0){do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(m,p,56296);break L10815}}while(0);un(m,p,56296,56336)}}while(0);if((e|0)==1){aE=0;break}aF=c[11692]|0;ac=7986}else{aF=Z;ac=7986}}while(0);L10823:do{if((ac|0)==7986){L10825:do{if((aF&2|0)!=0){do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(m,n,56296);break L10825}}while(0);un(m,n,56296,56336)}}while(0);if((c[11692]&8|0)==0){aE=1;break}do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(o,n,56296);aE=1;break L10823}}while(0);un(o,n,56296,56336);aE=1}}while(0);do{if((a[46752]&1)==0){if((c[11690]&2|0)!=0){break}if((c[7662]|0)!=1){break L10803}if((cy(30632,213264)|0)==0){break L10803}}}while(0);af=+h[5279];$=c[200]|0;aC=+h[64664+($*688&-1)>>3];ay=+h[14]-aC;ax=+h[91];ag=+h[96];aw=ay*ax+ag+-1.0;ah=c[144]|0;aa=+h[64664+(ah*688&-1)>>3];av=+h[13]-aa;au=+h[21];at=+h[68];as=av*au+at+-1.0;ar=+h[2];aq=+h[12];ap=(af-af)*ar+aq+-1.0;ao=+h[403];an=+h[391];ak=+h[395];aB=ao+aw*an+as*ak;aA=+h[399];az=ap*aA;aj=+h[404];ai=+h[392];ad=+h[396];ae=aj+aw*ai+as*ad;al=+h[400];am=ap*al;aD=+h[405];aG=+h[393];aH=+h[397];aI=aD+aw*aG+as*aH;aJ=+h[401];aK=ap*aJ;aL=+h[406];aM=+h[394];aN=+h[398];aO=aL+aw*aM+as*aN;as=+h[402];aw=ap*as;ap=aO+aw;aP=ap==0.0?1.0e-5:ap;h[q>>3]=(aB+az)/aP;h[q+8>>3]=(ae+am)/aP;h[q+16>>3]=(aI+aK)/aP;h[q+32>>3]=af;c[q+40>>2]=0;aP=+h[7089]-aC;ap=aP*ax+ag+-1.0;aQ=+h[7088]-aa;aR=aQ*au+at+-1.0;aS=ao+ap*an+aR*ak;aT=aj+ap*ai+aR*ad;aU=aD+ap*aG+aR*aH;aV=aL+ap*aM+aR*aN;aR=aV+aw;ap=aR==0.0?1.0e-5:aR;h[r>>3]=(aS+az)/ap;h[r+8>>3]=(aT+am)/ap;h[r+16>>3]=(aU+aK)/ap;h[r+32>>3]=af;c[r+40>>2]=0;ap=(+h[3305]-aC)*ax+ag+-1.0;aR=(+h[3304]-aa)*au+at+-1.0;aW=ao+ap*an+aR*ak;aX=aj+ap*ai+aR*ad;aY=aD+ap*aG+aR*aH;aZ=aL+ap*aM+aR*aN;aR=aZ+aw;ap=aR==0.0?1.0e-5:aR;h[s>>3]=(aW+az)/ap;h[s+8>>3]=(aX+am)/ap;h[s+16>>3]=(aY+aK)/ap;h[s+32>>3]=af;c[s+40>>2]=0;ap=(+h[5264]-aC)*ax+ag+-1.0;ag=(+h[5263]-aa)*au+at+-1.0;at=ao+ap*an+ag*ak;ak=aj+ap*ai+ag*ad;ad=aD+ap*aG+ag*aH;aH=aL+ap*aM+ag*aN;aN=aH+aw;aw=aN==0.0?1.0e-5:aN;h[t>>3]=(at+az)/aw;h[t+8>>3]=(ak+am)/aw;h[t+16>>3]=(ad+aK)/aw;h[t+32>>3]=af;c[t+40>>2]=0;aw=+h[6915];aK=(aw-af)*ar+aq+-1.0;am=aK*aA;az=aK*al;aN=aK*aJ;ag=aK*as;aK=aO+ag;aM=aK==0.0?1.0e-5:aK;h[u>>3]=(aB+am)/aM;h[u+8>>3]=(ae+az)/aM;h[u+16>>3]=(aI+aN)/aM;h[u+32>>3]=aw;c[u+40>>2]=0;aM=aV+ag;aV=aM==0.0?1.0e-5:aM;h[v>>3]=(aS+am)/aV;h[v+8>>3]=(aT+az)/aV;h[v+16>>3]=(aU+aN)/aV;h[v+32>>3]=aw;c[v+40>>2]=0;aV=aZ+ag;aZ=aV==0.0?1.0e-5:aV;h[w>>3]=(aW+am)/aZ;h[w+8>>3]=(aX+az)/aZ;h[w+16>>3]=(aY+aN)/aZ;h[w+32>>3]=aw;c[w+40>>2]=0;aZ=aH+ag;ag=aZ==0.0?1.0e-5:aZ;h[x>>3]=(at+am)/ag;h[x+8>>3]=(ak+az)/ag;h[x+16>>3]=(ad+aN)/ag;h[x+32>>3]=aw;c[x+40>>2]=0;a_=c[11692]|0;L10843:do{if((a_&240|0)==240){L10965:do{if(aE){do{if((a[38984]&1)==0){ac=8005}else{if((a[46752]&1)==0){ac=8005;break}gt(q,u,56296)}}while(0);if((ac|0)==8005){un(q,u,56296,56336)}do{if((a[38984]&1)==0){ac=8009}else{if((a[46752]&1)==0){ac=8009;break}gt(r,v,56296)}}while(0);if((ac|0)==8009){un(r,v,56296,56336)}do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(s,w,56296);break L10965}}while(0);un(s,w,56296,56336)}}while(0);if(!ab){break}do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(t,x,56296);break L10843}}while(0);un(t,x,56296,56336)}else{aw=+h[64672+($*688&-1)>>3];ag=aw-aC;a$=~~(ay/ag+.1);aN=+h[64672+(ah*688&-1)>>3];ad=aN-aa;a0=~~(av/ad+.1);a1=~~(aP/ag+.1);a2=~~(aQ/ad+.1);az=+h[7076];h[y+24>>3]=az;h[y+16>>3]=az;h[y+8>>3]=az;h[y>>3]=az;h[z+24>>3]=az;h[z+16>>3]=az;h[z+8>>3]=az;h[z>>3]=az;if((d|0)>0){a3=b;a4=d;while(1){a5=a4-1|0;a6=c[a3+260>>2]|0;a7=c[a3+8>>2]|0;do{if((a7|0)==3){if((c[a3+244>>2]|0)==0){break}a9=a3+252|0;ac=8023}else if((a7|0)!=4){a9=37368;ac=8023}}while(0);do{if((ac|0)==8023){ac=0;a7=c[a9>>2]|0;ba=c[a6+8>>2]|0;bb=c[a6+12>>2]|0;bc=c[bb>>2]|0;do{if((bc|0)==0){az=+h[bb+8>>3];ak=az-aC;am=+P(+ak);at=+h[11];if(am>=at){if(+P(+(az-aw))>=at){break}}az=+h[bb+16>>3];am=az-aa;if(+P(+am)>=at){if(+P(+(az-aN))>=at){break}}bd=~~(ak/(aw-aC)+.1);be=~~(am/ad+.1);bf=y+(bd<<4)+(be<<3)|0;am=+h[bb+24>>3];if(+h[bf>>3]<am){h[bf>>3]=am}bf=z+(bd<<4)+(be<<3)|0;if(+h[bf>>3]<=am){break}h[bf>>3]=am}}while(0);bf=ba-1|0;do{if((c[bb+(bf<<6)>>2]|0)==0){am=+h[bb+(bf<<6)+8>>3];ak=am-aC;at=+P(+ak);az=+h[11];if(at>=az){if(+P(+(am-aw))>=az){break}}am=+h[bb+(bf<<6)+16>>3];at=am-aa;if(+P(+at)>=az){if(+P(+(am-aN))>=az){break}}be=~~(ak/(aw-aC)+.1);bd=~~(at/ad+.1);bg=y+(be<<4)+(bd<<3)|0;at=+h[bb+(bf<<6)+24>>3];if(+h[bg>>3]<at){h[bg>>3]=at}bg=z+(be<<4)+(bd<<3)|0;if(+h[bg>>3]<=at){break}h[bg>>3]=at}}while(0);ba=a7-1|0;if((ba|0)==0){bh=a6;bi=bb;bj=bc}else{bg=a6;bd=ba;do{bg=c[bg>>2]|0;bd=bd-1|0;}while((bd|0)!=0);bd=c[bg+12>>2]|0;bh=bg;bi=bd;bj=c[bd>>2]|0}bd=bh+12|0;do{if((bj|0)==0){at=+h[bi+8>>3];ak=at-aC;az=+P(+ak);am=+h[11];if(az>=am){if(+P(+(at-aw))>=am){break}}at=+h[bi+16>>3];az=at-aa;if(+P(+az)>=am){if(+P(+(at-aN))>=am){break}}bc=~~(ak/(aw-aC)+.1);bb=~~(az/ad+.1);a7=y+(bc<<4)+(bb<<3)|0;az=+h[bi+24>>3];if(+h[a7>>3]<az){h[a7>>3]=az}a7=z+(bc<<4)+(bb<<3)|0;if(+h[a7>>3]<=az){break}h[a7>>3]=az}}while(0);bg=c[bd>>2]|0;if((c[bg+(bf<<6)>>2]|0)!=0){break}az=+h[bg+(bf<<6)+8>>3];ak=az-aC;am=+P(+ak);at=+h[11];if(am>=at){if(+P(+(az-aw))>=at){break}}az=+h[bg+(bf<<6)+16>>3];am=az-aa;if(+P(+am)>=at){if(+P(+(az-aN))>=at){break}}a7=~~(ak/ag+.1);bb=~~(am/ad+.1);bc=y+(a7<<4)+(bb<<3)|0;am=+h[bg+(bf<<6)+24>>3];if(+h[bc>>3]<am){h[bc>>3]=am}bc=z+(a7<<4)+(bb<<3)|0;if(+h[bc>>3]<=am){break}h[bc>>3]=am}}while(0);if((a5|0)>0){a3=c[a3>>2]|0;a4=a5}else{break}}}L10910:do{if(aE){L10912:do{if((a_&16|0)==0){ad=+h[y+(a$<<4)+(a0<<3)>>3];ag=+h[z+(a$<<4)+(a0<<3)>>3];if(ad==ag){break}aN=(ag-af)*ar+aq+-1.0;aw=aO+aN*as;am=aw==0.0?1.0e-5:aw;h[A>>3]=(aB+aN*aA)/am;h[A+8>>3]=(ae+aN*al)/am;h[A+16>>3]=(aI+aN*aJ)/am;h[A+32>>3]=ag;c[A+40>>2]=0;ag=(ad-af)*ar+aq+-1.0;am=aO+ag*as;aN=am==0.0?1.0e-5:am;h[B>>3]=(aB+ag*aA)/aN;h[B+8>>3]=(ae+ag*al)/aN;h[B+16>>3]=(aI+ag*aJ)/aN;h[B+32>>3]=ad;c[B+40>>2]=0;do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(A,B,56296);break L10912}}while(0);un(A,B,56296,56336)}else{do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(q,u,56296);break L10912}}while(0);un(q,u,56296,56336)}}while(0);L10925:do{if((c[11692]&32|0)==0){ad=+h[y+(a1<<4)+(a2<<3)>>3];aN=+h[z+(a1<<4)+(a2<<3)>>3];if(ad==aN){break}ag=(+h[7089]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;am=(+h[7088]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;aw=+h[5279];ak=+h[2];at=+h[12];az=(aN-aw)*ak+at+-1.0;aZ=+h[403]+ag*+h[391]+am*+h[395];aH=+h[399];aY=+h[404]+ag*+h[392]+am*+h[396];aX=+h[400];aW=+h[405]+ag*+h[393]+am*+h[397];aV=+h[401];aU=+h[406]+ag*+h[394]+am*+h[398];am=+h[402];ag=aU+az*am;aT=ag==0.0?1.0e-5:ag;h[C>>3]=(aZ+az*aH)/aT;h[C+8>>3]=(aY+az*aX)/aT;h[C+16>>3]=(aW+az*aV)/aT;h[C+32>>3]=aN;c[C+40>>2]=0;aN=(ad-aw)*ak+at+-1.0;at=aU+aN*am;am=at==0.0?1.0e-5:at;h[D>>3]=(aZ+aN*aH)/am;h[D+8>>3]=(aY+aN*aX)/am;h[D+16>>3]=(aW+aN*aV)/am;h[D+32>>3]=ad;c[D+40>>2]=0;do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(C,D,56296);break L10925}}while(0);un(C,D,56296,56336)}else{do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(r,v,56296);break L10925}}while(0);un(r,v,56296,56336)}}while(0);if((c[11692]&64|0)!=0){do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(s,w,56296);break L10910}}while(0);un(s,w,56296,56336);break}a5=1-a0|0;bf=1-a$|0;ad=+h[y+(bf<<4)+(a5<<3)>>3];am=+h[z+(bf<<4)+(a5<<3)>>3];if(ad==am){break}aV=(+h[3305]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;aN=(+h[3304]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;aW=+h[5279];aX=+h[2];aY=+h[12];aH=(am-aW)*aX+aY+-1.0;aZ=+h[403]+aV*+h[391]+aN*+h[395];at=+h[399];aU=+h[404]+aV*+h[392]+aN*+h[396];ak=+h[400];aw=+h[405]+aV*+h[393]+aN*+h[397];aT=+h[401];az=+h[406]+aV*+h[394]+aN*+h[398];aN=+h[402];aV=az+aH*aN;ag=aV==0.0?1.0e-5:aV;h[E>>3]=(aZ+aH*at)/ag;h[E+8>>3]=(aU+aH*ak)/ag;h[E+16>>3]=(aw+aH*aT)/ag;h[E+32>>3]=am;c[E+40>>2]=0;am=(ad-aW)*aX+aY+-1.0;aY=az+am*aN;aN=aY==0.0?1.0e-5:aY;h[F>>3]=(aZ+am*at)/aN;h[F+8>>3]=(aU+am*ak)/aN;h[F+16>>3]=(aw+am*aT)/aN;h[F+32>>3]=ad;c[F+40>>2]=0;do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(E,F,56296);break L10910}}while(0);un(E,F,56296,56336)}}while(0);if(!ab){break}if((c[11692]&128|0)!=0){do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(t,x,56296);break L10843}}while(0);un(t,x,56296,56336);break}a$=1-a2|0;a0=1-a1|0;ad=+h[y+(a0<<4)+(a$<<3)>>3];aN=+h[z+(a0<<4)+(a$<<3)>>3];if(ad==aN){break}aT=(+h[5264]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;am=(+h[5263]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;aw=+h[5279];ak=+h[2];aU=+h[12];at=(aN-aw)*ak+aU+-1.0;aZ=+h[403]+aT*+h[391]+am*+h[395];aY=+h[399];az=+h[404]+aT*+h[392]+am*+h[396];aX=+h[400];aW=+h[405]+aT*+h[393]+am*+h[397];ag=+h[401];aH=+h[406]+aT*+h[394]+am*+h[398];am=+h[402];aT=aH+at*am;aV=aT==0.0?1.0e-5:aT;h[G>>3]=(aZ+at*aY)/aV;h[G+8>>3]=(az+at*aX)/aV;h[G+16>>3]=(aW+at*ag)/aV;h[G+32>>3]=aN;c[G+40>>2]=0;aN=(ad-aw)*ak+aU+-1.0;aU=aH+aN*am;am=aU==0.0?1.0e-5:aU;h[H>>3]=(aZ+aN*aY)/am;h[H+8>>3]=(az+aN*aX)/am;h[H+16>>3]=(aW+aN*ag)/am;h[H+32>>3]=ad;c[H+40>>2]=0;do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(G,H,56296);break L10843}}while(0);un(G,H,56296,56336)}}while(0);L10990:do{if(aE){L10992:do{if((c[11692]&256|0)!=0){do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(u,v,56296);break L10992}}while(0);un(u,v,56296,56336)}}while(0);if((c[11692]&512|0)==0){break}do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(w,v,56296);break L10990}}while(0);un(w,v,56296,56336)}}while(0);if(!ab){break}L11006:do{if((c[11692]&1024|0)!=0){do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(u,x,56296);break L11006}}while(0);un(u,x,56296,56336)}}while(0);if((c[11692]&2048|0)==0){break}do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(w,x,56296);break L10803}}while(0);un(w,x,56296,56336)}}while(0);do{if((c[5094]|0)==0){if((e|0)!=3){break}i=j;return}else{x=c[10026]|0;if((((x|0)>-1?x:-x|0)|0)!=(f|0)|(e|0)==3){i=j;return}else{c[13542]=0;break}}}while(0);f=c[200]|0;x=(c[64916+(f*688&-1)>>2]|0)==0;if(x){if((c[65140+(f*688&-1)>>2]|0)!=0){ac=8133}}else{ac=8133}L11069:do{if((ac|0)==8133){w=c[144]|0;aJ=+h[64664+(w*688&-1)>>3];aI=+h[97];al=aJ+ +h[64672+(w*688&-1)>>3]-aI;ae=+h[64664+(f*688&-1)>>3];aA=(+h[64672+(f*688&-1)>>3]+ae)*.5;aB=+h[96]+ +h[91]*(aA-ae)+-1.0;ae=+h[21];as=+h[68];aO=(aI-aJ)*ae+as+-1.0;aI=(+h[7076]- +h[5279])*+h[2]+ +h[12]+-1.0;aq=+h[403]+aB*+h[391];ar=+h[395];af=aI*+h[399];aa=+h[404]+aB*+h[392];aC=+h[396];aQ=aI*+h[400];aP=+h[405]+aB*+h[393];av=+h[397];ay=aI*+h[401];ad=+h[406]+aB*+h[394];aB=+h[398];am=aI*+h[402];aI=ad+aO*aB+am;ag=aI==0.0?1.0e-5:aI;aI=(al-aJ)*ae+as+-1.0;as=ad+aI*aB+am;am=as==0.0?1.0e-5:as;as=+(c[40]|0);h[695]=((aq+aI*ar+af)/am-(aq+aO*ar+af)/ag)/as;h[694]=((aa+aI*aC+aQ)/am-(aa+aO*aC+aQ)/ag)/as;h[693]=((aP+aI*av+ay)/am-(aP+aO*av+ay)/ag)/as;as=+g[3538];if(as>90.0|(e|0)==1){if(as<=90.0|(e|0)==2|x){bk=f}else{ac=8136}}else{if(x){bk=f}else{ac=8136}}if((ac|0)==8136){de(2,10);bk=c[200]|0}if((c[65140+(bk*688&-1)>>2]|0)==0){break}as=+g[3538];do{if(as>90.0|(e|0)==2){if(as>90.0){w=c[5094]|0;if((e|0)!=1|(w|0)!=0){bl=w;ac=8144;break}else{break L11069}}if((c[5094]|0)==0){break L11069}bm=+h[97];ac=8145}else{bl=c[5094]|0;ac=8144}}while(0);do{if((ac|0)==8144){as=+h[97];if((bl|0)!=0){bm=as;ac=8145;break}ag=(as-al)*.25;do{if((c[65084+(bk*688&-1)>>2]|0)==-3){ay=+h[64664+(bk*688&-1)>>3];av=+h[91];aO=+h[96];aP=(ay-ay)*av+aO+-1.0;am=(as- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;aI=(+h[7076]- +h[5279])*+h[2]+ +h[12]+-1.0;aQ=+h[403];aC=+h[391];aa=am*+h[395];af=aI*+h[399];ar=+h[404];aq=+h[392];aB=am*+h[396];ad=aI*+h[400];ae=+h[406];aJ=+h[394];aN=am*+h[398];am=aI*+h[402];aI=ae+aP*aJ+aN+am;aW=aI==0.0?1.0e-5:aI;aI=+(c[180]|0);w=c[186]|0;aX=+(c[40]|0);u=c[46]|0;az=aO+av*(+h[64672+(bk*688&-1)>>3]-ay)+-1.0;ay=am+(aN+(ae+aJ*az));aJ=ay==0.0?1.0e-5:ay;ay=+Y(+(+(~~(aX*((ad+(aB+(ar+aq*az)))/aJ))+u|0)- +(~~((ar+aP*aq+aB+ad)/aW*aX)+u|0)),+(+(~~(aI*((af+(aa+(aQ+aC*az)))/aJ))+w|0)- +(~~((aQ+aP*aC+aa+af)/aW*aI)+w|0)))/.017453292519943295;if(ay>0.0){bn=ay+.5}else{bn=ay+-.5}w=~~+O(+bn);ay=ag*.5;if(ay<=0.0){bo=w;bp=ay;break}bo=w+180|0;bp=ay}else{bo=0;bp=ag}}while(0);if((c[64916+(bk*688&-1)>>2]&2|0)==0){ag=(aA- +h[64664+(bk*688&-1)>>3])*+h[91]+ +h[96]+-1.0;ay=(bp+as- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;aI=(+h[7076]- +h[5279])*+h[2]+ +h[12]+-1.0;aW=+h[406]+ag*+h[394]+ay*+h[398]+aI*+h[402];af=aW==0.0?1.0e-5:aW;bq=(+h[403]+ag*+h[391]+ay*+h[395]+aI*+h[399])/af;br=(+h[404]+ag*+h[392]+ay*+h[396]+aI*+h[400])/af;bs=a[65072+(bk*688&-1)|0]|0}else{w=a[65072+(bk*688&-1)|0]|0;if((w&1)==0){bt=-0.0-bp}else{bt=bp}af=(aA- +h[64664+(bk*688&-1)>>3])*+h[91]+ +h[96]+-1.0;aI=(bt*.5- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;ay=(+h[7076]- +h[5279])*+h[2]+ +h[12]+-1.0;ag=+h[406]+af*+h[394]+aI*+h[398]+ay*+h[402];aW=ag==0.0?1.0e-5:ag;bq=(+h[403]+af*+h[391]+aI*+h[395]+ay*+h[399])/aW;br=(+h[404]+af*+h[392]+aI*+h[396]+ay*+h[400])/aW;bs=w}if((bs&1)==0){aW=+h[65056+(bk*688&-1)>>3];ay=+((c[W+24>>2]|0)>>>0>>>0);bu=bq- +h[695]*aW*ay;bv=br-ay*aW*+h[694]}else{bu=bq;bv=br}bw=bo;bx=~~(bu*+(c[180]|0))+(c[186]|0)|0;by=~~(bv*+(c[40]|0))+(c[46]|0)|0}}while(0);if((ac|0)==8145){al=(aA- +h[64664+(bk*688&-1)>>3])*+h[91]+ +h[96]+-1.0;aW=(bm- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;ay=(+h[7076]- +h[5279])*+h[2]+ +h[12]+-1.0;aI=+h[406]+al*+h[394]+aW*+h[398]+ay*+h[402];af=aI==0.0?1.0e-5:aI;aI=+h[694];ag=+((c[W+16>>2]|0)>>>0>>>0);aa=(+h[404]+al*+h[392]+aW*+h[396]+ay*+h[400])/af-aI*ag;if((a[65072+(bk*688&-1)|0]&1)==0){bz=aa- +h[65056+(bk*688&-1)>>3]*aI*+((c[W+24>>2]|0)>>>0>>>0)}else{bz=aa}bw=c[65132+(bk*688&-1)>>2]|0;bx=~~((+h[403]+al*+h[391]+aW*+h[395]+ay*+h[399])/af*+(c[180]|0))+(c[186]|0)|0;by=(~~(bz*+(c[40]|0))+(c[46]|0)|0)-~~(ag*1.5)|0}fx(65224+(bk*688&-1)|0,I,J,207600);w=(c[I>>2]|0)+bx|0;u=(c[J>>2]|0)+by|0;v=c[200]|0;aE=a[65264+(v*688&-1)|0]&1;do{if(aE<<24>>24==0){bA=v}else{if((a[37456]&1)!=0){bA=v;break}a[37456]=1;H=c[(c[3524]|0)+88>>2]|0;if((H|0)==0){bA=v;break}cO[H&255](179864);bA=c[200]|0}}while(0);a[37456]=aE;fn(65152+(bA*688&-1)|0,W);do{if((bw|0)==0){ac=8169}else{if((cO[c[(c[3524]|0)+72>>2]&255](bw)|0)==0){ac=8169;break}v=c[200]|0;ln(w,u,c[65140+(v*688&-1)>>2]|0,1,0,bw,c[65144+(v*688&-1)>>2]|0);v=c[(c[3524]|0)+72>>2]|0;cO[v&255](0)}}while(0);if((ac|0)==8169){aE=c[200]|0;ln(w,u,c[65140+(aE*688&-1)>>2]|0,1,0,0,c[65144+(aE*688&-1)>>2]|0)}if((c[65152+((c[200]|0)*688&-1)>>2]|0)!=0){cM[c[W+64>>2]&511](-2)}a[37456]=0}}while(0);bw=c[144]|0;bA=(c[64916+(bw*688&-1)>>2]|0)==0;if(bA){if((c[65140+(bw*688&-1)>>2]|0)!=0){ac=8175}}else{ac=8175}L11129:do{if((ac|0)==8175){by=c[200]|0;bz=+h[64664+(by*688&-1)>>3];bm=+h[69];bv=bz+ +h[64672+(by*688&-1)>>3]-bm;bu=+h[64664+(bw*688&-1)>>3];br=(+h[64672+(bw*688&-1)>>3]+bu)*.5;bq=+h[91];bt=+h[96];bp=(bm-bz)*bq+bt+-1.0;bm=(br-bu)*+h[21]+ +h[68]+-1.0;bu=(+h[7076]- +h[5279])*+h[2]+ +h[12]+-1.0;bn=+h[403];aA=+h[391];ag=bm*+h[395];af=bu*+h[399];ay=+h[404];aW=+h[392];al=bm*+h[396];aa=bu*+h[400];aI=+h[405];aC=+h[393];aP=bm*+h[397];aQ=bu*+h[401];aJ=+h[406];az=+h[394];aX=bm*+h[398];bm=bu*+h[402];bu=aJ+bp*az+aX+bm;ad=bu==0.0?1.0e-5:bu;bu=(bv-bz)*bq+bt+-1.0;bt=aJ+bu*az+aX+bm;bm=bt==0.0?1.0e-5:bt;bt=+(c[180]|0);h[695]=((bn+bu*aA+ag+af)/bm-(bn+bp*aA+ag+af)/ad)/bt;h[694]=((ay+bu*aW+al+aa)/bm-(ay+bp*aW+al+aa)/ad)/bt;h[693]=((aI+bu*aC+aP+aQ)/bm-(aI+bp*aC+aP+aQ)/ad)/bt;bt=+g[3538];if(bt>90.0|(e|0)==1){if(bt<=90.0|(e|0)==2|bA){bB=bw}else{ac=8178}}else{if(bA){bB=bw}else{ac=8178}}if((ac|0)==8178){de(1,12);bB=c[144]|0}if((c[65140+(bB*688&-1)>>2]|0)==0){break}bt=+g[3538];do{if(bt>90.0|(e|0)==2){if(bt>90.0){by=c[5094]|0;if((e|0)!=1|(by|0)!=0){bC=by;ac=8186;break}else{break L11129}}if((c[5094]|0)==0){break L11129}bD=+h[69];ac=8187}else{bC=c[5094]|0;ac=8186}}while(0);do{if((ac|0)==8186){bt=+h[69];if((bC|0)!=0){bD=bt;ac=8187;break}ad=(bv-bt)*.25;do{if((c[65084+(bB*688&-1)>>2]|0)==-3){aQ=+h[64664+(bB*688&-1)>>3];aP=(bt- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;aC=+h[21];bp=+h[68];aI=(aQ-aQ)*aC+bp+-1.0;bm=(+h[7076]- +h[5279])*+h[2]+ +h[12]+-1.0;bu=+h[403]+aP*+h[391];aa=+h[395];al=bm*+h[399];aW=+h[404]+aP*+h[392];ay=+h[396];af=bm*+h[400];ag=+h[406]+aP*+h[394];aP=+h[398];aA=bm*+h[402];bm=ag+aI*aP+aA;bn=bm==0.0?1.0e-5:bm;bm=+(c[180]|0);u=c[186]|0;aX=+(c[40]|0);w=c[46]|0;az=bp+aC*(+h[64672+(bB*688&-1)>>3]-aQ)+-1.0;aQ=aA+(ag+aP*az);aP=aQ==0.0?1.0e-5:aQ;aQ=+Y(+(+(~~(aX*((af+(aW+ay*az))/aP))+w|0)- +(~~((aW+aI*ay+af)/bn*aX)+w|0)),+(+(~~(bm*((al+(bu+aa*az))/aP))+u|0)- +(~~((bu+aI*aa+al)/bn*bm)+u|0)))/.017453292519943295;if(aQ>0.0){bE=aQ+.5}else{bE=aQ+-.5}u=~~+O(+bE);aQ=ad*.5;if(aQ<=0.0){bF=aQ;bG=u;break}bF=aQ;bG=u+180|0}else{bF=ad;bG=0}}while(0);if((c[64916+(bB*688&-1)>>2]&2|0)==0){u=c[200]|0;ad=(bt-bF- +h[64664+(u*688&-1)>>3])*+h[91]+ +h[96]+-1.0;as=(br- +h[64664+(bB*688&-1)>>3])*+h[21]+ +h[68]+-1.0;aQ=(+h[7076]- +h[5279])*+h[2]+ +h[12]+-1.0;bm=+h[406]+ad*+h[394]+as*+h[398]+aQ*+h[402];bn=bm==0.0?1.0e-5:bm;bH=(+h[403]+ad*+h[391]+as*+h[395]+aQ*+h[399])/bn;bI=(+h[404]+ad*+h[392]+as*+h[396]+aQ*+h[400])/bn;bJ=u;bK=a[65072+(u*688&-1)|0]|0}else{u=c[200]|0;w=a[65072+(u*688&-1)|0]|0;if((w&1)==0){bL=bF}else{bL=-0.0-bF}bn=(bL*.5- +h[64664+(u*688&-1)>>3])*+h[91]+ +h[96]+-1.0;aQ=(br- +h[64664+(bB*688&-1)>>3])*+h[21]+ +h[68]+-1.0;as=(+h[7076]- +h[5279])*+h[2]+ +h[12]+-1.0;ad=+h[406]+bn*+h[394]+aQ*+h[398]+as*+h[402];bm=ad==0.0?1.0e-5:ad;bH=(+h[403]+bn*+h[391]+aQ*+h[395]+as*+h[399])/bm;bI=(+h[404]+bn*+h[392]+aQ*+h[396]+as*+h[400])/bm;bJ=u;bK=w}if((bK&1)==0){bm=+h[65056+(bJ*688&-1)>>3];as=+((c[W+28>>2]|0)>>>0>>>0);bM=bH- +h[695]*bm*as;bN=bI-as*bm*+h[694]}else{bM=bH;bN=bI}bO=bG;bP=0;bQ=~~(bN*+(c[40]|0))+(c[46]|0)|0;bR=~~(bM*+(c[180]|0))+(c[186]|0)|0;bS=bB}}while(0);if((ac|0)==8187){w=c[200]|0;bv=+h[64664+(w*688&-1)>>3];bm=+h[91];as=+h[96];aQ=(bD-bv)*bm+as+-1.0;bn=+h[64664+(bB*688&-1)>>3];ad=+h[21];al=+h[68];aa=(br-bn)*ad+al+-1.0;aI=(+h[7076]- +h[5279])*+h[2]+ +h[12]+-1.0;bu=+h[403];aP=+h[391];az=+h[395];aX=aI*+h[399];af=+h[404];ay=+h[392];aW=+h[396];ag=aI*+h[400];aA=+h[406];aC=+h[394];bp=+h[398];aJ=aI*+h[402];aI=aA+aQ*aC+aa*bp+aJ;bq=aI==0.0?1.0e-5:aI;aI=(bu+aQ*aP+aa*az+aX)/bq;bz=(af+aQ*ay+aa*aW+ag)/bq;u=c[64916+(bB*688&-1)>>2]|0;do{if((u&2|0)==0){bT=aI;bU=bz}else{if((a[64788+(w*688&-1)|0]&1)!=0){bT=aI;bU=bz;break}bq=+h[64672+(w*688&-1)>>3];if(bv<bq){if(bv>0.0|bq<0.0){bT=aI;bU=bz;break}}else{if(bq>0.0|bv<0.0){bT=aI;bU=bz;break}}bq=(0.0-bv)*bm+as+-1.0;aa=(bD-bn)*ad+al+-1.0;aQ=aA+bq*aC+aa*bp+aJ;aB=aQ==0.0?1.0e-5:aQ;bT=(bu+bq*aP+aa*az+aX)/aB;bU=(af+bq*ay+aa*aW+ag)/aB}}while(0);ag=+h[695];by=W+20|0;aW=bT-ag*+((c[by>>2]|0)>>>0>>>0);if((a[65072+(w*688&-1)|0]&1)==0){bV=aW- +h[65056+(w*688&-1)>>3]*ag*+((c[W+28>>2]|0)>>>0>>>0)}else{bV=aW}J=~~(bV*+(c[180]|0))+(c[186]|0)|0;bx=~~(bU*+(c[40]|0))+(c[46]|0)|0;c[216]=0;if((u&1|0)==0){bW=.5;bX=bB}else{c[216]=0;de(1,14);bW=+(c[216]|0)+.5;bX=c[144]|0}bO=c[65132+(bX*688&-1)>>2]|0;bP=2;bQ=bx;bR=J-~~(bW*+((c[by>>2]|0)>>>0>>>0))|0;bS=bX}fx(65224+(bS*688&-1)|0,K,L,207600);by=(c[K>>2]|0)+bR|0;J=(c[L>>2]|0)+bQ|0;bx=c[144]|0;I=a[65264+(bx*688&-1)|0]&1;do{if(I<<24>>24==0){bY=bx}else{if((a[37456]&1)!=0){bY=bx;break}a[37456]=1;bk=c[(c[3524]|0)+88>>2]|0;if((bk|0)==0){bY=bx;break}cO[bk&255](179864);bY=c[144]|0}}while(0);a[37456]=I;fn(65152+(bY*688&-1)|0,W);do{if((bO|0)==0){ac=8219}else{if((cO[c[(c[3524]|0)+72>>2]&255](bO)|0)==0){ac=8219;break}bx=c[144]|0;ln(by,J,c[65140+(bx*688&-1)>>2]|0,1,bP,bO,c[65144+(bx*688&-1)>>2]|0);bx=c[(c[3524]|0)+72>>2]|0;cO[bx&255](0)}}while(0);if((ac|0)==8219){I=c[144]|0;ln(by,J,c[65140+(I*688&-1)>>2]|0,1,bP,0,c[65144+(I*688&-1)>>2]|0)}if((c[65152+((c[144]|0)*688&-1)>>2]|0)!=0){cM[c[W+64>>2]&511](-2)}a[37456]=0}}while(0);L11198:do{if((c[64916+((c[34]|0)*688&-1)>>2]|0)!=0){if(!((e|0)!=1&(c[5094]|0)==0)){break}do{if((a[46752]&1)==0){if((c[11690]&2|0)!=0){break}if((a8(30632,115)|0)==0){break L11198}}}while(0);de(0,6)}}while(0);e=c[144]|0;L11206:do{if((c[65284+(e*688&-1)>>2]|0)>-3){J=c[200]|0;if((a[64788+(J*688&-1)|0]&1)!=0){break}bW=+h[64664+(J*688&-1)>>3];bU=+h[64672+(J*688&-1)>>3];if(bW<bU){if(bW>0.0|bU<0.0){break}}else{if(bU>0.0|bW<0.0){break}}bU=+h[64664+(e*688&-1)>>3];bV=+h[7076];bT=(0.0-bW)*+h[91]+ +h[96]+-1.0;bW=+h[21];bD=+h[68];bM=(bU-bU)*bW+bD+-1.0;bN=(bV- +h[5279])*+h[2]+ +h[12]+-1.0;bI=+h[403]+bT*+h[391];bH=+h[395];bL=bN*+h[399];bF=+h[404]+bT*+h[392];bE=+h[396];aW=bN*+h[400];ag=+h[405]+bT*+h[393];ay=+h[397];af=bN*+h[401];aX=+h[406]+bT*+h[394];bT=+h[398];az=bN*+h[402];bN=aX+bM*bT+az;aP=bN==0.0?1.0e-5:bN;h[M>>3]=(bI+bM*bH+bL)/aP;h[M+8>>3]=(bF+bM*bE+aW)/aP;h[M+16>>3]=(ag+bM*ay+af)/aP;h[M+32>>3]=bV;c[M+40>>2]=0;aP=(+h[64672+(e*688&-1)>>3]-bU)*bW+bD+-1.0;bD=aX+aP*bT+az;az=bD==0.0?1.0e-5:bD;h[N>>3]=(bI+aP*bH+bL)/az;h[N+8>>3]=(bF+aP*bE+aW)/az;h[N+16>>3]=(ag+aP*ay+af)/az;h[N+32>>3]=bV;c[N+40>>2]=0;J=65280+(e*688&-1)|0;do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(M,N,J);break L11206}}while(0);un(M,N,J,65320+(e*688&-1)|0)}}while(0);e=c[34]|0;L11218:do{if((c[65284+(e*688&-1)>>2]|0)>-3){N=c[200]|0;if((a[64788+(N*688&-1)|0]&1)!=0){break}bV=+h[64664+(N*688&-1)>>3];az=+h[64672+(N*688&-1)>>3];if(bV<az){if(bV>0.0|az<0.0){break}}else{if(az>0.0|bV<0.0){break}}az=+h[64664+(e*688&-1)>>3];af=(0.0-bV)*+h[91]+ +h[96]+-1.0;bV=(0.0- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;ay=+h[5279];aP=+h[2];ag=+h[12];aW=(az-ay)*aP+ag+-1.0;bE=+h[403]+af*+h[391]+bV*+h[395];bF=+h[399];bL=+h[404]+af*+h[392]+bV*+h[396];bH=+h[400];bI=+h[405]+af*+h[393]+bV*+h[397];bD=+h[401];bT=+h[406]+af*+h[394]+bV*+h[398];bV=+h[402];af=bT+aW*bV;aX=af==0.0?1.0e-5:af;h[Q>>3]=(bE+aW*bF)/aX;h[Q+8>>3]=(bL+aW*bH)/aX;h[Q+16>>3]=(bI+aW*bD)/aX;h[Q+32>>3]=az;c[Q+40>>2]=0;az=+h[64672+(e*688&-1)>>3];aX=(az-ay)*aP+ag+-1.0;ag=bT+aX*bV;bV=ag==0.0?1.0e-5:ag;h[R>>3]=(bE+aX*bF)/bV;h[R+8>>3]=(bL+aX*bH)/bV;h[R+16>>3]=(bI+aX*bD)/bV;h[R+32>>3]=az;c[R+40>>2]=0;N=65280+(e*688&-1)|0;do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(Q,R,N);break L11218}}while(0);un(Q,R,N,65320+(e*688&-1)|0)}}while(0);e=c[200]|0;R=c[65284+(e*688&-1)>>2]|0;L11230:do{if((R|0)>-3){Q=c[144]|0;if((a[64788+(Q*688&-1)|0]&1)!=0){break}az=+h[64664+(Q*688&-1)>>3];bV=+h[64672+(Q*688&-1)>>3];if(az<bV){if(az>0.0|bV<0.0){break}}else{if(bV>0.0|az<0.0){break}}Q=k;J=65320+(e*688&-1)|0;c[Q>>2]=c[J>>2];c[Q+4>>2]=c[J+4>>2];c[Q+8>>2]=c[J+8>>2];c[Q+12>>2]=c[J+12>>2];do{if((c[65280+(e*688&-1)>>2]|0)!=0){az=+h[65304+(e*688&-1)>>3];J=c[(c[3524]|0)+92>>2]|0;if(az<0.0){cK[J&63](+h[3817]);break}else{cK[J&63](az);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[65296+(e*688&-1)>>3]);N=c[(c[3524]|0)+64>>2]|0;if((R|0)<-5){cM[N&511](-2)}else{cM[N&511](R)}N=c[3524]|0;do{if((a[65312+(e*688&-1)|0]&1)==0){if((c[N+96>>2]&1024|0)!=0){break}c[k>>2]=1;c[k+4>>2]=R;ac=8262}else{ac=8262}}while(0);if((ac|0)==8262){fn(k,N)}J=c[200]|0;az=+h[64664+(J*688&-1)>>3];bV=+h[7076];bD=+h[91];aX=+h[96];bI=(az-az)*bD+aX+-1.0;bH=(0.0- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;bL=(bV- +h[5279])*+h[2]+ +h[12]+-1.0;bF=+h[403];bE=+h[391];ag=bH*+h[395];bT=bL*+h[399];aP=+h[404];ay=+h[392];aW=bH*+h[396];af=bL*+h[400];bW=+h[405];bU=+h[393];bM=bH*+h[397];bN=bL*+h[401];bu=+h[406];aJ=+h[394];bp=bH*+h[398];bH=bL*+h[402];bL=bu+bI*aJ+bp+bH;aC=bL==0.0?1.0e-5:bL;h[S>>3]=(bF+bI*bE+ag+bT)/aC;h[S+8>>3]=(aP+bI*ay+aW+af)/aC;h[S+16>>3]=(bW+bI*bU+bM+bN)/aC;h[S+32>>3]=bV;c[S+40>>2]=0;aC=(+h[64672+(J*688&-1)>>3]-az)*bD+aX+-1.0;aX=bu+aC*aJ+bp+bH;bH=aX==0.0?1.0e-5:aX;h[T>>3]=(bF+aC*bE+ag+bT)/bH;h[T+8>>3]=(aP+aC*ay+aW+af)/bH;h[T+16>>3]=(bW+aC*bU+bM+bN)/bH;h[T+32>>3]=bV;c[T+40>>2]=0;Q=65280+(J*688&-1)|0;do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(S,T,Q);break L11230}}while(0);un(S,T,Q,65320+(J*688&-1)|0)}}while(0);T=c[34]|0;S=c[5094]|0;if((c[65140+(T*688&-1)>>2]|0)!=0&(S|0)==0){do{if((a[46752]&1)==0){if((c[11690]&2|0)!=0){break}if((cy(30632,213264)|0)!=0){break}i=j;return}}while(0);bV=(+h[64672+(T*688&-1)>>3]+ +h[64664+(T*688&-1)>>3])*.5;if((c[64916+(T*688&-1)>>2]&2|0)==0){bH=(+h[14]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;bN=(+h[13]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;bM=(bV- +h[5279])*+h[2]+ +h[12]+-1.0;bU=+h[406]+bH*+h[394]+bN*+h[398]+bM*+h[402];aC=bU==0.0?1.0e-5:bU;bZ=1;b_=(~~((+h[403]+bH*+h[391]+bN*+h[395]+bM*+h[399])/aC*+(c[180]|0))+(c[186]|0)|0)+((c[W+20>>2]|0)*-7&-1)|0;b$=~~((+h[404]+bH*+h[392]+bN*+h[396]+bM*+h[400])/aC*+(c[40]|0))+(c[46]|0)|0}else{aC=(0.0- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;bM=(0.0- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;bN=(bV- +h[5279])*+h[2]+ +h[12]+-1.0;bV=+h[406]+aC*+h[394]+bM*+h[398]+bN*+h[402];bH=bV==0.0?1.0e-5:bV;bZ=2;b_=(~~((+h[403]+aC*+h[391]+bM*+h[395]+bN*+h[399])/bH*+(c[180]|0))+(c[186]|0)|0)+((c[W+20>>2]|0)*-5&-1)|0;b$=~~((+h[404]+aC*+h[392]+bM*+h[396]+bN*+h[400])/bH*+(c[40]|0))+(c[46]|0)|0}fx(65224+(T*688&-1)|0,U,V,207600);T=(c[U>>2]|0)+b_|0;b_=(c[V>>2]|0)+b$|0;b$=c[34]|0;V=a[65264+(b$*688&-1)|0]&1;do{if(V<<24>>24==0){b0=b$}else{if((a[37456]&1)!=0){b0=b$;break}a[37456]=1;U=c[(c[3524]|0)+88>>2]|0;if((U|0)==0){b0=b$;break}cO[U&255](179864);b0=c[34]|0}}while(0);a[37456]=V;fn(65152+(b0*688&-1)|0,W);b0=c[34]|0;V=65132+(b0*688&-1)|0;if((c[65084+(b0*688&-1)>>2]|0)==-3){c[V>>2]=-270;b1=-270;ac=8281}else{b$=c[V>>2]|0;if((b$|0)==0){b2=b0;ac=8283}else{b1=b$;ac=8281}}do{if((ac|0)==8281){b$=(cO[c[(c[3524]|0)+72>>2]&255](b1)|0)==0;b0=c[34]|0;if(b$){b2=b0;ac=8283;break}ln(T,b_,c[65140+(b0*688&-1)>>2]|0,bZ,0,c[65132+(b0*688&-1)>>2]|0,c[65144+(b0*688&-1)>>2]|0);b0=c[(c[3524]|0)+72>>2]|0;cO[b0&255](0)}}while(0);if((ac|0)==8283){ln(T,b_,c[65140+(b2*688&-1)>>2]|0,bZ,0,0,c[65144+(b2*688&-1)>>2]|0)}if((c[65152+((c[34]|0)*688&-1)>>2]|0)!=0){cM[c[W+64>>2]&511](-2)}a[37456]=0;b3=c[5094]|0}else{b3=S}if((b3|0)==0){i=j;return}c[13542]=X;i=j;return}function fx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.0;f=i;i=i+24|0;g=f|0;j=f+8|0;k=f+16|0;h[g>>3]=+h[a+16>>3];h[j>>3]=+h[a+24>>3];h[k>>3]=+h[a+32>>3];l=(fM(a,e,g,j,k)|0)==0;m=+h[g>>3];if(!l){c[b>>2]=~~m;n=~~+h[j>>3];c[d>>2]=n;i=f;return}o=(m- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;m=(+h[j>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;p=(+h[k>>3]- +h[5279])*+h[2]+ +h[12]+-1.0;q=+h[406]+o*+h[394]+m*+h[398]+p*+h[402];r=q==0.0?1.0e-5:q;l=~~((+h[404]+o*+h[392]+m*+h[396]+p*+h[400])/r*+(c[40]|0))+(c[46]|0)|0;c[b>>2]=~~((+h[403]+o*+h[391]+m*+h[395]+p*+h[399])/r*+(c[180]|0))+(c[186]|0);c[d>>2]=l;if((c[a>>2]|0)==2){s=+h[64664+((c[200]|0)*688&-1)>>3]}else{s=0.0}h[g>>3]=s;g=(c[5094]|0)!=0;do{if((c[a+4>>2]|0)==2){l=c[144]|0;if(g){t=64672+(l*688&-1)|0}else{t=64664+(l*688&-1)|0}u=+h[t>>3]}else{if(!g){u=0.0;break}u=+h[64672+((c[144]|0)*688&-1)>>3]}}while(0);h[j>>3]=u;if((c[a+8>>2]|0)==2){v=+h[64664+((c[34]|0)*688&-1)>>3]}else{v=0.0}h[k>>3]=v;r=(s- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;s=(u- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;u=(v- +h[5279])*+h[2]+ +h[12]+-1.0;v=+h[406]+r*+h[394]+s*+h[398]+u*+h[402];p=v==0.0?1.0e-5:v;k=~~((+h[404]+r*+h[392]+s*+h[396]+u*+h[400])/p*+(c[40]|0));a=c[46]|0;c[b>>2]=(c[b>>2]|0)-(~~((+h[403]+r*+h[391]+s*+h[395]+u*+h[399])/p*+(c[180]|0))+(c[186]|0)|0);n=(c[d>>2]|0)-(k+a|0)|0;c[d>>2]=n;i=f;return}function fy(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0;d=i;i=i+120|0;e=d|0;f=d+8|0;g=d+16|0;j=d+56|0;k=d+72|0;l=d+80|0;m=d+88|0;n=d+96|0;o=d+104|0;p=d+112|0;q=c[13542]|0;c[13542]=(c[(c[3524]|0)+96>>2]&128|0)==0?55520:0;r=c[10826]|0;if((r|0)==0){c[13542]=q;i=d;return}s=j;t=j|0;u=j+4|0;v=g;w=g+4|0;x=g+8|0;y=g+16|0;z=g|0;A=r;do{if((c[A+100>>2]|0)==(b|0)){fK(A+8|0,m,n,123984);r=~~+h[m>>3];B=~~+h[n>>3];C=A+48|0;if((a[A+88|0]&1)==0){fK(C,k,l,123984);D=~~+h[k>>3];c[o>>2]=D;E=~~+h[l>>3];c[p>>2]=E;F=D;G=E}else{fx(C,o,p,123984);C=(c[o>>2]|0)+r|0;c[o>>2]=C;E=(c[p>>2]|0)+B|0;c[p>>2]=E;F=C;G=E}E=A+144|0;c[s>>2]=c[E>>2];c[s+4>>2]=c[E+4>>2];c[s+8>>2]=c[E+8>>2];c[s+12>>2]=c[E+12>>2];E=c[A+108>>2]|0;do{if((c[A+104>>2]|0)!=0){H=+h[A+128>>3];C=c[(c[3524]|0)+92>>2]|0;if(H<0.0){cK[C&63](+h[3817]);break}else{cK[C&63](H);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[A+120>>3]);C=c[(c[3524]|0)+64>>2]|0;if((E|0)<-5){cM[C&511](-2)}else{cM[C&511](E)}C=c[3524]|0;do{if((a[A+136|0]&1)==0){if((c[C+96>>2]&1024|0)!=0){break}c[t>>2]=1;c[u>>2]=E;I=8328}else{I=8328}}while(0);if((I|0)==8328){I=0;fn(j,C)}E=c[200]|0;h[64776+(E*688&-1)>>3]=+((c[7939]|0)-(c[7938]|0)|0)/(+h[64672+(E*688&-1)>>3]- +h[64664+(E*688&-1)>>3]);c[12912]=c[A+200>>2];c[12910]=0;H=+h[A+168>>3];if(H>0.0){uE(v|0,0,40);c[w>>2]=2;c[x>>2]=2;h[y>>3]=H;c[z>>2]=c[A+176>>2];fN(g,e,f,123984);h[6458]=+h[A+184>>3];h[6457]=+h[A+192>>3];c[12910]=~~+h[e>>3]}fm(r,B,F,G,c[A+160>>2]|0)}A=c[A>>2]|0;}while((A|0)!=0);c[13542]=q;i=d;return}function fz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;cM[c[(c[3524]|0)+168>>2]&511](8);e=c[(c[3524]|0)+76>>2]|0;do{if((c[9046]|0)!=0|(c[9031]|0)==3){if((cO[e&255](2)|0)==0){f=(c[8986]|0)+a|0;g=c[(c[3524]|0)+20>>2]|0;h=f-aa(lp(d)|0,g)|0;cR[c[(c[3524]|0)+68>>2]&127](h,b,d);break}else{cR[c[(c[3524]|0)+68>>2]&127]((c[8986]|0)+a|0,b,d);break}}else{cO[e&255](0);cR[c[(c[3524]|0)+68>>2]&127]((c[8990]|0)+a|0,b,d)}}while(0);cM[c[(c[3524]|0)+168>>2]&511](9);return}function fA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0,U=0.0,V=0,W=0,X=0;f=i;i=i+96|0;g=f|0;j=f+8|0;k=f+16|0;l=f+24|0;m=f+32|0;n=f+48|0;o=f+64|0;p=f+72|0;q=f+80|0;r=f+88|0;s=c[9006]|0;t=c[9010]|0;u=s-t|0;v=(u|0)>-1?u:-u|0;w=(v|0)>24?24:v;v=s+d|0;x=+(w|0);y=+(u|0)/x;u=t+d|0;t=b+64|0;s=c[t>>2]|0;if((s|0)==1){z=8345}else if((s|0)==3){if(+h[b+72>>3]>=0.0){z=8345}}else if((s|0)==2){if((c[b+28>>2]|0)!=-6){z=8345}}if((z|0)==8345){fn(t,c[3524]|0);t=c[13542]|0;z=c[3524]|0;c[13542]=(c[z+96>>2]&128|0)==0?55520:0;cM[c[z+168>>2]&511](8);z=(c[9006]|0)+d|0;c[o>>2]=(c[9010]|0)+d;c[p>>2]=e;c[q>>2]=z;c[r>>2]=e;z=c[3524]|0;if((fl(o,p,q,r)|0)!=0){cN[c[z+56>>2]&255](c[o>>2]|0,c[p>>2]|0);cN[c[z+60>>2]&255](c[q>>2]|0,c[r>>2]|0)}cM[c[(c[3524]|0)+168>>2]&511](9);c[13542]=t;i=f;return}t=(a[b+239|0]&1)==0;r=c[b+260>>2]|0;if((r|0)==0){i=f;return}q=c[b+252>>2]|0;b=0;z=r;A=-8.988465674311579e+307;B=-8.988465674311579e+307;C=8.988465674311579e+307;while(1){if((b|0)>=(q|0)){D=B;E=C;break}r=c[z+12>>2]|0;p=c[z+8>>2]|0;if((p|0)>0){o=0;F=A;G=B;H=C;while(1){do{if((c[r+(o<<6)>>2]|0)==0){if(t){I=r+(o<<6)+24|0}else{I=r+(o<<6)+32|0}J=+h[I>>3];d=J<H;K=d?J:H;L=d?G:F;if(J<=L){M=L;N=G;O=K;break}M=J;N=J;O=K}else{M=F;N=G;O=H}}while(0);d=o+1|0;if((d|0)<(p|0)){o=d;F=M;G=N;H=O}else{P=M;Q=N;R=O;break}}}else{P=A;Q=B;R=C}o=c[z>>2]|0;if((o|0)==0){D=Q;E=R;break}else{b=b+1|0;z=o;A=P;B=Q;C=R}}if(E>D){i=f;return}R=+h[8341];C=E>R?E:R;E=+h[8342];Q=D<E?D:E;do{if(R<C){if(E<=C){z=a[20668]|0;S=+(z<<24>>24==112&1|0);T=z;break}D=(C-R)/(E-R);z=a[20668]|0;if(z<<24>>24==112){S=D;T=112;break}S=1.0-D;T=z}else{z=a[20668]|0;S=+(z<<24>>24!=112&1|0);T=z}}while(0);do{if(R<Q){if(E<=Q){U=+(T<<24>>24==112&1|0);break}C=(Q-R)/(E-R);if(T<<24>>24==112){U=C;break}U=1.0-C}else{U=+(T<<24>>24!=112&1|0)}}while(0);R=(U-S)/x;if((c[9031]|0)==3){c[8490]=u;c[8488]=e}else{cN[c[(c[3524]|0)+56>>2]&255](u,e)}if((w|0)<1){i=f;return}T=m|0;z=m+8|0;b=m+4|0;I=n|0;t=n+8|0;q=n+4|0;o=u;p=1;while(1){if((p|0)==(w|0)){r=c[3524]|0;d=r+144|0;if((c[d>>2]|0)==0){V=r}else{c[T>>2]=5;h[z>>3]=U;c[b>>2]=0;cM[c[d>>2]&511](m);V=c[3524]|0}cN[c[V+56>>2]&255](o,e);W=v}else{x=+(p|0);d=c[3524]|0;r=d+144|0;if((c[r>>2]|0)==0){X=d}else{c[I>>2]=5;h[t>>3]=S+R*x;c[q>>2]=0;cM[c[r>>2]&511](n);X=c[3524]|0}cN[c[X+56>>2]&255](o,e);W=~~(y*x+.5)+u|0}if((c[9031]|0)==3){r=c[8488]|0;c[g>>2]=c[8490];c[j>>2]=r;c[k>>2]=W;c[l>>2]=e;r=c[3524]|0;if((fl(g,j,k,l)|0)!=0){cN[c[r+56>>2]&255](c[g>>2]|0,c[j>>2]|0);cN[c[r+60>>2]&255](c[k>>2]|0,c[l>>2]|0)}c[8490]=W;c[8488]=e}else{cN[c[(c[3524]|0)+60>>2]&255](W,e)}r=p+1|0;if((r|0)>(w|0)){break}else{o=W;p=r}}i=f;return}function fB(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0.0,au=0.0,av=0.0,aw=0.0,ax=0.0,ay=0.0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0.0,aG=0.0,aH=0.0,aI=0.0,aJ=0.0,aK=0.0,aL=0.0,aM=0,aN=0,aO=0,aP=0.0,aQ=0.0,aR=0.0,aS=0.0,aT=0.0,aU=0.0,aV=0.0,aW=0.0,aX=0.0,aY=0.0,aZ=0.0,a_=0,a$=0,a0=0,a1=0,a2=0.0,a3=0.0,a4=0.0,a5=0.0,a6=0.0,a7=0.0,a8=0.0,a9=0.0,ba=0.0,bb=0.0,bc=0.0,bd=0,be=0.0,bf=0.0,bg=0.0,bh=0.0,bi=0.0,bj=0.0,bk=0.0,bl=0.0,bm=0.0,bn=0.0,bo=0.0,bp=0.0,bq=0.0,br=0.0,bs=0.0,bt=0.0,bu=0.0,bv=0.0,bw=0.0,bx=0.0,by=0.0,bz=0.0,bA=0.0,bB=0.0,bC=0.0,bD=0.0,bE=0.0,bF=0.0,bG=0.0,bH=0.0,bI=0.0,bJ=0.0,bK=0,bL=0,bM=0;d=i;i=i+208|0;e=d|0;f=d+8|0;g=d+16|0;j=d+24|0;k=d+32|0;l=d+48|0;m=d+56|0;n=d+64|0;o=d+72|0;p=d+80|0;q=d+96|0;r=d+104|0;s=d+112|0;t=d+120|0;u=d+128|0;w=d+144|0;x=d+152|0;y=d+160|0;z=d+168|0;A=d+176|0;B=d+192|0;C=d+200|0;D=C;E=i;i=i+8|0;F=E;G=i;i=i+8|0;H=i;i=i+8|0;I=i;i=i+8|0;J=i;i=i+16|0;K=i;i=i+16|0;L=i;i=i+16|0;c[C>>2]=0;c[C+4>>2]=0;c[E>>2]=0;c[E+4>>2]=0;M=a[b+239|0]|0;N=b+64|0;O=c[N>>2]|0;if((O|0)==3){fn(N,c[3524]|0);fC(b);i=d;return}else if((O|0)==2){fC(b);i=d;return}else{do{if((c[b+244>>2]|0)!=0){if((a[38984]&1)==0){break}i=d;return}}while(0);O=B|0;N=B+4|0;P=F+4|0;Q=D+4|0;R=b+260|0;S=b+252|0;i4(c[R>>2]|0,c[S>>2]|0,O,C);C=c[S>>2]|0;c[E>>2]=C;E=c[R>>2]|0;if((C|0)>0){R=0;S=E;while(1){b=R+1|0;T=c[S>>2]|0;if((b|0)<(C|0)){R=b;S=T}else{U=T;break}}}else{U=E}do{if((U|0)==0){V=8408}else{E=U;S=0;do{S=S+1|0;E=c[E>>2]|0;}while((E|0)!=0);if((S|0)<=0){V=8408;break}c[P>>2]=S;i4(U,S,N,Q)}}while(0);if((V|0)==8408){c[N>>2]=0}Q=(M&1)==0;M=A|0;U=A+8|0;P=A+4|0;E=u|0;R=u+8|0;C=u+4|0;T=p|0;b=p+8|0;W=p+4|0;X=J|0;Y=K|0;$=L|0;aa=J+8|0;J=K+8|0;K=L+8|0;L=k|0;ab=k+8|0;ac=k+4|0;ad=0;L11450:do{ae=(c[D+(ad<<2)>>2]|0)==0;af=ae?1:-1;ag=c[F+(ad<<2)>>2]|0;L11452:do{if((ag|0)>0){ah=c[B+(ad<<2)>>2]|0;ai=(ah|0)==0;aj=0;ak=0;do{if(ai){break L11452}al=c[ah+(aj<<2)>>2]|0;am=c[al+8>>2]|0;ak=ae?ak:am-1|0;an=c[al+12>>2]|0;ao=al+8|0;if((am|0)>0){am=2;al=0;ap=ak;while(1){aq=an+(ap<<6)|0;ar=c[aq>>2]|0;do{if((ar|0)==0){as=an+(ap<<6)+24|0;at=+h[as>>3];au=(+h[an+(ap<<6)+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;av=(+h[an+(ap<<6)+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;aw=(at- +h[5279])*+h[2]+ +h[12]+-1.0;ax=+h[406]+au*+h[394]+av*+h[398]+aw*+h[402];ay=ax==0.0?1.0e-5:ax;az=~~((+h[403]+au*+h[391]+av*+h[395]+aw*+h[399])/ay*+(c[180]|0))+(c[186]|0)|0;aA=~~((+h[404]+au*+h[392]+av*+h[396]+aw*+h[400])/ay*+(c[40]|0))+(c[46]|0)|0;if((am|0)==0){aB=ap-af|0;if(Q){ay=+h[an+(aB<<6)+24>>3];aC=c[34]|0;aD=(a[64788+(aC*688&-1)|0]&1)==0;aE=(a[66852]&1)==0;do{if(aD){if(aE){aF=at;aG=ay;break}if(ay>0.0){aw=+_(+ay);aH=aw/+h[8358];V=8428;break}else{aI=+h[8341];V=8427;break}}else{if(aE){aI=+Z(+(ay*+h[64800+(aC*688&-1)>>3]));V=8427;break}if(+h[64792+(aC*688&-1)>>3]==+h[8357]){aJ=ay;V=8434;break}aJ=ay*+h[64800+(aC*688&-1)>>3]/+h[8358];V=8434}}while(0);do{if((V|0)==8427){V=0;if(aD){aH=aI;V=8428;break}if(!aE){aJ=aI;V=8434;break}aF=+Z(+(at*+h[64800+(aC*688&-1)>>3]));aG=aI}}while(0);do{if((V|0)==8428){V=0;if(aE){aF=at;aG=aH;break}if(at>0.0){ay=+_(+at);aF=ay/+h[8358];aG=aH;break}else{aF=+h[8341];aG=aH;break}}else if((V|0)==8434){V=0;if(+h[64792+(aC*688&-1)>>3]==+h[8357]){aF=at;aG=aJ;break}aF=at*+h[64800+(aC*688&-1)>>3]/+h[8358];aG=aJ}}while(0);aK=aG+aF}else{aK=+h[an+(aB<<6)+32>>3]+ +h[an+(ap<<6)+32>>3]}at=aK*.5;ay=+h[8341];do{if(ay<at){aw=+h[8342];if(aw<=at){aL=+((a[20668]|0)==112&1|0);break}av=(at-ay)/(aw-ay);if((a[20668]|0)==112){aL=av;break}aL=1.0-av}else{aL=+((a[20668]|0)!=112&1|0)}}while(0);aB=c[3524]|0;aC=aB+144|0;if((c[aC>>2]|0)==0){aM=aB}else{c[M>>2]=5;h[U>>3]=aL;c[P>>2]=0;cM[c[aC>>2]&511](A);aM=c[3524]|0}aC=c[8488]|0;c[w>>2]=c[8490];c[x>>2]=aC;c[y>>2]=az;c[z>>2]=aA;if((fl(w,x,y,z)|0)!=0){cN[c[aM+56>>2]&255](c[w>>2]|0,c[x>>2]|0);cN[c[aM+60>>2]&255](c[y>>2]|0,c[z>>2]|0)}c[8490]=az;c[8488]=aA;break}else if((am|0)==1){if((a[54160]&1)==0){c[8490]=az;c[8488]=aA;break}aC=ap-af|0;ul(an,aC,ap,G,H,I);ay=(+h[G>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;at=(+h[H>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;av=(+h[I>>3]- +h[5279])*+h[2]+ +h[12]+-1.0;aw=+h[406]+ay*+h[394]+at*+h[398]+av*+h[402];au=aw==0.0?1.0e-5:aw;aB=~~((+h[403]+ay*+h[391]+at*+h[395]+av*+h[399])/au*+(c[180]|0))+(c[186]|0)|0;aE=~~((+h[404]+ay*+h[392]+at*+h[396]+av*+h[400])/au*+(c[40]|0))+(c[46]|0)|0;c[8490]=aB;c[8488]=aE;if(Q){au=+h[an+(aC<<6)+24>>3];aD=c[34]|0;aN=(a[64788+(aD*688&-1)|0]&1)==0;aO=(a[66852]&1)==0;L11513:do{if(aN){do{if(aO){aP=au}else{if(au>0.0){av=+_(+au);aP=av/+h[8358];break}else{aQ=+h[8341];V=8463;break L11513}}}while(0);aR=aP;aS=+h[as>>3];V=8464}else{if(aO){aQ=+Z(+(au*+h[64800+(aD*688&-1)>>3]));V=8463;break}if(+h[64792+(aD*688&-1)>>3]==+h[8357]){aT=au}else{aT=au*+h[64800+(aD*688&-1)>>3]/+h[8358]}aU=aT;aV=+h[as>>3];V=8465}}while(0);if((V|0)==8463){V=0;au=+h[as>>3];if(aN){aR=aQ;aS=au;V=8464}else{aU=aQ;aV=au;V=8465}}do{if((V|0)==8464){V=0;if(aO){aW=aS;aX=aR;break}if(aS>0.0){au=+_(+aS);aW=au/+h[8358];aX=aR;break}else{aW=+h[8341];aX=aR;break}}else if((V|0)==8465){V=0;if(aO){aW=+Z(+(aV*+h[64800+(aD*688&-1)>>3]));aX=aU;break}if(+h[64792+(aD*688&-1)>>3]==+h[8357]){aW=aV;aX=aU;break}aW=aV*+h[64800+(aD*688&-1)>>3]/+h[8358];aX=aU}}while(0);aY=aX+aW}else{aY=+h[an+(aC<<6)+32>>3]+ +h[an+(ap<<6)+32>>3]}au=aY*.5;av=+h[8341];do{if(av<au){at=+h[8342];if(at<=au){aZ=+((a[20668]|0)==112&1|0);break}ay=(au-av)/(at-av);if((a[20668]|0)==112){aZ=ay;break}aZ=1.0-ay}else{aZ=+((a[20668]|0)!=112&1|0)}}while(0);aC=c[3524]|0;aD=aC+144|0;if((c[aD>>2]|0)==0){a_=aB;a$=aE;a0=aC}else{c[E>>2]=5;h[R>>3]=aZ;c[C>>2]=0;cM[c[aD>>2]&511](u);a_=c[8490]|0;a$=c[8488]|0;a0=c[3524]|0}c[q>>2]=a_;c[r>>2]=a$;c[s>>2]=az;c[t>>2]=aA;if((fl(q,r,s,t)|0)!=0){cN[c[a0+56>>2]&255](c[q>>2]|0,c[r>>2]|0);cN[c[a0+60>>2]&255](c[s>>2]|0,c[t>>2]|0)}c[8490]=az;c[8488]=aA;break}else{c[8490]=az;c[8488]=aA;break}}else if((ar|0)==1){if((am|0)==0){if((a[54160]&1)==0){break}aD=ap-af|0;ul(an,aD,ap,G,H,I);av=(+h[G>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;au=(+h[H>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;ay=(+h[I>>3]- +h[5279])*+h[2]+ +h[12]+-1.0;at=+h[406]+av*+h[394]+au*+h[398]+ay*+h[402];aw=at==0.0?1.0e-5:at;aC=~~((+h[403]+av*+h[391]+au*+h[395]+ay*+h[399])/aw*+(c[180]|0))+(c[186]|0)|0;aO=~~((+h[404]+av*+h[392]+au*+h[396]+ay*+h[400])/aw*+(c[40]|0))+(c[46]|0)|0;if(Q){aw=+h[an+(aD<<6)+24>>3];aN=c[34]|0;as=(a[64788+(aN*688&-1)|0]&1)==0;a1=(a[66852]&1)==0;L11565:do{if(as){do{if(a1){a2=aw}else{if(aw>0.0){ay=+_(+aw);a2=ay/+h[8358];break}else{a3=+h[8341];V=8500;break L11565}}}while(0);a4=a2;a5=+h[an+(ap<<6)+24>>3];V=8501}else{if(a1){a3=+Z(+(aw*+h[64800+(aN*688&-1)>>3]));V=8500;break}if(+h[64792+(aN*688&-1)>>3]==+h[8357]){a6=aw}else{a6=aw*+h[64800+(aN*688&-1)>>3]/+h[8358]}a7=a6;a8=+h[an+(ap<<6)+24>>3];V=8502}}while(0);if((V|0)==8500){V=0;aw=+h[an+(ap<<6)+24>>3];if(as){a4=a3;a5=aw;V=8501}else{a7=a3;a8=aw;V=8502}}do{if((V|0)==8501){V=0;if(a1){a9=a5;ba=a4;break}if(a5>0.0){aw=+_(+a5);a9=aw/+h[8358];ba=a4;break}else{a9=+h[8341];ba=a4;break}}else if((V|0)==8502){V=0;if(a1){a9=+Z(+(a8*+h[64800+(aN*688&-1)>>3]));ba=a7;break}if(+h[64792+(aN*688&-1)>>3]==+h[8357]){a9=a8;ba=a7;break}a9=a8*+h[64800+(aN*688&-1)>>3]/+h[8358];ba=a7}}while(0);bb=ba+a9}else{bb=+h[an+(aD<<6)+32>>3]+ +h[an+(ap<<6)+32>>3]}aw=bb*.5;ay=+h[8341];do{if(ay<aw){au=+h[8342];if(au<=aw){bc=+((a[20668]|0)==112&1|0);break}av=(aw-ay)/(au-ay);if((a[20668]|0)==112){bc=av;break}bc=1.0-av}else{bc=+((a[20668]|0)!=112&1|0)}}while(0);aD=c[3524]|0;aN=aD+144|0;if((c[aN>>2]|0)==0){bd=aD}else{c[T>>2]=5;h[b>>3]=bc;c[W>>2]=0;cM[c[aN>>2]&511](p);bd=c[3524]|0}aN=c[8488]|0;c[l>>2]=c[8490];c[m>>2]=aN;c[n>>2]=aC;c[o>>2]=aO;if((fl(l,m,n,o)|0)!=0){cN[c[bd+56>>2]&255](c[l>>2]|0,c[m>>2]|0);cN[c[bd+60>>2]&255](c[n>>2]|0,c[o>>2]|0)}c[8490]=aC;c[8488]=aO;break}else if((am|0)!=1){break}if((a[54152]&1)==0){break}aN=ap-af|0;if(!(um(an,aN,ap,X,Y,$)|0)){break}ay=+h[64664+((c[200]|0)*688&-1)>>3];aw=+h[91];av=+h[96];au=(+h[X>>3]-ay)*aw+av+-1.0;at=+h[64664+((c[144]|0)*688&-1)>>3];ax=+h[21];be=+h[68];bf=(+h[Y>>3]-at)*ax+be+-1.0;bg=+h[5279];bh=+h[2];bi=+h[12];bj=(+h[$>>3]-bg)*bh+bi+-1.0;bk=+h[403];bl=+h[391];bm=+h[395];bn=+h[399];bo=+h[404];bp=+h[392];bq=+h[396];br=+h[400];bs=+h[406];bt=+h[394];bu=+h[398];bv=+h[402];bw=bs+au*bt+bf*bu+bj*bv;bx=bw==0.0?1.0e-5:bw;bw=+(c[180]|0);aD=c[186]|0;a1=~~((bk+au*bl+bf*bm+bj*bn)/bx*bw)+aD|0;by=+(c[40]|0);as=c[46]|0;aA=~~((bo+au*bp+bf*bq+bj*br)/bx*by)+as|0;bx=av+aw*(+h[aa>>3]-ay)+-1.0;ay=be+ax*(+h[J>>3]-at)+-1.0;at=bi+bh*(+h[K>>3]-bg)+-1.0;bg=bs+bt*bx+bu*ay+bv*at;bv=bg==0.0?1.0e-5:bg;az=~~(bw*((bk+bl*bx+bm*ay+bn*at)/bv))+aD|0;aD=~~(by*((bo+bp*bx+bq*ay+br*at)/bv))+as|0;c[8490]=a1;c[8488]=aA;if(Q){bv=+h[an+(aN<<6)+24>>3];as=c[34]|0;aE=(a[64788+(as*688&-1)|0]&1)==0;aB=(a[66852]&1)==0;L11615:do{if(aE){do{if(aB){bz=bv}else{if(bv>0.0){at=+_(+bv);bz=at/+h[8358];break}else{bA=+h[8341];V=8536;break L11615}}}while(0);bB=bz;bC=+h[an+(ap<<6)+24>>3];V=8537}else{if(aB){bA=+Z(+(bv*+h[64800+(as*688&-1)>>3]));V=8536;break}if(+h[64792+(as*688&-1)>>3]==+h[8357]){bD=bv}else{bD=bv*+h[64800+(as*688&-1)>>3]/+h[8358]}bE=bD;bF=+h[an+(ap<<6)+24>>3];V=8538}}while(0);if((V|0)==8536){V=0;bv=+h[an+(ap<<6)+24>>3];if(aE){bB=bA;bC=bv;V=8537}else{bE=bA;bF=bv;V=8538}}do{if((V|0)==8537){V=0;if(aB){bG=bC;bH=bB;break}if(bC>0.0){bv=+_(+bC);bG=bv/+h[8358];bH=bB;break}else{bG=+h[8341];bH=bB;break}}else if((V|0)==8538){V=0;if(aB){bG=+Z(+(bF*+h[64800+(as*688&-1)>>3]));bH=bE;break}if(+h[64792+(as*688&-1)>>3]==+h[8357]){bG=bF;bH=bE;break}bG=bF*+h[64800+(as*688&-1)>>3]/+h[8358];bH=bE}}while(0);bI=bH+bG}else{bI=+h[an+(aN<<6)+32>>3]+ +h[an+(ap<<6)+32>>3]}bv=bI*.5;at=+h[8341];do{if(at<bv){br=+h[8342];if(br<=bv){bJ=+((a[20668]|0)==112&1|0);break}ay=(bv-at)/(br-at);if((a[20668]|0)==112){bJ=ay;break}bJ=1.0-ay}else{bJ=+((a[20668]|0)!=112&1|0)}}while(0);aN=c[3524]|0;as=aN+144|0;if((c[as>>2]|0)==0){bK=a1;bL=aA;bM=aN}else{c[L>>2]=5;h[ab>>3]=bJ;c[ac>>2]=0;cM[c[as>>2]&511](k);bK=c[8490]|0;bL=c[8488]|0;bM=c[3524]|0}c[e>>2]=bK;c[f>>2]=bL;c[g>>2]=az;c[j>>2]=aD;if((fl(e,f,g,j)|0)!=0){cN[c[bM+56>>2]&255](c[e>>2]|0,c[f>>2]|0);cN[c[bM+60>>2]&255](c[g>>2]|0,c[j>>2]|0)}c[8490]=az;c[8488]=aD}else if((ar|0)!=2){V=8557;break L11450}}while(0);ar=al+1|0;if((ar|0)<(c[ao>>2]|0)){am=c[aq>>2]|0;al=ar;ap=ap+af|0}else{break}}}aj=aj+1|0;}while((aj|0)<(ag|0))}}while(0);ad=ad+1|0;}while((ad|0)<2);if((V|0)==8557){uk(203224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}V=c[O>>2]|0;if((V|0)!=0){uu(V)}V=c[N>>2]|0;if((V|0)==0){i=d;return}uu(V);i=d;return}}function fC(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0,_=0,$=0,aa=0,ab=0.0,ac=0.0,ad=0.0,ae=0.0,af=0.0,ag=0.0,ah=0.0,ai=0.0,aj=0.0,ak=0.0,al=0.0,am=0.0,an=0.0,ao=0.0,ap=0.0,aq=0.0,ar=0.0,as=0.0,at=0.0,au=0.0,av=0.0,aw=0.0,ax=0,ay=0;d=i;i=i+216|0;e=d|0;f=d+8|0;g=d+16|0;j=d+24|0;k=d+32|0;l=d+40|0;m=d+48|0;n=d+56|0;o=d+64|0;p=d+72|0;q=d+80|0;r=d+88|0;s=d+96|0;t=d+104|0;u=d+112|0;w=d+120|0;x=d+128|0;y=d+144|0;z=d+152|0;A=d+160|0;B=d+168|0;C=d+184|0;D=d+200|0;E=c[b+260>>2]|0;do{if((c[b+244>>2]|0)!=0){if((a[38984]&1)==0){break}i=d;return}}while(0);do{if((a[b+239|0]&1)==0){F=0}else{if((c[b+64>>2]|0)!=3){F=0;break}F=+h[b+72>>3]<0.0}}while(0);if((E|0)==0){i=d;return}G=x|0;H=x+4|0;I=x+8|0;J=B|0;K=C|0;L=D|0;M=B+8|0;B=C+8|0;C=D+8|0;D=b+64|0;N=D|0;O=b+68|0;b=E;L11686:while(1){E=c[b+12>>2]|0;P=b+8|0;if((c[P>>2]|0)>0){Q=0;R=2;while(1){do{if(F){S=(c[3524]|0)+144|0;if((c[S>>2]|0)==0){break}T=~~+h[E+(Q<<6)+32>>3];c[G>>2]=3;c[H>>2]=T;h[I>>3]=0.0;cM[c[S>>2]&511](x)}else{if((c[N>>2]|0)!=2){break}c[O>>2]=~~+h[E+(Q<<6)+32>>3];fn(D,c[3524]|0)}}while(0);S=E+(Q<<6)|0;T=c[S>>2]|0;do{if((T|0)==0){U=(+h[E+(Q<<6)+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;V=(+h[E+(Q<<6)+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;W=(+h[E+(Q<<6)+24>>3]- +h[5279])*+h[2]+ +h[12]+-1.0;X=+h[406]+U*+h[394]+V*+h[398]+W*+h[402];Y=X==0.0?1.0e-5:X;Z=~~((+h[403]+U*+h[391]+V*+h[395]+W*+h[399])/Y*+(c[180]|0))+(c[186]|0)|0;_=~~((+h[404]+U*+h[392]+V*+h[396]+W*+h[400])/Y*+(c[40]|0))+(c[46]|0)|0;if((R|0)==0){$=c[8488]|0;c[s>>2]=c[8490];c[t>>2]=$;c[u>>2]=Z;c[w>>2]=_;$=c[3524]|0;if((fl(s,t,u,w)|0)!=0){cN[c[$+56>>2]&255](c[s>>2]|0,c[t>>2]|0);cN[c[$+60>>2]&255](c[u>>2]|0,c[w>>2]|0)}c[8490]=Z;c[8488]=_;break}else if((R|0)==1){if((a[54160]&1)==0){c[8490]=Z;c[8488]=_;break}ul(E,Q-1|0,Q,y,z,A);Y=(+h[y>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;W=(+h[z>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;V=(+h[A>>3]- +h[5279])*+h[2]+ +h[12]+-1.0;U=+h[406]+Y*+h[394]+W*+h[398]+V*+h[402];X=U==0.0?1.0e-5:U;$=~~((+h[403]+Y*+h[391]+W*+h[395]+V*+h[399])/X*+(c[180]|0))+(c[186]|0)|0;aa=~~((+h[404]+Y*+h[392]+W*+h[396]+V*+h[400])/X*+(c[40]|0))+(c[46]|0)|0;c[8490]=$;c[8488]=aa;c[k>>2]=$;c[l>>2]=aa;c[m>>2]=Z;c[n>>2]=_;aa=c[3524]|0;if((fl(k,l,m,n)|0)!=0){cN[c[aa+56>>2]&255](c[k>>2]|0,c[l>>2]|0);cN[c[aa+60>>2]&255](c[m>>2]|0,c[n>>2]|0)}c[8490]=Z;c[8488]=_;break}else{c[8490]=Z;c[8488]=_;break}}else if((T|0)==1){if((R|0)==0){if((a[54160]&1)==0){break}ul(E,Q-1|0,Q,y,z,A);X=(+h[y>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;V=(+h[z>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;W=(+h[A>>3]- +h[5279])*+h[2]+ +h[12]+-1.0;Y=+h[406]+X*+h[394]+V*+h[398]+W*+h[402];U=Y==0.0?1.0e-5:Y;_=~~((+h[403]+X*+h[391]+V*+h[395]+W*+h[399])/U*+(c[180]|0))+(c[186]|0)|0;Z=~~((+h[404]+X*+h[392]+V*+h[396]+W*+h[400])/U*+(c[40]|0))+(c[46]|0)|0;aa=c[8488]|0;c[e>>2]=c[8490];c[f>>2]=aa;c[g>>2]=_;c[j>>2]=Z;aa=c[3524]|0;if((fl(e,f,g,j)|0)!=0){cN[c[aa+56>>2]&255](c[e>>2]|0,c[f>>2]|0);cN[c[aa+60>>2]&255](c[g>>2]|0,c[j>>2]|0)}c[8490]=_;c[8488]=Z;break}else if((R|0)!=1){break}if((a[54152]&1)==0){break}if(!(um(E,Q-1|0,Q,J,K,L)|0)){break}U=+h[64664+((c[200]|0)*688&-1)>>3];W=+h[91];V=+h[96];X=(+h[J>>3]-U)*W+V+-1.0;Y=+h[64664+((c[144]|0)*688&-1)>>3];ab=+h[21];ac=+h[68];ad=(+h[K>>3]-Y)*ab+ac+-1.0;ae=+h[5279];af=+h[2];ag=+h[12];ah=(+h[L>>3]-ae)*af+ag+-1.0;ai=+h[403];aj=+h[391];ak=+h[395];al=+h[399];am=+h[404];an=+h[392];ao=+h[396];ap=+h[400];aq=+h[406];ar=+h[394];as=+h[398];at=+h[402];au=aq+X*ar+ad*as+ah*at;av=au==0.0?1.0e-5:au;au=+(c[180]|0);Z=c[186]|0;_=~~((ai+X*aj+ad*ak+ah*al)/av*au)+Z|0;aw=+(c[40]|0);aa=c[46]|0;$=~~((am+X*an+ad*ao+ah*ap)/av*aw)+aa|0;av=V+W*(+h[M>>3]-U)+-1.0;U=ac+ab*(+h[B>>3]-Y)+-1.0;Y=ag+af*(+h[C>>3]-ae)+-1.0;ae=aq+ar*av+as*U+at*Y;at=ae==0.0?1.0e-5:ae;ax=~~(au*((ai+aj*av+ak*U+al*Y)/at))+Z|0;Z=~~(aw*((am+an*av+ao*U+ap*Y)/at))+aa|0;c[8490]=_;c[8488]=$;c[o>>2]=_;c[p>>2]=$;c[q>>2]=ax;c[r>>2]=Z;$=c[3524]|0;if((fl(o,p,q,r)|0)!=0){cN[c[$+56>>2]&255](c[o>>2]|0,c[p>>2]|0);cN[c[$+60>>2]&255](c[q>>2]|0,c[r>>2]|0)}c[8490]=ax;c[8488]=Z}else if((T|0)!=2){ay=8605;break L11686}}while(0);T=Q+1|0;if((T|0)<(c[P>>2]|0)){Q=T;R=c[S>>2]|0}else{break}}}R=c[b>>2]|0;if((R|0)==0){ay=8611;break}else{b=R}}if((ay|0)==8605){uk(203224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ay|0)==8611){i=d;return}}function fD(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0,C=0.0,D=0.0,E=0.0,F=0,G=0.0,H=0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0,S=0.0,T=0.0,U=0;g=i;i=i+16|0;j=g|0;k=c[13542]|0;l=c[9006]|0;m=l+d|0;n=c[9010]|0;o=n+d|0;p=b+64|0;q=c[p>>2]|0;r=c[3524]|0;if((f|0)==-1){s=1.0}else{s=((+h[3817]+-1.0)*.5+1.0)*3.0}t=+(l-n|0);n=~~(t/(+((c[r+20>>2]|0)>>>0>>>0)*s)+.5);l=(n|0)<2?2:n;s=+(l|0);u=t/s;if((q|0)==1){v=8617}else if((q|0)==3){if(+h[b+72>>3]>=0.0){v=8617}}else if((q|0)==2){if((c[b+28>>2]|0)!=-6){v=8617}}if((v|0)==8617){fn(p,r);p=c[13542]|0;q=c[3524]|0;c[13542]=(c[q+96>>2]&128|0)==0?55520:0;cM[c[q+168>>2]&511](8);q=(c[9018]|0)+d|0;d=c[13542]|0;if((d|0)==0){v=8619}else{n=(c[d>>2]|0)>(q|0)&1;w=(c[d+4>>2]|0)<(q|0)?n|2:n;n=(c[d+8>>2]|0)>(e|0)?w|4:w;if((((c[d+12>>2]|0)<(e|0)?n|8:n)|0)==0){v=8619}}if((v|0)==8619){cR[c[(c[3524]|0)+80>>2]&127](q,e,f)}cM[c[(c[3524]|0)+168>>2]&511](9);c[13542]=p;i=g;return}p=(a[b+239|0]&1)==0;q=c[b+260>>2]|0;if((q|0)==0){i=g;return}n=c[b+252>>2]|0;b=0;d=q;t=-8.988465674311579e+307;x=-8.988465674311579e+307;y=8.988465674311579e+307;while(1){if((b|0)>=(n|0)){z=x;A=y;break}q=c[d+12>>2]|0;w=c[d+8>>2]|0;if((w|0)>0){B=0;C=t;D=x;E=y;while(1){do{if((c[q+(B<<6)>>2]|0)==0){if(p){F=q+(B<<6)+24|0}else{F=q+(B<<6)+32|0}G=+h[F>>3];H=G<E;I=H?G:E;J=H?D:C;if(G<=J){K=J;L=D;M=I;break}K=G;L=G;M=I}else{K=C;L=D;M=E}}while(0);H=B+1|0;if((H|0)<(w|0)){B=H;C=K;D=L;E=M}else{N=K;O=L;P=M;break}}}else{N=t;O=x;P=y}B=c[d>>2]|0;if((B|0)==0){z=O;A=P;break}else{b=b+1|0;d=B;t=N;x=O;y=P}}if(A>z){i=g;return}P=+h[8341];y=A>P?A:P;A=+h[8342];O=z<A?z:A;do{if(P<y){if(A<=y){d=a[20668]|0;Q=+(d<<24>>24==112&1|0);R=d;break}z=(y-P)/(A-P);d=a[20668]|0;if(d<<24>>24==112){Q=z;R=112;break}Q=1.0-z;R=d}else{d=a[20668]|0;Q=+(d<<24>>24!=112&1|0);R=d}}while(0);do{if(P<O){if(A<=O){S=+(R<<24>>24==112&1|0);break}y=(O-P)/(A-P);if(R<<24>>24==112){S=y;break}S=1.0-y}else{S=+(R<<24>>24!=112&1|0)}}while(0);P=(S-Q)/s;c[13542]=(c[r+96>>2]&128|0)==0?55520:0;if((l|0)>=0){r=j|0;R=j+8|0;d=j+4|0;b=0;do{F=(b|0)==(l|0);if(F){T=S}else{T=Q+P*+(b|0)}p=(c[3524]|0)+144|0;if((c[p>>2]|0)!=0){c[r>>2]=5;h[R>>3]=T;c[d>>2]=0;cM[c[p>>2]&511](j)}p=(b|0)==0;if(p|F){U=p?o:m}else{U=~~(u*+(b|0)+.5)+o|0}p=c[13542]|0;if((p|0)==0){v=8657}else{F=(c[p>>2]|0)>(U|0)&1;n=(c[p+4>>2]|0)<(U|0)?F|2:F;F=(c[p+8>>2]|0)>(e|0)?n|4:n;if((((c[p+12>>2]|0)<(e|0)?F|8:F)|0)==0){v=8657}}if((v|0)==8657){v=0;cR[c[(c[3524]|0)+80>>2]&127](U,e,f)}b=b+1|0;}while((b|0)<=(l|0))}c[13542]=k;i=g;return}function fE(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0,H=0,I=0,J=0,K=0,L=0;e=i;i=i+16|0;f=e|0;g=c[3524]|0;j=c[b+260>>2]|0;if((j|0)==0){i=e;return}k=b+64|0;l=b+239|0;m=b+72|0;n=b+68|0;o=f|0;p=f+4|0;q=f+8|0;r=b+12|0;s=g+80|0;t=b+48|0;u=g+92|0;g=j;do{j=(c[k>>2]|0)==3;if((a[l]&1)!=0&j){v=+h[m>>3]<0.0}else{v=0}do{if(!(v|j^1)){w=c[n>>2]|0;x=(c[3524]|0)+144|0;if((c[x>>2]|0)==0){break}c[o>>2]=3;c[p>>2]=w;h[q>>3]=0.0;cM[c[x>>2]&511](f)}}while(0);j=g+8|0;x=c[j>>2]|0;if((x|0)>0){w=g+12|0;y=0;z=x;while(1){x=c[w>>2]|0;A=x+(y<<6)|0;do{if((c[A>>2]|0)==0){B=(+h[x+(y<<6)+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;C=(+h[x+(y<<6)+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;D=(+h[x+(y<<6)+24>>3]- +h[5279])*+h[2]+ +h[12]+-1.0;E=+h[406]+B*+h[394]+C*+h[398]+D*+h[402];F=E==0.0?1.0e-5:E;G=~~((+h[403]+B*+h[391]+C*+h[395]+D*+h[399])/F*+(c[180]|0))+(c[186]|0)|0;H=~~((+h[404]+B*+h[392]+C*+h[396]+D*+h[400])/F*+(c[40]|0))+(c[46]|0)|0;I=c[13542]|0;if((I|0)!=0){J=(c[I>>2]|0)>(G|0)&1;K=(c[I+4>>2]|0)<(G|0)?J|2:J;J=(c[I+8>>2]|0)>(H|0)?K|4:K;if((((c[I+12>>2]|0)<(H|0)?J|8:J)|0)!=0){L=z;break}}fL(b,A);J=c[r>>2]|0;do{if((J|0)==18|(J|0)==51){if(+h[t>>3]!=-3.0){break}cK[c[u>>2]&63](+h[3817]*+h[x+(y<<6)+48>>3])}}while(0);cR[c[s>>2]&127](G,H,d);L=c[j>>2]|0}else{L=z}}while(0);x=y+1|0;if((x|0)<(L|0)){y=x;z=L}else{break}}}g=c[g>>2]|0;}while((g|0)!=0);i=e;return}function fF(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;e=i;i=i+48|0;f=e|0;g=c[13542]|0;if((c[5094]|0)!=0){c[13542]=31752}j=c[11690]|0;if((j&2|0)==0){k=j}else{j=b+4|0;l=c[j>>2]|0;m=+h[l+24>>3];n=(+h[l+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;o=(+h[l+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;p=(m- +h[5279])*+h[2]+ +h[12]+-1.0;q=+h[404]+n*+h[392]+o*+h[396]+p*+h[400];r=+h[405]+n*+h[393]+o*+h[397]+p*+h[401];s=+h[406]+n*+h[394]+o*+h[398]+p*+h[402];t=s==0.0?1.0e-5:s;s=(+h[403]+n*+h[391]+o*+h[395]+p*+h[399])/t;l=f|0;h[l>>3]=s;p=q/t;u=f+8|0;h[u>>3]=p;q=r/t;v=f+16|0;h[v>>3]=q;w=f+32|0;h[w>>3]=m;x=f+40|0;c[x>>2]=0;if((a[38984]&1)==0){y=f;c[7612]=c[y>>2];c[7613]=c[y+4>>2];c[7614]=c[y+8>>2];c[7615]=c[y+12>>2];c[7616]=c[y+16>>2];c[7617]=c[y+20>>2];c[7618]=c[y+24>>2];c[7619]=c[y+28>>2];c[7620]=c[y+32>>2];c[7621]=c[y+36>>2];c[7622]=c[y+40>>2];c[7623]=c[y+44>>2];z=8695}else{if(q==-2.0){y=f;c[7612]=c[y>>2];c[7613]=c[y+4>>2];c[7614]=c[y+8>>2];c[7615]=c[y+12>>2];c[7616]=c[y+16>>2];c[7617]=c[y+20>>2];c[7618]=c[y+24>>2];c[7619]=c[y+28>>2];c[7620]=c[y+32>>2];c[7621]=c[y+36>>2];c[7622]=c[y+40>>2];c[7623]=c[y+44>>2]}else{h[v>>3]=q+.01;y=f;c[7612]=c[y>>2];c[7613]=c[y+4>>2];c[7614]=c[y+8>>2];c[7615]=c[y+12>>2];c[7616]=c[y+16>>2];c[7617]=c[y+20>>2];c[7618]=c[y+24>>2];c[7619]=c[y+28>>2];c[7620]=c[y+32>>2];c[7621]=c[y+36>>2];c[7622]=c[y+40>>2];c[7623]=c[y+44>>2]}if((a[46752]&1)==0){z=8695}}if((z|0)==8695){cN[c[(c[3524]|0)+56>>2]&255](~~(s*+(c[180]|0))+(c[186]|0)|0,~~(p*+(c[40]|0))+(c[46]|0)|0)}y=b+44|0;if((c[y>>2]|0)>1){A=1;do{B=c[j>>2]|0;p=+h[B+(A<<6)+24>>3];s=(+h[B+(A<<6)+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;q=(+h[B+(A<<6)+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;m=(p- +h[5279])*+h[2]+ +h[12]+-1.0;t=+h[404]+s*+h[392]+q*+h[396]+m*+h[400];r=+h[405]+s*+h[393]+q*+h[397]+m*+h[401];o=+h[406]+s*+h[394]+q*+h[398]+m*+h[402];n=o==0.0?1.0e-5:o;h[l>>3]=(+h[403]+s*+h[391]+q*+h[395]+m*+h[399])/n;h[u>>3]=t/n;t=r/n;h[v>>3]=t;h[w>>3]=p;c[x>>2]=0;if(!((a[38984]&1)==0|t==-2.0)){h[v>>3]=t+.01}up(f,d);A=A+1|0;}while((A|0)<(c[y>>2]|0))}k=c[11690]|0}do{if((k&1|0)!=0){y=b+4|0;A=c[y>>2]|0;t=+h[7076];p=(+h[A+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;n=(+h[A+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;r=(t- +h[5279])*+h[2]+ +h[12]+-1.0;m=+h[404]+p*+h[392]+n*+h[396]+r*+h[400];q=+h[405]+p*+h[393]+n*+h[397]+r*+h[401];s=+h[406]+p*+h[394]+n*+h[398]+r*+h[402];o=s==0.0?1.0e-5:s;s=(+h[403]+p*+h[391]+n*+h[395]+r*+h[399])/o;v=f|0;h[v>>3]=s;r=m/o;x=f+8|0;h[x>>3]=r;w=f+16|0;h[w>>3]=q/o;u=f+32|0;h[u>>3]=t;l=f+40|0;c[l>>2]=0;h[u>>3]=+h[A+24>>3];A=f;c[7612]=c[A>>2];c[7613]=c[A+4>>2];c[7614]=c[A+8>>2];c[7615]=c[A+12>>2];c[7616]=c[A+16>>2];c[7617]=c[A+20>>2];c[7618]=c[A+24>>2];c[7619]=c[A+28>>2];c[7620]=c[A+32>>2];c[7621]=c[A+36>>2];c[7622]=c[A+40>>2];c[7623]=c[A+44>>2];if((a[38984]&1)==0){z=8704}else{if((a[46752]&1)==0){z=8704}}if((z|0)==8704){cN[c[(c[3524]|0)+56>>2]&255](~~(s*+(c[180]|0))+(c[186]|0)|0,~~(r*+(c[40]|0))+(c[46]|0)|0)}A=b+44|0;if((c[A>>2]|0)>1){C=1}else{break}do{j=c[y>>2]|0;r=+h[7076];s=(+h[j+(C<<6)+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;t=(+h[j+(C<<6)+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;o=(r- +h[5279])*+h[2]+ +h[12]+-1.0;q=+h[404]+s*+h[392]+t*+h[396]+o*+h[400];m=+h[405]+s*+h[393]+t*+h[397]+o*+h[401];n=+h[406]+s*+h[394]+t*+h[398]+o*+h[402];p=n==0.0?1.0e-5:n;h[v>>3]=(+h[403]+s*+h[391]+t*+h[395]+o*+h[399])/p;h[x>>3]=q/p;h[w>>3]=m/p;h[u>>3]=r;c[l>>2]=0;h[u>>3]=+h[j+(C<<6)+24>>3];up(f,d);C=C+1|0;}while((C|0)<(c[A>>2]|0))}}while(0);if((c[5094]|0)==0){i=e;return}c[13542]=g;i=e;return}function fG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0;e=i;i=i+48|0;f=e|0;g=c[11690]|0;do{if((g&2|0)==0){j=g}else{k=b+44|0;if((c[k>>2]|0)<=0){j=g;break}l=b+4|0;m=f|0;n=f+8|0;o=f+16|0;p=f+32|0;q=f+40|0;r=0;do{s=c[l>>2]|0;t=+h[s+(r<<6)+24>>3];u=(+h[s+(r<<6)+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;v=(+h[s+(r<<6)+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;w=(t- +h[5279])*+h[2]+ +h[12]+-1.0;x=+h[404]+u*+h[392]+v*+h[396]+w*+h[400];y=+h[405]+u*+h[393]+v*+h[397]+w*+h[401];z=+h[406]+u*+h[394]+v*+h[398]+w*+h[402];A=z==0.0?1.0e-5:z;h[m>>3]=(+h[403]+u*+h[391]+v*+h[395]+w*+h[399])/A;h[n>>3]=x/A;x=y/A;h[o>>3]=x;h[p>>3]=t;c[q>>2]=0;if(!((a[38984]&1)==0|x==-2.0)){h[o>>3]=x+.01}uo(f,d);r=r+1|0;}while((r|0)<(c[k>>2]|0));j=c[11690]|0}}while(0);if((j&1|0)==0){i=e;return}j=b+44|0;if((c[j>>2]|0)<=0){i=e;return}g=b+4|0;b=f|0;k=f+8|0;r=f+16|0;o=f+32|0;q=f+40|0;p=0;do{n=c[g>>2]|0;x=(+h[n+(p<<6)+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;t=(+h[n+(p<<6)+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;A=(+h[7076]- +h[5279])*+h[2]+ +h[12]+-1.0;y=+h[404]+x*+h[392]+t*+h[396]+A*+h[400];w=+h[405]+x*+h[393]+t*+h[397]+A*+h[401];v=+h[406]+x*+h[394]+t*+h[398]+A*+h[402];u=v==0.0?1.0e-5:v;h[b>>3]=(+h[403]+x*+h[391]+t*+h[395]+A*+h[399])/u;h[k>>3]=y/u;h[r>>3]=w/u;c[q>>2]=0;h[o>>3]=+h[n+(p<<6)+24>>3];uo(f,d);p=p+1|0;}while((p|0)<(c[j>>2]|0));i=e;return}function fH(b,d,e,f,g){b=b|0;d=+d;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0;j=i;i=i+144|0;k=f;f=i;i=i+56|0;uD(f,k,56);k=j|0;l=j+16|0;m=j+32|0;n=j+80|0;o=j+128|0;p=j+136|0;q=(e|0)!=0;if(q){r=65056+(b*688&-1)|0}else{r=65064+(b*688&-1)|0}s=65072+(b*688&-1)|0;t=+h[r>>3]*((a[s]&1)!=0?1.0:-1.0);r=c[144]|0;u=+h[64664+(r*688&-1)>>3];v=+h[97];w=u+ +h[64672+(r*688&-1)>>3]-v;r=c[3524]|0;x=+h[7076];y=c[200]|0;z=(d- +h[64664+(y*688&-1)>>3])*+h[91]+ +h[96]+-1.0;A=(v-u)*+h[21]+ +h[68]+-1.0;u=(x- +h[5279])*+h[2]+ +h[12]+-1.0;v=+h[404]+z*+h[392]+A*+h[396]+u*+h[400];B=+h[405]+z*+h[393]+A*+h[397]+u*+h[401];C=+h[406]+z*+h[394]+A*+h[398]+u*+h[402];D=C==0.0?1.0e-5:C;E=m|0;h[E>>3]=(+h[403]+z*+h[391]+A*+h[395]+u*+h[399])/D;F=m+8|0;h[F>>3]=v/D;G=m+16|0;h[G>>3]=B/D;H=m+32|0;h[H>>3]=x;I=m+40|0;c[I>>2]=0;if((c[f+4>>2]|0)>-3){J=r+168|0;cM[c[J>>2]&511](3);x=+h[7076];D=(d- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;B=(w- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;v=(x- +h[5279])*+h[2]+ +h[12]+-1.0;u=+h[404]+D*+h[392]+B*+h[396]+v*+h[400];A=+h[405]+D*+h[393]+B*+h[397]+v*+h[401];z=+h[406]+D*+h[394]+B*+h[398]+v*+h[402];C=z==0.0?1.0e-5:z;h[n>>3]=(+h[403]+D*+h[391]+B*+h[395]+v*+h[399])/C;h[n+8>>3]=u/C;h[n+16>>3]=A/C;h[n+32>>3]=x;c[n+40>>2]=0;do{if((a[38984]&1)==0){K=8734}else{if((a[46752]&1)==0){K=8734;break}gt(m,n,f)}}while(0);if((K|0)==8734){un(m,n,f,f+40|0)}cM[c[J>>2]&511](4);L=c[200]|0}else{L=y}do{if((c[64916+(L*688&-1)>>2]&2|0)!=0){y=c[144]|0;if((a[64788+(y*688&-1)|0]&1)!=0){break}x=+h[64664+(y*688&-1)>>3];C=+h[64672+(y*688&-1)>>3];if(x<C){if(x>0.0|C<0.0){break}}else{if(C>0.0|x<0.0){break}}C=+h[7076];A=(d- +h[64664+(L*688&-1)>>3])*+h[91]+ +h[96]+-1.0;u=(0.0-x)*+h[21]+ +h[68]+-1.0;x=(C- +h[5279])*+h[2]+ +h[12]+-1.0;v=+h[404]+A*+h[392]+u*+h[396]+x*+h[400];B=+h[405]+A*+h[393]+u*+h[397]+x*+h[401];D=+h[406]+A*+h[394]+u*+h[398]+x*+h[402];z=D==0.0?1.0e-5:D;h[E>>3]=(+h[403]+A*+h[391]+u*+h[395]+x*+h[399])/z;h[F>>3]=v/z;h[G>>3]=B/z;h[H>>3]=C;c[I>>2]=0}}while(0);L=r+24|0;y=n|0;h[y>>3]=+h[E>>3]+t*+h[695]*+((c[L>>2]|0)>>>0>>>0);J=n+8|0;h[J>>3]=+h[F>>3]+t*+h[694]*+((c[L>>2]|0)>>>0>>>0);f=n+16|0;h[f>>3]=+h[G>>3]+t*+h[693]*+((c[L>>2]|0)>>>0>>>0);M=n+32|0;h[M>>3]=+h[H>>3];do{if((a[38984]&1)==0){K=8745}else{if((a[46752]&1)==0){K=8745;break}gt(m,n,56296)}}while(0);if((K|0)==8745){un(m,n,56296,56336)}N=l;c[N>>2]=c[14084];c[N+4>>2]=c[56340>>2];c[N+8>>2]=c[56344>>2];c[N+12>>2]=c[56348>>2];N=c[14075]|0;do{if((c[14074]|0)!=0){C=+h[7040];O=c[(c[3524]|0)+92>>2]|0;if(C<0.0){cK[O&63](+h[3817]);break}else{cK[O&63](C);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[7039]);O=c[(c[3524]|0)+64>>2]|0;if((N|0)<-5){cM[O&511](-2)}else{cM[O&511](N)}O=c[3524]|0;do{if((a[56328]&1)==0){if((c[O+96>>2]&1024|0)!=0){break}c[l>>2]=1;c[l+4>>2]=N;K=8756}else{K=8756}}while(0);if((K|0)==8756){fn(l,O)}do{if(q){L11938:do{if((g|0)==0){Q=e}else{O=c[200]|0;C=+h[64672+(O*688&-1)>>3]- +h[64664+(O*688&-1)>>3];O=g;while(1){if(+P(+((d- +h[O>>3])/C))<=.001){Q=0;break L11938}l=c[O+16>>2]|0;if((l|0)==0){Q=e;break}else{O=l}}}}while(0);fx(64984+(b*688&-1)|0,o,p,99744);C=+h[695];z=+(c[180]|0);B=C*z;if(B<-.9){R=0}else{R=B<.9?1:2}O=c[5094]|0;do{if((O|0)==0){S=R}else{if((a[65272+(b*688&-1)|0]&1)==0){S=R;break}S=c[65128+(b*688&-1)>>2]|0}}while(0);B=+h[E>>3]-C*+((c[r+20>>2]|0)>>>0>>>0);h[y>>3]=B;v=+h[694];x=+h[F>>3]-v*+((c[r+16>>2]|0)>>>0>>>0);h[J>>3]=x;if((a[s]&1)==0){u=+h[65056+(b*688&-1)>>3];A=B-u*C*+((c[L>>2]|0)>>>0>>>0);h[y>>3]=A;D=x-u*v*+((c[L>>2]|0)>>>0>>>0);h[J>>3]=D;T=A;U=D}else{T=B;U=x}l=~~(T*z)+(c[186]|0)|0;N=~~(U*+(c[40]|0))+(c[46]|0)|0;V=64928+(b*688&-1)|0;if((c[V>>2]|0)==0){W=O}else{fn(V,r);W=c[5094]|0}V=c[65032+(b*688&-1)>>2]|0;if((W|0)==0|(V|0)==0){K=8773}else{if((cO[c[(c[3524]|0)+72>>2]&255](V)|0)==0){K=8773}else{X=V}}if((K|0)==8773){X=0}ln(l+(c[o>>2]|0)|0,N+(c[p>>2]|0)|0,Q,S,0,X,c[64924+(b*688&-1)>>2]|0);N=c[(c[3524]|0)+72>>2]|0;cO[N&255](0);N=k;c[N>>2]=c[14084];c[N+4>>2]=c[56340>>2];c[N+8>>2]=c[56344>>2];c[N+12>>2]=c[56348>>2];N=c[14075]|0;do{if((c[14074]|0)!=0){x=+h[7040];l=c[(c[3524]|0)+92>>2]|0;if(x<0.0){cK[l&63](+h[3817]);break}else{cK[l&63](x);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[7039]);O=c[(c[3524]|0)+64>>2]|0;if((N|0)<-5){cM[O&511](-2)}else{cM[O&511](N)}O=c[3524]|0;if((a[56328]&1)==0){if((c[O+96>>2]&1024|0)!=0){break}c[k>>2]=1;c[k+4>>2]=N}fn(k,O)}}while(0);k=c[200]|0;if((c[64916+(k*688&-1)>>2]&4|0)==0){i=j;return}U=+h[7076];T=(d- +h[64664+(k*688&-1)>>3])*+h[91]+ +h[96]+-1.0;d=(w- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;w=(U- +h[5279])*+h[2]+ +h[12]+-1.0;z=+h[404]+T*+h[392]+d*+h[396]+w*+h[400];C=+h[405]+T*+h[393]+d*+h[397]+w*+h[401];x=+h[406]+T*+h[394]+d*+h[398]+w*+h[402];B=x==0.0?1.0e-5:x;x=(+h[403]+T*+h[391]+d*+h[395]+w*+h[399])/B;h[E>>3]=x;w=z/B;h[F>>3]=w;z=C/B;h[G>>3]=z;h[H>>3]=U;c[I>>2]=0;h[y>>3]=x-t*+h[695]*+((c[L>>2]|0)>>>0>>>0);h[J>>3]=w-t*+h[694]*+((c[L>>2]|0)>>>0>>>0);h[f>>3]=z-t*+h[693]*+((c[L>>2]|0)>>>0>>>0);h[M>>3]=U;do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(m,n,56296);i=j;return}}while(0);un(m,n,56296,56336);i=j;return}function fI(b,d,e,f,g){b=b|0;d=+d;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0,R=0,S=0.0,T=0.0,U=0,V=0.0,W=0,X=0.0,Y=0,Z=0,_=0,$=0;j=i;i=i+128|0;k=f;f=i;i=i+56|0;uD(f,k,56);k=j|0;l=j+16|0;m=j+64|0;n=j+112|0;o=j+120|0;p=(e|0)!=0;if(p){q=65056+(b*688&-1)|0}else{q=65064+(b*688&-1)|0}r=65072+(b*688&-1)|0;s=+h[q>>3]*((a[r]&1)!=0?1.0:-1.0);q=c[200]|0;t=+h[64664+(q*688&-1)>>3];u=+h[69];v=t+ +h[64672+(q*688&-1)>>3]-u;q=c[3524]|0;w=+h[7076];x=(u-t)*+h[91]+ +h[96]+-1.0;y=c[144]|0;t=(d- +h[64664+(y*688&-1)>>3])*+h[21]+ +h[68]+-1.0;u=(w- +h[5279])*+h[2]+ +h[12]+-1.0;z=+h[404]+x*+h[392]+t*+h[396]+u*+h[400];A=+h[405]+x*+h[393]+t*+h[397]+u*+h[401];B=+h[406]+x*+h[394]+t*+h[398]+u*+h[402];C=B==0.0?1.0e-5:B;D=l|0;h[D>>3]=(+h[403]+x*+h[391]+t*+h[395]+u*+h[399])/C;E=l+8|0;h[E>>3]=z/C;F=l+16|0;h[F>>3]=A/C;G=l+32|0;h[G>>3]=w;H=l+40|0;c[H>>2]=0;if((c[f+4>>2]|0)>-3){I=q+168|0;cM[c[I>>2]&511](3);w=+h[7076];C=(v- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;A=(d- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;z=(w- +h[5279])*+h[2]+ +h[12]+-1.0;u=+h[404]+C*+h[392]+A*+h[396]+z*+h[400];t=+h[405]+C*+h[393]+A*+h[397]+z*+h[401];x=+h[406]+C*+h[394]+A*+h[398]+z*+h[402];B=x==0.0?1.0e-5:x;h[m>>3]=(+h[403]+C*+h[391]+A*+h[395]+z*+h[399])/B;h[m+8>>3]=u/B;h[m+16>>3]=t/B;h[m+32>>3]=w;c[m+40>>2]=0;do{if((a[38984]&1)==0){J=8801}else{if((a[46752]&1)==0){J=8801;break}gt(l,m,f)}}while(0);if((J|0)==8801){un(l,m,f,f+40|0)}cM[c[I>>2]&511](4);K=c[144]|0}else{K=y}do{if((c[64916+(K*688&-1)>>2]&2|0)!=0){y=c[200]|0;if((a[64788+(y*688&-1)|0]&1)!=0){break}w=+h[64664+(y*688&-1)>>3];B=+h[64672+(y*688&-1)>>3];if(w<B){if(w>0.0|B<0.0){break}}else{if(B>0.0|w<0.0){break}}B=+h[7076];t=(0.0-w)*+h[91]+ +h[96]+-1.0;w=(d- +h[64664+(K*688&-1)>>3])*+h[21]+ +h[68]+-1.0;u=(B- +h[5279])*+h[2]+ +h[12]+-1.0;z=+h[404]+t*+h[392]+w*+h[396]+u*+h[400];A=+h[405]+t*+h[393]+w*+h[397]+u*+h[401];C=+h[406]+t*+h[394]+w*+h[398]+u*+h[402];x=C==0.0?1.0e-5:C;h[D>>3]=(+h[403]+t*+h[391]+w*+h[395]+u*+h[399])/x;h[E>>3]=z/x;h[F>>3]=A/x;h[G>>3]=B;c[H>>2]=0}}while(0);K=q+28|0;y=m|0;h[y>>3]=+h[D>>3]+s*+h[695]*+((c[K>>2]|0)>>>0>>>0);I=m+8|0;h[I>>3]=+h[E>>3]+s*+h[694]*+((c[K>>2]|0)>>>0>>>0);f=m+16|0;h[f>>3]=+h[F>>3]+s*+h[693]*+((c[K>>2]|0)>>>0>>>0);L=m+32|0;h[L>>3]=+h[G>>3];do{if((a[38984]&1)==0){J=8812}else{if((a[46752]&1)==0){J=8812;break}gt(l,m,56296)}}while(0);if((J|0)==8812){un(l,m,56296,56336)}do{if(p){L12016:do{if((g|0)==0){M=e}else{N=c[144]|0;B=+h[64672+(N*688&-1)>>3]- +h[64664+(N*688&-1)>>3];N=g;while(1){if(+P(+((d- +h[N>>3])/B))<=.001){M=0;break L12016}O=c[N+16>>2]|0;if((O|0)==0){M=e;break}else{N=O}}}}while(0);fx(64984+(b*688&-1)|0,n,o,94352);B=+h[695];N=c[180]|0;x=B*+(N|0);if(x<-.9){Q=0}else{Q=x<.9?1:2}O=c[5094]|0;do{if((O|0)==0){R=Q}else{if((a[65272+(b*688&-1)|0]&1)==0){R=Q;break}R=c[65128+(b*688&-1)>>2]|0}}while(0);x=+h[D>>3]-B*+((c[q+20>>2]|0)>>>0>>>0);h[y>>3]=x;A=+h[694];z=+h[E>>3]-A*+((c[q+16>>2]|0)>>>0>>>0);h[I>>3]=z;if((a[r]&1)==0){u=+h[65056+(b*688&-1)>>3];w=x-u*B*+((c[K>>2]|0)>>>0>>>0);h[y>>3]=w;t=z-u*A*+((c[q+24>>2]|0)>>>0>>>0);h[I>>3]=t;S=w;T=t}else{S=x;T=z}U=64928+(b*688&-1)|0;if((c[U>>2]|0)==0){V=S;W=N;X=T;Y=O}else{fn(U,q);V=+h[y>>3];W=c[180]|0;X=+h[I>>3];Y=c[5094]|0}U=~~(V*+(W|0))+(c[186]|0)|0;Z=~~(X*+(c[40]|0))+(c[46]|0)|0;_=c[65032+(b*688&-1)>>2]|0;if((Y|0)==0|(_|0)==0){J=8829}else{if((cO[c[(c[3524]|0)+72>>2]&255](_)|0)==0){J=8829}else{$=_}}if((J|0)==8829){$=0}ln(U+(c[n>>2]|0)|0,Z+(c[o>>2]|0)|0,M,R,0,$,c[64924+(b*688&-1)>>2]|0);Z=c[(c[3524]|0)+72>>2]|0;cO[Z&255](0);Z=k;c[Z>>2]=c[14084];c[Z+4>>2]=c[56340>>2];c[Z+8>>2]=c[56344>>2];c[Z+12>>2]=c[56348>>2];Z=c[14075]|0;do{if((c[14074]|0)!=0){z=+h[7040];U=c[(c[3524]|0)+92>>2]|0;if(z<0.0){cK[U&63](+h[3817]);break}else{cK[U&63](z);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[7039]);O=c[(c[3524]|0)+64>>2]|0;if((Z|0)<-5){cM[O&511](-2)}else{cM[O&511](Z)}O=c[3524]|0;if((a[56328]&1)==0){if((c[O+96>>2]&1024|0)!=0){break}c[k>>2]=1;c[k+4>>2]=Z}fn(k,O)}}while(0);k=c[144]|0;if((c[64916+(k*688&-1)>>2]&4|0)==0){i=j;return}X=+h[7076];V=(v- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;v=(d- +h[64664+(k*688&-1)>>3])*+h[21]+ +h[68]+-1.0;d=(X- +h[5279])*+h[2]+ +h[12]+-1.0;T=+h[404]+V*+h[392]+v*+h[396]+d*+h[400];S=+h[405]+V*+h[393]+v*+h[397]+d*+h[401];B=+h[406]+V*+h[394]+v*+h[398]+d*+h[402];z=B==0.0?1.0e-5:B;B=(+h[403]+V*+h[391]+v*+h[395]+d*+h[399])/z;h[D>>3]=B;d=T/z;h[E>>3]=d;T=S/z;h[F>>3]=T;h[G>>3]=X;c[H>>2]=0;h[y>>3]=B-s*+h[695]*+((c[K>>2]|0)>>>0>>>0);h[I>>3]=d-s*+h[694]*+((c[K>>2]|0)>>>0>>>0);h[f>>3]=T-s*+h[693]*+((c[K>>2]|0)>>>0>>>0);h[L>>3]=X;do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(l,m,56296);i=j;return}}while(0);un(l,m,56296,56336);i=j;return}function fJ(b,d,e,f,g){b=b|0;d=+d;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0,_=0,$=0,aa=0,ab=0,ac=0.0,ad=0.0,ae=0.0,af=0.0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0;j=i;i=i+176|0;k=f;f=i;i=i+56|0;uD(f,k,56);k=j|0;l=j+16|0;m=j+64|0;n=j+112|0;o=j+160|0;p=j+168|0;q=(e|0)!=0;if(q){r=65056+(b*688&-1)|0}else{r=65064+(b*688&-1)|0}s=65072+(b*688&-1)|0;t=c[3524]|0;u=~~(+((c[t+28>>2]|0)>>>0>>>0)*+h[r>>3]*((a[s]&1)!=0?1.0:-1.0));if((c[64916+(b*688&-1)>>2]&2|0)==0){v=(+h[14]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;w=(+h[13]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;x=(d- +h[5279])*+h[2]+ +h[12]+-1.0;y=+h[404]+v*+h[392]+w*+h[396]+x*+h[400];z=+h[405]+v*+h[393]+w*+h[397]+x*+h[401];A=+h[406]+v*+h[394]+w*+h[398]+x*+h[402];B=A==0.0?1.0e-5:A;A=(+h[403]+v*+h[391]+w*+h[395]+x*+h[399])/B;h[l>>3]=A;x=y/B;h[l+8>>3]=x;y=z/B;h[l+16>>3]=y;h[l+32>>3]=d;c[l+40>>2]=0;C=A;D=x;E=y}else{y=(0.0- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;x=(0.0- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;A=(d- +h[5279])*+h[2]+ +h[12]+-1.0;B=+h[404]+y*+h[392]+x*+h[396]+A*+h[400];z=+h[405]+y*+h[393]+x*+h[397]+A*+h[401];w=+h[406]+y*+h[394]+x*+h[398]+A*+h[402];v=w==0.0?1.0e-5:w;w=(+h[403]+y*+h[391]+x*+h[395]+A*+h[399])/v;h[l>>3]=w;A=B/v;h[l+8>>3]=A;B=z/v;h[l+16>>3]=B;h[l+32>>3]=d;c[l+40>>2]=0;C=w;D=A;E=B}if((c[f+4>>2]|0)>-3){r=t+168|0;cM[c[r>>2]&511](3);B=+h[64664+((c[200]|0)*688&-1)>>3];A=+h[91];w=+h[96];v=(+h[7089]-B)*A+w+-1.0;z=+h[64664+((c[144]|0)*688&-1)>>3];x=+h[21];y=+h[68];F=(+h[7088]-z)*x+y+-1.0;G=(d- +h[5279])*+h[2]+ +h[12]+-1.0;H=+h[403];I=+h[391];J=+h[395];K=G*+h[399];L=+h[404];M=+h[392];N=+h[396];O=G*+h[400];Q=+h[405];R=+h[393];S=+h[397];T=G*+h[401];U=+h[406];V=+h[394];W=+h[398];X=G*+h[402];G=U+v*V+F*W+X;Y=G==0.0?1.0e-5:G;t=m|0;h[t>>3]=(H+v*I+F*J+K)/Y;Z=m+8|0;h[Z>>3]=(L+v*M+F*N+O)/Y;_=m+16|0;h[_>>3]=(Q+v*R+F*S+T)/Y;$=m+32|0;h[$>>3]=d;c[m+40>>2]=0;Y=(+h[3305]-B)*A+w+-1.0;w=(+h[3304]-z)*x+y+-1.0;y=U+Y*V+w*W+X;X=y==0.0?1.0e-5:y;h[n>>3]=(H+Y*I+w*J+K)/X;h[n+8>>3]=(L+Y*M+w*N+O)/X;h[n+16>>3]=(Q+Y*R+w*S+T)/X;h[n+32>>3]=d;c[n+40>>2]=0;do{if((a[38984]&1)==0){aa=8861}else{if((a[46752]&1)==0){aa=8861;break}gt(l,m,f)}}while(0);if((aa|0)==8861){un(l,m,f,f+40|0)}do{if((a[38984]&1)==0){aa=8865}else{if((a[46752]&1)==0){aa=8865;break}gt(m,n,f)}}while(0);if((aa|0)==8865){un(m,n,f,f+40|0)}cM[c[r>>2]&511](4);r=l|0;f=l+8|0;n=l+16|0;ab=l+32|0;ac=+h[r>>3];ad=+h[f>>3];ae=+h[n>>3];af=+h[ab>>3];ag=r;ah=t;ai=f;aj=Z;ak=n;al=_;am=ab;an=$}else{ac=C;ad=D;ae=E;af=d;ag=l|0;ah=m|0;ai=l+8|0;aj=m+8|0;ak=l+16|0;al=m+16|0;am=l+32|0;an=m+32|0}E=+(u|0);h[ah>>3]=ac+E/+(c[180]|0);h[aj>>3]=ad;h[al>>3]=ae;h[an>>3]=af;do{if((a[38984]&1)==0){aa=8870}else{if((a[46752]&1)==0){aa=8870;break}gt(l,m,56296)}}while(0);if((aa|0)==8870){un(l,m,56296,56336)}do{if(q){L12097:do{if((g|0)==0){ao=e}else{u=c[34]|0;af=+h[64672+(u*688&-1)>>3]- +h[64664+(u*688&-1)>>3];u=g;while(1){if(+P(+((d- +h[u>>3])/af))<=.001){ao=0;break L12097}$=c[u+16>>2]|0;if(($|0)==0){ao=e;break}else{u=$}}}}while(0);fx(64984+(b*688&-1)|0,o,p,73288);u=~~(+h[ai>>3]*+(c[40]|0))+(c[46]|0)|0;$=c[3524]|0;ab=c[$+28>>2]|0;_=(~~(+h[ag>>3]*+(c[180]|0))+(c[186]|0)|0)-(ab<<1)|0;if((a[s]&1)==0){ap=~~(+(_>>>0>>>0)- +(ab>>>0>>>0)*+h[65056+(b*688&-1)>>3])}else{ap=_}_=64928+(b*688&-1)|0;ab=c[_>>2]|0;if((ab|0)==6){h[64936+(b*688&-1)>>3]=d;aa=8880}else if((ab|0)!=0){aa=8880}if((aa|0)==8880){fn(_,$)}ln((c[o>>2]|0)+ap|0,u+(c[p>>2]|0)|0,ao,2,1,0,c[64924+(b*688&-1)>>2]|0);u=k;c[u>>2]=c[14084];c[u+4>>2]=c[56340>>2];c[u+8>>2]=c[56344>>2];c[u+12>>2]=c[56348>>2];u=c[14075]|0;do{if((c[14074]|0)!=0){af=+h[7040];$=c[(c[3524]|0)+92>>2]|0;if(af<0.0){cK[$&63](+h[3817]);break}else{cK[$&63](af);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[7039]);$=c[(c[3524]|0)+64>>2]|0;if((u|0)<-5){cM[$&511](-2)}else{cM[$&511](u)}$=c[3524]|0;if((a[56328]&1)==0){if((c[$+96>>2]&1024|0)!=0){break}c[k>>2]=1;c[k+4>>2]=u}fn(k,$)}}while(0);if((c[64916+((c[34]|0)*688&-1)>>2]&4|0)==0){i=j;return}af=(+h[3305]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;ae=(+h[3304]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;ad=(d- +h[5279])*+h[2]+ +h[12]+-1.0;ac=+h[404]+af*+h[392]+ae*+h[396]+ad*+h[400];D=+h[405]+af*+h[393]+ae*+h[397]+ad*+h[401];C=+h[406]+af*+h[394]+ae*+h[398]+ad*+h[402];X=C==0.0?1.0e-5:C;C=(+h[403]+af*+h[391]+ae*+h[395]+ad*+h[399])/X;h[ag>>3]=C;ad=ac/X;h[ai>>3]=ad;ac=D/X;h[ak>>3]=ac;h[am>>3]=d;c[l+40>>2]=0;h[ah>>3]=C-E/+(c[180]|0);h[aj>>3]=ad;h[al>>3]=ac;h[an>>3]=d;do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(l,m,56296);i=j;return}}while(0);un(l,m,56296,56336);i=j;return}function fK(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0;f=i;i=i+24|0;g=f|0;j=f+8|0;k=f+16|0;h[g>>3]=+h[a+16>>3];h[j>>3]=+h[a+24>>3];h[k>>3]=+h[a+32>>3];l=(fM(a,e,g,j,k)|0)==0;m=+h[g>>3];if(l){n=(m- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;o=(+h[j>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;p=(+h[k>>3]- +h[5279])*+h[2]+ +h[12]+-1.0;q=+h[406]+n*+h[394]+o*+h[398]+p*+h[402];r=q==0.0?1.0e-5:q;q=(+h[404]+n*+h[392]+o*+h[396]+p*+h[400])/r;h[b>>3]=+(~~((+h[403]+n*+h[391]+o*+h[395]+p*+h[399])/r*+(c[180]|0))+(c[186]|0)|0);s=+(~~(q*+(c[40]|0))+(c[46]|0)|0);h[d>>3]=s;i=f;return}else{h[b>>3]=m;s=+h[j>>3];h[d>>3]=s;i=f;return}}function fL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0.0;e=i;i=i+48|0;f=e|0;g=e+16|0;j=e+32|0;k=b+64|0;l=c[k>>2]|0;if((l|0)==6|(l|0)==0){if((a[55536]&1)==0){i=e;return}if((a[b+56|0]&1)==0){i=e;return}if((a[b+239|0]&1)!=0){m=+h[d+32>>3];n=+h[8341];do{if(n<m){o=+h[8342];if(o<=m){p=+((a[20668]|0)==112&1|0);break}q=(m-n)/(o-n);if((a[20668]|0)==112){p=q;break}p=1.0-q}else{p=+((a[20668]|0)!=112&1|0)}}while(0);r=(c[3524]|0)+144|0;if((c[r>>2]|0)==0){i=e;return}c[g>>2]=5;h[g+8>>3]=p;c[g+4>>2]=0;cM[c[r>>2]&511](g);i=e;return}p=+h[d+24>>3];g=c[34]|0;r=(a[66852]&1)==0;do{if((a[64788+(g*688&-1)|0]&1)==0){if(r){s=p;break}if(p>0.0){n=+_(+p);s=n/+h[8358];break}else{s=+h[8341];break}}else{if(r){s=+Z(+(p*+h[64800+(g*688&-1)>>3]));break}if(+h[64792+(g*688&-1)>>3]==+h[8357]){s=p;break}s=p*+h[64800+(g*688&-1)>>3]/+h[8358]}}while(0);p=+h[8341];do{if(p<s){n=+h[8342];if(n<=s){t=+((a[20668]|0)==112&1|0);break}m=(s-p)/(n-p);if((a[20668]|0)==112){t=m;break}t=1.0-m}else{t=+((a[20668]|0)!=112&1|0)}}while(0);g=(c[3524]|0)+144|0;if((c[g>>2]|0)==0){i=e;return}c[f>>2]=5;h[f+8>>3]=t;c[f+4>>2]=0;cM[c[g>>2]&511](f);i=e;return}else if((l|0)==3){if((a[b+239|0]&1)==0){i=e;return}f=(c[3524]|0)+144|0;if((c[f>>2]|0)==0){i=e;return}g=~~+h[d+32>>3];c[j>>2]=3;c[j+4>>2]=g;h[j+8>>3]=0.0;cM[c[f>>2]&511](j);i=e;return}else if((l|0)==2){c[b+68>>2]=~~+h[d+32>>3];fn(k,c[3524]|0);i=e;return}else{i=e;return}}function fM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,w=0,x=0.0,y=0,z=0,A=0,B=0.0;j=i;k=c[b>>2]|0;if((k|0)==4){h[e>>3]=+h[e>>3]*+((c[(c[3524]|0)+20>>2]|0)>>>0>>>0)+.5;l=0;m=1;n=0}else if((k|0)==2){o=c[200]|0;p=+h[64664+(o*688&-1)>>3];h[e>>3]=p+ +h[e>>3]*(+h[64672+(o*688&-1)>>3]-p);l=1;m=0;n=0}else if((k|0)==3){h[e>>3]=+h[e>>3]*+(((c[(c[3524]|0)+8>>2]|0)-1|0)>>>0>>>0)+.5;l=0;m=0;n=1}else if((k|0)==0|(k|0)==1){p=+h[e>>3];do{if((a[66164]&1)==0){q=p}else{if(p>0.0){r=+_(+p);q=r/+h[8272];break}else{uk(210984,(v=i,i=i+24|0,c[v>>2]=d,c[v+8>>2]=56880,h[v+16>>3]=p,v)|0);return 0}}}while(0);h[e>>3]=q;l=1;m=0;n=0}else{l=0;m=0;n=0}e=c[b+4>>2]|0;if((e|0)==2){k=c[144]|0;if((c[5094]|0)==0){q=+h[64664+(k*688&-1)>>3];s=q+ +h[f>>3]*(+h[64672+(k*688&-1)>>3]-q)}else{q=+h[64672+(k*688&-1)>>3];s=q- +h[f>>3]*(q- +h[64664+(k*688&-1)>>3])}h[f>>3]=s;t=1;u=m;w=n}else if((e|0)==4){h[f>>3]=+h[f>>3]*+((c[(c[3524]|0)+16>>2]|0)>>>0>>>0)+.5;t=l;u=1;w=n}else if((e|0)==0|(e|0)==1){s=+h[f>>3];do{if((a[65476]&1)==0){x=s}else{if(s>0.0){q=+_(+s);x=q/+h[8186];break}else{uk(210984,(v=i,i=i+24|0,c[v>>2]=d,c[v+8>>2]=56856,h[v+16>>3]=s,v)|0);return 0}}}while(0);h[f>>3]=x;t=1;u=m;w=n}else if((e|0)==3){h[f>>3]=+h[f>>3]*+(((c[(c[3524]|0)+12>>2]|0)-1|0)>>>0>>>0)+.5;t=l;u=m;w=1}else{t=l;u=m;w=n}n=c[b+8>>2]|0;if((n|0)==2){b=c[34]|0;x=+h[64664+(b*688&-1)>>3];h[g>>3]=x+ +h[g>>3]*(+h[64672+(b*688&-1)>>3]-x);y=1;z=u;A=w}else if((n|0)==4){y=t;z=1;A=w}else if((n|0)==0|(n|0)==1){x=+h[g>>3];do{if((a[64788]&1)==0){B=x}else{if(x>0.0){s=+_(+x);B=s/+h[8100];break}else{uk(210984,(v=i,i=i+24|0,c[v>>2]=d,c[v+8>>2]=56832,h[v+16>>3]=x,v)|0);return 0}}}while(0);h[g>>3]=B;y=1;z=u;A=w}else if((n|0)==3){y=t;z=u;A=1}else{y=t;z=u;A=w}w=A|z;if(y&w){uk(218688,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else{i=j;return w&1|0}return 0}function fN(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0;g=i;j=c[b>>2]|0;if((j|0)==2){h[d>>3]=+h[b+16>>3]*+((c[7939]|0)-(c[7938]|0)|0)}else if((j|0)==3){h[d>>3]=+h[b+16>>3]*+(((c[(c[3524]|0)+8>>2]|0)-1|0)>>>0>>>0)}else if((j|0)==4){h[d>>3]=+h[b+16>>3]*+((c[(c[3524]|0)+20>>2]|0)>>>0>>>0)}else if((j|0)==0){k=+h[b+16>>3];do{if((a[66164]&1)==0){l=k}else{if(k>0.0){m=+_(+k);l=m/+h[8272];break}else{uk(210984,(v=i,i=i+24|0,c[v>>2]=f,c[v+8>>2]=56880,h[v+16>>3]=k,v)|0)}}}while(0);h[d>>3]=l*+h[8269]}else if((j|0)==1){l=+h[b+16>>3];do{if((a[68916]&1)==0){n=l}else{if(l>0.0){k=+_(+l);n=k/+h[8616];break}else{uk(210984,(v=i,i=i+24|0,c[v>>2]=f,c[v+8>>2]=56976,h[v+16>>3]=l,v)|0)}}}while(0);h[d>>3]=n*+h[8613]}d=c[b+4>>2]|0;if((d|0)==4){h[e>>3]=+h[b+24>>3]*+((c[(c[3524]|0)+16>>2]|0)>>>0>>>0);i=g;return}else if((d|0)==1){n=+h[b+24>>3];do{if((a[68228]&1)==0){o=n}else{if(n>0.0){l=+_(+n);o=l/+h[8530];break}else{uk(210984,(v=i,i=i+24|0,c[v>>2]=f,c[v+8>>2]=56952,h[v+16>>3]=n,v)|0)}}}while(0);h[e>>3]=o*+h[8527];i=g;return}else if((d|0)==0){o=+h[b+24>>3];do{if((a[65476]&1)==0){p=o}else{if(o>0.0){n=+_(+o);p=n/+h[8186];break}else{uk(210984,(v=i,i=i+24|0,c[v>>2]=f,c[v+8>>2]=56856,h[v+16>>3]=o,v)|0)}}}while(0);h[e>>3]=p*+h[8183];i=g;return}else if((d|0)==2){h[e>>3]=+h[b+24>>3]*+((c[7941]|0)-(c[7940]|0)|0);i=g;return}else if((d|0)==3){h[e>>3]=+h[b+24>>3]*+(((c[(c[3524]|0)+12>>2]|0)-1|0)>>>0>>>0);i=g;return}else{i=g;return}}function fO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0.0,X=0.0,Y=0,Z=0,_=0,$=0.0,aa=0.0,ab=0,ac=0,ad=0,ae=0,af=0.0,ag=0.0,ah=0.0,ai=0.0,aj=0,ak=0,al=0.0,am=0.0,an=0.0,ao=0.0,ap=0,aq=0.0,ar=0.0,as=0.0,at=0.0,au=0,av=0.0,aw=0.0,ax=0.0,ay=0.0,az=0.0,aA=0.0,aB=0.0,aC=0.0,aD=0.0,aE=0.0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0,aM=0,aN=0.0,aO=0.0,aP=0,aQ=0.0,aR=0;f=i;i=i+224|0;g=f|0;j=f+16|0;k=f+32|0;l=f+48|0;m=f+64|0;n=f+72|0;o=f+80|0;p=f+88|0;q=f+96|0;r=f+120|0;s=f+128|0;t=f+136|0;u=f+144|0;v=f+152|0;w=f+160|0;x=f+168|0;y=f+192|0;z=f+200|0;A=f+208|0;B=f+216|0;if((b|0)==0){i=f;return}C=x|0;D=(e|0)==2;E=k;F=x+7|0;x=k|0;G=k+4|0;H=j;I=j|0;J=j+4|0;K=g;L=g|0;M=g+4|0;N=q|0;O=l;P=q+7|0;q=l|0;Q=l+4|0;R=b;do{L12294:do{if((c[R+8>>2]|0)==(d|0)){b=R+52|0;S=c[b>>2]|0;do{if((S|0)==-7){if((c[R+12>>2]|0)!=1){T=9026;break}U=c[12302]|0;V=c[12303]|0;W=+h[6153];X=+h[6154];Y=a[49240]|0;uD(C|0,49241,23);Z=U;_=V;$=W;aa=X;ab=Y}else{T=9026}}while(0);if((T|0)==9026){T=0;Y=c[R+48>>2]|0;X=+h[R+64>>3];W=+h[R+72>>3];V=a[R+80|0]|0;uD(C|0,R+81|0,23);Z=Y;_=S;$=X;aa=W;ab=V}V=R+16|0;Y=V|0;if((c[Y>>2]|0)==3){if((c[R+12>>2]|0)==1){ac=49176}else{T=9029}}else{T=9029}if((T|0)==9029){T=0;ac=V}U=c[ac>>2]|0;if((U|0)==1|(U|0)==4){ad=(c[ac+4>>2]<<4&65520)+U|0}else if((U|0)==2|(U|0)==5){ad=(c[ac+8>>2]<<4&65520)+U|0}else{ad=0}U=c[R+12>>2]|0;if((U|0)==1){do{if((c[R+104>>2]|0)==1){ae=R+112|0;do{if(D){T=9089}else{if((c[ae>>2]|0)==3){T=9089;break}if((c[5094]|0)==0){break L12294}fK(ae,m,n,173728);fx(R+152|0,t,u,173728);W=+(c[t>>2]|0);h[r>>3]=W;X=+(c[u>>2]|0);h[s>>3]=X;af=W;ag=X}}while(0);if((T|0)==9089){T=0;fR(ae,m,n,173728);fN(R+152|0,r,s,173728);af=+h[r>>3];ag=+h[s>>3]}X=+h[m>>3]-af*.5;h[m>>3]=X;W=+h[n>>3]-ag*.5;h[n>>3]=W;ah=af+X;h[o>>3]=ah;ai=ag+W;h[p>>3]=ai;aj=(c[R+156>>2]|0)>>>0<2;ak=(c[R+152>>2]|0)>>>0<2;al=ah;am=X;an=ai;ao=W}else{ap=R+192|0;do{if(D){T=9096}else{if((c[ap>>2]|0)==3){if((c[R+232>>2]|0)==3){T=9096;break}}if((c[5094]|0)==0){break L12294}fK(ap,m,n,173728);fK(R+232|0,o,p,173728)}}while(0);if((T|0)==9096){T=0;fR(ap,m,n,173728);fR(R+232|0,o,p,173728)}W=+h[m>>3];ai=+h[o>>3];if(W>ai){h[m>>3]=ai;h[o>>3]=W;aq=W;ar=ai}else{aq=ai;ar=W}W=+h[n>>3];ai=+h[p>>3];if(W>ai){h[n>>3]=ai;h[p>>3]=W;as=W;at=ai}else{as=ai;at=W}if((c[R+192>>2]|0)==3){au=0}else{au=(c[R+232>>2]|0)!=3}if((c[R+196>>2]|0)==3){aj=0;ak=au;al=aq;am=ar;an=as;ao=at;break}aj=(c[R+236>>2]|0)!=3;ak=au;al=aq;am=ar;an=as;ao=at}}while(0);S=c[13542]|0;if((S|0)==0){av=al;aw=am;ax=an;ay=ao}else{do{if(ak){W=+(c[S>>2]|0);if(am<W){h[m>>3]=W;az=W}else{az=am}W=+(c[S+4>>2]|0);if(al<=W){aA=az;aB=al;break}h[o>>3]=W;aA=az;aB=W}else{aA=am;aB=al}}while(0);do{if(aj){W=+(c[S+8>>2]|0);if(ao<W){h[n>>3]=W;aC=W}else{aC=ao}W=+(c[S+12>>2]|0);if(an<=W){aD=aC;aE=an;break}h[p>>3]=W;aD=aC;aE=W}else{aD=ao;aE=an}}while(0);if(aA>aB|aD>aE){break}else{av=aB;aw=aA;ax=aE;ay=aD}}S=~~(av-aw);ae=~~(ax-ay);aF=~~aw;aG=~~ay;if((S|0)==0|(ae|0)==0){break}aH=c[b>>2]|0;if((aH|0)==-7){aI=c[12302]|0;aJ=c[12303]|0;W=+h[6153];ai=+h[6154];aK=a[49240]|0;uD(N|0,49241,23);aL=aI;aM=aJ;aN=W;aO=ai;aP=aK}else{aK=c[R+48>>2]|0;ai=+h[R+64>>3];W=+h[R+72>>3];aJ=a[R+80|0]|0;uD(N|0,R+81|0,23);aL=aK;aM=aH;aN=ai;aO=W;aP=aJ}if(aN>0.0){aQ=+h[R+64>>3]}else{aQ=aN}aJ=(c[Y>>2]|0)==3?49176:V;uD(O|0,P|0,16);do{if((aL|0)!=0){aH=c[(c[3524]|0)+92>>2]|0;if(aO<0.0){cK[aH&63](+h[3817]);break}else{cK[aH&63](aO);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](aQ);V=c[(c[3524]|0)+64>>2]|0;if((aM|0)<-5){cM[V&511](-2)}else{cM[V&511](aM)}V=c[3524]|0;do{if((aP&1)==0){if((c[V+96>>2]&1024|0)!=0){break}c[q>>2]=1;c[Q>>2]=aM;T=9135}else{T=9135}}while(0);if((T|0)==9135){T=0;fn(l,V)}Y=c[aJ>>2]|0;if((Y|0)==1|(Y|0)==4){aR=aJ+4|0;T=9139}else if((Y|0)==2|(Y|0)==5){aR=aJ+8|0;T=9139}do{if((T|0)==9139){T=0;b=(c[aR>>2]<<4&65520)+Y|0;if((b|0)==0){break}aH=c[(c[3524]|0)+108>>2]|0;if((aH|0)==0){break}cI[aH&63](b,aF,aG,S,ae)}}while(0);if(!(hG(aJ)|0)){break}cN[c[(c[3524]|0)+56>>2]&255](aF,aG);Y=ae+aG|0;cN[c[(c[3524]|0)+60>>2]&255](aF,Y);V=S+aF|0;cN[c[(c[3524]|0)+60>>2]&255](V,Y);cN[c[(c[3524]|0)+60>>2]&255](V,aG);cN[c[(c[3524]|0)+60>>2]&255](aF,aG);break}else if((U|0)==2){V=c[13542]|0;Y=R+112|0;do{if(D){T=9036}else{if((c[Y>>2]|0)==3){T=9036;break}if((c[5094]|0)==0){break L12294}fK(Y,v,w,173728);fx(R+152|0,A,B,173728);h[y>>3]=+(c[A>>2]|0)}}while(0);if((T|0)==9036){T=0;fR(Y,v,w,173728);fN(R+152|0,y,z,173728)}uD(E|0,F|0,16);do{if((Z|0)!=0){aG=c[(c[3524]|0)+92>>2]|0;if(aa<0.0){cK[aG&63](+h[3817]);break}else{cK[aG&63](aa);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63]($);Y=c[(c[3524]|0)+64>>2]|0;if((_|0)<-5){cM[Y&511](-2)}else{cM[Y&511](_)}Y=c[3524]|0;do{if((ab&1)==0){if((c[Y+96>>2]&1024|0)!=0){break}c[x>>2]=1;c[G>>2]=_;T=9049}else{T=9049}}while(0);if((T|0)==9049){T=0;fn(k,Y)}do{if((c[R+112>>2]|0)==3){if((c[R+116>>2]|0)!=3){break}c[13542]=55520}}while(0);Y=R+192|0;aG=R+200|0;lq(~~+h[v>>3],~~+h[w>>3],+h[y>>3],+h[Y>>3],+h[aG>>3],ad);if(hG(ac)|0){lq(~~+h[v>>3],~~+h[w>>3],+h[y>>3],+h[Y>>3],+h[aG>>3],0)}c[13542]=V;break}else if((U|0)==3){uD(H|0,F|0,16);do{if((Z|0)!=0){aG=c[(c[3524]|0)+92>>2]|0;if(aa<0.0){cK[aG&63](+h[3817]);break}else{cK[aG&63](aa);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63]($);V=c[(c[3524]|0)+64>>2]|0;if((_|0)<-5){cM[V&511](-2)}else{cM[V&511](_)}V=c[3524]|0;do{if((ab&1)==0){if((c[V+96>>2]&1024|0)!=0){break}c[I>>2]=1;c[J>>2]=_;T=9066}else{T=9066}}while(0);if((T|0)==9066){T=0;fn(j,V)}if(D){fP(2,R+104|0,ad,1)}else{if((c[5094]|0)==0){break}fP(3,R+104|0,ad,1)}if(!(hG(ac)|0)){break}fP(e,R+104|0,0,1);break}else if((U|0)==4){uD(K|0,F|0,16);do{if((Z|0)!=0){aG=c[(c[3524]|0)+92>>2]|0;if(aa<0.0){cK[aG&63](+h[3817]);break}else{cK[aG&63](aa);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63]($);U=c[(c[3524]|0)+64>>2]|0;if((_|0)<-5){cM[U&511](-2)}else{cM[U&511](_)}U=c[3524]|0;do{if((ab&1)==0){if((c[U+96>>2]&1024|0)!=0){break}c[L>>2]=1;c[M>>2]=_;T=9083}else{T=9083}}while(0);if((T|0)==9083){T=0;fn(g,U)}V=R+104|0;fQ(e,V,ad);if(!(hG(ac)|0)){break}fQ(e,V,0);break}else{break}}}while(0);R=c[R>>2]|0;}while((R|0)!=0);i=f;return}function fP(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0.0,J=0.0,K=0;f=i;i=i+1568|0;g=f|0;j=f+8|0;k=f+16|0;l=f+24|0;m=f+32|0;n=f+1472|0;o=f+1480|0;p=f+1488|0;q=f+1496|0;r=f+1504|0;s=f+1512|0;t=f+1520|0;u=f+1528|0;v=+h[b+88>>3]*.017453292519943295;w=+S(+v);x=+T(+v);v=+h[b+64>>3]*.5;y=+h[b+72>>3]*.5;z=u;A=b+48|0;c[z>>2]=c[A>>2];c[z+4>>2]=c[A+4>>2];c[z+8>>2]=c[A+8>>2];c[z+12>>2]=c[A+12>>2];c[z+16>>2]=c[A+16>>2];c[z+20>>2]=c[A+20>>2];c[z+24>>2]=c[A+24>>2];c[z+28>>2]=c[A+28>>2];c[z+32>>2]=c[A+32>>2];c[z+36>>2]=c[A+36>>2];A=c[3524]|0;B=+((c[A+24>>2]|0)>>>0>>>0)/+((c[A+28>>2]|0)>>>0>>>0);do{if(e){A=b+8|0;if((a|0)==2){fR(A,n,o,73152);break}else{fK(A,n,o,73152);break}}else{h[n>>3]=+h[b+24>>3];h[o>>3]=+h[b+32>>3]}}while(0);c[m+8>>2]=d;C=w*v;D=x*y;A=u+16|0;E=x*v;v=w*y;z=u+24|0;F=(a|0)==2;a=b|0;b=n;G=o;y=0.0;H=0;while(1){w=+S(+y);x=+T(+y);I=C*w-D*x;h[A>>3]=I;J=E*w+v*x;h[z>>3]=J;do{if(e){K=c[a>>2]|0;if(F){if((K|0)==2){fN(u,r,q,73152);h[z>>3]=+h[A>>3];fN(u,r,p,73152);break}else if((K|0)==0){fN(u,p,q,73152);break}else if((K|0)==1){fN(u,p,r,73152);h[A>>3]=+h[z>>3];fN(u,q,r,73152);break}else{break}}else{if((K|0)==2){fx(u,s,t,73152);h[q>>3]=+(c[t>>2]|0);h[z>>3]=+h[A>>3];fx(u,t,s,73152);h[p>>3]=+(c[s>>2]|0);break}else if((K|0)==0){fx(u,s,t,73152);h[p>>3]=+(c[s>>2]|0);h[q>>3]=+(c[t>>2]|0);break}else if((K|0)==1){fx(u,s,t,73152);h[p>>3]=+(c[s>>2]|0);h[A>>3]=+h[z>>3];fx(u,t,s,73152);h[q>>3]=+(c[t>>2]|0);break}else{break}}}else{h[p>>3]=I;h[q>>3]=J}}while(0);K=m+(H*12&-1)|0;c[K>>2]=~~(+h[n>>3]+ +h[p>>3]);J=+h[o>>3];I=+h[q>>3];if(e){c[m+(H*12&-1)+4>>2]=~~(J+I)}else{c[m+(H*12&-1)+4>>2]=~~(J+B*I)}fl(b,G,K,m+(H*12&-1)+4|0);K=H+1|0;if((K|0)<73){y=y+.08726646259971647;H=K}else{break}}H=m|0;if((d|0)!=0){d=c[(c[3524]|0)+148>>2]|0;if((d|0)==0){i=f;return}cN[d&255](72,H);i=f;return}H=0;while(1){d=c[m+(H*12&-1)+4>>2]|0;G=H+1|0;b=c[m+(G*12&-1)>>2]|0;e=c[m+(G*12&-1)+4>>2]|0;c[g>>2]=c[m+(H*12&-1)>>2];c[j>>2]=d;c[k>>2]=b;c[l>>2]=e;e=c[3524]|0;if((fl(g,j,k,l)|0)!=0){cN[c[e+56>>2]&255](c[g>>2]|0,c[j>>2]|0);cN[c[e+60>>2]&255](c[k>>2]|0,c[l>>2]|0)}if((G|0)<72){H=G}else{break}}i=f;return}function fQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;e=i;i=i+112|0;f=e|0;g=e+8|0;j=e+16|0;k=e+24|0;l=e+32|0;m=e+40|0;n=e+48|0;o=e+56|0;p=e+64|0;q=e+72|0;r=e+80|0;s=e+88|0;t=e+96|0;u=c[13542]|0;v=b+4|0;if((c[v>>2]|0)==0){i=e;return}w=b|0;b=c[w>>2]|0;if((b|0)<2){i=e;return}c[11720]=db(c[11720]|0,b*12&-1,218624)|0;c[11722]=db(c[11722]|0,(c[w>>2]|0)*24&-1,218624)|0;do{if((c[w>>2]|0)>0){b=(a|0)==3;x=0;y=0;z=c[v>>2]|0;while(1){A=z+(y*40&-1)|0;B=c[11720]|0;C=B+(y*12&-1)|0;D=B+(y*12&-1)+4|0;if(b){fK(A,r,s,213112);c[C>>2]=~~+h[r>>3];c[D>>2]=~~+h[s>>3]}else{fR(A,p,q,213112);c[C>>2]=~~+h[p>>3];c[D>>2]=~~+h[q>>3]}D=c[v>>2]|0;C=c[D+(y*40&-1)>>2]|0;if((C|0)==3){E=9189}else{if((c[D+(y*40&-1)+4>>2]|0)==3){E=9189}else{F=x}}if((E|0)==9189){E=0;F=1}if((C|0)==2){E=9192}else{if((c[D+(y*40&-1)+4>>2]|0)==2){E=9192}else{G=F}}if((E|0)==9192){E=0;G=1}C=y+1|0;if((C|0)<(c[w>>2]|0)){x=G;y=C;z=D}else{break}}if(!G){H=y;break}c[13542]=55520;H=y}else{H=-1}}while(0);G=c[3524]|0;do{if((c[G+148>>2]|0)==0|(d|0)==0){w=c[G+172>>2]|0;if((w|0)!=0){cM[w&511](0)}w=c[11720]|0;F=c[w>>2]|0;do{if((H|0)>0){v=0;q=w;p=F;do{s=c[q+(v*12&-1)+4>>2]|0;v=v+1|0;r=c[q+(v*12&-1)>>2]|0;a=c[q+(v*12&-1)+4>>2]|0;c[l>>2]=p;c[m>>2]=s;c[n>>2]=r;c[o>>2]=a;a=c[3524]|0;if((fl(l,m,n,o)|0)!=0){cN[c[a+56>>2]&255](c[l>>2]|0,c[m>>2]|0);cN[c[a+60>>2]&255](c[n>>2]|0,c[o>>2]|0)}q=c[11720]|0;p=c[q+(v*12&-1)>>2]|0}while((v|0)<(H|0));v=c[q>>2]|0;if((p|0)==(v|0)){I=v;J=q;K=H;E=9216;break}L=c[q+(H*12&-1)+4>>2]|0;M=c[q+4>>2]|0;N=q;O=v;P=H;E=9217}else{I=F;J=w;K=0;E=9216}}while(0);if((E|0)==9216){w=c[J+(K*12&-1)+4>>2]|0;F=c[J+4>>2]|0;if((w|0)!=(F|0)){L=w;M=F;N=J;O=I;P=K;E=9217}}do{if((E|0)==9217){c[f>>2]=c[N+(P*12&-1)>>2];c[g>>2]=L;c[j>>2]=O;c[k>>2]=M;F=c[3524]|0;if((fl(f,g,j,k)|0)==0){break}cN[c[F+56>>2]&255](c[f>>2]|0,c[g>>2]|0);cN[c[F+60>>2]&255](c[j>>2]|0,c[k>>2]|0)}}while(0);F=c[(c[3524]|0)+172>>2]|0;if((F|0)==0){break}cM[F&511](1)}else{F=t;w=1;y=0;v=0;L12560:while(1){Q=w;R=v;while(1){if((R|0)>=(H|0)){break L12560}a=c[11720]|0;r=(c[11722]|0)+(y*12&-1)|0;s=a+(R*12&-1)|0;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];S=R+1|0;s=a+(S*12&-1)|0;c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];c[F+8>>2]=c[s+8>>2];T=fl(a+(R*12&-1)|0,a+(R*12&-1)+4|0,a+(S*12&-1)|0,a+(S*12&-1)+4|0)|0;if((T|0)==0){Q=0;R=S}else{break}}q=((T|0)>0&1)+y|0;if((T|0)>=0){w=T;y=q;v=S;continue}p=c[11722]|0;a=c[11720]|0;s=p+(q*12&-1)|0;r=a+(R*12&-1)|0;c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];r=p+((q+1|0)*12&-1)|0;p=a+(S*12&-1)|0;c[r>>2]=c[p>>2];c[r+4>>2]=c[p+4>>2];c[r+8>>2]=c[p+8>>2];c[p>>2]=c[F>>2];c[p+4>>2]=c[F+4>>2];c[p+8>>2]=c[F+8>>2];w=T;y=q+2|0;v=S}if((Q|0)==1){v=c[11722]|0;w=v+(y*12&-1)|0;F=(c[11720]|0)+(R*12&-1)|0;c[w>>2]=c[F>>2];c[w+4>>2]=c[F+4>>2];c[w+8>>2]=c[F+8>>2];U=y+1|0;V=v}else{U=y;V=c[11722]|0}c[V+8>>2]=d;cN[c[(c[3524]|0)+148>>2]&255](U,c[11722]|0)}}while(0);c[13542]=u;i=e;return}function fR(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0;g=i;j=c[b>>2]|0;if((j|0)==4){h[d>>3]=+h[b+16>>3]*+((c[(c[3524]|0)+20>>2]|0)>>>0>>>0)}else if((j|0)==2){k=c[7938]|0;h[d>>3]=+(k|0)+ +h[b+16>>3]*+((c[7939]|0)-k|0)}else if((j|0)==1){l=+h[b+16>>3];do{if((a[68916]&1)==0){m=l}else{if(l>0.0){n=+_(+l);m=n/+h[8616];break}else{uk(210984,(v=i,i=i+24|0,c[v>>2]=f,c[v+8>>2]=56976,h[v+16>>3]=l,v)|0)}}}while(0);h[d>>3]=+(~~(+(c[17224]|0)+(m- +h[8599])*+h[8613]+.5)|0)}else if((j|0)==3){h[d>>3]=+h[b+16>>3]*+(((c[(c[3524]|0)+8>>2]|0)-1|0)>>>0>>>0)}else if((j|0)==0){m=+h[b+16>>3];do{if((a[66164]&1)==0){o=m}else{if(m>0.0){l=+_(+m);o=l/+h[8272];break}else{uk(210984,(v=i,i=i+24|0,c[v>>2]=f,c[v+8>>2]=56880,h[v+16>>3]=m,v)|0)}}}while(0);h[d>>3]=+(~~(+(c[16536]|0)+(o- +h[8255])*+h[8269]+.5)|0)}j=c[b+4>>2]|0;if((j|0)==2){k=c[7940]|0;h[e>>3]=+(k|0)+ +h[b+24>>3]*+((c[7941]|0)-k|0)}else if((j|0)==3){h[e>>3]=+h[b+24>>3]*+(((c[(c[3524]|0)+12>>2]|0)-1|0)>>>0>>>0)}else if((j|0)==1){o=+h[b+24>>3];do{if((a[68228]&1)==0){p=o}else{if(o>0.0){m=+_(+o);p=m/+h[8530];break}else{uk(210984,(v=i,i=i+24|0,c[v>>2]=f,c[v+8>>2]=56952,h[v+16>>3]=o,v)|0)}}}while(0);h[e>>3]=+(~~(+(c[17052]|0)+(p- +h[8513])*+h[8527]+.5)|0)}else if((j|0)==0){p=+h[b+24>>3];do{if((a[65476]&1)==0){q=p}else{if(p>0.0){o=+_(+p);q=o/+h[8186];break}else{uk(210984,(v=i,i=i+24|0,c[v>>2]=f,c[v+8>>2]=56856,h[v+16>>3]=p,v)|0)}}}while(0);h[e>>3]=+(~~(+(c[16364]|0)+(q- +h[8169])*+h[8183]+.5)|0)}else if((j|0)==4){h[e>>3]=+h[b+24>>3]*+((c[(c[3524]|0)+16>>2]|0)>>>0>>>0)}h[d>>3]=+h[d>>3]+.5;h[e>>3]=+h[e>>3]+.5;i=g;return}function fS(b,d){b=b|0;d=d|0;var e=0,f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0,R=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0,aM=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aY=0,aZ=0,a_=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0.0,a6=0.0,a7=0.0,a8=0.0,a9=0.0,ba=0.0,bb=0.0,bc=0.0,bd=0.0,be=0.0,bf=0.0,bg=0.0,bh=0,bi=0,bj=0,bk=0,bl=0,bm=0,bn=0,bo=0,bp=0,bq=0,br=0,bs=0,bt=0,bu=0,bv=0,bx=0,by=0,bz=0,bA=0,bB=0,bC=0,bD=0.0,bE=0.0,bF=0,bG=0,bH=0,bI=0,bJ=0,bK=0,bL=0,bN=0,bO=0,bP=0,bQ=0,bR=0,bS=0,bT=0,bU=0,bV=0,bW=0,bX=0,bY=0,bZ=0,b_=0,b$=0,b0=0,b1=0,b2=0,b3=0,b4=0,b5=0,b6=0,b7=0,b8=0,b9=0,ca=0,cb=0,cc=0,cd=0,ce=0,cf=0,cg=0,ch=0,ci=0,cj=0,ck=0,cl=0,cm=0,cn=0,co=0,cp=0,cq=0,cr=0,cs=0.0,ct=0.0,cu=0,cv=0,cw=0,cx=0,cz=0,cA=0.0,cB=0,cC=0.0,cD=0,cE=0,cF=0.0,cH=0.0,cJ=0.0,cL=0,cP=0,cQ=0,cT=0,cU=0,cV=0,cW=0,cX=0,cY=0,cZ=0,c_=0,c$=0,c0=0,c1=0,c2=0,c3=0,c4=0,c5=0,c6=0,c7=0,c8=0,c9=0,da=0,df=0,dh=0,di=0,dj=0,dl=0,dm=0,dn=0,dp=0,dq=0,dr=0.0,ds=0.0,dt=0.0,du=0.0,dv=0.0,dw=0.0,dx=0.0,dy=0.0,dA=0,dB=0,dC=0,dE=0,dF=0,dG=0,dH=0,dI=0,dJ=0.0,dK=0.0,dL=0,dM=0,dN=0,dO=0,dP=0,dQ=0,dR=0,dS=0,dT=0,dU=0,dV=0.0,dW=0.0,dX=0.0,dY=0.0,dZ=0.0,d_=0,d$=0,d0=0,d1=0.0,d2=0.0,d3=0,d4=0,d5=0.0,d6=0.0,d7=0.0,d8=0.0,d9=0.0,ea=0,eb=0,ec=0,ed=0,ee=0,ef=0.0,eg=0.0,eh=0,ei=0.0,ej=0,ek=0,el=0.0,em=0,en=0,eo=0,ep=0,eq=0,er=0,es=0.0,et=0,eu=0,ev=0.0,ew=0.0,ex=0,ey=0,ez=0.0,eA=0.0,eB=0.0,eC=0,eD=0,eE=0,eF=0.0,eG=0,eH=0,eI=0,eJ=0,eK=0.0,eL=0.0,eM=0.0,eN=0,eO=0.0,eP=0.0,eQ=0.0,eR=0.0,eS=0.0,eT=0,eU=0.0,eV=0.0,eW=0,eX=0,eY=0.0,eZ=0.0,e_=0,e$=0,e0=0,e1=0,e2=0,e3=0,e4=0,e5=0,e6=0,e7=0,e8=0,e9=0,fa=0,fb=0.0,fc=0,fd=0,fe=0,ff=0,fg=0,fh=0.0,fi=0.0,fj=0;e=i;i=i+1424|0;f=e|0;j=e+8|0;k=e+16|0;l=e+24|0;m=e+32|0;n=e+40|0;o=e+48|0;p=e+56|0;q=e+64|0;r=e+80|0;s=e+352|0;t=e+368|0;u=e+384|0;w=e+392|0;x=e+400|0;y=e+416|0;z=e+424|0;A=e+432|0;B=e+496|0;C=e+504|0;D=e+512|0;E=e+552|0;F=e+568|0;G=e+576|0;H=e+584|0;I=e+624|0;J=e+640|0;K=e+768|0;L=e+776|0;M=e+784|0;N=e+808|0;O=e+816|0;Q=e+824|0;R=e+840|0;U=e+856|0;V=e+864|0;W=e+880|0;X=e+888|0;Y=e+896|0;Z=e+904|0;$=e+912|0;ab=e+920|0;ac=e+928|0;ad=e+936|0;ae=e+944|0;af=e+952|0;ag=e+960|0;ah=e+968|0;ai=e+976|0;aj=e+984|0;ak=e+992|0;al=e+1008|0;am=e+1016|0;an=e+1024|0;ao=e+1032|0;ap=e+1040|0;aq=e+1048|0;ar=e+1056|0;as=e+1064|0;at=e+1072|0;au=e+1080|0;av=e+1088|0;aw=e+1096|0;ax=e+1104|0;ay=e+1112|0;az=e+1120|0;aA=e+1128|0;aB=e+1136|0;aC=e+1144|0;aD=e+1152|0;aE=e+1160|0;aF=e+1168|0;aG=e+1176|0;aH=e+1184|0;aI=e+1192|0;aJ=e+1200|0;aK=e+1208|0;aL=e+1216|0;aM=e+1224|0;aO=e+1232|0;aP=e+1240|0;aQ=e+1248|0;aR=e+1256|0;aS=e+1264|0;aT=e+1272|0;aU=e+1280|0;aV=e+1288|0;aW=e+1296|0;aX=e+1304|0;aY=e+1312|0;aZ=e+1320|0;a_=e+1328|0;a$=e+1336|0;a0=e+1344|0;a1=e+1352|0;a2=e+1360|0;a3=e+1368|0;a4=c[3524]|0;c[aS>>2]=0;c[aT>>2]=0;c[200]=2;c[144]=1;if((c[14091]|0)==2){a5=+P(+(+h[8170]- +h[8169]));a6=a5*+h[7048]}else{a6=+h[7048]}if((c[1057]|0)==2){a5=+P(+(+h[8170]- +h[8169]));a7=a5*+h[531]}else{a7=+h[531]}if((c[8764]|0)==2){a5=+P(+(+h[8256]- +h[8255]));a8=a5*+h[4384]}else{a8=+h[4384]}if((c[6588]|0)==2){a5=+P(+(+h[8256]- +h[8255]));a9=a5*+h[3296]}else{a9=+h[3296]}a5=+h[8169];ba=+h[8170];if(a5<ba){bb=a5-a6;h[8169]=bb;bc=a7+ba;h[8170]=bc;bd=bb;be=bc}else{bc=ba-a6;h[8170]=bc;a6=a7+a5;h[8169]=a6;bd=a6;be=bc}bc=+h[8255];a6=+h[8256];if(bc<a6){a5=bc-a8;h[8255]=a5;a7=a9+a6;h[8256]=a7;bf=a5;bg=a7}else{a7=a6-a8;h[8256]=a7;a8=a9+bc;h[8255]=a8;bf=a8;bg=a7}if(bf==bg){uf(-1,126120,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(bd==be){uf(-1,124848,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}lk();if((a[14080]&1)==0){lk()}do{if(a[14088]|0){if((a[33512]&1)==0){break}if(!(a[13032]|0)){break}bh=c[(c[3524]|0)+104>>2]|0;if((bh|0)!=0){cS[bh&511]()}a[13032]=0}else{cS[c[(c[3524]|0)+52>>2]&511]();a[14088]=1}}while(0);cM[c[(c[3524]|0)+168>>2]&511](0);bh=c[3524]|0;if((c[bh+96>>2]&16|0)!=0){c[7271]=-1}c[13880]=0;c[13881]=(c[bh+8>>2]|0)-1;c[13882]=0;c[13883]=(c[bh+12>>2]|0)-1;i6(0,1);c[ap>>2]=0;c[aq>>2]=0;c[ar>>2]=0;bh=c[3524]|0;bi=bh+72|0;bj=(cO[c[bi>>2]&255](-270)|0)!=0;bk=bj?c[1164]|0:0;bl=c[16602]|0;bm=c[17290]|0;bn=bj?c[16430]|0:0;bo=bj?c[17118]|0:0;a[35184]=a[36120]&1;c[1098]=0;c[206]=0;c[188]=0;c[148]=0;c[48]=0;c[174]=0;bp=c[1119]|0;if((bp|0)!=0){ga(bp,4392)}bp=c[16629]|0;if((bp|0)!=0){ga(bp,752)}do{if((c[(c[3524]|0)+96>>2]&32|0)!=0){bp=c[16629]|0;if((bp|0)==0){break}if((cy(bp|0,137224)|0)==0){break}c[188]=(c[188]|0)+1}}while(0);bp=c[17317]|0;if((bp|0)!=0){ga(bp,824)}bp=c[16457]|0;if((bp|0)!=0){ga(bp,192)}bp=c[17145]|0;if((bp|0)!=0){ga(bp,592)}do{if((c[16573]|0)!=0){ga(66240,696);if((c[174]|0)!=0|(c[16580]|0)==0){break}c[174]=1}}while(0);if((c[17261]|0)!=0){ga(68992,808)}if((c[16401]|0)!=0){ga(65552,ap)}if((c[17089]|0)!=0){ga(68304,aq)}bp=c[1183]|0;if((bp|0)!=0){ga(bp,ar)}if((c[1098]|0)==0){bq=0}else{fN(4560,as,at,135256);be=+(aa((c[1098]|0)+1|0,c[bh+16>>2]|0)>>>0>>>0);bq=~~(+h[at>>3]+be)}do{if((c[206]|0)==0){br=0;bs=c[17261]|0;bt=9319}else{fN(69352,au,av,135256);at=c[bh+16>>2]|0;be=+(aa(at,c[206]|0)>>>0>>>0);as=~~(+h[av>>3]+be);bp=c[17261]|0;if((bp|0)!=0){br=as;bs=bp;bt=9319;break}bu=0;bv=~~(+(at>>>0>>>0)*.5+ +(as|0));bx=1}}while(0);do{if((bt|0)==9319){if((bs&1|0)==0){bu=0;bv=br;bx=1;break}bu=aa(c[bh+16>>2]|0,c[202]|0);bv=br;bx=0}}while(0);do{if((a[69200]&1)==0){if(bx){if((c[16573]&5|0)!=5){by=0;break}}by=~~(+((c[bh+24>>2]|0)>>>0>>>0)*+h[8648])}else{by=0}}while(0);if((c[1183]|0)==0|(c[1166]|0)!=0){bz=0}else{fN(4816,aw,ax,135256);be=+(aa((c[ar>>2]|0)+2|0,c[bh+16>>2]|0)>>>0>>>0);bz=~~(+h[ax>>3]+be)}if((c[16457]|0)==0|bj){bA=0}else{fN(65912,ay,az,135256);be=+(aa(c[bh+16>>2]|0,c[48]|0)>>>0>>>0);bA=~~(+h[az>>3]+be)}if((c[17145]|0)==0|bj){bB=0}else{fN(68664,aA,aB,135256);be=+(aa(c[bh+16>>2]|0,c[148]|0)>>>0>>>0);bB=~~(+h[aB>>3]+be)}be=+g[38]+ +g[44];aB=bh+12|0;aA=~~(be*+(((c[aB>>2]|0)-1|0)>>>0>>>0)+.5);c[7941]=aA;bd=+h[535];do{if((c[1066]|0)==3){c[7941]=~~(bd*+(((c[aB>>2]|0)-1|0)>>>0>>>0))}else{if(bd>=0.0){c[7941]=aA-~~(bd*+((c[bh+16>>2]|0)>>>0>>>0)+.5);break}az=bv+bq|0;ay=bA+bz|0;ax=(ay|0)>(az|0)?ay:az;az=(by+bu|0)+((bB|0)>(ax|0)?bB:ax)|0;if((az|0)>(by|0)){bC=(c[bh+16>>2]|0)+az|0}else{bC=az}az=aA-bC|0;c[7941]=az;if((az|0)!=(~~(be*+(((c[aB>>2]|0)-1|0)>>>0>>>0)+.5)|0)){break}c[7941]=az-(c[bh+20>>2]<<1)}}while(0);if((c[8786]|0)==3){bD=+h[4395]*+((c[bh+8>>2]|0)>>>0>>>0)}else{be=+h[4395];bD=+g[184]*+((c[bh+8>>2]|0)>>>0>>>0)+ +((c[bh+20>>2]|0)>>>0>>>0)*(be>=0.0?be:1.0)}c[7938]=~~bD;if((c[6598]|0)==3){bE=+h[3301]*+(((c[bh+8>>2]|0)-1|0)>>>0>>>0)}else{bD=+h[3301];bE=(+g[178]+ +g[184])*+(((c[bh+8>>2]|0)-1|0)>>>0>>>0)- +((c[bh+20>>2]|0)>>>0>>>0)*(bD>=0.0?bD:2.0)}c[7939]=~~bE;bC=c[16573]|0;if((bC&2|0)==0){bF=0;bt=9351}else{bE=+h[8169];bD=+h[8170];if(bE<bD){if(bE>0.0|bD<0.0){bt=9349}else{bG=0}}else{if(bD>0.0|bE<0.0){bt=9349}else{bG=0}}if((bt|0)==9349){bG=1}if(+P(+(bE/(bD-bE)))<.05){bt=9352}else{bF=bG;bt=9351}}if((bt|0)==9351){if((bC&1|0)!=0|bF){bt=9352}else{bH=0}}if((bt|0)==9352){bH=aa((c[174]|0)+1|0,c[bh+16>>2]|0)}do{if((a[66448]&1)==0){if((bC&1|0)==0){if((c[17261]&5|0)!=5){bI=0;break}}bI=~~(+((c[bh+24>>2]|0)>>>0>>>0)*+h[8304])}else{bI=0}}while(0);do{if((c[188]|0)==0){bJ=0}else{fN(66600,aC,aD,135256);bE=+((c[bh+16>>2]|0)>>>0>>>0);bC=~~(bE*(+(c[188]|0)+.2)- +h[aD>>3]);if((c[16573]|0)!=0){bJ=bC;break}bJ=~~(bE*.5+ +(bC|0))}}while(0);if((c[1183]|0)!=0&(c[1166]|0)!=0){fN(4816,aE,aF,135256);bE=+(aa(c[bh+16>>2]|0,c[ar>>2]|0)>>>0>>>0);bK=~~(bE- +h[aF>>3])}else{bK=0}bE=+g[44];aF=~~(bE*+((c[aB>>2]|0)>>>0>>>0));c[7940]=aF;bD=+h[7052];do{if((c[14100]|0)==3){c[7940]=~~(bD*+((c[aB>>2]|0)>>>0>>>0))}else{if(bD>=0.0){c[7940]=~~(+(aF|0)+(bD*+((c[bh+16>>2]|0)>>>0>>>0)+.5));break}aE=(((bI+bH|0)+((bJ|0)>0?bJ:0)|0)+((bK|0)>0?bK:0)|0)+aF|0;c[7940]=aE;if((aE|0)!=(~~(bE*+((c[aB>>2]|0)>>>0>>>0))|0)){break}c[7940]=(c[bh+20>>2]<<1)+aE}}while(0);L12774:do{if((a[35184]&1)==0){bL=1;bN=0}else{bE=+h[3817];aF=~~(bE*+((c[bh+28>>2]|0)>>>0>>>0));c[8240]=aF;aE=~~(bE*+((c[bh+24>>2]|0)>>>0>>>0));c[8242]=aE;bE=+h[4524];if(bE<0.0){bO=0}else{bO=~~(+(aF|0)+bE*+((c[bh+20>>2]|0)>>>0>>>0))}c[9e3]=bO;bE=+h[4525];aF=~~(+(aE|0)*1.25*bE);c[9020]=aF;aE=bh+16|0;aD=c[aE>>2]|0;if(aF>>>0<aD>>>0){aC=~~(bE*+(aD>>>0>>>0));c[9020]=aC;bP=aC}else{bP=aF}if((bP|0)==0){c[9020]=1}if((d|0)>0){aF=0;aC=0;aD=0;bC=0;bF=b;while(1){bG=bF+16|0;aA=c[bG>>2]|0;do{if((aA|0)==0){bQ=aD;bR=aF}else{if((a[bF+22|0]&1)!=0){bQ=aD;bR=aF;break}az=a[bF+20|0]&1;do{if(az<<24>>24==0){bS=aA}else{if((a[37456]&1)!=0){bS=aA;break}a[37456]=1;ax=c[(c[3524]|0)+88>>2]|0;if((ax|0)==0){bS=aA;break}cO[ax&255](179864);bS=c[bG>>2]|0}}while(0);a[37456]=az;ax=lp(bS)|0;if((ax|0)==0){bT=aD;bU=aF}else{bT=aD+1|0;bU=(ax|0)>(aF|0)?ax:aF}a[37456]=0;bQ=bT;bR=bU}}while(0);bG=bF+12|0;aA=c[bG>>2]|0;ax=(aA|0)==392;if(ax&(bC|0)==392){bV=((c[bF+280>>2]|0)==0&(bQ|0)>1&1)+bQ|0}else{bV=bQ}do{if(ax){ay=c[bF+224>>2]|0;if((ay|0)==0){bW=bV;bX=bR;bY=392;break}aw=c[ay>>2]|0;if((aw|0)==0){bW=bV;bX=bR;bY=392;break}else{bZ=bR;b_=bV;b$=aw}do{b_=b_+1|0;aw=c[b$+60>>2]|0;if((aw|0)==0){b0=0}else{b0=lp(aw)|0}bZ=(b0|0)>(bZ|0)?b0:bZ;b$=c[b$>>2]|0;}while((b$|0)!=0);bW=b_;bX=bZ;bY=c[bG>>2]|0}else{bW=bV;bX=bR;bY=aA}}while(0);aA=aC+1|0;if((aA|0)<(d|0)){aF=bX;aC=aA;aD=bW;bC=bY;bF=c[bF>>2]|0}else{b1=bX;b2=bW;break}}}else{b1=0;b2=0}c[6960]=b2;c[8710]=b1;bF=ga(36288,aG)|0;bC=~~(+(bF|0)-(+h[4524]+2.0));bF=c[8710]|0;aD=(c[9047]|0)==1;if((bC|0)<=(bF|0)|aD){b3=bF}else{c[8710]=bC;b3=bC}bE=+(c[aG>>2]|0);h[4488]=bE;if((a[36229]&1)==0){c[9008]=0;bC=c[9e3]|0;c[9004]=bC;bF=bh+20|0;aC=~~(+((c[bF>>2]|0)>>>0>>>0)*(+(b3+1|0)+ +h[4526]));c[8988]=-aC;c[8984]=-(c[bF>>2]|0);c[8996]=aC;b4=(c[bF>>2]|0)+bC|0;b5=0;b6=bC;b7=aC}else{aC=c[9e3]|0;bC=-aC|0;c[9008]=bC;c[9004]=0;bF=bh+20|0;c[8988]=c[bF>>2];aF=~~(+((c[bF>>2]|0)>>>0>>>0)*(+(b3+1|0)+ +h[4526]));c[8984]=aF;aA=(c[bF>>2]|0)+aC|0;c[8996]=aA;b4=aF;b5=bC;b6=0;b7=aA}c[8992]=b4;c[9016]=(b5+b6|0)/2&-1;aA=b4+b7|0;c[9026]=aA;bC=c[6960]|0;c[9012]=bC;do{if(aD){aF=(c[7939]|0)-(c[7938]|0)|0;aC=(aF|0)/(aA|0)&-1;bF=c[9338]|0;bG=(bF|0)>0&(aC|0)>(bF|0)?bF:aC;if((bG|0)==0){c[9026]=aF;b8=1;b9=1;ca=aF}else{b8=0;b9=bG;ca=aA}bG=bC-1|0;aF=(bG+b9|0)/(b9|0)&-1;c[9012]=aF;if((aF|0)==0){cb=1}else{cb=(bG+aF|0)/(aF|0)&-1}bG=(cb|0)==0;cc=bG|b8<<24>>24!=0;cd=bG?1:cb;ce=aF;cf=ca}else{bD=+((c[aE>>2]|0)>>>0>>>0);aF=(~~(+((c[7941]|0)-(c[7940]|0)|0)- +h[4527]*bD-(bE+1.0)*bD)|0)/(c[9020]|0)&-1;bG=c[9339]|0;aC=(bG|0)>0&(aF|0)>(bG|0)?bG:aF;aF=(aC|0)==0;bG=aF?1:aC;if((bC|0)<=(bG|0)){cc=aF;cd=1;ce=bC;cf=aA;break}aC=bC-1|0;bF=(bG+aC|0)/(bG|0)&-1;bG=(bF|0)==0;ax=bG?1:bF;bF=(ax+aC|0)/(ax|0)&-1;c[9012]=bF;cc=bG|aF;cd=ax;ce=bF;cf=aA}}while(0);aA=c[9031]|0;if((aA|0)==1){if((c[9045]|0)!=1|(c[9044]|0)!=1){bt=9410}else{bt=9421}}else if((aA|0)==2){bt=9410}else{bt=9421}do{if((bt|0)==9410){aA=c[9032]|0;if((aA|0)==1&+h[7052]<0.0){bC=aa(c[9020]|0,ce);bD=+((c[aE>>2]|0)>>>0>>>0);aD=(((c[7940]|0)+bC|0)+~~((bE+1.0)*bD)|0)+~~(bD*+h[4527])|0;if((aD|0)>(c[7941]|0)){cg=0;break}c[7940]=aD;if(cc){cg=0;break}else{bL=cd;bN=0;break L12774}}if((aA|0)==0&+h[535]<0.0){aD=aa(c[9020]|0,ce);bD=+((c[aE>>2]|0)>>>0>>>0);bC=(((c[7941]|0)-aD|0)-~~((bE+1.0)*bD)|0)+~~(bD*+h[4527])|0;if((bC|0)<(c[7940]|0)){cg=0;break}c[7941]=bC;if(cc){cg=0;break}else{bL=cd;bN=0;break L12774}}if((aA|0)==2&+h[4395]<0.0){bC=aa(cd,cf);aD=c[7938]|0;bF=(aD+bC|0)>(c[7939]|0);ax=bF?0:bC;c[7938]=ax+aD;if(bF|cc){cg=ax;break}else{bL=cd;bN=ax;break L12774}}if(!((aA|0)==3&+h[3301]<0.0)){bt=9421;break}aA=aa(cd,cf);ax=(c[7939]|0)-aA|0;if((ax|0)<(c[7938]|0)){cg=0;break}c[7939]=ax;if(cc){cg=0}else{bL=cd;bN=0;break L12774}}}while(0);if((bt|0)==9421){if(cc){cg=0}else{bL=cd;bN=0;break}}uh(-1,133720,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);bL=cd;bN=cg}}while(0);dd(1,20);dd(5,20);do{if(a[31104]|0){dk();dc(3,132208);if((a[54016]|0)==110){break}dd(3,20)}}while(0);cg=c[16401]|0;if((cg&2|0)==0){ch=0;bt=9432}else{bE=+h[8255];bD=+h[8256];if(bE<bD){if(bE>0.0|bD<0.0){bt=9430}else{ci=0}}else{if(bD>0.0|bE<0.0){bt=9430}else{ci=0}}if((bt|0)==9430){ci=1}if(+P(+(bE/(bD-bE)))<.1){bt=9433}else{ch=ci;bt=9432}}if((bt|0)==9432){if((cg&1|0)!=0|ch){bt=9433}else{cj=0}}do{if((bt|0)==9433){if((bn|0)==0){c[216]=0;de(1,14);cj=aa((c[216]|0)+2|0,c[bh+20>>2]|0);break}else{cj=aa((c[ap>>2]|0)+2|0,c[bh+16>>2]|0);break}}}while(0);do{if((a[65760]&1)==0){if((c[16401]&1|0)==0){if((c[17089]&5|0)!=5){ck=0;break}}ck=~~(+((c[bh+28>>2]|0)>>>0>>>0)*+h[8218])}else{ck=0}}while(0);ap=bj^1;do{if((c[16457]|0)==0|ap){cl=0}else{fN(65912,aH,aI,135256);bj=c[bh+16>>2]|0;bE=+(aa(bj,c[48]|0)>>>0>>>0);ch=~~(bE- +h[aH>>3]);if((c[16401]|0)!=0){cl=ch;break}cl=~~(+(bj>>>0>>>0)*.5+ +(ch|0))}}while(0);aH=(bk|0)==0;if((c[1183]|0)==0|aH){cm=0}else{fN(4816,aJ,aK,135256);cm=~~((+(c[ar>>2]|0)+1.5)*+((c[bh+16>>2]|0)>>>0>>>0)- +h[aJ>>3])}if(+h[4395]<0.0){aJ=(bN|0)<(cm|0)?cm:bN;bN=bh+8|0;ar=ck+cj|0;c[7938]=(((aJ|0)<(cl|0)?cl:aJ)+ar|0)+~~(+g[184]*+((c[bN>>2]|0)>>>0>>>0));fN(4816,aL,aM,135256);aM=c[7938]|0;do{if(aH){aJ=~~+h[aL>>3];if((aM-ar|0)>=(-aJ|0)){cn=aM;break}aK=ar-aJ|0;c[7938]=aK;cn=aK}else{cn=aM}}while(0);aM=bh+20|0;if((cn|0)==(~~(+((c[bN>>2]|0)>>>0>>>0)*+g[184])|0)){bN=(c[aM>>2]<<1)+cn|0;c[7938]=bN;co=bN}else{co=cn}c[7938]=~~(+(co|0)+ +((c[aM>>2]|0)>>>0>>>0)*.5)}do{if((c[17089]&1|0)==0){cp=0}else{if((bo|0)==0){c[216]=0;de(5,14);cp=aa((c[216]|0)+2|0,c[bh+20>>2]|0);break}else{cp=aa((c[aq>>2]|0)+2|0,c[bh+16>>2]|0);break}}}while(0);aq=c[16580]|0;do{if((aq|0)==0){cq=0}else{aM=c[7939]|0;co=c[7938]|0;h[8269]=+(aM-co|0)/(+h[8256]- +h[8255]);c[16536]=co;c[16537]=aM;co=aq;cn=aM;L12904:while(1){aM=c[co+8>>2]|0;do{if((aM|0)==0){cr=cn}else{bE=+(lp(aM)|0);bN=c[16602]|0;bD=bE*+S(+(+(bN|0)*.017453292519943295));ar=~~(bD*+((c[(c[3524]|0)+20>>2]|0)>>>0>>>0));bD=+h[8257];bE=+h[8258];cs=+h[co>>3];if(bD<bE){if(cs<bD|cs>bE){cr=cn;break}}else{if(cs<bE|cs>bD){cr=cn;break}}if((a[66164]&1)==0){ct=cs}else{if(cs<=0.0){bt=9464;break L12904}bD=+_(+cs);ct=bD/+h[8272]}if((bN|0)==0){cu=(ar|0)/2&-1}else{cu=ar}bD=+(~~(+(c[16536]|0)+(ct- +h[8255])*+h[8269]+.5)|0)+ +(cu|0);if(+(cn|0)>=bD){cr=cn;break}cr=~~bD}}while(0);aM=c[co+16>>2]|0;if((aM|0)==0){break}else{co=aM;cn=cr}}if((bt|0)==9464){uk(210984,(v=i,i=i+24|0,c[v>>2]=130992,c[v+8>>2]=56880,h[v+16>>3]=cs,v)|0)}cn=cr-(c[7939]|0)|0;co=(c[(c[3524]|0)+8>>2]|0)>>>2;if(cn>>>0<=co>>>0){cq=cn;break}uh(-1,129936,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);cq=co}}while(0);do{if((a[68512]&1)==0){if((c[17089]&1|0)==0){if((c[16401]&5|0)!=5){cv=0;break}}cv=~~(+((c[bh+28>>2]|0)>>>0>>>0)*+h[8562])}else{cv=0}}while(0);do{if((c[17145]|0)==0|ap){cw=0}else{fN(68664,aO,aP,135256);cr=c[bh+16>>2]|0;cs=+(aa(cr,c[148]|0)>>>0>>>0);cu=~~(+h[aO>>3]+cs);if((c[17089]|0)!=0){cw=cu;break}cw=~~(+(cr>>>0>>>0)*.5+ +(cu|0))}}while(0);do{if((c[6598]|0)!=3){aO=a[54016]|0;if(a[31104]&aO<<24>>24!=110){if(!((aO<<24>>24|0)==110|(aO<<24>>24|0)==117)){aO=c[7939]|0;aP=~~(+(aO|0)- +(aO-(c[7938]|0)|0)*.1);c[7939]=aP;c[7939]=aP+((c[bh+20>>2]|0)*-3&-1)}c[13507]=0}if(+h[3301]>=0.0){break}aP=c[7939]|0;c[13507]=aP;aO=(((cw|0)>0?-cw|0:0)-(cv+cp|0)|0)+aP|0;c[7939]=aO;cu=bh+20|0;cs=(+g[178]+ +g[184])*+(((c[bh+8>>2]|0)-1|0)>>>0>>>0)- +(c[cu>>2]<<1>>>0>>>0);if(+(aO|0)>cs){cr=~~cs;c[7939]=cr;cx=cr}else{cx=aO}c[13507]=aP-cx;aP=c[(c[3524]|0)+8>>2]|0;if((aP-cx|0)>>>0<cq>>>0){aO=aP-cq|0;c[7939]=aO;cz=aO}else{cz=cx}c[7939]=~~(+(cz|0)- +((c[cu>>2]|0)>>>0>>>0))}}while(0);dd(2,20);dd(6,20);if((a[30528]&1)!=0){dd(7,10)}cs=+g[18074];do{if(cs!=0.0){do{if(cs<0.0){cz=c[200]|0;ct=+h[64672+(cz*688&-1)>>3]- +h[64664+(cz*688&-1)>>3];if(ct==0.0){bt=9497;break}cz=c[144]|0;cA=(-0.0-cs)*+P(+((+h[64672+(cz*688&-1)>>3]- +h[64664+(cz*688&-1)>>3])/ct))}else{bt=9497}}while(0);if((bt|0)==9497){cA=cs}if(!(cA>=.01&cA<=100.0)){break}cz=c[7941]|0;cx=c[7940]|0;cq=cz-cx|0;ct=+(cq|0);cu=c[7939]|0;aO=c[7938]|0;aP=cu-aO|0;bD=+(aP|0);bE=cA*+((c[bh+24>>2]|0)>>>0>>>0)/+((c[bh+28>>2]|0)>>>0>>>0);if(ct/bD>bE){cr=~~(bD*bE);if((c[14100]|0)==3){c[7941]=cr+cx;break}if((c[1066]|0)==3){c[7940]=cz-cr;break}else{aq=(cq-cr|0)/2&-1;c[7940]=aq+cx;c[7941]=cz-aq;break}}else{aq=~~(ct/bE);if((c[8786]|0)==3){c[7939]=aq+aO;break}if((c[6598]|0)==3){c[7938]=cu-aq;break}else{cz=(aP-aq|0)/2&-1;c[7938]=cz+aO;c[7939]=cu-cz;break}}}}while(0);cz=(bm|0)==0|ap;do{if((c[17261]&1|0)==0|cz){cB=bu}else{cA=+T(+(+(c[17290]|0)*.017453292519943295));bm=c[17314]|0;if((bm|0)==2){cC=cA*-1.0}else if((bm|0)==1){cC=+P(+cA)*.5}else{cC=cA}c[216]=0;de(6,14);bm=+h[535]<0.0;if(bm){c[7941]=(c[7941]|0)+bu}if(cC>0.0){cD=~~(+(bu|0)+cC*+(aa(c[216]|0,c[bh+20>>2]|0)|0))}else{cD=bu}if(!bm){cB=cD;break}c[7941]=(c[7941]|0)-cD;cB=cD}}while(0);cD=(bl|0)==0|ap;do{if((c[16573]&1|0)==0|cD){cE=bH}else{bl=c[16602]|0;do{if((bl|0)==(-270|0)){if((a[66648]&1)!=0){cF=-1.0;bt=9525;break}c[16626]=2;cH=-1.0;bt=9526}else if((bl|0)==90){cF=-1.0;bt=9525}else{cF=-0.0- +T(+(+(bl|0)*.017453292519943295));bt=9525}}while(0);if((bt|0)==9525){if((c[16626]|0)==2){cH=cF;bt=9526}else{cJ=cF}}if((bt|0)==9526){cJ=cH*-1.0}c[216]=0;de(2,14);bl=+h[7052]<0.0;if(bl){c[7940]=(c[7940]|0)-bH}if(cJ>0.0){cC=cJ*+(aa(c[216]|0,c[bh+20>>2]|0)|0);cL=~~(+((c[bh+16>>2]|0)>>>0>>>0)+cC)}else{cL=bH}if(!bl){cE=cL;break}c[7940]=(c[7940]|0)+cL;cE=cL}}while(0);cL=c[7941]|0;bH=c[7940]|0;if((cL|0)<(bH|0)){c[7941]=bH;c[7940]=cL;cP=bH;cQ=cL}else{cP=cL;cQ=bH}bH=((by+bv|0)+cB|0)+cP|0;c[208]=bH;do{if((cB|0)==0){cT=bH}else{if((bv|bq|0)==0){cT=bH;break}cL=(c[bh+16>>2]|0)+bH|0;c[208]=cL;cT=cL}}while(0);bH=cT+bq|0;c[1102]=bH;cT=((bA+by|0)+cB|0)+cP|0;c[50]=cT;c[150]=((bB+by|0)+cB|0)+cP;bB=bJ+bI|0;cL=bh+16|0;bl=~~(+(cQ-(cE+bB|0)|0)+ +((c[cL>>2]|0)>>>0>>>0)*(+(c[188]|0)+.2));c[190]=bl;bu=c[7938]|0;bm=(bu-ck|0)-cj|0;c[52]=bm;if(!((c[16457]|0)==0|ap)){c[52]=bm-cl}cl=(cv+cp|0)+(c[7939]|0)|0;c[152]=cl;if(!((c[17145]|0)==0|ap)){c[152]=(cl+cw|0)-aa(c[cL>>2]|0,c[148]|0)}cw=(bk|0)!=0;bk=(c[1166]|0)!=0;do{if(cw){if(bk){cU=(bJ-bK|0)+bl|0;bt=9551;break}else{c[1216]=(bz-(bv+bq|0)|0)+bH;bt=9552;break}}else{if(bk){c[1216]=(cQ-((bK+bB|0)+cE|0)|0)+(c[cL>>2]|0);bt=9553;break}if((bA|0)>0){c[1216]=cT+bz;bt=9553;break}else{cU=(((bz+by|0)+cB|0)+cP|0)+(c[bh+20>>2]|0)|0;bt=9551;break}}}while(0);if((bt|0)==9551){c[1216]=cU;if(cw){bt=9552}else{bt=9553}}if((bt|0)==9553){fN(4816,aQ,aR,135256);aR=c[7938]|0;cV=(aR-(ck+cj|0)|0)+~~+h[aQ>>3]|0;cW=c[7940]|0;cX=c[7941]|0;cY=aR}else if((bt|0)==9552){cV=bu-((ck+cj|0)+cm|0)|0;cW=cQ;cX=cP;cY=bu}c[1218]=cV;cV=bh+20|0;c[176]=(cW-bI|0)-(c[(cD?cL:cV)>>2]|0);if(cz){cZ=cB}else{cZ=c[cV>>2]|0}c[204]=(cX+by|0)+cZ;if((bn|0)==0){c_=c[cV>>2]|0}else{c_=cj-(c[cL>>2]|0)|0}c[36]=(cY-ck|0)-c_;c[146]=((c[7939]|0)+cv|0)+(c[((bo|0)==0?cV:cL)>>2]|0);cO[c[bi>>2]&255](0);bi=c[7941]|0;bo=c[7940]|0;cJ=+(bi-bo|0);h[8183]=cJ/(+h[8170]- +h[8169]);h[8527]=cJ/(+h[8514]- +h[8513]);cv=c[7939]|0;c_=c[7938]|0;cJ=+(cv-c_|0);h[8269]=cJ/(+h[8256]- +h[8255]);h[8613]=cJ/(+h[8600]- +h[8599]);c[16536]=c_;c[16537]=cv;c[16364]=bo;c[16365]=bi;c[17224]=c_;c[17225]=cv;c[17052]=bo;c[17053]=bi;ck=aa(c[9026]|0,bL);cJ=+((c[cL>>2]|0)>>>0>>>0);cH=+h[4488]*cJ;cL=~~(cH+ +(aa(c[9020]|0,c[9012]|0)|0));bL=cL+~~(cJ*+h[4527])|0;cL=c[9031]|0;do{if((cL|0)==1){if((c[9044]|0)==1&(c[9045]|0)==1){bt=9564}else{bt=9570}}else if((cL|0)==0){cY=c[9044]|0;if((cY|0)==0){cj=bi-(c[bh+24>>2]|0)|0;c[9337]=cj;c[9336]=cj-bL;bt=9565;break}else if((cY|0)==2){cY=(c[bh+24>>2]|0)+bo|0;c[9336]=cY;c[9337]=cY+bL;bt=9565;break}else{bt=9564;break}}else{if((cL-1|0)>>>0<2){bt=9570;break}fR(36136,an,ao,128552);cY=~~+h[an>>3];cj=~~+h[ao>>3];c[9334]=cY;bn=c[9045]|0;if((bn|0)==1){cZ=cY-((ck|0)/2&-1)|0;c[9334]=cZ;c$=cZ}else if((bn|0)==2){bn=cY-ck|0;c[9334]=bn;c$=bn}else{c$=cY}c[9335]=c$+ck;c[9337]=cj;cY=c[9044]|0;if((cY|0)==1){bn=((bL|0)/2&-1)+cj|0;c[9337]=bn;c0=bn}else if((cY|0)==2){cY=cj+bL|0;c[9337]=cY;c0=cY}else{c0=cj}c[9336]=c0-bL;c1=c[7939]|0;c2=c[7938]|0}}while(0);L13067:do{if((bt|0)==9564){c0=(bL|0)/2&-1;c$=(bo+bi|0)/2&-1;c[9336]=c$-c0;c[9337]=c$+c0;bt=9565}else if((bt|0)==9570){c0=c[9032]|0;do{if((c0|0)==0){c$=~~((+g[38]+ +g[44])*+((c[aB>>2]|0)>>>0>>>0)- +((c[bh+24>>2]|0)>>>0>>>0));c[9337]=c$;c[9336]=c$-bL}else if((c0|0)==1){c$=~~(+g[44]*+((c[aB>>2]|0)>>>0>>>0)+ +((c[bh+24>>2]|0)>>>0>>>0));c[9336]=c$;c[9337]=c$+bL}else{c$=c[9044]|0;if((c$|0)==0){c[9337]=bi;c[9336]=bi-bL}else if((c$|0)==1){c$=(bL|0)/2&-1;ao=(bo+bi|0)/2&-1;c[9336]=ao-c$;c[9337]=ao+c$}else{c[9336]=bo;c[9337]=bL+bo}if((c0|0)==2){c$=~~(+g[184]*+((c[bh+8>>2]|0)>>>0>>>0)+ +((c[cV>>2]|0)>>>0>>>0));c[9334]=c$;c[9335]=c$+ck;c1=cv;c2=c_;break L13067}else if((c0|0)==3){c$=~~((+g[178]+ +g[184])*+(((c[bh+8>>2]|0)-1|0)>>>0>>>0)- +((c[cV>>2]|0)>>>0>>>0));c[9335]=c$;c[9334]=c$-ck;c1=cv;c2=c_;break L13067}else{break}}}while(0);c0=c[9045]|0;if((c0|0)==0){c[9334]=c_;c[9335]=ck+c_;c1=cv;c2=c_;break}else if((c0|0)==1){c0=(ck|0)/2&-1;c$=(c_+cv|0)/2&-1;c[9334]=c$-c0;c[9335]=c$+c0;c1=cv;c2=c_;break}else{c[9335]=cv;c[9334]=cv-ck;c1=cv;c2=c_;break}}}while(0);do{if((bt|0)==9565){bh=c[9045]|0;if((bh|0)==0){bo=(c[cV>>2]|0)+c_|0;c[9334]=bo;c[9335]=bo+ck;c1=cv;c2=c_;break}else if((bh|0)==2){bh=cv-(c[cV>>2]|0)|0;c[9335]=bh;c[9334]=bh-ck;c1=cv;c2=c_;break}else{bh=(ck|0)/2&-1;bo=(c_+cv|0)/2&-1;c[9334]=bo-bh;c[9335]=bo+bh;c1=cv;c2=c_;break}}}while(0);c[13542]=31752;if((c1|0)<(c2|0)){bt=9593}else{if((c[7941]|0)<(c[7940]|0)){bt=9593}}if((bt|0)==9593){uh(-1,127328,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(a[31104]|0){dz()}fO(c[10818]|0,-1,2);a[25280]=0;cM[c[(c[3524]|0)+168>>2]&511](1);c2=c[10026]|0;if((c2|0)==(-1|0)|(c2|0)==0){fT();c3=c[10026]|0}else{c3=c2}if((c3|0)==(-1|0)|(c3|0)==0){c[200]=2;c[144]=1;dg(2,1);dg(1,2);c[200]=6;c[144]=5;dg(6,5);dg(5,6)}if((c[11692]|0)!=0){fU()}if((c[16457]|0)!=0){c3=a[65952]&1;do{if(c3<<24>>24!=0){if((a[37456]&1)!=0){break}a[37456]=1;c2=c[(c[3524]|0)+88>>2]|0;if((c2|0)==0){break}cO[c2&255](179864)}}while(0);a[37456]=c3;fn(65840,a4);c3=a4+72|0;if((cO[c[c3>>2]&255](c[16455]|0)|0)==0){ln(c[52]|0,c[50]|0,c[16457]|0,0,0,0,c[16458]|0)}else{fN(65912,aU,aV,141e3);ln(((c[a4+16>>2]|0)>>>1)+(c[52]|0)|0,~~(+(((c[7940]|0)+(c[7941]|0)|0)/2&-1|0)+ +h[aV>>3]),c[16457]|0,1,0,c[16455]|0,c[16458]|0);aV=c[c3>>2]|0;cO[aV&255](0)}if((c[16460]|0)!=0){cM[c[a4+64>>2]&511](-2)}a[37456]=0}if((c[17145]|0)!=0){aV=a[68704]&1;do{if(aV<<24>>24!=0){if((a[37456]&1)!=0){break}a[37456]=1;c3=c[(c[3524]|0)+88>>2]|0;if((c3|0)==0){break}cO[c3&255](179864)}}while(0);a[37456]=aV;fn(68592,a4);aV=a4+72|0;if((cO[c[aV>>2]&255](c[17143]|0)|0)==0){ln(c[152]|0,c[150]|0,c[17145]|0,2,0,0,c[17146]|0)}else{fN(68664,aW,aX,141e3);ln(((c[152]|0)-1|0)+((c[a4+16>>2]|0)>>>1)|0,~~(+(((c[7940]|0)+(c[7941]|0)|0)/2&-1|0)+ +h[aX>>3]),c[17145]|0,1,0,c[17143]|0,c[17146]|0);aX=c[aV>>2]|0;cO[aX&255](0)}if((c[17148]|0)!=0){cM[c[a4+64>>2]&511](-2)}a[37456]=0}if((c[16629]|0)!=0){fN(66600,aY,aZ,141e3);aZ=~~(+(((c[7938]|0)+(c[7939]|0)|0)/2&-1|0)+ +h[aY>>3]);aY=(c[190]|0)-((c[a4+16>>2]|0)>>>1)|0;aX=a[66640]&1;do{if(aX<<24>>24!=0){if((a[37456]&1)!=0){break}a[37456]=1;aV=c[(c[3524]|0)+88>>2]|0;if((aV|0)==0){break}cO[aV&255](179864)}}while(0);a[37456]=aX;fn(66528,a4);ln(aZ,aY,c[16629]|0,1,0,0,c[16630]|0);if((c[16632]|0)!=0){cM[c[a4+64>>2]&511](-2)}a[37456]=0}if((c[1119]|0)!=0){fN(4560,a_,a$,141e3);a$=~~(+(((c[7939]|0)+(c[7938]|0)|0)/2&-1|0)+ +h[a_>>3]);a_=(c[1102]|0)-((c[a4+16>>2]|0)>>>1)|0;aY=a[4600]&1;do{if(aY<<24>>24!=0){if((a[37456]&1)!=0){break}a[37456]=1;aZ=c[(c[3524]|0)+88>>2]|0;if((aZ|0)==0){break}cO[aZ&255](179864)}}while(0);a[37456]=aY;fn(4488,a4);ln(a$,a_,c[1119]|0,1,0,0,c[1120]|0);if((c[1122]|0)!=0){cM[c[a4+64>>2]&511](-2)}a[37456]=0}if((c[17317]|0)!=0){fN(69352,a0,a1,141e3);a1=~~(+(((c[7938]|0)+(c[7939]|0)|0)/2&-1|0)+ +h[a0>>3]);a0=((c[208]|0)-1|0)-((c[a4+16>>2]|0)>>>1)|0;a_=a[69392]&1;do{if(a_<<24>>24!=0){if((a[37456]&1)!=0){break}a[37456]=1;a$=c[(c[3524]|0)+88>>2]|0;if((a$|0)==0){break}cO[a$&255](179864)}}while(0);a[37456]=a_;fn(69280,a4);ln(a1,a0,c[17317]|0,1,0,0,c[17318]|0);if((c[17320]|0)!=0){cM[c[a4+64>>2]&511](-2)}a[37456]=0}if((c[1183]|0)!=0){a0=c[1218]|0;a1=c[1216]|0;cG(a2|0);a_=ut(1025)|0;do{if((a_|0)==0){gk();a$=ut(1025)|0;if((a$|0)!=0){c4=a$;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=126240,v)|0)}else{c4=a_}}while(0);a_=c[1183]|0;a$=aN(a2|0)|0;bw(c4|0,1024,a_|0,a$|0);do{if((c[1164]|0)==0){bt=9658}else{a$=a4+72|0;if((cO[c[a$>>2]&255](-270)|0)==0){bt=9658;break}a_=((c[a4+16>>2]|0)>>>1)+a0|0;a2=c[1184]|0;if((c[1166]|0)==0){ln(a_,a1,c4,2,0,-270,a2)}else{ln(a_,a1,c4,0,0,-270,a2)}a2=c[a$>>2]|0;cO[a2&255](0)}}while(0);do{if((bt|0)==9658){a2=a1-((c[a4+16>>2]|0)>>>1)|0;a$=c[1184]|0;if((c[1166]|0)==0){ln(a0,a2,c4,0,0,0,a$);break}else{ln(a0,a2,c4,0,2,0,a$);break}}}while(0);uu(c4)}do{if(a[31104]&(a[54016]|0)!=110){if(!((c[(c[3524]|0)+144>>2]|0)!=0&(c[13506]|0)==0)){break}dD(1)}}while(0);fO(c[10818]|0,0,2);c4=c[10822]|0;a0=c[(c[3524]|0)+92>>2]|0;if((a0|0)!=0){cK[a0&63](+h[3817])}if((c4|0)!=0){a0=c4;do{if((c[a0+56>>2]|0)==0){fR(a0+8|0,al,am,202256);fp(~~+h[al>>3],~~+h[am>>3],a0)}a0=c[a0>>2]|0;}while((a0|0)!=0)}fV(0);cM[c[(c[3524]|0)+168>>2]&511](2);if((a[35184]&1)!=0){fW(0,aS,aT)}a0=a4+168|0;am=(d|0)>0;al=ak;c4=ak|0;a1=ak+4|0;a$=a3;a3=a4+144|0;a2=a4+92|0;a_=a4+80|0;aY=s;aZ=s|0;aX=s+4|0;aV=V;aW=V|0;c3=V+4|0;aU=Q|0;c2=R|0;c1=Q+8|0;Q=R+8|0;R=J;c_=M|0;cv=I;ck=M+7|0;M=I|0;cV=I+4|0;bh=H;bo=H+4|0;bL=H+8|0;bi=H+16|0;aB=H|0;c0=J|0;c$=J|0;ao=J+72|0;an=J+80|0;cL=E;cj=E|0;cY=E+4|0;bn=D;cZ=D+4|0;by=D+8|0;cX=D+16|0;cB=D|0;cz=J+64|0;cD=J+8|0;bI=J+16|0;J=A+8|0;cW=A+40|0;bu=A+32|0;cP=A|0;cQ=A+16|0;cm=A+24|0;aR=A+48|0;aQ=A+56|0;cw=x;cU=x|0;bz=x+4|0;cT=t;bA=t|0;cE=t+4|0;bB=0;bK=0;L13212:while(1){cM[c[a0>>2]&511](10);bk=a[35184]|0;if(am){bH=0;bq=bB;bv=b;bl=0;bJ=bk;while(1){cM[c[(c[3524]|0)+168>>2]&511](6);cl=bv+304|0;c[200]=c[cl>>2];ap=bv+308|0;c[144]=c[ap>>2];cp=bv+24|0;bm=bv+64|0;c[al>>2]=c[bm>>2];c[al+4>>2]=c[bm+4>>2];c[al+8>>2]=c[bm+8>>2];c[al+12>>2]=c[bm+12>>2];cu=bv+28|0;aO=c[cu>>2]|0;aq=cp|0;do{if((c[aq>>2]|0)!=0){cJ=+h[bv+48>>3];aP=c[(c[3524]|0)+92>>2]|0;if(cJ<0.0){cK[aP&63](+h[3817]);break}else{cK[aP&63](cJ);break}}}while(0);aP=bv+40|0;cK[c[(c[3524]|0)+112>>2]&63](+h[aP>>3]);cx=c[(c[3524]|0)+64>>2]|0;if((aO|0)<-5){cM[cx&511](-2)}else{cM[cx&511](aO)}cx=bv+56|0;cr=c[3524]|0;do{if((a[cx]&1)==0){if((c[cr+96>>2]&1024|0)!=0){break}c[c4>>2]=1;c[a1>>2]=aO;bt=9686}else{bt=9686}}while(0);if((bt|0)==9686){bt=0;fn(ak,cr)}aO=bv+12|0;do{if((c[aO>>2]|0)==392){if((a[30080]&1)==0){c5=1}else{lK(cp,(c[cu>>2]|0)+1|0);c5=(c[aO>>2]|0)==392}if(!(c5&(bH|0)==392)){c6=bq;break}if((c[bv+280>>2]|0)!=0){c6=bq;break}cq=c[aT>>2]|0;co=c[54]|0;if((cq|0)==(co|0)){c6=bq;break}cn=bq+1|0;if((cn|0)<(c[9012]|0)){c[aT>>2]=cq-(c[9020]|0);c6=cn;break}else{c[aT>>2]=co;c[aS>>2]=(c[aS>>2]|0)+(c[9026]|0);c6=0;break}}else{c6=bq}}while(0);do{if((c[aO>>2]|0)==392&(c[9670]|0)==2){cr=bv+224|0;co=c[cr>>2]|0;if((co|0)==0){c7=0;c8=c6;break}if(!bK){if((a[36228]&1)!=0){c7=0;c8=c6;break}}cn=cp;c[a$>>2]=c[cn>>2];c[a$+4>>2]=c[cn+4>>2];c[a$+8>>2]=c[cn+8>>2];c[a$+12>>2]=c[cn+12>>2];c[a$+16>>2]=c[cn+16>>2];c[a$+20>>2]=c[cn+20>>2];c[a$+24>>2]=c[cn+24>>2];c[a$+28>>2]=c[cn+28>>2];c[a$+32>>2]=c[cn+32>>2];c[a$+36>>2]=c[cn+36>>2];c[a$+40>>2]=c[cn+40>>2];c[a$+44>>2]=c[cn+44>>2];c[a$+48>>2]=c[cn+48>>2];c[a$+52>>2]=c[cn+52>>2];cq=c[co>>2]|0;if((cq|0)==0){c9=c6;da=co}else{co=bv+200|0;aM=bv+64|0;ar=bv+68|0;bN=bv+32|0;aL=c6;aH=cq;while(1){cq=aH+4|0;c[cu>>2]=c[cq>>2];c[co>>2]=c[cq>>2];aK=aH+60|0;if((c[aK>>2]|0)!=0){aJ=(c[cq>>2]|0)+1|0;do{if((a[30080]&1)==0){cq=c[aq>>2]|0;aI=c[8798]|0;ch=(aI|0)>0;bj=aJ;L13260:while(1){cg=43264;while(1){df=c[cg>>2]|0;if((df|0)==0){break}if((c[df+4>>2]|0)==(bj|0)){break L13260}else{cg=df|0}}dh=bj-1|0;if(!((bj|0)>(aI|0)&ch)){bt=9715;break}bj=((dh|0)%(aI|0)&-1)+1|0}if((bt|0)==9715){bt=0;c[cu>>2]=dh;c[aM>>2]=1;c[ar>>2]=dh;c[bN>>2]=dh;break}aI=df+8|0;c[cn>>2]=c[aI>>2];c[cn+4>>2]=c[aI+4>>2];c[cn+8>>2]=c[aI+8>>2];c[cn+12>>2]=c[aI+12>>2];c[cn+16>>2]=c[aI+16>>2];c[cn+20>>2]=c[aI+20>>2];c[cn+24>>2]=c[aI+24>>2];c[cn+28>>2]=c[aI+28>>2];c[cn+32>>2]=c[aI+32>>2];c[cn+36>>2]=c[aI+36>>2];c[cn+40>>2]=c[aI+40>>2];c[cn+44>>2]=c[aI+44>>2];c[cn+48>>2]=c[aI+48>>2];c[cn+52>>2]=c[aI+52>>2];c[aq>>2]=cq;if((c[(c[3524]|0)+96>>2]&1024|0)!=0){c[cu>>2]=bj;a[cx]=0;break}if((a[cx]&1)!=0){break}c[aM>>2]=1;c[ar>>2]=c[cu>>2]}else{lK(cp,aJ)}}while(0);fY(bv,c[aK>>2]|0,a4,c[aS>>2]|0,c[aT>>2]|0)}aJ=aL+1|0;if((aJ|0)<(c[9012]|0)){c[aT>>2]=(c[aT>>2]|0)-(c[9020]|0);di=aJ}else{c[aT>>2]=c[54];c[aS>>2]=(c[aS>>2]|0)+(c[9026]|0);di=0}aJ=c[aH>>2]|0;if((aJ|0)==0){break}else{aL=di;aH=aJ}}c9=di;da=c[cr>>2]|0}aH=c[da+64>>2]|0;if((aH|0)==0){dj=da}else{uu(aH);dj=da}while(1){aL=c[dj+60>>2]|0;if((aL|0)!=0){uu(aL)}aL=c[dj+64>>2]|0;if(!((aL|0)==0|(aL|0)==(aH|0))){uu(aL)}aL=c[dj>>2]|0;uu(dj);if((aL|0)==0){break}else{dj=aL}}c[cr>>2]=0;c[cn>>2]=c[a$>>2];c[cn+4>>2]=c[a$+4>>2];c[cn+8>>2]=c[a$+8>>2];c[cn+12>>2]=c[a$+12>>2];c[cn+16>>2]=c[a$+16>>2];c[cn+20>>2]=c[a$+20>>2];c[cn+24>>2]=c[a$+24>>2];c[cn+28>>2]=c[a$+28>>2];c[cn+32>>2]=c[a$+32>>2];c[cn+36>>2]=c[a$+36>>2];c[cn+40>>2]=c[a$+40>>2];c[cn+44>>2]=c[a$+44>>2];c[cn+48>>2]=c[a$+48>>2];c[cn+52>>2]=c[a$+52>>2];c7=0;c8=c9}else{aH=bv+16|0;aL=c[aH>>2]|0;if((aL|0)!=0){if((a[aL]|0)==0){c7=0;c8=c6;break}}if((c[bv+8>>2]|0)==4){c7=0;c8=c6;break}if(!bK){if((a[36228]&1)!=0){c7=(bJ&1)!=0;c8=c6;break}}aL=a[bv+20|0]&1;do{if(aL<<24>>24!=0){if((a[37456]&1)!=0){break}a[37456]=1;ar=c[(c[3524]|0)+88>>2]|0;if((ar|0)==0){break}cO[ar&255](179864)}}while(0);a[37456]=aL;cn=bJ&1;do{if(cn<<24>>24==0){dl=c6}else{cr=c[aH>>2]|0;if((cr|0)==0){dl=c6;break}if((a[bv+22|0]&1)!=0){dl=c6;break}if((a[36230]&1)==0){dm=cr;dn=c[aT>>2]|0}else{cr=(((c[54]|0)+(c[9336]|0)|0)+((c[9020]|0)/2&-1)|0)-(c[aT>>2]|0)|0;c[aT>>2]=cr;dm=c[aH>>2]|0;dn=cr}fY(bv,dm,a4,c[aS>>2]|0,dn);dl=c6+1|0}}while(0);a[37456]=0;c7=cn<<24>>24!=0;c8=dl}}while(0);cp=bv+23|0;aH=a[cp]|0;L13316:do{if(!((aH&1)==0|bK)){aL=bv+300|0;if((c[aL>>2]|0)<=0){break}cr=bv+320|0;ar=0;aM=aH;while(1){do{if((aM&1)!=0){c[(c[cr>>2]|0)+(ar<<6)>>2]=0;bN=c[cl>>2]|0;cJ=+h[64664+(bN*688&-1)>>3];cH=+h[64672+(bN*688&-1)>>3];bN=c[cr>>2]|0;cF=+h[bN+(ar<<6)+8>>3];if(cJ<cH){if(cF<cJ|cF>cH){bt=9754}else{dp=bN}}else{if(cF<cH|cF>cJ){bt=9754}else{dp=bN}}if((bt|0)==9754){bt=0;c[bN+(ar<<6)>>2]=1;dp=c[cr>>2]|0}bN=c[ap>>2]|0;cJ=+h[64664+(bN*688&-1)>>3];cF=+h[64672+(bN*688&-1)>>3];cH=+h[dp+(ar<<6)+16>>3];if(cJ<cF){if(!(cH<cJ|cH>cF)){break}}else{if(!(cH<cF|cH>cJ)){break}}c[dp+(ar<<6)>>2]=1}}while(0);aK=ar+1|0;if((aK|0)>=(c[aL>>2]|0)){break L13316}ar=aK;aM=a[cp]|0}}}while(0);cp=bv+8|0;do{if(!((c[cp>>2]|0)==4|bK)){aH=c[aO>>2]|0;if((aH|0)==18){fZ(bv);break}else if((aH|0)==51){fX(bv);fZ(bv);break}else if((aH|0)==64){aM=bv+300|0;ar=c[aM>>2]|0;if((ar|0)<=0){break}aL=bv+320|0;cr=bv+316|0;cn=(c[3524]|0)+80|0;aK=0;bN=ar;while(1){ar=c[aL>>2]|0;if((c[ar+(aK<<6)>>2]|0)==0){co=c[200]|0;aJ=~~(+(c[64768+(co*688&-1)>>2]|0)+(+h[ar+(aK<<6)+8>>3]- +h[64664+(co*688&-1)>>3])*+h[64776+(co*688&-1)>>3]+.5);co=c[144]|0;aI=~~(+(c[64768+(co*688&-1)>>2]|0)+(+h[ar+(aK<<6)+16>>3]- +h[64664+(co*688&-1)>>3])*+h[64776+(co*688&-1)>>3]+.5);co=(c[cr>>2]|0)+(aK<<3)|0;f9(bv,co);cR[c[cn>>2]&127](aJ,aI,-1);dq=c[aM>>2]|0}else{dq=bN}aI=aK+1|0;if((aI|0)<(dq|0)){aK=aI;bN=dq}else{break}}}else if((aH|0)==295|(aH|0)==279|(aH|0)==311){fX(bv);f_(bv);fZ(bv);break}else if((aH|0)==102|(aH|0)==86|(aH|0)==118){f_(bv);fZ(bv);break}else if((aH|0)==137|(aH|0)==153){f$(bv,c[64784+((c[144]|0)*688&-1)>>2]|0);break}else if((aH|0)==392){if((c[14156]|0)==1){f$(bv,c[64784+((c[144]|0)*688&-1)>>2]|0)}do{if((c[9670]|0)==4){cK[c[(c[3524]|0)+112>>2]&63](+h[4840]);if(!(hG(49488)|0)){cM[c[(c[3524]|0)+64>>2]&511](c[cu>>2]|0)}f_(bv);c[aV>>2]=c[bm>>2];c[aV+4>>2]=c[bm+4>>2];c[aV+8>>2]=c[bm+8>>2];c[aV+12>>2]=c[bm+12>>2];bN=c[cu>>2]|0;do{if((c[aq>>2]|0)!=0){cJ=+h[bv+48>>3];aK=c[(c[3524]|0)+92>>2]|0;if(cJ<0.0){cK[aK&63](+h[3817]);break}else{cK[aK&63](cJ);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[aP>>3]);aK=c[(c[3524]|0)+64>>2]|0;if((bN|0)<-5){cM[aK&511](-2)}else{cM[aK&511](bN)}aK=c[3524]|0;if((a[cx]&1)==0){if((c[aK+96>>2]&1024|0)!=0){break}c[aW>>2]=1;c[c3>>2]=bN}fn(V,aK)}}while(0);if((c[14156]|0)==1){break}f$(bv,c[64784+((c[144]|0)*688&-1)>>2]|0);break}else if((aH|0)==33){aK=c[64784+((c[200]|0)*688&-1)>>2]|0;aM=c[64784+((c[144]|0)*688&-1)>>2]|0;cn=bv+300|0;if((c[cn>>2]|0)<=0){break}cr=bv+320|0;aL=bv+316|0;aI=0;do{aJ=c[cr>>2]|0;L13380:do{if((c[aJ+(aI<<6)>>2]|0)!=2){co=c[200]|0;do{if((a[30528]&1)==0){cJ=+h[64664+(co*688&-1)>>3];cH=+h[64672+(co*688&-1)>>3];cF=+h[aJ+(aI<<6)+8>>3];if(cJ<cH){if(cF<cJ|cF>cH){break L13380}else{dr=cF;ds=cJ;break}}else{if(cF<cH|cF>cJ){break L13380}else{dr=cF;ds=cJ;break}}}else{dr=+h[aJ+(aI<<6)+8>>3];ds=+h[64664+(co*688&-1)>>3]}}while(0);bj=~~(+(c[64768+(co*688&-1)>>2]|0)+(dr-ds)*+h[64776+(co*688&-1)>>3]+.5);cq=c[144]|0;ar=~~(+(c[64768+(cq*688&-1)>>2]|0)+(+h[aJ+(aI<<6)+16>>3]- +h[64664+(cq*688&-1)>>3])*+h[64776+(cq*688&-1)>>3]+.5);cq=(c[aL>>2]|0)+(aI<<3)|0;f9(bv,cq);if((a[30528]&1)==0){c[ac>>2]=bj;c[ad>>2]=aM;c[ae>>2]=bj;c[af>>2]=ar;cq=c[3524]|0;if((fl(ac,ad,ae,af)|0)==0){break}cN[c[cq+56>>2]&255](c[ac>>2]|0,c[ad>>2]|0);cN[c[cq+60>>2]&255](c[ae>>2]|0,c[af>>2]|0);break}else{c[ag>>2]=aK;c[ah>>2]=aM;c[ai>>2]=bj;c[aj>>2]=ar;ar=c[3524]|0;if((fl(ag,ah,ai,aj)|0)==0){break}cN[c[ar+56>>2]&255](c[ag>>2]|0,c[ah>>2]|0);cN[c[ar+60>>2]&255](c[ai>>2]|0,c[aj>>2]|0);break}}}while(0);aI=aI+1|0;}while((aI|0)<(c[cn>>2]|0))}else if((aH|0)==169){if((c[14156]|0)!=1){f_(bv)}f$(bv,c[64784+((c[144]|0)*688&-1)>>2]|0);if((c[14156]|0)!=1){break}f_(bv);break}else if((aH|0)==345){cn=bv+244|0;aI=c[cn>>2]|0;if((aI|0)==13){f0(bv);break}else if((aI|0)==10){f0(bv);break}else{aI=c[3524]|0;c[U>>2]=0;if((c[aI+148>>2]|0)==0){fX(bv)}else{aI=bv+240|0;do{if((c[aI>>2]|0)==0){aM=aI;if((c[cp>>2]|0)==1){c[aM>>2]=c[10858];c[aM+4>>2]=c[10859];c[aM+8>>2]=c[10860];c[aM+12>>2]=c[10861];c[aM+16>>2]=c[10862];c[aM+20>>2]=c[10863];c[aM+24>>2]=c[10864];c[aM+28>>2]=c[10865];break}else{c[aM>>2]=c[10850];c[aM+4>>2]=c[10851];c[aM+8>>2]=c[10852];c[aM+12>>2]=c[10853];c[aM+16>>2]=c[10854];c[aM+20>>2]=c[10855];c[aM+24>>2]=c[10856];c[aM+28>>2]=c[10857];break}}}while(0);aI=c[cn>>2]|0;do{if((aI|0)==5){aM=bv+248|0;cJ=+h[aM>>3];cF=+h[8255];if(cJ<cF){h[aM>>3]=cF;dt=cF}else{dt=cJ}cJ=+h[8256];if(dt<=cJ){break}h[aM>>3]=cJ}else if((aI|0)==7){aM=bv+248|0;cJ=+h[aM>>3];cF=+h[8599];if(cJ<cF){h[aM>>3]=cF;du=cF}else{du=cJ}cJ=+h[8600];if(du<=cJ){break}h[aM>>3]=cJ}else if((aI|0)==6){aM=bv+248|0;cJ=+h[aM>>3];cF=+h[8169];if(cJ<cF){h[aM>>3]=cF;dv=cF}else{dv=cJ}cJ=+h[8170];if(dv<=cJ){break}h[aM>>3]=cJ}else if((aI|0)==8){aM=bv+248|0;cJ=+h[aM>>3];cF=+h[8513];if(cJ<cF){h[aM>>3]=cF;dw=cF}else{dw=cJ}cJ=+h[8514];if(dw<=cJ){break}h[aM>>3]=cJ}else if((aI|0)==9){aM=bv+248|0;cJ=+h[aM>>3];cF=+h[8255];if(cJ<cF){h[aM>>3]=cF;dx=cF}else{dx=cJ}cJ=+h[8256];if(dx>cJ){h[aM>>3]=cJ}aM=bv+256|0;cJ=+h[aM>>3];cF=+h[8169];if(cJ<cF){h[aM>>3]=cF;dy=cF}else{dy=cJ}cJ=+h[8170];if(dy<=cJ){break}h[aM>>3]=cJ}}while(0);aM=bv+300|0;if((c[aM>>2]|0)>0){aK=bv+320|0;aL=bv+264|0;cr=bv+248|0;aJ=2;bN=0;ar=0;bj=0;cq=0;ch=0;cg=2;while(1){ci=c[7934]|0;if((cg|0)>=(ci|0)){cd=ci+128|0;c[7934]=cd;c[7936]=db(c[7936]|0,cd*12&-1,140784)|0}cd=c[aK>>2]|0;ci=c[cd+(ch<<6)>>2]|0;L13454:do{if((ci|0)==1){cc=(c[cn>>2]|0)==0;if(cc){bt=10021}else{if((a[54152]&1)==0){dA=bj;dB=ar}else{bt=10021}}if((bt|0)==10021){bt=0;cf=c[200]|0;ce=~~(+(c[64768+(cf*688&-1)>>2]|0)+(+h[cd+(ch<<6)+8>>3]- +h[64664+(cf*688&-1)>>3])*+h[64776+(cf*688&-1)>>3]+.5);cf=c[144]|0;ca=~~(+(c[64768+(cf*688&-1)>>2]|0)+(+h[cd+(ch<<6)+16>>3]- +h[64664+(cf*688&-1)>>3])*+h[64776+(cf*688&-1)>>3]+.5);cf=c[13542]|0;if((cf|0)==0){dC=0}else{cb=(c[cf>>2]|0)>(ce|0)&1;b8=(c[cf+4>>2]|0)<(ce|0)?cb|2:cb;cb=(c[cf+8>>2]|0)>(ca|0)?b8|4:b8;dC=(c[cf+12>>2]|0)<(ca|0)?cb|8:cb}cb=dC&3;ca=dC&12;dA=(cb|0)==0?bj:cb;dB=(ca|0)==0?ar:ca}if((aJ|0)==0){if(!((a[54160]&1)!=0|cc)){if((a[54152]&1)==0){dE=cq;dF=dA;dG=dB;dH=bN;break}}ca=gb(cd,ch,N,O)|0;cb=c[200]|0;c[(c[7936]|0)+((c[U>>2]|0)*12&-1)>>2]=~~(+(c[64768+(cb*688&-1)>>2]|0)+(+h[N>>3]- +h[64664+(cb*688&-1)>>3])*+h[64776+(cb*688&-1)>>3]+.5);cb=c[144]|0;cf=~~(+(c[64768+(cb*688&-1)>>2]|0)+(+h[O>>3]- +h[64664+(cb*688&-1)>>3])*+h[64776+(cb*688&-1)>>3]+.5);cb=c[U>>2]|0;c[U>>2]=cb+1;c[(c[7936]|0)+(cb*12&-1)+4>>2]=cf;dE=cq;dF=dA;dG=dB;dH=ca;break}else if((aJ|0)!=1){dE=cq;dF=dA;dG=dB;dH=bN;break}if(!cc){if((a[54152]&1)==0){dE=cq;dF=dA;dG=dB;dH=bN;break}}if(!(gc(cd,ch,aU,c2)|0)){dE=cq;dF=dA;dG=dB;dH=bN;break}cc=c[200]|0;cJ=+h[aU>>3];c[(c[7936]|0)+((c[U>>2]|0)*12&-1)>>2]=~~(+(c[64768+(cc*688&-1)>>2]|0)+(cJ- +h[64664+(cc*688&-1)>>3])*+h[64776+(cc*688&-1)>>3]+.5);cc=c[144]|0;cF=+h[c2>>3];ca=~~(+(c[64768+(cc*688&-1)>>2]|0)+(cF- +h[64664+(cc*688&-1)>>3])*+h[64776+(cc*688&-1)>>3]+.5);cc=c[U>>2]|0;c[U>>2]=cc+1;c[(c[7936]|0)+(cc*12&-1)+4>>2]=ca;ca=c[aK>>2]|0;cc=ca+(ch<<6)+8|0;cH=+h[cc>>3];cC=+h[ca+(ch<<6)+16>>3];cA=+h[c1>>3];h[cc>>3]=cA;cs=+h[Q>>3];h[(c[aK>>2]|0)+(ch<<6)+16>>3]=cs;cc=gb(c[aK>>2]|0,ch,N,O)|0;h[(c[aK>>2]|0)+(ch<<6)+8>>3]=cH;h[(c[aK>>2]|0)+(ch<<6)+16>>3]=cC;do{if((bN|0)==0){dI=cc}else{if((cc|0)==(bN|0)){dI=cq;break}gi(c[7936]|0,U,bN,cc,dB,dA);dI=cq}}while(0);cc=c[200]|0;c[(c[7936]|0)+((c[U>>2]|0)*12&-1)>>2]=~~(+(c[64768+(cc*688&-1)>>2]|0)+(cA- +h[64664+(cc*688&-1)>>3])*+h[64776+(cc*688&-1)>>3]+.5);cc=c[144]|0;co=~~(+(c[64768+(cc*688&-1)>>2]|0)+(cs- +h[64664+(cc*688&-1)>>3])*+h[64776+(cc*688&-1)>>3]+.5);cc=c[U>>2]|0;c[U>>2]=cc+1;c[(c[7936]|0)+(cc*12&-1)+4>>2]=co;co=ch-1|0;cc=c[aK>>2]|0;ca=cc+(co<<6)+8|0;cC=+h[ca>>3];cH=+h[cc+(co<<6)+16>>3];h[ca>>3]=cJ;h[(c[aK>>2]|0)+(co<<6)+16>>3]=cF;ca=gb(c[aK>>2]|0,ch,N,O)|0;h[(c[aK>>2]|0)+(co<<6)+8>>3]=cC;h[(c[aK>>2]|0)+(co<<6)+16>>3]=cH;dE=dI;dF=dA;dG=dB;dH=ca}else if((ci|0)==2){if((aJ|0)==2){dE=cq;dF=bj;dG=ar;dH=bN;break}if(!((cq|0)==0|(cq|0)==(bN|0))){gi(c[7936]|0,U,bN,cq,ar,bj)}gj(c[U>>2]|0,c[7936]|0,bv);c[U>>2]=0;dE=0;dF=bj;dG=ar;dH=0}else if((ci|0)==0){ca=c[200]|0;cH=+(c[64768+(ca*688&-1)>>2]|0);cC=+h[cd+(ch<<6)+8>>3];bE=+h[64664+(ca*688&-1)>>3];ct=+h[64776+(ca*688&-1)>>3];ca=~~(cH+(cC-bE)*ct+.5);co=c[144]|0;bD=+h[cd+(ch<<6)+16>>3];cc=~~(+(c[64768+(co*688&-1)>>2]|0)+(bD- +h[64664+(co*688&-1)>>3])*+h[64776+(co*688&-1)>>3]+.5);if((aJ|0)==0){do{if((c[aL>>2]|0)!=0){co=c[cn>>2]|0;if((co|0)==5|(co|0)==7){be=+h[cr>>3];cf=ch-1|0;bd=be- +h[cd+(cf<<6)+8>>3];bg=be-cC;if(bg*bd>=0.0){break}bf=+h[cd+(cf<<6)+16>>3];h[N>>3]=be;dJ=bf+bd*(bD-bf)/(bd-bg);dK=be}else if((co|0)==6|(co|0)==8){be=+h[cr>>3];co=ch-1|0;bg=be- +h[cd+(co<<6)+16>>3];bd=be-bD;bf=+h[cd+(co<<6)+8>>3];if(bd*bg>=0.0){break}a7=bf+bg*(cC-bf)/(bg-bd);h[N>>3]=a7;dJ=be;dK=a7}else{break}h[O>>3]=dJ;c[(c[7936]|0)+((c[U>>2]|0)*12&-1)>>2]=~~(cH+ct*(dK-bE)+.5);co=c[144]|0;cf=~~(+(c[64768+(co*688&-1)>>2]|0)+(dJ- +h[64664+(co*688&-1)>>3])*+h[64776+(co*688&-1)>>3]+.5);co=c[U>>2]|0;c[U>>2]=co+1;c[(c[7936]|0)+(co*12&-1)+4>>2]=cf;gj(c[U>>2]|0,c[7936]|0,bv);c[U>>2]=0;cf=c[200]|0;c[c[7936]>>2]=~~(+(c[64768+(cf*688&-1)>>2]|0)+(dK- +h[64664+(cf*688&-1)>>3])*+h[64776+(cf*688&-1)>>3]+.5);cf=c[144]|0;co=~~(+(c[64768+(cf*688&-1)>>2]|0)+(dJ- +h[64664+(cf*688&-1)>>3])*+h[64776+(cf*688&-1)>>3]+.5);cf=c[U>>2]|0;c[U>>2]=cf+1;c[(c[7936]|0)+(cf*12&-1)+4>>2]=co}}while(0);c[(c[7936]|0)+((c[U>>2]|0)*12&-1)>>2]=ca;co=c[U>>2]|0;c[U>>2]=co+1;c[(c[7936]|0)+(co*12&-1)+4>>2]=cc;dE=cq;dF=bj;dG=ar;dH=bN;break}else if((aJ|0)==1){do{if((c[cn>>2]|0)!=0){if((a[54152]&1)!=0){break}co=(a[54160]&1)==0;gj(c[U>>2]|0,c[7936]|0,bv);c[U>>2]=0;if(co){c[c[7936]>>2]=ca;co=c[U>>2]|0;c[U>>2]=co+1;c[(c[7936]|0)+(co*12&-1)+4>>2]=cc;dE=cq;dF=bj;dG=ar;dH=bN;break L13454}else{co=c[aK>>2]|0;gb(co,ch,N,O);co=c[200]|0;c[(c[7936]|0)+((c[U>>2]|0)*12&-1)>>2]=~~(+(c[64768+(co*688&-1)>>2]|0)+(+h[N>>3]- +h[64664+(co*688&-1)>>3])*+h[64776+(co*688&-1)>>3]+.5);co=c[144]|0;cf=~~(+(c[64768+(co*688&-1)>>2]|0)+(+h[O>>3]- +h[64664+(co*688&-1)>>3])*+h[64776+(co*688&-1)>>3]+.5);co=c[U>>2]|0;c[U>>2]=co+1;c[(c[7936]|0)+(co*12&-1)+4>>2]=cf;c[(c[7936]|0)+((c[U>>2]|0)*12&-1)>>2]=ca;cf=c[U>>2]|0;c[U>>2]=cf+1;c[(c[7936]|0)+(cf*12&-1)+4>>2]=cc;dE=cq;dF=bj;dG=ar;dH=bN;break L13454}}}while(0);cf=gb(cd,ch,N,O)|0;do{if((bN|0)==0){dL=cf}else{if((cf|0)==(bN|0)){dL=cq;break}gi(c[7936]|0,U,bN,cf,ar,bj);dL=cq}}while(0);cf=c[200]|0;c[(c[7936]|0)+((c[U>>2]|0)*12&-1)>>2]=~~(+(c[64768+(cf*688&-1)>>2]|0)+(+h[N>>3]- +h[64664+(cf*688&-1)>>3])*+h[64776+(cf*688&-1)>>3]+.5);cf=c[144]|0;co=~~(+(c[64768+(cf*688&-1)>>2]|0)+(+h[O>>3]- +h[64664+(cf*688&-1)>>3])*+h[64776+(cf*688&-1)>>3]+.5);cf=c[U>>2]|0;c[U>>2]=cf+1;c[(c[7936]|0)+(cf*12&-1)+4>>2]=co;c[(c[7936]|0)+((c[U>>2]|0)*12&-1)>>2]=ca;co=c[U>>2]|0;c[U>>2]=co+1;c[(c[7936]|0)+(co*12&-1)+4>>2]=cc;dE=dL;dF=bj;dG=ar;dH=bN;break}else{gj(c[U>>2]|0,c[7936]|0,bv);c[U>>2]=0;c[c[7936]>>2]=ca;co=c[U>>2]|0;c[U>>2]=co+1;c[(c[7936]|0)+(co*12&-1)+4>>2]=cc;c[(c[7936]|0)+((c[U>>2]|0)*12&-1)>>2]=ca;co=c[U>>2]|0;c[U>>2]=co+1;c[(c[7936]|0)+(co*12&-1)+4>>2]=cc;dE=cq;dF=bj;dG=ar;dH=bN;break}}else{dE=cq;dF=bj;dG=ar;dH=bN}}while(0);cd=ch+1|0;if((cd|0)>=(c[aM>>2]|0)){break}aJ=c[(c[aK>>2]|0)+(ch<<6)>>2]|0;bN=dH;ar=dG;bj=dF;cq=dE;ch=cd;cg=(c[U>>2]|0)+2|0}dM=dH;dN=dG;dO=dF;dP=dE;dQ=c[cn>>2]|0}else{dM=0;dN=0;dO=0;dP=0;dQ=aI}if((dQ|0)==0){if(!((dP|0)==0|(dP|0)==(dM|0))){bt=10045}}else{if(!((a[54152]&1)==0|(dP|0)==0|(dP|0)==(dM|0))){bt=10045}}if((bt|0)==10045){bt=0;gi(c[7936]|0,U,dM,dP,dN,dO)}gj(c[U>>2]|0,c[7936]|0,bv)}if(!(hG(bv+192|0)|0)){break}fX(bv);break}}else if((aH|0)==193){cg=c[3524]|0;ch=bv+300|0;if((c[ch>>2]|0)<=0){break}cq=bv+320|0;bj=cg+56|0;ar=cg+60|0;cg=0;bN=0;aK=0;aJ=2;aM=c[cq>>2]|0;while(1){cr=c[aM+(aK<<6)>>2]|0;if((cr|0)==0){aL=c[200]|0;cd=~~(+(c[64768+(aL*688&-1)>>2]|0)+(+h[aM+(aK<<6)+8>>3]- +h[64664+(aL*688&-1)>>3])*+h[64776+(aL*688&-1)>>3]+.5);aL=c[144]|0;ci=~~(+(c[64768+(aL*688&-1)>>2]|0)+(+h[aM+(aK<<6)+16>>3]- +h[64664+(aL*688&-1)>>3])*+h[64776+(aL*688&-1)>>3]+.5);do{if((aJ|0)==0){cN[c[ar>>2]&255](cg,ci);cN[c[ar>>2]&255](cd,ci)}else if((aJ|0)==1){if((a[54160]&1)==0){break}gf(aM,aK,Y,Z);aL=c[200]|0;co=~~(+(c[64768+(aL*688&-1)>>2]|0)+(+h[Y>>3]- +h[64664+(aL*688&-1)>>3])*+h[64776+(aL*688&-1)>>3]+.5);aL=c[144]|0;cN[c[bj>>2]&255](co,~~(+(c[64768+(aL*688&-1)>>2]|0)+(+h[Z>>3]- +h[64664+(aL*688&-1)>>3])*+h[64776+(aL*688&-1)>>3]+.5));cN[c[ar>>2]&255](co,ci);cN[c[ar>>2]&255](cd,ci)}}while(0);cN[c[bj>>2]&255](cd,ci);dR=ci;dS=cd}else if((cr|0)==1){L13532:do{if((aJ|0)==0){if((a[54160]&1)==0){dT=bN;dU=cg;break}gf(aM,aK,Y,Z);co=c[200]|0;aL=~~(+(c[64768+(co*688&-1)>>2]|0)+(+h[Y>>3]- +h[64664+(co*688&-1)>>3])*+h[64776+(co*688&-1)>>3]+.5);co=c[144]|0;cf=~~(+(c[64768+(co*688&-1)>>2]|0)+(+h[Z>>3]- +h[64664+(co*688&-1)>>3])*+h[64776+(co*688&-1)>>3]+.5);cN[c[ar>>2]&255](cg,cf);cN[c[ar>>2]&255](aL,cf);dT=cf;dU=aL}else if((aJ|0)==1){if((a[54152]&1)==0){dT=bN;dU=cg;break}aL=aK-1|0;bE=+h[aM+(aL<<6)+8>>3];ct=+h[aM+(aL<<6)+16>>3];cH=+h[aM+(aK<<6)+8>>3];cC=+h[aM+(aK<<6)+16>>3];aL=c[200]|0;bD=+h[64664+(aL*688&-1)>>3];if((bE>cH?bE:cH)<bD){dT=bN;dU=cg;break}cF=+h[64672+(aL*688&-1)>>3];if((bE<cH?bE:cH)>cF){dT=bN;dU=cg;break}cf=c[144]|0;cJ=+h[64664+(cf*688&-1)>>3];if((ct>cC?ct:cC)<cJ){dT=bN;dU=cg;break}cs=+h[64672+(cf*688&-1)>>3];if((ct<cC?ct:cC)>cs){dT=bN;dU=cg;break}co=cJ<cs;if(co){if(cC<cJ|cC>cs){bt=9876}else{bt=9880}}else{if(cC<cs|cC>cJ){bt=9876}else{bt=9881}}if((bt|0)==9876){bt=0;if(bD<cF){if(bE<bD|bE>cF){dT=bN;dU=cg;break}}else{if(bE<cF|bE>bD){dT=bN;dU=cg;break}}if(co){bt=9880}else{bt=9881}}if((bt|0)==9880){bt=0;if(cC<cJ|cC>cs){bt=9900}else{bt=9882}}else if((bt|0)==9881){bt=0;if(cC<cs|cC>cJ){bt=9901}else{bt=9882}}do{if((bt|0)==9882){bt=0;cb=bD<cF;if(cb){if(bE<bD|bE>cF){bt=9899}}else{if(bE<cF|bE>bD){bt=9899}}if((bt|0)==9899){bt=0;if(co){bt=9900;break}else{bt=9901;break}}do{if(co){if(ct>cs){dV=cs;break}if(ct>=cJ){dV=ct;break}dV=cJ}else{if(ct>cJ){dV=cJ;break}if(ct>=cs){dV=ct;break}dV=cs}}while(0);if(cb){if(cH>cF){dW=dV;dX=cC;dY=bE;dZ=cF;break}if(cH>=bD){dW=dV;dX=cC;dY=bE;dZ=cH;break}dW=dV;dX=cC;dY=bE;dZ=bD;break}else{if(cH>bD){dW=dV;dX=cC;dY=bE;dZ=bD;break}if(cH>=cF){dW=dV;dX=cC;dY=bE;dZ=cH;break}dW=dV;dX=cC;dY=bE;dZ=cF;break}}}while(0);if((bt|0)==9900){bt=0;if(cC<cJ|cC>cs){bt=9902}else{dW=cC;dX=cC;dY=bD;dZ=cF}}else if((bt|0)==9901){bt=0;if(cC<cs|cC>cJ){bt=9902}else{dW=cC;dX=cC;dY=bD;dZ=cF}}do{if((bt|0)==9902){bt=0;if(bD<cF){if(bE<bD|bE>cF){dT=bN;dU=cg;break L13532}else{dW=cJ;dX=cs;dY=bE;dZ=bE;break}}else{if(bE<cF|bE>bD){dT=bN;dU=cg;break L13532}else{dW=cJ;dX=cs;dY=bE;dZ=bE;break}}}}while(0);bE=+(c[64768+(aL*688&-1)>>2]|0);cs=+h[64776+(aL*688&-1)>>3];co=~~(bE+(dY-bD)*cs+.5);cF=+(c[64768+(cf*688&-1)>>2]|0);cC=+h[64776+(cf*688&-1)>>3];cc=~~(bE+(dZ-bD)*cs+.5);ca=~~(cF+(dX-cJ)*cC+.5);cN[c[bj>>2]&255](co,~~(cF+(dW-cJ)*cC+.5));cN[c[ar>>2]&255](co,ca);cN[c[ar>>2]&255](cc,ca);dT=ca;dU=cc}else{dT=bN;dU=cg}}while(0);cN[c[bj>>2]&255](dU,dT);dR=dT;dS=dU}else{dR=bN;dS=cg}cr=c[cq>>2]|0;cd=c[cr+(aK<<6)>>2]|0;ci=aK+1|0;if((ci|0)<(c[ch>>2]|0)){cg=dS;bN=dR;aK=ci;aJ=cd;aM=cr}else{break}}}else if((aH|0)==1){fX(bv);break}else if((aH|0)==177|(aH|0)==184){aM=c[3524]|0;do{if((aH&8|0)==0){d_=0;d$=0}else{if((c[aM+108>>2]|0)==0){d_=0;d$=0;break}aJ=c[bv+192>>2]|0;if((aJ|0)==1|(aJ|0)==4){d0=(c[bv+196>>2]<<4&65520)+aJ|0}else if((aJ|0)==2|(aJ|0)==5){d0=(c[bv+200>>2]<<4&65520)+aJ|0}else{d0=0}aJ=c[144]|0;do{if((a[64788+(aJ*688&-1)|0]&1)==0){h[ab>>3]=0.0;cC=+h[64664+(aJ*688&-1)>>3];cF=+h[64672+(aJ*688&-1)>>3];if(cC<cF){if(cF<0.0){h[ab>>3]=cF;d1=cF;d2=cC;break}if(cC<=0.0){d1=0.0;d2=cC;break}h[ab>>3]=cC;d1=cC;d2=cC;break}else{if(cC<0.0){h[ab>>3]=cC;d1=cC;d2=cC;break}if(cF<=0.0){d1=0.0;d2=cC;break}h[ab>>3]=cF;d1=cF;d2=cC;break}}else{cC=+h[64664+(aJ*688&-1)>>3];h[ab>>3]=cC;d1=cC;d2=cC}}while(0);d_=d0;d$=~~(+(c[64768+(aJ*688&-1)>>2]|0)+(d1-d2)*+h[64776+(aJ*688&-1)>>3]+.5)}}while(0);aK=bv+300|0;if((c[aK>>2]|0)<=0){break}bN=bv+320|0;cg=aM+56|0;ch=(d_|0)==0;cq=aM+60|0;bj=aM+108|0;ar=0;aI=0;cn=0;cr=2;cd=c[bN>>2]|0;while(1){ci=c[cd+(cn<<6)>>2]|0;if((ci|0)==1){L13617:do{if((cr|0)==0){if((a[54160]&1)==0){d3=aI;d4=ar;break}gg(cd,cn,$,ab);cc=c[200]|0;ca=~~(+(c[64768+(cc*688&-1)>>2]|0)+(+h[$>>3]- +h[64664+(cc*688&-1)>>3])*+h[64776+(cc*688&-1)>>3]+.5);cc=c[144]|0;co=~~(+(c[64768+(cc*688&-1)>>2]|0)+(+h[ab>>3]- +h[64664+(cc*688&-1)>>3])*+h[64776+(cc*688&-1)>>3]+.5);if(ch){cN[c[cq>>2]&255](ca,aI);cN[c[cq>>2]&255](ca,co);d3=co;d4=ca;break}else{cI[c[bj>>2]&63](d_,ar,d$,ca-ar|0,aI-d$|0);d3=co;d4=ca;break}}else if((cr|0)==1){if((a[54152]&1)==0){d3=aI;d4=ar;break}ca=cn-1|0;cC=+h[cd+(ca<<6)+8>>3];cF=+h[cd+(ca<<6)+16>>3];cs=+h[cd+(cn<<6)+8>>3];bE=+h[cd+(cn<<6)+16>>3];ca=c[200]|0;cH=+h[64664+(ca*688&-1)>>3];if((cC>cs?cC:cs)<cH){d3=aI;d4=ar;break}ct=+h[64672+(ca*688&-1)>>3];if((cC<cs?cC:cs)>ct){d3=aI;d4=ar;break}co=c[144]|0;cA=+h[64664+(co*688&-1)>>3];if((cF>bE?cF:bE)<cA){d3=aI;d4=ar;break}a7=+h[64672+(co*688&-1)>>3];if((cF<bE?cF:bE)>a7){d3=aI;d4=ar;break}cc=cA<a7;if(cc){if(cF<cA|cF>a7){bt=9824}else{bt=9828}}else{if(cF<a7|cF>cA){bt=9824}else{bt=9829}}if((bt|0)==9824){bt=0;if(cH<ct){if(cs<cH|cs>ct){d3=aI;d4=ar;break}}else{if(cs<ct|cs>cH){d3=aI;d4=ar;break}}if(cc){bt=9828}else{bt=9829}}if((bt|0)==9828){bt=0;if(cF<cA|cF>a7){bt=9847}else{bt=9830}}else if((bt|0)==9829){bt=0;if(cF<a7|cF>cA){bt=9848}else{bt=9830}}do{if((bt|0)==9830){bt=0;do{if(cH<ct){if(cs<cH|cs>ct){bt=9846;break}if(cC>ct){d5=ct;break}if(cC>=cH){d5=cC;break}d5=cH}else{if(cs<ct|cs>cH){bt=9846;break}if(cC>cH){d5=cH;break}if(cC>=ct){d5=cC;break}d5=ct}}while(0);if((bt|0)==9846){bt=0;if(cc){bt=9847;break}else{bt=9848;break}}if(cc){if(bE>a7){d6=cF;d7=a7;d8=d5;d9=cs;break}if(bE>=cA){d6=cF;d7=bE;d8=d5;d9=cs;break}d6=cF;d7=cA;d8=d5;d9=cs;break}else{if(bE>cA){d6=cF;d7=cA;d8=d5;d9=cs;break}if(bE>=a7){d6=cF;d7=bE;d8=d5;d9=cs;break}d6=cF;d7=a7;d8=d5;d9=cs;break}}}while(0);if((bt|0)==9847){bt=0;if(cF<cA|cF>a7){bt=9849}else{d6=cF;d7=cF;d8=cH;d9=ct}}else if((bt|0)==9848){bt=0;if(cF<a7|cF>cA){bt=9849}else{d6=cF;d7=cF;d8=cH;d9=ct}}do{if((bt|0)==9849){bt=0;if(cH<ct){if(cC<cH|cC>ct){d3=aI;d4=ar;break L13617}else{d6=cA;d7=a7;d8=cs;d9=cs;break}}else{if(cC<ct|cC>cH){d3=aI;d4=ar;break L13617}else{d6=cA;d7=a7;d8=cs;d9=cs;break}}}}while(0);cs=+(c[64768+(ca*688&-1)>>2]|0);a7=+h[64776+(ca*688&-1)>>3];cc=~~(cs+(d8-cH)*a7+.5);cC=+(c[64768+(co*688&-1)>>2]|0);ct=+h[64776+(co*688&-1)>>3];cf=~~(cC+(d6-cA)*ct+.5);aL=~~(cs+(d9-cH)*a7+.5);cb=~~(cC+(d7-cA)*ct+.5);if(ch){cN[c[cg>>2]&255](cc,cf);cN[c[cq>>2]&255](aL,cf);cN[c[cq>>2]&255](aL,cb);d3=cb;d4=aL;break}else{cI[c[bj>>2]&63](d_,cc,d$,aL-cc|0,cf-d$|0);d3=cb;d4=aL;break}}else{d3=aI;d4=ar}}while(0);cN[c[cg>>2]&255](d4,d3);ea=d3;eb=d4}else if((ci|0)==0){aJ=c[200]|0;aL=~~(+(c[64768+(aJ*688&-1)>>2]|0)+(+h[cd+(cn<<6)+8>>3]- +h[64664+(aJ*688&-1)>>3])*+h[64776+(aJ*688&-1)>>3]+.5);aJ=c[144]|0;cb=~~(+(c[64768+(aJ*688&-1)>>2]|0)+(+h[cd+(cn<<6)+16>>3]- +h[64664+(aJ*688&-1)>>3])*+h[64776+(aJ*688&-1)>>3]+.5);do{if((cr|0)==1){if((a[54160]&1)==0){break}gg(cd,cn,$,ab);aJ=c[200]|0;cf=~~(+(c[64768+(aJ*688&-1)>>2]|0)+(+h[$>>3]- +h[64664+(aJ*688&-1)>>3])*+h[64776+(aJ*688&-1)>>3]+.5);aJ=c[144]|0;cc=~~(+(c[64768+(aJ*688&-1)>>2]|0)+(+h[ab>>3]- +h[64664+(aJ*688&-1)>>3])*+h[64776+(aJ*688&-1)>>3]+.5);if(ch){cN[c[cg>>2]&255](cf,cc);cN[c[cq>>2]&255](aL,cc);cN[c[cq>>2]&255](aL,cb);break}aJ=cc-d$|0;b8=c[bj>>2]|0;ce=aL-cf|0;if((aJ|0)<0){cI[b8&63](d_,cf,cc,ce,d$-cc|0);break}else{cI[b8&63](d_,cf,d$,ce,aJ);break}}else if((cr|0)==0){if(ch){cN[c[cq>>2]&255](aL,aI);cN[c[cq>>2]&255](aL,cb);break}aJ=aI-d$|0;ce=c[bj>>2]|0;cf=aL-ar|0;if((aJ|0)<0){cI[ce&63](d_,ar,aI,cf,d$-aI|0);break}else{cI[ce&63](d_,ar,d$,cf,aJ);break}}}while(0);cN[c[cg>>2]&255](aL,cb);ea=cb;eb=aL}else{ea=aI;eb=ar}ci=c[bN>>2]|0;aJ=c[ci+(cn<<6)>>2]|0;cf=cn+1|0;if((cf|0)<(c[aK>>2]|0)){ar=eb;aI=ea;cn=cf;cr=aJ;cd=ci}else{break}}}else if((aH|0)==225){cd=c[3524]|0;cr=c[bv+88>>2]|0;cn=c[bv+92>>2]|0;ct=+h[bv+104>>3];cC=+h[bv+112>>3];aI=a[bv+120|0]|0;uD(c_|0,bv+121|0,23);ar=c[bv+144>>2]|0;a7=+h[bv+152>>3];aK=c[bv+160>>2]|0;cs=+h[bv+168>>3];cF=+h[bv+176>>3];bN=c[bv+184>>2]|0;uD(cv|0,ck|0,16);do{if((cr|0)!=0){cg=c[cd+92>>2]|0;if(cC<0.0){cK[cg&63](+h[3817]);break}else{cK[cg&63](cC);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](ct);cr=c[(c[3524]|0)+64>>2]|0;if((cn|0)<-5){cM[cr&511](-2)}else{cM[cr&511](cn)}cr=c[3524]|0;do{if((aI&1)==0){if((c[cr+96>>2]&1024|0)!=0){break}c[M>>2]=1;c[cV>>2]=cn;bt=10059}else{bt=10059}}while(0);if((bt|0)==10059){bt=0;fn(I,cr)}c[12912]=bN;c[12910]=0;if(a7>0.0){uE(bh|0,0,40);c[bo>>2]=2;c[bL>>2]=2;h[bi>>3]=a7;c[aB>>2]=aK;fN(H,F,G,123984);h[6458]=cs;h[6457]=cF;c[12910]=~~+h[F>>3]}cn=bv+300|0;if((c[cn>>2]|0)<=0){break}aI=bv+320|0;cg=bv+80|0;bj=bv+316|0;cq=cd+84|0;ch=ar;aM=0;while(1){ci=c[aI>>2]|0;uD(R|0,ci+(aM<<6)|0,64);aJ=c[c$>>2]|0;L13717:do{if((aJ|0)==2){ec=ch}else{ct=+h[ci+(aM<<6)+56>>3];h[ao>>3]=ct;cC=+h[ci+(aM<<6)+40>>3];h[an>>3]=cC;do{if((c[cg>>2]|0)==-3){cf=~~+h[ci+(aM<<6)+24>>3];ce=43296;while(1){ed=c[ce>>2]|0;if((ed|0)==0){bt=10069;break}if((c[ed+4>>2]|0)==(cf|0)){bt=10070;break}else{ce=ed|0}}do{if((bt|0)==10069){bt=0;uD(c_|0,51521,23);uh(-1,79128,(v=i,i=i+8|0,c[v>>2]=cf,v)|0);uD(cL|0,ck|0,16);ee=0;ef=90.0;eg=15.0;eh=0;ei=0.0;ej=1;ek=0;el=1.0;em=-2}else if((bt|0)==10070){bt=0;ce=c[ed+16>>2]|0;b8=c[ed+20>>2]|0;bE=+h[ed+32>>3];cJ=+h[ed+40>>3];cc=a[ed+48|0]|0;uD(c_|0,ed+49|0,23);b9=c[ed+72>>2]|0;bD=+h[ed+80>>3];b7=c[ed+88>>2]|0;be=+h[ed+96>>3];bd=+h[ed+104>>3];b4=c[ed+112>>2]|0;uD(cL|0,ck|0,16);if((ce|0)==0){ee=b4;ef=bd;eg=be;eh=b7;ei=bD;ej=b9;ek=cc;el=bE;em=b8;break}ce=c[(c[3524]|0)+92>>2]|0;if(cJ<0.0){cK[ce&63](+h[3817]);ee=b4;ef=bd;eg=be;eh=b7;ei=bD;ej=b9;ek=cc;el=bE;em=b8;break}else{cK[ce&63](cJ);ee=b4;ef=bd;eg=be;eh=b7;ei=bD;ej=b9;ek=cc;el=bE;em=b8;break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](el);cf=c[(c[3524]|0)+64>>2]|0;if((em|0)<-5){cM[cf&511](-2)}else{cM[cf&511](em)}cf=c[3524]|0;do{if((ek&1)==0){if((c[cf+96>>2]&1024|0)!=0){break}c[cj>>2]=1;c[cY>>2]=em;bt=10080}else{bt=10080}}while(0);if((bt|0)==10080){bt=0;fn(E,cf)}c[12912]=ee;c[12910]=0;if(ei<=0.0){en=ej;break}uE(bn|0,0,40);c[cZ>>2]=2;c[by>>2]=2;h[cX>>3]=ei;c[cB>>2]=eh;fN(D,B,C,123984);h[6458]=eg;h[6457]=ef;c[12910]=~~+h[B>>3];en=ej}else{en=ch}}while(0);co=(c[bj>>2]|0)+(aM<<3)|0;f9(bv,co);co=c[200]|0;cA=+h[64664+(co*688&-1)>>3];cH=+h[64672+(co*688&-1)>>3];if(cA<cH){if(!(ct<cA|ct>cH)){bt=10086}}else{if(!(ct<cH|ct>cA)){bt=10086}}do{if((bt|0)==10086){bt=0;ca=c[144]|0;cH=+h[64664+(ca*688&-1)>>3];bE=+h[64672+(ca*688&-1)>>3];if(cH<bE){if(cC<cH|cC>bE){break}}else{if(cC<bE|cC>cH){break}}c[cz>>2]=0;bE=+(c[64768+(co*688&-1)>>2]|0);bD=+h[64776+(co*688&-1)>>3];b8=~~(bE+(ct-cA)*bD+.5);be=+(c[64768+(ca*688&-1)>>2]|0);bd=+h[64776+(ca*688&-1)>>3];ca=~~(be+(cC-cH)*bd+.5);if((aJ|0)==0){cI[c[cq>>2]&63](~~(bE+bD*(+h[cD>>3]-cA)+.5),~~(be+bd*(+h[bI>>3]-cH)+.5),b8,ca,en);ec=en;break L13717}else if((aJ|0)!=1){ec=en;break L13717}if((a[54160]&1)==0){ec=en;break L13717}gb(c0,1,K,L);cc=c[200]|0;b9=~~(+(c[64768+(cc*688&-1)>>2]|0)+(+h[K>>3]- +h[64664+(cc*688&-1)>>3])*+h[64776+(cc*688&-1)>>3]+.5);cc=c[144]|0;b7=~~(+(c[64768+(cc*688&-1)>>2]|0)+(+h[L>>3]- +h[64664+(cc*688&-1)>>3])*+h[64776+(cc*688&-1)>>3]+.5);cc=c[cq>>2]|0;if((en&1|0)==0){cI[cc&63](b9,b7,b8,ca,0);ec=en;break L13717}else{cI[cc&63](b9,b7,b8,ca,1);ec=en;break L13717}}}while(0);c[cz>>2]=1;if((aJ|0)==1){if((a[54152]&1)==0){ec=en;break}if(!(gc(c0,1,aU,c2)|0)){ec=en;break}ca=c[200]|0;cC=+(c[64768+(ca*688&-1)>>2]|0);ct=+h[64664+(ca*688&-1)>>3];cH=+h[64776+(ca*688&-1)>>3];ca=c[144]|0;bd=+(c[64768+(ca*688&-1)>>2]|0);be=+h[64664+(ca*688&-1)>>3];bD=+h[64776+(ca*688&-1)>>3];cI[c[cq>>2]&63](~~(cC+(+h[aU>>3]-ct)*cH+.5),~~(bd+(+h[c2>>3]-be)*bD+.5),~~(cC+cH*(+h[c1>>3]-ct)+.5),~~(bd+bD*(+h[Q>>3]-be)+.5),0);ec=en;break}else if((aJ|0)!=0){ec=en;break}if((a[54160]&1)==0){ec=en;break}ca=~~(+(c[64768+(co*688&-1)>>2]|0)+(+h[cD>>3]-cA)*+h[64776+(co*688&-1)>>3]+.5);b8=c[144]|0;b7=~~(+(c[64768+(b8*688&-1)>>2]|0)+(+h[bI>>3]- +h[64664+(b8*688&-1)>>3])*+h[64776+(b8*688&-1)>>3]+.5);gb(c0,1,K,L);b8=c[200]|0;b9=~~(+(c[64768+(b8*688&-1)>>2]|0)+(+h[K>>3]- +h[64664+(b8*688&-1)>>3])*+h[64776+(b8*688&-1)>>3]+.5);b8=c[144]|0;cc=~~(+(c[64768+(b8*688&-1)>>2]|0)+(+h[L>>3]- +h[64664+(b8*688&-1)>>3])*+h[64776+(b8*688&-1)>>3]+.5);b8=c[cq>>2]|0;if((en&2|0)==0){cI[b8&63](ca,b7,b9,cc,0);ec=en;break}else{cI[b8&63](b9,cc,ca,b7,2);ec=en;break}}}while(0);aJ=aM+1|0;if((aJ|0)<(c[cn>>2]|0)){ch=ec;aM=aJ}else{break}}}else if((aH|0)==209){aM=c[3524]|0;ch=bv+300|0;cn=c[ch>>2]|0;if((cn|0)<=0){break}cq=bv+320|0;bj=c[cq>>2]|0;cg=0;aI=0;do{aI=((c[bj+(cg<<6)>>2]|0)>>>0<2&1)+aI|0;cg=cg+1|0;}while((cg|0)<(cn|0));if((aI|0)<2){break}cn=aI<<2;cg=ut(cn)|0;if((cg|0)==0){gk();bj=ut(cn)|0;if((bj|0)==0){bt=9914;break L13212}else{eo=bj}}else{eo=cg}cg=eo;bj=c[ch>>2]|0;if((bj|0)>0){cn=0;ar=0;cd=bj;while(1){if((c[(c[cq>>2]|0)+(cn<<6)>>2]|0)>>>0<2){c[cg+(ar<<2)>>2]=cn;ep=ar+1|0;eq=c[ch>>2]|0}else{ep=ar;eq=cd}bj=cn+1|0;if((bj|0)<(eq|0)){cn=bj;ar=ep;cd=eq}else{er=ep;break}}}else{er=0}c[9732]=bv;bM(eo|0,er|0,4,30);c[9732]=0;cd=c[144]|0;cF=+h[64664+(cd*688&-1)>>3];if((a[64788+(cd*688&-1)|0]&1)==0){es=0.0}else{cs=+h[64672+(cd*688&-1)>>3];es=cF<cs?cF:cs}ar=c[cg>>2]|0;cn=c[cq>>2]|0;cs=(+h[cn+(ar<<6)+8>>3]*3.0- +h[cn+(c[eo+4>>2]<<6)+8>>3])*.5;ch=c[200]|0;aI=~~(+(c[64768+(ch*688&-1)>>2]|0)+(cs- +h[64664+(ch*688&-1)>>3])*+h[64776+(ch*688&-1)>>3]+.5);c[W>>2]=aI;ch=~~(+(c[64768+(cd*688&-1)>>2]|0)+(es-cF)*+h[64776+(cd*688&-1)>>3]+.5);c[X>>2]=ch;cd=c[13542]|0;if((cd|0)==0){bt=9923}else{bj=(c[cd>>2]|0)>(aI|0)&1;aK=(c[cd+4>>2]|0)<(aI|0)?bj|2:bj;bj=(c[cd+8>>2]|0)>(ch|0)?aK|4:aK;if((((c[cd+12>>2]|0)<(ch|0)?bj|8:bj)|0)==0){bt=9923}else{et=ar;eu=cn}}if((bt|0)==9923){bt=0;cN[c[aM+56>>2]&255](aI,ch);et=c[cg>>2]|0;eu=c[cq>>2]|0}ch=er-1|0;cF=+h[eu+(et<<6)+16>>3];if((ch|0)>0){a7=cs;be=es;aI=1;cn=et;ar=eu;bD=cF;while(1){ev=(a[64788+((c[144]|0)*688&-1)|0]&1)!=0&bD<es?es:bD;bj=cg+(aI<<2)|0;ew=(+h[ar+(cn<<6)+8>>3]+ +h[ar+(c[bj>>2]<<6)+8>>3])*.5;gd(W,X,a7,be,ev);ge(W,X,a7,ew,ev);ex=c[bj>>2]|0;ey=c[cq>>2]|0;ez=+h[ey+(ex<<6)+16>>3];if((aI|0)>=(ch|0)){break}a7=ew;be=ev;aI=aI+1|0;cn=ex;ar=ey;bD=ez}eA=ew;eB=ev;eC=er-2|0;eD=ex;eE=ey;eF=ez}else{eA=cs;eB=es;eC=-1;eD=et;eE=eu;eF=cF}bD=(+h[eE+(eD<<6)+8>>3]*3.0- +h[eE+(c[cg+(eC<<2)>>2]<<6)+8>>3])*.5;gd(W,X,eA,eB,eF);ge(W,X,eA,bD,eF);gd(W,X,bD,eF,es);uu(eo);break}else if((aH|0)==257){f1(bv);break}else if((aH|0)==252){f2(bv);break}else if((aH|0)==474){ar=bv+320|0;cn=c[ar>>2]|0;aI=c[bv+288>>2]|0;ch=(aI|0)==0?1:aI;aI=bv+300|0;cq=c[aI>>2]|0;if((ch|0)<=0){break}aM=(ch|0)>1;bj=(cq|0)>0;cd=bv+292|0;aK=bv+48|0;bN=bv+32|0;bD=0.0;be=0.0;cr=0;aJ=cq;while(1){if(aM){c[aI>>2]=cq;do{if((a[56292]&1)==0){eG=cr}else{ci=c[cd>>2]|0;if((ci|0)==0){eG=cr;break}eG=c[ci+(cr<<2)>>2]|0}}while(0);ci=c[ar>>2]|0;if(bj){a7=+(eG|0);aL=0;cb=ci;while(1){h[cb+(aL<<6)+16>>3]=+h[cb+(aL<<6)+40>>3];c[(c[ar>>2]|0)+(aL<<6)>>2]=0;b7=c[ar>>2]|0;if(+h[b7+(aL<<6)+32>>3]!=a7){c[b7+(aL<<6)>>2]=2;h[(c[ar>>2]|0)+(aL<<6)+16>>3]=8.988465674311579e+307;eH=c[ar>>2]|0}else{eH=b7}b7=aL+1|0;if((b7|0)<(cq|0)){aL=b7;cb=eH}else{eI=eH;break}}}else{eI=ci}bM(eI|0,cq|0,64,12);cb=c[ar>>2]|0;aL=cq;while(1){b7=aL-1|0;if((c[cb+(b7<<6)>>2]|0)==2){aL=b7}else{break}}c[aI>>2]=aL;eJ=aL}else{eJ=aJ}if((eJ|0)<4){h[J>>3]=+h[(c[ar>>2]|0)+8>>3]+ +(cr|0)*+h[7035];h[cW>>3]=-8.988465674311579e+307;h[bu>>3]=8.988465674311579e+307;eK=be;eL=bD}else{if((eJ&1|0)==0){cb=(eJ|0)/2&-1;ci=c[ar>>2]|0;eM=(+h[ci+(cb-1<<6)+16>>3]+ +h[ci+(cb<<6)+16>>3])*.5;eN=ci}else{ci=c[ar>>2]|0;eM=+h[ci+(((eJ-1|0)/2&-1)<<6)+16>>3];eN=ci}if((eJ&3|0)==0){ci=(eJ|0)/4&-1;cb=eJ-ci|0;eO=(+h[eN+(cb<<6)+16>>3]+ +h[eN+(cb-1<<6)+16>>3])*.5;eP=(+h[eN+(ci-1<<6)+16>>3]+ +h[eN+(ci<<6)+16>>3])*.5}else{ci=(eJ+3|0)/4&-1;eO=+h[eN+(eJ-ci<<6)+16>>3];eP=+h[eN+(ci-1<<6)+16>>3]}L13836:do{if((c[14062]|0)==0){a7=(eO-eP)*+h[7032];bd=eP-a7;ci=0;while(1){if((ci|0)>=(eJ|0)){eQ=bd;break}ct=+h[eN+(ci<<6)+16>>3];if(ct<bd){ci=ci+1|0}else{eQ=ct;break}}bd=eO+a7;ci=eJ;while(1){co=ci-1|0;if((ci|0)<=0){eR=eQ;eS=bd;eT=eN;break L13836}cA=+h[eN+(co<<6)+16>>3];if(cA>bd){ci=co}else{eR=eQ;eS=cA;eT=eN;break}}}else{bd=+(eJ|0);a7=+h[7032];ci=0;co=eJ-1|0;cA=be;ct=bD;cb=eN;L13846:while(1){b7=1-ci|0;ca=co;cH=cA;cC=ct;cc=cb;while(1){if(+(b7+ca|0)/bd<a7){eR=cH;eS=cC;eT=cc;break L13836}eU=+h[cc+(ca<<6)+16>>3];eV=+h[cc+(ci<<6)+16>>3];bE=eU-eM;cJ=eM-eV;L13851:do{if(bE<cJ){eW=ca;eX=cc}else{b9=ca;b8=cc;while(1){b4=b9-1|0;if((b4|0)<=0){eW=b4;eX=b8;break L13851}if(+h[eN+(b4<<6)+16>>3]==+h[eN+(b9-2<<6)+16>>3]){b9=b4;b8=eN}else{eW=b4;eX=eN;break}}}}while(0);if(bE>cJ){ca=eW;cH=eV;cC=eU;cc=eX}else{break}}cc=ci+1|0;while(1){if((cc|0)>=(eW|0)){ci=cc;co=eW;cA=eV;ct=eU;cb=eX;continue L13846}ca=cc+1|0;if(+h[eX+(cc<<6)+16>>3]==+h[eX+(ca<<6)+16>>3]){cc=ca}else{ci=cc;co=eW;cA=eV;ct=eU;cb=eX;continue L13846}}}}}while(0);c[cP>>2]=0;ct=+h[eT+8>>3];if((c[cp>>2]|0)==0){h[J>>3]=(ct+ +h[eT+(eJ-1<<6)+8>>3])*.5;eY=+h[7035];eZ=+(cr|0)}else{cA=+h[7035];a7=+(cr|0);h[J>>3]=ct+a7*cA;eY=cA;eZ=a7}h[cQ>>3]=eP;h[cm>>3]=eO;h[bu>>3]=eR;h[cW>>3]=eS;h[aR>>3]=+h[eT+48>>3]+eZ*eY;h[aQ>>3]=eM;c[ar>>2]=A;c[aI>>2]=1;if((c[14068]|0)==257){f1(bv)}else{f2(bv)}c[ar>>2]=cn;c[aI>>2]=eJ;eK=eR;eL=eS}do{if((a[56264]&1)==0){e_=eJ}else{c[8240]=~~(+h[aK>>3]*+((c[(c[3524]|0)+28>>2]|0)>>>0>>>0));aL=c[aI>>2]|0;if((aL|0)>0){e$=0;e0=aL}else{e_=aL;break}while(1){aL=c[ar>>2]|0;a7=+h[aL+(e$<<6)+16>>3];if(a7<+h[bu>>3]){bt=10156}else{if(a7>+h[cW>>3]){bt=10156}else{e1=e0}}do{if((bt|0)==10156){bt=0;if((c[aL+(e$<<6)>>2]|0)!=0){e1=e0;break}cb=c[200]|0;co=~~(+(c[64768+(cb*688&-1)>>2]|0)+(+h[J>>3]- +h[64664+(cb*688&-1)>>3])*+h[64776+(cb*688&-1)>>3]+.5);cb=c[144]|0;ci=~~(+(c[64768+(cb*688&-1)>>2]|0)+(a7- +h[64664+(cb*688&-1)>>3])*+h[64776+(cb*688&-1)>>3]+.5);if((a[54144]&1)!=0){cb=c[8240]|0;if((co|0)<(cb+(c[7938]|0)|0)){e1=e0;break}cc=c[8242]|0;if((ci|0)<(cc+(c[7940]|0)|0)){e1=e0;break}if((co|0)>((c[7939]|0)-cb|0)){e1=e0;break}if((ci|0)>((c[7941]|0)-cc|0)){e1=e0;break}}L13885:do{if((e$|0)<1){e2=co}else{cc=c[8240]|0;cb=1;ca=co;while(1){if(a7!=+h[aL+(e$-cb<<6)+16>>3]){e2=ca;break L13885}b7=aa((cb&1|0)==0?-cb|0:cb,cc)+ca|0;cf=cb+1|0;if((e$|0)<(cf|0)){e2=b7;break}else{cb=cf;ca=b7}}}}while(0);cR[c[(c[3524]|0)+80>>2]&127](e2,ci,c[bN>>2]|0);e1=c[aI>>2]|0}}while(0);aL=e$+1|0;if((aL|0)<(e1|0)){e$=aL;e0=e1}else{e_=e1;break}}}}while(0);aL=cr+1|0;if((aL|0)<(ch|0)){bD=eL;be=eK;cr=aL;aJ=e_}else{break}}}else if((aH|0)==352){uh(-1,108328,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);break}else if((aH|0)==368){aJ=c[c[bv+224>>2]>>2]|0;cr=c[(c[3524]|0)+92>>2]|0;if((cr|0)!=0){cK[cr&63](+h[3817])}if((aJ|0)==0){break}else{e3=aJ}do{L13900:do{if((c[e3+56>>2]|0)==99){aJ=c[200]|0;be=+h[e3+24>>3];cr=c[144]|0;bD=+h[e3+32>>3];ch=~~(+(c[64768+(cr*688&-1)>>2]|0)+(bD- +h[64664+(cr*688&-1)>>3])*+h[64776+(cr*688&-1)>>3]+.5);cr=~~(+(c[64768+(aJ*688&-1)>>2]|0)+(be- +h[64664+(aJ*688&-1)>>3])*+h[64776+(aJ*688&-1)>>3]+.5);aJ=c[e3+8>>2]|0;do{if((aJ|0)==0){cF=+h[8255];cs=+h[8256];if(cF<cs){if(be<cF|be>cs){break L13900}else{break}}else{if(be<cs|be>cF){break L13900}else{break}}}else if((aJ|0)==1){cF=+h[8599];cs=+h[8600];if(cF<cs){if(be<cF|be>cs){break L13900}else{break}}else{if(be<cs|be>cF){break L13900}else{break}}}}while(0);aJ=c[e3+12>>2]|0;do{if((aJ|0)==0){be=+h[8169];cF=+h[8170];if(be<cF){if(bD<be|bD>cF){break L13900}else{break}}else{if(bD<cF|bD>be){break L13900}else{break}}}else if((aJ|0)==1){be=+h[8513];cF=+h[8514];if(be<cF){if(bD<be|bD>cF){break L13900}else{break}}else{if(bD<cF|bD>be){break L13900}else{break}}}}while(0);fp(cr,ch,e3)}}while(0);e3=c[e3>>2]|0;}while((e3|0)!=0)}else if((aH|0)==400){c[bv+228>>2]=0;f3(bv,0);break}else if((aH|0)==416){c[bv+228>>2]=1;f3(bv,0);break}else if((aH|0)==432){c[bv+228>>2]=2;f3(bv,0);break}else if((aH|0)==457){aJ=bv+192|0;aI=c[aJ>>2]|0;if((aI|0)==1|(aI|0)==4){e4=(c[bv+196>>2]<<4&65520)+aI|0}else if((aI|0)==2|(aI|0)==5){e4=(c[bv+200>>2]<<4&65520)+aI|0}else{e4=0}if((c[bv+208>>2]|0)==1){if((c[bv+212>>2]|0)==-3){e5=0}else{bt=10198}}else{bt=10198}if((bt|0)==10198){bt=0;e5=1}aI=bv+300|0;if((c[aI>>2]|0)<=0){break}bN=bv+320|0;ar=bv+316|0;aK=e5^1;cn=bv+24|0;cq=bv+48|0;bj=0;do{cd=c[bN>>2]|0;do{if((c[cd+(bj<<6)>>2]|0)==0){aM=c[200]|0;bD=+(c[64768+(aM*688&-1)>>2]|0);be=+h[64664+(aM*688&-1)>>3];cF=+h[64776+(aM*688&-1)>>3];aM=~~(bD+(+h[cd+(bj<<6)+8>>3]-be)*cF+.5);cg=c[144]|0;aL=~~(+(c[64768+(cg*688&-1)>>2]|0)+(+h[cd+(bj<<6)+16>>3]- +h[64664+(cg*688&-1)>>3])*+h[64776+(cg*688&-1)>>3]+.5);h[y>>3]=+(aM-~~(bD+cF*(+h[cd+(bj<<6)+48>>3]-be)+.5)|0);if(+h[cd+(bj<<6)+24>>3]==-1.0){fN(50952,y,z,184696);e6=c[bN>>2]|0}else{e6=cd}be=+h[e6+(bj<<6)+32>>3];cF=+h[e6+(bj<<6)+56>>3];do{if(!(f9(bv,(c[ar>>2]|0)+(bj<<3)|0)|aK)){c[cw>>2]=c[bm>>2];c[cw+4>>2]=c[bm+4>>2];c[cw+8>>2]=c[bm+8>>2];c[cw+12>>2]=c[bm+12>>2];cg=c[cu>>2]|0;do{if((c[cn>>2]|0)!=0){bD=+h[cq>>3];co=c[(c[3524]|0)+92>>2]|0;if(bD<0.0){cK[co&63](+h[3817]);break}else{cK[co&63](bD);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[aP>>3]);co=c[(c[3524]|0)+64>>2]|0;if((cg|0)<-5){cM[co&511](-2)}else{cM[co&511](cg)}co=c[3524]|0;if((a[cx]&1)==0){if((c[co+96>>2]&1024|0)!=0){break}c[cU>>2]=1;c[bz>>2]=cg}fn(x,co)}}while(0);bD=+h[y>>3];lq(aM,aL,bD,be,cF,e4);if(!e5){break}hG(aJ);lq(aM,aL,bD,be,cF,0)}}while(0);bj=bj+1|0;}while((bj|0)<(c[aI>>2]|0))}else if((aH|0)==489){aI=ut(96)|0;if((aI|0)==0){gk();bj=ut(96)|0;if((bj|0)==0){bt=10221;break L13212}else{e7=bj}}else{e7=aI}aI=e7;bj=bv+192|0;aJ=c[bj>>2]|0;if((aJ|0)==1|(aJ|0)==4){e8=(c[bv+196>>2]<<4&65520)+aJ|0}else if((aJ|0)==2|(aJ|0)==5){e8=(c[bv+200>>2]<<4&65520)+aJ|0}else{e8=0}if((c[bv+208>>2]|0)==1){if((c[bv+212>>2]|0)==-3){e9=0}else{bt=10227}}else{bt=10227}if((bt|0)==10227){bt=0;e9=1}aJ=e7+48|0;cq=aJ;c[aJ>>2]=(c[cl>>2]|0)==6&1;c[e7+52>>2]=(c[ap>>2]|0)==5&1;aJ=e7;c[aJ>>2]=c[bv+272>>2];cn=bv+300|0;if((c[cn>>2]|0)>0){aK=bv+320|0;ar=e7+24|0;bN=e7+32|0;cd=e7+64|0;ch=e7+72|0;cr=e7+88|0;co=bv+316|0;ca=e9^1;cb=bv+24|0;cc=bv+48|0;b7=0;do{cf=c[aK>>2]|0;do{if((c[cf+(b7<<6)>>2]|0)==0){b8=c[200]|0;h[ar>>3]=+(~~(+(c[64768+(b8*688&-1)>>2]|0)+(+h[cf+(b7<<6)+8>>3]- +h[64664+(b8*688&-1)>>3])*+h[64776+(b8*688&-1)>>3]+.5)|0);b8=c[144]|0;h[bN>>3]=+(~~(+(c[64768+(b8*688&-1)>>2]|0)+(+h[(c[aK>>2]|0)+(b7<<6)+16>>3]- +h[64664+(b8*688&-1)>>3])*+h[64776+(b8*688&-1)>>3]+.5)|0);h[cd>>3]=+h[(c[aK>>2]|0)+(b7<<6)+48>>3];h[ch>>3]=+h[(c[aK>>2]|0)+(b7<<6)+56>>3];b8=c[aJ>>2]|0;if((b8|0)==0){fN(cq,u,w,73152);h[cd>>3]=+h[u>>3];h[ch>>3]=+h[w>>3]}else if((b8|0)==1){fN(cq,u,w,73152);bD=+h[u>>3];h[cd>>3]=+h[ch>>3];fN(cq,w,u,73152);h[cd>>3]=bD;h[ch>>3]=+h[w>>3]}else if((b8|0)==2){fN(cq,u,w,73152);bD=+h[w>>3];h[ch>>3]=+h[cd>>3];fN(cq,w,u,73152);h[cd>>3]=+h[u>>3];h[ch>>3]=bD}b8=c[aK>>2]|0;bD=+h[b8+(b7<<6)+24>>3];if(bD>-1.0){fa=b8;fb=bD}else{fN(49672,cd,ch,73152);b8=c[aK>>2]|0;fa=b8;fb=+h[b8+(b7<<6)+24>>3]}if(fb==-2.0){fc=49712}else{fc=fa+(b7<<6)+32|0}h[cr>>3]=+h[fc>>3];do{if(!(f9(bv,(c[co>>2]|0)+(b7<<3)|0)|ca)){c[cT>>2]=c[bm>>2];c[cT+4>>2]=c[bm+4>>2];c[cT+8>>2]=c[bm+8>>2];c[cT+12>>2]=c[bm+12>>2];b8=c[cu>>2]|0;do{if((c[cb>>2]|0)!=0){bD=+h[cc>>3];b9=c[(c[3524]|0)+92>>2]|0;if(bD<0.0){cK[b9&63](+h[3817]);break}else{cK[b9&63](bD);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[aP>>3]);cg=c[(c[3524]|0)+64>>2]|0;if((b8|0)<-5){cM[cg&511](-2)}else{cM[cg&511](b8)}cg=c[3524]|0;if((a[cx]&1)==0){if((c[cg+96>>2]&1024|0)!=0){break}c[bA>>2]=1;c[cE>>2]=b8}fn(t,cg)}}while(0);fP(2,aI,e8,0);if(!e9){break}hG(bj);fP(2,aI,0,0)}}while(0);b7=b7+1|0;}while((b7|0)<(c[cn>>2]|0))}uu(e7);break}else{break}}}while(0);do{if(((a[36228]&1)==0|bK)&c7){if((c[bv+16>>2]|0)==0){fd=c8;break}if((a[bv+22|0]&1)!=0){fd=c8;break}ap=c[aO>>2]|0;if((ap|0)==51){do{if((c[bv+36>>2]|0)<0){cl=c[a3>>2]|0;if((cl|0)!=0){cM[cl&511](56688)}cK[c[a2>>2]&63](+h[3817]*+h[3818]);cR[c[a_>>2]&127]((c[9016]|0)+(c[aS>>2]|0)|0,c[aT>>2]|0,6);c[aY>>2]=c[bm>>2];c[aY+4>>2]=c[bm+4>>2];c[aY+8>>2]=c[bm+8>>2];c[aY+12>>2]=c[bm+12>>2];cl=c[cu>>2]|0;do{if((c[aq>>2]|0)!=0){cF=+h[bv+48>>3];cp=c[(c[3524]|0)+92>>2]|0;if(cF<0.0){cK[cp&63](+h[3817]);break}else{cK[cp&63](cF);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[aP>>3]);cp=c[(c[3524]|0)+64>>2]|0;if((cl|0)<-5){cM[cp&511](-2)}else{cM[cp&511](cl)}cp=c[3524]|0;if((a[cx]&1)==0){if((c[cp+96>>2]&1024|0)!=0){break}c[aZ>>2]=1;c[aX>>2]=cl}fn(s,cp)}}while(0);fe=c[aO>>2]|0}else{fe=ap}do{if((fe|0)==64){cp=(c[9016]|0)+(c[aS>>2]|0)|0;cn=c[aT>>2]|0;b7=c[3524]|0;if((c[b7+96>>2]&128|0)==0){if((cp|0)<=0){break}if(!((c[b7+8>>2]|0)>>>0>cp>>>0&(cn|0)>0)){break}if((c[b7+12>>2]|0)>>>0<=cn>>>0){break}}cR[c[a_>>2]&127](cp,cn,-1)}else if((fe|0)!=474){if((fe&2|0)==0){break}if(+h[bv+48>>3]==-3.0){cK[c[a2>>2]&63](+h[3817])}cM[c[a0>>2]&511](8);cn=(c[9016]|0)+(c[aS>>2]|0)|0;cp=c[aT>>2]|0;b7=c[3524]|0;do{if((c[b7+96>>2]&128|0)==0){if((cn|0)<=0){break}if(!((c[b7+8>>2]|0)>>>0>cn>>>0&(cp|0)>0)){break}if((c[b7+12>>2]|0)>>>0>cp>>>0){bt=10287}}else{bt=10287}}while(0);if((bt|0)==10287){bt=0;cR[c[a_>>2]&127](cn,cp,c[bv+32>>2]|0)}cM[c[a0>>2]&511](9)}}while(0);if((a[36230]&1)!=0){c[aT>>2]=(((c[54]|0)+(c[9336]|0)|0)+((c[9020]|0)/2&-1)|0)-(c[aT>>2]|0)}if((c8|0)<(c[9012]|0)){c[aT>>2]=(c[aT>>2]|0)-(c[9020]|0);fd=c8;break}else{c[aT>>2]=c[54];c[aS>>2]=(c[aS>>2]|0)+(c[9026]|0);fd=0;break}}else{fd=c8}}while(0);cM[c[(c[3524]|0)+168>>2]&511](7);cx=bl+1|0;aP=a[35184]|0;if((cx|0)<(d|0)){bH=c[aO>>2]|0;bq=fd;bv=c[bv>>2]|0;bl=cx;bJ=aP}else{ff=fd;fg=aP;break}}}else{ff=bB;fg=bk}if((fg&1)==0){bt=10298;break}if((a[36228]&1)==0|bK){bt=10298;break}fW(1,aS,aT);bB=ff;bK=1}if((bt|0)==9914){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=142288,v)|0)}else if((bt|0)==10221){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=148064,v)|0)}else if((bt|0)==10298){if((c[10026]|0)==1){fT()}do{if((a[30528]&1)!=0){if((a[27776]&1)==0){break}uD(r|0,31816,272);bK=c[200]|0;fb=+(c[64768+(bK*688&-1)>>2]|0);eK=+h[64664+(bK*688&-1)>>3];eL=+h[64776+(bK*688&-1)>>3];bK=~~(fb+(0.0-eK)*eL+.5);ff=c[144]|0;bB=~~(+(c[64768+(ff*688&-1)>>2]|0)+(0.0- +h[64664+(ff*688&-1)>>3])*+h[64776+(ff*688&-1)>>3]+.5);eS=(c[17366]&2|0)==0?+h[8688]:+h[8686];if((a[69604]&1)==0){fh=+h[8687];fi=eS}else{eR=+_(+eS);eS=+h[8702];fh=+_(+(+h[8687]))/eS;fi=eR/eS}ff=~~(fb+eL*(fi-fh-eK)+.5);aT=q;c[aT>>2]=c[14084];c[aT+4>>2]=c[56340>>2];c[aT+8>>2]=c[56344>>2];c[aT+12>>2]=c[56348>>2];aT=c[14075]|0;do{if((c[14074]|0)!=0){eK=+h[7040];aS=c[(c[3524]|0)+92>>2]|0;if(eK<0.0){cK[aS&63](+h[3817]);break}else{cK[aS&63](eK);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[7039]);bk=c[(c[3524]|0)+64>>2]|0;if((aT|0)<-5){cM[bk&511](-2)}else{cM[bk&511](aT)}bk=c[3524]|0;do{if((a[56328]&1)==0){if((c[bk+96>>2]&1024|0)!=0){fj=bk;break}c[q>>2]=1;c[q+4>>2]=aT;bt=10315}else{bt=10315}}while(0);if((bt|0)==10315){fn(q,bk);fj=c[3524]|0}c[m>>2]=bK;c[n>>2]=bB;c[o>>2]=ff;c[p>>2]=bB;if((fl(m,n,o,p)|0)!=0){cN[c[fj+56>>2]&255](c[m>>2]|0,c[n>>2]|0);cN[c[fj+60>>2]&255](c[o>>2]|0,c[p>>2]|0)}if(!((c[17366]&1|0)==0&+h[8687]!=0.0)){break}fO(r,1,2)}}while(0);if((c[10026]|0)==1){c[200]=2;c[144]=1;dg(2,1);dg(1,2);c[200]=6;c[144]=5;dg(6,5);dg(5,6)}if((c[11692]|0)!=0&(c[14088]|0)==1){fU()}do{if(a[31104]&(a[54016]|0)!=110){if(!((c[(c[3524]|0)+144>>2]|0)!=0&(c[13506]|0)==1)){break}dD(1)}}while(0);fO(c[10818]|0,1,2);r=c[10822]|0;p=c[(c[3524]|0)+92>>2]|0;if((p|0)!=0){cK[p&63](+h[3817])}if((r|0)!=0){p=r;do{if((c[p+56>>2]|0)==1){fR(p+8|0,k,l,202256);fp(~~+h[k>>3],~~+h[l>>3],p)}p=c[p>>2]|0;}while((p|0)!=0)}p=c[9682]|0;if((p|0)!=0){l=p;do{p=l+116|0;k=c[p>>2]|0;do{if((k|0)!=0){if((a[k]|0)==0){break}fN(38880,f,j,149952);r=c[200]|0;o=~~(+(c[64768+(r*688&-1)>>2]|0)+ +h[64776+(r*688&-1)>>3]*((+h[l+16>>3]+ +h[l+24>>3])*.5- +h[64664+(r*688&-1)>>3])+.5)+~~+h[f>>3]|0;r=c[3524]|0;fj=~~(+((c[190]|0)>>>0>>>0)+(+(~~+h[j>>3]|0)+ +((c[r+16>>2]|0)>>>0>>>0)*.25));n=l+128|0;fn(n,r);ln(o,fj,c[p>>2]|0,1,2,0,c[l+120>>2]|0);if((c[n>>2]|0)==0){break}cM[c[(c[3524]|0)+64>>2]&511](-2)}}while(0);l=c[l+48>>2]|0;}while((l|0)!=0)}fV(1);if(!(a[31104]|0)){lh();i=e;return}l=c[(c[3524]|0)+140>>2]|0;if((l|0)==0){lh();i=e;return}cS[l&511]();lh();i=e;return}}function fT(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0.0,s=0.0;b=i;i=i+64|0;d=b|0;e=b+8|0;f=b+16|0;g=b+24|0;j=b+32|0;k=b+48|0;l=c[3524]|0;m=k;c[m>>2]=c[14084];c[m+4>>2]=c[56340>>2];c[m+8>>2]=c[56344>>2];c[m+12>>2]=c[56348>>2];m=c[14075]|0;do{if((c[14074]|0)!=0){n=+h[7040];o=c[l+92>>2]|0;if(n<0.0){cK[o&63](+h[3817]);break}else{cK[o&63](n);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[7039]);o=c[(c[3524]|0)+64>>2]|0;if((m|0)<-5){cM[o&511](-2)}else{cM[o&511](m)}o=c[3524]|0;do{if((a[56328]&1)==0){if((c[o+96>>2]&1024|0)!=0){break}c[k>>2]=1;c[k+4>>2]=m;p=10357}else{p=10357}}while(0);if((p|0)==10357){fn(k,o)}h[4483]=0.0;c[200]=2;c[144]=1;df(1,144,2,4);df(2,704,1,2);c[200]=6;c[144]=5;df(5,584,6,4);df(6,816,5,2);c[200]=2;c[144]=1;if(!((a[30528]&1)==0|(c[17433]|0)==0)){o=~~(+(c[16364]|0)+(0.0- +h[8169])*+h[8183]+.5);c[1394]=o;c[1396]=o;c[1392]=o-(c[l+16>>2]|0);o=c[17462]|0;c[6586]=o;do{if((o|0)==0){c[1398]=1}else{if((cO[c[l+72>>2]&255](o)|0)==0){break}c[1398]=(c[6586]|0)==-270?2:0}}while(0);if((a[70088]&1)!=0){c[1398]=c[17486]}de(7,2);o=c[l+72>>2]|0;cO[o&255](0)}if(+h[3815]==0.0){i=b;return}o=c[200]|0;l=~~(+(c[64768+(o*688&-1)>>2]|0)+(0.0- +h[64664+(o*688&-1)>>3])*+h[64776+(o*688&-1)>>3]+.5);o=c[144]|0;k=~~(+(c[64768+(o*688&-1)>>2]|0)+(0.0- +h[64664+(o*688&-1)>>3])*+h[64776+(o*688&-1)>>3]+.5);o=j;c[o>>2]=c[10022];c[o+4>>2]=c[40092>>2];c[o+8>>2]=c[40096>>2];c[o+12>>2]=c[40100>>2];o=c[10013]|0;do{if((c[10012]|0)!=0){n=+h[5009];m=c[(c[3524]|0)+92>>2]|0;if(n<0.0){cK[m&63](+h[3817]);break}else{cK[m&63](n);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[5008]);m=c[(c[3524]|0)+64>>2]|0;if((o|0)<-5){cM[m&511](-2)}else{cM[m&511](o)}m=c[3524]|0;do{if((a[40080]&1)==0){if((c[m+96>>2]&1024|0)!=0){break}c[j>>2]=1;c[j+4>>2]=o;p=10377}else{p=10377}}while(0);if((p|0)==10377){fn(j,m)}n=0.0;while(1){m=c[200]|0;q=+(c[64768+(m*688&-1)>>2]|0);r=+h[4483];s=r*+S(+n);j=~~(q+(s- +h[64664+(m*688&-1)>>3])*+h[64776+(m*688&-1)>>3]+.5);m=c[144]|0;s=+(c[64768+(m*688&-1)>>2]|0);q=r*+T(+n);p=~~(s+(q- +h[64664+(m*688&-1)>>3])*+h[64776+(m*688&-1)>>3]+.5);c[d>>2]=l;c[e>>2]=k;c[f>>2]=j;c[g>>2]=p;p=c[3524]|0;if((fl(d,e,f,g)|0)!=0){cN[c[p+56>>2]&255](c[d>>2]|0,c[e>>2]|0);cN[c[p+60>>2]&255](c[f>>2]|0,c[g>>2]|0)}if(n>=6.29){break}n=n+ +h[3815]}i=b;return}function fU(){var b=0,d=0,e=0,f=0.0,g=0,j=0,k=0.0,l=0.0;b=i;i=i+16|0;d=b|0;e=d;c[e>>2]=c[14084];c[e+4>>2]=c[56340>>2];c[e+8>>2]=c[56344>>2];c[e+12>>2]=c[56348>>2];e=c[14075]|0;do{if((c[14074]|0)!=0){f=+h[7040];g=c[(c[3524]|0)+92>>2]|0;if(f<0.0){cK[g&63](+h[3817]);break}else{cK[g&63](f);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[7039]);g=c[(c[3524]|0)+64>>2]|0;if((e|0)<-5){cM[g&511](-2)}else{cM[g&511](e)}g=c[3524]|0;do{if((a[56328]&1)==0){if((c[g+96>>2]&1024|0)!=0){break}c[d>>2]=1;c[d+4>>2]=e;j=10396}else{j=10396}}while(0);if((j|0)==10396){fn(d,g)}do{if((c[11692]&15|0)==15){g=c[(c[3524]|0)+172>>2]|0;if((g|0)==0){break}cM[g&511](0)}}while(0);cN[c[(c[3524]|0)+56>>2]&255](c[7938]|0,c[7941]|0);do{if((c[11692]&2|0)==0){cN[c[(c[3524]|0)+56>>2]&255](c[7938]|0,c[7940]|0)}else{if((a[65712]&1)==0){cN[c[(c[3524]|0)+60>>2]&255](c[7938]|0,c[7940]|0);break}else{f=+(c[16364]|0);k=+h[8169];l=+h[8183];g=~~(f+l*(+h[8175]-k)+.5);cN[c[(c[3524]|0)+56>>2]&255](c[7938]|0,~~(f+(+h[8176]-k)*l+.5));cN[c[(c[3524]|0)+60>>2]&255](c[7938]|0,g);cN[c[(c[3524]|0)+56>>2]&255](c[7938]|0,c[7940]|0);break}}}while(0);do{if((c[11692]&1|0)==0){cN[c[(c[3524]|0)+56>>2]&255](c[7939]|0,c[7940]|0)}else{if((a[66400]&1)==0){cN[c[(c[3524]|0)+60>>2]&255](c[7939]|0,c[7940]|0);break}else{l=+(c[16536]|0);k=+h[8255];f=+h[8269];g=~~(l+(+h[8262]-k)*f+.5);cN[c[(c[3524]|0)+56>>2]&255](~~(l+f*(+h[8261]-k)+.5),c[7940]|0);cN[c[(c[3524]|0)+60>>2]&255](g,c[7940]|0);cN[c[(c[3524]|0)+56>>2]&255](c[7939]|0,c[7940]|0);break}}}while(0);do{if((c[11692]&8|0)==0){cN[c[(c[3524]|0)+56>>2]&255](c[7939]|0,c[7941]|0)}else{if((a[68464]&1)==0){cN[c[(c[3524]|0)+60>>2]&255](c[7939]|0,c[7941]|0);break}else{k=+(c[17052]|0);f=+h[8513];l=+h[8527];g=~~(k+l*(+h[8519]-f)+.5);cN[c[(c[3524]|0)+56>>2]&255](c[7939]|0,~~(k+(+h[8520]-f)*l+.5));cN[c[(c[3524]|0)+60>>2]&255](c[7939]|0,g);cN[c[(c[3524]|0)+56>>2]&255](c[7939]|0,c[7940]|0);break}}}while(0);do{if((c[11692]&4|0)==0){cN[c[(c[3524]|0)+56>>2]&255](c[7938]|0,c[7941]|0)}else{if((a[69152]&1)==0){cN[c[(c[3524]|0)+60>>2]&255](c[7938]|0,c[7941]|0);break}else{l=+(c[17224]|0);f=+h[8599];k=+h[8613];g=~~(l+(+h[8606]-f)*k+.5);cN[c[(c[3524]|0)+56>>2]&255](~~(l+k*(+h[8605]-f)+.5),c[7941]|0);cN[c[(c[3524]|0)+60>>2]&255](g,c[7941]|0);cN[c[(c[3524]|0)+56>>2]&255](c[7939]|0,c[7941]|0);break}}}while(0);if((c[11692]&15|0)!=15){i=b;return}g=c[(c[3524]|0)+172>>2]|0;if((g|0)==0){i=b;return}cM[g&511](1);i=b;return}function fV(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0,D=0,E=0.0,F=0.0,G=0,H=0,I=0,J=0;d=i;i=i+120|0;e=d|0;f=d+16|0;g=d+24|0;j=d+32|0;k=d+72|0;l=d+88|0;m=d+96|0;n=d+104|0;o=d+112|0;p=c[13542]|0;c[13542]=(c[(c[3524]|0)+96>>2]&128|0)==0?55520:0;q=c[10826]|0;if((q|0)!=0){r=k;s=k|0;t=k+4|0;u=j;v=j+4|0;w=j+8|0;x=j+16|0;y=j|0;z=q;do{if((c[z+100>>2]|0)==(b|0)){fR(z+8|0,l,m,123984);A=+h[l>>3];q=~~A;B=+h[m>>3];C=~~B;D=z+48|0;if((a[z+88|0]&1)==0){fR(D,n,o,123984);E=+h[o>>3];F=+h[n>>3]}else{fN(D,n,o,123984);E=B+ +h[o>>3];F=A+ +h[n>>3]}D=~~F;G=~~E;H=z+144|0;c[r>>2]=c[H>>2];c[r+4>>2]=c[H+4>>2];c[r+8>>2]=c[H+8>>2];c[r+12>>2]=c[H+12>>2];H=c[z+108>>2]|0;do{if((c[z+104>>2]|0)!=0){A=+h[z+128>>3];I=c[(c[3524]|0)+92>>2]|0;if(A<0.0){cK[I&63](+h[3817]);break}else{cK[I&63](A);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[z+120>>3]);I=c[(c[3524]|0)+64>>2]|0;if((H|0)<-5){cM[I&511](-2)}else{cM[I&511](H)}I=c[3524]|0;do{if((a[z+136|0]&1)==0){if((c[I+96>>2]&1024|0)!=0){break}c[s>>2]=1;c[t>>2]=H;J=10443}else{J=10443}}while(0);if((J|0)==10443){J=0;fn(k,I)}c[12912]=c[z+200>>2];c[12910]=0;A=+h[z+168>>3];if(A>0.0){uE(u|0,0,40);c[v>>2]=2;c[w>>2]=2;h[x>>3]=A;c[y>>2]=c[z+176>>2];fN(j,f,g,123984);h[6458]=+h[z+184>>3];h[6457]=+h[z+192>>3];c[12910]=~~+h[f>>3]}fm(q,C,D,G,c[z+160>>2]|0)}z=c[z>>2]|0;}while((z|0)!=0)}z=e;c[z>>2]=c[14084];c[z+4>>2]=c[56340>>2];c[z+8>>2]=c[56344>>2];c[z+12>>2]=c[56348>>2];z=c[14075]|0;do{if((c[14074]|0)!=0){E=+h[7040];f=c[(c[3524]|0)+92>>2]|0;if(E<0.0){cK[f&63](+h[3817]);break}else{cK[f&63](E);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[7039]);f=c[(c[3524]|0)+64>>2]|0;if((z|0)<-5){cM[f&511](-2)}else{cM[f&511](z)}f=c[3524]|0;do{if((a[56328]&1)==0){if((c[f+96>>2]&1024|0)==0){c[e>>2]=1;c[e+4>>2]=z;break}else{c[13542]=p;i=d;return}}}while(0);fn(e,f);c[13542]=p;i=d;return}function fW(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0,M=0,N=0,O=0,P=0.0,Q=0,R=0,S=0.0,T=0,U=0;f=i;i=i+176|0;g=f|0;j=f+8|0;k=f+16|0;l=f+24|0;m=f+32|0;n=f+40|0;o=f+48|0;p=f+56|0;q=f+64|0;r=f+72|0;s=f+80|0;t=f+88|0;u=f+96|0;v=f+104|0;w=f+112|0;x=f+120|0;y=f+128|0;z=f+136|0;A=f+144|0;B=f+152|0;C=f+160|0;D=c[3524]|0;E=(c[8996]|0)+(c[9334]|0)|0;F=c[9337]|0;do{if(b){G=D+108|0;if((c[G>>2]|0)==0){break}H=c[9336]|0;if((a[36288]|0)==0){I=H}else{do{if((c[D+96>>2]&32|0)==0){J=0.0}else{K=(a8(36288,94)|0)==0?0.0:.51;if((a8(36288,95)|0)==0){J=K;break}J=K+.3}}while(0);I=~~(+(H|0)-J*+((c[D+16>>2]|0)>>>0>>>0))}cM[c[D+144>>2]&511](56688);L=c[9334]|0;cI[c[G>>2]&63](1601,L,I,(c[9335]|0)-L|0,(c[9337]|0)-I|0)}}while(0);if((a[36288]|0)==0){M=F;N=c[D+16>>2]|0}else{I=((c[9335]|0)+(c[9334]|0)|0)/2&-1;L=D+96|0;O=c[L>>2]|0;if((O&32|0)==0){P=0.0}else{P=(a8(36288,94)|0)==0?0.0:.51}if(b){Q=10476}else{if((a[36228]&1)==0){Q=10476}else{R=O}}if((Q|0)==10476){if((c[9330]|0)==3&+h[4666]<0.0){fn(36272,D)}else{fn(37320,D)}ln(I,~~(+(F|0)-(P*.5+.5)*+((c[D+16>>2]|0)>>>0>>>0)),36288,1,0,0,c[9329]|0);cM[c[D+64>>2]&511](-2);R=c[L>>2]|0}do{if((R&32|0)==0){S=P}else{if((a8(36288,95)|0)==0){S=P;break}S=P+.3}}while(0);P=S+ +h[4488];h[4488]=P;R=D+16|0;c[9336]=~~(+(c[9336]|0)-S*+((c[R>>2]|0)>>>0>>>0));L=c[R>>2]|0;M=~~(+(F|0)- +(L>>>0>>>0)*P);N=L}L=D+16|0;D=(M-~~(+h[4527]*.5*+(N>>>0>>>0))|0)+((c[9020]|0)/-2&-1)|0;c[54]=D;N=c[9059]|0;if((N|0)<=-3){c[d>>2]=E;c[e>>2]=D;i=f;return}M=c[13542]|0;F=c[3524]|0;c[13542]=(c[F+96>>2]&128|0)==0?55520:0;R=C;c[R>>2]=c[9068];c[R+4>>2]=c[36276>>2];c[R+8>>2]=c[36280>>2];c[R+12>>2]=c[36284>>2];do{if((c[9058]|0)!=0){P=+h[4532];R=c[F+92>>2]|0;if(P<0.0){cK[R&63](+h[3817]);break}else{cK[R&63](P);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[4531]);F=c[(c[3524]|0)+64>>2]|0;if((N|0)<-5){cM[F&511](-2)}else{cM[F&511](N)}F=c[3524]|0;do{if((a[36264]&1)==0){if((c[F+96>>2]&1024|0)!=0){T=F;break}c[C>>2]=1;c[C+4>>2]=N;Q=10495}else{Q=10495}}while(0);if((Q|0)==10495){fn(C,F);T=c[3524]|0}F=c[T+172>>2]|0;if((F|0)==0){U=T}else{cM[F&511](0);U=c[3524]|0}F=c[9334]|0;T=c[9336]|0;C=c[9337]|0;c[y>>2]=F;c[z>>2]=T;c[A>>2]=F;c[B>>2]=C;if((fl(y,z,A,B)|0)!=0){cN[c[U+56>>2]&255](c[y>>2]|0,c[z>>2]|0);cN[c[U+60>>2]&255](c[A>>2]|0,c[B>>2]|0)}B=c[9337]|0;A=c[9335]|0;c[u>>2]=c[9334];c[v>>2]=B;c[w>>2]=A;c[x>>2]=B;B=c[3524]|0;if((fl(u,v,w,x)|0)!=0){cN[c[B+56>>2]&255](c[u>>2]|0,c[v>>2]|0);cN[c[B+60>>2]&255](c[w>>2]|0,c[x>>2]|0)}x=c[9335]|0;w=c[9337]|0;B=c[9336]|0;c[q>>2]=x;c[r>>2]=w;c[s>>2]=x;c[t>>2]=B;B=c[3524]|0;if((fl(q,r,s,t)|0)!=0){cN[c[B+56>>2]&255](c[q>>2]|0,c[r>>2]|0);cN[c[B+60>>2]&255](c[s>>2]|0,c[t>>2]|0)}t=c[9336]|0;s=c[9334]|0;c[m>>2]=c[9335];c[n>>2]=t;c[o>>2]=s;c[p>>2]=t;t=c[3524]|0;if((fl(m,n,o,p)|0)!=0){cN[c[t+56>>2]&255](c[m>>2]|0,c[n>>2]|0);cN[c[t+60>>2]&255](c[o>>2]|0,c[p>>2]|0)}p=c[(c[3524]|0)+172>>2]|0;if((p|0)!=0){cM[p&511](1)}do{if((a[36288]|0)!=0){p=~~(+(c[9337]|0)- +h[4488]*+((c[L>>2]|0)>>>0>>>0));o=c[9335]|0;c[g>>2]=c[9334];c[j>>2]=p;c[k>>2]=o;c[l>>2]=p;p=c[3524]|0;if((fl(g,j,k,l)|0)==0){break}cN[c[p+56>>2]&255](c[g>>2]|0,c[j>>2]|0);cN[c[p+60>>2]&255](c[k>>2]|0,c[l>>2]|0)}}while(0);c[13542]=M;c[d>>2]=E;c[e>>2]=D;i=f;return}function fX(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;d=i;i=i+48|0;e=d|0;f=d+8|0;g=d+16|0;j=d+32|0;k=c[3524]|0;l=b+300|0;if((c[l>>2]|0)<=0){i=d;return}m=b+316|0;n=b+320|0;o=k+56|0;p=k+60|0;k=g|0;q=j|0;r=g+8|0;g=j+8|0;j=0;s=2;do{f9(b,(c[m>>2]|0)+(j<<3)|0);t=c[n>>2]|0;u=c[t+(j<<6)>>2]|0;do{if((u|0)==0){v=c[200]|0;w=~~(+(c[64768+(v*688&-1)>>2]|0)+(+h[t+(j<<6)+8>>3]- +h[64664+(v*688&-1)>>3])*+h[64776+(v*688&-1)>>3]+.5);v=c[144]|0;x=~~(+(c[64768+(v*688&-1)>>2]|0)+(+h[t+(j<<6)+16>>3]- +h[64664+(v*688&-1)>>3])*+h[64776+(v*688&-1)>>3]+.5);if((s|0)==0){cN[c[p>>2]&255](w,x);break}else if((s|0)==1){if((a[54160]&1)==0){cN[c[o>>2]&255](w,x);break}else{gb(t,j,e,f);v=c[200]|0;y=c[144]|0;cN[c[o>>2]&255](~~(+(c[64768+(v*688&-1)>>2]|0)+(+h[e>>3]- +h[64664+(v*688&-1)>>3])*+h[64776+(v*688&-1)>>3]+.5),~~(+(c[64768+(y*688&-1)>>2]|0)+(+h[f>>3]- +h[64664+(y*688&-1)>>3])*+h[64776+(y*688&-1)>>3]+.5));cN[c[p>>2]&255](w,x);break}}else{cN[c[o>>2]&255](w,x);cN[c[p>>2]&255](w,x);break}}else if((u|0)==1){if((s|0)==0){if((a[54160]&1)==0){break}gb(t,j,e,f);x=c[200]|0;w=c[144]|0;cN[c[p>>2]&255](~~(+(c[64768+(x*688&-1)>>2]|0)+(+h[e>>3]- +h[64664+(x*688&-1)>>3])*+h[64776+(x*688&-1)>>3]+.5),~~(+(c[64768+(w*688&-1)>>2]|0)+(+h[f>>3]- +h[64664+(w*688&-1)>>3])*+h[64776+(w*688&-1)>>3]+.5));break}else if((s|0)!=1){break}if((a[54152]&1)==0){break}if(!(gc(t,j,k,q)|0)){break}w=c[200]|0;x=c[144]|0;cN[c[o>>2]&255](~~(+(c[64768+(w*688&-1)>>2]|0)+(+h[k>>3]- +h[64664+(w*688&-1)>>3])*+h[64776+(w*688&-1)>>3]+.5),~~(+(c[64768+(x*688&-1)>>2]|0)+(+h[q>>3]- +h[64664+(x*688&-1)>>3])*+h[64776+(x*688&-1)>>3]+.5));x=c[200]|0;w=c[144]|0;cN[c[p>>2]&255](~~(+(c[64768+(x*688&-1)>>2]|0)+(+h[r>>3]- +h[64664+(x*688&-1)>>3])*+h[64776+(x*688&-1)>>3]+.5),~~(+(c[64768+(w*688&-1)>>2]|0)+(+h[g>>3]- +h[64664+(w*688&-1)>>3])*+h[64776+(w*688&-1)>>3]+.5))}}while(0);s=c[(c[n>>2]|0)+(j<<6)>>2]|0;j=j+1|0;}while((j|0)<(c[l>>2]|0));i=d;return}function fY(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0.0,an=0;j=i;i=i+280|0;k=j|0;l=j+8|0;m=j+16|0;n=j+24|0;o=j+32|0;p=j+40|0;q=j+48|0;r=j+56|0;s=j+64|0;t=j+72|0;u=j+80|0;w=j+88|0;x=j+96|0;y=j+104|0;z=j+112|0;A=j+152|0;B=j+160|0;C=j+168|0;D=j+176|0;E=j+184|0;F=j+192|0;G=j+200|0;H=j+208|0;I=j+216|0;J=j+224|0;K=j+232|0;L=j+240|0;M=j+248|0;N=j+256|0;O=j+264|0;P=j+272|0;Q=c[13542]|0;c[13542]=(c[(c[3524]|0)+96>>2]&128|0)==0?55520:0;R=e+168|0;cM[c[R>>2]&511](8);S=c[9330]|0;if((S|0)==0){cM[c[e+64>>2]&511](-2)}else if((S|0)!=7){fn(37320,e)}L14405:do{if((c[9046]|0)==0){ln((c[8988]|0)+f|0,g,d,0,0,0,c[9329]|0)}else{S=(cO[c[e+76>>2]&255](2)|0)==0;T=(c[8984]|0)+f|0;if(!S){ln(T,g,d,2,0,0,c[9329]|0);break}S=c[e+20>>2]|0;U=T-aa(lp(d)|0,S)|0;do{if(((c[9031]|0)-1|0)>>>0>=2){S=c[7938]|0;T=c[7939]|0;if((S|0)<(T|0)){if((U|0)<(S|0)|(U|0)>(T|0)){break L14405}else{break}}else{if((U|0)<(T|0)|(U|0)>(S|0)){break L14405}else{break}}}}while(0);ln(U,g,d,0,0,0,c[9329]|0)}}while(0);d=e+64|0;S=b+28|0;cM[c[d>>2]&511](c[S>>2]|0);T=b+56|0;if((a[T]&1)!=0){fn(b+64|0,e)}V=b+12|0;W=c[V>>2]|0;do{if((W&8|0)==0){X=10585}else{Y=c[e+108>>2]|0;if((Y|0)==0){X=10585;break}Z=b+192|0;_=Z|0;$=c[_>>2]|0;if(($|0)==1|($|0)==4){ab=(c[b+196>>2]<<4&65520)+$|0}else if(($|0)==2|($|0)==5){ab=(c[b+200>>2]<<4&65520)+$|0}else{ab=0}$=c[9008]|0;ac=$+f|0;ad=c[9020]|0;ae=(ad|0)/4&-1;af=g-ae|0;ag=c[9004]|0;ah=ag-$|0;ai=(ad|0)/2&-1;ad=(ag|0)==($|0);if(!((W|0)!=457|ad)){lq((c[9016]|0)+f|0,g,+(ae|0),0.0,360.0,ab);break}if(!((W|0)!=489|ad)){ae=ut(96)|0;do{if((ae|0)==0){gk();$=ut(96)|0;if(($|0)!=0){aj=$;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=151888,v)|0)}else{aj=ae}}while(0);h[aj+24>>3]=+((c[9016]|0)+f|0);h[aj+32>>3]=+(g|0);h[aj+64>>3]=+((ah<<1>>>0)/3>>>0>>>0>>>0);h[aj+72>>3]=+(ai>>>0>>>0);h[aj+88>>3]=0.0;fP(2,aj,ab,0);uu(aj);break}if(ad){break}ae=(ab|0)==0;if(ae){ak=W}else{cI[Y&63](ab,ac,af,ah,ai);ak=c[V>>2]|0}do{if((ak|0)==252){if((c[b+208>>2]|0)!=1){X=10566;break}if((c[b+212>>2]|0)==-3|ae){X=10568}else{X=10567}}else{X=10566}}while(0);if((X|0)==10566){if(ae){X=10568}else{X=10567}}if((X|0)==10567){if(hG(Z)|0){X=10568}}do{if((X|0)==10568){ai=c[3524]|0;ah=c[ai+172>>2]|0;if((ah|0)==0){al=ai}else{cM[ah&511](0);al=c[3524]|0}ah=g-((c[9020]|0)/4&-1)|0;ai=(c[9004]|0)+f|0;c[M>>2]=(c[9008]|0)+f;c[N>>2]=ah;c[O>>2]=ai;c[P>>2]=ah;if((fl(M,N,O,P)|0)!=0){cN[c[al+56>>2]&255](c[M>>2]|0,c[N>>2]|0);cN[c[al+60>>2]&255](c[O>>2]|0,c[P>>2]|0)}ah=(c[9004]|0)+f|0;ai=(c[9020]|0)/4&-1;c[I>>2]=ah;c[J>>2]=g-ai;c[K>>2]=ah;c[L>>2]=ai+g;ai=c[3524]|0;if((fl(I,J,K,L)|0)!=0){cN[c[ai+56>>2]&255](c[I>>2]|0,c[J>>2]|0);cN[c[ai+60>>2]&255](c[K>>2]|0,c[L>>2]|0)}ai=((c[9020]|0)/4&-1)+g|0;ah=(c[9008]|0)+f|0;c[E>>2]=(c[9004]|0)+f;c[F>>2]=ai;c[G>>2]=ah;c[H>>2]=ai;ai=c[3524]|0;if((fl(E,F,G,H)|0)!=0){cN[c[ai+56>>2]&255](c[E>>2]|0,c[F>>2]|0);cN[c[ai+60>>2]&255](c[G>>2]|0,c[H>>2]|0)}ai=(c[9008]|0)+f|0;ah=(c[9020]|0)/4&-1;c[A>>2]=ai;c[B>>2]=ah+g;c[C>>2]=ai;c[D>>2]=g-ah;ah=c[3524]|0;if((fl(A,B,C,D)|0)!=0){cN[c[ah+56>>2]&255](c[A>>2]|0,c[B>>2]|0);cN[c[ah+60>>2]&255](c[C>>2]|0,c[D>>2]|0)}ah=c[(c[3524]|0)+172>>2]|0;if((ah|0)==0){break}cM[ah&511](1)}}while(0);Z=c[_>>2]|0;if((Z|0)==0|(Z|0)==3){break}if((c[b+208>>2]|0)==1){if((c[b+212>>2]|0)==-3){break}}cM[c[d>>2]&511](c[S>>2]|0);if((a[T]&1)==0){break}fn(b+64|0,e)}}while(0);L14473:do{if((X|0)==10585){do{if((W|0)==225){if((c[e+84>>2]|0)==0){break}c[12912]=c[b+184>>2];c[12910]=0;am=+h[b+152>>3];if(am>0.0){uE(z|0,0,40);c[z+4>>2]=2;c[z+8>>2]=2;h[z+16>>3]=am;c[z>>2]=c[b+160>>2];fN(z,x,y,123984);h[6458]=+h[b+168>>3];h[6457]=+h[b+176>>3];c[12910]=~~+h[x>>3]}c[12910]=-1;fm((c[9008]|0)+f|0,g,(c[9004]|0)+f|0,g,c[b+144>>2]|0);break L14473}else{if((W&1|0)!=0){break}if((W&4|0)==0){break L14473}if((c[b+8>>2]|0)!=1){break L14473}}}while(0);_=(c[9004]|0)+f|0;c[s>>2]=(c[9008]|0)+f;c[t>>2]=g;c[u>>2]=_;c[w>>2]=g;_=c[3524]|0;if((fl(s,t,u,w)|0)==0){break}cN[c[_+56>>2]&255](c[s>>2]|0,c[t>>2]|0);cN[c[_+60>>2]&255](c[u>>2]|0,c[w>>2]|0)}}while(0);if((c[b+8>>2]|0)!=1){an=c[R>>2]|0;cM[an&511](9);c[13542]=Q;i=j;return}b=c[V>>2]|0;if((b&4|0)==0){an=c[R>>2]|0;cM[an&511](9);c[13542]=Q;i=j;return}if(!((b|0)!=252&+h[7077]>0.0)){an=c[R>>2]|0;cM[an&511](9);c[13542]=Q;i=j;return}b=(c[9008]|0)+f|0;V=e+28|0;e=c[V>>2]|0;w=e>>>0>3?e>>>1:1;c[o>>2]=b;c[p>>2]=w+g;c[q>>2]=b;c[r>>2]=g-w;w=c[3524]|0;if((fl(o,p,q,r)|0)!=0){cN[c[w+56>>2]&255](c[o>>2]|0,c[p>>2]|0);cN[c[w+60>>2]&255](c[q>>2]|0,c[r>>2]|0)}r=(c[9004]|0)+f|0;f=c[V>>2]|0;V=f>>>0>3?f>>>1:1;c[k>>2]=r;c[l>>2]=V+g;c[m>>2]=r;c[n>>2]=g-V;V=c[3524]|0;if((fl(k,l,m,n)|0)==0){an=c[R>>2]|0;cM[an&511](9);c[13542]=Q;i=j;return}cN[c[V+56>>2]&255](c[k>>2]|0,c[l>>2]|0);cN[c[V+60>>2]&255](c[m>>2]|0,c[n>>2]|0);an=c[R>>2]|0;cM[an&511](9);c[13542]=Q;i=j;return}function fZ(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0;d=i;i=i+16|0;e=d|0;f=c[b+36>>2]|0;g=c[3524]|0;j=b+300|0;k=c[j>>2]|0;if((k|0)<=0){i=d;return}l=b+12|0;m=(f|0)==0;n=b+320|0;o=(f|0)<0;p=g+144|0;q=g+92|0;r=g+80|0;g=e;s=b+64|0;t=b+28|0;u=b+24|0;v=b+40|0;w=b+56|0;x=e|0;y=e+4|0;z=b+48|0;A=b+316|0;B=b+32|0;C=0;D=k;while(1){k=c[l>>2]|0;if((k|0)!=51|m){E=10612}else{if(((C|0)%(f|0)&-1|0)==0){E=10612}else{F=D}}do{if((E|0)==10612){E=0;G=c[n>>2]|0;if((c[G+(C<<6)>>2]|0)!=0){F=D;break}H=c[200]|0;I=~~(+(c[64768+(H*688&-1)>>2]|0)+(+h[G+(C<<6)+8>>3]- +h[64664+(H*688&-1)>>3])*+h[64776+(H*688&-1)>>3]+.5);H=c[144]|0;J=~~(+(c[64768+(H*688&-1)>>2]|0)+(+h[G+(C<<6)+16>>3]- +h[64664+(H*688&-1)>>3])*+h[64776+(H*688&-1)>>3]+.5);if((a[54144]&1)!=0){H=c[8240]|0;if((I|0)<(H+(c[7938]|0)|0)){F=D;break}K=c[8242]|0;if((J|0)<(K+(c[7940]|0)|0)){F=D;break}if((I|0)>((c[7939]|0)-H|0)){F=D;break}if((J|0)>((c[7941]|0)-K|0)){F=D;break}}do{if((k|0)==18|(k|0)==51){if(+h[z>>3]==-3.0){cK[c[q>>2]&63](+h[3817]*+h[G+(C<<6)+24>>3]);L=c[l>>2]|0}else{L=k}if(!((L|0)==51&o)){break}K=c[p>>2]|0;if((K|0)!=0){cM[K&511](56688)}cK[c[q>>2]&63](+h[3817]*+h[3818]);cR[c[r>>2]&127](I,J,6);c[g>>2]=c[s>>2];c[g+4>>2]=c[s+4>>2];c[g+8>>2]=c[s+8>>2];c[g+12>>2]=c[s+12>>2];K=c[t>>2]|0;do{if((c[u>>2]|0)!=0){M=+h[z>>3];H=c[(c[3524]|0)+92>>2]|0;if(M<0.0){cK[H&63](+h[3817]);break}else{cK[H&63](M);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[v>>3]);H=c[(c[3524]|0)+64>>2]|0;if((K|0)<-5){cM[H&511](-2)}else{cM[H&511](K)}H=c[3524]|0;if((a[w]&1)==0){if((c[H+96>>2]&1024|0)!=0){break}c[x>>2]=1;c[y>>2]=K}fn(e,H)}}while(0);G=(c[A>>2]|0)+(C<<3)|0;f9(b,G);cR[c[r>>2]&127](I,J,c[B>>2]|0);F=c[j>>2]|0}}while(0);k=C+1|0;if((k|0)<(F|0)){C=k;D=F}else{break}}i=d;return}function f_(b){b=b|0;var d=0,e=0,f=0.0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0,P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0.0,_=0,$=0,ab=0.0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0.0,an=0,ao=0,ap=0.0,aq=0,ar=0,as=0,at=0,au=0,av=0.0,aw=0,ax=0,ay=0,az=0.0,aA=0,aB=0,aC=0,aD=0,aE=0.0;d=c[3524]|0;e=c[d+28>>2]|0;if(e>>>0>3){f=+(e>>>1|0)}else{f=1.0}e=b+12|0;g=c[e>>2]|0;do{if((g|0)==102|(g|0)==118|(g|0)==169|(g|0)==295|(g|0)==311|(g|0)==392|(g|0)==345){i=b+300|0;if((c[i>>2]|0)<=0){j=g;break}k=b+320|0;l=b+276|0;m=b+280|0;n=b+316|0;o=d+108|0;p=b+192|0;q=d+56|0;r=d+60|0;s=0.0;t=0;while(1){u=c[k>>2]|0;L14555:do{if((c[u+(t<<6)>>2]|0)==2){v=s}else{w=+h[u+(t<<6)+8>>3];x=c[e>>2]|0;y=(x|0)==392;if(y){z=c[l>>2]|0;A=c[9671]|0;B=A+(c[z+8>>2]|0)|0;C=aa(B-1|0,t-1|0);D=+(B|0);E=(+h[u+(t<<6)+56>>3]- +h[u+(t<<6)+48>>3])/(D*2.0);F=(+((A|0)/2&-1|0)+(w+ +(C+(c[m>>2]|0)|0)))/D+(+h[z+16>>3]+.5)}else{E=s;F=w}z=c[200]|0;w=+h[64664+(z*688&-1)>>3];D=+h[64672+(z*688&-1)>>3];C=w<D;if(C){if(F<w|F>D){v=E;break}}else{if(F<D|F>w){v=E;break}}G=+(c[64768+(z*688&-1)>>2]|0);H=+h[64776+(z*688&-1)>>3];z=~~(G+(F-w)*H+.5);I=+h[u+(t<<6)+16>>3];A=c[144]|0;J=+h[64664+(A*688&-1)>>3];K=+h[64672+(A*688&-1)>>3];B=J<K;if(B){if(I<J|I>K){v=E;break}}else{if(I<K|I>J){v=E;break}}L=+(c[64768+(A*688&-1)>>2]|0);M=+h[64776+(A*688&-1)>>3];A=~~(L+(I-J)*M+.5);I=+h[u+(t<<6)+40>>3];N=+h[u+(t<<6)+32>>3];do{if(B){if(I<J){O=0}else{O=I<=K}if(N<J){P=O;R=10663;break}S=N<=K;if(O){T=S;R=10665}else{U=S;R=10666}}else{if(I<K){V=0}else{V=I<=J}if(N<K){P=V;R=10663;break}S=N<=J;if(V){T=S;R=10665}else{U=S;R=10666}}}while(0);do{if((R|0)==10663){R=0;if(!P){U=0;R=10666;break}W=0;X=~~(L+(I-J)*M+.5);R=10670}else if((R|0)==10665){R=0;B=~~(L+(I-J)*M+.5);if(T){Y=B;R=10669}else{W=0;X=B;R=10670}}}while(0);do{if((R|0)==10666){R=0;Z=K-J;if((I-K)*Z<0.0){B=~~(L+(J-J)*M+.5);if(U){Y=B;R=10669;break}else{W=1;X=B;R=10670;break}}else{B=~~(L+Z*M+.5);if(U){Y=B;R=10669;break}else{W=1;X=B;R=10670;break}}}}while(0);if((R|0)==10669){R=0;_=~~(L+(N-J)*M+.5);$=Y}else if((R|0)==10670){R=0;I=K-J;if((N-K)*I<0.0){ab=J-J}else{ab=I}B=~~(L+ab*M+.5);if((B|0)==(X|0)&W){v=E;break}else{_=B;$=X}}I=+h[u+(t<<6)+56>>3];Z=+h[u+(t<<6)+48>>3];do{if(y){ac=~~(G+(F-E-w)*H+.5);ad=~~(G+(F+E-w)*H+.5)}else{do{if(C){if(I<w){ae=0}else{ae=I<=D}if(Z<w){af=ae;R=10684;break}B=Z<=D;if(ae){ag=B;R=10686}else{ah=B;R=10687}}else{if(I<D){ai=0}else{ai=I<=w}if(Z<D){af=ai;R=10684;break}B=Z<=w;if(ai){ag=B;R=10686}else{ah=B;R=10687}}}while(0);do{if((R|0)==10684){R=0;if(!af){ah=0;R=10687;break}aj=0;ak=~~(G+(I-w)*H+.5);R=10691}else if((R|0)==10686){R=0;B=~~(G+(I-w)*H+.5);if(ag){al=B;R=10690}else{aj=0;ak=B;R=10691}}}while(0);do{if((R|0)==10687){R=0;am=D-w;if((I-D)*am<0.0){B=~~(G+(w-w)*H+.5);if(ah){al=B;R=10690;break}else{aj=1;ak=B;R=10691;break}}else{B=~~(G+am*H+.5);if(ah){al=B;R=10690;break}else{aj=1;ak=B;R=10691;break}}}}while(0);if((R|0)==10690){R=0;an=al;ao=~~(G+(Z-w)*H+.5)}else if((R|0)==10691){R=0;am=D-w;if((Z-D)*am<0.0){ap=w-w}else{ap=am}B=~~(G+ap*H+.5);if((B|0)==(ak|0)&aj){v=E;break L14555}else{an=ak;ao=B}}if((x|0)==392|(x|0)==345){ac=ao;ad=an;break}B=(c[n>>2]|0)+(t<<3)|0;f9(b,B);if((c[e>>2]|0)!=169){ac=ao;ad=an;break}if((c[o>>2]|0)==0){ac=ao;ad=an;break}hG(p);ac=ao;ad=an}}while(0);if((a[30528]&1)==0){cN[c[q>>2]&255](z,_);cN[c[r>>2]&255](z,$);H=+h[7077];if(H<0.0){cN[c[q>>2]&255](ac,_);cN[c[r>>2]&255](ad,_);cN[c[q>>2]&255](ac,$);cN[c[r>>2]&255](ad,$);v=E;break}if(H<=0.0){v=E;break}G=+(z>>>0>>>0);cN[c[q>>2]&255](~~(G-f*H),_);cN[c[r>>2]&255](~~(G+f*+h[7077]),_);cN[c[q>>2]&255](~~(G-f*+h[7077]),$);cN[c[r>>2]&255](~~(G+f*+h[7077]),$);v=E;break}x=ad-ac|0;C=aa(x,x);x=$-_|0;G=+((C+aa(x,x)|0)>>>0>>>0);H=+h[3817];if(G<=f*H*f*H*4.5){v=E;break}x=c[q>>2]|0;if((ac|0)==(ad|0)){cN[x&255](z,_);H=+(A>>>0>>>0);cN[c[r>>2]&255](z,~~(H-f*+h[3817]));cN[c[q>>2]&255](z,~~(H+f*+h[3817]));cN[c[r>>2]&255](z,$)}else{cN[x&255](ac,_);cN[c[r>>2]&255](ad,$)}H=+h[7077];if(H<=0.0){v=E;break}G=+(ac>>>0>>>0);w=+(ad>>>0>>>0);D=+($>>>0>>>0);Z=+(_>>>0>>>0);I=(G-w)/(D-Z+1.0e-10);M=+Q(+(I*I+1.0));L=f*H/M;H=G+L;J=G-L;cN[c[q>>2]&255](~~H,~~(Z+I*(H-G)));cN[c[r>>2]&255](~~J,~~(Z+I*(J-G)));G=f*+h[7077]/M;M=w+G;J=w-G;cN[c[q>>2]&255](~~M,~~(D+I*(M-w)));cN[c[r>>2]&255](~~J,~~(D+I*(J-w)));v=E}}while(0);u=t+1|0;if((u|0)<(c[i>>2]|0)){s=v;t=u}else{break}}j=c[e>>2]|0}else{j=g}}while(0);if(!((j|0)==86|(j|0)==118|(j|0)==279|(j|0)==311)){return}j=b+300|0;if((c[j>>2]|0)<=0){return}g=b+320|0;e=b+316|0;_=d+56|0;$=d+60|0;d=0;do{ad=c[g>>2]|0;do{if((c[ad+(d<<6)>>2]|0)!=2){v=+h[ad+(d<<6)+16>>3];ac=c[144]|0;E=+h[64664+(ac*688&-1)>>3];ap=+h[64672+(ac*688&-1)>>3];if(E<ap){if(v<E|v>ap){break}}else{if(v<ap|v>E){break}}an=~~(+(c[64768+(ac*688&-1)>>2]|0)+(v-E)*+h[64776+(ac*688&-1)>>3]+.5);E=+h[ad+(d<<6)+56>>3];v=+h[ad+(d<<6)+48>>3];ac=c[200]|0;ap=+h[64664+(ac*688&-1)>>3];F=+h[64672+(ac*688&-1)>>3];do{if(ap<F){if(E<ap){aq=0}else{aq=E<=F}if(v<ap){ar=aq;R=10727;break}ao=v<=F;if(aq){as=ao;R=10728}else{at=ao;R=10729}}else{if(E<F){au=0}else{au=E<=ap}if(v<F){ar=au;R=10727;break}ao=v<=ap;if(au){as=ao;R=10728}else{at=ao;R=10729}}}while(0);if((R|0)==10727){R=0;if(ar){as=0;R=10728}else{at=0;R=10729}}do{if((R|0)==10728){R=0;ao=c[64768+(ac*688&-1)>>2]|0;ab=+h[64776+(ac*688&-1)>>3];ak=~~(+(ao|0)+(E-ap)*ab+.5);if(as){av=ab;aw=ao;ax=ak;R=10732}else{ay=0;az=ab;aA=ao;aB=ak;R=10733}}else if((R|0)==10729){R=0;ab=F-ap;ak=c[64768+(ac*688&-1)>>2]|0;s=+(ak|0);if((E-F)*ab<0.0){w=+h[64776+(ac*688&-1)>>3];ao=~~(s+(ap-ap)*w+.5);if(at){av=w;aw=ak;ax=ao;R=10732;break}else{ay=1;az=w;aA=ak;aB=ao;R=10733;break}}else{w=+h[64776+(ac*688&-1)>>3];ao=~~(s+ab*w+.5);if(at){av=w;aw=ak;ax=ao;R=10732;break}else{ay=1;az=w;aA=ak;aB=ao;R=10733;break}}}}while(0);if((R|0)==10732){R=0;aC=~~(+(aw|0)+(v-ap)*av+.5);aD=ax}else if((R|0)==10733){R=0;E=F-ap;if((v-F)*E<0.0){aE=ap-ap}else{aE=E}ac=~~(+(aA|0)+aE*az+.5);if((ac|0)==(aB|0)&ay){break}else{aC=ac;aD=aB}}ac=(c[e>>2]|0)+(d<<3)|0;f9(b,ac);cN[c[_>>2]&255](aC,an);cN[c[$>>2]&255](aD,an);E=+h[7077];if(E<=0.0){break}w=+(an>>>0>>>0);cN[c[_>>2]&255](aC,~~(w-f*E));cN[c[$>>2]&255](aC,~~(w+f*+h[7077]));cN[c[_>>2]&255](aD,~~(w-f*+h[7077]));cN[c[$>>2]&255](aD,~~(w+f*+h[7077]))}}while(0);d=d+1|0;}while((d|0)<(c[j>>2]|0));return}function f$(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0,Y=0.0,Z=0.0,_=0,$=0.0,ab=0.0,ac=0.0,ad=0.0,ae=0,af=0.0,ag=0.0,ah=0.0,ai=0,aj=0.0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0.0,ar=0.0,as=0.0,at=0.0,au=0.0,av=0.0,aw=0.0,ax=0.0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0.0,aL=0.0,aM=0.0,aN=0.0,aO=0.0,aP=0.0,aQ=0.0,aR=0.0,aS=0.0,aT=0,aU=0.0,aV=0,aW=0,aX=0;e=i;i=i+112|0;f=e|0;g=e+56|0;j=c[3524]|0;k=b+12|0;l=b+300|0;do{if((c[k>>2]|0)==392){m=c[l>>2]|0;n=c[9670]|0;do{if((n|0)==1){if((c[b+280>>2]|0)!=0){break}c[3572]=0}else if((n|0)==2){c[3572]=0}}while(0);n=c[3568]|0;if((n|0)!=0){if((c[3572]|0)>=(m|0)){break}o=db(n,m<<6,91376)|0;c[3568]=o;n=c[3572]|0;if((n|0)<(m|0)){p=n;while(1){n=p+1|0;uE(o+(p<<6)+32|0,0,16);if((n|0)<(m|0)){p=n}else{break}}}c[3572]=m;break}p=m<<6;o=ut(p)|0;do{if((o|0)==0){gk();n=ut(p)|0;if((n|0)!=0){q=n;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=91376,v)|0)}else{q=o}}while(0);o=q;c[3568]=o;if((m|0)>0){p=0;while(1){n=p+1|0;uE(o+(p<<6)+32|0,0,16);if((n|0)<(m|0)){p=n}else{break}}}c[3572]=m}}while(0);q=c[l>>2]|0;if((q|0)<=0){i=e;return}p=b+320|0;o=b+276|0;n=g|0;r=g+4|0;s=g+40|0;t=g+44|0;u=g+8|0;w=g+40|0;x=g;y=g+32|0;g=b+200|0;z=f|0;A=f+4|0;B=f+40|0;C=f+44|0;D=f+8|0;E=f;F=f+32|0;G=f+40|0;f=b+280|0;H=b+192|0;I=H|0;J=j+56|0;K=j+60|0;L=j+108|0;M=b+208|0;N=j+64|0;O=b+28|0;P=b+56|0;Q=b+64|0;R=b+196|0;S=b+316|0;T=2;U=0.0;V=0;W=d;d=c[p>>2]|0;X=q;while(1){L14718:do{if((c[d+(V<<6)>>2]|0)>>>0<2){if(+h[d+(V<<6)+24>>3]<0.0){q=(T|0)==2;Y=+h[7030];do{if(q){if(Y<=0.0){Z=0.0;break}if((a[56232]&1)==0){Z=0.0;break}Z=Y*-.5}else{if(Y<0.0){Z=(+h[d+(V-1<<6)+8>>3]- +h[d+(V<<6)+8>>3])*.5;break}if((a[56232]&1)==0){Z=Y*(+h[d+(V-1<<6)+8>>3]- +h[d+(V<<6)+8>>3])*.5;break}else{Z=Y*-.5;break}}}while(0);do{if((V|0)<(X-1|0)){_=V+1|0;if((c[d+(_<<6)>>2]|0)==2){$=-0.0-Z;break}if(Y<0.0){$=(+h[d+(_<<6)+8>>3]- +h[d+(V<<6)+8>>3])*.5;break}if((a[56232]&1)==0){$=Y*(+h[d+(_<<6)+8>>3]- +h[d+(V<<6)+8>>3])*.5;break}else{$=Y*.5;break}}else{$=-0.0-Z}}while(0);if(q){ab=-0.0-$}else{ab=Z}Y=+h[d+(V<<6)+8>>3];ac=ab+Y;ad=$+Y}else{ac=+h[d+(V<<6)+48>>3];ad=+h[d+(V<<6)+56>>3]}_=c[k>>2]|0;if((_|0)==137){Y=+h[d+(V<<6)+32>>3];ae=c[144]|0;af=+h[64664+(ae*688&-1)>>3];ag=+h[64672+(ae*688&-1)>>3];do{if(af<ag){if(Y>ag){ah=ag;break}if(Y>=af){ah=Y;break}ah=af}else{if(Y>af){ah=af;break}if(Y>=ag){ah=Y;break}ah=ag}}while(0);ai=~~(+(c[64768+(ae*688&-1)>>2]|0)+(ah-af)*+h[64776+(ae*688&-1)>>3]+.5);aj=ah;ak=d+(V<<6)+40|0}else{ai=W;aj=U;ak=d+(V<<6)+16|0}ag=+h[ak>>3];do{if((_|0)==392){q=c[o>>2]|0;al=c[q+32>>2]|0;am=((al|0)>0?al:0)+V|0;al=c[9670]|0;if((al|0)==3|(al|0)==4){an=c[9671]|0;ao=an+(c[q+8>>2]|0)|0;ap=aa(ao-1|0,~~+h[d+(V<<6)+8>>3]-1|0);Y=+(ap+(c[f>>2]|0)|0);aq=+((an|0)/2&-1|0);ar=+(ao|0);as=+h[q+16>>3]+.5;at=(aq+(ac+Y))/ar+as;au=aj;av=(aq+(ad+Y))/ar+as;aw=ag;break}else if((al|0)==2){as=+h[q+16>>3];ar=+h[7030]*.5;Y=+(c[f>>2]|0);aq=as-ar+Y;ax=as+ar+Y;if((a[30080]&1)==0){ao=c[n>>2]|0;an=c[8798]|0;ap=(an|0)>0;ay=am;L14771:while(1){az=43264;while(1){aA=c[az>>2]|0;if((aA|0)==0){break}if((c[aA+4>>2]|0)==(ay|0)){aB=10821;break L14771}else{az=aA|0}}aC=ay-1|0;if(!((ay|0)>(an|0)&ap)){aB=10827;break}ay=((aC|0)%(an|0)&-1)+1|0}do{if((aB|0)==10821){aB=0;an=aA+8|0;c[x>>2]=c[an>>2];c[x+4>>2]=c[an+4>>2];c[x+8>>2]=c[an+8>>2];c[x+12>>2]=c[an+12>>2];c[x+16>>2]=c[an+16>>2];c[x+20>>2]=c[an+20>>2];c[x+24>>2]=c[an+24>>2];c[x+28>>2]=c[an+28>>2];c[x+32>>2]=c[an+32>>2];c[x+36>>2]=c[an+36>>2];c[x+40>>2]=c[an+40>>2];c[x+44>>2]=c[an+44>>2];c[x+48>>2]=c[an+48>>2];c[x+52>>2]=c[an+52>>2];c[n>>2]=ao;an=c[3524]|0;if((c[an+96>>2]&1024|0)!=0){c[r>>2]=ay;a[y]=0;aD=an;break}if((a[y]&1)!=0){aD=an;break}c[s>>2]=1;c[t>>2]=c[r>>2];aD=an}else if((aB|0)==10827){aB=0;c[r>>2]=aC;c[s>>2]=1;c[t>>2]=aC;c[u>>2]=aC;aD=c[3524]|0}}while(0);fn(w,aD)}else{ay=am+1|0;ao=c[z>>2]|0;an=43280;while(1){aE=c[an>>2]|0;if((aE|0)==0){aB=10805;break}if((c[aE+4>>2]|0)==(ay|0)){aB=10803;break}else{an=aE|0}}do{if((aB|0)==10803){aB=0;an=aE+8|0;c[E>>2]=c[an>>2];c[E+4>>2]=c[an+4>>2];c[E+8>>2]=c[an+8>>2];c[E+12>>2]=c[an+12>>2];c[E+16>>2]=c[an+16>>2];c[E+20>>2]=c[an+20>>2];c[E+24>>2]=c[an+24>>2];c[E+28>>2]=c[an+28>>2];c[E+32>>2]=c[an+32>>2];c[E+36>>2]=c[an+36>>2];c[E+40>>2]=c[an+40>>2];c[E+44>>2]=c[an+44>>2];c[E+48>>2]=c[an+48>>2];c[E+52>>2]=c[an+52>>2];c[z>>2]=ao;if((a[F]&1)!=0){break}c[B>>2]=1;c[C>>2]=c[A>>2]}else if((aB|0)==10805){aB=0;an=c[8798]|0;ap=(an|0)>0;az=ay;L14794:while(1){aF=43264;while(1){aG=c[aF>>2]|0;if((aG|0)==0){break}if((c[aG+4>>2]|0)==(az|0)){break L14794}else{aF=aG|0}}aH=az-1|0;if(!((az|0)>(an|0)&ap)){aB=10815;break}az=((aH|0)%(an|0)&-1)+1|0}if((aB|0)==10815){aB=0;c[A>>2]=aH;c[B>>2]=1;c[C>>2]=aH;c[D>>2]=aH;break}an=aG+8|0;c[E>>2]=c[an>>2];c[E+4>>2]=c[an+4>>2];c[E+8>>2]=c[an+8>>2];c[E+12>>2]=c[an+12>>2];c[E+16>>2]=c[an+16>>2];c[E+20>>2]=c[an+20>>2];c[E+24>>2]=c[an+24>>2];c[E+28>>2]=c[an+28>>2];c[E+32>>2]=c[an+32>>2];c[E+36>>2]=c[an+36>>2];c[E+40>>2]=c[an+40>>2];c[E+44>>2]=c[an+44>>2];c[E+48>>2]=c[an+48>>2];c[E+52>>2]=c[an+52>>2];c[z>>2]=ao;if((c[(c[3524]|0)+96>>2]&1024|0)!=0){c[A>>2]=az;a[F]=0;break}if((a[F]&1)!=0){break}c[B>>2]=1;c[C>>2]=c[A>>2]}}while(0);fn(G,c[3524]|0)}c[g>>2]=am;aI=0;aJ=c[p>>2]|0;aK=ax;aL=aq}else if((al|0)==1){Y=+h[q+16>>3];aI=V;aJ=d;aK=ad+Y;aL=ac+Y}else{at=ac;au=aj;av=ad;aw=ag;break}Y=+h[aJ+(V<<6)+16>>3];ao=c[3568]|0;if(Y<0.0){ay=ao+(aI<<6)+32|0;ar=+h[ay>>3];h[ay>>3]=Y+ar;aM=ar}else{ay=ao+(aI<<6)+40|0;ar=+h[ay>>3];h[ay>>3]=Y+ar;aM=ar}ar=ag+aM;ay=c[144]|0;Y=+h[64664+(ay*688&-1)>>3];as=+h[64672+(ay*688&-1)>>3];ay=Y<as;if(ay&aM<Y){aB=10835}else{if(as<Y&aM>Y){aB=10835}else{aN=aM}}if((aB|0)==10835){aB=0;aN=Y}if(!(ay&aN>as)){if(!(as<Y&aN<as)){at=aL;au=aN;av=aK;aw=ar;break}}at=aL;au=as;av=aK;aw=ar}else{at=ac;au=aj;av=ad;aw=ag}}while(0);_=c[144]|0;ag=+h[64664+(_*688&-1)>>3];af=+h[64672+(_*688&-1)>>3];do{if(ag<af){if(aw>af){aO=af;break}if(aw>=ag){aO=aw;break}aO=ag}else{if(aw>ag){aO=ag;break}if(aw>=af){aO=aw;break}aO=af}}while(0);ae=c[200]|0;ar=+h[64664+(ae*688&-1)>>3];as=+h[64672+(ae*688&-1)>>3];do{if(ar<as){do{if(av>as){aP=as}else{if(av>=ar){aP=av;break}aP=ar}}while(0);if(at>as){aQ=as;aR=aP;break}if(at>=ar){aQ=at;aR=aP;break}aQ=ar;aR=aP}else{do{if(av>ar){aS=ar}else{if(av>=as){aS=av;break}aS=as}}while(0);if(at>ar){aQ=ar;aR=aS;break}if(at>=as){aQ=at;aR=aS;break}aQ=as;aR=aS}}while(0);if(aR==aQ){if(aR==ar|aR==as){aT=ai;aU=au;break}}aq=+(c[64768+(ae*688&-1)>>2]|0);ax=+h[64776+(ae*688&-1)>>3];q=~~(aq+(aQ-ar)*ax+.5);al=~~(aq+(aR-ar)*ax+.5);ax=+(c[64768+(_*688&-1)>>2]|0);aq=+h[64776+(_*688&-1)>>3];am=~~(ax+(aO-ag)*aq+.5);if((ai|0)==(am|0)){if(aO==ag|aO==af){aT=ai;aU=au;break}}ay=c[k>>2]|0;do{if((ay|0)==153|(ay|0)==137|(ay|0)==169){ao=(c[S>>2]|0)+(V<<3)|0;f9(b,ao);aV=ai}else if((ay|0)==392){if(((c[9670]|0)-1|0)>>>0>=2){aV=ai;break}aV=~~(ax+(au-ag)*aq+.5)}else{aV=ai}}while(0);ay=c[I>>2]|0;do{if((ay|0)!=0){_=c[L>>2]|0;if((_|0)==0){break}ae=al-q|0;ao=am-aV|0;an=(ae|0)<0;ap=an?al:q;aF=(an?q-al|0:ae)+1|0;ae=(ao|0)<0;an=ae?am:aV;aW=(ae?aV-am|0:ao)+1|0;if((ay|0)==1|(ay|0)==4){aX=(c[R>>2]<<4&65520)+ay|0}else if((ay|0)==2|(ay|0)==5){aX=(c[g>>2]<<4&65520)+ay|0}else{aX=0}cI[_&63](aX,ap,an,aF,aW);if(!(hG(H)|0)){aT=ai;aU=au;break L14718}}}while(0);ay=c[(c[3524]|0)+172>>2]|0;if((ay|0)!=0){cM[ay&511](0)}cN[c[J>>2]&255](q,aV);cN[c[K>>2]&255](q,am);cN[c[K>>2]&255](al,am);cN[c[K>>2]&255](al,aV);cN[c[K>>2]&255](q,aV);ay=c[(c[3524]|0)+172>>2]|0;if((ay|0)!=0){cM[ay&511](1)}if((c[L>>2]|0)==0){aT=ai;aU=au;break}if((c[M>>2]|0)==0){aT=ai;aU=au;break}cM[c[N>>2]&511](c[O>>2]|0);if((a[P]&1)==0){aT=ai;aU=au;break}fn(Q,j);aT=ai;aU=au}else{aT=W;aU=U}}while(0);m=c[p>>2]|0;ay=V+1|0;aW=c[l>>2]|0;if((ay|0)<(aW|0)){T=c[m+(V<<6)>>2]|0;U=aU;V=ay;W=aT;d=m;X=aW}else{break}}i=e;return}function f0(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0;if((c[(c[3524]|0)+148>>2]|0)==0){f_(b);return}d=b+300|0;if(((c[d>>2]|0)-1|0)<=0){return}e=b+320|0;f=0;while(1){g=c[e>>2]|0;i=f+1|0;do{if((c[g+(f<<6)>>2]|0)!=2){if((c[g+(i<<6)>>2]|0)==2){break}j=+h[g+(f<<6)+8>>3];k=+h[g+(f<<6)+56>>3];l=+h[g+(f<<6)+16>>3];m=+h[g+(f<<6)+40>>3];n=+h[g+(i<<6)+8>>3];o=+h[g+(i<<6)+56>>3];p=+h[g+(i<<6)+16>>3];q=+h[g+(i<<6)+40>>3];if((a[30528]&1)==0){r=m-l;if(r*(q-p)<0.0){s=p-q;t=(n*r+j*s)/(r+s);s=m+(q-m)*(t-j)/(n-j);gh(j,k,l,m,t,t,s,s,b);gh(t,t,s,s,n,o,p,q,b);break}else{gh(j,k,l,m,n,o,p,q,b);break}}else{s=(p-l)/(n-j);t=(q-m)/(o-k);r=l-j*s;u=(m-k*t-r)/(s-t);t=r+s*u;if((j-u)*(u-n)>0.0){gh(j,k,l,m,u,u,t,t,b);gh(u,u,t,t,n,o,p,q,b);break}else{gh(j,k,l,m,n,o,p,q,b);break}}}}while(0);if((i|0)<((c[d>>2]|0)-1|0)){f=i}else{break}}return}function f1(a){a=a|0;var b=0,d=0,e=0,f=0.0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0,D=0.0,E=0,F=0,G=0,H=0.0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0,O=0;b=c[3524]|0;d=c[b+28>>2]|0;e=d>>>0<8;if(e){f=e?1.0:0.0}else{f=+(d>>>2|0)}d=a+300|0;if((c[d>>2]|0)<=0){return}e=a+320|0;g=a+316|0;i=b+56|0;j=b+60|0;b=a+12|0;k=0;do{l=c[e>>2]|0;do{if((c[l+(k<<6)>>2]|0)!=2){m=+h[l+(k<<6)+8>>3];n=c[200]|0;o=+h[64664+(n*688&-1)>>3];p=+h[64672+(n*688&-1)>>3];if(o<p){if(m<o|m>p){break}}else{if(m<p|m>o){break}}q=~~(+(c[64768+(n*688&-1)>>2]|0)+(m-o)*+h[64776+(n*688&-1)>>3]+.5);o=+h[l+(k<<6)+40>>3];m=+h[l+(k<<6)+32>>3];p=+h[l+(k<<6)+24>>3];r=+h[l+(k<<6)+16>>3];n=c[144]|0;s=+h[64664+(n*688&-1)>>3];t=+h[64672+(n*688&-1)>>3];do{if(s<t){if(o<s){u=0}else{u=o<=t}if(m<s){v=u;w=10920;break}x=m<=t;if(u){y=x;w=10921}else{z=x;w=10922}}else{if(o<t){A=0}else{A=o<=s}if(m<t){v=A;w=10920;break}x=m<=s;if(A){y=x;w=10921}else{z=x;w=10922}}}while(0);if((w|0)==10920){w=0;if(v){y=0;w=10921}else{z=0;w=10922}}do{if((w|0)==10921){w=0;x=c[64768+(n*688&-1)>>2]|0;B=+h[64776+(n*688&-1)>>3];C=~~(+(x|0)+(o-s)*B+.5);if(y){D=B;E=x;F=C;w=10925}else{G=0;H=B;I=x;J=C;w=10926}}else if((w|0)==10922){w=0;B=t-s;C=c[64768+(n*688&-1)>>2]|0;K=+(C|0);if((o-t)*B<0.0){L=+h[64776+(n*688&-1)>>3];x=~~(K+(s-s)*L+.5);if(z){D=L;E=C;F=x;w=10925;break}else{G=1;H=L;I=C;J=x;w=10926;break}}else{L=+h[64776+(n*688&-1)>>3];x=~~(K+B*L+.5);if(z){D=L;E=C;F=x;w=10925;break}else{G=1;H=L;I=C;J=x;w=10926;break}}}}while(0);if((w|0)==10926){w=0;o=t-s;if((m-t)*o<0.0){M=s-s}else{M=o}n=~~(+(I|0)+M*H+.5);if((n|0)==(J|0)&G){break}else{N=n;O=J}}else if((w|0)==10925){w=0;N=~~(+(E|0)+(m-s)*D+.5);O=F}n=(c[g>>2]|0)+(k<<3)|0;f9(a,n);cN[c[i>>2]&255](q,N);cN[c[j>>2]&255](q,O);o=+(q>>>0>>>0);n=c[144]|0;cN[c[i>>2]&255](~~(o-f*+h[7077]),~~(+(c[64768+(n*688&-1)>>2]|0)+(r- +h[64664+(n*688&-1)>>3])*+h[64776+(n*688&-1)>>3]+.5));n=c[144]|0;cN[c[j>>2]&255](q,~~(+(c[64768+(n*688&-1)>>2]|0)+(r- +h[64664+(n*688&-1)>>3])*+h[64776+(n*688&-1)>>3]+.5));n=c[144]|0;cN[c[i>>2]&255](~~(o+f*+h[7077]),~~(+(c[64768+(n*688&-1)>>2]|0)+(p- +h[64664+(n*688&-1)>>3])*+h[64776+(n*688&-1)>>3]+.5));n=c[144]|0;cN[c[j>>2]&255](q,~~(+(c[64768+(n*688&-1)>>2]|0)+(p- +h[64664+(n*688&-1)>>3])*+h[64776+(n*688&-1)>>3]+.5));if((c[b>>2]|0)!=474){break}n=c[144]|0;x=~~(+(c[64768+(n*688&-1)>>2]|0)+(+h[(c[e>>2]|0)+(k<<6)+56>>3]- +h[64664+(n*688&-1)>>3])*+h[64776+(n*688&-1)>>3]+.5);cN[c[i>>2]&255](~~(o-f*+h[7077]),x);cN[c[j>>2]&255](~~(o+f*+h[7077]),x)}}while(0);k=k+1|0;}while((k|0)<(c[d>>2]|0));return}function f2(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0.0,J=0.0,K=0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0,S=0.0,T=0.0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0.0,ab=0,ac=0,ad=0.0,ae=0,af=0,ag=0,ah=0.0,ai=0,aj=0,ak=0.0,al=0.0,am=0.0,an=0,ao=0,ap=0,aq=0.0,ar=0,as=0,at=0.0,au=0.0,av=0.0,aw=0.0,ax=0.0,ay=0.0,az=0.0,aA=0.0,aB=0.0,aC=0.0,aD=0.0,aE=0.0,aF=0.0,aG=0.0,aH=0,aI=0,aJ=0,aK=0,aL=0.0,aM=0.0,aN=0,aO=0,aP=0.0,aQ=0,aR=0,aS=0.0,aT=0,aU=0,aV=0,aW=0;d=c[3524]|0;e=c[d+28>>2]|0;f=e>>>0<8;if(f){g=f?1.0:0.0}else{g=+(e>>>2|0)}e=b+300|0;f=c[e>>2]|0;if((f|0)<=0){return}i=b+320|0;j=b+192|0;k=b+208|0;l=d+64|0;m=b+28|0;n=b+56|0;o=b+64|0;p=b+316|0;q=d+56|0;r=d+60|0;s=b+12|0;t=b+144|0;u=b+152|0;v=j|0;w=d+108|0;x=b+196|0;y=b+200|0;z=b+212|0;A=2;B=0;C=c[i>>2]|0;D=f;while(1){do{if((c[C+(B<<6)>>2]|0)==2){E=A;F=C;G=D}else{H=+h[C+(B<<6)+8>>3];f=c[200]|0;I=+h[64664+(f*688&-1)>>3];J=+h[64672+(f*688&-1)>>3];K=I<J;if(K){if(H<I|H>J){E=A;F=C;G=D;break}}else{if(H<J|H>I){E=A;F=C;G=D;break}}L=+(c[64768+(f*688&-1)>>2]|0);M=+h[64776+(f*688&-1)>>3];f=~~(L+(H-I)*M+.5);N=+h[C+(B<<6)+40>>3];O=+h[C+(B<<6)+32>>3];P=+h[C+(B<<6)+24>>3];Q=+h[C+(B<<6)+16>>3];R=N<O;S=R?O:N;T=R?N:O;R=c[144]|0;O=+h[64664+(R*688&-1)>>3];N=+h[64672+(R*688&-1)>>3];U=O<N;do{if(U){if(S<O){V=0}else{V=S<=N}if(T<O){W=V;X=10952;break}Y=T<=N;if(V){Z=Y;X=10953}else{_=Y;X=10954}}else{if(S<N){$=0}else{$=S<=O}if(T<N){W=$;X=10952;break}Y=T<=O;if($){Z=Y;X=10953}else{_=Y;X=10954}}}while(0);if((X|0)==10952){X=0;if(W){Z=0;X=10953}else{_=0;X=10954}}do{if((X|0)==10953){X=0;Y=c[64768+(R*688&-1)>>2]|0;aa=+h[64776+(R*688&-1)>>3];ab=~~(+(Y|0)+(S-O)*aa+.5);if(Z){ac=1;ad=aa;ae=Y;af=ab;X=10957}else{ag=1;ah=aa;ai=Y;aj=ab;X=10958}}else if((X|0)==10954){X=0;aa=N-O;ab=c[64768+(R*688&-1)>>2]|0;ak=+(ab|0);if((S-N)*aa<0.0){al=+h[64776+(R*688&-1)>>3];Y=~~(ak+(O-O)*al+.5);if(_){ac=0;ad=al;ae=ab;af=Y;X=10957;break}else{ag=0;ah=al;ai=ab;aj=Y;X=10958;break}}else{al=+h[64776+(R*688&-1)>>3];Y=~~(ak+aa*al+.5);if(_){ac=0;ad=al;ae=ab;af=Y;X=10957;break}else{ag=0;ah=al;ai=ab;aj=Y;X=10958;break}}}}while(0);if((X|0)==10958){X=0;S=N-O;if((T-N)*S<0.0){am=O-O}else{am=S}R=~~(+(ai|0)+am*ah+.5);if((R|0)==(aj|0)&(ag^1)){E=A;F=C;G=D;break}else{an=R;ao=0;ap=ag;aq=ah;ar=ai;as=aj}}else if((X|0)==10957){X=0;an=~~(+(ae|0)+(T-O)*ad+.5);ao=1;ap=ac;aq=ad;ar=ae;as=af}S=+h[C+(B<<6)+48>>3];do{if(S!=H){al=H*2.0-S;do{if(K){do{if(al>J){at=J}else{if(al>=I){at=al;break}at=I}}while(0);if(S>J){au=J;av=at;break}if(S>=I){au=S;av=at;break}au=I;av=at}else{do{if(al>I){aw=I}else{if(al>=J){aw=al;break}aw=J}}while(0);if(S>I){au=I;av=aw;break}if(S>=J){au=S;av=aw;break}au=J;av=aw}}while(0);ax=L+(au-I)*M+.5;ay=L+(av-I)*M+.5}else{if((c[s>>2]|0)==474){al=+h[7030];if((a[56232]&1)!=0&al>0.0){az=al*.5}else{az=.25}ax=L+(H-az-I)*M+.5;ay=L+(H+az-I)*M+.5;break}al=+h[7030];if(al<0.0){aa=+(f|0);ak=g*+h[7077];ax=aa-ak;ay=aa+ak;break}ak=al*-.5;R=(A|0)==2;do{if(R){aA=ak}else{if((a[56232]&1)!=0){aA=ak;break}aA=al*(+h[C+(B-1<<6)+8>>3]-H)*.5}}while(0);ak=-0.0-aA;do{if((B|0)<(D-1|0)){Y=B+1|0;if((c[C+(Y<<6)>>2]|0)==2){aB=ak;break}if((a[56232]&1)==0){aB=(+h[C+(Y<<6)+8>>3]-H)*al*.5;break}else{aB=al*.5;break}}else{aB=ak}}while(0);if(R){aC=-0.0-aB}else{aC=aA}ak=H+aC;al=H+aB;do{if(K){do{if(al>J){aD=J}else{if(al>=I){aD=al;break}aD=I}}while(0);if(ak>J){aE=J;aF=aD;break}if(ak>=I){aE=ak;aF=aD;break}aE=I;aF=aD}else{do{if(al>I){aG=I}else{if(al>=J){aG=al;break}aG=J}}while(0);if(ak>I){aE=I;aF=aG;break}if(ak>=J){aE=ak;aF=aG;break}aE=J;aF=aG}}while(0);ax=L+(aE-I)*M+.5;ay=L+(aF-I)*M+.5}}while(0);K=~~ax;R=~~ay;do{if((R-K&1|0)==0){aH=R;aI=f}else{Y=R+1|0;ab=(((f-K|0)>(Y-f|0))<<31>>31)+f|0;if((ab-K|0)>=(Y-ab|0)){aH=Y;aI=ab;break}aH=Y;aI=ab+1|0}}while(0);do{if(U){if(Q<O){aJ=0}else{aJ=Q<=N}if(P<O){aK=0}else{aK=P<=N}do{if(Q>N){aL=N}else{if(Q>=O){aL=Q;break}aL=O}}while(0);if(P>N){aM=N;aN=aK;aO=aJ;aP=aL;break}if(P>=O){aM=P;aN=aK;aO=aJ;aP=aL;break}aM=O;aN=aK;aO=aJ;aP=aL}else{if(Q<N){aQ=0}else{aQ=Q<=O}if(P<N){aR=0}else{aR=P<=O}do{if(Q>O){aS=O}else{if(Q>=N){aS=Q;break}aS=N}}while(0);if(P>O){aM=O;aN=aR;aO=aQ;aP=aS;break}if(P>=N){aM=P;aN=aR;aO=aQ;aP=aS;break}aM=N;aN=aR;aO=aQ;aP=aS}}while(0);N=+(ar|0);U=~~(N+(aP-O)*aq+.5);f=~~(N+(aM-O)*aq+.5);R=(U|0)<(f|0);ab=R?U:f;Y=R?f:U;U=(ab|0)==(Y|0)&((aO|aN)^1);f=c[k>>2]|0;if((f|0)==1){if((c[z>>2]|0)!=-3){X=11032}}else if((f|0)!=0){X=11032}do{if((X|0)==11032){X=0;cM[c[l>>2]&511](c[m>>2]|0);if((a[n]&1)==0){break}fn(o,d)}}while(0);f=(c[p>>2]|0)+(B<<3)|0;f9(b,f);do{if(!((c[(c[3524]|0)+108>>2]|0)==0|U)){f=c[v>>2]|0;if((f|0)==2|(f|0)==5){aT=(c[y>>2]<<4&65520)+f|0}else if((f|0)==1|(f|0)==4){aT=(c[x>>2]<<4&65520)+f|0}else{aT=0}if(!((aT|0)!=0|aP>aM)){break}if((aT|0)==0){aU=(c[s>>2]|0)==474?0:1601}else{aU=aT}cI[c[w>>2]&63](aU,K,ab,aH-K|0,Y-ab|0);f=c[v>>2]|0;if((f|0)==2|(f|0)==5){aV=y}else if((f|0)==1|(f|0)==4){aV=x}else{break}if((c[aV>>2]<<4&65520|0)==(-f|0)){break}hG(j)}}while(0);cN[c[q>>2]&255](aI,an);cN[c[r>>2]&255](aI,ab);cN[c[q>>2]&255](aI,Y);cN[c[r>>2]&255](aI,as);do{if(!U){f=c[(c[3524]|0)+172>>2]|0;if((f|0)!=0){cM[f&511](0)}f=c[144]|0;cN[c[q>>2]&255](K,~~(+(c[64768+(f*688&-1)>>2]|0)+(aP- +h[64664+(f*688&-1)>>3])*+h[64776+(f*688&-1)>>3]+.5));f=c[144]|0;cN[c[r>>2]&255](aH,~~(+(c[64768+(f*688&-1)>>2]|0)+(aP- +h[64664+(f*688&-1)>>3])*+h[64776+(f*688&-1)>>3]+.5));f=c[144]|0;cN[c[r>>2]&255](aH,~~(+(c[64768+(f*688&-1)>>2]|0)+(aM- +h[64664+(f*688&-1)>>3])*+h[64776+(f*688&-1)>>3]+.5));f=c[144]|0;cN[c[r>>2]&255](K,~~(+(c[64768+(f*688&-1)>>2]|0)+(aM- +h[64664+(f*688&-1)>>3])*+h[64776+(f*688&-1)>>3]+.5));f=c[144]|0;cN[c[r>>2]&255](K,~~(+(c[64768+(f*688&-1)>>2]|0)+(aP- +h[64664+(f*688&-1)>>3])*+h[64776+(f*688&-1)>>3]+.5));f=c[(c[3524]|0)+172>>2]|0;if((f|0)==0){break}cM[f&511](1)}}while(0);do{if((c[s>>2]|0)==474){O=+h[7077];if(O<0.0){aW=0;X=11056;break}aW=~~(+(aH-K|0)*.5-O*+((c[(c[3524]|0)+28>>2]|0)>>>0>>>0));X=11056}else{if((c[t>>2]|0)!=3){break}O=+h[u>>3];if(O<=0.0){aW=0;X=11056;break}aW=~~(+(aH-K|0)*(1.0-O)*.5);X=11056}}while(0);do{if((X|0)==11056){X=0;if(ap){cN[c[q>>2]&255](aW+K|0,as);cN[c[r>>2]&255](aH-aW|0,as)}if(!ao){break}cN[c[q>>2]&255](aW+K|0,an);cN[c[r>>2]&255](aH-aW|0,an)}}while(0);if((c[s>>2]|0)==474){U=c[144]|0;f=~~(+(c[64768+(U*688&-1)>>2]|0)+(+h[(c[i>>2]|0)+(B<<6)+56>>3]- +h[64664+(U*688&-1)>>3])*+h[64776+(U*688&-1)>>3]+.5);cN[c[q>>2]&255](K,f);cN[c[r>>2]&255](aH,f)}do{if(aP>aM){if((c[(c[3524]|0)+108>>2]|0)!=0){break}cN[c[q>>2]&255](aI,ab);cN[c[r>>2]&255](aI,Y);f=(aI+K|0)/2&-1;cN[c[q>>2]&255](f,ab);cN[c[r>>2]&255](f,Y);f=(aH+aI|0)/2&-1;cN[c[q>>2]&255](f,ab);cN[c[r>>2]&255](f,Y)}}while(0);Y=c[i>>2]|0;E=c[Y+(B<<6)>>2]|0;F=Y;G=c[e>>2]|0}}while(0);Y=B+1|0;if((Y|0)<(G|0)){A=E;B=Y;C=F;D=G}else{break}}return}function f3(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0,$=0,ab=0.0,ac=0.0,ad=0.0,ae=0.0,af=0.0,ag=0.0,ah=0,ai=0.0,aj=0,ak=0.0,al=0,am=0,an=0.0,ao=0.0,ap=0,aq=0.0,ar=0.0,as=0.0,at=0.0,au=0,av=0,aw=0.0,ax=0.0,ay=0,az=0.0,aA=0.0,aB=0.0,aC=0,aD=0.0,aE=0.0,aF=0.0,aG=0.0,aH=0.0,aI=0.0,aJ=0.0,aK=0.0,aL=0.0,aM=0.0,aN=0.0,aO=0,aP=0,aQ=0.0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aY=0,aZ=0,a_=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0.0,a5=0.0,a6=0.0,a7=0.0,a8=0,a9=0,ba=0,bb=0,bc=0,bd=0,be=0,bf=0,bg=0,bh=0,bi=0,bj=0,bk=0,bl=0,bm=0,bn=0,bo=0,bp=0.0,bq=0.0,br=0.0,bs=0.0,bt=0,bu=0,bv=0,bw=0,bx=0,by=0,bz=0.0,bA=0.0,bB=0.0,bC=0.0,bD=0.0,bE=0.0,bF=0.0,bG=0.0,bH=0.0,bI=0.0,bJ=0.0,bK=0.0,bL=0.0,bM=0.0,bN=0.0,bO=0.0,bP=0.0,bQ=0.0,bR=0.0,bS=0.0,bT=0.0,bU=0.0,bV=0.0,bW=0.0,bX=0.0,bY=0.0,bZ=0.0,b_=0,b$=0,b0=0,b1=0.0,b2=0.0,b3=0,b4=0,b5=0.0,b6=0.0,b7=0,b8=0.0,b9=0,ca=0.0,cb=0;e=i;i=i+256|0;f=e|0;g=e+16|0;j=e+32|0;k=e+48|0;l=e+96|0;m=e+192|0;uE(j|0,-1|0,16);n=((c[b+8>>2]|0)-2|0)>>>0<2;if(n){o=c[b+260>>2]|0;p=o+12|0;q=o+8|0}else{p=b+320|0;q=b+300|0}o=c[p>>2]|0;p=c[q>>2]|0;q=c[b+228>>2]|0;if((p|0)<1){uh(-1,207376,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);i=e;return}if((p|0)<4){uh(-1,203152,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);i=e;return}r=c[200]|0;s=a[64788+(r*688&-1)|0]|0;t=(s&1)==0;L15142:do{if(n){do{if(t){u=c[144]|0;if((a[64788+(u*688&-1)|0]&1)!=0){break}if((a[64788+((c[34]|0)*688&-1)|0]&1)!=0){break}w=+h[64664+(r*688&-1)>>3];x=+h[91];y=+h[96];z=(+h[o+8>>3]-w)*x+y+-1.0;A=+h[64664+(u*688&-1)>>3];B=+h[21];C=+h[68];D=(+h[o+16>>3]-A)*B+C+-1.0;E=+h[5279];F=+h[2];G=+h[12];H=(+h[o+24>>3]-E)*F+G+-1.0;I=+h[403];J=+h[391];K=+h[395];L=+h[399];M=+h[404];N=+h[392];O=+h[396];Q=+h[400];R=+h[406];S=+h[394];T=+h[398];U=+h[402];V=R+z*S+D*T+H*U;W=V==0.0?1.0e-5:V;V=+(c[180]|0);u=c[186]|0;X=+(c[40]|0);Y=c[46]|0;$=p-1|0;ab=y+x*(+h[o+($<<6)+8>>3]-w)+-1.0;w=C+B*(+h[o+($<<6)+16>>3]-A)+-1.0;A=G+F*(+h[o+($<<6)+24>>3]-E)+-1.0;E=R+S*ab+T*w+U*A;U=E==0.0?1.0e-5:E;ac=+(~~(V*((I+J*ab+K*w+L*A)/U))+u|0);ad=+(~~(X*((M+N*ab+O*w+Q*A)/U))+Y|0);ae=+(~~((I+z*J+D*K+H*L)/W*V)+u|0);af=+(~~((M+z*N+D*O+H*Q)/W*X)+Y|0);break L15142}}while(0);uh(-1,198096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);i=e;return}else{do{if(t){if((a[64788+((c[144]|0)*688&-1)|0]&1)!=0){break}Y=p-1|0;ac=+h[o+(Y<<6)+8>>3];ad=+h[o+(Y<<6)+16>>3];ae=+h[o+8>>3];af=+h[o+16>>3];break L15142}}while(0);Y=c[b+304>>2]|0;u=(a[64788+(Y*688&-1)|0]&1)==0;X=+h[o+8>>3];if(u){ag=X}else{ag=+Z(+(X*+h[64800+(Y*688&-1)>>3]))}$=c[b+308>>2]|0;ah=(a[64788+($*688&-1)|0]&1)==0;X=+h[o+16>>3];if(ah){ai=X}else{ai=+Z(+(X*+h[64800+($*688&-1)>>3]))}aj=p-1|0;X=+h[o+(aj<<6)+8>>3];if(u){ak=X}else{ak=+Z(+(X*+h[64800+(Y*688&-1)>>3]))}X=+h[o+(aj<<6)+16>>3];if(ah){ac=ak;ad=X;ae=ag;af=ai;break}ac=ak;ad=+Z(+(X*+h[64800+($*688&-1)>>3]));ae=ag;af=ai}}while(0);ai=af-ad;ag=ac-ae;L15166:do{if((p|0)>1){t=64664+(r*688&-1)|0;ak=+h[91];X=+h[96];$=c[144]|0;ah=64664+($*688&-1)|0;W=+h[21];Q=+h[68];H=+h[5279];O=+h[2];D=+h[12];N=+h[403];z=+h[391];M=+h[395];V=+h[399];L=+h[404];K=+h[392];J=+h[396];I=+h[400];U=+h[406];A=+h[394];w=+h[398];ab=+h[402];E=+(c[180]|0);aj=c[186]|0;T=+(c[40]|0);Y=c[46]|0;u=64788+($*688&-1)|0;$=b+304|0;al=b+308|0;S=ag;R=ai;F=-0.0-(ae*ai+af*ag);am=1;L15168:while(1){L15170:do{if(n){G=(+h[o+(am<<6)+8>>3]- +h[t>>3])*ak+X+-1.0;B=(+h[o+(am<<6)+16>>3]- +h[ah>>3])*W+Q+-1.0;C=(+h[o+(am<<6)+24>>3]-H)*O+D+-1.0;x=U+G*A+B*w+C*ab;y=x==0.0?1.0e-5:x;an=+(~~((N+G*z+B*M+C*V)/y*E)+aj|0);ao=+(~~((L+G*K+B*J+C*I)/y*T)+Y|0)}else{do{if((s&1)==0){if((a[u]&1)!=0){break}an=+h[o+(am<<6)+8>>3];ao=+h[o+(am<<6)+16>>3];break L15170}}while(0);ap=c[$>>2]|0;y=+h[o+(am<<6)+8>>3];if((a[64788+(ap*688&-1)|0]&1)==0){aq=y}else{aq=+Z(+(y*+h[64800+(ap*688&-1)>>3]))}ap=c[al>>2]|0;y=+h[o+(am<<6)+16>>3];if((a[64788+(ap*688&-1)|0]&1)==0){an=aq;ao=y;break}an=aq;ao=+Z(+(y*+h[64800+(ap*688&-1)>>3]))}}while(0);ap=F+(S*ao+R*an)<0.0;do{if((am|0)==1){if(!ap){ar=F;as=R;at=S;break}ar=-0.0-F;as=-0.0-R;at=-0.0-S}else{if(ap){break L15168}else{ar=F;as=R;at=S}}}while(0);ap=am+1|0;if((ap|0)<(p|0)){S=at;R=as;F=ar;am=ap}else{au=11111;break L15166}}if((am|0)==(p|0)){au=11111}else{av=am}}else{au=11111}}while(0);if((au|0)==11111){uh(-1,186832,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);av=p}s=(p|0)/(av|0)&-1;if(+(s|0)!=+(p|0)/+(av|0)){uh(-1,181552,(v=i,i=i+16|0,c[v>>2]=p,c[v+8>>2]=av,v)|0);i=e;return}c[j>>2]=0;r=av-1|0;c[j+4>>2]=r;c[j+12>>2]=p-1;al=p-av|0;c[j+8>>2]=al;L15195:do{if(n){$=c[200]|0;ar=(+h[o+(r<<6)+8>>3]- +h[64664+($*688&-1)>>3])*+h[91]+ +h[96]+-1.0;as=(+h[o+(r<<6)+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;at=(+h[o+(r<<6)+24>>3]- +h[5279])*+h[2]+ +h[12]+-1.0;an=+h[406]+ar*+h[394]+as*+h[398]+at*+h[402];ao=an==0.0?1.0e-5:an;aw=+(~~((+h[403]+ar*+h[391]+as*+h[395]+at*+h[399])/ao*+(c[180]|0))+(c[186]|0)|0);ax=+(~~((+h[404]+ar*+h[392]+as*+h[396]+at*+h[400])/ao*+(c[40]|0))+(c[46]|0)|0);ay=$}else{$=c[200]|0;do{if((a[64788+($*688&-1)|0]&1)==0){if((a[64788+((c[144]|0)*688&-1)|0]&1)!=0){break}aw=+h[o+(r<<6)+8>>3];ax=+h[o+(r<<6)+16>>3];ay=$;break L15195}}while(0);am=c[b+304>>2]|0;ao=+h[o+(r<<6)+8>>3];if((a[64788+(am*688&-1)|0]&1)==0){az=ao}else{az=+Z(+(ao*+h[64800+(am*688&-1)>>3]))}am=c[b+308>>2]|0;ao=+h[o+(r<<6)+16>>3];if((a[64788+(am*688&-1)|0]&1)==0){aw=az;ax=ao;ay=$;break}aw=az;ax=+Z(+(ao*+h[64800+(am*688&-1)>>3]));ay=$}}while(0);az=+(r|0);ao=(aw-ae)/az;ae=(ax-af)/az;am=s-1|0;af=+(am|0);at=(ac-aw)/af;aw=(ad-ax)/af;if(d){ax=+(r<<1|0);ad=+(am<<1|0);am=b+304|0;d=b+308|0;u=b+23|0;Y=0;do{do{if((a[64788+(ay*688&-1)|0]&1)==0){if((a[64788+((c[144]|0)*688&-1)|0]&1)!=0){au=11127;break}aj=c[j+(Y<<2)>>2]|0;ac=+h[o+(aj<<6)+8>>3];as=+h[o+(aj<<6)+16>>3];aj=c[j+(((5-Y|0)%4&-1)<<2)>>2]|0;ah=c[j+(((Y+2|0)%4&-1)<<2)>>2]|0;aA=ac-(+h[o+(aj<<6)+8>>3]-ac)/ax-(+h[o+(ah<<6)+8>>3]-ac)/ad;aB=as-(+h[o+(aj<<6)+16>>3]-as)/ax-(+h[o+(ah<<6)+16>>3]-as)/ad;aC=c[am>>2]|0}else{au=11127}}while(0);if((au|0)==11127){au=0;$=c[am>>2]|0;ah=(a[64788+($*688&-1)|0]&1)==0;as=+h[o+(Y<<6)+8>>3];if(ah){aD=as}else{aD=+Z(+(as*+h[64800+($*688&-1)>>3]))}aj=c[d>>2]|0;t=(a[64788+(aj*688&-1)|0]&1)==0;ac=+h[o+(Y<<6)+16>>3];if(t){aE=ac}else{aE=+Z(+(ac*+h[64800+(aj*688&-1)>>3]))}ap=(5-Y|0)%4&-1;ar=+h[o+(ap<<6)+8>>3];if(ah){aF=as;aG=ar}else{an=+h[64800+($*688&-1)>>3];aq=+Z(+(ar*an));aF=+Z(+(as*an));aG=aq}aq=+h[o+(ap<<6)+16>>3];if(t){aH=ac;aI=aq}else{an=+h[64800+(aj*688&-1)>>3];ar=+Z(+(aq*an));aH=+Z(+(ac*an));aI=ar}ap=(Y+2|0)%4&-1;ar=+h[o+(ap<<6)+8>>3];if(ah){aJ=as;aK=ar}else{an=+h[64800+($*688&-1)>>3];aq=+Z(+(ar*an));aJ=+Z(+(as*an));aK=aq}aq=+h[o+(ap<<6)+16>>3];if(t){aL=ac;aM=aq}else{an=+h[64800+(aj*688&-1)>>3];as=+Z(+(aq*an));aL=+Z(+(ac*an));aM=as}aA=aD-(aG-aF)/ax-(aK-aJ)/ad;aB=aE-(aI-aH)/ax-(aM-aL)/ad;aC=$}L15235:do{if((aC|0)!=99){if(!(aA>-8.988465674311579e+307&aA<8.988465674311579e+307)){break}if((a[64788+(aC*688&-1)|0]&1)==0){aN=aA}else{if(aA<=0.0){break}as=+_(+aA);aN=as/+h[64800+(aC*688&-1)>>3]}if((a[u]&1)!=0|(aC|0)<0){break}$=64712+(aC*688&-1)|0;if(aN<+h[$>>3]){h[$>>3]=aN;aO=c[am>>2]|0}else{aO=aC}$=64664+(aO*688&-1)|0;do{if(aN<+h[$>>3]){if((c[64648+(aO*688&-1)>>2]&1|0)==0){break L15235}if((c[64728+(aO*688&-1)>>2]&1|0)==0){h[$>>3]=aN;break}as=+h[64736+(aO*688&-1)>>3];if(as>aN){h[$>>3]=as;break L15235}else{h[$>>3]=aN;break}}}while(0);$=c[am>>2]|0;aj=64720+($*688&-1)|0;if(aN>+h[aj>>3]){h[aj>>3]=aN;aP=c[am>>2]|0}else{aP=$}$=64672+(aP*688&-1)|0;if(aN<=+h[$>>3]){break}if((c[64648+(aP*688&-1)>>2]&2|0)==0){break}if((c[64732+(aP*688&-1)>>2]&2|0)==0){h[$>>3]=aN;break}as=+h[64760+(aP*688&-1)>>3];if(as<aN){h[$>>3]=as;break}else{h[$>>3]=aN;break}}}while(0);$=c[d>>2]|0;L15268:do{if(($|0)!=99){if(!(aB>-8.988465674311579e+307&aB<8.988465674311579e+307)){break}if((a[64788+($*688&-1)|0]&1)==0){aQ=aB}else{if(aB<=0.0){break}as=+_(+aB);aQ=as/+h[64800+($*688&-1)>>3]}if((a[u]&1)!=0|($|0)<0){break}aj=64712+($*688&-1)|0;if(aQ<+h[aj>>3]){h[aj>>3]=aQ;aR=c[d>>2]|0}else{aR=$}aj=64664+(aR*688&-1)|0;do{if(aQ<+h[aj>>3]){if((c[64648+(aR*688&-1)>>2]&1|0)==0){break L15268}if((c[64728+(aR*688&-1)>>2]&1|0)==0){h[aj>>3]=aQ;break}as=+h[64736+(aR*688&-1)>>3];if(as>aQ){h[aj>>3]=as;break L15268}else{h[aj>>3]=aQ;break}}}while(0);aj=c[d>>2]|0;t=64720+(aj*688&-1)|0;if(aQ>+h[t>>3]){h[t>>3]=aQ;aS=c[d>>2]|0}else{aS=aj}aj=64672+(aS*688&-1)|0;if(aQ<=+h[aj>>3]){break}if((c[64648+(aS*688&-1)>>2]&2|0)==0){break}if((c[64732+(aS*688&-1)>>2]&2|0)==0){h[aj>>3]=aQ;break}as=+h[64760+(aS*688&-1)>>3];if(as<aQ){h[aj>>3]=as;break}else{h[aj>>3]=aQ;break}}}while(0);Y=Y+1|0;}while((Y|0)<4);i=e;return}aQ=+P(+ao);aB=+P(+at);do{if(aQ<aB*.01|aB<aQ*.01){aN=+P(+ae);aA=+P(+aw);if(!(aN<aA*.01|aA<aN*.01)){aT=0;aU=0;break}if(!n){aT=1;aU=(a[b+232|0]&1)!=0;break}if((c[5094]|0)==0){aT=1;aU=1;break}aT=1;aU=(a[b+232|0]&1)!=0}else{aT=0;aU=0}}while(0);Y=(q|0)==0;do{if(Y){if((dz()|0)==0){aV=aU;aW=0;aX=0;aY=c[200]|0;break}else{i=e;return}}else{aS=(q|0)==1;d=(q|0)==2;do{if((q-1|0)>>>0<2){if((c[(c[3524]|0)+144>>2]|0)!=0){break}i=e;return}}while(0);if(!d){aV=aU;aW=0;aX=aS;aY=ay;break}aV=(c[(c[3524]|0)+96>>2]&512|0)==0|aU;aW=1;aX=aS;aY=ay}}while(0);ay=(a[64788+(aY*688&-1)|0]&1)==0;if(ay){if((a[64788+((c[144]|0)*688&-1)|0]&1)==0){aZ=aV}else{au=11205}}else{au=11205}if((au|0)==11205){aZ=1}aV=c[64652+(aY*688&-1)>>2]|0;if((aV&1|0)==0){a_=64680+(aY*688&-1)|0}else{a_=64664+(aY*688&-1)|0}aN=+h[a_>>3];if((aV&2|0)==0){a$=64688+(aY*688&-1)|0}else{a$=64672+(aY*688&-1)|0}aA=+h[a$>>3];a$=c[144]|0;aV=c[64652+(a$*688&-1)>>2]|0;if((aV&1|0)==0){a0=64680+(a$*688&-1)|0}else{a0=64664+(a$*688&-1)|0}ad=+h[a0>>3];if((aV&2|0)==0){a1=64688+(a$*688&-1)|0}else{a1=64672+(a$*688&-1)|0}aL=+h[a1>>3];if(n){a1=c[34]|0;aV=c[64652+(a1*688&-1)>>2]|0;if((aV&1|0)==0){a2=64680+(a1*688&-1)|0}else{a2=64664+(a1*688&-1)|0}if((aV&2|0)==0){a3=64688+(a1*688&-1)|0}else{a3=64672+(a1*688&-1)|0}a4=+h[a3>>3];a5=+h[a2>>3]}else{a4=0.0;a5=0.0}do{if(aT){if((c[(c[3524]|0)+152>>2]|0)==0|aZ){break}if(n){a6=1.0;a7=1.0}else{a6=+h[64776+(aY*688&-1)>>3]>0.0?1.0:-1.0;a7=+h[64776+(a$*688&-1)>>3]>0.0?1.0:-1.0}if(aQ>aB){a2=aw*a7>0.0;a3=ao*a6>0.0;a1=aa(a2?s:1,av)-(a3?av:1)|0;aV=-av|0;a8=av;a9=a3?1:-1;ba=(a3?aV:av)+(a2?aV:av)|0;bb=a1;bc=aa(s,av)}else{a1=at*a6>0.0;aV=ae*a7>0.0;a2=aa(a1?1:s,av)-(aV?1:av)|0;a3=aa(s,av);a8=s;a9=a1?av:-av|0;ba=aa(a3,a1?-1:1)+(aV?-1:1)|0;bb=a2;bc=a3}if(aX){bd=bc*3&-1}else{bd=aW?bc<<2:bc}a3=bd<<3;a2=ut(a3)|0;do{if((a2|0)==0){gk();aV=ut(a3)|0;if((aV|0)!=0){be=aV;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=177456,v)|0)}else{be=a2}}while(0);a2=be;aM=+h[o+8>>3];ax=((aM- +h[o+(r<<6)+8>>3])/az+(aM- +h[o+(al<<6)+8>>3])/af)*.5;aM=+h[o+16>>3];aH=((aM- +h[o+(r<<6)+16>>3])/az+(aM- +h[o+(al<<6)+16>>3])/af)*.5;aM=+h[o+24>>3];aI=((aM- +h[o+(r<<6)+24>>3])/az+(aM- +h[o+(al<<6)+24>>3])/af)*.5;do{if((p|0)>0){a3=aN<aA;aS=ad<aL;d=a5<a4;aV=a8;a1=0;a0=0;a_=bb;aU=0;aR=-1;u=0;aP=-1;am=0;L15375:while(1){aM=+h[o+(a_<<6)+8>>3];aE=+h[o+(a_<<6)+16>>3];aJ=+h[o+(a_<<6)+24>>3];aK=aM-ax;aF=ax+aM;aM=aE-aH;aG=aH+aE;aE=aJ-aI;aD=aI+aJ;do{if(a3){if(!(aK<aN|aK>aA)){au=11246;break}if(aF<aN|aF>aA){au=11257}else{au=11246}}else{if(!(aK<aA|aK>aN)){au=11246;break}if(aF<aA|aF>aN){au=11257}else{au=11246}}}while(0);L15382:do{if((au|0)==11246){au=0;do{if(aS){if(!(aM<ad|aM>aL)){break}if(aG<ad|aG>aL){au=11257;break L15382}}else{if(!(aM<aL|aM>ad)){break}if(aG<aL|aG>ad){au=11257;break L15382}}}while(0);if(!n){au=11273;break}if(d){if(!(aE<a5|aE>a4)){au=11273;break}if(aD<a5|aD>a4){au=11257;break}else{au=11273;break}}else{if(!(aE<a4|aE>a5)){au=11273;break}if(aD<a4|aD>a5){au=11257;break}else{au=11273;break}}}}while(0);L15396:do{if((au|0)==11257){au=0;do{if(aK<aF){if(!(aN<aK|aN>aF)){break}if(aA<aK|aA>aF){bf=aP;bg=u;bh=aR;bi=aU;bj=a0;bk=a1;break L15396}}else{if(!(aN<aF|aN>aK)){break}if(aA<aF|aA>aK){bf=aP;bg=u;bh=aR;bi=aU;bj=a0;bk=a1;break L15396}}}while(0);do{if(aM<aG){if(!(ad<aM|ad>aG)){break}if(aL<aM|aL>aG){bf=aP;bg=u;bh=aR;bi=aU;bj=a0;bk=a1;break L15396}}else{if(!(ad<aG|ad>aM)){break}if(aL<aG|aL>aM){bf=aP;bg=u;bh=aR;bi=aU;bj=a0;bk=a1;break L15396}}}while(0);if(!n){au=11273;break}if(aE<aD){if(!(a5<aE|a5>aD)){au=11273;break}if(a4<aE|a4>aD){bf=aP;bg=u;bh=aR;bi=aU;bj=a0;bk=a1;break}else{au=11273;break}}else{if(!(a5<aD|a5>aE)){au=11273;break}if(a4<aD|a4>aE){bf=aP;bg=u;bh=aR;bi=aU;bj=a0;bk=a1;break}else{au=11273;break}}}}while(0);do{if((au|0)==11273){au=0;if((aP|0)<0){bl=a_;bm=1;bn=1;bo=0}else{aO=((u|0)==0&1)+a0|0;aC=u+1|0;if((aO|0)!=1&(aC|0)>(a1|0)){au=11275;break L15375}else{bl=aP;bm=aC;bn=aO;bo=a1}}if(Y){aE=+h[o+(a_<<6)+32>>3];aD=+h[8341];do{if(aD<aE){aM=+h[8342];if(aM<=aE){bp=+((a[20668]|0)==112&1|0);break}aG=(aE-aD)/(aM-aD);if((a[20668]|0)==112){bp=aG;break}bp=1.0-aG}else{bp=+((a[20668]|0)!=112&1|0)}}while(0);h[a2+(aU<<3)>>3]=bp;bf=bl;bg=bm;bh=a_;bi=aU+1|0;bj=bn;bk=bo;break}aD=+h[o+(a_<<6)+40>>3];aE=+h[8341];do{if(aE<aD){aG=+h[8342];if(aG<=aD){bq=+((a[20668]|0)==112&1|0);break}aM=(aD-aE)/(aG-aE);if((a[20668]|0)==112){bq=aM;break}bq=1.0-aM}else{bq=+((a[20668]|0)!=112&1|0)}}while(0);aO=aU+1|0;h[a2+(aU<<3)>>3]=bq;aE=+h[o+(a_<<6)+48>>3];aD=+h[8341];do{if(aD<aE){aM=+h[8342];if(aM<=aE){br=+((a[20668]|0)==112&1|0);break}aG=(aE-aD)/(aM-aD);if((a[20668]|0)==112){br=aG;break}br=1.0-aG}else{br=+((a[20668]|0)!=112&1|0)}}while(0);aC=aU+2|0;h[a2+(aO<<3)>>3]=br;aD=+h[o+(a_<<6)+56>>3];aE=+h[8341];do{if(aE<aD){aG=+h[8342];if(aG<=aD){bs=+((a[20668]|0)==112&1|0);break}aM=(aD-aE)/(aG-aE);if((a[20668]|0)==112){bs=aM;break}bs=1.0-aM}else{bs=+((a[20668]|0)!=112&1|0)}}while(0);aO=aU+3|0;h[a2+(aC<<3)>>3]=bs;if(!aW){bf=bl;bg=bm;bh=a_;bi=aO;bj=bn;bk=bo;break}h[a2+(aO<<3)>>3]=+h[o+(a_<<6)+32>>3];bf=bl;bg=bm;bh=a_;bi=aU+4|0;bj=bn;bk=bo}}while(0);aO=a_+a9|0;j=aV-1|0;if((j|0)==0){if((bk|0)==0){bt=bg}else{if((bg|0)<1|(bg|0)==(bk|0)){bt=bk}else{au=11307;break}}bu=0;bv=aO+ba|0;bw=bt;bx=a8}else{bu=bg;bv=aO;bw=bk;bx=j}j=am+1|0;if((j|0)<(p|0)){aV=bx;a1=bw;a0=bj;a_=bv;aU=bi;aR=bh;u=bu;aP=bf;am=j}else{au=11310;break}}if((au|0)==11307){uh(-1,169296,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);i=e;return}else if((au|0)==11310){if(!((bw|0)>0&(bj|0)>0)){break}if(n){aE=+h[64664+((c[200]|0)*688&-1)>>3];aD=+h[91];aM=+h[96];aG=(+h[o+(bf<<6)+8>>3]-aE)*aD+aM+-1.0;aK=+h[64664+((c[144]|0)*688&-1)>>3];aF=+h[21];aJ=+h[68];as=(+h[o+(bf<<6)+16>>3]-aK)*aF+aJ+-1.0;an=+h[5279];ac=+h[2];aq=+h[12];ar=(+h[o+(bf<<6)+24>>3]-an)*ac+aq+-1.0;ag=+h[403];ai=+h[391];F=+h[395];R=+h[399];S=+h[404];T=+h[392];I=+h[396];J=+h[400];K=+h[406];L=+h[394];E=+h[398];V=+h[402];M=K+aG*L+as*E+ar*V;z=M==0.0?1.0e-5:M;M=+(c[180]|0);am=c[186]|0;N=+(c[40]|0);aP=c[46]|0;ab=+P(+(ao+at))*.5;c[k>>2]=~~(+(~~((ag+aG*ai+as*F+ar*R)/z*M)+am|0)-ab);w=+P(+(ae+aw))*.5;c[k+4>>2]=~~(w+ +(~~((S+aG*T+as*I+ar*J)/z*N)+aP|0));z=(+h[o+(bh<<6)+8>>3]-aE)*aD+aM+-1.0;ar=(+h[o+(bh<<6)+16>>3]-aK)*aF+aJ+-1.0;as=(+h[o+(bh<<6)+24>>3]-an)*ac+aq+-1.0;aG=K+z*L+ar*E+as*V;A=aG==0.0?1.0e-5:aG;c[k+12>>2]=~~(ab+ +(~~((ag+z*ai+ar*F+as*R)/A*M)+am|0));c[k+16>>2]=~~(+(~~((S+z*T+ar*I+as*J)/A*N)+aP|0)-w);w=(aN-aE)*aD+aM+-1.0;A=(ad-aK)*aF+aJ+-1.0;as=(a5-an)*ac+aq+-1.0;ar=K+w*L+A*E+as*V;z=ar==0.0?1.0e-5:ar;c[k+24>>2]=~~((ag+w*ai+A*F+as*R)/z*M)+am;c[k+28>>2]=~~((S+w*T+A*I+as*J)/z*N)+aP;z=(aA-aE)*aD+aM+-1.0;aM=(aL-aK)*aF+aJ+-1.0;aJ=(a4-an)*ac+aq+-1.0;aq=K+z*L+aM*E+aJ*V;V=aq==0.0?1.0e-5:aq;c[k+36>>2]=~~((ag+z*ai+aM*F+aJ*R)/V*M)+am;c[k+40>>2]=~~((S+z*T+aM*I+aJ*J)/V*N)+aP}else{aP=c[200]|0;N=+(c[64768+(aP*688&-1)>>2]|0);V=+h[o+(bf<<6)+8>>3];J=a6*+P(+ax);aJ=+h[64664+(aP*688&-1)>>3];I=+h[64776+(aP*688&-1)>>3];c[k>>2]=~~(N+I*(V-J-aJ)+.5);aP=c[144]|0;V=+(c[64768+(aP*688&-1)>>2]|0);aM=+h[o+(bf<<6)+16>>3];T=a7*+P(+aH);z=+h[64664+(aP*688&-1)>>3];S=+h[64776+(aP*688&-1)>>3];c[k+4>>2]=~~(V+S*(aM+T-z)+.5);c[k+12>>2]=~~(N+(J+ +h[o+(bh<<6)+8>>3]-aJ)*I+.5);c[k+16>>2]=~~(V+(+h[o+(bh<<6)+16>>3]-T-z)*S+.5);c[k+24>>2]=~~(N+(aN-aJ)*I+.5);c[k+28>>2]=~~(V+(aL-z)*S+.5);c[k+36>>2]=~~(N+(aA-aJ)*I+.5);c[k+40>>2]=~~(V+(ad-z)*S+.5)}cI[c[(c[3524]|0)+152>>2]&63](bw,bj,a2,k|0,q);break}else if((au|0)==11275){uh(-1,172960,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);i=e;return}}}while(0);uu(be);i=e;return}}while(0);if(ay){by=(a[64788+(a$*688&-1)|0]&1)!=0}else{by=1}if((c[(c[3524]|0)+148>>2]|0)==0){uf(-1,156360,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(by){a$=c[b+304>>2]|0;ay=(a[64788+(a$*688&-1)|0]&1)==0;a7=+h[o+(r<<6)+8>>3];if(ay){a6=+h[o+8>>3];bz=a6;bA=a7;bB=a6}else{a6=+h[64800+(a$*688&-1)>>3];aw=+Z(+(a7*a6));a7=+h[o+8>>3];bz=+Z(+(a7*a6));bA=aw;bB=a7}be=c[b+308>>2]|0;q=(a[64788+(be*688&-1)|0]&1)==0;a7=+h[o+(r<<6)+16>>3];if(q){aw=+h[o+16>>3];bC=aw;bD=a7;bE=aw}else{aw=+h[64800+(be*688&-1)>>3];a6=+Z(+(a7*aw));a7=+h[o+16>>3];bC=+Z(+(a7*aw));bD=a6;bE=a7}k=c[b+312>>2]|0;bj=(a[64788+(k*688&-1)|0]&1)==0;a7=+h[o+(r<<6)+24>>3];if(bj){a6=+h[o+24>>3];bF=a6;bG=a7;bH=a6}else{a6=+h[64800+(k*688&-1)>>3];aw=+Z(+(a7*a6));a7=+h[o+24>>3];bF=+Z(+(a7*a6));bG=aw;bH=a7}a7=+h[o+(al<<6)+8>>3];if(ay){bI=bB;bJ=a7}else{aw=+h[64800+(a$*688&-1)>>3];a6=+Z(+(a7*aw));bI=+Z(+(bB*aw));bJ=a6}a6=+h[o+(al<<6)+16>>3];if(q){bK=bE;bL=a6}else{aw=+h[64800+(be*688&-1)>>3];bB=+Z(+(a6*aw));bK=+Z(+(bE*aw));bL=bB}bB=+h[o+(al<<6)+24>>3];if(bj){bM=bH;bN=bB}else{aw=+h[64800+(k*688&-1)>>3];bE=+Z(+(bB*aw));bM=+Z(+(bH*aw));bN=bE}bO=bA-bz;bP=bD-bC;bQ=bG-bF;bR=bJ-bI;bS=bL-bK;bT=bN-bM}else{bM=+h[o+8>>3];bN=+h[o+16>>3];bK=+h[o+24>>3];bO=+h[o+(r<<6)+8>>3]-bM;bP=+h[o+(r<<6)+16>>3]-bN;bQ=+h[o+(r<<6)+24>>3]-bK;bR=+h[o+(al<<6)+8>>3]-bM;bS=+h[o+(al<<6)+16>>3]-bN;bT=+h[o+(al<<6)+24>>3]-bK}bK=bO/az;bO=bP/az;bP=bQ/az;az=bR/af;bR=bS/af;bS=bT/af;af=(bK+az)*.5;bT=(bO+bR)*.5;bQ=(bP+bS)*.5;bN=(bK-az)*.5;bM=(bO-bR)*.5;bL=(bP-bS)*.5;if((s|0)<=0){i=e;return}al=b+304|0;r=o+8|0;k=b+308|0;bj=o+16|0;be=b+312|0;b=o+24|0;q=(av|0)>0;a$=l|0;ay=l+8|0;bw=l+16|0;bh=l+24|0;bf=l+32|0;bu=l+40|0;bi=l+48|0;bv=l+56|0;bx=l+64|0;p=l+72|0;bk=l+80|0;bg=l+88|0;a8=aN<aA;bt=ad<aL;ba=a5<a4;a9=n^1;bo=m|0;bn=m+8|0;bm=f|0;bl=f+8|0;bb=f+4|0;bd=m|0;bc=m+24|0;aX=m+4|0;aY=m+28|0;aZ=g|0;a2=g+4|0;aP=g+8|0;am=0;u=0;while(1){if(by){aR=c[al>>2]|0;bI=+h[r>>3];if((a[64788+(aR*688&-1)|0]&1)==0){bU=bI}else{bU=+Z(+(bI*+h[64800+(aR*688&-1)>>3]))}bI=+(am|0);aR=c[k>>2]|0;bJ=+h[bj>>3];if((a[64788+(aR*688&-1)|0]&1)==0){bV=bJ}else{bV=+Z(+(bJ*+h[64800+(aR*688&-1)>>3]))}aR=c[be>>2]|0;bJ=+h[b>>3];if((a[64788+(aR*688&-1)|0]&1)==0){bW=bJ}else{bW=+Z(+(bJ*+h[64800+(aR*688&-1)>>3]))}bX=bS*bI+bW;bY=bR*bI+bV;bZ=az*bI+bU}else{bI=+(am|0);bX=bS*bI+ +h[b>>3];bY=bR*bI+ +h[bj>>3];bZ=az*bI+ +h[r>>3]}if(q){aR=u;aU=0;while(1){do{if(aW){bI=+h[o+(aR<<6)+32>>3];if(bI==0.0){break}if(bI>=128.0){au=11354;break}if((c[(c[3524]|0)+96>>2]&512|0)!=0){au=11354}}else{au=11354}}while(0);L15534:do{if((au|0)==11354){au=0;bI=+(aU|0);bJ=bZ+bK*bI;bF=bY+bO*bI;bG=bX+bP*bI;bI=af+bJ;h[a$>>3]=bI;h[ay>>3]=bT+bF;h[bw>>3]=bQ+bG;h[bh>>3]=bN+bJ;h[bf>>3]=bM+bF;h[bu>>3]=bL+bG;h[bi>>3]=bJ-af;h[bv>>3]=bF-bT;h[bx>>3]=bG-bQ;h[p>>3]=bJ-bN;h[bk>>3]=bF-bM;h[bg>>3]=bG-bL;a_=(c[5094]|0)!=0|a9;a0=0;a1=0;bG=bI;while(1){if(a8){if(bG<aN|bG>aA){b_=a0}else{au=11358}}else{if(bG<aA|bG>aN){b_=a0}else{au=11358}}do{if((au|0)==11358){au=0;bI=+h[l+(a1*24&-1)+8>>3];if(bt){if(bI<ad|bI>aL){b_=a0;break}}else{if(bI<aL|bI>ad){b_=a0;break}}bI=+h[l+(a1*24&-1)+16>>3];if(ba){if(!(bI<=a4&bI>=a5|a_)){b_=a0;break}}else{if(!(bI<=a5&bI>=a4|a_)){b_=a0;break}}b_=a0+1|0}}while(0);aC=a1+1|0;if((aC|0)>=4){break}a0=b_;a1=aC;bG=+h[l+(aC*24&-1)>>3]}if((b_|0)<=0){break}c[bn>>2]=3;a1=(b_|0)<4;a0=0;do{do{if(n){bG=(+h[l+(a0*24&-1)>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;bI=(+h[l+(a0*24&-1)+8>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;bF=(+h[l+(a0*24&-1)+16>>3]- +h[5279])*+h[2]+ +h[12]+-1.0;bJ=+h[406]+bG*+h[394]+bI*+h[398]+bF*+h[402];bC=bJ==0.0?1.0e-5:bJ;a_=~~((+h[403]+bG*+h[391]+bI*+h[395]+bF*+h[399])/bC*+(c[180]|0))+(c[186]|0)|0;aC=~~((+h[404]+bG*+h[392]+bI*+h[396]+bF*+h[400])/bC*+(c[40]|0))+(c[46]|0)|0;c[m+(a0*12&-1)>>2]=a_;c[m+(a0*12&-1)+4>>2]=aC;b$=a_;b0=aC}else{aC=c[200]|0;bC=+(c[64768+(aC*688&-1)>>2]|0);if(!by){a_=~~(bC+(+h[l+(a0*24&-1)>>3]- +h[64664+(aC*688&-1)>>3])*+h[64776+(aC*688&-1)>>3]+.5);c[m+(a0*12&-1)>>2]=a_;aV=c[144]|0;d=~~(+(c[64768+(aV*688&-1)>>2]|0)+(+h[l+(a0*24&-1)+8>>3]- +h[64664+(aV*688&-1)>>3])*+h[64776+(aV*688&-1)>>3]+.5);c[m+(a0*12&-1)+4>>2]=d;b$=a_;b0=d;break}bF=+h[l+(a0*24&-1)>>3];if((a[64788+(aC*688&-1)|0]&1)==0){b1=bF}else{bI=+_(+bF);b1=bI/+h[64800+(aC*688&-1)>>3]}d=~~(bC+(b1- +h[64664+(aC*688&-1)>>3])*+h[64776+(aC*688&-1)>>3]+.5);c[m+(a0*12&-1)>>2]=d;aC=c[144]|0;bC=+(c[64768+(aC*688&-1)>>2]|0);bI=+h[l+(a0*24&-1)+8>>3];if((a[64788+(aC*688&-1)|0]&1)==0){b2=bI}else{bF=+_(+bI);b2=bF/+h[64800+(aC*688&-1)>>3]}a_=~~(bC+(b2- +h[64664+(aC*688&-1)>>3])*+h[64776+(aC*688&-1)>>3]+.5);c[m+(a0*12&-1)+4>>2]=a_;b$=d;b0=a_}}while(0);do{if(aT){if(!((c[(c[3524]|0)+108>>2]|0)!=0&a1)){break}a_=m+(a0*12&-1)|0;d=c[13542]|0;aC=c[d>>2]|0;if((b$|0)<(aC|0)){c[a_>>2]=aC;b3=aC}else{b3=b$}aC=c[d+4>>2]|0;if((b3|0)>(aC|0)){c[a_>>2]=aC}aC=m+(a0*12&-1)+4|0;a_=c[d+12>>2]|0;if((b0|0)>(a_|0)){c[aC>>2]=a_;b4=a_}else{b4=b0}a_=c[d+8>>2]|0;if((b4|0)>=(a_|0)){break}c[aC>>2]=a_}}while(0);a0=a0+1|0;}while((a0|0)<4);do{if(Y){if((c[o+(aR<<6)>>2]|0)==2){break L15534}a0=o+(aR<<6)+32|0;if((cg(+(+h[a0>>3]))|0)==0){break L15534}bC=+h[a0>>3];bF=+h[8341];do{if(bF<bC){bI=+h[8342];if(bI<=bC){b5=+((a[20668]|0)==112&1|0);break}bG=(bC-bF)/(bI-bF);if((a[20668]|0)==112){b5=bG;break}b5=1.0-bG}else{b5=+((a[20668]|0)!=112&1|0)}}while(0);a0=(c[3524]|0)+144|0;if((c[a0>>2]|0)==0){break}c[bm>>2]=5;h[bl>>3]=b5;c[bb>>2]=0;cM[c[a0>>2]&511](f)}else{bF=+h[o+(aR<<6)+40>>3];bC=+h[8341];do{if(bC<bF){bG=+h[8342];if(bG<=bF){a0=a[20668]|0;b6=+(a0<<24>>24==112&1|0);b7=a0;break}bI=(bF-bC)/(bG-bC);a0=a[20668]|0;if(a0<<24>>24==112){b6=bI;b7=112;break}b6=1.0-bI;b7=a0}else{a0=a[20668]|0;b6=+(a0<<24>>24!=112&1|0);b7=a0}}while(0);a0=~~(b6*255.0+.5);bF=+h[o+(aR<<6)+48>>3];do{if(bC<bF){bI=+h[8342];if(bI<=bF){b8=+(b7<<24>>24==112&1|0);b9=b7;break}bG=(bF-bC)/(bI-bC);if(b7<<24>>24==112){b8=bG;b9=112;break}b8=1.0-bG;b9=b7}else{b8=+(b7<<24>>24!=112&1|0);b9=b7}}while(0);a1=~~(b8*255.0+.5);bF=+h[o+(aR<<6)+56>>3];do{if(bC<bF){bG=+h[8342];if(bG<=bF){ca=+(b9<<24>>24==112&1|0);break}bI=(bF-bC)/(bG-bC);if(b9<<24>>24==112){ca=bI;break}ca=1.0-bI}else{ca=+(b9<<24>>24!=112&1|0)}}while(0);a_=(c[3524]|0)+144|0;if((c[a_>>2]|0)==0){break}c[aZ>>2]=3;c[a2>>2]=((a1<<8)+(a0<<16)|0)+~~(ca*255.0+.5);h[aP>>3]=0.0;cM[c[a_>>2]&511](g)}}while(0);do{if(aW){a_=~~(+h[o+(aR<<6)+32>>3]*100.0/255.0);if((a_|0)==0){break L15534}if((c[(c[3524]|0)+96>>2]&512|0)==0){break}c[bn>>2]=a_<<4|4}}while(0);a_=c[3524]|0;do{if(aT){aC=c[a_+108>>2]|0;if((aC|0)==0){break}d=c[bd>>2]|0;aV=c[bc>>2]|0;aS=c[aX>>2]|0;a3=c[aY>>2]|0;j=aV-d|0;aO=a3-aS|0;cI[aC&63](c[bn>>2]|0,(d|0)<(aV|0)?d:aV,(aS|0)<(a3|0)?aS:a3,(j|0)>-1?j:-j|0,(aO|0)>-1?aO:-aO|0);break L15534}}while(0);cN[c[a_+148>>2]&255](4,bo)}}while(0);aO=aU+1|0;if((aO|0)<(av|0)){aR=aR+1|0;aU=aO}else{break}}cb=av+u|0}else{cb=u}aU=am+1|0;if((aU|0)<(s|0)){am=aU;u=cb}else{break}}i=e;return}function f4(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0;d=c[(c[9732]|0)+320>>2]|0;e=+h[d+(c[a>>2]<<6)+8>>3];f=+h[d+(c[b>>2]<<6)+8>>3];if(e<f){g=-1;return g|0}g=e>f&1;return g|0}function f5(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0;c=+h[a+16>>3];d=+h[b+16>>3];if(c>d){e=1;return e|0}e=(c<d)<<31>>31;return e|0}function f6(b,d,e,f,g){b=b|0;d=+d;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0,w=0,x=0.0,y=0.0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0.0,G=0,H=0,I=0,J=0.0,K=0.0,L=0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;j=i;i=i+96|0;k=f;f=i;i=i+56|0;uD(f,k,56);k=j|0;l=j+16|0;m=j+32|0;n=j+40|0;o=j+48|0;p=j+56|0;q=j+64|0;r=j+80|0;s=j+88|0;t=c[3524]|0;u=+(aa(c[t+24>>2]|0,c[1400]|0)|0);if((e|0)==0){v=65064+(b*688&-1)|0}else{v=65056+(b*688&-1)|0}w=~~(u*+h[v>>3]);v=c[200]|0;u=+(c[64768+(v*688&-1)>>2]|0);x=+h[64664+(v*688&-1)>>3];y=+h[64776+(v*688&-1)>>3];v=~~(u+(d-x)*y+.5);L15653:do{if((g|0)==0){z=e}else{A=(a[64788+(b*688&-1)|0]&1)==0;B=64800+(b*688&-1)|0;C=g;while(1){D=+h[C>>3];if(A){E=D}else{F=+_(+D);E=F/+h[B>>3]}G=~~(u+(E-x)*y+.5)-v|0;if((((G|0)>-1?G:-G|0)|0)<3){z=0;break L15653}G=c[C+16>>2]|0;if((G|0)==0){z=e;break}else{C=G}}}}while(0);e=c[f+4>>2]|0;if((e|0)>-3){g=t+168|0;cM[c[g>>2]&511](3);C=q;B=f+40|0;c[C>>2]=c[B>>2];c[C+4>>2]=c[B+4>>2];c[C+8>>2]=c[B+8>>2];c[C+12>>2]=c[B+12>>2];do{if((c[f>>2]|0)!=0){y=+h[f+24>>3];B=c[(c[3524]|0)+92>>2]|0;if(y<0.0){cK[B&63](+h[3817]);break}else{cK[B&63](y);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[f+16>>3]);B=c[(c[3524]|0)+64>>2]|0;if((e|0)<-5){cM[B&511](-2)}else{cM[B&511](e)}B=c[3524]|0;do{if((a[f+32|0]&1)==0){if((c[B+96>>2]&1024|0)!=0){break}c[q>>2]=1;c[q+4>>2]=e;H=11474}else{H=11474}}while(0);if((H|0)==11474){fn(q,B)}L15680:do{if(+h[3815]!=0.0){B=c[200]|0;q=c[64768+(B*688&-1)>>2]|0;y=+h[64664+(B*688&-1)>>3];x=+h[64776+(B*688&-1)>>3];B=~~(+(q|0)+(d-y)*x+.5);e=c[144]|0;f=c[64768+(e*688&-1)>>2]|0;E=+h[64664+(e*688&-1)>>3];u=+h[64776+(e*688&-1)>>3];e=~~(+(f|0)+(0.0-E)*u+.5);F=+h[4483];do{if(F<d){h[4483]=d}else{D=-0.0-d;if(F>=D){break}h[4483]=D}}while(0);C=2;A=B;G=e;F=0.0;D=d;I=q;J=y;K=x;L=f;M=E;N=u;while(1){O=D*.9950041652780258-F*.09983341664682815;P=F*.9950041652780258+D*.09983341664682815;Q=~~(+(I|0)+(O-J)*K+.5);R=~~(+(L|0)+(P-M)*N+.5);c[m>>2]=A;c[n>>2]=G;c[o>>2]=Q;c[p>>2]=R;S=c[3524]|0;if((fl(m,n,o,p)|0)!=0){cN[c[S+56>>2]&255](c[m>>2]|0,c[n>>2]|0);cN[c[S+60>>2]&255](c[o>>2]|0,c[p>>2]|0)}if((C|0)>=64){break L15680}S=c[200]|0;T=c[144]|0;C=C+1|0;A=Q;G=R;F=P;D=O;I=c[64768+(S*688&-1)>>2]|0;J=+h[64664+(S*688&-1)>>3];K=+h[64776+(S*688&-1)>>3];L=c[64768+(T*688&-1)>>2]|0;M=+h[64664+(T*688&-1)>>3];N=+h[64776+(T*688&-1)>>3]}}else{do{if((a[35184]&1)!=0&(v|0)<(c[9335]|0)&(v|0)>(c[9334]|0)){L=c[9337]|0;I=c[7940]|0;if((L|0)<=(I|0)){U=I;break}G=c[9336]|0;A=c[7941]|0;if((G|0)>=(A|0)){U=I;break}if((G|0)>(I|0)){cN[c[t+56>>2]&255](v,I);cN[c[t+60>>2]&255](v,c[9336]|0);V=c[9337]|0;W=c[7941]|0}else{V=L;W=A}if((V|0)>=(W|0)){break L15680}cN[c[t+56>>2]&255](v,V);cN[c[t+60>>2]&255](v,c[7941]|0);break L15680}else{U=c[7940]|0}}while(0);cN[c[t+56>>2]&255](v,U);cN[c[t+60>>2]&255](v,c[7941]|0)}}while(0);U=l;c[U>>2]=c[14084];c[U+4>>2]=c[56340>>2];c[U+8>>2]=c[56344>>2];c[U+12>>2]=c[56348>>2];U=c[14075]|0;do{if((c[14074]|0)!=0){d=+h[7040];V=c[(c[3524]|0)+92>>2]|0;if(d<0.0){cK[V&63](+h[3817]);break}else{cK[V&63](d);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[7039]);V=c[(c[3524]|0)+64>>2]|0;if((U|0)<-5){cM[V&511](-2)}else{cM[V&511](U)}V=c[3524]|0;do{if((a[56328]&1)==0){if((c[V+96>>2]&1024|0)!=0){break}c[l>>2]=1;c[l+4>>2]=U;H=11504}else{H=11504}}while(0);if((H|0)==11504){fn(l,V)}cM[c[g>>2]&511](4)}g=t+56|0;cN[c[g>>2]&255](v,c[1394]|0);V=t+60|0;cN[c[V>>2]&255](v,(c[1394]|0)+w|0);l=c[1396]|0;if((l|0)>-1){cN[c[g>>2]&255](v,l);cN[c[V>>2]&255](v,(c[1396]|0)-w|0)}if((z|0)==0){i=j;return}fN(64984+(b*688&-1)|0,r,s,99744);w=64928+(b*688&-1)|0;if((c[w>>2]|0)!=0){fn(w,t)}ln(~~+h[r>>3]+v|0,~~+h[s>>3]+(c[1392]|0)|0,z,c[1398]|0,c[1384]|0,c[6586]|0,c[64924+(b*688&-1)>>2]|0);b=k;c[b>>2]=c[14084];c[b+4>>2]=c[56340>>2];c[b+8>>2]=c[56344>>2];c[b+12>>2]=c[56348>>2];b=c[14075]|0;do{if((c[14074]|0)!=0){d=+h[7040];z=c[(c[3524]|0)+92>>2]|0;if(d<0.0){cK[z&63](+h[3817]);break}else{cK[z&63](d);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[7039]);z=c[(c[3524]|0)+64>>2]|0;if((b|0)<-5){cM[z&511](-2)}else{cM[z&511](b)}z=c[3524]|0;do{if((a[56328]&1)==0){if((c[z+96>>2]&1024|0)==0){c[k>>2]=1;c[k+4>>2]=b;break}else{i=j;return}}}while(0);fn(k,z);i=j;return}function f7(b,d,e,f,g){b=b|0;d=+d;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0,w=0,x=0.0,y=0.0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0.0,G=0,H=0,I=0.0,J=0.0,K=0,L=0,M=0,N=0;j=i;i=i+96|0;k=f;f=i;i=i+56|0;uD(f,k,56);k=j|0;l=j+16|0;m=j+32|0;n=j+40|0;o=j+48|0;p=j+56|0;q=j+64|0;r=j+80|0;s=j+88|0;t=c[3524]|0;u=+(aa(c[t+28>>2]|0,c[1400]|0)|0);if((e|0)==0){v=65064+(b*688&-1)|0}else{v=65056+(b*688&-1)|0}w=~~(u*+h[v>>3]);v=c[144]|0;u=+(c[64768+(v*688&-1)>>2]|0);x=+h[64664+(v*688&-1)>>3];y=+h[64776+(v*688&-1)>>3];v=~~(u+(d-x)*y+.5);L15753:do{if((g|0)==0){z=e}else{A=(a[64788+(b*688&-1)|0]&1)==0;B=64800+(b*688&-1)|0;C=g;while(1){D=+h[C>>3];if(A){E=D}else{F=+_(+D);E=F/+h[B>>3]}G=~~(u+(E-x)*y+.5)-v|0;if((((G|0)>-1?G:-G|0)|0)<3){z=0;break L15753}G=c[C+16>>2]|0;if((G|0)==0){z=e;break}else{C=G}}}}while(0);e=c[f+4>>2]|0;if((e|0)>-3){g=t+168|0;cM[c[g>>2]&511](3);C=q;B=f+40|0;c[C>>2]=c[B>>2];c[C+4>>2]=c[B+4>>2];c[C+8>>2]=c[B+8>>2];c[C+12>>2]=c[B+12>>2];do{if((c[f>>2]|0)!=0){y=+h[f+24>>3];B=c[(c[3524]|0)+92>>2]|0;if(y<0.0){cK[B&63](+h[3817]);break}else{cK[B&63](y);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[f+16>>3]);B=c[(c[3524]|0)+64>>2]|0;if((e|0)<-5){cM[B&511](-2)}else{cM[B&511](e)}B=c[3524]|0;do{if((a[f+32|0]&1)==0){if((c[B+96>>2]&1024|0)!=0){break}c[q>>2]=1;c[q+4>>2]=e;H=11546}else{H=11546}}while(0);if((H|0)==11546){fn(q,B)}L15780:do{if(+h[3815]!=0.0){y=+h[4483];do{if(y<d){h[4483]=d}else{x=-0.0-d;if(y>=x){break}h[4483]=x}}while(0);B=c[200]|0;q=c[64768+(B*688&-1)>>2]|0;y=+h[64664+(B*688&-1)>>3];x=+h[64776+(B*688&-1)>>3];B=~~(+(q|0)+(0.0-y)*x+.5);e=c[144]|0;f=c[64768+(e*688&-1)>>2]|0;E=+h[64664+(e*688&-1)>>3];u=+h[64776+(e*688&-1)>>3];e=~~(+(f|0)+(d-E)*u+.5);c[8490]=B;c[8488]=e;F=d;D=0.0;C=2;A=B;B=e;e=q;I=y;y=x;q=f;x=E;E=u;while(1){u=D*.9950041652780258-F*.09983341664682815;J=F*.9950041652780258+D*.09983341664682815;f=~~(+(e|0)+(u-I)*y+.5);G=~~(+(q|0)+(J-x)*E+.5);c[m>>2]=A;c[n>>2]=B;c[o>>2]=f;c[p>>2]=G;K=c[3524]|0;if((fl(m,n,o,p)|0)!=0){cN[c[K+56>>2]&255](c[m>>2]|0,c[n>>2]|0);cN[c[K+60>>2]&255](c[o>>2]|0,c[p>>2]|0)}c[8490]=f;c[8488]=G;if((C|0)>=64){break L15780}K=c[200]|0;L=c[144]|0;F=J;D=u;C=C+1|0;A=f;B=G;e=c[64768+(K*688&-1)>>2]|0;I=+h[64664+(K*688&-1)>>3];y=+h[64776+(K*688&-1)>>3];q=c[64768+(L*688&-1)>>2]|0;x=+h[64664+(L*688&-1)>>3];E=+h[64776+(L*688&-1)>>3]}}else{do{if((a[35184]&1)!=0&(v|0)<(c[9337]|0)&(v|0)>(c[9336]|0)){q=c[9334]|0;e=c[7939]|0;if((q|0)>=(e|0)){break}B=c[9335]|0;A=c[7938]|0;if((B|0)<=(A|0)){break}if((q|0)>(A|0)){cN[c[t+56>>2]&255](A,v);cN[c[t+60>>2]&255](c[9334]|0,v);M=c[9335]|0;N=c[7939]|0}else{M=B;N=e}if((M|0)>=(N|0)){break L15780}cN[c[t+56>>2]&255](M,v);cN[c[t+60>>2]&255](c[7939]|0,v);break L15780}}while(0);cN[c[t+56>>2]&255](c[7938]|0,v);cN[c[t+60>>2]&255](c[7939]|0,v)}}while(0);M=l;c[M>>2]=c[14084];c[M+4>>2]=c[56340>>2];c[M+8>>2]=c[56344>>2];c[M+12>>2]=c[56348>>2];M=c[14075]|0;do{if((c[14074]|0)!=0){d=+h[7040];N=c[(c[3524]|0)+92>>2]|0;if(d<0.0){cK[N&63](+h[3817]);break}else{cK[N&63](d);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[7039]);N=c[(c[3524]|0)+64>>2]|0;if((M|0)<-5){cM[N&511](-2)}else{cM[N&511](M)}N=c[3524]|0;do{if((a[56328]&1)==0){if((c[N+96>>2]&1024|0)!=0){break}c[l>>2]=1;c[l+4>>2]=M;H=11575}else{H=11575}}while(0);if((H|0)==11575){fn(l,N)}cM[c[g>>2]&511](4)}g=t+56|0;cN[c[g>>2]&255](c[1394]|0,v);N=t+60|0;cN[c[N>>2]&255]((c[1394]|0)+w|0,v);l=c[1396]|0;if((l|0)>-1){cN[c[g>>2]&255](l,v);cN[c[N>>2]&255]((c[1396]|0)-w|0,v)}if((z|0)==0){i=j;return}fN(64984+(b*688&-1)|0,r,s,94352);w=64928+(b*688&-1)|0;if((c[w>>2]|0)!=0){fn(w,t)}ln(~~+h[r>>3]+(c[1392]|0)|0,~~+h[s>>3]+v|0,z,c[1398]|0,c[1384]|0,c[6586]|0,c[64924+(b*688&-1)>>2]|0);b=k;c[b>>2]=c[14084];c[b+4>>2]=c[56340>>2];c[b+8>>2]=c[56344>>2];c[b+12>>2]=c[56348>>2];b=c[14075]|0;do{if((c[14074]|0)!=0){d=+h[7040];z=c[(c[3524]|0)+92>>2]|0;if(d<0.0){cK[z&63](+h[3817]);break}else{cK[z&63](d);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[7039]);z=c[(c[3524]|0)+64>>2]|0;if((b|0)<-5){cM[z&511](-2)}else{cM[z&511](b)}z=c[3524]|0;do{if((a[56328]&1)==0){if((c[z+96>>2]&1024|0)==0){c[k>>2]=1;c[k+4>>2]=b;break}else{i=j;return}}}while(0);fn(k,z);i=j;return}function f8(a){a=a|0;var b=0;if((a|0)==0){return}b=c[a+116>>2]|0;if((b|0)!=0){uu(b)}b=a+48|0;a=c[b>>2]|0;if((a|0)==0){return}else{f8(a);uu(c[b>>2]|0);c[b>>2]=0;return}}function f9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0;e=i;i=i+88|0;f=e|0;g=e+16|0;j=e+32|0;if((c[b+316>>2]|0)==0){k=0;i=e;return k|0}l=c[b+64>>2]|0;if(+h[b+72>>3]<0.0&(l|0)==3){m=(c[3524]|0)+144|0;if((c[m>>2]|0)==0){k=1;i=e;return k|0}n=~~+h[d>>3];c[g>>2]=3;c[g+4>>2]=n;h[g+8>>3]=0.0;cM[c[m>>2]&511](g);k=1;i=e;return k|0}if((l|0)==6){o=+h[d>>3];p=+h[8341];do{if(p<o){q=+h[8342];if(q<=o){r=+((a[20668]|0)==112&1|0);break}s=(o-p)/(q-p);if((a[20668]|0)==112){r=s;break}r=1.0-s}else{r=+((a[20668]|0)!=112&1|0)}}while(0);l=(c[3524]|0)+144|0;if((c[l>>2]|0)==0){k=1;i=e;return k|0}c[f>>2]=5;h[f+8>>3]=r;c[f+4>>2]=0;cM[c[l>>2]&511](f);k=1;i=e;return k|0}if((c[b+28>>2]|0)!=-6){k=0;i=e;return k|0}b=~~+h[d>>3];d=43280;while(1){t=c[d>>2]|0;if((t|0)==0){u=11624;break}if((c[t+4>>2]|0)==(b|0)){u=11622;break}else{d=t|0}}do{if((u|0)==11624){d=c[8798]|0;f=(d|0)>0;l=b;L15891:while(1){g=43264;while(1){v=c[g>>2]|0;if((v|0)==0){break}if((c[v+4>>2]|0)==(l|0)){break L15891}else{g=v|0}}w=l-1|0;if(!((l|0)>(d|0)&f)){u=11634;break}l=((w|0)%(d|0)&-1)+1|0}if((u|0)==11634){c[j+4>>2]=w;c[j+40>>2]=1;c[j+44>>2]=w;c[j+8>>2]=w;break}d=j;f=v+8|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];c[d+16>>2]=c[f+16>>2];c[d+20>>2]=c[f+20>>2];c[d+24>>2]=c[f+24>>2];c[d+28>>2]=c[f+28>>2];c[d+32>>2]=c[f+32>>2];c[d+36>>2]=c[f+36>>2];c[d+40>>2]=c[f+40>>2];c[d+44>>2]=c[f+44>>2];c[d+48>>2]=c[f+48>>2];c[d+52>>2]=c[f+52>>2];if((c[(c[3524]|0)+96>>2]&1024|0)!=0){c[j+4>>2]=l;a[j+32|0]=0;break}if((a[j+32|0]&1)!=0){break}c[j+40>>2]=1;c[j+44>>2]=c[j+4>>2]}else if((u|0)==11622){f=j;d=t+8|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];c[f+16>>2]=c[d+16>>2];c[f+20>>2]=c[d+20>>2];c[f+24>>2]=c[d+24>>2];c[f+28>>2]=c[d+28>>2];c[f+32>>2]=c[d+32>>2];c[f+36>>2]=c[d+36>>2];c[f+40>>2]=c[d+40>>2];c[f+44>>2]=c[d+44>>2];c[f+48>>2]=c[d+48>>2];c[f+52>>2]=c[d+52>>2];if((a[j+32|0]&1)!=0){break}c[j+40>>2]=1;c[j+44>>2]=c[j+4>>2]}}while(0);fn(j+40|0,c[3524]|0);k=1;i=e;return k|0}function ga(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=i;do{if((b|0)!=0){if((a[b]|0)==0){break}f=(uA(b|0)|0)+2|0;g=ut(f)|0;do{if((g|0)==0){gk();h=ut(f)|0;if((h|0)!=0){j=h;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=87472,v)|0);return 0}else{j=g}}while(0);uB(j|0,b|0);g=j+(uA(j|0)|0)|0;w=10;a[g]=w&255;w=w>>8;a[g+1|0]=w&255;g=a8(j|0,10)|0;if((g|0)==0){k=0;l=0}else{f=j;h=0;m=0;n=g;while(1){a[n]=0;g=lp(f)|0;o=(g|0)>(h|0)?g:h;if((g|m|0)==0){if((a[b]|0)==10){p=11654}else{q=m}}else{p=11654}if((p|0)==11654){p=0;q=m+1|0}g=n+1|0;r=a8(g|0,10)|0;if((r|0)==0){k=o;l=q;break}else{f=g;h=o;m=q;n=r}}}if((d|0)!=0){c[d>>2]=l}uu(j);s=k;i=e;return s|0}}while(0);if((d|0)==0){s=0;i=e;return s|0}c[d>>2]=0;s=0;i=e;return s|0}function gb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0;f=b-1|0;g=+h[a+(f<<6)+8>>3];i=+h[a+(f<<6)+16>>3];j=+h[a+(b<<6)+8>>3];k=+h[a+(b<<6)+16>>3];f=(c[a+(b<<6)>>2]|0)==0;l=f?j:g;m=f?k:i;n=f?g:j;j=f?i:k;f=n==-8.988465674311579e+307;b=j==-8.988465674311579e+307;if(f|b){h[d>>3]=l;h[e>>3]=m;if(!f){h[e>>3]=+h[64664+((c[144]|0)*688&-1)>>3];o=4;return o|0}if(b){o=5;return o|0}h[d>>3]=+h[64664+((c[200]|0)*688&-1)>>3];o=1;return o|0}do{if(m==j){h[e>>3]=m;b=l<n;f=c[200]|0;k=+h[64672+(f*688&-1)>>3];do{if(b){if(!(k<l|k>n)){p=11674;break}q=+h[64664+(f*688&-1)>>3];p=11677}else{if(!(k<n|k>l)){p=11674;break}r=+h[64664+(f*688&-1)>>3];p=11678}}while(0);do{if((p|0)==11674){if(k==l){i=+h[64664+(f*688&-1)>>3];if(b){q=i;p=11677;break}else{r=i;p=11678;break}}h[d>>3]=k;o=2;return o|0}}while(0);if((p|0)==11677){if(q<l|q>n){break}else{s=q}}else if((p|0)==11678){if(r<n|r>l){break}else{s=r}}if(s==l){break}h[d>>3]=s;o=1;return o|0}else{if(l==n){h[d>>3]=l;b=m<j;f=c[144]|0;k=+h[64672+(f*688&-1)>>3];do{if(b){if(!(k<m|k>j)){p=11687;break}t=+h[64664+(f*688&-1)>>3];p=11690}else{if(!(k<j|k>m)){p=11687;break}u=+h[64664+(f*688&-1)>>3];p=11691}}while(0);do{if((p|0)==11687){if(k==m){i=+h[64664+(f*688&-1)>>3];if(b){t=i;p=11690;break}else{u=i;p=11691;break}}h[e>>3]=k;o=8;return o|0}}while(0);if((p|0)==11691){if(u<j|u>m){break}else{v=u}}else if((p|0)==11690){if(t<m|t>j){break}else{v=t}}if(v==m){break}h[e>>3]=v;o=4;return o|0}b=m<j;f=c[144]|0;a=64664+(f*688&-1)|0;k=+h[a>>3];do{if(b){if(!(k<m|k>j)){p=11699;break}w=+h[64672+(f*688&-1)>>3];p=11705}else{if(!(k<j|k>m)){p=11699;break}x=+h[64672+(f*688&-1)>>3];p=11706}}while(0);if((p|0)==11699){do{if(k!=m&k!=j){i=l+(k-m)*((n-l)/(j-m));y=c[200]|0;g=+h[64664+(y*688&-1)>>3];z=+h[64672+(y*688&-1)>>3];if(g<z){if(i<g|i>z){break}}else{if(i<z|i>g){break}}h[d>>3]=i;h[e>>3]=+h[a>>3];o=4;return o|0}}while(0);i=+h[64672+(f*688&-1)>>3];if(b){w=i;p=11705}else{x=i;p=11706}}if((p|0)==11706){if(x<j|x>m){A=x}else{B=x;p=11707}}else if((p|0)==11705){if(w<m|w>j){A=w}else{B=w;p=11707}}do{if((p|0)==11707){a=64672+(f*688&-1)|0;if(!(B!=m&B!=j)){A=B;break}i=l+(B-m)*((n-l)/(j-m));y=c[200]|0;g=+h[64664+(y*688&-1)>>3];z=+h[64672+(y*688&-1)>>3];if(g<z){if(i<g|i>z){A=B;break}}else{if(i<z|i>g){A=B;break}}h[d>>3]=i;h[e>>3]=+h[a>>3];o=8;return o|0}}while(0);f=l<n;b=c[200]|0;i=+h[64664+(b*688&-1)>>3];do{if(f){if(!(i<l|i>n)){p=11717;break}C=+h[64672+(b*688&-1)>>3];p=11723}else{if(!(i<n|i>l)){p=11717;break}D=+h[64672+(b*688&-1)>>3];p=11724}}while(0);if((p|0)==11717){do{if(i!=l&i!=n){g=m+(i-l)*((j-m)/(n-l));if(k<A){if(g<k|g>A){break}}else{if(g<A|g>k){break}}h[d>>3]=i;h[e>>3]=g;o=1;return o|0}}while(0);i=+h[64672+(b*688&-1)>>3];if(f){C=i;p=11723}else{D=i;p=11724}}if((p|0)==11724){if(D<n|D>l){break}else{E=D}}else if((p|0)==11723){if(C<l|C>n){break}else{E=C}}if(!(E!=l&E!=n)){break}i=m+(E-l)*((j-m)/(n-l));if(k<A){if(i<k|i>A){break}}else{if(i<A|i>k){break}}h[d>>3]=E;h[e>>3]=i;o=2;return o|0}}while(0);h[d>>3]=l;h[e>>3]=m;o=0;return o|0}function gc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0.0,l=0,m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0;f=b-1|0;g=+h[a+(f<<6)+8>>3];i=+h[a+(f<<6)+16>>3];j=+h[a+(b<<6)+8>>3];k=+h[a+(b<<6)+16>>3];b=g==-8.988465674311579e+307;a=j==-8.988465674311579e+307;f=i==-8.988465674311579e+307;l=k==-8.988465674311579e+307;if((((a?b?2:1:b&1)+(f&1)|0)+(l&1)|0)>1){m=0;return m|0}if(a|b){n=b?k:i;a=c[200]|0;o=64672+(a*688&-1)|0;p=+h[o>>3];q=+h[64664+(a*688&-1)>>3];if((b?j:g)<=(p>q?p:q)){m=0;return m|0}b=c[144]|0;p=+h[64664+(b*688&-1)>>3];r=+h[64672+(b*688&-1)>>3];do{if(p<r){if(n<p|n>r){m=0}else{break}return m|0}else{if(n<r|n>p){m=0}else{break}return m|0}}while(0);h[d>>3]=q;h[e>>3]=n;h[d+8>>3]=+h[o>>3];h[e+8>>3]=n;m=1;return m|0}if(l|f){n=f?j:g;l=c[144]|0;o=64664+(l*688&-1)|0;q=+h[o>>3];b=64672+(l*688&-1)|0;p=+h[b>>3];if((f?k:i)<=(q>p?q:p)){m=0;return m|0}f=c[200]|0;p=+h[64664+(f*688&-1)>>3];q=+h[64672+(f*688&-1)>>3];do{if(p<q){if(n<p|n>q){m=0}else{break}return m|0}else{if(n<q|n>p){m=0}else{break}return m|0}}while(0);h[d>>3]=n;h[e>>3]=+h[o>>3];h[d+8>>3]=n;h[e+8>>3]=+h[b>>3];m=1;return m|0}b=g==j;o=i==k;if(b&o){m=0;return m|0}if(b){b=c[200]|0;n=+h[64664+(b*688&-1)>>3];p=+h[64672+(b*688&-1)>>3];do{if(n<p){if(g<n|g>p){m=0}else{break}return m|0}else{if(g<p|g>n){m=0}else{break}return m|0}}while(0);b=c[144]|0;f=64664+(b*688&-1)|0;n=+h[f>>3];do{if(i<k){if(n<i|n>k){m=0}else{break}return m|0}else{if(n<k|n>i){m=0}else{break}return m|0}}while(0);h[d>>3]=g;h[e>>3]=+h[f>>3];h[d+8>>3]=g;h[e+8>>3]=+h[64672+(b*688&-1)>>3];m=1;return m|0}if(o){o=c[144]|0;n=+h[64664+(o*688&-1)>>3];p=+h[64672+(o*688&-1)>>3];do{if(n<p){if(i<n|i>p){m=0}else{break}return m|0}else{if(i<p|i>n){m=0}else{break}return m|0}}while(0);o=c[200]|0;n=+h[64664+(o*688&-1)>>3];do{if(g<j){if(n<g|n>j){m=0}else{break}return m|0}else{if(n<j|n>g){m=0}else{break}return m|0}}while(0);h[d>>3]=n;h[e>>3]=i;h[d+8>>3]=+h[64672+(o*688&-1)>>3];h[e+8>>3]=i;m=1;return m|0}else{o=c[200]|0;b=64664+(o*688&-1)|0;n=j-g;j=(+h[b>>3]-g)/n;f=64672+(o*688&-1)|0;p=(+h[f>>3]-g)/n;o=j>p;q=o?j:p;r=o?p:j;o=c[144]|0;l=64664+(o*688&-1)|0;j=k-i;k=(+h[l>>3]-i)/j;a=64672+(o*688&-1)|0;p=(+h[a>>3]-i)/j;o=k>p;s=o?k:p;t=o?p:k;k=r>t?r:t;t=k>0.0?k:0.0;k=q<s?q:s;s=k<1.0?k:1.0;if(t>s){m=0;return m|0}h[d>>3]=g+n*t;h[e>>3]=i+j*t;h[d+8>>3]=g+n*s;h[e+8>>3]=i+j*s;s=+h[b>>3];j=+h[f>>3];i=(j-s)*1.0e-5;n=s-i;s=j+i;i=+h[d>>3];if(n<s){if(!(i<n|i>s)){u=11778}}else{if(!(i<s|i>n)){u=11778}}do{if((u|0)==11778){n=+h[l>>3];i=+h[a>>3];s=(i-n)*1.0e-5;j=n-s;n=i+s;s=+h[e>>3];if(j<n){if(s<j|s>n){break}else{m=1}return m|0}else{if(s<n|s>j){break}else{m=1}return m|0}}}while(0);m=0;return m|0}return 0}function gd(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=+e;f=+f;var g=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0;g=i;i=i+24|0;j=g|0;k=g+8|0;l=g+16|0;m=c[3524]|0;n=c[200]|0;c[j>>2]=~~(+(c[64768+(n*688&-1)>>2]|0)+(d- +h[64664+(n*688&-1)>>3])*+h[64776+(n*688&-1)>>3]+.5);n=c[144]|0;d=+(c[64768+(n*688&-1)>>2]|0);o=+h[64664+(n*688&-1)>>3];p=+h[64776+(n*688&-1)>>3];c[k>>2]=~~(d+(e-o)*p+.5);c[l>>2]=~~(d+(f-o)*p+.5);if((fl(j,k,j,l)|0)==0){i=g;return}n=c[j>>2]|0;cN[c[m+56>>2]&255](n,c[k>>2]|0);k=c[l>>2]|0;cN[c[m+60>>2]&255](n,k);c[a>>2]=n;c[b>>2]=k;i=g;return}function ge(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=+e;f=+f;var g=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0.0;g=i;i=i+24|0;j=g|0;k=g+8|0;l=g+16|0;m=c[3524]|0;n=c[200]|0;o=+(c[64768+(n*688&-1)>>2]|0);p=+h[64664+(n*688&-1)>>3];q=+h[64776+(n*688&-1)>>3];c[j>>2]=~~(o+(d-p)*q+.5);c[k>>2]=~~(o+(e-p)*q+.5);n=c[144]|0;c[l>>2]=~~(+(c[64768+(n*688&-1)>>2]|0)+(f- +h[64664+(n*688&-1)>>3])*+h[64776+(n*688&-1)>>3]+.5);if((fl(j,l,k,l)|0)==0){i=g;return}n=c[l>>2]|0;cN[c[m+56>>2]&255](c[j>>2]|0,n);j=c[k>>2]|0;cN[c[m+60>>2]&255](j,n);c[a>>2]=j;c[b>>2]=n;i=g;return}function gf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0;f=b-1|0;g=+h[a+(f<<6)+8>>3];i=+h[a+(f<<6)+16>>3];j=+h[a+(b<<6)+8>>3];k=+h[a+(b<<6)+16>>3];if((c[a+(b<<6)>>2]|0)==0){b=c[200]|0;a=64664+(b*688&-1)|0;l=+h[a>>3];f=64672+(b*688&-1)|0;m=+h[f>>3];if(l<m){if(g<l|g>m){n=11829}else{n=11821}}else{if(g<m|g>l){n=11829}else{n=11821}}if((n|0)==11829){h[e>>3]=k;l=+h[a>>3];m=+h[f>>3];do{if(l<m){if(j>m){o=m;break}if(j>=l){o=j;break}o=l}else{if(j>l){o=l;break}if(j>=m){o=j;break}o=m}}while(0);h[d>>3]=o;return}else if((n|0)==11821){h[d>>3]=g;f=c[144]|0;o=+h[64664+(f*688&-1)>>3];m=+h[64672+(f*688&-1)>>3];do{if(o<m){if(i>m){p=m;break}if(i>=o){p=i;break}p=o}else{if(i>o){p=o;break}if(i>=m){p=i;break}p=m}}while(0);h[e>>3]=p;return}}else{f=c[144]|0;a=64664+(f*688&-1)|0;p=+h[a>>3];b=64672+(f*688&-1)|0;m=+h[b>>3];if(p<m){if(k<p|k>m){n=11848}else{n=11840}}else{if(k<m|k>p){n=11848}else{n=11840}}if((n|0)==11840){h[e>>3]=k;f=c[200]|0;p=+h[64664+(f*688&-1)>>3];m=+h[64672+(f*688&-1)>>3];do{if(p<m){if(j>m){q=m;break}if(j>=p){q=j;break}q=p}else{if(j>p){q=p;break}if(j>=m){q=j;break}q=m}}while(0);h[d>>3]=q;return}else if((n|0)==11848){h[d>>3]=g;g=+h[a>>3];q=+h[b>>3];do{if(g<q){if(k>q){r=q;break}if(k>=g){r=k;break}r=g}else{if(k>g){r=g;break}if(k>=q){r=k;break}r=q}}while(0);h[e>>3]=r;return}}}function gg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0;f=b-1|0;g=+h[a+(f<<6)+8>>3];i=+h[a+(f<<6)+16>>3];j=+h[a+(b<<6)+8>>3];k=+h[a+(b<<6)+16>>3];if((c[a+(b<<6)>>2]|0)==0){b=c[144]|0;a=64664+(b*688&-1)|0;l=+h[a>>3];f=64672+(b*688&-1)|0;m=+h[f>>3];if(l<m){if(i<l|i>m){n=11873}else{n=11865}}else{if(i<m|i>l){n=11873}else{n=11865}}if((n|0)==11865){h[e>>3]=i;b=c[200]|0;l=+h[64664+(b*688&-1)>>3];m=+h[64672+(b*688&-1)>>3];do{if(l<m){if(g>m){o=m;break}if(g>=l){o=g;break}o=l}else{if(g>l){o=l;break}if(g>=m){o=g;break}o=m}}while(0);h[d>>3]=o;return}else if((n|0)==11873){h[d>>3]=j;o=+h[a>>3];m=+h[f>>3];do{if(o<m){if(i>m){p=m;break}if(i>=o){p=i;break}p=o}else{if(i>o){p=o;break}if(i>=m){p=i;break}p=m}}while(0);h[e>>3]=p;return}}else{f=c[200]|0;a=64664+(f*688&-1)|0;p=+h[a>>3];b=64672+(f*688&-1)|0;m=+h[b>>3];if(p<m){if(j<p|j>m){n=11892}else{n=11884}}else{if(j<m|j>p){n=11892}else{n=11884}}if((n|0)==11892){h[e>>3]=i;i=+h[a>>3];p=+h[b>>3];do{if(i<p){if(j>p){q=p;break}if(j>=i){q=j;break}q=i}else{if(j>i){q=i;break}if(j>=p){q=j;break}q=p}}while(0);h[d>>3]=q;return}else if((n|0)==11884){h[d>>3]=j;d=c[144]|0;j=+h[64664+(d*688&-1)>>3];q=+h[64672+(d*688&-1)>>3];do{if(j<q){if(k>q){r=q;break}if(k>=j){r=k;break}r=j}else{if(k>j){r=j;break}if(k>=q){r=k;break}r=q}}while(0);h[e>>3]=r;return}}}function gh(b,d,e,f,g,j,k,l,m){b=+b;d=+d;e=+e;f=+f;g=+g;j=+j;k=+k;l=+l;m=m|0;var n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0,C=0.0,D=0.0,E=0.0,F=0.0,G=0,H=0,I=0.0,J=0.0,K=0,L=0,M=0.0;n=i;i=i+224|0;o=n|0;p=n+96|0;q=c[m+304>>2]|0;r=+h[64664+(q*688&-1)>>3];s=+h[64672+(q*688&-1)>>3];t=r<s?r:s;u=r>s?r:s;do{if(t<u){if(!(t>b|u<b)){break}if(!(t>g|u<g)){break}i=n;return}else{if(!(u>b|t<b)){break}if(!(u>g|t<g)){break}i=n;return}}while(0);s=g-b;if(t>b){r=t-b;v=t;w=(k-e)*r/s+e;x=(l-f)*r/s+f}else{v=b;w=e;x=f}if(u<g){f=u-g;y=u;z=f*(k-w)/s+k;A=f*(l-x)/s+l}else{y=g;z=k;A=l}q=(a[30528]&1)==0;l=y-v;B=c[m+308>>2]|0;k=+h[64664+(B*688&-1)>>3];g=+h[64672+(B*688&-1)>>3];s=k<g?k:g;f=k>g?k:g;if(w<s&x<s&z<s&A<s){i=n;return}if(w>f&x>f&z>f&A>f){i=n;return}B=c[200]|0;g=+(c[64768+(B*688&-1)>>2]|0);k=+h[64664+(B*688&-1)>>3];u=+h[64776+(B*688&-1)>>3];e=+(~~(g+(v-k)*u+.5)|0);h[p>>3]=e;B=c[144]|0;b=+(c[64768+(B*688&-1)>>2]|0);r=+h[64664+(B*688&-1)>>3];t=+h[64776+(B*688&-1)>>3];C=+(~~(b+(w-r)*t+.5)|0);h[p+8>>3]=C;D=+(~~(g+((q?v:d)-k)*u+.5)|0);h[p+16>>3]=D;d=+(~~(b+(x-r)*t+.5)|0);h[p+24>>3]=d;E=s-x;F=s-A;if(E!=F&E*F<0.0){h[p+40>>3]=+(~~(b+(s-r)*t+.5)|0);h[p+32>>3]=+(~~(g+(v+l*E/(E-F)-k)*u+.5)|0);G=3}else{G=2}F=f-x;E=f-A;if(F!=E&F*E<0.0){h[p+(G<<4)+8>>3]=+(~~(b+(f-r)*t+.5)|0);h[p+(G<<4)>>3]=+(~~(g+(v+l*F/(F-E)-k)*u+.5)|0);H=G+1|0}else{H=G}E=+(~~(g+((q?y:j)-k)*u+.5)|0);h[p+(H<<4)>>3]=E;j=+(~~(b+(A-r)*t+.5)|0);G=H+1|0;h[p+(H<<4)+8>>3]=j;F=+(~~(g+(y-k)*u+.5)|0);h[p+(G<<4)>>3]=F;y=+(~~(b+(z-r)*t+.5)|0);B=H+2|0;h[p+(G<<4)+8>>3]=y;I=s-w;J=s-z;if(I!=J&I*J<0.0){h[p+(B<<4)+8>>3]=+(~~(b+(s-r)*t+.5)|0);h[p+(B<<4)>>3]=+(~~(g+(v+l*I/(I-J)-k)*u+.5)|0);K=H+3|0}else{K=B}J=f-w;I=f-z;if(J!=I&J*I<0.0){h[p+(K<<4)+8>>3]=+(~~(b+(f-r)*t+.5)|0);h[p+(K<<4)>>3]=+(~~(g+(v+l*J/(J-I)-k)*u+.5)|0);L=K+1|0}else{L=K}if((L|0)>0){K=~~(b+(s-r)*t+.5);B=~~(b+(f-r)*t+.5);H=(K|0)<(B|0);f=+(B|0);s=+(K|0);K=0;do{c[o+(K*12&-1)>>2]=~~+h[p+(K<<4)>>3];B=p+(K<<4)+8|0;I=+h[B>>3];do{if(H){if(I>f){h[B>>3]=f;M=f;break}if(I>=s){M=I;break}h[B>>3]=s;M=s}else{if(I>s){h[B>>3]=s;M=s;break}if(I>=f){M=I;break}h[B>>3]=f;M=f}}while(0);c[o+(K*12&-1)+4>>2]=~~M;K=K+1|0;}while((K|0)<(L|0))}if(q){c[o+(L*12&-1)>>2]=x-w+(A-z)<0.0&1}else{z=+(~~(g+(0.0-k)*u+.5)|0);u=+(~~(b+(0.0-r)*t+.5)|0);t=e-z;e=C-u;C=D-z;D=d-u;d=F-z;F=y-u;y=E-z;z=j-u;c[o+(L*12&-1)>>2]=C*C+D*D-(t*t+e*e)+(y*y+z*z-(d*d+F*F))<0.0&1}gj(L,o|0,m);i=n;return}function gi(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0.0,l=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;i=e|d;if((i|0)==12){j=(g&1|0)!=0;g=c[200]|0;if(j){k=+h[64664+(g*688&-1)>>3];l=(k-k)*+h[64776+(g*688&-1)>>3]}else{l=(+h[64672+(g*688&-1)>>3]- +h[64664+(g*688&-1)>>3])*+h[64776+(g*688&-1)>>3]}c[a+((c[b>>2]|0)*12&-1)>>2]=~~(+(c[64768+(g*688&-1)>>2]|0)+l+.5);g=c[144]|0;if((d&8|0)==0){l=+h[64664+(g*688&-1)>>3];m=(l-l)*+h[64776+(g*688&-1)>>3]}else{m=(+h[64672+(g*688&-1)>>3]- +h[64664+(g*688&-1)>>3])*+h[64776+(g*688&-1)>>3]}n=~~(+(c[64768+(g*688&-1)>>2]|0)+m+.5);g=c[b>>2]|0;c[b>>2]=g+1;c[a+(g*12&-1)+4>>2]=n;n=c[200]|0;if(j){m=+h[64664+(n*688&-1)>>3];o=(m-m)*+h[64776+(n*688&-1)>>3]}else{o=(+h[64672+(n*688&-1)>>3]- +h[64664+(n*688&-1)>>3])*+h[64776+(n*688&-1)>>3]}c[a+((c[b>>2]|0)*12&-1)>>2]=~~(+(c[64768+(n*688&-1)>>2]|0)+o+.5);n=c[144]|0;if((e&8|0)==0){o=+h[64664+(n*688&-1)>>3];p=(o-o)*+h[64776+(n*688&-1)>>3]}else{p=(+h[64672+(n*688&-1)>>3]- +h[64664+(n*688&-1)>>3])*+h[64776+(n*688&-1)>>3]}j=~~(+(c[64768+(n*688&-1)>>2]|0)+p+.5);n=c[b>>2]|0;c[b>>2]=n+1;c[a+(n*12&-1)+4>>2]=j;return}else if((i|0)==3){j=c[200]|0;if((d&1|0)==0){q=(+h[64672+(j*688&-1)>>3]- +h[64664+(j*688&-1)>>3])*+h[64776+(j*688&-1)>>3]}else{p=+h[64664+(j*688&-1)>>3];q=(p-p)*+h[64776+(j*688&-1)>>3]}c[a+((c[b>>2]|0)*12&-1)>>2]=~~(+(c[64768+(j*688&-1)>>2]|0)+q+.5);j=(f&8|0)!=0;f=c[144]|0;if(j){r=(+h[64672+(f*688&-1)>>3]- +h[64664+(f*688&-1)>>3])*+h[64776+(f*688&-1)>>3]}else{q=+h[64664+(f*688&-1)>>3];r=(q-q)*+h[64776+(f*688&-1)>>3]}d=~~(+(c[64768+(f*688&-1)>>2]|0)+r+.5);f=c[b>>2]|0;c[b>>2]=f+1;c[a+(f*12&-1)+4>>2]=d;d=c[200]|0;if((e&1|0)==0){s=(+h[64672+(d*688&-1)>>3]- +h[64664+(d*688&-1)>>3])*+h[64776+(d*688&-1)>>3]}else{r=+h[64664+(d*688&-1)>>3];s=(r-r)*+h[64776+(d*688&-1)>>3]}c[a+((c[b>>2]|0)*12&-1)>>2]=~~(+(c[64768+(d*688&-1)>>2]|0)+s+.5);d=c[144]|0;if(j){t=(+h[64672+(d*688&-1)>>3]- +h[64664+(d*688&-1)>>3])*+h[64776+(d*688&-1)>>3]}else{s=+h[64664+(d*688&-1)>>3];t=(s-s)*+h[64776+(d*688&-1)>>3]}j=~~(+(c[64768+(d*688&-1)>>2]|0)+t+.5);d=c[b>>2]|0;c[b>>2]=d+1;c[a+(d*12&-1)+4>>2]=j;return}else{j=c[200]|0;if((i&1|0)==0){u=(+h[64672+(j*688&-1)>>3]- +h[64664+(j*688&-1)>>3])*+h[64776+(j*688&-1)>>3]}else{t=+h[64664+(j*688&-1)>>3];u=(t-t)*+h[64776+(j*688&-1)>>3]}c[a+((c[b>>2]|0)*12&-1)>>2]=~~(+(c[64768+(j*688&-1)>>2]|0)+u+.5);j=c[144]|0;if((i&8|0)==0){u=+h[64664+(j*688&-1)>>3];v=(u-u)*+h[64776+(j*688&-1)>>3]}else{v=(+h[64672+(j*688&-1)>>3]- +h[64664+(j*688&-1)>>3])*+h[64776+(j*688&-1)>>3]}i=~~(+(c[64768+(j*688&-1)>>2]|0)+v+.5);j=c[b>>2]|0;c[b>>2]=j+1;c[a+(j*12&-1)+4>>2]=i;return}}function gj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;if((a|0)<1){return}e=c[d+244>>2]|0;do{if((e|0)==9){f=c[200]|0;c[b+(a*12&-1)>>2]=~~(+(c[64768+(f*688&-1)>>2]|0)+(+h[d+248>>3]- +h[64664+(f*688&-1)>>3])*+h[64776+(f*688&-1)>>3]+.5);f=c[144]|0;c[b+(a*12&-1)+4>>2]=~~(+(c[64768+(f*688&-1)>>2]|0)+(+h[d+256>>3]- +h[64664+(f*688&-1)>>3])*+h[64776+(f*688&-1)>>3]+.5);g=a+1|0}else if((e|0)==1){c[b+(a*12&-1)>>2]=c[b+((a-1|0)*12&-1)>>2];f=a+1|0;c[b+(f*12&-1)>>2]=c[b>>2];i=c[16364]|0;c[b+(f*12&-1)+4>>2]=i;c[b+(a*12&-1)+4>>2]=i;g=a+2|0}else if((e|0)==4){c[b+(a*12&-1)+4>>2]=c[b+((a-1|0)*12&-1)+4>>2];i=a+1|0;c[b+(i*12&-1)+4>>2]=c[b+4>>2];f=c[16537]|0;c[b+(i*12&-1)>>2]=f;c[b+(a*12&-1)>>2]=f;g=a+2|0}else if((e|0)==5|(e|0)==7){f=c[200]|0;i=~~(+(c[64768+(f*688&-1)>>2]|0)+(+h[d+248>>3]- +h[64664+(f*688&-1)>>3])*+h[64776+(f*688&-1)>>3]+.5);f=a+1|0;c[b+(f*12&-1)>>2]=i;c[b+(a*12&-1)>>2]=i;c[b+(a*12&-1)+4>>2]=c[b+((a-1|0)*12&-1)+4>>2];c[b+(f*12&-1)+4>>2]=c[b+4>>2];if((a|0)>0){f=0;j=0;while(1){k=((c[b+(j*12&-1)>>2]|0)+f|0)-i|0;l=j+1|0;if((l|0)<(a|0)){f=k;j=l}else{m=k;break}}}else{m=0}n=a+2|0;o=m;p=12004}else if((e|0)==3){c[b+(a*12&-1)>>2]=c[b+((a-1|0)*12&-1)>>2];j=a+1|0;c[b+(j*12&-1)>>2]=c[b>>2];f=c[16365]|0;c[b+(j*12&-1)+4>>2]=f;c[b+(a*12&-1)+4>>2]=f;g=a+2|0}else if((e|0)==6|(e|0)==8){f=c[144]|0;j=~~(+(c[64768+(f*688&-1)>>2]|0)+(+h[d+248>>3]- +h[64664+(f*688&-1)>>3])*+h[64776+(f*688&-1)>>3]+.5);f=a+1|0;c[b+(f*12&-1)+4>>2]=j;c[b+(a*12&-1)+4>>2]=j;c[b+(a*12&-1)>>2]=c[b+((a-1|0)*12&-1)>>2];c[b+(f*12&-1)>>2]=c[b>>2];if((a|0)>0){f=0;i=0;while(1){k=((c[b+(i*12&-1)+4>>2]|0)+f|0)-j|0;l=i+1|0;if((l|0)<(a|0)){f=k;i=l}else{q=k;break}}}else{q=0}n=a+2|0;o=q;p=12004}else if((e|0)==2){c[b+(a*12&-1)+4>>2]=c[b+((a-1|0)*12&-1)+4>>2];i=a+1|0;c[b+(i*12&-1)+4>>2]=c[b+4>>2];f=c[16536]|0;c[b+(i*12&-1)>>2]=f;c[b+(a*12&-1)>>2]=f;g=a+2|0}else if((e|0)==10|(e|0)==13){f=(c[b+(a*12&-1)>>2]|0)>0?1:-1;if((c[d+192>>2]|0)!=4){n=a;o=f;p=12004;break}i=b+24|0;j=c[i>>2]|0;k=(j|0)<(c[b>>2]|0)?-1:1;if((a|0)<=3){n=a;o=f;p=12004;break}l=b+36|0;r=c[l>>2]|0;if((j|0)==(r|0)){s=j-k|0;c[i>>2]=s;c[l>>2]=s;n=a;o=f;p=12004;break}if((a|0)<=4){n=a;o=f;p=12004;break}s=b+48|0;if((r|0)!=(c[s>>2]|0)){n=a;o=f;p=12004;break}i=r-k|0;c[l>>2]=i;c[s>>2]=i;n=a;o=f;p=12004}else{g=a}}while(0);do{if((p|0)==12004){a=c[d+264>>2]|0;if((a|0)>0&(o|0)<0){return}if(!((a|0)<0&(o|0)>0)){g=n;break}return}}while(0);n=c[d+192>>2]|0;if((n|0)==1|(n|0)==4){t=(c[d+196>>2]<<4&65520)+n|0}else if((n|0)==2|(n|0)==5){t=(c[d+200>>2]<<4&65520)+n|0}else{t=0}c[b+8>>2]=t;cN[c[(c[3524]|0)+148>>2]&255](g,b);return}function gk(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=c[8978]|0;if((b|0)==0){return}if((c[8982]|0)>0){d=0;e=b;while(1){uu(c[e+(d<<4)>>2]|0);f=c[8978]|0;do{if((a[f+(d<<4)+12|0]&1)==0){g=f}else{h=c[f+(d<<4)+8>>2]|0;if((h|0)==0){g=f;break}else{i=h}while(1){uu(c[i>>2]|0);h=c[i+4>>2]|0;uu(i);if((h|0)==0){break}else{i=h}}g=c[8978]|0}}while(0);f=d+1|0;if((f|0)<(c[8982]|0)){d=f;e=g}else{j=g;break}}}else{j=b}uu(j);c[8978]=0;c[8982]=0;return}function gl(a,b){a=a|0;b=b|0;return aY(c[a>>2]|0,c[b>>2]|0)|0}function gm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0;f=i;i=i+2048|0;g=f|0;h=f+1024|0;c[b0()>>2]=0;if((a_(39e3,d|0,1024)|0)!=0){gk()}do{if((c[8978]|0)==0){j=h|0;k=bF(d|0,193632)|0;c[9748]=k;if((k|0)==0){l=-1;i=f;return l|0}n=(a6(j|0,1023,k|0)|0)!=0;if(!(n&(a[j]|0)==63)){l=-1;i=f;return l|0}L16406:do{if((cj(c[9748]|0)|0)==0){n=h+1|0;k=1;p=0;q=0;L16408:while(1){if((a[j]|0)==63){a[h+(uA(n|0)|0)|0]=0;r=ut(20)|0;if((r|0)==0){gk();s=ut(20)|0;if((s|0)==0){t=12038;break}else{u=s}}else{u=r}r=u;c[u>>2]=bP(n|0)|0;c[u+16>>2]=c[8980];c[8980]=r;c[8982]=(c[8982]|0)+1;a[u+12|0]=k;c[u+8>>2]=0;c[u+4>>2]=0;s=bc(c[9748]|0)|0;if((a6(j|0,1023,c[9748]|0)|0)==0){x=s;y=r}else{k=0;p=s;q=r;continue}}else{x=p;y=q}r=ut(8)|0;if((r|0)==0){gk();s=ut(8)|0;if((s|0)==0){t=12042;break}else{z=s}}else{z=r}r=z;c[z>>2]=bP(j|0)|0;c[z+4>>2]=0;s=(a6(j|0,1023,c[9748]|0)|0)==0;if(s|(a[j]|0)==63){A=y}else{s=r;while(1){B=ut(8)|0;if((B|0)==0){gk();C=ut(8)|0;if((C|0)==0){t=12046;break L16408}else{D=C}}else{D=B}B=D;c[D>>2]=bP(j|0)|0;c[D+4>>2]=0;c[s+4>>2]=B;C=(a6(j|0,1023,c[9748]|0)|0)==0;if(C|(a[j]|0)==63){A=y;break}else{s=B}}}while(1){c[A+4>>2]=x;c[A+8>>2]=r;E=c[A+16>>2]|0;if((a[A+12|0]&1)!=0|(E|0)==0){break}else{A=E}}if((cj(c[9748]|0)|0)==0){k=1;p=x;q=E}else{break L16406}}if((t|0)==12038){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=197768,v)|0);return 0}else if((t|0)==12042){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=202984,v)|0);return 0}else if((t|0)==12046){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=202984,v)|0);return 0}}}while(0);j=c[9748]|0;az(j|0);j=(c[8982]<<4)+16|0;q=ut(j)|0;do{if((q|0)==0){gk();p=ut(j)|0;if((p|0)!=0){F=p;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=206864,v)|0);return 0}else{F=q}}while(0);q=F;c[8978]=q;j=c[8980]|0;if((j|0)==0){G=q}else{p=j;j=0;k=q;while(1){c[k+(j<<4)>>2]=c[p>>2];c[(c[8978]|0)+(j<<4)+4>>2]=c[p+4>>2];c[(c[8978]|0)+(j<<4)+8>>2]=c[p+8>>2];a[(c[8978]|0)+(j<<4)+12|0]=a[p+12|0]&1;q=c[p+16>>2]|0;uu(p);if((q|0)==0){break}p=q;j=j+1|0;k=c[8978]|0}G=c[8978]|0}c[G+(c[8982]<<4)>>2]=0;c[(c[8978]|0)+(c[8982]<<4)+4>>2]=0;c[(c[8978]|0)+(c[8982]<<4)+8>>2]=0;bM(c[8978]|0,c[8982]|0,16,32);uF(39e3,d|0,1024);if((uA(d|0)|0)>>>0<1024){break}a[40023]=0}}while(0);d=c[8978]|0;G=d|0;F=c[G>>2]|0;if((F|0)==0){l=1;i=f;return l|0}E=bk(b|0,73808)|0;x=d;d=G;G=F;L16448:while(1){if((a_(b|0,G|0,E|0)|0)==0){do{if((a[G+E|0]|0)==0){H=G}else{F=x+16|0;A=F|0;y=c[A>>2]|0;if((y|0)==0){H=G;break}else{I=G;J=0;K=F;L=A;M=y}L16454:while(1){y=I+E|0;A=K;F=L;D=M;while(1){if((a_(G|0,D|0,E|0)|0)!=0){break L16454}if((a_(D|0,I|0,(bk(y|0,73808)|0)+E|0)|0)!=0){break}z=A+16|0;u=z|0;k=c[u>>2]|0;if((k|0)==0){break L16454}else{A=z;F=u;D=k}}if(J){N=D}else{y=c[m>>2]|0;cf(y|0,72704,(v=i,i=i+16|0,c[v>>2]=E,c[v+8>>2]=G,v)|0);y=c[m>>2]|0;cf(y|0,123448,(v=i,i=i+8|0,c[v>>2]=I,v)|0);N=c[F>>2]|0}cf(c[m>>2]|0,123448,(v=i,i=i+8|0,c[v>>2]=N,v)|0);y=A+16|0;k=y|0;u=c[k>>2]|0;if((u|0)==0){O=45032;break L16448}else{I=c[F>>2]|0;J=1;K=y;L=k;M=u}}if(J){O=45032;break L16448}H=c[d>>2]|0}}while(0);u=uA(H|0)|0;if((u|0)==(E|0)){P=E}else{k=u-E|0;y=(uA(b|0)|0)+k|0;if(y>>>0<E>>>0){Q=H}else{z=y;do{a[b+z|0]=a[b+(z-k|0)|0]|0;z=z-1|0;}while(z>>>0>=E>>>0);Q=c[d>>2]|0}uF(b|0,Q|0,u|0);P=u}if((a[b+P|0]|0)!=32){t=12080;break}z=P+1|0;R=x-16|0;S=(bk(b+z|0,73808)|0)+z|0}else{R=x;S=E}z=R+16|0;k=z|0;y=c[k>>2]|0;if((y|0)==0){l=1;t=12159;break}else{E=S;x=z;d=k;G=y}}if((t|0)==12159){i=f;return l|0}do{if((t|0)==12080){if((x|0)==0){l=1}else{O=x;break}i=f;return l|0}}while(0);x=O+8|0;if((c[x>>2]|0)==0){l=0;i=f;return l|0}gq();G=(e|0)==0;if(G){t=12084}else{if((a[e]&1)==0){t=12084}}do{if((t|0)==12084){d=c[x>>2]|0;if((d|0)==0){break}else{T=d}do{d=c[T>>2]|0;S=c[8250]|0;if((S|0)==(c[m>>2]|0)){if((c[8238]|0)<((c[6318]|0)-2|0)){U=S}else{aI(125440,23,1,S|0);do{E=a1(c[o>>2]|0)|0}while(!((E|0)==(-1|0)|(E|0)==10));c[8238]=0;U=c[m>>2]|0}aK(d|0,U|0);c[8238]=(c[8238]|0)+1}else{aK(d|0,S|0)}T=c[T+4>>2]|0;}while((T|0)!=0)}}while(0);T=h|0;a[T]=0;U=O|0;x=c[U>>2]|0;u=uA(x|0)|0;E=O+16|0;R=c[E>>2]|0;do{if((R|0)==0){V=0}else{b=(u|0)==0;P=u+1|0;Q=O;H=0;J=0;M=0;L=E;K=R;I=x;L16505:while(1){N=(J|0)==0;y=Q;k=L;z=K;while(1){if((a_(z|0,I|0,u|0)|0)!=0){W=H;X=M;break L16505}j=z+u|0;if(b){if((a[y+28|0]&1)!=0){Y=j;t=12102}}else{if((a[j]|0)!=32){W=H;X=M;break L16505}Y=z+P|0;t=12102}if((t|0)==12102){t=0;if(N){break}if((a_(Y|0,J|0,bk(Y|0,73808)|0)|0)!=0){break}}j=k+16|0;p=c[j>>2]|0;if((p|0)==0){W=H;X=M;break L16505}else{y=k;k=j;z=p}}if((H|0)==0){if(b){uD(T|0,77784,25)}else{uD(T|0,94064,26);ck(T|0,I|0,996);z=h+(uA(T|0)|0)|0;a[z]=a[86832]|0;a[z+1|0]=a[86833|0]|0;a[z+2|0]=a[86834|0]|0}z=c[8250]|0;y=c[m>>2]|0;if((z|0)==(y|0)){if((c[8238]|0)<((c[6318]|0)-2|0)){Z=z}else{aI(125440,23,1,z|0);do{z=a1(c[o>>2]|0)|0}while(!((z|0)==(-1|0)|(z|0)==10));c[8238]=0;Z=c[m>>2]|0}aK(T|0,Z|0);c[8238]=(c[8238]|0)+1}else{aK(T|0,y|0)}a[T]=0;_=1}else{_=H}z=M+1|0;c[g+(M<<2)>>2]=Y;N=k+16|0;S=c[N>>2]|0;if((S|0)==0){W=_;X=z;break}Q=k;H=_;J=Y;M=z;L=N;K=S;I=c[U>>2]|0}if((X|0)>0){$=0;aa=0;ab=0}else{V=W;break}while(1){I=c[g+($<<2)>>2]|0;K=bk(I|0,73808)|0;L=(ab|0)==0?4:aa;if((L|0)>0){M=0;do{J=h+(uA(T|0)|0)|0;w=32;a[J]=w&255;w=w>>8;a[J+1|0]=w&255;M=M+1|0;}while((M|0)<(L|0))}ck(T|0,I|0,K|0);L=18-K|0;if((L|0)<1){M=((K-18|0)>>>0)/18>>>0;ac=(36-K|0)+(M*18&-1)|0;ad=(ab+1|0)+M|0}else{ac=L;ad=ab}L=ad+1|0;if((L|0)>3){M=h+(uA(T|0)|0)|0;w=10;a[M]=w&255;w=w>>8;a[M+1|0]=w&255;M=c[8250]|0;k=c[m>>2]|0;if((M|0)==(k|0)){if((c[8238]|0)<((c[6318]|0)-2|0)){ae=M}else{aI(125440,23,1,M|0);do{M=a1(c[o>>2]|0)|0}while(!((M|0)==(-1|0)|(M|0)==10));c[8238]=0;ae=c[m>>2]|0}aK(T|0,ae|0);c[8238]=(c[8238]|0)+1}else{aK(T|0,k|0)}a[T]=0;af=0}else{af=L}K=$+1|0;if((K|0)<(X|0)){$=K;aa=ac;ab=af}else{break}}if(!((W|0)>0&(af|0)>0)){V=W;break}K=h+(uA(T|0)|0)|0;w=10;a[K]=w&255;w=w>>8;a[K+1|0]=w&255;K=c[8250]|0;I=c[m>>2]|0;if((K|0)!=(I|0)){aK(T|0,I|0);V=W;break}if((c[8238]|0)<((c[6318]|0)-2|0)){ag=K}else{aI(125440,23,1,K|0);do{K=a1(c[o>>2]|0)|0}while(!((K|0)==(-1|0)|(K|0)==10));c[8238]=0;ag=c[m>>2]|0}aK(T|0,ag|0);c[8238]=(c[8238]|0)+1;V=W}}while(0);if(!G){a[e]=(V|0)!=0&1}V=c[8250]|0;e=c[m>>2]|0;if((V|0)==(e|0)){if((c[8238]|0)<((c[6318]|0)-2|0)){ah=V}else{aI(125440,23,1,V|0);do{V=a1(c[o>>2]|0)|0}while(!((V|0)==(-1|0)|(V|0)==10));c[8238]=0;ah=c[m>>2]|0}aF(10,ah|0);c[8238]=(c[8238]|0)+1}else{aF(10,e|0)}e=c[8250]|0;if((e|0)==(c[m>>2]|0)){l=0;i=f;return l|0}a2(e|0);l=0;i=f;return l|0}function gn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0;d=c[11608]|0;e=c[228]|0;f=+h[e+((c[d+((c[a>>2]|0)*20&-1)+4>>2]|0)*48&-1)+16>>3]- +h[e+((c[d+((c[b>>2]|0)*20&-1)+4>>2]|0)*48&-1)+16>>3];if(f<-1.0e-5){g=-1;return g|0}g=f>1.0e-5&1;return g|0}function go(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0;d=c[7628]|0;e=+h[d+((c[a>>2]|0)*104&-1)+56>>3]- +h[d+((c[b>>2]|0)*104&-1)+56>>3];if(e<-1.0e-5){f=-1;return f|0}f=e>1.0e-5&1;return f|0}function gp(){var b=0,d=0,e=0;b=i;cf(c[m>>2]|0,125144,(v=i,i=i+8|0,c[v>>2]=(c[9744]|0)==0?150704:150856,v)|0);d=c[9734]|0;e=c[9738]|0;cf(c[m>>2]|0,93824,(v=i,i=i+24|0,c[v>>2]=c[9742],c[v+8>>2]=d,c[v+16>>2]=e,v)|0);e=c[9738]|0;if((e|0)==2){d=c[m>>2]|0;aI(77648,56,1,d|0)}else if((e|0)==1){aI(86680,65,1,c[m>>2]|0)}else if((e|0)==3){aI(72584,61,1,c[m>>2]|0)}else{aI(218160,60,1,c[m>>2]|0)}e=a[38960]|0?211688:179864;cf(c[m>>2]|0,212512,(v=i,i=i+16|0,c[v>>2]=a[38944]|0?211688:179864,c[v+8>>2]=e,v)|0);i=b;return}function gq(){var b=0,d=0,e=0,f=0,g=0;b=i;d=bU(75160)|0;do{if((d|0)!=0){if((a[d]|0)==0){break}if(!(a[14168]|0)){uf(-1,145320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=bt(d|0,137896)|0;c[8250]=e;if((e|0)==0){break}i=b;return}}while(0);c[8250]=c[m>>2];d=bU(139752)|0;if((d|0)==0){f=12184}else{e=aE(d|0,0,0)|0;if((e|0)<3){f=12184}else{g=e}}if((f|0)==12184){g=24}c[6318]=g;c[8238]=0;i=b;return}function gr(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0.0;b=i;i=i+72|0;d=b|0;e=b+24|0;f=b+48|0;g=c[13898]|0;j=c[8272]|0;if((g|0)>=(j|0)){i=b;return}k=e|0;l=e+8|0;m=d|0;n=d+8|0;o=f|0;p=f+8|0;q=g;g=j;L16625:while(1){r=c[1054]|0;j=(a[r+(q*40&-1)|0]&1)==0;s=c[r+(q*40&-1)+36>>2]|0;L16627:do{if(j){t=c[10036]|0;u=r+(q*40&-1)+32|0}else{w=r+(q*40&-1)+32|0;x=c[10036]|0;y=0;while(1){if((y|0)>=(s|0)){break}if((a[x+((c[w>>2]|0)+y|0)|0]|0)==(a[y+103664|0]|0)){y=y+1|0}else{t=x;u=w;break L16627}}if((y|0)==1){z=12257;break L16625}else{t=x;u=w}}}while(0);A=c[u>>2]|0;B=(s|0)>0;C=24304;D=153928;L16635:while(1){L16637:do{if(!j){if(B){E=0;F=0;G=A;while(1){H=a[D+E|0]|0;if(H<<24>>24==(a[t+(E+G|0)|0]|0)){I=G;J=F}else{if(H<<24>>24!=36){break L16637}I=G-1|0;J=1}K=E+1|0;if((K|0)<(J+s|0)){E=K;F=J;G=I}else{break}}if((J|0)==0){L=K}else{M=C;break L16635}}else{L=0}G=a[D+L|0]|0;if((G<<24>>24|0)==36|(G<<24>>24|0)==0){M=C;break L16635}}}while(0);w=C+8|0;x=c[w>>2]|0;if((x|0)==0){M=w;break}else{C=w;D=x}}D=c[M+4>>2]|0;if((D|0)==0){z=12247;break}else if((D|0)==1){z=12208;break}else if((D|0)==3){c[9742]=0;N=q}else if((D|0)==6){c[9738]=3;N=q}else if((D|0)==2){c[13898]=q+1;C=is(e)|0;s=c[C>>2]|0;if((s|0)==3){O=+uz(c[C+8>>2]|0,0)}else if((s|0)==2){O=+h[C+8>>3]}else if((s|0)==1){O=+(c[C+8>>2]|0)}else{z=12219;break}if((c[k>>2]|0)==3){uu(c[l>>2]|0);c[k>>2]=1}c[9742]=~~O;C=(c[13898]|0)-1|0;c[13898]=C;N=C}else if((D|0)==5){c[13898]=q+1;C=is(f)|0;s=c[C>>2]|0;if((s|0)==2){P=+h[C+8>>3]}else if((s|0)==1){P=+(c[C+8>>2]|0)}else if((s|0)==3){P=+uz(c[C+8>>2]|0,0)}else{z=12236;break}if((c[o>>2]|0)==3){uu(c[p>>2]|0);c[o>>2]=1}C=~~P;c[9738]=(C-1|0)>>>0>2?3:C;C=(c[13898]|0)-1|0;c[13898]=C;N=C}else if((D|0)==7){a[38944]=0;N=q}else if((D|0)==8){a[38944]=1;N=q}else if((D|0)==12){c[9744]=0;N=q}else if((D|0)==11){c[9744]=1;N=q}else if((D|0)==9){a[38960]=0;N=q}else if((D|0)==10){a[38960]=1;N=q}else if((D|0)==4){c[13898]=q+1;D=is(d)|0;C=c[D>>2]|0;if((C|0)==1){Q=+(c[D+8>>2]|0)}else if((C|0)==2){Q=+h[D+8>>3]}else if((C|0)==3){Q=+uz(c[D+8>>2]|0,0)}else{z=12228;break}if((c[m>>2]|0)==3){uu(c[n>>2]|0);c[m>>2]=1}c[9734]=~~Q;D=(c[13898]|0)-1|0;c[13898]=D;N=D}else{N=q}D=N+1|0;c[13898]=D;C=c[8272]|0;if((D|0)<(C|0)){q=D;g=C}else{z=12255;break}}if((z|0)==12257){i=b;return}else if((z|0)==12247){uf(q,139344,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==12208){c[9742]=1;c[9734]=3;c[9738]=1;a[38944]=0;a[38960]=0;c[9744]=0;N=q+1|0;c[13898]=N;if((N|0)>=(g|0)){i=b;return}if((a[r+(N*40&-1)|0]&1)==0){uf(N,170328,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=c[r+(N*40&-1)+36>>2]|0;q=r+(N*40&-1)+32|0;r=0;while(1){if((r|0)>=(g|0)){break}if((a[t+((c[q>>2]|0)+r|0)|0]|0)==(a[r+103664|0]|0)){r=r+1|0}else{z=12251;break}}if((z|0)==12251){uf(N,170328,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((r|0)==1){i=b;return}else{uf(N,170328,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}else if((z|0)==12255){i=b;return}else if((z|0)==12228){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==12219){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==12236){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function gs(){var a=0,b=0,d=0,e=0,f=0,g=0;a=i;if((c[9738]|0)<1){c[9738]=3}c[228]=0;b=ut(4800)|0;do{if((b|0)==0){gk();d=ut(4800)|0;if((d|0)!=0){e=d;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=129728,v)|0)}else{e=b}}while(0);c[228]=e;c[224]=100;c[225]=0;c[226]=100;c[227]=48;c[11608]=0;e=ut(2e3)|0;do{if((e|0)==0){gk();b=ut(2e3)|0;if((b|0)!=0){f=b;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=129728,v)|0)}else{f=e}}while(0);c[11608]=f;c[11604]=100;c[11605]=0;c[11606]=100;c[11607]=20;c[7628]=0;f=ut(10400)|0;if((f|0)!=0){g=f;c[7628]=g;c[7624]=100;c[7625]=0;c[7626]=100;c[7627]=104;i=a;return}gk();f=ut(10400)|0;if((f|0)==0){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=129728,v)|0)}else{g=f;c[7628]=g;c[7624]=100;c[7625]=0;c[7626]=100;c[7627]=104;i=a;return}}function gt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;e=i;i=i+8|0;f=e|0;if((c[7625]|0)==0){un(a,b,d,d+40|0);i=e;return}g=c[228]|0;if((g|0)==0){uk(132480,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}j=c[225]|0;k=c[224]|0;do{if((j|0)<(k|0)){l=j;m=g}else{n=(c[226]|0)+k|0;if((n|0)==0){uu(g);c[228]=0;c[224]=0;c[225]=0;l=0;m=0;break}else{o=db(g,aa(c[227]|0,n),150384)|0;c[228]=o;c[224]=n;l=c[225]|0;m=o;break}}}while(0);c[225]=l+1;g=m;m=g+(l*48&-1)|0;k=a;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];c[m+12>>2]=c[k+12>>2];c[m+16>>2]=c[k+16>>2];c[m+20>>2]=c[k+20>>2];c[m+24>>2]=c[k+24>>2];c[m+28>>2]=c[k+28>>2];c[m+32>>2]=c[k+32>>2];c[m+36>>2]=c[k+36>>2];c[m+40>>2]=c[k+40>>2];c[m+44>>2]=c[k+44>>2];k=(b|0)!=0;m=g+(l*48&-1)+24|0;if(k){c[m>>2]=0;g=c[228]|0;if((g|0)==0){uk(132480,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}a=c[225]|0;j=c[224]|0;do{if((a|0)<(j|0)){p=a;q=g}else{o=(c[226]|0)+j|0;if((o|0)==0){uu(g);c[228]=0;c[224]=0;c[225]=0;p=0;q=0;break}else{n=db(g,aa(c[227]|0,o),150384)|0;c[228]=n;c[224]=o;p=c[225]|0;q=n;break}}}while(0);c[225]=p+1;g=q;q=g+(p*48&-1)|0;j=b;c[q>>2]=c[j>>2];c[q+4>>2]=c[j+4>>2];c[q+8>>2]=c[j+8>>2];c[q+12>>2]=c[j+12>>2];c[q+16>>2]=c[j+16>>2];c[q+20>>2]=c[j+20>>2];c[q+24>>2]=c[j+24>>2];c[q+28>>2]=c[j+28>>2];c[q+32>>2]=c[j+32>>2];c[q+36>>2]=c[j+36>>2];c[q+40>>2]=c[j+40>>2];c[q+44>>2]=c[j+44>>2];c[g+(p*48&-1)+24>>2]=0;r=p}else{c[m>>2]=d;r=l}m=c[d+4>>2]|0;p=c[11608]|0;if((p|0)==0){uk(132480,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=c[11605]|0;j=c[11604]|0;do{if((g|0)<(j|0)){s=p;t=g}else{q=(c[11606]|0)+j|0;if((q|0)==0){uu(p);c[11608]=0;c[11604]=0;c[11605]=0;s=0;t=0;break}else{b=db(p,aa(c[11607]|0,q),150384)|0;c[11608]=b;c[11604]=q;s=b;t=c[11605]|0;break}}}while(0);p=c[11607]|0;c[11605]=t+1;j=aa(p,t);t=s+j|0;p=c[228]|0;g=s+(j+8|0)|0;c[g>>2]=m;c[s+(j+12|0)>>2]=d;c[s+(j+16|0)>>2]=-1;m=t;do{if(+h[p+(l*48&-1)+16>>3]<+h[p+(r*48&-1)+16>>3]){c[m>>2]=r;c[s+(j+4|0)>>2]=l;if((c[d+8>>2]|0)!=-10){break}c[g>>2]=-11}else{c[m>>2]=l;c[s+(j+4|0)>>2]=r;if((c[d+8>>2]|0)!=-10){break}c[g>>2]=-10}}while(0);g=c[11608]|0;d=(t-g|0)/20&-1;c[f>>2]=c[8022];t=g;gu(d,c[t+(d*20&-1)>>2]|0,c[t+(d*20&-1)+4>>2]|0,f);if((c[11608]|0)==0){uk(119400,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=c[11605]|0;if((f|0)!=0){c[11605]=f-1}if((c[228]|0)==0){uk(119400,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=c[225]|0;if((f|0)==0){u=0}else{d=f-1|0;c[225]=d;u=d}if((u|0)==0|k^1){i=e;return}c[225]=u-1;i=e;return}function gu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0.0,ac=0.0,ad=0.0,ae=0.0,af=0.0,ag=0.0,ah=0.0,ai=0.0,aj=0.0,ak=0.0,al=0.0,am=0.0,an=0.0,ao=0.0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0.0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0;f=i;i=i+56|0;g=f|0;j=f+8|0;k=c[228]|0;l=k;m=l+(b*48&-1)|0;n=l+(d*48&-1)|0;o=+h[l+(b*48&-1)+16>>3]>+h[l+(d*48&-1)+16>>3];d=o?n:m;l=o?m:n;n=k;m=(l-n|0)/48&-1;o=(d-n|0)/48&-1;p=+h[d+16>>3];q=+h[l>>3];r=+h[d>>3];n=q>r;s=+h[l+8>>3];t=+h[d+8>>3];b=s>t;u=c[225]|0;w=c[e>>2]|0;do{if((w|0)>-1){x=j|0;y=p;z=b?s:t;A=b?t:s;B=n?q:r;C=n?r:q;D=d;E=l;F=o;G=m;H=w;L16789:while(1){I=c[7628]|0;J=I+(H*104&-1)|0;L16791:do{if(+h[I+(H*104&-1)+24>>3]<C){K=G;L=F;M=E;N=D;O=C;P=B;Q=A;R=z;S=y}else{if(+h[I+(H*104&-1)+16>>3]>B){K=G;L=F;M=E;N=D;O=C;P=B;Q=A;R=z;S=y;break}if(+h[I+(H*104&-1)+40>>3]<A){K=G;L=F;M=E;N=D;O=C;P=B;Q=A;R=z;S=y;break}if(+h[I+(H*104&-1)+32>>3]>z){K=G;L=F;M=E;N=D;O=C;P=B;Q=A;R=z;S=y;break}T=+h[I+(H*104&-1)+56>>3];if(T<y){if(T>=p){K=G;L=F;M=E;N=D;O=C;P=B;Q=A;R=z;S=y;break}c[e>>2]=H;K=G;L=F;M=E;N=D;O=C;P=B;Q=A;R=z;S=y;break}U=c[J>>2]|0;V=c[11608]|0;W=c[V+(a*20&-1)>>2]|0;do{if((U|0)==(W|0)){X=12326}else{Y=c[I+(H*104&-1)+4>>2]|0;if((Y|0)==(W|0)){X=12326;break}Z=c[I+(H*104&-1)+8>>2]|0;if((Z|0)==(W|0)){X=12326}else{_=Y;$=Z}}}while(0);if((X|0)==12326){X=0;W=c[V+(a*20&-1)+4>>2]|0;if((U|0)==(W|0)){K=G;L=F;M=E;N=D;O=C;P=B;Q=A;R=z;S=y;break}Z=c[I+(H*104&-1)+4>>2]|0;if((Z|0)==(W|0)){K=G;L=F;M=E;N=D;O=C;P=B;Q=A;R=z;S=y;break}Y=c[I+(H*104&-1)+8>>2]|0;if((Y|0)==(W|0)){K=G;L=F;M=E;N=D;O=C;P=B;Q=A;R=z;S=y;break}else{_=Z;$=Y}}aa=c[228]|0;Y=aa;Z=E|0;T=+h[Z>>3];W=E+8|0;ab=+h[W>>3];ac=+h[E+16>>3];ad=+h[I+(H*104&-1)+64>>3];ae=+h[I+(H*104&-1)+72>>3];af=+h[I+(H*104&-1)+80>>3];ag=+h[I+(H*104&-1)+88>>3]+(T*ad+ab*ae+ac*af);if(ag==0.0){ah=0.0}else{ah=ag/(ad*(T- +h[D>>3])+ae*(ab- +h[D+8>>3])+af*(ac- +h[D+16>>3]))}ac=+h[Z>>3];af=+h[W>>3];ab=+h[Y+(U*48&-1)>>3];ae=+h[Y+(U*48&-1)+8>>3];T=+h[Y+(_*48&-1)>>3];ad=+h[Y+(_*48&-1)+8>>3];ag=T-ab;ai=ad-ae;aj=(af-ae)*ag-(ac-ab)*ai;if(aj==0.0){ak=0.0}else{ak=aj/(ai*(+h[D>>3]-ac)-ag*(+h[D+8>>3]-af))}af=+h[Z>>3];ag=+h[W>>3];ac=+h[Y+($*48&-1)>>3];ai=+h[Y+($*48&-1)+8>>3];aj=ac-T;al=ai-ad;am=(ag-ad)*aj-(af-T)*al;if(am==0.0){an=0.0}else{an=am/(al*(+h[D>>3]-af)-aj*(+h[D+8>>3]-ag))}ag=+h[Z>>3];aj=+h[W>>3];af=ab-ac;ab=ae-ai;ae=(aj-ai)*af-(ag-ac)*ab;if(ae==0.0){ao=0.0}else{ao=ae/(ab*(+h[D>>3]-ag)-af*(+h[D+8>>3]-aj))}h[x>>3]=0.0;if(ah>0.0&ah<1.0){h[j+8>>3]=ah;ap=2}else{ap=1}if(ak>0.0&ak<1.0){h[j+(ap<<3)>>3]=ak;aq=ap+1|0}else{aq=ap}if(an>0.0&an<1.0){h[j+(aq<<3)>>3]=an;ar=aq+1|0}else{ar=aq}if(ao>0.0&ao<1.0){h[j+(ar<<3)>>3]=ao;as=ar+1|0}else{as=ar}h[j+(as<<3)>>3]=1.0;L16832:do{if((as|0)>1){W=1;while(1){Z=W+1|0;Y=(Z|0)<(as|0);if(!Y){at=0;break L16832}au=j+(W<<3)|0;av=Z;do{aj=+h[au>>3];aw=j+(av<<3)|0;af=+h[aw>>3];if(aj>af){h[au>>3]=af;h[aw>>3]=aj}av=av+1|0;}while((av|0)<(as|0));if(Y){W=Z}else{at=0;break}}}else{at=0}}while(0);while(1){if((at|0)>=(as|0)){K=G;L=F;M=E;N=D;O=C;P=B;Q=A;R=z;S=y;break L16791}ax=+h[j+(at<<3)>>3];ay=gB(E,D,ax,J)|0;if((ay|0)==0){at=at+1|0}else{az=0;aA=at;break}}while(1){if((aA|0)>=(as|0)){break}U=aA+1|0;V=gB(E,D,+h[j+(U<<3)>>3],J)|0;if((V|0)==0){break}else{az=V;aA=U}}if((at|0)==(aA|0)){K=G;L=F;M=E;N=D;O=C;P=B;Q=A;R=z;S=y;break}if((ay|0)==2&(az|0)==2){K=G;L=F;M=E;N=D;O=C;P=B;Q=A;R=z;S=y;break}U=(aA|0)==(as|0);if((at|0)==0){if(U){break L16789}V=gC(G,F,+h[j+(aA<<3)>>3])|0;W=c[228]|0;av=W;au=av+(V*48&-1)|0;aw=av+(F*48&-1)|0;aB=+h[av+(V*48&-1)+16>>3]>+h[av+(F*48&-1)+16>>3];av=aB?aw:au;V=aB?au:aw;aw=W;aj=+h[V>>3];af=+h[av>>3];W=aj>af;ag=+h[V+8>>3];ab=+h[av+8>>3];au=ag>ab;K=(V-aw|0)/48&-1;L=(av-aw|0)/48&-1;M=V;N=av;O=W?af:aj;P=W?aj:af;Q=au?ab:ag;R=au?ag:ab;S=+h[av+16>>3];break}av=gC(G,F,ax)|0;if(U){U=c[228]|0;au=U;W=au+(G*48&-1)|0;V=au+(av*48&-1)|0;aw=+h[au+(G*48&-1)+16>>3]>+h[au+(av*48&-1)+16>>3];au=aw?V:W;aB=aw?W:V;V=U;ab=+h[aB>>3];ag=+h[au>>3];U=ab>ag;af=+h[aB+8>>3];aj=+h[au+8>>3];W=af>aj;K=(aB-V|0)/48&-1;L=(au-V|0)/48&-1;M=aB;N=au;O=U?ag:ab;P=U?ab:ag;Q=W?aj:af;R=W?af:aj;S=+h[au+16>>3];break}au=gC(G,F,+h[j+(aA<<3)>>3])|0;if((au|0)==(G|0)){K=G;L=F;M=E;N=D;O=C;P=B;Q=A;R=z;S=y;break}c[g>>2]=c[(c[7628]|0)+(H*104&-1)+100>>2];gu(a,au,F,g);au=c[228]|0;W=au;U=W+(G*48&-1)|0;aB=W+(av*48&-1)|0;V=+h[W+(G*48&-1)+16>>3]>+h[W+(av*48&-1)+16>>3];av=V?aB:U;W=V?U:aB;aB=au;aj=+h[W>>3];af=+h[av>>3];au=aj>af;ag=+h[W+8>>3];ab=+h[av+8>>3];U=ag>ab;K=(W-aB|0)/48&-1;L=(av-aB|0)/48&-1;M=W;N=av;O=au?af:aj;P=au?aj:af;Q=U?ab:ag;R=U?ag:ab;S=+h[av+16>>3]}}while(0);J=c[I+(H*104&-1)+100>>2]|0;if((J|0)>-1){y=S;z=R;A=Q;B=P;C=O;D=N;E=M;F=L;G=K;H=J}else{X=12367;break}}if((X|0)==12367){aC=L;aD=K;aE=c[228]|0;break}H=c[225]|0;if((H|0)<=(u|0)){i=f;return}G=(aa|0)==0;F=H;while(1){if(G){X=12358;break}if((F|0)==0){if((u|0)<0){F=0;continue}else{X=12385;break}}else{H=F-1|0;c[225]=H;if((H|0)>(u|0)){F=H;continue}else{X=12382;break}}}if((X|0)==12358){uk(119400,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((X|0)==12385){i=f;return}else if((X|0)==12382){i=f;return}}else{aC=o;aD=m;aE=k}}while(0);k=aE;gw((c[11608]|0)+(a*20&-1)|0,k+(aD*48&-1)|0,k+(aC*48&-1)|0);aC=c[225]|0;if((aC|0)<=(u|0)){i=f;return}k=(c[228]|0)==0;aD=aC;while(1){if(k){X=12372;break}if((aD|0)==0){if((u|0)<0){aD=0;continue}else{X=12386;break}}else{aC=aD-1|0;c[225]=aC;if((aC|0)>(u|0)){aD=aC;continue}else{X=12384;break}}}if((X|0)==12384){i=f;return}else if((X|0)==12386){i=f;return}else if((X|0)==12372){uk(119400,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function gv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0.0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0.0,aC=0.0,aD=0.0,aE=0.0,aF=0.0,aG=0.0,aH=0.0,aI=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0.0,aW=0,aX=0.0,aY=0,aZ=0,a_=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,ba=0,bb=0,bc=0,bd=0,be=0;e=i;i=i+128|0;f=e|0;g=e+8|0;j=e+16|0;k=e+56|0;l=e+120|0;do{if((d|0)>0){m=0;n=0;o=0;p=-1;q=0;r=b;L16892:while(1){s=c[r+8>>2]|0;do{if((s|0)==4){t=p;u=o;w=n;x=m}else{y=c[r+260>>2]|0;z=c[y+8>>2]|0;if((a[r+236|0]&1)!=0){t=p;u=o;w=n;x=m;break}A=(z|0)>(p|0)?z:p;do{if((s|0)==2){if((y|0)==0){B=0}else{C=0;D=y;while(1){E=C+1|0;F=c[D>>2]|0;if((F|0)==0){B=E;break}else{C=E;D=F}}}G=B;H=aa(B,z)}else if((s|0)==3){D=c[r+252>>2]|0;if((c[r+244>>2]|0)!=0){G=D;H=aa(D,z);break}if((c[r+12>>2]|0)==225){G=D;H=z;break}if((y|0)==0){G=D;H=0;break}C=c[y>>2]|0;if((C|0)==0){G=D;H=z;break}else{I=z;J=C}while(1){C=I+(c[J+8>>2]|0)|0;F=c[J>>2]|0;if((F|0)==0){G=D;H=C;break}else{I=C;J=F}}}else{K=12401;break L16892}}while(0);y=c[r+12>>2]|0;if((y|0)==153|(y|0)==345|(y|0)==33|(y|0)==225){t=A;u=(H<<1)+o|0;w=H+n|0;x=m;break}else if((y|0)==352|(y|0)==51|(y|0)==177|(y|0)==193|(y|0)==209|(y|0)==1){y=H+o|0;D=(H-G|0)+n|0;if((c[r+244>>2]|0)==0){t=A;u=y;w=D;x=m;break}t=A;u=y;w=(((-(z<<1)|1)-G|0)+(H<<1)|0)+D|0;x=aa((G<<1)-2|0,z-1|0)+m|0;break}else{t=A;u=H+o|0;w=H+n|0;x=m;break}}}while(0);s=q+1|0;if((s|0)<(d|0)){m=x;n=w;o=u;p=t;q=s;r=c[r>>2]|0}else{break}}if((K|0)==12401){uk(164696,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((t|0)<1){break}r=c[228]|0;if((r|0)==0){uk(203872,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((u|0)==0){uu(r);c[228]=0;c[224]=0;c[225]=0}else{c[228]=db(r,aa(c[227]|0,u),150384)|0;c[224]=u}r=c[11608]|0;if((r|0)==0){uk(203872,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((w|0)==0){uu(r);c[11608]=0;c[11604]=0;c[11605]=0}else{c[11608]=db(r,aa(c[11607]|0,w),150384)|0;c[11604]=w}r=c[7628]|0;if((r|0)==0){uk(203872,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((x|0)==0){uu(r);c[7628]=0;c[7624]=0;c[7625]=0}else{c[7628]=db(r,aa(c[7627]|0,x),150384)|0;c[7624]=x}r=t<<3;q=ut(r)|0;do{if((q|0)==0){gk();p=ut(r)|0;if((p|0)!=0){L=p;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=155272,v)|0)}else{L=q}}while(0);q=L;p=ut(r)|0;do{if((p|0)==0){gk();o=ut(r)|0;if((o|0)!=0){M=o;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=151696,v)|0)}else{M=p}}while(0);p=M;r=t*12&-1;o=ut(r)|0;do{if((o|0)==0){gk();n=ut(r)|0;if((n|0)!=0){N=n;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=149768,v)|0)}else{N=o}}while(0);o=N;n=ut(r)|0;do{if((n|0)==0){gk();m=ut(r)|0;if((m|0)!=0){O=m;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=147944,v)|0)}else{O=n}}while(0);n=j;r=j+4|0;m=j+8|0;s=j+16|0;D=j|0;y=k|0;F=k+8|0;C=k+16|0;E=k+24|0;P=k+32|0;Q=O;R=o;S=p;T=q;U=0;V=b;L16959:while(1){W=a[V+239|0]|0;X=V+24|0;L16961:do{if((c[V+8>>2]|0)==4){Y=T;Z=S;_=R;$=Q}else{ab=V+260|0;ac=c[(c[ab>>2]|0)+8>>2]|0;if((a[V+236|0]&1)!=0){Y=T;Z=S;_=R;$=Q;break}ad=c[V+240>>2]|0;ae=(ad|0)==-9;af=V+12|0;ag=c[af>>2]|0;ah=(ag|0)==352;ai=ah?-3:ae?-8:(c[9742]|0)+ad|0;aj=ah?-3:ae?-8:ad;do{if((ag|0)==225){c[V+32>>2]=-10;ad=V+152|0;if((c[V+144>>2]|0)==0){h[ad>>3]=1.0;h[V+168>>3]=0.0}ae=c[200]|0;h[64776+(ae*688&-1)>>3]=+((c[7939]|0)-(c[7938]|0)|0)/(+h[64672+(ae*688&-1)>>3]- +h[64664+(ae*688&-1)>>3]);c[12912]=c[V+184>>2];c[12910]=0;ak=+h[ad>>3];if(ak<=0.0){break}uE(n|0,0,40);c[r>>2]=2;c[m>>2]=2;h[s>>3]=ak;c[D>>2]=c[V+160>>2];fN(j,f,g,123984);h[6458]=+h[V+168>>3];h[6457]=+h[V+176>>3];c[12910]=~~+h[f>>3]}}while(0);ag=c[ab>>2]|0;if((c[V+244>>2]|0)!=0){if((c[ag+8>>2]|0)>0){A=0;do{z=A*3&-1;c[R+(z+2<<2)>>2]=-3;c[R+(z+1<<2)>>2]=-3;c[R+(z<<2)>>2]=-3;z=A<<1;c[T+((z|1)<<2)>>2]=-3;c[T+(z<<2)>>2]=-3;A=A+1|0;al=c[ab>>2]|0;}while((A|0)<(c[al+8>>2]|0));if((al|0)==0){Y=T;Z=S;_=R;$=Q;break}else{am=al}}else{am=ag}A=(W&1)!=0;ab=V+68|0;z=am;ad=Q;ae=R;ah=S;an=T;ao=0;while(1){ap=c[z+12>>2]|0;aq=z+8|0;if((c[aq>>2]|0)>0){ar=(ao|0)>0;as=0;do{at=ap+(as<<6)|0;au=c[228]|0;if((au|0)==0){K=12531;break L16959}av=c[225]|0;aw=c[224]|0;do{if((av|0)<(aw|0)){ax=au;ay=av}else{az=(c[226]|0)+aw|0;if((az|0)==0){uu(au);c[228]=0;c[224]=0;c[225]=0;ax=0;ay=0;break}else{aA=db(au,aa(c[227]|0,az),150384)|0;c[228]=aA;c[224]=az;ax=aA;ay=c[225]|0;break}}}while(0);au=c[227]|0;c[225]=ay+1;aw=aa(au,ay);au=ax+aw|0;c[ax+(aw+24|0)>>2]=X;av=at|0;if((c[av>>2]|0)<(c[9738]|0)){aA=ap+(as<<6)+24|0;ak=+h[aA>>3];aB=(+h[ap+(as<<6)+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;aC=(+h[ap+(as<<6)+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;aD=(ak- +h[5279])*+h[2]+ +h[12]+-1.0;aE=+h[404]+aB*+h[392]+aC*+h[396]+aD*+h[400];aF=+h[405]+aB*+h[393]+aC*+h[397]+aD*+h[401];aG=+h[406]+aB*+h[394]+aC*+h[398]+aD*+h[402];aH=aG==0.0?1.0e-5:aG;h[au>>3]=(+h[403]+aB*+h[391]+aC*+h[395]+aD*+h[399])/aH;h[ax+(aw+8|0)>>3]=aE/aH;h[ax+(aw+16|0)>>3]=aF/aH;az=ax+(aw+32|0)|0;h[az>>3]=ak;c[ax+(aw+40|0)>>2]=0;if(A){h[az>>3]=+h[ap+(as<<6)+32>>3];c[ab>>2]=-6}else{h[az>>3]=+h[aA>>3]}c[ax+(aw+44|0)>>2]=at;aI=(au-(c[228]|0)|0)/48&-1}else{h[ax+(aw+16|0)>>3]=-2.0;aI=-1}aw=as*3&-1;au=ad+(aw+2<<2)|0;c[au>>2]=-3;aA=ad+(aw+1<<2)|0;c[aA>>2]=-3;az=ad+(aw<<2)|0;c[az>>2]=-3;aJ=as<<1;aK=ah+((aJ|1)<<2)|0;c[aK>>2]=-3;aL=ah+(aJ<<2)|0;c[aL>>2]=-3;aM=c[af>>2]|0;do{if((aM|0)==352|(aM|0)==51|(aM|0)==177|(aM|0)==193|(aM|0)==209|(aM|0)==1){if((as|0)<=0){if(!(ar&(aI|0)>-1)){break}c[aA>>2]=gy(aI,1,ac,X,aj)|0;break}if((aI|0)<0){if(!(ar&(a[38944]^1))){break}aN=gy((c[225]|0)-1|0,3,ac,X,aj)|0;c[au>>2]=aN;if((aN|0)<=-2){break}aO=gz((c[225]|0)-1|0,3,ac)|0;aP=as-1|0;gA(aN,c[ad+((aP*3&-1)+1<<2)>>2]|0,aO,c[ah+((aP<<1|1)<<2)>>2]|0,aj,ai);gA(aN,c[ae+(aw<<2)>>2]|0,aO,c[an+(aJ<<2)>>2]|0,aj,ai);break}aO=gy(aI,0,ac,X,aj)|0;c[az>>2]=aO;if(!ar){break}aN=gy(aI,1,ac,X,aj)|0;c[aA>>2]=aN;aP=gy(aI,2,ac,X,aj)|0;c[au>>2]=aP;aQ=(aO|0)>-2;if((aP|0)>-2){if(aQ){aR=gz(aI,2,ac)|0;c[aL>>2]=aR;aS=as-1|0;gA(aO,c[ad+((aS*3&-1)+1<<2)>>2]|0,aR,c[ah+((aS<<1|1)<<2)>>2]|0,aj,ai)}if((aN|0)>-2){aS=gz(aI,0,ac)|0;c[aK>>2]=aS;gA(aN,c[ae+(aw<<2)>>2]|0,aS,c[an+(aJ<<2)>>2]|0,aj,ai)}gA(aP,aP,c[aL>>2]|0,c[aK>>2]|0,aj,ai);break}else{if(!aQ){break}if(!((aN|0)>-2&(a[38944]^1))){break}aQ=gy(aI,3,ac,X,aj)|0;c[au>>2]=aQ;if((aQ|0)<=-2){break}aP=gz(aI,1,ac)|0;c[aK>>2]=aP;c[aL>>2]=aP;if((a[(c[7628]|0)+(aP*104&-1)+96|0]&1)!=0){break}c[(c[11608]|0)+(aQ*20&-1)+8>>2]=ai;c[(c[11608]|0)+(aN*20&-1)+8>>2]=ai;c[(c[11608]|0)+(aO*20&-1)+8>>2]=ai;break}}else if((aM|0)==153|(aM|0)==345|(aM|0)==33){if((aI|0)<0){break}aO=ap+(as<<6)+24|0;ak=+h[aO>>3];h[aO>>3]=(aM|0)==33?0.0:+h[8083];aN=c[228]|0;if((aN|0)==0){K=12564;break L16959}aQ=c[225]|0;aP=c[224]|0;do{if((aQ|0)<(aP|0)){aT=aN;aU=aQ}else{aS=(c[226]|0)+aP|0;if((aS|0)==0){uu(aN);c[228]=0;c[224]=0;c[225]=0;aT=0;aU=0;break}else{aR=db(aN,aa(c[227]|0,aS),150384)|0;c[228]=aR;c[224]=aS;aT=aR;aU=c[225]|0;break}}}while(0);aN=c[227]|0;c[225]=aU+1;aP=aa(aN,aU);aN=aT+aP|0;c[aT+(aP+24|0)>>2]=X;if((c[av>>2]|0)>=(c[9738]|0)){h[aT+(aP+16|0)>>3]=-2.0;h[aO>>3]=ak;break}aH=+h[aO>>3];aF=(+h[ap+(as<<6)+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;aE=(+h[ap+(as<<6)+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;aD=(aH- +h[5279])*+h[2]+ +h[12]+-1.0;aC=+h[404]+aF*+h[392]+aE*+h[396]+aD*+h[400];aB=+h[405]+aF*+h[393]+aE*+h[397]+aD*+h[401];aG=+h[406]+aF*+h[394]+aE*+h[398]+aD*+h[402];aV=aG==0.0?1.0e-5:aG;h[aN>>3]=(+h[403]+aF*+h[391]+aE*+h[395]+aD*+h[399])/aV;h[aT+(aP+8|0)>>3]=aC/aV;h[aT+(aP+16|0)>>3]=aB/aV;aQ=aT+(aP+32|0)|0;h[aQ>>3]=aH;c[aT+(aP+40|0)>>2]=0;if(A){h[aQ>>3]=+h[ap+(as<<6)+32>>3];c[ab>>2]=-6}else{h[aQ>>3]=+h[aO>>3]}c[aT+(aP+44|0)>>2]=at;aP=aN-(c[228]|0)|0;h[aO>>3]=ak;if((aP|0)<=0){break}gy((aP|0)/48&-1,4,0,X,aj)}else{if((aI|0)<0){break}gy(aI,5,ac,X,aj)}}while(0);as=as+1|0;}while((as|0)<(c[aq>>2]|0))}aq=c[z>>2]|0;if((aq|0)==0){Y=ah;Z=an;_=ad;$=ae;break L16961}else{as=ah;ap=ad;ad=ae;ah=an;z=aq;ao=ao+1|0;an=as;ae=ap}}}if((ag|0)==0){Y=T;Z=S;_=R;$=Q;break}ae=X|0;an=V+224|0;ao=W&1;z=ao<<24>>24==0;ah=ao<<24>>24!=0;ao=V+68|0;ad=ag;while(1){ab=c[ad+12>>2]|0;do{if((c[af>>2]|0)==368){c[ae>>2]=1;c[y>>2]=0;A=c[c[an>>2]>>2]|0;if((A|0)==0){break}else{aW=A}do{h[F>>3]=+h[aW+24>>3];h[C>>3]=+h[aW+32>>3];h[E>>3]=+h[aW+40>>3];if((c[aW+72>>2]|0)==6){aX=+h[aW+80>>3]}else{aX=+(c[aW+76>>2]|0)}h[P>>3]=aX;A=c[228]|0;if((A|0)==0){K=12456;break L16959}ai=c[225]|0;ap=c[224]|0;do{if((ai|0)<(ap|0)){aY=A;aZ=ai}else{as=(c[226]|0)+ap|0;if((as|0)==0){uu(A);c[228]=0;c[224]=0;c[225]=0;aY=0;aZ=0;break}else{aq=db(A,aa(c[227]|0,as),150384)|0;c[228]=aq;c[224]=as;aY=aq;aZ=c[225]|0;break}}}while(0);A=c[227]|0;c[225]=aZ+1;ap=aa(A,aZ);A=aY+ap|0;c[aY+(ap+24|0)>>2]=X;do{if((c[y>>2]|0)<(c[9738]|0)){ak=+h[E>>3];aH=(+h[F>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;aV=(+h[C>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;aB=(ak- +h[5279])*+h[2]+ +h[12]+-1.0;aC=+h[404]+aH*+h[392]+aV*+h[396]+aB*+h[400];aD=+h[405]+aH*+h[393]+aV*+h[397]+aB*+h[401];aE=+h[406]+aH*+h[394]+aV*+h[398]+aB*+h[402];aF=aE==0.0?1.0e-5:aE;h[A>>3]=(+h[403]+aH*+h[391]+aV*+h[395]+aB*+h[399])/aF;h[aY+(ap+8|0)>>3]=aC/aF;h[aY+(ap+16|0)>>3]=aD/aF;ai=aY+(ap+32|0)|0;h[ai>>3]=ak;c[aY+(ap+40|0)>>2]=0;if(z){h[ai>>3]=+h[E>>3]}else{h[ai>>3]=+h[P>>3];c[ao>>2]=-6}c[aY+(ap+44|0)>>2]=k;ai=c[228]|0;aO=A-ai|0;aq=(aO|0)/48&-1;if((aO|0)<0){break}c[ai+(aq*48&-1)+40>>2]=aW;gy(aq,5,ac,X,aj)}else{h[aY+(ap+16|0)>>3]=-2.0}}while(0);aW=c[aW>>2]|0;}while((aW|0)!=0)}else{ap=ad+8|0;if((c[ap>>2]|0)<=0){break}A=ad|0;aq=-1;ai=0;while(1){aO=ab+(ai<<6)|0;as=c[228]|0;if((as|0)==0){K=12470;break L16959}ar=c[225]|0;at=c[224]|0;do{if((ar|0)<(at|0)){a_=as;a$=ar}else{av=(c[226]|0)+at|0;if((av|0)==0){uu(as);c[228]=0;c[224]=0;c[225]=0;a_=0;a$=0;break}else{aM=db(as,aa(c[227]|0,av),150384)|0;c[228]=aM;c[224]=av;a_=aM;a$=c[225]|0;break}}}while(0);as=c[227]|0;c[225]=a$+1;at=aa(as,a$);as=a_+at|0;c[a_+(at+24|0)>>2]=X;ar=aO|0;if((c[ar>>2]|0)<(c[9738]|0)){aM=ab+(ai<<6)+24|0;ak=+h[aM>>3];aF=(+h[ab+(ai<<6)+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;aD=(+h[ab+(ai<<6)+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;aC=(ak- +h[5279])*+h[2]+ +h[12]+-1.0;aB=+h[404]+aF*+h[392]+aD*+h[396]+aC*+h[400];aV=+h[405]+aF*+h[393]+aD*+h[397]+aC*+h[401];aH=+h[406]+aF*+h[394]+aD*+h[398]+aC*+h[402];aE=aH==0.0?1.0e-5:aH;h[as>>3]=(+h[403]+aF*+h[391]+aD*+h[395]+aC*+h[399])/aE;h[a_+(at+8|0)>>3]=aB/aE;h[a_+(at+16|0)>>3]=aV/aE;av=a_+(at+32|0)|0;h[av>>3]=ak;c[a_+(at+40|0)>>2]=0;if(ah){h[av>>3]=+h[ab+(ai<<6)+32>>3];c[ao>>2]=-6}else{h[av>>3]=+h[aM>>3]}c[a_+(at+44|0)>>2]=aO;a0=(as-(c[228]|0)|0)/48&-1}else{h[a_+(at+16|0)>>3]=-2.0;a0=-1}do{if((c[af>>2]|0)==225){at=c[(c[A>>2]|0)+12>>2]|0;as=at+(ai<<6)|0;aM=c[228]|0;if((aM|0)==0){K=12483;break L16959}av=c[225]|0;aL=c[224]|0;do{if((av|0)<(aL|0)){a1=aM;a2=av}else{aK=(c[226]|0)+aL|0;if((aK|0)==0){uu(aM);c[228]=0;c[224]=0;c[225]=0;a1=0;a2=0;break}else{au=db(aM,aa(c[227]|0,aK),150384)|0;c[228]=au;c[224]=aK;a1=au;a2=c[225]|0;break}}}while(0);aM=c[227]|0;c[225]=a2+1;aL=aa(aM,a2);c[a1+(aL+24|0)>>2]=0;if((c[as>>2]|0)<(c[9738]|0)){aM=at+(ai<<6)+24|0;ak=+h[aM>>3];aE=(+h[at+(ai<<6)+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;aV=(+h[at+(ai<<6)+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;aB=(ak- +h[5279])*+h[2]+ +h[12]+-1.0;aC=+h[404]+aE*+h[392]+aV*+h[396]+aB*+h[400];aD=+h[405]+aE*+h[393]+aV*+h[397]+aB*+h[401];aF=+h[406]+aE*+h[394]+aV*+h[398]+aB*+h[402];aH=aF==0.0?1.0e-5:aF;h[a1+aL>>3]=(+h[403]+aE*+h[391]+aV*+h[395]+aB*+h[399])/aH;h[a1+(aL+8|0)>>3]=aC/aH;h[a1+(aL+16|0)>>3]=aD/aH;av=a1+(aL+32|0)|0;h[av>>3]=ak;c[a1+(aL+40|0)>>2]=0;h[av>>3]=+h[aM>>3];c[a1+(aL+44|0)>>2]=as;break}else{h[a1+(aL+16|0)>>3]=-2.0;break}}}while(0);do{if((a0|0)>=0){aL=c[af>>2]|0;if((aL|0)==225){gy(a0,6,0,X,aj);break}else if((aL|0)==153|(aL|0)==345){aM=ab+(ai<<6)+24|0;ak=+h[aM>>3];h[aM>>3]=+h[8083];av=c[228]|0;if((av|0)==0){K=12497;break L16959}au=c[225]|0;aK=c[224]|0;do{if((au|0)<(aK|0)){a3=av;a4=au}else{aJ=(c[226]|0)+aK|0;if((aJ|0)==0){uu(av);c[228]=0;c[224]=0;c[225]=0;a3=0;a4=0;break}else{aw=db(av,aa(c[227]|0,aJ),150384)|0;c[228]=aw;c[224]=aJ;a3=aw;a4=c[225]|0;break}}}while(0);av=c[227]|0;c[225]=a4+1;aK=aa(av,a4);av=a3+aK|0;c[a3+(aK+24|0)>>2]=X;if((c[ar>>2]|0)>=(c[9738]|0)){h[a3+(aK+16|0)>>3]=-2.0;h[aM>>3]=ak;break}aH=+h[aM>>3];aD=(+h[ab+(ai<<6)+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;aC=(+h[ab+(ai<<6)+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;aB=(aH- +h[5279])*+h[2]+ +h[12]+-1.0;aV=+h[404]+aD*+h[392]+aC*+h[396]+aB*+h[400];aE=+h[405]+aD*+h[393]+aC*+h[397]+aB*+h[401];aF=+h[406]+aD*+h[394]+aC*+h[398]+aB*+h[402];aG=aF==0.0?1.0e-5:aF;h[av>>3]=(+h[403]+aD*+h[391]+aC*+h[395]+aB*+h[399])/aG;h[a3+(aK+8|0)>>3]=aV/aG;h[a3+(aK+16|0)>>3]=aE/aG;au=a3+(aK+32|0)|0;h[au>>3]=aH;c[a3+(aK+40|0)>>2]=0;if(ah){h[au>>3]=+h[ab+(ai<<6)+32>>3];c[ao>>2]=-6}else{h[au>>3]=+h[aM>>3]}c[a3+(aK+44|0)>>2]=aO;aK=av-(c[228]|0)|0;h[aM>>3]=ak;if((aK|0)<=0){break}gy((aK|0)/48&-1,4,0,X,aj);break}else if((aL|0)==33){aK=ab+(ai<<6)+24|0;aH=+h[aK>>3];h[aK>>3]=0.0;av=c[228]|0;if((av|0)==0){K=12510;break L16959}au=c[225]|0;as=c[224]|0;do{if((au|0)<(as|0)){a5=av;a6=au}else{at=(c[226]|0)+as|0;if((at|0)==0){uu(av);c[228]=0;c[224]=0;c[225]=0;a5=0;a6=0;break}else{aw=db(av,aa(c[227]|0,at),150384)|0;c[228]=aw;c[224]=at;a5=aw;a6=c[225]|0;break}}}while(0);av=c[227]|0;c[225]=a6+1;as=aa(av,a6);av=a5+as|0;c[a5+(as+24|0)>>2]=X;if((c[ar>>2]|0)>=(c[9738]|0)){h[a5+(as+16|0)>>3]=-2.0;h[aK>>3]=aH;break}ak=+h[aK>>3];aG=(+h[ab+(ai<<6)+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;aE=(+h[ab+(ai<<6)+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;aV=(ak- +h[5279])*+h[2]+ +h[12]+-1.0;aB=+h[404]+aG*+h[392]+aE*+h[396]+aV*+h[400];aC=+h[405]+aG*+h[393]+aE*+h[397]+aV*+h[401];aD=+h[406]+aG*+h[394]+aE*+h[398]+aV*+h[402];aF=aD==0.0?1.0e-5:aD;h[av>>3]=(+h[403]+aG*+h[391]+aE*+h[395]+aV*+h[399])/aF;h[a5+(as+8|0)>>3]=aB/aF;h[a5+(as+16|0)>>3]=aC/aF;au=a5+(as+32|0)|0;h[au>>3]=ak;c[a5+(as+40|0)>>2]=0;if(ah){h[au>>3]=+h[ab+(ai<<6)+32>>3];c[ao>>2]=-6}else{h[au>>3]=+h[aK>>3]}c[a5+(as+44|0)>>2]=aO;as=av-(c[228]|0)|0;h[aK>>3]=aH;if((as|0)<=0){break}gy((as|0)/48&-1,4,0,X,aj);break}else if((aL|0)==352|(aL|0)==51|(aL|0)==177|(aL|0)==193|(aL|0)==209|(aL|0)==1){if((aq|0)<=-1){break}gy(a0,0,0,X,aj);break}else{gy(a0,5,ac,X,aj);break}}}while(0);aO=ai+1|0;if((aO|0)<(c[ap>>2]|0)){aq=a0;ai=aO}else{break}}}}while(0);ab=c[ad>>2]|0;if((ab|0)==0){Y=T;Z=S;_=R;$=Q;break}else{ad=ab}}}}while(0);X=U+1|0;if((X|0)<(d|0)){Q=$;R=_;S=Z;T=Y;U=X;V=c[V>>2]|0}else{K=12581;break}}if((K|0)==12497){uk(132480,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((K|0)==12510){uk(132480,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((K|0)==12581){uu(Z);uu(Y);uu($);uu(_);break}else if((K|0)==12470){uk(132480,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((K|0)==12483){uk(132480,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((K|0)==12456){uk(132480,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((K|0)==12531){uk(132480,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((K|0)==12564){uk(132480,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);K=c[11605]|0;if((K|0)==0){uu(c[7628]|0);c[7628]=0;c[7624]=0;c[7625]=0;uu(c[11608]|0);c[11608]=0;c[11604]=0;c[11605]=0;uu(c[228]|0);c[228]=0;c[224]=0;c[225]=0;uk(176896,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}_=(c[7625]|0)==0;$=K<<2;K=ut($)|0;do{if((K|0)==0){gk();Y=ut($)|0;if((Y|0)!=0){a7=Y;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=168848,v)|0)}else{a7=K}}while(0);K=a7;$=c[11605]|0;if(($|0)>0){Y=0;while(1){c[K+(Y<<2)>>2]=Y;Z=Y+1|0;d=c[11605]|0;if((Z|0)<(d|0)){Y=Z}else{a8=d;break}}}else{a8=$}bM(a7|0,a8|0,4,6);a8=(c[11608]|0)+((c[K>>2]|0)*20&-1)|0;if((c[11605]|0)>1){$=1;Y=a8;while(1){d=K+($<<2)|0;c[Y+16>>2]=c[d>>2];Z=(c[11608]|0)+((c[d>>2]|0)*20&-1)|0;d=$+1|0;if((d|0)<(c[11605]|0)){$=d;Y=Z}else{a9=Z;break}}}else{a9=a8}c[a9+16>>2]=-1;c[11566]=c[K>>2];uu(a7);if(_){_=c[11566]|0;if((_|0)<=-1){i=e;return}a7=_;_=c[11608]|0;do{K=_;a9=K+(a7*20&-1)|0;a8=c[228]|0;gw(a9,a8+((c[a9>>2]|0)*48&-1)|0,a8+((c[K+(a7*20&-1)+4>>2]|0)*48&-1)|0);_=c[11608]|0;a7=c[_+((c[11566]|0)*20&-1)+16>>2]|0;c[11566]=a7;}while((a7|0)>-1);i=e;return}a7=c[7625]|0;if((a7|0)!=0){_=a7<<2;a7=ut(_)|0;do{if((a7|0)==0){gk();K=ut(_)|0;if((K|0)!=0){ba=K;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=172600,v)|0)}else{ba=a7}}while(0);a7=ba;_=c[7625]|0;if((_|0)>0){K=0;while(1){c[a7+(K<<2)>>2]=K;a8=K+1|0;a9=c[7625]|0;if((a8|0)<(a9|0)){K=a8}else{bb=a9;break}}}else{bb=_}bM(ba|0,bb|0,4,14);bb=(c[7628]|0)+((c[a7>>2]|0)*104&-1)|0;if((c[7625]|0)>1){_=1;K=bb;while(1){a9=a7+(_<<2)|0;c[K+100>>2]=c[a9>>2];a8=(c[7628]|0)+((c[a9>>2]|0)*104&-1)|0;a9=_+1|0;if((a9|0)<(c[7625]|0)){_=a9;K=a8}else{bc=a8;break}}}else{bc=bb}c[bc+100>>2]=-1;c[8022]=c[a7>>2];uu(ba)}c[l>>2]=c[8022];ba=c[11566]|0;if((ba|0)<=-1){i=e;return}a7=ba;ba=c[11608]|0;while(1){bc=ba;if((c[bc+(a7*20&-1)+8>>2]|0)==-3){bd=a7;be=ba}else{gu(a7,c[bc+(a7*20&-1)>>2]|0,c[bc+(a7*20&-1)+4>>2]|0,l);bd=c[11566]|0;be=c[11608]|0}bc=c[be+(bd*20&-1)+16>>2]|0;c[11566]=bc;if((bc|0)>-1){a7=bc;ba=be}else{break}}i=e;return}function gw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;f=i;i=i+72|0;g=f|0;j=f+16|0;k=b+12|0;l=c[k>>2]|0;m=g;n=l+40|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];n=j;o=l;c[n>>2]=c[o>>2];c[n+4>>2]=c[o+4>>2];c[n+8>>2]=c[o+8>>2];c[n+12>>2]=c[o+12>>2];c[n+16>>2]=c[o+16>>2];c[n+20>>2]=c[o+20>>2];c[n+24>>2]=c[o+24>>2];c[n+28>>2]=c[o+28>>2];c[n+32>>2]=c[o+32>>2];c[n+36>>2]=c[o+36>>2];c[n+40>>2]=c[o+40>>2];c[n+44>>2]=c[o+44>>2];c[n+48>>2]=c[o+48>>2];c[n+52>>2]=c[o+52>>2];p=j+8|0;q=((c[p>>2]|0)+11|0)>>>0<2;if(q){if((c[b+8>>2]|0)==-11){r=e}else{s=12616}}else{s=12616}if((s|0)==12616){r=d}t=~~+h[r+32>>3];do{if((c[g>>2]|0)==3){if((c[g+4>>2]|0)==-6){c[j+44>>2]=t;s=12651;break}if((c[b+8>>2]|0)==-8){s=12651;break}if((l|0)!=56296){s=12623;break}c[j+44>>2]=t}else{s=12623}}while(0);do{if((s|0)==12623){r=j+4|0;if((c[r>>2]|0)==-6){u=j|0;v=c[u>>2]|0;w=c[8798]|0;x=(w|0)>0;y=t;L17222:while(1){z=43264;while(1){A=c[z>>2]|0;if((A|0)==0){break}if((c[A+4>>2]|0)==(y|0)){break L17222}else{z=A|0}}B=y-1|0;if(!((y|0)>(w|0)&x)){s=12634;break}y=((B|0)%(w|0)&-1)+1|0}if((s|0)==12634){c[r>>2]=B;c[j+40>>2]=1;c[j+44>>2]=B;c[p>>2]=B;s=12651;break}w=A+8|0;c[n>>2]=c[w>>2];c[n+4>>2]=c[w+4>>2];c[n+8>>2]=c[w+8>>2];c[n+12>>2]=c[w+12>>2];c[n+16>>2]=c[w+16>>2];c[n+20>>2]=c[w+20>>2];c[n+24>>2]=c[w+24>>2];c[n+28>>2]=c[w+28>>2];c[n+32>>2]=c[w+32>>2];c[n+36>>2]=c[w+36>>2];c[n+40>>2]=c[w+40>>2];c[n+44>>2]=c[w+44>>2];c[n+48>>2]=c[w+48>>2];c[n+52>>2]=c[w+52>>2];c[u>>2]=v;if((c[(c[3524]|0)+96>>2]&1024|0)!=0){c[r>>2]=y;a[j+32|0]=0;s=12651;break}if((a[j+32|0]&1)!=0){s=12651;break}c[j+40>>2]=1;c[j+44>>2]=c[r>>2];s=12651;break}if(q){c[p>>2]=c[b+8>>2];break}if((c[9742]|0)==0){break}if((c[l+40>>2]|0)==6){break}w=j|0;x=c[w>>2]|0;z=c[8798]|0;C=(z|0)>0;D=c[b+8>>2]|0;L17242:while(1){E=D+1|0;F=43264;while(1){G=c[F>>2]|0;if((G|0)==0){break}if((c[G+4>>2]|0)==(E|0)){s=12643;break L17242}else{F=G|0}}if(!((E|0)>(z|0)&C)){s=12649;break}D=(D|0)%(z|0)&-1}do{if((s|0)==12643){z=G+8|0;c[n>>2]=c[z>>2];c[n+4>>2]=c[z+4>>2];c[n+8>>2]=c[z+8>>2];c[n+12>>2]=c[z+12>>2];c[n+16>>2]=c[z+16>>2];c[n+20>>2]=c[z+20>>2];c[n+24>>2]=c[z+24>>2];c[n+28>>2]=c[z+28>>2];c[n+32>>2]=c[z+32>>2];c[n+36>>2]=c[z+36>>2];c[n+40>>2]=c[z+40>>2];c[n+44>>2]=c[z+44>>2];c[n+48>>2]=c[z+48>>2];c[n+52>>2]=c[z+52>>2];c[w>>2]=x;if((c[(c[3524]|0)+96>>2]&1024|0)!=0){c[r>>2]=E;a[j+32|0]=0;break}if((a[j+32|0]&1)!=0){break}c[j+40>>2]=1;c[j+44>>2]=c[r>>2]}else if((s|0)==12649){c[r>>2]=D;c[j+40>>2]=1;c[j+44>>2]=D;c[p>>2]=D}}while(0);D=j+40|0;c[m>>2]=c[D>>2];c[m+4>>2]=c[D+4>>2];c[m+8>>2]=c[D+8>>2];c[m+12>>2]=c[D+12>>2];s=12651}}while(0);do{if((s|0)==12651){E=j+40|0;c[m>>2]=c[E>>2];c[m+4>>2]=c[E+4>>2];c[m+8>>2]=c[E+8>>2];c[m+12>>2]=c[E+12>>2];c[n>>2]=c[o>>2];c[n+4>>2]=c[o+4>>2];c[n+8>>2]=c[o+8>>2];c[n+12>>2]=c[o+12>>2];c[n+16>>2]=c[o+16>>2];c[n+20>>2]=c[o+20>>2];c[n+24>>2]=c[o+24>>2];c[n+28>>2]=c[o+28>>2];c[n+32>>2]=c[o+32>>2];c[n+36>>2]=c[o+36>>2];c[E>>2]=c[m>>2];c[E+4>>2]=c[m+4>>2];c[E+8>>2]=c[m+8>>2];c[E+12>>2]=c[m+12>>2];a[j+32|0]=1;if(!q){break}c[p>>2]=c[b+8>>2]}}while(0);un(d,e,j,g);if((c[c[k>>2]>>2]|0)==0){i=f;return}gx(d);gx(e);i=f;return}function gx(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0.0,I=0;d=i;i=i+120|0;e=d|0;f=d+16|0;g=d+32|0;j=d+48|0;k=d+64|0;l=~~(+h[b>>3]*+(c[180]|0))+(c[186]|0)|0;m=~~(+h[b+8>>3]*+(c[40]|0))+(c[46]|0)|0;n=b+24|0;o=c[n>>2]|0;if((o|0)==0){i=d;return}if((c[o+8>>2]|0)<=-2){i=d;return}p=c[13542]|0;do{if((p|0)!=0){q=(c[p>>2]|0)>(l|0)&1;r=(c[p+4>>2]|0)<(l|0)?q|2:q;q=(c[p+8>>2]|0)>(m|0)?r|4:r;if((((c[p+12>>2]|0)<(m|0)?q|8:q)|0)==0){break}i=d;return}}while(0);p=c[b+40>>2]|0;if((p|0)!=0){fp(l,m,p);c[n>>2]=0;i=d;return}p=c[o+40>>2]|0;do{if((p|0)==6){s=+h[b+32>>3];q=c[34]|0;r=(a[66852]&1)==0;do{if((a[64788+(q*688&-1)|0]&1)==0){if(r){t=s;break}if(s>0.0){u=+_(+s);t=u/+h[8358];break}else{t=+h[8341];break}}else{if(r){t=+Z(+(s*+h[64800+(q*688&-1)>>3]));break}if(+h[64792+(q*688&-1)>>3]==+h[8357]){t=s;break}t=s*+h[64800+(q*688&-1)>>3]/+h[8358]}}while(0);s=+h[8341];do{if(s<t){u=+h[8342];if(u<=t){v=+((a[20668]|0)==112&1|0);break}w=(t-s)/(u-s);if((a[20668]|0)==112){v=w;break}v=1.0-w}else{v=+((a[20668]|0)!=112&1|0)}}while(0);q=(c[3524]|0)+144|0;if((c[q>>2]|0)==0){break}c[f>>2]=5;h[f+8>>3]=v;c[f+4>>2]=0;cM[c[q>>2]&511](f)}else if((p|0)==2){if((c[o+44>>2]|0)!=-6){break}q=k;r=o;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];c[q+16>>2]=c[r+16>>2];c[q+20>>2]=c[r+20>>2];c[q+24>>2]=c[r+24>>2];c[q+28>>2]=c[r+28>>2];c[q+32>>2]=c[r+32>>2];c[q+36>>2]=c[r+36>>2];c[q+40>>2]=c[r+40>>2];c[q+44>>2]=c[r+44>>2];c[q+48>>2]=c[r+48>>2];c[q+52>>2]=c[r+52>>2];r=k|0;x=c[r>>2]|0;y=c[8798]|0;z=(y|0)>0;A=~~+h[b+32>>3];L17305:while(1){B=43264;while(1){C=c[B>>2]|0;if((C|0)==0){break}if((c[C+4>>2]|0)==(A|0)){D=12670;break L17305}else{B=C|0}}E=A-1|0;if(!((A|0)>(y|0)&z)){D=12676;break}A=((E|0)%(y|0)&-1)+1|0}do{if((D|0)==12670){y=C+8|0;c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];c[q+16>>2]=c[y+16>>2];c[q+20>>2]=c[y+20>>2];c[q+24>>2]=c[y+24>>2];c[q+28>>2]=c[y+28>>2];c[q+32>>2]=c[y+32>>2];c[q+36>>2]=c[y+36>>2];c[q+40>>2]=c[y+40>>2];c[q+44>>2]=c[y+44>>2];c[q+48>>2]=c[y+48>>2];c[q+52>>2]=c[y+52>>2];c[r>>2]=x;y=c[3524]|0;if((c[y+96>>2]&1024|0)!=0){c[k+4>>2]=A;a[k+32|0]=0;F=y;break}if((a[k+32|0]&1)!=0){F=y;break}c[k+40>>2]=1;c[k+44>>2]=c[k+4>>2];F=y}else if((D|0)==12676){c[k+4>>2]=E;c[k+40>>2]=1;c[k+44>>2]=E;c[k+8>>2]=E;F=c[3524]|0}}while(0);fn(k+40|0,F)}else if((p|0)==3){if((c[o+44>>2]|0)==-6){A=(c[3524]|0)+144|0;if((c[A>>2]|0)==0){break}x=~~+h[b+32>>3];c[j>>2]=3;c[j+4>>2]=x;h[j+8>>3]=0.0;cM[c[A>>2]&511](j);break}else{A=c[o+44>>2]|0;x=(c[3524]|0)+144|0;if((c[x>>2]|0)==0){break}c[g>>2]=3;c[g+4>>2]=A;h[g+8>>3]=0.0;cM[c[x>>2]&511](g);break}}else if((p|0)==4){s=+h[b+32>>3];w=+h[8341];do{if(w<s){u=+h[8342];if(u<=s){G=+((a[20668]|0)==112&1|0);break}H=(s-w)/(u-w);if((a[20668]|0)==112){G=H;break}G=1.0-H}else{G=+((a[20668]|0)!=112&1|0)}}while(0);x=(c[3524]|0)+144|0;if((c[x>>2]|0)==0){break}c[e>>2]=5;h[e+8>>3]=G;c[e+4>>2]=0;cM[c[x>>2]&511](e)}}while(0);e=c[n>>2]|0;if(+h[e+24>>3]==-3.0){cK[c[(c[3524]|0)+92>>2]&63](+h[3817]*+h[(c[b+44>>2]|0)+48>>3]);I=c[n>>2]|0}else{I=e}cR[c[(c[3524]|0)+80>>2]&127](l,m,c[I+8>>2]|0);c[n>>2]=0;i=d;return}function gy(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;g=i;j=c[228]|0;k=j;l=k+(a*48&-1)|0;m=1<<b;if((b|0)==0){n=m;o=k+((a-1|0)*48&-1)|0;p=l}else if((b|0)==6){n=0;o=k+((a+1|0)*48&-1)|0;p=l}else if((b|0)==5){n=0;o=l;p=l}else if((b|0)==3){n=m>>>1;o=k+((a-d|0)*48&-1)|0;p=k+((a-1|0)*48&-1)|0}else if((b|0)==4){n=0;o=k+((a-1|0)*48&-1)|0;p=l}else if((b|0)==2){n=m;o=k+(((a-1|0)-d|0)*48&-1)|0;p=l}else if((b|0)==1){n=m;o=k+((a-d|0)*48&-1)|0;p=l}else{n=m;o=0;p=l}l=(o-j|0)/48&-1;if(+h[p+16>>3]==-2.0){q=-2;i=g;return q|0}if(+h[o+16>>3]==-2.0){q=-2;i=g;return q|0}if((n|0)==0){r=f}else{r=(c[9734]&n|0)==0?-3:f}f=c[11608]|0;if((f|0)==0){uk(132480,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}n=c[11605]|0;o=c[11604]|0;do{if((n|0)<(o|0)){s=f;t=n}else{p=(c[11606]|0)+o|0;if((p|0)==0){uu(f);c[11608]=0;c[11604]=0;c[11605]=0;s=0;t=0;break}else{j=db(f,aa(c[11607]|0,p),150384)|0;c[11608]=j;c[11604]=p;s=j;t=c[11605]|0;break}}}while(0);f=c[11607]|0;c[11605]=t+1;o=aa(f,t);t=s+o|0;f=c[228]|0;n=s+(o+8|0)|0;c[n>>2]=r;c[s+(o+12|0)>>2]=e;c[s+(o+16|0)>>2]=-1;r=t;do{if(+h[f+(a*48&-1)+16>>3]<+h[f+(l*48&-1)+16>>3]){c[r>>2]=l;c[s+(o+4|0)>>2]=a;if((c[e+8>>2]|0)!=-10){break}c[n>>2]=-11}else{c[r>>2]=a;c[s+(o+4|0)>>2]=l;if((c[e+8>>2]|0)!=-10){break}c[n>>2]=-10}}while(0);q=(t-(c[11608]|0)|0)/20&-1;i=g;return q|0}function gz(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0,G=0.0,H=0.0,I=0,J=0.0,K=0.0,L=0,M=0.0,N=0.0,O=0,R=0.0,S=0.0,T=0,U=0.0,V=0.0,W=0,X=0.0,Y=0,Z=0.0,_=0.0,$=0.0,ab=0,ac=0,ad=0.0,ae=0.0,af=0.0,ag=0.0,ah=0.0,ai=0,aj=0.0;f=i;if((d|0)==2){j=b-1|0;k=j-e|0;l=j;m=b}else if((d|0)==0){j=b-e|0;k=j;l=j-1|0;m=b}else if((d|0)==3){j=b-1|0;k=b-e|0;l=j-e|0;m=j}else if((d|0)==1){k=b-e|0;l=b-1|0;m=b}else{k=0;l=0;m=0}b=c[228]|0;n=+h[b+(m*48&-1)+16>>3];if(n==-2.0){o=-2;i=f;return o|0}p=+h[b+(l*48&-1)+16>>3];if(p==-2.0){o=-2;i=f;return o|0}q=+h[b+(k*48&-1)+16>>3];if(q==-2.0){o=-2;i=f;return o|0}r=+h[b+(m*48&-1)>>3];s=+h[b+(l*48&-1)>>3];t=+P(+(r-s));u=+h[b+(m*48&-1)+8>>3];w=+h[b+(l*48&-1)+8>>3];x=t+ +P(+(u-w));if(x+ +P(+(n-p))+-1.0e-5<=0.0){o=-2;i=f;return o|0}x=+h[b+(k*48&-1)>>3];t=+P(+(s-x));s=+h[b+(k*48&-1)+8>>3];y=t+ +P(+(w-s));if(y+ +P(+(p-q))+-1.0e-5<=0.0){o=-2;i=f;return o|0}p=+P(+(x-r));r=p+ +P(+(s-u));if(r+ +P(+(q-n))+-1.0e-5<=0.0){o=-2;i=f;return o|0}b=c[7628]|0;if((b|0)==0){uk(132480,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}e=c[7625]|0;d=c[7624]|0;do{if((e|0)<(d|0)){z=b;A=e}else{j=(c[7626]|0)+d|0;if((j|0)==0){uu(b);c[7628]=0;c[7624]=0;c[7625]=0;z=0;A=0;break}else{B=db(b,aa(c[7627]|0,j),150384)|0;c[7628]=B;c[7624]=j;z=B;A=c[7625]|0;break}}}while(0);b=c[7627]|0;c[7625]=A+1;d=aa(b,A);A=z+d|0;c[A>>2]=m;c[z+(d+4|0)>>2]=l;c[z+(d+8|0)>>2]=k;c[z+(d+100|0)>>2]=-1;n=+h[(c[228]|0)+(m*48&-1)>>3];b=z+(d+16|0)|0;h[b>>3]=n;e=c[228]|0;q=+h[e+(l*48&-1)>>3];if(q<n){h[b>>3]=q;C=c[228]|0;D=q}else{C=e;D=n}n=+h[C+(k*48&-1)>>3];if(n<D){h[b>>3]=n;E=n}else{E=D}b=A;D=+g[3534];n=-0.0-D;if(E<n){a[46904]=1}E=+h[(c[228]|0)+(m*48&-1)+8>>3];C=z+(d+32|0)|0;h[C>>3]=E;e=c[228]|0;q=+h[e+(l*48&-1)+8>>3];if(q<E){h[C>>3]=q;F=c[228]|0;G=q}else{F=e;G=E}E=+h[F+(k*48&-1)+8>>3];if(E<G){h[C>>3]=E;H=E}else{H=G}if(H<n){a[46904]=1}H=+h[(c[228]|0)+(m*48&-1)+16>>3];C=z+(d+48|0)|0;h[C>>3]=H;F=c[228]|0;G=+h[F+(l*48&-1)+16>>3];if(G<H){h[C>>3]=G;I=c[228]|0;J=G}else{I=F;J=H}H=+h[I+(k*48&-1)+16>>3];if(H<J){h[C>>3]=H;K=H}else{K=J}if(K<n){a[46904]=1}n=+h[(c[228]|0)+(m*48&-1)>>3];C=z+(d+24|0)|0;h[C>>3]=n;I=c[228]|0;K=+h[I+(l*48&-1)>>3];if(K>n){h[C>>3]=K;L=c[228]|0;M=K}else{L=I;M=n}n=+h[L+(k*48&-1)>>3];if(n>M){h[C>>3]=n;N=n}else{N=M}M=D;if(N>M){a[46904]=1}N=+h[(c[228]|0)+(m*48&-1)+8>>3];C=z+(d+40|0)|0;h[C>>3]=N;L=c[228]|0;D=+h[L+(l*48&-1)+8>>3];if(D>N){h[C>>3]=D;O=c[228]|0;R=D}else{O=L;R=N}N=+h[O+(k*48&-1)+8>>3];if(N>R){h[C>>3]=N;S=N}else{S=R}if(S>M){a[46904]=1}S=+h[(c[228]|0)+(m*48&-1)+16>>3];C=z+(d+56|0)|0;h[C>>3]=S;O=c[228]|0;R=+h[O+(l*48&-1)+16>>3];if(R>S){h[C>>3]=R;T=c[228]|0;U=R}else{T=O;U=S}S=+h[T+(k*48&-1)+16>>3];if(S>U){h[C>>3]=S;V=S}else{V=U}if(V>M){a[46904]=1}C=z+(d+64|0)|0;T=c[228]|0;O=T+(k*48&-1)+8|0;L=T+(m*48&-1)+8|0;I=T+(k*48&-1)+16|0;F=T+(m*48&-1)+16|0;M=(+h[O>>3]- +h[L>>3])*(+h[I>>3]+ +h[F>>3]);h[C>>3]=M;e=T+(k*48&-1)|0;B=T+(m*48&-1)|0;V=(+h[I>>3]- +h[F>>3])*(+h[e>>3]+ +h[B>>3]);I=z+(d+72|0)|0;h[I>>3]=V;U=(+h[e>>3]- +h[B>>3])*(+h[O>>3]+ +h[L>>3]);O=z+(d+80|0)|0;h[O>>3]=U;e=c[228]|0;T=e+(l*48&-1)|0;j=e+(l*48&-1)+8|0;W=e+(l*48&-1)+16|0;S=M+(+h[L>>3]- +h[j>>3])*(+h[F>>3]+ +h[W>>3]);h[C>>3]=S;l=T|0;M=V+(+h[F>>3]- +h[W>>3])*(+h[B>>3]+ +h[l>>3]);h[I>>3]=M;V=U+(+h[B>>3]- +h[l>>3])*(+h[L>>3]+ +h[j>>3]);h[O>>3]=V;L=c[228]|0;B=L+(k*48&-1)|0;F=L+(k*48&-1)+8|0;e=L+(k*48&-1)+16|0;U=S+(+h[j>>3]- +h[F>>3])*(+h[W>>3]+ +h[e>>3]);h[C>>3]=U;k=B|0;S=M+(+h[W>>3]- +h[e>>3])*(+h[l>>3]+ +h[k>>3]);h[I>>3]=S;M=V+(+h[l>>3]- +h[k>>3])*(+h[j>>3]+ +h[F>>3]);h[O>>3]=M;V=+Q(+(U*U+S*S+M*M));if(V+-1.0e-5>0.0){X=V;Y=T;Z=M;_=U;$=S}else{T=c[228]|0;F=T+(m*48&-1)|0;j=F|0;k=T+(m*48&-1)+8|0;l=T+(m*48&-1)+16|0;m=1;e=B;while(1){if((m|0)>=3){ab=12789;break}B=c[b+(m<<2)>>2]|0;W=T+(B*48&-1)|0;S=+h[j>>3];U=+P(+(S- +h[W>>3]));M=+h[k>>3];V=U+ +P(+(M- +h[T+(B*48&-1)+8>>3]));U=+h[l>>3];if(V+ +P(+(U- +h[T+(B*48&-1)+16>>3]))+-1.0e-5>0.0){ac=W;ad=S;ae=M;af=U;break}else{m=m+1|0;e=W}}if((ab|0)==12789){ac=e;ad=+h[j>>3];ae=+h[k>>3];af=+h[l>>3]}e=ac+8|0;U=+h[e>>3];if(+P(+(ae-U))<1.0e-5){ag=ae+1.0;ah=ad}else{ag=ae;ah=ad+1.0}ab=ac+16|0;ad=+h[ab>>3];M=ag*(af-ad)+((af-af)*U+ae*(ad-af));h[C>>3]=M;m=ac|0;ad=+h[m>>3];ae=+h[j>>3];U=af*(ae-ad)+(+h[l>>3]*(ad-ah)+ +h[ab>>3]*(ah-ae));h[I>>3]=U;ae=+h[e>>3];ad=+h[k>>3];af=ah*(ad-ae)+(+h[j>>3]*(ae-ag)+ +h[m>>3]*(ag-ad));h[O>>3]=af;X=+Q(+(M*M+U*U+af*af));Y=F;Z=af;_=M;$=U}if(Z<0.0){ai=0;aj=X*-1.0}else{ai=1;aj=X}X=_/aj;h[C>>3]=X;_=$/aj;h[I>>3]=_;$=Z/aj;h[O>>3]=$;h[z+(d+88|0)>>3]=+h[Y>>3]*(-0.0-X)-_*+h[Y+8>>3]-$*+h[Y+16>>3];a[z+(d+96|0)|0]=ai;o=(A-(c[7628]|0)|0)/104&-1;i=f;return o|0}function gA(b,d,e,f,g,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;k=i;if((e|0)<=-2){i=k;return}l=(f|0)<-1?e:f;f=c[7628]|0;m=(a[f+(l*104&-1)+96|0]&1)<<1|a[f+(e*104&-1)+96|0]&1;do{if((m|0)==0){f=c[11608]|0;n=f+(b*20&-1)+8|0;if((c[n>>2]|0)==-3){o=f}else{c[n>>2]=j;o=c[11608]|0}n=o+(d*20&-1)+8|0;if((c[n>>2]|0)==-3){i=k;return}c[n>>2]=j;i=k;return}else if((m|0)==2){n=(c[11608]|0)+(b*20&-1)+8|0;if((c[n>>2]|0)==-3){break}c[n>>2]=j}else if((m|0)!=1){i=k;return}}while(0);m=c[11608]|0;do{if(!((b|0)==(d|0)&(a[38960]^1))){if((c[m+(d*20&-1)+8>>2]|0)!=-3){break}i=k;return}}while(0);b=m;m=c[b+(d*20&-1)>>2]|0;o=c[b+(d*20&-1)+4>>2]|0;n=c[7628]|0;f=c[n+(e*104&-1)>>2]|0;p=c[n+(e*104&-1)+4>>2]|0;do{if((f|0)==(m|0)){q=c[n+(e*104&-1)+8>>2]|0;if((p|0)==(o|0)){r=q;break}r=(q|0)==(o|0)?p:-1}else{if((p|0)==(m|0)){q=c[n+(e*104&-1)+8>>2]|0;if((f|0)==(o|0)){r=q;break}r=(q|0)==(o|0)?f:-1;break}if((c[n+(e*104&-1)+8>>2]|0)!=(m|0)){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=143816,v)|0)}if((f|0)==(o|0)){r=p;break}r=(p|0)==(o|0)?f:-1}}while(0);if((r|0)<=-1){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=143816,v)|0)}f=c[228]|0;if(+h[n+(l*104&-1)+88>>3]+(+h[f+(r*48&-1)>>3]*+h[n+(l*104&-1)+64>>3]+ +h[f+(r*48&-1)+8>>3]*+h[n+(l*104&-1)+72>>3]+ +h[f+(r*48&-1)+16>>3]*+h[n+(l*104&-1)+80>>3])>0.0){c[b+(d*20&-1)+8>>2]=(a[n+(e*104&-1)+96|0]&1)!=0?g:j;i=k;return}else{c[b+(d*20&-1)+8>>2]=(a[n+(l*104&-1)+96|0]&1)!=0?g:j;i=k;return}}function gB(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0.0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;f=+h[e+80>>3];if(f==0.0){g=0;return g|0}i=c[228]|0;j=c[e>>2]|0;k=c[e+4>>2]|0;l=c[e+8>>2]|0;m=+h[a>>3];n=m+(+h[b>>3]-m)*d;m=+h[a+8>>3];o=m+(+h[b+8>>3]-m)*d;m=+h[a+16>>3];p=m+(+h[b+16>>3]-m)*d;d=+h[i+(j*48&-1)>>3];m=+h[i+(j*48&-1)+8>>3];q=+h[i+(k*48&-1)>>3];r=+h[i+(k*48&-1)+8>>3];s=(o-m)*(q-d)-(n-d)*(r-m);t=+h[i+(l*48&-1)>>3];u=+h[i+(l*48&-1)+8>>3];v=(o-r)*(t-q)-(n-q)*(u-r);r=(d-t)*(o-u)-(n-t)*(m-u);do{if(s<-1.0e-5|v<-1.0e-5|r<-1.0e-5){if(s+-1.0e-5>0.0){g=0;return g|0}if(v+-1.0e-5>0.0){g=0;return g|0}if(r+-1.0e-5>0.0){g=0}else{break}return g|0}}while(0);r=(-0.0-(+h[e+88>>3]+(n*+h[e+64>>3]+o*+h[e+72>>3])))/f;if(r<p+-1.0e-5){g=0;return g|0}g=p<r+-1.0e-5?1:2;return g|0}function gC(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0;e=i;f=c[228]|0;if((f|0)==0){uk(132480,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}g=c[225]|0;j=c[224]|0;do{if((g|0)<(j|0)){k=f;l=g}else{m=(c[226]|0)+j|0;if((m|0)==0){uu(f);c[228]=0;c[224]=0;c[225]=0;k=0;l=0;break}else{n=db(f,aa(c[227]|0,m),150384)|0;c[228]=n;c[224]=m;k=n;l=c[225]|0;break}}}while(0);f=c[227]|0;c[225]=l+1;j=aa(f,l);l=k+j|0;f=k;o=+h[f+(a*48&-1)>>3];p=o+(+h[f+(b*48&-1)>>3]-o)*d;h[l>>3]=p;f=c[228]|0;o=+h[f+(a*48&-1)+8>>3];q=o+(+h[f+(b*48&-1)+8>>3]-o)*d;h[k+(j+8|0)>>3]=q;f=c[228]|0;o=+h[f+(a*48&-1)+16>>3];r=o+(+h[f+(b*48&-1)+16>>3]-o)*d;h[k+(j+16|0)>>3]=r;f=c[228]|0;o=+h[f+(a*48&-1)+32>>3];h[k+(j+32|0)>>3]=o+(+h[f+(b*48&-1)+32>>3]-o)*d;c[k+(j+24|0)>>2]=0;j=c[228]|0;k=j;d=+P(+(p- +h[k+(a*48&-1)>>3]));o=d+ +P(+(q- +h[k+(a*48&-1)+8>>3]));if(o+ +P(+(r- +h[k+(a*48&-1)+16>>3]))+-1.0e-5<=0.0){if((j|0)==0){uk(119400,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}f=c[225]|0;if((f|0)==0){s=a;i=e;return s|0}c[225]=f-1;s=a;i=e;return s|0}o=+P(+(p- +h[k+(b*48&-1)>>3]));p=o+ +P(+(q- +h[k+(b*48&-1)+8>>3]));if(p+ +P(+(r- +h[k+(b*48&-1)+16>>3]))+-1.0e-5>0.0){s=(l-j|0)/48&-1;i=e;return s|0}j=c[225]|0;if((j|0)==0){s=b;i=e;return s|0}c[225]=j-1;s=b;i=e;return s|0}function gD(b){b=b|0;var d=0,e=0,f=0,g=0;d=i;e=c[b>>2]|0;if((a[e+8|0]&1)!=0){uf(-1,72648,(v=i,i=i+8|0,c[v>>2]=c[e+4>>2],v)|0)}b=e+16|0;f=c[6354]|0;if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=f+1|0;c[6354]=g;f=14296+(g*24&-1)|0;g=b;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];c[f+8>>2]=c[g+8>>2];c[f+12>>2]=c[g+12>>2];c[f+16>>2]=c[g+16>>2];c[f+20>>2]=c[g+20>>2];if((c[b>>2]|0)!=3){i=d;return}b=c[e+24>>2]|0;if((b|0)==0){i=d;return}e=bP(b|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=e;i=d;return}function gE(a){a=a|0;var b=0,d=0,e=0;b=i;d=c[6354]|0;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=d+1|0;c[6354]=e;d=14296+(e*24&-1)|0;e=a;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];c[d+16>>2]=c[e+16>>2];c[d+20>>2]=c[e+20>>2];if((c[a>>2]|0)!=3){i=b;return}e=c[a+8>>2]|0;if((e|0)==0){i=b;return}a=bP(e|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=a;i=b;return}function gF(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;d=c[a>>2]|0;a=d+24|0;e=c[6354]|0;if((e|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e+1|0;c[6354]=f;e=14296+(f*24&-1)|0;f=a;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[a>>2]|0)!=3){i=b;return}a=c[d+32>>2]|0;if((a|0)==0){i=b;return}d=bP(a|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=d;i=b;return}function gG(a){a=a|0;var b=0;a=i;b=c[6354]|0;if((b|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=b-1;if((c[14296+(b*24&-1)>>2]|0)!=3){i=a;return}uu(c[14304+(b*24&-1)>>2]|0);i=a;return}function gH(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;d=c[a>>2]|0;a=d+48|0;e=c[6354]|0;if((e|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e+1|0;c[6354]=f;e=14296+(f*24&-1)|0;f=a;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[a>>2]|0)!=3){i=b;return}a=c[d+56>>2]|0;if((a|0)==0){i=b;return}d=bP(a|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=d;i=b;return}function gI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=i;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=d-1|0;c[6354]=e;f=c[14304+(d*24&-1)>>2]|0;g=c[a>>2]|0;a=g+24+(f*24&-1)|0;if((e|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d;e=14296+(d*24&-1)|0;d=a;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];c[e+16>>2]=c[d+16>>2];c[e+20>>2]=c[d+20>>2];if((c[a>>2]|0)!=3){i=b;return}a=c[g+24+(f*24&-1)+8>>2]|0;if((a|0)==0){i=b;return}f=bP(a|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=f;i=b;return}function gJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;b=i;i=i+24|0;d=c[a>>2]|0;a=d+8|0;if((c[a>>2]|0)==0){uf(-1,168872,(v=i,i=i+8|0,c[v>>2]=c[d+4>>2],v)|0)}e=d+24|0;f=b|0;g=e;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];c[f+8>>2]=c[g+8>>2];c[f+12>>2]=c[g+12>>2];c[f+16>>2]=c[g+16>>2];c[f+20>>2]=c[g+20>>2];h=c[6354]|0;if((h|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=h-1;j=14296+(h*24&-1)|0;c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];c[g+16>>2]=c[j+16>>2];c[g+20>>2]=c[j+20>>2];j=c[d+16>>2]|0;if((j|0)!=1){uf(-1,138760,(v=i,i=i+16|0,c[v>>2]=c[d+4>>2],c[v+8>>2]=j,v)|0)}j=c[6932]|0;c[6932]=j+1;if((j|0)>250){uf(-1,137088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}j=c[a>>2]|0;a=c[9340]|0;h=c[j>>2]|0;k=0;while(1){if((k|0)>=(h|0)){break}l=c[j+8+(k<<5)>>2]|0;c[9340]=1;cM[c[41164+(l<<3)>>2]&511](j+8+(k<<5)+8|0);m=c[9340]|0;if((l-37|0)>>>0<4|(m|0)==1){k=m+k|0}else{n=12954;break}}if((n|0)==12954){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=206200,v)|0)}c[9340]=a;a=e|0;if((c[a>>2]|0)!=3){c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];c[g+16>>2]=c[f+16>>2];c[g+20>>2]=c[f+20>>2];o=c[6932]|0;p=o-1|0;c[6932]=p;i=b;return}uu(c[d+32>>2]|0);c[a>>2]=1;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];c[g+16>>2]=c[f+16>>2];c[g+20>>2]=c[f+20>>2];o=c[6932]|0;p=o-1|0;c[6932]=p;i=b;return}function gK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;b=i;i=i+288|0;d=b|0;e=c[a>>2]|0;a=e+8|0;if((c[a>>2]|0)==0){uf(-1,168872,(v=i,i=i+8|0,c[v>>2]=c[e+4>>2],v)|0)}f=d;g=e+24|0;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];c[f+8>>2]=c[g+8>>2];c[f+12>>2]=c[g+12>>2];c[f+16>>2]=c[g+16>>2];c[f+20>>2]=c[g+20>>2];f=d+24|0;h=e+48|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];c[f+16>>2]=c[h+16>>2];c[f+20>>2]=c[h+20>>2];h=d+48|0;f=e+72|0;c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];c[h+12>>2]=c[f+12>>2];c[h+16>>2]=c[f+16>>2];c[h+20>>2]=c[f+20>>2];f=d+72|0;h=e+96|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];c[f+16>>2]=c[h+16>>2];c[f+20>>2]=c[h+20>>2];h=d+96|0;f=e+120|0;c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];c[h+12>>2]=c[f+12>>2];c[h+16>>2]=c[f+16>>2];c[h+20>>2]=c[f+20>>2];f=d+120|0;h=e+144|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];c[f+16>>2]=c[h+16>>2];c[f+20>>2]=c[h+20>>2];h=d+144|0;f=e+168|0;c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];c[h+12>>2]=c[f+12>>2];c[h+16>>2]=c[f+16>>2];c[h+20>>2]=c[f+20>>2];f=d+168|0;h=e+192|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];c[f+16>>2]=c[h+16>>2];c[f+20>>2]=c[h+20>>2];h=d+192|0;f=e+216|0;c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];c[h+12>>2]=c[f+12>>2];c[h+16>>2]=c[f+16>>2];c[h+20>>2]=c[f+20>>2];f=d+216|0;h=e+240|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];c[f+16>>2]=c[h+16>>2];c[f+20>>2]=c[h+20>>2];h=d+240|0;f=e+264|0;c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];c[h+12>>2]=c[f+12>>2];c[h+16>>2]=c[f+16>>2];c[h+20>>2]=c[f+20>>2];f=d+264|0;h=e+288|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];c[f+16>>2]=c[h+16>>2];c[f+20>>2]=c[h+20>>2];h=c[6354]|0;if((h|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=h-1|0;c[6354]=f;j=c[14304+(h*24&-1)>>2]|0;h=c[e+16>>2]|0;if((j|0)!=(h|0)){uf(-1,123608,(v=i,i=i+24|0,c[v>>2]=c[e+4>>2],c[v+8>>2]=h,c[v+16>>2]=(h|0)==1?0:115,v)|0)}L17671:do{if((j|0)>12){h=j-12|0;if((h|0)>0){k=0;l=f}else{m=11;n=f;o=12972;break}while(1){if((l|0)<0){break}p=l-1|0;c[6354]=p;q=14296+(l*24&-1)|0;c[g>>2]=c[q>>2];c[g+4>>2]=c[q+4>>2];c[g+8>>2]=c[q+8>>2];c[g+12>>2]=c[q+12>>2];c[g+16>>2]=c[q+16>>2];c[g+20>>2]=c[q+20>>2];q=k+1|0;if((q|0)<(h|0)){k=q;l=p}else{m=11;n=p;o=12972;break L17671}}uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h=j-1|0;if((h|0)>-1){m=h;n=f;o=12972}}}while(0);L17678:do{if((o|0)==12972){while(1){o=0;if((n|0)<0){break}f=n-1|0;c[6354]=f;j=e+24+(m*24&-1)|0;l=14296+(n*24&-1)|0;c[j>>2]=c[l>>2];c[j+4>>2]=c[l+4>>2];c[j+8>>2]=c[l+8>>2];c[j+12>>2]=c[l+12>>2];c[j+16>>2]=c[l+16>>2];c[j+20>>2]=c[l+20>>2];if((m|0)>0){m=m-1|0;n=f;o=12972}else{break L17678}}uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);n=c[6932]|0;c[6932]=n+1;if((n|0)>250){uf(-1,137088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}n=c[a>>2]|0;a=c[9340]|0;m=c[n>>2]|0;f=0;while(1){if((f|0)>=(m|0)){break}l=c[n+8+(f<<5)>>2]|0;c[9340]=1;cM[c[41164+(l<<3)>>2]&511](n+8+(f<<5)+8|0);j=c[9340]|0;if((l-37|0)>>>0<4|(j|0)==1){f=j+f|0}else{o=12980;break}}if((o|0)==12980){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=206200,v)|0)}c[9340]=a;c[6932]=(c[6932]|0)-1;a=0;do{o=e+24+(a*24&-1)|0;f=o|0;if((c[f>>2]|0)==3){uu(c[e+24+(a*24&-1)+8>>2]|0);c[f>>2]=1}f=o;o=d+(a*24&-1)|0;c[f>>2]=c[o>>2];c[f+4>>2]=c[o+4>>2];c[f+8>>2]=c[o+8>>2];c[f+12>>2]=c[o+12>>2];c[f+16>>2]=c[o+16>>2];c[f+20>>2]=c[o+20>>2];a=a+1|0;}while((a|0)<12);i=b;return}function gL(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0,t=0.0,u=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0,E=0.0,F=0.0;d=i;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e-1|0;c[6354]=f;g=c[14296+(e*24&-1)>>2]|0;j=c[14304+(e*24&-1)>>2]|0;if((f|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}k=e-2|0;c[6354]=k;l=c[14304+(f*24&-1)>>2]|0;if((k|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}m=c[14296+(f*24&-1)>>2]|0;c[6354]=e-3;e=c[14304+(k*24&-1)>>2]|0;if(!((m|0)==1&(g|0)==1)){uf(-1,106264,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((c[14296+(k*24&-1)>>2]|0)==3){n=43240}else{uf(-1,98792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}while(1){o=c[n>>2]|0;if((o|0)==0){p=12998;break}if((aY(e|0,c[o+4>>2]|0)|0)==0){break}else{n=o|0}}if((p|0)==12998){uf(-1,93136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}a[o+8|0]=0;n=c[b>>2]|0;if((n|0)==0){uf(-1,85336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}L17723:do{if((l|0)>(j|0)){q=0.0;r=0.0;s=0}else{b=o+16|0;k=o+24|0;g=n+8|0;t=0.0;m=l;u=0.0;L17725:while(1){c[b>>2]=1;c[k>>2]=m;f=c[g>>2]|0;w=c[9340]|0;x=c[f>>2]|0;y=0;while(1){if((y|0)>=(x|0)){break}z=c[f+8+(y<<5)>>2]|0;c[9340]=1;cM[c[41164+(z<<3)>>2]&511](f+8+(y<<5)+8|0);A=c[9340]|0;if((z-37|0)>>>0<4|(A|0)==1){y=A+y|0}else{p=13006;break L17725}}c[9340]=w;y=c[6354]|0;if((y|0)<0){p=13008;break}c[6354]=y-1;f=14296+(y*24&-1)|0;x=c[f>>2]|0;A=c[f+4>>2]|0;f=14304+(y*24&-1)|0;B=c[f>>2]|0;if((x|0)==2){C=+h[14312+(y*24&-1)>>3];D=+h[f>>3]}else if((x|0)==3){p=13013;break}else if((x|0)==1){C=0.0;D=+(B|0)}else{p=13011;break}E=u+D;F=t+C;x=m+1|0;if((x|0)>(j|0)){q=F;r=E;s=A;break L17723}else{t=F;m=x;u=E}}if((p|0)==13013){m=B;uz(m,0);uh(-1,212704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);uf(-1,212032,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((p|0)==13011){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((p|0)==13006){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=206200,v)|0)}else if((p|0)==13008){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);uu(e);e=c[6354]|0;if((e|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{p=e+1|0;c[6354]=p;e=14296+(p*24&-1)|0;c[e>>2]=2;c[e+4>>2]=s;h[14304+(p*24&-1)>>3]=r;h[14312+(p*24&-1)>>3]=q;i=d;return}}function gM(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;a=i;i=i+16|0;b=c[6354]|0;if((b|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}d=b-1|0;c[6354]=d;e=14296+(b*24&-1)|0;f=e;g=e|0;e=c[g>>2]|0;h=f+4|0;j=c[h>>2]|0;k=14304+(b*24&-1)|0;l=c[k>>2]|0;m=f+12|0;f=a|0;c[f>>2]=c[m>>2];c[f+4>>2]=c[m+4>>2];c[f+8>>2]=c[m+8>>2];if((e|0)!=1){uf(-1,207704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{c[6354]=b;c[g>>2]=1;c[h>>2]=j;c[k>>2]=(l|0)==0&1;c[m>>2]=c[f>>2];c[m+4>>2]=c[f+4>>2];c[m+8>>2]=c[f+8>>2];i=a;return}}function gN(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;a=i;i=i+16|0;b=c[6354]|0;if((b|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}d=b-1|0;c[6354]=d;e=14296+(b*24&-1)|0;f=e;g=e|0;e=c[g>>2]|0;h=f+4|0;j=c[h>>2]|0;k=14304+(b*24&-1)|0;l=c[k>>2]|0;m=f+12|0;f=a|0;c[f>>2]=c[m>>2];c[f+4>>2]=c[m+4>>2];c[f+8>>2]=c[m+8>>2];if((e|0)!=1){uf(-1,207704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{c[6354]=b;c[g>>2]=1;c[h>>2]=j;c[k>>2]=l^-1;c[m>>2]=c[f>>2];c[m+4>>2]=c[f+4>>2];c[m+8>>2]=c[f+8>>2];i=a;return}}function gO(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;a=i;i=i+16|0;b=c[6354]|0;if((b|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}d=b-1|0;c[6354]=d;e=c[14304+(b*24&-1)>>2]|0;if((c[14296+(b*24&-1)>>2]|0)!=1){uf(-1,207704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=b-2|0;c[6354]=f;b=14296+(d*24&-1)|0;g=b;h=b|0;b=c[h>>2]|0;j=g+4|0;k=c[j>>2]|0;l=14304+(d*24&-1)|0;m=c[l>>2]|0;n=g+12|0;g=a|0;c[g>>2]=c[n>>2];c[g+4>>2]=c[n+4>>2];c[g+8>>2]=c[n+8>>2];if((b|0)!=1){uf(-1,207704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((m|0)==0){o=(e|0)!=0&1}else{o=1}if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{c[6354]=d;c[h>>2]=1;c[j>>2]=k;c[l>>2]=o;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];i=a;return}}function gP(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;a=i;i=i+16|0;b=c[6354]|0;if((b|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}d=b-1|0;c[6354]=d;e=c[14304+(b*24&-1)>>2]|0;if((c[14296+(b*24&-1)>>2]|0)!=1){uf(-1,207704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=b-2|0;c[6354]=f;b=14296+(d*24&-1)|0;g=b;h=b|0;b=c[h>>2]|0;j=g+4|0;k=c[j>>2]|0;l=14304+(d*24&-1)|0;m=c[l>>2]|0;n=g+12|0;g=a|0;c[g>>2]=c[n>>2];c[g+4>>2]=c[n+4>>2];c[g+8>>2]=c[n+8>>2];if((b|0)!=1){uf(-1,207704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((m|0)==0){o=0}else{o=(e|0)!=0&1}if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{c[6354]=d;c[h>>2]=1;c[j>>2]=k;c[l>>2]=o;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];i=a;return}}function gQ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;a=i;i=i+16|0;b=c[6354]|0;if((b|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}d=b-1|0;c[6354]=d;e=c[14304+(b*24&-1)>>2]|0;if((c[14296+(b*24&-1)>>2]|0)!=1){uf(-1,207704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=b-2|0;c[6354]=f;b=14296+(d*24&-1)|0;g=b;h=b|0;b=c[h>>2]|0;j=g+4|0;k=c[j>>2]|0;l=14304+(d*24&-1)|0;m=c[l>>2]|0;n=g+12|0;g=a|0;c[g>>2]=c[n>>2];c[g+4>>2]=c[n+4>>2];c[g+8>>2]=c[n+8>>2];if((b|0)!=1){uf(-1,207704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{c[6354]=d;c[h>>2]=1;c[j>>2]=k;c[l>>2]=m|e;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];i=a;return}}function gR(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;a=i;i=i+16|0;b=c[6354]|0;if((b|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}d=b-1|0;c[6354]=d;e=c[14304+(b*24&-1)>>2]|0;if((c[14296+(b*24&-1)>>2]|0)!=1){uf(-1,207704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=b-2|0;c[6354]=f;b=14296+(d*24&-1)|0;g=b;h=b|0;b=c[h>>2]|0;j=g+4|0;k=c[j>>2]|0;l=14304+(d*24&-1)|0;m=c[l>>2]|0;n=g+12|0;g=a|0;c[g>>2]=c[n>>2];c[g+4>>2]=c[n+4>>2];c[g+8>>2]=c[n+8>>2];if((b|0)!=1){uf(-1,207704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{c[6354]=d;c[h>>2]=1;c[j>>2]=k;c[l>>2]=m^e;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];i=a;return}}function gS(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;a=i;i=i+16|0;b=c[6354]|0;if((b|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}d=b-1|0;c[6354]=d;e=c[14304+(b*24&-1)>>2]|0;if((c[14296+(b*24&-1)>>2]|0)!=1){uf(-1,207704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=b-2|0;c[6354]=f;b=14296+(d*24&-1)|0;g=b;h=b|0;b=c[h>>2]|0;j=g+4|0;k=c[j>>2]|0;l=14304+(d*24&-1)|0;m=c[l>>2]|0;n=g+12|0;g=a|0;c[g>>2]=c[n>>2];c[g+4>>2]=c[n+4>>2];c[g+8>>2]=c[n+8>>2];if((b|0)!=1){uf(-1,207704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{c[6354]=d;c[h>>2]=1;c[j>>2]=k;c[l>>2]=m&e;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];i=a;return}}function gT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0.0,u=0,w=0;a=i;i=i+16|0;b=a|0;d=a+8|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e-1|0;c[6354]=f;g=14296+(e*24&-1)|0;j=c[g>>2]|0;k=c[g+4>>2]|0;g=14304+(e*24&-1)|0;l=+h[g>>3];m=c[g>>2]|0;h[d>>3]=l;n=+h[14312+(e*24&-1)>>3];e=m;m=e;do{if((j|0)==3){o=+uz(m,b);g=(m|0)==(c[b>>2]|0);uu(m);if(g){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[d>>3]=o;p=0.0;q=o;r=c[6354]|0;s=13099;break}}else{if((j|0)==2){p=n;q=l;r=f;s=13099;break}else if((j|0)==1){c[d>>2]=-e;t=n;u=1;w=f;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if((s|0)==13099){h[d>>3]=-0.0-q;t=-0.0-p;u=2;w=r}if((w|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{r=w+1|0;c[6354]=r;w=14296+(r*24&-1)|0;c[w>>2]=u;c[w+4>>2]=k;h[14304+(r*24&-1)>>3]=+h[d>>3];h[14312+(r*24&-1)>>3]=t;i=a;return}}function gU(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,l=0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0.0,s=0,t=0.0,u=0,w=0.0,x=0.0,y=0,z=0,A=0.0;a=i;i=i+24|0;b=a|0;d=a+8|0;e=a+16|0;f=c[6354]|0;if((f|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=f-1|0;c[6354]=g;j=c[14296+(f*24&-1)>>2]|0;l=14304+(f*24&-1)|0;m=+h[l>>3];n=+h[14312+(f*24&-1)>>3];f=c[l>>2]|0;l=f;do{if((j|0)==3){o=+uz(l,d);p=(l|0)==(c[d>>2]|0);uu(l);if(p){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[k>>3]=o;q=2;r=0.0;s=c[6354]|0;t=o;u=c[k>>2]|0;break}}else{q=j;r=n;s=g;t=m;u=f}}while(0);if((s|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=s-1;f=14296+(s*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=14304+(s*24&-1)|0;m=+h[f>>3];l=c[f>>2]|0;h[e>>3]=m;n=+h[14312+(s*24&-1)>>3];s=l;l=s;do{if((g|0)==3){o=+uz(l,b);f=(l|0)==(c[b>>2]|0);uu(l);if(f){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[e>>3]=o;w=0.0;x=o;y=13122;break}}else{if((g|0)==2){w=n;x=m;y=13122;break}else if((g|0)!=1){uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((q|0)==1){z=(s|0)==(u|0)&1;A=n;break}else if((q|0)==2){if(+(s|0)!=t){z=0;A=n;break}z=r==0.0&1;A=n;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if((y|0)==13122){if((q|0)==1){if(+(u|0)!=x){z=0;A=w;break}z=w==0.0&1;A=w;break}else if((q|0)==2){if(x!=t){z=0;A=w;break}z=w==r&1;A=w;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);c[e>>2]=z;z=c[6354]|0;if((z|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{q=z+1|0;c[6354]=q;z=14296+(q*24&-1)|0;c[z>>2]=1;c[z+4>>2]=j;h[14304+(q*24&-1)>>3]=+h[e>>3];h[14312+(q*24&-1)>>3]=A;i=a;return}}function gV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,l=0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0.0,s=0,t=0.0,u=0,w=0.0,x=0.0,y=0,z=0,A=0.0;a=i;i=i+24|0;b=a|0;d=a+8|0;e=a+16|0;f=c[6354]|0;if((f|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=f-1|0;c[6354]=g;j=c[14296+(f*24&-1)>>2]|0;l=14304+(f*24&-1)|0;m=+h[l>>3];n=+h[14312+(f*24&-1)>>3];f=c[l>>2]|0;l=f;do{if((j|0)==3){o=+uz(l,d);p=(l|0)==(c[d>>2]|0);uu(l);if(p){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[k>>3]=o;q=2;r=0.0;s=c[6354]|0;t=o;u=c[k>>2]|0;break}}else{q=j;r=n;s=g;t=m;u=f}}while(0);if((s|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=s-1;f=14296+(s*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=14304+(s*24&-1)|0;m=+h[f>>3];l=c[f>>2]|0;h[e>>3]=m;n=+h[14312+(s*24&-1)>>3];s=l;l=s;do{if((g|0)==3){o=+uz(l,b);f=(l|0)==(c[b>>2]|0);uu(l);if(f){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[e>>3]=o;w=0.0;x=o;y=13150;break}}else{if((g|0)==2){w=n;x=m;y=13150;break}else if((g|0)!=1){uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((q|0)==2){if(+(s|0)!=t){z=1;A=n;break}z=r!=0.0&1;A=n;break}else if((q|0)==1){z=(s|0)!=(u|0)&1;A=n;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if((y|0)==13150){if((q|0)==2){if(x!=t){z=1;A=w;break}z=w!=r&1;A=w;break}else if((q|0)==1){if(+(u|0)!=x){z=1;A=w;break}z=w!=0.0&1;A=w;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);c[e>>2]=z;z=c[6354]|0;if((z|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{u=z+1|0;c[6354]=u;z=14296+(u*24&-1)|0;c[z>>2]=1;c[z+4>>2]=j;h[14304+(u*24&-1)>>3]=+h[e>>3];h[14312+(u*24&-1)>>3]=A;i=a;return}}function gW(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,l=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,w=0.0,x=0,y=0,z=0.0;a=i;i=i+24|0;b=a|0;d=a+8|0;e=a+16|0;f=c[6354]|0;if((f|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=f-1|0;c[6354]=g;j=c[14296+(f*24&-1)>>2]|0;l=14304+(f*24&-1)|0;m=+h[l>>3];f=c[l>>2]|0;l=f;do{if((j|0)==3){n=+uz(l,d);o=(l|0)==(c[d>>2]|0);uu(l);if(o){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[k>>3]=n;p=2;q=c[6354]|0;r=n;s=c[k>>2]|0;break}}else{p=j;q=g;r=m;s=f}}while(0);if((q|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=q-1;f=14296+(q*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=14304+(q*24&-1)|0;m=+h[f>>3];l=c[f>>2]|0;h[e>>3]=m;n=+h[14312+(q*24&-1)>>3];q=l;l=q;do{if((g|0)==3){t=+uz(l,b);f=(l|0)==(c[b>>2]|0);uu(l);if(f){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[e>>3]=t;u=0.0;w=t;x=13177;break}}else{if((g|0)==2){u=n;w=m;x=13177;break}else if((g|0)!=1){uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((p|0)==2){y=+(q|0)>r;z=n;break}else if((p|0)==1){y=(q|0)>(s|0);z=n;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if((x|0)==13177){if((p|0)==1){y=w>+(s|0);z=u;break}else if((p|0)==2){y=w>r;z=u;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);c[e>>2]=y&1;y=c[6354]|0;if((y|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{p=y+1|0;c[6354]=p;y=14296+(p*24&-1)|0;c[y>>2]=1;c[y+4>>2]=j;h[14304+(p*24&-1)>>3]=+h[e>>3];h[14312+(p*24&-1)>>3]=z;i=a;return}}function gX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,l=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,w=0.0,x=0,y=0,z=0.0;a=i;i=i+24|0;b=a|0;d=a+8|0;e=a+16|0;f=c[6354]|0;if((f|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=f-1|0;c[6354]=g;j=c[14296+(f*24&-1)>>2]|0;l=14304+(f*24&-1)|0;m=+h[l>>3];f=c[l>>2]|0;l=f;do{if((j|0)==3){n=+uz(l,d);o=(l|0)==(c[d>>2]|0);uu(l);if(o){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[k>>3]=n;p=2;q=c[6354]|0;r=n;s=c[k>>2]|0;break}}else{p=j;q=g;r=m;s=f}}while(0);if((q|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=q-1;f=14296+(q*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=14304+(q*24&-1)|0;m=+h[f>>3];l=c[f>>2]|0;h[e>>3]=m;n=+h[14312+(q*24&-1)>>3];q=l;l=q;do{if((g|0)==3){t=+uz(l,b);f=(l|0)==(c[b>>2]|0);uu(l);if(f){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[e>>3]=t;u=0.0;w=t;x=13202;break}}else{if((g|0)==2){u=n;w=m;x=13202;break}else if((g|0)!=1){uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((p|0)==1){y=(q|0)<(s|0);z=n;break}else if((p|0)==2){y=+(q|0)<r;z=n;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if((x|0)==13202){if((p|0)==2){y=w<r;z=u;break}else if((p|0)==1){y=w<+(s|0);z=u;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);c[e>>2]=y&1;y=c[6354]|0;if((y|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{s=y+1|0;c[6354]=s;y=14296+(s*24&-1)|0;c[y>>2]=1;c[y+4>>2]=j;h[14304+(s*24&-1)>>3]=+h[e>>3];h[14312+(s*24&-1)>>3]=z;i=a;return}}function gY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,l=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,w=0.0,x=0,y=0,z=0.0;a=i;i=i+24|0;b=a|0;d=a+8|0;e=a+16|0;f=c[6354]|0;if((f|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=f-1|0;c[6354]=g;j=c[14296+(f*24&-1)>>2]|0;l=14304+(f*24&-1)|0;m=+h[l>>3];f=c[l>>2]|0;l=f;do{if((j|0)==3){n=+uz(l,d);o=(l|0)==(c[d>>2]|0);uu(l);if(o){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[k>>3]=n;p=2;q=c[6354]|0;r=n;s=c[k>>2]|0;break}}else{p=j;q=g;r=m;s=f}}while(0);if((q|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=q-1;f=14296+(q*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=14304+(q*24&-1)|0;m=+h[f>>3];l=c[f>>2]|0;h[e>>3]=m;n=+h[14312+(q*24&-1)>>3];q=l;l=q;do{if((g|0)==3){t=+uz(l,b);f=(l|0)==(c[b>>2]|0);uu(l);if(f){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[e>>3]=t;u=0.0;w=t;x=13227;break}}else{if((g|0)==2){u=n;w=m;x=13227;break}else if((g|0)!=1){uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((p|0)==2){y=+(q|0)>=r;z=n;break}else if((p|0)==1){y=(q|0)>=(s|0);z=n;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if((x|0)==13227){if((p|0)==1){y=w>=+(s|0);z=u;break}else if((p|0)==2){y=w>=r;z=u;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);c[e>>2]=y&1;y=c[6354]|0;if((y|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{p=y+1|0;c[6354]=p;y=14296+(p*24&-1)|0;c[y>>2]=1;c[y+4>>2]=j;h[14304+(p*24&-1)>>3]=+h[e>>3];h[14312+(p*24&-1)>>3]=z;i=a;return}}function gZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,l=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,w=0.0,x=0,y=0,z=0.0;a=i;i=i+24|0;b=a|0;d=a+8|0;e=a+16|0;f=c[6354]|0;if((f|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=f-1|0;c[6354]=g;j=c[14296+(f*24&-1)>>2]|0;l=14304+(f*24&-1)|0;m=+h[l>>3];f=c[l>>2]|0;l=f;do{if((j|0)==3){n=+uz(l,d);o=(l|0)==(c[d>>2]|0);uu(l);if(o){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[k>>3]=n;p=2;q=c[6354]|0;r=n;s=c[k>>2]|0;break}}else{p=j;q=g;r=m;s=f}}while(0);if((q|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=q-1;f=14296+(q*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=14304+(q*24&-1)|0;m=+h[f>>3];l=c[f>>2]|0;h[e>>3]=m;n=+h[14312+(q*24&-1)>>3];q=l;l=q;do{if((g|0)==3){t=+uz(l,b);f=(l|0)==(c[b>>2]|0);uu(l);if(f){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[e>>3]=t;u=0.0;w=t;x=13252;break}}else{if((g|0)==2){u=n;w=m;x=13252;break}else if((g|0)!=1){uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((p|0)==1){y=(q|0)<=(s|0);z=n;break}else if((p|0)==2){y=+(q|0)<=r;z=n;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if((x|0)==13252){if((p|0)==2){y=w<=r;z=u;break}else if((p|0)==1){y=w<=+(s|0);z=u;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);c[e>>2]=y&1;y=c[6354]|0;if((y|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{s=y+1|0;c[6354]=s;y=14296+(s*24&-1)|0;c[y>>2]=1;c[y+4>>2]=j;h[14304+(s*24&-1)>>3]=+h[e>>3];h[14312+(s*24&-1)>>3]=z;i=a;return}}function g_(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,l=0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0.0,s=0,t=0.0,u=0,w=0.0,x=0.0,y=0,z=0,A=0.0;a=i;i=i+24|0;b=a|0;d=a+8|0;e=a+16|0;f=c[6354]|0;if((f|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=f-1|0;c[6354]=g;j=c[14296+(f*24&-1)>>2]|0;l=14304+(f*24&-1)|0;m=+h[l>>3];n=+h[14312+(f*24&-1)>>3];f=c[l>>2]|0;l=f;do{if((j|0)==3){o=+uz(l,d);p=(l|0)==(c[d>>2]|0);uu(l);if(p){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[k>>3]=o;q=2;r=0.0;s=c[6354]|0;t=o;u=c[k>>2]|0;break}}else{q=j;r=n;s=g;t=m;u=f}}while(0);if((s|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=s-1;f=c[14296+(s*24&-1)>>2]|0;g=14304+(s*24&-1)|0;m=+h[g>>3];j=c[g>>2]|0;g=j;do{if((f|0)==3){n=+uz(g,b);l=(g|0)==(c[b>>2]|0);uu(g);if(!l){w=0.0;x=n;y=13276;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((f|0)==2){w=+h[14312+(s*24&-1)>>3];x=m;y=13276;break}else if((f|0)!=1){uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((q|0)==1){c[e>>2]=u+j;z=1;A=0.0;break}else if((q|0)==2){h[e>>3]=+(j|0)+t;z=2;A=r;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if((y|0)==13276){if((q|0)==2){h[e>>3]=x+t;z=2;A=r+w;break}else if((q|0)==1){h[e>>3]=+(u|0)+x;z=2;A=w;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);u=c[6354]|0;if((u|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{q=u+1|0;c[6354]=q;c[14296+(q*24&-1)>>2]=z;h[14304+(q*24&-1)>>3]=+h[e>>3];h[14312+(q*24&-1)>>3]=A;i=a;return}}function g$(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,l=0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0.0,s=0,t=0.0,u=0,w=0.0,x=0.0,y=0,z=0,A=0.0;a=i;i=i+24|0;b=a|0;d=a+8|0;e=a+16|0;f=c[6354]|0;if((f|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=f-1|0;c[6354]=g;j=c[14296+(f*24&-1)>>2]|0;l=14304+(f*24&-1)|0;m=+h[l>>3];n=+h[14312+(f*24&-1)>>3];f=c[l>>2]|0;l=f;do{if((j|0)==3){o=+uz(l,d);p=(l|0)==(c[d>>2]|0);uu(l);if(p){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[k>>3]=o;q=2;r=0.0;s=c[6354]|0;t=o;u=c[k>>2]|0;break}}else{q=j;r=n;s=g;t=m;u=f}}while(0);if((s|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=s-1;f=c[14296+(s*24&-1)>>2]|0;g=14304+(s*24&-1)|0;m=+h[g>>3];j=c[g>>2]|0;g=j;do{if((f|0)==3){n=+uz(g,b);l=(g|0)==(c[b>>2]|0);uu(g);if(!l){w=0.0;x=n;y=17;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((f|0)==2){w=+h[14312+(s*24&-1)>>3];x=m;y=17;break}else if((f|0)!=1){uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((q|0)==1){c[e>>2]=j-u;z=1;A=0.0;break}else if((q|0)==2){h[e>>3]=+(j|0)-t;z=2;A=-0.0-r;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if((y|0)==17){if((q|0)==1){h[e>>3]=x- +(u|0);z=2;A=w;break}else if((q|0)==2){h[e>>3]=x-t;z=2;A=w-r;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);q=c[6354]|0;if((q|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{u=q+1|0;c[6354]=u;c[14296+(u*24&-1)>>2]=z;h[14304+(u*24&-1)>>3]=+h[e>>3];h[14312+(u*24&-1)>>3]=A;i=a;return}}function g0(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,l=0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0.0,s=0,t=0.0,u=0,w=0.0,x=0.0,y=0,z=0,A=0.0;a=i;i=i+24|0;b=a|0;d=a+8|0;e=a+16|0;f=c[6354]|0;if((f|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=f-1|0;c[6354]=g;j=c[14296+(f*24&-1)>>2]|0;l=14304+(f*24&-1)|0;m=+h[l>>3];n=+h[14312+(f*24&-1)>>3];f=c[l>>2]|0;l=f;do{if((j|0)==3){o=+uz(l,d);p=(l|0)==(c[d>>2]|0);uu(l);if(p){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[k>>3]=o;q=2;r=0.0;s=c[6354]|0;t=o;u=c[k>>2]|0;break}}else{q=j;r=n;s=g;t=m;u=f}}while(0);if((s|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=s-1;f=c[14296+(s*24&-1)>>2]|0;g=14304+(s*24&-1)|0;m=+h[g>>3];j=c[g>>2]|0;g=j;do{if((f|0)==3){n=+uz(g,b);l=(g|0)==(c[b>>2]|0);uu(g);if(!l){w=0.0;x=n;y=43;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((f|0)==2){w=+h[14312+(s*24&-1)>>3];x=m;y=43;break}else if((f|0)!=1){uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((q|0)==1){n=+(j|0)*+(u|0);if(+P(+n)<2147483647.0){c[e>>2]=aa(u,j);z=1;A=0.0;break}else{h[e>>3]=n;z=2;A=0.0;break}}else if((q|0)==2){n=+(j|0);h[e>>3]=n*t;z=2;A=r*n;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if((y|0)==43){if((q|0)==1){m=+(u|0);h[e>>3]=m*x;z=2;A=w*m;break}else if((q|0)==2){h[e>>3]=x*t-r*w;z=2;A=r*x+w*t;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);q=c[6354]|0;if((q|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{u=q+1|0;c[6354]=u;c[14296+(u*24&-1)>>2]=z;h[14304+(u*24&-1)>>3]=+h[e>>3];h[14312+(u*24&-1)>>3]=A;i=a;return}}function g1(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0.0,w=0,x=0.0,y=0.0,z=0,A=0,B=0.0;b=i;i=i+24|0;d=b|0;e=b+8|0;f=b+16|0;g=c[6354]|0;if((g|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}j=g-1|0;c[6354]=j;l=c[14296+(g*24&-1)>>2]|0;m=14304+(g*24&-1)|0;n=+h[m>>3];o=+h[14312+(g*24&-1)>>3];g=c[m>>2]|0;m=g;do{if((l|0)==3){p=+uz(m,e);q=(m|0)==(c[e>>2]|0);uu(m);if(q){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[k>>3]=p;r=2;s=0.0;t=c[6354]|0;u=p;w=c[k>>2]|0;break}}else{r=l;s=o;t=j;u=n;w=g}}while(0);if((t|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=t-1;g=c[14296+(t*24&-1)>>2]|0;j=14304+(t*24&-1)|0;n=+h[j>>3];l=c[j>>2]|0;j=l;do{if((g|0)==3){o=+uz(j,d);m=(j|0)==(c[d>>2]|0);uu(j);if(!m){x=0.0;y=o;z=71;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((g|0)==2){x=+h[14312+(t*24&-1)>>3];y=n;z=71;break}else if((g|0)!=1){uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((r|0)==1){if((w|0)==0){c[f>>2]=0;a[1960]=1;A=1;B=0.0;break}else{c[f>>2]=(l|0)/(w|0)&-1;A=1;B=0.0;break}}else if((r|0)==2){o=s*s+u*u;if(o!=0.0){h[f>>3]=u*+(l|0)/o;A=2;B=s*+(-l|0)/o;break}else{h[f>>3]=0.0;a[1960]=1;A=2;B=0.0;break}}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if((z|0)==71){if((r|0)==1){if((w|0)==0){h[f>>3]=0.0;a[1960]=1;A=2;B=0.0;break}else{n=+(w|0);h[f>>3]=y/n;A=2;B=x/n;break}}else if((r|0)==2){n=s*s+u*u;if(n!=0.0){h[f>>3]=(s*x+u*y)/n;A=2;B=(x*u-s*y)/n;break}else{h[f>>3]=0.0;a[1960]=1;A=2;B=0.0;break}}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);r=c[6354]|0;if((r|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{w=r+1|0;c[6354]=w;c[14296+(w*24&-1)>>2]=A;h[14304+(w*24&-1)>>3]=+h[f>>3];h[14312+(w*24&-1)>>3]=B;i=b;return}}function g2(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,l=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0.0,x=0;b=i;i=i+24|0;d=b|0;e=b+8|0;f=b+16|0;g=c[6354]|0;if((g|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}j=g-1|0;c[6354]=j;l=c[14296+(g*24&-1)>>2]|0;m=c[14304+(g*24&-1)>>2]|0;g=m;do{if((l|0)==3){n=+uz(g,e);o=(g|0)==(c[e>>2]|0);uu(g);if(o){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[k>>3]=n;p=2;q=c[6354]|0;r=c[k>>2]|0;break}}else{p=l;q=j;r=m}}while(0);if((q|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}m=q-1|0;c[6354]=m;j=14296+(q*24&-1)|0;l=j|0;g=c[l>>2]|0;e=j+4|0;j=c[e>>2]|0;o=14304+(q*24&-1)|0;s=c[o>>2]|0;h[f>>3]=+h[o>>3];t=14312+(q*24&-1)|0;n=+h[t>>3];u=s;s=u;if((g|0)==3){w=+uz(s,d);x=(s|0)==(c[d>>2]|0);uu(s);if(x){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}h[f>>3]=w;uf(-1,224848,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(!((g|0)==1&(p|0)==1)){uf(-1,224848,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}p=f;if((r|0)==0){c[p>>2]=0;if((m|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=q;c[l>>2]=1;c[e>>2]=j;h[o>>3]=+h[f>>3];h[t>>3]=n;a[1960]=1;i=b;return}else{c[p>>2]=(u|0)%(r|0)&-1;if((m|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=q;c[l>>2]=1;c[e>>2]=j;h[o>>3]=+h[f>>3];h[t>>3]=n;i=b;return}}function g3(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0.0,w=0,x=0.0,y=0.0,z=0,A=0,B=0.0,C=0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,U=0.0,V=0.0;b=i;i=i+24|0;d=b|0;e=b+8|0;f=b+16|0;g=c[6354]|0;if((g|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}j=g-1|0;c[6354]=j;l=c[14296+(g*24&-1)>>2]|0;m=14304+(g*24&-1)|0;n=+h[m>>3];o=+h[14312+(g*24&-1)>>3];g=c[m>>2]|0;m=g;do{if((l|0)==3){p=+uz(m,e);q=(m|0)==(c[e>>2]|0);uu(m);if(q){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[k>>3]=p;r=2;s=0.0;t=c[6354]|0;u=p;w=c[k>>2]|0;break}}else{r=l;s=o;t=j;u=n;w=g}}while(0);if((t|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=t-1;g=c[14296+(t*24&-1)>>2]|0;j=14304+(t*24&-1)|0;n=+h[j>>3];l=c[j>>2]|0;j=l;do{if((g|0)==3){o=+uz(j,d);m=(j|0)==(c[d>>2]|0);uu(j);if(!m){x=0.0;y=o;z=143;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((g|0)==2){x=+h[14312+(t*24&-1)>>3];y=n;z=143;break}else if((g|0)!=1){uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((r|0)==1){if((l|0)==0){if((w|0)<0){a[1960]=1}c[f>>2]=(w|0)==0&1;A=1;B=0.0;break}o=+R(+(+(l|0)),+(+(w|0)));if(o>2147483647.0|(w|0)<0){h[f>>3]=o;A=2;B=0.0;break}if((w|0)>0){m=0;e=1;while(1){q=aa(l,e);C=m+1|0;if((C|0)<(w|0)){m=C;e=q}else{D=q;break}}}else{D=1}c[f>>2]=D;A=1;B=0.0;break}else if((r|0)==2){if((l|0)==0){if(s!=0.0|u<0.0){a[1960]=1}h[f>>3]=u==0.0?1.0:0.0;A=2;B=0.0;break}o=+R(+(+(((l|0)>-1?l:-l|0)|0)),+(+P(+u)));do{if(u<0.0){if(o!=0.0){E=1.0/o;break}else{a[1960]=1;E=o;break}}else{E=o}}while(0);o=((l|0)>-1?0.0:3.141592653589793)*(-0.0-s);if(o<-706.893623549172){F=0.0}else{F=+Z(+o)}o=E*F;e=(l|0)>-1;p=u*(e?0.0:3.141592653589793)+s*+_(+(+((e?l:-l|0)|0)));G=o*+S(+p);H=o*+T(+p);h[f>>3]=G;A=2;B=H;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if((z|0)==143){if((r|0)==1){if(x==0.0){F=+R(+y,+(+(((w|0)>-1?w:-w|0)|0)));do{if((w|0)<0){if(F!=0.0){I=1.0/F;break}else{a[1960]=1;I=F;break}}else{I=F}}while(0);h[f>>3]=I;A=2;B=0.0;break}F=+P(+y);E=+P(+x);if(F>E){n=E/F;J=F*+Q(+(n*n+1.0))}else{n=F/E;J=E*+Q(+(n*n+1.0))}n=+R(+J,+(+(((w|0)>-1?w:-w|0)|0)));do{if((w|0)<0){if(n!=0.0){K=1.0/n;break}else{a[1960]=1;K=n;break}}else{K=n}}while(0);n=+Y(+x,+y)*+(w|0);E=K*+S(+n);F=K*+T(+n);h[f>>3]=E;A=2;B=F;break}else if((r|0)==2){l=x==0.0;if(y==0.0&l){if(s!=0.0|u<0.0){a[1960]=1}h[f>>3]=u==0.0?1.0:0.0;A=2;B=0.0;break}F=+P(+y);E=+P(+x);do{if(l){L=F}else{if(F>E){n=E/F;L=F*+Q(+(n*n+1.0));break}else{n=F/E;L=E*+Q(+(n*n+1.0));break}}}while(0);n=+R(+L,+(+P(+u)));do{if(u<0.0){if(n!=0.0){M=1.0/n;break}else{a[1960]=1;M=n;break}}else{M=n}}while(0);if(l){N=y<0.0?3.141592653589793:0.0}else{N=+Y(+x,+y)}n=N*(-0.0-s);if(n<-706.893623549172){O=0.0}else{O=+Z(+n)}n=M*O;do{if(l){U=F;V=u*(y<0.0?3.141592653589793:0.0)}else{H=u*+Y(+x,+y);if(F>E){G=E/F;U=F*+Q(+(G*G+1.0));V=H;break}else{G=F/E;U=E*+Q(+(G*G+1.0));V=H;break}}}while(0);E=V+s*+_(+U);F=n*+S(+E);H=n*+T(+E);h[f>>3]=F;A=2;B=H;break}else{uf(-1,77088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);r=c[6354]|0;if((r|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{w=r+1|0;c[6354]=w;c[14296+(w*24&-1)>>2]=A;h[14304+(w*24&-1)>>3]=+h[f>>3];h[14312+(w*24&-1)>>3]=B;i=b;return}}function g4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=d-1|0;c[6354]=e;f=14296+(d*24&-1)|0;g=f|0;j=c[g>>2]|0;k=f+4|0;f=c[k>>2]|0;l=14304+(d*24&-1)|0;m=c[l>>2]|0;n=m;if((j|0)==3){uz(n,b);o=(n|0)==(c[b>>2]|0);uu(n);if(o){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{uf(-1,217536,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}if((j|0)!=1){uf(-1,217536,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((m|0)>1){j=m;p=1.0;while(1){q=p*+(j|0);m=j-1|0;if((m|0)>1){j=m;p=q}else{r=q;break}}}else{r=1.0}if((e|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{c[6354]=d;c[g>>2]=2;c[k>>2]=f;h[l>>3]=r;h[14312+(d*24&-1)>>3]=0.0;i=a;return}}function g5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;a=i;i=i+16|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=d-1|0;c[6354]=e;f=c[14296+(d*24&-1)>>2]|0;g=c[14304+(d*24&-1)>>2]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-2;d=c[14296+(e*24&-1)>>2]|0;h=c[14304+(e*24&-1)>>2]|0;if((f|0)==1){e=ut(32)|0;do{if((e|0)==0){gk();j=ut(32)|0;if((j|0)!=0){k=j;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=211880,v)|0)}else{k=e}}while(0);e=k;a0(k|0,32,21e4,(v=i,i=i+8|0,c[v>>2]=g,v)|0);l=3;m=e}else{l=f;m=g}if(!((d|0)==3&(l|0)==3)){uf(-1,202496,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}l=m;m=uc(h,l)|0;uu(h);uu(l);l=c[6354]|0;if((l|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}h=l+1|0;c[6354]=h;l=14296+(h*24&-1)|0;d=l;c[l>>2]=3;c[d+4>>2]=n;c[14304+(h*24&-1)>>2]=m;h=d+12|0;d=b|0;c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];if((m|0)==0){uu(m);i=a;return}d=bP(m|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=d;uu(m);i=a;return}function g6(a){a=a|0;var b=0,d=0,e=0,f=0;a=i;i=i+16|0;b=c[6354]|0;if((b|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}d=b-1|0;c[6354]=d;e=c[14304+(b*24&-1)>>2]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=c[14296+(b*24&-1)>>2]|0;c[6354]=b-2;b=c[14304+(d*24&-1)>>2]|0;if(!((c[14296+(d*24&-1)>>2]|0)==3&(f|0)==3)){uf(-1,202496,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=aY(b|0,e|0)|0;uu(b);uu(e);e=c[6354]|0;if((e|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{b=e+1|0;c[6354]=b;e=14296+(b*24&-1)|0;c[e>>2]=1;c[14304+(b*24&-1)>>2]=(f|0)==0&1;f=e+12|0;e=a|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];i=a;return}}function g7(a){a=a|0;var b=0,d=0,e=0,f=0;a=i;i=i+16|0;b=c[6354]|0;if((b|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}d=b-1|0;c[6354]=d;e=c[14304+(b*24&-1)>>2]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=c[14296+(b*24&-1)>>2]|0;c[6354]=b-2;b=c[14304+(d*24&-1)>>2]|0;if(!((c[14296+(d*24&-1)>>2]|0)==3&(f|0)==3)){uf(-1,202496,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=aY(b|0,e|0)|0;uu(b);uu(e);e=c[6354]|0;if((e|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{b=e+1|0;c[6354]=b;e=14296+(b*24&-1)|0;c[e>>2]=1;c[14304+(b*24&-1)>>2]=(f|0)!=0&1;f=e+12|0;e=a|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];i=a;return}}function g8(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;b=i;i=i+16|0;d=b|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=e-1;f=c[14304+(e*24&-1)>>2]|0;if((c[14296+(e*24&-1)>>2]|0)!=3){uf(-1,197056,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}do{if((c[11252]|0)==15){e=a[f]|0;if(e<<24>>24==0){g=0;break}else{h=0;j=0;k=e}while(1){e=((k&-64)<<24>>24!=-128&1)+j|0;l=h+1|0;m=a[f+l|0]|0;if(m<<24>>24==0){g=e;break}else{h=l;j=e;k=m}}}else{g=uA(f|0)|0}}while(0);uu(f);f=c[6354]|0;if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{k=f+1|0;c[6354]=k;f=14296+(k*24&-1)|0;c[f>>2]=1;c[14304+(k*24&-1)>>2]=g;g=f+12|0;f=d|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];i=b;return}}function g9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;a=i;i=i+16|0;b=c[6354]|0;if((b|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}d=b-1|0;c[6354]=d;e=c[14304+(b*24&-1)>>2]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=c[14296+(b*24&-1)>>2]|0;c[6354]=b-2;b=c[14304+(d*24&-1)>>2]|0;if((f|0)!=3){uf(-1,185704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((c[14296+(d*24&-1)>>2]|0)!=3){uf(-1,185704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}d=aQ(b|0,e|0)|0;if((d|0)==0){g=0}else{g=(1-b|0)+d|0}uu(e);uu(b);b=c[6354]|0;if((b|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{e=b+1|0;c[6354]=e;b=14296+(e*24&-1)|0;c[b>>2]=1;c[14304+(e*24&-1)>>2]=g;g=b+12|0;b=a|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];i=a;return}}function ha(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;b=i;i=i+16|0;d=b|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e-1|0;c[6354]=f;g=c[14296+(e*24&-1)>>2]|0;h=c[14304+(e*24&-1)>>2]|0;if((f|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}j=e-2|0;c[6354]=j;k=c[14304+(f*24&-1)>>2]|0;if((j|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}l=c[14296+(f*24&-1)>>2]|0;f=e-3|0;c[6354]=f;m=c[14304+(j*24&-1)>>2]|0;if(!((g|0)==1&(l|0)==1)){uf(-1,180448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((c[14296+(j*24&-1)>>2]|0)!=3){uf(-1,176264,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}j=(c[11252]|0)==15;do{if(j){l=a[m]|0;if(l<<24>>24==0){n=0;break}else{o=0;p=0;q=l}while(1){l=((q&-64)<<24>>24!=-128&1)+p|0;g=o+1|0;r=a[m+g|0]|0;if(r<<24>>24==0){n=l;break}else{o=g;p=l;q=r}}}else{n=uA(m|0)|0}}while(0);do{if(h>>>0>n>>>0){if(!j){s=uA(m|0)|0;break}q=a[m]|0;if(q<<24>>24==0){s=0;break}else{t=0;u=0;w=q}while(1){q=((w&-64)<<24>>24!=-128&1)+u|0;p=t+1|0;o=a[m+p|0]|0;if(o<<24>>24==0){s=q;break}else{t=p;u=q;w=o}}}else{s=h}}while(0);h=(k|0)<1?1:k;if((h|0)>(s|0)){if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e-2|0;c[6354]=f;e=14296+(f*24&-1)|0;c[e>>2]=3;c[14304+(f*24&-1)>>2]=179864;f=e+12|0;e=d|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];e=bP(179864)|0;c[14304+((c[6354]|0)*24&-1)>>2]=e;uu(m);i=b;return}e=h-1|0;L406:do{if(j){if((e|0)<1){x=m}else{h=a[m]|0;L411:do{if(h<<24>>24==0){y=m}else{f=0;k=0;w=m;u=h;while(1){if((u&-64)<<24>>24==-128){z=k}else{if((k|0)==(e|0)){y=w;break L411}else{z=k+1|0}}t=f+1|0;n=m+t|0;o=a[n]|0;if(o<<24>>24==0){y=n;break}else{f=t;k=z;w=n;u=o}}}}while(0);if(j){x=y}else{A=y;B=297;break}}if((s|0)<1){C=m;D=x;break}h=a[m]|0;if(h<<24>>24==0){C=m;D=x;break}else{E=0;F=0;G=m;H=h}while(1){if((H&-64)<<24>>24==-128){I=F}else{if((F|0)==(s|0)){C=G;D=x;break L406}else{I=F+1|0}}h=E+1|0;u=m+h|0;w=a[u]|0;if(w<<24>>24==0){C=u;D=x;break}else{E=h;F=I;G=u;H=w}}}else{A=m+e|0;B=297}}while(0);if((B|0)==297){C=m+s|0;D=A}a[C]=0;C=c[6354]|0;if((C|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}A=C+1|0;c[6354]=A;C=14296+(A*24&-1)|0;s=C;c[C>>2]=3;c[s+4>>2]=J;c[14304+(A*24&-1)>>2]=D;A=s+12|0;s=d|0;c[A>>2]=c[s>>2];c[A+4>>2]=c[s+4>>2];c[A+8>>2]=c[s+8>>2];if((D|0)==0){uu(m);i=b;return}s=bP(D|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=s;uu(m);i=b;return}function hb(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0;b=i;i=i+16|0;d=b|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e-1|0;c[6354]=f;g=c[14304+(e*24&-1)>>2]|0;if((c[14296+(e*24&-1)>>2]|0)!=1){uf(-1,168392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((f|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=e-2;e=c[14304+(f*24&-1)>>2]|0;if((c[14296+(f*24&-1)>>2]|0)==3){h=e;j=0;k=179864}else{uf(-1,164176,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}while(1){f=a[h]|0;if(f<<24>>24==0){l=j;m=k;break}else{n=h;o=f}while(1){f=n+1|0;if((aM(o<<24>>24|0)|0)==0){break}n=f;o=a[f]|0}f=a[n]|0;if(f<<24>>24==0){l=j;m=k;break}p=j+1|0;q=(p|0)==(g|0);if(q){r=n}else{r=k}s=n;t=f;while(1){if(t<<24>>24==0){break}f=s+1|0;if((aM(t<<24>>24|0)|0)!=0){break}s=f;t=a[f]|0}if(q){u=325;break}else{h=s;j=p;k=r}}if((u|0)==325){a[s]=0;l=g;m=r}r=(g|0)<0?l:m;m=g>>31&-2;g=c[6354]|0;if((g|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}l=g+1|0;c[6354]=l;g=14296+(l*24&-1)|0;s=g;c[g>>2]=m+3;c[s+4>>2]=w;c[14304+(l*24&-1)>>2]=r;l=s+12|0;s=d|0;c[l>>2]=c[s>>2];c[l+4>>2]=c[s+4>>2];c[l+8>>2]=c[s+8>>2];if((m|0)!=0|(r|0)==0){uu(e);i=b;return}m=bP(r|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=m;uu(e);i=b;return}function hc(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0.0,Z=0.0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0;b=i;i=i+256|0;d=b|0;e=b+240|0;f=c[6354]|0;if((f|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=f-1;g=c[14304+(f*24&-1)>>2]|0;if((g|0)>10){f=g*24&-1;j=ut(f)|0;do{if((j|0)==0){gk();k=ut(f)|0;if((k|0)!=0){l=k;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=154800,v)|0)}else{l=j}}while(0);m=l}else{m=d|0}l=(g|0)>0;L484:do{if(l){j=0;f=c[6354]|0;while(1){if((f|0)<0){break}k=f-1|0;c[6354]=k;n=m+(j*24&-1)|0;o=14296+(f*24&-1)|0;c[n>>2]=c[o>>2];c[n+4>>2]=c[o+4>>2];c[n+8>>2]=c[o+8>>2];c[n+12>>2]=c[o+12>>2];c[n+16>>2]=c[o+16>>2];c[n+20>>2]=c[o+20>>2];o=j+1|0;if((o|0)<(g|0)){j=o;f=k}else{break L484}}uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);f=g-1|0;if((c[m+(f*24&-1)>>2]|0)!=3){uf(-1,151464,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}j=m+(f*24&-1)+8|0;k=(uA(c[j>>2]|0)|0)+80|0;o=ut(k)|0;do{if((o|0)==0){gk();n=ut(k)|0;if((n|0)!=0){p=n;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=149624,v)|0)}else{p=o}}while(0);o=c[j>>2]|0;j=bk(o|0,191528)|0;uF(p|0,o|0,j|0);n=o+j|0;o=p+j|0;q=c[8270]|0;do{if((q|0)!=0){if((aY(q|0,139696)|0)==0){break}bA(4,q|0)}}while(0);L502:do{if((f|0)>0){q=o;r=n;s=j;t=k;u=p;w=g-2|0;L504:while(1){x=m+(w*24&-1)|0;y=q;z=t;A=u;while(1){B=y;C=r;D=a[r]|0;L508:while(1){if(D<<24>>24==0){E=B;F=A;break L502}G=C+1|0;H=a[G]|0;if(H<<24>>24==0){I=B;J=C;K=z;L=A;M=D;N=393;break L502}if((a_(C|0,143664,2)|0)==0){O=G;P=B;Q=H}else{break}while(1){H=O+1|0;R=P+1|0;a[P]=Q;S=a[H]|0;if((S<<24>>24|0)==0|(S<<24>>24|0)==37){B=R;C=H;D=S;continue L508}else{O=H;P=R;Q=S}}}T=C+((bk(G|0,191528)|0)+1|0)|0;D=a[T]|0;a[T]=0;if((a[C]|0)!=37){N=363;break L504}S=bk(C|0,20296)|0;R=bk(C|0,20304)|0;H=bk(C|0,20320)|0;U=bk(C|0,20328)|0;if((U|0)<(H|0)&(U|0)<(R|0)&(U|0)<(S|0)){N=365;break L504}do{if((S|0)<(R|0)&(S|0)<(H|0)){if((c[x>>2]|0)!=3){N=372;break L504}b0();U=(z-B|0)+A|0;V=c[m+(w*24&-1)+8>>2]|0;a0(B|0,U|0,C|0,(v=i,i=i+8|0,c[v>>2]=V,v)|0)}else{if((R|0)<(H|0)){W=2}else{if(H>>>0<(uA(C|0)|0)>>>0){W=1}else{N=369;break L504}}V=x|0;if((c[V>>2]|0)==3){N=374;break L504}b0();if((W|0)==2){U=(z-B|0)+A|0;X=c[V>>2]|0;if((X|0)==1){Y=+(c[m+(w*24&-1)+8>>2]|0)}else if((X|0)==2){Y=+h[m+(w*24&-1)+8>>3]}else if((X|0)==3){Y=+uz(c[m+(w*24&-1)+8>>2]|0,0)}else{N=386;break L504}a0(B|0,U|0,C|0,(v=i,i=i+8|0,h[v>>3]=Y,v)|0);break}else if((W|0)==1){U=(z-B|0)+A|0;X=c[V>>2]|0;if((X|0)==1){Z=+(c[m+(w*24&-1)+8>>2]|0)}else if((X|0)==2){Z=+h[m+(w*24&-1)+8>>3]}else if((X|0)==3){Z=+uz(c[m+(w*24&-1)+8>>2]|0,0)}else{N=380;break L504}a0(B|0,U|0,C|0,(v=i,i=i+8|0,c[v>>2]=~~Z,v)|0);break}else{N=388;break L504}}}while(0);a[T]=D;_=uA(A|0)|0;if(_>>>0<(z-2|0)>>>0){break}C=z<<1;B=db(A,C,149624)|0;y=B+s|0;z=C;A=B}y=A+_|0;if((w|0)>0){q=y;r=T;s=_;t=z;u=A;w=w-1|0}else{$=y;aa=T;ab=z;ac=A;N=392;break L502}}if((N|0)==369){uf(-1,106184,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((N|0)==372){uf(-1,142064,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((N|0)==386){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((N|0)==388){uf(-1,138488,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((N|0)==363){uf(-1,108e3,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((N|0)==365){uf(-1,107040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((N|0)==374){uf(-1,140392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((N|0)==380){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}else{$=o;aa=n;ab=k;ac=p;N=392}}while(0);if((N|0)==392){I=$;J=aa;K=ab;L=ac;M=a[aa]|0;N=393}L552:do{if((N|0)==393){if(M<<24>>24==0){E=I;F=L;break}aa=I;ac=J;ab=(K-I|0)+L|0;$=M;while(1){p=ab-1|0;if((p|0)<=0){E=aa;F=L;break L552}if($<<24>>24==37){k=ac+1|0;n=(a[k]|0)==37?k:ac;ad=n;ae=a[n]|0}else{ad=ac;ae=$}n=ad+1|0;k=aa+1|0;a[aa]=ae;o=a[n]|0;if(o<<24>>24==0){E=k;F=L;break}else{aa=k;ac=n;ab=p;$=o}}}}while(0);a[E]=0;E=c[6354]|0;if((E|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}L=E+1|0;c[6354]=L;E=14296+(L*24&-1)|0;ae=E;c[E>>2]=3;c[ae+4>>2]=af;c[14304+(L*24&-1)>>2]=F;L=ae+12|0;ae=e|0;c[L>>2]=c[ae>>2];c[L+4>>2]=c[ae+4>>2];c[L+8>>2]=c[ae+8>>2];if((F|0)!=0){ae=bP(F|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=ae}uu(F);if(l){l=0;do{F=m+(l*24&-1)|0;if((c[F>>2]|0)==3){uu(c[m+(l*24&-1)+8>>2]|0);c[F>>2]=1}l=l+1|0;}while((l|0)<(g|0))}if((m|0)!=(d|0)){uu(m)}m=c[8270]|0;if((m|0)==0){i=b;return}if((aY(m|0,139696)|0)==0){i=b;return}bA(4,139696);i=b;return}function hd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0,l=0,m=0,n=0,o=0.0;a=i;i=i+16|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=d-1|0;c[6354]=e;f=c[14296+(d*24&-1)>>2]|0;g=14304+(d*24&-1)|0;j=+h[g>>3];k=c[g>>2]|0;g=k;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-2;d=c[14304+(e*24&-1)>>2]|0;if((c[14296+(e*24&-1)>>2]|0)!=3){uf(-1,136912,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=(uA(d|0)|0)+80|0;l=ut(e)|0;do{if((l|0)==0){gk();m=ut(e)|0;if((m|0)!=0){n=m;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=134920,v)|0)}else{n=l}}while(0);if((f|0)==1){o=+(k|0)}else if((f|0)==3){o=+uz(g,0)}else if((f|0)==2){o=j}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}ud(n,e,d,10.0,o);e=c[6354]|0;if((e|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e+1|0;c[6354]=f;e=14296+(f*24&-1)|0;c[e>>2]=3;c[14304+(f*24&-1)>>2]=n;f=e+12|0;e=b|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];if((n|0)==0){uu(d);uu(n);i=a;return}e=bP(n|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=e;uu(d);uu(n);i=a;return}function he(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0.0;b=i;i=i+56|0;d=b|0;e=b+48|0;f=c[6354]|0;if((f|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=f-1|0;c[6354]=g;j=14296+(f*24&-1)|0;k=c[j>>2]|0;l=c[j+4>>2]|0;j=14304+(f*24&-1)|0;m=+h[j>>3];n=c[j>>2]|0;h[e>>3]=m;o=+h[14312+(f*24&-1)>>3];j=n;n=j;if((g|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=f-2;f=c[14304+(g*24&-1)>>2]|0;if((c[14296+(g*24&-1)>>2]|0)!=3){uf(-1,133408,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=uA(f|0)|0;p=g+1|0;q=g+2|0;g=ut(q)|0;do{if((g|0)==0){gk();r=ut(q)|0;if((r|0)!=0){s=r;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=132008,v)|0)}else{s=g}}while(0);uF(s|0,f|0,p|0);ck(s|0,73808,p|0);g=(p<<1)+80|0;p=ut(g)|0;do{if((p|0)==0){gk();q=ut(g)|0;if((q|0)!=0){t=q;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=129704,v)|0)}else{t=p}}while(0);if((k|0)==1){u=+(j|0)}else if((k|0)==3){u=+uz(n,0)}else if((k|0)==2){u=m}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}t3(d,u);j=t4(t,g,s,d,u- +O(+u))|0;if(!((j|0)!=0&(j|0)<(g|0))){uf(-1,128368,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=t+(j-1|0)|0;if((a[g]|0)!=32){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=125936,v)|0)}a[g]=0;if((k|0)==3){uu(n)}uu(f);uu(s);c[e>>2]=t;s=c[6354]|0;if((s|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=s+1|0;c[6354]=f;s=14296+(f*24&-1)|0;c[s>>2]=3;c[s+4>>2]=l;l=c[e>>2]|0;h[14304+(f*24&-1)>>3]=+h[e>>3];h[14312+(f*24&-1)>>3]=o;f=l;if((f|0)==0){uu(t);i=b;return}l=bP(f|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=l;uu(t);i=b;return}function hf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0;a=i;i=i+56|0;b=a|0;d=a+48|0;h[d>>3]=0.0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e-1|0;c[6354]=f;g=14296+(e*24&-1)|0;j=c[g+4>>2]|0;k=c[14304+(e*24&-1)>>2]|0;l=k;if((f|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}m=c[g>>2]|0;c[6354]=e-2;e=c[14304+(f*24&-1)>>2]|0;if(!((c[14296+(f*24&-1)>>2]|0)==3&(m|0)==3)){uf(-1,124672,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((e|0)==0|(k|0)==0){uf(-1,123472,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}t1(l,e,b,d);n=+t2(b);o=+h[d>>3];uu(l);uu(e);e=c[6354]|0;if((e|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{l=e+1|0;c[6354]=l;e=14296+(l*24&-1)|0;c[e>>2]=2;c[e+4>>2]=j;h[14304+(l*24&-1)>>3]=n+o;h[14312+(l*24&-1)>>3]=0.0;i=a;return}}function hg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0;a=i;i=i+16|0;b=a|0;d=a+8|0;bV(d|0,0);e=d|0;f=~~(+(c[e>>2]|0)+-946684800.0);c[e>>2]=f;g=+(c[d+4>>2]|0)/1.0e6+ +(f|0);f=c[6354]|0;if((f|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}d=f-1|0;c[6354]=d;e=14296+(f*24&-1)|0;j=e|0;k=c[j>>2]|0;l=e+4|0;e=c[l>>2]|0;m=14304+(f*24&-1)|0;n=+h[m>>3];o=c[m>>2]|0;h[b>>3]=n;p=14312+(f*24&-1)|0;q=+h[p>>3];r=o;o=r;if((k|0)==3){if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=f;c[j>>2]=3;c[l>>2]=e;h[m>>3]=n;h[p>>3]=q;if((r|0)==0){s=f}else{r=bP(o|0)|0;o=c[6354]|0;c[14304+(o*24&-1)>>2]=r;s=o}if((s|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}o=s+1|0;c[6354]=o;s=14296+(o*24&-1)|0;c[s>>2]=2;c[s+4>>2]=t;h[14304+(o*24&-1)>>3]=g;h[14312+(o*24&-1)>>3]=0.0;he(0);i=a;return}else if((k|0)==2){h[b>>3]=g;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=f;c[j>>2]=2;c[l>>2]=e;h[m>>3]=g;h[p>>3]=0.0;i=a;return}else if((k|0)==1){c[b>>2]=~~g;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=f;c[j>>2]=1;c[l>>2]=e;h[m>>3]=+h[b>>3];h[p>>3]=q;i=a;return}else{uf(-1,122096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function hh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;b=i;i=i+24|0;d=b|0;e=b+16|0;f=c[6354]|0;if((f|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=f-1;g=c[14304+(f*24&-1)>>2]|0;if((c[14296+(f*24&-1)>>2]|0)!=3){uf(-1,120384,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=eo(g,e)|0;h=e6(119096)|0;if((h|0)!=0){a[h+8|0]=0;c[h+16>>2]=1;c[h+24>>2]=f}f=c[e>>2]|0;e=uA(f|0)|0;do{if((e|0)>0){h=f+(e-1|0)|0;if((a[h]|0)!=10){break}a[h]=0}}while(0);e=c[6354]|0;if((e|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}h=e+1|0;c[6354]=h;e=14296+(h*24&-1)|0;c[e>>2]=3;c[14304+(h*24&-1)>>2]=f;h=e+12|0;e=d|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];if((f|0)==0){uu(f);uu(g);i=b;return}e=bP(f|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=e;uu(f);uu(g);i=b;return}function hi(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;b=i;i=i+16|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=d-1|0;c[6354]=e;f=14296+(d*24&-1)|0;g=f;h=c[f>>2]|0;f=c[g+4>>2]|0;j=c[14304+(d*24&-1)>>2]|0;k=g+12|0;g=b|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-2;d=c[14304+(e*24&-1)>>2]|0;if((c[14296+(e*24&-1)>>2]|0)!=3){uf(-1,111072,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((a_(d|0,167320,6)|0)==0){uf(-1,114320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((a_(d|0,126208,6)|0)==0){uf(-1,114320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=e6(d)|0;uu(d);d=e+8|0;k=e+16|0;do{if((a[d]&1)==0){if((c[k>>2]|0)!=3){break}uu(c[e+24>>2]|0);c[k>>2]=1}}while(0);c[k>>2]=h;k=e;c[k+20>>2]=f;c[e+24>>2]=j;e=k+28|0;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];a[d]=0;d=c[6354]|0;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=d+1|0;c[6354]=e;d=14296+(e*24&-1)|0;k=d;c[d>>2]=h;c[k+4>>2]=f;c[14304+(e*24&-1)>>2]=j;e=k+12|0;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];if((h|0)!=3|(j|0)==0){i=b;return}h=bP(j|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=h;i=b;return}function hj(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0.0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0.0;b=i;i=i+24|0;d=b+16|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=c[10810]|0;g=e-1|0;c[6354]=g;j=14296+(e*24&-1)|0;k=j;l=j|0;j=c[l>>2]|0;m=k+4|0;n=c[m>>2]|0;o=14304+(e*24&-1)|0;p=c[o>>2]|0;q=k+12|0;k=b|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];if((j|0)!=3){if((g|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=e;c[l>>2]=j;c[m>>2]=n;c[o>>2]=p;c[q>>2]=c[k>>2];c[q+4>>2]=c[k+4>>2];c[q+8>>2]=c[k+8>>2];i=b;return}L752:do{if((f|0)==0){r=0.0;s=0;t=548}else{k=f;while(1){if((aY(c[k+4>>2]|0,p|0)|0)==0){break}q=c[k>>2]|0;if((q|0)==0){r=0.0;s=0;t=548;break L752}else{k=q}}q=c[k+16>>2]|0;o=c[k+20>>2]|0;n=k+24|0;m=c[n>>2]|0;h[d>>3]=+h[n>>3];u=+h[k+32>>3];n=m;m=n;if((a[k+8|0]&1)!=0){r=u;s=o;t=548;break}if((q|0)==3){if((n|0)==0){w=0}else{w=bP(m|0)|0}c[d>>2]=w;x=3}else{x=q}uu(p);if((k|0)==0){y=o;z=u;t=550}else{A=x;B=o;C=u}}}while(0);if((t|0)==548){uu(p);y=s;z=r;t=550}if((t|0)==550){h[d>>3]=+uz(133568,0);A=2;B=y;C=z}y=c[6354]|0;if((y|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}t=y+1|0;c[6354]=t;y=14296+(t*24&-1)|0;c[y>>2]=A;c[y+4>>2]=B;B=c[d>>2]|0;h[14304+(t*24&-1)>>3]=+h[d>>3];h[14312+(t*24&-1)>>3]=C;t=B;if((A|0)!=3|(t|0)==0){i=b;return}A=bP(t|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=A;i=b;return}function hk(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0,A=0.0,B=0.0,C=0,D=0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0.0,N=0.0,O=0,P=0,Q=0,R=0,S=0,T=0.0,U=0,V=0.0,W=0,X=0.0,Y=0.0,$=0.0,aa=0.0,ab=0.0,ac=0.0,ad=0.0,ae=0.0,af=0,ag=0.0,ah=0.0,ai=0.0,aj=0.0;d=b+320|0;e=b+300|0;f=c[e>>2]|0;g=0;i=0;while(1){L779:do{if((i|0)<(f|0)){j=c[d>>2]|0;k=i;while(1){if((c[j+(k<<6)>>2]|0)!=2){l=k;break L779}m=k+1|0;if((m|0)<(f|0)){k=m}else{l=m;break}}}else{l=i}}while(0);k=0;while(1){n=k+l|0;if((n|0)>=(f|0)){break}if((c[(c[d>>2]|0)+(n<<6)>>2]|0)==2){break}else{k=k+1|0}}if((k|0)>0){g=g+1|0;i=n}else{break}}n=b+284|0;if((c[n>>2]|0)==9){if((g|0)>0){o=0;p=0;q=0.0}else{return}while(1){L796:do{if((o|0)<(f|0)){i=c[d>>2]|0;l=o;while(1){if((c[i+(l<<6)>>2]|0)!=2){r=l;break L796}j=l+1|0;if((j|0)<(f|0)){l=j}else{r=j;break}}}else{r=o}}while(0);k=0;while(1){s=k+r|0;if((s|0)>=(f|0)){break}if((c[(c[d>>2]|0)+(s<<6)>>2]|0)==2){break}else{k=k+1|0}}if((k|0)>0){l=c[d>>2]|0;i=r;t=q;while(1){if((c[l+(i<<6)>>2]|0)==2){u=t}else{u=t+ +h[l+(i<<6)+16>>3]}j=i+1|0;if((j|0)<(s|0)){i=j;t=u}else{v=u;break}}}else{v=q}i=p+1|0;if((i|0)<(g|0)){o=(r+1|0)+k|0;p=i;q=v}else{w=v;break}}}else{w=0.0}if((g|0)<=0){return}p=b+304|0;r=b+308|0;b=0;o=1;s=f;while(1){L820:do{if((b|0)<(s|0)){f=c[d>>2]|0;i=b;while(1){if((c[f+(i<<6)>>2]|0)!=2){x=i;break L820}l=i+1|0;if((l|0)<(s|0)){i=l}else{x=l;break}}}else{x=b}}while(0);k=0;while(1){y=k+x|0;if((y|0)>=(s|0)){break}if((c[(c[d>>2]|0)+(y<<6)>>2]|0)==2){break}else{k=k+1|0}}i=c[n>>2]|0;do{if((i|0)==7){if((k|0)>0){z=x;A=0.0}else{break}while(1){f=c[d>>2]|0;if((c[f+(z<<6)>>2]|0)==2){B=A}else{l=f+(z<<6)+16|0;v=A+ +h[l>>3];h[l>>3]=v;B=v}l=z+1|0;if((l|0)<(y|0)){z=l;A=B}else{break}}C=c[n>>2]|0;D=598}else{C=i;D=598}}while(0);do{if((D|0)==598){D=0;if((C|0)==9&(k|0)>0){E=x;F=0.0}else{break}while(1){i=c[d>>2]|0;if((c[i+(E<<6)>>2]|0)==2){G=F}else{l=i+(E<<6)+16|0;v=F+ +h[l>>3];h[l>>3]=v/w;G=v}l=E+1|0;if((l|0)<(y|0)){E=l;F=G}else{break}}}}while(0);l=c[p>>2]|0;i=c[r>>2]|0;f=64788+(l*688&-1)|0;j=64664+(l*688&-1)|0;v=+h[j>>3];if((a[f]&1)==0){m=64672+(l*688&-1)|0;H=+h[m>>3];I=v;J=m}else{q=+_(+v);v=+h[64800+(l*688&-1)>>3];m=64672+(l*688&-1)|0;H=+_(+(+h[m>>3]))/v;I=q/v;J=m}m=64788+(i*688&-1)|0;K=64664+(i*688&-1)|0;v=+h[K>>3];if((a[m]&1)==0){L=64672+(i*688&-1)|0;M=+h[L>>3];N=v;O=L}else{q=+_(+v);v=+h[64800+(i*688&-1)>>3];L=64672+(i*688&-1)|0;M=+_(+(+h[L>>3]))/v;N=q/v;O=L}L=c[d>>2]|0;do{if((k|0)>0){P=64648+(l*688&-1)|0;Q=64648+(i*688&-1)|0;v=M;q=N;u=H;t=I;R=0;while(1){S=R+x|0;T=+h[L+(S<<6)+8>>3];U=L+(S<<6)+16|0;V=+h[U>>3];W=L+(S<<6)|0;c[W>>2]=0;if(T<t){if((c[P>>2]&1|0)==0){X=t;D=614}else{Y=T;D=612}}else{Y=t;D=612}L860:do{if((D|0)==612){D=0;if(T>u){if((c[P>>2]&2|0)==0){X=Y;D=614;break}else{$=T}}else{$=u}h[U>>3]=V;do{if(V<q){if((c[Q>>2]&1|0)!=0){aa=V;break}c[W>>2]=1;ab=q;ac=v;ad=$;ae=Y;break L860}else{aa=q}}while(0);if(V<=v){ab=aa;ac=v;ad=$;ae=Y;break}if((c[Q>>2]&2|0)!=0){ab=aa;ac=V;ad=$;ae=Y;break}c[W>>2]=1;ab=aa;ac=v;ad=$;ae=Y}}while(0);if((D|0)==614){D=0;c[W>>2]=1;h[U>>3]=V;ab=q;ac=v;ad=u;ae=X}h[L+(S<<6)+56>>3]=T;h[L+(S<<6)+48>>3]=T;h[L+(S<<6)+40>>3]=V;h[L+(S<<6)+32>>3]=V;h[L+(S<<6)+24>>3]=-1.0;af=R+1|0;if((af|0)<(k|0)){v=ac;q=ab;u=ad;t=ae;R=af}else{break}}if(ad>H){if((a[f]&1)==0){ag=ad}else{ag=+Z(+(ad*+h[64800+(l*688&-1)>>3]))}h[J>>3]=ag}if(ae<I){if((a[f]&1)==0){ah=ae}else{ah=+Z(+(ae*+h[64800+(l*688&-1)>>3]))}h[j>>3]=ah}if(ac>M){if((a[m]&1)==0){ai=ac}else{ai=+Z(+(ac*+h[64800+(i*688&-1)>>3]))}h[O>>3]=ai}if(ab>=N){break}if((a[m]&1)==0){aj=ab}else{aj=+Z(+(ab*+h[64800+(i*688&-1)>>3]))}h[K>>3]=aj}}while(0);if((o|0)>=(g|0)){break}b=(x+1|0)+k|0;o=o+1|0;s=c[e>>2]|0}return}function hl(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0.0,$=0.0,ab=0,ac=0,ad=0.0,ae=0,af=0,ag=0.0,ah=0,ai=0.0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0.0,aq=0.0,ar=0,as=0.0,at=0.0,au=0.0,av=0.0,aw=0.0,ax=0.0,ay=0,az=0.0,aA=0.0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0.0,aJ=0.0,aK=0.0,aL=0.0,aM=0,aN=0.0,aO=0.0,aP=0.0,aQ=0.0,aR=0.0,aS=0.0,aT=0.0,aU=0.0,aV=0.0,aW=0.0,aX=0.0,aY=0.0,aZ=0.0,a_=0.0,a$=0.0,a0=0.0,a1=0.0,a2=0.0,a3=0.0,a4=0.0,a5=0.0,a6=0.0,a7=0.0,a8=0.0,a9=0.0,ba=0.0,bb=0.0,bc=0.0,bd=0.0,be=0.0,bf=0.0,bg=0.0,bh=0.0,bi=0.0,bj=0.0,bk=0.0,bl=0.0,bm=0.0,bn=0.0,bo=0.0,bp=0.0,bq=0.0,br=0,bs=0,bt=0,bu=0;d=i;e=b+320|0;f=b+300|0;g=c[f>>2]|0;j=0;k=0;while(1){L903:do{if((k|0)<(g|0)){l=c[e>>2]|0;m=k;while(1){if((c[l+(m<<6)>>2]|0)!=2){n=m;break L903}o=m+1|0;if((o|0)<(g|0)){m=o}else{n=o;break}}}else{n=k}}while(0);m=0;while(1){p=m+n|0;if((p|0)>=(g|0)){break}if((c[(c[e>>2]|0)+(p<<6)>>2]|0)==2){break}else{m=m+1|0}}if((m|0)>0){j=j+1|0;k=p}else{break}}p=aa(j<<6,(c[6352]|0)+1|0);k=ut(p)|0;do{if((k|0)==0){gk();g=ut(p)|0;if((g|0)!=0){q=g;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=215872,v)|0)}else{q=k}}while(0);k=q;if((j|0)<=0){r=c[e>>2]|0;s=r;uu(s);c[e>>2]=k;t=c[6352]|0;u=t+1|0;w=aa(u,j);x=b+296|0;c[x>>2]=w;y=w-1|0;c[f>>2]=y;i=d;return}q=b+284|0;p=b+304|0;g=b+308|0;n=0;l=0;L921:while(1){o=c[f>>2]|0;L923:do{if((n|0)<(o|0)){z=c[e>>2]|0;A=n;while(1){if((c[z+(A<<6)>>2]|0)!=2){B=A;break L923}C=A+1|0;if((C|0)<(o|0)){A=C}else{B=C;break}}}else{B=n}}while(0);m=0;while(1){D=m+B|0;if((D|0)>=(o|0)){break}if((c[(c[e>>2]|0)+(D<<6)>>2]|0)==2){break}else{m=m+1|0}}o=c[q>>2]|0;do{if((o|0)==1){c[200]=c[p>>2];c[144]=c[g>>2];A=m<<5;z=ut(A)|0;if((z|0)==0){gk();C=ut(A)|0;if((C|0)==0){E=727;break L921}else{F=C}}else{F=z}z=F;if((m|0)<4){E=729;break L921}C=c[e>>2]|0;A=0;while(1){if((A|0)>=(m|0)){break}if(+h[C+(A+B<<6)+24>>3]>0.0){A=A+1|0}else{E=733;break L921}}A=m-2|0;G=A*40&-1;H=ut(G)|0;if((H|0)==0){gk();I=ut(G)|0;if((I|0)==0){E=736;break L921}else{J=I}}else{J=H}H=J;I=A<<3;K=ut(I)|0;if((K|0)==0){gk();L=ut(I)|0;if((L|0)==0){E=739;break L921}else{M=L}}else{M=K}K=M;L=ut(I)|0;if((L|0)==0){gk();N=ut(I)|0;if((N|0)==0){E=742;break L921}else{O=N}}else{O=L}L=O;N=m-1|0;I=N<<3;P=ut(I)|0;if((P|0)==0){gk();S=ut(I)|0;if((S|0)==0){E=745;break L921}else{T=S}}else{T=P}P=T;S=m<<3;I=ut(S)|0;if((I|0)==0){gk();U=ut(S)|0;if((U|0)==0){E=748;break L921}else{V=U}}else{V=I}I=V;U=ut(S)|0;if((U|0)==0){gk();W=ut(S)|0;if((W|0)==0){E=751;break L921}else{X=W}}else{X=U}U=X;W=c[200]|0;S=64788+(W*688&-1)|0;Y=+h[C+(B<<6)+8>>3];if((a[S]&1)==0){$=Y}else{$=+Z(+(Y*+h[64800+(W*688&-1)>>3]))}h[I>>3]=$;ab=c[144]|0;ac=64788+(ab*688&-1)|0;Y=+h[C+(B<<6)+16>>3];if((a[ac]&1)==0){ad=Y}else{ad=+Z(+(Y*+h[64800+(ab*688&-1)>>3]))}h[U>>3]=ad;if((m|0)>1){ae=64800+(ab*688&-1)|0;ab=64800+(W*688&-1)|0;W=1;do{af=W+B|0;Y=+h[C+(af<<6)+8>>3];if((a[S]&1)==0){ag=Y}else{ag=+Z(+(Y*+h[ab>>3]))}ah=I+(W<<3)|0;h[ah>>3]=ag;Y=+h[C+(af<<6)+16>>3];if((a[ac]&1)==0){ai=Y}else{ai=+Z(+(Y*+h[ae>>3]))}h[U+(W<<3)>>3]=ai;af=W-1|0;h[P+(af<<3)>>3]=+h[ah>>3]- +h[I+(af<<3)>>3];W=W+1|0;}while((W|0)<(m|0))}W=m-3|0;if((W|0)>=0){I=m-4|0;ae=m-5|0;ac=0;while(1){ab=ac+2|0;S=ac+1|0;Y=+h[U+(S<<3)>>3];af=P+(S<<3)|0;ah=P+(ac<<3)|0;h[K+(ac<<3)>>3]=((+h[U+(ab<<3)>>3]-Y)/+h[af>>3]-(Y- +h[U+(ac<<3)>>3])/+h[ah>>3])*3.0;do{if((ac|0)<2){h[H+(ac*40&-1)>>3]=0.0;if((ac|0)<1){h[H+(ac*40&-1)+8>>3]=0.0;aj=C+(ac+B<<6)+24|0;ak=C+(S+B<<6)+24|0;break}else{al=C+(ac+B<<6)+24|0;am=P+(ac-1<<3)|0;E=770;break}}else{an=C+(ac+B<<6)+24|0;ao=P+(ac-1<<3)|0;h[H+(ac*40&-1)>>3]=6.0/+h[an>>3]/+h[ao>>3]/+h[ah>>3];al=an;am=ao;E=770}}while(0);if((E|0)==770){E=0;Y=+h[ah>>3];ap=1.0/Y;ao=C+(S+B<<6)+24|0;h[H+(ac*40&-1)+8>>3]=Y-6.0/+h[al>>3]/Y*(1.0/+h[am>>3]+ap)-6.0/+h[ao>>3]/Y*(ap+1.0/+h[af>>3]);aj=al;ak=ao}ap=+h[ah>>3];Y=+h[af>>3];aq=1.0/ap+1.0/Y;ao=C+(ab+B<<6)+24|0;h[H+(ac*40&-1)+16>>3]=(ap+Y)*2.0+6.0/+h[aj>>3]/ap/ap+aq*6.0/+h[ak>>3]*aq+6.0/+h[ao>>3]/Y/Y;if((ac|0)>(I|0)){h[H+(ac*40&-1)+24>>3]=0.0}else{Y=+h[af>>3];aq=1.0/Y;h[H+(ac*40&-1)+24>>3]=Y-6.0/+h[ak>>3]/Y*(1.0/+h[ah>>3]+aq)-6.0/+h[ao>>3]/Y*(aq+1.0/+h[P+(ab<<3)>>3])}if((ac|0)>(ae|0)){h[H+(ac*40&-1)+32>>3]=0.0}else{h[H+(ac*40&-1)+32>>3]=6.0/+h[ao>>3]/+h[af>>3]/+h[P+(ab<<3)>>3]}if((S|0)>(W|0)){break}else{ac=S}}}ac=G+40|0;ae=ut(ac)|0;if((ae|0)==0){gk();I=ut(ac)|0;if((I|0)==0){E=780;break L921}else{ar=I}}else{ar=ae}ae=ar;aq=+h[J+16>>3];I=ar;h[I>>3]=aq;if(aq==0.0){E=782;break L921}Y=+h[J+24>>3]/aq;h[ar+8>>3]=Y;ap=+h[J+32>>3]/aq;h[ar+16>>3]=ap;as=+h[J+48>>3];h[ar+64>>3]=as;at=+h[J+56>>3]-Y*as;h[ar+40>>3]=at;if(at==0.0){E=784;break L921}au=(+h[J+64>>3]-ap*as)/at;h[ar+48>>3]=au;h[ar+56>>3]=+h[J+72>>3]/at;if((A|0)>2){ac=2;at=Y;Y=ap;ap=au;while(1){ao=H+(ac*40&-1)|0;au=+h[H+(ac*40&-1)+8>>3]-at*+h[ao>>3];h[ae+(ac*40&-1)+24>>3]=au;as=+h[H+(ac*40&-1)+16>>3]-Y*+h[ao>>3]-ap*au;h[ae+(ac*40&-1)>>3]=as;if(as==0.0){E=787;break L921}av=+h[ae+((ac-1|0)*40&-1)+16>>3];aw=(+h[H+(ac*40&-1)+24>>3]-au*av)/as;h[ae+(ac*40&-1)+8>>3]=aw;h[ae+(ac*40&-1)+16>>3]=+h[H+(ac*40&-1)+32>>3]/as;ao=ac+1|0;if((ao|0)<(A|0)){ac=ao;at=ap;Y=av;ap=aw}else{break}}ax=+h[I>>3]}else{ax=aq}h[ar+32>>3]=0.0;ap=+h[K>>3]/ax;h[ar+72>>3]=ap;if((A|0)>1){ac=1;Y=0.0;at=ap;while(1){ap=(+h[K+(ac<<3)>>3]-Y*+h[H+(ac*40&-1)>>3]-at*+h[ae+(ac*40&-1)+24>>3])/+h[ae+(ac*40&-1)>>3];G=ac+1|0;h[ae+(G*40&-1)+32>>3]=ap;if((G|0)<(A|0)){ac=G;Y=at;at=ap}else{break}}}at=+h[ae+(A*40&-1)+32>>3];h[L+(W<<3)>>3]=at;ac=m-4|0;Y=+h[ae+(W*40&-1)+32>>3]-at*+h[ae+(ac*40&-1)+8>>3];h[L+(ac<<3)>>3]=Y;H=m-5|0;L1015:do{if((H|0)>-1){aq=+h[ae+(ac*40&-1)+32>>3]-Y*+h[ae+(H*40&-1)+8>>3]-at*+h[ae+(H*40&-1)+16>>3];h[L+(H<<3)>>3]=aq;if((H|0)<=0){break}K=m-6|0;ap=+h[ae+(H*40&-1)+32>>3]-aq*+h[ae+(K*40&-1)+8>>3]-Y*+h[ae+(K*40&-1)+16>>3];h[L+(K<<3)>>3]=ap;if((K|0)>0){ay=K;az=ap;aA=aq}else{break}while(1){K=ay-1|0;aq=+h[ae+(ay*40&-1)+32>>3]-az*+h[ae+(K*40&-1)+8>>3]-aA*+h[ae+(K*40&-1)+16>>3];h[L+(K<<3)>>3]=aq;if((K|0)<=0){break L1015}ap=+h[L+(ay<<3)>>3];ay=K;az=aq;aA=ap}}}while(0);uu(ar);ae=F+16|0;h[ae>>3]=0.0;H=(A|0)<1;if(!H){ac=1;do{h[z+(ac<<5)+16>>3]=+h[L+(ac-1<<3)>>3];ac=ac+1|0;}while((ac|0)<=(A|0))}h[z+(N<<5)+16>>3]=0.0;Y=+h[ae>>3];at=+h[F+48>>3];ac=F;h[ac>>3]=+h[U>>3]+2.0/+h[C+(B<<6)+24>>3]/+h[P>>3]*(Y-at);if(!H){L=1;ap=Y;aq=at;while(1){at=+h[P+(L-1<<3)>>3];aw=+h[P+(L<<3)>>3];W=L+1|0;av=+h[z+(W<<5)+16>>3];h[z+(L<<5)>>3]=+h[U+(L<<3)>>3]-2.0/+h[C+(L+B<<6)+24>>3]*(av/aw+(ap/at-aq*(1.0/at+1.0/aw)));if((W|0)>(A|0)){break}else{L=W;ap=aq;aq=av}}}h[z+(N<<5)>>3]=+h[U+(N<<3)>>3]-2.0/+h[C+(N+B<<6)+24>>3]/+h[P+(A<<3)>>3]*+h[z+(A<<5)+16>>3];if((A|0)>=0){L=0;aq=+h[ac>>3];ap=Y;while(1){H=L+1|0;av=+h[z+(H<<5)>>3];ae=P+(L<<3)|0;aw=+h[ae>>3];at=+h[z+(H<<5)+16>>3];h[z+(L<<5)+8>>3]=(av-aq)/aw-aw/3.0*(ap*2.0+at);h[z+(L<<5)+24>>3]=(at-ap)/3.0/+h[ae>>3];if((H|0)>(A|0)){break}else{L=H;aq=av;ap=at}}}uu(T);uu(O);uu(M);uu(J);uu(V);uu(X);ho(b,z,B,m,k+(aa((c[6352]|0)+1|0,l)<<6)|0);uu(F)}else if((o|0)==3){c[200]=c[p>>2];c[144]=c[g>>2];if((m|0)<3){E=667;break L921}L=c[e>>2]|0;A=m<<5;P=ut(A)|0;if((P|0)==0){gk();ac=ut(A)|0;if((ac|0)==0){E=670;break L921}else{aB=ac}}else{aB=P}P=aB;ac=m-2|0;A=ac*24&-1;N=ut(A)|0;if((N|0)==0){gk();C=ut(A)|0;if((C|0)==0){E=673;break L921}else{aC=C}}else{aC=N}N=aC;C=ac<<3;A=ut(C)|0;if((A|0)==0){gk();U=ut(C)|0;if((U|0)==0){E=676;break L921}else{aD=U}}else{aD=A}A=aD;U=ut(C)|0;if((U|0)==0){gk();H=ut(C)|0;if((H|0)==0){E=679;break L921}else{aE=H}}else{aE=U}U=aE;H=m-1|0;C=H<<3;ae=ut(C)|0;if((ae|0)==0){gk();W=ut(C)|0;if((W|0)==0){E=682;break L921}else{aF=W}}else{aF=ae}ae=aF;W=m<<3;C=ut(W)|0;if((C|0)==0){gk();S=ut(W)|0;if((S|0)==0){E=685;break L921}else{aG=S}}else{aG=C}C=aG;S=ut(W)|0;if((S|0)==0){gk();ab=ut(W)|0;if((ab|0)==0){E=688;break L921}else{aH=ab}}else{aH=S}S=aH;ab=c[200]|0;W=64788+(ab*688&-1)|0;ap=+h[L+(B<<6)+8>>3];if((a[W]&1)==0){aI=ap}else{aI=+Z(+(ap*+h[64800+(ab*688&-1)>>3]))}h[C>>3]=aI;af=c[144]|0;ah=64788+(af*688&-1)|0;ap=+h[L+(B<<6)+16>>3];if((a[ah]&1)==0){aJ=ap}else{aJ=+Z(+(ap*+h[64800+(af*688&-1)>>3]))}h[S>>3]=aJ;if((m|0)>1){K=64800+(af*688&-1)|0;af=64800+(ab*688&-1)|0;ab=1;do{I=ab+B|0;ap=+h[L+(I<<6)+8>>3];if((a[W]&1)==0){aK=ap}else{aK=+Z(+(ap*+h[af>>3]))}G=C+(ab<<3)|0;h[G>>3]=aK;ap=+h[L+(I<<6)+16>>3];if((a[ah]&1)==0){aL=ap}else{aL=+Z(+(ap*+h[K>>3]))}h[S+(ab<<3)>>3]=aL;I=ab-1|0;h[ae+(I<<3)>>3]=+h[G>>3]- +h[C+(I<<3)>>3];ab=ab+1|0;}while((ab|0)<(m|0))}ab=m-3|0;if((ab|0)>=0){C=m-4|0;K=0;while(1){ah=K+1|0;ap=+h[S+(ah<<3)>>3];L=ae+(ah<<3)|0;af=ae+(K<<3)|0;h[A+(K<<3)>>3]=((+h[S+(K+2<<3)>>3]-ap)/+h[L>>3]-(ap- +h[S+(K<<3)>>3])/+h[af>>3])*3.0;if((K|0)<1){h[N+(K*24&-1)>>3]=0.0}else{h[N+(K*24&-1)>>3]=+h[af>>3]}h[N+(K*24&-1)+8>>3]=(+h[af>>3]+ +h[L>>3])*2.0;if((K|0)>(C|0)){h[N+(K*24&-1)+16>>3]=0.0}else{h[N+(K*24&-1)+16>>3]=+h[L>>3]}if((ah|0)>(ab|0)){break}else{K=ah}}}if((ac|0)>1){K=1;do{C=K-1|0;ap=+h[N+(C*24&-1)+8>>3];if(ap==0.0){E=898;break L921}aq=+h[N+(K*24&-1)>>3]/ap;ah=N+(K*24&-1)+8|0;h[ah>>3]=+h[ah>>3]-aq*+h[N+(C*24&-1)+16>>3];ah=A+(K<<3)|0;h[ah>>3]=+h[ah>>3]-aq*+h[A+(C<<3)>>3];K=K+1|0;}while((K|0)<(ac|0))}aq=+h[N+(ab*24&-1)+8>>3];if(aq==0.0){E=899;break L921}ap=+h[A+(ab<<3)>>3]/aq;h[U+(ab<<3)>>3]=ap;K=m-4|0;if((K|0)>-1){C=K;aq=ap;while(1){ap=+h[N+(C*24&-1)+8>>3];if(ap==0.0){E=900;break L921}Y=(+h[A+(C<<3)>>3]-aq*+h[N+(C*24&-1)+16>>3])/ap;h[U+(C<<3)>>3]=Y;if((C|0)>0){C=C-1|0;aq=Y}else{break}}}C=aB+16|0;h[C>>3]=0.0;if((ac|0)>=1){N=1;do{h[P+(N<<5)+16>>3]=+h[U+(N-1<<3)>>3];N=N+1|0;}while((N|0)<=(ac|0))}h[P+(H<<5)+16>>3]=0.0;if((H|0)>=0){N=0;do{h[P+(N<<5)>>3]=+h[S+(N<<3)>>3];N=N+1|0;}while((N|0)<=(H|0))}if((ac|0)>=0){H=0;aq=+h[aB>>3];Y=+h[C>>3];while(1){N=H+1|0;ap=+h[P+(N<<5)>>3];S=ae+(H<<3)|0;at=+h[S>>3];av=+h[P+(N<<5)+16>>3];h[P+(H<<5)+8>>3]=(ap-aq)/at-at/3.0*(Y*2.0+av);h[P+(H<<5)+24>>3]=(av-Y)/3.0/+h[S>>3];if((N|0)>(ac|0)){break}else{H=N;aq=ap;Y=av}}}uu(aF);uu(aE);uu(aD);uu(aC);uu(aG);uu(aH);ho(b,P,B,m,k+(aa((c[6352]|0)+1|0,l)<<6)|0);uu(aB)}else if((o|0)==2|(o|0)==4){H=m<<3;ac=ut(H)|0;if((ac|0)==0){gk();ae=ut(H)|0;if((ae|0)==0){E=808;break L921}else{aM=ae}}else{aM=ac}ac=aM;ae=m-1|0;H=(ae|0)/2&-1;h[ac>>3]=0.0;if((ae|0)>1){C=0;Y=0.0;while(1){N=C+1|0;aq=Y+ +_(+(+(ae-C|0)/+(N|0)));h[ac+(N<<3)>>3]=aq;if((N|0)<(H|0)){C=N;Y=aq}else{break}}}if((ae|0)>=(H|0)){C=ae;do{h[ac+(C<<3)>>3]=+h[ac+(ae-C<<3)>>3];C=C-1|0;}while((C|0)>=(H|0))}H=c[6352]|0;C=aa(H+1|0,l);P=c[p>>2]|0;c[200]=P;N=c[g>>2]|0;c[144]=N;Y=+h[64664+(P*688&-1)>>3];if((a[64788+(P*688&-1)|0]&1)==0){aN=+h[64672+(P*688&-1)>>3];aO=Y}else{aq=+_(+Y);Y=+h[64800+(P*688&-1)>>3];aN=+_(+(+h[64672+(P*688&-1)>>3]))/Y;aO=aq/Y}Y=+h[64664+(N*688&-1)>>3];if((a[64788+(N*688&-1)|0]&1)==0){aP=+h[64672+(N*688&-1)>>3];aQ=Y}else{aq=+_(+Y);Y=+h[64800+(N*688&-1)>>3];aP=+_(+(+h[64672+(N*688&-1)>>3]))/Y;aQ=aq/Y}do{if((H|0)>0){N=ae+B|0;Y=+(ae>>>0>>>0);aq=aP;av=aQ;ap=aN;at=aO;P=0;S=H;while(1){aw=+(P|0)/+(S-1|0);U=c[e>>2]|0;do{if(aw==0.0){aR=+h[U+(B<<6)+16>>3];aS=+h[U+(B<<6)+8>>3]}else{if(aw==1.0){aR=+h[U+(N<<6)+16>>3];aS=+h[U+(N<<6)+8>>3];break}as=+_(+(1.0-aw));au=Y*as;aT=+_(+aw)-as;as=0.0;aU=0.0;A=0;while(1){aV=+Z(+(aT*+(A>>>0>>>0)+(au+ +h[ac+(A<<3)>>3])));ab=A+B|0;aW=aU+aV*+h[U+(ab<<6)+8>>3];aX=as+aV*+h[U+(ab<<6)+16>>3];ab=A+1|0;if(ab>>>0>ae>>>0){aR=aX;aS=aW;break}else{as=aX;aU=aW;A=ab}}}}while(0);U=P+C|0;A=k+(U<<6)|0;c[A>>2]=0;h[k+(U<<6)+8>>3]=aS;if(aS<at){if((c[64648+((c[200]|0)*688&-1)>>2]&1|0)==0){aY=at;E=831}else{aZ=aS;E=829}}else{aZ=at;E=829}L1147:do{if((E|0)==829){E=0;if(aS>ap){if((c[64648+((c[200]|0)*688&-1)>>2]&2|0)==0){aY=aZ;E=831;break}else{a_=aS}}else{a_=ap}h[k+(U<<6)+16>>3]=aR;do{if(aR<av){if((c[64648+((c[144]|0)*688&-1)>>2]&1|0)!=0){a$=aR;break}c[A>>2]=1;a0=av;a1=aq;a2=a_;a3=aZ;break L1147}else{a$=av}}while(0);if(aR<=aq){a0=a$;a1=aq;a2=a_;a3=aZ;break}if((c[64648+((c[144]|0)*688&-1)>>2]&2|0)!=0){a0=a$;a1=aR;a2=a_;a3=aZ;break}c[A>>2]=1;a0=a$;a1=aq;a2=a_;a3=aZ}}while(0);if((E|0)==831){E=0;c[A>>2]=1;h[k+(U<<6)+16>>3]=aR;a0=av;a1=aq;a2=ap;a3=aY}h[k+(U<<6)+56>>3]=aS;h[k+(U<<6)+48>>3]=aS;h[k+(U<<6)+40>>3]=aR;h[k+(U<<6)+32>>3]=aR;h[k+(U<<6)+24>>3]=-1.0;ab=P+1|0;K=c[6352]|0;if((ab|0)<(K|0)){aq=a1;av=a0;ap=a2;at=a3;P=ab;S=K}else{break}}if(a2>aN){S=c[200]|0;if((a[64788+(S*688&-1)|0]&1)==0){a4=a2}else{a4=+Z(+(a2*+h[64800+(S*688&-1)>>3]))}h[64672+(S*688&-1)>>3]=a4}if(a3<aO){S=c[200]|0;if((a[64788+(S*688&-1)|0]&1)==0){a5=a3}else{a5=+Z(+(a3*+h[64800+(S*688&-1)>>3]))}h[64664+(S*688&-1)>>3]=a5}if(a1>aP){S=c[144]|0;if((a[64788+(S*688&-1)|0]&1)==0){a6=a1}else{a6=+Z(+(a1*+h[64800+(S*688&-1)>>3]))}h[64672+(S*688&-1)>>3]=a6}if(a0>=aQ){break}S=c[144]|0;if((a[64788+(S*688&-1)|0]&1)==0){a7=a0}else{a7=+Z(+(a0*+h[64800+(S*688&-1)>>3]))}h[64664+(S*688&-1)>>3]=a7}}while(0);uu(aM)}else if((o|0)==8){C=c[6352]|0;ae=aa(C+1|0,l);ac=c[p>>2]|0;c[200]=ac;H=c[g>>2]|0;c[144]=H;at=+h[64664+(ac*688&-1)>>3];if((a[64788+(ac*688&-1)|0]&1)==0){a8=+h[64672+(ac*688&-1)>>3];a9=at}else{ap=+_(+at);at=+h[64800+(ac*688&-1)>>3];a8=+_(+(+h[64672+(ac*688&-1)>>3]))/at;a9=ap/at}at=+h[64664+(H*688&-1)>>3];if((a[64788+(H*688&-1)|0]&1)==0){ba=+h[64672+(H*688&-1)>>3];bb=at}else{ap=+_(+at);at=+h[64800+(H*688&-1)>>3];ba=+_(+(+h[64672+(H*688&-1)>>3]))/at;bb=ap/at}if((C|0)<=0){break}H=m-1|0;at=+(m|0);ap=4.0/(at*3.0);av=ba;aq=bb;Y=a8;aw=a9;ac=0;S=C;while(1){C=S-1|0;P=c[e>>2]|0;aU=0.0;as=0.0;au=1.7976931348623157e+308;aT=-1.7976931348623157e+308;N=0;do{aW=+h[P+(N+B<<6)+8>>3];aU=aU+aW;as=as+aW*aW;au=aW<au?aW:au;aT=aW>aT?aW:aT;N=N+1|0;}while(N>>>0<=H>>>0);aW=aU/at;aX=+Q(+(as/at-aW*aW));aW=aX*+R(+ap,.2);aX=au+(aT-au)*(+(ac|0)/+(C|0));aV=0.0;N=0;do{K=N+B|0;bc=+h[P+(K<<6)+24>>3];bd=bc>0.0?bc:aW;bc=(aX- +h[P+(K<<6)+8>>3])/bd;be=+h[P+(K<<6)+16>>3];aV=aV+be*+Z(+(bc*bc*-.5))/bd;N=N+1|0;}while(N>>>0<=H>>>0);aW=aV/2.5066282746310002;N=ac+ae|0;P=k+(N<<6)|0;c[P>>2]=0;h[k+(N<<6)+8>>3]=aX;if(aX<aw){if((c[64648+((c[200]|0)*688&-1)>>2]&1|0)==0){bf=aw;E=872}else{bg=aX;E=870}}else{bg=aw;E=870}L1205:do{if((E|0)==870){E=0;if(aX>Y){if((c[64648+((c[200]|0)*688&-1)>>2]&2|0)==0){bf=bg;E=872;break}else{bh=aX}}else{bh=Y}h[k+(N<<6)+16>>3]=aW;do{if(aW<aq){if((c[64648+((c[144]|0)*688&-1)>>2]&1|0)!=0){bi=aW;break}c[P>>2]=1;bj=aq;bk=av;bl=bh;bm=bg;break L1205}else{bi=aq}}while(0);if(aW<=av){bj=bi;bk=av;bl=bh;bm=bg;break}if((c[64648+((c[144]|0)*688&-1)>>2]&2|0)!=0){bj=bi;bk=aW;bl=bh;bm=bg;break}c[P>>2]=1;bj=bi;bk=av;bl=bh;bm=bg}}while(0);if((E|0)==872){E=0;c[P>>2]=1;h[k+(N<<6)+16>>3]=aW;bj=aq;bk=av;bl=Y;bm=bf}h[k+(N<<6)+56>>3]=aX;h[k+(N<<6)+48>>3]=aX;h[k+(N<<6)+40>>3]=aW;h[k+(N<<6)+32>>3]=aW;h[k+(N<<6)+24>>3]=-1.0;U=ac+1|0;A=c[6352]|0;if((U|0)<(A|0)){av=bk;aq=bj;Y=bl;aw=bm;ac=U;S=A}else{break}}if(bl>a8){S=c[200]|0;if((a[64788+(S*688&-1)|0]&1)==0){bn=bl}else{bn=+Z(+(bl*+h[64800+(S*688&-1)>>3]))}h[64672+(S*688&-1)>>3]=bn}if(bm<a9){S=c[200]|0;if((a[64788+(S*688&-1)|0]&1)==0){bo=bm}else{bo=+Z(+(bm*+h[64800+(S*688&-1)>>3]))}h[64664+(S*688&-1)>>3]=bo}if(bk>ba){S=c[144]|0;if((a[64788+(S*688&-1)|0]&1)==0){bp=bk}else{bp=+Z(+(bk*+h[64800+(S*688&-1)>>3]))}h[64672+(S*688&-1)>>3]=bp}if(bj>=bb){break}S=c[144]|0;if((a[64788+(S*688&-1)|0]&1)==0){bq=bj}else{bq=+Z(+(bj*+h[64800+(S*688&-1)>>3]))}h[64664+(S*688&-1)>>3]=bq}}while(0);m=l+1|0;c[k+(aa((c[6352]|0)+1|0,m)-1<<6)>>2]=2;if((m|0)<(j|0)){n=D;l=m}else{E=905;break}}if((E|0)==727){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=163872,v)|0)}else if((E|0)==729){uf(c[b+4>>2]|0,136680,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((E|0)==733){uf(c[b+4>>2]|0,123304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((E|0)==736){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=106104,v)|0)}else if((E|0)==673){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=106104,v)|0)}else if((E|0)==676){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=98688,v)|0)}else if((E|0)==739){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=98688,v)|0)}else if((E|0)==742){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=93064,v)|0)}else if((E|0)==745){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=85160,v)|0)}else if((E|0)==748){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=77016,v)|0)}else if((E|0)==751){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=224768,v)|0)}else if((E|0)==688){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=224768,v)|0)}else if((E|0)==679){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=93064,v)|0)}else if((E|0)==682){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=85160,v)|0)}else if((E|0)==685){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=77016,v)|0)}else if((E|0)==667){uf(c[b+4>>2]|0,202432,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((E|0)==670){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=163872,v)|0)}else if((E|0)==780){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=211832,v)|0)}else if((E|0)==782){uu(ar);uu(T);uu(O);uu(M);uu(J);uu(V);uu(X);br=b+4|0;bs=c[br>>2]|0;uf(bs,217416,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((E|0)==784){uu(ar);uu(T);uu(O);uu(M);uu(J);uu(V);uu(X);br=b+4|0;bs=c[br>>2]|0;uf(bs,217416,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((E|0)==787){uu(ar);uu(T);uu(O);uu(M);uu(J);uu(V);uu(X);br=b+4|0;bs=c[br>>2]|0;uf(bs,217416,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((E|0)==808){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=217128,v)|0)}else if((E|0)==898){uu(aF);uu(aE);uu(aD);uu(aC);uu(aG);uu(aH);bt=b+4|0;bu=c[bt>>2]|0;uf(bu,196920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((E|0)==899){uu(aF);uu(aE);uu(aD);uu(aC);uu(aG);uu(aH);bt=b+4|0;bu=c[bt>>2]|0;uf(bu,196920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((E|0)==900){uu(aF);uu(aE);uu(aD);uu(aC);uu(aG);uu(aH);bt=b+4|0;bu=c[bt>>2]|0;uf(bu,196920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((E|0)==905){r=c[e>>2]|0;s=r;uu(s);c[e>>2]=k;t=c[6352]|0;u=t+1|0;w=aa(u,j);x=b+296|0;c[x>>2]=w;y=w-1|0;c[f>>2]=y;i=d;return}}function hm(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0;c=+h[a+8>>3];d=+h[b+8>>3];if(c>d){e=1;return e|0}e=(c<d)<<31>>31;return e|0}function hn(b){b=b|0;var d=0,e=0,f=0,g=0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0.0,U=0,V=0.0,W=0.0,X=0.0,Y=0.0,_=0,$=0,aa=0.0,ab=0.0,ac=0.0,ad=0,ae=0.0,af=0.0,ag=0.0,ah=0.0;c[200]=c[b+304>>2];c[144]=c[b+308>>2];d=b+320|0;e=b+300|0;f=b+284|0;g=0;i=0.0;j=0.0;k=0.0;l=0.0;m=0.0;n=0.0;o=0.0;p=0;q=0;while(1){r=c[e>>2]|0;L1281:do{if((q|0)<(r|0)){s=c[d>>2]|0;t=q;while(1){if((c[s+(t<<6)>>2]|0)!=2){u=t;break L1281}v=t+1|0;if((v|0)<(r|0)){t=v}else{u=v;break}}}else{u=q}}while(0);t=0;while(1){w=t+u|0;if((w|0)>=(r|0)){break}if((c[(c[d>>2]|0)+(w<<6)>>2]|0)==2){break}else{t=t+1|0}}if((t|0)>0){x=u;y=p;z=0;A=o;B=n;C=m;D=l;E=k;F=j;G=i;H=g}else{break}while(1){r=c[d>>2]|0;s=c[r+(x<<6)>>2]|0;do{if((s|0)==2){I=H;J=G;K=F;L=E;M=D;N=C;O=B;P=A;Q=z;R=y;S=x}else{T=+h[r+(x<<6)+8>>3];if((z|0)==0){I=(s|0)==0;J=+h[r+(x<<6)+24>>3];K=+h[r+(x<<6)+32>>3];L=+h[r+(x<<6)+40>>3];M=+h[r+(x<<6)+48>>3];N=+h[r+(x<<6)+56>>3];O=+h[r+(x<<6)+16>>3];P=T;Q=1;R=y;S=x;break}if(T==A){I=(s|0)==0&H;J=G+ +h[r+(x<<6)+24>>3];K=F+ +h[r+(x<<6)+32>>3];L=E+ +h[r+(x<<6)+40>>3];M=D+ +h[r+(x<<6)+48>>3];N=C+ +h[r+(x<<6)+56>>3];O=B+ +h[r+(x<<6)+16>>3];P=A;Q=z+1|0;R=y;S=x;break}h[r+(y<<6)+8>>3]=A;v=c[f>>2]|0;if((v|0)==6|(v|0)==7|(v|0)==9){U=1}else{U=z}T=+(U|0);V=B/T;h[(c[d>>2]|0)+(y<<6)+16>>3]=V;h[(c[d>>2]|0)+(y<<6)+56>>3]=C/T;h[(c[d>>2]|0)+(y<<6)+48>>3]=D/T;h[(c[d>>2]|0)+(y<<6)+40>>3]=E/T;h[(c[d>>2]|0)+(y<<6)+32>>3]=F/T;h[(c[d>>2]|0)+(y<<6)+24>>3]=G/T;c[(c[d>>2]|0)+(y<<6)>>2]=0;L1304:do{if(H){W=V;X=A}else{v=c[200]|0;do{if((a[64788+(v*688&-1)|0]&1)==0){Y=A}else{if(A>-8.988465674311579e+307){Y=+Z(+(A*+h[64800+(v*688&-1)>>3]));break}else{c[(c[d>>2]|0)+(y<<6)>>2]=1;W=V;X=A;break L1304}}}while(0);if(Y<+h[64664+(v*688&-1)>>3]){if((c[64648+(v*688&-1)>>2]&1|0)!=0){_=934}}else{_=934}do{if((_|0)==934){_=0;if(Y>+h[64672+(v*688&-1)>>3]){if((c[64648+(v*688&-1)>>2]&2|0)==0){break}}$=c[144]|0;do{if((a[64788+($*688&-1)|0]&1)==0){aa=V}else{if(V>-8.988465674311579e+307){aa=+Z(+(V*+h[64800+($*688&-1)>>3]));break}else{c[(c[d>>2]|0)+(y<<6)>>2]=1;W=V;X=Y;break L1304}}}while(0);if(aa<+h[64664+($*688&-1)>>3]){if((c[64648+($*688&-1)>>2]&1|0)!=0){_=943}}else{_=943}if((_|0)==943){_=0;if(aa<=+h[64672+($*688&-1)>>3]){W=aa;X=Y;break L1304}if((c[64648+($*688&-1)>>2]&2|0)!=0){W=aa;X=Y;break L1304}}c[(c[d>>2]|0)+(y<<6)>>2]=1;W=aa;X=Y;break L1304}}while(0);c[(c[d>>2]|0)+(y<<6)>>2]=1;W=V;X=Y}}while(0);I=H;J=G;K=F;L=E;M=D;N=C;O=W;P=X;Q=0;R=y+1|0;S=x-1|0}}while(0);r=S+1|0;if((r|0)<(w|0)){x=r;y=R;z=Q;A=P;B=O;C=N;D=M;E=L;F=K;G=J;H=I}else{break}}if((Q|0)==0){ab=O;ac=P;ad=R}else{h[(c[d>>2]|0)+(R<<6)+8>>3]=P;V=((c[f>>2]|0)-6|0)>>>0<2?1.0:+(Q|0);T=O/V;h[(c[d>>2]|0)+(R<<6)+16>>3]=T;h[(c[d>>2]|0)+(R<<6)+56>>3]=N/V;h[(c[d>>2]|0)+(R<<6)+48>>3]=M/V;h[(c[d>>2]|0)+(R<<6)+40>>3]=L/V;h[(c[d>>2]|0)+(R<<6)+32>>3]=K/V;h[(c[d>>2]|0)+(R<<6)+24>>3]=J/V;c[(c[d>>2]|0)+(R<<6)>>2]=0;L1337:do{if(I){ae=T;af=P}else{t=c[200]|0;do{if((a[64788+(t*688&-1)|0]&1)==0){ag=P}else{if(P>-8.988465674311579e+307){ag=+Z(+(P*+h[64800+(t*688&-1)>>3]));break}else{c[(c[d>>2]|0)+(R<<6)>>2]=1;ae=T;af=P;break L1337}}}while(0);if(ag<+h[64664+(t*688&-1)>>3]){if((c[64648+(t*688&-1)>>2]&1|0)!=0){_=956}}else{_=956}do{if((_|0)==956){_=0;if(ag>+h[64672+(t*688&-1)>>3]){if((c[64648+(t*688&-1)>>2]&2|0)==0){break}}r=c[144]|0;do{if((a[64788+(r*688&-1)|0]&1)==0){ah=T}else{if(T>-8.988465674311579e+307){ah=+Z(+(T*+h[64800+(r*688&-1)>>3]));break}else{c[(c[d>>2]|0)+(R<<6)>>2]=1;ae=T;af=ag;break L1337}}}while(0);if(ah<+h[64664+(r*688&-1)>>3]){if((c[64648+(r*688&-1)>>2]&1|0)!=0){_=965}}else{_=965}if((_|0)==965){_=0;if(ah<=+h[64672+(r*688&-1)>>3]){ae=ah;af=ag;break L1337}if((c[64648+(r*688&-1)>>2]&2|0)!=0){ae=ah;af=ag;break L1337}}c[(c[d>>2]|0)+(R<<6)>>2]=1;ae=ah;af=ag;break L1337}}while(0);c[(c[d>>2]|0)+(R<<6)>>2]=1;ae=T;af=ag}}while(0);ab=ae;ac=af;ad=R+1|0}if((ad|0)>=(c[e>>2]|0)){g=I;i=J;j=K;k=L;l=M;m=N;n=ab;o=ac;p=ad;q=w;continue}c[(c[d>>2]|0)+(ad<<6)>>2]=2;g=I;i=J;j=K;k=L;l=M;m=N;n=ab;o=ac;p=ad+1|0;q=w}c[e>>2]=p;iR(b,p);return}function ho(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0,Q=0.0,R=0.0,S=0.0,T=0.0;j=i;k=c[b+304>>2]|0;c[200]=k;l=c[b+308>>2]|0;c[144]=l;m=+h[64664+(k*688&-1)>>3];if((a[64788+(k*688&-1)|0]&1)==0){n=+h[64672+(k*688&-1)>>3];o=m}else{p=+_(+m);m=+h[64800+(k*688&-1)>>3];n=+_(+(+h[64672+(k*688&-1)>>3]))/m;o=p/m}m=+h[64664+(l*688&-1)>>3];if((a[64788+(l*688&-1)|0]&1)==0){q=+h[64672+(l*688&-1)>>3];r=m}else{p=+_(+m);m=+h[64800+(l*688&-1)>>3];q=+_(+(+h[64672+(l*688&-1)>>3]))/m;r=p/m}l=c[b+320>>2]|0;m=+h[l+(e<<6)+8>>3];p=m>o?m:o;m=+h[l+((e-1|0)+f<<6)+8>>3];s=m<n?m:n;if(p>=s){uf(c[b+4>>2]|0,205704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}b=c[6352]|0;m=(s-p)/+(b-1|0);if((b|0)<=0){i=j;return}b=f-2|0;s=r-(q-r);t=n;u=r;w=q;x=o;f=0;k=0;while(1){y=p+m*+(k|0);z=f;while(1){A=z+1|0;if(y>=+h[l+(A+e<<6)+8>>3]&(z|0)<(b|0)){z=A}else{break}}A=c[200]|0;if((a[64788+(A*688&-1)|0]&1)==0){B=+h[l+(z+e<<6)+8>>3];C=y}else{D=+Z(+(y*+h[64800+(A*688&-1)>>3]));B=+Z(+(+h[l+(z+e<<6)+8>>3]*+h[64800+(A*688&-1)>>3]));C=D}D=C-B;E=+h[d+(z<<5)>>3]+D*(+h[d+(z<<5)+8>>3]+D*(+h[d+(z<<5)+24>>3]*D+ +h[d+(z<<5)+16>>3]));A=c[144]|0;do{if((a[64788+(A*688&-1)|0]&1)==0){F=E}else{if(E<=0.0){F=s;break}D=+_(+E);F=D/+h[64800+(A*688&-1)>>3]}}while(0);A=g+(k<<6)|0;c[A>>2]=0;h[g+(k<<6)+8>>3]=y;do{if(y<x){if((c[64648+((c[200]|0)*688&-1)>>2]&1|0)!=0){G=y;H=993;break}I=x;H=996}else{G=x;H=993}}while(0);L1400:do{if((H|0)==993){H=0;do{if(y>t){if((c[64648+((c[200]|0)*688&-1)>>2]&2|0)!=0){J=y;break}I=G;H=996;break L1400}else{J=t}}while(0);h[g+(k<<6)+16>>3]=F;do{if(F<u){if((c[64648+((c[144]|0)*688&-1)>>2]&1|0)!=0){K=F;break}c[A>>2]=1;L=w;M=u;N=J;O=G;break L1400}else{K=u}}while(0);if(F<=w){L=w;M=K;N=J;O=G;break}if((c[64648+((c[144]|0)*688&-1)>>2]&2|0)!=0){L=F;M=K;N=J;O=G;break}c[A>>2]=1;L=w;M=K;N=J;O=G}}while(0);if((H|0)==996){H=0;c[A>>2]=1;h[g+(k<<6)+16>>3]=F;L=w;M=u;N=t;O=I}h[g+(k<<6)+56>>3]=y;h[g+(k<<6)+48>>3]=y;h[g+(k<<6)+40>>3]=F;h[g+(k<<6)+32>>3]=F;h[g+(k<<6)+24>>3]=-1.0;P=k+1|0;if((P|0)<(c[6352]|0)){t=N;u=M;w=L;x=O;f=z;k=P}else{break}}if(N>n){k=c[200]|0;if((a[64788+(k*688&-1)|0]&1)==0){Q=N}else{Q=+Z(+(N*+h[64800+(k*688&-1)>>3]))}h[64672+(k*688&-1)>>3]=Q}if(O<o){k=c[200]|0;if((a[64788+(k*688&-1)|0]&1)==0){R=O}else{R=+Z(+(O*+h[64800+(k*688&-1)>>3]))}h[64664+(k*688&-1)>>3]=R}if(L>q){k=c[144]|0;if((a[64788+(k*688&-1)|0]&1)==0){S=L}else{S=+Z(+(L*+h[64800+(k*688&-1)>>3]))}h[64672+(k*688&-1)>>3]=S}if(M>=r){i=j;return}k=c[144]|0;if((a[64788+(k*688&-1)|0]&1)==0){T=M}else{T=+Z(+(M*+h[64800+(k*688&-1)>>3]))}h[64664+(k*688&-1)>>3]=T;i=j;return}function hp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;d=i;if((a|0)<1|(b|0)<1){e=0;i=d;return e|0}f=a<<2;g=ut(f)|0;do{if((g|0)==0){gk();h=ut(f)|0;if((h|0)!=0){j=h;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=217072,v)|0);return 0}else{j=g}}while(0);g=j;j=aa(a<<3,b);f=ut(j)|0;do{if((f|0)==0){gk();h=ut(j)|0;if((h|0)!=0){k=h;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=163832,v)|0);return 0}else{k=f}}while(0);f=k;c[g>>2]=f;if((a|0)>1){l=1;m=f}else{e=g;i=d;return e|0}while(1){f=m+(b<<3)|0;c[g+(l<<2)>>2]=f;k=l+1|0;if((k|0)<(a|0)){l=k;m=f}else{e=g;break}}i=d;return e|0}function hq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0.0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0;f=(b|0)>0;if(f){g=-1;i=0;j=a}else{return}while(1){k=e+(c[d+(i<<2)>>2]<<3)|0;l=+h[k>>3];m=e+(i<<3)|0;h[k>>3]=+h[m>>3];do{if((g|0)>-1){k=i-1|0;if((g|0)>(k|0)){n=l;o=g;break}p=g;q=l;r=e+(g<<3)|0;s=(c[j>>2]|0)+(g<<3)|0;while(1){t=q- +h[s>>3]*+h[r>>3];u=p+1|0;if((u|0)>(k|0)){n=t;o=g;break}else{p=u;q=t;r=r+8|0;s=s+8|0}}}else{if(l==0.0){n=l;o=g;break}n=l;o=i}}while(0);h[m>>3]=n;s=i+1|0;if((s|0)<(b|0)){g=o;i=s;j=j+4|0}else{break}}if(f){v=a+(b<<2)|0;w=b}else{return}while(1){a=v-4|0;f=w-1|0;j=e+(f<<3)|0;L1476:do{if((w|0)<(b|0)){i=w;o=e+(w<<3)|0;g=(c[a>>2]|0)+(w<<3)|0;n=+h[j>>3];while(1){l=n- +h[g>>3]*+h[o>>3];h[j>>3]=l;d=i+1|0;if((d|0)>=(b|0)){x=l;break L1476}i=d;o=o+8|0;g=g+8|0;n=l}}else{x=+h[j>>3]}}while(0);h[j>>3]=x/+h[(c[a>>2]|0)+(f<<3)>>3];if((f|0)>0){v=a;w=f}else{break}}return}function hr(a,b,d,e,f,g,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0;k=i;l=(g|0)>0;L1485:do{if(l){m=(b|0)==0;n=0;L1487:while(1){o=n+1|0;if((o|0)<(f|0)){p=a+(n<<2)|0;q=(o|0)<(g|0);r=b+(n<<3)|0;s=o;do{t=a+(s<<2)|0;u=+h[(c[t>>2]|0)+(n<<3)>>3];do{if(u!=0.0){w=(c[p>>2]|0)+(n<<3)|0;x=+h[w>>3];y=+P(+x);do{if(y<+P(+u)*2.220446049250313e-16){z=1.0;A=1.0;B=0.0;C=-0.0-u}else{if(x>0.0){D=1.0}else{D=+((x<0.0)<<31>>31|0)}E=D*+Q(+(x*x+u*u));if(E==0.0){break L1487}F=x/E;G=(-0.0-u)/E;if(+P(+G)<F){z=G;A=G;B=F;C=E;break}if(G>0.0){H=1.0}else{H=+((G<0.0)<<31>>31|0)}z=H/F;A=G;B=F;C=E}}while(0);h[w>>3]=C;h[(c[t>>2]|0)+(n<<3)>>3]=z;if(q){I=o;do{y=+h[(c[p>>2]|0)+(I<<3)>>3];J=(c[t>>2]|0)+(I<<3)|0;E=+h[J>>3];h[J>>3]=A*y+B*E;h[(c[p>>2]|0)+(I<<3)>>3]=B*y-A*E;I=I+1|0;}while((I|0)<(g|0))}if(m){break}E=+h[r>>3];I=b+(s<<3)|0;y=+h[I>>3];h[I>>3]=A*E+B*y;h[r>>3]=B*E-A*y}}while(0);s=s+1|0;}while((s|0)<(f|0))}if((o|0)<(g|0)){n=o}else{break L1485}}be(42289,136640,(v=i,i=i+16|0,h[v>>3]=x,h[v+8>>3]=u,v)|0);fb()}}while(0);if((b|0)==0){i=k;return}n=g-1|0;L1519:do{if(l){m=n;while(1){u=+h[b+(m<<3)>>3];h[e+(m<<3)>>3]=0.0;s=m+1|0;r=c[a+(m<<2)>>2]|0;if((s|0)<(g|0)){x=u;p=s;while(1){A=x+ +h[r+(p<<3)>>3]*+h[d+(p<<3)>>3];s=p+1|0;if((s|0)<(g|0)){x=A;p=s}else{K=A;break}}}else{K=u}x=+h[r+(m<<3)>>3];if(x==0.0){break}h[d+(m<<3)>>3]=(-0.0-K)/x;if((m|0)>0){m=m-1|0}else{break L1519}}uD(42289,123272,28);fb()}}while(0);if((g|0)<(f|0)){d=g;do{h[e+(d<<3)>>3]=+h[b+(d<<3)>>3];d=d+1|0;}while((d|0)<(f|0))}if((j|0)==0|l^1){i=k;return}l=(f|0)>0;j=n;while(1){if(l){n=e+(j<<3)|0;d=f;do{d=d-1|0;K=+h[(c[a+(d<<2)>>2]|0)+(j<<3)>>3];do{if(K==1.0){L=1.0;M=0.0}else{x=+P(+K);if(x<1.0){L=K;M=+Q(+(1.0-K*K));break}A=1.0/x;if(K>0.0){N=1.0}else{N=+((K<0.0)<<31>>31|0)}L=N*+Q(+(1.0-A*A));M=A}}while(0);K=+h[n>>3];r=e+(d<<3)|0;u=+h[r>>3];h[r>>3]=K*(-0.0-L)+M*u;h[n>>3]=M*K+L*u;}while((d|0)>0)}if((j|0)>0){j=j-1|0}else{break}}i=k;return}function hs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;e=0;while(1){if((e|0)>=(d|0)){break}f=b+(e<<2)|0;g=c[f>>2]|0;if((e|0)>0){i=0;j=g;while(1){h[j+(i<<3)>>3]=0.0;k=i+1|0;l=c[f>>2]|0;if((k|0)<(e|0)){i=k;j=l}else{m=l;break}}}else{m=g}h[m+(e<<3)>>3]=1.0;if(+h[(c[a+(e<<2)>>2]|0)+(e<<3)>>3]!=0.0){e=e+1|0}else{n=1108;break}}if((n|0)==1108){uD(42289,106064,30);fb()}n=(d|0)>0;if(n){o=0}else{return}do{e=o;do{m=(c[b+(e<<2)>>2]|0)+(o<<3)|0;p=+h[m>>3];if((o|0)<(e|0)){j=o;q=p;while(1){r=q- +h[(c[a+(j<<2)>>2]|0)+(e<<3)>>3]*+h[(c[b+(j<<2)>>2]|0)+(o<<3)>>3];i=j+1|0;if((i|0)<(e|0)){j=i;q=r}else{s=r;break}}}else{s=p}h[m>>3]=s/+h[(c[a+(e<<2)>>2]|0)+(e<<3)>>3];e=e+1|0;}while((e|0)<(d|0));o=o+1|0;}while((o|0)<(d|0));if(!n){return}n=d-1|0;o=0;do{if((n|0)>=(o|0)){e=d;g=n;while(1){j=(c[b+(g<<2)>>2]|0)+(o<<3)|0;s=+h[j>>3];i=c[a+(g<<2)>>2]|0;if((e|0)<(d|0)){f=e;q=s;while(1){r=q- +h[i+(f<<3)>>3]*+h[(c[b+(f<<2)>>2]|0)+(o<<3)>>3];l=f+1|0;if((l|0)<(d|0)){f=l;q=r}else{t=r;break}}}else{t=s}h[j>>3]=t/+h[i+(g<<3)>>3];f=g-1|0;if((f|0)<(o|0)){break}else{e=g;g=f}}}o=o+1|0;}while((o|0)<(d|0));return}function ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0.0,u=0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0,D=0.0,E=0,F=0.0,G=0,H=0,I=0;f=i;if((b|0)<1){h[e>>3]=1.0;g=0;j=g;uu(j);i=f;return}k=b<<3;l=ut(k)|0;do{if((l|0)==0){gk();m=ut(k)|0;if((m|0)!=0){n=m;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=215008,v)|0)}else{n=l}}while(0);l=n;h[e>>3]=1.0;n=a+(b<<2)|0;k=a;m=l;while(1){o=c[k>>2]|0;p=o+(b<<3)|0;q=o;r=0.0;L1601:while(1){o=q;while(1){if(o>>>0>=p>>>0){break L1601}s=o+8|0;t=+P(+(+h[o>>3]));if(t>r){q=s;r=t;continue L1601}else{o=s}}}if(r==0.0){u=1137;break}h[m>>3]=1.0/r;q=k+4|0;if(q>>>0<n>>>0){k=q;m=m+8|0}else{break}}if((u|0)==1137){uf(-1,98640,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}u=b-1|0;m=a;k=0;n=-1;while(1){q=(k|0)>0;if(q){p=0;do{o=a+(p<<2)|0;s=c[o>>2]|0;w=s+(k<<3)|0;L1616:do{if((p|0)>0){x=0;t=+h[w>>3];y=s;while(1){z=t- +h[y+(x<<3)>>3]*+h[(c[a+(x<<2)>>2]|0)+(k<<3)>>3];h[w>>3]=z;A=x+1|0;if((A|0)>=(p|0)){break L1616}x=A;t=z;y=c[o>>2]|0}}}while(0);p=p+1|0;}while((p|0)<(k|0))}p=l+(k<<3)|0;r=0.0;o=p;w=n;s=k;while(1){y=a+(s<<2)|0;x=c[y>>2]|0;A=x+(k<<3)|0;t=+h[A>>3];L1625:do{if(q){B=0;z=t;C=x;while(1){D=z- +h[C+(B<<3)>>3]*+h[(c[a+(B<<2)>>2]|0)+(k<<3)>>3];h[A>>3]=D;E=B+1|0;if((E|0)>=(k|0)){F=D;break L1625}B=E;z=D;C=c[y>>2]|0}}else{F=t}}while(0);t=+h[o>>3];z=t*+P(+F);y=z<r;G=y?w:s;A=s+1|0;if((A|0)<(b|0)){r=y?r:z;o=o+8|0;w=G;s=A}else{break}}if((k|0)!=(G|0)){s=0;w=c[a+(G<<2)>>2]|0;o=c[m>>2]|0;while(1){r=+h[w>>3];h[w>>3]=+h[o>>3];h[o>>3]=r;q=s+1|0;if((q|0)<(b|0)){s=q;w=w+8|0;o=o+8|0}else{break}}h[e>>3]=-0.0- +h[e>>3];h[l+(G<<3)>>3]=+h[p>>3]}c[d+(k<<2)>>2]=G;o=(c[m>>2]|0)+(k<<3)|0;if(+h[o>>3]==0.0){h[o>>3]=1.0e-30}do{if((k|0)==(u|0)){H=k+1|0}else{r=1.0/+h[(c[m>>2]|0)+(k<<3)>>3];o=k+1|0;if((o|0)<(b|0)){I=o}else{H=o;break}while(1){w=(c[a+(I<<2)>>2]|0)+(k<<3)|0;h[w>>3]=r*+h[w>>3];w=I+1|0;if((w|0)<(b|0)){I=w}else{H=o;break}}}}while(0);if((H|0)<(b|0)){m=m+4|0;k=H;n=G}else{g=l;break}}j=g;uu(j);i=f;return}function hu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0;b=i;d=ut(16)|0;do{if((d|0)==0){gk();e=ut(16)|0;if((e|0)!=0){f=e;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=213800,v)|0);return 0}else{f=d}}while(0);d=f;c[f+4>>2]=(a|0)<0?0:a;c[f+8>>2]=0;if((a|0)<=0){c[f+12>>2]=0;g=f;c[g>>2]=0;i=b;return d|0}e=a<<6;a=ut(e)|0;do{if((a|0)==0){gk();h=ut(e)|0;if((h|0)!=0){j=h;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=217008,v)|0);return 0}else{j=a}}while(0);c[f+12>>2]=j;uE(j|0,0,e|0);g=f;c[g>>2]=0;i=b;return d|0}function hv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;e=a+4|0;if((c[e>>2]|0)==(b|0)){i=d;return}f=a+12|0;a=c[f>>2]|0;g=(a|0)==0;if((b|0)<=0){if(!g){uu(a)}c[f>>2]=0;c[e>>2]=0;i=d;return}do{if(g){h=b<<6;j=ut(h)|0;if((j|0)!=0){k=j;break}gk();j=ut(h)|0;if((j|0)!=0){k=j;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=217008,v)|0)}else{k=db(a,b<<6,214200)|0}}while(0);a=k;c[f>>2]=a;f=c[e>>2]|0;if((f|0)<(b|0)){uE(a+(f<<6)|0,0,b-f<<6|0)}c[e>>2]=b;i=d;return}function hw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;f=i;hx(b,d,0);a[46896]=e&1;if((b|0)==0){uj(-1,76976,(v=i,i=i+16|0,c[v>>2]=e?224760:217408,c[v+8>>2]=d,v)|0)}if((c[o>>2]|0)==(b|0)){a[37400]=1;do{}while((dI()|0)==0);g=hy()|0;i=f;return}c[13896]=0;if(e){c[13896]=0;d=c[13898]|0;h=c[8272]|0;L1694:do{if((d|0)<(h|0)){j=d;k=h;while(1){l=c[1054]|0;m=(a[l+(j*40&-1)|0]&1)==0;L1697:do{if(!m){n=c[l+(j*40&-1)+36>>2]|0;p=l+(j*40&-1)+32|0;q=c[10036]|0;r=0;while(1){if((r|0)>=(n|0)){break}if((a[q+((c[p>>2]|0)+r|0)|0]|0)==(a[r+103664|0]|0)){r=r+1|0}else{break L1697}}if((r|0)==1){s=k;t=j;break L1694}}}while(0);p=c[13896]|0;if((p|0)>=10){s=k;t=j;break L1694}do{if(m){c[13896]=p+1;u=55544+(p<<2)|0;w=l+(j*40&-1)+32|0;x=1212}else{q=l+(j*40&-1)+32|0;n=a[(c[10036]|0)+(c[q>>2]|0)|0]|0;if(n<<24>>24==39){c[13896]=p+1;y=55544+(p<<2)|0}else{c[13896]=p+1;z=55544+(p<<2)|0;if(n<<24>>24==34){y=z}else{u=z;w=q;x=1212;break}}ub(y,j,j)}}while(0);if((x|0)==1212){x=0;p=c[l+(j*40&-1)+36>>2]|0;m=p+(c[w>>2]|0)|0;q=db(c[u>>2]|0,p+1|0,116456)|0;c[u>>2]=q;p=c[(c[1054]|0)+(j*40&-1)+32>>2]|0;L1714:do{if((p|0)<(m|0)){z=p;n=q;while(1){A=a[(c[10036]|0)+z|0]|0;if(A<<24>>24==0){B=n;break L1714}C=n+1|0;a[n]=A;A=z+1|0;if((A|0)<(m|0)){z=A;n=C}else{B=C;break}}}else{B=q}}while(0);a[B]=0}q=(c[13898]|0)+1|0;c[13898]=q;m=c[8272]|0;if((q|0)<(m|0)){j=q;k=m}else{s=m;t=q;break}}}else{s=h;t=d}}while(0);do{if((t|0)<(s|0)){d=c[1054]|0;if((a[d+(t*40&-1)|0]&1)==0){D=t+1|0;c[13898]=D;uf(D,221400,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}h=c[d+(t*40&-1)+36>>2]|0;B=d+(t*40&-1)+32|0;d=c[10036]|0;u=0;while(1){if((u|0)>=(h|0)){break}if((a[d+((c[B>>2]|0)+u|0)|0]|0)==(a[u+103664|0]|0)){u=u+1|0}else{x=1274;break}}if((x|0)==1274){D=t+1|0;c[13898]=D;uf(D,221400,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((u|0)==1){break}D=t+1|0;c[13898]=D;uf(D,221400,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);c[(c[8804]|0)+44>>2]=t}c[9354]=0;a[37400]=0;L1735:while(1){t=0;D=c[10034]|0;s=c[10036]|0;L1737:while(1){if((a6(s+t|0,D|0,b|0)|0)==0){x=1228;break}c[9354]=(c[9354]|0)+1;B=c[10036]|0;d=uA(B|0)|0;h=d-1|0;w=B+h|0;B=a[w]|0;do{if(B<<24>>24==10){a[w]=0;y=(h|0)>0?d-2|0:h;k=(c[10036]|0)+y|0;j=a[k]|0;if(j<<24>>24!=13){E=y;F=j;x=1234;break}a[k]=0;k=(((y|0)>0)<<31>>31)+y|0;E=k;F=a[(c[10036]|0)+k|0]|0;x=1234}else{if((d+1|0)<(D|0)){E=h;F=B;x=1234;break}dG();G=((1-d|0)-1|0)+(c[10034]|0)|0;H=d}}while(0);do{if((x|0)==1234){x=0;if(F<<24>>24==92){G=(c[10034]|0)-E|0;H=E;break}if((a[43472]&1)!=0){dK()}d=jl(40144,40136)|0;c[8272]=d;B=(c[10036]|0)+(c[(c[1054]|0)+(d*40&-1)+32>>2]|0)|0;if((a[B]|0)==35){a[B]=0}B=c[12918]|0;if((B|0)<0){x=1242;break L1735}if((B|0)<=0){x=1244;break L1737}if((E+4|0)>>>0>(c[10034]|0)>>>0){dG()}B=c[10036]|0;d=B+(uA(B|0)|0)|0;a[d]=a[125976]|0;a[d+1|0]=a[125977|0]|0;a[d+2|0]=a[125978|0]|0;d=uA(c[10036]|0)|0;G=(c[10034]|0)-d|0;H=d}}while(0);d=c[10036]|0;if(0){I=0;J=d;break}else{t=H;D=G;s=d}}if((x|0)==1244){x=0;I=0;J=c[10036]|0}else if((x|0)==1228){x=0;a[(c[10036]|0)+t|0]=0;I=1;J=c[10036]|0}if((a[J]|0)==0){K=I}else{if(e){s=bP(J|0)|0;a[c[10036]|0]=0;D=0;u=s;while(1){d=a[u]|0;if((d<<24>>24|0)==36){B=u+1|0;L=a[B]|0;do{if((L|0)==35){h=c[13896]|0;if(h>>>0>=10){x=1255;break L1735}be(43480,98608,(v=i,i=i+8|0,c[v>>2]=h,v)|0);M=43480}else if((L|0)==36){M=180784}else{h=L-48|0;if(h>>>0>=10){x=1260;break L1735}if((h|0)>=(c[13896]|0)){M=179864;break}M=c[55544+(h<<2)>>2]|0}}while(0);h=uA(M|0)|0;w=h+1|0;if(((c[10034]|0)-D|0)>>>0<w>>>0){do{dG();}while(((c[10034]|0)-D|0)>>>0<w>>>0)}w=(c[10036]|0)+D|0;uB(w|0,M|0);N=h+D|0;O=B}else if((d<<24>>24|0)==0){break}else{w=D+1|0;if(w>>>0>(c[10034]|0)>>>0){dG();P=a[u]|0}else{P=d}a[(c[10036]|0)+D|0]=P;N=w;O=u}D=N;u=O+1|0}if((D+1|0)>>>0>(c[10034]|0)>>>0){dG()}a[(c[10036]|0)+D|0]=0;uu(s)}a[25280]=0;K=(dJ()|0)==0?I:1}if((K|0)!=0){x=1276;break}}if((x|0)==1255){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=105968,v)|0)}else if((x|0)==1260){uf(-1,85080,(v=i,i=i+8|0,c[v>>2]=L,v)|0)}else if((x|0)==1242){uf(-1,211816,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((x|0)==1276){g=hy()|0;i=f;return}}function hx(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;f=i;g=ut(96)|0;do{if((g|0)==0){gk();h=ut(96)|0;if((h|0)!=0){j=h;break}if((b|0)==0){k=c[13898]|0;uf(k,196888,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}az(b|0);k=c[13898]|0;uf(k,196888,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{j=g}}while(0);c[j>>2]=b;c[j+4>>2]=d;c[j+8>>2]=e;a[j+12|0]=a[37400]&1;c[j+16>>2]=c[9354];a[j+13|0]=a[46896]&1;c[j+52>>2]=c[13896];c[j+56>>2]=c[13886];c[13886]=0;c[j+60>>2]=c[13887];c[13887]=0;c[j+64>>2]=c[13888];c[13888]=0;c[j+68>>2]=c[13889];c[13889]=0;c[j+72>>2]=c[13890];c[13890]=0;c[j+76>>2]=c[13891];c[13891]=0;c[j+80>>2]=c[13892];c[13892]=0;c[j+84>>2]=c[13893];c[13893]=0;c[j+88>>2]=c[13894];c[13894]=0;c[j+92>>2]=c[13895];c[13895]=0;e=j;d=c[8804]|0;do{if((d|0)==0){c[j+20>>2]=0}else{b=(c[d+20>>2]|0)+1|0;c[j+20>>2]=b;if((b|0)<=250){break}uf(-1,185608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);c[j+24>>2]=c[9368];a[j+28|0]=a[37464]&1;a[j+29|0]=a[37480]&1;c[j+44>>2]=c[13898];c[j+40>>2]=c[8272];d=((c[8272]|0)*40&-1)+40|0;b=ut(d)|0;do{if((b|0)==0){gk();g=ut(d)|0;if((g|0)!=0){l=g;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=180384,v)|0)}else{l=b}}while(0);c[j+36>>2]=l;uD(l|0,c[1054]|0,((c[8272]|0)*40&-1)+40|0);l=c[10036]|0;if((l|0)==0){m=0;n=j+32|0;o=n;c[o>>2]=m;p=c[8804]|0;q=j+48|0;r=q;c[r>>2]=p;c[8804]=e;i=f;return}m=bP(l|0)|0;n=j+32|0;o=n;c[o>>2]=m;p=c[8804]|0;q=j+48|0;r=q;c[r>>2]=p;c[8804]=e;i=f;return}function hy(){var b=0,d=0,e=0,f=0,g=0,h=0;b=i;d=c[8804]|0;if((d|0)==0){e=0;i=b;return e|0}f=c[d>>2]|0;L1827:do{if(!((f|0)==0|(f|0)==(c[o>>2]|0))){g=c[d+4>>2]|0;do{if((g|0)!=0){if((a[g]|0)!=60){break}a2(f|0);break L1827}}while(0);az(f|0)}}while(0);f=c[13886]|0;if((f|0)!=0){uu(f)}c[13886]=c[d+56>>2];f=c[13887]|0;if((f|0)!=0){uu(f)}c[13887]=c[d+60>>2];f=c[13888]|0;if((f|0)!=0){uu(f)}c[13888]=c[d+64>>2];f=c[13889]|0;if((f|0)!=0){uu(f)}c[13889]=c[d+68>>2];f=c[13890]|0;if((f|0)!=0){uu(f)}c[13890]=c[d+72>>2];f=c[13891]|0;if((f|0)!=0){uu(f)}c[13891]=c[d+76>>2];f=c[13892]|0;if((f|0)!=0){uu(f)}c[13892]=c[d+80>>2];f=c[13893]|0;if((f|0)!=0){uu(f)}c[13893]=c[d+84>>2];f=c[13894]|0;if((f|0)!=0){uu(f)}c[13894]=c[d+88>>2];f=c[13895]|0;if((f|0)!=0){uu(f)}c[13895]=c[d+92>>2];c[13896]=c[d+52>>2];a[46896]=a[d+13|0]&1;a[37400]=a[d+12|0]&1;c[9354]=c[d+16>>2];c[9368]=c[d+24>>2];a[37480]=a[d+29|0]&1;a[37464]=a[d+28|0]&1;f=d+36|0;do{if((c[f>>2]|0)!=0){g=d+40|0;c[8272]=c[g>>2];c[13898]=c[d+44>>2];h=(c[g>>2]|0)+1|0;if((c[1052]|0)<(h|0)){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=202392,v)|0);return 0}else{uD(c[1054]|0,c[f>>2]|0,h*40&-1);uu(c[f>>2]|0);break}}}while(0);f=d+32|0;h=c[f>>2]|0;if((h|0)!=0){g=c[10036]|0;uB(g|0,h|0);uu(c[f>>2]|0)}uu(c[d+4>>2]|0);uu(c[d+8>>2]|0);c[8804]=c[d+48>>2];uu(d);e=1;i=b;return e|0}function hz(a){a=a|0;var b=0,d=0,e=0;b=i;if((c[3524]|0)==0){if((a|0)==0){i=b;return}d=c[m>>2]|0;aI(154728,34,1,d|0);i=b;return}uu(c[6958]|0);uu(c[6956]|0);d=c[c[3524]>>2]|0;if((d|0)==0){e=0}else{e=bP(d|0)|0}c[6958]=e;e=bP(13048)|0;c[6956]=e;if((a|0)==0){i=b;return}cf(c[m>>2]|0,164104,(v=i,i=i+16|0,c[v>>2]=c[6958],c[v+8>>2]=e,v)|0);i=b;return}function hA(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=i;L1890:do{if((a[b]|0)==60){if(!(a[14168]|0)){uf(-1,145320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}f=bt(b+1|0,193632)|0;if((f|0)==0){g=0}else{h=f;break}i=e;return g|0}else{f=bF(b|0,d|0)|0;if((f|0)==0){j=0}else{h=f;break}while(1){f=c[8776]|0;if((f|0)==0){break}k=c[8774]|0;do{if((k|0)==0){c[8774]=f;l=c[8778]|0;if((l|0)!=0){m=f;n=l;break}l=c[8780]|0;c[8778]=l;m=f;n=l}else{l=k+((uA(k|0)|0)+1|0)|0;c[8774]=l;m=l;n=c[8778]|0}}while(0);if(m>>>0>=n>>>0){o=1356;break}if((m|0)==0){break}k=uA(m|0)|0;p=db(j,(k+2|0)+(uA(b|0)|0)|0,172208)|0;uB(p|0,m|0);k=uA(p|0)|0;f=(k|0)==0?0:k-1|0;k=a[p+f|0]|0;if(!((k<<24>>24|0)==47|(k<<24>>24|0)==0)){a[p+(f+1|0)|0]=47;a[p+(f+2|0)|0]=0}uC(p|0,b|0);q=bF(p|0,d|0)|0;if((q|0)==0){j=p}else{o=1361;break}}if((o|0)==1356){c[8774]=0;c[8778]=0}else if((o|0)==1361){uu(p);f=c[8776]|0;if((f|0)==0){h=q;break}while(1){k=c[8774]|0;do{if((k|0)==0){c[8774]=f;l=c[8778]|0;if((l|0)!=0){r=f;s=l;break}l=c[8780]|0;c[8778]=l;r=f;s=l}else{l=k+((uA(k|0)|0)+1|0)|0;c[8774]=l;r=l;s=c[8778]|0}}while(0);if(r>>>0>=s>>>0){break}if((r|0)==0|(f|0)==0){h=q;break L1890}}c[8774]=0;c[8778]=0;h=q;break}if((j|0)==0){h=0;break}uu(j);h=0}}while(0);g=h;i=e;return g|0}function hB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;if((a[b]|0)==60){uj(-1,168312,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}L1930:do{if((bF(b|0,193632)|0)==0){e=ur(8,0)|0;if((e|0)==0){f=0;break}else{g=e}while(1){h=bP(g|0)|0;e=h+((uA(h|0)|0)-1|0)|0;if((a[e]|0)==33){a[e]=0;j=1}else{j=0}k=hC(h,b,j)|0;if((k|0)!=0){break}uu(h);e=ur(8,0)|0;if((e|0)==0){f=0;break L1930}else{g=e}}do{}while((ur(8,0)|0)!=0);uu(h);f=k}else{if((b|0)==0){f=0;break}f=bP(b|0)|0}}while(0);i=d;return f|0}function hC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;f=i;i=i+72|0;g=f|0;h=uA(b|0)|0;j=(h+2|0)+(uA(d|0)|0)|0;h=ut(j)|0;do{if((h|0)==0){gk();k=ut(j)|0;if((k|0)!=0){l=k;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=223784,v)|0);return 0}else{l=h}}while(0);uB(l|0,b|0);h=uA(l|0)|0;j=(h|0)==0?0:h-1|0;h=a[l+j|0]|0;if(!((h<<24>>24|0)==47|(h<<24>>24|0)==0)){a[l+(j+1|0)|0]=47;a[l+(j+2|0)|0]=0}uC(l|0,d|0);j=bF(l|0,193632)|0;if((j|0)!=0){az(j|0);m=l;i=f;return m|0}uu(l);if(!e){m=0;i=f;return m|0}e=aW(b|0)|0;if((e|0)==0){m=0;i=f;return m|0}l=a3(e|0)|0;L1962:do{if((l|0)==0){n=0}else{j=g+8|0;h=l;while(1){k=uA(b|0)|0;o=h+4|0;p=(k+2|0)+(uA(o|0)|0)|0;k=ut(p)|0;if((k|0)==0){gk();q=ut(p)|0;if((q|0)==0){break}else{r=q}}else{r=k}uB(r|0,b|0);k=uA(r|0)|0;q=(k|0)==0?0:k-1|0;k=a[r+q|0]|0;if(!((k<<24>>24|0)==47|(k<<24>>24|0)==0)){a[r+(q+1|0)|0]=47;a[r+(q+2|0)|0]=0}uC(r|0,o|0);cu(r|0,g|0);do{if((c[j>>2]&61440|0)==16384){if((aY(o|0,202200)|0)==0){break}if((aY(o|0,221856)|0)==0){break}q=hC(r,d,1)|0;if((q|0)!=0){n=q;break L1962}}}while(0);uu(r);o=a3(e|0)|0;if((o|0)==0){n=0;break L1962}else{h=o}}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=223216,v)|0);return 0}}while(0);bR(e|0);m=n;i=f;return m|0}function hD(){var b=0,d=0,e=0,f=0,g=0,h=0;b=i;d=c[6958]|0;if((d|0)==0){e=c[m>>2]|0;aI(145512,32,1,e|0);i=b;return}e=(uA(d|0)|0)+11|0;d=c[6956]|0;if((d|0)==0){f=e}else{g=d;while(1){d=a[g]|0;if((d<<24>>24|0)==92|(d<<24>>24|0)==10){a[g]=32}else if((d<<24>>24|0)==0){break}g=g+1|0}f=(uA(c[6956]|0)|0)+e|0}e=ut(f)|0;do{if((e|0)==0){gk();g=ut(f)|0;if((g|0)!=0){h=g;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=216216,v)|0)}else{h=e}}while(0);e=a[37400]&1;a[37400]=0;f=c[6956]|0;be(h|0,149608,(v=i,i=i+16|0,c[v>>2]=c[6958],c[v+8>>2]=(f|0)!=0?f:179864,v)|0);dL(h);a[37400]=e;if(e<<24>>24==0){i=b;return}e=(a[13048]|0)!=0?13048:179864;cf(c[m>>2]|0,147624,(v=i,i=i+16|0,c[v>>2]=c[c[3524]>>2],c[v+8>>2]=e,v)|0);i=b;return}function hE(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0;d=i;i=i+48|0;e=d|0;f=d+24|0;g=c[13898]|0;j=c[1054]|0;k=c[j+(g*40&-1)+36>>2]|0;l=c[j+(g*40&-1)+32>>2]|0;m=(a[j+(g*40&-1)|0]&1)==0;g=(k|0)>0;j=c[10036]|0;n=43320;o=108448;L2002:while(1){L2004:do{if(!m){if(g){p=0;q=0;r=l;while(1){s=a[o+p|0]|0;if(s<<24>>24==(a[j+(p+r|0)|0]|0)){t=r;u=q}else{if(s<<24>>24!=36){break L2004}t=r-1|0;u=1}w=p+1|0;if((w|0)<(u+k|0)){p=w;q=u;r=t}else{break}}if((u|0)==0){x=w}else{y=n;break L2002}}else{x=0}r=a[o+x|0]|0;if((r<<24>>24|0)==36|(r<<24>>24|0)==0){y=n;break L2002}}}while(0);r=n+8|0;q=c[r>>2]|0;if((q|0)==0){y=r;break}else{n=r;o=q}}o=c[y+4>>2]|0;do{if((o|0)==11){c[b+24>>2]=1;y=(c[13898]|0)+1|0;c[13898]=y;n=c[1054]|0;x=c[n+(y*40&-1)+36>>2]|0;w=c[n+(y*40&-1)+32>>2]|0;u=(a[n+(y*40&-1)|0]&1)==0;y=(x|0)>0;n=c[10036]|0;t=43320;k=108448;L2019:while(1){L2021:do{if(!u){if(y){j=0;l=0;g=w;while(1){m=a[k+j|0]|0;if(m<<24>>24==(a[n+(j+g|0)|0]|0)){z=g;A=l}else{if(m<<24>>24!=36){break L2021}z=g-1|0;A=1}B=j+1|0;if((B|0)<(A+x|0)){j=B;l=A;g=z}else{break}}if((A|0)==0){C=B}else{D=t;break L2019}}else{C=0}g=a[k+C|0]|0;if((g<<24>>24|0)==36|(g<<24>>24|0)==0){D=t;break L2019}}}while(0);g=t+8|0;l=c[g>>2]|0;if((l|0)==0){D=g;break}else{t=g;k=l}}E=c[D+4>>2]|0}else{k=b+24|0;if((o|0)!=12){c[k>>2]=0;E=o;break}c[k>>2]=-1;k=(c[13898]|0)+1|0;c[13898]=k;t=c[1054]|0;x=c[t+(k*40&-1)+36>>2]|0;n=c[t+(k*40&-1)+32>>2]|0;w=(a[t+(k*40&-1)|0]&1)==0;k=(x|0)>0;t=c[10036]|0;y=43320;u=108448;L2038:while(1){L2040:do{if(!w){if(k){l=0;g=0;j=n;while(1){m=a[u+l|0]|0;if(m<<24>>24==(a[t+(l+j|0)|0]|0)){F=j;G=g}else{if(m<<24>>24!=36){break L2040}F=j-1|0;G=1}H=l+1|0;if((H|0)<(G+x|0)){l=H;g=G;j=F}else{break}}if((G|0)==0){I=H}else{J=y;break L2038}}else{I=0}j=a[u+I|0]|0;if((j<<24>>24|0)==36|(j<<24>>24|0)==0){J=y;break L2038}}}while(0);j=y+8|0;g=c[j>>2]|0;if((g|0)==0){J=j;break}else{y=j;u=g}}E=c[J+4>>2]|0}}while(0);J=b|0;if((E|0)==-1){c[J>>2]=0;i=d;return}c[J>>2]=1;c[13898]=(c[13898]|0)+1;J=b+4|0;c[J>>2]=E;I=b+8|0;h[I>>3]=0.0;H=c[13898]|0;if((c[8272]|0)<=(H|0)){i=d;return}G=c[1054]|0;if((a[G+(H*40&-1)|0]&1)==0){i=d;return}F=c[G+(H*40&-1)+36>>2]|0;o=G+(H*40&-1)+32|0;G=c[10036]|0;D=0;while(1){if((D|0)>=(F|0)){break}if((a[G+((c[o>>2]|0)+D|0)|0]|0)==(a[D+115e3|0]|0)){D=D+1|0}else{K=1504;break}}if((K|0)==1504){i=d;return}if((D|0)!=1){i=d;return}if((E|0)<9){c[J>>2]=E+4;L=c[13898]|0}else{L=H}c[13898]=L+1;L=is(e)|0;H=c[L>>2]|0;if((H|0)==1){M=+(c[L+8>>2]|0)}else if((H|0)==2){M=+h[L+8>>3]}else if((H|0)==3){M=+uz(c[L+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}L=e|0;if((c[L>>2]|0)==3){uu(c[e+8>>2]|0);c[L>>2]=1}h[I>>3]=M;if((E|0)!=9){i=d;return}E=c[13898]|0;if((c[8272]|0)<=(E|0)){uf(E,138448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}I=c[1054]|0;if((a[I+(E*40&-1)|0]&1)==0){uf(E,138448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}L=c[I+(E*40&-1)+36>>2]|0;e=I+(E*40&-1)+32|0;I=c[10036]|0;H=0;while(1){if((H|0)>=(L|0)){break}if((a[I+((c[e>>2]|0)+H|0)|0]|0)==(a[H+148464|0]|0)){H=H+1|0}else{K=1507;break}}if((K|0)==1507){uf(E,138448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((H|0)!=1){uf(E,138448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[13898]=E+1;E=is(f)|0;H=c[E>>2]|0;if((H|0)==1){N=+(c[E+8>>2]|0)}else if((H|0)==2){N=+h[E+8>>3]}else if((H|0)==3){N=+uz(c[E+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}E=f|0;if((c[E>>2]|0)==3){uu(c[f+8>>2]|0);c[E>>2]=1}h[b+16>>3]=N;i=d;return}function hF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0;d=i;if((c[a>>2]|0)==0){i=d;return}e=c[a+24>>2]|0;if((e|0)!=0){f=(e|0)>0?136888:134896;aI(f|0,6,1,b|0)}f=c[a+4>>2]|0;if((f|0)==0){aI(133384,6,1,b|0);i=d;return}if((f|0)<5){e=c[43320+(f<<3)>>2]|0;aK(e|0,b|0);i=d;return}if((f|0)<9){e=c[43320+(f-4<<3)>>2]|0;g=+h[a+8>>3];cf(b|0,131984,(v=i,i=i+16|0,c[v>>2]=e,h[v+8>>3]=g,v)|0);i=d;return}if((f|0)!=9){i=d;return}g=+h[a+16>>3];cf(b|0,130704,(v=i,i=i+16|0,h[v>>3]=+h[a+8>>3],h[v+8>>3]=g,v)|0);i=d;return}function hG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;d=i;i=i+56|0;e=d|0;f=e+40|0;g=f;h=b+16|0;c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];c[g+12>>2]=c[h+12>>2];h=f|0;g=c[h>>2]|0;if((g|0)==1){b=e+44|0;j=c[b>>2]|0;if((j|0)==-3){k=0;i=d;return k|0}l=c[8798]|0;m=(l|0)>0;n=j;L2142:while(1){o=n+1|0;j=43264;while(1){p=c[j>>2]|0;if((p|0)==0){break}if((c[p+4>>2]|0)==(o|0)){q=1535;break L2142}else{j=p|0}}if(!((o|0)>(l|0)&m)){q=1541;break}n=(n|0)%(l|0)&-1}do{if((q|0)==1535){l=e;m=p+8|0;c[l>>2]=c[m>>2];c[l+4>>2]=c[m+4>>2];c[l+8>>2]=c[m+8>>2];c[l+12>>2]=c[m+12>>2];c[l+16>>2]=c[m+16>>2];c[l+20>>2]=c[m+20>>2];c[l+24>>2]=c[m+24>>2];c[l+28>>2]=c[m+28>>2];c[l+32>>2]=c[m+32>>2];c[l+36>>2]=c[m+36>>2];c[l+40>>2]=c[m+40>>2];c[l+44>>2]=c[m+44>>2];c[l+48>>2]=c[m+48>>2];c[l+52>>2]=c[m+52>>2];if((c[(c[3524]|0)+96>>2]&1024|0)!=0){c[e+4>>2]=o;a[e+32|0]=0;break}if((a[e+32|0]&1)!=0){break}c[e+40>>2]=1;c[b>>2]=c[e+4>>2]}else if((q|0)==1541){c[e+4>>2]=n;c[e+40>>2]=1;c[b>>2]=n;c[e+8>>2]=n}}while(0);r=c[h>>2]|0}else{r=g}if((r|0)==0){k=1;i=d;return k|0}fn(f,c[3524]|0);k=1;i=d;return k|0}
+function hH(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0.0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aY=0,aZ=0,a_=0,a$=0,a0=0,a1=0,a2=0.0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,ba=0,bb=0,bc=0,bd=0,be=0,bf=0.0,bg=0,bh=0,bi=0,bj=0,bk=0,bl=0,bm=0,bn=0,bo=0.0,bp=0.0,bq=0.0,br=0,bs=0,bt=0,bu=0,bv=0,bw=0,bx=0,by=0.0,bz=0.0,bA=0,bB=0,bC=0,bD=0.0,bE=0.0,bF=0;f=i;i=i+272|0;g=f|0;j=f+24|0;k=f+48|0;l=f+72|0;m=f+96|0;n=f+120|0;o=f+144|0;p=f+168|0;q=f+192|0;r=f+216|0;s=r;t=b;c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];c[s+8>>2]=c[t+8>>2];c[s+12>>2]=c[t+12>>2];c[s+16>>2]=c[t+16>>2];c[s+20>>2]=c[t+20>>2];c[s+24>>2]=c[t+24>>2];c[s+28>>2]=c[t+28>>2];c[s+32>>2]=c[t+32>>2];c[s+36>>2]=c[t+36>>2];c[s+40>>2]=c[t+40>>2];c[s+44>>2]=c[t+44>>2];c[s+48>>2]=c[t+48>>2];c[s+52>>2]=c[t+52>>2];L2163:do{if(d){s=c[13898]|0;u=c[1054]|0;w=c[u+(s*40&-1)+36>>2]|0;x=c[u+(s*40&-1)+32>>2]|0;y=(a[u+(s*40&-1)|0]&1)==0;L2165:do{if((w|0)>0&(y^1)){u=c[10036]|0;z=0;A=0;B=x;while(1){if((a[z+73824|0]|0)==(a[u+(z+B|0)|0]|0)){C=B;D=A}else{if((z|0)!=5){E=1558;break L2165}C=B-1|0;D=1}F=z+1|0;if((F|0)<(D+w|0)){z=F;A=D;B=C}else{break}}if((D|0)!=0){break}if(!((z|0)==4|(z|0)==9)){E=1558}}else{E=1558}}while(0);if((E|0)==1558){if((c[8272]|0)<=(s|0)|y){break}B=c[10036]|0;A=0;while(1){if((A|0)>=(w|0)){break}if((a[B+(x+A|0)|0]|0)==(a[A+72816|0]|0)){A=A+1|0}else{break L2163}}if((A|0)!=2){break}}c[13898]=s+1;x=is(p)|0;B=c[x>>2]|0;if((B|0)==3){G=+uz(c[x+8>>2]|0,0)}else if((B|0)==1){G=+(c[x+8>>2]|0)}else if((B|0)==2){G=+h[x+8>>3]}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}x=p|0;if((c[x>>2]|0)==3){uu(c[p+8>>2]|0);c[x>>2]=1}lK(b,~~G)}}while(0);p=c[13898]|0;D=c[8272]|0;L2193:do{if((p|0)<(D|0)){C=n|0;x=n+8|0;B=r+12|0;w=q|0;y=q+8|0;u=m|0;F=m+8|0;H=r+24|0;I=g|0;J=g+8|0;K=r+8|0;L=j|0;M=j+8|0;N=r+16|0;O=r+32|0;P=r+40|0;Q=r+44|0;R=l|0;S=l+8|0;T=r+48|0;U=k|0;V=k+8|0;W=r+4|0;X=r+40|0;Y=o|0;Z=o+8|0;_=b+4|0;$=d^1;aa=b|0;ab=b+40|0;ac=b+44|0;ad=b+8|0;ae=b+32|0;G=0.0;af=0;ag=0;ah=0;ai=0;aj=0;ak=0;al=0;am=p;an=D;L2195:while(1){ao=c[1054]|0;ap=(a[ao+(am*40&-1)|0]&1)==0;aq=c[ao+(am*40&-1)+36>>2]|0;ar=ao+(am*40&-1)+32|0;L2197:do{if(ap){as=c[ar>>2]|0;E=1587}else{at=c[10036]|0;au=0;while(1){if((au|0)>=(aq|0)){E=1578;break}if((a[at+((c[ar>>2]|0)+au|0)|0]|0)==(a[au+103664|0]|0)){au=au+1|0}else{break}}if((E|0)==1578){E=0;if((au|0)==1){av=al;aw=aj;ax=ai;ay=ah;az=ag;aA=af;aB=ak;aC=am;break L2193}}at=c[ar>>2]|0;if(!((aq|0)>0&(ap^1))){as=at;E=1587;break}aD=c[10036]|0;aE=0;aF=0;aG=at;while(1){if((a[aE+139232|0]|0)==(a[aD+(aE+aG|0)|0]|0)){aH=aG;aI=aF}else{if((aE|0)!=5){as=at;E=1587;break L2197}aH=aG-1|0;aI=1}aJ=aE+1|0;if((aJ|0)<(aI+aq|0)){aE=aJ;aF=aI;aG=aH}else{break}}if((aI|0)!=0){E=1592;break}if((aE|0)==4|(aE|0)==8){E=1592}else{as=at;E=1587}}}while(0);L2215:do{if((E|0)==1587){E=0;if((an|0)<=(am|0)|ap){aK=al;aL=ag;aM=af;break}ar=c[10036]|0;z=0;while(1){if((z|0)>=(aq|0)){break}if((a[ar+(as+z|0)|0]|0)==(a[z+225056|0]|0)){z=z+1|0}else{aK=al;aL=ag;aM=af;break L2215}}if((z|0)==2){E=1592}else{aK=al;aL=ag;aM=af}}}while(0);L2222:do{if((E|0)==1592){E=0;aq=af+1|0;if((af|0)!=0){av=al;aw=aj;ax=ai;ay=ah;az=ag;aA=aq;aB=ak;aC=am;break L2193}ap=am+1|0;c[13898]=ap;ar=c[ao+(ap*40&-1)+36>>2]|0;at=c[ao+(ap*40&-1)+32>>2]|0;aE=(a[ao+(ap*40&-1)|0]&1)==0;L2225:do{if((ar|0)>0&(aE^1)){aG=c[10036]|0;aF=0;aD=0;au=at;while(1){if((a[aF+123456|0]|0)==(a[aG+(aF+au|0)|0]|0)){aN=au;aO=aD}else{if((aF|0)!=3){break}aN=au-1|0;aO=1}aJ=aF+1|0;if((aJ|0)<(aO+ar|0)){aF=aJ;aD=aO;au=aN}else{E=1599;break}}do{if((E|0)==1599){E=0;if((aO|0)==0){if(!((aF|0)==2|(aF|0)==8)){break}}au=ag+1|0;if((ag|0)!=0){av=al;aw=aj;ax=ai;ay=ah;az=au;aA=aq;aB=ak;aC=ap;break L2193}c[13898]=am;hI(X,3);a[O]=1;aK=al;aL=au;aM=aq;break L2222}}while(0);if(!((ar|0)>0&(aE^1))){break}aF=c[10036]|0;au=0;aD=0;aG=at;while(1){if((a[au+205488|0]|0)==(a[aF+(au+aG|0)|0]|0)){aP=aG;aQ=aD}else{if((au|0)!=3){break L2225}aP=aG-1|0;aQ=1}aJ=au+1|0;if((aJ|0)<(aQ+ar|0)){au=aJ;aD=aQ;aG=aP}else{break}}if((aQ|0)==0){if(!((au|0)==2|(au|0)==7)){break}}aG=ag+1|0;if((ag|0)!=0){av=al;aw=aj;ax=ai;ay=ah;az=aG;aA=aq;aB=ak;aC=ap;break L2193}c[13898]=am;hI(X,6);a[O]=1;aK=al;aL=aG;aM=aq;break L2222}}while(0);L2253:do{if(!((an|0)<=(ap|0)|aE)){z=c[10036]|0;aG=0;while(1){if((aG|0)>=(ar|0)){break}if((a[z+(at+aG|0)|0]|0)==(a[aG+120376|0]|0)){aG=aG+1|0}else{break L2253}}if((aG|0)!=4){break}c[t>>2]=c[14158];c[t+4>>2]=c[14159];c[t+8>>2]=c[14160];c[t+12>>2]=c[14161];c[t+16>>2]=c[14162];c[t+20>>2]=c[14163];c[t+24>>2]=c[14164];c[t+28>>2]=c[14165];c[t+32>>2]=c[14166];c[t+36>>2]=c[14167];c[t+40>>2]=c[14168];c[t+44>>2]=c[14169];c[t+48>>2]=c[14170];c[t+52>>2]=c[14171];c[13898]=(c[13898]|0)+1;aK=al;aL=ag;aM=aq;break L2222}}while(0);at=is(o)|0;ar=c[at>>2]|0;if((ar|0)==1){aR=+(c[at+8>>2]|0)}else if((ar|0)==2){aR=+h[at+8>>3]}else if((ar|0)==3){aR=+uz(c[at+8>>2]|0,0)}else{E=1623;break L2195}if((c[Y>>2]|0)==3){uu(c[Z>>2]|0);c[Y>>2]=1}at=~~aR;c[_>>2]=at-1;if(!((a[30080]&1)==0|$)){lK(b,at);aK=at;aL=ag;aM=aq;break}ar=c[aa>>2]|0;aE=c[8798]|0;ap=(aE|0)>0;z=at;L2272:while(1){au=43264;while(1){aS=c[au>>2]|0;if((aS|0)==0){break}if((c[aS+4>>2]|0)==(z|0)){break L2272}else{au=aS|0}}aT=z-1|0;if(!((z|0)>(aE|0)&ap)){E=1638;break}z=((aT|0)%(aE|0)&-1)+1|0}if((E|0)==1638){E=0;c[_>>2]=aT;c[ab>>2]=1;c[ac>>2]=aT;c[ad>>2]=aT;aK=at;aL=ag;aM=aq;break}aE=aS+8|0;c[t>>2]=c[aE>>2];c[t+4>>2]=c[aE+4>>2];c[t+8>>2]=c[aE+8>>2];c[t+12>>2]=c[aE+12>>2];c[t+16>>2]=c[aE+16>>2];c[t+20>>2]=c[aE+20>>2];c[t+24>>2]=c[aE+24>>2];c[t+28>>2]=c[aE+28>>2];c[t+32>>2]=c[aE+32>>2];c[t+36>>2]=c[aE+36>>2];c[t+40>>2]=c[aE+40>>2];c[t+44>>2]=c[aE+44>>2];c[t+48>>2]=c[aE+48>>2];c[t+52>>2]=c[aE+52>>2];c[aa>>2]=ar;if((c[(c[3524]|0)+96>>2]&1024|0)!=0){c[_>>2]=z;a[ae]=0;aK=at;aL=ag;aM=aq;break}if((a[ae]&1)!=0){aK=at;aL=ag;aM=aq;break}c[ab>>2]=1;c[ac>>2]=c[_>>2];aK=at;aL=ag;aM=aq}}while(0);ao=c[13898]|0;aE=c[1054]|0;ap=c[aE+(ao*40&-1)+36>>2]|0;au=c[aE+(ao*40&-1)+32>>2]|0;aG=(a[aE+(ao*40&-1)|0]&1)==0;L2287:do{if((ap|0)>0&(aG^1)){aD=c[10036]|0;aF=0;aJ=0;aU=au;while(1){if((a[aF+205488|0]|0)==(a[aD+(aF+aU|0)|0]|0)){aV=aU;aW=aJ}else{if((aF|0)!=3){E=1650;break L2287}aV=aU-1|0;aW=1}aX=aF+1|0;if((aX|0)<(aW+ap|0)){aF=aX;aJ=aW;aU=aV}else{break}}if((aW|0)==0){if(!((aF|0)==2|(aF|0)==7)){E=1650;break}}aU=aL+1|0;if((aL|0)!=0){av=aK;aw=aj;ax=ai;ay=ah;az=aU;aA=aM;aB=ak;aC=ao;break L2193}c[13898]=ao-1;hI(X,6);a[O]=1;aY=ak;aZ=aj;a_=ai;a$=ah;a0=aU;a1=aM;a2=G}else{E=1650}}while(0);L2300:do{if((E|0)==1650){E=0;aU=c[8272]|0;aJ=(aU|0)>(ao|0);L2302:do{if(aJ){if(aG){av=aK;aw=aj;ax=ai;ay=ah;az=aL;aA=aM;aB=ak;aC=ao;break L2193}aD=c[10036]|0;aq=0;while(1){if((aq|0)>=(ap|0)){break}if((a[aD+(au+aq|0)|0]|0)==(a[aq+119088|0]|0)){aq=aq+1|0}else{E=1656;break L2302}}if((aq|0)!=2){E=1656}}else{E=1656}}while(0);L2309:do{if((E|0)==1656){E=0;L2311:do{if((ap|0)>0&(aG^1)){aF=c[10036]|0;aD=0;at=0;z=au;while(1){if((a[aD+116144|0]|0)==(a[aF+(aD+z|0)|0]|0)){a3=z;a4=at}else{if((aD|0)!=5){break L2311}a3=z-1|0;a4=1}ar=aD+1|0;if((ar|0)<(a4+ap|0)){aD=ar;at=a4;z=a3}else{break}}if((a4|0)!=0){break L2309}if((aD|0)==4|(aD|0)==9){break L2309}}}while(0);L2322:do{if(aJ){if(aG){E=1746;break}aq=c[10036]|0;z=0;while(1){if((z|0)>=(ap|0)){break}if((a[aq+(au+z|0)|0]|0)==(a[z+179168|0]|0)){z=z+1|0}else{E=1670;break L2322}}if((z|0)==2){break L2309}else{E=1670}}else{E=1670}}while(0);L2329:do{if((E|0)==1670){E=0;if(!((ap|0)>0&(aG^1))){E=1746;break}aq=c[10036]|0;aD=0;at=0;aF=au;while(1){if((a[aD+178592|0]|0)==(a[aq+(aD+aF|0)|0]|0)){a5=aF;a6=at}else{if((aD|0)!=5){break}a5=aF-1|0;a6=1}ar=aD+1|0;if((ar|0)<(a6+ap|0)){aD=ar;at=a6;aF=a5}else{E=1676;break}}if((E|0)==1676){E=0;if((a6|0)!=0){break L2309}if((aD|0)==4|(aD|0)==9){break L2309}}if(!((ap|0)>0&(aG^1))){E=1746;break}aF=c[10036]|0;at=0;aq=0;z=au;while(1){if((a[at+128400|0]|0)==(a[aF+(at+z|0)|0]|0)){a7=z;a8=aq}else{if((at|0)!=5){E=1746;break L2329}a7=z-1|0;a8=1}ar=at+1|0;if((ar|0)<(a8+ap|0)){at=ar;aq=a8;z=a7}else{break}}if((a8|0)!=0){break}if(!((at|0)==4|(at|0)==9)){E=1746}}}while(0);L2351:do{if((E|0)==1746){E=0;L2353:do{if(aJ){if(aG){av=aK;aw=aj;ax=ai;ay=ah;az=aL;aA=aM;aB=ak;aC=ao;break L2193}z=c[10036]|0;aq=0;while(1){if((aq|0)>=(ap|0)){E=1751;break}if((a[z+(au+aq|0)|0]|0)==(a[aq+128296|0]|0)){aq=aq+1|0}else{break}}if((E|0)==1751){E=0;if((aq|0)==2){break L2351}}if(!aJ){break}if(aG){av=aK;aw=aj;ax=ai;ay=ah;az=aL;aA=aM;aB=ak;aC=ao;break L2193}z=c[10036]|0;aF=0;while(1){if((aF|0)>=(ap|0)){break}if((a[z+(au+aF|0)|0]|0)==(a[aF+120376|0]|0)){aF=aF+1|0}else{break L2353}}if((aF|0)!=4){break}z=aM+1|0;if((aM|0)!=0){av=aK;aw=aj;ax=ai;ay=ah;az=aL;aA=z;aB=ak;aC=ao;break L2193}c[13898]=ao+1;c[t>>2]=c[14158];c[t+4>>2]=c[14159];c[t+8>>2]=c[14160];c[t+12>>2]=c[14161];c[t+16>>2]=c[14162];c[t+20>>2]=c[14163];c[t+24>>2]=c[14164];c[t+28>>2]=c[14165];c[t+32>>2]=c[14166];c[t+36>>2]=c[14167];c[t+40>>2]=c[14168];c[t+44>>2]=c[14169];c[t+48>>2]=c[14170];c[t+52>>2]=c[14171];aY=ak;aZ=aj;a_=ai;a$=ah;a0=aL;a1=z;a2=G;break L2300}}while(0);L2371:do{if((ap|0)>0&(aG^1)){at=c[10036]|0;z=0;aq=0;aD=au;while(1){if((a[z+139064|0]|0)==(a[at+(z+aD|0)|0]|0)){a9=aD;ba=aq}else{if((z|0)!=6){E=1778;break L2371}a9=aD-1|0;ba=1}ar=z+1|0;if((ar|0)<(ba+ap|0)){z=ar;aq=ba;aD=a9}else{break}}if((ba|0)!=0){break}if(!((z|0)==5|(z|0)==9)){E=1778}}else{E=1778}}while(0);L2381:do{if((E|0)==1778){E=0;L2383:do{if(aJ){if(aG){av=aK;aw=aj;ax=ai;ay=ah;az=aL;aA=aM;aB=ak;aC=ao;break L2193}aD=c[10036]|0;aq=0;while(1){if((aq|0)>=(ap|0)){break}if((a[aD+(au+aq|0)|0]|0)==(a[aq+205624|0]|0)){aq=aq+1|0}else{break L2383}}if((aq|0)==2){break L2381}}}while(0);L2391:do{if((ap|0)>0&(aG^1)){z=c[10036]|0;aD=0;at=0;aF=au;while(1){if((a[aD+103928|0]|0)==(a[z+(aD+aF|0)|0]|0)){bb=aF;bc=at}else{if((aD|0)!=6){E=1803;break L2391}bb=aF-1|0;bc=1}ar=aD+1|0;if((ar|0)<(bc+ap|0)){aD=ar;at=bc;aF=bb}else{break}}if((bc|0)!=0){break}if(!((aD|0)==5|(aD|0)==9)){E=1803}}else{E=1803}}while(0);L2401:do{if((E|0)==1803){E=0;L2403:do{if(aJ){if(aG){E=1847;break}aF=c[10036]|0;at=0;while(1){if((at|0)>=(ap|0)){break}if((a[aF+(au+at|0)|0]|0)==(a[at+103560|0]|0)){at=at+1|0}else{E=1839;break L2403}}if((at|0)==2){break L2401}else{E=1839}}else{E=1839}}while(0);L2410:do{if((E|0)==1839){E=0;if(!((ap|0)>0&(aG^1))){E=1847;break}aD=c[10036]|0;aF=0;z=0;aq=au;while(1){if((a[aF+100112|0]|0)==(a[aD+(aF+aq|0)|0]|0)){bd=aq;be=z}else{if((aF|0)!=6){E=1847;break L2410}bd=aq-1|0;be=1}ar=aF+1|0;if((ar|0)<(be+ap|0)){aF=ar;z=be;aq=bd}else{break}}if((be|0)!=0){break}if(!((aF|0)==5|(aF|0)==13)){E=1847}}}while(0);if((E|0)==1847){E=0;if(!aJ){av=aK;aw=aj;ax=ai;ay=ah;az=aL;aA=aM;aB=ak;aC=ao;break L2193}if(aG){av=aK;aw=aj;ax=ai;ay=ah;az=aL;aA=aM;aB=ak;aC=ao;break L2193}aq=c[10036]|0;z=0;while(1){if((z|0)>=(ap|0)){break}if((a[aq+(au+z|0)|0]|0)==(a[z+99680|0]|0)){z=z+1|0}else{av=aK;aw=aj;ax=ai;ay=ah;az=aL;aA=aM;aB=ak;aC=ao;break L2193}}if((z|0)!=2){av=aK;aw=aj;ax=ai;ay=ah;az=aL;aA=aM;aB=ak;aC=ao;break L2193}}aq=ao+1|0;c[13898]=aq;if(!e){uh(aq,99224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);aq=is(q)|0;aD=c[aq>>2]|0;if((aD|0)==3){at=c[aq+8>>2]|0;uz(at,0)}else if(!((aD|0)==1|(aD|0)==2)){E=1864;break L2195}if((c[w>>2]|0)!=3){aY=ak;aZ=aj;a_=ai;a$=ah;a0=aL;a1=aM;a2=G;break L2300}uu(c[y>>2]|0);c[w>>2]=1;aY=ak;aZ=aj;a_=ai;a$=ah;a0=aL;a1=aM;a2=G;break L2300}aD=is(n)|0;at=c[aD>>2]|0;if((at|0)==2){bf=+h[aD+8>>3]}else if((at|0)==3){bf=+uz(c[aD+8>>2]|0,0)}else if((at|0)==1){bf=+(c[aD+8>>2]|0)}else{E=1858;break L2195}if((c[C>>2]|0)==3){uu(c[x>>2]|0);c[C>>2]=1}c[B>>2]=~~bf;aY=1;aZ=aj;a_=ai;a$=ah;a0=aL;a1=aM;a2=G;break L2300}}while(0);if(!e){uh(ao,100856,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);c[13898]=(c[13898]|0)+2;aY=ak;aZ=aj;a_=ai;a$=ah;a0=aL;a1=aM;a2=G;break L2300}aD=aj+1|0;if((aj|0)!=0){av=aK;aw=aD;ax=ai;ay=ah;az=aL;aA=aM;aB=ak;aC=ao;break L2193}at=ao+1|0;c[13898]=at;aq=c[aE+(at*40&-1)+36>>2]|0;ar=c[aE+(at*40&-1)+32>>2]|0;aX=(a[aE+(at*40&-1)|0]&1)==0;L2450:do{if((aq|0)>0&(aX^1)){at=c[10036]|0;bg=0;bh=0;bi=ar;while(1){if((a[bg+111056|0]|0)==(a[at+(bg+bi|0)|0]|0)){bj=bi;bk=bh}else{if((bg|0)!=3){break}bj=bi-1|0;bk=1}bl=bg+1|0;if((bl|0)<(bk+aq|0)){bg=bl;bh=bk;bi=bj}else{E=1817;break}}do{if((E|0)==1817){E=0;if((bk|0)==0){if(!((bg|0)==2|(bg|0)==8)){break}}h[H>>3]=-3.0;c[13898]=ao+2;aY=ak;aZ=aD;a_=ai;a$=ah;a0=aL;a1=aM;a2=G;break L2300}}while(0);if(!((aq|0)>0&(aX^1))){break}bg=c[10036]|0;bi=0;bh=0;at=ar;while(1){if((a[bi+184456|0]|0)==(a[bg+(bi+at|0)|0]|0)){bm=at;bn=bh}else{if((bi|0)!=3){break L2450}bm=at-1|0;bn=1}z=bi+1|0;if((z|0)<(bn+aq|0)){bi=z;bh=bn;at=bm}else{break}}if((bn|0)==0){if(!((bi|0)==2|(bi|0)==7)){break}}h[H>>3]=-2.0;c[13898]=ao+2;aY=ak;aZ=aD;a_=ai;a$=ah;a0=aL;a1=aM;a2=G;break L2300}}while(0);aq=is(m)|0;ar=c[aq>>2]|0;if((ar|0)==1){bo=+(c[aq+8>>2]|0)}else if((ar|0)==2){bo=+h[aq+8>>3]}else if((ar|0)==3){bo=+uz(c[aq+8>>2]|0,0)}else{E=1833;break L2195}if((c[u>>2]|0)==3){uu(c[F>>2]|0);c[u>>2]=1}h[H>>3]=bo;if(bo>=0.0){aY=ak;aZ=aD;a_=ai;a$=ah;a0=aL;a1=aM;a2=G;break L2300}h[H>>3]=0.0;aY=ak;aZ=aD;a_=ai;a$=ah;a0=aL;a1=aM;a2=G;break L2300}}while(0);if(!e){uh(ao,104432,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);c[13898]=(c[13898]|0)+2;aY=ak;aZ=aj;a_=ai;a$=ah;a0=aL;a1=aM;a2=G;break L2300}aq=ai+1|0;if((ai|0)!=0){av=aK;aw=aj;ax=aq;ay=ah;az=aL;aA=aM;aB=ak;aC=ao;break L2193}c[13898]=ao+1;ar=is(g)|0;aX=c[ar>>2]|0;if((aX|0)==1){bp=+(c[ar+8>>2]|0)}else if((aX|0)==2){bp=+h[ar+8>>3]}else if((aX|0)==3){bp=+uz(c[ar+8>>2]|0,0)}else{E=1790;break L2195}if((c[I>>2]|0)==3){uu(c[J>>2]|0);c[I>>2]=1}c[K>>2]=~~bp-1;aY=ak;aZ=aj;a_=aq;a$=ah;a0=aL;a1=aM;a2=G;break L2300}}while(0);aq=ah+1|0;if((ah|0)!=0){av=aK;aw=aj;ax=ai;ay=aq;az=aL;aA=aM;aB=ak;aC=ao;break L2193}c[13898]=ao+1;ar=is(j)|0;aX=c[ar>>2]|0;if((aX|0)==1){bq=+(c[ar+8>>2]|0)}else if((aX|0)==2){bq=+h[ar+8>>3]}else if((aX|0)==3){bq=+uz(c[ar+8>>2]|0,0)}else{E=1757;break L2195}if((c[L>>2]|0)==3){uu(c[M>>2]|0);c[L>>2]=1}h[N>>3]=bq;if(bq>=0.0){aY=ak;aZ=aj;a_=ai;a$=aq;a0=aL;a1=aM;a2=G;break L2300}h[N>>3]=0.0;aY=ak;aZ=aj;a_=ai;a$=aq;a0=aL;a1=aM;a2=G;break L2300}}while(0);a[O]=1;aJ=aL+1|0;if((aL|0)!=0){av=aK;aw=aj;ax=ai;ay=ah;az=aJ;aA=aM;aB=ak;aC=ao;break L2193}aq=ao+1|0;c[13898]=aq;ar=c[aE+(aq*40&-1)+36>>2]|0;aX=c[aE+(aq*40&-1)+32>>2]|0;at=(a[aE+(aq*40&-1)|0]&1)==0;L2511:do{if((ar|0)>0&(at^1)){bh=c[10036]|0;bg=0;z=0;bl=aX;while(1){if((a[bg+123456|0]|0)==(a[bh+(bg+bl|0)|0]|0)){br=bl;bs=z}else{if((bg|0)!=3){break}br=bl-1|0;bs=1}bt=bg+1|0;if((bt|0)<(bs+ar|0)){bg=bt;z=bs;bl=br}else{E=1685;break}}do{if((E|0)==1685){E=0;if((bs|0)==0){if(!((bg|0)==8|(bg|0)==2)){break}}c[13898]=ao;hI(X,3);aY=ak;aZ=aj;a_=ai;a$=ah;a0=aJ;a1=aM;a2=G;break L2300}}while(0);if(!((ar|0)>0&(at^1))){break}bg=c[10036]|0;bl=0;z=0;bh=aX;while(1){if((a[bl+205488|0]|0)==(a[bg+(bl+bh|0)|0]|0)){bu=bh;bv=z}else{if((bl|0)!=3){break L2511}bu=bh-1|0;bv=1}bt=bl+1|0;if((bt|0)<(bv+ar|0)){bl=bt;z=bv;bh=bu}else{break}}if((bv|0)==0){if(!((bl|0)==7|(bl|0)==2)){break}}c[13898]=ao;hI(X,6);aY=ak;aZ=aj;a_=ai;a$=ah;a0=aJ;a1=aM;a2=G;break L2300}}while(0);L2537:do{if((aU|0)>(aq|0)){if(at){break}bh=c[10036]|0;z=0;while(1){if((z|0)>=(ar|0)){break}if((a[bh+(aX+z|0)|0]|0)==(a[z+120376|0]|0)){z=z+1|0}else{E=1704;break L2537}}if((z|0)!=4){E=1704;break}c[P>>2]=1;c[Q>>2]=-4;c[13898]=ao+2;aY=ak;aZ=aj;a_=ai;a$=ah;a0=aJ;a1=aM;a2=G;break L2300}else{E=1704}}while(0);L2545:do{if((E|0)==1704){E=0;if(!((ar|0)>0&(at^1))){break}aq=c[10036]|0;aU=0;bh=0;bl=aX;while(1){if((a[aU+111056|0]|0)==(a[aq+(aU+bl|0)|0]|0)){bw=bl;bx=bh}else{if((aU|0)!=3){break L2545}bw=bl-1|0;bx=1}bg=aU+1|0;if((bg|0)<(bx+ar|0)){aU=bg;bh=bx;bl=bw}else{break}}if((bx|0)==0){if(!((aU|0)==2|(aU|0)==8)){break}}c[13898]=ao+2;c[W>>2]=-6;c[P>>2]=2;aY=ak;aZ=aj;a_=ai;a$=ah;a0=aJ;a1=aM;a2=G;break L2300}}while(0);if(!d){c[P>>2]=1;ar=is(k)|0;aX=c[ar>>2]|0;if((aX|0)==1){by=+(c[ar+8>>2]|0)}else if((aX|0)==2){by=+h[ar+8>>3]}else if((aX|0)==3){by=+uz(c[ar+8>>2]|0,0)}else{E=1734;break L2195}if((c[U>>2]|0)==3){uu(c[V>>2]|0);c[U>>2]=1}c[Q>>2]=~~by-1;aY=ak;aZ=aj;a_=ai;a$=ah;a0=aJ;a1=aM;a2=G;break}ar=is(l)|0;aX=c[ar>>2]|0;if((aX|0)==1){bz=+(c[ar+8>>2]|0)}else if((aX|0)==2){bz=+h[ar+8>>3]}else if((aX|0)==3){bz=+uz(c[ar+8>>2]|0,0)}else{E=1718;break L2195}if((c[R>>2]|0)==3){uu(c[S>>2]|0);c[R>>2]=1}ar=c[8798]|0;aX=(ar|0)>0;at=~~bz;L2578:while(1){bl=43264;while(1){bA=c[bl>>2]|0;if((bA|0)==0){break}if((c[bA+4>>2]|0)==(at|0)){E=1725;break L2578}else{bl=bA|0}}bl=at-1|0;if(!((at|0)>(ar|0)&aX)){bB=1;bC=bl;bD=G;break}at=((bl|0)%(ar|0)&-1)+1|0}do{if((E|0)==1725){E=0;ar=c[bA+48>>2]|0;at=c[bA+52>>2]|0;bE=+h[bA+56>>3];if((c[(c[3524]|0)+96>>2]&1024|0)!=0){bB=ar;bC=at;bD=bE;break}aX=(a[bA+40|0]&1)==0;bB=aX?1:ar;bC=aX?c[bA+12>>2]|0:at;bD=bE}}while(0);c[P>>2]=bB;c[Q>>2]=bC;h[T>>3]=bD;aY=ak;aZ=aj;a_=ai;a$=ah;a0=aJ;a1=aM;a2=bD}}while(0);ao=c[13898]|0;aE=c[8272]|0;if((ao|0)<(aE|0)){G=a2;af=a1;ag=a0;ah=a$;ai=a_;aj=aZ;ak=aY;al=aK;am=ao;an=aE}else{av=aK;aw=aZ;ax=a_;ay=a$;az=a0;aA=a1;aB=aY;aC=ao;break L2193}}if((E|0)==1757){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((E|0)==1623){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((E|0)==1718){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((E|0)==1858){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((E|0)==1864){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((E|0)==1790){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((E|0)==1734){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((E|0)==1833){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}}else{av=0;aw=0;ax=0;ay=0;az=0;aA=0;aB=0;aC=p}}while(0);if((aA|0)>1|(az|0)>1|(ay|0)>1|(ax|0)>1|(aw|0)>1){uf(aC,98720,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}if((az|0)==0){bF=av}else{av=b+40|0;az=r+40|0;c[av>>2]=c[az>>2];c[av+4>>2]=c[az+4>>2];c[av+8>>2]=c[az+8>>2];c[av+12>>2]=c[az+12>>2];a[b+32|0]=a[r+32|0]&1;bF=-8}if((ay|0)!=0){h[b+16>>3]=+h[r+16>>3]}if((ax|0)!=0){c[b+8>>2]=c[r+8>>2]}if((aw|0)!=0){h[b+24>>3]=+h[r+24>>3]}if((aB|0)!=0){c[b+12>>2]=c[r+12>>2]}if((c[r+4>>2]|0)!=-6){i=f;return bF|0}c[b+4>>2]=-6;i=f;return bF|0}function hI(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0.0,T=0,U=0,V=0.0,W=0.0,X=0,Y=0;e=i;i=i+96|0;f=e|0;g=e+24|0;j=e+48|0;k=e+72|0;l=c[13898]|0;m=l+1|0;c[13898]=m;n=c[8272]|0;if((m|0)>=(n|0)){uf(m,92096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}o=c[1054]|0;p=(a[o+(m*40&-1)|0]&1)==0;q=c[o+(m*40&-1)+36>>2]|0;r=o+(m*40&-1)+32|0;L2626:do{if(p){s=c[r>>2]|0}else{t=c[10036]|0;u=0;while(1){if((u|0)>=(q|0)){w=1890;break}if((a[t+((c[r>>2]|0)+u|0)|0]|0)==(a[u+103664|0]|0)){u=u+1|0}else{break}}do{if((w|0)==1890){if((u|0)!=1){break}uf(m,92096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);u=c[r>>2]|0;if(p){s=u;break}if((q|0)>0){t=c[10036]|0;x=0;y=0;z=u;while(1){if((a[x+184456|0]|0)==(a[t+(x+z|0)|0]|0)){A=z;B=y}else{if((x|0)!=3){break}A=z-1|0;B=1}C=x+1|0;if((C|0)<(B+q|0)){x=C;y=B;z=A}else{w=1899;break}}do{if((w|0)==1899){if((B|0)==0){if(!((x|0)==7|(x|0)==2)){break}}c[13898]=l+2;c[b>>2]=0;i=e;return}}while(0);if(p){s=u;break}}x=c[10036]|0;z=0;while(1){if((z|0)>=(q|0)){w=1906;break}if((a[x+(u+z|0)|0]|0)==(a[z+120376|0]|0)){z=z+1|0}else{break}}do{if((w|0)==1906){if((z|0)!=4){break}c[13898]=l+2;c[b>>2]=1;c[b+4>>2]=-4;i=e;return}}while(0);if(p){s=u;break}z=c[10036]|0;x=0;while(1){if((x|0)>=(q|0)){break}if((a[z+(u+x|0)|0]|0)==(a[x+225056|0]|0)){x=x+1|0}else{s=u;break L2626}}if((x|0)!=2){s=u;break}y=l+2|0;c[13898]=y;if((y|0)>=(n|0)){uf(y,91408,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}L2669:do{if((a[o+(y*40&-1)|0]&1)!=0){t=c[o+(y*40&-1)+36>>2]|0;C=o+(y*40&-1)+32|0;D=0;while(1){if((D|0)>=(t|0)){break}if((a[z+((c[C>>2]|0)+D|0)|0]|0)==(a[D+103664|0]|0)){D=D+1|0}else{break L2669}}if((D|0)!=1){break}uf(y,91408,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);y=b|0;c[y>>2]=1;z=is(j)|0;u=c[z>>2]|0;if((u|0)==1){E=+(c[z+8>>2]|0)}else if((u|0)==2){E=+h[z+8>>3]}else if((u|0)==3){E=+uz(c[z+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}z=j|0;if((c[z>>2]|0)==3){uu(c[j+8>>2]|0);c[z>>2]=1}z=~~E-1|0;c[b+4>>2]=z;if((z|0)>=-4){i=e;return}c[y>>2]=0;uh(c[13898]|0,90768,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);i=e;return}}while(0);if((d|0)<2){c[b>>2]=0;uf(c[13898]|0,90352,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}L2695:do{if(!p){j=c[10036]|0;B=0;while(1){if((B|0)>=(q|0)){w=1935;break}if((a[j+(s+B|0)|0]|0)==(a[B+72816|0]|0)){B=B+1|0}else{w=1936;break}}if((w|0)==1935){if((B|0)!=2){w=1936}}do{if((w|0)==1936){if(!((q|0)>0&(p^1))){break L2695}j=c[10036]|0;A=0;r=0;y=s;while(1){if((a[A+73824|0]|0)==(a[j+(A+y|0)|0]|0)){F=y;G=r}else{if((A|0)!=5){break}F=y-1|0;G=1}z=A+1|0;if((z|0)<(G+q|0)){A=z;r=G;y=F}else{w=1942;break}}if((w|0)==1942){if((G|0)!=0){break}if((A|0)==4|(A|0)==9){break}}if(p){break L2695}L2716:do{if((q|0)>0){y=c[10036]|0;r=0;j=0;D=s;while(1){if((a[r+123456|0]|0)==(a[y+(r+D|0)|0]|0)){H=D;I=j}else{if((r|0)!=3){break L2716}H=D-1|0;I=1}z=r+1|0;if((z|0)<(I+q|0)){r=z;j=I;D=H}else{break}}if((I|0)==0){if(!((r|0)==8|(r|0)==2)){break}}c[13898]=l+2;c[b>>2]=3;D=c[13898]|0;j=c[1054]|0;y=c[j+(D*40&-1)+36>>2]|0;z=c[j+(D*40&-1)+32>>2]|0;L2728:do{if((a[j+(D*40&-1)|0]&1)==0){w=1970}else{if((y|0)<=0){J=b+8|0;break}u=c[10036]|0;x=0;C=0;t=z;while(1){if((a[x+111056|0]|0)==(a[u+(x+t|0)|0]|0)){K=t;L=C}else{if((x|0)!=3){w=1970;break L2728}K=t-1|0;L=1}M=x+1|0;if((M|0)<(L+y|0)){x=M;C=L;t=K}else{break}}if((L|0)!=0|(M|0)==3){N=b+8|0}else{t=b+8|0;if((M|0)==9){N=t}else{J=t;break}}h[N>>3]=-1.0;c[13898]=(c[13898]|0)+1;i=e;return}}while(0);if((w|0)==1970){J=b+8|0}h[J>>3]=0.0;c[b+4>>2]=hK()|0;i=e;return}}while(0);if(!((q|0)>0&(p^1))){break L2695}A=c[10036]|0;y=0;z=0;D=s;while(1){if((a[y+205488|0]|0)==(a[A+(y+D|0)|0]|0)){O=D;P=z}else{if((y|0)!=3){break L2695}O=D-1|0;P=1}j=y+1|0;if((j|0)<(P+q|0)){y=j;z=P;D=O}else{break}}if((P|0)==0){if(!((y|0)==2|(y|0)==7)){break L2695}}D=l+2|0;c[13898]=D;z=(n|0)>(D|0);L2761:do{if(z){if((a[o+(D*40&-1)|0]&1)!=0){A=c[o+(D*40&-1)+36>>2]|0;j=o+(D*40&-1)+32|0;r=c[10036]|0;t=0;while(1){if((t|0)>=(A|0)){w=1988;break}if((a[r+((c[j>>2]|0)+t|0)|0]|0)==(a[t+77416|0]|0)){t=t+1|0}else{break}}do{if((w|0)==1988){if((t|0)!=1){break}j=b|0;if((d|0)<=5){c[j>>2]=0;uf(c[13898]|0,89200,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[j>>2]=6;c[13898]=(c[13898]|0)+1;i=e;return}}while(0);if(!z){w=1993;break}}t=a[o+(D*40&-1)|0]|0;if((t&1)==0){Q=t;break}j=c[o+(D*40&-1)+36>>2]|0;r=o+(D*40&-1)+32|0;A=c[10036]|0;C=0;while(1){if((C|0)>=(j|0)){break}if((a[A+((c[r>>2]|0)+C|0)|0]|0)==(a[C+88416|0]|0)){C=C+1|0}else{Q=t;break L2761}}if((C|0)!=2){Q=t;break}c[b>>2]=4;r=(c[13898]|0)+1|0;c[13898]=r;if((r|0)>=(c[8272]|0)){uf(r,87312,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}A=c[1054]|0;L2786:do{if((a[A+(r*40&-1)|0]&1)!=0){j=c[A+(r*40&-1)+36>>2]|0;x=A+(r*40&-1)+32|0;u=c[10036]|0;R=0;while(1){if((R|0)>=(j|0)){break}if((a[u+((c[x>>2]|0)+R|0)|0]|0)==(a[R+103664|0]|0)){R=R+1|0}else{break L2786}}if((R|0)!=1){break}uf(r,87312,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);r=is(f)|0;A=c[r>>2]|0;if((A|0)==1){S=+(c[r+8>>2]|0)}else if((A|0)==2){S=+h[r+8>>3]}else if((A|0)==3){S=+uz(c[r+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}r=f|0;if((c[r>>2]|0)==3){uu(c[f+8>>2]|0);c[r>>2]=1}h[b+8>>3]=S;i=e;return}else{w=1993}}while(0);if((w|0)==1993){Q=a[o+(D*40&-1)|0]|0}z=c[o+(D*40&-1)+36>>2]|0;L2807:do{if((Q&1)!=0&(z|0)>0){y=c[10036]|0;r=0;A=0;t=c[o+(D*40&-1)+32>>2]|0;while(1){if((a[r+204616|0]|0)==(a[y+(r+t|0)|0]|0)){T=t;U=A}else{if((r|0)!=4){break L2807}T=t-1|0;U=1}C=r+1|0;if((C|0)<(U+z|0)){r=C;A=U;t=T}else{break}}if((U|0)==0){if(!((r|0)==3|(r|0)==8)){break}}c[b>>2]=5;t=(c[13898]|0)+1|0;c[13898]=t;if((t|0)>=(c[8272]|0)){uf(t,85200,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}A=c[1054]|0;L2822:do{if((a[A+(t*40&-1)|0]&1)!=0){y=c[A+(t*40&-1)+36>>2]|0;C=A+(t*40&-1)+32|0;x=c[10036]|0;u=0;while(1){if((u|0)>=(y|0)){break}if((a[x+((c[C>>2]|0)+u|0)|0]|0)==(a[u+103664|0]|0)){u=u+1|0}else{break L2822}}if((u|0)!=1){break}uf(t,85200,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);t=is(k)|0;A=c[t>>2]|0;if((A|0)==1){V=+(c[t+8>>2]|0)}else if((A|0)==2){V=+h[t+8>>3]}else if((A|0)==3){V=+uz(c[t+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}t=k|0;if((c[t>>2]|0)==3){uu(c[k+8>>2]|0);c[t>>2]=1}h[b+8>>3]=V;if(V<0.0|V>1.0){uf(c[13898]|0,84296,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{i=e;return}}}while(0);if((d|0)<=5){i=e;return}c[b>>2]=6;i=e;return}}while(0);c[13898]=l+2;c[b>>2]=2;B=is(g)|0;z=c[B>>2]|0;if((z|0)==1){W=+(c[B+8>>2]|0)}else if((z|0)==2){W=+h[B+8>>3]}else if((z|0)==3){W=+uz(c[B+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}B=g|0;if((c[B>>2]|0)==3){uu(c[g+8>>2]|0);c[B>>2]=1}c[b+4>>2]=~~W;i=e;return}}while(0);if(!((q|0)>0&(((d|0)<7|p)^1))){uf(m,83704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}p=c[10036]|0;d=0;g=0;l=s;while(1){if((a[d+111056|0]|0)==(a[p+(d+l|0)|0]|0)){X=l;Y=g}else{if((d|0)!=3){w=2058;break}X=l-1|0;Y=1}s=d+1|0;if((s|0)<(Y+q|0)){d=s;g=Y;l=X}else{break}}if((w|0)==2058){uf(m,83704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}do{if((Y|0)==0){if((d|0)==2|(d|0)==8){break}uf(m,83704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);c[b>>2]=7;c[13898]=(c[13898]|0)+1;i=e;return}function hJ(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0.0,as=0,at=0,au=0,av=0.0,aw=0.0;j=i;i=i+72|0;k=g;g=i;i=i+16|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];k=j|0;l=j+24|0;m=j+48|0;n=b|0;c[n>>2]=d;d=b+4|0;c[d>>2]=e;e=b+8|0;c[e>>2]=f;f=b+16|0;o=f;p=g;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];p=c[13898]|0;o=c[8272]|0;if((p|0)>=(o|0)){i=j;return}g=c[1054]|0;q=(a[g+(p*40&-1)|0]&1)==0;if(q){i=j;return}r=c[g+(p*40&-1)+36>>2]|0;s=g+(p*40&-1)+32|0;t=c[10036]|0;u=0;while(1){if((u|0)>=(r|0)){w=2080;break}if((a[t+((c[s>>2]|0)+u|0)|0]|0)==(a[u+103664|0]|0)){u=u+1|0}else{w=2081;break}}do{if((w|0)==2080){if(!((u|0)==1|q)){break}i=j;return}else if((w|0)==2081){if(!q){break}i=j;return}}while(0);u=c[g+(p*40&-1)+36>>2]|0;s=g+(p*40&-1)+32|0;t=c[10036]|0;r=0;while(1){if((r|0)>=(u|0)){w=2085;break}if((a[t+((c[s>>2]|0)+r|0)|0]|0)==(a[r+116360|0]|0)){r=r+1|0}else{w=2086;break}}if((w|0)==2085){if((r|0)!=2){w=2086}}do{if((w|0)==2086){r=c[g+(p*40&-1)+36>>2]|0;if(!((r|0)>0&(q^1))){i=j;return}s=c[10036]|0;t=0;u=0;x=c[g+(p*40&-1)+32>>2]|0;while(1){if((a[t+121984|0]|0)==(a[s+(t+x|0)|0]|0)){y=x;z=u}else{if((t|0)!=4){w=2253;break}y=x-1|0;z=1}A=t+1|0;if((A|0)<(z+r|0)){t=A;u=z;x=y}else{break}}if((w|0)==2253){i=j;return}if((z|0)!=0){break}if((t|0)==3|(t|0)==9){break}i=j;return}}while(0);z=p+1|0;c[13898]=z;if((z|0)>=(o|0)){i=j;return}o=l|0;p=l+8|0;y=m|0;q=m+8|0;x=f|0;u=b+20|0;b=k|0;r=k+8|0;s=0;A=0;B=0;C=z;z=g;L2917:while(1){g=a[z+(C*40&-1)|0]|0;D=(g&1)==0;E=c[z+(C*40&-1)+36>>2]|0;F=z+(C*40&-1)+32|0;L2919:do{if(D){G=B;H=C;I=E;J=c[F>>2]|0;K=g}else{L=c[10036]|0;M=0;while(1){if((M|0)>=(E|0)){w=2101;break}if((a[L+((c[F>>2]|0)+M|0)|0]|0)==(a[M+103664|0]|0)){M=M+1|0}else{break}}if((w|0)==2101){w=0;if((M|0)==1){w=2256;break L2917}}L=c[F>>2]|0;if(!((E|0)>0&(D^1))){G=B;H=C;I=E;J=L;K=g;break}N=c[10036]|0;O=0;P=0;Q=L;while(1){if((a[O+96808|0]|0)==(a[N+(O+Q|0)|0]|0)){R=Q;S=P}else{if((O|0)!=5){G=B;H=C;I=E;J=L;K=g;break L2919}R=Q-1|0;S=1}T=O+1|0;if((T|0)<(S+E|0)){O=T;P=S;Q=R}else{break}}if((S|0)==0){if(!((O|0)==4|(O|0)==11)){G=B;H=C;I=E;J=L;K=g;break}}Q=C+1|0;c[13898]=Q;G=1;H=Q;I=c[z+(Q*40&-1)+36>>2]|0;J=c[z+(Q*40&-1)+32>>2]|0;K=a[z+(Q*40&-1)|0]|0}}while(0);g=(K&1)==0;L2940:do{if((I|0)>0&(g^1)){E=c[10036]|0;D=0;F=0;t=J;while(1){if((a[D+96336|0]|0)==(a[E+(D+t|0)|0]|0)){U=t;V=F}else{if((D|0)!=1){break}U=t-1|0;V=1}Q=D+1|0;if((Q|0)<(V+I|0)){D=Q;F=V;t=U}else{w=2117;break}}do{if((w|0)==2117){w=0;if((V|0)==0){if(!((D|0)==0|(D|0)==5)){break}}c[n>>2]=0;t=(c[13898]|0)+1|0;c[13898]=t;W=s;X=t;break L2940}}while(0);if(g){W=s;X=H;break}L2955:do{if((I|0)>0){D=c[10036]|0;t=0;F=0;E=J;while(1){if((a[t+115496|0]|0)==(a[D+(t+E|0)|0]|0)){Y=E;Z=F}else{if((t|0)!=1){break L2955}Y=E-1|0;Z=1}L=t+1|0;if((L|0)<(Z+I|0)){t=L;F=Z;E=Y}else{break}}if((Z|0)==0){if(!((t|0)==0|(t|0)==5)){break}}c[n>>2]=G?4:1;E=(c[13898]|0)+1|0;c[13898]=E;W=1;X=E;break L2940}}while(0);if(!((I|0)>0&(g^1))){W=s;X=H;break}E=c[10036]|0;F=0;D=0;L=J;while(1){if((a[F+95432|0]|0)==(a[E+(F+L|0)|0]|0)){_=L;$=D}else{if((F|0)!=1){W=s;X=H;break L2940}_=L-1|0;$=1}O=F+1|0;if((O|0)<($+I|0)){F=O;D=$;L=_}else{break}}if(($|0)==0){if(!((F|0)==0|(F|0)==7)){W=s;X=H;break}}c[n>>2]=G?5:2;L=(c[13898]|0)+1|0;c[13898]=L;W=1;X=L}else{W=s;X=H}}while(0);L2980:do{if((X|0)<(c[8272]|0)){g=c[1054]|0;L=(a[g+(X*40&-1)|0]&1)==0;D=c[g+(X*40&-1)+36>>2]|0;E=g+(X*40&-1)+32|0;L2982:do{if(L){aa=c[E>>2]|0}else{g=c[10036]|0;O=0;while(1){if((O|0)>=(D|0)){w=2145;break}if((a[g+((c[E>>2]|0)+O|0)|0]|0)==(a[O+103664|0]|0)){O=O+1|0}else{break}}if((w|0)==2145){w=0;if((O|0)==1){ab=A;break L2980}}g=c[E>>2]|0;if(!((D|0)>0&(L^1))){aa=g;break}t=c[10036]|0;Q=0;P=0;N=g;while(1){if((a[Q+141136|0]|0)==(a[t+(Q+N|0)|0]|0)){ac=N;ad=P}else{if((Q|0)!=2){break}ac=N-1|0;ad=1}M=Q+1|0;if((M|0)<(ad+D|0)){Q=M;P=ad;N=ac}else{w=2152;break}}do{if((w|0)==2152){w=0;if((ad|0)==0){if(!((Q|0)==1|(Q|0)==6)){break}}c[x>>2]=0;N=c[13898]|0;P=N+1|0;c[13898]=P;t=c[8272]|0;O=(t|0)>(P|0);M=c[1054]|0;T=a[M+(P*40&-1)|0]|0;L3003:do{if(O){if((T&1)==0){w=2160;break}ae=c[M+(P*40&-1)+36>>2]|0;af=M+(P*40&-1)+32|0;ag=c[10036]|0;ah=0;while(1){if((ah|0)>=(ae|0)){break}if((a[ag+((c[af>>2]|0)+ah|0)|0]|0)==(a[ah+202112|0]|0)){ah=ah+1|0}else{w=2160;break L3003}}if((ah|0)!=1){w=2160}}else{w=2160}}while(0);do{if((w|0)==2160){w=0;if((T&1)==0){break}af=c[M+(P*40&-1)+36>>2]|0;ag=M+(P*40&-1)+32|0;L3013:do{if((t|0)>(P|0)){ae=c[10036]|0;ai=0;while(1){if((ai|0)>=(af|0)){break}if((a[ae+((c[ag>>2]|0)+ai|0)|0]|0)==(a[ai+119088|0]|0)){ai=ai+1|0}else{w=2174;break L3013}}if((ai|0)!=2){w=2174}}else{w=2174}}while(0);L3019:do{if((w|0)==2174){w=0;ah=c[ag>>2]|0;L3021:do{if((af|0)>0){ae=c[10036]|0;aj=0;ak=0;al=ah;while(1){if((a[aj+116144|0]|0)==(a[ae+(aj+al|0)|0]|0)){am=al;an=ak}else{if((aj|0)!=5){break L3021}am=al-1|0;an=1}ao=aj+1|0;if((ao|0)<(an+af|0)){aj=ao;ak=an;al=am}else{break}}if((an|0)!=0){break L3019}if((aj|0)==4|(aj|0)==9){break L3019}}}while(0);L3032:do{if(O){ai=c[10036]|0;al=0;while(1){if((al|0)>=(af|0)){w=2187;break}if((a[ai+(ah+al|0)|0]|0)==(a[al+93664|0]|0)){al=al+1|0}else{break}}if((w|0)==2187){w=0;if((al|0)==3){break}}if(!O){w=2193;break}ai=c[10036]|0;aj=0;while(1){if((aj|0)>=(af|0)){break}if((a[ai+(ah+aj|0)|0]|0)==(a[aj+225056|0]|0)){aj=aj+1|0}else{w=2193;break L3032}}if((aj|0)!=2){w=2193}}else{w=2193}}while(0);do{if((w|0)==2193){w=0;if((af|0)<=0){ab=A;break L2980}ai=c[10036]|0;al=0;ak=0;ae=ah;while(1){if((a[al+139232|0]|0)==(a[ai+(al+ae|0)|0]|0)){ap=ae;aq=ak}else{if((al|0)!=5){ab=A;break L2980}ap=ae-1|0;aq=1}ao=al+1|0;if((ao|0)<(aq+af|0)){al=ao;ak=aq;ae=ap}else{break}}if((aq|0)!=0){break}if(!((al|0)==4|(al|0)==8)){ab=A;break L2980}}}while(0);c[13898]=N;hI(f,6);ab=A;break L2980}}while(0);hI(f,6);ab=A;break L2980}}while(0);c[x>>2]=1;N=is(k)|0;O=c[N>>2]|0;if((O|0)==1){ar=+(c[N+8>>2]|0)}else if((O|0)==2){ar=+h[N+8>>3]}else if((O|0)==3){ar=+uz(c[N+8>>2]|0,0)}else{w=2165;break L2917}if((c[b>>2]|0)==3){uu(c[r>>2]|0);c[b>>2]=1}c[u>>2]=~~ar-1;ab=A;break L2980}}while(0);if(!((D|0)>0&(L^1))){aa=g;break}Q=c[10036]|0;N=0;O=0;P=g;while(1){if((a[N+140856|0]|0)==(a[Q+(N+P|0)|0]|0)){as=P;at=O}else{if((N|0)!=4){aa=g;break L2982}as=P-1|0;at=1}t=N+1|0;if((t|0)<(at+D|0)){N=t;O=at;P=as}else{break}}if((at|0)==0){if(!((N|0)==3|(N|0)==8)){aa=g;break}}c[x>>2]=1;c[u>>2]=-3;c[13898]=(c[13898]|0)+1;ab=A;break L2980}}while(0);if(A|W^1){w=2258;break L2917}L3081:do{if(!L){E=c[10810]|0;if((E|0)==0){w=2259;break L2917}F=c[10036]|0;P=E;while(1){O=c[P+4>>2]|0;Q=0;while(1){if((Q|0)>=(D|0)){w=2220;break}if((a[F+(aa+Q|0)|0]|0)==(a[O+Q|0]|0)){Q=Q+1|0}else{break}}if((w|0)==2220){w=0;if((a[O+Q|0]|0)==0){w=2221;break}}t=c[P>>2]|0;if((t|0)==0){au=E;break}else{P=t}}do{if((w|0)==2221){w=0;if((a[P+8|0]&1)!=0){au=E;break}if((c[P+16>>2]|0)==1){break L3081}else{au=E}}}while(0);while(1){E=c[au+4>>2]|0;P=0;while(1){if((P|0)>=(D|0)){w=2227;break}if((a[F+(aa+P|0)|0]|0)==(a[E+P|0]|0)){P=P+1|0}else{break}}if((w|0)==2227){w=0;if((a[E+P|0]|0)==0){break}}Q=c[au>>2]|0;if((Q|0)==0){w=2261;break L2917}else{au=Q}}if((a[au+8|0]&1)!=0){w=2260;break L2917}if((c[au+16>>2]|0)!=2){w=2262;break L2917}}}while(0);D=c[n>>2]|0;if((D|0)==1|(D|0)==4){L=is(l)|0;F=c[L>>2]|0;if((F|0)==1){av=+(c[L+8>>2]|0)}else if((F|0)==2){av=+h[L+8>>3]}else if((F|0)==3){av=+uz(c[L+8>>2]|0,0)}else{w=2236;break L2917}if((c[o>>2]|0)==3){uu(c[p>>2]|0);c[o>>2]=1}L=~~(av*100.0+.5);F=(L|0)<0?0:L;c[d>>2]=(F|0)>100?100:F;ab=1;break}else if((D|0)==2|(D|0)==5){D=is(m)|0;F=c[D>>2]|0;if((F|0)==1){aw=+(c[D+8>>2]|0)}else if((F|0)==2){aw=+h[D+8>>3]}else if((F|0)==3){aw=+uz(c[D+8>>2]|0,0)}else{w=2244;break L2917}if((c[y>>2]|0)==3){uu(c[q>>2]|0);c[y>>2]=1}D=~~aw;c[e>>2]=(D|0)<0?0:D;ab=1;break}else{ab=0;break}}else{ab=A}}while(0);D=c[13898]|0;if((D|0)>=(c[8272]|0)){w=2257;break}s=W;A=ab;B=G;C=D;z=c[1054]|0}if((w|0)==2256){i=j;return}else if((w|0)==2257){i=j;return}else if((w|0)==2258){i=j;return}else if((w|0)==2259){i=j;return}else if((w|0)==2165){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((w|0)==2236){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((w|0)==2244){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((w|0)==2260){i=j;return}else if((w|0)==2261){i=j;return}else if((w|0)==2262){i=j;return}}function hK(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0.0;b=i;i=i+56|0;d=b|0;e=b+24|0;f=b+48|0;c[f>>2]=-2;g=c[13898]|0;j=c[1054]|0;k=c[j+(g*40&-1)+36>>2]|0;L3139:do{if((a[j+(g*40&-1)|0]&1)!=0&(k|0)>0){l=c[10036]|0;m=0;n=0;o=c[j+(g*40&-1)+32>>2]|0;while(1){if((a[m+123456|0]|0)==(a[l+(m+o|0)|0]|0)){p=o;q=n}else{if((m|0)!=3){r=g;break L3139}p=o-1|0;q=1}s=m+1|0;if((s|0)<(q+k|0)){m=s;n=q;o=p}else{break}}if((q|0)==0){if(!((m|0)==2|(m|0)==8)){r=g;break}}o=g-1|0;n=c[j+(o*40&-1)+36>>2]|0;if(!((a[j+(o*40&-1)|0]&1)!=0&(n|0)>0)){r=g;break}l=c[10036]|0;s=0;t=0;u=c[j+(o*40&-1)+32>>2]|0;while(1){if((a[s+170936|0]|0)==(a[l+(s+u|0)|0]|0)){w=u;x=t}else{if((s|0)!=4){r=g;break L3139}w=u-1|0;x=1}o=s+1|0;if((o|0)<(x+n|0)){s=o;t=x;u=w}else{break}}if((x|0)==0){if(!((s|0)==3|(s|0)==10)){r=g;break}}u=g+1|0;c[13898]=u;r=u}else{r=g}}while(0);L3163:do{if((r|0)<(c[8272]|0)){L3165:do{if((a[j+(r*40&-1)|0]&1)!=0){g=c[j+(r*40&-1)+36>>2]|0;x=j+(r*40&-1)+32|0;w=c[10036]|0;q=0;while(1){if((q|0)>=(g|0)){break}if((a[w+((c[x>>2]|0)+q|0)|0]|0)==(a[q+103664|0]|0)){q=q+1|0}else{break L3165}}if((q|0)==1){break L3163}}}while(0);a[14176]=1;is(d);a[14176]=0;if((c[d>>2]|0)!=3){c[13898]=r;break}s=c[d+8>>2]|0;if((s|0)==0){break}x=c[7642]|0;w=c[x>>2]|0;do{if((w|0)==0){c[f>>2]=-1;y=2296}else{g=0;p=-1;k=w;while(1){if((aY(s|0,k|0)|0)==0){z=g;break}u=(a_(s|0,k|0,uA(k|0)|0)|0)==0&(p|0)<0?g:p;t=g+1|0;n=c[x+(t<<3)>>2]|0;if((n|0)==0){z=u;break}else{g=t;p=u;k=n}}c[f>>2]=z;if((z|0)<=-1){y=2296;break}c[f>>2]=c[x+(z<<3)+4>>2]}}while(0);if((y|0)==2296){ca(s|0,81360,(v=i,i=i+8|0,c[v>>2]=f,v)|0)}uu(s);x=c[f>>2]|0;if((x|0)==-2){uf(c[13898]|0,79872,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else{A=x;i=b;return A|0}}}while(0);y=is(e)|0;z=c[y>>2]|0;if((z|0)==1){B=+(c[y+8>>2]|0)}else if((z|0)==2){B=+h[y+8>>3]}else if((z|0)==3){B=+uz(c[y+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}y=e|0;if((c[y>>2]|0)==3){uu(c[e+8>>2]|0);c[y>>2]=1}y=~~B;c[f>>2]=y;A=y;i=b;return A|0}function hL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0.0;e=i;i=i+64|0;f=e|0;g=e+24|0;j=c[13898]|0;L3201:do{if(d){k=c[1054]|0;l=c[k+(j*40&-1)+36>>2]|0;m=c[k+(j*40&-1)+32>>2]|0;n=(a[k+(j*40&-1)|0]&1)==0;L3204:do{if((l|0)>0&(n^1)){o=c[10036]|0;p=0;q=0;r=m;while(1){if((a[p+78616|0]|0)==(a[o+(p+r|0)|0]|0)){s=r;t=q}else{if((p|0)!=6){u=2320;break L3204}s=r-1|0;t=1}w=p+1|0;if((w|0)<(t+l|0)){p=w;q=t;r=s}else{break}}if((t|0)!=0){break}if(!((p|0)==5|(p|0)==10)){u=2320}}else{u=2320}}while(0);if((u|0)==2320){r=c[8272]|0;if((r|0)<=(j|0)|n){x=r;break}q=c[10036]|0;o=0;while(1){if((o|0)>=(l|0)){break}if((a[q+(m+o|0)|0]|0)==(a[o+124464|0]|0)){o=o+1|0}else{x=r;break L3201}}if((o|0)!=2){x=r;break}}m=j+1|0;c[13898]=m;q=c[k+(m*40&-1)+36>>2]|0;L3222:do{if((a[k+(m*40&-1)|0]&1)!=0&(q|0)>0){l=c[10036]|0;n=0;w=0;y=c[k+(m*40&-1)+32>>2]|0;while(1){if((a[n+111056|0]|0)==(a[l+(n+y|0)|0]|0)){z=y;A=w}else{if((n|0)!=3){break L3222}z=y-1|0;A=1}B=n+1|0;if((B|0)<(A+q|0)){n=B;w=A;y=z}else{break}}if((A|0)==0){if(!((n|0)==2|(n|0)==8)){break}}c[b>>2]=-3;c[13898]=(c[13898]|0)+1;i=e;return}}while(0);q=is(f)|0;m=c[q>>2]|0;if((m|0)==3){C=+uz(c[q+8>>2]|0,0)}else if((m|0)==2){C=+h[q+8>>3]}else if((m|0)==1){C=+(c[q+8>>2]|0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}q=f|0;if((c[q>>2]|0)==3){uu(c[f+8>>2]|0);c[q>>2]=1}q=~~C;m=43296;while(1){D=c[m>>2]|0;if((D|0)==0){u=2347;break}if((c[D+4>>2]|0)==(q|0)){u=2346;break}else{m=D|0}}if((u|0)==2346){uD(b|0,D+8|0,112);i=e;return}else if((u|0)==2347){c[b>>2]=-1;c[b+4>>2]=0;m=b+8|0;c[m>>2]=c[12872];c[m+4>>2]=c[12873];c[m+8>>2]=c[12874];c[m+12>>2]=c[12875];c[m+16>>2]=c[12876];c[m+20>>2]=c[12877];c[m+24>>2]=c[12878];c[m+28>>2]=c[12879];c[m+32>>2]=c[12880];c[m+36>>2]=c[12881];c[m+40>>2]=c[12882];c[m+44>>2]=c[12883];c[m+48>>2]=c[12884];c[m+52>>2]=c[12885];c[b+64>>2]=1;h[b+72>>3]=0.0;c[b+80>>2]=0;h[b+88>>3]=15.0;h[b+96>>3]=90.0;c[b+104>>2]=0;uh(-1,79128,(v=i,i=i+8|0,c[v>>2]=q,v)|0);i=e;return}}else{x=c[8272]|0}}while(0);L3254:do{if((j|0)<(x|0)){D=b+64|0;f=g+8|0;A=g+4|0;z=g|0;t=g+16|0;s=b+72|0;d=b+80|0;m=g+24|0;k=b+88|0;r=g+32|0;o=b+96|0;y=b+4|0;w=b+8|0;l=b+104|0;p=0;B=0;E=0;F=0;G=0;H=j;I=x;L3256:while(1){J=c[1054]|0;K=(a[J+(H*40&-1)|0]&1)==0;L3258:do{if(!K){L=c[J+(H*40&-1)+36>>2]|0;M=J+(H*40&-1)+32|0;N=c[10036]|0;O=0;while(1){if((O|0)>=(L|0)){break}if((a[N+((c[M>>2]|0)+O|0)|0]|0)==(a[O+103664|0]|0)){O=O+1|0}else{break L3258}}if((O|0)==1){P=G;Q=F;R=E;S=B;T=p;U=H;break L3254}}}while(0);n=(I|0)>(H|0);L3265:do{if(n){do{if(!K){M=c[J+(H*40&-1)+36>>2]|0;N=J+(H*40&-1)+32|0;L=c[10036]|0;V=0;while(1){if((V|0)>=(M|0)){u=2358;break}if((a[L+((c[N>>2]|0)+V|0)|0]|0)==(a[V+150816|0]|0)){V=V+1|0}else{break}}do{if((u|0)==2358){u=0;if((V|0)!=6){break}N=B+1|0;if((B|0)!=0){P=G;Q=F;R=E;S=N;T=p;U=H;break L3254}c[13898]=H+1;c[D>>2]=0;W=G;X=F;Y=E;Z=N;_=p;break L3265}}while(0);if(!n){u=2387;break L3265}if(K){break}V=c[J+(H*40&-1)+36>>2]|0;N=J+(H*40&-1)+32|0;L=c[10036]|0;M=0;while(1){if((M|0)>=(V|0)){u=2367;break}if((a[L+((c[N>>2]|0)+M|0)|0]|0)==(a[M+148912|0]|0)){M=M+1|0}else{break}}do{if((u|0)==2367){u=0;if((M|0)!=4){break}N=B+1|0;if((B|0)!=0){P=G;Q=F;R=E;S=N;T=p;U=H;break L3254}c[13898]=H+1;c[D>>2]=1;W=G;X=F;Y=E;Z=N;_=p;break L3265}}while(0);if(!n){u=2387;break L3265}if(K){break}M=c[J+(H*40&-1)+36>>2]|0;N=J+(H*40&-1)+32|0;L=c[10036]|0;V=0;while(1){if((V|0)>=(M|0)){u=2375;break}if((a[L+((c[N>>2]|0)+V|0)|0]|0)==(a[V+146928|0]|0)){V=V+1|0}else{break}}do{if((u|0)==2375){u=0;if((V|0)!=8){break}N=B+1|0;if((B|0)!=0){P=G;Q=F;R=E;S=N;T=p;U=H;break L3254}c[13898]=H+1;c[D>>2]=2;W=G;X=F;Y=E;Z=N;_=p;break L3265}}while(0);if(!n){u=2387;break L3265}if(K){break}V=c[J+(H*40&-1)+36>>2]|0;N=J+(H*40&-1)+32|0;L=c[10036]|0;M=0;while(1){if((M|0)>=(V|0)){break}if((a[L+((c[N>>2]|0)+M|0)|0]|0)==(a[M+144768|0]|0)){M=M+1|0}else{u=2387;break L3265}}if((M|0)!=5){u=2387;break L3265}N=B+1|0;if((B|0)!=0){P=G;Q=F;R=E;S=N;T=p;U=H;break L3254}c[13898]=H+1;c[D>>2]=3;W=G;X=F;Y=E;Z=N;_=p;break L3265}}while(0);$=c[J+(H*40&-1)+36>>2]|0;aa=c[J+(H*40&-1)+32>>2]|0;u=2397}else{u=2387}}while(0);L3306:do{if((u|0)==2387){u=0;O=c[J+(H*40&-1)+36>>2]|0;N=c[J+(H*40&-1)+32>>2]|0;if(!((O|0)>0&(K^1))){ab=O;ac=N;u=2415;break}L=c[10036]|0;V=0;ad=0;ae=N;while(1){if((a[V+75200|0]|0)==(a[L+(V+ae|0)|0]|0)){af=ae;ag=ad}else{if((V|0)!=4){$=O;aa=N;u=2397;break L3306}af=ae-1|0;ag=1}ah=V+1|0;if((ah|0)<(ag+O|0)){V=ah;ad=ag;ae=af}else{break}}if((ag|0)==0){if(!((V|0)==3|(V|0)==6)){$=O;aa=N;u=2397;break}}ae=F+1|0;if((F|0)!=0){P=G;Q=ae;R=E;S=B;T=p;U=H;break L3254}c[13898]=H+1;c[l>>2]=2;W=G;X=ae;Y=E;Z=B;_=p}}while(0);L3320:do{if((u|0)==2397){u=0;if(K){ab=$;ac=aa;u=2415;break}L3323:do{if(($|0)>0){ae=c[10036]|0;ad=0;do{if((a[ad+127904|0]|0)!=(a[ae+(ad+aa|0)|0]|0)){break L3323}ad=ad+1|0;}while((ad|0)<($|0));if((ad|0)!=5){break}ae=F+1|0;if((F|0)!=0){P=G;Q=ae;R=E;S=B;T=p;U=H;break L3254}c[13898]=H+1;c[l>>2]=1;W=G;X=ae;Y=E;Z=B;_=p;break L3320}}while(0);if(!(($|0)>0&(K^1))){ab=$;ac=aa;u=2415;break}N=c[10036]|0;O=0;V=0;ae=aa;while(1){if((a[O+74368|0]|0)==(a[N+(O+ae|0)|0]|0)){ai=ae;aj=V}else{if((O|0)!=6){ab=$;ac=aa;u=2415;break L3320}ai=ae-1|0;aj=1}M=O+1|0;if((M|0)<(aj+$|0)){O=M;V=aj;ae=ai}else{break}}if((aj|0)==0){if(!((O|0)==5|(O|0)==8)){ab=$;ac=aa;u=2415;break}}ae=F+1|0;if((F|0)!=0){P=G;Q=ae;R=E;S=B;T=p;U=H;break L3254}c[13898]=H+1;c[l>>2]=0;W=G;X=ae;Y=E;Z=B;_=p}}while(0);L3344:do{if((u|0)==2415){u=0;L3346:do{if(!(K|n^1)){ae=c[10036]|0;V=0;while(1){if((V|0)>=(ab|0)){u=2419;break}if((a[ae+(ac+V|0)|0]|0)==(a[V+130496|0]|0)){V=V+1|0}else{break}}do{if((u|0)==2419){u=0;if((V|0)!=4){break}ad=E+1|0;if((E|0)!=0){P=G;Q=F;R=ad;S=B;T=p;U=H;break L3254}c[f>>2]=0;c[A>>2]=0;c[z>>2]=0;ak=H+1|0;c[13898]=ak;if((ak|0)>=(I|0)){u=2454;break L3256}L3356:do{if((a[J+(ak*40&-1)|0]&1)!=0){N=c[J+(ak*40&-1)+36>>2]|0;M=J+(ak*40&-1)+32|0;L=0;while(1){if((L|0)>=(N|0)){break}if((a[ae+((c[M>>2]|0)+L|0)|0]|0)==(a[L+103664|0]|0)){L=L+1|0}else{break L3356}}if((L|0)==1){u=2453;break L3256}}}while(0);dl(g,0);h[s>>3]=+h[t>>3];c[d>>2]=c[z>>2];C=+h[m>>3];h[k>>3]=C;al=+h[r>>3];h[o>>3]=al;if(al>C){W=G;X=F;Y=ad;Z=B;_=p;break L3344}h[o>>3]=90.0;W=G;X=F;Y=ad;Z=B;_=p;break L3344}}while(0);if(K|n^1){break}ae=c[10036]|0;V=0;while(1){if((V|0)>=(ab|0)){u=2434;break}if((a[ae+(ac+V|0)|0]|0)==(a[V+150704|0]|0)){V=V+1|0}else{break}}do{if((u|0)==2434){u=0;if((V|0)!=4){break}ae=G+1|0;if((G|0)!=0){P=ae;Q=F;R=E;S=B;T=p;U=H;break L3254}c[13898]=H+1;c[y>>2]=0;W=ae;X=F;Y=E;Z=B;_=p;break L3344}}while(0);if(K|n^1){break}V=c[10036]|0;ae=0;while(1){if((ae|0)>=(ab|0)){break}if((a[V+(ac+ae|0)|0]|0)==(a[ae+150856|0]|0)){ae=ae+1|0}else{break L3346}}if((ae|0)!=5){break}V=G+1|0;if((G|0)!=0){P=V;Q=F;R=E;S=B;T=p;U=H;break L3254}c[13898]=H+1;c[y>>2]=1;W=V;X=F;Y=E;Z=B;_=p;break L3344}}while(0);hH(w,1,0);O=c[13898]|0;if((H|0)==(O|0)){P=G;Q=F;R=E;S=B;T=p;U=H;break L3254}V=p+1|0;if((p|0)==0){W=G;X=F;Y=E;Z=B;_=V}else{P=G;Q=F;R=E;S=B;T=V;U=O;break L3254}}}while(0);n=c[13898]|0;K=c[8272]|0;if((n|0)<(K|0)){p=_;B=Z;E=Y;F=X;G=W;H=n;I=K}else{P=W;Q=X;R=Y;S=Z;T=_;U=n;break L3254}}if((u|0)==2453){uf(ak,73632,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==2454){uf(ak,73632,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}else{P=0;Q=0;R=0;S=0;T=0;U=j}}while(0);if((P|0)>1|(T|0)>1|(S|0)>1|(R|0)>1|(Q|0)>1){uf(U,98720,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{i=e;return}}function hM(){var b=0,d=0,e=0,f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0.0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Z=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0.0,af=0,ag=0.0,ah=0,ai=0.0,aj=0.0;b=i;i=i+1032|0;d=b|0;e=b+48|0;f=b+96|0;j=b+144|0;k=b+192|0;l=b+448|0;m=b+520|0;n=b+776|0;o=m|0;p=n|0;if((a[14080]&1)==0){i=b;return}L3395:do{if((c[8496]|0)==0){a[o]=0}else{do{if((a[37384]&1)!=0){if(+P(+(+aX(+(+g[3536]),90.0)))<.1){if(+P(+(+aX(+(+g[3538]),180.0)))<.1){break}}a[p]=0;q=n+(uA(p|0)|0)|0;a[q]=a[147088]|0;a[q+1|0]=a[147089|0]|0;a[q+2|0]=a[147090|0]|0;a[q+3|0]=a[147091|0]|0;a[q+4|0]=a[147092|0]|0;a[q+5|0]=a[147093|0]|0;a[q+6|0]=a[147094|0]|0;q=c[8503]|0;uC(p|0,q|0);q=n+(uA(p|0)|0)|0;a[q]=a[86120]|0;a[q+1|0]=a[86121|0]|0;a[q+2|0]=a[86122|0]|0;q=c[8503]|0;uC(p|0,q|0);uD(n+(uA(p|0)|0)|0,146840,11);q=c[8503]|0;uC(p|0,q|0);q=n+(uA(p|0)|0)|0;a[q]=a[86120]|0;a[q+1|0]=a[86121|0]|0;a[q+2|0]=a[86122|0]|0;q=c[8503]|0;uC(p|0,q|0);r=+g[3538];s=+g[3536];t=+g[3534];u=+g[3532];be(o|0,p|0,(v=i,i=i+32|0,h[v>>3]=r,h[v+8>>3]=s,h[v+16>>3]=t,h[v+24>>3]=u,v)|0);break L3395}}while(0);do{if((c[17261]&3|0)==0){if((c[17089]&3|0)!=0){break}q=iq(o,+h[3470],+h[3468],c[8506]|0,c[8510]|0)|0;if((a[26192]&1)==0){break L3395}u=+h[3470];t=+h[3468];x=k|0;y=l|0;uD(x|0,236632,255);z=c[8503]|0;uC(x|0,z|0);z=k+(uA(x|0)|0)|0;a[z]=a[86120]|0;a[z+1|0]=a[86121|0]|0;a[z+2|0]=a[86122|0]|0;z=c[8503]|0;uC(x|0,z|0);uD(k+(uA(x|0)|0)|0,145e3,14);z=c[8503]|0;uC(x|0,z|0);z=k+(uA(x|0)|0)|0;a[z]=a[86120]|0;a[z+1|0]=a[86121|0]|0;a[z+2|0]=a[86122|0]|0;z=c[8503]|0;uC(x|0,z|0);s=+h[3275];do{if((a[66164]&1)==0){A=u-s}else{if(s==0.0){A=99999.0;break}A=u/s}}while(0);r=+h[3276];do{if((a[65476]&1)==0){B=t-r}else{if(r==0.0){B=99999.0;break}B=t/r}}while(0);be(q|0,x|0,(v=i,i=i+32|0,h[v>>3]=s,h[v+8>>3]=r,h[v+16>>3]=A,h[v+24>>3]=B,v)|0);if((c[8500]|0)==0){break L3395}z=(a[66164]&1)==0;if(z){C=u}else{D=+_(+u);C=D/+h[8272]}E=(a[65476]&1)==0;if(E){F=t}else{D=+_(+t);F=D/+h[8186]}D=+h[3275];if(z){G=D}else{H=+_(+D);G=H/+h[8272]}H=+h[3276];if(E){I=H}else{D=+_(+H);I=D/+h[8186]}a[x]=0;E=k+(uA(x|0)|0)|0;a[E]=a[126656]|0;a[E+1|0]=a[126657|0]|0;a[E+2|0]=a[126658|0]|0;E=c[8503]|0;uC(x|0,E|0);D=C-G;H=F-I;J=+Q(+(D*D+H*H));if((c[8500]|0)==1){K=+Y(+H,+D)*57.29577951308232;uD(k+(uA(x|0)|0)|0,144496,13);L=K}else{if(D==0.0){M=H>0.0?8.988465674311579e+307:-8.988465674311579e+307}else{M=H/D}E=k+(uA(x|0)|0)|0;z=c[8503]|0;be(E|0,144344,(v=i,i=i+8|0,c[v>>2]=z,v)|0);L=M}be(y|0,x|0,(v=i,i=i+16|0,h[v>>3]=J,h[v+8>>3]=L,v)|0);uC(q|0,y|0);break L3395}}while(0);if((c[16573]&3|0)==0){N=o}else{z=m+2|0;a[o]=a[146632]|0;a[o+1|0]=a[146633|0]|0;a[o+2|0]=a[146634|0]|0;J=+h[3470];if(J<8.988465674311579e+307){if((c[16546]|0)==1){E=c9(2)|0;R=a8(E|0,10)|0;if((R|0)!=0){S=R;do{a[S]=32;S=a8(E|0,10)|0;}while((S|0)!=0)}D=+h[3470];t3(j,D);H=D- +O(+D);t4(z,40,E,j,H)}else{S=c[8503]|0;be(z|0,S|0,(v=i,i=i+8|0,h[v>>3]=J,v)|0)}T=m+((uA(z|0)|0)+2|0)|0}else{T=z}a[T]=32;N=T+1|0}if((c[16401]&3|0)==0){U=N}else{S=N+2|0;a[N]=a[146472]|0;a[N+1|0]=a[146473|0]|0;a[N+2|0]=a[146474|0]|0;H=+h[3468];if(H<8.988465674311579e+307){if((c[16374]|0)==1){R=c9(1)|0;V=a8(R|0,10)|0;if((V|0)!=0){W=V;do{a[W]=32;W=a8(R|0,10)|0;}while((W|0)!=0)}J=+h[3468];t3(f,J);D=J- +O(+J);t4(S,40,R,f,D)}else{W=c[8503]|0;be(S|0,W|0,(v=i,i=i+8|0,h[v>>3]=H,v)|0)}X=N+((uA(S|0)|0)+2|0)|0}else{X=S}a[X]=32;U=X+1|0}if((c[17261]&3|0)==0){Z=U}else{W=U+3|0;z=U;w=4010616;a[z]=w&255;w=w>>8;a[z+1|0]=w&255;w=w>>8;a[z+2|0]=w&255;w=w>>8;a[z+3|0]=w&255;D=+h[3469];if(D<8.988465674311579e+307){if((c[17234]|0)==1){z=c9(6)|0;E=a8(z|0,10)|0;if((E|0)!=0){V=E;do{a[V]=32;V=a8(z|0,10)|0;}while((V|0)!=0)}H=+h[3469];t3(e,H);J=H- +O(+H);t4(W,40,z,e,J)}else{V=c[8503]|0;be(W|0,V|0,(v=i,i=i+8|0,h[v>>3]=D,v)|0)}$=U+((uA(W|0)|0)+3|0)|0}else{$=W}a[$]=32;Z=$+1|0}if((c[17089]&3|0)==0){aa=Z}else{V=Z+3|0;S=Z;w=4010617;a[S]=w&255;w=w>>8;a[S+1|0]=w&255;w=w>>8;a[S+2|0]=w&255;w=w>>8;a[S+3|0]=w&255;J=+h[3467];if(J<8.988465674311579e+307){if((c[17062]|0)==1){S=c9(5)|0;R=a8(S|0,10)|0;if((R|0)!=0){E=R;do{a[E]=32;E=a8(S|0,10)|0;}while((E|0)!=0)}D=+h[3467];t3(d,D);H=D- +O(+D);t4(V,40,S,d,H)}else{E=c[8503]|0;be(V|0,E|0,(v=i,i=i+8|0,h[v>>3]=J,v)|0)}ab=Z+((uA(V|0)|0)+3|0)|0}else{ab=V}a[ab]=32;aa=ab+1|0}do{if((a[26192]&1)==0){ac=aa}else{if((c[16573]&3|0)==0){ad=aa}else{E=aa;w=4028516;a[E]=w&255;w=w>>8;a[E+1|0]=w&255;w=w>>8;a[E+2|0]=w&255;w=w>>8;a[E+3|0]=w&255;E=aa+3|0;W=c[8503]|0;do{if((a[66164]&1)==0){ae=+h[3470]- +h[3275]}else{H=+h[3275];if(H==0.0){ae=99999.0;break}ae=+h[3470]/H}}while(0);be(E|0,W|0,(v=i,i=i+8|0,h[v>>3]=ae,v)|0);ad=aa+(uA(aa|0)|0)|0}if((c[16401]&3|0)==0){af=ad}else{y=ad;w=4028772;a[y]=w&255;w=w>>8;a[y+1|0]=w&255;w=w>>8;a[y+2|0]=w&255;w=w>>8;a[y+3|0]=w&255;y=ad+3|0;q=c[8503]|0;do{if((a[65476]&1)==0){ag=+h[3468]- +h[3276]}else{t=+h[3276];if(t==0.0){ag=99999.0;break}ag=+h[3468]/t}}while(0);be(y|0,q|0,(v=i,i=i+8|0,h[v>>3]=ag,v)|0);af=ad+(uA(ad|0)|0)|0}if((c[17261]&3|0)==0){ah=af}else{a[af]=a[145552]|0;a[af+1|0]=a[145553|0]|0;a[af+2|0]=a[145554|0]|0;a[af+3|0]=a[145555|0]|0;a[af+4|0]=a[145556|0]|0;W=af+4|0;E=c[8503]|0;do{if((a[68916]&1)==0){ai=+h[3469]- +h[3277]}else{t=+h[3277];if(t==0.0){ai=99999.0;break}ai=+h[3469]/t}}while(0);be(W|0,E|0,(v=i,i=i+8|0,h[v>>3]=ai,v)|0);ah=af+(uA(af|0)|0)|0}if((c[17089]&3|0)==0){ac=ah;break}a[ah]=a[145256]|0;a[ah+1|0]=a[145257|0]|0;a[ah+2|0]=a[145258|0]|0;a[ah+3|0]=a[145259|0]|0;a[ah+4|0]=a[145260|0]|0;q=ah+4|0;y=c[8503]|0;do{if((a[68228]&1)==0){aj=+h[3467]- +h[3278]}else{t=+h[3278];if(t==0.0){aj=99999.0;break}aj=+h[3467]/t}}while(0);be(q|0,y|0,(v=i,i=i+8|0,h[v>>3]=aj,v)|0);ac=ah+(uA(ah|0)|0)|0}}while(0);a[ac-1|0]=0}}while(0);ac=c[(c[3524]|0)+120>>2]|0;if((ac|0)==0){i=b;return}cN[ac&255](0,o);i=b;return}function hN(b,d,e,f,g,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0.0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0;j=(a[37384]&1)==0;do{if(j){if((c[7939]|0)==(c[7938]|0)){h[g>>3]=8.988465674311579e+307;h[e>>3]=8.988465674311579e+307}else{k=+(b|0);h[e>>3]=(k- +(c[16536]|0))/+h[8269]+ +h[8255];h[g>>3]=(k- +(c[17224]|0))/+h[8613]+ +h[8599]}if((c[7941]|0)==(c[7940]|0)){h[i>>3]=8.988465674311579e+307;h[f>>3]=8.988465674311579e+307;break}else{k=+(d|0);h[f>>3]=(k- +(c[16364]|0))/+h[8183]+ +h[8169];h[i>>3]=(k- +(c[17052]|0))/+h[8527]+ +h[8513];break}}else{l=b-(c[18064]|0)|0;m=d-(c[18062]|0)|0;n=c[18060]|0;o=c[18058]|0;do{if((((n|0)>-1?n:-n|0)|0)>(((o|0)>-1?o:-o|0)|0)){k=+h[8255];h[e>>3]=k+ +(l|0)/+(n|0)*(+h[8256]-k)}else{if((o|0)==0){h[e>>3]=8.988465674311579e+307;break}else{k=+h[8255];h[e>>3]=k+ +(m|0)/+(o|0)*(+h[8256]-k);break}}}while(0);o=c[18056]|0;n=c[18054]|0;do{if((((o|0)>-1?o:-o|0)|0)>(((n|0)>-1?n:-n|0)|0)){k=+h[8169];h[f>>3]=k+ +(l|0)/+(o|0)*(+h[8170]-k)}else{if((n|0)==0){h[f>>3]=8.988465674311579e+307;break}else{k=+h[8169];h[f>>3]=k+ +(m|0)/+(n|0)*(+h[8170]-k);break}}}while(0);h[i>>3]=8.988465674311579e+307;h[g>>3]=8.988465674311579e+307}}while(0);k=+h[e>>3];if((a[66164]&1)==0){p=k}else{p=+Z(+(k*+h[8272]))}h[e>>3]=p;p=+h[f>>3];if((a[65476]&1)==0){q=p}else{q=+Z(+(p*+h[8186]))}h[f>>3]=q;if(!j){return}q=+h[g>>3];if((a[68916]&1)==0){r=q}else{r=+Z(+(q*+h[8616]))}h[g>>3]=r;r=+h[i>>3];if((a[68228]&1)==0){s=r}else{s=+Z(+(r*+h[8530]))}h[i>>3]=s;return}function hO(b){b=b|0;var d=0,e=0;c[8512]=0;c[14056]=0;do{if((b|0)!=0){if(!(a[21856]|0)){break}d=c[(c[3524]|0)+128>>2]|0;if((d|0)!=0){cR[d&127](0,0,0)}a[21856]=0;if((c[8501]|0)==0){break}d=c[m>>2]|0;aI(147352,19,1,d|0)}}while(0);d=c[3524]|0;do{if((d|0)!=0){e=c[d+128>>2]|0;if((e|0)==0){break}cR[e&127](0,0,0);if((c[8498]|0)==0){break}e=c[(c[3524]|0)+120>>2]|0;if((e|0)==0){break}cN[e&255](1,179864);cN[c[(c[3524]|0)+120>>2]&255](2,179864)}}while(0);do{if((c[8026]|0)!=0){c[8026]=0;d=c[3524]|0;if((d|0)==0){break}e=c[d>>2]|0;if((a_(222936,e|0,3)|0)!=0){if((a_(163e3,e|0,3)|0)!=0){break}}e=c[o>>2]|0;b6(10,e|0)}}while(0);if((b|0)==1){return}c[b+12>>2]=1062;c[b+16>>2]=0;hQ(b,1);return}function hP(b){b=b|0;var d=0;if((b|0)==0){d=147656;return d|0}if(!(a[21856]|0)){d=0;return d|0}b=c[(c[3524]|0)+128>>2]|0;if((b|0)!=0){cR[b&127](0,0,0)}a[21856]=0;if((c[8501]|0)==0){d=0;return d|0}aI(147352,19,1,c[m>>2]|0);d=0;return d|0}function hQ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;e=i;f=c[b+12>>2]|0;g=c[b+16>>2]|0;h=c[b+4>>2]|0;j=c[b+8>>2]|0;if((c[14128]|0)==0){hS()}k=c[8512]|0;do{if((k&1|0)==0){l=f;n=k&255}else{if((f&255|0)!=0){l=f;n=k&255;break}o=bC(f|0)|0;l=o;n=c[8512]&255}}while(0);if(!((l|0)<1|(c[8026]&8|0)==0|d^1)){ir(+(h|0),+(j|0),0,l);i=e;return}f=c[14128]|0;if((f|0)==0){i=e;return}k=(g&1|0)==0;g=b+20|0;o=f;L3631:while(1){do{if((l|0)==(c[o+4>>2]|0)){if(((a[o+8|0]^n)&6)!=0){break}f=e6(147896)|0;if((f|0)!=0){a[f+8|0]=0;p=c[g>>2]|0;c[f+16>>2]=1;c[f+24>>2]=p}if((a[o+20|0]&1)!=0){q=o+12|0;if((c[q>>2]|0)!=0){r=2635;break L3631}}if(!d){r=2655;break L3631}if(k){s=c[o+12>>2]|0;if((s|0)!=0){r=2644;break L3631}}p=c[o+16>>2]|0;if((p|0)==0){f=c[m>>2]|0;cf(f|0,123008,(v=i,i=i+16|0,c[v>>2]=105800,c[v+8>>2]=1370,v)|0);break}else{cO[p&255](b);break}}}while(0);p=c[o+24>>2]|0;if((p|0)==0){r=2652;break}else{o=p}}if((r|0)==2635){if(d){ir(+(h|0),+(j|0),0,l)}else{ir(0.0,0.0,0,l)}l=c[q>>2]|0;if((l|0)==0){t=0}else{t=bP(l|0)|0}dL(t);c[b>>2]=3;i=e;return}else if((r|0)==2655){i=e;return}else if((r|0)==2644){dL(bP(s|0)|0);i=e;return}else if((r|0)==2652){i=e;return}}function hR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;i=i+32|0;g=f|0;if((c[14128]|0)==0){hS()}do{if((d|0)==0){hT(b)}else{hV(b,d,0);if(!e){break}if((hZ(g,b)|0)==0){break}h=c[14128]|0;if((h|0)==0){break}j=c[g+4>>2]|0;k=a[g+8|0]|0;l=h;do{do{if((j|0)==(c[l+4>>2]|0)){if(((a[l+8|0]^k)&6)!=0){break}a[l+20|0]=1}}while(0);l=c[l+24>>2]|0;}while((l|0)!=0)}}while(0);if((b|0)==0){i=f;return}uu(b);i=f;return}function hS(){var a=0,b=0,d=0;a=c[14128]|0;if((a|0)!=0){b=a;while(1){a=b+12|0;d=c[a>>2]|0;if((d|0)!=0){uu(d);c[a>>2]=0}a=c[b+24>>2]|0;uu(b);if((a|0)==0){break}else{b=a}}}c[14128]=0;hV(205056,0,182);hV(204680,0,172);hV(204424,0,14);hV(204128,0,120);hV(203920,0,40);hV(203672,0,86);hV(203432,0,104);hV(164840,0,156);hV(193632,0,122);hV(170288,0,66);hV(170224,0,100);hV(40160,0,32);hV(170216,0,202);hV(170208,0,92);hV(174448,0,44);hV(169624,0,78);hV(198400,0,196);hV(197952,0,206);hV(122560,0,150);hV(164216,0,46);hV(151360,0,134);hV(178184,0,174);hV(147552,0,24);hV(83696,0,74);return}function hT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;i=i+48|0;e=d|0;if((c[14128]|0)==0){hS()}if((b|0)==0){f=d+32|0;uD(f|0,56584,12);g=c[m>>2]|0;aF(10,g|0);g=c[m>>2]|0;cf(g|0,f|0,(v=i,i=i+16|0,c[v>>2]=79120,c[v+8>>2]=78520,v)|0);g=c[m>>2]|0;cf(g|0,f|0,(v=i,i=i+16|0,c[v>>2]=78176,c[v+8>>2]=77480,v)|0);g=c[m>>2]|0;cf(g|0,f|0,(v=i,i=i+16|0,c[v>>2]=179864,c[v+8>>2]=77024,v)|0);g=c[m>>2]|0;cf(g|0,f|0,(v=i,i=i+16|0,c[v>>2]=76336,c[v+8>>2]=75728,v)|0);g=c[m>>2]|0;cf(g|0,f|0,(v=i,i=i+16|0,c[v>>2]=75192,c[v+8>>2]=74816,v)|0);g=c[m>>2]|0;cf(g|0,f|0,(v=i,i=i+16|0,c[v>>2]=74352,c[v+8>>2]=73928,v)|0);g=c[m>>2]|0;cf(g|0,f|0,(v=i,i=i+16|0,c[v>>2]=73616,c[v+8>>2]=72992,v)|0);g=c[m>>2]|0;cf(g|0,f|0,(v=i,i=i+16|0,c[v>>2]=225216,c[v+8>>2]=224776,v)|0);g=c[m>>2]|0;cf(g|0,f|0,(v=i,i=i+16|0,c[v>>2]=223768,c[v+8>>2]=223184,v)|0);g=c[m>>2]|0;cf(g|0,f|0,(v=i,i=i+16|0,c[v>>2]=222680,c[v+8>>2]=221840,v)|0);g=c[m>>2]|0;cf(g|0,f|0,(v=i,i=i+16|0,c[v>>2]=221376,c[v+8>>2]=220792,v)|0);g=c[m>>2]|0;cf(g|0,f|0,(v=i,i=i+16|0,c[v>>2]=219032,c[v+8>>2]=218520,v)|0);g=c[m>>2]|0;cf(g|0,f|0,(v=i,i=i+16|0,c[v>>2]=217968,c[v+8>>2]=217472,v)|0);g=c[m>>2]|0;cf(g|0,f|0,(v=i,i=i+16|0,c[v>>2]=216736,c[v+8>>2]=216288,v)|0);g=c[m>>2]|0;cf(g|0,f|0,(v=i,i=i+16|0,c[v>>2]=215744,c[v+8>>2]=215256,v)|0);g=c[m>>2]|0;cf(g|0,f|0,(v=i,i=i+16|0,c[v>>2]=214784,c[v+8>>2]=214224,v)|0);f=c[m>>2]|0;aF(10,f|0);f=c[m>>2]|0;cf(f|0,213488,(v=i,i=i+16|0,c[v>>2]=212928,c[v+8>>2]=212352,v)|0);f=c[m>>2]|0;cf(f|0,211856,(v=i,i=i+16|0,c[v>>2]=211392,c[v+8>>2]=210904,v)|0);f=c[m>>2]|0;aF(10,f|0);f=c[14128]|0;if((f|0)!=0){g=f;do{h$(g);g=c[g+24>>2]|0;}while((g|0)!=0)}g=c[m>>2]|0;aF(10,g|0);g=c[m>>2]|0;aI(210240,67,1,g|0);g=c[m>>2]|0;aF(10,g|0);i=d;return}if((hZ(e,b)|0)==0){i=d;return}b=c[14128]|0;if((b|0)==0){i=d;return}g=c[e+4>>2]|0;f=a[e+8|0]|0;e=b;while(1){if((g|0)==(c[e+4>>2]|0)){if(((a[e+8|0]^f)&6)==0){break}}b=c[e+24>>2]|0;if((b|0)==0){h=2693;break}else{e=b}}if((h|0)==2693){i=d;return}h$(e);i=d;return}function hU(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0;f=i;if(!((b|0)!=0&(c[6928]|0)!=0)){dP();i=f;return}g=c[200]|0;do{if((a[64788+(g*688&-1)|0]&1)==0){j=2704}else{k=c[64652+(g*688&-1)>>2]|0;if((k&1|0)==0){if(+h[64680+(g*688&-1)>>3]<=0.0){break}}if((k&2|0)!=0){j=2704;break}if(+h[64688+(g*688&-1)>>3]>0.0){j=2704}}}while(0);L3731:do{if((j|0)==2704){g=c[144]|0;do{if((a[64788+(g*688&-1)|0]&1)!=0){k=c[64652+(g*688&-1)>>2]|0;if((k&1|0)==0){if(+h[64680+(g*688&-1)>>3]<=0.0){break L3731}}if((k&2|0)!=0){break}if(+h[64688+(g*688&-1)>>3]<=0.0){break L3731}}}while(0);g=c[34]|0;do{if((a[64788+(g*688&-1)|0]&1)!=0){k=c[64652+(g*688&-1)>>2]|0;if((k&1|0)==0){if(+h[64680+(g*688&-1)>>3]<=0.0){break L3731}}if((k&2|0)!=0){break}if(+h[64688+(g*688&-1)>>3]<=0.0){break L3731}}}while(0);if((a[66852]&1)!=0){g=c[16679]|0;if(!((g&1|0)!=0|+h[8343]>0.0)){break}if(!((g&2|0)!=0|+h[8344]>0.0)){break}}fv(b,d,e);i=f;return}}while(0);uk(164960,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}function hV(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;f=i;g=ut(28)|0;do{if((g|0)==0){gk();h=ut(28)|0;if((h|0)!=0){j=h;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=81336,v)|0)}else{j=g}}while(0);g=j;if((hZ(g,b)|0)==0){uu(j);i=f;return}b=c[14128]|0;do{if((b|0)==0){c[14128]=g;k=g}else{h=c[j+4>>2]|0;l=j+8|0;m=b;while(1){if((h|0)==(c[m+4>>2]|0)){if(((a[m+8|0]^a[l])&6)==0){break}}n=c[m+24>>2]|0;if((n|0)==0){o=2741;break}else{m=n}}if((o|0)==2741){c[(c[b>>2]|0)+24>>2]=g;c[j>>2]=c[c[14128]>>2];k=c[14128]|0;break}do{if((d|0)==0){c[m+16>>2]=e}else{if((a[d]|0)==0){h_(m);break}l=m+12|0;h=c[l>>2]|0;if((h|0)!=0){uu(h);c[l>>2]=0}c[l>>2]=d}}while(0);uu(j);i=f;return}}while(0);c[k>>2]=g;c[j+24>>2]=0;a[j+20|0]=0;if((d|0)==0){c[j+16>>2]=e;i=f;return}if((a[d]|0)==0){h_(g);i=f;return}else{c[j+12>>2]=d;i=f;return}}function hW(){var b=0,d=0,e=0,f=0.0,g=0,j=0.0,k=0.0,l=0,m=0.0,n=0,o=0,p=0.0;b=i;i=i+8|0;d=b|0;e=c[(c[3524]|0)+124>>2]|0;if((e|0)==0){i=b;return}if((a[26192]&1)==0){i=b;return}cN[e&255](-1,-1);if((a[37384]&1)==0){e=(a[66164]&1)!=0;f=+h[3275];if(e&f<0.0){g=-1}else{if(e){j=+_(+f);k=j/+h[8272]}else{k=f}g=~~(+(c[16536]|0)+(k- +h[8255])*+h[8269]+.5)}c[6558]=g;e=(a[65476]&1)!=0;k=+h[3276];if(e&k<0.0){l=-1}else{if(e){f=+_(+k);m=f/+h[8186]}else{m=k}l=~~(+(c[16364]|0)+(m- +h[8169])*+h[8183]+.5)}c[6559]=l;hN(g,l,d,d,26216,26224);n=c[6558]|0;o=c[6559]|0}else{h[d>>3]=1.0;m=(+h[3275]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;k=(+h[3276]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;f=(1.0- +h[5279])*+h[2]+ +h[12]+-1.0;j=+h[406]+m*+h[394]+k*+h[398]+f*+h[402];p=j==0.0?1.0e-5:j;d=~~((+h[403]+m*+h[391]+k*+h[395]+f*+h[399])/p*+(c[180]|0))+(c[186]|0)|0;l=~~((+h[404]+m*+h[392]+k*+h[396]+f*+h[400])/p*+(c[40]|0))+(c[46]|0)|0;c[6558]=d;c[6559]=l;n=d;o=l}cN[c[(c[3524]|0)+124>>2]&255](n,o);i=b;return}function hX(b){b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0.0;if((b|0)==0){d=76768;return d|0}e=c[3524]|0;f=e+124|0;if((c[f>>2]|0)==0){d=0;return d|0}do{if((a[26192]&1)==0){if((a[37384]&1)!=0){if(+P(+(+aX(+(+g[3536]),90.0)))>=.1){break}if(+P(+(+aX(+(+g[3538]),180.0)))>=.1){break}}a[26192]=1;i=c[b+4>>2]|0;c[6558]=i;j=c[b+8>>2]|0;c[6559]=j;hN(i,j,26200,26208,26216,26224);cN[c[(c[3524]|0)+124>>2]&255](c[6558]|0,c[6559]|0);j=e6(98488)|0;if((j|0)!=0){a[j+8|0]=0;k=+h[3275];c[j+16>>2]=2;h[j+24>>3]=k;h[j+32>>3]=0.0}j=e6(92688)|0;if((j|0)!=0){a[j+8|0]=0;k=+h[3276];c[j+16>>2]=2;h[j+24>>3]=k;h[j+32>>3]=0.0}if((c[8501]|0)==0){break}j=c[m>>2]|0;aI(224616,18,1,j|0)}else{a[26192]=0;do{if((e|0)!=0){j=c[f>>2]|0;if((j|0)==0){break}cN[j&255](-1,-1)}}while(0);j=e6(98488)|0;if((j|0)!=0){a[j+8|0]=1}j=e6(92688)|0;if((j|0)!=0){a[j+8|0]=1}if((c[8501]|0)==0){break}j=c[m>>2]|0;aI(84792,19,1,j|0);if((c[8501]|0)==0){break}j=c[m>>2]|0;aI(84792,19,1,j|0)}}while(0);hM();d=0;return d|0}function hY(b){b=b|0;var d=0,e=0,f=0,g=0;d=c[7772]|0;if((b-1|0)>>>0>=2){e=d;return e|0}do{if((d|0)!=(b|0)){if((a[26192]&1)==0){break}a[26192]=0;f=c[3524]|0;do{if((f|0)!=0){g=c[f+124>>2]|0;if((g|0)==0){break}cN[g&255](-1,-1)}}while(0);f=e6(98488)|0;if((f|0)!=0){a[f+8|0]=1}f=e6(92688)|0;if((f|0)!=0){a[f+8|0]=1}if((c[8501]|0)==0){break}f=c[m>>2]|0;aI(84792,19,1,f|0)}}while(0);c[7772]=b;e=b;return e|0}function hZ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0;e=i;f=b+4|0;c[f>>2]=-1;g=b+8|0;a[g]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b>>2]=0;c[b+24>>2]=0;if((d|0)==0){h=0;i=e;return h|0}else{j=d;k=-1;l=0}L3876:while(1){b=a[j]|0;if(b<<24>>24==0){n=k;o=2836;break}L3879:do{if((uJ(j|0,217264,4)|0)==0){p=l|4;a[g]=p;q=j+4|0;r=k;s=p}else{if((uJ(j|0,211672,5)|0)==0){p=l|2;a[g]=p;q=j+5|0;r=k;s=p;break}L3884:do{if((aY(j|0,87296)|0)==0){t=0;o=2824}else{p=(a_(j|0,87296,9)|0)!=0;if((aY(j|0,86224)|0)==0){t=1;o=2824;break}u=(a_(j|0,86224,3)|0)==0&p?1:p<<31>>31;if((aY(j|0,85184)|0)==0){t=2;o=2824;break}p=(a_(j|0,85184,8)|0)==0&(u|0)<0?2:u;if((aY(j|0,84288)|0)==0){t=3;o=2824;break}u=(a_(j|0,84288,6)|0)==0&(p|0)<0?3:p;if((aY(j|0,83696)|0)==0){t=4;o=2824;break}p=(a_(j|0,83696,6)|0)==0&(u|0)<0?4:u;if((aY(j|0,82728)|0)==0){t=5;o=2824;break}u=(a_(j|0,82728,6)|0)==0&(p|0)<0?5:p;if((u|0)>-1){t=u;o=2824;break}else{w=20384}while(1){u=c[w>>2]|0;if((u|0)==0){break L3884}if((aY(j|0,u|0)|0)==0){break}else{w=w+4|0}}x=(w-20384>>2)+1e3|0;y=uA(j|0)|0;o=2832}}while(0);if((o|0)==2824){o=0;u=uA(c[960+(t<<3)>>2]|0)|0;x=c[964+(t<<3)>>2]|0;y=u;o=2832}do{if((o|0)==2832){o=0;if((x|0)==-1){break}c[f>>2]=x;q=j+y|0;r=x;s=l;break L3879}}while(0);u=j+1|0;p=b<<24>>24;c[f>>2]=p;z=a[u]|0;if((z<<24>>24|0)==0|(z<<24>>24|0)==45){q=u;r=p;s=l}else{o=2835;break L3876}}}while(0);if((q|0)==0){n=r;o=2836;break}else{j=q;k=r;l=s}}if((o|0)==2836){h=(n|0)!=-1&1;i=e;return h|0}else if((o|0)==2835){cf(c[m>>2]|0,205504,(v=i,i=i+8|0,c[v>>2]=d,v)|0);h=0;i=e;return h|0}return 0}function h_(a){a=a|0;var b=0,d=0,e=0,f=0;if((a|0)==0){return}if((c[a+16>>2]|0)!=0){b=a+12|0;d=c[b>>2]|0;if((d|0)==0){return}uu(d);c[b>>2]=0;return}b=a|0;d=c[b>>2]|0;e=a+24|0;if((d|0)==0){f=0}else{c[d+24>>2]=c[e>>2];f=c[b>>2]|0}b=c[e>>2]|0;if((b|0)==0){c[c[14128]>>2]=f}else{c[b>>2]=f}f=a+12|0;b=c[f>>2]|0;if((b|0)!=0){uu(b);c[f>>2]=0}do{if((c[14128]|0)==(a|0)){f=c[e>>2]|0;c[14128]=f;if((f|0)==0){break}b=c[f>>2]|0;if((b|0)==0){break}c[b+24>>2]=0}}while(0);uu(a);return}function h$(d){d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,n=0,o=0;e=i;i=i+8|0;f=e|0;g=c[m>>2]|0;h=f;a[56520]=0;do{if((d|0)!=0){j=d+8|0;k=a[j]|0;if((k&2)==0){l=k}else{a[56520]=a[206584]|0;a[56521|0]=a[206585|0]|0;a[56522|0]=a[206586|0]|0;a[56523|0]=a[206587|0]|0;a[56524|0]=a[206588|0]|0;a[56525|0]=a[206589|0]|0;l=a[j]|0}if((l&4)!=0){j=56520+(uA(56520)|0)|0;a[j]=a[205752]|0;a[j+1|0]=a[205753|0]|0;a[j+2|0]=a[205754|0]|0;a[j+3|0]=a[205755|0]|0;a[j+4|0]=a[205756|0]|0;a[j+5|0]=a[205757|0]|0;a[j+6|0]=a[205758|0]|0}j=c[d+4>>2]|0;if((j-1001|0)>>>0<63){k=c[20384+(j-1e3<<2)>>2]|0;uC(56520,k|0);break}else{n=0}while(1){if((n|0)==6){o=2872;break}if((c[964+(n<<3)>>2]|0)==(j|0)){o=2871;break}else{n=n+1|0}}if((o|0)==2871){k=c[960+(n<<3)>>2]|0;uC(56520,k|0);break}else if((o|0)==2872){b[f>>1]=0;a[h]=j&255;uC(56520,h|0);break}}}while(0);cf(g|0,209560,(v=i,i=i+8|0,c[v>>2]=56520,v)|0);cf(c[m>>2]|0,209048,(v=i,i=i+8|0,c[v>>2]=(a[d+20|0]&1)!=0?42:32,v)|0);g=c[d+12>>2]|0;if((g|0)!=0){h=c[m>>2]|0;cf(h|0,208640,(v=i,i=i+8|0,c[v>>2]=g,v)|0);i=e;return}g=c[d+16>>2]|0;d=c[m>>2]|0;if((g|0)==0){cf(d|0,207152,(v=i,i=i+16|0,c[v>>2]=105800,c[v+8>>2]=2288,v)|0);i=e;return}else{h=cO[g&255](0)|0;cf(d|0,154696,(v=i,i=i+8|0,c[v>>2]=h,v)|0);i=e;return}}function h0(a){a=a|0;var b=0;if((a|0)==0){b=165760}else{dM(165400);b=0}return b|0}function h1(b){b=b|0;var d=0,e=0,f=0,g=0;if((b|0)==0){d=166224;return d|0}b=c[11692]|0;e=c[260]|0;do{if((b|0)==0){if((e|0)==0){f=0;g=2889;break}c[11692]=e}else{f=e;g=2889}}while(0);do{if((g|0)==2889){if((b|0)==(f|0)&(b|0)!=31){c[11692]=31;break}if((a[37384]&1)!=0&(b|0)==31){c[11692]=4095;break}else{c[11692]=0;break}}}while(0);dM(179864);d=0;return d|0}function h2(a){a=a|0;var b=0;if((a|0)==0){b=166576}else{dM(179864);b=0}return b|0}function h3(b){b=b|0;var c=0,d=0,e=0;if((b|0)==0){c=167768;return c|0}else{d=0}while(1){if(d>>>0>=8){e=2905;break}if((a[65036+(d*688&-1)|0]&1)!=0){e=2906;break}if((a[65037+(d*688&-1)|0]&1)==0){d=d+1|0}else{e=2906;break}}if((e|0)==2906){dM(166984);c=0;return c|0}else if((e|0)==2905){dM(196824);c=0;return c|0}return 0}function h4(b){b=b|0;var d=0;if((b|0)==0){d=168352;return d|0}aF(10,c[m>>2]|0);hT(0);if((a[37400]&1)==0){d=0;return d|0}aI(105808,9,1,c[m>>2]|0);aD(c[m>>2]|0);d=0;return d|0}function h5(b){b=b|0;var d=0,e=0,f=0;d=i;if((b|0)==0){e=169176;i=d;return e|0}if((a[872]&1)!=0){uh(-1,168720,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);e=0;i=d;return e|0}b=c[8494]|0;do{if((c[13528]|0)<(b|0)&(b|0)<(c[13529]|0)){f=c[8492]|0;if(!((c[13530]|0)<(f|0)&(f|0)<(c[13531]|0))){break}dM((a[66852]&1)!=0?173736:173264);e=0;i=d;return e|0}}while(0);if((a[37384]&1)==0|(c[5094]|0)!=0){dM((a[65476]&1)!=0?171552:171296);e=0;i=d;return e|0}else{dM((a[64788+((c[34]|0)*688&-1)|0]&1)!=0?172888:172496);e=0;i=d;return e|0}return 0}function h6(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if((b|0)==0){d=174336;return d|0}b=c[8494]|0;do{if((c[13528]|0)<(b|0)&(b|0)<(c[13529]|0)){e=c[8492]|0;if(!((c[13530]|0)<(e|0)&(e|0)<(c[13531]|0))){break}dM((a[66852]&1)!=0?173736:173264);d=0;return d|0}}while(0);if(!((a[37384]&1)==0|(c[5094]|0)!=0)){dM((a[64788+((c[34]|0)*688&-1)|0]&1)!=0?172888:172496);d=0;return d|0}e=c[8492]|0;f=c[7940]|0;g=c[7941]|0;h=(g-f|0)/4&-1;i=c[7938]|0;if((e|0)<(h+f|0)){j=c[7939]|0;k=(b|0)>(i|0)&(b|0)<(j|0);l=j}else{k=0;l=c[7939]|0}j=(l-i|0)/4&-1;if((b|0)<(j+i|0)){m=(e|0)>(f|0)&(e|0)<(g|0)}else{m=0}if((e|0)>(g-h|0)){n=(b|0)>(i|0)&(b|0)<(l|0)}else{n=0}if((b|0)>(l-j|0)){o=(e|0)>(f|0)&(e|0)<(g|0)}else{o=0}if(k){dL(bP(((a[66164]&1)!=0?172224:171904)|0)|0)}if(m){dL(bP(((a[65476]&1)!=0?171552:171296)|0)|0)}g=c[5094]|0;if((g|0)!=0|n^1){p=g}else{dL(bP(((a[68916]&1)!=0?170840:170464)|0)|0);p=c[5094]|0}if(!((p|0)!=0|o^1)){dL(bP(((a[68228]&1)!=0?170088:169608)|0)|0)}do{if(!k){if((c[5094]|0)!=0&(m^1)){dM((a[64788+((c[34]|0)*688&-1)|0]&1)!=0?172888:172496)}if(m|n|o){break}else{d=0}return d|0}}while(0);dM(179864);d=0;return d|0}function h7(a){a=a|0;var b=0;if((a|0)==0){b=175488;return b|0}do{if((c[8496]|0)==0){c[8496]=1;if((c[8501]|0)==0){break}a=c[m>>2]|0;aI(174984,18,1,a|0)}else{c[8496]=0;if((c[8501]|0)==0){break}a=c[m>>2]|0;aI(174688,19,1,a|0)}}while(0);hM();b=0;return b|0}function h8(b){b=b|0;var d=0,e=0,f=0,g=0;d=i;if((b|0)==0){e=175784;i=d;return e|0}b=c[8506]|0;f=b-1|0;c[8506]=f;g=c[8510]|0;do{if((f|0)!=7|(g|0)!=0){if((f|0)>7){c[8506]=1;break}if((f|0)>=1){break}c[8506]=7;if((g|0)!=0){break}if((a[30528]&1)!=0){break}c[8506]=6}else{if((a[30528]&1)!=0){break}c[8506]=6}}while(0);hM();if((c[8501]|0)==0){e=0;i=d;return e|0}g=c[8506]|0;cf(c[m>>2]|0,176192,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=g,v)|0);e=0;i=d;return e|0}function h9(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;if((b|0)==0){e=176776;i=d;return e|0}b=c[8506]|0;f=b+1|0;c[8506]=f;g=c[8510]|0;do{if((f|0)!=7|(g|0)!=0){if((f|0)>7){h=2998;break}if((b|0)>=0){break}c[8506]=7;if((g|0)!=0){break}if((a[30528]&1)!=0){break}c[8506]=6}else{if((a[30528]&1)!=0){break}c[8506]=8;h=2998}}while(0);if((h|0)==2998){c[8506]=1}hM();if((c[8501]|0)==0){e=0;i=d;return e|0}h=c[8506]|0;cf(c[m>>2]|0,176192,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=h,v)|0);e=0;i=d;return e|0}function ia(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=i;if((a|0)==0){d=177368;i=b;return d|0}a=c[13532]|0;e=a-1|0;c[13532]=e;f=c[13534]|0;do{if((e|0)!=7|(f|0)!=0){if((e|0)>7){c[13532]=0;g=0;break}if((e|0)>=0){g=e;break}c[13532]=7;if((f|0)!=0){g=7;break}c[13532]=6;g=6}else{c[13532]=6;g=6}}while(0);if((c[8501]|0)==0){d=0;i=b;return d|0}cf(c[m>>2]|0,177616,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=g,v)|0);d=0;i=b;return d|0}function ib(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=i;if((a|0)==0){d=177920;i=b;return d|0}a=c[13532]|0;e=a+1|0;c[13532]=e;f=c[13534]|0;do{if((e|0)!=7|(f|0)!=0){if((e|0)>7){g=3027;break}if((e|0)>=0){h=e;break}c[13532]=7;if((f|0)!=0){h=7;break}c[13532]=6;h=6}else{c[13532]=8;g=3027}}while(0);if((g|0)==3027){c[13532]=0;h=0}if((c[8501]|0)==0){d=0;i=b;return d|0}cf(c[m>>2]|0,177616,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=h,v)|0);d=0;i=b;return d|0}function ic(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;if((a|0)==0){d=179216;i=b;return d|0}e=(c[8500]|0)+1|0;f=(e|0)>2?0:e;c[8500]=f;cR[c[(c[3524]|0)+128>>2]&127]((f|0)!=0?-3:-4,c[a+4>>2]|0,c[a+8>>2]|0);hM();if((c[8501]|0)==0){d=0;i=b;return d|0}cf(c[m>>2]|0,178656,(v=i,i=i+8|0,c[v>>2]=(c[8500]|0)!=0?179864:178216,v)|0);d=0;i=b;return d|0}function id(a){a=a|0;var b=0;if((a|0)==0){b=180400;return b|0}do{if((c[8501]|0)==0){c[8501]=1}else{a=c[m>>2]|0;aI(179928,49,1,a|0);a=(c[8501]|0)==0;c[8501]=a&1;if(a){break}else{b=0}return b|0}}while(0);aI(179616,39,1,c[m>>2]|0);b=0;return b|0}function ie(a){a=a|0;var b=0,c=0.0;do{if((a|0)==0){b=183160}else{c=+g[18074];if(c==0.0){dM(182624);b=0;break}if(c==1.0){dM(181152);b=0;break}else{dM(180792);b=0;break}}}while(0);return b|0}function ig(a){a=a|0;var b=0,d=0,e=0;if((a|0)==0){b=183976;return b|0}a=c[6]|0;do{if((a|0)==0){d=3063}else{e=c[a+72>>2]|0;if((e|0)==0){d=3063;break}ip(e)}}while(0);if((d|0)==3063){d=c[m>>2]|0;aF(7,d|0)}if((c[8501]|0)==0){b=0;return b|0}aI(183608,11,1,c[m>>2]|0);b=0;return b|0}function ih(a){a=a|0;var b=0,d=0,e=0;if((a|0)==0){b=184736;return b|0}a=c[6]|0;do{if((a|0)==0){d=3074}else{e=c[a+68>>2]|0;if((e|0)==0){d=3074;break}ip(e)}}while(0);if((d|0)==3074){d=c[m>>2]|0;aF(7,d|0)}if((c[8501]|0)==0){b=0;return b|0}aI(184360,15,1,c[m>>2]|0);b=0;return b|0}function ii(a){a=a|0;var b=0,d=0;if((a|0)==0){b=187240;return b|0}a=c[8]|0;if((a|0)==0|(c[6]|0)==(a|0)){d=c[m>>2]|0;aF(7,d|0)}else{ip(a)}if((c[8501]|0)==0){b=0;return b|0}aI(186768,8,1,c[m>>2]|0);b=0;return b|0}function ij(b){b=b|0;var c=0;do{if((b|0)==0){c=189200}else{if((a[37384]&1)==0){c=0;break}io(0,-1);c=0}}while(0);return c|0}function ik(b){b=b|0;var c=0;do{if((b|0)==0){c=191536}else{if((a[37384]&1)==0){c=0;break}io(1,0);c=0}}while(0);return c|0}function il(b){b=b|0;var c=0;do{if((b|0)==0){c=193488}else{if((a[37384]&1)==0){c=0;break}io(0,1);c=0}}while(0);return c|0}function im(b){b=b|0;var c=0;do{if((b|0)==0){c=196952}else{if((a[37384]&1)==0){c=0;break}io(-1,0);c=0}}while(0);return c|0}function io(b,d){b=b|0;d=d|0;var e=0,f=0,j=0,k=0.0,l=0.0,n=0.0;e=i;if((c[8512]&1|0)==0){f=d;j=b}else{f=d*10&-1;j=b*10&-1}do{if((j|0)!=0){k=+(j|0)+ +g[3538];if(k<0.0){l=k+360.0}else{l=k}g[3538]=l;if(l<=360.0){break}g[3538]=l+-360.0}}while(0);do{if((f|0)!=0){l=+(f|0)+ +g[3536];if(l<0.0){n=l+360.0}else{n=l}g[3536]=n;if(n<=360.0){break}g[3536]=n+-360.0}}while(0);do{if((f|j|0)!=0){n=+g[3538];b=e6(196288)|0;if((b|0)!=0){a[b+8|0]=0;c[b+16>>2]=2;h[b+24>>3]=n;h[b+32>>3]=0.0}n=+g[3536];b=e6(195744)|0;if((b|0)==0){break}a[b+8|0]=0;c[b+16>>2]=2;h[b+24>>3]=n;h[b+32>>3]=0.0}}while(0);if((c[8501]|0)!=0){j=c[m>>2]|0;n=+g[3538];l=+g[3536];cf(j|0,193976,(v=i,i=i+16|0,h[v>>3]=n,h[v+8>>3]=l,v)|0)}hU(c[10828]|0,c[7952]|0,0);do{if((a[37384]&1)!=0){if(+P(+(+aX(+(+g[3536]),90.0)))>=.1){i=e;return}if(+P(+(+aX(+(+g[3538]),180.0)))<.1){break}i=e;return}}while(0);if((c[(c[3524]|0)+120>>2]|0)==0){i=e;return}hN(c[8494]|0,c[8492]|0,27760,27744,27752,27736);hM();i=e;return}function ip(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,n=0.0,o=0.0,p=0.0,q=0.0;d=i;i=i+1024|0;e=d|0;if((a[37384]&1)==0){f=0}else{f=(c[5094]|0)==1}g=c[6]|0;do{if((g|0)==0){j=0}else{h[g>>3]=+h[8257];h[g+16>>3]=+h[8258];h[g+32>>3]=+h[8601];h[g+48>>3]=+h[8602];c[g+64>>2]=f&1;if(f){k=c[6]|0;h[k+8>>3]=+h[8172];h[k+24>>3]=+h[8171];h[k+40>>3]=+h[8516];h[k+56>>3]=+h[8515];j=k;break}else{k=c[6]|0;h[k+8>>3]=+h[8171];h[k+24>>3]=+h[8172];h[k+40>>3]=+h[8515];h[k+56>>3]=+h[8516];j=k;break}}}while(0);g=c[8]|0;if(!((j|0)!=(g|0)|(g|0)==(b|0))){uD(57080,64648,7568);c[16506]=0;c[16334]=0;c[17194]=0;c[17022]=0}c[6]=b;if((b|0)==0){b=c[m>>2]|0;aF(7,b|0);i=d;return}cM[c[(c[3524]|0)+168>>2]&511](11);b=c[6]|0;if(f){l=(c[b+64>>2]|0)!=0}else{l=0}g=e|0;n=+h[b+16>>3];j=b+24|0;k=b+8|0;o=+h[(l?j:k)>>3];p=+h[(l?k:j)>>3];be(g|0,186136,(v=i,i=i+32|0,h[v>>3]=+h[b>>3],h[v+8>>3]=n,h[v+16>>3]=o,h[v+24>>3]=p,v)|0);if((a[37384]&1)==0){b=e+(uA(g|0)|0)|0;e=c[6]|0;p=+h[e+32>>3];o=+h[e+48>>3];n=+h[e+40>>3];q=+h[e+56>>3];be(b|0,185640,(v=i,i=i+32|0,h[v>>3]=p,h[v+8>>3]=o,h[v+16>>3]=n,h[v+24>>3]=q,v)|0)}do{if((c[6]|0)==(c[8]|0)){b=0;do{uD(57512+(b*688&-1)|0,65080+(b*688&-1)|0,192);c[57376+(b*688&-1)>>2]=c[64944+(b*688&-1)>>2];c[57356+(b*688&-1)>>2]=c[64924+(b*688&-1)>>2];b=b+1|0;}while((b|0)<11);uD(64648,57080,7568);a[g]=0;if((a[872]&1)==0){break}b=c[6928]|0;if((b|0)==2){dO();i=d;return}if(!(f&(b|0)==3)){break}dO();i=d;return}else{a[37408]=1}}while(0);dM(g);a[37408]=0;i=d;return}function iq(b,d,e,f,g){b=b|0;d=+d;e=+e;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0;j=i;i=i+1080|0;k=j|0;l=j+48|0;m=j+312|0;n=j+568|0;o=j+824|0;if((f-4|0)>>>0<3|(f|0)==3){p=m|0;uE(p|0,0,255);a[p]=91;a[m+1|0]=37;a[m+2|0]=115;a[m+3|0]=44;a[m+4|0]=32;q=c[8503]|0;uC(p|0,q|0);q=m+(uA(p|0)|0)|0;w=93;a[q]=w&255;w=w>>8;a[q+1|0]=w&255;q=j+56|0;c[l>>2]=~~(d+946684800.0);m=bm(l|0)|0;if((f|0)==4){l=c[m+12>>2]|0;r=(c[m+16>>2]|0)+1|0;s=c[m+20>>2]|0;t=((s|0)<69?2e3:1900)+s|0;be(q|0,151152,(v=i,i=i+24|0,c[v>>2]=l,c[v+8>>2]=r,c[v+16>>2]=t,v)|0)}else if((f|0)==3){t3(k,d);t4(q,255,66189,k,d- +O(+d))}else if((f|0)==6){k=(c[m+16>>2]|0)+1|0;t=c[m+20>>2]|0;r=c[m+8>>2]|0;l=c[m+4>>2]|0;be(q|0,150792,(v=i,i=i+40|0,c[v>>2]=c[m+12>>2],c[v+8>>2]=k,c[v+16>>2]=((t|0)<69?2e3:1900)+t,c[v+24>>2]=r,c[v+32>>2]=l,v)|0)}else if((f|0)==5){l=c[m+4>>2]|0;be(q|0,150944,(v=i,i=i+16|0,c[v>>2]=c[m+8>>2],c[v+8>>2]=l,v)|0)}else{be(q|0,c[8503]|0,(v=i,i=i+8|0,h[v>>3]=d,v)|0)}be(b|0,p|0,(v=i,i=i+16|0,c[v>>2]=q,h[v+8>>3]=e,v)|0);u=b;x=uA(u|0)|0;y=u+x|0;i=j;return y|0}do{if((f|0)==1){a[632]=0;q=c[8503]|0;ck(632,q|0,30);q=632+(uA(632)|0)|0;a[q]=a[86120]|0;a[q+1|0]=a[86121|0]|0;a[q+2|0]=a[86122|0]|0;q=c[8503]|0;ck(632,q|0,30);be(b|0,632,(v=i,i=i+16|0,h[v>>3]=d,h[v+8>>3]=e,v)|0);u=b;x=uA(u|0)|0;y=u+x|0;i=j;return y|0}else if((f|0)==2){z=+h[8256]- +h[8255];A=+h[8170]- +h[8169];if(z!=0.0){q=n|0;uE(q|0,0,255);a[q]=47;p=c[8503]|0;uC(q|0,p|0);B=(d- +h[8255])/z;be(b|0,q|0,(v=i,i=i+8|0,h[v>>3]=B,v)|0)}else{uD(b|0,152448,13)}q=b+(uA(b|0)|0)|0;if(A!=0.0){p=o|0;uE(p|0,0,255);a[p]=44;a[o+1|0]=32;l=c[8503]|0;uC(p|0,l|0);l=o+(uA(p|0)|0)|0;w=47;a[l]=w&255;w=w>>8;a[l+1|0]=w&255;B=(e- +h[8169])/A;be(q|0,p|0,(v=i,i=i+8|0,h[v>>3]=B,v)|0);u=q;x=uA(u|0)|0;y=u+x|0;i=j;return y|0}else{uD(q|0,151872,15);u=q;x=uA(u|0)|0;y=u+x|0;i=j;return y|0}}else if((f|0)==7){q=(g|0)!=0;p=a[30528]|0;if(!q){if((p&1)==0){break}}if((p&1)==0){be(b|0,g|0,(v=i,i=i+16|0,h[v>>3]=d,h[v+8>>3]=e,v)|0);u=b;x=uA(u|0)|0;y=u+x|0;i=j;return y|0}B=(c[17366]&1|0)==0?+h[8687]:0.0;A=+Y(+e,+d);p=(a[69604]&1)==0;z=d/+S(+A);if(p){C=B+z}else{D=+_(+B);B=+h[8702];C=+Z(+(B*(z+D/B)))}if(q){B=A/+h[9040];be(b|0,g|0,(v=i,i=i+16|0,h[v>>3]=B,h[v+8>>3]=C,v)|0);u=b;x=uA(u|0)|0;y=u+x|0;i=j;return y|0}else{q=b;p=q|0;w=1634496368;a[p]=w&255;w=w>>8;a[p+1|0]=w&255;w=w>>8;a[p+2|0]=w&255;w=w>>8;a[p+3|0]=w&255;p=q+4|0;w=2112114;a[p]=w&255;w=w>>8;a[p+1|0]=w&255;w=w>>8;a[p+2|0]=w&255;w=w>>8;a[p+3|0]=w&255;p=b+(uA(b|0)|0)|0;a[632]=0;q=c[8503]|0;ck(632,q|0,30);q=632+(uA(632)|0)|0;a[q]=a[86120]|0;a[q+1|0]=a[86121|0]|0;a[q+2|0]=a[86122|0]|0;q=c[8503]|0;ck(632,q|0,30);B=A/+h[9040];be(p|0,632,(v=i,i=i+16|0,h[v>>3]=B,h[v+8>>3]=C,v)|0);u=p;x=uA(u|0)|0;y=u+x|0;i=j;return y|0}}}while(0);a[632]=0;ck(632,c[8503]|0,30);g=632+(uA(632)|0)|0;a[g]=a[86120]|0;a[g+1|0]=a[86121|0]|0;a[g+2|0]=a[86122|0]|0;ck(632,c[8503]|0,30);be(b|0,632,(v=i,i=i+16|0,h[v>>3]=d,h[v+8>>3]=e,v)|0);u=b;x=uA(u|0)|0;y=u+x|0;i=j;return y|0}function ir(b,d,e,f){b=+b;d=+d;e=e|0;f=f|0;var g=0,j=0,k=0,l=0;g=i;hN(~~b,~~d,27760,27744,27752,27736);j=e6(164136)|0;if((j|0)!=0){a[j+8|0]=e&1^1;c[j+16>>2]=1;c[j+24>>2]=e?f:-1}e=e6(163432)|0;if((e|0)!=0){a[e+8|0]=0;c[e+16>>2]=1;c[e+24>>2]=f}e=e6(162952)|0;if((e|0)!=0){j=ut(2)|0;do{if((j|0)==0){gk();k=ut(2)|0;if((k|0)!=0){l=k;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=162328,v)|0)}else{l=j}}while(0);a[l]=f&255;a[l+1|0]=0;f=e+8|0;j=e+16|0;do{if((a[f]&1)==0){if((c[j>>2]|0)!=3){break}uu(c[e+24>>2]|0);c[j>>2]=1}}while(0);a[f]=0;c[j>>2]=3;c[e+24>>2]=l}l=e6(159824)|0;if((l|0)!=0){a[l+8|0]=0;d=+h[3470];c[l+16>>2]=2;h[l+24>>3]=d;h[l+32>>3]=0.0}l=e6(159208)|0;if((l|0)!=0){a[l+8|0]=0;d=+h[3468];c[l+16>>2]=2;h[l+24>>3]=d;h[l+32>>3]=0.0}l=e6(158720)|0;if((l|0)!=0){a[l+8|0]=0;d=+h[3469];c[l+16>>2]=2;h[l+24>>3]=d;h[l+32>>3]=0.0}l=e6(158096)|0;if((l|0)!=0){a[l+8|0]=0;d=+h[3467];c[l+16>>2]=2;h[l+24>>3]=d;h[l+32>>3]=0.0}l=e6(156232)|0;if((l|0)!=0){a[l+8|0]=0;e=c[8512]&1;c[l+16>>2]=1;c[l+24>>2]=e}e=e6(155120)|0;if((e|0)!=0){a[e+8|0]=0;l=c[8512]&4;c[e+16>>2]=1;c[e+24>>2]=l}l=e6(154768)|0;if((l|0)==0){i=g;return}a[l+8|0]=0;e=c[8512]&2;c[l+16>>2]=1;c[l+24>>2]=e;i=g;return}function is(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;e=c[13898]|0;if((e|0)>=(c[8272]|0)){uf(e,214888,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}f=c[1054]|0;L4406:do{if((a[f+(e*40&-1)|0]&1)!=0){g=c[f+(e*40&-1)+36>>2]|0;h=f+(e*40&-1)+32|0;j=c[10036]|0;k=0;while(1){if((k|0)>=(g|0)){break}if((a[j+((c[h>>2]|0)+k|0)|0]|0)==(a[k+103664|0]|0)){k=k+1|0}else{break L4406}}if((k|0)!=1){break}uf(e,214888,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}}while(0);c[11670]=0;e4(it()|0,b);if((a[1960]&1)==0){i=d;return b|0}else{uf(e,159392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}return 0}function it(){var a=0,b=0,d=0,e=0,f=0;a=i;b=c[18070]|0;if((b|0)!=0){e1(b)}b=ut(4808)|0;do{if((b|0)==0){gk();d=ut(4808)|0;if((d|0)!=0){e=d;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=122712,v)|0);return 0}else{e=b}}while(0);c[18070]=e;uE(e|0,0,4808);c[18066]=150;c[8230]=0;if((iy()|0)!=0){f=c[18070]|0;i=a;return f|0}c[8230]=(c[8230]|0)+1;iz();iC();c[8230]=(c[8230]|0)-1;f=c[18070]|0;i=a;return f|0}function iu(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;d=i;i=i+48|0;e=d|0;f=d+24|0;uu(c[3546]|0);c[3546]=0;g=(b|0)!=0;if(g){c[b>>2]=0}h=c[13898]|0;if((h|0)>=(c[8272]|0)){uf(h,135720,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}j=c[1054]|0;k=(a[j+(h*40&-1)|0]&1)==0;do{if(!k){l=c[j+(h*40&-1)+36>>2]|0;m=j+(h*40&-1)+32|0;n=c[10036]|0;o=0;while(1){if((o|0)>=(l|0)){p=3259;break}if((a[n+((c[m>>2]|0)+o|0)|0]|0)==(a[o+103664|0]|0)){o=o+1|0}else{break}}do{if((p|0)==3259){if((o|0)!=1){break}uf(h,135720,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}}while(0);if(k){break}o=c[j+(h*40&-1)+32>>2]|0;m=c[10036]|0;n=a[m+o|0]|0;if(!((n<<24>>24|0)==39|(n<<24>>24|0)==34)){break}n=c[j+(h*40&-1)+36>>2]|0;l=0;while(1){if((l|0)>=(n|0)){p=3266;break}if((a[m+(o+l|0)|0]|0)==(a[l+103664|0]|0)){l=l+1|0}else{p=3267;break}}if((p|0)==3266){if((l|0)==1){q=0}else{p=3267}}do{if((p|0)==3267){a[14176]=1;is(e);a[14176]=0;if((c[e>>2]|0)==3){q=c[e+8>>2]|0;break}else{c[13898]=h;q=0;break}}}while(0);c[3546]=q;r=q;i=d;return r|0}}while(0);it();q=c[18070]|0;h=c[q>>2]|0;e=0;while(1){if((e|0)>=(h|0)){p=3274;break}j=c[q+8+(e<<5)>>2]|0;if((j-2|0)>>>0<3|(j|0)==8){break}else{e=e+1|0}}do{if((p|0)==3274){e4(q,f);if((a[1960]&1)!=0){break}if((c[f>>2]|0)!=3){break}c[3546]=c[f+8>>2]}}while(0);if(g){c[b>>2]=c[18070]}r=c[3546]|0;i=d;return r|0}function iv(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0;d=i;e=c[10812]|0;f=c[8272]|0;L4473:do{if((e|0)==0){g=43248;h=c[1054]|0;j=c[10036]|0}else{k=(f|0)>(b|0);l=c[1054]|0;m=l+(b*40&-1)|0;n=l+(b*40&-1)+36|0;o=l+(b*40&-1)+32|0;p=c[10036]|0;q=e;L4475:while(1){r=c[q+4>>2]|0;L4477:do{if(k){if((a[m]&1)==0){break}s=c[n>>2]|0;t=0;while(1){if((t|0)>=(s|0)){break}if((a[p+((c[o>>2]|0)+t|0)|0]|0)==(a[r+t|0]|0)){t=t+1|0}else{break L4477}}if((a[r+t|0]|0)==0){u=q;break L4475}}}while(0);r=q|0;s=c[r>>2]|0;if((s|0)==0){g=r;h=l;j=p;break L4473}else{q=s}}i=d;return u|0}}while(0);e=(f|0)>(b|0);f=h+(b*40&-1)|0;q=h+(b*40&-1)+36|0;p=h+(b*40&-1)+32|0;h=41;L4488:while(1){l=c[41160+(h<<3)>>2]|0;L4490:do{if(e){if((a[f]&1)==0){break}o=c[q>>2]|0;n=0;while(1){if((n|0)>=(o|0)){break}if((a[j+((c[p>>2]|0)+n|0)|0]|0)==(a[l+n|0]|0)){n=n+1|0}else{break L4490}}if((a[l+n|0]|0)==0){w=3303;break L4488}}}while(0);l=h+1|0;if((l|0)==117){break}else{h=l}}do{if((w|0)==3303){if((h|0)==0){break}uh(b,92536,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);h=ut(312)|0;do{if((h|0)==0){gk();w=ut(312)|0;if((w|0)!=0){x=w;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=144328,v)|0);return 0}else{x=h}}while(0);c[g>>2]=x;c[x>>2]=0;c[(c[g>>2]|0)+12>>2]=0;c[(c[g>>2]|0)+8>>2]=0;x=(c[(c[1054]|0)+(b*40&-1)+36>>2]|0)+1|0;h=ut(x)|0;do{if((h|0)==0){gk();w=ut(x)|0;if((w|0)!=0){y=w;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=76632,v)|0);return 0}else{y=h}}while(0);c[(c[g>>2]|0)+4>>2]=y;y=c[(c[g>>2]|0)+4>>2]|0;h=c[1054]|0;x=c[h+(b*40&-1)+36>>2]|0;w=c[h+(b*40&-1)+32>>2]|0;b=0;while(1){h=b+1|0;a[y+b|0]=a[(c[10036]|0)+w|0]|0;if((h|0)==(x|0)){break}else{w=w+1|0;b=h}}a[y+x|0]=0;x=c[g>>2]|0;c[x+24>>2]=1;c[x+32>>2]=0;x=c[g>>2]|0;c[x+48>>2]=1;c[x+56>>2]=0;x=c[g>>2]|0;c[x+72>>2]=1;c[x+80>>2]=0;x=c[g>>2]|0;c[x+96>>2]=1;c[x+104>>2]=0;x=c[g>>2]|0;c[x+120>>2]=1;c[x+128>>2]=0;x=c[g>>2]|0;c[x+144>>2]=1;c[x+152>>2]=0;x=c[g>>2]|0;c[x+168>>2]=1;c[x+176>>2]=0;x=c[g>>2]|0;c[x+192>>2]=1;c[x+200>>2]=0;x=c[g>>2]|0;c[x+216>>2]=1;c[x+224>>2]=0;x=c[g>>2]|0;c[x+240>>2]=1;c[x+248>>2]=0;x=c[g>>2]|0;c[x+264>>2]=1;c[x+272>>2]=0;x=c[g>>2]|0;c[x+288>>2]=1;c[x+296>>2]=0;u=c[g>>2]|0;i=d;return u|0}function iw(){var b=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0.0,Q=0,R=0,S=0,T=0.0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0.0,$=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0;b=i;i=i+152|0;e=b|0;f=b+24|0;g=b+48|0;j=b+72|0;k=b+96|0;l=c[13898]|0;m=c[8272]|0;if((m|0)<=(l|0)){n=0;i=b;return n|0}o=k|0;p=j|0;q=j+8|0;r=g|0;s=g+8|0;t=f|0;u=f+8|0;w=e|0;x=e+8|0;y=0;z=0;A=l;l=m;L4518:while(1){m=A;B=l;while(1){C=c[1054]|0;if((a[C+(m*40&-1)|0]&1)==0){n=y;D=3435;break L4518}E=c[C+(m*40&-1)+36>>2]|0;F=C+(m*40&-1)+32|0;G=c[10036]|0;H=0;while(1){if((H|0)>=(E|0)){break}if((a[G+((c[F>>2]|0)+H|0)|0]|0)==(a[H+217064|0]|0)){H=H+1|0}else{n=y;D=3438;break L4518}}if((H|0)!=3){n=y;D=3436;break L4518}F=m+1|0;E=m+2|0;c[13898]=E;if((B|0)<=(F|0)){I=E;D=3452;break L4518}if((a[C+(F*40&-1)|0]&1)==0){I=E;D=3455;break L4518}J=c[C+(F*40&-1)+36>>2]|0;K=C+(F*40&-1)+32|0;F=0;while(1){if((F|0)>=(J|0)){break}if((a[G+((c[K>>2]|0)+F|0)|0]|0)==(a[F+78280|0]|0)){F=F+1|0}else{I=E;D=3456;break L4518}}if((F|0)!=1){I=E;D=3454;break L4518}if((a[C+(E*40&-1)|0]&1)==0){I=E;D=3457;break L4518}K=(bO(d[G+(c[C+(E*40&-1)+32>>2]|0)|0]|0|0)|0)==0;J=c[1054]|0;if(K){K=c[10036]|0;if((a[K+(c[J+(E*40&-1)+32>>2]|0)|0]|0)==95){L=K}else{D=3335;break L4518}}else{L=c[10036]|0}K=c[13898]|0;c[13898]=K+1;H=c[J+(K*40&-1)+36>>2]|0;M=(H|0)>49?49:H;H=c[J+(K*40&-1)+32>>2]|0;K=0;while(1){J=K+1|0;a[k+K|0]=a[L+H|0]|0;if((J|0)==(M|0)){break}else{H=H+1|0;K=J}}a[k+M|0]=0;N=e6(o)|0;K=c[13898]|0;H=c[8272]|0;E=(H|0)>(K|0);L4543:do{if(E){C=c[1054]|0;if((a[C+(K*40&-1)|0]&1)==0){D=3344;break}G=c[C+(K*40&-1)+36>>2]|0;F=C+(K*40&-1)+32|0;C=c[10036]|0;J=0;while(1){if((J|0)>=(G|0)){break}if((a[C+((c[F>>2]|0)+J|0)|0]|0)==(a[J+115e3|0]|0)){J=J+1|0}else{D=3344;break L4543}}F=K+1|0;c[13898]=F;if((J|0)!=1){O=F;D=3392;break}F=is(j)|0;C=c[F>>2]|0;if((C|0)==1){P=+(c[F+8>>2]|0)}else if((C|0)==2){P=+h[F+8>>3]}else if((C|0)==3){P=+uz(c[F+8>>2]|0,0)}else{D=3350;break L4518}if((c[p>>2]|0)==3){uu(c[q>>2]|0);c[p>>2]=1}F=~~P;Q=c[13898]|0;c[13898]=Q+1;if((c[8272]|0)<=(Q|0)){D=3447;break L4518}C=c[1054]|0;if((a[C+(Q*40&-1)|0]&1)==0){D=3445;break L4518}G=c[C+(Q*40&-1)+36>>2]|0;R=C+(Q*40&-1)+32|0;C=c[10036]|0;S=0;while(1){if((S|0)>=(G|0)){break}if((a[C+((c[R>>2]|0)+S|0)|0]|0)==(a[S+183584|0]|0)){S=S+1|0}else{D=3444;break L4518}}if((S|0)!=1){D=3446;break L4518}R=is(g)|0;C=c[R>>2]|0;if((C|0)==1){T=+(c[R+8>>2]|0)}else if((C|0)==2){T=+h[R+8>>3]}else if((C|0)==3){T=+uz(c[R+8>>2]|0,0)}else{D=3364;break L4518}if((c[r>>2]|0)==3){uu(c[s>>2]|0);c[r>>2]=1}R=~~T;C=c[13898]|0;G=c[8272]|0;L4574:do{if((G|0)>(C|0)){J=c[1054]|0;if((a[J+(C*40&-1)|0]&1)==0){U=1;V=C;W=G;break}X=c[J+(C*40&-1)+36>>2]|0;Y=J+(C*40&-1)+32|0;J=c[10036]|0;Z=0;while(1){if((Z|0)>=(X|0)){break}if((a[J+((c[Y>>2]|0)+Z|0)|0]|0)==(a[Z+183584|0]|0)){Z=Z+1|0}else{U=1;V=C;W=G;break L4574}}if((Z|0)!=1){U=1;V=C;W=G;break}c[13898]=C+1;Y=is(f)|0;J=c[Y>>2]|0;if((J|0)==1){_=+(c[Y+8>>2]|0)}else if((J|0)==2){_=+h[Y+8>>3]}else if((J|0)==3){_=+uz(c[Y+8>>2]|0,0)}else{D=3377;break L4518}if((c[t>>2]|0)==3){uu(c[u>>2]|0);c[t>>2]=1}U=~~_;V=c[13898]|0;W=c[8272]|0}else{U=1;V=C;W=G}}while(0);c[13898]=V+1;if((W|0)<=(V|0)){D=3458;break L4518}G=c[1054]|0;if((a[G+(V*40&-1)|0]&1)==0){D=3459;break L4518}C=c[G+(V*40&-1)+36>>2]|0;S=G+(V*40&-1)+32|0;G=c[10036]|0;Y=0;while(1){if((Y|0)>=(C|0)){break}if((a[G+((c[S>>2]|0)+Y|0)|0]|0)==(a[Y+78864|0]|0)){Y=Y+1|0}else{D=3460;break L4518}}if((Y|0)!=1){D=3461;break L4518}S=N+8|0;G=N+16|0;do{if((a[S]&1)==0){if((c[G>>2]|0)!=3){break}uu(c[N+24>>2]|0);c[G>>2]=1}}while(0);c[G>>2]=1;c[N+24>>2]=F;a[S]=0;$=U;ab=R;ac=F;ad=0}else{D=3344}}while(0);if((D|0)==3344){D=0;M=K+1|0;c[13898]=M;O=M;D=3392}if((D|0)==3392){D=0;if(!E){D=3441;break L4518}M=c[1054]|0;if((a[M+(K*40&-1)|0]&1)==0){D=3442;break L4518}Y=c[M+(K*40&-1)+36>>2]|0;C=M+(K*40&-1)+32|0;J=c[10036]|0;X=0;while(1){if((X|0)>=(Y|0)){break}if((a[J+((c[C>>2]|0)+X|0)|0]|0)==(a[X+145600|0]|0)){X=X+1|0}else{D=3443;break L4518}}if((X|0)!=2){D=3440;break L4518}if((O|0)>=(H|0)){ae=O;D=3462;break L4518}L4614:do{if((a[M+(O*40&-1)|0]&1)!=0){C=c[M+(O*40&-1)+36>>2]|0;Y=M+(O*40&-1)+32|0;K=0;while(1){if((K|0)>=(C|0)){break}if((a[J+((c[Y>>2]|0)+K|0)|0]|0)==(a[K+103664|0]|0)){K=K+1|0}else{break L4614}}if((K|0)==1){ae=O;D=3463;break L4518}}}while(0);a[14176]=1;is(e);a[14176]=0;if((c[w>>2]|0)!=3){D=3405;break L4518}J=c[x>>2]|0;af=c[13898]|0;if((J|0)==0){ae=af;D=3465;break L4518}c[13898]=af+1;if((c[8272]|0)<=(af|0)){D=3450;break L4518}M=c[1054]|0;if((a[M+(af*40&-1)|0]&1)==0){D=3451;break L4518}H=c[M+(af*40&-1)+36>>2]|0;X=M+(af*40&-1)+32|0;M=c[10036]|0;Y=0;while(1){if((Y|0)>=(H|0)){break}if((a[M+((c[X>>2]|0)+Y|0)|0]|0)==(a[Y+78864|0]|0)){Y=Y+1|0}else{D=3448;break L4518}}if((Y|0)!=1){D=3449;break L4518}X=e9(J)|0;M=N+8|0;H=N+16|0;do{if((a[M]&1)==0){if((c[H>>2]|0)!=3){break}uu(c[N+24>>2]|0);c[H>>2]=1}}while(0);Y=fa(J,1)|0;c[H>>2]=3;c[N+24>>2]=Y;a[M]=0;$=1;ab=X;ac=1;ad=J}if((N|0)==0){ag=0}else{ag=aa(ab-ac|0,$)>>>31&255}if(!(($|0)==0|(ac|0)==(ab|0))){Y=ab-ac|0;if((((Y|0)>-1?Y:-Y|0)|0)>=((($|0)>-1?$:-$|0)|0)){break}}Y=c[13898]|0;C=c[8272]|0;if((C|0)>(Y|0)){m=Y;B=C}else{n=y;D=3437;break L4518}}B=ut(40)|0;if((B|0)==0){gk();m=ut(40)|0;if((m|0)==0){D=3427;break}else{ah=m}}else{ah=B}B=ah;c[ah+8>>2]=N;c[ah+12>>2]=ad;c[ah+16>>2]=ac;c[ah+20>>2]=ab;c[ah+24>>2]=$;c[ah+28>>2]=ac;c[ah>>2]=0;m=ah+4|0;c[m>>2]=0;uE(ah+32|0,0,7);if((z|0)==0){ai=B}else{C=y+4|0;c[c[C>>2]>>2]=B;c[m>>2]=c[C>>2];ai=y}c[ai+4>>2]=B;B=ai+38|0;if((a[B]&1)==0){a[B]=ag}B=c[13898]|0;C=c[8272]|0;if((C|0)>(B|0)){y=ai;z=z+1|0;A=B;l=C}else{n=ai;D=3434;break}}if((D|0)==3455){aj=I-1|0;uf(aj,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3456){aj=I-1|0;uf(aj,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3457){aj=I-1|0;uf(aj,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3458){uf(V,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3459){uf(V,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3460){uf(V,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3461){uf(V,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3462){ak=ae-1|0;uf(ak,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3463){ak=ae-1|0;uf(ak,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3465){ak=ae-1|0;uf(ak,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3427){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=180144,v)|0);return 0}else if((D|0)==3434){i=b;return n|0}else if((D|0)==3435){i=b;return n|0}else if((D|0)==3436){i=b;return n|0}else if((D|0)==3437){i=b;return n|0}else if((D|0)==3438){i=b;return n|0}else if((D|0)==3440){al=O-1|0;uf(al,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3335){I=c[13898]|0;aj=I-1|0;uf(aj,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3364){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3350){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3377){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3441){al=O-1|0;uf(al,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3442){al=O-1|0;uf(al,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3443){al=O-1|0;uf(al,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3444){uf(Q,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3445){uf(Q,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3446){uf(Q,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3447){uf(Q,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3448){uf(af,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3449){uf(af,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3450){uf(af,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3451){uf(af,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3452){aj=I-1|0;uf(aj,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3454){aj=I-1|0;uf(aj,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((D|0)==3405){c[13898]=O;ae=O;ak=ae-1|0;uf(ak,224336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}return 0}function ix(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((b|0)==0){d=0;return d|0}if((a[b+38|0]&1)!=0){d=0;return d|0}e=c[b+4>>2]|0;if((e|0)==0){d=0;return d|0}f=b+37|0;g=a[f]|0;L4699:do{if((g&1)!=0|(e|0)==(b|0)){h=e;i=g}else{j=e;k=g;while(1){l=j+36|0;if((a[l]&1)==0){h=j;i=k;break L4699}m=c[j+16>>2]|0;n=j+28|0;c[n>>2]=m;a[l]=0;l=j+12|0;o=j+8|0;p=(c[o>>2]|0)+24|0;if((c[l>>2]|0)==0){c[p>>2]=m}else{uu(c[p>>2]|0);p=fa(c[l>>2]|0,c[n>>2]|0)|0;c[(c[o>>2]|0)+24>>2]=p}p=c[j+4>>2]|0;o=a[f]|0;if((o&1)!=0|(p|0)==(b|0)){h=p;i=o;break}else{j=p;k=o}}}}while(0);g=h+8|0;if((c[g>>2]|0)==0){c[h+32>>2]=0;d=0;return d|0}e=b+32|0;c[e>>2]=(c[e>>2]|0)+1;if((i&1)==0){i=h+28|0;c[i>>2]=(c[i>>2]|0)+(c[h+24>>2]|0)}i=h+12|0;if((c[i>>2]|0)==0){c[(c[g>>2]|0)+24>>2]=c[h+28>>2]}else{uu(c[(c[g>>2]|0)+24>>2]|0);e=fa(c[i>>2]|0,c[h+28>>2]|0)|0;c[(c[g>>2]|0)+24>>2]=e}e=c[h+24>>2]|0;a[h+36|0]=aa(((c[h+20>>2]|0)-(c[h+28>>2]|0)|0)-e|0,e)>>>31&255;e=b;b=0;while(1){if(b){q=1}else{q=(a[e+36|0]&1)==0}h=c[e>>2]|0;if((h|0)==0){break}else{e=h;b=q}}if(q){d=1;return d|0}if((a[f]&1)!=0){d=0;return d|0}a[f]=1;d=1;return d|0}function iy(){var b=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;b=c[13898]|0;e=c[1054]|0;if((a[e+(b*40&-1)|0]&1)==0){f=0;return f|0}do{if((bO(d[(c[10036]|0)+(c[e+(b*40&-1)+32>>2]|0)|0]|0|0)|0)==0){if((a[(c[10036]|0)+(c[(c[1054]|0)+(b*40&-1)+32>>2]|0)|0]|0)==95){break}else{f=0}return f|0}}while(0);b=(c[13898]|0)+1|0;if((c[8272]|0)<=(b|0)){f=0;return f|0}e=c[1054]|0;if((a[e+(b*40&-1)|0]&1)==0){f=0;return f|0}g=c[e+(b*40&-1)+36>>2]|0;h=e+(b*40&-1)+32|0;b=c[10036]|0;e=0;while(1){if((e|0)>=(g|0)){break}if((a[b+((c[h>>2]|0)+e|0)|0]|0)==(a[e+115e3|0]|0)){e=e+1|0}else{f=0;i=3519;break}}if((i|0)==3519){return f|0}if((e|0)!=1){f=0;return f|0}e=c[18070]|0;i=c[e>>2]|0;h=c[18066]|0;if((i|0)<(h|0)){j=e;k=i}else{i=db(e,(h<<5)+4808|0,168072)|0;h=i;c[18070]=h;c[18066]=(c[18066]|0)+150;j=h;k=c[i>>2]|0}c[j+8+(k<<5)>>2]=1;k=c[18070]|0;j=c[k>>2]|0;c[k>>2]=j+1;k=c[18070]|0;i=c[13898]|0;h=c[1054]|0;e=c[h+(i*40&-1)+36>>2]|0;b=e+(c[h+(i*40&-1)+32>>2]|0)|0;h=db(0,e+1|0,116456)|0;e=c[(c[1054]|0)+(i*40&-1)+32>>2]|0;L4758:do{if((e|0)<(b|0)){i=e;g=h;while(1){l=a[(c[10036]|0)+i|0]|0;if(l<<24>>24==0){m=g;break L4758}n=g+1|0;a[g]=l;l=i+1|0;if((l|0)<(b|0)){i=l;g=n}else{m=n;break}}}else{m=h}}while(0);a[m]=0;c[k+8+(j<<5)+8>>2]=3;c[k+8+(j<<5)+16>>2]=h;c[13898]=(c[13898]|0)+2;if((iy()|0)==0){c[8230]=(c[8230]|0)+1;iz();iC();c[8230]=(c[8230]|0)-1}h=c[18070]|0;j=c[h>>2]|0;k=c[18066]|0;if((j|0)<(k|0)){o=h;p=j}else{j=db(h,(k<<5)+4808|0,168072)|0;k=j;c[18070]=k;c[18066]=(c[18066]|0)+150;o=k;p=c[j>>2]|0}c[o+8+(p<<5)>>2]=36;p=c[18070]|0;c[p>>2]=(c[p>>2]|0)+1;f=1;return f|0}function iz(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;iA();b=c[13898]|0;if((c[8272]|0)>(b|0)){d=b}else{return}L4773:while(1){b=c[1054]|0;if((a[b+(d*40&-1)|0]&1)==0){e=3540;break}f=c[b+(d*40&-1)+36>>2]|0;g=b+(d*40&-1)+32|0;b=c[10036]|0;h=0;while(1){if((h|0)>=(f|0)){break}if((a[b+((c[g>>2]|0)+h|0)|0]|0)==(a[h+163800|0]|0)){h=h+1|0}else{e=3539;break L4773}}if((h|0)!=2){e=3538;break}c[13898]=d+1;g=c[18070]|0;b=c[g>>2]|0;f=c[18066]|0;if((b|0)<(f|0)){i=g;j=b}else{k=db(g,(f<<5)+4808|0,168072)|0;f=k;c[18070]=f;c[18066]=(c[18066]|0)+150;i=f;j=c[k>>2]|0}c[i+8+(j<<5)>>2]=39;k=c[18070]|0;c[k>>2]=(c[k>>2]|0)+1;iA();k=c[18070]|0;c[k+8+(b<<5)+8>>2]=(c[k>>2]|0)-b;b=c[18070]|0;k=c[b>>2]|0;f=c[18066]|0;if((k|0)<(f|0)){l=b;m=k}else{k=db(b,(f<<5)+4808|0,168072)|0;f=k;c[18070]=f;c[18066]=(c[18066]|0)+150;l=f;m=c[k>>2]|0}c[l+8+(m<<5)>>2]=30;k=c[18070]|0;c[k>>2]=(c[k>>2]|0)+1;k=c[13898]|0;if((c[8272]|0)>(k|0)){d=k}else{e=3536;break}}if((e|0)==3539){return}else if((e|0)==3538){return}else if((e|0)==3536){return}else if((e|0)==3540){return}}function iA(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;iB();b=c[13898]|0;if((c[8272]|0)>(b|0)){d=b}else{return}L4795:while(1){b=c[1054]|0;if((a[b+(d*40&-1)|0]&1)==0){e=3555;break}f=c[b+(d*40&-1)+36>>2]|0;g=b+(d*40&-1)+32|0;b=c[10036]|0;h=0;while(1){if((h|0)>=(f|0)){break}if((a[b+((c[g>>2]|0)+h|0)|0]|0)==(a[h+154536|0]|0)){h=h+1|0}else{e=3556;break L4795}}if((h|0)!=2){e=3554;break}c[13898]=d+1;g=c[18070]|0;b=c[g>>2]|0;f=c[18066]|0;if((b|0)<(f|0)){i=g;j=b}else{k=db(g,(f<<5)+4808|0,168072)|0;f=k;c[18070]=f;c[18066]=(c[18066]|0)+150;i=f;j=c[k>>2]|0}c[i+8+(j<<5)>>2]=38;k=c[18070]|0;c[k>>2]=(c[k>>2]|0)+1;iB();k=c[18070]|0;c[k+8+(b<<5)+8>>2]=(c[k>>2]|0)-b;b=c[18070]|0;k=c[b>>2]|0;f=c[18066]|0;if((k|0)<(f|0)){l=b;m=k}else{k=db(b,(f<<5)+4808|0,168072)|0;f=k;c[18070]=f;c[18066]=(c[18066]|0)+150;l=f;m=c[k>>2]|0}c[l+8+(m<<5)>>2]=30;k=c[18070]|0;c[k>>2]=(c[k>>2]|0)+1;k=c[13898]|0;if((c[8272]|0)>(k|0)){d=k}else{e=3553;break}}if((e|0)==3554){return}else if((e|0)==3555){return}else if((e|0)==3553){return}else if((e|0)==3556){return}}function iB(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;iD();b=c[13898]|0;if((c[8272]|0)>(b|0)){d=b}else{return}L4817:while(1){b=c[1054]|0;if((a[b+(d*40&-1)|0]&1)==0){e=3572;break}f=c[b+(d*40&-1)+36>>2]|0;g=b+(d*40&-1)+32|0;b=c[10036]|0;h=0;while(1){if((h|0)>=(f|0)){break}if((a[b+((c[g>>2]|0)+h|0)|0]|0)==(a[h+151312|0]|0)){h=h+1|0}else{e=3571;break L4817}}if((h|0)!=1){e=3570;break}c[13898]=d+1;iD();g=c[18070]|0;b=c[g>>2]|0;f=c[18066]|0;if((b|0)<(f|0)){i=g;j=b}else{b=db(g,(f<<5)+4808|0,168072)|0;f=b;c[18070]=f;c[18066]=(c[18066]|0)+150;i=f;j=c[b>>2]|0}c[i+8+(j<<5)>>2]=14;b=c[18070]|0;c[b>>2]=(c[b>>2]|0)+1;b=c[13898]|0;if((c[8272]|0)>(b|0)){d=b}else{e=3568;break}}if((e|0)==3571){return}else if((e|0)==3572){return}else if((e|0)==3568){return}else if((e|0)==3570){return}}function iC(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;b=i;d=c[13898]|0;if((c[8272]|0)<=(d|0)){i=b;return}e=c[1054]|0;if((a[e+(d*40&-1)|0]&1)==0){i=b;return}f=c[e+(d*40&-1)+36>>2]|0;g=e+(d*40&-1)+32|0;e=c[10036]|0;h=0;while(1){if((h|0)>=(f|0)){break}if((a[e+((c[g>>2]|0)+h|0)|0]|0)==(a[h+216168|0]|0)){h=h+1|0}else{j=3603;break}}if((j|0)==3603){i=b;return}if((h|0)!=1){i=b;return}c[8230]=(c[8230]|0)-1;c[13898]=d+1;d=c[18070]|0;h=c[d>>2]|0;g=c[18066]|0;if((h|0)<(g|0)){k=d;l=h}else{e=db(d,(g<<5)+4808|0,168072)|0;g=e;c[18070]=g;c[18066]=(c[18066]|0)+150;k=g;l=c[e>>2]|0}c[k+8+(l<<5)>>2]=40;l=c[18070]|0;c[l>>2]=(c[l>>2]|0)+1;if((iy()|0)==0){c[8230]=(c[8230]|0)+1;iz();iC();c[8230]=(c[8230]|0)-1}l=c[13898]|0;if((c[8272]|0)<=(l|0)){uf(l,172040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}k=c[1054]|0;if((a[k+(l*40&-1)|0]&1)==0){uf(l,172040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=c[k+(l*40&-1)+36>>2]|0;g=k+(l*40&-1)+32|0;k=c[10036]|0;d=0;while(1){if((d|0)>=(e|0)){break}if((a[k+((c[g>>2]|0)+d|0)|0]|0)==(a[d+183584|0]|0)){d=d+1|0}else{j=3598;break}}if((j|0)==3598){uf(l,172040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((d|0)!=1){uf(l,172040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[13898]=l+1;l=c[18070]|0;d=c[l>>2]|0;j=c[18066]|0;if((d|0)<(j|0)){m=l;n=d}else{g=db(l,(j<<5)+4808|0,168072)|0;j=g;c[18070]=j;c[18066]=(c[18066]|0)+150;m=j;n=c[g>>2]|0}c[m+8+(n<<5)>>2]=37;n=c[18070]|0;c[n>>2]=(c[n>>2]|0)+1;n=c[18070]|0;c[n+8+(h<<5)+8>>2]=(c[n>>2]|0)-h;if((iy()|0)==0){c[8230]=(c[8230]|0)+1;iz();iC();c[8230]=(c[8230]|0)-1}h=c[18070]|0;c[h+8+(d<<5)+8>>2]=(c[h>>2]|0)-d;c[8230]=(c[8230]|0)+1;i=b;return}function iD(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;iE();b=c[13898]|0;if((c[8272]|0)>(b|0)){d=b}else{return}L4880:while(1){b=c[1054]|0;if((a[b+(d*40&-1)|0]&1)==0){e=3617;break}f=c[b+(d*40&-1)+36>>2]|0;g=b+(d*40&-1)+32|0;b=c[10036]|0;h=0;while(1){if((h|0)>=(f|0)){break}if((a[b+((c[g>>2]|0)+h|0)|0]|0)==(a[h+149504|0]|0)){h=h+1|0}else{e=3618;break L4880}}if((h|0)!=1){e=3616;break}c[13898]=d+1;iE();g=c[18070]|0;b=c[g>>2]|0;f=c[18066]|0;if((b|0)<(f|0)){i=g;j=b}else{b=db(g,(f<<5)+4808|0,168072)|0;f=b;c[18070]=f;c[18066]=(c[18066]|0)+150;i=f;j=c[b>>2]|0}c[i+8+(j<<5)>>2]=15;b=c[18070]|0;c[b>>2]=(c[b>>2]|0)+1;b=c[13898]|0;if((c[8272]|0)>(b|0)){d=b}else{e=3615;break}}if((e|0)==3616){return}else if((e|0)==3615){return}else if((e|0)==3618){return}else if((e|0)==3617){return}}function iE(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;iF();b=c[13898]|0;if((c[8272]|0)>(b|0)){d=b}else{return}L4899:while(1){b=c[1054]|0;if((a[b+(d*40&-1)|0]&1)==0){e=3632;break}f=c[b+(d*40&-1)+36>>2]|0;g=b+(d*40&-1)+32|0;b=c[10036]|0;h=0;while(1){if((h|0)>=(f|0)){break}if((a[b+((c[g>>2]|0)+h|0)|0]|0)==(a[h+147520|0]|0)){h=h+1|0}else{e=3630;break L4899}}if((h|0)!=1){e=3633;break}c[13898]=d+1;iF();g=c[18070]|0;b=c[g>>2]|0;f=c[18066]|0;if((b|0)<(f|0)){i=g;j=b}else{b=db(g,(f<<5)+4808|0,168072)|0;f=b;c[18070]=f;c[18066]=(c[18066]|0)+150;i=f;j=c[b>>2]|0}c[i+8+(j<<5)>>2]=16;b=c[18070]|0;c[b>>2]=(c[b>>2]|0)+1;b=c[13898]|0;if((c[8272]|0)>(b|0)){d=b}else{e=3634;break}}if((e|0)==3633){return}else if((e|0)==3632){return}else if((e|0)==3630){return}else if((e|0)==3634){return}}function iF(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;iI();iJ();iH();iG();L4916:while(1){b=c[13898]|0;d=(c[8272]|0)>(b|0);if(!d){e=3675;break}f=c[1054]|0;if((a[f+(b*40&-1)|0]&1)!=0){g=c[f+(b*40&-1)+36>>2]|0;h=f+(b*40&-1)+32|0;f=c[10036]|0;i=0;while(1){if((i|0)>=(g|0)){e=3641;break}if((a[f+((c[h>>2]|0)+i|0)|0]|0)==(a[i+145384|0]|0)){i=i+1|0}else{break}}do{if((e|0)==3641){e=0;if((i|0)!=2){break}c[13898]=b+1;iI();iJ();iH();iG();h=c[18070]|0;f=c[h>>2]|0;g=c[18066]|0;if((f|0)<(g|0)){j=h;k=f}else{f=db(h,(g<<5)+4808|0,168072)|0;g=f;c[18070]=g;c[18066]=(c[18066]|0)+150;j=g;k=c[f>>2]|0}c[j+8+(k<<5)>>2]=17;f=c[18070]|0;c[f>>2]=(c[f>>2]|0)+1;continue L4916}}while(0);if(!d){e=3674;break}}i=c[1054]|0;L4932:do{if((a[i+(b*40&-1)|0]&1)!=0){f=c[i+(b*40&-1)+36>>2]|0;g=i+(b*40&-1)+32|0;h=c[10036]|0;l=0;while(1){if((l|0)>=(f|0)){break}if((a[h+((c[g>>2]|0)+l|0)|0]|0)==(a[l+143464|0]|0)){l=l+1|0}else{break L4932}}if((l|0)!=2){break}c[13898]=b+1;iI();iJ();iH();iG();g=c[18070]|0;h=c[g>>2]|0;f=c[18066]|0;if((h|0)<(f|0)){m=g;n=h}else{h=db(g,(f<<5)+4808|0,168072)|0;f=h;c[18070]=f;c[18066]=(c[18066]|0)+150;m=f;n=c[h>>2]|0}c[m+8+(n<<5)>>2]=18;h=c[18070]|0;c[h>>2]=(c[h>>2]|0)+1;continue L4916}}while(0);if(!d){e=3673;break}i=c[1054]|0;if((a[i+(b*40&-1)|0]&1)!=0){h=c[i+(b*40&-1)+36>>2]|0;f=i+(b*40&-1)+32|0;i=c[10036]|0;g=0;while(1){if((g|0)>=(h|0)){e=3659;break}if((a[i+((c[f>>2]|0)+g|0)|0]|0)==(a[g+141992|0]|0)){g=g+1|0}else{break}}do{if((e|0)==3659){e=0;if((g|0)!=2){break}c[13898]=b+1;iI();iJ();iH();iG();f=c[18070]|0;i=c[f>>2]|0;h=c[18066]|0;if((i|0)<(h|0)){o=f;p=i}else{i=db(f,(h<<5)+4808|0,168072)|0;h=i;c[18070]=h;c[18066]=(c[18066]|0)+150;o=h;p=c[i>>2]|0}c[o+8+(p<<5)>>2]=33;i=c[18070]|0;c[i>>2]=(c[i>>2]|0)+1;continue L4916}}while(0);if(!d){e=3676;break}}g=c[1054]|0;if((a[g+(b*40&-1)|0]&1)==0){e=3677;break}i=c[g+(b*40&-1)+36>>2]|0;h=g+(b*40&-1)+32|0;g=c[10036]|0;f=0;while(1){if((f|0)>=(i|0)){break}if((a[g+((c[h>>2]|0)+f|0)|0]|0)==(a[f+140312|0]|0)){f=f+1|0}else{e=3678;break L4916}}if((f|0)!=2){e=3679;break}c[13898]=b+1;iI();iJ();iH();iG();h=c[18070]|0;g=c[h>>2]|0;i=c[18066]|0;if((g|0)<(i|0)){q=h;r=g}else{g=db(h,(i<<5)+4808|0,168072)|0;i=g;c[18070]=i;c[18066]=(c[18066]|0)+150;q=i;r=c[g>>2]|0}c[q+8+(r<<5)>>2]=34;g=c[18070]|0;c[g>>2]=(c[g>>2]|0)+1}if((e|0)==3679){return}else if((e|0)==3673){return}else if((e|0)==3674){return}else if((e|0)==3675){return}else if((e|0)==3676){return}else if((e|0)==3677){return}else if((e|0)==3678){return}}function iG(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;L4975:while(1){b=c[13898]|0;d=c[8272]|0;e=(d|0)>(b|0);if(!e){f=3726;break}g=c[1054]|0;if((a[g+(b*40&-1)|0]&1)!=0){h=c[g+(b*40&-1)+36>>2]|0;i=g+(b*40&-1)+32|0;g=c[10036]|0;j=0;while(1){if((j|0)>=(h|0)){f=3686;break}if((a[g+((c[i>>2]|0)+j|0)|0]|0)==(a[j+138304|0]|0)){j=j+1|0}else{break}}do{if((f|0)==3686){f=0;if((j|0)!=1){break}c[13898]=b+1;iI();iJ();iH();i=c[18070]|0;g=c[i>>2]|0;h=c[18066]|0;if((g|0)<(h|0)){k=i;l=g}else{g=db(i,(h<<5)+4808|0,168072)|0;h=g;c[18070]=h;c[18066]=(c[18066]|0)+150;k=h;l=c[g>>2]|0}c[k+8+(l<<5)>>2]=19;g=c[18070]|0;c[g>>2]=(c[g>>2]|0)+1;continue L4975}}while(0);if(!e){f=3729;break}}j=c[1054]|0;L4991:do{if((a[j+(b*40&-1)|0]&1)!=0){g=c[j+(b*40&-1)+36>>2]|0;h=j+(b*40&-1)+32|0;i=c[10036]|0;m=0;while(1){if((m|0)>=(g|0)){break}if((a[i+((c[h>>2]|0)+m|0)|0]|0)==(a[m+136608|0]|0)){m=m+1|0}else{break L4991}}if((m|0)!=1){break}h=b+1|0;L4998:do{if((a[25288]&1)!=0&(d|0)>(h|0)){if((a[j+(h*40&-1)|0]&1)==0){break}g=c[j+(h*40&-1)+36>>2]|0;n=j+(h*40&-1)+32|0;o=0;while(1){if((o|0)>=(g|0)){break}if((a[i+((c[n>>2]|0)+o|0)|0]|0)==(a[o+134808|0]|0)){o=o+1|0}else{break L4998}}if((o|0)==1){f=3728;break L4975}}}while(0);c[13898]=h;iI();iJ();iH();i=c[18070]|0;m=c[i>>2]|0;n=c[18066]|0;if((m|0)<(n|0)){p=i;q=m}else{m=db(i,(n<<5)+4808|0,168072)|0;n=m;c[18070]=n;c[18066]=(c[18066]|0)+150;p=n;q=c[m>>2]|0}c[p+8+(q<<5)>>2]=20;m=c[18070]|0;c[m>>2]=(c[m>>2]|0)+1;continue L4975}}while(0);if(!e){f=3730;break}j=c[1054]|0;if((a[j+(b*40&-1)|0]&1)!=0){d=c[j+(b*40&-1)+36>>2]|0;m=j+(b*40&-1)+32|0;j=c[10036]|0;n=0;while(1){if((n|0)>=(d|0)){f=3710;break}if((a[j+((c[m>>2]|0)+n|0)|0]|0)==(a[n+133312|0]|0)){n=n+1|0}else{break}}do{if((f|0)==3710){f=0;if((n|0)!=2){break}c[13898]=b+1;iI();iJ();iH();m=c[18070]|0;j=c[m>>2]|0;d=c[18066]|0;if((j|0)<(d|0)){r=m;s=j}else{j=db(m,(d<<5)+4808|0,168072)|0;d=j;c[18070]=d;c[18066]=(c[18066]|0)+150;r=d;s=c[j>>2]|0}c[r+8+(s<<5)>>2]=21;j=c[18070]|0;c[j>>2]=(c[j>>2]|0)+1;continue L4975}}while(0);if(!e){f=3727;break}}n=c[1054]|0;if((a[n+(b*40&-1)|0]&1)==0){f=3731;break}j=c[n+(b*40&-1)+36>>2]|0;d=n+(b*40&-1)+32|0;n=c[10036]|0;m=0;while(1){if((m|0)>=(j|0)){break}if((a[n+((c[d>>2]|0)+m|0)|0]|0)==(a[m+131928|0]|0)){m=m+1|0}else{f=3724;break L4975}}if((m|0)!=2){f=3725;break}c[13898]=b+1;iI();iJ();iH();d=c[18070]|0;n=c[d>>2]|0;j=c[18066]|0;if((n|0)<(j|0)){t=d;u=n}else{n=db(d,(j<<5)+4808|0,168072)|0;j=n;c[18070]=j;c[18066]=(c[18066]|0)+150;t=j;u=c[n>>2]|0}c[t+8+(u<<5)>>2]=22;n=c[18070]|0;c[n>>2]=(c[n>>2]|0)+1}if((f|0)==3726){return}else if((f|0)==3727){return}else if((f|0)==3728){return}else if((f|0)==3724){return}else if((f|0)==3725){return}else if((f|0)==3729){return}else if((f|0)==3730){return}else if((f|0)==3731){return}}function iH(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;L5043:while(1){b=c[13898]|0;d=(c[8272]|0)>(b|0);L5045:do{if(d){e=c[1054]|0;if((a[e+(b*40&-1)|0]&1)==0){break}f=c[e+(b*40&-1)+36>>2]|0;g=e+(b*40&-1)+32|0;e=c[10036]|0;h=0;while(1){if((h|0)>=(f|0)){break}if((a[e+((c[g>>2]|0)+h|0)|0]|0)==(a[h+202200|0]|0)){h=h+1|0}else{break L5045}}if((h|0)!=1){break}c[13898]=b+1;iI();iJ();g=c[18070]|0;e=c[g>>2]|0;f=c[18066]|0;if((e|0)<(f|0)){i=g;j=e}else{e=db(g,(f<<5)+4808|0,168072)|0;f=e;c[18070]=f;c[18066]=(c[18066]|0)+150;i=f;j=c[e>>2]|0}c[i+8+(j<<5)>>2]=32;e=c[18070]|0;c[e>>2]=(c[e>>2]|0)+1;continue L5043}}while(0);if(a[14176]&(c[8230]|0)==1|d^1){k=3763;break}e=c[1054]|0;if((a[e+(b*40&-1)|0]&1)!=0){f=c[e+(b*40&-1)+36>>2]|0;g=e+(b*40&-1)+32|0;e=c[10036]|0;l=0;while(1){if((l|0)>=(f|0)){k=3747;break}if((a[e+((c[g>>2]|0)+l|0)|0]|0)==(a[l+129568|0]|0)){l=l+1|0}else{break}}do{if((k|0)==3747){k=0;if((l|0)!=1){break}c[13898]=b+1;iI();iJ();g=c[18070]|0;e=c[g>>2]|0;f=c[18066]|0;if((e|0)<(f|0)){m=g;n=e}else{e=db(g,(f<<5)+4808|0,168072)|0;f=e;c[18070]=f;c[18066]=(c[18066]|0)+150;m=f;n=c[e>>2]|0}c[m+8+(n<<5)>>2]=23;e=c[18070]|0;c[e>>2]=(c[e>>2]|0)+1;continue L5043}}while(0);if(!d){k=3764;break}}l=c[1054]|0;if((a[l+(b*40&-1)|0]&1)==0){k=3765;break}e=c[l+(b*40&-1)+36>>2]|0;f=l+(b*40&-1)+32|0;l=c[10036]|0;g=0;while(1){if((g|0)>=(e|0)){break}if((a[l+((c[f>>2]|0)+g|0)|0]|0)==(a[g+202112|0]|0)){g=g+1|0}else{k=3761;break L5043}}if((g|0)!=1){k=3762;break}c[13898]=b+1;iI();iJ();f=c[18070]|0;l=c[f>>2]|0;e=c[18066]|0;if((l|0)<(e|0)){o=f;p=l}else{l=db(f,(e<<5)+4808|0,168072)|0;e=l;c[18070]=e;c[18066]=(c[18066]|0)+150;o=e;p=c[l>>2]|0}c[o+8+(p<<5)>>2]=24;l=c[18070]|0;c[l>>2]=(c[l>>2]|0)+1}if((k|0)==3762){return}else if((k|0)==3763){return}else if((k|0)==3761){return}else if((k|0)==3764){return}else if((k|0)==3765){return}}function iI(){var b=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0;b=i;i=i+104|0;e=b|0;f=b+56|0;g=b+72|0;h=b+88|0;j=c[13898]|0;k=(c[8272]|0)>(j|0);L5087:do{if(k){l=c[1054]|0;if((a[l+(j*40&-1)|0]&1)!=0){m=c[l+(j*40&-1)+36>>2]|0;n=l+(j*40&-1)+32|0;l=c[10036]|0;o=0;while(1){if((o|0)>=(m|0)){p=3771;break}if((a[l+((c[n>>2]|0)+o|0)|0]|0)==(a[o+124624|0]|0)){o=o+1|0}else{break}}do{if((p|0)==3771){if((o|0)!=1){break}c[13898]=j+1;iI();n=c[18070]|0;l=c[n>>2]|0;m=c[18066]|0;if((l|0)<(m|0)){q=n;r=l}else{l=db(n,(m<<5)+4808|0,168072)|0;m=l;c[18070]=m;c[18066]=(c[18066]|0)+150;q=m;r=c[l>>2]|0}c[q+8+(r<<5)>>2]=9;l=c[18070]|0;c[l>>2]=(c[l>>2]|0)+1;i=b;return}}while(0);if(!k){break}}o=c[1054]|0;L5103:do{if((a[o+(j*40&-1)|0]&1)!=0){l=c[o+(j*40&-1)+36>>2]|0;m=o+(j*40&-1)+32|0;n=c[10036]|0;s=0;while(1){if((s|0)>=(l|0)){break}if((a[n+((c[m>>2]|0)+s|0)|0]|0)==(a[s+123264|0]|0)){s=s+1|0}else{break L5103}}if((s|0)!=1){break}c[13898]=j+1;iI();m=c[18070]|0;n=c[m>>2]|0;l=c[18066]|0;if((n|0)<(l|0)){t=m;u=n}else{n=db(m,(l<<5)+4808|0,168072)|0;l=n;c[18070]=l;c[18066]=(c[18066]|0)+150;t=l;u=c[n>>2]|0}c[t+8+(u<<5)>>2]=10;n=c[18070]|0;c[n>>2]=(c[n>>2]|0)+1;i=b;return}}while(0);if(!k){break}o=c[1054]|0;if((a[o+(j*40&-1)|0]&1)!=0){n=c[o+(j*40&-1)+36>>2]|0;l=o+(j*40&-1)+32|0;o=c[10036]|0;m=0;while(1){if((m|0)>=(n|0)){p=3789;break}if((a[o+((c[l>>2]|0)+m|0)|0]|0)==(a[m+202112|0]|0)){m=m+1|0}else{break}}do{if((p|0)==3789){if((m|0)!=1){break}c[13898]=j+1;iI();l=c[18070]|0;o=c[l>>2]|0;n=c[18066]|0;if((o|0)<(n|0)){w=l;x=o}else{o=db(l,(n<<5)+4808|0,168072)|0;n=o;c[18070]=n;c[18066]=(c[18066]|0)+150;w=n;x=c[o>>2]|0}c[w+8+(x<<5)>>2]=11;o=c[18070]|0;c[o>>2]=(c[o>>2]|0)+1;i=b;return}}while(0);if(!k){break}}m=c[1054]|0;if((a[m+(j*40&-1)|0]&1)==0){break}o=c[m+(j*40&-1)+36>>2]|0;n=m+(j*40&-1)+32|0;m=c[10036]|0;l=0;while(1){if((l|0)>=(o|0)){break}if((a[m+((c[n>>2]|0)+l|0)|0]|0)==(a[l+129568|0]|0)){l=l+1|0}else{break L5087}}if((l|0)!=1){break}c[13898]=j+1;iI();i=b;return}}while(0);x=f|0;f=g|0;g=h|0;L5138:do{if(k){h=c[1054]|0;if((a[h+(j*40&-1)|0]&1)!=0){w=c[h+(j*40&-1)+36>>2]|0;u=h+(j*40&-1)+32|0;h=c[10036]|0;t=0;while(1){if((t|0)>=(w|0)){p=3805;break}if((a[h+((c[u>>2]|0)+t|0)|0]|0)==(a[t+199040|0]|0)){t=t+1|0}else{break}}do{if((p|0)==3805){if((t|0)!=1){break}c[13898]=j+1;if((iy()|0)==0){c[8230]=(c[8230]|0)+1;iz();iC();c[8230]=(c[8230]|0)-1}u=c[13898]|0;h=c[8272]|0;L5151:do{if((h|0)>(u|0)){w=u;l=h;while(1){r=c[1054]|0;if((a[r+(w*40&-1)|0]&1)==0){y=w;z=l;break L5151}q=c[r+(w*40&-1)+36>>2]|0;n=r+(w*40&-1)+32|0;r=c[10036]|0;m=0;while(1){if((m|0)>=(q|0)){break}if((a[r+((c[n>>2]|0)+m|0)|0]|0)==(a[m+148464|0]|0)){m=m+1|0}else{y=w;z=l;break L5151}}if((m|0)!=1){y=w;z=l;break L5151}c[13898]=w+1;n=c[18070]|0;r=c[n>>2]|0;q=c[18066]|0;if((r|0)<(q|0)){A=n;B=r}else{r=db(n,(q<<5)+4808|0,168072)|0;q=r;c[18070]=q;c[18066]=(c[18066]|0)+150;A=q;B=c[r>>2]|0}c[A+8+(B<<5)>>2]=5;r=c[18070]|0;c[r>>2]=(c[r>>2]|0)+1;if((iy()|0)==0){c[8230]=(c[8230]|0)+1;iz();iC();c[8230]=(c[8230]|0)-1}r=c[13898]|0;q=c[8272]|0;if((q|0)>(r|0)){w=r;l=q}else{y=r;z=q;break}}}else{y=u;z=h}}while(0);if((z|0)<=(y|0)){uf(y,116056,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}h=c[1054]|0;if((a[h+(y*40&-1)|0]&1)==0){uf(y,116056,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}u=c[h+(y*40&-1)+36>>2]|0;s=h+(y*40&-1)+32|0;h=c[10036]|0;l=0;while(1){if((l|0)>=(u|0)){break}if((a[h+((c[s>>2]|0)+l|0)|0]|0)==(a[l+131272|0]|0)){l=l+1|0}else{p=4123;break}}if((p|0)==4123){uf(y,116056,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((l|0)==1){c[13898]=y+1;break L5138}else{uf(y,116056,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if(!k){p=3828;break}}t=c[1054]|0;s=a[t+(j*40&-1)|0]|0;if((s&1)==0){C=t;D=s;p=3843;break}h=c[t+(j*40&-1)+36>>2]|0;u=t+(j*40&-1)+32|0;w=c[10036]|0;q=0;while(1){if((q|0)>=(h|0)){break}if((a[w+((c[u>>2]|0)+q|0)|0]|0)==(a[q+180784|0]|0)){q=q+1|0}else{C=t;D=s;p=3843;break L5138}}if((q|0)!=1){C=t;D=s;p=3843;break}u=j+1|0;c[13898]=u;if((a[t+(u*40&-1)|0]&1)!=0){uf(u,114232,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}w=j+2|0;c[13898]=w;h=t+(u*40&-1)+8|0;r=h;n=c[h>>2]|0;h=c[r+4>>2]|0;o=c[t+(u*40&-1)+16>>2]|0;u=r+12|0;c[x>>2]=c[u>>2];c[x+4>>2]=c[u+4>>2];c[x+8>>2]=c[u+8>>2];if((n|0)!=1|(o|0)<0){uf(w,110760,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((c[18068]|0)<(o|0)){c[18068]=o}w=c[18070]|0;n=c[w>>2]|0;u=c[18066]|0;if((n|0)<(u|0)){E=w;F=n}else{n=db(w,(u<<5)+4808|0,168072)|0;u=n;c[18070]=u;c[18066]=(c[18066]|0)+150;E=u;F=c[n>>2]|0}c[E+8+(F<<5)>>2]=31;n=c[18070]|0;u=c[n>>2]|0;c[n>>2]=u+1;n=c[18070]|0;w=n+8+(u<<5)+8|0;r=w;c[w>>2]=1;c[r+4>>2]=h;c[n+8+(u<<5)+16>>2]=o;o=r+12|0;c[o>>2]=c[x>>2];c[o+4>>2]=c[x+4>>2];c[o+8>>2]=c[x+8>>2]}else{p=3828}}while(0);if((p|0)==3828){x=c[1054]|0;C=x;D=a[x+(j*40&-1)|0]|0;p=3843}L5204:do{if((p|0)==3843){if((D&1)==0){x=c[18070]|0;F=c[x>>2]|0;E=c[18066]|0;if((F|0)<(E|0)){G=x;H=F}else{F=db(x,(E<<5)+4808|0,168072)|0;E=F;c[18070]=E;c[18066]=(c[18066]|0)+150;G=E;H=c[F>>2]|0}c[G+8+(H<<5)>>2]=1;F=c[18070]|0;E=c[F>>2]|0;c[F>>2]=E+1;F=(c[18070]|0)+8+(E<<5)+8|0;E=(c[1054]|0)+((c[13898]|0)*40&-1)+8|0;c[F>>2]=c[E>>2];c[F+4>>2]=c[E+4>>2];c[F+8>>2]=c[E+8>>2];c[F+12>>2]=c[E+12>>2];c[F+16>>2]=c[E+16>>2];c[F+20>>2]=c[E+20>>2];c[13898]=(c[13898]|0)+1;break}do{if((bO(d[(c[10036]|0)+(c[C+(j*40&-1)+32>>2]|0)|0]|0|0)|0)==0){E=c[1054]|0;F=c[10036]|0;x=c[13898]|0;if((a[F+(c[E+(j*40&-1)+32>>2]|0)|0]|0)==95){I=x;break}if((a[E+(x*40&-1)|0]&1)==0){uf(x,104392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}k=a[F+(c[E+(x*40&-1)+32>>2]|0)|0]|0;if(!((k<<24>>24|0)==39|(k<<24>>24|0)==34)){uf(x,104392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}x=c[18070]|0;k=c[x>>2]|0;E=c[18066]|0;if((k|0)<(E|0)){J=x;K=k}else{k=db(x,(E<<5)+4808|0,168072)|0;E=k;c[18070]=E;c[18066]=(c[18066]|0)+150;J=E;K=c[k>>2]|0}c[J+8+(K<<5)>>2]=1;k=c[18070]|0;E=c[k>>2]|0;c[k>>2]=E+1;k=c[18070]|0;c[k+8+(E<<5)+8>>2]=3;x=k+8+(E<<5)+16|0;c[x>>2]=0;E=c[13898]|0;ub(x,E,E);c[13898]=(c[13898]|0)+1;break L5204}else{I=c[13898]|0}}while(0);t=I+1|0;s=c[8272]|0;q=(s|0)>(t|0);L5226:do{if(q){E=c[1054]|0;if((a[E+(t*40&-1)|0]&1)==0){break}x=c[E+(t*40&-1)+36>>2]|0;k=E+(t*40&-1)+32|0;F=c[10036]|0;y=0;while(1){if((y|0)>=(x|0)){break}if((a[F+((c[k>>2]|0)+y|0)|0]|0)==(a[y+199040|0]|0)){y=y+1|0}else{break L5226}}if((y|0)!=1){break}k=(s|0)>(I|0);x=E+(I*40&-1)|0;l=E+(I*40&-1)+36|0;z=E+(I*40&-1)+32|0;B=41;L5234:while(1){A=c[41160+(B<<3)>>2]|0;L5236:do{if(k){if((a[x]&1)==0){break}o=c[l>>2]|0;r=0;while(1){if((r|0)>=(o|0)){break}if((a[F+((c[z>>2]|0)+r|0)|0]|0)==(a[A+r|0]|0)){r=r+1|0}else{break L5236}}if((a[A+r|0]|0)==0){L=B;break L5234}}}while(0);A=B+1|0;if((A|0)==117){L=0;break}else{B=A}}c[13898]=I+2;if((iy()|0)==0){c[8230]=(c[8230]|0)+1;iz();iC();c[8230]=(c[8230]|0)-1}B=c[13898]|0;z=c[8272]|0;F=(z|0)>(B|0);if((L|0)==0){L5250:do{if(F){l=c[1054]|0;x=a[l+(B*40&-1)|0]|0;if((x&1)==0){M=6;N=B;O=z;break}k=c[l+(B*40&-1)+36>>2]|0;E=l+(B*40&-1)+32|0;y=c[10036]|0;A=0;while(1){if((A|0)>=(k|0)){break}if((a[y+((c[E>>2]|0)+A|0)|0]|0)==(a[A+148464|0]|0)){A=A+1|0}else{M=6;N=B;O=z;break L5250}}if((A|0)==1){P=1;Q=B;R=l;S=x}else{M=6;N=B;O=z;break}L5257:while(1){if((S&1)==0){T=P;break}E=c[R+(Q*40&-1)+36>>2]|0;y=R+(Q*40&-1)+32|0;k=c[10036]|0;o=0;while(1){if((o|0)>=(E|0)){break}if((a[k+((c[y>>2]|0)+o|0)|0]|0)==(a[o+148464|0]|0)){o=o+1|0}else{T=P;break L5257}}if((o|0)!=1){T=P;break}y=P+1|0;c[13898]=Q+1;if((iy()|0)==0){c[8230]=(c[8230]|0)+1;iz();iC();c[8230]=(c[8230]|0)-1}k=c[13898]|0;if((c[8272]|0)<=(k|0)){T=y;break}E=c[1054]|0;P=y;Q=k;R=E;S=a[E+(k*40&-1)|0]|0}x=c[18070]|0;l=c[x>>2]|0;A=c[18066]|0;if((l|0)<(A|0)){U=x;V=l}else{l=db(x,(A<<5)+4808|0,168072)|0;A=l;c[18070]=A;c[18066]=(c[18066]|0)+150;U=A;V=c[l>>2]|0}c[U+8+(V<<5)>>2]=1;l=c[18070]|0;A=c[l>>2]|0;c[l>>2]=A+1;l=c[18070]|0;x=l+8+(A<<5)+8|0;c[x>>2]=1;c[l+8+(A<<5)+16>>2]=T;A=x+12|0;c[A>>2]=c[f>>2];c[A+4>>2]=c[f+4>>2];c[A+8>>2]=c[f+8>>2];M=7;N=c[13898]|0;O=c[8272]|0}else{M=6;N=B;O=z}}while(0);if((O|0)<=(N|0)){uf(N,116056,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}A=c[1054]|0;if((a[A+(N*40&-1)|0]&1)==0){uf(N,116056,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}x=c[A+(N*40&-1)+36>>2]|0;l=A+(N*40&-1)+32|0;A=c[10036]|0;k=0;while(1){if((k|0)>=(x|0)){break}if((a[A+((c[l>>2]|0)+k|0)|0]|0)==(a[k+131272|0]|0)){k=k+1|0}else{p=4154;break}}if((p|0)==4154){uf(N,116056,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((k|0)!=1){uf(N,116056,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[13898]=N+1;l=iv(I)|0;A=c[18070]|0;x=c[A>>2]|0;E=c[18066]|0;if((x|0)<(E|0)){W=A;X=x}else{x=db(A,(E<<5)+4808|0,168072)|0;E=x;c[18070]=E;c[18066]=(c[18066]|0)+150;W=E;X=c[x>>2]|0}c[W+8+(X<<5)>>2]=M;x=c[18070]|0;E=c[x>>2]|0;c[x>>2]=E+1;c[(c[18070]|0)+8+(E<<5)+8>>2]=l;break L5204}L5293:do{if(F){l=1;E=B;x=z;while(1){A=c[1054]|0;if((a[A+(E*40&-1)|0]&1)==0){Y=E;Z=l;_=x;break L5293}y=c[A+(E*40&-1)+36>>2]|0;r=A+(E*40&-1)+32|0;A=c[10036]|0;m=0;while(1){if((m|0)>=(y|0)){break}if((a[A+((c[r>>2]|0)+m|0)|0]|0)==(a[m+148464|0]|0)){m=m+1|0}else{Y=E;Z=l;_=x;break L5293}}if((m|0)!=1){Y=E;Z=l;_=x;break L5293}c[13898]=E+1;r=l+1|0;if((iy()|0)==0){c[8230]=(c[8230]|0)+1;iz();iC();c[8230]=(c[8230]|0)-1}A=c[13898]|0;y=c[8272]|0;if((y|0)>(A|0)){l=r;E=A;x=y}else{Y=A;Z=r;_=y;break}}}else{Y=B;Z=1;_=z}}while(0);if((_|0)<=(Y|0)){uf(Y,116056,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}z=c[1054]|0;if((a[z+(Y*40&-1)|0]&1)==0){uf(Y,116056,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}B=c[z+(Y*40&-1)+36>>2]|0;F=z+(Y*40&-1)+32|0;z=c[10036]|0;k=0;while(1){if((k|0)>=(B|0)){break}if((a[z+((c[F>>2]|0)+k|0)|0]|0)==(a[k+131272|0]|0)){k=k+1|0}else{p=4166;break}}if((p|0)==4166){uf(Y,116056,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((k|0)!=1){uf(Y,116056,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[13898]=Y+1;F=c[41160+(L<<3)>>2]|0;if((aY(F|0,107968)|0)==0){z=c[18070]|0;B=c[z>>2]|0;x=c[18066]|0;if((B|0)<(x|0)){$=z;aa=B}else{B=db(z,(x<<5)+4808|0,168072)|0;x=B;c[18070]=x;c[18066]=(c[18066]|0)+150;$=x;aa=c[B>>2]|0}c[$+8+(aa<<5)>>2]=1;B=c[18070]|0;x=c[B>>2]|0;c[B>>2]=x+1;B=c[18070]|0;z=B+8+(x<<5)+8|0;c[z>>2]=1;c[B+8+(x<<5)+16>>2]=Z;x=z+12|0;c[x>>2]=c[f>>2];c[x+4>>2]=c[f+4>>2];c[x+8>>2]=c[f+8>>2]}if((aY(F|0,106992)|0)==0){x=c[18070]|0;z=c[x>>2]|0;B=c[18066]|0;if((z|0)<(B|0)){ab=x;ac=z}else{z=db(x,(B<<5)+4808|0,168072)|0;B=z;c[18070]=B;c[18066]=(c[18066]|0)+150;ab=B;ac=c[z>>2]|0}c[ab+8+(ac<<5)>>2]=1;z=c[18070]|0;B=c[z>>2]|0;c[z>>2]=B+1;z=c[18070]|0;x=z+8+(B<<5)+8|0;c[x>>2]=1;c[z+8+(B<<5)+16>>2]=-1;B=x+12|0;c[B>>2]=c[f>>2];c[B+4>>2]=c[f+4>>2];c[B+8>>2]=c[f+8>>2]}B=(aY(F|0,106056)|0)==0;F=c[18070]|0;do{if(B){x=(c[F>>2]|0)-1|0;z=F+8+(x<<5)|0;E=c[z>>2]|0;if((E|0)==1){l=c[F+8+(x<<5)+8>>2]|0;if((l|0)==3){a[32928]=1;break}else if((l|0)!=1){break}l=c[F+8+(x<<5)+16>>2]|0;if((c[18068]|0)>=(l|0)){break}c[18068]=l;ad=c[z>>2]|0}else{ad=E}if((ad|0)!=0){break}E=c[F+8+(x<<5)+8>>2]|0;if((c[E+16>>2]|0)!=1){break}x=c[E+24>>2]|0;if((c[18068]|0)>=(x|0)){break}c[18068]=x}}while(0);B=c[F>>2]|0;k=c[18066]|0;if((B|0)<(k|0)){ae=F;af=B}else{B=db(F,(k<<5)+4808|0,168072)|0;k=B;c[18070]=k;c[18066]=(c[18066]|0)+150;ae=k;af=c[B>>2]|0}c[ae+8+(af<<5)>>2]=L;B=c[18070]|0;c[B>>2]=(c[B>>2]|0)+1;break L5204}}while(0);B=(s|0)>(I|0);L5350:do{if(B){k=c[1054]|0;if((a[k+(I*40&-1)|0]&1)==0){break}x=c[k+(I*40&-1)+36>>2]|0;E=k+(I*40&-1)+32|0;z=c[10036]|0;l=0;while(1){if((l|0)>=(x|0)){break}if((a[z+((c[E>>2]|0)+l|0)|0]|0)==(a[l+104152|0]|0)){l=l+1|0}else{break L5350}}if((l|0)!=3|q^1){break}if((a[k+(t*40&-1)|0]&1)==0){break}E=c[k+(t*40&-1)+36>>2]|0;x=k+(t*40&-1)+32|0;F=0;while(1){if((F|0)>=(E|0)){break}if((a[z+((c[x>>2]|0)+F|0)|0]|0)==(a[F+78280|0]|0)){F=F+1|0}else{break L5350}}if((F|0)!=1){break}x=I+2|0;c[13898]=x;if((a[k+(x*40&-1)|0]&1)==0){ag=x;uf(ag,100792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}do{if((bO(d[z+(c[k+(x*40&-1)+32>>2]|0)|0]|0|0)|0)==0){E=c[1054]|0;l=c[13898]|0;if((a[(c[10036]|0)+(c[E+(x*40&-1)+32>>2]|0)|0]|0)==95){ah=l;ai=E;break}else{ag=l}uf(ag,100792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{ah=c[13898]|0;ai=c[1054]|0}}while(0);x=c[ai+(ah*40&-1)+36>>2]|0;k=x+(c[ai+(ah*40&-1)+32>>2]|0)|0;z=db(0,x+1|0,116456)|0;x=c[(c[1054]|0)+(ah*40&-1)+32>>2]|0;L5372:do{if((x|0)<(k|0)){F=x;l=z;while(1){E=a[(c[10036]|0)+F|0]|0;if(E<<24>>24==0){aj=l;break L5372}y=l+1|0;a[l]=E;E=F+1|0;if((E|0)<(k|0)){F=E;l=y}else{aj=y;break}}}else{aj=z}}while(0);a[aj]=0;k=c[13898]|0;x=e|0;l=c[1054]|0;F=c[l+(k*40&-1)+36>>2]|0;y=(F|0)>49?49:F;F=c[10036]|0;E=c[l+(k*40&-1)+32>>2]|0;k=0;while(1){l=k+1|0;a[e+k|0]=a[F+E|0]|0;if((l|0)==(y|0)){break}else{E=E+1|0;k=l}}a[e+y|0]=0;e6(x);k=c[18070]|0;E=c[k>>2]|0;F=c[18066]|0;if((E|0)<(F|0)){ak=k;al=E}else{E=db(k,(F<<5)+4808|0,168072)|0;F=E;c[18070]=F;c[18066]=(c[18066]|0)+150;ak=F;al=c[E>>2]|0}c[ak+8+(al<<5)>>2]=1;E=c[18070]|0;F=c[E>>2]|0;c[E>>2]=F+1;E=c[18070]|0;c[E+8+(F<<5)+8>>2]=3;c[E+8+(F<<5)+16>>2]=z;F=c[13898]|0;E=F+1|0;c[13898]=E;if((c[8272]|0)<=(E|0)){uf(E,100792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}k=c[1054]|0;if((a[k+(E*40&-1)|0]&1)==0){uf(E,100792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}l=c[k+(E*40&-1)+36>>2]|0;r=k+(E*40&-1)+32|0;k=c[10036]|0;A=0;while(1){if((A|0)>=(l|0)){break}if((a[k+((c[r>>2]|0)+A|0)|0]|0)==(a[A+115e3|0]|0)){A=A+1|0}else{p=4127;break}}if((p|0)==4127){uf(E,100792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((A|0)!=1){uf(E,100792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[13898]=F+2;if((iy()|0)==0){c[8230]=(c[8230]|0)+1;iz();iC();c[8230]=(c[8230]|0)-1}r=c[13898]|0;if((c[8272]|0)<=(r|0)){uf(r,100792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}k=c[1054]|0;if((a[k+(r*40&-1)|0]&1)==0){uf(r,100792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}l=c[k+(r*40&-1)+36>>2]|0;z=k+(r*40&-1)+32|0;k=c[10036]|0;x=0;while(1){if((x|0)>=(l|0)){break}if((a[k+((c[z>>2]|0)+x|0)|0]|0)==(a[x+183584|0]|0)){x=x+1|0}else{p=4133;break}}if((p|0)==4133){uf(r,100792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((x|0)!=1){uf(r,100792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[13898]=r+1;if((iy()|0)==0){c[8230]=(c[8230]|0)+1;iz();iC();c[8230]=(c[8230]|0)-1}z=c[13898]|0;if((c[8272]|0)<=(z|0)){uf(z,100792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}k=c[1054]|0;if((a[k+(z*40&-1)|0]&1)==0){uf(z,100792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}l=c[k+(z*40&-1)+36>>2]|0;F=k+(z*40&-1)+32|0;k=c[10036]|0;E=0;while(1){if((E|0)>=(l|0)){break}if((a[k+((c[F>>2]|0)+E|0)|0]|0)==(a[E+78864|0]|0)){E=E+1|0}else{p=4162;break}}if((p|0)==4162){uf(z,100792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((E|0)!=1){uf(z,100792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[13898]=z+1;F=c[18070]|0;k=c[18066]|0;c[18070]=0;l=ut(312)|0;do{if((l|0)==0){gk();r=ut(312)|0;if((r|0)!=0){am=r;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=104152,v)|0)}else{am=l}}while(0);c[am>>2]=0;c[am+4>>2]=0;it();l=c[18070]|0;c[am+8>>2]=db(l,c[l>>2]<<5|8,105624)|0;c[am+12>>2]=0;c[am+16>>2]=0;c[am+24>>2]=1;c[am+32>>2]=0;c[am+48>>2]=1;c[am+56>>2]=0;c[am+72>>2]=1;c[am+80>>2]=0;c[am+96>>2]=1;c[am+104>>2]=0;c[am+120>>2]=1;c[am+128>>2]=0;c[am+144>>2]=1;c[am+152>>2]=0;c[am+168>>2]=1;c[am+176>>2]=0;c[am+192>>2]=1;c[am+200>>2]=0;c[am+216>>2]=1;c[am+224>>2]=0;c[am+240>>2]=1;c[am+248>>2]=0;c[am+264>>2]=1;c[am+272>>2]=0;c[am+288>>2]=1;c[am+296>>2]=0;c[18070]=F;c[18066]=k;l=c[F>>2]|0;if((l|0)<(k|0)){an=F;ao=l}else{l=db(F,(k<<5)+4808|0,168072)|0;z=l;c[18070]=z;c[18066]=(c[18066]|0)+150;an=z;ao=c[l>>2]|0}c[an+8+(ao<<5)>>2]=8;l=c[18070]|0;z=c[l>>2]|0;c[l>>2]=z+1;c[(c[18070]|0)+8+(z<<5)+8>>2]=am;break L5204}}while(0);q=c[11670]|0;if((q|0)==0){s=e|0;z=c[1054]|0;l=c[z+(I*40&-1)+36>>2]|0;E=(l|0)>49?49:l;l=c[10036]|0;r=c[z+(I*40&-1)+32>>2]|0;z=0;while(1){x=z+1|0;a[e+z|0]=a[l+r|0]|0;if((x|0)==(E|0)){break}else{r=r+1|0;z=x}}a[e+E|0]=0;z=e6(s)|0;r=c[18070]|0;l=c[r>>2]|0;x=c[18066]|0;if((l|0)<(x|0)){ap=r;aq=l}else{l=db(r,(x<<5)+4808|0,168072)|0;x=l;c[18070]=x;c[18066]=(c[18066]|0)+150;ap=x;aq=c[l>>2]|0}c[ap+8+(aq<<5)>>2]=0;l=c[18070]|0;x=c[l>>2]|0;c[l>>2]=x+1;c[(c[18070]|0)+8+(x<<5)+8>>2]=z;c[13898]=(c[13898]|0)+1;break}L5451:do{if(B){z=c[1054]|0;if((a[z+(I*40&-1)|0]&1)!=0){x=c[z+(I*40&-1)+36>>2]|0;l=z+(I*40&-1)+32|0;z=c[10036]|0;r=0;while(1){if((r|0)>=(x|0)){p=3992;break}if((a[z+((c[l>>2]|0)+r|0)|0]|0)==(a[r+55600|0]|0)){r=r+1|0}else{break}}do{if((p|0)==3992){if((a[r+55600|0]|0)!=0){break}c[13898]=t;l=c[18070]|0;z=c[l>>2]|0;x=c[18066]|0;if((z|0)<(x|0)){ar=l;as=z}else{z=db(l,(x<<5)+4808|0,168072)|0;x=z;c[18070]=x;c[18066]=(c[18066]|0)+150;ar=x;as=c[z>>2]|0}c[ar+8+(as<<5)>>2]=2;z=c[18070]|0;x=c[z>>2]|0;c[z>>2]=x+1;c[(c[18070]|0)+8+(x<<5)+8>>2]=q;break L5204}}while(0);if(!B){p=3997;break}}r=c[1054]|0;if((a[r+(I*40&-1)|0]&1)==0){at=r;break}x=c[r+(I*40&-1)+36>>2]|0;z=r+(I*40&-1)+32|0;l=c[10036]|0;k=0;while(1){if((k|0)>=(x|0)){break}if((a[l+((c[z>>2]|0)+k|0)|0]|0)==(a[k+55651|0]|0)){k=k+1|0}else{at=r;break L5451}}if((a[k+55651|0]|0)!=0){at=r;break}c[13898]=t;z=c[18070]|0;l=c[z>>2]|0;x=c[18066]|0;if((l|0)<(x|0)){au=z;av=l}else{l=db(z,(x<<5)+4808|0,168072)|0;x=l;c[18070]=x;c[18066]=(c[18066]|0)+150;au=x;av=c[l>>2]|0}c[au+8+(av<<5)>>2]=3;l=c[18070]|0;x=c[l>>2]|0;c[l>>2]=x+1;c[(c[18070]|0)+8+(x<<5)+8>>2]=q;break L5204}else{p=3997}}while(0);if((p|0)==3997){at=c[1054]|0}q=c[10036]|0;s=2;L5478:while(1){L5480:do{if(B){if((a[at+(I*40&-1)|0]&1)==0){break}E=c[at+(I*40&-1)+36>>2]|0;x=at+(I*40&-1)+32|0;l=0;while(1){if((l|0)>=(E|0)){break}if((a[q+((c[x>>2]|0)+l|0)|0]|0)==(a[55600+(s*51&-1)+l|0]|0)){l=l+1|0}else{break L5480}}if((a[55600+(s*51&-1)+l|0]|0)==0){p=4013;break L5478}}}while(0);r=s+1|0;if((r|0)<12){s=r}else{p=4019;break}}if((p|0)==4019){B=e|0;r=c[at+(I*40&-1)+36>>2]|0;k=(r|0)>49?49:r;r=c[at+(I*40&-1)+32>>2]|0;x=0;while(1){E=x+1|0;a[e+x|0]=a[q+r|0]|0;if((E|0)==(k|0)){break}else{r=r+1|0;x=E}}a[e+k|0]=0;x=e6(B)|0;r=c[18070]|0;q=c[r>>2]|0;E=c[18066]|0;if((q|0)<(E|0)){aw=r;ax=q}else{q=db(r,(E<<5)+4808|0,168072)|0;E=q;c[18070]=E;c[18066]=(c[18066]|0)+150;aw=E;ax=c[q>>2]|0}c[aw+8+(ax<<5)>>2]=0;q=c[18070]|0;E=c[q>>2]|0;c[q>>2]=E+1;c[(c[18070]|0)+8+(E<<5)+8>>2]=x;c[13898]=(c[13898]|0)+1;break}else if((p|0)==4013){c[13898]=t;x=c[18070]|0;E=c[x>>2]|0;q=c[18066]|0;if((E|0)<(q|0)){ay=x;az=E}else{E=db(x,(q<<5)+4808|0,168072)|0;q=E;c[18070]=q;c[18066]=(c[18066]|0)+150;ay=q;az=c[E>>2]|0}c[ay+8+(az<<5)>>2]=1;E=c[18070]|0;q=c[E>>2]|0;c[E>>2]=q+1;E=c[18070]|0;x=E+8+(q<<5)+8|0;c[x>>2]=1;c[E+8+(q<<5)+16>>2]=s;q=x+12|0;c[q>>2]=c[g>>2];c[q+4>>2]=c[g+4>>2];c[q+8>>2]=c[g+8>>2];q=c[11670]|0;x=c[18070]|0;E=c[x>>2]|0;r=c[18066]|0;if((E|0)<(r|0)){aA=x;aB=E}else{E=db(x,(r<<5)+4808|0,168072)|0;r=E;c[18070]=r;c[18066]=(c[18066]|0)+150;aA=r;aB=c[E>>2]|0}c[aA+8+(aB<<5)>>2]=4;E=c[18070]|0;r=c[E>>2]|0;c[E>>2]=r+1;c[(c[18070]|0)+8+(r<<5)+8>>2]=q;break}}}while(0);aB=c[13898]|0;aA=c[8272]|0;L5504:do{if((aA|0)>(aB|0)){g=aB;az=aA;while(1){ay=c[1054]|0;if((a[ay+(g*40&-1)|0]&1)==0){aC=g;aD=az;break L5504}ax=c[ay+(g*40&-1)+36>>2]|0;aw=ay+(g*40&-1)+32|0;ay=c[10036]|0;e=0;while(1){if((e|0)>=(ax|0)){break}if((a[ay+((c[aw>>2]|0)+e|0)|0]|0)==(a[e+124624|0]|0)){e=e+1|0}else{aC=g;aD=az;break L5504}}if((e|0)!=1){aC=g;aD=az;break L5504}c[13898]=g+1;aw=c[18070]|0;ay=c[aw>>2]|0;ax=c[18066]|0;if((ay|0)<(ax|0)){aE=aw;aF=ay}else{ay=db(aw,(ax<<5)+4808|0,168072)|0;ax=ay;c[18070]=ax;c[18066]=(c[18066]|0)+150;aE=ax;aF=c[ay>>2]|0}c[aE+8+(aF<<5)>>2]=29;ay=c[18070]|0;c[ay>>2]=(c[ay>>2]|0)+1;ay=c[13898]|0;ax=c[8272]|0;if((ax|0)>(ay|0)){g=ay;az=ax}else{aC=ay;aD=ax;break}}}else{aC=aB;aD=aA}}while(0);L5517:do{if((aD|0)>(aC|0)){aA=c[1054]|0;if((a[aA+(aC*40&-1)|0]&1)==0){aG=aC;aH=aD;break}aB=c[aA+(aC*40&-1)+36>>2]|0;aF=aA+(aC*40&-1)+32|0;aA=c[10036]|0;aE=0;while(1){if((aE|0)>=(aB|0)){break}if((a[aA+((c[aF>>2]|0)+aE|0)|0]|0)==(a[aE+103912|0]|0)){aE=aE+1|0}else{aG=aC;aH=aD;break L5517}}if((aE|0)!=2){aG=aC;aH=aD;break}c[13898]=aC+1;iI();aF=c[18070]|0;aA=c[aF>>2]|0;aB=c[18066]|0;if((aA|0)<(aB|0)){aI=aF;aJ=aA}else{aA=db(aF,(aB<<5)+4808|0,168072)|0;aB=aA;c[18070]=aB;c[18066]=(c[18066]|0)+150;aI=aB;aJ=c[aA>>2]|0}c[aI+8+(aJ<<5)>>2]=28;aA=c[18070]|0;c[aA>>2]=(c[aA>>2]|0)+1;aG=c[13898]|0;aH=c[8272]|0}else{aG=aC;aH=aD}}while(0);if((aH|0)<=(aG|0)){i=b;return}aD=c[1054]|0;if((a[aD+(aG*40&-1)|0]&1)==0){i=b;return}aC=c[aD+(aG*40&-1)+36>>2]|0;aJ=aD+(aG*40&-1)+32|0;aI=c[10036]|0;aA=0;while(1){if((aA|0)>=(aC|0)){break}if((a[aI+((c[aJ>>2]|0)+aA|0)|0]|0)==(a[aA+78280|0]|0)){aA=aA+1|0}else{p=4147;break}}if((p|0)==4147){i=b;return}if((aA|0)!=1){i=b;return}aA=aG+1|0;c[13898]=aA;aG=(aH|0)>(aA|0);L5544:do{if(aG){do{if((a[aD+(aA*40&-1)|0]&1)==0){p=4066}else{aH=c[aD+(aA*40&-1)+36>>2]|0;aJ=aD+(aA*40&-1)+32|0;aC=0;while(1){if((aC|0)>=(aH|0)){p=4064;break}if((a[aI+((c[aJ>>2]|0)+aC|0)|0]|0)==(a[aC+134808|0]|0)){aC=aC+1|0}else{break}}if((p|0)==4064){if((aC|0)==1){break}}if(aG){p=4066}else{p=4080;break L5544}}}while(0);if((p|0)==4066){if((a[aD+(aA*40&-1)|0]&1)==0){p=4080;break}aE=c[aD+(aA*40&-1)+36>>2]|0;aJ=aD+(aA*40&-1)+32|0;aH=0;while(1){if((aH|0)>=(aE|0)){break}if((a[aI+((c[aJ>>2]|0)+aH|0)|0]|0)==(a[aH+183584|0]|0)){aH=aH+1|0}else{p=4080;break L5544}}if((aH|0)!=1){p=4080;break}}aJ=c[18070]|0;aE=c[aJ>>2]|0;e=c[18066]|0;if((aE|0)<(e|0)){aK=aJ;aL=aE}else{aE=db(aJ,(e<<5)+4808|0,168072)|0;e=aE;c[18070]=e;c[18066]=(c[18066]|0)+150;aK=e;aL=c[aE>>2]|0}c[aK+8+(aL<<5)>>2]=1;aE=c[18070]|0;e=c[aE>>2]|0;c[aE>>2]=e+1;aE=c[18070]|0;c[aE+8+(e<<5)+8>>2]=1;c[aE+8+(e<<5)+16>>2]=1;e=c[13898]|0;if((c[8272]|0)<=(e|0)){break}aE=c[1054]|0;if((a[aE+(e*40&-1)|0]&1)==0){break}aJ=c[aE+(e*40&-1)+36>>2]|0;aB=aE+(e*40&-1)+32|0;aE=c[10036]|0;aF=0;while(1){if((aF|0)>=(aJ|0)){break}if((a[aE+((c[aB>>2]|0)+aF|0)|0]|0)==(a[aF+134808|0]|0)){aF=aF+1|0}else{break L5544}}if((aF|0)!=1){break}c[13898]=e+1}else{p=4080}}while(0);do{if((p|0)==4080){if((iy()|0)!=0){break}c[8230]=(c[8230]|0)+1;iz();iC();c[8230]=(c[8230]|0)-1}}while(0);aL=c[13898]|0;aK=c[8272]|0;if((aK|0)<=(aL|0)){uf(aL,103536,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}aI=c[1054]|0;if((a[aI+(aL*40&-1)|0]&1)==0){uf(aL,103536,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}aA=c[aI+(aL*40&-1)+36>>2]|0;aD=aI+(aL*40&-1)+32|0;aG=c[10036]|0;aB=0;while(1){if((aB|0)>=(aA|0)){break}if((a[aG+((c[aD>>2]|0)+aB|0)|0]|0)==(a[aB+183584|0]|0)){aB=aB+1|0}else{p=4137;break}}if((p|0)==4137){uf(aL,103536,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((aB|0)!=1){uf(aL,103536,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}aB=aL+1|0;c[13898]=aB;aL=(aK|0)>(aB|0);L5591:do{if(aL){do{if((a[aI+(aB*40&-1)|0]&1)==0){p=4096}else{aK=c[aI+(aB*40&-1)+36>>2]|0;aD=aI+(aB*40&-1)+32|0;aA=0;while(1){if((aA|0)>=(aK|0)){p=4094;break}if((a[aG+((c[aD>>2]|0)+aA|0)|0]|0)==(a[aA+134808|0]|0)){aA=aA+1|0}else{break}}if((p|0)==4094){if((aA|0)==1){break}}if(aL){p=4096}else{p=4110;break L5591}}}while(0);if((p|0)==4096){if((a[aI+(aB*40&-1)|0]&1)==0){p=4110;break}e=c[aI+(aB*40&-1)+36>>2]|0;aF=aI+(aB*40&-1)+32|0;aD=0;while(1){if((aD|0)>=(e|0)){break}if((a[aG+((c[aF>>2]|0)+aD|0)|0]|0)==(a[aD+78864|0]|0)){aD=aD+1|0}else{p=4110;break L5591}}if((aD|0)!=1){p=4110;break}}aF=c[18070]|0;e=c[aF>>2]|0;aK=c[18066]|0;if((e|0)<(aK|0)){aM=aF;aN=e}else{e=db(aF,(aK<<5)+4808|0,168072)|0;aK=e;c[18070]=aK;c[18066]=(c[18066]|0)+150;aM=aK;aN=c[e>>2]|0}c[aM+8+(aN<<5)>>2]=1;e=c[18070]|0;aK=c[e>>2]|0;c[e>>2]=aK+1;e=c[18070]|0;c[e+8+(aK<<5)+8>>2]=1;c[e+8+(aK<<5)+16>>2]=65535;aK=c[13898]|0;if((c[8272]|0)<=(aK|0)){break}e=c[1054]|0;if((a[e+(aK*40&-1)|0]&1)==0){break}aF=c[e+(aK*40&-1)+36>>2]|0;aC=e+(aK*40&-1)+32|0;e=c[10036]|0;aE=0;while(1){if((aE|0)>=(aF|0)){break}if((a[e+((c[aC>>2]|0)+aE|0)|0]|0)==(a[aE+134808|0]|0)){aE=aE+1|0}else{break L5591}}if((aE|0)!=1){break}c[13898]=aK+1}else{p=4110}}while(0);do{if((p|0)==4110){if((iy()|0)!=0){break}c[8230]=(c[8230]|0)+1;iz();iC();c[8230]=(c[8230]|0)-1}}while(0);aN=c[13898]|0;if((c[8272]|0)<=(aN|0)){uf(aN,101328,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}aM=c[1054]|0;if((a[aM+(aN*40&-1)|0]&1)==0){uf(aN,101328,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}aG=c[aM+(aN*40&-1)+36>>2]|0;aB=aM+(aN*40&-1)+32|0;aM=c[10036]|0;aI=0;while(1){if((aI|0)>=(aG|0)){break}if((a[aM+((c[aB>>2]|0)+aI|0)|0]|0)==(a[aI+78864|0]|0)){aI=aI+1|0}else{p=4141;break}}if((p|0)==4141){uf(aN,101328,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((aI|0)!=1){uf(aN,101328,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[13898]=aN+1;aN=c[18070]|0;aI=c[aN>>2]|0;p=c[18066]|0;if((aI|0)<(p|0)){aO=aN;aP=aI}else{aI=db(aN,(p<<5)+4808|0,168072)|0;p=aI;c[18070]=p;c[18066]=(c[18066]|0)+150;aO=p;aP=c[aI>>2]|0}c[aO+8+(aP<<5)>>2]=35;aP=c[18070]|0;c[aP>>2]=(c[aP>>2]|0)+1;i=b;return}function iJ(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;L5643:while(1){b=c[13898]|0;d=(c[8272]|0)>(b|0);if(!d){e=4202;break}f=c[1054]|0;if((a[f+(b*40&-1)|0]&1)!=0){g=c[f+(b*40&-1)+36>>2]|0;h=f+(b*40&-1)+32|0;f=c[10036]|0;i=0;while(1){if((i|0)>=(g|0)){e=4174;break}if((a[f+((c[h>>2]|0)+i|0)|0]|0)==(a[i+134808|0]|0)){i=i+1|0}else{break}}do{if((e|0)==4174){e=0;if((i|0)!=1){break}c[13898]=b+1;iI();h=c[18070]|0;f=c[h>>2]|0;g=c[18066]|0;if((f|0)<(g|0)){j=h;k=f}else{f=db(h,(g<<5)+4808|0,168072)|0;g=f;c[18070]=g;c[18066]=(c[18066]|0)+150;j=g;k=c[f>>2]|0}c[j+8+(k<<5)>>2]=25;f=c[18070]|0;c[f>>2]=(c[f>>2]|0)+1;continue L5643}}while(0);if(!d){e=4198;break}}i=c[1054]|0;L5659:do{if((a[i+(b*40&-1)|0]&1)!=0){f=c[i+(b*40&-1)+36>>2]|0;g=i+(b*40&-1)+32|0;h=c[10036]|0;l=0;while(1){if((l|0)>=(f|0)){break}if((a[h+((c[g>>2]|0)+l|0)|0]|0)==(a[l+126944|0]|0)){l=l+1|0}else{break L5659}}if((l|0)!=1){break}c[13898]=b+1;iI();g=c[18070]|0;h=c[g>>2]|0;f=c[18066]|0;if((h|0)<(f|0)){m=g;n=h}else{h=db(g,(f<<5)+4808|0,168072)|0;f=h;c[18070]=f;c[18066]=(c[18066]|0)+150;m=f;n=c[h>>2]|0}c[m+8+(n<<5)>>2]=26;h=c[18070]|0;c[h>>2]=(c[h>>2]|0)+1;continue L5643}}while(0);if(!d){e=4199;break}i=c[1054]|0;if((a[i+(b*40&-1)|0]&1)==0){e=4200;break}h=c[i+(b*40&-1)+36>>2]|0;f=i+(b*40&-1)+32|0;i=c[10036]|0;g=0;while(1){if((g|0)>=(h|0)){break}if((a[i+((c[f>>2]|0)+g|0)|0]|0)==(a[g+191528|0]|0)){g=g+1|0}else{e=4201;break L5643}}if((g|0)!=1){e=4197;break}c[13898]=b+1;iI();f=c[18070]|0;i=c[f>>2]|0;h=c[18066]|0;if((i|0)<(h|0)){o=f;p=i}else{i=db(f,(h<<5)+4808|0,168072)|0;h=i;c[18070]=h;c[18066]=(c[18066]|0)+150;o=h;p=c[i>>2]|0}c[o+8+(p<<5)>>2]=27;i=c[18070]|0;c[i>>2]=(c[i>>2]|0)+1}if((e|0)==4201){return}else if((e|0)==4202){return}else if((e|0)==4198){return}else if((e|0)==4197){return}else if((e|0)==4199){return}else if((e|0)==4200){return}}function iK(){var b=0,d=0;b=i;do{if((c[258]|0)==0){d=bU(172032)|0;if((d|0)!=0){c[258]=bP(d|0)|0;break}if((a[37400]&1)==0){break}uh(-1,168056,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);if((c[256]|0)!=0){i=b;return}d=bU(163792)|0;c[256]=bP(((d|0)==0?154528:d)|0)|0;i=b;return}function iL(){cv(53560|0,1)}function iM(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,p=0,q=0,t=0,u=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;e=i;i=i+160|0;f=1;g=0;j=i;i=i+168|0;c[j>>2]=0;while(1)switch(f|0){case 1:k=e|0;if((b|0)>1){l=1;f=2;break}else{f=16;break};case 2:p=c[d+(l<<2)>>2]|0;if((p|0)==0){f=15;break}else{f=3;break};case 3:q=aw(8,p|0,183208)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((q|0)==0){f=5;break}else{f=4;break};case 4:q=aw(8,p|0,214328)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((q|0)==0){f=5;break}else{f=6;break};case 5:aw(26,158880,(v=i,i=i+16|0,c[v>>2]=40152,c[v+8>>2]=40160,v)|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;t=0;f=81;break;case 6:q=aw(8,p|0,135600)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((q|0)==0){f=8;break}else{f=7;break};case 7:q=aw(8,p|0,122640)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((q|0)==0){f=8;break}else{f=9;break};case 8:aw(26,105384,(v=i,i=i+16|0,c[v>>2]=40152,c[v+8>>2]=40160,v)|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;t=0;f=81;break;case 9:q=aq(2,p|0,98264,2)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((q|0)==0){f=11;break}else{f=10;break};case 10:q=aw(8,p|0,92432)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((q|0)==0){f=11;break}else{f=12;break};case 11:a[32096]=1;f=15;break;case 12:q=aq(2,p|0,84592,2)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((q|0)==0){f=14;break}else{f=13;break};case 13:q=aw(8,p|0,76592)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((q|0)==0){f=14;break}else{f=15;break};case 14:a[21672]=1;f=15;break;case 15:q=l+1|0;if((q|0)<(b|0)){l=q;f=2;break}else{f=16;break};case 16:an(88,c[m>>2]|0,0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;q=au(2,c[n>>2]|0,0,1,1024)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((q|0)==0){f=18;break}else{f=17;break};case 17:au(4,224136,28,1,c[m>>2]|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;f=18;break;case 18:au(2,c[o>>2]|0,0,2,0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;c[10030]=c[n>>2];c[500]=2;h[251]=3.141592653589793;h[252]=0.0;q=ao(4,133568)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;c[506]=q;u=+av(4,133568,0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;c[q+16>>2]=2;h[q+24>>3]=u;h[q+32>>3]=0.0;a[(c[506]|0)+8|0]=0;as(384);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;as(44);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;q=ao(56,1)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((q|0)==0){f=19;break}else{w=q;f=21;break};case 19:as(424);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;q=ao(56,1)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((q|0)==0){f=20;break}else{w=q;f=21;break};case 20:ar(6,-1|0,225296,(v=i,i=i+8|0,c[v>>2]=116456,v)|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;return 0;case 21:c[6924]=w;a[w]=0;a[37400]=0;as(108);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((c[3524]|0)==0){f=25;break}else{f=22;break};case 22:am(98,c[6958]|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;am(98,c[6956]|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;x=c[c[3524]>>2]|0;if((x|0)==0){y=0;f=24;break}else{f=23;break};case 23:q=ao(162,x|0)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;y=q;f=24;break;case 24:c[6958]=y;q=ao(162,13048)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;c[6956]=q;f=25;break;case 25:ao(102,92);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;q=ao(58,c[o>>2]|0)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;z=ao(18,q|0)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;a[37400]=(z|0)!=0&1;A=1;f=26;break;case 26:if((A|0)<(b|0)){f=27;break}else{f=30;break};case 27:B=c[d+(A<<2)>>2]|0;if((a[B]|0)==45){f=28;break}else{f=29;break};case 28:if((a[B+1|0]|0)==101){f=29;break}else{A=A+1|0;f=26;break};case 29:a[37400]=0;f=30;break;case 30:z=ao(108,k|0)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((z|0)>-1){f=31;break}else{f=32;break};case 31:aw(28,33040,k|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;aw(28,33008,k+128|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;f=32;break;case 32:if((a[37400]&1)==0){f=34;break}else{f=33;break};case 33:am(272,c[m>>2]|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;f=35;break;case 34:am(272,0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;f=35;break;case 35:am(200,3);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;C=uL(53560,f,j)|0;f=82;break;case 82:if((C|0)==0){f=36;break}else{f=42;break};case 36:av(2,2,4);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;av(2,13,1);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;as(418);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;aw(24,1,0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;am(98,c[12908]|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;aw(10,5,179864);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;aw(10,2,179864);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;D=aw(10,5,0)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((D|0)==0){E=0;f=38;break}else{f=37;break};case 37:z=ao(162,D|0)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;E=z;f=38;break;case 38:c[12908]=E;as(138);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;c[5162]=37;c[5164]=7;c[5165]=5;c[5166]=15;a[20668]=112;c[5172]=0;c[5173]=0;uE(20672,0,13);c[5174]=114;c[5334]=0;c[5256]=0;c[5178]=0;h[2705]=1.5;uD(54016,50688,112);am(92,0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((a[21672]&1)==0){f=39;break}else{f=40;break};case 39:am(98,0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;f=40;break;case 40:c[10062]=0;a[14168]=1;am(92,2);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;F=c[3524]|0;if((a[37400]&1)!=0&(F|0)!=0){f=41;break}else{G=0;f=48;break};case 41:aq(4,c[m>>2]|0,211496,(v=i,i=i+8|0,c[v>>2]=c[F>>2],v)|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;G=0;f=48;break;case 42:if(a[14168]|0){f=44;break}else{f=43;break};case 43:a[14168]=1;au(4,205272,38,1,c[m>>2]|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;f=44;break;case 44:H=a[37400]&1^1;f=45;break;case 45:z=al(2)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if(z){f=45;break}else{f=46;break};case 46:I=H&255;if((a[37400]&1)==0){f=47;break}else{G=I;f=48;break};case 47:if((a[33232]&1)==0){f=49;break}else{G=I;f=48;break};case 48:z=b-1|0;if((z|0)>0){J=b;K=d;L=z;f=59;break}else{f=79;break};case 49:c[8026]=0;if((a[14080]&1)==0){f=58;break}else{f=50;break};case 50:if(a[13032]|0){f=51;break}else{f=54;break};case 51:M=c[(c[3524]|0)+104>>2]|0;if((M|0)==0){f=53;break}else{f=52;break};case 52:as(M|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;f=53;break;case 53:a[13032]=0;f=54;break;case 54:if(a[14088]|0){f=55;break}else{f=56;break};case 55:as(c[(c[3524]|0)+44>>2]|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;a[14088]=0;f=56;break;case 56:if((a[14080]&1)==0){f=58;break}else{f=57;break};case 57:as(c[(c[3524]|0)+40>>2]|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;a[14080]=0;c[10028]=0;f=58;break;case 58:am(356,1);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;return 0;case 59:N=K+4|0;c[13898]=0;O=c[N>>2]|0;z=aq(2,O|0,98264,2)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((z|0)==0){P=N;Q=L;f=65;break}else{f=60;break};case 60:z=aw(8,O|0,92432)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((z|0)==0){P=N;Q=L;f=65;break}else{f=61;break};case 61:z=aw(8,O|0,202112)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((z|0)==0){f=62;break}else{f=66;break};case 62:a[37400]=1;f=63;break;case 63:z=al(6)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((z|0)==0){f=63;break}else{f=64;break};case 64:a[37400]=0;P=N;Q=L;f=65;break;case 65:z=Q-1|0;if((z|0)>0){J=Q;K=P;L=z;f=59;break}else{f=79;break};case 66:z=aw(8,O|0,196560)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((z|0)==0){f=67;break}else{f=72;break};case 67:R=J-2|0;S=K+8|0;if((R|0)<1){f=68;break}else{f=69;break};case 68:au(4,185336,31,1,c[m>>2]|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;t=0;f=81;break;case 69:a[37400]=0;a[33232]=0;T=c[S>>2]|0;if((T|0)==0){U=0;f=71;break}else{f=70;break};case 70:z=ao(162,T|0)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;U=z;f=71;break;case 71:am(150,U|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;P=S;Q=R;f=65;break;case 72:z=aq(2,O|0,84592,2)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((z|0)==0){P=N;Q=L;f=65;break}else{f=73;break};case 73:z=aw(8,O|0,76592)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((z|0)==0){P=N;Q=L;f=65;break}else{f=74;break};case 74:if((a[O]|0)==45){f=75;break}else{f=76;break};case 75:aq(4,c[m>>2]|0,180120,(v=i,i=i+8|0,c[v>>2]=O,v)|0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;P=N;Q=L;f=65;break;case 76:a[37400]=0;a[33232]=0;V=aw(20,O|0,193632)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;W=c[N>>2]|0;if((W|0)==0){X=0;f=78;break}else{f=77;break};case 77:z=ao(162,W|0)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;X=z;f=78;break;case 78:ar(76,V|0,X|0,0);if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;P=N;Q=L;f=65;break;case 79:if((a[33232]&1)==0){t=G;f=81;break}else{f=80;break};case 80:z=al(6)|0;if((r|0)!=0&(s|0)!=0){g=uM(c[r>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}r=s=0;if((z|0)==0){f=80;break}else{t=G;f=81;break};case 81:i=e;return t|0;case-1:if((g|0)==35){C=s;f=82}r=s=0;break}return 0}function iN(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=i;if((a[21672]&1)!=0){i=d;return}do{if((b|0)==1){e=0}else if((b|0)==0){f=ut(39)|0;do{if((f|0)==0){gk();g=ut(39)|0;if((g|0)!=0){h=g;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=141984,v)|0)}else{h=f}}while(0);uD(h|0,74944,29);f=uA(h|0)|0;g=(f|0)==0?0:f-1|0;f=a[h+g|0]|0;if(!((f<<24>>24|0)==47|(f<<24>>24|0)==0)){a[h+(g+1|0)|0]=47;a[h+(g+2|0)|0]=0}uD(h+(uA(h|0)|0)|0,138288,10);j=bF(h|0,193632)|0;k=h;l=4229}else{g=c[258]|0;if(!((b|0)==2&(g|0)!=0)){e=0;break}f=(uA(g|0)|0)+10|0;g=ut(f)|0;do{if((g|0)==0){gk();m=ut(f)|0;if((m|0)!=0){n=m;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=141984,v)|0)}else{n=g}}while(0);uB(n|0,c[258]|0);g=uA(n|0)|0;f=(g|0)==0?0:g-1|0;g=a[n+f|0]|0;if(!((g<<24>>24|0)==47|(g<<24>>24|0)==0)){a[n+(f+1|0)|0]=47;a[n+(f+2|0)|0]=0}uD(n+(uA(n|0)|0)|0,136592,9);j=bF(n|0,193632)|0;k=n;l=4229}}while(0);do{if((l|0)==4229){if((j|0)==0){e=k;break}n=(k|0)!=0?k:136592;if((n|0)==0){o=0}else{o=bP(n|0)|0}hw(j,o,0);if((c[3524]|0)==0){e=k;break}uu(c[6958]|0);uu(c[6956]|0);n=c[c[3524]>>2]|0;if((n|0)==0){p=0}else{p=bP(n|0)|0}c[6958]=p;c[6956]=bP(13048)|0;e=k}}while(0);uu(e);i=d;return}function iO(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((a|0)==0){return}else{b=a}while(1){a=c[b>>2]|0;d=b+16|0;uu(c[d>>2]|0);c[d>>2]=0;d=b+320|0;uu(c[d>>2]|0);c[d>>2]=0;d=b+316|0;uu(c[d>>2]|0);c[d>>2]=0;d=b+224|0;e=c[d>>2]|0;if((e|0)!=0){f=c[e+64>>2]|0;if((f|0)==0){g=e}else{uu(f);g=e}while(1){e=c[g+60>>2]|0;if((e|0)!=0){uu(e)}e=c[g+64>>2]|0;if(!((e|0)==0|(e|0)==(f|0))){uu(e)}e=c[g>>2]|0;uu(g);if((e|0)==0){break}else{g=e}}}c[d>>2]=0;f=b+292|0;uu(c[f>>2]|0);c[f>>2]=0;uu(b);if((a|0)==0){break}else{b=a}}return}function iP(b){b=b|0;aV(2,4);aV(8,0);c[8026]=0;do{if((a[14080]&1)!=0){if(a[13032]|0){b=c[(c[3524]|0)+104>>2]|0;if((b|0)!=0){cS[b&511]()}a[13032]=0}if(a[14088]|0){cS[c[(c[3524]|0)+44>>2]&511]();a[14088]=0}if((a[14080]&1)==0){break}cS[c[(c[3524]|0)+40>>2]&511]();a[14080]=0;c[10028]=0}}while(0);aF(10,c[m>>2]|0);iL()}function iQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;e=c[b>>2]|0;if((e|0)==0){uf(-1,151280,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((a[e]|0)!=126){i=d;return}if((a[e+1|0]|0)!=47){i=d;return}f=c[258]|0;if((f|0)==0){uh(-1,147480,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);i=d;return}else{g=uA(e|0)|0;h=db(e,(uA(f|0)|0)+g|0,149488)|0;c[b>>2]=h;uH(h+((uA(c[258]|0)|0)-1|0)|0,h|0,g+1|0);g=c[b>>2]|0;b=c[258]|0;uD(g|0,b|0,uA(b|0)|0);i=d;return}}function iR(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;d=i;e=a+296|0;if((c[e>>2]|0)==(b|0)){i=d;return}f=a+320|0;g=c[f>>2]|0;if((b|0)<=0){uu(g);c[f>>2]=0;c[e>>2]=0;h=a+316|0;uu(c[h>>2]|0);c[h>>2]=0;i=d;return}do{if((g|0)==0){h=b<<6;j=ut(h)|0;do{if((j|0)==0){gk();k=ut(h)|0;if((k|0)!=0){l=k;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=180104,v)|0)}else{l=j}}while(0);c[f>>2]=l}else{c[f>>2]=db(g,b<<6,214200)|0;j=a+316|0;h=c[j>>2]|0;if((h|0)==0){break}c[j>>2]=db(h,b<<3,158688)|0}}while(0);c[e>>2]=b;i=d;return}function iS(){var d=0,e=0,f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,w=0;d=i;i=i+24|0;e=d|0;if((c[3524]|0)==0){uf(c[13898]|0,135392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}a[37384]=0;if(a[20368]|0){a[20368]=0;g[3538]=+g[5090];g[3536]=+g[5088];g[3534]=+g[5086];c[16336]=c[16336]^2;c[17024]=c[17024]^2}do{if((a[32936]&1)!=0){if((aY(24544,122560)|0)!=0){break}b[12272]=116}}while(0);c[16506]=c[16507];h[8255]=+h[8257];h[8256]=+h[8258];h[8261]=8.988465674311579e+307;h[8262]=-8.988465674311579e+307;f=c[16335]|0;c[16334]=f;h[8169]=(f&1|0)==0?+h[8171]:8.988465674311579e+307;h[8170]=(f&2|0)==0?+h[8172]:-8.988465674311579e+307;h[8175]=8.988465674311579e+307;h[8176]=-8.988465674311579e+307;c[17194]=c[17195];h[8599]=+h[8601];h[8600]=+h[8602];h[8605]=8.988465674311579e+307;h[8606]=-8.988465674311579e+307;f=c[17023]|0;c[17022]=f;h[8513]=(f&1|0)==0?+h[8515]:8.988465674311579e+307;h[8514]=(f&2|0)==0?+h[8516]:-8.988465674311579e+307;h[8519]=8.988465674311579e+307;h[8520]=-8.988465674311579e+307;c[17538]=c[17539];h[8771]=+h[8773];h[8772]=+h[8774];h[8777]=8.988465674311579e+307;h[8778]=-8.988465674311579e+307;f=c[17367]|0;c[17366]=f;h[8685]=(f&1|0)==0?+h[8687]:8.988465674311579e+307;h[8686]=(f&2|0)==0?+h[8688]:-8.988465674311579e+307;h[8691]=8.988465674311579e+307;h[8692]=-8.988465674311579e+307;f=c[16679]|0;c[16678]=f;h[8341]=(f&1|0)==0?+h[8343]:8.988465674311579e+307;h[8342]=(f&2|0)==0?+h[8344]:-8.988465674311579e+307;h[8347]=8.988465674311579e+307;h[8348]=-8.988465674311579e+307;L5811:do{if((a[37408]&1)!=0){f=c[13898]|0;if((c[8272]|0)>(f|0)){j=f}else{break}do{f=c[1054]|0;if((a[f+(j*40&-1)|0]&1)==0){break L5811}k=c[f+(j*40&-1)+36>>2]|0;l=f+(j*40&-1)+32|0;f=c[10036]|0;m=0;while(1){if((m|0)>=(k|0)){break}if((a[f+((c[l>>2]|0)+m|0)|0]|0)==(a[m+78280|0]|0)){m=m+1|0}else{break L5811}}if((m|0)!=1){break L5811}dn();j=c[13898]|0;}while((c[8272]|0)>(j|0))}}while(0);if((a[32936]&1)==0){n=(a[30528]&1)!=0?8:2}else{n=8}j=dr(n,-1)|0;if((a[32936]&1)==0){if((a[30528]&1)!=0){o=4309}}else{o=4309}if((o|0)==4309){dq(2)}do{if((c[16506]&3|0)==0){p=+h[8256];q=+h[8255];if(p>=q){o=4313;break}h[8255]=p;h[8256]=q;r=1}else{o=4313}}while(0);if((o|0)==4313){r=(c[16508]|0)>>>1&1}a[66036]=r;dq(1);do{if((c[16334]&3|0)==0){q=+h[8170];p=+h[8169];if(q>=p){o=4317;break}h[8169]=q;h[8170]=p;s=1}else{o=4317}}while(0);if((o|0)==4317){s=(c[16336]|0)>>>1&1}a[65348]=s;dq(6);do{if((c[17194]&3|0)==0){p=+h[8600];q=+h[8599];if(p>=q){o=4321;break}h[8599]=p;h[8600]=q;t=1}else{o=4321}}while(0);if((o|0)==4321){t=(c[17196]|0)>>>1&1}a[68788]=t;dq(5);do{if((c[17022]&3|0)==0){q=+h[8514];p=+h[8513];if(q>=p){o=4325;break}h[8513]=q;h[8514]=p;u=1}else{o=4325}}while(0);if((o|0)==4325){u=(c[17024]|0)>>>1&1}a[68100]=u;u=e;t=e+16|0;s=0;do{r=64944+(s*688&-1)|0;n=c[r>>2]|0;if((n|0)==0){o=4334}else{c[u>>2]=c[7254];c[u+4>>2]=c[7255];c[u+8>>2]=c[7256];c[u+12>>2]=c[7257];c[u+16>>2]=c[7258];c[u+20>>2]=c[7259];l=e;f=n;L5858:while(1){n=f;while(1){if((c[n+12>>2]|0)>=0){break}uu(c[n+8>>2]|0);k=c[n+16>>2]|0;uu(n);if((k|0)==0){w=l;break L5858}else{n=k}}c[l+16>>2]=n;m=c[n+16>>2]|0;if((m|0)==0){w=n;break}else{l=n;f=m}}c[w+16>>2]=0;f=c[t>>2]|0;c[r>>2]=f;if((f|0)==0){o=4334}}do{if((o|0)==4334){o=0;f=64920+(s*688&-1)|0;if((c[f>>2]|0)!=3){break}c[f>>2]=1}}while(0);s=s+1|0;}while((s|0)<11);if((j|0)<=-1){uB(55600,24544);iT();i=d;return}s=c[1054]|0;o=c[s+(j*40&-1)+36>>2]|0;t=(o|0)>49?49:o;o=c[10036]|0;w=c[s+(j*40&-1)+32>>2]|0;j=0;while(1){s=j+1|0;a[j+55600|0]=a[o+w|0]|0;if((s|0)==(t|0)){break}else{w=w+1|0;j=s}}a[t+55600|0]=0;iT();i=d;return}function iT(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0,U=0,V=0,W=0,X=0,Y=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0.0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0.0,aX=0,aZ=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,ba=0,bb=0,bc=0,bd=0,be=0,bf=0,bg=0,bh=0,bi=0,bj=0,bk=0,bl=0,bm=0,bn=0,bo=0,bp=0,bq=0,br=0,bs=0,bt=0,bu=0,bv=0,bw=0,bx=0,by=0,bz=0,bB=0,bC=0,bD=0,bE=0,bF=0,bG=0,bH=0,bI=0,bJ=0,bK=0,bL=0,bN=0,bO=0,bQ=0,bR=0,bS=0,bT=0,bU=0,bV=0,bW=0,bX=0,bY=0,bZ=0,b_=0,b$=0,b0=0,b1=0,b2=0,b3=0,b4=0,b5=0,b6=0,b7=0,b8=0,b9=0,ca=0,cb=0,cc=0,cd=0,ce=0,cf=0,cg=0,ch=0,ci=0,cj=0,ck=0,cl=0,cm=0,cn=0,co=0,cp=0,cq=0,cr=0,cs=0,ct=0,cu=0,cv=0,cw=0,cx=0,cy=0,cz=0,cA=0,cB=0,cC=0,cD=0,cE=0,cF=0,cG=0,cH=0,cI=0,cJ=0,cK=0,cL=0,cM=0,cN=0,cO=0,cP=0,cQ=0,cR=0,cS=0,cT=0,cU=0,cV=0,cW=0,cX=0,cY=0,cZ=0,c_=0,c$=0,c0=0.0,c1=0,c2=0,c3=0,c4=0,c5=0,c6=0,c7=0,c8=0,c9=0,da=0,dd=0,de=0,df=0,dg=0,dh=0,di=0,dj=0,dk=0,dl=0,dm=0,dn=0,dq=0,dr=0,ds=0,dt=0,du=0,dv=0,dw=0,dx=0,dy=0,dz=0,dA=0,dB=0,dC=0,dD=0,dE=0,dF=0,dG=0,dH=0,dI=0,dJ=0,dK=0,dL=0,dM=0,dN=0,dO=0,dP=0,dQ=0,dR=0,dS=0,dU=0,dV=0,dW=0,dX=0,dY=0,dZ=0,d_=0,d$=0,d0=0,d1=0,d2=0,d3=0,d4=0,d5=0,d6=0,d7=0,d8=0,d9=0,ea=0,eb=0,ec=0,ed=0.0,ee=0.0,ef=0.0,eg=0.0,eh=0.0,ei=0.0,ej=0.0,ek=0,el=0.0,em=0.0,en=0.0,eo=0.0,ep=0.0,eq=0.0,er=0.0,es=0.0,et=0,eu=0,ev=0,ew=0,ex=0.0,eA=0,eB=0.0,eE=0.0,eF=0.0,eG=0.0,eH=0,eI=0,eJ=0,eK=0,eN=0.0,eO=0.0,eP=0,eQ=0,eR=0,eS=0.0,eT=0.0,eU=0,eV=0,eW=0,eX=0,eY=0,eZ=0,e_=0,e$=0,e0=0,e1=0,e2=0,e3=0,e5=0,e8=0.0,e9=0,fa=0,fb=0,fc=0,fd=0,fe=0,ff=0,fg=0,fh=0,fi=0,fj=0,fk=0,fl=0.0,fm=0,fn=0,fo=0,fp=0,fq=0,fr=0,fs=0,ft=0,fu=0,fv=0.0,fw=0,fx=0.0,fy=0.0,fz=0,fA=0,fB=0,fC=0,fD=0,fE=0.0,fF=0,fG=0,fH=0,fI=0,fJ=0,fK=0,fL=0,fM=0,fN=0,fO=0,fP=0,fQ=0,fR=0,fT=0.0,fU=0,fV=0,fW=0,fX=0,fY=0,fZ=0,f_=0,f$=0,f0=0,f1=0,f2=0,f4=0,f5=0,f6=0,f7=0,f9=0,ga=0,gb=0.0,gc=0.0,gd=0,ge=0,gf=0,gg=0,gh=0,gi=0,gj=0.0,gl=0.0,gm=0.0,gn=0.0,go=0,gp=0.0,gq=0.0,gr=0.0,gs=0.0,gt=0.0,gu=0.0,gv=0,gw=0.0,gx=0.0,gy=0.0,gz=0.0,gA=0,gB=0,gC=0.0,gD=0,gE=0,gF=0.0,gG=0,gH=0,gI=0.0,gJ=0,gK=0.0,gL=0,gM=0,gN=0,gO=0,gP=0,gQ=0,gR=0,gS=0,gT=0,gU=0,gV=0,gW=0,gX=0,gY=0,gZ=0,g_=0,g$=0,g0=0,g1=0,g2=0.0,g3=0,g4=0,g5=0,g6=0,g7=0,g8=0,g9=0,ha=0,hb=0,hc=0,hd=0,he=0.0,hf=0.0,hg=0,hh=0.0,hi=0.0,hj=0,hm=0,ho=0.0;b=i;i=i+512|0;d=b|0;e=b+8|0;f=b+96|0;g=b+120|0;j=b+144|0;k=b+216|0;l=b+240|0;n=b+264|0;o=b+288|0;p=b+336|0;q=b+368|0;r=b+424|0;s=b+480|0;t=b+488|0;u=c[13898]|0;h[4834]=0.0;f8(38680);w=c[3568]|0;if((w|0)!=0){uu(w)}c[3568]=0;w=o+20|0;c[w>>2]=0;x=o+24|0;c[x>>2]=0;y=o+4|0;c[y>>2]=0;z=o+8|0;c[z>>2]=0;A=c[10814]|0;if((A|0)!=0){iO(A)}c[10814]=0;A=c[12374]|0;a[872]=0;c[7774]=iw()|0;B=c[13898]|0;if((B|0)>=(c[8272]|0)){C=B;uf(C,105216,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}D=b+168|0;E=b+64|0;F=e|0;G=e+8|0;H=e+16|0;I=e+24|0;J=e+32|0;K=e+40|0;L=f|0;M=f+8|0;N=r+40|0;O=q;Q=q+4|0;U=q+16|0;V=q+24|0;W=q+8|0;X=q|0;Y=q+40|0;$=q+44|0;aa=q+32|0;ab=g|0;ac=j|0;ad=j+8|0;ae=b+192|0;af=p+8|0;ag=n|0;ah=n+8|0;ai=l|0;aj=l+8|0;ak=k|0;al=k+8|0;am=0;an=-5;ao=1;ap=-1;aq=0.0;ar=0;as=0;at=A;A=0;au=0;av=0;aw=0;ax=0;ay=43256;az=B;L5888:while(1){B=ar;aA=A;aB=az;L5890:while(1){aC=c[1054]|0;aD=(a[aC+(aB*40&-1)|0]&1)==0;L5892:do{if(!aD){aE=c[aC+(aB*40&-1)+36>>2]|0;aF=aC+(aB*40&-1)+32|0;aG=c[10036]|0;aH=0;while(1){if((aH|0)>=(aE|0)){break}if((a[aG+((c[aF>>2]|0)+aH|0)|0]|0)==(a[aH+103664|0]|0)){aH=aH+1|0}else{break L5892}}if((aH|0)==1){aJ=B;aK=aA;aL=am;aM=au;aN=ax;aO=aB;aP=4357;break L5888}}}while(0);if(au){aQ=B}else{aQ=aA?B:aB}aF=c[aC+(aB*40&-1)+36>>2]|0;L5902:do{if((aF|0)>0&(aD^1)){aG=c[10036]|0;aE=0;aR=0;aS=c[aC+(aB*40&-1)+32>>2]|0;while(1){if((a[aE+205224|0]|0)==(a[aG+(aE+aS|0)|0]|0)){aT=aS;aU=aR}else{if((aE|0)!=7){break L5902}aT=aS-1|0;aU=1}aV=aE+1|0;if((aV|0)<(aU+aF|0)){aE=aV;aR=aU;aS=aT}else{break}}if((aU|0)!=0){aP=4369;break L5890}if((aE|0)==12|(aE|0)==6){aP=4369;break L5890}}}while(0);if((t9(aB)|0)==0){aP=4446;break}dT();aF=c[13898]|0;aC=c[8272]|0;aD=(aC|0)>(aF|0);if(!aD){aJ=aQ;aK=1;aL=am;aM=au;aN=ax;aO=aF;aP=4357;break L5888}aS=c[1054]|0;if((a[aS+(aF*40&-1)|0]&1)==0){B=aQ;aA=1;aB=aF;continue}aR=c[aS+(aF*40&-1)+36>>2]|0;aG=aS+(aF*40&-1)+32|0;aS=c[10036]|0;aH=0;while(1){if((aH|0)>=(aR|0)){aP=4445;break}if((a[aS+((c[aG>>2]|0)+aH|0)|0]|0)==(a[aH+148464|0]|0)){aH=aH+1|0}else{break}}if((aP|0)==4445){aP=0;if((aH|0)==1){aW=aq;aX=ap;aZ=ao;a$=an;a0=aF;a1=aC;aP=5304;break}}if(aD){B=aQ;aA=1;aB=aF}else{aJ=aQ;aK=1;aL=am;aM=au;aN=ax;aO=aF;aP=4357;break L5888}}do{if((aP|0)==4446){aP=0;B=am+1|0;c[11670]=31424;aG=iu(0)|0;c[11670]=0;aS=(a[32936]&1)==0;aR=au^1;if((aG|0)==0){aV=aS?au:aR;a2=c[ay>>2]|0;a3=(c[6352]|0)+1|0;if((a2|0)==0){uE(D|0,0,24);a4=ut(328)|0;if((a4|0)==0){gk();a5=ut(328)|0;if((a5|0)==0){aP=4462;break L5888}else{a6=a5}}else{a6=a4}a4=a6;uE(a6|0,0,328);c[a6+296>>2]=(a3|0)<0?0:a3;if((a3|0)>0){a5=a3<<6;a7=ut(a5)|0;if((a7|0)==0){gk();a8=ut(a5)|0;if((a8|0)==0){aP=4466;break L5888}else{a9=a8}}else{a9=a7}c[a6+320>>2]=a9}c[a6+24>>2]=0;c[a6+28>>2]=-2;a7=a6+32|0;c[a7>>2]=0;c[a7+4>>2]=0;h[a6+40>>3]=1.0;h[a6+48>>3]=-2.0;a7=a6+56|0;c[a7>>2]=c[D>>2];c[a7+4>>2]=c[D+4>>2];c[a7+8>>2]=c[D+8>>2];c[a7+12>>2]=c[D+12>>2];c[a7+16>>2]=c[D+16>>2];c[a7+20>>2]=c[D+20>>2];c[a6+80>>2]=-1;c[a6+84>>2]=0;a7=a6+88|0;c[a7>>2]=c[12872];c[a7+4>>2]=c[12873];c[a7+8>>2]=c[12874];c[a7+12>>2]=c[12875];c[a7+16>>2]=c[12876];c[a7+20>>2]=c[12877];c[a7+24>>2]=c[12878];c[a7+28>>2]=c[12879];c[a7+32>>2]=c[12880];c[a7+36>>2]=c[12881];c[a7+40>>2]=c[12882];c[a7+44>>2]=c[12883];c[a7+48>>2]=c[12884];c[a7+52>>2]=c[12885];c[a6+144>>2]=1;h[a6+152>>3]=0.0;c[a6+160>>2]=0;h[a6+168>>3]=15.0;h[a6+176>>3]=90.0;c[a6+184>>2]=0;a7=a6+192|0;c[a7>>2]=c[12372];c[a7+4>>2]=c[12373];c[a7+8>>2]=c[12374];c[a7+12>>2]=c[12375];c[a7+16>>2]=c[12376];c[a7+20>>2]=c[12377];c[a7+24>>2]=c[12378];c[a7+28>>2]=c[12379];c[ay>>2]=a4;ba=a4}else{iR(a2,a3);ba=a2}c[ba+8>>2]=0;c[ba+12>>2]=c[10058];c[ba+240>>2]=0;a[ba+56|0]=0;a2=c[13898]|0;bb=ba;bc=1;bd=aV;be=a2-1|0;bf=0;bg=a2}else{if(!(aS|aR)){aP=4448;break L5888}aR=c[ay>>2]|0;if((aR|0)==0){uE(ae|0,0,24);aS=ut(328)|0;if((aS|0)==0){gk();a2=ut(328)|0;if((a2|0)==0){aP=4452;break L5888}else{bh=a2}}else{bh=aS}aS=bh;uE(bh|0,0,328);c[bh+296>>2]=100;a2=ut(6400)|0;if((a2|0)==0){gk();aV=ut(6400)|0;if((aV|0)==0){aP=4455;break L5888}else{bi=aV}}else{bi=a2}c[bh+320>>2]=bi;c[bh+24>>2]=0;c[bh+28>>2]=-2;a2=bh+32|0;c[a2>>2]=0;c[a2+4>>2]=0;h[bh+40>>3]=1.0;h[bh+48>>3]=-2.0;a2=bh+56|0;c[a2>>2]=c[ae>>2];c[a2+4>>2]=c[ae+4>>2];c[a2+8>>2]=c[ae+8>>2];c[a2+12>>2]=c[ae+12>>2];c[a2+16>>2]=c[ae+16>>2];c[a2+20>>2]=c[ae+20>>2];c[bh+80>>2]=-1;c[bh+84>>2]=0;a2=bh+88|0;c[a2>>2]=c[12872];c[a2+4>>2]=c[12873];c[a2+8>>2]=c[12874];c[a2+12>>2]=c[12875];c[a2+16>>2]=c[12876];c[a2+20>>2]=c[12877];c[a2+24>>2]=c[12878];c[a2+28>>2]=c[12879];c[a2+32>>2]=c[12880];c[a2+36>>2]=c[12881];c[a2+40>>2]=c[12882];c[a2+44>>2]=c[12883];c[a2+48>>2]=c[12884];c[a2+52>>2]=c[12885];c[bh+144>>2]=1;h[bh+152>>3]=0.0;c[bh+160>>2]=0;h[bh+168>>3]=15.0;h[bh+176>>3]=90.0;c[bh+184>>2]=0;a2=bh+192|0;c[a2>>2]=c[12372];c[a2+4>>2]=c[12373];c[a2+8>>2]=c[12374];c[a2+12>>2]=c[12375];c[a2+16>>2]=c[12376];c[a2+20>>2]=c[12377];c[a2+24>>2]=c[12378];c[a2+28>>2]=c[12379];c[ay>>2]=aS;bj=aS}else{bj=aR}c[bj+8>>2]=1;c[bj+12>>2]=c[12890];c[bj+284>>2]=0;c[bj+240>>2]=0;a[bj+56|0]=0;c[11856]=1;aR=ey(aG,7,bj)|0;aG=(c[13898]|0)-1|0;c[bj+4>>2]=aG;bb=bj;bc=ax;bd=au;be=aG;bf=aR;bg=c[13898]|0}c[200]=2;c[144]=1;aR=c[8272]|0;if((bg|0)<(aR|0)){aG=bb+12|0;aS=bb+144|0;a2=bb+152|0;aV=bb+80|0;a3=bb+80|0;a4=bb+84|0;a7=bb+88|0;a8=a7;a5=bb+160|0;bk=bb+168|0;bl=bb+176|0;bm=bb+184|0;bn=aw+1|0;bo=a7|0;bp=bb+92|0;bq=bb+128|0;br=bb+132|0;bs=bb+96|0;bt=bb+120|0;bu=bb+272|0;bv=bb+224|0;bw=bb+64|0;bx=bb+56|0;by=bb+192|0;bz=by|0;bB=bb+24|0;bC=bd^1;bD=bb+240|0;bE=bb+8|0;bF=bb+232|0;bG=bb+22|0;bH=(as|0)==0;bI=bb+20|0;bJ=bb+16|0;bK=bb+284|0;bL=0;bN=0;bO=0;bQ=0;bR=0;bS=0;bT=0;bU=0;bV=bg;bW=aR;L5954:while(1){aR=c[1054]|0;bX=(a[aR+(bV*40&-1)|0]&1)==0;bY=c[aR+(bV*40&-1)+36>>2]|0;bZ=aR+(bV*40&-1)+32|0;L5956:do{if(bX){b_=c[bZ>>2]|0;aP=4648}else{b$=c[10036]|0;b0=0;while(1){if((b0|0)>=(bY|0)){aP=4478;break}if((a[b$+((c[bZ>>2]|0)+b0|0)|0]|0)==(a[b0+103664|0]|0)){b0=b0+1|0}else{break}}if((aP|0)==4478){aP=0;if((b0|0)==1){b1=bS;b2=bR;b3=bO;break L5954}}b$=c[bZ>>2]|0;if(!((bY|0)>0&(bX^1))){b_=b$;aP=4648;break}b4=c[10036]|0;b5=0;b6=0;b7=b$;while(1){if((a[b5+168032|0]|0)==(a[b4+(b5+b7|0)|0]|0)){b8=b7;b9=b6}else{if((b5|0)!=1){break}b8=b7-1|0;b9=1}ca=b5+1|0;if((ca|0)<(b9+bY|0)){b5=ca;b6=b9;b7=b8}else{aP=4485;break}}do{if((aP|0)==4485){aP=0;if((b9|0)==0){if(!((b5|0)==0|(b5|0)==6)){break}}if(bL){cb=bV;aP=6078;break L5888}cc=bV+1|0;c[13898]=cc;b7=c[aR+(cc*40&-1)+36>>2]|0;b6=c[aR+(cc*40&-1)+32>>2]|0;b4=(a[aR+(cc*40&-1)|0]&1)==0;b0=(b7|0)>0;ca=c[10036]|0;cd=30960;ce=115840;L5978:while(1){L5980:do{if(!b4){if(b0){cf=0;cg=0;ch=b6;while(1){ci=a[ce+cf|0]|0;if(ci<<24>>24==(a[ca+(cf+ch|0)|0]|0)){cj=ch;ck=cg}else{if(ci<<24>>24!=36){break L5980}cj=ch-1|0;ck=1}cl=cf+1|0;if((cl|0)<(ck+b7|0)){cf=cl;cg=ck;ch=cj}else{break}}if((ck|0)==0){cm=cl}else{cn=cd;break L5978}}else{cm=0}ch=a[ce+cm|0]|0;if((ch<<24>>24|0)==36|(ch<<24>>24|0)==0){cn=cd;break L5978}}}while(0);ch=cd+8|0;cg=c[ch>>2]|0;if((cg|0)==0){cn=ch;break}else{cd=ch;ce=cg}}ce=c[cn+4>>2]|0;if((ce-1|0)>>>0>=9){aP=4501;break L5888}c[bK>>2]=ce;c[aG>>2]=1;c[13898]=(c[13898]|0)+1;co=bU;cp=bT;cq=bS;cr=bR;cs=bQ;ct=bO;cu=bN;cv=1;break L5956}}while(0);if(bX){b_=b$;aP=4648;break}L5996:do{if((bY|0)>0){b5=c[10036]|0;ce=0;cd=0;b7=b$;while(1){if((a[ce+154504|0]|0)==(a[b5+(ce+b7|0)|0]|0)){cw=b7;cx=cd}else{if((ce|0)!=2){aP=4511;break L5996}cw=b7-1|0;cx=1}ca=ce+1|0;if((ca|0)<(cx+bY|0)){ce=ca;cd=cx;b7=cw}else{break}}if((cx|0)!=0){break}if(!((ce|0)==1|(ce|0)==4)){aP=4511}}else{aP=4511}}while(0);do{if((aP|0)==4511){aP=0;if(!((bY|0)>0&(bX^1))){b_=b$;aP=4648;break L5956}b7=c[10036]|0;cd=0;b5=0;ca=b$;while(1){if((a[cd+116896|0]|0)==(a[b7+(cd+ca|0)|0]|0)){cy=ca;cz=b5}else{if((cd|0)!=2){break}cy=ca-1|0;cz=1}b6=cd+1|0;if((b6|0)<(cz+bY|0)){cd=b6;b5=cz;ca=cy}else{aP=4517;break}}if((aP|0)==4517){aP=0;if((cz|0)!=0){break}if((cd|0)==1|(cd|0)==4){break}}if(bX){b_=b$;aP=4648;break L5956}L6020:do{if((bY|0)>0){ca=c[10036]|0;b5=0;b7=0;ce=b$;while(1){if((a[b5+224032|0]|0)==(a[ca+(b5+ce|0)|0]|0)){cA=ce;cB=b7}else{if((b5|0)!=1){break L6020}cA=ce-1|0;cB=1}b6=b5+1|0;if((b6|0)<(cB+bY|0)){b5=b6;b7=cB;ce=cA}else{break}}if((cB|0)==0){if(!((b5|0)==0|(b5|0)==5)){break}}if(bO){cb=bV;aP=6075;break L5888}a[bI]=a[36231]&1^1;do{if((a[32936]&1)!=0){if(bd){aP=4546;break L5888}if(bH){break}a[as]=0}}while(0);b5=c[13898]|0;cC=b5+1|0;c[13898]=cC;ce=c[1054]|0;b7=c[ce+(cC*40&-1)+36>>2]|0;ca=c[ce+(cC*40&-1)+32>>2]|0;b6=ce+(cC*40&-1)|0;L6038:do{if((a[b6]&1)!=0&(b7|0)>0){b0=c[10036]|0;b4=0;cg=0;ch=ca;while(1){if((a[b4+137208|0]|0)==(a[b0+(b4+ch|0)|0]|0)){cD=ch;cE=cg}else{if((b4|0)!=3){break L6038}cD=ch-1|0;cE=1}cf=b4+1|0;if((cf|0)<(cE+b7|0)){b4=cf;cg=cE;ch=cD}else{break}}if((cE|0)==0){if(!((b4|0)==2|(b4|0)==12)){break}}ch=c[8272]|0;L6050:do{if((ch|0)>(cC|0)){cg=c[10036]|0;b0=0;while(1){if((b0|0)>=(b7|0)){break}if((a[cg+(ca+b0|0)|0]|0)==(a[b0+141968|0]|0)){b0=b0+1|0}else{break L6050}}if((b0|0)!=10){break}cf=b5+2|0;if((ch|0)<=(cf|0)){break}if((a[ce+(cf*40&-1)|0]&1)==0){break}ci=c[ce+(cf*40&-1)+36>>2]|0;cF=ce+(cf*40&-1)+32|0;cf=0;while(1){if((cf|0)>=(ci|0)){break}if((a[cg+((c[cF>>2]|0)+cf|0)|0]|0)==(a[cf+199040|0]|0)){cf=cf+1|0}else{break L6050}}if((cf|0)==1){break L6038}}}while(0);eM(bb);co=bU;cp=bT;cq=bS;cr=bR;cs=bQ;ct=1;cu=bN;cv=bL;break L5956}}while(0);a[43504]=1;if((cC|0)>=(c[8272]|0)){aP=4577;break L5888}L6066:do{if((a[b6]&1)!=0){ce=c[10036]|0;b5=0;while(1){if((b5|0)>=(b7|0)){break}if((a[ce+(ca+b5|0)|0]|0)==(a[b5+103664|0]|0)){b5=b5+1|0}else{break L6066}}if((b5|0)==1){aP=4577;break L5888}}}while(0);a[14176]=1;is(j);a[14176]=0;if((c[ac>>2]|0)!=3){aP=4576;break L5888}ca=c[ad>>2]|0;c[bJ>>2]=ca;if((ca|0)==0){aP=6068;break L5888}a[43504]=0;co=bU;cp=bT;cq=bS;cr=bR;cs=bQ;ct=1;cu=bN;cv=bL;break L5956}}while(0);if(!((bY|0)>0&(bX^1))){b_=b$;aP=4648;break L5956}cd=c[10036]|0;ca=0;b7=0;b6=b$;while(1){if((a[ca+202e3|0]|0)==(a[cd+(ca+b6|0)|0]|0)){cG=b6;cH=b7}else{if((ca|0)!=3){break}cG=b6-1|0;cH=1}ce=ca+1|0;if((ce|0)<(cH+bY|0)){ca=ce;b7=cH;b6=cG}else{aP=4587;break}}do{if((aP|0)==4587){aP=0;if((cH|0)==0){if(!((ca|0)==2|(ca|0)==7)){break}}if(bO){cb=bV;aP=6077;break L5888}b6=bV+1|0;c[13898]=b6;b7=(a[aR+(b6*40&-1)|0]&1)==0;if(b7){aP=4592}else{cd=c[10036]|0;ce=a[cd+(c[aR+(b6*40&-1)+32>>2]|0)|0]|0;if((ce<<24>>24|0)==39|(ce<<24>>24|0)==34){cI=cd;aP=4602}else{aP=4592}}L6091:do{if((aP|0)==4592){aP=0;cd=c[10810]|0;if((cd|0)==0){break}ce=aR+(b6*40&-1)+36|0;ch=aR+(b6*40&-1)+32|0;b4=c[10036]|0;cF=cd;L6094:while(1){cd=c[cF+4>>2]|0;L6096:do{if(!((bW|0)<=(b6|0)|b7)){cg=c[ce>>2]|0;ci=0;while(1){if((ci|0)>=(cg|0)){break}if((a[b4+((c[ch>>2]|0)+ci|0)|0]|0)==(a[cd+ci|0]|0)){ci=ci+1|0}else{break L6096}}if((a[cd+ci|0]|0)==0){break L6094}}}while(0);cd=c[cF>>2]|0;if((cd|0)==0){break L6091}else{cF=cd}}if((a[cF+8|0]&1)!=0){break}if((c[cF+16>>2]|0)==3){cI=b4;aP=4602}}}while(0);L6105:do{if((aP|0)==4602){aP=0;if((b6|0)>=(bW|0)){break}L6108:do{if(!b7){ch=c[aR+(b6*40&-1)+36>>2]|0;ce=aR+(b6*40&-1)+32|0;b5=0;while(1){if((b5|0)>=(ch|0)){break}if((a[cI+((c[ce>>2]|0)+b5|0)|0]|0)==(a[b5+103664|0]|0)){b5=b5+1|0}else{break L6108}}if((b5|0)==1){break L6105}}}while(0);a[14176]=1;is(g);a[14176]=0;if((c[ab>>2]|0)==3){break}c[13898]=b6}}while(0);a[bG]=1;if(bH){co=bU;cp=bT;cq=bS;cr=bR;cs=bQ;ct=1;cu=bN;cv=bL;break L5956}a[as]=0;co=bU;cp=bT;cq=bS;cr=bR;cs=bQ;ct=1;cu=bN;cv=bL;break L5956}}while(0);if(!((bY|0)>0&(bX^1))){b_=b$;aP=4648;break L5956}ca=c[10036]|0;b6=0;b7=0;b4=b$;while(1){if((a[b6+196448|0]|0)==(a[ca+(b6+b4|0)|0]|0)){cJ=b4;cK=b7}else{if((b6|0)!=1){b_=b$;aP=4648;break L5956}cJ=b4-1|0;cK=1}cF=b6+1|0;if((cF|0)<(cK+bY|0)){b6=cF;b7=cK;b4=cJ}else{break}}if((cK|0)==0){if(!((b6|0)==0|(b6|0)==4)){b_=b$;aP=4648;break L5956}}if(bQ){cb=bV;aP=6082;break L5888}if(!((a[32936]&1)==0|bC)){aP=4622;break L5888}b4=bV+1|0;c[13898]=b4;b7=c[aR+(b4*40&-1)+36>>2]|0;ca=c[aR+(b4*40&-1)+32>>2]|0;cF=(a[aR+(b4*40&-1)|0]&1)==0;b4=(b7|0)>0;ce=c[10036]|0;ch=30672;cd=116448;L6132:while(1){L6134:do{if(!cF){if(b4){cf=0;cg=0;b0=ca;while(1){cL=a[cd+cf|0]|0;if(cL<<24>>24==(a[ce+(cf+b0|0)|0]|0)){cM=b0;cN=cg}else{if(cL<<24>>24!=36){break L6134}cM=b0-1|0;cN=1}cO=cf+1|0;if((cO|0)<(cN+b7|0)){cf=cO;cg=cN;b0=cM}else{break}}if((cN|0)==0){cP=cO}else{cQ=ch;break L6132}}else{cP=0}b0=a[cd+cP|0]|0;if((b0<<24>>24|0)==36|(b0<<24>>24|0)==0){cQ=ch;break L6132}}}while(0);b0=ch+8|0;cg=c[b0>>2]|0;if((cg|0)==0){cQ=b0;break}else{ch=b0;cd=cg}}cd=c[cQ+4>>2]|0;cR=bV+2|0;c[13898]=cR;if((cd|0)==-1){aP=4634;break L5888}c[aG>>2]=cd;if((cd|0)==345){hE(bD);cS=c[aG>>2]|0}else{cS=cd}L6151:do{if((cS|0)==400|(cS|0)==416|(cS|0)==432){cd=c[13898]|0;if((c[8272]|0)<=(cd|0)){break}ch=c[1054]|0;if((a[ch+(cd*40&-1)|0]&1)==0){break}b7=c[ch+(cd*40&-1)+36>>2]|0;ce=ch+(cd*40&-1)+32|0;ch=c[10036]|0;ca=0;while(1){if((ca|0)>=(b7|0)){break}if((a[ch+((c[ce>>2]|0)+ca|0)|0]|0)==(a[ca+224816|0]|0)){ca=ca+1|0}else{break L6151}}if((ca|0)!=8){break}c[13898]=cd+1;a[bF]=1}}while(0);if((c[bE>>2]|0)!=0){co=bU;cp=bT;cq=bS;cr=bR;cs=1;ct=bO;cu=bN;cv=bL;break L5956}ce=c[aG>>2]|0;if(!((ce&4|0)!=0|(ce|0)==368)){co=bU;cp=bT;cq=bS;cr=bR;cs=1;ct=bO;cu=bN;cv=bL;break L5956}uh(c[13898]|0,131840,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);c[aG>>2]=18;co=bU;cp=bT;cq=bS;cr=bR;cs=1;ct=bO;cu=bN;cv=bL;break L5956}}while(0);if(bN){cb=bV;aP=6081;break L5888}if(!((a[32936]&1)==0|bC)){aP=4521;break L5888}cT=bV+1|0;c[13898]=cT;b$=c[aR+(cT*40&-1)+36>>2]|0;ce=c[aR+(cT*40&-1)+32>>2]|0;ch=(a[aR+(cT*40&-1)|0]&1)==0;b7=(b$|0)>0;b4=c[10036]|0;L6166:do{if(ch){aP=6064}else{L6168:do{if(b7){cF=0;while(1){if((a[cF+122952|0]|0)!=(a[b4+(cF+ce|0)|0]|0)){break L6168}b6=cF+1|0;if((b6|0)<(b$|0)){cF=b6}else{cU=b6;aP=4526;break}}}else{cU=0;aP=4526}}while(0);if((aP|0)==4526){aP=0;cF=a[cU+122952|0]|0;if((cF<<24>>24|0)==36|(cF<<24>>24|0)==0){cV=31768;break}}if(ch){aP=6064;break}L6176:do{if(b7){cF=0;while(1){if((a[cF+121816|0]|0)!=(a[b4+(cF+ce|0)|0]|0)){break L6176}cd=cF+1|0;if((cd|0)<(b$|0)){cF=cd}else{cW=cd;aP=6053;break}}}else{cW=0;aP=6053}}while(0);if((aP|0)==6053){aP=0;cF=a[cW+121816|0]|0;if((cF<<24>>24|0)==36|(cF<<24>>24|0)==0){cV=31776;break}}if(ch){aP=6064;break}L6184:do{if(b7){cF=0;while(1){if((a[cF+119872|0]|0)!=(a[b4+(cF+ce|0)|0]|0)){break L6184}cd=cF+1|0;if((cd|0)<(b$|0)){cF=cd}else{cX=cd;aP=6058;break}}}else{cX=0;aP=6058}}while(0);if((aP|0)==6058){aP=0;cF=a[cX+119872|0]|0;if((cF<<24>>24|0)==36|(cF<<24>>24|0)==0){cV=31784;break}}if(ch){aP=6064;break}if(b7){cF=0;while(1){if((a[cF+116712|0]|0)!=(a[b4+(cF+ce|0)|0]|0)){aP=6064;break L6166}cd=cF+1|0;if((cd|0)<(b$|0)){cF=cd}else{cY=cd;break}}}else{cY=0}cF=a[cY+116712|0]|0;if((cF<<24>>24|0)==36|(cF<<24>>24|0)==0){cV=31792}else{aP=6064}}}while(0);if((aP|0)==6064){aP=0;cV=31800}b$=c[cV+4>>2]|0;if((b$|0)==0){c[200]=2;c[144]=1;c[13898]=bV+2;co=bU;cp=bT;cq=bS;cr=bR;cs=bQ;ct=bO;cu=1;cv=bL;break}else if((b$|0)==1){c[200]=6;c[144]=5;c[13898]=bV+2;co=bU;cp=bT;cq=bS;cr=bR;cs=bQ;ct=bO;cu=1;cv=bL;break}else if((b$|0)==2){c[200]=2;c[144]=5;c[13898]=bV+2;co=bU;cp=bT;cq=bS;cr=bR;cs=bQ;ct=bO;cu=1;cv=bL;break}else if((b$|0)==3){c[200]=6;c[144]=1;c[13898]=bV+2;co=bU;cp=bT;cq=bS;cr=bR;cs=bQ;ct=bO;cu=1;cv=bL;break}else{aP=4533;break L5888}}}while(0);L6205:do{if((aP|0)==4648){aP=0;aR=c[aG>>2]|0;if((aR|0)==252){L6209:do{if((bY|0)>0&(bX^1)){bZ=c[10036]|0;aE=0;b$=0;ce=b_;while(1){if((a[aE+130576|0]|0)==(a[bZ+(aE+ce|0)|0]|0)){cZ=ce;c_=b$}else{if((aE|0)!=7){break L6209}cZ=ce-1|0;c_=1}b4=aE+1|0;if((b4|0)<(c_+bY|0)){aE=b4;b$=c_;ce=cZ}else{break}}if((c_|0)==0){if(!((aE|0)==6|(aE|0)==11)){break}}c[aS>>2]=3;ce=(c[13898]|0)+1|0;c[13898]=ce;b$=c[1054]|0;L6221:do{if((a[b$+(ce*40&-1)|0]&1)!=0){bZ=c[10810]|0;if((bZ|0)==0){break L6209}b4=(c[8272]|0)>(ce|0);b7=b$+(ce*40&-1)+36|0;ch=b$+(ce*40&-1)+32|0;cF=c[10036]|0;cd=bZ;L6224:while(1){ca=c[cd+4>>2]|0;L6226:do{if(b4){b6=c[b7>>2]|0;cg=0;while(1){if((cg|0)>=(b6|0)){break}if((a[cF+((c[ch>>2]|0)+cg|0)|0]|0)==(a[ca+cg|0]|0)){cg=cg+1|0}else{break L6226}}if((a[ca+cg|0]|0)==0){aP=4665;break L6224}}}while(0);ca=c[cd>>2]|0;if((ca|0)==0){c$=bZ;break}else{cd=ca}}do{if((aP|0)==4665){aP=0;if((a[cd+8|0]&1)!=0){c$=bZ;break}if((c[cd+16>>2]|0)==1){break L6221}else{c$=bZ}}}while(0);L6236:while(1){bZ=c[c$+4>>2]|0;L6238:do{if(b4){cd=c[b7>>2]|0;ca=0;while(1){if((ca|0)>=(cd|0)){break}if((a[cF+((c[ch>>2]|0)+ca|0)|0]|0)==(a[bZ+ca|0]|0)){ca=ca+1|0}else{break L6238}}if((a[bZ+ca|0]|0)==0){break L6236}}}while(0);bZ=c[c$>>2]|0;if((bZ|0)==0){break L6209}else{c$=bZ}}if((a[c$+8|0]&1)!=0){break L6209}if((c[c$+16>>2]|0)!=2){break L6209}}}while(0);ce=is(f)|0;b$=c[ce>>2]|0;if((b$|0)==1){c0=+(c[ce+8>>2]|0)}else if((b$|0)==2){c0=+h[ce+8>>3]}else if((b$|0)==3){c0=+uz(c[ce+8>>2]|0,0)}else{aP=4680;break L5888}if((c[L>>2]|0)==3){uu(c[M>>2]|0);c[L>>2]=1}h[a2>>3]=c0}}while(0);c1=c[aG>>2]|0}else{c1=aR}do{if((c1|0)==225){ce=c[13898]|0;do{if(!bR){c[a3>>2]=-1;c[a4>>2]=0;c[a8>>2]=c[12872];c[a8+4>>2]=c[12873];c[a8+8>>2]=c[12874];c[a8+12>>2]=c[12875];c[a8+16>>2]=c[12876];c[a8+20>>2]=c[12877];c[a8+24>>2]=c[12878];c[a8+28>>2]=c[12879];c[a8+32>>2]=c[12880];c[a8+36>>2]=c[12881];c[a8+40>>2]=c[12882];c[a8+44>>2]=c[12883];c[a8+48>>2]=c[12884];c[a8+52>>2]=c[12885];c[aS>>2]=1;h[a2>>3]=0.0;c[a5>>2]=0;h[bk>>3]=15.0;h[bl>>3]=90.0;c[bm>>2]=0;if((a[30080]&1)!=0){lK(a7,bn);break}b$=c[8798]|0;aE=(b$|0)>0;ch=bn;L6265:while(1){cF=43264;while(1){c2=c[cF>>2]|0;if((c2|0)==0){break}if((c[c2+4>>2]|0)==(ch|0)){break L6265}else{cF=c2|0}}c3=ch-1|0;if(!((ch|0)>(b$|0)&aE)){aP=4699;break}ch=((c3|0)%(b$|0)&-1)+1|0}if((aP|0)==4699){aP=0;c[bp>>2]=c3;c[bq>>2]=1;c[br>>2]=c3;c[bs>>2]=c3;break}b$=c2+8|0;c[a8>>2]=c[b$>>2];c[a8+4>>2]=c[b$+4>>2];c[a8+8>>2]=c[b$+8>>2];c[a8+12>>2]=c[b$+12>>2];c[a8+16>>2]=c[b$+16>>2];c[a8+20>>2]=c[b$+20>>2];c[a8+24>>2]=c[b$+24>>2];c[a8+28>>2]=c[b$+28>>2];c[a8+32>>2]=c[b$+32>>2];c[a8+36>>2]=c[b$+36>>2];c[a8+40>>2]=c[b$+40>>2];c[a8+44>>2]=c[b$+44>>2];c[a8+48>>2]=c[b$+48>>2];c[a8+52>>2]=c[b$+52>>2];c[bo>>2]=0;if((c[(c[3524]|0)+96>>2]&1024|0)!=0){c[bp>>2]=ch;a[bt]=0;break}if((a[bt]&1)!=0){break}c[bq>>2]=1;c[br>>2]=c[bp>>2]}}while(0);hL(aV,1);b$=c[13898]|0;if((ce|0)==(b$|0)){c4=c[aG>>2]|0;break}else{if(bR){cb=b$;aP=6076;break L5888}else{co=bU;cp=bT;cq=bS;cr=1;cs=bQ;ct=bO;cu=bN;cv=bL;break L6205}}}else{c4=c1}}while(0);aR=c[13898]|0;do{if((c4|0)==489){if(bU){c5=aR}else{c[bu>>2]=c[12406];c5=c[13898]|0}b$=c[1054]|0;aE=c[b$+(c5*40&-1)+36>>2]|0;L6289:do{if((a[b$+(c5*40&-1)|0]&1)!=0&(aE|0)>0){cF=c[10036]|0;b7=0;b4=0;bZ=c[b$+(c5*40&-1)+32>>2]|0;while(1){if((a[b7+211736|0]|0)==(a[cF+(b7+bZ|0)|0]|0)){c6=bZ;c7=b4}else{if((b7|0)!=4){c8=c5;break L6289}c6=bZ-1|0;c7=1}cd=b7+1|0;if((cd|0)<(c7+aE|0)){b7=cd;b4=c7;bZ=c6}else{break}}if((c7|0)==0){if(!((b7|0)==3|(b7|0)==5)){c8=c5;break}}c9=c5+1|0;c[13898]=c9;bZ=(c[8272]|0)>(c9|0);if(!bZ){aP=6074;break L5888}L6302:do{if((a[b$+(c9*40&-1)|0]&1)==0){aP=4722}else{b4=c[b$+(c9*40&-1)+36>>2]|0;cF=b$+(c9*40&-1)+32|0;ch=c[10036]|0;cd=0;while(1){if((cd|0)>=(b4|0)){aP=4719;break}if((a[ch+((c[cF>>2]|0)+cd|0)|0]|0)==(a[cd+150688|0]|0)){cd=cd+1|0}else{break}}do{if((aP|0)==4719){aP=0;if((cd|0)!=2){break}c[bu>>2]=0;break L6302}}while(0);if(bZ){aP=4722}else{aP=6071;break L5888}}}while(0);L6311:do{if((aP|0)==4722){aP=0;L6313:do{if((a[b$+(c9*40&-1)|0]&1)!=0){b7=c[b$+(c9*40&-1)+36>>2]|0;cd=b$+(c9*40&-1)+32|0;cF=c[10036]|0;ch=0;while(1){if((ch|0)>=(b7|0)){break}if((a[cF+((c[cd>>2]|0)+ch|0)|0]|0)==(a[ch+211336|0]|0)){ch=ch+1|0}else{break L6313}}if((ch|0)!=2){break}c[bu>>2]=1;break L6311}}while(0);if(!bZ){aP=6072;break L5888}if((a[b$+(c9*40&-1)|0]&1)==0){aP=6073;break L5888}cd=c[b$+(c9*40&-1)+36>>2]|0;cF=b$+(c9*40&-1)+32|0;b7=c[10036]|0;ca=0;while(1){if((ca|0)>=(cd|0)){break}if((a[b7+((c[cF>>2]|0)+ca|0)|0]|0)==(a[ca+210848|0]|0)){ca=ca+1|0}else{aP=6069;break L5888}}if((ca|0)!=2){aP=6070;break L5888}c[bu>>2]=2}}while(0);bZ=(c[13898]|0)+1|0;c[13898]=bZ;c8=bZ}else{c8=c5}}while(0);if((aR|0)==(c8|0)){da=c[aG>>2]|0;break}else{if(bU){cb=c8;aP=6079;break L5888}else{co=1;cp=bT;cq=bS;cr=bR;cs=bQ;ct=bO;cu=bN;cv=bL;break L6205}}}else{da=c4}}while(0);do{if((da|0)==368){b$=c[bv>>2]|0;if((b$|0)==0){uE(E|0,0,28);aE=ut(192)|0;if((aE|0)==0){gk();ce=ut(192)|0;if((ce|0)==0){aP=4744;break L5888}else{dd=ce}}else{dd=aE}c[dd>>2]=0;c[dd+4>>2]=-1;c[dd+72>>2]=0;c[dd+88>>2]=0;uE(dd+8|0,0,60);c[dd+96>>2]=1;c[dd+144>>2]=4;c[dd+148>>2]=4;c[dd+152>>2]=4;aE=dd+156|0;c[aE>>2]=c[E>>2];c[aE+4>>2]=c[E+4>>2];c[aE+8>>2]=c[E+8>>2];c[aE+12>>2]=c[E+12>>2];c[aE+16>>2]=c[E+16>>2];c[aE+20>>2]=c[E+20>>2];c[aE+24>>2]=c[E+24>>2];a[dd+184|0]=0;c[bv>>2]=dd;c[dd+48>>2]=1;c[(c[bv>>2]|0)+56>>2]=99;de=c[bv>>2]|0}else{de=b$}jw(de);b$=c[13898]|0;if((aR|0)==(b$|0)){break}if(bT){cb=b$;aP=6080;break L5888}else{co=bU;cp=1;cq=bS;cr=bR;cs=bQ;ct=bO;cu=bN;cv=bL;break L6205}}else{uE(O|0,0,56);h[U>>3]=1.0;h[V>>3]=-2.0;c[Q>>2]=aw;c[W>>2]=av;do{if((a[30080]&1)==0){b$=c[8798]|0;aE=(b$|0)>0;ce=bn;L6346:while(1){bZ=43264;while(1){df=c[bZ>>2]|0;if((df|0)==0){break}if((c[df+4>>2]|0)==(ce|0)){break L6346}else{bZ=df|0}}dg=ce-1|0;if(!((ce|0)>(b$|0)&aE)){aP=4774;break}ce=((dg|0)%(b$|0)&-1)+1|0}if((aP|0)==4774){aP=0;c[Q>>2]=dg;c[Y>>2]=1;c[$>>2]=dg;c[W>>2]=dg;break}b$=df+8|0;c[O>>2]=c[b$>>2];c[O+4>>2]=c[b$+4>>2];c[O+8>>2]=c[b$+8>>2];c[O+12>>2]=c[b$+12>>2];c[O+16>>2]=c[b$+16>>2];c[O+20>>2]=c[b$+20>>2];c[O+24>>2]=c[b$+24>>2];c[O+28>>2]=c[b$+28>>2];c[O+32>>2]=c[b$+32>>2];c[O+36>>2]=c[b$+36>>2];c[O+40>>2]=c[b$+40>>2];c[O+44>>2]=c[b$+44>>2];c[O+48>>2]=c[b$+48>>2];c[O+52>>2]=c[b$+52>>2];c[X>>2]=0;if((c[(c[3524]|0)+96>>2]&1024|0)!=0){c[Q>>2]=ce;a[aa]=0;break}if((a[aa]&1)!=0){break}c[Y>>2]=1;c[$>>2]=c[Q>>2]}else{b$=43280;while(1){dh=c[b$>>2]|0;if((dh|0)==0){break}if((c[dh+4>>2]|0)==(bn|0)){aP=4751;break}else{b$=dh|0}}if((aP|0)==4751){aP=0;b$=dh+8|0;c[O>>2]=c[b$>>2];c[O+4>>2]=c[b$+4>>2];c[O+8>>2]=c[b$+8>>2];c[O+12>>2]=c[b$+12>>2];c[O+16>>2]=c[b$+16>>2];c[O+20>>2]=c[b$+20>>2];c[O+24>>2]=c[b$+24>>2];c[O+28>>2]=c[b$+28>>2];c[O+32>>2]=c[b$+32>>2];c[O+36>>2]=c[b$+36>>2];c[O+40>>2]=c[b$+40>>2];c[O+44>>2]=c[b$+44>>2];c[O+48>>2]=c[b$+48>>2];c[O+52>>2]=c[b$+52>>2];c[X>>2]=0;if((a[aa]&1)!=0){break}c[Y>>2]=1;c[$>>2]=c[Q>>2];break}b$=c[8798]|0;ce=(b$|0)>0;aE=bn;L6367:while(1){bZ=43264;while(1){di=c[bZ>>2]|0;if((di|0)==0){break}if((c[di+4>>2]|0)==(aE|0)){break L6367}else{bZ=di|0}}dj=aE-1|0;if(!((aE|0)>(b$|0)&ce)){aP=4763;break}aE=((dj|0)%(b$|0)&-1)+1|0}if((aP|0)==4763){aP=0;c[Q>>2]=dj;c[Y>>2]=1;c[$>>2]=dj;c[W>>2]=dj;break}b$=di+8|0;c[O>>2]=c[b$>>2];c[O+4>>2]=c[b$+4>>2];c[O+8>>2]=c[b$+8>>2];c[O+12>>2]=c[b$+12>>2];c[O+16>>2]=c[b$+16>>2];c[O+20>>2]=c[b$+20>>2];c[O+24>>2]=c[b$+24>>2];c[O+28>>2]=c[b$+28>>2];c[O+32>>2]=c[b$+32>>2];c[O+36>>2]=c[b$+36>>2];c[O+40>>2]=c[b$+40>>2];c[O+44>>2]=c[b$+44>>2];c[O+48>>2]=c[b$+48>>2];c[O+52>>2]=c[b$+52>>2];c[X>>2]=0;if((c[(c[3524]|0)+96>>2]&1024|0)!=0){c[Q>>2]=aE;a[aa]=0;break}if((a[aa]&1)!=0){break}c[Y>>2]=1;c[$>>2]=c[Q>>2]}}while(0);b$=c[aG>>2]|0;if((b$|0)==474){c[W>>2]=c[14067];dk=c[aG>>2]|0}else{dk=b$}b$=(dk&2|0)!=0;hH(q,1,b$);b$=c[13898]|0;if((aR|0)==(b$|0)){break}if(bR){cb=b$;aP=6083;break L5888}c[bB>>2]=c[O>>2];c[bB+4>>2]=c[O+4>>2];c[bB+8>>2]=c[O+8>>2];c[bB+12>>2]=c[O+12>>2];c[bB+16>>2]=c[O+16>>2];c[bB+20>>2]=c[O+20>>2];c[bB+24>>2]=c[O+24>>2];c[bB+28>>2]=c[O+28>>2];c[bB+32>>2]=c[O+32>>2];c[bB+36>>2]=c[O+36>>2];c[bB+40>>2]=c[O+40>>2];c[bB+44>>2]=c[O+44>>2];c[bB+48>>2]=c[O+48>>2];c[bB+52>>2]=c[O+52>>2];co=bU;cp=bT;cq=bS;cr=1;cs=bQ;ct=bO;cu=bN;cv=bL;break L6205}}while(0);if((c[aG>>2]&8|0)==0){b1=bS;b2=bR;b3=bO;break L5954}b$=c[1054]|0;ce=a[b$+(aR*40&-1)|0]|0;L6389:do{if((c[8272]|0)>(aR|0)){if((ce&1)==0){aP=4787;break}bZ=c[b$+(aR*40&-1)+36>>2]|0;ca=b$+(aR*40&-1)+32|0;cF=c[10036]|0;b7=0;while(1){if((b7|0)>=(bZ|0)){break}if((a[cF+((c[ca>>2]|0)+b7|0)|0]|0)==(a[b7+116360|0]|0)){b7=b7+1|0}else{aP=4787;break L6389}}if((b7|0)==2){aP=4795}else{aP=4787}}else{aP=4787}}while(0);L6396:do{if((aP|0)==4787){aP=0;ca=c[b$+(aR*40&-1)+36>>2]|0;if(!((ce&1)!=0&(ca|0)>0)){dl=bS;break}cF=c[10036]|0;bZ=0;cd=0;b4=c[b$+(aR*40&-1)+32>>2]|0;while(1){if((a[bZ+121984|0]|0)==(a[cF+(bZ+b4|0)|0]|0)){dm=b4;dn=cd}else{if((bZ|0)!=4){dl=bS;break L6396}dm=b4-1|0;dn=1}cg=bZ+1|0;if((cg|0)<(dn+ca|0)){bZ=cg;cd=dn;b4=dm}else{break}}if((dn|0)!=0){aP=4795;break}if((bZ|0)==3|(bZ|0)==9){aP=4795}else{dl=bS}}}while(0);do{if((aP|0)==4795){aP=0;hJ(by,c[12372]|0,c[12373]|0,at,49504);if((c[aG>>2]|0)!=345){dl=1;break}if((c[bz>>2]|0)!=0){dl=1;break}c[bz>>2]=1;dl=1}}while(0);b$=c[13898]|0;ce=c[1054]|0;b4=a[ce+(b$*40&-1)|0]|0;L6412:do{if((c[8272]|0)>(b$|0)){if((b4&1)==0){aP=4804;break}cd=c[ce+(b$*40&-1)+36>>2]|0;ca=ce+(b$*40&-1)+32|0;cF=c[10036]|0;b7=0;while(1){if((b7|0)>=(cd|0)){break}if((a[cF+((c[ca>>2]|0)+b7|0)|0]|0)==(a[b7+179168|0]|0)){b7=b7+1|0}else{aP=4804;break L6412}}if((b7|0)==2){aP=4812}else{aP=4804}}else{aP=4804}}while(0);L6419:do{if((aP|0)==4804){aP=0;ca=c[ce+(b$*40&-1)+36>>2]|0;if(!((b4&1)!=0&(ca|0)>0)){dq=bR;dr=b$;break}cF=c[10036]|0;cd=0;bZ=0;cg=c[ce+(b$*40&-1)+32>>2]|0;while(1){if((a[cd+178592|0]|0)==(a[cF+(cd+cg|0)|0]|0)){ds=cg;dt=bZ}else{if((cd|0)!=5){dq=bR;dr=b$;break L6419}ds=cg-1|0;dt=1}b6=cd+1|0;if((b6|0)<(dt+ca|0)){cd=b6;bZ=dt;cg=ds}else{break}}if((dt|0)!=0){aP=4812;break}if((cd|0)==4|(cd|0)==9){aP=4812}else{dq=bR;dr=b$}}}while(0);if((aP|0)==4812){aP=0;hH(r,0,0);c[bw>>2]=c[N>>2];c[bw+4>>2]=c[N+4>>2];c[bw+8>>2]=c[N+8>>2];c[bw+12>>2]=c[N+12>>2];a[bx]=1;dq=1;dr=c[13898]|0}if((aR|0)==(dr|0)){b1=dl;b2=dq;b3=bO;break L5954}else{co=bU;cp=bT;cq=dl;cr=dq;cs=bQ;ct=bO;cu=bN;cv=bL}}}while(0);bY=c[13898]|0;bX=c[8272]|0;if((bY|0)<(bX|0)){bL=cv;bN=cu;bO=ct;bQ=cs;bR=cr;bS=cq;bT=cp;bU=co;bV=bY;bW=bX}else{b1=cq;b2=cr;b3=ct;break}}bW=bb+21|0;a[bW]=0;if(b3){du=as;dv=b2;dw=b1}else{dx=b2;dy=b1;dz=bW;aP=4816}}else{bW=bb+21|0;a[bW]=0;dx=0;dy=0;dz=bW;aP=4816}do{if((aP|0)==4816){aP=0;a[bb+20|0]=1;if((c[9056]|0)!=1){if((as|0)==0){du=0;dv=dx;dw=dy;break}a[as]=0;du=as;dv=dx;dw=dy;break}bW=bb+16|0;bU=c[1054]|0;bT=(c[bU+(be*40&-1)+36>>2]|0)+(c[bU+(be*40&-1)+32>>2]|0)|0;bS=db(c[bW>>2]|0,(bT+1|0)-(c[bU+(aQ*40&-1)+32>>2]|0)|0,116456)|0;c[bW>>2]=bS;bU=c[(c[1054]|0)+(aQ*40&-1)+32>>2]|0;L6441:do{if((bU|0)<(bT|0)){bR=bU;bQ=bS;while(1){bO=a[(c[10036]|0)+bR|0]|0;if(bO<<24>>24==0){dA=bQ;break L6441}bN=bQ+1|0;a[bQ]=bO;bO=bR+1|0;if((bO|0)<(bT|0)){bR=bO;bQ=bN}else{dA=bN;break}}}else{dA=bS}}while(0);a[dA]=0;if(bd){dB=c[bW>>2]|0}else{dB=as}a[dz]=1;du=dB;dv=dx;dw=dy}}while(0);bS=bb+12|0;bT=c[bS>>2]|0;do{if((bT|0)==225){if(dv){dC=bb+88|0}else{bU=bb+80|0;bQ=bb+88|0;bR=aw+1|0;do{if((a[30080]&1)==0){aR=bQ|0;bN=c[aR>>2]|0;bO=c[8798]|0;bL=(bO|0)>0;bx=bR;L6458:while(1){bw=43264;while(1){dD=c[bw>>2]|0;if((dD|0)==0){break}if((c[dD+4>>2]|0)==(bx|0)){break L6458}else{bw=dD|0}}dE=bx-1|0;if(!((bx|0)>(bO|0)&bL)){aP=4840;break}bx=((dE|0)%(bO|0)&-1)+1|0}if((aP|0)==4840){aP=0;c[bb+92>>2]=dE;c[bb+128>>2]=1;c[bb+132>>2]=dE;c[bb+96>>2]=dE;break}bO=bQ;bL=dD+8|0;c[bO>>2]=c[bL>>2];c[bO+4>>2]=c[bL+4>>2];c[bO+8>>2]=c[bL+8>>2];c[bO+12>>2]=c[bL+12>>2];c[bO+16>>2]=c[bL+16>>2];c[bO+20>>2]=c[bL+20>>2];c[bO+24>>2]=c[bL+24>>2];c[bO+28>>2]=c[bL+28>>2];c[bO+32>>2]=c[bL+32>>2];c[bO+36>>2]=c[bL+36>>2];c[bO+40>>2]=c[bL+40>>2];c[bO+44>>2]=c[bL+44>>2];c[bO+48>>2]=c[bL+48>>2];c[bO+52>>2]=c[bL+52>>2];c[aR>>2]=bN;if((c[(c[3524]|0)+96>>2]&1024|0)!=0){c[bb+92>>2]=bx;a[bb+120|0]=0;break}if((a[bb+120|0]&1)!=0){break}c[bb+128>>2]=1;c[bb+132>>2]=c[bb+92>>2]}else{lK(bQ,bR)}}while(0);hL(bU,1);dC=bQ}bR=bb+24|0;bW=dC;c[bR>>2]=c[bW>>2];c[bR+4>>2]=c[bW+4>>2];c[bR+8>>2]=c[bW+8>>2];c[bR+12>>2]=c[bW+12>>2];c[bR+16>>2]=c[bW+16>>2];c[bR+20>>2]=c[bW+20>>2];c[bR+24>>2]=c[bW+24>>2];c[bR+28>>2]=c[bW+28>>2];c[bR+32>>2]=c[bW+32>>2];c[bR+36>>2]=c[bW+36>>2];c[bR+40>>2]=c[bW+40>>2];c[bR+44>>2]=c[bW+44>>2];c[bR+48>>2]=c[bW+48>>2];c[bR+52>>2]=c[bW+52>>2];dF=1}else{if(dv){dF=1;break}bW=bb+24|0;bR=bb+28|0;c[bR>>2]=aw;h[bb+40>>3]=1.0;bL=bb+32|0;c[bL>>2]=av;h[bb+48>>3]=+h[3817];bO=bb+56|0;a[bO]=0;bw=aw+1|0;do{if((a[30080]&1)==0){cd=bW|0;bz=c[cd>>2]|0;aG=c[8798]|0;by=(aG|0)>0;bB=bw;L6479:while(1){bn=43264;while(1){dG=c[bn>>2]|0;if((dG|0)==0){break}if((c[dG+4>>2]|0)==(bB|0)){break L6479}else{bn=dG|0}}dH=bB-1|0;if(!((bB|0)>(aG|0)&by)){aP=4856;break}bB=((dH|0)%(aG|0)&-1)+1|0}if((aP|0)==4856){aP=0;c[bR>>2]=dH;c[bb+64>>2]=1;c[bb+68>>2]=dH;c[bL>>2]=dH;dI=bT;break}aG=bW;by=dG+8|0;c[aG>>2]=c[by>>2];c[aG+4>>2]=c[by+4>>2];c[aG+8>>2]=c[by+8>>2];c[aG+12>>2]=c[by+12>>2];c[aG+16>>2]=c[by+16>>2];c[aG+20>>2]=c[by+20>>2];c[aG+24>>2]=c[by+24>>2];c[aG+28>>2]=c[by+28>>2];c[aG+32>>2]=c[by+32>>2];c[aG+36>>2]=c[by+36>>2];c[aG+40>>2]=c[by+40>>2];c[aG+44>>2]=c[by+44>>2];c[aG+48>>2]=c[by+48>>2];c[aG+52>>2]=c[by+52>>2];c[cd>>2]=bz;if((c[(c[3524]|0)+96>>2]&1024|0)!=0){c[bR>>2]=bB;a[bO]=0;dI=bT;break}if((a[bO]&1)!=0){dI=bT;break}c[bb+64>>2]=1;c[bb+68>>2]=c[bR>>2];dI=bT}else{lK(bW,bw);dI=c[bS>>2]|0}}while(0);if((dI|0)==474){c[bL>>2]=c[14067]}bw=(dI&2|0)!=0;hH(bW,1,bw);dF=0}}while(0);bT=c[bS>>2]|0;bw=(bT&2|0)==0;if(!bw){c[bb+24>>2]=1}bR=bb+8|0;do{if(!((c[bR>>2]|0)!=0|bw)){bO=bb+48|0;if(+h[bO>>3]!=-3.0){break}h[bO>>3]=1.0}}while(0);if((a[30528]&1)!=0){if(!((bT|0)==1|(bT|0)==18|(bT|0)==33|(bT|0)==51|(bT|0)==64|(bT|0)==225|(bT|0)==345|(bT|0)==368|(bT|0)==457|(bT|0)==102|(bT|0)==295)){aP=4867;break L5888}}do{if((bT&8|0)==0){dJ=at;dK=bT}else{if(!dw){hJ(bb+192|0,c[12372]|0,c[12373]|0,at,49504)}bw=bb+192|0;bO=c[bw>>2]|0;if((bO|0)==2|(bO|0)==5){dL=(c[bb+200>>2]|0)+1|0}else{dL=at}bQ=c[bS>>2]|0;if((bQ|0)!=345){dJ=dL;dK=bQ;break}if((bO|0)!=0){dJ=dL;dK=345;break}c[bw>>2]=1;dJ=dL;dK=345}}while(0);bT=bb+304|0;c[bT>>2]=c[200];bw=bb+308|0;c[bw>>2]=c[144];if((dK|0)==368){bO=bb+224|0;bQ=c[bO>>2]|0;if((bQ|0)==0){uE(E|0,0,28);bU=ut(192)|0;if((bU|0)==0){gk();by=ut(192)|0;if((by|0)==0){aP=4880;break L5888}else{dM=by}}else{dM=bU}c[dM>>2]=0;c[dM+4>>2]=-1;c[dM+72>>2]=0;c[dM+88>>2]=0;uE(dM+8|0,0,60);c[dM+96>>2]=1;c[dM+144>>2]=4;c[dM+148>>2]=4;c[dM+152>>2]=4;bU=dM+156|0;c[bU>>2]=c[E>>2];c[bU+4>>2]=c[E+4>>2];c[bU+8>>2]=c[E+8>>2];c[bU+12>>2]=c[E+12>>2];c[bU+16>>2]=c[E+16>>2];c[bU+20>>2]=c[E+20>>2];c[bU+24>>2]=c[E+24>>2];a[dM+184|0]=0;c[bO>>2]=dM;c[dM+48>>2]=1;c[(c[bO>>2]|0)+56>>2]=99;dN=c[bO>>2]|0}else{dN=bQ}c[dN+8>>2]=(c[200]|0)==6&1;c[(c[bO>>2]|0)+12>>2]=(c[144]|0)==5&1;bQ=bb+64|0;bU=c[bO>>2]|0;bO=bQ;by=bU+72|0;c[bO>>2]=c[by>>2];c[bO+4>>2]=c[by+4>>2];c[bO+8>>2]=c[by+8>>2];c[bO+12>>2]=c[by+12>>2];by=bU+72|0;if((c[by>>2]|0)==7){c[bb+28>>2]=-6}do{if((c[bU+88>>2]|0)>0){aG=c[by>>2]|0;if((aG|0)==3){if(+h[bU+80>>3]<0.0){break}}else if((aG|0)==6|(aG|0)==7){break}aG=bU+128|0;bx=c[aG>>2]|0;do{if((bx|0)==3){if(+h[bU+136>>3]>=0.0){break}bN=aG;c[bO>>2]=c[bN>>2];c[bO+4>>2]=c[bN+4>>2];c[bO+8>>2]=c[bN+8>>2];c[bO+12>>2]=c[bN+12>>2];dO=c[bU+128>>2]|0;aP=4890}else{dO=bx;aP=4890}}while(0);do{if((aP|0)==4890){aP=0;if((dO|0)!=6){break}c[bQ>>2]=6}}while(0);if((c[bU+92>>2]|0)!=-6){break}c[bb+28>>2]=-6}}while(0);dP=c[bS>>2]|0}else{dP=dK}do{if((dP|0)==474){bU=bb+224|0;if((c[bU>>2]|0)!=0){dQ=474;dR=ap;break}uE(E|0,0,28);bQ=ut(192)|0;if((bQ|0)==0){gk();bO=ut(192)|0;if((bO|0)==0){aP=4899;break L5888}else{dS=bO}}else{dS=bQ}c[dS>>2]=0;c[dS+4>>2]=-1;c[dS+72>>2]=0;c[dS+88>>2]=0;uE(dS+8|0,0,60);c[dS+96>>2]=1;c[dS+144>>2]=4;c[dS+148>>2]=4;c[dS+152>>2]=4;bQ=dS+156|0;c[bQ>>2]=c[E>>2];c[bQ+4>>2]=c[E+4>>2];c[bQ+8>>2]=c[E+8>>2];c[bQ+12>>2]=c[E+12>>2];c[bQ+16>>2]=c[E+16>>2];c[bQ+20>>2]=c[E+20>>2];c[bQ+24>>2]=c[E+24>>2];a[dS+184|0]=0;c[bU>>2]=dS;dU=c[bS>>2]|0;aP=4901}else{dU=dP;aP=4901}}while(0);do{if((aP|0)==4901){aP=0;if((dU|0)==392){if((a[64788+((c[200]|0)*688&-1)|0]&1)!=0){aP=4903;break L5888}if(((c[9670]|0)-1|0)>>>0<2){if((a[64788+((c[144]|0)*688&-1)|0]&1)!=0){aP=4906;break L5888}}bU=ap+1|0;bQ=bb+280|0;c[bQ>>2]=bU;if((bU|0)==0){bO=ut(248)|0;if((bO|0)==0){gk();by=ut(248)|0;if((by|0)==0){aP=4910;break L5888}else{dV=by}}else{dV=bO}bO=dV;by=bb+276|0;c[by>>2]=bO;bx=c[9666]|0;aG=c[3568]|0;if((aG|0)!=0){uu(aG)}c[3568]=0;c[dV>>2]=c[9670];c[dV+4>>2]=c[9671];c[dV+8>>2]=c[9672];c[dV+12>>2]=c[9673];c[dV+16>>2]=c[9674];c[dV+20>>2]=c[9675];c[dV+24>>2]=c[9676];c[dV+28>>2]=c[9677];c[dV+32>>2]=c[9678];c[dV+36>>2]=c[9679];c[dV+40>>2]=c[9680];c[dV+44>>2]=c[9681];c[dV+48>>2]=c[9682];c[dV+52>>2]=c[9683];uE(dV+56|0,0,192);c[9682]=bO;c[dV+116>>2]=bx;c[9666]=0;h[(c[by>>2]|0)+16>>3]=aq;c[(c[by>>2]|0)+32>>2]=ao;c[(c[by>>2]|0)+36>>2]=an}else{by=c[9682]|0;c[bb+276>>2]=by;bx=by+8|0;c[bx>>2]=(c[bx>>2]|0)+1}bx=c[bb+276>>2]|0;do{if(!dF){by=c[bx+32>>2]|0;if((by|0)==-5){break}bO=bb+24|0;aG=bO|0;bW=c[aG>>2]|0;bL=c[8798]|0;bN=(bL|0)>0;aR=(c[bQ>>2]|0)+by|0;L6573:while(1){by=43264;while(1){dW=c[by>>2]|0;if((dW|0)==0){break}if((c[dW+4>>2]|0)==(aR|0)){break L6573}else{by=dW|0}}dX=aR-1|0;if(!((aR|0)>(bL|0)&bN)){aP=4928;break}aR=((dX|0)%(bL|0)&-1)+1|0}if((aP|0)==4928){aP=0;c[bb+28>>2]=dX;c[bb+64>>2]=1;c[bb+68>>2]=dX;c[bb+32>>2]=dX;break}bL=bO;bN=dW+8|0;c[bL>>2]=c[bN>>2];c[bL+4>>2]=c[bN+4>>2];c[bL+8>>2]=c[bN+8>>2];c[bL+12>>2]=c[bN+12>>2];c[bL+16>>2]=c[bN+16>>2];c[bL+20>>2]=c[bN+20>>2];c[bL+24>>2]=c[bN+24>>2];c[bL+28>>2]=c[bN+28>>2];c[bL+32>>2]=c[bN+32>>2];c[bL+36>>2]=c[bN+36>>2];c[bL+40>>2]=c[bN+40>>2];c[bL+44>>2]=c[bN+44>>2];c[bL+48>>2]=c[bN+48>>2];c[bL+52>>2]=c[bN+52>>2];c[aG>>2]=bW;if((c[(c[3524]|0)+96>>2]&1024|0)!=0){c[bb+28>>2]=aR;a[bb+56|0]=0;break}if((a[bb+56|0]&1)!=0){break}c[bb+64>>2]=1;c[bb+68>>2]=c[bb+28>>2]}}while(0);bN=c[bx+36>>2]|0;if((bN|0)!=-5){c[bb+200>>2]=(c[bQ>>2]|0)+bN}dY=bU;dZ=c[bS>>2]|0}else{dY=ap;dZ=dU}if((dZ|0)!=400){dQ=dZ;dR=dY;break}a[bb+56|0]=1;dQ=400;dR=dY}}while(0);do{if((c[bR>>2]|0)==1){if((bf|0)<0){c[bR>>2]=4;d_=aw+1|0;d$=(dQ>>>1&1)+av|0;break}bN=c[200]|0;bL=o+(bN<<2)|0;bB=c[bL>>2]|0;do{if((bB&1|0)==0){bz=c[64648+(bN*688&-1)>>2]|0;if((bz|0)==0){break}if((bz&1|0)!=0){h[64664+(bN*688&-1)>>3]=8.988465674311579e+307}if((bz&2|0)==0){break}h[64672+(bN*688&-1)>>3]=-8.988465674311579e+307}}while(0);if((c[64808+(bN*688&-1)>>2]|0)==1&(bf|0)<2){aP=4944;break L5888}bU=c[144]|0;if((c[64808+(bU*688&-1)>>2]|0)==1&(bf|0)<1){aP=4946;break L5888}c[12210]=bN;c[12211]=bU;c[bL>>2]=bB|1;bQ=o+(bU<<2)|0;c[bQ>>2]=c[bQ>>2]|1;aP=4950}else{if(!((a[32936]&1)==0|bd^1)){aP=4950;break}bQ=o+(c[200]<<2)|0;c[bQ>>2]=c[bQ>>2]|2;bQ=o+(c[144]<<2)|0;c[bQ>>2]=c[bQ>>2]|2;aP=4950}}while(0);do{if((aP|0)==4950){aP=0;do{if(bd){d0=aw;d1=av}else{bQ=c[bS>>2]|0;if((bQ|0)==400|(bQ|0)==416|(bQ|0)==432){d0=aw;d1=av;break}d0=aw+1|0;d1=(bQ>>>1&1)+av|0}}while(0);if((c[bR>>2]|0)!=1){d_=d0;d$=d1;break}d2=bb+4|0;bB=c[d2>>2]|0;bL=bb+316|0;do{if((c[bL>>2]|0)==0){bN=c[bb+64>>2]|0;do{if((bN|0)==3){if(+h[bb+72>>3]>=0.0){d3=0;break}d3=1}else{d3=0}}while(0);if(!((c[bb+284>>2]|0)==0&((c[bb+28>>2]|0)==-6|((bN|0)==6|d3)))){break}aR=c[bb+296>>2]<<3;bW=ut(aR)|0;if((bW|0)==0){gk();aG=ut(aR)|0;if((aG|0)==0){aP=4961;break L5888}else{d4=aG}}else{d4=bW}c[bL>>2]=d4}}while(0);bW=bb+312|0;c[bW>>2]=99;aG=c[11870]|0;if((aG|0)==1){c[12210]=c[12211]}aR=c[bS>>2]|0;do{if((aR|0)==311|(aR|0)==118|(aR|0)==137){if((aG|0)<=5){d5=4;d6=7;break}bO=c[12210]|0;c[12213]=bO;c[12212]=bO;bO=c[12211]|0;c[12215]=bO;c[12214]=bO;d5=4;d6=7}else if((aR|0)==257){c[bW>>2]=c[bw>>2];bO=c[12211]|0;c[12214]=bO;c[12213]=bO;c[12212]=bO;d5=5;d6=6}else if((aR|0)==474){c[272]=1;bO=c[273]|0;if((bO|0)==0){d5=2;d6=4;break}if((c[bO>>2]|0)!=2){d5=2;d6=4;break}bQ=bO+40|0;if((c[bQ>>2]|0)!=42){d5=2;d6=4;break}c[bQ>>2]=43;d5=2;d6=4}else if((aR|0)==252){c[bW>>2]=c[bw>>2];bQ=c[12211]|0;c[12214]=bQ;c[12213]=bQ;c[12212]=bQ;d5=5;d6=7}else if((aR|0)==169){if(!((aG|0)==4&+h[7030]==-2.0|(aG|0)>4)){d5=3;d6=6;break}bQ=c[12211]|0;c[12213]=bQ;c[12212]=bQ;d5=3;d6=6}else if((aR|0)==279|(aR|0)==86){if((aG|0)<=3){d5=3;d6=5;break}bQ=c[12210]|0;c[12213]=bQ;c[12212]=bQ;d5=3;d6=5}else if((aR|0)==295|(aR|0)==102){if((aG|0)<=3){d5=2;d6=5;break}bQ=c[12211]|0;c[12213]=bQ;c[12212]=bQ;d5=2;d6=5}else if((aR|0)==392){d5=1;d6=3}else if((aR|0)==153){d5=1;d6=4}else if((aR|0)==345){c[12212]=c[12211];d5=1;d6=3}else if((aR|0)==33|(aR|0)==1|(aR|0)==64){d5=1;d6=3}else if((aR|0)==368){c[269]=1;bQ=c[270]|0;if((bQ|0)==0){d5=3;d6=4;break}if((c[bQ>>2]|0)!=2){d5=3;d6=4;break}bO=bQ+40|0;if((c[bO>>2]|0)!=42){d5=3;d6=4;break}c[bO>>2]=43;d5=3;d6=4}else if((aR|0)==400){d5=3;d6=3}else if((aR|0)==416){d5=5;d6=6}else if((aR|0)==432){d5=6;d6=6}else if((aR|0)==457){d5=2;d6=6}else if((aR|0)==489){d5=2;d6=6}else if((aR|0)==18|(aR|0)==51){d5=1;d6=4}else if((aR|0)==225){d5=4;d6=5}else{d5=1;d6=2}}while(0);aR=bb+284|0;if((c[aR>>2]|0)==1){c[bW>>2]=0;c[12212]=0;d7=3}else{d7=d6}aG=c[11870]|0;if((aG|0)>(d7|0)){aP=4998;break L5888}if((aG|0)>0&(aG|0)<(d5|0)){aP=5e3;break L5888}aG=c[8270]|0;do{if((aG|0)!=0){if((aY(aG|0,139696)|0)==0){break}bA(4,aG|0)}}while(0);a[47040]=1;aG=eC(F,d7)|0;do{if((aG|0)==-1){d8=0;d9=0}else{bW=bb+296|0;bO=bb+320|0;bQ=bb+280|0;bU=bb+276|0;bx=bb+244|0;bz=bb+224|0;cd=bb+23|0;by=bb+288|0;bn=0;bv=0;bu=aG;while(1){if((bv|0)>=(c[bW>>2]|0)){iR(bb,(bv<<1)+1e3|0)}do{if((bu|0)>0){aV=bn+1|0;bp=c[bL>>2]|0;if((bp|0)==0){ea=bu;eb=aV;break}br=c[bS>>2]|0;if((br|0)==252|(br|0)==257){if((bu|0)<6){aP=5012;break L5888}}else if((br|0)==311|(br|0)==118|(br|0)==137){if(!((bu|0)==7|(bu|0)==5)){aP=5014;break L5888}}else if((br|0)==225){if((bu|0)<5){aP=5016;break L5888}}else if((br|0)==368|(br|0)==169|(br|0)==279|(br|0)==86|(br|0)==295|(br|0)==102){if((bu|0)<4){aP=5018;break L5888}}else if((br|0)==457){if((bu|0)==5|(bu|0)<3){aP=5020;break L5888}}else if((br|0)==489|(br|0)==153|(br|0)==18|(br|0)==51|(br|0)==33|(br|0)==1|(br|0)==64){if((bu|0)<3){aP=5022;break L5888}}br=bu-1|0;h[bp+(bv<<3)>>3]=+h[e+(br<<3)>>3];ea=br;eb=aV}else{ea=bu;eb=bn}}while(0);do{if((ea|0)==(-5|0)){if((c[bS>>2]|0)!=392){ec=bv;break}c[(c[bO>>2]|0)+(bv<<6)>>2]=2;ec=bv+1|0}else if((ea|0)==(-4|0)|(ea|0)==(-9|0)){ec=bv}else if((ea|0)==(-2|0)){c[(c[bO>>2]|0)+(bv<<6)>>2]=2;ec=bv+1|0}else if((ea|0)==(-3|0)){aV=c[bS>>2]|0;if((aV|0)==400|(aV|0)==416|(aV|0)==432){ec=bv;break}uD((c[bO>>2]|0)+(bv<<6)|0,56440,64);ec=bv+1|0}else if((ea|0)==(-6|0)){eL(bb);ec=bv}else if((ea|0)==(-7|0)){aI(115120,50,1,c[m>>2]|0);ec=bv}else if((ea|0)==0){aP=5034;break L5888}else if((ea|0)==1){h[G>>3]=+h[F>>3];h[F>>3]=+(c[11942]|0);aP=5036}else if((ea|0)==2){aP=5036}else if((ea|0)==3){if((c[aR>>2]|0)==1){ed=+h[F>>3];ee=+h[G>>3];iX(bb,bv,ed,ee,ed,ed,ee,ee,+h[H>>3]);ec=bv+1|0;break}aV=c[bS>>2]|0;if((aV|0)==392){if((c[9670]|0)==4){aP=5036;break}else{aP=5068}}else if((aV|0)==295|(aV|0)==102|(aV|0)==169){ee=+h[F>>3];ed=+h[G>>3];ef=+h[H>>3];iX(bb,bv,ee,ed,ee,ee,ed-ef,ed+ef,-1.0);ec=bv+1|0;break}else if((aV|0)==279|(aV|0)==86){ef=+h[F>>3];ed=+h[G>>3];ee=+h[H>>3];iX(bb,bv,ef,ed,ef-ee,ef+ee,ed,ed,0.0);ec=bv+1|0;break}else if((aV|0)==153){ed=+h[F>>3];ee=+h[G>>3];ef=+h[H>>3]*.5;iX(bb,bv,ed,ee,ed-ef,ed+ef,ee,ee,0.0);ec=bv+1|0;break}else if((aV|0)==368){ee=+h[F>>3];ef=+h[G>>3];iX(bb,bv,ee,ef,ee,ee,ef,ef,-1.0);br=(c[bO>>2]|0)+(bv<<6)|0;if((c[br>>2]|0)!=2){bp=c[bL>>2]|0;if((bp|0)==0){eg=0.0}else{eg=+h[bp+(bv<<3)>>3]}iW(c[bz>>2]|0,br,bv,c[11766]|0,eg)}ec=bv+1|0;break}else if((aV|0)==400){ef=+h[F>>3];ee=+h[G>>3];iX(bb,bv,ef,ee,ef,ef,ee,ee,+h[H>>3]);br=c[bO>>2]|0;bp=c[br+(bv<<6)>>2]|0;ee=+h[H>>3];L6717:do{if(ee>-8.988465674311579e+307&ee<8.988465674311579e+307){do{if((a[66852]&1)==0){h[br+(bv<<6)+32>>3]=ee}else{if(ee<0.0){h[br+(bv<<6)+32>>3]=ee;break L6717}if(ee==0.0){h[br+(bv<<6)+32>>3]=-8.988465674311579e+307;break L6717}else{ef=+_(+ee);h[br+(bv<<6)+32>>3]=ef/+h[8358];break}}}while(0);if(!((a[cd]&1)==0&(bp|0)==0)){break}ef=+h[H>>3];if(ef<+h[8347]){h[8347]=ef}do{if(ef<+h[8341]){if((c[16678]&1|0)==0){break L6717}if((c[16698]&1|0)==0){h[8341]=ef;break}ed=+h[8350];if(ed>ef){h[8341]=ed;break L6717}else{h[8341]=ef;break}}}while(0);if(ef>+h[8348]){h[8348]=ef}if(ef<=+h[8342]){break}if((c[16678]&2|0)==0){break}if((c[16699]&2|0)==0){h[8342]=ef;break}ed=+h[8353];if(ed<ef){h[8342]=ed;break}else{h[8342]=ef;break}}else{h[br+(bv<<6)+32>>3]=ee}}while(0);ec=bv+1|0;break}else if((aV|0)==18|(aV|0)==51|(aV|0)==33|(aV|0)==1|(aV|0)==64){ee=+h[F>>3];ed=+h[G>>3];iX(bb,bv,ee,ed,ee,ee,ed,ed,+h[H>>3]);ec=bv+1|0;break}else if((aV|0)==474){ed=+h[F>>3];ee=+h[G>>3];eh=+h[H>>3];ei=eh*.5;iX(bb,bv,ed,ee,ed-ei,ed+ei,ee,ee,eh);ec=bv+1|0;break}else if((aV|0)==457){eh=+h[F>>3];ee=+h[H>>3];iX(bb,bv,eh,+h[G>>3],eh-ee,eh+ee,0.0,360.0,ee>=0.0?0.0:-1.0);ec=bv+1|0;break}else if((aV|0)==489){ee=+h[F>>3];eh=+h[G>>3];ei=+h[H>>3];ed=+P(+ei);iX(bb,bv,ee,eh,ed,ed,0.0,ei,ei>=0.0?0.0:-1.0);ec=bv+1|0;break}else if((aV|0)!=345){aP=5068}if((aP|0)==5068){aP=0;uh(bB,79800,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);c[bS>>2]=102}c[bx>>2]=13;ei=+h[F>>3];ed=+h[G>>3];iX(bb,bv,ei,ed,ei,ei,ed,+h[H>>3],-1.0);ec=bv+1|0}else if((ea|0)==4){br=c[bS>>2]|0;if((br|0)==137|(br|0)==311|(br|0)==118){ed=+h[F>>3];ei=+h[G>>3];eh=+h[H>>3];ee=+h[I>>3];iX(bb,bv,ed,ei,ed-eh,ed+eh,ei-ee,ei+ee,0.0);ec=bv+1|0;break}else if((br|0)==153){ee=+h[G>>3];iX(bb,bv,+h[F>>3],ee,+h[H>>3],+h[I>>3],ee,ee,0.0);ec=bv+1|0;break}else if((br|0)==279|(br|0)==86){ee=+h[G>>3];iX(bb,bv,+h[F>>3],ee,+h[H>>3],+h[I>>3],ee,ee,0.0);ec=bv+1|0;break}else if((br|0)==169){bp=bv+1|0;ee=+h[F>>3];ei=+h[G>>3];if(+h[7030]==-2.0){iX(bb,bv,ee,ei,ee,ee,+h[H>>3],+h[I>>3],-1.0);ec=bp;break}else{eh=+h[I>>3]*.5;ed=+h[H>>3];iX(bb,bv,ee,ei,ee-eh,ee+eh,ei-ed,ei+ed,0.0);ec=bp;break}}else if((br|0)==474){bp=bv+1|0;ed=+h[F>>3];ei=+h[G>>3];eh=+h[H>>3]*.5;ee=ed-eh;ej=ed+eh;aE=c[11767]|0;bq=c[by>>2]|0;L6774:do{if((aE|0)==0){ek=0}else{bt=c[bz>>2]|0;bo=eD(aE)|0;a8=uA(bo|0)|0;L6776:do{if((bt|0)!=0){bs=bt;while(1){a7=c[bs+60>>2]|0;if((a7|0)!=0){if((a_(bo|0,a7|0,a8|0)|0)==0){break}}a7=c[bs>>2]|0;if((a7|0)==0){break L6776}else{bs=a7}}uu(bo);ek=c[bs+4>>2]|0;break L6774}}while(0);c[by>>2]=bq+1;iW(c[bz>>2]|0,c[bO>>2]|0,bq,bo,0.0);uu(bo);ek=bq}}while(0);iX(bb,bv,ed,ei,ee,ej,+(ek|0),+h[G>>3],+h[H>>3]);ec=bp;break}else if((br|0)==225){ef=+h[F>>3];eh=+h[G>>3];iX(bb,bv,ef,eh,ef,ef+ +h[H>>3],eh,eh+ +h[I>>3],0.0);ec=bv+1|0;break}else if((br|0)==18|(br|0)==51|(br|0)==368){eh=+h[F>>3];ef=+h[G>>3];iX(bb,bv,eh,ef,eh,eh,ef,ef,+h[H>>3]);ec=bv+1|0;break}else if((br|0)==489){ef=+h[F>>3];eh=+h[G>>3];el=+h[H>>3];em=+P(+el);en=+h[I>>3];eo=+P(+en);if(el<0.0){ep=-1.0}else{ep=en>=0.0?0.0:-1.0}iX(bb,bv,ef,eh,em,eo,0.0,el,ep);ec=bv+1|0;break}else if(!((br|0)==295|(br|0)==102)){uh(bB,79024,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);c[bS>>2]=102}el=+h[F>>3];iX(bb,bv,el,+h[G>>3],el,el,+h[H>>3],+h[I>>3],-1.0);ec=bv+1|0}else if((ea|0)==5){bq=c[bS>>2]|0;if((bq|0)==257|(bq|0)==252){el=+h[F>>3];iX(bb,bv,el,+h[G>>3],el,el,+h[H>>3],+h[I>>3],+h[J>>3]);ec=bv+1|0;break}else if((bq|0)==225){el=+h[F>>3];eo=+h[G>>3];iX(bb,bv,el,eo,el,el+ +h[H>>3],eo,eo+ +h[I>>3],+h[J>>3]);ec=bv+1|0;break}else if((bq|0)==457){eo=+h[F>>3];el=+h[H>>3];iX(bb,bv,eo,+h[G>>3],eo-el,eo+el,+h[I>>3],+h[J>>3],el>=0.0?0.0:-1.0);ec=bv+1|0;break}else if((bq|0)==489){el=+h[F>>3];eo=+h[G>>3];em=+h[H>>3];eh=+P(+em);ef=+h[I>>3];en=+P(+ef);if(em<0.0){eq=-1.0}else{eq=ef>=0.0?0.0:-1.0}iX(bb,bv,el,eo,eh,en,+h[J>>3],em,eq);ec=bv+1|0;break}else if((bq|0)==416){aP=5148;break}else if((bq|0)!=169){uh(bB,78440,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);c[bS>>2]=169}em=+h[F>>3];en=+h[J>>3]*.5;iX(bb,bv,em,+h[G>>3],em-en,em+en,+h[H>>3],+h[I>>3],0.0);ec=bv+1|0}else if((ea|0)==7|(ea|0)==6){bq=c[bS>>2]|0;if((bq|0)==252){en=+h[F>>3];em=+h[K>>3];if(em>0.0){er=en-em*.5}else{er=en}iX(bb,bv,en,+h[G>>3],er,en,+h[H>>3],+h[I>>3],+h[J>>3]);ec=bv+1|0;break}else if((bq|0)==432|(bq|0)==416){aP=5148;break}else if(!((bq|0)==311|(bq|0)==118|(bq|0)==137)){uh(bB,78104,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);c[bS>>2]=118}iX(bb,bv,+h[F>>3],+h[G>>3],+h[H>>3],+h[I>>3],+h[J>>3],+h[K>>3],0.0);ec=bv+1|0}else{aP=5025;break L5888}}while(0);L6811:do{if((aP|0)==5036){aP=0;bq=c[bS>>2]|0;if((bq|0)!=392){en=+h[7030];do{if((bq|0)==153&en>0.0){if((a[56232]&1)==0){break}aE=c[bT>>2]|0;if((a[64788+(aE*688&-1)|0]&1)==0){em=+h[F>>3];eh=+h[G>>3];eo=en*.5;iX(bb,bv,em,eh,em-eo,eo+em,eh,eh,0.0);ec=bv+1|0;break L6811}else{eh=+h[64792+(aE*688&-1)>>3];em=+h[F>>3];eo=+h[G>>3];el=em*+R(+eh,+(en*-.5));iX(bb,bv,em,eo,el,em*+R(+eh,+(en*.5)),eo,eo,0.0);ec=bv+1|0;break L6811}}}while(0);if((bq|0)==457){en=+h[F>>3];iX(bb,bv,en,+h[G>>3],en,en,0.0,360.0,-1.0);ec=bv+1|0;break}else if((bq|0)==489){iX(bb,bv,+h[F>>3],+h[G>>3],0.0,0.0,0.0,0.0,-2.0);ec=bv+1|0;break}else if((bq|0)==102){en=+h[G>>3];h[H>>3]=en;ej=+h[F>>3];h[G>>3]=ej;ee=+(c[11942]|0);h[F>>3]=ee;iX(bb,bv,ee,ej,ee,ee,ej-en,en+ej,-1.0);ec=bv+1|0;break}else if((bq|0)==252|(bq|0)==257){uh(bB,81264,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);c[bS>>2]=18}ej=+h[F>>3];en=+h[G>>3];iX(bb,bv,ej,en,ej,ej,en,en,-1.0);ec=bv+1|0;break}br=c[9670]|0;if((br|0)==4){if((ea|0)==1){aP=5039;break L5888}else if((ea|0)==2){en=+h[F>>3];ej=+h[G>>3];h[I>>3]=en+ej;h[H>>3]=en-ej;es=en}else{h[I>>3]=+h[H>>3];h[H>>3]=+h[G>>3];es=+h[F>>3]}h[G>>3]=es;h[F>>3]=+(c[11942]|0)}else{if((ea|0)>1){aP=5044;break L5888}en=+h[G>>3];h[I>>3]=en;h[H>>3]=en}do{if((br|0)==2){en=+(c[bQ>>2]|0)+ +h[(c[bU>>2]|0)+16>>3];h[4834]=en;h[(c[bU>>2]|0)+24>>3]=en}else{en=+h[F>>3]+ +h[(c[bU>>2]|0)+16>>3];if(en<=+h[4834]){break}h[4834]=en;h[(c[bU>>2]|0)+24>>3]=en}}while(0);en=+h[7030];br=bv+1|0;ej=+h[F>>3];ee=+h[G>>3];if(en>0.0){ei=en*.5;iX(bb,bv,ej,ee,ej-ei,ej+ei,+h[H>>3],+h[I>>3],0.0);ec=br;break}else{iX(bb,bv,ej,ee,ej+-.5,ej+.5,+h[H>>3],+h[I>>3],0.0);ec=br;break}}else if((aP|0)==5148){aP=0;ej=+h[F>>3];ee=+h[G>>3];iX(bb,bv,ej,ee,ej,ej,ee,ee,+h[H>>3]);br=c[bO>>2]|0;h[br+(bv<<6)+40>>3]=+h[H>>3];h[br+(bv<<6)+48>>3]=+h[I>>3];h[br+(bv<<6)+56>>3]=+h[J>>3];h[br+(bv<<6)+32>>3]=+h[K>>3];ec=bv+1|0}}while(0);br=eC(F,d7)|0;if((br|0)==-1){break}else{bn=eb;bv=ec;bu=br}}if((ec|0)<=0){d8=ec;d9=eb;break}bu=ec-1|0;d8=(c[(c[bO>>2]|0)+(bu<<6)>>2]|0)==2?bu:ec;d9=eb}}while(0);bB=bb+300|0;c[bB>>2]=d8;iR(bb,d8);eL(bb);ez();bL=c[8270]|0;do{if((bL|0)!=0){if((aY(bL|0,139696)|0)==0){break}bA(4,139696)}}while(0);if((d9|0)==0){uh(-1,104952,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);c[bR>>2]=4;d_=d0;d$=d1;break}bL=c[bS>>2]|0;if((bL|0)==392){aG=c[9670]|0;L6860:do{if((aG|0)==1){if((c[64648+((c[bw>>2]|0)*688&-1)>>2]&2|0)==0){aP=5181;break}do{if((c[bb+280>>2]|0)==0){bu=c[3566]|0;if((bu|0)!=0){uu(bu)}bu=c[bB>>2]<<6;bv=ut(bu)|0;if((bv|0)==0){gk();bn=ut(bu)|0;if((bn|0)==0){aP=5164;break L5888}else{et=bn}}else{et=bv}bv=et;c[3566]=bv;c[3570]=0;if((c[bB>>2]|0)>0){eu=0}else{aP=5181;break L6860}while(1){bn=eu+1|0;uE(bv+(eu<<6)+32|0,0,16);c[3570]=bn;if((bn|0)<(c[bB>>2]|0)){eu=bn}else{ev=bn;break}}}else{bv=c[bB>>2]|0;bn=c[3570]|0;if((bv|0)<=(bn|0)){ev=bn;break}bn=db(c[3566]|0,bv<<6,91376)|0;c[3566]=bn;bv=c[3570]|0;if((bv|0)<(c[bB>>2]|0)){ew=bv}else{ev=bv;break}while(1){bv=ew+1|0;uE(bn+(ew<<6)+32|0,0,16);c[3570]=bv;if((bv|0)<(c[bB>>2]|0)){ew=bv}else{ev=bv;break}}}}while(0);if((ev|0)<=0){aP=5181;break}bO=bb+320|0;bn=0;while(1){bv=c[bO>>2]|0;do{if((c[bv+(bn<<6)>>2]|0)!=2){ee=+h[bv+(bn<<6)+16>>3];bu=c[3566]|0;if(ee<0.0){bU=bu+(bn<<6)+32|0;h[bU>>3]=ee+ +h[bU>>3];ex=+h[bu+(bn<<6)+40>>3]}else{bU=bu+(bn<<6)+40|0;ej=ee+ +h[bU>>3];h[bU>>3]=ej;ex=ej}bU=c[bw>>2]|0;bQ=64672+(bU*688&-1)|0;if(+h[bQ>>3]<ex){h[bQ>>3]=ex;eA=c[bw>>2]|0}else{eA=bU}bU=64664+(eA*688&-1)|0;ej=+h[bu+(bn<<6)+32>>3];if(+h[bU>>3]<=ej){break}h[bU>>3]=ej}}while(0);bv=bn+1|0;if((bv|0)<(ev|0)){bn=bv}else{aP=5181;break}}}else if((aG|0)==3|(aG|0)==4){aP=5181}else if((aG|0)==2){do{if((c[16507]|0)!=0){ej=+(c[bb+280>>2]|0)+(+h[(c[bb+276>>2]|0)+16>>3]+1.0);if(+h[8255]>-1.0){h[8255]=-1.0}if(+h[8256]==ej){break}h[8256]=ej}}while(0);bn=c[16335]|0;if((bn|0)==0){break}bO=c[bB>>2]|0;if((bO|0)>0){bv=c[bb+320>>2]|0;bU=0;ej=0.0;ee=0.0;while(1){do{if((c[bv+(bU<<6)>>2]|0)==2){eB=ee;eE=ej}else{ei=+h[bv+(bU<<6)+16>>3];if(ei<0.0){eB=ee;eE=ej+ei;break}else{eB=ee+ei;eE=ej;break}}}while(0);bu=bU+1|0;if((bu|0)<(bO|0)){bU=bu;ej=eE;ee=eB}else{eF=eE;eG=eB;break}}}else{eF=0.0;eG=0.0}do{if((bn&2|0)!=0){bU=64672+((c[bw>>2]|0)*688&-1)|0;if(+h[bU>>3]>=eG){break}h[bU>>3]=eG}}while(0);if((bn&1|0)==0){break}bU=64664+((c[bw>>2]|0)*688&-1)|0;if(+h[bU>>3]<=eF){break}h[bU>>3]=eF}}while(0);do{if((aP|0)==5181){aP=0;aG=c[16506]|0;if((aG|0)==0){break}do{if((aG&1|0)!=0){ee=+h[(c[bb+276>>2]|0)+16>>3]+-1.0;if(+h[8255]<=ee){break}h[8255]=ee}}while(0);if((aG&2|0)==0){break}bn=c[bb+320>>2]|0;bU=c[bB>>2]|0;while(1){eH=bU-1|0;if((c[bn+(eH<<6)>>2]|0)!=2){break}c[bB>>2]=eH;if((eH|0)==0){aP=5189;break L5888}else{bU=eH}}ee=+h[bn+(eH<<6)+8>>3]+(+h[(c[bb+276>>2]|0)+16>>3]+1.0);if(+h[8256]>=ee){break}h[8256]=ee}}while(0);eI=c[bS>>2]|0}else{eI=bL}do{if((eI|0)==153){bU=c[bB>>2]|0;aG=bU-1|0;if((aG|0)==0){break}bO=c[bT>>2]|0;bv=c[64648+(bO*688&-1)>>2]|0;do{if((bv&1|0)==0){eJ=bO;eK=bv}else{bu=c[bb+320>>2]|0;if((c[bu>>2]|0)==2){eJ=bO;eK=bv;break}if((c[bu+64>>2]|0)==2){eJ=bO;eK=bv;break}ee=+h[bu+8>>3];ej=ee-(+h[bu+72>>3]-ee)*.5;if((a[64788+(bO*688&-1)|0]&1)==0){eN=ej}else{eN=+Z(+(ej*+h[64800+(bO*688&-1)>>3]))}bu=64664+(bO*688&-1)|0;if(+h[bu>>3]<=eN){eJ=bO;eK=bv;break}h[bu>>3]=eN;bu=c[bT>>2]|0;eJ=bu;eK=c[64648+(bu*688&-1)>>2]|0}}while(0);if((eK&2|0)==0){break}bv=c[bb+320>>2]|0;if((c[bv+(aG<<6)>>2]|0)==2){break}bO=bU-2|0;if((c[bv+(bO<<6)>>2]|0)==2){break}ej=+h[bv+(aG<<6)+8>>3];ee=ej+(ej- +h[bv+(bO<<6)+8>>3])*.5;if((a[64788+(eJ*688&-1)|0]&1)==0){eO=ee}else{eO=+Z(+(ee*+h[64800+(eJ*688&-1)>>3]))}bO=64672+(eJ*688&-1)|0;if(+h[bO>>3]>=eO){break}h[bO>>3]=eO}}while(0);bL=c[bS>>2]|0;if((bL|0)==474){bO=c[bB>>2]|0;bv=bb+320|0;bn=c[bv>>2]|0;if((bO|0)>0){bu=0;bQ=bn;while(1){if((c[bQ+(bu<<6)>>2]|0)==2){h[bQ+(bu<<6)+16>>3]=8.988465674311579e+307;eP=c[bv>>2]|0}else{eP=bQ}bz=bu+1|0;if((bz|0)<(bO|0)){bu=bz;bQ=eP}else{eQ=eP;break}}}else{eQ=bn}bM(eQ|0,bO|0,64,12);bQ=c[bv>>2]|0;bu=bO;while(1){eR=bu-1|0;if((c[bQ+(eR<<6)>>2]|0)==2){bu=eR}else{break}}c[bB>>2]=bu;if((c[bQ>>2]|0)==2){aP=5236;break L5888}ee=+h[bQ+56>>3]- +h[bQ+48>>3];do{if(ee==0.0){ej=+h[7030];if(ej<=0.0){eS=.5;break}eT=(a[56232]&1)!=0?ej:.5;aP=5240}else{eT=ee;aP=5240}}while(0);do{if((aP|0)==5240){aP=0;if(eT>=0.0){eS=eT;break}eS=-0.0-eT}}while(0);bu=c[bT>>2]|0;do{if((c[64648+(bu*688&-1)>>2]&1|0)!=0){bO=64664+(bu*688&-1)|0;ee=+h[bO>>3];ej=+h[bQ+8>>3];if(ee>=ej){h[bO>>3]=ee-eS*1.5;break}if(ee<ej-eS){break}h[bO>>3]=ee-eS}}while(0);bQ=c[bT>>2]|0;do{if((c[64648+(bQ*688&-1)>>2]&2|0)!=0){bu=64672+(bQ*688&-1)|0;ee=+h[bu>>3];ej=+h[(c[bv>>2]|0)+(eR<<6)+8>>3];do{if(ee>ej){if(ee>eS+ej){break}h[bu>>3]=eS+ee}else{h[bu>>3]=eS*1.5+ee}}while(0);bu=c[bb+288>>2]|0;if((bu|0)<=1){break}aG=64672+((c[bT>>2]|0)*688&-1)|0;h[aG>>3]=+(bu-1|0)*+h[7035]+ +h[aG>>3]}}while(0);eU=c[bS>>2]|0}else{eU=bL}do{if((eU|0)==416|(eU|0)==432){bv=c[16678]|0;if((bv&1|0)!=0){h[8341]=0.0}if((bv&2|0)==0){break}h[8342]=255.0}}while(0);L6997:do{if((c[bS>>2]|0)==474){bL=bb+288|0;bv=c[bL>>2]|0;if((bv|0)<=0){break}do{if(!((a[56292]&1)==0|(bv|0)<2)){bQ=bb+224|0;aG=c[bQ>>2]|0;if((aG|0)==0){break}if((c[aG>>2]|0)==0){break}aG=bv<<2;bu=ut(aG)|0;if((bu|0)==0){gk();bU=ut(aG)|0;if((bU|0)==0){aP=5267;break L5888}else{eV=bU}}else{eV=bu}bu=eV;bU=c[bL>>2]<<2;aG=ut(bU)|0;if((aG|0)==0){gk();bO=ut(bU)|0;if((bO|0)==0){aP=5270;break L5888}else{eW=bO}}else{eW=aG}aG=eW;bO=c[bL>>2]|0;if((bO|0)>0){bU=0;bn=c[bQ>>2]|0;while(1){bz=c[bn>>2]|0;c[bu+(bU<<2)>>2]=bz;by=bU+1|0;bx=c[bL>>2]|0;if((by|0)<(bx|0)){bU=by;bn=bz}else{eX=bx;break}}}else{eX=bO}bM(eV|0,eX|0,4,22);if((c[bL>>2]|0)>0){bn=0;do{c[aG+(bn<<2)>>2]=c[(c[bu+(bn<<2)>>2]|0)+4>>2];bn=bn+1|0;}while((bn|0)<(c[bL>>2]|0))}bn=c[bu>>2]|0;c[c[bQ>>2]>>2]=bn;if(((c[bL>>2]|0)-1|0)>0){bO=bn;bU=0;while(1){bx=bU+1|0;bz=c[bu+(bx<<2)>>2]|0;c[bO>>2]=bz;if((bx|0)<((c[bL>>2]|0)-1|0)){bO=bz;bU=bx}else{eY=bz;break}}}else{eY=bn}c[eY>>2]=0;uu(eV);c[bb+292>>2]=aG}}while(0);bL=c[14072]|0;if((bL|0)==2){eZ=2}else if((bL|0)==0){break}else{eZ=(bL|0)==3?6:c[200]|0}bL=c[c[bb+224>>2]>>2]|0;if((bL|0)==0){break}bv=bb+320|0;bU=0;bO=bL;while(1){dp(eZ,c[bO+60>>2]|0,+h[(c[bv>>2]|0)+8>>3]+ +(bU|0)*+h[7035],-1);bL=c[bO>>2]|0;if((bL|0)==0){break L6997}bU=bU+1|0;bO=bL}}}while(0);bO=c[aR>>2]|0;if((bO|0)==5|(bO|0)==6|(bO|0)==7|(bO|0)==9|(bO|0)==3|(bO|0)==1|(bO|0)==4){bU=bb+320|0;bv=0;while(1){bL=c[bB>>2]|0;L7036:do{if((bv|0)<(bL|0)){bu=c[bU>>2]|0;bQ=bv;while(1){if((c[bu+(bQ<<6)>>2]|0)!=2){e_=bQ;break L7036}bz=bQ+1|0;if((bz|0)<(bL|0)){bQ=bz}else{e_=bz;break}}}else{e_=bv}}while(0);bQ=0;while(1){e$=bQ+e_|0;if((e$|0)>=(bL|0)){break}if((c[(c[bU>>2]|0)+(e$<<6)>>2]|0)==2){break}else{bQ=bQ+1|0}}if((bQ|0)<=0){break}bM((c[bU>>2]|0)+(e_<<6)|0,bQ|0,64,18);bv=e$}hn(bb);e0=c[aR>>2]|0}else{e0=bO}if((e0|0)==6|(e0|0)==7|(e0|0)==9){hk(bb)}else if((e0|0)==3|(e0|0)==1|(e0|0)==2|(e0|0)==4|(e0|0)==8){hl(bb)}bv=c[bS>>2]|0;if(!((bv|0)==400|(bv|0)==416|(bv|0)==432)){d_=d0;d$=d1;break}c[bb+228>>2]=0;f3(bb,1);d_=d0;d$=d1}}while(0);c[bb+4>>2]=c[13898];bS=bb|0;if(!bd){e1=B;e2=an;e3=ao;e5=dR;e8=aq;e9=du;fa=dJ;fb=0;fc=d$;fd=d_;fe=bc;ff=bS;fg=bb;aP=5313;break}fh=B;fi=an;fj=ao;fk=dR;fl=aq;fm=du;fn=dJ;fo=0;fp=d$;fq=d_;fr=bc;fs=bS;ft=c[13898]|0;fu=c[8272]|0;aP=5305}else if((aP|0)==4369){aP=0;c[13898]=aB+1;uu(c[9666]|0);c[9666]=0;ee=+h[4834];if(ee>0.0){fv=ee+2.0}else{fv=aq}c[af>>2]=-5;ee=fv;bS=aw+1|0;fw=c[13898]|0;while(1){L7062:do{if((c[8272]|0)>(fw|0)){bT=c[1054]|0;if((a[bT+(fw*40&-1)|0]&1)==0){fx=ee;break}bw=c[bT+(fw*40&-1)+36>>2]|0;bR=bT+(fw*40&-1)+32|0;bT=c[10036]|0;bv=0;while(1){if((bv|0)>=(bw|0)){break}if((a[bT+((c[bR>>2]|0)+bv|0)|0]|0)==(a[bv+95280|0]|0)){bv=bv+1|0}else{fx=ee;break L7062}}if((bv|0)!=2){fx=ee;break}c[13898]=fw+1;bR=is(n)|0;bT=c[bR>>2]|0;if((bT|0)==1){fy=+(c[bR+8>>2]|0)}else if((bT|0)==3){fy=+uz(c[bR+8>>2]|0,0)}else if((bT|0)==2){fy=+h[bR+8>>3]}else{aP=4382;break L5888}if((c[ag>>2]|0)!=3){fx=fy;break}uu(c[ah>>2]|0);c[ag>>2]=1;fx=fy}else{fx=ee}}while(0);L7077:do{if((c[9666]|0)==0){bO=c[13898]|0;aR=c[1054]|0;bR=(a[aR+(bO*40&-1)|0]&1)==0;if(bR){aP=4388}else{bT=c[10036]|0;bw=a[bT+(c[aR+(bO*40&-1)+32>>2]|0)|0]|0;if((bw<<24>>24|0)==39|(bw<<24>>24|0)==34){fz=bT}else{aP=4388}}if((aP|0)==4388){aP=0;bT=c[10810]|0;if((bT|0)==0){break}bw=c[8272]|0;bQ=aR+(bO*40&-1)+36|0;bU=aR+(bO*40&-1)+32|0;bB=c[10036]|0;bL=bT;L7084:while(1){bT=c[bL+4>>2]|0;L7086:do{if(!((bw|0)<=(bO|0)|bR)){bu=c[bQ>>2]|0;aG=0;while(1){if((aG|0)>=(bu|0)){break}if((a[bB+((c[bU>>2]|0)+aG|0)|0]|0)==(a[bT+aG|0]|0)){aG=aG+1|0}else{break L7086}}if((a[bT+aG|0]|0)==0){break L7084}}}while(0);bT=c[bL>>2]|0;if((bT|0)==0){break L7077}else{bL=bT}}if((a[bL+8|0]&1)!=0){break}if((c[bL+16>>2]|0)==3){fz=bB}else{break}}L7096:do{if((bO|0)<(c[8272]|0)){L7098:do{if(!bR){bU=c[aR+(bO*40&-1)+36>>2]|0;bQ=aR+(bO*40&-1)+32|0;bw=0;while(1){if((bw|0)>=(bU|0)){break}if((a[fz+((c[bQ>>2]|0)+bw|0)|0]|0)==(a[bw+103664|0]|0)){bw=bw+1|0}else{break L7098}}if((bw|0)==1){fA=0;break L7096}}}while(0);a[14176]=1;is(l);a[14176]=0;if((c[ai>>2]|0)==3){fA=c[aj>>2]|0;break}else{c[13898]=bO;fA=0;break}}else{fA=0}}while(0);c[9666]=fA}}while(0);bO=c[13898]|0;aR=c[1054]|0;bR=a[aR+(bO*40&-1)|0]|0;L7110:do{if((c[8272]|0)>(bO|0)){if((bR&1)==0){aP=4414;break}bB=c[aR+(bO*40&-1)+36>>2]|0;bL=aR+(bO*40&-1)+32|0;bQ=c[10036]|0;bU=0;while(1){if((bU|0)>=(bB|0)){break}if((a[bQ+((c[bL>>2]|0)+bU|0)|0]|0)==(a[bU+225056|0]|0)){bU=bU+1|0}else{aP=4414;break L7110}}if((bU|0)==2){aP=4422}else{aP=4414}}else{aP=4414}}while(0);L7117:do{if((aP|0)==4414){aP=0;bL=c[aR+(bO*40&-1)+36>>2]|0;if(!((bR&1)!=0&(bL|0)>0)){fB=bS;break}bQ=c[10036]|0;bB=0;aG=0;bv=c[aR+(bO*40&-1)+32>>2]|0;while(1){if((a[bB+139232|0]|0)==(a[bQ+(bB+bv|0)|0]|0)){fC=bv;fD=aG}else{if((bB|0)!=5){fB=bS;break L7117}fC=bv-1|0;fD=1}bT=bB+1|0;if((bT|0)<(fD+bL|0)){bB=bT;aG=fD;bv=fC}else{break}}if((fD|0)!=0){aP=4422;break}if((bB|0)==4|(bB|0)==8){aP=4422}else{fB=bS}}}while(0);if((aP|0)==4422){aP=0;c[13898]=bO+1;aR=is(k)|0;bR=c[aR>>2]|0;if((bR|0)==1){fE=+(c[aR+8>>2]|0)}else if((bR|0)==2){fE=+h[aR+8>>3]}else if((bR|0)==3){fE=+uz(c[aR+8>>2]|0,0)}else{aP=4426;break L5888}if((c[ak>>2]|0)==3){uu(c[al>>2]|0);c[ak>>2]=1}fB=~~fE}hJ(p,1,100,c[af>>2]|0,49504);aR=c[13898]|0;if((aR|0)==(fw|0)){break}else{ee=fx;bS=fB;fw=aR}}bS=c[af>>2]|0;B=c[8272]|0;if((B|0)<=(fw|0)){aP=6084;break L5888}aR=c[1054]|0;if((a[aR+(fw*40&-1)|0]&1)==0){aP=6085;break L5888}bR=c[aR+(fw*40&-1)+36>>2]|0;bv=aR+(fw*40&-1)+32|0;aR=c[10036]|0;aG=0;while(1){if((aG|0)>=(bR|0)){break}if((a[aR+((c[bv>>2]|0)+aG|0)|0]|0)==(a[aG+148464|0]|0)){aG=aG+1|0}else{aP=6086;break L5888}}if((aG|0)==1){aW=fx;aX=-1;aZ=fB;a$=bS;a0=fw;a1=B;aP=5304}else{aP=6087;break L5888}}}while(0);if((aP|0)==5304){aP=0;if(au){fh=am;fi=a$;fj=aZ;fk=aX;fl=aW;fm=as;fn=at;fo=aA;fp=av;fq=aw;fr=ax;fs=ay;ft=a0;fu=a1;aP=5305}else{e1=am;e2=a$;e3=aZ;e5=aX;e8=aW;e9=as;fa=at;fb=aA;fc=av;fd=aw;fe=ax;ff=ay;fg=0;aP=5313}}L7148:do{if((aP|0)==5305){aP=0;if((fu|0)<=(ft|0)){fF=fr;fG=1;fH=fo;fI=aQ;fJ=fh;aP=5328;break L5888}aB=c[1054]|0;if((a[aB+(ft*40&-1)|0]&1)==0){fF=fr;fG=1;fH=fo;fI=aQ;fJ=fh;aP=5328;break L5888}bv=c[aB+(ft*40&-1)+36>>2]|0;aR=aB+(ft*40&-1)+32|0;aB=c[10036]|0;bR=0;while(1){if((bR|0)>=(bv|0)){break}if((a[aB+((c[aR>>2]|0)+bR|0)|0]|0)==(a[bR+148464|0]|0)){bR=bR+1|0}else{fF=fr;fG=1;fH=fo;fI=aQ;fJ=fh;aP=5328;break L5888}}if((bR|0)!=1){fF=fr;fG=1;fH=fo;fI=aQ;fJ=fh;aP=5328;break L5888}aR=ft+1|0;c[13898]=aR;fK=fs;fL=fr;fM=fq;fN=fp;fO=1;fP=fo;fQ=fn;fR=fm;fT=fl;fU=fk;fV=fj;fW=fi;fX=fh;fY=aR}else if((aP|0)==5313){aP=0;aR=c[7774]|0;do{if((aR|0)==0){aP=5316}else{if((a[aR+38|0]&1)==0|(fg|0)==0){aP=5316;break}c[fg+8>>2]=4}}while(0);do{if((aP|0)==5316){aP=0;if(!(ix(aR)|0)){break}c[13898]=aQ;fK=ff;fL=fe;fM=fd;fN=fc;fO=0;fP=fb;fQ=fa;fR=e9;fT=e8;fU=e5;fV=e3;fW=e2;fX=e1;fY=aQ;break L7148}}while(0);aR=c[7774]|0;if((aR|0)!=0){bR=aR;while(1){aR=c[bR>>2]|0;uu(c[bR+12>>2]|0);uu(bR);if((aR|0)==0){break}else{bR=aR}}}c[7774]=0;bR=c[13898]|0;if((c[8272]|0)<=(bR|0)){aP=5327;break L5888}aR=c[1054]|0;if((a[aR+(bR*40&-1)|0]&1)==0){aP=5327;break L5888}aB=c[aR+(bR*40&-1)+36>>2]|0;bv=aR+(bR*40&-1)+32|0;aR=c[10036]|0;B=0;while(1){if((B|0)>=(aB|0)){break}if((a[aR+((c[bv>>2]|0)+B|0)|0]|0)==(a[B+148464|0]|0)){B=B+1|0}else{aP=5327;break L5888}}if((B|0)!=1){aP=5327;break L5888}c[13898]=bR+1;c[7774]=iw()|0;fK=ff;fL=fe;fM=fd;fN=fc;fO=0;fP=fb;fQ=fa;fR=e9;fT=e8;fU=e5;fV=e3;fW=e2;fX=e1;fY=c[13898]|0}}while(0);if((fY|0)<(c[8272]|0)){am=fX;an=fW;ao=fV;ap=fU;aq=fT;ar=aQ;as=fR;at=fQ;A=fP;au=fO;av=fN;aw=fM;ax=fL;ay=fK;az=fY}else{aJ=aQ;aK=fP;aL=fX;aM=fO;aN=fL;aO=fY;aP=4357;break}}do{if((aP|0)==4501){uf(cc,163648,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==4426){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==4357){if((aL|0)==0){C=aO}else{fF=aN;fG=aM;fH=aK;fI=aJ;fJ=aL;aP=5328;break}uf(C,105216,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==4680){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==4906){uf(c[13898]|0,110696,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==4910){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=107952,v)|0)}else if((aP|0)==4944){uf(c[13898]|0,84448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==4946){uf(c[13898]|0,106024,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==4744){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=201712,v)|0)}else if((aP|0)==4867){uf(-1,115176,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==4880){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=201712,v)|0)}else if((aP|0)==4899){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=201712,v)|0)}else if((aP|0)==4903){uf(c[13898]|0,114152,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==4576){c[13898]=cC;aP=4577}else if((aP|0)==4634){uf(cR,143640,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==4466){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=180104,v)|0)}else if((aP|0)==4546){uf(c[13898]|0,216936,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==4455){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=180104,v)|0)}else if((aP|0)==4533){uf(cT,149448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==4382){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==4521){uf(bV,92272,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==4622){uf(bV,133232,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==4462){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=77008,v)|0)}else if((aP|0)==4452){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=77008,v)|0)}else if((aP|0)==4448){uf(c[13898]|0,92272,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==4961){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=90328,v)|0)}else if((aP|0)==4998){uf(-1,89648,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==5e3){uf(-1,89152,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==5012){uf(-1,87256,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==5014){uf(-1,87256,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==5016){uf(-1,87256,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==5018){uf(-1,87256,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==5020){uf(-1,87256,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==5022){uf(-1,87256,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==5025){ez();fY=c[11900]|0;uf(c[13898]|0,86160,(v=i,i=i+16|0,c[v>>2]=ea,c[v+8>>2]=fY,v)|0)}else if((aP|0)==5034){ez();fY=c[11932]|0;uf(c[d2>>2]|0,116952,(v=i,i=i+16|0,c[v>>2]=c[11900],c[v+8>>2]=(fY|0)!=0?fY:179864,v)|0)}else if((aP|0)==5039){uf(c[13898]|0,83648,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==5044){uf(c[13898]|0,82688,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==5164){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=91376,v)|0)}else if((aP|0)==5189){uf(-1,90720,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==5236){uf(-1,92048,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==5267){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=93632,v)|0)}else if((aP|0)==5270){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=92920,v)|0)}else if((aP|0)==5327){if((a[32936]&1)==0){fZ=fe;f_=0;f$=fb;f0=aQ;f1=e1;aP=5331}else{f2=fe;f4=0;f5=fb;f6=aQ;f7=e1}}else if((aP|0)==6068){f9=c[13898]|0;uf(f9,205152,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==6069){uf(c9,210136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==6070){uf(c9,210136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==6071){uf(c9,210136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==6072){uf(c9,210136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==6073){uf(c9,210136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==6074){uf(c9,210136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==6075){uf(cb,163568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==6076){uf(cb,163568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==6077){uf(cb,163568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==6078){uf(cb,163568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==6079){uf(cb,163568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==6080){uf(cb,163568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==6081){uf(cb,163568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==6082){uf(cb,163568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==6083){uf(cb,163568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==6084){uf(fw,175992,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==6085){uf(fw,175992,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==6086){uf(fw,175992,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==6087){uf(fw,175992,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);if((aP|0)==4577){c[bJ>>2]=0;f9=c[13898]|0;uf(f9,205152,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}do{if((aP|0)==5328){f9=(a[32936]&1)==0;if(f9|fG^1){if(f9){fZ=fF;f_=fG;f$=fH;f0=fI;f1=fJ;aP=5331;break}else{f2=fF;f4=fG;f5=fH;f6=fI;f7=fJ;break}}else{uf(-1,147440,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if((aP|0)==5331){if((a[30528]&1)!=0){f2=fZ;f4=f_;f5=f$;f6=f0;f7=f1;break}do{if((fZ|0)!=0){if((c[z>>2]|0)==0){break}if(!(+h[8256]==-8.988465674311579e+307|+h[8255]==8.988465674311579e+307)){break}h[8255]=-10.0;h[8256]=10.0}}while(0);dc(2,145296);if((c[x>>2]&1|0)!=0){dc(6,103512);f2=fZ;f4=f_;f5=f$;f6=f0;f7=f1;break}fJ=c[17194]|0;if((fJ|0)==0){f2=fZ;f4=f_;f5=f$;f6=f0;f7=f1;break}if((fJ&1|0)!=0){h[8599]=+h[8255]}if((fJ&2|0)==0){f2=fZ;f4=f_;f5=f$;f6=f0;f7=f1;break}h[8600]=+h[8256];f2=fZ;f4=f_;f5=f$;f6=f0;f7=f1}}while(0);do{if((f2|0)==0){ga=f7}else{f1=(a[32936]&1)==0;if(f1){if((a[30528]&1)==0){aP=5357}else{aP=5346}}else{aP=5346}if((aP|0)==5346){do{if((c[z>>2]&1|0)==0){f0=c[16506]|0;if((f0&1|0)!=0){h[8255]=8.988465674311579e+307}if((f0&2|0)==0){break}h[8256]=-8.988465674311579e+307}}while(0);do{if((c[x>>2]&1|0)==0){f0=c[17194]|0;if((f0&1|0)!=0){h[8599]=8.988465674311579e+307}if((f0&2|0)==0){break}h[8600]=-8.988465674311579e+307}}while(0);if(f1){aP=5357}else{aP=5358}}if((aP|0)==5357){if((a[30528]&1)==0){gb=0.0;gc=0.0}else{aP=5358}}if((aP|0)==5358){fT=+h[8771];gb=(+h[8772]-fT)/+((c[6352]|0)-1|0);gc=fT}f0=c[10814]|0;c[13898]=u;c[7774]=iw()|0;f$=t|0;f_=t+8|0;fZ=f_;fJ=t+8|0;fI=f_;f_=t+16|0;fH=f0;fT=gb;f0=f4;fG=f5;fF=f6;aq=gc;f9=0;L7293:while(1){bJ=fG;fw=fF;L7295:while(1){cb=c[13898]|0;if(f0){gd=fw}else{gd=bJ?fw:cb}if((t9(cb)|0)==0){aP=5370;break}dT();cb=c[13898]|0;if((c[8272]|0)<=(cb|0)){bJ=1;fw=gd;continue}c9=c[1054]|0;if((a[c9+(cb*40&-1)|0]&1)==0){bJ=1;fw=gd;continue}e1=c[c9+(cb*40&-1)+36>>2]|0;aQ=c9+(cb*40&-1)+32|0;cb=c[10036]|0;c9=0;while(1){if((c9|0)>=(e1|0)){break}if((a[cb+((c[aQ>>2]|0)+c9|0)|0]|0)==(a[c9+148464|0]|0)){c9=c9+1|0}else{bJ=1;fw=gd;continue L7295}}if((c9|0)==1){aP=5664;break}else{bJ=1;fw=gd}}L7307:do{if((aP|0)==5370){aP=0;ge=c[13898]|0;if((ge|0)>=(c[8272]|0)){aP=5377;break L7293}fw=c[1054]|0;bR=fw+(ge*40&-1)|0;L7310:do{if((a[bR]&1)==0){gf=0}else{B=c[fw+(ge*40&-1)+36>>2]|0;aQ=fw+(ge*40&-1)+32|0;cb=c[10036]|0;e1=0;while(1){if((e1|0)>=(B|0)){break}if((a[cb+((c[aQ>>2]|0)+e1|0)|0]|0)==(a[e1+103664|0]|0)){e1=e1+1|0}else{gf=0;break L7310}}gf=(e1|0)==1}}while(0);if(gf|(fH|0)==0){aP=5377;break L7293}c9=fH+304|0;c[200]=c[c9>>2];c[144]=c[fH+308>>2];aQ=f9+1|0;c[11670]=31424;cb=c[fw+(ge*40&-1)+36>>2]|0;L7318:do{if((a[bR]&1)!=0&(cb|0)>0){B=c[10036]|0;bB=0;bO=0;fb=c[fw+(ge*40&-1)+32>>2]|0;while(1){if((a[bB+205224|0]|0)==(a[B+(bB+fb|0)|0]|0)){gg=fb;gh=bO}else{if((bB|0)!=7){aP=5386;break L7318}gg=fb-1|0;gh=1}fe=bB+1|0;if((fe|0)<(gh+cb|0)){bB=fe;bO=gh;fb=gg}else{break}}if((gh|0)!=0){break}if(!((bB|0)==6|(bB|0)==12)){aP=5386}}else{aP=5386}}while(0);do{if((aP|0)==5386){aP=0;if((iu(s)|0)!=0){break}cb=a[32936]&1;fw=f0^cb<<24>>24!=0;c[7858]=c[s>>2];do{if(cb<<24>>24==0){if((a[30528]&1)!=0){aP=5394;break}gi=c[200]|0;e8=+h[64664+(gi*688&-1)>>3];fl=+h[64672+(gi*688&-1)>>3];if((a[64788+(gi*688&-1)|0]&1)==0){gj=fl;gl=e8}else{if(!(e8>0.0&fl>0.0)){aP=5391;break L7293}aW=+_(+e8);e8=+h[64800+(gi*688&-1)>>3];gj=+_(+fl)/e8;gl=aW/e8}bR=c[6352]|0;gm=(gj-gl)/+(bR-1|0);gn=gl;go=bR}else{aP=5394}}while(0);if((aP|0)==5394){aP=0;gm=fT;gn=aq;go=c[6352]|0}if((go|0)>0){cb=fH+320|0;bB=fH+12|0;bR=fH+23|0;fb=fw^1;bO=fH+244|0;B=fH+248|0;e1=0;while(1){e8=gn+gm*+(e1|0);do{if(+P(+e8)<1.0e-9){if(+P(+gm)<=1.0e-6){gp=e8;break}gp=0.0}else{gp=e8}}while(0);do{if((a[32936]&1)==0){if((a[30528]&1)!=0){gq=gp;break}fe=c[200]|0;if((a[64788+(fe*688&-1)|0]&1)==0){gq=gp;break}gq=+Z(+(gp*+h[64800+(fe*688&-1)>>3]))}else{gq=gp}}while(0);c[7862]=2;h[3932]=gq;h[3933]=0.0;e4(c[7858]|0,t);L7354:do{if((a[1960]&1)==0){fe=c[f$>>2]|0;if((fe|0)==2){gr=+h[f_>>3]}else if((fe|0)==3){aP=5407;break L7293}else if((fe|0)==1){gr=0.0}else{aP=5408;break L7293}e8=+P(+gr);if(e8>+h[11]){aP=5410;break}uE((c[cb>>2]|0)+(e1<<6)|0,0,64);if((fe|0)==1){gs=+(c[fZ>>2]|0)}else if((fe|0)==2){gs=+h[fJ>>3]}else if((fe|0)==3){gs=+uz(c[fI>>2]|0,0)}else{aP=5415;break L7293}h[(c[cb>>2]|0)+(e1<<6)+24>>3]=-1.0;c[(c[cb>>2]|0)+(e1<<6)>>2]=0;if((a[32936]&1)!=0){h[(c[cb>>2]|0)+(e1<<6)+8>>3]=gp;h[(c[cb>>2]|0)+(e1<<6)+16>>3]=gs;if(+h[7030]<0.0){break}if((a[56232]&1)==0){break}h[(c[cb>>2]|0)+(e1<<6)+24>>3]=0.0;break}if((a[30528]&1)==0){h[(c[cb>>2]|0)+(e1<<6)+8>>3]=gp;fe=c[bB>>2]|0;if((fe|0)==153&+h[7030]>=0.0){L7374:do{if((a[56232]&1)!=0){h[(c[cb>>2]|0)+(e1<<6)+24>>3]=0.0;d2=c[c9>>2]|0;if((a[64788+(d2*688&-1)|0]&1)==0){e8=+h[7030]*.5;gt=gq+e8;gu=gq-e8}else{e8=+h[64792+(d2*688&-1)>>3];aW=+h[7030];fl=gq*+R(+e8,+(aW*-.5));gt=gq*+R(+e8,+(aW*.5));gu=fl}d2=c[200]|0;if((d2|0)==99){break}L7381:do{if(gu>-8.988465674311579e+307&gu<8.988465674311579e+307){do{if((a[64788+(d2*688&-1)|0]&1)==0){h[(c[cb>>2]|0)+(e1<<6)+48>>3]=gu}else{if(gu<0.0){break L7381}if(gu==0.0){h[(c[cb>>2]|0)+(e1<<6)+48>>3]=-8.988465674311579e+307;break L7381}else{fl=+_(+gu);h[(c[cb>>2]|0)+(e1<<6)+48>>3]=fl/+h[64800+(d2*688&-1)>>3];break}}}while(0);if((a[bR]&1)!=0|(d2|0)<0){break}bs=64712+(d2*688&-1)|0;if(gu<+h[bs>>3]){h[bs>>3]=gu}bs=64664+(d2*688&-1)|0;do{if(gu<+h[bs>>3]){if((c[64648+(d2*688&-1)>>2]&1|0)==0){break L7381}if((c[64728+(d2*688&-1)>>2]&1|0)==0){h[bs>>3]=gu;break}fl=+h[64736+(d2*688&-1)>>3];if(fl>gu){h[bs>>3]=fl;break L7381}else{h[bs>>3]=gu;break}}}while(0);bs=64720+(d2*688&-1)|0;if(gu>+h[bs>>3]){h[bs>>3]=gu}bs=64672+(d2*688&-1)|0;if(gu<=+h[bs>>3]){break}if((c[64648+(d2*688&-1)>>2]&2|0)==0){break}if((c[64732+(d2*688&-1)>>2]&2|0)==0){h[bs>>3]=gu;break}fl=+h[64760+(d2*688&-1)>>3];if(fl<gu){h[bs>>3]=fl;break}else{h[bs>>3]=gu;break}}}while(0);if(!(gt>-8.988465674311579e+307&gt<8.988465674311579e+307)){break}do{if((a[64788+(d2*688&-1)|0]&1)==0){h[(c[cb>>2]|0)+(e1<<6)+56>>3]=gt}else{if(gt<0.0){break L7374}if(gt==0.0){h[(c[cb>>2]|0)+(e1<<6)+56>>3]=-8.988465674311579e+307;break L7374}else{fl=+_(+gt);h[(c[cb>>2]|0)+(e1<<6)+56>>3]=fl/+h[64800+(d2*688&-1)>>3];break}}}while(0);if((a[bR]&1)!=0|(d2|0)<0){break}bo=64712+(d2*688&-1)|0;if(gt<+h[bo>>3]){h[bo>>3]=gt}bo=64664+(d2*688&-1)|0;do{if(gt<+h[bo>>3]){if((c[64648+(d2*688&-1)>>2]&1|0)==0){break L7374}if((c[64728+(d2*688&-1)>>2]&1|0)==0){h[bo>>3]=gt;break}fl=+h[64736+(d2*688&-1)>>3];if(fl>gt){h[bo>>3]=fl;break L7374}else{h[bo>>3]=gt;break}}}while(0);bo=64720+(d2*688&-1)|0;if(gt>+h[bo>>3]){h[bo>>3]=gt}bo=64672+(d2*688&-1)|0;if(gt<=+h[bo>>3]){break}if((c[64648+(d2*688&-1)>>2]&2|0)==0){break}if((c[64732+(d2*688&-1)>>2]&2|0)==0){h[bo>>3]=gt;break}fl=+h[64760+(d2*688&-1)>>3];if(fl<gt){h[bo>>3]=fl;break}else{h[bo>>3]=gt;break}}}while(0);gv=c[bB>>2]|0}else{gv=fe}if((gv|0)==457){h[(c[cb>>2]|0)+(e1<<6)+24>>3]=-1.0;h[(c[cb>>2]|0)+(e1<<6)+32>>3]=0.0;h[(c[cb>>2]|0)+(e1<<6)+56>>3]=360.0}else if((gv|0)==489){h[(c[cb>>2]|0)+(e1<<6)+24>>3]=-1.0;h[(c[cb>>2]|0)+(e1<<6)+32>>3]=+h[6214]}if(fw){if((c[200]|0)!=0){break}}else{if((c[144]|0)==99){break}}if(!(gs>-8.988465674311579e+307&gs<8.988465674311579e+307)){c[(c[cb>>2]|0)+(e1<<6)>>2]=2;break}bw=c[200]|0;bo=fw?bw:c[144]|0;do{if((a[64788+(bo*688&-1)|0]&1)==0){h[(c[cb>>2]|0)+(e1<<6)+16>>3]=gs}else{if(gs<0.0){c[(c[cb>>2]|0)+(e1<<6)>>2]=2;break L7354}if(gs==0.0){h[(c[cb>>2]|0)+(e1<<6)+16>>3]=-8.988465674311579e+307;c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break L7354}else{fl=+_(+gs);h[(c[cb>>2]|0)+(e1<<6)+16>>3]=fl/+h[64800+(bo*688&-1)>>3];break}}}while(0);if((a[bR]&1)!=0){break}if((c[(c[cb>>2]|0)+(e1<<6)>>2]|0)!=0){break}if(!((bw|0)==0|fb)){break}fe=64712+(bo*688&-1)|0;if(gs<+h[fe>>3]){h[fe>>3]=gs}fe=64664+(bo*688&-1)|0;do{if(gs<+h[fe>>3]){if((c[64648+(bo*688&-1)>>2]&1|0)==0){c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break L7354}if((c[64728+(bo*688&-1)>>2]&1|0)==0){h[fe>>3]=gs;break}fl=+h[64736+(bo*688&-1)>>3];if(fl>gs){h[fe>>3]=fl;c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break L7354}else{h[fe>>3]=gs;break}}}while(0);fe=64720+(bo*688&-1)|0;if(gs>+h[fe>>3]){h[fe>>3]=gs}fe=64672+(bo*688&-1)|0;if(gs<=+h[fe>>3]){break}if((c[64648+(bo*688&-1)>>2]&2|0)==0){c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break}if((c[64732+(bo*688&-1)>>2]&2|0)==0){h[fe>>3]=gs;break}fl=+h[64760+(bo*688&-1)>>3];if(fl<gs){h[fe>>3]=fl;c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break}else{h[fe>>3]=gs;break}}do{if(gs>+h[8686]){if((c[17366]&2|0)==0){c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break}else{h[8686]=gs;break}}}while(0);fl=+h[8685];do{if(gs<fl){if((c[17366]&1|0)==0){gw=fl;break}h[8685]=0.0;gw=0.0}else{gw=fl}}while(0);bo=(a[69604]&1)==0;do{if(bo){if((c[17366]&1|0)!=0){gx=gs;break}gx=gs-gw}else{fl=+_(+gs);aW=+h[8702];gx=fl/aW- +_(+gw)/aW}}while(0);aW=gq*+h[9040];fl=+T(+aW);e8=gx*fl;fx=+S(+aW);aW=gx*fx;L7521:do{if((c[bB>>2]|0)==345){if((c[bO>>2]|0)!=10){break}fE=+h[B>>3];if(bo){gy=gw;gz=fE}else{fy=+_(+fE);fE=+h[8702];gy=+_(+gw)/fE;gz=fy/fE}fE=gz-gy;fy=fE*fl;fv=fE*fx;fe=c[200]|0;L7527:do{if((fe|0)!=99){if(!(fv>-8.988465674311579e+307&fv<8.988465674311579e+307)){c[(c[cb>>2]|0)+(e1<<6)>>2]=2;break L7354}do{if((a[64788+(fe*688&-1)|0]&1)==0){h[(c[cb>>2]|0)+(e1<<6)+56>>3]=fv}else{if(fv<0.0){c[(c[cb>>2]|0)+(e1<<6)>>2]=2;break L7354}if(fv==0.0){h[(c[cb>>2]|0)+(e1<<6)+56>>3]=-8.988465674311579e+307;c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break L7527}else{fE=+_(+fv);h[(c[cb>>2]|0)+(e1<<6)+56>>3]=fE/+h[64800+(fe*688&-1)>>3];break}}}while(0);if((a[bR]&1)!=0){break}if((c[(c[cb>>2]|0)+(e1<<6)>>2]|0)!=0|(fe|0)<0){break}bw=64712+(fe*688&-1)|0;if(fv<+h[bw>>3]){h[bw>>3]=fv}bw=64664+(fe*688&-1)|0;do{if(fv<+h[bw>>3]){if((c[64648+(fe*688&-1)>>2]&1|0)==0){c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break L7527}if((c[64728+(fe*688&-1)>>2]&1|0)==0){h[bw>>3]=fv;break}fE=+h[64736+(fe*688&-1)>>3];if(fE>fv){h[bw>>3]=fE;c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break L7527}else{h[bw>>3]=fv;break}}}while(0);bw=64720+(fe*688&-1)|0;if(fv>+h[bw>>3]){h[bw>>3]=fv}bw=64672+(fe*688&-1)|0;if(fv<=+h[bw>>3]){break}if((c[64648+(fe*688&-1)>>2]&2|0)==0){c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break}if((c[64732+(fe*688&-1)>>2]&2|0)==0){h[bw>>3]=fv;break}fE=+h[64760+(fe*688&-1)>>3];if(fE<fv){h[bw>>3]=fE;c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break}else{h[bw>>3]=fv;break}}}while(0);fe=c[144]|0;if((fe|0)==99){break}if(!(fy>-8.988465674311579e+307&fy<8.988465674311579e+307)){c[(c[cb>>2]|0)+(e1<<6)>>2]=2;break L7354}do{if((a[64788+(fe*688&-1)|0]&1)==0){h[(c[cb>>2]|0)+(e1<<6)+40>>3]=fy}else{if(fy<0.0){c[(c[cb>>2]|0)+(e1<<6)>>2]=2;break L7354}if(fy==0.0){h[(c[cb>>2]|0)+(e1<<6)+40>>3]=-8.988465674311579e+307;c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break L7521}else{fv=+_(+fy);h[(c[cb>>2]|0)+(e1<<6)+40>>3]=fv/+h[64800+(fe*688&-1)>>3];break}}}while(0);if((a[bR]&1)!=0){break}if((c[(c[cb>>2]|0)+(e1<<6)>>2]|0)!=0|(fe|0)<0){break}d2=64712+(fe*688&-1)|0;if(fy<+h[d2>>3]){h[d2>>3]=fy}d2=64664+(fe*688&-1)|0;do{if(fy<+h[d2>>3]){if((c[64648+(fe*688&-1)>>2]&1|0)==0){c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break L7521}if((c[64728+(fe*688&-1)>>2]&1|0)==0){h[d2>>3]=fy;break}fv=+h[64736+(fe*688&-1)>>3];if(fv>fy){h[d2>>3]=fv;c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break L7521}else{h[d2>>3]=fy;break}}}while(0);d2=64720+(fe*688&-1)|0;if(fy>+h[d2>>3]){h[d2>>3]=fy}d2=64672+(fe*688&-1)|0;if(fy<=+h[d2>>3]){break}if((c[64648+(fe*688&-1)>>2]&2|0)==0){c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break}if((c[64732+(fe*688&-1)>>2]&2|0)==0){h[d2>>3]=fy;break}fv=+h[64760+(fe*688&-1)>>3];if(fv<fy){h[d2>>3]=fv;c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break}else{h[d2>>3]=fy;break}}}while(0);bo=c[200]|0;L7618:do{if((bo|0)!=99){if(!(aW>-8.988465674311579e+307&aW<8.988465674311579e+307)){c[(c[cb>>2]|0)+(e1<<6)>>2]=2;break L7354}do{if((a[64788+(bo*688&-1)|0]&1)==0){h[(c[cb>>2]|0)+(e1<<6)+8>>3]=aW}else{if(aW<0.0){c[(c[cb>>2]|0)+(e1<<6)>>2]=2;break L7354}if(aW==0.0){h[(c[cb>>2]|0)+(e1<<6)+8>>3]=-8.988465674311579e+307;c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break L7618}else{fx=+_(+aW);h[(c[cb>>2]|0)+(e1<<6)+8>>3]=fx/+h[64800+(bo*688&-1)>>3];break}}}while(0);if((a[bR]&1)!=0){break}if((c[(c[cb>>2]|0)+(e1<<6)>>2]|0)!=0|(bo|0)<0){break}fe=64712+(bo*688&-1)|0;if(aW<+h[fe>>3]){h[fe>>3]=aW}fe=64664+(bo*688&-1)|0;do{if(aW<+h[fe>>3]){if((c[64648+(bo*688&-1)>>2]&1|0)==0){c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break L7618}if((c[64728+(bo*688&-1)>>2]&1|0)==0){h[fe>>3]=aW;break}fy=+h[64736+(bo*688&-1)>>3];if(fy>aW){h[fe>>3]=fy;c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break L7618}else{h[fe>>3]=aW;break}}}while(0);fe=64720+(bo*688&-1)|0;if(aW>+h[fe>>3]){h[fe>>3]=aW}fe=64672+(bo*688&-1)|0;if(aW<=+h[fe>>3]){break}if((c[64648+(bo*688&-1)>>2]&2|0)==0){c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break}if((c[64732+(bo*688&-1)>>2]&2|0)==0){h[fe>>3]=aW;break}fy=+h[64760+(bo*688&-1)>>3];if(fy<aW){h[fe>>3]=fy;c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break}else{h[fe>>3]=aW;break}}}while(0);bo=c[144]|0;if((bo|0)==99){break}if(!(e8>-8.988465674311579e+307&e8<8.988465674311579e+307)){c[(c[cb>>2]|0)+(e1<<6)>>2]=2;break}do{if((a[64788+(bo*688&-1)|0]&1)==0){h[(c[cb>>2]|0)+(e1<<6)+16>>3]=e8}else{if(e8<0.0){c[(c[cb>>2]|0)+(e1<<6)>>2]=2;break L7354}if(e8==0.0){h[(c[cb>>2]|0)+(e1<<6)+16>>3]=-8.988465674311579e+307;c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break L7354}else{aW=+_(+e8);h[(c[cb>>2]|0)+(e1<<6)+16>>3]=aW/+h[64800+(bo*688&-1)>>3];break}}}while(0);if((a[bR]&1)!=0){break}if((c[(c[cb>>2]|0)+(e1<<6)>>2]|0)!=0|(bo|0)<0){break}fe=64712+(bo*688&-1)|0;if(e8<+h[fe>>3]){h[fe>>3]=e8}fe=64664+(bo*688&-1)|0;do{if(e8<+h[fe>>3]){if((c[64648+(bo*688&-1)>>2]&1|0)==0){c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break L7354}if((c[64728+(bo*688&-1)>>2]&1|0)==0){h[fe>>3]=e8;break}aW=+h[64736+(bo*688&-1)>>3];if(aW>e8){h[fe>>3]=aW;c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break L7354}else{h[fe>>3]=e8;break}}}while(0);fe=64720+(bo*688&-1)|0;if(e8>+h[fe>>3]){h[fe>>3]=e8}fe=64672+(bo*688&-1)|0;if(e8<=+h[fe>>3]){break}if((c[64648+(bo*688&-1)>>2]&2|0)==0){c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break}if((c[64732+(bo*688&-1)>>2]&2|0)==0){h[fe>>3]=e8;break}aW=+h[64760+(bo*688&-1)>>3];if(aW<e8){h[fe>>3]=aW;c[(c[cb>>2]|0)+(e1<<6)>>2]=1;break}else{h[fe>>3]=e8;break}}else{aP=5410}}while(0);if((aP|0)==5410){aP=0;c[(c[cb>>2]|0)+(e1<<6)>>2]=2}fe=e1+1|0;if((fe|0)<(c[6352]|0)){e1=fe}else{gA=fe;break}}}else{gA=0}c[fH+300>>2]=gA;c[13898]=c[fH+4>>2];e1=c[fH>>2]|0;if(fw){gB=aQ;gC=gn;gD=0;gE=1;gF=gm;gG=e1;break L7307}else{gH=aQ;gI=gn;gJ=0;gK=gm;gL=e1;aP=5665;break L7307}}}while(0);c[13898]=c[fH+4>>2];c9=c[fH>>2]|0;if(f0){gB=aQ;gC=aq;gD=0;gE=1;gF=fT;gG=c9}else{gH=aQ;gI=aq;gJ=0;gK=fT;gL=c9;aP=5665}}else if((aP|0)==5664){aP=0;if(f0){gB=f9;gC=aq;gD=bJ;gE=1;gF=fT;gG=fH}else{gH=f9;gI=aq;gJ=bJ;gK=fT;gL=fH;aP=5665}}}while(0);do{if((aP|0)==5665){aP=0;if(!(ix(c[7774]|0)|0)){gB=gH;gC=gI;gD=gJ;gE=0;gF=gK;gG=gL;break}c[13898]=gd;fH=gL;fT=gK;f0=0;fG=gJ;fF=gd;aq=gI;f9=gH;continue L7293}}while(0);bJ=c[7774]|0;if((bJ|0)!=0){c9=bJ;while(1){bJ=c[c9>>2]|0;uu(c[c9+12>>2]|0);uu(c9);if((bJ|0)==0){break}else{c9=bJ}}}c[7774]=0;c9=c[13898]|0;if((c[8272]|0)<=(c9|0)){gM=gB;break}bJ=c[1054]|0;if((a[bJ+(c9*40&-1)|0]&1)==0){gM=gB;break}e1=c[bJ+(c9*40&-1)+36>>2]|0;cb=bJ+(c9*40&-1)+32|0;bJ=c[10036]|0;bR=0;while(1){if((bR|0)>=(e1|0)){break}if((a[bJ+((c[cb>>2]|0)+bR|0)|0]|0)==(a[bR+148464|0]|0)){bR=bR+1|0}else{gM=gB;break L7293}}if((bR|0)!=1){gM=gB;break}c[13898]=c9+1;if(gE){fH=gG;fT=gF;f0=1;fG=gD;fF=gd;aq=gC;f9=gB;continue}c[7774]=iw()|0;fH=gG;fT=gF;f0=0;fG=gD;fF=gd;aq=gC;f9=gB}if((aP|0)==5377){uh(ge,136552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);gM=f9}else if((aP|0)==5391){uf(-1,218096,(v=i,i=i+8|0,c[v>>2]=56832+(gi*24&-1),v)|0)}else if((aP|0)==5407){uh(-1,212704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);uf(-1,212032,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==5408){uf(-1,211552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aP|0)==5415){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((a[32936]&1)==0){ga=gM;break}fF=c[10814]|0;c[d>>2]=fF;L7738:do{if((gM|0)<1){gN=d;gO=0;gP=gM}else{fG=d;f0=0;fH=fF;fI=1;fJ=gM;while(1){fZ=fG;f_=fH;f$=fI;while(1){gQ=f_|0;gR=c[gQ>>2]|0;if((c[f_+8>>2]|0)==0){break}f1=f$+1|0;if((f1|0)>(fJ|0)){gN=gQ;gO=f0;gP=fJ;break L7738}else{fZ=gQ;f_=gR;f$=f1}}aQ=fJ-1|0;f1=c[f_+300>>2]|0;cb=gR+300|0;if((f1|0)!=(c[cb>>2]|0)){break}if((f1|0)>0){f1=f_+320|0;bJ=gR+320|0;e1=gR+304|0;B=gR+308|0;bO=f_+23|0;bB=f_+304|0;fb=f_+308|0;fe=(a[30528]&1)==0;d2=0;do{L7750:do{if(fe){aq=+h[(c[f1>>2]|0)+(d2<<6)+16>>3];bw=c[bJ>>2]|0;fT=+h[bw+(d2<<6)+16>>3];aW=+h[7030];L7933:do{if(aW<0.0){aP=5874}else{if((a[56232]&1)==0){aP=5874;break}bs=c[e1>>2]|0;if((bs|0)==99){break}fy=aq-aW*.5;L7937:do{if(fy>-8.988465674311579e+307&fy<8.988465674311579e+307){do{if((a[64788+(bs*688&-1)|0]&1)==0){h[bw+(d2<<6)+48>>3]=fy}else{if(fy<0.0){aP=5845;break L7937}if(fy==0.0){h[bw+(d2<<6)+48>>3]=-8.988465674311579e+307;aP=5845;break L7937}else{fx=+_(+fy);h[bw+(d2<<6)+48>>3]=fx/+h[64800+(bs*688&-1)>>3];break}}}while(0);if((a[bO]&1)!=0){aP=5845;break}ea=c[e1>>2]|0;if((ea|0)<0){gS=ea;break}fx=aq- +h[7030]*.5;bV=64712+(ea*688&-1)|0;if(fx<+h[bV>>3]){h[bV>>3]=fx;gT=c[e1>>2]|0}else{gT=ea}ea=64664+(gT*688&-1)|0;do{if(fx<+h[ea>>3]){if((c[64648+(gT*688&-1)>>2]&1|0)==0){aP=5845;break L7937}if((c[64728+(gT*688&-1)>>2]&1|0)==0){h[ea>>3]=fx;break}fl=+h[64736+(gT*688&-1)>>3];if(fl>fx){h[ea>>3]=fl;aP=5845;break L7937}else{h[ea>>3]=fx;break}}}while(0);ea=c[e1>>2]|0;bV=64720+(ea*688&-1)|0;if(fx>+h[bV>>3]){h[bV>>3]=fx;gU=c[e1>>2]|0}else{gU=ea}ea=64672+(gU*688&-1)|0;if(fx<=+h[ea>>3]){gV=gU;aP=5846;break}if((c[64648+(gU*688&-1)>>2]&2|0)==0){aP=5845;break}if((c[64732+(gU*688&-1)>>2]&2|0)==0){h[ea>>3]=fx;aP=5845;break}fl=+h[64760+(gU*688&-1)>>3];if(fl<fx){h[ea>>3]=fl;aP=5845;break}else{h[ea>>3]=fx;aP=5845;break}}else{aP=5845}}while(0);if((aP|0)==5845){aP=0;gV=c[e1>>2]|0;aP=5846}if((aP|0)==5846){aP=0;if((gV|0)==99){aP=5874;break}else{gS=gV}}fy=aq+ +h[7030]*.5;if(!(fy>-8.988465674311579e+307&fy<8.988465674311579e+307)){aP=5874;break}do{if((a[64788+(gS*688&-1)|0]&1)==0){h[(c[bJ>>2]|0)+(d2<<6)+56>>3]=fy}else{if(fy<0.0){aP=5874;break L7933}if(fy==0.0){h[(c[bJ>>2]|0)+(d2<<6)+56>>3]=-8.988465674311579e+307;aP=5874;break L7933}else{e8=+_(+fy);h[(c[bJ>>2]|0)+(d2<<6)+56>>3]=e8/+h[64800+(gS*688&-1)>>3];break}}}while(0);if((a[bO]&1)!=0){aP=5874;break}bs=c[e1>>2]|0;if((bs|0)<0){gW=bs;aP=5875;break}fy=aq+ +h[7030]*.5;bo=64712+(bs*688&-1)|0;if(fy<+h[bo>>3]){h[bo>>3]=fy;gX=c[e1>>2]|0}else{gX=bs}bs=64664+(gX*688&-1)|0;do{if(fy<+h[bs>>3]){if((c[64648+(gX*688&-1)>>2]&1|0)==0){aP=5874;break L7933}if((c[64728+(gX*688&-1)>>2]&1|0)==0){h[bs>>3]=fy;break}e8=+h[64736+(gX*688&-1)>>3];if(e8>fy){h[bs>>3]=e8;aP=5874;break L7933}else{h[bs>>3]=fy;break}}}while(0);bs=c[e1>>2]|0;bo=64720+(bs*688&-1)|0;if(fy>+h[bo>>3]){h[bo>>3]=fy;gY=c[e1>>2]|0}else{gY=bs}bs=64672+(gY*688&-1)|0;if(fy<=+h[bs>>3]){aP=5874;break}if((c[64648+(gY*688&-1)>>2]&2|0)==0){aP=5874;break}if((c[64732+(gY*688&-1)>>2]&2|0)==0){h[bs>>3]=fy;aP=5874;break}e8=+h[64760+(gY*688&-1)>>3];if(e8<fy){h[bs>>3]=e8;aP=5874;break}else{h[bs>>3]=fy;aP=5874;break}}}while(0);if((aP|0)==5874){aP=0;bw=c[e1>>2]|0;if((bw|0)!=99){gW=bw;aP=5875}}L8015:do{if((aP|0)==5875){aP=0;if(!(aq>-8.988465674311579e+307&aq<8.988465674311579e+307)){c[(c[bJ>>2]|0)+(d2<<6)>>2]=2;break}do{if((a[64788+(gW*688&-1)|0]&1)==0){h[(c[bJ>>2]|0)+(d2<<6)+8>>3]=aq}else{if(aq<0.0){c[(c[bJ>>2]|0)+(d2<<6)>>2]=2;break L8015}if(aq==0.0){h[(c[bJ>>2]|0)+(d2<<6)+8>>3]=-8.988465674311579e+307;c[(c[bJ>>2]|0)+(d2<<6)>>2]=1;break L8015}else{aW=+_(+aq);h[(c[bJ>>2]|0)+(d2<<6)+8>>3]=aW/+h[64800+(gW*688&-1)>>3];break}}}while(0);if((a[bO]&1)!=0){break}if((c[(c[bJ>>2]|0)+(d2<<6)>>2]|0)!=0){break}bw=c[e1>>2]|0;if((bw|0)<0){break}bs=64712+(bw*688&-1)|0;if(aq<+h[bs>>3]){h[bs>>3]=aq;gZ=c[e1>>2]|0}else{gZ=bw}bw=64664+(gZ*688&-1)|0;do{if(aq<+h[bw>>3]){if((c[64648+(gZ*688&-1)>>2]&1|0)==0){c[(c[bJ>>2]|0)+(d2<<6)>>2]=1;break L8015}if((c[64728+(gZ*688&-1)>>2]&1|0)==0){h[bw>>3]=aq;break}fy=+h[64736+(gZ*688&-1)>>3];if(fy>aq){h[bw>>3]=fy;c[(c[bJ>>2]|0)+(d2<<6)>>2]=1;break L8015}else{h[bw>>3]=aq;break}}}while(0);bw=c[e1>>2]|0;bs=64720+(bw*688&-1)|0;if(aq>+h[bs>>3]){h[bs>>3]=aq;g_=c[e1>>2]|0}else{g_=bw}bw=64672+(g_*688&-1)|0;if(aq<=+h[bw>>3]){break}if((c[64648+(g_*688&-1)>>2]&2|0)==0){c[(c[bJ>>2]|0)+(d2<<6)>>2]=1;break}if((c[64732+(g_*688&-1)>>2]&2|0)==0){h[bw>>3]=aq;break}fy=+h[64760+(g_*688&-1)>>3];if(fy<aq){h[bw>>3]=fy;c[(c[bJ>>2]|0)+(d2<<6)>>2]=1;break}else{h[bw>>3]=aq;break}}}while(0);bw=c[B>>2]|0;if((bw|0)==99){break}if(!(fT>-8.988465674311579e+307&fT<8.988465674311579e+307)){c[(c[bJ>>2]|0)+(d2<<6)>>2]=2;break}do{if((a[64788+(bw*688&-1)|0]&1)==0){h[(c[bJ>>2]|0)+(d2<<6)+16>>3]=fT}else{if(fT<0.0){c[(c[bJ>>2]|0)+(d2<<6)>>2]=2;break L7750}if(fT==0.0){h[(c[bJ>>2]|0)+(d2<<6)+16>>3]=-8.988465674311579e+307;c[(c[bJ>>2]|0)+(d2<<6)>>2]=1;break L7750}else{aq=+_(+fT);h[(c[bJ>>2]|0)+(d2<<6)+16>>3]=aq/+h[64800+(bw*688&-1)>>3];break}}}while(0);if((a[bO]&1)!=0){break}if((c[(c[bJ>>2]|0)+(d2<<6)>>2]|0)!=0){break}bw=c[B>>2]|0;if((bw|0)<0){break}bs=64712+(bw*688&-1)|0;if(fT<+h[bs>>3]){h[bs>>3]=fT;g$=c[B>>2]|0}else{g$=bw}bw=64664+(g$*688&-1)|0;do{if(fT<+h[bw>>3]){if((c[64648+(g$*688&-1)>>2]&1|0)==0){c[(c[bJ>>2]|0)+(d2<<6)>>2]=1;break L7750}if((c[64728+(g$*688&-1)>>2]&1|0)==0){h[bw>>3]=fT;break}aq=+h[64736+(g$*688&-1)>>3];if(aq>fT){h[bw>>3]=aq;c[(c[bJ>>2]|0)+(d2<<6)>>2]=1;break L7750}else{h[bw>>3]=fT;break}}}while(0);bw=c[B>>2]|0;bs=64720+(bw*688&-1)|0;if(fT>+h[bs>>3]){h[bs>>3]=fT;g0=c[B>>2]|0}else{g0=bw}bw=64672+(g0*688&-1)|0;if(fT<=+h[bw>>3]){break}if((c[64648+(g0*688&-1)>>2]&2|0)==0){c[(c[bJ>>2]|0)+(d2<<6)>>2]=1;break}if((c[64732+(g0*688&-1)>>2]&2|0)==0){h[bw>>3]=fT;break}aq=+h[64760+(g0*688&-1)>>3];if(aq<fT){h[bw>>3]=aq;c[(c[bJ>>2]|0)+(d2<<6)>>2]=1;break}else{h[bw>>3]=fT;break}}else{bw=c[bJ>>2]|0;aq=+h[bw+(d2<<6)+16>>3];fy=+h[(c[f1>>2]|0)+(d2<<6)+16>>3]*+h[9040];bs=c[17366]|0;if((bs&2|0)==0&aq>+h[8686]){c[bw+(d2<<6)>>2]=1;g1=c[17366]|0}else{g1=bs}if((g1&1|0)==0){g2=aq- +h[8685]}else{g2=aq}aq=g2*+S(+fy);aW=g2*+T(+fy);fy=+h[7030];L7758:do{if(fy<0.0){aP=5749}else{if((a[56232]&1)==0){aP=5749;break}bs=c[bB>>2]|0;if((bs|0)==99){break}e8=aq-fy*.5;L7762:do{if(e8>-8.988465674311579e+307&e8<8.988465674311579e+307){do{if((a[64788+(bs*688&-1)|0]&1)==0){h[(c[bJ>>2]|0)+(d2<<6)+48>>3]=e8}else{if(e8<0.0){aP=5720;break L7762}if(e8==0.0){h[(c[bJ>>2]|0)+(d2<<6)+48>>3]=-8.988465674311579e+307;aP=5720;break L7762}else{fl=+_(+e8);h[(c[bJ>>2]|0)+(d2<<6)+48>>3]=fl/+h[64800+(bs*688&-1)>>3];break}}}while(0);if((a[bO]&1)!=0){aP=5720;break}bw=c[bB>>2]|0;if((bw|0)<0){g3=bw;break}fx=aq- +h[7030]*.5;bo=64712+(bw*688&-1)|0;if(fx<+h[bo>>3]){h[bo>>3]=fx;g4=c[bB>>2]|0}else{g4=bw}bw=64664+(g4*688&-1)|0;do{if(fx<+h[bw>>3]){if((c[64648+(g4*688&-1)>>2]&1|0)==0){aP=5720;break L7762}if((c[64728+(g4*688&-1)>>2]&1|0)==0){h[bw>>3]=fx;break}fl=+h[64736+(g4*688&-1)>>3];if(fl>fx){h[bw>>3]=fl;aP=5720;break L7762}else{h[bw>>3]=fx;break}}}while(0);bw=c[bB>>2]|0;bo=64720+(bw*688&-1)|0;if(fx>+h[bo>>3]){h[bo>>3]=fx;g5=c[bB>>2]|0}else{g5=bw}bw=64672+(g5*688&-1)|0;if(fx<=+h[bw>>3]){g6=g5;aP=5721;break}if((c[64648+(g5*688&-1)>>2]&2|0)==0){aP=5720;break}if((c[64732+(g5*688&-1)>>2]&2|0)==0){h[bw>>3]=fx;aP=5720;break}fl=+h[64760+(g5*688&-1)>>3];if(fl<fx){h[bw>>3]=fl;aP=5720;break}else{h[bw>>3]=fx;aP=5720;break}}else{aP=5720}}while(0);if((aP|0)==5720){aP=0;g6=c[bB>>2]|0;aP=5721}if((aP|0)==5721){aP=0;if((g6|0)==99){aP=5749;break}else{g3=g6}}e8=aq+ +h[7030]*.5;if(!(e8>-8.988465674311579e+307&e8<8.988465674311579e+307)){aP=5749;break}do{if((a[64788+(g3*688&-1)|0]&1)==0){h[(c[bJ>>2]|0)+(d2<<6)+56>>3]=e8}else{if(e8<0.0){aP=5749;break L7758}if(e8==0.0){h[(c[bJ>>2]|0)+(d2<<6)+56>>3]=-8.988465674311579e+307;aP=5749;break L7758}else{fl=+_(+e8);h[(c[bJ>>2]|0)+(d2<<6)+56>>3]=fl/+h[64800+(g3*688&-1)>>3];break}}}while(0);if((a[bO]&1)!=0){aP=5749;break}bs=c[bB>>2]|0;if((bs|0)<0){g7=bs;aP=5750;break}e8=aq+ +h[7030]*.5;bw=64712+(bs*688&-1)|0;if(e8<+h[bw>>3]){h[bw>>3]=e8;g8=c[bB>>2]|0}else{g8=bs}bs=64664+(g8*688&-1)|0;do{if(e8<+h[bs>>3]){if((c[64648+(g8*688&-1)>>2]&1|0)==0){aP=5749;break L7758}if((c[64728+(g8*688&-1)>>2]&1|0)==0){h[bs>>3]=e8;break}fl=+h[64736+(g8*688&-1)>>3];if(fl>e8){h[bs>>3]=fl;aP=5749;break L7758}else{h[bs>>3]=e8;break}}}while(0);bs=c[bB>>2]|0;bw=64720+(bs*688&-1)|0;if(e8>+h[bw>>3]){h[bw>>3]=e8;g9=c[bB>>2]|0}else{g9=bs}bs=64672+(g9*688&-1)|0;if(e8<=+h[bs>>3]){aP=5749;break}if((c[64648+(g9*688&-1)>>2]&2|0)==0){aP=5749;break}if((c[64732+(g9*688&-1)>>2]&2|0)==0){h[bs>>3]=e8;aP=5749;break}fl=+h[64760+(g9*688&-1)>>3];if(fl<e8){h[bs>>3]=fl;aP=5749;break}else{h[bs>>3]=e8;aP=5749;break}}}while(0);if((aP|0)==5749){aP=0;bs=c[bB>>2]|0;if((bs|0)!=99){g7=bs;aP=5750}}L7840:do{if((aP|0)==5750){aP=0;if(!(aq>-8.988465674311579e+307&aq<8.988465674311579e+307)){c[(c[bJ>>2]|0)+(d2<<6)>>2]=2;break}do{if((a[64788+(g7*688&-1)|0]&1)==0){h[(c[bJ>>2]|0)+(d2<<6)+8>>3]=aq}else{if(aq<0.0){c[(c[bJ>>2]|0)+(d2<<6)>>2]=2;break L7840}if(aq==0.0){h[(c[bJ>>2]|0)+(d2<<6)+8>>3]=-8.988465674311579e+307;c[(c[bJ>>2]|0)+(d2<<6)>>2]=1;break L7840}else{fy=+_(+aq);h[(c[bJ>>2]|0)+(d2<<6)+8>>3]=fy/+h[64800+(g7*688&-1)>>3];break}}}while(0);if((a[bO]&1)!=0){break}if((c[(c[bJ>>2]|0)+(d2<<6)>>2]|0)!=0){break}bs=c[bB>>2]|0;if((bs|0)<0){break}bw=64712+(bs*688&-1)|0;if(aq<+h[bw>>3]){h[bw>>3]=aq;ha=c[bB>>2]|0}else{ha=bs}bs=64664+(ha*688&-1)|0;do{if(aq<+h[bs>>3]){if((c[64648+(ha*688&-1)>>2]&1|0)==0){c[(c[bJ>>2]|0)+(d2<<6)>>2]=1;break L7840}if((c[64728+(ha*688&-1)>>2]&1|0)==0){h[bs>>3]=aq;break}e8=+h[64736+(ha*688&-1)>>3];if(e8>aq){h[bs>>3]=e8;c[(c[bJ>>2]|0)+(d2<<6)>>2]=1;break L7840}else{h[bs>>3]=aq;break}}}while(0);bs=c[bB>>2]|0;bw=64720+(bs*688&-1)|0;if(aq>+h[bw>>3]){h[bw>>3]=aq;hb=c[bB>>2]|0}else{hb=bs}bs=64672+(hb*688&-1)|0;if(aq<=+h[bs>>3]){break}if((c[64648+(hb*688&-1)>>2]&2|0)==0){c[(c[bJ>>2]|0)+(d2<<6)>>2]=1;break}if((c[64732+(hb*688&-1)>>2]&2|0)==0){h[bs>>3]=aq;break}e8=+h[64760+(hb*688&-1)>>3];if(e8<aq){h[bs>>3]=e8;c[(c[bJ>>2]|0)+(d2<<6)>>2]=1;break}else{h[bs>>3]=aq;break}}}while(0);bs=c[fb>>2]|0;if((bs|0)==99){break}if(!(aW>-8.988465674311579e+307&aW<8.988465674311579e+307)){c[(c[bJ>>2]|0)+(d2<<6)>>2]=2;break}do{if((a[64788+(bs*688&-1)|0]&1)==0){h[(c[bJ>>2]|0)+(d2<<6)+16>>3]=aW}else{if(aW<0.0){c[(c[bJ>>2]|0)+(d2<<6)>>2]=2;break L7750}if(aW==0.0){h[(c[bJ>>2]|0)+(d2<<6)+16>>3]=-8.988465674311579e+307;c[(c[bJ>>2]|0)+(d2<<6)>>2]=1;break L7750}else{aq=+_(+aW);h[(c[bJ>>2]|0)+(d2<<6)+16>>3]=aq/+h[64800+(bs*688&-1)>>3];break}}}while(0);if((a[bO]&1)!=0){break}if((c[(c[bJ>>2]|0)+(d2<<6)>>2]|0)!=0){break}bs=c[fb>>2]|0;if((bs|0)<0){break}bw=64712+(bs*688&-1)|0;if(aW<+h[bw>>3]){h[bw>>3]=aW;hc=c[fb>>2]|0}else{hc=bs}bs=64664+(hc*688&-1)|0;do{if(aW<+h[bs>>3]){if((c[64648+(hc*688&-1)>>2]&1|0)==0){c[(c[bJ>>2]|0)+(d2<<6)>>2]=1;break L7750}if((c[64728+(hc*688&-1)>>2]&1|0)==0){h[bs>>3]=aW;break}aq=+h[64736+(hc*688&-1)>>3];if(aq>aW){h[bs>>3]=aq;c[(c[bJ>>2]|0)+(d2<<6)>>2]=1;break L7750}else{h[bs>>3]=aW;break}}}while(0);bs=c[fb>>2]|0;bw=64720+(bs*688&-1)|0;if(aW>+h[bw>>3]){h[bw>>3]=aW;hd=c[fb>>2]|0}else{hd=bs}bs=64672+(hd*688&-1)|0;if(aW<=+h[bs>>3]){break}if((c[64648+(hd*688&-1)>>2]&2|0)==0){c[(c[bJ>>2]|0)+(d2<<6)>>2]=1;break}if((c[64732+(hd*688&-1)>>2]&2|0)==0){h[bs>>3]=aW;break}aq=+h[64760+(hd*688&-1)>>3];if(aq<aW){h[bs>>3]=aq;c[(c[bJ>>2]|0)+(d2<<6)>>2]=1;break}else{h[bs>>3]=aW;break}}}while(0);d2=d2+1|0;}while((d2|0)<(c[cb>>2]|0))}c[gQ>>2]=f0;c[fZ>>2]=gR;cb=gR|0;d2=f$+1|0;if((d2|0)>(aQ|0)){gN=cb;gO=f_;gP=aQ;break L7738}else{fG=cb;f0=f_;fH=c[cb>>2]|0;fI=d2;fJ=aQ}}uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=94952,v)|0)}}while(0);c[10814]=c[d>>2];c[gN>>2]=gO;dc(2,0);if((c[x>>2]|0)==0){ga=gP;break}dc(6,0);ga=gP}}while(0);gP=c[10814]|0;if((ga|0)==0|(gP|0)==0){uf(c[13898]|0,134776,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}gO=(c[z>>2]|0)==0;do{if(gO){if((c[x>>2]|0)!=0){aP=5960;break}if((c[gP+8>>2]|0)!=4){aP=5959;break}uf(-1,100088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{g2=+h[8256];gC=+h[8255];if(g2==-8.988465674311579e+307|gC==8.988465674311579e+307){uf(-1,99648,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((a[66036]&1)==0){he=gC;hf=g2}else{h[8255]=g2;h[8256]=gC;he=g2;hf=gC}if((a[66164]&1)==0){aP=5959;break}if(he>0.0&hf>0.0){gC=+_(+he);g2=+h[8272];h[8255]=gC/g2;h[8256]=+_(+hf)/g2;aP=5959;break}else{uf(-1,218096,(v=i,i=i+8|0,c[v>>2]=56880,v)|0)}}}while(0);do{if((aP|0)==5959){gP=(c[x>>2]|0)==0;if(!gP){aP=5960;break}if(gO){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=98616,v)|0)}z=c[17194]|0;if((z&1|0)!=0){h[8599]=+h[8255]}if((z&2|0)!=0){h[8600]=+h[8256]}if((z|0)!=0){hg=gP;break}if((a[68788]&1)!=0){hf=+h[8599];h[8599]=+h[8600];h[8600]=hf}if((a[68916]&1)==0){hg=gP;break}hf=+h[8599];if(hf<=0.0){uf(-1,218096,(v=i,i=i+8|0,c[v>>2]=56976,v)|0)}he=+h[8600];if(he>0.0){g2=+_(+hf);hf=+h[8616];h[8599]=g2/hf;h[8600]=+_(+he)/hf;hg=gP;break}else{uf(-1,218096,(v=i,i=i+8|0,c[v>>2]=56976,v)|0)}}}while(0);do{if((aP|0)==5960){hf=+h[8600];he=+h[8599];if(hf==-8.988465674311579e+307|he==8.988465674311579e+307){uf(-1,99648,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((a[68788]&1)==0){hh=he;hi=hf}else{h[8599]=hf;h[8600]=he;hh=hf;hi=he}if((a[68916]&1)==0){hg=0;break}if(hh>0.0&hi>0.0){he=+_(+hh);hf=+h[8616];h[8599]=he/hf;h[8600]=+_(+hi)/hf;hg=0;break}else{uf(-1,218096,(v=i,i=i+8|0,c[v>>2]=56976,v)|0)}}}while(0);do{if(gO){if(hg){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=98024,v)|0)}aP=c[16506]|0;if((aP&1|0)!=0){h[8255]=+h[8599]}if((aP&2|0)==0){break}h[8256]=+h[8600]}}while(0);hg=(c[y>>2]|0)==0;do{if(!hg){dc(1,97344);if((a[65348]&1)!=0){hi=+h[8169];h[8169]=+h[8170];h[8170]=hi}if((a[65476]&1)==0){break}hi=+h[8169];if(hi<=0.0){uf(-1,218096,(v=i,i=i+8|0,c[v>>2]=56856,v)|0)}hh=+h[8170];if(hh>0.0){hf=+_(+hi);hi=+h[8186];h[8169]=hf/hi;h[8170]=+_(+hh)/hi;break}else{uf(-1,218096,(v=i,i=i+8|0,c[v>>2]=56856,v)|0)}}}while(0);y=(c[w>>2]|0)==0;do{if(y){if(hg){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=96304,v)|0)}w=c[17022]|0;if((w&1|0)!=0){h[8513]=+h[8169]}if((w&2|0)!=0){h[8514]=+h[8170]}if((w|0)!=0){break}if((a[68100]&1)!=0){hi=+h[8513];h[8513]=+h[8514];h[8514]=hi}if((a[68228]&1)==0){break}hi=+h[8513];if(hi<=0.0){uf(-1,218096,(v=i,i=i+8|0,c[v>>2]=56952,v)|0)}hh=+h[8514];if(hh>0.0){hf=+_(+hi);hi=+h[8530];h[8513]=hf/hi;h[8514]=+_(+hh)/hi;break}else{uf(-1,218096,(v=i,i=i+8|0,c[v>>2]=56952,v)|0)}}else{dc(5,96768);if((a[68100]&1)!=0){hi=+h[8513];h[8513]=+h[8514];h[8514]=hi}if((a[68228]&1)==0){break}hi=+h[8513];if(hi<=0.0){uf(-1,218096,(v=i,i=i+8|0,c[v>>2]=56952,v)|0)}hh=+h[8514];if(hh>0.0){hf=+_(+hi);hi=+h[8530];h[8513]=hf/hi;h[8514]=+_(+hh)/hi;break}else{uf(-1,218096,(v=i,i=i+8|0,c[v>>2]=56952,v)|0)}}}while(0);do{if(hg){if(y){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=95912,v)|0)}w=c[16334]|0;if((w&1|0)!=0){h[8169]=+h[8513]}if((w&2|0)==0){break}h[8170]=+h[8514]}}while(0);y=c[7738]|0;L8234:do{if((y|0)!=-1){hg=(c[13898]|0)-1|0;w=c[1054]|0;gO=(c[w+(hg*40&-1)+36>>2]|0)+(c[w+(hg*40&-1)+32>>2]|0)|0;hg=db(c[6924]|0,(gO+1|0)-(c[w+(y*40&-1)+32>>2]|0)|0,116456)|0;c[6924]=hg;w=c[(c[1054]|0)+(y*40&-1)+32>>2]|0;L8236:do{if((w|0)<(gO|0)){aP=w;x=hg;while(1){gP=a[(c[10036]|0)+aP|0]|0;if(gP<<24>>24==0){hj=x;break L8236}z=x+1|0;a[x]=gP;gP=aP+1|0;if((gP|0)<(gO|0)){aP=gP;x=z}else{hj=z;break}}}else{hj=hg}}while(0);a[hj]=0;c[7738]=-1;hg=c[6924]|0;gO=e6(126928)|0;if((gO|0)==0){break}w=gO+8|0;do{if((a[w]&1)==0){x=c[gO+24>>2]|0;if((aY(x|0,hg|0)|0)==0){break L8234}aP=gO+16|0;if((c[aP>>2]|0)!=3){break}uu(x);c[aP>>2]=1}else{a[w]=0}}while(0);if((hg|0)==0){hm=0}else{hm=bP(hg|0)|0}c[gO+16>>2]=3;c[gO+24>>2]=hm}}while(0);hm=c[10814]|0;if((a[14112]&1)!=0){lf(hm,ga);e7(1);i=b;return}fS(hm,ga);hm=0;do{if((c[64656+(hm*688&-1)>>2]&1|0)!=0){hi=+h[64664+(hm*688&-1)>>3];if((a[64788+(hm*688&-1)|0]&1)==0){h[64696+(hm*688&-1)>>3]=hi;ho=+h[64672+(hm*688&-1)>>3]}else{hh=+h[64800+(hm*688&-1)>>3];h[64696+(hm*688&-1)>>3]=+Z(+(hi*hh));ho=+Z(+(+h[64672+(hm*688&-1)>>3]*hh))}h[64704+(hm*688&-1)>>3]=ho}hm=hm+1|0;}while(hm>>>0<11);c[6930]=ga;c[6928]=2;e7(1);i=b;return}function iU(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0,C=0,D=0,E=0;e=(d|0)>0;if(e){f=0;g=b}else{return}while(1){i=c[g+304>>2]|0;j=c[g+308>>2]|0;k=c[g+12>>2]|0;do{if((k|0)==400|(k|0)==416){if((c[64652+(i*688&-1)>>2]|0)==0){if((c[64652+(j*688&-1)>>2]|0)==0){break}}f3(g,1)}else{l=g+300|0;if((c[l>>2]|0)<=0){break}m=g+320|0;n=g+23|0;o=64652+(i*688&-1)|0;p=64672+(i*688&-1)|0;q=64664+(i*688&-1)|0;r=64652+(j*688&-1)|0;s=64672+(j*688&-1)|0;t=64664+(j*688&-1)|0;u=0;do{v=c[m>>2]|0;w=v+(u<<6)|0;do{if((c[w>>2]|0)!=2){c[w>>2]=0;do{if((a[n]&1)==0){x=c[o>>2]|0;do{if((x&1|0)!=0){y=+h[v+(u<<6)+8>>3];if(y>=+h[q>>3]){break}h[q>>3]=y}}while(0);if((x&2|0)==0){break}y=+h[v+(u<<6)+8>>3];if(y<=+h[p>>3]){break}h[p>>3]=y}}while(0);y=+h[q>>3];z=+h[p>>3];A=+h[v+(u<<6)+8>>3];if(y<z){if(A<y|A>z){B=6117}}else{if(A<z|A>y){B=6117}}if((B|0)==6117){B=0;c[w>>2]=1;break}do{if((a[n]&1)==0){C=c[r>>2]|0;do{if((C&1|0)!=0){y=+h[v+(u<<6)+16>>3];if(y>=+h[t>>3]){break}h[t>>3]=y}}while(0);if((C&2|0)==0){break}y=+h[v+(u<<6)+16>>3];if(y<=+h[s>>3]){break}h[s>>3]=y}}while(0);y=+h[t>>3];A=+h[s>>3];z=+h[v+(u<<6)+16>>3];if(y<A){if(!(z<y|z>A)){break}}else{if(!(z<A|z>y)){break}}c[w>>2]=1}}while(0);u=u+1|0;}while((u|0)<(c[l>>2]|0))}}while(0);j=f+1|0;if((j|0)<(d|0)){f=j;g=c[g>>2]|0}else{break}}if(e){D=0;E=b}else{return}while(1){dc(c[E+304>>2]|0,0);dc(c[E+308>>2]|0,0);b=D+1|0;if((b|0)<(d|0)){D=b;E=c[E>>2]|0}else{break}}return}function iV(a,b){a=a|0;b=b|0;return a_(c[(c[a>>2]|0)+60>>2]|0,c[(c[b>>2]|0)+60>>2]|0,64)|0}function iW(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;j=i;if((b|0)==0){uf(-1,92360,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{k=b}while(1){l=k|0;m=c[l>>2]|0;if((m|0)==0){break}else{k=m}}m=ut(192)|0;do{if((m|0)==0){gk();n=ut(192)|0;if((n|0)!=0){o=n;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=84552,v)|0)}else{o=m}}while(0);c[l>>2]=o;uD(o|0,k|0,192);k=c[l>>2]|0;c[k>>2]=0;c[k+4>>2]=e;h[k+24>>3]=+h[d+8>>3];h[k+32>>3]=+h[d+16>>3];h[k+40>>3]=+h[d+24>>3];d=k+72|0;do{if((c[d>>2]|0)==6){h[k+80>>3]=g}else{e=c[b+72>>2]|0;if((e|0)==3){if(+h[b+80>>3]>=0.0){break}c[k+76>>2]=~~g;break}else if((e|0)!=7){break}e=c[8798]|0;l=(e|0)>0;o=~~g;L8336:while(1){m=43264;while(1){p=c[m>>2]|0;if((p|0)==0){break}if((c[p+4>>2]|0)==(o|0)){q=6152;break L8336}else{m=p|0}}m=o-1|0;if(!((o|0)>(e|0)&l)){r=1;s=m;t=0.0;break}o=((m|0)%(e|0)&-1)+1|0}do{if((q|0)==6152){e=c[p+48>>2]|0;o=c[p+52>>2]|0;u=+h[p+56>>3];if((c[(c[3524]|0)+96>>2]&1024|0)!=0){r=e;s=o;t=u;break}l=(a[p+40|0]&1)==0;r=l?1:e;s=l?c[p+12>>2]|0:o;t=u}}while(0);c[d>>2]=r;c[k+76>>2]=s;h[k+80>>3]=t}}while(0);L8349:do{if((c[b+88>>2]|0)>0){s=k+128|0;if((c[s>>2]|0)==6){h[k+136>>3]=g;break}do{if((c[b+128>>2]|0)==3){if(+h[b+136>>3]>=0.0){break}c[k+132>>2]=~~g;break L8349}}while(0);if((c[b+92>>2]|0)!=-6){break}r=c[8798]|0;d=(r|0)>0;p=~~g;L8359:while(1){o=43264;while(1){w=c[o>>2]|0;if((w|0)==0){break}if((c[w+4>>2]|0)==(p|0)){q=6168;break L8359}else{o=w|0}}o=p-1|0;if(!((p|0)>(r|0)&d)){x=1;y=o;z=0.0;break}p=((o|0)%(r|0)&-1)+1|0}do{if((q|0)==6168){r=c[w+48>>2]|0;p=c[w+52>>2]|0;t=+h[w+56>>3];if((c[(c[3524]|0)+96>>2]&1024|0)!=0){x=r;y=p;z=t;break}d=(a[w+40|0]&1)==0;x=d?1:r;y=d?c[w+12>>2]|0:p;z=t}}while(0);c[s>>2]=x;c[k+132>>2]=y;h[k+136>>3]=z}}while(0);y=(f|0)==0?179864:f;f=a[47120]|0;L8371:do{if(f<<24>>24==0){L8382:do{if((a[y]|0)==34){x=1;while(1){w=a[y+x|0]|0;if((w<<24>>24|0)==0|(w<<24>>24|0)==34){A=x;break L8382}x=x+1|0}}else{A=0}}while(0);while(1){s=a[y+A|0]|0;if(s<<24>>24==0){B=A;break L8371}if((aM(s<<24>>24|0)|0)==0){A=A+1|0}else{B=A;break}}}else{s=0;x=0;while(1){w=a[y+x|0]|0;if((w<<24>>24|0)==34){C=s^1}else if((w<<24>>24|0)==0){D=x;break}else{if(w<<24>>24!=f<<24>>24|s){C=s}else{D=x;break}}s=C;x=x+1|0}while(1){if((D|0)<=0){B=D;break L8371}x=D-1|0;if((aM(a[y+x|0]|0|0)|0)==0){B=D;break}else{D=x}}}}while(0);do{if((a[y]|0)==34){if((a[y+(B-1|0)|0]|0)!=34){E=B;F=y;break}E=B-2|0;F=y+1|0}else{E=B;F=y}}while(0);y=E+1|0;B=ut(y)|0;if((B|0)!=0){G=B;H=k+60|0;c[H>>2]=G;I=uF(G|0,F|0,E|0)|0;J=c[H>>2]|0;K=J+E|0;a[K]=0;L=c[H>>2]|0;ua(L);i=j;return}gk();B=ut(y)|0;if((B|0)==0){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=224080,v)|0)}else{G=B;H=k+60|0;c[H>>2]=G;I=uF(G|0,F|0,E|0)|0;J=c[H>>2]|0;K=J+E|0;a[K]=0;L=c[H>>2]|0;ua(L);i=j;return}}function iX(b,d,e,f,g,j,k,l,m){b=b|0;d=d|0;e=+e;f=+f;g=+g;j=+j;k=+k;l=+l;m=+m;var n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0.0,I=0,J=0,K=0.0,L=0.0,M=0,N=0,O=0,Q=0,R=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aY=0,aZ=0,a_=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,ba=0,bb=0,bc=0,bd=0,be=0,bf=0,bg=0,bh=0,bi=0,bj=0,bk=0,bl=0.0,bm=0.0,bn=0.0;n=i;i=i+24|0;o=n|0;p=c[b+320>>2]|0;q=c[60]|0;do{if((q|0)==0){r=f;s=l;t=k}else{c[64]=2;h[33]=f;h[34]=0.0;c[76]=c[64];c[308>>2]=c[260>>2];c[312>>2]=c[264>>2];c[316>>2]=c[268>>2];c[320>>2]=c[272>>2];c[324>>2]=c[276>>2];e4(q,o);do{if((a[1960]&1)==0){u=c[o>>2]|0;if((u|0)==2){w=+h[o+8>>3];break}else if((u|0)==1){w=+(c[o+8>>2]|0);break}else if((u|0)==3){w=+uz(c[o+8>>2]|0,0);break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}else{w=0.0}}while(0);c[64]=2;h[33]=k;h[34]=0.0;c[76]=c[64];c[308>>2]=c[260>>2];c[312>>2]=c[264>>2];c[316>>2]=c[268>>2];c[320>>2]=c[272>>2];c[324>>2]=c[276>>2];e4(c[60]|0,o);do{if((a[1960]&1)==0){u=c[o>>2]|0;if((u|0)==3){x=+uz(c[o+8>>2]|0,0);break}else if((u|0)==1){x=+(c[o+8>>2]|0);break}else if((u|0)==2){x=+h[o+8>>3];break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}else{x=0.0}}while(0);c[64]=2;h[33]=l;h[34]=0.0;c[76]=c[64];c[308>>2]=c[260>>2];c[312>>2]=c[264>>2];c[316>>2]=c[268>>2];c[320>>2]=c[272>>2];c[324>>2]=c[276>>2];e4(c[60]|0,o);if((a[1960]&1)!=0){r=w;s=0.0;t=x;break}u=c[o>>2]|0;if((u|0)==3){r=w;s=+uz(c[o+8>>2]|0,0);t=x;break}else if((u|0)==2){r=w;s=+h[o+8>>3];t=x;break}else if((u|0)==1){r=w;s=+(c[o+8>>2]|0);t=x;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);o=p+(d<<6)|0;c[o>>2]=0;do{if((a[30528]&1)==0){y=e;z=r;A=g;B=s;C=t;D=j}else{if(r<+h[8691]){h[8691]=r}do{if(r<+h[8685]){if((c[17366]&1|0)==0){break}h[8685]=r>0.0?0.0:r}}while(0);if(r>+h[8692]){h[8692]=r}do{if(r>+h[8686]){if((c[17366]&2|0)==0){c[o>>2]=1;break}if((c[17387]&2|0)==0){h[8686]=r;break}x=+h[8697];if(x<r){h[8686]=x;break}else{h[8686]=r;break}}}while(0);q=a[69604]|0;do{if((q&1)==0){u=c[17366]|0;if((u&1|0)!=0){E=r;F=u;break}E=r- +h[8685];F=u}else{x=+h[8685];if(x<=0.0){uf(-1,77440,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}u=c[17366]|0;if((u&1|0)==0){w=+_(+r);l=+h[8702];E=w/l- +_(+x)/l;F=u;break}else{uf(-1,77440,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);l=+h[9040]*e;x=E*+S(+l);w=E*+T(+l);if((c[b+12>>2]|0)==457){l=(j-g)*.5;y=x;z=w;A=x-l;B=s;C=t;D=l+x;break}if((F&2|0)==0&s>+h[8686]){c[o>>2]=1;G=a[69604]|0}else{G=q}do{if((G&1)==0){u=c[17366]|0;if((u&1|0)!=0){H=s;I=u;break}H=s- +h[8685];I=u}else{l=+_(+s);k=+h[8702];f=l/k- +_(+(+h[8685]))/k;H=f;I=c[17366]|0}}while(0);f=+h[9040]*j;k=H*+S(+f);l=H*+T(+f);if((I&2|0)==0&t>+h[8686]){c[o>>2]=1;J=a[69604]|0}else{J=G}do{if((J&1)==0){if((c[17366]&1|0)!=0){K=t;break}K=t- +h[8685]}else{f=+_(+t);L=+h[8702];K=f/L- +_(+(+h[8685]))/L}}while(0);L=+h[9040]*g;f=K*+S(+L);y=x;z=w;A=f;B=l;C=K*+T(+L);D=k}}while(0);J=b+304|0;G=c[J>>2]|0;L8481:do{if((G|0)!=99){if(!(y>-8.988465674311579e+307&y<8.988465674311579e+307)){c[o>>2]=2;i=n;return}do{if((a[64788+(G*688&-1)|0]&1)==0){h[p+(d<<6)+8>>3]=y}else{if(y<0.0){c[o>>2]=2;i=n;return}if(y==0.0){h[p+(d<<6)+8>>3]=-8.988465674311579e+307;c[o>>2]=1;break L8481}else{K=+_(+y);h[p+(d<<6)+8>>3]=K/+h[64800+(G*688&-1)>>3];break}}}while(0);if((a[b+23|0]&1)!=0){break}if((c[o>>2]|0)!=0){break}I=c[J>>2]|0;if((I|0)<0){break}F=64712+(I*688&-1)|0;if(y<+h[F>>3]){h[F>>3]=y;M=c[J>>2]|0}else{M=I}I=64664+(M*688&-1)|0;do{if(y<+h[I>>3]){if((c[64648+(M*688&-1)>>2]&1|0)==0){c[o>>2]=1;break L8481}if((c[64728+(M*688&-1)>>2]&1|0)==0){h[I>>3]=y;break}k=+h[64736+(M*688&-1)>>3];if(k>y){h[I>>3]=k;c[o>>2]=1;break L8481}else{h[I>>3]=y;break}}}while(0);I=c[J>>2]|0;F=64720+(I*688&-1)|0;if(y>+h[F>>3]){h[F>>3]=y;N=c[J>>2]|0}else{N=I}I=64672+(N*688&-1)|0;if(y<=+h[I>>3]){break}if((c[64648+(N*688&-1)>>2]&2|0)==0){c[o>>2]=1;break}if((c[64732+(N*688&-1)>>2]&2|0)==0){h[I>>3]=y;break}k=+h[64760+(N*688&-1)>>3];if(k<y){h[I>>3]=k;c[o>>2]=1;break}else{h[I>>3]=y;break}}}while(0);N=b+308|0;M=c[N>>2]|0;L8530:do{if((M|0)!=99){if(!(z>-8.988465674311579e+307&z<8.988465674311579e+307)){c[o>>2]=2;i=n;return}do{if((a[64788+(M*688&-1)|0]&1)==0){h[p+(d<<6)+16>>3]=z}else{if(z<0.0){c[o>>2]=2;i=n;return}if(z==0.0){h[p+(d<<6)+16>>3]=-8.988465674311579e+307;c[o>>2]=1;break L8530}else{k=+_(+z);h[p+(d<<6)+16>>3]=k/+h[64800+(M*688&-1)>>3];break}}}while(0);if((a[b+23|0]&1)!=0){break}if((c[o>>2]|0)!=0){break}G=c[N>>2]|0;if((G|0)<0){break}I=64712+(G*688&-1)|0;if(z<+h[I>>3]){h[I>>3]=z;O=c[N>>2]|0}else{O=G}G=64664+(O*688&-1)|0;do{if(z<+h[G>>3]){if((c[64648+(O*688&-1)>>2]&1|0)==0){c[o>>2]=1;break L8530}if((c[64728+(O*688&-1)>>2]&1|0)==0){h[G>>3]=z;break}k=+h[64736+(O*688&-1)>>3];if(k>z){h[G>>3]=k;c[o>>2]=1;break L8530}else{h[G>>3]=z;break}}}while(0);G=c[N>>2]|0;I=64720+(G*688&-1)|0;if(z>+h[I>>3]){h[I>>3]=z;Q=c[N>>2]|0}else{Q=G}G=64672+(Q*688&-1)|0;if(z<=+h[G>>3]){break}if((c[64648+(Q*688&-1)>>2]&2|0)==0){c[o>>2]=1;break}if((c[64732+(Q*688&-1)>>2]&2|0)==0){h[G>>3]=z;break}k=+h[64760+(Q*688&-1)>>3];if(k<z){h[G>>3]=k;c[o>>2]=1;break}else{h[G>>3]=z;break}}}while(0);Q=c[b+12>>2]|0;L8579:do{if((Q|0)==474){h[p+(d<<6)+32>>3]=C;O=c[N>>2]|0;L8581:do{if((O|0)==99){R=0}else{if(!(B>-8.988465674311579e+307&B<8.988465674311579e+307)){h[p+(d<<6)+40>>3]=-8.988465674311579e+307;R=2;break}do{if((a[64788+(O*688&-1)|0]&1)==0){h[p+(d<<6)+40>>3]=B}else{if(B<0.0){h[p+(d<<6)+40>>3]=-8.988465674311579e+307;R=2;break L8581}if(B==0.0){h[p+(d<<6)+40>>3]=-8.988465674311579e+307;R=1;break L8581}else{k=+_(+B);h[p+(d<<6)+40>>3]=k/+h[64800+(O*688&-1)>>3];break}}}while(0);if((a[b+23|0]&1)!=0){R=0;break}M=c[N>>2]|0;if((M|0)<0){R=0;break}G=64712+(M*688&-1)|0;if(B<+h[G>>3]){h[G>>3]=B;U=c[N>>2]|0}else{U=M}M=64664+(U*688&-1)|0;do{if(B<+h[M>>3]){if((c[64648+(U*688&-1)>>2]&1|0)==0){R=1;break L8581}if((c[64728+(U*688&-1)>>2]&1|0)==0){h[M>>3]=B;break}k=+h[64736+(U*688&-1)>>3];if(k>B){h[M>>3]=k;R=1;break L8581}else{h[M>>3]=B;break}}}while(0);M=c[N>>2]|0;G=64720+(M*688&-1)|0;if(B>+h[G>>3]){h[G>>3]=B;V=c[N>>2]|0}else{V=M}M=64672+(V*688&-1)|0;if(B<=+h[M>>3]){R=0;break}if((c[64648+(V*688&-1)>>2]&2|0)==0){R=1;break}if((c[64732+(V*688&-1)>>2]&2|0)==0){h[M>>3]=B;R=0;break}k=+h[64760+(V*688&-1)>>3];if(k<B){h[M>>3]=k;R=1;break}else{h[M>>3]=B;R=0;break}}}while(0);O=c[J>>2]|0;if((O|0)==99){W=R;break}L8624:do{if(A>-8.988465674311579e+307&A<8.988465674311579e+307){do{if((a[64788+(O*688&-1)|0]&1)==0){h[p+(d<<6)+48>>3]=A}else{if(A<0.0){h[p+(d<<6)+48>>3]=-8.988465674311579e+307;X=2;Y=6440;break L8624}if(A==0.0){h[p+(d<<6)+48>>3]=-8.988465674311579e+307;X=1;Y=6440;break L8624}else{k=+_(+A);h[p+(d<<6)+48>>3]=k/+h[64800+(O*688&-1)>>3];break}}}while(0);if(!((a[b+23|0]&1)==0&(R|0)==0)){X=R;Y=6440;break}M=c[J>>2]|0;if((M|0)<0){Z=M;$=0;break}G=64712+(M*688&-1)|0;if(A<+h[G>>3]){h[G>>3]=A;aa=c[J>>2]|0}else{aa=M}M=64664+(aa*688&-1)|0;do{if(A<+h[M>>3]){if((c[64648+(aa*688&-1)>>2]&1|0)==0){X=1;Y=6440;break L8624}if((c[64728+(aa*688&-1)>>2]&1|0)==0){h[M>>3]=A;break}k=+h[64736+(aa*688&-1)>>3];if(k>A){h[M>>3]=k;X=1;Y=6440;break L8624}else{h[M>>3]=A;break}}}while(0);M=c[J>>2]|0;G=64720+(M*688&-1)|0;if(A>+h[G>>3]){h[G>>3]=A;ab=c[J>>2]|0}else{ab=M}M=64672+(ab*688&-1)|0;if(A<=+h[M>>3]){ac=0;ad=ab;Y=6441;break}if((c[64648+(ab*688&-1)>>2]&2|0)==0){X=1;Y=6440;break}if((c[64732+(ab*688&-1)>>2]&2|0)==0){h[M>>3]=A;X=0;Y=6440;break}k=+h[64760+(ab*688&-1)>>3];if(k<A){h[M>>3]=k;X=1;Y=6440;break}else{h[M>>3]=A;X=0;Y=6440;break}}else{h[p+(d<<6)+48>>3]=-8.988465674311579e+307;X=2;Y=6440}}while(0);if((Y|0)==6440){ac=X;ad=c[J>>2]|0;Y=6441}if((Y|0)==6441){if((ad|0)==99){W=ac;break}else{Z=ad;$=ac}}if(!(D>-8.988465674311579e+307&D<8.988465674311579e+307)){h[p+(d<<6)+56>>3]=-8.988465674311579e+307;W=2;break}do{if((a[64788+(Z*688&-1)|0]&1)==0){h[p+(d<<6)+56>>3]=D}else{if(D<0.0){h[p+(d<<6)+56>>3]=-8.988465674311579e+307;W=2;break L8579}if(D==0.0){h[p+(d<<6)+56>>3]=-8.988465674311579e+307;W=1;break L8579}else{k=+_(+D);h[p+(d<<6)+56>>3]=k/+h[64800+(Z*688&-1)>>3];break}}}while(0);if(!((a[b+23|0]&1)==0&($|0)==0)){W=$;break}O=c[J>>2]|0;if((O|0)<0){W=0;break}M=64712+(O*688&-1)|0;if(D<+h[M>>3]){h[M>>3]=D;ae=c[J>>2]|0}else{ae=O}O=64664+(ae*688&-1)|0;do{if(D<+h[O>>3]){if((c[64648+(ae*688&-1)>>2]&1|0)==0){W=1;break L8579}if((c[64728+(ae*688&-1)>>2]&1|0)==0){h[O>>3]=D;break}k=+h[64736+(ae*688&-1)>>3];if(k>D){h[O>>3]=k;W=1;break L8579}else{h[O>>3]=D;break}}}while(0);O=c[J>>2]|0;M=64720+(O*688&-1)|0;if(D>+h[M>>3]){h[M>>3]=D;af=c[J>>2]|0}else{af=O}O=64672+(af*688&-1)|0;if(D<=+h[O>>3]){W=0;break}if((c[64648+(af*688&-1)>>2]&2|0)==0){W=1;break}if((c[64732+(af*688&-1)>>2]&2|0)==0){h[O>>3]=D;W=0;break}k=+h[64760+(af*688&-1)>>3];if(k<D){h[O>>3]=k;W=1;break}else{h[O>>3]=D;W=0;break}}else if((Q|0)==18|(Q|0)==1|(Q|0)==51|(Q|0)==368|(Q|0)==64|(Q|0)==33|(Q|0)==177|(Q|0)==193|(Q|0)==209){h[p+(d<<6)+48>>3]=A;h[p+(d<<6)+56>>3]=D;h[p+(d<<6)+32>>3]=C;h[p+(d<<6)+40>>3]=B;W=0}else if((Q|0)==153){h[p+(d<<6)+32>>3]=C;h[p+(d<<6)+40>>3]=B;O=c[J>>2]|0;if((O|0)==99){W=0;break}L8710:do{if(A>-8.988465674311579e+307&A<8.988465674311579e+307){do{if((a[64788+(O*688&-1)|0]&1)==0){h[p+(d<<6)+48>>3]=A}else{if(A<0.0){h[p+(d<<6)+48>>3]=-8.988465674311579e+307;ag=2;Y=6349;break L8710}if(A==0.0){h[p+(d<<6)+48>>3]=-8.988465674311579e+307;ag=1;Y=6349;break L8710}else{k=+_(+A);h[p+(d<<6)+48>>3]=k/+h[64800+(O*688&-1)>>3];break}}}while(0);if((a[b+23|0]&1)!=0){ag=0;Y=6349;break}M=c[J>>2]|0;if((M|0)<0){ah=M;ai=0;break}G=64712+(M*688&-1)|0;if(A<+h[G>>3]){h[G>>3]=A;aj=c[J>>2]|0}else{aj=M}M=64664+(aj*688&-1)|0;do{if(A<+h[M>>3]){if((c[64648+(aj*688&-1)>>2]&1|0)==0){ag=1;Y=6349;break L8710}if((c[64728+(aj*688&-1)>>2]&1|0)==0){h[M>>3]=A;break}k=+h[64736+(aj*688&-1)>>3];if(k>A){h[M>>3]=k;ag=1;Y=6349;break L8710}else{h[M>>3]=A;break}}}while(0);M=c[J>>2]|0;G=64720+(M*688&-1)|0;if(A>+h[G>>3]){h[G>>3]=A;ak=c[J>>2]|0}else{ak=M}M=64672+(ak*688&-1)|0;if(A<=+h[M>>3]){al=0;am=ak;Y=6350;break}if((c[64648+(ak*688&-1)>>2]&2|0)==0){ag=1;Y=6349;break}if((c[64732+(ak*688&-1)>>2]&2|0)==0){h[M>>3]=A;ag=0;Y=6349;break}k=+h[64760+(ak*688&-1)>>3];if(k<A){h[M>>3]=k;ag=1;Y=6349;break}else{h[M>>3]=A;ag=0;Y=6349;break}}else{h[p+(d<<6)+48>>3]=-8.988465674311579e+307;ag=2;Y=6349}}while(0);if((Y|0)==6349){al=ag;am=c[J>>2]|0;Y=6350}if((Y|0)==6350){if((am|0)==99){W=al;break}else{ah=am;ai=al}}if(!(D>-8.988465674311579e+307&D<8.988465674311579e+307)){h[p+(d<<6)+56>>3]=-8.988465674311579e+307;W=2;break}do{if((a[64788+(ah*688&-1)|0]&1)==0){h[p+(d<<6)+56>>3]=D}else{if(D<0.0){h[p+(d<<6)+56>>3]=-8.988465674311579e+307;W=2;break L8579}if(D==0.0){h[p+(d<<6)+56>>3]=-8.988465674311579e+307;W=1;break L8579}else{k=+_(+D);h[p+(d<<6)+56>>3]=k/+h[64800+(ah*688&-1)>>3];break}}}while(0);if(!((a[b+23|0]&1)==0&(ai|0)==0)){W=ai;break}O=c[J>>2]|0;if((O|0)<0){W=0;break}M=64712+(O*688&-1)|0;if(D<+h[M>>3]){h[M>>3]=D;an=c[J>>2]|0}else{an=O}O=64664+(an*688&-1)|0;do{if(D<+h[O>>3]){if((c[64648+(an*688&-1)>>2]&1|0)==0){W=1;break L8579}if((c[64728+(an*688&-1)>>2]&1|0)==0){h[O>>3]=D;break}k=+h[64736+(an*688&-1)>>3];if(k>D){h[O>>3]=k;W=1;break L8579}else{h[O>>3]=D;break}}}while(0);O=c[J>>2]|0;M=64720+(O*688&-1)|0;if(D>+h[M>>3]){h[M>>3]=D;ao=c[J>>2]|0}else{ao=O}O=64672+(ao*688&-1)|0;if(D<=+h[O>>3]){W=0;break}if((c[64648+(ao*688&-1)>>2]&2|0)==0){W=1;break}if((c[64732+(ao*688&-1)>>2]&2|0)==0){h[O>>3]=D;W=0;break}k=+h[64760+(ao*688&-1)>>3];if(k<D){h[O>>3]=k;W=1;break}else{h[O>>3]=D;W=0;break}}else if((Q|0)==457){h[p+(d<<6)+40>>3]=B;O=c[J>>2]|0;L8794:do{if((O|0)==99){ap=0}else{L8796:do{if(A>-8.988465674311579e+307&A<8.988465674311579e+307){do{if((a[64788+(O*688&-1)|0]&1)==0){h[p+(d<<6)+48>>3]=A}else{if(A<0.0){h[p+(d<<6)+48>>3]=-8.988465674311579e+307;aq=2;Y=6501;break L8796}if(A==0.0){h[p+(d<<6)+48>>3]=-8.988465674311579e+307;aq=1;Y=6501;break L8796}else{k=+_(+A);h[p+(d<<6)+48>>3]=k/+h[64800+(O*688&-1)>>3];break}}}while(0);if((a[b+23|0]&1)!=0){aq=0;Y=6501;break}M=c[J>>2]|0;if((M|0)<0){ar=M;as=0;break}G=64712+(M*688&-1)|0;if(A<+h[G>>3]){h[G>>3]=A;at=c[J>>2]|0}else{at=M}M=64664+(at*688&-1)|0;do{if(A<+h[M>>3]){if((c[64648+(at*688&-1)>>2]&1|0)==0){aq=1;Y=6501;break L8796}if((c[64728+(at*688&-1)>>2]&1|0)==0){h[M>>3]=A;break}k=+h[64736+(at*688&-1)>>3];if(k>A){h[M>>3]=k;aq=1;Y=6501;break L8796}else{h[M>>3]=A;break}}}while(0);M=c[J>>2]|0;G=64720+(M*688&-1)|0;if(A>+h[G>>3]){h[G>>3]=A;au=c[J>>2]|0}else{au=M}M=64672+(au*688&-1)|0;if(A<=+h[M>>3]){av=0;aw=au;Y=6502;break}if((c[64648+(au*688&-1)>>2]&2|0)==0){aq=1;Y=6501;break}if((c[64732+(au*688&-1)>>2]&2|0)==0){h[M>>3]=A;aq=0;Y=6501;break}k=+h[64760+(au*688&-1)>>3];if(k<A){h[M>>3]=k;aq=1;Y=6501;break}else{h[M>>3]=A;aq=0;Y=6501;break}}else{h[p+(d<<6)+48>>3]=-8.988465674311579e+307;aq=2;Y=6501}}while(0);if((Y|0)==6501){av=aq;aw=c[J>>2]|0;Y=6502}if((Y|0)==6502){if((aw|0)==99){ap=av;break}else{ar=aw;as=av}}if(!(D>-8.988465674311579e+307&D<8.988465674311579e+307)){h[p+(d<<6)+56>>3]=-8.988465674311579e+307;ap=2;break}do{if((a[64788+(ar*688&-1)|0]&1)==0){h[p+(d<<6)+56>>3]=D}else{if(D<0.0){h[p+(d<<6)+56>>3]=-8.988465674311579e+307;ap=2;break L8794}if(D==0.0){h[p+(d<<6)+56>>3]=-8.988465674311579e+307;ap=1;break L8794}else{k=+_(+D);h[p+(d<<6)+56>>3]=k/+h[64800+(ar*688&-1)>>3];break}}}while(0);if(!((a[b+23|0]&1)==0&(as|0)==0)){ap=as;break}M=c[J>>2]|0;if((M|0)<0){ap=0;break}G=64712+(M*688&-1)|0;if(D<+h[G>>3]){h[G>>3]=D;ax=c[J>>2]|0}else{ax=M}M=64664+(ax*688&-1)|0;do{if(D<+h[M>>3]){if((c[64648+(ax*688&-1)>>2]&1|0)==0){ap=1;break L8794}if((c[64728+(ax*688&-1)>>2]&1|0)==0){h[M>>3]=D;break}k=+h[64736+(ax*688&-1)>>3];if(k>D){h[M>>3]=k;ap=1;break L8794}else{h[M>>3]=D;break}}}while(0);M=c[J>>2]|0;G=64720+(M*688&-1)|0;if(D>+h[G>>3]){h[G>>3]=D;ay=c[J>>2]|0}else{ay=M}M=64672+(ay*688&-1)|0;if(D<=+h[M>>3]){ap=0;break}if((c[64648+(ay*688&-1)>>2]&2|0)==0){ap=1;break}if((c[64732+(ay*688&-1)>>2]&2|0)==0){h[M>>3]=D;ap=0;break}k=+h[64760+(ay*688&-1)>>3];if(k<D){h[M>>3]=k;ap=1;break}else{h[M>>3]=D;ap=0;break}}}while(0);h[p+(d<<6)+32>>3]=C;h[p+(d<<6)+56>>3]=B;if(+P(+C)<=1.0e3){if(+P(+B)<=1.0e3){W=ap;break}}c[o>>2]=2;W=ap}else if((Q|0)==489){O=c[J>>2]|0;L9055:do{if((O|0)==99){az=0}else{k=(A>D?A:D)*.5;M=b+272|0;l=y-k*((c[M>>2]|0)==1?1.1:1.0);L9057:do{if(l>-8.988465674311579e+307&l<8.988465674311579e+307){do{if((a[64788+(O*688&-1)|0]&1)==0){h[p+(d<<6)+48>>3]=l}else{if(l<0.0){h[p+(d<<6)+48>>3]=-8.988465674311579e+307;aA=2;Y=6565;break L9057}if(l==0.0){h[p+(d<<6)+48>>3]=-8.988465674311579e+307;aA=1;Y=6565;break L9057}else{w=+_(+l);h[p+(d<<6)+48>>3]=w/+h[64800+(O*688&-1)>>3];break}}}while(0);if((a[b+23|0]&1)!=0){aA=0;Y=6565;break}G=c[J>>2]|0;if((G|0)<0){aB=G;aC=0;break}I=c[M>>2]|0;w=y-k*((I|0)==1?1.1:1.0);F=64712+(G*688&-1)|0;if(w<+h[F>>3]){h[F>>3]=w;aD=c[M>>2]|0;aE=c[J>>2]|0}else{aD=I;aE=G}w=y-k*((aD|0)==1?1.1:1.0);G=64664+(aE*688&-1)|0;do{if(w<+h[G>>3]){if((c[64648+(aE*688&-1)>>2]&1|0)==0){aA=1;Y=6565;break L9057}if((c[64728+(aE*688&-1)>>2]&1|0)==0){h[G>>3]=w;break}x=+h[64736+(aE*688&-1)>>3];if(x>w){h[G>>3]=x;aA=1;Y=6565;break L9057}else{h[G>>3]=w;break}}}while(0);G=c[M>>2]|0;w=y-k*((G|0)==1?1.1:1.0);I=c[J>>2]|0;F=64720+(I*688&-1)|0;if(w>+h[F>>3]){h[F>>3]=w;aF=c[M>>2]|0;aG=c[J>>2]|0}else{aF=G;aG=I}w=y-k*((aF|0)==1?1.1:1.0);I=64672+(aG*688&-1)|0;if(w<=+h[I>>3]){aH=0;aI=aG;Y=6566;break}if((c[64648+(aG*688&-1)>>2]&2|0)==0){aA=1;Y=6565;break}if((c[64732+(aG*688&-1)>>2]&2|0)==0){h[I>>3]=w;aA=0;Y=6565;break}x=+h[64760+(aG*688&-1)>>3];if(x<w){h[I>>3]=x;aA=1;Y=6565;break}else{h[I>>3]=w;aA=0;Y=6565;break}}else{h[p+(d<<6)+48>>3]=-8.988465674311579e+307;aA=2;Y=6565}}while(0);if((Y|0)==6565){aH=aA;aI=c[J>>2]|0;Y=6566}if((Y|0)==6566){if((aI|0)==99){az=aH;break}else{aB=aI;aC=aH}}l=y+k*((c[M>>2]|0)==1?1.1:1.0);if(!(l>-8.988465674311579e+307&l<8.988465674311579e+307)){h[p+(d<<6)+56>>3]=-8.988465674311579e+307;az=2;break}do{if((a[64788+(aB*688&-1)|0]&1)==0){h[p+(d<<6)+56>>3]=l}else{if(l<0.0){h[p+(d<<6)+56>>3]=-8.988465674311579e+307;az=2;break L9055}if(l==0.0){h[p+(d<<6)+56>>3]=-8.988465674311579e+307;az=1;break L9055}else{w=+_(+l);h[p+(d<<6)+56>>3]=w/+h[64800+(aB*688&-1)>>3];break}}}while(0);if(!((a[b+23|0]&1)==0&(aC|0)==0)){az=aC;break}I=c[J>>2]|0;if((I|0)<0){az=0;break}G=c[M>>2]|0;l=y+k*((G|0)==1?1.1:1.0);F=64712+(I*688&-1)|0;if(l<+h[F>>3]){h[F>>3]=l;aJ=c[M>>2]|0;aK=c[J>>2]|0}else{aJ=G;aK=I}l=y+k*((aJ|0)==1?1.1:1.0);I=64664+(aK*688&-1)|0;do{if(l<+h[I>>3]){if((c[64648+(aK*688&-1)>>2]&1|0)==0){az=1;break L9055}if((c[64728+(aK*688&-1)>>2]&1|0)==0){h[I>>3]=l;break}w=+h[64736+(aK*688&-1)>>3];if(w>l){h[I>>3]=w;az=1;break L9055}else{h[I>>3]=l;break}}}while(0);I=c[M>>2]|0;l=y+k*((I|0)==1?1.1:1.0);G=c[J>>2]|0;F=64720+(G*688&-1)|0;if(l>+h[F>>3]){h[F>>3]=l;aL=c[M>>2]|0;aM=c[J>>2]|0}else{aL=I;aM=G}l=y+k*((aL|0)==1?1.1:1.0);G=64672+(aM*688&-1)|0;if(l<=+h[G>>3]){az=0;break}if((c[64648+(aM*688&-1)>>2]&2|0)==0){az=1;break}if((c[64732+(aM*688&-1)>>2]&2|0)==0){h[G>>3]=l;az=0;break}w=+h[64760+(aM*688&-1)>>3];if(w<l){h[G>>3]=w;az=1;break}else{h[G>>3]=l;az=0;break}}}while(0);O=c[N>>2]|0;L9141:do{if((O|0)==99){aN=az}else{l=(A>D?A:D)*.5;G=b+272|0;w=z-l*((c[G>>2]|0)==2?1.0:1.4);L9143:do{if(w>-8.988465674311579e+307&w<8.988465674311579e+307){do{if((a[64788+(O*688&-1)|0]&1)==0){h[p+(d<<6)+32>>3]=w}else{if(w<0.0){h[p+(d<<6)+32>>3]=-8.988465674311579e+307;aO=2;Y=6626;break L9143}if(w==0.0){h[p+(d<<6)+32>>3]=-8.988465674311579e+307;aO=1;Y=6626;break L9143}else{x=+_(+w);h[p+(d<<6)+32>>3]=x/+h[64800+(O*688&-1)>>3];break}}}while(0);if(!((a[b+23|0]&1)==0&(az|0)==0)){aO=az;Y=6626;break}I=c[N>>2]|0;if((I|0)<0){aP=I;aQ=0;break}F=c[G>>2]|0;x=z-l*((F|0)==2?1.0:1.4);q=64712+(I*688&-1)|0;if(x<+h[q>>3]){h[q>>3]=x;aR=c[G>>2]|0;aS=c[N>>2]|0}else{aR=F;aS=I}x=z-l*((aR|0)==2?1.0:1.4);I=64664+(aS*688&-1)|0;do{if(x<+h[I>>3]){if((c[64648+(aS*688&-1)>>2]&1|0)==0){aO=1;Y=6626;break L9143}if((c[64728+(aS*688&-1)>>2]&1|0)==0){h[I>>3]=x;break}K=+h[64736+(aS*688&-1)>>3];if(K>x){h[I>>3]=K;aO=1;Y=6626;break L9143}else{h[I>>3]=x;break}}}while(0);I=c[G>>2]|0;x=z-l*((I|0)==2?1.0:1.4);F=c[N>>2]|0;q=64720+(F*688&-1)|0;if(x>+h[q>>3]){h[q>>3]=x;aT=c[G>>2]|0;aU=c[N>>2]|0}else{aT=I;aU=F}x=z-l*((aT|0)==2?1.0:1.4);F=64672+(aU*688&-1)|0;if(x<=+h[F>>3]){aV=0;aW=aU;Y=6627;break}if((c[64648+(aU*688&-1)>>2]&2|0)==0){aO=1;Y=6626;break}if((c[64732+(aU*688&-1)>>2]&2|0)==0){h[F>>3]=x;aO=0;Y=6626;break}K=+h[64760+(aU*688&-1)>>3];if(K<x){h[F>>3]=K;aO=1;Y=6626;break}else{h[F>>3]=x;aO=0;Y=6626;break}}else{h[p+(d<<6)+32>>3]=-8.988465674311579e+307;aO=2;Y=6626}}while(0);if((Y|0)==6626){aV=aO;aW=c[N>>2]|0;Y=6627}if((Y|0)==6627){if((aW|0)==99){aN=aV;break}else{aP=aW;aQ=aV}}w=z+l*((c[G>>2]|0)==2?1.0:1.4);if(!(w>-8.988465674311579e+307&w<8.988465674311579e+307)){h[p+(d<<6)+40>>3]=-8.988465674311579e+307;aN=2;break}do{if((a[64788+(aP*688&-1)|0]&1)==0){h[p+(d<<6)+40>>3]=w}else{if(w<0.0){h[p+(d<<6)+40>>3]=-8.988465674311579e+307;aN=2;break L9141}if(w==0.0){h[p+(d<<6)+40>>3]=-8.988465674311579e+307;aN=1;break L9141}else{k=+_(+w);h[p+(d<<6)+40>>3]=k/+h[64800+(aP*688&-1)>>3];break}}}while(0);if(!((a[b+23|0]&1)==0&(aQ|0)==0)){aN=aQ;break}M=c[N>>2]|0;if((M|0)<0){aN=0;break}F=c[G>>2]|0;w=z+l*((F|0)==2?1.0:1.4);I=64712+(M*688&-1)|0;if(w<+h[I>>3]){h[I>>3]=w;aX=c[G>>2]|0;aY=c[N>>2]|0}else{aX=F;aY=M}w=z+l*((aX|0)==2?1.0:1.4);M=64664+(aY*688&-1)|0;do{if(w<+h[M>>3]){if((c[64648+(aY*688&-1)>>2]&1|0)==0){aN=1;break L9141}if((c[64728+(aY*688&-1)>>2]&1|0)==0){h[M>>3]=w;break}k=+h[64736+(aY*688&-1)>>3];if(k>w){h[M>>3]=k;aN=1;break L9141}else{h[M>>3]=w;break}}}while(0);M=c[G>>2]|0;w=z+l*((M|0)==2?1.0:1.4);F=c[N>>2]|0;I=64720+(F*688&-1)|0;if(w>+h[I>>3]){h[I>>3]=w;aZ=c[G>>2]|0;a_=c[N>>2]|0}else{aZ=M;a_=F}w=z+l*((aZ|0)==2?1.0:1.4);F=64672+(a_*688&-1)|0;if(w<=+h[F>>3]){aN=0;break}if((c[64648+(a_*688&-1)>>2]&2|0)==0){aN=1;break}if((c[64732+(a_*688&-1)>>2]&2|0)==0){h[F>>3]=w;aN=0;break}k=+h[64760+(a_*688&-1)>>3];if(k<w){h[F>>3]=k;aN=1;break}else{h[F>>3]=w;aN=0;break}}}while(0);h[p+(d<<6)+48>>3]=A;h[p+(d<<6)+56>>3]=D;h[p+(d<<6)+32>>3]=C;W=aN}else{O=c[J>>2]|0;L8884:do{if((O|0)==99){a$=0}else{L8886:do{if(A>-8.988465674311579e+307&A<8.988465674311579e+307){do{if((a[64788+(O*688&-1)|0]&1)==0){h[p+(d<<6)+48>>3]=A}else{if(A<0.0){h[p+(d<<6)+48>>3]=-8.988465674311579e+307;a0=2;Y=6688;break L8886}if(A==0.0){h[p+(d<<6)+48>>3]=-8.988465674311579e+307;a0=1;Y=6688;break L8886}else{w=+_(+A);h[p+(d<<6)+48>>3]=w/+h[64800+(O*688&-1)>>3];break}}}while(0);if((a[b+23|0]&1)!=0){a0=0;Y=6688;break}F=c[J>>2]|0;if((F|0)<0){a1=F;a2=0;break}M=64712+(F*688&-1)|0;if(A<+h[M>>3]){h[M>>3]=A;a3=c[J>>2]|0}else{a3=F}F=64664+(a3*688&-1)|0;do{if(A<+h[F>>3]){if((c[64648+(a3*688&-1)>>2]&1|0)==0){a0=1;Y=6688;break L8886}if((c[64728+(a3*688&-1)>>2]&1|0)==0){h[F>>3]=A;break}w=+h[64736+(a3*688&-1)>>3];if(w>A){h[F>>3]=w;a0=1;Y=6688;break L8886}else{h[F>>3]=A;break}}}while(0);F=c[J>>2]|0;M=64720+(F*688&-1)|0;if(A>+h[M>>3]){h[M>>3]=A;a4=c[J>>2]|0}else{a4=F}F=64672+(a4*688&-1)|0;if(A<=+h[F>>3]){a5=0;a6=a4;Y=6689;break}if((c[64648+(a4*688&-1)>>2]&2|0)==0){a0=1;Y=6688;break}if((c[64732+(a4*688&-1)>>2]&2|0)==0){h[F>>3]=A;a0=0;Y=6688;break}w=+h[64760+(a4*688&-1)>>3];if(w<A){h[F>>3]=w;a0=1;Y=6688;break}else{h[F>>3]=A;a0=0;Y=6688;break}}else{h[p+(d<<6)+48>>3]=-8.988465674311579e+307;a0=2;Y=6688}}while(0);if((Y|0)==6688){a5=a0;a6=c[J>>2]|0;Y=6689}if((Y|0)==6689){if((a6|0)==99){a$=a5;break}else{a1=a6;a2=a5}}if(!(D>-8.988465674311579e+307&D<8.988465674311579e+307)){h[p+(d<<6)+56>>3]=-8.988465674311579e+307;a$=2;break}do{if((a[64788+(a1*688&-1)|0]&1)==0){h[p+(d<<6)+56>>3]=D}else{if(D<0.0){h[p+(d<<6)+56>>3]=-8.988465674311579e+307;a$=2;break L8884}if(D==0.0){h[p+(d<<6)+56>>3]=-8.988465674311579e+307;a$=1;break L8884}else{l=+_(+D);h[p+(d<<6)+56>>3]=l/+h[64800+(a1*688&-1)>>3];break}}}while(0);if(!((a[b+23|0]&1)==0&(a2|0)==0)){a$=a2;break}G=c[J>>2]|0;if((G|0)<0){a$=0;break}F=64712+(G*688&-1)|0;if(D<+h[F>>3]){h[F>>3]=D;a7=c[J>>2]|0}else{a7=G}G=64664+(a7*688&-1)|0;do{if(D<+h[G>>3]){if((c[64648+(a7*688&-1)>>2]&1|0)==0){a$=1;break L8884}if((c[64728+(a7*688&-1)>>2]&1|0)==0){h[G>>3]=D;break}l=+h[64736+(a7*688&-1)>>3];if(l>D){h[G>>3]=l;a$=1;break L8884}else{h[G>>3]=D;break}}}while(0);G=c[J>>2]|0;F=64720+(G*688&-1)|0;if(D>+h[F>>3]){h[F>>3]=D;a8=c[J>>2]|0}else{a8=G}G=64672+(a8*688&-1)|0;if(D<=+h[G>>3]){a$=0;break}if((c[64648+(a8*688&-1)>>2]&2|0)==0){a$=1;break}if((c[64732+(a8*688&-1)>>2]&2|0)==0){h[G>>3]=D;a$=0;break}l=+h[64760+(a8*688&-1)>>3];if(l<D){h[G>>3]=l;a$=1;break}else{h[G>>3]=D;a$=0;break}}}while(0);O=c[N>>2]|0;if((O|0)==99){W=a$;break}L8971:do{if(C>-8.988465674311579e+307&C<8.988465674311579e+307){do{if((a[64788+(O*688&-1)|0]&1)==0){h[p+(d<<6)+32>>3]=C}else{if(C<0.0){h[p+(d<<6)+32>>3]=-8.988465674311579e+307;a9=2;Y=6749;break L8971}if(C==0.0){h[p+(d<<6)+32>>3]=-8.988465674311579e+307;a9=1;Y=6749;break L8971}else{l=+_(+C);h[p+(d<<6)+32>>3]=l/+h[64800+(O*688&-1)>>3];break}}}while(0);if(!((a[b+23|0]&1)==0&(a$|0)==0)){a9=a$;Y=6749;break}G=c[N>>2]|0;if((G|0)<0){ba=G;bb=0;break}F=64712+(G*688&-1)|0;if(C<+h[F>>3]){h[F>>3]=C;bc=c[N>>2]|0}else{bc=G}G=64664+(bc*688&-1)|0;do{if(C<+h[G>>3]){if((c[64648+(bc*688&-1)>>2]&1|0)==0){a9=1;Y=6749;break L8971}if((c[64728+(bc*688&-1)>>2]&1|0)==0){h[G>>3]=C;break}l=+h[64736+(bc*688&-1)>>3];if(l>C){h[G>>3]=l;a9=1;Y=6749;break L8971}else{h[G>>3]=C;break}}}while(0);G=c[N>>2]|0;F=64720+(G*688&-1)|0;if(C>+h[F>>3]){h[F>>3]=C;bd=c[N>>2]|0}else{bd=G}G=64672+(bd*688&-1)|0;if(C<=+h[G>>3]){be=0;bf=bd;Y=6750;break}if((c[64648+(bd*688&-1)>>2]&2|0)==0){a9=1;Y=6749;break}if((c[64732+(bd*688&-1)>>2]&2|0)==0){h[G>>3]=C;a9=0;Y=6749;break}l=+h[64760+(bd*688&-1)>>3];if(l<C){h[G>>3]=l;a9=1;Y=6749;break}else{h[G>>3]=C;a9=0;Y=6749;break}}else{h[p+(d<<6)+32>>3]=-8.988465674311579e+307;a9=2;Y=6749}}while(0);if((Y|0)==6749){be=a9;bf=c[N>>2]|0;Y=6750}if((Y|0)==6750){if((bf|0)==99){W=be;break}else{ba=bf;bb=be}}if(!(B>-8.988465674311579e+307&B<8.988465674311579e+307)){h[p+(d<<6)+40>>3]=-8.988465674311579e+307;W=2;break}do{if((a[64788+(ba*688&-1)|0]&1)==0){h[p+(d<<6)+40>>3]=B}else{if(B<0.0){h[p+(d<<6)+40>>3]=-8.988465674311579e+307;W=2;break L8579}if(B==0.0){h[p+(d<<6)+40>>3]=-8.988465674311579e+307;W=1;break L8579}else{l=+_(+B);h[p+(d<<6)+40>>3]=l/+h[64800+(ba*688&-1)>>3];break}}}while(0);if(!((a[b+23|0]&1)==0&(bb|0)==0)){W=bb;break}O=c[N>>2]|0;if((O|0)<0){W=0;break}G=64712+(O*688&-1)|0;if(B<+h[G>>3]){h[G>>3]=B;bg=c[N>>2]|0}else{bg=O}O=64664+(bg*688&-1)|0;do{if(B<+h[O>>3]){if((c[64648+(bg*688&-1)>>2]&1|0)==0){W=1;break L8579}if((c[64728+(bg*688&-1)>>2]&1|0)==0){h[O>>3]=B;break}l=+h[64736+(bg*688&-1)>>3];if(l>B){h[O>>3]=l;W=1;break L8579}else{h[O>>3]=B;break}}}while(0);O=c[N>>2]|0;G=64720+(O*688&-1)|0;if(B>+h[G>>3]){h[G>>3]=B;bh=c[N>>2]|0}else{bh=O}O=64672+(bh*688&-1)|0;if(B<=+h[O>>3]){W=0;break}if((c[64648+(bh*688&-1)>>2]&2|0)==0){W=1;break}if((c[64732+(bh*688&-1)>>2]&2|0)==0){h[O>>3]=B;W=0;break}l=+h[64760+(bh*688&-1)>>3];if(l<B){h[O>>3]=l;W=1;break}else{h[O>>3]=B;W=0;break}}}while(0);bh=b+312|0;N=c[bh>>2]|0;L9228:do{if((N|0)==99){h[p+(d<<6)+24>>3]=m;bi=W}else{if(!(m>-8.988465674311579e+307&m<8.988465674311579e+307)){h[p+(d<<6)+24>>3]=-8.988465674311579e+307;bi=2;break}do{if((a[64788+(N*688&-1)|0]&1)==0){h[p+(d<<6)+24>>3]=m}else{if(m<0.0){h[p+(d<<6)+24>>3]=-8.988465674311579e+307;bi=2;break L9228}if(m==0.0){h[p+(d<<6)+24>>3]=-8.988465674311579e+307;bi=1;break L9228}else{B=+_(+m);h[p+(d<<6)+24>>3]=B/+h[64800+(N*688&-1)>>3];break}}}while(0);if(!((a[b+23|0]&1)==0&(W|0)==0)){bi=W;break}bg=c[bh>>2]|0;if((bg|0)<0){bi=0;break}bb=64712+(bg*688&-1)|0;if(+h[bb>>3]>m){h[bb>>3]=m;bj=c[bh>>2]|0}else{bj=bg}bg=64664+(bj*688&-1)|0;do{if(+h[bg>>3]>m){if((c[64648+(bj*688&-1)>>2]&1|0)==0){bi=1;break L9228}if((c[64728+(bj*688&-1)>>2]&1|0)==0){h[bg>>3]=m;break}B=+h[64736+(bj*688&-1)>>3];if(B>m){h[bg>>3]=B;bi=1;break L9228}else{h[bg>>3]=m;break}}}while(0);bg=c[bh>>2]|0;bb=64720+(bg*688&-1)|0;if(+h[bb>>3]<m){h[bb>>3]=m;bk=c[bh>>2]|0}else{bk=bg}bg=64672+(bk*688&-1)|0;if(+h[bg>>3]>=m){bi=0;break}if((c[64648+(bk*688&-1)>>2]&2|0)==0){bi=1;break}if((c[64732+(bk*688&-1)>>2]&2|0)==0){h[bg>>3]=m;bi=0;break}B=+h[64760+(bk*688&-1)>>3];if(B<m){h[bg>>3]=B;bi=1;break}else{h[bg>>3]=m;bi=0;break}}}while(0);if((c[b+64>>2]|0)!=6){i=n;return}bk=b+316|0;bh=c[bk>>2]|0;if((bh|0)==0){i=n;return}bj=bh+(d<<3)|0;m=+h[bj>>3];if(!(m>-8.988465674311579e+307&m<8.988465674311579e+307)){i=n;return}do{if((a[66852]&1)==0){bl=m}else{if(m<0.0){i=n;return}if(m!=0.0){B=+_(+m);bl=B/+h[8358];break}h[bj>>3]=-8.988465674311579e+307;i=n;return}}while(0);h[bj>>3]=bl;if(!((a[b+23|0]&1)==0&(bi|0)==0)){i=n;return}bl=+h[(c[bk>>2]|0)+(d<<3)>>3];if(bl<+h[8347]){h[8347]=bl;bm=+h[(c[bk>>2]|0)+(d<<3)>>3]}else{bm=bl}do{if(bm<+h[8341]){if((c[16678]&1|0)==0){i=n;return}if((c[16698]&1|0)==0){h[8341]=bm;break}bl=+h[8350];if(bl<=bm){h[8341]=bm;break}h[8341]=bl;i=n;return}}while(0);bm=+h[(c[bk>>2]|0)+(d<<3)>>3];if(bm>+h[8348]){h[8348]=bm;bn=+h[(c[bk>>2]|0)+(d<<3)>>3]}else{bn=bm}if(bn<=+h[8342]){i=n;return}if((c[16678]&2|0)==0){i=n;return}if((c[16699]&2|0)==0){h[8342]=bn;i=n;return}bm=+h[8353];if(bm<bn){h[8342]=bm;i=n;return}else{h[8342]=bn;i=n;return}}function iY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;if((a|0)==0){return}else{b=a}while(1){a=c[b>>2]|0;d=c[b+16>>2]|0;if((d|0)!=0){uu(d)}d=b+256|0;e=c[d>>2]|0;if((e|0)!=0){f=e;while(1){e=c[f>>2]|0;uu(c[f+4>>2]|0);uu(c[d>>2]|0);c[d>>2]=e;if((e|0)==0){break}else{f=e}}}f=b+260|0;d=c[f>>2]|0;if((d|0)!=0){e=d;while(1){d=c[e>>2]|0;g=c[e+12>>2]|0;if((g|0)!=0){uu(g)}uu(e);c[f>>2]=d;if((d|0)==0){break}else{e=d}}}e=b+224|0;f=c[e>>2]|0;if((f|0)!=0){d=c[f+64>>2]|0;if((d|0)==0){h=f}else{uu(d);h=f}while(1){f=c[h+60>>2]|0;if((f|0)!=0){uu(f)}f=c[h+64>>2]|0;if(!((f|0)==0|(f|0)==(d|0))){uu(f)}f=c[h>>2]|0;uu(h);if((f|0)==0){break}else{h=f}}c[e>>2]=0}uu(b);if((a|0)==0){break}else{b=a}}return}function iZ(){var d=0,e=0,f=0,j=0,k=0.0,l=0.0,m=0,n=0.0,o=0.0,p=0,q=0.0,r=0,s=0.0,t=0.0,u=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0,C=0.0,D=0.0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0,M=0,N=0,O=0,P=0;d=i;i=i+24|0;e=d|0;a[37384]=1;do{if((c[5094]|0)==1){if(a[20368]|0){break}a[20368]=1;g[5090]=+g[3538];g[5088]=+g[3536];g[5086]=+g[3534];g[3538]=180.0;g[3536]=0.0;g[3534]=1.2999999523162842;c[16336]=c[16336]^2;c[17024]=c[17024]^2}}while(0);f=a[32936]&1;do{if(f<<24>>24!=0){if((aY(24544,175824)|0)!=0){break}b[12272]=117;w=118;a[24595]=w&255;w=w>>8;a[24596|0]=w&255}}while(0);j=c[16507]|0;c[16506]=j;if((j&3|0)==0){k=+h[8258];l=+h[8257];if(k<l){m=66056;n=k}else{o=l;p=6889}}else{o=+h[8257];p=6889}if((p|0)==6889){m=66064;n=o}h[8255]=n;h[8256]=+h[m>>3];if((a[66164]&1)==0){q=0.0}else{q=+_(+(+h[8271]))}h[8272]=q;h[8261]=8.988465674311579e+307;h[8262]=-8.988465674311579e+307;m=c[16335]|0;c[16334]=m;if((m&3|0)==0){q=+h[8172];n=+h[8171];if(q<n){r=65368;s=q}else{t=n;p=6895}}else{t=+h[8171];p=6895}if((p|0)==6895){r=65376;s=t}h[8169]=s;h[8170]=+h[r>>3];if((a[65476]&1)==0){u=0.0}else{u=+_(+(+h[8185]))}h[8186]=u;h[8175]=8.988465674311579e+307;h[8176]=-8.988465674311579e+307;r=c[16163]|0;c[16162]=r;do{if((r&3|0)==0){u=+h[8086];s=+h[8085];if(u>=s){x=s;y=u;p=6902;break}h[8083]=u;z=s}else{x=+h[8085];y=+h[8086];p=6902}}while(0);if((p|0)==6902){h[8083]=(r&1|0)==0?x:8.988465674311579e+307;z=(r&2|0)==0?y:-8.988465674311579e+307}h[8084]=z;if((a[64788]&1)==0){A=0.0}else{A=+_(+(+h[8099]))}h[8100]=A;h[8089]=8.988465674311579e+307;h[8090]=-8.988465674311579e+307;r=c[17711]|0;c[17710]=r;if((r&3|0)==0){A=+h[8860];z=+h[8859];if(A<z){B=70872;C=A}else{D=z;p=6908}}else{D=+h[8859];p=6908}if((p|0)==6908){B=70880;C=D}h[8857]=C;h[8858]=+h[B>>3];a[70980]=0;h[8873]=1.0;h[8874]=0.0;h[8863]=8.988465674311579e+307;h[8864]=-8.988465674311579e+307;B=c[17883]|0;c[17882]=B;if((B&3|0)==0){C=+h[8946];D=+h[8945];if(C<D){E=71560;F=C}else{G=D;p=6912}}else{G=+h[8945];p=6912}if((p|0)==6912){E=71568;F=G}h[8943]=F;h[8944]=+h[E>>3];a[71668]=0;h[8959]=1.0;h[8960]=0.0;h[8949]=8.988465674311579e+307;h[8950]=-8.988465674311579e+307;E=c[16679]|0;c[16678]=E;do{if((E&3|0)==0){F=+h[8344];G=+h[8343];if(F>=G){H=G;I=F;p=6917;break}h[8341]=F;J=G}else{H=+h[8343];I=+h[8344];p=6917}}while(0);if((p|0)==6917){h[8341]=(E&1|0)==0?H:8.988465674311579e+307;J=(E&2|0)==0?I:-8.988465674311579e+307}h[8342]=J;if((a[66852]&1)==0){K=0.0}else{K=+_(+(+h[8357]))}h[8358]=K;h[8347]=8.988465674311579e+307;h[8348]=-8.988465674311579e+307;if((c[3524]|0)==0){uf(c[13898]|0,135392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}E=f<<24>>24!=0;f=E?10:1;B=dr(E?9:2,-1)|0;do{if((c[5094]|0)==1){if((a[32936]&1)!=0){break}if(!(a[20368]|0)){break}a[20368]=0;g[3538]=+g[5090];g[3536]=+g[5088];g[3534]=+g[5086];c[16336]=c[16336]^2;c[17024]=c[17024]^2}}while(0);E=dr(f,-1)|0;f=a[32936]|0;do{if((c[5094]|0)==1){if((f&1)!=0){break}if(a[20368]|0){break}a[20368]=1;g[5090]=+g[3538];g[5088]=+g[3536];g[5086]=+g[3534];g[3538]=180.0;g[3536]=0.0;g[3534]=1.2999999523162842;c[16336]=c[16336]^2;c[17024]=c[17024]^2}}while(0);do{if((f&1)!=0){dq(2);do{if((c[5094]|0)==1){if(!(a[20368]|0)){break}a[20368]=0;g[3538]=+g[5090];g[3536]=+g[5088];g[3534]=+g[5086];c[16336]=c[16336]^2;c[17024]=c[17024]^2}}while(0);dq(1);if((c[5094]|0)!=1){break}if(a[20368]|0){break}a[20368]=1;g[5090]=+g[3538];g[5088]=+g[3536];g[5086]=+g[3534];g[3538]=180.0;g[3536]=0.0;g[3534]=1.2999999523162842;c[16336]=c[16336]^2;c[17024]=c[17024]^2}}while(0);dq(0);do{if((c[16506]&3|0)==0){K=+h[8256];J=+h[8255];if(K>=J){p=6940;break}h[8255]=K;h[8256]=J;L=1}else{p=6940}}while(0);if((p|0)==6940){L=(c[16508]|0)>>>1&1}a[66036]=L;do{if((c[16334]&3|0)==0){J=+h[8170];K=+h[8169];if(J>=K){p=6944;break}h[8169]=J;h[8170]=K;M=1}else{p=6944}}while(0);if((p|0)==6944){M=(c[16336]|0)>>>1&1}a[65348]=M;do{if((c[16162]&3|0)==0){K=+h[8084];J=+h[8083];if(K>=J){p=6948;break}h[8083]=K;h[8084]=J;N=1}else{p=6948}}while(0);if((p|0)==6948){N=(c[16164]|0)>>>1&1}a[64660]=N;N=e;M=e+16|0;L=0;do{f=64944+(L*688&-1)|0;r=c[f>>2]|0;if((r|0)==0){p=6957}else{c[N>>2]=c[7254];c[N+4>>2]=c[7255];c[N+8>>2]=c[7256];c[N+12>>2]=c[7257];c[N+16>>2]=c[7258];c[N+20>>2]=c[7259];m=e;j=r;L9464:while(1){r=j;while(1){if((c[r+12>>2]|0)>=0){break}uu(c[r+8>>2]|0);O=c[r+16>>2]|0;uu(r);if((O|0)==0){P=m;break L9464}else{r=O}}c[m+16>>2]=r;O=c[r+16>>2]|0;if((O|0)==0){P=r;break}else{m=r;j=O}}c[P+16>>2]=0;j=c[M>>2]|0;c[f>>2]=j;if((j|0)==0){p=6957}}do{if((p|0)==6957){p=0;j=64920+(L*688&-1)|0;if((c[j>>2]|0)!=3){break}c[j>>2]=1}}while(0);L=L+1|0;}while(L>>>0<11);if((B|0)>-1){L=c[1054]|0;p=c[L+(B*40&-1)+36>>2]|0;M=(p|0)>49?49:p;p=c[10036]|0;P=c[L+(B*40&-1)+32>>2]|0;B=0;while(1){L=B+1|0;a[B+55600|0]=a[p+P|0]|0;if((L|0)==(M|0)){break}else{P=P+1|0;B=L}}a[M+55600|0]=0}else{uB(55600,24544)}if((E|0)<=-1){uB(55651,24595);i_();i=d;return}M=c[1054]|0;B=c[M+(E*40&-1)+36>>2]|0;P=(B|0)>49?49:B;B=c[10036]|0;p=c[M+(E*40&-1)+32>>2]|0;E=0;while(1){M=E+1|0;a[E+55651|0]=a[B+p|0]|0;if((M|0)==(P|0)){break}else{p=p+1|0;E=M}}a[P+55651|0]=0;i_();i=d;return}function i_(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,U=0,V=0,W=0,X=0,Y=0,$=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aZ=0,a_=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,ba=0,bb=0,bc=0,bd=0,be=0,bf=0,bg=0,bh=0,bi=0,bj=0,bk=0,bl=0,bm=0,bn=0,bo=0,bp=0,bq=0,br=0,bs=0,bt=0,bu=0,bv=0,bw=0,bx=0,by=0,bz=0,bB=0,bC=0,bD=0,bE=0,bF=0,bG=0,bH=0,bI=0,bJ=0,bK=0,bL=0,bM=0,bN=0,bO=0,bQ=0,bR=0,bS=0,bT=0,bU=0,bV=0,bW=0,bX=0,bY=0,bZ=0,b_=0,b$=0,b0=0,b1=0,b2=0,b3=0,b4=0,b5=0,b6=0,b7=0,b8=0,b9=0,ca=0,cb=0,cc=0,cd=0,ce=0,cf=0,cg=0,ch=0,ci=0,cj=0,ck=0,cl=0,cm=0,cn=0,co=0,cp=0,cq=0,cr=0,cs=0,ct=0,cu=0,cv=0,cw=0,cx=0,cy=0,cz=0,cA=0,cB=0,cC=0,cD=0,cE=0,cF=0,cG=0,cH=0.0,cI=0,cJ=0,cK=0,cL=0,cM=0,cN=0,cO=0.0,cP=0,cQ=0,cR=0.0,cS=0.0,cT=0.0,cU=0.0,cV=0,cW=0.0,cX=0.0,cY=0.0,cZ=0.0,c_=0.0,c$=0.0,c0=0,c1=0.0,c2=0,c3=0.0,c4=0,c5=0.0,c6=0,c7=0.0,c8=0.0,c9=0.0,da=0.0,de=0,df=0.0,dg=0.0,dh=0,di=0,dj=0.0,dl=0.0,dm=0.0,dn=0.0,dp=0.0,dq=0.0,dr=0.0,ds=0.0,dt=0.0,du=0.0,dv=0.0,dw=0.0,dx=0.0,dy=0.0,dz=0.0,dA=0.0,dB=0.0,dC=0.0,dD=0,dE=0,dF=0,dG=0,dH=0,dI=0,dJ=0,dK=0,dL=0,dM=0,dN=0.0,dO=0,dP=0,dQ=0,dR=0,dS=0,dU=0,dV=0,dW=0,dX=0,dY=0,dZ=0,d_=0.0,d$=0.0,d0=0.0,d1=0.0,d2=0,d3=0.0,d4=0.0,d5=0.0,d6=0.0,d7=0.0,d8=0.0,d9=0.0,ea=0.0,eb=0.0,ec=0.0,ed=0.0,ee=0.0,ef=0,eg=0.0,eh=0,ei=0,ej=0,ek=0,el=0,em=0,en=0,eo=0,eq=0,er=0,es=0,et=0,eu=0,ev=0,ew=0,ex=0,eA=0,eB=0,eD=0,eE=0,eF=0,eG=0,eH=0,eI=0,eJ=0,eK=0,eN=0,eO=0,eP=0,eQ=0,eR=0,eS=0,eT=0,eU=0,eV=0,eW=0.0,eX=0.0,eY=0.0,eZ=0.0,e_=0,e$=0,e0=0,e1=0,e2=0,e3=0,e4=0,e5=0,e8=0,e9=0,fa=0,fb=0,fc=0,fd=0,fe=0,ff=0,fg=0,fh=0,fi=0,fj=0,fk=0.0,fl=0,fm=0,fn=0.0;b=i;i=i+272|0;d=b|0;e=b+32|0;f=b+40|0;g=b+128|0;j=b+152|0;k=b+200|0;l=b+256|0;n=b+264|0;o=c[10828]|0;if((o|0)!=0&(c[7952]|0)>0){iY(o)}c[7952]=0;c[10828]=0;c[200]=2;c[144]=1;c[34]=0;a[872]=0;o=c[13898]|0;c[7774]=iw()|0;p=c[13898]|0;if((p|0)>=(c[8272]|0)){q=p;uf(q,105216,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}r=b+96|0;s=k;t=k+4|0;u=k+16|0;w=k+24|0;x=k+8|0;y=k|0;z=k+40|0;A=k+44|0;B=k+32|0;C=g|0;D=j|0;E=j+8|0;F=f|0;G=f+8|0;H=f+16|0;I=f+24|0;J=f+32|0;K=f+40|0;L=f+48|0;f=b+8|0;M=b+176|0;N=0;O=0;U=0;V=0;W=0;X=0;Y=0;$=0;ab=0;ac=0;ad=43312;ae=p;L9498:while(1){p=(V|0)==0;af=Y;ag=ac;ah=ae;while(1){ai=c[1054]|0;L9502:do{if((a[ai+(ah*40&-1)|0]&1)!=0){aj=c[ai+(ah*40&-1)+36>>2]|0;ak=ai+(ah*40&-1)+32|0;al=c[10036]|0;am=0;while(1){if((am|0)>=(aj|0)){break}if((a[al+((c[ak>>2]|0)+am|0)|0]|0)==(a[am+103664|0]|0)){am=am+1|0}else{break L9502}}if((am|0)==1){an=af;ao=ag;ap=N;aq=V;ar=$;as=ab;at=ah;au=6983;break L9498}}}while(0);if(p){av=af?ag:ah}else{av=ag}if((t9(ah)|0)==0){au=6995;break}dT();ai=c[13898]|0;ak=(c[8272]|0)>(ai|0);if(!ak){an=1;ao=av;ap=N;aq=V;ar=$;as=ab;at=ai;au=6983;break L9498}al=c[1054]|0;if((a[al+(ai*40&-1)|0]&1)==0){af=1;ag=av;ah=ai;continue}aj=c[al+(ai*40&-1)+36>>2]|0;aw=al+(ai*40&-1)+32|0;al=c[10036]|0;ax=0;while(1){if((ax|0)>=(aj|0)){au=6994;break}if((a[al+((c[aw>>2]|0)+ax|0)|0]|0)==(a[ax+148464|0]|0)){ax=ax+1|0}else{break}}if((au|0)==6994){au=0;if((ax|0)==1){ay=ad;az=av;aA=ab;aB=$;aC=af;aD=X;aE=W;aF=V;aG=U;aH=O;aJ=N;break}}if(ak){af=1;ag=av;ah=ai}else{an=1;ao=av;ap=N;aq=V;ar=$;as=ab;at=ai;au=6983;break L9498}}do{if((au|0)==6995){au=0;if(af){aK=av}else{aK=(a[32936]&1)==0|p?c[13898]|0:av}c[11670]=31112;ah=iu(0)|0;c[11670]=0;if((ah|0)==0){ag=N+1|0;if((a[32936]&1)==0){aL=V}else{aL=(V+2|0)%3&-1}aw=c[ad>>2]|0;al=(a[38984]&1)==0;L9562:do{if((aw|0)==0){if(al){aM=i0(c[6352]|0,c[9344]|0,c[6350]|0,c[9342]|0)|0}else{aM=i0(c[9344]|0,0,0,c[9342]|0)|0}c[ad>>2]=aM;aN=aM}else{if(!al){aj=c[9344]|0;aO=c[9342]|0;aP=aw+260|0;aQ=c[aP>>2]|0;if((aQ|0)!=0){aR=aQ;while(1){aQ=c[aR>>2]|0;if((aR|0)!=0){aS=c[aR+12>>2]|0;if((aS|0)!=0){uu(aS)}uu(aR)}if((aQ|0)==0){break}else{aR=aQ}}}c[aP>>2]=0;if((aO|0)>0&(aj|0)>0){aR=0;while(1){am=hu(aj)|0;c[am>>2]=c[aP>>2];c[aP>>2]=am;am=aR+1|0;if((am|0)<(aO|0)){aR=am}else{aN=aw;break L9562}}}else{c[aP>>2]=0;aN=aw;break}}aR=c[6352]|0;aO=c[9344]|0;aj=c[6350]|0;am=c[9342]|0;aQ=aw+260|0;aS=c[aQ>>2]|0;if((aS|0)!=0){aT=aS;while(1){aS=c[aT>>2]|0;if((aT|0)!=0){aU=c[aT+12>>2]|0;if((aU|0)!=0){uu(aU)}uu(aT)}if((aS|0)==0){break}else{aT=aS}}}c[aQ>>2]=0;if(!((am|0)>0&(aR|0)>0)){c[aQ>>2]=0;aN=aw;break}if((aO|0)>0){aT=0;while(1){aP=hu(aj)|0;c[aP>>2]=c[aQ>>2];c[aQ>>2]=aP;aP=aT+1|0;if((aP|0)<(aO|0)){aT=aP}else{aV=0;break}}}else{aV=0}while(1){aT=hu(aR)|0;c[aT>>2]=c[aQ>>2];c[aQ>>2]=aT;aT=aV+1|0;if((aT|0)<(am|0)){aV=aT}else{aN=aw;break}}}}while(0);c[aN+8>>2]=2;c[aN+244>>2]=1;c[aN+12>>2]=c[10058];c[aN+252>>2]=c[9342];aW=(c[13898]|0)-1|0;aX=ab;aZ=1;a_=aL;a$=aN;a0=ag}else{if(!((a[32936]&1)==0|p)){au=6999;break L9498}do{if(!ab){aw=c[16506]|0;if((aw&1|0)!=0){h[8255]=8.988465674311579e+307}if((aw&2|0)!=0){h[8256]=-8.988465674311579e+307}aw=c[16334]|0;if((aw&1|0)!=0){h[8169]=8.988465674311579e+307}if((aw&2|0)==0){break}h[8170]=-8.988465674311579e+307}}while(0);ag=c[ad>>2]|0;if((ag|0)==0){uE(M|0,0,24);aw=ut(272)|0;if((aw|0)==0){gk();al=ut(272)|0;if((al|0)==0){au=7012;break L9498}else{a1=al}}else{a1=aw}aw=a1;uE(a1|0,0,272);c[a1+28>>2]=-2;al=a1+32|0;c[al>>2]=0;c[al+4>>2]=0;h[a1+40>>3]=1.0;h[a1+48>>3]=-2.0;al=a1+56|0;c[al>>2]=c[M>>2];c[al+4>>2]=c[M+4>>2];c[al+8>>2]=c[M+8>>2];c[al+12>>2]=c[M+12>>2];c[al+16>>2]=c[M+16>>2];c[al+20>>2]=c[M+20>>2];c[a1+80>>2]=-1;c[a1+84>>2]=0;al=a1+88|0;c[al>>2]=c[12872];c[al+4>>2]=c[12873];c[al+8>>2]=c[12874];c[al+12>>2]=c[12875];c[al+16>>2]=c[12876];c[al+20>>2]=c[12877];c[al+24>>2]=c[12878];c[al+28>>2]=c[12879];c[al+32>>2]=c[12880];c[al+36>>2]=c[12881];c[al+40>>2]=c[12882];c[al+44>>2]=c[12883];c[al+48>>2]=c[12884];c[al+52>>2]=c[12885];c[a1+144>>2]=1;h[a1+152>>3]=0.0;c[a1+160>>2]=0;h[a1+168>>3]=15.0;h[a1+176>>3]=90.0;c[a1+184>>2]=0;c[ad>>2]=aw;a2=aw}else{a2=ag}c[a2+8>>2]=3;c[a2+12>>2]=c[12890];c[11856]=2;ag=ey(ah,7,a2)|0;if((a[47584]&1)!=0){c[a2+244>>2]=1}aw=(c[13898]|0)-1|0;c[a2+4>>2]=aw;al=c[7774]|0;if((al|0)==0){a3=0}else{a3=c[al+32>>2]|0}c[a2+248>>2]=a3;if((ag|0)<3){if((c[16546]|0)==1){au=7020;break L9498}if((c[16374]|0)==1){au=7022;break L9498}}c[12210]=2;c[12211]=1;c[12212]=0;aW=aw;aX=1;aZ=$;a_=V;a$=a2;a0=N}a4=a$+16|0;aw=c[a4>>2]|0;if((aw|0)!=0){uu(aw);c[a4>>2]=0}aw=a$+24|0;ag=a$+56|0;a[ag]=0;al=a$+28|0;c[al>>2]=X;ai=a$+32|0;c[ai>>2]=W;ak=a$+240|0;c[ak>>2]=X;ax=X+1|0;do{if((a[30080]&1)==0){am=aw|0;aQ=c[am>>2]|0;aR=c[8798]|0;aT=(aR|0)>0;aO=ax;L9612:while(1){aj=43264;while(1){a5=c[aj>>2]|0;if((a5|0)==0){break}if((c[a5+4>>2]|0)==(aO|0)){break L9612}else{aj=a5|0}}a6=aO-1|0;if(!((aO|0)>(aR|0)&aT)){au=7067;break}aO=((a6|0)%(aR|0)&-1)+1|0}if((au|0)==7067){au=0;c[al>>2]=a6;c[a$+64>>2]=1;c[a$+68>>2]=a6;c[ai>>2]=a6;break}aR=aw;aT=a5+8|0;c[aR>>2]=c[aT>>2];c[aR+4>>2]=c[aT+4>>2];c[aR+8>>2]=c[aT+8>>2];c[aR+12>>2]=c[aT+12>>2];c[aR+16>>2]=c[aT+16>>2];c[aR+20>>2]=c[aT+20>>2];c[aR+24>>2]=c[aT+24>>2];c[aR+28>>2]=c[aT+28>>2];c[aR+32>>2]=c[aT+32>>2];c[aR+36>>2]=c[aT+36>>2];c[aR+40>>2]=c[aT+40>>2];c[aR+44>>2]=c[aT+44>>2];c[aR+48>>2]=c[aT+48>>2];c[aR+52>>2]=c[aT+52>>2];c[am>>2]=aQ;if((c[(c[3524]|0)+96>>2]&1024|0)!=0){c[al>>2]=aO;a[ag]=0;break}if((a[ag]&1)!=0){break}c[a$+64>>2]=1;c[a$+68>>2]=c[al>>2]}else{lK(aw,ax)}}while(0);ah=a$+12|0;aT=a$+224|0;aR=a$+80|0;aj=a$+88|0;aP=aw;aS=aj;aU=a$+80|0;a7=a$+84|0;a8=a$+144|0;a9=a$+152|0;ba=a$+160|0;bb=a$+168|0;bc=a$+176|0;bd=a$+184|0;be=aj|0;aj=a$+92|0;bf=a$+128|0;bg=a$+132|0;bh=a$+96|0;bi=a$+120|0;bj=a$+238|0;bk=a$+237|0;bl=a$+236|0;bm=a$+8|0;bn=a$+232|0;bo=a$+264|0;bp=a$+22|0;bq=(U|0)==0;br=(O|0)==0;bs=a$+20|0;bt=a$;bu=(a_|0)==0;bv=0;bw=0;bx=0;by=0;bz=0;L9627:while(1){bB=c[13898]|0;bC=c[8272]|0;L9629:do{if((bB|0)<(bC|0)){bD=c[1054]|0;bE=a[bD+(bB*40&-1)|0]|0;if((bE&1)==0){bF=bD;bG=bE;break}bH=c[bD+(bB*40&-1)+36>>2]|0;bI=bD+(bB*40&-1)+32|0;bJ=c[10036]|0;bK=0;while(1){if((bK|0)>=(bH|0)){break}if((a[bJ+((c[bI>>2]|0)+bK|0)|0]|0)==(a[bK+103664|0]|0)){bK=bK+1|0}else{bF=bD;bG=bE;break L9629}}if((bK|0)!=1|bw^1){bF=bD;bG=bE}else{break L9627}}else{if(bw){break L9627}bI=c[1054]|0;bF=bI;bG=a[bI+(bB*40&-1)|0]|0}}while(0);aO=c[bF+(bB*40&-1)+36>>2]|0;aQ=c[bF+(bB*40&-1)+32>>2]|0;am=(bG&1)==0;L9639:do{if((aO|0)>0&(am^1)){bI=c[10036]|0;bJ=0;bH=0;bL=aQ;while(1){if((a[bJ+224032|0]|0)==(a[bI+(bJ+bL|0)|0]|0)){bM=bL;bN=bH}else{if((bJ|0)!=1){break}bM=bL-1|0;bN=1}bO=bJ+1|0;if((bO|0)<(bN+aO|0)){bJ=bO;bH=bN;bL=bM}else{au=7083;break}}do{if((au|0)==7083){au=0;if((bN|0)==0){if(!((bJ|0)==0|(bJ|0)==5)){break}}if(bz){bQ=bB;au=8109;break L9498}a[bs]=a[36231]&1^1;do{if((a[32936]&1)!=0){if(!bu){au=7088;break L9498}if(!bq){a[U]=0}if(br){break}a[O]=0}}while(0);bR=(c[13898]|0)+1|0;c[13898]=bR;bL=c[1054]|0;bH=c[bL+(bR*40&-1)+36>>2]|0;bI=c[bL+(bR*40&-1)+32>>2]|0;bE=(a[bL+(bR*40&-1)|0]&1)==0;L9661:do{if((bH|0)>0&(bE^1)){bL=c[10036]|0;bD=0;bK=0;bO=bI;while(1){if((a[bD+137208|0]|0)==(a[bL+(bD+bO|0)|0]|0)){bS=bO;bT=bK}else{if((bD|0)!=3){break L9661}bS=bO-1|0;bT=1}bU=bD+1|0;if((bU|0)<(bT+bH|0)){bD=bU;bK=bT;bO=bS}else{break}}if((bT|0)==0){if(!((bD|0)==2|(bD|0)==12)){break}}eM(bt);bv=bv;bw=bw;bx=bx;by=by;bz=1;continue L9627}}while(0);if((bR|0)>=(c[8272]|0)){au=7110;break L9498}L9675:do{if(!bE){bO=c[10036]|0;bK=0;while(1){if((bK|0)>=(bH|0)){break}if((a[bO+(bI+bK|0)|0]|0)==(a[bK+103664|0]|0)){bK=bK+1|0}else{break L9675}}if((bK|0)==1){au=7110;break L9498}}}while(0);a[14176]=1;is(j);a[14176]=0;if((c[D>>2]|0)!=3){au=7109;break L9498}bI=c[E>>2]|0;c[a4>>2]=bI;if((bI|0)==0){au=8108;break L9498}else{bv=bv;bw=bw;bx=bx;by=by;bz=1;continue L9627}}}while(0);if(am){break}L9685:do{if((aO|0)>0){bJ=c[10036]|0;bI=0;bH=0;bE=aQ;while(1){if((a[bI+202e3|0]|0)==(a[bJ+(bI+bE|0)|0]|0)){bV=bE;bW=bH}else{if((bI|0)!=3){break L9685}bV=bE-1|0;bW=1}bO=bI+1|0;if((bO|0)<(bW+aO|0)){bI=bO;bH=bW;bE=bV}else{break}}if((bW|0)==0){if(!((bI|0)==2|(bI|0)==7)){break}}if(bz){bQ=bB;au=8110;break L9498}bE=bB+1|0;c[13898]=bE;bH=(a[bF+(bE*40&-1)|0]&1)==0;if(bH){au=7125}else{bJ=c[10036]|0;bO=a[bJ+(c[bF+(bE*40&-1)+32>>2]|0)|0]|0;if((bO<<24>>24|0)==39|(bO<<24>>24|0)==34){bX=bJ;au=7135}else{au=7125}}L9700:do{if((au|0)==7125){au=0;bJ=c[10810]|0;if((bJ|0)==0){break}bO=bF+(bE*40&-1)+36|0;bD=bF+(bE*40&-1)+32|0;bL=c[10036]|0;bU=bJ;L9703:while(1){bJ=c[bU+4>>2]|0;L9705:do{if(!((bC|0)<=(bE|0)|bH)){bY=c[bO>>2]|0;bZ=0;while(1){if((bZ|0)>=(bY|0)){break}if((a[bL+((c[bD>>2]|0)+bZ|0)|0]|0)==(a[bJ+bZ|0]|0)){bZ=bZ+1|0}else{break L9705}}if((a[bJ+bZ|0]|0)==0){break L9703}}}while(0);bJ=c[bU>>2]|0;if((bJ|0)==0){break L9700}else{bU=bJ}}if((a[bU+8|0]&1)!=0){break}if((c[bU+16>>2]|0)==3){bX=bL;au=7135}}}while(0);L9714:do{if((au|0)==7135){au=0;if((bE|0)>=(bC|0)){break}L9717:do{if(!bH){bI=c[bF+(bE*40&-1)+36>>2]|0;bD=bF+(bE*40&-1)+32|0;bO=0;while(1){if((bO|0)>=(bI|0)){break}if((a[bX+((c[bD>>2]|0)+bO|0)|0]|0)==(a[bO+103664|0]|0)){bO=bO+1|0}else{break L9717}}if((bO|0)==1){break L9714}}}while(0);a[14176]=1;is(g);a[14176]=0;if((c[C>>2]|0)==3){break}c[13898]=bE}}while(0);a[bp]=1;if(!bq){a[U]=0}if(br){bv=bv;bw=bw;bx=bx;by=by;bz=1;continue L9627}a[O]=0;bv=bv;bw=bw;bx=bx;by=by;bz=1;continue L9627}}while(0);if(!((aO|0)>0&(am^1))){break}bE=c[10036]|0;bH=0;bL=0;bU=aQ;while(1){if((a[bH+196448|0]|0)==(a[bE+(bH+bU|0)|0]|0)){b_=bU;b$=bL}else{if((bH|0)!=1){break}b_=bU-1|0;b$=1}bD=bH+1|0;if((bD|0)<(b$+aO|0)){bH=bD;bL=b$;bU=b_}else{au=7153;break}}do{if((au|0)==7153){au=0;if((b$|0)==0){if(!((bH|0)==0|(bH|0)==4)){break}}if(by){bQ=bB;au=8111;break L9498}bU=bB+1|0;c[13898]=bU;bL=c[bF+(bU*40&-1)+36>>2]|0;bE=c[bF+(bU*40&-1)+32>>2]|0;bD=(a[bF+(bU*40&-1)|0]&1)==0;bU=(bL|0)>0;bI=c[10036]|0;bK=30672;bJ=116448;L9744:while(1){L9746:do{if(!bD){if(bU){bY=0;b0=0;b1=bE;while(1){b2=a[bJ+bY|0]|0;if(b2<<24>>24==(a[bI+(bY+b1|0)|0]|0)){b3=b1;b4=b0}else{if(b2<<24>>24!=36){break L9746}b3=b1-1|0;b4=1}b5=bY+1|0;if((b5|0)<(b4+bL|0)){bY=b5;b0=b4;b1=b3}else{break}}if((b4|0)==0){b6=b5}else{b7=bK;break L9744}}else{b6=0}b1=a[bJ+b6|0]|0;if((b1<<24>>24|0)==36|(b1<<24>>24|0)==0){b7=bK;break L9744}}}while(0);b1=bK+8|0;b0=c[b1>>2]|0;if((b0|0)==0){b7=b1;break}else{bK=b1;bJ=b0}}bJ=c[b7+4>>2]|0;b8=bB+2|0;c[13898]=b8;if((bJ|0)==-1){au=7167;break L9498}c[ah>>2]=bJ;do{if((c[bm>>2]|0)==2){if(!((bJ&4|0)!=0|(bJ|0)==368)){b9=bJ;break}uh(c[13898]|0,185192,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);c[ah>>2]=18;b9=18}else{b9=bJ}}while(0);L9764:do{if(((c[12890]|b9)&352|0)==0){ca=b9}else{bJ=c[13898]|0;if((c[8272]|0)<=(bJ|0)){ca=b9;break}bK=c[1054]|0;if((a[bK+(bJ*40&-1)|0]&1)==0){ca=b9;break}bL=c[bK+(bJ*40&-1)+36>>2]|0;bI=bK+(bJ*40&-1)+32|0;bK=c[10036]|0;bE=0;while(1){if((bE|0)>=(bL|0)){break}if((a[bK+((c[bI>>2]|0)+bE|0)|0]|0)==(a[bE+95280|0]|0)){bE=bE+1|0}else{ca=b9;break L9764}}if((bE|0)!=2){ca=b9;break}c[13898]=bJ+1;if((i9(bo)|0)!=0){au=8116;break L9498}ca=c[ah>>2]|0}}while(0);if(!((ca|0)==400|(ca|0)==432|(ca|0)==416)){bv=bv;bw=bw;bx=bx;by=1;bz=bz;continue L9627}bI=c[13898]|0;if((c[8272]|0)<=(bI|0)){bv=bv;bw=bw;bx=bx;by=1;bz=bz;continue L9627}bK=c[1054]|0;if((a[bK+(bI*40&-1)|0]&1)==0){bv=bv;bw=bw;bx=bx;by=1;bz=bz;continue L9627}bL=c[bK+(bI*40&-1)+36>>2]|0;bU=bK+(bI*40&-1)+32|0;bK=c[10036]|0;bD=0;while(1){if((bD|0)>=(bL|0)){break}if((a[bK+((c[bU>>2]|0)+bD|0)|0]|0)==(a[bD+224816|0]|0)){bD=bD+1|0}else{bv=bv;bw=bw;bx=bx;by=1;bz=bz;continue L9627}}if((bD|0)!=8){bv=bv;bw=bw;bx=bx;by=1;bz=bz;continue L9627}c[13898]=bI+1;a[bn]=1;bv=bv;bw=bw;bx=bx;by=1;bz=bz;continue L9627}}while(0);if(am){break}L9785:do{if((aO|0)>0){bH=c[10036]|0;bU=0;bK=0;bL=aQ;while(1){if((a[bU+175968|0]|0)==(a[bH+(bU+bL|0)|0]|0)){cb=bL;cc=bK}else{if((bU|0)!=8){break L9785}cb=bL-1|0;cc=1}b0=bU+1|0;if((b0|0)<(cc+aO|0)){bU=b0;bK=cc;bL=cb}else{break}}if((cc|0)==0){if(!((bU|0)==10|(bU|0)==7)){break}}c[13898]=bB+1;a[bl]=1;bv=bv;bw=bw;bx=bx;by=by;bz=bz;continue L9627}}while(0);if(!((aO|0)>0&(am^1))){break}bL=c[10036]|0;bK=0;bH=0;bI=aQ;while(1){if((a[bK+171984|0]|0)==(a[bL+(bK+bI|0)|0]|0)){cd=bI;ce=bH}else{if((bK|0)!=5){break}cd=bI-1|0;ce=1}bD=bK+1|0;if((bD|0)<(ce+aO|0)){bK=bD;bH=ce;bI=cd}else{au=7204;break}}do{if((au|0)==7204){au=0;if((ce|0)==0){if(!((bK|0)==10|(bK|0)==4)){break}}c[13898]=bB+1;a[bk]=1;bv=bv;bw=bw;bx=bx;by=by;bz=bz;continue L9627}}while(0);if(!((aO|0)>0&(am^1))){break}bK=c[10036]|0;bI=0;bH=0;bL=aQ;while(1){if((a[bI+168e3|0]|0)==(a[bK+(bI+bL|0)|0]|0)){cf=bL;cg=bH}else{if((bI|0)!=5){break L9639}cf=bL-1|0;cg=1}bD=bI+1|0;if((bD|0)<(cg+aO|0)){bI=bD;bH=cg;bL=cf}else{break}}if((cg|0)==0){if(!((bI|0)==4|(bI|0)==9)){break}}c[13898]=bB+1;a[bj]=1;bv=bv;bw=bw;bx=bx;by=by;bz=bz;continue L9627}}while(0);aO=c[ah>>2]|0;do{if((aO|0)==368){aQ=c[aT>>2]|0;if((aQ|0)==0){uE(r|0,0,28);am=ut(192)|0;if((am|0)==0){gk();bC=ut(192)|0;if((bC|0)==0){au=7220;break L9498}else{ch=bC}}else{ch=am}c[ch>>2]=0;c[ch+4>>2]=-1;c[ch+72>>2]=0;c[ch+88>>2]=0;uE(ch+8|0,0,60);c[ch+96>>2]=1;c[ch+144>>2]=4;c[ch+148>>2]=4;c[ch+152>>2]=4;am=ch+156|0;c[am>>2]=c[r>>2];c[am+4>>2]=c[r+4>>2];c[am+8>>2]=c[r+8>>2];c[am+12>>2]=c[r+12>>2];c[am+16>>2]=c[r+16>>2];c[am+20>>2]=c[r+20>>2];c[am+24>>2]=c[r+24>>2];a[ch+184|0]=0;c[aT>>2]=ch;c[ch+48>>2]=1;c[(c[aT>>2]|0)+56>>2]=99;ci=c[aT>>2]|0}else{ci=aQ}jw(ci);aQ=c[13898]|0;if((bB|0)==(aQ|0)){cj=1;ck=c[ah>>2]|0;break}else{if(bv){bQ=aQ;au=8112;break L9498}else{bv=1;bw=1;bx=bx;by=by;bz=bz;continue L9627}}}else{cj=bw;ck=aO}}while(0);if((ck|0)==225){do{if(!cj){c[aU>>2]=-1;c[a7>>2]=0;c[aS>>2]=c[12872];c[aS+4>>2]=c[12873];c[aS+8>>2]=c[12874];c[aS+12>>2]=c[12875];c[aS+16>>2]=c[12876];c[aS+20>>2]=c[12877];c[aS+24>>2]=c[12878];c[aS+28>>2]=c[12879];c[aS+32>>2]=c[12880];c[aS+36>>2]=c[12881];c[aS+40>>2]=c[12882];c[aS+44>>2]=c[12883];c[aS+48>>2]=c[12884];c[aS+52>>2]=c[12885];c[a8>>2]=1;h[a9>>3]=0.0;c[ba>>2]=0;h[bb>>3]=15.0;h[bc>>3]=90.0;c[bd>>2]=0;aO=c[8798]|0;aQ=(aO|0)>0;am=ax;L9839:while(1){bC=43264;while(1){cl=c[bC>>2]|0;if((cl|0)==0){break}if((c[cl+4>>2]|0)==(am|0)){break L9839}else{bC=cl|0}}cm=am-1|0;if(!((am|0)>(aO|0)&aQ)){au=7237;break}am=((cm|0)%(aO|0)&-1)+1|0}if((au|0)==7237){au=0;c[aj>>2]=cm;c[bf>>2]=1;c[bg>>2]=cm;c[bh>>2]=cm;break}aO=cl+8|0;c[aS>>2]=c[aO>>2];c[aS+4>>2]=c[aO+4>>2];c[aS+8>>2]=c[aO+8>>2];c[aS+12>>2]=c[aO+12>>2];c[aS+16>>2]=c[aO+16>>2];c[aS+20>>2]=c[aO+20>>2];c[aS+24>>2]=c[aO+24>>2];c[aS+28>>2]=c[aO+28>>2];c[aS+32>>2]=c[aO+32>>2];c[aS+36>>2]=c[aO+36>>2];c[aS+40>>2]=c[aO+40>>2];c[aS+44>>2]=c[aO+44>>2];c[aS+48>>2]=c[aO+48>>2];c[aS+52>>2]=c[aO+52>>2];c[be>>2]=0;if((c[(c[3524]|0)+96>>2]&1024|0)!=0){c[aj>>2]=am;a[bi]=0;break}if((a[bi]&1)!=0){break}c[bf>>2]=1;c[bg>>2]=c[aj>>2]}}while(0);hL(aR,1);aO=c[13898]|0;if((bB|0)==(aO|0)){break}if(bx){bQ=aO;au=8113;break L9498}c[aP>>2]=c[aS>>2];c[aP+4>>2]=c[aS+4>>2];c[aP+8>>2]=c[aS+8>>2];c[aP+12>>2]=c[aS+12>>2];c[aP+16>>2]=c[aS+16>>2];c[aP+20>>2]=c[aS+20>>2];c[aP+24>>2]=c[aS+24>>2];c[aP+28>>2]=c[aS+28>>2];c[aP+32>>2]=c[aS+32>>2];c[aP+36>>2]=c[aS+36>>2];c[aP+40>>2]=c[aS+40>>2];c[aP+44>>2]=c[aS+44>>2];c[aP+48>>2]=c[aS+48>>2];c[aP+52>>2]=c[aS+52>>2];bv=bv;bw=1;bx=1;by=by;bz=bz;continue}uE(s|0,0,56);h[u>>3]=1.0;h[w>>3]=-2.0;c[t>>2]=X;c[x>>2]=W;do{if((a[30080]&1)==0){aO=c[8798]|0;aQ=(aO|0)>0;bI=ax;L9880:while(1){bC=43264;while(1){cn=c[bC>>2]|0;if((cn|0)==0){break}if((c[cn+4>>2]|0)==(bI|0)){break L9880}else{bC=cn|0}}co=bI-1|0;if(!((bI|0)>(aO|0)&aQ)){au=7267;break}bI=((co|0)%(aO|0)&-1)+1|0}if((au|0)==7267){au=0;c[t>>2]=co;c[z>>2]=1;c[A>>2]=co;c[x>>2]=co;break}aO=cn+8|0;c[s>>2]=c[aO>>2];c[s+4>>2]=c[aO+4>>2];c[s+8>>2]=c[aO+8>>2];c[s+12>>2]=c[aO+12>>2];c[s+16>>2]=c[aO+16>>2];c[s+20>>2]=c[aO+20>>2];c[s+24>>2]=c[aO+24>>2];c[s+28>>2]=c[aO+28>>2];c[s+32>>2]=c[aO+32>>2];c[s+36>>2]=c[aO+36>>2];c[s+40>>2]=c[aO+40>>2];c[s+44>>2]=c[aO+44>>2];c[s+48>>2]=c[aO+48>>2];c[s+52>>2]=c[aO+52>>2];c[y>>2]=0;if((c[(c[3524]|0)+96>>2]&1024|0)!=0){c[t>>2]=bI;a[B]=0;break}if((a[B]&1)!=0){break}c[z>>2]=1;c[A>>2]=c[t>>2]}else{aO=43280;while(1){cp=c[aO>>2]|0;if((cp|0)==0){break}if((c[cp+4>>2]|0)==(ax|0)){au=7244;break}else{aO=cp|0}}if((au|0)==7244){au=0;aO=cp+8|0;c[s>>2]=c[aO>>2];c[s+4>>2]=c[aO+4>>2];c[s+8>>2]=c[aO+8>>2];c[s+12>>2]=c[aO+12>>2];c[s+16>>2]=c[aO+16>>2];c[s+20>>2]=c[aO+20>>2];c[s+24>>2]=c[aO+24>>2];c[s+28>>2]=c[aO+28>>2];c[s+32>>2]=c[aO+32>>2];c[s+36>>2]=c[aO+36>>2];c[s+40>>2]=c[aO+40>>2];c[s+44>>2]=c[aO+44>>2];c[s+48>>2]=c[aO+48>>2];c[s+52>>2]=c[aO+52>>2];c[y>>2]=0;if((a[B]&1)!=0){break}c[z>>2]=1;c[A>>2]=c[t>>2];break}aO=c[8798]|0;bI=(aO|0)>0;aQ=ax;L9865:while(1){am=43264;while(1){cq=c[am>>2]|0;if((cq|0)==0){break}if((c[cq+4>>2]|0)==(aQ|0)){break L9865}else{am=cq|0}}cr=aQ-1|0;if(!((aQ|0)>(aO|0)&bI)){au=7256;break}aQ=((cr|0)%(aO|0)&-1)+1|0}if((au|0)==7256){au=0;c[t>>2]=cr;c[z>>2]=1;c[A>>2]=cr;c[x>>2]=cr;break}aO=cq+8|0;c[s>>2]=c[aO>>2];c[s+4>>2]=c[aO+4>>2];c[s+8>>2]=c[aO+8>>2];c[s+12>>2]=c[aO+12>>2];c[s+16>>2]=c[aO+16>>2];c[s+20>>2]=c[aO+20>>2];c[s+24>>2]=c[aO+24>>2];c[s+28>>2]=c[aO+28>>2];c[s+32>>2]=c[aO+32>>2];c[s+36>>2]=c[aO+36>>2];c[s+40>>2]=c[aO+40>>2];c[s+44>>2]=c[aO+44>>2];c[s+48>>2]=c[aO+48>>2];c[s+52>>2]=c[aO+52>>2];c[y>>2]=0;if((c[(c[3524]|0)+96>>2]&1024|0)!=0){c[t>>2]=aQ;a[B]=0;break}if((a[B]&1)!=0){break}c[z>>2]=1;c[A>>2]=c[t>>2]}}while(0);aO=hH(k,1,(c[ah>>2]&2|0)!=0)|0;bI=c[13898]|0;if((bB|0)==(bI|0)){break}if(bx){bQ=bI;au=8114;break L9498}c[aP>>2]=c[s>>2];c[aP+4>>2]=c[s+4>>2];c[aP+8>>2]=c[s+8>>2];c[aP+12>>2]=c[s+12>>2];c[aP+16>>2]=c[s+16>>2];c[aP+20>>2]=c[s+20>>2];c[aP+24>>2]=c[s+24>>2];c[aP+28>>2]=c[s+28>>2];c[aP+32>>2]=c[s+32>>2];c[aP+36>>2]=c[s+36>>2];c[aP+40>>2]=c[s+40>>2];c[aP+44>>2]=c[s+44>>2];c[aP+48>>2]=c[s+48>>2];c[aP+52>>2]=c[s+52>>2];if((aO|0)==0){bv=bv;bw=1;bx=1;by=by;bz=bz;continue}c[ak>>2]=aO-1;bv=bv;bw=1;bx=1;by=by;bz=bz}by=a$+21|0;a[by]=0;do{if(bz){cs=U;ct=O}else{a[bs]=1;if((c[9056]|0)!=1){if(!bq){a[U]=0}if(br){cs=U;ct=0;break}a[O]=0;cs=U;ct=O;break}bw=c[1054]|0;bv=(c[bw+(aW*40&-1)+36>>2]|0)+(c[bw+(aW*40&-1)+32>>2]|0)|0;bg=db(c[a4>>2]|0,(bv+1|0)-(c[bw+(aK*40&-1)+32>>2]|0)|0,116456)|0;c[a4>>2]=bg;bw=c[(c[1054]|0)+(aK*40&-1)+32>>2]|0;L9908:do{if((bw|0)<(bv|0)){bf=bw;bi=bg;while(1){be=a[(c[10036]|0)+bf|0]|0;if(be<<24>>24==0){cu=bi;break L9908}bh=bi+1|0;a[bi]=be;be=bf+1|0;if((be|0)<(bv|0)){bf=be;bi=bh}else{cu=bh;break}}}else{cu=bg}}while(0);a[cu]=0;if((a_|0)==2){cv=c[a4>>2]|0;cw=O}else if((a_|0)==1){cv=U;cw=c[a4>>2]|0}else{cv=U;cw=O}a[by]=1;cs=cv;ct=cw}}while(0);do{if(!bx){by=c[ah>>2]|0;if((by|0)==225){c[aj>>2]=X;hL(aR,1);c[aP>>2]=c[aS>>2];c[aP+4>>2]=c[aS+4>>2];c[aP+8>>2]=c[aS+8>>2];c[aP+12>>2]=c[aS+12>>2];c[aP+16>>2]=c[aS+16>>2];c[aP+20>>2]=c[aS+20>>2];c[aP+24>>2]=c[aS+24>>2];c[aP+28>>2]=c[aS+28>>2];c[aP+32>>2]=c[aS+32>>2];c[aP+36>>2]=c[aS+36>>2];c[aP+40>>2]=c[aS+40>>2];c[aP+44>>2]=c[aS+44>>2];c[aP+48>>2]=c[aS+48>>2];c[aP+52>>2]=c[aS+52>>2];break}c[al>>2]=X;h[a$+40>>3]=1.0;c[ai>>2]=W;h[a$+48>>3]=+h[3817];a[ag]=0;do{if((a[30080]&1)==0){br=aw|0;bq=c[br>>2]|0;bs=c[8798]|0;bz=(bs|0)>0;bg=ax;L9926:while(1){bv=43264;while(1){cx=c[bv>>2]|0;if((cx|0)==0){break}if((c[cx+4>>2]|0)==(bg|0)){break L9926}else{bv=cx|0}}cy=bg-1|0;if(!((bg|0)>(bs|0)&bz)){au=7301;break}bg=((cy|0)%(bs|0)&-1)+1|0}if((au|0)==7301){au=0;c[al>>2]=cy;c[a$+64>>2]=1;c[a$+68>>2]=cy;c[ai>>2]=cy;cz=by;break}bs=cx+8|0;c[aP>>2]=c[bs>>2];c[aP+4>>2]=c[bs+4>>2];c[aP+8>>2]=c[bs+8>>2];c[aP+12>>2]=c[bs+12>>2];c[aP+16>>2]=c[bs+16>>2];c[aP+20>>2]=c[bs+20>>2];c[aP+24>>2]=c[bs+24>>2];c[aP+28>>2]=c[bs+28>>2];c[aP+32>>2]=c[bs+32>>2];c[aP+36>>2]=c[bs+36>>2];c[aP+40>>2]=c[bs+40>>2];c[aP+44>>2]=c[bs+44>>2];c[aP+48>>2]=c[bs+48>>2];c[aP+52>>2]=c[bs+52>>2];c[br>>2]=bq;if((c[(c[3524]|0)+96>>2]&1024|0)!=0){c[al>>2]=bg;a[ag]=0;cz=by;break}if((a[ag]&1)!=0){cz=by;break}c[a$+64>>2]=1;c[a$+68>>2]=c[al>>2];cz=by}else{lK(aw,ax);cz=c[ah>>2]|0}}while(0);by=hH(aw,1,(cz&2|0)!=0)|0;if((by|0)==0){c[ak>>2]=X;break}else{c[ak>>2]=by-1;break}}}while(0);ak=c[ah>>2]|0;ax=(ak&2|0)==0;if(!ax){c[aw>>2]=1}do{if(!((c[bm>>2]|0)!=2|ax)){al=a$+48|0;if(+h[al>>3]!=-3.0){break}h[al>>3]=1.0}}while(0);if((ak|0)==1){a[bl]=0}do{if(bu){if((ak|0)==352|(ak|0)==400|(ak|0)==416|(ak|0)==432){cA=X;cB=W;break}aw=c[11690]|0;if(ax){cC=W;cD=a[38984]|0}else{al=a[38984]|0;cC=(((aw|0)!=0?2:1)+W|0)+(al&1)|0;cD=al}cA=(((aw|0)!=0?2:1)+X|0)+(cD&1)|0;cB=cC}else{cA=X;cB=W}}while(0);do{if((ak|0)==400){a[ag]=1}else if((ak|0)==416|(ak|0)==432){ax=c[16678]|0;if((ax&1|0)!=0){h[8341]=0.0}if((ax&2|0)==0){break}h[8342]=255.0}}while(0);if((a$|0)!=(c[ad>>2]|0)){au=7325;break L9498}if((c[bm>>2]|0)==3){cE=c[a$+4>>2]|0;ak=a0;ag=a$;while(1){if((ag|0)==0){au=7329;break L9498}cF=ag+4|0;c[cF>>2]=cE;ax=c[11870]|0;do{if((c[8732]|0)==0){if((ax|0)==2){au=7332;break L9498}else if((ax|0)!=1){break}c[12210]=0}else{if((ax|0)==1){au=7335;break L9498}}}while(0);ax=ag+252|0;c[ax>>2]=0;bu=ag+244|0;c[bu>>2]=1;bl=ag+239|0;a[bl]=0;aw=ag+260|0;al=c[aw>>2]|0;if((al|0)!=0){ai=al;while(1){al=c[ai>>2]|0;aS=c[ai+12>>2]|0;if((aS|0)!=0){uu(aS)}uu(ai);if((al|0)==0){break}else{ai=al}}c[aw>>2]=0}if((a[47584]&1)!=0){c[bu>>2]=1}ai=hu(c[6352]|0)|0;al=ag+12|0;aS=c[al>>2]|0;if((aS|0)==368){c[272]=1;aR=c[273]|0;do{if((aR|0)!=0){if((c[aR>>2]|0)!=2){break}aj=aR+40|0;if((c[aj>>2]|0)!=42){break}c[aj>>2]=43}}while(0);cG=c[al>>2]|0}else{cG=aS}if((cG|0)==225){aR=hu(c[6352]|0)|0;c[ai>>2]=aR;c[aR+8>>2]=0}aR=c[8270]|0;do{if((aR|0)!=0){if((aY(aR|0,139696)|0)==0){break}bA(4,aR|0)}}while(0);a[47040]=1;aR=ag+64|0;aS=ag+48|0;aj=ag+23|0;bx=ag+28|0;by=ag+56|0;bs=ag+224|0;bz=ag;bv=0;bw=0;bB=0;cH=8.988465674311579e+307;bi=0;bf=0;aQ=ai;L10008:while(1){cI=eC(F,7)|0;if((cI|0)==(-9|0)){bv=bv;bw=bw;bB=bB;cH=cH;bi=bi;bf=bf;aQ=aQ;continue}else if((cI|0)==0){bh=c[11932]|0;uh(-1,116952,(v=i,i=i+16|0,c[v>>2]=c[11900],c[v+8>>2]=(bh|0)!=0?bh:179864,v)|0)}else if((cI|0)==(-3|0)){bh=c[al>>2]|0;if((bh|0)==400|(bh|0)==416|(bh|0)==432|(bh|0)==225){bv=bv;bw=bw;bB=bB;cH=cH;bi=bi;bf=bf;aQ=aQ;continue}if((bf|0)==0){if((bv|0)==0){bv=0;bw=bw;bB=bB;cH=cH;bi=bi;bf=0;aQ=aQ;continue}else{cJ=bv}}else{cJ=bf}if((bv|0)<=0){bv=bv;bw=bw;bB=bB;cH=cH;bi=bi;bf=cJ;aQ=aQ;continue}c[aQ+8>>2]=bv;c[aQ>>2]=c[aw>>2];c[aw>>2]=aQ;c[ax>>2]=(c[ax>>2]|0)+1;if((bv|0)!=(cJ|0)){c[bu>>2]=0}bv=0;bw=bw+1|0;bB=bB;cH=cH;bi=bi;bf=cJ;aQ=hu(cJ)|0;continue}else if((cI|0)==(-6|0)){eL(bz);bv=bv;bw=bw;bB=bB;cH=cH;bi=bi;bf=bf;aQ=aQ;continue}else if((cI|0)==(-7|0)){aI(115120,50,1,c[m>>2]|0);bv=bv;bw=bw;bB=bB;cH=cH;bi=bi;bf=bf;aQ=aQ;continue}else if((cI|0)==(-1|0)|(cI|0)==(-4|0)){break}do{if((bv|0)<(c[aQ+4>>2]|0)){au=7370}else{bh=(bv<<1)+1e3|0;hv(aQ,bh);if((c[al>>2]|0)==225){be=aQ|0;hv(c[be>>2]|0,bh);c[(c[be>>2]|0)+8>>2]=0;au=7370;break}else{be=c[aQ+12>>2]|0;cK=bi;cL=be;cM=be+(bv<<6)|0;break}}}while(0);do{if((au|0)==7370){au=0;bg=c[aQ+12>>2]|0;bq=bg+(bv<<6)|0;if((c[al>>2]|0)!=225){cK=bi;cL=bg;cM=bq;break}if((cI|0)<6){c[bq>>2]=2;bv=bv;bw=bw;bB=bB;cH=cH;bi=bi;bf=bf;aQ=aQ;continue L10008}else{cK=(c[(c[aQ>>2]|0)+12>>2]|0)+(bv<<6)|0;cL=bg;cM=bq;break}}}while(0);bq=cM|0;L10036:do{if((cI|0)==(-2|0)|(cI|0)==(-5|0)){c[bq>>2]=2;cN=bB;cO=cH}else{c[bq>>2]=0;bg=c[8732]|0;do{if((bg|0)==0){if((cI|0)==1){cP=3;cQ=bB;cR=cH;cS=+h[F>>3];cT=+(bw|0);cU=+(bv|0);break}else if((cI|0)==2){if((c[al>>2]|0)!=352){au=7380;break L9498}cP=3;cQ=1;cR=+h[G>>3];cS=+h[F>>3];cT=+(bw|0);cU=+(bv|0);break}else{if((cI|0)<=2){cP=cI;cQ=bB;cR=cH;cS=0.0;cT=0.0;cU=0.0;break}cP=cI;cQ=bB;cR=cH;cS=+h[H>>3];cT=+h[G>>3];cU=+h[F>>3];break}}else if((bg|0)==1){if((cI|0)<2){au=7385;break L9498}if((cI|0)<3){h[H>>3]=1.0;cV=3;cW=1.0}else{cV=cI;cW=+h[H>>3]}cX=+h[9040];cY=cX*+h[F>>3];h[F>>3]=cY;cZ=cX*+h[G>>3];h[G>>3]=cZ;cX=cW*+S(+cY);c_=+S(+cZ);c$=c_*cW*+T(+cY);cP=cV;cQ=bB;cR=cH;cS=cW*+T(+cZ);cT=c$;cU=cX*c_}else if((bg|0)==2){if((cI|0)<2){au=7391;break L9498}if((cI|0)<3){h[H>>3]=1.0;c0=3;c1=1.0}else{c0=cI;c1=+h[H>>3]}c_=+h[9040]*+h[F>>3];h[F>>3]=c_;cX=c1*+S(+c_);c$=c1*+T(+c_);cP=c0;cQ=bB;cR=cH;cS=+h[G>>3];cT=c$;cU=cX}else{au=7396;break L9498}}while(0);if((cP|0)<(c[11870]|0)){au=7398;break L9498}bg=c[al>>2]|0;if((bg|0)==33){br=(c[aR>>2]|0)==6;c2=br?1:cQ;c3=br?cS:cR}else{c2=cQ;c3=cR}do{if((cP|0)>3){do{if((bg|0)==18|(bg|0)==51){if(+h[aS>>3]==-3.0){h[cL+(bv<<6)+48>>3]=+h[I>>3];c4=0;c5=cS;break}else{if((bg|0)==368){c4=0;c5=cS;break}else{au=7406;break}}}else if((bg|0)==368){c4=0;c5=cS}else{au=7406}}while(0);if((au|0)==7406){au=0;c4=1;c5=+h[I>>3]}if((cP|0)<=4){c6=c4;c7=c5;c8=0.0;c9=0.0;da=0.0;break}bJ=c[al>>2]|0;if((bJ|0)==18|(bJ|0)==51){if(+h[aS>>3]!=-3.0){c6=c4;c7=c5;c8=0.0;c9=0.0;da=0.0;break}cX=+h[J>>3];de=1;df=cX;dg=cX}else{de=c4;df=c5;dg=+h[J>>3]}bE=(bJ|0)==368;if(!((cP|0)>5&(bJ|0)==225)){c6=bE?1:de;c7=bE?dg:df;c8=0.0;c9=0.0;da=0.0;break}bE=(cP|0)>6;c6=bE&1;c7=bE?+h[L>>3]:cS;c8=cS+ +h[K>>3];c9=cT+dg;da=cU+ +h[I>>3]}else{c6=c2;c7=c3;c8=0.0;c9=0.0;da=0.0}}while(0);c[bq>>2]=0;bg=c[200]|0;L10082:do{if((bg|0)!=99){if(!(cU>-8.988465674311579e+307&cU<8.988465674311579e+307)){c[bq>>2]=2;cN=c6;cO=c7;break L10036}do{if((a[64788+(bg*688&-1)|0]&1)==0){h[cL+(bv<<6)+8>>3]=cU}else{if(cU<0.0){c[bq>>2]=2;cN=c6;cO=c7;break L10036}if(cU==0.0){h[cL+(bv<<6)+8>>3]=-8.988465674311579e+307;c[bq>>2]=1;break L10082}else{cX=+_(+cU);h[cL+(bv<<6)+8>>3]=cX/+h[64800+(bg*688&-1)>>3];break}}}while(0);if((a[aj]&1)!=0){break}if((c[bq>>2]|0)!=0|(bg|0)<0){break}bE=64712+(bg*688&-1)|0;if(cU<+h[bE>>3]){h[bE>>3]=cU}bE=64664+(bg*688&-1)|0;do{if(cU<+h[bE>>3]){if((c[64648+(bg*688&-1)>>2]&1|0)==0){c[bq>>2]=1;break L10082}if((c[64728+(bg*688&-1)>>2]&1|0)==0){h[bE>>3]=cU;break}cX=+h[64736+(bg*688&-1)>>3];if(cX>cU){h[bE>>3]=cX;c[bq>>2]=1;break L10082}else{h[bE>>3]=cU;break}}}while(0);bE=64720+(bg*688&-1)|0;if(cU>+h[bE>>3]){h[bE>>3]=cU}bE=64672+(bg*688&-1)|0;if(cU<=+h[bE>>3]){break}if((c[64648+(bg*688&-1)>>2]&2|0)==0){c[bq>>2]=1;break}if((c[64732+(bg*688&-1)>>2]&2|0)==0){h[bE>>3]=cU;break}cX=+h[64760+(bg*688&-1)>>3];if(cX<cU){h[bE>>3]=cX;c[bq>>2]=1;break}else{h[bE>>3]=cU;break}}}while(0);bg=c[144]|0;L10128:do{if((bg|0)!=99){if(!(cT>-8.988465674311579e+307&cT<8.988465674311579e+307)){c[bq>>2]=2;cN=c6;cO=c7;break L10036}do{if((a[64788+(bg*688&-1)|0]&1)==0){h[cL+(bv<<6)+16>>3]=cT}else{if(cT<0.0){c[bq>>2]=2;cN=c6;cO=c7;break L10036}if(cT==0.0){h[cL+(bv<<6)+16>>3]=-8.988465674311579e+307;c[bq>>2]=1;break L10128}else{cX=+_(+cT);h[cL+(bv<<6)+16>>3]=cX/+h[64800+(bg*688&-1)>>3];break}}}while(0);if((a[aj]&1)!=0){break}if((c[bq>>2]|0)!=0|(bg|0)<0){break}bE=64712+(bg*688&-1)|0;if(cT<+h[bE>>3]){h[bE>>3]=cT}bE=64664+(bg*688&-1)|0;do{if(cT<+h[bE>>3]){if((c[64648+(bg*688&-1)>>2]&1|0)==0){c[bq>>2]=1;break L10128}if((c[64728+(bg*688&-1)>>2]&1|0)==0){h[bE>>3]=cT;break}cX=+h[64736+(bg*688&-1)>>3];if(cX>cT){h[bE>>3]=cX;c[bq>>2]=1;break L10128}else{h[bE>>3]=cT;break}}}while(0);bE=64720+(bg*688&-1)|0;if(cT>+h[bE>>3]){h[bE>>3]=cT}bE=64672+(bg*688&-1)|0;if(cT<=+h[bE>>3]){break}if((c[64648+(bg*688&-1)>>2]&2|0)==0){c[bq>>2]=1;break}if((c[64732+(bg*688&-1)>>2]&2|0)==0){h[bE>>3]=cT;break}cX=+h[64760+(bg*688&-1)>>3];if(cX<cT){h[bE>>3]=cX;c[bq>>2]=1;break}else{h[bE>>3]=cT;break}}}while(0);L10174:do{if((c[al>>2]|0)==225){c[cK>>2]=0;bg=c[200]|0;L10176:do{if((bg|0)!=99){if(!(da>-8.988465674311579e+307&da<8.988465674311579e+307)){c[bq>>2]=2;cN=c6;cO=c7;break L10036}do{if((a[64788+(bg*688&-1)|0]&1)==0){h[cK+8>>3]=da}else{if(da<0.0){c[bq>>2]=2;cN=c6;cO=c7;break L10036}if(da==0.0){h[cK+8>>3]=-8.988465674311579e+307;c[bq>>2]=1;break L10176}else{cX=+_(+da);h[cK+8>>3]=cX/+h[64800+(bg*688&-1)>>3];break}}}while(0);if((a[aj]&1)!=0){break}if((c[bq>>2]|0)!=0|(bg|0)<0){break}bE=64712+(bg*688&-1)|0;if(da<+h[bE>>3]){h[bE>>3]=da}bE=64664+(bg*688&-1)|0;do{if(da<+h[bE>>3]){if((c[64648+(bg*688&-1)>>2]&1|0)==0){c[bq>>2]=1;break L10176}if((c[64728+(bg*688&-1)>>2]&1|0)==0){h[bE>>3]=da;break}cX=+h[64736+(bg*688&-1)>>3];if(cX>da){h[bE>>3]=cX;c[bq>>2]=1;break L10176}else{h[bE>>3]=da;break}}}while(0);bE=64720+(bg*688&-1)|0;if(da>+h[bE>>3]){h[bE>>3]=da}bE=64672+(bg*688&-1)|0;if(da<=+h[bE>>3]){break}if((c[64648+(bg*688&-1)>>2]&2|0)==0){c[bq>>2]=1;break}if((c[64732+(bg*688&-1)>>2]&2|0)==0){h[bE>>3]=da;break}cX=+h[64760+(bg*688&-1)>>3];if(cX<da){h[bE>>3]=cX;c[bq>>2]=1;break}else{h[bE>>3]=da;break}}}while(0);bg=c[144]|0;if((bg|0)==99){break}if(!(c9>-8.988465674311579e+307&c9<8.988465674311579e+307)){c[bq>>2]=2;cN=c6;cO=c7;break L10036}do{if((a[64788+(bg*688&-1)|0]&1)==0){h[cK+16>>3]=c9}else{if(c9<0.0){c[bq>>2]=2;cN=c6;cO=c7;break L10036}if(c9==0.0){h[cK+16>>3]=-8.988465674311579e+307;c[bq>>2]=1;break L10174}else{cX=+_(+c9);h[cK+16>>3]=cX/+h[64800+(bg*688&-1)>>3];break}}}while(0);if((a[aj]&1)!=0){break}if((c[bq>>2]|0)!=0|(bg|0)<0){break}bE=64712+(bg*688&-1)|0;if(c9<+h[bE>>3]){h[bE>>3]=c9}bE=64664+(bg*688&-1)|0;do{if(c9<+h[bE>>3]){if((c[64648+(bg*688&-1)>>2]&1|0)==0){c[bq>>2]=1;break L10174}if((c[64728+(bg*688&-1)>>2]&1|0)==0){h[bE>>3]=c9;break}cX=+h[64736+(bg*688&-1)>>3];if(cX>c9){h[bE>>3]=cX;c[bq>>2]=1;break L10174}else{h[bE>>3]=c9;break}}}while(0);bE=64720+(bg*688&-1)|0;if(c9>+h[bE>>3]){h[bE>>3]=c9}bE=64672+(bg*688&-1)|0;if(c9<=+h[bE>>3]){break}if((c[64648+(bg*688&-1)>>2]&2|0)==0){c[bq>>2]=1;break}if((c[64732+(bg*688&-1)>>2]&2|0)==0){h[bE>>3]=c9;break}cX=+h[64760+(bg*688&-1)>>3];if(cX<c9){h[bE>>3]=cX;c[bq>>2]=1;break}else{h[bE>>3]=c9;break}}}while(0);L10267:do{if((a[47032]&1)==0){if((c[al>>2]|0)==400){h[cL+(bv<<6)+32>>3]=cS}bE=c[34]|0;L10274:do{if((bE|0)!=99){if(!(cS>-8.988465674311579e+307&cS<8.988465674311579e+307)){c[bq>>2]=2;cN=c6;cO=c7;break L10036}do{if((a[64788+(bE*688&-1)|0]&1)==0){h[cL+(bv<<6)+24>>3]=cS}else{if(cS<0.0){c[bq>>2]=2;cN=c6;cO=c7;break L10036}if(cS==0.0){h[cL+(bv<<6)+24>>3]=-8.988465674311579e+307;c[bq>>2]=1;break L10274}else{cX=+_(+cS);h[cL+(bv<<6)+24>>3]=cX/+h[64800+(bE*688&-1)>>3];break}}}while(0);if((a[aj]&1)!=0){break}if((c[bq>>2]|0)!=0|(bE|0)<0){break}bJ=64712+(bE*688&-1)|0;if(cS<+h[bJ>>3]){h[bJ>>3]=cS}bJ=64664+(bE*688&-1)|0;do{if(cS<+h[bJ>>3]){if((c[64648+(bE*688&-1)>>2]&1|0)==0){c[bq>>2]=1;break L10274}if((c[64728+(bE*688&-1)>>2]&1|0)==0){h[bJ>>3]=cS;break}cX=+h[64736+(bE*688&-1)>>3];if(cX>cS){h[bJ>>3]=cX;c[bq>>2]=1;break L10274}else{h[bJ>>3]=cS;break}}}while(0);bJ=64720+(bE*688&-1)|0;if(cS>+h[bJ>>3]){h[bJ>>3]=cS}bJ=64672+(bE*688&-1)|0;if(cS<=+h[bJ>>3]){break}if((c[64648+(bE*688&-1)>>2]&2|0)==0){c[bq>>2]=1;break}if((c[64732+(bE*688&-1)>>2]&2|0)==0){h[bJ>>3]=cS;break}cX=+h[64760+(bE*688&-1)>>3];if(cX<cS){h[bJ>>3]=cX;c[bq>>2]=1;break}else{h[bJ>>3]=cS;break}}}while(0);bE=c[34]|0;L10320:do{if(!((c[al>>2]|0)!=225|(bE|0)==99)){if(!(c8>-8.988465674311579e+307&c8<8.988465674311579e+307)){c[bq>>2]=2;cN=c6;cO=c7;break L10036}do{if((a[64788+(bE*688&-1)|0]&1)==0){h[cK+24>>3]=c8}else{if(c8<0.0){c[bq>>2]=2;cN=c6;cO=c7;break L10036}if(c8==0.0){h[cK+24>>3]=-8.988465674311579e+307;c[bq>>2]=1;break L10320}else{cX=+_(+c8);h[cK+24>>3]=cX/+h[64800+(bE*688&-1)>>3];break}}}while(0);if((a[aj]&1)!=0){break}if((c[bq>>2]|0)!=0|(bE|0)<0){break}bg=64712+(bE*688&-1)|0;if(c8<+h[bg>>3]){h[bg>>3]=c8}bg=64664+(bE*688&-1)|0;do{if(c8<+h[bg>>3]){if((c[64648+(bE*688&-1)>>2]&1|0)==0){c[bq>>2]=1;break L10320}if((c[64728+(bE*688&-1)>>2]&1|0)==0){h[bg>>3]=c8;break}cX=+h[64736+(bE*688&-1)>>3];if(cX>c8){h[bg>>3]=cX;c[bq>>2]=1;break L10320}else{h[bg>>3]=c8;break}}}while(0);bg=64720+(bE*688&-1)|0;if(c8>+h[bg>>3]){h[bg>>3]=c8}bg=64672+(bE*688&-1)|0;if(c8<=+h[bg>>3]){break}if((c[64648+(bE*688&-1)>>2]&2|0)==0){c[bq>>2]=1;break}if((c[64732+(bE*688&-1)>>2]&2|0)==0){h[bg>>3]=c8;break}cX=+h[64760+(bE*688&-1)>>3];if(cX<c8){h[bg>>3]=cX;c[bq>>2]=1;break}else{h[bg>>3]=c8;break}}}while(0);if((c[bx>>2]|0)==-6){h[cL+(bv<<6)+32>>3]=c7}if(!((c[al>>2]|0)==352|(c[7662]|0)==1)){if((a[by]&1)==0){au=7669;break}}bE=c[bq>>2]|0;if((c6|0)==0){if(!(cS>-8.988465674311579e+307&cS<8.988465674311579e+307)){cN=0;cO=c7;break L10036}do{if((a[66852]&1)==0){h[cL+(bv<<6)+32>>3]=cS}else{if(cS<0.0){cN=0;cO=c7;break L10036}if(cS==0.0){h[cL+(bv<<6)+32>>3]=-8.988465674311579e+307;au=7669;break L10267}else{cX=+_(+cS);h[cL+(bv<<6)+32>>3]=cX/+h[8358];break}}}while(0);if(!((a[aj]&1)==0&(bE|0)==0)){au=7669;break}if(cS<+h[8347]){h[8347]=cS}do{if(cS<+h[8341]){if((c[16678]&1|0)==0){au=7669;break L10267}if((c[16698]&1|0)==0){h[8341]=cS;break}cX=+h[8350];if(cX>cS){h[8341]=cX;au=7669;break L10267}else{h[8341]=cS;break}}}while(0);if(cS>+h[8348]){h[8348]=cS}if(cS<=+h[8342]){au=7669;break}if((c[16678]&2|0)==0){au=7669;break}if((c[16699]&2|0)==0){h[8342]=cS;au=7669;break}cX=+h[8353];if(cX<cS){h[8342]=cX;au=7669;break}else{h[8342]=cS;au=7669;break}}else{if(!(c7>-8.988465674311579e+307&c7<8.988465674311579e+307)){cN=c6;cO=c7;break L10036}do{if((a[66852]&1)==0){h[cL+(bv<<6)+32>>3]=c7}else{if(c7<0.0){cN=c6;cO=c7;break L10036}if(c7==0.0){h[cL+(bv<<6)+32>>3]=-8.988465674311579e+307;au=7669;break L10267}else{cX=+_(+c7);h[cL+(bv<<6)+32>>3]=cX/+h[8358];break}}}while(0);if(!((a[aj]&1)==0&(bE|0)==0)){au=7669;break}if(c7<+h[8347]){h[8347]=c7}do{if(c7<+h[8341]){if((c[16678]&1|0)==0){au=7669;break L10267}if((c[16698]&1|0)==0){h[8341]=c7;break}cX=+h[8350];if(cX>c7){h[8341]=cX;au=7669;break L10267}else{h[8341]=c7;break}}}while(0);if(c7>+h[8348]){h[8348]=c7}if(c7<=+h[8342]){au=7669;break}if((c[16678]&2|0)==0){au=7669;break}if((c[16699]&2|0)==0){h[8342]=c7;au=7669;break}cX=+h[8353];if(cX<c7){h[8342]=cX;au=7669;break}else{h[8342]=c7;au=7669;break}}}else{h[cL+(bv<<6)+24>>3]=cS;bE=c[al>>2]|0;if((bE|0)!=225){dh=bE;break}h[cK+24>>3]=c8;au=7669}}while(0);if((au|0)==7669){au=0;dh=c[al>>2]|0}if((dh|0)==368){iW(c[bs>>2]|0,cM,bv,c[11767]|0,c7);di=c[al>>2]|0}else{di=dh}if(!((di|0)==416|(di|0)==432)){cN=c6;cO=c7;break}h[cL+(bv<<6)+40>>3]=+h[I>>3];h[cL+(bv<<6)+48>>3]=+h[J>>3];h[cL+(bv<<6)+56>>3]=+h[K>>3];h[cL+(bv<<6)+32>>3]=+h[L>>3];cN=c6;cO=c7}}while(0);bv=bv+1|0;bw=bw;bB=cN;cH=cO;bi=cK;bf=bf;aQ=aQ}bi=c[8270]|0;do{if((bi|0)!=0){if((aY(bi|0,139696)|0)==0){break}bA(4,139696)}}while(0);if((bB|0)!=0){a[bl]=1}do{if((bv|0)>0){c[ax>>2]=(c[ax>>2]|0)+1;c[aQ+8>>2]=bv;if((c[al>>2]|0)!=225){c[aQ>>2]=c[aw>>2]}c[aw>>2]=aQ;if((bv|0)==(bf|0)){break}c[bu>>2]=0}else{do{if((c[al>>2]|0)==225){bi=c[aQ>>2]|0;if((bi|0)==0){break}bw=c[bi+12>>2]|0;if((bw|0)!=0){uu(bw)}uu(bi)}}while(0);if((aQ|0)==0){break}bi=c[aQ+12>>2]|0;if((bi|0)!=0){uu(bi)}uu(aQ)}}while(0);do{if((a[47032]&1)!=0){if((c[ax>>2]|0)<=0){break}aQ=c[aw>>2]|0;al=c[aQ+12>>2]|0;cH=+h[al+8>>3];cX=+h[al+16>>3];al=(aQ|0)==0;if(al){dj=cH;dl=cH;dm=cX;dn=cX}else{c$=cH;c_=cH;cH=cX;cZ=cX;bf=aQ;while(1){bv=c[bf+8>>2]|0;if((bv|0)>0){cX=c$;cY=c_;dp=cH;dq=cZ;bB=c[bf+12>>2]|0;bi=0;while(1){do{if((c[bB>>2]|0)==2){dr=dq;ds=dp;dt=cY;du=cX}else{dv=+h[bB+8>>3];dw=cX>dv?dv:cX;dx=cY<dv?dv:cY;dv=+h[bB+16>>3];dy=dp>dv?dv:dp;if(dq>=dv){dr=dq;ds=dy;dt=dx;du=dw;break}dr=dv;ds=dy;dt=dx;du=dw}}while(0);bw=bi+1|0;if((bw|0)<(bv|0)){cX=du;cY=dt;dp=ds;dq=dr;bB=bB+64|0;bi=bw}else{dz=du;dA=dt;dB=ds;dC=dr;break}}}else{dz=c$;dA=c_;dB=cH;dC=cZ}bi=c[bf>>2]|0;if((bi|0)==0){dj=dz;dl=dA;dm=dB;dn=dC;break}else{c$=dz;c_=dA;cH=dB;cZ=dC;bf=bi}}}cZ=(dl-dj)/+((c[11756]|0)-1|0);cH=(dn-dm)/+((c[11732]|0)-1|0);c[aw>>2]=0;c[ax>>2]=c[11756];c[bu>>2]=1;if((c[11752]|0)==2){if(al){dD=0}else{bf=0;bi=aQ;while(1){bB=(c[bi+8>>2]|0)+bf|0;bv=c[bi>>2]|0;if((bv|0)==0){dD=bB;break}else{bf=bB;bi=bv}}}bi=dD+3|0;bf=aa(bi<<3,dD+8|0);bv=ut(bf)|0;if((bv|0)==0){gk();bB=ut(bf)|0;if((bB|0)==0){au=7709;break L9498}else{dE=bB}}else{dE=bv}bv=dE;bB=bi<<2;bi=ut(bB)|0;if((bi|0)==0){gk();bf=ut(bB)|0;if((bf|0)==0){au=7712;break L9498}else{dF=bf}}else{dF=bi}bi=dF;bf=dD<<1;bB=bf+dD|0;bw=bv+(bB<<3)|0;if(al){dG=0;dH=3;au=7715}else{bs=0;by=aQ;while(1){bx=by+8|0;aS=c[bx>>2]|0;if((aS|0)>0){aR=bs;bz=0;ai=c[by+12>>2]|0;bq=aS;while(1){if((c[ai>>2]|0)==2){dI=aR;dJ=bq}else{h[bv+(aR<<3)>>3]=+h[ai+8>>3];h[bv+(aR+dD<<3)>>3]=+h[ai+16>>3];h[bv+(aR+bf<<3)>>3]=+h[ai+24>>3];dI=aR+1|0;dJ=c[bx>>2]|0}aS=bz+1|0;if((aS|0)<(dJ|0)){aR=dI;bz=aS;ai=ai+64|0;bq=dJ}else{dK=dI;break}}}else{dK=bs}bq=c[by>>2]|0;if((bq|0)==0){break}else{bs=dK;by=bq}}by=dK+3|0;if((by|0)>0){dG=dK;dH=by;au=7715}else{dL=dK;dM=by}}if((au|0)==7715){au=0;by=0;while(1){bs=by+1|0;c[bi+(by<<2)>>2]=bv+(aa(bs,dH)+bB<<3);if((bs|0)<(dH|0)){by=bs}else{dL=dG;dM=dH;break}}}if((dL|0)>0){by=0;while(1){bs=by+1|0;bq=(bs|0)<(dL|0);if(bq){ai=bv+(by<<3)|0;bz=bv+(by+dD<<3)|0;aR=bi+(by<<2)|0;bx=bs;while(1){c_=+h[ai>>3]- +h[bv+(bx<<3)>>3];c$=+h[bz>>3]- +h[bv+(bx+dD<<3)>>3];dq=+Q(+(c_*c_+c$*c$));if(dq>0.0){dN=dq*dq*+_(+dq)}else{dN=0.0}dq=-0.0-dN;h[(c[bi+(bx<<2)>>2]|0)+(by<<3)>>3]=dq;h[(c[aR>>2]|0)+(bx<<3)>>3]=dq;aS=bx+1|0;if((aS|0)<(dL|0)){bx=aS}else{dO=aR;break}}}else{dO=bi+(by<<2)|0}h[(c[dO>>2]|0)+(by<<3)>>3]=0.0;h[bv+(by+bB<<3)>>3]=+h[bv+(by+bf<<3)>>3];if(bq){by=bs}else{break}}by=bi+(dL<<2)|0;bf=dL+1|0;aR=bi+(bf<<2)|0;bx=dL+2|0;bz=bi+(bx<<2)|0;ai=0;while(1){h[(c[by>>2]|0)+(ai<<3)>>3]=1.0;aS=bi+(ai<<2)|0;h[(c[aS>>2]|0)+(dL<<3)>>3]=1.0;dq=+h[bv+(ai<<3)>>3];h[(c[aR>>2]|0)+(ai<<3)>>3]=dq;h[(c[aS>>2]|0)+(bf<<3)>>3]=dq;dq=+h[bv+(ai+dD<<3)>>3];h[(c[bz>>2]|0)+(ai<<3)>>3]=dq;h[(c[aS>>2]|0)+(bx<<3)>>3]=dq;aS=ai+1|0;if((aS|0)<(dL|0)){ai=aS}else{dP=bf;dQ=bx;dR=by;dS=aR;dU=bz;break}}}else{bz=dL+1|0;aR=dL+2|0;dP=bz;dQ=aR;dR=bi+(dL<<2)|0;dS=bi+(bz<<2)|0;dU=bi+(aR<<2)|0}h[bv+(dL+bB<<3)>>3]=0.0;h[bv+(dP+bB<<3)>>3]=0.0;h[bv+(dQ+bB<<3)>>3]=0.0;h[(c[dR>>2]|0)+(dL<<3)>>3]=0.0;h[(c[dR>>2]|0)+(dP<<3)>>3]=0.0;h[(c[dR>>2]|0)+(dQ<<3)>>3]=0.0;h[(c[dS>>2]|0)+(dL<<3)>>3]=0.0;h[(c[dS>>2]|0)+(dP<<3)>>3]=0.0;h[(c[dS>>2]|0)+(dQ<<3)>>3]=0.0;h[(c[dU>>2]|0)+(dL<<3)>>3]=0.0;h[(c[dU>>2]|0)+(dP<<3)>>3]=0.0;h[(c[dU>>2]|0)+(dQ<<3)>>3]=0.0;aR=dM<<2;bz=ut(aR)|0;if((bz|0)==0){gk();by=ut(aR)|0;if((by|0)==0){au=7736;break L9498}else{dV=by}}else{dV=bz}bz=dV;ht(bi,dM,bz,e);hq(bi,dM,bz,bw);uu(dF);uu(dV);dW=bv+((dL*3&-1)<<3)|0;dX=bv+(dL<<3)|0;dY=dL;dZ=bv}else{dW=0;dX=0;dY=0;dZ=0}if((c[11756]|0)>0){bz=dW+(dY<<3)|0;by=(dY|0)>0;aR=dW+(dY+1<<3)|0;bx=dW+(dY+2<<3)|0;dq=dj;bf=0;ai=c[11732]|0;while(1){aS=hu(ai+1|0)|0;c[aS+8>>2]=c[11732];c[aS>>2]=c[aw>>2];c[aw>>2]=aS;bE=c[11732]|0;if((bE|0)>0){c$=dm;bg=c[aS+12>>2]|0;aS=0;while(1){bJ=bg|0;c[bJ>>2]=0;br=c[11752]|0;L10552:do{if((br|0)==2){c_=+h[bz>>3];if(by){dp=c_;be=0;while(1){cY=+h[dZ+(be<<3)>>3]-dq;cX=+h[dX+(be<<3)>>3]-c$;dw=+h[dW+(be<<3)>>3];dx=+Q(+(cY*cY+cX*cX));if(dx>0.0){d_=dx*dx*+_(+dx)}else{d_=0.0}dx=dp-dw*d_;bh=be+1|0;if((bh|0)<(dY|0)){dp=dx;be=bh}else{d$=dx;break}}}else{d$=c_}d0=d$+dq*+h[aR>>3]+c$*+h[bx>>3];d1=0.0}else{if(al){d0=0.0;d1=0.0;break}be=(br|0)==1;bh=c[11734]|0;dp=+(bh|0);dx=+h[5865];dw=+h[5864];cX=0.0;cY=0.0;bd=aQ;L10555:while(1){bc=c[bd+8>>2]|0;if((bc|0)>0){dy=cX;dv=cY;bb=0;d2=c[bd+12>>2]|0;while(1){d3=+h[d2+8>>3]-dq;if(be){d4=+P(+d3);d5=+P(+(+h[d2+16>>3]-c$));if((bh|0)==1){d6=d4+d5}else if((bh|0)==2){d6=d4*d4+d5*d5}else if((bh|0)==4){d7=d4*d4+d5*d5;d6=d7*d7}else if((bh|0)==8){d7=d4*d4+d5*d5;d8=d7*d7;d6=d8*d8}else if((bh|0)==16){d8=d4*d4+d5*d5;d7=d8*d8;d8=d7*d7;d6=d8*d8}else{d8=+R(+d4,+dp);d6=d8+ +R(+d5,+dp)}if(d6==0.0){break L10555}d9=+h[d2+24>>3]/d6;ea=1.0/d6}else{d5=(+h[d2+16>>3]-c$)/dw;d8=+P(+(d3/dx));d3=+P(+d5);do{if(d8>d3){eb=d8*+Q(+(d3*d3/(d8*d8)+1.0))}else{if(d5==0.0){eb=0.0;break}eb=d3*+Q(+(d8*d8/(d3*d3)+1.0))}}while(0);do{if((br|0)==3){ec=+Z(+(eb*(-0.0-eb)))}else if((br|0)==5){ec=1.0/(eb*eb+1.0)}else if((br|0)==4){ec=+Z(+(-0.0-eb))}else if((br|0)==6){ec=eb<1.0?1.0:0.0}else if((br|0)==7){if(eb>=1.0){ec=0.0;break}ec=(1.0- +S(+(eb*6.283185307179586)))*.5}else{ec=0.0}}while(0);d9=ec*+h[d2+24>>3];ea=ec}d3=dv+d9;d8=dy+ea;ba=bb+1|0;if((ba|0)<(bc|0)){dy=d8;dv=d3;bb=ba;d2=d2+64|0}else{ed=d8;ee=d3;break}}}else{ed=cX;ee=cY}bb=c[bd>>2]|0;if((bb|0)==0){d0=ee;d1=ed;break L10552}else{cX=ed;cY=ee;bd=bb}}c[bJ>>2]=2;d0=+h[d2+24>>3];d1=1.0}}while(0);c[bJ>>2]=0;h[bg+8>>3]=dq;h[bg+16>>3]=c$;br=c[200]|0;if(dq<+h[64664+(br*688&-1)>>3]){if((c[64648+(br*688&-1)>>2]&1|0)==0){au=7785}else{au=7779}}else{au=7779}do{if((au|0)==7779){au=0;if(dq>+h[64672+(br*688&-1)>>3]){if((c[64648+(br*688&-1)>>2]&2|0)==0){au=7785;break}}bd=c[144]|0;if(c$<+h[64664+(bd*688&-1)>>3]){if((c[64648+(bd*688&-1)>>2]&1|0)==0){au=7785;break}}if(c$<=+h[64672+(bd*688&-1)>>3]){ef=0;break}if((c[64648+(bd*688&-1)>>2]&2|0)==0){au=7785}else{ef=0}}}while(0);if((au|0)==7785){au=0;c[bJ>>2]=1;ef=1}do{if((c[11752]|0)==2){eg=d0}else{if((a[47016]&1)!=0){eg=d0;break}eg=d0/d1}}while(0);br=c[34]|0;L10616:do{if((br|0)!=99){if(!(eg>-8.988465674311579e+307&eg<8.988465674311579e+307)){c[bJ>>2]=2;break}do{if((a[64788+(br*688&-1)|0]&1)==0){h[bg+24>>3]=eg}else{if(eg<0.0){c[bJ>>2]=2;break L10616}if(eg==0.0){h[bg+24>>3]=-8.988465674311579e+307;c[bJ>>2]=1;break L10616}else{cY=+_(+eg);h[bg+24>>3]=cY/+h[64800+(br*688&-1)>>3];break}}}while(0);if((a[aj]&1)!=0){break}if((ef|0)!=0|(br|0)<0){break}bd=64712+(br*688&-1)|0;if(eg<+h[bd>>3]){h[bd>>3]=eg}bd=64664+(br*688&-1)|0;do{if(eg<+h[bd>>3]){if((c[64648+(br*688&-1)>>2]&1|0)==0){c[bJ>>2]=1;break L10616}if((c[64728+(br*688&-1)>>2]&1|0)==0){h[bd>>3]=eg;break}cY=+h[64736+(br*688&-1)>>3];if(cY>eg){h[bd>>3]=cY;c[bJ>>2]=1;break L10616}else{h[bd>>3]=eg;break}}}while(0);bd=64720+(br*688&-1)|0;if(eg>+h[bd>>3]){h[bd>>3]=eg}bd=64672+(br*688&-1)|0;if(eg<=+h[bd>>3]){break}if((c[64648+(br*688&-1)>>2]&2|0)==0){c[bJ>>2]=1;break}if((c[64732+(br*688&-1)>>2]&2|0)==0){h[bd>>3]=eg;break}cY=+h[64760+(br*688&-1)>>3];if(cY<eg){h[bd>>3]=cY;c[bJ>>2]=1;break}else{h[bd>>3]=eg;break}}}while(0);if((a[bl]&1)!=0){au=7822;break L9498}br=c[bJ>>2]|0;L10663:do{if(eg>-8.988465674311579e+307&eg<8.988465674311579e+307){do{if((a[66852]&1)==0){h[bg+32>>3]=eg}else{if(eg<0.0){break L10663}if(eg==0.0){h[bg+32>>3]=-8.988465674311579e+307;break L10663}else{cY=+_(+eg);h[bg+32>>3]=cY/+h[8358];break}}}while(0);if(!((a[aj]&1)==0&(br|0)==0)){break}if(eg<+h[8347]){h[8347]=eg}do{if(eg<+h[8341]){if((c[16678]&1|0)==0){break L10663}if((c[16698]&1|0)==0){h[8341]=eg;break}cY=+h[8350];if(cY>eg){h[8341]=cY;break L10663}else{h[8341]=eg;break}}}while(0);if(eg>+h[8348]){h[8348]=eg}if(eg<=+h[8342]){break}if((c[16678]&2|0)==0){break}if((c[16699]&2|0)==0){h[8342]=eg;break}cY=+h[8353];if(cY<eg){h[8342]=cY;break}else{h[8342]=eg;break}}}while(0);br=aS+1|0;bJ=c[11732]|0;if((br|0)<(bJ|0)){c$=cH+c$;bg=bg+64|0;aS=br}else{eh=bJ;break}}}else{eh=bE}aS=bf+1|0;if((aS|0)<(c[11756]|0)){dq=cZ+dq;bf=aS;ai=eh}else{break}}}uu(dZ);if(al){break}else{ei=aQ}while(1){ai=c[ei>>2]|0;bf=c[ei+12>>2]|0;if((bf|0)!=0){uu(bf)}uu(ei);if((ai|0)==0){break}else{ei=ai}}}}while(0);aj=c[200]|0;do{if(+h[64664+(aj*688&-1)>>3]==8.988465674311579e+307){au=7861}else{if(+h[64672+(aj*688&-1)>>3]==-8.988465674311579e+307){au=7861;break}bl=c[144]|0;if(+h[64664+(bl*688&-1)>>3]==8.988465674311579e+307){au=7861;break}if(+h[64672+(bl*688&-1)>>3]==-8.988465674311579e+307){au=7861;break}bl=c[34]|0;if(+h[64664+(bl*688&-1)>>3]==8.988465674311579e+307){au=7861;break}if(+h[64672+(bl*688&-1)>>3]==-8.988465674311579e+307){au=7861}}}while(0);if((au|0)==7861){au=0;uh(-1,105912,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}aj=c[ax>>2]|0;do{if((aj|0)<2){c[bu>>2]=0}else{if((c[bu>>2]|0)==0){break}if((a[38984]&1)!=0){break}bl=c[aw>>2]|0;aQ=c[bl+8>>2]|0;if((aQ|0)>0){al=0;ai=0;while(1){ej=hu(aj)|0;c[ej+8>>2]=aj;bf=c[aw>>2]|0;if((bf|0)!=0){bx=ej+12|0;aR=0;by=bf;while(1){uD((c[bx>>2]|0)+(aR<<6)|0,(c[by+12>>2]|0)+(ai<<6)|0,64);bf=c[by>>2]|0;if((bf|0)==0){break}else{aR=aR+1|0;by=bf}}}c[ej>>2]=al;by=ai+1|0;if((by|0)<(aQ|0)){al=ej;ai=by}else{break}}ek=ej;el=c[aw>>2]|0}else{ek=0;el=bl}ai=el;do{em=ai|0;ai=c[em>>2]|0;}while((ai|0)!=0);c[em>>2]=ek}}while(0);c[cF>>2]=c[13898];aw=c[7774]|0;if((aw|0)==0){en=0}else{en=c[aw+32>>2]|0}c[ag+248>>2]=en;if((c[ax>>2]|0)==0){c[ag+8>>2]=4}if((ag|0)!=(a$|0)){aw=ag+264|0;uB(aw|0,bo|0)}eo=ak+1|0;eq=ag|0;if((cI|0)==-1){break}aw=c[eq>>2]|0;do{if((aw|0)==0){uE(f|0,0,24);aj=ut(272)|0;if((aj|0)==0){gk();bu=ut(272)|0;if((bu|0)==0){au=7887;break L9498}else{er=bu}}else{er=aj}aj=er;uE(er|0,0,272);c[er+28>>2]=-2;bu=er+32|0;c[bu>>2]=0;c[bu+4>>2]=0;h[er+40>>3]=1.0;h[er+48>>3]=-2.0;bu=er+56|0;c[bu>>2]=c[f>>2];c[bu+4>>2]=c[f+4>>2];c[bu+8>>2]=c[f+8>>2];c[bu+12>>2]=c[f+12>>2];c[bu+16>>2]=c[f+16>>2];c[bu+20>>2]=c[f+20>>2];c[er+80>>2]=-1;c[er+84>>2]=0;bu=er+88|0;c[bu>>2]=c[12872];c[bu+4>>2]=c[12873];c[bu+8>>2]=c[12874];c[bu+12>>2]=c[12875];c[bu+16>>2]=c[12876];c[bu+20>>2]=c[12877];c[bu+24>>2]=c[12878];c[bu+28>>2]=c[12879];c[bu+32>>2]=c[12880];c[bu+36>>2]=c[12881];c[bu+40>>2]=c[12882];c[bu+44>>2]=c[12883];c[bu+48>>2]=c[12884];c[bu+52>>2]=c[12885];c[er+144>>2]=1;h[er+152>>3]=0.0;c[er+160>>2]=0;h[er+168>>3]=15.0;h[er+176>>3]=90.0;c[er+184>>2]=0;c[eq>>2]=aj;es=aj}else{aj=aw+16|0;bu=c[aj>>2]|0;if((bu|0)==0){es=aw;break}uu(bu);c[aj>>2]=0;es=aw}}while(0);c[es+8>>2]=3;aw=c[7774]|0;if((aw|0)==0){et=0}else{et=c[aw+32>>2]|0}c[es+248>>2]=et;aw=c[ah>>2]|0;c[es+12>>2]=aw;ax=es+24|0;c[ax>>2]=c[aP>>2];c[ax+4>>2]=c[aP+4>>2];c[ax+8>>2]=c[aP+8>>2];c[ax+12>>2]=c[aP+12>>2];c[ax+16>>2]=c[aP+16>>2];c[ax+20>>2]=c[aP+20>>2];c[ax+24>>2]=c[aP+24>>2];c[ax+28>>2]=c[aP+28>>2];c[ax+32>>2]=c[aP+32>>2];c[ax+36>>2]=c[aP+36>>2];c[ax+40>>2]=c[aP+40>>2];c[ax+44>>2]=c[aP+44>>2];c[ax+48>>2]=c[aP+48>>2];c[ax+52>>2]=c[aP+52>>2];if((aw|0)==368){uE(r|0,0,28);aw=ut(192)|0;if((aw|0)==0){gk();ax=ut(192)|0;if((ax|0)==0){au=7894;break L9498}else{eu=ax}}else{eu=aw}c[eu>>2]=0;c[eu+4>>2]=-1;c[eu+72>>2]=0;c[eu+88>>2]=0;uE(eu+8|0,0,60);c[eu+96>>2]=1;c[eu+144>>2]=4;c[eu+148>>2]=4;c[eu+152>>2]=4;aw=eu+156|0;c[aw>>2]=c[r>>2];c[aw+4>>2]=c[r+4>>2];c[aw+8>>2]=c[r+8>>2];c[aw+12>>2]=c[r+12>>2];c[aw+16>>2]=c[r+16>>2];c[aw+20>>2]=c[r+20>>2];c[aw+24>>2]=c[r+24>>2];a[eu+184|0]=0;aw=es+224|0;c[aw>>2]=eu;uD(eu|0,c[aT>>2]|0,192);c[c[aw>>2]>>2]=0}ak=eo;ag=c[eq>>2]|0}ez();ev=eq;ew=ag;ex=eo}else{c[a$+4>>2]=c[13898];ak=c[7774]|0;if((ak|0)==0){eA=0}else{eA=c[ak+32>>2]|0}c[a$+248>>2]=eA;ev=a$|0;ew=a$;ex=a0}ak=c[7774]|0;if((ak|0)==0){ay=ev;az=aK;aA=aX;aB=aZ;aC=0;aD=cA;aE=cB;aF=a_;aG=cs;aH=ct;aJ=ex;break}if((a[ak+38|0]&1)==0){ay=ev;az=aK;aA=aX;aB=aZ;aC=0;aD=cA;aE=cB;aF=a_;aG=cs;aH=ct;aJ=ex;break}c[ew+8>>2]=4;ay=ev;az=aK;aA=aX;aB=aZ;aC=0;aD=cA;aE=cB;aF=a_;aG=cs;aH=ct;aJ=ex}}while(0);do{if((aF|0)==0){if(ix(c[7774]|0)|0){c[13898]=az;eB=0;eD=az;break}p=c[7774]|0;if((p|0)!=0){af=p;while(1){p=c[af>>2]|0;uu(c[af+12>>2]|0);uu(af);if((p|0)==0){break}else{af=p}}}c[7774]=0;af=c[13898]|0;if((c[8272]|0)<=(af|0)){au=7924;break L9498}ag=c[1054]|0;if((a[ag+(af*40&-1)|0]&1)==0){au=7924;break L9498}p=c[ag+(af*40&-1)+36>>2]|0;ak=ag+(af*40&-1)+32|0;ag=c[10036]|0;aT=0;while(1){if((aT|0)>=(p|0)){break}if((a[ag+((c[ak>>2]|0)+aT|0)|0]|0)==(a[aT+148464|0]|0)){aT=aT+1|0}else{au=7924;break L9498}}if((aT|0)!=1){au=7924;break L9498}c[13898]=af+1;c[7774]=iw()|0;eB=0;eD=c[13898]|0}else{ak=c[13898]|0;if((c[8272]|0)<=(ak|0)){eE=az;eF=aA;eG=aB;eH=aC;eI=aF;eJ=aJ;au=7925;break L9498}ag=c[1054]|0;if((a[ag+(ak*40&-1)|0]&1)==0){eE=az;eF=aA;eG=aB;eH=aC;eI=aF;eJ=aJ;au=7925;break L9498}p=c[ag+(ak*40&-1)+36>>2]|0;aP=ag+(ak*40&-1)+32|0;ag=c[10036]|0;ah=0;while(1){if((ah|0)>=(p|0)){break}if((a[ag+((c[aP>>2]|0)+ah|0)|0]|0)==(a[ah+148464|0]|0)){ah=ah+1|0}else{eE=az;eF=aA;eG=aB;eH=aC;eI=aF;eJ=aJ;au=7925;break L9498}}if((ah|0)!=1){eE=az;eF=aA;eG=aB;eH=aC;eI=aF;eJ=aJ;au=7925;break L9498}aP=ak+1|0;c[13898]=aP;eB=aF;eD=aP}}while(0);if((eD|0)<(c[8272]|0)){N=aJ;O=aH;U=aG;V=eB;W=aE;X=aD;Y=aC;$=aB;ab=aA;ac=az;ad=ay;ae=eD}else{an=aC;ao=az;ap=aJ;aq=eB;ar=aB;as=aA;at=eD;au=6983;break}}do{if((au|0)==6983){if((ap|0)==0){q=at}else{eE=ao;eF=as;eG=ar;eH=an;eI=aq;eJ=ap;au=7925;break}uf(q,105216,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==8108){eK=c[13898]|0;uf(eK,205152,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==8109){uf(bQ,163568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==8110){uf(bQ,163568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==8111){uf(bQ,163568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==8112){uf(bQ,163568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==8113){uf(bQ,163568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==8114){uf(bQ,163568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==8116){i=b;return}else if((au|0)==6999){uf(c[13898]|0,92272,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==7012){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=101304,v)|0)}else if((au|0)==7020){uf(c[13898]|0,84448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==7022){uf(c[13898]|0,76512,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==7088){uf(c[13898]|0,216936,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==7109){c[13898]=bR;au=7110}else if((au|0)==7167){uf(b8,143640,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==7220){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=201712,v)|0)}else if((au|0)==7325){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=151256,v)|0)}else if((au|0)==7329){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=149424,v)|0)}else if((au|0)==7332){uf(cE,123192,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==7335){uf(cE,121944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==7380){uf(c[cF>>2]|0,114088,(v=i,i=i+8|0,c[v>>2]=c[11900],v)|0)}else if((au|0)==7385){uf(c[cF>>2]|0,110664,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==7391){uf(c[cF>>2]|0,110664,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==7396){uf(-1,107856,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==7398){uf(c[cF>>2]|0,106920,(v=i,i=i+8|0,c[v>>2]=c[11900],v)|0)}else if((au|0)==7709){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=104328,v)|0)}else if((au|0)==7712){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=103864,v)|0)}else if((au|0)==7736){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=103496,v)|0)}else if((au|0)==7822){uf(-1,104872,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==7887){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=101304,v)|0)}else if((au|0)==7894){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=201712,v)|0)}else if((au|0)==7924){eD=a[32936]|0;if(aB){eN=eD&1;eO=eD;eP=az;eQ=aA;eR=aC;eS=0;eT=aJ;au=7928}else{eU=aJ}}}while(0);if((au|0)==7110){c[a4>>2]=0;eK=c[13898]|0;uf(eK,205152,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}do{if((au|0)==7925){eK=a[32936]|0;a4=eK&1;if(a4<<24>>24==0|(eI|0)==0){if(eG){eN=a4;eO=eK;eP=eE;eQ=eF;eR=eH;eS=eI;eT=eJ;au=7928;break}else{eU=eJ;break}}else{uf(-1,147440,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if((au|0)==7928){eJ=eN<<24>>24!=0;eI=eJ?9:2;eH=eJ?10:1;if(eJ){eV=eO}else{dc(2,145296);dc(1,143440);eV=a[32936]|0}do{if(!((eV&1)==0|eQ)){eJ=c[16506]|0;if((eJ&1|0)!=0){h[8255]=8.988465674311579e+307}if((eJ&2|0)!=0){h[8256]=-8.988465674311579e+307}eJ=c[16334]|0;if((eJ&1|0)!=0){h[8169]=8.988465674311579e+307}if((eJ&2|0)==0){break}h[8170]=-8.988465674311579e+307}}while(0);eg=+h[64664+(eI*688&-1)>>3];eJ=(a[64788+(eI*688&-1)|0]&1)==0;do{if(eJ){eW=+h[64672+(eI*688&-1)>>3];eX=eg}else{if(eg<=0.0){uk(210984,(v=i,i=i+24|0,c[v>>2]=141960,c[v+8>>2]=56832+(eI*24&-1),h[v+16>>3]=eg,v)|0)}d1=+_(+eg);d0=d1/+h[64800+(eI*688&-1)>>3];d1=+h[64672+(eI*688&-1)>>3];if(eJ){eW=d1;eX=d0;break}if(d1>0.0){ee=+_(+d1);eW=ee/+h[64800+(eI*688&-1)>>3];eX=d0;break}else{uk(210984,(v=i,i=i+24|0,c[v>>2]=141960,c[v+8>>2]=56832+(eI*24&-1),h[v+16>>3]=d1,v)|0)}}}while(0);eg=+h[64664+(eH*688&-1)>>3];eJ=(a[64788+(eH*688&-1)|0]&1)==0;do{if(eJ){eY=+h[64672+(eH*688&-1)>>3];eZ=eg}else{if(eg<=0.0){uk(210984,(v=i,i=i+24|0,c[v>>2]=140304,c[v+8>>2]=56832+(eH*24&-1),h[v+16>>3]=eg,v)|0)}d1=+_(+eg);d0=d1/+h[64800+(eH*688&-1)>>3];d1=+h[64672+(eH*688&-1)>>3];if(eJ){eY=d1;eZ=d0;break}if(d1>0.0){ee=+_(+d1);eY=ee/+h[64800+(eH*688&-1)>>3];eZ=d0;break}else{uk(210984,(v=i,i=i+24|0,c[v>>2]=140304,c[v+8>>2]=56832+(eH*24&-1),h[v+16>>3]=d1,v)|0)}}}while(0);if((c[6352]|0)<2|(c[6350]|0)<2|(c[9344]|0)<2|(c[9342]|0)<2){uf(-1,138240,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}eJ=c[10828]|0;c[13898]=o;c[7774]=iw()|0;eF=(a[38984]&1)==0;eg=eW-eX;d1=eY-eZ;eE=c[9342]|0;d0=d1/+((eF?c[6350]|0:eE)-1|0);eG=c[9344]|0;ee=eg/+((eF?c[6352]|0:eG)-1|0);ed=eg/+(eG-1|0);eg=d1/+(eE-1|0);eE=eP;eG=eJ;eJ=eR;eF=eS;L10882:while(1){eK=(eF|0)==0;a4=eE;aJ=eJ;L10884:while(1){aC=c[13898]|0;if(eK){e_=aJ?a4:aC}else{e_=a4}if((t9(aC)|0)==0){au=7968;break}dT();aC=c[13898]|0;if((c[8272]|0)<=(aC|0)){a4=e_;aJ=1;continue}aA=c[1054]|0;if((a[aA+(aC*40&-1)|0]&1)==0){a4=e_;aJ=1;continue}az=c[aA+(aC*40&-1)+36>>2]|0;aB=aA+(aC*40&-1)+32|0;aA=c[10036]|0;cF=0;while(1){if((cF|0)>=(az|0)){break}if((a[aA+((c[aB>>2]|0)+cF|0)|0]|0)==(a[cF+148464|0]|0)){cF=cF+1|0}else{a4=e_;aJ=1;continue L10884}}if((cF|0)==1){e$=eG;e0=aJ;e1=eF;e2=aC;break}else{a4=e_;aJ=1}}L10896:do{if((au|0)==7968){au=0;e3=c[13898]|0;if((e3|0)>=(c[8272]|0)){au=7975;break L10882}aJ=c[1054]|0;L10899:do{if((a[aJ+(e3*40&-1)|0]&1)==0){e4=0}else{a4=c[aJ+(e3*40&-1)+36>>2]|0;eK=aJ+(e3*40&-1)+32|0;ak=c[10036]|0;ah=0;while(1){if((ah|0)>=(a4|0)){break}if((a[ak+((c[eK>>2]|0)+ah|0)|0]|0)==(a[ah+103664|0]|0)){ah=ah+1|0}else{e4=0;break L10899}}e4=(ah|0)==1}}while(0);if(e4|(eG|0)==0){au=7975;break L10882}c[11670]=31112;do{if((iu(l)|0)==0){c[n>>2]=c[eG+260>>2];if((a[32936]&1)==0){e5=eF}else{e5=(eF+2|0)%3&-1}c[7780]=c[l>>2];aJ=eG+12|0;if((c[aJ>>2]|0)==352|(c[7662]|0)==1){e8=1}else{e8=(a[eG+56|0]&1)!=0}i1(e5,0,n,eH,eZ,eg,c[9342]|0,eI,eX,ee,(a[38984]&1)!=0?c[9344]|0:c[6352]|0,e8);if((a[38984]&1)!=0){e9=e5;break}if((c[aJ>>2]|0)==352|(c[7662]|0)==1){fa=1}else{fa=(a[eG+56|0]&1)!=0}i1(e5,1,n,eI,eX,ed,c[9344]|0,eH,eZ,d0,c[6350]|0,fa);e9=e5}else{e9=eF}}while(0);aJ=c[eG+4>>2]|0;c[13898]=aJ;aC=c[eG+248>>2]|0;cF=eG;while(1){eK=c[cF>>2]|0;if((eK|0)==0){e$=0;e0=0;e1=e9;e2=aJ;break L10896}if((c[eK+4>>2]|0)!=(aJ|0)){e$=eK;e0=0;e1=e9;e2=aJ;break L10896}if((c[eK+248>>2]|0)==(aC|0)){cF=eK}else{e$=eK;e0=0;e1=e9;e2=aJ;break}}}}while(0);aJ=(e1|0)==0;if(aJ){if(ix(c[7774]|0)|0){c[13898]=e_;eE=e_;eG=e$;eJ=e0;eF=0;continue}cF=c[7774]|0;if((cF|0)!=0){aC=cF;while(1){cF=c[aC>>2]|0;uu(c[aC+12>>2]|0);uu(aC);if((cF|0)==0){break}else{aC=cF}}}c[7774]=0;fb=c[13898]|0}else{fb=e2}if((c[8272]|0)<=(fb|0)){break}aC=c[1054]|0;if((a[aC+(fb*40&-1)|0]&1)==0){break}cF=c[aC+(fb*40&-1)+36>>2]|0;eK=aC+(fb*40&-1)+32|0;aC=c[10036]|0;ak=0;while(1){if((ak|0)>=(cF|0)){break}if((a[aC+((c[eK>>2]|0)+ak|0)|0]|0)==(a[ak+148464|0]|0)){ak=ak+1|0}else{break L10882}}if((ak|0)!=1){break}c[13898]=fb+1;if(!aJ){eE=e_;eG=e$;eJ=e0;eF=e1;continue}c[7774]=iw()|0;eE=e_;eG=e$;eJ=e0;eF=0}if((au|0)==7975){uh(e3,136552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((a[32936]&1)==0){eU=eT;break}eF=c[10828]|0;c[d>>2]=eF;L10947:do{if((eT|0)>0){eJ=0;eG=d;eE=0;eH=eF;eI=eT;eK=eT;while(1){if((c[eH+8>>2]|0)==2){aC=eH|0;cF=c[aC>>2]|0;a4=cF|0;aB=c[a4>>2]|0;aA=c[aB+260>>2]|0;az=eI-2|0;if((aA|0)!=0){cE=eH+260|0;b8=cF+260|0;bR=aA;while(1){aA=c[cE>>2]|0;bQ=c[b8>>2]|0;q=c[aA+12>>2]|0;ap=c[bQ+12>>2]|0;aq=c[bR+12>>2]|0;an=bR+8|0;if((c[an>>2]|0)>0){ar=0;do{h[aq+(ar<<6)+8>>3]=+h[q+(ar<<6)+24>>3];h[aq+(ar<<6)+16>>3]=+h[ap+(ar<<6)+24>>3];as=aq+(ar<<6)|0;ao=c[as>>2]|0;at=c[q+(ar<<6)>>2]|0;if(ao>>>0<at>>>0){c[as>>2]=at;fc=at}else{fc=ao}ao=c[ap+(ar<<6)>>2]|0;if(fc>>>0<ao>>>0){c[as>>2]=ao}ar=ar+1|0;}while((ar|0)<(c[an>>2]|0))}an=c[bR>>2]|0;if((an|0)==0){break}else{cE=aA|0;b8=bQ|0;bR=an}}if((c[aC>>2]|0)!=(cF|0)){break}}c[a4>>2]=eE;c[eG>>2]=aB;fd=eH;fe=aB;ff=az;fg=az}else{fd=eE;fe=eH;ff=eI;fg=eK}bR=fe|0;b8=eJ+1|0;if((b8|0)<(ff|0)){eJ=b8;eG=bR;eE=fd;eH=c[bR>>2]|0;eI=ff;eK=fg}else{fh=bR;fi=fd;fj=fg;break L10947}}uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=125824,v)|0)}else{fh=d;fi=0;fj=eT}}while(0);c[fh>>2]=fi;c[10828]=c[d>>2];eU=fj}}while(0);if((eU|0)==0|(c[10828]|0)==0){uf(c[13898]|0,134776,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}dc(2,133200);if((a[66036]&1)!=0){eZ=+h[8255];h[8255]=+h[8256];h[8256]=eZ}do{if((a[66164]&1)!=0){eZ=+h[8255];if(eZ<=0.0){uf(-1,218096,(v=i,i=i+8|0,c[v>>2]=56880,v)|0)}eX=+h[8256];if(eX>0.0){eY=+_(+eZ);eZ=+h[8272];h[8255]=eY/eZ;h[8256]=+_(+eX)/eZ;break}else{uf(-1,218096,(v=i,i=i+8|0,c[v>>2]=56880,v)|0)}}}while(0);dc(1,131808);if((a[65348]&1)!=0){eZ=+h[8169];h[8169]=+h[8170];h[8170]=eZ}do{if((a[65476]&1)!=0){eZ=+h[8169];if(eZ<=0.0){uf(-1,218096,(v=i,i=i+8|0,c[v>>2]=56856,v)|0)}eX=+h[8170];if(eX>0.0){eY=+_(+eZ);eZ=+h[8186];h[8169]=eY/eZ;h[8170]=+_(+eX)/eZ;break}else{uf(-1,218096,(v=i,i=i+8|0,c[v>>2]=56856,v)|0)}}}while(0);do{if((c[5094]|0)==0){dc(0,130544)}else{eZ=+h[8083];eX=+h[8084];if(eX-eZ!=0.0){break}fj=c[16162]|0;if((fj|0)==0){uf(-1,197584,(v=i,i=i+8|0,c[v>>2]=56832,v)|0)}if(eX==0.0){fk=1.0}else{fk=+P(+eX)*.01}if((fj&1|0)!=0){h[8083]=eZ-fk}if((fj&2|0)==0){break}h[8084]=fk+eX}}while(0);if((a[64660]&1)!=0){fk=+h[8083];h[8083]=+h[8084];h[8084]=fk}do{if((a[64788]&1)!=0){fk=+h[8083];if(fk<=0.0){uf(-1,218096,(v=i,i=i+8|0,c[v>>2]=56832,v)|0)}eX=+h[8084];if(eX>0.0){eZ=+_(+fk);fk=+h[8100];h[8083]=eZ/fk;h[8084]=+_(+eX)/fk;break}else{uf(-1,218096,(v=i,i=i+8|0,c[v>>2]=56832,v)|0)}}}while(0);dd(2,20);dd(1,20);dd(0,20);i6(eU,2);if(a[31104]|0){dk();dc(3,129504);dd(3,20)}do{if((c[16508]&1|0)!=0){fj=c[16506]|0;if((fj&1|0)!=0){h[8257]=+h[8255]}if((fj&2|0)==0){break}h[8258]=+h[8256]}}while(0);fj=c[10828]|0;if((fj|0)==0){uf(c[13898]|0,134776,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((c[11690]|0)!=0&(eU|0)>0){d=fj;fj=0;while(1){fi=d+256|0;fh=c[fi>>2]|0;if((fh|0)!=0){eT=fh;while(1){fh=c[eT>>2]|0;uu(c[eT+4>>2]|0);uu(eT);if((fh|0)==0){break}else{eT=fh}}c[fi>>2]=0}eT=c[d+12>>2]|0;do{if(!((eT|0)==368|(eT|0)==225|(eT|0)==400|(eT|0)==416|(eT|0)==432)){if((a[d+237|0]&1)!=0){break}if((c[d+244>>2]|0)==0){uh(-1,128216,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);break}if((c[d+8>>2]|0)==3){c[fi>>2]=ep(c[d+252>>2]|0,c[d+260>>2]|0)|0;break}else{c[fi>>2]=ep(c[9342]|0,c[d+260>>2]|0)|0;break}}}while(0);fi=fj+1|0;if((fi|0)<(eU|0)){d=c[d>>2]|0;fj=fi}else{break}}}fj=c[7738]|0;L11058:do{if((fj|0)!=-1){d=(c[13898]|0)-1|0;fi=c[1054]|0;eT=(c[fi+(d*40&-1)+36>>2]|0)+(c[fi+(d*40&-1)+32>>2]|0)|0;d=db(c[6924]|0,(eT+1|0)-(c[fi+(fj*40&-1)+32>>2]|0)|0,116456)|0;c[6924]=d;fi=c[(c[1054]|0)+(fj*40&-1)+32>>2]|0;L11060:do{if((fi|0)<(eT|0)){fh=fi;fg=d;while(1){fd=a[(c[10036]|0)+fh|0]|0;if(fd<<24>>24==0){fl=fg;break L11060}ff=fg+1|0;a[fg]=fd;fd=fh+1|0;if((fd|0)<(eT|0)){fh=fd;fg=ff}else{fl=ff;break}}}else{fl=d}}while(0);a[fl]=0;c[7738]=-1;d=c[6924]|0;eT=e6(126928)|0;if((eT|0)==0){break}fi=eT+8|0;do{if((a[fi]&1)==0){fg=c[eT+24>>2]|0;if((aY(fg|0,d|0)|0)==0){break L11058}fh=eT+16|0;if((c[fh>>2]|0)!=3){break}uu(fg);c[fh>>2]=1}else{a[fi]=0}}while(0);if((d|0)==0){fm=0}else{fm=bP(d|0)|0}c[eT+16>>2]=3;c[eT+24>>2]=fm}}while(0);c[7952]=eU;if((a[14112]&1)!=0){li(eU);i=b;return}fv(c[10828]|0,eU,0);fm=0;do{if((c[64656+(fm*688&-1)>>2]&1|0)!=0){fk=+h[64664+(fm*688&-1)>>3];if((a[64788+(fm*688&-1)|0]&1)==0){h[64696+(fm*688&-1)>>3]=fk;fn=+h[64672+(fm*688&-1)>>3]}else{eX=+h[64800+(fm*688&-1)>>3];h[64696+(fm*688&-1)>>3]=+Z(+(fk*eX));fn=+Z(+(+h[64672+(fm*688&-1)>>3]*eX))}h[64704+(fm*688&-1)>>3]=fn}fm=fm+1|0;}while(fm>>>0<11);e7(1);c[6930]=eU;c[6928]=3;i=b;return}function i$(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,w=0,x=0.0;e=i;if((d|0)>0){f=0;g=b;while(1){b=c[g+12>>2]|0;do{if((b|0)==400|(b|0)==416|(b|0)==432){if((c[16507]|0)==0){break}f3(g,1)}else{j=c[g+260>>2]|0;if((j|0)==0){break}k=g+23|0;l=j;do{j=l+8|0;if((c[j>>2]|0)>0){m=l+12|0;n=0;do{o=c[m>>2]|0;p=o+(n<<6)|0;do{if((c[p>>2]|0)!=2){c[p>>2]=0;do{if((a[k]&1)==0){q=c[16507]|0;do{if((q&1|0)!=0){r=+h[o+(n<<6)+8>>3];if(r>=+h[8255]){break}h[8255]=r}}while(0);if((q&2|0)==0){break}r=+h[o+(n<<6)+8>>3];if(r<=+h[8256]){break}h[8256]=r}}while(0);r=+h[8255];s=+h[8256];t=+h[o+(n<<6)+8>>3];if(r<s){if(t<r|t>s){u=8137}}else{if(t<s|t>r){u=8137}}if((u|0)==8137){u=0;c[p>>2]=1;break}do{if((a[k]&1)==0){w=c[16335]|0;do{if((w&1|0)!=0){r=+h[o+(n<<6)+16>>3];if(r>=+h[8169]){break}h[8169]=r}}while(0);if((w&2|0)==0){break}r=+h[o+(n<<6)+16>>3];if(r<=+h[8170]){break}h[8170]=r}}while(0);r=+h[8169];t=+h[8170];s=+h[o+(n<<6)+16>>3];if(r<t){if(s<r|s>t){u=8148}}else{if(s<t|s>r){u=8148}}if((u|0)==8148){u=0;c[p>>2]=1;break}do{if((a[k]&1)==0){q=c[16163]|0;do{if((q&1|0)!=0){r=+h[o+(n<<6)+24>>3];if(r>=+h[8083]){break}h[8083]=r}}while(0);if((q&2|0)==0){break}r=+h[o+(n<<6)+24>>3];if(r<=+h[8084]){break}h[8084]=r}}while(0);r=+h[8083];s=+h[8084];t=+h[o+(n<<6)+24>>3];if(r<s){if(!(t<r|t>s)){break}}else{if(!(t<s|t>r)){break}}c[p>>2]=1}}while(0);n=n+1|0;}while((n|0)<(c[j>>2]|0))}l=c[l>>2]|0;}while((l|0)!=0)}}while(0);b=f+1|0;if((b|0)<(d|0)){f=b;g=c[g>>2]|0}else{break}}}dc(2,0);dc(1,0);r=+h[8083];t=+h[8084];if(t-r!=0.0){i=e;return}g=c[16162]|0;if((g|0)==0){uf(-1,197584,(v=i,i=i+8|0,c[v>>2]=56832,v)|0)}if(t==0.0){x=1.0}else{x=+P(+t)*.01}if((g&1|0)!=0){h[8083]=r-x}if((g&2|0)==0){i=e;return}h[8084]=x+t;i=e;return}function i0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0;f=i;i=i+24|0;g=f|0;uE(g|0,0,24);j=ut(272)|0;do{if((j|0)==0){gk();k=ut(272)|0;if((k|0)!=0){l=k;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=101304,v)|0);return 0}else{l=j}}while(0);j=l;uE(l|0,0,272);c[l+28>>2]=-2;k=l+32|0;c[k>>2]=0;c[k+4>>2]=0;h[l+40>>3]=1.0;h[l+48>>3]=-2.0;k=l+56|0;c[k>>2]=c[g>>2];c[k+4>>2]=c[g+4>>2];c[k+8>>2]=c[g+8>>2];c[k+12>>2]=c[g+12>>2];c[k+16>>2]=c[g+16>>2];c[k+20>>2]=c[g+20>>2];c[l+80>>2]=-1;c[l+84>>2]=0;g=l+88|0;c[g>>2]=c[12872];c[g+4>>2]=c[12873];c[g+8>>2]=c[12874];c[g+12>>2]=c[12875];c[g+16>>2]=c[12876];c[g+20>>2]=c[12877];c[g+24>>2]=c[12878];c[g+28>>2]=c[12879];c[g+32>>2]=c[12880];c[g+36>>2]=c[12881];c[g+40>>2]=c[12882];c[g+44>>2]=c[12883];c[g+48>>2]=c[12884];c[g+52>>2]=c[12885];c[l+144>>2]=1;h[l+152>>3]=0.0;c[l+160>>2]=0;h[l+168>>3]=15.0;h[l+176>>3]=90.0;c[l+184>>2]=0;if(!((e|0)>0&(a|0)>0)){i=f;return j|0}if((b|0)>0){g=l+260|0;k=0;do{m=hu(d)|0;c[m>>2]=c[g>>2];c[g>>2]=m;k=k+1|0;}while((k|0)<(b|0))}b=l+260|0;l=0;do{k=hu(a)|0;c[k>>2]=c[b>>2];c[b>>2]=k;l=l+1|0;}while((l|0)<(e|0));i=f;return j|0}function i1(b,d,e,f,g,j,k,l,m,n,o,p){b=b|0;d=d|0;e=e|0;f=f|0;g=+g;j=+j;k=k|0;l=l|0;m=+m;n=+n;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0.0,X=0.0,Y=0,$=0.0,aa=0.0,ab=0,ac=0.0,ad=0,ae=0.0,af=0,ag=0;q=i;i=i+24|0;r=q|0;if(p){s=(b|0)==0|(a[32936]&1)==0}else{s=0}if((k|0)<=0){i=q;return}p=d&1;t=p^1;u=64788+(f*688&-1)|0;w=31136+(t*24&-1)|0;x=31144+(t*24&-1)|0;y=31152+(t*24&-1)|0;t=(o|0)>0;z=64788+(l*688&-1)|0;A=31136+(p*24&-1)|0;B=31144+(p*24&-1)|0;C=31152+(p*24&-1)|0;p=r|0;D=r+8|0;E=D;F=(b|0)==99;G=64788+(b*688&-1)|0;H=(b|0)<0;I=64712+(b*688&-1)|0;J=64664+(b*688&-1)|0;K=64648+(b*688&-1)|0;L=64728+(b*688&-1)|0;M=64736+(b*688&-1)|0;N=64720+(b*688&-1)|0;O=64672+(b*688&-1)|0;Q=64732+(b*688&-1)|0;R=64760+(b*688&-1)|0;S=64800+(b*688&-1)|0;b=r+8|0;T=D;D=r+16|0;U=64800+(l*688&-1)|0;l=64800+(f*688&-1)|0;f=c[(c[e>>2]|0)+12>>2]|0;V=0;L11194:while(1){W=+(V|0)*j+g;if((a[u]&1)==0){X=W}else{X=+Z(+(W*+h[l>>3]))}c[w>>2]=2;h[x>>3]=X;h[y>>3]=0.0;if(t){Y=0;do{$=+(Y|0)*n+m;if((a[z]&1)==0){aa=$}else{aa=+Z(+($*+h[U>>3]))}c[A>>2]=2;h[B>>3]=aa;h[C>>3]=0.0;ab=f+(Y<<6)+8|0;if(d){h[ab>>3]=W;h[f+(Y<<6)+16>>3]=$}else{h[ab>>3]=$;h[f+(Y<<6)+16>>3]=W}e4(c[7780]|0,r);L11209:do{if((a[1960]&1)==0){ab=c[p>>2]|0;if((ab|0)==2){ac=+h[D>>3]}else if((ab|0)==3){ad=8203;break L11194}else if((ab|0)==1){ac=0.0}else{ad=8204;break L11194}$=+P(+ac);if($>+h[11]){ad=8206;break}if((ab|0)==1){ae=+(c[E>>2]|0)}else if((ab|0)==2){ae=+h[b>>3]}else if((ab|0)==3){ae=+uz(c[T>>2]|0,0)}else{ad=8211;break L11194}ab=f+(Y<<6)|0;c[ab>>2]=0;L11220:do{if(!F){if(!(ae>-8.988465674311579e+307&ae<8.988465674311579e+307)){c[ab>>2]=2;break}do{if((a[G]&1)==0){h[f+(Y<<6)+24>>3]=ae}else{if(ae<0.0){c[ab>>2]=2;break L11220}if(ae==0.0){h[f+(Y<<6)+24>>3]=-8.988465674311579e+307;c[ab>>2]=1;break L11220}else{$=+_(+ae);h[f+(Y<<6)+24>>3]=$/+h[S>>3];break}}}while(0);if(H){break}if(ae<+h[I>>3]){h[I>>3]=ae}do{if(ae<+h[J>>3]){if((c[K>>2]&1|0)==0){c[ab>>2]=1;break L11220}if((c[L>>2]&1|0)==0){h[J>>3]=ae;break}$=+h[M>>3];if($>ae){h[J>>3]=$;c[ab>>2]=1;break L11220}else{h[J>>3]=ae;break}}}while(0);if(ae>+h[N>>3]){h[N>>3]=ae}if(ae<=+h[O>>3]){break}if((c[K>>2]&2|0)==0){c[ab>>2]=1;break}if((c[Q>>2]&2|0)==0){h[O>>3]=ae;break}$=+h[R>>3];if($<ae){h[O>>3]=$;c[ab>>2]=1;break}else{h[O>>3]=ae;break}}}while(0);if(!s){break}af=c[ab>>2]|0;if(!(ae>-8.988465674311579e+307&ae<8.988465674311579e+307)){break}do{if((a[66852]&1)==0){h[f+(Y<<6)+32>>3]=ae}else{if(ae<0.0){break L11209}if(ae==0.0){h[f+(Y<<6)+32>>3]=-8.988465674311579e+307;break L11209}else{$=+_(+ae);h[f+(Y<<6)+32>>3]=$/+h[8358];break}}}while(0);if((af|0)!=0){break}if(ae<+h[8347]){h[8347]=ae}do{if(ae<+h[8341]){if((c[16678]&1|0)==0){break L11209}if((c[16698]&1|0)==0){h[8341]=ae;break}$=+h[8350];if($>ae){h[8341]=$;break L11209}else{h[8341]=ae;break}}}while(0);if(ae>+h[8348]){h[8348]=ae}if(ae<=+h[8342]){break}if((c[16678]&2|0)==0){break}if((c[16699]&2|0)==0){h[8342]=ae;break}$=+h[8353];if($<ae){h[8342]=$;break}else{h[8342]=ae;break}}else{ad=8206}}while(0);if((ad|0)==8206){ad=0;c[f+(Y<<6)>>2]=2}Y=Y+1|0;}while((Y|0)<(o|0))}c[(c[e>>2]|0)+8>>2]=o;Y=c[c[e>>2]>>2]|0;c[e>>2]=Y;if((Y|0)==0){ag=0}else{ag=c[Y+12>>2]|0}Y=V+1|0;if((Y|0)<(k|0)){f=ag;V=Y}else{ad=8276;break}}if((ad|0)==8211){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ad|0)==8204){uf(-1,211552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ad|0)==8203){uh(-1,212704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);uf(-1,212032,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ad|0)==8276){i=q;return}}function i2(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0;c=+h[a+8>>3];d=+h[b+8>>3];if(c>d){e=1;return e|0}e=(c<d)<<31>>31;return e|0}function i3(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0,M=0,N=0,O=0,P=0;b=i;i=i+32|0;d=b|0;e=b+16|0;if((a[30641]|0)!=100){i=b;return}f=c[12904]|0;g=c[6952]|0;do{if((f|0)>0&(g|0)!=0){j=g+(f*152&-1)|0;if((f|0)!=0){k=64664+((c[200]|0)*688&-1)|0;l=64664+((c[144]|0)*688&-1)|0;m=g;do{n=+h[k>>3];o=+h[91];p=+h[96];q=+h[l>>3];r=+h[21];s=+h[68];t=+h[5279];u=+h[2];v=+h[12];w=+h[405];x=+h[393];y=+h[397];z=+h[401];A=+h[406];B=+h[394];C=+h[398];D=+h[402];E=(+h[m+16>>3]-n)*o+p+-1.0;F=(+h[m+24>>3]-q)*r+s+-1.0;G=(+h[m+32>>3]-t)*u+v+-1.0;H=A+E*B+F*C+G*D;I=(w+E*x+F*y+G*z)/(H==0.0?1.0e-5:H);H=(+h[m+48>>3]-n)*o+p+-1.0;G=(+h[m+56>>3]-q)*r+s+-1.0;F=(+h[m+64>>3]-t)*u+v+-1.0;E=A+H*B+G*C+F*D;J=(w+H*x+G*y+F*z)/(E==0.0?1.0e-5:E);E=J>I?J:I;I=(+h[m+80>>3]-n)*o+p+-1.0;J=(+h[m+88>>3]-q)*r+s+-1.0;F=(+h[m+96>>3]-t)*u+v+-1.0;G=A+I*B+J*C+F*D;H=(w+I*x+J*y+F*z)/(G==0.0?1.0e-5:G);G=H>E?H:E;E=(+h[m+112>>3]-n)*o+p+-1.0;p=(+h[m+120>>3]-q)*r+s+-1.0;s=(+h[m+128>>3]-t)*u+v+-1.0;v=A+E*B+p*C+s*D;D=(w+E*x+p*y+s*z)/(v==0.0?1.0e-5:v);h[m+8>>3]=D>G?D:G;m=m+152|0;}while((m|0)!=(j|0))}bM(g|0,f|0,152,16);j=c[6952]|0;m=c[12904]|0;l=j+(m*152&-1)|0;if((m|0)!=0){m=d|0;k=d+8|0;K=d+4|0;L=e|0;M=e+4|0;N=e+8|0;O=j;do{G=+h[O>>3];do{if((a[54008]&1)==0){j=(c[3524]|0)+144|0;if((c[j>>2]|0)==0){break}c[m>>2]=5;h[k>>3]=G;c[K>>2]=0;cM[c[j>>2]&511](d)}else{j=(c[3524]|0)+144|0;if((c[j>>2]|0)==0){break}c[L>>2]=3;c[M>>2]=~~G;h[N>>3]=0.0;cM[c[j>>2]&511](e)}}while(0);if((c[7661]|0)<0){j=c[O+144>>2]|0;c[7654]=c[j>>2];c[30620>>2]=c[j+4>>2];c[30624>>2]=c[j+8>>2];c[30628>>2]=c[j+12>>2]}dy(O+16|0);O=O+152|0;}while((O|0)!=(l|0))}if((a[30641]|0)==100){P=c[6952]|0;break}else{i=b;return}}else{P=g}}while(0);if((P|0)!=0){uu(P)}c[6952]=0;c[18084]=0;c[12904]=0;i=b;return}function i4(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0,u=0.0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0.0,C=0,D=0.0,E=0,F=0,G=0.0,H=0.0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0,U=0,V=0,W=0,X=0;g=i;j=d<<2;k=ut(j)|0;do{if((k|0)==0){gk();l=ut(j)|0;if((l|0)!=0){m=l;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=224016,v)|0)}else{m=k}}while(0);k=m;c[e>>2]=k;L11355:do{if((a[30641]|0)!=97|(b|0)==0){n=0}else{o=0.0;p=0.0;e=b;m=d;L11356:while(1){j=(c[e+8>>2]|0)-1|0;do{if((j|0)<1){q=m;r=p;s=o}else{l=e+12|0;t=0;while(1){if((t|0)>(j|0)){u=o;break}w=c[l>>2]|0;if((c[w+(t<<6)>>2]|0)==2){t=t+1|0}else{x=8314;break}}if((x|0)==8314){x=0;y=(+h[w+(t<<6)+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;z=(+h[w+(t<<6)+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;A=(0.0- +h[5279])*+h[2]+ +h[12]+-1.0;B=+h[406]+y*+h[394]+z*+h[398]+A*+h[402];u=(+h[405]+y*+h[393]+z*+h[397]+A*+h[401])/(B==0.0?1.0e-5:B)}C=j;while(1){if((C|0)<=(t|0)){D=p;break}E=c[l>>2]|0;if((c[E+(C<<6)>>2]|0)==2){C=C-1|0}else{x=8318;break}}if((x|0)==8318){x=0;B=(+h[E+(C<<6)+8>>3]- +h[64664+((c[200]|0)*688&-1)>>3])*+h[91]+ +h[96]+-1.0;A=(+h[E+(C<<6)+16>>3]- +h[64664+((c[144]|0)*688&-1)>>3])*+h[21]+ +h[68]+-1.0;z=(0.0- +h[5279])*+h[2]+ +h[12]+-1.0;y=+h[406]+B*+h[394]+A*+h[398]+z*+h[402];D=(+h[405]+B*+h[393]+A*+h[397]+z*+h[401])/(y==0.0?1.0e-5:y)}if(+(C-t|0)<=+(j|0)*.1){q=m;r=D;s=u;break}c[f>>2]=D<=u&1;if((m|0)<3){q=m;r=D;s=u;break}F=64664+((c[200]|0)*688&-1)|0;G=+h[91];H=+h[96];I=64664+((c[144]|0)*688&-1)|0;J=+h[21];K=+h[68];y=(0.0- +h[5279])*+h[2]+ +h[12]+-1.0;L=+h[405];M=+h[393];N=+h[397];O=y*+h[401];P=+h[406];Q=+h[394];R=+h[398];S=y*+h[402];l=m;while(1){T=l-2|0;U=e;while(1){V=c[U>>2]|0;if((V|0)!=0&(T|0)!=0){T=T-1|0;U=V}else{break}}L11379:do{if((V|0)!=0){U=c[V+8>>2]|0;if((U|0)==0){break}T=V+12|0;W=t;while(1){if((W|0)>=(U|0)){break L11379}X=c[T>>2]|0;if((c[X+(W<<6)>>2]|0)==2){W=W+1|0}else{break L11356}}}}while(0);T=l-1|0;if((T|0)<3){q=T;r=D;s=u;break}else{l=T}}}}while(0);j=c[e>>2]|0;if((j|0)==0){n=0;break L11355}else{o=s;p=r;e=j;m=q-1|0}}p=(+h[X+(W<<6)+8>>3]- +h[F>>3])*G+H+-1.0;o=(+h[X+(W<<6)+16>>3]- +h[I>>3])*J+K+-1.0;y=P+p*Q+o*R+S;n=(L+p*M+o*N+O)/(y==0.0?1.0e-5:y)<=u&1}}while(0);if((d|0)<=0){i=g;return}I=(n|0)==1;n=0;W=b;b=d;while(1){d=b-1|0;X=a[30641]|0;do{if((X<<24>>24|0)==97){if(I){c[k+(d<<2)>>2]=W;break}else{c[k+(n<<2)>>2]=W;break}}else if((X<<24>>24|0)==102){c[k+(d<<2)>>2]=W}else{c[k+(n<<2)>>2]=W}}while(0);if((d|0)<=0){break}n=n+1|0;W=c[W>>2]|0;b=d}i=g;return}function i5(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,$=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0.0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0.0,aS=0,aT=0,aU=0.0,aV=0,aW=0,aX=0,aY=0,aZ=0,a_=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a9=0,ba=0,bb=0.0,bc=0,bd=0,be=0,bf=0,bg=0,bh=0,bi=0,bj=0,bk=0,bl=0,bm=0.0,bn=0,bo=0,bp=0,bq=0.0,br=0.0,bs=0.0,bt=0.0,bu=0.0,bv=0.0,bw=0.0,bx=0.0,by=0.0,bz=0.0,bA=0.0,bB=0.0,bC=0.0,bD=0.0,bE=0.0,bF=0.0,bG=0.0,bH=0.0,bI=0.0,bJ=0.0,bK=0.0,bL=0.0,bM=0,bN=0.0,bO=0,bP=0.0,bQ=0.0,bR=0,bS=0,bT=0,bU=0.0,bV=0.0,bW=0.0,bX=0.0,bY=0.0,bZ=0.0,b_=0.0,b$=0.0,b0=0.0,b1=0.0,b2=0.0,b3=0.0,b4=0.0,b5=0,b6=0,b7=0,b8=0,b9=0.0,ca=0.0,cb=0.0,cc=0.0,cd=0.0,ce=0.0,cf=0.0,cg=0.0,ch=0.0,ci=0.0,cj=0.0,ck=0.0,cl=0.0,cm=0.0,cn=0.0,co=0.0,cp=0.0,cq=0.0,cr=0.0,cs=0.0,ct=0.0,cu=0.0,cv=0.0,cw=0.0,cx=0.0,cy=0.0,cz=0.0,cA=0,cB=0.0,cC=0,cD=0;d=i;i=i+224|0;e=d|0;f=d+16|0;g=d+32|0;j=d+48|0;k=d+64|0;l=d+80|0;m=d+88|0;n=d+96|0;o=b+264|0;p=(a[o]|0)==0?30632:o;o=a[p]|0;if(o<<24>>24==0){i=d;return}if((a[30641]|0)==100){q=o;r=8348}else{cM[c[(c[3524]|0)+168>>2]&511](12);o=a[p]|0;if(o<<24>>24!=0){q=o;r=8348}}L11410:do{if((r|0)==8348){o=n;s=b+239|0;t=b+64|0;u=t|0;w=b+72|0;x=b+24|0;y=k;z=k|0;A=k+4|0;B=b+260|0;C=b+252|0;D=g|0;E=g+8|0;F=g+4|0;G=j|0;H=j+4|0;I=j+8|0;J=n|0;K=n|0;L=n+8|0;M=n+32|0;N=n+40|0;R=n+64|0;S=n+72|0;T=n+96|0;U=n+104|0;V=n+16|0;W=n+48|0;X=n+80|0;Y=n+112|0;$=n+24|0;ab=n+56|0;ac=n+88|0;ad=n+120|0;ae=e|0;af=e+8|0;ag=e+4|0;ah=f|0;ai=f+4|0;aj=f+8|0;ak=0;al=q;L11412:while(1){am=al<<24>>24;c[l>>2]=0;an=a[s]|0;if((c[u>>2]|0)==3){ao=+h[w>>3]==-1.0&1}else{ao=0}a[54008]=ao;c[7644]=c[x>>2];c[7645]=c[x+4>>2];c[7646]=c[x+8>>2];c[7647]=c[x+12>>2];c[7648]=c[x+16>>2];c[7649]=c[x+20>>2];c[7650]=c[x+24>>2];c[7651]=c[x+28>>2];c[7652]=c[x+32>>2];c[7653]=c[x+36>>2];c[7654]=c[x+40>>2];c[7655]=c[x+44>>2];c[7656]=c[x+48>>2];c[7657]=c[x+52>>2];ap=c[7661]|0;if((ap|0)>0){lK(30576,ap)}c[y>>2]=c[7654];c[y+4>>2]=c[30620>>2];c[y+8>>2]=c[30624>>2];c[y+12>>2]=c[30628>>2];ap=c[7645]|0;do{if((c[7644]|0)!=0){aq=+h[3825];ar=c[(c[3524]|0)+92>>2]|0;if(aq<0.0){cK[ar&63](+h[3817]);break}else{cK[ar&63](aq);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[3824]);ar=c[(c[3524]|0)+64>>2]|0;if((ap|0)<-5){cM[ar&511](-2)}else{cM[ar&511](ap)}ar=c[3524]|0;do{if((a[30608]&1)==0){if((c[ar+96>>2]&1024|0)!=0){break}c[z>>2]=1;c[A>>2]=ap;r=8363}else{r=8363}}while(0);if((r|0)==8363){r=0;fn(k,ar)}do{if((am|0)==116|(am|0)==115|(am|0)==98){if((c[(c[3524]|0)+148>>2]|0)==0){break}if((am|0)==98){aq=+h[7076];h[Y>>3]=aq;h[X>>3]=aq;h[W>>3]=aq;h[V>>3]=aq}else if((am|0)==116){aq=+h[6915];h[Y>>3]=aq;h[X>>3]=aq;h[W>>3]=aq;h[V>>3]=aq}i4(c[B>>2]|0,c[C>>2]|0,m,l);ap=c[7664]|0;as=c[7665]|0;at=(ap|0)<1;au=(as|0)<1;do{if(at|au){av=(c[C>>2]|0)-1|0;if((av|0)>0){aw=c[m>>2]|0;ax=0;ay=0;az=0;while(1){aA=c[aw+(az<<2)>>2]|0;aB=c[aA+12>>2]|0;aC=c[aA+8>>2]|0;do{if((aC|0)>0){aA=0;aD=0;do{aA=((c[aB+(aD<<6)>>2]|0)==0&1)+aA|0;aD=aD+1|0;}while((aD|0)<(aC|0));if((aA|0)<=0){aE=ay;aF=ax;break}aE=ay+1|0;aF=(ax|0)>(aA|0)?ax:aA}else{aE=ay;aF=ax}}while(0);aC=az+1|0;if((aC|0)<(av|0)){ax=aF;ay=aE;az=aC}else{aG=aF;aH=aE;break}}}else{aG=0;aH=0}if(at){aI=~~(+O(+(+((((ap|0)==0?200:-ap|0)|0)/(aG|0)&-1|0)))+1.0)}else{aI=ap}if(!au){aJ=as;aK=aI;break}aJ=~~(+O(+(+((((as|0)==0?200:-as|0)|0)/(aH|0)&-1|0)))+1.0);aK=aI}else{aJ=as;aK=ap}}while(0);if((a[30641]|0)==100){if(((c[C>>2]|0)-1|0)>0){ap=c[m>>2]|0;as=(a[30640]|0)==0;au=0;while(1){at=au+1|0;az=c[(c[ap+(au<<2)>>2]|0)+8>>2]|0;ay=c[(c[ap+(at<<2)>>2]|0)+8>>2]|0;do{if(as){aL=ay;r=8387}else{if((az|0)==(ay|0)){aL=az;r=8387;break}aM=(((az|0)>(ay|0)?az:ay)-1|0)+(c[18084]|0)|0}}while(0);if((r|0)==8387){r=0;aM=((c[18084]|0)-1|0)+((az|0)<(aL|0)?az:aL)|0}c[18084]=aM;if((at|0)<((c[C>>2]|0)-1|0)){au=at}else{aN=aM;break}}}else{aN=c[18084]|0}au=aa(aa((aJ|0)>1?aJ:1,(aK|0)>1?aK:1),aN);c[18084]=au;c[6952]=db(c[6952]|0,au*152&-1,98184)|0}au=(aJ|0)>1;as=(aK|0)>1|au;do{if(as){ap=(aK<<2)+4|0;ay=ut(ap)|0;if((ay|0)==0){gk();ax=ut(ap)|0;if((ax|0)==0){r=8394;break L11412}else{aO=ax}}else{aO=ay}ay=aO;if((aK|0)<0){aP=ay;break}ax=(aJ<<5)+32|0;ap=0;while(1){av=ut(ax)|0;if((av|0)==0){gk();aw=ut(ax)|0;if((aw|0)==0){r=8399;break L11412}else{aQ=aw}}else{aQ=av}c[ay+(ap<<2)>>2]=aQ;av=ap+1|0;if((av|0)>(aK|0)){aP=ay;break}else{ap=av}}}else{aP=0}}while(0);ap=c[C>>2]|0;if((ap-1|0)>0){ay=c[m>>2]|0;ax=(aK|0)<2&(aJ|0)<2;at=an&1;az=at<<24>>24==0;av=as|al<<24>>24==115;aw=(aK|0)<0;aC=(aK|0)>0;aB=(aJ|0)>0;aq=+(aK|0);aD=at<<24>>24!=0;aR=+(aJ|0);at=(c[l>>2]|0)==0;aS=-999;aT=-999;aU=0.0;aV=0;aW=ap;while(1){ap=c[ay+(aV<<2)>>2]|0;aX=aV+1|0;aY=c[ay+(aX<<2)>>2]|0;aZ=c[ap+12>>2]|0;a_=c[aY+12>>2]|0;a$=a[30639]|0;if((a$<<24>>24|0)==114){a0=c[ap+8>>2]|0;a1=c[aY+8>>2]|0;a2=a0-a1|0;a3=(a2|0)>-1?a2:-a2|0;a4=a0;a5=a1}else if((a$<<24>>24|0)==99){a$=c[ap+8>>2]|0;a1=c[aY+8>>2]|0;a0=a$-a1|0;a3=(((a0|0)>-1?a0:-a0|0)|0)/2&-1;a4=a$;a5=a1}else{a3=0;a4=c[ap+8>>2]|0;a5=c[aY+8>>2]|0}a1=ap+8|0;ap=aY+8|0;aY=(a4|0)<(a5|0)?a4:a5;a$=aY-2|0;if((a[30640]|0)!=0&(a4|0)!=(a5|0)){a6=(a4|0)>(a5|0)?a4:a5;a7=a$+a3|0;a9=a3;ba=1}else{a6=aY;a7=aT;a9=aS;ba=0}aY=a6-1|0;if((aY|0)>0){a0=(1-a3|0)+a7|0;a2=ba?a3:0;bb=aU;bc=0;while(1){do{if(ba){if(!((bc|0)<(a9|0)|(bc|0)>(a7|0))){r=8416;break}bd=(bc|0)>(a9|0)?a0:0;be=bd;bf=bd;bg=bc}else{r=8416}}while(0);if((r|0)==8416){r=0;bd=bc-a2|0;if((a[30641]|0)==97){bh=at?bd:a$-bd|0}else{bh=bd}be=bh;bf=bh+1|0;bg=bh+a3|0}bd=bg+1|0;bi=(c[a1>>2]|0)>(c[ap>>2]|0);bj=bi?bf:bd;bk=bi?be:bg;bl=bi?bd:bf;bd=bi?bg:be;bi=c[aZ+(bd<<6)>>2]|0;do{if((a[30642]|0)==52){if((bi|0)!=0){bm=bb;break}if((c[aZ+(bl<<6)>>2]|0)!=0){bm=bb;break}if((c[a_+(bk<<6)>>2]|0)!=0){bm=bb;break}if((c[a_+(bj<<6)>>2]|0)==0){r=8429}else{bm=bb}}else{if((bi|0)==2){bm=bb;break}bn=c[aZ+(bl<<6)>>2]|0;if((bn|0)==2){bm=bb;break}bo=c[a_+(bk<<6)>>2]|0;if((bo|0)==2){bm=bb;break}bp=c[a_+(bj<<6)>>2]|0;if((bp|0)==2){bm=bb;break}if((bi|0)==1&(bn|0)==1&(bo|0)==1&(bp|0)==1){bm=bb}else{r=8429}}}while(0);do{if((r|0)==8429){r=0;bi=(a[30641]|0)==100;do{if(ax|bi){do{if(az){bq=+h[aZ+(bd<<6)+24>>3];bp=c[34]|0;bo=(a[64788+(bp*688&-1)|0]&1)==0;bn=(a[66852]&1)==0;L11530:do{if(bo){do{if(bn){br=bq}else{if(bq>0.0){bs=+_(+bq);br=bs/+h[8358];break}else{bt=+h[8341];r=8443;break L11530}}}while(0);bu=br;bv=+h[aZ+(bl<<6)+24>>3];r=8444}else{if(bn){bt=+Z(+(bq*+h[64800+(bp*688&-1)>>3]));r=8443;break}if(+h[64792+(bp*688&-1)>>3]==+h[8357]){bw=bq}else{bw=bq*+h[64800+(bp*688&-1)>>3]/+h[8358]}bx=bw;by=+h[aZ+(bl<<6)+24>>3];r=8445}}while(0);if((r|0)==8443){r=0;bq=+h[aZ+(bl<<6)+24>>3];if(bo){bu=bt;bv=bq;r=8444}else{bx=bt;by=bq;r=8445}}do{if((r|0)==8444){r=0;if(bn){bz=bv;bA=bu;break}if(bv>0.0){bq=+_(+bv);bz=bq/+h[8358];bA=bu;break}else{bz=+h[8341];bA=bu;break}}else if((r|0)==8445){r=0;if(bn){bz=+Z(+(by*+h[64800+(bp*688&-1)>>3]));bA=bx;break}if(+h[64792+(bp*688&-1)>>3]==+h[8357]){bz=by;bA=bx;break}bz=by*+h[64800+(bp*688&-1)>>3]/+h[8358];bA=bx}}while(0);bq=+h[a_+(bk<<6)+24>>3];L11559:do{if(bo){do{if(bn){bB=bq}else{if(bq>0.0){bs=+_(+bq);bB=bs/+h[8358];break}else{bC=+h[8341];r=8463;break L11559}}}while(0);bD=bB;bE=+h[a_+(bj<<6)+24>>3];r=8464}else{if(bn){bC=+Z(+(bq*+h[64800+(bp*688&-1)>>3]));r=8463;break}if(+h[64792+(bp*688&-1)>>3]==+h[8357]){bF=bq}else{bF=bq*+h[64800+(bp*688&-1)>>3]/+h[8358]}bG=bF;bH=+h[a_+(bj<<6)+24>>3];r=8465}}while(0);if((r|0)==8463){r=0;bq=+h[a_+(bj<<6)+24>>3];if(bo){bD=bC;bE=bq;r=8464}else{bG=bC;bH=bq;r=8465}}if((r|0)==8464){r=0;if(bn){bI=bE;bJ=bD;bK=bz;bL=bA;break}if(bE>0.0){bq=+_(+bE);bI=bq/+h[8358];bJ=bD;bK=bz;bL=bA;break}else{bI=+h[8341];bJ=bD;bK=bz;bL=bA;break}}else if((r|0)==8465){r=0;if(bn){bI=+Z(+(bH*+h[64800+(bp*688&-1)>>3]));bJ=bG;bK=bz;bL=bA;break}if(+h[64792+(bp*688&-1)>>3]==+h[8357]){bI=bH;bJ=bG;bK=bz;bL=bA;break}bI=bH*+h[64800+(bp*688&-1)>>3]/+h[8358];bJ=bG;bK=bz;bL=bA;break}}else{bI=+h[a_+(bj<<6)+32>>3];bJ=+h[a_+(bk<<6)+32>>3];bK=+h[aZ+(bl<<6)+32>>3];bL=+h[aZ+(bd<<6)+32>>3]}}while(0);bM=c[7663]|0;do{if((bM|0)==5){bq=bL*bK*bJ*bI;if(bq==0.0){bN=0.0;break}bs=+Q(+(+Q(+(+P(+bq)))));if(((((bK<0.0&1)+(bL<0.0&1)|0)+(bJ<0.0&1)|0)+(bI<0.0&1)|0)<3){bN=bs;break}bN=-0.0-bs}else if((bM|0)==6){bO=bL>bK;bs=bO?bK:bL;bq=bO?bL:bK;bO=bJ>bI;bP=bO?bI:bJ;bQ=bO?bJ:bI;bN=((bs<bP?bP:bs)+(bq<bQ?bq:bQ))*.5}else if((bM|0)==7){bQ=bL<bK?bL:bK;bq=bJ<bI?bJ:bI;bN=bQ<bq?bQ:bq}else if((bM|0)==8){bq=bL>bK?bL:bK;bQ=bJ>bI?bJ:bI;bN=bq>bQ?bq:bQ}else if((bM|0)==1){bN=bK}else if((bM|0)==2){bN=bJ}else if((bM|0)==3){bN=bI}else if((bM|0)==0){bN=bL}else{if((a[54008]&1)==0){bN=(bL+bK+bJ+bI)*.25;break}else{bO=~~bL;bR=~~bK;bS=~~bJ;bT=~~bI;bN=+(((((bR&16711680)+(bO&16711680)|0)+(bS&16711680)|0)+(bT&16711680)|0)>>>2&16711680|((((bR&65280)+(bO&65280)|0)+(bS&65280)|0)+(bT&65280)|0)>>>2&65280|((((bR&255)+(bO&255)|0)+(bS&255)|0)+(bT&255)|0)>>>2&255|0);break}}}while(0);bM=(a[54008]&1)==0;do{if(bM){bQ=+h[8341];if(bQ>=bN){bU=+((a[20668]|0)!=112&1|0);break}bq=+h[8342];if(bq<=bN){bU=+((a[20668]|0)==112&1|0);break}bs=(bN-bQ)/(bq-bQ);if((a[20668]|0)==112){bU=bs;break}bU=1.0-bs}else{bU=bN}}while(0);if(bi){bV=bU;break}if(bM){bT=(c[3524]|0)+144|0;if((c[bT>>2]|0)==0){bV=bU;break}c[D>>2]=5;h[E>>3]=bU;c[F>>2]=0;cM[c[bT>>2]&511](g);bV=bU;break}else{bT=(c[3524]|0)+144|0;if((c[bT>>2]|0)==0){bV=bU;break}c[G>>2]=3;c[H>>2]=~~bU;h[I>>3]=0.0;cM[c[bT>>2]&511](j);bV=bU;break}}else{bV=bb}}while(0);bs=+h[aZ+(bd<<6)+8>>3];h[K>>3]=bs;bQ=+h[aZ+(bd<<6)+16>>3];h[L>>3]=bQ;bq=+h[a_+(bk<<6)+8>>3];h[M>>3]=bq;bP=+h[a_+(bk<<6)+16>>3];h[N>>3]=bP;bW=+h[a_+(bj<<6)+8>>3];h[R>>3]=bW;bX=+h[a_+(bj<<6)+16>>3];h[S>>3]=bX;bY=+h[aZ+(bl<<6)+8>>3];h[T>>3]=bY;bZ=+h[aZ+(bl<<6)+16>>3];h[U>>3]=bZ;do{if(av){h[V>>3]=+h[aZ+(bd<<6)+24>>3];h[W>>3]=+h[a_+(bk<<6)+24>>3];h[X>>3]=+h[a_+(bj<<6)+24>>3];h[Y>>3]=+h[aZ+(bl<<6)+24>>3];if(az){break}h[$>>3]=+h[aZ+(bd<<6)+32>>3];h[ab>>3]=+h[a_+(bk<<6)+32>>3];h[ac>>3]=+h[a_+(bj<<6)+32>>3];h[ad>>3]=+h[aZ+(bl<<6)+32>>3]}}while(0);if(!as){if((a[30641]|0)==100){bi=c[6952]|0;aA=c[12904]|0;uD(bi+(aA*152&-1)+16|0,o|0,128);h[bi+(aA*152&-1)>>3]=bV;c[bi+(aA*152&-1)+144>>2]=t;c[12904]=(c[12904]|0)+1;bm=bV;break}else{dy(J);bm=bV;break}}if(!aw){b_=+h[Y>>3];b$=+h[V>>3];b0=+h[X>>3];b1=+h[W>>3];aA=0;do{b2=+(aA|0);bi=aP+(aA<<2)|0;h[c[bi>>2]>>3]=bs+b2*((bY-bs)/aq);h[(c[bi>>2]|0)+(aJ<<5)>>3]=bq+b2*((bW-bq)/aq);h[(c[bi>>2]|0)+8>>3]=bQ+b2*((bZ-bQ)/aq);h[(c[bi>>2]|0)+(aJ<<5)+8>>3]=bP+b2*((bX-bP)/aq);h[(c[bi>>2]|0)+16>>3]=b$+b2*((b_-b$)/aq);h[(c[bi>>2]|0)+(aJ<<5)+16>>3]=b1+b2*((b0-b1)/aq);if(aD){b3=+h[$>>3];h[(c[bi>>2]|0)+24>>3]=b3+b2*((+h[ad>>3]-b3)/aq);b3=+h[ab>>3];h[(c[bi>>2]|0)+(aJ<<5)+24>>3]=b3+b2*((+h[ac>>3]-b3)/aq)}if(au){bT=1;do{bS=c[bi>>2]|0;b3=+h[bS>>3];b2=+(bT|0);h[bS+(bT<<5)>>3]=b3+b2*((+h[bS+(aJ<<5)>>3]-b3)/aR);bS=c[bi>>2]|0;b3=+h[bS+8>>3];h[bS+(bT<<5)+8>>3]=b3+b2*((+h[bS+(aJ<<5)+8>>3]-b3)/aR);bS=c[bi>>2]|0;b3=+h[bS+16>>3];h[bS+(bT<<5)+16>>3]=b3+b2*((+h[bS+(aJ<<5)+16>>3]-b3)/aR);if(aD){bS=c[bi>>2]|0;b3=+h[bS+24>>3];h[bS+(bT<<5)+24>>3]=b3+b2*((+h[bS+(aJ<<5)+24>>3]-b3)/aR)}bT=bT+1|0;}while((bT|0)<(aJ|0))}aA=aA+1|0;}while((aA|0)<=(aK|0))}if(aC){b4=bV;b5=0}else{bm=bV;break}while(1){if(aB){aA=aP+(b5<<2)|0;bT=b5+1|0;bi=aP+(bT<<2)|0;bM=0;while(1){bS=c[aA>>2]|0;h[K>>3]=+h[bS+(bM<<5)>>3];h[L>>3]=+h[bS+(bM<<5)+8>>3];b1=+h[bS+(bM<<5)+16>>3];h[V>>3]=b1;bO=c[bi>>2]|0;h[M>>3]=+h[bO+(bM<<5)>>3];h[N>>3]=+h[bO+(bM<<5)+8>>3];b0=+h[bO+(bM<<5)+16>>3];h[W>>3]=b0;bR=bM+1|0;h[R>>3]=+h[bO+(bR<<5)>>3];h[S>>3]=+h[bO+(bR<<5)+8>>3];b$=+h[bO+(bR<<5)+16>>3];h[X>>3]=b$;h[T>>3]=+h[bS+(bR<<5)>>3];h[U>>3]=+h[bS+(bR<<5)+8>>3];b_=+h[bS+(bR<<5)+16>>3];h[Y>>3]=b_;L11652:do{if(az){b6=c[34]|0;b7=(a[64788+(b6*688&-1)|0]&1)==0;b8=(a[66852]&1)==0;do{if(b7){if(b8){b9=b_;ca=b$;cb=b0;cc=b1;break L11652}if(b1>0.0){bP=+_(+b1);cd=bP/+h[8358];r=8531;break}else{ce=+h[8341];r=8526;break}}else{if(b8){ce=+Z(+(b1*+h[64800+(b6*688&-1)>>3]));r=8526;break}bP=+h[64792+(b6*688&-1)>>3];bX=+h[8357];if(bP==bX){cf=b1;cg=bP;ch=bX;r=8534;break}cf=b1*+h[64800+(b6*688&-1)>>3]/+h[8358];cg=bP;ch=bX;r=8534}}while(0);do{if((r|0)==8526){r=0;if(b7){if(b8){b9=b_;ca=b$;cb=b0;cc=ce;break L11652}else{cd=ce;r=8531;break}}if(b8){ci=+Z(+(b0*+h[64800+(b6*688&-1)>>3]));cj=ce;r=8539;break}else{cf=ce;cg=+h[64792+(b6*688&-1)>>3];ch=+h[8357];r=8534;break}}}while(0);do{if((r|0)==8531){r=0;if(b0>0.0){bX=+_(+b0);ck=bX/+h[8358];cl=cd;r=8536;break}else{ck=+h[8341];cl=cd;r=8536;break}}else if((r|0)==8534){r=0;if(cg==ch){ck=b0;cl=cf;r=8536;break}ck=b0*+h[64800+(b6*688&-1)>>3]/+h[8358];cl=cf;r=8536}}while(0);do{if((r|0)==8536){r=0;if(!b7){if(b8){ci=ck;cj=cl;r=8539;break}bX=+h[64792+(b6*688&-1)>>3];bP=+h[8357];if(bX==bP){cm=b$;cn=cl;co=ck;cp=bX;cq=bP;r=8553;break}cm=b$*+h[64800+(b6*688&-1)>>3]/+h[8358];cn=cl;co=ck;cp=bX;cq=bP;r=8553;break}if(b8){b9=b_;ca=b$;cb=ck;cc=cl;break L11652}if(b$>0.0){bP=+_(+b$);cr=ck;cs=cl;ct=bP/+h[8358];break}else{cu=+h[8341];cv=cl;cw=ck;r=8545;break}}}while(0);if((r|0)==8539){r=0;cu=+Z(+(b$*+h[64800+(b6*688&-1)>>3]));cv=cj;cw=ci;r=8545}do{if((r|0)==8545){r=0;if(b7){if(b8){b9=b_;ca=cu;cb=cw;cc=cv;break L11652}else{cr=cw;cs=cv;ct=cu;break}}if(b8){b9=+Z(+(b_*+h[64800+(b6*688&-1)>>3]));ca=cu;cb=cw;cc=cv;break L11652}else{cm=cu;cn=cv;co=cw;cp=+h[64792+(b6*688&-1)>>3];cq=+h[8357];r=8553;break}}}while(0);if((r|0)==8553){r=0;if(cp==cq){b9=b_;ca=cm;cb=co;cc=cn;break}b9=b_*+h[64800+(b6*688&-1)>>3]/+h[8358];ca=cm;cb=co;cc=cn;break}if(b_>0.0){bP=+_(+b_);b9=bP/+h[8358];ca=ct;cb=cr;cc=cs;break}else{b9=+h[8341];ca=ct;cb=cr;cc=cs;break}}else{bP=+h[bS+(bM<<5)+24>>3];h[$>>3]=bP;bX=+h[bO+(bM<<5)+24>>3];h[ab>>3]=bX;bQ=+h[bO+(bR<<5)+24>>3];h[ac>>3]=bQ;bZ=+h[bS+(bR<<5)+24>>3];h[ad>>3]=bZ;b9=bZ;ca=bQ;cb=bX;cc=bP}}while(0);bS=c[7663]|0;do{if((bS|0)==4){cx=(cc+cb+ca+b9)*.25}else if((bS|0)==5){b_=cc*cb*ca*b9;if(b_==0.0){cx=0.0;break}b$=+Q(+(+Q(+(+P(+b_)))));if(((((cb<0.0&1)+(cc<0.0&1)|0)+(ca<0.0&1)|0)+(b9<0.0&1)|0)<3){cx=b$;break}cx=-0.0-b$}else if((bS|0)==6){bO=cc>cb;b$=bO?cb:cc;b_=bO?cc:cb;bO=ca>b9;b0=bO?b9:ca;b1=bO?ca:b9;cx=((b$<b0?b0:b$)+(b_<b1?b_:b1))*.5}else if((bS|0)==7){b1=cc<cb?cc:cb;b_=ca<b9?ca:b9;cx=b1<b_?b1:b_}else if((bS|0)==8){b_=cc>cb?cc:cb;b1=ca>b9?ca:b9;cx=b_>b1?b_:b1}else if((bS|0)==1){cx=cb}else if((bS|0)==2){cx=ca}else if((bS|0)==3){cx=b9}else if((bS|0)==0){cx=cc}else{r=8566;break L11412}}while(0);bS=(a[54008]&1)==0;do{if(bS){b1=+h[8341];if(b1>=cx){cy=+((a[20668]|0)!=112&1|0);break}b_=+h[8342];if(b_<=cx){cy=+((a[20668]|0)==112&1|0);break}b$=(cx-b1)/(b_-b1);if((a[20668]|0)==112){cy=b$;break}cy=1.0-b$}else{cy=cx}}while(0);if((a[30641]|0)==100){bO=c[6952]|0;bp=c[12904]|0;uD(bO+(bp*152&-1)+16|0,o|0,128);h[bO+(bp*152&-1)>>3]=cy;c[bO+(bp*152&-1)+144>>2]=t;c[12904]=(c[12904]|0)+1}else{do{if(bS){bp=(c[3524]|0)+144|0;if((c[bp>>2]|0)==0){break}c[ae>>2]=5;h[af>>3]=cy;c[ag>>2]=0;cM[c[bp>>2]&511](e)}else{bp=(c[3524]|0)+144|0;if((c[bp>>2]|0)==0){break}c[ah>>2]=3;c[ai>>2]=~~cy;h[aj>>3]=0.0;cM[c[bp>>2]&511](f)}}while(0);dy(J)}if((bR|0)<(aJ|0)){bM=bR}else{cz=cy;cA=bT;break}}}else{cz=b4;cA=b5+1|0}if((cA|0)<(aK|0)){b4=cz;b5=cA}else{bm=cz;break}}}}while(0);bl=bc+1|0;if((bl|0)<(aY|0)){bb=bm;bc=bl}else{break}}cB=bm;cC=c[C>>2]|0}else{cB=aU;cC=aW}if((aX|0)<(cC-1|0)){aS=a9;aT=a7;aU=cB;aV=aX;aW=cC}else{break}}}if((aP|0)!=0){if((aK|0)>=0){aW=0;do{uu(c[aP+(aW<<2)>>2]|0);aW=aW+1|0;}while((aW|0)<=(aK|0))}uu(aP)}uu(c[m>>2]|0)}}while(0);ak=ak+1|0;al=a[p+ak|0]|0;if(al<<24>>24==0){break L11410}}if((r|0)==8394){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=92248,v)|0)}else if((r|0)==8399){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=84424,v)|0)}else if((r|0)==8566){uf(-1,76496,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if((a8(p|0,67)|0)!=0){r=c[11690]|0;if((r&2|0)==0){cD=r}else{i7(b,2);cD=c[11690]|0}if((cD&1|0)==0){break}i7(b,1)}}while(0);if((a[30641]|0)==100){i=d;return}cM[c[(c[3524]|0)+168>>2]&511](13);i=d;return}function i6(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;e=c[10828]|0;f=c[10814]|0;g=c[10822]|0;a[31104]=1;if((c[7662]|0)==1){return}L11775:do{if((d|0)==1){if((f|0)==0){h=0;break}else{i=f}while(1){if((c[i+12>>2]|0)==400){j=8642;break}if((a[i+56|0]&1)!=0){if((c[i+64>>2]|0)>3){j=8637;break}}k=c[i+224>>2]|0;if((k|0)!=0){if(((c[k+72>>2]|0)-4|0)>>>0<3){j=8640;break}}k=c[i>>2]|0;if((k|0)==0){j=8614;break L11775}else{i=k}}if((j|0)==8637){return}else if((j|0)==8640){return}else if((j|0)==8642){return}}else{j=8614}}while(0);L11790:do{if((j|0)==8614){i=(d|0)==2;if(!i){h=0;break}if((b|0)>0){l=e;m=1}else{h=1;break}while(1){f=c[l+12>>2]|0;if((f|0)==352|(f|0)==400){j=8638;break}if((a[l+56|0]&1)!=0){if(((c[l+64>>2]|0)-1|0)>>>0>=3){j=8644;break}}f=c[l+224>>2]|0;if((f|0)!=0){if((c[f+72>>2]|0)>3){j=8645;break}}if((m|0)<(b|0)){l=c[l>>2]|0;m=m+1|0}else{h=i;break L11790}}if((j|0)==8638){return}else if((j|0)==8644){return}else if((j|0)==8645){return}}}while(0);L11807:do{if((g|0)!=0){j=g;while(1){if(((c[j+72>>2]|0)-4|0)>>>0<3){break}j=c[j>>2]|0;if((j|0)==0){break L11807}}return}}while(0);if(((c[1122]|0)-4|0)>>>0<3){return}if(((c[16632]|0)-4|0)>>>0<3){return}if(((c[16460]|0)-4|0)>>>0<3){return}if(((c[17320]|0)-4|0)>>>0<3){return}if(((c[17148]|0)-4|0)>>>0<3){return}do{if(h){if(((c[16288]|0)-4|0)>>>0>=3){break}return}}while(0);if(((c[16804]|0)-4|0)>>>0<3){return}a[31104]=0;return}function i7(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,w=0.0,x=0.0;e=i;i=i+16|0;f=e|0;g=(a[b+239|0]&1)==0;if((b|0)==0){i=e;return}j=c[b+256>>2]|0;if((j|0)==0){i=e;return}if((d-1|0)>>>0>1){i=e;return}if((c[(c[3524]|0)+148>>2]|0)==0){i=e;return}b=(d|0)==2;d=f|0;k=f+8|0;l=f+4|0;m=j;do{j=m+44|0;n=m+4|0;o=+h[(c[n>>2]|0)+24>>3];p=m+9|0;bD(135272,(v=i,i=i+24|0,c[v>>2]=c[j>>2],h[v+8>>3]=o,c[v+16>>2]=(p|0)==0?122416:p,v)|0);do{if((a[m+8|0]|0)!=0){bJ(14200);p=c[n>>2]|0;do{if(g){o=+h[p+24>>3];q=c[34]|0;r=(a[66852]&1)==0;do{if((a[64788+(q*688&-1)|0]&1)==0){if(r){s=o;break}if(o>0.0){t=+_(+o);s=t/+h[8358];break}else{s=+h[8341];break}}else{if(r){s=+Z(+(o*+h[64800+(q*688&-1)>>3]));break}if(+h[64792+(q*688&-1)>>3]==+h[8357]){s=o;break}s=o*+h[64800+(q*688&-1)>>3]/+h[8358]}}while(0);o=+h[8341];if(o>=s){u=+((a[20668]|0)!=112&1|0);break}t=+h[8342];if(t<=s){u=+((a[20668]|0)==112&1|0);break}w=(s-o)/(t-o);if((a[20668]|0)==112){u=w;break}u=1.0-w}else{w=+h[p+32>>3];o=+h[8341];if(o>=w){u=+((a[20668]|0)!=112&1|0);break}t=+h[8342];if(t<=w){u=+((a[20668]|0)==112&1|0);break}x=(w-o)/(t-o);if((a[20668]|0)==112){u=x;break}u=1.0-x}}while(0);p=(c[3524]|0)+144|0;if((c[p>>2]|0)==0){break}c[d>>2]=5;h[k>>3]=u;c[l>>2]=0;cM[c[p>>2]&511](f)}}while(0);p=c[j>>2]|0;q=c[n>>2]|0;if(b){dA(p,q)}else{dB(p,q,+h[7076])}m=c[m>>2]|0;}while((m|0)!=0);i=e;return}function i8(b){b=b|0;var d=0,e=0,f=0;d=i;e=c[c[10810]>>2]|0;if((e|0)==0){i=d;return}else{f=e}do{do{if((a[f+8|0]&1)==0){e=c[f+4>>2]|0;if((a_(e|0,167320,6)|0)==0){break}if((a_(e|0,126208,6)|0)==0){break}if((a_(e|0,133568,4)|0)==0){break}cf(b|0,126032,(v=i,i=i+8|0,c[v>>2]=e,v)|0);j5(b,f+16|0,1);aF(10,b|0)}}while(0);f=c[f>>2]|0;}while((f|0)!=0);i=d;return}function i9(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=c[13898]|0;if((d|0)>=(c[8272]|0)){ja();return 0}e=c[1054]|0;f=c[e+(d*40&-1)+36>>2]|0;L11906:do{if((a[e+(d*40&-1)|0]&1)!=0){g=e+(d*40&-1)+32|0;h=c[10036]|0;i=0;while(1){if((i|0)>=(f|0)){break}if((a[h+((c[g>>2]|0)+i|0)|0]|0)==(a[i+103664|0]|0)){i=i+1|0}else{break L11906}}if((i|0)!=1){break}ja();return 0}}while(0);if(f>>>0>6){ja();return 0}uD(b|0,(c[10036]|0)+(c[e+(d*40&-1)+32>>2]|0)|0,f);a[b+(c[(c[1054]|0)+((c[13898]|0)*40&-1)+36>>2]|0)|0]=0;f=b;while(1){b=a[f]|0;if((b<<24>>24|0)==0){j=8713;break}else if(!((b<<24>>24|0)==67|(b<<24>>24|0)==98|(b<<24>>24|0)==116|(b<<24>>24|0)==115)){j=8711;break}f=f+1|0}if((j|0)==8713){c[13898]=(c[13898]|0)+1;return 0}else if((j|0)==8711){ja();return 0}return 0}function ja(){uf(c[13898]|0,156480,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}function jb(b){b=b|0;var d=0,e=0,f=0,j=0.0,k=0,l=0,n=0,o=0,p=0,q=0.0,r=0,s=0.0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0.0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aG=0,aH=0,aJ=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aZ=0,a_=0;d=i;e=c[3524]|0;if((e|0)==0){aI(214736,23,1,b|0)}else{f=c[e>>2]|0;cf(b|0,215208,(v=i,i=i+16|0,c[v>>2]=f,c[v+8>>2]=13048,v)|0)}f=c[8244]|0;if((f|0)==0){aI(98152,13,1,b|0)}else{cf(b|0,105136,(v=i,i=i+8|0,c[v>>2]=f,v)|0)}f=(a[54160]&1)!=0?179864:213448;e=(a[54152]&1)!=0?179864:213448;j=+h[7077];k=(c[14156]|0)==0?150704:150856;cf(b|0,214064,(v=i,i=i+40|0,c[v>>2]=(a[54144]&1)!=0?179864:213448,c[v+8>>2]=f,c[v+16>>2]=e,h[v+24>>3]=j,c[v+32>>2]=k,v)|0);k=c[11692]|0;if((k|0)==0){aI(212312,13,1,b|0);l=0}else{e=(c[14088]|0)==0?150704:150856;cf(b|0,212872,(v=i,i=i+16|0,c[v>>2]=k,c[v+8>>2]=e,v)|0);ji(b,56296,0);aF(10,b|0);l=0}L11936:while(1){do{if((l|0)!=4){e=64813+(l*688&-1)|0;if((a[e]|0)!=0){k=56832+(l*24&-1)|0;f=j3(e)|0;cf(b|0,211776,(v=i,i=i+16|0,c[v>>2]=k,c[v+8>>2]=f,v)|0)}if((l|0)==3){break}f=56832+(l*24&-1)|0;k=(c[64808+(l*688&-1)>>2]|0)==1?141856:179864;cf(b|0,211344,(v=i,i=i+16|0,c[v>>2]=f,c[v+8>>2]=k,v)|0);k=l+1|0;if((k|0)<7){l=k;continue L11936}else{break L11936}}}while(0);l=l+1|0}j=+h[7030];if(j<0.0){aI(210168,13,1,b|0)}else{l=(a[56232]&1)!=0?106640:106608;cf(b|0,209528,(v=i,i=i+16|0,h[v>>3]=j,c[v+8>>2]=l,v)|0)}aI(207904,15,1,b|0);jf(b,49488);l=c[12292]|0;if((l|0)>0){n=150856}else{n=(l|0)<0?121920:150704}cf(b|0,207056,(v=i,i=i+8|0,c[v>>2]=n,v)|0);if((a[49240]&1)==0){n=(c[12303]|0)+1|0;cf(b|0,121528,(v=i,i=i+8|0,c[v>>2]=n,v)|0)}else{jg(b,49248)}aI(220776,11,1,b|0);jf(b,49176);aI(206464,24,1,b|0);n=c[12738]|0;if((n|0)==0){o=179864}else{o=c[53424+(n<<2)>>2]|0}j=+h[6371];l=c[12739]|0;if((l|0)==(n|0)){p=179864}else{p=c[53424+(l<<2)>>2]|0}q=+h[6372];n=c[12740]|0;if((n|0)==(l|0)){r=179864}else{r=c[53424+(n<<2)>>2]|0}s=+h[6373];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=o,h[v+8>>3]=j,c[v+16>>2]=p,h[v+24>>3]=q,c[v+32>>2]=r,h[v+40>>3]=s,v)|0);aI(205664,2,1,b|0);aI(205016,23,1,b|0);r=c[12418]|0;if((r|0)==0){t=179864}else{t=c[53424+(r<<2)>>2]|0}s=+h[6211];p=c[12419]|0;if((p|0)==(r|0)){u=179864}else{u=c[53424+(p<<2)>>2]|0}q=+h[6212];r=c[12420]|0;if((r|0)==(p|0)){w=179864}else{w=c[53424+(r<<2)>>2]|0}j=+h[6213];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=t,h[v+8>>3]=s,c[v+16>>2]=u,h[v+24>>3]=q,c[v+32>>2]=w,h[v+40>>3]=j,v)|0);cf(b|0,204656,(v=i,i=i+8|0,h[v>>3]=+h[6214],v)|0);aI(204408,6,1,b|0);w=c[12406]|0;if((w|0)==0){aI(204112,3,1,b|0)}else if((w|0)==1){aI(203864,3,1,b|0)}else if((w|0)==2){aI(203656,3,1,b|0)}do{if((a[47032]&1)!=0){w=c[11752]|0;if((w|0)==1){u=c[11732]|0;t=c[11756]|0;r=c[11734]|0;cf(b|0,203400,(v=i,i=i+24|0,c[v>>2]=u,c[v+8>>2]=t,c[v+16>>2]=r,v)|0);break}r=c[11732]|0;t=c[11756]|0;if((w|0)==2){cf(b|0,203056,(v=i,i=i+16|0,c[v>>2]=r,c[v+8>>2]=t,v)|0);break}else{x=-1}while(1){u=x+1|0;if((u|0)==7){y=0;break}if((c[46948+(u<<3)>>2]|0)==(w|0)){y=c[46944+(u<<3)>>2]|0;break}else{x=u}}w=(a[47016]&1)!=0?202360:179864;j=+h[5865];q=+h[5864];cf(b|0,202800,(v=i,i=i+48|0,c[v>>2]=r,c[v+8>>2]=t,c[v+16>>2]=y,c[v+24>>2]=w,h[v+32>>3]=j,h[v+40>>3]=q,v)|0)}}while(0);cf(b|0,201728,(v=i,i=i+16|0,c[v>>2]=24544,c[v+8>>2]=24595,v)|0);y=j3(66240)|0;cf(b|0,201048,(v=i,i=i+16|0,c[v>>2]=56880,c[v+8>>2]=y,v)|0);y=j3(65552)|0;cf(b|0,201048,(v=i,i=i+16|0,c[v>>2]=56856,c[v+8>>2]=y,v)|0);y=j3(68992)|0;cf(b|0,201048,(v=i,i=i+16|0,c[v>>2]=56976,c[v+8>>2]=y,v)|0);y=j3(68304)|0;cf(b|0,201048,(v=i,i=i+16|0,c[v>>2]=56952,c[v+8>>2]=y,v)|0);y=j3(64864)|0;cf(b|0,201048,(v=i,i=i+16|0,c[v>>2]=56832,c[v+8>>2]=y,v)|0);y=j3(66928)|0;cf(b|0,201048,(v=i,i=i+16|0,c[v>>2]=56904,c[v+8>>2]=y,v)|0);y=j3(69680)|0;cf(b|0,201048,(v=i,i=i+16|0,c[v>>2]=57e3,c[v+8>>2]=y,v)|0);cf(b|0,200232,(v=i,i=i+8|0,c[v>>2]=+h[9040]==1.0?124080:123976,v)|0);y=c[10026]|0;if((y|0)>-1){x=(y|0)==0?150704:150856;cf(b|0,198776,(v=i,i=i+8|0,c[v>>2]=x,v)|0);z=0}else{z=0}while(1){if(z>>>0>=8){A=8770;break}if((a[65036+(z*688&-1)|0]&1)!=0){A=8771;break}if((a[65037+(z*688&-1)|0]&1)==0){z=z+1|0}else{A=8771;break}}if((A|0)==8770){aI(198368,11,1,b|0)}else if((A|0)==8771){q=+h[3815];if(q!=0.0){j=q/+h[9040];cf(b|0,197920,(v=i,i=i+8|0,h[v>>3]=j,v)|0)}else{aI(197464,17,1,b|0)}aI(196824,8,1,b|0);z=(a[66413]&1)!=0?179864:136208;cf(b|0,196192,(v=i,i=i+32|0,c[v>>2]=(a[66412]&1)!=0?179864:136208,c[v+8>>2]=56880,c[v+16>>2]=z,c[v+24>>2]=56880,v)|0);z=(a[65725]&1)!=0?179864:136208;cf(b|0,196192,(v=i,i=i+32|0,c[v>>2]=(a[65724]&1)!=0?179864:136208,c[v+8>>2]=56856,c[v+16>>2]=z,c[v+24>>2]=56856,v)|0);z=(a[65037]&1)!=0?179864:136208;cf(b|0,196192,(v=i,i=i+32|0,c[v>>2]=(a[65036]&1)!=0?179864:136208,c[v+8>>2]=56832,c[v+16>>2]=z,c[v+24>>2]=56832,v)|0);aI(195696,3,1,b|0);z=(a[69165]&1)!=0?179864:136208;cf(b|0,196192,(v=i,i=i+32|0,c[v>>2]=(a[69164]&1)!=0?179864:136208,c[v+8>>2]=56976,c[v+16>>2]=z,c[v+24>>2]=56976,v)|0);z=(a[68477]&1)!=0?179864:136208;cf(b|0,196192,(v=i,i=i+32|0,c[v>>2]=(a[68476]&1)!=0?179864:136208,c[v+8>>2]=56952,c[v+16>>2]=z,c[v+24>>2]=56952,v)|0);z=(a[67101]&1)!=0?179864:136208;cf(b|0,196192,(v=i,i=i+32|0,c[v>>2]=(a[67100]&1)!=0?179864:136208,c[v+8>>2]=56904,c[v+16>>2]=z,c[v+24>>2]=56904,v)|0);aF(10,b|0);z=c[10026]|0;if((z|0)==-1){B=193464}else{B=(z|0)==0?150704:150856}cf(b|0,193936,(v=i,i=i+8|0,c[v>>2]=B,v)|0);ji(b,40048,0);aI(86120,2,1,b|0);ji(b,34776,0);aF(10,b|0)}cf(b|0,188584,(v=i,i=i+8|0,c[v>>2]=(a[27776]&1)!=0?179864:213448,v)|0);B=j3(36288)|0;cf(b|0,187184,(v=i,i=i+8|0,c[v>>2]=B,v)|0);B=c[9329]|0;if((B|0)!=0){cf(b|0,126104,(v=i,i=i+8|0,c[v>>2]=B,v)|0)}B=c[9330]|0;if(!((B|0)==1&(c[9331]|0)==-2|(B|0)==0)){aI(145280,10,1,b|0);jg(b,37320)}aF(10,b|0);aI(186104,8,1,b|0);B=c[9031]|0;do{if((B|0)==0){aI(185592,6,1,b|0);A=8796}else if((B|0)==1){aI(185072,7,1,b|0);A=8796}else if((B|0)==2){z=c[9032]|0;if((z|0)==0){aI(184712,7,1,b|0);A=8796;break}else if((z|0)==1){aI(184336,7,1,b|0);A=8796;break}else if((z|0)==2){aI(183952,7,1,b|0);A=8796;break}else if((z|0)==3){aI(183592,7,1,b|0);A=8796;break}else{A=8796;break}}else if((B|0)==3){aI(183128,3,1,b|0);z=c[9034]|0;if((z|0)==0){C=179864}else{C=c[53424+(z<<2)>>2]|0}j=+h[4519];x=c[9035]|0;if((x|0)==(z|0)){D=179864}else{D=c[53424+(x<<2)>>2]|0}q=+h[4520];z=c[9036]|0;if((z|0)==(x|0)){E=179864}else{E=c[53424+(z<<2)>>2]|0}s=+h[4521];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=C,h[v+8>>3]=j,c[v+16>>2]=D,h[v+24>>3]=q,c[v+32>>2]=E,h[v+40>>3]=s,v)|0);A=8796}else{A=8798}}while(0);do{if((A|0)==8796){if((c[9031]|0)!=2){A=8798;break}if(((c[9032]|0)-2|0)>>>0>=2){A=8798}}}while(0);do{if((A|0)==8798){E=c[9045]|0;if((E|0)==2){aI(131280,6,1,b|0);break}else if((E|0)==0){aI(131440,5,1,b|0);break}else if((E|0)==1){aI(131216,7,1,b|0);break}else{break}}}while(0);do{if(!((c[9031]|0)==2&(c[9032]|0)>>>0<2)){E=c[9044]|0;if((E|0)==0){aI(180360,4,1,b|0);break}else if((E|0)==2){aI(179904,7,1,b|0);break}else if((E|0)==1){aI(131216,7,1,b|0);break}else{break}}}while(0);E=(c[9046]|0)==0?178184:164216;D=(a[36229]&1)!=0?179864:136208;C=(a[36231]&1)!=0?179864:136208;B=c[9056]|0;if((B|0)==2){F=177584}else{F=(B|0)==1?177096:176744}cf(b|0,179568,(v=i,i=i+40|0,c[v>>2]=(c[9047]|0)==0?179176:178608,c[v+8>>2]=E,c[v+16>>2]=D,c[v+24>>2]=C,c[v+32>>2]=F,v)|0);if((c[9059]|0)>-3){aI(99520,3,1,b|0);ji(b,36232,0)}else{aI(175760,5,1,b|0)}s=+h[4524];q=+h[4525];j=+h[4526];G=+h[4527];cf(b|0,175416,(v=i,i=i+40|0,c[v>>2]=(a[36230]&1)!=0?179864:136208,h[v+8>>3]=s,h[v+16>>3]=q,h[v+24>>3]=j,h[v+32>>3]=G,v)|0);F=c[9339]|0;cf(b|0,174936,(v=i,i=i+16|0,c[v>>2]=c[9338],c[v+8>>2]=F,v)|0);aF(10,b|0);cf(b|0,174656,(v=i,i=i+8|0,c[v>>2]=(a[36228]&1)!=0?179864:136208,v)|0);if((a[36120]&1)==0){aI(174304,10,1,b|0)}aI(173712,12,1,b|0);F=c[10822]|0;if((F|0)!=0){C=F;do{F=c[C+4>>2]|0;D=j3(c[C+60>>2]|0)|0;cf(b|0,173208,(v=i,i=i+16|0,c[v>>2]=F,c[v+8>>2]=D,v)|0);D=c[C+8>>2]|0;if((D|0)==0){H=179864}else{H=c[53424+(D<<2)>>2]|0}G=+h[C+24>>3];F=c[C+12>>2]|0;if((F|0)==(D|0)){I=179864}else{I=c[53424+(F<<2)>>2]|0}j=+h[C+32>>3];D=c[C+16>>2]|0;if((D|0)==(F|0)){J=179864}else{J=c[53424+(D<<2)>>2]|0}q=+h[C+40>>3];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=H,h[v+8>>3]=G,c[v+16>>2]=I,h[v+24>>3]=j,c[v+32>>2]=J,h[v+40>>3]=q,v)|0);D=c[C+48>>2]|0;if((D|0)==0){aI(131440,5,1,b|0)}else if((D|0)==1){aI(126448,7,1,b|0)}else if((D|0)==2){aI(131280,6,1,b|0)}D=c[C+52>>2]|0;if((D|0)==0){aI(90568,9,1,b|0)}else{cf(b|0,172464,(v=i,i=i+8|0,c[v>>2]=D,v)|0)}D=c[C+64>>2]|0;if((D|0)!=0){cf(b|0,126104,(v=i,i=i+8|0,c[v>>2]=D,v)|0)}cf(b|0,124744,(v=i,i=i+8|0,c[v>>2]=(c[C+56>>2]|0)==0?150704:150856,v)|0);if((a[C+184|0]&1)!=0){aI(199048,11,1,b|0)}D=C+72|0;if((c[D>>2]|0)!=0){aI(145280,10,1,b|0);jg(b,D)}D=C+88|0;if((c[D>>2]|0)==0){aI(126e3,8,1,b|0)}else{aI(170816,6,1,b|0);ji(b,D,1)}aI(216256,8,1,b|0);D=c[C+144>>2]|0;if((D|0)==0){K=179864}else{K=c[53424+(D<<2)>>2]|0}q=+h[C+160>>3];F=c[C+148>>2]|0;if((F|0)==(D|0)){L=179864}else{L=c[53424+(F<<2)>>2]|0}j=+h[C+168>>3];D=c[C+152>>2]|0;if((D|0)==(F|0)){M=179864}else{M=c[53424+(D<<2)>>2]|0}G=+h[C+176>>3];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=K,h[v+8>>3]=q,c[v+16>>2]=L,h[v+24>>3]=j,c[v+32>>2]=M,h[v+40>>3]=G,v)|0);aF(10,b|0);C=c[C>>2]|0;}while((C|0)!=0)}aI(170408,12,1,b|0);C=c[10826]|0;if((C|0)!=0){M=C;do{cf(b|0,170056,(v=i,i=i+8|0,c[v>>2]=c[M+4>>2],v)|0);C=c[M+8>>2]|0;if((C|0)==0){N=179864}else{N=c[53424+(C<<2)>>2]|0}G=+h[M+24>>3];L=c[M+12>>2]|0;if((L|0)==(C|0)){O=179864}else{O=c[53424+(L<<2)>>2]|0}j=+h[M+32>>3];C=c[M+16>>2]|0;if((C|0)==(L|0)){P=179864}else{P=c[53424+(C<<2)>>2]|0}q=+h[M+40>>3];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=N,h[v+8>>3]=G,c[v+16>>2]=O,h[v+24>>3]=j,c[v+32>>2]=P,h[v+40>>3]=q,v)|0);aK(((a[M+88|0]&1)!=0?127520:127448)|0,b|0);C=c[M+48>>2]|0;if((C|0)==0){Q=179864}else{Q=c[53424+(C<<2)>>2]|0}q=+h[M+64>>3];L=c[M+52>>2]|0;if((L|0)==(C|0)){R=179864}else{R=c[53424+(L<<2)>>2]|0}j=+h[M+72>>3];C=c[M+56>>2]|0;if((C|0)==(L|0)){S=179864}else{S=c[53424+(C<<2)>>2]|0}G=+h[M+80>>3];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=Q,h[v+8>>3]=q,c[v+16>>2]=R,h[v+24>>3]=j,c[v+32>>2]=S,h[v+40>>3]=G,v)|0);C=(c[M+100>>2]|0)==0?150704:150856;L=c[M+200>>2]|0;if((L|0)==2){T=128e3}else{T=(L|0)==1?127904:127768}cf(b|0,169144,(v=i,i=i+24|0,c[v>>2]=c[72304+(c[M+160>>2]<<2)>>2],c[v+8>>2]=C,c[v+16>>2]=T,v)|0);ji(b,M+104|0,0);G=+h[M+168>>3];if(G>0.0){C=c[25376+(c[M+176>>2]<<2)>>2]|0;j=+h[M+184>>3];q=+h[M+192>>3];cf(b|0,165352,(v=i,i=i+32|0,c[v>>2]=C,h[v+8>>3]=G,h[v+16>>3]=j,h[v+24>>3]=q,v)|0)}aF(10,b|0);M=c[M>>2]|0;}while((M|0)!=0)}cf(b|0,164920,(v=i,i=i+8|0,c[v>>2]=(a[30080]&1)!=0?164520:126024,v)|0);aI(164048,17,1,b|0);M=c[10820]|0;if((M|0)!=0){T=M;do{cf(b|0,163384,(v=i,i=i+8|0,c[v>>2]=c[T+4>>2],v)|0);ji(b,T+8|0,1);aF(10,b|0);T=c[T>>2]|0;}while((T|0)!=0)}aI(162896,18,1,b|0);T=c[10824]|0;if((T|0)!=0){M=T;do{cf(b|0,162248,(v=i,i=i+8|0,c[v>>2]=c[M+4>>2],v)|0);T=(c[M+12>>2]|0)==0?150704:150856;S=c[M+112>>2]|0;if((S|0)==2){U=128e3}else{U=(S|0)==1?127904:127768}cf(b|0,169144,(v=i,i=i+24|0,c[v>>2]=c[72304+(c[M+72>>2]<<2)>>2],c[v+8>>2]=T,c[v+16>>2]=U,v)|0);ji(b,M+16|0,0);q=+h[M+80>>3];if(q>0.0){T=c[25376+(c[M+88>>2]<<2)>>2]|0;j=+h[M+96>>3];G=+h[M+104>>3];cf(b|0,165352,(v=i,i=i+32|0,c[v>>2]=T,h[v+8>>3]=q,h[v+16>>3]=j,h[v+24>>3]=G,v)|0)}aF(10,b|0);M=c[M>>2]|0;}while((M|0)!=0)}aI(159152,20,1,b|0);M=c[9670]|0;if((M|0)==4){U=c[9671]|0;G=+h[4840];cf(b|0,158040,(v=i,i=i+16|0,c[v>>2]=U,h[v+8>>3]=G,v)|0)}else if((M|0)==1){aI(156128,11,1,b|0)}else if((M|0)==2){aI(155064,14,1,b|0)}else{cf(b|0,158640,(v=i,i=i+8|0,c[v>>2]=c[9671],v)|0)}aI(154704,6,1,b|0);aI(216256,8,1,b|0);M=c[9720]|0;if((M|0)==0){V=179864}else{V=c[53424+(M<<2)>>2]|0}G=+h[4862];U=c[9721]|0;if((U|0)==(M|0)){W=179864}else{W=c[53424+(U<<2)>>2]|0}j=+h[4863];M=c[9722]|0;if((M|0)==(U|0)){X=179864}else{X=c[53424+(M<<2)>>2]|0}q=+h[4864];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=V,h[v+8>>3]=G,c[v+16>>2]=W,h[v+24>>3]=j,c[v+32>>2]=X,h[v+40>>3]=q,v)|0);aF(10,b|0);jj(b,0);aI(154408,15,1,b|0);if((a[66164]&1)!=0){q=+h[8271];cf(b|0,154056,(v=i,i=i+16|0,c[v>>2]=56880,h[v+8>>3]=q,v)|0)}if((a[65476]&1)!=0){q=+h[8185];cf(b|0,154056,(v=i,i=i+16|0,c[v>>2]=56856,h[v+8>>3]=q,v)|0)}if((a[68916]&1)!=0){q=+h[8615];cf(b|0,154056,(v=i,i=i+16|0,c[v>>2]=56976,h[v+8>>3]=q,v)|0)}if((a[68228]&1)!=0){q=+h[8529];cf(b|0,154056,(v=i,i=i+16|0,c[v>>2]=56952,h[v+8>>3]=q,v)|0)}if((a[64788]&1)!=0){q=+h[8099];cf(b|0,154056,(v=i,i=i+16|0,c[v>>2]=56832,h[v+8>>3]=q,v)|0)}if((a[66852]&1)!=0){q=+h[8357];cf(b|0,154056,(v=i,i=i+16|0,c[v>>2]=56904,h[v+8>>3]=q,v)|0)}if((a[69604]&1)!=0){q=+h[8701];cf(b|0,154056,(v=i,i=i+16|0,c[v>>2]=57e3,h[v+8>>3]=q,v)|0)}X=(c[8764]|0)==2?88392:179864;q=+h[4384];W=(c[6588]|0)==2?88392:179864;j=+h[3296];V=(c[1057]|0)==2?88392:179864;G=+h[531];M=(c[14091]|0)==2?88392:179864;s=+h[7048];cf(b|0,89120,(v=i,i=i+72|0,c[v>>2]=153688,c[v+8>>2]=X,h[v+16>>3]=q,c[v+24>>2]=W,h[v+32>>3]=j,c[v+40>>2]=V,h[v+48>>3]=G,c[v+56>>2]=M,h[v+64>>3]=s,v)|0);s=+h[3818];M=c[44936+(c[11252]<<2)>>2]|0;V=(a[30528]&1)!=0?179864:213448;W=(a[32936]&1)!=0?179864:213448;cf(b|0,153216,(v=i,i=i+40|0,h[v>>3]=+h[3817],h[v+8>>3]=s,c[v+16>>2]=M,c[v+24>>2]=V,c[v+32>>2]=W,v)|0);W=c[8270]|0;if((W|0)!=0){cf(b|0,152808,(v=i,i=i+8|0,c[v>>2]=W,v)|0)}W=c[12886]|0;if((W|0)==0){Y=0}else{cf(b|0,152408,(v=i,i=i+8|0,c[v>>2]=W,v)|0);Y=(c[12886]|0)!=0}if(!((c[8270]|0)!=0|Y)){aI(152040,18,1,b|0)}aI(151856,9,1,b|0);if((c[5094]|0)==1){aI(134552,3,1,b|0)}else{s=+g[3538];G=+g[3536];j=+g[3534];q=+g[3532];cf(b|0,151408,(v=i,i=i+32|0,h[v>>3]=s,h[v+8>>3]=G,h[v+16>>3]=j,h[v+24>>3]=q,v)|0)}Y=c[18072]|0;if((Y|0)==2){Z=150928;A=8906}else if((Y|0)!=0){Z=(Y|0)==3?150776:179864;A=8906}if((A|0)==8906){cf(b|0,151136,(v=i,i=i+8|0,c[v>>2]=Z,v)|0)}Z=c[6350]|0;A=c[9344]|0;Y=c[9342]|0;W=(a[46752]&1)!=0?179864:213448;V=(c[11690]|0)!=0?179864:213448;cf(b|0,150608,(v=i,i=i+48|0,c[v>>2]=c[6352],c[v+8>>2]=Z,c[v+16>>2]=A,c[v+24>>2]=Y,c[v+32>>2]=W,c[v+40>>2]=V,v)|0);V=c[11690]|0;if((V|0)==0){aF(10,b|0)}else if((V|0)==1){aI(150432,6,1,b|0)}else if((V|0)==2){aI(150288,9,1,b|0)}else if((V|0)==3){aI(150104,6,1,b|0)}if((a[35888]&1)==0){aI(149752,13,1,b|0)}else{cf(b|0,149912,(v=i,i=i+8|0,c[v>>2]=53520,v)|0)}if((a[43472]&1)!=0){aI(149592,11,1,b|0)}aI(149400,12,1,b|0);V=c[8732]|0;if((V|0)==1){aI(113784,10,1,b|0)}else if((V|0)==2){aI(113712,12,1,b|0)}else{aI(113904,10,1,b|0)}V=c[8528]|0;if((V|0)!=0){cf(b|0,148496,(v=i,i=i+8|0,c[v>>2]=V,v)|0)}V=a[47120]|0;if(V<<24>>24==0){aI(148224,34,1,b|0)}else{W=V<<24>>24;cf(b|0,148416,(v=i,i=i+8|0,c[v>>2]=W,v)|0)}W=c[11948]|0;if((aY(W|0,199184)|0)!=0){cf(b|0,147856,(v=i,i=i+8|0,c[v>>2]=W,v)|0)}if((a[47712]&1)!=0){aI(147600,21,1,b|0)}if((a[47472]&1)!=0){aI(147320,24,1,b|0)}if((a[38984]&1)==0){aI(197656,15,1,b|0)}else{W=(c[9744]|0)==0?150704:150856;V=c[9742]|0;Y=c[9734]|0;A=c[9738]|0;Z=a[38944]|0?136208:179864;M=a[38960]|0?136208:179864;cf(b|0,186344,(v=i,i=i+48|0,c[v>>2]=W,c[v+8>>2]=V,c[v+16>>2]=Y,c[v+24>>2]=A,c[v+32>>2]=Z,c[v+40>>2]=M,v)|0)}cf(b|0,147064,(v=i,i=i+8|0,c[v>>2]=c[13368],v)|0);aI(146824,14,1,b|0);M=c[13378]|0;if((M|0)==0){aI(146624,7,1,b|0)}else if((M|0)==1){aI(146456,12,1,b|0)}else if((M|0)==2){aI(146264,8,1,b|0)}aI(146096,21,1,b|0);M=c[13372]|0;if((M|0)==0){Z=c[13374]|0;cf(b|0,145944,(v=i,i=i+8|0,c[v>>2]=Z,v)|0)}else if((M|0)==1){Z=c[11662]|0;q=+h[Z>>3];j=+h[Z+8>>3];G=q+j*+(c[13374]|0);cf(b|0,145704,(v=i,i=i+24|0,h[v>>3]=q,h[v+8>>3]=j,h[v+16>>3]=G,v)|0)}else if((M|0)==2){cf(b|0,145496,(v=i,i=i+8|0,h[v>>3]=+h[c[11662]>>3],v)|0);if((c[13374]|0)>1){M=1;do{cf(b|0,107648,(v=i,i=i+8|0,h[v>>3]=+h[(c[11662]|0)+(M<<3)>>3],v)|0);M=M+1|0;}while((M|0)<(c[13374]|0))}aF(10,b|0)}G=+g[18074];j=+g[178];q=+g[38];s=+g[184];_=+g[44];cf(b|0,144928,(v=i,i=i+48|0,c[v>>2]=c[13366],h[v+8>>3]=G,h[v+16>>3]=j,h[v+24>>3]=q,h[v+32>>3]=s,h[v+40>>3]=_,v)|0);aI(144752,15,1,b|0);jh(b,107848,c[12890]|0);aI(144472,19,1,b|0);jh(b,144328,c[10058]|0);cf(b|0,126416,(v=i,i=i+8|0,c[v>>2]=56880,v)|0);ji(b,66656,0);aF(10,b|0);cf(b|0,126416,(v=i,i=i+8|0,c[v>>2]=56856,v)|0);ji(b,65968,0);aF(10,b|0);cf(b|0,126416,(v=i,i=i+8|0,c[v>>2]=56832,v)|0);ji(b,65280,0);aF(10,b|0);cf(b|0,126416,(v=i,i=i+8|0,c[v>>2]=56976,v)|0);ji(b,69408,0);aF(10,b|0);cf(b|0,126416,(v=i,i=i+8|0,c[v>>2]=56952,v)|0);ji(b,68720,0);aF(10,b|0);_=+h[77];if((a[624]&1)==0){cf(b|0,143976,(v=i,i=i+8|0,h[v>>3]=_,v)|0)}else{cf(b|0,144112,(v=i,i=i+8|0,h[v>>3]=_,v)|0)}M=c[16604]&3;if((M|0)==0){cf(b|0,143896,(v=i,i=i+8|0,c[v>>2]=56880,v)|0)}else if((M|0)==3){cf(b|0,143776,(v=i,i=i+8|0,c[v>>2]=56880,v)|0)}else if((M|0)==1){cf(b|0,143616,(v=i,i=i+8|0,c[v>>2]=56880,v)|0)}else if((M|0)==2){_=+h[8303];cf(b|0,143408,(v=i,i=i+16|0,c[v>>2]=56880,h[v+8>>3]=_,v)|0)}M=c[16432]&3;if((M|0)==0){cf(b|0,143896,(v=i,i=i+8|0,c[v>>2]=56856,v)|0)}else if((M|0)==3){cf(b|0,143776,(v=i,i=i+8|0,c[v>>2]=56856,v)|0)}else if((M|0)==1){cf(b|0,143616,(v=i,i=i+8|0,c[v>>2]=56856,v)|0)}else if((M|0)==2){_=+h[8217];cf(b|0,143408,(v=i,i=i+16|0,c[v>>2]=56856,h[v+8>>3]=_,v)|0)}M=c[16260]&3;if((M|0)==0){cf(b|0,143896,(v=i,i=i+8|0,c[v>>2]=56832,v)|0)}else if((M|0)==3){cf(b|0,143776,(v=i,i=i+8|0,c[v>>2]=56832,v)|0)}else if((M|0)==1){cf(b|0,143616,(v=i,i=i+8|0,c[v>>2]=56832,v)|0)}else if((M|0)==2){_=+h[8131];cf(b|0,143408,(v=i,i=i+16|0,c[v>>2]=56832,h[v+8>>3]=_,v)|0)}M=c[17292]&3;if((M|0)==0){cf(b|0,143896,(v=i,i=i+8|0,c[v>>2]=56976,v)|0)}else if((M|0)==3){cf(b|0,143776,(v=i,i=i+8|0,c[v>>2]=56976,v)|0)}else if((M|0)==1){cf(b|0,143616,(v=i,i=i+8|0,c[v>>2]=56976,v)|0)}else if((M|0)==2){_=+h[8647];cf(b|0,143408,(v=i,i=i+16|0,c[v>>2]=56976,h[v+8>>3]=_,v)|0)}M=c[17120]&3;if((M|0)==0){cf(b|0,143896,(v=i,i=i+8|0,c[v>>2]=56952,v)|0)}else if((M|0)==3){cf(b|0,143776,(v=i,i=i+8|0,c[v>>2]=56952,v)|0)}else if((M|0)==1){cf(b|0,143616,(v=i,i=i+8|0,c[v>>2]=56952,v)|0)}else if((M|0)==2){_=+h[8561];cf(b|0,143408,(v=i,i=i+16|0,c[v>>2]=56952,h[v+8>>3]=_,v)|0)}M=c[16776]&3;if((M|0)==0){cf(b|0,143896,(v=i,i=i+8|0,c[v>>2]=56904,v)|0)}else if((M|0)==3){cf(b|0,143776,(v=i,i=i+8|0,c[v>>2]=56904,v)|0)}else if((M|0)==1){cf(b|0,143616,(v=i,i=i+8|0,c[v>>2]=56904,v)|0)}else if((M|0)==2){_=+h[8389];cf(b|0,143408,(v=i,i=i+16|0,c[v>>2]=56904,h[v+8>>3]=_,v)|0)}jk(b,2);jk(b,1);jk(b,0);jk(b,6);jk(b,5);jk(b,3);jk(b,7);M=c[1119]|0;if((M|0)==0){$=179864}else{$=j3(M)|0}cf(b|0,143304,(v=i,i=i+24|0,c[v>>2]=179864,c[v+8>>2]=154440,c[v+16>>2]=$,v)|0);cf(b|0,142960,(v=i,i=i+16|0,c[v>>2]=179864,c[v+8>>2]=154440,v)|0);aI(216256,8,1,b|0);$=c[1140]|0;if(($|0)==0){aa=179864}else{aa=c[53424+($<<2)>>2]|0}_=+h[572];M=c[1141]|0;if((M|0)==($|0)){ab=179864}else{ab=c[53424+(M<<2)>>2]|0}s=+h[573];$=c[1142]|0;if(($|0)==(M|0)){ac=179864}else{ac=c[53424+($<<2)>>2]|0}q=+h[574];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=aa,h[v+8>>3]=_,c[v+16>>2]=ab,h[v+24>>3]=s,c[v+32>>2]=ac,h[v+40>>3]=q,v)|0);ac=c[1120]|0;if((ac|0)==0){ad=179864}else{ad=j3(ac)|0}cf(b|0,126104,(v=i,i=i+8|0,c[v>>2]=ad,v)|0);if((c[1122]|0)!=0){aI(145280,10,1,b|0);jg(b,4488)}if((c[1105]|0)==-3){aI(142704,16,1,b|0)}ad=c[1117]|0;if((ad|0)==0){aI(90568,9,1,b|0)}else{cf(b|0,172464,(v=i,i=i+8|0,c[v>>2]=ad,v)|0)}cf(b|0,154696,(v=i,i=i+8|0,c[v>>2]=(a[4600]&1)!=0?199048:179864,v)|0);cf(b|0,142592,(v=i,i=i+8|0,c[v>>2]=(c[1166]|0)!=0?196800:196168,v)|0);ad=c[1183]|0;if((ad|0)==0){ae=179864}else{ae=j3(ad)|0}cf(b|0,143304,(v=i,i=i+24|0,c[v>>2]=179864,c[v+8>>2]=133504,c[v+16>>2]=ae,v)|0);cf(b|0,142960,(v=i,i=i+16|0,c[v>>2]=179864,c[v+8>>2]=133504,v)|0);aI(216256,8,1,b|0);ae=c[1204]|0;if((ae|0)==0){af=179864}else{af=c[53424+(ae<<2)>>2]|0}q=+h[604];ad=c[1205]|0;if((ad|0)==(ae|0)){ag=179864}else{ag=c[53424+(ad<<2)>>2]|0}s=+h[605];ae=c[1206]|0;if((ae|0)==(ad|0)){ah=179864}else{ah=c[53424+(ae<<2)>>2]|0}_=+h[606];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=af,h[v+8>>3]=q,c[v+16>>2]=ag,h[v+24>>3]=s,c[v+32>>2]=ah,h[v+40>>3]=_,v)|0);ah=c[1184]|0;if((ah|0)==0){ai=179864}else{ai=j3(ah)|0}cf(b|0,126104,(v=i,i=i+8|0,c[v>>2]=ai,v)|0);if((c[1186]|0)!=0){aI(145280,10,1,b|0);jg(b,4744)}if((c[1169]|0)==-3){aI(142704,16,1,b|0)}ai=c[1181]|0;if((ai|0)==0){aI(90568,9,1,b|0)}else{cf(b|0,172464,(v=i,i=i+8|0,c[v>>2]=ai,v)|0)}cf(b|0,154696,(v=i,i=i+8|0,c[v>>2]=(a[4856]&1)!=0?199048:179864,v)|0);je(b,7);je(b,8);je(b,9);je(b,10);ai=c[16629]|0;if((ai|0)==0){aj=179864}else{aj=j3(ai)|0}cf(b|0,143304,(v=i,i=i+24|0,c[v>>2]=56880,c[v+8>>2]=202256,c[v+16>>2]=aj,v)|0);cf(b|0,142960,(v=i,i=i+16|0,c[v>>2]=56880,c[v+8>>2]=202256,v)|0);aI(216256,8,1,b|0);aj=c[16650]|0;if((aj|0)==0){ak=179864}else{ak=c[53424+(aj<<2)>>2]|0}_=+h[8327];ai=c[16651]|0;if((ai|0)==(aj|0)){al=179864}else{al=c[53424+(ai<<2)>>2]|0}s=+h[8328];aj=c[16652]|0;if((aj|0)==(ai|0)){am=179864}else{am=c[53424+(aj<<2)>>2]|0}q=+h[8329];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=ak,h[v+8>>3]=_,c[v+16>>2]=al,h[v+24>>3]=s,c[v+32>>2]=am,h[v+40>>3]=q,v)|0);am=c[16630]|0;if((am|0)==0){an=179864}else{an=j3(am)|0}cf(b|0,126104,(v=i,i=i+8|0,c[v>>2]=an,v)|0);if((c[16632]|0)!=0){aI(145280,10,1,b|0);jg(b,66528)}if((c[16615]|0)==-3){aI(142704,16,1,b|0)}an=c[16627]|0;if((an|0)==0){aI(90568,9,1,b|0)}else{cf(b|0,172464,(v=i,i=i+8|0,c[v>>2]=an,v)|0)}cf(b|0,154696,(v=i,i=i+8|0,c[v>>2]=(a[66640]&1)!=0?199048:179864,v)|0);an=c[17317]|0;if((an|0)==0){ao=179864}else{ao=j3(an)|0}cf(b|0,143304,(v=i,i=i+24|0,c[v>>2]=56976,c[v+8>>2]=202256,c[v+16>>2]=ao,v)|0);cf(b|0,142960,(v=i,i=i+16|0,c[v>>2]=56976,c[v+8>>2]=202256,v)|0);aI(216256,8,1,b|0);ao=c[17338]|0;if((ao|0)==0){ap=179864}else{ap=c[53424+(ao<<2)>>2]|0}q=+h[8671];an=c[17339]|0;if((an|0)==(ao|0)){aq=179864}else{aq=c[53424+(an<<2)>>2]|0}s=+h[8672];ao=c[17340]|0;if((ao|0)==(an|0)){ar=179864}else{ar=c[53424+(ao<<2)>>2]|0}_=+h[8673];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=ap,h[v+8>>3]=q,c[v+16>>2]=aq,h[v+24>>3]=s,c[v+32>>2]=ar,h[v+40>>3]=_,v)|0);ar=c[17318]|0;if((ar|0)==0){as=179864}else{as=j3(ar)|0}cf(b|0,126104,(v=i,i=i+8|0,c[v>>2]=as,v)|0);if((c[17320]|0)!=0){aI(145280,10,1,b|0);jg(b,69280)}if((c[17303]|0)==-3){aI(142704,16,1,b|0)}as=c[17315]|0;if((as|0)==0){aI(90568,9,1,b|0)}else{cf(b|0,172464,(v=i,i=i+8|0,c[v>>2]=as,v)|0)}cf(b|0,154696,(v=i,i=i+8|0,c[v>>2]=(a[69392]&1)!=0?199048:179864,v)|0);je(b,2);je(b,6);as=c[16457]|0;if((as|0)==0){at=179864}else{at=j3(as)|0}cf(b|0,143304,(v=i,i=i+24|0,c[v>>2]=56856,c[v+8>>2]=202256,c[v+16>>2]=at,v)|0);cf(b|0,142960,(v=i,i=i+16|0,c[v>>2]=56856,c[v+8>>2]=202256,v)|0);aI(216256,8,1,b|0);at=c[16478]|0;if((at|0)==0){au=179864}else{au=c[53424+(at<<2)>>2]|0}_=+h[8241];as=c[16479]|0;if((as|0)==(at|0)){av=179864}else{av=c[53424+(as<<2)>>2]|0}s=+h[8242];at=c[16480]|0;if((at|0)==(as|0)){aw=179864}else{aw=c[53424+(at<<2)>>2]|0}q=+h[8243];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=au,h[v+8>>3]=_,c[v+16>>2]=av,h[v+24>>3]=s,c[v+32>>2]=aw,h[v+40>>3]=q,v)|0);aw=c[16458]|0;if((aw|0)==0){ax=179864}else{ax=j3(aw)|0}cf(b|0,126104,(v=i,i=i+8|0,c[v>>2]=ax,v)|0);if((c[16460]|0)!=0){aI(145280,10,1,b|0);jg(b,65840)}if((c[16443]|0)==-3){aI(142704,16,1,b|0)}ax=c[16455]|0;if((ax|0)==0){aI(90568,9,1,b|0)}else{cf(b|0,172464,(v=i,i=i+8|0,c[v>>2]=ax,v)|0)}cf(b|0,154696,(v=i,i=i+8|0,c[v>>2]=(a[65952]&1)!=0?199048:179864,v)|0);ax=c[17145]|0;if((ax|0)==0){ay=179864}else{ay=j3(ax)|0}cf(b|0,143304,(v=i,i=i+24|0,c[v>>2]=56952,c[v+8>>2]=202256,c[v+16>>2]=ay,v)|0);cf(b|0,142960,(v=i,i=i+16|0,c[v>>2]=56952,c[v+8>>2]=202256,v)|0);aI(216256,8,1,b|0);ay=c[17166]|0;if((ay|0)==0){az=179864}else{az=c[53424+(ay<<2)>>2]|0}q=+h[8585];ax=c[17167]|0;if((ax|0)==(ay|0)){aA=179864}else{aA=c[53424+(ax<<2)>>2]|0}s=+h[8586];ay=c[17168]|0;if((ay|0)==(ax|0)){aB=179864}else{aB=c[53424+(ay<<2)>>2]|0}_=+h[8587];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=az,h[v+8>>3]=q,c[v+16>>2]=aA,h[v+24>>3]=s,c[v+32>>2]=aB,h[v+40>>3]=_,v)|0);aB=c[17146]|0;if((aB|0)==0){aC=179864}else{aC=j3(aB)|0}cf(b|0,126104,(v=i,i=i+8|0,c[v>>2]=aC,v)|0);if((c[17148]|0)!=0){aI(145280,10,1,b|0);jg(b,68592)}if((c[17131]|0)==-3){aI(142704,16,1,b|0)}aC=c[17143]|0;if((aC|0)==0){aI(90568,9,1,b|0)}else{cf(b|0,172464,(v=i,i=i+8|0,c[v>>2]=aC,v)|0)}cf(b|0,154696,(v=i,i=i+8|0,c[v>>2]=(a[68704]&1)!=0?199048:179864,v)|0);do{if((c[5094]|0)==0){je(b,1);je(b,5)}else{if(a[20368]|0){a[20368]=0;g[3538]=+g[5090];g[3536]=+g[5088];g[3534]=+g[5086];c[16336]=c[16336]^2;c[17024]=c[17024]^2}je(b,1);je(b,5);if(a[20368]|0){break}a[20368]=1;g[5090]=+g[3538];g[5088]=+g[3536];g[5086]=+g[3534];g[3538]=180.0;g[3536]=0.0;g[3534]=1.2999999523162842;c[16336]=c[16336]^2;c[17024]=c[17024]^2}}while(0);aC=c[16285]|0;if((aC|0)==0){aD=179864}else{aD=j3(aC)|0}cf(b|0,143304,(v=i,i=i+24|0,c[v>>2]=56832,c[v+8>>2]=202256,c[v+16>>2]=aD,v)|0);cf(b|0,142960,(v=i,i=i+16|0,c[v>>2]=56832,c[v+8>>2]=202256,v)|0);aI(216256,8,1,b|0);aD=c[16306]|0;if((aD|0)==0){aE=179864}else{aE=c[53424+(aD<<2)>>2]|0}_=+h[8155];aC=c[16307]|0;if((aC|0)==(aD|0)){aG=179864}else{aG=c[53424+(aC<<2)>>2]|0}s=+h[8156];aD=c[16308]|0;if((aD|0)==(aC|0)){aH=179864}else{aH=c[53424+(aD<<2)>>2]|0}q=+h[8157];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=aE,h[v+8>>3]=_,c[v+16>>2]=aG,h[v+24>>3]=s,c[v+32>>2]=aH,h[v+40>>3]=q,v)|0);aH=c[16286]|0;if((aH|0)==0){aJ=179864}else{aJ=j3(aH)|0}cf(b|0,126104,(v=i,i=i+8|0,c[v>>2]=aJ,v)|0);if((c[16288]|0)!=0){aI(145280,10,1,b|0);jg(b,65152)}if((c[16271]|0)==-3){aI(142704,16,1,b|0)}aJ=c[16283]|0;if((aJ|0)==0){aI(90568,9,1,b|0)}else{cf(b|0,172464,(v=i,i=i+8|0,c[v>>2]=aJ,v)|0)}cf(b|0,154696,(v=i,i=i+8|0,c[v>>2]=(a[65264]&1)!=0?199048:179864,v)|0);je(b,0);aJ=c[16801]|0;if((aJ|0)==0){aL=179864}else{aL=j3(aJ)|0}cf(b|0,143304,(v=i,i=i+24|0,c[v>>2]=56904,c[v+8>>2]=202256,c[v+16>>2]=aL,v)|0);cf(b|0,142960,(v=i,i=i+16|0,c[v>>2]=56904,c[v+8>>2]=202256,v)|0);aI(216256,8,1,b|0);aL=c[16822]|0;if((aL|0)==0){aM=179864}else{aM=c[53424+(aL<<2)>>2]|0}q=+h[8413];aJ=c[16823]|0;if((aJ|0)==(aL|0)){aN=179864}else{aN=c[53424+(aJ<<2)>>2]|0}s=+h[8414];aL=c[16824]|0;if((aL|0)==(aJ|0)){aO=179864}else{aO=c[53424+(aL<<2)>>2]|0}_=+h[8415];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=aM,h[v+8>>3]=q,c[v+16>>2]=aN,h[v+24>>3]=s,c[v+32>>2]=aO,h[v+40>>3]=_,v)|0);aO=c[16802]|0;if((aO|0)==0){aP=179864}else{aP=j3(aO)|0}cf(b|0,126104,(v=i,i=i+8|0,c[v>>2]=aP,v)|0);if((c[16804]|0)!=0){aI(145280,10,1,b|0);jg(b,67216)}if((c[16787]|0)==-3){aI(142704,16,1,b|0)}aP=c[16799]|0;if((aP|0)==0){aI(90568,9,1,b|0)}else{cf(b|0,172464,(v=i,i=i+8|0,c[v>>2]=aP,v)|0)}cf(b|0,154696,(v=i,i=i+8|0,c[v>>2]=(a[67328]&1)!=0?199048:179864,v)|0);je(b,3);cf(b|0,141912,(v=i,i=i+8|0,h[v>>3]=+h[11],v)|0);_=+h[4395];cf(b|0,141776,(v=i,i=i+16|0,c[v>>2]=(c[8786]|0)==3?141576:179864,h[v+8>>3]=_,v)|0);_=+h[7052];cf(b|0,141392,(v=i,i=i+16|0,c[v>>2]=(c[14100]|0)==3?141576:179864,h[v+8>>3]=_,v)|0);_=+h[3301];cf(b|0,141272,(v=i,i=i+16|0,c[v>>2]=(c[6598]|0)==3?141576:179864,h[v+8>>3]=_,v)|0);_=+h[535];cf(b|0,141072,(v=i,i=i+16|0,c[v>>2]=(c[1066]|0)==3?141576:179864,h[v+8>>3]=_,v)|0);cf(b|0,140928,(v=i,i=i+8|0,c[v>>2]=c[12908],v)|0);aI(140768,9,1,b|0);aI(((c[7662]|0)==1?140568:140376)|0,8,1,b|0);cf(b|0,140264,(v=i,i=i+8|0,c[v>>2]=30632,v)|0);aI(140768,9,1,b|0);aP=a[30641]|0;if((aP|0)==97){aI(140104,15,1,b|0)}else if((aP|0)==102){aI(139848,13,1,b|0)}else if((aP|0)==98){aI(139608,14,1,b|0)}else if((aP|0)==100){aI(139464,11,1,b|0)}aP=c[7665]|0;cf(b|0,139248,(v=i,i=i+16|0,c[v>>2]=c[7664],c[v+8>>2]=aP,v)|0);aI(139080,7,1,b|0);aP=a[30639]|0;if((aP|0)==99){aI(89896,6,1,b|0)}else if((aP|0)==98){aI(138664,5,1,b|0)}else if((aP|0)==114){aI(74552,3,1,b|0)}aK(((a[30640]|0)!=0?73808:138016)|0,b|0);aI(137864,10,1,b|0);aP=c[7661]|0;if((aP|0)>0){cf(b|0,137704,(v=i,i=i+8|0,c[v>>2]=aP,v)|0)}else{aO=(aP|0)!=0?137592:137416;aK(aO|0,b|0)}aI(137296,15,1,b|0);aO=c[7663]|0;if((aO|0)==4){aI(105792,4,1,b|0)}else if((aO|0)==5){aI(167728,7,1,b|0)}else if((aO|0)==6){aI(100616,6,1,b|0)}else if((aO|0)==7){aI(103256,3,1,b|0)}else if((aO|0)==8){aI(99528,3,1,b|0)}else{cf(b|0,136120,(v=i,i=i+8|0,c[v>>2]=aO+1,v)|0)}aF(10,b|0);aO=(a[20684]|0)!=0?137784:137920;aP=c[5168]|0;cf(b|0,135880,(v=i,i=i+24|0,c[v>>2]=(a[20668]|0)==112?135696:135584,c[v+8>>2]=aO,c[v+16>>2]=aP,v)|0);cf(b|0,135120,(v=i,i=i+8|0,h[v>>3]=+h[2705],v)|0);do{if((c[5163]|0)==103){aI(134936,5,1,b|0)}else{aI(134744,12,1,b|0);aP=c[5174]|0;if((aP|0)==114){aI(134624,4,1,b|0)}else if((aP|0)==104){aI(134504,4,1,b|0)}else if((aP|0)==99){aI(134336,4,1,b|0)}else if((aP|0)==121){aI(134152,4,1,b|0)}else if((aP|0)==120){aI(133992,4,1,b|0)}else{cf(c[m>>2]|0,133856,(v=i,i=i+24|0,c[v>>2]=133776,c[v+8>>2]=871,c[v+16>>2]=aP<<24>>24,v)|0)}aI(133576,13,1,b|0);aP=c[5163]|0;if((aP|0)==114){aO=c[5164]|0;aN=c[5165]|0;aM=c[5166]|0;cf(b|0,133464,(v=i,i=i+24|0,c[v>>2]=aO,c[v+8>>2]=aN,c[v+16>>2]=aM,v)|0);break}else if((aP|0)==100){aI(133112,9,1,b|0);if((c[5172]|0)>0){aM=0;do{aN=c[5173]|0;_=+h[aN+(aM<<5)+8>>3];s=+h[aN+(aM<<5)+16>>3];q=+h[aN+(aM<<5)+24>>3];cf(b|0,132952,(v=i,i=i+32|0,h[v>>3]=+h[aN+(aM<<5)>>3],h[v+8>>3]=_,h[v+16>>3]=s,h[v+24>>3]=q,v)|0);do{if((aM|0)<((c[5172]|0)-1|0)){aF(44,b|0);if(!((aM|0)==2|((aM|0)%4&-1|0)==2)){break}aI(132648,6,1,b|0)}}while(0);aM=aM+1|0;}while((aM|0)<(c[5172]|0))}aI(132568,3,1,b|0);break}else if((aP|0)==102){aM=c[5257]|0;t=c[5335]|0;cf(b|0,132440,(v=i,i=i+24|0,c[v>>2]=c[5179],c[v+8>>2]=aM,c[v+16>>2]=t,v)|0);break}else if((aP|0)==99){q=+h[2707];s=+h[2708];cf(b|0,132312,(v=i,i=i+24|0,h[v>>3]=+h[2706],h[v+8>>3]=q,h[v+16>>3]=s,v)|0);break}else{cf(c[m>>2]|0,142392,(v=i,i=i+24|0,c[v>>2]=133776,c[v+8>>2]=905,c[v+16>>2]=aP<<24>>24,v)|0);break}}}while(0);t=a[54016]|0;if(t<<24>>24!=110){aM=t<<24>>24==100?126024:132024;cf(b|0,132088,(v=i,i=i+8|0,c[v>>2]=aM,v)|0)}cf(b|0,131760,(v=i,i=i+8|0,c[v>>2]=(a[54017]|0)==118?131648:131544,v)|0);aM=c[13508]|0;if((aM|0)==0){aQ=179864}else{aQ=c[53424+(aM<<2)>>2]|0}s=+h[6756];t=c[13509]|0;if((t|0)==(aM|0)){aR=179864}else{aR=c[53424+(t<<2)>>2]|0}q=+h[6757];aM=c[13510]|0;if((aM|0)==(t|0)){aS=179864}else{aS=c[53424+(aM<<2)>>2]|0}_=+h[6758];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=aQ,h[v+8>>3]=s,c[v+16>>2]=aR,h[v+24>>3]=q,c[v+32>>2]=aS,h[v+40>>3]=_,v)|0);aI(83624,6,1,b|0);aS=c[13518]|0;if((aS|0)==0){aT=179864}else{aT=c[53424+(aS<<2)>>2]|0}_=+h[6761];aR=c[13519]|0;if((aR|0)==(aS|0)){aU=179864}else{aU=c[53424+(aR<<2)>>2]|0}q=+h[6762];aS=c[13520]|0;if((aS|0)==(aR|0)){aV=179864}else{aV=c[53424+(aS<<2)>>2]|0}s=+h[6763];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=aT,h[v+8>>3]=_,c[v+16>>2]=aU,h[v+24>>3]=q,c[v+32>>2]=aV,h[v+40>>3]=s,v)|0);cf(b|0,126160,(v=i,i=i+8|0,c[v>>2]=(c[13506]|0)==1?150856:150704,v)|0);do{if((a[54018]|0)==0){aI(131352,8,1,b|0)}else{aV=c[13505]|0;if((aV|0)<0){aI(131224,8,1,b|0);break}else{cf(b|0,131128,(v=i,i=i+8|0,c[v>>2]=aV,v)|0);break}}}while(0);if((a[54016]|0)==110){aI(131e3,16,1,b|0)}else{aF(10,b|0)}aV=(c[14068]|0)==257?130728:130528;aU=(c[14062]|0)==1?130472:205008;s=+h[7032];aT=(a[56264]&1)!=0?179864:136208;aS=(c[14067]|0)+1|0;q=+h[7035];aR=c[14072]|0;do{if((aR|0)==2){aW=202352}else{if((aR|0)==3){aW=108208;break}aW=(aR|0)==1?201e3:150208}}while(0);aR=(a[56292]&1)!=0?179864:213448;cf(b|0,130824,(v=i,i=i+64|0,c[v>>2]=aV,c[v+8>>2]=aU,h[v+16>>3]=s,c[v+24>>2]=aT,c[v+32>>2]=aS,h[v+40>>3]=q,c[v+48>>2]=aW,c[v+56>>2]=aR,v)|0);aI(129976,13,1,b|0);aR=c[8782]|0;c[8778]=aR;aW=c[8776]|0;L12586:do{if((aW|0)!=0){aS=aW;aT=aR;while(1){aU=c[8774]|0;do{if((aU|0)==0){c[8774]=aS;if((aT|0)!=0){aX=aS;aZ=aT;break}aV=c[8780]|0;c[8778]=aV;aX=aS;aZ=aV}else{aV=aU+((uA(aU|0)|0)+1|0)|0;c[8774]=aV;aX=aV;aZ=aT}}while(0);if(aX>>>0>=aZ>>>0){break}if((aX|0)==0){break L12586}cf(b|0,103640,(v=i,i=i+8|0,c[v>>2]=aX,v)|0);aT=c[8782]|0;c[8778]=aT;aS=c[8776]|0;if((aS|0)==0){break L12586}}c[8774]=0;c[8778]=0}}while(0);aF(10,b|0);aI(129680,13,1,b|0);aX=ur(16,0)|0;if((aX|0)!=0){aZ=aX;do{cf(b|0,103640,(v=i,i=i+8|0,c[v>>2]=aZ,v)|0);aZ=ur(16,0)|0;}while((aZ|0)!=0)}aF(10,b|0);aZ=c[57238]|0;if((aZ|0)==0){aI(129352,10,1,b|0)}else{cf(b|0,129480,(v=i,i=i+8|0,c[v>>2]=aZ,v)|0)}cf(b|0,129048,(v=i,i=i+8|0,c[v>>2]=(a[42568]&1)!=0?179864:136208,v)|0);aZ=c[10568]|0;if((aZ|0)==0){a_=aF(10,b|0)|0;i=d;return}cf(b|0,128984,(v=i,i=i+8|0,c[v>>2]=aZ,v)|0);a_=aF(10,b|0)|0;i=d;return}function jc(b){b=b|0;var d=0,e=0,f=0,g=0;d=i;jI(b);jb(b);e=c[10812]|0;if((e|0)!=0){f=e;do{e=c[f+12>>2]|0;if((e|0)!=0){cf(b|0,154696,(v=i,i=i+8|0,c[v>>2]=e,v)|0)}f=c[f>>2]|0;}while((f|0)!=0)}i8(b);cf(b|0,154696,(v=i,i=i+8|0,c[v>>2]=c[6924],v)|0);if((a[35352]|0)==0){g=aI(172e3,9,1,b|0)|0;i=d;return}aI(156144,3,1,b|0);if((b|0)!=0){aK(35352,b|0)}aF(10,b|0);g=aI(172e3,9,1,b|0)|0;i=d;return}function jd(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;jI(a);d=c[3524]|0;if((d|0)==0){aI(122336,21,1,a|0)}else{e=c[d>>2]|0;cf(a|0,135232,(v=i,i=i+16|0,c[v>>2]=e,c[v+8>>2]=13048,v)|0)}e=c[8244]|0;if((e|0)==0){aI(98152,13,1,a|0);f=aI(172e3,9,1,a|0)|0;i=b;return}else{cf(a|0,105136,(v=i,i=i+8|0,c[v>>2]=e,v)|0);f=aI(172e3,9,1,a|0)|0;i=b;return}}function je(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0,E=0,F=0;d=i;i=i+1024|0;e=d|0;f=d+48|0;g=d+96|0;j=d+144|0;k=d+192|0;l=d+240|0;n=d+288|0;o=d+336|0;p=d+384|0;q=d+464|0;r=d+544|0;s=d+624|0;t=d+704|0;u=d+784|0;w=d+864|0;x=d+944|0;y=56832+(b*24&-1)|0;cf(a|0,92200,(v=i,i=i+8|0,c[v>>2]=y,v)|0);z=64652+(b*688&-1)|0;do{if((c[z>>2]&1|0)==0){if((c[64808+(b*688&-1)>>2]|0)==1){aF(34,a|0);A=r|0;B=64813+(b*688&-1)|0;C=+h[64680+(b*688&-1)>>3];t3(l,C);D=C- +O(+C);t4(A,80,B,l,D);B=j3(A)|0;aK(B|0,a|0);aF(34,a|0);break}else{D=+h[64680+(b*688&-1)>>3];cf(a|0,92736,(v=i,i=i+8|0,h[v>>3]=D,v)|0);break}}else{B=64728+(b*688&-1)|0;if((c[B>>2]&1|0)!=0){if((c[64808+(b*688&-1)>>2]|0)==1){aF(34,a|0);A=p|0;E=64813+(b*688&-1)|0;D=+h[64736+(b*688&-1)>>3];t3(o,D);C=D- +O(+D);t4(A,80,E,o,C);E=j3(A)|0;aK(E|0,a|0);aF(34,a|0)}else{C=+h[64736+(b*688&-1)>>3];cf(a|0,92736,(v=i,i=i+8|0,h[v>>3]=C,v)|0)}aI(76472,3,1,a|0)}aF(42,a|0);if((c[B>>2]&2|0)==0){break}aI(76472,3,1,a|0);if((c[64808+(b*688&-1)>>2]|0)==1){aF(34,a|0);B=q|0;E=64813+(b*688&-1)|0;C=+h[64744+(b*688&-1)>>3];t3(n,C);D=C- +O(+C);t4(B,80,E,n,D);E=j3(B)|0;aK(E|0,a|0);aF(34,a|0);break}else{D=+h[64744+(b*688&-1)>>3];cf(a|0,92736,(v=i,i=i+8|0,h[v>>3]=D,v)|0);break}}}while(0);aI(223968,3,1,a|0);do{if((c[z>>2]&2|0)==0){if((c[64808+(b*688&-1)>>2]|0)==1){aF(34,a|0);n=u|0;q=64813+(b*688&-1)|0;D=+h[64688+(b*688&-1)>>3];t3(g,D);C=D- +O(+D);t4(n,80,q,g,C);q=j3(n)|0;aK(q|0,a|0);aF(34,a|0);break}else{C=+h[64688+(b*688&-1)>>3];cf(a|0,92736,(v=i,i=i+8|0,h[v>>3]=C,v)|0);break}}else{q=64732+(b*688&-1)|0;if((c[q>>2]&1|0)!=0){if((c[64808+(b*688&-1)>>2]|0)==1){aF(34,a|0);n=s|0;o=64813+(b*688&-1)|0;C=+h[64752+(b*688&-1)>>3];t3(k,C);D=C- +O(+C);t4(n,80,o,k,D);o=j3(n)|0;aK(o|0,a|0);aF(34,a|0)}else{D=+h[64752+(b*688&-1)>>3];cf(a|0,92736,(v=i,i=i+8|0,h[v>>3]=D,v)|0)}aI(76472,3,1,a|0)}aF(42,a|0);if((c[q>>2]&2|0)==0){break}aI(76472,3,1,a|0);if((c[64808+(b*688&-1)>>2]|0)==1){aF(34,a|0);q=t|0;o=64813+(b*688&-1)|0;D=+h[64760+(b*688&-1)>>3];t3(j,D);C=D- +O(+D);t4(q,80,o,j,C);o=j3(q)|0;aK(o|0,a|0);aF(34,a|0);break}else{C=+h[64760+(b*688&-1)>>3];cf(a|0,92736,(v=i,i=i+8|0,h[v>>3]=C,v)|0);break}}}while(0);j=c[64656+(b*688&-1)>>2]|0;cf(a|0,216880,(v=i,i=i+16|0,c[v>>2]=(j&2|0)!=0?179864:136208,c[v+8>>2]=(j&1|0)!=0?179864:136208,v)|0);if(!((c[z>>2]|0)!=0&(c[m>>2]|0)==(a|0))){aF(10,a|0);i=d;return}aI(201952,16,1,a|0);do{if((c[z>>2]&1|0)!=0){if((c[64808+(b*688&-1)>>2]|0)==1){aF(34,a|0);j=w|0;t=64813+(b*688&-1)|0;C=+h[64664+(b*688&-1)>>3];t3(f,C);D=C- +O(+C);t4(j,80,t,f,D);t=j3(j)|0;aK(t|0,a|0);aF(34,a|0);break}else{D=+h[64664+(b*688&-1)>>3];cf(a|0,92736,(v=i,i=i+8|0,h[v>>3]=D,v)|0);break}}}while(0);aF(58,a|0);do{if((c[z>>2]&2|0)!=0){if((c[64808+(b*688&-1)>>2]|0)==1){aF(34,a|0);f=x|0;w=64813+(b*688&-1)|0;D=+h[64672+(b*688&-1)>>3];t3(e,D);C=D- +O(+D);t4(f,80,w,e,C);w=j3(f)|0;aK(w|0,a|0);aF(34,a|0);break}else{C=+h[64672+(b*688&-1)>>3];cf(a|0,92736,(v=i,i=i+8|0,h[v>>3]=C,v)|0);break}}}while(0);aI(196384,4,1,a|0);b=c[z>>2]|0;if((b&4|0)==0){F=b}else{cf(a|0,185160,(v=i,i=i+8|0,c[v>>2]=y,v)|0);F=c[z>>2]|0}if((F&8|0)==0){i=d;return}cf(a|0,180048,(v=i,i=i+8|0,c[v>>2]=y,v)|0);i=d;return}function jf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0;d=i;e=c[b>>2]|0;if((e|0)==3){aI(163528,9,1,a|0);i=d;return}else if((e|0)==2|(e|0)==5){f=c[b+8>>2]|0;cf(a|0,167968,(v=i,i=i+16|0,c[v>>2]=(e|0)==2?179864:114984,c[v+8>>2]=f,v)|0)}else if((e|0)==1|(e|0)==4){g=+(c[b+4>>2]|0)/100.0;cf(a|0,175936,(v=i,i=i+16|0,c[v>>2]=(e|0)==1?179864:114984,h[v+8>>3]=g,v)|0)}else{aI(154480,7,1,a|0)}e=b+16|0;do{if((c[e>>2]|0)==1){if((c[b+20>>2]|0)!=-3){break}aI(151240,9,1,a|0);i=d;return}}while(0);aI(149416,6,1,a|0);jg(a,e);aF(10,a|0);i=d;return}function jg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0,j=0,k=0,l=0,m=0,n=0;d=i;e=c[b>>2]|0;if((e|0)==5){f=+h[b+8>>3];cf(a|0,136528,(v=i,i=i+8|0,h[v>>3]=f,v)|0);i=d;return}else if((e|0)==4){cf(a|0,138224,(v=i,i=i+8|0,h[v>>3]=+h[b+8>>3],v)|0);i=d;return}else if((e|0)==6){aI(140288,10,1,a|0);i=d;return}else if((e|0)==2){cf(a|0,141944,(v=i,i=i+8|0,c[v>>2]=c[b+4>>2],v)|0);i=d;return}else if((e|0)==3){g=c[7642]|0;j=c[b+4>>2]|0;k=-1;while(1){l=k+1|0;m=c[g+(l<<3)>>2]|0;if((m|0)==0){n=0;break}if((c[g+(l<<3)+4>>2]|0)==(j|0)){n=m;break}else{k=l}}if(+h[b+8>>3]<0.0){aI(134760,14,1,a|0);i=d;return}if((n|0)==0){cf(a|0,131792,(v=i,i=i+8|0,c[v>>2]=j,v)|0);i=d;return}else{cf(a|0,133184,(v=i,i=i+8|0,c[v>>2]=n,v)|0);i=d;return}}else if((e|0)==1){cf(a|0,143432,(v=i,i=i+8|0,c[v>>2]=(c[b+4>>2]|0)+1,v)|0);i=d;return}else{i=d;return}}function jh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if((c|0)==311){aI(121928,13,1,a|0);return}else if((c|0)==18){aI(129496,7,1,a|0);return}else if((c|0)==209){aI(103480,8,1,a|0);return}else if((c|0)==102){aI(120312,11,1,a|0);return}else if((c|0)==33){aI(128200,9,1,a|0);return}else if((c|0)==392){aI(114072,11,1,a|0);return}else if((c|0)==137){aI(104856,15,1,a|0);return}else if((c|0)==177){aI(104320,6,1,a|0);return}else if((c|0)==368){aI(98592,7,1,a|0);return}else if((c|0)==51){aI(126912,12,1,a|0);return}else if((c|0)==400){aI(98008,6,1,a|0);return}else if((c|0)==295){aI(124576,12,1,a|0);return}else if((c|0)==86){aI(116936,11,1,a|0);return}else if((c|0)==118){aI(116016,12,1,a|0);return}else if((c|0)==252){aI(100064,13,1,a|0);return}else if((c|0)==345){aI(110648,13,1,a|0);do{if((aY(b|0,107848)|0)==0){d=9320}else{if((aY(b|0,122960)|0)==0){d=9320;break}hF(43400,a)}}while(0);if((d|0)==9320){hF(43432,a)}aF(10,a|0);return}else if((c|0)==279){aI(123176,12,1,a|0);return}else if((c|0)==257){aI(100768,12,1,a|0);return}else if((c|0)==64){aI(125816,5,1,a|0);return}else if((c|0)==153){aI(115112,6,1,a|0);return}else if((c|0)==1){aI(130536,6,1,a|0);return}else if((c|0)==193){aI(103856,7,1,a|0);return}else if((c|0)==489){aI(96288,9,1,a|0);return}else if((c|0)==416){aI(97328,9,1,a|0);return}else if((c|0)==225){aI(101296,7,1,a|0);return}else if((c|0)==169){aI(105896,13,1,a|0);return}else if((c|0)==457){aI(96752,8,1,a|0);return}else if((c|0)==474){aI(99624,8,1,a|0);return}else if((c|0)==352){aI(99200,5,1,a|0);return}else{aI(95896,13,1,a|0);return}}function ji(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0.0;f=i;g=d+4|0;cf(b|0,95408,(v=i,i=i+8|0,c[v>>2]=(c[g>>2]|0)+1,v)|0);L12805:do{if((a[d+32|0]&1)!=0){aI(94936,10,1,b|0);j=d+40|0;k=c[j>>2]|0;if((k|0)==2){l=9373}else if((k|0)==1){cf(b|0,95144,(v=i,i=i+8|0,c[v>>2]=(c[d+44>>2]|0)+1,v)|0);break}do{if((l|0)==9373){if((c[g>>2]|0)!=-6){break}aI(93616,9,1,b|0);break L12805}}while(0);jg(b,j)}}while(0);cf(b|0,92904,(v=i,i=i+8|0,h[v>>3]=+h[d+16>>3],v)|0);if(!e){i=f;return}cf(b|0,92032,(v=i,i=i+8|0,c[v>>2]=(c[d+8>>2]|0)+1,v)|0);m=+h[d+24>>3];do{if(m==-3.0){aI(91352,19,1,b|0)}else{if(m==-2.0){aI(90696,18,1,b|0);break}else{cf(b|0,90312,(v=i,i=i+8|0,h[v>>3]=m,v)|0);break}}}while(0);cf(b|0,89624,(v=i,i=i+8|0,c[v>>2]=c[d+12>>2],v)|0);i=f;return}function jj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,w=0.0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0;e=i;f=c[10818]|0;if((f|0)==0){g=0}else{j=(d|0)==0;k=0;l=f;while(1){f=c[l+12>>2]|0;L12830:do{if((f|0)==1){n=c[l+4>>2]|0;do{if(j){o=n}else{if((n|0)==(d|0)){o=d;break}if((f|0)==4){p=9449;break L12830}else if((f|0)==3){p=9431;break L12830}else if((f|0)==2){p=9419;break L12830}else{p=9448;break L12830}}}while(0);n=(c[m>>2]|0)==(b|0)?86152:85072;q=l+4|0;cf(b|0,87232,(v=i,i=i+16|0,c[v>>2]=n,c[v+8>>2]=o,v)|0);if((c[l+104>>2]|0)==1){aI(84272,7,1,b|0);n=c[l+112>>2]|0;if((n|0)==0){r=179864}else{r=c[53424+(n<<2)>>2]|0}s=+h[l+128>>3];t=c[l+116>>2]|0;if((t|0)==(n|0)){u=179864}else{u=c[53424+(t<<2)>>2]|0}w=+h[l+136>>3];n=c[l+120>>2]|0;if((n|0)==(t|0)){x=179864}else{x=c[53424+(n<<2)>>2]|0}y=+h[l+144>>3];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=r,h[v+8>>3]=s,c[v+16>>2]=u,h[v+24>>3]=w,c[v+32>>2]=x,h[v+40>>3]=y,v)|0);aI(83624,6,1,b|0);n=c[l+152>>2]|0;if((n|0)==0){z=179864}else{z=c[53424+(n<<2)>>2]|0}y=+h[l+168>>3];t=c[l+156>>2]|0;if((t|0)==(n|0)){A=179864}else{A=c[53424+(t<<2)>>2]|0}w=+h[l+176>>3];n=c[l+160>>2]|0;if((n|0)==(t|0)){B=179864}else{B=c[53424+(n<<2)>>2]|0}s=+h[l+184>>3];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=z,h[v+8>>3]=y,c[v+16>>2]=A,h[v+24>>3]=w,c[v+32>>2]=B,h[v+40>>3]=s,v)|0);C=1;D=q;break}else{aI(82592,5,1,b|0);n=c[l+192>>2]|0;if((n|0)==0){E=179864}else{E=c[53424+(n<<2)>>2]|0}s=+h[l+208>>3];t=c[l+196>>2]|0;if((t|0)==(n|0)){F=179864}else{F=c[53424+(t<<2)>>2]|0}w=+h[l+216>>3];n=c[l+200>>2]|0;if((n|0)==(t|0)){G=179864}else{G=c[53424+(n<<2)>>2]|0}y=+h[l+224>>3];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=E,h[v+8>>3]=s,c[v+16>>2]=F,h[v+24>>3]=w,c[v+32>>2]=G,h[v+40>>3]=y,v)|0);aI(127448,4,1,b|0);n=c[l+232>>2]|0;if((n|0)==0){H=179864}else{H=c[53424+(n<<2)>>2]|0}y=+h[l+248>>3];t=c[l+236>>2]|0;if((t|0)==(n|0)){I=179864}else{I=c[53424+(t<<2)>>2]|0}w=+h[l+256>>3];n=c[l+240>>2]|0;if((n|0)==(t|0)){J=179864}else{J=c[53424+(n<<2)>>2]|0}s=+h[l+264>>3];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=H,h[v+8>>3]=y,c[v+16>>2]=I,h[v+24>>3]=w,c[v+32>>2]=J,h[v+40>>3]=s,v)|0);C=1;D=q;break}}else if((f|0)==4){p=9449}else if((f|0)==3){p=9431}else if((f|0)==2){p=9419}else{p=9448}}while(0);L12875:do{if((p|0)==9419){p=0;q=c[l+4>>2]|0;do{if(j){K=q}else{if((q|0)==(d|0)){K=d;break}if((f|0)==4){p=9449;break L12875}else if((f|0)==3){p=9431;break L12875}else{p=9448;break L12875}}}while(0);q=(c[m>>2]|0)==(b|0)?86152:85072;n=l+4|0;cf(b|0,79696,(v=i,i=i+16|0,c[v>>2]=q,c[v+8>>2]=K,v)|0);aI(84272,7,1,b|0);q=c[l+112>>2]|0;if((q|0)==0){L=179864}else{L=c[53424+(q<<2)>>2]|0}s=+h[l+128>>3];t=c[l+116>>2]|0;if((t|0)==(q|0)){M=179864}else{M=c[53424+(t<<2)>>2]|0}w=+h[l+136>>3];q=c[l+120>>2]|0;if((q|0)==(t|0)){N=179864}else{N=c[53424+(q<<2)>>2]|0}y=+h[l+144>>3];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=L,h[v+8>>3]=s,c[v+16>>2]=M,h[v+24>>3]=w,c[v+32>>2]=N,h[v+40>>3]=y,v)|0);aI(83624,6,1,b|0);q=c[l+152>>2]|0;if((q|0)==0){O=179864}else{O=c[53424+(q<<2)>>2]|0}y=+h[l+168>>3];cf(b|0,78968,(v=i,i=i+16|0,c[v>>2]=O,h[v+8>>3]=y,v)|0);y=+h[l+192>>3];w=+h[l+200>>3];cf(b|0,78400,(v=i,i=i+16|0,h[v>>3]=y,h[v+8>>3]=w,v)|0);C=1;D=n}}while(0);L12893:do{if((p|0)==9431){p=0;n=c[l+4>>2]|0;do{if(j){P=n}else{if((n|0)==(d|0)){P=d;break}if((f|0)==4){p=9449;break L12893}else{p=9448;break L12893}}}while(0);n=(c[m>>2]|0)==(b|0)?86152:85072;q=l+4|0;cf(b|0,78048,(v=i,i=i+16|0,c[v>>2]=n,c[v+8>>2]=P,v)|0);aI(84272,7,1,b|0);n=c[l+112>>2]|0;if((n|0)==0){Q=179864}else{Q=c[53424+(n<<2)>>2]|0}w=+h[l+128>>3];t=c[l+116>>2]|0;if((t|0)==(n|0)){R=179864}else{R=c[53424+(t<<2)>>2]|0}y=+h[l+136>>3];n=c[l+120>>2]|0;if((n|0)==(t|0)){S=179864}else{S=c[53424+(n<<2)>>2]|0}s=+h[l+144>>3];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=Q,h[v+8>>3]=w,c[v+16>>2]=R,h[v+24>>3]=y,c[v+32>>2]=S,h[v+40>>3]=s,v)|0);aI(83624,6,1,b|0);n=l+152|0;t=c[n>>2]|0;if((t|0)==0){T=179864}else{T=c[53424+(t<<2)>>2]|0}s=+h[l+168>>3];cf(b|0,78968,(v=i,i=i+16|0,c[v>>2]=T,h[v+8>>3]=s,v)|0);t=c[l+156>>2]|0;if((t|0)==(c[n>>2]|0)){U=179864}else{U=c[53424+(t<<2)>>2]|0}s=+h[l+176>>3];cf(b|0,77424,(v=i,i=i+16|0,c[v>>2]=U,h[v+8>>3]=s,v)|0);s=+h[l+192>>3];cf(b|0,76888,(v=i,i=i+8|0,h[v>>3]=s,v)|0);aI(76320,7,1,b|0);t=c[l+104>>2]|0;if((t|0)==2){aI(210848,2,1,b|0);C=1;D=q;break}else if((t|0)==0){aI(150688,2,1,b|0);C=1;D=q;break}else if((t|0)==1){aI(211336,2,1,b|0);C=1;D=q;break}else{C=1;D=q;break}}}while(0);do{if((p|0)==9448){p=0;C=k;D=l+4|0}else if((p|0)==9449){p=0;f=l+4|0;q=c[f>>2]|0;if(j){V=q}else{if((q|0)==(d|0)){V=d}else{C=k;D=f;break}}f=l+104|0;q=(c[m>>2]|0)==(b|0)?86152:85072;t=l+4|0;cf(b|0,74328,(v=i,i=i+16|0,c[v>>2]=q,c[v+8>>2]=V,v)|0);q=f+4|0;if((c[q>>2]|0)!=0){aI(82592,5,1,b|0);n=c[q>>2]|0;W=c[n>>2]|0;if((W|0)==0){X=179864}else{X=c[53424+(W<<2)>>2]|0}s=+h[n+16>>3];Y=c[n+4>>2]|0;if((Y|0)==(W|0)){Z=179864}else{Z=c[53424+(Y<<2)>>2]|0}y=+h[n+24>>3];W=c[n+8>>2]|0;if((W|0)==(Y|0)){_=179864}else{_=c[53424+(W<<2)>>2]|0}w=+h[n+32>>3];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=X,h[v+8>>3]=s,c[v+16>>2]=Z,h[v+24>>3]=y,c[v+32>>2]=_,h[v+40>>3]=w,v)|0)}n=f|0;if((c[n>>2]|0)>1){$=1}else{C=1;D=t;break}while(1){cf(b|0,((c[m>>2]|0)==(b|0)?73888:127448)|0,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);f=c[q>>2]|0;W=c[f+($*40&-1)>>2]|0;if((W|0)==0){aa=179864}else{aa=c[53424+(W<<2)>>2]|0}w=+h[f+($*40&-1)+16>>3];Y=c[f+($*40&-1)+4>>2]|0;if((Y|0)==(W|0)){ab=179864}else{ab=c[53424+(Y<<2)>>2]|0}y=+h[f+($*40&-1)+24>>3];W=c[f+($*40&-1)+8>>2]|0;if((W|0)==(Y|0)){ac=179864}else{ac=c[53424+(W<<2)>>2]|0}s=+h[f+($*40&-1)+32>>3];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=aa,h[v+8>>3]=w,c[v+16>>2]=ab,h[v+24>>3]=y,c[v+32>>2]=ac,h[v+40>>3]=s,v)|0);f=$+1|0;if((f|0)<(c[n>>2]|0)){$=f}else{C=1;D=t;break}}}}while(0);t=(c[m>>2]|0)==(b|0)?86152:85072;n=c[D>>2]|0;cf(b|0,73592,(v=i,i=i+16|0,c[v>>2]=t,c[v+8>>2]=n,v)|0);n=c[l+8>>2]|0;if((n|0)>0){ad=150856}else{ad=(n|0)<0?121920:150704}cf(b|0,73368,(v=i,i=i+8|0,c[v>>2]=ad,v)|0);s=+h[l+64>>3];if(s!=0.0){cf(b|0,223096,(v=i,i=i+8|0,h[v>>3]=s,v)|0)}aI(222648,3,1,b|0);n=c[l+52>>2]|0;do{if((n|0)==-7){aI(126024,7,1,b|0)}else{if((a[l+80|0]&1)==0){t=n+1|0;cf(b|0,121528,(v=i,i=i+8|0,c[v>>2]=t,v)|0);break}else{jg(b,l+88|0);break}}}while(0);aI(220776,11,1,b|0);jf(b,l+16|0);n=c[l>>2]|0;if((n|0)==0){g=C;break}else{k=C;l=n}}}if((d|0)<1|g){i=e;return}else{uf(c[13898]|0,218968,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function jk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,w=0,x=0,y=0,z=0.0,A=0;e=i;i=i+384|0;f=e|0;g=e+48|0;j=e+96|0;k=e+144|0;l=e+224|0;m=e+304|0;n=c[64916+(d*688&-1)>>2]|0;o=n&3;p=56832+(d*24&-1)|0;if((o|0)==0){cf(b|0,128832,(v=i,i=i+8|0,c[v>>2]=p,v)|0);i=e;return}q=(a[65072+(d*688&-1)|0]&1)!=0?145600:128472;r=+h[65056+(d*688&-1)>>3];s=+h[65064+(d*688&-1)>>3];t=65032+(d*688&-1)|0;u=(c[t>>2]|0)!=0?185408:185368;cf(b|0,128728,(v=i,i=i+56|0,c[v>>2]=p,c[v+8>>2]=(o|0)==2?128640:149416,c[v+16>>2]=q,h[v+24>>3]=r,h[v+32>>3]=s,c[v+40>>2]=(n&4|0)!=0?179864:136208,c[v+48>>2]=u,v)|0);u=c[t>>2]|0;if((u|0)!=0){cf(b|0,128080,(v=i,i=i+8|0,c[v>>2]=u,v)|0)}aI(216256,8,1,b|0);u=c[64984+(d*688&-1)>>2]|0;if((u|0)==0){w=179864}else{w=c[53424+(u<<2)>>2]|0}s=+h[65e3+(d*688&-1)>>3];t=c[64988+(d*688&-1)>>2]|0;if((t|0)==(u|0)){x=179864}else{x=c[53424+(t<<2)>>2]|0}r=+h[65008+(d*688&-1)>>3];u=c[64992+(d*688&-1)>>2]|0;if((u|0)==(t|0)){y=179864}else{y=c[53424+(u<<2)>>2]|0}z=+h[65016+(d*688&-1)>>3];cf(b|0,215704,(v=i,i=i+48|0,c[v>>2]=w,h[v+8>>3]=s,c[v+16>>2]=x,h[v+24>>3]=r,c[v+32>>2]=y,h[v+40>>3]=z,v)|0);do{if((a[65272+(d*688&-1)|0]&1)==0){aI(127936,12,1,b|0)}else{y=c[65128+(d*688&-1)>>2]|0;if((y|0)==2){aI(131280,6,1,b|0);break}else if((y|0)==0){aI(131440,5,1,b|0);break}else if((y|0)==1){aI(131216,7,1,b|0);break}else{break}}}while(0);cf(b|0,127832,(v=i,i=i+8|0,c[v>>2]=p,v)|0);y=64920+(d*688&-1)|0;x=c[y>>2]|0;do{if((x|0)==2){w=64952+(d*688&-1)|0;z=+h[w>>3];if(z!=-8.988465674311579e+307){if((c[64808+(d*688&-1)>>2]|0)==1){aF(34,b|0);u=k|0;t=64813+(d*688&-1)|0;r=+h[w>>3];t3(j,r);s=r- +O(+r);t4(u,80,t,j,s);t=j3(u)|0;aK(t|0,b|0);aF(34,b|0)}else{cf(b|0,92736,(v=i,i=i+8|0,h[v>>3]=z,v)|0)}aF(44,b|0)}z=+h[64960+(d*688&-1)>>3];cf(b|0,170912,(v=i,i=i+8|0,h[v>>3]=z,v)|0);t=64968+(d*688&-1)|0;if(+h[t>>3]==8.988465674311579e+307){break}aF(44,b|0);if((c[64808+(d*688&-1)>>2]|0)==1){aF(34,b|0);u=l|0;w=64813+(d*688&-1)|0;z=+h[t>>3];t3(g,z);s=z- +O(+z);t4(u,80,w,g,s);w=j3(u)|0;aK(w|0,b|0);aF(34,b|0);break}else{s=+h[t>>3];cf(b|0,92736,(v=i,i=i+8|0,h[v>>3]=s,v)|0);break}}else if((x|0)==1){aI(127656,9,1,b|0)}else if((x|0)==4){cf(b|0,127576,(v=i,i=i+8|0,c[v>>2]=p,v)|0)}else if((x|0)==5){cf(b|0,127464,(v=i,i=i+8|0,c[v>>2]=p,v)|0)}}while(0);cf(b|0,((a[65024+(d*688&-1)|0]&1)!=0?127160:127080)|0,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);x=c[64924+(d*688&-1)>>2]|0;do{if((x|0)!=0){if((a[x]|0)==0){break}cf(b|0,126104,(v=i,i=i+8|0,c[v>>2]=x,v)|0)}}while(0);x=64928+(d*688&-1)|0;if((c[x>>2]|0)!=0){aI(145280,10,1,b|0);jg(b,x)}aF(10,b|0);x=64944+(d*688&-1)|0;if((c[x>>2]|0)==0){i=e;return}g=(c[y>>2]|0)==3?179864:186440;cf(b|0,126896,(v=i,i=i+16|0,c[v>>2]=p,c[v+8>>2]=g,v)|0);aI(126656,2,1,b|0);g=c[x>>2]|0;if((g|0)!=0){x=64808+(d*688&-1)|0;p=m|0;m=64813+(d*688&-1)|0;d=g;do{g=d+12|0;do{if((c[g>>2]|0)<0){A=d+16|0}else{y=c[d+8>>2]|0;if((y|0)!=0){l=j3(y)|0;cf(b|0,103640,(v=i,i=i+8|0,c[v>>2]=l,v)|0)}if((c[x>>2]|0)==1){aF(34,b|0);s=+h[d>>3];t3(f,s);z=s- +O(+s);t4(p,80,m,f,z);l=j3(p)|0;aK(l|0,b|0);aF(34,b|0)}else{z=+h[d>>3];cf(b|0,92736,(v=i,i=i+8|0,h[v>>3]=z,v)|0)}l=c[g>>2]|0;if((l|0)!=0){cf(b|0,95144,(v=i,i=i+8|0,c[v>>2]=l,v)|0)}l=d+16|0;if((c[l>>2]|0)==0){A=l;break}aI(86120,2,1,b|0);A=l}}while(0);d=c[A>>2]|0;}while((d|0)!=0)}aI(84944,2,1,b|0);i=e;return}function jl(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;f=i;i=i+8|0;g=f|0;h=c[b>>2]|0;c[12918]=0;c[3530]=0;j=a[h]|0;if(j<<24>>24==0){k=0;l=c[3530]|0;m=c[1054]|0;n=m+(l*40&-1)+32|0;c[n>>2]=k;o=c[3530]|0;p=c[1054]|0;q=p+(o*40&-1)+36|0;c[q>>2]=0;r=c[3530]|0;s=c[1054]|0;t=s+(r*40&-1)|0;a[t]=1;u=c[3530]|0;i=f;return u|0}else{w=h;x=0;y=h;z=j;A=1}L13041:while(1){if((A|0)<(c[1052]|0)){B=z}else{dH();B=a[y]|0}L13046:do{if((aM(B&255|0)|0)==0){c[(c[1054]|0)+((c[3530]|0)*40&-1)+32>>2]=x;c[(c[1054]|0)+((c[3530]|0)*40&-1)+36>>2]=1;a[(c[1054]|0)+((c[3530]|0)*40&-1)|0]=1;j=a[y]|0;if(j<<24>>24==96){jm(b,e,x);C=x-1|0;D=c[b>>2]|0;break}L13051:do{if((bO(j&255|0)|0)==0){h=a[y]|0;if(h<<24>>24==95){E=x;F=9542;break}if(((h&255)-48|0)>>>0<10){a[(c[1054]|0)+((c[3530]|0)*40&-1)|0]=0;G=jn(y)|0;c[(c[1054]|0)+((c[3530]|0)*40&-1)+36>>2]=G;H=(x-1|0)+(c[(c[1054]|0)+((c[3530]|0)*40&-1)+36>>2]|0)|0;I=w;break}J=h<<24>>24;if((h<<24>>24|0)==46){if(((a[w+(x+1|0)|0]|0)-48|0)>>>0>=10){H=x;I=w;break}a[(c[1054]|0)+((c[3530]|0)*40&-1)|0]=0;G=jn(y)|0;c[(c[1054]|0)+((c[3530]|0)*40&-1)+36>>2]=G;H=(x-1|0)+(c[(c[1054]|0)+((c[3530]|0)*40&-1)+36>>2]|0)|0;I=w;break}else if((h<<24>>24|0)==39|(h<<24>>24|0)==34){G=(c[1054]|0)+((c[3530]|0)*40&-1)+36|0;c[G>>2]=(c[G>>2]|0)+1;G=a[y]|0;K=x+1|0;L=w+K|0;M=a[L]|0;if(M<<24>>24==G<<24>>24){H=K;I=w;break}N=G<<24>>24==34;O=G<<24>>24==39;P=w;Q=x;R=K;K=L;L=M;L13062:while(1){S=Q;T=R;U=K;M=L;L13064:while(1){if(M<<24>>24==0){break L13062}do{if(N&M<<24>>24==92){V=S+2|0;if((a[P+V|0]|0)==0){F=9567;break}W=(c[1054]|0)+((c[3530]|0)*40&-1)+36|0;c[W>>2]=(c[W>>2]|0)+2;X=V}else{F=9567}}while(0);L13070:do{if((F|0)==9567){F=0;do{if(N){if(M<<24>>24==96){break L13064}}else{if(!O){break}if((a[P+(S+2|0)|0]|0)!=39){break}V=S+3|0;if((a[P+V|0]|0)!=39){break}W=(c[1054]|0)+((c[3530]|0)*40&-1)+36|0;c[W>>2]=(c[W>>2]|0)+3;X=V;break L13070}}while(0);V=(c[1054]|0)+((c[3530]|0)*40&-1)+36|0;c[V>>2]=(c[V>>2]|0)+1;X=T}}while(0);V=X+1|0;W=P+V|0;Y=a[W]|0;if(Y<<24>>24==G<<24>>24){H=V;I=P;break L13051}else{S=X;T=V;U=W;M=Y}}jm(b,e,T);M=c[b>>2]|0;Y=S+1|0;W=M+Y|0;V=a[W]|0;if(V<<24>>24==34){H=Y;I=M;break L13051}else{P=M;Q=S;R=Y;K=W;L=V}}a[U]=G;a[P+(S+2|0)|0]=0;H=T;I=P;break}else if((h<<24>>24|0)==123){a[(c[1054]|0)+((c[3530]|0)*40&-1)|0]=0;c[(c[1054]|0)+((c[3530]|0)*40&-1)+8>>2]=2;L=x+1|0;K=c[3530]|0;R=c[1054]|0;Q=ca(w+L|0,153808,(v=i,i=i+24|0,c[v>>2]=R+(K*40&-1)+16,c[v+8>>2]=R+(K*40&-1)+24,c[v+16>>2]=g,v)|0)|0;if((Q|0)<1){c[12918]=(c[12918]|0)+1;K=c[3530]|0;c[3530]=K+1;a[(c[1054]|0)+(K*40&-1)|0]=1;C=x;D=w;break L13046}Z=c[3530]|0;if(!((Q|0)==3&(a[g]|0)==125)){F=9553;break L13041}Q=(c[1054]|0)+(Z*40&-1)+36|0;c[Q>>2]=(c[Q>>2]|0)+2;Q=L;while(1){L=Q+1|0;K=w+L|0;if((a[K]|0)==125){H=L;I=w;break L13051}R=(c[1054]|0)+((c[3530]|0)*40&-1)+36|0;c[R>>2]=(c[R>>2]|0)+1;if((a[K]|0)==0){F=9557;break L13041}else{Q=L}}}else{if((J|0)==35){k=x;F=9588;break L13041}else if((J|0)==125){c[12918]=(c[12918]|0)-1;H=x;I=w;break}else if((J|0)==94|(J|0)==43|(J|0)==45|(J|0)==47|(J|0)==37|(J|0)==126|(J|0)==40|(J|0)==41|(J|0)==91|(J|0)==93|(J|0)==59|(J|0)==58|(J|0)==63|(J|0)==44|(J|0)==36){H=x;I=w;break}else if((J|0)==33|(J|0)==60|(J|0)==62){Q=x+1|0;if((a[w+Q|0]|0)!=61){H=x;I=w;break}P=(c[1054]|0)+((c[3530]|0)*40&-1)+36|0;c[P>>2]=(c[P>>2]|0)+1;H=Q;I=w;break}else if((J|0)==38|(J|0)==124|(J|0)==61|(J|0)==42){Q=x+1|0;if(h<<24>>24!=(a[w+Q|0]|0)){H=x;I=w;break}P=(c[1054]|0)+((c[3530]|0)*40&-1)+36|0;c[P>>2]=(c[P>>2]|0)+1;H=Q;I=w;break}else{F=9581;break L13041}}}else{E=x;F=9542}}while(0);L13097:do{if((F|0)==9542){while(1){F=0;j=E+1|0;Q=w+j|0;if((bs(d[Q]|0|0)|0)==0){if((a[Q]|0)!=95){H=E;I=w;break L13097}}Q=(c[1054]|0)+((c[3530]|0)*40&-1)+36|0;c[Q>>2]=(c[Q>>2]|0)+1;E=j;F=9542}}}while(0);c[3530]=(c[3530]|0)+1;C=H;D=I}else{C=x;D=w}}while(0);h=C+1|0;j=D+h|0;Q=a[j]|0;if(Q<<24>>24==0){k=h;F=9587;break}w=D;x=h;y=j;z=Q;A=(c[3530]|0)+1|0}if((F|0)==9553){uf(Z,211216,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((F|0)==9581){uf(c[3530]|0,134656,(v=i,i=i+8|0,c[v>>2]=J,v)|0);return 0}else if((F|0)==9588){l=c[3530]|0;m=c[1054]|0;n=m+(l*40&-1)+32|0;c[n>>2]=k;o=c[3530]|0;p=c[1054]|0;q=p+(o*40&-1)+36|0;c[q>>2]=0;r=c[3530]|0;s=c[1054]|0;t=s+(r*40&-1)|0;a[t]=1;u=c[3530]|0;i=f;return u|0}else if((F|0)==9557){uf(c[3530]|0,154312,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((F|0)==9587){l=c[3530]|0;m=c[1054]|0;n=m+(l*40&-1)+32|0;c[n>>2]=k;o=c[3530]|0;p=c[1054]|0;q=p+(o*40&-1)+36|0;c[q>>2]=0;r=c[3530]|0;s=c[1054]|0;t=s+(r*40&-1)|0;a[t]=1;u=c[3530]|0;i=f;return u|0}return 0}function jm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=i;i=i+8|0;g=f|0;h=c[b>>2]|0;j=h+e|0;k=j;while(1){l=k+1|0;m=a[l]|0;if((m<<24>>24|0)==0|(m<<24>>24|0)==96){break}else{k=l}}m=l-j|0;n=ut(m)|0;do{if((n|0)==0){gk();o=ut(m)|0;if((o|0)!=0){p=o;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=121896,v)|0)}else{p=n}}while(0);n=h+(e+1|0)|0;uF(p|0,n|0,m|0);if((uA(n|0)|0)>>>0>=m>>>0){a[p+((l|0)==(j|0)?0:m-1|0)|0]=0}do{if((a[l]|0)==0){q=0;r=0}else{m=k+2|0;j=(uA(m|0)|0)+1|0;if(j>>>0<=1){q=j;r=0;break}n=ut(j)|0;do{if((n|0)==0){gk();h=ut(j)|0;if((h|0)!=0){s=h;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=104824,v)|0)}else{s=n}}while(0);uB(s|0,m|0);q=j;r=s}}while(0);eo(p,g);uu(p);p=c[g>>2]|0;g=0;s=e;while(1){e=g+1|0;k=a[p+g|0]|0;if((k<<24>>24|0)==0){break}else if((k<<24>>24|0)==10|(k<<24>>24|0)==13){t=s}else{a[(c[b>>2]|0)+s|0]=k;t=s+1|0}if((t|0)!=(c[d>>2]|0)){g=e;s=t;continue}dG();g=e;s=t}a[(c[b>>2]|0)+s|0]=0;uu(p);if((r|0)==0){a[25280]=0;i=f;return}p=s+q|0;if(p>>>0>(c[d>>2]|0)>>>0){do{dG();}while(p>>>0>(c[d>>2]|0)>>>0)}uB((c[b>>2]|0)+s|0,r|0);uu(r);a[25280]=0;i=f;return}function jn(b){b=b|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0.0;e=i;i=i+8|0;f=e|0;a[(c[1054]|0)+((c[3530]|0)*40&-1)|0]=0;c[(c[1054]|0)+((c[3530]|0)*40&-1)+8>>2]=1;g=0;while(1){j=a[b+g|0]|0;if(((j&255)-48|0)>>>0<10){g=g+1|0}else{break}}if(j<<24>>24==46){c[(c[1054]|0)+((c[3530]|0)*40&-1)+8>>2]=2;k=g;while(1){l=k+1|0;m=a[b+l|0]|0;if(((m&255)-48|0)>>>0<10){k=l}else{n=l;o=m;break}}}else{n=g;o=j}if((o<<24>>24|0)==101|(o<<24>>24|0)==69){c[(c[1054]|0)+((c[3530]|0)*40&-1)+8>>2]=2;o=n+1|0;j=a[b+o|0]|0;if((j<<24>>24|0)==45|(j<<24>>24|0)==43){g=n+2|0;p=g;q=a[b+g|0]|0}else{p=o;q=j}if(((q&255)-48|0)>>>0<10){q=p;while(1){j=q+1|0;if(((d[b+j|0]|0)-48|0)>>>0<10){q=j}else{r=j;break}}}else{q=(c[1054]|0)+((c[3530]|0)*40&-1)+32|0;c[q>>2]=(c[q>>2]|0)+p;uf(c[3530]|0,97936,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}}else{r=n}n=c[3530]|0;p=c[1054]|0;do{if((c[p+(n*40&-1)+8>>2]|0)==1){c[b0()>>2]=0;q=aE(b|0,f|0,0)|0;j=(c[b0()>>2]|0)==0;o=c[3530]|0;if(!j){uh(o,91904,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);c[(c[1054]|0)+((c[3530]|0)*40&-1)+8>>2]=2;s=c[3530]|0;t=c[1054]|0;break}c[(c[1054]|0)+(o*40&-1)+16>>2]=q;u=(c[f>>2]|0)-b|0;i=e;return u|0}else{s=n;t=p}}while(0);h[t+(s*40&-1)+24>>3]=0.0;w=+uz(b,0);h[(c[1054]|0)+((c[3530]|0)*40&-1)+16>>3]=w;u=r;i=e;return u|0}function jo(){var d=0,e=0,f=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aH=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aZ=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,ba=0,bb=0,bc=0,bd=0,bf=0,bg=0,bh=0,bj=0,bk=0,bl=0,bm=0,bn=0,bo=0,bp=0,bq=0,br=0,bs=0,bt=0,bu=0,bv=0,bw=0,bx=0,by=0,bz=0,bB=0,bC=0,bD=0,bE=0,bG=0,bH=0,bI=0,bJ=0,bK=0,bL=0,bM=0,bN=0,bO=0,bQ=0,bR=0,bS=0,bT=0,bV=0,bW=0,bX=0,bY=0,bZ=0,b_=0,b0=0,b1=0,b2=0,b3=0,b4=0,b5=0,b6=0,b7=0,b8=0,b9=0,cb=0,cc=0,cd=0,ce=0,cg=0,ch=0,ci=0,cj=0,ck=0,cl=0,cm=0,cn=0,co=0,cp=0,cq=0,cr=0,cs=0,ct=0,cu=0,cv=0,cw=0,cx=0,cy=0,cA=0,cC=0,cD=0,cE=0,cF=0,cG=0,cH=0,cI=0,cJ=0,cK=0,cL=0,cM=0,cN=0,cO=0,cP=0,cQ=0,cR=0,cT=0,cU=0,cV=0,cW=0,cX=0,cY=0,cZ=0,c_=0,c$=0,c0=0,c1=0,c2=0,c3=0,c4=0,c5=0,c6=0,c7=0,c8=0,c9=0,da=0,dc=0,dd=0,de=0,df=0,dg=0,dh=0,di=0,dj=0,dk=0,dm=0,dn=0,dp=0,dq=0,dr=0,ds=0,dt=0,du=0,dv=0,dw=0,dx=0,dy=0,dz=0,dA=0,dB=0,dC=0,dD=0,dE=0,dF=0,dG=0,dH=0,dI=0,dJ=0,dK=0,dL=0,dM=0,dN=0,dO=0,dP=0,dQ=0,dR=0,dS=0,dT=0,dU=0,dV=0,dW=0,dX=0,dY=0,dZ=0,d_=0,d$=0,d0=0,d1=0,d2=0,d3=0,d4=0,d5=0,d6=0,d7=0,d8=0,d9=0,eb=0,ec=0,ed=0,ee=0,ef=0,eg=0,eh=0,ei=0,ej=0,ek=0,el=0,em=0,en=0,eo=0,ep=0,eq=0,er=0,es=0,et=0,eu=0,ev=0,ew=0,ex=0,eA=0,eB=0,eD=0,eE=0,eF=0,eG=0,eH=0,eI=0,eJ=0,eK=0,eL=0,eM=0,eN=0,eO=0,eQ=0,eR=0,eS=0,eT=0,eU=0,eV=0,eW=0,eX=0,eY=0,eZ=0,e_=0,e$=0,e0=0,e2=0,e3=0,e4=0,e5=0,e6=0,e8=0,e9=0,fa=0,fb=0,fc=0,fd=0,fe=0,ff=0,fg=0,fh=0,fi=0,fj=0,fk=0,fl=0,fm=0,fn=0,fo=0,fp=0,fq=0,fr=0,fs=0,ft=0,fu=0,fv=0,fw=0,fx=0,fy=0,fz=0,fA=0,fB=0,fC=0,fD=0,fE=0,fF=0,fG=0,fH=0,fI=0,fJ=0,fK=0,fL=0,fM=0,fN=0,fO=0,fP=0,fQ=0,fS=0,fT=0,fU=0,fV=0,fW=0,fX=0,fY=0,fZ=0,f_=0,f$=0,f0=0,f1=0,f2=0,f3=0,f4=0,f5=0,f6=0,f7=0,f8=0,f9=0,ga=0,gb=0,gc=0,gd=0,ge=0,gf=0,gg=0,gh=0,gi=0,gj=0,gl=0,gm=0,gn=0,go=0,gp=0,gq=0,gs=0,gt=0,gu=0,gv=0,gw=0,gx=0,gy=0,gz=0,gA=0,gB=0,gC=0,gD=0,gE=0,gF=0,gG=0,gH=0,gI=0,gJ=0,gK=0,gL=0,gM=0,gN=0,gO=0,gP=0,gQ=0,gR=0,gS=0,gT=0,gU=0,gV=0,gW=0,gX=0.0,gY=0,gZ=0,g_=0,g$=0,g0=0,g1=0,g2=0,g3=0,g4=0,g5=0,g6=0,g7=0,g8=0,g9=0,ha=0,hb=0,hc=0.0,hd=0,he=0,hf=0,hg=0,hh=0,hi=0,hj=0,hk=0,hl=0,hm=0,hn=0,ho=0,hp=0,hq=0,hr=0,hs=0,ht=0,hu=0,hv=0,hw=0,hx=0,hy=0,hA=0,hB=0,hC=0,hF=0,hG=0,hK=0,hN=0,hP=0,hQ=0,hR=0,hS=0,hT=0,hU=0,hV=0,hW=0,hY=0,hZ=0,h_=0,h$=0,h0=0,h1=0,h2=0,h3=0,h4=0,h5=0,h6=0,h7=0,h8=0,h9=0,ia=0,ib=0,ic=0,id=0,ie=0,ig=0,ih=0,ii=0,ij=0,ik=0,il=0,im=0,io=0,ip=0,iq=0,ir=0,iu=0,iv=0,iy=0,iz=0,iA=0,iB=0,iC=0,iD=0,iE=0,iF=0,iG=0,iH=0,iI=0,iJ=0,iK=0,iL=0,iM=0,iN=0,iP=0,iR=0,iS=0,iT=0,iU=0,iV=0,iW=0,iX=0,iZ=0,i_=0,i$=0,i0=0,i1=0,i2=0,i3=0,i4=0,i5=0,i6=0,i7=0,i8=0,ja=0,jb=0,jc=0,jd=0,je=0,jf=0,jg=0,jh=0,ji=0,jj=0,jk=0,jl=0,jm=0,jn=0,jo=0,jy=0,jz=0,jA=0,jB=0,jC=0,jD=0,jE=0,jF=0,jG=0,jH=0,jI=0,jJ=0,jK=0,jL=0,jM=0,jN=0,jO=0,jP=0,jQ=0,jR=0,jS=0,jT=0,jU=0,jV=0,jW=0,jX=0,jY=0,jZ=0,j_=0,j$=0,j0=0,j1=0,j2=0,j3=0,j4=0,j5=0,j6=0,j7=0,j8=0,j9=0,ka=0,kb=0,kc=0,kd=0,ke=0,kf=0,kg=0,kh=0,ki=0,kj=0,kk=0,kl=0,km=0,kn=0,ko=0,kp=0,kq=0,kr=0,ks=0,kt=0,ku=0,kv=0,kw=0,kx=0,ky=0,kz=0,kA=0,kB=0,kC=0,kD=0,kE=0,kF=0,kG=0,kH=0,kI=0,kJ=0,kK=0,kL=0,kM=0,kN=0,kO=0,kP=0,kQ=0,kR=0,kS=0,kT=0,kU=0,kV=0,kW=0,kX=0,kY=0,kZ=0,k_=0,k$=0,k0=0,k1=0,k2=0,k3=0.0,k4=0,k5=0,k6=0,k7=0,k8=0,k9=0,la=0.0,lb=0.0,lc=0,ld=0,le=0,lf=0,lg=0,lh=0,li=0,lk=0,lm=0,ln=0,lo=0,lp=0,lq=0,lr=0,lt=0,lu=0,lv=0,lw=0,lx=0,ly=0,lA=0,lB=0,lC=0,lD=0,lE=0,lF=0,lG=0,lH=0,lI=0,lJ=0,lK=0,lL=0,lM=0,lN=0,lO=0,lP=0,lQ=0,lR=0,lS=0,lT=0,lU=0,lV=0.0,lW=0,lX=0,lY=0,lZ=0,l_=0,l$=0,l0=0,l1=0,l2=0,l3=0,l4=0,l5=0,l6=0,l7=0,l8=0,l9=0,ma=0,mb=0,mc=0,md=0,me=0,mf=0,mg=0,mh=0,mi=0,mj=0,mk=0.0,ml=0,mm=0,mn=0,mo=0,mp=0.0,mq=0,mr=0,ms=0,mt=0,mu=0,mv=0,mw=0,mx=0,my=0,mz=0,mA=0.0,mB=0,mC=0.0,mD=0,mE=0,mF=0.0,mG=0,mH=0,mI=0.0,mJ=0.0,mK=0,mL=0,mM=0.0,mN=0,mO=0,mP=0,mQ=0,mR=0,mS=0,mT=0,mU=0,mV=0,mW=0,mX=0,mY=0,mZ=0,m_=0,m$=0,m0=0,m1=0,m2=0.0,m3=0.0,m4=0.0,m5=0.0,m6=0,m7=0,m8=0,m9=0,na=0,nb=0.0,nc=0.0,nd=0,ne=0,nf=0,ng=0,nh=0,ni=0,nj=0,nk=0,nl=0,nm=0,nn=0,no=0,np=0,nq=0.0,nr=0.0,ns=0,nt=0,nu=0,nv=0.0,nw=0,nx=0,ny=0,nz=0.0,nA=0.0,nB=0.0,nC=0.0,nD=0.0,nE=0,nF=0,nG=0,nH=0,nI=0,nJ=0,nK=0,nL=0,nM=0,nN=0,nO=0,nP=0,nQ=0,nR=0,nS=0,nT=0,nU=0,nV=0,nW=0,nX=0,nY=0,nZ=0,n_=0,n$=0,n0=0,n1=0,n2=0,n3=0,n4=0,n5=0,n6=0,n7=0,n8=0,n9=0,oa=0,ob=0,oc=0,od=0,oe=0,of=0,og=0,oh=0,oi=0,oj=0,ok=0,ol=0,om=0,on=0,oo=0,op=0,oq=0,or=0,os=0,ot=0,ou=0,ov=0,ow=0,ox=0,oy=0,oz=0,oA=0,oB=0,oC=0,oD=0,oE=0,oF=0,oG=0,oH=0,oI=0,oJ=0,oK=0,oL=0,oM=0,oN=0,oO=0,oP=0,oQ=0,oR=0,oS=0,oT=0,oU=0,oV=0,oW=0,oX=0,oY=0,oZ=0,o_=0,o$=0,o0=0,o1=0,o2=0,o3=0,o4=0,o5=0,o6=0,o7=0,o8=0,o9=0,pa=0,pb=0,pc=0,pd=0,pe=0,pf=0,pg=0,ph=0,pi=0,pj=0,pk=0,pl=0,pm=0,pn=0,po=0,pp=0,pq=0,pr=0,ps=0,pt=0,pu=0,pv=0,pw=0,px=0,py=0,pz=0,pA=0,pB=0,pC=0,pD=0,pE=0,pF=0,pG=0,pH=0,pI=0,pJ=0,pK=0,pL=0,pM=0,pN=0,pO=0,pP=0,pQ=0,pR=0,pS=0,pT=0,pU=0,pV=0,pW=0,pX=0,pY=0,pZ=0,p_=0,p$=0,p0=0,p1=0,p2=0,p3=0,p4=0,p5=0,p6=0,p7=0,p8=0,p9=0,qa=0,qb=0,qc=0,qd=0,qe=0,qf=0,qg=0,qh=0,qi=0,qj=0,qk=0,ql=0,qm=0,qn=0,qo=0,qp=0,qq=0,qr=0,qs=0,qt=0,qu=0,qv=0,qw=0,qx=0,qy=0,qz=0,qA=0,qB=0,qC=0,qD=0,qE=0,qF=0,qG=0.0,qH=0,qI=0,qJ=0,qK=0,qL=0,qM=0,qN=0,qO=0.0,qP=0,qQ=0,qR=0,qS=0.0,qT=0,qU=0,qV=0,qW=0,qX=0,qY=0,qZ=0,q_=0,q$=0,q0=0,q1=0,q2=0,q3=0,q4=0,q5=0,q6=0.0,q7=0.0,q8=0.0,q9=0.0,ra=0.0,rb=0,rc=0,rd=0,re=0,rf=0,rg=0,rh=0,ri=0,rj=0,rk=0.0,rl=0,rm=0,rn=0,ro=0,rp=0.0,rq=0,rr=0.0,rs=0,rt=0,ru=0,rv=0,rw=0,rx=0,ry=0,rz=0,rA=0,rB=0,rC=0,rD=0,rE=0,rF=0,rG=0,rH=0,rI=0,rJ=0,rK=0,rL=0,rM=0,rN=0,rO=0,rP=0,rQ=0,rR=0.0,rS=0,rT=0,rU=0,rV=0,rW=0,rX=0,rY=0,rZ=0,r_=0,r$=0,r0=0,r1=0,r2=0,r3=0,r4=0.0,r5=0,r6=0,r7=0,r8=0,r9=0,sa=0,sb=0,sc=0,sd=0,se=0,sf=0,sg=0,sh=0,si=0,sj=0,sk=0,sl=0,sm=0,sn=0,so=0,sp=0,sq=0,sr=0,ss=0,st=0,su=0,sv=0,sw=0,sx=0,sy=0.0,sz=0.0,sA=0,sB=0,sC=0,sD=0,sE=0,sF=0,sG=0,sH=0,sI=0,sJ=0,sK=0,sL=0,sM=0,sN=0,sO=0,sP=0,sQ=0,sR=0,sS=0,sT=0,sU=0,sV=0,sW=0,sX=0,sY=0,sZ=0,s_=0,s$=0,s0=0,s1=0,s2=0,s3=0,s4=0,s5=0,s6=0,s7=0,s8=0,s9=0,ta=0,tb=0,tc=0,td=0,te=0,tf=0,tg=0,th=0,ti=0,tj=0,tk=0,tl=0,tm=0,tn=0,to=0,tp=0,tq=0,tr=0,ts=0,tt=0,tu=0,tv=0,tw=0,tx=0,ty=0,tz=0,tA=0,tB=0,tC=0,tD=0,tE=0,tF=0,tG=0.0,tH=0,tI=0,tJ=0,tK=0,tL=0,tM=0,tN=0,tO=0,tP=0,tQ=0,tR=0,tS=0,tT=0,tU=0,tV=0,tW=0,tX=0,tY=0,tZ=0,t_=0,t$=0,t0=0,t1=0,t2=0,t3=0,t4=0,t6=0,t7=0,t8=0,t9=0,ub=0,uc=0,ue=0,ug=0,ui=0,ul=0,um=0,un=0,uo=0,up=0,uv=0,uw=0,ux=0,uy=0,uC=0,uG=0,uH=0,uI=0,uJ=0,uK=0,uL=0,uM=0,uN=0,uO=0,uP=0,uQ=0,uR=0,uS=0,uT=0,uU=0,uV=0,uW=0,uX=0,uY=0,uZ=0,u_=0,u$=0,u0=0,u1=0,u2=0,u3=0,u4=0,u5=0,u6=0,u7=0.0,u8=0,u9=0,va=0,vb=0,vc=0,vd=0,ve=0.0,vf=0,vg=0,vh=0,vi=0,vj=0,vk=0,vl=0,vm=0,vn=0,vo=0,vp=0,vq=0,vr=0,vs=0,vt=0.0,vu=0,vv=0,vw=0.0,vx=0,vy=0,vz=0.0,vA=0,vB=0,vC=0.0,vD=0.0,vE=0,vF=0.0,vG=0.0,vH=0,vI=0,vJ=0,vK=0,vL=0,vM=0,vN=0,vO=0,vP=0,vQ=0,vR=0,vS=0,vT=0,vU=0.0,vV=0,vW=0.0,vX=0,vY=0,vZ=0,v_=0,v$=0,v0=0,v1=0,v2=0,v3=0,v4=0,v5=0,v6=0,v7=0,v8=0,v9=0,wa=0,wb=0.0,wc=0,wd=0,we=0,wf=0,wg=0,wh=0,wi=0,wj=0,wk=0,wl=0,wm=0,wn=0,wo=0,wp=0,wq=0,wr=0,ws=0,wt=0,wu=0,wv=0.0,ww=0.0,wx=0.0,wy=0.0,wz=0,wA=0,wB=0,wC=0,wD=0.0,wE=0,wF=0,wG=0,wH=0,wI=0,wJ=0.0,wK=0,wL=0,wM=0.0,wN=0,wO=0,wP=0,wQ=0,wR=0,wS=0,wT=0,wU=0,wV=0,wW=0,wX=0,wY=0,wZ=0,w_=0,w$=0,w0=0.0,w1=0,w2=0,w3=0,w4=0,w5=0,w6=0.0,w7=0.0,w8=0.0,w9=0.0,xa=0.0,xb=0.0,xc=0,xd=0,xe=0,xf=0,xg=0,xh=0,xi=0,xj=0,xk=0,xl=0,xm=0,xn=0,xo=0,xp=0.0,xq=0.0,xr=0.0,xs=0.0,xt=0.0,xu=0.0,xv=0,xw=0,xx=0,xy=0,xz=0,xA=0,xB=0,xC=0,xD=0,xE=0,xF=0,xG=0,xH=0,xI=0,xJ=0,xK=0,xL=0,xM=0,xN=0.0,xO=0,xP=0,xQ=0,xR=0,xS=0,xT=0,xU=0,xV=0,xW=0,xX=0,xY=0,xZ=0,x_=0.0,x$=0,x0=0,x1=0.0,x2=0.0,x3=0.0,x4=0.0,x5=0,x6=0,x7=0,x8=0,x9=0,ya=0,yb=0,yc=0,yd=0,ye=0,yf=0,yg=0,yh=0,yi=0,yj=0,yk=0,yl=0,ym=0,yn=0,yo=0,yp=0,yq=0,yr=0,ys=0,yt=0,yu=0,yv=0,yw=0,yx=0,yy=0.0,yz=0,yA=0,yB=0,yC=0,yD=0,yE=0,yF=0,yG=0,yH=0,yI=0,yJ=0,yK=0,yL=0,yM=0,yN=0,yO=0,yP=0,yQ=0,yR=0,yS=0,yT=0.0,yU=0,yV=0,yW=0,yX=0.0,yY=0,yZ=0,y_=0,y$=0,y0=0,y1=0,y2=0,y3=0,y4=0,y5=0,y6=0,y7=0,y8=0,y9=0,za=0,zb=0,zc=0.0,zd=0,ze=0,zf=0,zg=0,zh=0,zi=0,zj=0,zk=0.0,zl=0.0,zm=0,zn=0,zo=0,zp=0,zq=0,zr=0,zs=0,zt=0,zu=0,zv=0,zw=0,zx=0,zy=0,zz=0,zA=0,zB=0,zC=0.0,zD=0,zE=0,zF=0,zG=0,zH=0,zI=0,zJ=0,zK=0,zL=0,zM=0,zN=0,zO=0,zP=0,zQ=0,zR=0,zS=0,zT=0,zU=0.0,zV=0,zW=0,zX=0,zY=0,zZ=0,z_=0,z$=0,z0=0,z1=0,z2=0,z3=0,z4=0,z5=0,z6=0,z7=0,z8=0,z9=0,Aa=0,Ab=0,Ac=0,Ad=0,Ae=0,Af=0,Ag=0,Ah=0,Ai=0,Aj=0,Ak=0,Al=0,Am=0,An=0,Ao=0,Ap=0,Aq=0,Ar=0,As=0,At=0,Au=0,Av=0,Aw=0,Ax=0,Ay=0,Az=0,AA=0,AB=0,AC=0,AD=0.0,AE=0,AF=0,AG=0,AH=0,AI=0,AJ=0,AK=0,AL=0.0,AM=0,AN=0,AO=0,AP=0,AQ=0,AR=0,AS=0,AT=0,AU=0,AV=0,AW=0,AX=0,AY=0,AZ=0,A_=0,A$=0,A0=0,A1=0,A2=0,A3=0,A4=0,A5=0,A6=0,A7=0,A8=0,A9=0,Ba=0,Bb=0,Bc=0,Bd=0,Be=0,Bf=0,Bg=0.0,Bh=0,Bi=0,Bj=0,Bk=0,Bl=0,Bm=0.0,Bn=0,Bo=0,Bp=0,Bq=0,Br=0,Bs=0,Bt=0,Bu=0,Bv=0,Bw=0,Bx=0,By=0,Bz=0,BA=0,BB=0,BC=0.0,BD=0,BE=0,BF=0,BG=0,BH=0,BI=0,BJ=0,BK=0,BL=0,BM=0,BN=0,BO=0,BP=0,BQ=0,BR=0,BS=0.0,BT=0,BU=0,BV=0,BW=0,BX=0,BY=0,BZ=0,B_=0,B$=0,B0=0,B1=0,B2=0,B3=0,B4=0,B5=0,B6=0,B7=0,B8=0,B9=0,Ca=0,Cb=0,Cc=0,Cd=0,Ce=0,Cf=0,Cg=0,Ch=0,Ci=0,Cj=0,Ck=0,Cl=0,Cm=0,Cn=0,Co=0,Cp=0,Cq=0,Cr=0,Cs=0,Ct=0,Cu=0,Cv=0,Cw=0,Cx=0,Cy=0,Cz=0,CA=0,CB=0,CC=0,CD=0,CE=0,CF=0,CG=0,CH=0,CI=0,CJ=0,CK=0,CL=0,CM=0,CN=0,CO=0,CP=0,CQ=0,CR=0,CS=0,CT=0,CU=0,CV=0,CW=0,CX=0,CY=0,CZ=0,C_=0,C$=0,C0=0,C1=0,C2=0,C3=0.0,C4=0.0,C5=0.0,C6=0,C7=0,C8=0,C9=0,Da=0,Db=0.0,Dc=0,Dd=0,De=0,Df=0,Dg=0,Dh=0,Di=0,Dj=0,Dk=0,Dl=0,Dm=0,Dn=0,Do=0,Dp=0,Dq=0,Dr=0,Ds=0,Dt=0,Du=0,Dv=0,Dw=0,Dx=0,Dy=0,Dz=0,DA=0,DB=0,DC=0,DD=0,DE=0,DF=0,DG=0,DH=0,DI=0,DJ=0,DK=0,DL=0,DM=0,DN=0,DO=0,DP=0,DQ=0,DR=0,DS=0,DT=0,DU=0,DV=0,DW=0,DX=0,DY=0,DZ=0,D_=0,D$=0.0,D0=0.0,D1=0.0,D2=0,D3=0.0,D4=0,D5=0,D6=0,D7=0,D8=0,D9=0,Ea=0,Eb=0,Ec=0,Ed=0,Ee=0,Ef=0,Eg=0,Eh=0,Ei=0,Ej=0,Ek=0,El=0,Em=0,En=0,Eo=0,Ep=0,Eq=0,Er=0,Es=0,Et=0,Eu=0,Ev=0,Ew=0,Ex=0,Ey=0,Ez=0,EA=0,EB=0,EC=0,ED=0,EE=0,EF=0,EG=0,EH=0,EI=0,EJ=0,EK=0,EL=0,EM=0,EN=0,EO=0,EP=0,EQ=0,ER=0,ES=0,ET=0,EU=0,EV=0.0,EW=0.0,EX=0,EY=0,EZ=0,E_=0,E$=0,E0=0,E1=0,E2=0,E3=0,E4=0,E5=0,E6=0,E7=0,E8=0.0,E9=0.0,Fa=0.0,Fb=0.0,Fc=0.0,Fd=0.0,Fe=0,Ff=0,Fg=0,Fh=0.0,Fi=0,Fj=0.0,Fk=0,Fl=0,Fm=0,Fn=0.0,Fo=0.0,Fp=0,Fq=0,Fr=0,Fs=0,Ft=0,Fu=0,Fv=0,Fw=0,Fx=0,Fy=0,Fz=0;d=i;i=i+3552|0;e=d|0;f=d+24|0;j=d+48|0;k=d+72|0;l=d+96|0;n=d+120|0;o=d+144|0;p=d+168|0;q=d+192|0;r=d+216|0;s=d+240|0;t=d+264|0;u=d+288|0;x=d+312|0;y=d+336|0;z=d+360|0;A=d+384|0;B=d+408|0;C=d+432|0;D=d+456|0;E=d+480|0;F=d+504|0;G=d+544|0;H=d+560|0;I=d+584|0;J=d+608|0;K=d+632|0;L=d+656|0;M=d+680|0;N=d+704|0;O=d+728|0;R=d+752|0;S=d+776|0;T=d+968|0;U=d+992|0;V=d+1016|0;W=d+1040|0;X=d+1064|0;Y=d+1088|0;Z=d+1112|0;$=d+1136|0;ab=d+1160|0;ac=d+1184|0;ad=d+1208|0;ae=d+1216|0;af=d+1240|0;ag=d+1264|0;ah=d+1288|0;ai=d+1312|0;aj=d+1368|0;ak=d+1392|0;al=d+1424|0;am=d+1448|0;an=d+1472|0;ao=d+1496|0;ap=d+1520|0;aq=d+1544|0;ar=d+1552|0;as=d+1560|0;at=d+1568|0;au=d+1592|0;av=d+1616|0;aw=d+1640|0;ax=d+1664|0;ay=d+1688|0;aA=d+1712|0;aB=d+1736|0;aC=d+1760|0;aD=d+1784|0;aE=d+1808|0;aF=d+1832|0;aH=d+1840|0;aJ=d+1864|0;aK=d+1888|0;aL=d+1912|0;aM=d+1936|0;aN=d+1960|0;aO=d+1984|0;aP=d+2008|0;aR=d+2032|0;aS=d+2056|0;aT=d+2080|0;aU=d+2104|0;aV=d+2128|0;aW=d+2152|0;aX=d+2176|0;aZ=d+2184|0;a$=d+2192|0;a0=d+2216|0;a1=d+2240|0;a2=d+2280|0;a3=d+2304|0;a4=d+2328|0;a5=d+2352|0;a6=d+2368|0;a7=d+2392|0;a8=d+2416|0;a9=d+2424|0;ba=d+2448|0;bb=d+2472|0;bc=d+2496|0;bd=d+2528|0;bf=d+2552|0;bg=d+2576|0;bh=d+2600|0;bj=d+2624|0;bk=d+2648|0;bl=d+2672|0;bm=d+2696|0;bn=d+2720|0;bo=d+2744|0;bp=d+2768|0;bq=d+2792|0;br=d+2808|0;bs=d+2832|0;bt=d+2856|0;bu=d+2880|0;bv=d+2904|0;bw=d+2912|0;bx=d+2936|0;by=d+2944|0;bz=d+2952|0;bB=d+2960|0;bC=d+2968|0;bD=d+2976|0;bE=d+3e3|0;bG=d+3024|0;bH=d+3048|0;bI=d+3072|0;bJ=d+3096|0;bK=d+3120|0;bL=d+3144|0;bM=d+3168|0;bN=d+3192|0;bO=d+3216|0;bQ=d+3240|0;bR=d+3264|0;bS=d+3288|0;bT=d+3312|0;bV=d+3336|0;bW=d+3360|0;bX=d+3384|0;bY=d+3408|0;bZ=d+3432|0;b_=d+3456|0;b0=d+3480|0;b1=d+3504|0;b2=d+3528|0;b3=(c[13898]|0)+1|0;c[13898]=b3;b4=c[1054]|0;b5=c[b4+(b3*40&-1)+32>>2]|0;b6=c[10036]|0;do{if((a[b6+b5|0]|0)==110){if((a[b6+(b5+1|0)|0]|0)!=111){b7=6;break}if((a[37400]&1)==0){b8=b3;b9=b4;cb=b5}else{uh(b3,153488,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);cc=c[13898]|0;cd=c[1054]|0;b8=cc;b9=cd;cb=c[cd+(cc*40&-1)+32>>2]|0}c[b9+(b8*40&-1)+32>>2]=cb+2;cc=(c[1054]|0)+((c[13898]|0)*40&-1)+36|0;c[cc>>2]=(c[cc>>2]|0)-2;c[13898]=(c[13898]|0)-1;t5()}else{b7=6}}while(0);L7:do{if((b7|0)==6){cb=iw()|0;c[6074]=cb;do{if((cb|0)!=0){if((a[cb+38|0]&1)==0){break}b8=c[13898]|0;b9=c[8272]|0;L12:do{if((b8|0)<(b9|0)){b3=c[1054]|0;b5=b8;while(1){L16:do{if((a[b3+(b5*40&-1)|0]&1)!=0){b4=c[b3+(b5*40&-1)+36>>2]|0;b6=b3+(b5*40&-1)+32|0;cc=c[10036]|0;cd=0;while(1){if((cd|0)>=(b4|0)){break}if((a[cc+((c[b6>>2]|0)+cd|0)|0]|0)==(a[cd+103664|0]|0)){cd=cd+1|0}else{break L16}}if((cd|0)==1){ce=cb;break L12}}}while(0);b6=b5+1|0;c[13898]=b6;if((b6|0)<(b9|0)){b5=b6}else{ce=cb;break}}}else{ce=cb}}while(0);while(1){b9=c[ce>>2]|0;uu(c[ce+12>>2]|0);uu(ce);if((b9|0)==0){break}else{ce=b9}}i=d;return}}while(0);cb=c[13898]|0;b9=b2|0;b8=b2+8|0;b5=b0|0;b3=b1|0;b6=b_|0;cc=b_+8|0;b4=bZ|0;cg=bZ+8|0;ch=bY|0;ci=bY+8|0;cj=bX|0;ck=bX+8|0;cl=bW|0;cm=bW+8|0;cn=bT|0;co=bT+8|0;cp=bS|0;cq=bS+8|0;cr=bR|0;cs=bR+8|0;ct=bQ|0;cu=bQ+8|0;cv=bO|0;cw=bO+8|0;cx=bN|0;cy=bN+8|0;cA=bM|0;cC=bM+8|0;cD=bV|0;cE=bV+8|0;cF=bI|0;cG=bI+8|0;cH=bH|0;cI=bH+8|0;cJ=bG|0;cK=bG+8|0;cL=bL|0;cM=bL+8|0;cN=bK|0;cO=bK+8|0;cP=bJ|0;cQ=bJ+8|0;cR=bE|0;cT=bE+8|0;cU=bD|0;cV=bD+8|0;cW=bx|0;cX=bw|0;cY=bw+8|0;cZ=bu|0;c_=bu+8|0;c$=bt|0;c0=bt+8|0;c1=bs|0;c2=bs+8|0;c3=br|0;c4=br+8|0;c5=bq;c6=bp|0;c7=bp+8|0;c8=bo|0;c9=bo+8|0;da=bn|0;dc=bn+8|0;dd=bm|0;de=bm+8|0;df=bl|0;dg=bl+8|0;dh=bk|0;di=bk+8|0;dj=bj|0;dk=bj+8|0;dm=bq|0;dn=bq+8|0;dp=bh|0;dq=bh+8|0;dr=bg|0;ds=bg+8|0;dt=bf|0;du=bf+8|0;dv=bd|0;dw=bd+8|0;dx=bc|0;dy=bb|0;dz=bb+8|0;dA=dz;dB=dz;dz=bb+8|0;dC=a9|0;dD=a9+8|0;dE=ba|0;dF=ba+8|0;dG=a7|0;dH=a7+8|0;dI=a6|0;dJ=a6+8|0;dK=a5|0;dL=a4|0;dM=a4+8|0;dN=a2|0;dO=a2+8|0;dP=a3|0;dQ=a3+8|0;dR=a0+4|0;dS=a0+8|0;dT=aW+4|0;dU=aW+8|0;dV=aT|0;dW=aT+8|0;dX=aS|0;dY=aS+8|0;dZ=aP|0;d_=aP+8|0;d$=aO|0;d0=aO+8|0;d1=aR|0;d2=aR+8|0;d3=aV|0;d4=aV+8|0;d5=a$|0;d6=a$+8|0;d7=aM|0;d8=aM+8|0;d9=aL|0;eb=aL+8|0;ec=aK|0;ed=aK+8|0;ee=aN|0;ef=aN+8|0;eg=aH|0;eh=aH+8|0;ei=aJ|0;ej=aJ+8|0;ek=aE|0;el=aE+8|0;em=aC|0;en=aC+8|0;eo=aB|0;ep=aB+8|0;eq=aD|0;er=aD+8|0;es=aA|0;et=aA+8|0;eu=ay|0;ev=ay+8|0;ew=ax|0;ex=ax+8|0;eA=aw|0;eB=aw+8|0;eD=av|0;eE=av+8|0;eF=at|0;eG=at+8|0;eH=au|0;eI=au+8|0;eJ=ap|0;eK=ap+8|0;eL=ao|0;eM=ao+8|0;eN=an|0;eO=an+8|0;eQ=am|0;eR=am+8|0;eS=al|0;eT=al+8|0;eU=aj|0;eV=aj+8|0;eW=ak|0;eX=ak+8|0;eY=ak+16|0;eZ=ak+24|0;e_=ai|0;e$=ah|0;e0=ah+8|0;e2=ag|0;e3=ag+8|0;e4=af|0;e5=af+8|0;e6=ae|0;e8=ae+8|0;e9=ac|0;fa=ac+8|0;fb=ab|0;fc=ab+8|0;fd=$|0;fe=$+8|0;ff=Z|0;fg=Z+8|0;fh=Y|0;fi=Y+8|0;fj=V|0;fk=V+8|0;fl=X|0;fm=X+8|0;fn=W|0;fo=W+8|0;fp=U|0;fq=U+8|0;fr=T|0;fs=T+8|0;ft=S;fu=O|0;fv=O+8|0;fw=R|0;fx=R+8|0;fy=S+144|0;fz=S+72|0;fA=L|0;fB=L+8|0;fC=N|0;fD=N+8|0;fE=K|0;fF=K+8|0;fG=M|0;fH=M+8|0;fI=J|0;fJ=J+8|0;fK=I|0;fL=I+8|0;fM=H|0;fN=H+8|0;fO=F;fP=G;fQ=E|0;fS=E+8|0;fT=D|0;fU=D+8|0;fV=C|0;fW=C+8|0;fX=B|0;fY=B+8|0;fZ=z|0;f_=z+8|0;f$=A|0;f0=A+8|0;f1=y|0;f2=y+8|0;f3=x|0;f4=x+8|0;f5=t|0;f6=t+8|0;f7=u|0;f8=u+8|0;f9=s|0;ga=s+8|0;gb=q|0;gc=q+8|0;gd=p|0;ge=p+8|0;gf=o|0;gg=o+8|0;gh=n|0;gi=n+8|0;gj=l|0;gl=l+8|0;gm=k|0;gn=k+8|0;go=f|0;gp=f+8|0;gq=j|0;gs=j+8|0;gt=e|0;gu=e+8|0;gv=c[13898]|0;L27:while(1){gw=c[1054]|0;gx=c[gw+(gv*40&-1)+36>>2]|0;gy=c[gw+(gv*40&-1)+32>>2]|0;gz=(a[gw+(gv*40&-1)|0]&1)==0;gA=(gx|0)>0;gB=c[10036]|0;gC=21960;gD=96232;L29:while(1){L31:do{if(!gz){if(gA){gE=0;gF=0;gG=gy;while(1){gH=a[gD+gE|0]|0;if(gH<<24>>24==(a[gB+(gE+gG|0)|0]|0)){gI=gG;gJ=gF}else{if(gH<<24>>24!=36){break L31}gI=gG-1|0;gJ=1}gK=gE+1|0;if((gK|0)<(gJ+gx|0)){gE=gK;gF=gJ;gG=gI}else{break}}if((gJ|0)==0){gL=gK}else{gM=gC;break L29}}else{gL=0}gG=a[gD+gL|0]|0;if((gG<<24>>24|0)==36|(gG<<24>>24|0)==0){gM=gC;break L29}}}while(0);gG=gC+8|0;gF=c[gG>>2]|0;if((gF|0)==0){gM=gG;break}else{gC=gG;gD=gF}}gD=c[gM+4>>2]|0;L44:do{if((gD|0)==3){gN=gv+1|0;c[13898]=gN;L46:do{if((gN|0)<(c[8272]|0)){if((a[gw+(gN*40&-1)|0]&1)==0){b7=5107;break L27}gC=c[gw+(gN*40&-1)+36>>2]|0;gx=gw+(gN*40&-1)+32|0;gy=0;while(1){if((gy|0)>=(gC|0)){b7=34;break}gA=c[gx>>2]|0;if((a[gB+(gA+gy|0)|0]|0)==(a[gy+103664|0]|0)){gy=gy+1|0}else{gO=gA;break}}if((b7|0)==34){b7=0;if((gy|0)==1){b7=36;break}gO=c[gx>>2]|0}if((gC|0)>0){gP=0;gQ=0;gR=gO}else{b7=5108;break L27}while(1){if((a[gP+123160|0]|0)==(a[gB+(gP+gR|0)|0]|0)){gS=gR;gT=gQ}else{if((gP|0)!=1){gU=0;gV=0;gW=gO;break}gS=gR-1|0;gT=1}gA=gP+1|0;if((gA|0)<(gT+gC|0)){gP=gA;gQ=gT;gR=gS}else{b7=42;break}}do{if((b7|0)==42){b7=0;if((gT|0)==0){if(!((gP|0)==7|(gP|0)==0)){gU=0;gV=0;gW=gO;break}}c[13898]=gv+2;h[9040]=1.0;gX=1.0;break L46}}while(0);while(1){if((a[gU+123032|0]|0)==(a[gB+(gU+gW|0)|0]|0)){gY=gW;gZ=gV}else{if((gU|0)!=1){b7=5109;break L27}gY=gW-1|0;gZ=1}gx=gU+1|0;if((gx|0)<(gZ+gC|0)){gU=gx;gV=gZ;gW=gY}else{break}}if((gZ|0)==0){if(!((gU|0)==7|(gU|0)==0)){b7=5110;break L27}}c[13898]=gv+2;h[9040]=.017453292519943295;gX=.017453292519943295}else{b7=36}}while(0);if((b7|0)==36){b7=0;h[9040]=1.0;gX=1.0}if((a[30528]&1)==0|(c[17539]|0)==0){break}h[8773]=0.0;h[8774]=6.283185307179586/gX}else if((gD|0)==4){gC=gv+1|0;c[13898]=gC;gx=c[gw+(gC*40&-1)+36>>2]|0;gy=c[gw+(gC*40&-1)+32>>2]|0;gA=(a[gw+(gC*40&-1)|0]&1)==0;gz=(gx|0)>0&(gA^1);L82:do{if(gz){gF=0;gG=0;gE=gy;while(1){if((a[gF+124752|0]|0)==(a[gB+(gF+gE|0)|0]|0)){g_=gE;g$=gG}else{if((gF|0)!=4){b7=62;break L82}g_=gE-1|0;g$=1}gH=gF+1|0;if((gH|0)<(g$+gx|0)){gF=gH;gG=g$;gE=g_}else{break}}if((g$|0)!=0){b7=102;break}if((gF|0)==3|(gF|0)==8){b7=102}else{b7=62}}else{b7=62}}while(0);L91:do{if((b7|0)==62){b7=0;gE=(c[8272]|0)>(gC|0);L93:do{if(gE){if(gA){break}else{g0=0}while(1){if((g0|0)>=(gx|0)){b7=66;break}if((a[gB+(g0+gy|0)|0]|0)==(a[g0+150856|0]|0)){g0=g0+1|0}else{g1=0;break}}if((b7|0)==66){b7=0;if((g0|0)==5){b7=102;break L91}else{g1=0}}while(1){if((g1|0)>=(gx|0)){b7=69;break}if((a[gB+(g1+gy|0)|0]|0)==(a[g1+188576|0]|0)){g1=g1+1|0}else{g2=0;break}}if((b7|0)==69){b7=0;if((g1|0)==4){b7=102;break L91}else{g2=0}}while(1){if((g2|0)>=(gx|0)){b7=72;break}if((a[gB+(g2+gy|0)|0]|0)==(a[g2+130496|0]|0)){g2=g2+1|0}else{g3=0;break}}if((b7|0)==72){b7=0;if((g2|0)==4){b7=102;break L91}else{g3=0}}while(1){if((g3|0)>=(gx|0)){b7=75;break}if((a[gB+(g3+gy|0)|0]|0)==(a[g3+187176|0]|0)){g3=g3+1|0}else{g4=0;break}}if((b7|0)==75){b7=0;if((g3|0)==2){b7=102;break L91}else{g4=0}}while(1){if((g4|0)>=(gx|0)){b7=78;break}if((a[gB+(g4+gy|0)|0]|0)==(a[g4+186688|0]|0)){g4=g4+1|0}else{g5=0;break}}if((b7|0)==78){b7=0;if((g4|0)==3){b7=102;break L91}else{g5=0}}while(1){if((g5|0)>=(gx|0)){b7=81;break}if((a[gB+(g5+gy|0)|0]|0)==(a[g5+128e3|0]|0)){g5=g5+1|0}else{g6=0;break}}if((b7|0)==81){b7=0;if((g5|0)==6){b7=102;break L91}else{g6=0}}while(1){if((g6|0)>=(gx|0)){b7=84;break}if((a[gB+(g6+gy|0)|0]|0)==(a[g6+127904|0]|0)){g6=g6+1|0}else{g7=0;break}}if((b7|0)==84){b7=0;if((g6|0)==5){b7=102;break L91}else{g7=0}}while(1){if((g7|0)>=(gx|0)){b7=87;break}if((a[gB+(g7+gy|0)|0]|0)==(a[g7+124464|0]|0)){g7=g7+1|0}else{g8=0;break}}if((b7|0)==87){b7=0;if((g7|0)==2){b7=102;break L91}else{g8=0}}while(1){if((g8|0)>=(gx|0)){break}if((a[gB+(g8+gy|0)|0]|0)==(a[g8+176728|0]|0)){g8=g8+1|0}else{b7=91;break L93}}if((g8|0)==10){b7=102;break L91}else{b7=91}}else{b7=91}}while(0);L139:do{if((b7|0)==91){b7=0;L141:do{if(gz){gF=0;cd=0;gG=gy;while(1){if((a[gF+124344|0]|0)==(a[gB+(gF+gG|0)|0]|0)){g9=gG;ha=cd}else{if((gF|0)!=4){break L141}g9=gG-1|0;ha=1}gH=gF+1|0;if((gH|0)<(ha+gx|0)){gF=gH;cd=ha;gG=g9}else{break}}if((ha|0)!=0){b7=102;break L91}if((gF|0)==3|(gF|0)==5){b7=102;break L91}}}while(0);if(gA|gE^1){break}else{hb=0}while(1){if((hb|0)>=(gx|0)){break}if((a[gB+(hb+gy|0)|0]|0)==(a[hb+150816|0]|0)){hb=hb+1|0}else{break L139}}if((hb|0)==6){b7=102;break L91}}}while(0);gE=is(b2)|0;gG=c[gE>>2]|0;if((gG|0)==1){hc=+(c[gE+8>>2]|0)}else if((gG|0)==2){hc=+h[gE+8>>3]}else if((gG|0)==3){hc=+uz(c[gE+8>>2]|0,0)}else{b7=109;break L27}if((c[b9>>2]|0)==3){uu(c[b8>>2]|0);c[b9>>2]=1}hd=~~hc;b7=113}}while(0);L164:do{if((b7|0)==102){b7=0;gy=c[10826]|0;if((gy|0)==0){he=1;hf=0;hg=0;b7=119;break}else{hh=1;hi=gy}while(1){if((c[hi+4>>2]|0)!=(hh|0)){hd=hh;b7=113;break L164}gy=hh+1|0;gx=c[hi>>2]|0;if((gx|0)==0){hd=gy;b7=113;break}else{hh=gy;hi=gx}}}}while(0);L169:do{if((b7|0)==113){b7=0;if((hd|0)<1){b7=114;break L27}gx=c[10826]|0;if((gx|0)==0){he=hd;hf=0;hg=0;b7=119;break}else{hj=0;hk=gx}while(1){hl=c[hk+4>>2]|0;if((hd|0)<=(hl|0)){break}gx=c[hk>>2]|0;if((gx|0)==0){he=hd;hf=hk;hg=0;b7=119;break L169}else{hj=hk;hk=gx}}if((hd|0)==(hl|0)){hm=hk}else{he=hd;hf=hj;hg=hk;b7=119}}}while(0);if((b7|0)==119){b7=0;gx=ut(208)|0;if((gx|0)==0){gk();gy=ut(208)|0;if((gy|0)==0){b7=121;break L27}else{hn=gy}}else{hn=gx}gx=hn;if((hf|0)==0){c[10826]=gx}else{c[hf>>2]=gx}c[hn+4>>2]=he;c[hn>>2]=hg;uE(hn+8|0,0,80);c[hn+96>>2]=-1;c[hn+100>>2]=0;gy=hn+104|0;c[gy>>2]=c[12872];c[gy+4>>2]=c[12873];c[gy+8>>2]=c[12874];c[gy+12>>2]=c[12875];c[gy+16>>2]=c[12876];c[gy+20>>2]=c[12877];c[gy+24>>2]=c[12878];c[gy+28>>2]=c[12879];c[gy+32>>2]=c[12880];c[gy+36>>2]=c[12881];c[gy+40>>2]=c[12882];c[gy+44>>2]=c[12883];c[gy+48>>2]=c[12884];c[gy+52>>2]=c[12885];c[hn+160>>2]=1;h[hn+168>>3]=0.0;c[hn+176>>2]=0;h[hn+184>>3]=15.0;h[hn+192>>3]=90.0;c[hn+200>>2]=0;hm=gx}gx=c[13898]|0;gy=c[8272]|0;if((gx|0)>=(gy|0)){break}gA=hm+96|0;gz=hm+88|0;gC=hm+48|0;gE=hm+8|0;gG=0;cd=0;gH=gx;gx=gy;while(1){gy=cd;ho=gH;hp=gx;L189:while(1){hq=ho;hr=hp;L191:while(1){hs=c[1054]|0;L193:do{if((a[hs+(hq*40&-1)|0]&1)!=0){ht=c[hs+(hq*40&-1)+36>>2]|0;hu=hs+(hq*40&-1)+32|0;hv=c[10036]|0;hw=0;while(1){if((hw|0)>=(ht|0)){b7=134;break}if((a[hv+((c[hu>>2]|0)+hw|0)|0]|0)==(a[hw+103664|0]|0)){hw=hw+1|0}else{break}}if((b7|0)==134){b7=0;if((hw|0)==1){break L44}}if((hr|0)>(hq|0)){hx=0}else{break}while(1){if((hx|0)>=(ht|0)){b7=138;break}if((a[hv+((c[hu>>2]|0)+hx|0)|0]|0)==(a[hx+188576|0]|0)){hx=hx+1|0}else{hy=0;break}}if((b7|0)==138){b7=0;if((hx|0)==4){break L189}else{hy=0}}while(1){if((hy|0)>=(ht|0)){b7=150;break}if((a[hv+((c[hu>>2]|0)+hy|0)|0]|0)==(a[hy+187176|0]|0)){hy=hy+1|0}else{hA=0;break}}if((b7|0)==150){b7=0;if((hy|0)==2){break L191}else{hA=0}}while(1){if((hA|0)>=(ht|0)){break}if((a[hv+((c[hu>>2]|0)+hA|0)|0]|0)==(a[hA+186688|0]|0)){hA=hA+1|0}else{break L193}}if((hA|0)==3){break L191}}}while(0);hL(gA,1);gF=c[13898]|0;hw=c[8272]|0;hB=(gF|0)<(hw|0);if((hq|0)==(gF|0)&hB){hC=c[1054]|0;if((a[hC+(hq*40&-1)|0]&1)==0){b7=5115;break L27}hF=c[hC+(hq*40&-1)+36>>2]|0;hG=hC+(hq*40&-1)+32|0;hC=c[10036]|0;hK=0;while(1){if((hK|0)>=(hF|0)){break}if((a[hC+((c[hG>>2]|0)+hK|0)|0]|0)==(a[hK+103664|0]|0)){hK=hK+1|0}else{b7=5116;break L27}}if((hK|0)!=1){b7=5117;break L27}}if(hB){hq=gF;hr=hw}else{break L44}}if(gy){b7=5119;break L27}else{hN=0}while(1){if((hN|0)>=(ht|0)){b7=157;break}if((a[hv+((c[hu>>2]|0)+hN|0)|0]|0)==(a[hN+186688|0]|0)){hN=hN+1|0}else{hP=0;break}}if((b7|0)==157){b7=0;hP=(hN|0)==3&1}a[gz]=hP;hQ=(c[13898]|0)+1|0;c[13898]=hQ;if((hQ|0)>=(c[8272]|0)){b7=5113;break L27}hG=c[1054]|0;L232:do{if((a[hG+(hQ*40&-1)|0]&1)!=0){hC=c[hG+(hQ*40&-1)+36>>2]|0;hF=hG+(hQ*40&-1)+32|0;hR=c[10036]|0;hS=0;while(1){if((hS|0)>=(hC|0)){break}if((a[hR+((c[hF>>2]|0)+hS|0)|0]|0)==(a[hS+103664|0]|0)){hS=hS+1|0}else{break L232}}if((hS|0)==1){b7=5114;break L27}}}while(0);dl(gC,0);hG=c[13898]|0;hF=c[8272]|0;if((hG|0)<(hF|0)){gy=1;ho=hG;hp=hF}else{break L44}}if(gG){b7=5118;break L27}hT=hq+1|0;c[13898]=hT;if((hT|0)>=(hr|0)){b7=5111;break L27}L242:do{if((a[hs+(hT*40&-1)|0]&1)!=0){hp=c[hs+(hT*40&-1)+36>>2]|0;ho=hs+(hT*40&-1)+32|0;hF=0;while(1){if((hF|0)>=(hp|0)){break}if((a[hv+((c[ho>>2]|0)+hF|0)|0]|0)==(a[hF+103664|0]|0)){hF=hF+1|0}else{break L242}}if((hF|0)==1){b7=5112;break L27}}}while(0);dl(gE,0);ho=c[13898]|0;hp=c[8272]|0;if((ho|0)<(hp|0)){gG=1;cd=gy;gH=ho;gx=hp}else{break}}}else if((gD|0)==5){gx=gv+1|0;c[13898]=gx;L250:do{if((gx|0)<(c[8272]|0)){gH=(a[gw+(gx*40&-1)|0]&1)==0;L252:do{if(!gH){cd=c[gw+(gx*40&-1)+36>>2]|0;gG=gw+(gx*40&-1)+32|0;gE=0;while(1){if((gE|0)>=(cd|0)){b7=180;break}if((a[gB+((c[gG>>2]|0)+gE|0)|0]|0)==(a[gE+103664|0]|0)){gE=gE+1|0}else{hU=0;break}}if((b7|0)==180){b7=0;if((gE|0)==1){break L250}else{hU=0}}while(1){if((hU|0)>=(cd|0)){b7=184;break}if((a[gB+((c[gG>>2]|0)+hU|0)|0]|0)==(a[hU+150688|0]|0)){hU=hU+1|0}else{b7=185;break}}if((b7|0)==184){b7=0;if((hU|0)!=2){b7=185}}do{if((b7|0)==185){b7=0;if(gH){break L252}gG=c[gw+(gx*40&-1)+36>>2]|0;cd=gw+(gx*40&-1)+32|0;gE=0;while(1){if((gE|0)>=(gG|0)){b7=189;break}if((a[gB+((c[cd>>2]|0)+gE|0)|0]|0)==(a[gE+148800|0]|0)){gE=gE+1|0}else{break}}if((b7|0)==189){b7=0;if((gE|0)==2){break}}if(gH){break L252}cd=c[gw+(gx*40&-1)+36>>2]|0;gG=gw+(gx*40&-1)+32|0;hS=0;while(1){if((hS|0)>=(cd|0)){b7=195;break}if((a[gB+((c[gG>>2]|0)+hS|0)|0]|0)==(a[hS+125808|0]|0)){hS=hS+1|0}else{break}}do{if((b7|0)==195){b7=0;if((hS|0)!=3){break}c[16163]=c[16163]|12;c[16335]=c[16335]|12;c[16507]=c[16507]|12;c[16679]=c[16679]|12;c[16851]=c[16851]|12;c[17023]=c[17023]|12;c[17195]=c[17195]|12;c[17367]=c[17367]|12;c[17539]=c[17539]|12;c[17711]=c[17711]|12;c[17883]=c[17883]|12;c[13898]=gv+2;break L44}}while(0);hS=c[gw+(gx*40&-1)+36>>2]|0;gG=c[gw+(gx*40&-1)+32>>2]|0;if(gH){break L252}if((hS|0)>0){cd=0;gE=0;hF=gG;while(1){if((a[cd+125680|0]|0)==(a[gB+(cd+hF|0)|0]|0)){hV=hF;hW=gE}else{if((cd|0)!=2){break}hV=hF-1|0;hW=1}gC=cd+1|0;if((gC|0)<(hW+hS|0)){cd=gC;gE=hW;hF=hV}else{b7=203;break}}do{if((b7|0)==203){b7=0;if((hW|0)==0){if(!((cd|0)==1|(cd|0)==7)){break}}c[16163]=c[16163]|3;c[16335]=c[16335]|3;c[16507]=c[16507]|3;c[16679]=c[16679]|3;c[16851]=c[16851]|3;c[17023]=c[17023]|3;c[17195]=c[17195]|3;c[17367]=c[17367]|3;c[17539]=c[17539]|3;c[17711]=c[17711]|3;c[17883]=c[17883]|3;c[13898]=gv+2;break L44}}while(0);if(gH){break L252}else{hY=0}}else{hY=0}while(1){if((hY|0)>=(hS|0)){break}if((a[gB+(gG+hY|0)|0]|0)==(a[hY+57e3|0]|0)){hY=hY+1|0}else{break L252}}if((a[hY+57e3|0]|0)!=0){break L252}c[17367]=3;c[17386]=0;c[17387]=0;c[13898]=gv+2;break L44}}while(0);c[16335]=3;c[16507]=3;c[16355]=0;c[16354]=0;c[16527]=0;c[16526]=0;c[13898]=gv+2;break L44}}while(0);be(b5|0,125560,(v=i,i=i+8|0,c[v>>2]=57e3,v)|0);gH=c[13898]|0;gy=c[1054]|0;gG=c[gy+(gH*40&-1)+36>>2]|0;hS=c[gy+(gH*40&-1)+32>>2]|0;L302:do{if((a[gy+(gH*40&-1)|0]&1)!=0){if((gG|0)>0){cd=c[10036]|0;hF=0;gE=0;gC=hS;while(1){gz=a[b0+hF|0]|0;if(gz<<24>>24==(a[cd+(hF+gC|0)|0]|0)){hZ=gC;h_=gE}else{if(gz<<24>>24!=36){break L302}hZ=gC-1|0;h_=1}h$=hF+1|0;if((h$|0)<(h_+gG|0)){hF=h$;gE=h_;gC=hZ}else{break}}if((h_|0)==0){h0=h$;b7=219}}else{h0=0;b7=219}if((b7|0)==219){b7=0;gC=a[b0+h0|0]|0;if(!((gC<<24>>24|0)==36|(gC<<24>>24|0)==0)){break}}c[17367]=c[17367]|1;c[17386]=0;c[13898]=gH+1;break L44}}while(0);be(b3|0,125432,(v=i,i=i+8|0,c[v>>2]=57e3,v)|0);gH=c[13898]|0;gG=c[1054]|0;hS=c[gG+(gH*40&-1)+36>>2]|0;gy=c[gG+(gH*40&-1)+32>>2]|0;L317:do{if((a[gG+(gH*40&-1)|0]&1)!=0){if((hS|0)>0){gC=c[10036]|0;gE=0;hF=0;cd=gy;while(1){gz=a[b1+gE|0]|0;if(gz<<24>>24==(a[gC+(gE+cd|0)|0]|0)){h1=cd;h2=hF}else{if(gz<<24>>24!=36){break L317}h1=cd-1|0;h2=1}h3=gE+1|0;if((h3|0)<(h2+hS|0)){gE=h3;hF=h2;cd=h1}else{break}}if((h2|0)==0){h4=h3;b7=229}}else{h4=0;b7=229}if((b7|0)==229){b7=0;cd=a[b1+h4|0]|0;if(!((cd<<24>>24|0)==36|(cd<<24>>24|0)==0)){break}}c[17367]=c[17367]|2;c[17387]=0;c[13898]=gH+1;break L44}}while(0);be(b5|0,125376,(v=i,i=i+8|0,c[v>>2]=57e3,v)|0);gH=c[13898]|0;L332:do{if((c[8272]|0)>(gH|0)){hS=c[1054]|0;if((a[hS+(gH*40&-1)|0]&1)==0){break}gy=c[hS+(gH*40&-1)+36>>2]|0;gG=hS+(gH*40&-1)+32|0;hS=c[10036]|0;cd=0;while(1){if((cd|0)>=(gy|0)){break}if((a[hS+((c[gG>>2]|0)+cd|0)|0]|0)==(a[b0+cd|0]|0)){cd=cd+1|0}else{break L332}}if((a[b0+cd|0]|0)!=0){break}c[17367]=c[17367]|12;c[13898]=gH+1;break L44}}while(0);be(b5|0,125128,(v=i,i=i+8|0,c[v>>2]=57e3,v)|0);gH=c[13898]|0;gG=c[1054]|0;hS=c[gG+(gH*40&-1)+36>>2]|0;gy=c[gG+(gH*40&-1)+32>>2]|0;L341:do{if((a[gG+(gH*40&-1)|0]&1)!=0){if((hS|0)>0){hF=c[10036]|0;gE=0;gC=0;gz=gy;while(1){gA=a[b0+gE|0]|0;if(gA<<24>>24==(a[hF+(gE+gz|0)|0]|0)){h5=gz;h6=gC}else{if(gA<<24>>24!=36){break L341}h5=gz-1|0;h6=1}h7=gE+1|0;if((h7|0)<(h6+hS|0)){gE=h7;gC=h6;gz=h5}else{break}}if((h6|0)==0){h8=h7;b7=246}}else{h8=0;b7=246}if((b7|0)==246){b7=0;gz=a[b0+h8|0]|0;if(!((gz<<24>>24|0)==36|(gz<<24>>24|0)==0)){break}}c[17367]=c[17367]|4;c[13898]=gH+1;break L44}}while(0);be(b3|0,124936,(v=i,i=i+8|0,c[v>>2]=57e3,v)|0);gH=c[13898]|0;hS=c[1054]|0;gy=c[hS+(gH*40&-1)+36>>2]|0;gG=c[hS+(gH*40&-1)+32>>2]|0;gz=(a[hS+(gH*40&-1)|0]&1)==0;L356:do{if(!gz){if((gy|0)>0){hS=c[10036]|0;gC=0;gE=0;hF=gG;while(1){cd=a[b1+gC|0]|0;if(cd<<24>>24==(a[hS+(gC+hF|0)|0]|0)){h9=hF;ia=gE}else{if(cd<<24>>24!=36){break L356}h9=hF-1|0;ia=1}ib=gC+1|0;if((ib|0)<(ia+gy|0)){gC=ib;gE=ia;hF=h9}else{break}}if((ia|0)==0){ic=ib;b7=256}}else{ic=0;b7=256}if((b7|0)==256){b7=0;hF=a[b1+ic|0]|0;if(!((hF<<24>>24|0)==36|(hF<<24>>24|0)==0)){break}}c[17367]=c[17367]|8;c[13898]=gH+1;break L44}}while(0);L371:do{if(!((c[8272]|0)<=(gH|0)|gz)){hF=c[10036]|0;gE=0;while(1){if((gE|0)>=(gy|0)){break}if((a[hF+(gG+gE|0)|0]|0)==(a[gE+57024|0]|0)){gE=gE+1|0}else{break L371}}if((a[gE+57024|0]|0)!=0){break}c[17539]=3;c[17558]=0;c[17559]=0;c[13898]=gH+1;break L44}}while(0);be(b5|0,125560,(v=i,i=i+8|0,c[v>>2]=57024,v)|0);gH=c[13898]|0;gG=c[1054]|0;gy=c[gG+(gH*40&-1)+36>>2]|0;gz=c[gG+(gH*40&-1)+32>>2]|0;L379:do{if((a[gG+(gH*40&-1)|0]&1)!=0){if((gy|0)>0){hF=c[10036]|0;gC=0;hS=0;cd=gz;while(1){gA=a[b0+gC|0]|0;if(gA<<24>>24==(a[hF+(gC+cd|0)|0]|0)){id=cd;ie=hS}else{if(gA<<24>>24!=36){break L379}id=cd-1|0;ie=1}ig=gC+1|0;if((ig|0)<(ie+gy|0)){gC=ig;hS=ie;cd=id}else{break}}if((ie|0)==0){ih=ig;b7=272}}else{ih=0;b7=272}if((b7|0)==272){b7=0;cd=a[b0+ih|0]|0;if(!((cd<<24>>24|0)==36|(cd<<24>>24|0)==0)){break}}c[17539]=c[17539]|1;c[17558]=0;c[13898]=gH+1;break L44}}while(0);be(b3|0,125432,(v=i,i=i+8|0,c[v>>2]=57024,v)|0);gH=c[13898]|0;gy=c[1054]|0;gz=c[gy+(gH*40&-1)+36>>2]|0;gG=c[gy+(gH*40&-1)+32>>2]|0;L394:do{if((a[gy+(gH*40&-1)|0]&1)!=0){if((gz|0)>0){cd=c[10036]|0;hS=0;gC=0;hF=gG;while(1){gE=a[b1+hS|0]|0;if(gE<<24>>24==(a[cd+(hS+hF|0)|0]|0)){ii=hF;ij=gC}else{if(gE<<24>>24!=36){break L394}ii=hF-1|0;ij=1}ik=hS+1|0;if((ik|0)<(ij+gz|0)){hS=ik;gC=ij;hF=ii}else{break}}if((ij|0)==0){il=ik;b7=282}}else{il=0;b7=282}if((b7|0)==282){b7=0;hF=a[b1+il|0]|0;if(!((hF<<24>>24|0)==36|(hF<<24>>24|0)==0)){break}}c[17539]=c[17539]|2;c[17559]=0;c[13898]=gH+1;break L44}}while(0);be(b5|0,125376,(v=i,i=i+8|0,c[v>>2]=57024,v)|0);gH=c[13898]|0;L409:do{if((c[8272]|0)>(gH|0)){gz=c[1054]|0;if((a[gz+(gH*40&-1)|0]&1)==0){break}gG=c[gz+(gH*40&-1)+36>>2]|0;gy=gz+(gH*40&-1)+32|0;gz=c[10036]|0;hF=0;while(1){if((hF|0)>=(gG|0)){break}if((a[gz+((c[gy>>2]|0)+hF|0)|0]|0)==(a[b0+hF|0]|0)){hF=hF+1|0}else{break L409}}if((a[b0+hF|0]|0)!=0){break}c[17539]=c[17539]|12;c[13898]=gH+1;break L44}}while(0);be(b5|0,125128,(v=i,i=i+8|0,c[v>>2]=57024,v)|0);gH=c[13898]|0;gy=c[1054]|0;gz=c[gy+(gH*40&-1)+36>>2]|0;gG=c[gy+(gH*40&-1)+32>>2]|0;L418:do{if((a[gy+(gH*40&-1)|0]&1)!=0){if((gz|0)>0){gC=c[10036]|0;hS=0;cd=0;gE=gG;while(1){gA=a[b0+hS|0]|0;if(gA<<24>>24==(a[gC+(hS+gE|0)|0]|0)){im=gE;io=cd}else{if(gA<<24>>24!=36){break L418}im=gE-1|0;io=1}ip=hS+1|0;if((ip|0)<(io+gz|0)){hS=ip;cd=io;gE=im}else{break}}if((io|0)==0){iq=ip;b7=299}}else{iq=0;b7=299}if((b7|0)==299){b7=0;gE=a[b0+iq|0]|0;if(!((gE<<24>>24|0)==36|(gE<<24>>24|0)==0)){break}}c[17539]=c[17539]|4;c[13898]=gH+1;break L44}}while(0);be(b3|0,124936,(v=i,i=i+8|0,c[v>>2]=57024,v)|0);gH=c[13898]|0;gz=c[1054]|0;gG=c[gz+(gH*40&-1)+36>>2]|0;gy=c[gz+(gH*40&-1)+32>>2]|0;L433:do{if((a[gz+(gH*40&-1)|0]&1)!=0){L435:do{if((gG|0)>0){gE=c[10036]|0;cd=0;hS=0;gC=gy;while(1){hF=a[b1+cd|0]|0;if(hF<<24>>24==(a[gE+(cd+gC|0)|0]|0)){ir=gC;iu=hS}else{if(hF<<24>>24!=36){break L435}ir=gC-1|0;iu=1}iv=cd+1|0;if((iv|0)<(iu+gG|0)){cd=iv;hS=iu;gC=ir}else{break}}if((iu|0)==0){iy=iv;b7=309}else{b7=310}}else{iy=0;b7=309}}while(0);if((b7|0)==309){b7=0;gC=a[b1+iy|0]|0;if((gC<<24>>24|0)==36|(gC<<24>>24|0)==0){b7=310}}if((b7|0)==310){b7=0;c[17539]=c[17539]|8;c[13898]=gH+1;break L44}if((c[8272]|0)<=(gH|0)){break}gC=c[10036]|0;hS=0;while(1){if((hS|0)>=(gG|0)){break}if((a[gC+(hS+gy|0)|0]|0)==(a[hS+57048|0]|0)){hS=hS+1|0}else{break L433}}if((a[hS+57048|0]|0)!=0){break}c[17711]=3;c[17730]=0;c[17731]=0;c[13898]=gH+1;break L44}}while(0);be(b5|0,125560,(v=i,i=i+8|0,c[v>>2]=57048,v)|0);gH=c[13898]|0;gy=c[1054]|0;gG=c[gy+(gH*40&-1)+36>>2]|0;gz=c[gy+(gH*40&-1)+32>>2]|0;L456:do{if((a[gy+(gH*40&-1)|0]&1)!=0){if((gG|0)>0){gC=c[10036]|0;cd=0;gE=0;hF=gz;while(1){gA=a[b0+cd|0]|0;if(gA<<24>>24==(a[gC+(cd+hF|0)|0]|0)){iz=hF;iA=gE}else{if(gA<<24>>24!=36){break L456}iz=hF-1|0;iA=1}iB=cd+1|0;if((iB|0)<(iA+gG|0)){cd=iB;gE=iA;hF=iz}else{break}}if((iA|0)==0){iC=iB;b7=325}}else{iC=0;b7=325}if((b7|0)==325){b7=0;hF=a[b0+iC|0]|0;if(!((hF<<24>>24|0)==36|(hF<<24>>24|0)==0)){break}}c[17711]=c[17711]|1;c[17730]=0;c[13898]=gH+1;break L44}}while(0);be(b3|0,125432,(v=i,i=i+8|0,c[v>>2]=57048,v)|0);gH=c[13898]|0;gG=c[1054]|0;gz=c[gG+(gH*40&-1)+36>>2]|0;gy=c[gG+(gH*40&-1)+32>>2]|0;L471:do{if((a[gG+(gH*40&-1)|0]&1)!=0){if((gz|0)>0){hF=c[10036]|0;gE=0;cd=0;gC=gy;while(1){hS=a[b1+gE|0]|0;if(hS<<24>>24==(a[hF+(gE+gC|0)|0]|0)){iD=gC;iE=cd}else{if(hS<<24>>24!=36){break L471}iD=gC-1|0;iE=1}iF=gE+1|0;if((iF|0)<(iE+gz|0)){gE=iF;cd=iE;gC=iD}else{break}}if((iE|0)==0){iG=iF;b7=335}}else{iG=0;b7=335}if((b7|0)==335){b7=0;gC=a[b1+iG|0]|0;if(!((gC<<24>>24|0)==36|(gC<<24>>24|0)==0)){break}}c[17711]=c[17711]|2;c[17731]=0;c[13898]=gH+1;break L44}}while(0);be(b5|0,125376,(v=i,i=i+8|0,c[v>>2]=57048,v)|0);gH=c[13898]|0;L486:do{if((c[8272]|0)>(gH|0)){gz=c[1054]|0;if((a[gz+(gH*40&-1)|0]&1)==0){break}gy=c[gz+(gH*40&-1)+36>>2]|0;gG=gz+(gH*40&-1)+32|0;gz=c[10036]|0;gC=0;while(1){if((gC|0)>=(gy|0)){break}if((a[gz+((c[gG>>2]|0)+gC|0)|0]|0)==(a[b0+gC|0]|0)){gC=gC+1|0}else{break L486}}if((a[b0+gC|0]|0)!=0){break}c[17711]=c[17711]|12;c[13898]=gH+1;break L44}}while(0);be(b5|0,125128,(v=i,i=i+8|0,c[v>>2]=57048,v)|0);gH=c[13898]|0;gG=c[1054]|0;gz=c[gG+(gH*40&-1)+36>>2]|0;gy=c[gG+(gH*40&-1)+32>>2]|0;L495:do{if((a[gG+(gH*40&-1)|0]&1)!=0){if((gz|0)>0){cd=c[10036]|0;gE=0;hF=0;hS=gy;while(1){gA=a[b0+gE|0]|0;if(gA<<24>>24==(a[cd+(gE+hS|0)|0]|0)){iH=hS;iI=hF}else{if(gA<<24>>24!=36){break L495}iH=hS-1|0;iI=1}iJ=gE+1|0;if((iJ|0)<(iI+gz|0)){gE=iJ;hF=iI;hS=iH}else{break}}if((iI|0)==0){iK=iJ;b7=352}}else{iK=0;b7=352}if((b7|0)==352){b7=0;hS=a[b0+iK|0]|0;if(!((hS<<24>>24|0)==36|(hS<<24>>24|0)==0)){break}}c[17711]=c[17711]|4;c[13898]=gH+1;break L44}}while(0);be(b3|0,124936,(v=i,i=i+8|0,c[v>>2]=57048,v)|0);gH=c[13898]|0;gz=c[1054]|0;gy=c[gz+(gH*40&-1)+36>>2]|0;gG=c[gz+(gH*40&-1)+32>>2]|0;L510:do{if((a[gz+(gH*40&-1)|0]&1)!=0){L512:do{if((gy|0)>0){hS=c[10036]|0;hF=0;gE=0;cd=gG;while(1){gC=a[b1+hF|0]|0;if(gC<<24>>24==(a[hS+(hF+cd|0)|0]|0)){iL=cd;iM=gE}else{if(gC<<24>>24!=36){break L512}iL=cd-1|0;iM=1}iN=hF+1|0;if((iN|0)<(iM+gy|0)){hF=iN;gE=iM;cd=iL}else{break}}if((iM|0)==0){iP=iN;b7=362}else{b7=363}}else{iP=0;b7=362}}while(0);if((b7|0)==362){b7=0;cd=a[b1+iP|0]|0;if((cd<<24>>24|0)==36|(cd<<24>>24|0)==0){b7=363}}if((b7|0)==363){b7=0;c[17711]=c[17711]|8;c[13898]=gH+1;break L44}if((c[8272]|0)<=(gH|0)){break}cd=c[10036]|0;gE=0;while(1){if((gE|0)>=(gy|0)){break}if((a[cd+(gE+gG|0)|0]|0)==(a[gE+57072|0]|0)){gE=gE+1|0}else{break L510}}if((a[gE+57072|0]|0)!=0){break}c[17883]=3;c[17902]=0;c[17903]=0;c[13898]=gH+1;break L44}}while(0);be(b5|0,125560,(v=i,i=i+8|0,c[v>>2]=57072,v)|0);gH=c[13898]|0;gG=c[1054]|0;gy=c[gG+(gH*40&-1)+36>>2]|0;gz=c[gG+(gH*40&-1)+32>>2]|0;L533:do{if((a[gG+(gH*40&-1)|0]&1)!=0){if((gy|0)>0){cd=c[10036]|0;hF=0;hS=0;gC=gz;while(1){gA=a[b0+hF|0]|0;if(gA<<24>>24==(a[cd+(hF+gC|0)|0]|0)){iR=gC;iS=hS}else{if(gA<<24>>24!=36){break L533}iR=gC-1|0;iS=1}iT=hF+1|0;if((iT|0)<(iS+gy|0)){hF=iT;hS=iS;gC=iR}else{break}}if((iS|0)==0){iU=iT;b7=378}}else{iU=0;b7=378}if((b7|0)==378){b7=0;gC=a[b0+iU|0]|0;if(!((gC<<24>>24|0)==36|(gC<<24>>24|0)==0)){break}}c[17883]=c[17883]|1;c[17902]=0;c[13898]=gH+1;break L44}}while(0);be(b3|0,125432,(v=i,i=i+8|0,c[v>>2]=57072,v)|0);gH=c[13898]|0;gy=c[1054]|0;gz=c[gy+(gH*40&-1)+36>>2]|0;gG=c[gy+(gH*40&-1)+32>>2]|0;L548:do{if((a[gy+(gH*40&-1)|0]&1)!=0){if((gz|0)>0){gC=c[10036]|0;hS=0;hF=0;cd=gG;while(1){gE=a[b1+hS|0]|0;if(gE<<24>>24==(a[gC+(hS+cd|0)|0]|0)){iV=cd;iW=hF}else{if(gE<<24>>24!=36){break L548}iV=cd-1|0;iW=1}iX=hS+1|0;if((iX|0)<(iW+gz|0)){hS=iX;hF=iW;cd=iV}else{break}}if((iW|0)==0){iZ=iX;b7=388}}else{iZ=0;b7=388}if((b7|0)==388){b7=0;cd=a[b1+iZ|0]|0;if(!((cd<<24>>24|0)==36|(cd<<24>>24|0)==0)){break}}c[17883]=c[17883]|2;c[17903]=0;c[13898]=gH+1;break L44}}while(0);be(b5|0,125376,(v=i,i=i+8|0,c[v>>2]=57072,v)|0);gH=c[13898]|0;L563:do{if((c[8272]|0)>(gH|0)){gz=c[1054]|0;if((a[gz+(gH*40&-1)|0]&1)==0){break}gG=c[gz+(gH*40&-1)+36>>2]|0;gy=gz+(gH*40&-1)+32|0;gz=c[10036]|0;cd=0;while(1){if((cd|0)>=(gG|0)){break}if((a[gz+((c[gy>>2]|0)+cd|0)|0]|0)==(a[b0+cd|0]|0)){cd=cd+1|0}else{break L563}}if((a[b0+cd|0]|0)!=0){break}c[17883]=c[17883]|12;c[13898]=gH+1;break L44}}while(0);be(b5|0,125128,(v=i,i=i+8|0,c[v>>2]=57072,v)|0);gH=c[13898]|0;gy=c[1054]|0;gz=c[gy+(gH*40&-1)+36>>2]|0;gG=c[gy+(gH*40&-1)+32>>2]|0;L572:do{if((a[gy+(gH*40&-1)|0]&1)!=0){if((gz|0)>0){hF=c[10036]|0;hS=0;gC=0;gE=gG;while(1){gA=a[b0+hS|0]|0;if(gA<<24>>24==(a[hF+(hS+gE|0)|0]|0)){i_=gE;i$=gC}else{if(gA<<24>>24!=36){break L572}i_=gE-1|0;i$=1}i0=hS+1|0;if((i0|0)<(i$+gz|0)){hS=i0;gC=i$;gE=i_}else{break}}if((i$|0)==0){i1=i0;b7=405}}else{i1=0;b7=405}if((b7|0)==405){b7=0;gE=a[b0+i1|0]|0;if(!((gE<<24>>24|0)==36|(gE<<24>>24|0)==0)){break}}c[17883]=c[17883]|4;c[13898]=gH+1;break L44}}while(0);be(b3|0,124936,(v=i,i=i+8|0,c[v>>2]=57072,v)|0);gH=c[13898]|0;gz=c[1054]|0;gG=c[gz+(gH*40&-1)+36>>2]|0;gy=c[gz+(gH*40&-1)+32>>2]|0;L587:do{if((a[gz+(gH*40&-1)|0]&1)!=0){L589:do{if((gG|0)>0){gE=c[10036]|0;gC=0;hS=0;hF=gy;while(1){cd=a[b1+gC|0]|0;if(cd<<24>>24==(a[gE+(gC+hF|0)|0]|0)){i2=hF;i3=hS}else{if(cd<<24>>24!=36){break L589}i2=hF-1|0;i3=1}i4=gC+1|0;if((i4|0)<(i3+gG|0)){gC=i4;hS=i3;hF=i2}else{break}}if((i3|0)==0){i5=i4;b7=415}else{b7=416}}else{i5=0;b7=415}}while(0);if((b7|0)==415){b7=0;hF=a[b1+i5|0]|0;if((hF<<24>>24|0)==36|(hF<<24>>24|0)==0){b7=416}}if((b7|0)==416){b7=0;c[17883]=c[17883]|8;c[13898]=gH+1;break L44}if((c[8272]|0)<=(gH|0)){break}hF=c[10036]|0;hS=0;while(1){if((hS|0)>=(gG|0)){break}if((a[hF+(hS+gy|0)|0]|0)==(a[hS+56880|0]|0)){hS=hS+1|0}else{break L587}}if((a[hS+56880|0]|0)!=0){break}c[16507]=3;c[16526]=0;c[16527]=0;c[13898]=gH+1;break L44}}while(0);be(b5|0,125560,(v=i,i=i+8|0,c[v>>2]=56880,v)|0);gH=c[13898]|0;gy=c[1054]|0;gG=c[gy+(gH*40&-1)+36>>2]|0;gz=c[gy+(gH*40&-1)+32>>2]|0;L610:do{if((a[gy+(gH*40&-1)|0]&1)!=0){if((gG|0)>0){hF=c[10036]|0;gC=0;gE=0;cd=gz;while(1){gA=a[b0+gC|0]|0;if(gA<<24>>24==(a[hF+(gC+cd|0)|0]|0)){i6=cd;i7=gE}else{if(gA<<24>>24!=36){break L610}i6=cd-1|0;i7=1}i8=gC+1|0;if((i8|0)<(i7+gG|0)){gC=i8;gE=i7;cd=i6}else{break}}if((i7|0)==0){ja=i8;b7=431}}else{ja=0;b7=431}if((b7|0)==431){b7=0;cd=a[b0+ja|0]|0;if(!((cd<<24>>24|0)==36|(cd<<24>>24|0)==0)){break}}c[16507]=c[16507]|1;c[16526]=0;c[13898]=gH+1;break L44}}while(0);be(b3|0,125432,(v=i,i=i+8|0,c[v>>2]=56880,v)|0);gH=c[13898]|0;gG=c[1054]|0;gz=c[gG+(gH*40&-1)+36>>2]|0;gy=c[gG+(gH*40&-1)+32>>2]|0;L625:do{if((a[gG+(gH*40&-1)|0]&1)!=0){if((gz|0)>0){cd=c[10036]|0;gE=0;gC=0;hF=gy;while(1){hS=a[b1+gE|0]|0;if(hS<<24>>24==(a[cd+(gE+hF|0)|0]|0)){jb=hF;jc=gC}else{if(hS<<24>>24!=36){break L625}jb=hF-1|0;jc=1}jd=gE+1|0;if((jd|0)<(jc+gz|0)){gE=jd;gC=jc;hF=jb}else{break}}if((jc|0)==0){je=jd;b7=441}}else{je=0;b7=441}if((b7|0)==441){b7=0;hF=a[b1+je|0]|0;if(!((hF<<24>>24|0)==36|(hF<<24>>24|0)==0)){break}}c[16507]=c[16507]|2;c[16527]=0;c[13898]=gH+1;break L44}}while(0);be(b5|0,125376,(v=i,i=i+8|0,c[v>>2]=56880,v)|0);gH=c[13898]|0;L640:do{if((c[8272]|0)>(gH|0)){gz=c[1054]|0;if((a[gz+(gH*40&-1)|0]&1)==0){break}gy=c[gz+(gH*40&-1)+36>>2]|0;gG=gz+(gH*40&-1)+32|0;gz=c[10036]|0;hF=0;while(1){if((hF|0)>=(gy|0)){break}if((a[gz+((c[gG>>2]|0)+hF|0)|0]|0)==(a[b0+hF|0]|0)){hF=hF+1|0}else{break L640}}if((a[b0+hF|0]|0)!=0){break}c[16507]=c[16507]|12;c[13898]=gH+1;break L44}}while(0);be(b5|0,125128,(v=i,i=i+8|0,c[v>>2]=56880,v)|0);gH=c[13898]|0;gG=c[1054]|0;gz=c[gG+(gH*40&-1)+36>>2]|0;gy=c[gG+(gH*40&-1)+32>>2]|0;L649:do{if((a[gG+(gH*40&-1)|0]&1)!=0){if((gz|0)>0){gC=c[10036]|0;gE=0;cd=0;hS=gy;while(1){gA=a[b0+gE|0]|0;if(gA<<24>>24==(a[gC+(gE+hS|0)|0]|0)){jf=hS;jg=cd}else{if(gA<<24>>24!=36){break L649}jf=hS-1|0;jg=1}jh=gE+1|0;if((jh|0)<(jg+gz|0)){gE=jh;cd=jg;hS=jf}else{break}}if((jg|0)==0){ji=jh;b7=458}}else{ji=0;b7=458}if((b7|0)==458){b7=0;hS=a[b0+ji|0]|0;if(!((hS<<24>>24|0)==36|(hS<<24>>24|0)==0)){break}}c[16507]=c[16507]|4;c[13898]=gH+1;break L44}}while(0);be(b3|0,124936,(v=i,i=i+8|0,c[v>>2]=56880,v)|0);gH=c[13898]|0;gz=c[1054]|0;gy=c[gz+(gH*40&-1)+36>>2]|0;gG=c[gz+(gH*40&-1)+32>>2]|0;L664:do{if((a[gz+(gH*40&-1)|0]&1)!=0){L666:do{if((gy|0)>0){hS=c[10036]|0;cd=0;gE=0;gC=gG;while(1){hF=a[b1+cd|0]|0;if(hF<<24>>24==(a[hS+(cd+gC|0)|0]|0)){jj=gC;jk=gE}else{if(hF<<24>>24!=36){break L666}jj=gC-1|0;jk=1}jl=cd+1|0;if((jl|0)<(jk+gy|0)){cd=jl;gE=jk;gC=jj}else{break}}if((jk|0)==0){jm=jl;b7=468}else{b7=469}}else{jm=0;b7=468}}while(0);if((b7|0)==468){b7=0;gC=a[b1+jm|0]|0;if((gC<<24>>24|0)==36|(gC<<24>>24|0)==0){b7=469}}if((b7|0)==469){b7=0;c[16507]=c[16507]|8;c[13898]=gH+1;break L44}if((c[8272]|0)<=(gH|0)){break}gC=c[10036]|0;gE=0;while(1){if((gE|0)>=(gy|0)){break}if((a[gC+(gE+gG|0)|0]|0)==(a[gE+56856|0]|0)){gE=gE+1|0}else{break L664}}if((a[gE+56856|0]|0)!=0){break}c[16335]=3;c[16354]=0;c[16355]=0;c[13898]=gH+1;break L44}}while(0);be(b5|0,125560,(v=i,i=i+8|0,c[v>>2]=56856,v)|0);gH=c[13898]|0;gG=c[1054]|0;gy=c[gG+(gH*40&-1)+36>>2]|0;gz=c[gG+(gH*40&-1)+32>>2]|0;L687:do{if((a[gG+(gH*40&-1)|0]&1)!=0){if((gy|0)>0){gC=c[10036]|0;cd=0;hS=0;hF=gz;while(1){gA=a[b0+cd|0]|0;if(gA<<24>>24==(a[gC+(cd+hF|0)|0]|0)){jn=hF;jo=hS}else{if(gA<<24>>24!=36){break L687}jn=hF-1|0;jo=1}jy=cd+1|0;if((jy|0)<(jo+gy|0)){cd=jy;hS=jo;hF=jn}else{break}}if((jo|0)==0){jz=jy;b7=484}}else{jz=0;b7=484}if((b7|0)==484){b7=0;hF=a[b0+jz|0]|0;if(!((hF<<24>>24|0)==36|(hF<<24>>24|0)==0)){break}}c[16335]=c[16335]|1;c[16354]=0;c[13898]=gH+1;break L44}}while(0);be(b3|0,125432,(v=i,i=i+8|0,c[v>>2]=56856,v)|0);gH=c[13898]|0;gy=c[1054]|0;gz=c[gy+(gH*40&-1)+36>>2]|0;gG=c[gy+(gH*40&-1)+32>>2]|0;L702:do{if((a[gy+(gH*40&-1)|0]&1)!=0){if((gz|0)>0){hF=c[10036]|0;hS=0;cd=0;gC=gG;while(1){gE=a[b1+hS|0]|0;if(gE<<24>>24==(a[hF+(hS+gC|0)|0]|0)){jA=gC;jB=cd}else{if(gE<<24>>24!=36){break L702}jA=gC-1|0;jB=1}jC=hS+1|0;if((jC|0)<(jB+gz|0)){hS=jC;cd=jB;gC=jA}else{break}}if((jB|0)==0){jD=jC;b7=494}}else{jD=0;b7=494}if((b7|0)==494){b7=0;gC=a[b1+jD|0]|0;if(!((gC<<24>>24|0)==36|(gC<<24>>24|0)==0)){break}}c[16335]=c[16335]|2;c[16355]=0;c[13898]=gH+1;break L44}}while(0);be(b5|0,125376,(v=i,i=i+8|0,c[v>>2]=56856,v)|0);gH=c[13898]|0;L717:do{if((c[8272]|0)>(gH|0)){gz=c[1054]|0;if((a[gz+(gH*40&-1)|0]&1)==0){break}gG=c[gz+(gH*40&-1)+36>>2]|0;gy=gz+(gH*40&-1)+32|0;gz=c[10036]|0;gC=0;while(1){if((gC|0)>=(gG|0)){break}if((a[gz+((c[gy>>2]|0)+gC|0)|0]|0)==(a[b0+gC|0]|0)){gC=gC+1|0}else{break L717}}if((a[b0+gC|0]|0)!=0){break}c[16335]=c[16335]|12;c[13898]=gH+1;break L44}}while(0);be(b5|0,125128,(v=i,i=i+8|0,c[v>>2]=56856,v)|0);gH=c[13898]|0;gy=c[1054]|0;gz=c[gy+(gH*40&-1)+36>>2]|0;gG=c[gy+(gH*40&-1)+32>>2]|0;L726:do{if((a[gy+(gH*40&-1)|0]&1)!=0){if((gz|0)>0){cd=c[10036]|0;hS=0;hF=0;gE=gG;while(1){gA=a[b0+hS|0]|0;if(gA<<24>>24==(a[cd+(hS+gE|0)|0]|0)){jE=gE;jF=hF}else{if(gA<<24>>24!=36){break L726}jE=gE-1|0;jF=1}jG=hS+1|0;if((jG|0)<(jF+gz|0)){hS=jG;hF=jF;gE=jE}else{break}}if((jF|0)==0){jH=jG;b7=511}}else{jH=0;b7=511}if((b7|0)==511){b7=0;gE=a[b0+jH|0]|0;if(!((gE<<24>>24|0)==36|(gE<<24>>24|0)==0)){break}}c[16335]=c[16335]|4;c[13898]=gH+1;break L44}}while(0);be(b3|0,124936,(v=i,i=i+8|0,c[v>>2]=56856,v)|0);gH=c[13898]|0;gz=c[1054]|0;gG=c[gz+(gH*40&-1)+36>>2]|0;gy=c[gz+(gH*40&-1)+32>>2]|0;L741:do{if((a[gz+(gH*40&-1)|0]&1)!=0){L743:do{if((gG|0)>0){gE=c[10036]|0;hF=0;hS=0;cd=gy;while(1){gC=a[b1+hF|0]|0;if(gC<<24>>24==(a[gE+(hF+cd|0)|0]|0)){jI=cd;jJ=hS}else{if(gC<<24>>24!=36){break L743}jI=cd-1|0;jJ=1}jK=hF+1|0;if((jK|0)<(jJ+gG|0)){hF=jK;hS=jJ;cd=jI}else{break}}if((jJ|0)==0){jL=jK;b7=521}else{b7=522}}else{jL=0;b7=521}}while(0);if((b7|0)==521){b7=0;cd=a[b1+jL|0]|0;if((cd<<24>>24|0)==36|(cd<<24>>24|0)==0){b7=522}}if((b7|0)==522){b7=0;c[16335]=c[16335]|8;c[13898]=gH+1;break L44}if((c[8272]|0)<=(gH|0)){break}cd=c[10036]|0;hS=0;while(1){if((hS|0)>=(gG|0)){break}if((a[cd+(hS+gy|0)|0]|0)==(a[hS+56832|0]|0)){hS=hS+1|0}else{break L741}}if((a[hS+56832|0]|0)!=0){break}c[16163]=3;c[16182]=0;c[16183]=0;c[13898]=gH+1;break L44}}while(0);be(b5|0,125560,(v=i,i=i+8|0,c[v>>2]=56832,v)|0);gH=c[13898]|0;gy=c[1054]|0;gG=c[gy+(gH*40&-1)+36>>2]|0;gz=c[gy+(gH*40&-1)+32>>2]|0;L764:do{if((a[gy+(gH*40&-1)|0]&1)!=0){if((gG|0)>0){cd=c[10036]|0;hF=0;gE=0;gC=gz;while(1){gA=a[b0+hF|0]|0;if(gA<<24>>24==(a[cd+(hF+gC|0)|0]|0)){jM=gC;jN=gE}else{if(gA<<24>>24!=36){break L764}jM=gC-1|0;jN=1}jO=hF+1|0;if((jO|0)<(jN+gG|0)){hF=jO;gE=jN;gC=jM}else{break}}if((jN|0)==0){jP=jO;b7=537}}else{jP=0;b7=537}if((b7|0)==537){b7=0;gC=a[b0+jP|0]|0;if(!((gC<<24>>24|0)==36|(gC<<24>>24|0)==0)){break}}c[16163]=c[16163]|1;c[16182]=0;c[13898]=gH+1;break L44}}while(0);be(b3|0,125432,(v=i,i=i+8|0,c[v>>2]=56832,v)|0);gH=c[13898]|0;gG=c[1054]|0;gz=c[gG+(gH*40&-1)+36>>2]|0;gy=c[gG+(gH*40&-1)+32>>2]|0;L779:do{if((a[gG+(gH*40&-1)|0]&1)!=0){if((gz|0)>0){gC=c[10036]|0;gE=0;hF=0;cd=gy;while(1){hS=a[b1+gE|0]|0;if(hS<<24>>24==(a[gC+(gE+cd|0)|0]|0)){jQ=cd;jR=hF}else{if(hS<<24>>24!=36){break L779}jQ=cd-1|0;jR=1}jS=gE+1|0;if((jS|0)<(jR+gz|0)){gE=jS;hF=jR;cd=jQ}else{break}}if((jR|0)==0){jT=jS;b7=547}}else{jT=0;b7=547}if((b7|0)==547){b7=0;cd=a[b1+jT|0]|0;if(!((cd<<24>>24|0)==36|(cd<<24>>24|0)==0)){break}}c[16163]=c[16163]|2;c[16183]=0;c[13898]=gH+1;break L44}}while(0);be(b5|0,125376,(v=i,i=i+8|0,c[v>>2]=56832,v)|0);gH=c[13898]|0;L794:do{if((c[8272]|0)>(gH|0)){gz=c[1054]|0;if((a[gz+(gH*40&-1)|0]&1)==0){break}gy=c[gz+(gH*40&-1)+36>>2]|0;gG=gz+(gH*40&-1)+32|0;gz=c[10036]|0;cd=0;while(1){if((cd|0)>=(gy|0)){break}if((a[gz+((c[gG>>2]|0)+cd|0)|0]|0)==(a[b0+cd|0]|0)){cd=cd+1|0}else{break L794}}if((a[b0+cd|0]|0)!=0){break}c[16163]=c[16163]|12;c[13898]=gH+1;break L44}}while(0);be(b5|0,125128,(v=i,i=i+8|0,c[v>>2]=56832,v)|0);gH=c[13898]|0;gG=c[1054]|0;gz=c[gG+(gH*40&-1)+36>>2]|0;gy=c[gG+(gH*40&-1)+32>>2]|0;L803:do{if((a[gG+(gH*40&-1)|0]&1)!=0){if((gz|0)>0){hF=c[10036]|0;gE=0;gC=0;hS=gy;while(1){gA=a[b0+gE|0]|0;if(gA<<24>>24==(a[hF+(gE+hS|0)|0]|0)){jU=hS;jV=gC}else{if(gA<<24>>24!=36){break L803}jU=hS-1|0;jV=1}jW=gE+1|0;if((jW|0)<(jV+gz|0)){gE=jW;gC=jV;hS=jU}else{break}}if((jV|0)==0){jX=jW;b7=564}}else{jX=0;b7=564}if((b7|0)==564){b7=0;hS=a[b0+jX|0]|0;if(!((hS<<24>>24|0)==36|(hS<<24>>24|0)==0)){break}}c[16163]=c[16163]|4;c[13898]=gH+1;break L44}}while(0);be(b3|0,124936,(v=i,i=i+8|0,c[v>>2]=56832,v)|0);gH=c[13898]|0;gz=c[1054]|0;gy=c[gz+(gH*40&-1)+36>>2]|0;gG=c[gz+(gH*40&-1)+32>>2]|0;L818:do{if((a[gz+(gH*40&-1)|0]&1)!=0){L820:do{if((gy|0)>0){hS=c[10036]|0;gC=0;gE=0;hF=gG;while(1){cd=a[b1+gC|0]|0;if(cd<<24>>24==(a[hS+(gC+hF|0)|0]|0)){jY=hF;jZ=gE}else{if(cd<<24>>24!=36){break L820}jY=hF-1|0;jZ=1}j_=gC+1|0;if((j_|0)<(jZ+gy|0)){gC=j_;gE=jZ;hF=jY}else{break}}if((jZ|0)==0){j$=j_;b7=574}else{b7=575}}else{j$=0;b7=574}}while(0);if((b7|0)==574){b7=0;hF=a[b1+j$|0]|0;if((hF<<24>>24|0)==36|(hF<<24>>24|0)==0){b7=575}}if((b7|0)==575){b7=0;c[16163]=c[16163]|8;c[13898]=gH+1;break L44}if((c[8272]|0)<=(gH|0)){break}hF=c[10036]|0;gE=0;while(1){if((gE|0)>=(gy|0)){break}if((a[hF+(gE+gG|0)|0]|0)==(a[gE+56976|0]|0)){gE=gE+1|0}else{break L818}}if((a[gE+56976|0]|0)!=0){break}c[17195]=3;c[17214]=0;c[17215]=0;c[13898]=gH+1;break L44}}while(0);be(b5|0,125560,(v=i,i=i+8|0,c[v>>2]=56976,v)|0);gH=c[13898]|0;gG=c[1054]|0;gy=c[gG+(gH*40&-1)+36>>2]|0;gz=c[gG+(gH*40&-1)+32>>2]|0;L841:do{if((a[gG+(gH*40&-1)|0]&1)!=0){if((gy|0)>0){hF=c[10036]|0;gC=0;hS=0;cd=gz;while(1){gA=a[b0+gC|0]|0;if(gA<<24>>24==(a[hF+(gC+cd|0)|0]|0)){j0=cd;j1=hS}else{if(gA<<24>>24!=36){break L841}j0=cd-1|0;j1=1}j2=gC+1|0;if((j2|0)<(j1+gy|0)){gC=j2;hS=j1;cd=j0}else{break}}if((j1|0)==0){j3=j2;b7=590}}else{j3=0;b7=590}if((b7|0)==590){b7=0;cd=a[b0+j3|0]|0;if(!((cd<<24>>24|0)==36|(cd<<24>>24|0)==0)){break}}c[17195]=c[17195]|1;c[17214]=0;c[13898]=gH+1;break L44}}while(0);be(b3|0,125432,(v=i,i=i+8|0,c[v>>2]=56976,v)|0);gH=c[13898]|0;gy=c[1054]|0;gz=c[gy+(gH*40&-1)+36>>2]|0;gG=c[gy+(gH*40&-1)+32>>2]|0;L856:do{if((a[gy+(gH*40&-1)|0]&1)!=0){if((gz|0)>0){cd=c[10036]|0;hS=0;gC=0;hF=gG;while(1){gE=a[b1+hS|0]|0;if(gE<<24>>24==(a[cd+(hS+hF|0)|0]|0)){j4=hF;j5=gC}else{if(gE<<24>>24!=36){break L856}j4=hF-1|0;j5=1}j6=hS+1|0;if((j6|0)<(j5+gz|0)){hS=j6;gC=j5;hF=j4}else{break}}if((j5|0)==0){j7=j6;b7=600}}else{j7=0;b7=600}if((b7|0)==600){b7=0;hF=a[b1+j7|0]|0;if(!((hF<<24>>24|0)==36|(hF<<24>>24|0)==0)){break}}c[17195]=c[17195]|2;c[17215]=0;c[13898]=gH+1;break L44}}while(0);be(b5|0,125376,(v=i,i=i+8|0,c[v>>2]=56976,v)|0);gH=c[13898]|0;L871:do{if((c[8272]|0)>(gH|0)){gz=c[1054]|0;if((a[gz+(gH*40&-1)|0]&1)==0){break}gG=c[gz+(gH*40&-1)+36>>2]|0;gy=gz+(gH*40&-1)+32|0;gz=c[10036]|0;hF=0;while(1){if((hF|0)>=(gG|0)){break}if((a[gz+((c[gy>>2]|0)+hF|0)|0]|0)==(a[b0+hF|0]|0)){hF=hF+1|0}else{break L871}}if((a[b0+hF|0]|0)!=0){break}c[17195]=c[17195]|12;c[13898]=gH+1;break L44}}while(0);be(b5|0,125128,(v=i,i=i+8|0,c[v>>2]=56976,v)|0);gH=c[13898]|0;gy=c[1054]|0;gz=c[gy+(gH*40&-1)+36>>2]|0;gG=c[gy+(gH*40&-1)+32>>2]|0;L880:do{if((a[gy+(gH*40&-1)|0]&1)!=0){if((gz|0)>0){gC=c[10036]|0;hS=0;cd=0;gE=gG;while(1){gA=a[b0+hS|0]|0;if(gA<<24>>24==(a[gC+(hS+gE|0)|0]|0)){j8=gE;j9=cd}else{if(gA<<24>>24!=36){break L880}j8=gE-1|0;j9=1}ka=hS+1|0;if((ka|0)<(j9+gz|0)){hS=ka;cd=j9;gE=j8}else{break}}if((j9|0)==0){kb=ka;b7=617}}else{kb=0;b7=617}if((b7|0)==617){b7=0;gE=a[b0+kb|0]|0;if(!((gE<<24>>24|0)==36|(gE<<24>>24|0)==0)){break}}c[17195]=c[17195]|4;c[13898]=gH+1;break L44}}while(0);be(b3|0,124936,(v=i,i=i+8|0,c[v>>2]=56976,v)|0);gH=c[13898]|0;gz=c[1054]|0;gG=c[gz+(gH*40&-1)+36>>2]|0;gy=c[gz+(gH*40&-1)+32>>2]|0;L895:do{if((a[gz+(gH*40&-1)|0]&1)!=0){L897:do{if((gG|0)>0){gE=c[10036]|0;cd=0;hS=0;gC=gy;while(1){hF=a[b1+cd|0]|0;if(hF<<24>>24==(a[gE+(cd+gC|0)|0]|0)){kc=gC;kd=hS}else{if(hF<<24>>24!=36){break L897}kc=gC-1|0;kd=1}ke=cd+1|0;if((ke|0)<(kd+gG|0)){cd=ke;hS=kd;gC=kc}else{break}}if((kd|0)==0){kf=ke;b7=627}else{b7=628}}else{kf=0;b7=627}}while(0);if((b7|0)==627){b7=0;gC=a[b1+kf|0]|0;if((gC<<24>>24|0)==36|(gC<<24>>24|0)==0){b7=628}}if((b7|0)==628){b7=0;c[17195]=c[17195]|8;c[13898]=gH+1;break L44}if((c[8272]|0)<=(gH|0)){break}gC=c[10036]|0;hS=0;while(1){if((hS|0)>=(gG|0)){break}if((a[gC+(hS+gy|0)|0]|0)==(a[hS+56952|0]|0)){hS=hS+1|0}else{break L895}}if((a[hS+56952|0]|0)!=0){break}c[17023]=3;c[17042]=0;c[17043]=0;c[13898]=gH+1;break L44}}while(0);be(b5|0,125560,(v=i,i=i+8|0,c[v>>2]=56952,v)|0);gH=c[13898]|0;gy=c[1054]|0;gG=c[gy+(gH*40&-1)+36>>2]|0;gz=c[gy+(gH*40&-1)+32>>2]|0;L918:do{if((a[gy+(gH*40&-1)|0]&1)!=0){if((gG|0)>0){gC=c[10036]|0;cd=0;gE=0;hF=gz;while(1){gA=a[b0+cd|0]|0;if(gA<<24>>24==(a[gC+(cd+hF|0)|0]|0)){kg=hF;kh=gE}else{if(gA<<24>>24!=36){break L918}kg=hF-1|0;kh=1}ki=cd+1|0;if((ki|0)<(kh+gG|0)){cd=ki;gE=kh;hF=kg}else{break}}if((kh|0)==0){kj=ki;b7=643}}else{kj=0;b7=643}if((b7|0)==643){b7=0;hF=a[b0+kj|0]|0;if(!((hF<<24>>24|0)==36|(hF<<24>>24|0)==0)){break}}c[17023]=c[17023]|1;c[17042]=0;c[13898]=gH+1;break L44}}while(0);be(b3|0,125432,(v=i,i=i+8|0,c[v>>2]=56952,v)|0);gH=c[13898]|0;gG=c[1054]|0;gz=c[gG+(gH*40&-1)+36>>2]|0;gy=c[gG+(gH*40&-1)+32>>2]|0;L933:do{if((a[gG+(gH*40&-1)|0]&1)!=0){if((gz|0)>0){hF=c[10036]|0;gE=0;cd=0;gC=gy;while(1){hS=a[b1+gE|0]|0;if(hS<<24>>24==(a[hF+(gE+gC|0)|0]|0)){kk=gC;kl=cd}else{if(hS<<24>>24!=36){break L933}kk=gC-1|0;kl=1}km=gE+1|0;if((km|0)<(kl+gz|0)){gE=km;cd=kl;gC=kk}else{break}}if((kl|0)==0){kn=km;b7=653}}else{kn=0;b7=653}if((b7|0)==653){b7=0;gC=a[b1+kn|0]|0;if(!((gC<<24>>24|0)==36|(gC<<24>>24|0)==0)){break}}c[17023]=c[17023]|2;c[17043]=0;c[13898]=gH+1;break L44}}while(0);be(b5|0,125376,(v=i,i=i+8|0,c[v>>2]=56952,v)|0);gH=c[13898]|0;L948:do{if((c[8272]|0)>(gH|0)){gz=c[1054]|0;if((a[gz+(gH*40&-1)|0]&1)==0){break}gy=c[gz+(gH*40&-1)+36>>2]|0;gG=gz+(gH*40&-1)+32|0;gz=c[10036]|0;gC=0;while(1){if((gC|0)>=(gy|0)){break}if((a[gz+((c[gG>>2]|0)+gC|0)|0]|0)==(a[b0+gC|0]|0)){gC=gC+1|0}else{break L948}}if((a[b0+gC|0]|0)!=0){break}c[17023]=c[17023]|12;c[13898]=gH+1;break L44}}while(0);be(b5|0,125128,(v=i,i=i+8|0,c[v>>2]=56952,v)|0);gH=c[13898]|0;gG=c[1054]|0;gz=c[gG+(gH*40&-1)+36>>2]|0;gy=c[gG+(gH*40&-1)+32>>2]|0;L957:do{if((a[gG+(gH*40&-1)|0]&1)!=0){if((gz|0)>0){cd=c[10036]|0;gE=0;hF=0;hS=gy;while(1){gA=a[b0+gE|0]|0;if(gA<<24>>24==(a[cd+(gE+hS|0)|0]|0)){ko=hS;kp=hF}else{if(gA<<24>>24!=36){break L957}ko=hS-1|0;kp=1}kq=gE+1|0;if((kq|0)<(kp+gz|0)){gE=kq;hF=kp;hS=ko}else{break}}if((kp|0)==0){kr=kq;b7=670}}else{kr=0;b7=670}if((b7|0)==670){b7=0;hS=a[b0+kr|0]|0;if(!((hS<<24>>24|0)==36|(hS<<24>>24|0)==0)){break}}c[17023]=c[17023]|4;c[13898]=gH+1;break L44}}while(0);be(b3|0,124936,(v=i,i=i+8|0,c[v>>2]=56952,v)|0);gH=c[13898]|0;gz=c[1054]|0;gy=c[gz+(gH*40&-1)+36>>2]|0;gG=c[gz+(gH*40&-1)+32>>2]|0;L972:do{if((a[gz+(gH*40&-1)|0]&1)!=0){L974:do{if((gy|0)>0){hS=c[10036]|0;hF=0;gE=0;cd=gG;while(1){gC=a[b1+hF|0]|0;if(gC<<24>>24==(a[hS+(hF+cd|0)|0]|0)){ks=cd;kt=gE}else{if(gC<<24>>24!=36){break L974}ks=cd-1|0;kt=1}ku=hF+1|0;if((ku|0)<(kt+gy|0)){hF=ku;gE=kt;cd=ks}else{break}}if((kt|0)==0){kv=ku;b7=680}else{b7=681}}else{kv=0;b7=680}}while(0);if((b7|0)==680){b7=0;cd=a[b1+kv|0]|0;if((cd<<24>>24|0)==36|(cd<<24>>24|0)==0){b7=681}}if((b7|0)==681){b7=0;c[17023]=c[17023]|8;c[13898]=gH+1;break L44}if((c[8272]|0)<=(gH|0)){break}cd=c[10036]|0;gE=0;while(1){if((gE|0)>=(gy|0)){break}if((a[cd+(gE+gG|0)|0]|0)==(a[gE+56904|0]|0)){gE=gE+1|0}else{break L972}}if((a[gE+56904|0]|0)!=0){break}c[16679]=3;c[16698]=0;c[16699]=0;c[13898]=gH+1;break L44}}while(0);be(b5|0,125560,(v=i,i=i+8|0,c[v>>2]=56904,v)|0);gH=c[13898]|0;gG=c[1054]|0;gy=c[gG+(gH*40&-1)+36>>2]|0;gz=c[gG+(gH*40&-1)+32>>2]|0;L995:do{if((a[gG+(gH*40&-1)|0]&1)!=0){if((gy|0)>0){cd=c[10036]|0;hF=0;hS=0;gC=gz;while(1){gA=a[b0+hF|0]|0;if(gA<<24>>24==(a[cd+(hF+gC|0)|0]|0)){kw=gC;kx=hS}else{if(gA<<24>>24!=36){break L995}kw=gC-1|0;kx=1}ky=hF+1|0;if((ky|0)<(kx+gy|0)){hF=ky;hS=kx;gC=kw}else{break}}if((kx|0)==0){kz=ky;b7=696}}else{kz=0;b7=696}if((b7|0)==696){b7=0;gC=a[b0+kz|0]|0;if(!((gC<<24>>24|0)==36|(gC<<24>>24|0)==0)){break}}c[16679]=c[16679]|1;c[16698]=0;c[13898]=gH+1;break L44}}while(0);be(b3|0,125432,(v=i,i=i+8|0,c[v>>2]=56904,v)|0);gH=c[13898]|0;gy=c[1054]|0;gz=c[gy+(gH*40&-1)+36>>2]|0;gG=c[gy+(gH*40&-1)+32>>2]|0;L1010:do{if((a[gy+(gH*40&-1)|0]&1)!=0){if((gz|0)>0){gC=c[10036]|0;hS=0;hF=0;cd=gG;while(1){gE=a[b1+hS|0]|0;if(gE<<24>>24==(a[gC+(hS+cd|0)|0]|0)){kA=cd;kB=hF}else{if(gE<<24>>24!=36){break L1010}kA=cd-1|0;kB=1}kC=hS+1|0;if((kC|0)<(kB+gz|0)){hS=kC;hF=kB;cd=kA}else{break}}if((kB|0)==0){kD=kC;b7=706}}else{kD=0;b7=706}if((b7|0)==706){b7=0;cd=a[b1+kD|0]|0;if(!((cd<<24>>24|0)==36|(cd<<24>>24|0)==0)){break}}c[16679]=c[16679]|2;c[16699]=0;c[13898]=gH+1;break L44}}while(0);be(b5|0,125376,(v=i,i=i+8|0,c[v>>2]=56904,v)|0);gH=c[13898]|0;L1025:do{if((c[8272]|0)>(gH|0)){gz=c[1054]|0;if((a[gz+(gH*40&-1)|0]&1)==0){break}gG=c[gz+(gH*40&-1)+36>>2]|0;gy=gz+(gH*40&-1)+32|0;gz=c[10036]|0;cd=0;while(1){if((cd|0)>=(gG|0)){break}if((a[gz+((c[gy>>2]|0)+cd|0)|0]|0)==(a[b0+cd|0]|0)){cd=cd+1|0}else{break L1025}}if((a[b0+cd|0]|0)!=0){break}c[16679]=c[16679]|12;c[13898]=gH+1;break L44}}while(0);be(b5|0,125128,(v=i,i=i+8|0,c[v>>2]=56904,v)|0);gH=c[13898]|0;gy=c[1054]|0;gz=c[gy+(gH*40&-1)+36>>2]|0;gG=c[gy+(gH*40&-1)+32>>2]|0;L1034:do{if((a[gy+(gH*40&-1)|0]&1)!=0){if((gz|0)>0){hF=c[10036]|0;hS=0;gC=0;gE=gG;while(1){gA=a[b0+hS|0]|0;if(gA<<24>>24==(a[hF+(hS+gE|0)|0]|0)){kE=gE;kF=gC}else{if(gA<<24>>24!=36){break L1034}kE=gE-1|0;kF=1}kG=hS+1|0;if((kG|0)<(kF+gz|0)){hS=kG;gC=kF;gE=kE}else{break}}if((kF|0)==0){kH=kG;b7=723}}else{kH=0;b7=723}if((b7|0)==723){b7=0;gE=a[b0+kH|0]|0;if(!((gE<<24>>24|0)==36|(gE<<24>>24|0)==0)){break}}c[16679]=c[16679]|4;c[13898]=gH+1;break L44}}while(0);be(b3|0,124936,(v=i,i=i+8|0,c[v>>2]=56904,v)|0);kI=c[13898]|0;gH=c[1054]|0;gz=c[gH+(kI*40&-1)+36>>2]|0;if((a[gH+(kI*40&-1)|0]&1)==0){b7=5120;break L27}if((gz|0)>0){gG=c[10036]|0;gy=0;gE=0;gC=c[gH+(kI*40&-1)+32>>2]|0;while(1){gH=a[b1+gy|0]|0;if(gH<<24>>24==(a[gG+(gy+gC|0)|0]|0)){kJ=gC;kK=gE}else{if(gH<<24>>24!=36){b7=5121;break L27}kJ=gC-1|0;kK=1}kL=gy+1|0;if((kL|0)<(kK+gz|0)){gy=kL;gE=kK;gC=kJ}else{break}}if((kK|0)==0){kM=kL;b7=733}}else{kM=0;b7=733}if((b7|0)==733){b7=0;gC=a[b1+kM|0]|0;if(!((gC<<24>>24|0)==36|(gC<<24>>24|0)==0)){b7=5122;break L27}}c[16679]=c[16679]|8;c[13898]=kI+1;break L44}}while(0);c[16163]=3;c[16335]=3;c[16507]=3;c[16679]=3;c[16851]=3;c[17023]=3;c[17195]=3;c[17367]=3;c[17539]=3;c[17711]=3;c[17883]=3}else if((gD|0)==6){gx=gv+1|0;c[13898]=gx;gC=c[8272]|0;L1064:do{if((gx|0)<(gC|0)){gE=gx;gy=gC;gz=gw;while(1){gG=c[gz+(gE*40&-1)+36>>2]|0;gH=gz+(gE*40&-1)+32|0;L1067:do{if((a[gz+(gE*40&-1)|0]&1)==0){b7=776}else{hS=c[10036]|0;hF=0;while(1){if((hF|0)>=(gG|0)){b7=741;break}cd=c[gH>>2]|0;if((a[hS+(cd+hF|0)|0]|0)==(a[hF+103664|0]|0)){hF=hF+1|0}else{kN=cd;break}}if((b7|0)==741){b7=0;if((hF|0)==1){kO=gE;break L1064}kN=c[gH>>2]|0}L1076:do{if((gG|0)>0){cd=0;gA=0;hp=kN;while(1){if((a[cd+95520|0]|0)==(a[hS+(cd+hp|0)|0]|0)){kP=hp;kQ=gA}else{if((cd|0)!=1){kR=0;kS=0;kT=kN;break}kP=hp-1|0;kQ=1}ho=cd+1|0;if((ho|0)<(kQ+gG|0)){cd=ho;gA=kQ;hp=kP}else{b7=748;break}}do{if((b7|0)==748){b7=0;if((kQ|0)==0){if(!((cd|0)==0|(cd|0)==5)){kR=0;kS=0;kT=kN;break}}h[7077]=0.0;hp=gE+1|0;c[13898]=hp;kU=hp;kV=gy;break L1067}}while(0);while(1){if((a[kR+126016|0]|0)==(a[hS+(kR+kT|0)|0]|0)){kW=kT;kX=kS}else{if((kR|0)!=1){kY=0;kZ=0;k_=kN;break}kW=kT-1|0;kX=1}cd=kR+1|0;if((cd|0)<(kX+gG|0)){kR=cd;kS=kX;kT=kW}else{b7=755;break}}do{if((b7|0)==755){b7=0;if((kX|0)==0){if(!((kR|0)==0|(kR|0)==5)){kY=0;kZ=0;k_=kN;break}}h[7077]=1.0;cd=gE+1|0;c[13898]=cd;kU=cd;kV=gy;break L1067}}while(0);while(1){if((a[kY+125960|0]|0)==(a[hS+(kY+k_|0)|0]|0)){k$=k_;k0=kZ}else{if((kY|0)!=4){break L1076}k$=k_-1|0;k0=1}cd=kY+1|0;if((cd|0)<(k0+gG|0)){kY=cd;kZ=k0;k_=k$}else{break}}if((k0|0)==0){if(!((kY|0)==3|(kY|0)==9)){break}}h[7077]=-1.0;cd=gE+1|0;c[13898]=cd;kU=cd;kV=gy;break L1067}}while(0);if((gy|0)>(gE|0)){k1=0}else{b7=776;break}while(1){if((k1|0)>=(gG|0)){b7=770;break}if((a[hS+(k1+kN|0)|0]|0)==(a[k1+150856|0]|0)){k1=k1+1|0}else{k2=0;break}}do{if((b7|0)==770){b7=0;if((k1|0)!=5){k2=0;break}c[14156]=1;hF=gE+1|0;c[13898]=hF;kU=hF;kV=gy;break L1067}}while(0);while(1){if((k2|0)>=(gG|0)){break}if((a[hS+(k2+kN|0)|0]|0)==(a[k2+150704|0]|0)){k2=k2+1|0}else{b7=776;break L1067}}if((k2|0)!=4){b7=776;break}c[14156]=0;hS=gE+1|0;c[13898]=hS;kU=hS;kV=gy}}while(0);if((b7|0)==776){b7=0;gG=is(b_)|0;gH=c[gG>>2]|0;if((gH|0)==1){k3=+(c[gG+8>>2]|0)}else if((gH|0)==2){k3=+h[gG+8>>3]}else if((gH|0)==3){k3=+uz(c[gG+8>>2]|0,0)}else{b7=780;break L27}if((c[b6>>2]|0)==3){uu(c[cc>>2]|0);c[b6>>2]=1}h[7077]=k3;kU=c[13898]|0;kV=c[8272]|0}if((kU|0)>=(kV|0)){kO=kU;break L1064}gE=kU;gy=kV;gz=c[1054]|0}}else{kO=gx}}while(0);if((gx|0)!=(kO|0)){break}h[7077]=1.0}else if((gD|0)==8){gC=gv+1|0;c[13898]=gC;gz=c[8272]|0;gy=(gC|0)<(gz|0);L1136:do{if(gy){if((a[gw+(gC*40&-1)|0]&1)==0){k4=gC;k5=gz;k6=gw;b7=794;break}gE=c[gw+(gC*40&-1)+36>>2]|0;gG=gw+(gC*40&-1)+32|0;gH=0;while(1){if((gH|0)>=(gE|0)){break}if((a[gB+((c[gG>>2]|0)+gH|0)|0]|0)==(a[gH+103664|0]|0)){gH=gH+1|0}else{b7=793;break L1136}}if((gH|0)==1){b7=792}else{b7=793}}else{b7=792}}while(0);if((b7|0)==792){b7=0;c[11692]=31;c[14088]=1;c[14074]=c[12768];c[14075]=c[12769];c[14076]=c[12770];c[14077]=c[12771];c[14078]=c[12772];c[14079]=c[12773];c[14080]=c[12774];c[14081]=c[12775];c[14082]=c[12776];c[14083]=c[12777];c[14084]=c[12778];c[14085]=c[12779];c[14086]=c[12780];c[14087]=c[12781];b7=793}if((b7|0)==793){b7=0;if(gy){k4=gC;k5=gz;k6=gw;b7=794}}L1147:do{if((b7|0)==794){while(1){b7=0;L1150:do{if((a[k6+(k4*40&-1)|0]&1)==0){b7=810}else{gx=c[k6+(k4*40&-1)+36>>2]|0;gG=k6+(k4*40&-1)+32|0;gE=c[10036]|0;hS=0;while(1){if((hS|0)>=(gx|0)){b7=798;break}if((a[gE+((c[gG>>2]|0)+hS|0)|0]|0)==(a[hS+103664|0]|0)){hS=hS+1|0}else{break}}if((b7|0)==798){b7=0;if((hS|0)==1){break L1147}}if((k5|0)>(k4|0)){k7=0}else{b7=810;break}while(1){if((k7|0)>=(gx|0)){b7=802;break}if((a[gE+((c[gG>>2]|0)+k7|0)|0]|0)==(a[k7+150856|0]|0)){k7=k7+1|0}else{k8=0;break}}do{if((b7|0)==802){b7=0;if((k7|0)!=5){k8=0;break}c[14088]=1;hS=k4+1|0;c[13898]=hS;k9=hS;break L1150}}while(0);while(1){if((k8|0)>=(gx|0)){break}if((a[gE+((c[gG>>2]|0)+k8|0)|0]|0)==(a[k8+150704|0]|0)){k8=k8+1|0}else{b7=810;break L1150}}if((k8|0)!=4){b7=810;break}c[14088]=0;gG=k4+1|0;c[13898]=gG;k9=gG}}while(0);do{if((b7|0)==810){b7=0;hH(56296,1,0);gG=c[13898]|0;if((k4|0)!=(gG|0)){k9=gG;break}gG=is(bZ)|0;gE=c[gG>>2]|0;if((gE|0)==1){la=+(c[gG+8>>2]|0)}else if((gE|0)==2){la=+h[gG+8>>3]}else if((gE|0)==3){la=+uz(c[gG+8>>2]|0,0)}else{b7=815;break L27}if((c[b4>>2]|0)==3){uu(c[cg>>2]|0);c[b4>>2]=1}c[11692]=~~la;k9=c[13898]|0}}while(0);gG=c[8272]|0;if((k9|0)>=(gG|0)){break L1147}k4=k9;k5=gG;k6=c[1054]|0;b7=794}}}while(0);c[260]=c[11692]}else if((gD|0)==9){gz=gv+1|0;c[13898]=gz;gC=c[8272]|0;L1184:do{if((gz|0)<(gC|0)){L1186:do{if((a[gw+(gz*40&-1)|0]&1)!=0){gy=c[gw+(gz*40&-1)+36>>2]|0;gH=gw+(gz*40&-1)+32|0;gG=0;while(1){if((gG|0)>=(gy|0)){break}if((a[gB+((c[gH>>2]|0)+gG|0)|0]|0)==(a[gG+103664|0]|0)){gG=gG+1|0}else{break L1186}}if((gG|0)==1){b7=826;break L1184}}}while(0);gH=is(bY)|0;gy=c[gH>>2]|0;if((gy|0)==1){lb=+(c[gH+8>>2]|0)}else if((gy|0)==2){lb=+h[gH+8>>3]}else if((gy|0)==3){lb=+uz(c[gH+8>>2]|0,0)}else{b7=831;break L27}if((c[ch>>2]|0)==3){uu(c[ci>>2]|0);c[ch>>2]=1}h[7030]=lb;lc=c[13898]|0;ld=c[8272]|0}else{b7=826}}while(0);if((b7|0)==826){b7=0;h[7030]=-1.0;a[56232]=1;lc=gz;ld=gC}if((lc|0)>=(ld|0)){break}gH=c[1054]|0;if((a[gH+(lc*40&-1)|0]&1)==0){b7=5123;break L27}gy=c[gH+(lc*40&-1)+36>>2]|0;gE=gH+(lc*40&-1)+32|0;gH=c[10036]|0;gx=0;while(1){if((gx|0)>=(gy|0)){b7=840;break}hS=c[gE>>2]|0;if((a[gH+(hS+gx|0)|0]|0)==(a[gx+103664|0]|0)){gx=gx+1|0}else{le=hS;break}}if((b7|0)==840){b7=0;if((gx|0)==1){break}le=c[gE>>2]|0}if((gy|0)>0){lf=0;lg=0;lh=le}else{b7=5124;break L27}while(1){if((a[lf+126368|0]|0)==(a[gH+(lf+lh|0)|0]|0)){li=lh;lk=lg}else{if((lf|0)!=1){lm=0;ln=0;lo=le;b7=849;break}li=lh-1|0;lk=1}gC=lf+1|0;if((gC|0)<(lk+gy|0)){lf=gC;lg=lk;lh=li}else{b7=847;break}}do{if((b7|0)==847){b7=0;if((lk|0)!=0){lp=1;break}if((lf|0)==0|(lf|0)==8){lp=1}else{lm=0;ln=0;lo=le;b7=849}}}while(0);do{if((b7|0)==849){while(1){b7=0;if((a[lm+126280|0]|0)==(a[gH+(lm+lo|0)|0]|0)){lq=lo;lr=ln}else{if((lm|0)!=1){b7=5125;break L27}lq=lo-1|0;lr=1}gE=lm+1|0;if((gE|0)<(lr+gy|0)){lm=gE;ln=lr;lo=lq;b7=849}else{break}}if((lr|0)!=0){lp=0;break}if((lm|0)==0|(lm|0)==8){lp=0}else{b7=5126;break L27}}}while(0);a[56232]=lp;c[13898]=lc+1}else if((gD|0)==10){gy=gv+1|0;c[13898]=gy;a[35888]=1;if((gy|0)>=(c[8272]|0)){break}L1234:do{if((a[gw+(gy*40&-1)|0]&1)!=0){gH=c[gw+(gy*40&-1)+36>>2]|0;gE=gw+(gy*40&-1)+32|0;gx=0;while(1){if((gx|0)>=(gH|0)){break}if((a[gB+((c[gE>>2]|0)+gx|0)|0]|0)==(a[gx+103664|0]|0)){gx=gx+1|0}else{break L1234}}if((gx|0)==1){break L44}}}while(0);a[14176]=1;is(bX);a[14176]=0;if((c[cj>>2]|0)!=3){c[13898]=gy;break}gE=c[ck>>2]|0;if((gE|0)==0){break}uF(53520,gE|0,32);uu(gE)}else if((gD|0)==11){lt=gv+1|0;c[13898]=lt;L1246:do{if((lt|0)<(c[8272]|0)){if((a[gw+(lt*40&-1)|0]&1)==0){b7=5127;break L27}gE=c[gw+(lt*40&-1)+36>>2]|0;gH=gw+(lt*40&-1)+32|0;gC=0;while(1){if((gC|0)>=(gE|0)){b7=872;break}gz=c[gH>>2]|0;if((a[gB+(gz+gC|0)|0]|0)==(a[gC+103664|0]|0)){gC=gC+1|0}else{lu=gz;break}}if((b7|0)==872){b7=0;if((gC|0)==1){b7=874;break}lu=c[gH>>2]|0}if((gE|0)>0){lv=0;lw=0;lx=lu}else{b7=5128;break L27}while(1){if((a[lv+144616|0]|0)==(a[gB+(lv+lx|0)|0]|0)){ly=lx;lA=lw}else{if((lv|0)!=1){lB=0;lC=0;lD=lu;break}ly=lx-1|0;lA=1}gx=lv+1|0;if((gx|0)<(lA+gE|0)){lv=gx;lw=lA;lx=ly}else{b7=880;break}}do{if((b7|0)==880){b7=0;if((lA|0)==0){if(!((lv|0)==0|(lv|0)==6)){lB=0;lC=0;lD=lu;break}}a[54144]=1;break L1246}}while(0);while(1){if((a[lB+143008|0]|0)==(a[gB+(lB+lD|0)|0]|0)){lE=lD;lF=lC}else{if((lB|0)!=1){lG=0;lH=0;lI=lu;break}lE=lD-1|0;lF=1}gH=lB+1|0;if((gH|0)<(lF+gE|0)){lB=gH;lC=lF;lD=lE}else{b7=887;break}}do{if((b7|0)==887){b7=0;if((lF|0)==0){if(!((lB|0)==0|(lB|0)==3)){lG=0;lH=0;lI=lu;break}}a[54160]=1;break L1246}}while(0);while(1){if((a[lG+141464|0]|0)==(a[gB+(lG+lI|0)|0]|0)){lJ=lI;lK=lH}else{if((lG|0)!=1){b7=5129;break L27}lJ=lI-1|0;lK=1}gH=lG+1|0;if((gH|0)<(lK+gE|0)){lG=gH;lH=lK;lI=lJ}else{break}}if((lK|0)==0){if(!((lG|0)==0|(lG|0)==3)){b7=5130;break L27}}a[54152]=1}else{b7=874}}while(0);if((b7|0)==874){b7=0;a[54144]=1}c[13898]=gv+2}else if((gD|0)==12){lL=gv+1|0;c[13898]=lL;do{if((lL|0)<(c[8272]|0)){if((a[gw+(lL*40&-1)|0]&1)==0){b7=5144;break L27}gy=c[gw+(lL*40&-1)+36>>2]|0;gE=gw+(lL*40&-1)+32|0;gH=0;while(1){if((gH|0)>=(gy|0)){b7=904;break}gC=c[gE>>2]|0;if((a[gB+(gC+gH|0)|0]|0)==(a[gH+103664|0]|0)){gH=gH+1|0}else{lM=gC;break}}if((b7|0)==904){b7=0;if((gH|0)==1){break}lM=c[gE>>2]|0}if((gy|0)>0){lN=0;lO=0;lP=lM}else{b7=5145;break L27}while(1){if((a[lN+144616|0]|0)==(a[gB+(lN+lP|0)|0]|0)){lQ=lP;lR=lO}else{if((lN|0)!=1){lS=0;lT=0;lU=lM;break}lQ=lP-1|0;lR=1}gC=lN+1|0;if((gC|0)<(lR+gy|0)){lN=gC;lO=lR;lP=lQ}else{b7=912;break}}do{if((b7|0)==912){b7=0;if((lR|0)==0){if(!((lN|0)==6|(lN|0)==0)){lS=0;lT=0;lU=lM;break}}c[13898]=gv+2;gE=is(bW)|0;gH=c[gE>>2]|0;if((gH|0)==1){lV=+(c[gE+8>>2]|0)}else if((gH|0)==2){lV=+h[gE+8>>3]}else if((gH|0)==3){lV=+uz(c[gE+8>>2]|0,0)}else{b7=918;break L27}if((c[cl>>2]|0)==3){uu(c[cm>>2]|0);c[cl>>2]=1}c[13366]=~~lV;break L44}}while(0);while(1){if((a[lS+128720|0]|0)==(a[gB+(lS+lU|0)|0]|0)){lW=lU;lX=lT}else{if((lS|0)!=2){lY=0;lZ=0;l_=lM;break}lW=lU-1|0;lX=1}gE=lS+1|0;if((gE|0)<(lX+gy|0)){lS=gE;lT=lX;lU=lW}else{b7=926;break}}do{if((b7|0)==926){b7=0;if((lX|0)==0){if(!((lS|0)==6|(lS|0)==1)){lY=0;lZ=0;l_=lM;break}}c[13898]=gv+2;c[13378]=0;break L44}}while(0);while(1){if((a[lY+128624|0]|0)==(a[gB+(lY+l_|0)|0]|0)){l$=l_;l0=lZ}else{if((lY|0)!=1){l1=0;l2=0;l3=lM;break}l$=l_-1|0;l0=1}gE=lY+1|0;if((gE|0)<(l0+gy|0)){lY=gE;lZ=l0;l_=l$}else{b7=933;break}}do{if((b7|0)==933){b7=0;if((l0|0)==0){if(!((lY|0)==11|(lY|0)==0)){l1=0;l2=0;l3=lM;break}}c[13898]=gv+2;c[13378]=1;break L44}}while(0);while(1){if((a[l1+128536|0]|0)==(a[gB+(l1+l3|0)|0]|0)){l4=l3;l5=l2}else{if((l1|0)!=1){l6=0;l7=0;l8=lM;break}l4=l3-1|0;l5=1}gE=l1+1|0;if((gE|0)<(l5+gy|0)){l1=gE;l2=l5;l3=l4}else{b7=940;break}}do{if((b7|0)==940){b7=0;if((l5|0)==0){if(!((l1|0)==7|(l1|0)==0)){l6=0;l7=0;l8=lM;break}}c[13898]=gv+2;c[13378]=2;break L44}}while(0);while(1){if((a[l6+128464|0]|0)==(a[gB+(l6+l8|0)|0]|0)){l9=l8;ma=l7}else{if((l6|0)!=2){mb=0;mc=0;md=lM;break}l9=l8-1|0;ma=1}gE=l6+1|0;if((gE|0)<(ma+gy|0)){l6=gE;l7=ma;l8=l9}else{b7=947;break}}do{if((b7|0)==947){b7=0;if((ma|0)==0){if(!((l6|0)==6|(l6|0)==1)){mb=0;mc=0;md=lM;break}}gE=gv+2|0;c[13898]=gE;gH=c[6074]|0;if((gH|0)==0){b7=951}else{if((c[gH+32>>2]|0)==0){b7=951}else{me=gE;mf=gw}}if((b7|0)==951){b7=0;uu(c[11662]|0);c[11658]=0;c[11659]=0;c[11662]=0;gE=ut(40)|0;if((gE|0)==0){gk();gH=ut(40)|0;if((gH|0)==0){b7=953;break L27}else{mg=gH}}else{mg=gE}c[11662]=mg;c[11658]=5;c[11659]=0;c[11660]=10;c[11661]=8;me=c[13898]|0;mf=c[1054]|0}gE=c[mf+(me*40&-1)+36>>2]|0;gH=c[mf+(me*40&-1)+32>>2]|0;gC=(a[mf+(me*40&-1)|0]&1)==0;L1373:do{if((gE|0)>0&(gC^1)){gx=c[10036]|0;gz=0;hS=0;hF=gH;while(1){if((a[gz+128352|0]|0)==(a[gx+(gz+hF|0)|0]|0)){mh=hF;mi=hS}else{if((gz|0)!=2){break}mh=hF-1|0;mi=1}cd=gz+1|0;if((cd|0)<(mi+gE|0)){gz=cd;hS=mi;hF=mh}else{b7=961;break}}do{if((b7|0)==961){b7=0;if((mi|0)==0){if(!((gz|0)==1|(gz|0)==8)){break}}c[13372]=2;mj=me+1|0;c[13898]=mj;if((mj|0)>=(c[8272]|0)){b7=5131;break L27}L1387:do{if((a[mf+(mj*40&-1)|0]&1)!=0){hF=c[mf+(mj*40&-1)+36>>2]|0;hS=mf+(mj*40&-1)+32|0;cd=0;while(1){if((cd|0)>=(hF|0)){break}if((a[gx+((c[hS>>2]|0)+cd|0)|0]|0)==(a[cd+103664|0]|0)){cd=cd+1|0}else{break L1387}}if((cd|0)==1){b7=5132;break L27}}}while(0);hS=is(bT)|0;hF=c[hS>>2]|0;if((hF|0)==1){mk=+(c[hS+8>>2]|0)}else if((hF|0)==2){mk=+h[hS+8>>3]}else if((hF|0)==3){mk=+uz(c[hS+8>>2]|0,0)}else{b7=974;break L27}if((c[cn>>2]|0)==3){uu(c[co>>2]|0);c[cn>>2]=1}hS=c[11662]|0;if((hS|0)==0){b7=978;break L27}hF=c[11659]|0;hp=c[11658]|0;do{if((hF|0)<(hp|0)){ml=hS;mm=hF}else{gA=(c[11660]|0)+hp|0;if((gA|0)==0){uu(hS);c[11662]=0;c[11658]=0;c[11659]=0;ml=0;mm=0;break}else{ho=db(hS,aa(c[11661]|0,gA),150384)|0;c[11662]=ho;c[11658]=gA;ml=ho;mm=c[11659]|0;break}}}while(0);hS=c[11661]|0;c[11659]=mm+1;h[ml+aa(hS,mm)>>3]=mk;hS=c[13898]|0;hp=c[8272]|0;L1409:do{if((hS|0)<(hp|0)){mn=hS;hF=hp;while(1){ho=c[1054]|0;if((a[ho+(mn*40&-1)|0]&1)==0){b7=5133;break L27}gA=c[ho+(mn*40&-1)+36>>2]|0;hG=ho+(mn*40&-1)+32|0;ho=c[10036]|0;hR=0;while(1){if((hR|0)>=(gA|0)){b7=988;break}if((a[ho+((c[hG>>2]|0)+hR|0)|0]|0)==(a[hR+103664|0]|0)){hR=hR+1|0}else{break}}if((b7|0)==988){b7=0;if((hR|0)==1){break L1409}}if((hF|0)>(mn|0)){mo=0}else{b7=5134;break L27}while(1){if((mo|0)>=(gA|0)){break}if((a[ho+((c[hG>>2]|0)+mo|0)|0]|0)==(a[mo+148464|0]|0)){mo=mo+1|0}else{b7=5135;break L27}}if((mo|0)!=1){b7=5136;break L27}c[13898]=mn+1;hG=is(bS)|0;ho=c[hG>>2]|0;if((ho|0)==1){mp=+(c[hG+8>>2]|0)}else if((ho|0)==2){mp=+h[hG+8>>3]}else if((ho|0)==3){mp=+uz(c[hG+8>>2]|0,0)}else{b7=998;break L27}if((c[cp>>2]|0)==3){uu(c[cq>>2]|0);c[cp>>2]=1}hG=c[11662]|0;if((hG|0)==0){b7=1002;break L27}ho=c[11659]|0;gA=c[11658]|0;do{if((ho|0)<(gA|0)){mq=hG;mr=ho}else{hR=(c[11660]|0)+gA|0;if((hR|0)==0){uu(hG);c[11662]=0;c[11658]=0;c[11659]=0;mq=0;mr=0;break}else{hC=db(hG,aa(c[11661]|0,hR),150384)|0;c[11662]=hC;c[11658]=hR;mq=hC;mr=c[11659]|0;break}}}while(0);hG=c[11661]|0;c[11659]=mr+1;h[mq+aa(hG,mr)>>3]=mp;hG=c[13898]|0;gA=c[8272]|0;if((hG|0)<(gA|0)){mn=hG;hF=gA}else{break}}}}while(0);c[13374]=c[11659];break L44}}while(0);if(gC){break}else{ms=0;mt=0;mu=gH}while(1){if((a[ms+127912|0]|0)==(a[gx+(ms+mu|0)|0]|0)){mv=mu;mw=mt}else{if((ms|0)!=2){mx=0;my=0;mz=gH;break}mv=mu-1|0;mw=1}gz=ms+1|0;if((gz|0)<(mw+gE|0)){ms=gz;mt=mw;mu=mv}else{b7=1014;break}}do{if((b7|0)==1014){b7=0;if((mw|0)==0){if(!((ms|0)==1|(ms|0)==11)){mx=0;my=0;mz=gH;break}}c[13372]=1;c[13898]=me+1;gz=is(bR)|0;hp=c[gz>>2]|0;if((hp|0)==1){mA=+(c[gz+8>>2]|0)}else if((hp|0)==2){mA=+h[gz+8>>3]}else if((hp|0)==3){mA=+uz(c[gz+8>>2]|0,0)}else{b7=1020;break L27}if((c[cr>>2]|0)==3){uu(c[cs>>2]|0);c[cr>>2]=1}h[c[11662]>>3]=mA;mB=c[13898]|0;if((c[8272]|0)<=(mB|0)){b7=5137;break L27}gz=c[1054]|0;if((a[gz+(mB*40&-1)|0]&1)==0){b7=5138;break L27}hp=c[gz+(mB*40&-1)+36>>2]|0;hS=gz+(mB*40&-1)+32|0;gz=c[10036]|0;hF=0;while(1){if((hF|0)>=(hp|0)){break}if((a[gz+((c[hS>>2]|0)+hF|0)|0]|0)==(a[hF+148464|0]|0)){hF=hF+1|0}else{b7=5139;break L27}}if((hF|0)!=1){b7=5140;break L27}c[13898]=mB+1;hS=is(bQ)|0;gz=c[hS>>2]|0;if((gz|0)==1){mC=+(c[hS+8>>2]|0)}else if((gz|0)==2){mC=+h[hS+8>>3]}else if((gz|0)==3){mC=+uz(c[hS+8>>2]|0,0)}else{b7=1034;break L27}if((c[ct>>2]|0)==3){uu(c[cu>>2]|0);c[ct>>2]=1}h[(c[11662]|0)+8>>3]=mC;mD=c[13898]|0;if(mC==0.0){b7=1038;break L27}if((mD|0)>=(c[8272]|0)){break L44}hS=c[1054]|0;if((a[hS+(mD*40&-1)|0]&1)==0){b7=5141;break L27}gz=c[hS+(mD*40&-1)+36>>2]|0;hp=hS+(mD*40&-1)+32|0;hS=c[10036]|0;cd=0;while(1){if((cd|0)>=(gz|0)){b7=1044;break}if((a[hS+((c[hp>>2]|0)+cd|0)|0]|0)==(a[cd+103664|0]|0)){cd=cd+1|0}else{mE=0;break}}if((b7|0)==1044){b7=0;if((cd|0)==1){break L44}else{mE=0}}while(1){if((mE|0)>=(gz|0)){break}if((a[hS+((c[hp>>2]|0)+mE|0)|0]|0)==(a[mE+148464|0]|0)){mE=mE+1|0}else{b7=5142;break L27}}if((mE|0)!=1){b7=5143;break L27}c[13898]=mD+1;c[11659]=2;hp=is(bO)|0;hS=c[hp>>2]|0;if((hS|0)==1){mF=+(c[hp+8>>2]|0)}else if((hS|0)==2){mF=+h[hp+8>>3]}else if((hS|0)==3){mF=+uz(c[hp+8>>2]|0,0)}else{b7=1053;break L27}if((c[cv>>2]|0)==3){uu(c[cw>>2]|0);c[cv>>2]=1}hp=c[11662]|0;c[13374]=~~((mF- +h[hp>>3])/+h[hp+8>>3]+1.0);break L44}}while(0);while(1){if((a[mx+127456|0]|0)==(a[gx+(mx+mz|0)|0]|0)){mG=mz;mH=my}else{if((mx|0)!=2){break L1373}mG=mz-1|0;mH=1}hp=mx+1|0;if((hp|0)<(mH+gE|0)){mx=hp;my=mH;mz=mG}else{break}}if((mH|0)==0){if(!((mx|0)==1|(mx|0)==4)){break}}c[13372]=0;hp=me+1|0;c[13898]=hp;if((hp|0)>=(c[8272]|0)){break L44}L1507:do{if((a[mf+(hp*40&-1)|0]&1)!=0){hS=c[mf+(hp*40&-1)+36>>2]|0;gz=mf+(hp*40&-1)+32|0;cd=0;while(1){if((cd|0)>=(hS|0)){break}if((a[gx+((c[gz>>2]|0)+cd|0)|0]|0)==(a[cd+103664|0]|0)){cd=cd+1|0}else{break L1507}}if((cd|0)==1){break L44}}}while(0);gx=is(bN)|0;hp=c[gx>>2]|0;if((hp|0)==1){mI=+(c[gx+8>>2]|0)}else if((hp|0)==2){mI=+h[gx+8>>3]}else if((hp|0)==3){mI=+uz(c[gx+8>>2]|0,0)}else{b7=1073;break L27}if((c[cx>>2]|0)==3){uu(c[cy>>2]|0);c[cx>>2]=1}c[13374]=~~mI;break L44}}while(0);if((c[13372]|0)==2){b7=1078;break L27}gE=is(bM)|0;gH=c[gE>>2]|0;if((gH|0)==1){mJ=+(c[gE+8>>2]|0)}else if((gH|0)==2){mJ=+h[gE+8>>3]}else if((gH|0)==3){mJ=+uz(c[gE+8>>2]|0,0)}else{b7=1083;break L27}if((c[cA>>2]|0)==3){uu(c[cC>>2]|0);c[cA>>2]=1}c[13374]=~~mJ;break L44}}while(0);while(1){if((a[mb+127152|0]|0)==(a[gB+(mb+md|0)|0]|0)){mK=md;mL=mc}else{if((mb|0)!=1){b7=5146;break L27}mK=md-1|0;mL=1}gE=mb+1|0;if((gE|0)<(mL+gy|0)){mb=gE;mc=mL;md=mK}else{break}}if((mL|0)==0){if(!((mb|0)==5|(mb|0)==0)){b7=5147;break L27}}c[13898]=gv+2;gy=is(bV)|0;gE=c[gy>>2]|0;if((gE|0)==1){mM=+(c[gy+8>>2]|0)}else if((gE|0)==2){mM=+h[gy+8>>3]}else if((gE|0)==3){mM=+uz(c[gy+8>>2]|0,0)}else{b7=1097;break L27}if((c[cD>>2]|0)==3){uu(c[cE>>2]|0);c[cD>>2]=1}gy=~~mM;if((gy-2|0)>>>0>8){b7=1101;break L27}c[13368]=gy;break L44}}while(0);c[13366]=5;c[13378]=0;c[13368]=4;c[13374]=5;c[13372]=0}else if((gD|0)==13){mN=gv+1|0;c[13898]=mN;do{if((mN|0)<(c[8272]|0)){if((a[gw+(mN*40&-1)|0]&1)==0){b7=5148;break L27}gy=c[gw+(mN*40&-1)+36>>2]|0;gE=gw+(mN*40&-1)+32|0;gH=0;while(1){if((gH|0)>=(gy|0)){b7=1109;break}gC=c[gE>>2]|0;if((a[gB+(gC+gH|0)|0]|0)==(a[gH+103664|0]|0)){gH=gH+1|0}else{mO=gC;break}}if((b7|0)==1109){b7=0;if((gH|0)==1){break}mO=c[gE>>2]|0}if((gy|0)>0){mP=0;mQ=0;mR=mO}else{b7=5149;break L27}while(1){if((a[mP+129472|0]|0)==(a[gB+(mP+mR|0)|0]|0)){mS=mR;mT=mQ}else{if((mP|0)!=2){mU=0;mV=0;mW=mO;b7=1120;break}mS=mR-1|0;mT=1}gC=mP+1|0;if((gC|0)<(mT+gy|0)){mP=gC;mQ=mT;mR=mS}else{b7=1117;break}}do{if((b7|0)==1117){b7=0;if((mT|0)==0){if(!((mP|0)==1|(mP|0)==4)){mU=0;mV=0;mW=mO;b7=1120;break}}c[11690]=1}}while(0);L1574:do{if((b7|0)==1120){while(1){b7=0;if((a[mU+129312|0]|0)==(a[gB+(mU+mW|0)|0]|0)){mX=mW;mY=mV}else{if((mU|0)!=1){mZ=0;m_=0;m$=mO;break}mX=mW-1|0;mY=1}gE=mU+1|0;if((gE|0)<(mY+gy|0)){mU=gE;mV=mY;mW=mX;b7=1120}else{b7=1124;break}}do{if((b7|0)==1124){b7=0;if((mY|0)==0){if(!((mU|0)==0|(mU|0)==7)){mZ=0;m_=0;m$=mO;break}}c[11690]=2;break L1574}}while(0);while(1){if((a[mZ+129032|0]|0)==(a[gB+(mZ+m$|0)|0]|0)){m0=m$;m1=m_}else{if((mZ|0)!=2){b7=5150;break L27}m0=m$-1|0;m1=1}gE=mZ+1|0;if((gE|0)<(m1+gy|0)){mZ=gE;m_=m1;m$=m0}else{break}}if((m1|0)==0){if(!((mZ|0)==1|(mZ|0)==4)){b7=5151;break L27}}c[11690]=3}}while(0);c[13898]=gv+2;break L44}}while(0);c[11690]=1}else if((gD|0)==17){gy=c[11732]|0;gE=c[11756]|0;gH=c[11734]|0;m2=+h[5865];m3=+h[5864];c[11752]=0;a[47016]=0;gC=gv+1|0;c[13898]=gC;gG=c[8272]|0;L1599:do{if((gC|0)<(gG|0)){gx=gy;hp=gE;gz=gH;m4=m2;m5=m3;hS=0;hF=gC;gA=gG;hG=gw;while(1){ho=(a[hG+(hF*40&-1)|0]&1)==0;hC=c[hG+(hF*40&-1)+36>>2]|0;L1602:do{if(ho){m6=c[10036]|0;m7=hG+(hF*40&-1)+32|0}else{hR=hG+(hF*40&-1)+32|0;hw=c[10036]|0;gF=0;while(1){if((gF|0)>=(hC|0)){break}if((a[hw+((c[hR>>2]|0)+gF|0)|0]|0)==(a[gF+103664|0]|0)){gF=gF+1|0}else{m6=hw;m7=hR;break L1602}}if((gF|0)==1){m8=gx;m9=hp;na=gz;nb=m4;nc=m5;break L1599}else{m6=hw;m7=hR}}}while(0);hB=c[m7>>2]|0;hK=(hC|0)>0;nd=46944;ne=103784;L1610:while(1){L1612:do{if(!ho){if(hK){nf=0;ng=0;nh=hB;while(1){ni=a[ne+nf|0]|0;if(ni<<24>>24==(a[m6+(nf+nh|0)|0]|0)){nj=nh;nk=ng}else{if(ni<<24>>24!=36){break L1612}nj=nh-1|0;nk=1}nl=nf+1|0;if((nl|0)<(nk+hC|0)){nf=nl;ng=nk;nh=nj}else{break}}if((nk|0)==0){nm=nl}else{nn=nd;break L1610}}else{nm=0}nh=a[ne+nm|0]|0;if((nh<<24>>24|0)==36|(nh<<24>>24|0)==0){nn=nd;break L1610}}}while(0);hR=nd+8|0;hw=c[hR>>2]|0;if((hw|0)==0){nn=hR;break}else{nd=hR;ne=hw}}ne=c[nn+4>>2]|0;L1625:do{if((ne|0)==8){no=hF;b7=1210}else{c[11752]=ne;nd=hF+1|0;c[13898]=nd;if((ne|0)==1){if((nd|0)>=(gA|0)){np=hS;nq=m5;nr=m4;ns=gz;nt=hp;nu=gx;break}L1630:do{if((a[hG+(nd*40&-1)|0]&1)!=0){hC=c[hG+(nd*40&-1)+36>>2]|0;hB=hG+(nd*40&-1)+32|0;hK=0;while(1){if((hK|0)>=(hC|0)){break}if((a[m6+((c[hB>>2]|0)+hK|0)|0]|0)==(a[hK+103664|0]|0)){hK=hK+1|0}else{break L1630}}if((hK|0)==1){np=hS;nq=m5;nr=m4;ns=gz;nt=hp;nu=gx;break L1625}}}while(0);hB=is(bL)|0;hC=c[hB>>2]|0;if((hC|0)==1){nv=+(c[hB+8>>2]|0)}else if((hC|0)==2){nv=+h[hB+8>>3]}else if((hC|0)==3){nv=+uz(c[hB+8>>2]|0,0)}else{b7=1165;break L27}if((c[cL>>2]|0)==3){uu(c[cM>>2]|0);c[cL>>2]=1}np=hS;nq=m5;nr=m4;ns=~~nv;nt=hp;nu=gx;break}else if((ne|0)==2){np=hS;nq=m5;nr=m4;ns=gz;nt=hp;nu=gx;break}else if(!((ne|0)==3|(ne|0)==5|(ne|0)==4|(ne|0)==6|(ne|0)==7)){no=nd;b7=1210;break}L1646:do{if((nd|0)<(gA|0)){if((a[hG+(nd*40&-1)|0]&1)==0){nw=nd;break}hB=c[hG+(nd*40&-1)+36>>2]|0;hC=hG+(nd*40&-1)+32|0;ho=0;while(1){if((ho|0)>=(hB|0)){b7=1174;break}if((a[m6+((c[hC>>2]|0)+ho|0)|0]|0)==(a[ho+103664|0]|0)){ho=ho+1|0}else{b7=1175;break}}if((b7|0)==1174){b7=0;if(!((ho|0)!=1&(hB|0)>0)){nw=nd;break}}else if((b7|0)==1175){b7=0;if((hB|0)<=0){nw=nd;break}}hK=0;hw=0;hR=c[hC>>2]|0;while(1){if((a[hK+130016|0]|0)==(a[m6+(hK+hR|0)|0]|0)){nx=hR;ny=hw}else{if((hK|0)!=5){nw=nd;break L1646}nx=hR-1|0;ny=1}gF=hK+1|0;if((gF|0)<(ny+hB|0)){hK=gF;hw=ny;hR=nx}else{break}}if((ny|0)==0){if(!((hK|0)==4|(hK|0)==10)){nw=nd;break}}a[47016]=1;hR=hF+2|0;c[13898]=hR;nw=hR}else{nw=nd}}while(0);if((nw|0)>=(gA|0)){np=hS;nq=m5;nr=m4;ns=gz;nt=hp;nu=gx;break}L1668:do{if((a[hG+(nw*40&-1)|0]&1)!=0){nd=c[hG+(nw*40&-1)+36>>2]|0;hR=hG+(nw*40&-1)+32|0;hw=0;while(1){if((hw|0)>=(nd|0)){break}if((a[m6+((c[hR>>2]|0)+hw|0)|0]|0)==(a[hw+103664|0]|0)){hw=hw+1|0}else{break L1668}}if((hw|0)==1){np=hS;nq=m5;nr=m4;ns=gz;nt=hp;nu=gx;break L1625}}}while(0);hR=is(bK)|0;nd=c[hR>>2]|0;if((nd|0)==1){nz=+(c[hR+8>>2]|0)}else if((nd|0)==2){nz=+h[hR+8>>3]}else if((nd|0)==3){nz=+uz(c[hR+8>>2]|0,0)}else{b7=1194;break L27}if((c[cN>>2]|0)==3){uu(c[cO>>2]|0);c[cN>>2]=1}hR=c[13898]|0;if((c[8272]|0)<=(hR|0)){np=hS;nq=nz;nr=nz;ns=gz;nt=hp;nu=gx;break}nd=c[1054]|0;if((a[nd+(hR*40&-1)|0]&1)==0){np=hS;nq=nz;nr=nz;ns=gz;nt=hp;nu=gx;break}hK=c[nd+(hR*40&-1)+36>>2]|0;hB=nd+(hR*40&-1)+32|0;nd=c[10036]|0;hC=0;while(1){if((hC|0)>=(hK|0)){break}if((a[nd+((c[hB>>2]|0)+hC|0)|0]|0)==(a[hC+148464|0]|0)){hC=hC+1|0}else{np=hS;nq=nz;nr=nz;ns=gz;nt=hp;nu=gx;break L1625}}if((hC|0)!=1){np=hS;nq=nz;nr=nz;ns=gz;nt=hp;nu=gx;break}c[13898]=hR+1;hB=is(bJ)|0;nd=c[hB>>2]|0;if((nd|0)==1){nA=+(c[hB+8>>2]|0)}else if((nd|0)==2){nA=+h[hB+8>>3]}else if((nd|0)==3){nA=+uz(c[hB+8>>2]|0,0)}else{b7=1207;break L27}if((c[cP>>2]|0)!=3){np=hS;nq=nA;nr=nz;ns=gz;nt=hp;nu=gx;break}uu(c[cQ>>2]|0);c[cP>>2]=1;np=hS;nq=nA;nr=nz;ns=gz;nt=hp;nu=gx}}while(0);L1696:do{if((b7|0)==1210){b7=0;L1698:do{if((gA|0)>(no|0)){if((a[hG+(no*40&-1)|0]&1)==0){break}ne=c[hG+(no*40&-1)+36>>2]|0;hB=hG+(no*40&-1)+32|0;nd=0;while(1){if((nd|0)>=(ne|0)){break}if((a[m6+((c[hB>>2]|0)+nd|0)|0]|0)==(a[nd+148464|0]|0)){nd=nd+1|0}else{break L1698}}if((nd|0)!=1){break}c[13898]=no+1;np=hS+1|0;nq=m5;nr=m4;ns=gz;nt=hp;nu=gx;break L1696}}while(0);if((hS|0)==0){hR=is(bI)|0;hC=c[hR>>2]|0;if((hC|0)==1){nB=+(c[hR+8>>2]|0)}else if((hC|0)==2){nB=+h[hR+8>>3]}else if((hC|0)==3){nB=+uz(c[hR+8>>2]|0,0)}else{b7=1224;break L27}if((c[cF>>2]|0)==3){uu(c[cG>>2]|0);c[cF>>2]=1}hR=~~nB;np=0;nq=m5;nr=m4;ns=gz;nt=hR;nu=hR;break}else if((hS|0)==1){hR=is(bH)|0;hC=c[hR>>2]|0;if((hC|0)==1){nC=+(c[hR+8>>2]|0)}else if((hC|0)==2){nC=+h[hR+8>>3]}else if((hC|0)==3){nC=+uz(c[hR+8>>2]|0,0)}else{b7=1232;break L27}if((c[cH>>2]|0)==3){uu(c[cI>>2]|0);c[cH>>2]=1}np=1;nq=m5;nr=m4;ns=gz;nt=~~nC;nu=gx;break}else if((hS|0)==2){hR=is(bG)|0;hC=c[hR>>2]|0;if((hC|0)==1){nD=+(c[hR+8>>2]|0)}else if((hC|0)==2){nD=+h[hR+8>>3]}else if((hC|0)==3){nD=+uz(c[hR+8>>2]|0,0)}else{b7=1240;break L27}if((c[cJ>>2]|0)==3){uu(c[cK>>2]|0);c[cJ>>2]=1}np=2;nq=m5;nr=m4;ns=~~nD;nt=hp;nu=gx;break}else{b7=1244;break L27}}}while(0);hR=c[13898]|0;hC=c[8272]|0;if((hR|0)>=(hC|0)){m8=nu;m9=nt;na=ns;nb=nr;nc=nq;break L1599}gx=nu;hp=nt;gz=ns;m4=nr;m5=nq;hS=np;hF=hR;gA=hC;hG=c[1054]|0}}else{m8=gy;m9=gE;na=gH;nb=m2;nc=m3}}while(0);if((m8-2|0)>>>0>998){b7=5152;break L27}if((m9-2|0)>>>0>998){b7=5153;break L27}if((c[11752]|0)==0){c[11752]=1}if(nb<0.0|nc<0.0){b7=1251;break L27}c[11732]=m8;c[11756]=m9;c[11734]=na;h[5865]=nb;h[5864]=nc;a[47032]=1}else if((gD|0)==20){c[13898]=gv+1;uu(c[12886]|0);c[12886]=0;nE=c[13898]|0;gH=c[8272]|0;L1745:do{if((nE|0)<(gH|0)){gE=c[1054]|0;L1747:do{if((a[gE+(nE*40&-1)|0]&1)!=0){gy=c[gE+(nE*40&-1)+36>>2]|0;gG=gE+(nE*40&-1)+32|0;gC=c[10036]|0;hG=0;while(1){if((hG|0)>=(gy|0)){b7=1258;break}if((a[gC+((c[gG>>2]|0)+hG|0)|0]|0)==(a[hG+103664|0]|0)){hG=hG+1|0}else{nF=0;break}}if((b7|0)==1258){b7=0;if((hG|0)==1){break L1745}else{nF=0}}while(1){if((nF|0)>=(gy|0)){b7=1265;break}if((a[gC+((c[gG>>2]|0)+nF|0)|0]|0)==(a[nF+132080|0]|0)){nF=nF+1|0}else{nG=0;break}}do{if((b7|0)==1265){b7=0;if((nF|0)!=6){nG=0;break}hG=nE+1|0;c[13898]=hG;L1760:do{if((hG|0)<(gH|0)){L1762:do{if((a[gE+(hG*40&-1)|0]&1)!=0){gA=c[gE+(hG*40&-1)+36>>2]|0;hF=gE+(hG*40&-1)+32|0;hS=0;while(1){if((hS|0)>=(gA|0)){break}if((a[gC+((c[hF>>2]|0)+hS|0)|0]|0)==(a[hS+103664|0]|0)){hS=hS+1|0}else{break L1762}}if((hS|0)==1){b7=1275;break L1760}}}while(0);a[14176]=1;is(bD);a[14176]=0;if((c[cU>>2]|0)==3){nd=c[cV>>2]|0;if((nd|0)==0){b7=1275;break}else{nH=nd;break}}else{c[13898]=hG;b7=1275;break}}else{b7=1275}}while(0);do{if((b7|0)==1275){b7=0;hG=bA(4,179864)|0;if((hG|0)!=0){nd=bP(hG|0)|0;if((nd|0)!=0){nH=nd;break}}nd=bU(130448)|0;if((nd|0)!=0){hG=bP(nd|0)|0;if((hG|0)!=0){nH=hG;break}}hG=bU(130352)|0;if((hG|0)!=0){nd=bP(hG|0)|0;if((nd|0)!=0){nH=nd;break}}nd=bU(130304)|0;if((nd|0)==0){nH=0;break}nH=bP(nd|0)|0}}while(0);if((bA(4,((nH|0)!=0?nH:179864)|0)|0)==0){b7=1284;break L27}nd=c[b$()>>2]|0;if((nd|0)==0){nI=0}else{nI=bP(nd|0)|0}c[12886]=nI;nd=c[m>>2]|0;cf(nd|0,130136,(v=i,i=i+8|0,c[v>>2]=nI,v)|0);uu(c[8270]|0);c[8270]=nH;bA(4,139696);break L44}}while(0);while(1){if((nG|0)>=(gy|0)){break}if((a[gC+((c[gG>>2]|0)+nG|0)|0]|0)==(a[nG+103664|0]|0)){nG=nG+1|0}else{break L1747}}if((nG|0)==1){b7=1293;break L27}}}while(0);a[14176]=1;is(bE);a[14176]=0;if((c[cR>>2]|0)!=3){b7=1292;break L27}gE=c[cT>>2]|0;c[12886]=gE;if((gE|0)==0){b7=1295;break L27}else{break L44}}}while(0);gH=c[8270]|0;do{if((gH|0)==0){nJ=0}else{if((aY(gH|0,139696)|0)==0){nJ=gH;break}bA(4,139696);nJ=c[8270]|0}}while(0);uu(nJ);c[8270]=0}else if((gD|0)==18){nK=gv+1|0;c[13898]=nK;gH=c[8272]|0;if((nK|0)>=(gH|0)){b7=5156;break L27}L1802:do{if((a[gw+(nK*40&-1)|0]&1)==0){nL=gw+(nK*40&-1)+32|0;nM=gw+(nK*40&-1)+36|0;b7=1308}else{gE=gw+(nK*40&-1)+36|0;gG=c[gE>>2]|0;gC=gw+(nK*40&-1)+32|0;gy=0;while(1){if((gy|0)>=(gG|0)){b7=1303;break}if((a[gB+((c[gC>>2]|0)+gy|0)|0]|0)==(a[gy+103664|0]|0)){gy=gy+1|0}else{nN=0;break}}if((b7|0)==1303){b7=0;if((gy|0)==1){b7=5157;break L27}else{nN=0}}while(1){if((nN|0)>=(gG|0)){break}if((a[gB+((c[gC>>2]|0)+nN|0)|0]|0)==(a[nN+148464|0]|0)){nN=nN+1|0}else{nL=gC;nM=gE;b7=1308;break L1802}}if((nN|0)==1){nO=nK}else{nL=gC;nM=gE;b7=1308}}}while(0);if((b7|0)==1308){b7=0;gG=gv+2|0;c[13898]=gG;gy=c[nM>>2]|0;nd=(gy|0)>49?49:gy;gy=c[nL>>2]|0;hG=0;while(1){hF=hG+1|0;a[hG+24544|0]=a[gB+gy|0]|0;if((hF|0)==(nd|0)){break}else{gy=gy+1|0;hG=hF}}a[nd+24544|0]=0;nO=gG}if((nO|0)>=(gH|0)){break}if((a[gw+(nO*40&-1)|0]&1)==0){break}hG=c[gw+(nO*40&-1)+36>>2]|0;gy=gw+(nO*40&-1)+32|0;hF=0;while(1){if((hF|0)>=(hG|0)){b7=1316;break}if((a[gB+((c[gy>>2]|0)+hF|0)|0]|0)==(a[hF+103664|0]|0)){hF=hF+1|0}else{nP=0;break}}if((b7|0)==1316){b7=0;if((hF|0)==1){break}else{nP=0}}while(1){if((nP|0)>=(hG|0)){break}if((a[gB+((c[gy>>2]|0)+nP|0)|0]|0)==(a[nP+148464|0]|0)){nP=nP+1|0}else{break L44}}if((nP|0)!=1){break}nQ=nO+1|0;c[13898]=nQ;if((nQ|0)>=(gH|0)){b7=5158;break L27}L1833:do{if((a[gw+(nQ*40&-1)|0]&1)==0){nR=gw+(nQ*40&-1)+32|0;nS=gw+(nQ*40&-1)+36|0}else{gy=gw+(nQ*40&-1)+36|0;hG=c[gy>>2]|0;hF=gw+(nQ*40&-1)+32|0;gG=0;while(1){if((gG|0)>=(hG|0)){break}if((a[gB+((c[hF>>2]|0)+gG|0)|0]|0)==(a[gG+103664|0]|0)){gG=gG+1|0}else{nR=hF;nS=gy;break L1833}}if((gG|0)==1){b7=5159;break L27}else{nR=hF;nS=gy}}}while(0);c[13898]=nO+2;gH=c[nS>>2]|0;hG=(gH|0)>49?49:gH;gH=c[nR>>2]|0;gE=0;while(1){gC=gE+1|0;a[gE+24595|0]=a[gB+gH|0]|0;if((gC|0)==(hG|0)){break}else{gH=gH+1|0;gE=gC}}a[hG+24595|0]=0}else if((gD|0)==19){nT=gv+1|0;c[13898]=nT;L1845:do{if((nT|0)<(c[8272]|0)){gE=(a[gw+(nT*40&-1)|0]&1)==0;gH=c[gw+(nT*40&-1)+36>>2]|0;gC=gw+(nT*40&-1)+32|0;L1847:do{if(!gE){nd=0;while(1){if((nd|0)>=(gH|0)){b7=1335;break}if((a[gB+((c[gC>>2]|0)+nd|0)|0]|0)==(a[nd+103664|0]|0)){nd=nd+1|0}else{nU=0;break}}if((b7|0)==1335){b7=0;if((nd|0)==1){b7=1336;break L1845}else{nU=0}}while(1){if((nU|0)>=(gH|0)){break}if((a[gB+((c[gC>>2]|0)+nU|0)|0]|0)==(a[nU+132080|0]|0)){nU=nU+1|0}else{break L1847}}if((nU|0)!=6){break}nd=bA(2,179864)|0;gA=(nd|0)==0;L1858:do{if(!gA){if((aQ(nd|0,131976)|0)==0){if((aQ(nd|0,131752)|0)!=0){b7=1343}}else{b7=1343}if((b7|0)==1343){b7=0;c[11252]=15}do{if((aQ(nd|0,200432)|0)==0){if((aQ(nd|0,131528)|0)!=0){break}if((aQ(nd|0,131448)|0)==0){break L1858}}}while(0);c[11252]=14}}while(0);c[13898]=(c[13898]|0)+1;a[cW]=a[25160]|0;a[cW+1|0]=a[25161|0]|0;a[cW+2|0]=a[25162|0]|0;c[by>>2]=3;c[bz>>2]=8;c[bB>>2]=cW;c[bC>>2]=48904;if(gA){break L1845}nd=cB(0)|0;if((nd|0)==0){break L44}if((aY(nd|0,171384)|0)==0){uB(48904,cW|0);break L44}gz=bi(nd|0,171384)|0;if((gz|0)==-1){uh(-1,131096,(v=i,i=i+8|0,c[v>>2]=nd,v)|0);break L44}if((aG(gz|0,bB|0,by|0,bC|0,bz|0)|0)==-1){uh(-1,130952,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}cz(gz|0);break L44}}while(0);gy=c[gC>>2]|0;hF=(gH|0)>0;gG=24408;gz=184456;L1882:while(1){L1884:do{if(!gE){if(hF){nd=0;hp=0;gx=gy;while(1){hC=a[gz+nd|0]|0;if(hC<<24>>24==(a[gB+(nd+gx|0)|0]|0)){nV=gx;nW=hp}else{if(hC<<24>>24!=36){break L1884}nV=gx-1|0;nW=1}nX=nd+1|0;if((nX|0)<(nW+gH|0)){nd=nX;hp=nW;gx=nV}else{break}}if((nW|0)==0){nY=nX}else{nZ=gG;break L1882}}else{nY=0}gx=a[gz+nY|0]|0;if((gx<<24>>24|0)==36|(gx<<24>>24|0)==0){nZ=gG;break L1882}}}while(0);gA=gG+8|0;gx=c[gA>>2]|0;if((gx|0)==0){nZ=gA;break}else{gG=gA;gz=gx}}gz=c[nZ+4>>2]|0;if((gz|0)==16){b7=1360;break L27}c[11252]=gz;c[13898]=gv+2;a[cW]=a[25160]|0;a[cW+1|0]=a[25161|0]|0;a[cW+2|0]=a[25162|0]|0;c[by>>2]=3;c[bz>>2]=8;c[bB>>2]=cW;c[bC>>2]=48904}else{b7=1336}}while(0);if((b7|0)==1336){b7=0;c[11252]=0;a[cW]=a[25160]|0;a[cW+1|0]=a[25161|0]|0;a[cW+2|0]=a[25162|0]|0;c[by>>2]=3;c[bz>>2]=8;c[bB>>2]=cW;c[bC>>2]=48904}hG=48904;c[hG>>2]=0;c[hG+4>>2]=0;hG=c[11252]|0;if((hG|0)==15){a[48904]=-62;a[48905]=-80;break}else if((hG|0)==12|(hG|0)==13){a[48904]=-100;break}else if((hG|0)==5|(hG|0)==6|(hG|0)==7){a[48904]=-8;break}else if((hG|0)==14|(hG|0)==8){break}else{a[48904]=-80;break}}else if((gD|0)==21){hG=gv+1|0;c[13898]=hG;gz=c[8272]|0;if((hG|0)<(gz|0)){n_=hG;n$=gz;n0=gw}else{break}while(1){gz=c[n0+(n_*40&-1)+36>>2]|0;hG=n0+(n_*40&-1)+32|0;if((a[n0+(n_*40&-1)|0]&1)==0){b7=5162;break L27}gG=c[10036]|0;gH=0;while(1){if((gH|0)>=(gz|0)){b7=1380;break}gy=c[hG>>2]|0;if((a[gG+(gy+gH|0)|0]|0)==(a[gH+103664|0]|0)){gH=gH+1|0}else{n1=gy;break}}if((b7|0)==1380){b7=0;if((gH|0)==1){break L44}n1=c[hG>>2]|0}L1917:do{if((gz|0)>0){gy=0;hF=0;gE=n1;while(1){if((a[gy+132904|0]|0)==(a[gG+(gy+gE|0)|0]|0)){n2=gE;n3=hF}else{if((gy|0)!=3){n4=0;n5=0;n6=n1;break}n2=gE-1|0;n3=1}gC=gy+1|0;if((gC|0)<(n3+gz|0)){gy=gC;hF=n3;gE=n2}else{b7=1387;break}}do{if((b7|0)==1387){b7=0;if((n3|0)==0){if(!((gy|0)==7|(gy|0)==2)){n4=0;n5=0;n6=n1;break}}n7=n_+1|0;c[13898]=n7;L1929:do{if((n7|0)<(n$|0)){L1931:do{if((a[n0+(n7*40&-1)|0]&1)!=0){gE=c[n0+(n7*40&-1)+36>>2]|0;hF=n0+(n7*40&-1)+32|0;gC=0;while(1){if((gC|0)>=(gE|0)){b7=1394;break}if((a[gG+((c[hF>>2]|0)+gC|0)|0]|0)==(a[gC+103664|0]|0)){gC=gC+1|0}else{n8=0;break}}if((b7|0)==1394){b7=0;if((gC|0)==1){break L1929}else{n8=0}}while(1){if((n8|0)>=(gE|0)){break}if((a[gG+((c[hF>>2]|0)+n8|0)|0]|0)==(a[n8+103664|0]|0)){n8=n8+1|0}else{break L1931}}if((n8|0)==1){b7=1403;break L27}}}while(0);a[14176]=1;is(bw);a[14176]=0;if((c[cX>>2]|0)!=3){b7=1402;break L27}hF=c[cY>>2]|0;c[10568]=hF;if((hF|0)==0){b7=1405;break L27}else{break L1917}}}while(0);hF=c[10568]|0;if((hF|0)!=0){uu(hF)}c[10568]=0;break L1917}}while(0);while(1){if((a[n4+132632|0]|0)==(a[gG+(n4+n6|0)|0]|0)){n9=n6;oa=n5}else{if((n4|0)!=3){ob=0;oc=0;od=n1;break}n9=n6-1|0;oa=1}gy=n4+1|0;if((gy|0)<(oa+gz|0)){n4=gy;n5=oa;n6=n9}else{b7=1411;break}}do{if((b7|0)==1411){b7=0;if((oa|0)==0){if(!((n4|0)==2|(n4|0)==14)){ob=0;oc=0;od=n1;break}}a[42568]=1;c[13898]=n_+1;break L1917}}while(0);while(1){if((a[ob+132544|0]|0)==(a[gG+(ob+od|0)|0]|0)){oe=od;of=oc}else{if((ob|0)!=5){b7=1423;break L1917}oe=od-1|0;of=1}gy=ob+1|0;if((gy|0)<(of+gz|0)){ob=gy;oc=of;od=oe}else{break}}if((of|0)==0){if(!((ob|0)==4|(ob|0)==16)){b7=1423;break}}a[42568]=0;c[13898]=n_+1}else{b7=1423}}while(0);L1969:do{if((b7|0)==1423){b7=0;if((n$|0)>(n_|0)){og=0}else{b7=5163;break L27}while(1){if((og|0)>=(gz|0)){b7=1426;break}if((a[gG+(og+n1|0)|0]|0)==(a[og+132432|0]|0)){og=og+1|0}else{oh=0;break}}do{if((b7|0)==1426){b7=0;if((og|0)!=5){oh=0;break}a[42560]=1;c[13898]=n_+1;break L1969}}while(0);while(1){if((oh|0)>=(gz|0)){break}if((a[gG+(oh+n1|0)|0]|0)==(a[oh+132304|0]|0)){oh=oh+1|0}else{b7=5164;break L27}}if((oh|0)!=7){b7=5165;break L27}a[42560]=0;c[13898]=n_+1}}while(0);gG=c[13898]|0;gz=c[8272]|0;if((gG|0)>=(gz|0)){break L44}n_=gG;n$=gz;n0=c[1054]|0}}else if((gD|0)==22){gz=gv+1|0;c[13898]=gz;gG=c[8272]|0;L1985:do{if((gz|0)<(gG|0)){hG=a[gw+(gz*40&-1)|0]|0;L1987:do{if((hG&1)==0){oi=0;oj=gz;ok=gG;ol=gw;om=hG}else{gH=c[gw+(gz*40&-1)+36>>2]|0;gy=gw+(gz*40&-1)+32|0;hF=0;while(1){if((hF|0)>=(gH|0)){break}if((a[gB+((c[gy>>2]|0)+hF|0)|0]|0)==(a[hF+103664|0]|0)){hF=hF+1|0}else{oi=0;oj=gz;ok=gG;ol=gw;om=hG;break L1987}}if((hF|0)==1){break L1985}else{oi=0;oj=gz;ok=gG;ol=gw;om=hG}}}while(0);L1993:while(1){hG=(om&1)==0;L1995:do{if(!hG){gy=c[ol+(oj*40&-1)+36>>2]|0;gH=ol+(oj*40&-1)+32|0;gE=c[10036]|0;gC=0;while(1){if((gC|0)>=(gy|0)){break}if((a[gE+((c[gH>>2]|0)+gC|0)|0]|0)==(a[gC+103664|0]|0)){gC=gC+1|0}else{break L1995}}if((gC|0)==1){on=oi;break L1993}}}while(0);if((oj|0)>=(ok|0)){b7=1453;break L27}L2003:do{if(!hG){hF=c[ol+(oj*40&-1)+36>>2]|0;gH=ol+(oj*40&-1)+32|0;gE=c[10036]|0;gy=0;while(1){if((gy|0)>=(hF|0)){break}if((a[gE+((c[gH>>2]|0)+gy|0)|0]|0)==(a[gy+103664|0]|0)){gy=gy+1|0}else{break L2003}}if((gy|0)==1){b7=1453;break L27}}}while(0);a[14176]=1;is(bu);a[14176]=0;if((c[cZ>>2]|0)!=3){b7=1452;break L27}hG=c[c_>>2]|0;c[bv>>2]=hG;if((hG|0)==0){b7=1462;break L27}if((oi|0)==0){oo=0}else{oo=uA(oi|0)|0}iQ(bv);hG=c[bv>>2]|0;gH=db(oi,(oo+2|0)+(uA(hG|0)|0)|0,140552)|0;if((oo|0)==0){uB(gH|0,hG|0)}else{gE=gH+oo|0;hF=gH+(oo+1|0)|0;uB(hF|0,hG|0);a[gE]=58}uu(hG);hG=c[13898]|0;gE=c[8272]|0;if((hG|0)>=(gE|0)){on=gH;break}hF=c[1054]|0;oi=gH;oj=hG;ok=gE;ol=hF;om=a[hF+(hG*40&-1)|0]|0}if((on|0)==0){break L44}ur(4,on);uu(on);break L44}}while(0);ur(32,0)}else if((gD|0)==23){jp()}else if((gD|0)==24){gG=gv+1|0;c[13898]=gG;gz=c[8272]|0;if((gG|0)<(gz|0)){hG=0;hF=gG;gG=gz;gz=gw;L2026:while(1){gE=(a[gz+(hF*40&-1)|0]&1)==0;gH=c[gz+(hF*40&-1)+36>>2]|0;gC=gz+(hF*40&-1)+32|0;L2028:do{if(gE){op=c[gC>>2]|0;b7=1704}else{hS=c[10036]|0;gx=0;while(1){if((gx|0)>=(gH|0)){b7=1473;break}gA=c[gC>>2]|0;if((a[hS+(gA+gx|0)|0]|0)==(a[gx+103664|0]|0)){gx=gx+1|0}else{oq=gA;break}}if((b7|0)==1473){b7=0;if((gx|0)==1){or=hG;break L2026}oq=c[gC>>2]|0}if((gH|0)>0){os=0;ot=0;ou=oq}else{op=oq;b7=1704;break}while(1){gA=os+2|0;if((a[gA+136104|0]|0)==(a[hS+(os+ou|0)|0]|0)){ov=ou;ow=ot}else{if((gA|0)!=3){ox=0;oy=0;oz=oq;break}ov=ou-1|0;ow=1}gA=os+1|0;if((gA|0)<(ow+gH|0)){os=gA;ot=ow;ou=ov}else{b7=1480;break}}do{if((b7|0)==1480){b7=0;if((ow|0)==0){if(!((os|0)==0|(os|0)==5)){ox=0;oy=0;oz=oq;break}}a[66412]=1;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){if((a[ox+136104|0]|0)==(a[hS+(ox+oz|0)|0]|0)){oC=oz;oD=oy}else{if((ox|0)!=3){oE=0;oF=0;oG=oq;break}oC=oz-1|0;oD=1}gx=ox+1|0;if((gx|0)<(oD+gH|0)){ox=gx;oy=oD;oz=oC}else{b7=1487;break}}do{if((b7|0)==1487){b7=0;if((oD|0)==0){if(!((ox|0)==2|(ox|0)==7)){oE=0;oF=0;oG=oq;break}}a[66412]=0;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){gx=oE+2|0;if((a[gx+135864|0]|0)==(a[hS+(oE+oG|0)|0]|0)){oH=oG;oI=oF}else{if((gx|0)!=3){oJ=0;oK=0;oL=oq;break}oH=oG-1|0;oI=1}gx=oE+1|0;if((gx|0)<(oI+gH|0)){oE=gx;oF=oI;oG=oH}else{b7=1496;break}}do{if((b7|0)==1496){b7=0;if((oI|0)==0){if(!((oE|0)==0|(oE|0)==5)){oJ=0;oK=0;oL=oq;break}}a[65724]=1;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){if((a[oJ+135864|0]|0)==(a[hS+(oJ+oL|0)|0]|0)){oM=oL;oN=oK}else{if((oJ|0)!=3){oO=0;oP=0;oQ=oq;break}oM=oL-1|0;oN=1}gx=oJ+1|0;if((gx|0)<(oN+gH|0)){oJ=gx;oK=oN;oL=oM}else{b7=1503;break}}do{if((b7|0)==1503){b7=0;if((oN|0)==0){if(!((oJ|0)==2|(oJ|0)==7)){oO=0;oP=0;oQ=oq;break}}a[65724]=0;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){gx=oO+2|0;if((a[gx+135680|0]|0)==(a[hS+(oO+oQ|0)|0]|0)){oR=oQ;oS=oP}else{if((gx|0)!=3){oT=0;oU=0;oV=oq;break}oR=oQ-1|0;oS=1}gx=oO+1|0;if((gx|0)<(oS+gH|0)){oO=gx;oP=oS;oQ=oR}else{b7=1510;break}}do{if((b7|0)==1510){b7=0;if((oS|0)==0){if(!((oO|0)==0|(oO|0)==5)){oT=0;oU=0;oV=oq;break}}a[65036]=1;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){if((a[oT+135680|0]|0)==(a[hS+(oT+oV|0)|0]|0)){oW=oV;oX=oU}else{if((oT|0)!=3){oY=0;oZ=0;o_=oq;break}oW=oV-1|0;oX=1}gx=oT+1|0;if((gx|0)<(oX+gH|0)){oT=gx;oU=oX;oV=oW}else{b7=1517;break}}do{if((b7|0)==1517){b7=0;if((oX|0)==0){if(!((oT|0)==2|(oT|0)==7)){oY=0;oZ=0;o_=oq;break}}a[65036]=0;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){gx=oY+2|0;if((a[gx+135568|0]|0)==(a[hS+(oY+o_|0)|0]|0)){o$=o_;o0=oZ}else{if((gx|0)!=4){o1=0;o2=0;o3=oq;break}o$=o_-1|0;o0=1}gx=oY+1|0;if((gx|0)<(o0+gH|0)){oY=gx;oZ=o0;o_=o$}else{b7=1524;break}}do{if((b7|0)==1524){b7=0;if((o0|0)==0){if(!((oY|0)==1|(oY|0)==6)){o1=0;o2=0;o3=oq;break}}a[69164]=1;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){if((a[o1+135568|0]|0)==(a[hS+(o1+o3|0)|0]|0)){o4=o3;o5=o2}else{if((o1|0)!=4){o6=0;o7=0;o8=oq;break}o4=o3-1|0;o5=1}gx=o1+1|0;if((gx|0)<(o5+gH|0)){o1=gx;o2=o5;o3=o4}else{b7=1531;break}}do{if((b7|0)==1531){b7=0;if((o5|0)==0){if(!((o1|0)==3|(o1|0)==8)){o6=0;o7=0;o8=oq;break}}a[69164]=0;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){gx=o6+2|0;if((a[gx+135376|0]|0)==(a[hS+(o6+o8|0)|0]|0)){o9=o8;pa=o7}else{if((gx|0)!=4){pb=0;pc=0;pd=oq;break}o9=o8-1|0;pa=1}gx=o6+1|0;if((gx|0)<(pa+gH|0)){o6=gx;o7=pa;o8=o9}else{b7=1538;break}}do{if((b7|0)==1538){b7=0;if((pa|0)==0){if(!((o6|0)==1|(o6|0)==6)){pb=0;pc=0;pd=oq;break}}a[68476]=1;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){if((a[pb+135376|0]|0)==(a[hS+(pb+pd|0)|0]|0)){pe=pd;pf=pc}else{if((pb|0)!=4){pg=0;ph=0;pi=oq;break}pe=pd-1|0;pf=1}gx=pb+1|0;if((gx|0)<(pf+gH|0)){pb=gx;pc=pf;pd=pe}else{b7=1545;break}}do{if((b7|0)==1545){b7=0;if((pf|0)==0){if(!((pb|0)==3|(pb|0)==8)){pg=0;ph=0;pi=oq;break}}a[68476]=0;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){gx=pg+2|0;if((a[gx+135216|0]|0)==(a[hS+(pg+pi|0)|0]|0)){pj=pi;pk=ph}else{if((gx|0)!=4){pl=0;pm=0;pn=oq;break}pj=pi-1|0;pk=1}gx=pg+1|0;if((gx|0)<(pk+gH|0)){pg=gx;ph=pk;pi=pj}else{b7=1552;break}}do{if((b7|0)==1552){b7=0;if((pk|0)==0){if(!((pg|0)==1|(pg|0)==6)){pl=0;pm=0;pn=oq;break}}a[66413]=1;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){if((a[pl+135216|0]|0)==(a[hS+(pl+pn|0)|0]|0)){po=pn;pp=pm}else{if((pl|0)!=4){pq=0;pr=0;ps=oq;break}po=pn-1|0;pp=1}gx=pl+1|0;if((gx|0)<(pp+gH|0)){pl=gx;pm=pp;pn=po}else{b7=1559;break}}do{if((b7|0)==1559){b7=0;if((pp|0)==0){if(!((pl|0)==3|(pl|0)==8)){pq=0;pr=0;ps=oq;break}}a[66413]=0;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){gx=pq+2|0;if((a[gx+135104|0]|0)==(a[hS+(pq+ps|0)|0]|0)){pt=ps;pu=pr}else{if((gx|0)!=4){pv=0;pw=0;px=oq;break}pt=ps-1|0;pu=1}gx=pq+1|0;if((gx|0)<(pu+gH|0)){pq=gx;pr=pu;ps=pt}else{b7=1566;break}}do{if((b7|0)==1566){b7=0;if((pu|0)==0){if(!((pq|0)==1|(pq|0)==6)){pv=0;pw=0;px=oq;break}}a[65725]=1;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){if((a[pv+135104|0]|0)==(a[hS+(pv+px|0)|0]|0)){py=px;pz=pw}else{if((pv|0)!=4){pA=0;pB=0;pC=oq;break}py=px-1|0;pz=1}gx=pv+1|0;if((gx|0)<(pz+gH|0)){pv=gx;pw=pz;px=py}else{b7=1573;break}}do{if((b7|0)==1573){b7=0;if((pz|0)==0){if(!((pv|0)==3|(pv|0)==8)){pA=0;pB=0;pC=oq;break}}a[65725]=0;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){gx=pA+2|0;if((a[gx+134880|0]|0)==(a[hS+(pA+pC|0)|0]|0)){pD=pC;pE=pB}else{if((gx|0)!=4){pF=0;pG=0;pH=oq;break}pD=pC-1|0;pE=1}gx=pA+1|0;if((gx|0)<(pE+gH|0)){pA=gx;pB=pE;pC=pD}else{b7=1580;break}}do{if((b7|0)==1580){b7=0;if((pE|0)==0){if(!((pA|0)==1|(pA|0)==6)){pF=0;pG=0;pH=oq;break}}a[65037]=1;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){if((a[pF+134880|0]|0)==(a[hS+(pF+pH|0)|0]|0)){pI=pH;pJ=pG}else{if((pF|0)!=4){pK=0;pL=0;pM=oq;break}pI=pH-1|0;pJ=1}gx=pF+1|0;if((gx|0)<(pJ+gH|0)){pF=gx;pG=pJ;pH=pI}else{b7=1587;break}}do{if((b7|0)==1587){b7=0;if((pJ|0)==0){if(!((pF|0)==3|(pF|0)==8)){pK=0;pL=0;pM=oq;break}}a[65037]=0;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){gx=pK+2|0;if((a[gx+134728|0]|0)==(a[hS+(pK+pM|0)|0]|0)){pN=pM;pO=pL}else{if((gx|0)!=5){pP=0;pQ=0;pR=oq;break}pN=pM-1|0;pO=1}gx=pK+1|0;if((gx|0)<(pO+gH|0)){pK=gx;pL=pO;pM=pN}else{b7=1594;break}}do{if((b7|0)==1594){b7=0;if((pO|0)==0){if(!((pK|0)==2|(pK|0)==7)){pP=0;pQ=0;pR=oq;break}}a[69165]=1;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){if((a[pP+134728|0]|0)==(a[hS+(pP+pR|0)|0]|0)){pS=pR;pT=pQ}else{if((pP|0)!=5){pU=0;pV=0;pW=oq;break}pS=pR-1|0;pT=1}gx=pP+1|0;if((gx|0)<(pT+gH|0)){pP=gx;pQ=pT;pR=pS}else{b7=1601;break}}do{if((b7|0)==1601){b7=0;if((pT|0)==0){if(!((pP|0)==4|(pP|0)==9)){pU=0;pV=0;pW=oq;break}}a[69165]=0;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){gx=pU+2|0;if((a[gx+134600|0]|0)==(a[hS+(pU+pW|0)|0]|0)){pX=pW;pY=pV}else{if((gx|0)!=5){pZ=0;p_=0;p$=oq;break}pX=pW-1|0;pY=1}gx=pU+1|0;if((gx|0)<(pY+gH|0)){pU=gx;pV=pY;pW=pX}else{b7=1608;break}}do{if((b7|0)==1608){b7=0;if((pY|0)==0){if(!((pU|0)==2|(pU|0)==7)){pZ=0;p_=0;p$=oq;break}}a[68477]=1;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){if((a[pZ+134600|0]|0)==(a[hS+(pZ+p$|0)|0]|0)){p0=p$;p1=p_}else{if((pZ|0)!=5){p2=0;p3=0;p4=oq;break}p0=p$-1|0;p1=1}gx=pZ+1|0;if((gx|0)<(p1+gH|0)){pZ=gx;p_=p1;p$=p0}else{b7=1615;break}}do{if((b7|0)==1615){b7=0;if((p1|0)==0){if(!((pZ|0)==4|(pZ|0)==9)){p2=0;p3=0;p4=oq;break}}a[68477]=0;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){gx=p2+2|0;if((a[gx+134488|0]|0)==(a[hS+(p2+p4|0)|0]|0)){p5=p4;p6=p3}else{if((gx|0)!=4){p7=0;p8=0;p9=oq;break}p5=p4-1|0;p6=1}gx=p2+1|0;if((gx|0)<(p6+gH|0)){p2=gx;p3=p6;p4=p5}else{b7=1622;break}}do{if((b7|0)==1622){b7=0;if((p6|0)==0){if(!((p2|0)==1|(p2|0)==6)){p7=0;p8=0;p9=oq;break}}a[67100]=1;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){if((a[p7+134488|0]|0)==(a[hS+(p7+p9|0)|0]|0)){qa=p9;qb=p8}else{if((p7|0)!=4){qc=0;qd=0;qe=oq;break}qa=p9-1|0;qb=1}gx=p7+1|0;if((gx|0)<(qb+gH|0)){p7=gx;p8=qb;p9=qa}else{b7=1629;break}}do{if((b7|0)==1629){b7=0;if((qb|0)==0){if(!((p7|0)==3|(p7|0)==8)){qc=0;qd=0;qe=oq;break}}a[67100]=0;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){gx=qc+2|0;if((a[gx+134320|0]|0)==(a[hS+(qc+qe|0)|0]|0)){qf=qe;qg=qd}else{if((gx|0)!=5){qh=0;qi=0;qj=oq;break}qf=qe-1|0;qg=1}gx=qc+1|0;if((gx|0)<(qg+gH|0)){qc=gx;qd=qg;qe=qf}else{b7=1636;break}}do{if((b7|0)==1636){b7=0;if((qg|0)==0){if(!((qc|0)==2|(qc|0)==7)){qh=0;qi=0;qj=oq;break}}a[67101]=1;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){if((a[qh+134320|0]|0)==(a[hS+(qh+qj|0)|0]|0)){qk=qj;ql=qi}else{if((qh|0)!=5){qm=0;qn=0;qo=oq;break}qk=qj-1|0;ql=1}gx=qh+1|0;if((gx|0)<(ql+gH|0)){qh=gx;qi=ql;qj=qk}else{b7=1643;break}}do{if((b7|0)==1643){b7=0;if((ql|0)==0){if(!((qh|0)==4|(qh|0)==9)){qm=0;qn=0;qo=oq;break}}a[67101]=0;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){gx=qm+2|0;if((a[gx+134136|0]|0)==(a[hS+(qm+qo|0)|0]|0)){qp=qo;qq=qn}else{if((gx|0)!=3){qr=0;qs=0;qt=oq;break}qp=qo-1|0;qq=1}gx=qm+1|0;if((gx|0)<(qq+gH|0)){qm=gx;qn=qq;qo=qp}else{b7=1650;break}}do{if((b7|0)==1650){b7=0;if((qq|0)==0){if(!((qm|0)==0|(qm|0)==5)){qr=0;qs=0;qt=oq;break}}a[69852]=1;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){if((a[qr+134136|0]|0)==(a[hS+(qr+qt|0)|0]|0)){qu=qt;qv=qs}else{if((qr|0)!=3){qw=0;qx=0;qy=oq;break}qu=qt-1|0;qv=1}gx=qr+1|0;if((gx|0)<(qv+gH|0)){qr=gx;qs=qv;qt=qu}else{b7=1657;break}}do{if((b7|0)==1657){b7=0;if((qv|0)==0){if(!((qr|0)==2|(qr|0)==7)){qw=0;qx=0;qy=oq;break}}a[69852]=0;gx=hF+1|0;c[13898]=gx;oA=1;oB=gx;break L2028}}while(0);while(1){if((a[qw+133984|0]|0)==(a[hS+(qw+qy|0)|0]|0)){qz=qy;qA=qx}else{if((qw|0)!=2){qB=0;qC=0;qD=oq;break}qz=qy-1|0;qA=1}gx=qw+1|0;if((gx|0)<(qA+gH|0)){qw=gx;qx=qA;qy=qz}else{b7=1664;break}}do{if((b7|0)==1664){b7=0;if((qA|0)==0){if((qw|0)==1|(qw|0)==5){qE=0}else{qB=0;qC=0;qD=oq;break}}else{qE=0}while(1){if(qE>>>0>=8){b7=1669;break}if((a[65036+(qE*688&-1)|0]&1)!=0){break}if((a[65037+(qE*688&-1)|0]&1)==0){qE=qE+1|0}else{break}}if((b7|0)==1669){b7=0;a[69852]=1}h[3815]=.5235987755982988;gy=hF+1|0;c[13898]=gy;L2341:do{if((a[gz+(gy*40&-1)|0]&1)!=0){gx=c[10810]|0;if((gx|0)==0){oA=hG;oB=gy;break L2028}gA=(gG|0)>(gy|0);hp=gz+(gy*40&-1)+36|0;nd=gz+(gy*40&-1)+32|0;hC=gx;L2344:while(1){hR=c[hC+4>>2]|0;L2346:do{if(gA){hB=c[hp>>2]|0;ne=0;while(1){if((ne|0)>=(hB|0)){break}if((a[hS+((c[nd>>2]|0)+ne|0)|0]|0)==(a[hR+ne|0]|0)){ne=ne+1|0}else{break L2346}}if((a[hR+ne|0]|0)==0){b7=1678;break L2344}}}while(0);hR=c[hC>>2]|0;if((hR|0)==0){qF=gx;break}else{hC=hR}}do{if((b7|0)==1678){b7=0;if((a[hC+8|0]&1)!=0){qF=gx;break}if((c[hC+16>>2]|0)==1){break L2341}else{qF=gx}}}while(0);L2356:while(1){gx=c[qF+4>>2]|0;L2358:do{if(gA){hC=c[hp>>2]|0;hR=0;while(1){if((hR|0)>=(hC|0)){break}if((a[hS+((c[nd>>2]|0)+hR|0)|0]|0)==(a[gx+hR|0]|0)){hR=hR+1|0}else{break L2358}}if((a[gx+hR|0]|0)==0){break L2356}}}while(0);gx=c[qF>>2]|0;if((gx|0)==0){oA=hG;oB=gy;break L2028}else{qF=gx}}if((a[qF+8|0]&1)!=0){oA=hG;oB=gy;break L2028}if((c[qF+16>>2]|0)!=2){oA=hG;oB=gy;break L2028}}}while(0);m3=+h[9040];gy=is(bt)|0;nd=c[gy>>2]|0;if((nd|0)==1){qG=+(c[gy+8>>2]|0)}else if((nd|0)==2){qG=+h[gy+8>>3]}else if((nd|0)==3){qG=+uz(c[gy+8>>2]|0,0)}else{b7=1693;break L27}if((c[c$>>2]|0)==3){uu(c[c0>>2]|0);c[c$>>2]=1}h[3815]=m3*qG;oA=hG;oB=c[13898]|0;break L2028}}while(0);while(1){if((a[qB+133840|0]|0)==(a[hS+(qB+qD|0)|0]|0)){qH=qD;qI=qC}else{if((qB|0)!=4){op=oq;b7=1704;break L2028}qH=qD-1|0;qI=1}gy=qB+1|0;if((gy|0)<(qI+gH|0)){qB=gy;qC=qI;qD=qH}else{break}}if((qI|0)==0){if(!((qB|0)==3|(qB|0)==7)){op=oq;b7=1704;break}}h[3815]=0.0;hS=hF+1|0;c[13898]=hS;oA=hG;oB=hS}}while(0);L2386:do{if((b7|0)==1704){b7=0;L2388:do{if((gG|0)>(hF|0)){if(gE){break}gC=c[10036]|0;hS=0;while(1){if((hS|0)>=(gH|0)){b7=1709;break}if((a[gC+(hS+op|0)|0]|0)==(a[hS+150704|0]|0)){hS=hS+1|0}else{qJ=0;break}}do{if((b7|0)==1709){b7=0;if((hS|0)!=4){qJ=0;break}c[10026]=0;gy=hF+1|0;c[13898]=gy;oA=hG;oB=gy;break L2386}}while(0);while(1){if((qJ|0)>=(gH|0)){break}if((a[gC+(qJ+op|0)|0]|0)==(a[qJ+150856|0]|0)){qJ=qJ+1|0}else{b7=1715;break L2388}}if((qJ|0)!=5){b7=1715;break}c[10026]=1;gC=hF+1|0;c[13898]=gC;oA=hG;oB=gC;break L2386}else{b7=1715}}while(0);L2402:do{if((b7|0)==1715){b7=0;if(!((gH|0)>0&(gE^1))){break}gC=c[10036]|0;hS=0;gy=0;nd=op;while(1){if((a[hS+133704|0]|0)==(a[gC+(hS+nd|0)|0]|0)){qK=nd;qL=gy}else{if((hS|0)!=6){break L2402}qK=nd-1|0;qL=1}hp=hS+1|0;if((hp|0)<(qL+gH|0)){hS=hp;gy=qL;nd=qK}else{break}}if((qL|0)==0){if(!((hS|0)==5|(hS|0)==12)){break}}c[10026]=-1;nd=hF+1|0;c[13898]=nd;oA=hG;oB=nd;break L2386}}while(0);hH(40048,1,0);nd=c[13898]|0;L2416:do{if((c[8272]|0)>(nd|0)){gy=c[1054]|0;if((a[gy+(nd*40&-1)|0]&1)==0){b7=1731;break}gC=c[gy+(nd*40&-1)+36>>2]|0;hp=gy+(nd*40&-1)+32|0;gy=c[10036]|0;gA=0;while(1){if((gA|0)>=(gC|0)){break}if((a[gy+((c[hp>>2]|0)+gA|0)|0]|0)==(a[gA+148464|0]|0)){gA=gA+1|0}else{b7=1731;break L2416}}if((gA|0)!=1){b7=1731;break}c[13898]=nd+1;hH(34776,1,0);qM=c[13898]|0}else{b7=1731}}while(0);do{if((b7|0)==1731){b7=0;if((hF|0)==(nd|0)){qM=hF;break}c[8694]=c[10012];c[8695]=c[10013];c[8696]=c[10014];c[8697]=c[10015];c[8698]=c[10016];c[8699]=c[10017];c[8700]=c[10018];c[8701]=c[10019];c[8702]=c[10020];c[8703]=c[10021];c[8704]=c[10022];c[8705]=c[10023];c[8706]=c[10024];c[8707]=c[10025];qM=nd}}while(0);if((hF|0)==(qM|0)){or=hG;break L2026}else{oA=hG;oB=qM}}}while(0);gH=c[8272]|0;if((oB|0)>=(gH|0)){or=oA;break}hG=oA;hF=oB;gG=gH;gz=c[1054]|0}if(or){break}else{qN=0}}else{qN=0}while(1){if(qN>>>0>=8){break}if((a[65036+(qN*688&-1)|0]&1)!=0){break L44}if((a[65037+(qN*688&-1)|0]&1)==0){qN=qN+1|0}else{break L44}}if((a[30528]&1)==0){a[66412]=1;a[65724]=1;break}else{a[69852]=1;break}}else if((gD|0)==25){c[13898]=gv+1;gr();a[38984]=1}else if((gD|0)==26){b7=1742;break L27}else if((gD|0)==27){c[13898]=gv+1;gz=is(bs)|0;gG=c[gz>>2]|0;if((gG|0)==1){qO=+(c[gz+8>>2]|0)}else if((gG|0)==2){qO=+h[gz+8>>3]}else if((gG|0)==3){qO=+uz(c[gz+8>>2]|0,0)}else{b7=1747;break L27}if((c[c1>>2]|0)==3){uu(c[c2>>2]|0);c[c1>>2]=1}gz=~~qO;gG=(gz|0)>-1?gz:-gz|0;qP=c[13898]|0;do{if((qP|0)<(c[8272]|0)){gz=c[1054]|0;if((a[gz+(qP*40&-1)|0]&1)==0){b7=5168;break L27}hF=c[gz+(qP*40&-1)+36>>2]|0;hG=gz+(qP*40&-1)+32|0;gz=c[10036]|0;gH=0;while(1){if((gH|0)>=(hF|0)){b7=1755;break}if((a[gz+((c[hG>>2]|0)+gH|0)|0]|0)==(a[gH+103664|0]|0)){gH=gH+1|0}else{qQ=0;break}}if((b7|0)==1755){b7=0;if((gH|0)==1){qR=gG;break}else{qQ=0}}while(1){if((qQ|0)>=(hF|0)){break}if((a[gz+((c[hG>>2]|0)+qQ|0)|0]|0)==(a[qQ+148464|0]|0)){qQ=qQ+1|0}else{b7=5169;break L27}}if((qQ|0)!=1){b7=5170;break L27}c[13898]=qP+1;hG=is(br)|0;gz=c[hG>>2]|0;if((gz|0)==1){qS=+(c[hG+8>>2]|0)}else if((gz|0)==2){qS=+h[hG+8>>3]}else if((gz|0)==3){qS=+uz(c[hG+8>>2]|0,0)}else{b7=1764;break L27}if((c[c3>>2]|0)==3){uu(c[c4>>2]|0);c[c3>>2]=1}hG=~~qS;qR=(hG|0)>-1?hG:-hG|0}else{qR=gG}}while(0);if((gG|0)<2|(qR|0)<2){b7=1769;break L27}hG=c[10814]|0;gz=c[10828]|0;c[10814]=0;c[10828]=0;iO(hG);iY(gz);c[9344]=gG;c[9342]=qR}else if((gD|0)==28){gz=gv+1|0;c[13898]=gz;a[36120]=1;hG=c[8272]|0;L2473:do{if((gz|0)<(hG|0)){hF=0;gH=0;gE=0;nd=0;qT=gz;hp=hG;gy=gw;while(1){gC=(a[gy+(qT*40&-1)|0]&1)==0;hS=c[gy+(qT*40&-1)+36>>2]|0;L2476:do{if(gC){qU=c[10036]|0;qV=gy+(qT*40&-1)+32|0}else{gx=gy+(qT*40&-1)+32|0;hC=c[10036]|0;ne=0;while(1){if((ne|0)>=(hS|0)){break}if((a[hC+((c[gx>>2]|0)+ne|0)|0]|0)==(a[ne+103664|0]|0)){ne=ne+1|0}else{qU=hC;qV=gx;break L2476}}if((ne|0)==1){qW=gE;qX=nd;break L2473}else{qU=hC;qV=gx}}}while(0);gA=c[qV>>2]|0;hB=(hS|0)>0;hw=23912;hK=184456;L2484:while(1){L2486:do{if(!gC){if(hB){ho=0;gF=0;nh=gA;while(1){ng=a[hK+ho|0]|0;if(ng<<24>>24==(a[qU+(ho+nh|0)|0]|0)){qY=nh;qZ=gF}else{if(ng<<24>>24!=36){break L2486}qY=nh-1|0;qZ=1}q_=ho+1|0;if((q_|0)<(qZ+hS|0)){ho=q_;gF=qZ;nh=qY}else{break}}if((qZ|0)==0){q$=q_}else{q0=hw;break L2484}}else{q$=0}nh=a[hK+q$|0]|0;if((nh<<24>>24|0)==36|(nh<<24>>24|0)==0){q0=hw;break L2484}}}while(0);gx=hw+8|0;hC=c[gx>>2]|0;if((hC|0)==0){q0=gx;break}else{hw=gx;hK=hC}}hK=c[q0+4>>2]|0;L2499:do{if((hK|0)==40){a[36120]=1;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==41){a[36120]=0;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==39){uu(c[9329]|0);uD(36120,26456,1240);q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==1){if(nd){uh(qT,137664,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[9044]=0;q1=1;q2=gE;q3=gH;q4=hF}else if((hK|0)==2){if(nd){uh(qT,137664,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[9044]=2;q1=1;q2=gE;q3=gH;q4=hF}else if((hK|0)==3){if(gE){uh(qT,137552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[9045]=0;q1=nd;q2=1;q3=gH;q4=hF}else if((hK|0)==4){if(gE){uh(qT,137552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[9045]=2;q1=nd;q2=1;q3=gH;q4=hF}else if((hK|0)==5){if(!nd){c[9044]=1}if(!gE){c[9045]=1}hw=nd|gE;q1=hw;q2=hw;q3=gH;q4=hF}else if((hK|0)==6){if(hF){uh(qT,137256,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[9047]=0;q1=nd;q2=gE;q3=gH;q4=1}else if((hK|0)==7){if(hF){uh(qT,137256,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[9047]=1;q1=nd;q2=gE;q3=gH;q4=1}else if((hK|0)==8){if(!gH){b7=1817;break}uh(qT,137376,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);b7=1817}else if((hK|0)==13){b7=1817}else if((hK|0)==9){if(!gH){b7=1824;break}uh(qT,137376,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);b7=1824}else if((hK|0)==14){b7=1824}else if((hK|0)==11){if(gH){uh(qT,137376,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[9031]=0;q1=nd;q2=gE;q3=1;q4=hF}else if((hK|0)==12){if(gH){uh(qT,137376,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[9031]=1;q1=nd;q2=gE;q3=1;q4=hF}else if((hK|0)==15){if(gH){uh(qT,137376,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[9031]=2;c[9032]=0;q1=nd;q2=gE;q3=1;q4=hF}else if((hK|0)==16){if(gH){uh(qT,137376,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[9031]=2;c[9032]=1;q1=nd;q2=gE;q3=1;q4=hF}else if((hK|0)==17){if(gH){uh(qT,137376,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[9031]=2;c[9032]=2;q1=nd;q2=gE;q3=1;q4=hF}else if((hK|0)==18){if(gH){uh(qT,137376,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[9031]=2;c[9032]=3;q1=nd;q2=gE;q3=1;q4=hF}else if((hK|0)==19){c[9046]=0;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==20){c[9046]=1;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==21){a[36229]=1;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==22){a[36229]=0;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==23){a[36230]=1;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==24){a[36230]=0;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==25){a[36231]=1;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==26){a[36231]=0;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==27){hw=qT+1|0;c[13898]=hw;c[9059]=-2;L2571:do{if((hw|0)<(hp|0)){L2573:do{if((a[gy+(hw*40&-1)|0]&1)!=0){hS=c[gy+(hw*40&-1)+36>>2]|0;gA=gy+(hw*40&-1)+32|0;hB=0;while(1){if((hB|0)>=(hS|0)){break}if((a[qU+((c[gA>>2]|0)+hB|0)|0]|0)==(a[hB+103664|0]|0)){hB=hB+1|0}else{break L2573}}if((hB|0)==1){q5=hw;break L2571}}}while(0);hH(36232,1,0);gA=c[13898]|0;if((hw|0)!=(gA|0)){q5=gA;break}if((a[(c[1054]|0)+(hw*40&-1)|0]&1)!=0){q5=hw;break}gA=is(bp)|0;hS=c[gA>>2]|0;if((hS|0)==1){q6=+(c[gA+8>>2]|0)}else if((hS|0)==2){q6=+h[gA+8>>3]}else if((hS|0)==3){q6=+uz(c[gA+8>>2]|0,0)}else{b7=1867;break L27}if((c[c6>>2]|0)==3){uu(c[c7>>2]|0);c[c6>>2]=1}c[9059]=~~q6-1;gA=(c[13898]|0)+1|0;c[13898]=gA;q5=gA}else{q5=hw}}while(0);c[13898]=q5-1;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==28){c[9059]=-3;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==29){c[13898]=qT+1;hw=is(bo)|0;gA=c[hw>>2]|0;if((gA|0)==1){q7=+(c[hw+8>>2]|0)}else if((gA|0)==2){q7=+h[hw+8>>3]}else if((gA|0)==3){q7=+uz(c[hw+8>>2]|0,0)}else{b7=1877;break L27}if((c[c8>>2]|0)==3){uu(c[c9>>2]|0);c[c8>>2]=1}h[4524]=q7;c[13898]=(c[13898]|0)-1;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==30){c[13898]=qT+1;hw=is(bn)|0;gA=c[hw>>2]|0;if((gA|0)==1){q8=+(c[hw+8>>2]|0)}else if((gA|0)==2){q8=+h[hw+8>>3]}else if((gA|0)==3){q8=+uz(c[hw+8>>2]|0,0)}else{b7=1885;break L27}if((c[da>>2]|0)==3){uu(c[dc>>2]|0);c[da>>2]=1}h[4525]=q8<0.0?0.0:q8;c[13898]=(c[13898]|0)-1;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==31){c[13898]=qT+1;hw=is(bm)|0;gA=c[hw>>2]|0;if((gA|0)==1){q9=+(c[hw+8>>2]|0)}else if((gA|0)==2){q9=+h[hw+8>>3]}else if((gA|0)==3){q9=+uz(c[hw+8>>2]|0,0)}else{b7=1893;break L27}if((c[dd>>2]|0)==3){uu(c[de>>2]|0);c[dd>>2]=1}h[4526]=q9;c[13898]=(c[13898]|0)-1;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==32){c[13898]=qT+1;hw=is(bl)|0;gA=c[hw>>2]|0;if((gA|0)==1){ra=+(c[hw+8>>2]|0)}else if((gA|0)==2){ra=+h[hw+8>>3]}else if((gA|0)==3){ra=+uz(c[hw+8>>2]|0,0)}else{b7=1901;break L27}if((c[df>>2]|0)==3){uu(c[dg>>2]|0);c[df>>2]=1}h[4527]=ra;c[13898]=(c[13898]|0)-1;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==37){hw=qT+1|0;c[13898]=hw;gA=c[gy+(hw*40&-1)+36>>2]|0;L2629:do{if((a[gy+(hw*40&-1)|0]&1)!=0&(gA|0)>0){hS=0;gC=0;hC=c[gy+(hw*40&-1)+32>>2]|0;while(1){if((a[hS+137208|0]|0)==(a[qU+(hS+hC|0)|0]|0)){rb=hC;rc=gC}else{if((hS|0)!=3){break L2629}rb=hC-1|0;rc=1}gx=hS+1|0;if((gx|0)<(rc+gA|0)){hS=gx;gC=rc;hC=rb}else{break}}if((rc|0)==0){if(!((hS|0)==2|(hS|0)==12)){break}}c[9056]=2;q1=nd;q2=gE;q3=gH;q4=hF;break L2499}}while(0);c[9056]=1;c[13898]=qT;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==38){c[9056]=0;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==33){gA=qT+1|0;c[13898]=gA;L2644:do{if((gA|0)<(hp|0)){L2646:do{if((a[gy+(gA*40&-1)|0]&1)!=0){hw=c[gy+(gA*40&-1)+36>>2]|0;hC=gy+(gA*40&-1)+32|0;gC=0;while(1){if((gC|0)>=(hw|0)){break}if((a[qU+((c[hC>>2]|0)+gC|0)|0]|0)==(a[gC+103664|0]|0)){gC=gC+1|0}else{break L2646}}if((gC|0)==1){b7=1926;break L2644}}}while(0);a[14176]=1;is(bk);a[14176]=0;if((c[dh>>2]|0)!=3){c[13898]=gA;b7=1926;break}hS=c[di>>2]|0;if((hS|0)==0){b7=1926;break}uF(36288,hS|0,1025);uu(hS)}else{b7=1926}}while(0);if((b7|0)==1926){b7=0;a[36288]=0}c[13898]=(c[13898]|0)-1;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==34){a[36288]=0;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==35){rd=qT+1|0;c[13898]=rd;gA=(a[gy+(rd*40&-1)|0]&1)==0;if(gA){b7=1931}else{hS=a[qU+(c[gy+(rd*40&-1)+32>>2]|0)|0]|0;if(!((hS<<24>>24|0)==39|(hS<<24>>24|0)==34)){b7=1931}}if((b7|0)==1931){b7=0;hS=c[10810]|0;if((hS|0)==0){b7=5171;break L27}hC=gy+(rd*40&-1)+36|0;hw=gy+(rd*40&-1)+32|0;hB=(hp|0)<=(rd|0)|gA;gA=hS;L2667:while(1){hS=c[gA+4>>2]|0;L2669:do{if(!hB){gx=c[hC>>2]|0;ne=0;while(1){if((ne|0)>=(gx|0)){break}if((a[qU+((c[hw>>2]|0)+ne|0)|0]|0)==(a[hS+ne|0]|0)){ne=ne+1|0}else{break L2669}}if((a[hS+ne|0]|0)==0){break L2667}}}while(0);hS=c[gA>>2]|0;if((hS|0)==0){b7=5173;break L27}else{gA=hS}}if((a[gA+8|0]&1)!=0){b7=5172;break L27}if((c[gA+16>>2]|0)!=3){b7=5174;break L27}}uu(c[9329]|0);hw=c[13898]|0;L2679:do{if((hw|0)<(c[8272]|0)){hC=c[1054]|0;L2681:do{if((a[hC+(hw*40&-1)|0]&1)!=0){hB=c[hC+(hw*40&-1)+36>>2]|0;hS=hC+(hw*40&-1)+32|0;gx=c[10036]|0;gC=0;while(1){if((gC|0)>=(hB|0)){break}if((a[gx+((c[hS>>2]|0)+gC|0)|0]|0)==(a[gC+103664|0]|0)){gC=gC+1|0}else{break L2681}}if((gC|0)==1){re=0;rf=hw;break L2679}}}while(0);a[14176]=1;is(bj);a[14176]=0;if((c[dj>>2]|0)==3){re=c[dk>>2]|0;rf=c[13898]|0;break}else{c[13898]=hw;re=0;rf=hw;break}}else{re=0;rf=hw}}while(0);c[9329]=re;c[13898]=rf-1;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==36){uE(c5|0,0,16);hI(bq,7);do{if((c[dm>>2]|0)==3){if(+h[dn>>3]!=-1.0){break}c[dm>>2]=7}}while(0);c[9330]=c[c5>>2];c[37324>>2]=c[c5+4>>2];c[37328>>2]=c[c5+8>>2];c[37332>>2]=c[c5+12>>2];c[13898]=(c[13898]|0)-1;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==42){hw=qT+1|0;c[13898]=hw;L2698:do{if((hw|0)<(hp|0)){L2700:do{if((a[gy+(hw*40&-1)|0]&1)!=0){gA=c[gy+(hw*40&-1)+36>>2]|0;hC=gy+(hw*40&-1)+32|0;hS=0;while(1){if((hS|0)>=(gA|0)){b7=1961;break}if((a[qU+((c[hC>>2]|0)+hS|0)|0]|0)==(a[hS+103664|0]|0)){hS=hS+1|0}else{break}}if((b7|0)==1961){b7=0;if((hS|0)==1){rg=0;rh=hw;break L2698}}if((gA|0)<=0){break}gC=0;gx=0;hB=c[hC>>2]|0;while(1){if((a[gC+137072|0]|0)==(a[qU+(gC+hB|0)|0]|0)){ri=hB;rj=gx}else{if((gC|0)!=1){break L2700}ri=hB-1|0;rj=1}ne=gC+1|0;if((ne|0)<(rj+gA|0)){gC=ne;gx=rj;hB=ri}else{break}}if((rj|0)!=0){rg=0;rh=hw;break L2698}if((gC|0)==0|(gC|0)==9){rg=0;rh=hw;break L2698}}}while(0);hB=is(bh)|0;gx=c[hB>>2]|0;if((gx|0)==1){rk=+(c[hB+8>>2]|0)}else if((gx|0)==2){rk=+h[hB+8>>3]}else if((gx|0)==3){rk=+uz(c[hB+8>>2]|0,0)}else{b7=1974;break L27}if((c[dp>>2]|0)==3){uu(c[dq>>2]|0);c[dp>>2]=1}rg=~~rk;rh=c[13898]|0}else{rg=0;rh=hw}}while(0);c[9338]=(rg|0)<0?0:rg;c[13898]=rh-1;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==43){hw=qT+1|0;c[13898]=hw;L2728:do{if((hw|0)<(hp|0)){L2730:do{if((a[gy+(hw*40&-1)|0]&1)!=0){hB=c[gy+(hw*40&-1)+36>>2]|0;gx=gy+(hw*40&-1)+32|0;gA=0;while(1){if((gA|0)>=(hB|0)){b7=1984;break}if((a[qU+((c[gx>>2]|0)+gA|0)|0]|0)==(a[gA+103664|0]|0)){gA=gA+1|0}else{break}}if((b7|0)==1984){b7=0;if((gA|0)==1){rl=0;rm=hw;break L2728}}if((hB|0)<=0){break}gC=0;hC=0;hS=c[gx>>2]|0;while(1){if((a[gC+137072|0]|0)==(a[qU+(gC+hS|0)|0]|0)){rn=hS;ro=hC}else{if((gC|0)!=1){break L2730}rn=hS-1|0;ro=1}ne=gC+1|0;if((ne|0)<(ro+hB|0)){gC=ne;hC=ro;hS=rn}else{break}}if((ro|0)!=0){rl=0;rm=hw;break L2728}if((gC|0)==0|(gC|0)==9){rl=0;rm=hw;break L2728}}}while(0);hS=is(bg)|0;hC=c[hS>>2]|0;if((hC|0)==1){rp=+(c[hS+8>>2]|0)}else if((hC|0)==2){rp=+h[hS+8>>3]}else if((hC|0)==3){rp=+uz(c[hS+8>>2]|0,0)}else{b7=1997;break L27}if((c[dr>>2]|0)==3){uu(c[ds>>2]|0);c[dr>>2]=1}rl=~~rp;rm=c[13898]|0}else{rl=0;rm=hw}}while(0);c[9339]=(rl|0)<0?0:rl;c[13898]=rm-1;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==44){a[36228]=1;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==45){a[36228]=0;q1=nd;q2=gE;q3=gH;q4=hF}else if((hK|0)==10){hw=qT+1|0;c[13898]=hw;if(gH){uh(hw,137376,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}dl(36136,0);c[9031]=3;c[13898]=(c[13898]|0)-1;q1=nd;q2=gE;q3=1;q4=hF}else{b7=2007;break L27}}while(0);if((b7|0)==1817){b7=0;if(!gE){c[9045]=1}if(!hF){c[9047]=1}c[9031]=2;c[9032]=0;q1=nd;q2=gE;q3=1;q4=hF}else if((b7|0)==1824){b7=0;if(!gE){c[9045]=1}if(!hF){c[9047]=1}c[9031]=2;c[9032]=1;q1=nd;q2=gE;q3=1;q4=hF}hK=(c[13898]|0)+1|0;c[13898]=hK;hw=c[8272]|0;if((hK|0)>=(hw|0)){qW=q2;qX=q1;break L2473}hF=q4;gH=q3;gE=q2;nd=q1;qT=hK;hp=hw;gy=c[1054]|0}}else{qW=0;qX=0}}while(0);hG=c[9031]|0;if((hG|0)==2){gz=c[9032]|0;if(qX&gz>>>0<2){uh(-1,136464,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);break}if(!qW){break}if((gz-2|0)>>>0>=2){break}uh(-1,136272,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);break}else if((hG|0)!=1){break}if((c[9047]|0)==0){hG=c[9045]|0;if((hG|0)==0){c[9032]=2;break}else if((hG|0)==1){if((c[9044]|0)==0){c[9032]=0;break}else{c[9032]=1;break}}else if((hG|0)==2){c[9032]=3;break}else{break}}else{hG=c[9044]|0;if((hG|0)==0){c[9032]=0;break}else if((hG|0)==1){if((c[9045]|0)==0){c[9032]=2;break}else{c[9032]=3;break}}else if((hG|0)==2){c[9032]=1;break}else{break}}}else if((gD|0)==29){hG=gv+1|0;c[13898]=hG;L2807:do{if((hG|0)<(c[8272]|0)){L2809:do{if((a[gw+(hG*40&-1)|0]&1)!=0){gz=c[gw+(hG*40&-1)+36>>2]|0;gG=gw+(hG*40&-1)+32|0;gy=0;while(1){if((gy|0)>=(gz|0)){b7=2034;break}if((a[gB+((c[gG>>2]|0)+gy|0)|0]|0)==(a[gy+103664|0]|0)){gy=gy+1|0}else{rq=0;break}}if((b7|0)==2034){b7=0;if((gy|0)==1){break L2807}else{rq=0}}while(1){if((rq|0)>=(gz|0)){break}if((a[gB+((c[gG>>2]|0)+rq|0)|0]|0)==(a[rq+103664|0]|0)){rq=rq+1|0}else{break L2809}}if((rq|0)==1){break L44}}}while(0);a[14176]=1;is(bf);a[14176]=0;if((c[dt>>2]|0)!=3){c[13898]=hG;break L44}gG=c[du>>2]|0;if((gG|0)==0){break L44}uF(36288,gG|0,1025);uu(gG);break L44}}while(0);a[36288]=0}else if((gD|0)==31){jr(43280)}else if((gD|0)==32){hG=gv+1|0;L2828:do{if((c[8272]|0)>(hG|0)){if((a[gw+(hG*40&-1)|0]&1)==0){break}gG=c[gw+(hG*40&-1)+36>>2]|0;gz=gw+(hG*40&-1)+32|0;gy=0;while(1){if((gy|0)>=(gG|0)){break}if((a[gB+((c[gz>>2]|0)+gy|0)|0]|0)==(a[gy+166752|0]|0)){gy=gy+1|0}else{break L2828}}if((gy|0)!=5){break}c[13898]=gv+2;gz=is(bd)|0;gG=c[gz>>2]|0;if((gG|0)==1){rr=+(c[gz+8>>2]|0)}else if((gG|0)==2){rr=+h[gz+8>>3]}else if((gG|0)==3){rr=+uz(c[gz+8>>2]|0,0)}else{b7=2054;break L27}if((c[dv>>2]|0)==3){uu(c[dw>>2]|0);c[dv>>2]=1}c[8798]=~~rr;break L44}}while(0);jr(43264)}else if((gD|0)==30){hG=gv+1|0;c[13898]=hG;L2846:do{if((hG|0)<(c[8272]|0)){gz=(a[gw+(hG*40&-1)|0]&1)==0;if(!gz){gG=c[gw+(hG*40&-1)+36>>2]|0;hp=gw+(hG*40&-1)+32|0;nd=0;while(1){if((nd|0)>=(gG|0)){b7=2064;break}if((a[gB+((c[hp>>2]|0)+nd|0)|0]|0)==(a[nd+103664|0]|0)){nd=nd+1|0}else{break}}if((b7|0)==2064){b7=0;if((nd|0)==1){b7=2154;break}}gG=a[gB+(c[hp>>2]|0)|0]|0;if((gG<<24>>24|0)==39|(gG<<24>>24|0)==34){b7=2154;break}}gG=c[10810]|0;L2857:do{if((gG|0)!=0){gy=gw+(hG*40&-1)+36|0;gE=gw+(hG*40&-1)+32|0;gH=gG;L2859:while(1){hF=c[gH+4>>2]|0;L2861:do{if(!gz){hw=c[gy>>2]|0;hK=0;while(1){if((hK|0)>=(hw|0)){break}if((a[gB+((c[gE>>2]|0)+hK|0)|0]|0)==(a[hF+hK|0]|0)){hK=hK+1|0}else{break L2861}}if((a[hF+hK|0]|0)==0){break L2859}}}while(0);hF=c[gH>>2]|0;if((hF|0)==0){break L2857}else{gH=hF}}if((a[gH+8|0]&1)!=0){break}if((c[gH+16>>2]|0)==3){b7=2154;break L2846}}}while(0);L2871:do{if(!gz){gG=c[gw+(hG*40&-1)+36>>2]|0;hp=gw+(hG*40&-1)+32|0;nd=0;while(1){if((nd|0)>=(gG|0)){b7=2080;break}if((a[gB+((c[hp>>2]|0)+nd|0)|0]|0)==(a[nd+95280|0]|0)){nd=nd+1|0}else{rs=0;break}}if((b7|0)==2080){b7=0;if((nd|0)==2){b7=2154;break L2846}else{rs=0}}while(1){if((rs|0)>=(gG|0)){b7=2083;break}if((a[gB+((c[hp>>2]|0)+rs|0)|0]|0)==(a[rs+130008|0]|0)){rs=rs+1|0}else{rt=0;break}}if((b7|0)==2083){b7=0;if((rs|0)==4){b7=2154;break L2846}else{rt=0}}while(1){if((rt|0)>=(gG|0)){b7=2086;break}if((a[gB+((c[hp>>2]|0)+rt|0)|0]|0)==(a[rt+89896|0]|0)){rt=rt+1|0}else{ru=0;break}}if((b7|0)==2086){b7=0;if((rt|0)==6){b7=2154;break L2846}else{ru=0}}while(1){if((ru|0)>=(gG|0)){b7=2089;break}if((a[gB+((c[hp>>2]|0)+ru|0)|0]|0)==(a[ru+139840|0]|0)){ru=ru+1|0}else{rv=0;break}}if((b7|0)==2089){b7=0;if((ru|0)==6){b7=2154;break L2846}else{rv=0}}while(1){if((rv|0)>=(gG|0)){b7=2092;break}if((a[gB+((c[hp>>2]|0)+rv|0)|0]|0)==(a[rv+129888|0]|0)){rv=rv+1|0}else{rw=0;break}}if((b7|0)==2092){b7=0;if((rv|0)==5){b7=2154;break L2846}else{rw=0}}while(1){if((rw|0)>=(gG|0)){b7=2095;break}if((a[gB+((c[hp>>2]|0)+rw|0)|0]|0)==(a[rw+150856|0]|0)){rw=rw+1|0}else{rx=0;break}}if((b7|0)==2095){b7=0;if((rw|0)==5){b7=2154;break L2846}else{rx=0}}while(1){if((rx|0)>=(gG|0)){b7=2098;break}if((a[gB+((c[hp>>2]|0)+rx|0)|0]|0)==(a[rx+150704|0]|0)){rx=rx+1|0}else{break}}if((b7|0)==2098){b7=0;if((rx|0)==4){b7=2154;break L2846}}nd=c[hp>>2]|0;gH=(gG|0)>0;L2909:do{if(gH){gE=0;gy=0;hF=nd;while(1){if((a[gE+90456|0]|0)==(a[gB+(gE+hF|0)|0]|0)){ry=hF;rz=gy}else{if((gE|0)!=3){rA=0;rB=0;rC=nd;break}ry=hF-1|0;rz=1}hw=gE+1|0;if((hw|0)<(rz+gG|0)){gE=hw;gy=rz;hF=ry}else{b7=2104;break}}if((b7|0)==2104){b7=0;if((rz|0)!=0){b7=2154;break L2846}if((gE|0)==2|(gE|0)==6){b7=2154;break L2846}else{rA=0;rB=0;rC=nd}}while(1){if((a[rA+149328|0]|0)==(a[gB+(rA+rC|0)|0]|0)){rD=rC;rE=rB}else{if((rA|0)!=5){rF=0;break L2909}rD=rC-1|0;rE=1}hF=rA+1|0;if((hF|0)<(rE+gG|0)){rA=hF;rB=rE;rC=rD}else{break}}if((rE|0)!=0){b7=2154;break L2846}if((rA|0)==4|(rA|0)==8){b7=2154;break L2846}else{rF=0}}else{rF=0}}while(0);while(1){if((rF|0)>=(gG|0)){b7=2114;break}if((a[gB+(rF+nd|0)|0]|0)==(a[rF+225056|0]|0)){rF=rF+1|0}else{break}}if((b7|0)==2114){b7=0;if((rF|0)==2){b7=2154;break L2846}}L2933:do{if(gH){hp=0;gE=0;hF=nd;while(1){if((a[hp+139232|0]|0)==(a[gB+(hp+hF|0)|0]|0)){rG=hF;rH=gE}else{if((hp|0)!=5){rI=0;break L2933}rG=hF-1|0;rH=1}gy=hp+1|0;if((gy|0)<(rH+gG|0)){hp=gy;gE=rH;hF=rG}else{break}}if((rH|0)!=0){b7=2154;break L2846}if((hp|0)==4|(hp|0)==8){b7=2154;break L2846}else{rI=0}}else{rI=0}}while(0);while(1){if((rI|0)>=(gG|0)){b7=2124;break}if((a[gB+(rI+nd|0)|0]|0)==(a[rI+205624|0]|0)){rI=rI+1|0}else{break}}if((b7|0)==2124){b7=0;if((rI|0)==2){b7=2154;break L2846}}L2948:do{if(gH){hF=0;gE=0;gy=nd;while(1){if((a[hF+139064|0]|0)==(a[gB+(hF+gy|0)|0]|0)){rJ=gy;rK=gE}else{if((hF|0)!=6){rL=0;break L2948}rJ=gy-1|0;rK=1}hw=hF+1|0;if((hw|0)<(rK+gG|0)){hF=hw;gE=rK;gy=rJ}else{break}}if((rK|0)!=0){b7=2154;break L2846}if((hF|0)==5|(hF|0)==9){b7=2154;break L2846}else{rL=0}}else{rL=0}}while(0);while(1){if((rL|0)>=(gG|0)){b7=2134;break}if((a[gB+(rL+nd|0)|0]|0)==(a[rL+143040|0]|0)){rL=rL+1|0}else{break}}if((b7|0)==2134){b7=0;if((rL|0)==2){b7=2154;break L2846}}L2963:do{if(gH){gy=0;gE=0;hp=nd;while(1){if((a[gy+142856|0]|0)==(a[gB+(gy+hp|0)|0]|0)){rM=hp;rN=gE}else{if((gy|0)!=4){rO=0;break L2963}rM=hp-1|0;rN=1}hw=gy+1|0;if((hw|0)<(rN+gG|0)){gy=hw;gE=rN;hp=rM}else{break}}if((rN|0)!=0){b7=2154;break L2846}if((gy|0)==3|(gy|0)==9){b7=2154;break L2846}else{rO=0}}else{rO=0}}while(0);while(1){if((rO|0)>=(gG|0)){break}if((a[gB+(rO+nd|0)|0]|0)==(a[rO+124352|0]|0)){rO=rO+1|0}else{break L2871}}if((rO|0)==4){b7=2154;break L2846}}}while(0);is(bb);gz=c[dy>>2]|0;if((gz|0)==3){c[13898]=hG;nd=c[10822]|0;L2979:do{if((nd|0)==0){rP=1}else{gG=1;gH=nd;while(1){if((c[gH+4>>2]|0)!=(gG|0)){rP=gG;break L2979}hp=gG+1|0;gE=c[gH>>2]|0;if((gE|0)==0){rP=hp;break}else{gG=hp;gH=gE}}}}while(0);uu(c[dA>>2]|0);c[dy>>2]=1;rQ=rP;b7=2157;break}else if((gz|0)==1){rR=+(c[dB>>2]|0)}else if((gz|0)==2){rR=+h[dz>>3]}else{b7=2152;break L27}rQ=~~rR;b7=2157}else{b7=2154}}while(0);L2987:do{if((b7|0)==2154){b7=0;hG=c[10822]|0;if((hG|0)==0){rS=1;rT=0;rU=0;b7=2163;break}else{rV=1;rW=hG}while(1){if((c[rW+4>>2]|0)!=(rV|0)){rQ=rV;b7=2157;break L2987}hG=rV+1|0;nd=c[rW>>2]|0;if((nd|0)==0){rQ=hG;b7=2157;break}else{rV=hG;rW=nd}}}}while(0);L2992:do{if((b7|0)==2157){b7=0;if((rQ|0)<1){b7=2158;break L27}gz=c[10822]|0;if((gz|0)==0){rS=rQ;rT=0;rU=0;b7=2163;break}else{rX=0;rY=gz}while(1){rZ=c[rY+4>>2]|0;if((rQ|0)<=(rZ|0)){break}gz=c[rY>>2]|0;if((gz|0)==0){rS=rQ;rT=rY;rU=0;b7=2163;break L2992}else{rX=rY;rY=gz}}if((rQ|0)==(rZ|0)){r_=rY}else{rS=rQ;rT=rX;rU=rY;b7=2163}}}while(0);if((b7|0)==2163){b7=0;uE(dx|0,0,28);gz=ut(192)|0;if((gz|0)==0){gk();nd=ut(192)|0;if((nd|0)==0){b7=2165;break L27}else{r$=nd}}else{r$=gz}gz=r$;nd=r$;c[nd>>2]=0;c[r$+4>>2]=rS;c[r$+72>>2]=0;c[r$+88>>2]=0;uE(r$+8|0,0,60);c[r$+96>>2]=1;hG=r$+156|0;a[r$+184|0]=0;c[r$+144>>2]=4;c[r$+148>>2]=4;c[r$+152>>2]=4;c[hG>>2]=c[dx>>2];c[hG+4>>2]=c[dx+4>>2];c[hG+8>>2]=c[dx+8>>2];c[hG+12>>2]=c[dx+12>>2];c[hG+16>>2]=c[dx+16>>2];c[hG+20>>2]=c[dx+20>>2];c[hG+24>>2]=c[dx+24>>2];if((rT|0)==0){c[10822]=gz}else{c[rT>>2]=gz}c[nd>>2]=rU;r_=gz}gz=c[13898]|0;L3009:do{if((gz|0)<(c[8272]|0)){nd=c[1054]|0;L3011:do{if((a[nd+(gz*40&-1)|0]&1)!=0){hG=c[nd+(gz*40&-1)+36>>2]|0;gH=nd+(gz*40&-1)+32|0;gG=c[10036]|0;gE=0;while(1){if((gE|0)>=(hG|0)){break}if((a[gG+((c[gH>>2]|0)+gE|0)|0]|0)==(a[gE+103664|0]|0)){gE=gE+1|0}else{break L3011}}if((gE|0)==1){break L3009}}}while(0);jw(r_);nd=c[13898]|0;L3018:do{if((nd|0)<(c[8272]|0)){gH=c[1054]|0;L3020:do{if((a[gH+(nd*40&-1)|0]&1)!=0){gG=c[gH+(nd*40&-1)+36>>2]|0;hG=gH+(nd*40&-1)+32|0;hp=c[10036]|0;hF=0;while(1){if((hF|0)>=(gG|0)){break}if((a[hp+((c[hG>>2]|0)+hF|0)|0]|0)==(a[hF+103664|0]|0)){hF=hF+1|0}else{break L3020}}if((hF|0)==1){break L3018}}}while(0);a[14176]=1;is(a9);a[14176]=0;if((c[dC>>2]|0)!=3){c[13898]=nd;break}gH=c[dD>>2]|0;if((gH|0)==0){break}gE=r_+60|0;uu(c[gE>>2]|0);c[gE>>2]=gH}}while(0);nd=c[13898]|0;if((nd|0)>=(c[8272]|0)){break}gH=c[1054]|0;if((a[gH+(nd*40&-1)|0]&1)==0){break}gE=c[gH+(nd*40&-1)+36>>2]|0;hG=gH+(nd*40&-1)+32|0;nd=c[10036]|0;gH=0;while(1){if((gH|0)>=(gE|0)){b7=2191;break}if((a[nd+((c[hG>>2]|0)+gH|0)|0]|0)==(a[gH+103664|0]|0)){gH=gH+1|0}else{r0=0;break}}if((b7|0)==2191){b7=0;if((gH|0)==1){break}else{r0=0}}while(1){if((r0|0)>=(gE|0)){break}if((a[nd+((c[hG>>2]|0)+r0|0)|0]|0)==(a[r0+148464|0]|0)){r0=r0+1|0}else{break L3009}}if((r0|0)!=1){break}hG=r_+60|0;nd=c[hG>>2]|0;gE=(uA(nd|0)|0)+1|0;gH=ut(gE)|0;if((gH|0)==0){gk();hp=ut(gE)|0;if((hp|0)==0){b7=2198;break L27}else{r1=hp}}else{r1=gH}r2=nd;nd=0;r3=r1;gH=gE;hp=gE;gE=c[13898]|0;gG=c[1054]|0;L3047:while(1){gy=gE+1|0;c[13898]=gy;if((a[gG+(gy*40&-1)|0]&1)!=0){hw=a[(c[10036]|0)+(c[gG+(gy*40&-1)+32>>2]|0)|0]|0;if((hw<<24>>24|0)==39|(hw<<24>>24|0)==34){b7=2201;break L27}}hw=is(ba)|0;gy=c[hw>>2]|0;if((gy|0)==1){r4=+(c[hw+8>>2]|0)}else if((gy|0)==2){r4=+h[hw+8>>3]}else if((gy|0)==3){r4=+uz(c[hw+8>>2]|0,0)}else{b7=2206;break L27}if((c[dE>>2]|0)==3){uu(c[dF>>2]|0);c[dE>>2]=1}r5=(hp+30|0)+gH|0;r6=db(r3,r5,138416)|0;hw=r6+nd|0;ud(hw,r5-nd|0,r2,1.0,r4);r7=(uA(hw|0)|0)+nd|0;hw=c[13898]|0;gy=c[8272]|0;if((hw|0)>=(gy|0)){b7=2218;break}hS=c[1054]|0;if((a[hS+(hw*40&-1)|0]&1)==0){b7=2218;break}hC=c[hS+(hw*40&-1)+36>>2]|0;hB=hS+(hw*40&-1)+32|0;gx=c[10036]|0;gA=0;while(1){if((gA|0)>=(hC|0)){b7=2214;break}if((a[gx+((c[hB>>2]|0)+gA|0)|0]|0)==(a[gA+103664|0]|0)){gA=gA+1|0}else{r8=0;break}}if((b7|0)==2214){b7=0;if((gA|0)==1){b7=2218;break}else{r8=0}}while(1){if((r8|0)>=(hC|0)){break}if((a[gx+((c[hB>>2]|0)+r8|0)|0]|0)==(a[r8+148464|0]|0)){r8=r8+1|0}else{b7=2218;break L3047}}if((r8|0)!=1){b7=2218;break}hB=hw+1|0;c[13898]=hB;if((hB|0)>=(gy|0)){b7=5175;break L27}if((a[hS+(hB*40&-1)|0]&1)==0){b7=5176;break L27}hC=c[hS+(hB*40&-1)+36>>2]|0;gA=hS+(hB*40&-1)+32|0;ne=0;while(1){if((ne|0)>=(hC|0)){b7=2224;break}nh=c[gA>>2]|0;if((a[gx+(nh+ne|0)|0]|0)==(a[ne+103664|0]|0)){ne=ne+1|0}else{r9=nh;break}}if((b7|0)==2224){b7=0;if((ne|0)==1){b7=5177;break L27}r9=c[gA>>2]|0}gy=a[gx+r9|0]|0;if(!((gy<<24>>24|0)==39|(gy<<24>>24|0)==34)){b7=5178;break L27}if(hC>>>0<hp>>>0){sa=r2;sb=hp;sc=hB;sd=hS;se=hC}else{gy=db(r2,hC,138128)|0;hw=c[13898]|0;nh=c[1054]|0;sa=gy;sb=hC;sc=hw;sd=nh;se=c[nh+(hw*40&-1)+36>>2]|0}hw=se-2|0;nh=(hw|0)<(hC|0)?hw:hC-1|0;if((nh|0)>0){hw=c[sd+(sc*40&-1)+32>>2]|0;gy=0;while(1){gF=hw+1|0;ho=gy+1|0;a[sa+gy|0]=a[(c[10036]|0)+gF|0]|0;if((ho|0)==(nh|0)){sf=nh;break}else{hw=gF;gy=ho}}}else{sf=0}a[sa+sf|0]=0;if((a[(c[10036]|0)+(c[(c[1054]|0)+(sc*40&-1)+32>>2]|0)|0]|0)==34){ua(sa)}else{gy=sa;hw=sa;while(1){nh=a[hw]|0;if((nh<<24>>24|0)==39){hC=hw+1|0;hS=(a[hC]|0)==39?hC:hw;sg=hS;sh=a[hS]|0}else if((nh<<24>>24|0)==0){break}else{sg=hw;sh=nh}a[gy]=sh;gy=gy+1|0;hw=sg+1|0}a[gy]=0}hw=(c[13898]|0)+1|0;c[13898]=hw;if((hw|0)>=(c[8272]|0)){b7=2248;break}nh=c[1054]|0;if((a[nh+(hw*40&-1)|0]&1)==0){b7=2248;break}hS=c[nh+(hw*40&-1)+36>>2]|0;hC=nh+(hw*40&-1)+32|0;hB=c[10036]|0;gx=0;while(1){if((gx|0)>=(hS|0)){b7=2244;break}if((a[hB+((c[hC>>2]|0)+gx|0)|0]|0)==(a[gx+103664|0]|0)){gx=gx+1|0}else{si=0;break}}if((b7|0)==2244){b7=0;if((gx|0)==1){b7=2248;break}else{si=0}}while(1){if((si|0)>=(hS|0)){break}if((a[hB+((c[hC>>2]|0)+si|0)|0]|0)==(a[si+148464|0]|0)){si=si+1|0}else{b7=2248;break L3047}}if((si|0)==1){r2=sa;nd=r7;r3=r6;gH=r5;hp=sb;gE=hw;gG=nh}else{b7=2248;break}}if((b7|0)==2218){b7=0;uu(r2);sj=r6}else if((b7|0)==2248){b7=0;gG=db(r6,sb+r5|0,137840)|0;uB(gG+r7|0,sa|0);uu(sa);sj=gG}c[hG>>2]=sj}}while(0);jw(r_);}else if((gD|0)==33){gz=gv+1|0;c[13898]=gz;gG=c[8272]|0;L3116:do{if((gz|0)<(gG|0)){gE=a[gw+(gz*40&-1)|0]|0;L3118:do{if((gE&1)==0){sk=0;sl=gz;sm=gG;sn=gw;so=gE}else{hp=c[gw+(gz*40&-1)+36>>2]|0;gH=gw+(gz*40&-1)+32|0;nd=0;while(1){if((nd|0)>=(hp|0)){break}if((a[gB+((c[gH>>2]|0)+nd|0)|0]|0)==(a[nd+103664|0]|0)){nd=nd+1|0}else{sk=0;sl=gz;sm=gG;sn=gw;so=gE;break L3118}}if((nd|0)==1){break L3116}else{sk=0;sl=gz;sm=gG;sn=gw;so=gE}}}while(0);L3124:while(1){gE=(so&1)==0;L3126:do{if(!gE){hG=c[sn+(sl*40&-1)+36>>2]|0;gH=sn+(sl*40&-1)+32|0;hp=c[10036]|0;nh=0;while(1){if((nh|0)>=(hG|0)){break}if((a[hp+((c[gH>>2]|0)+nh|0)|0]|0)==(a[nh+103664|0]|0)){nh=nh+1|0}else{break L3126}}if((nh|0)==1){sp=sk;break L3124}}}while(0);if((sl|0)>=(sm|0)){b7=2271;break L27}L3134:do{if(!gE){nd=c[sn+(sl*40&-1)+36>>2]|0;gH=sn+(sl*40&-1)+32|0;hp=c[10036]|0;hG=0;while(1){if((hG|0)>=(nd|0)){break}if((a[hp+((c[gH>>2]|0)+hG|0)|0]|0)==(a[hG+103664|0]|0)){hG=hG+1|0}else{break L3134}}if((hG|0)==1){b7=2271;break L27}}}while(0);a[14176]=1;is(a7);a[14176]=0;if((c[dG>>2]|0)!=3){b7=2270;break L27}gE=c[dH>>2]|0;c[a8>>2]=gE;if((gE|0)==0){b7=2280;break L27}if((sk|0)==0){sq=0}else{sq=uA(sk|0)|0}iQ(a8);gE=c[a8>>2]|0;gH=db(sk,(sq+2|0)+(uA(gE|0)|0)|0,140360)|0;if((sq|0)==0){uB(gH|0,gE|0)}else{hp=gH+sq|0;nd=gH+(sq+1|0)|0;uB(nd|0,gE|0);a[hp]=58}uu(gE);gE=c[13898]|0;hp=c[8272]|0;if((gE|0)>=(hp|0)){sp=gH;break}nd=c[1054]|0;sk=gH;sl=gE;sm=hp;sn=nd;so=a[nd+(gE*40&-1)|0]|0}if((sp|0)==0){break L44}uq(4,sp);uu(sp);break L44}}while(0);uq(32,0)}else if((gD|0)==34){sr=gv+1|0;c[13898]=sr;L3155:do{if((sr|0)<(c[8272]|0)){L3157:do{if((a[gw+(sr*40&-1)|0]&1)!=0){gG=c[gw+(sr*40&-1)+36>>2]|0;gz=gw+(sr*40&-1)+32|0;gE=0;while(1){if((gE|0)>=(gG|0)){b7=2289;break}if((a[gB+((c[gz>>2]|0)+gE|0)|0]|0)==(a[gE+103664|0]|0)){gE=gE+1|0}else{ss=0;break}}if((b7|0)==2289){b7=0;if((gE|0)==1){break L3155}else{ss=0}}while(1){if((ss|0)>=(gG|0)){break}if((a[gB+((c[gz>>2]|0)+ss|0)|0]|0)==(a[ss+103664|0]|0)){ss=ss+1|0}else{break L3157}}if((ss|0)==1){st=sr;b7=5181;break L27}}}while(0);a[14176]=1;is(a6);a[14176]=0;if((c[dI>>2]|0)!=3){b7=2297;break L27}gz=c[dJ>>2]|0;if((gz|0)==0){b7=2299;break L27}us(4,gz);uu(gz);break L44}}while(0);uu(c[12908]|0);bA(5,179864);bA(2,179864);gz=bA(5,0)|0;if((gz|0)==0){su=0}else{su=bP(gz|0)|0}c[12908]=su}else if((gD|0)==35){uE(dK|0,0,11);gz=gv+1|0;c[13898]=gz;gG=c[8272]|0;L3176:do{if((gz|0)<(gG|0)){gE=c[gw+(gz*40&-1)+36>>2]|0;L3178:do{if((a[gw+(gz*40&-1)|0]&1)!=0){nd=gw+(gz*40&-1)+32|0;hp=0;while(1){if((hp|0)>=(gE|0)){break}if((a[gB+((c[nd>>2]|0)+hp|0)|0]|0)==(a[hp+103664|0]|0)){hp=hp+1|0}else{break L3178}}if((hp|0)==1){b7=2308;break L3176}}}while(0);if((gE|0)>0){sv=gw+(gz*40&-1)+32|0;nd=c[sv>>2]|0;gH=0;do{sw=gH+nd|0;nh=gB+sw|0;hF=a[nh]|0;do{if(hF<<24>>24==114){sx=7}else{if((a_(nh|0,108208,2)|0)==0){sx=6;break}if((a_(nh|0,108120,2)|0)==0){sx=5;break}if((a_(nh|0,124768,2)|0)==0){sx=4;break}if((a_(nh|0,88416,2)|0)==0){sx=3;break}if(hF<<24>>24==120){sx=2;break}if(hF<<24>>24==121){sx=1;break}if(hF<<24>>24==122){sx=0}else{b7=2312;break L27}}}while(0);a[a5+(c[56724+(sx<<3)>>2]|0)|0]=1;gH=(uA(c[56720+(sx<<3)>>2]|0)|0)+gH|0;}while((gH|0)<(gE|0))}gE=gv+2|0;c[13898]=gE;if((gE|0)>=(gG|0)){sy=10.0;break}L3200:do{if((a[gw+(gE*40&-1)|0]&1)!=0){gH=c[gw+(gE*40&-1)+36>>2]|0;nd=gw+(gE*40&-1)+32|0;hF=0;while(1){if((hF|0)>=(gH|0)){break}if((a[gB+((c[nd>>2]|0)+hF|0)|0]|0)==(a[hF+103664|0]|0)){hF=hF+1|0}else{break L3200}}if((hF|0)==1){sy=10.0;break L3176}}}while(0);gE=is(a4)|0;nd=c[gE>>2]|0;if((nd|0)==1){sz=+(c[gE+8>>2]|0)}else if((nd|0)==2){sz=+h[gE+8>>3]}else if((nd|0)==3){sz=+uz(c[gE+8>>2]|0,0)}else{b7=2324;break L27}if((c[dL>>2]|0)==3){uu(c[dM>>2]|0);c[dL>>2]=1}m3=+P(+sz);if(m3>1.0){sy=m3}else{b7=2328;break L27}}else{b7=2308}}while(0);if((b7|0)==2308){b7=0;uE(dK|0,1,7);sy=10.0}gG=0;L3218:do{do{if((a[a5+gG|0]&1)!=0){a[64788+(gG*688&-1)|0]=1;h[64792+(gG*688&-1)>>3]=sy;h[64800+(gG*688&-1)>>3]=+_(+sy);if((gG|0)!=7){break}if((a[30528]&1)==0){break L3218}ju()}}while(0);gG=gG+1|0;}while((gG|0)<8);c[6928]=0}else if((gD|0)==36){c[13898]=gv+1;a[43472]=1}else if((gD|0)==37){sA=gv+1|0;c[13898]=sA;L3228:do{if((sA|0)<(c[8272]|0)){if((a[gw+(sA*40&-1)|0]&1)==0){b7=5184;break L27}gG=c[gw+(sA*40&-1)+36>>2]|0;gz=gw+(sA*40&-1)+32|0;gE=0;while(1){if((gE|0)>=(gG|0)){b7=2349;break}nd=c[gz>>2]|0;if((a[gB+(nd+gE|0)|0]|0)==(a[gE+103664|0]|0)){gE=gE+1|0}else{sB=nd;break}}if((b7|0)==2349){b7=0;if((gE|0)==1){b7=2351;break}sB=c[gz>>2]|0}if((gG|0)>0){sC=0;sD=0;sE=sB}else{b7=5185;break L27}while(1){if((a[sC+141752|0]|0)==(a[gB+(sC+sE|0)|0]|0)){sF=sE;sG=sD}else{if((sC|0)!=2){sH=0;sI=0;sJ=sB;break}sF=sE-1|0;sG=1}nd=sC+1|0;if((nd|0)<(sG+gG|0)){sC=nd;sD=sG;sE=sF}else{b7=2357;break}}do{if((b7|0)==2357){b7=0;if((sG|0)==0){if(!((sC|0)==1|(sC|0)==9)){sH=0;sI=0;sJ=sB;break}}c[8732]=0;break L3228}}while(0);while(1){if((a[sH+141560|0]|0)==(a[gB+(sH+sJ|0)|0]|0)){sK=sJ;sL=sI}else{if((sH|0)!=1){sM=0;sN=0;sO=sB;break}sK=sJ-1|0;sL=1}gz=sH+1|0;if((gz|0)<(sL+gG|0)){sH=gz;sI=sL;sJ=sK}else{b7=2364;break}}do{if((b7|0)==2364){b7=0;if((sL|0)==0){if(!((sH|0)==0|(sH|0)==9)){sM=0;sN=0;sO=sB;break}}c[8732]=1;break L3228}}while(0);while(1){if((a[sM+141376|0]|0)==(a[gB+(sM+sO|0)|0]|0)){sP=sO;sQ=sN}else{if((sM|0)!=2){b7=5186;break L27}sP=sO-1|0;sQ=1}gz=sM+1|0;if((gz|0)<(sQ+gG|0)){sM=gz;sN=sQ;sO=sP}else{break}}if((sQ|0)==0){if(!((sM|0)==1|(sM|0)==11)){b7=5187;break L27}}c[8732]=2}else{b7=2351}}while(0);if((b7|0)==2351){b7=0;c[8732]=0}c[13898]=gv+2}else if((gD|0)==42){js(56400)}else if((gD|0)==39){js(35144)}else if((gD|0)==40){js(26392)}else if((gD|0)==41){js(4264)}else if((gD|0)==15){sR=gv+1|0;c[13898]=sR;gG=c[gw+(sR*40&-1)+36>>2]|0;gz=c[gw+(sR*40&-1)+32>>2]|0;gE=(a[gw+(sR*40&-1)|0]&1)==0;if((gG|0)>0&(gE^1)){sS=0;sT=0;sU=gz}else{b7=5195;break L27}while(1){if((a[sS+210832|0]|0)==(a[gB+(sS+sU|0)|0]|0)){sV=sU;sW=sT}else{if((sS|0)!=4){break}sV=sU-1|0;sW=1}nd=sS+1|0;if((nd|0)<(sW+gG|0)){sS=nd;sT=sW;sU=sV}else{b7=2385;break}}do{if((b7|0)==2385){b7=0;if((sW|0)==0){if(!((sS|0)==3|(sS|0)==7)){break}}sX=gv+2|0;c[13898]=sX;L3289:do{if((sX|0)<(c[8272]|0)){L3291:do{if((a[gw+(sX*40&-1)|0]&1)!=0){nd=c[gw+(sX*40&-1)+36>>2]|0;gH=gw+(sX*40&-1)+32|0;nh=0;while(1){if((nh|0)>=(nd|0)){b7=2392;break}if((a[gB+((c[gH>>2]|0)+nh|0)|0]|0)==(a[nh+103664|0]|0)){nh=nh+1|0}else{sY=0;break}}if((b7|0)==2392){b7=0;if((nh|0)==1){break L3289}else{sY=0}}while(1){if((sY|0)>=(nd|0)){break}if((a[gB+((c[gH>>2]|0)+sY|0)|0]|0)==(a[sY+103664|0]|0)){sY=sY+1|0}else{break L3291}}if((sY|0)==1){b7=2399;break L27}}}while(0);a[14176]=1;is(a3);a[14176]=0;if((c[dP>>2]|0)!=3){b7=2398;break L27}hF=c[dQ>>2]|0;c[8528]=hF;if((hF|0)==0){b7=2401;break L27}else{break L44}}}while(0);uu(c[8528]|0);c[8528]=0;break L44}}while(0);if(gE){b7=5196;break L27}L3307:do{if((gG|0)>0){hF=0;gH=0;nd=gz;while(1){if((a[hF+209008|0]|0)==(a[gB+(hF+nd|0)|0]|0)){sZ=nd;s_=gH}else{if((hF|0)!=3){break L3307}sZ=nd-1|0;s_=1}nh=hF+1|0;if((nh|0)<(s_+gG|0)){hF=nh;gH=s_;nd=sZ}else{break}}if((s_|0)==0){if(!((hF|0)==2|(hF|0)==9)){break}}s$=gv+2|0;c[13898]=s$;do{if((s$|0)<(c[8272]|0)){if((a[gw+(s$*40&-1)|0]&1)==0){b7=5190;break L27}nd=c[gw+(s$*40&-1)+36>>2]|0;gH=gw+(s$*40&-1)+32|0;nh=0;while(1){if((nh|0)>=(nd|0)){b7=2416;break}hG=c[gH>>2]|0;if((a[gB+(hG+nh|0)|0]|0)==(a[nh+103664|0]|0)){nh=nh+1|0}else{s0=hG;break}}if((b7|0)==2416){b7=0;if((nh|0)==1){break}s0=c[gH>>2]|0}L3328:do{if((nd|0)>0){hG=0;hp=0;hw=s0;while(1){if((a[hG+142688|0]|0)==(a[gB+(hG+hw|0)|0]|0)){s1=hw;s2=hp}else{if((hG|0)!=5){b7=2427;break L3328}s1=hw-1|0;s2=1}hC=hG+1|0;if((hC|0)<(s2+nd|0)){hG=hC;hp=s2;hw=s1}else{break}}if((s2|0)==0){if(!((hG|0)==4|(hG|0)==10)){b7=2427;break}}a[47120]=0}else{b7=2427}}while(0);L3339:do{if((b7|0)==2427){b7=0;gH=a[gB+s0|0]|0;if((gH<<24>>24|0)==39|(gH<<24>>24|0)==34){s3=0}else{b7=5191;break L27}while(1){if((s3|0)>=(nd|0)){b7=2431;break}if((a[gB+(s3+s0|0)|0]|0)==(a[s3+142432|0]|0)){s3=s3+1|0}else{s4=0;b7=2432;break}}if((b7|0)==2431){b7=0;if((s3|0)!=4){s4=0;b7=2432}}do{if((b7|0)==2432){while(1){b7=0;if((s4|0)>=(nd|0)){b7=2434;break}if((a[gB+(s4+s0|0)|0]|0)==(a[s4+142280|0]|0)){s4=s4+1|0;b7=2432}else{break}}if((b7|0)==2434){b7=0;if((s4|0)==4){break}}if(gH<<24>>24!=(a[gB+(s0+2|0)|0]|0)){b7=2437;break L27}a[47120]=a[gB+(s0+1|0)|0]|0;break L3339}}while(0);a[47120]=9}}while(0);c[13898]=gv+3;break L44}}while(0);a[47120]=0;break L44}}while(0);if((gG|0)>0&(gE^1)){s5=0;s6=0;s7=gz}else{b7=5197;break L27}while(1){if((a[s5+97920|0]|0)==(a[gB+(s5+s7|0)|0]|0)){s8=s7;s9=s6}else{if((s5|0)!=3){break}s8=s7-1|0;s9=1}hF=s5+1|0;if((hF|0)<(s9+gG|0)){s5=hF;s6=s9;s7=s8}else{b7=2445;break}}do{if((b7|0)==2445){b7=0;if((s9|0)==0){if(!((s5|0)==2|(s5|0)==13)){break}}ta=gv+2|0;c[13898]=ta;L3369:do{if((ta|0)<(c[8272]|0)){L3371:do{if((a[gw+(ta*40&-1)|0]&1)!=0){hF=c[gw+(ta*40&-1)+36>>2]|0;nd=gw+(ta*40&-1)+32|0;gH=0;while(1){if((gH|0)>=(hF|0)){b7=2452;break}if((a[gB+((c[nd>>2]|0)+gH|0)|0]|0)==(a[gH+103664|0]|0)){gH=gH+1|0}else{tb=0;break}}if((b7|0)==2452){b7=0;if((gH|0)==1){b7=2453;break L3369}else{tb=0}}while(1){if((tb|0)>=(hF|0)){break}if((a[gB+((c[nd>>2]|0)+tb|0)|0]|0)==(a[tb+103664|0]|0)){tb=tb+1|0}else{break L3371}}if((tb|0)==1){tc=ta;b7=5192;break L27}}}while(0);a[14176]=1;is(a2);a[14176]=0;if((c[dN>>2]|0)!=3){b7=2458;break L27}nd=c[dO>>2]|0;if((nd|0)==0){b7=2460;break L27}uu(c[11948]|0);td=nd}else{b7=2453}}while(0);if((b7|0)==2453){b7=0;uu(c[11948]|0);td=bP(199184)|0}c[11948]=td;break L44}}while(0);if(gE){b7=5198;break L27}L3390:do{if((gG|0)>0){nd=0;hF=0;gH=gz;while(1){if((a[nd+204608|0]|0)==(a[gB+(nd+gH|0)|0]|0)){te=gH;tf=hF}else{if((nd|0)!=3){break L3390}te=gH-1|0;tf=1}hK=nd+1|0;if((hK|0)<(tf+gG|0)){nd=hK;hF=tf;gH=te}else{break}}if((tf|0)==0){if(!((nd|0)==2|(nd|0)==6)){break}}eP();break L44}}while(0);if((gG|0)>0&(gE^1)){tg=0;th=0;ti=gz}else{b7=5199;break L27}while(1){if((a[tg+115448|0]|0)==(a[gB+(tg+ti|0)|0]|0)){tj=ti;tk=th}else{if((tg|0)!=4){break}tj=ti-1|0;tk=1}gH=tg+1|0;if((gH|0)<(tk+gG|0)){tg=gH;th=tk;ti=tj}else{b7=2478;break}}do{if((b7|0)==2478){b7=0;if((tk|0)==0){if(!((tg|0)==3|(tg|0)==7)){break}}a[47712]=1;c[13898]=gv+2;break L44}}while(0);if(gE){b7=5200;break L27}L3415:do{if((gG|0)>0){gH=0;hF=0;hK=gz;while(1){if((a[gH+76296|0]|0)==(a[gB+(gH+hK|0)|0]|0)){tl=hK;tm=hF}else{if((gH|0)!=6){break L3415}tl=hK-1|0;tm=1}hG=gH+1|0;if((hG|0)<(tm+gG|0)){gH=hG;hF=tm;hK=tl}else{break}}if((tm|0)==0){if(!((gH|0)==5|(gH|0)==9)){break}}a[47712]=0;c[13898]=gv+2;break L44}}while(0);if((gG|0)>0&(gE^1)){tn=0}else{b7=5201;break L27}while(1){if((a[tn+223696|0]|0)!=(a[gB+(tn+gz|0)|0]|0)){break}to=tn+1|0;if((to|0)<(gG|0)){tn=to}else{b7=2493;break}}do{if((b7|0)==2493){b7=0;if((to|0)!=8){break}a[47472]=0;c[13898]=gv+2;break L44}}while(0);if((gG|0)>0&(gE^1)){tp=0}else{b7=5202;break L27}do{if((a[tp+216640|0]|0)!=(a[gB+(tp+gz|0)|0]|0)){b7=5203;break L27}tp=tp+1|0;}while((tp|0)<(gG|0));if((tp|0)!=10){b7=5204;break L27}a[47472]=1;c[13898]=gv+2}else if((gD|0)==44){gG=gv+1|0;c[13898]=gG;c[8496]=1;gz=c[8272]|0;if((gG|0)<(gz|0)){tq=gG;tr=gz;ts=gw}else{break}L3440:while(1){tt=c[ts+(tq*40&-1)+36>>2]|0;tu=ts+(tq*40&-1)+32|0;if((a[ts+(tq*40&-1)|0]&1)==0){b7=2503;break}gz=c[10036]|0;gG=0;while(1){if((gG|0)>=(tt|0)){b7=2507;break}gE=c[tu>>2]|0;if((a[gz+(gE+gG|0)|0]|0)==(a[gG+103664|0]|0)){gG=gG+1|0}else{tv=gE;break}}if((b7|0)==2507){b7=0;if((gG|0)==1){break L44}tv=c[tu>>2]|0}if((tt|0)>0){tw=0;tx=0;ty=tv}else{tz=tv;tA=0;break}while(1){if((a[tw+148208|0]|0)==(a[gz+(tw+ty|0)|0]|0)){tB=ty;tC=tx}else{if((tw|0)!=2){tD=0;tE=0;tF=tv;b7=2525;break}tB=ty-1|0;tC=1}gH=tw+1|0;if((gH|0)<(tC+tt|0)){tw=gH;tx=tC;ty=tB}else{b7=2514;break}}do{if((b7|0)==2514){b7=0;if((tC|0)==0){if(!((tw|0)==11|(tw|0)==1)){tD=0;tE=0;tF=tv;b7=2525;break}}c[13898]=tq+1;gG=is(a$)|0;gH=c[gG>>2]|0;if((gH|0)==1){tG=+(c[gG+8>>2]|0)}else if((gH|0)==2){tG=+h[gG+8>>3]}else if((gH|0)==3){tG=+uz(c[gG+8>>2]|0,0)}else{b7=2520;break L27}if((c[d5>>2]|0)==3){uu(c[d6>>2]|0);c[d5>>2]=1}gG=~~tG;c[8497]=gG;if((gG|0)>=0){break}c[8497]=0}}while(0);L3470:do{if((b7|0)==2525){while(1){b7=0;if((a[tD+148024|0]|0)==(a[gz+(tD+tF|0)|0]|0)){tH=tF;tI=tE}else{if((tD|0)!=4){tJ=0;tK=0;tL=tv;break}tH=tF-1|0;tI=1}gG=tD+1|0;if((gG|0)<(tI+tt|0)){tD=gG;tE=tI;tF=tH;b7=2525}else{b7=2529;break}}do{if((b7|0)==2529){b7=0;if((tI|0)==0){if(!((tD|0)==3|(tD|0)==13)){tJ=0;tK=0;tL=tv;break}}c[8497]=0;c[13898]=tq+1;break L3470}}while(0);while(1){if((a[tJ+147832|0]|0)==(a[gz+(tJ+tL|0)|0]|0)){tM=tL;tN=tK}else{if((tJ|0)!=6){tO=0;tP=0;tQ=tv;break}tM=tL-1|0;tN=1}gG=tJ+1|0;if((gG|0)<(tN+tt|0)){tJ=gG;tK=tN;tL=tM}else{b7=2538;break}}do{if((b7|0)==2538){b7=0;if((tN|0)==0){if(!((tJ|0)==5|(tJ|0)==15)){tO=0;tP=0;tQ=tv;break}}c[8498]=1;c[13898]=tq+1;break L3470}}while(0);while(1){if((a[tO+147576|0]|0)==(a[gz+(tO+tQ|0)|0]|0)){tR=tQ;tS=tP}else{if((tO|0)!=8){tT=0;tU=0;tV=tv;break}tR=tQ-1|0;tS=1}gG=tO+1|0;if((gG|0)<(tS+tt|0)){tO=gG;tP=tS;tQ=tR}else{b7=2545;break}}do{if((b7|0)==2545){b7=0;if((tS|0)==0){if(!((tO|0)==7|(tO|0)==17)){tT=0;tU=0;tV=tv;break}}c[8498]=0;c[13898]=tq+1;break L3470}}while(0);while(1){if((a[tT+147296|0]|0)==(a[gz+(tT+tV|0)|0]|0)){tW=tV;tX=tU}else{if((tT|0)!=2){tY=0;tZ=0;t_=tv;break}tW=tV-1|0;tX=1}gG=tT+1|0;if((gG|0)<(tX+tt|0)){tT=gG;tU=tX;tV=tW}else{b7=2552;break}}do{if((b7|0)==2552){b7=0;if((tX|0)==0){if(!((tT|0)==1|(tT|0)==16)){tY=0;tZ=0;t_=tv;break}}c[8500]=1;hM();c[13898]=(c[13898]|0)+1;break L3470}}while(0);while(1){if((a[tY+147040|0]|0)==(a[gz+(tY+t_|0)|0]|0)){t$=t_;t0=tZ}else{if((tY|0)!=14){t1=0;t2=0;t3=tv;break}t$=t_-1|0;t0=1}gG=tY+1|0;if((gG|0)<(t0+tt|0)){tY=gG;tZ=t0;t_=t$}else{b7=2559;break}}do{if((b7|0)==2559){b7=0;if((t0|0)==0){if(!((tY|0)==13|(tY|0)==16)){t1=0;t2=0;t3=tv;break}}c[8500]=2;hM();c[13898]=(c[13898]|0)+1;break L3470}}while(0);while(1){if((a[t1+146800|0]|0)==(a[gz+(t1+t3|0)|0]|0)){t4=t3;t6=t2}else{if((t1|0)!=4){t7=0;t8=0;t9=tv;break}t4=t3-1|0;t6=1}gG=t1+1|0;if((gG|0)<(t6+tt|0)){t1=gG;t2=t6;t3=t4}else{b7=2566;break}}do{if((b7|0)==2566){b7=0;if((t6|0)==0){if(!((t1|0)==3|(t1|0)==15)){t7=0;t8=0;t9=tv;break}}c[8500]=0;hM();c[13898]=(c[13898]|0)+1;break L3470}}while(0);while(1){if((a[t7+146616|0]|0)==(a[gz+(t7+t9|0)|0]|0)){ub=t9;uc=t8}else{if((t7|0)!=5){ue=0;ug=0;ui=tv;break}ub=t9-1|0;uc=1}gG=t7+1|0;if((gG|0)<(uc+tt|0)){t7=gG;t8=uc;t9=ub}else{b7=2573;break}}do{if((b7|0)==2573){b7=0;if((uc|0)==0){if(!((t7|0)==4|(t7|0)==6)){ue=0;ug=0;ui=tv;break}}c[8499]=1;gG=tq+1|0;c[13898]=gG;gH=(a[ts+(gG*40&-1)|0]&1)==0;if(gH){b7=2577}else{gE=a[gz+(c[ts+(gG*40&-1)+32>>2]|0)|0]|0;if(!((gE<<24>>24|0)==39|(gE<<24>>24|0)==34)){b7=2577}}if((b7|0)==2577){b7=0;gE=c[10810]|0;if((gE|0)==0){break L3470}hK=ts+(gG*40&-1)+36|0;hF=ts+(gG*40&-1)+32|0;nd=(tr|0)<=(gG|0)|gH;gH=gE;L3553:while(1){gE=c[gH+4>>2]|0;L3555:do{if(!nd){gG=c[hK>>2]|0;hG=0;while(1){if((hG|0)>=(gG|0)){break}if((a[gz+((c[hF>>2]|0)+hG|0)|0]|0)==(a[gE+hG|0]|0)){hG=hG+1|0}else{break L3555}}if((a[gE+hG|0]|0)==0){break L3553}}}while(0);gE=c[gH>>2]|0;if((gE|0)==0){break L3470}else{gH=gE}}if((a[gH+8|0]&1)!=0){break L3470}if((c[gH+16>>2]|0)!=3){break L3470}}uu(c[8504]|0);hF=c[13898]|0;L3565:do{if((hF|0)<(c[8272]|0)){hK=c[1054]|0;L3567:do{if((a[hK+(hF*40&-1)|0]&1)!=0){nd=c[hK+(hF*40&-1)+36>>2]|0;gE=hK+(hF*40&-1)+32|0;gG=c[10036]|0;gC=0;while(1){if((gC|0)>=(nd|0)){break}if((a[gG+((c[gE>>2]|0)+gC|0)|0]|0)==(a[gC+103664|0]|0)){gC=gC+1|0}else{break L3567}}if((gC|0)==1){ul=0;break L3565}}}while(0);a[14176]=1;is(aV);a[14176]=0;if((c[d3>>2]|0)==3){ul=c[d4>>2]|0;break}else{c[13898]=hF;ul=0;break}}else{ul=0}}while(0);c[8504]=ul;break L3470}}while(0);while(1){if((a[ue+146440|0]|0)==(a[gz+(ue+ui|0)|0]|0)){um=ui;un=ug}else{if((ue|0)!=4){uo=0;up=0;uv=tv;break}um=ui-1|0;un=1}hF=ue+1|0;if((hF|0)<(un+tt|0)){ue=hF;ug=un;ui=um}else{b7=2601;break}}do{if((b7|0)==2601){b7=0;if((un|0)==0){if(!((ue|0)==3|(ue|0)==8)){uo=0;up=0;uv=tv;break}}c[8499]=0;c[13898]=tq+1;break L3470}}while(0);while(1){if((a[uo+146248|0]|0)==(a[gz+(uo+uv|0)|0]|0)){uw=uv;ux=up}else{if((uo|0)!=2){uy=0;uC=0;uG=tv;break}uw=uv-1|0;ux=1}hF=uo+1|0;if((hF|0)<(ux+tt|0)){uo=hF;up=ux;uv=uw}else{b7=2608;break}}do{if((b7|0)==2608){b7=0;if((ux|0)==0){if(!((uo|0)==1|(uo|0)==7)){uy=0;uC=0;uG=tv;break}}c[8501]=1;c[13898]=tq+1;break L3470}}while(0);while(1){if((a[uy+146080|0]|0)==(a[gz+(uy+uG|0)|0]|0)){uH=uG;uI=uC}else{if((uy|0)!=4){uJ=0;uK=0;uL=tv;break}uH=uG-1|0;uI=1}hF=uy+1|0;if((hF|0)<(uI+tt|0)){uy=hF;uC=uI;uG=uH}else{b7=2615;break}}do{if((b7|0)==2615){b7=0;if((uI|0)==0){if(!((uy|0)==3|(uy|0)==9)){uJ=0;uK=0;uL=tv;break}}c[8501]=0;c[13898]=tq+1;break L3470}}while(0);while(1){if((a[uJ+145928|0]|0)==(a[gz+(uJ+uL|0)|0]|0)){uM=uL;uN=uK}else{if((uJ|0)!=6){uO=0;uP=0;uQ=tv;break}uM=uL-1|0;uN=1}hF=uJ+1|0;if((hF|0)<(uN+tt|0)){uJ=hF;uK=uN;uL=uM}else{b7=2622;break}}do{if((b7|0)==2622){b7=0;if((uN|0)==0){if(!((uJ|0)==5|(uJ|0)==8)){uO=0;uP=0;uQ=tv;break}}c[8502]=1;c[13898]=tq+1;break L3470}}while(0);while(1){if((a[uO+145688|0]|0)==(a[gz+(uO+uQ|0)|0]|0)){uR=uQ;uS=uP}else{if((uO|0)!=8){uT=0;uU=0;uV=tv;break}uR=uQ-1|0;uS=1}hF=uO+1|0;if((hF|0)<(uS+tt|0)){uO=hF;uP=uS;uQ=uR}else{b7=2629;break}}do{if((b7|0)==2629){b7=0;if((uS|0)==0){if(!((uO|0)==7|(uO|0)==10)){uT=0;uU=0;uV=tv;break}}c[8502]=0;c[13898]=tq+1;break L3470}}while(0);while(1){if((a[uT+78872|0]|0)==(a[gz+(uT+uV|0)|0]|0)){uW=uV;uX=uU}else{if((uT|0)!=2){uY=0;uZ=0;u_=tv;break}uW=uV-1|0;uX=1}hF=uT+1|0;if((hF|0)<(uX+tt|0)){uT=hF;uU=uX;uV=uW}else{b7=2636;break}}do{if((b7|0)==2636){b7=0;if((uX|0)==0){if(!((uT|0)==6|(uT|0)==1)){uY=0;uZ=0;u_=tv;break}}hF=tq+1|0;c[13898]=hF;gH=(a[ts+(hF*40&-1)|0]&1)==0;if(gH){b7=2640}else{hK=a[gz+(c[ts+(hF*40&-1)+32>>2]|0)|0]|0;if(!((hK<<24>>24|0)==39|(hK<<24>>24|0)==34)){b7=2640}}L3646:do{if((b7|0)==2640){b7=0;hK=c[10810]|0;L3648:do{if((hK|0)!=0){gE=ts+(hF*40&-1)+36|0;gG=ts+(hF*40&-1)+32|0;nd=(tr|0)<=(hF|0)|gH;hG=hK;L3650:while(1){nh=c[hG+4>>2]|0;L3652:do{if(!nd){hw=c[gE>>2]|0;hp=0;while(1){if((hp|0)>=(hw|0)){break}if((a[gz+((c[gG>>2]|0)+hp|0)|0]|0)==(a[nh+hp|0]|0)){hp=hp+1|0}else{break L3652}}if((a[nh+hp|0]|0)==0){break L3650}}}while(0);nh=c[hG>>2]|0;if((nh|0)==0){break L3648}else{hG=nh}}if((a[hG+8|0]&1)!=0){break}if((c[hG+16>>2]|0)==3){break L3646}}}while(0);c[8503]=34032;break L3470}}while(0);gH=c[8503]|0;if((gH|0)==34032){u$=hF;u0=tr}else{uu(gH);u$=c[13898]|0;u0=c[8272]|0}L3666:do{if((u$|0)<(u0|0)){gH=c[1054]|0;L3668:do{if((a[gH+(u$*40&-1)|0]&1)!=0){hK=c[gH+(u$*40&-1)+36>>2]|0;gG=gH+(u$*40&-1)+32|0;gE=c[10036]|0;nd=0;while(1){if((nd|0)>=(hK|0)){break}if((a[gE+((c[gG>>2]|0)+nd|0)|0]|0)==(a[nd+103664|0]|0)){nd=nd+1|0}else{break L3668}}if((nd|0)==1){u1=0;break L3666}}}while(0);a[14176]=1;is(aR);a[14176]=0;if((c[d1>>2]|0)==3){u1=c[d2>>2]|0;break}else{c[13898]=u$;u1=0;break}}else{u1=0}}while(0);c[8503]=u1;break L3470}}while(0);while(1){if((a[uY+145232|0]|0)==(a[gz+(uY+u_|0)|0]|0)){u2=u_;u3=uZ}else{if((uY|0)!=2){u4=0;u5=0;u6=tv;break}u2=u_-1|0;u3=1}hF=uY+1|0;if((hF|0)<(u3+tt|0)){uY=hF;uZ=u3;u_=u2}else{b7=2667;break}}do{if((b7|0)==2667){b7=0;if((u3|0)==0){if(!((uY|0)==15|(uY|0)==1)){u4=0;u5=0;u6=tv;break}}hF=tq+1|0;c[13898]=hF;gH=(a[ts+(hF*40&-1)|0]&1)==0;if(gH){b7=2671}else{gG=a[gz+(c[ts+(hF*40&-1)+32>>2]|0)|0]|0;if(!((gG<<24>>24|0)==39|(gG<<24>>24|0)==34)){b7=2671}}L3692:do{if((b7|0)==2671){b7=0;gG=c[10810]|0;L3694:do{if((gG|0)!=0){gE=ts+(hF*40&-1)+36|0;hK=ts+(hF*40&-1)+32|0;hG=(tr|0)<=(hF|0)|gH;gC=gG;L3696:while(1){nh=c[gC+4>>2]|0;L3698:do{if(!hG){hR=c[gE>>2]|0;hw=0;while(1){if((hw|0)>=(hR|0)){break}if((a[gz+((c[hK>>2]|0)+hw|0)|0]|0)==(a[nh+hw|0]|0)){hw=hw+1|0}else{break L3698}}if((a[nh+hw|0]|0)==0){break L3696}}}while(0);nh=c[gC>>2]|0;if((nh|0)==0){break L3694}else{gC=nh}}if((a[gC+8|0]&1)!=0){break}if((c[gC+16>>2]|0)==3){break L3692}}}while(0);gG=is(aP)|0;hK=c[gG>>2]|0;if((hK|0)==1){u7=+(c[gG+8>>2]|0)}else if((hK|0)==2){u7=+h[gG+8>>3]}else if((hK|0)==3){u7=+uz(c[gG+8>>2]|0,0)}else{b7=2698;break L27}if((c[dZ>>2]|0)==3){uu(c[d_>>2]|0);c[dZ>>2]=1}gG=~~u7;if(gG>>>0<7){c[13532]=gG;break L3470}else{gG=c[m>>2]|0;cf(gG|0,144712,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=6,v)|0);break L3470}}}while(0);uu(c[13534]|0);gH=c[13898]|0;L3720:do{if((gH|0)<(c[8272]|0)){hF=c[1054]|0;L3722:do{if((a[hF+(gH*40&-1)|0]&1)!=0){gG=c[hF+(gH*40&-1)+36>>2]|0;hK=hF+(gH*40&-1)+32|0;gE=c[10036]|0;hG=0;while(1){if((hG|0)>=(gG|0)){break}if((a[gE+((c[hK>>2]|0)+hG|0)|0]|0)==(a[hG+103664|0]|0)){hG=hG+1|0}else{break L3722}}if((hG|0)==1){u8=0;break L3720}}}while(0);a[14176]=1;is(aO);a[14176]=0;if((c[d$>>2]|0)==3){u8=c[d0>>2]|0;break}else{c[13898]=gH;u8=0;break}}else{u8=0}}while(0);c[13534]=u8;if((a[u8]|0)!=0){c[13532]=7;break L3470}uu(u8);c[13534]=0;if((c[8506]|0)!=7){break L3470}c[8506]=0;break L3470}}while(0);while(1){if((a[u4+144456|0]|0)==(a[gz+(u4+u6|0)|0]|0)){u9=u6;va=u5}else{if((u4|0)!=2){vb=0;vc=0;vd=tv;break}u9=u6-1|0;va=1}gH=u4+1|0;if((gH|0)<(va+tt|0)){u4=gH;u5=va;u6=u9}else{b7=2708;break}}do{if((b7|0)==2708){b7=0;if((va|0)==0){if(!((u4|0)==11|(u4|0)==1)){vb=0;vc=0;vd=tv;break}}gH=tq+1|0;c[13898]=gH;hF=(a[ts+(gH*40&-1)|0]&1)==0;if(hF){b7=2712}else{hK=a[gz+(c[ts+(gH*40&-1)+32>>2]|0)|0]|0;if(!((hK<<24>>24|0)==39|(hK<<24>>24|0)==34)){b7=2712}}L3750:do{if((b7|0)==2712){b7=0;hK=c[10810]|0;L3752:do{if((hK|0)!=0){gE=ts+(gH*40&-1)+36|0;gG=ts+(gH*40&-1)+32|0;gC=(tr|0)<=(gH|0)|hF;nd=hK;L3754:while(1){nh=c[nd+4>>2]|0;L3756:do{if(!gC){hR=c[gE>>2]|0;hp=0;while(1){if((hp|0)>=(hR|0)){break}if((a[gz+((c[gG>>2]|0)+hp|0)|0]|0)==(a[nh+hp|0]|0)){hp=hp+1|0}else{break L3756}}if((a[nh+hp|0]|0)==0){break L3754}}}while(0);nh=c[nd>>2]|0;if((nh|0)==0){break L3752}else{nd=nh}}if((a[nd+8|0]&1)!=0){break}if((c[nd+16>>2]|0)==3){break L3750}}}while(0);hK=is(aT)|0;gG=c[hK>>2]|0;if((gG|0)==1){ve=+(c[hK+8>>2]|0)}else if((gG|0)==2){ve=+h[hK+8>>3]}else if((gG|0)==3){ve=+uz(c[hK+8>>2]|0,0)}else{b7=2740;break L27}if((c[dV>>2]|0)==3){uu(c[dW>>2]|0);c[dV>>2]=1}hK=~~ve;if(hK>>>0>=8){gG=c[m>>2]|0;cf(gG|0,144072,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=7,v)|0);break L3470}if((hK|0)!=7|(c[8510]|0)!=0){c[8506]=hK;break L3470}else{hK=c[m>>2]|0;aI(144280,44,1,hK|0);break L3470}}}while(0);uu(c[8510]|0);hF=c[13898]|0;L3781:do{if((hF|0)<(c[8272]|0)){gH=c[1054]|0;L3783:do{if((a[gH+(hF*40&-1)|0]&1)!=0){hK=c[gH+(hF*40&-1)+36>>2]|0;gG=gH+(hF*40&-1)+32|0;gE=c[10036]|0;gC=0;while(1){if((gC|0)>=(hK|0)){break}if((a[gE+((c[gG>>2]|0)+gC|0)|0]|0)==(a[gC+103664|0]|0)){gC=gC+1|0}else{break L3783}}if((gC|0)==1){vf=0;break L3781}}}while(0);a[14176]=1;is(aS);a[14176]=0;if((c[dX>>2]|0)==3){vf=c[dY>>2]|0;break}else{c[13898]=hF;vf=0;break}}else{vf=0}}while(0);c[8510]=vf;do{if((a[vf]|0)==0){uu(vf);c[8510]=0;if((c[8506]|0)!=7){break}c[8506]=0}else{c[8506]=7}}while(0);c[13898]=(c[13898]|0)+1;break L3470}}while(0);while(1){if((a[vb+143960|0]|0)==(a[gz+(vb+vd|0)|0]|0)){vg=vd;vh=vc}else{if((vb|0)!=4){vi=0;vj=0;vk=tv;break}vg=vd-1|0;vh=1}hF=vb+1|0;if((hF|0)<(vh+tt|0)){vb=hF;vc=vh;vd=vg}else{b7=2752;break}}do{if((b7|0)==2752){b7=0;if((vh|0)==0){if(!((vb|0)==7|(vb|0)==3)){vi=0;vj=0;vk=tv;break}}c[13898]=tq+1;if((a[26192]&1)==0){break L3470}hX(aU);break L3470}}while(0);while(1){if((a[vi+143888|0]|0)==(a[gz+(vi+vk|0)|0]|0)){vl=vk;vm=vj}else{if((vi|0)!=2){tz=tv;tA=0;break L3440}vl=vk-1|0;vm=1}hF=vi+1|0;if((hF|0)<(vm+tt|0)){vi=hF;vj=vm;vk=vl}else{break}}if((vm|0)==0){if(!((vi|0)==5|(vi|0)==1)){tz=tv;tA=0;break L3440}}hF=tq+1|0;c[13898]=hF;L3821:do{if((hF|0)<(tr|0)){if((a[ts+(hF*40&-1)|0]&1)==0){break}gH=c[ts+(hF*40&-1)+36>>2]|0;gG=ts+(hF*40&-1)+32|0;gE=0;while(1){if((gE|0)>=(gH|0)){b7=2767;break}if((a[gz+((c[gG>>2]|0)+gE|0)|0]|0)==(a[gE+103664|0]|0)){gE=gE+1|0}else{vn=0;break}}if((b7|0)==2767){b7=0;if((gE|0)==1){break}else{vn=0}}while(1){if((vn|0)>=(gH|0)){break}if((a[gz+((c[gG>>2]|0)+vn|0)|0]|0)==(a[vn+95280|0]|0)){vn=vn+1|0}else{break L3821}}if((vn|0)!=2){break}vo=tq+2|0;c[13898]=vo;if((vo|0)>=(tr|0)){b7=5205;break L27}L3835:do{if((a[ts+(vo*40&-1)|0]&1)!=0){gG=c[ts+(vo*40&-1)+36>>2]|0;gH=ts+(vo*40&-1)+32|0;gE=0;while(1){if((gE|0)>=(gG|0)){break}if((a[gz+((c[gH>>2]|0)+gE|0)|0]|0)==(a[gE+103664|0]|0)){gE=gE+1|0}else{break L3835}}if((gE|0)==1){b7=5206;break L27}}}while(0);dl(a1,0);fR(a1,aX,aZ,143600);gH=~~+h[aX>>3];gG=~~+h[aZ>>3];hK=gG|gH;if((a[26192]&1)!=0){if((hK|0)<0){break L3470}hX(a0)}if((hK|0)>-1){c[dR>>2]=gH;vp=gG}else{c[dR>>2]=c[6558];vp=c[6559]|0}c[dS>>2]=vp;hX(a0);break L3470}}while(0);if((a[26192]&1)!=0){break}c[dT>>2]=c[6558];c[dU>>2]=c[6559];hX(aW)}}while(0);gz=c[13898]|0;hF=c[8272]|0;if((gz|0)>=(hF|0)){break L44}tq=gz;tr=hF;ts=c[1054]|0}if((b7|0)==2503){b7=0;tz=c[tu>>2]|0;tA=1}if((tq|0)>=(tr|0)){break}if(tA){b7=5207;break L27}hF=c[10036]|0;gz=0;while(1){if((gz|0)>=(tt|0)){break}if((a[hF+(gz+tz|0)|0]|0)==(a[gz+103664|0]|0)){gz=gz+1|0}else{b7=5208;break L27}}if((gz|0)!=1){b7=5209;break L27}}else if((gD|0)==45){ll()}else if((gD|0)==56){hF=gv+1|0;c[13898]=hF;L3865:do{if((hF|0)<(c[8272]|0)){gG=gw+(hF*40&-1)|0;gH=gw+(hF*40&-1)+36|0;L3867:do{if((a[gG]&1)==0){vq=gw+(hF*40&-1)+32|0}else{hK=c[gH>>2]|0;nd=gw+(hF*40&-1)+32|0;hG=0;while(1){if((hG|0)>=(hK|0)){break}if((a[gB+((c[nd>>2]|0)+hG|0)|0]|0)==(a[hG+103664|0]|0)){hG=hG+1|0}else{vq=nd;break L3867}}if((hG|0)==1){break L3865}else{vq=nd}}}while(0);c[8764]=0;hK=c[gH>>2]|0;L3875:do{if((a[gG]&1)!=0&(hK|0)>0){nh=0;hR=0;hw=c[vq>>2]|0;while(1){if((a[nh+148408|0]|0)==(a[gB+(nh+hw|0)|0]|0)){vr=hw;vs=hR}else{if((nh|0)!=2){break L3875}vr=hw-1|0;vs=1}hC=nh+1|0;if((hC|0)<(vs+hK|0)){nh=hC;hR=vs;hw=vr}else{break}}if((vs|0)==0){if(!((nh|0)==1|(nh|0)==5)){break}}c[8764]=2;c[13898]=gv+2}}while(0);hK=is(aM)|0;gG=c[hK>>2]|0;if((gG|0)==1){vt=+(c[hK+8>>2]|0)}else if((gG|0)==2){vt=+h[hK+8>>3]}else if((gG|0)==3){vt=+uz(c[hK+8>>2]|0,0)}else{b7=2816;break L27}if((c[d7>>2]|0)==3){uu(c[d8>>2]|0);c[d7>>2]=1}h[4384]=vt;hK=c[13898]|0;if((c[8272]|0)<=(hK|0)){break L44}gG=c[1054]|0;if((a[gG+(hK*40&-1)|0]&1)==0){break L44}gH=c[gG+(hK*40&-1)+36>>2]|0;hw=gG+(hK*40&-1)+32|0;hR=c[10036]|0;nd=0;while(1){if((nd|0)>=(gH|0)){break}if((a[hR+((c[hw>>2]|0)+nd|0)|0]|0)==(a[nd+148464|0]|0)){nd=nd+1|0}else{break L44}}if((nd|0)!=1){break L44}c[6588]=0;hw=hK+1|0;c[13898]=hw;gH=c[gG+(hw*40&-1)+36>>2]|0;L3903:do{if((a[gG+(hw*40&-1)|0]&1)!=0&(gH|0)>0){hG=0;hC=0;hB=c[gG+(hw*40&-1)+32>>2]|0;while(1){if((a[hG+148408|0]|0)==(a[hR+(hG+hB|0)|0]|0)){vu=hB;vv=hC}else{if((hG|0)!=2){break L3903}vu=hB-1|0;vv=1}hS=hG+1|0;if((hS|0)<(vv+gH|0)){hG=hS;hC=vv;hB=vu}else{break}}if((vv|0)==0){if(!((hG|0)==1|(hG|0)==5)){break}}c[6588]=2;c[13898]=hK+2}}while(0);hK=is(aL)|0;gH=c[hK>>2]|0;if((gH|0)==1){vw=+(c[hK+8>>2]|0)}else if((gH|0)==2){vw=+h[hK+8>>3]}else if((gH|0)==3){vw=+uz(c[hK+8>>2]|0,0)}else{b7=2838;break L27}if((c[d9>>2]|0)==3){uu(c[eb>>2]|0);c[d9>>2]=1}h[3296]=vw;hK=c[13898]|0;if((c[8272]|0)<=(hK|0)){break L44}gH=c[1054]|0;if((a[gH+(hK*40&-1)|0]&1)==0){break L44}hR=c[gH+(hK*40&-1)+36>>2]|0;hw=gH+(hK*40&-1)+32|0;gG=c[10036]|0;nd=0;while(1){if((nd|0)>=(hR|0)){break}if((a[gG+((c[hw>>2]|0)+nd|0)|0]|0)==(a[nd+148464|0]|0)){nd=nd+1|0}else{break L44}}if((nd|0)!=1){break L44}c[1057]=0;hw=hK+1|0;c[13898]=hw;hR=c[gH+(hw*40&-1)+36>>2]|0;L3931:do{if((a[gH+(hw*40&-1)|0]&1)!=0&(hR|0)>0){hB=0;hC=0;nh=c[gH+(hw*40&-1)+32>>2]|0;while(1){if((a[hB+148408|0]|0)==(a[gG+(hB+nh|0)|0]|0)){vx=nh;vy=hC}else{if((hB|0)!=2){break L3931}vx=nh-1|0;vy=1}hS=hB+1|0;if((hS|0)<(vy+hR|0)){hB=hS;hC=vy;nh=vx}else{break}}if((vy|0)==0){if(!((hB|0)==1|(hB|0)==5)){break}}c[1057]=2;c[13898]=hK+2}}while(0);hK=is(aK)|0;hR=c[hK>>2]|0;if((hR|0)==1){vz=+(c[hK+8>>2]|0)}else if((hR|0)==2){vz=+h[hK+8>>3]}else if((hR|0)==3){vz=+uz(c[hK+8>>2]|0,0)}else{b7=2860;break L27}if((c[ec>>2]|0)==3){uu(c[ed>>2]|0);c[ec>>2]=1}h[531]=vz;hK=c[13898]|0;if((c[8272]|0)<=(hK|0)){break L44}hR=c[1054]|0;if((a[hR+(hK*40&-1)|0]&1)==0){break L44}gG=c[hR+(hK*40&-1)+36>>2]|0;hw=hR+(hK*40&-1)+32|0;gH=c[10036]|0;nd=0;while(1){if((nd|0)>=(gG|0)){break}if((a[gH+((c[hw>>2]|0)+nd|0)|0]|0)==(a[nd+148464|0]|0)){nd=nd+1|0}else{break L44}}if((nd|0)!=1){break L44}c[14091]=0;hw=hK+1|0;c[13898]=hw;gG=c[hR+(hw*40&-1)+36>>2]|0;L3959:do{if((a[hR+(hw*40&-1)|0]&1)!=0&(gG|0)>0){nh=0;hC=0;hG=c[hR+(hw*40&-1)+32>>2]|0;while(1){if((a[nh+148408|0]|0)==(a[gH+(nh+hG|0)|0]|0)){vA=hG;vB=hC}else{if((nh|0)!=2){break L3959}vA=hG-1|0;vB=1}hS=nh+1|0;if((hS|0)<(vB+gG|0)){nh=hS;hC=vB;hG=vA}else{break}}if((vB|0)==0){if(!((nh|0)==1|(nh|0)==5)){break}}c[14091]=2;c[13898]=hK+2}}while(0);hK=is(aN)|0;gG=c[hK>>2]|0;if((gG|0)==1){vC=+(c[hK+8>>2]|0)}else if((gG|0)==2){vC=+h[hK+8>>3]}else if((gG|0)==3){vC=+uz(c[hK+8>>2]|0,0)}else{b7=2882;break L27}if((c[ee>>2]|0)==3){uu(c[ef>>2]|0);c[ee>>2]=1}h[7048]=vC;break L44}}while(0);h[7048]=0.0;h[531]=0.0;h[3296]=0.0;h[4384]=0.0}else if((gD|0)==57){hF=gv+1|0;c[13898]=hF;L3982:do{if((hF|0)<(c[8272]|0)){L3984:do{if((a[gw+(hF*40&-1)|0]&1)!=0){gz=c[gw+(hF*40&-1)+36>>2]|0;hK=gw+(hF*40&-1)+32|0;gG=0;while(1){if((gG|0)>=(gz|0)){break}if((a[gB+((c[hK>>2]|0)+gG|0)|0]|0)==(a[gG+103664|0]|0)){gG=gG+1|0}else{break L3984}}if((gG|0)==1){b7=2892;break L3982}}}while(0);hK=is(aH)|0;gz=c[hK>>2]|0;if((gz|0)==1){vD=+(c[hK+8>>2]|0)}else if((gz|0)==2){vD=+h[hK+8>>3]}else if((gz|0)==3){vD=+uz(c[hK+8>>2]|0,0)}else{b7=2897;break L27}if((c[eg>>2]|0)==3){uu(c[eh>>2]|0);c[eg>>2]=1}g[184]=vD;vE=c[13898]|0;if((c[8272]|0)<=(vE|0)){b7=5210;break L27}hK=c[1054]|0;if((a[hK+(vE*40&-1)|0]&1)==0){b7=5211;break L27}gz=c[hK+(vE*40&-1)+36>>2]|0;nh=hK+(vE*40&-1)+32|0;hK=c[10036]|0;gH=0;while(1){if((gH|0)>=(gz|0)){break}if((a[hK+((c[nh>>2]|0)+gH|0)|0]|0)==(a[gH+148464|0]|0)){gH=gH+1|0}else{b7=5212;break L27}}if((gH|0)!=1){b7=5213;break L27}c[13898]=vE+1;nh=is(aJ)|0;hK=c[nh>>2]|0;if((hK|0)==1){vF=+(c[nh+8>>2]|0)}else if((hK|0)==2){vF=+h[nh+8>>3]}else if((hK|0)==3){vF=+uz(c[nh+8>>2]|0,0)}else{b7=2911;break L27}if((c[ei>>2]|0)==3){uu(c[ej>>2]|0);c[ei>>2]=1}vG=vF}else{b7=2892}}while(0);if((b7|0)==2892){b7=0;g[184]=0.0;vG=0.0}g[44]=vG}else if((gD|0)==58){vH=gv+1|0;c[13898]=vH;if((a[33512]&1)!=0){b7=2917;break L27}L4019:do{if((vH|0)<(c[8272]|0)){L4021:do{if((a[gw+(vH*40&-1)|0]&1)!=0){hF=c[gw+(vH*40&-1)+36>>2]|0;nh=gw+(vH*40&-1)+32|0;hK=0;while(1){if((hK|0)>=(hF|0)){b7=2923;break}if((a[gB+((c[nh>>2]|0)+hK|0)|0]|0)==(a[hK+103664|0]|0)){hK=hK+1|0}else{vI=0;break}}if((b7|0)==2923){b7=0;if((hK|0)==1){b7=2924;break L4019}else{vI=0}}while(1){if((vI|0)>=(hF|0)){break}if((a[gB+((c[nh>>2]|0)+vI|0)|0]|0)==(a[vI+103664|0]|0)){vI=vI+1|0}else{break L4021}}if((vI|0)==1){b7=2931;break L27}}}while(0);a[14176]=1;is(aE);a[14176]=0;if((c[ek>>2]|0)!=3){b7=2930;break L27}gH=c[el>>2]|0;c[aF>>2]=gH;if((gH|0)==0){b7=2933;break L27}iQ(aF);gH=c[aF>>2]|0;lj(gH);nh=c[8244]|0;if((gH|0)==(nh|0)){break}if((gH|0)==0){vJ=nh}else{uu(gH);vJ=c[8244]|0}c[aF>>2]=vJ}else{b7=2924}}while(0);do{if((b7|0)==2924){b7=0;lj(0);gH=c[8244]|0;if((gH|0)==0){break}uu(gH);c[8244]=0}}while(0);c[7271]=-1}else if((gD|0)==59){c[13898]=gv+1;if((a[32936]&1)!=0){break}a[32936]=1;if((a[30528]&1)!=0){break}b[12272]=116;w=121;a[24595]=w&255;w=w>>8;a[24596|0]=w&255;if((a[37400]&1)==0){break}aI(149344,51,1,c[m>>2]|0)}else if((gD|0)==61){gH=gv+1|0;c[13898]=gH;nh=c[8272]|0;L4048:do{if((gH|0)<(nh|0)){hF=a[gw+(gH*40&-1)|0]|0;L4050:do{if((hF&1)!=0){hK=c[gw+(gH*40&-1)+36>>2]|0;gG=gw+(gH*40&-1)+32|0;gz=0;while(1){if((gz|0)>=(hK|0)){break}if((a[gB+((c[gG>>2]|0)+gz|0)|0]|0)==(a[gz+103664|0]|0)){gz=gz+1|0}else{break L4050}}if((gz|0)==1){break L4048}}}while(0);gG=gv+2|0;vK=gH;hK=nh;hw=gw;hR=hF;L4057:while(1){nd=(hR&1)==0;hG=c[hw+(vK*40&-1)+36>>2]|0;L4059:do{if(nd){vL=c[10036]|0;vM=hw+(vK*40&-1)+32|0}else{hC=hw+(vK*40&-1)+32|0;hB=c[10036]|0;hS=0;while(1){if((hS|0)>=(hG|0)){break}if((a[hB+((c[hC>>2]|0)+hS|0)|0]|0)==(a[hS+103664|0]|0)){hS=hS+1|0}else{vL=hB;vM=hC;break L4059}}if((hS|0)==1){break L4057}else{vL=hB;vM=hC}}}while(0);gz=c[vM>>2]|0;gx=(hG|0)>0;gy=23264;gA=95280;L4067:while(1){L4069:do{if(!nd){if(gx){ne=0;ho=0;gF=gz;while(1){ng=a[gA+ne|0]|0;if(ng<<24>>24==(a[vL+(ne+gF|0)|0]|0)){vN=gF;vO=ho}else{if(ng<<24>>24!=36){break L4069}vN=gF-1|0;vO=1}vP=ne+1|0;if((vP|0)<(vO+hG|0)){ne=vP;ho=vO;gF=vN}else{break}}if((vO|0)==0){vQ=vP}else{vR=gy;break L4067}}else{vQ=0}gF=a[gA+vQ|0]|0;if((gF<<24>>24|0)==36|(gF<<24>>24|0)==0){vR=gy;break L4067}}}while(0);hC=gy+8|0;hB=c[hC>>2]|0;if((hB|0)==0){vR=hC;break}else{gy=hC;gA=hB}}gA=c[vR+4>>2]|0;L4082:do{if((gA|0)==1){c[13898]=vK+1;if((i9(30632)|0)!=0){break L44}gy=(c[13898]|0)-1|0;c[13898]=gy;if((gy|0)!=(gG|0)){vS=gy;break}c[7662]=1;vS=gG}else if((gA|0)==2){vT=vK+1|0;c[13898]=vT;if((vT|0)>=(hK|0)){b7=5216;break L27}L4088:do{if((a[hw+(vT*40&-1)|0]&1)!=0){gy=c[hw+(vT*40&-1)+36>>2]|0;hG=hw+(vT*40&-1)+32|0;gz=0;while(1){if((gz|0)>=(gy|0)){break}if((a[vL+((c[hG>>2]|0)+gz|0)|0]|0)==(a[gz+103664|0]|0)){gz=gz+1|0}else{break L4088}}if((gz|0)==1){b7=5217;break L27}}}while(0);hG=is(aC)|0;gy=c[hG>>2]|0;if((gy|0)==1){vU=+(c[hG+8>>2]|0)}else if((gy|0)==2){vU=+h[hG+8>>3]}else if((gy|0)==3){vU=+uz(c[hG+8>>2]|0,0)}else{b7=2983;break L27}if((c[em>>2]|0)==3){uu(c[en>>2]|0);c[em>>2]=1}c[7664]=~~vU;vV=c[13898]|0;if((c[8272]|0)<=(vV|0)){b7=5218;break L27}hG=c[1054]|0;if((a[hG+(vV*40&-1)|0]&1)==0){b7=5219;break L27}gy=c[hG+(vV*40&-1)+36>>2]|0;gx=hG+(vV*40&-1)+32|0;hG=c[10036]|0;nd=0;while(1){if((nd|0)>=(gy|0)){break}if((a[hG+((c[gx>>2]|0)+nd|0)|0]|0)==(a[nd+148464|0]|0)){nd=nd+1|0}else{b7=5220;break L27}}if((nd|0)!=1){b7=5221;break L27}c[13898]=vV+1;gx=is(aB)|0;hG=c[gx>>2]|0;if((hG|0)==1){vW=+(c[gx+8>>2]|0)}else if((hG|0)==2){vW=+h[gx+8>>3]}else if((hG|0)==3){vW=+uz(c[gx+8>>2]|0,0)}else{b7=2997;break L27}if((c[eo>>2]|0)==3){uu(c[ep>>2]|0);c[eo>>2]=1}c[7665]=~~vW;gx=(c[13898]|0)-1|0;c[13898]=gx;vS=gx}else if((gA|0)==3){a[30641]=102;vS=vK}else if((gA|0)==4){a[30641]=98;vS=vK}else if((gA|0)==5){a[30641]=97;vS=vK}else if((gA|0)==6){a[30641]=100;vS=vK}else if((gA|0)==7){vX=vK+1|0;c[13898]=vX;gx=c[hw+(vX*40&-1)+36>>2]|0;hG=c[hw+(vX*40&-1)+32>>2]|0;gy=(a[hw+(vX*40&-1)|0]&1)==0;if((gx|0)>0&(gy^1)){vY=0;vZ=0;v_=hG}else{b7=5222;break L27}while(1){if((a[vY+170048|0]|0)==(a[vL+(vY+v_|0)|0]|0)){v$=v_;v0=vZ}else{if((vY|0)!=1){break}v$=v_-1|0;v0=1}hB=vY+1|0;if((hB|0)<(v0+gx|0)){vY=hB;vZ=v0;v_=v$}else{b7=3010;break}}do{if((b7|0)==3010){b7=0;if((v0|0)==0){if(!((vY|0)==0|(vY|0)==5)){break}}a[30639]=98;vS=vX;break L4082}}while(0);if(gy){b7=5223;break L27}else{v1=0;v2=0;v3=hG}while(1){if((a[v1+149304|0]|0)==(a[vL+(v1+v3|0)|0]|0)){v4=v3;v5=v2}else{if((v1|0)!=1){v6=0;v7=0;v8=hG;break}v4=v3-1|0;v5=1}nd=v1+1|0;if((nd|0)<(v5+gx|0)){v1=nd;v2=v5;v3=v4}else{b7=3018;break}}do{if((b7|0)==3018){b7=0;if((v5|0)==0){if(!((v1|0)==0|(v1|0)==6)){v6=0;v7=0;v8=hG;break}}a[30639]=99;vS=vX;break L4082}}while(0);while(1){if((a[v6+169576|0]|0)==(a[vL+(v6+v8|0)|0]|0)){v9=v8;wa=v7}else{if((v6|0)!=1){b7=5224;break L27}v9=v8-1|0;wa=1}hG=v6+1|0;if((hG|0)<(wa+gx|0)){v6=hG;v7=wa;v8=v9}else{break}}if((wa|0)==0){if(!((v6|0)==0|(v6|0)==3)){b7=5225;break L27}}a[30639]=114;vS=vX}else if((gA|0)==10){a[30642]=49;vS=vK}else if((gA|0)==11){a[30642]=52;vS=vK}else if((gA|0)==12){a[30632]=98;a[30633]=0;c[12890]=352;c[10058]=352;c[5094]=1;vS=vK}else if((gA|0)==8){a[30640]=1;vS=vK}else if((gA|0)==9){a[30640]=0;vS=vK}else if((gA|0)==13){gx=vK+1|0;c[13898]=gx;c[7661]=-1;L4162:do{if((a[hw+(gx*40&-1)|0]&1)==0){b7=3045}else{hG=c[10810]|0;if((hG|0)==0){break}gy=(hK|0)>(gx|0);nd=hw+(gx*40&-1)+36|0;hB=hw+(gx*40&-1)+32|0;hC=hG;L4165:while(1){hG=c[hC+4>>2]|0;L4167:do{if(gy){hS=c[nd>>2]|0;gF=0;while(1){if((gF|0)>=(hS|0)){break}if((a[vL+((c[hB>>2]|0)+gF|0)|0]|0)==(a[hG+gF|0]|0)){gF=gF+1|0}else{break L4167}}if((a[hG+gF|0]|0)==0){break L4165}}}while(0);hG=c[hC>>2]|0;if((hG|0)==0){break L4162}else{hC=hG}}if((a[hC+8|0]&1)!=0){break}if((c[hC+16>>2]|0)==1){b7=3045}}}while(0);do{if((b7|0)==3045){b7=0;gx=is(aD)|0;hB=c[gx>>2]|0;if((hB|0)==1){wb=+(c[gx+8>>2]|0)}else if((hB|0)==2){wb=+h[gx+8>>3]}else if((hB|0)==3){wb=+uz(c[gx+8>>2]|0,0)}else{b7=3049;break L27}if((c[eq>>2]|0)==3){uu(c[er>>2]|0);c[eq>>2]=1}gx=~~wb;c[7661]=gx;if((gx|0)>=-1){break}c[7661]=-1}}while(0);gx=(c[13898]|0)-1|0;c[13898]=gx;vS=gx}else if((gA|0)==14){c[7661]=0;vS=vK}else if((gA|0)==15|(gA|0)==16|(gA|0)==17|(gA|0)==18){if((a[37400]&1)==0){wc=vK;b7=3058;break}uh(vK,168664,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);wc=c[13898]|0;b7=3058}else if((gA|0)==19|(gA|0)==20){wc=vK;b7=3058}else if((gA|0)==21|(gA|0)==22){c[7662]=0;vS=vK}else if((gA|0)==23){wd=vK+1|0;c[13898]=wd;if((hK|0)<=(wd|0)){b7=5226;break L27}gx=(a[hw+(wd*40&-1)|0]&1)==0;if(gx){b7=5227;break L27}hB=c[hw+(wd*40&-1)+36>>2]|0;nd=hw+(wd*40&-1)+32|0;gy=0;while(1){if((gy|0)>=(hB|0)){b7=3065;break}if((a[vL+((c[nd>>2]|0)+gy|0)|0]|0)==(a[gy+105792|0]|0)){gy=gy+1|0}else{break}}do{if((b7|0)==3065){b7=0;if((gy|0)!=4){break}c[7663]=4;vS=wd;break L4082}}while(0);if(gx){b7=5228;break L27}gy=c[hw+(wd*40&-1)+36>>2]|0;nd=hw+(wd*40&-1)+32|0;hB=0;while(1){if((hB|0)>=(gy|0)){b7=3071;break}if((a[vL+((c[nd>>2]|0)+hB|0)|0]|0)==(a[hB+167728|0]|0)){hB=hB+1|0}else{break}}do{if((b7|0)==3071){b7=0;if((hB|0)!=7){break}c[7663]=5;vS=wd;break L4082}}while(0);if(gx){b7=5229;break L27}hB=c[hw+(wd*40&-1)+36>>2]|0;nd=hw+(wd*40&-1)+32|0;gy=0;while(1){if((gy|0)>=(hB|0)){b7=3077;break}if((a[vL+((c[nd>>2]|0)+gy|0)|0]|0)==(a[gy+100616|0]|0)){gy=gy+1|0}else{break}}do{if((b7|0)==3077){b7=0;if((gy|0)!=6){break}c[7663]=6;vS=wd;break L4082}}while(0);if(gx){b7=5230;break L27}gy=c[hw+(wd*40&-1)+36>>2]|0;nd=hw+(wd*40&-1)+32|0;hB=0;while(1){if((hB|0)>=(gy|0)){b7=3083;break}if((a[vL+((c[nd>>2]|0)+hB|0)|0]|0)==(a[hB+103256|0]|0)){hB=hB+1|0}else{break}}do{if((b7|0)==3083){b7=0;if((hB|0)!=3){break}c[7663]=7;vS=wd;break L4082}}while(0);if(gx){b7=5231;break L27}hB=c[hw+(wd*40&-1)+36>>2]|0;nd=hw+(wd*40&-1)+32|0;gy=0;while(1){if((gy|0)>=(hB|0)){b7=3089;break}if((a[vL+((c[nd>>2]|0)+gy|0)|0]|0)==(a[gy+99528|0]|0)){gy=gy+1|0}else{break}}do{if((b7|0)==3089){b7=0;if((gy|0)!=3){break}c[7663]=8;vS=wd;break L4082}}while(0);if(gx){b7=5232;break L27}gy=c[hw+(wd*40&-1)+36>>2]|0;nd=hw+(wd*40&-1)+32|0;hB=0;while(1){if((hB|0)>=(gy|0)){b7=3095;break}if((a[vL+((c[nd>>2]|0)+hB|0)|0]|0)==(a[hB+166192|0]|0)){hB=hB+1|0}else{break}}do{if((b7|0)==3095){b7=0;if((hB|0)!=2){break}c[7663]=0;vS=wd;break L4082}}while(0);if(gx){b7=5233;break L27}hB=c[hw+(wd*40&-1)+36>>2]|0;nd=hw+(wd*40&-1)+32|0;gy=0;while(1){if((gy|0)>=(hB|0)){b7=3101;break}if((a[vL+((c[nd>>2]|0)+gy|0)|0]|0)==(a[gy+165720|0]|0)){gy=gy+1|0}else{break}}do{if((b7|0)==3101){b7=0;if((gy|0)!=2){break}c[7663]=1;vS=wd;break L4082}}while(0);if(gx){b7=5234;break L27}gy=c[hw+(wd*40&-1)+36>>2]|0;nd=hw+(wd*40&-1)+32|0;hB=0;while(1){if((hB|0)>=(gy|0)){b7=3107;break}if((a[vL+((c[nd>>2]|0)+hB|0)|0]|0)==(a[hB+165344|0]|0)){hB=hB+1|0}else{break}}do{if((b7|0)==3107){b7=0;if((hB|0)!=2){break}c[7663]=2;vS=wd;break L4082}}while(0);if(gx){b7=5235;break L27}hB=c[hw+(wd*40&-1)+36>>2]|0;nd=hw+(wd*40&-1)+32|0;gy=0;while(1){if((gy|0)>=(hB|0)){break}if((a[vL+((c[nd>>2]|0)+gy|0)|0]|0)==(a[gy+164912|0]|0)){gy=gy+1|0}else{b7=5236;break L27}}if((gy|0)!=2){b7=5237;break L27}c[7663]=3;vS=wd}else{b7=3116;break L27}}while(0);if((b7|0)==3058){b7=0;c[7662]=1;vS=wc}gA=vS+1|0;c[13898]=gA;nd=c[8272]|0;if((gA|0)>=(nd|0)){break}hB=c[1054]|0;vK=gA;hK=nd;hw=hB;hR=a[hB+(gA*40&-1)|0]|0}if((a[30641]|0)!=97|(a[30639]|0)==98){break L44}a[30641]=102;break L44}}while(0);b[15316]=115;a[30639]=98;a[30640]=0;a[30641]=97;a[30642]=52;c[7661]=0;c[7663]=4;c[7664]=1;c[7665]=1;c[7662]=1}else if((gD|0)==60){nh=gv+1|0;c[13898]=nh;gH=c[8272]|0;L4272:do{if((nh|0)<(gH|0)){hR=a[gw+(nh*40&-1)|0]|0;L4274:do{if((hR&1)==0){we=0;wf=0;wg=nh;wh=gH;wi=gw;wj=hR}else{hw=c[gw+(nh*40&-1)+36>>2]|0;hK=gw+(nh*40&-1)+32|0;gG=0;while(1){if((gG|0)>=(hw|0)){break}if((a[gB+((c[hK>>2]|0)+gG|0)|0]|0)==(a[gG+103664|0]|0)){gG=gG+1|0}else{we=0;wf=0;wg=nh;wh=gH;wi=gw;wj=hR;break L4274}}if((gG|0)==1){b7=3127;break L4272}else{we=0;wf=0;wg=nh;wh=gH;wi=gw;wj=hR}}}while(0);L4280:while(1){hR=(wj&1)==0;hK=c[wi+(wg*40&-1)+36>>2]|0;L4282:do{if(hR){wk=c[10036]|0;wl=wi+(wg*40&-1)+32|0}else{hw=wi+(wg*40&-1)+32|0;hF=c[10036]|0;gA=0;while(1){if((gA|0)>=(hK|0)){break}if((a[hF+((c[hw>>2]|0)+gA|0)|0]|0)==(a[gA+103664|0]|0)){gA=gA+1|0}else{wk=hF;wl=hw;break L4282}}if((gA|0)==1){wm=we;break L4280}else{wk=hF;wl=hw}}}while(0);gG=c[wl>>2]|0;gy=(hK|0)>0;hB=23456;nd=140016;L4290:while(1){L4292:do{if(!hR){if(gy){gx=0;gz=0;hG=gG;while(1){gC=a[nd+gx|0]|0;if(gC<<24>>24==(a[wk+(gx+hG|0)|0]|0)){wn=hG;wo=gz}else{if(gC<<24>>24!=36){break L4292}wn=hG-1|0;wo=1}wp=gx+1|0;if((wp|0)<(wo+hK|0)){gx=wp;gz=wo;hG=wn}else{break}}if((wo|0)==0){wq=wp}else{wr=hB;break L4290}}else{wq=0}hG=a[nd+wq|0]|0;if((hG<<24>>24|0)==36|(hG<<24>>24|0)==0){wr=hB;break L4290}}}while(0);hw=hB+8|0;hF=c[hw>>2]|0;if((hF|0)==0){wr=hw;break}else{hB=hw;nd=hF}}nd=c[wr+4>>2]|0;L4305:do{if((nd|0)==1){a[20668]=112;ws=wf;wt=we;wu=wg}else if((nd|0)==2){a[20668]=110;ws=wf;wt=we;wu=wg}else if((nd|0)==3){c[5163]=103;ws=wf;wt=we;wu=wg}else if((nd|0)==13){c[13898]=wg+1;hB=is(aA)|0;hK=c[hB>>2]|0;if((hK|0)==1){wv=+(c[hB+8>>2]|0)}else if((hK|0)==2){wv=+h[hB+8>>3]}else if((hK|0)==3){wv=+uz(c[hB+8>>2]|0,0)}else{b7=3153;break L27}if((c[es>>2]|0)==3){uu(c[et>>2]|0);c[es>>2]=1}h[2705]=wv;hB=(c[13898]|0)-1|0;c[13898]=hB;ws=wf;wt=we;wu=hB}else if((nd|0)==4){hB=c[7640]|0;if((hB|0)==48){c[5163]=114;ws=wf;wt=we;wu=wg;break}else{c[5163]=hB;ws=wf;wt=we;wu=wg;break}}else if((nd|0)==5){if((wf|0)!=0){b7=3161;break L27}c[13898]=wg+1;hB=is(ay)|0;hK=c[hB>>2]|0;if((hK|0)==1){ww=+(c[hB+8>>2]|0)}else if((hK|0)==2){ww=+h[hB+8>>3]}else if((hK|0)==3){ww=+uz(c[hB+8>>2]|0,0)}else{b7=3166;break L27}if((c[eu>>2]|0)==3){uu(c[ev>>2]|0);c[eu>>2]=1}hB=~~ww;if((((hB|0)>-1?hB:-hB|0)|0)>=(c[5162]|0)){b7=3170;break L27}c[5164]=hB;hB=c[13898]|0;L4333:do{if((c[8272]|0)>(hB|0)){hK=c[1054]|0;if((a[hK+(hB*40&-1)|0]&1)==0){break}gG=c[hK+(hB*40&-1)+36>>2]|0;gy=hK+(hB*40&-1)+32|0;hK=c[10036]|0;hR=0;while(1){if((hR|0)>=(gG|0)){break}if((a[hK+((c[gy>>2]|0)+hR|0)|0]|0)==(a[hR+148464|0]|0)){hR=hR+1|0}else{break L4333}}if((hR|0)!=1){break}c[13898]=hB+1;gy=is(ax)|0;hK=c[gy>>2]|0;if((hK|0)==1){wx=+(c[gy+8>>2]|0)}else if((hK|0)==2){wx=+h[gy+8>>3]}else if((hK|0)==3){wx=+uz(c[gy+8>>2]|0,0)}else{b7=3182;break L27}if((c[ew>>2]|0)==3){uu(c[ex>>2]|0);c[ew>>2]=1}gy=~~wx;if((((gy|0)>-1?gy:-gy|0)|0)>=(c[5162]|0)){b7=3186;break L27}c[5165]=gy;gy=c[13898]|0;L4350:do{if((c[8272]|0)>(gy|0)){hK=c[1054]|0;if((a[hK+(gy*40&-1)|0]&1)==0){break}gG=c[hK+(gy*40&-1)+36>>2]|0;hF=hK+(gy*40&-1)+32|0;hK=c[10036]|0;hw=0;while(1){if((hw|0)>=(gG|0)){break}if((a[hK+((c[hF>>2]|0)+hw|0)|0]|0)==(a[hw+148464|0]|0)){hw=hw+1|0}else{break L4350}}if((hw|0)!=1){break}c[13898]=gy+1;hF=is(aw)|0;hK=c[hF>>2]|0;if((hK|0)==1){wy=+(c[hF+8>>2]|0)}else if((hK|0)==2){wy=+h[hF+8>>3]}else if((hK|0)==3){wy=+uz(c[hF+8>>2]|0,0)}else{b7=3198;break L27}if((c[eA>>2]|0)==3){uu(c[eB>>2]|0);c[eA>>2]=1}hF=~~wy;if((((hF|0)>-1?hF:-hF|0)|0)>=(c[5162]|0)){b7=3202;break L27}c[5166]=hF;hF=(c[13898]|0)-1|0;c[13898]=hF;c[5163]=114;c[7640]=114;ws=1;wt=we;wu=hF;break L4305}}while(0);hR=gy-1|0;c[13898]=hR;ws=1;wt=we;wu=hR;break L4305}}while(0);hR=hB-1|0;c[13898]=hR;ws=1;wt=we;wu=hR}else if((nd|0)==14){if((wf|0)!=0){b7=3205;break L27}c[5163]=99;h[2706]=.5;h[2707]=-1.5;h[2708]=1.0;hR=wg+1|0;c[13898]=hR;hF=hR;hR=wh;hK=wi;L4371:while(1){gG=a[hK+(hF*40&-1)|0]&1;L4373:do{if((hR|0)>(hF|0)){if(gG<<24>>24==0){wz=0;b7=3212;break}gA=c[hK+(hF*40&-1)+36>>2]|0;hG=hK+(hF*40&-1)+32|0;gz=c[10036]|0;gx=0;while(1){if((gx|0)>=(gA|0)){break}if((a[gz+((c[hG>>2]|0)+gx|0)|0]|0)==(a[gx+74592|0]|0)){gx=gx+1|0}else{wz=gG;b7=3212;break L4373}}if((gx|0)!=5){wA=gA;wB=hG;wC=gG;b7=3222;break}c[13898]=hF+1;gz=is(av)|0;hw=c[gz>>2]|0;if((hw|0)==1){wD=+(c[gz+8>>2]|0)}else if((hw|0)==2){wD=+h[gz+8>>3]}else if((hw|0)==3){wD=+uz(c[gz+8>>2]|0,0)}else{b7=3218;break L27}if((c[eD>>2]|0)==3){uu(c[eE>>2]|0);c[eD>>2]=1}h[2706]=wD}else{wz=gG;b7=3212}}while(0);if((b7|0)==3212){b7=0;wA=c[hK+(hF*40&-1)+36>>2]|0;wB=hK+(hF*40&-1)+32|0;wC=wz;b7=3222}L4391:do{if((b7|0)==3222){b7=0;gG=c[wB>>2]|0;if(!((wA|0)>0&wC<<24>>24!=0)){break L4371}gy=c[10036]|0;gz=0;hw=0;hC=gG;while(1){if((a[gz+158032|0]|0)==(a[gy+(gz+hC|0)|0]|0)){wE=hC;wF=hw}else{if((gz|0)!=3){wG=0;wH=0;wI=gG;break}wE=hC-1|0;wF=1}gC=gz+1|0;if((gC|0)<(wF+wA|0)){gz=gC;hw=wF;hC=wE}else{b7=3228;break}}do{if((b7|0)==3228){b7=0;if((wF|0)==0){if(!((gz|0)==6|(gz|0)==2)){wG=0;wH=0;wI=gG;break}}c[13898]=hF+1;hC=is(au)|0;hw=c[hC>>2]|0;if((hw|0)==1){wJ=+(c[hC+8>>2]|0)}else if((hw|0)==2){wJ=+h[hC+8>>3]}else if((hw|0)==3){wJ=+uz(c[hC+8>>2]|0,0)}else{b7=3234;break L27}if((c[eH>>2]|0)==3){uu(c[eI>>2]|0);c[eH>>2]=1}h[2707]=wJ;break L4391}}while(0);while(1){if((a[wG+156112|0]|0)==(a[gy+(wG+wI|0)|0]|0)){wK=wI;wL=wH}else{if((wG|0)!=3){break L4371}wK=wI-1|0;wL=1}gG=wG+1|0;if((gG|0)<(wL+wA|0)){wG=gG;wH=wL;wI=wK}else{break}}if((wL|0)==0){if(!((wG|0)==2|(wG|0)==10)){break L4371}}c[13898]=hF+1;gy=is(at)|0;gG=c[gy>>2]|0;if((gG|0)==1){wM=+(c[gy+8>>2]|0)}else if((gG|0)==2){wM=+h[gy+8>>3]}else if((gG|0)==3){wM=+uz(c[gy+8>>2]|0,0)}else{b7=3249;break L27}if((c[eF>>2]|0)==3){uu(c[eG>>2]|0);c[eF>>2]=1}h[2708]=wM}}while(0);hF=c[13898]|0;hR=c[8272]|0;hK=c[1054]|0}hK=hF-1|0;c[13898]=hK;ws=1;wt=we;wu=hK}else if((nd|0)==9){if((wf|0)!=0){b7=3255;break L27}c[13898]=wg+1;c[7271]=-1;uu(c[5173]|0);hK=ut(256)|0;if((hK|0)==0){gk();hR=ut(256)|0;if((hR|0)==0){b7=3258;break L27}else{wN=hR}}else{wN=hK}hK=wN;c[5173]=hK;wO=c[13898]|0;hR=c[8272]|0;do{if((wO|0)<(hR|0)){hB=c[1054]|0;if((a[hB+(wO*40&-1)|0]&1)==0){b7=5238;break L27}gy=c[hB+(wO*40&-1)+36>>2]|0;gG=hB+(wO*40&-1)+32|0;gz=c[10036]|0;hC=0;while(1){if((hC|0)>=(gy|0)){b7=3264;break}if((a[gz+((c[gG>>2]|0)+hC|0)|0]|0)==(a[hC+103664|0]|0)){hC=hC+1|0}else{wP=0;break}}if((b7|0)==3264){b7=0;if((hC|0)==1){wQ=0;wR=hK;b7=3265;break}else{wP=0}}while(1){if((wP|0)>=(gy|0)){break}if((a[gz+((c[gG>>2]|0)+wP|0)|0]|0)==(a[wP+199040|0]|0)){wP=wP+1|0}else{b7=5239;break L27}}if((wP|0)==1){wS=8;wT=0;wU=-1;wV=wO;wW=hR;wX=hB;wY=gz}else{b7=5240;break L27}L4450:while(1){gG=wV+1|0;c[13898]=gG;if((gG|0)>=(wW|0)){wZ=wT;w_=wU;w$=gG;break}L4453:do{if((a[wX+(gG*40&-1)|0]&1)!=0){gy=c[wX+(gG*40&-1)+36>>2]|0;hC=wX+(gG*40&-1)+32|0;hw=0;while(1){if((hw|0)>=(gy|0)){break}if((a[wY+((c[hC>>2]|0)+hw|0)|0]|0)==(a[hw+103664|0]|0)){hw=hw+1|0}else{break L4453}}if((hw|0)==1){wZ=wT;w_=wU;w$=gG;break L4450}}}while(0);gG=is(ap)|0;hC=c[gG>>2]|0;if((hC|0)==1){w0=+(c[gG+8>>2]|0)}else if((hC|0)==2){w0=+h[gG+8>>3]}else if((hC|0)==3){w0=+uz(c[gG+8>>2]|0,0)}else{b7=3282;break L27}if((c[eJ>>2]|0)==3){uu(c[eK>>2]|0);c[eJ>>2]=1}gG=c[13898]|0;L4468:do{if((gG|0)<(c[8272]|0)){hC=c[1054]|0;L4470:do{if((a[hC+(gG*40&-1)|0]&1)!=0){gy=c[hC+(gG*40&-1)+36>>2]|0;gF=hC+(gG*40&-1)+32|0;hG=c[10036]|0;gA=0;while(1){if((gA|0)>=(gy|0)){break}if((a[hG+((c[gF>>2]|0)+gA|0)|0]|0)==(a[gA+103664|0]|0)){gA=gA+1|0}else{break L4470}}if((gA|0)==1){b7=3304;break L4468}}}while(0);a[14176]=1;is(ao);a[14176]=0;if((c[eL>>2]|0)!=3){c[13898]=gG;b7=3304;break}hC=c[eM>>2]|0;if((hC|0)==0){b7=3304;break}if((a[hC]|0)==35){if((ca(hC|0,150416,(v=i,i=i+24|0,c[v>>2]=aq,c[v+8>>2]=ar,c[v+16>>2]=as,v)|0)|0)!=3){b7=3296;break L27}w1=wT;w2=c[as>>2]|0;w3=c[ar>>2]|0;w4=c[aq>>2]|0}else{hw=c[7642]|0;while(1){gF=c[hw>>2]|0;if((gF|0)==0){b7=3302;break L27}if((aY(hC|0,gF|0)|0)==0){break}else{hw=hw+8|0}}gF=c[hw+4>>2]|0;w1=1;w2=gF&255;w3=gF>>>8&255;w4=gF>>>16&255}uu(hC);w5=w1;w6=+(w2|0)/255.0;w7=+(w3|0)/255.0;w8=+(w4|0)/255.0}else{b7=3304}}while(0);if((b7|0)==3304){b7=0;gG=is(an)|0;gF=c[gG>>2]|0;if((gF|0)==1){w9=+(c[gG+8>>2]|0)}else if((gF|0)==2){w9=+h[gG+8>>3]}else if((gF|0)==3){w9=+uz(c[gG+8>>2]|0,0)}else{b7=3308;break L27}if((c[eN>>2]|0)==3){uu(c[eO>>2]|0);c[eN>>2]=1}if(w9<0.0|w9>1.0){b7=3312;break L27}gG=is(am)|0;gF=c[gG>>2]|0;if((gF|0)==1){xa=+(c[gG+8>>2]|0)}else if((gF|0)==2){xa=+h[gG+8>>3]}else if((gF|0)==3){xa=+uz(c[gG+8>>2]|0,0)}else{b7=3317;break L27}if((c[eQ>>2]|0)==3){uu(c[eR>>2]|0);c[eQ>>2]=1}if(xa<0.0|xa>1.0){b7=3321;break L27}gG=is(al)|0;gF=c[gG>>2]|0;if((gF|0)==1){xb=+(c[gG+8>>2]|0)}else if((gF|0)==2){xb=+h[gG+8>>3]}else if((gF|0)==3){xb=+uz(c[gG+8>>2]|0,0)}else{b7=3326;break L27}if((c[eS>>2]|0)==3){uu(c[eT>>2]|0);c[eS>>2]=1}if(xb<0.0|xb>1.0){b7=3330;break L27}else{w5=wT;w6=xb;w7=xa;w8=w9}}gG=wU+1|0;if((gG|0)<(wS|0)){xc=wS;xd=c[5173]|0}else{gF=wS+10|0;hG=db(c[5173]|0,gF<<5,151392)|0;c[5173]=hG;xc=gF;xd=hG}h[xd+(gG<<5)>>3]=w0;h[(c[5173]|0)+(gG<<5)+8>>3]=w8;h[(c[5173]|0)+(gG<<5)+16>>3]=w7;h[(c[5173]|0)+(gG<<5)+24>>3]=w6;xe=c[13898]|0;hG=c[8272]|0;if((hG|0)<=(xe|0)){b7=5241;break L27}gF=c[1054]|0;if((a[gF+(xe*40&-1)|0]&1)==0){b7=5242;break L27}gy=c[gF+(xe*40&-1)+36>>2]|0;hp=gF+(xe*40&-1)+32|0;gx=c[10036]|0;gC=0;while(1){if((gC|0)>=(gy|0)){b7=3339;break}if((a[gx+((c[hp>>2]|0)+gC|0)|0]|0)==(a[gC+131272|0]|0)){gC=gC+1|0}else{xf=0;break}}if((b7|0)==3339){b7=0;if((gC|0)==1){wZ=w5;w_=gG;w$=xe;break}else{xf=0}}while(1){if((xf|0)>=(gy|0)){break}if((a[gx+((c[hp>>2]|0)+xf|0)|0]|0)==(a[xf+148464|0]|0)){xf=xf+1|0}else{b7=5243;break L27}}if((xf|0)==1){wS=xc;wT=w5;wU=gG;wV=xe;wW=hG;wX=gF;wY=gx}else{b7=5244;break L27}}c[5172]=w_+1;gz=c[5173]|0;hB=0;while(1){if((hB|0)>=(w_|0)){break}hp=hB+1|0;if(+h[gz+(hB<<5)>>3]>+h[gz+(hp<<5)>>3]){b7=3347;break L27}else{hB=hp}}m3=+h[gz>>3];m2=1.0/(+h[gz+(w_<<5)>>3]-m3);if((w_|0)>1){hB=1;hp=gz;while(1){gy=hp+(hB<<5)|0;h[gy>>3]=m2*(+h[gy>>3]-m3);gy=hB+1|0;gC=c[5173]|0;if((gy|0)<((c[5172]|0)-1|0)){hB=gy;hp=gC}else{xg=gC;break}}}else{xg=gz}h[xg>>3]=0.0;h[(c[5173]|0)+((c[5172]|0)-1<<5)>>3]=1.0;xh=wZ}else{wQ=0;wR=hK;b7=3265}}while(0);if((b7|0)==3265){while(1){b7=0;h[wR+(wQ<<5)>>3]=+h[23584+(wQ<<5)>>3];h[(c[5173]|0)+(wQ<<5)+8>>3]=+h[23592+(wQ<<5)>>3];h[(c[5173]|0)+(wQ<<5)+16>>3]=+h[23600+(wQ<<5)>>3];h[(c[5173]|0)+(wQ<<5)+24>>3]=+h[23608+(wQ<<5)>>3];hK=wQ+1|0;if((hK|0)>=8){break}wQ=hK;wR=c[5173]|0;b7=3265}c[5172]=8;c[5174]=114;xh=0}c[5163]=100;c[7640]=100;ws=1;wt=xh;wu=c[13898]|0}else if((nd|0)==10){if((wf|0)!=0){b7=3353;break L27}xi=wg+1|0;c[13898]=xi;if((xi|0)>=(wh|0)){xj=xi;b7=5245;break L27}L4552:do{if((a[wi+(xi*40&-1)|0]&1)!=0){hK=c[wi+(xi*40&-1)+36>>2]|0;hR=wi+(xi*40&-1)+32|0;hF=0;while(1){if((hF|0)>=(hK|0)){break}if((a[wk+((c[hR>>2]|0)+hF|0)|0]|0)==(a[hF+103664|0]|0)){hF=hF+1|0}else{break L4552}}if((hF|0)==1){xj=xi;b7=5246;break L27}}}while(0);a[14176]=1;is(aj);a[14176]=0;if((c[eU>>2]|0)!=3){b7=3361;break L27}hR=c[eV>>2]|0;if((hR|0)==0){b7=3363;break L27}c[11856]=0;hK=ey(hR,4,0)|0;uu(hR);if((hK-1|0)>>>0<2){b7=3366;break L27}hK=c[5173]|0;if((hK|0)!=0){uu(hK);c[5173]=0}hK=ut(320)|0;if((hK|0)==0){gk();hR=ut(320)|0;if((hR|0)==0){b7=3371;break L27}else{xk=hR}}else{xk=hK}c[5173]=xk;hK=eC(eW,4)|0;if((hK|0)==-1){b7=3373;break L27}else{xl=10;xm=0;xn=hK}while(1){if((xm|0)<(xl|0)){xo=xl}else{hK=xl+10|0;c[5173]=db(c[5173]|0,hK<<5,151392)|0;xo=hK}if((xn|0)==3){m3=+h[eW>>3];do{if(m3<0.0){xp=0.0}else{if(m3>1.0){xp=1.0;break}xp=m3}}while(0);h[(c[5173]|0)+(xm<<5)+8>>3]=xp;m3=+h[eX>>3];do{if(m3<0.0){xq=0.0}else{if(m3>1.0){xq=1.0;break}xq=m3}}while(0);h[(c[5173]|0)+(xm<<5)+16>>3]=xq;m3=+h[eY>>3];do{if(m3<0.0){xr=0.0}else{if(m3>1.0){xr=1.0;break}xr=m3}}while(0);h[(c[5173]|0)+(xm<<5)+24>>3]=xr;h[(c[5173]|0)+(xm<<5)>>3]=+(xm|0)}else if((xn|0)==4){m3=+h[eX>>3];do{if(m3<0.0){xs=0.0}else{if(m3>1.0){xs=1.0;break}xs=m3}}while(0);h[(c[5173]|0)+(xm<<5)+8>>3]=xs;m3=+h[eY>>3];do{if(m3<0.0){xt=0.0}else{if(m3>1.0){xt=1.0;break}xt=m3}}while(0);h[(c[5173]|0)+(xm<<5)+16>>3]=xt;m3=+h[eZ>>3];do{if(m3<0.0){xu=0.0}else{if(m3>1.0){xu=1.0;break}xu=m3}}while(0);h[(c[5173]|0)+(xm<<5)+24>>3]=xu;h[(c[5173]|0)+(xm<<5)>>3]=+h[eW>>3]}else{b7=3397;break L27}xv=xm+1|0;hF=eC(eW,4)|0;if((hF|0)==-1){break}else{xl=xo;xm=xv;xn=hF}}ez();if((xv|0)==0){b7=5250;break L27}c[5172]=xv;hF=c[5173]|0;hK=0;while(1){if((hK|0)>=(xm|0)){break}hR=hK+1|0;if(+h[hF+(hK<<5)>>3]>+h[hF+(hR<<5)>>3]){b7=3404;break L27}else{hK=hR}}m3=+h[hF>>3];m2=1.0/(+h[hF+(xm<<5)>>3]-m3);if((xm|0)>1){hK=1;hR=hF;while(1){gz=hR+(hK<<5)|0;h[gz>>3]=m2*(+h[gz>>3]-m3);gz=hK+1|0;hp=c[5173]|0;if((gz|0)<((c[5172]|0)-1|0)){hK=gz;hR=hp}else{xw=hp;break}}}else{xw=hF}h[xw>>3]=0.0;h[(c[5173]|0)+((c[5172]|0)-1<<5)>>3]=1.0;c[5163]=100;c[7640]=100;hR=(c[13898]|0)-1|0;c[13898]=hR;ws=1;wt=we;wu=hR}else if((nd|0)==11){if((wf|0)!=0){b7=3409;break L27}c[13898]=wg+1;uF(e_|0,55600,50);uF(55600,89352,50);xx=c[13898]|0;hR=c[5178]|0;if((hR|0)!=0){e1(hR);c[5178]=0}c[11670]=20704;it();hR=c[18070]|0;hK=db(hR,c[hR>>2]<<5|8,105624)|0;c[18070]=0;c[5178]=hK;if((hK|0)==0){b7=3413;break L27}hK=(c[13898]|0)-1|0;hR=c[1054]|0;hp=(c[hR+(hK*40&-1)+36>>2]|0)+(c[hR+(hK*40&-1)+32>>2]|0)|0;hK=db(c[5179]|0,(hp+1|0)-(c[hR+(xx*40&-1)+32>>2]|0)|0,116456)|0;c[5179]=hK;hR=c[(c[1054]|0)+(xx*40&-1)+32>>2]|0;L4617:do{if((hR|0)<(hp|0)){gz=hR;hB=hK;while(1){gC=a[(c[10036]|0)+gz|0]|0;if(gC<<24>>24==0){xy=hB;break L4617}gy=hB+1|0;a[hB]=gC;gC=gz+1|0;if((gC|0)<(hp|0)){gz=gC;hB=gy}else{xy=gy;break}}}else{xy=hK}}while(0);a[xy]=0;c[11670]=0;xz=c[13898]|0;if((c[8272]|0)<=(xz|0)){b7=5251;break L27}hK=c[1054]|0;if((a[hK+(xz*40&-1)|0]&1)==0){b7=5252;break L27}hp=c[hK+(xz*40&-1)+36>>2]|0;hR=hK+(xz*40&-1)+32|0;hK=c[10036]|0;hF=0;while(1){if((hF|0)>=(hp|0)){break}if((a[hK+((c[hR>>2]|0)+hF|0)|0]|0)==(a[hF+148464|0]|0)){hF=hF+1|0}else{b7=5253;break L27}}if((hF|0)!=1){b7=5254;break L27}xA=xz+1|0;c[13898]=xA;hR=c[5256]|0;if((hR|0)!=0){e1(hR);c[5256]=0}c[11670]=21016;it();hR=c[18070]|0;hK=db(hR,c[hR>>2]<<5|8,105624)|0;c[18070]=0;c[5256]=hK;if((hK|0)==0){b7=3427;break L27}hK=(c[13898]|0)-1|0;hR=c[1054]|0;hp=(c[hR+(hK*40&-1)+36>>2]|0)+(c[hR+(hK*40&-1)+32>>2]|0)|0;hK=db(c[5257]|0,(hp+1|0)-(c[hR+(xA*40&-1)+32>>2]|0)|0,116456)|0;c[5257]=hK;hR=c[(c[1054]|0)+(xA*40&-1)+32>>2]|0;L4633:do{if((hR|0)<(hp|0)){hB=hR;gz=hK;while(1){gy=a[(c[10036]|0)+hB|0]|0;if(gy<<24>>24==0){xB=gz;break L4633}gC=gz+1|0;a[gz]=gy;gy=hB+1|0;if((gy|0)<(hp|0)){hB=gy;gz=gC}else{xB=gC;break}}}else{xB=hK}}while(0);a[xB]=0;c[11670]=0;xC=c[13898]|0;if((c[8272]|0)<=(xC|0)){b7=5255;break L27}hK=c[1054]|0;if((a[hK+(xC*40&-1)|0]&1)==0){b7=5256;break L27}hp=c[hK+(xC*40&-1)+36>>2]|0;hR=hK+(xC*40&-1)+32|0;hK=c[10036]|0;hF=0;while(1){if((hF|0)>=(hp|0)){break}if((a[hK+((c[hR>>2]|0)+hF|0)|0]|0)==(a[hF+148464|0]|0)){hF=hF+1|0}else{b7=5257;break L27}}if((hF|0)!=1){b7=5258;break L27}xD=xC+1|0;c[13898]=xD;hR=c[5334]|0;if((hR|0)!=0){e1(hR);c[5334]=0}c[11670]=21328;it();hR=c[18070]|0;hK=db(hR,c[hR>>2]<<5|8,105624)|0;c[18070]=0;c[5334]=hK;if((hK|0)==0){b7=3441;break L27}hK=(c[13898]|0)-1|0;hR=c[1054]|0;hp=(c[hR+(hK*40&-1)+36>>2]|0)+(c[hR+(hK*40&-1)+32>>2]|0)|0;hK=db(c[5335]|0,(hp+1|0)-(c[hR+(xD*40&-1)+32>>2]|0)|0,116456)|0;c[5335]=hK;hR=c[(c[1054]|0)+(xD*40&-1)+32>>2]|0;L4649:do{if((hR|0)<(hp|0)){gz=hR;hB=hK;while(1){gC=a[(c[10036]|0)+gz|0]|0;if(gC<<24>>24==0){xE=hB;break L4649}gy=hB+1|0;a[hB]=gC;gC=gz+1|0;if((gC|0)<(hp|0)){gz=gC;hB=gy}else{xE=gy;break}}}else{xE=hK}}while(0);a[xE]=0;c[11670]=0;uF(55600,e_|0,50);c[5163]=102;c[7640]=102;hK=(c[13898]|0)-1|0;c[13898]=hK;ws=1;wt=we;wu=hK}else if((nd|0)==12){xF=wg+1|0;c[13898]=xF;if((xF|0)>=(wh|0)){b7=5259;break L27}L4656:do{if((a[wi+(xF*40&-1)|0]&1)==0){b7=3495}else{hK=c[wi+(xF*40&-1)+36>>2]|0;hp=wi+(xF*40&-1)+32|0;hR=0;while(1){if((hR|0)>=(hK|0)){b7=3451;break}hF=c[hp>>2]|0;if((a[wk+(hF+hR|0)|0]|0)==(a[hR+103664|0]|0)){hR=hR+1|0}else{xG=hF;break}}if((b7|0)==3451){b7=0;if((hR|0)==1){b7=5260;break L27}xG=c[hp>>2]|0}hF=(hK|0)>0;L4665:do{if(hF){hB=0;while(1){if((a[hB+137240|0]|0)!=(a[wk+(hB+xG|0)|0]|0)){break L4665}gz=hB+1|0;if((gz|0)<(hK|0)){hB=gz}else{xH=gz;b7=3457;break}}}else{xH=0;b7=3457}}while(0);if((b7|0)==3457){b7=0;hp=a[xH+137240|0]|0;if((hp<<24>>24|0)==36|(hp<<24>>24|0)==0){xI=53960;break}}L4672:do{if(hF){hp=0;while(1){if((a[hp+137176|0]|0)!=(a[wk+(hp+xG|0)|0]|0)){break L4672}hR=hp+1|0;if((hR|0)<(hK|0)){hp=hR}else{xJ=hR;b7=3482;break}}}else{xJ=0;b7=3482}}while(0);if((b7|0)==3482){b7=0;hp=a[xJ+137176|0]|0;if((hp<<24>>24|0)==36|(hp<<24>>24|0)==0){xI=53968;break}}L4679:do{if(hF){hp=0;while(1){if((a[hp+137048|0]|0)!=(a[wk+(hp+xG|0)|0]|0)){break L4679}hR=hp+1|0;if((hR|0)<(hK|0)){hp=hR}else{xK=hR;b7=3486;break}}}else{xK=0;b7=3486}}while(0);if((b7|0)==3486){b7=0;hp=a[xK+137048|0]|0;if((hp<<24>>24|0)==36|(hp<<24>>24|0)==0){xI=53976;break}}L4686:do{if(hF){hp=0;while(1){if((a[hp+136776|0]|0)!=(a[wk+(hp+xG|0)|0]|0)){break L4686}hR=hp+1|0;if((hR|0)<(hK|0)){hp=hR}else{xL=hR;b7=3490;break}}}else{xL=0;b7=3490}}while(0);if((b7|0)==3490){b7=0;hp=a[xL+136776|0]|0;if((hp<<24>>24|0)==36|(hp<<24>>24|0)==0){xI=53984;break}}if(hF){hp=0;while(1){if((a[hp+136432|0]|0)!=(a[wk+(hp+xG|0)|0]|0)){b7=3495;break L4656}hR=hp+1|0;if((hR|0)<(hK|0)){hp=hR}else{xM=hR;break}}}else{xM=0}hp=a[xM+136432|0]|0;if((hp<<24>>24|0)==36|(hp<<24>>24|0)==0){xI=53992}else{b7=3495}}}while(0);if((b7|0)==3495){b7=0;xI=54e3}hp=c[xI+4>>2]|0;if((hp|0)==-1){b7=3459;break L27}c[5174]=hp;ws=wf;wt=we;wu=xF}else if((nd|0)==6){a[20684]=0;ws=wf;wt=we;wu=wg}else if((nd|0)==7){a[20684]=1;ws=wf;wt=we;wu=wg}else if((nd|0)==8){c[13898]=wg+1;hp=is(ah)|0;hK=c[hp>>2]|0;if((hK|0)==1){xN=+(c[hp+8>>2]|0)}else if((hK|0)==2){xN=+h[hp+8>>3]}else if((hK|0)==3){xN=+uz(c[hp+8>>2]|0,0)}else{b7=3467;break L27}if((c[e$>>2]|0)==3){uu(c[e0>>2]|0);c[e$>>2]=1}hp=~~xN;if((hp|0)<0){b7=3471;break L27}c[5168]=hp;hp=(c[13898]|0)-1|0;c[13898]=hp;ws=wf;wt=we;wu=hp}else{b7=3473;break L27}}while(0);nd=wu+1|0;c[13898]=nd;hp=c[8272]|0;if((nd|0)>=(hp|0)){wm=wt;break}hK=c[1054]|0;we=wt;wf=ws;wg=nd;wh=hp;wi=hK;wj=a[hK+(nd*40&-1)|0]|0}if(!((wm|0)!=0&(c[5174]|0)!=114)){break}if((a[37400]&1)==0){break}uh(-1,153616,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{b7=3127}}while(0);do{if((b7|0)==3127){b7=0;if((c[11254]|0)==0){break}c[5163]=114;c[5164]=7;c[5165]=5;c[5166]=15;a[20668]=112;a[20684]=0;c[5168]=0;c[5172]=0;uu(c[5173]|0);c[5173]=0;uu(c[5170]|0);c[5170]=0;c[5174]=114;h[2705]=1.5;c[7640]=48}}while(0);c[7271]=-1}else if((gD|0)==62){gH=gv+1|0;c[13898]=gH;nh=c[8272]|0;L4724:do{if((gH|0)<(nh|0)){nd=a[gw+(gH*40&-1)|0]|0;L4726:do{if((nd&1)==0){xO=gH;xP=nh;xQ=gw;xR=nd}else{hK=c[gw+(gH*40&-1)+36>>2]|0;hp=gw+(gH*40&-1)+32|0;hF=0;while(1){if((hF|0)>=(hK|0)){break}if((a[gB+((c[hp>>2]|0)+hF|0)|0]|0)==(a[hF+103664|0]|0)){hF=hF+1|0}else{xO=gH;xP=nh;xQ=gw;xR=nd;break L4726}}if((hF|0)==1){break L4724}else{xO=gH;xP=nh;xQ=gw;xR=nd}}}while(0);L4732:while(1){nd=(xR&1)==0;hp=c[xQ+(xO*40&-1)+36>>2]|0;L4734:do{if(nd){xS=c[10036]|0;xT=xQ+(xO*40&-1)+32|0}else{hK=xQ+(xO*40&-1)+32|0;hR=c[10036]|0;hB=0;while(1){if((hB|0)>=(hp|0)){break}if((a[hR+((c[hK>>2]|0)+hB|0)|0]|0)==(a[hB+103664|0]|0)){hB=hB+1|0}else{xS=hR;xT=hK;break L4734}}if((hB|0)==1){break L4732}else{xS=hR;xT=hK}}}while(0);hF=c[xT>>2]|0;gx=(hp|0)>0;gF=25168;hG=141728;L4742:while(1){L4744:do{if(!nd){if(gx){gG=0;gz=0;gy=hF;while(1){gC=a[hG+gG|0]|0;if(gC<<24>>24==(a[xS+(gG+gy|0)|0]|0)){xU=gy;xV=gz}else{if(gC<<24>>24!=36){break L4744}xU=gy-1|0;xV=1}xW=gG+1|0;if((xW|0)<(xV+hp|0)){gG=xW;gz=xV;gy=xU}else{break}}if((xV|0)==0){xX=xW}else{xY=gF;break L4742}}else{xX=0}gy=a[hG+xX|0]|0;if((gy<<24>>24|0)==36|(gy<<24>>24|0)==0){xY=gF;break L4742}}}while(0);hK=gF+8|0;hR=c[hK>>2]|0;if((hR|0)==0){xY=hK;break}else{gF=hK;hG=hR}}hG=c[xY+4>>2]|0;L4757:do{if((hG|0)==1){a[54017]=118;xZ=xO}else if((hG|0)==2){a[54017]=104;xZ=xO}else if((hG|0)==3){a[54016]=100;xZ=xO}else if((hG|0)==4){a[54016]=117;xZ=xO}else if((hG|0)==10){c[13506]=1;xZ=xO}else if((hG|0)==11){c[13506]=0;xZ=xO}else if((hG|0)==5){a[54018]=1;gF=xO+1|0;c[13898]=gF;if((gF|0)>=(xP|0)){xZ=gF;break}L4766:do{if((a[xQ+(gF*40&-1)|0]&1)!=0){hp=c[xQ+(gF*40&-1)+36>>2]|0;hF=xQ+(gF*40&-1)+32|0;gx=0;while(1){if((gx|0)>=(hp|0)){break}if((a[xS+((c[hF>>2]|0)+gx|0)|0]|0)==(a[gx+103664|0]|0)){gx=gx+1|0}else{break L4766}}if((gx|0)==1){xZ=gF;break L4757}}}while(0);gF=is(ag)|0;hF=c[gF>>2]|0;if((hF|0)==1){x_=+(c[gF+8>>2]|0)}else if((hF|0)==2){x_=+h[gF+8>>3]}else if((hF|0)==3){x_=+uz(c[gF+8>>2]|0,0)}else{b7=3537;break L27}if((c[e2>>2]|0)==3){uu(c[e3>>2]|0);c[e2>>2]=1}gF=~~x_;c[13505]=gF;if((gF|0)<1){b7=3541;break L27}gF=(c[13898]|0)-1|0;c[13898]=gF;xZ=gF}else if((hG|0)==6){c[13505]=-1;xZ=xO}else if((hG|0)==7){a[54018]=0;xZ=xO}else if((hG|0)==8){x$=xO+1|0;c[13898]=x$;if((x$|0)>=(xP|0)){b7=5261;break L27}L4786:do{if((a[xQ+(x$*40&-1)|0]&1)!=0){gF=c[xQ+(x$*40&-1)+36>>2]|0;hF=xQ+(x$*40&-1)+32|0;hp=0;while(1){if((hp|0)>=(gF|0)){break}if((a[xS+((c[hF>>2]|0)+hp|0)|0]|0)==(a[hp+103664|0]|0)){hp=hp+1|0}else{break L4786}}if((hp|0)==1){b7=5262;break L27}}}while(0);dl(54032,3);hF=(c[13898]|0)-1|0;c[13898]=hF;xZ=hF}else if((hG|0)==9){x0=xO+1|0;c[13898]=x0;if((x0|0)>=(xP|0)){b7=5263;break L27}L4795:do{if((a[xQ+(x0*40&-1)|0]&1)!=0){hF=c[xQ+(x0*40&-1)+36>>2]|0;gF=xQ+(x0*40&-1)+32|0;gx=0;while(1){if((gx|0)>=(hF|0)){break}if((a[xS+((c[gF>>2]|0)+gx|0)|0]|0)==(a[gx+103664|0]|0)){gx=gx+1|0}else{break L4795}}if((gx|0)==1){b7=5264;break L27}}}while(0);dl(54072,3);gF=(c[13898]|0)-1|0;c[13898]=gF;xZ=gF}else{b7=3561;break L27}}while(0);hG=xZ+1|0;c[13898]=hG;gF=c[8272]|0;if((hG|0)>=(gF|0)){break}hF=c[1054]|0;xO=hG;xP=gF;xQ=hF;xR=a[hF+(hG*40&-1)|0]|0}if((a[54016]|0)!=110){break L44}a[54016]=100;break L44}}while(0);a[54016]=100}else if((gD|0)==77){nh=gv+1|0;c[13898]=nh;L4808:do{if((nh|0)<(c[8272]|0)){L4810:do{if((a[gw+(nh*40&-1)|0]&1)!=0){gH=c[gw+(nh*40&-1)+36>>2]|0;hG=gw+(nh*40&-1)+32|0;hF=0;while(1){if((hF|0)>=(gH|0)){break}if((a[gB+((c[hG>>2]|0)+hF|0)|0]|0)==(a[hF+103664|0]|0)){hF=hF+1|0}else{break L4810}}if((hF|0)==1){x1=1.0;break L4808}}}while(0);hG=is(af)|0;gH=c[hG>>2]|0;if((gH|0)==1){x2=+(c[hG+8>>2]|0)}else if((gH|0)==2){x2=+h[hG+8>>3]}else if((gH|0)==3){x2=+uz(c[hG+8>>2]|0,0)}else{b7=3576;break L27}if((c[e4>>2]|0)!=3){x1=x2;break}uu(c[e5>>2]|0);c[e4>>2]=1;x1=x2}else{x1=1.0}}while(0);h[3818]=x1>0.0?x1:1.0}else if((gD|0)==78){nh=gv+1|0;c[13898]=nh;L4825:do{if((nh|0)<(c[8272]|0)){L4827:do{if((a[gw+(nh*40&-1)|0]&1)!=0){hG=c[gw+(nh*40&-1)+36>>2]|0;gH=gw+(nh*40&-1)+32|0;gF=0;while(1){if((gF|0)>=(hG|0)){break}if((a[gB+((c[gH>>2]|0)+gF|0)|0]|0)==(a[gF+103664|0]|0)){gF=gF+1|0}else{break L4827}}if((gF|0)==1){x3=1.0;break L4825}}}while(0);gH=is(ae)|0;hG=c[gH>>2]|0;if((hG|0)==1){x4=+(c[gH+8>>2]|0)}else if((hG|0)==2){x4=+h[gH+8>>3]}else if((hG|0)==3){x4=+uz(c[gH+8>>2]|0,0)}else{b7=3590;break L27}if((c[e6>>2]|0)!=3){x3=x4;break}uu(c[e8>>2]|0);c[e6>>2]=1;x3=x4}else{x3=1.0}}while(0);h[3817]=x3>0.0?x3:1.0}else if((gD|0)==79){c[13898]=gv+1;if((a[30528]&1)!=0){break}a[30528]=1;if((a[32936]&1)==0){if((a[37400]&1)!=0){nh=c[m>>2]|0;aI(171240,33,1,nh|0)}b[12272]=116}if((c[17539]|0)!=0){h[8773]=0.0;h[8774]=6.283185307179586/+h[9040]}if((c[17367]|0)==3){break}ju()}else if((gD|0)==80){c[ad>>2]=0;x5=gv+1|0;c[13898]=x5;L4854:do{if((x5|0)<(c[8272]|0)){L4856:do{if((a[gw+(x5*40&-1)|0]&1)!=0){nh=c[gw+(x5*40&-1)+36>>2]|0;gH=gw+(x5*40&-1)+32|0;hG=0;while(1){if((hG|0)>=(nh|0)){b7=3608;break}if((a[gB+((c[gH>>2]|0)+hG|0)|0]|0)==(a[hG+103664|0]|0)){hG=hG+1|0}else{x6=0;break}}if((b7|0)==3608){b7=0;if((hG|0)==1){break L4854}else{x6=0}}while(1){if((x6|0)>=(nh|0)){break}if((a[gB+((c[gH>>2]|0)+x6|0)|0]|0)==(a[x6+103664|0]|0)){x6=x6+1|0}else{break L4856}}if((x6|0)==1){b7=3615;break L27}}}while(0);a[14176]=1;is(ac);a[14176]=0;if((c[e9>>2]|0)!=3){b7=3614;break L27}gH=c[fa>>2]|0;c[ad>>2]=gH;if((gH|0)==0){b7=3617;break L27}iQ(ad);x7=c[13898]|0;do{if((x7|0)<(c[8272]|0)){gH=c[1054]|0;if((a[gH+(x7*40&-1)|0]&1)==0){b7=5265;break L27}nh=c[gH+(x7*40&-1)+36>>2]|0;hG=gH+(x7*40&-1)+32|0;gH=c[10036]|0;gF=0;while(1){if((gF|0)>=(nh|0)){b7=3623;break}if((a[gH+((c[hG>>2]|0)+gF|0)|0]|0)==(a[gF+103664|0]|0)){gF=gF+1|0}else{x8=0;break}}if((b7|0)==3623){b7=0;if((gF|0)==1){x9=0;break}else{x8=0}}while(1){if((x8|0)>=(nh|0)){break}if((a[gH+((c[hG>>2]|0)+x8|0)|0]|0)==(a[x8+148880|0]|0)){x8=x8+1|0}else{b7=5266;break L27}}if((x8|0)!=6){b7=5267;break L27}c[13898]=x7+1;x9=1}else{x9=0}}while(0);ea(c[ad>>2]|0,x9);break L44}}while(0);ea(0,0)}else if((gD|0)==81){ya=gv+1|0;c[13898]=ya;L4886:do{if((ya|0)<(c[8272]|0)){L4888:do{if((a[gw+(ya*40&-1)|0]&1)!=0){hG=c[gw+(ya*40&-1)+36>>2]|0;gH=gw+(ya*40&-1)+32|0;nh=0;while(1){if((nh|0)>=(hG|0)){b7=3636;break}if((a[gB+((c[gH>>2]|0)+nh|0)|0]|0)==(a[nh+103664|0]|0)){nh=nh+1|0}else{yb=0;break}}if((b7|0)==3636){b7=0;if((nh|0)==1){break L4886}else{yb=0}}while(1){if((yb|0)>=(hG|0)){break}if((a[gB+((c[gH>>2]|0)+yb|0)|0]|0)==(a[yb+103664|0]|0)){yb=yb+1|0}else{break L4888}}if((yb|0)==1){b7=3643;break L27}}}while(0);a[14176]=1;is(ab);a[14176]=0;if((c[fb>>2]|0)!=3){b7=3642;break L27}gH=c[fc>>2]|0;c[57238]=gH;if((gH|0)==0){b7=3645;break L27}iQ(228952);break L44}}while(0);uu(c[57238]|0);c[57238]=0}else if((gD|0)==75){gH=gv+1|0;c[13898]=gH;hG=c[gw+(gH*40&-1)+36>>2]|0;nh=c[gw+(gH*40&-1)+32>>2]|0;gF=a[gw+(gH*40&-1)|0]|0;hF=(gF&1)==0;L4904:do{if((hG|0)>0&(hF^1)){hp=0;nd=0;hR=nh;while(1){if((a[hp+115824|0]|0)==(a[gB+(hp+hR|0)|0]|0)){yc=hR;yd=nd}else{if((hp|0)!=4){break}yc=hR-1|0;yd=1}hK=hp+1|0;if((hK|0)<(yd+hG|0)){hp=hK;nd=yd;hR=yc}else{b7=3653;break}}if((b7|0)==3653){b7=0;if((yd|0)!=0){ye=-1;yf=gH;yg=hG;yh=nh;yi=gF;break}if((hp|0)==3|(hp|0)==9){ye=-1;yf=gH;yg=hG;yh=nh;yi=gF;break}}if(hF){b7=3674;break}else{yj=0;yk=0;yl=nh}while(1){if((a[yj+115976|0]|0)==(a[gB+(yj+yl|0)|0]|0)){ym=yl;yn=yk}else{if((yj|0)!=3){yo=0;yp=0;yq=nh;break}ym=yl-1|0;yn=1}hR=yj+1|0;if((hR|0)<(yn+hG|0)){yj=hR;yk=yn;yl=ym}else{b7=3660;break}}if((b7|0)==3660){b7=0;if((yn|0)!=0){ye=-1;yf=gH;yg=hG;yh=nh;yi=gF;break}if((yj|0)==2|(yj|0)==7){ye=-1;yf=gH;yg=hG;yh=nh;yi=gF;break}else{yo=0;yp=0;yq=nh}}while(1){if((a[yo+116120|0]|0)==(a[gB+(yo+yq|0)|0]|0)){yr=yq;ys=yp}else{if((yo|0)!=4){yt=0;yu=0;yv=nh;break}yr=yq-1|0;ys=1}hp=yo+1|0;if((hp|0)<(ys+hG|0)){yo=hp;yp=ys;yq=yr}else{b7=3666;break}}if((b7|0)==3666){b7=0;if((ys|0)!=0){ye=-1;yf=gH;yg=hG;yh=nh;yi=gF;break}if((yo|0)==3|(yo|0)==6){ye=-1;yf=gH;yg=hG;yh=nh;yi=gF;break}else{yt=0;yu=0;yv=nh}}while(1){if((a[yt+172184|0]|0)==(a[gB+(yt+yv|0)|0]|0)){yw=yv;yx=yu}else{if((yt|0)!=4){b7=3674;break L4904}yw=yv-1|0;yx=1}hp=yt+1|0;if((hp|0)<(yx+hG|0)){yt=hp;yu=yx;yv=yw}else{break}}if((yx|0)!=0){ye=-1;yf=gH;yg=hG;yh=nh;yi=gF;break}if((yt|0)==3|(yt|0)==7){ye=-1;yf=gH;yg=hG;yh=nh;yi=gF}else{b7=3674}}else{b7=3674}}while(0);if((b7|0)==3674){b7=0;gF=is($)|0;nh=c[gF>>2]|0;if((nh|0)==1){yy=+(c[gF+8>>2]|0)}else if((nh|0)==2){yy=+h[gF+8>>3]}else if((nh|0)==3){yy=+uz(c[gF+8>>2]|0,0)}else{b7=3678;break L27}if((c[fd>>2]|0)==3){uu(c[fe>>2]|0);c[fd>>2]=1}gF=~~yy;yz=c[13898]|0;if((gF|0)<1){b7=3683;break L27}nh=c[1054]|0;ye=gF;yf=yz;yg=c[nh+(yz*40&-1)+36>>2]|0;yh=c[nh+(yz*40&-1)+32>>2]|0;yi=a[nh+(yz*40&-1)|0]|0}nh=(yi&1)==0;L4953:do{if((yg|0)>0&(nh^1)){gF=c[10036]|0;hG=0;gH=0;hF=yh;while(1){if((a[hG+115824|0]|0)==(a[gF+(hG+hF|0)|0]|0)){yA=hF;yB=gH}else{if((hG|0)!=4){break}yA=hF-1|0;yB=1}hp=hG+1|0;if((hp|0)<(yB+yg|0)){hG=hp;gH=yB;hF=yA}else{b7=3690;break}}do{if((b7|0)==3690){b7=0;if((yB|0)==0){if(!((hG|0)==3|(hG|0)==9)){break}}jx(ye,1);break L44}}while(0);if(nh){break}else{yC=0;yD=0;yE=yh}while(1){if((a[yC+115976|0]|0)==(a[gF+(yC+yE|0)|0]|0)){yF=yE;yG=yD}else{if((yC|0)!=3){yH=0;yI=0;yJ=yh;break}yF=yE-1|0;yG=1}hG=yC+1|0;if((hG|0)<(yG+yg|0)){yC=hG;yD=yG;yE=yF}else{b7=3698;break}}do{if((b7|0)==3698){b7=0;if((yG|0)==0){if(!((yC|0)==2|(yC|0)==7)){yH=0;yI=0;yJ=yh;break}}jx(ye,3);break L44}}while(0);while(1){if((a[yH+116120|0]|0)==(a[gF+(yH+yJ|0)|0]|0)){yK=yJ;yL=yI}else{if((yH|0)!=4){yM=0;yN=0;yO=yh;break}yK=yJ-1|0;yL=1}hG=yH+1|0;if((hG|0)<(yL+yg|0)){yH=hG;yI=yL;yJ=yK}else{b7=3705;break}}do{if((b7|0)==3705){b7=0;if((yL|0)==0){if(!((yH|0)==3|(yH|0)==6)){yM=0;yN=0;yO=yh;break}}jx(ye,2);break L44}}while(0);while(1){if((a[yM+172184|0]|0)==(a[gF+(yM+yO|0)|0]|0)){yP=yO;yQ=yN}else{if((yM|0)!=4){break L4953}yP=yO-1|0;yQ=1}hG=yM+1|0;if((hG|0)<(yQ+yg|0)){yM=hG;yN=yQ;yO=yP}else{break}}if((yQ|0)==0){if(!((yM|0)==3|(yM|0)==7)){break}}jx(ye,4);break L44}}while(0);if((ye|0)>0){yR=43272}else{b7=3720;break L27}while(1){yS=c[yR>>2]|0;if((yS|0)==0){b7=3719;break L27}if((ye|0)==(c[yS+4>>2]|0)){break}else{yR=yS|0}}c[13898]=yf-1;jx(ye,c[yS+12>>2]|0)}else if((gD|0)==82){c[13898]=gv+1;nh=is(Z)|0;gF=c[nh>>2]|0;if((gF|0)==1){yT=+(c[nh+8>>2]|0)}else if((gF|0)==2){yT=+h[nh+8>>3]}else if((gF|0)==3){yT=+uz(c[nh+8>>2]|0,0)}else{b7=3725;break L27}if((c[ff>>2]|0)==3){uu(c[fg>>2]|0);c[ff>>2]=1}nh=~~yT;gF=(nh|0)>-1?nh:-nh|0;yU=c[13898]|0;do{if((yU|0)<(c[8272]|0)){nh=c[1054]|0;if((a[nh+(yU*40&-1)|0]&1)==0){b7=5272;break L27}hG=c[nh+(yU*40&-1)+36>>2]|0;hF=nh+(yU*40&-1)+32|0;nh=c[10036]|0;gH=0;while(1){if((gH|0)>=(hG|0)){b7=3733;break}if((a[nh+((c[hF>>2]|0)+gH|0)|0]|0)==(a[gH+103664|0]|0)){gH=gH+1|0}else{yV=0;break}}if((b7|0)==3733){b7=0;if((gH|0)==1){yW=gF;break}else{yV=0}}while(1){if((yV|0)>=(hG|0)){break}if((a[nh+((c[hF>>2]|0)+yV|0)|0]|0)==(a[yV+148464|0]|0)){yV=yV+1|0}else{b7=5273;break L27}}if((yV|0)!=1){b7=5274;break L27}c[13898]=yU+1;hF=is(Y)|0;nh=c[hF>>2]|0;if((nh|0)==1){yX=+(c[hF+8>>2]|0)}else if((nh|0)==2){yX=+h[hF+8>>3]}else if((nh|0)==3){yX=+uz(c[hF+8>>2]|0,0)}else{b7=3742;break L27}if((c[fh>>2]|0)==3){uu(c[fi>>2]|0);c[fh>>2]=1}hF=~~yX;yW=(hF|0)>-1?hF:-hF|0}else{yW=gF}}while(0);if((gF|0)<2|(yW|0)<2){b7=3747;break L27}hF=c[10828]|0;c[10828]=0;iY(hF);c[6352]=gF;c[6350]=yW}else if((gD|0)==83){hF=gv+1|0;c[13898]=hF;nh=c[8272]|0;L5037:do{if((hF|0)<(nh|0)){L5039:do{if((a[gw+(hF*40&-1)|0]&1)==0){yY=hF;yZ=nh}else{hG=c[gw+(hF*40&-1)+36>>2]|0;gH=gw+(hF*40&-1)+32|0;hp=0;while(1){if((hp|0)>=(hG|0)){b7=3754;break}hR=c[gH>>2]|0;if((a[gB+(hR+hp|0)|0]|0)==(a[hp+103664|0]|0)){hp=hp+1|0}else{y_=hR;break}}if((b7|0)==3754){b7=0;if((hp|0)==1){b7=3756;break L5037}y_=c[gH>>2]|0}if((hG|0)>0){y$=0;y0=0;y1=y_}else{yY=hF;yZ=nh;break}while(1){if((a[y$+175752|0]|0)==(a[gB+(y$+y1|0)|0]|0)){y2=y1;y3=y0}else{if((y$|0)!=2){y4=0;y5=0;y6=y_;break}y2=y1-1|0;y3=1}hR=y$+1|0;if((hR|0)<(y3+hG|0)){y$=hR;y0=y3;y1=y2}else{b7=3762;break}}do{if((b7|0)==3762){b7=0;if((y3|0)==0){if(!((y$|0)==1|(y$|0)==6)){y4=0;y5=0;y6=y_;break}}g[18074]=1.0;gH=gv+2|0;c[13898]=gH;yY=gH;yZ=nh;break L5039}}while(0);while(1){if((a[y4+175400|0]|0)==(a[gB+(y4+y6|0)|0]|0)){y7=y6;y8=y5}else{if((y4|0)!=2){y9=0;za=0;zb=y_;break}y7=y6-1|0;y8=1}gH=y4+1|0;if((gH|0)<(y8+hG|0)){y4=gH;y5=y8;y6=y7}else{b7=3769;break}}do{if((b7|0)==3769){b7=0;if((y8|0)==0){if(!((y4|0)==5|(y4|0)==1)){y9=0;za=0;zb=y_;break}}c[13898]=gv+2;gH=is(W)|0;hp=c[gH>>2]|0;if((hp|0)==1){zc=+(c[gH+8>>2]|0)}else if((hp|0)==2){zc=+h[gH+8>>3]}else if((hp|0)==3){zc=+uz(c[gH+8>>2]|0,0)}else{b7=3775;break L27}if((c[fn>>2]|0)==3){uu(c[fo>>2]|0);c[fn>>2]=1}g[18074]=zc;yY=c[13898]|0;yZ=c[8272]|0;break L5039}}while(0);while(1){if((a[y9+174920|0]|0)==(a[gB+(y9+zb|0)|0]|0)){zd=zb;ze=za}else{if((y9|0)!=4){zf=0;zg=0;zh=y_;b7=3785;break}zd=zb-1|0;ze=1}gH=y9+1|0;if((gH|0)<(ze+hG|0)){y9=gH;za=ze;zb=zd}else{b7=3783;break}}do{if((b7|0)==3783){b7=0;if((ze|0)!=0){break}if(!((y9|0)==3|(y9|0)==7)){zf=0;zg=0;zh=y_;b7=3785}}}while(0);do{if((b7|0)==3785){while(1){b7=0;if((a[zf+174640|0]|0)==(a[gB+(zf+zh|0)|0]|0)){zi=zh;zj=zg}else{if((zf|0)!=4){yY=hF;yZ=nh;break L5039}zi=zh-1|0;zj=1}gH=zf+1|0;if((gH|0)<(zj+hG|0)){zf=gH;zg=zj;zh=zi;b7=3785}else{break}}if((zj|0)!=0){break}if(!((zf|0)==3|(zf|0)==8)){yY=hF;yZ=nh;break L5039}}}while(0);g[18074]=0.0;hG=gv+2|0;c[13898]=hG;yY=hG;yZ=nh}}while(0);if((yY|0)>=(yZ|0)){break}hG=c[1054]|0;L5099:do{if((a[hG+(yY*40&-1)|0]&1)!=0){gH=c[hG+(yY*40&-1)+36>>2]|0;hp=hG+(yY*40&-1)+32|0;hR=c[10036]|0;nd=0;while(1){if((nd|0)>=(gH|0)){break}if((a[hR+((c[hp>>2]|0)+nd|0)|0]|0)==(a[nd+103664|0]|0)){nd=nd+1|0}else{break L5099}}if((nd|0)==1){break L5037}}}while(0);hG=is(V)|0;hp=c[hG>>2]|0;if((hp|0)==1){zk=+(c[hG+8>>2]|0)}else if((hp|0)==2){zk=+h[hG+8>>3]}else if((hp|0)==3){zk=+uz(c[hG+8>>2]|0,0)}else{b7=3802;break L27}if((c[fj>>2]|0)==3){uu(c[fk>>2]|0);c[fj>>2]=1}m3=zk;g[178]=m3;hG=c[13898]|0;L5114:do{if((c[8272]|0)>(hG|0)){hp=c[1054]|0;if((a[hp+(hG*40&-1)|0]&1)==0){break}hR=c[hp+(hG*40&-1)+36>>2]|0;gH=hp+(hG*40&-1)+32|0;hp=c[10036]|0;hK=0;while(1){if((hK|0)>=(hR|0)){break}if((a[hp+((c[gH>>2]|0)+hK|0)|0]|0)==(a[hK+148464|0]|0)){hK=hK+1|0}else{break L5114}}if((hK|0)!=1){break}c[13898]=hG+1;gH=is(X)|0;hp=c[gH>>2]|0;if((hp|0)==1){zl=+(c[gH+8>>2]|0)}else if((hp|0)==2){zl=+h[gH+8>>3]}else if((hp|0)==3){zl=+uz(c[gH+8>>2]|0,0)}else{b7=3815;break L27}if((c[fl>>2]|0)==3){uu(c[fm>>2]|0);c[fl>>2]=1}g[38]=zl;break L5037}}while(0);g[38]=m3}else{b7=3756}}while(0);if((b7|0)==3756){b7=0;g[178]=1.0;g[38]=1.0}if(+g[178]<=0.0|+g[38]<=0.0){b7=3821;break L27}}else if((gD|0)==85){zm=gv+1|0;c[13898]=zm;nh=gw+(zm*40&-1)+36|0;hF=c[nh>>2]|0;gF=gw+(zm*40&-1)+32|0;hG=c[gF>>2]|0;gH=gw+(zm*40&-1)|0;hp=(a[gH]&1)==0;hR=(hF|0)>0;nd=21680;hB=116616;L5135:while(1){L5137:do{if(!hp){if(hR){gy=0;gz=0;gG=hG;while(1){gC=a[hB+gy|0]|0;if(gC<<24>>24==(a[gB+(gy+gG|0)|0]|0)){zn=gG;zo=gz}else{if(gC<<24>>24!=36){break L5137}zn=gG-1|0;zo=1}zp=gy+1|0;if((zp|0)<(zo+hF|0)){gy=zp;gz=zo;gG=zn}else{break}}if((zo|0)==0){zq=zp}else{zr=nd;break L5135}}else{zq=0}gG=a[hB+zq|0]|0;if((gG<<24>>24|0)==36|(gG<<24>>24|0)==0){zr=nd;break L5135}}}while(0);gG=nd+8|0;gz=c[gG>>2]|0;if((gz|0)==0){zr=gG;break}else{nd=gG;hB=gz}}hB=c[zr+4>>2]|0;if((hB|0)==7){nd=gv+2|0;c[13898]=nd;hF=c[8272]|0;if((nd|0)<(hF|0)){zs=nd;zt=hF;zu=gw}else{break}while(1){hF=(a[zu+(zs*40&-1)|0]&1)==0;if(hF){b7=5284;break L27}nd=c[zu+(zs*40&-1)+36>>2]|0;hG=zu+(zs*40&-1)+32|0;hR=c[10036]|0;hp=0;while(1){if((hp|0)>=(nd|0)){b7=3937;break}if((a[hR+((c[hG>>2]|0)+hp|0)|0]|0)==(a[hp+103664|0]|0)){hp=hp+1|0}else{break}}if((b7|0)==3937){b7=0;if((hp|0)==1){break L44}}L5161:do{if((zt|0)>(zs|0)){gz=0;while(1){if((gz|0)>=(nd|0)){break}if((a[hR+((c[hG>>2]|0)+gz|0)|0]|0)==(a[gz+130496|0]|0)){gz=gz+1|0}else{b7=3943;break L5161}}if((gz|0)!=4){b7=3943;break}c[13898]=zs+1;dl(49672,0);gG=(c[13898]|0)-1|0;c[13898]=gG;zv=gG}else{b7=3943}}while(0);L5167:do{if((b7|0)==3943){b7=0;hR=c[hG>>2]|0;if(!((nd|0)>0&(hF^1))){b7=5285;break L27}hp=c[10036]|0;gG=0;gy=0;hK=hR;while(1){if((a[gG+212296|0]|0)==(a[hp+(gG+hK|0)|0]|0)){zw=hK;zx=gy}else{if((gG|0)!=3){zy=0;zz=0;zA=hR;break}zw=hK-1|0;zx=1}gC=gG+1|0;if((gC|0)<(zx+nd|0)){gG=gC;gy=zx;hK=zw}else{b7=3949;break}}do{if((b7|0)==3949){b7=0;if((zx|0)==0){if(!((gG|0)==5|(gG|0)==2)){zy=0;zz=0;zA=hR;break}}hK=zs+1|0;c[13898]=hK;L5181:do{if((a[zu+(hK*40&-1)|0]&1)!=0){gy=c[10810]|0;if((gy|0)==0){zv=hK;break L5167}gz=(zt|0)>(hK|0);gC=zu+(hK*40&-1)+36|0;hS=zu+(hK*40&-1)+32|0;ho=gy;L5184:while(1){ne=c[ho+4>>2]|0;L5186:do{if(gz){gE=c[gC>>2]|0;ng=0;while(1){if((ng|0)>=(gE|0)){break}if((a[hp+((c[hS>>2]|0)+ng|0)|0]|0)==(a[ne+ng|0]|0)){ng=ng+1|0}else{break L5186}}if((a[ne+ng|0]|0)==0){b7=3959;break L5184}}}while(0);ne=c[ho>>2]|0;if((ne|0)==0){zB=gy;break}else{ho=ne}}do{if((b7|0)==3959){b7=0;if((a[ho+8|0]&1)!=0){zB=gy;break}if((c[ho+16>>2]|0)==1){break L5181}else{zB=gy}}}while(0);L5196:while(1){gy=c[zB+4>>2]|0;L5198:do{if(gz){ho=c[gC>>2]|0;gx=0;while(1){if((gx|0)>=(ho|0)){break}if((a[hp+((c[hS>>2]|0)+gx|0)|0]|0)==(a[gy+gx|0]|0)){gx=gx+1|0}else{break L5198}}if((a[gy+gx|0]|0)==0){break L5196}}}while(0);gy=c[zB>>2]|0;if((gy|0)==0){zv=hK;break L5167}else{zB=gy}}if((a[zB+8|0]&1)!=0){zv=hK;break L5167}if((c[zB+16>>2]|0)!=2){zv=hK;break L5167}}}while(0);hK=is(T)|0;hS=c[hK>>2]|0;if((hS|0)==1){zC=+(c[hK+8>>2]|0)}else if((hS|0)==2){zC=+h[hK+8>>3]}else if((hS|0)==3){zC=+uz(c[hK+8>>2]|0,0)}else{b7=3974;break L27}if((c[fr>>2]|0)==3){uu(c[fs>>2]|0);c[fr>>2]=1}h[6214]=zC;hK=(c[13898]|0)-1|0;c[13898]=hK;zv=hK;break L5167}}while(0);while(1){if((a[zy+211736|0]|0)==(a[hp+(zy+zA|0)|0]|0)){zD=zA;zE=zz}else{if((zy|0)!=4){b7=5286;break L27}zD=zA-1|0;zE=1}hR=zy+1|0;if((hR|0)<(zE+nd|0)){zy=hR;zz=zE;zA=zD}else{break}}if((zE|0)==0){if(!((zy|0)==5|(zy|0)==3)){b7=5287;break L27}}zF=zs+1|0;c[13898]=zF;do{if((zt|0)>(zF|0)){hR=(a[zu+(zF*40&-1)|0]&1)==0;if(hR){b7=5280;break L27}gG=c[zu+(zF*40&-1)+36>>2]|0;hK=zu+(zF*40&-1)+32|0;hS=0;while(1){if((hS|0)>=(gG|0)){b7=3991;break}if((a[hp+((c[hK>>2]|0)+hS|0)|0]|0)==(a[hS+150688|0]|0)){hS=hS+1|0}else{break}}if((b7|0)==3991){b7=0;if((hS|0)==2){break}}if(hR){b7=5281;break L27}hK=c[zu+(zF*40&-1)+36>>2]|0;gG=zu+(zF*40&-1)+32|0;gC=0;while(1){if((gC|0)>=(hK|0)){b7=3996;break}if((a[hp+((c[gG>>2]|0)+gC|0)|0]|0)==(a[gC+103664|0]|0)){gC=gC+1|0}else{zG=0;break}}if((b7|0)==3996){b7=0;if((gC|0)==1){break}else{zG=0}}while(1){if((zG|0)>=(hK|0)){b7=4e3;break}if((a[hp+((c[gG>>2]|0)+zG|0)|0]|0)==(a[zG+211336|0]|0)){zG=zG+1|0}else{zH=0;break}}do{if((b7|0)==4e3){b7=0;if((zG|0)!=2){zH=0;break}c[12406]=1;zv=zF;break L5167}}while(0);while(1){if((zH|0)>=(hK|0)){break}if((a[hp+((c[gG>>2]|0)+zH|0)|0]|0)==(a[zH+210848|0]|0)){zH=zH+1|0}else{b7=5282;break L27}}if((zH|0)!=2){b7=5283;break L27}c[12406]=2;zv=zF;break L5167}}while(0);c[12406]=0;zv=zF}}while(0);nd=zv+1|0;c[13898]=nd;hF=c[8272]|0;if((nd|0)>=(hF|0)){break L44}zs=nd;zt=hF;zu=c[1054]|0}}else if((hB|0)==1){hF=gv+2|0;c[13898]=hF;nd=c[gw+(hF*40&-1)+36>>2]|0;hG=c[gw+(hF*40&-1)+32>>2]|0;hp=(a[gw+(hF*40&-1)|0]&1)==0;hF=(nd|0)>0;gG=30672;hK=116448;L5256:while(1){L5258:do{if(!hp){if(hF){gC=0;hR=0;hS=hG;while(1){gz=a[hK+gC|0]|0;if(gz<<24>>24==(a[gB+(gC+hS|0)|0]|0)){zI=hS;zJ=hR}else{if(gz<<24>>24!=36){break L5258}zI=hS-1|0;zJ=1}zK=gC+1|0;if((zK|0)<(zJ+nd|0)){gC=zK;hR=zJ;hS=zI}else{break}}if((zJ|0)==0){zL=zK}else{zM=gG;break L5256}}else{zL=0}hS=a[hK+zL|0]|0;if((hS<<24>>24|0)==36|(hS<<24>>24|0)==0){zM=gG;break L5256}}}while(0);hS=gG+8|0;hR=c[hS>>2]|0;if((hR|0)==0){zM=hS;break}else{gG=hS;hK=hR}}hK=c[zM+4>>2]|0;zN=gv+3|0;c[13898]=zN;if((hK|0)==-1){b7=3845;break L27}c[12890]=hK;if((hK|0)!=345){break}hE(43432);if((c[10858]|0)!=0){break}c[10859]=0;break}else if((hB|0)==2){hK=gv+2|0;c[13898]=hK;gG=c[gw+(hK*40&-1)+36>>2]|0;nd=c[gw+(hK*40&-1)+32>>2]|0;hG=(a[gw+(hK*40&-1)|0]&1)==0;hK=(gG|0)>0;hF=30672;hp=116448;L5275:while(1){L5277:do{if(!hG){if(hK){hR=0;hS=0;gC=nd;while(1){gz=a[hp+hR|0]|0;if(gz<<24>>24==(a[gB+(hR+gC|0)|0]|0)){zO=gC;zP=hS}else{if(gz<<24>>24!=36){break L5277}zO=gC-1|0;zP=1}zQ=hR+1|0;if((zQ|0)<(zP+gG|0)){hR=zQ;hS=zP;gC=zO}else{break}}if((zP|0)==0){zR=zQ}else{zS=hF;break L5275}}else{zR=0}gC=a[hp+zR|0]|0;if((gC<<24>>24|0)==36|(gC<<24>>24|0)==0){zS=hF;break L5275}}}while(0);gC=hF+8|0;hS=c[gC>>2]|0;if((hS|0)==0){zS=gC;break}else{hF=gC;hp=hS}}hp=c[zS+4>>2]|0;zT=gv+3|0;c[13898]=zT;if((hp|0)==-1){b7=3860;break L27}if((hp&4|0)!=0){b7=5275;break L27}if((hp|0)==392|(hp|0)==368){b7=5276;break L27}c[10058]=hp;if((hp|0)!=345){break}hE(43400);if((c[10850]|0)!=0){break}c[10851]=0;break}else if((hB|0)==3){jr(43280);break}else if((hB|0)==4){hJ(49488,c[12372]|0,c[12373]|0,c[12374]|0,49504);break}else if((hB|0)==5){hp=gv+2|0;c[13898]=hp;L5298:do{if((hp|0)<(c[8272]|0)){L5300:do{if((a[gw+(hp*40&-1)|0]&1)!=0){hF=c[gw+(hp*40&-1)+36>>2]|0;gG=gw+(hp*40&-1)+32|0;nd=0;while(1){if((nd|0)>=(hF|0)){break}if((a[gB+((c[gG>>2]|0)+nd|0)|0]|0)==(a[nd+103664|0]|0)){nd=nd+1|0}else{break L5300}}if((nd|0)==1){b7=3885;break L5298}}}while(0);gG=is(U)|0;hF=c[gG>>2]|0;if((hF|0)==1){zU=+(c[gG+8>>2]|0)}else if((hF|0)==2){zU=+h[gG+8>>3]}else if((hF|0)==3){zU=+uz(c[gG+8>>2]|0,0)}else{b7=3879;break L27}if((c[fp>>2]|0)==3){uu(c[fq>>2]|0);c[fp>>2]=1}gG=~~zU;if((gG|0)<1){b7=3884;break L27}zV=gG;zW=c[10824]|0;b7=3888}else{b7=3885}}while(0);L5316:do{if((b7|0)==3885){b7=0;hp=c[10824]|0;if((hp|0)==0){zX=1;zY=0;zZ=0;b7=3892;break}else{z_=1;z$=hp}while(1){if((c[z$+4>>2]|0)!=(z_|0)){zV=z_;zW=hp;b7=3888;break L5316}gG=z_+1|0;hF=c[z$>>2]|0;if((hF|0)==0){zV=gG;zW=hp;b7=3888;break}else{z_=gG;z$=hF}}}}while(0);L5321:do{if((b7|0)==3888){b7=0;if((zW|0)==0){zX=zV;zY=0;zZ=0;b7=3892;break}else{z0=zW;z1=0}while(1){z2=c[z0+4>>2]|0;if((zV|0)<=(z2|0)){break}hp=c[z0>>2]|0;if((hp|0)==0){zX=zV;zY=0;zZ=z0;b7=3892;break L5321}else{z1=z0;z0=hp}}if((zV|0)==(z2|0)){z3=z0}else{zX=zV;zY=z0;zZ=z1;b7=3892}}}while(0);if((b7|0)==3892){b7=0;hp=ut(120)|0;if((hp|0)==0){gk();hF=ut(120)|0;if((hF|0)==0){b7=3894;break L27}else{z4=hF}}else{z4=hp}hp=z4;hF=z4+8|0;c[hF>>2]=-1;c[z4+12>>2]=0;gG=z4+16|0;c[gG>>2]=c[12872];c[gG+4>>2]=c[12873];c[gG+8>>2]=c[12874];c[gG+12>>2]=c[12875];c[gG+16>>2]=c[12876];c[gG+20>>2]=c[12877];c[gG+24>>2]=c[12878];c[gG+28>>2]=c[12879];c[gG+32>>2]=c[12880];c[gG+36>>2]=c[12881];c[gG+40>>2]=c[12882];c[gG+44>>2]=c[12883];c[gG+48>>2]=c[12884];c[gG+52>>2]=c[12885];c[z4+72>>2]=1;h[z4+80>>3]=0.0;c[z4+88>>2]=0;h[z4+96>>3]=15.0;h[z4+104>>3]=90.0;c[z4+112>>2]=0;if((zZ|0)==0){c[10824]=hp}else{c[zZ>>2]=hp}c[hF>>2]=zX;c[z4+4>>2]=zX;c[z4>>2]=zY;z3=hp}hp=c[13898]|0;L5337:do{if((hp|0)<(c[8272]|0)){hF=c[1054]|0;L5339:do{if((a[hF+(hp*40&-1)|0]&1)!=0){gG=c[hF+(hp*40&-1)+36>>2]|0;hK=hF+(hp*40&-1)+32|0;hG=c[10036]|0;hS=0;while(1){if((hS|0)>=(gG|0)){b7=3904;break}if((a[hG+((c[hK>>2]|0)+hS|0)|0]|0)==(a[hS+103664|0]|0)){hS=hS+1|0}else{break}}if((b7|0)==3904){b7=0;if((hS|0)==1){b7=3905;break L5337}}if((gG|0)<=0){break}nd=0;gC=0;hR=c[hK>>2]|0;while(1){if((a[nd+184456|0]|0)==(a[hG+(nd+hR|0)|0]|0)){z5=hR;z6=gC}else{if((nd|0)!=3){break L5339}z5=hR-1|0;z6=1}gz=nd+1|0;if((gz|0)<(z6+gG|0)){nd=gz;gC=z6;hR=z5}else{break}}if((z6|0)==0){if(!((nd|0)==2|(nd|0)==7)){break}}c[z3+8>>2]=-1;c[z3+12>>2]=0;hR=z3+16|0;c[hR>>2]=c[12872];c[hR+4>>2]=c[12873];c[hR+8>>2]=c[12874];c[hR+12>>2]=c[12875];c[hR+16>>2]=c[12876];c[hR+20>>2]=c[12877];c[hR+24>>2]=c[12878];c[hR+28>>2]=c[12879];c[hR+32>>2]=c[12880];c[hR+36>>2]=c[12881];c[hR+40>>2]=c[12882];c[hR+44>>2]=c[12883];c[hR+48>>2]=c[12884];c[hR+52>>2]=c[12885];c[z3+72>>2]=1;h[z3+80>>3]=0.0;c[z3+88>>2]=0;h[z3+96>>3]=15.0;h[z3+104>>3]=90.0;c[z3+112>>2]=0;c[13898]=(c[13898]|0)+1;break L5337}}while(0);hL(z3+8|0,0)}else{b7=3905}}while(0);if((b7|0)==3905){b7=0;c[z3+8>>2]=-1;c[z3+12>>2]=0;hp=z3+16|0;c[hp>>2]=c[12872];c[hp+4>>2]=c[12873];c[hp+8>>2]=c[12874];c[hp+12>>2]=c[12875];c[hp+16>>2]=c[12876];c[hp+20>>2]=c[12877];c[hp+24>>2]=c[12878];c[hp+28>>2]=c[12879];c[hp+32>>2]=c[12880];c[hp+36>>2]=c[12881];c[hp+40>>2]=c[12882];c[hp+44>>2]=c[12883];c[hp+48>>2]=c[12884];c[hp+52>>2]=c[12885];c[z3+72>>2]=1;h[z3+80>>3]=0.0;c[z3+88>>2]=0;h[z3+96>>3]=15.0;h[z3+104>>3]=90.0;c[z3+112>>2]=0}z7=c[13898]|0;if((z7|0)>=(c[8272]|0)){break}hp=c[1054]|0;if((a[hp+(z7*40&-1)|0]&1)==0){b7=5277;break L27}hF=c[hp+(z7*40&-1)+36>>2]|0;hR=hp+(z7*40&-1)+32|0;hp=c[10036]|0;gC=0;while(1){if((gC|0)>=(hF|0)){break}if((a[hp+((c[hR>>2]|0)+gC|0)|0]|0)==(a[gC+103664|0]|0)){gC=gC+1|0}else{b7=5278;break L27}}if((gC|0)==1){break}else{b7=5279;break L27}}else if((hB|0)==8){c[13898]=gv+2;jx(-2,1);break}else if((hB|0)==6){hR=gv+2|0;c[13898]=gv+3;hp=c[gw+(hR*40&-1)+36>>2]|0;if(!((a[gw+(hR*40&-1)|0]&1)!=0&(hp|0)>0)){break}hF=0;gG=0;hG=c[gw+(hR*40&-1)+32>>2]|0;while(1){if((a[hF+213440|0]|0)==(a[gB+(hF+hG|0)|0]|0)){z8=hG;z9=gG}else{if((hF|0)!=1){break L44}z8=hG-1|0;z9=1}hR=hF+1|0;if((hR|0)<(z9+hp|0)){hF=hR;gG=z9;hG=z8}else{break}}if((z9|0)==0){if(!((hF|0)==0|(hF|0)==6)){break}}dl(50952,0);break}else if((hB|0)==10){uD(ft|0,51296,192);c[9670]=3;hG=c[8272]|0;if((zm|0)>=(hG|0)){break}if((a[gH]&1)==0){break}gG=c[nh>>2]|0;hp=0;while(1){if((hp|0)>=(gG|0)){b7=4013;break}if((a[gB+((c[gF>>2]|0)+hp|0)|0]|0)==(a[hp+103664|0]|0)){hp=hp+1|0}else{Aa=0;break}}if((b7|0)==4013){b7=0;if((hp|0)==1){break}else{Aa=0}}while(1){if((Aa|0)>=(gG|0)){b7=4016;break}if((a[gB+((c[gF>>2]|0)+Aa|0)|0]|0)==(a[Aa+198768|0]|0)){Aa=Aa+1|0}else{b7=4017;break}}if((b7|0)==4016){b7=0;if((Aa|0)!=2){b7=4017}}do{if((b7|0)==4017){b7=0;if((gG|0)<=0){break L44}hp=0;nh=0;gH=c[gF>>2]|0;while(1){if((a[hp+116200|0]|0)==(a[gB+(hp+gH|0)|0]|0)){Ab=gH;Ac=nh}else{if((hp|0)!=4){break L44}Ab=gH-1|0;Ac=1}hF=hp+1|0;if((hF|0)<(Ac+gG|0)){hp=hF;nh=Ac;gH=Ab}else{break}}if((Ac|0)!=0){break}if(!((hp|0)==3|(hp|0)==9)){break L44}}}while(0);gG=gv+2|0;c[13898]=gG;if((gG|0)<(hG|0)){Ad=gG;Ae=hG;Af=gw}else{break}while(1){gG=(a[Af+(Ad*40&-1)|0]&1)==0;gF=c[Af+(Ad*40&-1)+36>>2]|0;gH=Af+(Ad*40&-1)+32|0;L5408:do{if(gG){Ag=c[gH>>2]|0;b7=4064}else{nh=c[10036]|0;hF=0;while(1){if((hF|0)>=(gF|0)){b7=4031;break}gC=c[gH>>2]|0;if((a[nh+(gC+hF|0)|0]|0)==(a[hF+103664|0]|0)){hF=hF+1|0}else{Ah=gC;break}}if((b7|0)==4031){b7=0;if((hF|0)==1){break L44}Ah=c[gH>>2]|0}if((gF|0)>0){Ai=0;Aj=0;Ak=Ah}else{Ag=Ah;b7=4064;break}while(1){if((a[Ai+197904|0]|0)==(a[nh+(Ai+Ak|0)|0]|0)){Al=Ak;Am=Aj}else{if((Ai|0)!=5){An=0;Ao=0;Ap=Ah;break}Al=Ak-1|0;Am=1}nd=Ai+1|0;if((nd|0)<(Am+gF|0)){Ai=nd;Aj=Am;Ak=Al}else{b7=4038;break}}do{if((b7|0)==4038){b7=0;if((Am|0)==0){if(!((Ai|0)==4|(Ai|0)==9)){An=0;Ao=0;Ap=Ah;break}}c[9670]=3;c[13898]=Ad+1;break L5408}}while(0);while(1){if((a[An+197448|0]|0)==(a[nh+(An+Ap|0)|0]|0)){Aq=Ap;Ar=Ao}else{if((An|0)!=5){As=0;At=0;Au=Ah;break}Aq=Ap-1|0;Ar=1}hF=An+1|0;if((hF|0)<(Ar+gF|0)){An=hF;Ao=Ar;Ap=Aq}else{b7=4045;break}}do{if((b7|0)==4045){b7=0;if((Ar|0)==0){if(!((An|0)==4|(An|0)==9)){As=0;At=0;Au=Ah;break}}c[9670]=4;c[13898]=Ad+1;break L5408}}while(0);while(1){if((a[As+196808|0]|0)==(a[nh+(As+Au|0)|0]|0)){Av=Au;Aw=At}else{if((As|0)!=4){Ax=0;Ay=0;Az=Ah;break}Av=Au-1|0;Aw=1}hF=As+1|0;if((hF|0)<(Aw+gF|0)){As=hF;At=Aw;Au=Av}else{b7=4054;break}}do{if((b7|0)==4054){b7=0;if((Aw|0)==0){if(!((As|0)==3|(As|0)==10)){Ax=0;Ay=0;Az=Ah;break}}c[9670]=1;c[13898]=Ad+1;break L5408}}while(0);while(1){if((a[Ax+196176|0]|0)==(a[nh+(Ax+Az|0)|0]|0)){AA=Az;AB=Ay}else{if((Ax|0)!=7){Ag=Ah;b7=4064;break L5408}AA=Az-1|0;AB=1}hF=Ax+1|0;if((hF|0)<(AB+gF|0)){Ax=hF;Ay=AB;Az=AA}else{break}}if((AB|0)==0){if(!((Ax|0)==6|(Ax|0)==13)){Ag=Ah;b7=4064;break}}c[9670]=2;c[13898]=Ad+1}}while(0);L5461:do{if((b7|0)==4064){b7=0;gH=(Ae|0)>(Ad|0);L5463:do{if(gH){if(gG){break L44}hp=c[10036]|0;nh=0;while(1){if((nh|0)>=(gF|0)){break}if((a[hp+(nh+Ag|0)|0]|0)==(a[nh+195688|0]|0)){nh=nh+1|0}else{break L5463}}if((nh|0)!=3){break}AC=Ad+1|0;c[13898]=AC;if((a[Af+(AC*40&-1)|0]&1)!=0){b7=4079;break L27}hp=is(O)|0;hF=c[hp>>2]|0;if((hF|0)==1){AD=+(c[hp+8>>2]|0)}else if((hF|0)==2){AD=+h[hp+8>>3]}else if((hF|0)==3){AD=+uz(c[hp+8>>2]|0,0)}else{b7=4075;break L27}if((c[fu>>2]|0)==3){uu(c[fv>>2]|0);c[fu>>2]=1}c[9671]=~~AD;break L5461}}while(0);hp=(gF|0)>0;L5481:do{if(hp&(gG^1)){hF=c[10036]|0;nd=0;gC=0;hR=Ag;while(1){if((a[nd+125568|0]|0)==(a[hF+(nd+hR|0)|0]|0)){AE=hR;AF=gC}else{if((nd|0)!=2){break L5481}AE=hR-1|0;AF=1}hK=nd+1|0;if((hK|0)<(AF+gF|0)){nd=hK;gC=AF;hR=AE}else{break}}if((AF|0)==0){if(!((nd|0)==1|(nd|0)==5)){break}}c[fy>>2]=c[9720];c[fy+4>>2]=c[38884>>2];c[fy+8>>2]=c[38888>>2];c[fy+12>>2]=c[38892>>2];c[fy+16>>2]=c[38896>>2];c[fy+20>>2]=c[38900>>2];c[fy+24>>2]=c[38904>>2];c[fy+28>>2]=c[38908>>2];c[fy+32>>2]=c[38912>>2];c[fy+36>>2]=c[38916>>2];jq(S);c[9702]=c[fz>>2];c[38812>>2]=c[fz+4>>2];c[38816>>2]=c[fz+8>>2];c[38820>>2]=c[fz+12>>2];c[9720]=c[fy>>2];c[38884>>2]=c[fy+4>>2];c[38888>>2]=c[fy+8>>2];c[38892>>2]=c[fy+12>>2];c[38896>>2]=c[fy+16>>2];c[38900>>2]=c[fy+20>>2];c[38904>>2]=c[fy+24>>2];c[38908>>2]=c[fy+28>>2];c[38912>>2]=c[fy+32>>2];c[38916>>2]=c[fy+36>>2];c[9700]=c[16630];break L5461}}while(0);L5494:do{if(gH){if(gG){break L44}hR=c[10036]|0;gC=0;while(1){if((gC|0)>=(gF|0)){break}if((a[hR+(gC+Ag|0)|0]|0)==(a[gC+128296|0]|0)){gC=gC+1|0}else{b7=4095;break L5494}}if((gC|0)!=2){b7=4095;break}if((c[9670]|0)!=4){break L44}}else{b7=4095}}while(0);if((b7|0)==4095){b7=0;if(gG){break L44}if(hp){gH=c[10036]|0;hR=0;nd=0;hF=Ag;while(1){if((a[hR+128400|0]|0)==(a[gH+(hR+hF|0)|0]|0)){AG=hF;AH=nd}else{if((hR|0)!=5){break L44}AG=hF-1|0;AH=1}AI=hR+1|0;if((AI|0)<(AH+gF|0)){hR=AI;nd=AH;hF=AG}else{break}}if((AH|0)==0){AJ=AI;b7=4103}else{AK=1}}else{AJ=0;b7=4103}if((b7|0)==4103){b7=0;AK=(AJ|0)==5|(AJ|0)==10}if(!(AK&(c[9670]|0)==4)){break L44}}c[13898]=Ad+1;hF=is(R)|0;nd=c[hF>>2]|0;if((nd|0)==1){AL=+(c[hF+8>>2]|0)}else if((nd|0)==2){AL=+h[hF+8>>3]}else if((nd|0)==3){AL=+uz(c[hF+8>>2]|0,0)}else{b7=4110;break L27}if((c[fw>>2]|0)==3){uu(c[fx>>2]|0);c[fw>>2]=1}h[4840]=AL;if(AL>0.0){break}h[4840]=1.0}}while(0);gF=c[13898]|0;gG=c[8272]|0;if((gF|0)>=(gG|0)){break L44}Ad=gF;Ae=gG;Af=c[1054]|0}}else if((hB|0)==9){hG=gv+2|0;c[13898]=hG;L5530:do{if((hG|0)<(c[8272]|0)){if((a[gw+(hG*40&-1)|0]&1)==0){break}gG=c[gw+(hG*40&-1)+36>>2]|0;gF=gw+(hG*40&-1)+32|0;hF=0;while(1){if((hF|0)>=(gG|0)){b7=4120;break}nd=c[gF>>2]|0;if((a[gB+(nd+hF|0)|0]|0)==(a[hF+103664|0]|0)){hF=hF+1|0}else{AM=nd;break}}if((b7|0)==4120){b7=0;if((hF|0)==1){b7=4129;break}AM=c[gF>>2]|0}if((gG|0)>0){AN=0;AO=0;AP=AM}else{break}while(1){if((a[AN+184456|0]|0)==(a[gB+(AN+AP|0)|0]|0)){AQ=AP;AR=AO}else{if((AN|0)!=3){AS=0;AT=0;AU=AM;break}AQ=AP-1|0;AR=1}nd=AN+1|0;if((nd|0)<(AR+gG|0)){AN=nd;AO=AR;AP=AQ}else{b7=4127;break}}if((b7|0)==4127){b7=0;if((AR|0)!=0){b7=4129;break}if((AN|0)==2|(AN|0)==7){b7=4129;break}else{AS=0;AT=0;AU=AM}}while(1){if((a[AS+209024|0]|0)==(a[gB+(AS+AU|0)|0]|0)){AV=AU;AW=AT}else{if((AS|0)!=1){break L5530}AV=AU-1|0;AW=1}gF=AS+1|0;if((gF|0)<(AW+gG|0)){AS=gF;AT=AW;AU=AV}else{break}}if((AW|0)==0){if(!((AS|0)==0|(AS|0)==10)){break}}a[30080]=1}else{b7=4129}}while(0);if((b7|0)==4129){b7=0;a[30080]=0}c[13898]=gv+3;break}else if((hB|0)==11){hG=gv+2|0;c[13898]=hG;gG=c[8272]|0;gF=(hG|0)<(gG|0);L5563:do{if(gF){if((a[gw+(hG*40&-1)|0]&1)==0){AX=hG;AY=gG;AZ=gw;break}hF=c[gw+(hG*40&-1)+36>>2]|0;nd=gw+(hG*40&-1)+32|0;hR=0;while(1){if((hR|0)>=(hF|0)){break}if((a[gB+((c[nd>>2]|0)+hR|0)|0]|0)==(a[hR+103664|0]|0)){hR=hR+1|0}else{b7=4145;break L5563}}if((hR|0)==1){b7=4144}else{b7=4145}}else{b7=4144}}while(0);if((b7|0)==4144){b7=0;uE(cW|0,0,3);hB=56248;c[hB>>2]=0;c[hB+4>>2]=0;h[7032]=1.5;a[56264]=1;a[56265]=a[cW]|0;a[56266|0]=a[cW+1|0]|0;a[56267|0]=a[cW+2|0]|0;c[14067]=6;c[14068]=252;c[14069]=0;h[7035]=1.0;c[14072]=1;c[14073]=0;b7=4145}if((b7|0)==4145){b7=0;if(gF){AX=hG;AY=gG;AZ=gw}else{break}}while(1){hB=(a[AZ+(AX*40&-1)|0]&1)==0;nd=c[AZ+(AX*40&-1)+36>>2]|0;hF=AZ+(AX*40&-1)+32|0;L5576:do{if(hB){A_=c[hF>>2]|0;b7=4176}else{gH=c[10036]|0;hp=0;while(1){if((hp|0)>=(nd|0)){b7=4151;break}nh=c[hF>>2]|0;if((a[gH+(nh+hp|0)|0]|0)==(a[hp+103664|0]|0)){hp=hp+1|0}else{A$=nh;break}}if((b7|0)==4151){b7=0;if((hp|0)==1){break L44}A$=c[hF>>2]|0}if((nd|0)>0){A0=0;A1=0;A2=A$}else{A_=A$;b7=4176;break}while(1){if((a[A0+207888|0]|0)==(a[gH+(A0+A2|0)|0]|0)){A3=A2;A4=A1}else{if((A0|0)!=5){A5=0;A6=0;A7=A$;break}A3=A2-1|0;A4=1}nh=A0+1|0;if((nh|0)<(A4+nd|0)){A0=nh;A1=A4;A2=A3}else{b7=4158;break}}do{if((b7|0)==4158){b7=0;if((A4|0)==0){if(!((A0|0)==4|(A0|0)==10)){A5=0;A6=0;A7=A$;break}}a[56264]=0;c[13898]=AX+1;break L5576}}while(0);while(1){if((a[A5+207040|0]|0)==(a[gH+(A5+A7|0)|0]|0)){A8=A7;A9=A6}else{if((A5|0)!=3){Ba=0;Bb=0;Bc=A$;break}A8=A7-1|0;A9=1}hp=A5+1|0;if((hp|0)<(A9+nd|0)){A5=hp;A6=A9;A7=A8}else{b7=4165;break}}do{if((b7|0)==4165){b7=0;if((A9|0)==0){if(!((A5|0)==2|(A5|0)==8)){Ba=0;Bb=0;Bc=A$;break}}a[56264]=1;c[13898]=AX+1;break L5576}}while(0);while(1){if((a[Ba+206448|0]|0)==(a[gH+(Ba+Bc|0)|0]|0)){Bd=Bc;Be=Bb}else{if((Ba|0)!=5){A_=A$;b7=4176;break L5576}Bd=Bc-1|0;Be=1}hp=Ba+1|0;if((hp|0)<(Be+nd|0)){Ba=hp;Bb=Be;Bc=Bd}else{break}}if((Be|0)!=0){b7=4182;break}if((Ba|0)==4|(Ba|0)==9){b7=4182}else{A_=A$;b7=4176}}}while(0);L5616:do{if((b7|0)==4176){b7=0;L5618:do{if((AY|0)>(AX|0)){if(hB){b7=5292;break L27}hF=c[10036]|0;hR=0;while(1){if((hR|0)>=(nd|0)){b7=4181;break}if((a[hF+(hR+A_|0)|0]|0)==(a[hR+205624|0]|0)){hR=hR+1|0}else{Bf=0;break}}if((b7|0)==4181){b7=0;if((hR|0)==2){b7=4182;break L5616}else{Bf=0}}while(1){if((Bf|0)>=(nd|0)){break}if((a[hF+(Bf+A_|0)|0]|0)==(a[Bf+205008|0]|0)){Bf=Bf+1|0}else{break L5618}}if((Bf|0)!=5){break}c[13898]=AX+1;c[14062]=0;hF=is(L)|0;hR=c[hF>>2]|0;if((hR|0)==1){Bg=+(c[hF+8>>2]|0)}else if((hR|0)==2){Bg=+h[hF+8>>3]}else if((hR|0)==3){Bg=+uz(c[hF+8>>2]|0,0)}else{b7=4197;break L27}if((c[fA>>2]|0)==3){uu(c[fB>>2]|0);c[fA>>2]=1}h[7032]=Bg;break L5616}}while(0);if(!((nd|0)>0&(hB^1))){b7=5293;break L27}hF=c[10036]|0;hR=0;gC=0;gH=A_;while(1){if((a[hR+204616|0]|0)==(a[hF+(hR+gH|0)|0]|0)){Bh=gH;Bi=gC}else{if((hR|0)!=4){Bj=0;Bk=0;Bl=A_;break}Bh=gH-1|0;Bi=1}hp=hR+1|0;if((hp|0)<(Bi+nd|0)){hR=hp;gC=Bi;gH=Bh}else{b7=4207;break}}do{if((b7|0)==4207){b7=0;if((Bi|0)==0){if(!((hR|0)==8|(hR|0)==3)){Bj=0;Bk=0;Bl=A_;break}}c[13898]=AX+1;gH=is(K)|0;gC=c[gH>>2]|0;if((gC|0)==1){Bm=+(c[gH+8>>2]|0)}else if((gC|0)==2){Bm=+h[gH+8>>3]}else if((gC|0)==3){Bm=+uz(c[gH+8>>2]|0,0)}else{b7=4213;break L27}if((c[fE>>2]|0)==3){uu(c[fF>>2]|0);c[fE>>2]=1}h[7032]=Bm;if(Bm<0.0|Bm>1.0){b7=4217;break L27}c[14062]=1;break L5616}}while(0);while(1){if((a[Bj+204096|0]|0)==(a[hF+(Bj+Bl|0)|0]|0)){Bn=Bl;Bo=Bk}else{if((Bj|0)!=6){Bp=0;Bq=0;Br=A_;break}Bn=Bl-1|0;Bo=1}hR=Bj+1|0;if((hR|0)<(Bo+nd|0)){Bj=hR;Bk=Bo;Bl=Bn}else{b7=4223;break}}do{if((b7|0)==4223){b7=0;if((Bo|0)==0){if(!((Bj|0)==12|(Bj|0)==5)){Bp=0;Bq=0;Br=A_;break}}c[13898]=AX+1;c[14068]=252;break L5616}}while(0);while(1){if((a[Bp+203848|0]|0)==(a[hF+(Bp+Br|0)|0]|0)){Bs=Br;Bt=Bq}else{if((Bp|0)!=7){Bu=0;Bv=0;Bw=A_;break}Bs=Br-1|0;Bt=1}hR=Bp+1|0;if((hR|0)<(Bt+nd|0)){Bp=hR;Bq=Bt;Br=Bs}else{b7=4230;break}}do{if((b7|0)==4230){b7=0;if((Bt|0)==0){if(!((Bp|0)==11|(Bp|0)==6)){Bu=0;Bv=0;Bw=A_;break}}c[13898]=AX+1;c[14068]=257;break L5616}}while(0);while(1){if((a[Bu+203640|0]|0)==(a[hF+(Bu+Bw|0)|0]|0)){Bx=Bw;By=Bv}else{if((Bu|0)!=3){Bz=0;BA=0;BB=A_;break}Bx=Bw-1|0;By=1}hR=Bu+1|0;if((hR|0)<(By+nd|0)){Bu=hR;Bv=By;Bw=Bx}else{b7=4237;break}}do{if((b7|0)==4237){b7=0;if((By|0)==0){if(!((Bu|0)==10|(Bu|0)==2)){Bz=0;BA=0;BB=A_;break}}c[13898]=AX+1;hR=is(N)|0;gH=c[hR>>2]|0;if((gH|0)==1){BC=+(c[hR+8>>2]|0)}else if((gH|0)==2){BC=+h[hR+8>>3]}else if((gH|0)==3){BC=+uz(c[hR+8>>2]|0,0)}else{b7=4243;break L27}if((c[fC>>2]|0)==3){uu(c[fD>>2]|0);c[fC>>2]=1}h[7035]=BC;if(BC<0.0){b7=4247;break L27}else{break L5616}}}while(0);while(1){if((a[Bz+203048|0]|0)==(a[hF+(Bz+BB|0)|0]|0)){BD=BB;BE=BA}else{if((Bz|0)!=3){BF=0;BG=0;BH=A_;break}BD=BB-1|0;BE=1}hR=Bz+1|0;if((hR|0)<(BE+nd|0)){Bz=hR;BA=BE;BB=BD}else{b7=4252;break}}do{if((b7|0)==4252){b7=0;if((BE|0)==0){if(!((Bz|0)==6|(Bz|0)==2)){BF=0;BG=0;BH=A_;break}}hR=AX+1|0;c[13898]=hR;if((AY|0)<=(hR|0)){b7=5288;break L27}if((a[AZ+(hR*40&-1)|0]&1)==0){b7=5289;break L27}gH=c[AZ+(hR*40&-1)+36>>2]|0;gC=AZ+(hR*40&-1)+32|0;hR=0;while(1){if((hR|0)>=(gH|0)){b7=4259;break}if((a[hF+((c[gC>>2]|0)+hR|0)|0]|0)==(a[hR+150208|0]|0)){hR=hR+1|0}else{BI=0;b7=4261;break}}do{if((b7|0)==4259){b7=0;if((hR|0)!=3){BI=0;b7=4261;break}c[14072]=0}}while(0);L5721:do{if((b7|0)==4261){while(1){b7=0;if((BI|0)>=(gH|0)){b7=4263;break}if((a[hF+((c[gC>>2]|0)+BI|0)|0]|0)==(a[BI+202352|0]|0)){BI=BI+1|0;b7=4261}else{BJ=0;break}}do{if((b7|0)==4263){b7=0;if((BI|0)!=1){BJ=0;break}c[14072]=2;break L5721}}while(0);while(1){if((BJ|0)>=(gH|0)){b7=4267;break}if((a[hF+((c[gC>>2]|0)+BJ|0)|0]|0)==(a[BJ+108208|0]|0)){BJ=BJ+1|0}else{BK=0;break}}do{if((b7|0)==4267){b7=0;if((BJ|0)!=2){BK=0;break}c[14072]=3;break L5721}}while(0);while(1){if((BK|0)>=(gH|0)){break}if((a[hF+((c[gC>>2]|0)+BK|0)|0]|0)==(a[BK+201e3|0]|0)){BK=BK+1|0}else{b7=5290;break L27}}if((BK|0)!=4){b7=5291;break L27}c[14072]=1}}while(0);c[13898]=AX+2;break L5616}}while(0);while(1){if((a[BF+199432|0]|0)==(a[hF+(BF+BH|0)|0]|0)){BL=BH;BM=BG}else{if((BF|0)!=2){BN=0;BO=0;BP=A_;break}BL=BH-1|0;BM=1}gC=BF+1|0;if((gC|0)<(BM+nd|0)){BF=gC;BG=BM;BH=BL}else{b7=4279;break}}do{if((b7|0)==4279){b7=0;if((BM|0)==0){if(!((BF|0)==1|(BF|0)==6)){BN=0;BO=0;BP=A_;break}}a[56292]=1;c[13898]=AX+1;break L5616}}while(0);while(1){if((a[BN+199064|0]|0)==(a[hF+(BN+BP|0)|0]|0)){BQ=BP;BR=BO}else{if((BN|0)!=2){b7=5294;break L27}BQ=BP-1|0;BR=1}gC=BN+1|0;if((gC|0)<(BR+nd|0)){BN=gC;BO=BR;BP=BQ}else{break}}if((BR|0)==0){if(!((BN|0)==1|(BN|0)==8)){b7=5295;break L27}}a[56292]=0;c[13898]=AX+1}}while(0);if((b7|0)==4182){b7=0;c[13898]=AX+1;nd=is(M)|0;hB=c[nd>>2]|0;if((hB|0)==1){BS=+(c[nd+8>>2]|0)}else if((hB|0)==2){BS=+h[nd+8>>3]}else if((hB|0)==3){BS=+uz(c[nd+8>>2]|0,0)}else{b7=4186;break L27}if((c[fG>>2]|0)==3){uu(c[fH>>2]|0);c[fG>>2]=1}c[14067]=~~BS-1}nd=c[13898]|0;hB=c[8272]|0;if((nd|0)>=(hB|0)){break L44}AX=nd;AY=hB;AZ=c[1054]|0}}else{b7=4290;break L27}}else if((gD|0)==84){c[13898]=gv+1;a[46752]=1}else if((gD|0)==86){gG=gv+1|0;c[13898]=gG;hG=c[3526]|0;if((hG|0)==0){BT=gG}else{az(hG|0);c[3526]=0;BT=c[13898]|0}L5778:do{if((BT|0)<(c[8272]|0)){hG=c[1054]|0;L5780:do{if((a[hG+(BT*40&-1)|0]&1)!=0){gG=c[hG+(BT*40&-1)+36>>2]|0;gF=hG+(BT*40&-1)+32|0;hB=c[10036]|0;nd=0;while(1){if((nd|0)>=(gG|0)){break}if((a[hB+((c[gF>>2]|0)+nd|0)|0]|0)==(a[nd+103664|0]|0)){nd=nd+1|0}else{break L5780}}if((nd|0)==1){break L5778}}}while(0);a[14176]=1;is(J);a[14176]=0;if((c[fI>>2]|0)!=3){c[13898]=BT;break}hG=c[fJ>>2]|0;if((hG|0)==0){break}gF=bF(hG|0,137896)|0;c[3526]=gF;if((gF|0)==0){b7=4304;break L27}uu(hG)}}while(0);a[14112]=1}else if((gD|0)==87){BU=gv+1|0;c[13898]=BU;if((a[33512]&1)!=0){b7=4308;break L27}L5795:do{if((BU|0)<(c[8272]|0)){L5797:do{if((a[gw+(BU*40&-1)|0]&1)!=0){hG=c[gw+(BU*40&-1)+36>>2]|0;gF=gw+(BU*40&-1)+32|0;hB=0;while(1){if((hB|0)>=(hG|0)){b7=4314;break}if((a[gB+((c[gF>>2]|0)+hB|0)|0]|0)==(a[hB+103664|0]|0)){hB=hB+1|0}else{BV=0;break}}if((b7|0)==4314){b7=0;if((hB|0)==1){break L5795}else{BV=0}}while(1){if((BV|0)>=(hG|0)){break}if((a[gB+((c[gF>>2]|0)+BV|0)|0]|0)==(a[BV+216664|0]|0)){BV=BV+1|0}else{break L5797}}if((BV|0)!=4){break}hz(a[37400]&1);c[13898]=(c[13898]|0)+1;break L44}}while(0);hO(1);c[8026]=0;do{if((a[14080]&1)!=0){if(a[13032]|0){gF=c[(c[3524]|0)+104>>2]|0;if((gF|0)!=0){cS[gF&511]()}a[13032]=0}if(a[14088]|0){cS[c[(c[3524]|0)+44>>2]&511]();a[14088]=0}if((a[14080]&1)==0){break}cS[c[(c[3524]|0)+40>>2]&511]();a[14080]=0;c[10028]=0}}while(0);gF=c[13898]|0;L5823:do{if((c[8272]|0)>(gF|0)){hG=c[1054]|0;if((a[hG+(gF*40&-1)|0]&1)==0){break}hB=c[hG+(gF*40&-1)+36>>2]|0;nd=hG+(gF*40&-1)+32|0;hG=c[10036]|0;gG=0;while(1){if((gG|0)>=(hB|0)){break}if((a[hG+((c[nd>>2]|0)+gG|0)|0]|0)==(a[gG+216216|0]|0)){gG=gG+1|0}else{break L5823}}if((gG|0)!=3){break}hD();c[13898]=(c[13898]|0)+1;break L44}}while(0);c[3524]=0;gF=lz()|0;c[3524]=gF;a[13048]=0;if((gF|0)==0){break L44}cS[c[gF+32>>2]&511]();if((a[37400]&1)==0|(a[13048]|0)==0){break L44}gF=c[m>>2]|0;cf(gF|0,215680,(v=i,i=i+8|0,c[v>>2]=13048,v)|0);break L44}}while(0);ls();a[25280]=0}else if((gD|0)==88){gF=c[8272]|0;BW=gv+1|0;c[13898]=BW;if((BW|0)>=(gF|0)){break}nd=(a[gw+(BW*40&-1)|0]&1)==0;L5837:do{if(nd){BX=1}else{hG=c[gw+(BW*40&-1)+36>>2]|0;hB=gw+(BW*40&-1)+32|0;hF=0;while(1){if((hF|0)>=(hG|0)){break}if((a[gB+((c[hB>>2]|0)+hF|0)|0]|0)==(a[hF+103664|0]|0)){hF=hF+1|0}else{BX=1;break L5837}}BX=(hF|0)!=1}}while(0);hB=c[3524]|0;if(!(BX&(hB|0)!=0)){break}hG=c[gw+(BW*40&-1)+36>>2]|0;gC=c[gw+(BW*40&-1)+32>>2]|0;L5845:do{if(nd){b7=4406}else{gH=(hG|0)>0;L5847:do{if(gH){hR=0;hp=0;nh=gC;while(1){if((a[hR+122880|0]|0)==(a[gB+(hR+nh|0)|0]|0)){BY=nh;BZ=hp}else{if((hR|0)!=3){B_=0;B$=0;B0=gC;b7=4354;break}BY=nh-1|0;BZ=1}hK=hR+1|0;if((hK|0)<(BZ+hG|0)){hR=hK;hp=BZ;nh=BY}else{b7=4352;break}}do{if((b7|0)==4352){b7=0;if((BZ|0)!=0){break}if(!((hR|0)==2|(hR|0)==8)){B_=0;B$=0;B0=gC;b7=4354}}}while(0);do{if((b7|0)==4354){while(1){b7=0;if((a[B_+121536|0]|0)==(a[gB+(B_+B0|0)|0]|0)){B1=B0;B2=B$}else{if((B_|0)!=5){B3=0;break L5847}B1=B0-1|0;B2=1}hR=B_+1|0;if((hR|0)<(B2+hG|0)){B_=hR;B$=B2;B0=B1;b7=4354}else{break}}if((B2|0)!=0){break}if(!((B_|0)==4|(B_|0)==10)){B3=0;break L5847}}}while(0);hR=gv+2|0;c[8272]=(gF|0)<(hR|0)?gF:hR;if((c[hB+156>>2]|0)!=0){b7=4411;break L5845}c[13898]=hR;break L5845}else{B3=0}}while(0);while(1){if((B3|0)>=(hG|0)){b7=4364;break}if((a[gB+(B3+gC|0)|0]|0)==(a[B3+124352|0]|0)){B3=B3+1|0}else{B4=0;b7=4365;break}}if((b7|0)==4364){b7=0;if((B3|0)!=4){B4=0;b7=4365}}do{if((b7|0)==4365){while(1){b7=0;if((B4|0)>=(hG|0)){b7=4367;break}if((a[gB+(B4+gC|0)|0]|0)==(a[B4+223712|0]|0)){B4=B4+1|0;b7=4365}else{B5=0;break}}if((b7|0)==4367){b7=0;if((B4|0)==5){break}else{B5=0}}while(1){if((B5|0)>=(hG|0)){b7=4372;break}if((a[gB+(B5+gC|0)|0]|0)==(a[B5+128096|0]|0)){B5=B5+1|0}else{B6=0;break}}do{if((b7|0)==4372){b7=0;if((B5|0)!=9){B6=0;break}if((c[hB+96>>2]&4096|0)!=0){b7=4411;break L5845}c[13898]=gv+2;hF=is(H)|0;hR=c[hF>>2]|0;if((hR|0)==3){nh=c[hF+8>>2]|0;uz(nh,0)}else if(!((hR|0)==1|(hR|0)==2)){b7=4376;break L27}if((c[fM>>2]|0)!=3){break L5845}uu(c[fN>>2]|0);c[fM>>2]=1;break L5845}}while(0);while(1){if((B6|0)>=(hG|0)){b7=4381;break}if((a[gB+(B6+gC|0)|0]|0)==(a[B6+128296|0]|0)){B6=B6+1|0}else{b7=4382;break}}if((b7|0)==4381){b7=0;if((B6|0)!=2){b7=4382}}L5895:do{if((b7|0)==4382){b7=0;L5897:do{if(gH){hR=0;nh=0;hF=gC;while(1){if((a[hR+128400|0]|0)==(a[gB+(hR+hF|0)|0]|0)){B7=hF;B8=nh}else{if((hR|0)!=5){B9=0;Ca=0;Cb=gC;break}B7=hF-1|0;B8=1}hp=hR+1|0;if((hp|0)<(B8+hG|0)){hR=hp;nh=B8;hF=B7}else{b7=4387;break}}if((b7|0)==4387){b7=0;if((B8|0)!=0){break L5895}if((hR|0)==4|(hR|0)==9){break L5895}else{B9=0;Ca=0;Cb=gC}}while(1){if((a[B9+217752|0]|0)==(a[gB+(B9+Cb|0)|0]|0)){Cc=Cb;Cd=Ca}else{if((B9|0)!=4){Ce=0;b7=4401;break L5897}Cc=Cb-1|0;Cd=1}hF=B9+1|0;if((hF|0)<(Cd+hG|0)){B9=hF;Ca=Cd;Cb=Cc}else{break}}if((Cd|0)!=0){break}if(!((B9|0)==3|(B9|0)==6)){Ce=0;b7=4401}}else{Ce=0;b7=4401}}while(0);if((b7|0)==4401){while(1){b7=0;if((Ce|0)>=(hG|0)){break}if((a[gB+(Ce+gC|0)|0]|0)==(a[Ce+131504|0]|0)){Ce=Ce+1|0;b7=4401}else{b7=4406;break L5845}}if((Ce|0)!=5){b7=4406;break L5845}}if((c[hB+96>>2]&256|0)!=0){b7=4411;break L5845}c[13898]=gv+2;break L5845}}while(0);if((c[hB+96>>2]&2048|0)!=0){b7=4411;break L5845}c[13898]=gv+2;hR=is(I)|0;hF=c[hR>>2]|0;if((hF|0)==3){nh=c[hR+8>>2]|0;uz(nh,0)}else if(!((hF|0)==1|(hF|0)==2)){b7=4392;break L27}if((c[fK>>2]|0)!=3){break L5845}uu(c[fL>>2]|0);c[fK>>2]=1;break L5845}}while(0);gH=gv+3|0;c[8272]=(gF|0)<(gH|0)?gF:gH;if((c[hB+88>>2]|0)!=0){b7=4411;break}c[13898]=gH}}while(0);if((b7|0)==4406){b7=0;if((aY(c[hB>>2]|0,218960)|0)!=0|nd){b7=5296;break L27}else{Cf=0}while(1){if((Cf|0)>=(hG|0)){break}if((a[gB+(Cf+gC|0)|0]|0)==(a[Cf+218488|0]|0)){Cf=Cf+1|0}else{b7=5297;break L27}}if((Cf|0)==5&(gF|0)==4){b7=4411}else{b7=5298;break L27}}if((b7|0)==4411){b7=0;a[13048]=0;cS[c[hB+32>>2]&511]()}c[8272]=gF}else if((gD|0)==89){gC=gv+1|0;c[13898]=gC;hG=c[8272]|0;nd=(gC|0)<(hG|0);L5940:do{if(nd){if((a[gw+(gC*40&-1)|0]&1)==0){Cg=0;Ch=0;Ci=gC;Cj=hG;Ck=gw;b7=4421;break}gH=c[gw+(gC*40&-1)+36>>2]|0;hF=gw+(gC*40&-1)+32|0;nh=0;while(1){if((nh|0)>=(gH|0)){break}if((a[gB+((c[hF>>2]|0)+nh|0)|0]|0)==(a[nh+103664|0]|0)){nh=nh+1|0}else{b7=4420;break L5940}}if((nh|0)==1){b7=4419}else{b7=4420}}else{b7=4419}}while(0);if((b7|0)==4419){b7=0;a[65072]=1;a[65760]=1;a[66448]=1;a[67136]=1;a[67824]=1;a[68512]=1;a[69200]=1;a[69888]=1;a[70576]=1;a[71264]=1;a[71952]=1;b7=4420}if((b7|0)==4420){b7=0;if(nd){Cg=0;Ch=0;Ci=gC;Cj=hG;Ck=gw;b7=4421}else{Cl=0;Cm=0}}L5951:do{if((b7|0)==4421){while(1){b7=0;gF=(a[Ck+(Ci*40&-1)|0]&1)==0;hB=c[Ck+(Ci*40&-1)+36>>2]|0;hF=Ck+(Ci*40&-1)+32|0;L5954:do{if(gF){Cn=c[hF>>2]|0;b7=4620}else{gH=c[10036]|0;hR=0;while(1){if((hR|0)>=(hB|0)){b7=4426;break}hp=c[hF>>2]|0;if((a[gH+(hp+hR|0)|0]|0)==(a[hR+103664|0]|0)){hR=hR+1|0}else{Co=hp;break}}if((b7|0)==4426){b7=0;if((hR|0)==1){Cl=Cg;Cm=Ch;break L5951}Co=c[hF>>2]|0}if((hB|0)>0){Cp=0;Cq=0;Cr=Co}else{Cn=Co;b7=4620;break}while(1){if((a[Cp+116896|0]|0)==(a[gH+(Cp+Cr|0)|0]|0)){Cs=Cr;Ct=Cq}else{if((Cp|0)!=2){Cu=0;Cv=0;Cw=Co;break}Cs=Cr-1|0;Ct=1}hp=Cp+1|0;if((hp|0)<(Ct+hB|0)){Cp=hp;Cq=Ct;Cr=Cs}else{b7=4434;break}}do{if((b7|0)==4434){b7=0;if((Ct|0)==0){if(!((Cp|0)==1|(Cp|0)==4)){Cu=0;Cv=0;Cw=Co;break}}c[16229]=c[16229]&-4|2;c[16401]=c[16401]&-4|2;c[16573]=c[16573]&-4|2;c[16745]=c[16745]&-4|2;c[16917]=c[16917]&-4|2;c[17089]=c[17089]&-4|2;c[17261]=c[17261]&-4|2;c[17433]=c[17433]&-4|2;c[17605]=c[17605]&-4|2;c[17777]=c[17777]&-4|2;c[17949]=c[17949]&-4|2;c[13898]=Ci+1;Cx=1;Cy=Cg;break L5954}}while(0);while(1){if((a[Cu+141136|0]|0)==(a[gH+(Cu+Cw|0)|0]|0)){Cz=Cw;CA=Cv}else{if((Cu|0)!=2){CB=0;CC=0;CD=Co;break}Cz=Cw-1|0;CA=1}hR=Cu+1|0;if((hR|0)<(CA+hB|0)){Cu=hR;Cv=CA;Cw=Cz}else{b7=4441;break}}do{if((b7|0)==4441){b7=0;if((CA|0)==0){if(!((Cu|0)==1|(Cu|0)==6)){CB=0;CC=0;CD=Co;break}}c[16229]=c[16229]&-4|1;c[16401]=c[16401]&-4|1;c[16573]=c[16573]&-4|1;c[16745]=c[16745]&-4|1;c[16917]=c[16917]&-4|1;c[17089]=c[17089]&-4|1;c[17261]=c[17261]&-4|1;c[17433]=c[17433]&-4|1;c[17605]=c[17605]&-4|1;c[17777]=c[17777]&-4|1;c[17949]=c[17949]&-4|1;c[13898]=Ci+1;Cx=Ch;Cy=Cg;break L5954}}while(0);while(1){if((a[CB+115048|0]|0)==(a[gH+(CB+CD|0)|0]|0)){CE=CD;CF=CC}else{if((CB|0)!=2){CG=0;CH=0;CI=Co;break}CE=CD-1|0;CF=1}hR=CB+1|0;if((hR|0)<(CF+hB|0)){CB=hR;CC=CF;CD=CE}else{b7=4450;break}}do{if((b7|0)==4450){b7=0;if((CF|0)==0){if(!((CB|0)==1|(CB|0)==6)){CG=0;CH=0;CI=Co;break}}c[16229]=c[16229]|4;c[16401]=c[16401]|4;c[16573]=c[16573]|4;c[16745]=c[16745]|4;c[16917]=c[16917]|4;c[17089]=c[17089]|4;c[17261]=c[17261]|4;c[17433]=c[17433]|4;c[17605]=c[17605]|4;c[17777]=c[17777]|4;c[17949]=c[17949]|4;c[13898]=Ci+1;Cx=Ch;Cy=1;break L5954}}while(0);while(1){if((a[CG+114024|0]|0)==(a[gH+(CG+CI|0)|0]|0)){CJ=CI;CK=CH}else{if((CG|0)!=4){CL=0;CM=0;CN=Co;break}CJ=CI-1|0;CK=1}hR=CG+1|0;if((hR|0)<(CK+hB|0)){CG=hR;CH=CK;CI=CJ}else{b7=4457;break}}do{if((b7|0)==4457){b7=0;if((CK|0)==0){if(!((CG|0)==3|(CG|0)==8)){CL=0;CM=0;CN=Co;break}}c[16229]=c[16229]&-5;c[16401]=c[16401]&-5;c[16573]=c[16573]&-5;c[16745]=c[16745]&-5;c[16917]=c[16917]&-5;c[17089]=c[17089]&-5;c[17261]=c[17261]&-5;c[17433]=c[17433]&-5;c[17605]=c[17605]&-5;c[17777]=c[17777]&-5;c[17949]=c[17949]&-5;c[13898]=Ci+1;Cx=Ch;Cy=1;break L5954}}while(0);while(1){if((a[CL+110600|0]|0)==(a[gH+(CL+CN|0)|0]|0)){CO=CN;CP=CM}else{if((CL|0)!=2){CQ=0;CR=0;CS=Co;break}CO=CN-1|0;CP=1}hR=CL+1|0;if((hR|0)<(CP+hB|0)){CL=hR;CM=CP;CN=CO}else{b7=4464;break}}do{if((b7|0)==4464){b7=0;if((CP|0)==0){if(!((CL|0)==1|(CL|0)==7)){CQ=0;CR=0;CS=Co;break}}a[65072]=1;a[65760]=1;a[66448]=1;a[67136]=1;a[67824]=1;a[68512]=1;a[69200]=1;a[69888]=1;a[70576]=1;a[71264]=1;a[71952]=1;c[13898]=Ci+1;Cx=Ch;Cy=Cg;break L5954}}while(0);while(1){if((a[CQ+107800|0]|0)==(a[gH+(CQ+CS|0)|0]|0)){CT=CS;CU=CR}else{if((CQ|0)!=3){CV=0;CW=0;CX=Co;break}CT=CS-1|0;CU=1}hR=CQ+1|0;if((hR|0)<(CU+hB|0)){CQ=hR;CR=CU;CS=CT}else{b7=4471;break}}do{if((b7|0)==4471){b7=0;if((CU|0)==0){if(!((CQ|0)==2|(CQ|0)==8)){CV=0;CW=0;CX=Co;break}}a[65072]=0;a[65760]=0;a[66448]=0;a[67136]=0;a[67824]=0;a[68512]=0;a[69200]=0;a[69888]=0;a[70576]=0;a[71264]=0;a[71952]=0;c[13898]=Ci+1;Cx=Ch;Cy=Cg;break L5954}}while(0);while(1){if((a[CV+106864|0]|0)==(a[gH+(CV+CX|0)|0]|0)){CY=CX;CZ=CW}else{if((CV|0)!=2){C_=0;C$=0;C0=Co;break}CY=CX-1|0;CZ=1}hR=CV+1|0;if((hR|0)<(CZ+hB|0)){CV=hR;CW=CZ;CX=CY}else{b7=4478;break}}do{if((b7|0)==4478){b7=0;if((CZ|0)==0){if(!((CV|0)==5|(CV|0)==1)){C_=0;C$=0;C0=Co;break}}hR=Ci+1|0;c[13898]=hR;hp=c[Ck+(hR*40&-1)+36>>2]|0;L6041:do{if((a[Ck+(hR*40&-1)|0]&1)!=0&(hp|0)>0){gG=0;hK=0;hS=c[Ck+(hR*40&-1)+32>>2]|0;while(1){if((a[gG+184456|0]|0)==(a[gH+(gG+hS|0)|0]|0)){C1=hS;C2=hK}else{if((gG|0)!=3){break L6041}C1=hS-1|0;C2=1}gz=gG+1|0;if((gz|0)<(C2+hp|0)){gG=gz;hK=C2;hS=C1}else{break}}if((C2|0)==0){if(!((gG|0)==2|(gG|0)==7)){break}}h[8132]=1.0;h[8133]=.5;h[8218]=1.0;h[8219]=.5;h[8304]=1.0;h[8305]=.5;h[8390]=1.0;h[8391]=.5;h[8476]=1.0;h[8477]=.5;h[8562]=1.0;h[8563]=.5;h[8648]=1.0;h[8649]=.5;h[8734]=1.0;h[8735]=.5;h[8820]=1.0;h[8821]=.5;h[8906]=1.0;h[8907]=.5;h[8992]=1.0;h[8993]=.5;c[13898]=Ci+2;Cx=Ch;Cy=Cg;break L5954}}while(0);hp=is(C)|0;hR=c[hp>>2]|0;if((hR|0)==1){C3=+(c[hp+8>>2]|0)}else if((hR|0)==2){C3=+h[hp+8>>3]}else if((hR|0)==3){C3=+uz(c[hp+8>>2]|0,0)}else{b7=4493;break L27}if((c[fV>>2]|0)==3){uu(c[fW>>2]|0);c[fV>>2]=1}hp=c[13898]|0;L6062:do{if((c[8272]|0)>(hp|0)){hR=c[1054]|0;if((a[hR+(hp*40&-1)|0]&1)==0){b7=4509;break}hS=c[hR+(hp*40&-1)+36>>2]|0;hK=hR+(hp*40&-1)+32|0;hR=c[10036]|0;gz=0;while(1){if((gz|0)>=(hS|0)){break}if((a[hR+((c[hK>>2]|0)+gz|0)|0]|0)==(a[gz+148464|0]|0)){gz=gz+1|0}else{b7=4509;break L6062}}if((gz|0)!=1){b7=4509;break}c[13898]=hp+1;hK=is(B)|0;hR=c[hK>>2]|0;if((hR|0)==1){C4=+(c[hK+8>>2]|0)}else if((hR|0)==2){C4=+h[hK+8>>3]}else if((hR|0)==3){C4=+uz(c[hK+8>>2]|0,0)}else{b7=4506;break L27}if((c[fX>>2]|0)!=3){C5=C4;break}uu(c[fY>>2]|0);c[fX>>2]=1;C5=C4}else{b7=4509}}while(0);if((b7|0)==4509){b7=0;C5=C3*.5}h[8132]=C3;h[8133]=C5;h[8218]=C3;h[8219]=C5;h[8304]=C3;h[8305]=C5;h[8390]=C3;h[8391]=C5;h[8476]=C3;h[8477]=C5;h[8562]=C3;h[8563]=C5;h[8648]=C3;h[8649]=C5;h[8734]=C3;h[8735]=C5;h[8820]=C3;h[8821]=C5;h[8906]=C3;h[8907]=C5;h[8992]=C3;h[8993]=C5;Cx=Ch;Cy=Cg;break L5954}}while(0);while(1){if((a[C_+104840|0]|0)==(a[gH+(C_+C0|0)|0]|0)){C6=C0;C7=C$}else{if((C_|0)!=2){C8=0;C9=0;Da=Co;break}C6=C0-1|0;C7=1}hp=C_+1|0;if((hp|0)<(C7+hB|0)){C_=hp;C$=C7;C0=C6}else{b7=4515;break}}do{if((b7|0)==4515){b7=0;if((C7|0)==0){if(!((C_|0)==1|(C_|0)==6)){C8=0;C9=0;Da=Co;break}}c[16258]=-270;c[16430]=-270;c[16602]=-270;c[16774]=-270;c[16946]=-270;c[17118]=-270;c[17290]=-270;c[17462]=-270;c[17634]=-270;c[17806]=-270;c[17978]=-270;hp=Ci+1|0;c[13898]=hp;if((Cj|0)<=(hp|0)){Cx=Ch;Cy=Cg;break L5954}if((a[Ck+(hp*40&-1)|0]&1)==0){Cx=Ch;Cy=Cg;break L5954}hK=c[Ck+(hp*40&-1)+36>>2]|0;hR=Ck+(hp*40&-1)+32|0;hp=0;while(1){if((hp|0)>=(hK|0)){break}if((a[gH+((c[hR>>2]|0)+hp|0)|0]|0)==(a[hp+163312|0]|0)){hp=hp+1|0}else{Cx=Ch;Cy=Cg;break L5954}}if((hp|0)!=2){Cx=Ch;Cy=Cg;break L5954}c[13898]=Ci+2;hR=is(D)|0;hK=c[hR>>2]|0;if((hK|0)==1){Db=+(c[hR+8>>2]|0)}else if((hK|0)==2){Db=+h[hR+8>>3]}else if((hK|0)==3){Db=+uz(c[hR+8>>2]|0,0)}else{b7=4527;break L27}if((c[fT>>2]|0)==3){uu(c[fU>>2]|0);c[fT>>2]=1}hR=~~Db;c[16258]=hR;c[16430]=hR;c[16602]=hR;c[16774]=hR;c[16946]=hR;c[17118]=hR;c[17290]=hR;c[17462]=hR;c[17634]=hR;c[17806]=hR;c[17978]=hR;Cx=Ch;Cy=Cg;break L5954}}while(0);while(1){if((a[C8+104240|0]|0)==(a[gH+(C8+Da|0)|0]|0)){Dc=Da;Dd=C9}else{if((C8|0)!=4){De=0;Df=0;Dg=Co;break}Dc=Da-1|0;Dd=1}hR=C8+1|0;if((hR|0)<(Dd+hB|0)){C8=hR;C9=Dd;Da=Dc}else{b7=4535;break}}do{if((b7|0)==4535){b7=0;if((Dd|0)==0){if(!((C8|0)==3|(C8|0)==8)){De=0;Df=0;Dg=Co;break}}c[16258]=0;c[16430]=0;c[16602]=0;c[16774]=0;c[16946]=0;c[17118]=0;c[17290]=0;c[17462]=0;c[17634]=0;c[17806]=0;c[17978]=0;c[13898]=Ci+1;Cx=Ch;Cy=Cg;break L5954}}while(0);while(1){if((a[De+149696|0]|0)==(a[gH+(De+Dg|0)|0]|0)){Dh=Dg;Di=Df}else{if((De|0)!=1){Dj=0;Dk=0;Dl=Co;break}Dh=Dg-1|0;Di=1}hR=De+1|0;if((hR|0)<(Di+hB|0)){De=hR;Df=Di;Dg=Dh}else{b7=4542;break}}do{if((b7|0)==4542){b7=0;if((Di|0)==0){if(!((De|0)==0|(De|0)==4)){Dj=0;Dk=0;Dl=Co;break}}c[16282]=0;a[65272]=1;c[16454]=0;a[65960]=1;c[16626]=0;a[66648]=1;c[16798]=0;a[67336]=1;c[16970]=0;a[68024]=1;c[17142]=0;a[68712]=1;c[17314]=0;a[69400]=1;c[17486]=0;a[70088]=1;c[17658]=0;a[70776]=1;c[17830]=0;a[71464]=1;c[18002]=0;a[72152]=1;c[13898]=Ci+1;Cx=Ch;Cy=Cg;break L5954}}while(0);while(1){if((a[Dj+179896|0]|0)==(a[gH+(Dj+Dl|0)|0]|0)){Dm=Dl;Dn=Dk}else{if((Dj|0)!=1){Do=0;Dp=0;Dq=Co;b7=4551;break}Dm=Dl-1|0;Dn=1}hR=Dj+1|0;if((hR|0)<(Dn+hB|0)){Dj=hR;Dk=Dn;Dl=Dm}else{b7=4549;break}}do{if((b7|0)==4549){b7=0;if((Dn|0)!=0){break}if(!((Dj|0)==0|(Dj|0)==6)){Do=0;Dp=0;Dq=Co;b7=4551}}}while(0);do{if((b7|0)==4551){while(1){b7=0;if((a[Do+149304|0]|0)==(a[gH+(Do+Dq|0)|0]|0)){Dr=Dq;Ds=Dp}else{if((Do|0)!=1){Dt=0;Du=0;Dv=Co;break}Dr=Dq-1|0;Ds=1}hR=Do+1|0;if((hR|0)<(Ds+hB|0)){Do=hR;Dp=Ds;Dq=Dr;b7=4551}else{b7=4555;break}}if((b7|0)==4555){b7=0;if((Ds|0)!=0){break}if((Do|0)==0|(Do|0)==6){break}else{Dt=0;Du=0;Dv=Co}}while(1){if((a[Dt+101272|0]|0)==(a[gH+(Dt+Dv|0)|0]|0)){Dw=Dv;Dx=Du}else{if((Dt|0)!=2){Dy=0;Dz=0;DA=Co;break}Dw=Dv-1|0;Dx=1}hp=Dt+1|0;if((hp|0)<(Dx+hB|0)){Dt=hp;Du=Dx;Dv=Dw}else{b7=4562;break}}do{if((b7|0)==4562){b7=0;if((Dx|0)==0){if(!((Dt|0)==1|(Dt|0)==5)){Dy=0;Dz=0;DA=Co;break}}c[16282]=2;a[65272]=1;c[16454]=2;a[65960]=1;c[16626]=2;a[66648]=1;c[16798]=2;a[67336]=1;c[16970]=2;a[68024]=1;c[17142]=2;a[68712]=1;c[17314]=2;a[69400]=1;c[17486]=2;a[70088]=1;c[17658]=2;a[70776]=1;c[17830]=2;a[71464]=1;c[18002]=2;a[72152]=1;c[13898]=Ci+1;Cx=Ch;Cy=Cg;break L5954}}while(0);while(1){if((a[Dy+100712|0]|0)==(a[gH+(Dy+DA|0)|0]|0)){DB=DA;DC=Dz}else{if((Dy|0)!=5){DD=0;DE=0;DF=Co;break}DB=DA-1|0;DC=1}hp=Dy+1|0;if((hp|0)<(DC+hB|0)){Dy=hp;Dz=DC;DA=DB}else{b7=4569;break}}do{if((b7|0)==4569){b7=0;if((DC|0)==0){if(!((Dy|0)==4|(Dy|0)==11)){DD=0;DE=0;DF=Co;break}}a[65272]=0;a[65960]=0;a[66648]=0;a[67336]=0;a[68024]=0;a[68712]=0;a[69400]=0;a[70088]=0;a[70776]=0;a[71464]=0;a[72152]=0;c[13898]=Ci+1;Cx=Ch;Cy=Cg;break L5954}}while(0);while(1){if((a[DD+152064|0]|0)==(a[gH+(DD+DF|0)|0]|0)){DG=DF;DH=DE}else{if((DD|0)!=3){DI=0;DJ=0;DK=Co;break}DG=DF-1|0;DH=1}hp=DD+1|0;if((hp|0)<(DH+hB|0)){DD=hp;DE=DH;DF=DG}else{b7=4576;break}}do{if((b7|0)==4576){b7=0;if((DH|0)==0){if(!((DD|0)==6|(DD|0)==2)){DI=0;DJ=0;DK=Co;break}}c[13898]=Ci+1;dl(F,4);c[16246]=c[fO>>2];c[64988>>2]=c[fO+4>>2];c[64992>>2]=c[fO+8>>2];c[64996>>2]=c[fO+12>>2];c[65e3>>2]=c[fO+16>>2];c[65004>>2]=c[fO+20>>2];c[65008>>2]=c[fO+24>>2];c[65012>>2]=c[fO+28>>2];c[65016>>2]=c[fO+32>>2];c[65020>>2]=c[fO+36>>2];c[16418]=c[fO>>2];c[65676>>2]=c[fO+4>>2];c[65680>>2]=c[fO+8>>2];c[65684>>2]=c[fO+12>>2];c[65688>>2]=c[fO+16>>2];c[65692>>2]=c[fO+20>>2];c[65696>>2]=c[fO+24>>2];c[65700>>2]=c[fO+28>>2];c[65704>>2]=c[fO+32>>2];c[65708>>2]=c[fO+36>>2];c[16590]=c[fO>>2];c[66364>>2]=c[fO+4>>2];c[66368>>2]=c[fO+8>>2];c[66372>>2]=c[fO+12>>2];c[66376>>2]=c[fO+16>>2];c[66380>>2]=c[fO+20>>2];c[66384>>2]=c[fO+24>>2];c[66388>>2]=c[fO+28>>2];c[66392>>2]=c[fO+32>>2];c[66396>>2]=c[fO+36>>2];c[16762]=c[fO>>2];c[67052>>2]=c[fO+4>>2];c[67056>>2]=c[fO+8>>2];c[67060>>2]=c[fO+12>>2];c[67064>>2]=c[fO+16>>2];c[67068>>2]=c[fO+20>>2];c[67072>>2]=c[fO+24>>2];c[67076>>2]=c[fO+28>>2];c[67080>>2]=c[fO+32>>2];c[67084>>2]=c[fO+36>>2];c[16934]=c[fO>>2];c[67740>>2]=c[fO+4>>2];c[67744>>2]=c[fO+8>>2];c[67748>>2]=c[fO+12>>2];c[67752>>2]=c[fO+16>>2];c[67756>>2]=c[fO+20>>2];c[67760>>2]=c[fO+24>>2];c[67764>>2]=c[fO+28>>2];c[67768>>2]=c[fO+32>>2];c[67772>>2]=c[fO+36>>2];c[17106]=c[fO>>2];c[68428>>2]=c[fO+4>>2];c[68432>>2]=c[fO+8>>2];c[68436>>2]=c[fO+12>>2];c[68440>>2]=c[fO+16>>2];c[68444>>2]=c[fO+20>>2];c[68448>>2]=c[fO+24>>2];c[68452>>2]=c[fO+28>>2];c[68456>>2]=c[fO+32>>2];c[68460>>2]=c[fO+36>>2];c[17278]=c[fO>>2];c[69116>>2]=c[fO+4>>2];c[69120>>2]=c[fO+8>>2];c[69124>>2]=c[fO+12>>2];c[69128>>2]=c[fO+16>>2];c[69132>>2]=c[fO+20>>2];c[69136>>2]=c[fO+24>>2];c[69140>>2]=c[fO+28>>2];c[69144>>2]=c[fO+32>>2];c[69148>>2]=c[fO+36>>2];c[17450]=c[fO>>2];c[69804>>2]=c[fO+4>>2];c[69808>>2]=c[fO+8>>2];c[69812>>2]=c[fO+12>>2];c[69816>>2]=c[fO+16>>2];c[69820>>2]=c[fO+20>>2];c[69824>>2]=c[fO+24>>2];c[69828>>2]=c[fO+28>>2];c[69832>>2]=c[fO+32>>2];c[69836>>2]=c[fO+36>>2];c[17622]=c[fO>>2];c[70492>>2]=c[fO+4>>2];c[70496>>2]=c[fO+8>>2];c[70500>>2]=c[fO+12>>2];c[70504>>2]=c[fO+16>>2];c[70508>>2]=c[fO+20>>2];c[70512>>2]=c[fO+24>>2];c[70516>>2]=c[fO+28>>2];c[70520>>2]=c[fO+32>>2];c[70524>>2]=c[fO+36>>2];c[17794]=c[fO>>2];c[71180>>2]=c[fO+4>>2];c[71184>>2]=c[fO+8>>2];c[71188>>2]=c[fO+12>>2];c[71192>>2]=c[fO+16>>2];c[71196>>2]=c[fO+20>>2];c[71200>>2]=c[fO+24>>2];c[71204>>2]=c[fO+28>>2];c[71208>>2]=c[fO+32>>2];c[71212>>2]=c[fO+36>>2];c[17966]=c[fO>>2];c[71868>>2]=c[fO+4>>2];c[71872>>2]=c[fO+8>>2];c[71876>>2]=c[fO+12>>2];c[71880>>2]=c[fO+16>>2];c[71884>>2]=c[fO+20>>2];c[71888>>2]=c[fO+24>>2];c[71892>>2]=c[fO+28>>2];c[71896>>2]=c[fO+32>>2];c[71900>>2]=c[fO+36>>2];Cx=Ch;Cy=Cg;break L5954}}while(0);while(1){if((a[DI+153128|0]|0)==(a[gH+(DI+DK|0)|0]|0)){DL=DK;DM=DJ}else{if((DI|0)!=5){DN=0;break}DL=DK-1|0;DM=1}hp=DI+1|0;if((hp|0)<(DM+hB|0)){DI=hp;DJ=DM;DK=DL}else{b7=4583;break}}do{if((b7|0)==4583){b7=0;if((DM|0)==0){if(!((DI|0)==4|(DI|0)==8)){DN=0;break}}uE(dx|0,0,28);c[13898]=Ci+1;c[16246]=4;c[16247]=4;c[16248]=4;c[16249]=c[dx>>2];c[65e3>>2]=c[dx+4>>2];c[65004>>2]=c[dx+8>>2];c[65008>>2]=c[dx+12>>2];c[65012>>2]=c[dx+16>>2];c[65016>>2]=c[dx+20>>2];c[65020>>2]=c[dx+24>>2];c[16418]=4;c[16419]=4;c[16420]=4;c[65684>>2]=c[dx>>2];c[(65684|0)+4>>2]=c[dx+4>>2];c[(65684|0)+8>>2]=c[dx+8>>2];c[(65684|0)+12>>2]=c[dx+12>>2];c[(65684|0)+16>>2]=c[dx+16>>2];c[(65684|0)+20>>2]=c[dx+20>>2];c[(65684|0)+24>>2]=c[dx+24>>2];c[16590]=4;c[16591]=4;c[16592]=4;c[66372>>2]=c[dx>>2];c[(66372|0)+4>>2]=c[dx+4>>2];c[(66372|0)+8>>2]=c[dx+8>>2];c[(66372|0)+12>>2]=c[dx+12>>2];c[(66372|0)+16>>2]=c[dx+16>>2];c[(66372|0)+20>>2]=c[dx+20>>2];c[(66372|0)+24>>2]=c[dx+24>>2];c[16762]=4;c[16763]=4;c[16764]=4;c[67060>>2]=c[dx>>2];c[(67060|0)+4>>2]=c[dx+4>>2];c[(67060|0)+8>>2]=c[dx+8>>2];c[(67060|0)+12>>2]=c[dx+12>>2];c[(67060|0)+16>>2]=c[dx+16>>2];c[(67060|0)+20>>2]=c[dx+20>>2];c[(67060|0)+24>>2]=c[dx+24>>2];c[16934]=4;c[16935]=4;c[16936]=4;c[67748>>2]=c[dx>>2];c[(67748|0)+4>>2]=c[dx+4>>2];c[(67748|0)+8>>2]=c[dx+8>>2];c[(67748|0)+12>>2]=c[dx+12>>2];c[(67748|0)+16>>2]=c[dx+16>>2];c[(67748|0)+20>>2]=c[dx+20>>2];c[(67748|0)+24>>2]=c[dx+24>>2];c[17106]=4;c[17107]=4;c[17108]=4;c[68436>>2]=c[dx>>2];c[(68436|0)+4>>2]=c[dx+4>>2];c[(68436|0)+8>>2]=c[dx+8>>2];c[(68436|0)+12>>2]=c[dx+12>>2];c[(68436|0)+16>>2]=c[dx+16>>2];c[(68436|0)+20>>2]=c[dx+20>>2];c[(68436|0)+24>>2]=c[dx+24>>2];c[17278]=4;c[17279]=4;c[17280]=4;c[69124>>2]=c[dx>>2];c[(69124|0)+4>>2]=c[dx+4>>2];c[(69124|0)+8>>2]=c[dx+8>>2];c[(69124|0)+12>>2]=c[dx+12>>2];c[(69124|0)+16>>2]=c[dx+16>>2];c[(69124|0)+20>>2]=c[dx+20>>2];c[(69124|0)+24>>2]=c[dx+24>>2];c[17450]=4;c[17451]=4;c[17452]=4;c[69812>>2]=c[dx>>2];c[(69812|0)+4>>2]=c[dx+4>>2];c[(69812|0)+8>>2]=c[dx+8>>2];c[(69812|0)+12>>2]=c[dx+12>>2];c[(69812|0)+16>>2]=c[dx+16>>2];c[(69812|0)+20>>2]=c[dx+20>>2];c[(69812|0)+24>>2]=c[dx+24>>2];c[17622]=4;c[17623]=4;c[17624]=4;c[70500>>2]=c[dx>>2];c[(70500|0)+4>>2]=c[dx+4>>2];c[(70500|0)+8>>2]=c[dx+8>>2];c[(70500|0)+12>>2]=c[dx+12>>2];c[(70500|0)+16>>2]=c[dx+16>>2];c[(70500|0)+20>>2]=c[dx+20>>2];c[(70500|0)+24>>2]=c[dx+24>>2];c[17794]=4;c[17795]=4;c[17796]=4;c[71188>>2]=c[dx>>2];c[(71188|0)+4>>2]=c[dx+4>>2];c[(71188|0)+8>>2]=c[dx+8>>2];c[(71188|0)+12>>2]=c[dx+12>>2];c[(71188|0)+16>>2]=c[dx+16>>2];c[(71188|0)+20>>2]=c[dx+20>>2];c[(71188|0)+24>>2]=c[dx+24>>2];c[17966]=4;c[17967]=4;c[17968]=4;c[71876>>2]=c[dx>>2];c[(71876|0)+4>>2]=c[dx+4>>2];c[(71876|0)+8>>2]=c[dx+8>>2];c[(71876|0)+12>>2]=c[dx+12>>2];c[(71876|0)+16>>2]=c[dx+16>>2];c[(71876|0)+20>>2]=c[dx+20>>2];c[(71876|0)+24>>2]=c[dx+24>>2];Cx=Ch;Cy=Cg;break L5954}}while(0);while(1){if((a[DN+97960|0]|0)!=(a[gH+(DN+Co|0)|0]|0)){DO=0;DP=0;DQ=Co;break}DR=DN+1|0;if((DR|0)<(hB|0)){DN=DR}else{b7=4588;break}}do{if((b7|0)==4588){b7=0;if((DR|0)!=6){DO=0;DP=0;DQ=Co;break}jp();Cx=Ch;Cy=Cg;break L5954}}while(0);while(1){if((a[DO+175984|0]|0)==(a[gH+(DO+DQ|0)|0]|0)){DS=DQ;DT=DP}else{if((DO|0)!=1){Cn=Co;b7=4620;break L5954}DS=DQ-1|0;DT=1}hp=DO+1|0;if((hp|0)<(DT+hB|0)){DO=hp;DP=DT;DQ=DS}else{break}}if((DT|0)==0){if(!((DO|0)==4|(DO|0)==0)){Cn=Co;b7=4620;break L5954}}DU=Ci+1|0;c[13898]=DU;hp=(a[Ck+(DU*40&-1)|0]&1)==0;if(hp){b7=4598}else{hR=a[gH+(c[Ck+(DU*40&-1)+32>>2]|0)|0]|0;if(!((hR<<24>>24|0)==39|(hR<<24>>24|0)==34)){b7=4598}}if((b7|0)==4598){b7=0;hR=c[10810]|0;if((hR|0)==0){b7=5299;break L27}hK=Ck+(DU*40&-1)+36|0;hS=Ck+(DU*40&-1)+32|0;gG=(Cj|0)<=(DU|0)|hp;gy=hR;L6211:while(1){hR=c[gy+4>>2]|0;L6213:do{if(!gG){ho=c[hK>>2]|0;ng=0;while(1){if((ng|0)>=(ho|0)){break}if((a[gH+((c[hS>>2]|0)+ng|0)|0]|0)==(a[hR+ng|0]|0)){ng=ng+1|0}else{break L6213}}if((a[hR+ng|0]|0)==0){break L6211}}}while(0);hR=c[gy>>2]|0;if((hR|0)==0){b7=5301;break L27}else{gy=hR}}if((a[gy+8|0]&1)!=0){b7=5300;break L27}if((c[gy+16>>2]|0)!=3){b7=5302;break L27}}L6223:do{if((DU|0)<(Cj|0)){L6225:do{if(!hp){hS=c[Ck+(DU*40&-1)+36>>2]|0;hK=Ck+(DU*40&-1)+32|0;gG=0;while(1){if((gG|0)>=(hS|0)){break}if((a[gH+((c[hK>>2]|0)+gG|0)|0]|0)==(a[gG+103664|0]|0)){gG=gG+1|0}else{break L6225}}if((gG|0)==1){DV=0;break L6223}}}while(0);a[14176]=1;is(E);a[14176]=0;if((c[fQ>>2]|0)==3){DV=c[fS>>2]|0;break}else{c[13898]=DU;DV=0;break}}else{DV=0}}while(0);uu(c[16231]|0);if((DV|0)==0){c[16231]=0;uu(c[16403]|0);c[16403]=0;uu(c[16575]|0);c[16575]=0;uu(c[16747]|0);c[16747]=0;uu(c[16919]|0);c[16919]=0;uu(c[17091]|0);c[17091]=0;uu(c[17263]|0);c[17263]=0;uu(c[17435]|0);c[17435]=0;uu(c[17607]|0);c[17607]=0;uu(c[17779]|0);c[17779]=0;uu(c[17951]|0);DW=0}else{c[16231]=bP(DV|0)|0;uu(c[16403]|0);c[16403]=bP(DV|0)|0;uu(c[16575]|0);c[16575]=bP(DV|0)|0;uu(c[16747]|0);c[16747]=bP(DV|0)|0;uu(c[16919]|0);c[16919]=bP(DV|0)|0;uu(c[17091]|0);c[17091]=bP(DV|0)|0;uu(c[17263]|0);c[17263]=bP(DV|0)|0;uu(c[17435]|0);c[17435]=bP(DV|0)|0;uu(c[17607]|0);c[17607]=bP(DV|0)|0;uu(c[17779]|0);c[17779]=bP(DV|0)|0;uu(c[17951]|0);DW=bP(DV|0)|0}c[17951]=DW;uu(DV);Cx=Ch;Cy=Cg;break L5954}}while(0);c[16282]=1;a[65272]=1;c[16454]=1;a[65960]=1;c[16626]=1;a[66648]=1;c[16798]=1;a[67336]=1;c[16970]=1;a[68024]=1;c[17142]=1;a[68712]=1;c[17314]=1;a[69400]=1;c[17486]=1;a[70088]=1;c[17658]=1;a[70776]=1;c[17830]=1;a[71464]=1;c[18002]=1;a[72152]=1;c[13898]=Ci+1;Cx=Ch;Cy=Cg}}while(0);L6241:do{if((b7|0)==4620){b7=0;hF=(Cj|0)>(Ci|0);L6243:do{if(hF){if(gF){b7=5303;break L27}gH=c[10036]|0;hp=0;while(1){if((hp|0)>=(hB|0)){break}if((a[gH+(hp+Cn|0)|0]|0)==(a[hp+143040|0]|0)){hp=hp+1|0}else{b7=4626;break L6243}}if((hp|0)!=2){b7=4626}}else{b7=4626}}while(0);L6250:do{if((b7|0)==4626){b7=0;L6252:do{if((hB|0)>0&(gF^1)){gH=c[10036]|0;gy=0;hK=0;hS=Cn;while(1){if((a[gy+142856|0]|0)==(a[gH+(gy+hS|0)|0]|0)){DX=hS;DY=hK}else{if((gy|0)!=4){break L6252}DX=hS-1|0;DY=1}ng=gy+1|0;if((ng|0)<(DY+hB|0)){gy=ng;hK=DY;hS=DX}else{break}}if((DY|0)!=0){break L6250}if((gy|0)==3|(gy|0)==9){break L6250}}}while(0);if(!hF){Cx=Ch;Cy=Cg;break L6241}if(gF){b7=5304;break L27}hp=c[10036]|0;hS=0;while(1){if((hS|0)>=(hB|0)){b7=4640;break}if((a[hp+(hS+Cn|0)|0]|0)==(a[hS+150856|0]|0)){hS=hS+1|0}else{DZ=0;break}}do{if((b7|0)==4640){b7=0;if((hS|0)!=5){DZ=0;break}c[10026]=1;c[13898]=Ci+1;Cx=Ch;Cy=Cg;break L6241}}while(0);while(1){if((DZ|0)>=(hB|0)){b7=4644;break}if((a[hp+(DZ+Cn|0)|0]|0)==(a[DZ+150704|0]|0)){DZ=DZ+1|0}else{D_=0;break}}do{if((b7|0)==4644){b7=0;if((DZ|0)!=4){D_=0;break}c[10026]=0;c[13898]=Ci+1;Cx=Ch;Cy=Cg;break L6241}}while(0);while(1){if((D_|0)>=(hB|0)){break}if((a[hp+(D_+Cn|0)|0]|0)==(a[D_+103664|0]|0)){D_=D_+1|0}else{b7=5305;break L27}}if((D_|0)==1){Cx=Ch;Cy=Cg;break L6241}else{b7=5306;break L27}}}while(0);hI(G,5);c[16232]=c[fP>>2];c[64932>>2]=c[fP+4>>2];c[64936>>2]=c[fP+8>>2];c[64940>>2]=c[fP+12>>2];c[16404]=c[fP>>2];c[65620>>2]=c[fP+4>>2];c[65624>>2]=c[fP+8>>2];c[65628>>2]=c[fP+12>>2];c[16576]=c[fP>>2];c[66308>>2]=c[fP+4>>2];c[66312>>2]=c[fP+8>>2];c[66316>>2]=c[fP+12>>2];c[16748]=c[fP>>2];c[66996>>2]=c[fP+4>>2];c[67e3>>2]=c[fP+8>>2];c[67004>>2]=c[fP+12>>2];c[16920]=c[fP>>2];c[67684>>2]=c[fP+4>>2];c[67688>>2]=c[fP+8>>2];c[67692>>2]=c[fP+12>>2];c[17092]=c[fP>>2];c[68372>>2]=c[fP+4>>2];c[68376>>2]=c[fP+8>>2];c[68380>>2]=c[fP+12>>2];c[17264]=c[fP>>2];c[69060>>2]=c[fP+4>>2];c[69064>>2]=c[fP+8>>2];c[69068>>2]=c[fP+12>>2];c[17436]=c[fP>>2];c[69748>>2]=c[fP+4>>2];c[69752>>2]=c[fP+8>>2];c[69756>>2]=c[fP+12>>2];c[17608]=c[fP>>2];c[70436>>2]=c[fP+4>>2];c[70440>>2]=c[fP+8>>2];c[70444>>2]=c[fP+12>>2];c[17780]=c[fP>>2];c[71124>>2]=c[fP+4>>2];c[71128>>2]=c[fP+8>>2];c[71132>>2]=c[fP+12>>2];c[17952]=c[fP>>2];c[71812>>2]=c[fP+4>>2];c[71816>>2]=c[fP+8>>2];c[71820>>2]=c[fP+12>>2];Cx=Ch;Cy=Cg}}while(0);hB=c[13898]|0;gF=c[8272]|0;if((hB|0)>=(gF|0)){Cl=Cy;Cm=Cx;break L5951}Cg=Cy;Ch=Cx;Ci=hB;Cj=gF;Ck=c[1054]|0;b7=4421}}}while(0);hG=0;do{gC=64916+(hG*688&-1)|0;do{if(!((c[gC>>2]&3|0)!=0|Cm)){if((hG-5|0)>>>0<2){break}c[gC>>2]=1;if(Cl){break}if((hG-1|0)>>>0>=3){break}c[gC>>2]=5}}while(0);hG=hG+1|0;}while(hG>>>0<11)}else if((gD|0)==90){uh(gv,225144,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);hG=(c[13898]|0)+1|0;c[13898]=hG;L6294:do{if((hG|0)<(c[8272]|0)){gC=c[1054]|0;L6296:do{if((a[gC+(hG*40&-1)|0]&1)!=0){nd=c[gC+(hG*40&-1)+36>>2]|0;nh=gC+(hG*40&-1)+32|0;gF=c[10036]|0;hB=0;while(1){if((hB|0)>=(nd|0)){break}if((a[gF+((c[nh>>2]|0)+hB|0)|0]|0)==(a[hB+103664|0]|0)){hB=hB+1|0}else{break L6296}}if((hB|0)==1){D$=.5;D0=1.0;break L6294}}}while(0);gC=is(z)|0;nh=c[gC>>2]|0;if((nh|0)==1){D1=+(c[gC+8>>2]|0)}else if((nh|0)==2){D1=+h[gC+8>>3]}else if((nh|0)==3){D1=+uz(c[gC+8>>2]|0,0)}else{b7=4668;break L27}if((c[fZ>>2]|0)==3){uu(c[f_>>2]|0);c[fZ>>2]=1}gC=c[13898]|0;L6311:do{if((gC|0)<(c[8272]|0)){nh=c[1054]|0;L6313:do{if((a[nh+(gC*40&-1)|0]&1)!=0){gF=c[nh+(gC*40&-1)+36>>2]|0;nd=nh+(gC*40&-1)+32|0;hF=c[10036]|0;hp=0;while(1){if((hp|0)>=(gF|0)){b7=4676;break}if((a[hF+((c[nd>>2]|0)+hp|0)|0]|0)==(a[hp+103664|0]|0)){hp=hp+1|0}else{D2=0;break}}if((b7|0)==4676){b7=0;if((hp|0)==1){break L6311}else{D2=0}}while(1){if((D2|0)>=(gF|0)){break}if((a[hF+((c[nd>>2]|0)+D2|0)|0]|0)==(a[D2+148464|0]|0)){D2=D2+1|0}else{break L6313}}if((D2|0)!=1){break}c[13898]=gC+1}}while(0);nh=is(A)|0;hB=c[nh>>2]|0;if((hB|0)==1){D3=+(c[nh+8>>2]|0)}else if((hB|0)==2){D3=+h[nh+8>>3]}else if((hB|0)==3){D3=+uz(c[nh+8>>2]|0,0)}else{b7=4686;break L27}if((c[f$>>2]|0)!=3){D$=D3;D0=D1;break L6294}uu(c[f0>>2]|0);c[f$>>2]=1;D$=D3;D0=D1;break L6294}}while(0);D$=D1*.5;D0=D1}else{D$=.5;D0=1.0}}while(0);h[8132]=D0;h[8133]=D$;h[8218]=D0;h[8219]=D$;h[8304]=D0;h[8305]=D$;h[8390]=D0;h[8391]=D$;h[8476]=D0;h[8477]=D$;h[8562]=D0;h[8563]=D$;h[8648]=D0;h[8649]=D$;h[8734]=D0;h[8735]=D$;h[8820]=D0;h[8821]=D$;h[8906]=D0;h[8907]=D$;h[8992]=D0;h[8993]=D$}else if((gD|0)==92){D4=gv+1|0;c[13898]=D4;hG=c[8272]|0;L6335:do{if((D4|0)<(hG|0)){gC=(a[gw+(D4*40&-1)|0]&1)==0;nh=c[gw+(D4*40&-1)+36>>2]|0;hB=gw+(D4*40&-1)+32|0;L6337:do{if(!gC){nd=0;while(1){if((nd|0)>=(nh|0)){break}if((a[gB+((c[hB>>2]|0)+nd|0)|0]|0)==(a[nd+103664|0]|0)){nd=nd+1|0}else{break L6337}}if((nd|0)==1){break L6335}}}while(0);hF=c[hB>>2]|0;gF=(nh|0)>0;hp=56720;hS=77416;L6343:while(1){L6345:do{if(!gC){if(gF){hK=0;gH=0;ng=hF;while(1){hR=a[hS+hK|0]|0;if(hR<<24>>24==(a[gB+(hK+ng|0)|0]|0)){D5=ng;D6=gH}else{if(hR<<24>>24!=36){break L6345}D5=ng-1|0;D6=1}D7=hK+1|0;if((D7|0)<(D6+nh|0)){hK=D7;gH=D6;ng=D5}else{break}}if((D6|0)==0){D8=D7}else{D9=hp;break L6343}}else{D8=0}ng=a[hS+D8|0]|0;if((ng<<24>>24|0)==36|(ng<<24>>24|0)==0){D9=hp;break L6343}}}while(0);nd=hp+8|0;ng=c[nd>>2]|0;if((ng|0)==0){D9=nd;break}else{hp=nd;hS=ng}}hS=c[D9+4>>2]|0;if((hS|0)>-1){Ea=gv+2|0;c[13898]=Ea;if((Ea|0)>=(hG|0)){b7=4725;break L27}L6361:do{if((a[gw+(Ea*40&-1)|0]&1)!=0){hp=c[gw+(Ea*40&-1)+36>>2]|0;gF=gw+(Ea*40&-1)+32|0;hB=0;while(1){if((hB|0)>=(hp|0)){break}if((a[gB+((c[gF>>2]|0)+hB|0)|0]|0)==(a[hB+103664|0]|0)){hB=hB+1|0}else{break L6361}}if((hB|0)==1){b7=4725;break L27}}}while(0);a[14176]=1;is(y);a[14176]=0;if((c[f1>>2]|0)!=3){b7=4714;break L27}gF=c[f2>>2]|0;if((gF|0)==0){b7=4725;break L27}hp=64813+(hS*688&-1)|0;uF(hp|0,gF|0,50);Eb=gF}else{L6371:do{if(!gC){gF=0;while(1){if((gF|0)>=(nh|0)){break}if((a[gB+(gF+hF|0)|0]|0)==(a[gF+103664|0]|0)){gF=gF+1|0}else{break L6371}}if((gF|0)==1){b7=4725;break L27}}}while(0);a[14176]=1;is(x);a[14176]=0;if((c[f3>>2]|0)!=3){b7=4722;break L27}hF=c[f4>>2]|0;if((hF|0)==0){b7=4725;break L27}uF(64813,hF|0,50);uF(65501,hF|0,50);uF(66189,hF|0,50);uF(66877,hF|0,50);uF(67565,hF|0,50);uF(68253,hF|0,50);uF(68941,hF|0,50);uF(69629,hF|0,50);uF(70317,hF|0,50);uF(71005,hF|0,50);uF(71693,hF|0,50);Eb=hF}uu(Eb);break L44}}while(0);uD(64813,82192,15);uD(65501,82192,15);uD(66189,82192,15);uD(66877,82192,15);uD(67565,82192,15);uD(68253,82192,15);uD(68941,82192,15);uD(69629,82192,15);uD(70317,82192,15);uD(71005,82192,15);uD(71693,82192,15)}else if((gD|0)==93){hG=gv+1|0;c[13898]=hG;hF=c[8272]|0;L6382:do{if((hG|0)<(hF|0)){nh=0;gC=hG;hS=hF;while(1){Ec=gC;hB=hS;L6385:while(1){hp=c[1054]|0;Ed=c[hp+(Ec*40&-1)+36>>2]|0;Ee=hp+(Ec*40&-1)+32|0;if((a[hp+(Ec*40&-1)|0]&1)==0){b7=4773;break}ng=c[10036]|0;nd=0;while(1){if((nd|0)>=(Ed|0)){b7=4734;break}gH=c[Ee>>2]|0;if((a[ng+(gH+nd|0)|0]|0)==(a[nd+103664|0]|0)){nd=nd+1|0}else{Ef=gH;break}}if((b7|0)==4734){b7=0;if((nd|0)==1){break L6382}Ef=c[Ee>>2]|0}L6395:do{if((Ed|0)>0){gH=0;hK=0;hR=Ef;while(1){if((a[gH+150048|0]|0)==(a[ng+(gH+hR|0)|0]|0)){Eg=hR;Eh=hK}else{if((gH|0)!=1){Ei=0;Ej=0;Ek=Ef;break}Eg=hR-1|0;Eh=1}gz=gH+1|0;if((gz|0)<(Eh+Ed|0)){gH=gz;hK=Eh;hR=Eg}else{b7=4741;break}}do{if((b7|0)==4741){b7=0;if((Eh|0)==0){if(!((gH|0)==0|(gH|0)==3)){Ei=0;Ej=0;Ek=Ef;break}}c[1166]=0;c[13898]=Ec+1;break L6395}}while(0);while(1){if((a[Ei+149848|0]|0)==(a[ng+(Ei+Ek|0)|0]|0)){El=Ek;Em=Ej}else{if((Ei|0)!=1){En=0;Eo=0;Ep=Ef;break}El=Ek-1|0;Em=1}gH=Ei+1|0;if((gH|0)<(Em+Ed|0)){Ei=gH;Ej=Em;Ek=El}else{b7=4749;break}}do{if((b7|0)==4749){b7=0;if((Em|0)==0){if(!((Ei|0)==0|(Ei|0)==6)){En=0;Eo=0;Ep=Ef;break}}c[1166]=1;c[13898]=Ec+1;break L6395}}while(0);while(1){if((a[En+95544|0]|0)==(a[ng+(En+Ep|0)|0]|0)){Eq=Ep;Er=Eo}else{if((En|0)!=1){Es=0;Et=0;Eu=Ef;break}Eq=Ep-1|0;Er=1}gH=En+1|0;if((gH|0)<(Er+Ed|0)){En=gH;Eo=Er;Ep=Eq}else{b7=4756;break}}do{if((b7|0)==4756){b7=0;if((Er|0)==0){if(!((En|0)==0|(En|0)==6)){Es=0;Et=0;Eu=Ef;break}}c[1164]=1;c[13898]=Ec+1;break L6395}}while(0);while(1){if((a[Es+184048|0]|0)==(a[ng+(Es+Eu|0)|0]|0)){Ev=Eu;Ew=Et}else{if((Es|0)!=1){Ex=0;Ey=0;Ez=Ef;break}Ev=Eu-1|0;Ew=1}gH=Es+1|0;if((gH|0)<(Ew+Ed|0)){Es=gH;Et=Ew;Eu=Ev}else{b7=4763;break}}do{if((b7|0)==4763){b7=0;if((Ew|0)==0){if(!((Es|0)==0|(Es|0)==8)){Ex=0;Ey=0;Ez=Ef;break}}c[1164]=0;c[13898]=Ec+1;break L6395}}while(0);while(1){if((a[Ex+152064|0]|0)==(a[ng+(Ex+Ez|0)|0]|0)){EA=Ez;EB=Ey}else{if((Ex|0)!=3){b7=4774;break L6395}EA=Ez-1|0;EB=1}gH=Ex+1|0;if((gH|0)<(EB+Ed|0)){Ex=gH;Ey=EB;Ez=EA}else{break}}if((EB|0)==0){if(!((Ex|0)==6|(Ex|0)==2)){b7=4774;break}}c[13898]=Ec+1;dl(4816,4)}else{b7=4774}}while(0);if((b7|0)==4774){b7=0;nd=(hB|0)>(Ec|0);if(nd){EC=0}else{ED=Ef;EE=0;EF=0;break}while(1){if((EC|0)>=(Ed|0)){break}if((a[ng+(EC+Ef|0)|0]|0)==(a[EC+124352|0]|0)){EC=EC+1|0}else{ED=Ef;EE=nd;EF=0;break L6385}}if((EC|0)!=4){ED=Ef;EE=nd;EF=0;break}gH=Ec+1|0;c[13898]=gH;L6457:do{if((gH|0)<(hB|0)){L6459:do{if((a[hp+(gH*40&-1)|0]&1)!=0){hR=c[hp+(gH*40&-1)+36>>2]|0;hK=hp+(gH*40&-1)+32|0;gz=0;while(1){if((gz|0)>=(hR|0)){break}if((a[ng+((c[hK>>2]|0)+gz|0)|0]|0)==(a[gz+103664|0]|0)){gz=gz+1|0}else{break L6459}}if((gz|0)==1){EG=0;break L6457}}}while(0);a[14176]=1;is(t);a[14176]=0;if((c[f5>>2]|0)==3){EG=c[f6>>2]|0;break}else{c[13898]=gH;EG=0;break}}else{EG=0}}while(0);uu(c[1184]|0);c[1184]=EG}gH=c[13898]|0;ng=c[8272]|0;if((gH|0)<(ng|0)){Ec=gH;hB=ng}else{break L6382}}if((b7|0)==4773){b7=0;ED=c[Ee>>2]|0;EE=(hB|0)>(Ec|0);EF=1}if(nh){EH=Ec;b7=5310;break L27}if(!EE){EH=Ec;b7=5311;break L27}L6476:do{if(!EF){gF=c[10036]|0;ng=0;while(1){if((ng|0)>=(Ed|0)){break}if((a[gF+(ng+ED|0)|0]|0)==(a[ng+103664|0]|0)){ng=ng+1|0}else{break L6476}}if((ng|0)==1){EH=Ec;b7=5312;break L27}}}while(0);a[14176]=1;is(u);a[14176]=0;if((c[f7>>2]|0)!=3){b7=4796;break L27}hB=c[f8>>2]|0;if((hB|0)==0){b7=4798;break L27}uu(c[1183]|0);c[1183]=hB;hB=c[13898]|0;gF=c[8272]|0;if((hB|0)<(gF|0)){nh=1;gC=hB;hS=gF}else{break L44}}}}while(0);if((c[1183]|0)!=0){break}c[1183]=bP(74304)|0}else if((gD|0)==94){jq(4416)}else if((gD|0)==99){hF=gv+1|0;c[13898]=hF;hG=c[8272]|0;hS=(hG|0)>(hF|0);L6489:do{if(hS){if((a[gw+(hF*40&-1)|0]&1)==0){break}gC=c[gw+(hF*40&-1)+36>>2]|0;nh=gw+(hF*40&-1)+32|0;gF=0;while(1){if((gF|0)>=(gC|0)){break}if((a[gB+((c[nh>>2]|0)+gF|0)|0]|0)==(a[gF+134552|0]|0)){gF=gF+1|0}else{break L6489}}if((gF|0)!=3){break}c[5094]=1;c[13898]=gv+2;break L44}}while(0);if((c[5094]|0)==1){if(a[20368]|0){a[20368]=0;g[3538]=+g[5090];g[3536]=+g[5088];g[3534]=+g[5086];c[16336]=c[16336]^2;c[17024]=c[17024]^2}c[5094]=0}nh=c[gw+(hF*40&-1)+36>>2]|0;gC=c[gw+(hF*40&-1)+32>>2]|0;L6504:do{if((nh|0)>0&(a[gw+(hF*40&-1)|0]&1)!=0){hB=0;gH=0;hp=gC;while(1){if((a[hB+82576|0]|0)==(a[gB+(hB+hp|0)|0]|0)){EI=hp;EJ=gH}else{if((hB|0)!=5){EK=0;EL=0;EM=gC;break}EI=hp-1|0;EJ=1}nd=hB+1|0;if((nd|0)<(EJ+nh|0)){hB=nd;gH=EJ;hp=EI}else{b7=4820;break}}do{if((b7|0)==4820){b7=0;if((EJ|0)==0){if(!((hB|0)==10|(hB|0)==4)){EK=0;EL=0;EM=gC;break}}hp=gv+2|0;c[13898]=hp;do{if((hp|0)<(hG|0)){if((a[gw+(hp*40&-1)|0]&1)==0){break L44}gH=c[gw+(hp*40&-1)+36>>2]|0;gF=gw+(hp*40&-1)+32|0;nd=0;while(1){if((nd|0)>=(gH|0)){b7=4827;break}if((a[gB+((c[gF>>2]|0)+nd|0)|0]|0)==(a[nd+103664|0]|0)){nd=nd+1|0}else{EN=0;break}}if((b7|0)==4827){b7=0;if((nd|0)==1){break}else{EN=0}}while(1){if((EN|0)>=(gH|0)){b7=4830;break}if((a[gB+((c[gF>>2]|0)+EN|0)|0]|0)==(a[EN+150688|0]|0)){EN=EN+1|0}else{EO=0;break}}if((b7|0)==4830){b7=0;if((EN|0)==2){break}else{EO=0}}while(1){if((EO|0)>=(gH|0)){break}if((a[gB+((c[gF>>2]|0)+EO|0)|0]|0)==(a[EO+79688|0]|0)){EO=EO+1|0}else{break L44}}if((EO|0)!=3){break L44}c[18072]=3;c[13898]=gv+3;break L44}}while(0);c[18072]=2;c[13898]=gv+3;break L44}}while(0);while(1){if((a[EK+78952|0]|0)==(a[gB+(EK+EM|0)|0]|0)){EP=EM;EQ=EL}else{if((EK|0)!=7){break L6504}EP=EM-1|0;EQ=1}hB=EK+1|0;if((hB|0)<(EQ+nh|0)){EK=hB;EL=EQ;EM=EP}else{break}}if((EQ|0)==0){if(!((EK|0)==6|(EK|0)==12)){break}}c[18072]=0;c[13898]=gv+2;break L44}}while(0);h[eW>>3]=+g[3538];h[eX>>3]=+g[3536];h[eY>>3]=+g[3534];h[eZ>>3]=+g[3532];L6546:do{if(hS){ER=hF;nh=1;hG=0;gC=gw;while(1){L6549:do{if((a[gC+(ER*40&-1)|0]&1)==0){b7=4853}else{hB=c[gC+(ER*40&-1)+36>>2]|0;hp=gC+(ER*40&-1)+32|0;gF=c[10036]|0;gH=0;while(1){if((gH|0)>=(hB|0)){b7=4848;break}if((a[gF+((c[hp>>2]|0)+gH|0)|0]|0)==(a[gH+103664|0]|0)){gH=gH+1|0}else{ES=0;break}}if((b7|0)==4848){b7=0;if((gH|0)==1){break L6546}else{ES=0}}while(1){if((ES|0)>=(hB|0)){break}if((a[gF+((c[hp>>2]|0)+ES|0)|0]|0)==(a[ES+148464|0]|0)){ES=ES+1|0}else{b7=4853;break L6549}}if((ES|0)!=1){b7=4853;break}c[13898]=ER+1;ET=1;EU=(nh&1)+hG|0}}while(0);if((b7|0)==4853){b7=0;if(!nh){b7=4854;break L27}hp=is(s)|0;gF=c[hp>>2]|0;if((gF|0)==1){EV=+(c[hp+8>>2]|0)}else if((gF|0)==2){EV=+h[hp+8>>3]}else if((gF|0)==3){EV=+uz(c[hp+8>>2]|0,0)}else{b7=4859;break L27}if((c[f9>>2]|0)==3){uu(c[ga>>2]|0);c[f9>>2]=1}h[ak+(hG<<3)>>3]=EV;ET=0;EU=hG+1|0}if((EU|0)>=4){break L6546}hp=c[13898]|0;if((hp|0)>=(c[8272]|0)){break L6546}ER=hp;nh=ET;hG=EU;gC=c[1054]|0}}}while(0);m3=+h[eW>>3];if(m3<0.0|m3>360.0){b7=4867;break L27}m2=+h[eX>>3];if(m2<0.0|m2>360.0){b7=4869;break L27}m5=+h[eY>>3];if(m5<1.0e-6){b7=4871;break L27}m4=+h[eZ>>3];if(m4<1.0e-6){b7=4873;break L27}g[3538]=m3;g[3536]=m2;m2=m5;g[3534]=m2;g[3532]=m4;g[3540]=+_(+m2)}else if((gD|0)==151){c[13898]=gv+1;hF=is(r)|0;hS=c[hF>>2]|0;do{if((hS|0)==1){gC=c[hF+8>>2]|0;EW=+(((gC|0)>-1?gC:-gC|0)|0)}else if((hS|0)==2){m2=+P(+(+h[hF+8>>3]));m4=+h[hF+16>>3];m5=+P(+m4);if(m4==0.0){EW=m2;break}if(m2>m5){m4=m5/m2;EW=m2*+Q(+(m4*m4+1.0));break}else{m4=m2/m5;EW=m5*+Q(+(m4*m4+1.0));break}}else{b7=4881;break L27}}while(0);h[11]=EW}else if((gD|0)==48|(gD|0)==49|(gD|0)==117|(gD|0)==118|(gD|0)==111|(gD|0)==112|(gD|0)==114|(gD|0)==115){jt(2)}else if((gD|0)==52|(gD|0)==53|(gD|0)==136|(gD|0)==137|(gD|0)==130|(gD|0)==131|(gD|0)==133|(gD|0)==134){jt(1)}else if((gD|0)==46|(gD|0)==47|(gD|0)==108|(gD|0)==109|(gD|0)==102|(gD|0)==103|(gD|0)==105|(gD|0)==106){jt(6)}else if((gD|0)==50|(gD|0)==51|(gD|0)==127|(gD|0)==128|(gD|0)==121|(gD|0)==122|(gD|0)==124|(gD|0)==125){jt(5)}else if((gD|0)==54|(gD|0)==55|(gD|0)==145|(gD|0)==146|(gD|0)==139|(gD|0)==140|(gD|0)==142|(gD|0)==143){jt(0)}else if((gD|0)==68|(gD|0)==69|(gD|0)==66|(gD|0)==67|(gD|0)==71|(gD|0)==72|(gD|0)==73|(gD|0)==74){jt(3)}else if((gD|0)==147|(gD|0)==148){jt(7)}else if((gD|0)==110){hF=gv+1|0;c[13898]=hF;c[16546]=0;hS=c[gw+(hF*40&-1)+36>>2]|0;L6597:do{if((a[gw+(hF*40&-1)|0]&1)!=0&(hS|0)>0){gC=0;hG=0;nh=c[gw+(hF*40&-1)+32>>2]|0;while(1){if((a[gC+84264|0]|0)==(a[gB+(gC+nh|0)|0]|0)){EX=nh;EY=hG}else{if((gC|0)!=1){EZ=0;break L6597}EX=nh-1|0;EY=1}hp=gC+1|0;if((hp|0)<(EY+hS|0)){gC=hp;hG=EY;nh=EX}else{break}}if((EY|0)==0){if(!((gC|0)==0|(gC|0)==4)){EZ=0;break}}c[16546]=1;c[13898]=gv+2;EZ=1}else{EZ=0}}while(0);c[17750]=EZ;c[17578]=EZ}else if((gD|0)==129){hS=gv+1|0;c[13898]=hS;c[16374]=0;hF=c[gw+(hS*40&-1)+36>>2]|0;L6611:do{if((a[gw+(hS*40&-1)|0]&1)!=0&(hF|0)>0){nh=0;hG=0;hp=c[gw+(hS*40&-1)+32>>2]|0;while(1){if((a[nh+84264|0]|0)==(a[gB+(nh+hp|0)|0]|0)){E_=hp;E$=hG}else{if((nh|0)!=1){break L6611}E_=hp-1|0;E$=1}gF=nh+1|0;if((gF|0)<(E$+hF|0)){nh=gF;hG=E$;hp=E_}else{break}}if((E$|0)==0){if(!((nh|0)==0|(nh|0)==4)){break}}c[16374]=1;c[13898]=gv+2}}while(0);c[17922]=c[16546]}else if((gD|0)==138){hF=gv+1|0;c[13898]=hF;c[16202]=0;hS=c[gw+(hF*40&-1)+36>>2]|0;if(!((a[gw+(hF*40&-1)|0]&1)!=0&(hS|0)>0)){break}hp=0;hG=0;gC=c[gw+(hF*40&-1)+32>>2]|0;while(1){if((a[hp+84264|0]|0)==(a[gB+(hp+gC|0)|0]|0)){E0=gC;E1=hG}else{if((hp|0)!=1){break L44}E0=gC-1|0;E1=1}hF=hp+1|0;if((hF|0)<(E1+hS|0)){hp=hF;hG=E1;gC=E0}else{break}}if((E1|0)==0){if(!((hp|0)==0|(hp|0)==4)){break}}c[16202]=1;c[13898]=gv+2}else if((gD|0)==70){gC=gv+1|0;c[13898]=gC;c[16718]=0;hG=c[gw+(gC*40&-1)+36>>2]|0;if(!((a[gw+(gC*40&-1)|0]&1)!=0&(hG|0)>0)){break}hS=0;hF=0;gF=c[gw+(gC*40&-1)+32>>2]|0;while(1){if((a[hS+84264|0]|0)==(a[gB+(hS+gF|0)|0]|0)){E2=gF;E3=hF}else{if((hS|0)!=1){break L44}E2=gF-1|0;E3=1}gC=hS+1|0;if((gC|0)<(E3+hG|0)){hS=gC;hF=E3;gF=E2}else{break}}if((E3|0)==0){if(!((hS|0)==0|(hS|0)==4)){break}}c[16718]=1;c[13898]=gv+2}else if((gD|0)==101){gF=gv+1|0;c[13898]=gF;c[17234]=0;hF=c[gw+(gF*40&-1)+36>>2]|0;if(!((a[gw+(gF*40&-1)|0]&1)!=0&(hF|0)>0)){break}hG=0;hp=0;gC=c[gw+(gF*40&-1)+32>>2]|0;while(1){if((a[hG+84264|0]|0)==(a[gB+(hG+gC|0)|0]|0)){E4=gC;E5=hp}else{if((hG|0)!=1){break L44}E4=gC-1|0;E5=1}gF=hG+1|0;if((gF|0)<(E5+hF|0)){hG=gF;hp=E5;gC=E4}else{break}}if((E5|0)==0){if(!((hG|0)==0|(hG|0)==4)){break}}c[17234]=1;c[13898]=gv+2}else if((gD|0)==120){gC=gv+1|0;c[13898]=gC;c[17062]=0;hp=c[gw+(gC*40&-1)+36>>2]|0;if(!((a[gw+(gC*40&-1)|0]&1)!=0&(hp|0)>0)){break}hF=0;hS=0;gF=c[gw+(gC*40&-1)+32>>2]|0;while(1){if((a[hF+84264|0]|0)==(a[gB+(hF+gF|0)|0]|0)){E6=gF;E7=hS}else{if((hF|0)!=1){break L44}E6=gF-1|0;E7=1}gC=hF+1|0;if((gC|0)<(E7+hp|0)){hF=gC;hS=E7;gF=E6}else{break}}if((E7|0)==0){if(!((hF|0)==0|(hF|0)==4)){break}}c[17062]=1;c[13898]=gv+2}else if((gD|0)==113){jq(66456)}else if((gD|0)==132){jq(65768)}else if((gD|0)==141){jq(65080)}else if((gD|0)==64){jq(67144)}else if((gD|0)==104){jq(69208)}else if((gD|0)==123){jq(68520)}else if((gD|0)==116){jv(2)}else if((gD|0)==107){jv(6)}else if((gD|0)==135){jv(1)}else if((gD|0)==126){jv(5)}else if((gD|0)==144){jv(0)}else if((gD|0)==65){jv(3)}else if((gD|0)==149){jv(7);if((a[30528]&1)==0){break}ju()}else if((gD|0)==95){jv(8)}else if((gD|0)==96){jv(9)}else if((gD|0)==100){jv(10)}else if((gD|0)==150){a[27776]=1;c[13898]=gv+1}else if((gD|0)==153){gF=gv+1|0;c[13898]=gF;L6691:do{if((gF|0)<(c[8272]|0)){L6693:do{if((a[gw+(gF*40&-1)|0]&1)!=0){hS=c[gw+(gF*40&-1)+36>>2]|0;hp=gw+(gF*40&-1)+32|0;hG=0;while(1){if((hG|0)>=(hS|0)){break}if((a[gB+((c[hp>>2]|0)+hG|0)|0]|0)==(a[hG+103664|0]|0)){hG=hG+1|0}else{break L6693}}if((hG|0)==1){break L6691}}}while(0);c[16665]=-1;hH(66656,1,0);if((gF|0)!=(c[13898]|0)){break L44}nh=is(q)|0;hp=c[nh>>2]|0;if((hp|0)==1){E8=+(c[nh+8>>2]|0)}else if((hp|0)==2){E8=+h[nh+8>>3]}else if((hp|0)==3){E8=+uz(c[nh+8>>2]|0,0)}else{b7=4976;break L27}if((c[gb>>2]|0)==3){uu(c[gc>>2]|0);c[gb>>2]=1}c[16665]=~~E8-1;break L44}}while(0);c[16665]=-1}else if((gD|0)==155){gF=gv+1|0;c[13898]=gF;L6711:do{if((gF|0)<(c[8272]|0)){L6713:do{if((a[gw+(gF*40&-1)|0]&1)!=0){hF=c[gw+(gF*40&-1)+36>>2]|0;nh=gw+(gF*40&-1)+32|0;hp=0;while(1){if((hp|0)>=(hF|0)){break}if((a[gB+((c[nh>>2]|0)+hp|0)|0]|0)==(a[hp+103664|0]|0)){hp=hp+1|0}else{break L6713}}if((hp|0)==1){break L6711}}}while(0);c[16493]=-1;hH(65968,1,0);if((gF|0)!=(c[13898]|0)){break L44}nh=is(p)|0;hF=c[nh>>2]|0;if((hF|0)==1){E9=+(c[nh+8>>2]|0)}else if((hF|0)==2){E9=+h[nh+8>>3]}else if((hF|0)==3){E9=+uz(c[nh+8>>2]|0,0)}else{b7=4992;break L27}if((c[gd>>2]|0)==3){uu(c[ge>>2]|0);c[gd>>2]=1}c[16493]=~~E9-1;break L44}}while(0);c[16493]=-1}else if((gD|0)==157){gF=gv+1|0;c[13898]=gF;L6731:do{if((gF|0)<(c[8272]|0)){L6733:do{if((a[gw+(gF*40&-1)|0]&1)!=0){nh=c[gw+(gF*40&-1)+36>>2]|0;hF=gw+(gF*40&-1)+32|0;hG=0;while(1){if((hG|0)>=(nh|0)){break}if((a[gB+((c[hF>>2]|0)+hG|0)|0]|0)==(a[hG+103664|0]|0)){hG=hG+1|0}else{break L6733}}if((hG|0)==1){break L6731}}}while(0);c[16321]=-1;hH(65280,1,0);if((gF|0)!=(c[13898]|0)){break L44}hF=is(o)|0;nh=c[hF>>2]|0;if((nh|0)==1){Fa=+(c[hF+8>>2]|0)}else if((nh|0)==2){Fa=+h[hF+8>>3]}else if((nh|0)==3){Fa=+uz(c[hF+8>>2]|0,0)}else{b7=5008;break L27}if((c[gf>>2]|0)==3){uu(c[gg>>2]|0);c[gf>>2]=1}c[16321]=~~Fa-1;break L44}}while(0);c[16321]=-1}else if((gD|0)==154){gF=gv+1|0;c[13898]=gF;L6751:do{if((gF|0)<(c[8272]|0)){L6753:do{if((a[gw+(gF*40&-1)|0]&1)!=0){hF=c[gw+(gF*40&-1)+36>>2]|0;nh=gw+(gF*40&-1)+32|0;hp=0;while(1){if((hp|0)>=(hF|0)){break}if((a[gB+((c[nh>>2]|0)+hp|0)|0]|0)==(a[hp+103664|0]|0)){hp=hp+1|0}else{break L6753}}if((hp|0)==1){break L6751}}}while(0);c[17353]=-1;hH(69408,1,0);if((gF|0)!=(c[13898]|0)){break L44}nh=is(n)|0;hF=c[nh>>2]|0;if((hF|0)==1){Fb=+(c[nh+8>>2]|0)}else if((hF|0)==2){Fb=+h[nh+8>>3]}else if((hF|0)==3){Fb=+uz(c[nh+8>>2]|0,0)}else{b7=5024;break L27}if((c[gh>>2]|0)==3){uu(c[gi>>2]|0);c[gh>>2]=1}c[17353]=~~Fb-1;break L44}}while(0);c[17353]=-1}else if((gD|0)==156){gF=gv+1|0;c[13898]=gF;L6771:do{if((gF|0)<(c[8272]|0)){L6773:do{if((a[gw+(gF*40&-1)|0]&1)!=0){nh=c[gw+(gF*40&-1)+36>>2]|0;hF=gw+(gF*40&-1)+32|0;hG=0;while(1){if((hG|0)>=(nh|0)){break}if((a[gB+((c[hF>>2]|0)+hG|0)|0]|0)==(a[hG+103664|0]|0)){hG=hG+1|0}else{break L6773}}if((hG|0)==1){break L6771}}}while(0);c[17181]=-1;hH(68720,1,0);if((gF|0)!=(c[13898]|0)){break L44}hF=is(l)|0;nh=c[hF>>2]|0;if((nh|0)==1){Fc=+(c[hF+8>>2]|0)}else if((nh|0)==2){Fc=+h[hF+8>>3]}else if((nh|0)==3){Fc=+uz(c[hF+8>>2]|0,0)}else{b7=5040;break L27}if((c[gj>>2]|0)==3){uu(c[gl>>2]|0);c[gj>>2]=1}c[17181]=~~Fc-1;break L44}}while(0);c[17181]=-1}else if((gD|0)==152){gF=gv+1|0;c[13898]=gF;L6791:do{if((gF|0)<(c[8272]|0)){L6793:do{if((a[gw+(gF*40&-1)|0]&1)!=0){hF=c[gw+(gF*40&-1)+36>>2]|0;nh=gw+(gF*40&-1)+32|0;hp=0;while(1){if((hp|0)>=(hF|0)){break}if((a[gB+((c[nh>>2]|0)+hp|0)|0]|0)==(a[hp+103664|0]|0)){hp=hp+1|0}else{break L6793}}if((hp|0)==1){b7=5050;break L6791}}}while(0);c[16665]=-1;hH(66656,1,0);if((gF|0)!=(c[13898]|0)){break}nh=is(k)|0;hF=c[nh>>2]|0;if((hF|0)==1){Fd=+(c[nh+8>>2]|0)}else if((hF|0)==2){Fd=+h[nh+8>>3]}else if((hF|0)==3){Fd=+uz(c[nh+8>>2]|0,0)}else{b7=5056;break L27}if((c[gm>>2]|0)==3){uu(c[gn>>2]|0);c[gm>>2]=1}c[16665]=~~Fd-1}else{b7=5050}}while(0);if((b7|0)==5050){b7=0;c[16665]=-1}c[16492]=c[16664];c[65972>>2]=c[66660>>2];c[65976>>2]=c[66664>>2];c[65980>>2]=c[66668>>2];c[65984>>2]=c[66672>>2];c[65988>>2]=c[66676>>2];c[65992>>2]=c[66680>>2];c[65996>>2]=c[66684>>2];c[66e3>>2]=c[66688>>2];c[66004>>2]=c[66692>>2];c[66008>>2]=c[66696>>2];c[66012>>2]=c[66700>>2];c[66016>>2]=c[66704>>2];c[66020>>2]=c[66708>>2];c[16320]=c[16664];c[65284>>2]=c[66660>>2];c[65288>>2]=c[66664>>2];c[65292>>2]=c[66668>>2];c[65296>>2]=c[66672>>2];c[65300>>2]=c[66676>>2];c[65304>>2]=c[66680>>2];c[65308>>2]=c[66684>>2];c[65312>>2]=c[66688>>2];c[65316>>2]=c[66692>>2];c[65320>>2]=c[66696>>2];c[65324>>2]=c[66700>>2];c[65328>>2]=c[66704>>2];c[65332>>2]=c[66708>>2]}else if((gD|0)==119){gF=gv+1|0;c[13898]=gF;nh=a[gw+(gF*40&-1)|0]&1;L6813:do{if((c[8272]|0)>(gF|0)){if(nh<<24>>24==0){Fe=0;b7=5066;break}hF=c[gw+(gF*40&-1)+36>>2]|0;hG=gw+(gF*40&-1)+32|0;hS=0;while(1){if((hS|0)>=(hF|0)){break}if((a[gB+((c[hG>>2]|0)+hS|0)|0]|0)==(a[hS+95280|0]|0)){hS=hS+1|0}else{Fe=nh;b7=5066;break L6813}}if((hS|0)!=2){Ff=hF;Fg=nh;b7=5075;break}c[13898]=gv+2;hG=is(f)|0;gC=c[hG>>2]|0;if((gC|0)==1){Fh=+(c[hG+8>>2]|0)}else if((gC|0)==2){Fh=+h[hG+8>>3]}else if((gC|0)==3){Fh=+uz(c[hG+8>>2]|0,0)}else{b7=5072;break L27}if((c[go>>2]|0)!=3){Fi=1;Fj=Fh;break}uu(c[gp>>2]|0);c[go>>2]=1;Fi=1;Fj=Fh}else{Fe=nh;b7=5066}}while(0);if((b7|0)==5066){b7=0;Ff=c[gw+(gF*40&-1)+36>>2]|0;Fg=Fe;b7=5075}do{if((b7|0)==5075){b7=0;L6831:do{if(Fg<<24>>24!=0&(Ff|0)>0){nh=0;hG=0;gC=c[gw+(gF*40&-1)+32>>2]|0;while(1){if((a[nh+72944|0]|0)==(a[gB+(nh+gC|0)|0]|0)){Fk=gC;Fl=hG}else{if((nh|0)!=3){b7=5083;break L6831}Fk=gC-1|0;Fl=1}hB=nh+1|0;if((hB|0)<(Fl+Ff|0)){nh=hB;hG=Fl;gC=Fk}else{break}}if((Fl|0)!=0){Fm=gF;break}if((nh|0)==2|(nh|0)==8){Fm=gF}else{b7=5083}}else{b7=5083}}while(0);if((b7|0)==5083){b7=0;c[13898]=gv;Fm=gv}c[13898]=Fm+1;hF=is(j)|0;hS=c[hF>>2]|0;if((hS|0)==1){Fn=+(c[hF+8>>2]|0)}else if((hS|0)==2){Fn=+h[hF+8>>3]}else if((hS|0)==3){Fn=+uz(c[hF+8>>2]|0,0)}else{b7=5088;break L27}if((c[gq>>2]|0)!=3){Fi=0;Fj=Fn;break}uu(c[gs>>2]|0);c[gq>>2]=1;Fi=0;Fj=Fn}}while(0);h[77]=Fj;a[624]=Fi}else if((gD|0)==91){c[13898]=gv+1;gF=is(e)|0;hF=c[gF>>2]|0;if((hF|0)==1){Fo=+(c[gF+8>>2]|0)}else if((hF|0)==2){Fo=+h[gF+8>>3]}else if((hF|0)==3){Fo=+uz(c[gF+8>>2]|0,0)}else{b7=5096;break L27}if((c[gt>>2]|0)==3){uu(c[gu>>2]|0);c[gt>>2]=1}h[77]=Fo;a[624]=0}else{b7=5100;break L27}}while(0);if(!(ix(c[6074]|0)|0)){break L7}c[13898]=cb;gv=cb}if((b7|0)==109){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==114){uf(c[13898]|0,124136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==121){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=123984,v)|0)}else if((b7|0)==780){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==815){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==831){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==918){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==953){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=129728,v)|0)}else if((b7|0)==974){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==978){uk(132480,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==998){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1002){uk(132480,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1020){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1034){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1038){uf(mD,127632,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1053){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1073){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1078){uf(me,127264,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1083){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1097){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1101){uf(c[13898]|0,127040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1165){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1194){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1207){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1224){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1232){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1240){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1244){uf(no,129896,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1251){uf(-1,129624,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1284){uf((c[13898]|0)-1|0,130240,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1292){c[13898]=nE;b7=1293}else if((b7|0)==1295){Fp=c[13898]|0;uf(Fp,132744,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1360){uf(nT,131288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1402){c[13898]=n7;b7=1403}else if((b7|0)==1405){Fq=c[13898]|0;uf(Fq,132744,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1452){c[13898]=oj;b7=1453}else if((b7|0)==1462){Fr=c[13898]|0;uf(Fr,140752,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1693){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1742){uf(gv,154168,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1747){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1764){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1769){uf(c[13898]|0,173664,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1867){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1877){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1885){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1893){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1901){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1974){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1997){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2007){uf(qT,136864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2054){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2152){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2158){uf(c[13898]|0,208936,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2165){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=201712,v)|0)}else if((b7|0)==2198){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=138936,v)|0)}else if((b7|0)==2201){uu(r3);uu(r2);uf(c[13898]|0,138632,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2206){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2270){c[13898]=sl;b7=2271}else if((b7|0)==2280){Fs=c[13898]|0;uf(Fs,140752,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2297){c[13898]=sr;st=sr;uf(st,140752,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2299){st=c[13898]|0;uf(st,140752,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2312){c[sv>>2]=sw;uf(c[13898]|0,174808,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2324){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2328){uf(c[13898]|0,140880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2398){c[13898]=sX;b7=2399}else if((b7|0)==2401){Ft=c[13898]|0;uf(Ft,143264,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2437){uf(s$,142184,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2458){c[13898]=ta;tc=ta;uf(tc,142920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2460){tc=c[13898]|0;uf(tc,142920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2520){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2698){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2740){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2816){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2838){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2860){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2882){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2897){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2911){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2917){uf(vH,179040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2930){c[13898]=vH;b7=2931}else if((b7|0)==2933){Fu=c[13898]|0;uf(Fu,149040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2983){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2997){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3049){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3116){uf(vK,164e3,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3153){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3161){uf(wg,159752,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3166){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3170){uf(c[13898]|0,159064,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3182){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3186){uf(c[13898]|0,159064,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3198){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3202){uf(c[13898]|0,159064,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3205){uf(wg,159752,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3218){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3234){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3249){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3255){uf(wg,159752,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3258){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=151392,v)|0)}else if((b7|0)==3282){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3296){uf((c[13898]|0)-1|0,150248,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3302){uf((c[13898]|0)-1|0,150080,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3308){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3312){uf((c[13898]|0)-1|0,149880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3317){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3321){uf((c[13898]|0)-1|0,149880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3326){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3330){uf((c[13898]|0)-1|0,149880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3347){uf(w$,150736,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3353){uf(wg,159752,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3361){c[13898]=xi;xj=xi;uf(xj,205112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3363){xj=c[13898]|0;uf(xj,205112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3366){uf(c[13898]|0,151816,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3371){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=151632,v)|0)}else if((b7|0)==3373){ez();Fv=c[13898]|0;uf(Fv,150896,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3397){ez();uf(c[13898]|0,151112,(v=i,i=i+8|0,c[v>>2]=c[11900],v)|0)}else if((b7|0)==3404){uf(c[13898]|0,150736,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3409){uf(wg,159752,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3413){uf(xx,152776,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3427){uf(xA,152776,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3441){uf(xD,152776,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3459){uf(xF,154672,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3467){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3471){uf(c[13898]|0,154376,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3473){uf(wg,154e3,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3537){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3541){c[13505]=0;uf(c[13898]|0,163320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3561){uf(xO,162224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3576){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3590){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3614){c[13898]=x5;b7=3615}else if((b7|0)==3617){Fw=c[13898]|0;uf(Fw,149040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3642){c[13898]=ya;b7=3643}else if((b7|0)==3645){Fx=c[13898]|0;uf(Fx,149040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3678){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3683){uf(yz,208936,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3719){uf(yf,171872,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3720){uf(yf,171504,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3725){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3742){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3747){uf(c[13898]|0,173664,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3775){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3802){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3815){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3821){g[38]=1.0;g[178]=1.0;uf(-1,174280,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3845){uf(zN,143640,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3860){uf(zT,143640,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3879){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3884){uf(c[13898]|0,208936,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3894){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=176728,v)|0)}else if((b7|0)==3974){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4075){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4079){uf(AC,193912,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4110){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4186){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4197){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4213){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4217){uf((c[13898]|0)-1|0,204376,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4243){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4247){uf((c[13898]|0)-1|0,203376,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4290){uf(zm,208496,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4304){uj(c[13898]|0,214704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4308){uf(BU,217328,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4376){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4392){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4493){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4506){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4527){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4668){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4686){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4714){c[13898]=Ea;Fy=Ea;uf(Fy,73560,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4722){c[13898]=D4;Fy=D4;uf(Fy,73560,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4725){Fy=c[13898]|0;uf(Fy,73560,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4796){c[13898]=Ec;EH=Ec;uf(EH,95448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4798){EH=c[13898]|0;uf(EH,95448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4854){uf(ER,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4859){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4867){uf(c[13898]|0,21904,(v=i,i=i+16|0,c[v>>2]=120,c[v+8>>2]=360,v)|0)}else if((b7|0)==4869){uf(c[13898]|0,21904,(v=i,i=i+16|0,c[v>>2]=122,c[v+8>>2]=360,v)|0)}else if((b7|0)==4871){uf(c[13898]|0,21864,(v=i,i=i+8|0,c[v>>2]=179864,v)|0)}else if((b7|0)==4873){uf(c[13898]|0,21864,(v=i,i=i+8|0,c[v>>2]=77416,v)|0)}else if((b7|0)==4881){uf(-1,211136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4976){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==4992){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5008){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5024){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5040){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5056){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5072){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5088){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5096){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5100){uf(gv,204968,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5107){uf(gN,122840,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5108){uf(gN,122840,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5109){uf(gN,122840,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5110){uf(gN,122840,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5111){uf(hT,123864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5112){uf(hT,123864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5113){uf(hQ,123776,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5114){uf(hQ,123776,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5115){uf(hq,123648,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5116){uf(hq,123648,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5117){uf(hq,123648,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5118){uf(hq,123512,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5119){uf(hq,123512,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5120){uf(kI,124880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5121){uf(kI,124880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5122){uf(kI,124880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5123){uf(lc,126168,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5124){uf(lc,126168,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5125){uf(lc,126168,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5126){uf(lc,126168,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5127){uf(lt,139712,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5128){uf(lt,139712,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5129){uf(lt,139712,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5130){uf(lt,139712,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5131){uf(mj,128168,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5132){uf(mj,128168,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5133){uf(mn,128008,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5134){uf(mn,128008,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5135){uf(mn,128008,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5136){uf(mn,128008,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5137){uf(mB,127784,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5138){uf(mB,127784,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5139){uf(mB,127784,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5140){uf(mB,127784,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5141){uf(mD,127528,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5142){uf(mD,127528,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5143){uf(mD,127528,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5144){uf(lL,126816,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5145){uf(lL,126816,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5146){uf(lL,126816,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5147){uf(lL,126816,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5148){uf(mN,128944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5149){uf(mN,128944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5150){uf(mN,128944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5151){uf(mN,128944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5152){uf(-1,129776,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5153){uf(-1,129776,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5156){uf(nK,130792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5157){uf(nK,130792,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5158){uf(nQ,130664,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5159){uf(nQ,130664,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5162){uf(n_,132152,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5163){uf(n_,132152,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5164){uf(n_,132152,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5165){uf(n_,132152,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5168){uf(qP,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5169){uf(qP,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5170){uf(qP,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5171){uf(rd,98544,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5172){uf(rd,98544,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5173){uf(rd,98544,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5174){uf(rd,98544,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5175){uu(r2);uu(r6);Fz=c[13898]|0;uf(Fz,137984,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5176){uu(r2);uu(r6);Fz=c[13898]|0;uf(Fz,137984,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5177){uu(r2);uu(r6);Fz=c[13898]|0;uf(Fz,137984,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5178){uu(r2);uu(r6);Fz=c[13898]|0;uf(Fz,137984,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5181){uf(st,140752,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5184){uf(sA,141216,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5185){uf(sA,141216,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5186){uf(sA,141216,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5187){uf(sA,141216,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5190){uf(s$,142560,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5191){uf(s$,142560,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5192){uf(tc,142920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5195){uf(sR,211296,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5196){uf(sR,211296,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5197){uf(sR,211296,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5198){uf(sR,211296,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5199){uf(sR,211296,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5200){uf(sR,211296,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5201){uf(sR,211296,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5202){uf(sR,211296,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5203){uf(sR,211296,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5204){uf(sR,211296,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5205){uf(vo,143744,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5206){uf(vo,143744,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5207){uf(tq,143392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5208){uf(tq,143392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5209){uf(tq,143392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5210){uf(vE,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5211){uf(vE,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5212){uf(vE,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5213){uf(vE,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5216){uf(vT,170376,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5217){uf(vT,170376,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5218){uf(vV,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5219){uf(vV,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5220){uf(vV,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5221){uf(vV,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5222){uf(vX,169096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5223){uf(vX,169096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5224){uf(vX,169096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5225){uf(vX,169096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5226){uf(wd,164440,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5227){uf(wd,164440,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5228){uf(wd,164440,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5229){uf(wd,164440,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5230){uf(wd,164440,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5231){uf(wd,164440,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5232){uf(wd,164440,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5233){uf(wd,164440,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5234){uf(wd,164440,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5235){uf(wd,164440,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5236){uf(wd,164440,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5237){uf(wd,164440,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5238){uf(wO,150560,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5239){uf(wO,150560,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5240){uf(wO,150560,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5241){uf(xe,149736,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5242){uf(xe,149736,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5243){uf(xe,149736,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5244){uf(xe,149736,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5245){uf(xj,205112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5246){uf(xj,205112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5250){Fv=c[13898]|0;uf(Fv,150896,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5251){uf(xz,152392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5252){uf(xz,152392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5253){uf(xz,152392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5254){uf(xz,152392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5255){uf(xC,152392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5256){uf(xC,152392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5257){uf(xC,152392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5258){uf(xC,152392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5259){uf(xF,155040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5260){uf(xF,155040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5261){uf(x$,162848,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5262){uf(x$,162848,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5263){uf(x0,162848,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5264){uf(x0,162848,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5265){uf(x7,148728,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5266){uf(x7,148728,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5267){uf(x7,148728,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5272){uf(yU,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5273){uf(yU,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5274){uf(yU,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5275){uf(zT,214008,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5276){uf(zT,214008,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5277){uf(z7,176128,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5278){uf(z7,176128,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5279){uf(z7,176128,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5280){uf(zF,210136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5281){uf(zF,210136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5282){uf(zF,210136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5283){uf(zF,210136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5284){uf(zs,209456,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5285){uf(zs,209456,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5286){uf(zs,209456,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5287){uf(zs,209456,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5288){uf(AX,200192,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5289){uf(AX,200192,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5290){uf(AX,200192,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5291){uf(AX,200192,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5292){uf(AX,95448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5293){uf(AX,95448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5294){uf(AX,95448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5295){uf(AX,95448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5296){uf(BW,217888,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5297){uf(BW,217888,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5298){uf(BW,217888,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5299){uf(DU,98544,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5300){uf(DU,98544,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5301){uf(DU,98544,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5302){uf(DU,98544,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5303){uf(Ci,224656,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5304){uf(Ci,224656,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5305){uf(Ci,224656,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5306){uf(Ci,224656,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5310){uf(EH,95448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5311){uf(EH,95448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==5312){uf(EH,95448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((b7|0)==1293){c[12886]=0;Fp=nE;uf(Fp,132744,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1403){c[10568]=0;Fq=n7;uf(Fq,132744,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==1453){c[bv>>2]=0;Fr=oj;uf(Fr,140752,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2271){c[a8>>2]=0;Fs=sl;uf(Fs,140752,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2399){c[8528]=0;Ft=sX;uf(Ft,143264,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==2931){c[aF>>2]=0;Fu=vH;uf(Fu,149040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3615){c[ad>>2]=0;Fw=x5;uf(Fw,149040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b7|0)==3643){c[57238]=0;Fx=ya;uf(Fx,149040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);e7(0);Fx=c[6074]|0;if((Fx|0)!=0){ya=Fx;while(1){Fx=c[ya>>2]|0;uu(c[ya+12>>2]|0);uu(ya);if((Fx|0)==0){break}else{ya=Fx}}}c[6074]=0;i=d;return}function jp(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;b=i;i=i+40|0;d=b|0;e=b+24|0;f=e|0;g=e|0;uE(g|0,0,11);h=c[13898]|0;j=h+1|0;c[13898]=j;k=c[1054]|0;l=c[k+(j*40&-1)+36>>2]|0;m=c[k+(j*40&-1)+32>>2]|0;n=(a[k+(j*40&-1)|0]&1)==0;o=(l|0)>0;p=c[10036]|0;q=56720;r=77416;L7279:while(1){L7281:do{if(!n){if(o){s=0;t=0;u=m;while(1){w=a[r+s|0]|0;if(w<<24>>24==(a[p+(s+u|0)|0]|0)){x=u;y=t}else{if(w<<24>>24!=36){break L7281}x=u-1|0;y=1}z=s+1|0;if((z|0)<(y+l|0)){s=z;t=y;u=x}else{break}}if((y|0)==0){A=z}else{B=q;break L7279}}else{A=0}u=a[r+A|0]|0;if((u<<24>>24|0)==36|(u<<24>>24|0)==0){B=q;break L7279}}}while(0);u=q+8|0;t=c[u>>2]|0;if((t|0)==0){B=u;break}else{q=u;r=t}}r=c[B+4>>2]|0;L7294:do{if((r|0)>-1){a[e+r|0]=1;B=h+2|0;c[13898]=B;C=B;D=c[8272]|0}else{B=c[8272]|0;q=(B|0)>(j|0);L7296:do{if(!(n|q^1)){A=0;while(1){if((A|0)>=(l|0)){E=5332;break}if((a[p+(m+A|0)|0]|0)==(a[A+150688|0]|0)){A=A+1|0}else{E=5333;break}}if((E|0)==5332){if((A|0)!=2){E=5333}}if((E|0)==5333){if(n|q^1){break}else{F=0}while(1){if((F|0)>=(l|0)){break}if((a[p+(m+F|0)|0]|0)==(a[F+148800|0]|0)){F=F+1|0}else{break L7296}}if((F|0)!=2){break}}a[e+1|0]=1;a[e+2|0]=1;A=h+2|0;c[13898]=A;C=A;D=B;break L7294}}while(0);uE(f|0,1,11);C=j;D=B}}while(0);L7312:do{if((C|0)<(D|0)){j=(a[k+(C*40&-1)|0]&1)==0;L7314:do{if(j){G=d}else{f=c[k+(C*40&-1)+36>>2]|0;h=k+(C*40&-1)+32|0;F=0;while(1){if((F|0)>=(f|0)){E=5345;break}if((a[p+((c[h>>2]|0)+F|0)|0]|0)==(a[F+103664|0]|0)){F=F+1|0}else{break}}if((E|0)==5345){if((F|0)==1){break L7312}}h=d;if(j){G=h;break}f=c[k+(C*40&-1)+36>>2]|0;m=k+(C*40&-1)+32|0;l=0;while(1){if((l|0)>=(f|0)){break}if((a[p+((c[m>>2]|0)+l|0)|0]|0)==(a[l+103664|0]|0)){l=l+1|0}else{G=h;break L7314}}if((l|0)==1){H=C}else{G=h;break}uf(H,133088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);a[14176]=1;is(d);a[14176]=0;if((c[d>>2]|0)!=3){c[13898]=C;H=C;uf(H,133088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}j=c[d+8>>2]|0;if((j|0)==0){H=c[13898]|0;uf(H,133088,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((a[e+2|0]&1)!=0){uF(66240,j|0,50);B=a8(j|0,37)|0;do{if((B|0)==0){I=0}else{m=B+1|0;L7342:do{if((m|0)==0){J=0}else{f=m;while(1){F=a[f]|0;if(!((F<<24>>24|0)==32|(F<<24>>24|0)==45|(F<<24>>24|0)==43|(F<<24>>24|0)==35)){J=f;break L7342}F=f+1|0;if((F|0)==0){J=0;break}else{f=F}}}}while(0);while(1){K=a[J]|0;if(!(((K&255)-48|0)>>>0<10|K<<24>>24==46)){break}J=J+1|0}if((K-102&255)<2){I=1;break}I=K<<24>>24==101&1}}while(0);a[66188]=I}if((a[e+1|0]&1)!=0){uF(65552,j|0,50);B=a8(j|0,37)|0;do{if((B|0)==0){L=0}else{m=B+1|0;L7357:do{if((m|0)==0){M=0}else{h=m;while(1){l=a[h]|0;if(!((l<<24>>24|0)==32|(l<<24>>24|0)==45|(l<<24>>24|0)==43|(l<<24>>24|0)==35)){M=h;break L7357}l=h+1|0;if((l|0)==0){M=0;break}else{h=l}}}}while(0);while(1){N=a[M]|0;if(!(((N&255)-48|0)>>>0<10|N<<24>>24==46)){break}M=M+1|0}if((N-102&255)<2){L=1;break}L=N<<24>>24==101&1}}while(0);a[65500]=L}if((a[g]&1)!=0){uF(64864,j|0,50);B=a8(j|0,37)|0;do{if((B|0)==0){O=0}else{m=B+1|0;L7372:do{if((m|0)==0){P=0}else{h=m;while(1){l=a[h]|0;if(!((l<<24>>24|0)==32|(l<<24>>24|0)==45|(l<<24>>24|0)==43|(l<<24>>24|0)==35)){P=h;break L7372}l=h+1|0;if((l|0)==0){P=0;break}else{h=l}}}}while(0);while(1){Q=a[P]|0;if(!(((Q&255)-48|0)>>>0<10|Q<<24>>24==46)){break}P=P+1|0}if((Q-102&255)<2){O=1;break}O=Q<<24>>24==101&1}}while(0);a[64812]=O}if((a[e+6|0]&1)!=0){uF(68992,j|0,50);B=a8(j|0,37)|0;do{if((B|0)==0){R=0}else{m=B+1|0;L7387:do{if((m|0)==0){S=0}else{h=m;while(1){l=a[h]|0;if(!((l<<24>>24|0)==32|(l<<24>>24|0)==45|(l<<24>>24|0)==43|(l<<24>>24|0)==35)){S=h;break L7387}l=h+1|0;if((l|0)==0){S=0;break}else{h=l}}}}while(0);while(1){T=a[S]|0;if(!(((T&255)-48|0)>>>0<10|T<<24>>24==46)){break}S=S+1|0}if((T-102&255)<2){R=1;break}R=T<<24>>24==101&1}}while(0);a[68940]=R}if((a[e+5|0]&1)!=0){uF(68304,j|0,50);B=a8(j|0,37)|0;do{if((B|0)==0){U=0}else{m=B+1|0;L7402:do{if((m|0)==0){V=0}else{h=m;while(1){l=a[h]|0;if(!((l<<24>>24|0)==32|(l<<24>>24|0)==45|(l<<24>>24|0)==43|(l<<24>>24|0)==35)){V=h;break L7402}l=h+1|0;if((l|0)==0){V=0;break}else{h=l}}}}while(0);while(1){W=a[V]|0;if(!(((W&255)-48|0)>>>0<10|W<<24>>24==46)){break}V=V+1|0}if((W-102&255)<2){U=1;break}U=W<<24>>24==101&1}}while(0);a[68252]=U}if((a[e+3|0]&1)!=0){uF(66928,j|0,50);B=a8(j|0,37)|0;do{if((B|0)==0){X=0}else{m=B+1|0;L7417:do{if((m|0)==0){Y=0}else{h=m;while(1){l=a[h]|0;if(!((l<<24>>24|0)==32|(l<<24>>24|0)==45|(l<<24>>24|0)==43|(l<<24>>24|0)==35)){Y=h;break L7417}l=h+1|0;if((l|0)==0){Y=0;break}else{h=l}}}}while(0);while(1){Z=a[Y]|0;if(!(((Z&255)-48|0)>>>0<10|Z<<24>>24==46)){break}Y=Y+1|0}if((Z-102&255)<2){X=1;break}X=Z<<24>>24==101&1}}while(0);a[66876]=X}if((a[e+7|0]&1)!=0){uF(69680,j|0,50);B=a8(j|0,37)|0;do{if((B|0)==0){_=0}else{m=B+1|0;L7432:do{if((m|0)==0){$=0}else{h=m;while(1){l=a[h]|0;if(!((l<<24>>24|0)==32|(l<<24>>24|0)==45|(l<<24>>24|0)==43|(l<<24>>24|0)==35)){$=h;break L7432}l=h+1|0;if((l|0)==0){$=0;break}else{h=l}}}}while(0);while(1){aa=a[$]|0;if(!(((aa&255)-48|0)>>>0<10|aa<<24>>24==46)){break}$=$+1|0}if((aa-102&255)<2){_=1;break}_=aa<<24>>24==101&1}}while(0);a[69628]=_}uu(j);i=b;return}}while(0);if((a[e+2|0]&1)!=0){c[16560]=6758437;a[66188]=1}if((a[e+1|0]&1)!=0){c[16388]=6758437;a[65500]=1}if((a[g]&1)!=0){c[16216]=6758437;a[64812]=1}if((a[e+6|0]&1)!=0){c[17248]=6758437;a[68940]=1}if((a[e+5|0]&1)!=0){c[17076]=6758437;a[68252]=1}if((a[e+3|0]&1)!=0){c[16732]=6758437;a[66876]=1}if((a[e+7|0]&1)==0){i=b;return}c[17420]=6758437;a[69628]=1;i=b;return}function jq(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=i;i=i+24|0;e=d|0;f=(c[13898]|0)+1|0;c[13898]=f;L7468:do{if((f|0)<(c[8272]|0)){g=c[1054]|0;L7470:do{if((a[g+(f*40&-1)|0]&1)!=0){h=c[g+(f*40&-1)+36>>2]|0;j=g+(f*40&-1)+32|0;k=c[10036]|0;l=0;while(1){if((l|0)>=(h|0)){break}if((a[k+((c[j>>2]|0)+l|0)|0]|0)==(a[l+103664|0]|0)){l=l+1|0}else{break L7470}}if((l|0)==1){break L7468}}}while(0);jw(b);g=c[13898]|0;L7477:do{if((g|0)<(c[8272]|0)){j=c[1054]|0;k=(a[j+(g*40&-1)|0]&1)==0;L7479:do{if(k){m=e}else{h=c[j+(g*40&-1)+36>>2]|0;n=j+(g*40&-1)+32|0;o=c[10036]|0;p=0;while(1){if((p|0)>=(h|0)){q=5461;break}if((a[o+((c[n>>2]|0)+p|0)|0]|0)==(a[p+103664|0]|0)){p=p+1|0}else{break}}if((q|0)==5461){if((p|0)==1){break L7477}}n=e;if(k){m=n;break}o=c[j+(g*40&-1)+36>>2]|0;h=j+(g*40&-1)+32|0;r=c[10036]|0;s=0;while(1){if((s|0)>=(o|0)){break}if((a[r+((c[h>>2]|0)+s|0)|0]|0)==(a[s+103664|0]|0)){s=s+1|0}else{m=n;break L7479}}if((s|0)==1){break L7477}else{m=n}}}while(0);a[14176]=1;is(e);a[14176]=0;if((c[e>>2]|0)!=3){c[13898]=g;break}j=c[e+8>>2]|0;if((j|0)==0){break}k=b+60|0;uu(c[k>>2]|0);c[k>>2]=j}}while(0);jw(b);i=d;return}}while(0);e=b+60|0;uu(c[e>>2]|0);c[e>>2]=0;i=d;return}function jr(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;d=i;i=i+48|0;e=d|0;f=d+24|0;g=(c[13898]|0)+1|0;c[13898]=g;if((g|0)>=(c[8272]|0)){j=g;uf(j,208936,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}k=c[1054]|0;L7506:do{if((a[k+(g*40&-1)|0]&1)!=0){l=c[k+(g*40&-1)+36>>2]|0;m=k+(g*40&-1)+32|0;n=c[10036]|0;o=0;while(1){if((o|0)>=(l|0)){break}if((a[n+((c[m>>2]|0)+o|0)|0]|0)==(a[o+103664|0]|0)){o=o+1|0}else{break L7506}}if((o|0)==1){j=g}else{break}uf(j,208936,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);g=is(e)|0;k=c[g>>2]|0;if((k|0)==3){p=+uz(c[g+8>>2]|0,0)}else if((k|0)==2){p=+h[g+8>>3]}else if((k|0)==1){p=+(c[g+8>>2]|0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=e|0;if((c[g>>2]|0)==3){uu(c[e+8>>2]|0);c[g>>2]=1}g=~~p;if((g|0)<1){j=c[13898]|0;uf(j,208936,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{q=b;r=0}while(1){s=c[q>>2]|0;if((s|0)==0){t=0;u=5494;break}w=c[s+4>>2]|0;if((g|0)>(w|0)){q=s|0;r=s}else{u=5493;break}}if((u|0)==5493){if((g|0)==(w|0)){x=s}else{t=s;u=5494}}if((u|0)==5494){s=f|0;uE(s|0,0,24);f=g-1|0;w=ut(64)|0;do{if((w|0)==0){gk();q=ut(64)|0;if((q|0)!=0){y=q;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=128152,v)|0)}else{y=w}}while(0);w=y;if((r|0)==0){c[b>>2]=w}else{c[r>>2]=w}c[y+4>>2]=g;c[y>>2]=t;c[y+8>>2]=0;c[y+12>>2]=f;c[y+16>>2]=f;c[y+20>>2]=0;h[y+24>>3]=1.0;h[y+32>>3]=-2.0;f=y+40|0;c[f>>2]=c[s>>2];c[f+4>>2]=c[s+4>>2];c[f+8>>2]=c[s+8>>2];c[f+12>>2]=c[s+12>>2];c[f+16>>2]=c[s+16>>2];c[f+20>>2]=c[s+20>>2];x=w}w=c[13898]|0;s=c[1054]|0;f=c[s+(w*40&-1)+36>>2]|0;L7542:do{if((a[s+(w*40&-1)|0]&1)!=0&(f|0)>0){y=c[10036]|0;t=0;g=0;q=c[s+(w*40&-1)+32>>2]|0;while(1){if((a[t+184456|0]|0)==(a[y+(t+q|0)|0]|0)){z=q;A=g}else{if((t|0)!=3){u=5515;break L7542}z=q-1|0;A=1}j=t+1|0;if((j|0)<(A+f|0)){t=j;g=A;q=z}else{break}}if((A|0)==0){if(!((t|0)==2|(t|0)==7)){u=5515;break}}if((x|0)==0){B=w}else{q=c[x>>2]|0;if((c[b>>2]|0)==(x|0)){c[b>>2]=q}else{c[r>>2]=q}uu(x);B=c[13898]|0}q=B+1|0;c[13898]=q;C=q}else{u=5515}}while(0);if((u|0)==5515){B=x+8|0;hH(B,0,1);C=c[13898]|0}if((C|0)>=(c[8272]|0)){i=d;return}B=c[1054]|0;if((a[B+(C*40&-1)|0]&1)==0){D=(b|0)==43264;E=D?124560:123144;uf(C,125776,(v=i,i=i+8|0,c[v>>2]=E,v)|0)}x=c[B+(C*40&-1)+36>>2]|0;r=B+(C*40&-1)+32|0;B=c[10036]|0;w=0;while(1){if((w|0)>=(x|0)){break}if((a[B+((c[r>>2]|0)+w|0)|0]|0)==(a[w+103664|0]|0)){w=w+1|0}else{u=5530;break}}if((u|0)==5530){D=(b|0)==43264;E=D?124560:123144;uf(C,125776,(v=i,i=i+8|0,c[v>>2]=E,v)|0)}if((w|0)==1){i=d;return}else{D=(b|0)==43264;E=D?124560:123144;uf(C,125776,(v=i,i=i+8|0,c[v>>2]=E,v)|0)}}function js(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0.0;d=i;i=i+24|0;e=d|0;f=b|0;c[f>>2]=4;g=b+16|0;h[g>>3]=-1.0;b=c[13898]|0;j=b+1|0;c[13898]=j;if((j|0)>=(c[8272]|0)){i=d;return}k=c[1054]|0;l=a[k+(j*40&-1)|0]|0;m=(l&1)==0;L7583:do{if(m){n=j;o=l}else{p=c[k+(j*40&-1)+36>>2]|0;q=k+(j*40&-1)+32|0;r=c[10036]|0;s=0;while(1){if((s|0)>=(p|0)){t=5537;break}if((a[r+((c[q>>2]|0)+s|0)|0]|0)==(a[s+103664|0]|0)){s=s+1|0}else{break}}do{if((t|0)==5537){if((s|0)!=1){break}i=d;return}}while(0);if(m){n=j;o=l;break}s=c[k+(j*40&-1)+36>>2]|0;q=k+(j*40&-1)+32|0;r=c[10036]|0;p=0;while(1){if((p|0)>=(s|0)){break}if((a[r+((c[q>>2]|0)+p|0)|0]|0)==(a[p+95280|0]|0)){p=p+1|0}else{n=j;o=l;break L7583}}if((p|0)!=2){n=j;o=l;break}q=b+2|0;c[13898]=q;s=c[k+(q*40&-1)+36>>2]|0;u=a[k+(q*40&-1)|0]|0;if((u&1)!=0&(s|0)>0){w=0;x=0;y=c[k+(q*40&-1)+32>>2]|0}else{uf(q,141880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}while(1){if((a[w+142056|0]|0)==(a[r+(w+y|0)|0]|0)){z=y;A=x}else{if((w|0)!=2){t=5575;break}z=y-1|0;A=1}B=w+1|0;if((B|0)<(A+s|0)){w=B;x=A;y=z}else{break}}if((t|0)==5575){uf(q,141880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((A|0)!=0){n=q;o=u;break}if((w|0)==1|(w|0)==6){n=q;o=u;break}uf(q,141880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);w=c[k+(n*40&-1)+36>>2]|0;L7612:do{if((o&1)!=0&(w|0)>0){A=c[10036]|0;t=0;z=0;y=c[k+(n*40&-1)+32>>2]|0;while(1){if((a[t+142056|0]|0)==(a[A+(t+y|0)|0]|0)){C=y;D=z}else{if((t|0)!=2){break L7612}C=y-1|0;D=1}x=t+1|0;if((x|0)<(D+w|0)){t=x;z=D;y=C}else{break}}if((D|0)==0){if(!((t|0)==1|(t|0)==6)){break}}c[f>>2]=3;c[13898]=(c[13898]|0)+1}}while(0);D=is(e)|0;C=c[D>>2]|0;if((C|0)==1){E=+(c[D+8>>2]|0)}else if((C|0)==2){E=+h[D+8>>3]}else if((C|0)==3){E=+uz(c[D+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}D=e|0;if((c[D>>2]|0)==3){uu(c[e+8>>2]|0);c[D>>2]=1}D=E<0.0;F=D?-1.0:E;h[g>>3]=F;if((c[f>>2]|0)!=3){i=d;return}if(D){h[g>>3]=0.0;i=d;return}if(F<=1.0){i=d;return}h[g>>3]=1.0;i=d;return}function jt(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aY=0,aZ=0,a_=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a9=0,ba=0,bb=0,bc=0,bd=0,be=0,bf=0,bg=0,bh=0,bi=0,bj=0,bk=0,bl=0,bm=0,bn=0,bo=0,bp=0,bq=0,br=0,bs=0,bt=0,bu=0,bv=0,bw=0,bx=0.0,by=0.0,bz=0,bA=0,bB=0.0,bC=0,bD=0,bE=0,bF=0,bG=0,bH=0,bI=0,bJ=0,bK=0,bL=0,bM=0,bN=0,bO=0,bP=0,bQ=0,bR=0,bS=0,bT=0,bU=0,bV=0,bW=0,bX=0,bY=0,bZ=0,b_=0,b$=0,b0=0,b1=0,b2=0,b3=0,b4=0,b5=0,b6=0,b7=0,b8=0,b9=0,ca=0,cb=0,cc=0,cd=0,ce=0,cf=0,cg=0,ch=0,ci=0,cj=0,ck=0,cl=0,cm=0,cn=0,co=0,cp=0,cq=0,cr=0.0,cs=0.0,ct=0.0,cu=0,cv=0.0,cw=0,cx=0,cy=0,cz=0.0,cA=0,cB=0,cC=0,cD=0,cE=0.0,cF=0.0,cG=0.0,cH=0.0,cI=0.0,cJ=0.0,cK=0,cL=0,cM=0.0,cN=0.0,cO=0.0,cP=0.0,cQ=0,cR=0.0,cS=0.0,cT=0,cU=0,cV=0,cW=0,cX=0,cY=0,cZ=0,c_=0,c$=0,c0=0,c1=0,c2=0,c3=0,c4=0,c5=0,c6=0,c7=0,c8=0,c9=0,da=0,db=0,dc=0,dd=0,de=0,df=0,dg=0,dh=0,di=0,dj=0,dk=0,dm=0,dn=0,dq=0,dr=0,ds=0,dt=0,du=0,dv=0,dw=0,dx=0,dy=0,dz=0,dA=0,dB=0,dC=0,dD=0,dE=0,dF=0,dG=0,dH=0,dI=0.0,dJ=0,dK=0,dL=0,dM=0;d=i;i=i+656|0;e=d|0;f=d+24|0;g=d+48|0;j=d+72|0;k=d+96|0;l=d+120|0;m=d+144|0;n=d+168|0;o=d+192|0;p=d+216|0;q=d+264|0;r=d+272|0;s=d+296|0;t=d+320|0;u=d+344|0;w=d+368|0;x=d+392|0;y=d+416|0;z=d+464|0;A=d+472|0;B=d+520|0;C=d+528|0;D=d+576|0;E=d+584|0;F=d+608|0;G=d+624|0;H=F|0;a[H]=a[136208]|0;a[H+1|0]=a[136209|0]|0;a[H+2|0]=a[136210|0]|0;I=F+2|0;J=56832+(b*24&-1)|0;uB(I|0,J|0);K=F+(uA(H|0)|0)|0;a[K]=a[120232]|0;a[K+1|0]=a[120233|0]|0;a[K+2|0]=a[120234|0]|0;a[K+3|0]=a[120235|0]|0;a[K+4|0]=a[120236|0]|0;a[K+5|0]=a[120237|0]|0;H=c[13898]|0;L=c[1054]|0;M=c[L+(H*40&-1)+36>>2]|0;N=c[L+(H*40&-1)+32>>2]|0;L7646:do{if((a[L+(H*40&-1)|0]&1)==0){P=H}else{if((M|0)>0){Q=c[10036]|0;R=0;S=0;T=N;while(1){U=a[F+(R+2|0)|0]|0;if(U<<24>>24==(a[Q+(R+T|0)|0]|0)){V=T;W=S}else{if(U<<24>>24!=36){P=H;break L7646}V=T-1|0;W=1}X=R+1|0;if((X|0)<(W+M|0)){R=X;S=W;T=V}else{break}}if((W|0)==0){Y=X;Z=5590}}else{Y=0;Z=5590}if((Z|0)==5590){T=a[F+(Y+2|0)|0]|0;if(!((T<<24>>24|0)==36|(T<<24>>24|0)==0)){P=H;break}}T=64976+(b*688&-1)|0;a[T]=0;S=H+1|0;c[13898]=S;R=e|0;Q=e+8|0;U=64864+(b*688&-1)|0;_=64812+(b*688&-1)|0;$=64944+(b*688&-1)|0;aa=o|0;ab=o+8|0;ac=64808+(b*688&-1)|0;ad=n|0;ae=n+8|0;af=64813+(b*688&-1)|0;ag=m|0;ah=m+8|0;ai=l|0;aj=l+8|0;ak=x|0;al=x+8|0;am=w|0;an=w+8|0;ao=u|0;ap=u+8|0;aq=t|0;ar=t+8|0;as=s|0;at=s+8|0;au=r|0;av=r+8|0;aw=64944+(b*688&-1)|0;ax=64920+(b*688&-1)|0;ay=64952+(b*688&-1)|0;az=64960+(b*688&-1)|0;aA=64968+(b*688&-1)|0;aB=64928+(b*688&-1)|0;aC=(b|0)==0?6:5;aD=64924+(b*688&-1)|0;aE=f|0;aF=f+8|0;aG=65024+(b*688&-1)|0;aH=65272+(b*688&-1)|0;aI=65128+(b*688&-1)|0;aJ=G|0;aK=64984+(b*688&-1)|0;aL=64988+(b*688&-1)|0;aM=64992+(b*688&-1)|0;aN=(64648+(b*688&-1)|0)+348|0;aO=64984+(b*688&-1)|0;aP=65032+(b*688&-1)|0;aQ=g|0;aR=g+8|0;aS=k|0;aT=k+8|0;aU=65056+(b*688&-1)|0;aV=j|0;aW=j+8|0;aX=65064+(b*688&-1)|0;aY=65072+(b*688&-1)|0;aZ=64916+(b*688&-1)|0;a_=0;a$=0;a0=S;a1=L;a2=a[L+(S*40&-1)|0]|0;L7660:while(1){S=c[a1+(a0*40&-1)+36>>2]|0;a3=c[a1+(a0*40&-1)+32>>2]|0;a4=(a2&1)==0;L7662:do{if((S|0)>0&(a4^1)){a5=c[10036]|0;a6=0;a7=0;a9=a3;while(1){if((a[a6+116896|0]|0)==(a[a5+(a6+a9|0)|0]|0)){ba=a9;bb=a7}else{if((a6|0)!=2){break}ba=a9-1|0;bb=1}bc=a6+1|0;if((bc|0)<(bb+S|0)){a6=bc;a7=bb;a9=ba}else{Z=5598;break}}do{if((Z|0)==5598){Z=0;if((bb|0)==0){if(!((a6|0)==1|(a6|0)==4)){break}}c[aZ>>2]=c[aZ>>2]&-4|2;c[13898]=a0+1;bd=1;be=a$;break L7662}}while(0);if(a4){Z=5835;break}L7677:do{if((S|0)>0){a6=c[10036]|0;a9=0;a7=0;a5=a3;while(1){if((a[a9+141136|0]|0)==(a[a6+(a9+a5|0)|0]|0)){bf=a5;bg=a7}else{if((a9|0)!=2){break L7677}bf=a5-1|0;bg=1}bc=a9+1|0;if((bc|0)<(bg+S|0)){a9=bc;a7=bg;a5=bf}else{break}}if((bg|0)==0){if(!((a9|0)==1|(a9|0)==6)){break}}c[aZ>>2]=c[aZ>>2]&-4|1;c[13898]=a0+1;bd=a_;be=a$;break L7662}}while(0);if(!((S|0)>0&(a4^1))){Z=5835;break}a5=c[10036]|0;a7=0;a6=0;bc=a3;while(1){if((a[a7+115048|0]|0)==(a[a5+(a7+bc|0)|0]|0)){bh=bc;bi=a6}else{if((a7|0)!=2){break}bh=bc-1|0;bi=1}bj=a7+1|0;if((bj|0)<(bi+S|0)){a7=bj;a6=bi;bc=bh}else{Z=5617;break}}do{if((Z|0)==5617){Z=0;if((bi|0)==0){if(!((a7|0)==1|(a7|0)==6)){break}}c[aZ>>2]=c[aZ>>2]|4;c[13898]=a0+1;bd=a_;be=1;break L7662}}while(0);if(a4){Z=5835;break}L7704:do{if((S|0)>0){a7=c[10036]|0;bc=0;a6=0;a5=a3;while(1){if((a[bc+114024|0]|0)==(a[a7+(bc+a5|0)|0]|0)){bk=a5;bl=a6}else{if((bc|0)!=4){break L7704}bk=a5-1|0;bl=1}bj=bc+1|0;if((bj|0)<(bl+S|0)){bc=bj;a6=bl;a5=bk}else{break}}if((bl|0)==0){if(!((bc|0)==3|(bc|0)==8)){break}}c[aZ>>2]=c[aZ>>2]&-5;c[13898]=a0+1;bd=a_;be=1;break L7662}}while(0);if(!((S|0)>0&(a4^1))){Z=5835;break}a5=c[10036]|0;a6=0;a7=0;a9=a3;while(1){if((a[a6+110600|0]|0)==(a[a5+(a6+a9|0)|0]|0)){bm=a9;bn=a7}else{if((a6|0)!=2){break}bm=a9-1|0;bn=1}bj=a6+1|0;if((bj|0)<(bn+S|0)){a6=bj;a7=bn;a9=bm}else{Z=5636;break}}do{if((Z|0)==5636){Z=0;if((bn|0)==0){if(!((a6|0)==1|(a6|0)==7)){break}}a[aY]=1;c[13898]=a0+1;bd=a_;be=a$;break L7662}}while(0);if(a4){Z=5835;break}L7731:do{if((S|0)>0){a6=c[10036]|0;a9=0;a7=0;a5=a3;while(1){if((a[a9+107800|0]|0)==(a[a6+(a9+a5|0)|0]|0)){bo=a5;bp=a7}else{if((a9|0)!=3){break L7731}bo=a5-1|0;bp=1}bj=a9+1|0;if((bj|0)<(bp+S|0)){a9=bj;a7=bp;a5=bo}else{break}}if((bp|0)==0){if(!((a9|0)==2|(a9|0)==8)){break}}a[aY]=0;c[13898]=a0+1;bd=a_;be=a$;break L7662}}while(0);if(!((S|0)>0&(a4^1))){Z=5835;break}a5=c[10036]|0;a7=0;a6=0;bc=a3;while(1){if((a[a7+106864|0]|0)==(a[a5+(a7+bc|0)|0]|0)){bq=bc;br=a6}else{if((a7|0)!=2){break}bq=bc-1|0;br=1}bj=a7+1|0;if((bj|0)<(br+S|0)){a7=bj;a6=br;bc=bq}else{Z=5655;break}}do{if((Z|0)==5655){Z=0;if((br|0)==0){if(!((a7|0)==5|(a7|0)==1)){break}}bc=a0+1|0;c[13898]=bc;a6=c[a1+(bc*40&-1)+36>>2]|0;L7756:do{if((a[a1+(bc*40&-1)|0]&1)!=0&(a6|0)>0){a5=c[10036]|0;bj=0;bs=0;bt=c[a1+(bc*40&-1)+32>>2]|0;while(1){if((a[bj+184456|0]|0)==(a[a5+(bj+bt|0)|0]|0)){bu=bt;bv=bs}else{if((bj|0)!=3){break L7756}bu=bt-1|0;bv=1}bw=bj+1|0;if((bw|0)<(bv+a6|0)){bj=bw;bs=bv;bt=bu}else{break}}if((bv|0)==0){if(!((bj|0)==2|(bj|0)==7)){break}}h[aU>>3]=1.0;h[aX>>3]=.5;c[13898]=a0+2;bd=a_;be=a$;break L7662}}while(0);a6=is(k)|0;bc=c[a6>>2]|0;if((bc|0)==1){bx=+(c[a6+8>>2]|0)}else if((bc|0)==2){bx=+h[a6+8>>3]}else if((bc|0)==3){bx=+uz(c[a6+8>>2]|0,0)}else{Z=5670;break L7660}if((c[aS>>2]|0)==3){uu(c[aT>>2]|0);c[aS>>2]=1}h[aU>>3]=bx;a6=c[13898]|0;L7777:do{if((c[8272]|0)>(a6|0)){bc=c[1054]|0;if((a[bc+(a6*40&-1)|0]&1)==0){break}a9=c[bc+(a6*40&-1)+36>>2]|0;bt=bc+(a6*40&-1)+32|0;bc=c[10036]|0;bs=0;while(1){if((bs|0)>=(a9|0)){break}if((a[bc+((c[bt>>2]|0)+bs|0)|0]|0)==(a[bs+148464|0]|0)){bs=bs+1|0}else{break L7777}}if((bs|0)!=1){break}c[13898]=a6+1;bt=is(j)|0;bc=c[bt>>2]|0;if((bc|0)==1){by=+(c[bt+8>>2]|0)}else if((bc|0)==2){by=+h[bt+8>>3]}else if((bc|0)==3){by=+uz(c[bt+8>>2]|0,0)}else{Z=5683;break L7660}if((c[aV>>2]|0)==3){uu(c[aW>>2]|0);c[aV>>2]=1}h[aX>>3]=by;bd=a_;be=a$;break L7662}}while(0);h[aX>>3]=bx*.5;bd=a_;be=a$;break L7662}}while(0);if(!((S|0)>0&(a4^1))){Z=5835;break}a7=c[10036]|0;a6=0;bt=0;bc=a3;while(1){if((a[a6+104840|0]|0)==(a[a7+(a6+bc|0)|0]|0)){bz=bc;bA=bt}else{if((a6|0)!=2){break}bz=bc-1|0;bA=1}a9=a6+1|0;if((a9|0)<(bA+S|0)){a6=a9;bt=bA;bc=bz}else{Z=5694;break}}do{if((Z|0)==5694){Z=0;if((bA|0)==0){if(!((a6|0)==1|(a6|0)==6)){break}}c[aP>>2]=-270;bc=a0+1|0;c[13898]=bc;if((c[8272]|0)<=(bc|0)){bd=a_;be=a$;break L7662}if((a[a1+(bc*40&-1)|0]&1)==0){bd=a_;be=a$;break L7662}bt=c[a1+(bc*40&-1)+36>>2]|0;a7=a1+(bc*40&-1)+32|0;bc=c[10036]|0;a9=0;while(1){if((a9|0)>=(bt|0)){break}if((a[bc+((c[a7>>2]|0)+a9|0)|0]|0)==(a[a9+163312|0]|0)){a9=a9+1|0}else{bd=a_;be=a$;break L7662}}if((a9|0)!=2){bd=a_;be=a$;break L7662}c[13898]=a0+2;a7=is(g)|0;bc=c[a7>>2]|0;if((bc|0)==2){bB=+h[a7+8>>3]}else if((bc|0)==3){bB=+uz(c[a7+8>>2]|0,0)}else if((bc|0)==1){bB=+(c[a7+8>>2]|0)}else{Z=5706;break L7660}if((c[aQ>>2]|0)==3){uu(c[aR>>2]|0);c[aQ>>2]=1}c[aP>>2]=~~bB;bd=a_;be=a$;break L7662}}while(0);if(a4){Z=5835;break}L7824:do{if((S|0)>0){a6=c[10036]|0;a7=0;bc=0;bt=a3;while(1){if((a[a7+104240|0]|0)==(a[a6+(a7+bt|0)|0]|0)){bC=bt;bD=bc}else{if((a7|0)!=4){break L7824}bC=bt-1|0;bD=1}bj=a7+1|0;if((bj|0)<(bD+S|0)){a7=bj;bc=bD;bt=bC}else{break}}if((bD|0)==0){if(!((a7|0)==3|(a7|0)==8)){break}}c[aP>>2]=0;c[13898]=a0+1;bd=a_;be=a$;break L7662}}while(0);if(!((S|0)>0&(a4^1))){Z=5835;break}bt=c[10036]|0;bc=0;a6=0;a9=a3;while(1){if((a[bc+152064|0]|0)==(a[bt+(bc+a9|0)|0]|0)){bE=a9;bF=a6}else{if((bc|0)!=3){break}bE=a9-1|0;bF=1}bj=bc+1|0;if((bj|0)<(bF+S|0)){bc=bj;a6=bF;a9=bE}else{Z=5726;break}}do{if((Z|0)==5726){Z=0;if((bF|0)==0){if(!((bc|0)==6|(bc|0)==2)){break}}c[13898]=a0+1;dl(aO,4);bd=a_;be=a$;break L7662}}while(0);if(!((S|0)>0&(a4^1))){Z=5835;break}bc=c[10036]|0;a9=0;a6=0;bt=a3;while(1){if((a[a9+153128|0]|0)==(a[bc+(a9+bt|0)|0]|0)){bG=bt;bH=a6}else{if((a9|0)!=5){break}bG=bt-1|0;bH=1}bj=a9+1|0;if((bj|0)<(bH+S|0)){a9=bj;a6=bH;bt=bG}else{Z=5735;break}}do{if((Z|0)==5735){Z=0;if((bH|0)==0){if(!((a9|0)==4|(a9|0)==8)){break}}uE(aJ|0,0,28);c[13898]=a0+1;c[aK>>2]=4;c[aL>>2]=4;c[aM>>2]=4;c[aN>>2]=c[aJ>>2];c[aN+4>>2]=c[aJ+4>>2];c[aN+8>>2]=c[aJ+8>>2];c[aN+12>>2]=c[aJ+12>>2];c[aN+16>>2]=c[aJ+16>>2];c[aN+20>>2]=c[aJ+20>>2];c[aN+24>>2]=c[aJ+24>>2];bd=a_;be=a$;break L7662}}while(0);if(a4){Z=5835;break}L7864:do{if((S|0)>0){a9=c[10036]|0;bt=0;a6=0;bc=a3;while(1){if((a[bt+149696|0]|0)==(a[a9+(bt+bc|0)|0]|0)){bI=bc;bJ=a6}else{if((bt|0)!=1){break L7864}bI=bc-1|0;bJ=1}bj=bt+1|0;if((bj|0)<(bJ+S|0)){bt=bj;a6=bJ;bc=bI}else{break}}if((bJ|0)==0){if(!((bt|0)==0|(bt|0)==4)){break}}c[aI>>2]=0;a[aH]=1;c[13898]=a0+1;bd=a_;be=a$;break L7662}}while(0);if(!((S|0)>0&(a4^1))){Z=5835;break}bc=c[10036]|0;a6=0;a9=0;a7=a3;while(1){if((a[a6+179896|0]|0)==(a[bc+(a6+a7|0)|0]|0)){bK=a7;bL=a9}else{if((a6|0)!=1){Z=5756;break}bK=a7-1|0;bL=1}bj=a6+1|0;if((bj|0)<(bL+S|0)){a6=bj;a9=bL;a7=bK}else{Z=5754;break}}do{if((Z|0)==5754){Z=0;if((bL|0)!=0){break}if(!((a6|0)==0|(a6|0)==6)){Z=5756}}}while(0);L7887:do{if((Z|0)==5756){Z=0;if(a4){Z=5835;break L7662}L7890:do{if((S|0)>0){a6=c[10036]|0;a7=0;a9=0;bc=a3;while(1){if((a[a7+149304|0]|0)==(a[a6+(a7+bc|0)|0]|0)){bM=bc;bN=a9}else{if((a7|0)!=1){break L7890}bM=bc-1|0;bN=1}bj=a7+1|0;if((bj|0)<(bN+S|0)){a7=bj;a9=bN;bc=bM}else{break}}if((bN|0)!=0){break L7887}if((a7|0)==0|(a7|0)==6){break L7887}}}while(0);if(!((S|0)>0&(a4^1))){Z=5835;break L7662}bt=c[10036]|0;bc=0;a9=0;a6=a3;while(1){if((a[bc+101272|0]|0)==(a[bt+(bc+a6|0)|0]|0)){bO=a6;bP=a9}else{if((bc|0)!=2){break}bO=a6-1|0;bP=1}bs=bc+1|0;if((bs|0)<(bP+S|0)){bc=bs;a9=bP;a6=bO}else{Z=5772;break}}do{if((Z|0)==5772){Z=0;if((bP|0)==0){if(!((bc|0)==1|(bc|0)==5)){break}}c[aI>>2]=2;a[aH]=1;c[13898]=a0+1;bd=a_;be=a$;break L7662}}while(0);if(a4){Z=5835;break L7662}L7915:do{if((S|0)>0){bc=c[10036]|0;a6=0;a9=0;bt=a3;while(1){if((a[a6+100712|0]|0)==(a[bc+(a6+bt|0)|0]|0)){bQ=bt;bR=a9}else{if((a6|0)!=5){break L7915}bQ=bt-1|0;bR=1}bs=a6+1|0;if((bs|0)<(bR+S|0)){a6=bs;a9=bR;bt=bQ}else{break}}if((bR|0)==0){if(!((a6|0)==4|(a6|0)==11)){break}}a[aH]=0;c[13898]=a0+1;bd=a_;be=a$;break L7662}}while(0);if(!((S|0)>0&(a4^1))){Z=5835;break L7662}bt=c[10036]|0;a9=0;bc=0;a7=a3;while(1){if((a[a9+100040|0]|0)==(a[bt+(a9+a7|0)|0]|0)){bS=a7;bT=bc}else{if((a9|0)!=5){break}bS=a7-1|0;bT=1}bs=a9+1|0;if((bs|0)<(bT+S|0)){a9=bs;bc=bT;a7=bS}else{Z=5791;break}}do{if((Z|0)==5791){Z=0;if((bT|0)==0){if(!((a9|0)==4|(a9|0)==12)){break}}a[aG]=1;c[13898]=a0+1;bd=a_;be=a$;break L7662}}while(0);if(a4){Z=5835;break L7662}L7942:do{if((S|0)>0){a9=c[10036]|0;a7=0;bc=0;bt=a3;while(1){if((a[a7+99600|0]|0)==(a[a9+(a7+bt|0)|0]|0)){bU=bt;bV=bc}else{if((a7|0)!=7){break L7942}bU=bt-1|0;bV=1}bs=a7+1|0;if((bs|0)<(bV+S|0)){a7=bs;bc=bV;bt=bU}else{break}}if((bV|0)==0){if(!((a7|0)==6|(a7|0)==14)){break}}a[aG]=0;c[13898]=a0+1;bd=a_;be=a$;break L7662}}while(0);if(!((S|0)>0&(a4^1))){Z=5835;break L7662}bt=c[10036]|0;bc=0;a9=0;a6=a3;while(1){if((a[bc+175984|0]|0)==(a[bt+(bc+a6|0)|0]|0)){bW=a6;bX=a9}else{if((bc|0)!=1){Z=5835;break L7662}bW=a6-1|0;bX=1}bs=bc+1|0;if((bs|0)<(bX+S|0)){bc=bs;a9=bX;a6=bW}else{break}}if((bX|0)==0){if(!((bc|0)==4|(bc|0)==0)){Z=5835;break L7662}}bY=a0+1|0;c[13898]=bY;a6=(a[a1+(bY*40&-1)|0]&1)==0;if(a6){Z=5814}else{a9=a[(c[10036]|0)+(c[a1+(bY*40&-1)+32>>2]|0)|0]|0;if(!((a9<<24>>24|0)==39|(a9<<24>>24|0)==34)){Z=5814}}if((Z|0)==5814){Z=0;a9=c[10810]|0;if((a9|0)==0){Z=6274;break L7660}bt=c[8272]|0;bs=a1+(bY*40&-1)+36|0;bj=a1+(bY*40&-1)+32|0;a5=c[10036]|0;bw=a9;L7971:while(1){a9=c[bw+4>>2]|0;L7973:do{if(!((bt|0)<=(bY|0)|a6)){bZ=c[bs>>2]|0;b_=0;while(1){if((b_|0)>=(bZ|0)){break}if((a[a5+((c[bj>>2]|0)+b_|0)|0]|0)==(a[a9+b_|0]|0)){b_=b_+1|0}else{break L7973}}if((a[a9+b_|0]|0)==0){break L7971}}}while(0);a9=c[bw>>2]|0;if((a9|0)==0){Z=6272;break L7660}else{bw=a9}}if((a[bw+8|0]&1)!=0){Z=6271;break L7660}if((c[bw+16>>2]|0)!=3){Z=6273;break L7660}}uu(c[aD>>2]|0);c[aD>>2]=0;bj=c[13898]|0;L7983:do{if((bj|0)<(c[8272]|0)){a5=c[1054]|0;L7985:do{if((a[a5+(bj*40&-1)|0]&1)!=0){bs=c[a5+(bj*40&-1)+36>>2]|0;a6=a5+(bj*40&-1)+32|0;bt=c[10036]|0;bc=0;while(1){if((bc|0)>=(bs|0)){break}if((a[bt+((c[a6>>2]|0)+bc|0)|0]|0)==(a[bc+103664|0]|0)){bc=bc+1|0}else{break L7985}}if((bc|0)==1){b$=0;break L7983}}}while(0);a[14176]=1;is(f);a[14176]=0;if((c[aE>>2]|0)==3){b$=c[aF>>2]|0;break}else{c[13898]=bj;b$=0;break}}else{b$=0}}while(0);c[aD>>2]=b$;bd=a_;be=a$;break L7662}}while(0);c[aI>>2]=1;a[aH]=1;c[13898]=a0+1;bd=a_;be=a$}else{Z=5835}}while(0);L7997:do{if((Z|0)==5835){Z=0;bj=c[8272]|0;bw=(bj|0)>(a0|0);L7999:do{if(bw){if(a4){break}a5=c[10036]|0;a6=0;while(1){if((a6|0)>=(S|0)){Z=5840;break}if((a[a5+(a3+a6|0)|0]|0)==(a[a6+97960|0]|0)){a6=a6+1|0}else{break}}do{if((Z|0)==5840){Z=0;if((a6|0)!=6){break}b0=a0+1|0;c[13898]=b0;if((b0|0)>=(bj|0)){b1=b0;Z=6280;break L7660}L8009:do{if((a[a1+(b0*40&-1)|0]&1)!=0){bt=c[a1+(b0*40&-1)+36>>2]|0;bs=a1+(b0*40&-1)+32|0;b_=0;while(1){if((b_|0)>=(bt|0)){break}if((a[a5+((c[bs>>2]|0)+b_|0)|0]|0)==(a[b_+103664|0]|0)){b_=b_+1|0}else{break L8009}}if((b_|0)==1){b1=b0;Z=6277;break L7660}}}while(0);a[14176]=1;is(e);a[14176]=0;if((c[R>>2]|0)!=3){Z=5848;break L7660}bs=c[Q>>2]|0;if((bs|0)==0){Z=5850;break L7660}uF(U|0,bs|0,51);uu(bs);bs=a8(U|0,37)|0;do{if((bs|0)==0){b2=0}else{bt=bs+1|0;L8020:do{if((bt|0)==0){b3=0}else{bc=bt;while(1){a9=a[bc]|0;if(!((a9<<24>>24|0)==32|(a9<<24>>24|0)==45|(a9<<24>>24|0)==43|(a9<<24>>24|0)==35)){b3=bc;break L8020}a9=bc+1|0;if((a9|0)==0){b3=0;break}else{bc=a9}}}}while(0);while(1){b4=a[b3]|0;if(!(((b4&255)-48|0)>>>0<10|b4<<24>>24==46)){break}b3=b3+1|0}if((b4-102&255)<2){b2=1;break}b2=b4<<24>>24==101&1}}while(0);a[_]=b2;bd=a_;be=a$;break L7997}}while(0);if(!bw){Z=5867;break}if(a4){break}a5=c[10036]|0;a6=0;while(1){if((a6|0)>=(S|0)){break}if((a[a5+(a3+a6|0)|0]|0)==(a[a6+143040|0]|0)){a6=a6+1|0}else{Z=5867;break L7999}}if((a6|0)==2){Z=5875}else{Z=5867}}else{Z=5867}}while(0);L8037:do{if((Z|0)==5867){Z=0;L8039:do{if((S|0)>0&(a4^1)){a5=c[10036]|0;bs=0;bt=0;b_=a3;while(1){if((a[bs+142856|0]|0)==(a[a5+(bs+b_|0)|0]|0)){b5=b_;b6=bt}else{if((bs|0)!=4){break}b5=b_-1|0;b6=1}bc=bs+1|0;if((bc|0)<(b6+S|0)){bs=bc;bt=b6;b_=b5}else{Z=5873;break}}if((Z|0)==5873){Z=0;if((b6|0)!=0){Z=5875;break L8037}if((bs|0)==3|(bs|0)==9){Z=5875;break L8037}}if(!((S|0)>0&(a4^1))){break}b_=c[10036]|0;bt=0;a5=0;bc=a3;while(1){if((a[bt+96704|0]|0)==(a[b_+(bt+bc|0)|0]|0)){b7=bc;b8=a5}else{if((bt|0)!=2){break L8039}b7=bc-1|0;b8=1}a9=bt+1|0;if((a9|0)<(b8+S|0)){bt=a9;a5=b8;bc=b7}else{break}}if((b8|0)==0){if(!((bt|0)==8|(bt|0)==1)){break}}c[13898]=a0+1;if((a[T]&1)==0){bc=c[aw>>2]|0;if((bc|0)!=0){a5=bc;while(1){bc=c[a5+16>>2]|0;b_=c[a5+8>>2]|0;if((b_|0)!=0){uu(b_)}uu(a5);if((bc|0)==0){break}else{a5=bc}}}c[aw>>2]=0}c[ax>>2]=1;bd=a_;be=a$;break L7997}}while(0);if(!bw){bd=a_;be=a$;break L7997}if(a4){break}a6=c[10036]|0;a5=0;while(1){if((a5|0)>=(S|0)){Z=5896;break}if((a[a6+(a3+a5|0)|0]|0)==(a[a5+186440|0]|0)){a5=a5+1|0}else{break}}do{if((Z|0)==5896){Z=0;if((a5|0)!=3){break}c[13898]=a0+1;a[T]=1;bd=a_;be=a$;break L7997}}while(0);if(!bw){bd=a_;be=a$;break L7997}if(a4){break}a5=c[10036]|0;a6=0;while(1){if((a6|0)>=(S|0)){Z=5903;break}if((a[a5+(a3+a6|0)|0]|0)==(a[a6+103664|0]|0)){a6=a6+1|0}else{break}}if((Z|0)==5903){Z=0;if((a6|0)==1){bd=a_;be=a$;break L7997}}if(a4){break}a5=c[10036]|0;bt=0;while(1){if((bt|0)>=(S|0)){break}if((a[a5+(a3+bt|0)|0]|0)==(a[bt+199040|0]|0)){bt=bt+1|0}else{break L8037}}if((bt|0)!=1){break}a6=a0+1|0;c[13898]=a6;L8096:do{if((bj|0)>(a6|0)){if((a[a1+(a6*40&-1)|0]&1)==0){break}bc=c[a1+(a6*40&-1)+36>>2]|0;b_=a1+(a6*40&-1)+32|0;bs=0;while(1){if((bs|0)>=(bc|0)){break}if((a[a5+((c[b_>>2]|0)+bs|0)|0]|0)==(a[bs+131272|0]|0)){bs=bs+1|0}else{break L8096}}if((bs|0)!=1){break}c[13898]=a0+2;bd=a_;be=a$;break L7997}}while(0);do{if((a[T]&1)==0){a5=c[6074]|0;if((a5|0)!=0){if((c[a5+32>>2]|0)!=0){b9=a6;ca=bj;break}}a5=c[$>>2]|0;if((a5|0)==0){cb=a6;cc=bj}else{bt=a5;while(1){a5=c[bt+16>>2]|0;b_=c[bt+8>>2]|0;if((b_|0)!=0){uu(b_)}uu(bt);if((a5|0)==0){break}else{bt=a5}}cb=c[13898]|0;cc=c[8272]|0}c[$>>2]=0;b9=cb;ca=cc}else{b9=a6;ca=bj}}while(0);L8119:do{if((b9|0)<(ca|0)){a6=b9;bt=ca;bs=c[1054]|0;while(1){a5=(a[bs+(a6*40&-1)|0]&1)==0;L8123:do{if(!a5){b_=c[bs+(a6*40&-1)+36>>2]|0;bc=bs+(a6*40&-1)+32|0;a9=c[10036]|0;a7=0;while(1){if((a7|0)>=(b_|0)){break}if((a[a9+((c[bc>>2]|0)+a7|0)|0]|0)==(a[a7+103664|0]|0)){a7=a7+1|0}else{break L8123}}if((a7|0)==1){cd=a6;ce=bt;break L8119}}}while(0);L8130:do{if((a6|0)<(bt|0)){L8132:do{if(!a5){bc=c[bs+(a6*40&-1)+36>>2]|0;a9=bs+(a6*40&-1)+32|0;b_=c[10036]|0;bZ=0;while(1){if((bZ|0)>=(bc|0)){break}if((a[b_+((c[a9>>2]|0)+bZ|0)|0]|0)==(a[bZ+103664|0]|0)){bZ=bZ+1|0}else{break L8132}}if((bZ|0)==1){cf=0;Z=5952;break L8130}}}while(0);a[14176]=1;is(o);a[14176]=0;if((c[aa>>2]|0)!=3){c[13898]=a6;cf=0;Z=5952;break}a7=c[ab>>2]|0;if((a7|0)==0){cf=0;Z=5952;break}if((c[ac>>2]|0)!=1){cg=a7;Z=5977;break}a9=c[13898]|0;if((c[8272]|0)<=(a9|0)){cf=a7;Z=5952;break}b_=c[1054]|0;if((a[b_+(a9*40&-1)|0]&1)==0){cf=a7;Z=5952;break}bc=c[b_+(a9*40&-1)+36>>2]|0;ch=b_+(a9*40&-1)+32|0;a9=c[10036]|0;b_=0;while(1){if((b_|0)>=(bc|0)){Z=5947;break}if((a[a9+((c[ch>>2]|0)+b_|0)|0]|0)==(a[b_+148464|0]|0)){b_=b_+1|0}else{ci=0;Z=5948;break}}if((Z|0)==5947){Z=0;if((b_|0)!=1){ci=0;Z=5948}}if((Z|0)==5948){while(1){Z=0;if((ci|0)>=(bc|0)){break}if((a[a9+((c[ch>>2]|0)+ci|0)|0]|0)==(a[ci+131272|0]|0)){ci=ci+1|0;Z=5948}else{cf=a7;Z=5952;break L8130}}if((ci|0)!=1){cf=a7;Z=5952;break}}c[13898]=a6;uu(a7);cf=0;Z=5952}else{cf=0;Z=5952}}while(0);L8157:do{if((Z|0)==5952){Z=0;if((c[ac>>2]|0)!=1){cg=cf;Z=5977;break}a5=c[13898]|0;ch=c[1054]|0;a9=(a[ch+(a5*40&-1)|0]&1)==0;if(a9){Z=5955}else{bc=c[10036]|0;b_=a[bc+(c[ch+(a5*40&-1)+32>>2]|0)|0]|0;if((b_<<24>>24|0)==39|(b_<<24>>24|0)==34){cj=bc}else{Z=5955}}if((Z|0)==5955){Z=0;bc=c[10810]|0;if((bc|0)==0){cg=cf;Z=5977;break}b_=ch+(a5*40&-1)+36|0;ck=ch+(a5*40&-1)+32|0;cl=c[10036]|0;cm=(c[8272]|0)<=(a5|0)|a9;cn=bc;L8165:while(1){bc=c[cn+4>>2]|0;L8167:do{if(!cm){co=c[b_>>2]|0;cp=0;while(1){if((cp|0)>=(co|0)){break}if((a[cl+((c[ck>>2]|0)+cp|0)|0]|0)==(a[bc+cp|0]|0)){cp=cp+1|0}else{break L8167}}if((a[bc+cp|0]|0)==0){break L8165}}}while(0);bc=c[cn>>2]|0;if((bc|0)==0){cg=cf;Z=5977;break L8157}else{cn=bc}}if((a[cn+8|0]&1)!=0){cg=cf;Z=5977;break}if((c[cn+16>>2]|0)==3){cj=cl}else{cg=cf;Z=5977;break}}L8177:do{if((a5|0)<(c[8272]|0)){L8179:do{if(!a9){ck=c[ch+(a5*40&-1)+36>>2]|0;b_=ch+(a5*40&-1)+32|0;cm=0;while(1){if((cm|0)>=(ck|0)){break}if((a[cj+((c[b_>>2]|0)+cm|0)|0]|0)==(a[cm+103664|0]|0)){cm=cm+1|0}else{break L8179}}if((cm|0)==1){cq=0;break L8177}}}while(0);a[14176]=1;is(n);a[14176]=0;if((c[ad>>2]|0)==3){cq=c[ae>>2]|0;break}else{c[13898]=a5;cq=0;break}}else{cq=0}}while(0);if((t1(cq,af,p,q)|0)==0){cr=0.0}else{cs=+t2(p);cr=cs+ +h[q>>3]}uu(cq);ct=cr;cu=cf}}while(0);do{if((Z|0)==5977){Z=0;a5=is(m)|0;ch=c[a5>>2]|0;if((ch|0)==1){cv=+(c[a5+8>>2]|0)}else if((ch|0)==2){cv=+h[a5+8>>3]}else if((ch|0)==3){cv=+uz(c[a5+8>>2]|0,0)}else{Z=5981;break L7660}if((c[ag>>2]|0)!=3){ct=cv;cu=cg;break}uu(c[ah>>2]|0);c[ag>>2]=1;ct=cv;cu=cg}}while(0);a5=c[13898]|0;L8202:do{if((a5|0)<(c[8272]|0)){ch=c[1054]|0;L8204:do{if((a[ch+(a5*40&-1)|0]&1)!=0){a9=c[ch+(a5*40&-1)+36>>2]|0;cl=ch+(a5*40&-1)+32|0;cn=c[10036]|0;b_=0;while(1){if((b_|0)>=(a9|0)){Z=5989;break}if((a[cn+((c[cl>>2]|0)+b_|0)|0]|0)==(a[b_+103664|0]|0)){b_=b_+1|0}else{cw=0;break}}if((Z|0)==5989){Z=0;if((b_|0)==1){cx=0;break L8202}else{cw=0}}while(1){if((cw|0)>=(a9|0)){Z=5992;break}if((a[cn+((c[cl>>2]|0)+cw|0)|0]|0)==(a[cw+148464|0]|0)){cw=cw+1|0}else{cy=0;break}}if((Z|0)==5992){Z=0;if((cw|0)==1){cx=0;break L8202}else{cy=0}}while(1){if((cy|0)>=(a9|0)){break}if((a[cn+((c[cl>>2]|0)+cy|0)|0]|0)==(a[cy+131272|0]|0)){cy=cy+1|0}else{break L8204}}if((cy|0)==1){cx=0;break L8202}}}while(0);ch=is(l)|0;cl=c[ch>>2]|0;if((cl|0)==1){cz=+(c[ch+8>>2]|0)}else if((cl|0)==2){cz=+h[ch+8>>3]}else if((cl|0)==3){cz=+uz(c[ch+8>>2]|0,0)}else{Z=6e3;break L7660}if((c[ai>>2]|0)==3){uu(c[aj>>2]|0);c[ai>>2]=1}cx=~~cz}else{cx=0}}while(0);dp(b,cu,ct,cx);uu(cu);a5=c[13898]|0;ch=c[8272]|0;if((a5|0)>=(ch|0)){cd=a5;ce=ch;break L8119}cl=c[1054]|0;if((a[cl+(a5*40&-1)|0]&1)==0){cd=a5;ce=ch;break L8119}cn=c[cl+(a5*40&-1)+36>>2]|0;a9=cl+(a5*40&-1)+32|0;b_=c[10036]|0;ck=0;while(1){if((ck|0)>=(cn|0)){Z=6009;break}if((a[b_+((c[a9>>2]|0)+ck|0)|0]|0)==(a[ck+103664|0]|0)){ck=ck+1|0}else{cA=0;break}}if((Z|0)==6009){Z=0;if((ck|0)==1){cd=a5;ce=ch;break L8119}else{cA=0}}while(1){if((cA|0)>=(cn|0)){break}if((a[b_+((c[a9>>2]|0)+cA|0)|0]|0)==(a[cA+148464|0]|0)){cA=cA+1|0}else{cd=a5;ce=ch;break L8119}}if((cA|0)!=1){cd=a5;ce=ch;break L8119}a9=a5+1|0;c[13898]=a9;if((a9|0)<(ch|0)){a6=a9;bt=ch;bs=cl}else{cd=a9;ce=ch;break}}}else{cd=b9;ce=ca}}while(0);if((cd|0)>=(ce|0)){Z=6023;break L7660}bs=c[1054]|0;if((a[bs+(cd*40&-1)|0]&1)==0){Z=6023;break L7660}bt=c[bs+(cd*40&-1)+36>>2]|0;a6=bs+(cd*40&-1)+32|0;bs=c[10036]|0;a9=0;while(1){if((a9|0)>=(bt|0)){Z=6019;break}if((a[bs+((c[a6>>2]|0)+a9|0)|0]|0)==(a[a9+103664|0]|0)){a9=a9+1|0}else{cB=0;break}}if((Z|0)==6019){Z=0;if((a9|0)==1){Z=6023;break L7660}else{cB=0}}while(1){if((cB|0)>=(bt|0)){break}if((a[bs+((c[a6>>2]|0)+cB|0)|0]|0)==(a[cB+131272|0]|0)){cB=cB+1|0}else{Z=6023;break L7660}}if((cB|0)!=1){Z=6023;break L7660}c[13898]=cd+1;bd=a_;be=a$;break L7997}}while(0);if((Z|0)==5875){Z=0;hI(aB,aC);bd=a_;be=a$;break}L8258:do{if((c[ac>>2]|0)==1){if(a4){Z=6033}else{bj=c[10036]|0;bw=a[bj+a3|0]|0;if((bw<<24>>24|0)==39|(bw<<24>>24|0)==34){cC=bj;Z=6043}else{Z=6033}}if((Z|0)==6033){Z=0;bj=c[10810]|0;if((bj|0)==0){Z=6053;break}bw=c[10036]|0;a6=bj;L8265:while(1){bj=c[a6+4>>2]|0;L8267:do{if(!a4){bs=0;while(1){if((bs|0)>=(S|0)){break}if((a[bw+(a3+bs|0)|0]|0)==(a[bj+bs|0]|0)){bs=bs+1|0}else{break L8267}}if((a[bj+bs|0]|0)==0){break L8265}}}while(0);bj=c[a6>>2]|0;if((bj|0)==0){Z=6053;break L8258}else{a6=bj}}if((a[a6+8|0]&1)!=0){Z=6053;break}if((c[a6+16>>2]|0)!=3){Z=6053;break}if(a4){Z=6047}else{cC=bw;Z=6043}}L8276:do{if((Z|0)==6043){Z=0;bj=0;while(1){if((bj|0)>=(S|0)){break}if((a[cC+(a3+bj|0)|0]|0)==(a[bj+103664|0]|0)){bj=bj+1|0}else{Z=6047;break L8276}}if((bj|0)==1){cD=0}else{Z=6047}}}while(0);do{if((Z|0)==6047){Z=0;a[14176]=1;is(x);a[14176]=0;if((c[ak>>2]|0)==3){cD=c[al>>2]|0;break}else{c[13898]=a0;cD=0;break}}}while(0);if((t1(cD,af,y,z)|0)==0){cE=0.0}else{cs=+t2(y);cE=cs+ +h[z>>3]}uu(cD);cF=cE}else{Z=6053}}while(0);do{if((Z|0)==6053){Z=0;bw=is(w)|0;a6=c[bw>>2]|0;if((a6|0)==1){cG=+(c[bw+8>>2]|0)}else if((a6|0)==2){cG=+h[bw+8>>3]}else if((a6|0)==3){cG=+uz(c[bw+8>>2]|0,0)}else{Z=6057;break L7660}if((c[am>>2]|0)!=3){cF=cG;break}uu(c[an>>2]|0);c[am>>2]=1;cF=cG}}while(0);bw=c[13898]|0;a6=c[8272]|0;L8300:do{if((a6|0)>(bw|0)){ch=c[1054]|0;if((a[ch+(bw*40&-1)|0]&1)==0){cH=-8.988465674311579e+307;cI=cF;cJ=8.988465674311579e+307;break}cl=c[ch+(bw*40&-1)+36>>2]|0;a5=ch+(bw*40&-1)+32|0;bt=c[10036]|0;a9=0;while(1){if((a9|0)>=(cl|0)){break}if((a[bt+((c[a5>>2]|0)+a9|0)|0]|0)==(a[a9+148464|0]|0)){a9=a9+1|0}else{cH=-8.988465674311579e+307;cI=cF;cJ=8.988465674311579e+307;break L8300}}if((a9|0)!=1){cH=-8.988465674311579e+307;cI=cF;cJ=8.988465674311579e+307;break}cK=bw+1|0;c[13898]=cK;L8308:do{if((c[ac>>2]|0)==1){a5=(a[ch+(cK*40&-1)|0]&1)==0;if(a5){Z=6069}else{cl=a[bt+(c[ch+(cK*40&-1)+32>>2]|0)|0]|0;if(!((cl<<24>>24|0)==39|(cl<<24>>24|0)==34)){Z=6069}}if((Z|0)==6069){Z=0;cl=c[10810]|0;if((cl|0)==0){Z=6091;break}b_=ch+(cK*40&-1)+36|0;cn=ch+(cK*40&-1)+32|0;ck=(a6|0)<=(cK|0)|a5;cp=cl;L8315:while(1){cl=c[cp+4>>2]|0;L8317:do{if(!ck){a7=c[b_>>2]|0;bc=0;while(1){if((bc|0)>=(a7|0)){break}if((a[bt+((c[cn>>2]|0)+bc|0)|0]|0)==(a[cl+bc|0]|0)){bc=bc+1|0}else{break L8317}}if((a[cl+bc|0]|0)==0){break L8315}}}while(0);cl=c[cp>>2]|0;if((cl|0)==0){Z=6091;break L8308}else{cp=cl}}if((a[cp+8|0]&1)!=0){Z=6091;break}if((c[cp+16>>2]|0)!=3){Z=6091;break}}L8327:do{if((cK|0)<(a6|0)){L8329:do{if(!a5){cn=c[ch+(cK*40&-1)+36>>2]|0;b_=ch+(cK*40&-1)+32|0;ck=0;while(1){if((ck|0)>=(cn|0)){break}if((a[bt+((c[b_>>2]|0)+ck|0)|0]|0)==(a[ck+103664|0]|0)){ck=ck+1|0}else{break L8329}}if((ck|0)==1){cL=0;break L8327}}}while(0);a[14176]=1;is(u);a[14176]=0;if((c[ao>>2]|0)==3){cL=c[ap>>2]|0;break}else{c[13898]=cK;cL=0;break}}else{cL=0}}while(0);if((t1(cL,af,A,B)|0)==0){cM=0.0}else{cs=+t2(A);cM=cs+ +h[B>>3]}uu(cL);cN=cM}else{Z=6091}}while(0);do{if((Z|0)==6091){Z=0;bt=is(t)|0;ch=c[bt>>2]|0;if((ch|0)==1){cO=+(c[bt+8>>2]|0)}else if((ch|0)==2){cO=+h[bt+8>>3]}else if((ch|0)==3){cO=+uz(c[bt+8>>2]|0,0)}else{Z=6095;break L7660}if((c[aq>>2]|0)!=3){cN=cO;break}uu(c[ar>>2]|0);c[aq>>2]=1;cN=cO}}while(0);bt=c[13898]|0;ch=c[8272]|0;L8352:do{if((ch|0)>(bt|0)){a9=c[1054]|0;if((a[a9+(bt*40&-1)|0]&1)==0){cP=8.988465674311579e+307;break}a5=c[a9+(bt*40&-1)+36>>2]|0;cp=a9+(bt*40&-1)+32|0;b_=c[10036]|0;cn=0;while(1){if((cn|0)>=(a5|0)){break}if((a[b_+((c[cp>>2]|0)+cn|0)|0]|0)==(a[cn+148464|0]|0)){cn=cn+1|0}else{cP=8.988465674311579e+307;break L8352}}if((cn|0)!=1){cP=8.988465674311579e+307;break}cp=bt+1|0;c[13898]=cp;L8360:do{if((c[ac>>2]|0)==1){a5=(a[a9+(cp*40&-1)|0]&1)==0;if(a5){Z=6107}else{bc=a[b_+(c[a9+(cp*40&-1)+32>>2]|0)|0]|0;if(!((bc<<24>>24|0)==39|(bc<<24>>24|0)==34)){Z=6107}}if((Z|0)==6107){Z=0;bc=c[10810]|0;if((bc|0)==0){break}bj=a9+(cp*40&-1)+36|0;cl=a9+(cp*40&-1)+32|0;bs=(ch|0)<=(cp|0)|a5;a7=bc;L8367:while(1){bc=c[a7+4>>2]|0;L8369:do{if(!bs){bZ=c[bj>>2]|0;co=0;while(1){if((co|0)>=(bZ|0)){break}if((a[b_+((c[cl>>2]|0)+co|0)|0]|0)==(a[bc+co|0]|0)){co=co+1|0}else{break L8369}}if((a[bc+co|0]|0)==0){break L8367}}}while(0);bc=c[a7>>2]|0;if((bc|0)==0){break L8360}else{a7=bc}}if((a[a7+8|0]&1)!=0){break}if((c[a7+16>>2]|0)!=3){break}}L8379:do{if((cp|0)<(ch|0)){L8381:do{if(!a5){cl=c[a9+(cp*40&-1)+36>>2]|0;bj=a9+(cp*40&-1)+32|0;bs=0;while(1){if((bs|0)>=(cl|0)){break}if((a[b_+((c[bj>>2]|0)+bs|0)|0]|0)==(a[bs+103664|0]|0)){bs=bs+1|0}else{break L8381}}if((bs|0)==1){cQ=0;break L8379}}}while(0);a[14176]=1;is(s);a[14176]=0;if((c[as>>2]|0)==3){cQ=c[at>>2]|0;break}else{c[13898]=cp;cQ=0;break}}else{cQ=0}}while(0);if((t1(cQ,af,C,D)|0)==0){cR=0.0}else{cs=+t2(C);cR=cs+ +h[D>>3]}uu(cQ);cP=cR;break L8352}}while(0);cp=is(r)|0;b_=c[cp>>2]|0;if((b_|0)==1){cS=+(c[cp+8>>2]|0)}else if((b_|0)==2){cS=+h[cp+8>>3]}else if((b_|0)==3){cS=+uz(c[cp+8>>2]|0,0)}else{Z=6133;break L7660}if((c[au>>2]|0)!=3){cP=cS;break}uu(c[av>>2]|0);c[au>>2]=1;cP=cS}else{cP=8.988465674311579e+307}}while(0);if(!(cF>=cP|cN>0.0)){Z=6137;break L7660}ch=cF>cP;if(!(cN<0.0|ch^1)){Z=6139;break L7660}if(!ch){cH=cF;cI=cN;cJ=cP;break}cH=cF+cN*+O(+((cP*1.01-cF)/cN));cI=-0.0-cN;cJ=cF}else{cH=-8.988465674311579e+307;cI=cF;cJ=8.988465674311579e+307}}while(0);if((a[T]&1)==0){a6=c[aw>>2]|0;if((a6|0)!=0){bw=a6;while(1){a6=c[bw+16>>2]|0;ch=c[bw+8>>2]|0;if((ch|0)!=0){uu(ch)}uu(bw);if((a6|0)==0){break}else{bw=a6}}}c[aw>>2]=0}c[ax>>2]=2;h[ay>>3]=cH;h[az>>3]=cI;h[aA>>3]=cJ;bd=a_;be=a$}}while(0);cT=c[13898]|0;if((cT|0)>=(c[8272]|0)){Z=6155;break}a3=c[1054]|0;S=a[a3+(cT*40&-1)|0]|0;if((S&1)==0){a_=bd;a$=be;a0=cT;a1=a3;a2=S;continue}a4=c[a3+(cT*40&-1)+36>>2]|0;bw=a3+(cT*40&-1)+32|0;a6=c[10036]|0;ch=0;while(1){if((ch|0)>=(a4|0)){break}if((a[a6+((c[bw>>2]|0)+ch|0)|0]|0)==(a[ch+103664|0]|0)){ch=ch+1|0}else{a_=bd;a$=be;a0=cT;a1=a3;a2=S;continue L7660}}if((ch|0)==1){Z=6155;break}else{a_=bd;a$=be;a0=cT;a1=a3;a2=S}}if((Z|0)==5670){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Z|0)==5706){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Z|0)==6271){uf(bY,98544,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Z|0)==6272){uf(bY,98544,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Z|0)==6273){uf(bY,98544,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Z|0)==6274){uf(bY,98544,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Z|0)==6277){uf(b1,97288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Z|0)==6280){uf(b1,97288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Z|0)==6e3){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Z|0)==6155){a2=c[aZ>>2]|0;if((a2&3|0)!=0|bd){P=cT;break}c[aZ>>2]=a2|1;if(be){P=cT;break}if((b-1|0)>>>0>=3){P=cT;break}c[aZ>>2]=a2|5;P=cT;break}else if((Z|0)==6023){a2=c[$>>2]|0;if((a2|0)==0){cU=cd;c[$>>2]=0;uf(cU,91952,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{cV=a2}while(1){a2=c[cV+16>>2]|0;a1=c[cV+8>>2]|0;if((a1|0)!=0){uu(a1)}uu(cV);if((a2|0)==0){break}else{cV=a2}}cU=c[13898]|0;c[$>>2]=0;uf(cU,91952,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Z|0)==5848){c[13898]=b0;b1=b0;uf(b1,97288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Z|0)==5850){b1=c[13898]|0;uf(b1,97288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Z|0)==5981){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Z|0)==5683){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Z|0)==6095){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Z|0)==6057){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Z|0)==6133){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Z|0)==6137){uf(cK,93560,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Z|0)==6139){uf(cK,92744,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);cK=c[1054]|0;b1=c[cK+(P*40&-1)+36>>2]|0;b0=c[cK+(P*40&-1)+32>>2]|0;L8460:do{if((a[cK+(P*40&-1)|0]&1)==0){cW=P}else{if((b1|0)>0){cU=c[10036]|0;cV=0;cd=0;cT=b0;while(1){be=a[F+cV|0]|0;if(be<<24>>24==(a[cU+(cV+cT|0)|0]|0)){cX=cT;cY=cd}else{if(be<<24>>24!=36){cW=P;break L8460}cX=cT-1|0;cY=1}cZ=cV+1|0;if((cZ|0)<(cY+b1|0)){cV=cZ;cd=cY;cT=cX}else{break}}if((cY|0)==0){c_=cZ;Z=6167}}else{c_=0;Z=6167}if((Z|0)==6167){cT=a[F+c_|0]|0;if(!((cT<<24>>24|0)==36|(cT<<24>>24|0)==0)){cW=P;break}}cT=64916+(b*688&-1)|0;c[cT>>2]=c[cT>>2]&-4;cT=P+1|0;c[13898]=cT;cW=cT}}while(0);a[K]=a[95856]|0;a[K+1|0]=a[95857|0]|0;a[K+2|0]=a[95858|0]|0;a[K+3|0]=a[95859|0]|0;a[K+4|0]=a[95860|0]|0;a[K+5|0]=a[95861|0]|0;a[K+6|0]=a[95862|0]|0;P=c[cK+(cW*40&-1)+36>>2]|0;c_=c[cK+(cW*40&-1)+32>>2]|0;cZ=a[cK+(cW*40&-1)|0]|0;L8475:do{if((cZ&1)==0){c$=cW;c0=cK;c1=P;c2=c_;c3=cZ}else{if((P|0)>0){cY=c[10036]|0;cX=0;b1=0;b0=c_;while(1){cT=a[F+(cX+2|0)|0]|0;if(cT<<24>>24==(a[cY+(cX+b0|0)|0]|0)){c4=b0;c5=b1}else{if(cT<<24>>24!=36){c$=cW;c0=cK;c1=P;c2=c_;c3=cZ;break L8475}c4=b0-1|0;c5=1}c6=cX+1|0;if((c6|0)<(c5+P|0)){cX=c6;b1=c5;b0=c4}else{break}}if((c5|0)==0){c7=c6;Z=6177}}else{c7=0;Z=6177}if((Z|0)==6177){b0=a[F+(c7+2|0)|0]|0;if(!((b0<<24>>24|0)==36|(b0<<24>>24|0)==0)){c$=cW;c0=cK;c1=P;c2=c_;c3=cZ;break}}if((a[64976+(b*688&-1)|0]&1)==0){b0=64944+(b*688&-1)|0;b1=c[b0>>2]|0;if((b1|0)==0){c8=cW;c9=cK}else{cX=b1;while(1){b1=c[cX+16>>2]|0;cY=c[cX+8>>2]|0;if((cY|0)!=0){uu(cY)}uu(cX);if((b1|0)==0){break}else{cX=b1}}c8=c[13898]|0;c9=c[1054]|0}c[b0>>2]=0;da=c8;db=c9}else{da=cW;db=cK}c[64920+(b*688&-1)>>2]=4;cX=da+1|0;c[13898]=cX;c$=cX;c0=db;c1=c[db+(cX*40&-1)+36>>2]|0;c2=c[db+(cX*40&-1)+32>>2]|0;c3=a[db+(cX*40&-1)|0]|0}}while(0);L8501:do{if((c3&1)==0){dc=c$}else{if((c1|0)>0){db=c[10036]|0;da=0;cK=0;cW=c2;while(1){c9=a[F+da|0]|0;if(c9<<24>>24==(a[db+(da+cW|0)|0]|0)){dd=cW;de=cK}else{if(c9<<24>>24!=36){dc=c$;break L8501}dd=cW-1|0;de=1}df=da+1|0;if((df|0)<(de+c1|0)){da=df;cK=de;cW=dd}else{break}}if((de|0)==0){dg=df;Z=6194}}else{dg=0;Z=6194}if((Z|0)==6194){cW=a[F+dg|0]|0;if(!((cW<<24>>24|0)==36|(cW<<24>>24|0)==0)){dc=c$;break}}c[64920+(b*688&-1)>>2]=1;cW=c$+1|0;c[13898]=cW;dc=cW}}while(0);a[K]=a[95384]|0;a[K+1|0]=a[95385|0]|0;a[K+2|0]=a[95386|0]|0;a[K+3|0]=a[95387|0]|0;a[K+4|0]=a[95388|0]|0;a[K+5|0]=a[95389|0]|0;a[K+6|0]=a[95390|0]|0;K=c[c0+(dc*40&-1)+36>>2]|0;c$=c[c0+(dc*40&-1)+32>>2]|0;dg=a[c0+(dc*40&-1)|0]|0;L8516:do{if((dg&1)==0){dh=dc;di=K;dj=c$;dk=dg}else{if((K|0)>0){df=c[10036]|0;de=0;dd=0;c1=c$;while(1){c2=a[F+(de+2|0)|0]|0;if(c2<<24>>24==(a[df+(de+c1|0)|0]|0)){dm=c1;dn=dd}else{if(c2<<24>>24!=36){dh=dc;di=K;dj=c$;dk=dg;break L8516}dm=c1-1|0;dn=1}dq=de+1|0;if((dq|0)<(dn+K|0)){de=dq;dd=dn;c1=dm}else{break}}if((dn|0)==0){dr=dq;Z=6204}}else{dr=0;Z=6204}if((Z|0)==6204){c1=a[F+(dr+2|0)|0]|0;if(!((c1<<24>>24|0)==36|(c1<<24>>24|0)==0)){dh=dc;di=K;dj=c$;dk=dg;break}}if((a[64976+(b*688&-1)|0]&1)==0){c1=64944+(b*688&-1)|0;dd=c[c1>>2]|0;if((dd|0)==0){ds=dc;dt=c0}else{de=dd;while(1){dd=c[de+16>>2]|0;df=c[de+8>>2]|0;if((df|0)!=0){uu(df)}uu(de);if((dd|0)==0){break}else{de=dd}}ds=c[13898]|0;dt=c[1054]|0}c[c1>>2]=0;du=ds;dv=dt}else{du=dc;dv=c0}c[64920+(b*688&-1)>>2]=5;de=du+1|0;c[13898]=de;dh=de;di=c[dv+(de*40&-1)+36>>2]|0;dj=c[dv+(de*40&-1)+32>>2]|0;dk=a[dv+(de*40&-1)|0]|0}}while(0);L8542:do{if((dk&1)!=0){if((di|0)>0){dv=c[10036]|0;du=0;c0=0;dc=dj;while(1){dt=a[F+du|0]|0;if(dt<<24>>24==(a[dv+(du+dc|0)|0]|0)){dw=dc;dx=c0}else{if(dt<<24>>24!=36){break L8542}dw=dc-1|0;dx=1}dy=du+1|0;if((dy|0)<(dx+di|0)){du=dy;c0=dx;dc=dw}else{break}}if((dx|0)==0){dz=dy;Z=6221}}else{dz=0;Z=6221}if((Z|0)==6221){dc=a[F+dz|0]|0;if(!((dc<<24>>24|0)==36|(dc<<24>>24|0)==0)){break}}c[64920+(b*688&-1)>>2]=1;c[13898]=dh+1}}while(0);a[I]=109;uB(F+3|0,J|0);J=F+((uA(I|0)|0)+2|0)|0;a[J]=a[120232]|0;a[J+1|0]=a[120233|0]|0;a[J+2|0]=a[120234|0]|0;a[J+3|0]=a[120235|0]|0;a[J+4|0]=a[120236|0]|0;a[J+5|0]=a[120237|0]|0;J=c[13898]|0;I=c[1054]|0;dh=c[I+(J*40&-1)+36>>2]|0;dz=c[I+(J*40&-1)+32>>2]|0;L8557:do{if((a[I+(J*40&-1)|0]&1)==0){dA=J;dB=I}else{if((dh|0)>0){dy=c[10036]|0;dx=0;dw=0;di=dz;while(1){dj=a[F+(dx+2|0)|0]|0;if(dj<<24>>24==(a[dy+(dx+di|0)|0]|0)){dC=di;dD=dw}else{if(dj<<24>>24!=36){dA=J;dB=I;break L8557}dC=di-1|0;dD=1}dE=dx+1|0;if((dE|0)<(dD+dh|0)){dx=dE;dw=dD;di=dC}else{break}}if((dD|0)==0){dF=dE;Z=6231}}else{dF=0;Z=6231}if((Z|0)==6231){di=a[F+(dF+2|0)|0]|0;if(!((di<<24>>24|0)==36|(di<<24>>24|0)==0)){dA=J;dB=I;break}}di=J+1|0;c[13898]=di;L8571:do{if((di|0)<(c[8272]|0)){dw=(a[I+(di*40&-1)|0]&1)==0;L8573:do{if(!dw){dx=c[I+(di*40&-1)+36>>2]|0;dy=I+(di*40&-1)+32|0;dj=c[10036]|0;dk=0;while(1){if((dk|0)>=(dx|0)){Z=6237;break}if((a[dj+((c[dy>>2]|0)+dk|0)|0]|0)==(a[dk+103664|0]|0)){dk=dk+1|0}else{break}}if((Z|0)==6237){if((dk|0)==1){break L8571}}if(!((dx|0)>0&(dw^1))){break}dj=c[10036]|0;dc=0;c0=0;du=c[dy>>2]|0;while(1){if((a[dc+184456|0]|0)==(a[dj+(dc+du|0)|0]|0)){dG=du;dH=c0}else{if((dc|0)!=3){break L8573}dG=du-1|0;dH=1}dv=dc+1|0;if((dv|0)<(dH+dx|0)){dc=dv;c0=dH;du=dG}else{break}}if((dH|0)==0){if(!((dc|0)==2|(dc|0)==7)){break}}c[65040+(b*688&-1)>>2]=1;du=J+2|0;c[13898]=du;dA=du;dB=I;break L8557}}while(0);dw=is(E)|0;S=c[dw>>2]|0;if((S|0)==1){dI=+(c[dw+8>>2]|0)}else if((S|0)==2){dI=+h[dw+8>>3]}else if((S|0)==3){dI=+uz(c[dw+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}dw=E|0;if((c[dw>>2]|0)==3){uu(c[E+8>>2]|0);c[dw>>2]=1}h[65048+(b*688&-1)>>3]=+O(+dI);c[65040+(b*688&-1)>>2]=2;dA=c[13898]|0;dB=c[1054]|0;break L8557}}while(0);c[65040+(b*688&-1)>>2]=3;dA=di;dB=I}}while(0);I=c[dB+(dA*40&-1)+36>>2]|0;if((a[dB+(dA*40&-1)|0]&1)==0){i=d;return}do{if((I|0)>0){E=c[10036]|0;J=0;dH=0;dG=c[dB+(dA*40&-1)+32>>2]|0;while(1){dF=a[F+J|0]|0;if(dF<<24>>24==(a[E+(J+dG|0)|0]|0)){dJ=dG;dK=dH}else{if(dF<<24>>24!=36){Z=6267;break}dJ=dG-1|0;dK=1}dL=J+1|0;if((dL|0)<(dK+I|0)){J=dL;dH=dK;dG=dJ}else{Z=6263;break}}if((Z|0)==6267){i=d;return}else if((Z|0)==6263){if((dK|0)==0){dM=dL;Z=6264;break}else{break}}}else{dM=0;Z=6264}}while(0);do{if((Z|0)==6264){dL=a[F+dM|0]|0;if((dL<<24>>24|0)==36|(dL<<24>>24|0)==0){break}i=d;return}}while(0);c[65040+(b*688&-1)>>2]=0;c[13898]=dA+1;i=d;return}function ju(){var b=0,d=0.0,e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0;b=c[17367]|0;d=(b&1|0)==0?+h[8687]:0.0;e=c[200]|0;f=64652+(e*688&-1)|0;if((b&2|0)!=0){c[f>>2]=3;c[64652+((c[144]|0)*688&-1)>>2]=3;return}c[f>>2]=0;f=c[144]|0;c[64652+(f*688&-1)>>2]=0;g=+h[8688];if((a[69604]&1)==0){i=g-d;h[64688+(e*688&-1)>>3]=i;j=i}else{i=+_(+g);g=+h[8702];k=i/g- +_(+d)/g;h[64688+(e*688&-1)>>3]=k;j=k}h[64688+(f*688&-1)>>3]=j;j=-0.0- +h[64688+(e*688&-1)>>3];h[64680+(e*688&-1)>>3]=j;h[64680+(f*688&-1)>>3]=j;return}function jv(b){b=b|0;var d=0,e=0,f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;d=i;e=c[13898]|0;f=e+1|0;c[13898]=f;do{if((c[5094]|0)!=0){if(!(a[20368]|0)){break}a[20368]=0;g[3538]=+g[5090];g[3536]=+g[5088];g[3534]=+g[5086];c[16336]=c[16336]^2;c[17024]=c[17024]^2}}while(0);j=c[1054]|0;k=c[j+(f*40&-1)+36>>2]|0;l=c[j+(f*40&-1)+32>>2]|0;m=(a[j+(f*40&-1)|0]&1)==0;L8638:do{if((k|0)>0&(m^1)){j=c[10036]|0;n=0;o=0;p=l;while(1){if((a[n+91248|0]|0)==(a[j+(n+p|0)|0]|0)){q=p;r=o}else{if((n|0)!=2){s=6302;break L8638}q=p-1|0;r=1}t=n+1|0;if((t|0)<(r+k|0)){n=t;o=r;p=q}else{break}}if((r|0)==0){if(!((n|0)==7|(n|0)==1)){s=6302;break}}c[13898]=e+2;h[64680+(b*688&-1)>>3]=+h[64696+(b*688&-1)>>3];h[64688+(b*688&-1)>>3]=+h[64704+(b*688&-1)>>3];c[64652+(b*688&-1)>>2]=0}else{s=6302}}while(0);L8650:do{if((s|0)==6302){if((c[8272]|0)<=(f|0)|m){uf(f,90200,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}r=c[10036]|0;q=0;while(1){if((q|0)>=(k|0)){break}if((a[r+(l+q|0)|0]|0)==(a[q+78280|0]|0)){q=q+1|0}else{s=6352;break}}if((s|0)==6352){uf(f,90200,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((q|0)!=1){uf(f,90200,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[13898]=e+2;r=64652+(b*688&-1)|0;c[r>>2]=dj(b,64680+(b*688&-1)|0,64688+(b*688&-1)|0,c[r>>2]|0)|0;r=c[13898]|0;if((c[8272]|0)<=(r|0)){uf(r,78824,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}n=c[1054]|0;if((a[n+(r*40&-1)|0]&1)==0){uf(r,78824,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}p=c[n+(r*40&-1)+36>>2]|0;o=n+(r*40&-1)+32|0;j=c[10036]|0;t=0;while(1){if((t|0)>=(p|0)){break}if((a[j+((c[o>>2]|0)+t|0)|0]|0)==(a[t+78864|0]|0)){t=t+1|0}else{s=6356;break}}if((s|0)==6356){uf(r,78824,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((t|0)!=1){uf(r,78824,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}o=r+1|0;c[13898]=o;p=c[n+(o*40&-1)+36>>2]|0;q=c[n+(o*40&-1)+32>>2]|0;u=(a[n+(o*40&-1)|0]&1)==0;L8679:do{if((p|0)>0&(u^1)){w=0;x=0;y=q;while(1){if((a[w+146208|0]|0)==(a[j+(w+y|0)|0]|0)){z=y;A=x}else{if((w|0)!=3){break}z=y-1|0;A=1}B=w+1|0;if((B|0)<(A+p|0)){w=B;x=A;y=z}else{s=6320;break}}do{if((s|0)==6320){if((A|0)==0){if(!((w|0)==7|(w|0)==2)){break}}y=r+2|0;c[13898]=y;x=64656+(b*688&-1)|0;c[x>>2]=c[x>>2]|2;C=y;break L8679}}while(0);if((p|0)>0&(u^1)){D=0;E=0;F=q}else{C=o;break}while(1){if((a[D+146040|0]|0)==(a[j+(D+F|0)|0]|0)){G=F;H=E}else{if((D|0)!=5){C=o;break L8679}G=F-1|0;H=1}w=D+1|0;if((w|0)<(H+p|0)){D=w;E=H;F=G}else{break}}if((H|0)==0){if(!((D|0)==4|(D|0)==9)){C=o;break}}w=r+2|0;c[13898]=w;y=64656+(b*688&-1)|0;c[y>>2]=c[y>>2]&-3;C=w}else{C=o}}while(0);o=c[n+(C*40&-1)+36>>2]|0;r=c[n+(C*40&-1)+32>>2]|0;p=(a[n+(C*40&-1)|0]&1)==0;if((o|0)>0&(p^1)){I=0;J=0;K=r}else{break}while(1){if((a[I+86128|0]|0)==(a[j+(I+K|0)|0]|0)){L=K;M=J}else{if((I|0)!=2){break}L=K-1|0;M=1}q=I+1|0;if((q|0)<(M+o|0)){I=q;J=M;K=L}else{s=6336;break}}do{if((s|0)==6336){if((M|0)==0){if(!((I|0)==9|(I|0)==1)){break}}c[13898]=C+1;n=64656+(b*688&-1)|0;c[n>>2]=c[n>>2]|1;break L8650}}while(0);if((o|0)>0&(p^1)){N=0;O=0;P=r}else{break}while(1){if((a[N+84952|0]|0)==(a[j+(N+P|0)|0]|0)){Q=P;R=O}else{if((N|0)!=5){break L8650}Q=P-1|0;R=1}n=N+1|0;if((n|0)<(R+o|0)){N=n;O=R;P=Q}else{break}}if((R|0)==0){if(!((N|0)==4|(N|0)==11)){break}}c[13898]=C+1;o=64656+(b*688&-1)|0;c[o>>2]=c[o>>2]&-2}}while(0);if((c[5094]|0)==0){i=d;return}if(a[20368]|0){i=d;return}a[20368]=1;g[5090]=+g[3538];g[5088]=+g[3536];g[5086]=+g[3534];g[3538]=180.0;g[3536]=0.0;g[3534]=1.2999999523162842;c[16336]=c[16336]^2;c[17024]=c[17024]^2;i=d;return}function jw(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0.0,T=0.0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0.0,aq=0.0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0.0,aA=0.0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aY=0,aZ=0,a_=0,a$=0,a0=0,a1=0,a2=0,a3=0.0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,ba=0,bb=0,bc=0,bd=0,be=0.0,bf=0.0,bg=0,bh=0,bi=0,bj=0,bk=0,bl=0,bm=0,bn=0,bo=0,bp=0,bq=0,br=0,bs=0,bt=0,bu=0,bv=0,bw=0.0,bx=0.0,by=0,bz=0,bA=0,bB=0,bC=0,bD=0,bE=0,bF=0,bG=0,bH=0,bI=0,bJ=0,bK=0,bL=0,bM=0.0,bN=0.0,bO=0,bP=0,bQ=0,bR=0,bS=0,bT=0,bU=0,bV=0,bW=0,bX=0,bY=0,bZ=0,b_=0,b$=0,b0=0,b1=0,b2=0,b3=0,b4=0,b5=0,b6=0,b7=0.0,b8=0.0,b9=0,ca=0,cb=0,cc=0,cd=0,ce=0,cf=0,cg=0,ch=0,ci=0,cj=0,ck=0,cl=0.0,cm=0.0,cn=0,co=0,cp=0,cq=0,cr=0,cs=0,ct=0.0,cu=0.0,cv=0,cw=0,cx=0,cy=0,cz=0,cA=0,cB=0,cC=0,cD=0,cE=0,cF=0,cG=0.0,cH=0.0,cI=0,cJ=0,cK=0,cL=0,cM=0,cN=0,cO=0,cP=0,cQ=0,cR=0,cS=0,cT=0,cU=0,cV=0.0,cW=0.0,cX=0,cY=0,cZ=0,c_=0,c$=0,c0=0,c1=0,c2=0,c3=0.0,c4=0.0,c5=0,c6=0,c7=0,c8=0,c9=0,da=0,db=0.0,dc=0.0,dd=0,de=0,df=0,dg=0,dh=0,di=0,dj=0.0,dk=0.0,dm=0,dn=0,dp=0,dq=0,dr=0,ds=0,dt=0,du=0.0,dv=0.0,dw=0,dx=0,dy=0,dz=0,dA=0,dB=0.0,dC=0.0,dD=0,dE=0;d=i;i=i+224|0;e=d|0;f=d+24|0;g=d+48|0;j=d+88|0;k=d+128|0;l=d+168|0;m=b+4|0;n=(c[m>>2]|0)==-2;o=j;uE(o|0,0,40);c[j>>2]=4;c[j+4>>2]=4;c[j+8>>2]=4;p=k;uE(p|0,0,16);q=d+144|0;uE(q|0,0,24);r=c[13898]|0;s=c[8272]|0;do{if((r|0)<(s|0)){t=b+184|0;u=l|0;w=l+4|0;x=l+8|0;y=l+16|0;z=l+24|0;A=l+32|0;B=f|0;C=f+8|0;D=b+52|0;E=e|0;F=e+8|0;G=0;H=0;I=0;J=0;K=0;L=0;M=0;N=0;O=0;P=0;Q=0;R=0;S=-2.0;T=1.0;U=-2;V=-2;W=0;X=r;Y=s;L8736:while(1){Z=c[1054]|0;_=(a[Z+(X*40&-1)|0]&1)==0;L8738:do{if(!_){$=c[Z+(X*40&-1)+36>>2]|0;aa=Z+(X*40&-1)+32|0;ab=c[10036]|0;ac=0;while(1){if((ac|0)>=($|0)){break}if((a[ab+((c[aa>>2]|0)+ac|0)|0]|0)==(a[ac+103664|0]|0)){ac=ac+1|0}else{break L8738}}if((ac|0)==1){ad=G;ae=H;af=I;ag=J;ah=K;ai=L;aj=M;ak=N;al=O;am=P;an=Q;ao=R;ap=S;aq=T;ar=U;as=V;at=W;au=6556;break L8736}}}while(0);L8745:do{if(J|(Y|0)<=(X|0)|_){au=6376}else{aa=c[Z+(X*40&-1)+36>>2]|0;ab=Z+(X*40&-1)+32|0;$=c[10036]|0;av=0;while(1){if((av|0)>=(aa|0)){break}if((a[$+((c[ab>>2]|0)+av|0)|0]|0)==(a[av+95280|0]|0)){av=av+1|0}else{au=6376;break L8745}}if(n|(av|0)!=2){au=6376;break}c[13898]=X+1;dl(g,0);aw=W;ax=V;ay=U;az=T;aA=S;aB=R;aC=Q;aD=P;aE=O;aF=N;aG=M;aH=L;aI=K;aJ=1;aK=I;aL=G;aM=H}}while(0);L8752:do{if((au|0)==6376){au=0;ab=c[Z+(X*40&-1)+36>>2]|0;$=c[Z+(X*40&-1)+32>>2]|0;L8754:do{if(K){au=6413}else{if(!((ab|0)>0&(_^1))){break}aa=c[10036]|0;ac=0;aN=0;aO=$;while(1){if((a[ac+149696|0]|0)==(a[aa+(ac+aO|0)|0]|0)){aP=aO;aQ=aN}else{if((ac|0)!=1){break}aP=aO-1|0;aQ=1}aR=ac+1|0;if((aR|0)<(aQ+ab|0)){ac=aR;aN=aQ;aO=aP}else{au=6383;break}}do{if((au|0)==6383){au=0;if((aQ|0)==0){if(!((ac|0)==4|(ac|0)==0)){break}}c[13898]=X+1;aw=W;ax=V;ay=U;az=T;aA=S;aB=0;aC=Q;aD=P;aE=O;aF=N;aG=M;aH=L;aI=1;aJ=J;aK=I;aL=G;aM=H;break L8752}}while(0);if(!((ab|0)>0&(_^1))){break}ac=c[10036]|0;aO=0;aN=0;aa=$;while(1){if((a[aO+179896|0]|0)==(a[ac+(aO+aa|0)|0]|0)){aS=aa;aT=aN}else{if((aO|0)!=1){au=6394;break}aS=aa-1|0;aT=1}aR=aO+1|0;if((aR|0)<(aT+ab|0)){aO=aR;aN=aT;aa=aS}else{au=6392;break}}do{if((au|0)==6392){au=0;if((aT|0)!=0){break}if(!((aO|0)==0|(aO|0)==6)){au=6394}}}while(0);L8779:do{if((au|0)==6394){au=0;if(_){break L8754}L8782:do{if((ab|0)>0){aO=c[10036]|0;aa=0;aN=0;ac=$;while(1){if((a[aa+149304|0]|0)==(a[aO+(aa+ac|0)|0]|0)){aU=ac;aV=aN}else{if((aa|0)!=1){break L8782}aU=ac-1|0;aV=1}aR=aa+1|0;if((aR|0)<(aV+ab|0)){aa=aR;aN=aV;ac=aU}else{break}}if((aV|0)!=0){break L8779}if((aa|0)==0|(aa|0)==6){break L8779}}}while(0);if(!((ab|0)>0&(_^1))){break L8754}ac=c[10036]|0;aN=0;aO=0;aR=$;while(1){if((a[aN+149568|0]|0)==(a[ac+(aN+aR|0)|0]|0)){aW=aR;aX=aO}else{if((aN|0)!=1){au=6413;break L8754}aW=aR-1|0;aX=1}aY=aN+1|0;if((aY|0)<(aX+ab|0)){aN=aY;aO=aX;aR=aW}else{break}}if((aX|0)==0){if(!((aN|0)==0|(aN|0)==5)){au=6413;break L8754}}c[13898]=X+1;aw=W;ax=V;ay=U;az=T;aA=S;aB=2;aC=Q;aD=P;aE=O;aF=N;aG=M;aH=L;aI=1;aJ=J;aK=I;aL=G;aM=H;break L8752}}while(0);c[13898]=X+1;aw=W;ax=V;ay=U;az=T;aA=S;aB=1;aC=Q;aD=P;aE=O;aF=N;aG=M;aH=L;aI=1;aJ=J;aK=I;aL=G;aM=H;break L8752}}while(0);L8805:do{if((au|0)==6413){au=0;if(_){break}L8808:do{if((ab|0)>0){av=c[10036]|0;aR=0;aO=0;ac=$;while(1){if((a[aR+90456|0]|0)==(a[av+(aR+ac|0)|0]|0)){aZ=ac;a_=aO}else{if((aR|0)!=3){break L8808}aZ=ac-1|0;a_=1}aY=aR+1|0;if((aY|0)<(a_+ab|0)){aR=aY;aO=a_;ac=aZ}else{break}}if((a_|0)==0){if(!((aR|0)==6|(aR|0)==2)){break}}a$=X+1|0;c[13898]=a$;ac=c[D>>2]|0;aO=a[Z+(a$*40&-1)|0]|0;L8820:do{if((Y|0)>(a$|0)){if((aO&1)==0){au=6427;break}av=c[Z+(a$*40&-1)+36>>2]|0;aN=Z+(a$*40&-1)+32|0;aY=c[10036]|0;a0=0;while(1){if((a0|0)>=(av|0)){break}if((a[aY+((c[aN>>2]|0)+a0|0)|0]|0)==(a[a0+163312|0]|0)){a0=a0+1|0}else{au=6427;break L8820}}if((a0|0)!=2){a1=av;a2=aN;break}c[13898]=X+2;aY=is(e)|0;aa=c[aY>>2]|0;if((aa|0)==1){a3=+(c[aY+8>>2]|0)}else if((aa|0)==2){a3=+h[aY+8>>3]}else if((aa|0)==3){a3=+uz(c[aY+8>>2]|0,0)}else{au=6433;break L8736}if((c[E>>2]|0)==3){uu(c[F>>2]|0);c[E>>2]=1}aw=W;ax=V;ay=U;az=T;aA=S;aB=R;aC=Q;aD=P;aE=O;aF=N;aG=M;aH=1;aI=K;aJ=J;aK=~~a3;aL=G;aM=H;break L8752}else{au=6427}}while(0);if((au|0)==6427){au=0;a1=c[Z+(a$*40&-1)+36>>2]|0;a2=Z+(a$*40&-1)+32|0}if(!((aO&1)!=0&(a1|0)>0)){aw=W;ax=V;ay=U;az=T;aA=S;aB=R;aC=Q;aD=P;aE=O;aF=N;aG=M;aH=1;aI=K;aJ=J;aK=-270;aL=G;aM=H;break L8752}aR=c[10036]|0;aY=0;aa=0;a4=c[a2>>2]|0;while(1){if((a[aY+154360|0]|0)==(a[aR+(aY+a4|0)|0]|0)){a5=a4;a6=aa}else{if((aY|0)!=4){aw=W;ax=V;ay=U;az=T;aA=S;aB=R;aC=Q;aD=P;aE=O;aF=N;aG=M;aH=1;aI=K;aJ=J;aK=-270;aL=G;aM=H;break L8752}a5=a4-1|0;a6=1}a7=aY+1|0;if((a7|0)<(a6+a1|0)){aY=a7;aa=a6;a4=a5}else{break}}if((a6|0)==0){if(!((aY|0)==3|(aY|0)==8)){aw=W;ax=V;ay=U;az=T;aA=S;aB=R;aC=Q;aD=P;aE=O;aF=N;aG=M;aH=1;aI=K;aJ=J;aK=-270;aL=G;aM=H;break L8752}}if((c[m>>2]|0)>-1){au=6446;break L8736}c[13898]=X+2;c[m>>2]=-3;aw=W;ax=V;ay=U;az=T;aA=S;aB=R;aC=Q;aD=P;aE=O;aF=N;aG=M;aH=1;aI=K;aJ=J;aK=ac;aL=G;aM=H;break L8752}}while(0);if(!((ab|0)>0&(_^1))){break}a4=c[10036]|0;aa=0;aR=0;aO=$;while(1){if((a[aa+149328|0]|0)==(a[a4+(aa+aO|0)|0]|0)){a8=aO;a9=aR}else{if((aa|0)!=5){break L8805}a8=aO-1|0;a9=1}a7=aa+1|0;if((a7|0)<(a9+ab|0)){aa=a7;aR=a9;aO=a8}else{break}}if((a9|0)==0){if(!((aa|0)==4|(aa|0)==8)){break}}c[13898]=X+1;if((c[m>>2]|0)!=-3){aw=W;ax=V;ay=U;az=T;aA=S;aB=R;aC=Q;aD=P;aE=O;aF=N;aG=M;aH=1;aI=K;aJ=J;aK=0;aL=G;aM=H;break L8752}c[m>>2]=-2;aw=W;ax=V;ay=U;az=T;aA=S;aB=R;aC=Q;aD=P;aE=O;aF=N;aG=M;aH=1;aI=K;aJ=J;aK=0;aL=G;aM=H;break L8752}}while(0);L8865:do{if(!(M|(Y|0)<=(X|0)|_)){aO=c[10036]|0;aR=0;while(1){if((aR|0)>=(ab|0)){break}if((a[aO+($+aR|0)|0]|0)==(a[aR+124352|0]|0)){aR=aR+1|0}else{break L8865}}if((aR|0)!=4){break}ba=X+1|0;c[13898]=ba;if((ba|0)>=(Y|0)){bb=ba;au=6577;break L8736}L8873:do{if((a[Z+(ba*40&-1)|0]&1)!=0){aa=c[Z+(ba*40&-1)+36>>2]|0;a4=Z+(ba*40&-1)+32|0;a7=0;while(1){if((a7|0)>=(aa|0)){break}if((a[aO+((c[a4>>2]|0)+a7|0)|0]|0)==(a[a7+103664|0]|0)){a7=a7+1|0}else{break L8873}}if((a7|0)==1){bb=ba;au=6578;break L8736}}}while(0);a[14176]=1;is(f);a[14176]=0;if((c[B>>2]|0)!=3){au=6470;break L8736}aO=c[C>>2]|0;if((aO|0)==0){au=6472;break L8736}else{aw=aO;ax=V;ay=U;az=T;aA=S;aB=R;aC=Q;aD=P;aE=O;aF=N;aG=1;aH=L;aI=K;aJ=J;aK=I;aL=G;aM=H;break L8752}}}while(0);L8882:do{if(!(O|n)){aO=(Y|0)>(X|0);if(_|aO^1){break}aR=c[10036]|0;a4=0;while(1){if((a4|0)>=(ab|0)){au=6479;break}if((a[aR+($+a4|0)|0]|0)==(a[a4+150704|0]|0)){a4=a4+1|0}else{break}}do{if((au|0)==6479){au=0;if((a4|0)!=4){break}c[13898]=X+1;aw=W;ax=V;ay=U;az=T;aA=S;aB=R;aC=0;aD=P;aE=1;aF=N;aG=M;aH=L;aI=K;aJ=J;aK=I;aL=G;aM=H;break L8752}}while(0);if(_|aO^1){break}a4=c[10036]|0;aR=0;while(1){if((aR|0)>=(ab|0)){break}if((a[a4+($+aR|0)|0]|0)==(a[aR+150856|0]|0)){aR=aR+1|0}else{break L8882}}if((aR|0)!=5){break}c[13898]=X+1;aw=W;ax=V;ay=U;az=T;aA=S;aB=R;aC=1;aD=P;aE=1;aF=N;aG=M;aH=L;aI=K;aJ=J;aK=I;aL=G;aM=H;break L8752}}while(0);L8899:do{if((ab|0)>0&(((V|0)!=-2|n|_)^1)){a4=c[10036]|0;aO=0;aa=0;ac=$;while(1){if((a[aO+140256|0]|0)==(a[a4+(aO+ac|0)|0]|0)){bc=ac;bd=aa}else{if((aO|0)!=2){break}bc=ac-1|0;bd=1}aY=aO+1|0;if((aY|0)<(bd+ab|0)){aO=aY;aa=bd;ac=bc}else{au=6493;break}}do{if((au|0)==6493){au=0;if((bd|0)==0){if(!((aO|0)==5|(aO|0)==1)){break}}ac=X+1|0;c[13898]=ac;c[u>>2]=1;c[w>>2]=U;c[x>>2]=H;c[x+4>>2]=G;h[y>>3]=T;h[z>>3]=S;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];c[A+8>>2]=c[q+8>>2];c[A+12>>2]=c[q+12>>2];c[A+16>>2]=c[q+16>>2];c[A+20>>2]=c[q+20>>2];hH(l,1,1);if((ac|0)==(c[13898]|0)){aw=W;ax=1;ay=U;az=T;aA=S;aB=R;aC=Q;aD=P;aE=O;aF=N;aG=M;aH=L;aI=K;aJ=J;aK=I;aL=G;aM=H;break L8752}ac=c[u>>2]|0;aa=c[w>>2]|0;a4=c[x>>2]|0;aR=c[x+4>>2]|0;be=+h[y>>3];bf=+h[z>>3];c[q>>2]=c[A>>2];c[q+4>>2]=c[A+4>>2];c[q+8>>2]=c[A+8>>2];c[q+12>>2]=c[A+12>>2];c[q+16>>2]=c[A+16>>2];c[q+20>>2]=c[A+20>>2];aw=W;ax=ac;ay=aa;az=be;aA=bf;aB=R;aC=Q;aD=P;aE=O;aF=N;aG=M;aH=L;aI=K;aJ=J;aK=I;aL=aR;aM=a4;break L8752}}while(0);if(!((ab|0)>0&(_^1))){break}aO=c[10036]|0;a4=0;aR=0;aa=$;while(1){if((a[a4+138112|0]|0)==(a[aO+(a4+aa|0)|0]|0)){bg=aa;bh=aR}else{if((a4|0)!=4){break L8899}bg=aa-1|0;bh=1}ac=a4+1|0;if((ac|0)<(bh+ab|0)){a4=ac;aR=bh;aa=bg}else{break}}if((bh|0)==0){if(!((a4|0)==3|(a4|0)==7)){break}}c[13898]=X+1;aw=W;ax=0;ay=U;az=T;aA=S;aB=R;aC=Q;aD=P;aE=O;aF=N;aG=M;aH=L;aI=K;aJ=J;aK=I;aL=G;aM=H;break L8752}}while(0);L8926:do{if((ab|0)>0&((N|_)^1)){aa=c[10036]|0;aR=0;aO=0;ac=$;while(1){if((a[aR+136456|0]|0)==(a[aa+(aR+ac|0)|0]|0)){bi=ac;bj=aO}else{if((aR|0)!=2){break L8926}bi=ac-1|0;bj=1}aY=aR+1|0;if((aY|0)<(bj+ab|0)){aR=aY;aO=bj;ac=bi}else{break}}if((bj|0)==0){if(!((aR|0)==1|(aR|0)==6)){break}}c[13898]=X+1;dl(j,4);aw=W;ax=V;ay=U;az=T;aA=S;aB=R;aC=Q;aD=P;aE=O;aF=1;aG=M;aH=L;aI=K;aJ=J;aK=I;aL=G;aM=H;break L8752}}while(0);L8939:do{if((Y|0)>(X|0)){if(_){au=6544;break L8736}ac=c[10036]|0;aO=0;while(1){if((aO|0)>=(ab|0)){break}if((a[ac+($+aO|0)|0]|0)==(a[aO+143040|0]|0)){aO=aO+1|0}else{au=6521;break L8939}}if((aO|0)!=2){au=6521;break}if(!P){au=6532}}else{au=6521}}while(0);L8947:do{if((au|0)==6521){au=0;if(_){au=6544;break L8736}if((ab|0)>0){ac=c[10036]|0;aR=0;aa=0;a4=$;while(1){if((a[aR+142856|0]|0)==(a[ac+(aR+a4|0)|0]|0)){bk=a4;bl=aa}else{if((aR|0)!=4){break L8947}bk=a4-1|0;bl=1}bm=aR+1|0;if((bm|0)<(bl+ab|0)){aR=bm;aa=bl;a4=bk}else{break}}if((bl|0)==0){bn=bm;au=6529}else{bo=0}}else{bn=0;au=6529}if((au|0)==6529){au=0;bo=(bn|0)!=10&(bn|0)!=4}if(!(bo|P)){au=6532}}}while(0);if((au|0)==6532){au=0;hI(k,7);aw=W;ax=V;ay=U;az=T;aA=S;aB=R;aC=Q;aD=1;aE=O;aF=N;aG=M;aH=L;aI=K;aJ=J;aK=I;aL=G;aM=H;break}if(_){au=6534;break L8736}if((ab|0)<=0){au=6547;break L8736}a4=c[10036]|0;aa=0;aR=0;ac=$;while(1){if((a[aa+121536|0]|0)==(a[a4+(aa+ac|0)|0]|0)){bp=ac;bq=aR}else{if((aa|0)!=5){break}bp=ac-1|0;bq=1}aO=aa+1|0;if((aO|0)<(bq+ab|0)){aa=aO;aR=bq;ac=bp}else{au=6541;break}}do{if((au|0)==6541){au=0;if((bq|0)==0){if(!((aa|0)==4|(aa|0)==10)){break}}a[t]=1;c[13898]=(c[13898]|0)+1;aw=W;ax=V;ay=U;az=T;aA=S;aB=R;aC=Q;aD=P;aE=O;aF=N;aG=M;aH=L;aI=K;aJ=J;aK=I;aL=G;aM=H;break L8752}}while(0);if(_){ad=G;ae=H;af=I;ag=J;ah=K;ai=L;aj=M;ak=N;al=O;am=P;an=Q;ao=R;ap=S;aq=T;ar=U;as=V;at=W;au=6556;break L8736}if((ab|0)<=0){au=6547;break L8736}aa=c[10036]|0;ac=0;aR=0;a4=$;while(1){if((a[ac+122880|0]|0)==(a[aa+(ac+a4|0)|0]|0)){br=a4;bs=aR}else{if((ac|0)!=3){ad=G;ae=H;af=I;ag=J;ah=K;ai=L;aj=M;ak=N;al=O;am=P;an=Q;ao=R;ap=S;aq=T;ar=U;as=V;at=W;au=6556;break L8736}br=a4-1|0;bs=1}aO=ac+1|0;if((aO|0)<(bs+ab|0)){ac=aO;aR=bs;a4=br}else{break}}if((bs|0)==0){if(!((ac|0)==2|(ac|0)==8)){ad=G;ae=H;af=I;ag=J;ah=K;ai=L;aj=M;ak=N;al=O;am=P;an=Q;ao=R;ap=S;aq=T;ar=U;as=V;at=W;au=6556;break L8736}}a[t]=0;c[13898]=(c[13898]|0)+1;aw=W;ax=V;ay=U;az=T;aA=S;aB=R;aC=Q;aD=P;aE=O;aF=N;aG=M;aH=L;aI=K;aJ=J;aK=I;aL=G;aM=H}}while(0);_=c[13898]|0;Z=c[8272]|0;if((_|0)<(Z|0)){G=aL;H=aM;I=aK;J=aJ;K=aI;L=aH;M=aG;N=aF;O=aE;P=aD;Q=aC;R=aB;S=aA;T=az;U=ay;V=ax;W=aw;X=_;Y=Z}else{ad=aL;ae=aM;af=aK;ag=aJ;ah=aI;ai=aH;aj=aG;ak=aF;al=aE;am=aD;an=aC;ao=aB;ap=aA;aq=az;ar=ay;as=ax;at=aw;au=6556;break}}if((au|0)==6577){uf(bb,145200,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==6578){uf(bb,145200,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==6534){if(J){bt=W;bu=V;bv=U;bw=T;bx=S;by=R;bz=Q;bA=P;bB=O;bC=N;bD=M;bE=L;bF=K;bG=I;bH=G;bI=H;au=6558}else{bJ=W;bK=V;bL=U;bM=T;bN=S;bO=R;bP=Q;bQ=P;bR=O;bS=N;bT=M;bU=L;bV=K;bW=I;bX=G;bY=H;au=6557}}else if((au|0)==6544){if(J){bt=W;bu=V;bv=U;bw=T;bx=S;by=R;bz=Q;bA=P;bB=O;bC=N;bD=M;bE=L;bF=K;bG=I;bH=G;bI=H;au=6558}else{bJ=W;bK=V;bL=U;bM=T;bN=S;bO=R;bP=Q;bQ=P;bR=O;bS=N;bT=M;bU=L;bV=K;bW=I;bX=G;bY=H;au=6557}}else if((au|0)==6547){if(J){bt=W;bu=V;bv=U;bw=T;bx=S;by=R;bz=Q;bA=P;bB=O;bC=N;bD=M;bE=L;bF=K;bG=I;bH=G;bI=H;au=6558}else{bJ=W;bK=V;bL=U;bM=T;bN=S;bO=R;bP=Q;bQ=P;bR=O;bS=N;bT=M;bU=L;bV=K;bW=I;bX=G;bY=H;au=6557}}else if((au|0)==6556){if(ag){bt=at;bu=as;bv=ar;bw=aq;bx=ap;by=ao;bz=an;bA=am;bB=al;bC=ak;bD=aj;bE=ai;bF=ah;bG=af;bH=ad;bI=ae;au=6558}else{bJ=at;bK=as;bL=ar;bM=aq;bN=ap;bO=ao;bP=an;bQ=am;bR=al;bS=ak;bT=aj;bU=ai;bV=ah;bW=af;bX=ad;bY=ae;au=6557}}else if((au|0)==6470){c[13898]=ba;bb=ba;uf(bb,145200,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==6472){bb=c[13898]|0;uf(bb,145200,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==6446){uf(a$,151096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((au|0)==6433){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((au|0)==6558){Y=b+8|0;X=g;c[Y>>2]=c[X>>2];c[Y+4>>2]=c[X+4>>2];c[Y+8>>2]=c[X+8>>2];c[Y+12>>2]=c[X+12>>2];c[Y+16>>2]=c[X+16>>2];c[Y+20>>2]=c[X+20>>2];c[Y+24>>2]=c[X+24>>2];c[Y+28>>2]=c[X+28>>2];c[Y+32>>2]=c[X+32>>2];c[Y+36>>2]=c[X+36>>2];if(bF){bZ=bH;b_=bI;b$=bG;b0=bE;b1=bD;b2=bC;b3=bB;b4=bA;b5=bz;b6=by;b7=bx;b8=bw;b9=bv;ca=bu;cb=bt;au=6559}else{cc=bH;cd=bI;ce=bG;cf=bE;cg=bD;ch=bC;ci=bB;cj=bA;ck=bz;cl=bx;cm=bw;cn=bv;co=bu;cp=bt;au=6560}}else if((au|0)==6557){uE(g|0,0,40);if(bV){bZ=bX;b_=bY;b$=bW;b0=bU;b1=bT;b2=bS;b3=bR;b4=bQ;b5=bP;b6=bO;b7=bN;b8=bM;b9=bL;ca=bK;cb=bJ;au=6559}else{cc=bX;cd=bY;ce=bW;cf=bU;cg=bT;ch=bS;ci=bR;cj=bQ;ck=bP;cl=bN;cm=bM;cn=bL;co=bK;cp=bJ;au=6560}}if((au|0)==6559){c[b+48>>2]=b6;if(b0){cq=cb;cr=ca;cs=b9;ct=b8;cu=b7;cv=b5;cw=b4;cx=b3;cy=b2;cz=b1;cA=b$;cB=bZ;cC=b_;au=6561}else{cD=cb;cE=ca;cF=b9;cG=b8;cH=b7;cI=b5;cJ=b4;cK=b3;cL=b2;cM=b1;cN=bZ;cO=b_;au=6562}}else if((au|0)==6560){if(cf){cq=cp;cr=co;cs=cn;ct=cm;cu=cl;cv=ck;cw=cj;cx=ci;cy=ch;cz=cg;cA=ce;cB=cc;cC=cd;au=6561}else{cD=cp;cE=co;cF=cn;cG=cm;cH=cl;cI=ck;cJ=cj;cK=ci;cL=ch;cM=cg;cN=cc;cO=cd;au=6562}}if((au|0)==6561){c[b+52>>2]=cA;if(cx){cP=cB;cQ=cC;cR=cz;cS=cy;cT=cw;cU=cv;cV=cu;cW=ct;cX=cs;cY=cr;cZ=cq;au=6563}else{c_=cB;c$=cC;c0=cz;c1=cy;c2=cw;c3=cu;c4=ct;c5=cs;c6=cr;c7=cq;au=6564}}else if((au|0)==6562){if(cK){cP=cN;cQ=cO;cR=cM;cS=cL;cT=cJ;cU=cI;cV=cH;cW=cG;cX=cF;cY=cE;cZ=cD;au=6563}else{c_=cN;c$=cO;c0=cM;c1=cL;c2=cJ;c3=cH;c4=cG;c5=cF;c6=cE;c7=cD;au=6564}}if((au|0)==6563){c[b+56>>2]=cU;if(cR){c8=cZ;c9=cY;da=cX;db=cW;dc=cV;dd=cT;de=cS;df=cP;dg=cQ;au=6565}else{dh=cY;di=cX;dj=cW;dk=cV;dm=cT;dn=cS;dp=cP;dq=cQ;au=6566}}else if((au|0)==6564){if(c0){c8=c7;c9=c6;da=c5;db=c4;dc=c3;dd=c2;de=c1;df=c_;dg=c$;au=6565}else{dh=c6;di=c5;dj=c4;dk=c3;dm=c2;dn=c1;dp=c_;dq=c$;au=6566}}if((au|0)==6565){c[b+64>>2]=c8;if(dd){dr=df;ds=dg;dt=de;du=dc;dv=db;dw=da;dx=c9;au=6567}else{dy=df;dz=dg;dA=de;dB=dc;dC=db;dD=da;dE=c9}}else if((au|0)==6566){if(dm){dr=dp;ds=dq;dt=dn;du=dk;dv=dj;dw=di;dx=dh;au=6567}else{dy=dp;dz=dq;dA=dn;dB=dk;dC=dj;dD=di;dE=dh}}if((au|0)==6567){X=b+72|0;c[X>>2]=c[p>>2];c[X+4>>2]=c[p+4>>2];c[X+8>>2]=c[p+8>>2];c[X+12>>2]=c[p+12>>2];dy=dr;dz=ds;dA=dt;dB=du;dC=dv;dD=dw;dE=dx}if((dE|0)>-1){c[b+88>>2]=dE;c[b+92>>2]=dD;X=b+96|0;c[X>>2]=dz;c[X+4>>2]=dy;h[b+104>>3]=dC;h[b+112>>3]=dB;X=b+120|0;c[X>>2]=c[q>>2];c[X+4>>2]=c[q+4>>2];c[X+8>>2]=c[q+8>>2];c[X+12>>2]=c[q+12>>2];c[X+16>>2]=c[q+16>>2];c[X+20>>2]=c[q+20>>2];if(!dA){break}}else{if(!dA){break}}X=b+144|0;c[X>>2]=c[o>>2];c[X+4>>2]=c[o+4>>2];c[X+8>>2]=c[o+8>>2];c[X+12>>2]=c[o+12>>2];c[X+16>>2]=c[o+16>>2];c[X+20>>2]=c[o+20>>2];c[X+24>>2]=c[o+24>>2];c[X+28>>2]=c[o+28>>2];c[X+32>>2]=c[o+32>>2];c[X+36>>2]=c[o+36>>2]}else{uE(g|0,0,40)}}while(0);if((c[b+72>>2]|0)!=6){i=d;return}h[b+80>>3]=+h[b+40>>3];i=d;return}
+function jx(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0.0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0.0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aJ=0,aK=0,aL=0.0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aY=0.0,aZ=0,a_=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0.0,a7=0.0,a8=0,a9=0,ba=0,bb=0,bc=0,bd=0,be=0,bf=0,bg=0,bh=0,bi=0,bj=0,bk=0,bl=0,bm=0,bn=0,bo=0,bp=0,bq=0,br=0,bs=0,bt=0.0,bu=0,bv=0,bw=0.0,bx=0,by=0,bz=0;e=i;i=i+96|0;f=e|0;g=e+24|0;j=e+48|0;k=e+72|0;l=c[13898]|0;c[13898]=l+1;do{if((b|0)<-1){c[13898]=l;if((d|0)==1){n=b;o=49264;p=0;q=0;r=49160;s=0;t=0;u=l;break}uf(l,191504,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{w=c[10818]|0;L9036:do{if((w|0)==0){x=0;y=0;z=6591}else{A=(b|0)>0;B=0;C=w;while(1){if(A){D=c[C+4>>2]|0;if((D|0)>=(b|0)){break}}E=c[C>>2]|0;if((E|0)==0){x=C;y=0;z=6591;break L9036}else{B=C;C=E}}if((C|0)==0){F=b;G=B;H=0;z=6594;break}if((D|0)!=(b|0)){x=B;y=C;z=6591;break}A=c[C+12>>2]|0;if((A|0)==(d|0)){I=b;J=0;K=C;break}E=C|0;L=c[E>>2]|0;if((A|0)==4){uu(c[(C+104|0)+4>>2]|0)}if((d|0)==4){uD(C|0,33240,272)}else if((d|0)==1){uD(C|0,1144,272);c[C+52>>2]=-7;c[C+16>>2]=3}else if((d|0)==3){uD(C|0,1416,272)}else if((d|0)==2){uD(C|0,1688,272)}else{uf(-1,177064,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[C+4>>2]=b;c[C+12>>2]=d;c[E>>2]=L;I=b;J=C;K=C}}while(0);do{if((z|0)==6591){if((b|0)!=-1){F=b;G=x;H=y;z=6594;break}if((x|0)==0){F=1;G=0;H=y;z=6594;break}F=(c[x+4>>2]|0)+1|0;G=x;H=y;z=6594}}while(0);if((z|0)==6594){w=ut(272)|0;do{if((w|0)==0){gk();L=ut(272)|0;if((L|0)!=0){M=L;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=177576,v)|0)}else{M=w}}while(0);w=M;if((d|0)==1){uD(M|0,1144,272);c[M+52>>2]=-7;c[M+16>>2]=3}else if((d|0)==3){uD(M|0,1416,272)}else if((d|0)==2){uD(M|0,1688,272)}else if((d|0)==4){uD(M|0,33240,272)}else{uf(-1,177064,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[M+4>>2]=F;c[M+12>>2]=d;if((G|0)==0){c[10818]=w}else{c[G>>2]=w}c[M>>2]=H;I=F;J=w;K=w}w=K+104|0;n=I;o=w|0;p=w;q=J;r=K;s=w;t=w;u=c[13898]|0}}while(0);K=c[8272]|0;if((u|0)>=(K|0)){i=e;return}J=o+88|0;I=o+128|0;F=J|0;H=I|0;M=o+92|0;G=o+132|0;y=o+104|0;x=o+144|0;b=o+112|0;D=o+152|0;l=o|0;w=o+48|0;L=o+8|0;o=r+8|0;E=k|0;A=k+8|0;N=r+80|0;O=r+52|0;Q=r+88|0;R=Q|0;S=r+12|0;T=(q|0)==0;q=r+16|0;U=q|0;V=r+20|0;W=r+24|0;X=r+32|0;Y=(n|0)<0;n=r+16|0;Z=j|0;_=j+8|0;$=t+88|0;aa=g|0;ab=g+8|0;ac=t+96|0;ad=t+48|0;ae=t+8|0;t=p+48|0;af=p|0;ag=f|0;ah=f+8|0;ai=p+88|0;aj=p+8|0;p=s+4|0;ak=s|0;s=0;al=0;am=0;an=0;ao=0;ap=0;aq=1.0;ar=u;u=K;L9085:while(1){K=c[1054]|0;as=(a[K+(ar*40&-1)|0]&1)==0;L9087:do{if(!as){at=c[K+(ar*40&-1)+36>>2]|0;au=K+(ar*40&-1)+32|0;av=c[10036]|0;aw=0;while(1){if((aw|0)>=(at|0)){break}if((a[av+((c[au>>2]|0)+aw|0)|0]|0)==(a[aw+103664|0]|0)){aw=aw+1|0}else{break L9087}}if((aw|0)==1){ax=am;ay=an;az=ao;aA=aq;z=6939;break L9085}}}while(0);L9094:do{if((d|0)==3){au=(u|0)>(ar|0);L9096:do{if(au){av=c[K+(ar*40&-1)+36>>2]|0;at=K+(ar*40&-1)+32|0;if(as){aB=c[at>>2]|0;aC=av;z=6764;break}C=c[10036]|0;B=0;while(1){if((B|0)>=(av|0)){break}if((a[C+((c[at>>2]|0)+B|0)|0]|0)==(a[B+95280|0]|0)){B=B+1|0}else{z=6754;break L9096}}if((B|0)==2){z=6762}else{z=6754}}else{z=6754}}while(0);L9105:do{if((z|0)==6754){z=0;aw=c[K+(ar*40&-1)+36>>2]|0;at=c[K+(ar*40&-1)+32>>2]|0;L9107:do{if((aw|0)>0&(as^1)){C=c[10036]|0;av=0;aD=0;aE=at;while(1){if((a[av+185064|0]|0)==(a[C+(av+aE|0)|0]|0)){aF=aE;aG=aD}else{if((av|0)!=3){break L9107}aF=aE-1|0;aG=1}aH=av+1|0;if((aH|0)<(aG+aw|0)){av=aH;aD=aG;aE=aF}else{break}}if((aG|0)!=0){z=6762;break L9105}if((av|0)==2|(av|0)==6){z=6762;break L9105}}}while(0);if(au){aB=at;aC=aw;z=6764}else{aJ=aw;aK=at}}}while(0);if((z|0)==6762){z=0;c[13898]=ar+1;dl(aj,0);aL=aq;aM=ap;aN=ao;aO=an;aP=am;aQ=al;aR=s;break}L9120:do{if((z|0)==6764){z=0;if(as){aS=ap;aT=an;aU=ar;aV=u;z=6859;break L9094}au=c[10036]|0;B=0;while(1){if((B|0)>=(aC|0)){break}if((a[au+(aB+B|0)|0]|0)==(a[B+130496|0]|0)){B=B+1|0}else{aJ=aC;aK=aB;break L9120}}if((B|0)!=4){aJ=aC;aK=aB;break}c[13898]=ar+1;dl(t,0);aL=aq;aM=ap;aN=ao;aO=an;aP=am;aQ=al;aR=s;break L9094}}while(0);if(!((aJ|0)>0&(as^1))){aS=ap;aT=an;aU=ar;aV=u;z=6859;break}au=c[10036]|0;at=0;aw=0;aE=aK;while(1){if((a[at+212296|0]|0)==(a[au+(at+aE|0)|0]|0)){aW=aE;aX=aw}else{if((at|0)!=3){break}aW=aE-1|0;aX=1}aD=at+1|0;if((aD|0)<(aX+aJ|0)){at=aD;aw=aX;aE=aW}else{z=6776;break}}do{if((z|0)==6776){z=0;if((aX|0)==0){if(!((at|0)==5|(at|0)==2)){break}}c[13898]=ar+1;aE=is(f)|0;aw=c[aE>>2]|0;if((aw|0)==1){aY=+(c[aE+8>>2]|0)}else if((aw|0)==2){aY=+h[aE+8>>3]}else if((aw|0)==3){aY=+uz(c[aE+8>>2]|0,0)}else{z=6782;break L9085}if((c[ag>>2]|0)==3){uu(c[ah>>2]|0);c[ag>>2]=1}h[ai>>3]=aY;aL=aq;aM=ap;aN=ao;aO=an;aP=am;aQ=al;aR=s;break L9094}}while(0);if(!((aJ|0)>0&(as^1))){aS=ap;aT=an;aU=ar;aV=u;z=6859;break}at=c[10036]|0;aE=0;aw=0;au=aK;while(1){if((a[aE+211736|0]|0)==(a[at+(aE+au|0)|0]|0)){aZ=au;a_=aw}else{if((aE|0)!=4){aS=ap;aT=an;aU=ar;aV=u;z=6859;break L9094}aZ=au-1|0;a_=1}aD=aE+1|0;if((aD|0)<(a_+aJ|0)){aE=aD;aw=a_;au=aZ}else{break}}if((a_|0)==0){if(!((aE|0)==3|(aE|0)==5)){aS=ap;aT=an;aU=ar;aV=u;z=6859;break}}a$=ar+1|0;c[13898]=a$;au=(u|0)>(a$|0);L9161:do{if(au){do{if((a[K+(a$*40&-1)|0]&1)!=0){aw=c[K+(a$*40&-1)+36>>2]|0;at=K+(a$*40&-1)+32|0;aD=c[10036]|0;C=0;while(1){if((C|0)>=(aw|0)){z=6799;break}if((a[aD+((c[at>>2]|0)+C|0)|0]|0)==(a[C+150688|0]|0)){C=C+1|0}else{z=6800;break}}if((z|0)==6799){z=0;if((C|0)==2|au^1){z=6806;break L9161}else{break}}else if((z|0)==6800){z=0;if(au){break}else{z=6806;break L9161}}}}while(0);B=(a[K+(a$*40&-1)|0]&1)==0;if(B){z=6963;break L9085}at=c[K+(a$*40&-1)+36>>2]|0;aD=K+(a$*40&-1)+32|0;aw=c[10036]|0;av=0;while(1){if((av|0)>=(at|0)){z=6805;break}if((a[aw+((c[aD>>2]|0)+av|0)|0]|0)==(a[av+103664|0]|0)){av=av+1|0}else{break}}if((z|0)==6805){z=0;if((av|0)==1){z=6806;break}}if(B){z=6962;break L9085}aD=c[K+(a$*40&-1)+36>>2]|0;aw=K+(a$*40&-1)+32|0;at=c[10036]|0;aH=0;while(1){if((aH|0)>=(aD|0)){z=6811;break}if((a[at+((c[aw>>2]|0)+aH|0)|0]|0)==(a[aH+211336|0]|0)){aH=aH+1|0}else{break}}do{if((z|0)==6811){z=0;if((aH|0)!=2){break}c[af>>2]=1;break L9161}}while(0);if(B){z=6964;break L9085}aH=c[K+(a$*40&-1)+36>>2]|0;aw=K+(a$*40&-1)+32|0;at=c[10036]|0;aD=0;while(1){if((aD|0)>=(aH|0)){break}if((a[at+((c[aw>>2]|0)+aD|0)|0]|0)==(a[aD+210848|0]|0)){aD=aD+1|0}else{z=6965;break L9085}}if((aD|0)!=2){z=6966;break L9085}c[af>>2]=2}else{z=6806}}while(0);if((z|0)==6806){z=0;c[af>>2]=0}c[13898]=(c[13898]|0)+1;aL=aq;aM=ap;aN=ao;aO=an;aP=am;aQ=al;aR=s}else if((d|0)==2){au=(u|0)>(ar|0);L9197:do{if(au){aE=c[K+(ar*40&-1)+36>>2]|0;aw=K+(ar*40&-1)+32|0;if(as){a0=c[aw>>2]|0;a1=aE;break}at=c[10036]|0;aH=0;while(1){if((aH|0)>=(aE|0)){break}if((a[at+((c[aw>>2]|0)+aH|0)|0]|0)==(a[aH+95280|0]|0)){aH=aH+1|0}else{z=6682;break L9197}}if((aH|0)==2){z=6690}else{z=6682}}else{z=6682}}while(0);L9206:do{if((z|0)==6682){z=0;aw=c[K+(ar*40&-1)+36>>2]|0;at=c[K+(ar*40&-1)+32>>2]|0;L9208:do{if((aw|0)>0&(as^1)){aE=c[10036]|0;aD=0;B=0;av=at;while(1){if((a[aD+185064|0]|0)==(a[aE+(aD+av|0)|0]|0)){a2=av;a3=B}else{if((aD|0)!=3){break L9208}a2=av-1|0;a3=1}a4=aD+1|0;if((a4|0)<(a3+aw|0)){aD=a4;B=a3;av=a2}else{break}}if((a3|0)!=0){z=6690;break L9206}if((aD|0)==2|(aD|0)==6){z=6690;break L9206}}}while(0);if(au){a0=at;a1=aw}else{aS=ap;aT=an;aU=ar;aV=u;z=6859;break L9094}}}while(0);if((z|0)==6690){z=0;c[13898]=ar+1;dl(ae,0);aL=aq;aM=ap;aN=ao;aO=an;aP=am;aQ=al;aR=s;break}L9222:do{if(as){z=6697}else{aH=c[10036]|0;av=0;while(1){if((av|0)>=(a1|0)){break}if((a[aH+(a0+av|0)|0]|0)==(a[av+130496|0]|0)){av=av+1|0}else{z=6697;break L9222}}if((av|0)!=4){z=6697}}}while(0);do{if((z|0)==6697){z=0;if(!au){aS=ap;aT=an;aU=ar;aV=u;z=6859;break L9094}if(as){aS=ap;aT=an;aU=ar;aV=u;z=6859;break L9094}aH=c[10036]|0;aw=0;while(1){if((aw|0)>=(a1|0)){z=6702;break}if((a[aH+(a0+aw|0)|0]|0)==(a[aw+184696|0]|0)){aw=aw+1|0}else{break}}if((z|0)==6702){z=0;if((aw|0)==6){break}}if(!au){aS=ap;aT=an;aU=ar;aV=u;z=6859;break L9094}if(as){aS=ap;aT=an;aU=ar;aV=u;z=6859;break L9094}aH=c[10036]|0;av=0;while(1){if((av|0)>=(a1|0)){break}if((a[aH+(a0+av|0)|0]|0)==(a[av+184328|0]|0)){av=av+1|0}else{aS=ap;aT=an;aU=ar;aV=u;z=6859;break L9094}}if((av|0)!=3){aS=ap;aT=an;aU=ar;aV=u;z=6859;break L9094}aw=ar+1|0;c[13898]=aw;if((u|0)<=(aw|0)){a5=aw;z=6948;break L9085}if((a[K+(aw*40&-1)|0]&1)==0){a5=aw;z=6946;break L9085}at=c[K+(aw*40&-1)+36>>2]|0;B=K+(aw*40&-1)+32|0;aE=0;while(1){if((aE|0)>=(at|0)){break}if((a[aH+((c[B>>2]|0)+aE|0)|0]|0)==(a[aE+78280|0]|0)){aE=aE+1|0}else{a5=aw;z=6952;break L9085}}if((aE|0)!=1){a5=aw;z=6953;break L9085}c[13898]=ar+2;B=is(j)|0;aH=c[B>>2]|0;if((aH|0)==1){a6=+(c[B+8>>2]|0)}else if((aH|0)==2){a6=+h[B+8>>3]}else if((aH|0)==3){a6=+uz(c[B+8>>2]|0,0)}else{z=6720;break L9085}if((c[Z>>2]|0)==3){uu(c[_>>2]|0);c[Z>>2]=1}if(+P(+a6)>1.0e3){z=6724;break L9085}h[$>>3]=a6;B=c[13898]|0;aH=B+1|0;c[13898]=aH;if((c[8272]|0)<=(B|0)){a5=aH;z=6956;break L9085}at=c[1054]|0;if((a[at+(B*40&-1)|0]&1)==0){a5=aH;z=6957;break L9085}av=c[at+(B*40&-1)+36>>2]|0;C=at+(B*40&-1)+32|0;B=c[10036]|0;at=0;while(1){if((at|0)>=(av|0)){break}if((a[B+((c[C>>2]|0)+at|0)|0]|0)==(a[at+183584|0]|0)){at=at+1|0}else{a5=aH;z=6954;break L9085}}if((at|0)!=1){a5=aH;z=6955;break L9085}C=is(g)|0;B=c[C>>2]|0;if((B|0)==1){a7=+(c[C+8>>2]|0)}else if((B|0)==2){a7=+h[C+8>>3]}else if((B|0)==3){a7=+uz(c[C+8>>2]|0,0)}else{z=6735;break L9085}if((c[aa>>2]|0)==3){uu(c[ab>>2]|0);c[aa>>2]=1}if(+P(+a7)>1.0e3){z=6739;break L9085}h[ac>>3]=a7;C=c[13898]|0;B=C+1|0;c[13898]=B;if((c[8272]|0)<=(C|0)){a5=B;z=6947;break L9085}av=c[1054]|0;if((a[av+(C*40&-1)|0]&1)==0){a5=B;z=6951;break L9085}aw=c[av+(C*40&-1)+36>>2]|0;aE=av+(C*40&-1)+32|0;C=c[10036]|0;av=0;while(1){if((av|0)>=(aw|0)){break}if((a[C+((c[aE>>2]|0)+av|0)|0]|0)==(a[av+78864|0]|0)){av=av+1|0}else{a5=B;z=6949;break L9085}}if((av|0)==1){aL=aq;aM=ap;aN=ao;aO=an;aP=am;aQ=al;aR=s;break L9094}else{a5=B;z=6950;break L9085}}}while(0);c[13898]=ar+1;dl(ad,0);aL=aq;aM=ap;aN=ao;aO=an;aP=am;aQ=al;aR=s}else if((d|0)==1){au=(u|0)>(ar|0);L9285:do{if(au){do{if(!as){aE=c[K+(ar*40&-1)+36>>2]|0;C=K+(ar*40&-1)+32|0;aw=c[10036]|0;aH=0;while(1){if((aH|0)>=(aE|0)){z=6631;break}if((a[aw+((c[C>>2]|0)+aH|0)|0]|0)==(a[aH+188576|0]|0)){aH=aH+1|0}else{break}}do{if((z|0)==6631){z=0;if((aH|0)!=4){break}c[13898]=ar+1;dl(J,0);a8=c[13898]|0;C=(c[8272]|0)>(a8|0);if(!C){z=6967;break L9085}aw=c[1054]|0;L9296:do{if((a[aw+(a8*40&-1)|0]&1)==0){z=6640}else{aE=c[aw+(a8*40&-1)+36>>2]|0;aD=aw+(a8*40&-1)+32|0;at=c[10036]|0;a4=0;while(1){if((a4|0)>=(aE|0)){z=6637;break}if((a[at+((c[aD>>2]|0)+a4|0)|0]|0)==(a[a4+187176|0]|0)){a4=a4+1|0}else{break}}do{if((z|0)==6637){z=0;if((a4|0)!=2){break}c[13898]=a8+1;dl(I,0);break L9296}}while(0);if(C){z=6640}else{z=6970;break L9085}}}while(0);if((z|0)==6640){z=0;C=c[1054]|0;if((a[C+(a8*40&-1)|0]&1)==0){z=6971;break L9085}aw=c[C+(a8*40&-1)+36>>2]|0;a4=C+(a8*40&-1)+32|0;C=c[10036]|0;aD=0;while(1){if((aD|0)>=(aw|0)){break}if((a[C+((c[a4>>2]|0)+aD|0)|0]|0)==(a[aD+186688|0]|0)){aD=aD+1|0}else{z=6968;break L9085}}if((aD|0)!=3){z=6969;break L9085}c[13898]=a8+1;dl(I,c[F>>2]|0);if((c[F>>2]|0)!=(c[H>>2]|0)){z=6958;break L9085}if((c[M>>2]|0)!=(c[G>>2]|0)){z=6959;break L9085}h[x>>3]=+h[y>>3]+ +h[x>>3];h[D>>3]=+h[b>>3]+ +h[D>>3]}c[l>>2]=0;aL=aq;aM=ap;aN=ao;aO=1;aP=am;aQ=al;aR=s;break L9094}}while(0);if(!au){z=6659;break L9285}if(as){break}aH=c[K+(ar*40&-1)+36>>2]|0;a4=K+(ar*40&-1)+32|0;C=c[10036]|0;aw=0;while(1){if((aw|0)>=(aH|0)){break}if((a[C+((c[a4>>2]|0)+aw|0)|0]|0)==(a[aw+95280|0]|0)){aw=aw+1|0}else{z=6659;break L9285}}if((aw|0)==2){z=6667;break L9285}else{z=6659;break L9285}}}while(0);a9=c[K+(ar*40&-1)+36>>2]|0;ba=c[K+(ar*40&-1)+32>>2]|0}else{z=6659}}while(0);L9324:do{if((z|0)==6659){z=0;B=c[K+(ar*40&-1)+36>>2]|0;av=c[K+(ar*40&-1)+32>>2]|0;if(!((B|0)>0&(as^1))){a9=B;ba=av;break}a4=c[10036]|0;C=0;aH=0;at=av;while(1){if((a[C+185064|0]|0)==(a[a4+(C+at|0)|0]|0)){bb=at;bc=aH}else{if((C|0)!=3){a9=B;ba=av;break L9324}bb=at-1|0;bc=1}aE=C+1|0;if((aE|0)<(bc+B|0)){C=aE;aH=bc;at=bb}else{break}}if((bc|0)!=0){z=6667;break}if((C|0)==2|(C|0)==6){z=6667}else{a9=B;ba=av}}}while(0);if((z|0)==6667){z=0;c[13898]=ar+1;dl(L,0);c[l>>2]=1;aL=aq;aM=ap;aN=1;aO=an;aP=am;aQ=al;aR=s;break}if(!au){aS=ap;aT=an;aU=ar;aV=u;z=6859;break}if(as){aS=ap;aT=an;aU=ar;aV=u;z=6859;break}at=c[10036]|0;aH=0;while(1){if((aH|0)>=(a9|0)){break}if((a[at+(ba+aH|0)|0]|0)==(a[aH+130496|0]|0)){aH=aH+1|0}else{aS=ap;aT=an;aU=ar;aV=u;z=6859;break L9094}}if((aH|0)!=4){aS=ap;aT=an;aU=ar;aV=u;z=6859;break}c[13898]=ar+1;dl(w,0);c[l>>2]=1;aL=aq;aM=ap;aN=1;aO=an;aP=am;aQ=al;aR=s}else if((d|0)==4){L9346:do{if((u|0)<=(ar|0)|as){bd=ap}else{at=c[K+(ar*40&-1)+36>>2]|0;au=K+(ar*40&-1)+32|0;a4=c[10036]|0;aE=0;while(1){if((aE|0)>=(at|0)){break}if((a[a4+((c[au>>2]|0)+aE|0)|0]|0)==(a[aE+188576|0]|0)){aE=aE+1|0}else{bd=ap;break L9346}}if((aE|0)!=4){bd=ap;break}c[13898]=ar+1;au=db(c[p>>2]|0,40,182592)|0;c[p>>2]=au;dl(au,0);c[ak>>2]=1;bd=1}}while(0);aH=an;L9354:while(1){be=c[13898]|0;bf=c[8272]|0;au=(bf|0)>(be|0);if(!au){break}a4=c[1054]|0;do{if((a[a4+(be*40&-1)|0]&1)==0){z=6835}else{at=c[a4+(be*40&-1)+36>>2]|0;av=a4+(be*40&-1)+32|0;B=c[10036]|0;C=0;while(1){if((C|0)>=(at|0)){z=6833;break}if((a[B+((c[av>>2]|0)+C|0)|0]|0)==(a[C+187176|0]|0)){C=C+1|0}else{break}}if((z|0)==6833){z=0;if((C|0)==2){break}}if(au){z=6835}else{break L9354}}}while(0);if((z|0)==6835){z=0;au=c[1054]|0;if((a[au+(be*40&-1)|0]&1)==0){break}a4=c[au+(be*40&-1)+36>>2]|0;aE=au+(be*40&-1)+32|0;au=c[10036]|0;av=0;while(1){if((av|0)>=(a4|0)){break}if((a[au+((c[aE>>2]|0)+av|0)|0]|0)==(a[av+186688|0]|0)){av=av+1|0}else{break L9354}}if((av|0)!=3){break}}bg=c[p>>2]|0;if(!bd){z=6857;break L9085}c[p>>2]=db(bg,((c[ak>>2]|0)*40&-1)+40|0,182592)|0;aE=c[13898]|0;c[13898]=aE+1;L9374:do{if((c[8272]|0)>(aE|0)){au=c[1054]|0;if((a[au+(aE*40&-1)|0]&1)==0){z=6846;break}a4=c[au+(aE*40&-1)+36>>2]|0;B=au+(aE*40&-1)+32|0;au=c[10036]|0;at=0;while(1){if((at|0)>=(a4|0)){break}if((a[au+((c[B>>2]|0)+at|0)|0]|0)==(a[at+187176|0]|0)){at=at+1|0}else{z=6846;break L9374}}B=c[ak>>2]|0;au=c[p>>2]|0;a4=au+(B*40&-1)|0;if((at|0)!=2){bh=B;bi=au;bj=a4;z=6849;break}dl(a4,0)}else{z=6846}}while(0);if((z|0)==6846){z=0;aE=c[ak>>2]|0;av=c[p>>2]|0;bh=aE;bi=av;bj=av+(aE*40&-1)|0;z=6849}if((z|0)==6849){z=0;dl(bj,c[bi>>2]|0);aE=c[p>>2]|0;av=bh-1|0;if((c[aE+(bh*40&-1)>>2]|0)!=(c[aE+(av*40&-1)>>2]|0)){z=6972;break L9085}if((c[aE+(bh*40&-1)+4>>2]|0)!=(c[aE+(av*40&-1)+4>>2]|0)){z=6973;break L9085}a4=aE+(bh*40&-1)+16|0;h[a4>>3]=+h[aE+(av*40&-1)+16>>3]+ +h[a4>>3];a4=c[p>>2]|0;aE=a4+(bh*40&-1)+24|0;h[aE>>3]=+h[a4+(av*40&-1)+24>>3]+ +h[aE>>3]}c[ak>>2]=(c[ak>>2]|0)+1;aH=1}if(!aH){aS=bd;aT=0;aU=be;aV=bf;z=6859;break}aE=c[p>>2]|0;if((uG(aE+(((c[ak>>2]|0)-1|0)*40&-1)|0,aE|0,40)|0)==0){aS=bd;aT=1;aU=be;aV=bf;z=6859;break}aI(181096,44,1,c[m>>2]|0);aE=db(c[p>>2]|0,((c[ak>>2]|0)*40&-1)+40|0,182592)|0;av=aE;c[p>>2]=av;a4=av+((c[ak>>2]|0)*40&-1)|0;c[a4>>2]=c[aE>>2];c[a4+4>>2]=c[aE+4>>2];c[a4+8>>2]=c[aE+8>>2];c[a4+12>>2]=c[aE+12>>2];c[a4+16>>2]=c[aE+16>>2];c[a4+20>>2]=c[aE+20>>2];c[a4+24>>2]=c[aE+24>>2];c[a4+28>>2]=c[aE+28>>2];c[a4+32>>2]=c[aE+32>>2];c[a4+36>>2]=c[aE+36>>2];c[ak>>2]=(c[ak>>2]|0)+1;aS=bd;aT=1;aU=c[13898]|0;aV=c[8272]|0;z=6859}else{z=6858;break L9085}}while(0);L9392:do{if((z|0)==6859){z=0;K=(aV|0)>(aU|0);L9394:do{if(K){as=c[1054]|0;if((a[as+(aU*40&-1)|0]&1)!=0){aE=c[as+(aU*40&-1)+36>>2]|0;a4=as+(aU*40&-1)+32|0;as=c[10036]|0;av=0;while(1){if((av|0)>=(aE|0)){z=6864;break}if((a[as+((c[a4>>2]|0)+av|0)|0]|0)==(a[av+150856|0]|0)){av=av+1|0}else{break}}do{if((z|0)==6864){z=0;if((av|0)!=5){break}c[o>>2]=1;c[13898]=(c[13898]|0)+1;aL=aq;aM=aS;aN=ao;aO=aT;aP=am;aQ=al;aR=s;break L9392}}while(0);if(!K){z=6874;break}}av=c[1054]|0;L9406:do{if((a[av+(aU*40&-1)|0]&1)!=0){a4=c[av+(aU*40&-1)+36>>2]|0;as=av+(aU*40&-1)+32|0;aE=c[10036]|0;au=0;while(1){if((au|0)>=(a4|0)){break}if((a[aE+((c[as>>2]|0)+au|0)|0]|0)==(a[au+150704|0]|0)){au=au+1|0}else{break L9406}}if((au|0)!=4){break}c[o>>2]=0;c[13898]=(c[13898]|0)+1;aL=aq;aM=aS;aN=ao;aO=aT;aP=am;aQ=al;aR=s;break L9392}}while(0);if(!K){z=6874;break}av=c[1054]|0;as=a[av+(aU*40&-1)|0]|0;if((as&1)==0){bk=av;bl=as;break}aE=c[av+(aU*40&-1)+36>>2]|0;a4=av+(aU*40&-1)+32|0;at=c[10036]|0;B=0;while(1){if((B|0)>=(aE|0)){break}if((a[at+((c[a4>>2]|0)+B|0)|0]|0)==(a[B+121920|0]|0)){B=B+1|0}else{bk=av;bl=as;break L9394}}if((B|0)!=6){bk=av;bl=as;break}c[o>>2]=-1;c[13898]=(c[13898]|0)+1;aL=aq;aM=aS;aN=ao;aO=aT;aP=am;aQ=al;aR=s;break L9392}else{z=6874}}while(0);if((z|0)==6874){z=0;K=c[1054]|0;bk=K;bl=a[K+(aU*40&-1)|0]|0}K=c[bk+(aU*40&-1)+36>>2]|0;L9424:do{if((bl&1)!=0&(K|0)>0){aH=c[10036]|0;a4=0;at=0;aE=c[bk+(aU*40&-1)+32>>2]|0;while(1){if((a[a4+184456|0]|0)==(a[aH+(a4+aE|0)|0]|0)){bm=aE;bn=at}else{if((a4|0)!=3){break L9424}bm=aE-1|0;bn=1}C=a4+1|0;if((C|0)<(bn+K|0)){a4=C;at=bn;aE=bm}else{break}}if((bn|0)==0){if(!((a4|0)==2|(a4|0)==7)){break}}if(Y){z=6890;break L9085}c[O>>2]=-7;c[n>>2]=3;c[13898]=(c[13898]|0)+1;aL=aq;aM=aS;aN=ao;aO=aT;aP=am;aQ=1;aR=1;break L9392}}while(0);if(s){bo=aU}else{K=(c[S>>2]|0)==1?49176:49488;if(T){hJ(q,c[U>>2]|0,c[V>>2]|0,c[W>>2]|0,X)}else{hJ(q,c[K>>2]|0,c[K+4>>2]|0,c[K+8>>2]|0,K+16|0)}if((c[13898]|0)==(ar|0)){bo=ar}else{aL=aq;aM=aS;aN=ao;aO=aT;aP=am;aQ=al;aR=1;break}}if(al){bp=bo}else{K=c[1054]|0;aE=a[K+(bo*40&-1)|0]|0;L9447:do{if((c[8272]|0)>(bo|0)){if((aE&1)==0){z=6904;break}at=c[K+(bo*40&-1)+36>>2]|0;aH=K+(bo*40&-1)+32|0;as=c[10036]|0;av=0;while(1){if((av|0)>=(at|0)){break}if((a[as+((c[aH>>2]|0)+av|0)|0]|0)==(a[av+179168|0]|0)){av=av+1|0}else{z=6904;break L9447}}if((av|0)==2){z=6912}else{z=6904}}else{z=6904}}while(0);L9454:do{if((z|0)==6904){z=0;aH=c[K+(bo*40&-1)+36>>2]|0;if(!((aE&1)!=0&(aH|0)>0)){break}as=c[10036]|0;at=0;a4=0;B=c[K+(bo*40&-1)+32>>2]|0;while(1){if((a[at+178592|0]|0)==(a[as+(at+B|0)|0]|0)){bq=B;br=a4}else{if((at|0)!=5){break L9454}bq=B-1|0;br=1}C=at+1|0;if((C|0)<(br+aH|0)){at=C;a4=br;B=bq}else{break}}if((br|0)!=0){z=6912;break}if((at|0)==4|(at|0)==9){z=6912}}}while(0);do{if((z|0)==6912){z=0;a[N]=1;c[O>>2]=-2;hI(Q,5);if((c[R>>2]|0)!=0){break}c[O>>2]=-7}}while(0);if((c[13898]|0)==(ar|0)){bp=ar}else{aL=aq;aM=aS;aN=ao;aO=aT;aP=am;aQ=1;aR=s;break}}if(am){bs=bp;z=6960;break L9085}K=c[1054]|0;aE=a[K+(bp*40&-1)|0]|0;L9471:do{if((c[8272]|0)>(bp|0)){if((aE&1)==0){z=6922;break}B=c[K+(bp*40&-1)+36>>2]|0;a4=K+(bp*40&-1)+32|0;aH=c[10036]|0;as=0;while(1){if((as|0)>=(B|0)){break}if((a[aH+((c[a4>>2]|0)+as|0)|0]|0)==(a[as+128296|0]|0)){as=as+1|0}else{z=6922;break L9471}}if((as|0)==2){z=6930}else{z=6922}}else{z=6922}}while(0);L9478:do{if((z|0)==6922){z=0;a4=c[K+(bp*40&-1)+36>>2]|0;if(!((aE&1)!=0&(a4|0)>0)){bt=aq;break}aH=c[10036]|0;B=0;at=0;av=c[K+(bp*40&-1)+32>>2]|0;while(1){if((a[B+128400|0]|0)==(a[aH+(B+av|0)|0]|0)){bu=av;bv=at}else{if((B|0)!=5){bt=aq;break L9478}bu=av-1|0;bv=1}C=B+1|0;if((C|0)<(bv+a4|0)){B=C;at=bv;av=bu}else{break}}if((bv|0)!=0){z=6930;break}if((B|0)==4|(B|0)==9){z=6930}else{bt=aq}}}while(0);do{if((z|0)==6930){z=0;c[13898]=bp+1;K=is(k)|0;aE=c[K>>2]|0;if((aE|0)==2){bw=+h[K+8>>3]}else if((aE|0)==3){bw=+uz(c[K+8>>2]|0,0)}else if((aE|0)==1){bw=+(c[K+8>>2]|0)}else{z=6934;break L9085}if((c[E>>2]|0)!=3){bt=bw;break}uu(c[A>>2]|0);c[E>>2]=1;bt=bw}}while(0);if((c[13898]|0)==(ar|0)){bs=ar;z=6961;break L9085}else{aL=bt;aM=aS;aN=ao;aO=aT;aP=1;aQ=al;aR=s}}}while(0);K=c[13898]|0;aE=c[8272]|0;if((K|0)<(aE|0)){s=aR;al=aQ;am=aP;an=aO;ao=aN;ap=aM;aq=aL;ar=K;u=aE}else{ax=aP;ay=aO;az=aN;aA=aL;z=6939;break}}if((z|0)==6739){uf((c[13898]|0)-1|0,183928,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6962){uf(a$,210136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6963){uf(a$,210136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6964){uf(a$,210136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6965){uf(a$,210136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6966){uf(a$,210136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6967){uf(a8,185568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6968){uf(a8,185568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6969){uf(a8,185568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6970){uf(a8,185568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6971){uf(a8,185568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6972){bx=c[13898]|0;uf(bx,186064,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6973){bx=c[13898]|0;uf(bx,186064,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6857){uu(bg);c[p>>2]=0;c[ak>>2]=0;uf(c[13898]|0,180752,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6858){uf(ar,180328,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6952){by=a5-1|0;c[13898]=by;uf(by,183096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6953){by=a5-1|0;c[13898]=by;uf(by,183096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6954){by=a5-1|0;c[13898]=by;uf(by,183096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6955){by=a5-1|0;c[13898]=by;uf(by,183096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6956){by=a5-1|0;c[13898]=by;uf(by,183096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6957){by=a5-1|0;c[13898]=by;uf(by,183096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6958){bz=c[13898]|0;uf(bz,186064,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6959){bz=c[13898]|0;uf(bz,186064,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6960){uf(bs,178144,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6961){uf(bs,178144,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6934){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6939){if(ax){h[r+64>>3]=aA}if(az&ay){uf(-1,177888,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{i=e;return}}else if((z|0)==6720){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6946){by=a5-1|0;c[13898]=by;uf(by,183096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6947){by=a5-1|0;c[13898]=by;uf(by,183096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6948){by=a5-1|0;c[13898]=by;uf(by,183096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6949){by=a5-1|0;c[13898]=by;uf(by,183096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6950){by=a5-1|0;c[13898]=by;uf(by,183096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6951){by=a5-1|0;c[13898]=by;uf(by,183096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6782){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6724){uf((c[13898]|0)-1|0,183928,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6735){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==6890){uf(aU,179496,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function jy(){var b=0,d=0,e=0,f=0,j=0,k=0,l=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0.0,N=0,O=0,P=0,Q=0,R=0,S=0.0,T=0,U=0,V=0.0,W=0,X=0,Y=0,Z=0,_=0,$=0.0,aa=0,ab=0.0,ac=0.0,ad=0.0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0.0;b=i;i=i+120|0;d=b|0;e=b+24|0;f=b+48|0;j=b+72|0;k=b+96|0;l=c[13898]|0;o=l+1|0;c[13898]=o;p=c[1054]|0;q=c[p+(o*40&-1)+36>>2]|0;r=c[p+(o*40&-1)+32>>2]|0;s=(a[p+(o*40&-1)|0]&1)==0;t=(q|0)>0;u=c[10036]|0;w=21960;x=96232;L9545:while(1){L9547:do{if(!s){if(t){y=0;z=0;A=r;while(1){B=a[x+y|0]|0;if(B<<24>>24==(a[u+(y+A|0)|0]|0)){C=A;D=z}else{if(B<<24>>24!=36){break L9547}C=A-1|0;D=1}E=y+1|0;if((E|0)<(D+q|0)){y=E;z=D;A=C}else{break}}if((D|0)==0){F=E}else{G=w;break L9545}}else{F=0}A=a[x+F|0]|0;if((A<<24>>24|0)==36|(A<<24>>24|0)==0){G=w;break L9545}}}while(0);A=w+8|0;z=c[A>>2]|0;if((z|0)==0){G=A;break}else{w=A;x=z}}x=c[G+4>>2]|0;if((x|0)==0){H=75960;I=c[13898]|0;uf(I,H,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}G=l+2|0;c[13898]=G;do{if((x|0)==95){if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}if((c[17578]|0)==1){w=c[m>>2]|0;cf(w|0,198344,(v=i,i=i+8|0,c[v>>2]=57024,v)|0)}w=c[m>>2]|0;aF(9,w|0);je(c[m>>2]|0,8)}else if((x|0)==30){L9572:do{if((G|0)<(c[8272]|0)){L9574:do{if((a[p+(G*40&-1)|0]&1)!=0){w=c[p+(G*40&-1)+36>>2]|0;F=p+(G*40&-1)+32|0;E=0;while(1){if((E|0)>=(w|0)){break}if((a[u+((c[F>>2]|0)+E|0)|0]|0)==(a[E+103664|0]|0)){E=E+1|0}else{break L9574}}if((E|0)==1){J=0;break L9572}}}while(0);F=is(k)|0;w=c[F>>2]|0;if((w|0)==2){K=+h[F+8>>3]}else if((w|0)==3){K=+uz(c[F+8>>2]|0,0)}else if((w|0)==1){K=+(c[F+8>>2]|0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}F=k|0;if((c[F>>2]|0)==3){uu(c[k+8>>2]|0);c[F>>2]=1}F=~~K;if((F|0)<1){H=208936}else{J=F;break}I=c[13898]|0;uf(I,H,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{J=0}}while(0);aF(10,c[m>>2]|0);jM(J)}else if((x|0)==65){if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}if((c[16718]|0)==1){F=c[m>>2]|0;cf(F|0,198344,(v=i,i=i+8|0,c[v>>2]=56904,v)|0)}aF(9,c[m>>2]|0);je(c[m>>2]|0,3)}else if((x|0)==18){if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}cf(c[m>>2]|0,114368,(v=i,i=i+16|0,c[v>>2]=24544,c[v+8>>2]=24595,v)|0)}else if((x|0)==32){L9604:do{if((G|0)<(c[8272]|0)){L9606:do{if((a[p+(G*40&-1)|0]&1)!=0){F=c[p+(G*40&-1)+36>>2]|0;w=p+(G*40&-1)+32|0;D=0;while(1){if((D|0)>=(F|0)){break}if((a[u+((c[w>>2]|0)+D|0)|0]|0)==(a[D+103664|0]|0)){D=D+1|0}else{break L9606}}if((D|0)==1){L=7233;break L9604}}}while(0);w=is(e)|0;F=c[w>>2]|0;if((F|0)==2){M=+h[w+8>>3]}else if((F|0)==3){M=+uz(c[w+8>>2]|0,0)}else if((F|0)==1){M=+(c[w+8>>2]|0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}w=e|0;if((c[w>>2]|0)==3){uu(c[e+8>>2]|0);c[w>>2]=1}w=~~M;if((w|0)<1){H=208936;I=c[13898]|0;uf(I,H,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{F=c[m>>2]|0;aF(10,F|0);N=w;O=0;break}}else{L=7233}}while(0);if((L|0)==7233){w=c[m>>2]|0;aF(10,w|0);w=c[m>>2]|0;F=c[8798]|0;cf(w|0,76832,(v=i,i=i+8|0,c[v>>2]=F,v)|0);N=0;O=1}F=c[10816]|0;if((F|0)==0){P=0}else{w=0;E=F;while(1){F=c[E+4>>2]|0;if(O){Q=F;L=7237}else{if((F|0)==(N|0)){Q=N;L=7237}else{R=w}}if((L|0)==7237){L=0;F=c[m>>2]|0;cf(F|0,76280,(v=i,i=i+8|0,c[v>>2]=Q,v)|0);ji(c[m>>2]|0,E+8|0,1);F=c[m>>2]|0;aF(10,F|0);R=1}F=c[E>>2]|0;if((F|0)==0){P=R;break}else{w=R;E=F}}}if((N|0)<1|P){break}uf(c[13898]|0,75640,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((x|0)==39|(x|0)==40|(x|0)==41|(x|0)==42|(x|0)==38){jO()}else if((x|0)==58){if(!(a[928]|0)){E=c[m>>2]|0;aF(10,E|0)}E=c[8244]|0;w=c[m>>2]|0;if((E|0)==0){aI(134568,26,1,w|0);break}else{cf(w|0,134696,(v=i,i=i+8|0,c[v>>2]=E,v)|0);break}}else if((x|0)==60){jQ()}else if((x|0)==62){jW()}else if((x|0)==79){if(!(a[928]|0)){E=c[m>>2]|0;aF(10,E|0)}cf(c[m>>2]|0,172840,(v=i,i=i+8|0,c[v>>2]=(a[30528]&1)!=0?172456:172176,v)|0)}else if((x|0)==63){c[13898]=o;jR()}else if((x|0)==77){if(!(a[928]|0)){E=c[m>>2]|0;aF(10,E|0)}cf(c[m>>2]|0,167288,(v=i,i=i+8|0,h[v>>3]=+h[3818],v)|0)}else if((x|0)==59){if(!(a[928]|0)){E=c[m>>2]|0;aF(10,E|0)}cf(c[m>>2]|0,136080,(v=i,i=i+8|0,c[v>>2]=(a[32936]&1)!=0?172456:172176,v)|0)}else if((x|0)==61){jP()}else if((x|0)==110){if(!(a[928]|0)){E=c[m>>2]|0;aF(10,E|0)}E=(c[16546]|0)==1?141856:202784;cf(c[m>>2]|0,203352,(v=i,i=i+16|0,c[v>>2]=56880,c[v+8>>2]=E,v)|0)}else if((x|0)==129){if(!(a[928]|0)){E=c[m>>2]|0;aF(10,E|0)}E=(c[16374]|0)==1?141856:202784;cf(c[m>>2]|0,203352,(v=i,i=i+16|0,c[v>>2]=56856,c[v+8>>2]=E,v)|0)}else if((x|0)==101){if(!(a[928]|0)){E=c[m>>2]|0;aF(10,E|0)}E=(c[17234]|0)==1?141856:202784;cf(c[m>>2]|0,203352,(v=i,i=i+16|0,c[v>>2]=56976,c[v+8>>2]=E,v)|0)}else if((x|0)==149){if(!(a[928]|0)){E=c[m>>2]|0;aF(10,E|0)}if((c[17406]|0)==1){E=c[m>>2]|0;cf(E|0,198344,(v=i,i=i+8|0,c[v>>2]=57e3,v)|0)}aF(9,c[m>>2]|0);je(c[m>>2]|0,7)}else if((x|0)==19){if(!(a[928]|0)){E=c[m>>2]|0;aF(10,E|0)}cf(c[m>>2]|0,168248,(v=i,i=i+8|0,c[v>>2]=c[44936+(c[11252]<<2)>>2],v)|0);E=c[m>>2]|0;w=bA(2,0)|0;cf(E|0,167680,(v=i,i=i+8|0,c[v>>2]=w,v)|0)}else if((x|0)==21){jT()}else if((x|0)==22){if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}ur(2,0)}else if((x|0)==144){if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}if((c[16202]|0)==1){w=c[m>>2]|0;cf(w|0,198344,(v=i,i=i+8|0,c[v>>2]=56832,v)|0)}aF(9,c[m>>2]|0);je(c[m>>2]|0,0)}else if((x|0)==57){if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}S=+g[44];cf(c[m>>2]|0,183064,(v=i,i=i+16|0,h[v>>3]=+g[184],h[v+8>>3]=S,v)|0)}else if((x|0)==87){if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}w=c[3524]|0;E=c[m>>2]|0;if((w|0)==0){aI(183552,26,1,E|0);break}else{F=c[w>>2]|0;cf(E|0,183896,(v=i,i=i+16|0,c[v>>2]=F,c[v+8>>2]=13048,v)|0);break}}else if((x|0)==29){jJ()}else if((x|0)==153){jH(2)}else if((x|0)==14){H=134e3;I=c[13898]|0;uf(I,H,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((x|0)==107){if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}if((c[17234]|0)==1){F=c[m>>2]|0;cf(F|0,198344,(v=i,i=i+8|0,c[v>>2]=56976,v)|0)}aF(9,c[m>>2]|0);je(c[m>>2]|0,6)}else if((x|0)==3){if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}aI(174264,15,1,c[m>>2]|0);F=c[m>>2]|0;if(+h[9040]==1.0){aI(173624,8,1,F|0);break}else{aI(173192,8,1,F|0);break}}else if((x|0)==78){if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}cf(c[m>>2]|0,166928,(v=i,i=i+8|0,h[v>>3]=+h[3817],v)|0)}else if((x|0)==20){jS()}else if((x|0)==126){if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}if((c[17062]|0)==1){F=c[m>>2]|0;cf(F|0,198344,(v=i,i=i+8|0,c[v>>2]=56952,v)|0)}aF(9,c[m>>2]|0);je(c[m>>2]|0,5)}else if((x|0)==89|(x|0)==91|(x|0)==90|(x|0)==119){jZ(1,1,1,1,1,1)}else if((x|0)==48){j$(2)}else if((x|0)==52){j$(1)}else if((x|0)==54){j$(0)}else if((x|0)==68){j$(3)}else if((x|0)==46){j$(6)}else if((x|0)==50){j$(5)}else if((x|0)==93){if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}j6(179864,141856,4672);cf(c[m>>2]|0,197424,(v=i,i=i+8|0,c[v>>2]=(c[1166]|0)!=0?196800:196168,v)|0);F=c[m>>2]|0;if((c[1164]|0)==0){aI(193896,14,1,F|0);break}else{aI(195648,36,1,F|0);break}}else if((x|0)==88){cf(c[m>>2]|0,91616,(v=i,i=i+8|0,c[v>>2]=(a[13048]|0)!=0?13048:84080,v)|0)}else if((x|0)==96){if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}if((c[17750]|0)==1){F=c[m>>2]|0;cf(F|0,198344,(v=i,i=i+8|0,c[v>>2]=57048,v)|0)}aF(9,c[m>>2]|0);je(c[m>>2]|0,9)}else if((x|0)==15){j0()}else if((x|0)==70){if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}F=(c[16718]|0)==1?141856:202784;cf(c[m>>2]|0,203352,(v=i,i=i+16|0,c[v>>2]=56904,c[v+8>>2]=F,v)|0)}else if((x|0)==92){j_()}else if((x|0)==116){if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}if((c[16546]|0)==1){F=c[m>>2]|0;cf(F|0,198344,(v=i,i=i+8|0,c[v>>2]=56880,v)|0)}aF(9,c[m>>2]|0);je(c[m>>2]|0,2)}else if((x|0)==44){j1()}else if((x|0)==76){if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}cf(c[m>>2]|0,222616,(v=i,i=i+8|0,c[v>>2]=c[6924],v)|0)}else if((x|0)==97){j2()}else if((x|0)==117|(x|0)==111|(x|0)==114){jZ(1,0,0,1,0,0)}else if((x|0)==136|(x|0)==130|(x|0)==133){jZ(0,1,0,0,1,0)}else if((x|0)==145|(x|0)==139|(x|0)==142){jZ(0,0,1,0,0,0)}else if((x|0)==66|(x|0)==71|(x|0)==73){jZ(0,0,0,0,0,1)}else if((x|0)==147){j4(7)}else if((x|0)==108|(x|0)==102|(x|0)==105){jZ(0,0,0,1,0,0)}else if((x|0)==127|(x|0)==121|(x|0)==124){jZ(0,0,0,0,1,0)}else if((x|0)==45){cf(c[m>>2]|0,121216,(v=i,i=i+8|0,c[v>>2]=(a[33512]&1)!=0?150376:150208,v)|0)}else if((x|0)==23){jF()}else if((x|0)==16){F=c[10812]|0;aI(123576,26,1,c[m>>2]|0);if((F|0)==0){break}else{T=F}do{F=c[T+12>>2]|0;E=c[m>>2]|0;if((F|0)==0){w=c[T+4>>2]|0;cf(E|0,123120,(v=i,i=i+8|0,c[v>>2]=w,v)|0)}else{cf(E|0,123448,(v=i,i=i+8|0,c[v>>2]=F,v)|0)}T=c[T>>2]|0;}while((T|0)!=0)}else if((x|0)==82){if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}F=c[6350]|0;cf(c[m>>2]|0,174608,(v=i,i=i+16|0,c[v>>2]=c[6352],c[v+8>>2]=F,v)|0)}else if((x|0)==27){if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}F=c[9342]|0;cf(c[m>>2]|0,174888,(v=i,i=i+16|0,c[v>>2]=c[9344],c[v+8>>2]=F,v)|0)}else if((x|0)==135){if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}if((c[16374]|0)==1){F=c[m>>2]|0;cf(F|0,198344,(v=i,i=i+8|0,c[v>>2]=56856,v)|0)}aF(9,c[m>>2]|0);je(c[m>>2]|0,1)}else if((x|0)==34){if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}F=c[m>>2]|0;E=bA(2,0)|0;cf(F|0,146672,(v=i,i=i+8|0,c[v>>2]=E,v)|0);cf(c[m>>2]|0,144576,(v=i,i=i+8|0,c[v>>2]=c[44936+(c[11252]<<2)>>2],v)|0);E=c[m>>2]|0;F=bA(5,0)|0;cf(E|0,142976,(v=i,i=i+8|0,c[v>>2]=F,v)|0);F=c[8270]|0;cf(c[m>>2]|0,141432,(v=i,i=i+8|0,c[v>>2]=(F|0)!=0?F:139696,v)|0)}else if((x|0)==33){if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}uq(2,0)}else if((x|0)==151){if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}cf(c[m>>2]|0,203824,(v=i,i=i+8|0,h[v>>3]=+h[11],v)|0)}else if((x|0)==31){L9824:do{if((G|0)<(c[8272]|0)){L9826:do{if((a[p+(G*40&-1)|0]&1)!=0){F=c[p+(G*40&-1)+36>>2]|0;E=p+(G*40&-1)+32|0;w=0;while(1){if((w|0)>=(F|0)){break}if((a[u+((c[E>>2]|0)+w|0)|0]|0)==(a[w+103664|0]|0)){w=w+1|0}else{break L9826}}if((w|0)==1){U=0;break L9824}}}while(0);E=is(f)|0;F=c[E>>2]|0;if((F|0)==1){V=+(c[E+8>>2]|0)}else if((F|0)==3){V=+uz(c[E+8>>2]|0,0)}else if((F|0)==2){V=+h[E+8>>3]}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}E=f|0;if((c[E>>2]|0)==3){uu(c[f+8>>2]|0);c[E>>2]=1}E=~~V;if((E|0)<1){H=208936}else{U=E;break}I=c[13898]|0;uf(I,H,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{U=0}}while(0);aF(10,c[m>>2]|0);E=c[10820]|0;if((E|0)==0){W=0}else{F=(U|0)==0;D=0;C=E;while(1){E=c[C+4>>2]|0;if(F){X=E;L=7214}else{if((E|0)==(U|0)){X=U;L=7214}else{Y=D}}if((L|0)==7214){L=0;E=c[m>>2]|0;cf(E|0,75168,(v=i,i=i+8|0,c[v>>2]=X,v)|0);ji(c[m>>2]|0,C+8|0,1);E=c[m>>2]|0;aF(10,E|0);Y=1}E=c[C>>2]|0;if((E|0)==0){W=Y;break}else{D=Y;C=E}}}if((U|0)<1|W){break}uf(c[13898]|0,74736,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((x|0)==94){if(!(a[928]|0)){C=c[m>>2]|0;aF(10,C|0)}j6(179864,154440,4416)}else if((x|0)==113){if(!(a[928]|0)){C=c[m>>2]|0;aF(10,C|0)}j6(56880,202256,66456)}else if((x|0)==132){if(!(a[928]|0)){C=c[m>>2]|0;aF(10,C|0)}j6(56856,202256,65768)}else if((x|0)==80){if(!(a[928]|0)){C=c[m>>2]|0;aF(10,C|0)}C=c[m>>2]|0;D=c[7262]|0;do{if((D|0)==(c[n>>2]|0)){Z=89880}else{if((D|0)==0){Z=89256;break}F=c[7260]|0;Z=(D|0)!=(C|0)&(F|0)!=0?F:89256}}while(0);cf(C|0,134848,(v=i,i=i+8|0,c[v>>2]=Z,v)|0)}else if((x|0)==11){jB()}else if((x|0)==10|(x|0)==13|(x|0)==12){jC()}else if((x|0)==17){jD()}else if((x|0)==36){if(!(a[928]|0)){D=c[m>>2]|0;aF(10,D|0)}cf(c[m>>2]|0,113600,(v=i,i=i+8|0,c[v>>2]=(a[43472]&1)!=0?179864:211688,v)|0)}else if((x|0)==37){jE()}else if((x|0)==4){L9884:do{if((G|0)<(c[8272]|0)){L9886:do{if((a[p+(G*40&-1)|0]&1)!=0){D=c[p+(G*40&-1)+36>>2]|0;F=p+(G*40&-1)+32|0;E=0;while(1){if((E|0)>=(D|0)){break}if((a[u+((c[F>>2]|0)+E|0)|0]|0)==(a[E+103664|0]|0)){E=E+1|0}else{break L9886}}if((E|0)==1){_=0;break L9884}}}while(0);F=is(j)|0;D=c[F>>2]|0;if((D|0)==2){$=+h[F+8>>3]}else if((D|0)==3){$=+uz(c[F+8>>2]|0,0)}else if((D|0)==1){$=+(c[F+8>>2]|0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}F=j|0;if((c[F>>2]|0)==3){uu(c[j+8>>2]|0);c[F>>2]=1}F=~~$;if((F|0)<1){H=208936}else{_=F;break}I=c[13898]|0;uf(I,H,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{_=0}}while(0);aF(10,c[m>>2]|0);jN(_)}else if((x|0)==5){jz()}else if((x|0)==6){if(!(a[928]|0)){C=c[m>>2]|0;aF(10,C|0)}S=+h[7077];C=c[m>>2]|0;if(S>0.0){F=(c[14156]|0)==0?150704:150856;cf(C|0,106368,(v=i,i=i+16|0,c[v>>2]=F,h[v+8>>3]=S,v)|0);break}else{aI(106320,33,1,C|0);break}}else if((x|0)==8){jA()}else if((x|0)==9){if(!(a[928]|0)){C=c[m>>2]|0;aF(10,C|0)}S=+h[7030];C=c[m>>2]|0;if(S<0.0){aI(106792,18,1,C|0);break}else{F=(a[56232]&1)!=0?106640:106608;cf(C|0,106688,(v=i,i=i+16|0,h[v>>3]=S,c[v+8>>2]=F,v)|0);break}}else if((x|0)==98){jI(c[m>>2]|0)}else if((x|0)==7){F=c[8272]|0;L9922:do{if((G|0)<(F|0)){C=G;while(1){L9925:do{if((a[p+(C*40&-1)|0]&1)!=0){D=c[p+(C*40&-1)+36>>2]|0;w=p+(C*40&-1)+32|0;q=0;while(1){if((q|0)>=(D|0)){break}if((a[u+((c[w>>2]|0)+q|0)|0]|0)==(a[q+103664|0]|0)){q=q+1|0}else{break L9925}}if((q|0)==1){aa=C;break L9922}}}while(0);E=C+1|0;c[13898]=E;if((E|0)<(F|0)){C=E}else{aa=E;break}}}else{aa=G}}while(0);c[13898]=aa-1;dV()}else if((x|0)==1){aF(10,c[m>>2]|0);kc(it()|0,0);c[13898]=(c[13898]|0)+1}else if((x|0)==2){a[928]=1;jI(c[m>>2]|0);jz();if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}S=+h[7077];F=c[m>>2]|0;if(S>0.0){C=(c[14156]|0)==0?150704:150856;cf(F|0,106368,(v=i,i=i+16|0,c[v>>2]=C,h[v+8>>3]=S,v)|0)}else{aI(106320,33,1,F|0)}jA();if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}S=+h[7030];F=c[m>>2]|0;if(S<0.0){aI(106792,18,1,F|0)}else{C=(a[56232]&1)!=0?106640:106608;cf(F|0,106688,(v=i,i=i+16|0,h[v>>3]=S,c[v+8>>2]=C,v)|0)}jB();C=c[m>>2]|0;if((a[35888]&1)==0){aI(107400,37,1,C|0)}else{cf(C|0,107464,(v=i,i=i+8|0,c[v>>2]=53520,v)|0)}jC();jD();if(!(a[928]|0)){C=c[m>>2]|0;aF(10,C|0)}cf(c[m>>2]|0,113600,(v=i,i=i+8|0,c[v>>2]=(a[43472]&1)!=0?179864:211688,v)|0);jE();if(!(a[928]|0)){C=c[m>>2]|0;aF(10,C|0)}cf(c[m>>2]|0,114368,(v=i,i=i+16|0,c[v>>2]=24544,c[v+8>>2]=24595,v)|0);jF();jX();jG();cf(c[m>>2]|0,125408,(v=i,i=i+8|0,c[v>>2]=(a[27776]&1)!=0?179864:211688,v)|0);jH(2);jH(1);jH(0);jM(0);jN(0);jK();jL();if(!(a[928]|0)){C=c[m>>2]|0;aF(10,C|0)}C=(c[8764]|0)==2?88392:179864;S=+h[4384];F=(c[6588]|0)==2?88392:179864;ab=+h[3296];E=(c[1057]|0)==2?88392:179864;ac=+h[531];w=(c[14091]|0)==2?88392:179864;ad=+h[7048];cf(c[m>>2]|0,89120,(v=i,i=i+72|0,c[v>>2]=132528,c[v+8>>2]=C,h[v+16>>3]=S,c[v+24>>2]=F,h[v+32>>3]=ab,c[v+40>>2]=E,h[v+48>>3]=ac,c[v+56>>2]=w,h[v+64>>3]=ad,v)|0);jO();if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}w=c[8244]|0;E=c[m>>2]|0;if((w|0)==0){aI(134568,26,1,E|0)}else{cf(E|0,134696,(v=i,i=i+8|0,c[v>>2]=w,v)|0)}if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}w=c[m>>2]|0;E=c[7262]|0;do{if((E|0)==(c[n>>2]|0)){ae=89880}else{if((E|0)==0){ae=89256;break}F=c[7260]|0;ae=(E|0)!=(w|0)&(F|0)!=0?F:89256}}while(0);cf(w|0,134848,(v=i,i=i+8|0,c[v>>2]=ae,v)|0);if(!(a[928]|0)){E=c[m>>2]|0;aF(10,E|0)}cf(c[m>>2]|0,136080,(v=i,i=i+8|0,c[v>>2]=(a[32936]&1)!=0?172456:172176,v)|0);jQ();jW();jP();if(!(a[928]|0)){E=c[m>>2]|0;aF(10,E|0)}cf(c[m>>2]|0,166928,(v=i,i=i+8|0,h[v>>3]=+h[3817],v)|0);if(!(a[928]|0)){E=c[m>>2]|0;aF(10,E|0)}cf(c[m>>2]|0,167288,(v=i,i=i+8|0,h[v>>3]=+h[3818],v)|0);if(!(a[928]|0)){E=c[m>>2]|0;aF(10,E|0)}cf(c[m>>2]|0,168248,(v=i,i=i+8|0,c[v>>2]=c[44936+(c[11252]<<2)>>2],v)|0);E=c[m>>2]|0;F=bA(2,0)|0;cf(E|0,167680,(v=i,i=i+8|0,c[v>>2]=F,v)|0);jS();jT();if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}cf(c[m>>2]|0,172840,(v=i,i=i+8|0,c[v>>2]=(a[30528]&1)!=0?172456:172176,v)|0);if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}aI(174264,15,1,c[m>>2]|0);F=c[m>>2]|0;if(+h[9040]==1.0){aI(173624,8,1,F|0)}else{aI(173192,8,1,F|0)}jj(c[m>>2]|0,0);if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}F=c[6350]|0;cf(c[m>>2]|0,174608,(v=i,i=i+16|0,c[v>>2]=c[6352],c[v+8>>2]=F,v)|0);if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}F=c[9342]|0;cf(c[m>>2]|0,174888,(v=i,i=i+16|0,c[v>>2]=c[9344],c[v+8>>2]=F,v)|0);jV();if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}cf(c[m>>2]|0,178568,(v=i,i=i+8|0,c[v>>2]=(a[46752]&1)!=0?179864:211688,v)|0);if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}cf(c[m>>2]|0,179872,(v=i,i=i+8|0,c[v>>2]=(a[38984]&1)!=0?179488:179160,v)|0);gp();jY();if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}ad=+g[44];cf(c[m>>2]|0,183064,(v=i,i=i+16|0,h[v>>3]=+g[184],h[v+8>>3]=ad,v)|0);if(!(a[928]|0)){F=c[m>>2]|0;aF(10,F|0)}F=c[3524]|0;E=c[m>>2]|0;if((F|0)==0){aI(183552,26,1,E|0)}else{C=c[F>>2]|0;cf(E|0,183896,(v=i,i=i+16|0,c[v>>2]=C,c[v+8>>2]=13048,v)|0)}jZ(1,1,1,1,1,1);j$(2);j$(1);j$(0);j$(6);j$(5);j6(179864,141856,4672);if((a[32936]&1)==0){if((a[30528]&1)!=0){L=7049}}else{L=7049}do{if((L|0)==7049){C=a[928]|0;if((a[37384]&1)==0){if(!C){E=c[m>>2]|0;aF(10,E|0)}if((c[17578]|0)==1){E=c[m>>2]|0;cf(E|0,198344,(v=i,i=i+8|0,c[v>>2]=57024,v)|0)}E=c[m>>2]|0;aF(9,E|0);je(c[m>>2]|0,8);break}if(!C){C=c[m>>2]|0;aF(10,C|0)}if((c[17750]|0)==1){C=c[m>>2]|0;cf(C|0,198344,(v=i,i=i+8|0,c[v>>2]=57048,v)|0)}C=c[m>>2]|0;aF(9,C|0);je(c[m>>2]|0,9);if(!(a[928]|0)){C=c[m>>2]|0;aF(10,C|0)}if((c[17922]|0)==1){C=c[m>>2]|0;cf(C|0,198344,(v=i,i=i+8|0,c[v>>2]=57072,v)|0)}C=c[m>>2]|0;aF(9,C|0);je(c[m>>2]|0,10)}}while(0);if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}if((c[16546]|0)==1){w=c[m>>2]|0;cf(w|0,198344,(v=i,i=i+8|0,c[v>>2]=56880,v)|0)}aF(9,c[m>>2]|0);je(c[m>>2]|0,2);if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}if((c[16374]|0)==1){w=c[m>>2]|0;cf(w|0,198344,(v=i,i=i+8|0,c[v>>2]=56856,v)|0)}aF(9,c[m>>2]|0);je(c[m>>2]|0,1);if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}if((c[17234]|0)==1){w=c[m>>2]|0;cf(w|0,198344,(v=i,i=i+8|0,c[v>>2]=56976,v)|0)}aF(9,c[m>>2]|0);je(c[m>>2]|0,6);if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}if((c[17062]|0)==1){w=c[m>>2]|0;cf(w|0,198344,(v=i,i=i+8|0,c[v>>2]=56952,v)|0)}aF(9,c[m>>2]|0);je(c[m>>2]|0,5);if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}if((c[16202]|0)==1){w=c[m>>2]|0;cf(w|0,198344,(v=i,i=i+8|0,c[v>>2]=56832,v)|0)}aF(9,c[m>>2]|0);je(c[m>>2]|0,0);if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}j6(179864,154440,4416);if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}j6(56880,202256,66456);if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}j6(56856,202256,65768);if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}j6(56832,202256,65080);if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}j6(56976,202256,69208);if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}j6(56952,202256,68520);if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}w=(c[16546]|0)==1?141856:202784;cf(c[m>>2]|0,203352,(v=i,i=i+16|0,c[v>>2]=56880,c[v+8>>2]=w,v)|0);if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}w=(c[16374]|0)==1?141856:202784;cf(c[m>>2]|0,203352,(v=i,i=i+16|0,c[v>>2]=56856,c[v+8>>2]=w,v)|0);if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}w=(c[17234]|0)==1?141856:202784;cf(c[m>>2]|0,203352,(v=i,i=i+16|0,c[v>>2]=56976,c[v+8>>2]=w,v)|0);if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}w=(c[17062]|0)==1?141856:202784;cf(c[m>>2]|0,203352,(v=i,i=i+16|0,c[v>>2]=56952,c[v+8>>2]=w,v)|0);if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}w=(c[16202]|0)==1?141856:202784;cf(c[m>>2]|0,203352,(v=i,i=i+16|0,c[v>>2]=56832,c[v+8>>2]=w,v)|0);j_();if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}uq(2,0);if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}ur(2,0);jU();if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}w=c[m>>2]|0;C=bA(2,0)|0;cf(w|0,146672,(v=i,i=i+8|0,c[v>>2]=C,v)|0);cf(c[m>>2]|0,144576,(v=i,i=i+8|0,c[v>>2]=c[44936+(c[11252]<<2)>>2],v)|0);C=c[m>>2]|0;w=bA(5,0)|0;cf(C|0,142976,(v=i,i=i+8|0,c[v>>2]=w,v)|0);w=c[8270]|0;cf(c[m>>2]|0,141432,(v=i,i=i+8|0,c[v>>2]=(w|0)!=0?w:139696,v)|0);if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}cf(c[m>>2]|0,203824,(v=i,i=i+8|0,h[v>>3]=+h[11],v)|0);j0();j1();if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}cf(c[m>>2]|0,222616,(v=i,i=i+8|0,c[v>>2]=c[6924],v)|0);j2();w=c[10812]|0;aI(123576,26,1,c[m>>2]|0);if((w|0)!=0){C=w;do{w=c[C+12>>2]|0;E=c[m>>2]|0;if((w|0)==0){F=c[C+4>>2]|0;cf(E|0,123120,(v=i,i=i+8|0,c[v>>2]=F,v)|0)}else{cf(E|0,123448,(v=i,i=i+8|0,c[v>>2]=w,v)|0)}C=c[C>>2]|0;}while((C|0)!=0)}a[928]=0}else if((x|0)==99){jV()}else if((x|0)==85){jX()}else if((x|0)==84){if(!(a[928]|0)){C=c[m>>2]|0;aF(10,C|0)}cf(c[m>>2]|0,178568,(v=i,i=i+8|0,c[v>>2]=(a[46752]&1)!=0?179864:211688,v)|0)}else if((x|0)==25){if(!(a[928]|0)){C=c[m>>2]|0;aF(10,C|0)}cf(c[m>>2]|0,179872,(v=i,i=i+8|0,c[v>>2]=(a[38984]&1)!=0?179488:179160,v)|0);gp()}else if((x|0)==83){jY()}else if((x|0)==141){if(!(a[928]|0)){C=c[m>>2]|0;aF(10,C|0)}j6(56832,202256,65080)}else if((x|0)==64){if(!(a[928]|0)){C=c[m>>2]|0;aF(10,C|0)}j6(56904,202256,67144)}else if((x|0)==104){if(!(a[928]|0)){C=c[m>>2]|0;aF(10,C|0)}j6(56976,202256,69208)}else if((x|0)==123){if(!(a[928]|0)){C=c[m>>2]|0;aF(10,C|0)}j6(56952,202256,68520)}else if((x|0)==81){jU()}else if((x|0)==75){C=c[p+(G*40&-1)+36>>2]|0;L10161:do{if((a[p+(G*40&-1)|0]&1)!=0&(C|0)>0){w=0;E=0;F=c[p+(G*40&-1)+32>>2]|0;while(1){if((a[w+115824|0]|0)==(a[u+(w+F|0)|0]|0)){af=F;ag=E}else{if((w|0)!=4){ah=G;break L10161}af=F-1|0;ag=1}D=w+1|0;if((D|0)<(ag+C|0)){w=D;E=ag;F=af}else{break}}if((ag|0)==0){if(!((w|0)==3|(w|0)==9)){ah=G;break}}F=l+3|0;c[13898]=F;ah=F}else{ah=G}}while(0);L10173:do{if((ah|0)<(c[8272]|0)){L10175:do{if((a[p+(ah*40&-1)|0]&1)!=0){C=c[p+(ah*40&-1)+36>>2]|0;F=p+(ah*40&-1)+32|0;E=0;while(1){if((E|0)>=(C|0)){break}if((a[u+((c[F>>2]|0)+E|0)|0]|0)==(a[E+103664|0]|0)){E=E+1|0}else{break L10175}}if((E|0)==1){ai=0;break L10173}}}while(0);w=is(d)|0;F=c[w>>2]|0;if((F|0)==1){aj=+(c[w+8>>2]|0)}else if((F|0)==2){aj=+h[w+8>>3]}else if((F|0)==3){aj=+uz(c[w+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}w=d|0;if((c[w>>2]|0)==3){uu(c[d+8>>2]|0);c[w>>2]=1}w=~~aj;if((w|0)<1){H=208936}else{ai=w;break}I=c[13898]|0;uf(I,H,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{ai=0}}while(0);aF(10,c[m>>2]|0);jj(c[m>>2]|0,ai)}else if((x|0)==120){if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}w=(c[17062]|0)==1?141856:202784;cf(c[m>>2]|0,203352,(v=i,i=i+16|0,c[v>>2]=56952,c[v+8>>2]=w,v)|0)}else if((x|0)==138){if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}w=(c[16202]|0)==1?141856:202784;cf(c[m>>2]|0,203352,(v=i,i=i+16|0,c[v>>2]=56832,c[v+8>>2]=w,v)|0)}else if((x|0)==24){jG()}else if((x|0)==150){cf(c[m>>2]|0,125408,(v=i,i=i+8|0,c[v>>2]=(a[27776]&1)!=0?179864:211688,v)|0)}else if((x|0)==152){jH(2);jH(1);jH(0)}else if((x|0)==155){jH(1)}else if((x|0)==154){jH(6)}else if((x|0)==156){jH(5)}else if((x|0)==157){jH(0)}else if((x|0)==28){jK()}else if((x|0)==35){jL()}else if((x|0)==56){if(!(a[928]|0)){w=c[m>>2]|0;aF(10,w|0)}w=(c[8764]|0)==2?88392:179864;ad=+h[4384];F=(c[6588]|0)==2?88392:179864;ac=+h[3296];C=(c[1057]|0)==2?88392:179864;ab=+h[531];D=(c[14091]|0)==2?88392:179864;S=+h[7048];cf(c[m>>2]|0,89120,(v=i,i=i+72|0,c[v>>2]=132528,c[v+8>>2]=w,h[v+16>>3]=ad,c[v+24>>2]=F,h[v+32>>3]=ac,c[v+40>>2]=C,h[v+48>>3]=ab,c[v+56>>2]=D,h[v+64>>3]=S,v)|0)}else if((x|0)==100){if(!(a[928]|0)){D=c[m>>2]|0;aF(10,D|0)}if((c[17922]|0)==1){D=c[m>>2]|0;cf(D|0,198344,(v=i,i=i+8|0,c[v>>2]=57072,v)|0)}aF(9,c[m>>2]|0);je(c[m>>2]|0,10)}else{H=223488;I=c[13898]|0;uf(I,H,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);a[25280]=0;aF(10,c[m>>2]|0);i=b;return}function jz(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}aI(106224,16,1,c[m>>2]|0);do{if((a[32936]&1)!=0){if((a[37384]&1)==0){d=c[17711]|0;e=c[m>>2]|0;f=d&3;g=(f|0)!=0?172456:172176;h=(f|0)==1?105824:179864;j=(f|0)==2?105728:179864;f=(d&4|0)!=0?105664:179864;k=(d&8|0)!=0?105608:179864;cf(e|0,105872,(v=i,i=i+48|0,c[v>>2]=57048,c[v+8>>2]=g,c[v+16>>2]=h,c[v+24>>2]=j,c[v+32>>2]=f,c[v+40>>2]=k,v)|0);k=c[17883]|0;f=c[m>>2]|0;j=k&3;h=(j|0)!=0?172456:172176;g=(j|0)==1?105824:179864;e=(j|0)==2?105728:179864;j=(k&4|0)!=0?105664:179864;d=(k&8|0)!=0?105608:179864;cf(f|0,105872,(v=i,i=i+48|0,c[v>>2]=57072,c[v+8>>2]=h,c[v+16>>2]=g,c[v+24>>2]=e,c[v+32>>2]=j,c[v+40>>2]=d,v)|0);break}else{d=c[17539]|0;j=c[m>>2]|0;e=d&3;g=(e|0)!=0?172456:172176;h=(e|0)==1?105824:179864;f=(e|0)==2?105728:179864;e=(d&4|0)!=0?105664:179864;k=(d&8|0)!=0?105608:179864;cf(j|0,105872,(v=i,i=i+48|0,c[v>>2]=57024,c[v+8>>2]=g,c[v+16>>2]=h,c[v+24>>2]=f,c[v+32>>2]=e,c[v+40>>2]=k,v)|0);break}}}while(0);if((a[30528]&1)!=0){k=c[17367]|0;e=c[m>>2]|0;f=k&3;h=(f|0)!=0?172456:172176;g=(f|0)==1?105824:179864;j=(f|0)==2?105728:179864;f=(k&4|0)!=0?105664:179864;d=(k&8|0)!=0?105608:179864;cf(e|0,105872,(v=i,i=i+48|0,c[v>>2]=57e3,c[v+8>>2]=h,c[v+16>>2]=g,c[v+24>>2]=j,c[v+32>>2]=f,c[v+40>>2]=d,v)|0)}d=c[16507]|0;f=d&3;cf(c[m>>2]|0,105872,(v=i,i=i+48|0,c[v>>2]=56880,c[v+8>>2]=(f|0)!=0?172456:172176,c[v+16>>2]=(f|0)==1?105824:179864,c[v+24>>2]=(f|0)==2?105728:179864,c[v+32>>2]=(d&4|0)!=0?105664:179864,c[v+40>>2]=(d&8|0)!=0?105608:179864,v)|0);d=c[16335]|0;f=d&3;cf(c[m>>2]|0,105872,(v=i,i=i+48|0,c[v>>2]=56856,c[v+8>>2]=(f|0)!=0?172456:172176,c[v+16>>2]=(f|0)==1?105824:179864,c[v+24>>2]=(f|0)==2?105728:179864,c[v+32>>2]=(d&4|0)!=0?105664:179864,c[v+40>>2]=(d&8|0)!=0?105608:179864,v)|0);aI(105360,17,1,c[m>>2]|0);d=c[17195]|0;f=d&3;cf(c[m>>2]|0,105872,(v=i,i=i+48|0,c[v>>2]=56976,c[v+8>>2]=(f|0)!=0?172456:172176,c[v+16>>2]=(f|0)==1?105824:179864,c[v+24>>2]=(f|0)==2?105728:179864,c[v+32>>2]=(d&4|0)!=0?105664:179864,c[v+40>>2]=(d&8|0)!=0?105608:179864,v)|0);d=c[17023]|0;f=d&3;cf(c[m>>2]|0,105872,(v=i,i=i+48|0,c[v>>2]=56952,c[v+8>>2]=(f|0)!=0?172456:172176,c[v+16>>2]=(f|0)==1?105824:179864,c[v+24>>2]=(f|0)==2?105728:179864,c[v+32>>2]=(d&4|0)!=0?105664:179864,c[v+40>>2]=(d&8|0)!=0?105608:179864,v)|0);aI(105360,17,1,c[m>>2]|0);d=c[16163]|0;f=d&3;cf(c[m>>2]|0,105872,(v=i,i=i+48|0,c[v>>2]=56832,c[v+8>>2]=(f|0)!=0?172456:172176,c[v+16>>2]=(f|0)==1?105824:179864,c[v+24>>2]=(f|0)==2?105728:179864,c[v+32>>2]=(d&4|0)!=0?105664:179864,c[v+40>>2]=(d&8|0)!=0?105608:179864,v)|0);d=c[16679]|0;f=d&3;cf(c[m>>2]|0,105872,(v=i,i=i+48|0,c[v>>2]=56904,c[v+8>>2]=(f|0)!=0?172456:172176,c[v+16>>2]=(f|0)==1?105824:179864,c[v+24>>2]=(f|0)==2?105728:179864,c[v+32>>2]=(d&4|0)!=0?105664:179864,c[v+40>>2]=(d&8|0)!=0?105608:179864,v)|0);i=b;return}function jA(){var b=0,d=0,e=0,f=0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}d=c[11692]|0;e=c[m>>2]|0;if((d|0)==0){aI(106520,21,1,e|0);i=b;return}else{f=(c[14088]|0)==0?150704:150856;cf(e|0,106440,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=f,v)|0);ji(c[m>>2]|0,56296,0);f=c[m>>2]|0;aF(10,f|0);i=b;return}}function jB(){var b=0,d=0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}cf(c[m>>2]|0,107344,(v=i,i=i+8|0,c[v>>2]=(a[54144]&1)!=0?172456:172176,v)|0);d=c[m>>2]|0;if((a[54160]&1)==0){aI(107184,55,1,d|0)}else{aI(107256,64,1,d|0)}d=c[m>>2]|0;if((a[54152]&1)==0){aI(106872,47,1,d|0);i=b;return}else{aI(107096,56,1,d|0);i=b;return}}function jC(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,n=0.0,o=0.0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}cf(c[m>>2]|0,110616,(v=i,i=i+8|0,c[v>>2]=(c[11690]|0)!=0?179160:109736,v)|0);if((c[11690]|0)==0){i=b;return}cf(c[m>>2]|0,109312,(v=i,i=i+8|0,c[v>>2]=c[13374],v)|0);d=c[11690]|0;if((d|0)==1){e=c[m>>2]|0;aI(108736,10,1,e|0)}else if((d|0)==2){aI(108488,8,1,c[m>>2]|0)}else if((d|0)==3){aI(108392,22,1,c[m>>2]|0)}d=c[13378]|0;if((d|0)==0){e=c[m>>2]|0;aI(108304,21,1,e|0)}else if((d|0)==1){cf(c[m>>2]|0,108216,(v=i,i=i+8|0,c[v>>2]=c[13366],v)|0)}else if((d|0)==2){d=c[13366]|0;cf(c[m>>2]|0,108128,(v=i,i=i+16|0,c[v>>2]=c[13368],c[v+8>>2]=d,v)|0)}d=c[13372]|0;if((d|0)==0){e=c[m>>2]|0;f=c[13374]|0;cf(e|0,108056,(v=i,i=i+8|0,c[v>>2]=f,v)|0)}else if((d|0)==2){cf(c[m>>2]|0,107816,(v=i,i=i+8|0,c[v>>2]=c[13374],v)|0);cf(c[m>>2]|0,170912,(v=i,i=i+8|0,h[v>>3]=+h[c[11662]>>3],v)|0);f=c[m>>2]|0;if((c[13374]|0)>1){e=1;g=f;while(1){cf(g|0,107648,(v=i,i=i+8|0,h[v>>3]=+h[(c[11662]|0)+(e<<3)>>3],v)|0);j=e+1|0;k=c[m>>2]|0;if((j|0)<(c[13374]|0)){e=j;g=k}else{l=k;break}}}else{l=f}aF(10,l|0)}else if((d|0)==1){d=c[13374]|0;l=c[11662]|0;n=+h[l>>3];o=+h[l+8>>3];cf(c[m>>2]|0,107544,(v=i,i=i+32|0,c[v>>2]=d,h[v+8>>3]=n,h[v+16>>3]=o,h[v+24>>3]=n+ +(d-1|0)*o,v)|0)}d=c[m>>2]|0;if((a[35888]&1)==0){aI(107400,37,1,d|0);i=b;return}else{cf(d|0,107464,(v=i,i=i+8|0,c[v>>2]=53520,v)|0);i=b;return}}function jD(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,n=0.0,o=0.0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}if((a[47032]&1)==0){d=c[m>>2]|0;aI(111136,25,1,d|0);i=b;return}d=c[11752]|0;if((d|0)==1){e=c[m>>2]|0;f=c[11732]|0;g=c[11756]|0;j=c[11734]|0;cf(e|0,113384,(v=i,i=i+24|0,c[v>>2]=f,c[v+8>>2]=g,c[v+16>>2]=j,v)|0);i=b;return}j=c[m>>2]|0;g=c[11732]|0;f=c[11756]|0;if((d|0)==2){cf(j|0,113272,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=f,v)|0);i=b;return}else{k=-1}while(1){e=k+1|0;if((e|0)==7){l=0;break}if((c[46948+(e<<3)>>2]|0)==(d|0)){l=c[46944+(e<<3)>>2]|0;break}else{k=e}}n=+h[5865];o=+h[5864];k=(a[47016]&1)!=0?112728:179864;cf(j|0,113e3,(v=i,i=i+48|0,c[v>>2]=g,c[v+8>>2]=f,c[v+16>>2]=l,h[v+24>>3]=n,h[v+32>>3]=o,c[v+40>>2]=k,v)|0);i=b;return}function jE(){var b=0,d=0;if(!(a[928]|0)){b=c[m>>2]|0;aF(10,b|0)}aI(114040,25,1,c[m>>2]|0);b=c[8732]|0;if((b|0)==1){d=c[m>>2]|0;aI(113784,10,1,d|0);return}else if((b|0)==0){aI(113904,10,1,c[m>>2]|0);return}else if((b|0)==2){aI(113712,12,1,c[m>>2]|0);return}else{return}}function jF(){var b=0,d=0,e=0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}aI(114560,16,1,c[m>>2]|0);d=c[m>>2]|0;e=j3(66240)|0;cf(d|0,114480,(v=i,i=i+16|0,c[v>>2]=56880,c[v+8>>2]=e,v)|0);e=c[m>>2]|0;d=j3(65552)|0;cf(e|0,114480,(v=i,i=i+16|0,c[v>>2]=56856,c[v+8>>2]=d,v)|0);d=c[m>>2]|0;e=j3(68992)|0;cf(d|0,114480,(v=i,i=i+16|0,c[v>>2]=56976,c[v+8>>2]=e,v)|0);e=c[m>>2]|0;d=j3(68304)|0;cf(e|0,114480,(v=i,i=i+16|0,c[v>>2]=56952,c[v+8>>2]=d,v)|0);d=c[m>>2]|0;e=j3(64864)|0;cf(d|0,114480,(v=i,i=i+16|0,c[v>>2]=56832,c[v+8>>2]=e,v)|0);e=c[m>>2]|0;d=j3(66928)|0;cf(e|0,114480,(v=i,i=i+16|0,c[v>>2]=56904,c[v+8>>2]=d,v)|0);d=c[m>>2]|0;e=j3(69680)|0;cf(d|0,114480,(v=i,i=i+16|0,c[v>>2]=57e3,c[v+8>>2]=e,v)|0);i=b;return}function jG(){var b=0,d=0,e=0,f=0,g=0.0,j=0.0,k=0.0,l=0;b=i;if(a[928]|0){d=0}else{e=c[m>>2]|0;aF(10,e|0);d=0}while(1){if(d>>>0>=8){f=7559;break}if((a[65036+(d*688&-1)|0]&1)!=0){break}if((a[65037+(d*688&-1)|0]&1)==0){d=d+1|0}else{break}}if((f|0)==7559){f=c[m>>2]|0;aI(125328,13,1,f|0);i=b;return}cf(c[m>>2]|0,125104,(v=i,i=i+8|0,c[v>>2]=+h[3815]!=0.0?124928:124832,v)|0);if((a[66412]&1)!=0){f=c[m>>2]|0;cf(f|0,124744,(v=i,i=i+8|0,c[v>>2]=56880,v)|0)}if((a[66413]&1)!=0){f=c[m>>2]|0;cf(f|0,124664,(v=i,i=i+8|0,c[v>>2]=56880,v)|0)}if((a[65724]&1)!=0){f=c[m>>2]|0;cf(f|0,124744,(v=i,i=i+8|0,c[v>>2]=56856,v)|0)}if((a[65725]&1)!=0){f=c[m>>2]|0;cf(f|0,124664,(v=i,i=i+8|0,c[v>>2]=56856,v)|0)}if((a[69164]&1)!=0){f=c[m>>2]|0;cf(f|0,124744,(v=i,i=i+8|0,c[v>>2]=56976,v)|0)}if((a[69165]&1)!=0){f=c[m>>2]|0;cf(f|0,124664,(v=i,i=i+8|0,c[v>>2]=56976,v)|0)}if((a[68476]&1)!=0){f=c[m>>2]|0;cf(f|0,124744,(v=i,i=i+8|0,c[v>>2]=56952,v)|0)}if((a[68477]&1)!=0){f=c[m>>2]|0;cf(f|0,124664,(v=i,i=i+8|0,c[v>>2]=56952,v)|0)}if((a[65036]&1)!=0){f=c[m>>2]|0;cf(f|0,124744,(v=i,i=i+8|0,c[v>>2]=56832,v)|0)}if((a[65037]&1)!=0){f=c[m>>2]|0;cf(f|0,124664,(v=i,i=i+8|0,c[v>>2]=56832,v)|0)}if((a[67100]&1)!=0){f=c[m>>2]|0;cf(f|0,124744,(v=i,i=i+8|0,c[v>>2]=56904,v)|0)}if((a[67101]&1)!=0){f=c[m>>2]|0;cf(f|0,124664,(v=i,i=i+8|0,c[v>>2]=56904,v)|0)}if((a[69852]&1)!=0){f=c[m>>2]|0;cf(f|0,124744,(v=i,i=i+8|0,c[v>>2]=57e3,v)|0)}if((a[69853]&1)!=0){f=c[m>>2]|0;cf(f|0,124664,(v=i,i=i+8|0,c[v>>2]=57e3,v)|0)}aI(124552,6,1,c[m>>2]|0);aI(124400,22,1,c[m>>2]|0);ji(c[m>>2]|0,40048,0);aI(124312,23,1,c[m>>2]|0);ji(c[m>>2]|0,34776,0);aF(10,c[m>>2]|0);g=+h[3815];if(g!=0.0){f=c[m>>2]|0;j=+h[9040];k=g/j;d=j==1.0?124080:123976;cf(f|0,124200,(v=i,i=i+16|0,h[v>>3]=k,c[v+8>>2]=d,v)|0)}d=c[10026]|0;if((d|0)==-1){l=123760}else{l=(d|0)==0?150704:150856}cf(c[m>>2]|0,123840,(v=i,i=i+8|0,c[v>>2]=l,v)|0);i=b;return}function jH(b){b=b|0;var d=0,e=0,f=0,g=0;d=i;e=b;while(1){if(!(a[928]|0)){b=c[m>>2]|0;aF(10,b|0)}b=c[m>>2]|0;f=56832+(e*24&-1)|0;if((c[65284+(e*688&-1)>>2]|0)>-3){g=65280+(e*688&-1)|0;cf(b|0,125624,(v=i,i=i+8|0,c[v>>2]=f,v)|0);ji(c[m>>2]|0,g,0);g=c[m>>2]|0;aF(10,g|0)}else{cf(b|0,125528,(v=i,i=i+8|0,c[v>>2]=f,v)|0)}if(e>>>0<4){e=e+4|0}else{break}}i=d;return}function jI(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,n=0,o=0,p=0;d=i;i=i+2056|0;e=d|0;f=d+8|0;g=e|0;a[g]=35;h=e+5|0;j=e+1|0;w=538976288;a[j]=w&255;w=w>>8;a[j+1|0]=w&255;w=w>>8;a[j+2|0]=w&255;w=w>>8;a[j+3|0]=w&255;a[h]=0;if((c[13388]|0)==0){j=ut(1024)|0;do{if((j|0)==0){gk();e=ut(1024)|0;if((e|0)!=0){k=e;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=216448,v)|0)}else{k=j}}while(0);c[13388]=k;be(k|0,163128,(v=i,i=i+88|0,c[v>>2]=211088,c[v+8>>2]=204752,c[v+16>>2]=184880,c[v+24>>2]=179760,c[v+32>>2]=201520,c[v+40>>2]=179864,c[v+48>>2]=175632,c[v+56>>2]=179864,c[v+64>>2]=171680,c[v+72>>2]=179864,c[v+80>>2]=167488,v)|0);k=c[13388]|0;c[13388]=db(k,(uA(k|0)|0)+1|0,216448)|0}if((b|0)==0){i=d;return}if((c[m>>2]|0)==(b|0)){l=h}else{cf(b|0,154128,(v=i,i=i+8|0,c[v>>2]=151008,v)|0);l=g}g=f|0;uD(g|0,149072,187);uD(f+(uA(g|0)|0)|0,147160,95);cf(b|0,g|0,(v=i,i=i+144|0,c[v>>2]=l,c[v+8>>2]=l,c[v+16>>2]=145064,c[v+24>>2]=l,c[v+32>>2]=40152,c[v+40>>2]=40160,c[v+48>>2]=40168,c[v+56>>2]=l,c[v+64>>2]=33040,c[v+72>>2]=33008,c[v+80>>2]=l,c[v+88>>2]=l,c[v+96>>2]=40184,c[v+104>>2]=l,c[v+112>>2]=l,c[v+120>>2]=l,c[v+128>>2]=l,c[v+136>>2]=l,v)|0);l=c[13898]|0;g=c[1054]|0;b=c[g+(l*40&-1)+36>>2]|0;if(!((a[g+(l*40&-1)|0]&1)!=0&(b|0)>0)){i=d;return}f=c[10036]|0;h=0;k=0;j=c[g+(l*40&-1)+32>>2]|0;while(1){if((a[h+143320|0]|0)==(a[f+(h+j|0)|0]|0)){n=j;o=k}else{if((h|0)!=1){p=7623;break}n=j-1|0;o=1}g=h+1|0;if((g|0)<(o+b|0)){h=g;k=o;j=n}else{break}}if((p|0)==7623){i=d;return}do{if((o|0)==0){if((h|0)==0|(h|0)==4){break}i=d;return}}while(0);c[13898]=l+1;cf(c[m>>2]|0,141816,(v=i,i=i+8|0,c[v>>2]=c[13388],v)|0);l=bU(140128)|0;cf(c[m>>2]|0,136384,(v=i,i=i+8|0,c[v>>2]=195896,v)|0);cf(c[m>>2]|0,132976,(v=i,i=i+8|0,c[v>>2]=(l|0)==0?138024:l,v)|0);i=d;return}function jJ(){var b=0,d=0,e=0,f=0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}d=c[m>>2]|0;e=j3(36288)|0;cf(d|0,128328,(v=i,i=i+8|0,c[v>>2]=e,v)|0);e=c[9329]|0;do{if((e|0)!=0){if((a[e]|0)==0){break}d=c[m>>2]|0;cf(d|0,82560,(v=i,i=i+8|0,c[v>>2]=e,v)|0)}}while(0);if((c[9330]|0)==1&(c[9331]|0)==-2){i=b;return}aI(84256,2,1,c[m>>2]|0);e=c[m>>2]|0;if((c[9330]|0)==0){f=e}else{aI(145280,10,1,e|0);jg(e,37320);f=c[m>>2]|0}aF(10,f|0);i=b;return}function jK(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0.0,l=0,n=0.0,o=0,p=0.0,q=0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}if((a[36120]&1)==0){d=c[m>>2]|0;aI(131736,12,1,d|0);i=b;return}d=c[9031]|0;if((d|0)==0|(d|0)==1|(d|0)==2){e=c[m>>2]|0;aI(131624,22,1,e|0);if((c[9031]|0)==2&(c[9032]|0)>>>0<2){f=7651}else{e=c[9044]|0;do{if((e|0)==0){g=c[m>>2]|0;aI(196168,3,1,g|0)}else{g=c[m>>2]|0;if((e|0)==2){aI(196800,6,1,g|0);break}else{aI(89896,6,1,g|0);break}}}while(0);if((c[9031]|0)==2){f=7651}else{f=7652}}if((f|0)==7651){if(((c[9032]|0)-2|0)>>>0>=2){f=7652}}do{if((f|0)==7652){e=c[9045]|0;if((e|0)==0){g=c[m>>2]|0;aI(131440,5,1,g|0);break}else if((e|0)==2){aI(131280,6,1,c[m>>2]|0);break}else{if((c[9044]|0)==1){break}aI(131216,7,1,c[m>>2]|0);break}}}while(0);f=c[m>>2]|0;if((c[9047]|0)==0){aI(131080,9,1,f|0)}else{aI(130936,11,1,f|0)}f=c[9031]|0;do{if((f|0)==0){e=c[m>>2]|0;aI(130784,7,1,e|0)}else if((f|0)==1){aI(130648,8,1,c[m>>2]|0)}else{e=c[9032]|0;if((e|0)==1){g=c[m>>2]|0;aI(130432,8,1,g|0);break}else if((e|0)==2){aI(130336,8,1,c[m>>2]|0);break}else if((e|0)==0){aI(130512,8,1,c[m>>2]|0);break}else if((e|0)==3){aI(130288,8,1,c[m>>2]|0);break}else{break}}}while(0);f=c[m>>2]|0;aF(10,f|0)}else if((d|0)==3){aI(130224,11,1,c[m>>2]|0);d=c[9034]|0;if((d|0)==0){j=179864}else{j=c[21784+(d<<2)>>2]|0}k=+h[4519];f=c[9035]|0;if((f|0)==(d|0)){l=179864}else{l=c[21784+(f<<2)>>2]|0}n=+h[4520];d=c[9036]|0;if((d|0)==(f|0)){o=179864}else{o=c[21784+(d<<2)>>2]|0}p=+h[4521];cf(c[m>>2]|0,77392,(v=i,i=i+48|0,c[v>>2]=j,h[v+8>>3]=k,c[v+16>>2]=l,h[v+24>>3]=n,c[v+32>>2]=o,h[v+40>>3]=p,v)|0);aF(10,c[m>>2]|0)}o=(a[36229]&1)!=0?179864:211688;l=(a[36230]&1)!=0?179864:211688;j=(a[36231]&1)!=0?179864:211688;cf(c[m>>2]|0,130072,(v=i,i=i+32|0,c[v>>2]=(c[9046]|0)==0?130008:129888,c[v+8>>2]=o,c[v+16>>2]=l,c[v+24>>2]=j,v)|0);j=c[m>>2]|0;if((c[9059]|0)>-3){aI(129760,12,1,j|0);ji(c[m>>2]|0,36232,0);l=c[m>>2]|0;aF(10,l|0)}else{aI(129608,10,1,j|0)}if((a[36228]&1)!=0){j=c[m>>2]|0;aI(129416,51,1,j|0)}p=+h[4525];n=+h[4526];k=+h[4527];j=c[9056]|0;if((j|0)==1){q=129016}else{q=(j|0)==2?128920:179864}cf(c[m>>2]|0,129128,(v=i,i=i+48|0,h[v>>3]=+h[4524],h[v+8>>3]=p,h[v+16>>3]=n,h[v+24>>3]=k,c[v+32>>2]=(j|0)!=0?179864:171496,c[v+40>>2]=q,v)|0);aI(128800,30,1,c[m>>2]|0);q=c[9338]|0;j=c[m>>2]|0;if((q|0)>0){cf(j|0,128688,(v=i,i=i+8|0,c[v>>2]=q,v)|0)}else{aI(128592,25,1,j|0)}aI(128504,27,1,c[m>>2]|0);j=c[9339]|0;q=c[m>>2]|0;if((j|0)>0){cf(q|0,128432,(v=i,i=i+8|0,c[v>>2]=j,v)|0)}else{aI(128592,25,1,q|0)}jJ();i=b;return}function jL(){var b=0,d=0,e=0,f=0.0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}if((a[66164]&1)==0){e=0}else{d=c[m>>2]|0;f=+h[8271];cf(d|0,132416,(v=i,i=i+24|0,c[v>>2]=132288,c[v+8>>2]=56880,h[v+16>>3]=f,v)|0);e=1}if((a[65476]&1)==0){g=e}else{d=c[m>>2]|0;j=e+1|0;k=(e|0)==0?132288:132144;f=+h[8185];cf(d|0,132416,(v=i,i=i+24|0,c[v>>2]=k,c[v+8>>2]=56856,h[v+16>>3]=f,v)|0);g=j}if((a[64788]&1)==0){l=g}else{j=c[m>>2]|0;k=g+1|0;d=(g|0)==0?132288:132144;f=+h[8099];cf(j|0,132416,(v=i,i=i+24|0,c[v>>2]=d,c[v+8>>2]=56832,h[v+16>>3]=f,v)|0);l=k}if((a[68916]&1)==0){n=l}else{k=c[m>>2]|0;d=l+1|0;j=(l|0)==0?132288:132144;f=+h[8615];cf(k|0,132416,(v=i,i=i+24|0,c[v>>2]=j,c[v+8>>2]=56976,h[v+16>>3]=f,v)|0);n=d}if((a[68228]&1)==0){o=n}else{d=c[m>>2]|0;j=n+1|0;k=(n|0)==0?132288:132144;f=+h[8529];cf(d|0,132416,(v=i,i=i+24|0,c[v>>2]=k,c[v+8>>2]=56952,h[v+16>>3]=f,v)|0);o=j}if((a[66852]&1)==0){p=o}else{j=c[m>>2]|0;k=o+1|0;d=(o|0)==0?132288:132144;f=+h[8357];cf(j|0,132416,(v=i,i=i+24|0,c[v>>2]=d,c[v+8>>2]=56904,h[v+16>>3]=f,v)|0);p=k}if((a[69604]&1)==0){q=p}else{k=c[m>>2]|0;d=p+1|0;j=(p|0)==0?132288:132144;f=+h[8701];cf(k|0,132416,(v=i,i=i+24|0,c[v>>2]=j,c[v+8>>2]=57e3,h[v+16>>3]=f,v)|0);q=d}if((q|0)==0){d=c[m>>2]|0;aI(132064,15,1,d|0);i=b;return}d=c[m>>2]|0;if((q|0)==1){aI(131968,6,1,d|0);i=b;return}else{aF(10,d|0);i=b;return}}function jM(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,w=0.0,x=0,y=0.0,z=0,A=0,B=0;d=i;e=c[10822]|0;if((e|0)==0){f=0}else{g=(b|0)==0;j=0;k=e;while(1){e=c[k+4>>2]|0;if(g){l=e;n=7722}else{if((e|0)==(b|0)){l=b;n=7722}else{o=j}}if((n|0)==7722){n=0;e=c[m>>2]|0;p=c[k+60>>2]|0;if((p|0)==0){q=179864}else{q=j3(p)|0}cf(e|0,126584,(v=i,i=i+16|0,c[v>>2]=l,c[v+8>>2]=q,v)|0);e=c[m>>2]|0;p=c[k+8>>2]|0;if((p|0)==0){r=179864}else{r=c[21784+(p<<2)>>2]|0}s=+h[k+24>>3];t=c[k+12>>2]|0;if((t|0)==(p|0)){u=179864}else{u=c[21784+(t<<2)>>2]|0}w=+h[k+32>>3];p=c[k+16>>2]|0;if((p|0)==(t|0)){x=179864}else{x=c[21784+(p<<2)>>2]|0}y=+h[k+40>>3];cf(e|0,77392,(v=i,i=i+48|0,c[v>>2]=r,h[v+8>>3]=s,c[v+16>>2]=u,h[v+24>>3]=w,c[v+32>>2]=x,h[v+40>>3]=y,v)|0);e=c[k+48>>2]|0;if((e|0)==1){p=c[m>>2]|0;aI(126448,7,1,p|0)}else if((e|0)==2){aI(131280,6,1,c[m>>2]|0)}else if((e|0)==0){aI(131440,5,1,c[m>>2]|0)}e=c[k+52>>2]|0;p=c[m>>2]|0;if((e|0)==0){aI(126264,12,1,p|0)}else{cf(p|0,126328,(v=i,i=i+8|0,c[v>>2]=e,v)|0)}e=c[m>>2]|0;p=(c[k+56>>2]|0)!=0?150856:150704;cf(e|0,126160,(v=i,i=i+8|0,c[v>>2]=p,v)|0);p=c[k+64>>2]|0;if((p|0)!=0){e=c[m>>2]|0;cf(e|0,126104,(v=i,i=i+8|0,c[v>>2]=p,v)|0)}p=k+72|0;if((c[p>>2]|0)!=0){e=c[m>>2]|0;aI(145280,10,1,e|0);jg(e,p)}if((a[k+184|0]&1)!=0){p=c[m>>2]|0;aI(199048,11,1,p|0)}p=k+88|0;e=c[m>>2]|0;if((c[p>>2]|0)==0){aI(126e3,8,1,e|0)}else{aI(125912,20,1,e|0);ji(c[m>>2]|0,p,1);p=c[m>>2]|0;e=c[k+144>>2]|0;if((e|0)==0){z=179864}else{z=c[21784+(e<<2)>>2]|0}y=+h[k+160>>3];t=c[k+148>>2]|0;if((t|0)==(e|0)){A=179864}else{A=c[21784+(t<<2)>>2]|0}w=+h[k+168>>3];e=c[k+152>>2]|0;if((e|0)==(t|0)){B=179864}else{B=c[21784+(e<<2)>>2]|0}s=+h[k+176>>3];cf(p|0,77392,(v=i,i=i+48|0,c[v>>2]=z,h[v+8>>3]=y,c[v+16>>2]=A,h[v+24>>3]=w,c[v+32>>2]=B,h[v+40>>3]=s,v)|0)}p=c[m>>2]|0;aF(10,p|0);o=1}p=c[k>>2]|0;if((p|0)==0){f=o;break}else{j=o;k=p}}}if((b|0)<1|f){i=d;return}else{uf(c[13898]|0,125760,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function jN(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,w=0,x=0.0,y=0,z=0.0,A=0,B=0,C=0,D=0;d=i;e=c[10826]|0;if((e|0)==0){f=0}else{g=(b|0)==0;j=0;k=e;while(1){e=c[k+4>>2]|0;if(g){l=e;n=7761}else{if((e|0)==(b|0)){l=b;n=7761}else{o=j}}if((n|0)==7761){n=0;e=c[m>>2]|0;p=c[72304+(c[k+160>>2]<<2)>>2]|0;q=k+200|0;r=c[q>>2]|0;if((r|0)==2){s=128e3}else{s=(r|0)==1?127904:127768}r=(c[k+100>>2]|0)!=0?150856:150704;cf(e|0,128128,(v=i,i=i+32|0,c[v>>2]=l,c[v+8>>2]=p,c[v+16>>2]=s,c[v+24>>2]=r,v)|0);ji(c[m>>2]|0,k+104|0,0);r=c[m>>2]|0;aI(127616,9,1,r|0);r=c[m>>2]|0;p=c[k+8>>2]|0;if((p|0)==0){t=179864}else{t=c[21784+(p<<2)>>2]|0}u=+h[k+24>>3];e=c[k+12>>2]|0;if((e|0)==(p|0)){w=179864}else{w=c[21784+(e<<2)>>2]|0}x=+h[k+32>>3];p=c[k+16>>2]|0;if((p|0)==(e|0)){y=179864}else{y=c[21784+(p<<2)>>2]|0}z=+h[k+40>>3];cf(r|0,77392,(v=i,i=i+48|0,c[v>>2]=t,h[v+8>>3]=u,c[v+16>>2]=w,h[v+24>>3]=x,c[v+32>>2]=y,h[v+40>>3]=z,v)|0);r=(a[k+88|0]&1)!=0?127520:127448;p=c[m>>2]|0;aK(r|0,p|0);p=c[m>>2]|0;r=c[k+48>>2]|0;if((r|0)==0){A=179864}else{A=c[21784+(r<<2)>>2]|0}z=+h[k+64>>3];e=c[k+52>>2]|0;if((e|0)==(r|0)){B=179864}else{B=c[21784+(e<<2)>>2]|0}x=+h[k+72>>3];r=c[k+56>>2]|0;if((r|0)==(e|0)){C=179864}else{C=c[21784+(r<<2)>>2]|0}u=+h[k+80>>3];cf(p|0,77392,(v=i,i=i+48|0,c[v>>2]=A,h[v+8>>3]=z,c[v+16>>2]=B,h[v+24>>3]=x,c[v+32>>2]=C,h[v+40>>3]=u,v)|0);u=+h[k+168>>3];do{if(u>0.0){p=c[m>>2]|0;r=c[k+176>>2]|0;if((r|0)==0){D=179864}else{D=c[21832+(r<<2)>>2]|0}x=+h[k+184>>3];cf(p|0,126992,(v=i,i=i+24|0,c[v>>2]=D,h[v+8>>3]=u,h[v+16>>3]=x,v)|0);if((c[q>>2]|0)==0){break}p=c[m>>2]|0;x=+h[k+192>>3];cf(p|0,126792,(v=i,i=i+8|0,h[v>>3]=x,v)|0)}}while(0);q=c[m>>2]|0;aF(10,q|0);o=1}q=c[k>>2]|0;if((q|0)==0){f=o;break}else{j=o;k=q}}}if((b|0)<1|f){i=d;return}else{uf(c[13898]|0,134376,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function jO(){var b=0,d=0,e=0.0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}do{if((c[8786]|0)==3){d=c[m>>2]|0;e=+h[4395];cf(d|0,134456,(v=i,i=i+8|0,h[v>>3]=e,v)|0)}else{e=+h[4395];d=c[m>>2]|0;if(e<0.0){aI(134096,35,1,d|0);break}else{cf(d|0,134296,(v=i,i=i+8|0,h[v>>3]=e,v)|0);break}}}while(0);do{if((c[14100]|0)==3){d=c[m>>2]|0;e=+h[7052];cf(d|0,133952,(v=i,i=i+8|0,h[v>>3]=e,v)|0)}else{e=+h[7052];d=c[m>>2]|0;if(e<0.0){aI(133664,35,1,d|0);break}else{cf(d|0,133816,(v=i,i=i+8|0,h[v>>3]=e,v)|0);break}}}while(0);do{if((c[6598]|0)==3){d=c[m>>2]|0;e=+h[3301];cf(d|0,133536,(v=i,i=i+8|0,h[v>>3]=e,v)|0)}else{e=+h[3301];d=c[m>>2]|0;if(e<0.0){aI(133048,35,1,d|0);break}else{cf(d|0,133360,(v=i,i=i+8|0,h[v>>3]=e,v)|0);break}}}while(0);if((c[1066]|0)==3){d=c[m>>2]|0;e=+h[535];cf(d|0,132872,(v=i,i=i+8|0,h[v>>3]=e,v)|0);i=b;return}e=+h[535];d=c[m>>2]|0;if(e<0.0){aI(132592,35,1,d|0);i=b;return}else{cf(d|0,132720,(v=i,i=i+8|0,h[v>>3]=e,v)|0);i=b;return}}function jP(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0;b=i;c[13898]=(c[13898]|0)+1;cf(c[m>>2]|0,166536,(v=i,i=i+8|0,c[v>>2]=(c[7662]|0)==1?166152:165672,v)|0);aI(165320,17,1,c[m>>2]|0);d=a[30632]|0;if(d<<24>>24!=0){e=0;f=30632;g=d;do{if((e|0)>0){d=c[m>>2]|0;aI(164904,7,1,d|0);h=a[f]|0}else{h=g}d=h<<24>>24;if((d|0)==98){j=c[m>>2]|0;aI(164432,6,1,j|0)}else if((d|0)==115){aI(163992,7,1,c[m>>2]|0)}else if((d|0)==116){aI(163304,3,1,c[m>>2]|0)}e=e+1|0;f=e+30632|0;g=a[f]|0;}while(g<<24>>24!=0)}aF(10,c[m>>2]|0);g=a[30641]|0;do{if(g<<24>>24==100){f=c[m>>2]|0;aI(162824,21,1,f|0)}else{f=c[m>>2]|0;if(g<<24>>24==97){aI(158600,38,1,f|0);break}else{e=g<<24>>24==102?159744:159048;cf(f|0,162192,(v=i,i=i+8|0,c[v>>2]=e,v)|0);break}}}while(0);aI(157984,47,1,c[m>>2]|0);g=a[30639]|0;e=c[m>>2]|0;if(g<<24>>24==99){aI(156096,9,1,e|0)}else{f=g<<24>>24==98?154664:154352;cf(e|0,155016,(v=i,i=i+8|0,c[v>>2]=f,v)|0)}cf(c[m>>2]|0,153960,(v=i,i=i+8|0,c[v>>2]=(a[30640]|0)!=0?179864:211688,v)|0);aI(153600,11,1,c[m>>2]|0);f=c[m>>2]|0;if((a[30642]|0)==49){aI(153160,49,1,f|0)}else{aI(152728,45,1,f|0)}f=c[7661]|0;e=c[m>>2]|0;if((f|0)>0){cf(e|0,152344,(v=i,i=i+8|0,c[v>>2]=f,v)|0)}else{g=(f|0)!=0?150376:150208;cf(e|0,152016,(v=i,i=i+8|0,c[v>>2]=g,v)|0)}g=c[7665]|0;cf(c[m>>2]|0,151768,(v=i,i=i+16|0,c[v>>2]=c[7664],c[v+8>>2]=g,v)|0);aI(151600,31,1,c[m>>2]|0);g=c[7663]|0;if((g|0)==8){e=c[m>>2]|0;aI(150536,21,1,e|0);i=b;return}else if((g|0)==7){aI(150712,21,1,c[m>>2]|0);i=b;return}else if((g|0)==4){aI(151368,19,1,c[m>>2]|0);i=b;return}else if((g|0)==5){aI(151064,30,1,c[m>>2]|0);i=b;return}else if((g|0)==6){aI(150872,20,1,c[m>>2]|0);i=b;return}else{cf(c[m>>2]|0,150400,(v=i,i=i+8|0,c[v>>2]=g+1,v)|0);i=b;return}}function jQ(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0.0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0.0,ax=0.0,ay=0.0,az=0,aA=0,aB=0;b=i;i=i+48|0;d=b|0;e=b+24|0;f=c[13898]|0;g=c[8272]|0;do{if((f|0)<(g|0)){j=c[1054]|0;k=(a[j+(f*40&-1)|0]&1)==0;if(k){uf(f,141144,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}l=c[j+(f*40&-1)+36>>2]|0;o=j+(f*40&-1)+32|0;p=c[10036]|0;q=0;while(1){if((q|0)>=(l|0)){r=7852;break}if((a[p+((c[o>>2]|0)+q|0)|0]|0)==(a[q+103664|0]|0)){q=q+1|0}else{break}}if((r|0)==7852){if((q|0)==1){break}}p=c[o>>2]|0;if(k){uf(f,141144,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}do{if((l|0)>0){s=c[10036]|0;t=0;u=0;w=p;while(1){if((a[t+205488|0]|0)==(a[s+(t+w|0)|0]|0)){x=w;y=u}else{if((t|0)!=3){break}x=w-1|0;y=1}z=t+1|0;if((z|0)<(y+l|0)){t=z;u=y;w=x}else{r=7882;break}}do{if((r|0)==7882){if((y|0)==0){if(!((t|0)==2|(t|0)==7)){break}}w=f+1|0;c[13898]=w;if((w|0)>=(g|0)){uf(w,138608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}L10757:do{if((a[j+(w*40&-1)|0]&1)!=0){u=c[j+(w*40&-1)+36>>2]|0;s=j+(w*40&-1)+32|0;z=c[10036]|0;A=0;while(1){if((A|0)>=(u|0)){break}if((a[z+((c[s>>2]|0)+A|0)|0]|0)==(a[A+103664|0]|0)){A=A+1|0}else{break L10757}}if((A|0)!=1){break}uf(w,138608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);w=is(d)|0;s=c[w>>2]|0;if((s|0)==1){B=+(c[w+8>>2]|0)}else if((s|0)==2){B=+h[w+8>>3]}else if((s|0)==3){B=+uz(c[w+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}w=d|0;if((c[w>>2]|0)==3){uu(c[d+8>>2]|0);c[w>>2]=1}w=~~B;s=(w|0)<2?128:w;w=c[13898]|0;do{if((w|0)<(c[8272]|0)){z=c[1054]|0;if((a[z+(w*40&-1)|0]&1)==0){uf(w,137944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}u=c[z+(w*40&-1)+36>>2]|0;C=z+(w*40&-1)+32|0;z=c[10036]|0;D=0;while(1){if((D|0)>=(u|0)){r=7903;break}E=c[C>>2]|0;if((a[z+(E+D|0)|0]|0)==(a[D+103664|0]|0)){D=D+1|0}else{F=E;break}}if((r|0)==7903){if((D|0)==1){G=0;break}F=c[C>>2]|0}if((u|0)>0){H=0;I=0;J=F}else{uf(w,137944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}while(1){if((a[H+138408|0]|0)==(a[z+(H+J|0)|0]|0)){K=J;L=I}else{if((H|0)!=1){M=0;N=0;O=F;r=7912;break}K=J-1|0;L=1}A=H+1|0;if((A|0)<(L+u|0)){H=A;I=L;J=K}else{r=7910;break}}do{if((r|0)==7910){if((L|0)!=0){P=1;break}if((H|0)==0|(H|0)==5){P=1}else{M=0;N=0;O=F;r=7912}}}while(0);do{if((r|0)==7912){while(1){r=0;if((a[M+138104|0]|0)==(a[z+(M+O|0)|0]|0)){Q=O;R=N}else{if((M|0)!=1){r=8045;break}Q=O-1|0;R=1}C=M+1|0;if((C|0)<(R+u|0)){M=C;N=R;O=Q;r=7912}else{break}}if((r|0)==8045){uf(w,137944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((R|0)!=0){P=2;break}if((M|0)==0|(M|0)==3){P=2;break}uf(w,137944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);c[13898]=w+1;G=P}else{G=0}}while(0);w=c[7262]|0;u=c[m>>2]|0;if((w|0)==0|(w|0)==(u|0)){S=1}else{S=(w|0)==(c[n>>2]|0)}z=(w|0)!=0?w:u;w=(c[5163]|0)==103?137656:137544;cf(u|0,137800,(v=i,i=i+16|0,c[v>>2]=w,c[v+8>>2]=s,v)|0);w=c[m>>2]|0;if(S){aI(137248,2,1,w|0)}else{u=c[7260]|0;cf(w|0,137360,(v=i,i=i+8|0,c[v>>2]=u,v)|0)}if((s|0)<=0){i=b;return}T=+(s-1|0);u=e|0;w=e+8|0;C=e+16|0;D=0;do{U=+(D|0)/T;if((a[20668]|0)==110){V=1.0-U}else{V=U}fq(V,e);U=+h[u>>3];W=+h[w>>3];X=+h[C>>3];A=~~(U*255.0+.5);E=~~(W*255.0+.5);Y=~~(X*255.0+.5);if((G|0)==1){cf(z|0,137184,(v=i,i=i+24|0,h[v>>3]=U,h[v+8>>3]=W,h[v+16>>3]=X,v)|0)}else if((G|0)==2){cf(z|0,137056,(v=i,i=i+24|0,c[v>>2]=A&255,c[v+8>>2]=E&255,c[v+16>>2]=Y&255,v)|0)}else{Z=A&255;A=E&255;E=Y&255;cf(z|0,138856,(v=i,i=i+88|0,c[v>>2]=D,h[v+8>>3]=V,h[v+16>>3]=U,h[v+24>>3]=W,h[v+32>>3]=X,c[v+40>>2]=Z,c[v+48>>2]=A,c[v+56>>2]=E,c[v+64>>2]=Z,c[v+72>>2]=A,c[v+80>>2]=E,v)|0)}D=D+1|0;}while((D|0)<(s|0));i=b;return}}while(0);if(k){uf(f,141144,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}L10836:do{if((l|0)>0){t=c[10036]|0;s=0;D=0;z=p;while(1){if((a[s+142040|0]|0)==(a[t+(s+z|0)|0]|0)){_=z;$=D}else{if((s|0)!=3){break L10836}_=z-1|0;$=1}C=s+1|0;if((C|0)<($+l|0)){s=C;D=$;z=_}else{break}}if(($|0)==0){if(!((s|0)==2|(s|0)==8)){break}}c[13898]=f+1;if((c[5163]|0)!=100){z=c[m>>2]|0;aI(139016,47,1,z|0);i=b;return}if((c[5172]|0)>0){aa=0}else{i=b;return}do{z=c[5173]|0;T=+h[z+(aa<<5)>>3];X=+h[z+(aa<<5)+8>>3];W=+h[z+(aa<<5)+16>>3];U=+h[z+(aa<<5)+24>>3];z=~~(X*255.0+.5);D=~~(W*255.0+.5);t=~~(U*255.0+.5);cf(c[m>>2]|0,138856,(v=i,i=i+88|0,c[v>>2]=aa,h[v+8>>3]=T,h[v+16>>3]=X,h[v+24>>3]=W,h[v+32>>3]=U,c[v+40>>2]=z,c[v+48>>2]=D,c[v+56>>2]=t,c[v+64>>2]=z,c[v+72>>2]=D,c[v+80>>2]=t,v)|0);aa=aa+1|0;}while((aa|0)<(c[5172]|0));i=b;return}}while(0);if(k){uf(f,141144,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((l|0)<=0){break}s=c[10036]|0;t=0;D=0;z=p;while(1){if((a[t+141864|0]|0)==(a[s+(t+z|0)|0]|0)){ab=z;ac=D}else{if((t|0)!=6){break}ab=z-1|0;ac=1}C=t+1|0;if((C|0)<(ac+l|0)){t=C;D=ac;z=ab}else{r=7954;break}}do{if((r|0)==7954){if((ac|0)==0){if(!((t|0)==5|(t|0)==11)){break}}z=c[m>>2]|0;D=c[5162]|0;cf(z|0,140040,(v=i,i=i+8|0,c[v>>2]=D,v)|0);if((a[c[7122]|0]|0)!=0){D=0;z=0;do{if(((D|0)%3&-1|0)==0){s=c[m>>2]|0;aI(139832,6,1,s|0)}s=c[28488+((z|1)<<2)>>2]|0;cf(c[m>>2]|0,139592,(v=i,i=i+16|0,c[v>>2]=D,c[v+8>>2]=s,v)|0);D=D+1|0;z=D<<1;}while((a[c[28488+(z<<2)>>2]|0]|0)!=0)}z=c[m>>2]|0;aF(10,z|0);z=c[m>>2]|0;aI(139400,62,1,z|0);z=c[m>>2]|0;D=(c[5162]|0)-1|0;cf(z|0,139168,(v=i,i=i+16|0,c[v>>2]=D,c[v+8>>2]=D,v)|0);c[13898]=(c[13898]|0)+1;i=b;return}}while(0);if(!k){break}uf(f,141144,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);j=c[10036]|0;o=0;while(1){if((o|0)>=(l|0)){r=7965;break}if((a[j+(p+o|0)|0]|0)==(a[o+204344|0]|0)){o=o+1|0}else{r=7966;break}}if((r|0)==7965){if((o|0)!=6){r=7966}}do{if((r|0)==7966){if(!((l|0)>0&(k^1))){uf(f,141144,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}j=c[10036]|0;q=0;t=0;D=p;while(1){if((a[q+141544|0]|0)==(a[j+(q+D|0)|0]|0)){ad=D;ae=t}else{if((q|0)!=5){break}ad=D-1|0;ae=1}z=q+1|0;if((z|0)<(ae+l|0)){q=z;t=ae;D=ad}else{r=7972;break}}if((r|0)==7972){if((ae|0)!=0){break}if((q|0)==4|(q|0)==10){break}}if(!((l|0)>0&(k^1))){uf(f,141144,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}D=c[10036]|0;t=0;j=0;z=p;while(1){if((a[t+141352|0]|0)==(a[D+(t+z|0)|0]|0)){af=z;ag=j}else{if((t|0)!=7){r=8027;break}af=z-1|0;ag=1}s=t+1|0;if((s|0)<(ag+l|0)){t=s;j=ag;z=af}else{break}}if((r|0)==8027){uf(f,141144,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}do{if((ag|0)==0){if((t|0)==6|(t|0)==15){break}uf(f,141144,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);t=(c[5162]|0)-1|0;c[13898]=f+1;if((c[5163]|0)==114&(c[5174]|0)==114){z=c[m>>2]|0;j=c[5164]|0;D=c[5165]|0;q=c[5166]|0;cf(z|0,141008,(v=i,i=i+24|0,c[v>>2]=j,c[v+8>>2]=D,c[v+16>>2]=q,v)|0);i=b;return}q=ut(768)|0;do{if((q|0)==0){gk();D=ut(768)|0;if((D|0)!=0){ah=D;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=140872,v)|0)}else{ah=q}}while(0);q=ah;D=0;do{fq(+(D|0)/31.0,q+(D*24&-1)|0);D=D+1|0;}while((D|0)<32);D=t<<1|1;j=D<<2;z=ut(j)|0;do{if((z|0)==0){gk();s=ut(j)|0;if((s|0)!=0){ai=s;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=140736,v)|0)}else{ai=z}}while(0);z=ai;do{if((t|0)>=0){s=0;do{c[z+(s<<2)>>2]=s;s=s+1|0;}while((s|0)<=(t|0));if((t|0)<1){break}else{aj=1}do{c[z+(aj+t<<2)>>2]=-aj;aj=aj+1|0;}while((aj|0)<=(t|0))}}while(0);t=ut(j)|0;do{if((t|0)==0){gk();s=ut(j)|0;if((s|0)!=0){ak=s;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=140536,v)|0)}else{ak=t}}while(0);t=ak;if((D|0)>0){j=0;while(1){s=ut(256)|0;if((s|0)==0){gk();C=ut(256)|0;if((C|0)==0){r=8003;break}else{al=C}}else{al=s}s=t+(j<<2)|0;c[s>>2]=al;C=z+(j<<2)|0;w=0;do{U=+fu(c[C>>2]|0,+(w|0)/31.0);h[(c[s>>2]|0)+(w<<3)>>3]=U;w=w+1|0;}while((w|0)<32);w=j+1|0;if((w|0)<(D|0)){j=w}else{am=0;an=0;ao=0;ap=8.988465674311579e+307;aq=0;break}}if((r|0)==8003){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=140344,v)|0)}while(1){j=z+(aq<<2)|0;w=c[t+(aq<<2)>>2]|0;s=am;C=an;u=ao;U=ap;E=0;while(1){A=c[t+(E<<2)>>2]|0;Z=z+(E<<2)|0;Y=s;ar=C;as=u;W=U;at=0;while(1){au=c[t+(at<<2)>>2]|0;X=0.0;av=0;do{T=+h[q+(av*24&-1)>>3]- +h[w+(av<<3)>>3];aw=+h[q+(av*24&-1)+8>>3]- +h[A+(av<<3)>>3];ax=+h[q+(av*24&-1)+16>>3]- +h[au+(av<<3)>>3];X=X+(T*T+aw*aw+ax*ax);av=av+1|0;}while((av|0)<32);if(X<W){ay=X;az=c[j>>2]|0;aA=c[Z>>2]|0;aB=c[z+(at<<2)>>2]|0}else{ay=W;az=as;aA=ar;aB=Y}av=at+1|0;if((av|0)<(D|0)){Y=aB;ar=aA;as=az;W=ay;at=av}else{break}}at=E+1|0;if((at|0)<(D|0)){s=aB;C=aA;u=az;U=ay;E=at}else{break}}E=aq+1|0;if((E|0)<(D|0)){am=aB;an=aA;ao=az;ap=ay;aq=E}else{break}}cf(c[m>>2]|0,140160,(v=i,i=i+24|0,c[v>>2]=az,c[v+8>>2]=aA,c[v+16>>2]=aB,v)|0);z=0;do{uu(c[t+(z<<2)>>2]|0);z=z+1|0;}while((z|0)<(D|0))}else{cf(c[m>>2]|0,140160,(v=i,i=i+24|0,c[v>>2]=0,c[v+8>>2]=0,c[v+16>>2]=0,v)|0)}uu(ak);uu(ai);uu(ah);i=b;return}}while(0);jR();i=b;return}}while(0);cf(c[m>>2]|0,147560,(v=i,i=i+8|0,c[v>>2]=(c[5163]|0)==103?147288:147032,v)|0);ah=c[5163]|0;do{if((ah|0)==100){ai=c[m>>2]|0;aI(146576,35,1,ai|0)}else if((ah|0)==114){ai=c[5165]|0;ak=c[5166]|0;cf(c[m>>2]|0,146752,(v=i,i=i+24|0,c[v>>2]=c[5164],c[v+8>>2]=ai,c[v+16>>2]=ak,v)|0)}else if((ah|0)==102){aI(146384,49,1,c[m>>2]|0);ak=c[5179]|0;if((c[5178]|0)!=0&(ak|0)!=0){ai=c[m>>2]|0;cf(ai|0,146224,(v=i,i=i+8|0,c[v>>2]=ak,v)|0)}ak=c[5257]|0;if((c[5256]|0)!=0&(ak|0)!=0){ai=c[m>>2]|0;cf(ai|0,146056,(v=i,i=i+8|0,c[v>>2]=ak,v)|0)}ak=c[5335]|0;if(!((c[5334]|0)!=0&(ak|0)!=0)){break}cf(c[m>>2]|0,145904,(v=i,i=i+8|0,c[v>>2]=ak,v)|0)}else if((ah|0)==99){ay=+h[2707];ap=+h[2708];cf(c[m>>2]|0,145624,(v=i,i=i+24|0,h[v>>3]=+h[2706],h[v+8>>3]=ay,h[v+16>>3]=ap,v)|0)}else if((ah|0)!=103){cf(c[m>>2]|0,145456,(v=i,i=i+24|0,c[v>>2]=145192,c[v+8>>2]=2321,c[v+16>>2]=ah<<24>>24,v)|0)}}while(0);cf(c[m>>2]|0,144904,(v=i,i=i+8|0,c[v>>2]=(a[20668]|0)==112?144696:144440,v)|0);cf(c[m>>2]|0,144216,(v=i,i=i+8|0,c[v>>2]=(a[20684]|0)==0?144064:179864,v)|0);aI(143944,12,1,c[m>>2]|0);ah=c[5168]|0;ak=c[m>>2]|0;if((ah|0)==0){aI(143728,13,1,ak|0)}else{cf(ak|0,143880,(v=i,i=i+8|0,c[v>>2]=ah,v)|0)}aI(143544,48,1,c[m>>2]|0);aI(143376,14,1,c[m>>2]|0);ah=c[5174]|0;if((ah|0)==114){ak=c[m>>2]|0;aI(143256,4,1,ak|0)}else if((ah|0)==120){aI(142552,4,1,c[m>>2]|0)}else if((ah|0)==99){aI(142912,4,1,c[m>>2]|0)}else if((ah|0)==104){aI(143048,4,1,c[m>>2]|0)}else if((ah|0)==121){aI(142680,4,1,c[m>>2]|0)}else{cf(c[m>>2]|0,142392,(v=i,i=i+24|0,c[v>>2]=145192,c[v+8>>2]=2343,c[v+16>>2]=ah<<24>>24,v)|0)}cf(c[m>>2]|0,142264,(v=i,i=i+8|0,h[v>>3]=+h[2705],v)|0);i=b;return}function jR(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,n=0;a=i;cf(c[m>>2]|0,136824,(v=i,i=i+8|0,c[v>>2]=112,v)|0);b=c[7642]|0;d=c[b>>2]|0;if((d|0)==0){e=c[m>>2]|0;f=aF(10,e|0)|0;g=c[13898]|0;h=g+1|0;c[13898]=h;i=a;return}else{j=b;k=d}do{d=c[j+4>>2]|0;b=d>>>16&255;l=d>>>8&255;n=d&255;cf(c[m>>2]|0,136440,(v=i,i=i+8|0,c[v>>2]=k,v)|0);cf(c[m>>2]|0,136240,(v=i,i=i+48|0,c[v>>2]=b,c[v+8>>2]=l,c[v+16>>2]=n,c[v+24>>2]=b,c[v+32>>2]=l,c[v+40>>2]=n,v)|0);j=j+8|0;k=c[j>>2]|0;}while((k|0)!=0);e=c[m>>2]|0;f=aF(10,e|0)|0;g=c[13898]|0;h=g+1|0;c[13898]=h;i=a;return}function jS(){var b=0,d=0,e=0,f=0,g=0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}d=c[8270]|0;do{if((d|0)!=0){if((aY(d|0,139696)|0)==0){break}bA(4,d|0)}}while(0);d=c[m>>2]|0;e=c[b$()>>2]|0;cf(d|0,170016,(v=i,i=i+8|0,c[v>>2]=e,v)|0);e=c[8270]|0;do{if((e|0)!=0){if((aY(e|0,139696)|0)==0){break}bA(4,139696)}}while(0);e=c[12886]|0;d=c[m>>2]|0;if((e|0)==0){aI(169e3,57,1,d|0);f=c[m>>2]|0;g=cf(f|0,168632,(v=i,i=i+8|0,c[v>>2]=48904,v)|0)|0;i=b;return}else{cf(d|0,169544,(v=i,i=i+8|0,c[v>>2]=e,v)|0);f=c[m>>2]|0;g=cf(f|0,168632,(v=i,i=i+8|0,c[v>>2]=48904,v)|0)|0;i=b;return}}function jT(){var b=0,d=0,e=0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}cf(c[m>>2]|0,171816,(v=i,i=i+8|0,c[v>>2]=(a[42568]&1)!=0?179864:171496,v)|0);d=c[10568]|0;if((d|0)!=0){e=c[m>>2]|0;cf(e|0,171184,(v=i,i=i+8|0,c[v>>2]=d,v)|0);i=b;return}d=fg()|0;if((d|0)==0){i=b;return}cf(c[m>>2]|0,170744,(v=i,i=i+8|0,c[v>>2]=d,v)|0);uu(d);i=b;return}function jU(){var b=0,d=0,e=0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}aI(135832,29,1,c[m>>2]|0);d=c[57238]|0;cf(c[m>>2]|0,154696,(v=i,i=i+8|0,c[v>>2]=(d|0)!=0?d:135560,v)|0);aI(135336,38,1,c[m>>2]|0);d=c[m>>2]|0;e=bU(195768)|0;cf(d|0,154696,(v=i,i=i+8|0,c[v>>2]=(e|0)==0?135560:e,v)|0);cf(c[m>>2]|0,135072,(v=i,i=i+8|0,c[v>>2]=195896,v)|0);i=b;return}function jV(){var b=0,d=0,e=0.0,f=0.0,j=0.0,k=0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}aI(178128,9,1,c[m>>2]|0);d=c[m>>2]|0;if((c[5094]|0)==1){aI(177880,4,1,d|0);i=b;return}e=+g[3536];f=+g[3534];j=+g[3532];cf(d|0,177528,(v=i,i=i+32|0,h[v>>3]=+g[3538],h[v+8>>3]=e,h[v+16>>3]=f,h[v+24>>3]=j,v)|0);d=c[18072]|0;if((d|0)==2){k=176720}else{k=(d|0)==3?176120:179864}cf(c[m>>2]|0,177040,(v=i,i=i+16|0,c[v>>2]=k,c[v+8>>2]=(d|0)>1?175728:175376,v)|0);i=b;return}function jW(){var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0,l=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0;b=i;c[13898]=(c[13898]|0)+1;d=c[m>>2]|0;do{if((a[54018]|0)==0){aI(149704,29,1,d|0)}else{aI(150216,24,1,d|0);e=c[13505]|0;f=c[m>>2]|0;if((e|0)>-1){cf(f|0,150056,(v=i,i=i+8|0,c[v>>2]=e,v)|0);break}else{aI(149856,21,1,f|0);break}}}while(0);do{if((a[54016]|0)!=110){d=c[m>>2]|0;if((c[13506]|0)==1){aI(149576,13,1,d|0);break}else{aI(149312,12,1,d|0);break}}}while(0);d=a[54016]|0;if((d|0)==117){f=c[m>>2]|0;aI(148704,16,1,f|0);f=c[m>>2]|0;e=c[13508]|0;if((e|0)==0){g=179864}else{g=c[21784+(e<<2)>>2]|0}j=+h[6756];k=c[13509]|0;if((k|0)==(e|0)){l=179864}else{l=c[21784+(k<<2)>>2]|0}n=+h[6757];e=c[13510]|0;if((e|0)==(k|0)){o=179864}else{o=c[21784+(e<<2)>>2]|0}p=+h[6758];cf(f|0,77392,(v=i,i=i+48|0,c[v>>2]=g,h[v+8>>3]=j,c[v+16>>2]=l,h[v+24>>3]=n,c[v+32>>2]=o,h[v+40>>3]=p,v)|0);o=c[m>>2]|0;aI(148472,18,1,o|0);o=c[m>>2]|0;l=c[13518]|0;if((l|0)==0){q=179864}else{q=c[21784+(l<<2)>>2]|0}p=+h[6761];g=c[13519]|0;if((g|0)==(l|0)){r=179864}else{r=c[21784+(g<<2)>>2]|0}n=+h[6762];l=c[13520]|0;if((l|0)==(g|0)){s=179864}else{s=c[21784+(l<<2)>>2]|0}j=+h[6763];cf(o|0,77392,(v=i,i=i+48|0,c[v>>2]=q,h[v+8>>3]=p,c[v+16>>2]=r,h[v+24>>3]=n,c[v+32>>2]=s,h[v+40>>3]=j,v)|0);s=c[m>>2]|0;aF(10,s|0);t=c[m>>2]|0;u=a[54017]|0;w=u<<24>>24==118;x=w?148008:147816;y=cf(t|0,148168,(v=i,i=i+8|0,c[v>>2]=x,v)|0)|0;i=b;return}else if((d|0)==100){aI(148856,20,1,c[m>>2]|0);t=c[m>>2]|0;u=a[54017]|0;w=u<<24>>24==118;x=w?148008:147816;y=cf(t|0,148168,(v=i,i=i+8|0,c[v>>2]=x,v)|0)|0;i=b;return}else if((d|0)==110){aI(149024,10,1,c[m>>2]|0);t=c[m>>2]|0;u=a[54017]|0;w=u<<24>>24==118;x=w?148008:147816;y=cf(t|0,148168,(v=i,i=i+8|0,c[v>>2]=x,v)|0)|0;i=b;return}else{uf(-1,148400,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function jX(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0,K=0,L=0,M=0.0,N=0,O=0,P=0;b=i;i=i+48|0;d=b|0;e=b+24|0;f=c[13898]|0;g=c[1054]|0;j=c[g+(f*40&-1)+36>>2]|0;k=c[g+(f*40&-1)+32>>2]|0;l=(a[g+(f*40&-1)|0]&1)==0;n=(j|0)>0;o=c[10036]|0;p=21680;q=116616;L11099:while(1){L11101:do{if(!l){if(n){r=0;s=0;t=k;while(1){u=a[q+r|0]|0;if(u<<24>>24==(a[o+(r+t|0)|0]|0)){w=t;x=s}else{if(u<<24>>24!=36){break L11101}w=t-1|0;x=1}y=r+1|0;if((y|0)<(x+j|0)){r=y;s=x;t=w}else{break}}if((x|0)==0){z=y}else{A=p;break L11099}}else{z=0}t=a[q+z|0]|0;if((t<<24>>24|0)==36|(t<<24>>24|0)==0){A=p;break L11099}}}while(0);t=p+8|0;s=c[t>>2]|0;if((s|0)==0){A=t;break}else{p=t;q=s}}q=c[A+4>>2]|0;if((q|0)==1){if(!(a[928]|0)){A=c[m>>2]|0;aF(10,A|0)}A=c[12890]|0;p=c[m>>2]|0;cf(p|0,114608,(v=i,i=i+8|0,c[v>>2]=122960,v)|0);jh(c[m>>2]|0,122960,A);c[13898]=(c[13898]|0)+1;i=b;return}else if((q|0)==2){if(!(a[928]|0)){A=c[m>>2]|0;aF(10,A|0)}A=c[10058]|0;cf(c[m>>2]|0,114608,(v=i,i=i+8|0,c[v>>2]=122816,v)|0);jh(c[m>>2]|0,122816,A);c[13898]=(c[13898]|0)+1;i=b;return}else if((q|0)==4){j7();c[13898]=(c[13898]|0)+1;i=b;return}else if((q|0)==9){aI(115400,27,1,c[m>>2]|0);A=c[m>>2]|0;if((a[30080]&1)==0){aI(115272,18,1,A|0)}else{aI(115320,56,1,A|0)}c[13898]=(c[13898]|0)+1;i=b;return}else if((q|0)==3){A=f+1|0;c[13898]=A;L11134:do{if((A|0)<(c[8272]|0)){L11136:do{if((a[g+(A*40&-1)|0]&1)!=0){p=c[g+(A*40&-1)+36>>2]|0;z=g+(A*40&-1)+32|0;y=0;while(1){if((y|0)>=(p|0)){break}if((a[o+((c[z>>2]|0)+y|0)|0]|0)==(a[y+103664|0]|0)){y=y+1|0}else{break L11136}}if((y|0)==1){B=0;break L11134}}}while(0);z=is(e)|0;p=c[z>>2]|0;if((p|0)==1){C=+(c[z+8>>2]|0)}else if((p|0)==3){C=+uz(c[z+8>>2]|0,0)}else if((p|0)==2){C=+h[z+8>>3]}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}z=e|0;if((c[z>>2]|0)==3){uu(c[e+8>>2]|0);c[z>>2]=1}z=~~C;if((z|0)>=1){B=z;break}uf(c[13898]|0,208936,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{B=0}}while(0);e=c[10820]|0;if((e|0)==0){D=0}else{A=(B|0)==0;z=0;p=e;while(1){e=c[p+4>>2]|0;if(A){E=e;F=8155}else{if((e|0)==(B|0)){E=B;F=8155}else{G=z}}if((F|0)==8155){F=0;e=c[m>>2]|0;cf(e|0,75168,(v=i,i=i+8|0,c[v>>2]=E,v)|0);ji(c[m>>2]|0,p+8|0,1);e=c[m>>2]|0;aF(10,e|0);G=1}e=c[p>>2]|0;if((e|0)==0){D=G;break}else{z=G;p=e}}}if((B|0)<1|D){i=b;return}else{uf(c[13898]|0,74736,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}else if((q|0)==8){ka();c[13898]=(c[13898]|0)+1;i=b;return}else if((q|0)==7){kb();c[13898]=(c[13898]|0)+1;i=b;return}else if((q|0)==11){j9();c[13898]=(c[13898]|0)+1;i=b;return}else if((q|0)==10){j8();c[13898]=(c[13898]|0)+1;i=b;return}else if((q|0)==5){D=f+1|0;c[13898]=D;L11198:do{if((D|0)<(c[8272]|0)){L11200:do{if((a[g+(D*40&-1)|0]&1)!=0){f=c[g+(D*40&-1)+36>>2]|0;B=g+(D*40&-1)+32|0;p=0;while(1){if((p|0)>=(f|0)){break}if((a[o+((c[B>>2]|0)+p|0)|0]|0)==(a[p+103664|0]|0)){p=p+1|0}else{break L11200}}if((p|0)==1){H=0;break L11198}}}while(0);B=is(d)|0;f=c[B>>2]|0;if((f|0)==2){I=+h[B+8>>3]}else if((f|0)==3){I=+uz(c[B+8>>2]|0,0)}else if((f|0)==1){I=+(c[B+8>>2]|0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}B=d|0;if((c[B>>2]|0)==3){uu(c[d+8>>2]|0);c[B>>2]=1}B=~~I;if((B|0)>=1){H=B;break}uf(c[13898]|0,208936,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{H=0}}while(0);kd(H);i=b;return}else if((q|0)==6){if(!(a[928]|0)){q=c[m>>2]|0;aF(10,q|0)}aI(122192,33,1,c[m>>2]|0);q=c[12738]|0;if((q|0)==0){J=179864}else{J=c[21784+(q<<2)>>2]|0}I=+h[6371];H=c[12739]|0;if((H|0)==(q|0)){K=179864}else{K=c[21784+(H<<2)>>2]|0}C=+h[6372];q=c[12740]|0;if((q|0)==(H|0)){L=179864}else{L=c[21784+(q<<2)>>2]|0}M=+h[6373];cf(c[m>>2]|0,77392,(v=i,i=i+48|0,c[v>>2]=J,h[v+8>>3]=I,c[v+16>>2]=K,h[v+24>>3]=C,c[v+32>>2]=L,h[v+40>>3]=M,v)|0);aF(10,c[m>>2]|0);c[13898]=(c[13898]|0)+1;i=b;return}else{L=c[12890]|0;cf(c[m>>2]|0,114608,(v=i,i=i+8|0,c[v>>2]=122960,v)|0);jh(c[m>>2]|0,122960,L);L=c[10058]|0;cf(c[m>>2]|0,114608,(v=i,i=i+8|0,c[v>>2]=122816,v)|0);jh(c[m>>2]|0,122816,L);L=c[10820]|0;if((L|0)!=0){K=L;do{cf(c[m>>2]|0,75168,(v=i,i=i+8|0,c[v>>2]=c[K+4>>2],v)|0);ji(c[m>>2]|0,K+8|0,1);aF(10,c[m>>2]|0);K=c[K>>2]|0;}while((K|0)!=0)}j7();aI(115400,27,1,c[m>>2]|0);K=c[m>>2]|0;if((a[30080]&1)==0){aI(115272,18,1,K|0)}else{aI(115320,56,1,K|0)}j8();kd(0);j9();ka();if(!(a[928]|0)){K=c[m>>2]|0;aF(10,K|0)}aI(122192,33,1,c[m>>2]|0);K=c[12738]|0;if((K|0)==0){N=179864}else{N=c[21784+(K<<2)>>2]|0}M=+h[6371];L=c[12739]|0;if((L|0)==(K|0)){O=179864}else{O=c[21784+(L<<2)>>2]|0}C=+h[6372];K=c[12740]|0;if((K|0)==(L|0)){P=179864}else{P=c[21784+(K<<2)>>2]|0}I=+h[6373];cf(c[m>>2]|0,77392,(v=i,i=i+48|0,c[v>>2]=N,h[v+8>>3]=M,c[v+16>>2]=O,h[v+24>>3]=C,c[v+32>>2]=P,h[v+40>>3]=I,v)|0);aF(10,c[m>>2]|0);kb();i=b;return}}function jY(){var b=0,d=0,e=0.0,f=0.0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}e=+g[38];cf(c[m>>2]|0,182560,(v=i,i=i+16|0,h[v>>3]=+g[178],h[v+8>>3]=e,v)|0);e=+g[18074];if(e>0.0){d=c[m>>2]|0;f=e;cf(d|0,181056,(v=i,i=i+8|0,h[v>>3]=f,v)|0);i=b;return}d=c[m>>2]|0;if(e==0.0){aI(180712,36,1,d|0);i=b;return}else{f=-0.0-e;cf(d|0,180280,(v=i,i=i+8|0,h[v>>3]=f,v)|0);i=b;return}}function jZ(b,d,e,f,g,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=j|0;var k=0,l=0,n=0.0,o=0,p=0;k=i;if(!(a[928]|0)){l=c[m>>2]|0;aF(10,l|0)}l=c[m>>2]|0;n=+h[77];if((a[624]&1)==0){cf(l|0,185536,(v=i,i=i+8|0,h[v>>3]=n,v)|0)}else{cf(l|0,186024,(v=i,i=i+8|0,h[v>>3]=n,v)|0)}l=c[10026]|0;if((l|0)>-1){o=c[m>>2]|0;p=(l|0)==0?150704:150856;cf(o|0,185040,(v=i,i=i+8|0,c[v>>2]=p,v)|0)}if(b){j4(2)}if(f){j4(6)}if(d){j4(1)}if(g){j4(5)}if(e){j4(0)}if(!j){a[25280]=0;i=k;return}j4(3);a[25280]=0;i=k;return}function j_(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}d=c[13898]|0;e=c[1054]|0;f=c[e+(d*40&-1)+36>>2]|0;g=c[e+(d*40&-1)+32>>2]|0;h=(a[e+(d*40&-1)|0]&1)==0;e=(f|0)>0;j=c[10036]|0;k=56720;l=77416;L11280:while(1){L11282:do{if(!h){if(e){n=0;o=0;p=g;while(1){q=a[l+n|0]|0;if(q<<24>>24==(a[j+(n+p|0)|0]|0)){r=p;s=o}else{if(q<<24>>24!=36){break L11282}r=p-1|0;s=1}t=n+1|0;if((t|0)<(s+f|0)){n=t;o=s;p=r}else{break}}if((s|0)==0){u=t}else{w=k;break L11280}}else{u=0}p=a[l+u|0]|0;if((p<<24>>24|0)==36|(p<<24>>24|0)==0){w=k;break L11280}}}while(0);p=k+8|0;o=c[p>>2]|0;if((o|0)==0){w=p;break}else{k=p;l=o}}l=c[w+4>>2]|0;if((l|0)>-1){c[13898]=d+1;d=c[m>>2]|0;w=56832+(l*24&-1)|0;k=j3(64813+(l*688&-1)|0)|0;cf(d|0,203592,(v=i,i=i+16|0,c[v>>2]=w,c[v+8>>2]=k,v)|0);i=b;return}else{x=0}do{if((c[64808+(x*688&-1)>>2]|0)==1){k=c[m>>2]|0;w=56832+(x*24&-1)|0;d=j3(64813+(x*688&-1)|0)|0;cf(k|0,203592,(v=i,i=i+16|0,c[v>>2]=w,c[v+8>>2]=d,v)|0)}x=x+1|0;}while((x|0)<11);i=b;return}function j$(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=i;d=c[65040+(a*688&-1)>>2]|0;if((d|0)==2){e=c[m>>2]|0;f=56832+(a*24&-1)|0;g=~~+h[65048+(a*688&-1)>>3];cf(e|0,187104,(v=i,i=i+16|0,c[v>>2]=f,c[v+8>>2]=g,v)|0);i=b;return}else if((d|0)==1){g=56832+(a*24&-1)|0;cf(c[m>>2]|0,191400,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=g,v)|0);i=b;return}else if((d|0)==0){cf(c[m>>2]|0,193440,(v=i,i=i+8|0,c[v>>2]=56832+(a*24&-1),v)|0);i=b;return}else if((d|0)==3){cf(c[m>>2]|0,188528,(v=i,i=i+8|0,c[v>>2]=56832+(a*24&-1),v)|0);i=b;return}else{uf(-1,186648,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function j0(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}d=c[13898]|0;L11319:do{if((d|0)<(c[8272]|0)){e=c[1054]|0;f=(a[e+(d*40&-1)|0]&1)==0;if(f){break}g=c[e+(d*40&-1)+36>>2]|0;h=e+(d*40&-1)+32|0;e=c[10036]|0;j=0;while(1){if((j|0)>=(g|0)){k=8291;break}if((a[e+((c[h>>2]|0)+j|0)|0]|0)==(a[j+103664|0]|0)){j=j+1|0}else{break}}if((k|0)==8291){if((j|0)==1){k=8300;break}}if(!((g|0)>0&(f^1))){break}e=c[10036]|0;l=0;n=0;o=c[h>>2]|0;while(1){if((a[l+210832|0]|0)==(a[e+(l+o|0)|0]|0)){p=o;q=n}else{if((l|0)!=4){break L11319}p=o-1|0;q=1}r=l+1|0;if((r|0)<(q+g|0)){l=r;n=q;o=p}else{break}}if((q|0)!=0){k=8300;break}if((l|0)==3|(l|0)==7){k=8300}}else{k=8300}}while(0);do{if((k|0)==8300){q=c[8528]|0;p=c[m>>2]|0;if((q|0)==0){aI(210088,41,1,p|0);break}else{cf(p|0,209400,(v=i,i=i+8|0,c[v>>2]=q,v)|0);break}}}while(0);q=c[13898]|0;L11343:do{if((q|0)<(c[8272]|0)){p=c[1054]|0;d=(a[p+(q*40&-1)|0]&1)==0;if(d){break}o=c[p+(q*40&-1)+36>>2]|0;n=p+(q*40&-1)+32|0;p=c[10036]|0;g=0;while(1){if((g|0)>=(o|0)){k=8308;break}if((a[p+((c[n>>2]|0)+g|0)|0]|0)==(a[g+103664|0]|0)){g=g+1|0}else{break}}if((k|0)==8308){if((g|0)==1){k=8317;break}}if(!((o|0)>0&(d^1))){break}p=c[10036]|0;l=0;e=0;h=c[n>>2]|0;while(1){if((a[l+209008|0]|0)==(a[p+(l+h|0)|0]|0)){s=h;t=e}else{if((l|0)!=3){break L11343}s=h-1|0;t=1}f=l+1|0;if((f|0)<(t+o|0)){l=f;e=t;h=s}else{break}}if((t|0)!=0){k=8317;break}if((l|0)==2|(l|0)==9){k=8317}}else{k=8317}}while(0);do{if((k|0)==8317){t=a[47120]|0;s=c[m>>2]|0;if(t<<24>>24==0){aI(207840,41,1,s|0);break}else{q=t<<24>>24;cf(s|0,208456,(v=i,i=i+8|0,c[v>>2]=q,v)|0);break}}}while(0);q=c[13898]|0;L11367:do{if((q|0)<(c[8272]|0)){s=c[1054]|0;t=(a[s+(q*40&-1)|0]&1)==0;if(t){break}h=c[s+(q*40&-1)+36>>2]|0;e=s+(q*40&-1)+32|0;s=c[10036]|0;o=0;while(1){if((o|0)>=(h|0)){k=8325;break}if((a[s+((c[e>>2]|0)+o|0)|0]|0)==(a[o+103664|0]|0)){o=o+1|0}else{break}}if((k|0)==8325){if((o|0)==1){k=8334;break}}if(!((h|0)>0&(t^1))){break}s=c[10036]|0;l=0;p=0;n=c[e>>2]|0;while(1){if((a[l+207024|0]|0)==(a[s+(l+n|0)|0]|0)){u=n;w=p}else{if((l|0)!=3){break L11367}u=n-1|0;w=1}d=l+1|0;if((d|0)<(w+h|0)){l=d;p=w;n=u}else{break}}if((w|0)!=0){k=8334;break}if((l|0)==2|(l|0)==8){k=8334}}else{k=8334}}while(0);if((k|0)==8334){w=c[m>>2]|0;u=c[11948]|0;cf(w|0,206416,(v=i,i=i+8|0,c[v>>2]=u,v)|0)}if((a[47712]&1)!=0){u=c[m>>2]|0;aI(205568,55,1,u|0)}if((a[47472]&1)!=0){u=c[m>>2]|0;aI(204904,55,1,u|0)}u=c[13898]|0;w=c[1054]|0;q=c[w+(u*40&-1)+36>>2]|0;n=c[w+(u*40&-1)+32>>2]|0;L11394:do{if((a[w+(u*40&-1)|0]&1)!=0&(q|0)>0){p=c[10036]|0;h=0;s=0;e=n;while(1){if((a[h+204608|0]|0)==(a[p+(h+e|0)|0]|0)){x=e;y=s}else{if((h|0)!=3){z=u;break L11394}x=e-1|0;y=1}t=h+1|0;if((t|0)<(y+q|0)){h=t;s=y;e=x}else{break}}if((y|0)==0){if(!((h|0)==2|(h|0)==6)){z=u;break}}e=c[8272]|0;do{if((u|0)<(e|0)){s=c[10036]|0;p=0;while(1){if((p|0)>=(q|0)){k=8351;break}if((a[s+(n+p|0)|0]|0)==(a[p+103664|0]|0)){p=p+1|0}else{break}}if((k|0)==8351){if((p|0)==1){A=u;break}}s=u+1|0;c[13898]=s;A=s}else{A=u}}while(0);L11415:do{if((A|0)<(e|0)){if((a[w+(A*40&-1)|0]&1)==0){B=A;C=e;break}h=c[w+(A*40&-1)+36>>2]|0;s=w+(A*40&-1)+32|0;l=c[10036]|0;t=0;while(1){if((t|0)>=(h|0)){break}if((a[l+((c[s>>2]|0)+t|0)|0]|0)==(a[t+103664|0]|0)){t=t+1|0}else{B=A;C=e;break L11415}}if((t|0)==1){k=8359}else{B=A;C=e}}else{k=8359}}while(0);if((k|0)==8359){eN(c[m>>2]|0);e=c[m>>2]|0;aF(10,e|0);B=c[13898]|0;C=c[8272]|0}L11425:do{if((B|0)<(C|0)){e=c[1054]|0;s=(a[e+(B*40&-1)|0]&1)==0;if(s){D=B;E=C;break}l=c[e+(B*40&-1)+36>>2]|0;h=e+(B*40&-1)+32|0;e=c[10036]|0;p=0;while(1){if((p|0)>=(l|0)){k=8365;break}if((a[e+((c[h>>2]|0)+p|0)|0]|0)==(a[p+103664|0]|0)){p=p+1|0}else{break}}if((k|0)==8365){if((p|0)==1){k=8374;break}}if(!((l|0)>0&(s^1))){D=B;E=C;break}e=c[10036]|0;t=0;o=0;d=c[h>>2]|0;while(1){if((a[t+204360|0]|0)==(a[e+(t+d|0)|0]|0)){F=d;G=o}else{if((t|0)!=5){D=B;E=C;break L11425}F=d-1|0;G=1}g=t+1|0;if((g|0)<(G+l|0)){t=g;o=G;d=F}else{break}}if((G|0)!=0){k=8374;break}if((t|0)==4|(t|0)==9){k=8374}else{D=B;E=C}}else{k=8374}}while(0);if((k|0)==8374){eO(c[m>>2]|0);D=c[13898]|0;E=c[8272]|0}L11446:do{if((D|0)<(E|0)){d=c[1054]|0;if((a[d+(D*40&-1)|0]&1)==0){H=D;I=E;break}o=c[d+(D*40&-1)+36>>2]|0;l=d+(D*40&-1)+32|0;d=c[10036]|0;e=0;while(1){if((e|0)>=(o|0)){break}if((a[d+((c[l>>2]|0)+e|0)|0]|0)==(a[e+103664|0]|0)){e=e+1|0}else{H=D;I=E;break L11446}}if((e|0)==1){k=8381}else{H=D;I=E}}else{k=8381}}while(0);if((k|0)==8381){l=c[m>>2]|0;aF(10,l|0);H=c[13898]|0;I=c[8272]|0}do{if((H|0)<(I|0)){l=c[1054]|0;d=(a[l+(H*40&-1)|0]&1)==0;if(d){z=H;break L11394}o=c[l+(H*40&-1)+36>>2]|0;t=l+(H*40&-1)+32|0;l=c[10036]|0;h=0;while(1){if((h|0)>=(o|0)){k=8387;break}if((a[l+((c[t>>2]|0)+h|0)|0]|0)==(a[h+103664|0]|0)){h=h+1|0}else{break}}if((k|0)==8387){if((h|0)==1){break}}if(!((o|0)>0&(d^1))){z=H;break L11394}l=c[10036]|0;e=0;s=0;p=c[t>>2]|0;while(1){if((a[e+204080|0]|0)==(a[l+(e+p|0)|0]|0)){J=p;K=s}else{if((e|0)!=5){z=H;break L11394}J=p-1|0;K=1}g=e+1|0;if((g|0)<(K+o|0)){e=g;s=K;p=J}else{break}}if((K|0)!=0){break}if(!((e|0)==4|(e|0)==9)){z=H;break L11394}}}while(0);p=c[m>>2]|0;aI(192576,70,1,p|0);s=c[12174]|0;if((s|0)!=0){o=0;l=s;do{o=o+1|0;cf(p|0,189936,(v=i,i=i+8|0,c[v>>2]=l,v)|0);l=c[48696+(o<<3)>>2]|0;}while((l|0)!=0)}aF(10,p|0);z=c[13898]|0}else{z=u}}while(0);if((z|0)>=(c[8272]|0)){i=b;return}u=c[1054]|0;L11483:do{if((a[u+(z*40&-1)|0]&1)!=0){H=c[u+(z*40&-1)+36>>2]|0;K=u+(z*40&-1)+32|0;J=c[10036]|0;k=0;while(1){if((k|0)>=(H|0)){break}if((a[J+((c[K>>2]|0)+k|0)|0]|0)==(a[k+103664|0]|0)){k=k+1|0}else{break L11483}}if((k|0)!=1){break}i=b;return}}while(0);c[13898]=z+1;i=b;return}function j1(){var b=0,d=0,e=0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}d=c[m>>2]|0;if((c[8496]|0)==0){aI(211280,14,1,d|0);i=b;return}aI(221800,13,1,d|0);d=c[m>>2]|0;if((c[8498]|0)==0){aI(220672,35,1,d|0)}else{aI(221272,32,1,d|0)}d=c[m>>2]|0;if((c[8500]|0)==0){aI(218440,42,1,d|0)}else{aI(218904,53,1,d|0)}d=c[8497]|0;e=c[m>>2]|0;if((d|0)>0){cf(e|0,217848,(v=i,i=i+8|0,c[v>>2]=d,v)|0)}else{aI(217288,32,1,e|0)}cf(c[m>>2]|0,216608,(v=i,i=i+8|0,c[v>>2]=c[8503],v)|0);cf(c[m>>2]|0,216184,(v=i,i=i+8|0,c[v>>2]=c[13532],v)|0);e=c[13534]|0;if((e|0)!=0){d=c[m>>2]|0;cf(d|0,215632,(v=i,i=i+8|0,c[v>>2]=e,v)|0)}cf(c[m>>2]|0,215176,(v=i,i=i+8|0,c[v>>2]=c[8506],v)|0);e=c[8510]|0;if((e|0)!=0){d=c[m>>2]|0;cf(d|0,214656,(v=i,i=i+8|0,c[v>>2]=e,v)|0)}e=c[m>>2]|0;if((c[8499]|0)==0){aI(213400,33,1,e|0)}else{d=c[8504]|0;cf(e|0,213952,(v=i,i=i+8|0,c[v>>2]=d,v)|0)}cf(c[m>>2]|0,212848,(v=i,i=i+8|0,c[v>>2]=(c[8502]|0)!=0?150376:150208,v)|0);cf(c[m>>2]|0,212248,(v=i,i=i+8|0,c[v>>2]=(c[8501]|0)!=0?179864:211688,v)|0);i=b;return}function j2(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;b=i;i=i+56|0;d=b|0;e=c[10810]|0;f=d|0;uE(f|0,0,51);if(!(a[928]|0)){g=c[m>>2]|0;aF(10,g|0)}g=c[13898]|0;L11527:do{if((g|0)<(c[8272]|0)){h=c[1054]|0;j=(a[h+(g*40&-1)|0]&1)==0;k=c[h+(g*40&-1)+36>>2]|0;l=h+(g*40&-1)+32|0;L11529:do{if(j){n=c[l>>2]|0}else{h=c[10036]|0;o=0;while(1){if((o|0)>=(k|0)){p=8442;break}if((a[h+((c[l>>2]|0)+o|0)|0]|0)==(a[o+103664|0]|0)){o=o+1|0}else{break}}if((p|0)==8442){if((o|0)==1){p=8452;break L11527}}h=c[l>>2]|0;if(!((k|0)>0&(j^1))){n=h;break}q=c[10036]|0;r=0;do{if((a[r+74272|0]|0)!=(a[q+(r+h|0)|0]|0)){n=h;break L11529}r=r+1|0;}while((r|0)<(k|0));if((r|0)!=3){n=h;break}c[13898]=g+1;aI(73856,27,1,c[m>>2]|0);s=1;break L11527}}while(0);j=(k|0)>49?49:k;l=c[10036]|0;q=n;o=0;while(1){t=o+1|0;a[d+o|0]=a[l+q|0]|0;if((t|0)==(j|0)){break}else{q=q+1|0;o=t}}a[d+j|0]=0;c[13898]=g+1;p=8452}else{p=8452}}while(0);do{if((p|0)==8452){g=c[m>>2]|0;if((a[f]|0)==0){aI(72912,30,1,g|0);s=0;break}else{cf(g|0,73512,(v=i,i=i+8|0,c[v>>2]=f,v)|0);s=0;break}}}while(0);if((e|0)==0){i=b;return}else{u=e}do{e=c[u+4>>2]|0;g=bk(e|0,73808)|0;d=(a[f]|0)==0;if(d){p=8459}else{if((a_(e|0,f|0,uA(f|0)|0)|0)==0){p=8459}}do{if((p|0)==8459){p=0;if(!s){if(!((a_(e|0,167320,6)|0)!=0|d^1)){break}}if((a[u+8|0]&1)!=0){break}n=c[m>>2]|0;cf(n|0,223688,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=e,v)|0);n=c[m>>2]|0;aI(223040,2,1,n|0);j5(c[m>>2]|0,u+16|0,1);n=c[m>>2]|0;aF(10,n|0)}}while(0);u=c[u>>2]|0;}while((u|0)!=0);i=b;return}function j3(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;e=i;if((b|0)==0){f=0;i=e;return f|0}g=c[13364]|0;h=db(g,(uA(b|0)<<2)+4|0,124472)|0;c[13364]=h;c[13362]=h;g=a[b]|0;if(g<<24>>24==0){j=h}else{h=b;b=g;do{g=b<<24>>24;do{if((g|0)==13){k=c[13362]|0;c[13362]=k+1;a[k]=92;k=c[13362]|0;c[13362]=k+1;a[k]=114}else if((g|0)==10){k=c[13362]|0;c[13362]=k+1;a[k]=92;k=c[13362]|0;c[13362]=k+1;a[k]=110}else if((g|0)==34|(g|0)==92){k=c[13362]|0;c[13362]=k+1;a[k]=92;k=a[h]|0;l=c[13362]|0;c[13362]=l+1;a[l]=k}else if((g|0)==9){k=c[13362]|0;c[13362]=k+1;a[k]=92;k=c[13362]|0;c[13362]=k+1;a[k]=116}else{if((c[11252]|0)==15){k=c[13362]|0;c[13362]=k+1;a[k]=b;break}if((bB(b&255|0)|0)!=0){k=a[h]|0;l=c[13362]|0;c[13362]=l+1;a[l]=k;break}k=c[13362]|0;c[13362]=k+1;a[k]=92;be(c[13362]|0,123064,(v=i,i=i+8|0,c[v>>2]=d[h]|0,v)|0);k=c[13362]|0;if((a[k]|0)==0){break}else{m=k}do{m=m+1|0;c[13362]=m;}while((a[m]|0)!=0)}}while(0);h=h+1|0;b=a[h]|0;}while(b<<24>>24!=0);j=c[13362]|0}a[j]=0;f=c[13364]|0;i=e;return f|0}function j4(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,w=0,x=0,y=0,z=0.0,A=0,B=0;d=i;i=i+384|0;e=d|0;f=d+48|0;g=d+96|0;j=d+144|0;k=d+224|0;l=d+304|0;n=j3(64864+(b*688&-1)|0)|0;o=56832+(b*24&-1)|0;p=65072+(b*688&-1)|0;q=(a[p]&1)!=0?115944:115008;r=+h[65056+(b*688&-1)>>3];s=+h[65064+(b*688&-1)>>3];cf(c[m>>2]|0,116800,(v=i,i=i+32|0,c[v>>2]=o,c[v+8>>2]=q,h[v+16>>3]=r,h[v+24>>3]=s,v)|0);cf(c[m>>2]|0,113920,(v=i,i=i+8|0,c[v>>2]=o,v)|0);o=64916+(b*688&-1)|0;q=c[o>>2]&3;do{if((q|0)==2){t=c[m>>2]|0;aI(107752,7,1,t|0);if((c[o>>2]&4|0)==0){break}t=c[m>>2]|0;u=(a[p]&1)!=0?115008:115944;cf(t|0,106816,(v=i,i=i+8|0,c[v>>2]=u,v)|0)}else if((q|0)==0){aI(109752,4,1,c[m>>2]|0);i=d;return}else if((q|0)==1){aI(105832,9,1,c[m>>2]|0);if((c[o>>2]&4|0)==0){break}aI(104760,32,1,c[m>>2]|0)}}while(0);if((a[65024+(b*688&-1)|0]&1)!=0){o=c[m>>2]|0;aI(104192,34,1,o|0)}aI(103824,15,1,c[m>>2]|0);do{if((a[65272+(b*688&-1)|0]&1)==0){o=c[m>>2]|0;aI(100008,25,1,o|0)}else{o=c[65128+(b*688&-1)>>2]|0;if((o|0)==0){q=c[m>>2]|0;aI(103432,16,1,q|0);break}else if((o|0)==2){aI(101240,17,1,c[m>>2]|0);break}else if((o|0)==1){aI(100688,18,1,c[m>>2]|0);break}else{break}}}while(0);cf(c[m>>2]|0,99584,(v=i,i=i+8|0,c[v>>2]=n,v)|0);n=65032+(b*688&-1)|0;o=c[m>>2]|0;if((c[n>>2]|0)==0){aI(97264,23,1,o|0)}else{aI(99160,8,1,o|0);o=c[m>>2]|0;q=c[n>>2]|0;cf(o|0,98536,(v=i,i=i+8|0,c[v>>2]=q,v)|0);q=c[m>>2]|0;aI(97880,35,1,q|0)}aI(96688,11,1,c[m>>2]|0);q=c[64984+(b*688&-1)>>2]|0;if((q|0)==0){w=179864}else{w=c[21784+(q<<2)>>2]|0}s=+h[65e3+(b*688&-1)>>3];o=c[64988+(b*688&-1)>>2]|0;if((o|0)==(q|0)){x=179864}else{x=c[21784+(o<<2)>>2]|0}r=+h[65008+(b*688&-1)>>3];q=c[64992+(b*688&-1)>>2]|0;if((q|0)==(o|0)){y=179864}else{y=c[21784+(q<<2)>>2]|0}z=+h[65016+(b*688&-1)>>3];cf(c[m>>2]|0,77392,(v=i,i=i+48|0,c[v>>2]=w,h[v+8>>3]=s,c[v+16>>2]=x,h[v+24>>3]=r,c[v+32>>2]=y,h[v+40>>3]=z,v)|0);aI(84248,2,1,c[m>>2]|0);y=c[64920+(b*688&-1)>>2]|0;if((y|0)==5){x=c[m>>2]|0;aI(94856,30,1,x|0)}else if((y|0)==4){aI(95344,32,1,c[m>>2]|0)}else if((y|0)==2){aI(94192,8,1,c[m>>2]|0);x=64952+(b*688&-1)|0;do{if(+h[x>>3]!=-8.988465674311579e+307){w=c[m>>2]|0;aI(93552,6,1,w|0);w=64808+(b*688&-1)|0;q=c[m>>2]|0;if((c[w>>2]|0)==1){aF(34,q|0);o=j|0;n=64813+(b*688&-1)|0;z=+h[x>>3];t3(g,z);r=z- +O(+z);t4(o,80,n,g,r);n=j3(o)|0;o=c[m>>2]|0;aK(n|0,o|0);o=c[m>>2]|0;aF(34,o|0);A=w;break}else{r=+h[x>>3];cf(q|0,92736,(v=i,i=i+8|0,h[v>>3]=r,v)|0);A=w;break}}else{A=64808+(b*688&-1)|0}}while(0);x=(c[A>>2]|0)==1?91240:179864;cf(c[m>>2]|0,91888,(v=i,i=i+16|0,h[v>>3]=+h[64960+(b*688&-1)>>3],c[v+8>>2]=x,v)|0);x=64968+(b*688&-1)|0;do{if(+h[x>>3]!=8.988465674311579e+307){g=c[m>>2]|0;aI(90664,7,1,g|0);g=c[m>>2]|0;if((c[A>>2]|0)==1){aF(34,g|0);j=k|0;w=64813+(b*688&-1)|0;r=+h[x>>3];t3(f,r);z=r- +O(+r);t4(j,80,w,f,z);w=j3(j)|0;j=c[m>>2]|0;aK(w|0,j|0);j=c[m>>2]|0;aF(34,j|0);break}else{z=+h[x>>3];cf(g|0,92736,(v=i,i=i+8|0,h[v>>3]=z,v)|0);break}}}while(0);aF(10,c[m>>2]|0)}else if((y|0)==1){aI(95816,35,1,c[m>>2]|0)}else if((y|0)==3){aI(90168,25,1,c[m>>2]|0)}else{uf(-1,89432,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}y=64944+(b*688&-1)|0;if((c[y>>2]|0)!=0){x=c[m>>2]|0;aI(89080,18,1,x|0);x=c[y>>2]|0;L11649:do{if((x|0)!=0){y=64808+(b*688&-1)|0;f=l|0;k=64813+(b*688&-1)|0;A=x;do{g=c[A+8>>2]|0;if((g|0)!=0){j=c[m>>2]|0;w=j3(g)|0;cf(j|0,103640,(v=i,i=i+8|0,c[v>>2]=w,v)|0)}w=c[m>>2]|0;if((c[y>>2]|0)==1){aF(34,w|0);z=+h[A>>3];t3(e,z);r=z- +O(+z);t4(f,80,k,e,r);j=j3(f)|0;g=c[m>>2]|0;aK(j|0,g|0);g=c[m>>2]|0;aF(34,g|0)}else{r=+h[A>>3];cf(w|0,92736,(v=i,i=i+8|0,h[v>>3]=r,v)|0)}w=c[A+12>>2]|0;if((w|0)!=0){g=c[m>>2]|0;cf(g|0,95144,(v=i,i=i+8|0,c[v>>2]=w,v)|0)}w=A+16|0;if((c[w>>2]|0)==0){break L11649}aI(86120,2,1,c[m>>2]|0);A=c[w>>2]|0;}while((A|0)!=0)}}while(0);e=c[m>>2]|0;aI(84944,2,1,e|0)}e=64928+(b*688&-1)|0;x=e|0;if((c[x>>2]|0)!=0){l=c[m>>2]|0;aI(84256,2,1,l|0);l=c[m>>2]|0;if((c[x>>2]|0)==0){B=l}else{aI(145280,10,1,l|0);jg(l,e);B=c[m>>2]|0}aF(10,B|0)}B=c[64924+(b*688&-1)>>2]|0;if((B|0)==0){i=d;return}if((a[B]|0)==0){i=d;return}cf(c[m>>2]|0,82560,(v=i,i=i+8|0,c[v>>2]=B,v)|0);i=d;return}function j5(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0.0,n=0,o=0;f=i;g=c[d>>2]|0;if((g|0)==2){j=d+8|0;if((cg(+(+h[j>>3]))|0)==0){aI(133568,3,1,b|0);i=f;return}k=d+16|0;l=+h[k>>3]!=0.0;m=+h[j>>3];j=c[8300]|0;n=j+1|0;c[8300]=(n|0)>3?0:n;n=33096+(j*25&-1)|0;be(n|0,121864,(v=i,i=i+8|0,h[v>>3]=m,v)|0);do{if((a8(n|0,46)|0)==0){if((a8(n|0,101)|0)!=0){break}if((a8(n|0,69)|0)!=0){break}o=(uA(n|0)|0)+(33096+(j*25&-1))|0;a[o]=a[119960]|0;a[o+1|0]=a[119961|0]|0;a[o+2|0]=a[119962|0]|0}}while(0);if(!l){aK(n|0,b|0);i=f;return}m=+h[k>>3];k=c[8300]|0;l=k+1|0;c[8300]=(l|0)>3?0:l;l=33096+(k*25&-1)|0;be(l|0,121864,(v=i,i=i+8|0,h[v>>3]=m,v)|0);do{if((a8(l|0,46)|0)==0){if((a8(l|0,101)|0)!=0){break}if((a8(l|0,69)|0)!=0){break}j=(uA(l|0)|0)+(33096+(k*25&-1))|0;a[j]=a[119960]|0;a[j+1|0]=a[119961|0]|0;a[j+2|0]=a[119962|0]|0}}while(0);cf(b|0,129368,(v=i,i=i+16|0,c[v>>2]=n,c[v+8>>2]=l,v)|0);i=f;return}else if((g|0)==1){cf(b|0,21e4,(v=i,i=i+8|0,c[v>>2]=c[d+8>>2],v)|0);i=f;return}else if((g|0)==3){g=c[d+8>>2]|0;if((g|0)==0){i=f;return}if(e){e=j3(g)|0;cf(b|0,126760,(v=i,i=i+8|0,c[v>>2]=e,v)|0);i=f;return}else{aK(g|0,b|0);i=f;return}}else{uf(-1,125696,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function j6(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,n=0.0,o=0,p=0.0,q=0,r=0.0;f=i;if((e|0)==0){i=f;return}g=c[m>>2]|0;j=c[e+60>>2]|0;if((j|0)==0){k=179864}else{k=j3(j)|0}cf(g|0,201680,(v=i,i=i+24|0,c[v>>2]=b,c[v+8>>2]=d,c[v+16>>2]=k,v)|0);k=c[e+144>>2]|0;if((k|0)==0){l=179864}else{l=c[21784+(k<<2)>>2]|0}n=+h[e+160>>3];d=c[e+148>>2]|0;if((d|0)==(k|0)){o=179864}else{o=c[21784+(d<<2)>>2]|0}p=+h[e+168>>3];k=c[e+152>>2]|0;if((k|0)==(d|0)){q=179864}else{q=c[21784+(k<<2)>>2]|0}r=+h[e+176>>3];cf(c[m>>2]|0,77392,(v=i,i=i+48|0,c[v>>2]=l,h[v+8>>3]=n,c[v+16>>2]=o,h[v+24>>3]=p,c[v+32>>2]=q,h[v+40>>3]=r,v)|0);q=c[e+64>>2]|0;if((q|0)!=0){o=c[m>>2]|0;l=j3(q)|0;cf(o|0,200976,(v=i,i=i+8|0,c[v>>2]=l,v)|0)}do{if((c[e+4>>2]|0)==-3){l=c[m>>2]|0;aI(200160,30,1,l|0)}else{l=c[e+52>>2]|0;if((l|0)==0){break}o=c[m>>2]|0;cf(o|0,199392,(v=i,i=i+8|0,c[v>>2]=l,v)|0)}}while(0);l=e+72|0;if((c[l>>2]|0)!=0){o=c[m>>2]|0;aI(145280,10,1,o|0);jg(o,l)}if((a[e+184|0]&1)!=0){e=c[m>>2]|0;aI(199048,11,1,e|0)}aF(10,c[m>>2]|0);i=f;return}function j7(){var b=0,d=0,e=0,f=0,g=0.0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}d=c[12372]|0;if((d|0)==1|(d|0)==4){e=c[m>>2]|0;f=(d|0)==1?179864:114984;g=+(c[12373]|0)/100.0;cf(e|0,115056,(v=i,i=i+16|0,c[v>>2]=f,h[v+8>>3]=g,v)|0)}else if((d|0)==2|(d|0)==5){f=c[12374]|0;cf(c[m>>2]|0,114872,(v=i,i=i+16|0,c[v>>2]=(d|0)==2?179864:114984,c[v+8>>2]=f,v)|0)}else{aI(114808,20,1,c[m>>2]|0)}f=c[m>>2]|0;if((c[12376]|0)==1&(c[12377]|0)==-3){aI(114720,16,1,f|0);i=b;return}else{aI(114672,13,1,f|0);jg(c[m>>2]|0,49504);f=c[m>>2]|0;aF(10,f|0);i=b;return}}function j8(){var a=0,b=0,d=0,e=0,f=0.0,g=0,j=0,k=0.0,l=0,n=0.0,o=0,p=0;a=i;b=c[9670]|0;if((b|0)==4){d=c[m>>2]|0;e=c[9671]|0;f=+h[4840];cf(d|0,115720,(v=i,i=i+16|0,c[v>>2]=e,h[v+8>>3]=f,v)|0)}else if((b|0)==3){cf(c[m>>2]|0,115896,(v=i,i=i+8|0,c[v>>2]=c[9671],v)|0)}else if((b|0)==1){aI(115656,31,1,c[m>>2]|0)}else if((b|0)==2){aI(115560,34,1,c[m>>2]|0)}aI(115520,14,1,c[m>>2]|0);b=c[9720]|0;if((b|0)==0){g=179864}else{g=c[21784+(b<<2)>>2]|0}f=+h[4862];e=c[9721]|0;if((e|0)==(b|0)){j=179864}else{j=c[21784+(e<<2)>>2]|0}k=+h[4863];b=c[9722]|0;if((b|0)==(e|0)){l=179864}else{l=c[21784+(b<<2)>>2]|0}n=+h[4864];cf(c[m>>2]|0,77392,(v=i,i=i+48|0,c[v>>2]=g,h[v+8>>3]=f,c[v+16>>2]=j,h[v+24>>3]=k,c[v+32>>2]=l,h[v+40>>3]=n,v)|0);if((c[9702]|0)!=1){o=c[m>>2]|0;p=aF(10,o|0)|0;i=a;return}cf(c[m>>2]|0,115464,(v=i,i=i+8|0,c[v>>2]=(c[9703]|0)+1,v)|0);o=c[m>>2]|0;p=aF(10,o|0)|0;i=a;return}function j9(){var b=0,d=0,e=0.0,f=0,g=0;b=i;cf(c[m>>2]|0,121184,(v=i,i=i+8|0,c[v>>2]=(c[14068]|0)==257?120960:120872,v)|0);aI(120712,32,1,c[m>>2]|0);d=c[m>>2]|0;e=+h[7032];if((c[14062]|0)==1){cf(d|0,120416,(v=i,i=i+8|0,h[v>>3]=e,v)|0)}else{cf(d|0,120264,(v=i,i=i+8|0,h[v>>3]=e,v)|0)}d=c[m>>2]|0;if((a[56264]&1)==0){aI(119752,28,1,d|0)}else{f=(c[14067]|0)+1|0;cf(d|0,119912,(v=i,i=i+8|0,c[v>>2]=f,v)|0)}cf(c[m>>2]|0,119616,(v=i,i=i+8|0,h[v>>3]=+h[7035],v)|0);f=c[m>>2]|0;d=c[14072]|0;do{if((d|0)==2){g=119368}else{if((d|0)==3){g=119280;break}g=(d|0)==1?119216:119160}}while(0);cf(f|0,119552,(v=i,i=i+8|0,c[v>>2]=g,v)|0);cf(c[m>>2]|0,119104,(v=i,i=i+8|0,c[v>>2]=(a[56292]&1)!=0?116904:116760,v)|0);i=b;return}function ka(){var b=0,d=0,e=0,f=0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}d=c[12292]|0;if((d|0)>0){e=150856}else{e=(d|0)<0?121920:150704}cf(c[m>>2]|0,122136,(v=i,i=i+8|0,c[v>>2]=e,v)|0);do{if((a[49240]&1)==0){e=c[12303]|0;d=c[m>>2]|0;if((e|0)==-4){aI(121848,10,1,d|0);break}else{f=e+1|0;cf(d|0,121528,(v=i,i=i+8|0,c[v>>2]=f,v)|0);break}}else{jg(c[m>>2]|0,49248)}}while(0);cf(c[m>>2]|0,121456,(v=i,i=i+8|0,h[v>>3]=+h[6153],v)|0);aI(121392,11,1,c[m>>2]|0);jf(c[m>>2]|0,49176);i=b;return}function kb(){var b=0,d=0,e=0,f=0.0,g=0,j=0,k=0.0,l=0,n=0.0;b=i;if(!(a[928]|0)){d=c[m>>2]|0;aF(10,d|0)}aI(122752,32,1,c[m>>2]|0);d=c[12418]|0;if((d|0)==0){e=179864}else{e=c[21784+(d<<2)>>2]|0}f=+h[6211];g=c[12419]|0;if((g|0)==(d|0)){j=179864}else{j=c[21784+(g<<2)>>2]|0}k=+h[6212];d=c[12420]|0;if((d|0)==(g|0)){l=179864}else{l=c[21784+(d<<2)>>2]|0}n=+h[6213];cf(c[m>>2]|0,77392,(v=i,i=i+48|0,c[v>>2]=e,h[v+8>>3]=f,c[v+16>>2]=j,h[v+24>>3]=k,c[v+32>>2]=l,h[v+40>>3]=n,v)|0);cf(c[m>>2]|0,122680,(v=i,i=i+8|0,h[v>>3]=+h[6214],v)|0);l=c[12406]|0;if((l|0)==1){j=c[m>>2]|0;aI(122448,53,1,j|0);i=b;return}else if((l|0)==0){aI(122568,66,1,c[m>>2]|0);i=b;return}else if((l|0)==2){aI(122360,53,1,c[m>>2]|0);i=b;return}else{i=b;return}}function kc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,n=0,o=0,p=0;e=i;f=b|0;if((c[f>>2]|0)<=0){i=e;return}g=(d|0)>0;h=(d|0)<6;j=d+2|0;k=0;do{aF(9,c[m>>2]|0);if(g){l=0;do{aF(32,c[m>>2]|0);l=l+1|0;}while((l|0)<(d|0))}l=b+8+(k<<5)|0;aK(c[41160+(c[l>>2]<<3)>>2]|0,c[m>>2]|0);n=b+8+(k<<5)+8|0;o=c[l>>2]|0;do{if((o|0)==37|(o|0)==38|(o|0)==39|(o|0)==40){l=c[m>>2]|0;p=c[n>>2]|0;cf(l|0,105024,(v=i,i=i+8|0,c[v>>2]=p,v)|0)}else if((o|0)==6){p=n;cf(c[m>>2]|0,124744,(v=i,i=i+8|0,c[v>>2]=c[(c[p>>2]|0)+4>>2],v)|0);if(!h){l=c[m>>2]|0;aF(10,l|0);break}l=c[m>>2]|0;if((c[(c[p>>2]|0)+8>>2]|0)==0){aI(105080,13,1,l|0);break}else{aF(10,l|0);kc(c[(c[p>>2]|0)+8>>2]|0,j);break}}else if((o|0)==2){cf(c[m>>2]|0,105160,(v=i,i=i+8|0,c[v>>2]=a[c[(c[n>>2]|0)+4>>2]|0]|0,v)|0)}else if((o|0)==0){cf(c[m>>2]|0,105248,(v=i,i=i+8|0,c[v>>2]=c[(c[n>>2]|0)+4>>2],v)|0)}else if((o|0)==3){cf(c[m>>2]|0,105160,(v=i,i=i+8|0,c[v>>2]=a[(c[(c[n>>2]|0)+4>>2]|0)+1|0]|0,v)|0)}else if((o|0)==1){aF(32,c[m>>2]|0);j5(c[m>>2]|0,n|0,1);aF(10,c[m>>2]|0)}else if((o|0)==31){cf(c[m>>2]|0,104848,(v=i,i=i+8|0,c[v>>2]=c[b+8+(k<<5)+16>>2],v)|0)}else if((o|0)==7|(o|0)==8){p=n;cf(c[m>>2]|0,124744,(v=i,i=i+8|0,c[v>>2]=c[(c[p>>2]|0)+4>>2],v)|0);if(!h){l=c[m>>2]|0;aF(10,l|0);break}l=c[m>>2]|0;if((c[(c[p>>2]|0)+8>>2]|0)==0){aI(105080,13,1,l|0);break}else{aF(10,l|0);kc(c[(c[p>>2]|0)+8>>2]|0,j);break}}else{aF(10,c[m>>2]|0)}}while(0);k=k+1|0;}while((k|0)<(c[f>>2]|0));i=e;return}function kd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0.0;b=i;d=c[10824]|0;if((d|0)==0){e=0}else{f=(a|0)==0;g=0;j=d;while(1){d=c[j+4>>2]|0;if(f){k=d;l=8695}else{if((d|0)==(a|0)){k=a;l=8695}else{n=g}}do{if((l|0)==8695){l=0;d=c[m>>2]|0;cf(d|0,116640,(v=i,i=i+8|0,c[v>>2]=k,v)|0);d=c[m>>2]|0;aD(d|0);d=c[m>>2]|0;o=j+72|0;p=c[o>>2]|0;if((p|0)==0){q=116368}else{q=(p|0)==2?116472:116424}p=(c[j+12>>2]|0)!=0?150856:150704;cf(d|0,116584,(v=i,i=i+16|0,c[v>>2]=q,c[v+8>>2]=p,v)|0);ji(c[m>>2]|0,j+16|0,0);p=c[m>>2]|0;aF(10,p|0);if((c[o>>2]|0)==0){n=1;break}o=c[m>>2]|0;p=j+112|0;d=c[p>>2]|0;if((d|0)==2){r=128e3}else{r=(d|0)==1?127904:127768}cf(o|0,116328,(v=i,i=i+8|0,c[v>>2]=r,v)|0);s=+h[j+80>>3];o=c[m>>2]|0;if(s<=0.0){aI(116160,29,1,o|0);n=1;break}d=c[j+88>>2]|0;if((d|0)==0){t=179864}else{t=c[21808+(d<<2)>>2]|0}u=+h[j+96>>3];cf(o|0,116216,(v=i,i=i+24|0,c[v>>2]=t,h[v+8>>3]=s,h[v+16>>3]=u,v)|0);if((c[p>>2]|0)!=0){p=c[m>>2]|0;u=+h[j+104>>3];cf(p|0,126792,(v=i,i=i+8|0,h[v>>3]=u,v)|0)}p=c[m>>2]|0;aF(10,p|0);n=1}}while(0);p=c[j>>2]|0;if((p|0)==0){e=n;break}else{g=n;j=p}}}if((a|0)<1|e){i=b;return}else{uf(c[13898]|0,115992,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function ke(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0.0,l=0,m=0.0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;j=+h[e>>3];d=c[e>>2]|0;e=d;do{if((f|0)==3){k=+uz(e,b);l=(e|0)==(c[b>>2]|0);uu(e);if(!l){m=k;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((f|0)==2){m=j;break}else if((f|0)==1){m=+(d|0);break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);j=+b3(+m);d=c[6354]|0;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{f=d+1|0;c[6354]=f;d=14296+(f*24&-1)|0;c[d>>2]=2;c[d+4>>2]=g;h[14304+(f*24&-1)>>3]=j;h[14312+(f*24&-1)>>3]=0.0;i=a;return}}function kf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0.0,l=0,m=0.0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;j=+h[e>>3];d=c[e>>2]|0;e=d;do{if((f|0)==3){k=+uz(e,b);l=(e|0)==(c[b>>2]|0);uu(e);if(!l){m=k;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((f|0)==1){m=+(d|0);break}else if((f|0)==2){m=j;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);j=+bu(+m);f=c[6354]|0;if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{d=f+1|0;c[6354]=d;f=14296+(d*24&-1)|0;c[f>>2]=2;c[f+4>>2]=g;h[14304+(d*24&-1)>>3]=j;h[14312+(d*24&-1)>>3]=0.0;i=a;return}}function kg(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0.0,r=0,s=0.0,t=0,u=0.0,w=0.0,x=0.0,y=0.0;b=i;i=i+32|0;d=b|0;e=b+8|0;f=b+16|0;g=b+24|0;j=c[6354]|0;if((j|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}k=j-1|0;c[6354]=k;l=c[14296+(j*24&-1)>>2]|0;m=14304+(j*24&-1)|0;n=+h[m>>3];j=c[m>>2]|0;h[g>>3]=n;m=j;j=m;do{if((l|0)==3){o=+uz(j,f);p=(j|0)==(c[f>>2]|0);uu(j);if(p){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[g>>3]=o;q=o;r=c[6354]|0;break}}else{if((l|0)==1){q=+(m|0);r=k;break}else if((l|0)==2){q=n;r=k;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if((r|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}k=r-1|0;c[6354]=k;l=c[14296+(r*24&-1)>>2]|0;m=14304+(r*24&-1)|0;n=+h[m>>3];r=c[m>>2]|0;h[g>>3]=n;m=r;r=m;do{if((l|0)==3){o=+uz(r,e);j=(r|0)==(c[e>>2]|0);uu(r);if(j){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[g>>3]=o;s=o;t=c[6354]|0;break}}else{if((l|0)==2){s=n;t=k;break}else if((l|0)==1){s=+(m|0);t=k;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if((t|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=t-1;k=14296+(t*24&-1)|0;m=c[k>>2]|0;l=c[k+4>>2]|0;k=14304+(t*24&-1)|0;n=+h[k>>3];r=c[k>>2]|0;h[g>>3]=n;o=+h[14312+(t*24&-1)>>3];t=r;r=t;do{if((m|0)==3){u=+uz(r,d);k=(r|0)==(c[d>>2]|0);uu(r);if(k){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[g>>3]=u;w=u;x=0.0;break}}else{if((m|0)==2){w=n;x=o;break}else if((m|0)==1){w=+(t|0);x=o;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if(w>0.0&s>0.0){if(q<0.0|q>1.0){break}do{if(q==0.0|q==1.0){y=q}else{if(q*(s+w)<=w){y=+kr(w,s,q);break}o=+kr(s,w,1.0-q);if(o<0.0){y=o;break}y=1.0-o}}while(0);if(y==-1.0){break}h[g>>3]=y;t=c[6354]|0;if((t|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}m=t+1|0;c[6354]=m;t=14296+(m*24&-1)|0;c[t>>2]=2;c[t+4>>2]=l;h[14304+(m*24&-1)>>3]=y;h[14312+(m*24&-1)>>3]=0.0;i=b;return}}while(0);a[1960]=1;c[g>>2]=0;m=c[6354]|0;if((m|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}t=m+1|0;c[6354]=t;m=14296+(t*24&-1)|0;c[m>>2]=1;c[m+4>>2]=l;h[14304+(t*24&-1)>>3]=+h[g>>3];h[14312+(t*24&-1)>>3]=x;i=b;return}function kh(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,Q=0.0,R=0.0,S=0.0,T=0.0;b=i;i=i+24|0;d=b|0;e=b+8|0;f=b+16|0;g=c[6354]|0;if((g|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}j=g-1|0;c[6354]=j;k=c[14296+(g*24&-1)>>2]|0;l=14304+(g*24&-1)|0;m=+h[l>>3];g=c[l>>2]|0;h[f>>3]=m;l=g;g=l;do{if((k|0)==3){n=+uz(g,e);o=(g|0)==(c[e>>2]|0);uu(g);if(o){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[f>>3]=n;p=n;q=c[6354]|0;break}}else{if((k|0)==1){p=+(l|0);q=j;break}else if((k|0)==2){p=m;q=j;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if((q|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=q-1;j=14296+(q*24&-1)|0;k=c[j>>2]|0;l=c[j+4>>2]|0;j=14304+(q*24&-1)|0;m=+h[j>>3];g=c[j>>2]|0;h[f>>3]=m;n=+h[14312+(q*24&-1)>>3];q=g;g=q;do{if((k|0)==3){r=+uz(g,d);j=(g|0)==(c[d>>2]|0);uu(g);if(j){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[f>>3]=r;s=r;t=0.0;break}}else{if((k|0)==1){s=+(q|0);t=n;break}else if((k|0)==2){s=m;t=n;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);L12007:do{if(p>=0.0&s>0.0){do{if(p==0.0){u=0.0}else{if(p>1.0e8){u=1.0;break}n=s*+_(+p)-p;m=n- +b2(+(s+1.0));if(m<-706.893623549172){w=0.0}else{w=+Z(+m)}do{if(p>1.0){if(s+2.0>p){x=s;y=0;z=1.0;A=1.0;B=8809;break}m=1.0-s;n=p+m+1.0;r=p+1.0;C=p*n;D=n;k=1;n=1.0;E=p;F=r;G=C;H=m;m=r/C;while(1){C=H+1.0;r=D+2.0;I=C*+(k|0);J=F*r-n*I;K=G*r-E*I;if(K!=0.0){L=J/K;I=L*1.1920928955078125e-7;if(+P(+(m-L))>(I>1.1920928955078125e-7?1.1920928955078125e-7:I)){M=L}else{break}}else{M=m}if(+P(+J)<3.4028234663852886e+38){N=K;O=J;Q=G;R=F}else{N=K/3.4028234663852886e+38;O=J/3.4028234663852886e+38;Q=G/3.4028234663852886e+38;R=F/3.4028234663852886e+38}q=k+1|0;if((q|0)<201){D=r;k=q;n=R;E=Q;F=O;G=N;H=C;m=M}else{break L12007}}S=1.0-s*w*L}else{x=s;y=0;z=1.0;A=1.0;B=8809}}while(0);if((B|0)==8809){while(1){B=0;if((y|0)>=201){break L12007}m=x+1.0;H=A*(p/m);T=z+H;if(H<T*1.1920928955078125e-7){break}else{x=m;y=y+1|0;z=T;A=H;B=8809}}S=w*T}if(S==-1.0){break L12007}else{u=S}}}while(0);h[f>>3]=u;k=c[6354]|0;if((k|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}q=k+1|0;c[6354]=q;k=14296+(q*24&-1)|0;c[k>>2]=2;c[k+4>>2]=l;h[14304+(q*24&-1)>>3]=u;h[14312+(q*24&-1)>>3]=0.0;i=b;return}}while(0);a[1960]=1;c[f>>2]=0;B=c[6354]|0;if((B|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}y=B+1|0;c[6354]=y;B=14296+(y*24&-1)|0;c[B>>2]=1;c[B+4>>2]=l;h[14304+(y*24&-1)>>3]=+h[f>>3];h[14312+(y*24&-1)>>3]=t;i=b;return}function ki(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0;b=i;i=i+16|0;d=b|0;e=b+8|0;f=c[6354]|0;if((f|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=f-1;g=14296+(f*24&-1)|0;j=c[g>>2]|0;k=c[g+4>>2]|0;g=14304+(f*24&-1)|0;l=+h[g>>3];m=c[g>>2]|0;h[e>>3]=l;n=+h[14312+(f*24&-1)>>3];f=m;m=f;do{if((j|0)==3){o=+uz(m,d);g=(m|0)==(c[d>>2]|0);uu(m);if(g){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[e>>3]=o;p=o;q=0.0;break}}else{if((j|0)==1){p=+(f|0);q=n;break}else if((j|0)==2){p=l;q=n;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);n=+b2(+p);if(n>709.1962086421661){a[1960]=1;c[e>>2]=0;j=c[6354]|0;if((j|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=j+1|0;c[6354]=f;j=14296+(f*24&-1)|0;c[j>>2]=1;c[j+4>>2]=k;h[14304+(f*24&-1)>>3]=+h[e>>3];h[14312+(f*24&-1)>>3]=q;i=b;return}q=+(c[aH()>>2]|0);if(n<-706.893623549172){r=0.0}else{r=+Z(+n)}n=q*r;h[e>>3]=n;e=c[6354]|0;if((e|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e+1|0;c[6354]=f;e=14296+(f*24&-1)|0;c[e>>2]=2;c[e+4>>2]=k;h[14304+(f*24&-1)>>3]=n;h[14312+(f*24&-1)>>3]=0.0;i=b;return}function kj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0.0,l=0,m=0.0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;j=+h[e>>3];d=c[e>>2]|0;e=d;do{if((f|0)==3){k=+uz(e,b);l=(e|0)==(c[b>>2]|0);uu(e);if(!l){m=k;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((f|0)==2){m=j;break}else if((f|0)==1){m=+(d|0);break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);j=+b2(+m);d=c[6354]|0;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{f=d+1|0;c[6354]=f;d=14296+(f*24&-1)|0;c[d>>2]=2;c[d+4>>2]=g;h[14304+(f*24&-1)>>3]=j;h[14312+(f*24&-1)>>3]=0.0;i=a;return}}function kk(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0.0,r=0,s=0,t=0.0,u=0,w=0.0,x=0,y=0,z=0,A=0,B=0.0;b=i;i=i+8|0;d=b|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=e-1;f=14296+(e*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=14304+(e*24&-1)|0;l=+h[f>>3];m=+h[14312+(e*24&-1)>>3];e=c[f>>2]|0;f=e;do{if((g|0)==3){n=+uz(f,d);o=(f|0)==(c[d>>2]|0);uu(f);if(o){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[k>>3]=n;p=n;q=0.0;r=2;s=c[k>>2]|0;t=n;break}}else{if((g|0)==2){p=l;q=m;r=2;s=e;t=l;break}else if((g|0)==1){p=+(e|0);q=m;r=1;s=e;t=l;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if(p!=0.0){if((r|0)==2){u=8870;break}else if((r|0)==1){w=+(s|0);x=0;y=s;u=8871;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}else{if((r|0)==2){if(q!=0.0){u=8870;break}}else if((r|0)!=1){uf(-1,211552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(!(a[27800]|0)){u=8886;break}z=c[6948]|0;A=c[6946]|0}}while(0);if((u|0)==8870){w=t;x=~~q;y=~~t;u=8871}L12113:do{if((u|0)==8871){if(w!=+(y|0)){uf(-1,216320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((r|0)==3){uh(-1,212704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);uf(-1,212032,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((r|0)==1){B=0.0}else if((r|0)==2){B=q}else{uf(-1,211552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(B!=+(x|0)){uf(-1,216320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}do{if((y|0)<1){if((x|0)!=0){uf(-1,216320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((y|0)>=0){break}a[27800]=0;u=8886;break L12113}else{if((x|0)>=0){break}uf(-1,216320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);c[6948]=y;s=(x|0)!=0?x:y;c[6946]=s;a[27800]=1;z=y;A=s}}while(0);if((u|0)==8886){a[27800]=1;c[6948]=1234567890;c[6946]=1234567890;z=1234567890;A=1234567890}u=(z|0)/53668&-1;y=(((u*-53668&-1)+z|0)*40014&-1)+(u*-12211&-1)|0;u=(y|0)<0?y+2147483563|0:y;c[6948]=u;y=(A|0)/52774&-1;z=(((y*-52774&-1)+A|0)*40692&-1)+(y*-3791&-1)|0;y=(z|0)<0?z+2147483399|0:z;c[6946]=y;z=u-y|0;y=c[6354]|0;if((y|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{u=y+1|0;c[6354]=u;y=14296+(u*24&-1)|0;c[y>>2]=2;c[y+4>>2]=j;h[14304+(u*24&-1)>>3]=+(((z|0)<1?z+2147483562|0:z)|0)*4.656613057e-10;h[14312+(u*24&-1)>>3]=0.0;i=b;return}}function kl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0,w=0.0,x=0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0;a=i;i=i+400|0;b=a|0;d=a+48|0;e=a+96|0;f=a+144|0;g=a+192|0;j=a+240|0;k=a+288|0;l=a+336|0;m=a+384|0;n=a+392|0;o=c[6354]|0;if((o|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}p=o-1|0;c[6354]=p;q=c[14296+(o*24&-1)>>2]|0;r=14304+(o*24&-1)|0;s=+h[r>>3];o=c[r>>2]|0;r=o;do{if((q|0)==3){t=+uz(r,n);u=(r|0)==(c[n>>2]|0);uu(r);if(u){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{w=t;x=c[6354]|0;break}}else{if((q|0)==2){w=s;x=p;break}else if((q|0)==1){w=+(o|0);x=p;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if((x|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=x-1;p=14296+(x*24&-1)|0;o=c[p>>2]|0;q=c[p+4>>2]|0;p=14304+(x*24&-1)|0;s=+h[p>>3];x=c[p>>2]|0;p=x;do{if((o|0)==3){t=+uz(p,m);r=(p|0)==(c[m>>2]|0);uu(p);if(!r){y=t;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((o|0)==1){y=+(x|0);break}else if((o|0)==2){y=s;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);s=w*w;t=w*.56418958;z=+P(+y);A=z*z;do{if(w<70.55){B=+Q(+(w*(40.0-w*3.6)+15100.0));if(w<8.425){C=+Q(+(164.0-w*(w*1.8+4.3)))}else{C=0.0}D=w*18.1+1.65;o=w>1.0e-6;if(z>=B){E=t/(s+A);break}if(z>=(o?C:B)){F=s+.5;E=(F+A)*w*(.56418958/(F*F+A*(s+s+-1.0+A)));break}if(z>(o?6.8-w:B)){B=s*4.0;F=B+-6.0;E=(s*(s*(s+5.5)+8.25)+1.875+A*(s*(s*3.0+1.0)+5.25+A*(F*.75+A)))*w*(.56418958/(s*(s*(s*(s+6.0)+10.5)+4.5)+.5625+A*(s*(s*(B+6.0)+9.0)-4.5+A*(10.5-s*(6.0-s*6.0)+A*(F+A)))));break}if(z<w*2.4){F=w*5.0;B=w*10.0;G=w*.3183291;E=(w*(w*(w*(w*(w*(w*(w*(w*(G+4.264678)+27.93941)+115.3772)+328.2151)+662.8097)+946.897)+919.4955)+549.3954)+153.5168+A*(w*(w*(w*(w*(w*(w*(w*1.2733163+12.79458)+56.81652)+139.4665)+189.773)+124.5975)-1.322256)-34.16955+A*(w*(w*(w*(w*(w*1.9099744+12.79568)+29.81482)+24.01655)+10.46332)+2.584042+A*(w*(w*(w*1.273316+4.266322)+.9377051)+-.07272979+(G+.0005480304)*A))))*(1.7724538/(w*(w*(w*(w*(w*(w*(w*(w*(w*(w+13.3988)+88.26741)+369.1989)+1074.409)+2256.981)+3447.629)+3764.966)+2802.87)+1280.829)+272.1014+A*(w*(w*(w*(w*(w*(w*(w*(F+53.59518)+266.2987)+793.4273)+1549.675)+2037.31)+1758.336)+902.3066)+211.678+A*(w*(w*(w*(w*(w*(B+80.39278)+269.2916)+479.2576)+497.3014)+308.1852)+78.86585+A*(w*(w*(w*(B+53.59518)+92.75679)+55.02933)+22.03523+A*(w*(F+13.3988)+1.49646+A))))));break}F=w+1.5;B=F*F;o=0;do{G=+h[37496+(o<<3)>>3];H=y-G;I=H*H;h[e+(o<<3)>>3]=I;J=1.0/(B+I);h[b+(o<<3)>>3]=J;h[g+(o<<3)>>3]=J*H;h[j+(o<<3)>>3]=F*J;J=y+G;G=J*J;h[f+(o<<3)>>3]=G;H=1.0/(B+G);h[d+(o<<3)>>3]=H;h[k+(o<<3)>>3]=J*H;h[l+(o<<3)>>3]=F*H;o=o+1|0;}while((o|0)<6);if(z<=D){E=(+h[j>>3]+ +h[l>>3])*1.0117281-(+h[g>>3]- +h[k>>3])*1.393237+0.0+((+h[j+8>>3]+ +h[l+8>>3])*-.75197147-(+h[g+8>>3]- +h[k+8>>3])*.23115241)+((+h[j+16>>3]+ +h[l+16>>3])*.012557727-(+h[g+16>>3]- +h[k+16>>3])*-.15535147)+((+h[j+24>>3]+ +h[l+24>>3])*.010022008-(+h[g+24>>3]- +h[k+24>>3])*.0062183662)+((+h[j+32>>3]+ +h[l+32>>3])*-.00024206814-(+h[g+32>>3]- +h[k+32>>3])*91908299.0e-12)+((+h[j+40>>3]+ +h[l+40>>3])*5.0084806e-7-(+h[g+40>>3]- +h[k+40>>3])*-6.2752596e-7);break}F=w+3.0;B=0.0;o=0;do{H=+h[37592+(o<<3)>>3];J=+h[e+(o<<3)>>3];G=F*+h[37544+(o<<3)>>3];I=+h[f+(o<<3)>>3];B=B+((H*(J*+h[b+(o<<3)>>3]- +h[j+(o<<3)>>3]*1.5)+G*+h[g+(o<<3)>>3])/(J+2.25)+(H*(I*+h[d+(o<<3)>>3]- +h[l+(o<<3)>>3]*1.5)-G*+h[k+(o<<3)>>3])/(I+2.25));o=o+1|0;}while((o|0)<6);E=w*B+ +Z(+(-0.0-A))}else{E=t/(s+A)}}while(0);k=c[6354]|0;if((k|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{l=k+1|0;c[6354]=l;k=14296+(l*24&-1)|0;c[k>>2]=2;c[k+4>>2]=q;h[14304+(l*24&-1)>>3]=E;h[14312+(l*24&-1)>>3]=0.0;i=a;return}}function km(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0.0,l=0,m=0.0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;j=+h[e>>3];d=c[e>>2]|0;e=d;do{if((f|0)==3){k=+uz(e,b);l=(e|0)==(c[b>>2]|0);uu(e);if(!l){m=k;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((f|0)==2){m=j;break}else if((f|0)==1){m=+(d|0);break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);j=+bu(+(-0.0-m*.7071067811865476));d=c[6354]|0;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{f=d+1|0;c[6354]=f;d=14296+(f*24&-1)|0;c[d>>2]=2;c[d+4>>2]=g;h[14304+(f*24&-1)>>3]=j*.5;h[14312+(f*24&-1)>>3]=0.0;i=a;return}}function kn(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0.0,l=0.0,m=0,n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0;b=i;i=i+8|0;d=b|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=e-1;f=14296+(e*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=14304+(e*24&-1)|0;k=+h[f>>3];e=c[f>>2]|0;f=e;do{if((g|0)==3){l=+uz(f,d);m=(f|0)==(c[d>>2]|0);uu(f);if(!m){n=l;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((g|0)==2){n=k;break}else if((g|0)==1){n=+(e|0);break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if(n<=0.0|n>=1.0){a[1960]=1;e=c[6354]|0;if((e|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=e+1|0;c[6354]=g;e=14296+(g*24&-1)|0;c[e>>2]=2;c[e+4>>2]=j;uE(14304+(g*24&-1)|0,0,16);i=b;return}do{if(n>0.0){if(n>=1.0){bD(75808,(v=i,i=i+8|0,c[v>>2]=205976,v)|0);bD(223272,(v=i,i=i+8|0,c[v>>2]=133496,v)|0);o=1.7976931348623157e+308;break}if(n>.8646647167633873){p=0;q=1.0-n}else{p=1;q=n}if(q>.1353352832366127){k=q+-.5;l=k*k;o=(k+k*(l*(l*(l*(l*(l*-59.96335010141079+98.00107541859997)-56.67628574690703)+13.931260938727968)-1.2391658386738125)/(l*(l*(l*(l*(l*(l*(l*(l+1.9544885833814176)+4.676279128988815)+86.36024213908905)-225.46268785411937)+200.26021238006066)-82.03722561683334)+15.90562251262117)-1.1833162112133)))*2.5066282746310007;break}l=+Q(+(+_(+q)*-2.0));k=l- +_(+l)/l;r=1.0/l;if(l<8.0){s=r*(r*(r*(r*(r*(r*(r*(r*(r*4.0554489230596245+31.525109459989388)+57.16281922464213)+44.08050738932008)+14.684956192885803)+2.1866330685079025)+-.1402560791713545)+-.03504246268278482)+-.0008574567851546854)/(r*(r*(r*(r*(r*(r*(r*(r+15.779988325646675)+45.39076351288792)+41.3172038254672)+15.04253856929075)+2.504649462083094)+-.14218292285478779)+-.03808064076915783)+-.0009332594808954574)}else{s=r*(r*(r*(r*(r*(r*(r*(r*(r*3.2377489177694603+6.915228890689842)+3.9388102529247444)+1.3330346081580755)+.20148538954917908)+.012371663481782003)+.00030158155350823543)+26580697468673755.0e-22)+6.239745391849833e-9)/(r*(r*(r*(r*(r*(r*(r*(r+6.02427039364742)+3.6798356385616087)+1.3770209948908132)+.21623699359449663)+.013420400608854318)+.00032801446468212774)+28924786474538068.0e-22)+6.790194080099813e-9)}r=k-s;if((p|0)==0){o=r;break}o=-0.0-r}else{bD(75808,(v=i,i=i+8|0,c[v>>2]=205976,v)|0);bD(223272,(v=i,i=i+8|0,c[v>>2]=133496,v)|0);o=-1.7976931348623157e+308}}while(0);p=c[6354]|0;if((p|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=p+1|0;c[6354]=g;p=14296+(g*24&-1)|0;c[p>>2]=2;c[p+4>>2]=j;h[14304+(g*24&-1)>>3]=o;h[14312+(g*24&-1)>>3]=0.0;i=b;return}function ko(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0.0,l=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0;b=i;i=i+8|0;d=b|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=e-1;f=14296+(e*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=14304+(e*24&-1)|0;k=+h[f>>3];e=c[f>>2]|0;f=e;do{if((g|0)==3){l=+uz(f,d);m=(f|0)==(c[d>>2]|0);uu(f);if(!m){n=l;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((g|0)==2){n=k;break}else if((g|0)==1){n=+(e|0);break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if(+P(+n)>=1.0){a[1960]=1;e=c[6354]|0;if((e|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=e+1|0;c[6354]=g;e=14296+(g*24&-1)|0;c[e>>2]=2;c[e+4>>2]=j;uE(14304+(g*24&-1)|0,0,16);i=b;return}do{if(n<-1.0|n>1.0){bD(137432,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);o=+_(-1.0)}else{if(n==-1.0|n==1.0){o=+_(0.0)*(-0.0-n);break}do{if(n>-1.0&n<-.7){k=+Q(+(-0.0- +_(+((n+1.0)*.5))));p=(-0.0-(k*(k*(k*1.641345311+3.429567803)-1.624906493)-1.970840454))/(k*(k*1.6370678+3.5438892)+1.0)}else{if(!(n<-.7|n>.7)){k=n*n;p=n*(k*(k*(k*-.140543331+.914624893)-1.645349621)+.886226899)/(k*(k*(k*(k*.012229801+.012229801)+1.442710462)-2.118377725)+1.0);break}if(!(n>.7&n<1.0)){p=0.0;break}k=+Q(+(-0.0- +_(+((1.0-n)*.5))));p=(k*(k*(k*1.641345311+3.429567803)-1.624906493)-1.970840454)/(k*(k*1.6370678+3.5438892)+1.0)}}while(0);k=+b3(+p)-n;l=p*(-0.0-p);if(l<-706.893623549172){q=0.0}else{q=+Z(+l)*1.1283791670955126}l=p-k/q;k=+b3(+l)-n;r=l*(-0.0-l);if(r<-706.893623549172){s=0.0}else{s=+Z(+r)*1.1283791670955126}r=l-k/s;k=+b3(+r)-n;l=r*(-0.0-r);if(l<-706.893623549172){t=0.0}else{t=+Z(+l)*1.1283791670955126}l=r-k/t;k=+b3(+l)-n;r=l*(-0.0-l);if(r<-706.893623549172){u=0.0}else{u=+Z(+r)*1.1283791670955126}o=l-k/u}}while(0);g=c[6354]|0;if((g|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=g+1|0;c[6354]=e;g=14296+(e*24&-1)|0;c[g>>2]=2;c[g+4>>2]=j;h[14304+(e*24&-1)>>3]=o;h[14312+(e*24&-1)>>3]=0.0;i=b;return}function kp(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0.0,l=0.0,m=0,n=0.0,o=0.0,p=0,q=0.0,r=0,s=0.0,t=0.0,u=0.0,w=0.0,x=0.0;b=i;i=i+8|0;d=b|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=e-1;f=14296+(e*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=14304+(e*24&-1)|0;k=+h[f>>3];e=c[f>>2]|0;f=e;do{if((g|0)==3){l=+uz(f,d);m=(f|0)==(c[d>>2]|0);uu(f);if(!m){n=l;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((g|0)==2){n=k;break}else if((g|0)==1){n=+(e|0);break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);L12315:do{if(n<-.36787944117144233){o=-1.0;p=9032}else{if(+P(+n)>1.1920928955078125e-7){if(n<1.0){k=+Q(+((n*2.718281828459045+1.0)*2.0));q=k+-1.0-k*k/3.0+k*k*k*.1527777777777778}else{q=+_(+n)}if(n>3.0){r=0;s=q- +_(+q)}else{r=0;s=q}while(1){if((r|0)>=20){o=-1.0;p=9032;break L12315}if(s<-706.893623549172){t=0.0}else{t=+Z(+s)}k=s*t-n;l=s+1.0;u=k/(l*t-(s+2.0)*.5*k/l);l=s-u;k=+P(+u);if(k<(+P(+l)+1.0)*1.1920928955078125e-7){w=l;break}else{r=r+1|0;s=l}}}else{w=n}if(w>-1.0){x=w}else{o=w;p=9032}}}while(0);if((p|0)==9032){a[1960]=1;x=o}p=c[6354]|0;if((p|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{r=p+1|0;c[6354]=r;p=14296+(r*24&-1)|0;c[p>>2]=2;c[p+4>>2]=j;h[14304+(r*24&-1)>>3]=x;h[14312+(r*24&-1)>>3]=0.0;i=b;return}}function kq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0.0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;j=+h[e>>3];d=c[e>>2]|0;e=d;do{if((f|0)==3){k=+uz(e,b);l=(e|0)==(c[b>>2]|0);uu(e);if(!l){m=k;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((f|0)==2){m=j;break}else if((f|0)==1){m=+(d|0);break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);j=+P(+m);k=+R(+j,3.0);if(m<0.0){n=+Q(+(k+.37));o=+R(+j,1.5)*.6666666666666666;j=n*.3989422;p=(j+-.043883564)*+S(+o);q=p/+R(+n,1.1666666666666667)+0.0;p=m*(-.013883003-j)*+T(+o);r=q+p/(o*+R(+n,.8333333333333334)*1.5)}else{n=+Q(+(k+.0425));k=(n*.326662423+-.002800908)/+R(+n,1.1666666666666667)+0.0;o=k+m*(-.007232251-n*.044567423)/+R(+n,1.8333333333333333);r=o*+Z(+(n*-.6666666666666666))}d=c[6354]|0;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{f=d+1|0;c[6354]=f;d=14296+(f*24&-1)|0;c[d>>2]=2;c[d+4>>2]=g;h[14304+(f*24&-1)>>3]=r;h[14312+(f*24&-1)>>3]=0.0;i=a;return}}function kr(a,b,c){a=+a;b=+b;c=+c;var d=0.0,e=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0.0,u=0;d=a+b;e=+b2(+d);f=e+ +_(+c)*a;e=f+ +_(+(1.0-c))*b;f=e- +b2(+(a+1.0));e=f- +b2(+b);if(e<-706.893623549172){g=1.0;h=1.0;i=0.0;j=0.0;k=0.0;l=0;m=1}else{f=+Z(+e);g=1.0;h=1.0;i=f;j=f;k=0.0;l=0;m=1}while(1){f=+(m|0);e=+(l|0);n=e+(f+a);o=(d+e)*(-0.0-(e+a))*c/n/(n+-1.0);e=f*(b-f)*c/n/(n+1.0);n=j+k*o;f=g+h*o;o=n+j*e;p=f+g*e;e=+P(+p)<1.1920928955078125e-7?0.0:p;if(e!=0.0){p=o/e;q=+P(+(p-i));if(q<+P(+p)*1.1920928955078125e-7){r=p;s=9057;break}else{t=p}}else{t=i}u=l+1|0;if((u|0)<201){g=e;h=f;i=t;j=o;k=n;l=u;m=m+1|0}else{r=-1.0;s=9056;break}}if((s|0)==9056){return+r}else if((s|0)==9057){return+r}return 0.0}function ks(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0,p=0.0,q=0,r=0.0,s=0.0,t=0,u=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0;b=i;i=i+24|0;d=b|0;e=b+8|0;f=b+16|0;g=c[6354]|0;if((g|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}j=g-1|0;c[6354]=j;k=c[14296+(g*24&-1)>>2]|0;l=14304+(g*24&-1)|0;m=+h[l>>3];g=c[l>>2]|0;l=g;do{if((k|0)==3){n=+uz(l,f);o=(l|0)==(c[f>>2]|0);uu(l);if(o){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{p=n;q=c[6354]|0;break}}else{if((k|0)==1){p=+(g|0);q=j;break}else if((k|0)==2){p=m;q=j;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if((q|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=q-1;j=14296+(q*24&-1)|0;k=c[j>>2]|0;g=c[j+4>>2]|0;j=14304+(q*24&-1)|0;m=+h[j>>3];q=c[j>>2]|0;j=q;do{if((k|0)==3){n=+uz(j,e);l=(j|0)==(c[e>>2]|0);uu(j);if(!l){r=n;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((k|0)==2){r=m;break}else if((k|0)==1){r=+(q|0);break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if(r<0.0|p<0.0){s=-1.0;t=9095}else{if(+bj(+r,d|0)!=0.0){s=-1.0;t=9095;break}q=p==0.0;if(q&r<2.0){s=-1.0;t=9095;break}do{if(r==0.0){u=+Z(+(-0.0-p))/p}else{if(q){u=1.0/(r+-1.0);break}if(p>3.0){m=1.0;n=1.0;w=p;x=0.0;y=1.0;k=0;while(1){z=r+ +(k|0);A=x*z+m;B=w+z*n;j=k+1|0;z=+(j|0);C=z*m+p*A;D=z*w+p*B;E=C/D;if(E==y){break}if(D<3.4028234663852886e+38){F=A;G=D;H=B;I=C}else{F=A/3.4028234663852886e+38;G=D/3.4028234663852886e+38;H=B/3.4028234663852886e+38;I=C/3.4028234663852886e+38}if((j|0)<333){m=I;n=H;w=G;x=F;y=E;k=j}else{break}}u=E*+Z(+(-0.0-p));break}y=-.5772156649015329- +_(+p);x=0.0;w=1.0;k=1;while(1){n=+(k|0);m=p*(-0.0-w)/n;J=y-m/n;if(J==x){break}j=k+1|0;if((j|0)<333){y=J;x=J;w=m;k=j}else{break}}if(r<=1.0){u=J;break}w=+Z(+(-0.0-p));x=J;y=1.0;while(1){m=(w-p*x)/y;n=y+1.0;if(n<r){x=m;y=n}else{u=m;break}}}}while(0);if(u>-1.0){K=u}else{s=u;t=9095}}}while(0);if((t|0)==9095){a[1960]=1;K=s}t=c[6354]|0;if((t|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{d=t+1|0;c[6354]=d;t=14296+(d*24&-1)|0;c[t>>2]=2;c[t+4>>2]=g;h[14304+(d*24&-1)>>3]=K;h[14312+(d*24&-1)>>3]=0.0;i=b;return}}function kt(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0.0,l=0.0,m=0,n=0.0,o=0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=d-1|0;c[6354]=e;f=14296+(d*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=14304+(d*24&-1)|0;k=+h[f>>3];d=c[f>>2]|0;f=d;do{if((g|0)==3){l=+uz(f,b);m=(f|0)==(c[b>>2]|0);uu(f);if(m){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{n=l;o=c[6354]|0;break}}else{if((g|0)==1){n=+(d|0);o=e;break}else if((g|0)==2){n=k;o=e;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if((o|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{e=o+1|0;c[6354]=e;o=14296+(e*24&-1)|0;c[o>>2]=2;c[o+4>>2]=j;h[14304+(e*24&-1)>>3]=n;h[14312+(e*24&-1)>>3]=0.0;i=a;return}}function ku(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0.0,m=0,n=0,o=0.0,p=0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=d-1|0;c[6354]=e;f=14296+(d*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=c[14304+(d*24&-1)>>2]|0;do{if((g|0)==3){uz(f,b);k=(f|0)==(c[b>>2]|0);uu(f);if(k){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{l=0.0;m=c[6354]|0;n=9118;break}}else{if((g|0)==2){l=+h[14312+(d*24&-1)>>3];m=e;n=9118;break}else if((g|0)==1){o=0.0;p=e;break}uf(-1,211552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);if((n|0)==9118){o=l;p=m}if((p|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{m=p+1|0;c[6354]=m;p=14296+(m*24&-1)|0;c[p>>2]=2;c[p+4>>2]=j;h[14304+(m*24&-1)>>3]=o;h[14312+(m*24&-1)>>3]=0.0;i=a;return}}function kv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0.0,l=0.0,m=0.0,n=0,o=0.0,p=0,q=0,r=0.0,s=0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=d-1|0;c[6354]=e;f=14296+(d*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=14304+(d*24&-1)|0;k=+h[f>>3];l=+h[14312+(d*24&-1)>>3];d=c[f>>2]|0;f=d;do{if((g|0)==3){m=+uz(f,b);n=(f|0)==(c[b>>2]|0);uu(f);if(n){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{o=m;p=c[6354]|0;q=9132;break}}else{if((g|0)==1){r=(d|0)>-1?0.0:3.141592653589793;s=e;break}else if((g|0)==2){if(l==0.0){o=k;p=e;q=9132;break}r=+Y(+l,+k);s=e;break}else{uf(-1,210664,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if((q|0)==9132){r=o<0.0?3.141592653589793:0.0;s=p}if((s|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{o=r/+h[9040];p=s+1|0;c[6354]=p;s=14296+(p*24&-1)|0;c[s>>2]=2;c[s+4>>2]=j;h[14304+(p*24&-1)>>3]=o;h[14312+(p*24&-1)>>3]=0.0;i=a;return}}function kw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0.0,l=0,m=0.0,n=0,o=0.0,p=0.0,q=0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=d-1|0;c[6354]=e;f=14296+(d*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=14304+(d*24&-1)|0;k=+h[f>>3];l=c[f>>2]|0;f=l;do{if((g|0)==3){m=+uz(f,b);n=(f|0)==(c[b>>2]|0);uu(f);if(n){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{o=0.0;p=m;q=c[6354]|0;break}}else{if((g|0)==2){o=+h[14312+(d*24&-1)>>3];p=k;q=e;break}else if((g|0)==1){o=0.0;p=+(l|0);q=e;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if((q|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{e=q+1|0;c[6354]=e;q=14296+(e*24&-1)|0;c[q>>2]=2;c[q+4>>2]=j;h[14304+(e*24&-1)>>3]=p;h[14312+(e*24&-1)>>3]=-0.0-o;i=a;return}}function kx(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0,l=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,w=0.0,x=0.0,y=0.0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;j=+h[e>>3];k=c[e>>2]|0;e=k;do{if((f|0)==3){l=+uz(e,b);m=(e|0)==(c[b>>2]|0);uu(e);if(m){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{n=0.0;o=+h[9040];p=l;q=9159;break}}else{l=+h[9040];if((f|0)==2){n=+h[14312+(d*24&-1)>>3];o=l;p=j;q=9159;break}else if((f|0)==1){r=+(k|0);s=+T(+(l*r));t=s*+a4(+(l*0.0));l=+h[9040];u=0.0;w=t;x=l;y=l*r;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if((q|0)==9159){j=+T(+(o*p));r=j*+a4(+(n*o));o=+h[9040];u=n;w=r;x=o;y=o*p}p=+bz(+(x*u));q=c[6354]|0;if((q|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{u=+S(+y)*p;k=q+1|0;c[6354]=k;q=14296+(k*24&-1)|0;c[q>>2]=2;c[q+4>>2]=g;h[14304+(k*24&-1)>>3]=w;h[14312+(k*24&-1)>>3]=u;i=a;return}}function ky(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0,l=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,w=0.0,x=0.0,y=0.0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;j=+h[e>>3];k=c[e>>2]|0;e=k;do{if((f|0)==3){l=+uz(e,b);m=(e|0)==(c[b>>2]|0);uu(e);if(m){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{n=0.0;o=+h[9040];p=l;q=9172;break}}else{l=+h[9040];if((f|0)==2){n=+h[14312+(d*24&-1)>>3];o=l;p=j;q=9172;break}else if((f|0)==1){r=+(k|0);s=+S(+(l*r));t=s*+a4(+(l*0.0));l=+h[9040];u=0.0;w=t;x=l;y=l*r;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if((q|0)==9172){j=+S(+(o*p));r=j*+a4(+(n*o));o=+h[9040];u=n;w=r;x=o;y=o*p}p=+bz(+(x*u));q=c[6354]|0;if((q|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{u=p*(-0.0- +T(+y));k=q+1|0;c[6354]=k;q=14296+(k*24&-1)|0;c[q>>2]=2;c[q+4>>2]=g;h[14304+(k*24&-1)>>3]=w;h[14312+(k*24&-1)>>3]=u;i=a;return}}function kz(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0.0,r=0,s=0.0,t=0.0,u=0,w=0.0;b=i;i=i+8|0;d=b|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e-1|0;c[6354]=f;g=14296+(e*24&-1)|0;j=c[g>>2]|0;k=c[g+4>>2]|0;g=14304+(e*24&-1)|0;l=+h[g>>3];m=+h[14312+(e*24&-1)>>3];e=c[g>>2]|0;g=e;do{if((j|0)==3){n=+uz(g,d);o=(g|0)==(c[d>>2]|0);uu(g);if(o){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{p=n;q=+h[9040];r=c[6354]|0;break}}else{if((j|0)==1){p=+(e|0);q=+h[9040];r=f;break}else if((j|0)==2){n=+h[9040];if(m==0.0){p=l;q=n;r=f;break}s=n*2.0;n=+S(+(s*l));t=n+ +a4(+(m*s));if(t==0.0){a[1960]=1;o=c[6354]|0;if((o|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}u=o+1|0;c[6354]=u;o=14296+(u*24&-1)|0;c[o>>2]=2;c[o+4>>2]=k;h[14304+(u*24&-1)>>3]=l;h[14312+(u*24&-1)>>3]=m;i=b;return}else{s=+h[9040]*2.0;n=+bz(+(m*s));u=c[6354]|0;if((u|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}w=+T(+(s*l))/t;o=u+1|0;c[6354]=o;u=14296+(o*24&-1)|0;c[u>>2]=2;c[u+4>>2]=k;h[14304+(o*24&-1)>>3]=w;h[14312+(o*24&-1)>>3]=n/t;i=b;return}}else{uf(-1,211552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if((r|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}l=+U(+(q*p));f=r+1|0;c[6354]=f;r=14296+(f*24&-1)|0;c[r>>2]=2;c[r+4>>2]=k;h[14304+(f*24&-1)>>3]=l;h[14312+(f*24&-1)>>3]=0.0;i=b;return}function kA(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0.0,l=0.0,m=0,n=0.0,o=0.0,p=0,q=0.0,r=0.0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;j=+h[e>>3];k=+h[14312+(d*24&-1)>>3];d=c[e>>2]|0;e=d;do{if((f|0)==3){l=+uz(e,b);m=(e|0)==(c[b>>2]|0);uu(e);if(!m){n=l;o=0.0;p=9209;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((f|0)==1){n=+(d|0);o=0.0;p=9209;break}else if((f|0)==2){if(k==0.0){n=j;o=k;p=9209;break}else{q=j;r=k;break}}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if((p|0)==9209){if(+P(+n)>1.0){q=n;r=o;break}f=c[6354]|0;if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}k=+h[9040];j=+W(+n)/k;d=f+1|0;c[6354]=d;f=14296+(d*24&-1)|0;c[f>>2]=2;c[f+4>>2]=g;h[14304+(d*24&-1)>>3]=j;h[14312+(d*24&-1)>>3]=0.0;i=a;return}}while(0);if(q==0.0){p=c[6354]|0;if((p|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}n=+h[9040];o=(-0.0- +_(+(+Q(+(r*r+1.0))-r)))/n;d=p+1|0;c[6354]=d;p=14296+(d*24&-1)|0;c[p>>2]=2;c[p+4>>2]=g;h[14304+(d*24&-1)>>3]=0.0;h[14312+(d*24&-1)>>3]=o;i=a;return}else{o=q+1.0;n=r*r;j=+Q(+(n+o*o))*.5;o=q+-1.0;q=+Q(+(n+o*o))*.5;o=j-q;n=j+q;q=+h[9040];d=c[6354]|0;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}j=+W(+(o>1.0?1.0:o))/q;o=(r>=0.0?1.0:-1.0)*+_(+(n+ +Q(+(n*n+-1.0))))/q;p=d+1|0;c[6354]=p;d=14296+(p*24&-1)|0;c[d>>2]=2;c[d+4>>2]=g;h[14304+(p*24&-1)>>3]=j;h[14312+(p*24&-1)>>3]=o;i=a;return}}function kB(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0.0,l=0.0,m=0,n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;j=+h[e>>3];k=+h[14312+(d*24&-1)>>3];d=c[e>>2]|0;e=d;do{if((f|0)==3){l=+uz(e,b);m=(e|0)==(c[b>>2]|0);uu(e);if(!m){n=l;o=0.0;p=9233;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((f|0)==2){if(k==0.0){n=j;o=k;p=9233;break}else{q=j;r=k;break}}else if((f|0)==1){n=+(d|0);o=0.0;p=9233;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if((p|0)==9233){if(+P(+n)>1.0){q=n;r=o;break}d=c[6354]|0;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}k=+h[9040];j=+V(+n)/k;f=d+1|0;c[6354]=f;d=14296+(f*24&-1)|0;c[d>>2]=2;c[d+4>>2]=g;h[14304+(f*24&-1)>>3]=j;h[14312+(f*24&-1)>>3]=0.0;i=a;return}}while(0);n=q+1.0;o=r*r;j=+Q(+(o+n*n))*.5;n=q+-1.0;q=+Q(+(o+n*n))*.5;n=j+q;o=j-q;do{if(o>1.0){s=1.0}else{if(o>=-1.0){s=o;break}s=-1.0}}while(0);o=+h[9040];p=c[6354]|0;if((p|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}q=+V(+s)/o;s=+_(+(n+ +Q(+(n*n+-1.0))))*(-0.0-(r>=0.0?1.0:-1.0))/o;f=p+1|0;c[6354]=f;p=14296+(f*24&-1)|0;c[p>>2]=2;c[p+4>>2]=g;h[14304+(f*24&-1)>>3]=q;h[14312+(f*24&-1)>>3]=s;i=a;return}function kC(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0.0,t=0,u=0.0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0;b=i;i=i+8|0;d=b|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e-1|0;c[6354]=f;g=14296+(e*24&-1)|0;j=g|0;k=c[j>>2]|0;l=g+4|0;g=c[l>>2]|0;m=14304+(e*24&-1)|0;n=+h[m>>3];o=14312+(e*24&-1)|0;p=+h[o>>3];q=c[m>>2]|0;r=q;do{if((k|0)==3){s=+uz(r,d);t=(r|0)==(c[d>>2]|0);uu(r);if(t){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{u=s;w=c[6354]|0;break}}else{if((k|0)==2){if(p==0.0){u=n;w=f;break}do{if(n==0.0){if(+P(+p)<1.0){break}a[1960]=1;if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=e;c[j>>2]=2;c[l>>2]=g;uE(m|0,0,16);i=b;return}}while(0);if(n<0.0){x=-0.0-p;y=-0.0-n}else{x=p;y=n}s=y*y;z=+X(+(y*2.0/(1.0-s-x*x)));A=x+1.0;B=x+-1.0;C=+_(+((s+A*A)/(s+B*B)))*.25;if(z<0.0){D=z+3.141592653589793}else{D=z}if(n<0.0){E=-0.0-D;F=-0.0-C}else{E=D;F=C}if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}C=E*.5/+h[9040];c[6354]=e;c[j>>2]=2;c[l>>2]=g;h[m>>3]=C;h[o>>3]=F;i=b;return}else if((k|0)==1){u=+(q|0);w=f;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if((w|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}F=+h[9040];E=+X(+u)/F;f=w+1|0;c[6354]=f;w=14296+(f*24&-1)|0;c[w>>2]=2;c[w+4>>2]=g;h[14304+(f*24&-1)>>3]=E;h[14312+(f*24&-1)>>3]=0.0;i=b;return}function kD(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0;b=i;i=i+24|0;d=b|0;e=b+8|0;f=b+16|0;g=c[6354]|0;if((g|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}j=g-1|0;c[6354]=j;k=c[14296+(g*24&-1)>>2]|0;l=14304+(g*24&-1)|0;m=+h[l>>3];g=c[l>>2]|0;h[f>>3]=m;l=g;g=l;do{if((k|0)==3){n=+uz(g,e);o=(g|0)==(c[e>>2]|0);uu(g);if(o){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[f>>3]=n;p=n;q=c[6354]|0;break}}else{if((k|0)==2){p=m;q=j;break}else if((k|0)==1){p=+(l|0);q=j;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if((q|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=q-1;j=14296+(q*24&-1)|0;l=c[j>>2]|0;k=c[j+4>>2]|0;j=14304+(q*24&-1)|0;m=+h[j>>3];g=c[j>>2]|0;h[f>>3]=m;n=+h[14312+(q*24&-1)>>3];q=g;g=q;do{if((l|0)==3){r=+uz(g,d);j=(g|0)==(c[d>>2]|0);uu(g);if(j){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[f>>3]=r;s=r;t=0.0;break}}else{if((l|0)==2){s=m;t=n;break}else if((l|0)==1){s=+(q|0);t=n;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if(p==0.0&s==0.0){a[1960]=1;c[f>>2]=0;q=c[6354]|0;if((q|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{l=q+1|0;c[6354]=l;q=14296+(l*24&-1)|0;c[q>>2]=1;c[q+4>>2]=k;h[14304+(l*24&-1)>>3]=+h[f>>3];h[14312+(l*24&-1)>>3]=t;u=l;break}}else{u=c[6354]|0}}while(0);t=+Y(+s,+p);p=t/+h[9040];h[f>>3]=p;if((u|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{f=u+1|0;c[6354]=f;u=14296+(f*24&-1)|0;c[u>>2]=2;c[u+4>>2]=k;h[14304+(f*24&-1)>>3]=p;h[14312+(f*24&-1)>>3]=0.0;i=b;return}}function kE(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0,l=0.0,m=0,n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;j=+h[e>>3];k=c[e>>2]|0;e=k;do{if((f|0)==3){l=+uz(e,b);m=(e|0)==(c[b>>2]|0);uu(e);if(!m){n=0.0;o=l;p=9311;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{l=+h[14312+(d*24&-1)>>3];if((f|0)==1){q=+(k|0);r=+bz(+q);s=0.0;t=r;u=+a4(+q);break}else if((f|0)==2){n=l;o=j;p=9311;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if((p|0)==9311){j=+bz(+o);l=j*+S(+n);s=n;t=l;u=+a4(+o)}p=c[6354]|0;if((p|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{o=u*+T(+s);f=p+1|0;c[6354]=f;p=14296+(f*24&-1)|0;c[p>>2]=2;c[p+4>>2]=g;h[14304+(f*24&-1)>>3]=t;h[14312+(f*24&-1)>>3]=o;i=a;return}}function kF(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0,l=0.0,m=0,n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;j=+h[e>>3];k=c[e>>2]|0;e=k;do{if((f|0)==3){l=+uz(e,b);m=(e|0)==(c[b>>2]|0);uu(e);if(!m){n=0.0;o=l;p=9323;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{l=+h[14312+(d*24&-1)>>3];if((f|0)==1){q=+(k|0);r=+a4(+q);s=0.0;t=r;u=+bz(+q);break}else if((f|0)==2){n=l;o=j;p=9323;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if((p|0)==9323){j=+a4(+o);l=j*+S(+n);s=n;t=l;u=+bz(+o)}p=c[6354]|0;if((p|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{o=u*+T(+s);f=p+1|0;c[6354]=f;p=14296+(f*24&-1)|0;c[p>>2]=2;c[p+4>>2]=g;h[14304+(f*24&-1)>>3]=t;h[14312+(f*24&-1)>>3]=o;i=a;return}}function kG(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0,l=0.0,m=0,n=0.0,o=0.0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;j=+h[e>>3];k=c[e>>2]|0;e=k;do{if((f|0)==3){l=+uz(e,b);m=(e|0)==(c[b>>2]|0);uu(e);if(!m){n=0.0;o=l;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((f|0)==2){n=+h[14312+(d*24&-1)>>3];o=j;break}else if((f|0)==1){n=0.0;o=+(k|0);break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);j=o*2.0;o=n*2.0;if(+P(+j)>706.893623549172){k=c[6354]|0;if((k|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=k+1|0;c[6354]=f;k=14296+(f*24&-1)|0;c[k>>2]=2;c[k+4>>2]=g;h[14304+(f*24&-1)>>3]=j<0.0?-1.0:1.0;h[14312+(f*24&-1)>>3]=0.0;i=a;return}else{n=+a4(+j);l=n+ +S(+o);n=+bz(+j);f=c[6354]|0;if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}j=+T(+o)/l;k=f+1|0;c[6354]=k;f=14296+(k*24&-1)|0;c[f>>2]=2;c[f+4>>2]=g;h[14304+(k*24&-1)>>3]=n/l;h[14312+(k*24&-1)>>3]=j;i=a;return}}function kH(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0.0,l=0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0.0;b=i;i=i+8|0;d=b|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=e-1;f=14296+(e*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=14304+(e*24&-1)|0;k=+h[f>>3];l=c[f>>2]|0;f=l;do{if((g|0)==3){m=+uz(f,d);n=(f|0)==(c[d>>2]|0);uu(f);if(!n){o=0.0;p=m;q=9353;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((g|0)==2){o=+h[14312+(e*24&-1)>>3];p=k;q=9353;break}else if((g|0)==1){r=+(l|0);s=0.0;t=-0.0;break}else{uf(-1,211552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if((q|0)==9353){r=p;s=o;t=-0.0-o}if(r==0.0){q=+P(+t)>1.0;l=c[6354]|0;g=(l|0)==249;if(q){if(g){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}q=l+1|0;c[6354]=q;e=14296+(q*24&-1)|0;c[e>>2]=2;c[e+4>>2]=j;uE(14304+(q*24&-1)|0,0,16);a[1960]=1;i=b;return}else{if(g){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}o=+h[9040];p=(-0.0- +W(+t))/o;g=l+1|0;c[6354]=g;l=14296+(g*24&-1)|0;c[l>>2]=2;c[l+4>>2]=j;h[14304+(g*24&-1)>>3]=0.0;h[14312+(g*24&-1)>>3]=p;i=b;return}}else{if(s==-0.0){g=c[6354]|0;if((g|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}p=r+ +Q(+(r*r+1.0));o=+h[9040];t=+_(+p)/o;l=g+1|0;c[6354]=l;g=14296+(l*24&-1)|0;c[g>>2]=2;c[g+4>>2]=j;h[14304+(l*24&-1)>>3]=t;h[14312+(l*24&-1)>>3]=0.0;i=b;return}else{t=1.0-s;o=r*r;p=+Q(+(t*t+o))*.5;t=-1.0-s;s=+Q(+(t*t+o))*.5;o=p+s;t=+h[9040];l=c[6354]|0;if((l|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}k=(r>=0.0?1.0:-1.0)*+_(+(+Q(+(o*o+-1.0))+o))/t;o=(-0.0- +W(+(p-s)))/t;g=l+1|0;c[6354]=g;l=14296+(g*24&-1)|0;c[l>>2]=2;c[l+4>>2]=j;h[14304+(g*24&-1)>>3]=k;h[14312+(g*24&-1)>>3]=o;i=b;return}}}function kI(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,w=0.0,x=0.0,y=0.0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=d-1|0;c[6354]=e;f=14296+(d*24&-1)|0;g=f|0;j=c[g>>2]|0;k=f+4|0;f=c[k>>2]|0;l=14304+(d*24&-1)|0;m=+h[l>>3];n=14312+(d*24&-1)|0;o=+h[n>>3];p=c[l>>2]|0;q=p;do{if((j|0)==3){r=+uz(q,b);s=(q|0)==(c[b>>2]|0);uu(q);if(!s){t=r;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((j|0)==2){if(o==0.0){t=m;break}r=m+1.0;u=o*o;w=+Q(+(u+r*r))*.5;r=m+-1.0;x=+Q(+(u+r*r))*.5;r=w+x;u=+h[9040];if((e|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}y=+_(+(+Q(+(r*r+-1.0))+r))/u;r=(o<0.0?-1.0:1.0)*+V(+(w-x))/u;c[6354]=d;c[g>>2]=2;c[k>>2]=f;h[l>>3]=y;h[n>>3]=r;i=a;return}else if((j|0)==1){t=+(p|0);break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);p=+P(+t)>1.0;j=c[6354]|0;n=(j|0)==249;if(p){if(n){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}o=t+ +Q(+(t*t+-1.0));m=+h[9040];r=+_(+o)/m;p=j+1|0;c[6354]=p;l=14296+(p*24&-1)|0;c[l>>2]=2;c[l+4>>2]=f;h[14304+(p*24&-1)>>3]=r;h[14312+(p*24&-1)>>3]=0.0;i=a;return}else{if(n){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}r=+h[9040];m=+V(+t)/r;n=j+1|0;c[6354]=n;j=14296+(n*24&-1)|0;c[j>>2]=2;c[j+4>>2]=f;h[14304+(n*24&-1)>>3]=0.0;h[14312+(n*24&-1)>>3]=m;i=a;return}}function kJ(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0.0,l=0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,w=0.0,x=0.0,y=0.0,z=0.0;b=i;i=i+8|0;d=b|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=e-1;f=14296+(e*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=14304+(e*24&-1)|0;k=+h[f>>3];l=c[f>>2]|0;f=l;do{if((g|0)==3){m=+uz(f,d);n=(f|0)==(c[d>>2]|0);uu(f);if(!n){o=0.0;p=m;q=9405;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((g|0)==2){o=+h[14312+(e*24&-1)>>3];p=k;q=9405;break}else if((g|0)==1){r=+(l|0);s=0.0;t=-0.0;break}else{uf(-1,211552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if((q|0)==9405){r=p;s=o;t=-0.0-o}if(r==0.0){q=c[6354]|0;if((q|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}o=+h[9040];p=(-0.0- +X(+t))/o;l=q+1|0;c[6354]=l;q=14296+(l*24&-1)|0;c[q>>2]=2;c[q+4>>2]=j;h[14304+(l*24&-1)>>3]=0.0;h[14312+(l*24&-1)>>3]=p;i=b;return}do{if(s==-0.0){if(+P(+r)<1.0){break}a[1960]=1;l=c[6354]|0;if((l|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}q=l+1|0;c[6354]=q;l=14296+(q*24&-1)|0;c[l>>2]=2;c[l+4>>2]=j;uE(14304+(q*24&-1)|0,0,16);i=b;return}}while(0);if(s>-0.0){u=-0.0-r;w=s}else{u=r;w=t}t=w*w;r=+X(+(w*2.0/(1.0-t-u*u)));w=u+1.0;p=u+-1.0;u=+_(+((t+w*w)/(t+p*p)))*.25;if(r<0.0){x=r+3.141592653589793}else{x=r}if(s>-0.0){y=-0.0-x;z=-0.0-u}else{y=x;z=u}q=c[6354]|0;if((q|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}u=y*-.5/+h[9040];l=q+1|0;c[6354]=l;q=14296+(l*24&-1)|0;c[q>>2]=2;c[q+4>>2]=j;h[14304+(l*24&-1)>>3]=z;h[14312+(l*24&-1)>>3]=u;i=b;return}function kK(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0,r=0.0,s=0,t=0.0,u=0.0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0;b=i;i=i+8|0;d=b|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=e-1;f=14296+(e*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=14304+(e*24&-1)|0;l=+h[f>>3];m=+h[14312+(e*24&-1)>>3];e=c[f>>2]|0;f=e;do{if((g|0)==3){n=+uz(f,d);o=(f|0)==(c[d>>2]|0);uu(f);if(o){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[k>>3]=n;p=0.0;q=c[k>>2]|0;r=n;s=9435;break}}else{if((g|0)==2){p=m;q=e;r=l;s=9435;break}else if((g|0)==1){t=0.0;u=m;w=1;x=e;y=l;break}uf(-1,211552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);if((s|0)==9435){t=p;u=p;w=2;x=q;y=r}r=+P(+t);if(r>+h[11]){uf(-1,136968,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((w|0)==1){z=+(x|0)}else if((w|0)==2){z=y}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}r=(1.0-z)*(z+1.0);if(r>0.0){A=1.0;B=r;C=0.0}else{x=c[6354]|0;if((x|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}q=x+1|0;c[6354]=q;x=14296+(q*24&-1)|0;c[x>>2]=w;c[x+4>>2]=j;h[14304+(q*24&-1)>>3]=y;h[14312+(q*24&-1)>>3]=u;a[1960]=1;i=b;return}while(1){u=+Q(+C);y=+Q(+B);r=+Q(+A);z=y*r+u*(y+r);r=(C+z)*.25;y=(B+z)*.25;u=(A+z)*.25;D=(u+(r+y))*.3333333333333333;E=(D-r)/D;F=(D-y)/D;G=(D-u)/D;if(+P(+E)>.0025){A=u;B=y;C=r;continue}if(+P(+F)>.0025){A=u;B=y;C=r;continue}if(+P(+G)>.0025){A=u;B=y;C=r}else{break}}C=E*F;F=C-G*G;E=C*G;q=c[6354]|0;if((q|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}G=(E*.07142857142857142+(F*(F*.041666666666666664+-.1-E*.06818181818181818)+1.0))/+Q(+D);x=q+1|0;c[6354]=x;q=14296+(x*24&-1)|0;c[q>>2]=2;c[q+4>>2]=j;h[14304+(x*24&-1)>>3]=G;h[14312+(x*24&-1)>>3]=0.0;i=b;return}function kL(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0,r=0.0,s=0,t=0.0,u=0.0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0;b=i;i=i+8|0;d=b|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=e-1;f=14296+(e*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=14304+(e*24&-1)|0;l=+h[f>>3];m=+h[14312+(e*24&-1)>>3];e=c[f>>2]|0;f=e;do{if((g|0)==3){n=+uz(f,d);o=(f|0)==(c[d>>2]|0);uu(f);if(o){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[k>>3]=n;p=0.0;q=c[k>>2]|0;r=n;s=9462;break}}else{if((g|0)==1){t=0.0;u=m;w=1;x=e;y=l;break}else if((g|0)==2){p=m;q=e;r=l;s=9462;break}uf(-1,211552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);if((s|0)==9462){t=p;u=p;w=2;x=q;y=r}r=+P(+t);if(r>+h[11]){uf(-1,136968,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((w|0)==1){z=+(x|0)}else if((w|0)==2){z=y}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}r=(1.0-z)*(z+1.0);if(r>0.0){A=1.0;B=r;C=0.0}else{if(r<0.0){a[1960]=1;x=c[6354]|0;if((x|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}q=x+1|0;c[6354]=q;x=14296+(q*24&-1)|0;c[x>>2]=w;c[x+4>>2]=j;h[14304+(q*24&-1)>>3]=y;h[14312+(q*24&-1)>>3]=u;i=b;return}else{q=c[6354]|0;if((q|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}x=q+1|0;c[6354]=x;q=14296+(x*24&-1)|0;c[q>>2]=2;c[q+4>>2]=j;h[14304+(x*24&-1)>>3]=1.0;h[14312+(x*24&-1)>>3]=0.0;i=b;return}}while(1){u=+Q(+C);y=+Q(+B);t=+Q(+A);p=y*t+u*(y+t);t=(C+p)*.25;y=(B+p)*.25;u=(A+p)*.25;D=(u+(t+y))*.3333333333333333;E=(D-t)/D;F=(D-y)/D;G=(D-u)/D;if(+P(+E)>.0025){A=u;B=y;C=t;continue}if(+P(+F)>.0025){A=u;B=y;C=t;continue}if(+P(+G)>.0025){A=u;B=y;C=t}else{break}}C=E*F;F=C-G*G;E=C*G;G=(E*.07142857142857142+(F*(F*.041666666666666664+-.1-E*.06818181818181818)+1.0))/+Q(+D);D=1.0;E=1.0;F=r;r=0.0;C=0.0;while(1){B=+Q(+r);A=+Q(+F);t=+Q(+E);y=A*t+B*(A+t);A=E+y;H=C+D/(t*A);I=D*.25;t=(r+y)*.25;B=(F+y)*.25;y=A*.25;J=(t+B+y*3.0)*.2;K=(J-t)/J;L=(J-B)/J;M=(J-y)/J;if(+P(+K)>.0015){D=I;E=y;F=B;r=t;C=H;continue}if(+P(+L)>.0015){D=I;E=y;F=B;r=t;C=H;continue}if(+P(+M)>.0015){D=I;E=y;F=B;r=t;C=H}else{break}}C=K*L;L=M*M;K=C-L;r=C-L*6.0;L=K+(K+r);x=c[6354]|0;if((x|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}F=G-z*z*(H*3.0+I*(M*(M*(C*M*.11538461538461539+K*-.4090909090909091)+L*.16666666666666666)+(r*(r*.10227272727272728+-.21428571428571427-M*.17307692307692307*L)+1.0))/(J*+Q(+J)))/3.0;q=x+1|0;c[6354]=q;x=14296+(q*24&-1)|0;c[x>>2]=2;c[x+4>>2]=j;h[14304+(q*24&-1)>>3]=F;h[14312+(q*24&-1)>>3]=0.0;i=b;return}function kM(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,w=0.0,x=0,y=0,z=0.0,A=0,B=0.0,C=0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ab=0.0,ac=0.0,ad=0.0,ae=0.0,af=0.0,ag=0.0,ah=0.0,ai=0.0,aj=0.0,ak=0.0,al=0.0,am=0.0,an=0.0,ao=0.0,ap=0.0,aq=0.0,ar=0.0,as=0.0;b=i;i=i+16|0;d=b|0;e=b+8|0;f=c[6354]|0;if((f|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=f-1|0;c[6354]=g;j=14296+(f*24&-1)|0;l=c[j>>2]|0;m=c[j+4>>2]|0;j=14304+(f*24&-1)|0;n=+h[j>>3];o=+h[14312+(f*24&-1)>>3];f=c[j>>2]|0;j=f;do{if((l|0)==3){p=+uz(j,e);q=(j|0)==(c[e>>2]|0);uu(j);if(q){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[k>>3]=p;q=c[k>>2]|0;r=2;s=0.0;t=c[6354]|0;u=q;w=p;x=q;break}}else{r=l;s=o;t=g;u=f;w=n;x=j}}while(0);if((t|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=t-1;j=14296+(t*24&-1)|0;f=c[j>>2]|0;g=c[j+4>>2]|0;j=14304+(t*24&-1)|0;n=+h[j>>3];o=+h[14312+(t*24&-1)>>3];t=c[j>>2]|0;j=t;do{if((f|0)==3){p=+uz(j,d);l=(j|0)==(c[d>>2]|0);uu(j);if(l){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[k>>3]=p;l=c[k>>2]|0;y=2;z=0.0;A=l;B=p;C=l;break}}else{y=f;z=o;A=t;B=n;C=j}}while(0);if((r|0)==2){D=s}else if((r|0)==1){D=0.0}else if((r|0)==3){uh(-1,212704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);uf(-1,212032,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{uf(-1,211552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}n=+P(+D);D=+h[11];if(n>D){uf(-1,136968,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((y|0)==1){E=0.0}else if((y|0)==3){uh(-1,212704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);uf(-1,212032,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((y|0)==2){E=z}else{uf(-1,211552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(+P(+E)>D){uf(-1,136968,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((r|0)==1){F=+(u|0)}else if((r|0)==2){F=w}else if((r|0)==3){F=+uz(x,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((y|0)==3){G=+uz(C,0)}else if((y|0)==2){G=B}else if((y|0)==1){G=+(A|0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}B=(1.0-F)*(F+1.0);if(B>0.0&G<1.0){H=1.0;I=B;J=0.0}else{a[1960]=1;A=c[6354]|0;if((A|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}y=A+1|0;c[6354]=y;A=14296+(y*24&-1)|0;c[A>>2]=r;c[A+4>>2]=m;h[14304+(y*24&-1)>>3]=w;h[14312+(y*24&-1)>>3]=s;h[k>>3]=w;y=c[k>>2]|0;if((r|0)!=3|(y|0)==0){i=b;return}r=bP(y|0)|0;c[14304+((c[6354]|0)*24&-1)>>2]=r;i=b;return}while(1){w=+Q(+J);s=+Q(+I);F=+Q(+H);D=s*F+w*(s+F);F=(J+D)*.25;s=(I+D)*.25;w=(H+D)*.25;K=(w+(F+s))*.3333333333333333;L=(K-F)/K;M=(K-s)/K;N=(K-w)/K;if(+P(+L)>.0025){H=w;I=s;J=F;continue}if(+P(+M)>.0025){H=w;I=s;J=F;continue}if(+P(+N)>.0025){H=w;I=s;J=F}else{break}}J=L*M;M=J-N*N;L=J*N;N=(L*.07142857142857142+(M*(M*.041666666666666664+-.1-L*.06818181818181818)+1.0))/+Q(+K);K=1.0-G;if(K>0.0){O=1.0;R=B;S=0.0;T=0.0;U=K;V=0.0}else{L=B<0.0?0.0:B;M=L>1.0?L:1.0;L=B+0.0+1.0-M;B=1.0/(L-K);J=L*(M-L)*B;I=L+J;H=M*0.0/L;F=K*I/L;if(F>0.0){W=1.0;X=F;Y=H}else{s=H-F;w=+Q(+H);W=w/+Q(+s);X=-0.0-F;Y=s}s=X;X=Y;do{Y=+Q(+X)*2.0;F=s+Y*+Q(+s);X=(X+F)*.25;s=(s+F)*.25;Z=(s+(X+s))*.3333333333333333;_=(s-Z)/Z;}while(+P(+_)>.0012);O=M;R=L;S=B;T=J;U=I;V=W*(_*_*(_*(_*(_*.4090909090909091+.375)+.14285714285714285)+.3)+1.0)/+Q(+Z)}Z=O;O=R;R=0.0;_=0.0;W=1.0;I=U;while(1){U=+Q(+R);J=+Q(+O);B=+Q(+Z);L=J*B+U*(J+B);M=U*J*B+I*(U+J+B);B=M*M;M=I+L;J=I*M*M;if(J>0.0){$=1.0;aa=J;ab=B}else{U=B-J;s=+Q(+B);$=s/+Q(+U);aa=-0.0-J;ab=U}U=aa;J=ab;do{s=+Q(+J)*2.0;B=U+s*+Q(+U);J=(J+B)*.25;U=(U+B)*.25;ac=(U+(J+U))*.3333333333333333;ad=(U-ac)/ac;}while(+P(+ad)>.0012);ae=_+W*($*(ad*ad*(ad*(ad*(ad*.4090909090909091+.375)+.14285714285714285)+.3)+1.0)/+Q(+ac));af=W*.25;ag=(R+L)*.25;ah=(O+L)*.25;ai=(Z+L)*.25;U=M*.25;aj=(U+(U+(ai+(ag+ah))))*.2;ak=(aj-ag)/aj;al=(aj-ah)/aj;am=(aj-ai)/aj;an=(aj-U)/aj;if(+P(+ak)>.0015){Z=ai;O=ah;R=ag;_=ae;W=af;I=U;continue}if(+P(+al)>.0015){Z=ai;O=ah;R=ag;_=ae;W=af;I=U;continue}if(+P(+am)>.0015){Z=ai;O=ah;R=ag;_=ae;W=af;I=U;continue}if(+P(+an)>.0015){Z=ai;O=ah;R=ag;_=ae;W=af;I=U}else{break}}I=al*am+ak*(al+am);W=ak*al*am;am=an*an;al=I-am*3.0;ak=ae*3.0+af*((.3333333333333333-an*.13636363636363635)*an*I+(W*(an*(an*.11538461538461539+-.2727272727272727)+.16666666666666666)+(al*(al*.10227272727272727+-.21428571428571427-(W+an*2.0*(I-am))*.17307692307692307)+1.0))-an*.3333333333333333*am)/(aj*+Q(+aj));if(K>0.0){ao=ak}else{K=ai;ai=ah;ah=ag;while(1){ag=+Q(+ah);aj=+Q(+ai);am=+Q(+K);an=aj*am+ag*(aj+am);am=(ah+an)*.25;aj=(ai+an)*.25;ag=(K+an)*.25;ap=(ag+(am+aj))*.3333333333333333;aq=(ap-am)/ap;ar=(ap-aj)/ap;as=(ap-ag)/ap;if(+P(+aq)>.0025){K=ag;ai=aj;ah=am;continue}if(+P(+ar)>.0025){K=ag;ai=aj;ah=am;continue}if(+P(+as)>.0025){K=ag;ai=aj;ah=am}else{break}}ah=aq*ar;ar=ah-as*as;aq=ah*as;ao=S*(T*ak+(V-(aq*.07142857142857142+(ar*(ar*.041666666666666664+-.1-aq*.06818181818181818)+1.0))/+Q(+ap))*3.0)}r=c[6354]|0;if((r|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}y=r+1|0;c[6354]=y;r=14296+(y*24&-1)|0;c[r>>2]=2;c[r+4>>2]=g;h[14304+(y*24&-1)>>3]=N+G*ao/3.0;h[14312+(y*24&-1)>>3]=0.0;i=b;return}function kN(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;a=i;i=i+16|0;b=a|0;d=a+8|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e-1|0;c[6354]=f;g=14296+(e*24&-1)|0;j=c[g>>2]|0;k=c[g+4>>2]|0;g=14304+(e*24&-1)|0;l=+h[g>>3];m=c[g>>2]|0;h[d>>3]=l;n=+h[14312+(e*24&-1)>>3];e=m;m=e;do{if((j|0)==3){o=+uz(m,b);g=(m|0)==(c[b>>2]|0);uu(m);if(g){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[d>>3]=o;p=o;q=0.0;r=c[6354]|0;break}}else{if((j|0)==2){p=l;q=n;r=f;break}else if((j|0)==1){p=+(e|0);q=n;r=f;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);c[d>>2]=~~p;if((r|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{f=r+1|0;c[6354]=f;r=14296+(f*24&-1)|0;c[r>>2]=1;c[r+4>>2]=k;h[14304+(f*24&-1)>>3]=+h[d>>3];h[14312+(f*24&-1)>>3]=q;i=a;return}}function kO(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0.0,t=0,u=0.0,w=0.0,x=0.0;a=i;i=i+16|0;b=a|0;d=a+8|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e-1|0;c[6354]=f;g=14296+(e*24&-1)|0;j=g|0;k=c[j>>2]|0;l=g+4|0;g=c[l>>2]|0;m=14304+(e*24&-1)|0;n=+h[m>>3];o=c[m>>2]|0;h[d>>3]=n;p=14312+(e*24&-1)|0;q=+h[p>>3];r=o;o=r;do{if((k|0)==3){s=+uz(o,b);t=(o|0)==(c[b>>2]|0);uu(o);if(t){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[d>>3]=s;u=0.0;w=s;break}}else{if((k|0)==2){u=q;w=n;break}else if((k|0)!=1){uf(-1,205760,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[d>>2]=(r|0)>-1?r:-r|0;if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=e;c[j>>2]=1;c[l>>2]=g;h[m>>3]=+h[d>>3];h[p>>3]=q;i=a;return}}while(0);q=+P(+w);w=+P(+u);do{if(u==0.0){x=q}else{if(q>w){n=w/q;x=q*+Q(+(n*n+1.0));break}else{n=q/w;x=w*+Q(+(n*n+1.0));break}}}while(0);h[d>>3]=x;d=c[6354]|0;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}p=d+1|0;c[6354]=p;d=14296+(p*24&-1)|0;c[d>>2]=2;c[d+4>>2]=g;h[14304+(p*24&-1)>>3]=x;h[14312+(p*24&-1)>>3]=0.0;i=a;return}function kP(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0.0,t=0,u=0.0,w=0.0,x=0;a=i;i=i+16|0;b=a|0;d=a+8|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e-1|0;c[6354]=f;g=14296+(e*24&-1)|0;j=g|0;k=c[j>>2]|0;l=g+4|0;g=c[l>>2]|0;m=14304+(e*24&-1)|0;n=+h[m>>3];o=c[m>>2]|0;h[d>>3]=n;p=14312+(e*24&-1)|0;q=+h[p>>3];r=o;o=r;do{if((k|0)==3){s=+uz(o,b);t=(o|0)==(c[b>>2]|0);uu(o);if(t){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[d>>3]=s;u=0.0;w=s;break}}else{if((k|0)==2){u=q;w=n;break}else if((k|0)!=1){uf(-1,205760,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[d>>2]=(r|0)>0?1:r>>31;if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=e;c[j>>2]=1;c[l>>2]=g;h[m>>3]=+h[d>>3];h[p>>3]=q;i=a;return}}while(0);if(w>0.0){x=1}else{x=(w<0.0)<<31>>31}c[d>>2]=x;x=c[6354]|0;if((x|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}p=x+1|0;c[6354]=p;x=14296+(p*24&-1)|0;c[x>>2]=1;c[x+4>>2]=g;h[14304+(p*24&-1)>>3]=+h[d>>3];h[14312+(p*24&-1)>>3]=u;i=a;return}function kQ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0,l=0.0,m=0,n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;j=+h[e>>3];k=c[e>>2]|0;e=k;do{if((f|0)==3){l=+uz(e,b);m=(e|0)==(c[b>>2]|0);uu(e);if(!m){n=0.0;o=l;p=9618;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((f|0)==2){n=+h[14312+(d*24&-1)>>3];o=j;p=9618;break}else if((f|0)==1){q=+(k|0);r=+Q(+(+(((k|0)>-1?k:-k|0)|0)));break}else{uf(-1,211136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if((p|0)==9618){j=+P(+o);l=+P(+n);k=n==0.0;if(k){q=o;r=+Q(+j);break}if(j>l){s=l/j;t=+Q(+(j*+Q(+(s*s+1.0))))}else{s=j/l;j=+Q(+(l*+Q(+(s*s+1.0))));if(k){q=o;r=j;break}else{t=j}}j=+Y(+n,+o)*.5;k=c[6354]|0;if((k|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}s=t*+S(+j);l=t*+T(+j);f=k+1|0;c[6354]=f;k=14296+(f*24&-1)|0;c[k>>2]=2;c[k+4>>2]=g;h[14304+(f*24&-1)>>3]=s;h[14312+(f*24&-1)>>3]=l;i=a;return}}while(0);p=c[6354]|0;f=(p|0)==249;if(q<0.0){if(f){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}k=p+1|0;c[6354]=k;d=14296+(k*24&-1)|0;c[d>>2]=2;c[d+4>>2]=g;h[14304+(k*24&-1)>>3]=0.0;h[14312+(k*24&-1)>>3]=r;i=a;return}else{if(f){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=p+1|0;c[6354]=f;p=14296+(f*24&-1)|0;c[p>>2]=2;c[p+4>>2]=g;h[14304+(f*24&-1)>>3]=r;h[14312+(f*24&-1)>>3]=0.0;i=a;return}}function kR(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0.0,l=0.0,m=0,n=0.0,o=0.0,p=0,q=0.0,r=0.0;a=i;i=i+8|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;j=+h[e>>3];k=+h[14312+(d*24&-1)>>3];d=c[e>>2]|0;e=d;do{if((f|0)==3){l=+uz(e,b);m=(e|0)==(c[b>>2]|0);uu(e);if(!m){n=l;o=0.0;p=2;break}uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{if((f|0)==1){n=+(d|0);o=k;p=1;break}else if((f|0)==2){n=j;o=k;p=2;break}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);if(n<-706.893623549172){q=0.0}else{q=+Z(+n)}if((p|0)==2){r=o}else if((p|0)==1){r=0.0}else{uf(-1,211552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}p=c[6354]|0;if((p|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{o=q*+S(+r);n=q*+T(+r);f=p+1|0;c[6354]=f;p=14296+(f*24&-1)|0;c[p>>2]=2;c[p+4>>2]=g;h[14304+(f*24&-1)>>3]=o;h[14312+(f*24&-1)>>3]=n;i=a;return}}function kS(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0.0,r=0,s=0,t=0.0,u=0.0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0;b=i;i=i+8|0;d=b|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=e-1;f=14296+(e*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=14304+(e*24&-1)|0;l=+h[f>>3];m=+h[14312+(e*24&-1)>>3];e=c[f>>2]|0;f=e;do{if((g|0)==3){n=+uz(f,d);o=(f|0)==(c[d>>2]|0);uu(f);if(o){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[k>>3]=n;p=0.0;q=n;r=c[k>>2]|0;s=9662;break}}else{if((g|0)==1){t=+(((e|0)>-1?e:-e|0)|0);u=m;w=1;x=e;y=l;break}else if((g|0)==2){p=m;q=l;r=e;s=9662;break}else{uf(-1,211136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if((s|0)==9662){l=+P(+q);m=+P(+p);if(p==0.0){t=l;u=p;w=2;x=r;y=q;break}if(l>m){n=m/l;t=l*+Q(+(n*n+1.0));u=p;w=2;x=r;y=q;break}else{n=l/m;t=m*+Q(+(n*n+1.0));u=p;w=2;x=r;y=q;break}}}while(0);if(t==0.0){a[1960]=1;r=c[6354]|0;if((r|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}s=r+1|0;c[6354]=s;r=14296+(s*24&-1)|0;c[r>>2]=w;c[r+4>>2]=j;h[14304+(s*24&-1)>>3]=y;h[14312+(s*24&-1)>>3]=u;i=b;return}L13201:do{if((w|0)==1){z=(x|0)>-1?0.0:3.141592653589793;A=+_(+(+(((x|0)>-1?x:-x|0)|0)))/2.302585092994046}else if((w|0)==2){t=+P(+y);q=+P(+u);s=u==0.0;do{if(s){B=+_(+t)/2.302585092994046}else{if(t>q){p=q/t;C=+_(+(t*+Q(+(p*p+1.0))))/2.302585092994046}else{p=t/q;n=+_(+(q*+Q(+(p*p+1.0))))/2.302585092994046;if(s){B=n;break}else{C=n}}z=+Y(+u,+y);A=C;break L13201}}while(0);z=y<0.0?3.141592653589793:0.0;A=B}else{uf(-1,211136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);w=c[6354]|0;if((w|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}x=w+1|0;c[6354]=x;w=14296+(x*24&-1)|0;c[w>>2]=2;c[w+4>>2]=j;h[14304+(x*24&-1)>>3]=A;h[14312+(x*24&-1)>>3]=z/2.302585092994046;i=b;return}function kT(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0.0,r=0,s=0,t=0.0,u=0.0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0;b=i;i=i+8|0;d=b|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=e-1;f=14296+(e*24&-1)|0;g=c[f>>2]|0;j=c[f+4>>2]|0;f=14304+(e*24&-1)|0;l=+h[f>>3];m=+h[14312+(e*24&-1)>>3];e=c[f>>2]|0;f=e;do{if((g|0)==3){n=+uz(f,d);o=(f|0)==(c[d>>2]|0);uu(f);if(o){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[k>>3]=n;p=0.0;q=n;r=c[k>>2]|0;s=9695;break}}else{if((g|0)==2){p=m;q=l;r=e;s=9695;break}else if((g|0)==1){t=+(((e|0)>-1?e:-e|0)|0);u=m;w=1;x=e;y=l;break}else{uf(-1,211136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);do{if((s|0)==9695){l=+P(+q);m=+P(+p);if(p==0.0){t=l;u=p;w=2;x=r;y=q;break}if(l>m){n=m/l;t=l*+Q(+(n*n+1.0));u=p;w=2;x=r;y=q;break}else{n=l/m;t=m*+Q(+(n*n+1.0));u=p;w=2;x=r;y=q;break}}}while(0);if(t==0.0){a[1960]=1;r=c[6354]|0;if((r|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}s=r+1|0;c[6354]=s;r=14296+(s*24&-1)|0;c[r>>2]=w;c[r+4>>2]=j;h[14304+(s*24&-1)>>3]=y;h[14312+(s*24&-1)>>3]=u;i=b;return}L13245:do{if((w|0)==1){z=(x|0)>-1?0.0:3.141592653589793;A=+_(+(+(((x|0)>-1?x:-x|0)|0)))}else if((w|0)==2){t=+P(+y);q=+P(+u);s=u==0.0;do{if(s){B=+_(+t)}else{if(t>q){p=q/t;C=+_(+(t*+Q(+(p*p+1.0))))}else{p=t/q;n=+_(+(q*+Q(+(p*p+1.0))));if(s){B=n;break}else{C=n}}z=+Y(+u,+y);A=C;break L13245}}while(0);z=y<0.0?3.141592653589793:0.0;A=B}else{uf(-1,211136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);w=c[6354]|0;if((w|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}x=w+1|0;c[6354]=x;w=14296+(x*24&-1)|0;c[w>>2]=2;c[w+4>>2]=j;h[14304+(x*24&-1)>>3]=A;h[14312+(x*24&-1)>>3]=z;i=b;return}function kU(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0.0,t=0,u=0.0,w=0.0,x=0;a=i;i=i+16|0;b=a|0;d=a+8|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e-1|0;c[6354]=f;g=14296+(e*24&-1)|0;j=g|0;k=c[j>>2]|0;l=g+4|0;g=c[l>>2]|0;m=14304+(e*24&-1)|0;n=+h[m>>3];o=c[m>>2]|0;h[d>>3]=n;p=14312+(e*24&-1)|0;q=+h[p>>3];r=o;o=r;do{if((k|0)==3){s=+uz(o,b);t=(o|0)==(c[b>>2]|0);uu(o);if(t){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[d>>3]=s;u=0.0;w=s;x=c[6354]|0;break}}else{if((k|0)==2){u=q;w=n;x=f;break}else if((k|0)!=1){uf(-1,205760,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[d>>2]=~~+O(+(+(r|0)));if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=e;c[j>>2]=1;c[l>>2]=g;h[m>>3]=+h[d>>3];h[p>>3]=q;i=a;return}}while(0);c[d>>2]=~~+O(+w);if((x|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}p=x+1|0;c[6354]=p;x=14296+(p*24&-1)|0;c[x>>2]=1;c[x+4>>2]=g;h[14304+(p*24&-1)>>3]=+h[d>>3];h[14312+(p*24&-1)>>3]=u;i=a;return}function kV(a){a=+a;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0;if(a>0.0){b=a}else{b=-0.0-a}if(b<8.0){a=b*b;c=(a*(a*(a*(a*(a*(a*(a*(a*26857.86856980015-40504123.71833133)+25071582855.36882)-8085222034853.794)+DOT$ZERO(0x51889c8a118fa))+-136762035308817140.0)+6382059341072356000.0)+-117915762910761060000.0)+49337872517941336.0e4)/(a*(a*(a*(a*(a*(a*(a*(a+1363.0636523289706)+1114636.0984629854)+669998767.298224)+312304311494.12134)+112775673967979.84)+30246356167094628.0)+5428918384092285000.0)+49337872517941336.0e4);return+c}else{a=+Q(+(.6366197723675814/b));d=8.0/b;e=d*d;f=b+-.7853981633974483;b=(e*(e*(e*(e*(e*.8896154842421046+153.76201909008356)+3480.648644324927)+21170.523380864943)+41345.38663958076)+22779.090197304686)/(e*(e*(e*(e*(e+157.11159858080893)+3502.8735138235606)+21215.350561880117)+41370.41249551042)+22779.090197304686)*+S(+f);c=a*(b-d*((e*(e*(e*(e*(e*-.008803330304868075-1.244102674583564)-22.300261666214197)-111.83429920482737)-185.91953644342993)-89.22660020080009)/(e*(e*(e*(e*(e+90.59376959499312)+1488.7231232283757)+7264.278016921102)+11951.131543434614)+5710.502412851206))*+T(+f));return+c}return 0.0}function kW(a){a=+a;var b=0,c=0.0,d=0.0,e=0.0,f=0.0,g=0.0,h=0.0;b=a<0.0;if(b){c=-0.0-a}else{c=a}if(c<8.0){d=c*c;e=(d*(d*(d*(d*(d*(d*(d*(d*2701.1227108923235-4695753.530642996)+3413234182.3017006)-1322983480332.1265)+290879526383477.56)+-35888175699101060.0)+2316433580634002400.0)+-6672106568924916.0e4)+5811993540016061.0e5)/(d*(d*(d*(d*(d*(d*(d*(d+1606.9315734814877)+1501793.5949985855)+1013863514.358674)+524371026216.76495)+208166122130760.75)+60920613989175220.0)+11857707121903210000.0)+0x3f0385ca46d07a0000)*a;return+e}a=+Q(+(.6366197723675814/c));d=8.0/c;f=d*d;g=c-2.356194490192345;c=(f*(f*(f*(f*(f*1.2571716929145342+211.15291828539623)+4985.4832060594335)+31353.963110915956)+62758.84524716128)+35224.66491336798)/(f*(f*(f*(f*(f+203.07751891347593)+4930.396490181089)+31240.406381904104)+62694.34695935605)+35224.66491336798)*+S(+g);h=a*(c-d*((f*(f*(f*(f*(f*.03532840052740124+4.568171629551227)+83.18989576738508)+425.98730116544425)+721.0391804904475)+351.17519143035526)/(f*(f*(f*(f*(f+103.81875854621337)+1811.1867005523513)+9152.231701516992)+15414.177339265098)+7491.737417180912))*+T(+g));if(!b){e=h;return+e}e=-0.0-h;return+e}function kX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0.0,t=0,u=0.0,w=0.0,x=0;a=i;i=i+16|0;b=a|0;d=a+8|0;e=c[6354]|0;if((e|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e-1|0;c[6354]=f;g=14296+(e*24&-1)|0;j=g|0;k=c[j>>2]|0;l=g+4|0;g=c[l>>2]|0;m=14304+(e*24&-1)|0;n=+h[m>>3];o=c[m>>2]|0;h[d>>3]=n;p=14312+(e*24&-1)|0;q=+h[p>>3];r=o;o=r;do{if((k|0)==3){s=+uz(o,b);t=(o|0)==(c[b>>2]|0);uu(o);if(t){uf(-1,208864,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{h[d>>3]=s;u=0.0;w=s;x=c[6354]|0;break}}else{if((k|0)==2){u=q;w=n;x=f;break}else if((k|0)!=1){uf(-1,205760,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[d>>2]=~~+$(+(+(r|0)));if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=e;c[j>>2]=1;c[l>>2]=g;h[m>>3]=+h[d>>3];h[p>>3]=q;i=a;return}}while(0);c[d>>2]=~~+$(+w);if((x|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}p=x+1|0;c[6354]=p;x=14296+(p*24&-1)|0;c[x>>2]=1;c[x+4>>2]=g;h[14304+(p*24&-1)>>3]=+h[d>>3];h[14312+(p*24&-1)>>3]=u;i=a;return}function kY(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;b=i;i=i+16|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=d-1|0;c[6354]=e;f=14296+(d*24&-1)|0;g=f;h=f|0;f=c[h>>2]|0;j=g+4|0;k=c[j>>2]|0;l=14304+(d*24&-1)|0;m=c[l>>2]|0;n=g+12|0;g=b|0;c[g>>2]=c[n>>2];c[g+4>>2]=c[n+4>>2];c[g+8>>2]=c[n+8>>2];if((f|0)==3){f=m;m=e6(f)|0;uu(f);f=c[6354]|0;if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}o=(a[m+8|0]&1^1)&255;m=f+1|0;c[6354]=m;f=14296+(m*24&-1)|0;p=f;c[f>>2]=1;c[p+4>>2]=k;c[14304+(m*24&-1)>>2]=o;o=p+12|0;c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];i=b;return}else{if((e|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d;c[h>>2]=1;c[j>>2]=k;c[l>>2]=0;c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];i=b;return}}function kZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0,l=0.0,m=0.0,n=0.0,o=0;a=i;b=c[6354]|0;if((b|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}d=b-1|0;c[6354]=d;e=14296+(b*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(b*24&-1)|0;j=+h[e>>3];k=c[e>>2]|0;e=k;if((f|0)==2){l=+h[14312+(b*24&-1)>>3]}else if((f|0)==3){uh(-1,212704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);uf(-1,212032,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((f|0)==1){l=0.0}else{uf(-1,211552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}m=+P(+l);if(m>+h[11]){uf(-1,151424,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((f|0)==1){n=+(k|0);o=d}else if((f|0)==2){n=j;o=d}else if((f|0)==3){j=+uz(e,0);n=j;o=c[6354]|0}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((o|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{j=+kV(n);e=o+1|0;c[6354]=e;o=14296+(e*24&-1)|0;c[o>>2]=2;c[o+4>>2]=g;h[14304+(e*24&-1)>>3]=j;h[14312+(e*24&-1)>>3]=0.0;i=a;return}}function k_(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0,l=0.0,m=0.0,n=0.0,o=0;a=i;b=c[6354]|0;if((b|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}d=b-1|0;c[6354]=d;e=14296+(b*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(b*24&-1)|0;j=+h[e>>3];k=c[e>>2]|0;e=k;if((f|0)==1){l=0.0}else if((f|0)==3){uh(-1,212704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);uf(-1,212032,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((f|0)==2){l=+h[14312+(b*24&-1)>>3]}else{uf(-1,211552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}m=+P(+l);if(m>+h[11]){uf(-1,151424,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((f|0)==3){m=+uz(e,0);n=m;o=c[6354]|0}else if((f|0)==1){n=+(k|0);o=d}else if((f|0)==2){n=j;o=d}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((o|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{j=+kW(n);d=o+1|0;c[6354]=d;o=14296+(d*24&-1)|0;c[o>>2]=2;c[o+4>>2]=g;h[14304+(d*24&-1)>>3]=j;h[14312+(d*24&-1)>>3]=0.0;i=a;return}}function k$(b){b=b|0;var d=0,e=0,f=0,g=0,j=0.0,k=0,l=0.0,m=0.0,n=0.0,o=0,q=0.0,r=0.0,s=0.0;b=i;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;j=+h[e>>3];k=c[e>>2]|0;e=k;if((f|0)==2){l=+h[14312+(d*24&-1)>>3]}else if((f|0)==3){uh(-1,212704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);uf(-1,212032,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((f|0)==1){l=0.0}else{uf(-1,211552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}m=+P(+l);if(m>+h[11]){uf(-1,151424,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((f|0)==1){n=+(k|0)}else if((f|0)==2){n=j}else if((f|0)==3){n=+uz(e,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(n<=0.0){d=c[6354]|0;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}o=d+1|0;c[6354]=o;d=14296+(o*24&-1)|0;c[d>>2]=2;c[d+4>>2]=g;uE(14304+(o*24&-1)|0,0,16);a[1960]=1;i=b;return}if((f|0)==2){q=j}else if((f|0)==1){q=+(k|0)}else if((f|0)==3){q=+uz(e,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}do{if(q<0.0){r=p}else{if(q<8.0){j=q*q;n=+kV(q)*.6366197723675814;r=(j*(j*(j*(j*(j*(j*(j*(j*-41370.35497933149+59152134.6568689)-34363712229.790405)+10255208596863.943)-1648605817185729.5)+137562431639934400.0)+-5247065581112765000.0)+6587473275719555.0e4)+-27502866786291098000.0)/(j*(j*(j*(j*(j*(j*(j*(j+1282.452772478994)+1001702.6412889062)+579512264.070073)+261306575504.10812)+91620380340751.86)+DOT$ZERO(0x550324fdf7f63c))+419241704341084.0e4)+3726458838986166.0e5)+n*+_(+q);break}else{n=+Q(+(.6366197723675814/q));j=8.0/q;m=j*j;l=q+-.7853981633974483;s=(m*(m*(m*(m*(m*.8896154842421046+153.76201909008356)+3480.648644324927)+21170.523380864943)+41345.38663958076)+22779.090197304686)/(m*(m*(m*(m*(m+157.11159858080893)+3502.8735138235606)+21215.350561880117)+41370.41249551042)+22779.090197304686)*+T(+l);r=n*(s+j*((m*(m*(m*(m*(m*-.008803330304868075-1.244102674583564)-22.300261666214197)-111.83429920482737)-185.91953644342993)-89.22660020080009)/(m*(m*(m*(m*(m+90.59376959499312)+1488.7231232283757)+7264.278016921102)+11951.131543434614)+5710.502412851206))*+S(+l));break}}}while(0);e=c[6354]|0;if((e|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e+1|0;c[6354]=f;e=14296+(f*24&-1)|0;c[e>>2]=2;c[e+4>>2]=g;h[14304+(f*24&-1)>>3]=r;h[14312+(f*24&-1)>>3]=0.0;i=b;return}function k0(b){b=b|0;var d=0,e=0,f=0,g=0,j=0.0,k=0,l=0.0,m=0.0,n=0.0,o=0,q=0.0,r=0.0,s=0.0;b=i;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;j=+h[e>>3];k=c[e>>2]|0;e=k;if((f|0)==3){uh(-1,212704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);uf(-1,212032,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((f|0)==1){l=0.0}else if((f|0)==2){l=+h[14312+(d*24&-1)>>3]}else{uf(-1,211552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}m=+P(+l);if(m>+h[11]){uf(-1,151424,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((f|0)==2){n=j}else if((f|0)==3){n=+uz(e,0)}else if((f|0)==1){n=+(k|0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(n<=0.0){d=c[6354]|0;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}o=d+1|0;c[6354]=o;d=14296+(o*24&-1)|0;c[d>>2]=2;c[d+4>>2]=g;uE(14304+(o*24&-1)|0,0,16);a[1960]=1;i=b;return}if((f|0)==1){q=+(k|0)}else if((f|0)==2){q=j}else if((f|0)==3){q=+uz(e,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}do{if(q>0.0){if(q<8.0){j=q*q;n=+kW(q);r=q*((j*(j*(j*(j*(j*(j*(j*(j*0.0+355692.4009830526)-428947196.88552487)+204969667374.56622)-48633169425671.75)+5915160760490071.0)+-344104806308411460.0)+774852068218684.0e4)+-29238219615329624000.0)/(j*(j*(j*(j*(j*(j*(j*(j+1072.6961437789255)+726914.7307198885)+371666079.86219305)+150022169915.6709)+47551735888881.375)+DOT$ZERO(0x2834334232332e))+1818662841706135000.0)+149131151130292030000.0))+(n*+_(+q)-1.0/q)*.6366197723675814;break}else{n=+Q(+(.6366197723675814/q));j=8.0/q;m=j*j;l=q-2.356194490192345;s=(m*(m*(m*(m*(m*1.2571716929145342+211.15291828539623)+4985.4832060594335)+31353.963110915956)+62758.84524716128)+35224.66491336798)/(m*(m*(m*(m*(m+203.07751891347593)+4930.396490181089)+31240.406381904104)+62694.34695935605)+35224.66491336798)*+T(+l);r=n*(s+j*((m*(m*(m*(m*(m*.03532840052740124+4.568171629551227)+83.18989576738508)+425.98730116544425)+721.0391804904475)+351.17519143035526)/(m*(m*(m*(m*(m+103.81875854621337)+1811.1867005523513)+9152.231701516992)+15414.177339265098)+7491.737417180912))*+S(+l));break}}else{r=p}}while(0);e=c[6354]|0;if((e|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=e+1|0;c[6354]=f;e=14296+(f*24&-1)|0;c[e>>2]=2;c[e+4>>2]=g;h[14304+(f*24&-1)>>3]=r;h[14312+(f*24&-1)>>3]=0.0;i=b;return}function k1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0.0;a=i;i=i+48|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;j=+h[e>>3];d=c[e>>2]|0;if((f|0)==1){k=+(d|0)}else if((f|0)==3){k=+uz(d,0)}else if((f|0)==2){k=j}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}t3(b,k);f=c[6354]|0;if((f|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{k=+(c[b>>2]|0);b=f+1|0;c[6354]=b;f=14296+(b*24&-1)|0;c[f>>2]=2;c[f+4>>2]=g;h[14304+(b*24&-1)>>3]=k;h[14312+(b*24&-1)>>3]=0.0;i=a;return}}function k2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0;a=i;i=i+48|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;d=c[e>>2]|0;if((f|0)==2){j=+h[e>>3]}else if((f|0)==3){j=+uz(d,0)}else if((f|0)==1){j=+(d|0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}t3(b,j);d=c[6354]|0;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{j=+(c[b+4>>2]|0);b=d+1|0;c[6354]=b;d=14296+(b*24&-1)|0;c[d>>2]=2;c[d+4>>2]=g;h[14304+(b*24&-1)>>3]=j;h[14312+(b*24&-1)>>3]=0.0;i=a;return}}function k3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0;a=i;i=i+48|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;d=c[e>>2]|0;if((f|0)==2){j=+h[e>>3]}else if((f|0)==3){j=+uz(d,0)}else if((f|0)==1){j=+(d|0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}t3(b,j);d=c[6354]|0;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{j=+(c[b+8>>2]|0);b=d+1|0;c[6354]=b;d=14296+(b*24&-1)|0;c[d>>2]=2;c[d+4>>2]=g;h[14304+(b*24&-1)>>3]=j;h[14312+(b*24&-1)>>3]=0.0;i=a;return}}function k4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0;a=i;i=i+48|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;d=c[e>>2]|0;if((f|0)==2){j=+h[e>>3]}else if((f|0)==1){j=+(d|0)}else if((f|0)==3){j=+uz(d,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}t3(b,j);d=c[6354]|0;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{j=+(c[b+12>>2]|0);b=d+1|0;c[6354]=b;d=14296+(b*24&-1)|0;c[d>>2]=2;c[d+4>>2]=g;h[14304+(b*24&-1)>>3]=j;h[14312+(b*24&-1)>>3]=0.0;i=a;return}}function k5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0;a=i;i=i+48|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;d=c[e>>2]|0;if((f|0)==2){j=+h[e>>3]}else if((f|0)==1){j=+(d|0)}else if((f|0)==3){j=+uz(d,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}t3(b,j);d=c[6354]|0;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{j=+(c[b+16>>2]|0);b=d+1|0;c[6354]=b;d=14296+(b*24&-1)|0;c[d>>2]=2;c[d+4>>2]=g;h[14304+(b*24&-1)>>3]=j;h[14312+(b*24&-1)>>3]=0.0;i=a;return}}function k6(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0.0;a=i;i=i+48|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;j=+h[e>>3];d=c[e>>2]|0;if((f|0)==1){k=+(d|0)}else if((f|0)==2){k=j}else if((f|0)==3){k=+uz(d,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}t3(b,k);d=c[6354]|0;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{k=+(c[b+20>>2]|0);b=d+1|0;c[6354]=b;d=14296+(b*24&-1)|0;c[d>>2]=2;c[d+4>>2]=g;h[14304+(b*24&-1)>>3]=k;h[14312+(b*24&-1)>>3]=0.0;i=a;return}}function k7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0;a=i;i=i+48|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;d=c[e>>2]|0;if((f|0)==2){j=+h[e>>3]}else if((f|0)==1){j=+(d|0)}else if((f|0)==3){j=+uz(d,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}t3(b,j);d=c[6354]|0;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{j=+(c[b+24>>2]|0);b=d+1|0;c[6354]=b;d=14296+(b*24&-1)|0;c[d>>2]=2;c[d+4>>2]=g;h[14304+(b*24&-1)>>3]=j;h[14312+(b*24&-1)>>3]=0.0;i=a;return}}function k8(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0;a=i;i=i+48|0;b=a|0;d=c[6354]|0;if((d|0)<0){uf(-1,209224,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[6354]=d-1;e=14296+(d*24&-1)|0;f=c[e>>2]|0;g=c[e+4>>2]|0;e=14304+(d*24&-1)|0;d=c[e>>2]|0;if((f|0)==2){j=+h[e>>3]}else if((f|0)==1){j=+(d|0)}else if((f|0)==3){j=+uz(d,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}t3(b,j);d=c[6354]|0;if((d|0)==249){uf(-1,208304,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{j=+(c[b+28>>2]|0);b=d+1|0;c[6354]=b;d=14296+(b*24&-1)|0;c[d>>2]=2;c[d+4>>2]=g;h[14304+(b*24&-1)>>3]=j;h[14312+(b*24&-1)>>3]=0.0;i=a;return}}function k9(){var b=0,d=0,e=0,f=0,j=0,k=0,l=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0.0,am=0.0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aG=0,aH=0.0,aJ=0.0,aK=0.0,aL=0.0,aM=0.0,aN=0.0,aO=0,aP=0.0,aQ=0.0,aR=0.0,aS=0.0,aT=0.0,aU=0.0,aV=0.0,aW=0.0,aX=0,aZ=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,ba=0,bb=0,bc=0,bd=0,bf=0,bg=0,bh=0,bi=0,bj=0,bk=0,bl=0,bm=0,bn=0;b=i;i=i+720|0;d=b|0;e=b+112|0;f=b+144|0;j=b+176|0;k=b+208|0;l=b+320|0;o=b+432|0;p=b+456|0;q=b+480|0;r=b+496|0;s=b+608|0;c[13898]=(c[13898]|0)+1;c[16506]=c[16507];h[8255]=+h[8257];h[8256]=+h[8258];h[8261]=8.988465674311579e+307;h[8262]=-8.988465674311579e+307;c[16334]=c[16335];h[8169]=+h[8171];h[8170]=+h[8172];h[8175]=8.988465674311579e+307;h[8176]=-8.988465674311579e+307;dq(2);dq(1);uu(c[3562]|0);uu(c[3560]|0);t=ut(32768)|0;do{if((t|0)==0){gk();u=ut(32768)|0;if((u|0)!=0){x=u;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=215008,v)|0)}else{x=t}}while(0);c[3562]=x;x=ut(32768)|0;do{if((x|0)==0){gk();t=ut(32768)|0;if((t|0)!=0){y=t;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=215008,v)|0)}else{y=x}}while(0);c[3560]=y;if(!((c[3562]|0)!=0&(y|0)!=0)){uf(-1,135152,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}uu(c[3558]|0);y=c[13898]|0;L13568:do{if((y|0)<(c[8272]|0)){x=c[1054]|0;L13570:do{if((a[x+(y*40&-1)|0]&1)!=0){t=c[x+(y*40&-1)+36>>2]|0;u=x+(y*40&-1)+32|0;z=c[10036]|0;A=0;while(1){if((A|0)>=(t|0)){break}if((a[z+((c[u>>2]|0)+A|0)|0]|0)==(a[A+103664|0]|0)){A=A+1|0}else{break L13570}}if((A|0)==1){break L13568}}}while(0);a[14176]=1;is(p);a[14176]=0;if((c[p>>2]|0)!=3){c[13898]=y;break}x=c[p+8>>2]|0;c[3558]=x;u=c[13898]|0;if((x|0)==0){B=u;uf(B,205112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}z=c[1054]|0;t=c[z+(u*40&-1)+36>>2]|0;L13583:do{if((a[z+(u*40&-1)|0]&1)!=0&(t|0)>0){C=c[10036]|0;D=0;E=0;F=c[z+(u*40&-1)+32>>2]|0;while(1){if((a[D+151232|0]|0)==(a[C+(D+F|0)|0]|0)){G=F;H=E}else{if((D|0)!=3){I=9981;break L13583}G=F-1|0;H=1}J=D+1|0;if((J|0)<(H+t|0)){D=J;E=H;F=G}else{break}}if((H|0)==0){if(!((D|0)==6|(D|0)==2)){I=9981;break}}ey(x,3,0);F=(c[11864]|0)-1|0;E=c[12172]|0;C=c[E+(F*232&-1)+144>>2]|0;A=aa(C,c[E+(F*232&-1)+140>>2]|0);J=c[E+(F*232&-1)+224>>2]|0;if((A|0)<1){c[3562]=0;uf(-1,133128,(v=i,i=i+8|0,c[v>>2]=A,v)|0)}F=A<<3;E=db(c[3562]|0,F,215008)|0;c[3562]=E;if((E|0)==0){uf(-1,133128,(v=i,i=i+8|0,c[v>>2]=A,v)|0)}E=db(c[3560]|0,F,215008)|0;F=E;c[3560]=F;if((E|0)==0){uf(-1,133128,(v=i,i=i+8|0,c[v>>2]=A,v)|0)}if((A|0)>0){E=0;do{h[F+(E<<3)>>3]=+g[J+(E<<2)>>2];E=E+1|0;}while((E|0)<(A|0))}ez();K=1;L=C;M=A;N=0;O=0;Q=0;R=0}else{I=9981}}while(0);if((I|0)==9981){t=ey(x,2,0)|0;if((t|0)<0){uf(-1,120240,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((t|0)>2){uf(c[13898]|0,104256,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}u=c[8270]|0;do{if((u|0)!=0){if((aY(u|0,139696)|0)==0){break}bA(4,u|0)}}while(0);if((a[66164]&1)!=0){uf(-1,91264,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((a[65476]&1)!=0){uf(-1,91264,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((c[16546]|0)==1|(c[16374]|0)==1){uf(-1,83576,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((a[30528]&1)!=0){uf(-1,75664,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((a[32936]&1)!=0){uf(-1,223048,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}u=q|0;x=eC(u,2)|0;do{if((x|0)==-1){ez();S=2;T=0;U=0;V=0;W=0;X=0;I=10029}else{z=q+8|0;E=4096;J=0;F=0;D=0;Y=0;Z=0;_=2;$=x;L13639:while(1){ab=($|0)>(_|0)?$:_;if((Z|0)<(E|0)){ac=E}else{ad=E*3&-1;ae=(ad|0)/2&-1;if((ad|0)<2){I=10002;break}ad=ae<<3;af=db(c[3562]|0,ad,215008)|0;c[3562]=af;if((af|0)==0){I=10358;break}af=db(c[3560]|0,ad,215008)|0;c[3560]=af;if((af|0)==0){I=10356;break}else{ac=ae}}L13646:do{if(($|0)==(-5|0)|($|0)==(-2|0)){ag=Z;ah=Y;ai=D;aj=F;ak=J+1|0}else if(($|0)==(-3|0)){ag=Z;ah=Y;ai=D;aj=F+1|0;ak=J}else if(($|0)==(-4|0)){ag=Z;ah=Y;ai=D+1|0;aj=F+1|0;ak=J}else if(($|0)==0){I=10011;break L13639}else if(($|0)==1){al=+h[u>>3];af=c[16334]&3;if((af|0)==3){I=10016}else if((af|0)==1){if(+h[8170]<al){I=10017}else{I=10016}}else if((af|0)==2){if(+h[8169]>al){I=10017}else{I=10016}}else if((af|0)==0){if(+h[8170]<al|+h[8169]>al){I=10017}else{I=10016}}else{I=10017}if((I|0)==10016){I=0;h[(c[3560]|0)+(Z<<3)>>3]=al;ag=Z+1|0;ah=Y;ai=D;aj=F;ak=J;break}else if((I|0)==10017){I=0;ag=Z;ah=Y+1|0;ai=D;aj=F;ak=J;break}}else if(($|0)==2){al=+h[u>>3];af=c[16506]&3;if((af|0)==0){if(!(+h[8256]<al|+h[8255]>al)){I=10022}}else if((af|0)==3){I=10022}else if((af|0)==1){if(+h[8256]>=al){I=10022}}else if((af|0)==2){if(+h[8255]<=al){I=10022}}do{if((I|0)==10022){I=0;am=+h[z>>3];af=c[16334]&3;if((af|0)==1){if(+h[8170]<am){break}}else if((af|0)==2){if(+h[8169]>am){break}}else if((af|0)==0){if(+h[8170]<am|+h[8169]>am){break}}else if((af|0)!=3){break}h[(c[3562]|0)+(Z<<3)>>3]=al;h[(c[3560]|0)+(Z<<3)>>3]=+h[z>>3];ag=Z+1|0;ah=Y;ai=D;aj=F;ak=J;break L13646}}while(0);ag=Z;ah=Y+1|0;ai=D;aj=F;ak=J}else{ag=Z;ah=Y;ai=D;aj=F;ak=J}}while(0);af=eC(u,2)|0;if((af|0)==-1){I=10028;break}else{E=ac;J=ak;F=aj;D=ai;Y=ah;Z=ag;_=ab;$=af}}if((I|0)==10356){ez();uf(-1,133128,(v=i,i=i+8|0,c[v>>2]=ae,v)|0)}else if((I|0)==10358){ez();uf(-1,133128,(v=i,i=i+8|0,c[v>>2]=ae,v)|0)}else if((I|0)==10011){$=c[11932]|0;uf(-1,216224,(v=i,i=i+16|0,c[v>>2]=c[11900],c[v+8>>2]=($|0)!=0?$:179864,v)|0)}else if((I|0)==10002){c[3562]=0;ez();uf(-1,133128,(v=i,i=i+8|0,c[v>>2]=ae,v)|0)}else if((I|0)==10028){ez();if((ag|0)<1){S=ab;T=ag;U=ah;V=ai;W=aj;X=ak;I=10029;break}$=ag<<3;c[3562]=db(c[3562]|0,$,215008)|0;an=db(c[3560]|0,$,215008)|0;ao=ab;ap=ag;aq=ah;ar=ai;as=aj;at=ak;break}}}while(0);if((I|0)==10029){c[3562]=0;an=0;ao=S;ap=T;aq=U;ar=V;as=W;at=X}c[3560]=an;K=(t|0)==0?ao:t;L=0;M=ap;N=aq;O=ar;Q=as;R=at}u=c[8270]|0;do{if((u|0)!=0){if((aY(u|0,139696)|0)==0){break}bA(4,139696)}}while(0);if((M|0)==0){if((N|0)>0){uf(-1,204632,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{uf(-1,201008,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}u=o|0;t=o+8|0;x=1;L13694:while(1){L13696:while(1){au=c[13898]|0;if((au|0)>=(c[8272]|0)){I=10098;break L13694}$=c[1054]|0;_=(a[$+(au*40&-1)|0]&1)==0;if(_){I=10351;break L13694}Z=c[$+(au*40&-1)+36>>2]|0;Y=$+(au*40&-1)+32|0;$=c[10036]|0;D=0;while(1){if((D|0)>=(Z|0)){I=10045;break}if((a[$+((c[Y>>2]|0)+D|0)|0]|0)==(a[D+103664|0]|0)){D=D+1|0}else{break}}if((I|0)==10045){I=0;if((D|0)==1){I=10098;break L13694}}$=c[Y>>2]|0;if(_){I=10345;break L13694}do{if((Z|0)>0){F=c[10036]|0;J=0;E=0;z=$;while(1){if((a[J+184704|0]|0)==(a[F+(J+z|0)|0]|0)){av=z;aw=E}else{if((J|0)!=3){break}av=z-1|0;aw=1}A=J+1|0;if((A|0)<(aw+Z|0)){J=A;E=aw;z=av}else{I=10053;break}}if((I|0)==10053){I=0;if((aw|0)!=0){ax=1;break L13696}if((J|0)==6|(J|0)==2){ax=1;break L13696}}if(_){I=10346;break L13694}if((Z|0)<=0){I=10076;break}z=c[10036]|0;E=0;F=0;A=$;while(1){if((a[E+179552|0]|0)==(a[z+(E+A|0)|0]|0)){ay=A;az=F}else{if((E|0)!=5){break}ay=A-1|0;az=1}C=E+1|0;if((C|0)<(az+Z|0)){E=C;F=az;A=ay}else{I=10064;break}}if((I|0)==10064){I=0;if((az|0)!=0){ax=0;break L13696}if((E|0)==8|(E|0)==4){ax=0;break L13696}}if(_){I=10350;break L13694}if((Z|0)<=0){I=10076;break}A=c[10036]|0;F=0;z=0;J=$;while(1){if((a[F+175408|0]|0)==(a[A+(F+J|0)|0]|0)){aA=J;aB=z}else{if((F|0)!=3){break}aA=J-1|0;aB=1}C=F+1|0;if((C|0)<(aB+Z|0)){F=C;z=aB;J=aA}else{I=10073;break}}if((I|0)==10073){I=0;if((aB|0)!=0){break}if((F|0)==2|(F|0)==6){break}}if(_){I=10348;break L13694}else{I=10076}}else{I=10076}}while(0);if((I|0)==10076){I=0;_=c[10036]|0;Y=0;while(1){if((Y|0)>=(Z|0)){break}if((a[_+($+Y|0)|0]|0)==(a[Y+218432|0]|0)){Y=Y+1|0}else{I=10349;break L13694}}if((Y|0)!=4){I=10347;break L13694}}c[13898]=au+1;uu(c[3556]|0);aC=c[13898]|0;if((aC|0)>=(c[8272]|0)){break L13694}$=c[1054]|0;L13751:do{if((a[$+(aC*40&-1)|0]&1)!=0){_=c[$+(aC*40&-1)+36>>2]|0;Z=$+(aC*40&-1)+32|0;D=c[10036]|0;J=0;while(1){if((J|0)>=(_|0)){break}if((a[D+((c[Z>>2]|0)+J|0)|0]|0)==(a[J+103664|0]|0)){J=J+1|0}else{break L13751}}if((J|0)==1){break L13694}}}while(0);a[14176]=1;is(o);a[14176]=0;if((c[u>>2]|0)!=3){I=10087;break L13694}$=c[t>>2]|0;c[3556]=$;if(($|0)==0){I=10341;break L13694}Y=a[$]|0;if(Y<<24>>24==0){I=10342;break L13694}if(((Y<<24>>24)-48|0)>>>0<10){I=10343;break L13694}else{aD=$;aE=Y}do{if((bs(aE&255|0)|0)==0){if((a[aD]|0)!=95){I=10339;break L13694}}aD=aD+1|0;aE=a[aD]|0;}while(aE<<24>>24!=0);if((aY(167320,c[3556]|0)|0)==0){I=10340;break L13694}}c[13898]=au+1;x=ax}if((I|0)==10098){t=c[3556]|0;if((t|0)==0){u=bP(150920)|0;c[3556]=u;aG=u}else{aG=t}t=uA(aG|0)|0;if((a[aG+(t-1|0)|0]|0)!=95){u=db(aG,t+2|0,149064)|0;c[3556]=u;t=u+(uA(u|0)|0)|0;w=95;a[t]=w&255;w=w>>8;a[t+1|0]=w&255}t=O+1|0;u=(K|0)==1;do{if(u){lc(s,c[3560]|0,M,L);aH=0.0;aJ=0.0;aK=0.0;aL=0.0;aM=0.0;aN=0.0;aO=0}else{if((K|0)!=2){aH=0.0;aJ=0.0;aK=0.0;aL=0.0;aM=0.0;aN=0.0;aO=0;break}lc(r,c[3562]|0,M,0);lc(s,c[3560]|0,M,0);Y=c[3562]|0;$=c[3560]|0;al=+h[r+8>>3];am=+h[r+16>>3];aP=+h[r+24>>3];aQ=+h[r+32>>3];aR=+h[s+8>>3];aS=+h[s+16>>3];aT=+h[s+24>>3];Z=c[s+48>>2]|0;D=c[s+64>>2]|0;if((M|0)>0){_=0;aU=0.0;while(1){aV=aU+ +h[Y+(_<<3)>>3]*+h[$+(_<<3)>>3];F=_+1|0;if((F|0)<(M|0)){_=F;aU=aV}else{aW=aV;break}}}else{aW=0.0}aU=+(M|0);aV=(aW-aP*aT/aU)/(aQ-aP*aP/aU);aH=aW;aJ=aV;aK=aR-al*aV;aL=am*aV/aS;aM=+h[Y+(Z<<3)>>3];aN=+h[Y+(D<<3)>>3];aO=1}}while(0);_=c[3556]|0;$=c[10810]|0;if(($|0)==0){aX=_}else{F=$;do{$=c[F+4>>2]|0;do{if((a_(_|0,$|0,uA(_|0)|0)|0)==0){a[F+8|0]=1;z=F+16|0;if((c[z>>2]|0)!=3){break}uu(c[F+24>>2]|0);c[z>>2]=1}}while(0);F=c[F>>2]|0;}while((F|0)!=0);aX=c[3556]|0}aS=+(M|0);F=(aX|0)!=0?aX:179864;_=(uA(F|0)|0)+8|0;$=ut(_)|0;do{if(($|0)==0){gk();D=ut(_)|0;if((D|0)!=0){aZ=D;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{aZ=$}}while(0);be(aZ|0,172512,(v=i,i=i+24|0,c[v>>2]=F,c[v+8>>2]=83376,c[v+16>>2]=179864,v)|0);$=e6(aZ)|0;c[$+16>>2]=2;h[$+24>>3]=aS;h[$+32>>3]=0.0;a[$+8|0]=0;uu(aZ);am=+(R|0);$=(uA(F|0)|0)+8|0;_=ut($)|0;do{if((_|0)==0){gk();D=ut($)|0;if((D|0)!=0){a$=D;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{a$=_}}while(0);be(a$|0,172512,(v=i,i=i+24|0,c[v>>2]=F,c[v+8>>2]=82464,c[v+16>>2]=179864,v)|0);_=e6(a$)|0;c[_+16>>2]=2;h[_+24>>3]=am;h[_+32>>3]=0.0;a[_+8|0]=0;uu(a$);al=+(Q|0);_=(uA(F|0)|0)+6|0;$=ut(_)|0;do{if(($|0)==0){gk();D=ut(_)|0;if((D|0)!=0){a0=D;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{a0=$}}while(0);be(a0|0,172512,(v=i,i=i+24|0,c[v>>2]=F,c[v+8>>2]=224608,c[v+16>>2]=179864,v)|0);$=e6(a0)|0;c[$+16>>2]=2;h[$+24>>3]=al;h[$+32>>3]=0.0;a[$+8|0]=0;uu(a0);am=+(t|0);$=(uA(F|0)|0)+7|0;_=ut($)|0;do{if((_|0)==0){gk();D=ut($)|0;if((D|0)!=0){a1=D;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{a1=_}}while(0);be(a1|0,172512,(v=i,i=i+24|0,c[v>>2]=F,c[v+8>>2]=79624,c[v+16>>2]=179864,v)|0);_=e6(a1)|0;c[_+16>>2]=2;h[_+24>>3]=am;h[_+32>>3]=0.0;a[_+8|0]=0;uu(a1);al=+(N|0);_=(uA(F|0)|0)+11|0;$=ut(_)|0;do{if(($|0)==0){gk();D=ut(_)|0;if((D|0)!=0){a2=D;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{a2=$}}while(0);be(a2|0,172512,(v=i,i=i+24|0,c[v>>2]=F,c[v+8>>2]=78880,c[v+16>>2]=179864,v)|0);$=e6(a2)|0;c[$+16>>2]=2;h[$+24>>3]=al;h[$+32>>3]=0.0;a[$+8|0]=0;uu(a2);if(u){ld(s,c[3556]|0,179864)}if(aO){ld(r,c[3556]|0,144920);ld(s,c[3556]|0,143296);$=c[3556]|0;_=($|0)!=0?$:179864;$=(uA(_|0)|0)+6|0;D=ut($)|0;do{if((D|0)==0){gk();Y=ut($)|0;if((Y|0)!=0){a3=Y;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{a3=D}}while(0);be(a3|0,172512,(v=i,i=i+24|0,c[v>>2]=_,c[v+8>>2]=140096,c[v+16>>2]=179864,v)|0);D=e6(a3)|0;c[D+16>>2]=2;h[D+24>>3]=aJ;h[D+32>>3]=0.0;a[D+8|0]=0;uu(a3);D=(uA(_|0)|0)+10|0;$=ut(D)|0;do{if(($|0)==0){gk();F=ut(D)|0;if((F|0)!=0){a4=F;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{a4=$}}while(0);be(a4|0,172512,(v=i,i=i+24|0,c[v>>2]=_,c[v+8>>2]=138e3,c[v+16>>2]=179864,v)|0);$=e6(a4)|0;c[$+16>>2]=2;h[$+24>>3]=aK;h[$+32>>3]=0.0;a[$+8|0]=0;uu(a4);$=(uA(_|0)|0)+12|0;D=ut($)|0;do{if((D|0)==0){gk();F=ut($)|0;if((F|0)!=0){a5=F;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{a5=D}}while(0);be(a5|0,172512,(v=i,i=i+24|0,c[v>>2]=_,c[v+8>>2]=136336,c[v+16>>2]=179864,v)|0);D=e6(a5)|0;c[D+16>>2]=2;h[D+24>>3]=aL;h[D+32>>3]=0.0;a[D+8|0]=0;uu(a5);D=(uA(_|0)|0)+6|0;$=ut(D)|0;do{if(($|0)==0){gk();F=ut(D)|0;if((F|0)!=0){a6=F;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{a6=$}}while(0);be(a6|0,172512,(v=i,i=i+24|0,c[v>>2]=_,c[v+8>>2]=134616,c[v+16>>2]=179864,v)|0);$=e6(a6)|0;c[$+16>>2]=2;h[$+24>>3]=aH;h[$+32>>3]=0.0;a[$+8|0]=0;uu(a6);$=(uA(_|0)|0)+10|0;D=ut($)|0;do{if((D|0)==0){gk();F=ut($)|0;if((F|0)!=0){a7=F;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{a7=D}}while(0);be(a7|0,172512,(v=i,i=i+24|0,c[v>>2]=_,c[v+8>>2]=75120,c[v+16>>2]=179864,v)|0);D=e6(a7)|0;c[D+16>>2]=2;h[D+24>>3]=aM;h[D+32>>3]=0.0;a[D+8|0]=0;uu(a7);D=(uA(_|0)|0)+10|0;$=ut(D)|0;do{if(($|0)==0){gk();F=ut(D)|0;if((F|0)!=0){a8=F;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{a8=$}}while(0);be(a8|0,172512,(v=i,i=i+24|0,c[v>>2]=_,c[v+8>>2]=74616,c[v+16>>2]=179864,v)|0);$=e6(a8)|0;c[$+16>>2]=2;h[$+24>>3]=aN;h[$+32>>3]=0.0;a[$+8|0]=0;uu(a8)}if(!x){a9=c[3562]|0;ba=a9;uu(ba);bb=c[3560]|0;bc=bb;uu(bc);c[3562]=0;c[3560]=0;bd=c[3558]|0;uu(bd);c[3558]=0;bf=c[3556]|0;uu(bf);c[3556]=0;i=b;return}$=(M|0)>0;if($){bg=~~+bQ(+aS)+1|0}else{bg=3}D=c[7262]|0;F=c[m>>2]|0;do{if((D|0)==0){c[7262]=F;bh=F;I=10158}else{if((D|0)==(c[n>>2]|0)|(D|0)==(F|0)){bh=D;I=10158;break}cf(D|0,84208,(v=i,i=i+16|0,c[v>>2]=83376,c[v+8>>2]=M,v)|0);Y=c[7262]|0;cf(Y|0,84208,(v=i,i=i+16|0,c[v>>2]=82464,c[v+8>>2]=R,v)|0);Y=c[7262]|0;cf(Y|0,84208,(v=i,i=i+16|0,c[v>>2]=80984,c[v+8>>2]=Q,v)|0);Y=c[7262]|0;cf(Y|0,84208,(v=i,i=i+16|0,c[v>>2]=79624,c[v+8>>2]=t,v)|0);Y=c[7262]|0;cf(Y|0,84208,(v=i,i=i+16|0,c[v>>2]=78880,c[v+8>>2]=N,v)|0)}}while(0);if((I|0)==10158){aF(10,bh|0);D=c[7262]|0;aI(78344,9,1,D|0);D=c[7262]|0;cf(D|0,77936,(v=i,i=i+16|0,c[v>>2]=bg,c[v+8>>2]=M,v)|0);D=c[7262]|0;cf(D|0,77320,(v=i,i=i+16|0,c[v>>2]=bg,c[v+8>>2]=N,v)|0);D=c[7262]|0;cf(D|0,76744,(v=i,i=i+16|0,c[v>>2]=bg,c[v+8>>2]=R,v)|0);D=c[7262]|0;cf(D|0,76144,(v=i,i=i+16|0,c[v>>2]=bg,c[v+8>>2]=Q,v)|0);D=c[7262]|0;cf(D|0,75560,(v=i,i=i+16|0,c[v>>2]=bg,c[v+8>>2]=t,v)|0)}if(u){uD(d|0,s|0,112);D=e|0;F=f|0;if($){bi=~~+bQ(+aS)+1|0}else{bi=1}x=c[7262]|0;_=c[m>>2]|0;do{if((x|0)==0){c[7262]=_;bj=_}else{if((x|0)==(c[n>>2]|0)|(x|0)==(_|0)){bj=x;break}lb(d,143296);a9=c[3562]|0;ba=a9;uu(ba);bb=c[3560]|0;bc=bb;uu(bc);c[3562]=0;c[3560]=0;bd=c[3558]|0;uu(bd);c[3558]=0;bf=c[3556]|0;uu(bf);c[3556]=0;i=b;return}}while(0);aF(10,bj|0);x=c[d>>2]|0;_=(x|0)>0;u=c[7262]|0;if(_){t=c[d+4>>2]|0;cf(u|0,94136,(v=i,i=i+16|0,c[v>>2]=x,c[v+8>>2]=t,v)|0)}else{aI(93512,11,1,u|0)}u=c[7262]|0;al=+h[d+8>>3];am=+P(+al);do{if(am<1.0e-14){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(D|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);cf(u|0,92672,(v=i,i=i+8|0,c[v>>2]=D,v)|0);t=c[7262]|0;al=+h[d+16>>3];am=+P(+al);do{if(am<1.0e-14){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(D|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);cf(t|0,91840,(v=i,i=i+8|0,c[v>>2]=D,v)|0);u=c[7262]|0;al=+h[d+24>>3];am=+P(+al);do{if(am<1.0e-14){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(D|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);cf(u|0,91184,(v=i,i=i+8|0,c[v>>2]=D,v)|0);t=c[7262]|0;al=+h[d+32>>3];am=+P(+al);do{if(am<1.0e-14){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(D|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);cf(t|0,90616,(v=i,i=i+8|0,c[v>>2]=D,v)|0);u=c[7262]|0;aF(10,u|0);u=c[7262]|0;al=+h[d+40>>3];am=+P(+al);do{if(am<1.0e-14){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(D|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);t=c[d+48>>2]|0;if(_){Y=(t|0)/(x|0)&-1;Z=(t|0)%(x|0)&-1;cf(u|0,90112,(v=i,i=i+32|0,c[v>>2]=D,c[v+8>>2]=bi,c[v+16>>2]=Y,c[v+24>>2]=Z,v)|0);Z=c[7262]|0;al=+h[d+56>>3];am=+P(+al);do{if(am<1.0e-14){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(D|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);_=c[d+64>>2]|0;Y=(_|0)/(x|0)&-1;z=(_|0)%(x|0)&-1;cf(Z|0,89384,(v=i,i=i+32|0,c[v>>2]=D,c[v+8>>2]=bi,c[v+16>>2]=Y,c[v+24>>2]=z,v)|0);z=c[7262]|0;al=+h[d+96>>3];am=+P(+al);do{if(am<1.0e-14){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(D|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);al=+h[d+104>>3];am=+P(+al);do{if(am<1.0e-14){be(F|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(F|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(F|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);cf(z|0,88904,(v=i,i=i+16|0,c[v>>2]=D,c[v+8>>2]=F,v)|0);a9=c[3562]|0;ba=a9;uu(ba);bb=c[3560]|0;bc=bb;uu(bc);c[3562]=0;c[3560]=0;bd=c[3558]|0;uu(bd);c[3558]=0;bf=c[3556]|0;uu(bf);c[3556]=0;i=b;return}cf(u|0,88336,(v=i,i=i+24|0,c[v>>2]=D,c[v+8>>2]=bi,c[v+16>>2]=t,v)|0);Z=c[7262]|0;al=+h[d+56>>3];am=+P(+al);do{if(am<1.0e-14){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(D|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);t=c[d+64>>2]|0;cf(Z|0,87048,(v=i,i=i+24|0,c[v>>2]=D,c[v+8>>2]=bi,c[v+16>>2]=t,v)|0);t=c[7262]|0;al=+h[d+80>>3];am=+P(+al);do{if(am<1.0e-14){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(D|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);cf(t|0,86e3,(v=i,i=i+8|0,c[v>>2]=D,v)|0);Z=c[7262]|0;al=+h[d+72>>3];am=+P(+al);do{if(am<1.0e-14){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(D|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);cf(Z|0,84768,(v=i,i=i+8|0,c[v>>2]=D,v)|0);t=c[7262]|0;al=+h[d+88>>3];am=+P(+al);do{if(am<1.0e-14){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(D|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(D|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);cf(t|0,86e3,(v=i,i=i+8|0,c[v>>2]=D,v)|0);Z=c[7262]|0;aF(10,Z|0);a9=c[3562]|0;ba=a9;uu(ba);bb=c[3560]|0;bc=bb;uu(bc);c[3562]=0;c[3560]=0;bd=c[3558]|0;uu(bd);c[3558]=0;bf=c[3556]|0;uu(bf);c[3556]=0;i=b;return}uD(l|0,r|0,112);uD(k|0,s|0,112);Z=e|0;u=f|0;F=j|0;if($){bk=~~+bQ(+aS)+1|0}else{bk=1}z=c[7262]|0;if(!((z|0)==(c[n>>2]|0)|(z|0)==(c[m>>2]|0))){lb(l,144920);lb(k,143296);z=c[7262]|0;cf(z|0,141768,(v=i,i=i+16|0,c[v>>2]=140096,h[v+8>>3]=aJ,v)|0);z=c[7262]|0;cf(z|0,141768,(v=i,i=i+16|0,c[v>>2]=138e3,h[v+8>>3]=aK,v)|0);z=c[7262]|0;cf(z|0,141768,(v=i,i=i+16|0,c[v>>2]=136336,h[v+8>>3]=aL,v)|0);z=c[7262]|0;cf(z|0,141768,(v=i,i=i+16|0,c[v>>2]=134616,h[v+8>>3]=aH,v)|0);a9=c[3562]|0;ba=a9;uu(ba);bb=c[3560]|0;bc=bb;uu(bc);c[3562]=0;c[3560]=0;bd=c[3558]|0;uu(bd);c[3558]=0;bf=c[3556]|0;uu(bf);c[3556]=0;i=b;return}z=bk+4|0;uF(F|0,132920,z|0);a[j+z|0]=0;z=c[7262]|0;if((z|0)==0){x=c[m>>2]|0;c[7262]=x;bl=x}else{bl=z}aF(10,bl|0);z=c[7262]|0;aI(130456,11,1,z|0);z=c[7262]|0;al=+h[l+8>>3];am=+P(+al);do{if(am<1.0e-14){be(Z|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(Z|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(Z|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);al=+h[k+8>>3];am=+P(+al);do{if(am<1.0e-14){be(u|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(u|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(u|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);cf(z|0,129328,(v=i,i=i+24|0,c[v>>2]=Z,c[v+8>>2]=F,c[v+16>>2]=u,v)|0);$=c[7262]|0;al=+h[l+16>>3];am=+P(+al);do{if(am<1.0e-14){be(Z|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(Z|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(Z|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);al=+h[k+16>>3];am=+P(+al);do{if(am<1.0e-14){be(u|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(u|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(u|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);cf($|0,128056,(v=i,i=i+24|0,c[v>>2]=Z,c[v+8>>2]=F,c[v+16>>2]=u,v)|0);z=c[7262]|0;al=+h[l+24>>3];am=+P(+al);do{if(am<1.0e-14){be(Z|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(Z|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(Z|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);al=+h[k+24>>3];am=+P(+al);do{if(am<1.0e-14){be(u|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(u|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(u|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);cf(z|0,126736,(v=i,i=i+24|0,c[v>>2]=Z,c[v+8>>2]=F,c[v+16>>2]=u,v)|0);$=c[7262]|0;al=+h[l+32>>3];am=+P(+al);do{if(am<1.0e-14){be(Z|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(Z|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(Z|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);al=+h[k+32>>3];am=+P(+al);do{if(am<1.0e-14){be(u|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(u|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(u|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);cf($|0,125656,(v=i,i=i+24|0,c[v>>2]=Z,c[v+8>>2]=F,c[v+16>>2]=u,v)|0);z=c[7262]|0;aF(10,z|0);z=c[7262]|0;al=+h[l+40>>3];am=+P(+al);do{if(am<1.0e-14){be(Z|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(Z|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(Z|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);$=c[l+48>>2]|0;al=+h[k+40>>3];am=+P(+al);do{if(am<1.0e-14){be(u|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(u|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(u|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);D=c[k+48>>2]|0;cf(z|0,124424,(v=i,i=i+48|0,c[v>>2]=Z,c[v+8>>2]=bk,c[v+16>>2]=$,c[v+24>>2]=u,c[v+32>>2]=bk,c[v+40>>2]=D,v)|0);D=c[7262]|0;al=+h[l+56>>3];am=+P(+al);do{if(am<1.0e-14){be(Z|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(Z|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(Z|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);$=c[l+64>>2]|0;al=+h[k+56>>3];am=+P(+al);do{if(am<1.0e-14){be(u|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(u|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(u|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);z=c[k+64>>2]|0;cf(D|0,122968,(v=i,i=i+48|0,c[v>>2]=Z,c[v+8>>2]=bk,c[v+16>>2]=$,c[v+24>>2]=u,c[v+32>>2]=bk,c[v+40>>2]=z,v)|0);z=c[7262]|0;al=+h[l+80>>3];am=+P(+al);do{if(am<1.0e-14){be(Z|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(Z|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(Z|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);al=+h[k+80>>3];am=+P(+al);do{if(am<1.0e-14){be(u|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(u|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(u|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);cf(z|0,121824,(v=i,i=i+24|0,c[v>>2]=Z,c[v+8>>2]=F,c[v+16>>2]=u,v)|0);$=c[7262]|0;al=+h[l+72>>3];am=+P(+al);do{if(am<1.0e-14){be(Z|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(Z|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(Z|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);al=+h[k+72>>3];am=+P(+al);do{if(am<1.0e-14){be(u|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(u|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(u|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);cf($|0,119880,(v=i,i=i+24|0,c[v>>2]=Z,c[v+8>>2]=F,c[v+16>>2]=u,v)|0);z=c[7262]|0;al=+h[l+88>>3];am=+P(+al);do{if(am<1.0e-14){be(Z|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(Z|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(Z|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);al=+h[k+88>>3];am=+P(+al);do{if(am<1.0e-14){be(u|0,109728,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else{if(+P(+(+bQ(+am)))<6.0){be(u|0,109728,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}else{be(u|0,107744,(v=i,i=i+8|0,h[v>>3]=al,v)|0);break}}}while(0);cf(z|0,121824,(v=i,i=i+24|0,c[v>>2]=Z,c[v+8>>2]=F,c[v+16>>2]=u,v)|0);$=c[7262]|0;aF(10,$|0);$=c[7262]|0;if(aK<0.0){al=-0.0-aK;cf($|0,116720,(v=i,i=i+16|0,h[v>>3]=aJ,h[v+8>>3]=al,v)|0)}else{cf($|0,115856,(v=i,i=i+16|0,h[v>>3]=aJ,h[v+8>>3]=aK,v)|0)}$=c[7262]|0;cf($|0,114952,(v=i,i=i+8|0,h[v>>3]=aL,v)|0);$=c[7262]|0;cf($|0,113880,(v=i,i=i+8|0,h[v>>3]=aH,v)|0);$=c[7262]|0;aF(10,$|0);a9=c[3562]|0;ba=a9;uu(ba);bb=c[3560]|0;bc=bb;uu(bc);c[3562]=0;c[3560]=0;bd=c[3558]|0;uu(bd);c[3558]=0;bf=c[3556]|0;uu(bf);c[3556]=0;i=b;return}else if((I|0)==10339){bm=c[13898]|0;bn=bm-1|0;c[13898]=bn;uf(bn,162880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((I|0)==10340){bm=c[13898]|0;bn=bm-1|0;c[13898]=bn;uf(bn,162880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((I|0)==10341){bm=c[13898]|0;bn=bm-1|0;c[13898]=bn;uf(bn,162880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((I|0)==10342){bm=c[13898]|0;bn=bm-1|0;c[13898]=bn;uf(bn,162880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((I|0)==10343){bm=c[13898]|0;bn=bm-1|0;c[13898]=bn;uf(bn,162880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((I|0)==10345){uf(au,154024,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((I|0)==10346){uf(au,154024,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((I|0)==10347){uf(au,154024,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((I|0)==10348){uf(au,154024,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((I|0)==10349){uf(au,154024,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((I|0)==10350){uf(au,154024,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((I|0)==10351){uf(au,154024,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((I|0)==10087){c[13898]=aC}c[3556]=0;bm=c[13898]|0;bn=bm-1|0;c[13898]=bn;uf(bn,162880,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);c[3558]=0;B=y;uf(B,205112,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}function la(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0;c=+h[a>>3];d=+h[b>>3];if(c<d){e=-1;return e|0}e=c>d&1;return e|0}function lb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0,j=0,k=0,l=0,m=0;d=i;e=a;a=i;i=i+112|0;uD(a,e,112);f=+h[a+8>>3];cf(c[7262]|0,106776,(v=i,i=i+24|0,c[v>>2]=105792,c[v+8>>2]=b,h[v+16>>3]=f,v)|0);f=+h[a+16>>3];cf(c[7262]|0,106776,(v=i,i=i+24|0,c[v>>2]=104736,c[v+8>>2]=b,h[v+16>>3]=f,v)|0);f=+h[a+24>>3];cf(c[7262]|0,106776,(v=i,i=i+24|0,c[v>>2]=104152,c[v+8>>2]=b,h[v+16>>3]=f,v)|0);f=+h[a+32>>3];cf(c[7262]|0,106776,(v=i,i=i+24|0,c[v>>2]=103792,c[v+8>>2]=b,h[v+16>>3]=f,v)|0);f=+h[a+40>>3];cf(c[7262]|0,106776,(v=i,i=i+24|0,c[v>>2]=103256,c[v+8>>2]=b,h[v+16>>3]=f,v)|0);e=c[a>>2]|0;if((e|0)==0){g=c[7262]|0;f=+h[a+80>>3];cf(g|0,106776,(v=i,i=i+24|0,c[v>>2]=101216,c[v+8>>2]=b,h[v+16>>3]=f,v)|0);g=c[7262]|0;f=+h[a+72>>3];cf(g|0,106776,(v=i,i=i+24|0,c[v>>2]=100616,c[v+8>>2]=b,h[v+16>>3]=f,v)|0);g=c[7262]|0;f=+h[a+88>>3];cf(g|0,106776,(v=i,i=i+24|0,c[v>>2]=99968,c[v+8>>2]=b,h[v+16>>3]=f,v)|0)}f=+h[a+56>>3];cf(c[7262]|0,106776,(v=i,i=i+24|0,c[v>>2]=99528,c[v+8>>2]=b,h[v+16>>3]=f,v)|0);g=c[7262]|0;j=c[a+48>>2]|0;if((e|0)>0){k=(j|0)/(e|0)&-1;cf(g|0,99104,(v=i,i=i+24|0,c[v>>2]=98432,c[v+8>>2]=b,c[v+16>>2]=k,v)|0);k=c[7262]|0;l=(j|0)%(e|0)&-1;cf(k|0,99104,(v=i,i=i+24|0,c[v>>2]=97816,c[v+8>>2]=b,c[v+16>>2]=l,v)|0);l=c[7262]|0;k=c[a+64>>2]|0;m=(k|0)/(e|0)&-1;cf(l|0,99104,(v=i,i=i+24|0,c[v>>2]=97216,c[v+8>>2]=b,c[v+16>>2]=m,v)|0);m=c[7262]|0;l=(k|0)%(e|0)&-1;cf(m|0,99104,(v=i,i=i+24|0,c[v>>2]=96656,c[v+8>>2]=b,c[v+16>>2]=l,v)|0);l=c[7262]|0;f=+h[a+96>>3];cf(l|0,106776,(v=i,i=i+24|0,c[v>>2]=96240,c[v+8>>2]=b,h[v+16>>3]=f,v)|0);l=c[7262]|0;f=+h[a+104>>3];cf(l|0,106776,(v=i,i=i+24|0,c[v>>2]=95776,c[v+8>>2]=b,h[v+16>>3]=f,v)|0);i=d;return}else{cf(g|0,99104,(v=i,i=i+24|0,c[v>>2]=95288,c[v+8>>2]=b,c[v+16>>2]=j,v)|0);j=c[7262]|0;g=c[a+64>>2]|0;cf(j|0,99104,(v=i,i=i+24|0,c[v>>2]=94824,c[v+8>>2]=b,c[v+16>>2]=g,v)|0);i=d;return}}function lc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0;f=i;i=i+32|0;g=f|0;j=d<<4;k=ut(j)|0;do{if((k|0)==0){gk();l=ut(j)|0;if((l|0)!=0){m=l;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=223576,v)|0)}else{m=k}}while(0);k=m;j=(e|0)>0;if(j){n=e;o=(d|0)/(e|0)&-1}else{n=0;o=d}e=(d|0)>0;if(e){l=0;p=0.0;q=0.0;r=0.0;s=0.0;while(1){t=+h[b+(l<<3)>>3];u=p+t;w=q+t*t;if(j){x=s+t*+((l|0)/(n|0)&-1|0);y=r+t*+((l|0)%(n|0)&-1|0)}else{x=s;y=r}z=l+1|0;if((z|0)<(d|0)){l=z;p=u;q=w;r=y;s=x}else{A=u;B=w;C=y;D=x;break}}}else{A=0.0;B=0.0;C=0.0;D=0.0}x=+(d|0);y=A/x;s=+Q(+(B/x-y*y));if(e){e=0;do{h[k+(e<<4)>>3]=+h[b+(e<<3)>>3];c[k+(e<<4)+8>>2]=e;e=e+1|0;}while((e|0)<(d|0))}bM(m|0,d|0,16,4);e=g;c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];b=d-1|0;l=k+(b<<4)|0;j=g+16|0;c[j>>2]=c[l>>2];c[j+4>>2]=c[l+4>>2];c[j+8>>2]=c[l+8>>2];c[j+12>>2]=c[l+12>>2];if((d&1|0)==0){l=(d|0)/2&-1;E=(+h[k+(l-1<<4)>>3]+ +h[k+(l<<4)>>3])*.5}else{E=+h[k+(((b|0)/2&-1)<<4)>>3]}if((d&3|0)==0){b=(d|0)/4&-1;l=d-b|0;F=(+h[k+(l<<4)>>3]+ +h[k+(l-1<<4)>>3])*.5;G=(+h[k+(b-1<<4)>>3]+ +h[k+(b<<4)>>3])*.5}else{b=(d+3|0)/4&-1;F=+h[k+(d-b<<4)>>3];G=+h[k+(b-1<<4)>>3]}if(C==0.0&D==0.0){H=0.0;I=0.0}else{H=D/A;I=C/A}uu(m);c[a>>2]=n;c[a+4>>2]=o;h[a+8>>3]=y;h[a+16>>3]=s;h[a+24>>3]=A;h[a+32>>3]=B;o=a+40|0;c[o>>2]=c[e>>2];c[o+4>>2]=c[e+4>>2];c[o+8>>2]=c[e+8>>2];c[o+12>>2]=c[e+12>>2];c[o+16>>2]=c[e+16>>2];c[o+20>>2]=c[e+20>>2];c[o+24>>2]=c[e+24>>2];c[o+28>>2]=c[e+28>>2];h[a+72>>3]=E;h[a+80>>3]=G;h[a+88>>3]=F;h[a+96>>3]=I;h[a+104>>3]=H;i=f;return}function ld(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0;f=i;g=b;b=i;i=i+112|0;uD(b,g,112);j=+h[b+8>>3];g=(d|0)!=0?d:179864;d=(e|0)!=0?e:179864;e=uA(g|0)|0;k=(e+5|0)+(uA(d|0)|0)|0;e=ut(k)|0;do{if((e|0)==0){gk();l=ut(k)|0;if((l|0)!=0){m=l;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{m=e}}while(0);be(m|0,172512,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=105792,c[v+16>>2]=d,v)|0);e=e6(m)|0;c[e+16>>2]=2;h[e+24>>3]=j;h[e+32>>3]=0.0;a[e+8|0]=0;uu(m);j=+h[b+16>>3];m=uA(g|0)|0;e=(m+7|0)+(uA(d|0)|0)|0;m=ut(e)|0;do{if((m|0)==0){gk();k=ut(e)|0;if((k|0)!=0){n=k;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{n=m}}while(0);be(n|0,172512,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=104736,c[v+16>>2]=d,v)|0);m=e6(n)|0;c[m+16>>2]=2;h[m+24>>3]=j;h[m+32>>3]=0.0;a[m+8|0]=0;uu(n);j=+h[b+24>>3];n=uA(g|0)|0;m=(n+4|0)+(uA(d|0)|0)|0;n=ut(m)|0;do{if((n|0)==0){gk();e=ut(m)|0;if((e|0)!=0){o=e;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{o=n}}while(0);be(o|0,172512,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=104152,c[v+16>>2]=d,v)|0);n=e6(o)|0;c[n+16>>2]=2;h[n+24>>3]=j;h[n+32>>3]=0.0;a[n+8|0]=0;uu(o);j=+h[b+32>>3];o=uA(g|0)|0;n=(o+6|0)+(uA(d|0)|0)|0;o=ut(n)|0;do{if((o|0)==0){gk();m=ut(n)|0;if((m|0)!=0){p=m;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{p=o}}while(0);be(p|0,172512,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=73440,c[v+16>>2]=d,v)|0);o=e6(p)|0;c[o+16>>2]=2;h[o+24>>3]=j;h[o+32>>3]=0.0;a[o+8|0]=0;uu(p);j=+h[b+40>>3];p=uA(g|0)|0;o=(p+4|0)+(uA(d|0)|0)|0;p=ut(o)|0;do{if((p|0)==0){gk();n=ut(o)|0;if((n|0)!=0){q=n;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{q=p}}while(0);be(q|0,172512,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=103256,c[v+16>>2]=d,v)|0);p=e6(q)|0;c[p+16>>2]=2;h[p+24>>3]=j;h[p+32>>3]=0.0;a[p+8|0]=0;uu(q);j=+h[b+56>>3];q=uA(g|0)|0;p=(q+4|0)+(uA(d|0)|0)|0;q=ut(p)|0;do{if((q|0)==0){gk();o=ut(p)|0;if((o|0)!=0){r=o;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{r=q}}while(0);be(r|0,172512,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=99528,c[v+16>>2]=d,v)|0);q=e6(r)|0;c[q+16>>2]=2;h[q+24>>3]=j;h[q+32>>3]=0.0;a[q+8|0]=0;uu(r);r=c[b>>2]|0;if((r|0)>0){q=c[b+48>>2]|0;j=+((q|0)/(r|0)&-1|0);p=uA(g|0)|0;o=(p+12|0)+(uA(d|0)|0)|0;p=ut(o)|0;do{if((p|0)==0){gk();n=ut(o)|0;if((n|0)!=0){s=n;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{s=p}}while(0);be(s|0,172512,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=98432,c[v+16>>2]=d,v)|0);p=e6(s)|0;c[p+16>>2]=2;h[p+24>>3]=j;h[p+32>>3]=0.0;a[p+8|0]=0;uu(s);j=+((q|0)%(r|0)&-1|0);q=uA(g|0)|0;s=(q+12|0)+(uA(d|0)|0)|0;q=ut(s)|0;do{if((q|0)==0){gk();p=ut(s)|0;if((p|0)!=0){t=p;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{t=q}}while(0);be(t|0,172512,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=97816,c[v+16>>2]=d,v)|0);q=e6(t)|0;c[q+16>>2]=2;h[q+24>>3]=j;h[q+32>>3]=0.0;a[q+8|0]=0;uu(t);t=c[b+64>>2]|0;j=+((t|0)/(r|0)&-1|0);q=uA(g|0)|0;s=(q+12|0)+(uA(d|0)|0)|0;q=ut(s)|0;do{if((q|0)==0){gk();p=ut(s)|0;if((p|0)!=0){u=p;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{u=q}}while(0);be(u|0,172512,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=97216,c[v+16>>2]=d,v)|0);q=e6(u)|0;c[q+16>>2]=2;h[q+24>>3]=j;h[q+32>>3]=0.0;a[q+8|0]=0;uu(u);j=+((t|0)%(r|0)&-1|0);r=uA(g|0)|0;t=(r+12|0)+(uA(d|0)|0)|0;r=ut(t)|0;do{if((r|0)==0){gk();u=ut(t)|0;if((u|0)!=0){w=u;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{w=r}}while(0);be(w|0,172512,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=96656,c[v+16>>2]=d,v)|0);r=e6(w)|0;c[r+16>>2]=2;h[r+24>>3]=j;h[r+32>>3]=0.0;a[r+8|0]=0;uu(w);i=f;return}j=+h[b+72>>3];w=uA(g|0)|0;r=(w+7|0)+(uA(d|0)|0)|0;w=ut(r)|0;do{if((w|0)==0){gk();t=ut(r)|0;if((t|0)!=0){x=t;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{x=w}}while(0);be(x|0,172512,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=100616,c[v+16>>2]=d,v)|0);w=e6(x)|0;c[w+16>>2]=2;h[w+24>>3]=j;h[w+32>>3]=0.0;a[w+8|0]=0;uu(x);j=+h[b+80>>3];x=uA(g|0)|0;w=(x+12|0)+(uA(d|0)|0)|0;x=ut(w)|0;do{if((x|0)==0){gk();r=ut(w)|0;if((r|0)!=0){y=r;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{y=x}}while(0);be(y|0,172512,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=101216,c[v+16>>2]=d,v)|0);x=e6(y)|0;c[x+16>>2]=2;h[x+24>>3]=j;h[x+32>>3]=0.0;a[x+8|0]=0;uu(y);j=+h[b+88>>3];y=uA(g|0)|0;x=(y+12|0)+(uA(d|0)|0)|0;y=ut(x)|0;do{if((y|0)==0){gk();w=ut(x)|0;if((w|0)!=0){z=w;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{z=y}}while(0);be(z|0,172512,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=99968,c[v+16>>2]=d,v)|0);y=e6(z)|0;c[y+16>>2]=2;h[y+24>>3]=j;h[y+32>>3]=0.0;a[y+8|0]=0;uu(z);j=+(c[b+48>>2]|0);z=uA(g|0)|0;y=(z+10|0)+(uA(d|0)|0)|0;z=ut(y)|0;do{if((z|0)==0){gk();x=ut(y)|0;if((x|0)!=0){A=x;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{A=z}}while(0);be(A|0,172512,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=72824,c[v+16>>2]=d,v)|0);z=e6(A)|0;c[z+16>>2]=2;h[z+24>>3]=j;h[z+32>>3]=0.0;a[z+8|0]=0;uu(A);j=+(c[b+64>>2]|0);b=uA(g|0)|0;A=(b+10|0)+(uA(d|0)|0)|0;b=ut(A)|0;do{if((b|0)==0){gk();z=ut(A)|0;if((z|0)!=0){B=z;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74192,v)|0)}else{B=b}}while(0);be(B|0,172512,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=225064,c[v+16>>2]=d,v)|0);d=e6(B)|0;c[d+16>>2]=2;h[d+24>>3]=j;h[d+32>>3]=0.0;a[d+8|0]=0;uu(B);i=f;return}function le(b,d,e){b=+b;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0.0;f=i;i=i+48|0;g=f|0;do{if((c[64808+(d*688&-1)>>2]|0)==1){j=64864+(d*688&-1)|0;if((aY(j|0,132824)|0)==0){ud(e,150,74984,1.0,b);break}a[e]=34;k=e+1|0;t3(g,b);l=b- +O(+b);t4(k,149,j,g,l);j=a8(e|0,10)|0;if((j|0)!=0){k=j;do{a[k]=32;k=a8(e|0,10)|0;}while((k|0)!=0)}k=e+(uA(e|0)|0)|0;w=34;a[k]=w&255;w=w>>8;a[k+1|0]=w&255}else{if((a[64788+(d*688&-1)|0]&1)==0){ud(e,150,64864+(d*688&-1)|0,1.0,b);break}else{ud(e,150,64864+(d*688&-1)|0,1.0,+R(+(+h[64792+(d*688&-1)>>3]),+b));break}}}while(0);aK(e|0,c[8248]|0);aF(32,c[8248]|0);i=f;return}function lf(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0,I=0,J=0;e=i;f=ut(150)|0;do{if((f|0)==0){gk();g=ut(150)|0;if((g|0)!=0){j=g;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=126456,v)|0)}else{j=f}}while(0);f=c[3526]|0;g=(f|0)!=0?f:c[10030]|0;c[8248]=g;if((d|0)>0){k=0;l=b;n=g}else{o=g;p=aD(o|0)|0;uu(j);i=e;return}L14252:while(1){g=l+300|0;b=c[g>>2]|0;cf(n|0,203280,(v=i,i=i+24|0,c[v>>2]=k,c[v+8>>2]=d,c[v+16>>2]=b,v)|0);b=c[l+16>>2]|0;do{if((b|0)!=0){if((a[b]|0)==0){break}f=uA(b|0)<<1;q=ut(f)|0;if((q|0)==0){gk();r=ut(f)|0;if((r|0)==0){s=10464;break L14252}else{t=r}}else{t=q}q=t;r=b;while(1){f=a[r]|0;if(f<<24>>24==10){u=q+1|0;a[q]=92;a[u]=110;w=u}else{a[q]=f;w=q}if((a[r]|0)==0){break}else{q=w+1|0;r=r+1|0}}cf(c[8248]|0,15e4,(v=i,i=i+8|0,c[v>>2]=t,v)|0);uu(t)}}while(0);aI(132264,6,1,c[8248]|0);b=l+12|0;r=c[b>>2]|0;do{if((r|0)==137|(r|0)==118){q=c[8248]|0;aI(96928,22,1,q|0)}else if((r|0)==252){aI(75296,29,1,c[8248]|0)}else if((r|0)==416|(r|0)==432){aI(204480,22,1,c[8248]|0)}else if((r|0)==400){aI(210472,7,1,c[8248]|0)}else if((r|0)==257){aI(82936,23,1,c[8248]|0)}else if((r|0)==153|(r|0)==86){aI(119232,11,1,c[8248]|0)}else if((r|0)==345){aI(90824,4,1,c[8248]|0)}else if((r|0)==169|(r|0)==102){aI(103984,11,1,c[8248]|0)}else if((r|0)==225){aI(215896,16,1,c[8248]|0)}else if((r|0)==368){aI(222792,6,1,c[8248]|0)}else if(!((r|0)==1|(r|0)==18|(r|0)==51|(r|0)==64|(r|0)==33|(r|0)==177|(r|0)==193|(r|0)==209)){if((a[37400]&1)==0){break}cf(c[m>>2]|0,200512,(v=i,i=i+8|0,c[v>>2]=(r|0)==392?195192:184488,v)|0)}}while(0);r=l+316|0;if((c[r>>2]|0)!=0){q=c[8248]|0;aI(179312,7,1,q|0)}aI(175152,6,1,c[8248]|0);q=c[b>>2]|0;do{if((q|0)==392){x=(c[c[l+276>>2]>>2]|0)==4?102:392;s=10499}else if((q|0)==368){f=c[c[l+224>>2]>>2]|0;if((f|0)==0){break}u=l+304|0;y=l+308|0;z=f;do{f=c[z+60>>2]|0;A=uA(f|0)<<1;B=ut(A)|0;if((B|0)==0){gk();C=ut(A)|0;if((C|0)==0){s=10491;break L14252}else{D=C}}else{D=B}B=D;C=f;while(1){f=a[C]|0;if(f<<24>>24==10){A=B+1|0;a[B]=92;a[A]=110;E=A}else{a[B]=f;E=B}if((a[C]|0)==0){break}else{B=E+1|0;C=C+1|0}}le(+h[z+24>>3],c[u>>2]|0,j);le(+h[z+32>>3],c[y>>2]|0,j);cf(c[8248]|0,171376,(v=i,i=i+8|0,c[v>>2]=D,v)|0);uu(D);z=c[z>>2]|0;}while((z|0)!=0)}else{x=q;s=10499}}while(0);do{if((s|0)==10499){s=0;q=l+320|0;if((c[g>>2]|0)<=0){break}b=l+304|0;z=l+308|0;y=l+72|0;u=l+64|0;C=l+28|0;B=c[q>>2]|0;f=0;while(1){if((uG(B|0,56440,64)|0)==0){A=c[8248]|0;aF(10,A|0)}else{A=B+8|0;le(+h[A>>3],c[b>>2]|0,j);F=B+16|0;le(+h[F>>3],c[z>>2]|0,j);if((x|0)==345){le(+h[B+40>>3],c[z>>2]|0,j)}else if((x|0)==169|(x|0)==102){s=10506}else if((x|0)==400){cf(c[8248]|0,184536,(v=i,i=i+8|0,h[v>>3]=+h[B+24>>3],v)|0)}else if((x|0)==416|(x|0)==432){cf(c[8248]|0,153776,(v=i,i=i+8|0,c[v>>2]=~~+h[B+40>>3],v)|0);cf(c[8248]|0,153776,(v=i,i=i+8|0,c[v>>2]=~~+h[B+48>>3],v)|0);cf(c[8248]|0,153776,(v=i,i=i+8|0,c[v>>2]=~~+h[B+56>>3],v)|0);cf(c[8248]|0,153776,(v=i,i=i+8|0,c[v>>2]=~~+h[B+32>>3],v)|0)}else if((x|0)==153|(x|0)==86){le(+h[B+48>>3],c[b>>2]|0,j);le(+h[B+56>>3],c[b>>2]|0,j)}else if((x|0)==137|(x|0)==118){le(+h[B+48>>3],c[b>>2]|0,j);le(+h[B+56>>3],c[b>>2]|0,j);s=10506}else if((x|0)==257){le(+h[B+32>>3],c[z>>2]|0,j);le(+h[B+40>>3],c[z>>2]|0,j);le(+h[B+24>>3],c[z>>2]|0,j)}else if((x|0)==252){le(+h[B+32>>3],c[z>>2]|0,j);le(+h[B+40>>3],c[z>>2]|0,j);le(+h[B+24>>3],c[z>>2]|0,j);le((+h[A>>3]- +h[B+48>>3])*2.0,c[b>>2]|0,j)}else if((x|0)==225){le(+h[B+56>>3]- +h[A>>3],c[b>>2]|0,j);le(+h[B+40>>3]- +h[F>>3],c[z>>2]|0,j)}if((s|0)==10506){s=0;le(+h[B+32>>3],c[z>>2]|0,j);le(+h[B+40>>3],c[z>>2]|0,j)}F=c[r>>2]|0;do{if((F|0)!=0){G=+h[F+(f<<3)>>3];A=c[u>>2]|0;if(+h[y>>3]<0.0&(A|0)==3){H=c[8248]|0;I=~~G;cf(H|0,150832,(v=i,i=i+8|0,c[v>>2]=I,v)|0);break}if((A|0)==6){le(G,3,j);break}if((c[C>>2]|0)!=-6){break}le(G,3,j)}}while(0);F=c[8248]|0;A=c[(c[q>>2]|0)+(f<<6)>>2]|0;if((A|0)==0){J=105}else{J=(A|0)==1?111:117}cf(F|0,148928,(v=i,i=i+8|0,c[v>>2]=J,v)|0)}F=f+1|0;if((F|0)<(c[g>>2]|0)){B=B+64|0;f=F}else{break}}}}while(0);aF(10,c[8248]|0);g=k+1|0;r=c[8248]|0;if((g|0)<(d|0)){k=g;l=c[l>>2]|0;n=r}else{o=r;s=10527;break}}if((s|0)==10527){p=aD(o|0)|0;uu(j);i=e;return}else if((s|0)==10464){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=134528,v)|0)}else if((s|0)==10491){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=134528,v)|0)}}function lg(){var b=0.0,d=0,e=0.0,f=0.0,i=0,j=0.0,k=0.0,l=0.0,m=0,n=0.0,o=0.0;if((a[33656]&1)==0){return}b=+h[4211];d=c[8417]|0;e=+(d|0);g[178]=b/e;f=+h[4212];i=c[8416]|0;j=+(i|0);k=f/j;g[38]=k;l=+(c[8420]|0)/e;g[184]=l;m=c[8419]|0;if((a[33673]&1)==0){n=+(m|0)/j}else{n=1.0- +(m+1|0)/j}j=n;g[44]=j;if((c[8453]|0)==0){o=j}else{n=1.0- +h[4243];g[38]=n*k;k=n*j;g[44]=k;o=k}g[184]=+h[4213]+(l-(b+-1.0)/+(d<<1|0));g[44]=+h[4214]+(o-(f+-1.0)/+(i<<1|0));return}function lh(){var b=0;if((a[14080]&1)==0){return}cM[c[(c[3524]|0)+168>>2]&511](5);do{if((a[33512]&1)==0){cS[c[(c[3524]|0)+44>>2]&511]();a[14088]=0}else{c[8415]=(c[8415]|0)+1;if((a[33656]&1)==0){break}do{if((a[33672]&1)==0){b=(c[8420]|0)+1|0;c[8420]=b;if((b|0)!=(c[8417]|0)){break}c[8420]=0;b=(c[8419]|0)+1|0;c[8419]=b;if((b|0)!=(c[8416]|0)){break}c[8420]=0}else{b=(c[8419]|0)+1|0;c[8419]=b;if((b|0)!=(c[8416]|0)){break}c[8419]=0;b=(c[8420]|0)+1|0;c[8420]=b;if((b|0)!=(c[8417]|0)){break}c[8420]=0}}while(0);lg()}}while(0);aD(c[10030]|0);hN(c[8494]|0,c[8492]|0,27760,27744,27752,27736);hM();hW();return}function li(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;d=i;e=ut(150)|0;do{if((e|0)==0){gk();f=ut(150)|0;if((f|0)!=0){g=f;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=146952,v)|0)}else{g=e}}while(0);e=c[3526]|0;f=(e|0)!=0?e:c[10030]|0;c[8248]=f;if((b|0)>0){j=0;k=43312;l=f}else{n=f;o=aD(n|0)|0;uu(g);i=d;return}L14377:while(1){f=c[k>>2]|0;cf(l|0,144784,(v=i,i=i+16|0,c[v>>2]=j,c[v+8>>2]=b,v)|0);e=c[f+16>>2]|0;do{if((e|0)!=0){if((a[e]|0)==0){break}p=uA(e|0)<<1;q=ut(p)|0;if((q|0)==0){gk();r=ut(p)|0;if((r|0)==0){s=10562;break L14377}else{t=r}}else{t=q}q=t;r=e;while(1){p=a[r]|0;if(p<<24>>24==10){u=q+1|0;a[q]=92;a[u]=110;w=u}else{a[q]=p;w=q}if((a[r]|0)==0){break}else{q=w+1|0;r=r+1|0}}cf(c[8248]|0,15e4,(v=i,i=i+8|0,c[v>>2]=t,v)|0);uu(t)}}while(0);e=f+12|0;r=c[e>>2]|0;do{if((r|0)==368){q=c[c[f+224>>2]>>2]|0;if((q|0)==0){break}else{x=q}do{q=c[x+60>>2]|0;p=uA(q|0)<<1;u=ut(p)|0;if((u|0)==0){gk();y=ut(p)|0;if((y|0)==0){s=10573;break L14377}else{z=y}}else{z=u}u=z;y=q;while(1){q=a[y]|0;if(q<<24>>24==10){p=u+1|0;a[u]=92;a[p]=110;A=p}else{a[u]=q;A=u}if((a[y]|0)==0){break}else{u=A+1|0;y=y+1|0}}le(+h[x+24>>3],2,g);le(+h[x+32>>3],1,g);le(+h[x+40>>3],0,g);cf(c[8248]|0,171376,(v=i,i=i+8|0,c[v>>2]=z,v)|0);uu(z);x=c[x>>2]|0;}while((x|0)!=0)}else if((r|0)==1|(r|0)==18|(r|0)==33|(r|0)==64|(r|0)==225|(r|0)==400){if((a[46752]&1)!=0){y=c[f+260>>2]|0;L14410:do{if((y|0)==0){s=10584}else{u=f+252|0;q=0;p=y;while(1){B=c[8248]|0;if((q|0)>=(c[u>>2]|0)){C=B;break L14410}D=p+8|0;E=c[D>>2]|0;cf(B|0,141688,(v=i,i=i+16|0,c[v>>2]=q,c[v+8>>2]=E,v)|0);if((c[e>>2]|0)==225){E=c[(c[p>>2]|0)+12>>2]|0;B=c[8248]|0;aI(139920,24,1,B|0);F=E}else{F=0}aI(175152,6,1,c[8248]|0);if((c[D>>2]|0)>0){E=c[p+12>>2]|0;B=F;G=0;while(1){H=E+8|0;le(+h[H>>3],2,g);I=E+16|0;le(+h[I>>3],1,g);J=E+24|0;le(+h[J>>3],0,g);K=c[e>>2]|0;if((K|0)==225){le(+h[B+8>>3]- +h[H>>3],2,g);le(+h[B+16>>3]- +h[I>>3],1,g);le(+h[B+24>>3]- +h[J>>3],0,g);L=B+64|0}else if((K|0)==400){cf(c[8248]|0,184536,(v=i,i=i+8|0,h[v>>3]=+h[E+32>>3],v)|0);L=B}else{L=B}K=c[E>>2]|0;if((K|0)==0){M=105}else{M=(K|0)==1?111:117}cf(c[8248]|0,137904,(v=i,i=i+8|0,c[v>>2]=M,v)|0);K=G+1|0;if((K|0)<(c[D>>2]|0)){E=E+64|0;B=L;G=K}else{break}}}G=c[p>>2]|0;if((G|0)==0){s=10584;break}else{q=q+1|0;p=G}}}}while(0);if((s|0)==10584){s=0;C=c[8248]|0}aF(10,C|0)}if((c[11690]|0)==0){break}y=c[f+256>>2]|0;if((y|0)==0){break}else{N=0;O=y}while(1){y=c[O+44>>2]|0;p=c[O+4>>2]|0;if((a[O+8|0]|0)==0){P=N}else{q=c[8248]|0;u=N+1|0;G=O+9|0;cf(q|0,136176,(v=i,i=i+16|0,c[v>>2]=N,c[v+8>>2]=G,v)|0);P=u}if((y|0)>0){u=y;y=p;while(1){p=u-1|0;le(+h[y+8>>3],2,g);le(+h[y+16>>3],1,g);le(+h[y+24>>3],0,g);aF(10,c[8248]|0);if((p|0)>0){u=p;y=y+64|0}else{break}}}aF(10,c[8248]|0);y=c[O>>2]|0;if((y|0)==0){break}else{N=P;O=y}}}else{aI(143080,53,1,c[m>>2]|0)}}while(0);e=j+1|0;r=c[8248]|0;if((e|0)<(b|0)){j=e;k=f|0;l=r}else{n=r;s=10608;break}}if((s|0)==10562){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=134528,v)|0)}else if((s|0)==10608){o=aD(n|0)|0;uu(g);i=d;return}else if((s|0)==10573){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=134528,v)|0)}}function lj(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;e=(b|0)==0;if((c[8244]|0)==(b|0)&(e^1)){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=141656,v)|0)}if((a[33512]&1)!=0){f=c[m>>2]|0;aI(139872,46,1,f|0);i=d;return}f=c[3524]|0;do{if((f|0)!=0){if((a[14080]&1)==0){break}cS[c[f+40>>2]&511]();a[14080]=0;c[10028]=0}}while(0);if(e){a[33072]=0;if((c[8244]|0)==0){i=d;return}e=c[10030]|0;do{if(a[32984]|0){a2(e|0);a[32984]=0}else{if((e|0)==(c[10028]|0)){break}az(e|0)}}while(0);c[10030]=c[n>>2];uu(c[8244]|0);c[8244]=0;e=c[10028]|0;if((e|0)!=0){az(e|0)}c[10028]=0;i=d;return}do{if((a[b]|0)==124){if(!(a[14168]|0)){uf(-1,145320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=bt(b+1|0,137896)|0;if((e|0)==0){uj(c[13898]|0,136136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{a[32984]=1;g=e;break}}else{e=c[3524]|0;do{if((e|0)==0){h=10634}else{if((c[e+96>>2]&4|0)==0){h=10634;break}j=bF(b|0,134520)|0}}while(0);if((h|0)==10634){j=bF(b|0,137896)|0}if((j|0)!=0){g=j;break}uj(c[13898]|0,132784,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);a[33072]=0;if((c[8244]|0)!=0){j=c[10030]|0;do{if(a[32984]|0){a2(j|0);a[32984]=0}else{if((j|0)==(c[10028]|0)){break}az(j|0)}}while(0);c[10030]=c[n>>2];uu(c[8244]|0);c[8244]=0;j=c[10028]|0;if((j|0)!=0){az(j|0)}c[10028]=0}c[10030]=g;c[8244]=b;b=c[3524]|0;if((b|0)==0){k=0}else{k=(c[b+96>>2]|0)>>>2&1}a[33072]=k;i=d;return}function lk(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;b=i;d=c[3524]|0;if((d|0)==0){uf(-1,131560,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=c[8244]|0;L14513:do{if((e|0)!=0){do{if((c[d+96>>2]&64|0)==0){f=e}else{if((a[37400]&1)==0){g=e}else{h=c[m>>2]|0;cf(h|0,130376,(v=i,i=i+8|0,c[v>>2]=e,v)|0);g=c[8244]|0}a[33072]=0;if((g|0)==0){break L14513}h=c[10030]|0;do{if(a[32984]|0){a2(h|0);a[32984]=0}else{if((h|0)==(c[10028]|0)){break}az(h|0)}}while(0);c[10030]=c[n>>2];uu(c[8244]|0);c[8244]=0;h=c[10028]|0;if((h|0)==0){c[10028]=0;break L14513}else{az(h|0);h=c[8244]|0;c[10028]=0;if((h|0)==0){break L14513}else{f=h;break}}}}while(0);h=(a[33072]&1)==0;if((c[(c[3524]|0)+96>>2]&4|0)==0){if(h){break}}else{if(!h){break}}h=(uA(f|0)|0)+1|0;j=ut(h)|0;do{if((j|0)==0){gk();k=ut(h)|0;if((k|0)!=0){l=k;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=129080,v)|0)}else{l=j}}while(0);j=c[8244]|0;uB(l|0,j|0);lj(l);if((l|0)==(c[8244]|0)|(l|0)==0){break}uu(l)}}while(0);if((a[14080]&1)!=0){i=b;return}cS[c[(c[3524]|0)+36>>2]&511]();a[14080]=1;i=b;return}function ll(){var b=0,d=0,e=0,f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0.0,ai=0,aj=0,ak=0,al=0,am=0.0,an=0,ao=0,ap=0,aq=0,ar=0,as=0.0,at=0,au=0,av=0.0,aw=0.0,ax=0,ay=0.0,az=0,aA=0,aB=0,aC=0.0;b=i;i=i+208|0;d=b|0;e=b+24|0;f=b+48|0;j=b+72|0;k=b+96|0;l=b+120|0;m=b+144|0;n=b+168|0;o=b+192|0;p=b+200|0;c[13898]=(c[13898]|0)+1;if((a[33512]&1)!=0){lm()}if((a[14080]&1)==0){lk()}do{if(a[14088]|0){if((a[33512]&1)==0){break}if(!(a[13032]|0)){break}q=c[(c[3524]|0)+104>>2]|0;if((q|0)!=0){cS[q&511]()}a[13032]=0}else{cS[c[(c[3524]|0)+52>>2]&511]();a[14088]=1}}while(0);cM[c[(c[3524]|0)+168>>2]&511](0);q=c[3524]|0;if((c[q+96>>2]&16|0)!=0){c[7271]=-1}c[13880]=0;c[13881]=(c[q+8>>2]|0)-1;c[13882]=0;c[13883]=(c[q+12>>2]|0)-1;a[33656]=0;c[8415]=0;a[33936]=0;q=c[13898]|0;r=c[8272]|0;L14563:do{if((q|0)<(r|0)){s=m|0;t=m+8|0;u=j|0;w=j+8|0;x=f|0;y=f+8|0;z=e|0;A=e+8|0;B=d|0;C=d+8|0;D=l|0;E=l+8|0;F=k|0;G=k+8|0;H=n|0;I=n+8|0;J=q;K=r;L14565:while(1){L=c[1054]|0;M=(a[L+(J*40&-1)|0]&1)==0;N=c[L+(J*40&-1)+36>>2]|0;O=L+(J*40&-1)+32|0;L14567:do{if(M){P=c[O>>2]|0;Q=10719}else{R=c[10036]|0;S=0;while(1){if((S|0)>=(N|0)){Q=10700;break}if((a[R+((c[O>>2]|0)+S|0)|0]|0)==(a[S+103664|0]|0)){S=S+1|0}else{break}}if((Q|0)==10700){Q=0;if((S|0)==1){break L14563}}R=c[O>>2]|0;if(!((N|0)>0&(M^1))){P=R;Q=10719;break}T=c[10036]|0;U=0;V=0;W=R;while(1){if((a[U+125568|0]|0)==(a[T+(U+W|0)|0]|0)){X=W;Y=V}else{if((U|0)!=2){P=R;Q=10719;break L14567}X=W-1|0;Y=1}Z=U+1|0;if((Z|0)<(Y+N|0)){U=Z;V=Y;W=X}else{break}}if((Y|0)==0){if(!((U|0)==5|(U|0)==1)){P=R;Q=10719;break}}W=J+1|0;c[13898]=W;if((W|0)>=(K|0)){break}L14588:do{if((a[L+(W*40&-1)|0]&1)!=0){V=c[L+(W*40&-1)+36>>2]|0;T=L+(W*40&-1)+32|0;S=c[10036]|0;Z=0;while(1){if((Z|0)>=(V|0)){break}if((a[S+((c[T>>2]|0)+Z|0)|0]|0)==(a[Z+103664|0]|0)){Z=Z+1|0}else{break L14588}}if((Z|0)==1){break L14567}}}while(0);a[14176]=1;is(n);a[14176]=0;if((c[H>>2]|0)!=3){c[13898]=W;break}R=c[I>>2]|0;if((R|0)==0){break}uu(c[8453]|0);c[8453]=R}}while(0);L14599:do{if((Q|0)==10719){Q=0;L14601:do{if((K|0)>(J|0)){if(M){Q=10765;break}O=c[10036]|0;R=0;while(1){if((R|0)>=(N|0)){break}if((a[O+(P+R|0)|0]|0)==(a[R+124352|0]|0)){R=R+1|0}else{Q=10735;break L14601}}if((R|0)!=4){Q=10735;break}Z=J+1|0;c[13898]=Z;if((Z|0)>=(K|0)){break L14599}L14610:do{if((a[L+(Z*40&-1)|0]&1)!=0){U=c[L+(Z*40&-1)+36>>2]|0;T=L+(Z*40&-1)+32|0;S=0;while(1){if((S|0)>=(U|0)){break}if((a[O+((c[T>>2]|0)+S|0)|0]|0)==(a[S+103664|0]|0)){S=S+1|0}else{break L14610}}if((S|0)==1){break L14599}}}while(0);a[14176]=1;is(m);a[14176]=0;if((c[s>>2]|0)!=3){c[13898]=Z;break L14599}O=c[t>>2]|0;if((O|0)==0){break L14599}uu(c[8454]|0);c[8454]=O;break L14599}else{Q=10735}}while(0);L14621:do{if((Q|0)==10735){Q=0;if(M){Q=10765;break}do{if((N|0)>0){W=c[10036]|0;O=0;R=0;T=P;while(1){if((a[O+122880|0]|0)==(a[W+(O+T|0)|0]|0)){_=T;$=R}else{if((O|0)!=3){break}_=T-1|0;$=1}U=O+1|0;if((U|0)<($+N|0)){O=U;R=$;T=_}else{Q=10742;break}}do{if((Q|0)==10742){Q=0;if(($|0)==0){if(!((O|0)==2|(O|0)==8)){break}}a[33936]=0;c[13898]=J+1;break L14599}}while(0);if(M){Q=10765;break L14621}L14639:do{if((N|0)>0){O=c[10036]|0;T=0;R=0;W=P;while(1){if((a[T+121536|0]|0)==(a[O+(T+W|0)|0]|0)){ab=W;ac=R}else{if((T|0)!=5){break L14639}ab=W-1|0;ac=1}S=T+1|0;if((S|0)<(ac+N|0)){T=S;R=ac;W=ab}else{break}}if((ac|0)==0){if(!((T|0)==4|(T|0)==10)){break}}a[33936]=1;c[13898]=J+1;break L14599}}while(0);if(M){Q=10765;break L14621}if((N|0)<=0){break}W=c[10036]|0;R=0;O=0;S=P;while(1){if((a[R+119784|0]|0)==(a[W+(R+S|0)|0]|0)){ad=S;ae=O}else{if((R|0)!=3){Q=10765;break L14621}ad=S-1|0;ae=1}af=R+1|0;if((af|0)<(ae+N|0)){R=af;O=ae;S=ad}else{break}}do{if((ae|0)!=0|(af|0)==3){if((a[33656]&1)!=0){Q=10925;break L14565}}else{S=(a[33656]&1)!=0;if((af|0)==7){if(S){Q=10926;break L14565}else{break}}else{if(S){break L14621}else{Q=10920;break L14565}}}}while(0);a[33656]=1;ag=J+1|0;c[13898]=ag;if((ag|0)>=(K|0)){Q=10923;break L14565}L14669:do{if((a[L+(ag*40&-1)|0]&1)!=0){S=c[L+(ag*40&-1)+36>>2]|0;O=L+(ag*40&-1)+32|0;R=c[10036]|0;W=0;while(1){if((W|0)>=(S|0)){break}if((a[R+((c[O>>2]|0)+W|0)|0]|0)==(a[W+103664|0]|0)){W=W+1|0}else{break L14669}}if((W|0)==1){Q=10924;break L14565}}}while(0);O=is(l)|0;R=c[O>>2]|0;if((R|0)==1){ah=+(c[O+8>>2]|0)}else if((R|0)==2){ah=+h[O+8>>3]}else if((R|0)==3){ah=+uz(c[O+8>>2]|0,0)}else{Q=10781;break L14565}if((c[D>>2]|0)==3){uu(c[E>>2]|0);c[D>>2]=1}c[8416]=~~ah;ai=c[13898]|0;O=c[8272]|0;if((ai|0)>=(O|0)){Q=10939;break L14565}R=c[1054]|0;S=(a[R+(ai*40&-1)|0]&1)==0;if(S){Q=10934;break L14565}T=c[R+(ai*40&-1)+36>>2]|0;U=R+(ai*40&-1)+32|0;V=c[10036]|0;aj=0;while(1){if((aj|0)>=(T|0)){Q=10789;break}if((a[V+((c[U>>2]|0)+aj|0)|0]|0)==(a[aj+103664|0]|0)){aj=aj+1|0}else{Q=10790;break}}if((Q|0)==10790){Q=0;if(S){Q=10935;break L14565}}else if((Q|0)==10789){Q=0;if((aj|0)==1|S){Q=10936;break L14565}}U=c[R+(ai*40&-1)+36>>2]|0;V=R+(ai*40&-1)+32|0;T=c[10036]|0;ak=0;while(1){if((ak|0)>=(U|0)){break}if((a[T+((c[V>>2]|0)+ak|0)|0]|0)==(a[ak+148464|0]|0)){ak=ak+1|0}else{Q=10937;break L14565}}if((ak|0)!=1){Q=10938;break L14565}al=ai+1|0;c[13898]=al;if((al|0)>=(O|0)){Q=10929;break L14565}L14699:do{if((a[R+(al*40&-1)|0]&1)!=0){V=c[R+(al*40&-1)+36>>2]|0;U=R+(al*40&-1)+32|0;S=0;while(1){if((S|0)>=(V|0)){break}if((a[T+((c[U>>2]|0)+S|0)|0]|0)==(a[S+103664|0]|0)){S=S+1|0}else{break L14699}}if((S|0)==1){Q=10930;break L14565}}}while(0);T=is(k)|0;R=c[T>>2]|0;if((R|0)==2){am=+h[T+8>>3]}else if((R|0)==3){am=+uz(c[T+8>>2]|0,0)}else if((R|0)==1){am=+(c[T+8>>2]|0)}else{Q=10807;break L14565}if((c[F>>2]|0)==3){uu(c[G>>2]|0);c[F>>2]=1}c[8417]=~~am;h[4215]=+g[178];h[4216]=+g[38];h[4217]=+g[184];h[4218]=+g[44];c[8419]=0;c[8420]=0;break L14599}}while(0);if((a[33656]&1)==0){Q=10922;break L14565}}}while(0);if((Q|0)==10765){Q=0;if((a[33656]&1)==0){Q=10921;break L14565}}Z=(N|0)>0;T=c[10036]|0;R=23840;O=119784;L14718:while(1){L14720:do{if(!M){if(Z){ak=0;U=0;V=P;while(1){W=a[O+ak|0]|0;if(W<<24>>24==(a[T+(ak+V|0)|0]|0)){an=V;ao=U}else{if(W<<24>>24!=36){break L14720}an=V-1|0;ao=1}ap=ak+1|0;if((ap|0)<(ao+N|0)){ak=ap;U=ao;V=an}else{break}}if((ao|0)==0){aq=ap}else{ar=R;break L14718}}else{aq=0}V=a[O+aq|0]|0;if((V<<24>>24|0)==36|(V<<24>>24|0)==0){ar=R;break L14718}}}while(0);V=R+8|0;U=c[V>>2]|0;if((U|0)==0){ar=V;break}else{R=V;O=U}}O=c[ar+4>>2]|0;if((O|0)==1){a[33672]=1;c[13898]=J+1;break}else if((O|0)==6){c[13898]=J+1;R=is(e)|0;T=c[R>>2]|0;if((T|0)==1){as=+(c[R+8>>2]|0)}else if((T|0)==2){as=+h[R+8>>3]}else if((T|0)==3){as=+uz(c[R+8>>2]|0,0)}else{Q=10865;break L14565}if((c[z>>2]|0)==3){uu(c[A>>2]|0);c[z>>2]=1}h[4213]=as;h[4214]=as;R=c[13898]|0;T=c[8272]|0;if((R|0)>=(T|0)){break}Z=c[1054]|0;U=(a[Z+(R*40&-1)|0]&1)==0;if(U){break}V=c[Z+(R*40&-1)+36>>2]|0;ak=Z+(R*40&-1)+32|0;W=c[10036]|0;aj=0;while(1){if((aj|0)>=(V|0)){Q=10873;break}if((a[W+((c[ak>>2]|0)+aj|0)|0]|0)==(a[aj+103664|0]|0)){aj=aj+1|0}else{Q=10874;break}}if((Q|0)==10873){Q=0;if((aj|0)==1|U){break}}else if((Q|0)==10874){Q=0;if(U){break}}ak=c[Z+(R*40&-1)+36>>2]|0;W=Z+(R*40&-1)+32|0;V=c[10036]|0;at=0;while(1){if((at|0)>=(ak|0)){break}if((a[V+((c[W>>2]|0)+at|0)|0]|0)==(a[at+148464|0]|0)){at=at+1|0}else{break L14599}}if((at|0)!=1){break}au=R+1|0;c[13898]=au;if((au|0)>=(T|0)){Q=10927;break L14565}L14759:do{if((a[Z+(au*40&-1)|0]&1)!=0){W=c[Z+(au*40&-1)+36>>2]|0;ak=Z+(au*40&-1)+32|0;U=0;while(1){if((U|0)>=(W|0)){break}if((a[V+((c[ak>>2]|0)+U|0)|0]|0)==(a[U+103664|0]|0)){U=U+1|0}else{break L14759}}if((U|0)==1){Q=10928;break L14565}}}while(0);V=is(d)|0;Z=c[V>>2]|0;if((Z|0)==1){av=+(c[V+8>>2]|0)}else if((Z|0)==2){av=+h[V+8>>3]}else if((Z|0)==3){av=+uz(c[V+8>>2]|0,0)}else{Q=10890;break L14565}if((c[B>>2]|0)==3){uu(c[C>>2]|0);c[B>>2]=1}h[4214]=av;break}else if((O|0)==2){a[33672]=0;c[13898]=J+1;break}else if((O|0)==4){a[33673]=1;c[13898]=J+1;break}else if((O|0)==5){a[33673]=0;c[13898]=J+1;break}else if((O|0)==3){c[13898]=J+1;V=is(j)|0;Z=c[V>>2]|0;if((Z|0)==1){aw=+(c[V+8>>2]|0)}else if((Z|0)==2){aw=+h[V+8>>3]}else if((Z|0)==3){aw=+uz(c[V+8>>2]|0,0)}else{Q=10832;break L14565}if((c[u>>2]|0)==3){uu(c[w>>2]|0);c[u>>2]=1}h[4211]=aw;h[4212]=aw;V=c[13898]|0;Z=c[8272]|0;if((V|0)>=(Z|0)){break}T=c[1054]|0;R=(a[T+(V*40&-1)|0]&1)==0;if(R){break}at=c[T+(V*40&-1)+36>>2]|0;ak=T+(V*40&-1)+32|0;W=c[10036]|0;aj=0;while(1){if((aj|0)>=(at|0)){Q=10840;break}if((a[W+((c[ak>>2]|0)+aj|0)|0]|0)==(a[aj+103664|0]|0)){aj=aj+1|0}else{Q=10841;break}}if((Q|0)==10840){Q=0;if((aj|0)==1|R){break}}else if((Q|0)==10841){Q=0;if(R){break}}ak=c[T+(V*40&-1)+36>>2]|0;W=T+(V*40&-1)+32|0;at=c[10036]|0;O=0;while(1){if((O|0)>=(ak|0)){break}if((a[at+((c[W>>2]|0)+O|0)|0]|0)==(a[O+148464|0]|0)){O=O+1|0}else{break L14599}}if((O|0)!=1){break}ax=V+1|0;c[13898]=ax;if((ax|0)>=(Z|0)){Q=10940;break L14565}L14801:do{if((a[T+(ax*40&-1)|0]&1)!=0){W=c[T+(ax*40&-1)+36>>2]|0;ak=T+(ax*40&-1)+32|0;R=0;while(1){if((R|0)>=(W|0)){break}if((a[at+((c[ak>>2]|0)+R|0)|0]|0)==(a[R+103664|0]|0)){R=R+1|0}else{break L14801}}if((R|0)==1){Q=10941;break L14565}}}while(0);at=is(f)|0;T=c[at>>2]|0;if((T|0)==2){ay=+h[at+8>>3]}else if((T|0)==3){ay=+uz(c[at+8>>2]|0,0)}else if((T|0)==1){ay=+(c[at+8>>2]|0)}else{Q=10857;break L14565}if((c[x>>2]|0)==3){uu(c[y>>2]|0);c[x>>2]=1}h[4212]=ay;break}else{Q=10894;break L14565}}}while(0);N=c[13898]|0;M=c[8272]|0;if((N|0)<(M|0)){J=N;K=M}else{break L14563}}if((Q|0)==10926){uf(J,116664,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10927){uf(au,105736,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10928){uf(au,105736,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10894){uf(J,104688,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10920){uf(J,107656,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10921){uf(J,107656,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10922){uf(J,107656,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10923){uf(ag,115776,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10924){uf(ag,115776,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10925){uf(J,116664,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10929){uf(al,109336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10930){uf(al,109336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10934){uf(ai,113800,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10935){uf(ai,113800,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10936){uf(ai,113800,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10937){uf(ai,113800,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10941){uf(ax,106712,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10938){uf(ai,113800,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10939){uf(ai,113800,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10940){uf(ax,106712,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10890){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10832){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10781){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10857){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10865){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==10807){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);a[33512]=1;Q=e6(104120)|0;if((Q|0)!=0){a[Q+8|0]=0;c[Q+16>>2]=1;c[Q+24>>2]=1}Q=c[8453]|0;if((Q|0)==0){h[4243]=0.0;lg();hM();i=b;return}fN(33896,o,p,103768);ax=c[3524]|0;ai=~~(+h[o>>3]+ +((c[ax+8>>2]|0)>>>1>>>0>>>0));o=~~(+h[p>>3]+ +(((c[ax+12>>2]|0)-(c[ax+16>>2]|0)|0)>>>0>>>0));p=a[33936]&1;do{if(p<<24>>24==0){az=ax}else{if((a[37456]&1)!=0){az=ax;break}a[37456]=1;al=c[ax+88>>2]|0;if((al|0)==0){az=ax;break}cO[al&255](179864);az=c[3524]|0}}while(0);a[37456]=p;fn(33824,az);ln(ai,o,c[8453]|0,1,0,0,c[8454]|0);if((c[8456]|0)!=0){cM[c[(c[3524]|0)+64>>2]&511](-2)}a[37456]=0;o=Q;Q=1;while(1){ai=a[o]|0;if((ai<<24>>24|0)==0){break}else if((ai<<24>>24|0)==10){aA=Q+1|0}else{aA=Q}o=o+1|0;Q=aA}aA=c[8454]|0;do{if((aA|0)==0){aB=0}else{if((a[aA]|0)==0){aB=aA;break}o=c[(c[3524]|0)+88>>2]|0;if((o|0)==0){aB=aA;break}cO[o&255](aA);aB=c[8454]|0}}while(0);aA=c[3524]|0;ay=+(aa(c[aA+16>>2]|0,Q)>>>0>>>0);aw=ay/+((c[aA+12>>2]|0)>>>0>>>0);h[4243]=aw;do{if((aB|0)==0){aC=aw}else{if((a[aB]|0)==0){aC=aw;break}Q=c[aA+88>>2]|0;if((Q|0)==0){aC=aw;break}cO[Q&255](179864);aC=+h[4243]}}while(0);if(aC<=.9){lg();hM();i=b;return}h[4243]=.05;lg();hM();i=b;return}function lm(){var b=0;if((a[33512]&1)==0){return}if(a[13032]|0){b=c[(c[3524]|0)+104>>2]|0;if((b|0)!=0){cS[b&511]()}a[13032]=0}a[33512]=0;b=e6(104120)|0;if((b|0)!=0){a[b+8|0]=0;c[b+16>>2]=1;c[b+24>>2]=0}if((a[33656]&1)!=0){g[178]=+h[4215];g[38]=+h[4216];g[184]=+h[4217];g[44]=+h[4218]}a[33656]=0;h[4212]=1.0;h[4211]=1.0;uE(33704,0,16);b=c[8453]|0;if((b|0)!=0){uu(b);c[8453]=0}lh();hM();return}function ln(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;j=c[3524]|0;if((e|0)==0){return}k=(i|0)!=0;do{if(k){if((a[i]|0)==0){break}l=c[j+88>>2]|0;if((l|0)==0){break}cO[l&255](i)}}while(0);do{if((g|0)==0){m=b;n=e;o=d;p=j+16|0}else{l=a[e]|0;if(l<<24>>24==0){q=e;r=0}else{s=e;t=0;u=l;while(1){l=s+1|0;v=(u<<24>>24==10&1)+t|0;w=a[l]|0;if(w<<24>>24==0){q=l;r=v;break}else{s=l;t=v;u=w}}}u=aa(r,g);t=j+16|0;s=aa(u,c[t>>2]|0)>>>1;if((h|0)==0){m=b;n=q;o=s+d|0;p=t;break}else{m=b-s|0;n=q;o=d;p=t;break}}}while(0);d=j+76|0;q=j+20|0;b=(h|0)==0;g=j+68|0;r=m;m=n;n=o;o=e;while(1){do{if((o|0)==0){x=m}else{e=a8(o|0,10)|0;if((e|0)==0){x=0;break}a[e]=0;x=e}}while(0);do{if((cO[c[d>>2]&255](f)|0)==0){e=aa(c[q>>2]|0,f);t=aa(e,lp(o)|0)>>>1;if(b){e=r-t|0;s=c[3524]|0;if((c[s+96>>2]&128|0)==0){if((e|0)<=0){break}if(!((c[s+8>>2]|0)>>>0>e>>>0&(n|0)>0)){break}if((c[s+12>>2]|0)>>>0<=n>>>0){break}}cR[c[g>>2]&127](e,n,o);break}else{e=n-t|0;t=c[3524]|0;if((c[t+96>>2]&128|0)==0){if((r|0)<=0){break}if(!((c[t+8>>2]|0)>>>0>r>>>0&(e|0)>0)){break}if((c[t+12>>2]|0)>>>0<=e>>>0){break}}cR[c[g>>2]&127](r,e,o);break}}else{e=c[3524]|0;if((c[e+96>>2]&128|0)==0){if((r|0)<=0){break}if(!((c[e+8>>2]|0)>>>0>r>>>0&(n|0)>0)){break}if((c[e+12>>2]|0)>>>0<=n>>>0){break}}cR[c[g>>2]&127](r,n,o)}}while(0);do{if((h|0)==(-270|0)|(h|0)==90){y=(c[p>>2]|0)+r|0;z=n}else{e=c[p>>2]|0;if((h|0)==(-90|0)|(h|0)==270){y=r-e|0;z=n;break}else{y=r;z=n-e|0;break}}}while(0);if((x|0)==0){break}a[x]=10;r=y;m=x;n=z;o=x+1|0}if(!k){return}if((a[i]|0)==0){return}i=c[j+88>>2]|0;if((i|0)==0){return}cO[i&255](179864);return}function lo(){var b=0;c[8026]=0;if((a[14080]&1)==0){return}if(a[13032]|0){b=c[(c[3524]|0)+104>>2]|0;if((b|0)!=0){cS[b&511]()}a[13032]=0}if(a[14088]|0){cS[c[(c[3524]|0)+44>>2]&511]();a[14088]=0}if((a[14080]&1)==0){return}cS[c[(c[3524]|0)+40>>2]&511]();a[14080]=0;c[10028]=0;return}function lp(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;d=c[3524]|0;e=c[d+96>>2]|0;if((e&8192|0)==0){do{if((a8(b|0,10)|0)==0){if((e&32|0)!=0){break}if((c[11252]|0)!=15){f=uA(b|0)|0;return f|0}g=a[b]|0;if(g<<24>>24==0){f=0;return f|0}else{h=0;i=0;j=g}while(1){if((j&-64)<<24>>24==-128){k=i}else{k=((j&255)>226?2:1)+i|0}g=h+1|0;l=a[b+g|0]|0;if(l<<24>>24==0){f=k;break}else{h=g;i=k;j=l}}return f|0}}while(0);c[3524]=238024;cR[c[59523]&127](0,0,b);j=c[(c[3524]|0)+8>>2]|0;c[3524]=d;f=j;return f|0}if((cy(b|0,203320)|0)==0){f=uA(b|0)|0;return f|0}j=a[b]|0;if(j<<24>>24==0){f=0;return f|0}else{m=b;n=0;o=j}L15011:while(1){j=m;b=o;L15013:while(1){d=b<<24>>24;L15015:do{if((d|0)==91){if(b<<24>>24==0){p=j}else{k=b;i=j;while(1){h=i+1|0;if(k<<24>>24==93){q=h;break L15015}e=a[h]|0;if(e<<24>>24==0){p=h;break}else{k=e;i=h}}}q=p+1|0}else if((d|0)==92){r=j;s=11030;break L15013}else if((d|0)==123|(d|0)==125|(d|0)==36|(d|0)==95|(d|0)==94){q=j+1|0}else{s=11034;break L15013}}while(0);d=a[q]|0;if(d<<24>>24==0){f=n;s=11046;break L15011}else{j=q;b=d}}L15024:do{if((s|0)==11030){while(1){s=0;b=r+1|0;d=a[b]|0;if(d<<24>>24==0){t=b;break L15024}if((bO(d<<24>>24|0)|0)==0){t=b;break}else{r=b;s=11030}}}else if((s|0)==11034){s=0;t=j+1|0}}while(0);j=n+1|0;b=a[t]|0;if(b<<24>>24==0){f=j;s=11049;break}else{m=t;n=j;o=b}}if((s|0)==11049){return f|0}else if((s|0)==11046){return f|0}return 0}function lq(a,b,d,e,f,g){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;h=i;i=i+3048|0;j=h|0;k=h+8|0;l=h+16|0;m=h+24|0;n=h+32|0;o=h+3032|0;p=h+3040|0;if(e<0.0){q=e;while(1){r=q+360.0;if(r<0.0){q=r}else{s=r;break}}}else{s=e}if(f>360.0){e=f;while(1){q=e+-360.0;if(q>360.0){e=q}else{t=q;break}}}else{t=f}if(t<s){f=t;while(1){e=f+360.0;if(e<s){f=e}else{u=e;break}}}else{u=t}t=u-s;v=~~(t/3.0);w=(v|0)<1?1:v;v=c[3524]|0;f=+((c[v+24>>2]|0)>>>0>>>0)/+((c[v+28>>2]|0)>>>0>>>0);v=n|0;c[n+8>>2]=g;e=+(a>>>0>>>0);q=+(b>>>0>>>0);if((w|0)>0){x=0;y=0;while(1){r=(s+ +(x|0)*3.0)*.017453292519943295;z=n+(y*12&-1)|0;c[z>>2]=~~(e+ +S(+r)*d);A=n+(y*12&-1)+4|0;c[A>>2]=~~(q+f*+T(+r)*d);c[o>>2]=a;c[p>>2]=b;B=((fl(o,p,z,A)|0)!=0&1)+y|0;A=x+1|0;if((A|0)<(w|0)){x=A;y=B}else{C=B;break}}}else{C=0}s=u*.017453292519943295;y=n+(C*12&-1)|0;c[y>>2]=~~(e+ +S(+s)*d);x=n+(C*12&-1)+4|0;c[x>>2]=~~(q+f*+T(+s)*d);w=(((fl(o,p,y,x)|0)==0)<<31>>31)+C|0;d=+P(+t);if(d>.1&d<359.9){C=w+1|0;c[n+(C*12&-1)>>2]=a;c[n+(C*12&-1)+4>>2]=b;b=w+2|0;c[n+(b*12&-1)>>2]=c[n>>2];c[n+(b*12&-1)+4>>2]=c[n+4>>2];D=b}else{D=w}if((g|0)!=0){g=c[(c[3524]|0)+148>>2]|0;if((g|0)==0){i=h;return}cN[g&255](D+1|0,v);i=h;return}if((D|0)<=0){i=h;return}v=0;while(1){g=c[n+(v*12&-1)+4>>2]|0;w=v+1|0;b=c[n+(w*12&-1)>>2]|0;C=c[n+(w*12&-1)+4>>2]|0;c[j>>2]=c[n+(v*12&-1)>>2];c[k>>2]=g;c[l>>2]=b;c[m>>2]=C;C=c[3524]|0;if((fl(j,k,l,m)|0)!=0){cN[c[C+56>>2]&255](c[j>>2]|0,c[k>>2]|0);cN[c[C+60>>2]&255](c[l>>2]|0,c[m>>2]|0)}if((w|0)<(D|0)){v=w}else{break}}i=h;return}function lr(a,b){a=a|0;b=b|0;return uK(c[6224+((c[a>>2]|0)*184&-1)>>2]|0,c[6224+((c[b>>2]|0)*184&-1)>>2]|0)|0}function ls(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,j=0;a=i;i=i+152|0;b=a|0;d=ut(1024)|0;do{if((d|0)==0){gk();e=ut(1024)|0;if((e|0)!=0){f=e;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=75488,v)|0)}else{f=d}}while(0);d=0;do{c[b+(d<<2)>>2]=d;d=d+1|0;}while(d>>>0<37);bM(b|0,37,4,2);gq();uD(f|0,75064,28);d=c[8250]|0;if((d|0)==(c[m>>2]|0)){if((c[8238]|0)<((c[6318]|0)-2|0)){g=d}else{aI(125440,23,1,d|0);do{e=a1(c[o>>2]|0)|0}while(!((e|0)==(-1|0)|(e|0)==10));c[8238]=0;g=c[m>>2]|0}aK(f|0,g|0);c[8238]=(c[8238]|0)+1;h=0}else{aK(f|0,d|0);h=0}do{d=c[b+(h<<2)>>2]|0;g=c[6228+(d*184&-1)>>2]|0;be(f|0,74576,(v=i,i=i+16|0,c[v>>2]=c[6224+(d*184&-1)>>2],c[v+8>>2]=g,v)|0);g=c[8250]|0;if((g|0)==(c[m>>2]|0)){if((c[8238]|0)<((c[6318]|0)-2|0)){j=g}else{aI(125440,23,1,g|0);do{d=a1(c[o>>2]|0)|0}while(!((d|0)==(-1|0)|(d|0)==10));c[8238]=0;j=c[m>>2]|0}aK(f|0,j|0);c[8238]=(c[8238]|0)+1}else{aK(f|0,g|0)}h=h+1|0;}while(h>>>0<37);h=c[8250]|0;if((h|0)==(c[m>>2]|0)){uu(f);i=a;return}a2(h|0);uu(f);i=a;return}function lt(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0;b=i;i=i+152|0;d=b|0;e=ut(555)|0;do{if((e|0)==0){gk();f=ut(555)|0;if((f|0)!=0){g=f;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=74144,v)|0);return 0}else{g=e}}while(0);e=0;do{c[d+(e<<2)>>2]=e;e=e+1|0;}while(e>>>0<37);bM(d|0,37,4,2);e=g;w=32;a[e]=w&255;w=w>>8;a[e+1|0]=w&255;e=0;f=uA(g|0)|0;do{be(g+f|0,73368,(v=i,i=i+8|0,c[v>>2]=c[6224+((c[d+(e<<2)>>2]|0)*184&-1)>>2],v)|0);e=e+1|0;f=uA(g|0)|0}while(e>>>0<37);e=f+1|0;f=ut(e)|0;if((f|0)!=0){h=f;j=uB(h|0,g|0)|0;uu(g);i=b;return h|0}gk();f=ut(e)|0;if((f|0)==0){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=72784,v)|0);return 0}else{h=f;j=uB(h|0,g|0)|0;uu(g);i=b;return h|0}return 0}function lu(a,b){a=+a;b=+b;return 0}function lv(a){a=a|0;return(a|0)==0&1|0}function lw(a){a=a|0;return(a|0)==0&1|0}function lx(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0;e=i;f=(a_(b|0,223552,d|0)|0)==0;g=f?3:d;d=f?222936:b;b=0;f=0;j=0;while(1){k=c[6224+(b*184&-1)>>2]|0;if((a_(d|0,k|0,g|0)|0)==0){l=6224+(b*184&-1)|0;if((g|0)==(uA(k|0)|0)){n=0;o=l;break}else{p=j|(f|0)!=0;q=l}}else{p=j;q=f}l=b+1|0;if(l>>>0<37){b=l;f=q;j=p}else{n=p;o=q;break}}if((o|0)==0|n){r=0;i=e;return r|0}c[3524]=o;a[14080]=0;if((c[o+48>>2]|0)==2){s=o}else{n=c[m>>2]|0;aI(222416,73,1,n|0);s=c[3524]|0}n=s+72|0;if((c[n>>2]|0)==0){c[n>>2]=12;t=c[3524]|0}else{t=s}s=t+76|0;if((c[s>>2]|0)==0){c[s>>2]=124;u=c[3524]|0}else{u=t}t=u+80|0;if((c[t>>2]|0)==0){c[t>>2]=60;w=c[3524]|0}else{w=u}u=w+84|0;if((c[u>>2]|0)==0){c[u>>2]=48;x=c[3524]|0}else{x=w}w=x+92|0;if((c[w>>2]|0)==0){c[w>>2]=10;y=c[3524]|0}else{y=x}x=y+112|0;if((c[x>>2]|0)==0){c[x>>2]=34;z=c[3524]|0}else{z=y}y=z+168|0;if((c[y>>2]|0)==0){c[y>>2]=144;A=c[3524]|0}else{A=z}z=A+176|0;if(+h[z>>3]<=0.0){h[z>>3]=1.0}if((a[37400]&1)!=0){z=c[m>>2]|0;y=c[A>>2]|0;cf(z|0,221648,(v=i,i=i+8|0,c[v>>2]=y,v)|0)}c[7271]=-1;r=o;i=e;return r|0}function ly(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;e=c[3524]|0;if((d|0)<0){cN[c[e+56>>2]&255](a,b);cN[c[e+60>>2]&255](a,b);return}f=(d|0)%6&-1;g=+h[1630];d=~~(g*+((c[e+28>>2]|0)>>>0>>>0)*.5);i=~~(g*+((c[e+24>>2]|0)>>>0>>>0)*.5);if((f|0)==0){j=e+56|0;k=a-d|0;cN[c[j>>2]&255](k,b);l=e+60|0;cN[c[l>>2]&255](k,b);cN[c[l>>2]&255](d+a|0,b);k=b-i|0;cN[c[j>>2]&255](a,k);cN[c[l>>2]&255](a,k);cN[c[l>>2]&255](a,i+b|0);return}else if((f|0)==3){l=e+56|0;k=a-d|0;j=b-i|0;cN[c[l>>2]&255](k,j);m=e+60|0;cN[c[m>>2]&255](k,j);n=d+a|0;cN[c[m>>2]&255](n,j);o=i+b|0;cN[c[m>>2]&255](n,o);cN[c[m>>2]&255](k,o);cN[c[m>>2]&255](k,j);cN[c[l>>2]&255](a,b);cN[c[m>>2]&255](a,b);return}else if((f|0)==2){m=e+56|0;l=a-d|0;cN[c[m>>2]&255](l,b);j=e+60|0;cN[c[j>>2]&255](l,b);k=d+a|0;cN[c[j>>2]&255](k,b);o=b-i|0;cN[c[m>>2]&255](a,o);cN[c[j>>2]&255](a,o);n=i+b|0;cN[c[j>>2]&255](a,n);cN[c[m>>2]&255](l,o);cN[c[j>>2]&255](l,o);cN[c[j>>2]&255](k,n);cN[c[m>>2]&255](l,n);cN[c[j>>2]&255](l,n);cN[c[j>>2]&255](k,o);return}else if((f|0)==4){o=e+56|0;k=a-d|0;cN[c[o>>2]&255](k,b);j=e+60|0;cN[c[j>>2]&255](a,b-i|0);cN[c[j>>2]&255](d+a|0,b);cN[c[j>>2]&255](a,i+b|0);cN[c[j>>2]&255](k,b);cN[c[o>>2]&255](a,b);cN[c[j>>2]&255](a,b);return}else if((f|0)==5){j=e+56|0;o=((i<<2|0)/3&-1)+b|0;cN[c[j>>2]&255](a,o);k=e+60|0;n=(d<<2|0)/3&-1;l=b-((i<<1|0)/3&-1)|0;cN[c[k>>2]&255](a-n|0,l);cN[c[k>>2]&255](n+a|0,l);cN[c[k>>2]&255](a,o);cN[c[j>>2]&255](a,b);cN[c[k>>2]&255](a,b);return}else if((f|0)==1){f=e+56|0;k=a-d|0;j=b-i|0;cN[c[f>>2]&255](k,j);o=e+60|0;cN[c[o>>2]&255](k,j);e=d+a|0;a=i+b|0;cN[c[o>>2]&255](e,a);cN[c[f>>2]&255](k,a);cN[c[o>>2]&255](k,a);cN[c[o>>2]&255](e,j);return}else{return}}function lz(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;b=i;i=i+24|0;d=b|0;e=c[13898]|0;if((e|0)>=(c[8272]|0)){f=lx(225016,7)|0;g=c[13898]|0;h=g-1|0;uf(h,224456,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}j=c[1054]|0;L15188:do{if((a[j+(e*40&-1)|0]&1)==0){k=c[10036]|0;l=c[j+(e*40&-1)+36>>2]|0;m=j+(e*40&-1)+32|0}else{n=c[j+(e*40&-1)+36>>2]|0;o=j+(e*40&-1)+32|0;p=c[10036]|0;q=0;while(1){if((q|0)>=(n|0)){break}if((a[p+((c[o>>2]|0)+q|0)|0]|0)==(a[q+103664|0]|0)){q=q+1|0}else{k=p;l=n;m=o;break L15188}}if((q|0)!=1){k=p;l=n;m=o;break}f=lx(225016,7)|0;g=c[13898]|0;h=g-1|0;uf(h,224456,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}}while(0);e=lx(k+(c[m>>2]|0)|0,l)|0;l=c[13898]|0;L15197:do{if((e|0)==0){m=c[1054]|0;k=(a[m+(l*40&-1)|0]&1)==0;if(k){r=11176}else{j=c[10036]|0;s=a[j+(c[m+(l*40&-1)+32>>2]|0)|0]|0;if((s<<24>>24|0)==39|(s<<24>>24|0)==34){t=j}else{r=11176}}if((r|0)==11176){j=c[10810]|0;if((j|0)==0){r=11196;break}s=c[8272]|0;u=m+(l*40&-1)+36|0;w=m+(l*40&-1)+32|0;x=c[10036]|0;y=j;L15204:while(1){j=c[y+4>>2]|0;L15206:do{if(!((s|0)<=(l|0)|k)){z=c[u>>2]|0;A=0;while(1){if((A|0)>=(z|0)){break}if((a[x+((c[w>>2]|0)+A|0)|0]|0)==(a[j+A|0]|0)){A=A+1|0}else{break L15206}}if((a[j+A|0]|0)==0){break L15204}}}while(0);j=c[y>>2]|0;if((j|0)==0){r=11196;break L15197}else{y=j}}if((a[y+8|0]&1)!=0){r=11196;break}if((c[y+16>>2]|0)==3){t=x}else{r=11196;break}}L15216:do{if((l|0)<(c[8272]|0)){L15218:do{if(!k){w=c[m+(l*40&-1)+36>>2]|0;u=m+(l*40&-1)+32|0;s=0;while(1){if((s|0)>=(w|0)){break}if((a[t+((c[u>>2]|0)+s|0)|0]|0)==(a[s+103664|0]|0)){s=s+1|0}else{break L15218}}if((s|0)==1){B=0;break L15216}}}while(0);a[14176]=1;is(d);a[14176]=0;if((c[d>>2]|0)==3){B=c[d+8>>2]|0;break}else{c[13898]=l;B=0;break}}else{B=0}}while(0);m=lx(B,uA(B|0)|0)|0;uu(B);C=m}else{r=11196}}while(0);if((r|0)==11196){c[13898]=l+1;C=e}if((C|0)==0){f=lx(225016,7)|0;g=c[13898]|0;h=g-1|0;uf(h,224456,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else{i=b;return C|0}return 0}function lA(a){a=+a;return}function lB(a){a=a|0;return}function lC(a){a=+a;h[1630]=a>=0.0?a:1.0;return}function lD(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,R=0,V=0,W=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0.0,ar=0.0,as=0.0,at=0.0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0.0,aE=0.0,aF=0.0,aG=0,aH=0.0,aI=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0.0,aS=0.0,aT=0.0,aU=0.0,aV=0.0,aW=0.0,aX=0,aY=0,aZ=0,a_=0,a$=0,a0=0,a1=0;g=i;i=i+480|0;j=g|0;k=g+8|0;l=g+16|0;m=g+24|0;n=g+32|0;o=g+40|0;p=g+48|0;q=g+56|0;r=g+64|0;s=g+72|0;t=g+80|0;u=g+88|0;v=g+96|0;w=g+104|0;x=g+112|0;y=g+120|0;z=g+128|0;A=g+136|0;B=g+144|0;C=g+152|0;D=g+160|0;E=g+168|0;F=g+176|0;G=g+184|0;H=g+192|0;I=g+200|0;J=g+208|0;K=g+216|0;L=g+224|0;M=g+232|0;N=g+240|0;O=g+248|0;R=g+256|0;V=g+264|0;W=g+272|0;Z=g+280|0;_=g+288|0;$=g+296|0;aa=g+304|0;ab=g+312|0;ac=g+320|0;ad=g+328|0;ae=g+336|0;af=g+344|0;ag=g+352|0;ah=g+360|0;ai=g+368|0;aj=g+376|0;ak=g+384|0;al=g+392|0;am=g+400|0;an=g+408|0;ao=g+416|0;ap=c[3524]|0;aq=+(((c[ap+24>>2]|0)+(c[ap+28>>2]|0)|0)>>>0>>>0)*.5;ar=+(a-d|0);as=+(b-e|0);at=+Q(+(ar*ar+as*as));au=(f|0)<0?-f|0:f;av=c[13542]|0;aw=(c[ap+96>>2]&128|0)==0;ax=aw?55520:0;c[13542]=ax;do{if((f|0)==0){ay=0;az=0}else{L15241:do{if(+P(+at)<2.220446049250313e-16){aA=0;aB=0}else{aC=c[12910]|0;if((aC|0)<1){aD=aq;aE=aD*.3/at;aF=aD*2.0/at;aD=aF>.3?.3:aF;aF=aE>aD?aE:aD;aD=ar*.96593;aE=as*.25882;aG=~~((aD-aE)*aF);aH=as*.96593;aI=~~((ar*.25882+aH)*aF);aJ=~~((aD+aE)*aF);aK=~~((ar*-.25882+aH)*aF);aL=(aG+aJ|0)/2&-1;aM=(aI+aK|0)/2&-1;aN=aG;aO=aK;aP=aJ;aQ=aI}else{aF=+h[6458]*.017453292519943295;aH=+h[6457]*.017453292519943295;aE=+Y(+(-0.0-as),+(-0.0-ar));aD=+(aC|0);aR=at*.5;if(aD>aR){aS=aD/aR;aT=+X(+(+U(+aF)*aS));aU=aR;aV=+X(+(aS*+U(+aH)));aW=aT}else{aU=aD;aV=aH;aW=aF}aF=+T(+aW);aH=aF/+T(+aV);aF=aW-aE;aC=-~~(aU*+S(+aF))|0;aI=~~(aU*+T(+aF));aF=-0.0-aU;aD=aE+aW;aT=+S(+aD)*aF;aS=+T(+aD)*aF;aF=aU*aH;aH=aE+aV;aJ=~~(aT+aF*+S(+aH));aL=aJ;aM=~~(aS+aF*+T(+aH));aN=aC;aO=~~aS;aP=~~aT;aQ=aI}do{if((au&1|0)!=0){do{if((c[12912]|0)==2){if(aw){aI=(c[ax>>2]|0)>(d|0)&1;aC=(c[ax+4>>2]|0)<(d|0)?aI|2:aI;aI=(c[ax+8>>2]|0)>(e|0)?aC|4:aC;if((((c[ax+12>>2]|0)<(e|0)?aI|8:aI)|0)!=0){aX=ax;break}}aI=aL+d|0;c[ao>>2]=aI;aC=aM+e|0;c[ao+4>>2]=aC;c[ao+12>>2]=aN+d;c[ao+16>>2]=aQ+e;c[ao+24>>2]=d;c[ao+28>>2]=e;c[ao+36>>2]=aP+d;c[ao+40>>2]=aO+e;c[ao+48>>2]=aI;c[ao+52>>2]=aC;c[ao+8>>2]=1601;aC=c[ap+148>>2]|0;if((aC|0)==0){aX=ax;break}cN[aC&255](5,ao|0);aX=c[13542]|0}else{aX=ax}}while(0);if((aX|0)!=0){aC=(c[aX>>2]|0)>(d|0)&1;aI=(c[aX+4>>2]|0)<(d|0)?aC|2:aC;aC=(c[aX+8>>2]|0)>(e|0)?aI|4:aI;if((((c[aX+12>>2]|0)<(e|0)?aC|8:aC)|0)!=0){break}}if((c[12912]|0)==0){c[L>>2]=aN+d;c[M>>2]=aQ+e;c[N>>2]=d;c[O>>2]=e;aC=c[3524]|0;if((fl(L,M,N,O)|0)!=0){cN[c[aC+56>>2]&255](c[L>>2]|0,c[M>>2]|0);cN[c[aC+60>>2]&255](c[N>>2]|0,c[O>>2]|0)}c[H>>2]=d;c[I>>2]=e;c[J>>2]=aP+d;c[K>>2]=aO+e;aC=c[3524]|0;if((fl(H,I,J,K)|0)==0){break}cN[c[aC+56>>2]&255](c[H>>2]|0,c[I>>2]|0);cN[c[aC+60>>2]&255](c[J>>2]|0,c[K>>2]|0);break}aC=aL+d|0;aI=aM+e|0;aJ=aN+d|0;aK=aQ+e|0;c[ag>>2]=aC;c[ah>>2]=aI;c[ai>>2]=aJ;c[aj>>2]=aK;aG=c[3524]|0;if((fl(ag,ah,ai,aj)|0)!=0){cN[c[aG+56>>2]&255](c[ag>>2]|0,c[ah>>2]|0);cN[c[aG+60>>2]&255](c[ai>>2]|0,c[aj>>2]|0)}c[ac>>2]=aJ;c[ad>>2]=aK;c[ae>>2]=d;c[af>>2]=e;aK=c[3524]|0;if((fl(ac,ad,ae,af)|0)!=0){cN[c[aK+56>>2]&255](c[ac>>2]|0,c[ad>>2]|0);cN[c[aK+60>>2]&255](c[ae>>2]|0,c[af>>2]|0)}aK=aP+d|0;aJ=aO+e|0;c[_>>2]=d;c[$>>2]=e;c[aa>>2]=aK;c[ab>>2]=aJ;aG=c[3524]|0;if((fl(_,$,aa,ab)|0)!=0){cN[c[aG+56>>2]&255](c[_>>2]|0,c[$>>2]|0);cN[c[aG+60>>2]&255](c[aa>>2]|0,c[ab>>2]|0)}c[R>>2]=aK;c[V>>2]=aJ;c[W>>2]=aC;c[Z>>2]=aI;aI=c[3524]|0;if((fl(R,V,W,Z)|0)==0){break}cN[c[aI+56>>2]&255](c[R>>2]|0,c[V>>2]|0);cN[c[aI+60>>2]&255](c[W>>2]|0,c[Z>>2]|0)}}while(0);if((au&2|0)==0){aA=aL;aB=aM;break}aI=c[13542]|0;if((aI|0)!=0){aC=(c[aI>>2]|0)>(a|0)&1;aJ=(c[aI+4>>2]|0)<(a|0)?aC|2:aC;aC=(c[aI+8>>2]|0)>(b|0)?aJ|4:aJ;if((((c[aI+12>>2]|0)<(b|0)?aC|8:aC)|0)!=0){aA=aL;aB=aM;break}}aC=c[12912]|0;do{if((aC|0)==2){aI=a-aL|0;c[ao>>2]=aI;aJ=b-aM|0;c[ao+4>>2]=aJ;c[ao+12>>2]=a-aN;c[ao+16>>2]=b-aQ;c[ao+24>>2]=a;c[ao+28>>2]=b;c[ao+36>>2]=a-aP;c[ao+40>>2]=b-aO;c[ao+48>>2]=aI;c[ao+52>>2]=aJ;c[ao+8>>2]=1601;aJ=c[ap+148>>2]|0;if((aJ|0)==0){break}cN[aJ&255](5,ao|0);aY=c[12912]|0;aZ=11240}else{aY=aC;aZ=11240}}while(0);do{if((aZ|0)==11240){if((aY|0)!=0){break}c[n>>2]=a-aP;c[o>>2]=b-aO;c[p>>2]=a;c[q>>2]=b;aC=c[3524]|0;if((fl(n,o,p,q)|0)!=0){cN[c[aC+56>>2]&255](c[n>>2]|0,c[o>>2]|0);cN[c[aC+60>>2]&255](c[p>>2]|0,c[q>>2]|0)}c[j>>2]=a;c[k>>2]=b;c[l>>2]=a-aN;c[m>>2]=b-aQ;aC=c[3524]|0;if((fl(j,k,l,m)|0)==0){aA=aL;aB=aM;break L15241}cN[c[aC+56>>2]&255](c[j>>2]|0,c[k>>2]|0);cN[c[aC+60>>2]&255](c[l>>2]|0,c[m>>2]|0);aA=aL;aB=aM;break L15241}}while(0);aC=a-aL|0;aJ=b-aM|0;aI=a-aP|0;aK=b-aO|0;c[D>>2]=aC;c[E>>2]=aJ;c[F>>2]=aI;c[G>>2]=aK;aG=c[3524]|0;if((fl(D,E,F,G)|0)!=0){cN[c[aG+56>>2]&255](c[D>>2]|0,c[E>>2]|0);cN[c[aG+60>>2]&255](c[F>>2]|0,c[G>>2]|0)}c[z>>2]=aI;c[A>>2]=aK;c[B>>2]=a;c[C>>2]=b;aK=c[3524]|0;if((fl(z,A,B,C)|0)!=0){cN[c[aK+56>>2]&255](c[z>>2]|0,c[A>>2]|0);cN[c[aK+60>>2]&255](c[B>>2]|0,c[C>>2]|0)}aK=a-aN|0;aI=b-aQ|0;c[v>>2]=a;c[w>>2]=b;c[x>>2]=aK;c[y>>2]=aI;aG=c[3524]|0;if((fl(v,w,x,y)|0)!=0){cN[c[aG+56>>2]&255](c[v>>2]|0,c[w>>2]|0);cN[c[aG+60>>2]&255](c[x>>2]|0,c[y>>2]|0)}c[r>>2]=aK;c[s>>2]=aI;c[t>>2]=aC;c[u>>2]=aJ;aJ=c[3524]|0;if((fl(r,s,t,u)|0)==0){aA=aL;aB=aM;break}cN[c[aJ+56>>2]&255](c[r>>2]|0,c[s>>2]|0);cN[c[aJ+60>>2]&255](c[t>>2]|0,c[u>>2]|0);aA=aL;aB=aM}}while(0);if((f|0)>-1){ay=aB;az=aA;break}c[13542]=av;i=g;return}}while(0);do{if((au&2|0)==0){a_=a;a$=b}else{aA=+P(+at)>=2.220446049250313e-16;if(!(aA&(c[12912]|0)!=0)){a_=a;a$=b;break}a_=a-az|0;a$=b-ay|0}}while(0);do{if((au&1|0)==0){a0=d;a1=e}else{b=+P(+at)>=2.220446049250313e-16;if(!(b&(c[12912]|0)!=0)){a0=d;a1=e;break}a0=az+d|0;a1=ay+e|0}}while(0);c[ak>>2]=a_;c[al>>2]=a$;c[am>>2]=a0;c[an>>2]=a1;a1=c[3524]|0;if((fl(ak,al,am,an)|0)==0){c[13542]=av;i=g;return}cN[c[a1+56>>2]&255](c[ak>>2]|0,c[al>>2]|0);cN[c[a1+60>>2]&255](c[am>>2]|0,c[an>>2]|0);c[13542]=av;i=g;return}function lE(){var b=0,d=0,e=0,f=0,g=0,h=0;b=i;d=bU(215528)|0;do{if((d|0)!=0){if((a[d]|0)==0){break}e=uA(d|0)|0;f=e6(215528)|0;g=bP(d|0)|0;c[f+16>>2]=3;c[f+24>>2]=g;a[f+8|0]=0;f=a8(d|0,32)|0;if((f|0)==0){h=e}else{h=f-d|0}if((lx(d,h)|0)==0){f=c[m>>2]|0;cf(f|0,220472,(v=i,i=i+8|0,c[v>>2]=d,v)|0);break}f=c[3524]|0;if((aY(c[f>>2]|0,222936)|0)==0){i=b;return}cS[c[f+32>>2]&511]();i=b;return}}while(0);lx(225016,7);i=b;return}function lF(b){b=b|0;var d=0;d=c[11232]|0;c[11232]=d+1;a[d]=b&255;return}function lG(){var b=0,d=0,e=0,f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0.0,T=0,U=0,V=0,W=0.0,X=0,Y=0,Z=0,_=0,$=0,ab=0,ac=0,ad=0,ae=0,af=0.0,ag=0,ah=0.0,ai=0.0,aj=0.0,ak=0;b=i;i=i+224|0;d=b|0;e=b+16|0;f=b+72|0;j=b+136|0;k=c[3524]|0;l=k+96|0;m=(c[l>>2]&32|0)!=0;if(!m){dL(bP(218776)|0)}if((a[14080]&1)==0){lk()}do{if(a[14088]|0){if((a[33512]&1)==0){break}if(!(a[13032]|0)){break}n=c[(c[3524]|0)+104>>2]|0;if((n|0)!=0){cS[n&511]()}a[13032]=0}else{cS[c[(c[3524]|0)+52>>2]&511]();a[14088]=1}}while(0);cM[c[(c[3524]|0)+168>>2]&511](0);n=c[3524]|0;if((c[n+96>>2]&16|0)!=0){c[7271]=-1}c[13880]=0;c[13881]=(c[n+8>>2]|0)-1;c[13882]=0;c[13883]=(c[n+12>>2]|0)-1;a[25280]=0;n=~~(+((c[k+8>>2]|0)>>>0>>>0)*+g[178]);o=~~(+((c[k+12>>2]|0)>>>0>>>0)*+g[38]);p=+h[3817];q=k+28|0;r=~~(p*+((c[q>>2]|0)>>>0>>>0));s=k+24|0;t=~~(p*+((c[s>>2]|0)>>>0>>>0)*1.25);u=k+16|0;w=c[u>>2]|0;x=t>>>0<w>>>0?w:t;cM[c[k+168>>2]&511](2);t=k+112|0;cK[c[t>>2]&63](1.0);w=k+64|0;cM[c[w>>2]&511](-2);y=k+56|0;cN[c[y>>2]&255](0,0);z=k+60|0;A=n-1|0;cN[c[z>>2]&255](A,0);B=o-1|0;cN[c[z>>2]&255](A,B);cN[c[z>>2]&255](0,B);cN[c[z>>2]&255](0,0);cM[c[w>>2]&511](0);C=c[c[3524]>>2]|0;if((aY(C|0,225016)|0)==0){uf(-1,218360,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}D=f|0;uB(D|0,C|0);uD(f+(uA(D|0)|0)|0,217760,16);f=k+76|0;cO[c[f>>2]&255](0);C=k+68|0;E=k+20|0;p=+(o>>>0>>>0);cR[c[C>>2]&127](c[E>>2]<<1,~~(p- +((c[u>>2]|0)>>>0>>>0)*.5),D);if((c[k+124>>2]|0)!=0){cR[c[C>>2]&127]((c[E>>2]|0)*5&-1,((c[u>>2]|0)*-3&-1)+o|0,217152)}cM[c[w>>2]&511](-2);cM[c[w>>2]&511](-1);D=n>>>1;cN[c[y>>2]&255](D,0);cN[c[z>>2]&255](D,B);F=o>>>1;cN[c[y>>2]&255](0,F);cN[c[z>>2]&255](A,F);cM[c[w>>2]&511](3);cN[c[y>>2]&255](((c[E>>2]|0)*-10&-1)+D|0,((c[u>>2]|0)>>>1)+F|0);cN[c[z>>2]&255](((c[E>>2]|0)*10&-1)+D|0,((c[u>>2]|0)>>>1)+F|0);cN[c[z>>2]&255](((c[E>>2]|0)*10&-1)+D|0,F-((c[u>>2]|0)>>>1)|0);cN[c[z>>2]&255](((c[E>>2]|0)*-10&-1)+D|0,F-((c[u>>2]|0)>>>1)|0);cN[c[z>>2]&255](((c[E>>2]|0)*-10&-1)+D|0,((c[u>>2]|0)>>>1)+F|0);cR[c[C>>2]&127](((c[E>>2]|0)*-10&-1)+D|0,F,216528);cR[c[C>>2]&127](((c[E>>2]|0)*-10&-1)+D|0,~~(+(F>>>0>>>0)+ +((c[u>>2]|0)>>>0>>>0)*1.4),216048);cM[c[w>>2]&511](-2);do{if((c[l>>2]&32|0)!=0){A=bP(215568)|0;cR[c[C>>2]&127](~~(+(n>>>0>>>0)*.5),~~(p*.4),A);uu(A);if(m){break}dL(bP(215048)|0)}}while(0);cO[c[f>>2]&255](0);cR[c[C>>2]&127](D,((c[u>>2]|0)*6&-1)+F|0,214488);m=(cO[c[f>>2]&255](1)|0)==0;l=c[C>>2]|0;if(m){cR[l&127](D-(((c[E>>2]|0)*13&-1)>>>1)|0,((c[u>>2]|0)*5&-1)+F|0,213832)}else{cR[l&127](D,((c[u>>2]|0)*5&-1)+F|0,213832)}l=(cO[c[f>>2]&255](2)|0)==0;m=c[C>>2]|0;if(l){cR[m&127](((c[E>>2]|0)*-15&-1)+D|0,(c[u>>2]<<2)+F|0,213336)}else{cR[m&127](D,(c[u>>2]<<2)+F|0,213336)}cM[c[w>>2]&511](1);m=k+72|0;l=(cO[c[m>>2]&255](-270)|0)==0;A=c[f>>2]|0;if(l){cO[A&255](0);cR[c[C>>2]&127](c[E>>2]<<1,F-(c[u>>2]<<1)|0,211168)}else{l=(cO[A&255](1)|0)==0;A=c[C>>2]|0;G=c[u>>2]|0;if(l){cR[A&127](G,F-(((c[E>>2]|0)*21&-1)>>>1)|0,212752)}else{cR[A&127](G,F,212752)}G=c[f>>2]|0;cO[G&255](0);G=c[m>>2]|0;cO[G&255](45);cR[c[C>>2]&127]((c[u>>2]|0)*3&-1,F,212104);G=c[f>>2]|0;cO[G&255](0);G=c[m>>2]|0;cO[G&255](-45);cR[c[C>>2]&127](c[u>>2]<<1,F,211576)}cO[c[f>>2]&255](0);cO[c[m>>2]&255](0);cM[c[w>>2]&511](-2);cM[c[w>>2]&511](4);H=+(D>>>0>>>0);cN[c[y>>2]&255](~~(H+ +((c[q>>2]|0)>>>0>>>0)*(+h[8304]+1.0)),B);I=+h[8304];cN[c[z>>2]&255](~~(H+ +((c[q>>2]|0)>>>0>>>0)*(I+1.0)),~~(p-I*+((c[s>>2]|0)>>>0>>>0)));cN[c[y>>2]&255](D,~~(p- +((c[s>>2]|0)>>>0>>>0)*(+h[8304]+1.0)));I=+h[8304];cN[c[z>>2]&255](~~(H+I*+((c[q>>2]|0)>>>0>>>0)),~~(p-(I+1.0)*+((c[s>>2]|0)>>>0>>>0)));B=(cO[c[f>>2]&255](2)|0)==0;m=c[C>>2]|0;F=c[E>>2]|0;if(B){cR[m&127]((F*-14&-1)+D|0,(o-(c[s>>2]<<1)|0)-((c[u>>2]|0)>>>1)|0,210688)}else{cR[m&127](D-F|0,(o-(c[s>>2]<<1)|0)-((c[u>>2]|0)>>>1)|0,210688)}cO[c[f>>2]&255](0);cM[c[w>>2]&511](-2);F=(n-r|0)+((c[E>>2]|0)*-6&-1)|0;cK[c[k+92>>2]&63](+h[3817]);D=o-x|0;if((D|0)>(x|0)){m=d|0;B=d+4|0;G=d+8|0;A=e|0;l=k+80|0;J=(r|0)/2&-1;r=-2;K=D;while(1){D=r+1|0;L=c[8798]|0;M=(L|0)>0;N=D;L15390:while(1){O=43264;while(1){P=c[O>>2]|0;if((P|0)==0){break}if((c[P+4>>2]|0)==(N|0)){Q=11322;break L15390}else{O=P|0}}O=N-1|0;if(!((N|0)>(L|0)&M)){R=O;S=1.0;T=0;U=1;V=O;W=0.0;break}N=((O|0)%(L|0)&-1)+1|0}do{if((Q|0)==11322){Q=0;L=c[P+12>>2]|0;I=+h[P+24>>3];M=c[P+48>>2]|0;O=c[P+52>>2]|0;H=+h[P+56>>3];if((c[(c[3524]|0)+96>>2]&1024|0)!=0){R=N;S=I;T=0;U=M;V=O;W=H;break}X=a[P+40|0]&1;Y=X<<24>>24==0;R=L;S=I;T=X;U=Y?1:M;V=Y?L:O;W=H}}while(0);c[m>>2]=U;c[B>>2]=V;h[G>>3]=W;cK[c[(c[3524]|0)+112>>2]&63](S);N=c[(c[3524]|0)+64>>2]|0;if((R|0)<-5){cM[N&511](-2)}else{cM[N&511](R)}N=c[3524]|0;do{if(T<<24>>24==0){if((c[N+96>>2]&1024|0)!=0){break}c[m>>2]=1;c[B>>2]=R;Q=11332}else{Q=11332}}while(0);if((Q|0)==11332){Q=0;fn(d,N)}be(A|0,21e4,(v=i,i=i+8|0,c[v>>2]=D,v)|0);O=(cO[c[f>>2]&255](2)|0)==0;L=c[C>>2]|0;if(O){O=uA(A|0)|0;Y=F-aa(c[E>>2]|0,O)|0;cR[L&127](Y,K,A)}else{cR[L&127](F,K,A)}cN[c[y>>2]&255]((c[E>>2]|0)+F|0,K);cN[c[z>>2]&255]((c[E>>2]<<2)+F|0,K);if((r|0)>-2){cR[c[l>>2]&127]((((c[E>>2]|0)*5&-1)+F|0)+J|0,K,r)}L=K-x|0;if((L|0)>(x|0)){r=D;K=L}else{Z=A;break}}}else{Z=e|0}cK[c[t>>2]&63](1.0);cM[c[w>>2]&511](0);S=+(n>>>0>>>0);e=~~(S*.375);A=~~(p*.25);K=(c[q>>2]|0)*7&-1;r=(c[s>>2]|0)*7&-1;x=c[12912]|0;c[12912]=0;J=k+84|0;cI[c[J>>2]&63](e,A,K+e|0,A,1);c[12912]=1;cI[c[J>>2]&63](e,A,e-K|0,A,1);c[12912]=2;cI[c[J>>2]&63](e,A,e,r+A|0,1);c[12912]=1;cI[c[J>>2]&63](e,A,e,A-r|0,1);c[12912]=x;x=(c[q>>2]|0)*5&-1;q=(c[s>>2]|0)*5&-1;s=e-x|0;r=A-q|0;K=x+e|0;x=q+A|0;cI[c[J>>2]&63](s,r,K,x,3);cI[c[J>>2]&63](s,x,e,A,0);c[12912]=1;cI[c[J>>2]&63](e,A,K,r,2);cO[c[f>>2]&255](0);r=(o>>>0)/25>>>0;K=~~(S*.075);A=((n>>>0)/10>>>0)+K|0;e=1;J=r;while(1){cK[c[t>>2]&63](+(e|0));cM[c[w>>2]&511](-2);cN[c[y>>2]&255](K,J);cN[c[z>>2]&255](A,J);be(Z|0,209288,(v=i,i=i+16|0,c[v>>2]=e,c[v+8>>2]=0,v)|0);cR[c[C>>2]&127](A,J,Z);x=e+1|0;if((x|0)<7){e=x;J=J+r|0}else{break}}cR[c[C>>2]&127](K,r*7&-1,208960);r=~~(S*.5);K=(n>>>0)/40>>>0;J=o>>>3;cK[c[t>>2]&63](1.0);cM[c[w>>2]&511](-2);cO[c[f>>2]&255](1);W=+(J|0);cR[c[C>>2]&127]((K*7&-1)+r|0,~~(W+ +((c[u>>2]|0)>>>0>>>0)*1.5),208328);t=k+108|0;o=(n>>>0)/80>>>0;H=+(K|0)*1.5;e=0;A=r;while(1){r=c[t>>2]|0;if((r|0)!=0){cI[r&63](e<<4|2,A,0,K,J)}cN[c[y>>2]&255](A,0);cN[c[z>>2]&255](A,J);r=A+K|0;cN[c[z>>2]&255](r,J);cN[c[z>>2]&255](r,0);cN[c[z>>2]&255](A,0);be(Z|0,207744,(v=i,i=i+8|0,c[v>>2]=e,v)|0);cR[c[C>>2]&127](o+A|0,~~(W+ +((c[u>>2]|0)>>>0>>>0)*.5),Z);r=e+1|0;if((r|0)<10){e=r;A=~~(H+ +(A|0))}else{break}}A=~~(S*.7);e=~~(p*.83);Z=(n>>>0)/20>>>0;if((c[k+148>>2]|0)==0){_=206240}else{p=+(Z|0);k=j|0;n=j|0;o=j+72|0;z=j+4|0;J=j+76|0;K=j+8|0;y=0;while(1){t=aa(y,Z);S=+(t+A|0);H=+(e-((t|0)/2&-1)|0);t=~~(S+p);c[n>>2]=t;r=~~(H+p*0.0);c[z>>2]=r;c[j+12>>2]=~~(S+p*.5000000000000001);c[j+16>>2]=~~(H+p*.8660254037844386);c[j+24>>2]=~~(S+p*-.4999999999999998);c[j+28>>2]=~~(H+p*.8660254037844387);c[j+36>>2]=~~(S+p*-1.0);c[j+40>>2]=~~(H+p*1.2246467991473532e-16);c[j+48>>2]=~~(S+p*-.5000000000000004);c[j+52>>2]=~~(H+p*-.8660254037844384);c[j+60>>2]=~~(S+p*.5000000000000001);c[j+64>>2]=~~(H+p*-.8660254037844386);c[o>>2]=t;c[J>>2]=r;r=c[w>>2]|0;if((y|0)==0){cM[r&511](2);$=1601}else{cM[r&511](1);$=804}c[K>>2]=$;cN[c[(c[3524]|0)+148>>2]&255](7,k);r=y+1|0;if((r|0)<2){y=r}else{_=206944;break}}}cM[c[w>>2]&511](-2);if((cO[c[f>>2]&255](1)|0)!=0){ab=0;ac=c[C>>2]|0;ad=ab+A|0;ae=Z+e|0;af=+(ae|0);ag=c[u>>2]|0;ah=+(ag>>>0>>>0);ai=ah*.5;aj=af+ai;ak=~~aj;cR[ac&127](ad,ak,_);lh();i=b;return}f=c[E>>2]|0;ab=aa(uA(_|0)|0,f)>>>1;ac=c[C>>2]|0;ad=ab+A|0;ae=Z+e|0;af=+(ae|0);ag=c[u>>2]|0;ah=+(ag>>>0>>>0);ai=ah*.5;aj=af+ai;ak=~~aj;cR[ac&127](ad,ak,_);lh();i=b;return}function lH(b,d,e,f,g,i){b=b|0;d=+d;e=+e;f=f|0;g=g|0;i=i|0;var j=0.0;if((i|0)==4){h[29743]=+h[29742];h[29741]=+h[29740];return}else if((i|0)==3){h[29742]=+h[29743];h[29740]=+h[29741];return}else{if(a[237976]|0){return}a[237976]=1;h[29750]=0.0;h[29751]=d>2.0?1.0:d;h[29752]=e;j=d+e;if(+h[29749]<j){h[29749]=j}if(+h[29748]>e){h[29748]=e}c[59492]=i;a[237952]=f&1;return}}function lI(){var b=0.0,d=0.0,e=0.0;b=+h[29750];if(!(a[237976]|0)){return}h[29750]=0.0;do{if((a[237952]&1)==0){d=+h[29743]}else{if((c[59492]|0)==1){e=b*.5+ +h[29743];h[29743]=e;d=e;break}else{e=b+ +h[29743];h[29743]=e;d=e;break}}}while(0);b=+h[29745];h[29745]=b>d?b:d;a[237976]=0;return}function lJ(b,d,e,f,g,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;g=+g;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0.0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0,D=0,E=0,F=0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0.0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0.0,_=0,$=0.0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0;m=i;i=i+48|0;n=m|0;o=m+8|0;p=m+16|0;q=m+40|0;r=q;c[n>>2]=b;cS[c[(c[3524]|0)+160>>2]&511]();s=f+g;if(s>+h[5612]){h[5612]=s}if(+h[5611]>g){h[5611]=g}b=c[n>>2]|0;t=a[b]|0;L15478:do{if(t<<24>>24!=0){s=f*.8;u=f;w=q;x=r+1|0;y=r+2|0;z=m+24|0;A=l;B=g;C=b;D=t;L15480:while(1){E=c[11252]|0;do{if(D<<24>>24<0){if(!((E|0)==15|(E|0)==0)){F=11393;break}c[p>>2]=C;cJ[c[(c[3524]|0)+156>>2]&15](e,f,B,j,k,A);if(!(ug(o,p)|0)){cM[c[(c[3524]|0)+164>>2]&511](a[c[n>>2]|0]|0);G=B;H=A;break}I=c[n>>2]|0;J=c[p>>2]|0;if(I>>>0<J>>>0){K=I;while(1){L=c[(c[3524]|0)+164>>2]|0;c[n>>2]=K+1;cM[L&511](a[K]|0);L=c[n>>2]|0;if(L>>>0<J>>>0){K=L}else{M=L;break}}}else{M=I}c[n>>2]=M-1;G=B;H=A}else{F=11393}}while(0);L15492:do{if((F|0)==11393){F=0;K=D<<24>>24;if((K&128|0)!=0&(E|0)==14){cJ[c[(c[3524]|0)+156>>2]&15](e,f,B,j,k,A);J=c[(c[3524]|0)+164>>2]|0;L=c[n>>2]|0;c[n>>2]=L+1;cM[J&511](a[L]|0);cM[c[(c[3524]|0)+164>>2]&511](a[c[n>>2]|0]|0);G=B;H=A;break}do{if((K|0)==125){F=11396;break L15480}else if((K|0)==64){cS[c[(c[3524]|0)+160>>2]&511]();cJ[c[(c[3524]|0)+156>>2]&15](e,f,B,j,k,3);L=(c[n>>2]|0)+1|0;c[n>>2]=L;c[n>>2]=lJ(L,0,e,f,B,j,k,A)|0;cJ[c[(c[3524]|0)+156>>2]&15](e,f,B,j,k,4);G=B;H=A;break L15492}else if((K|0)==38){cS[c[(c[3524]|0)+160>>2]&511]();L=(c[n>>2]|0)+1|0;c[n>>2]=L;c[n>>2]=lJ(L,0,e,f,B,j,0,A)|0;G=B;H=A;break L15492}else if((K|0)==40|(K|0)==41){cJ[c[(c[3524]|0)+156>>2]&15](e,f,B,j,k,A);L=c[3524]|0;if((c[L+96>>2]&16|0)==0){N=L}else{cM[c[L+164>>2]&511](92);N=c[3524]|0}cM[c[N+164>>2]&511](a[c[n>>2]|0]|0);G=B;H=A;break L15492}else if((K|0)==123){L=C;do{L=L+1|0;c[n>>2]=L;}while((a[L]|0)==32);do{if((A|0)==2){O=+uz(L,n);P=u*O;if((c[(c[3524]|0)+96>>2]&16|0)!=0){Q=P;break}Q=B+P}else{Q=B}}while(0);L=c[n>>2]|0;if((a[L]|0)==47){J=L;while(1){R=J+1|0;c[n>>2]=R;S=a[R]|0;if((S<<24>>24|0)==45){T=R;F=11405;break}else if((S<<24>>24|0)==32){J=R}else{U=R;V=S;break}}if((F|0)==11405){while(1){F=0;J=T+1|0;c[n>>2]=J;S=a[J]|0;if(S<<24>>24==32){T=J;F=11405}else{U=J;V=S;break}}}L15518:do{if(V<<24>>24<33){W=U;X=V}else{S=V;J=U;while(1){if((S<<24>>24|0)==61|(S<<24>>24|0)==42|(S<<24>>24|0)==125){W=J;X=S;break L15518}R=J+1|0;c[n>>2]=R;Y=a[R]|0;if(Y<<24>>24<33){W=R;X=Y;break}else{S=Y;J=R}}}}while(0);do{if((X<<24>>24|0)==61){c[n>>2]=W+1;a[W]=0;P=+uz(c[n>>2]|0,n);if(P==0.0){Z=u;break}Z=P*+h[5613]}else if((X<<24>>24|0)==125){uh(-1,204816,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);J=c[n>>2]|0;c[n>>2]=J+1;a[J]=0;Z=u}else if((X<<24>>24|0)==42){c[n>>2]=W+1;a[W]=0;P=+uz(c[n>>2]|0,n);if(P==0.0){Z=u;break}Z=P*f}else{c[n>>2]=W+1;a[W]=0;Z=u}}while(0);J=c[n>>2]|0;if((a[J]|0)==32){S=J;while(1){R=S+1|0;c[n>>2]=R;if((a[R]|0)==32){S=R}else{_=R;break}}}else{_=J}$=Z;aa=(a[U]|0)==0?e:U;ab=X;ac=W;ad=_}else{$=u;aa=e;ab=0;ac=0;ad=L}c[n>>2]=lJ(ad,1,aa,$,Q,j,k,A)|0;cS[c[(c[3524]|0)+160>>2]&511]();if((ac|0)==0){G=Q;H=A;break L15492}a[ac]=ab;G=Q;H=A;break L15492}else if((K|0)==95|(K|0)==94){cS[c[(c[3524]|0)+160>>2]&511]();c[n>>2]=lJ((c[n>>2]|0)+1|0,0,e,s,B+(D<<24>>24==94?.5:-.30000001192092896)*f,j,k,A)|0;G=B;H=A;break L15492}else if((K|0)==126){cS[c[(c[3524]|0)+160>>2]&511]();S=(c[n>>2]|0)+1|0;c[n>>2]=S;c[n>>2]=lJ(S,0,e,f,B,j,k,1)|0;cS[c[(c[3524]|0)+160>>2]&511]();S=c[n>>2]|0;if((a[S]|0)==0){G=B;H=A;break L15492}R=S+1|0;c[n>>2]=R;c[n>>2]=lJ(R,0,e,f,B,0,k,2)|0;G=B;H=0;break L15492}else if((K|0)==92){R=a[C+1|0]|0;if((R-48&255)<8){c[q>>2]=0;cJ[c[(c[3524]|0)+156>>2]&15](e,f,B,j,k,A);S=c[n>>2]|0;Y=S+1|0;c[n>>2]=Y;a[w]=a[Y]|0;Y=S+2|0;do{if(((a[Y]|0)-48&255)<8){c[n>>2]=Y;a[x]=a[Y]|0;ae=S+3|0;if(((a[ae]|0)-48&255)>=8){break}c[n>>2]=ae;a[y]=a[ae]|0}}while(0);S=aE(w|0,0,8)|0;be(z|0,44912,(v=i,i=i+8|0,c[v>>2]=S,v)|0);S=a[z]|0;if(S<<24>>24==0){G=B;H=A;break L15492}else{af=z;ag=S}while(1){cM[c[(c[3524]|0)+164>>2]&511](ag<<24>>24);S=af+1|0;Y=a[S]|0;if(Y<<24>>24==0){G=B;H=A;break L15492}else{af=S;ag=Y}}}Y=c[3524]|0;do{if((c[Y+96>>2]&16|0)==0){ah=C}else{if((R<<24>>24|0)==92|(R<<24>>24|0)==40|(R<<24>>24|0)==41){cJ[c[Y+156>>2]&15](e,f,B,j,k,A);cM[c[(c[3524]|0)+164>>2]&511](92);ah=c[n>>2]|0;break}if((aZ(204560,R<<24>>24|0,8)|0)!=0){ah=C;break}cJ[c[Y+156>>2]&15](e,f,B,j,k,A);cM[c[(c[3524]|0)+164>>2]&511](92);cM[c[(c[3524]|0)+164>>2]&511](92);G=B;H=A;break L15492}}while(0);Y=ah+1|0;c[n>>2]=Y;R=a[Y]|0;if(R<<24>>24==0){uh(-1,204288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);G=B;H=A;break L15492}if(!(R<<24>>24==38&(c[11252]|0)==0)){break}R=c[3524]|0;if((aY(c[R>>2]|0,204032)|0)!=0){break}cJ[c[R+156>>2]&15](e,f,B,j,k,A);cM[c[(c[3524]|0)+164>>2]&511](-2);G=B;H=A;break L15492}}while(0);cJ[c[(c[3524]|0)+156>>2]&15](e,f,B,j,k,A);cM[c[(c[3524]|0)+164>>2]&511](a[c[n>>2]|0]|0);G=B;H=A}}while(0);if(!d){break}E=c[n>>2]|0;if((a[E]|0)==0){break L15478}K=E+1|0;c[n>>2]=K;E=a[K]|0;if(E<<24>>24==0){break L15478}else{A=H;B=G;C=K;D=E}}do{if((F|0)==11396){if(d){ai=C;i=m;return ai|0}else{uh(-1,205424,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);break}}}while(0);cS[c[(c[3524]|0)+160>>2]&511]();ai=c[n>>2]|0;i=m;return ai|0}}while(0);cS[c[(c[3524]|0)+160>>2]&511]();ai=c[n>>2]|0;i=m;return ai|0}function lK(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=b|0;f=c[e>>2]|0;g=43280;while(1){h=c[g>>2]|0;if((h|0)==0){break}if((c[h+4>>2]|0)==(d|0)){i=11457;break}else{g=h|0}}if((i|0)==11457){g=b;j=h+8|0;c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];c[g+16>>2]=c[j+16>>2];c[g+20>>2]=c[j+20>>2];c[g+24>>2]=c[j+24>>2];c[g+28>>2]=c[j+28>>2];c[g+32>>2]=c[j+32>>2];c[g+36>>2]=c[j+36>>2];c[g+40>>2]=c[j+40>>2];c[g+44>>2]=c[j+44>>2];c[g+48>>2]=c[j+48>>2];c[g+52>>2]=c[j+52>>2];c[e>>2]=f;if((a[b+32|0]&1)!=0){return}c[b+40>>2]=1;c[b+44>>2]=c[b+4>>2];return}j=c[8798]|0;g=(j|0)>0;h=d;L15586:while(1){d=43264;while(1){k=c[d>>2]|0;if((k|0)==0){break}if((c[k+4>>2]|0)==(h|0)){break L15586}else{d=k|0}}l=h-1|0;if(!((h|0)>(j|0)&g)){i=11469;break}h=((l|0)%(j|0)&-1)+1|0}if((i|0)==11469){c[b+4>>2]=l;c[b+40>>2]=1;c[b+44>>2]=l;c[b+8>>2]=l;return}l=b;i=k+8|0;c[l>>2]=c[i>>2];c[l+4>>2]=c[i+4>>2];c[l+8>>2]=c[i+8>>2];c[l+12>>2]=c[i+12>>2];c[l+16>>2]=c[i+16>>2];c[l+20>>2]=c[i+20>>2];c[l+24>>2]=c[i+24>>2];c[l+28>>2]=c[i+28>>2];c[l+32>>2]=c[i+32>>2];c[l+36>>2]=c[i+36>>2];c[l+40>>2]=c[i+40>>2];c[l+44>>2]=c[i+44>>2];c[l+48>>2]=c[i+48>>2];c[l+52>>2]=c[i+52>>2];c[e>>2]=f;if((c[(c[3524]|0)+96>>2]&1024|0)!=0){c[b+4>>2]=h;a[b+32|0]=0;return}if((a[b+32|0]&1)!=0){return}c[b+40>>2]=1;c[b+44>>2]=c[b+4>>2];return}function lL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0.0,l=0,m=0,n=0;f=i;h[29751]=1.0;a[237976]=0;h[29749]=1.0;h[29748]=0.0;h[29745]=0.0;uF(44912,202200,16);do{if((a[37456]&1)==0){if((cy(e|0,201600)|0)==0){break}h[29743]=+(b>>>0>>>0);h[29741]=+(d>>>0>>>0);g=e;do{j=lJ(g,1,179864,+h[29751],0.0,1,1,0)|0;if((a[j]|0)==0){break}cS[c[(c[3524]|0)+160>>2]&511]();if((a[j]|0)==125){uh(-1,203744,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{uh(-1,203528,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=j+1|0;}while((a[g]|0)!=0);k=+h[29743];if(k>0.0&k<1.0){h[29743]=1.0}c[(c[3524]|0)+8>>2]=~~+h[29745];c[(c[3524]|0)+12>>2]=~~((+h[29749]- +h[29748])*10.0+.5);i=f;return}}while(0);if((c[11252]|0)==15){d=a[e]|0;if(d<<24>>24==0){l=0}else{b=0;g=0;j=d;while(1){if((j&-64)<<24>>24==-128){m=g}else{m=((j&255)>226?2:1)+g|0}d=b+1|0;n=a[e+d|0]|0;if(n<<24>>24==0){l=m;break}else{b=d;g=m;j=n}}}c[(c[3524]|0)+8>>2]=l}else{l=uA(e|0)|0;c[(c[3524]|0)+8>>2]=l}c[(c[3524]|0)+12>>2]=10;i=f;return}function lM(){a[13048|0]=0;return}function lN(){return}function lO(a,b){a=a|0;b=b|0;return}function lP(a){a=a|0;return}function lQ(a,b,c){a=a|0;b=b|0;c=c|0;return}function lR(a){a=a|0;c[59236]=a;return 1}function lS(a){a=a|0;c[56732]=a;return 1}function lT(b){b=b|0;var d=0.0,e=0.0,f=0.0;if((b|0)==10){d=+h[29750];if(a[237976]|0){h[29750]=0.0;do{if((a[237952]&1)==0){e=+h[29743]}else{if((c[59492]|0)==1){f=d*.5+ +h[29743];h[29743]=f;e=f;break}else{f=d+ +h[29743];h[29743]=f;e=f;break}}}while(0);d=+h[29745];h[29745]=d>e?d:e;a[237976]=0}a[237976]=1;e=+h[29751];h[29748]=+h[29748]-e;h[29752]=+h[29752]-e;h[29743]=0.0}if((c[11252]|0)!=15){h[29750]=+h[29751]+ +h[29750];return}if((b&192|0)==128){return}e=+h[29751];d=e+ +h[29750];h[29750]=d;if(b>>>0<=235){return}h[29750]=d+e;return}function lU(a){a=a|0;var b=0;b=(a|0)<-2?-2:a;c[59226]=b>>>0>3?b&3:b;return}function lV(){c[59226]=3;aI(152264,54,1,c[10030]|0);return}function lW(){aD(c[10030]|0);return}function lX(){var a=0;if((c[59234]|0)>0){a=c[10030]|0;aI(152912,16,1,a|0);c[59234]=0}aI(152336,4,1,c[10030]|0);return}function lY(){var a=0,b=0,d=0.0;a=i;b=c[3524]|0;d=+((c[b+12>>2]|0)>>>0>>>0)/300.0;cf(c[10030]|0,152464,(v=i,i=i+16|0,h[v>>3]=+((c[b+8>>2]|0)>>>0>>>0)/300.0,h[v+8>>3]=d,v)|0);d=+g[59222];cf(c[10030]|0,152432,(v=i,i=i+16|0,h[v>>3]=+g[59224],h[v+8>>3]=d,v)|0);i=a;return}function lZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((c[59234]|0)>0){e=c[10030]|0;aI(152912,16,1,e|0);c[59234]=0}cf(c[10030]|0,152480,(v=i,i=i+16|0,h[v>>3]=+(a>>>0>>>0)/300.0,h[v+8>>3]=+(b>>>0>>>0)/300.0,v)|0);c[59234]=1;i=d;return}function l_(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,j=0.0,k=0,l=0;d=i;e=c[10030]|0;if((c[59234]|0)==1){f=c[236912+((c[59226]|0)+2<<2)>>2]|0;g=+(a>>>0>>>0)/300.0;j=+(b>>>0>>>0)/300.0;cf(e|0,152664,(v=i,i=i+24|0,c[v>>2]=f,h[v+8>>3]=g,h[v+16>>3]=j,v)|0);k=c[59234]|0;l=k+1|0;c[59234]=l;i=d;return}else{j=+(a>>>0>>>0)/300.0;g=+(b>>>0>>>0)/300.0;cf(e|0,152624,(v=i,i=i+16|0,h[v>>3]=j,h[v+8>>3]=g,v)|0);k=c[59234]|0;l=k+1|0;c[59234]=l;i=d;return}}function l$(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;if((c[59234]|0)>0){f=c[10030]|0;aI(152912,16,1,f|0);c[59234]=0}cf(c[10030]|0,103640,(v=i,i=i+8|0,c[v>>2]=d,v)|0);d=c[59236]|0;if((d|0)==1){f=c[10030]|0;aF(32,f|0)}else if((d|0)==0){aI(152848,6,1,c[10030]|0)}else if((d|0)==2){aI(152840,6,1,c[10030]|0)}cf(c[10030]|0,152712,(v=i,i=i+16|0,h[v>>3]=+(a>>>0>>>0)/300.0,h[v+8>>3]=+(b>>>0>>>0)/300.0,v)|0);i=e;return}function l0(a){a=a|0;if((c[59234]|0)<=0){return 0}aI(152912,16,1,c[10030]|0);c[59234]=0;return 0}function l1(a,b,d){a=a|0;b=b|0;d=d|0;cM[c[(c[3524]|0)+64>>2]&511](0);ly(a,b,d);return}function l2(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0.0,l=0.0,m=0.0,n=0.0;g=i;if((c[59234]|0)>0){j=c[10030]|0;aI(152912,16,1,j|0);c[59234]=0}j=c[10030]|0;k=+(a>>>0>>>0)/300.0;l=+(b>>>0>>>0)/300.0;m=+(d>>>0>>>0)/300.0;n=+(e>>>0>>>0)/300.0;if((f|0)==0){cf(j|0,152984,(v=i,i=i+32|0,h[v>>3]=k,h[v+8>>3]=l,h[v+16>>3]=m,h[v+24>>3]=n,v)|0);i=g;return}else{cf(j|0,153024,(v=i,i=i+32|0,h[v>>3]=k,h[v+8>>3]=l,h[v+16>>3]=m,h[v+24>>3]=n,v)|0);i=g;return}}function l3(){aI(153080,10,1,c[10030]|0);return}function l4(){aI(153112,11,1,c[10030]|0);return}function l5(){aI(153144,9,1,c[10030]|0);return}function l6(){aI(153304,23,1,c[10030]|0);c[57146]=0;aI(153392,9,1,c[10030]|0);return}function l7(a,b){a=a|0;b=b|0;var d=0;d=i;cf(c[10030]|0,153328,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=439-b,v)|0);i=d;return}function l8(a,b){a=a|0;b=b|0;var d=0;d=i;cf(c[10030]|0,153344,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=439-b,v)|0);i=d;return}function l9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=i;d=(a|0)<-2?-2:a;if((c[57208]|0)==0){if((d|0)>8){e=(d|0)%9&-1}else{e=d}a=c[10030]|0;f=e+2|0;e=c[228712+(f<<2)>>2]|0;cf(a|0,153376,(v=i,i=i+8|0,c[v>>2]=e,v)|0);e=c[10030]|0;a=c[228592+(f<<2)>>2]|0;cf(e|0,153368,(v=i,i=i+8|0,c[v>>2]=a,v)|0);i=b;return}else{if((d|0)>14){g=(d|0)%15&-1}else{g=d}d=c[10030]|0;a=g+2|0;g=c[228760+(a<<2)>>2]|0;cf(d|0,153376,(v=i,i=i+8|0,c[v>>2]=g,v)|0);g=c[10030]|0;d=c[228640+(a<<2)>>2]|0;cf(g|0,153368,(v=i,i=i+8|0,c[v>>2]=d,v)|0);i=b;return}}function ma(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;f=i;if((c[57146]|0)==1){g=b-11|0;h=c[10030]|0;j=439-d|0;cf(h|0,153328,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=j,v)|0)}else{j=c[10030]|0;g=430-d|0;cf(j|0,153328,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=g,v)|0)}aF(84,c[10030]|0);aF(39,c[10030]|0);g=a[e]|0;if(g<<24>>24==0){k=c[10030]|0;l=aF(39,k|0)|0;m=c[10030]|0;n=aF(10,m|0)|0;i=f;return}else{o=e;p=g}do{aF(p<<24>>24|0,c[10030]|0);if((a[o]|0)==39){g=c[10030]|0;aF(39,g|0)}o=o+1|0;p=a[o]|0;}while(p<<24>>24!=0);k=c[10030]|0;l=aF(39,k|0)|0;m=c[10030]|0;n=aF(10,m|0)|0;i=f;return}function mb(a){a=a|0;var b=0;b=(a|0)!=0;c[57146]=b&1;a=c[10030]|0;if(b){aI(153416|0,10,1,a|0);return 1}else{aI(153392|0,9,1,a|0);return 1}return 0}function mc(){aI(153552,24,1,c[10030]|0);aI(153520,20,1,c[10030]|0);aD(c[10030]|0);return}function md(){aI(153584,13,1,c[10030]|0);aD(c[10030]|0);return}function me(){aI(153704,9,1,c[10030]|0);aD(c[10030]|0);return}function mf(){aI(153720,11,1,c[10030]|0);aD(c[10030]|0);return}function mg(a,b){a=a|0;b=b|0;aI(153736,3,1,c[10030]|0);t0(a,b);aD(c[10030]|0);return}function mh(a,b){a=a|0;b=b|0;aI(153760,3,1,c[10030]|0);t0(a,b);aD(c[10030]|0);return}function mi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;b=(a|0)<-2?-2:a;if((b|0)==(-1|0)){a=c[10030]|0;aI(153824,4,1,a|0)}else if((b|0)==(-2|0)){aI(153800,4,1,c[10030]|0)}else{aI(153792,3,1,c[10030]|0);a=(b|0)%14&-1;d=a+2|0;e=(d|0)>-1?d:-2-a|0;a=e>>>10;f=e>>>4&63|64;g=e&15|(d>>31)+48&-16;if((a|0)==0){if((f|0)!=64){h=11606}}else{d=a+64|0;a=c[10030]|0;aF(d|0,a|0);h=11606}if((h|0)==11606){h=c[10030]|0;aF(f|0,h|0)}aF(g|0,c[10030]|0)}aI(153784,3,1,c[10030]|0);g=(b|0)>0?(b|0)%8&-1:0;b=(g|0)>-1?g:-g|0;h=b>>>10;f=b>>>4&63|64;a=b&15|(g>>31)+48&-16;do{if((h|0)==0){if((f|0)!=64){break}i=c[10030]|0;j=aF(a|0,i|0)|0;k=c[10030]|0;l=aD(k|0)|0;return}else{g=h+64|0;b=c[10030]|0;aF(g|0,b|0)}}while(0);aF(f|0,c[10030]|0);i=c[10030]|0;j=aF(a|0,i|0)|0;k=c[10030]|0;l=aD(k|0)|0;return}function mj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if((c[56732]|0)==0){e=b-29|0;f=c[10030]|0;aI(153736,3,1,f|0);t0(a,e);e=c[10030]|0;aD(e|0);e=c[10030]|0;aI(154080,5,1,e|0)}else{e=a+19|0;a=c[10030]|0;aI(153736,3,1,a|0);t0(e,b);b=c[10030]|0;aD(b|0);b=c[10030]|0;aI(153952,6,1,b|0)}aI(153920,3,1,c[10030]|0);b=uA(d|0)|0;e=(b|0)>-1?b:-b|0;a=e>>>10;f=e>>>4&63|64;g=e&15|(b>>31)+48&-16;do{if((a|0)==0){if((f|0)!=64){break}h=c[10030]|0;i=aF(g|0,h|0)|0;j=c[10030]|0;k=aK(d|0,j|0)|0;l=c[10030]|0;m=aD(l|0)|0;return}else{b=a+64|0;e=c[10030]|0;aF(b|0,e|0)}}while(0);aF(f|0,c[10030]|0);h=c[10030]|0;i=aF(g|0,h|0)|0;j=c[10030]|0;k=aK(d|0,j|0)|0;l=c[10030]|0;m=aD(l|0)|0;return}function mk(){var b=0,d=0,e=0,f=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0.0;b=i;i=i+24|0;d=b|0;g[59224]=0.0;g[59222]=0.0;e=c[13898]|0;L15781:do{if((e|0)<(c[8272]|0)){f=c[1054]|0;L15783:do{if((a[f+(e*40&-1)|0]&1)!=0){j=c[f+(e*40&-1)+36>>2]|0;k=f+(e*40&-1)+32|0;l=c[10036]|0;m=0;while(1){if((m|0)>=(j|0)){break}if((a[l+((c[k>>2]|0)+m|0)|0]|0)==(a[m+103664|0]|0)){m=m+1|0}else{break L15783}}if((m|0)==1){break L15781}}}while(0);f=is(d)|0;k=c[f>>2]|0;if((k|0)==2){n=+h[f+8>>3]}else if((k|0)==1){n=+(c[f+8>>2]|0)}else if((k|0)==3){n=+uz(c[f+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}o=n;f=c[13898]|0;if((f|0)>=(c[8272]|0)){break}k=c[1054]|0;L15797:do{if((a[k+(f*40&-1)|0]&1)!=0){l=c[k+(f*40&-1)+36>>2]|0;j=k+(f*40&-1)+32|0;p=c[10036]|0;q=0;while(1){if((q|0)>=(l|0)){break}if((a[p+((c[j>>2]|0)+q|0)|0]|0)==(a[q+103664|0]|0)){q=q+1|0}else{break L15797}}if((q|0)==1){break L15781}}}while(0);f=is(d)|0;k=c[f>>2]|0;if((k|0)==3){r=+uz(c[f+8>>2]|0,0)}else if((k|0)==2){r=+h[f+8>>3]}else if((k|0)==1){r=+(c[f+8>>2]|0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g[59224]=o;g[59222]=r}}while(0);r=+g[59222];be(13048,152224,(v=i,i=i+16|0,h[v>>3]=+g[59224],h[v+8>>3]=r,v)|0);i=b;return}function ml(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0.0;b=i;i=i+24|0;d=b|0;e=c[13898]|0;L15812:do{if((e|0)<(c[8272]|0)){f=c[1054]|0;L15814:do{if((a[f+(e*40&-1)|0]&1)!=0){g=c[f+(e*40&-1)+36>>2]|0;j=f+(e*40&-1)+32|0;k=c[10036]|0;l=0;while(1){if((l|0)>=(g|0)){break}if((a[k+((c[j>>2]|0)+l|0)|0]|0)==(a[l+103664|0]|0)){l=l+1|0}else{break L15814}}if((l|0)==1){m=0;break L15812}}}while(0);f=is(d)|0;j=c[f>>2]|0;if((j|0)==2){n=+h[f+8>>3]}else if((j|0)==1){n=+(c[f+8>>2]|0)}else if((j|0)==3){n=+uz(c[f+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}m=(~~n|0)==16}else{m=0}}while(0);c[57208]=m&1;d=m?153072:170216;uD(13048,d|0,(uA(d|0)|0)+1|0);i=b;return}function mm(){return}function mn(){return}function mo(a){a=a|0;var b=0;b=(a|0)<0?0:a&7;c[60208]=240840+(b<<2);c[60222]=b;return}function mp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;aI(154096,3,1,c[10030]|0);e=(d|0)>0?(d|0)%11&-1:0;d=(e|0)>-1?e:-e|0;f=d>>>10;g=d>>>4&63|64;h=d&15|(e>>31)+48&-16;if((f|0)==0){if((g|0)!=64){i=11668}}else{e=f+64|0;f=c[10030]|0;aF(e|0,f|0);i=11668}if((i|0)==11668){i=c[10030]|0;aF(g|0,i|0)}aF(h|0,c[10030]|0);aI(154088,3,1,c[10030]|0);t0(a,b);aD(c[10030]|0);return}function mq(){aF(29,c[10030]|0);aF(32,c[10030]|0);aF(108,c[10030]|0);aF(32,c[10030]|0);aF(64,c[10030]|0);aF(31,c[10030]|0);return}function mr(){aI(154304,2,1,c[10030]|0);aD(c[10030]|0);aB(1);return}function ms(a,b){a=a|0;b=b|0;aF(29,c[10030]|0);aF(b>>>5&31|32|0,c[10030]|0);aF(b&31|96|0,c[10030]|0);aF(a>>>5&31|32|0,c[10030]|0);aF(a&31|64|0,c[10030]|0);c[60220]=a;c[60218]=b;return}function mt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;if((c[60222]|0)<1){d=b>>>5&31|32;e=c[10030]|0;aF(d|0,e|0);e=b&31|96;d=c[10030]|0;aF(e|0,d|0);d=a>>>5&31|32;e=c[10030]|0;aF(d|0,e|0);e=a&31|64;d=c[10030]|0;aF(e|0,d|0);c[60220]=a;c[60218]=b;return}d=c[60220]|0;e=c[60218]|0;f=a-d|0;g=b-e|0;h=(f|0)>-1;i=(h?f:-f|0)<<1;j=(g|0)>-1;k=(j?g:-g|0)<<1;l=f>>31|1;f=g>>31|1;do{if((i|0)<(k|0)){if((e|0)==(b|0)){m=d;n=b;break}g=j^1;o=e;p=d;q=i-(k>>1)|0;while(1){t$(p,o,0);if((q|0)<1&((q|0)!=0|g)){r=q;s=p}else{r=q-k|0;s=p+l|0}t=o+f|0;if((t|0)==(b|0)){m=s;n=b;break}else{o=t;p=s;q=r+i|0}}}else{if((d|0)==(a|0)){m=a;n=e;break}q=h^1;p=e;o=d;g=k-(i>>1)|0;while(1){t$(o,p,0);if((g|0)<1&((g|0)!=0|q)){u=g;v=p}else{u=g-i|0;v=p+f|0}t=o+l|0;if((t|0)==(a|0)){m=a;n=v;break}else{p=v;o=t;g=u+k|0}}}}while(0);t$(m,n,1);c[60220]=a;c[60218]=b;return}function mu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;f=b-11|0;aF(29,c[10030]|0);aF(f>>>5&31|32|0,c[10030]|0);aF(f&31|96|0,c[10030]|0);aF(a>>>5&31|32|0,c[10030]|0);aF(a&31|64|0,c[10030]|0);cf(c[10030]|0,154112,(v=i,i=i+8|0,c[v>>2]=d,v)|0);i=e;return}function mv(){aI(154432,6,1,c[10030]|0);aD(c[10030]|0);aB(1);return}function mw(){aI(154120,6,1,c[10030]|0);aD(c[10030]|0);aB(1);return}function mx(a,b){a=a|0;b=b|0;aF(29,c[10030]|0);aF(b>>>5&31|32|0,c[10030]|0);aF(b&31|96|0,c[10030]|0);aF(a>>>5&31|32|0,c[10030]|0);aF(a&31|64|0,c[10030]|0);return}function my(a,b){a=a|0;b=b|0;aF(b>>>5&31|32|0,c[10030]|0);aF(b&31|96|0,c[10030]|0);aF(a>>>5&31|32|0,c[10030]|0);aF(a&31|64|0,c[10030]|0);return}function mz(b){b=b|0;var d=0,e=0,f=0;d=i;e=(b|0)<-2?-2:b;if((e|0)>9){f=(e|0)%10&-1}else{f=e}cf(c[10030]|0,154424,(v=i,i=i+8|0,c[v>>2]=a[154144+(f+2|0)|0]|0,v)|0);c[8836]=f;i=d;return}function mA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;g=c[8836]|0;cf(c[10030]|0,154424,(v=i,i=i+8|0,c[v>>2]=96,v)|0);c[8836]=0;h=d-11|0;aF(29,c[10030]|0);aF(h>>>5&31|32|0,c[10030]|0);aF(h&31|96|0,c[10030]|0);aF(b>>>5&31|32|0,c[10030]|0);aF(b&31|64|0,c[10030]|0);cf(c[10030]|0,154112,(v=i,i=i+8|0,c[v>>2]=e,v)|0);e=(g|0)<-2?-2:g;if((e|0)>9){j=(e|0)%10&-1}else{j=e}cf(c[10030]|0,154424,(v=i,i=i+8|0,c[v>>2]=a[154144+(j+2|0)|0]|0,v)|0);c[8836]=j;i=f;return}function mB(){aI(154160,3,1,c[10030]|0);return}function mC(){aI(154432,6,1,c[10030]|0);aI(154304,2,1,c[10030]|0);return}function mD(b){b=b|0;var e=0,f=0,g=0;e=i;do{if((b|0)==0){f=0}else{g=uA(b|0)|0;if((g|0)==0){f=0;break}f=((d[b+(g-1|0)|0]|0)<<24)-822083584>>24}}while(0);cf(c[10030]|0,154424,(v=i,i=i+8|0,c[v>>2]=a[154344+((f-1|0)>>>0<3?f:0)|0]|0,v)|0);i=e;return 1}function mE(){aI(154432,6,1,c[10030]|0);return}function mF(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0.0,an=0.0,ao=0,ap=0.0,aq=0,ar=0,as=0,at=0.0,au=0.0,av=0.0,aw=0.0,ax=0.0,ay=0,az=0,aA=0;b=i;i=i+240|0;d=b|0;e=b+24|0;f=b+48|0;g=b+72|0;j=b+96|0;k=b+120|0;l=b+144|0;m=b+168|0;n=b+192|0;o=b+216|0;if((c[13898]|0)==2){p=2}else{h[30427]=10.0;h[6936]=10.0;h[6935]=1.0;a[243104]=0;a[243312]=0;uu(c[60826]|0);c[60826]=0;uu(c[60774]|0);c[60774]=0;uu(c[60778]|0);c[60778]=0;h[6931]=1.0;a[55512]=0;h[6938]=1.0;a[243424]=0;p=c[13898]|0}q=c[8272]|0;L15888:do{if((p|0)<(q|0)){r=n|0;s=n+8|0;t=m|0;u=m+8|0;w=l|0;x=l+8|0;y=k|0;z=k+8|0;A=j|0;B=j+8|0;C=g|0;D=g+8|0;E=f|0;F=f+8|0;G=e|0;H=e+8|0;I=d|0;J=d+8|0;K=o|0;L=o+8|0;M=0;N=p;O=q;L15890:while(1){P=c[1054]|0;Q=P+(N*40&-1)|0;L15892:do{if((a[Q]&1)!=0){R=c[P+(N*40&-1)+36>>2]|0;S=P+(N*40&-1)+32|0;T=c[10036]|0;U=0;while(1){if((U|0)>=(R|0)){break}if((a[T+((c[S>>2]|0)+U|0)|0]|0)==(a[U+103664|0]|0)){U=U+1|0}else{break L15892}}if((U|0)==1){V=M;break L15888}}}while(0);W=N+1|0;c[13898]=W;S=c[60782]|0;L15899:do{if((S|0)==0){X=243128}else{T=c[P+(N*40&-1)+36>>2]|0;R=c[P+(N*40&-1)+32>>2]|0;Y=(a[Q]&1)==0;Z=(T|0)>0;_=c[10036]|0;$=243128;aa=S;while(1){L15903:do{if(!Y){if(Z){ab=0;ac=0;ad=R;while(1){ae=a[aa+ab|0]|0;if(ae<<24>>24==(a[_+(ab+ad|0)|0]|0)){af=ad;ag=ac}else{if(ae<<24>>24!=36){break L15903}af=ad-1|0;ag=1}ah=ab+1|0;if((ah|0)<(ag+T|0)){ab=ah;ac=ag;ad=af}else{break}}if((ag|0)==0){ai=ah}else{X=$;break L15899}}else{ai=0}ad=a[aa+ai|0]|0;if((ad<<24>>24|0)==36|(ad<<24>>24|0)==0){X=$;break L15899}}}while(0);ad=$+8|0;ac=c[ad>>2]|0;if((ac|0)==0){X=ad;break}else{$=ad;aa=ac}}}}while(0);S=c[X+4>>2]|0;do{if((S|0)==3){if((W|0)>=(O|0)){aj=11782;break L15890}L15919:do{if((a[P+(W*40&-1)|0]&1)!=0){Q=c[P+(W*40&-1)+36>>2]|0;aa=P+(W*40&-1)+32|0;$=c[10036]|0;T=0;while(1){if((T|0)>=(Q|0)){break}if((a[$+((c[aa>>2]|0)+T|0)|0]|0)==(a[T+103664|0]|0)){T=T+1|0}else{break L15919}}if((T|0)==1){aj=11782;break L15890}}}while(0);a[14176]=1;is(k);a[14176]=0;if((c[y>>2]|0)!=3){aj=11781;break L15890}aa=c[z>>2]|0;c[60826]=aa;if((aa|0)==0){aj=11784;break L15890}if((a[aa+(b4(aa|0,218288)|0)|0]|0)!=0){aj=11787;break L15890}a[243104]=1;ak=M}else if((S|0)==7){a[243312]=1;ak=M}else if((S|0)==8){L15932:do{if((W|0)<(O|0)){L15934:do{if((a[P+(W*40&-1)|0]&1)!=0){aa=c[P+(W*40&-1)+36>>2]|0;$=P+(W*40&-1)+32|0;Q=c[10036]|0;_=0;while(1){if((_|0)>=(aa|0)){break}if((a[Q+((c[$>>2]|0)+_|0)|0]|0)==(a[_+103664|0]|0)){_=_+1|0}else{break L15934}}if((_|0)==1){al=0;break L15932}}}while(0);a[14176]=1;is(f);a[14176]=0;if((c[E>>2]|0)==3){al=c[F>>2]|0;break}else{c[13898]=W;al=0;break}}else{al=0}}while(0);c[60778]=al;ak=M}else if((S|0)==9){c[(c[3524]|0)+68>>2]=46;T=(c[3524]|0)+96|0;c[T>>2]=c[T>>2]|32;ak=M}else if((S|0)==5){if((W|0)>=(O|0)){aj=11770;break L15890}L15948:do{if((a[P+(W*40&-1)|0]&1)!=0){T=c[P+(W*40&-1)+36>>2]|0;$=P+(W*40&-1)+32|0;Q=c[10036]|0;aa=0;while(1){if((aa|0)>=(T|0)){break}if((a[Q+((c[$>>2]|0)+aa|0)|0]|0)==(a[aa+103664|0]|0)){aa=aa+1|0}else{break L15948}}if((aa|0)==1){aj=11770;break L15890}}}while(0);a[14176]=1;is(l);a[14176]=0;if((c[w>>2]|0)!=3){aj=11769;break L15890}$=c[x>>2]|0;c[60774]=$;if(($|0)==0){aj=11772;break L15890}else{ak=M}}else if((S|0)==13){a[55512]=1;ak=M}else if((S|0)==14){$=is(o)|0;Q=c[$>>2]|0;if((Q|0)==2){am=+h[$+8>>3]}else if((Q|0)==3){am=+uz(c[$+8>>2]|0,0)}else if((Q|0)==1){am=+(c[$+8>>2]|0)}else{aj=11854;break L15890}if((c[K>>2]|0)==3){uu(c[L>>2]|0);c[K>>2]=1}h[6938]=am;if(am>.2){ak=M;break}h[6938]=1.0;ak=M}else if((S|0)==0){L15968:do{if((W|0)<(O|0)){L15970:do{if((a[P+(W*40&-1)|0]&1)!=0){$=c[P+(W*40&-1)+36>>2]|0;Q=P+(W*40&-1)+32|0;T=c[10036]|0;R=0;while(1){if((R|0)>=($|0)){break}if((a[T+((c[Q>>2]|0)+R|0)|0]|0)==(a[R+103664|0]|0)){R=R+1|0}else{break L15970}}if((R|0)==1){aj=11735;break L15968}}}while(0);aa=is(n)|0;Q=c[aa>>2]|0;if((Q|0)==3){an=+uz(c[aa+8>>2]|0,0)}else if((Q|0)==1){an=+(c[aa+8>>2]|0)}else if((Q|0)==2){an=+h[aa+8>>3]}else{aj=11740;break L15890}if((c[r>>2]|0)==3){uu(c[s>>2]|0);c[r>>2]=1}aa=~~(+(~~an|0)*10.0);c[13836]=aa;Q=c[13898]|0;L15985:do{if((c[8272]|0)>(Q|0)){T=c[1054]|0;if((a[T+(Q*40&-1)|0]&1)==0){ao=aa;break}$=c[T+(Q*40&-1)+36>>2]|0;_=T+(Q*40&-1)+32|0;T=c[10036]|0;Z=0;while(1){if((Z|0)>=($|0)){break}if((a[T+((c[_>>2]|0)+Z|0)|0]|0)==(a[Z+148464|0]|0)){Z=Z+1|0}else{ao=aa;break L15985}}if((Z|0)!=1){ao=aa;break}c[13898]=Q+1;_=is(m)|0;T=c[_>>2]|0;if((T|0)==2){ap=+h[_+8>>3]}else if((T|0)==3){ap=+uz(c[_+8>>2]|0,0)}else if((T|0)==1){ap=+(c[_+8>>2]|0)}else{aj=11753;break L15890}if((c[t>>2]|0)==3){uu(c[u>>2]|0);c[t>>2]=1}c[13832]=~~(+(~~ap|0)*10.0);ao=c[13836]|0}else{ao=aa}}while(0);if((ao|0)<1){c[13836]=6e3;aq=6e3}else{aq=ao}if((c[13832]|0)>=1){ar=aq;break}c[13832]=4e3;ar=aq}else{aj=11735}}while(0);if((aj|0)==11735){aj=0;c[13836]=6e3;c[13832]=4e3;ar=6e3}c[(c[3524]|0)+8>>2]=ar;c[(c[3524]|0)+12>>2]=c[13832];ak=M}else if((S|0)==10){c[(c[3524]|0)+68>>2]=118;aa=(c[3524]|0)+96|0;c[aa>>2]=c[aa>>2]&-33;ak=M}else if((S|0)==4){a[243104]=0;ak=M}else if((S|0)==1){uu(c[13874]|0);as=c[13898]|0;if((as|0)>=(c[8272]|0)){aj=11798;break L15890}aa=c[1054]|0;L16013:do{if((a[aa+(as*40&-1)|0]&1)!=0){Q=c[aa+(as*40&-1)+36>>2]|0;_=aa+(as*40&-1)+32|0;T=c[10036]|0;$=0;while(1){if(($|0)>=(Q|0)){break}if((a[T+((c[_>>2]|0)+$|0)|0]|0)==(a[$+103664|0]|0)){$=$+1|0}else{break L16013}}if(($|0)==1){aj=11798;break L15890}}}while(0);a[14176]=1;is(j);a[14176]=0;if((c[A>>2]|0)!=3){aj=11797;break L15890}aa=c[B>>2]|0;c[13874]=aa;if((aa|0)==0){aj=11800;break L15890}do{if((a[aa]|0)==0){at=+h[30427];h[6936]=at;au=at}else{_=bk(aa|0,148464)|0;if((a[aa+_|0]|0)!=44){au=+h[6936];break}T=aa+(_+1|0)|0;ca(T|0,148448,(v=i,i=i+8|0,c[v>>2]=55488,v)|0);at=+h[6936];if(at>0.0){au=at;break}at=+h[30427];h[6936]=at;au=at}}while(0);c[(c[3524]|0)+16>>2]=~~(au*+h[6935]*10.0);c[(c[3524]|0)+20>>2]=~~(+h[6936]*+h[6935]*.8*10.0);ak=M}else if((S|0)==15){a[55440]=1;ak=M}else if((S|0)==16){a[55440]=0;ak=M}else if((S|0)==12){a[55512]=0;ak=M}else if((S|0)==2){aa=is(g)|0;T=c[aa>>2]|0;if((T|0)==2){av=+h[aa+8>>3]}else if((T|0)==3){av=+uz(c[aa+8>>2]|0,0)}else if((T|0)==1){av=+(c[aa+8>>2]|0)}else{aj=11813;break L15890}if((c[C>>2]|0)==3){uu(c[D>>2]|0);c[C>>2]=1}at=av>0.0?av:10.0;h[30427]=at;h[6936]=at;ak=M}else if((S|0)==17){aa=hK()|0;be(243424,164384,(v=i,i=i+24|0,c[v>>2]=aa>>>16&255,c[v+8>>2]=aa>>>8&255,c[v+16>>2]=aa&255,v)|0);ak=aa}else if((S|0)==11){aa=is(d)|0;T=c[aa>>2]|0;if((T|0)==1){aw=+(c[aa+8>>2]|0)}else if((T|0)==2){aw=+h[aa+8>>3]}else if((T|0)==3){aw=+uz(c[aa+8>>2]|0,0)}else{aj=11843;break L15890}if((c[I>>2]|0)==3){uu(c[J>>2]|0);c[I>>2]=1}h[6935]=aw;if(aw>0.0){ak=M;break}h[6935]=1.0;ak=M}else if((S|0)==6){aa=is(e)|0;T=c[aa>>2]|0;if((T|0)==2){ax=+h[aa+8>>3]}else if((T|0)==3){ax=+uz(c[aa+8>>2]|0,0)}else if((T|0)==1){ax=+(c[aa+8>>2]|0)}else{aj=11834;break L15890}if((c[G>>2]|0)==3){uu(c[H>>2]|0);c[G>>2]=1}h[6931]=ax;if(ax>0.0){ak=M;break}h[6931]=1.0;ak=M}else{uh(N,217704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);ak=M}}while(0);S=c[13898]|0;P=c[8272]|0;if((S|0)<(P|0)){M=ak;N=S;O=P}else{V=ak;break L15888}}if((aj|0)==11843){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aj|0)==11800){ay=c[13898]|0;uf(ay,154936,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aj|0)==11781){c[13898]=W;aj=11782}else if((aj|0)==11769){c[13898]=W;aj=11770}else if((aj|0)==11813){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aj|0)==11854){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aj|0)==11787){uf((c[13898]|0)-1|0,154976,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aj|0)==11797){c[13898]=as;aj=11798}else if((aj|0)==11834){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aj|0)==11784){az=c[13898]|0;uf(az,155080,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aj|0)==11740){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aj|0)==11772){aA=c[13898]|0;uf(aA,155136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aj|0)==11753){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((aj|0)==11798){c[13874]=0;ay=as;uf(ay,154936,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aj|0)==11782){c[60826]=0;az=W;uf(az,155080,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((aj|0)==11770){c[60774]=0;aA=W;uf(aA,155136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}else{V=0}}while(0);c[(c[3524]|0)+16>>2]=~~(+h[6936]*+h[6935]*10.0);c[(c[3524]|0)+20>>2]=~~(+h[6936]*+h[6935]*.8*10.0);be(13048,(a[55512]|0?95248:154912)|0,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);ax=+h[6938];if(a[55512]&ax!=1.0){aA=13048+(uA(13048)|0)|0;be(aA|0,154888,(v=i,i=i+8|0,h[v>>3]=ax,v)|0)}aA=13048+(uA(13048)|0)|0;be(aA|0,(a[55440]|0?154872:154864)|0,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);aA=13048+(uA(13048)|0)|0;W=c[3524]|0;aj=~~(+((c[W+12>>2]|0)>>>0>>>0)/10.0);be(aA|0,154848,(v=i,i=i+16|0,c[v>>2]=~~(+((c[W+8>>2]|0)>>>0>>>0)/10.0),c[v+8>>2]=aj,v)|0);aj=13048+(uA(13048)|0)|0;ax=+h[6936];aw=+h[6931];be(aj|0,154816,(v=i,i=i+24|0,c[v>>2]=(c[(c[3524]|0)+68>>2]|0)==46?154784:179864,h[v+8>>3]=ax,h[v+16>>3]=aw,v)|0);aj=13048+(uA(13048)|0)|0;be(aj|0,154712,(v=i,i=i+8|0,h[v>>3]=+h[6935],v)|0);if((a[243424]|0)!=0){aj=13048+(uA(13048)|0)|0;be(aj|0,170616,(v=i,i=i+8|0,c[v>>2]=V,v)|0)}V=c[60826]|0;aj=13048+(uA(13048)|0)|0;do{if((V|0)==0){uD(aj|0,154600,12);if(a[243312]|0){uD(13048+(uA(13048)|0)|0,154568,9)}W=c[60774]|0;if((W|0)==0){break}aA=13048+(uA(13048)|0)|0;be(aA|0,154544,(v=i,i=i+8|0,c[v>>2]=W,v)|0)}else{be(aj|0,154624,(v=i,i=i+8|0,c[v>>2]=V,v)|0)}}while(0);V=c[60778]|0;if((V|0)==0){i=b;return}be(13048+(uA(13048)|0)|0,154512,(v=i,i=i+8|0,c[v>>2]=V,v)|0);i=b;return}function mG(){return}function mH(){return}function mI(a){a=a|0;c[13840]=-a;return 1}function mJ(){var b=0,d=0,e=0,f=0,g=0,j=0.0,k=0,l=0,m=0,n=0;b=i;if(a[55472]|0){d=c[10030]|0;aI(165112,14,1,d|0);if(!(a[72328]|0)){d=c[10030]|0;aI(165528,17,1,d|0)}a[55472]=0;a[72328]=1}aI(159504,62,1,c[10030]|0);cf(c[10030]|0,159472,(v=i,i=i+8|0,c[v>>2]=~~(+((c[(c[3524]|0)+8>>2]|0)>>>0>>>0)/10.0),v)|0);cf(c[10030]|0,159440,(v=i,i=i+8|0,c[v>>2]=~~(+((c[(c[3524]|0)+12>>2]|0)>>>0>>>0)/10.0),v)|0);cf(c[10030]|0,159408,(v=i,i=i+8|0,h[v>>3]=+(c[7938]|0)/10.0,v)|0);cf(c[10030]|0,159320,(v=i,i=i+8|0,h[v>>3]=+(c[7939]|0)/10.0,v)|0);cf(c[10030]|0,159248,(v=i,i=i+8|0,h[v>>3]=+(((c[(c[3524]|0)+12>>2]|0)-(c[7940]|0)|0)>>>0>>>0)/10.0,v)|0);cf(c[10030]|0,159216,(v=i,i=i+8|0,h[v>>3]=+(((c[(c[3524]|0)+12>>2]|0)-(c[7941]|0)|0)>>>0>>>0)/10.0,v)|0);cf(c[10030]|0,159176,(v=i,i=i+8|0,h[v>>3]=+((c[7939]|0)-(c[7938]|0)|0)/10.0,v)|0);cf(c[10030]|0,159016,(v=i,i=i+8|0,h[v>>3]=+((c[7941]|0)-(c[7940]|0)|0)/10.0,v)|0);e7(1);do{if((c[16546]|0)!=1){d=e6(72800)|0;do{if((d|0)!=0){e=c[d+16>>2]|0;if((e|0)==1){f=c[10030]|0;g=c[d+24>>2]|0;cf(f|0,158984,(v=i,i=i+16|0,c[v>>2]=158952,c[v+8>>2]=g,v)|0);break}else if((e|0)==2){j=+h[d+24>>3];cf(c[10030]|0,158936,(v=i,i=i+16|0,c[v>>2]=158952,h[v+8>>3]=j,v)|0);break}else{break}}}while(0);d=e6(72544)|0;if((d|0)==0){break}e=c[d+16>>2]|0;if((e|0)==1){g=c[10030]|0;f=c[d+24>>2]|0;cf(g|0,158984,(v=i,i=i+16|0,c[v>>2]=158912,c[v+8>>2]=f,v)|0);break}else if((e|0)==2){j=+h[d+24>>3];cf(c[10030]|0,158936,(v=i,i=i+16|0,c[v>>2]=158912,h[v+8>>3]=j,v)|0);break}else{break}}}while(0);d=e6(225256)|0;do{if((d|0)!=0){e=c[d+16>>2]|0;if((e|0)==1){f=c[10030]|0;g=c[d+24>>2]|0;cf(f|0,158984,(v=i,i=i+16|0,c[v>>2]=158856,c[v+8>>2]=g,v)|0);break}else if((e|0)==2){j=+h[d+24>>3];cf(c[10030]|0,158936,(v=i,i=i+16|0,c[v>>2]=158856,h[v+8>>3]=j,v)|0);break}else{break}}}while(0);d=e6(225200)|0;do{if((d|0)!=0){e=c[d+16>>2]|0;if((e|0)==1){g=c[10030]|0;f=c[d+24>>2]|0;cf(g|0,158984,(v=i,i=i+16|0,c[v>>2]=158832,c[v+8>>2]=f,v)|0);break}else if((e|0)==2){j=+h[d+24>>3];cf(c[10030]|0,158936,(v=i,i=i+16|0,c[v>>2]=158832,h[v+8>>3]=j,v)|0);break}else{break}}}while(0);if((a[30528]&1)!=0){d=c[10030]|0;j=(c[17366]&1|0)==0?+h[8687]:0.0;cf(d|0,158760,(v=i,i=i+8|0,h[v>>3]=j,v)|0)}do{if((c[17261]&3|0)==0){d=c[10030]|0;aI(158560,33,1,d|0)}else{d=e6(224936)|0;do{if((d|0)!=0){e=c[d+16>>2]|0;if((e|0)==1){f=c[10030]|0;g=c[d+24>>2]|0;cf(f|0,158984,(v=i,i=i+16|0,c[v>>2]=158736,c[v+8>>2]=g,v)|0);break}else if((e|0)==2){j=+h[d+24>>3];cf(c[10030]|0,158936,(v=i,i=i+16|0,c[v>>2]=158736,h[v+8>>3]=j,v)|0);break}else{break}}}while(0);d=e6(224872)|0;if((d|0)==0){break}e=c[d+16>>2]|0;if((e|0)==1){g=c[10030]|0;f=c[d+24>>2]|0;cf(g|0,158984,(v=i,i=i+16|0,c[v>>2]=158664,c[v+8>>2]=f,v)|0);break}else if((e|0)==2){j=+h[d+24>>3];cf(c[10030]|0,158936,(v=i,i=i+16|0,c[v>>2]=158664,h[v+8>>3]=j,v)|0);break}else{break}}}while(0);do{if((c[17089]&3|0)==0){d=c[10030]|0;aI(158424,33,1,d|0)}else{d=e6(224640)|0;do{if((d|0)!=0){e=c[d+16>>2]|0;if((e|0)==1){f=c[10030]|0;g=c[d+24>>2]|0;cf(f|0,158984,(v=i,i=i+16|0,c[v>>2]=158520,c[v+8>>2]=g,v)|0);break}else if((e|0)==2){j=+h[d+24>>3];cf(c[10030]|0,158936,(v=i,i=i+16|0,c[v>>2]=158520,h[v+8>>3]=j,v)|0);break}else{break}}}while(0);d=e6(224432)|0;if((d|0)==0){break}e=c[d+16>>2]|0;if((e|0)==2){g=c[10030]|0;j=+h[d+24>>3];cf(g|0,158936,(v=i,i=i+16|0,c[v>>2]=158480,h[v+8>>3]=j,v)|0);break}else if((e|0)==1){e=c[d+24>>2]|0;cf(c[10030]|0,158984,(v=i,i=i+16|0,c[v>>2]=158480,c[v+8>>2]=e,v)|0);break}else{break}}}while(0);cf(c[10030]|0,158392,(v=i,i=i+8|0,c[v>>2]=a[66164]&1,v)|0);cf(c[10030]|0,158360,(v=i,i=i+8|0,c[v>>2]=a[65476]&1,v)|0);if((a[30528]&1)!=0){e=c[10030]|0;d=a[69604]&1;cf(e|0,158328,(v=i,i=i+8|0,c[v>>2]=d,v)|0)}aI(158192,75,1,c[10030]|0);aI(158112,76,1,c[10030]|0);d=c[10030]|0;if((c[16546]|0)==1){j=+h[8255];cf(d|0,158064,(v=i,i=i+8|0,h[v>>3]=j,v)|0);e=c[10030]|0;j=+h[8256];cf(e|0,157952,(v=i,i=i+8|0,h[v>>3]=j,v)|0);e=c[10030]|0;g=c[8510]|0;do{if((g|0)==0){f=c[8506]|0;if((f|0)==4){k=223560;break}k=(f|0)==5?223536:223520}else{k=g}}while(0);cf(e|0,157896,(v=i,i=i+8|0,c[v>>2]=k,v)|0)}else{aI(157856,30,1,d|0)}aI(86144,2,1,c[10030]|0);if(a[243104]|0){l=c[10030]|0;m=aD(l|0)|0;i=b;return}d=c[60778]|0;cf(c[10030]|0,157664,(v=i,i=i+8|0,c[v>>2]=(d|0)!=0?d:179864,v)|0);if(a[243312]|0){d=c[10030]|0;k=c[60778]|0;e=(k|0)!=0?k:179864;cf(d|0,156600,(v=i,i=i+40|0,c[v>>2]=e,c[v+8>>2]=e,c[v+16>>2]=e,c[v+24>>2]=e,c[v+32>>2]=e,v)|0);e=c[13858]|0;d=e+5|0;if((d-((d|0)%6&-1)|0)>=1){d=1;k=e;do{e=(d|0)%6&-1;if((e|0)==1){g=c[10030]|0;aI(156592,6,1,g|0);n=c[13858]|0}else{n=k}g=c[10030]|0;if((d|0)>(n|0)){aI(156256,28,1,g|0)}else{cf(g|0,156408,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=d,v)|0)}if((e|0)==0){e=c[10030]|0;aI(156248,7,1,e|0)}d=d+1|0;k=c[13858]|0;e=k+5|0;}while((d|0)<=(e-((e|0)%6&-1)|0))}d=c[10030]|0;aI(156152,72,1,d|0);d=c[10030]|0;aI(155832,262,1,d|0);if((c[17261]&3|0)!=0){d=c[10030]|0;aI(155680,105,1,d|0)}if((c[17089]&3|0)!=0){d=c[10030]|0;aI(155568,105,1,d|0)}d=c[10030]|0;aI(155536,28,1,d|0);d=c[10030]|0;aI(155504,10,1,d|0)}d=c[3524]|0;k=~~(+((c[d+12>>2]|0)>>>0>>>0)/10.0);cf(c[10030]|0,155296,(v=i,i=i+16|0,c[v>>2]=~~(+((c[d+8>>2]|0)>>>0>>>0)/10.0),c[v+8>>2]=k,v)|0);if(a[243312]|0){k=c[10030]|0;aI(155248,19,1,k|0)}aI(155168,24,1,c[10030]|0);l=c[10030]|0;m=aD(l|0)|0;i=b;return}function mK(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0;b=i;c[13864]=-5;c[13840]=0;a[55472]=0;c[13842]=-1;a[55390]=0;a[55408]=0;uD(55372,163848,17);c[13858]=0;d=c[60778]|0;if((d|0)==0){e=bP(221464)|0;c[60778]=e;f=e}else{f=d}d=uA(f|0)|0;do{if((a[f]|0)!=0){if((a[f+(d-1|0)|0]|0)==47){break}e=db(f,d+2|0,221440)|0;c[60778]=e;g=e+(uA(e|0)|0)|0;w=47;a[g]=w&255;w=w>>8;a[g+1|0]=w&255}}while(0);d=c[10030]|0;if(a[243104]|0){f=c[60826]|0;cf(d|0,161488,(v=i,i=i+16|0,c[v>>2]=f,c[v+8>>2]=f,v)|0);f=c[10030]|0;g=c[60826]|0;e=(a[30528]&1)!=0?225e3:224992;j=c[3524]|0;k=~~(+((c[j+8>>2]|0)>>>0>>>0)/10.0);l=~~(+((c[j+12>>2]|0)>>>0>>>0)/10.0);cf(f|0,160752,(v=i,i=i+64|0,c[v>>2]=g,c[v+8>>2]=g,c[v+16>>2]=g,c[v+24>>2]=g,c[v+32>>2]=g,c[v+40>>2]=e,c[v+48>>2]=k,c[v+56>>2]=l,v)|0)}else{l=c[60774]|0;k=(l|0)!=0?l:162656;cf(d|0,162680,(v=i,i=i+8|0,c[v>>2]=k,v)|0);k=c[11252]|0;if((k|0)==15|(k|0)==0){d=c[10030]|0;aI(162584,68,1,d|0);m=c[11252]|0}else{m=k}k=c[10030]|0;d=c[60778]|0;l=(m|0)==15?162360:162344;cf(k|0,162424,(v=i,i=i+24|0,c[v>>2]=d,c[v+8>>2]=l,c[v+16>>2]=d,v)|0);if(a[55512]|0){d=c[10030]|0;l=c[60778]|0;cf(d|0,162272,(v=i,i=i+8|0,c[v>>2]=l,v)|0)}l=c[10030]|0;if(a[243312]|0){d=c[60778]|0;cf(l|0,162144,(v=i,i=i+8|0,c[v>>2]=d,v)|0);d=c[10030]|0;k=c[60778]|0;cf(d|0,162048,(v=i,i=i+8|0,c[v>>2]=k,v)|0)}else{aI(161928,70,1,l|0)}l=c[10030]|0;aI(161664,257,1,l|0)}cf(c[10030]|0,160720,(v=i,i=i+16|0,c[v>>2]=40152,c[v+8>>2]=40160,v)|0);aI(159864,807,1,c[10030]|0);if(a[55512]|0){l=c[10030]|0;k=~~(+h[6938]*200.0);cf(l|0,159832,(v=i,i=i+8|0,c[v>>2]=k,v)|0)}k=a[55440]|0;cf(c[10030]|0,159776,(v=i,i=i+16|0,c[v>>2]=k?131936:137232,c[v+8>>2]=k?131936:75184,v)|0);if((a[243424]|0)==0){n=c[10030]|0;o=+h[6931];p=cf(n|0,159584,(v=i,i=i+8|0,h[v>>3]=o,v)|0)|0;i=b;return}k=c[3524]|0;l=~~(+((c[k+8>>2]|0)>>>0>>>0)/10.0);d=~~(+((c[k+12>>2]|0)>>>0>>>0)/10.0);cf(c[10030]|0,159696,(v=i,i=i+24|0,c[v>>2]=243424,c[v+8>>2]=l,c[v+16>>2]=d,v)|0);n=c[10030]|0;o=+h[6931];p=cf(n|0,159584,(v=i,i=i+8|0,h[v>>3]=o,v)|0)|0;i=b;return}function mL(b,d){b=b|0;d=d|0;var e=0,f=0;e=i;f=a[55472]|0;if(f&(c[13838]|0)==(b|0)&(c[13834]|0)==(d|0)){i=e;return}if(!f){f=c[10030]|0;aI(162736,17,1,f|0);a[55472]=1;a[72328]=0}f=(c[13832]|0)-d|0;cf(c[10030]|0,162768,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=f,v)|0);c[13838]=b;c[13834]=d;i=e;return}function mM(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;f=c[13838]|0;g=c[13834]|0;if((f|0)==(b|0)&(g|0)==(d|0)){i=e;return}if(!(a[55472]|0)){h=c[10030]|0;aI(162736,17,1,h|0);a[55472]=1;a[72328]=0;h=c[10030]|0;j=(c[13832]|0)-g|0;cf(h|0,162768,(v=i,i=i+16|0,c[v>>2]=f,c[v+8>>2]=j,v)|0);c[13838]=f;c[13834]=g}g=(c[13832]|0)-d|0;cf(c[10030]|0,162808,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=g,v)|0);c[13838]=b;c[13834]=d;i=e;return}function mN(b){b=b|0;var d=0,e=0,f=0;d=i;if((c[13864]|0)==(b|0)){i=d;return}c[13864]=b;if(a[55472]|0){e=c[10030]|0;aI(165112,14,1,e|0);if(!(a[72328]|0)){e=c[10030]|0;aI(165528,17,1,e|0)}a[55472]=0;a[72328]=1}if((b|0)>13){f=(b|0)%14&-1}else{f=b}b=(f|0)>-3;e=b?f:-3;if(b|(a[243424]|0)==0){b=c[243320+(e+3<<2)>>2]|0;uB(55372,b|0)}else{uB(55372,243424)}if((aY(55372,55390)|0)!=0){b=c[10030]|0;cf(b|0,164320,(v=i,i=i+8|0,c[v>>2]=55372,v)|0);uB(55390,55372)}if(!(a[55512]|0)){i=d;return}if((e-1|0)>>>0<4){b=c[10030]|0;f=e+1|0;cf(b|0,162968,(v=i,i=i+8|0,c[v>>2]=f,v)|0);i=d;return}f=c[10030]|0;if((e|0)==-1){aI(162920,26,1,f|0);i=d;return}else{aI(164808,19,1,f|0);i=d;return}}function mO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0.0,m=0;f=i;if((e|0)==0){i=f;return}if((a[e]|0)==0){i=f;return}if(a[55472]|0){g=c[10030]|0;aI(165112,14,1,g|0);if(!(a[72328]|0)){g=c[10030]|0;aI(165528,17,1,g|0)}a[55472]=0;a[72328]=1}g=c[13840]|0;j=c[10030]|0;k=~~(+(c[13832]|0)+50.0- +(d>>>0>>>0));l=+h[6936]*+h[6935];d=c[13866]|0;if((g|0)==0){cf(j|0,164024,(v=i,i=i+32|0,c[v>>2]=b,c[v+8>>2]=k,h[v+16>>3]=l,c[v+24>>2]=d,v)|0)}else{cf(j|0,164152,(v=i,i=i+40|0,c[v>>2]=b,c[v+8>>2]=k,c[v+16>>2]=g,h[v+24>>3]=l,c[v+32>>2]=d,v)|0)}d=e;g=a[e]|0;do{if((g<<24>>24|0)==34|(g<<24>>24|0)==92){e=c[10030]|0;aF(92,e|0);m=a[d]|0}else{m=g}d=d+1|0;aF(m<<24>>24|0,c[10030]|0);g=a[d]|0;}while(g<<24>>24!=0);aI(163984,4,1,c[10030]|0);i=f;return}function mP(a){a=a|0;if((a|0)==2){c[13866]=164216}else if((a|0)==1){c[13866]=173184}else{c[13866]=179864}return 1}function mQ(a){a=a|0;return 0}function mR(a){a=+a;h[30390]=a<0.0?1.0:a;return}function mS(b,d,e,f,g,i){b=b|0;d=+d;e=+e;f=f|0;g=g|0;i=i|0;if((i|0)==3){c[59636]=c[13838];c[59634]=c[13834];return}else if((i|0)==4){c[13838]=c[59636];c[13834]=c[59634];return}else{if(a[238512]|0){return}a[238512]=1;c[11232]=43856;h[29815]=d;h[29816]=e*10.0;a[238496]=g&1;a[238480]=f&1;a[238504]=(i|0)!=0&1;return}}function mT(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,j=0;f=i;g=+h[30390]*.6*100.0;j=(e|0)%9&-1;if(g<=0.0&(j|0)>-1){i=f;return}if(a[55472]|0){e=c[10030]|0;aI(165112,14,1,e|0);if(!(a[72328]|0)){e=c[10030]|0;aI(165528,17,1,e|0)}a[55472]=0;a[72328]=1}do{if((j|0)==4|(j|0)==6|(j|0)==8){if((aY(55408,55372)|0)==0){break}e=c[10030]|0;cf(e|0,164776,(v=i,i=i+8|0,c[v>>2]=55372,v)|0);uB(55408,55372)}else if(!((j|0)==0|(j|0)==1|(j|0)==2|(j|0)==3|(j|0)==5|(j|0)==7)){e=(c[13832]|0)-d|0;cf(c[10030]|0,164256,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=e,v)|0);i=f;return}}while(0);e=(c[13832]|0)-d|0;cf(c[10030]|0,164232,(v=i,i=i+32|0,c[v>>2]=j,c[v+8>>2]=b,c[v+16>>2]=e,h[v+24>>3]=g,v)|0);i=f;return}function mU(b){b=b|0;var d=0,e=0,f=0,g=0.0,j=0,k=0.0;d=i;do{if((b|0)==0){e=12072}else{if((a[b]|0)==0){e=12072;break}f=bk(b|0,148464)|0;if((a[b+f|0]|0)!=44){g=+h[6936];break}j=b+(f+1|0)|0;ca(j|0,148448,(v=i,i=i+8|0,c[v>>2]=55488,v)|0);k=+h[6936];if(k>0.0){g=k;break}k=+h[30427];h[6936]=k;g=k}}while(0);if((e|0)==12072){k=+h[30427];h[6936]=k;g=k}c[(c[3524]|0)+16>>2]=~~(g*+h[6935]*10.0);c[(c[3524]|0)+20>>2]=~~(+h[6936]*+h[6935]*.8*10.0);i=d;return 1}function mV(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=i;tW(b);if(a[55512]|0){b=c[10030]|0;aI(164808,19,1,b|0);c[13864]=-5}if((aY(55408,243392)|0)!=0){b=c[10030]|0;cf(b|0,164776,(v=i,i=i+8|0,c[v>>2]=243392,v)|0);uB(55408,243392)}b=(c[13832]|0)-(g+e|0)|0;cf(c[10030]|0,164272,(v=i,i=i+32|0,c[v>>2]=d,c[v+8>>2]=b,c[v+16>>2]=f,c[v+24>>2]=g,v)|0);i=h;return}function mW(b){b=+b;var d=0,e=0;d=i;if(a[55472]|0){e=c[10030]|0;aI(165112,14,1,e|0);if(!(a[72328]|0)){e=c[10030]|0;aI(165528,17,1,e|0)}a[55472]=0;a[72328]=1}if(+(c[13842]|0)==b){i=d;return}cf(c[10030]|0,164296,(v=i,i=i+8|0,h[v>>3]=+h[6931]*b,v)|0);c[13842]=~~b;i=d;return}function mX(b){b=b|0;var e=0,f=0,g=0;e=i;i=i+8|0;f=e|0;g=c[b>>2]|0;if((g|0)==5){fr(+h[b+8>>3],f)}else if((g|0)==1){mN(c[b+4>>2]|0);i=e;return}else if((g|0)==3){g=c[b+4>>2]|0;a[f|0]=g>>>16&255;a[f+1|0]=g>>>8&255;a[f+2|0]=g&255}else{i=e;return}if(a[55472]|0){g=c[10030]|0;aI(165112,14,1,g|0);if(!(a[72328]|0)){g=c[10030]|0;aI(165528,17,1,g|0)}a[55472]=0;a[72328]=1}g=d[f+1|0]|0;b=d[f+2|0]|0;be(55372,164384,(v=i,i=i+24|0,c[v>>2]=d[f|0]|0,c[v+8>>2]=g,c[v+16>>2]=b,v)|0);if((aY(55372,55390)|0)!=0){b=c[10030]|0;cf(b|0,164320,(v=i,i=i+8|0,c[v>>2]=55372,v)|0);uB(55390,55372)}c[13864]=-5;i=e;return}function mY(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;if(a[55472]|0){f=c[10030]|0;aI(165112,14,1,f|0);if(!(a[72328]|0)){f=c[10030]|0;aI(165528,17,1,f|0)}a[55472]=0;a[72328]=1}if(a[55512]|0){f=c[10030]|0;aI(164808,19,1,f|0);c[13864]=-5}f=d+8|0;g=c[f>>2]|0;do{if(!((g|0)==1601|(g|0)==3)){tW(g);if((aY(55408,243392)|0)==0){break}h=c[10030]|0;cf(h|0,164776,(v=i,i=i+8|0,c[v>>2]=243392,v)|0);uB(55408,243392)}}while(0);g=(c[13832]|0)-(c[d+4>>2]|0)|0;cf(c[10030]|0,164760,(v=i,i=i+16|0,c[v>>2]=c[d>>2],c[v+8>>2]=g,v)|0);if((b|0)>1){g=1;do{h=(c[13832]|0)-(c[d+(g*12&-1)+4>>2]|0)|0;cf(c[10030]|0,164744,(v=i,i=i+16|0,c[v>>2]=c[d+(g*12&-1)>>2],c[v+8>>2]=h,v)|0);g=g+1|0;}while((g|0)<(b|0))}b=c[f>>2]|0;if((b|0)==1601|(b|0)==3){b=c[10030]|0;aI(164680,8,1,b|0);i=e;return}else{b=c[10030]|0;aI(164736,7,1,b|0);i=e;return}}function mZ(){var b=0.0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0;if(!(a[238512]|0)){return}a[238512]=0;a[c[11232]|0]=0;b=+h[6936];d=c[13838]|0;e=c[13834]|0;f=43856+(uA(43856)|0)|0;g=a[43856]|0;L16425:do{if(g<<24>>24==0){i=0}else{j=(c[11252]|0)==15;k=0;l=43856;m=g;while(1){n=m<<24>>24;if((n&128|0)==0){do{if((aZ(165104,n|0,5)|0)==0){if((aZ(165088,n|0,9)|0)!=0){o=k+10|0;break}if((aZ(165080,n|0,4)|0)!=0){o=k+12|0;break}if((aZ(165072,n|0,8)|0)!=0){o=k+14|0;break}if((aZ(165032,n|0,15)|0)!=0){o=k+16|0;break}if((aZ(165008,n|0,18)|0)!=0){o=k+18|0;break}if((aZ(164944,n|0,10)|0)!=0){o=k+24|0;break}if((aZ(164840,n|0,2)|0)==0){o=k+20|0;break}else{o=k+30|0;break}}else{o=k+8|0}}while(0);p=l+1|0;q=o}else{do{if(j){if((n&224|0)==192){r=l+2|0;break}if((n&240|0)==224){r=l+3|0;break}else{r=l+4|0;break}}else{r=l+1|0}}while(0);n=k+18|0;if(r>>>0>f>>>0){i=n;break L16425}else{p=r;q=n}}n=a[p]|0;if(n<<24>>24==0){i=q;break}else{k=q;l=p;m=n}}}}while(0);s=+h[29815];t=s*+(i|0)*10.0/25.0;h[6936]=s;s=+(c[13840]|0)*1.5707963267948966/90.0;u=+T(+s);v=+h[29816];i=~~(+(d|0)+u*v);d=~~(+(e|0)+v*+S(+s));do{if((a[238496]&1)!=0){if(a[238488]|0){break}mO(i,d,43856)}}while(0);do{if((a[238504]&1)==0){if((a[238480]&1)==0){break}s=+(c[13840]|0)*1.5707963267948966/90.0;v=t*+S(+s);c[13838]=~~(v+ +(c[13838]|0));v=t*+T(+s);c[13834]=~~(+(c[13834]|0)-v)}else{v=+(c[13840]|0)*1.5707963267948966/90.0;s=t*+S(+v)*.5;c[13838]=~~(+(c[13838]|0)+s);s=t*+T(+v)*.5;c[13834]=~~(+(c[13834]|0)-s)}}while(0);h[6936]=b;return}function m_(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;e=c[60826]|0;f=(e|0)!=0?e:165512;if((b|0)==0|(b|0)==10){c[13858]=0;i=d;return}else if((b|0)==6){e=(c[13858]|0)+1|0;c[13858]=e;if(a[55472]|0){g=c[10030]|0;aI(165112,14,1,g|0);if(!(a[72328]|0)){g=c[10030]|0;aI(165528,17,1,g|0)}a[55472]=0;a[72328]=1;h=c[13858]|0}else{h=e}cf(c[10030]|0,165424,(v=i,i=i+32|0,c[v>>2]=f,c[v+8>>2]=h,c[v+16>>2]=f,c[v+24>>2]=h,v)|0);i=d;return}else if((b|0)==7){if(a[55472]|0){h=c[10030]|0;aI(165112,14,1,h|0);if(!(a[72328]|0)){h=c[10030]|0;aI(165528,17,1,h|0)}a[55472]=0;a[72328]=1}h=c[13858]|0;cf(c[10030]|0,165376,(v=i,i=i+16|0,c[v>>2]=f,c[v+8>>2]=h,v)|0);c[13864]=-5;c[13842]=-1;a[55390]=0;a[55408]=0;i=d;return}else if((b|0)==3){aI(165224,94,1,c[10030]|0);i=d;return}else if((b|0)==4){aI(165160,43,1,c[10030]|0);i=d;return}else{i=d;return}}function m$(b){b=b|0;if((b|0)!=1){return}aI(165528,17,1,c[10030]|0);a[72328]=1;return}function m0(){var b=0,d=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0.0,Y=0.0,Z=0,_=0,$=0,ab=0.0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0.0,ao=0;b=i;i=i+120|0;d=b|0;f=b+24|0;g=b+48|0;j=b+72|0;k=b+96|0;l=b+104|0;m=b+112|0;if((c[13898]|0)==2){n=2}else{tV();n=c[13898]|0}o=c[8272]|0;L16513:do{if((n|0)<(o|0)){p=d|0;q=d+8|0;r=f|0;s=f+8|0;t=j|0;u=j+8|0;w=g|0;x=g+8|0;y=n;z=o;L16515:while(1){A=c[1054]|0;B=a[A+(y*40&-1)|0]|0;C=(B&1)==0;L16517:do{if(!C){D=c[A+(y*40&-1)+36>>2]|0;E=A+(y*40&-1)+32|0;F=c[10036]|0;G=0;while(1){if((G|0)>=(D|0)){break}if((a[F+((c[E>>2]|0)+G|0)|0]|0)==(a[G+103664|0]|0)){G=G+1|0}else{break L16517}}if((G|0)==1){break L16513}}}while(0);E=c[60494]|0;L16524:do{if((E|0)==0){H=241976}else{F=c[A+(y*40&-1)+36>>2]|0;D=c[A+(y*40&-1)+32>>2]|0;I=(F|0)>0;J=c[10036]|0;K=241976;L=E;while(1){L16528:do{if(!C){if(I){M=0;N=0;O=D;while(1){P=a[L+M|0]|0;if(P<<24>>24==(a[J+(M+O|0)|0]|0)){Q=O;R=N}else{if(P<<24>>24!=36){break L16528}Q=O-1|0;R=1}S=M+1|0;if((S|0)<(R+F|0)){M=S;N=R;O=Q}else{break}}if((R|0)==0){T=S}else{H=K;break L16524}}else{T=0}O=a[L+T|0]|0;if((O<<24>>24|0)==36|(O<<24>>24|0)==0){H=K;break L16524}}}while(0);O=K+8|0;N=c[O>>2]|0;if((N|0)==0){H=O;break}else{K=O;L=N}}}}while(0);E=c[H+4>>2]|0;L16541:do{if((E|0)==12){c[13898]=y+1;L=hK()|0;c[13828]=L;if((c[13554]|0)==0){c[13554]=1;K=ut(16)|0;if((K|0)==0){gk();F=ut(16)|0;if((F|0)==0){U=12256;break L16515}else{V=F}}else{V=K}K=V;c[13550]=K;c[K>>2]=0;W=c[13828]|0}else{W=L}c[(c[13550]|0)+4>>2]=W>>>16&255;c[(c[13550]|0)+8>>2]=(c[13828]|0)>>>8&255;c[(c[13550]|0)+12>>2]=c[13828]&255}else if((E|0)==7){a[54576]=0;c[13898]=y+1}else if((E|0)==8){a[54576]=1;c[13898]=y+1}else if((E|0)==1){a[54400]=0;c[13898]=y+1}else if((E|0)==4){a[54472]=0;L=(c[3524]|0)+96|0;c[L>>2]=c[L>>2]&-1025;c[13898]=(c[13898]|0)+1}else if((E|0)==0){a[54400]=1;c[13898]=y+1}else if((E|0)==5){a[54336]=0;c[13898]=y+1}else if((E|0)==9){L=y+1|0;c[13898]=L;if((L|0)>=(z|0)){break}L16557:do{if((a[A+(L*40&-1)|0]&1)!=0){K=c[A+(L*40&-1)+36>>2]|0;F=A+(L*40&-1)+32|0;J=c[10036]|0;D=0;while(1){if((D|0)>=(K|0)){break}if((a[J+((c[F>>2]|0)+D|0)|0]|0)==(a[D+103664|0]|0)){D=D+1|0}else{break L16557}}if((D|0)==1){break L16541}}}while(0);L=is(j)|0;F=c[L>>2]|0;if((F|0)==2){X=+h[L+8>>3]}else if((F|0)==3){X=+uz(c[L+8>>2]|0,0)}else if((F|0)==1){X=+(c[L+8>>2]|0)}else{U=12233;break L16515}if((c[t>>2]|0)==3){uu(c[u>>2]|0);c[t>>2]=1}L=~~X;c[13622]=L;if(!((L|0)==0|L>>>0>1e4)){break}uh(c[13898]|0,166032,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);c[13622]=1}else if((E|0)==2){tV();c[13898]=(c[13898]|0)+1}else if((E|0)==10){L=y+1|0;c[13898]=L;if((L|0)>=(z|0)){break}L16666:do{if((a[A+(L*40&-1)|0]&1)!=0){F=c[A+(L*40&-1)+36>>2]|0;J=A+(L*40&-1)+32|0;K=c[10036]|0;I=0;while(1){if((I|0)>=(F|0)){break}if((a[K+((c[J>>2]|0)+I|0)|0]|0)==(a[I+103664|0]|0)){I=I+1|0}else{break L16666}}if((I|0)==1){break L16541}}}while(0);L=is(g)|0;J=c[L>>2]|0;if((J|0)==2){Y=+h[L+8>>3]}else if((J|0)==1){Y=+(c[L+8>>2]|0)}else if((J|0)==3){Y=+uz(c[L+8>>2]|0,0)}else{U=12248;break L16515}if((c[w>>2]|0)==3){uu(c[x>>2]|0);c[w>>2]=1}L=~~Y;c[13604]=L;if(L>>>0<=1e4){break}uh(c[13898]|0,166008,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);c[13604]=432}else if((E|0)==6){a[54336]=1;c[13898]=y+1}else if((E|0)==11){a[54424]=1;c[13898]=y+1}else if((E|0)==3){a[54472]=1;L=(c[3524]|0)+96|0;c[L>>2]=c[L>>2]|1024;c[13898]=(c[13898]|0)+1}else{L=c[10036]|0;J=c[A+(y*40&-1)+32>>2]|0;K=L+J|0;if((a[K]|0)==120){if((ca(K|0,165992,(v=i,i=i+24|0,c[v>>2]=k,c[v+8>>2]=l,c[v+16>>2]=m,v)|0)|0)!=3){U=12261;break L16515}K=c[13554]|0;F=c[13552]|0;if((K|0)<(F|0)){Z=K}else{K=(F<<1)+4|0;c[13552]=K;F=db(c[13550]|0,K*12&-1|4,167368)|0;c[13550]=F;c[F>>2]=0;Z=c[13554]|0}c[(c[13550]|0)+((Z*3&-1)+1<<2)>>2]=e[k>>1]|0;c[(c[13550]|0)+(((c[13554]|0)*3&-1)+2<<2)>>2]=e[l>>1]|0;c[(c[13550]|0)+(((c[13554]|0)*3&-1)+3<<2)>>2]=e[m>>1]|0;c[13554]=(c[13554]|0)+1;c[13898]=(c[13898]|0)+1;break}L16582:do{if((z|0)<=(y|0)|C){_=y;$=B}else{F=c[A+(y*40&-1)+36>>2]|0;K=0;while(1){if((K|0)>=(F|0)){break}if((a[L+(J+K|0)|0]|0)==(a[K+124352|0]|0)){K=K+1|0}else{_=y;$=B;break L16582}}if((K|0)!=4){_=y;$=B;break}F=y+1|0;c[13898]=F;_=F;$=a[A+(F*40&-1)|0]|0}}while(0);J=($&1)==0;if(J){U=12273}else{F=a[L+(c[A+(_*40&-1)+32>>2]|0)|0]|0;if(!((F<<24>>24|0)==39|(F<<24>>24|0)==34)){U=12273}}L16592:do{if((U|0)==12273){U=0;F=c[10810]|0;L16594:do{if((F|0)!=0){I=A+(_*40&-1)+36|0;D=A+(_*40&-1)+32|0;G=F;L16596:while(1){N=c[G+4>>2]|0;L16598:do{if(!((z|0)<=(_|0)|J)){O=c[I>>2]|0;M=0;while(1){if((M|0)>=(O|0)){break}if((a[L+((c[D>>2]|0)+M|0)|0]|0)==(a[N+M|0]|0)){M=M+1|0}else{break L16598}}if((a[N+M|0]|0)==0){break L16596}}}while(0);N=c[G>>2]|0;if((N|0)==0){break L16594}else{G=N}}if((a[G+8|0]&1)!=0){break}if((c[G+16>>2]|0)==3){break L16592}}}while(0);F=is(d)|0;K=c[F>>2]|0;if((K|0)==2){ab=+h[F+8>>3]}else if((K|0)==3){ab=+uz(c[F+8>>2]|0,0)}else if((K|0)==1){ab=+(c[F+8>>2]|0)}else{U=12321;break L16515}if((c[p>>2]|0)==3){uu(c[q>>2]|0);c[p>>2]=1}c[13628]=~~ab;break L16541}}while(0);L16617:do{if((_|0)<(z|0)){L16619:do{if(!J){F=c[A+(_*40&-1)+36>>2]|0;K=A+(_*40&-1)+32|0;D=0;while(1){if((D|0)>=(F|0)){break}if((a[L+((c[K>>2]|0)+D|0)|0]|0)==(a[D+103664|0]|0)){D=D+1|0}else{break L16619}}if((D|0)==1){ac=0;break L16617}}}while(0);a[14176]=1;is(f);a[14176]=0;if((c[r>>2]|0)==3){ac=c[s>>2]|0;break}else{c[13898]=_;ac=0;break}}else{ac=0}}while(0);L=a8(ac|0,44)|0;do{if((L|0)!=0){if((ca(L+1|0,21e4,(v=i,i=i+8|0,c[v>>2]=54512,v)|0)|0)!=1){break}a[L]=0}}while(0);L16634:do{if((a[ac]|0)==0){L=uA(54528)|0;J=c[13630]|0;K=c[J>>2]|0;if((K|0)==0){ad=J;U=12305;break}else{ae=0;af=K}while(1){if((uA(af|0)|0)==(L|0)){if((uJ(54528,af|0,L|0)|0)==0){ag=ae;ah=J;U=12304;break L16634}}K=ae+1|0;F=c[J+(K<<4)>>2]|0;if((F|0)==0){ad=J;U=12305;break}else{ae=K;af=F}}}else{J=uA(ac|0)|0;L=c[13630]|0;F=c[L>>2]|0;if((F|0)==0){ad=L;U=12305;break}else{ai=0;aj=F}while(1){if((uA(aj|0)|0)==(J|0)){if((uJ(ac|0,aj|0,J|0)|0)==0){ag=ai;ah=L;U=12304;break L16634}}F=ai+1|0;K=c[L+(F<<4)>>2]|0;if((K|0)==0){ad=L;U=12305;break}else{ai=F;aj=K}}}}while(0);do{if((U|0)==12304){U=0;if((ag|0)==-1){ad=ah;U=12305;break}uu(ac);ak=ag;al=c[13630]|0}}while(0);if((U|0)==12305){U=0;L=0;while(1){if((c[ad+(L<<4)>>2]|0)==0){break}else{L=L+1|0}}J=(L<<4)+32|0;K=ut(J)|0;if((K|0)==0){gk();F=ut(J)|0;if((F|0)==0){U=12309;break L16515}else{am=F}}else{am=K}K=am;c[am>>2]=ac;h[am+8>>3]=1.0;if((L|0)>=0){F=c[13630]|0;J=0;while(1){G=J+1|0;I=K+(G<<4)|0;N=F+(J<<4)|0;c[I>>2]=c[N>>2];c[I+4>>2]=c[N+4>>2];c[I+8>>2]=c[N+8>>2];c[I+12>>2]=c[N+12>>2];if((G|0)>(L|0)){break}else{J=G}}}c[13630]=K;ak=0;al=K}uF(54528,c[al+(ak<<4)>>2]|0,32)}}while(0);y=c[13898]|0;z=c[8272]|0;if((y|0)>=(z|0)){break L16513}}if((U|0)==12321){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((U|0)==12233){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((U|0)==12256){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=167368,v)|0)}else if((U|0)==12248){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((U|0)==12261){uf(c[13898]|0,165952,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((U|0)==12309){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=166248,v)|0)}}}while(0);U=(c[3524]|0)+8|0;if(a[54400]|0){c[U>>2]=23478;c[(c[3524]|0)+12>>2]=32585}else{c[U>>2]=32585;c[(c[3524]|0)+12>>2]=23478}U=uA(54528)|0;ak=c[13630]|0;al=c[ak>>2]|0;L16698:do{if((al|0)==0){an=1.0}else{am=0;ac=al;while(1){if((uA(ac|0)|0)==(U|0)){if((uJ(54528,ac|0,U|0)|0)==0){break}}ad=am+1|0;ag=c[ak+(ad<<4)>>2]|0;if((ag|0)==0){an=1.0;break L16698}else{am=ad;ac=ag}}an=+h[ak+(am<<4)+8>>3]}}while(0);ak=c[3524]|0;c[ak+16>>2]=aa((((c[ak+8>>2]|0)+182|0)>>>0)/((c[13604]|0)>>>0)>>>0,c[13628]|0);ak=c[3524]|0;c[ak+20>>2]=~~(an*+(aa((((c[ak+8>>2]|0)+182|0)>>>0)/((c[13604]|0)>>>0)>>>0,c[13628]|0)>>>0>>>0)*.527);ak=c[13628]|0;be(242752,165944,(v=i,i=i+16|0,c[v>>2]=54528,c[v+8>>2]=ak,v)|0);ak=a[54472]|0?116408:116440;U=a[54336]|0?185368:185408;al=a[54576]|0?131504:131584;ac=a[54424]|0?165816:179864;ag=c[13604]|0;ad=c[13622]|0;ah=c[13628]|0;be(13048,165832,(v=i,i=i+72|0,c[v>>2]=a[54400]|0?78720:78704,c[v+8>>2]=ak,c[v+16>>2]=U,c[v+24>>2]=al,c[v+32>>2]=ac,c[v+40>>2]=ag,c[v+48>>2]=ad,c[v+56>>2]=54528,c[v+64>>2]=ah,v)|0);ah=c[13554]|0;do{if((ah|0)>0){ad=0;ag=ah;while(1){ac=uA(13048)|0;if((ac+9|0)>>>0>=1024){ao=ag;break}al=ad*3&-1;U=c[13550]|0;ak=c[U+(al+2<<2)>>2]|0;aj=c[U+(al+3<<2)>>2]|0;be(ac+13048|0,165744,(v=i,i=i+24|0,c[v>>2]=c[U+(al+1<<2)>>2],c[v+8>>2]=ak,c[v+16>>2]=aj,v)|0);aj=ad+1|0;ak=c[13554]|0;if((aj|0)<(ak|0)){ad=aj;ag=ak}else{ao=ak;break}}if((ao|0)<96){break}i=b;return}}while(0);ao=db(c[13550]|0,1156,167368)|0;c[13550]=ao;c[ao>>2]=0;ao=c[13554]|0;if((ao|0)<96){ah=ao;ag=ao*3&-1;do{c[(c[13550]|0)+(ag+1<<2)>>2]=(c[(c[7642]|0)+(ah<<3)+4>>2]|0)>>>16&255;c[(c[13550]|0)+(ag+2<<2)>>2]=(c[(c[7642]|0)+(ah<<3)+4>>2]|0)>>>8&255;ag=ag+3|0;c[(c[13550]|0)+(ag<<2)>>2]=c[(c[7642]|0)+(ah<<3)+4>>2]&255;ah=ah+1|0;}while((ah|0)<96)}c[13554]=96;i=b;return}function m1(){c[13596]=0;c[13598]=0;uu(c[13602]|0);return}function m2(){var a=0,b=0,d=0,e=0;a=i;c[13596]=0;c[13598]=0;c[13626]=0;h[6804]=0.0;c[13616]=1;c[13617]=1;b=ut(65528)|0;if((b|0)!=0){d=b;e=d;c[13602]=e;i=a;return}gk();b=ut(65528)|0;if((b|0)==0){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=166104,v)|0)}else{d=b;e=d;c[13602]=e;i=a;return}}function m3(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;b=i;i=i+24|0;d=b|0;e=b+8|0;f=b+16|0;g=c[13656]|0;if((g|0)!=0){h=c[13602]|0;tY(4,1,g<<1);L16730:do{if((g|0)>0){j=d;k=d+1|0;l=0;while(1){m=c[h+(l<<2)>>2]|0;if((m|0)<=-32769){n=12355;break}if((m|0)>=32768){n=12357;break}a[j]=m>>>8&255;a[k]=m&255;aI(j|0,1,2,c[10030]|0);l=l+1|0;if((l|0)>=(g|0)){break L16730}}if((n|0)==12357){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}else if((n|0)==12355){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}}}while(0);c[13656]=0}n=f;a[n]=0;a[f+1|0]=-96;aI(n|0,1,2,c[10030]|0);n=e;a[n]=0;a[e+1|0]=64;aI(n|0,1,2,c[10030]|0);i=b;return}function m4(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0.0;b=i;i=i+832|0;d=b|0;e=b+8|0;f=b+16|0;g=b+24|0;j=b+32|0;k=b+40|0;l=b+48|0;m=b+56|0;n=b+64|0;o=b+72|0;p=b+80|0;q=b+88|0;r=b+96|0;s=b+104|0;t=b+112|0;u=b+120|0;w=b+128|0;x=b+136|0;y=b+144|0;z=b+152|0;A=b+160|0;B=b+168|0;C=b+176|0;D=b+184|0;E=b+192|0;F=b+200|0;G=b+208|0;H=b+216|0;I=b+224|0;J=b+232|0;K=b+240|0;L=b+248|0;M=b+256|0;N=b+320|0;O=b+328|0;P=b+336|0;Q=b+344|0;R=b+352|0;S=b+360|0;T=b+368|0;U=b+376|0;V=b+384|0;W=b+392|0;X=b+400|0;Y=b+408|0;Z=b+416|0;_=b+424|0;$=b+432|0;ab=b+440|0;ac=b+448|0;ad=b+456|0;ae=b+464|0;af=b+472|0;ag=b+480|0;ah=b+488|0;ai=b+496|0;aj=b+504|0;ak=b+512|0;al=b+520|0;am=b+784|0;an=c[3524]|0;ao=c[8244]|0;if((ao|0)==0){t_(0,1,1,0)}else{t_(0,1,(uA(ao|0)|0)+1|0,ao)}ao=L;a[ao]=16;a[L+1|0]=34;aI(ao|0,1,2,c[10030]|0);ao=al;L=c[60528]|0;if((L|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((L|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[ao]=L>>>8&255;a[al+1|0]=L&255;aI(ao|0,1,2,c[10030]|0);ao=b+528|0;L=a[54472]|0?0:2;be(ao|0,166264,(v=i,i=i+24|0,c[v>>2]=40152,c[v+8>>2]=40160,c[v+16>>2]=L,v)|0);t_(1,2,uA(ao|0)|0,ao);c[60558]=54;ao=K;a[ao]=17;a[K+1|0]=127;aI(ao|0,1,2,c[10030]|0);ao=J;a[ao]=0;a[J+1|0]=-38;aI(ao|0,1,2,c[10030]|0);ao=ak;J=ak+1|0;ak=0;while(1){K=c[242232+(ak<<2)>>2]|0;if((K|0)<=-32769){ap=12370;break}if((K|0)>=32768){ap=12372;break}a[ao]=K>>>8&255;a[J]=K&255;aI(ao|0,1,2,c[10030]|0);K=ak+1|0;if((K|0)<109){ak=K}else{ap=12374;break}}if((ap|0)==12374){ak=I;a[ak]=16;a[I+1|0]=98;I=c[10030]|0;aI(ak|0,1,2,I|0);I=aj;ak=c[60530]|0;if((ak|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ak|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[I]=ak>>>8&255;a[aj+1|0]=ak&255;ak=c[10030]|0;aI(I|0,1,2,ak|0);ak=H;a[ak]=16;a[H+1|0]=-126;H=c[10030]|0;aI(ak|0,1,2,H|0);H=ai;ak=c[60552]|0;if((ak|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ak|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[H]=ak>>>8&255;a[ai+1|0]=ak&255;ak=c[10030]|0;aI(H|0,1,2,ak|0);ak=G;a[ak]=16;a[G+1|0]=-90;G=c[10030]|0;aI(ak|0,1,2,G|0);G=ah;ak=ah+1|0;ah=c[60540]|0;if((ah|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ah|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[G]=ah>>>8&255;a[ak]=ah&255;ah=c[10030]|0;aI(G|0,1,2,ah|0);ah=c[60541]|0;if((ah|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ah|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[G]=ah>>>8&255;a[ak]=ah&255;ah=c[10030]|0;aI(G|0,1,2,ah|0);ah=c[60542]|0;if((ah|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ah|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[G]=ah>>>8&255;a[ak]=ah&255;ah=c[10030]|0;aI(G|0,1,2,ah|0);ah=F;a[ah]=16;a[F+1|0]=-62;F=c[10030]|0;aI(ah|0,1,2,F|0);F=ag;ah=c[60554]|0;if((ah|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ah|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[F]=ah>>>8&255;a[ag+1|0]=ah&255;ah=c[10030]|0;aI(F|0,1,2,ah|0);ah=E;a[ah]=16;a[E+1|0]=-30;E=c[10030]|0;aI(ah|0,1,2,E|0);E=af;ah=c[60678]|0;if((ah|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ah|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[E]=ah>>>8&255;a[af+1|0]=ah&255;ah=c[10030]|0;aI(E|0,1,2,ah|0);ah=D;a[ah]=17;a[D+1|0]=2;D=c[10030]|0;aI(ah|0,1,2,D|0);D=ae;ah=c[60680]|0;if((ah|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ah|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[D]=ah>>>8&255;a[ae+1|0]=ah&255;ah=c[10030]|0;aI(D|0,1,2,ah|0);ah=C;a[ah]=17;a[C+1|0]=34;C=c[10030]|0;aI(ah|0,1,2,C|0);C=ad;ah=c[13620]|0;if((ah|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ah|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[C]=ah>>>8&255;a[ad+1|0]=ah&255;ah=c[10030]|0;aI(C|0,1,2,ah|0);ah=B;a[ah]=17;a[B+1|0]=76;B=c[10030]|0;aI(ah|0,1,2,B|0);B=ac;ah=ac+1|0;ac=c[60670]|0;if((ac|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ac|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[B]=ac>>>8&255;a[ah]=ac&255;ac=c[10030]|0;aI(B|0,1,2,ac|0);ac=c[60671]|0;if((ac|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ac|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[B]=ac>>>8&255;a[ah]=ac&255;ac=c[10030]|0;aI(B|0,1,2,ac|0);ac=c[60672]|0;if((ac|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ac|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[B]=ac>>>8&255;a[ah]=ac&255;ac=c[10030]|0;aI(B|0,1,2,ac|0);ac=c[60673]|0;if((ac|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ac|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[B]=ac>>>8&255;a[ah]=ac&255;ac=c[10030]|0;aI(B|0,1,2,ac|0);ac=c[60674]|0;if((ac|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ac|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[B]=ac>>>8&255;a[ah]=ac&255;ac=c[10030]|0;aI(B|0,1,2,ac|0);ac=c[60675]|0;if((ac|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ac|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[B]=ac>>>8&255;a[ah]=ac&255;ac=c[10030]|0;aI(B|0,1,2,ac|0);if(!(a[54424]|0)){ac=c[13630]|0;B=c[ac>>2]|0;if((B|0)==0){aq=0}else{ah=0;C=0;ad=B;while(1){B=(C+1|0)+(uA(ad|0)|0)|0;D=ah+1|0;ae=c[ac+(D<<4)>>2]|0;if((ae|0)==0){aq=B;break}else{ah=D;C=B;ad=ae}}}ad=aq+1|0;C=ut(ad)|0;do{if((C|0)==0){gk();ah=ut(ad)|0;if((ah|0)!=0){ar=ah;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=166248,v)|0)}else{ar=C}}while(0);C=c[c[13630]>>2]|0;if((C|0)!=0){ad=0;ah=ar;ac=C;while(1){C=uA(ac|0)|0;a[ah]=C&255;uB(ah+1|0,c[(c[13630]|0)+(ad<<4)>>2]|0);ae=ad+1|0;B=c[(c[13630]|0)+(ae<<4)>>2]|0;if((B|0)==0){break}else{ad=ae;ah=ah+(C+1|0)|0;ac=B}}}ac=aq&1;tY(1,13,aq);ah=c[10030]|0;aI(ar|0,1,aq|0,ah|0);if((ac|0)!=0){ac=c[10030]|0;ah=a[241912]|0;aF(ah|0,ac|0)}uu(ar)}ar=A;a[ar]=0;a[A+1|0]=105;A=c[10030]|0;aI(ar|0,1,2,A|0);A=c[10030]|0;aF(8,A|0);A=c[10030]|0;aI(166208,1,8,A|0);A=c[10030]|0;ar=a[241896]|0;aF(ar|0,A|0);A=z;a[A]=32;a[z+1|0]=38;z=c[10030]|0;aI(A|0,1,2,z|0);z=ab;A=ab+1|0;ab=c[60536]|0;if((ab|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ab|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[z]=ab>>>8&255;a[A]=ab&255;ab=c[10030]|0;aI(z|0,1,2,ab|0);ab=c[60537]|0;if((ab|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ab|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[z]=ab>>>8&255;a[A]=ab&255;ab=c[10030]|0;aI(z|0,1,2,ab|0);ab=c[60538]|0;if((ab|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ab|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[z]=ab>>>8&255;a[A]=ab&255;ab=c[10030]|0;aI(z|0,1,2,ab|0);ab=y;a[ab]=32;a[y+1|0]=66;y=c[10030]|0;aI(ab|0,1,2,y|0);y=$;ab=c[60676]|0;if((ab|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ab|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[y]=ab>>>8&255;a[$+1|0]=ab&255;ab=c[10030]|0;aI(y|0,1,2,ab|0);ab=x;a[ab]=32;a[x+1|0]=98;x=c[10030]|0;aI(ab|0,1,2,x|0);x=_;ab=c[60546]|0;if((ab|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ab|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[x]=ab>>>8&255;a[_+1|0]=ab&255;ab=c[10030]|0;aI(x|0,1,2,ab|0);ab=w;a[ab]=32;a[w+1|0]=-126;w=c[10030]|0;aI(ab|0,1,2,w|0);w=Z;ab=c[60544]|0;if((ab|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ab|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[w]=ab>>>8&255;a[Z+1|0]=ab&255;ab=c[10030]|0;aI(w|0,1,2,ab|0);ab=u;a[ab]=32;a[u+1|0]=-94;u=c[10030]|0;aI(ab|0,1,2,u|0);u=Y;ab=c[60668]|0;if((ab|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((ab|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[u]=ab>>>8&255;a[Y+1|0]=ab&255;ab=c[10030]|0;aI(u|0,1,2,ab|0);ab=an+8|0;c[60534]=(c[ab>>2]|0)+182;u=an+12|0;c[60535]=(c[u>>2]|0)+182;Y=t;a[Y]=32;a[t+1|0]=-56;t=c[10030]|0;aI(Y|0,1,2,t|0);t=X;Y=X+1|0;X=c[60532]|0;if((X|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((X|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[t]=X>>>8&255;a[Y]=X&255;X=c[10030]|0;aI(t|0,1,2,X|0);X=c[60533]|0;if((X|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((X|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[t]=X>>>8&255;a[Y]=X&255;X=c[10030]|0;aI(t|0,1,2,X|0);X=c[60534]|0;if((X|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((X|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[t]=X>>>8&255;a[Y]=X&255;X=c[10030]|0;aI(t|0,1,2,X|0);X=c[60535]|0;if((X|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((X|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[t]=X>>>8&255;a[Y]=X&255;X=c[10030]|0;aI(t|0,1,2,X|0);X=W;a[X]=0;a[W+1|0]=-128;W=c[10030]|0;aI(X|0,1,2,W|0);L16932:do{if(!(a[54472]|0)){W=((c[13554]|0)*12&-1)+4|0;X=c[13550]|0;tY(5,34,W>>>1);t=W>>>2;if((t|0)==0){break}W=V;Y=V+1|0;w=0;while(1){Z=c[X+(w<<2)>>2]|0;if((Z|0)<=-32769){ap=12445;break}if((Z|0)>=32768){ap=12447;break}a[W]=Z>>>8&255;a[Y]=Z&255;aI(W|0,1,2,c[10030]|0);w=w+1|0;if((w|0)>=(t|0)){break L16932}}if((ap|0)==12447){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}else if((ap|0)==12445){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}}}while(0);V=s;a[V]=80;a[s+1|0]=66;s=c[10030]|0;aI(V|0,1,2,s|0);s=U;V=c[60548]|0;if((V|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((V|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[s]=V>>>8&255;a[U+1|0]=V&255;V=c[10030]|0;aI(s|0,1,2,V|0);c[13624]=aa((((c[(c[3524]|0)+8>>2]|0)+182|0)>>>0)/((c[13604]|0)>>>0)>>>0,c[13622]|0);V=r;a[V]=80;a[r+1|0]=98;r=c[10030]|0;aI(V|0,1,2,r|0);r=T;V=c[13624]|0;if((V|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((V|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[r]=V>>>8&255;a[T+1|0]=V&255;V=c[10030]|0;aI(r|0,1,2,V|0);V=q;a[V]=83;a[q+1|0]=-126;q=c[10030]|0;aI(V|0,1,2,q|0);q=S;V=c[13624]|0;if((V|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((V|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[q]=V>>>8&255;a[S+1|0]=V&255;V=c[10030]|0;aI(q|0,1,2,V|0);V=p;a[V]=83;a[p+1|0]=98;p=c[10030]|0;aI(V|0,1,2,p|0);p=R;V=c[60548]|0;if((V|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((V|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[p]=V>>>8&255;a[R+1|0]=V&255;V=c[10030]|0;aI(p|0,1,2,V|0);do{if(a[54472]|0){c[13658]=1}else{if((c[13658]|0)==3){break}c[13658]=3;c[13615]=3;V=c[13656]|0;if((V|0)!=0){p=c[13602]|0;tY(4,1,V<<1);L16972:do{if((V|0)>0){R=g;q=g+1|0;S=0;while(1){r=c[p+(S<<2)>>2]|0;if((r|0)<=-32769){ap=12472;break}if((r|0)>=32768){ap=12474;break}a[R]=r>>>8&255;a[q]=r&255;aI(R|0,1,2,c[10030]|0);S=S+1|0;if((S|0)>=(V|0)){break L16972}}if((ap|0)==12472){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}else if((ap|0)==12474){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);c[13656]=0}V=f;a[V]=80;a[f+1|0]=-126;p=c[10030]|0;aI(V|0,1,2,p|0);p=o;V=c[13658]|0;if((V|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((V|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[p]=V>>>8&255;a[o+1|0]=V&255;V=c[10030]|0;aI(p|0,1,2,V|0);V=n;a[V]=81;a[n+1|0]=-62;p=c[10030]|0;aI(V|0,1,2,p|0);p=Q;V=c[13658]|0;if((V|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((V|0)<32768){a[p]=V>>>8&255;a[Q+1|0]=V&255;V=c[10030]|0;aI(p|0,1,2,V|0);break}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);c[13646]=c[13586];c[13647]=c[13587];c[13648]=c[13588];c[13649]=c[13589];c[13650]=c[13590];c[13651]=c[13591];c[13652]=c[13592];c[13653]=c[13593];c[13654]=c[13594];c[13655]=c[13595];c[13611]=c[an+16>>2];an=m;a[an]=82;a[m+1|0]=-62;m=c[10030]|0;aI(an|0,1,2,m|0);m=P;an=c[60550]|0;if((an|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((an|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[m]=an>>>8&255;a[P+1|0]=an&255;an=c[10030]|0;aI(m|0,1,2,an|0);an=l;a[an]=83;a[l+1|0]=2;l=c[10030]|0;aI(an|0,1,2,l|0);l=O;an=c[60556]|0;if((an|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((an|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[l]=an>>>8&255;a[O+1|0]=an&255;an=c[10030]|0;aI(l|0,1,2,an|0);an=am|0;am=c[13628]|0;be(an|0,166136,(v=i,i=i+16|0,c[v>>2]=54528,c[v+8>>2]=am,v)|0);nc(an);as=+h[3817];an=~~((as<0.0?1.0:as)*+((c[(c[3524]|0)+28>>2]|0)>>>0>>>0)*.5);c[13568]=an;c[13558]=(an*12&-1|0)/17&-1;c[13556]=(an*13&-1|0)/15&-1;c[13562]=(an|0)/2&-1;c[13564]=(an*36&-1|0)/29&-1;c[13566]=(an*14&-1|0)/13&-1;c[13560]=(an*18&-1|0)/29&-1;an=a[54472]|0;if(!((c[13554]|0)>0&(an^1))){i=b;return}do{if(!(an|(c[13658]|0)==0)){c[13658]=0;c[13615]=0;am=c[13656]|0;if((am|0)!=0){l=c[13602]|0;tY(4,1,am<<1);L17016:do{if((am|0)>0){O=e;m=e+1|0;P=0;while(1){Q=c[l+(P<<2)>>2]|0;if((Q|0)<=-32769){ap=12500;break}if((Q|0)>=32768){ap=12502;break}a[O]=Q>>>8&255;a[m]=Q&255;aI(O|0,1,2,c[10030]|0);P=P+1|0;if((P|0)>=(am|0)){break L17016}}if((ap|0)==12500){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}else if((ap|0)==12502){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);c[13656]=0}am=d;a[am]=80;a[d+1|0]=-126;l=c[10030]|0;aI(am|0,1,2,l|0);l=k;am=c[13658]|0;if((am|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((am|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[l]=am>>>8&255;a[k+1|0]=am&255;am=c[10030]|0;aI(l|0,1,2,am|0);am=j;a[am]=81;a[j+1|0]=-62;l=c[10030]|0;aI(am|0,1,2,l|0);l=N;am=c[13658]|0;if((am|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((am|0)<32768){a[l]=am>>>8&255;a[N+1|0]=am&255;am=c[10030]|0;aI(l|0,1,2,am|0);break}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);N=c[ab>>2]|0;ab=c[u>>2]|0;c[M>>2]=0;c[M+4>>2]=0;c[M+12>>2]=N;c[M+16>>2]=0;c[M+24>>2]=N;c[M+28>>2]=ab;c[M+36>>2]=0;c[M+40>>2]=ab;c[M+48>>2]=0;c[M+52>>2]=0;c[M+8>>2]=1;no(5,M|0);i=b;return}else if((ap|0)==12370){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}else if((ap|0)==12372){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}function m5(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;e=i;i=i+8|0;f=e|0;g=c[3524]|0;h=c[g+8>>2]|0;j=h>>>0>b>>>0?b:h;h=c[g+12>>2]|0;g=h>>>0>d>>>0?d:h;if((j|0)==(c[13598]|0)&(g|0)==(c[13596]|0)){i=e;return}h=c[13656]|0;if((h|0)!=0){d=c[13602]|0;tY(4,1,h<<1);L17049:do{if((h|0)>0){b=f;k=f+1|0;l=0;while(1){m=c[d+(l<<2)>>2]|0;if((m|0)<=-32769){n=12579;break}if((m|0)>=32768){n=12581;break}a[b]=m>>>8&255;a[k]=m&255;aI(b|0,1,2,c[10030]|0);l=l+1|0;if((l|0)>=(h|0)){break L17049}}if((n|0)==12579){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}else if((n|0)==12581){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);c[13656]=0}c[13598]=j;c[13596]=g;i=e;return}function m6(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;e=i;i=i+16|0;f=e|0;g=e+8|0;h=c[3524]|0;j=c[h+8>>2]|0;k=j>>>0>b>>>0?b:j;j=c[h+12>>2]|0;h=j>>>0>d>>>0?d:j;j=c[13598]|0;if((k|0)==(j|0)&(h|0)==(c[13596]|0)){i=e;return}d=c[13656]|0;do{if((d|0)>16380){b=c[13602]|0;l=d<<1;L17067:do{if(a[54560]|0){tY(4,7,l);m=g;n=g+1|0;o=0;while(1){p=c[b+(o<<2)>>2]|0;if((p|0)<=-32769){q=12593;break}if((p|0)>=32768){q=12595;break}a[m]=p>>>8&255;a[n]=p&255;aI(m|0,1,2,c[10030]|0);o=o+1|0;if((o|0)>=(d|0)){break L17067}}if((q|0)==12595){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}else if((q|0)==12593){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}}else{tY(4,1,l);o=f;m=f+1|0;n=0;while(1){p=c[b+(n<<2)>>2]|0;if((p|0)<=-32769){q=12599;break}if((p|0)>=32768){q=12601;break}a[o]=p>>>8&255;a[m]=p&255;aI(o|0,1,2,c[10030]|0);n=n+1|0;if((n|0)>=(d|0)){break L17067}}if((q|0)==12601){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}else if((q|0)==12599){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}}}while(0);b=c[13598]|0;c[13656]=1;c[c[13602]>>2]=b;b=(c[13596]|0)+182|0;l=c[13656]|0;c[13656]=l+1;c[(c[13602]|0)+(l<<2)>>2]=b}else{if((d|0)!=0){break}c[13656]=1;c[c[13602]>>2]=j;b=(c[13596]|0)+182|0;l=c[13656]|0;c[13656]=l+1;c[(c[13602]|0)+(l<<2)>>2]=b}}while(0);j=c[13656]|0;c[13656]=j+1;c[(c[13602]|0)+(j<<2)>>2]=k;j=c[13656]|0;c[13656]=j+1;c[(c[13602]|0)+(j<<2)>>2]=h+182;c[13598]=k;c[13596]=h;i=e;return}function m7(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;d=i;i=i+40|0;e=d|0;f=d+8|0;g=d+16|0;h=d+24|0;j=d+32|0;k=(b|0)<-3?-3:b;if((k|0)==(c[13626]|0)){i=d;return}c[13626]=k;do{if((k|0)>-1){l=(k>>>0)%9>>>0;m=12616}else{if((k|0)==-4){if(a[54472]|0){break}else{n=0;m=12619;break}}else{if((k|0)<-2){break}else{l=k;m=12616;break}}}}while(0);do{if((m|0)==12616){if(a[54472]|0){c[13658]=1;n=1;m=12619;break}else{n=l+3|0;m=12619;break}}}while(0);do{if((m|0)==12619){if((n|0)==(c[13658]|0)){break}c[13658]=n;c[13615]=n;l=c[13656]|0;if((l|0)!=0){b=c[13602]|0;tY(4,1,l<<1);L17109:do{if((l|0)>0){o=f;p=f+1|0;q=0;while(1){r=c[b+(q<<2)>>2]|0;if((r|0)<=-32769){m=12624;break}if((r|0)>=32768){m=12626;break}a[o]=r>>>8&255;a[p]=r&255;aI(o|0,1,2,c[10030]|0);q=q+1|0;if((q|0)>=(l|0)){break L17109}}if((m|0)==12626){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}else if((m|0)==12624){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}}}while(0);c[13656]=0}l=e;a[l]=80;a[e+1|0]=-126;b=c[10030]|0;aI(l|0,1,2,b|0);b=h;l=c[13658]|0;if((l|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((l|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[b]=l>>>8&255;a[h+1|0]=l&255;l=c[10030]|0;aI(b|0,1,2,l|0);l=g;a[l]=81;a[g+1|0]=-62;b=c[10030]|0;aI(l|0,1,2,b|0);b=j;l=c[13658]|0;if((l|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((l|0)<32768){a[b]=l>>>8&255;a[j+1|0]=l&255;l=c[10030]|0;aI(b|0,1,2,l|0);break}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);if(a[54576]|0){tT((k|0)==-1?2:0);i=d;return}else{tT(k);i=d;return}}function m8(a){a=a|0;c[13612]=a;return 1}function m9(b){b=b|0;var c=0;if(a[54336]|0){c=(b|0)==0&1;return c|0}else{h[6804]=+(b|0)*1.5707963267948966/90.0;c=1;return c|0}return 0}function na(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0;f=i;i=i+88|0;g=f|0;j=f+8|0;k=f+16|0;l=f+24|0;m=f+32|0;n=f+40|0;o=f+48|0;p=f+56|0;q=f+64|0;r=f+72|0;s=f+80|0;if(b>>>0>32767|d>>>0>32767){i=f;return}else{t=e}while(1){u=a[t]|0;if(u<<24>>24==0){w=12726;break}if((aM(u&255|0)|0)==0){break}else{t=t+1|0}}if((w|0)==12726){i=f;return}t=c[13656]|0;if((t|0)!=0){u=c[13602]|0;tY(4,1,t<<1);L17156:do{if((t|0)>0){x=m;y=m+1|0;z=0;while(1){A=c[u+(z<<2)>>2]|0;if((A|0)<=-32769){w=12659;break}if((A|0)>=32768){w=12661;break}a[x]=A>>>8&255;a[y]=A&255;aI(x|0,1,2,c[10030]|0);z=z+1|0;if((z|0)>=(t|0)){break L17156}}if((w|0)==12661){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}else if((w|0)==12659){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}}}while(0);c[13656]=0}w=c[13610]|0;do{if((c[13648]|0)!=(w|0)){c[13648]=w;t=l;a[t]=81;a[l+1|0]=66;u=c[10030]|0;aI(t|0,1,2,u|0);u=s;t=c[13610]|0;if((t|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((t|0)<32768){a[u]=t>>>8&255;a[s+1|0]=t&255;t=c[10030]|0;aI(u|0,1,2,t|0);break}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);s=c[13612]|0;do{if((c[13650]|0)!=(s|0)){c[13650]=s;if((s|0)==2){c[60488]=3}else if((s|0)==1){c[60488]=2}else if((s|0)==0){c[60488]=1}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=103960,v)|0)}l=k;a[l]=82;a[k+1|0]=76;w=c[10030]|0;aI(l|0,1,2,w|0);w=r;l=r+1|0;t=c[60488]|0;if((t|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((t|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[w]=t>>>8&255;a[l]=t&255;t=c[10030]|0;aI(w|0,1,2,t|0);t=c[60489]|0;if((t|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((t|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[w]=t>>>8&255;a[l]=t&255;t=c[10030]|0;aI(w|0,1,2,t|0);t=c[60490]|0;if((t|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((t|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[w]=t>>>8&255;a[l]=t&255;t=c[10030]|0;aI(w|0,1,2,t|0);t=c[60491]|0;if((t|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((t|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[w]=t>>>8&255;a[l]=t&255;t=c[10030]|0;aI(w|0,1,2,t|0);t=c[60492]|0;if((t|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((t|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[w]=t>>>8&255;a[l]=t&255;t=c[10030]|0;aI(w|0,1,2,t|0);t=c[60493]|0;if((t|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((t|0)<32768){a[w]=t>>>8&255;a[l]=t&255;t=c[10030]|0;aI(w|0,1,2,t|0);break}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);r=c[13611]|0;do{if((c[13649]|0)!=(r|0)){c[13649]=r;k=r<<1;s=(k|0)/3&-1;t=j;a[t]=81;a[j+1|0]=-30;w=c[10030]|0;aI(t|0,1,2,w|0);w=q;if((k|0)<=-98307){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((k|0)<98304){a[w]=s>>>8&255;a[q+1|0]=s&255;s=c[10030]|0;aI(w|0,1,2,s|0);break}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);B=+h[6804];do{if(+h[6823]!=B){h[6823]=B;C=+(c[13611]|0);D=B+1.5707963267948966;c[60484]=~~(C*+S(+D));c[60485]=~~(C*+T(+D));c[60486]=~~(C*+S(+B));c[60487]=~~(C*+T(+B));q=g;a[q]=82;a[g+1|0]=8;j=c[10030]|0;aI(q|0,1,2,j|0);j=p;q=p+1|0;r=c[60484]|0;if((r|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((r|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[j]=r>>>8&255;a[q]=r&255;r=c[10030]|0;aI(j|0,1,2,r|0);r=c[60485]|0;if((r|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((r|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[j]=r>>>8&255;a[q]=r&255;r=c[10030]|0;aI(j|0,1,2,r|0);r=c[60486]|0;if((r|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((r|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[j]=r>>>8&255;a[q]=r&255;r=c[10030]|0;aI(j|0,1,2,r|0);r=c[60487]|0;if((r|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((r|0)<32768){a[j]=r>>>8&255;a[q]=r&255;r=c[10030]|0;aI(j|0,1,2,r|0);break}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);c[60480]=b;c[60481]=d+182;d=uA(e|0)|0;b=((d|0)>254?3:1)+d|0;p=(b&1|0)==0;tY(4,4,b+6|0);b=o;g=o+1|0;o=c[60480]|0;if((o|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((o|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[b]=o>>>8&255;a[g]=o&255;aI(b|0,1,2,c[10030]|0);o=c[60481]|0;if((o|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((o|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[b]=o>>>8&255;a[g]=o&255;aI(b|0,1,2,c[10030]|0);o=c[60482]|0;if((o|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((o|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[b]=o>>>8&255;a[g]=o&255;aI(b|0,1,2,c[10030]|0);b=c[10030]|0;do{if((d|0)<255){o=d<<24>>24;aF(o|0,b|0)}else{o=a[241888]|0;aF(o|0,b|0);o=n;if((d|0)<32768){a[o]=d>>>8&255;a[n+1|0]=d&255;g=c[10030]|0;aI(o|0,1,2,g|0);break}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);aI(e|0,1,d|0,c[10030]|0);if(!p){p=c[10030]|0;d=a[241880]|0;aF(d|0,p|0)}c[13596]=-2e3;c[13598]=-2e3;i=f;return}function nb(a){a=+a;var b=0;b=~~((a<0.0?1.0:a)*+((c[(c[3524]|0)+28>>2]|0)>>>0>>>0)*.5);c[13568]=b;c[13558]=(b*12&-1|0)/17&-1;c[13556]=(b*13&-1|0)/15&-1;c[13562]=(b|0)/2&-1;c[13564]=(b*36&-1|0)/29&-1;c[13566]=(b*14&-1|0)/13&-1;c[13560]=(b*18&-1|0)/29&-1;return}function nc(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0;d=i;i=i+8|0;e=d|0;f=c[3524]|0;g=a8(b|0,44)|0;if((b|0)==0){j=12758}else{if((a[b]|0)==0){j=12758}else{k=b}}if((j|0)==12758){k=242752}j=(g|0)!=0;if(j){l=g-k|0}else{l=uA(k|0)|0}b=c[13630]|0;m=c[b>>2]|0;L17297:do{if((m|0)==0){n=0;o=1.0}else{p=0;q=m;while(1){if((uA(q|0)|0)==(l|0)){if((uJ(k|0,q|0,l|0)|0)==0){break}}r=p+1|0;s=c[b+(r<<4)>>2]|0;if((s|0)==0){n=0;o=1.0;break L17297}else{p=r;q=s}}n=p+1|0;o=+h[b+(p<<4)+8>>3]}}while(0);l=(n|0)==0?1:n;c[13610]=l;n=c[b+(l-1<<4)>>2]|0;l=uA(n|0)|0;b=(l|0)>31?31:l;uF(54528,n|0,b|0);a[b+54528|0]=0;b=c[13628]|0;c[e>>2]=b;if(j){j=g+1|0;ca(j|0,21e4,(v=i,i=i+8|0,c[v>>2]=e,v)|0);t=c[e>>2]|0}else{t=b}b=aa((((c[(c[3524]|0)+8>>2]|0)+182|0)>>>0)/((c[13604]|0)>>>0)>>>0,t);c[f+16>>2]=b;c[f+20>>2]=~~(o*+(aa((((c[(c[3524]|0)+8>>2]|0)+182|0)>>>0)/((c[13604]|0)>>>0)>>>0,c[e>>2]|0)>>>0>>>0)*.527);c[13611]=b;i=d;return 1}function nd(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;g=i;i=i+64|0;h=g|0;c[h>>2]=b;c[h+4>>2]=d;j=e+b|0;c[h+12>>2]=j;c[h+16>>2]=d;c[h+24>>2]=j;j=f+d|0;c[h+28>>2]=j;c[h+36>>2]=b;c[h+40>>2]=j;c[h+48>>2]=b;c[h+52>>2]=d;c[h+8>>2]=a;no(5,h|0);i=g;return}function ne(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;f=i;i=i+112|0;g=f|0;h=f+8|0;j=f+16|0;k=f+24|0;l=f+32|0;m=f+40|0;n=f+48|0;o=f+56|0;p=f+64|0;q=f+72|0;r=f+80|0;s=f+88|0;t=f+96|0;u=f+104|0;if((e|0)<0){m5(b,d);m6(b+1|0,d);i=f;return}w=(e|0)%13&-1;e=c[13656]|0;if((e|0)!=0){x=c[13602]|0;tY(4,1,e<<1);L17316:do{if((e|0)>0){y=q;z=q+1|0;A=0;while(1){B=c[x+(A<<2)>>2]|0;if((B|0)<=-32769){C=12777;break}if((B|0)>=32768){C=12779;break}a[y]=B>>>8&255;a[z]=B&255;aI(y|0,1,2,c[10030]|0);A=A+1|0;if((A|0)>=(e|0)){break L17316}}if((C|0)==12777){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}else if((C|0)==12779){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);c[13656]=0}e=c[13642]|0;tT(0);if((w|0)>2){c[13616]=1}if((w|0)==12|(w|0)==10|(w|0)==8|(w|0)==6|(w|0)==4){c[13613]=0;c[13615]=c[13658];D=c[13616]|0}else{c[13613]=1;c[13616]=0;c[13614]=c[13658];D=0}do{if((c[13654]|0)!=(D|0)){c[13654]=D;x=p;a[x]=82;a[p+1|0]=-62;q=c[10030]|0;aI(x|0,1,2,q|0);q=u;x=c[13616]|0;if((x|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((x|0)<32768){a[q]=x>>>8&255;a[u+1|0]=x&255;x=c[10030]|0;aI(q|0,1,2,x|0);break}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);u=c[13615]|0;do{if((c[13653]|0)!=(u|0)){c[13653]=u;p=o;a[p]=82;a[o+1|0]=-30;D=c[10030]|0;aI(p|0,1,2,D|0);D=t;p=c[13615]|0;if((p|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((p|0)<32768){a[D]=p>>>8&255;a[t+1|0]=p&255;p=c[10030]|0;aI(D|0,1,2,p|0);break}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);t=c[13651]|0;o=c[13613]|0;do{if((t|0)==(o|0)){E=t}else{c[13651]=o;u=n;a[u]=83;a[n+1|0]=-62;p=c[10030]|0;aI(u|0,1,2,p|0);p=s;u=c[13651]|0;if((u|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((u|0)<32768){a[p]=u>>>8&255;a[s+1|0]=u&255;u=c[10030]|0;aI(p|0,1,2,u|0);E=c[13651]|0;break}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);do{if((E|0)!=0){s=c[13614]|0;if((c[13652]|0)==(s|0)){break}c[13652]=s;s=m;a[s]=83;a[m+1|0]=-94;n=c[10030]|0;aI(s|0,1,2,n|0);n=r;s=c[13652]|0;if((s|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((s|0)<32768){a[n]=s>>>8&255;a[r+1|0]=s&255;s=c[10030]|0;aI(n|0,1,2,s|0);break}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);do{if((w|0)==0){m5(b-(c[13568]|0)|0,d);m6((c[13568]|0)+b|0,d);m5(b,d-(c[13568]|0)|0);m6(b,(c[13568]|0)+d|0)}else if((w|0)==2){m5(b,d-(c[13568]|0)|0);m6(b,(c[13568]|0)+d|0);m5((c[13556]|0)+b|0,d-(c[13562]|0)|0);m6(b-(c[13556]|0)|0,(c[13562]|0)+d|0);m5((c[13556]|0)+b|0,(c[13562]|0)+d|0);m6(b-(c[13556]|0)|0,d-(c[13562]|0)|0)}else if((w|0)==1){r=c[13558]|0;m5(b-r|0,d-r|0);r=c[13558]|0;m6(r+b|0,r+d|0);r=c[13558]|0;m5(b-r|0,r+d|0);r=c[13558]|0;m6(r+b|0,d-r|0)}else if((w|0)==3|(w|0)==4){r=c[13558]|0;m5(b-r|0,d-r|0);r=c[13558]|0;m6(r+b|0,d-r|0);r=c[13558]|0;m6(r+b|0,r+d|0);r=c[13558]|0;m6(b-r|0,r+d|0);r=c[13656]|0;if((r|0)==0){break}m=c[13602]|0;tY(4,7,r<<1);L17377:do{if((r|0)>0){E=l;s=l+1|0;n=0;while(1){o=c[m+(n<<2)>>2]|0;if((o|0)<=-32769){C=12820;break}if((o|0)>=32768){C=12822;break}a[E]=o>>>8&255;a[s]=o&255;aI(E|0,1,2,c[10030]|0);n=n+1|0;if((n|0)>=(r|0)){break L17377}}if((C|0)==12822){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}else if((C|0)==12820){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}}}while(0);c[13656]=0}else if((w|0)==5|(w|0)==6){m5(b,d-(c[13568]|0)|0);m6((c[13562]|0)+b|0,d-(c[13556]|0)|0);m6((c[13556]|0)+b|0,d-(c[13562]|0)|0);m6((c[13568]|0)+b|0,d);m6((c[13556]|0)+b|0,(c[13562]|0)+d|0);m6((c[13562]|0)+b|0,(c[13556]|0)+d|0);m6(b,(c[13568]|0)+d|0);m6(b-(c[13562]|0)|0,(c[13556]|0)+d|0);m6(b-(c[13556]|0)|0,(c[13562]|0)+d|0);m6(b-(c[13568]|0)|0,d);m6(b-(c[13556]|0)|0,d-(c[13562]|0)|0);m6(b-(c[13562]|0)|0,d-(c[13556]|0)|0);r=c[13656]|0;if((r|0)==0){break}m=c[13602]|0;tY(4,7,r<<1);L17389:do{if((r|0)>0){n=k;E=k+1|0;s=0;while(1){o=c[m+(s<<2)>>2]|0;if((o|0)<=-32769){C=12829;break}if((o|0)>=32768){C=12831;break}a[n]=o>>>8&255;a[E]=o&255;aI(n|0,1,2,c[10030]|0);s=s+1|0;if((s|0)>=(r|0)){break L17389}}if((C|0)==12829){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}else if((C|0)==12831){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);c[13656]=0}else if((w|0)==7|(w|0)==8){m5(b,(c[13564]|0)+d|0);m6(b-(c[13566]|0)|0,d-(c[13560]|0)|0);m6((c[13566]|0)+b|0,d-(c[13560]|0)|0);r=c[13656]|0;if((r|0)==0){break}m=c[13602]|0;tY(4,7,r<<1);L17401:do{if((r|0)>0){s=j;n=j+1|0;E=0;while(1){o=c[m+(E<<2)>>2]|0;if((o|0)<=-32769){C=12838;break}if((o|0)>=32768){C=12840;break}a[s]=o>>>8&255;a[n]=o&255;aI(s|0,1,2,c[10030]|0);E=E+1|0;if((E|0)>=(r|0)){break L17401}}if((C|0)==12840){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}else if((C|0)==12838){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}}}while(0);c[13656]=0}else if((w|0)==11|(w|0)==12){m5(b-(c[13568]|0)|0,d);m6(b,d-(c[13568]|0)|0);m6((c[13568]|0)+b|0,d);m6(b,(c[13568]|0)+d|0);r=c[13656]|0;if((r|0)==0){break}m=c[13602]|0;tY(4,7,r<<1);L17413:do{if((r|0)>0){E=g;s=g+1|0;n=0;while(1){o=c[m+(n<<2)>>2]|0;if((o|0)<=-32769){C=12856;break}if((o|0)>=32768){C=12858;break}a[E]=o>>>8&255;a[s]=o&255;aI(E|0,1,2,c[10030]|0);n=n+1|0;if((n|0)>=(r|0)){break L17413}}if((C|0)==12858){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}else if((C|0)==12856){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}}}while(0);c[13656]=0}else if((w|0)==9|(w|0)==10){m5(b,d-(c[13564]|0)|0);m6(b-(c[13566]|0)|0,(c[13560]|0)+d|0);m6((c[13566]|0)+b|0,(c[13560]|0)+d|0);r=c[13656]|0;if((r|0)==0){break}m=c[13602]|0;tY(4,7,r<<1);L17425:do{if((r|0)>0){n=h;E=h+1|0;s=0;while(1){o=c[m+(s<<2)>>2]|0;if((o|0)<=-32769){C=12847;break}if((o|0)>=32768){C=12849;break}a[n]=o>>>8&255;a[E]=o&255;aI(n|0,1,2,c[10030]|0);s=s+1|0;if((s|0)>=(r|0)){break L17425}}if((C|0)==12849){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}else if((C|0)==12847){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}}}while(0);c[13656]=0}}while(0);tT(e);i=f;return}function nf(b){b=+b;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=i;i=i+24|0;e=d|0;f=d+8|0;g=d+16|0;h=~~((b>0.0?b:.5)*+((c[13622]|0)>>>0>>>0)*+((((c[(c[3524]|0)+8>>2]|0)+182|0)>>>0)/((c[13604]|0)>>>0)>>>0>>>0>>>0));if((h|0)==(c[13624]|0)){i=d;return}j=c[13656]|0;if((j|0)!=0){k=c[13602]|0;tY(4,1,j<<1);L17443:do{if((j|0)>0){l=f;m=f+1|0;n=0;while(1){o=c[k+(n<<2)>>2]|0;if((o|0)<=-32769){p=12870;break}if((o|0)>=32768){p=12872;break}a[l]=o>>>8&255;a[m]=o&255;aI(l|0,1,2,c[10030]|0);n=n+1|0;if((n|0)>=(j|0)){break L17443}}if((p|0)==12872){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}else if((p|0)==12870){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}}}while(0);c[13656]=0}c[13624]=h;h=e;a[h]=80;a[e+1|0]=98;aI(h|0,1,2,c[10030]|0);h=g;e=c[13624]|0;if((e|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((e|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[h]=e>>>8&255;a[g+1|0]=e&255;aI(h|0,1,2,c[10030]|0);tT(c[13642]|0);i=d;return}function ng(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=i;i=i+8|0;e=d|0;if((b|0)==0){f=(c[13620]|0)-96|0;i=d;return f|0}g=c[b+28>>2]|0;c[13582]=g;j=g+96|0;if((j|0)>(c[13552]|0)){c[13552]=j;c[13550]=db(c[13550]|0,(j*12&-1)+4|0,167368)|0;k=c[13582]|0}else{k=g}L17469:do{if((k|0)>0){g=b+32|0;j=0;l=289;while(1){c[(c[13550]|0)+(l<<2)>>2]=~~(+h[(c[g>>2]|0)+(j*24&-1)>>3]*255.9);c[(c[13550]|0)+(l+1<<2)>>2]=~~(+h[(c[g>>2]|0)+(j*24&-1)+8>>3]*255.9);c[(c[13550]|0)+(l+2<<2)>>2]=~~(+h[(c[g>>2]|0)+(j*24&-1)+16>>3]*255.9);m=j+1|0;n=c[13582]|0;if((m|0)>=(n|0)){o=n;break L17469}j=m;l=l+3|0}}else{o=k}}while(0);k=o+96|0;c[13554]=k;o=(k*12&-1)+4|0;k=c[13550]|0;tY(5,34,o>>>1);b=o>>>2;if((b|0)==0){f=0;i=d;return f|0}o=e;l=e+1|0;e=0;while(1){j=c[k+(e<<2)>>2]|0;if((j|0)<=-32769){p=12893;break}if((j|0)>=32768){p=12895;break}a[o]=j>>>8&255;a[l]=j&255;aI(o|0,1,2,c[10030]|0);j=e+1|0;if((j|0)<(b|0)){e=j}else{f=0;p=12901;break}}if((p|0)==12893){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0);return 0}else if((p|0)==12895){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0);return 0}else if((p|0)==12901){i=d;return f|0}return 0}function nh(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0;d=i;i=i+80|0;e=d|0;f=d+8|0;g=d+16|0;j=d+24|0;k=d+32|0;l=d+40|0;m=d+48|0;n=d+56|0;o=d+64|0;p=d+72|0;q=c[b>>2]|0;L17487:do{if((q|0)==1){r=b+4|0;s=c[r>>2]|0;do{if((s|0)>-1){t=(s>>>0)%9>>>0;u=12908}else{if((s|0)==-4){if(a[54472]|0){break}else{w=0;u=12911;break}}else{if((s|0)<-2){break}else{t=s;u=12908;break}}}}while(0);do{if((u|0)==12908){if(a[54472]|0){c[13658]=1;w=1;u=12911;break}else{w=t+3|0;u=12911;break}}}while(0);do{if((u|0)==12911){if((w|0)==(c[13658]|0)){break}c[13658]=w;c[13615]=w;s=c[13656]|0;if((s|0)!=0){x=c[13602]|0;tY(4,1,s<<1);L17506:do{if((s|0)>0){y=f;z=f+1|0;A=0;while(1){B=c[x+(A<<2)>>2]|0;if((B|0)<=-32769){u=12916;break}if((B|0)>=32768){u=12918;break}a[y]=B>>>8&255;a[z]=B&255;aI(y|0,1,2,c[10030]|0);A=A+1|0;if((A|0)>=(s|0)){break L17506}}if((u|0)==12916){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}else if((u|0)==12918){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);c[13656]=0}s=e;a[s]=80;a[e+1|0]=-126;x=c[10030]|0;aI(s|0,1,2,x|0);x=m;s=c[13658]|0;if((s|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((s|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[x]=s>>>8&255;a[m+1|0]=s&255;s=c[10030]|0;aI(x|0,1,2,s|0);s=l;a[s]=81;a[l+1|0]=-62;x=c[10030]|0;aI(s|0,1,2,x|0);x=p;s=c[13658]|0;if((s|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((s|0)<32768){a[x]=s>>>8&255;a[p+1|0]=s&255;s=c[10030]|0;aI(x|0,1,2,s|0);break}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);c[13626]=c[r>>2];i=d;return}else if((q|0)==3){s=c[b+4>>2]|0;x=s>>>16&255;A=s>>>8&255;y=s&255;s=c[13554]|0;if((s|0)<=0){C=0;break}z=c[13550]|0;B=0;D=1;E=65536;F=0;while(1){G=(c[z+(D<<2)>>2]|0)-x|0;H=(c[z+(D+1<<2)>>2]|0)-A|0;I=(c[z+(D+2<<2)>>2]|0)-y|0;J=aa(G,G);G=aa(H,H)+J|0;J=G+aa(I,I)|0;I=(J|0)<(E|0);G=I?B:F;if((J|0)<32){C=G;break L17487}H=B+1|0;if((H|0)<(s|0)){B=H;D=D+3|0;E=I?J:E;F=G}else{C=G;break}}}else if((q|0)==5){K=+h[b+8>>3];F=c[13582]|0;if(K>0.0){L=~~(K*+(F|0))}else{L=0}E=(L|0)<(F|0)?L:F-1|0;c[13615]=E;C=E+96|0}else{i=d;return}}while(0);c[13615]=C;if((c[13658]|0)==(C|0)){i=d;return}c[13658]=C;c[13626]=C;C=c[13656]|0;if((C|0)!=0){L=c[13602]|0;tY(4,1,C<<1);L17546:do{if((C|0)>0){b=k;q=k+1|0;p=0;while(1){l=c[L+(p<<2)>>2]|0;if((l|0)<=-32769){u=12943;break}if((l|0)>=32768){u=12945;break}a[b]=l>>>8&255;a[q]=l&255;aI(b|0,1,2,c[10030]|0);p=p+1|0;if((p|0)>=(C|0)){break L17546}}if((u|0)==12945){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}else if((u|0)==12943){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}}}while(0);c[13656]=0}u=j;a[u]=80;a[j+1|0]=-126;aI(u|0,1,2,c[10030]|0);u=o;j=c[13658]|0;if((j|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((j|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[u]=j>>>8&255;a[o+1|0]=j&255;aI(u|0,1,2,c[10030]|0);u=g;a[u]=81;a[g+1|0]=-62;aI(u|0,1,2,c[10030]|0);u=n;g=c[13658]|0;if((g|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((g|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[u]=g>>>8&255;a[n+1|0]=g&255;aI(u|0,1,2,c[10030]|0);i=d;return}function ni(){c[13330]=0;a[53312]=0;return}function nj(){var a=0,b=0,d=0;a=i;b=~~(+((c[13326]|0)>>>0>>>0)/10.0+.5+0.0);d=~~(+((c[13324]|0)>>>0>>>0)/10.0+.5+0.0);cf(c[10030]|0,167816,(v=i,i=i+64|0,c[v>>2]=0,c[v+8>>2]=0,c[v+16>>2]=b,c[v+24>>2]=d,c[v+32>>2]=0,c[v+40>>2]=0,c[v+48>>2]=b,c[v+56>>2]=d,v)|0);i=a;return}function nk(){aI(199192,10,1,c[10030]|0);return}function nl(){if(!(a[53312]|0)){c[13330]=0;return}aI(169392,2,1,c[10030]|0);a[53312]=0;c[13330]=0;return}function nm(b,d){b=b|0;d=d|0;var e=0,f=0;e=i;if(a[53312]|0){f=c[10030]|0;aI(169392,2,1,f|0)}cf(c[10030]|0,167984,(v=i,i=i+16|0,h[v>>3]=+(b>>>0>>>0)/10.0,h[v+8>>3]=+(d>>>0>>>0)/10.0,v)|0);c[13330]=(c[13330]|0)+1;a[53312]=1;i=e;return}function nn(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0.0;e=i;f=+(b>>>0>>>0)/10.0;g=+(d>>>0>>>0)/10.0;cf(c[10030]|0,168040,(v=i,i=i+16|0,h[v>>3]=f,h[v+8>>3]=g,v)|0);d=(c[13330]|0)+1|0;c[13330]=d;a[53312]=1;if((d|0)<=399){i=e;return}cf(c[10030]|0,168016,(v=i,i=i+16|0,h[v>>3]=f,h[v+8>>3]=g,v)|0);c[13330]=0;i=e;return}function no(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;e=i;i=i+72|0;f=e|0;g=e+8|0;h=e+16|0;j=e+24|0;k=e+32|0;l=e+40|0;m=e+48|0;n=e+56|0;o=e+64|0;p=c[d+8>>2]|0;q=(p>>4|0)%6&-1;r=p&15;do{if((r|0)==1|(r|0)==4){c[13616]=1;s=1}else if((r|0)==2|(r|0)==5){if((q|0)==0){c[13616]=0;s=0;break}else if((q|0)==3){c[13616]=1;s=1;break}else{c[13616]=3;c[13617]=c[242728+(q<<2)>>2];s=3;break}}else{c[13615]=0;c[13616]=1;s=1}}while(0);do{if((c[13654]|0)!=(s|0)){c[13654]=s;q=k;a[q]=82;a[k+1|0]=-62;r=c[10030]|0;aI(q|0,1,2,r|0);r=o;q=c[13616]|0;if((q|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((q|0)<32768){a[r]=q>>>8&255;a[o+1|0]=q&255;q=c[10030]|0;aI(r|0,1,2,q|0);break}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);o=c[13615]|0;do{if((c[13653]|0)!=(o|0)){c[13653]=o;k=j;a[k]=82;a[j+1|0]=-30;s=c[10030]|0;aI(k|0,1,2,s|0);s=n;k=c[13615]|0;if((k|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((k|0)<32768){a[s]=k>>>8&255;a[n+1|0]=k&255;k=c[10030]|0;aI(s|0,1,2,k|0);break}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);n=c[13617]|0;do{if((c[13655]|0)!=(n|0)&(c[13616]|0)==3){c[13655]=n;j=h;a[j]=83;a[h+1|0]=2;o=c[10030]|0;aI(j|0,1,2,o|0);o=m;j=c[13617]|0;if((j|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((j|0)<32768){a[o]=j>>>8&255;a[m+1|0]=j&255;j=c[10030]|0;aI(o|0,1,2,j|0);break}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);c[13613]=0;do{if((c[13651]|0)!=0){c[13651]=0;m=g;a[m]=83;a[g+1|0]=-62;h=c[10030]|0;aI(m|0,1,2,h|0);h=l;m=c[13651]|0;if((m|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((m|0)<32768){a[h]=m>>>8&255;a[l+1|0]=m&255;m=c[10030]|0;aI(h|0,1,2,m|0);break}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);m5(c[d>>2]|0,c[d+4>>2]|0);a[54560]=1;if((b|0)>1){l=1;do{m6(c[d+(l*12&-1)>>2]|0,c[d+(l*12&-1)+4>>2]|0);l=l+1|0;}while((l|0)<(b|0))}b=c[13656]|0;if((b|0)==0){a[54560]=0;i=e;return}l=c[13602]|0;tY(4,7,b<<1);L17640:do{if((b|0)>0){d=f;g=f+1|0;m=0;while(1){h=c[l+(m<<2)>>2]|0;if((h|0)<=-32769){t=13015;break}if((h|0)>=32768){t=13017;break}a[d]=h>>>8&255;a[g]=h&255;aI(d|0,1,2,c[10030]|0);m=m+1|0;if((m|0)>=(b|0)){break L17640}}if((t|0)==13015){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}else if((t|0)==13017){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);c[13656]=0;a[54560]=0;i=e;return}function np(){var b=0,d=0,e=0,f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0,O=0.0,P=0,Q=0.0,R=0,S=0,T=0,U=0,V=0.0,W=0.0,X=0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ab=0,ac=0.0;b=i;i=i+24|0;d=b|0;e=c[13898]|0;f=c[8272]|0;L17652:do{if((e|0)<(f|0)){j=e;k=f;L17653:while(1){l=c[1054]|0;m=(a[l+(j*40&-1)|0]&1)==0;L17655:do{if(!m){n=c[l+(j*40&-1)+36>>2]|0;o=l+(j*40&-1)+32|0;p=c[10036]|0;q=0;while(1){if((q|0)>=(n|0)){break}if((a[p+((c[o>>2]|0)+q|0)|0]|0)==(a[q+103664|0]|0)){q=q+1|0}else{break L17655}}if((q|0)==1){r=k;s=j;break L17652}}}while(0);o=c[60232]|0;L17662:do{if((o|0)==0){t=240928}else{p=c[l+(j*40&-1)+36>>2]|0;n=c[l+(j*40&-1)+32>>2]|0;u=(p|0)>0;w=c[10036]|0;x=240928;y=o;while(1){L17666:do{if(!m){if(u){z=0;A=0;B=n;while(1){C=a[y+z|0]|0;if(C<<24>>24==(a[w+(z+B|0)|0]|0)){D=B;E=A}else{if(C<<24>>24!=36){break L17666}D=B-1|0;E=1}F=z+1|0;if((F|0)<(E+p|0)){z=F;A=E;B=D}else{break}}if((E|0)==0){G=F}else{t=x;break L17662}}else{G=0}B=a[y+G|0]|0;if((B<<24>>24|0)==36|(B<<24>>24|0)==0){t=x;break L17662}}}while(0);B=x+8|0;A=c[B>>2]|0;if((A|0)==0){t=B;break}else{x=B;y=A}}}}while(0);o=c[t+4>>2]|0;L17679:do{if((o|0)==0){a[53408]=0;uD(53352,167792,17);c[13336]=22;g[13332]=12.0;c[13326]=5960;c[13324]=7200;y=j+1|0;c[13898]=y;H=y}else if((o|0)==2){a[53408]=1;y=j+1|0;c[13898]=y;H=y}else if((o|0)==1){a[53408]=0;y=j+1|0;c[13898]=y;H=y}else{do{if(!m){y=l+(j*40&-1)+32|0;x=c[y>>2]|0;p=c[10036]|0;w=a[p+x|0]|0;if(!((w<<24>>24|0)==39|(w<<24>>24|0)==34)){break}w=(c[l+(j*40&-1)+36>>2]|0)-2|0;n=(w|0)>49?49:w;if((n|0)>0){w=x;x=0;while(1){u=w+1|0;q=x+1|0;a[x+53352|0]=a[p+u|0]|0;if((q|0)==(n|0)){I=n;break}else{w=u;x=q}}}else{I=0}a[I+53352|0]=0;if((a[p+(c[y>>2]|0)|0]|0)==34){ua(53352)}else{x=53352;w=53352;while(1){n=a[w]|0;if((n<<24>>24|0)==0){break}else if((n<<24>>24|0)==39){q=w+1|0;u=(a[q]|0)==39?q:w;J=u;K=a[u]|0}else{J=w;K=n}a[x]=K;x=x+1|0;w=J+1|0}a[x]=0}w=(c[13898]|0)+1|0;c[13898]=w;H=w;break L17679}}while(0);w=is(d)|0;y=c[w>>2]|0;if((y|0)==2){L=+h[w+8>>3]}else if((y|0)==3){L=+uz(c[w+8>>2]|0,0)}else if((y|0)==1){L=+(c[w+8>>2]|0)}else{break L17653}w=~~L;c[13336]=w;c[13898]=(c[13898]|0)+1;c[(c[3524]|0)+16>>2]=~~(+(w|0)*10.0);c[(c[3524]|0)+20>>2]=~~(+(c[13336]|0)*10.0*6.0/10.0);H=c[13898]|0}}while(0);l=c[8272]|0;if((H|0)<(l|0)){j=H;k=l}else{r=l;s=H;break L17652}}uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{r=f;s=e}}while(0);L17709:do{if((s|0)<(r|0)){e=c[1054]|0;L17711:do{if((a[e+(s*40&-1)|0]&1)!=0){f=c[e+(s*40&-1)+36>>2]|0;H=e+(s*40&-1)+32|0;J=c[10036]|0;K=0;while(1){if((K|0)>=(f|0)){break}if((a[J+((c[H>>2]|0)+K|0)|0]|0)==(a[K+103664|0]|0)){K=K+1|0}else{break L17711}}if((K|0)==1){M=s;N=r;break L17709}}}while(0);e=is(d)|0;H=c[e>>2]|0;if((H|0)==3){O=+uz(c[e+8>>2]|0,0)}else if((H|0)==2){O=+h[e+8>>3]}else if((H|0)==1){O=+(c[e+8>>2]|0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}e=~~(O*720.0);c[13326]=e;H=(c[13898]|0)+1|0;c[13898]=H;L17724:do{if((H|0)<(c[8272]|0)){J=c[1054]|0;L17726:do{if((a[J+(H*40&-1)|0]&1)!=0){f=c[J+(H*40&-1)+36>>2]|0;I=J+(H*40&-1)+32|0;t=c[10036]|0;G=0;while(1){if((G|0)>=(f|0)){break}if((a[t+((c[I>>2]|0)+G|0)|0]|0)==(a[G+103664|0]|0)){G=G+1|0}else{break L17726}}if((G|0)==1){P=e;break L17724}}}while(0);J=is(d)|0;K=c[J>>2]|0;if((K|0)==3){Q=+uz(c[J+8>>2]|0,0)}else if((K|0)==1){Q=+(c[J+8>>2]|0)}else if((K|0)==2){Q=+h[J+8>>3]}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}c[13324]=~~(Q*720.0);c[13898]=(c[13898]|0)+1;P=c[13326]|0}else{P=e}}while(0);c[(c[3524]|0)+8>>2]=P;c[(c[3524]|0)+12>>2]=c[13324];c[(c[3524]|0)+24>>2]=((c[13324]|0)>>>0)/80>>>0;c[(c[3524]|0)+28>>2]=((c[13324]|0)>>>0)/80>>>0;M=c[13898]|0;N=c[8272]|0}else{M=s;N=r}}while(0);if((M|0)>=(N|0)){R=a[53408]|0;S=R?116440:116408;T=c[13336]|0;U=c[13326]|0;V=+(U>>>0>>>0);W=V/720.0;X=c[13324]|0;Y=+(X>>>0>>>0);Z=Y/720.0;_=+g[13332];$=_;aa=$/10.0;ab=be(13048,167736,(v=i,i=i+48|0,c[v>>2]=S,c[v+8>>2]=53352,c[v+16>>2]=T,h[v+24>>3]=W,h[v+32>>3]=Z,h[v+40>>3]=aa,v)|0)|0;i=b;return}N=c[1054]|0;L17744:do{if((a[N+(M*40&-1)|0]&1)!=0){r=c[N+(M*40&-1)+36>>2]|0;s=N+(M*40&-1)+32|0;P=c[10036]|0;e=0;while(1){if((e|0)>=(r|0)){break}if((a[P+((c[s>>2]|0)+e|0)|0]|0)==(a[e+103664|0]|0)){e=e+1|0}else{break L17744}}if((e|0)!=1){break}R=a[53408]|0;S=R?116440:116408;T=c[13336]|0;U=c[13326]|0;V=+(U>>>0>>>0);W=V/720.0;X=c[13324]|0;Y=+(X>>>0>>>0);Z=Y/720.0;_=+g[13332];$=_;aa=$/10.0;ab=be(13048,167736,(v=i,i=i+48|0,c[v>>2]=S,c[v+8>>2]=53352,c[v+16>>2]=T,h[v+24>>3]=W,h[v+32>>3]=Z,h[v+40>>3]=aa,v)|0)|0;i=b;return}}while(0);M=is(d)|0;d=c[M>>2]|0;if((d|0)==1){ac=+(c[M+8>>2]|0)}else if((d|0)==2){ac=+h[M+8>>3]}else if((d|0)==3){ac=+uz(c[M+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g[13332]=ac*10.0;c[13898]=(c[13898]|0)+1;R=a[53408]|0;S=R?116440:116408;T=c[13336]|0;U=c[13326]|0;V=+(U>>>0>>>0);W=V/720.0;X=c[13324]|0;Y=+(X>>>0>>>0);Z=Y/720.0;_=+g[13332];$=_;aa=$/10.0;ab=be(13048,167736,(v=i,i=i+48|0,c[v>>2]=S,c[v+8>>2]=53352,c[v+16>>2]=T,h[v+24>>3]=W,h[v+32>>3]=Z,h[v+40>>3]=aa,v)|0)|0;i=b;return}function nq(a){a=a|0;c[13354]=a;return 1}function nr(a){a=a|0;c[13334]=a;return 1}function ns(a,b){a=a|0;b=b|0;c[11678]=a;c[11674]=b;return}function nt(){var b=0,d=0,e=0,f=0;b=aa(c[11672]|0,c[11676]|0);if((b|0)<=0){return}d=b;b=c[11684]|0;e=c[11680]|0;while(1){a[b]=32;a[e]=0;f=d-1|0;if((f|0)>0){d=f;b=b+1|0;e=e+1|0}else{break}}return}function nu(b){b=b|0;var d=0,e=0,f=0.0;d=i;if(a[53312]|0){e=c[10030]|0;aI(169392,2,1,e|0);a[53312]=0}do{if((b|0)==3){e=c[10030]|0;f=+g[13332]/10.0;cf(e|0,168928,(v=i,i=i+8|0,h[v>>3]=f,v)|0);e=c[10030]|0;if(a[53408]|0){aI(168520,10,1,e|0);break}else{aI(168496,20,1,e|0);break}}else if((b|0)==8){cf(c[10030]|0,168928,(v=i,i=i+8|0,h[v>>3]=+g[13332]/10.0,v)|0);e=c[10030]|0;if(a[53408]|0){aI(168120,16,1,e|0);break}else{aI(168088,30,1,e|0);break}}else if((b|0)==6){cf(c[10030]|0,168928,(v=i,i=i+8|0,h[v>>3]=+g[13332]/10.0,v)|0);e=c[10030]|0;if(a[53408]|0){aI(168912,10,1,e|0);break}else{aI(168288,22,1,e|0);break}}else if((b|0)==5){cf(c[10030]|0,168928,(v=i,i=i+8|0,h[v>>3]=+g[13332]/10.0,v)|0);e=c[10030]|0;if(a[53408]|0){aI(168432,10,1,e|0);break}else{aI(168368,22,1,e|0);break}}else if((b|0)==1){cf(c[10030]|0,168928,(v=i,i=i+8|0,h[v>>3]=+g[13332]/10.0,v)|0);e=c[10030]|0;if(a[53408]|0){aI(168768,10,1,e|0);break}else{aI(168696,18,1,e|0);break}}else if((b|0)==(-2|0)){cf(c[10030]|0,168928,(v=i,i=i+8|0,h[v>>3]=+g[13332]/10.0,v)|0);e=c[10030]|0;if(a[53408]|0){aI(168912,10,1,e|0);break}else{aI(168896,15,1,e|0);break}}else if((b|0)==4){cf(c[10030]|0,168488,(v=i,i=i+8|0,h[v>>3]=+g[13332]/10.0,v)|0);e=c[10030]|0;if(a[53408]|0){aI(168472,10,1,e|0);break}else{aI(168448,22,1,e|0);break}}else if((b|0)==(-1|0)){cf(c[10030]|0,168928,(v=i,i=i+8|0,h[v>>3]=+g[13332]/10.0,v)|0);e=c[10030]|0;if(a[53408]|0){aI(168912,10,1,e|0);break}else{aI(168824,18,1,e|0);break}}else if((b|0)==0){cf(c[10030]|0,168928,(v=i,i=i+8|0,h[v>>3]=+g[13332]/10.0,v)|0);e=c[10030]|0;if(a[53408]|0){aI(168808,10,1,e|0);break}else{aI(168784,15,1,e|0);break}}else if((b|0)==2){cf(c[10030]|0,168928,(v=i,i=i+8|0,h[v>>3]=+g[13332]/10.0,v)|0);e=c[10030]|0;if(a[53408]|0){aI(168616,10,1,e|0);break}else{aI(168576,18,1,e|0);break}}else if((b|0)==7){cf(c[10030]|0,168928,(v=i,i=i+8|0,h[v>>3]=+g[13332]/10.0,v)|0);e=c[10030]|0;if(a[53408]|0){aI(168232,12,1,e|0);break}else{aI(168184,26,1,e|0);break}}}while(0);c[13330]=0;i=d;return}function nv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0.0,m=0.0;f=i;if(a[53312]|0){g=c[10030]|0;aI(169392,2,1,g|0);a[53312]=0}g=c[13334]|0;if((g|0)==2){j=c[10030]|0;k=c[13336]|0;cf(j|0,169240,(v=i,i=i+24|0,c[v>>2]=53352,c[v+8>>2]=k,c[v+16>>2]=k,v)|0)}else if((g|0)==0){k=c[13336]|0;cf(c[10030]|0,169368,(v=i,i=i+24|0,c[v>>2]=53352,c[v+8>>2]=k,c[v+16>>2]=k,v)|0)}else if((g|0)==1){g=c[13336]|0;cf(c[10030]|0,169264,(v=i,i=i+24|0,c[v>>2]=53352,c[v+8>>2]=g,c[v+16>>2]=g,v)|0)}g=c[10030]|0;l=+(b>>>0>>>0)/10.0;if((c[13354]|0)==0){m=+(d>>>0>>>0)/10.0- +(c[13336]|0)/3.0;cf(g|0,169064,(v=i,i=i+16|0,h[v>>3]=l,h[v+8>>3]=m,v)|0)}else{m=l- +(c[13336]|0)/3.0;l=+(d>>>0>>>0)/10.0;cf(g|0,168968,(v=i,i=i+16|0,h[v>>3]=m,h[v+8>>3]=l,v)|0)}aF(40,c[10030]|0);g=e;while(1){e=a[g]|0;d=g+1|0;b=e<<24>>24;if((e<<24>>24|0)==40|(e<<24>>24|0)==41|(e<<24>>24|0)==92){k=c[10030]|0;aF(92,k|0)}else if((e<<24>>24|0)==0){break}aF(b|0,c[10030]|0);g=d}aI(168944,5,1,c[10030]|0);c[13330]=0;i=f;return}function nw(){var a=0;a=c[11684]|0;if((a|0)!=0){uu(a)}c[11684]=0;return}function nx(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;aF(12,c[10030]|0);b=c[11672]|0;if((b|0)>0){d=b}else{e=c[10030]|0;f=aD(e|0)|0;return}do{d=d-1|0;b=c[11676]|0;g=aa(b,d);h=c[11684]|0;i=b;while(1){if((i|0)<=0){break}j=i-1|0;if((a[h+(g+j|0)|0]|0)==32){i=j}else{k=0;l=b;m=h;n=13169;break}}L17850:do{if((n|0)==13169){while(1){n=0;h=a[m+(aa(l,d)+k|0)|0]|0;aF(h|0,c[10030]|0);h=k+1|0;if((h|0)>=(i|0)){break L17850}k=h;l=c[11676]|0;m=c[11684]|0;n=13169}}}while(0);i=(d|0)>0;if(i|a[46744]^1){h=c[10030]|0;aF(10,h|0)}}while(i);e=c[10030]|0;f=aD(e|0)|0;return}function ny(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0.0;b=i;i=i+48|0;d=b|0;e=b+24|0;f=c[13898]|0;L17860:do{if((f|0)<(c[8272]|0)){g=d|0;j=d+8|0;k=e|0;l=e+8|0;m=f;L17862:while(1){n=c[1054]|0;o=(a[n+(m*40&-1)|0]&1)==0;L17864:do{if(!o){p=c[n+(m*40&-1)+36>>2]|0;q=n+(m*40&-1)+32|0;r=c[10036]|0;s=0;while(1){if((s|0)>=(p|0)){break}if((a[r+((c[q>>2]|0)+s|0)|0]|0)==(a[s+103664|0]|0)){s=s+1|0}else{break L17864}}if((s|0)==1){break L17860}}}while(0);q=c[60192]|0;L17871:do{if((q|0)==0){t=240768}else{r=c[n+(m*40&-1)+36>>2]|0;p=c[n+(m*40&-1)+32>>2]|0;u=(r|0)>0;w=c[10036]|0;x=240768;y=q;while(1){L17875:do{if(!o){if(u){z=0;A=0;B=p;while(1){C=a[y+z|0]|0;if(C<<24>>24==(a[w+(z+B|0)|0]|0)){D=B;E=A}else{if(C<<24>>24!=36){break L17875}D=B-1|0;E=1}F=z+1|0;if((F|0)<(E+r|0)){z=F;A=E;B=D}else{break}}if((E|0)==0){G=F}else{t=x;break L17871}}else{G=0}B=a[y+G|0]|0;if((B<<24>>24|0)==36|(B<<24>>24|0)==0){t=x;break L17871}}}while(0);B=x+8|0;A=c[B>>2]|0;if((A|0)==0){t=B;break}else{x=B;y=A}}}}while(0);o=c[t+4>>2]|0;if((o|0)==4){c[13898]=m+1;H=13201}else if((o|0)==0){c[13898]=m+1;a[46744]=0}else if((o|0)==3){c[13898]=m+1;c[(c[3524]|0)+68>>2]=104;q=(c[3524]|0)+96|0;c[q>>2]=c[q>>2]&-33}else if((o|0)==1){c[13898]=m+1;a[46744]=1}else if((o|0)==2){c[13898]=m+1;c[(c[3524]|0)+68>>2]=74;o=(c[3524]|0)+96|0;c[o>>2]=c[o>>2]|32}else{H=13201}L17894:do{if((H|0)==13201){H=0;o=is(d)|0;q=c[o>>2]|0;if((q|0)==2){I=+h[o+8>>3]}else if((q|0)==3){I=+uz(c[o+8>>2]|0,0)}else if((q|0)==1){I=+(c[o+8>>2]|0)}else{H=13205;break L17862}if((c[g>>2]|0)==3){uu(c[j>>2]|0);c[g>>2]=1}o=~~I;q=c[13898]|0;if((q|0)>=(c[8272]|0)){break}n=c[1054]|0;y=(a[n+(q*40&-1)|0]&1)==0;L17905:do{if(!y){x=c[n+(q*40&-1)+36>>2]|0;r=n+(q*40&-1)+32|0;w=c[10036]|0;p=0;while(1){if((p|0)>=(x|0)){H=13213;break}if((a[w+((c[r>>2]|0)+p|0)|0]|0)==(a[p+103664|0]|0)){p=p+1|0}else{break}}if((H|0)==13213){H=0;if((p|0)==1){break L17894}}if(y){break}r=c[n+(q*40&-1)+36>>2]|0;w=n+(q*40&-1)+32|0;x=c[10036]|0;u=0;while(1){if((u|0)>=(r|0)){break}if((a[x+((c[w>>2]|0)+u|0)|0]|0)==(a[u+148464|0]|0)){u=u+1|0}else{break L17905}}if((u|0)!=1){break}c[13898]=q+1}}while(0);q=is(e)|0;n=c[q>>2]|0;if((n|0)==1){J=+(c[q+8>>2]|0)}else if((n|0)==2){J=+h[q+8>>3]}else if((n|0)==3){J=+uz(c[q+8>>2]|0,0)}else{H=13224;break L17862}if((c[k>>2]|0)==3){uu(c[l>>2]|0);c[k>>2]=1}q=~~J;c[(c[3524]|0)+8>>2]=o;c[11676]=o;c[(c[3524]|0)+12>>2]=q;c[11672]=q}}while(0);m=c[13898]|0;if((m|0)>=(c[8272]|0)){break L17860}}if((H|0)==13224){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((H|0)==13205){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);H=(c[(c[3524]|0)+68>>2]|0)==74?217456:179864;e=c[11676]|0;d=c[11672]|0;be(13048,169488,(v=i,i=i+32|0,c[v>>2]=a[46744]|0?136208:179864,c[v+8>>2]=H,c[v+16>>2]=e,c[v+24>>2]=d,v)|0);i=b;return}function nz(){var a=0,b=0,d=0,e=0,f=0;a=i;b=c[11684]|0;if((b|0)!=0){uu(b)}b=aa((c[11676]<<1)+2|0,(c[11672]|0)+1|0);d=ut(b)|0;do{if((d|0)==0){gk();e=ut(b)|0;if((e|0)!=0){f=e;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=169528,v)|0)}else{f=d}}while(0);c[11684]=f;c[11680]=f+aa(c[11672]|0,c[11676]|0);i=a;return}function nA(){c[59832]=0;c[59834]=0;c[11664]=0;g[11668]=0.0;a[920]=0;return}function nB(){c[59832]=0;c[59834]=0;return}function nC(a){a=a|0;c[11666]=a;return 1}function nD(b,d,e,f,g,i){b=b|0;d=+d;e=+e;f=f|0;g=g|0;i=i|0;if((i|0)==3){c[59572]=c[11678];c[59570]=c[11674];return}else if((i|0)==4){b=c[59570]|0;c[11678]=c[59572];c[11674]=b;return}else{if(a[238320]|0){return}a[238320]=1;c[11232]=43856;h[29791]=e*2.0;a[238304]=g&1;c[59578]=i;a[238296]=f&1;return}}function nE(a){a=a|0;c[11664]=(((a|0)>-1?a:-a|0)|0)%7&-1;return}function nF(a){a=a|0;g[11668]=(a|0)!=0?90.0:0.0;return 1}function nG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;e=c[11674]|0;f=d-e|0;g=(f|0)>-1?f:-f|0;f=c[11678]|0;h=b-f|0;i=(h|0)>-1?h:-h|0;if((g|0)>(i|0)){j=a[46728]|0;k=j<<24>>24;if((k|0)==1){l=1;m=43;n=58}else if((k|0)==2){l=2;m=43;n=124}else{l=3;m=j;n=j}j=c[11676]|0;do{if(j>>>0<f>>>0|(c[11672]|0)>>>0<e>>>0){o=e}else{k=aa(j,e)+f|0;if((a[(c[11680]|0)+k|0]|0|0)>=(l|0)){o=e;break}a[(c[11684]|0)+k|0]=m;k=aa(c[11676]|0,e)+f|0;a[(c[11680]|0)+k|0]=l&255;o=c[11674]|0}}while(0);j=d-o|0;k=(j|0)>-1?j:-j|0;if((k|0)>1){p=l&255;q=1;r=o;o=j;j=k;while(1){k=c[11678]|0;s=~~(+(q|0)*+(b-k|0)/+(j|0)+.5)+k|0;k=aa(o>>31|1,q)+r|0;t=c[11676]|0;do{if(t>>>0<s>>>0|(c[11672]|0)>>>0<k>>>0){u=r}else{v=s+aa(t,k)|0;if((a[(c[11680]|0)+v|0]|0|0)>=(l|0)){u=r;break}a[(c[11684]|0)+v|0]=n;v=aa(c[11676]|0,k)+s|0;a[(c[11680]|0)+v|0]=p;u=c[11674]|0}}while(0);s=q+1|0;k=d-u|0;t=(k|0)>-1?k:-k|0;if((s|0)<(t|0)){q=s;r=u;o=k;j=t}else{break}}}j=c[11676]|0;if(j>>>0<b>>>0|(c[11672]|0)>>>0<d>>>0){c[11678]=b;c[11674]=d;return}o=aa(j,d)+b|0;if((a[(c[11680]|0)+o|0]|0|0)>=(l|0)){c[11678]=b;c[11674]=d;return}a[(c[11684]|0)+o|0]=m;m=aa(c[11676]|0,d)+b|0;a[(c[11680]|0)+m|0]=l&255;c[11678]=b;c[11674]=d;return}l=a[46728]|0;m=l<<24>>24;if((i|0)<=(g|0)){g=(m-1|0)>>>0<2;o=g?m:3;if((i|0)<0){c[11678]=b;c[11674]=d;return}i=g?43:l;g=o&255;j=0;u=f;r=h;h=e;while(1){q=aa(r>>31|1,j)+u|0;p=aa(d-h>>31|1,j)+h|0;n=c[11676]|0;do{if(n>>>0<q>>>0|(c[11672]|0)>>>0<p>>>0){w=u}else{t=aa(p,n)+q|0;if((a[(c[11680]|0)+t|0]|0|0)>=(o|0)){w=u;break}a[(c[11684]|0)+t|0]=i;t=aa(c[11676]|0,p)+q|0;a[(c[11680]|0)+t|0]=g;w=c[11678]|0}}while(0);q=j+1|0;p=b-w|0;if((q|0)>(((p|0)>-1?p:-p|0)|0)){break}j=q;u=w;r=p;h=c[11674]|0}c[11678]=b;c[11674]=d;return}if((m|0)==2){x=2;y=43;z=45}else if((m|0)==1){x=1;y=43;z=46}else{x=3;y=l;z=l}l=c[11676]|0;do{if(l>>>0<f>>>0|(c[11672]|0)>>>0<e>>>0){A=f}else{m=aa(l,e)+f|0;if((a[(c[11680]|0)+m|0]|0|0)>=(x|0)){A=f;break}a[(c[11684]|0)+m|0]=y;m=aa(c[11676]|0,e)+f|0;a[(c[11680]|0)+m|0]=x&255;A=c[11678]|0}}while(0);f=b-A|0;e=(f|0)>-1?f:-f|0;if((e|0)>1){l=x&255;m=1;h=A;A=f;f=e;while(1){e=aa(A>>31|1,m)+h|0;r=c[11674]|0;w=~~(+(m|0)*+(d-r|0)/+(f|0)+.5)+r|0;r=c[11676]|0;do{if(r>>>0<e>>>0|(c[11672]|0)>>>0<w>>>0){B=h}else{u=aa(w,r)+e|0;if((a[(c[11680]|0)+u|0]|0|0)>=(x|0)){B=h;break}a[(c[11684]|0)+u|0]=z;u=aa(c[11676]|0,w)+e|0;a[(c[11680]|0)+u|0]=l;B=c[11678]|0}}while(0);e=m+1|0;w=b-B|0;r=(w|0)>-1?w:-w|0;if((e|0)<(r|0)){m=e;h=B;A=w;f=r}else{break}}}f=c[11676]|0;if(f>>>0<b>>>0|(c[11672]|0)>>>0<d>>>0){c[11678]=b;c[11674]=d;return}A=aa(f,d)+b|0;if((a[(c[11680]|0)+A|0]|0|0)>=(x|0)){c[11678]=b;c[11674]=d;return}a[(c[11684]|0)+A|0]=y;y=aa(c[11676]|0,d)+b|0;a[(c[11680]|0)+y|0]=x&255;c[11678]=b;c[11674]=d;return}function nH(b){b=b|0;if((b|0)==(-1|0)){a[46728]=1;return}else if((b|0)==(-2|0)){a[46728]=2;return}else{if((b|0)<-2){a[46728]=32;return}else{a[46728]=a[240816+((b|0)%7&-1)|0]|0;return}}}function nI(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;if((e|0)==-1){f=46}else{f=((e|0)%26&-1)+65&255}e=c[11676]|0;if(e>>>0<b>>>0|(c[11672]|0)>>>0<d>>>0){return}g=aa(e,d)+b|0;if((a[(c[11680]|0)+g|0]|0)>=4){return}a[(c[11684]|0)+g|0]=f;f=aa(c[11676]|0,d)+b|0;a[(c[11680]|0)+f|0]=4;return}function nJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;f=uA(e|0)|0;g=c[11676]|0;if((f+b|0)>>>0>g>>>0){h=g-f|0;i=(h|0)<0?0:h}else{i=b}if(i>>>0<g>>>0){j=e;k=i;l=g}else{return}while(1){g=a[j]|0;if(g<<24>>24==0){m=13328;break}do{if(l>>>0<k>>>0|(c[11672]|0)>>>0<d>>>0){n=l}else{i=aa(l,d)+k|0;if((a[(c[11680]|0)+i|0]|0)>=5){n=l;break}a[(c[11684]|0)+i|0]=g;i=aa(c[11676]|0,d)+k|0;a[(c[11680]|0)+i|0]=5;n=c[11676]|0}}while(0);g=k+1|0;if(g>>>0<n>>>0){j=j+1|0;k=g;l=n}else{m=13329;break}}if((m|0)==13329){return}else if((m|0)==13328){return}}function nK(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;g=a[46728]|0;h=c[11678]|0;i=c[11674]|0;a[46728]=62;c[11678]=b;c[11674]=d;nG(e,f);a[46728]=g;c[11678]=h<<24>>24;c[11674]=i<<24>>24;return}function nL(){var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0;if(!(a[238320]|0)){return}b=c[11678]|0;a[c[11232]|0]=0;d=uA(43856)|0;e=c[11676]|0;L18067:do{if((b|0)<(e|0)){f=b;g=43856;i=e;while(1){j=a[g]|0;if(j<<24>>24==0){break L18067}do{if((a[238304]&1)==0){k=i}else{l=~~(+(c[11674]|0)+ +h[29791]);if(i>>>0<f>>>0|(c[11672]|0)>>>0<l>>>0){k=i;break}m=aa(l,i)+f|0;if((a[(c[11680]|0)+m|0]|0)>=5){k=i;break}a[(c[11684]|0)+m|0]=j;m=aa(c[11676]|0,l)+f|0;a[(c[11680]|0)+m|0]=5;k=c[11676]|0}}while(0);j=f+1|0;if((j|0)<(k|0)){f=j;g=g+1|0;i=k}else{break}}}}while(0);do{if((a[238296]&1)!=0){if((c[59578]|0)==1){c[11678]=(c[11678]|0)+((d|0)/2&-1);break}else{c[11678]=(c[11678]|0)+d;break}}}while(0);a[238320]=0;return}function nM(){var b=0;if(a[920]|0){b=c[10030]|0;aI(170576,11,1,b|0)}aI(169584,19,1,c[10030]|0);return}function nN(){var a=0,b=0,d=0.0,e=0.0;a=i;b=c[3524]|0;d=+((c[b+8>>2]|0)>>>0>>>0)/60.0;e=+((c[b+12>>2]|0)>>>0>>>0)/60.0;cf(c[10030]|0,240336,(v=i,i=i+72|0,h[v>>3]=d,h[v+8>>3]=e,h[v+16>>3]=d,h[v+24>>3]=e,c[v+32>>2]=170312,h[v+40>>3]=1.456,h[v+48>>3]=.0351,h[v+56>>3]=1.0,c[v+64>>2]=169624,v)|0);cf(c[10030]|0,239344,(v=i,i=i+8|0,c[v>>2]=7,v)|0);cf(c[10030]|0,169824,(v=i,i=i+8|0,c[v>>2]=7,v)|0);cf(c[10030]|0,169776,(v=i,i=i+24|0,c[v>>2]=103960,c[v+8>>2]=169624,c[v+16>>2]=170112,v)|0);cf(c[10030]|0,169776,(v=i,i=i+24|0,c[v>>2]=170288,c[v+8>>2]=170288,c[v+16>>2]=170104,v)|0);cf(c[10030]|0,169776,(v=i,i=i+24|0,c[v>>2]=170224,c[v+8>>2]=170224,c[v+16>>2]=170080,v)|0);cf(c[10030]|0,169776,(v=i,i=i+24|0,c[v>>2]=40160,c[v+8>>2]=40160,c[v+16>>2]=170008,v)|0);cf(c[10030]|0,169776,(v=i,i=i+24|0,c[v>>2]=170216,c[v+8>>2]=170216,c[v+16>>2]=169992,v)|0);cf(c[10030]|0,169776,(v=i,i=i+24|0,c[v>>2]=170208,c[v+8>>2]=170208,c[v+16>>2]=169976,v)|0);cf(c[10030]|0,169776,(v=i,i=i+24|0,c[v>>2]=174448,c[v+8>>2]=174448,c[v+16>>2]=169952,v)|0);aI(169632,79,1,c[10030]|0);i=a;return}function nO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0;e=i;c[59834]=b;c[59832]=d;if(a[920]|0){f=c[10030]|0;aI(170576,11,1,f|0);g=c[59834]|0;j=c[59832]|0}else{g=b;j=d}a[920]=0;d=c[11664]|0;b=c[35224+(d<<2)>>2]|0;f=c[35256+(d<<2)>>2]|0;cf(c[10030]|0,169856,(v=i,i=i+48|0,c[v>>2]=b,c[v+8>>2]=f,c[v+16>>2]=b,c[v+24>>2]=f,h[v+32>>3]=+(g>>>0>>>0)/60.0,h[v+40>>3]=+(j>>>0>>>0)/60.0,v)|0);i=e;return}function nP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=i;c[59834]=b;c[59832]=d;a[920]=1;f=c[11664]|0;g=c[35256+(f<<2)>>2]|0;cf(c[10030]|0,170144,(v=i,i=i+32|0,c[v>>2]=c[35224+(f<<2)>>2],c[v+8>>2]=g,h[v+16>>3]=+(b>>>0>>>0)/60.0,h[v+24>>3]=+(d>>>0>>>0)/60.0,v)|0);i=e;return}function nQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0;f=i;j=a[e]|0;if(j<<24>>24==0){i=f;return}else{k=0;l=j}while(1){j=k+1|0;if(l<<24>>24==0){break}k=j;l=a[e+j|0]|0}if(a[920]|0){l=c[10030]|0;aI(170576,11,1,l|0)}a[920]=0;cf(c[10030]|0,170552,(v=i,i=i+8|0,c[v>>2]=103960,v)|0);m=+g[11668];l=c[11666]|0;do{if(m!=90.0){if((l|0)==0){n=+(d>>>0>>>0)-31.2;o=n;p=+(b>>>0>>>0)+ +(k|0)*70.55999999999999;q=n;r=+(b>>>0>>>0);break}else if((l|0)==2){n=+(d>>>0>>>0)-31.2;o=n;p=+(b>>>0>>>0);q=n;r=+(b>>>0>>>0)- +(k|0)*70.55999999999999;break}else if((l|0)==1){n=+(d>>>0>>>0)-31.2;o=n;p=+(b>>>0>>>0);q=n;r=+(b>>>0>>>0)- +(k|0)*70.55999999999999*.5;break}else{o=1.0;p=1.0;q=1.0;r=1.0;break}}else{if((l|0)==2){n=+(b>>>0>>>0)+31.2;o=+(d>>>0>>>0);p=n;q=+(d>>>0>>>0)- +(k|0)*100.8;r=n;break}else if((l|0)==0){n=+(b>>>0>>>0)+31.2;o=+(d>>>0>>>0)+ +(k|0)*70.55999999999999;p=n;q=+(d>>>0>>>0);r=n;break}else if((l|0)==1){n=+(b>>>0>>>0)+31.2;o=+(d>>>0>>>0);p=n;q=+(d>>>0>>>0)- +(k|0)*70.55999999999999*.5;r=n;break}else{o=1.0;p=1.0;q=1.0;r=1.0;break}}}while(0);cf(c[10030]|0,170480,(v=i,i=i+48|0,h[v>>3]=r/60.0,h[v+8>>3]=q/60.0,h[v+16>>3]=1.456,c[v+24>>2]=e,h[v+32>>3]=m,c[v+40>>2]=170312,v)|0);e=c[11666]|0;if((e|0)==0){i=f;return}cf(c[10030]|0,170424,(v=i,i=i+24|0,c[v>>2]=e,h[v+8>>3]=p/60.0,h[v+16>>3]=o/60.0,v)|0);i=f;return}function nR(){var b=0,d=0,e=0,f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0.0,aA=0.0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0.0,aV=0,aW=0,aX=0.0,aY=0,aZ=0,a_=0,a$=0.0,a0=0.0,a1=0.0,a2=0;b=i;i=i+192|0;d=b|0;e=b+24|0;f=b+48|0;j=b+72|0;k=b+96|0;l=b+120|0;m=b+144|0;n=b+168|0;o=c[13898]|0;p=o-1|0;q=c[1054]|0;r=c[q+(p*40&-1)+36>>2]|0;L18121:do{if((a[q+(p*40&-1)|0]&1)!=0&(r|0)>0){s=c[10036]|0;t=0;u=0;w=c[q+(p*40&-1)+32>>2]|0;while(1){if((a[t+171032|0]|0)==(a[s+(t+w|0)|0]|0)){x=w;y=u}else{if((t|0)!=7){z=13384;break L18121}x=w-1|0;y=1}A=t+1|0;if((A|0)<(y+r|0)){t=A;u=y;w=x}else{break}}if((y|0)!=0){B=o;break}if((t|0)==6|(t|0)==10){B=o}else{z=13384}}else{z=13384}}while(0);if((z|0)==13384){c[(c[3524]|0)+8>>2]=27002;c[(c[3524]|0)+12>>2]=20252;a[46232]=0;a[45624]=0;c[11564]=16777215;a[45056]=0;B=c[13898]|0}o=c[8272]|0;L18134:do{if((B|0)<(o|0)){y=f|0;x=f+8|0;r=l|0;p=l+8|0;q=m|0;w=m+8|0;u=e|0;s=e+8|0;A=d|0;C=d+8|0;D=j|0;E=j+8|0;F=k|0;G=k+8|0;H=0;I=B;J=o;L18136:while(1){K=c[1054]|0;L=a[K+(I*40&-1)|0]|0;M=(L&1)==0;N=c[K+(I*40&-1)+36>>2]|0;O=K+(I*40&-1)+32|0;L18138:do{if(M){P=c[O>>2]|0;z=13456}else{Q=c[10036]|0;R=0;while(1){if((R|0)>=(N|0)){z=13392;break}if((a[Q+((c[O>>2]|0)+R|0)|0]|0)==(a[R+103664|0]|0)){R=R+1|0}else{break}}if((z|0)==13392){z=0;if((R|0)==1){S=H;T=I;break L18134}}Q=c[O>>2]|0;if(!((N|0)>0&(M^1))){P=Q;z=13456;break}U=c[10036]|0;V=0;W=0;X=Q;while(1){if((a[V+170976|0]|0)==(a[U+(V+X|0)|0]|0)){Y=X;Z=W}else{if((V|0)!=2){break}Y=X-1|0;Z=1}_=V+1|0;if((_|0)<(Z+N|0)){V=_;W=Z;X=Y}else{z=13399;break}}do{if((z|0)==13399){z=0;if((Z|0)==0){if(!((V|0)==1|(V|0)==7)){break}}a[45952]=a[216600]|0;a[45953|0]=a[216601|0]|0;a[45954|0]=a[216602|0]|0;a[45955|0]=a[216603|0]|0;a[45956|0]=a[216604|0]|0;a[45957|0]=a[216605|0]|0;g[11486]=12.0;a[45624]=0;a[46232]=0;X=(c[3524]|0)+96|0;c[X>>2]=c[X>>2]&-1025;c[13898]=(c[13898]|0)+1;$=H;break L18138}}while(0);if(M){P=Q;z=13456;break}L18160:do{if((N|0)>0){V=c[10036]|0;X=0;W=0;U=Q;while(1){if((a[X+184472|0]|0)==(a[V+(X+U|0)|0]|0)){aa=U;ab=W}else{if((X|0)!=1){break L18160}aa=U-1|0;ab=1}R=X+1|0;if((R|0)<(ab+N|0)){X=R;W=ab;U=aa}else{break}}if((ab|0)==0){if(!((X|0)==0|(X|0)==10)){break}}a[45624]=1;U=(c[3524]|0)+96|0;c[U>>2]=c[U>>2]|1024;c[13898]=(c[13898]|0)+1;$=H;break L18138}}while(0);if(!((N|0)>0&(M^1))){P=Q;z=13456;break}U=c[10036]|0;W=0;V=0;R=Q;while(1){if((a[W+115600|0]|0)==(a[U+(W+R|0)|0]|0)){ac=R;ad=V}else{if((W|0)!=1){z=13421;break}ac=R-1|0;ad=1}_=W+1|0;if((_|0)<(ad+N|0)){W=_;V=ad;R=ac}else{z=13419;break}}do{if((z|0)==13419){z=0;if((ad|0)!=0){break}if(!((W|0)==0|(W|0)==5)){z=13421}}}while(0);L18183:do{if((z|0)==13421){z=0;if(M){P=Q;z=13456;break L18138}L18186:do{if((N|0)>0){W=c[10036]|0;R=0;V=0;U=Q;while(1){if((a[R+115536|0]|0)==(a[W+(R+U|0)|0]|0)){ae=U;af=V}else{if((R|0)!=1){break L18186}ae=U-1|0;af=1}_=R+1|0;if((_|0)<(af+N|0)){R=_;V=af;U=ae}else{break}}if((af|0)!=0){break L18183}if((R|0)==0|(R|0)==6){break L18183}}}while(0);if(!((N|0)>0&(M^1))){P=Q;z=13456;break L18138}X=c[10036]|0;U=0;V=0;W=Q;while(1){if((a[U+129104|0]|0)==(a[X+(U+W|0)|0]|0)){ag=W;ah=V}else{if((U|0)!=2){break}ag=W-1|0;ah=1}_=U+1|0;if((_|0)<(ah+N|0)){U=_;V=ah;W=ag}else{z=13437;break}}do{if((z|0)==13437){z=0;if((ah|0)==0){if(!((U|0)==1|(U|0)==6)){break}}a[46232]=1;c[13898]=I+1;$=H;break L18138}}while(0);if(M){P=Q;z=13456;break L18138}L18211:do{if((N|0)>0){U=c[10036]|0;W=0;V=0;X=Q;while(1){if((a[W+217776|0]|0)==(a[U+(W+X|0)|0]|0)){ai=X;aj=V}else{if((W|0)!=5){break L18211}ai=X-1|0;aj=1}_=W+1|0;if((_|0)<(aj+N|0)){W=_;V=aj;X=ai}else{break}}if((aj|0)==0){if(!((W|0)==4|(W|0)==7)){break}}a[45616]=1;c[13898]=I+1;$=H;break L18138}}while(0);if(!((N|0)>0&(M^1))){P=Q;z=13456;break L18138}X=c[10036]|0;V=0;do{if((a[V+137232|0]|0)!=(a[X+(V+Q|0)|0]|0)){P=Q;z=13456;break L18138}V=V+1|0;}while((V|0)<(N|0));if((V|0)!=4){P=Q;z=13456;break L18138}a[45616]=0;c[13898]=I+1;$=H;break L18138}}while(0);a[45624]=0;Q=(c[3524]|0)+96|0;c[Q>>2]=c[Q>>2]&-1025;c[13898]=(c[13898]|0)+1;$=H}}while(0);L18232:do{if((z|0)==13456){z=0;O=(J|0)>(I|0);L18234:do{if(O){if(M){ak=I;al=K;am=N;an=P;ao=L;break}Q=c[10036]|0;X=0;while(1){if((X|0)>=(N|0)){break}if((a[Q+(P+X|0)|0]|0)==(a[X+128480|0]|0)){X=X+1|0}else{z=13462;break L18234}}if((X|0)==2){z=13470}else{z=13462}}else{z=13462}}while(0);L18241:do{if((z|0)==13462){z=0;L18243:do{if((N|0)>0&(M^1)){Q=c[10036]|0;V=0;U=0;R=P;while(1){if((a[V+128560|0]|0)==(a[Q+(V+R|0)|0]|0)){ap=R;aq=U}else{if((V|0)!=5){break}ap=R-1|0;aq=1}_=V+1|0;if((_|0)<(aq+N|0)){V=_;U=aq;R=ap}else{z=13468;break}}if((z|0)==13468){z=0;if((aq|0)!=0){z=13470;break L18241}if((V|0)==4|(V|0)==10){z=13470;break L18241}}if(!((N|0)>0&(M^1))){break}R=c[10036]|0;U=0;Q=0;W=P;while(1){if((a[U+115496|0]|0)==(a[R+(U+W|0)|0]|0)){ar=W;as=Q}else{if((U|0)!=1){break L18243}ar=W-1|0;as=1}_=U+1|0;if((_|0)<(as+N|0)){U=_;Q=as;W=ar}else{break}}if((as|0)==0){if(!((U|0)==0|(U|0)==5)){break}}a[46232]=0;c[13898]=I+1;$=H;break L18232}}while(0);L18267:do{if(O){if(M){ak=I;al=K;am=N;an=P;ao=L;break L18241}X=c[10036]|0;W=0;while(1){if((W|0)>=(N|0)){break}if((a[X+(P+W|0)|0]|0)==(a[W+128296|0]|0)){W=W+1|0}else{z=13494;break L18267}}if((W|0)!=2){z=13494}}else{z=13494}}while(0);do{if((z|0)==13494){z=0;if(!((N|0)>0&(M^1))){ak=I;al=K;am=N;an=P;ao=L;break L18241}X=c[10036]|0;U=0;Q=0;R=P;while(1){if((a[U+128400|0]|0)==(a[X+(U+R|0)|0]|0)){at=R;au=Q}else{if((U|0)!=5){break}at=R-1|0;au=1}V=U+1|0;if((V|0)<(au+N|0)){U=V;Q=au;R=at}else{z=13500;break}}if((z|0)==13500){z=0;if((au|0)!=0){break}if((U|0)==4|(U|0)==9){break}}if(M){ak=I;al=K;am=N;an=P;ao=L;break L18241}L18288:do{if((N|0)>0){R=c[10036]|0;Q=0;X=0;W=P;while(1){if((a[Q+122880|0]|0)==(a[R+(Q+W|0)|0]|0)){av=W;aw=X}else{if((Q|0)!=3){break L18288}av=W-1|0;aw=1}V=Q+1|0;if((V|0)<(aw+N|0)){Q=V;X=aw;W=av}else{break}}if((aw|0)==0){if(!((Q|0)==8|(Q|0)==2)){break}}c[13898]=I+1;c[(c[3524]|0)+68>>2]=124;W=(c[3524]|0)+96|0;c[W>>2]=c[W>>2]|32;$=H;break L18232}}while(0);if(!((N|0)>0&(M^1))){ak=I;al=K;am=N;an=P;ao=L;break L18241}U=c[10036]|0;W=0;X=0;R=P;while(1){if((a[W+121536|0]|0)==(a[U+(W+R|0)|0]|0)){ax=R;ay=X}else{if((W|0)!=5){ak=I;al=K;am=N;an=P;ao=L;break L18241}ax=R-1|0;ay=1}V=W+1|0;if((V|0)<(ay+N|0)){W=V;X=ay;R=ax}else{break}}if((ay|0)==0){if(!((W|0)==4|(W|0)==10)){ak=I;al=K;am=N;an=P;ao=L;break L18241}}c[13898]=I+1;c[(c[3524]|0)+68>>2]=102;R=(c[3524]|0)+96|0;c[R>>2]=c[R>>2]&-33;R=c[13898]|0;X=c[1054]|0;ak=R;al=X;am=c[X+(R*40&-1)+36>>2]|0;an=c[X+(R*40&-1)+32>>2]|0;ao=a[X+(R*40&-1)|0]|0;break L18241}}while(0);c[13898]=I+1;R=is(j)|0;X=c[R>>2]|0;if((X|0)==1){az=+(c[R+8>>2]|0)}else if((X|0)==2){az=+h[R+8>>3]}else if((X|0)==3){az=+uz(c[R+8>>2]|0,0)}else{z=13506;break L18136}if((c[D>>2]|0)==3){uu(c[E>>2]|0);c[D>>2]=1}h[5704]=az;if(az>=.1){$=H;break L18232}h[5704]=1.0;$=H;break L18232}}while(0);if((z|0)==13470){z=0;c[13898]=I+1;O=is(k)|0;R=c[O>>2]|0;if((R|0)==2){aA=+h[O+8>>3]}else if((R|0)==1){aA=+(c[O+8>>2]|0)}else if((R|0)==3){aA=+uz(c[O+8>>2]|0,0)}else{z=13474;break L18136}if((c[F>>2]|0)==3){uu(c[G>>2]|0);c[F>>2]=1}h[5778]=aA;if(aA>=.5){$=H;break}h[5778]=1.0;$=H;break}L18334:do{if((ao&1)!=0&(am|0)>0){O=c[10036]|0;R=0;X=0;U=an;while(1){if((a[R+170936|0]|0)==(a[O+(R+U|0)|0]|0)){aB=U;aC=X}else{if((R|0)!=4){aD=H;aE=ak;aF=al;aG=am;aH=an;aI=ao;break L18334}aB=U-1|0;aC=1}V=R+1|0;if((V|0)<(aC+am|0)){R=V;X=aC;U=aB}else{break}}if((aC|0)==0){if(!((R|0)==3|(R|0)==10)){aD=H;aE=ak;aF=al;aG=am;aH=an;aI=ao;break}}c[13898]=ak+1;U=hK()|0;c[11564]=U>>>16&255|U&65280|U<<16&16711680;X=c[13898]|0;O=c[1054]|0;aD=U;aE=X;aF=O;aG=c[O+(X*40&-1)+36>>2]|0;aH=c[O+(X*40&-1)+32>>2]|0;aI=a[O+(X*40&-1)|0]|0}else{aD=H;aE=ak;aF=al;aG=am;aH=an;aI=ao}}while(0);L18347:do{if((aI&1)!=0&(aG|0)>0){X=c[10036]|0;O=0;U=0;V=aH;while(1){if((a[O+170920|0]|0)==(a[X+(O+V|0)|0]|0)){aJ=V;aK=U}else{if((O|0)!=5){aL=aE;aM=aG;aN=aH;aO=aI;break L18347}aJ=V-1|0;aK=1}_=O+1|0;if((_|0)<(aK+aG|0)){O=_;U=aK;V=aJ}else{break}}if((aK|0)==0){if(!((O|0)==4|(O|0)==14)){aL=aE;aM=aG;aN=aH;aO=aI;break}}V=aE+1|0;c[13898]=V;a[45056]=1;aL=V;aM=c[aF+(V*40&-1)+36>>2]|0;aN=c[aF+(V*40&-1)+32>>2]|0;aO=a[aF+(V*40&-1)|0]|0}else{aL=aE;aM=aG;aN=aH;aO=aI}}while(0);V=(aO&1)==0;L18360:do{if((aM|0)>0&(V^1)){U=c[10036]|0;X=0;R=0;_=aN;while(1){if((a[X+90488|0]|0)==(a[U+(X+_|0)|0]|0)){aP=_;aQ=R}else{if((X|0)!=2){break L18360}aP=_-1|0;aQ=1}aR=X+1|0;if((aR|0)<(aQ+aM|0)){X=aR;R=aQ;_=aP}else{break}}if((aQ|0)==0){if(!((X|0)==4|(X|0)==1)){break}}_=aL+1|0;c[13898]=_;L18372:do{if((_|0)<(c[8272]|0)){L18374:do{if((a[aF+(_*40&-1)|0]&1)!=0){R=c[aF+(_*40&-1)+36>>2]|0;U=aF+(_*40&-1)+32|0;O=c[10036]|0;aR=0;while(1){if((aR|0)>=(R|0)){break}if((a[O+((c[U>>2]|0)+aR|0)|0]|0)==(a[aR+103664|0]|0)){aR=aR+1|0}else{break L18374}}if((aR|0)==1){aS=1024;aT=768;z=13584;break L18372}}}while(0);W=is(e)|0;U=c[W>>2]|0;if((U|0)==1){aU=+(c[W+8>>2]|0)}else if((U|0)==2){aU=+h[W+8>>3]}else if((U|0)==3){aU=+uz(c[W+8>>2]|0,0)}else{z=13566;break L18136}if((c[u>>2]|0)==3){uu(c[s>>2]|0);c[u>>2]=1}W=~~aU;U=c[13898]|0;L18389:do{if((c[8272]|0)>(U|0)){O=c[1054]|0;if((a[O+(U*40&-1)|0]&1)==0){aV=768;break}R=c[O+(U*40&-1)+36>>2]|0;Q=O+(U*40&-1)+32|0;O=c[10036]|0;aW=0;while(1){if((aW|0)>=(R|0)){break}if((a[O+((c[Q>>2]|0)+aW|0)|0]|0)==(a[aW+148464|0]|0)){aW=aW+1|0}else{aV=768;break L18389}}if((aW|0)!=1){aV=768;break}c[13898]=U+1;Q=is(d)|0;O=c[Q>>2]|0;if((O|0)==3){aX=+uz(c[Q+8>>2]|0,0)}else if((O|0)==1){aX=+(c[Q+8>>2]|0)}else if((O|0)==2){aX=+h[Q+8>>3]}else{z=13579;break L18136}if((c[A>>2]|0)==3){uu(c[C>>2]|0);c[A>>2]=1}aV=~~aX}else{aV=768}}while(0);if((W|0)>0){aS=W;aT=aV;z=13584}else{aY=aV}}else{aS=1024;aT=768;z=13584}}while(0);if((z|0)==13584){z=0;c[(c[3524]|0)+8>>2]=~~(+(aS|0)*26.37);aY=aT}if((aY|0)>0){c[(c[3524]|0)+12>>2]=~~(+(aY|0)*26.37)}_=c[3524]|0;c[_+28>>2]=((c[_+8>>2]|0)>>>0)/160>>>0;_=c[3524]|0;c[_+24>>2]=c[_+28>>2];$=aD;break L18232}}while(0);_=c[8272]|0;X=(_|0)>(aL|0);L18413:do{if(V|X^1){aZ=aL}else{U=c[10036]|0;Q=0;while(1){if((Q|0)>=(aM|0)){z=13592;break}if((a[U+(aN+Q|0)|0]|0)==(a[Q+128096|0]|0)){Q=Q+1|0}else{break}}do{if((z|0)==13592){z=0;if((Q|0)!=9){break}O=aL+1|0;c[13898]=O;L18421:do{if((O|0)<(_|0)){L18423:do{if((a[aF+(O*40&-1)|0]&1)!=0){R=c[aF+(O*40&-1)+36>>2]|0;aR=aF+(O*40&-1)+32|0;a_=0;while(1){if((a_|0)>=(R|0)){break}if((a[U+((c[aR>>2]|0)+a_|0)|0]|0)==(a[a_+103664|0]|0)){a_=a_+1|0}else{break L18423}}if((a_|0)==1){z=13606;break L18421}}}while(0);aW=is(f)|0;aR=c[aW>>2]|0;if((aR|0)==1){a$=+(c[aW+8>>2]|0)}else if((aR|0)==2){a$=+h[aW+8>>3]}else if((aR|0)==3){a$=+uz(c[aW+8>>2]|0,0)}else{z=13603;break L18136}if((c[y>>2]|0)==3){uu(c[x>>2]|0);c[y>>2]=1}h[5710]=a$;if(a$>0.0){$=aD;break L18232}}else{z=13606}}while(0);if((z|0)==13606){z=0;h[5710]=-1.0}h[5710]=1.0;$=aD;break L18232}}while(0);if(V|X^1){aZ=aL;break}U=c[10036]|0;Q=0;while(1){if((Q|0)>=(aM|0)){break}if((a[U+(aN+Q|0)|0]|0)==(a[Q+124352|0]|0)){Q=Q+1|0}else{aZ=aL;break L18413}}if((Q|0)!=4){aZ=aL;break}U=aL+1|0;c[13898]=U;aZ=U}}while(0);if((aZ|0)>=(_|0)){S=aD;T=aZ;break L18134}L18450:do{if((a[aF+(aZ*40&-1)|0]&1)!=0){X=c[aF+(aZ*40&-1)+36>>2]|0;V=aF+(aZ*40&-1)+32|0;U=c[10036]|0;O=0;while(1){if((O|0)>=(X|0)){break}if((a[U+((c[V>>2]|0)+O|0)|0]|0)==(a[O+103664|0]|0)){O=O+1|0}else{break L18450}}if((O|0)==1){S=aD;T=aZ;break L18134}}}while(0);a[14176]=1;is(l);a[14176]=0;if((c[r>>2]|0)!=3){z=13622;break L18136}_=c[p>>2]|0;if((_|0)==0){z=13624;break L18136}V=bh(_|0,44)|0;do{if((V|0)!=0){if((ca(V+1|0,170912,(v=i,i=i+8|0,c[v>>2]=45944,v)|0)|0)!=1){break}a[V]=0}}while(0);if((a[_]|0)!=0){uF(45952,_|0,255)}uu(_);if((a[(c[1054]|0)+((c[13898]|0)*40&-1)|0]&1)!=0){$=aD;break}V=is(m)|0;U=c[V>>2]|0;if((U|0)==2){a0=+h[V+8>>3]}else if((U|0)==3){a0=+uz(c[V+8>>2]|0,0)}else if((U|0)==1){a0=+(c[V+8>>2]|0)}else{z=13635;break L18136}if((c[q>>2]|0)==3){uu(c[w>>2]|0);c[q>>2]=1}g[11486]=+(~~a0|0);$=aD}}while(0);L=c[13898]|0;N=c[8272]|0;if((L|0)<(N|0)){H=$;I=L;J=N}else{S=$;T=L;break L18134}}if((z|0)==13603){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==13622){c[13898]=aZ;S=aD;T=aZ;break}else if((z|0)==13579){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==13624){S=aD;T=c[13898]|0;break}else if((z|0)==13474){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==13566){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==13506){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((z|0)==13635){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}else{S=0;T=B}}while(0);L18486:do{if((T|0)<(c[8272]|0)){B=c[1054]|0;L18488:do{if((a[B+(T*40&-1)|0]&1)!=0){z=c[B+(T*40&-1)+36>>2]|0;aD=B+(T*40&-1)+32|0;aZ=c[10036]|0;$=0;while(1){if(($|0)>=(z|0)){break}if((a[aZ+((c[aD>>2]|0)+$|0)|0]|0)==(a[$+103664|0]|0)){$=$+1|0}else{break L18488}}if(($|0)==1){break L18486}}}while(0);B=is(n)|0;aD=c[B>>2]|0;if((aD|0)==1){a1=+(c[B+8>>2]|0)}else if((aD|0)==2){a1=+h[B+8>>3]}else if((aD|0)==3){a1=+uz(c[B+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}B=n|0;if((c[B>>2]|0)==3){uu(c[n+8>>2]|0);c[B>>2]=1}g[11486]=+(~~a1|0)}}while(0);n4(0);n=a[46232]|0?131584:131504;T=a[45616]|0?137776:137232;a1=+g[11486];be(13048,170872,(v=i,i=i+40|0,c[v>>2]=a[45624]|0?116408:116440,c[v+8>>2]=n,c[v+16>>2]=T,c[v+24>>2]=45952,h[v+32>>3]=a1,v)|0);T=c[3524]|0;if((c[T+96>>2]&32|0)!=0){uD(13048+(uA(13048)|0)|0,170856,11)}a1=+h[5710];if(a1!=1.0){n=13048+(uA(13048)|0)|0;be(n|0,170824,(v=i,i=i+8|0,h[v>>3]=a1,v)|0);a2=c[3524]|0}else{a2=T}T=c[a2+8>>2]|0;n=c[a2+12>>2]|0;if(!((T|0)==27002&(n|0)==20252)){a2=13048+(uA(13048)|0)|0;B=~~(+(T>>>0>>>0)/26.37+.5);T=~~(+(n>>>0>>>0)/26.37+.5);be(a2|0,170728,(v=i,i=i+16|0,c[v>>2]=B,c[v+8>>2]=T,v)|0)}a1=+h[5704];if(a1!=1.0){T=13048+(uA(13048)|0)|0;be(T|0,170680,(v=i,i=i+8|0,h[v>>3]=a1,v)|0)}a1=+h[5778];if(a1!=1.0){T=13048+(uA(13048)|0)|0;be(T|0,170640,(v=i,i=i+8|0,h[v>>3]=a1,v)|0)}if((S|0)==0){i=b;return}be(13048+(uA(13048)|0)|0,170616,(v=i,i=i+8|0,c[v>>2]=S,v)|0);i=b;return}function nS(){c[11296]=0;c[11298]=0;c[11412]=0;c[11262]=0;a[45664]=0;return}function nT(){c[11296]=0;c[11298]=0;a[45664]=0;return}function nU(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0;b=i;i=i+8|0;d=b|0;e=d;tN();a[45664]=0;f=d;g=e+3|0;a[g]=0;h=e+2|0;a[h]=0;j=e+1|0;a[j]=0;a[f]=27;aI(f|0,1,4,c[10030]|0);a[g]=0;a[h]=0;a[j]=0;a[f]=16;aI(f|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;e=c[11300]|0;a[g]=e>>>24&255;a[h]=e>>>16&255;a[j]=e>>>8&255;a[f]=e&255;aI(f|0,1,4,c[10030]|0);e=(c[(c[3524]|0)+12>>2]|0)-(c[11301]|0)|0;a[g]=e>>>24&255;a[h]=e>>>16&255;a[j]=e>>>8&255;a[f]=e&255;aI(f|0,1,4,c[10030]|0);a[g]=0;a[h]=0;a[j]=0;a[f]=37;aI(f|0,1,4,c[10030]|0);a[g]=0;a[h]=0;a[j]=0;a[f]=12;aI(f|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[g]=-128;a[h]=0;a[j]=0;a[f]=10;aI(f|0,1,4,c[10030]|0);a[g]=0;a[h]=0;a[j]=0;a[f]=40;aI(f|0,1,4,c[10030]|0);a[g]=0;a[h]=0;a[j]=0;a[f]=12;aI(f|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[g]=0;a[h]=0;a[j]=0;a[f]=2;aI(f|0,1,4,c[10030]|0);a[g]=0;a[h]=0;a[j]=0;a[f]=37;aI(f|0,1,4,c[10030]|0);a[g]=0;a[h]=0;a[j]=0;a[f]=12;aI(f|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[g]=-128;a[h]=0;a[j]=0;a[f]=7;aI(f|0,1,4,c[10030]|0);a[g]=0;a[h]=0;a[j]=0;a[f]=40;aI(f|0,1,4,c[10030]|0);a[g]=0;a[h]=0;a[j]=0;a[f]=12;aI(f|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[g]=0;a[h]=0;a[j]=0;a[f]=1;aI(f|0,1,4,c[10030]|0);a[g]=0;a[h]=0;a[j]=0;a[f]=37;aI(f|0,1,4,c[10030]|0);a[g]=0;a[h]=0;a[j]=0;a[f]=12;aI(f|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[g]=-128;a[h]=0;a[j]=0;a[f]=0;aI(f|0,1,4,c[10030]|0);a[g]=0;a[h]=0;a[j]=0;a[f]=40;aI(f|0,1,4,c[10030]|0);a[g]=0;a[h]=0;a[j]=0;a[f]=12;aI(f|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[g]=0;a[h]=0;a[j]=0;a[f]=3;aI(f|0,1,4,c[10030]|0);a[g]=0;a[h]=0;a[j]=0;a[f]=14;aI(f|0,1,4,c[10030]|0);a[g]=0;a[h]=0;a[j]=0;a[f]=20;aI(f|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;c[d>>2]=0;aI(f|0,1,4,c[10030]|0);a[g]=0;a[h]=0;a[j]=0;a[f]=16;aI(f|0,1,4,c[10030]|0);a[g]=0;a[h]=0;a[j]=0;a[f]=20;aI(f|0,1,4,c[10030]|0);d=bc(c[10030]|0)|0;cp(c[10030]|0,48,0);a[g]=d>>>24&255;a[h]=d>>>16&255;a[j]=d>>>8&255;a[f]=d&255;aI(f|0,1,4,c[10030]|0);d=c[11294]|0;a[g]=d>>>24&255;a[h]=d>>>16&255;a[j]=d>>>8&255;a[f]=d&255;aI(f|0,1,4,c[10030]|0);cp(c[10030]|0,0,0);i=b;return}function nV(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;b=i;i=i+64|0;d=b|0;e=b+48|0;f=b+56|0;g=f;h=c[3524]|0;j=+((c[h+8>>2]|0)>>>0>>>0)/26.37;k=~~(j+.5);l=+((c[h+12>>2]|0)>>>0>>>0)/26.37;h=~~(l+.5);m=~~(j*.263671875+.5);n=~~(l*.2604166666666667+.5);c[11294]=0;o=f;p=g+3|0;a[p]=0;q=g+2|0;a[q]=0;r=g+1|0;a[r]=0;a[o]=1;aI(o|0,1,4,c[10030]|0);a[p]=0;a[q]=0;a[r]=0;a[o]=100;aI(o|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;c[f>>2]=0;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);g=~~(+((c[(c[3524]|0)+8>>2]|0)>>>0>>>0)/26.37);a[p]=g>>>24&255;a[q]=g>>>16&255;a[r]=g>>>8&255;a[o]=g&255;aI(o|0,1,4,c[10030]|0);g=~~(+((c[(c[3524]|0)+12>>2]|0)>>>0>>>0)/26.37);a[p]=g>>>24&255;a[q]=g>>>16&255;a[r]=g>>>8&255;a[o]=g&255;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);g=c[(c[3524]|0)+8>>2]|0;a[p]=g>>>24&255;a[q]=g>>>16&255;a[r]=g>>>8&255;a[o]=g&255;aI(o|0,1,4,c[10030]|0);g=c[(c[3524]|0)+12>>2]|0;a[p]=g>>>24&255;a[q]=g>>>16&255;a[r]=g>>>8&255;a[o]=g&255;aI(o|0,1,4,c[10030]|0);a[p]=70;a[q]=77;a[r]=69;a[o]=32;aI(o|0,1,4,c[10030]|0);a[p]=0;a[q]=1;a[r]=0;a[o]=0;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);g=e|0;s=e+1|0;a[s]=0;a[g]=4;aI(g|0,1,2,c[10030]|0);a[s]=0;a[g]=0;aI(g|0,1,2,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);a[p]=k>>>24&255;a[q]=k>>>16&255;a[r]=k>>>8&255;a[o]=k&255;aI(o|0,1,4,c[10030]|0);a[p]=h>>>24&255;a[q]=h>>>16&255;a[r]=h>>>8&255;a[o]=h&255;aI(o|0,1,4,c[10030]|0);a[p]=m>>>24&255;a[q]=m>>>16&255;a[r]=m>>>8&255;a[o]=m&255;aI(o|0,1,4,c[10030]|0);a[p]=n>>>24&255;a[q]=n>>>16&255;a[r]=n>>>8&255;a[o]=n&255;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);a[45664]=1;a[p]=0;a[q]=0;a[r]=0;a[o]=17;aI(o|0,1,4,c[10030]|0);a[p]=0;a[q]=0;a[r]=0;a[o]=12;aI(o|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[p]=0;a[q]=0;a[r]=0;a[o]=8;aI(o|0,1,4,c[10030]|0);a[p]=0;a[q]=0;a[r]=0;a[o]=9;aI(o|0,1,4,c[10030]|0);a[p]=0;a[q]=0;a[r]=0;a[o]=16;aI(o|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;n=c[(c[3524]|0)+8>>2]|0;a[p]=n>>>24&255;a[q]=n>>>16&255;a[r]=n>>>8&255;a[o]=n&255;aI(o|0,1,4,c[10030]|0);n=c[(c[3524]|0)+12>>2]|0;a[p]=n>>>24&255;a[q]=n>>>16&255;a[r]=n>>>8&255;a[o]=n&255;aI(o|0,1,4,c[10030]|0);a[p]=0;a[q]=0;a[r]=0;a[o]=11;aI(o|0,1,4,c[10030]|0);a[p]=0;a[q]=0;a[r]=0;a[o]=16;aI(o|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;n=~~(+((c[(c[3524]|0)+8>>2]|0)>>>0>>>0)/26.37);a[p]=n>>>24&255;a[q]=n>>>16&255;a[r]=n>>>8&255;a[o]=n&255;aI(o|0,1,4,c[10030]|0);n=~~(+((c[(c[3524]|0)+12>>2]|0)>>>0>>>0)/26.37);a[p]=n>>>24&255;a[q]=n>>>16&255;a[r]=n>>>8&255;a[o]=n&255;aI(o|0,1,4,c[10030]|0);if((c[11564]|0)!=16777215){n=c[3524]|0;m=c[n+8>>2]|0;h=c[n+12>>2]|0;c[d>>2]=0;c[d+4>>2]=0;c[d+12>>2]=m;c[d+16>>2]=0;c[d+24>>2]=m;c[d+28>>2]=h;c[d+36>>2]=0;c[d+40>>2]=h;c[d+8>>2]=0;n9(4,d|0)}a[p]=0;a[q]=0;a[r]=0;a[o]=38;aI(o|0,1,4,c[10030]|0);a[p]=0;a[q]=0;a[r]=0;a[o]=28;aI(o|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[p]=0;a[q]=0;a[r]=0;a[o]=1;aI(o|0,1,4,c[10030]|0);d=a[45616]|0;a[p]=0;a[q]=0;a[r]=d?0:34;a[o]=0;aI(o|0,1,4,c[10030]|0);a[p]=0;a[q]=0;a[r]=0;a[o]=1;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);a[p]=0;a[q]=0;a[r]=0;a[o]=37;aI(o|0,1,4,c[10030]|0);a[p]=0;a[q]=0;a[r]=0;a[o]=12;aI(o|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[p]=0;a[q]=0;a[r]=0;a[o]=1;aI(o|0,1,4,c[10030]|0);a[p]=0;a[q]=0;a[r]=0;a[o]=18;aI(o|0,1,4,c[10030]|0);a[p]=0;a[q]=0;a[r]=0;a[o]=12;aI(o|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[p]=0;a[q]=0;a[r]=0;a[o]=1;aI(o|0,1,4,c[10030]|0);a[p]=0;a[q]=0;a[r]=0;a[o]=39;aI(o|0,1,4,c[10030]|0);a[p]=0;a[q]=0;a[r]=0;a[o]=24;aI(o|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[p]=0;a[q]=0;a[r]=0;a[o]=3;aI(o|0,1,4,c[10030]|0);a[p]=0;a[q]=0;a[r]=0;a[o]=1;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);a[p]=0;a[q]=0;a[r]=0;a[o]=37;aI(o|0,1,4,c[10030]|0);a[p]=0;a[q]=0;a[r]=0;a[o]=12;aI(o|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[p]=0;a[q]=0;a[r]=0;a[o]=3;aI(o|0,1,4,c[10030]|0);n4(0);c[11280]=-5;c[11562]=-5;i=b;return}function nW(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;e=c[3524]|0;if((c[e+8>>2]|0)>>>0>a>>>0){if((c[e+12>>2]|0)>>>0>b>>>0){f=b;g=a}else{h=13676}}else{h=13676}if((h|0)==13676){uh(-1,171048,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=b,v)|0);h=c[3524]|0;e=c[h+8>>2]|0;j=c[h+12>>2]|0;f=j>>>0>b>>>0?b:j;g=e>>>0>a>>>0?a:e}if((g|0)==(c[11298]|0)&(f|0)==(c[11296]|0)){i=d;return}tN();c[11298]=g;c[11296]=f;i=d;return}function nX(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;e=c[3524]|0;if((c[e+8>>2]|0)>>>0>a>>>0){if((c[e+12>>2]|0)>>>0<=b>>>0){f=13684}}else{f=13684}if((f|0)==13684){uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=b,v)|0)}if((c[11298]|0)==(a|0)&(c[11296]|0)==(b|0)){i=d;return}f=c[11560]|0;if((f<<1|0)>102){tN();g=c[11560]|0}else{g=f}if((g|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;h=1}else{h=g}g=h<<1;c[45200+(g<<2)>>2]=a;c[11298]=a;c[45200+((g|1)<<2)>>2]=b;c[11296]=b;c[11560]=h+1;i=d;return}function nY(b){b=b|0;var d=0,e=0,f=0;tN();d=(b|0)==-3?-4:b;c[11412]=d;if((d|0)==-4){e=46256}else{if((d|0)<0|a[45624]){f=7}else{f=(d|0)%15&-1}e=238816+(f<<2)|0}c[11562]=c[e>>2];tN();tL(d);return}function nZ(a){a=a|0;do{if((a|0)==0){if((c[11262]|0)==0){break}c[11262]=0;tO()}else if((a|0)==(-270|0)){if((c[11262]|0)==900){break}c[11262]=900;tO()}else{c[11262]=a*10&-1;tO()}}while(0);return 1}function n_(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;i=i+8|0;e=d|0;c[11414]=b;if((b|0)==2){f=10}else if((b|0)==1){f=14}else{f=8}b=e|0;g=e+3|0;a[g]=0;h=e+2|0;a[h]=0;j=e+1|0;a[j]=0;a[b]=22;aI(b|0,1,4,c[10030]|0);a[g]=0;a[h]=0;a[j]=0;a[b]=12;aI(b|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[g]=0;a[h]=0;a[j]=0;a[b]=f;aI(b|0,1,4,c[10030]|0);i=d;return 1}function n$(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0.0,z=0,A=0,B=0;f=i;i=i+8|0;g=f|0;h=g;j=i;i=i+4|0;i=i+7>>3<<3;k=i;i=i+4|0;i=i+7>>3<<3;l=i;i=i+4|0;i=i+7>>3<<3;m=i;i=i+4|0;i=i+7>>3<<3;n=uA(e|0)|0;do{if(((c[11252]|0)-14|0)>>>0<2){c[l>>2]=e;o=uA(e|0)|0;c[k>>2]=o;p=(o<<1)+2|0;c[j>>2]=p;q=ut(p)|0;do{if((q|0)==0){gk();r=ut(p)|0;if((r|0)!=0){s=r;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=171392,v)|0)}else{s=q}}while(0);c[m>>2]=s;q=bi(171336,((c[11252]|0)==15?171384:171360)|0)|0;if((q|0)==-1){uh(-1,171312,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);t=s;u=o;w=n;break}if((aG(q|0,l|0,k|0,m|0,j|0)|0)==-1){uh(-1,171280,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}cz(q|0);q=p-(c[j>>2]|0)|0;t=s;u=(q|0)/2&-1;w=q}else{t=0;u=n;w=n}}while(0);if((w|0)<1){i=f;return}tN();if((c[11280]|0)!=(c[11562]|0)){n=g;s=h+3|0;a[s]=0;j=h+2|0;a[j]=0;m=h+1|0;a[m]=0;a[n]=24;k=c[10030]|0;aI(n|0,1,4,k|0);a[s]=0;a[j]=0;a[m]=0;a[n]=12;k=c[10030]|0;aI(n|0,1,4,k|0);c[11294]=(c[11294]|0)+1;k=c[11562]|0;a[s]=k>>>24&255;a[j]=k>>>16&255;a[m]=k>>>8&255;a[n]=k&255;k=c[10030]|0;aI(n|0,1,4,k|0);c[11280]=c[11562]}k=(w|0)%4&-1;if((k|0)==0){x=w}else{x=(w+4|0)-k|0}k=((c[11252]|0)-14|0)>>>0<2;n=g;m=h+3|0;a[m]=0;j=h+2|0;a[j]=0;s=h+1|0;a[s]=0;if(k){a[n]=84;k=c[10030]|0;aI(n|0,1,4,k|0);k=((u<<2)+76|0)+x|0;a[m]=k>>>24&255;a[j]=k>>>16&255;a[s]=k>>>8&255;a[n]=k&255;k=c[10030]|0;aI(n|0,1,4,k|0)}else{a[n]=83;k=c[10030]|0;aI(n|0,1,4,k|0);k=((u<<2)+76|0)+x|0;a[m]=k>>>24&255;a[j]=k>>>16&255;a[s]=k>>>8&255;a[n]=k&255;k=c[10030]|0;aI(n|0,1,4,k|0)}c[11294]=(c[11294]|0)+1;c[g>>2]=0;aI(n|0,1,4,c[10030]|0);c[g>>2]=0;aI(n|0,1,4,c[10030]|0);c[g>>2]=0;aI(n|0,1,4,c[10030]|0);c[g>>2]=0;aI(n|0,1,4,c[10030]|0);a[m]=0;a[j]=0;a[s]=0;a[n]=1;aI(n|0,1,4,c[10030]|0);a[m]=65;a[j]=-46;a[s]=-11;a[n]=-61;aI(n|0,1,4,c[10030]|0);a[m]=65;a[j]=-46;a[s]=-11;a[n]=-61;aI(n|0,1,4,c[10030]|0);y=+((c[(c[3524]|0)+16>>2]|0)>>>1>>>0>>>0);k=~~(y*+T(+(+(c[11262]|0)*.0017453292519944445)))+b|0;a[m]=k>>>24&255;a[j]=k>>>16&255;a[s]=k>>>8&255;a[n]=k&255;aI(n|0,1,4,c[10030]|0);k=c[3524]|0;b=(c[k+12>>2]|0)-d|0;y=+((c[k+16>>2]|0)>>>1>>>0>>>0);k=~~(y*+S(+(+(c[11262]|0)*.0017453292519944445)))+b|0;a[m]=k>>>24&255;a[j]=k>>>16&255;a[s]=k>>>8&255;a[n]=k&255;aI(n|0,1,4,c[10030]|0);a[m]=u>>>24&255;a[j]=u>>>16&255;a[s]=u>>>8&255;a[n]=u&255;aI(n|0,1,4,c[10030]|0);a[m]=0;a[j]=0;a[s]=0;a[n]=76;aI(n|0,1,4,c[10030]|0);c[g>>2]=0;aI(n|0,1,4,c[10030]|0);c[g>>2]=0;aI(n|0,1,4,c[10030]|0);c[g>>2]=0;aI(n|0,1,4,c[10030]|0);c[g>>2]=0;aI(n|0,1,4,c[10030]|0);c[g>>2]=0;aI(n|0,1,4,c[10030]|0);c[g>>2]=0;aI(n|0,1,4,c[10030]|0);g=(x|0)>0;do{if(((c[11252]|0)-14|0)>>>0<2){if(g){k=0;do{if((k|0)<(w|0)){z=a[t+k|0]|0}else{z=0}aF(z|0,c[10030]|0);k=k+1|0;}while((k|0)<(x|0))}uu(t)}else{if(g){A=0}else{break}do{if((A|0)<(w|0)){B=a[e+A|0]|0}else{B=0}aF(B|0,c[10030]|0);A=A+1|0;}while((A|0)<(x|0))}}while(0);if((u|0)>0){x=0;do{a[m]=0;a[j]=0;a[s]=1;a[n]=44;aI(n|0,1,4,c[10030]|0);x=x+1|0;}while((x|0)<(u|0))}c[11296]=-2e3;c[11298]=-2e3;i=f;return}function n0(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aY=0,aZ=0,a_=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,ba=0,bb=0,bc=0,bd=0,be=0,bf=0,bg=0,bh=0,bi=0,bj=0,bk=0,bl=0,bm=0,bn=0,bo=0,bp=0,bq=0,br=0,bs=0,bt=0,bu=0,bv=0,bw=0,bx=0,by=0,bz=0,bA=0,bB=0,bC=0,bD=0,bE=0,bF=0,bG=0,bH=0,bI=0,bJ=0,bK=0,bL=0,bM=0,bN=0,bO=0,bP=0,bQ=0,bR=0,bS=0,bT=0,bU=0,bV=0,bW=0,bX=0,bY=0,bZ=0,b_=0,b$=0,b0=0,b1=0,b2=0;f=i;i=i+8|0;g=f|0;h=g;j=i;i=i+144|0;k=j|0;c[j+8>>2]=1601;tN();l=c[11554]|0;c[11554]=0;c[11552]=(c[11552]|0)+1;if((e-69|0)>>>0<5){m=c[11562]|0;c[11562]=c[11564];if((e|0)==71){n0(b,d,8);c[11562]=m;n0(b,d,7);c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}else if((e|0)==73){n0(b,d,12);c[11562]=m;n0(b,d,11);c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}else if((e|0)==69){n0(b,d,4);c[11562]=m;n0(b,d,3);c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}else if((e|0)==70){n0(b,d,6);c[11562]=m;n0(b,d,5);c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}else if((e|0)==72){n0(b,d,10);c[11562]=m;n0(b,d,9);c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}else{c[11562]=m;c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}}m=c[3524]|0;if((c[m+8>>2]|0)>>>0>b>>>0){if((c[m+12>>2]|0)>>>0>d>>>0){p=d;q=b;r=m}else{s=13753}}else{s=13753}if((s|0)==13753){uh(-1,171048,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=d,v)|0);m=c[3524]|0;t=c[m+8>>2]|0;u=c[m+12>>2]|0;p=u>>>0>d>>>0?d:u;q=t>>>0>b>>>0?b:t;r=m}if((q|0)==(c[11298]|0)&(p|0)==(c[11296]|0)){w=r}else{tN();c[11298]=q;c[11296]=p;w=c[3524]|0}r=b+1|0;if((c[w+8>>2]|0)>>>0>r>>>0){if((c[w+12>>2]|0)>>>0>d>>>0){x=q;y=p}else{s=13758}}else{s=13758}if((s|0)==13758){uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=r,c[v+8>>2]=d,v)|0);x=c[11298]|0;y=c[11296]|0}if(!((x|0)==(r|0)&(y|0)==(d|0))){y=c[11560]|0;if((y<<1|0)>102){tN();z=c[11560]|0}else{z=y}if((z|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;A=1}else{A=z}z=A<<1;c[45200+(z<<2)>>2]=r;c[11298]=r;c[45200+((z|1)<<2)>>2]=d;c[11296]=d;c[11560]=A+1}A=(e|0)%13&-1;if((A|0)==10){c[j>>2]=b;c[j+4>>2]=d-(c[11274]|0);e=c[11276]|0;c[j+12>>2]=b-e;z=(c[11270]|0)+d|0;c[j+16>>2]=z;c[j+24>>2]=e+b;c[j+28>>2]=z;n9(3,k);c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}else if((A|0)==11){z=b-(c[11278]|0)|0;e=c[3524]|0;if((c[e+8>>2]|0)>>>0>z>>>0){if((c[e+12>>2]|0)>>>0>d>>>0){B=d;C=z;D=r;E=d;F=e}else{s=13949}}else{s=13949}if((s|0)==13949){uh(-1,171048,(v=i,i=i+16|0,c[v>>2]=z,c[v+8>>2]=d,v)|0);e=c[3524]|0;y=c[e+8>>2]|0;x=c[e+12>>2]|0;B=x>>>0>d>>>0?d:x;C=y>>>0>z>>>0?z:y;D=c[11298]|0;E=c[11296]|0;F=e}if((C|0)==(D|0)&(B|0)==(E|0)){G=F;H=D;I=E}else{tN();c[11298]=C;c[11296]=B;G=c[3524]|0;H=C;I=B}B=d-(c[11278]|0)|0;if((c[G+8>>2]|0)>>>0>b>>>0){if((c[G+12>>2]|0)>>>0>B>>>0){J=H;K=I}else{s=13954}}else{s=13954}if((s|0)==13954){uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=B,v)|0);J=c[11298]|0;K=c[11296]|0}if(!((J|0)==(b|0)&(K|0)==(B|0))){K=c[11560]|0;if((K<<1|0)>102){tN();L=c[11560]|0}else{L=K}if((L|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;M=1}else{M=L}L=M<<1;c[45200+(L<<2)>>2]=b;c[11298]=b;c[45200+((L|1)<<2)>>2]=B;c[11296]=B;c[11560]=M+1}M=(c[11278]|0)+b|0;L=c[3524]|0;if((c[L+8>>2]|0)>>>0>M>>>0){if((c[L+12>>2]|0)>>>0>d>>>0){N=b;O=B}else{s=13963}}else{s=13963}if((s|0)==13963){uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=M,c[v+8>>2]=d,v)|0);N=c[11298]|0;O=c[11296]|0}if(!((N|0)==(M|0)&(O|0)==(d|0))){O=c[11560]|0;if((O<<1|0)>102){tN();P=c[11560]|0}else{P=O}if((P|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;Q=1}else{Q=P}P=Q<<1;c[45200+(P<<2)>>2]=M;c[11298]=M;c[45200+((P|1)<<2)>>2]=d;c[11296]=d;c[11560]=Q+1}Q=(c[11278]|0)+d|0;P=c[3524]|0;if((c[P+8>>2]|0)>>>0>b>>>0){if((c[P+12>>2]|0)>>>0>Q>>>0){R=M;S=d}else{s=13972}}else{s=13972}if((s|0)==13972){uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=Q,v)|0);R=c[11298]|0;S=c[11296]|0}if(!((R|0)==(b|0)&(S|0)==(Q|0))){S=c[11560]|0;if((S<<1|0)>102){tN();T=c[11560]|0}else{T=S}if((T|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;U=1}else{U=T}T=U<<1;c[45200+(T<<2)>>2]=b;c[11298]=b;c[45200+((T|1)<<2)>>2]=Q;c[11296]=Q;c[11560]=U+1}tP();c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}else if((A|0)==12){U=c[11278]|0;c[j>>2]=b-U;c[j+4>>2]=d;c[j+12>>2]=b;c[j+16>>2]=d-U;c[j+24>>2]=U+b;c[j+28>>2]=d;c[j+36>>2]=b;c[j+40>>2]=U+d;n9(4,k);c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}else if((A|0)==4){U=c[11268]|0;Q=b-U|0;c[j>>2]=Q;T=d-U|0;c[j+4>>2]=T;S=U+b|0;c[j+12>>2]=S;c[j+16>>2]=T;c[j+24>>2]=S;S=U+d|0;c[j+28>>2]=S;c[j+36>>2]=Q;c[j+40>>2]=S;n9(4,k);c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}else if((A|0)==5){S=(c[(c[3524]|0)+12>>2]|0)-d|0;Q=g;U=h+3|0;a[U]=0;T=h+2|0;a[T]=0;R=h+1|0;a[R]=0;a[Q]=37;aI(Q|0,1,4,c[10030]|0);a[U]=0;a[T]=0;a[R]=0;a[Q]=12;aI(Q|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[U]=-128;a[T]=0;a[R]=0;a[Q]=7;aI(Q|0,1,4,c[10030]|0);a[U]=0;a[T]=0;a[R]=0;a[Q]=37;aI(Q|0,1,4,c[10030]|0);a[U]=0;a[T]=0;a[R]=0;a[Q]=12;aI(Q|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[U]=-128;a[T]=0;a[R]=0;a[Q]=0;aI(Q|0,1,4,c[10030]|0);a[U]=0;a[T]=0;a[R]=0;a[Q]=40;aI(Q|0,1,4,c[10030]|0);a[U]=0;a[T]=0;a[R]=0;a[Q]=12;aI(Q|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[U]=0;a[T]=0;a[R]=0;a[Q]=3;aI(Q|0,1,4,c[10030]|0);a[U]=0;a[T]=0;a[R]=0;a[Q]=39;aI(Q|0,1,4,c[10030]|0);a[U]=0;a[T]=0;a[R]=0;a[Q]=24;aI(Q|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[U]=0;a[T]=0;a[R]=0;a[Q]=3;aI(Q|0,1,4,c[10030]|0);a[U]=0;a[T]=0;a[R]=0;a[Q]=1;aI(Q|0,1,4,c[10030]|0);c[g>>2]=0;aI(Q|0,1,4,c[10030]|0);c[g>>2]=0;aI(Q|0,1,4,c[10030]|0);a[U]=0;a[T]=0;a[R]=0;a[Q]=37;aI(Q|0,1,4,c[10030]|0);a[U]=0;a[T]=0;a[R]=0;a[Q]=12;aI(Q|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[U]=0;a[T]=0;a[R]=0;a[Q]=3;aI(Q|0,1,4,c[10030]|0);a[U]=0;a[T]=0;a[R]=0;a[Q]=40;aI(Q|0,1,4,c[10030]|0);a[U]=0;a[T]=0;a[R]=0;a[Q]=12;aI(Q|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[U]=0;a[T]=0;a[R]=0;a[Q]=1;aI(Q|0,1,4,c[10030]|0);a[U]=0;a[T]=0;a[R]=0;a[Q]=38;aI(Q|0,1,4,c[10030]|0);a[U]=0;a[T]=0;a[R]=0;a[Q]=28;aI(Q|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[U]=0;a[T]=0;a[R]=0;a[Q]=1;aI(Q|0,1,4,c[10030]|0);M=a[45616]|0;a[U]=0;a[T]=0;a[R]=M?0:34;a[Q]=0;aI(Q|0,1,4,c[10030]|0);a[U]=0;a[T]=0;a[R]=0;a[Q]=1;aI(Q|0,1,4,c[10030]|0);c[g>>2]=0;aI(Q|0,1,4,c[10030]|0);M=c[11562]|0;a[U]=M>>>24&255;a[T]=M>>>16&255;a[R]=M>>>8&255;a[Q]=M&255;aI(Q|0,1,4,c[10030]|0);a[U]=0;a[T]=0;a[R]=0;a[Q]=37;aI(Q|0,1,4,c[10030]|0);a[U]=0;a[T]=0;a[R]=0;a[Q]=12;aI(Q|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[U]=0;a[T]=0;a[R]=0;a[Q]=1;aI(Q|0,1,4,c[10030]|0);a[U]=0;a[T]=0;a[R]=0;a[Q]=42;aI(Q|0,1,4,c[10030]|0);a[U]=0;a[T]=0;a[R]=0;a[Q]=24;aI(Q|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;M=b-(c[11278]|0)|0;a[U]=M>>>24&255;a[T]=M>>>16&255;a[R]=M>>>8&255;a[Q]=M&255;aI(Q|0,1,4,c[10030]|0);M=S-(c[11278]|0)|0;a[U]=M>>>24&255;a[T]=M>>>16&255;a[R]=M>>>8&255;a[Q]=M&255;aI(Q|0,1,4,c[10030]|0);M=(c[11278]|0)+b|0;a[U]=M>>>24&255;a[T]=M>>>16&255;a[R]=M>>>8&255;a[Q]=M&255;aI(Q|0,1,4,c[10030]|0);M=(c[11278]|0)+S|0;a[U]=M>>>24&255;a[T]=M>>>16&255;a[R]=M>>>8&255;a[Q]=M&255;aI(Q|0,1,4,c[10030]|0);c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}else if((A|0)==6){Q=(c[(c[3524]|0)+12>>2]|0)-d|0;M=g;R=h+3|0;a[R]=0;T=h+2|0;a[T]=0;U=h+1|0;a[U]=0;a[M]=37;aI(M|0,1,4,c[10030]|0);a[R]=0;a[T]=0;a[U]=0;a[M]=12;aI(M|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[R]=-128;a[T]=0;a[U]=0;a[M]=0;aI(M|0,1,4,c[10030]|0);a[R]=0;a[T]=0;a[U]=0;a[M]=40;aI(M|0,1,4,c[10030]|0);a[R]=0;a[T]=0;a[U]=0;a[M]=12;aI(M|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[R]=0;a[T]=0;a[U]=0;a[M]=3;aI(M|0,1,4,c[10030]|0);a[R]=0;a[T]=0;a[U]=0;a[M]=39;aI(M|0,1,4,c[10030]|0);a[R]=0;a[T]=0;a[U]=0;a[M]=24;aI(M|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[R]=0;a[T]=0;a[U]=0;a[M]=3;aI(M|0,1,4,c[10030]|0);c[g>>2]=0;aI(M|0,1,4,c[10030]|0);h=c[11562]|0;a[R]=h>>>24&255;a[T]=h>>>16&255;a[U]=h>>>8&255;a[M]=h&255;aI(M|0,1,4,c[10030]|0);c[g>>2]=0;aI(M|0,1,4,c[10030]|0);a[R]=0;a[T]=0;a[U]=0;a[M]=37;aI(M|0,1,4,c[10030]|0);a[R]=0;a[T]=0;a[U]=0;a[M]=12;aI(M|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[R]=0;a[T]=0;a[U]=0;a[M]=3;aI(M|0,1,4,c[10030]|0);a[R]=0;a[T]=0;a[U]=0;a[M]=42;aI(M|0,1,4,c[10030]|0);a[R]=0;a[T]=0;a[U]=0;a[M]=24;aI(M|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;g=b-(c[11278]|0)|0;a[R]=g>>>24&255;a[T]=g>>>16&255;a[U]=g>>>8&255;a[M]=g&255;aI(M|0,1,4,c[10030]|0);g=Q-(c[11278]|0)|0;a[R]=g>>>24&255;a[T]=g>>>16&255;a[U]=g>>>8&255;a[M]=g&255;aI(M|0,1,4,c[10030]|0);g=(c[11278]|0)+b|0;a[R]=g>>>24&255;a[T]=g>>>16&255;a[U]=g>>>8&255;a[M]=g&255;aI(M|0,1,4,c[10030]|0);g=(c[11278]|0)+Q|0;a[R]=g>>>24&255;a[T]=g>>>16&255;a[U]=g>>>8&255;a[M]=g&255;aI(M|0,1,4,c[10030]|0);c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}else if((A|0)==7){M=(c[11274]|0)+d|0;g=c[3524]|0;if((c[g+8>>2]|0)>>>0>b>>>0){if((c[g+12>>2]|0)>>>0>M>>>0){V=b;W=M;s=13902}else{s=13901}}else{s=13901}if((s|0)==13901){uh(-1,171048,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=M,v)|0);g=c[3524]|0;U=c[g+8>>2]|0;T=U>>>0>b>>>0?b:U;U=c[g+12>>2]|0;R=U>>>0>M>>>0?M:U;U=c[11298]|0;M=c[11296]|0;if((T|0)==(U|0)&(R|0)==(M|0)){X=g;Y=U;Z=M}else{V=T;W=R;s=13902}}if((s|0)==13902){tN();c[11298]=V;c[11296]=W;X=c[3524]|0;Y=V;Z=W}W=b-(c[11276]|0)|0;V=d-(c[11270]|0)|0;if((c[X+8>>2]|0)>>>0>W>>>0){if((c[X+12>>2]|0)>>>0>V>>>0){_=Y;$=Z}else{s=13905}}else{s=13905}if((s|0)==13905){uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=W,c[v+8>>2]=V,v)|0);_=c[11298]|0;$=c[11296]|0}if(!((_|0)==(W|0)&($|0)==(V|0))){$=c[11560]|0;if(($<<1|0)>102){tN();aa=c[11560]|0}else{aa=$}if((aa|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;ab=1}else{ab=aa}aa=ab<<1;c[45200+(aa<<2)>>2]=W;c[11298]=W;c[45200+((aa|1)<<2)>>2]=V;c[11296]=V;c[11560]=ab+1}ab=(c[11276]|0)+b|0;aa=d-(c[11270]|0)|0;$=c[3524]|0;if((c[$+8>>2]|0)>>>0>ab>>>0){if((c[$+12>>2]|0)>>>0>aa>>>0){ac=W;ad=V}else{s=13914}}else{s=13914}if((s|0)==13914){uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=ab,c[v+8>>2]=aa,v)|0);ac=c[11298]|0;ad=c[11296]|0}if(!((ac|0)==(ab|0)&(ad|0)==(aa|0))){ad=c[11560]|0;if((ad<<1|0)>102){tN();ae=c[11560]|0}else{ae=ad}if((ae|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;af=1}else{af=ae}ae=af<<1;c[45200+(ae<<2)>>2]=ab;c[11298]=ab;c[45200+((ae|1)<<2)>>2]=aa;c[11296]=aa;c[11560]=af+1}tP();c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}else if((A|0)==1){af=c[11268]|0;aa=b-af|0;ae=d-af|0;af=c[3524]|0;if((c[af+8>>2]|0)>>>0>aa>>>0){if((c[af+12>>2]|0)>>>0>ae>>>0){ag=ae;ah=aa;ai=r;aj=d;ak=af}else{s=13796}}else{s=13796}if((s|0)==13796){uh(-1,171048,(v=i,i=i+16|0,c[v>>2]=aa,c[v+8>>2]=ae,v)|0);af=c[3524]|0;ab=c[af+8>>2]|0;ad=c[af+12>>2]|0;ag=ad>>>0>ae>>>0?ae:ad;ah=ab>>>0>aa>>>0?aa:ab;ai=c[11298]|0;aj=c[11296]|0;ak=af}if((ah|0)==(ai|0)&(ag|0)==(aj|0)){al=ak;am=ai;an=aj}else{tN();c[11298]=ah;c[11296]=ag;al=c[3524]|0;am=ah;an=ag}ag=c[11268]|0;ah=ag+b|0;aj=ag+d|0;if((c[al+8>>2]|0)>>>0>ah>>>0){if((c[al+12>>2]|0)>>>0>aj>>>0){ao=am;ap=an}else{s=13801}}else{s=13801}if((s|0)==13801){uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=ah,c[v+8>>2]=aj,v)|0);ao=c[11298]|0;ap=c[11296]|0}if(!((ao|0)==(ah|0)&(ap|0)==(aj|0))){ap=c[11560]|0;if((ap<<1|0)>102){tN();aq=c[11560]|0}else{aq=ap}if((aq|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;ar=1}else{ar=aq}aq=ar<<1;c[45200+(aq<<2)>>2]=ah;c[11298]=ah;c[45200+((aq|1)<<2)>>2]=aj;c[11296]=aj;c[11560]=ar+1}ar=c[11268]|0;aq=b-ar|0;ap=ar+d|0;ar=c[3524]|0;if((c[ar+8>>2]|0)>>>0>aq>>>0){if((c[ar+12>>2]|0)>>>0>ap>>>0){as=ap;at=aq;au=ah;av=aj;aw=ar}else{s=13810}}else{s=13810}if((s|0)==13810){uh(-1,171048,(v=i,i=i+16|0,c[v>>2]=aq,c[v+8>>2]=ap,v)|0);ar=c[3524]|0;aj=c[ar+8>>2]|0;ah=c[ar+12>>2]|0;as=ah>>>0>ap>>>0?ap:ah;at=aj>>>0>aq>>>0?aq:aj;au=c[11298]|0;av=c[11296]|0;aw=ar}if((at|0)==(au|0)&(as|0)==(av|0)){ax=aw;ay=au;az=av}else{tN();c[11298]=at;c[11296]=as;ax=c[3524]|0;ay=at;az=as}as=c[11268]|0;at=as+b|0;av=d-as|0;if((c[ax+8>>2]|0)>>>0>at>>>0){if((c[ax+12>>2]|0)>>>0>av>>>0){aA=ay;aB=az}else{s=13815}}else{s=13815}if((s|0)==13815){uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=at,c[v+8>>2]=av,v)|0);aA=c[11298]|0;aB=c[11296]|0}if((aA|0)==(at|0)&(aB|0)==(av|0)){c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}aB=c[11560]|0;if((aB<<1|0)>102){tN();aC=c[11560]|0}else{aC=aB}if((aC|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;aD=1}else{aD=aC}aC=aD<<1;c[45200+(aC<<2)>>2]=at;c[11298]=at;c[45200+((aC|1)<<2)>>2]=av;c[11296]=av;c[11560]=aD+1;c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}else if((A|0)==8){c[j>>2]=b;c[j+4>>2]=(c[11274]|0)+d;aD=c[11276]|0;c[j+12>>2]=b-aD;av=d-(c[11270]|0)|0;c[j+16>>2]=av;c[j+24>>2]=aD+b;c[j+28>>2]=av;n9(3,k);c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}else if((A|0)==9){k=d-(c[11274]|0)|0;av=c[3524]|0;if((c[av+8>>2]|0)>>>0>b>>>0){if((c[av+12>>2]|0)>>>0>k>>>0){aE=b;aF=k;s=13926}else{s=13925}}else{s=13925}if((s|0)==13925){uh(-1,171048,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=k,v)|0);av=c[3524]|0;j=c[av+8>>2]|0;aD=j>>>0>b>>>0?b:j;j=c[av+12>>2]|0;aC=j>>>0>k>>>0?k:j;j=c[11298]|0;k=c[11296]|0;if((aD|0)==(j|0)&(aC|0)==(k|0)){aG=av;aH=j;aJ=k}else{aE=aD;aF=aC;s=13926}}if((s|0)==13926){tN();c[11298]=aE;c[11296]=aF;aG=c[3524]|0;aH=aE;aJ=aF}aF=b-(c[11276]|0)|0;aE=(c[11270]|0)+d|0;if((c[aG+8>>2]|0)>>>0>aF>>>0){if((c[aG+12>>2]|0)>>>0>aE>>>0){aK=aH;aL=aJ}else{s=13929}}else{s=13929}if((s|0)==13929){uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=aF,c[v+8>>2]=aE,v)|0);aK=c[11298]|0;aL=c[11296]|0}if(!((aK|0)==(aF|0)&(aL|0)==(aE|0))){aL=c[11560]|0;if((aL<<1|0)>102){tN();aM=c[11560]|0}else{aM=aL}if((aM|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;aN=1}else{aN=aM}aM=aN<<1;c[45200+(aM<<2)>>2]=aF;c[11298]=aF;c[45200+((aM|1)<<2)>>2]=aE;c[11296]=aE;c[11560]=aN+1}aN=(c[11276]|0)+b|0;aM=(c[11270]|0)+d|0;aL=c[3524]|0;if((c[aL+8>>2]|0)>>>0>aN>>>0){if((c[aL+12>>2]|0)>>>0>aM>>>0){aO=aF;aP=aE}else{s=13938}}else{s=13938}if((s|0)==13938){uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=aN,c[v+8>>2]=aM,v)|0);aO=c[11298]|0;aP=c[11296]|0}if(!((aO|0)==(aN|0)&(aP|0)==(aM|0))){aP=c[11560]|0;if((aP<<1|0)>102){tN();aQ=c[11560]|0}else{aQ=aP}if((aQ|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;aR=1}else{aR=aQ}aQ=aR<<1;c[45200+(aQ<<2)>>2]=aN;c[11298]=aN;c[45200+((aQ|1)<<2)>>2]=aM;c[11296]=aM;c[11560]=aR+1}tP();c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}else if((A|0)==2){aR=d-(c[11278]|0)|0;aM=c[3524]|0;if((c[aM+8>>2]|0)>>>0>b>>>0){if((c[aM+12>>2]|0)>>>0>aR>>>0){aS=b;aT=aR;s=13825}else{s=13824}}else{s=13824}if((s|0)==13824){uh(-1,171048,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=aR,v)|0);aM=c[3524]|0;aQ=c[aM+8>>2]|0;aN=aQ>>>0>b>>>0?b:aQ;aQ=c[aM+12>>2]|0;aP=aQ>>>0>aR>>>0?aR:aQ;aQ=c[11298]|0;aR=c[11296]|0;if((aN|0)==(aQ|0)&(aP|0)==(aR|0)){aU=aM;aV=aQ;aW=aR}else{aS=aN;aT=aP;s=13825}}if((s|0)==13825){tN();c[11298]=aS;c[11296]=aT;aU=c[3524]|0;aV=aS;aW=aT}aT=(c[11278]|0)+d|0;if((c[aU+8>>2]|0)>>>0>b>>>0){if((c[aU+12>>2]|0)>>>0>aT>>>0){aX=aV;aY=aW}else{s=13828}}else{s=13828}if((s|0)==13828){uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=aT,v)|0);aX=c[11298]|0;aY=c[11296]|0}if(!((aX|0)==(b|0)&(aY|0)==(aT|0))){aY=c[11560]|0;if((aY<<1|0)>102){tN();aZ=c[11560]|0}else{aZ=aY}if((aZ|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;a_=1}else{a_=aZ}aZ=a_<<1;c[45200+(aZ<<2)>>2]=b;c[11298]=b;c[45200+((aZ|1)<<2)>>2]=aT;c[11296]=aT;c[11560]=a_+1}a_=(c[11266]|0)+b|0;aZ=d-(c[11272]|0)|0;aY=c[3524]|0;if((c[aY+8>>2]|0)>>>0>a_>>>0){if((c[aY+12>>2]|0)>>>0>aZ>>>0){a$=aZ;a0=a_;a1=b;a2=aT;a3=aY}else{s=13837}}else{s=13837}if((s|0)==13837){uh(-1,171048,(v=i,i=i+16|0,c[v>>2]=a_,c[v+8>>2]=aZ,v)|0);aY=c[3524]|0;aT=c[aY+8>>2]|0;aX=c[aY+12>>2]|0;a$=aX>>>0>aZ>>>0?aZ:aX;a0=aT>>>0>a_>>>0?a_:aT;a1=c[11298]|0;a2=c[11296]|0;a3=aY}if((a0|0)==(a1|0)&(a$|0)==(a2|0)){a4=a3;a5=a1;a6=a2}else{tN();c[11298]=a0;c[11296]=a$;a4=c[3524]|0;a5=a0;a6=a$}a$=b-(c[11266]|0)|0;a0=(c[11272]|0)+d|0;if((c[a4+8>>2]|0)>>>0>a$>>>0){if((c[a4+12>>2]|0)>>>0>a0>>>0){a7=a5;a8=a6}else{s=13842}}else{s=13842}if((s|0)==13842){uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=a$,c[v+8>>2]=a0,v)|0);a7=c[11298]|0;a8=c[11296]|0}if(!((a7|0)==(a$|0)&(a8|0)==(a0|0))){a8=c[11560]|0;if((a8<<1|0)>102){tN();a9=c[11560]|0}else{a9=a8}if((a9|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;ba=1}else{ba=a9}a9=ba<<1;c[45200+(a9<<2)>>2]=a$;c[11298]=a$;c[45200+((a9|1)<<2)>>2]=a0;c[11296]=a0;c[11560]=ba+1}ba=(c[11266]|0)+b|0;a9=(c[11272]|0)+d|0;a8=c[3524]|0;if((c[a8+8>>2]|0)>>>0>ba>>>0){if((c[a8+12>>2]|0)>>>0>a9>>>0){bb=a9;bc=ba;bd=a$;be=a0;bf=a8}else{s=13851}}else{s=13851}if((s|0)==13851){uh(-1,171048,(v=i,i=i+16|0,c[v>>2]=ba,c[v+8>>2]=a9,v)|0);a8=c[3524]|0;a0=c[a8+8>>2]|0;a$=c[a8+12>>2]|0;bb=a$>>>0>a9>>>0?a9:a$;bc=a0>>>0>ba>>>0?ba:a0;bd=c[11298]|0;be=c[11296]|0;bf=a8}if((bc|0)==(bd|0)&(bb|0)==(be|0)){bg=bf;bh=bd;bi=be}else{tN();c[11298]=bc;c[11296]=bb;bg=c[3524]|0;bh=bc;bi=bb}bb=b-(c[11266]|0)|0;bc=d-(c[11272]|0)|0;if((c[bg+8>>2]|0)>>>0>bb>>>0){if((c[bg+12>>2]|0)>>>0>bc>>>0){bj=bh;bk=bi}else{s=13856}}else{s=13856}if((s|0)==13856){uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=bb,c[v+8>>2]=bc,v)|0);bj=c[11298]|0;bk=c[11296]|0}if((bj|0)==(bb|0)&(bk|0)==(bc|0)){c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}bk=c[11560]|0;if((bk<<1|0)>102){tN();bl=c[11560]|0}else{bl=bk}if((bl|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;bm=1}else{bm=bl}bl=bm<<1;c[45200+(bl<<2)>>2]=bb;c[11298]=bb;c[45200+((bl|1)<<2)>>2]=bc;c[11296]=bc;c[11560]=bm+1;c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}else if((A|0)==0){bm=b-(c[11278]|0)|0;bc=c[3524]|0;if((c[bc+8>>2]|0)>>>0>bm>>>0){if((c[bc+12>>2]|0)>>>0>d>>>0){bn=d;bo=bm;bp=r;bq=d;br=bc}else{s=13768}}else{s=13768}if((s|0)==13768){uh(-1,171048,(v=i,i=i+16|0,c[v>>2]=bm,c[v+8>>2]=d,v)|0);bc=c[3524]|0;bl=c[bc+8>>2]|0;bb=c[bc+12>>2]|0;bn=bb>>>0>d>>>0?d:bb;bo=bl>>>0>bm>>>0?bm:bl;bp=c[11298]|0;bq=c[11296]|0;br=bc}if((bo|0)==(bp|0)&(bn|0)==(bq|0)){bs=br;bt=bp;bu=bq}else{tN();c[11298]=bo;c[11296]=bn;bs=c[3524]|0;bt=bo;bu=bn}bn=(c[11278]|0)+b|0;if((c[bs+8>>2]|0)>>>0>bn>>>0){if((c[bs+12>>2]|0)>>>0>d>>>0){bv=bt;bw=bu}else{s=13773}}else{s=13773}if((s|0)==13773){uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=bn,c[v+8>>2]=d,v)|0);bv=c[11298]|0;bw=c[11296]|0}if(!((bv|0)==(bn|0)&(bw|0)==(d|0))){bw=c[11560]|0;if((bw<<1|0)>102){tN();bx=c[11560]|0}else{bx=bw}if((bx|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;by=1}else{by=bx}bx=by<<1;c[45200+(bx<<2)>>2]=bn;c[11298]=bn;c[45200+((bx|1)<<2)>>2]=d;c[11296]=d;c[11560]=by+1}by=d-(c[11278]|0)|0;bx=c[3524]|0;if((c[bx+8>>2]|0)>>>0>b>>>0){if((c[bx+12>>2]|0)>>>0>by>>>0){bz=by;bA=b;bB=bn;bC=d;bD=bx}else{s=13782}}else{s=13782}if((s|0)==13782){uh(-1,171048,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=by,v)|0);bx=c[3524]|0;bn=c[bx+8>>2]|0;bw=c[bx+12>>2]|0;bz=bw>>>0>by>>>0?by:bw;bA=bn>>>0>b>>>0?b:bn;bB=c[11298]|0;bC=c[11296]|0;bD=bx}if((bA|0)==(bB|0)&(bz|0)==(bC|0)){bE=bD;bF=bB;bG=bC}else{tN();c[11298]=bA;c[11296]=bz;bE=c[3524]|0;bF=bA;bG=bz}bz=(c[11278]|0)+d|0;if((c[bE+8>>2]|0)>>>0>b>>>0){if((c[bE+12>>2]|0)>>>0>bz>>>0){bH=bF;bI=bG}else{s=13787}}else{s=13787}if((s|0)==13787){uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=bz,v)|0);bH=c[11298]|0;bI=c[11296]|0}if((bH|0)==(b|0)&(bI|0)==(bz|0)){c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}bI=c[11560]|0;if((bI<<1|0)>102){tN();bJ=c[11560]|0}else{bJ=bI}if((bJ|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;bK=1}else{bK=bJ}bJ=bK<<1;c[45200+(bJ<<2)>>2]=b;c[11298]=b;c[45200+((bJ|1)<<2)>>2]=bz;c[11296]=bz;c[11560]=bK+1;c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}else if((A|0)==3){A=c[11268]|0;bK=b-A|0;bz=d-A|0;A=c[3524]|0;if((c[A+8>>2]|0)>>>0>bK>>>0){if((c[A+12>>2]|0)>>>0>bz>>>0){bL=bz;bM=bK;bN=r;bO=d;bP=A}else{s=13865}}else{s=13865}if((s|0)==13865){uh(-1,171048,(v=i,i=i+16|0,c[v>>2]=bK,c[v+8>>2]=bz,v)|0);A=c[3524]|0;r=c[A+8>>2]|0;bJ=c[A+12>>2]|0;bL=bJ>>>0>bz>>>0?bz:bJ;bM=r>>>0>bK>>>0?bK:r;bN=c[11298]|0;bO=c[11296]|0;bP=A}if((bM|0)==(bN|0)&(bL|0)==(bO|0)){bQ=bP;bR=bN;bS=bO}else{tN();c[11298]=bM;c[11296]=bL;bQ=c[3524]|0;bR=bM;bS=bL}bL=c[11268]|0;bM=bL+b|0;bO=d-bL|0;if((c[bQ+8>>2]|0)>>>0>bM>>>0){if((c[bQ+12>>2]|0)>>>0>bO>>>0){bT=bR;bU=bS}else{s=13870}}else{s=13870}if((s|0)==13870){uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=bM,c[v+8>>2]=bO,v)|0);bT=c[11298]|0;bU=c[11296]|0}if(!((bT|0)==(bM|0)&(bU|0)==(bO|0))){bU=c[11560]|0;if((bU<<1|0)>102){tN();bV=c[11560]|0}else{bV=bU}if((bV|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;bW=1}else{bW=bV}bV=bW<<1;c[45200+(bV<<2)>>2]=bM;c[11298]=bM;c[45200+((bV|1)<<2)>>2]=bO;c[11296]=bO;c[11560]=bW+1}bW=c[11268]|0;bV=bW+b|0;bU=bW+d|0;bW=c[3524]|0;if((c[bW+8>>2]|0)>>>0>bV>>>0){if((c[bW+12>>2]|0)>>>0>bU>>>0){bX=bM;bY=bO}else{s=13879}}else{s=13879}if((s|0)==13879){uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=bV,c[v+8>>2]=bU,v)|0);bX=c[11298]|0;bY=c[11296]|0}if(!((bX|0)==(bV|0)&(bY|0)==(bU|0))){bY=c[11560]|0;if((bY<<1|0)>102){tN();bZ=c[11560]|0}else{bZ=bY}if((bZ|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;b_=1}else{b_=bZ}bZ=b_<<1;c[45200+(bZ<<2)>>2]=bV;c[11298]=bV;c[45200+((bZ|1)<<2)>>2]=bU;c[11296]=bU;c[11560]=b_+1}b_=c[11268]|0;bZ=b-b_|0;b=b_+d|0;d=c[3524]|0;if((c[d+8>>2]|0)>>>0>bZ>>>0){if((c[d+12>>2]|0)>>>0>b>>>0){b$=bV;b0=bU}else{s=13888}}else{s=13888}if((s|0)==13888){uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=bZ,c[v+8>>2]=b,v)|0);b$=c[11298]|0;b0=c[11296]|0}if(!((b$|0)==(bZ|0)&(b0|0)==(b|0))){b0=c[11560]|0;if((b0<<1|0)>102){tN();b1=c[11560]|0}else{b1=b0}if((b1|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;b2=1}else{b2=b1}b1=b2<<1;c[45200+(b1<<2)>>2]=bZ;c[11298]=bZ;c[45200+((b1|1)<<2)>>2]=b;c[11296]=b;c[11560]=b2+1}tP();c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}else{c[11554]=l;n=c[11552]|0;o=n+1|0;c[11552]=o;i=f;return}}function n1(a){a=a|0;return 0}function n2(){return}function n3(b,d,e,f,i,j){b=b|0;d=+d;e=+e;f=f|0;i=i|0;j=j|0;if((j|0)==3){c[59568]=c[11298];c[59566]=c[11296];return}else if((j|0)==4){c[11298]=c[59568];c[11296]=c[59566];return}else{if(a[238232]|0){return}a[238232]=1;c[11232]=43856;c[59562]=b;g[59560]=d;g[59564]=+h[5710]*e;a[238216]=i&1;c[59556]=j;return}}function n4(b){b=b|0;var d=0,e=0,f=0,j=0,k=0,l=0.0;d=i;i=i+8|0;e=d|0;L19029:do{if((b|0)!=45688){do{if((b|0)!=0){if((a[b]|0)==0){break}f=bk(b|0,148464)|0;do{if((f|0)>0){j=f+1|0;k=(j|0)<32?j:32;uF(45688,b|0,k|0);if((uA(b|0)|0)>>>0<k>>>0){break}a[45688+((k|0)==0?0:k-1|0)|0]=0}}while(0);if(f>>>0>=(uA(b|0)|0)>>>0){break L19029}if((ca(b+(f+1|0)|0,205104,(v=i,i=i+8|0,c[v>>2]=e,v)|0)|0)==0){break L19029}g[11418]=+g[e>>2];break L19029}}while(0);uB(45688,45952);g[11418]=+g[11486]}}while(0);do{if((aY(238560,45688)|0)==0){if(+g[59638]!=+g[11418]){break}i=d;return 1}}while(0);uF(238560,45688,256);if((uA(45688)|0)>>>0>=256){a[238815]=0}l=+g[11418];g[59638]=l;c[(c[3524]|0)+20>>2]=~~(+h[5710]*l*35.28*.6);c[(c[3524]|0)+16>>2]=~~(+h[5710]*+g[11418]*35.28*1.3);tO();i=d;return 1}function n5(a){a=+a;var b=0;b=~~((a<0.0?1.0:a)*+((c[(c[3524]|0)+28>>2]|0)>>>0>>>0));c[11278]=b;c[11268]=~~+O(+(+(b|0)*.707+.5));c[11266]=(b*13&-1|0)/15&-1;c[11272]=(b|0)/2&-1;c[11274]=(b*36&-1|0)/29&-1;c[11276]=(b*14&-1|0)/13&-1;c[11270]=(b*18&-1|0)/29&-1;return}function n6(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;g=i;i=i+48|0;h=g|0;c[h>>2]=b;c[h+4>>2]=d;j=e+b|0;c[h+12>>2]=j;c[h+16>>2]=d;c[h+24>>2]=j;j=f+d|0;c[h+28>>2]=j;c[h+36>>2]=b;c[h+40>>2]=j;c[h+8>>2]=a;n9(4,h|0);i=g;return}function n7(a){a=+a;var b=0.0;tN();b=+h[5704]*a;if(b==+h[5705]){return}h[5705]=b;c[11552]=(c[11552]|0)+1;return}function n8(b){b=b|0;var e=0,f=0,g=0,j=0,k=0;e=i;i=i+8|0;f=e|0;tN();g=c[b>>2]|0;if((g|0)==5){fr(+h[b+8>>3],f);c[11562]=(d[f+1|0]|0)<<8|(d[f|0]|0)|(d[f+2|0]|0)<<16}else if((g|0)==3){f=c[b+4>>2]|0;c[11562]=f>>>16&255|f&65280|f<<16&16711680}else if((g|0)==1){g=c[b+4>>2]|0;if((g|0)==-4){j=46256}else{if((g|0)<0|a[45624]){k=7}else{k=(g|0)%15&-1}j=238816+(k<<2)|0}c[11562]=c[j>>2];tN()}c[11554]=c[11412];c[11552]=(c[11552]|0)+1;i=e;return}function n9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0;e=i;i=i+8|0;f=e|0;g=f;h=c[11562]|0;j=c[d+8>>2]|0;k=j>>4;l=j&15;j=h&255;m=h>>>8;n=m&255;o=h>>>16;p=o&255;q=h>>>24&255;if((l|0)==0){r=c[11564]|0;s=r>>>24&255;t=r>>>16&255;u=r>>>8&255;v=r&255}else if((l|0)==2){w=k*12&-1;x=14054}else if((l|0)==1){w=k;x=14054}else{s=q;t=p;u=n;v=j}do{if((x|0)==14054){if(w>>>0>=100){s=q;t=p;u=n;v=j;break}y=+(w|0)/100.0;k=((~~(y*+(h&255|0))+(~~((1.0-y)*255.0)*65793&-1)|0)+(~~(y*+(m&255|0))<<8)|0)+(~~(y*+(o&255|0))<<16)|0;s=k>>>24&255;t=k>>>16&255;u=k>>>8&255;v=k&255}}while(0);if((c[11552]|0)>0){tL(c[11554]|0);c[11552]=0}o=f;m=g+3|0;a[m]=0;h=g+2|0;a[h]=0;w=g+1|0;a[w]=0;a[o]=37;aI(o|0,1,4,c[10030]|0);a[m]=0;a[h]=0;a[w]=0;a[o]=12;aI(o|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[m]=-128;a[h]=0;a[w]=0;a[o]=7;aI(o|0,1,4,c[10030]|0);a[m]=0;a[h]=0;a[w]=0;a[o]=37;aI(o|0,1,4,c[10030]|0);a[m]=0;a[h]=0;a[w]=0;a[o]=12;aI(o|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[m]=-128;a[h]=0;a[w]=0;a[o]=0;aI(o|0,1,4,c[10030]|0);a[m]=0;a[h]=0;a[w]=0;a[o]=40;aI(o|0,1,4,c[10030]|0);a[m]=0;a[h]=0;a[w]=0;a[o]=12;aI(o|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[m]=0;a[h]=0;a[w]=0;a[o]=3;aI(o|0,1,4,c[10030]|0);a[m]=0;a[h]=0;a[w]=0;a[o]=39;aI(o|0,1,4,c[10030]|0);a[m]=0;a[h]=0;a[w]=0;a[o]=24;aI(o|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[m]=0;a[h]=0;a[w]=0;a[o]=3;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);a[m]=s;a[h]=t;a[w]=u;a[o]=v;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);a[m]=0;a[h]=0;a[w]=0;a[o]=37;aI(o|0,1,4,c[10030]|0);a[m]=0;a[h]=0;a[w]=0;a[o]=12;aI(o|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[m]=0;a[h]=0;a[w]=0;a[o]=3;aI(o|0,1,4,c[10030]|0);a[m]=0;a[h]=0;a[w]=0;a[o]=40;aI(o|0,1,4,c[10030]|0);a[m]=0;a[h]=0;a[w]=0;a[o]=12;aI(o|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[m]=0;a[h]=0;a[w]=0;a[o]=1;aI(o|0,1,4,c[10030]|0);a[m]=0;a[h]=0;a[w]=0;a[o]=38;aI(o|0,1,4,c[10030]|0);a[m]=0;a[h]=0;a[w]=0;a[o]=28;aI(o|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[m]=0;a[h]=0;a[w]=0;a[o]=1;aI(o|0,1,4,c[10030]|0);g=a[45616]|0;a[m]=0;a[h]=0;a[w]=g?0:34;a[o]=0;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);a[m]=s;a[h]=t;a[w]=u;a[o]=v;aI(o|0,1,4,c[10030]|0);a[m]=0;a[h]=0;a[w]=0;a[o]=37;aI(o|0,1,4,c[10030]|0);a[m]=0;a[h]=0;a[w]=0;a[o]=12;aI(o|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[m]=0;a[h]=0;a[w]=0;a[o]=1;aI(o|0,1,4,c[10030]|0);a[m]=0;a[h]=0;a[w]=0;a[o]=3;aI(o|0,1,4,c[10030]|0);v=(b<<3)+28|0;a[m]=v>>>24&255;a[h]=v>>>16&255;a[w]=v>>>8&255;a[o]=v&255;aI(o|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;c[f>>2]=0;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);c[f>>2]=0;aI(o|0,1,4,c[10030]|0);a[m]=b>>>24&255;a[h]=b>>>16&255;a[w]=b>>>8&255;a[o]=b&255;aI(o|0,1,4,c[10030]|0);if((b|0)>0){z=0}else{c[11412]=-5;c[11554]=-5;i=e;return}do{f=c[d+(z*12&-1)>>2]|0;a[m]=f>>>24&255;a[h]=f>>>16&255;a[w]=f>>>8&255;a[o]=f&255;aI(o|0,1,4,c[10030]|0);f=(c[(c[3524]|0)+12>>2]|0)-(c[d+(z*12&-1)+4>>2]|0)|0;a[m]=f>>>24&255;a[h]=f>>>16&255;a[w]=f>>>8&255;a[o]=f&255;aI(o|0,1,4,c[10030]|0);z=z+1|0;}while((z|0)<(b|0));c[11412]=-5;c[11554]=-5;i=e;return}function oa(){var b=0,d=0,e=0,f=0.0,h=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0;b=i;i=i+256|0;if(!(a[238232]|0)){i=b;return}a[c[11232]|0]=0;a[238232]=0;d=c[11298]|0;e=c[11296]|0;f=+g[11418];h=b|0;uB(h|0,45688);g[11418]=+g[59560];n4(c[59562]|0);g[11418]=f;uB(45688,h|0);h=b4(43856,73808)|0;if((h|0)>0){f=+(aa(c[(c[3524]|0)+20>>2]|0,h)>>>0>>>0)*.8;j=c[11262]|0;k=+(j|0)*.0017453292519944445;l=~~(+(d>>>0>>>0)+ +S(+k)*f);m=~~(+(e>>>0>>>0)+ +T(+k)*f);c[11298]=l;c[11296]=m;n=l;o=m;p=h+43856|0;q=j}else{n=d;o=e;p=43856;q=c[11262]|0}f=+(q|0)*.0017453292519944445;k=+T(+f);r=+g[59564];q=~~(k*r*26.37);e=~~(+S(+f)*r*26.37);do{if((a[238216]&1)!=0){if(a[238208]|0){break}n$(n-q|0,e+o|0,p)}}while(0);r=+((uA(p|0)|0)>>>0>>>0);if(a[45056]|0){s=r*.8*+((c[(c[3524]|0)+20>>2]|0)>>>0>>>0)}else{e=a[p]|0;L19099:do{if(e<<24>>24==0){t=0;u=0}else{q=uA(p|0)|0;d=1;j=0;h=0;m=e;while(1){l=m<<24>>24;v=((aZ(171640,l|0,18)|0)!=0&1)+j|0;if((m-65&255)<26){w=14075}else{if((aZ(171632,l|0,5)|0)==0){x=h}else{w=14075}}if((w|0)==14075){w=0;x=h+1|0}y=v+((aZ(171608,l|0,10)|0)!=0&1)|0;if(d>>>0>=q>>>0){t=y;u=x;break L19099}l=a[p+d|0]|0;d=d+1|0;j=y;h=x;m=l}}}while(0);s=(+(-t|0)*.2+(r*.8+ +(u|0)*.3))*+((c[(c[3524]|0)+20>>2]|0)>>>0>>>0)}r=+(~~s|0);s=+(c[11262]|0)*.0017453292519944445;f=+S(+s);u=~~(+(n>>>0>>>0)+r*f);c[11298]=u;k=+T(+s);n=~~(+(o>>>0>>>0)+r*k);c[11296]=n;if((c[59556]|0)!=1){i=b;return}s=r*.5;c[11298]=~~(+(u|0)-s*f);c[11296]=~~(+(n|0)-s*k);i=b;return}function ob(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0.0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0.0,ac=0.0,ad=0,ae=0,af=0.0,ag=0,ah=0.0,ai=0,aj=0.0,ak=0,al=0,am=0,an=0,ao=0,ap=0.0,aq=0.0,ar=0,as=0.0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0.0,aA=0.0,aB=0.0,aC=0.0,aD=0.0,aE=0.0,aF=0.0,aG=0,aH=0,aI=0,aJ=0;b=i;i=i+424|0;d=b|0;e=b+24|0;f=b+48|0;g=b+72|0;j=b+96|0;k=b+120|0;l=b+144|0;m=b+168|0;n=c[13898]|0;o=c[8272]|0;L19117:do{if((n|0)<(o|0)){p=l|0;q=l+8|0;r=k|0;s=k+8|0;t=j|0;u=j+8|0;w=g|0;x=g+8|0;y=f|0;z=f+8|0;A=e|0;B=e+8|0;C=d|0;D=d+8|0;E=0.0;F=0.0;G=n;H=o;L19119:while(1){I=c[1054]|0;J=(a[I+(G*40&-1)|0]&1)==0;L19121:do{if(!J){K=c[I+(G*40&-1)+36>>2]|0;L=I+(G*40&-1)+32|0;M=c[10036]|0;N=0;while(1){if((N|0)>=(K|0)){break}if((a[M+((c[L>>2]|0)+N|0)|0]|0)==(a[N+103664|0]|0)){N=N+1|0}else{break L19121}}if((N|0)==1){O=E;P=F;break L19117}}}while(0);L=c[59286]|0;L19128:do{if((L|0)==0){Q=237144}else{M=c[I+(G*40&-1)+36>>2]|0;K=c[I+(G*40&-1)+32>>2]|0;R=(M|0)>0;S=c[10036]|0;T=237144;U=L;while(1){L19132:do{if(!J){if(R){V=0;W=0;X=K;while(1){Y=a[U+V|0]|0;if(Y<<24>>24==(a[S+(V+X|0)|0]|0)){Z=X;_=W}else{if(Y<<24>>24!=36){break L19132}Z=X-1|0;_=1}$=V+1|0;if(($|0)<(_+M|0)){V=$;W=_;X=Z}else{break}}if((_|0)==0){aa=$}else{Q=T;break L19128}}else{aa=0}X=a[U+aa|0]|0;if((X<<24>>24|0)==36|(X<<24>>24|0)==0){Q=T;break L19128}}}while(0);X=T+8|0;W=c[X>>2]|0;if((W|0)==0){Q=X;break}else{T=X;U=W}}}}while(0);J=c[Q+4>>2]|0;do{if((J|0)==0){a[237032]=0;c[13898]=G+1;ab=F;ac=E}else if((J|0)==1){a[237032]=1;c[13898]=G+1;ab=F;ac=E}else if((J|0)==17){c[59264]=c[59264]&-7|2;c[59444]=0;c[13898]=G+1;ab=F;ac=E}else if((J|0)==16){c[59264]=4;c[13898]=G+1;ab=F;ac=E}else if((J|0)==19){c[59264]=c[59264]|1;c[13898]=G+1;ab=F;ac=E}else if((J|0)==3){a[237464]=1;c[13898]=G+1;ab=F;ac=E}else if((J|0)==7){a[237096]=0;c[13898]=G+1;ab=F;ac=E}else if((J|0)==8){ad=G+1|0;c[13898]=ad;if((ad|0)>=(H|0)){ae=14288;break L19119}L19155:do{if((a[I+(ad*40&-1)|0]&1)!=0){L=c[I+(ad*40&-1)+36>>2]|0;U=I+(ad*40&-1)+32|0;T=c[10036]|0;M=0;while(1){if((M|0)>=(L|0)){break}if((a[T+((c[U>>2]|0)+M|0)|0]|0)==(a[M+103664|0]|0)){M=M+1|0}else{break L19155}}if((M|0)==1){ae=14289;break L19119}}}while(0);U=is(l)|0;T=c[U>>2]|0;if((T|0)==1){af=+(c[U+8>>2]|0)}else if((T|0)==2){af=+h[U+8>>3]}else if((T|0)==3){af=+uz(c[U+8>>2]|0,0)}else{ae=14130;break L19119}if((c[p>>2]|0)==3){uu(c[q>>2]|0);c[p>>2]=1}U=c[13898]|0;T=c[8272]|0;L19170:do{if((T|0)>(U|0)){L=c[1054]|0;if((a[L+(U*40&-1)|0]&1)==0){ag=U;break}S=c[L+(U*40&-1)+36>>2]|0;K=L+(U*40&-1)+32|0;L=c[10036]|0;R=0;while(1){if((R|0)>=(S|0)){break}if((a[L+((c[K>>2]|0)+R|0)|0]|0)==(a[R+148464|0]|0)){R=R+1|0}else{ag=U;break L19170}}if((R|0)!=1){ag=U;break}K=U+1|0;c[13898]=K;ag=K}else{ag=U}}while(0);if((ag|0)>=(T|0)){ae=14286;break L19119}U=c[1054]|0;L19180:do{if((a[U+(ag*40&-1)|0]&1)!=0){K=c[U+(ag*40&-1)+36>>2]|0;L=U+(ag*40&-1)+32|0;S=c[10036]|0;M=0;while(1){if((M|0)>=(K|0)){break}if((a[S+((c[L>>2]|0)+M|0)|0]|0)==(a[M+103664|0]|0)){M=M+1|0}else{break L19180}}if((M|0)==1){ae=14287;break L19119}}}while(0);U=is(k)|0;T=c[U>>2]|0;if((T|0)==1){ah=+(c[U+8>>2]|0)}else if((T|0)==2){ah=+h[U+8>>3]}else if((T|0)==3){ah=+uz(c[U+8>>2]|0,0)}else{ae=14151;break L19119}if((c[r>>2]|0)==3){uu(c[s>>2]|0);c[r>>2]=1}if(!(af<2.0|ah<2.0|af>99.0|ah>99.0)){ab=af;ac=ah;break}if(af!=0.0|ah!=0.0){ae=14156;break L19119}else{ab=0.0;ac=0.0}}else if((J|0)==18){c[59264]=c[59264]|8;c[13898]=G+1;ab=F;ac=E}else if((J|0)==12){ai=G+1|0;c[13898]=ai;if((ai|0)>=(H|0)){ae=14290;break L19119}L19199:do{if((a[I+(ai*40&-1)|0]&1)!=0){U=c[I+(ai*40&-1)+36>>2]|0;T=I+(ai*40&-1)+32|0;L=c[10036]|0;S=0;while(1){if((S|0)>=(U|0)){break}if((a[L+((c[T>>2]|0)+S|0)|0]|0)==(a[S+103664|0]|0)){S=S+1|0}else{break L19199}}if((S|0)==1){ae=14291;break L19119}}}while(0);T=is(e)|0;L=c[T>>2]|0;if((L|0)==1){aj=+(c[T+8>>2]|0)}else if((L|0)==2){aj=+h[T+8>>3]}else if((L|0)==3){aj=+uz(c[T+8>>2]|0,0)}else{ae=14214;break L19119}if((c[A>>2]|0)==3){uu(c[B>>2]|0);c[A>>2]=1}T=~~aj;c[59446]=T;if(T>>>0>99){ae=14218;break L19119}c[59344]=T;ab=F;ac=E}else if((J|0)==2){a[237464]=0;c[13898]=G+1;ab=F;ac=E}else if((J|0)==15){a[237072]=0;c[13898]=G+1;ab=F;ac=E}else if((J|0)==20){ak=G+1|0;c[13898]=ak;if((ak|0)>=(H|0)){ae=14284;break L19119}T=c[I+(ak*40&-1)+36>>2]|0;L19219:do{if((a[I+(ak*40&-1)|0]&1)==0){al=c[10036]|0;am=I+(ak*40&-1)+32|0}else{L=I+(ak*40&-1)+32|0;U=c[10036]|0;M=0;while(1){if((M|0)>=(T|0)){break}if((a[U+((c[L>>2]|0)+M|0)|0]|0)==(a[M+103664|0]|0)){M=M+1|0}else{al=U;am=L;break L19219}}if((M|0)==1){ae=14285;break L19119}else{al=U;am=L}}}while(0);S=(T|0)>49?49:T;K=c[am>>2]|0;R=0;while(1){N=R+1|0;a[R+236976|0]=a[al+K|0]|0;if((N|0)==(S|0)){break}else{K=K+1|0;R=N}}a[S+236976|0]=0;an=G+2|0;c[13898]=an;if((aY(236976,173280)|0)==0){ab=F;ac=E;break}if((aY(236976,173088)|0)==0){ab=F;ac=E}else{ae=14249;break L19119}}else if((J|0)==14){a[237072]=1;c[13898]=G+1;ab=F;ac=E}else if((J|0)==13){ao=G+1|0;c[13898]=ao;if((ao|0)>=(H|0)){ae=14297;break L19119}L19234:do{if((a[I+(ao*40&-1)|0]&1)!=0){R=c[I+(ao*40&-1)+36>>2]|0;K=I+(ao*40&-1)+32|0;T=c[10036]|0;N=0;while(1){if((N|0)>=(R|0)){break}if((a[T+((c[K>>2]|0)+N|0)|0]|0)==(a[N+103664|0]|0)){N=N+1|0}else{break L19234}}if((N|0)==1){ae=14296;break L19119}}}while(0);S=is(d)|0;K=c[S>>2]|0;if((K|0)==2){ap=+h[S+8>>3]}else if((K|0)==3){ap=+uz(c[S+8>>2]|0,0)}else if((K|0)==1){ap=+(c[S+8>>2]|0)}else{ae=14231;break L19119}if((c[C>>2]|0)==3){uu(c[D>>2]|0);c[C>>2]=1}S=~~ap;if((S-2|0)>>>0>=99999){ae=14236;break L19119}c[59278]=S-1;ab=F;ac=E}else if((J|0)==10){c[13898]=G+1;S=is(g)|0;K=c[S>>2]|0;if((K|0)==1){aq=+(c[S+8>>2]|0)}else if((K|0)==2){aq=+h[S+8>>3]}else if((K|0)==3){aq=+uz(c[S+8>>2]|0,0)}else{ae=14182;break L19119}if((c[w>>2]|0)==3){uu(c[x>>2]|0);c[w>>2]=1}c[59442]=~~aq;ab=F;ac=E}else if((J|0)==11){ar=G+1|0;c[13898]=ar;if((ar|0)>=(H|0)){ae=14295;break L19119}L19261:do{if((a[I+(ar*40&-1)|0]&1)!=0){S=c[I+(ar*40&-1)+36>>2]|0;K=I+(ar*40&-1)+32|0;T=c[10036]|0;R=0;while(1){if((R|0)>=(S|0)){break}if((a[T+((c[K>>2]|0)+R|0)|0]|0)==(a[R+103664|0]|0)){R=R+1|0}else{break L19261}}if((R|0)==1){ae=14294;break L19119}}}while(0);K=is(f)|0;T=c[K>>2]|0;if((T|0)==1){as=+(c[K+8>>2]|0)}else if((T|0)==2){as=+h[K+8>>3]}else if((T|0)==3){as=+uz(c[K+8>>2]|0,0)}else{ae=14197;break L19119}if((c[y>>2]|0)==3){uu(c[z>>2]|0);c[y>>2]=1}K=~~as;c[59448]=K;if((K-1|0)>>>0>9){ae=14202;break L19119}else{ab=F;ac=E}}else if((J|0)==9){at=G+1|0;c[13898]=at;if((at|0)>=(H|0)){au=at;ae=14282;break L19119}K=(a[I+(at*40&-1)|0]&1)==0;L19278:do{if(!K){T=c[I+(at*40&-1)+36>>2]|0;S=I+(at*40&-1)+32|0;N=c[10036]|0;L=0;while(1){if((L|0)>=(T|0)){ae=14162;break}if((a[N+((c[S>>2]|0)+L|0)|0]|0)==(a[L+103664|0]|0)){L=L+1|0}else{break}}if((ae|0)==14162){ae=0;if((L|0)==1){au=at;ae=14281;break L19119}}if(K){break}S=c[I+(at*40&-1)+36>>2]|0;N=I+(at*40&-1)+32|0;T=c[10036]|0;R=0;while(1){if((R|0)>=(S|0)){break}if((a[T+((c[N>>2]|0)+R|0)|0]|0)==(a[R+103664|0]|0)){R=R+1|0}else{break L19278}}if((R|0)==1){au=at;ae=14279;break L19119}}}while(0);a[14176]=1;is(j);a[14176]=0;if((c[t>>2]|0)!=3){ae=14169;break L19119}K=c[u>>2]|0;if((K|0)==0){ae=14171;break L19119}N=bk(K|0,148464)|0;ca(K+(N+1|0)|0,21e4,(v=i,i=i+8|0,c[v>>2]=237768,v)|0);a[K+N|0]=0;N=237480;while(1){T=c[N>>2]|0;if((T|0)==0){av=-1;break}if((a_(K|0,T|0,uA(K|0)|0)|0)==0){ae=14176;break}else{N=N+8|0}}if((ae|0)==14176){ae=0;av=c[N+4>>2]|0}c[59444]=(av|0)<0?0:av;uu(K);ab=F;ac=E}else if((J|0)==5){a[237472]=1;c[13898]=G+1;ab=F;ac=E}else if((J|0)==6){a[237096]=1;c[13898]=G+1;ab=F;ac=E}else if((J|0)==4){a[237472]=0;c[13898]=G+1;ab=F;ac=E}else{ae=14250;break L19119}}while(0);J=c[13898]|0;I=c[8272]|0;if((J|0)<(I|0)){E=ac;F=ab;G=J;H=I}else{O=ac;P=ab;break L19117}}if((ae|0)==14171){au=c[13898]|0;uf(au,116592,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14294){uf(ar,172856,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14295){uf(ar,172856,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14296){uf(ao,172696,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14291){uf(ai,172784,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14297){uf(ao,172696,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14130){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14202){uf((c[13898]|0)-1|0,172816,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14285){uf(ak,172624,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14286){uf(ag,172904,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14287){uf(ag,172904,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14279){uf(au,116592,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14281){uf(au,116592,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14249){uf(an,172552,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14250){uf(G,95448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14214){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14288){uf(ad,172904,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14289){uf(ad,172904,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14290){uf(ai,172784,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14197){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14236){uf(c[13898]|0,172656,(v=i,i=i+8|0,c[v>>2]=1e5,v)|0)}else if((ae|0)==14282){uf(au,116592,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14284){uf(ak,172624,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14182){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14151){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14156){uf(c[13898]|0,130744,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14231){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14169){c[13898]=at;au=at;uf(au,116592,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((ae|0)==14218){uf((c[13898]|0)-1|0,172744,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}else{O=0.0;P=0.0}}while(0);ae=c[59264]|0;au=m|0;if((ae|0)==4){uD(au|0,172520,12)}else{m=(ae&2|0)!=0?172480:179864;at=(ae&8|0)!=0?172440:179864;ak=(ae&1|0)!=0?172408:179864;be(au|0,172512,(v=i,i=i+24|0,c[v>>2]=m,c[v+8>>2]=at,c[v+16>>2]=ak,v)|0)}ak=a[237464]|0;at=(c[59278]|0)+1|0;m=a[237096]|0?78720:78704;ae=a[237472]|0?172248:172264;ai=a[237072]|0?131504:131584;ad=c[237480+(c[59444]<<3)>>2]|0;an=c[59442]|0;if((an|0)>0){aw=an}else{aw=ak?16:10}an=c[59448]|0;ag=c[59446]|0;be(13048,172304,(v=i,i=i+136|0,c[v>>2]=a[237032]|0?116440:116408,c[v+8>>2]=ak?172296:172288,c[v+16>>2]=172272,c[v+24>>2]=at,c[v+32>>2]=m,c[v+40>>2]=ae,c[v+48>>2]=ai,c[v+56>>2]=au,c[v+64>>2]=124352,c[v+72>>2]=ad,c[v+80>>2]=aw,c[v+88>>2]=208960,c[v+96>>2]=an,c[v+104>>2]=172240,c[v+112>>2]=ag,c[v+120>>2]=172200,c[v+128>>2]=236976,v)|0);ag=P>0.0&O>0.0;L19344:do{if(ag){an=~~P;do{if(P- +(an|0)==0.0){aw=~~O;if(O- +(aw|0)!=0.0){break}ad=13048+(uA(13048)|0)|0;be(ad|0,172160,(v=i,i=i+16|0,c[v>>2]=an,c[v+8>>2]=aw,v)|0);break L19344}}while(0);an=13048+(uA(13048)|0)|0;be(an|0,172120,(v=i,i=i+16|0,h[v>>3]=P,h[v+8>>3]=O,v)|0)}}while(0);an=(c[59442]|0)<1;if(a[237464]|0){if(an){c[59442]=16}G=a[237472]|0;c[(c[3524]|0)+8>>2]=G?9e3:9600;c[(c[3524]|0)+12>>2]=G?6750:6e3;aw=G?90:105;c[(c[3524]|0)+24>>2]=aw;c[(c[3524]|0)+28>>2]=aw;ax=G;ay=G?900:1200}else{if(an){c[59442]=10}an=a[237472]|0;c[(c[3524]|0)+8>>2]=an?5400:6e3;c[(c[3524]|0)+12>>2]=3600;G=an?67:75;c[(c[3524]|0)+24>>2]=G;c[(c[3524]|0)+28>>2]=G;ax=an;ay=an?900:1200}c[59242]=ay;c[59240]=ax?900:1200;if(a[237096]|0){ay=c[3524]|0;an=ay+8|0;G=c[an>>2]|0;c[an>>2]=c[ay+12>>2];c[(c[3524]|0)+12>>2]=G}if(ag){ab=ax?450.0:1200.0;c[(c[3524]|0)+8>>2]=~~(P*ab);c[(c[3524]|0)+12>>2]=~~(O*ab)}ag=c[59442]|0;if(ax){az=+(ag*450&-1|0)*2.54}else{az=+(ag*1200&-1|0)}c[(c[3524]|0)+16>>2]=~~(az/72.0*3.0*.25);ag=c[59442]|0;if(ax){aA=+(ag*450&-1|0)*2.54;aB=aA/72.0;aC=aB*3.0;aD=aC*.25;aE=aD*6.0;aF=aE/10.0;aG=~~aF;aH=c[3524]|0;aI=aH+20|0;c[aI>>2]=aG;aJ=c[59448]|0;c[59262]=aJ;i=b;return}else{aA=+(ag*1200&-1|0);aB=aA/72.0;aC=aB*3.0;aD=aC*.25;aE=aD*6.0;aF=aE/10.0;aG=~~aF;aH=c[3524]|0;aI=aH+20|0;c[aI>>2]=aG;aJ=c[59448]|0;c[59262]=aJ;i=b;return}}function oc(){c[59270]=0;c[59272]=0;a[237104]=0;return}function od(a){a=a|0;var b=0;if((a|0)==1){c[59364]=1;b=1}else if((a|0)==0){c[59364]=0;b=1}else if((a|0)==2){c[59364]=2;b=1}else{c[59364]=0;b=0}return b|0}function oe(a){a=a|0;g[59456]=+(a|0)*1.5707963267948966/90.0;return 1}function of(a){a=+a;var b=0.0;h[29725]=a<0.0?1.0:a;b=+(c[59442]|0)*a/10.0;h[1630]=b>=0.0?b:1.0;return}function og(){var b=0,d=0,e=0,f=0;b=i;c[59270]=0;c[59272]=0;a[237104]=0;ol(-1);c[59364]=0;g[59456]=0.0;a[237136]=0;a[237432]=1;c[59356]=0;c[59354]=c[59262];a[237392]=1;c[59346]=c[59344];g[59360]=0.0;if((aY(236976,173280)|0)==0){d=c[10030]|0;e=a[237096]|0?198816:198832;f=a[237472]|0?173096:173160;cf(d|0,173232,(v=i,i=i+40|0,c[v>>2]=e,c[v+8>>2]=173184,c[v+16>>2]=f,c[v+24>>2]=1200,c[v+32>>2]=2,v)|0);i=b;return}if((aY(236976,173088)|0)!=0){i=b;return}f=a[237472]|0;cf(c[10030]|0,173048,(v=i,i=i+72|0,c[v>>2]=a[237096]|0?198816:198832,c[v+8>>2]=173184,c[v+16>>2]=f?173096:173160,c[v+24>>2]=f?173032:173040,h[v+32>>3]=100.0,c[v+40>>2]=172944,c[v+48>>2]=-2,c[v+56>>2]=1200,c[v+64>>2]=2,v)|0);i=b;return}function oh(){tK(a[237104]&1);c[59270]=0;c[59272]=0;aD(c[10030]|0);return}function oi(){tK(a[237104]&1);c[59270]=0;c[59272]=0;aD(c[10030]|0);return}function oj(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[59272]|0;f=c[59270]|0;c[59272]=b;c[59270]=d;if((e|0)==(b|0)&(f|0)==(d|0)){return}tK(a[237104]&1);return}function ok(b,d){b=b|0;d=d|0;var e=0,f=0;if(a[237104]|0){e=(c[59280]<<3)+8|0}else{f=c[59454]|0;c[59352]=f;c[59350]=f;c[59356]=c[59260];g[59360]=+g[59266];c[59346]=c[59344];c[59354]=c[59262];c[59280]=0;f=db(c[59282]|0,8,173288)|0;c[59282]=f;c[f+(c[59280]<<3)>>2]=(c[59272]|0)+(c[59242]|0);c[(c[59282]|0)+(c[59280]<<3)+4>>2]=((c[59240]|0)+(c[(c[3524]|0)+12>>2]|0)|0)-(c[59270]|0);c[59280]=1;a[237104]=1;e=16}f=db(c[59282]|0,e,173288)|0;c[59282]=f;c[f+(c[59280]<<3)>>2]=(c[59242]|0)+b;c[(c[59282]|0)+(c[59280]<<3)+4>>2]=((c[(c[3524]|0)+12>>2]|0)-d|0)+(c[59240]|0);f=(c[59280]|0)+1|0;c[59280]=f;if((f|0)<=(c[59278]|0)){c[59272]=b;c[59270]=d;return}tK(a[237104]&1);c[59272]=b;c[59270]=d;return}function ol(b){b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;d=c[59260]|0;e=~~+g[59266];f=c[59454]|0;i=c[59344]|0;j=c[59262]|0;k=c[59446]|0;c[59344]=k;l=~~(+h[29726]*+(c[59448]|0));m=(l|0)<1?1:l;c[59262]=m;c[59454]=-1;n=(b|0)<-2?-2:b;do{if((n|0)==0|(n|0)==(-2|0)){c[59260]=0;g[59266]=0.0;if(!(a[237032]&(n|0)==0)){o=0;p=0.0;q=-1;r=k;s=m;break}c[59454]=4;o=0;p=0.0;q=4;r=k;s=m}else if((n|0)==(-1|0)){c[59260]=2;if(a[237072]|0){c[59260]=0;t=0}else{t=2}g[59266]=4.0;if(!(a[237032]|0)){o=t;p=4.0;q=-1;r=k;s=m;break}c[59454]=0;o=t;p=4.0;q=0;r=k;s=m}else{b=((n|0)/1e3&-1)+k|0;c[59344]=b;u=(n|0)%1e3&-1;v=(u+99|0)>>>0<199?l:(u|0)/100&-1;w=(v|0)<1?1:v;c[59262]=w;v=(u|0)%100&-1;if(a[237032]|0){u=(v|0)>8&1;c[59260]=u;x=c[237336+(((v|0)%9&-1)<<2)>>2]|0;c[59454]=x;y=(v|0)/9&-1;z=u;A=x}else{if((v|0)==0){B=0}else{B=((v|0)%2&-1)+1|0}c[59260]=B;y=(v+1|0)/2&-1;z=B;A=-1}C=+(y*3&-1|0);g[59266]=C;if(!(a[237072]|0)){o=z;p=C;q=A;r=b;s=w;break}c[59260]=0;o=0;p=C;q=A;r=b;s=w}}while(0);do{if((o|0)==(d|0)){if(!(p==+(e|0)&(q|0)==(f|0)&(r|0)==(i|0)&(s|0)==(j|0))){break}return}}while(0);tK(a[237104]&1);return}function om(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,w=0;f=i;c[59260]=0;if((((e|0)%100&-1)-49|0)>>>0<50){j=e}else{k=(e|0)%13&-1;if((k|0)==12){l=78}else if((k|0)==8){l=88}else if((k|0)==4){l=68}else if((k|0)==10){l=98}else if((k|0)==6){c[59260]=0;tK(a[237104]&1);e=(c[59344]|0)-1|0;m=c[59454]|0;n=(c[59242]|0)+b|0;o=c[3524]|0;p=((c[o+12>>2]|0)-d|0)+(c[59240]|0)|0;q=~~(+h[29725]*+((c[o+16>>2]|0)>>>0>>>0)*.25+1.0);o=c[59262]|0;r=+g[59266];cf(c[10030]|0,173528,(v=i,i=i+128|0,c[v>>2]=c[59260],c[v+8>>2]=o,c[v+16>>2]=m,c[v+24>>2]=m,c[v+32>>2]=(e|0)<0?0:e,c[v+40>>2]=0,c[v+48>>2]=20,h[v+56>>3]=r,c[v+64>>2]=n,c[v+72>>2]=p,c[v+80>>2]=q,c[v+88>>2]=q,c[v+96>>2]=n,c[v+104>>2]=p,c[v+112>>2]=n,c[v+120>>2]=p-q,v)|0);i=f;return}else if((k|0)==7){l=84}else if((k|0)==11){l=74}else if((k|0)==3){c[59260]=0;tK(a[237104]&1);q=(c[59344]|0)-1|0;p=c[59454]|0;n=(c[59242]|0)+b|0;e=((c[(c[3524]|0)+12>>2]|0)-d|0)+(c[59240]|0)|0;m=c[59262]|0;r=+g[59266];cf(c[10030]|0,173472,(v=i,i=i+64|0,c[v>>2]=c[59260],c[v+8>>2]=m,c[v+16>>2]=p,c[v+24>>2]=p,c[v+32>>2]=(q|0)<0?0:q,c[v+40>>2]=0,c[v+48>>2]=-1,h[v+56>>3]=r,v)|0);q=~~(+h[29725]*+((c[(c[3524]|0)+16>>2]|0)>>>0>>>0)*.25+1.0);p=n-q|0;m=e-q|0;o=q+e|0;e=q+n|0;cf(c[10030]|0,173424,(v=i,i=i+80|0,c[v>>2]=p,c[v+8>>2]=m,c[v+16>>2]=p,c[v+24>>2]=o,c[v+32>>2]=e,c[v+40>>2]=o,c[v+48>>2]=e,c[v+56>>2]=m,c[v+64>>2]=p,c[v+72>>2]=m,v)|0);i=f;return}else if((k|0)==9){l=94}else if((k|0)==5){c[59260]=0;tK(a[237104]&1);m=(c[59344]|0)-1|0;p=c[59454]|0;e=(c[59242]|0)+b|0;o=c[3524]|0;n=((c[o+12>>2]|0)-d|0)+(c[59240]|0)|0;q=~~(+h[29725]*+((c[o+16>>2]|0)>>>0>>>0)*.25+1.0);o=c[59262]|0;r=+g[59266];cf(c[10030]|0,173528,(v=i,i=i+128|0,c[v>>2]=c[59260],c[v+8>>2]=o,c[v+16>>2]=p,c[v+24>>2]=p,c[v+32>>2]=(m|0)<0?0:m,c[v+40>>2]=0,c[v+48>>2]=-1,h[v+56>>3]=r,c[v+64>>2]=e,c[v+72>>2]=n,c[v+80>>2]=q,c[v+88>>2]=q,c[v+96>>2]=e,c[v+104>>2]=n,c[v+112>>2]=e,c[v+120>>2]=n-q,v)|0);i=f;return}else{ly(b,d,k);i=f;return}c[59260]=0;j=l}tK(a[237104]&1);if((j|0)>1e3){s=((j|0)/1e3&-1)+(c[59446]|0)|0}else{s=c[59344]|0}l=s-1|0;s=(j|0)%1e3&-1;j=(l|0)<0?0:l;do{if((s|0)<100){t=c[59454]|0}else{if(a[237032]|0){t=((s|0)/100&-1)-1|0;break}else{t=(s|0)>699?7:-1;break}}}while(0);l=(s|0)%100&-1;s=(l+1|0)%10&-1;if((s|0)<5){u=(a[237032]^1)<<31>>31}else{u=c[59454]|0}if((s|0)==5|(s|0)==0){w=-1}else{w=((s|0)%5&-1)*5&-1}s=(c[59242]|0)+b|0;b=c[3524]|0;k=((c[b+12>>2]|0)-d|0)+(c[59240]|0)|0;if((l-40|0)>>>0<19){d=~~(+h[29725]*+((c[b+16>>2]|0)>>>0>>>0)*.25+1.0);b=c[10030]|0;q=c[59260]|0;n=c[59262]|0;r=+g[59266];e=k-d|0;cf(b|0,173528,(v=i,i=i+128|0,c[v>>2]=q,c[v+8>>2]=n,c[v+16>>2]=u,c[v+24>>2]=t,c[v+32>>2]=j,c[v+40>>2]=0,c[v+48>>2]=w,h[v+56>>3]=r,c[v+64>>2]=s,c[v+72>>2]=k,c[v+80>>2]=d,c[v+88>>2]=d,c[v+96>>2]=s,c[v+104>>2]=k,c[v+112>>2]=s,c[v+120>>2]=e,v)|0);i=f;return}e=c[59262]|0;r=+g[59266];cf(c[10030]|0,173472,(v=i,i=i+64|0,c[v>>2]=c[59260],c[v+8>>2]=e,c[v+16>>2]=u,c[v+24>>2]=t,c[v+32>>2]=j,c[v+40>>2]=0,c[v+48>>2]=w,h[v+56>>3]=r,v)|0);if((l-59|0)>>>0<10){w=~~(+h[29725]*+((c[(c[3524]|0)+16>>2]|0)>>>0>>>0)*.25+1.0);j=c[10030]|0;t=s-w|0;u=k-w|0;e=w+k|0;d=w+s|0;cf(j|0,173424,(v=i,i=i+80|0,c[v>>2]=t,c[v+8>>2]=u,c[v+16>>2]=t,c[v+24>>2]=e,c[v+32>>2]=d,c[v+40>>2]=e,c[v+48>>2]=d,c[v+56>>2]=u,c[v+64>>2]=t,c[v+72>>2]=u,v)|0);i=f;return}if((l-69|0)>>>0<10){u=~~(+h[29725]*+((c[(c[3524]|0)+16>>2]|0)>>>0>>>0)/3.0+1.0);t=c[10030]|0;d=s-u|0;e=u+k|0;j=u+s|0;w=k-u|0;cf(t|0,173424,(v=i,i=i+80|0,c[v>>2]=d,c[v+8>>2]=k,c[v+16>>2]=s,c[v+24>>2]=e,c[v+32>>2]=j,c[v+40>>2]=k,c[v+48>>2]=s,c[v+56>>2]=w,c[v+64>>2]=d,c[v+72>>2]=k,v)|0);i=f;return}if((l-79|0)>>>0<10){d=~~(+h[29725]*+((c[(c[3524]|0)+16>>2]|0)>>>0>>>0)/3.0+1.0);w=(d<<2|0)/7&-1;j=c[10030]|0;e=s-d|0;t=w+k|0;u=k-(w<<1)|0;w=d+s|0;cf(j|0,173392,(v=i,i=i+64|0,c[v>>2]=e,c[v+8>>2]=t,c[v+16>>2]=s,c[v+24>>2]=u,c[v+32>>2]=w,c[v+40>>2]=t,c[v+48>>2]=e,c[v+56>>2]=t,v)|0);i=f;return}if((l-89|0)>>>0>=10){i=f;return}l=~~(+h[29725]*+((c[(c[3524]|0)+16>>2]|0)>>>0>>>0)/3.0+1.0);t=(l<<2|0)/7&-1;e=s-l|0;w=k-t|0;cf(c[10030]|0,173392,(v=i,i=i+64|0,c[v>>2]=e,c[v+8>>2]=w,c[v+16>>2]=s,c[v+24>>2]=(t<<1)+k,c[v+32>>2]=l+s,c[v+40>>2]=w,c[v+48>>2]=e,c[v+56>>2]=w,v)|0);i=f;return}function on(b,d,e,f,j){b=b|0;d=d|0;e=e|0;f=f|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0;k=i;tK(a[237104]&1);l=(c[59356]|0)==2&1;m=a[237432]&1;n=c[59260]|0;o=c[59262]|0;p=c[59454]|0;q=c[59344]|0;r=a[237392]<<31>>31;s=+g[59266];t=(j|0)!=0;u=(j|0)==2;cf(c[10030]|0,173752,(v=i,i=i+128|0,c[v>>2]=2,c[v+8>>2]=m,c[v+16>>2]=n,c[v+24>>2]=o,c[v+32>>2]=p,c[v+40>>2]=p,c[v+48>>2]=q,c[v+56>>2]=0,c[v+64>>2]=r,h[v+72>>3]=s,c[v+80>>2]=0,c[v+88>>2]=l,c[v+96>>2]=0,c[v+104>>2]=t&1,c[v+112>>2]=u&1,c[v+120>>2]=2,v)|0);do{if(t){l=c[12910]|0;if((l|0)==0){r=c[(c[3524]|0)+28>>2]|0;w=+(r>>>0>>>0);x=+(((r>>>1)+1|0)>>>0>>>0)}else{s=+(l|0);y=+h[6458]*3.141592653589793/180.0;z=s*2.0*+T(+y);w=s*+S(+y);x=z}z=+h[6457];if(z<70.0){A=2}else{A=z>110.0?3:1}l=(c[12912]|0)==2&1;r=c[10030]|0;cf(r|0,173640,(v=i,i=i+40|0,c[v>>2]=A,c[v+8>>2]=l,h[v+16>>3]=1.0,h[v+24>>3]=x,h[v+32>>3]=w,v)|0);if(!u){break}r=c[10030]|0;cf(r|0,173640,(v=i,i=i+40|0,c[v>>2]=A,c[v+8>>2]=l,h[v+16>>3]=1.0,h[v+24>>3]=x,h[v+32>>3]=w,v)|0)}}while(0);A=c[59240]|0;u=(c[(c[3524]|0)+12>>2]|0)+A|0;cf(c[10030]|0,173608,(v=i,i=i+32|0,c[v>>2]=(c[59242]|0)+b,c[v+8>>2]=u-d,c[v+16>>2]=A+e,c[v+24>>2]=u-f,v)|0);c[59272]=e;c[59270]=f;i=k;return}function oo(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0.0,w=0.0;f=i;if((a[e]|0)==0){i=f;return}j=uA(e|0)<<1|1;k=ut(j)|0;do{if((k|0)==0){gk();l=ut(j)|0;if((l|0)!=0){m=l;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=173376,v)|0)}else{m=k}}while(0);k=m;j=e;while(1){l=a[j]|0;if(l<<24>>24==92){a[k]=92;n=k+1|0;o=a[j]|0}else{n=k;o=l}a[n]=o;if((a[j]|0)==0){break}else{k=n+1|0;j=j+1|0}}tK(a[237104]&1);p=+g[59456];q=p;j=c[3524]|0;n=c[j+16>>2]|0;if(p==0.0){r=b;s=n>>>1}else{p=+(n>>>0>>>0);k=~~(p*+T(+q)*.25)+b|0;r=k;s=~~(p*+S(+q)*.25)}k=c[10030]|0;b=c[59364]|0;o=c[59454]|0;l=c[59444]|0;p=+(c[59442]|0);t=c[59264]|0;u=+((c[j+20>>2]|0)>>>0>>>0);w=u*+((uA(e|0)|0)>>>0>>>0);e=(c[59242]|0)+r|0;r=((s-d|0)+(c[j+12>>2]|0)|0)+(c[59240]|0)|0;cf(k|0,173312,(v=i,i=i+112|0,c[v>>2]=4,c[v+8>>2]=b,c[v+16>>2]=o,c[v+24>>2]=0,c[v+32>>2]=-1,c[v+40>>2]=l,h[v+48>>3]=p,h[v+56>>3]=q,c[v+64>>2]=t,h[v+72>>3]=+(n>>>0>>>0),h[v+80>>3]=w,c[v+88>>2]=e,c[v+96>>2]=r,c[v+104>>2]=m,v)|0);uu(m);i=f;return}function op(a){a=+a;h[29726]=a;return}function oq(b,d,e,f,j){b=b|0;d=d|0;e=e|0;f=f|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;k=i;tK(a[237104]&1);l=c[59454]|0;c[59352]=l;m=b&15;do{if((m|0)==1|(m|0)==4){n=b>>4;o=(n|0)<0?0:n;n=(o|0)>100?20:(o|0)/5&-1;if((l|0)==(-1|0)|(l|0)==0){p=n;q=l;break}p=40-n|0;q=l}else if((m|0)==2|(m|0)==5){n=b>>4;p=(n|0)<0?41:n+41|0;q=7}else{p=20;q=7}}while(0);b=(c[59242]|0)+d|0;d=((c[(c[3524]|0)+12>>2]|0)-e|0)+(c[59240]|0)|0;e=a[237432]&1;m=c[59356]|0;n=c[59354]|0;o=c[59346]|0;r=+g[59360];s=b+f|0;f=d-j|0;cf(c[10030]|0,173808,(v=i,i=i+208|0,c[v>>2]=2,c[v+8>>2]=e,c[v+16>>2]=m,c[v+24>>2]=n,c[v+32>>2]=l,c[v+40>>2]=q,c[v+48>>2]=o,c[v+56>>2]=0,c[v+64>>2]=p,h[v+72>>3]=r,c[v+80>>2]=0,c[v+88>>2]=0,c[v+96>>2]=0,c[v+104>>2]=0,c[v+112>>2]=0,c[v+120>>2]=5,c[v+128>>2]=b,c[v+136>>2]=d,c[v+144>>2]=s,c[v+152>>2]=d,c[v+160>>2]=s,c[v+168>>2]=f,c[v+176>>2]=b,c[v+184>>2]=f,c[v+192>>2]=b,c[v+200>>2]=d,v)|0);i=k;return}function or(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0;d=i;if((b|0)==0){e=128;i=d;return e|0}tK(a[237104]&1);if(a[237136]|0){f=c[m>>2]|0;aI(173976,34,1,f|0);e=0;i=d;return e|0}a[237136]=1;f=a[237032]^1;g=c[5163]|0;if(!((g|0)==103|f)){if((c[5169]|0)<=0){e=0;i=d;return e|0}j=b+32|0;b=0;while(1){k=c[j>>2]|0;l=~~(+h[k+(b*24&-1)>>3]*255.0+.5);n=~~(+h[k+(b*24&-1)+8>>3]*255.0+.5);o=~~(+h[k+(b*24&-1)+16>>3]*255.0+.5);cf(c[10030]|0,174016,(v=i,i=i+40|0,c[v>>2]=0,c[v+8>>2]=b+32,c[v+16>>2]=l,c[v+24>>2]=n,c[v+32>>2]=o,v)|0);o=b+1|0;if((o|0)<(c[5169]|0)){b=o}else{e=0;break}}i=d;return e|0}if((g|0)==114&f){f=c[m>>2]|0;aI(174040,57,1,f|0)}f=c[5169]|0;if((f|0)>0){p=0;q=f}else{e=0;i=d;return e|0}while(1){f=~~(+(p|0)*255.0/+(q-1|0)+.5);cf(c[10030]|0,174016,(v=i,i=i+40|0,c[v>>2]=0,c[v+8>>2]=p+32,c[v+16>>2]=f,c[v+24>>2]=f,c[v+32>>2]=f,v)|0);f=p+1|0;g=c[5169]|0;if((f|0)<(g|0)){p=f;q=g}else{e=0;break}}i=d;return e|0}function os(b){b=b|0;var d=0.0,e=0,f=0,g=0;d=+h[b+8>>3];e=c[b>>2]|0;if((e|0)==5){if(d>0.0){f=~~(d*+(c[5169]|0))}else{f=0}if(!(a[237136]|0)){g=c[m>>2]|0;aI(174104,29,1,g|0)}g=(f|0)>127?159:f+32|0;if((c[59454]|0)==(g|0)){return}tK(a[237104]&1);c[59454]=g;return}else if((e|0)==1){ol(c[b+4>>2]|0);return}else{return}}function ot(b,d){b=b|0;d=d|0;var e=0,f=0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0;e=i;tK(a[237104]&1);f=c[59356]|0;j=c[59454]|0;k=c[59346]|0;l=+g[59360];cf(c[10030]|0,174184,(v=i,i=i+128|0,c[v>>2]=2,c[v+8>>2]=3,c[v+16>>2]=f,c[v+24>>2]=0,c[v+32>>2]=j,c[v+40>>2]=j,c[v+48>>2]=k,c[v+56>>2]=0,c[v+64>>2]=20,h[v+72>>3]=l,c[v+80>>2]=0,c[v+88>>2]=0,c[v+96>>2]=0,c[v+104>>2]=0,c[v+112>>2]=0,c[v+120>>2]=b+1,v)|0);k=c[10030]|0;j=c[59242]|0;if((b|0)>0){f=b-1|0;m=0;n=0;o=k;p=j;while(1){q=((c[59240]|0)+(c[(c[3524]|0)+12>>2]|0)|0)-(c[d+(m*12&-1)+4>>2]|0)|0;cf(o|0,174136,(v=i,i=i+16|0,c[v>>2]=(c[d+(m*12&-1)>>2]|0)+p,c[v+8>>2]=q,v)|0);if((n|0)<5|(m|0)==(f|0)){r=n+1|0}else{q=c[10030]|0;aI(84248,2,1,q|0);r=0}q=m+1|0;s=c[10030]|0;t=c[59242]|0;if((q|0)<(b|0)){m=q;n=r;o=s;p=t}else{u=r;w=s;x=t;break}}}else{u=0;w=k;x=j}j=((c[59240]|0)+(c[(c[3524]|0)+12>>2]|0)|0)-(c[d+4>>2]|0)|0;cf(w|0,174136,(v=i,i=i+16|0,c[v>>2]=(c[d>>2]|0)+x,c[v+8>>2]=j,v)|0);if((u|0)==-1){i=e;return}aF(10,c[10030]|0);i=e;return}function ou(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;if((b|0)==6){tK(a[237104]&1);e=c[10030]|0;aF(54,e|0);e=c[10030]|0;f=c[59242]|0;g=(c[7938]|0)+f|0;h=(c[59240]|0)+(c[(c[3524]|0)+12>>2]|0)|0;j=h-(c[7941]|0)|0;k=(c[7939]|0)+f|0;f=h-(c[7940]|0)|0;cf(e|0,174424,(v=i,i=i+32|0,c[v>>2]=g,c[v+8>>2]=j,c[v+16>>2]=k,c[v+24>>2]=f,v)|0);f=c[10030]|0;k=(c[59362]|0)+1|0;c[59362]=k;cf(f|0,174400,(v=i,i=i+8|0,c[v>>2]=k,v)|0);i=d;return}else if((b|0)==7){tK(a[237104]&1);cf(c[10030]|0,174320,(v=i,i=i+8|0,c[v>>2]=c[59362],v)|0);aI(174256,3,1,c[10030]|0);i=d;return}else if((b|0)==0){c[59362]=0;i=d;return}else{i=d;return}}function ov(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0;a=i;b=ut(28)|0;do{if((b|0)==0){gk();d=ut(28)|0;if((d|0)!=0){e=d;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{e=b}}while(0);b=e;c[e>>2]=0;c[e+12>>2]=7;c[e+4>>2]=2048;c[e+8>>2]=0;d=ut(8192)|0;do{if((d|0)==0){gk();f=ut(8192)|0;if((f|0)!=0){g=f;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{g=d}}while(0);d=e+16|0;c[d>>2]=g;g=ut(8192)|0;do{if((g|0)==0){gk();f=ut(8192)|0;if((f|0)!=0){h=f;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{h=g}}while(0);g=e+20|0;c[g>>2]=h;h=ut(2048)|0;do{if((h|0)==0){gk();f=ut(2048)|0;if((f|0)!=0){j=f;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{j=h}}while(0);c[e+24>>2]=j;do{if((c[d>>2]|0)==0){k=0}else{if((c[g>>2]|0)==0){k=0;break}uE(j|0,0,2048);k=b}}while(0);c[59112]=k;c[59113]=k;k=ut(28)|0;do{if((k|0)==0){gk();b=ut(28)|0;if((b|0)!=0){l=b;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{l=k}}while(0);k=l;c[l>>2]=2;c[l+12>>2]=1;c[l+4>>2]=3072;c[l+8>>2]=0;b=ut(12288)|0;do{if((b|0)==0){gk();j=ut(12288)|0;if((j|0)!=0){m=j;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{m=b}}while(0);b=l+16|0;c[b>>2]=m;m=ut(12288)|0;do{if((m|0)==0){gk();j=ut(12288)|0;if((j|0)!=0){n=j;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{n=m}}while(0);m=l+20|0;c[m>>2]=n;n=ut(3072)|0;do{if((n|0)==0){gk();j=ut(3072)|0;if((j|0)!=0){o=j;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{o=n}}while(0);c[l+24>>2]=o;do{if((c[b>>2]|0)==0){p=0}else{if((c[m>>2]|0)==0){p=0;break}uE(o|0,0,3072);p=k}}while(0);c[59114]=p;c[59115]=c[59112];p=ut(28)|0;do{if((p|0)==0){gk();k=ut(28)|0;if((k|0)!=0){q=k;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{q=p}}while(0);p=q;c[q>>2]=4;c[q+12>>2]=5;c[q+4>>2]=1024;c[q+8>>2]=0;k=ut(4096)|0;do{if((k|0)==0){gk();o=ut(4096)|0;if((o|0)!=0){r=o;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{r=k}}while(0);k=q+16|0;c[k>>2]=r;r=ut(4096)|0;do{if((r|0)==0){gk();o=ut(4096)|0;if((o|0)!=0){s=o;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{s=r}}while(0);r=q+20|0;c[r>>2]=s;s=ut(1024)|0;do{if((s|0)==0){gk();o=ut(1024)|0;if((o|0)!=0){t=o;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{t=s}}while(0);c[q+24>>2]=t;do{if((c[k>>2]|0)==0){u=0}else{if((c[r>>2]|0)==0){u=0;break}uE(t|0,0,1024);u=p}}while(0);c[59116]=u;u=ut(28)|0;do{if((u|0)==0){gk();p=ut(28)|0;if((p|0)!=0){w=p;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{w=u}}while(0);u=w;c[w>>2]=5;c[w+12>>2]=6;c[w+4>>2]=256;c[w+8>>2]=0;p=ut(1024)|0;do{if((p|0)==0){gk();t=ut(1024)|0;if((t|0)!=0){x=t;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{x=p}}while(0);p=w+16|0;c[p>>2]=x;x=ut(1024)|0;do{if((x|0)==0){gk();t=ut(1024)|0;if((t|0)!=0){y=t;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{y=x}}while(0);x=w+20|0;c[x>>2]=y;y=ut(256)|0;do{if((y|0)==0){gk();t=ut(256)|0;if((t|0)!=0){z=t;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{z=y}}while(0);c[w+24>>2]=z;do{if((c[p>>2]|0)==0){A=0}else{if((c[x>>2]|0)==0){A=0;break}uE(z|0,0,256);A=u}}while(0);c[59117]=A;A=ut(28)|0;do{if((A|0)==0){gk();u=ut(28)|0;if((u|0)!=0){B=u;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{B=A}}while(0);A=B;c[B>>2]=6;c[B+12>>2]=8;c[B+4>>2]=256;c[B+8>>2]=0;u=ut(1024)|0;do{if((u|0)==0){gk();z=ut(1024)|0;if((z|0)!=0){C=z;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{C=u}}while(0);u=B+16|0;c[u>>2]=C;C=ut(1024)|0;do{if((C|0)==0){gk();z=ut(1024)|0;if((z|0)!=0){D=z;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{D=C}}while(0);C=B+20|0;c[C>>2]=D;D=ut(256)|0;do{if((D|0)==0){gk();z=ut(256)|0;if((z|0)!=0){E=z;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{E=D}}while(0);c[B+24>>2]=E;do{if((c[u>>2]|0)==0){F=0}else{if((c[C>>2]|0)==0){F=0;break}uE(E|0,0,256);F=A}}while(0);c[59118]=F;F=ut(28)|0;do{if((F|0)==0){gk();A=ut(28)|0;if((A|0)!=0){G=A;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{G=F}}while(0);F=G;c[G>>2]=7;c[G+12>>2]=9;c[G+4>>2]=128;c[G+8>>2]=0;A=ut(512)|0;do{if((A|0)==0){gk();E=ut(512)|0;if((E|0)!=0){H=E;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{H=A}}while(0);A=G+16|0;c[A>>2]=H;H=ut(512)|0;do{if((H|0)==0){gk();E=ut(512)|0;if((E|0)!=0){I=E;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{I=H}}while(0);H=G+20|0;c[H>>2]=I;I=ut(128)|0;do{if((I|0)==0){gk();E=ut(128)|0;if((E|0)!=0){J=E;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{J=I}}while(0);c[G+24>>2]=J;do{if((c[A>>2]|0)==0){K=0}else{if((c[H>>2]|0)==0){K=0;break}uE(J|0,0,128);K=F}}while(0);c[59119]=K;K=ut(28)|0;do{if((K|0)==0){gk();F=ut(28)|0;if((F|0)!=0){L=F;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{L=K}}while(0);K=L;c[L>>2]=8;c[L+12>>2]=10;c[L+4>>2]=128;c[L+8>>2]=0;F=ut(512)|0;do{if((F|0)==0){gk();J=ut(512)|0;if((J|0)!=0){M=J;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{M=F}}while(0);F=L+16|0;c[F>>2]=M;M=ut(512)|0;do{if((M|0)==0){gk();J=ut(512)|0;if((J|0)!=0){N=J;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{N=M}}while(0);M=L+20|0;c[M>>2]=N;N=ut(128)|0;do{if((N|0)==0){gk();J=ut(128)|0;if((J|0)!=0){O=J;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{O=N}}while(0);c[L+24>>2]=O;do{if((c[F>>2]|0)==0){P=0}else{if((c[M>>2]|0)==0){P=0;break}uE(O|0,0,128);P=K}}while(0);c[59120]=P;P=ut(28)|0;do{if((P|0)==0){gk();K=ut(28)|0;if((K|0)!=0){Q=K;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{Q=P}}while(0);P=Q;c[Q>>2]=9;c[Q+12>>2]=6;c[Q+4>>2]=64;c[Q+8>>2]=0;K=ut(256)|0;do{if((K|0)==0){gk();O=ut(256)|0;if((O|0)!=0){R=O;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{R=K}}while(0);K=Q+16|0;c[K>>2]=R;R=ut(256)|0;do{if((R|0)==0){gk();O=ut(256)|0;if((O|0)!=0){S=O;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{S=R}}while(0);R=Q+20|0;c[R>>2]=S;S=ut(64)|0;do{if((S|0)==0){gk();O=ut(64)|0;if((O|0)!=0){T=O;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{T=S}}while(0);c[Q+24>>2]=T;do{if((c[K>>2]|0)==0){U=0}else{if((c[R>>2]|0)==0){U=0;break}uE(T|0,0,64);U=P}}while(0);c[59121]=U;U=ut(28)|0;do{if((U|0)==0){gk();P=ut(28)|0;if((P|0)!=0){V=P;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{V=U}}while(0);U=V;c[V>>2]=10;c[V+12>>2]=4;c[V+4>>2]=64;c[V+8>>2]=0;P=ut(256)|0;do{if((P|0)==0){gk();T=ut(256)|0;if((T|0)!=0){W=T;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{W=P}}while(0);P=V+16|0;c[P>>2]=W;W=ut(256)|0;do{if((W|0)==0){gk();T=ut(256)|0;if((T|0)!=0){X=T;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{X=W}}while(0);W=V+20|0;c[W>>2]=X;X=ut(64)|0;do{if((X|0)==0){gk();T=ut(64)|0;if((T|0)!=0){Y=T;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{Y=X}}while(0);c[V+24>>2]=Y;do{if((c[P>>2]|0)==0){Z=0}else{if((c[W>>2]|0)==0){Z=0;break}uE(Y|0,0,64);Z=U}}while(0);c[59122]=Z;Z=ut(28)|0;do{if((Z|0)==0){gk();U=ut(28)|0;if((U|0)!=0){_=U;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{_=Z}}while(0);Z=_;c[_>>2]=11;c[_+12>>2]=11;c[_+4>>2]=512;c[_+8>>2]=0;U=ut(2048)|0;do{if((U|0)==0){gk();Y=ut(2048)|0;if((Y|0)!=0){$=Y;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{$=U}}while(0);U=_+16|0;c[U>>2]=$;$=ut(2048)|0;do{if(($|0)==0){gk();Y=ut(2048)|0;if((Y|0)!=0){aa=Y;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{aa=$}}while(0);$=_+20|0;c[$>>2]=aa;aa=ut(512)|0;do{if((aa|0)==0){gk();Y=ut(512)|0;if((Y|0)!=0){ab=Y;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{ab=aa}}while(0);c[_+24>>2]=ab;if((c[U>>2]|0)==0){ac=0;c[59123]=ac;ad=c[59122]|0;c[59128]=ad;c[59108]=0;ae=c[10030]|0;af=aI(174480,10,1,ae|0)|0;ag=c[10030]|0;ah=aD(ag|0)|0;i=a;return}if((c[$>>2]|0)==0){ac=0;c[59123]=ac;ad=c[59122]|0;c[59128]=ad;c[59108]=0;ae=c[10030]|0;af=aI(174480,10,1,ae|0)|0;ag=c[10030]|0;ah=aD(ag|0)|0;i=a;return}uE(ab|0,0,512);ac=Z;c[59123]=ac;ad=c[59122]|0;c[59128]=ad;c[59108]=0;ae=c[10030]|0;af=aI(174480,10,1,ae|0)|0;ag=c[10030]|0;ah=aD(ag|0)|0;i=a;return}function ow(a){a=a|0;var b=0,d=0;b=(a|0)<-2?-2:a;if((b|0)>8){d=(b|0)%9&-1}else{d=b}b=c[236448+(d+2<<2)>>2]|0;if((b|0)==(c[59128]|0)){c[59106]=(c[59106]|0)+1;return}else{c[59128]=b;return}}function ox(){var a=0,b=0;a=2;do{b=c[236448+(a<<2)>>2]|0;uu(c[b+16>>2]|0);uu(c[b+20>>2]|0);uu(c[b+24>>2]|0);uu(b);a=a+1|0;}while((a|0)<12);return}function oy(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;a=c[59112]|0;b=c[59108]|0;if((c[a+12>>2]|0)==(b|0)){tJ(a);d=c[59108]|0}else{d=b}b=c[59113]|0;if((c[b+12>>2]|0)==(d|0)){tJ(b);e=c[59108]|0}else{e=d}d=c[59114]|0;if((c[d+12>>2]|0)==(e|0)){tJ(d);f=c[59108]|0}else{f=e}e=c[59115]|0;if((c[e+12>>2]|0)==(f|0)){tJ(e);g=c[59108]|0}else{g=f}f=c[59116]|0;if((c[f+12>>2]|0)==(g|0)){tJ(f);h=c[59108]|0}else{h=g}g=c[59117]|0;if((c[g+12>>2]|0)==(h|0)){tJ(g);i=c[59108]|0}else{i=h}h=c[59118]|0;if((c[h+12>>2]|0)==(i|0)){tJ(h);j=c[59108]|0}else{j=i}i=c[59119]|0;if((c[i+12>>2]|0)==(j|0)){tJ(i);k=c[59108]|0}else{k=j}j=c[59120]|0;if((c[j+12>>2]|0)==(k|0)){tJ(j);l=c[59108]|0}else{l=k}k=c[59121]|0;if((c[k+12>>2]|0)==(l|0)){tJ(k);m=c[59108]|0}else{m=l}l=c[59122]|0;if((c[l+12>>2]|0)==(m|0)){tJ(l);n=c[59108]|0}else{n=m}m=c[59123]|0;if((c[m+12>>2]|0)==(n|0)){tJ(m);o=0}else{o=0}do{m=236448+(o<<2)|0;tJ(c[m>>2]|0);n=c[(c[m>>2]|0)+12>>2]|0;m=c[59112]|0;if((c[m+12>>2]|0)==(n|0)){tJ(m)}m=c[59113]|0;if((c[m+12>>2]|0)==(n|0)){tJ(m)}m=c[59114]|0;if((c[m+12>>2]|0)==(n|0)){tJ(m)}m=c[59115]|0;if((c[m+12>>2]|0)==(n|0)){tJ(m)}m=c[59116]|0;if((c[m+12>>2]|0)==(n|0)){tJ(m)}m=c[59117]|0;if((c[m+12>>2]|0)==(n|0)){tJ(m)}m=c[59118]|0;if((c[m+12>>2]|0)==(n|0)){tJ(m)}m=c[59119]|0;if((c[m+12>>2]|0)==(n|0)){tJ(m)}m=c[59120]|0;if((c[m+12>>2]|0)==(n|0)){tJ(m)}m=c[59121]|0;if((c[m+12>>2]|0)==(n|0)){tJ(m)}m=c[59122]|0;if((c[m+12>>2]|0)==(n|0)){tJ(m)}m=c[59123]|0;if((c[m+12>>2]|0)==(n|0)){tJ(m)}o=o+1|0;}while((o|0)<12);aI(174496,5,1,c[10030]|0);aD(c[10030]|0);return}function oz(){aI(174504,8,1,c[10030]|0);c[59096]=-200;c[59098]=-200;c[59124]=800;c[59126]=800;a[236440]=1;c[59104]=0;c[59102]=0;c[59106]=0;c[59100]=0;return}function oA(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=c[59128]|0;f=c[e+8>>2]|0;do{if((f|0)>0){g=f-1|0;h=(c[e+16>>2]|0)+(g<<2)|0;do{if((c[h>>2]|0)==(b|0)){if((c[(c[e+20>>2]|0)+(g<<2)>>2]|0)!=(d|0)){break}c[59104]=(c[59104]|0)+1;return}}while(0);if((a[(c[e+24>>2]|0)+g|0]&1)==0){break}c[h>>2]=b;i=c[59128]|0;c[(c[i+20>>2]|0)+((c[i+8>>2]|0)-1<<2)>>2]=d;c[59104]=(c[59104]|0)+1;return}}while(0);if((f|0)==(c[e+4>>2]|0)){tI();i=c[59128]|0;j=i;k=c[i+8>>2]|0}else{j=e;k=f}c[(c[j+16>>2]|0)+(k<<2)>>2]=b;b=c[59128]|0;c[(c[b+20>>2]|0)+(c[b+8>>2]<<2)>>2]=d;d=c[59128]|0;a[(c[d+24>>2]|0)+(c[d+8>>2]|0)|0]=1;d=(c[59128]|0)+8|0;c[d>>2]=(c[d>>2]|0)+1;return}function oB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=c[59128]|0;f=c[e+8>>2]|0;do{if((f|0)>2){g=f-1|0;if((c[(c[e+16>>2]|0)+(g<<2)>>2]|0)!=(b|0)){break}if((c[(c[e+20>>2]|0)+(g<<2)>>2]|0)!=(d|0)){break}if((a[(c[e+24>>2]|0)+g|0]&1)!=0){break}c[59102]=(c[59102]|0)+1;return}}while(0);if((f|0)==(c[e+4>>2]|0)){tI();g=c[59128]|0;h=g;i=c[g+8>>2]|0}else{h=e;i=f}c[(c[h+16>>2]|0)+(i<<2)>>2]=b;b=c[59128]|0;c[(c[b+20>>2]|0)+(c[b+8>>2]<<2)>>2]=d;d=c[59128]|0;a[(c[d+24>>2]|0)+(c[d+8>>2]|0)|0]=0;d=(c[59128]|0)+8|0;c[d>>2]=(c[d>>2]|0)+1;return}function oC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+32|0;if((a[e]|0)==0){i=f;return}aI(174736,3,1,c[10030]|0);if(!(a[236440]|0)){g=c[10030]|0;aF(115,g|0);a[236440]=1}g=f+16|0;h=d-(c[59124]|0)|0;be(g|0,174720,(v=i,i=i+16|0,c[v>>2]=b-(c[59126]|0),c[v+8>>2]=h,v)|0);h=f|0;be(h|0,174712,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=d,v)|0);j=uA(g|0)|0;k=j>>>0<(uA(h|0)|0)>>>0;j=c[10030]|0;if(k){aK(g|0,j|0)}else{aK(h|0,j|0)}aK(e|0,c[10030]|0);c[59126]=b;c[59098]=b;c[59124]=d;c[59096]=d;i=f;return}function oD(a){a=a|0;var b=0;b=i;cf(c[10030]|0,174744,(v=i,i=i+8|0,c[v>>2]=(a|0)!=0?2:1,v)|0);i=b;return 1}function oE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0;f=c[59128]|0;g=c[f+12>>2]|0;h=(g|0)!=1;do{if(h){i=c[59114]|0;if((i|0)==(f|0)){c[59106]=(c[59106]|0)+1;j=g;k=f;break}else{c[59128]=i;j=g;k=i;break}}else{j=0;k=f}}while(0);if((e|0)<0){f=c[59123]|0;c[59128]=f;g=c[f+8>>2]|0;do{if((g|0)>2){i=g-1|0;if((c[(c[f+16>>2]|0)+(i<<2)>>2]|0)!=(b|0)){l=14737;break}if((c[(c[f+20>>2]|0)+(i<<2)>>2]|0)!=(d|0)){l=14737;break}if((a[(c[f+24>>2]|0)+i|0]&1)!=0){l=14737;break}c[59102]=(c[59102]|0)+1}else{l=14737}}while(0);if((l|0)==14737){if((g|0)==(c[f+4>>2]|0)){tI();i=c[59128]|0;m=i;n=c[i+8>>2]|0}else{m=f;n=g}c[(c[m+16>>2]|0)+(n<<2)>>2]=b;n=c[59128]|0;c[(c[n+20>>2]|0)+(c[n+8>>2]<<2)>>2]=d;n=c[59128]|0;a[(c[n+24>>2]|0)+(c[n+8>>2]|0)|0]=0;n=(c[59128]|0)+8|0;c[n>>2]=(c[n>>2]|0)+1}c[59128]=k}k=(e|0)%9&-1;L19947:do{if((k|0)==6){e=b+2|0;n=d+2|0;oA(e,n);m=b-2|0;g=d-2|0;f=c[59128]|0;i=c[f+8>>2]|0;do{if((i|0)>2){o=i-1|0;if((c[(c[f+16>>2]|0)+(o<<2)>>2]|0)!=(m|0)){l=14891;break}if((c[(c[f+20>>2]|0)+(o<<2)>>2]|0)!=(g|0)){l=14891;break}if((a[(c[f+24>>2]|0)+o|0]&1)!=0){l=14891;break}c[59102]=(c[59102]|0)+1}else{l=14891}}while(0);if((l|0)==14891){if((i|0)==(c[f+4>>2]|0)){tI();o=c[59128]|0;p=o;q=c[o+8>>2]|0}else{p=f;q=i}c[(c[p+16>>2]|0)+(q<<2)>>2]=m;o=c[59128]|0;c[(c[o+20>>2]|0)+(c[o+8>>2]<<2)>>2]=g;o=c[59128]|0;a[(c[o+24>>2]|0)+(c[o+8>>2]|0)|0]=0;o=(c[59128]|0)+8|0;c[o>>2]=(c[o>>2]|0)+1}oA(m,n);o=c[59128]|0;r=c[o+8>>2]|0;do{if((r|0)>2){s=r-1|0;if((c[(c[o+16>>2]|0)+(s<<2)>>2]|0)!=(e|0)){break}if((c[(c[o+20>>2]|0)+(s<<2)>>2]|0)!=(g|0)){break}if((a[(c[o+24>>2]|0)+s|0]&1)!=0){break}c[59102]=(c[59102]|0)+1;break L19947}}while(0);if((r|0)==(c[o+4>>2]|0)){tI();n=c[59128]|0;t=n;u=c[n+8>>2]|0}else{t=o;u=r}c[(c[t+16>>2]|0)+(u<<2)>>2]=e;n=c[59128]|0;c[(c[n+20>>2]|0)+(c[n+8>>2]<<2)>>2]=g;n=c[59128]|0;a[(c[n+24>>2]|0)+(c[n+8>>2]|0)|0]=0;n=(c[59128]|0)+8|0;c[n>>2]=(c[n>>2]|0)+1}else if((k|0)==2){n=b-2|0;oA(n,d);m=b+2|0;i=d+2|0;f=c[59128]|0;s=c[f+8>>2]|0;do{if((s|0)>2){v=s-1|0;if((c[(c[f+16>>2]|0)+(v<<2)>>2]|0)!=(m|0)){l=14795;break}if((c[(c[f+20>>2]|0)+(v<<2)>>2]|0)!=(i|0)){l=14795;break}if((a[(c[f+24>>2]|0)+v|0]&1)!=0){l=14795;break}c[59102]=(c[59102]|0)+1;w=f}else{l=14795}}while(0);if((l|0)==14795){if((s|0)==(c[f+4>>2]|0)){tI();g=c[59128]|0;x=g;y=c[g+8>>2]|0}else{x=f;y=s}c[(c[x+16>>2]|0)+(y<<2)>>2]=m;g=c[59128]|0;c[(c[g+20>>2]|0)+(c[g+8>>2]<<2)>>2]=i;g=c[59128]|0;a[(c[g+24>>2]|0)+(c[g+8>>2]|0)|0]=0;g=(c[59128]|0)+8|0;c[g>>2]=(c[g>>2]|0)+1;w=c[59128]|0}g=d-2|0;e=c[w+8>>2]|0;do{if((e|0)>2){r=e-1|0;if((c[(c[w+16>>2]|0)+(r<<2)>>2]|0)!=(m|0)){l=14803;break}if((c[(c[w+20>>2]|0)+(r<<2)>>2]|0)!=(g|0)){l=14803;break}if((a[(c[w+24>>2]|0)+r|0]&1)!=0){l=14803;break}c[59102]=(c[59102]|0)+1;z=w}else{l=14803}}while(0);if((l|0)==14803){if((e|0)==(c[w+4>>2]|0)){tI();i=c[59128]|0;A=i;B=c[i+8>>2]|0}else{A=w;B=e}c[(c[A+16>>2]|0)+(B<<2)>>2]=m;i=c[59128]|0;c[(c[i+20>>2]|0)+(c[i+8>>2]<<2)>>2]=g;i=c[59128]|0;a[(c[i+24>>2]|0)+(c[i+8>>2]|0)|0]=0;i=(c[59128]|0)+8|0;c[i>>2]=(c[i>>2]|0)+1;z=c[59128]|0}i=c[z+8>>2]|0;do{if((i|0)>2){s=i-1|0;if((c[(c[z+16>>2]|0)+(s<<2)>>2]|0)!=(n|0)){break}if((c[(c[z+20>>2]|0)+(s<<2)>>2]|0)!=(d|0)){break}if((a[(c[z+24>>2]|0)+s|0]&1)!=0){break}c[59102]=(c[59102]|0)+1;break L19947}}while(0);if((i|0)==(c[z+4>>2]|0)){tI();g=c[59128]|0;C=g;D=c[g+8>>2]|0}else{C=z;D=i}c[(c[C+16>>2]|0)+(D<<2)>>2]=n;g=c[59128]|0;c[(c[g+20>>2]|0)+(c[g+8>>2]<<2)>>2]=d;g=c[59128]|0;a[(c[g+24>>2]|0)+(c[g+8>>2]|0)|0]=0;g=(c[59128]|0)+8|0;c[g>>2]=(c[g>>2]|0)+1}else if((k|0)==3){g=b+2|0;oA(g,d);m=b-2|0;e=d+2|0;s=c[59128]|0;f=c[s+8>>2]|0;do{if((f|0)>2){r=f-1|0;if((c[(c[s+16>>2]|0)+(r<<2)>>2]|0)!=(m|0)){l=14819;break}if((c[(c[s+20>>2]|0)+(r<<2)>>2]|0)!=(e|0)){l=14819;break}if((a[(c[s+24>>2]|0)+r|0]&1)!=0){l=14819;break}c[59102]=(c[59102]|0)+1;E=s}else{l=14819}}while(0);if((l|0)==14819){if((f|0)==(c[s+4>>2]|0)){tI();n=c[59128]|0;F=n;G=c[n+8>>2]|0}else{F=s;G=f}c[(c[F+16>>2]|0)+(G<<2)>>2]=m;n=c[59128]|0;c[(c[n+20>>2]|0)+(c[n+8>>2]<<2)>>2]=e;n=c[59128]|0;a[(c[n+24>>2]|0)+(c[n+8>>2]|0)|0]=0;n=(c[59128]|0)+8|0;c[n>>2]=(c[n>>2]|0)+1;E=c[59128]|0}n=d-2|0;i=c[E+8>>2]|0;do{if((i|0)>2){r=i-1|0;if((c[(c[E+16>>2]|0)+(r<<2)>>2]|0)!=(m|0)){l=14827;break}if((c[(c[E+20>>2]|0)+(r<<2)>>2]|0)!=(n|0)){l=14827;break}if((a[(c[E+24>>2]|0)+r|0]&1)!=0){l=14827;break}c[59102]=(c[59102]|0)+1;H=E}else{l=14827}}while(0);if((l|0)==14827){if((i|0)==(c[E+4>>2]|0)){tI();e=c[59128]|0;I=e;J=c[e+8>>2]|0}else{I=E;J=i}c[(c[I+16>>2]|0)+(J<<2)>>2]=m;e=c[59128]|0;c[(c[e+20>>2]|0)+(c[e+8>>2]<<2)>>2]=n;e=c[59128]|0;a[(c[e+24>>2]|0)+(c[e+8>>2]|0)|0]=0;e=(c[59128]|0)+8|0;c[e>>2]=(c[e>>2]|0)+1;H=c[59128]|0}e=c[H+8>>2]|0;do{if((e|0)>2){f=e-1|0;if((c[(c[H+16>>2]|0)+(f<<2)>>2]|0)!=(g|0)){break}if((c[(c[H+20>>2]|0)+(f<<2)>>2]|0)!=(d|0)){break}if((a[(c[H+24>>2]|0)+f|0]&1)!=0){break}c[59102]=(c[59102]|0)+1;break L19947}}while(0);if((e|0)==(c[H+4>>2]|0)){tI();n=c[59128]|0;K=n;L=c[n+8>>2]|0}else{K=H;L=e}c[(c[K+16>>2]|0)+(L<<2)>>2]=g;n=c[59128]|0;c[(c[n+20>>2]|0)+(c[n+8>>2]<<2)>>2]=d;n=c[59128]|0;a[(c[n+24>>2]|0)+(c[n+8>>2]|0)|0]=0;n=(c[59128]|0)+8|0;c[n>>2]=(c[n>>2]|0)+1}else if((k|0)==0){n=b-2|0;m=d-2|0;oA(n,m);i=d+2|0;f=c[59128]|0;s=c[f+8>>2]|0;do{if((s|0)>2){r=s-1|0;if((c[(c[f+16>>2]|0)+(r<<2)>>2]|0)!=(b|0)){l=14747;break}if((c[(c[f+20>>2]|0)+(r<<2)>>2]|0)!=(i|0)){l=14747;break}if((a[(c[f+24>>2]|0)+r|0]&1)!=0){l=14747;break}c[59102]=(c[59102]|0)+1;M=f}else{l=14747}}while(0);if((l|0)==14747){if((s|0)==(c[f+4>>2]|0)){tI();g=c[59128]|0;N=g;O=c[g+8>>2]|0}else{N=f;O=s}c[(c[N+16>>2]|0)+(O<<2)>>2]=b;g=c[59128]|0;c[(c[g+20>>2]|0)+(c[g+8>>2]<<2)>>2]=i;g=c[59128]|0;a[(c[g+24>>2]|0)+(c[g+8>>2]|0)|0]=0;g=(c[59128]|0)+8|0;c[g>>2]=(c[g>>2]|0)+1;M=c[59128]|0}g=b+2|0;e=c[M+8>>2]|0;do{if((e|0)>2){r=e-1|0;if((c[(c[M+16>>2]|0)+(r<<2)>>2]|0)!=(g|0)){l=14755;break}if((c[(c[M+20>>2]|0)+(r<<2)>>2]|0)!=(m|0)){l=14755;break}if((a[(c[M+24>>2]|0)+r|0]&1)!=0){l=14755;break}c[59102]=(c[59102]|0)+1;P=M}else{l=14755}}while(0);if((l|0)==14755){if((e|0)==(c[M+4>>2]|0)){tI();i=c[59128]|0;Q=i;R=c[i+8>>2]|0}else{Q=M;R=e}c[(c[Q+16>>2]|0)+(R<<2)>>2]=g;i=c[59128]|0;c[(c[i+20>>2]|0)+(c[i+8>>2]<<2)>>2]=m;i=c[59128]|0;a[(c[i+24>>2]|0)+(c[i+8>>2]|0)|0]=0;i=(c[59128]|0)+8|0;c[i>>2]=(c[i>>2]|0)+1;P=c[59128]|0}i=c[P+8>>2]|0;do{if((i|0)>2){s=i-1|0;if((c[(c[P+16>>2]|0)+(s<<2)>>2]|0)!=(n|0)){break}if((c[(c[P+20>>2]|0)+(s<<2)>>2]|0)!=(m|0)){break}if((a[(c[P+24>>2]|0)+s|0]&1)!=0){break}c[59102]=(c[59102]|0)+1;break L19947}}while(0);if((i|0)==(c[P+4>>2]|0)){tI();g=c[59128]|0;S=g;T=c[g+8>>2]|0}else{S=P;T=i}c[(c[S+16>>2]|0)+(T<<2)>>2]=n;g=c[59128]|0;c[(c[g+20>>2]|0)+(c[g+8>>2]<<2)>>2]=m;g=c[59128]|0;a[(c[g+24>>2]|0)+(c[g+8>>2]|0)|0]=0;g=(c[59128]|0)+8|0;c[g>>2]=(c[g>>2]|0)+1}else if((k|0)==5){oA(b,d+2|0);g=d-2|0;e=c[59128]|0;s=c[e+8>>2]|0;do{if((s|0)>2){f=s-1|0;if((c[(c[e+16>>2]|0)+(f<<2)>>2]|0)!=(b|0)){l=14875;break}if((c[(c[e+20>>2]|0)+(f<<2)>>2]|0)!=(g|0)){l=14875;break}if((a[(c[e+24>>2]|0)+f|0]&1)!=0){l=14875;break}c[59102]=(c[59102]|0)+1}else{l=14875}}while(0);if((l|0)==14875){if((s|0)==(c[e+4>>2]|0)){tI();m=c[59128]|0;U=m;V=c[m+8>>2]|0}else{U=e;V=s}c[(c[U+16>>2]|0)+(V<<2)>>2]=b;m=c[59128]|0;c[(c[m+20>>2]|0)+(c[m+8>>2]<<2)>>2]=g;m=c[59128]|0;a[(c[m+24>>2]|0)+(c[m+8>>2]|0)|0]=0;m=(c[59128]|0)+8|0;c[m>>2]=(c[m>>2]|0)+1}oA(b-2|0,d);m=b+2|0;n=c[59128]|0;i=c[n+8>>2]|0;do{if((i|0)>2){f=i-1|0;if((c[(c[n+16>>2]|0)+(f<<2)>>2]|0)!=(m|0)){break}if((c[(c[n+20>>2]|0)+(f<<2)>>2]|0)!=(d|0)){break}if((a[(c[n+24>>2]|0)+f|0]&1)!=0){break}c[59102]=(c[59102]|0)+1;break L19947}}while(0);if((i|0)==(c[n+4>>2]|0)){tI();g=c[59128]|0;W=g;X=c[g+8>>2]|0}else{W=n;X=i}c[(c[W+16>>2]|0)+(X<<2)>>2]=m;g=c[59128]|0;c[(c[g+20>>2]|0)+(c[g+8>>2]<<2)>>2]=d;g=c[59128]|0;a[(c[g+24>>2]|0)+(c[g+8>>2]|0)|0]=0;g=(c[59128]|0)+8|0;c[g>>2]=(c[g>>2]|0)+1}else if((k|0)==1){g=b-2|0;s=d+2|0;oA(g,s);e=d-2|0;f=c[59128]|0;r=c[f+8>>2]|0;do{if((r|0)>2){o=r-1|0;if((c[(c[f+16>>2]|0)+(o<<2)>>2]|0)!=(b|0)){l=14771;break}if((c[(c[f+20>>2]|0)+(o<<2)>>2]|0)!=(e|0)){l=14771;break}if((a[(c[f+24>>2]|0)+o|0]&1)!=0){l=14771;break}c[59102]=(c[59102]|0)+1;Y=f}else{l=14771}}while(0);if((l|0)==14771){if((r|0)==(c[f+4>>2]|0)){tI();m=c[59128]|0;Z=m;_=c[m+8>>2]|0}else{Z=f;_=r}c[(c[Z+16>>2]|0)+(_<<2)>>2]=b;m=c[59128]|0;c[(c[m+20>>2]|0)+(c[m+8>>2]<<2)>>2]=e;m=c[59128]|0;a[(c[m+24>>2]|0)+(c[m+8>>2]|0)|0]=0;m=(c[59128]|0)+8|0;c[m>>2]=(c[m>>2]|0)+1;Y=c[59128]|0}m=b+2|0;i=c[Y+8>>2]|0;do{if((i|0)>2){n=i-1|0;if((c[(c[Y+16>>2]|0)+(n<<2)>>2]|0)!=(m|0)){l=14779;break}if((c[(c[Y+20>>2]|0)+(n<<2)>>2]|0)!=(s|0)){l=14779;break}if((a[(c[Y+24>>2]|0)+n|0]&1)!=0){l=14779;break}c[59102]=(c[59102]|0)+1;$=Y}else{l=14779}}while(0);if((l|0)==14779){if((i|0)==(c[Y+4>>2]|0)){tI();e=c[59128]|0;aa=e;ab=c[e+8>>2]|0}else{aa=Y;ab=i}c[(c[aa+16>>2]|0)+(ab<<2)>>2]=m;e=c[59128]|0;c[(c[e+20>>2]|0)+(c[e+8>>2]<<2)>>2]=s;e=c[59128]|0;a[(c[e+24>>2]|0)+(c[e+8>>2]|0)|0]=0;e=(c[59128]|0)+8|0;c[e>>2]=(c[e>>2]|0)+1;$=c[59128]|0}e=c[$+8>>2]|0;do{if((e|0)>2){r=e-1|0;if((c[(c[$+16>>2]|0)+(r<<2)>>2]|0)!=(g|0)){break}if((c[(c[$+20>>2]|0)+(r<<2)>>2]|0)!=(s|0)){break}if((a[(c[$+24>>2]|0)+r|0]&1)!=0){break}c[59102]=(c[59102]|0)+1;break L19947}}while(0);if((e|0)==(c[$+4>>2]|0)){tI();m=c[59128]|0;ac=m;ad=c[m+8>>2]|0}else{ac=$;ad=e}c[(c[ac+16>>2]|0)+(ad<<2)>>2]=g;m=c[59128]|0;c[(c[m+20>>2]|0)+(c[m+8>>2]<<2)>>2]=s;m=c[59128]|0;a[(c[m+24>>2]|0)+(c[m+8>>2]|0)|0]=0;m=(c[59128]|0)+8|0;c[m>>2]=(c[m>>2]|0)+1}else if((k|0)==4){m=b-2|0;i=d-2|0;oA(m,i);r=d+2|0;f=c[59128]|0;n=c[f+8>>2]|0;do{if((n|0)>2){o=n-1|0;if((c[(c[f+16>>2]|0)+(o<<2)>>2]|0)!=(m|0)){l=14843;break}if((c[(c[f+20>>2]|0)+(o<<2)>>2]|0)!=(r|0)){l=14843;break}if((a[(c[f+24>>2]|0)+o|0]&1)!=0){l=14843;break}c[59102]=(c[59102]|0)+1;ae=f}else{l=14843}}while(0);if((l|0)==14843){if((n|0)==(c[f+4>>2]|0)){tI();s=c[59128]|0;af=s;ag=c[s+8>>2]|0}else{af=f;ag=n}c[(c[af+16>>2]|0)+(ag<<2)>>2]=m;s=c[59128]|0;c[(c[s+20>>2]|0)+(c[s+8>>2]<<2)>>2]=r;s=c[59128]|0;a[(c[s+24>>2]|0)+(c[s+8>>2]|0)|0]=0;s=(c[59128]|0)+8|0;c[s>>2]=(c[s>>2]|0)+1;ae=c[59128]|0}s=b+2|0;g=c[ae+8>>2]|0;do{if((g|0)>2){e=g-1|0;if((c[(c[ae+16>>2]|0)+(e<<2)>>2]|0)!=(s|0)){l=14851;break}if((c[(c[ae+20>>2]|0)+(e<<2)>>2]|0)!=(r|0)){l=14851;break}if((a[(c[ae+24>>2]|0)+e|0]&1)!=0){l=14851;break}c[59102]=(c[59102]|0)+1;ah=ae}else{l=14851}}while(0);if((l|0)==14851){if((g|0)==(c[ae+4>>2]|0)){tI();n=c[59128]|0;ai=n;aj=c[n+8>>2]|0}else{ai=ae;aj=g}c[(c[ai+16>>2]|0)+(aj<<2)>>2]=s;n=c[59128]|0;c[(c[n+20>>2]|0)+(c[n+8>>2]<<2)>>2]=r;n=c[59128]|0;a[(c[n+24>>2]|0)+(c[n+8>>2]|0)|0]=0;n=(c[59128]|0)+8|0;c[n>>2]=(c[n>>2]|0)+1;ah=c[59128]|0}n=c[ah+8>>2]|0;do{if((n|0)>2){f=n-1|0;if((c[(c[ah+16>>2]|0)+(f<<2)>>2]|0)!=(s|0)){l=14859;break}if((c[(c[ah+20>>2]|0)+(f<<2)>>2]|0)!=(i|0)){l=14859;break}if((a[(c[ah+24>>2]|0)+f|0]&1)!=0){l=14859;break}c[59102]=(c[59102]|0)+1;ak=ah}else{l=14859}}while(0);if((l|0)==14859){if((n|0)==(c[ah+4>>2]|0)){tI();r=c[59128]|0;al=r;am=c[r+8>>2]|0}else{al=ah;am=n}c[(c[al+16>>2]|0)+(am<<2)>>2]=s;r=c[59128]|0;c[(c[r+20>>2]|0)+(c[r+8>>2]<<2)>>2]=i;r=c[59128]|0;a[(c[r+24>>2]|0)+(c[r+8>>2]|0)|0]=0;r=(c[59128]|0)+8|0;c[r>>2]=(c[r>>2]|0)+1;ak=c[59128]|0}r=c[ak+8>>2]|0;do{if((r|0)>2){g=r-1|0;if((c[(c[ak+16>>2]|0)+(g<<2)>>2]|0)!=(m|0)){break}if((c[(c[ak+20>>2]|0)+(g<<2)>>2]|0)!=(i|0)){break}if((a[(c[ak+24>>2]|0)+g|0]&1)!=0){break}c[59102]=(c[59102]|0)+1;break L19947}}while(0);if((r|0)==(c[ak+4>>2]|0)){tI();s=c[59128]|0;an=s;ao=c[s+8>>2]|0}else{an=ak;ao=r}c[(c[an+16>>2]|0)+(ao<<2)>>2]=m;s=c[59128]|0;c[(c[s+20>>2]|0)+(c[s+8>>2]<<2)>>2]=i;s=c[59128]|0;a[(c[s+24>>2]|0)+(c[s+8>>2]|0)|0]=0;s=(c[59128]|0)+8|0;c[s>>2]=(c[s>>2]|0)+1}else{s=d-2|0;oA(b,s);n=b-2|0;g=c[59128]|0;f=c[g+8>>2]|0;do{if((f|0)>2){e=f-1|0;if((c[(c[g+16>>2]|0)+(e<<2)>>2]|0)!=(n|0)){l=14907;break}if((c[(c[g+20>>2]|0)+(e<<2)>>2]|0)!=(d|0)){l=14907;break}if((a[(c[g+24>>2]|0)+e|0]&1)!=0){l=14907;break}c[59102]=(c[59102]|0)+1;ap=g}else{l=14907}}while(0);if((l|0)==14907){if((f|0)==(c[g+4>>2]|0)){tI();i=c[59128]|0;aq=i;ar=c[i+8>>2]|0}else{aq=g;ar=f}c[(c[aq+16>>2]|0)+(ar<<2)>>2]=n;i=c[59128]|0;c[(c[i+20>>2]|0)+(c[i+8>>2]<<2)>>2]=d;i=c[59128]|0;a[(c[i+24>>2]|0)+(c[i+8>>2]|0)|0]=0;i=(c[59128]|0)+8|0;c[i>>2]=(c[i>>2]|0)+1;ap=c[59128]|0}i=d+2|0;m=c[ap+8>>2]|0;do{if((m|0)>2){r=m-1|0;if((c[(c[ap+16>>2]|0)+(r<<2)>>2]|0)!=(b|0)){l=14915;break}if((c[(c[ap+20>>2]|0)+(r<<2)>>2]|0)!=(i|0)){l=14915;break}if((a[(c[ap+24>>2]|0)+r|0]&1)!=0){l=14915;break}c[59102]=(c[59102]|0)+1;as=ap}else{l=14915}}while(0);if((l|0)==14915){if((m|0)==(c[ap+4>>2]|0)){tI();n=c[59128]|0;at=n;au=c[n+8>>2]|0}else{at=ap;au=m}c[(c[at+16>>2]|0)+(au<<2)>>2]=b;n=c[59128]|0;c[(c[n+20>>2]|0)+(c[n+8>>2]<<2)>>2]=i;n=c[59128]|0;a[(c[n+24>>2]|0)+(c[n+8>>2]|0)|0]=0;n=(c[59128]|0)+8|0;c[n>>2]=(c[n>>2]|0)+1;as=c[59128]|0}n=b+2|0;f=c[as+8>>2]|0;do{if((f|0)>2){g=f-1|0;if((c[(c[as+16>>2]|0)+(g<<2)>>2]|0)!=(n|0)){l=14923;break}if((c[(c[as+20>>2]|0)+(g<<2)>>2]|0)!=(d|0)){l=14923;break}if((a[(c[as+24>>2]|0)+g|0]&1)!=0){l=14923;break}c[59102]=(c[59102]|0)+1;av=as}else{l=14923}}while(0);if((l|0)==14923){if((f|0)==(c[as+4>>2]|0)){tI();i=c[59128]|0;aw=i;ax=c[i+8>>2]|0}else{aw=as;ax=f}c[(c[aw+16>>2]|0)+(ax<<2)>>2]=n;i=c[59128]|0;c[(c[i+20>>2]|0)+(c[i+8>>2]<<2)>>2]=d;i=c[59128]|0;a[(c[i+24>>2]|0)+(c[i+8>>2]|0)|0]=0;i=(c[59128]|0)+8|0;c[i>>2]=(c[i>>2]|0)+1;av=c[59128]|0}i=c[av+8>>2]|0;do{if((i|0)>2){m=i-1|0;if((c[(c[av+16>>2]|0)+(m<<2)>>2]|0)!=(b|0)){break}if((c[(c[av+20>>2]|0)+(m<<2)>>2]|0)!=(s|0)){break}if((a[(c[av+24>>2]|0)+m|0]&1)!=0){break}c[59102]=(c[59102]|0)+1;break L19947}}while(0);if((i|0)==(c[av+4>>2]|0)){tI();n=c[59128]|0;ay=n;az=c[n+8>>2]|0}else{ay=av;az=i}c[(c[ay+16>>2]|0)+(az<<2)>>2]=b;n=c[59128]|0;c[(c[n+20>>2]|0)+(c[n+8>>2]<<2)>>2]=s;n=c[59128]|0;a[(c[n+24>>2]|0)+(c[n+8>>2]|0)|0]=0;n=(c[59128]|0)+8|0;c[n>>2]=(c[n>>2]|0)+1}}while(0);if(!h){return}h=(j|0)<-2?-2:j;if((h|0)>8){aA=(h|0)%9&-1}else{aA=h}h=c[236448+(aA+2<<2)>>2]|0;if((h|0)==(c[59128]|0)){c[59106]=(c[59106]|0)+1;return}else{c[59128]=h;return}}function oF(){return}function oG(){return}function oH(){return}function oI(){return}function oJ(){aI(174776,14,1,c[10030]|0);return}function oK(){aI(174800,6,1,c[10030]|0);return}function oL(a,b){a=a|0;b=b|0;var d=0;d=i;cf(c[10030]|0,174824,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=b,v)|0);i=d;return}function oM(a,b){a=a|0;b=b|0;var d=0;d=i;cf(c[10030]|0,174848,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=b,v)|0);i=d;return}function oN(a){a=a|0;var b=0;b=i;cf(c[10030]|0,174880,(v=i,i=i+8|0,c[v>>2]=c[236584+(((a+2|0)%11&-1)<<2)>>2],v)|0);i=b;return}function oO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=i;cf(c[10030]|0,174824,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=b-5,v)|0);cf(c[10030]|0,174976,(v=i,i=i+8|0,c[v>>2]=d,v)|0);i=e;return}function oP(a){a=a|0;var b=0;b=i;cf(c[10030]|0,175008,(v=i,i=i+8|0,c[v>>2]=(a|0)!=0?2:1,v)|0);i=b;return 1}function oQ(){var b=0;b=c[10030]|0;if(a[235320]|0){aI(175320|0,13,1,b|0);c[58826]=1;return}else{aI(175360|0,10,1,b|0);c[58826]=1;return}}function oR(){var a=0,b=0,d=0;a=i;aI(175544,29,1,c[10030]|0);b=c[11252]|0;if((b|0)==6){d=175480}else{d=(b|0)==1?175480:179864}cf(c[10030]|0,175512,(v=i,i=i+40|0,c[v>>2]=d,c[v+8>>2]=1e4,c[v+16>>2]=7500,h[v+24>>3]=.2,h[v+32>>3]=.4,v)|0);c[58832]=0;i=a;return}function oS(a,b){a=a|0;b=b|0;var d=0;d=i;if((c[58822]|0)==(a|0)&(c[58820]|0)==(b|0)){i=d;return}cf(c[10030]|0,175584,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=b,v)|0);c[58826]=1;c[58822]=a;c[58820]=b;i=d;return}function oT(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;e=c[10030]|0;if((c[58826]|0)==0){cf(e|0,175600,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=b,v)|0);c[58822]=a;c[58820]=b;i=d;return}else{cf(e|0,175616,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=b,v)|0);c[58826]=0;c[58822]=a;c[58820]=b;i=d;return}}function oU(a){a=a|0;var b=0,d=0;b=i;d=((((a|0)<-2?0:a+2|0)|0)%(c[58828]|0)&-1)+1|0;if((c[58824]|0)==(d|0)){i=b;return}cf(c[10030]|0,175648,(v=i,i=i+8|0,c[v>>2]=d,v)|0);c[58824]=d;c[58826]=1;i=b;return}function oV(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;do{if((c[58832]|0)==1){g=b+15|0;if((c[58822]|0)==(g|0)&(c[58820]|0)==(d|0)){break}h=c[10030]|0;cf(h|0,175584,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=d,v)|0);c[58826]=1;c[58822]=g;c[58820]=d}else{g=d-15|0;if((c[58822]|0)==(b|0)&(c[58820]|0)==(g|0)){break}h=c[10030]|0;cf(h|0,175584,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=g,v)|0);c[58826]=1;c[58822]=b;c[58820]=g}}while(0);b=c[11252]|0;if((b|0)==6){d=c[10030]|0;aI(175688,2,1,d|0);d=a[e]|0;if(d<<24>>24!=0){g=e;h=d;do{d=h&255;do{if(h<<24>>24<0){j=38152+(d-128<<2)|0;if((a[j]|0)==0){k=14990;break}l=c[10030]|0;aK(j|0,l|0)}else{k=14990}}while(0);if((k|0)==14990){k=0;l=c[10030]|0;aF(d|0,l|0)}g=g+1|0;h=a[g]|0;}while(h<<24>>24!=0)}h=c[10030]|0;aI(175664,2,1,h|0);i=f;return}h=c[10030]|0;if((b|0)!=1){cf(h|0,177872,(v=i,i=i+8|0,c[v>>2]=e,v)|0);i=f;return}aI(175688,2,1,h|0);h=a[e]|0;if(h<<24>>24!=0){b=e;e=h;do{h=e&255;do{if(e<<24>>24<0){g=37640+(h-128<<2)|0;if((a[g]|0)==0){k=14998;break}l=c[10030]|0;aK(g|0,l|0)}else{k=14998}}while(0);if((k|0)==14998){k=0;d=c[10030]|0;aF(h|0,d|0)}b=b+1|0;e=a[b]|0;}while(e<<24>>24!=0)}aI(175664,2,1,c[10030]|0);i=f;return}function oW(a){a=a|0;var b=0;if((a|0)==(-90|0)|(a|0)==270){c[58832]=-1;b=c[10030]|0;aI(175768,8,1,b|0);return 1}b=(a|0)!=0;c[58832]=b&1;a=c[10030]|0;if(b){aI(175720,7,1,a|0);return 1}else{aI(175816,7,1,a|0);return 1}return 0}function oX(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;b=i;c[58828]=6;a[235320]=0;d=c[13898]|0;e=c[8272]|0;L20300:do{if((d|0)<(e|0)){f=d;g=6;j=e;L20301:while(1){k=c[1054]|0;l=(a[k+(f*40&-1)|0]&1)==0;L20303:do{if(l){m=15032}else{n=c[k+(f*40&-1)+36>>2]|0;o=k+(f*40&-1)+32|0;p=c[10036]|0;q=0;while(1){if((q|0)>=(n|0)){m=15020;break}if((a[p+((c[o>>2]|0)+q|0)|0]|0)==(a[q+103664|0]|0)){q=q+1|0}else{break}}if((m|0)==15020){m=0;if((q|0)==1){r=g;break L20300}}if(l){m=15032;break}if((n|0)<=0){m=15044;break L20301}p=c[10036]|0;s=0;t=0;u=c[o>>2]|0;while(1){if((a[s+175248|0]|0)==(a[p+(s+u|0)|0]|0)){w=u;x=t}else{if((s|0)!=3){break}w=u-1|0;x=1}y=s+1|0;if((y|0)<(x+n|0)){s=y;t=x;u=w}else{m=15028;break}}do{if((m|0)==15028){m=0;if((x|0)==0){if(!((s|0)==2|(s|0)==5)){break}}a[235320]=1;z=g;A=f;B=j;break L20303}}while(0);if(l){m=15032}else{m=15043;break L20301}}}while(0);if((m|0)==15032){m=0;l=c[k+(f*40&-1)+8>>2]|0;if((l|0)==1){C=+(c[k+(f*40&-1)+16>>2]|0)}else if((l|0)==3){C=+uz(c[k+(f*40&-1)+16>>2]|0,0)}else if((l|0)==2){C=+h[k+(f*40&-1)+16>>3]}else{m=15036;break}l=~~C;c[58828]=l;if((l|0)<1){m=15039;break}z=l;A=c[13898]|0;B=c[8272]|0}l=A+1|0;c[13898]=l;if((l|0)<(B|0)){f=l;g=z;j=B}else{r=z;break L20300}}if((m|0)==15036){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((m|0)==15043){uf(f,175176,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((m|0)==15039){c[58828]=6;uf(c[13898]|0,175216,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((m|0)==15044){uf(f,175176,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}else{r=6}}while(0);m=a[235320]|0?175144:175024;be(13048,175160,(v=i,i=i+16|0,c[v>>2]=r,c[v+8>>2]=m,v)|0);i=b;return}function oY(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0.0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0.0,at=0.0,au=0.0,av=0,aw=0,ax=0,ay=0,az=0;b=i;d=c[13898]|0;e=c[8272]|0;L20341:do{if((d|0)<(e|0)){f=c[1054]|0;g=(a[f+(d*40&-1)|0]&1)==0;if(g){j=d;break}k=c[f+(d*40&-1)+36>>2]|0;l=f+(d*40&-1)+32|0;m=c[10036]|0;n=0;while(1){if((n|0)>=(k|0)){o=15050;break}if((a[m+((c[l>>2]|0)+n|0)|0]|0)==(a[n+103664|0]|0)){n=n+1|0}else{break}}if((o|0)==15050){if((n|0)==1){j=d;break}}if(!((k|0)>0&(g^1))){j=d;break}m=c[10036]|0;p=0;q=0;r=c[l>>2]|0;while(1){if((a[p+176888|0]|0)==(a[m+(p+r|0)|0]|0)){s=r;t=q}else{if((p|0)!=1){j=d;break L20341}s=r-1|0;t=1}u=p+1|0;if((u|0)<(t+k|0)){p=u;q=t;r=s}else{break}}if((t|0)==0){if(!((p|0)==0|(p|0)==4)){j=d;break}}r=d+1|0;c[13898]=r;if((r|0)>=(e|0)){uf(r,176848,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}q=(a[f+(r*40&-1)|0]&1)==0;k=c[f+(r*40&-1)+36>>2]|0;L20364:do{if(q){w=c[10036]|0;x=f+(r*40&-1)+32|0}else{m=f+(r*40&-1)+32|0;l=c[10036]|0;g=0;while(1){if((g|0)>=(k|0)){break}if((a[l+((c[m>>2]|0)+g|0)|0]|0)==(a[g+103664|0]|0)){g=g+1|0}else{w=l;x=m;break L20364}}if((g|0)!=1){w=l;x=m;break}uf(r,176848,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);f=(k|0)>0;p=c[58058]|0;L20373:do{if((p|0)==0){o=15075}else{if(q){o=15075;break}if(f){n=0;u=0;y=c[x>>2]|0;while(1){z=a[p+n|0]|0;if(z<<24>>24==(a[w+(n+y|0)|0]|0)){A=y;B=u}else{if(z<<24>>24!=36){o=15075;break L20373}A=y-1|0;B=1}C=n+1|0;if((C|0)<(B+k|0)){n=C;u=B;y=A}else{break}}if((B|0)==0){D=C}else{E=0;break}}else{D=0}y=a[p+D|0]|0;if((y<<24>>24|0)==36|(y<<24>>24|0)==0){E=0}else{o=15075}}}while(0);L20385:do{if((o|0)==15075){p=c[58063]|0;if((p|0)==0){uf(r,176848,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(q){uf(r,176848,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}do{if(f){y=0;u=0;n=c[x>>2]|0;while(1){m=a[p+y|0]|0;if(m<<24>>24==(a[w+(y+n|0)|0]|0)){F=n;G=u}else{if(m<<24>>24!=36){o=15225;break}F=n-1|0;G=1}H=y+1|0;if((H|0)<(G+k|0)){y=H;u=G;n=F}else{o=15223;break}}if((o|0)==15225){uf(r,176848,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((o|0)==15223){if((G|0)==0){I=H;break}else{E=1;break L20385}}}else{I=0}}while(0);n=a[p+I|0]|0;if((n<<24>>24|0)==36|(n<<24>>24|0)==0){E=1;break}uf(r,176848,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);c[58068]=232232+(E*20&-1);r=d+2|0;c[13898]=r;j=r}else{j=d}}while(0);d=(j|0)<(e|0);L20407:do{if(d){e=c[1054]|0;E=(a[e+(j*40&-1)|0]&1)==0;L20409:do{if(!E){I=c[e+(j*40&-1)+36>>2]|0;H=e+(j*40&-1)+32|0;G=c[10036]|0;F=0;while(1){if((F|0)>=(I|0)){o=15084;break}if((a[G+((c[H>>2]|0)+F|0)|0]|0)==(a[F+103664|0]|0)){F=F+1|0}else{break}}if((o|0)==15084){if((F|0)==1){break}}if(!((I|0)>0&(E^1))){break}G=c[10036]|0;p=0;w=0;x=c[H>>2]|0;while(1){if((a[p+176824|0]|0)==(a[G+(p+x|0)|0]|0)){J=x;K=w}else{if((p|0)!=3){break L20409}J=x-1|0;K=1}D=p+1|0;if((D|0)<(K+I|0)){p=D;w=K;x=J}else{break}}if((K|0)==0){if(!((p|0)==2|(p|0)==8)){break}}c[(c[58068]|0)+12>>2]=52e3;c[(c[58068]|0)+16>>2]=33940;c[58070]=176808;c[13898]=(c[13898]|0)+1;break L20407}}while(0);if(!d){break}E=c[1054]|0;e=(a[E+(j*40&-1)|0]&1)==0;L20430:do{if(!e){x=c[E+(j*40&-1)+36>>2]|0;w=E+(j*40&-1)+32|0;I=c[10036]|0;G=0;while(1){if((G|0)>=(x|0)){o=15099;break}if((a[I+((c[w>>2]|0)+G|0)|0]|0)==(a[G+103664|0]|0)){G=G+1|0}else{break}}if((o|0)==15099){if((G|0)==1){break}}if(!((x|0)>0&(e^1))){break}I=c[10036]|0;p=0;H=0;F=c[w>>2]|0;while(1){if((a[p+176760|0]|0)==(a[I+(p+F|0)|0]|0)){L=F;M=H}else{if((p|0)!=5){break L20430}L=F-1|0;M=1}D=p+1|0;if((D|0)<(M+x|0)){p=D;H=M;F=L}else{break}}if((M|0)==0){if(!((p|0)==4|(p|0)==10)){break}}c[(c[58068]|0)+12>>2]=45333;c[(c[58068]|0)+16>>2]=33940;c[58070]=176704;c[13898]=(c[13898]|0)+1;break L20407}}while(0);if(!d){break}e=c[1054]|0;E=(a[e+(j*40&-1)|0]&1)==0;L20451:do{if(!E){F=c[e+(j*40&-1)+36>>2]|0;H=e+(j*40&-1)+32|0;x=c[10036]|0;I=0;while(1){if((I|0)>=(F|0)){o=15114;break}if((a[x+((c[H>>2]|0)+I|0)|0]|0)==(a[I+103664|0]|0)){I=I+1|0}else{break}}if((o|0)==15114){if((I|0)==1){break}}if(!((F|0)>0&(E^1))){break}x=c[10036]|0;p=0;w=0;G=c[H>>2]|0;while(1){if((a[p+176680|0]|0)==(a[x+(p+G|0)|0]|0)){N=G;O=w}else{if((p|0)!=3){break L20451}N=G-1|0;O=1}D=p+1|0;if((D|0)<(O+F|0)){p=D;w=O;G=N}else{break}}if((O|0)==0){if(!((p|0)==2|(p|0)==5)){break}}c[(c[58068]|0)+12>>2]=13e3;c[(c[58068]|0)+16>>2]=7440;c[58070]=176664;c[13898]=(c[13898]|0)+1;break L20407}}while(0);if(!d){break}E=c[1054]|0;e=(a[E+(j*40&-1)|0]&1)==0;if(e){break}G=c[E+(j*40&-1)+36>>2]|0;w=E+(j*40&-1)+32|0;E=c[10036]|0;F=0;while(1){if((F|0)>=(G|0)){o=15129;break}if((a[E+((c[w>>2]|0)+F|0)|0]|0)==(a[F+103664|0]|0)){F=F+1|0}else{break}}if((o|0)==15129){if((F|0)==1){break}}if(!((G|0)>0&(e^1))){break}E=c[10036]|0;x=0;H=0;I=c[w>>2]|0;while(1){if((a[x+176656|0]|0)==(a[E+(x+I|0)|0]|0)){P=I;Q=H}else{if((x|0)!=3){break L20407}P=I-1|0;Q=1}D=x+1|0;if((D|0)<(Q+G|0)){x=D;H=Q;I=P}else{break}}if((Q|0)==0){if(!((x|0)==2|(x|0)==6)){break}}c[(c[58068]|0)+12>>2]=1e4;c[(c[58068]|0)+16>>2]=7440;c[58070]=176648;c[13898]=(c[13898]|0)+1}}while(0);Q=c[58070]|0;be(13048,84616,(v=i,i=i+16|0,c[v>>2]=c[(c[58068]|0)+4>>2],c[v+8>>2]=Q,v)|0);Q=c[3524]|0;P=c[13898]|0;j=c[8272]|0;if((P|0)>=(j|0)){R=uA(13048)|0;S=R+13048|0;T=a[236376]|0;U=T?116408:116440;V=c[58868]|0;W=T?1:V;X=a[235336]|0;Y=X?131584:131504;Z=c[59090]|0;_=Z+4|0;$=c[_>>2]|0;aa=Z+12|0;ab=c[aa>>2]|0;ac=(ab|0)!=0;ad=ac?176184:176112;ae=Z+24|0;af=Z+16|0;ag=ac?ae:af;ah=+h[ag>>3];ai=a[28152]|0;aj=ai?176072:176024;ak=be(S|0,176232,(v=i,i=i+56|0,c[v>>2]=U,c[v+8>>2]=W,c[v+16>>2]=Y,c[v+24>>2]=$,c[v+32>>2]=ad,h[v+40>>3]=ah,c[v+48>>2]=aj,v)|0)|0;i=b;return}d=Q+16|0;O=Q+20|0;Q=P;P=j;L20494:while(1){j=c[1054]|0;N=(a[j+(Q*40&-1)|0]&1)==0;L20496:do{if(!N){M=c[j+(Q*40&-1)+36>>2]|0;L=j+(Q*40&-1)+32|0;K=c[10036]|0;J=0;while(1){if((J|0)>=(M|0)){break}if((a[K+((c[L>>2]|0)+J|0)|0]|0)==(a[J+103664|0]|0)){J=J+1|0}else{break L20496}}if((J|0)==1){o=15233;break L20494}}}while(0);x=c[58848]|0;L20503:do{if((x|0)==0){al=235392}else{L=c[j+(Q*40&-1)+36>>2]|0;K=c[j+(Q*40&-1)+32>>2]|0;M=(L|0)>0;p=c[10036]|0;I=235392;H=x;while(1){L20507:do{if(!N){if(M){G=0;E=0;w=K;while(1){e=a[H+G|0]|0;if(e<<24>>24==(a[p+(G+w|0)|0]|0)){am=w;an=E}else{if(e<<24>>24!=36){break L20507}am=w-1|0;an=1}ao=G+1|0;if((ao|0)<(an+L|0)){G=ao;E=an;w=am}else{break}}if((an|0)==0){ap=ao}else{al=I;break L20503}}else{ap=0}w=a[H+ap|0]|0;if((w<<24>>24|0)==36|(w<<24>>24|0)==0){al=I;break L20503}}}while(0);w=I+8|0;E=c[w>>2]|0;if((E|0)==0){al=w;break}else{I=w;H=E}}}}while(0);N=c[al+4>>2]|0;L20520:do{if((N|0)==2){a[235336]=0;x=Q+1|0;c[13898]=x;aq=x}else if((N|0)==5){ar=Q+1|0;c[13898]=ar;if((ar|0)>=(P|0)){o=15237;break L20494}L20524:do{if((a[j+(ar*40&-1)|0]&1)!=0){x=c[j+(ar*40&-1)+36>>2]|0;H=j+(ar*40&-1)+32|0;I=c[10036]|0;L=0;while(1){if((L|0)>=(x|0)){break}if((a[I+((c[H>>2]|0)+L|0)|0]|0)==(a[L+103664|0]|0)){L=L+1|0}else{break L20524}}if((L|0)==1){o=15236;break L20494}}}while(0);H=c[j+(ar*40&-1)+8>>2]|0;if((H|0)==2){as=+h[j+(ar*40&-1)+16>>3]}else if((H|0)==3){as=+uz(c[j+(ar*40&-1)+16>>2]|0,0)}else if((H|0)==1){as=+(c[j+(ar*40&-1)+16>>2]|0)}else{o=15205;break L20494}h[29422]=as;if(as<=0.0){o=15210;break L20494}h[29421]=as;H=~~(as*1016.0/72.0);c[d>>2]=H;c[O>>2]=(H<<1>>>0)/3>>>0;H=c[59090]|0;at=+h[29422];if((c[H+12>>2]|0)==0){h[H+16>>3]=216.0/(at*2.0)}else{h[H+24>>3]=at}H=(c[13898]|0)+1|0;c[13898]=H;aq=H}else if((N|0)==0){a[236376]=1;H=Q+1|0;c[13898]=H;aq=H}else if((N|0)==1){a[236376]=0;H=Q+1|0;c[13898]=H;if((H|0)>=(P|0)){aq=H;break}if((a[j+(H*40&-1)|0]&1)!=0){I=c[j+(H*40&-1)+36>>2]|0;x=j+(H*40&-1)+32|0;p=c[10036]|0;K=0;while(1){if((K|0)>=(I|0)){aq=H;break L20520}if((a[p+((c[x>>2]|0)+K|0)|0]|0)==(a[K+103664|0]|0)){K=K+1|0}else{aq=H;break L20520}}}K=c[j+(H*40&-1)+8>>2]|0;if((K|0)==2){au=+h[j+(H*40&-1)+16>>3]}else if((K|0)==1){au=+(c[j+(H*40&-1)+16>>2]|0)}else if((K|0)==3){au=+uz(c[j+(H*40&-1)+16>>2]|0,0)}else{o=15169;break L20494}K=~~au;c[58868]=K;if((K|0)<1){o=15171;break L20494}K=(c[13898]|0)+1|0;c[13898]=K;aq=K}else if((N|0)==7){K=Q+1|0;c[13898]=K;a[28152]=1;aq=K}else if((N|0)==8){K=Q+1|0;c[13898]=K;aq=K}else if((N|0)==3){a[235336]=1;K=Q+1|0;c[13898]=K;aq=K}else if((N|0)==4){av=Q+1|0;c[13898]=av;if((av|0)>=(P|0)){o=15232;break L20494}K=(a[j+(av*40&-1)|0]&1)==0;x=c[j+(av*40&-1)+36>>2]|0;p=j+(av*40&-1)+32|0;L20561:do{if(!K){I=c[10036]|0;M=0;while(1){if((M|0)>=(x|0)){break}if((a[I+((c[p>>2]|0)+M|0)|0]|0)==(a[M+103664|0]|0)){M=M+1|0}else{break L20561}}if((M|0)==1){o=15231;break L20494}}}while(0);H=(x|0)>0;I=c[10036]|0;L=0;L20568:while(1){J=c[235528+(L*48&-1)>>2]|0;L20570:do{if(!((J|0)==0|K)){if(H){E=0;w=0;G=c[p>>2]|0;while(1){e=a[J+E|0]|0;if(e<<24>>24==(a[I+(E+G|0)|0]|0)){aw=G;ax=w}else{if(e<<24>>24!=36){break L20570}aw=G-1|0;ax=1}ay=E+1|0;if((ay|0)<(ax+x|0)){E=ay;w=ax;G=aw}else{break}}if((ax|0)==0){az=ay}else{break L20568}}else{az=0}G=a[J+az|0]|0;if((G<<24>>24|0)==36|(G<<24>>24|0)==0){break L20568}}}while(0);J=L+1|0;if(J>>>0<17){L=J}else{o=15193;break L20494}}c[59090]=235528+(L*48&-1);c[59088]=L;c[59086]=L;x=Q+2|0;c[13898]=x;aq=x}else if((N|0)==6){x=Q+1|0;c[13898]=x;a[28152]=0;aq=x}else{aq=Q}}while(0);N=c[8272]|0;if((aq|0)<(N|0)){Q=aq;P=N}else{o=15235;break}}if((o|0)==15231){uf(av,176384,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((o|0)==15232){uf(av,176384,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((o|0)==15233){R=uA(13048)|0;S=R+13048|0;T=a[236376]|0;U=T?116408:116440;V=c[58868]|0;W=T?1:V;X=a[235336]|0;Y=X?131584:131504;Z=c[59090]|0;_=Z+4|0;$=c[_>>2]|0;aa=Z+12|0;ab=c[aa>>2]|0;ac=(ab|0)!=0;ad=ac?176184:176112;ae=Z+24|0;af=Z+16|0;ag=ac?ae:af;ah=+h[ag>>3];ai=a[28152]|0;aj=ai?176072:176024;ak=be(S|0,176232,(v=i,i=i+56|0,c[v>>2]=U,c[v+8>>2]=W,c[v+16>>2]=Y,c[v+24>>2]=$,c[v+32>>2]=ad,h[v+40>>3]=ah,c[v+48>>2]=aj,v)|0)|0;i=b;return}else if((o|0)==15193){uf(av,176384,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((o|0)==15235){R=uA(13048)|0;S=R+13048|0;T=a[236376]|0;U=T?116408:116440;V=c[58868]|0;W=T?1:V;X=a[235336]|0;Y=X?131584:131504;Z=c[59090]|0;_=Z+4|0;$=c[_>>2]|0;aa=Z+12|0;ab=c[aa>>2]|0;ac=(ab|0)!=0;ad=ac?176184:176112;ae=Z+24|0;af=Z+16|0;ag=ac?ae:af;ah=+h[ag>>3];ai=a[28152]|0;aj=ai?176072:176024;ak=be(S|0,176232,(v=i,i=i+56|0,c[v>>2]=U,c[v+8>>2]=W,c[v+16>>2]=Y,c[v+24>>2]=$,c[v+32>>2]=ad,h[v+40>>3]=ah,c[v+48>>2]=aj,v)|0)|0;i=b;return}else if((o|0)==15205){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((o|0)==15171){c[58868]=6;uf(c[13898]|0,176608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((o|0)==15210){uf(c[13898]|0,176336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((o|0)==15169){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((o|0)==15236){uf(ar,176336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((o|0)==15237){uf(ar,176336,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function oZ(){var a=0,b=0;a=i;b=c[3524]|0;cf(c[10030]|0,176968,(v=i,i=i+8|0,c[v>>2]=c[(c[58068]|0)+8>>2],v)|0);c[b+8>>2]=c[(c[58068]|0)+12>>2];c[b+12>>2]=c[(c[58068]|0)+16>>2];aI(177432,4,1,c[10030]|0);i=a;return}function o_(){aI(177008,7,1,c[10030]|0);return}function o$(){var b=0;if(a[235520]|0){b=c[10030]|0;aI(125976,2,1,b|0);a[235520]=0}aI(177024,10,1,c[10030]|0);return}function o0(){var b=0,d=0,e=0,f=0.0,g=0;b=i;aI(177432,4,1,c[10030]|0);d=c[59090]|0;e=c[d+12>>2]|0;cf(c[10030]|0,177408,(v=i,i=i+16|0,c[v>>2]=c[d+8>>2],c[v+8>>2]=e,v)|0);e=c[59090]|0;d=c[10030]|0;if((c[e+12>>2]|0)==0){f=+h[e+16>>3];cf(d|0,180656,(v=i,i=i+8|0,h[v>>3]=f,v)|0)}else{f=+h[e+24>>3];cf(d|0,180672,(v=i,i=i+8|0,h[v>>3]=f,v)|0)}d=c[59090]|0;e=c[d+36>>2]|0;g=c[d+40>>2]|0;cf(c[10030]|0,180632,(v=i,i=i+24|0,c[v>>2]=c[d+32>>2],c[v+8>>2]=e,c[v+16>>2]=g,v)|0);if(!(a[235336]|0)){c[58832]=0;a[235520]=0;a[235512]=1;c[58826]=1;i=b;return}aI(177112,255,1,c[10030]|0);c[58832]=0;a[235520]=0;a[235512]=1;c[58826]=1;i=b;return}function o1(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;if(a[235520]|0){e=b-(c[58822]|0)|0;f=d-(c[58820]|0)|0;g=c[10030]|0;aF(60,g|0);h=f;i=e}else{e=c[10030]|0;aI(177464,3,1,e|0);if(a[235512]|0){a[235512]=0;e=c[10030]|0;aF(61,e|0);j=d;k=b}else{j=d-(c[58820]|0)|0;k=b-(c[58822]|0)|0}a[235520]=1;h=j;i=k}k=i<<1;i=(k|0)<0?1-k|0:k;k=i&63;j=i>>6;if((j|0)>0){i=k;e=j;while(1){aF(i+63|0,c[10030]|0);j=e&63;f=e>>6;if((f|0)>0){i=j;e=f}else{l=j;break}}}else{l=k}aF((l<<24)-1090519040>>24|0,c[10030]|0);l=h<<1;h=(l|0)<0?1-l|0:l;l=h&63;k=h>>6;if((k|0)>0){m=l;n=k}else{o=l;p=o<<24;q=p-1090519040|0;r=q>>24;s=c[10030]|0;t=aF(r|0,s|0)|0;u=c[10030]|0;v=aF(10,u|0)|0;c[58822]=b;c[58820]=d;return}while(1){aF(m+63|0,c[10030]|0);l=n&63;k=n>>6;if((k|0)>0){m=l;n=k}else{o=l;break}}p=o<<24;q=p-1090519040|0;r=q>>24;s=c[10030]|0;t=aF(r|0,s|0)|0;u=c[10030]|0;v=aF(10,u|0)|0;c[58822]=b;c[58820]=d;return}function o2(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;if(a[235520]|0){e=d-(c[58820]|0)|0;f=b-(c[58822]|0)|0}else{g=c[10030]|0;aI(177472,2,1,g|0);if(a[235512]|0){a[235512]=0;g=c[10030]|0;aF(61,g|0);h=d;i=b}else{h=d-(c[58820]|0)|0;i=b-(c[58822]|0)|0}a[235520]=1;e=h;f=i}i=f<<1;f=(i|0)<0?1-i|0:i;i=f&63;h=f>>6;if((h|0)>0){f=i;g=h;while(1){aF(f+63|0,c[10030]|0);h=g&63;j=g>>6;if((j|0)>0){f=h;g=j}else{k=h;break}}}else{k=i}aF((k<<24)-1090519040>>24|0,c[10030]|0);k=e<<1;e=(k|0)<0?1-k|0:k;k=e&63;i=e>>6;if((i|0)>0){l=k;m=i}else{n=k;o=n<<24;p=o-1090519040|0;q=p>>24;r=c[10030]|0;s=aF(q|0,r|0)|0;t=c[10030]|0;u=aF(10,t|0)|0;c[58822]=b;c[58820]=d;return}while(1){aF(l+63|0,c[10030]|0);k=m&63;i=m>>6;if((i|0)>0){l=k;m=i}else{n=k;break}}o=n<<24;p=o-1090519040|0;q=p>>24;r=c[10030]|0;s=aF(q|0,r|0)|0;t=c[10030]|0;u=aF(10,t|0)|0;c[58822]=b;c[58820]=d;return}function o3(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;d=i;if(a[235520]|0){e=c[10030]|0;aI(125976,2,1,e|0);a[235520]=0}e=(b|0)>-1;if(a[236376]|0){if(e){if(a[235336]|0){c[59092]=(b&7)+1}f=(b>>>0)%24>>>0}else{f=b}if((f|0)==(c[58846]|0)){i=d;return}do{if((f|0)>-1){g=c[10030]|0;h=c[235344+(f>>>3<<2)>>2]|0;if(a[235336]|0){j=c[59092]|0;k=c[235480+((f&7)<<2)>>2]|0;cf(g|0,177704,(v=i,i=i+24|0,c[v>>2]=h,c[v+8>>2]=j,c[v+16>>2]=k,v)|0);break}else{cf(g|0,177696,(v=i,i=i+8|0,c[v>>2]=h,v)|0);break}}else{if((f|0)==(-2|0)){h=c[10030]|0;aI(177680,6,1,h|0);break}else if((f|0)==(-1|0)){aI(177664,11,1,c[10030]|0);break}else{break}}}while(0);c[58846]=f;i=d;return}else{if(e){if(a[235336]|0){c[59092]=(b&7)+1}l=((b+2|0)%(c[58868]|0)&-1)+1|0}else{l=b}if((l|0)==(c[58846]|0)){i=d;return}do{if((l|0)>-1){b=c[10030]|0;if(a[235336]|0){e=c[59092]|0;cf(b|0,177848,(v=i,i=i+16|0,c[v>>2]=l,c[v+8>>2]=e,v)|0);break}else{cf(b|0,177768,(v=i,i=i+8|0,c[v>>2]=l,v)|0);break}}else{if((l|0)==(-2|0)){b=c[10030]|0;aI(177744,15,1,b|0);break}else if((l|0)==(-1|0)){aI(177720,20,1,c[10030]|0);break}else{break}}}while(0);c[58826]=1;c[58846]=l;i=d;return}}function o4(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;g=(c[(c[3524]|0)+16>>2]|0)>>>2;if((c[58832]|0)==1){o1(g+b|0,d)}else{o1(b,d-g|0)}if(a[235520]|0){g=c[10030]|0;aI(125976,2,1,g|0);a[235520]=0}cf(c[10030]|0,177872,(v=i,i=i+8|0,c[v>>2]=e,v)|0);a[235512]=1;i=f;return}function o5(b){b=b|0;var d=0,e=0;if((b|0)==(-90|0)|(b|0)==270){d=-1}else{d=(b|0)!=0&1}c[58832]=d;if(a[235520]|0){b=c[10030]|0;aF(59,b|0);a[235520]=0;e=c[58832]|0}else{e=d}if((e|0)==1){d=c[10030]|0;aI(177968,5,1,d|0);return 1}d=c[10030]|0;if((e|0)==-1){aI(177960,6,1,d|0);return 1}else{aI(177912,5,1,d|0);return 1}return 0}function o6(b){b=b|0;var d=0,e=0;if(a[235520]|0){d=c[10030]|0;aI(125976,2,1,d|0);a[235520]=0}if((b|0)==2){d=c[10030]|0;aI(177984,3,1,d|0);e=1;return e|0}else if((b|0)==1){aI(177992,3,1,c[10030]|0);e=1;return e|0}else if((b|0)==0){aI(178e3,3,1,c[10030]|0);e=1;return e|0}else{e=0;return e|0}return 0}function o7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;f=i;g=(e|0)<0;if(!(a[28152]|0)){if(g){tH(b,d,e);i=f;return}j=~~(+h[29420]*106.0*.5);k=(e|0)%6&-1;if((k|0)==4){l=(j<<2|0)/3&-1;m=l+d|0;o1(b,m);n=d-((j<<1|0)/3&-1)|0;o2(b-l|0,n);o2(l+b|0,n);o2(b,m);o1(b,d);o2(b,d);i=f;return}else if((k|0)==5){m=b-j|0;o1(m,d);o2(m,d);n=j+b|0;o2(n,d);l=d-j|0;o1(b,l);o2(b,l);o=j+d|0;o2(b,o);o1(m,l);o2(m,l);o2(n,o);o1(m,o);o2(m,o);o2(n,l);i=f;return}else if((k|0)==2){l=b-j|0;n=d-j|0;o1(l,n);o2(l,n);o=j+b|0;o2(o,n);m=j+d|0;o2(o,m);o2(l,m);o2(l,n);o1(b,d);o2(b,d);i=f;return}else if((k|0)==3){n=b-j|0;l=d-j|0;o1(n,l);o2(n,l);m=j+b|0;o=j+d|0;o2(m,o);o1(n,o);o2(n,o);o2(m,l);i=f;return}else if((k|0)==0){l=b-j|0;o1(l,d);o2(b,d-j|0);o2(j+b|0,d);o2(b,j+d|0);o2(l,d);o1(b,d);o2(b,d);i=f;return}else if((k|0)==1){k=b-j|0;o1(k,d);o2(k,d);o2(j+b|0,d);k=d-j|0;o1(b,k);o2(b,k);o2(b,j+d|0);i=f;return}else{i=f;return}}if(g){tH(b,d,e);i=f;return}g=~~(+h[29420]*106.0*.5);j=(e|0)%75&-1;if((j|0)==52){e=(g|0)/2&-1;k=b-e|0;l=e+d|0;o1(k,l);o2(b-g|0,d);m=d-e|0;o2(k,m);o=c[10030]|0;aI(125976,2,1,o|0);a[235520]=0;o=c[10030]|0;aI(179152,5,1,o|0);o2(b,d);o=e+b|0;o2(o,m);o2(b,d-g|0);o2(k,m);e=c[10030]|0;aI(125976,2,1,e|0);a[235520]=0;e=c[10030]|0;aI(179120,11,1,e|0);o1(o,m);o2(g+b|0,d);o2(o,l);m=c[10030]|0;aI(125976,2,1,m|0);a[235520]=0;m=c[10030]|0;aI(179152,5,1,m|0);o2(b,g+d|0);o2(k,l);o2(b,d);o2(o,l);l=c[10030]|0;aI(125976,2,1,l|0);a[235520]=0;l=c[10030]|0;aI(179120,11,1,l|0);i=f;return}else if((j|0)==13){l=((g*3&-1|0)/4&-1)+d|0;o1(b,l);p=+(b>>>0>>>0);q=+(g|0);r=q*2.8531695488854605*.25;s=+(d>>>0>>>0);o=~~(s+q*.9270509831248421*.25);o2(~~(p-r),o);t=q*1.7633557568774194*.25;k=~~(s-q*2.4270509831248424*.25);o2(~~(p-t),k);o2(~~(p+t),k);o2(~~(p+r),o);o2(b,l);o1(b,d);o2(b,d);i=f;return}else if((j|0)==38){l=d-g|0;o1(b,l);o=g+b|0;o2(o,l);o2(o,d);o1(b-g|0,l);aI(125976,2,1,c[10030]|0);a[235520]=0;l=g+d|0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=l,v)|0);o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=o,c[v+8>>2]=l,v)|0);i=f;return}else if((j|0)==14){l=((g*3&-1|0)/4&-1)+d|0;o1(b,l);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);r=+(b>>>0>>>0);p=+(g|0);t=p*2.8531695488854605*.25;q=+(d>>>0>>>0);o=~~(q+p*.9270509831248421*.25);o2(~~(r-t),o);s=p*1.7633557568774194*.25;k=~~(q-p*2.4270509831248424*.25);o2(~~(r-s),k);o2(~~(r+s),k);o2(~~(r+t),o);o2(b,l);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179120,11,1,c[10030]|0);i=f;return}else if((j|0)==68){l=((g*3&-1|0)/4&-1)+d|0;o1(b,l);t=+(b>>>0>>>0);r=+(g|0);s=r*2.8531695488854605*.25;p=+(d>>>0>>>0);o=~~(p+r*.9270509831248421*.25);o2(~~(t-s),o);q=r*1.7633557568774194*.25;k=~~(p-r*2.4270509831248424*.25);o2(~~(t-q),k);o2(~~(t+q),k);o2(~~(t+s),o);o2(b,l);i=f;return}else if((j|0)==33){l=b-g|0;o1(l,d);o=d-g|0;o2(l,o);k=g+b|0;o2(k,o);o=g+d|0;o2(k,o);o2(b,o);o1(l,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=o,v)|0);i=f;return}else if((j|0)==46){o1(b-g|0,d-g|0);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=g+b,c[v+8>>2]=g+d,v)|0);i=f;return}else if((j|0)==22){o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178624,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=g,v)|0);i=f;return}else if((j|0)==34){o=b-g|0;o1(o,d);l=d-g|0;o2(o,l);k=g+b|0;o2(k,l);o2(k,d);o1(o,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=k,c[v+8>>2]=g+d,v)|0);i=f;return}else if((j|0)==37){k=d-g|0;o1(b,k);o=g+b|0;o2(o,k);l=g+d|0;o2(o,l);o2(b,l);o1(b-g|0,k);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=l,v)|0);i=f;return}else if((j|0)==3){l=(g*3&-1|0)/4&-1;k=b-l|0;o=d-l|0;o1(k,o);m=l+b|0;o2(m,o);e=l+d|0;o2(m,e);o2(k,e);o2(k,o);o1(b,d);o2(b,d);i=f;return}else if((j|0)==5){o1(b,d);o2(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,179248,(v=i,i=i+8|0,h[v>>3]=+(g|0)*3.0*.25,v)|0);i=f;return}else if((j|0)==10){o=g*3&-1;k=d-((o|0)/4&-1)|0;o1(b,k);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);s=+(b>>>0>>>0);t=+(g|0)*5.196152422706632*.125;e=((o|0)/8&-1)+d|0;o2(~~(s-t),e);o2(~~(s+t),e);o2(b,k);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179120,11,1,c[10030]|0);i=f;return}else if((j|0)==58){k=(g|0)/2&-1;e=b-k|0;o=d-k|0;o1(e,o);o2(b,d-g|0);m=k+b|0;o2(m,o);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);o2(b,d);o2(e,o);o2(b-g|0,d);o2(b,g+d|0);o2(g+b|0,d);o2(m,o);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179120,11,1,c[10030]|0);i=f;return}else if((j|0)==51){o=(g|0)/2&-1;m=o+b|0;e=d-o|0;o1(m,e);o2(g+b|0,d);o2(b,g+d|0);o2(b-g|0,d);k=b-o|0;o2(k,e);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);o2(b,d);o2(m,e);o2(b,d-g|0);o2(k,e);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179120,11,1,c[10030]|0);i=f;return}else if((j|0)==36){e=d-g|0;o1(b,e);k=g+b|0;o2(k,e);o2(k,d);m=g+d|0;o1(b,m);o=b-g|0;o2(o,m);o2(o,d);o1(o,e);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=d,v)|0);o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=k,c[v+8>>2]=m,v)|0);i=f;return}else if((j|0)==42){m=b-g|0;o1(m,d);k=d-g|0;o2(m,k);o2(b,k);aI(125976,2,1,c[10030]|0);a[235520]=0;k=g+d|0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=g+b,c[v+8>>2]=k,v)|0);o1(m,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=k,v)|0);i=f;return}else if((j|0)==67){k=(g*3&-1|0)/4&-1;m=b-k|0;o1(m,d);o2(b,d-k|0);o2(k+b|0,d);o2(b,k+d|0);o2(m,d);i=f;return}else if((j|0)==71){m=g*3&-1;k=((m|0)/4&-1)+d|0;o1(b,k);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);t=+(b>>>0>>>0);s=+(g|0)*5.196152422706632*.125;e=d-((m|0)/8&-1)|0;o2(~~(t-s),e);o2(~~(t+s),e);o2(b,k);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(178056,22,1,c[10030]|0);i=f;return}else if((j|0)==63){k=(g*3&-1|0)/4&-1;e=b-k|0;m=d-k|0;o1(e,m);o=k+b|0;o2(o,m);l=k+d|0;o2(o,l);o2(e,l);o2(e,m);i=f;return}else if((j|0)==27){o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178328,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=g,v)|0);i=f;return}else if((j|0)==15){o1(b,g+d|0);o2(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,179104,(v=i,i=i+8|0,c[v>>2]=g,v)|0);i=f;return}else if((j|0)==60){m=(g|0)/2&-1;e=b-m|0;l=m+d|0;o1(e,l);o2(b-g|0,d);o=d-m|0;o2(e,o);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);o2(b,d-g|0);o2(g+b|0,d);o2(b,g+d|0);o2(e,l);o2(b,d);o2(e,o);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179120,11,1,c[10030]|0);i=f;return}else if((j|0)==29){o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178264,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=g,v)|0);i=f;return}else if((j|0)==69){o1(b-g|0,d-g|0);aI(125976,2,1,c[10030]|0);a[235520]=0;o=(g*3&-1|0)/4&-1;cf(c[10030]|0,178192,(v=i,i=i+16|0,c[v>>2]=o+b,c[v+8>>2]=o+d,v)|0);i=f;return}else if((j|0)==59){o=(g|0)/2&-1;e=o+b|0;l=o+d|0;o1(e,l);o2(b,g+d|0);o2(b-g|0,d);m=b-o|0;k=d-o|0;o2(m,k);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);o2(e,l);o2(g+b|0,d);o2(b,d-g|0);o2(m,k);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179120,11,1,c[10030]|0);i=f;return}else if((j|0)==31){k=b-g|0;m=d-g|0;o1(k,m);l=g+b|0;o2(l,m);e=g+d|0;o2(l,e);o2(k,e);o2(k,m);o1(b,e);o2(b,d);i=f;return}else if((j|0)==0){e=b-g|0;o1(e,d);o2(e,d);o2(g+b|0,d);e=d-g|0;o1(b,e);o2(b,e);o2(b,g+d|0);i=f;return}else if((j|0)==9){e=g*3&-1;m=d-((e|0)/4&-1)|0;o1(b,m);s=+(b>>>0>>>0);t=+(g|0)*5.196152422706632*.125;k=((e|0)/8&-1)+d|0;o2(~~(s-t),k);o2(~~(s+t),k);o2(b,m);o1(b,d);o2(b,d);i=f;return}else if((j|0)==61){m=(g|0)/2&-1;k=m+b|0;e=m+d|0;o1(k,e);o2(b,g+d|0);l=b-m|0;o2(l,e);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);o2(b-g|0,d);o2(b,d-g|0);o2(g+b|0,d);o2(k,e);o2(b,d);o2(l,e);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179120,11,1,c[10030]|0);i=f;return}else if((j|0)==48){e=(g|0)/2&-1;l=b-e|0;k=e+d|0;o1(l,k);o2(b-g|0,d);o2(b,d-g|0);o2(g+b|0,d);m=e+b|0;o2(m,k);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);o2(b,g+d|0);o2(l,k);o2(b,d);o2(m,k);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179120,11,1,c[10030]|0);i=f;return}else if((j|0)==16){o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,179008,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=g,v)|0);i=f;return}else if((j|0)==1){k=b-g|0;m=d-g|0;o1(k,m);o2(k,m);l=g+b|0;e=g+d|0;o2(l,e);o1(k,e);o2(k,e);o2(l,m);i=f;return}else if((j|0)==55){m=(g|0)/2&-1;l=m+b|0;e=m+d|0;o1(l,e);o2(b,g+d|0);o2(b-g|0,d);o2(b,d-g|0);k=d-m|0;o2(l,k);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);o2(b,d);o2(l,e);o2(g+b|0,d);o2(l,k);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179120,11,1,c[10030]|0);i=f;return}else if((j|0)==7){k=g*3&-1;l=((k|0)/4&-1)+d|0;o1(b,l);t=+(b>>>0>>>0);s=+(g|0)*5.196152422706632*.125;e=d-((k|0)/8&-1)|0;o2(~~(t-s),e);o2(~~(t+s),e);o2(b,l);o1(b,d);o2(b,d);i=f;return}else if((j|0)==39){l=g+b|0;o1(l,d);e=g+d|0;o2(l,e);k=b-g|0;o2(k,e);e=d-g|0;o2(k,e);o2(b,e);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=l,c[v+8>>2]=d,v)|0);i=f;return}else if((j|0)==28){o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178296,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=g,v)|0);i=f;return}else if((j|0)==20){o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178752,(v=i,i=i+32|0,c[v>>2]=g,c[v+8>>2]=g,c[v+16>>2]=g,c[v+24>>2]=g,v)|0);i=f;return}else if((j|0)==64){o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,179248,(v=i,i=i+8|0,h[v>>3]=+(g|0)*3.0*.25,v)|0);i=f;return}else if((j|0)==65){l=g*3&-1;e=((l|0)/4&-1)+d|0;o1(b,e);s=+(b>>>0>>>0);t=+(g|0)*5.196152422706632*.125;k=d-((l|0)/8&-1)|0;o2(~~(s-t),k);o2(~~(s+t),k);o2(b,e);i=f;return}else if((j|0)==66){e=g*3&-1;k=d-((e|0)/4&-1)|0;o1(b,k);t=+(b>>>0>>>0);s=+(g|0)*5.196152422706632*.125;l=((e|0)/8&-1)+d|0;o2(~~(t-s),l);o2(~~(t+s),l);o2(b,k);i=f;return}else if((j|0)==62){k=b-g|0;o1(k,d);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);o2(b,d-g|0);o2(g+b|0,d);o2(b,g+d|0);o2(k,d);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179120,11,1,c[10030]|0);i=f;return}else if((j|0)==8){k=g*3&-1;l=((k|0)/4&-1)+d|0;o1(b,l);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);s=+(b>>>0>>>0);t=+(g|0)*5.196152422706632*.125;e=d-((k|0)/8&-1)|0;o2(~~(s-t),e);o2(~~(s+t),e);o2(b,l);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179120,11,1,c[10030]|0);i=f;return}else if((j|0)==11){l=(g*3&-1|0)/4&-1;e=b-l|0;o1(e,d);o2(b,d-l|0);o2(l+b|0,d);o2(b,l+d|0);o2(e,d);o1(b,d);o2(b,d);i=f;return}else if((j|0)==70){o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178096,(v=i,i=i+8|0,h[v>>3]=+(g|0)*3.0*.25,v)|0);i=f;return}else if((j|0)==21){o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178720,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=g,v)|0);i=f;return}else if((j|0)==44){e=g+d|0;o1(b,e);l=b-g|0;o2(l,e);o2(l,d);o1(l,d-g|0);aI(125976,2,1,c[10030]|0);a[235520]=0;l=g+b|0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=l,c[v+8>>2]=d,v)|0);o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=l,c[v+8>>2]=e,v)|0);i=f;return}else if((j|0)==45){e=g+b|0;o1(e,d);l=g+d|0;o2(e,l);o2(b,l);k=b-g|0;o1(k,d-g|0);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=e,c[v+8>>2]=d,v)|0);o1(k,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=l,v)|0);i=f;return}else if((j|0)==43){l=g+b|0;o1(l,d);k=g+d|0;o2(l,k);e=b-g|0;o2(e,k);o2(e,d);o1(e,d-g|0);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=l,c[v+8>>2]=d,v)|0);i=f;return}else if((j|0)==53){l=(g|0)/2&-1;e=l+b|0;k=d-l|0;o1(e,k);o2(g+b|0,d);o2(b,g+d|0);m=b-l|0;o=l+d|0;o2(m,o);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);o2(b-g|0,d);o2(b,d-g|0);o2(e,k);o2(m,o);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179120,11,1,c[10030]|0);i=f;return}else if((j|0)==56){o=(g|0)/2&-1;m=b-o|0;k=o+d|0;o1(m,k);o2(b-g|0,d);o2(b,d-g|0);e=o+b|0;l=d-o|0;o2(e,l);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);o2(m,k);o2(b,g+d|0);o2(g+b|0,d);o2(e,l);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179120,11,1,c[10030]|0);i=f;return}else if((j|0)==18){o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178904,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=g,v)|0);i=f;return}else if((j|0)==73){l=(g*3&-1|0)/4&-1;e=b-l|0;o1(e,d);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);o2(b,d-l|0);o2(l+b|0,d);o2(b,l+d|0);o2(e,d);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(178056,22,1,c[10030]|0);i=f;return}else if((j|0)==50){e=(g|0)/2&-1;l=b-e|0;k=d-e|0;o1(l,k);o2(b,d-g|0);o2(g+b|0,d);m=e+b|0;o=e+d|0;o2(m,o);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);o2(l,k);o2(b-g|0,d);o2(b,g+d|0);o2(m,o);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179120,11,1,c[10030]|0);i=f;return}else if((j|0)==2){o=b-g|0;o1(o,d);o2(o,d);m=g+b|0;o2(m,d);k=d-g|0;o1(b,k);o2(b,k);l=g+d|0;o2(b,l);o1(o,k);o2(o,k);o2(m,l);o1(o,l);o2(o,l);o2(m,k);i=f;return}else if((j|0)==12){k=(g*3&-1|0)/4&-1;m=b-k|0;o1(m,d);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);o2(b,d-k|0);o2(k+b|0,d);o2(b,k+d|0);o2(m,d);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179120,11,1,c[10030]|0);i=f;return}else if((j|0)==17){o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178960,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=g,v)|0);i=f;return}else if((j|0)==4){m=(g*3&-1|0)/4&-1;o1(b-m|0,d-m|0);aI(125976,2,1,c[10030]|0);a[235520]=0;t=+(m|0);cf(c[10030]|0,179264,(v=i,i=i+16|0,h[v>>3]=+(b>>>0>>>0)+t,h[v+8>>3]=+(d>>>0>>>0)+t,v)|0);i=f;return}else if((j|0)==72){m=g*3&-1;k=d-((m|0)/4&-1)|0;o1(b,k);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);t=+(b>>>0>>>0);s=+(g|0)*5.196152422706632*.125;l=((m|0)/8&-1)+d|0;o2(~~(t-s),l);o2(~~(t+s),l);o2(b,k);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(178056,22,1,c[10030]|0);i=f;return}else if((j|0)==35){k=d-g|0;o1(b,k);l=g+b|0;o2(l,k);m=g+d|0;o2(l,m);l=b-g|0;o2(l,m);o2(l,d);o1(l,k);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=d,v)|0);i=f;return}else if((j|0)==32){k=g+d|0;o1(b,k);l=b-g|0;o2(l,k);m=d-g|0;o2(l,m);l=g+b|0;o2(l,m);o2(l,d);o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=l,c[v+8>>2]=k,v)|0);i=f;return}else if((j|0)==47){k=b-g|0;o1(k,d);o2(b,d-g|0);o2(g+b|0,d);o2(b,g+d|0);o2(k,d);k=(g|0)/2&-1;o1(b-k|0,k+d|0);o2(b,d);i=f;return}else if((j|0)==40){k=g+d|0;o1(b,k);l=b-g|0;o2(l,k);m=d-g|0;o2(l,m);o2(b,m);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=g+b,c[v+8>>2]=k,v)|0);i=f;return}else if((j|0)==24){o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178496,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=g,v)|0);i=f;return}else if((j|0)==6){o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,179192,(v=i,i=i+8|0,h[v>>3]=+(g|0)*3.0*.25,v)|0);i=f;return}else if((j|0)==41){k=b-g|0;o1(k,d);m=d-g|0;o2(k,m);o2(b,m);l=g+b|0;o1(l,d);o=g+d|0;o2(l,o);o2(b,o);o1(k,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=o,v)|0);o1(b,m);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178224,(v=i,i=i+16|0,c[v>>2]=l,c[v+8>>2]=d,v)|0);i=f;return}else if((j|0)==25){o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178392,(v=i,i=i+32|0,c[v>>2]=g,c[v+8>>2]=g,c[v+16>>2]=g,c[v+24>>2]=g,v)|0);i=f;return}else if((j|0)==19){o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178872,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=g,v)|0);i=f;return}else if((j|0)==23){o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178536,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=g,v)|0);i=f;return}else if((j|0)==26){o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178360,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=g,v)|0);i=f;return}else if((j|0)==30){o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,178240,(v=i,i=i+8|0,c[v>>2]=g,v)|0);i=f;return}else if((j|0)==49){l=(g|0)/2&-1;m=b-l|0;o=d-l|0;o1(m,o);o2(b,d-g|0);o2(g+b|0,d);o2(b,g+d|0);k=l+d|0;o2(m,k);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);o2(b-g|0,d);o2(m,o);o2(b,d);o2(m,k);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179120,11,1,c[10030]|0);i=f;return}else if((j|0)==74){k=((g*3&-1|0)/4&-1)+d|0;o1(b,k);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);s=+(b>>>0>>>0);t=+(g|0);q=t*2.8531695488854605*.25;r=+(d>>>0>>>0);m=~~(r+t*.9270509831248421*.25);o2(~~(s-q),m);p=t*1.7633557568774194*.25;o=~~(r-t*2.4270509831248424*.25);o2(~~(s-p),o);o2(~~(s+p),o);o2(~~(s+q),m);o2(b,k);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(178056,22,1,c[10030]|0);i=f;return}else if((j|0)==57){k=(g|0)/2&-1;m=k+b|0;o=k+d|0;o1(m,o);o2(b,g+d|0);l=b-k|0;o2(l,o);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);o2(b,d);e=d-k|0;o2(l,e);o2(b-g|0,d);o2(l,o);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179120,11,1,c[10030]|0);o1(l,e);o2(b,d-g|0);o2(m,e);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);o2(b,d);o2(m,o);o2(g+b|0,d);o2(m,e);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179120,11,1,c[10030]|0);i=f;return}else if((j|0)==54){j=(g|0)/2&-1;e=j+b|0;m=d-j|0;o1(e,m);o2(g+b|0,d);o=j+d|0;o2(e,o);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179152,5,1,c[10030]|0);o2(b,g+d|0);o2(b-g|0,d);o2(b,d-g|0);o2(e,m);o2(b,d);o2(e,o);aI(125976,2,1,c[10030]|0);a[235520]=0;aI(179120,11,1,c[10030]|0);i=f;return}else{i=f;return}}function o8(a){a=+a;h[29420]=a>=0.0?a:1.0;return}function o9(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0,o=0.0;d=i;i=i+64|0;e=d|0;f=d+56|0;g=c[3524]|0;if(a[235520]|0){j=c[10030]|0;aI(125976,2,1,j|0);a[235520]=0}j=bk(b|0,148464)|0;k=e|0;uF(k|0,b|0,j|0);a[e+j|0]=0;e=0;while(1){if(e>>>0>=17){break}l=c[235528+(e*48&-1)>>2]|0;if((a_(k|0,l|0,bk(l|0,180784)|0)|0)==0){break}else{e=e+1|0}}k=e>>>0>16?c[59088]|0:e;c[f>>2]=0;ca(b+(j+1|0)|0,21e4,(v=i,i=i+8|0,c[v>>2]=f,v)|0);j=c[f>>2]|0;if((j|0)>0){m=+(j|0)}else{m=+h[29422]}if(m==+h[29421]&(k|0)==(c[59086]|0)){n=0;i=d;return n|0}c[59090]=235528+(k*48&-1);c[59086]=k;h[29421]=m;k=~~(m*1016.0/72.0);c[g+16>>2]=k;c[g+20>>2]=(k<<1>>>0)/3>>>0;k=c[59090]|0;g=c[k+12>>2]|0;cf(c[10030]|0,180696,(v=i,i=i+16|0,c[v>>2]=c[k+8>>2],c[v+8>>2]=g,v)|0);g=c[59090]|0;m=+h[29421];if((c[g+12>>2]|0)==0){o=216.0/(m*2.0);h[g+16>>3]=o;k=c[10030]|0;cf(k|0,180656,(v=i,i=i+8|0,h[v>>3]=o,v)|0)}else{h[g+24>>3]=m;g=c[10030]|0;cf(g|0,180672,(v=i,i=i+8|0,h[v>>3]=m,v)|0)}g=c[59090]|0;k=c[g+36>>2]|0;j=c[g+40>>2]|0;cf(c[10030]|0,180632,(v=i,i=i+24|0,c[v>>2]=c[g+32>>2],c[v+8>>2]=k,c[v+16>>2]=j,v)|0);n=1;i=d;return n|0}function pa(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0,O=0,P=0.0,Q=0.0;b=i;i=i+24|0;d=b|0;e=c[13898]|0;f=c[8272]|0;if((e|0)<(f|0)){g=e;j=f}else{k=c[58772]|0;l=a[234984]|0;m=l?78720:78704;n=c[58574]|0;o=c[58572]|0;p=be(13048,180808,(v=i,i=i+32|0,c[v>>2]=k,c[v+8>>2]=m,c[v+16>>2]=n,c[v+24>>2]=o,v)|0)|0;i=b;return}L20934:while(1){f=c[1054]|0;e=(a[f+(g*40&-1)|0]&1)==0;L20936:do{if(!e){q=c[f+(g*40&-1)+36>>2]|0;r=f+(g*40&-1)+32|0;s=c[10036]|0;t=0;while(1){if((t|0)>=(q|0)){break}if((a[s+((c[r>>2]|0)+t|0)|0]|0)==(a[t+103664|0]|0)){t=t+1|0}else{break L20936}}if((t|0)==1){u=15625;break L20934}}}while(0);r=c[58760]|0;L20943:do{if((r|0)==0){w=235040}else{s=c[f+(g*40&-1)+36>>2]|0;q=c[f+(g*40&-1)+32>>2]|0;x=(s|0)>0;y=c[10036]|0;z=235040;A=r;while(1){L20947:do{if(!e){if(x){B=0;C=0;D=q;while(1){E=a[A+B|0]|0;if(E<<24>>24==(a[y+(B+D|0)|0]|0)){F=D;G=C}else{if(E<<24>>24!=36){break L20947}F=D-1|0;G=1}H=B+1|0;if((H|0)<(G+s|0)){B=H;C=G;D=F}else{break}}if((G|0)==0){I=H}else{w=z;break L20943}}else{I=0}D=a[A+I|0]|0;if((D<<24>>24|0)==36|(D<<24>>24|0)==0){w=z;break L20943}}}while(0);D=z+8|0;C=c[D>>2]|0;if((C|0)==0){w=D;break}else{z=D;A=C}}}}while(0);r=c[w+4>>2]|0;L20960:do{if((r|0)==0){a[234984]=1;a[235e3]=1;a[234992]=1;a[235272]=1;a[235264]=1;c[13898]=g+1}else if((r|0)==1){a[234984]=0;c[13898]=g+1}else{L20963:do{if(!((j|0)<=(g|0)|e)){A=c[f+(g*40&-1)+36>>2]|0;z=f+(g*40&-1)+32|0;s=c[10036]|0;y=0;while(1){if((y|0)>=(A|0)){break}if((a[s+((c[z>>2]|0)+y|0)|0]|0)==(a[y+78280|0]|0)){y=y+1|0}else{break L20963}}if((y|0)!=1){break}J=g+1|0;c[13898]=J;z=(j|0)>(J|0);if(!z){u=15629;break L20934}if((a[f+(J*40&-1)|0]&1)!=0){A=c[f+(J*40&-1)+36>>2]|0;q=f+(J*40&-1)+32|0;x=0;while(1){if((x|0)>=(A|0)){u=15562;break}if((a[s+((c[q>>2]|0)+x|0)|0]|0)==(a[x+78864|0]|0)){x=x+1|0}else{break}}do{if((u|0)==15562){u=0;if((x|0)!=1){break}if((c[58576]|0)!=0){tG()}q=c[10030]|0;aF(219,q|0);c[13898]=(c[13898]|0)+1;break L20960}}while(0);if(!z){u=15627;break L20934}}x=(a[f+(J*40&-1)|0]&1)==0;L20984:do{if(x){u=15578}else{q=c[f+(J*40&-1)+36>>2]|0;A=f+(J*40&-1)+32|0;y=0;while(1){if((y|0)>=(q|0)){u=15571;break}if((a[s+((c[A>>2]|0)+y|0)|0]|0)==(a[y+103664|0]|0)){y=y+1|0}else{break}}if((u|0)==15571){u=0;if((y|0)==1){u=15628;break L20934}}if(x){u=15578;break}A=c[f+(J*40&-1)+36>>2]|0;q=f+(J*40&-1)+32|0;t=0;while(1){if((t|0)>=(A|0)){break}if((a[s+((c[q>>2]|0)+t|0)|0]|0)==(a[t+148464|0]|0)){t=t+1|0}else{u=15578;break L20984}}if((t|0)==1){K=J;L=j}else{u=15578}}}while(0);if((u|0)==15578){u=0;s=is(d)|0;x=c[s>>2]|0;if((x|0)==2){M=+h[s+8>>3]}else if((x|0)==1){M=+(c[s+8>>2]|0)}else if((x|0)==3){M=+uz(c[s+8>>2]|0,0)}else{u=15582;break L20934}c[58574]=~~M;K=c[13898]|0;L=c[8272]|0}if((L|0)<=(K|0)){u=15631;break L20934}s=c[1054]|0;if((a[s+(K*40&-1)|0]&1)==0){u=15632;break L20934}x=c[s+(K*40&-1)+36>>2]|0;z=s+(K*40&-1)+32|0;q=c[10036]|0;A=0;while(1){if((A|0)>=(x|0)){break}if((a[q+((c[z>>2]|0)+A|0)|0]|0)==(a[A+148464|0]|0)){A=A+1|0}else{u=15633;break L20934}}if((A|0)!=1){u=15630;break L20934}z=K+1|0;c[13898]=z;L21012:do{if((L|0)>(z|0)){if((a[s+(z*40&-1)|0]&1)==0){u=15597;break}x=c[s+(z*40&-1)+36>>2]|0;y=s+(z*40&-1)+32|0;C=0;while(1){if((C|0)>=(x|0)){break}if((a[q+((c[y>>2]|0)+C|0)|0]|0)==(a[C+78864|0]|0)){C=C+1|0}else{u=15597;break L21012}}if((C|0)==1){N=z;O=L}else{u=15597}}else{u=15597}}while(0);if((u|0)==15597){u=0;z=is(d)|0;q=c[z>>2]|0;if((q|0)==3){P=+uz(c[z+8>>2]|0,0)}else if((q|0)==2){P=+h[z+8>>3]}else if((q|0)==1){P=+(c[z+8>>2]|0)}else{u=15601;break L20934}c[58572]=~~P;N=c[13898]|0;O=c[8272]|0}if((O|0)<=(N|0)){u=15621;break L20934}z=c[1054]|0;if((a[z+(N*40&-1)|0]&1)==0){u=15623;break L20934}q=c[z+(N*40&-1)+36>>2]|0;s=z+(N*40&-1)+32|0;z=c[10036]|0;A=0;while(1){if((A|0)>=(q|0)){break}if((a[z+((c[s>>2]|0)+A|0)|0]|0)==(a[A+78864|0]|0)){A=A+1|0}else{u=15622;break L20934}}if((A|0)!=1){u=15620;break L20934}c[13898]=N+1;break L20960}}while(0);s=is(d)|0;z=c[s>>2]|0;if((z|0)==2){Q=+h[s+8>>3]}else if((z|0)==3){Q=+uz(c[s+8>>2]|0,0)}else if((z|0)==1){Q=+(c[s+8>>2]|0)}else{u=15616;break L20934}s=~~Q;z=(s|0)<8?8:s;c[58772]=z;if((z|0)<=15){break}c[58772]=15}}while(0);f=c[13898]|0;e=c[8272]|0;if((f|0)<(e|0)){g=f;j=e}else{u=15624;break}}if((u|0)==15633){uf(K,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==15632){uf(K,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==15625){k=c[58772]|0;l=a[234984]|0;m=l?78720:78704;n=c[58574]|0;o=c[58572]|0;p=be(13048,180808,(v=i,i=i+32|0,c[v>>2]=k,c[v+8>>2]=m,c[v+16>>2]=n,c[v+24>>2]=o,v)|0)|0;i=b;return}else if((u|0)==15627){uf(J,78976,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==15628){uf(J,78976,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==15582){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==15621){uf(N,78824,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==15622){uf(N,78824,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==15601){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==15623){uf(N,78824,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==15624){k=c[58772]|0;l=a[234984]|0;m=l?78720:78704;n=c[58574]|0;o=c[58572]|0;p=be(13048,180808,(v=i,i=i+32|0,c[v>>2]=k,c[v+8>>2]=m,c[v+16>>2]=n,c[v+24>>2]=o,v)|0)|0;i=b;return}else if((u|0)==15629){uf(J,78976,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==15630){uf(K,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==15616){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==15631){uf(K,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((u|0)==15620){uf(N,78824,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function pb(){return}function pc(){var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,x=0;d=i;i=i+24|0;e=d|0;f=c[3524]|0;g=a[235272]|0?2340:3300;c[58758]=((a[234992]|0?2490:3480)-g|0)/2&-1;h=a[235264]|0?3300:2340;c[58756]=((a[235e3]|0?3480:2490)-h|0)/2&-1;j=(g|0)/(c[58574]|0)&-1;c[58742]=j;c[58738]=j;g=(h|0)/(c[58572]|0)&-1;c[58740]=g;c[58736]=g;c[f+8>>2]=j;c[f+12>>2]=c[58736];aI(180888,37,1,c[10030]|0);if(a[234984]|0){f=c[10030]|0;aF(137,f|0);f=c[10030]|0;aF(13,f|0);f=c[10030]|0;aF(3520,f|0)}aF(205,c[10030]|0);f=a[234984]|0;aF((f?120:24)|(f?0:5)|0,c[10030]|0);f=32;do{b[234432+(f<<1)>>1]=f&65535;f=f+1|0;}while((f|0)<127);b[117217]=225;b[117218]=233;b[117219]=-3800;b[117220]=241;b[117221]=249;b[117222]=-3672;b[117223]=162;b[117224]=163;b[117225]=164;b[117226]=165;b[117227]=167;b[117228]=171;b[117229]=182;b[117230]=-4190;b[117231]=191;b[117232]=187;b[117233]=188;b[117234]=189;b[117235]=190;b[117236]=210;b[117237]=211;b[117238]=251;b[117239]=-4304;b[117240]=212;b[117241]=137;b[117242]=176;b[117243]=161;b[117244]=139;b[117245]=133;b[117246]=140;b[117247]=-4287;b[117248]=8738;b[117250]=186;b[117252]=164;b[117255]=185;b[117343]=-4250;f=32;do{a[f+234688|0]=f&255;f=f+1|0;}while((f|0)<128);uE(234816,-128|0,126);a[234849]=27;a[234850]=7;a[234851]=8;a[234852]=120;a[234853]=10;a[234854]=124;a[234855]=11;a[234856]=25;a[234857]=21;a[234858]=45;a[234859]=12;a[234860]=83;a[234861]=45;a[234862]=20;a[234863]=126;a[234864]=26;a[234865]=12;a[234866]=1;a[234867]=2;a[234868]=29;a[234869]=52;a[234870]=13;a[234871]=5;a[234872]=28;a[234873]=3;a[234874]=45;a[234875]=16;a[234876]=17;a[234877]=18;a[234878]=19;a[234879]=15;uE(234880,65,5);a[234885]=3;a[234886]=1;a[234887]=67;w=1162167621;a[234888]=w&255;w=w>>8;a[234889|0]=w&255;w=w>>8;a[234890|0]=w&255;w=w>>8;a[234891|0]=w&255;w=1229539657;a[234892]=w&255;w=w>>8;a[234893|0]=w&255;w=w>>8;a[234894|0]=w&255;w=w>>8;a[234895|0]=w&255;a[234896]=68;a[234897]=78;uE(234898,79,5);a[234903]=13;a[234904]=2;w=1431655765;a[234905]=w&255;w=w>>8;a[234906|0]=w&255;w=w>>8;a[234907|0]=w&255;w=w>>8;a[234908|0]=w&255;a[234909]=89;a[234910]=32;a[234911]=22;uE(234912,97,5);a[234917]=6;a[234918]=4;a[234919]=99;w=1701143909;a[234920]=w&255;w=w>>8;a[234921|0]=w&255;w=w>>8;a[234922|0]=w&255;w=w>>8;a[234923|0]=w&255;w=1768515945;a[234924]=w&255;w=w>>8;a[234925|0]=w&255;w=w>>8;a[234926|0]=w&255;w=w>>8;a[234927|0]=w&255;a[234928]=100;a[234929]=110;uE(234930,111,5);a[234935]=10;a[234936]=5;w=1970632053;a[234937]=w&255;w=w>>8;a[234938|0]=w&255;w=w>>8;a[234939|0]=w&255;w=w>>8;a[234940|0]=w&255;a[234941]=121;a[234942]=32;a[234943]=121;f=0;j=0;do{j=((b[234432+(f<<1)>>1]|0)!=0&1)+j|0;f=f+1|0;}while((f|0)<127);aF(222,c[10030]|0);aF(1,c[10030]|0);aF(j&255|0,c[10030]|0);j=0;do{f=b[234432+(j<<1)>>1]|0;if(f<<16>>16!=0){g=(f&65535)>>>8;h=c[10030]|0;aF(j|0,h|0);h=g&65535;g=c[10030]|0;aF(h|0,g|0);g=f&255;f=c[10030]|0;aF(g|0,f|0);f=c[10030]|0;aF(1,f|0)}j=j+1|0;}while((j|0)<127);j=c[58772]|0;f=e|0;e=235096+(j<<2)|0;if((c[e>>2]|0)==0){be(f|0,180880,(v=i,i=i+16|0,c[v>>2]=180824,c[v+8>>2]=j,v)|0);g=c[10030]|0;aF(221,g|0);g=c[10030]|0;aF(j|0,g|0);g=c[10030]|0;aF(1,g|0);g=c[10030]|0;aF(1,g|0);g=c[10030]|0;aK(f|0,g|0);g=c[10030]|0;aF(0,g|0);c[e>>2]=j}e=j*5&-1;c[58770]=e;c[58744]=(e|0)/2&-1;c[58812]=(e|0)/3&-1;c[(c[3524]|0)+16>>2]=e;c[(c[3524]|0)+20>>2]=c[58744];aF(207,c[10030]|0);aF(j|0,c[10030]|0);aF(210,c[10030]|0);j=c[58744]|0;aF(j>>>8|0,c[10030]|0);aF(j|0,c[10030]|0);aF(208,c[10030]|0);j=c[58770]|0;aF(j>>>8|0,c[10030]|0);aF(j|0,c[10030]|0);if((c[58576]|0)!=0){tG()}if((c[58814]|0)==0){k=c[10030]|0;l=aF(135,k|0)|0;m=c[10030]|0;n=aF(0,m|0)|0;o=c[10030]|0;p=aF(0,o|0)|0;q=c[10030]|0;r=aF(137,q|0)|0;s=c[10030]|0;t=aF(0,s|0)|0;u=c[10030]|0;x=aF(0,u|0)|0;ph(-1);a[234312]=1;c[58576]=0;i=d;return}c[58814]=0;aF(206,c[10030]|0);aF(0,c[10030]|0);k=c[10030]|0;l=aF(135,k|0)|0;m=c[10030]|0;n=aF(0,m|0)|0;o=c[10030]|0;p=aF(0,o|0)|0;q=c[10030]|0;r=aF(137,q|0)|0;s=c[10030]|0;t=aF(0,s|0)|0;u=c[10030]|0;x=aF(0,u|0)|0;ph(-1);a[234312]=1;c[58576]=0;i=d;return}function pd(){if((c[58576]|0)!=0){tG()}aF(255,c[10030]|0);return}function pe(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;if((c[58576]|0)!=0){tG()}a=c[58580]|0;b=c[58574]|0;d=c[58572]|0;if((a|0)<(aa(d,b)|0)){e=a;f=b;g=d}else{if((c[58576]|0)!=0){tG()}d=c[10030]|0;aF(219,d|0);c[58580]=0;e=0;f=c[58574]|0;g=c[58572]|0}c[58580]=e+1;d=c[58758]|0;b=c[58742]|0;a=aa(b,(e|0)%(f|0)&-1)+d|0;d=c[58756]|0;h=c[58740]|0;i=aa((g-1|0)-((e|0)/(f|0)&-1)|0,h)+d|0;c[58754]=a+((b-(c[58738]|0)|0)/2&-1);c[58752]=i+((h-(c[58736]|0)|0)/2&-1);return}function pf(a,b){a=a|0;b=b|0;if((c[58576]|0)!=0){tG()}c[58472]=(c[58754]|0)+a;c[58372]=(c[58752]|0)+b;c[58576]=1;return}function pg(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[58576]|0;c[233888+(e<<2)>>2]=(c[58754]|0)+b;c[233488+(e<<2)>>2]=(c[58752]|0)+d;f=e+1|0;c[58576]=f;if(f>>>0<(a[234312]|0?100:0)>>>0){return}tG();c[58472]=(c[58754]|0)+b;c[58372]=(c[58752]|0)+d;c[58576]=1;return}function ph(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;if((c[58576]|0)!=0){tG()}d=(b|0)<-2?-2:b;if((d|0)==-2){e=4}else{b=((d|0)/8&-1)<<1;e=(b|0)<1?1:b}b=((d|0)%8&-1)+2|0;if((c[58766]|0)==(b|0)){return}c[58766]=b;aF(232,c[10030]|0);aF(e|0,c[10030]|0);aF(237,c[10030]|0);aF(0,c[10030]|0);aF(237,c[10030]|0);d=234328+(b*10&-1)|0;f=uA(d|0)|0;aF(f|0,c[10030]|0);f=a[d]|0;if(f<<24>>24==0){return}g=aa(f<<24>>24,e);aF(g>>>8|0,c[10030]|0);aF(g|0,c[10030]|0);if((uA(d|0)|0)>>>0>1){h=1}else{return}while(1){g=h+1|0;f=aa(a[234328+(b*10&-1)+h|0]|0,e);aF(f>>>8|0,c[10030]|0);aF(f|0,c[10030]|0);if(g>>>0<(uA(d|0)|0)>>>0){h=g}else{break}}return}function pi(a){a=a|0;if((c[58576]|0)!=0){tG()}if((c[58814]|0)==(a|0)){return 1}c[58814]=a;aF(206,c[10030]|0);aF(((a|0)==0?0:7)|0,c[10030]|0);return 1}function pj(a){a=a|0;if((c[58576]|0)!=0){tG()}c[58768]=a;return 1}function pk(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;b=i;d=c[13898]|0;e=c[8272]|0;L21144:do{if((d|0)<(e|0)){f=d;g=e;while(1){h=c[1054]|0;j=(a[h+(f*40&-1)|0]&1)==0;L21147:do{if(!j){k=c[h+(f*40&-1)+36>>2]|0;l=h+(f*40&-1)+32|0;n=c[10036]|0;o=0;while(1){if((o|0)>=(k|0)){break}if((a[n+((c[l>>2]|0)+o|0)|0]|0)==(a[o+103664|0]|0)){o=o+1|0}else{break L21147}}if((o|0)==1){break L21144}}}while(0);l=c[58164]|0;L21154:do{if((l|0)==0){p=232656}else{n=c[h+(f*40&-1)+36>>2]|0;k=c[h+(f*40&-1)+32>>2]|0;q=(n|0)>0;r=c[10036]|0;s=232656;t=l;while(1){L21158:do{if(!j){if(q){u=0;w=0;x=k;while(1){y=a[t+u|0]|0;if(y<<24>>24==(a[r+(u+x|0)|0]|0)){z=x;A=w}else{if(y<<24>>24!=36){break L21158}z=x-1|0;A=1}B=u+1|0;if((B|0)<(A+n|0)){u=B;w=A;x=z}else{break}}if((A|0)==0){C=B}else{p=s;break L21154}}else{C=0}x=a[t+C|0]|0;if((x<<24>>24|0)==36|(x<<24>>24|0)==0){p=s;break L21154}}}while(0);x=s+8|0;w=c[x>>2]|0;if((w|0)==0){p=x;break}else{s=x;t=w}}}}while(0);j=c[p+4>>2]|0;if((j|0)==0){a[34768]=1;l=f+1|0;c[13898]=l;D=l;E=g}else if((j|0)==3){a[34256]=0;l=f+1|0;c[13898]=l;D=l;E=g}else if((j|0)==2){a[34256]=1;l=f+1|0;c[13898]=l;D=l;E=g}else if((j|0)==1){a[34768]=0;j=f+1|0;c[13898]=j;D=j;E=g}else{aI(181208,337,1,c[m>>2]|0);j=(c[13898]|0)+1|0;c[13898]=j;D=j;E=c[8272]|0}if((D|0)<(E|0)){f=D;g=E}else{break}}}}while(0);E=a[34256]|0?181144:181176;be(13048,84616,(v=i,i=i+16|0,c[v>>2]=a[34768]|0?116408:181192,c[v+8>>2]=E,v)|0);i=b;return}function pl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0;f=i;if((c[58576]|0)!=0){tG()}g=c[58810]|0;if((g|0)!=0){uu(g)}g=(uA(e|0)|0)+2|0;h=ut(g)|0;do{if((h|0)==0){gk();j=ut(g)|0;if((j|0)!=0){k=j;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=180928,v)|0)}else{k=h}}while(0);c[58810]=k;h=a[e]|0;if(h<<24>>24==0){l=k;m=1}else{g=e;e=k;k=1;j=h;while(1){h=j&255;do{if((h|0)==92){n=g+1|0;o=a[n]|0;if(o<<24>>24!=92){p=n;q=o;r=15734;break}a[e]=10;s=k+1|0;t=n}else if((h|0)==32){a[e]=-128;s=k;t=g}else{p=g;q=j;r=15734}}while(0);if((r|0)==15734){r=0;a[e]=a[234688+(q&255)|0]|0;s=k;t=p}h=e+1|0;n=t+1|0;o=a[n]|0;if(o<<24>>24==0){l=h;m=s;break}else{g=n;e=h;k=s;j=o}}}a[l]=10;a[l+1|0]=0;l=(c[58814]|0)==0;j=aa(c[58770]|0,m);m=c[58810]|0;if(l){u=m;w=b;x=(((j|0)/2&-1)+d|0)-(c[58770]|0)|0}else{u=m;w=(((j|0)/-2&-1)+b|0)+(c[58770]|0)|0;x=d}L21204:while(1){d=u;b=w;while(1){j=a8(d|0,10)|0;if((j|0)==0){break L21204}a[j]=0;m=(c[58814]|0)==0;l=c[58812]|0;s=b-(m?0:l)|0;k=(m?l:0)+x|0;l=uA(d|0)|0;e=aa(c[58744]|0,l);l=c[58768]|0;do{if((l|0)==1){g=(e|0)/2&-1;if(m){y=k;z=b-g|0;break}else{y=x-g|0;z=s;break}}else if((l|0)==2){if(m){y=k;z=b-e|0;break}else{y=x-e|0;z=s;break}}else{y=k;z=s}}while(0);aF(135,c[10030]|0);s=(c[58754]|0)+z|0;aF(s>>>8|0,c[10030]|0);aF(s|0,c[10030]|0);aF(137,c[10030]|0);s=(c[58752]|0)+y|0;aF(s>>>8|0,c[10030]|0);aF(s|0,c[10030]|0);aF(209,c[10030]|0);s=c[58754]|0;if((c[58814]|0)==1){k=s+y|0;e=k>>>8;m=c[10030]|0;aF(e|0,m|0);m=c[10030]|0;aF(k|0,m|0)}else{m=s+z|0;s=m>>>8;k=c[10030]|0;aF(s|0,k|0);k=c[10030]|0;aF(m|0,k|0)}aK(d|0,c[10030]|0);A=j+1|0;B=c[58770]|0;if((c[58814]|0)==0){break}else{d=A;b=B+b|0}}u=A;w=b;x=x-B|0}i=f;return}function pm(a){a=a|0;c[8546]=a;return 1}function pn(){var b=0,d=0,e=0,f=0,h=0;b=i;if(a[34544]|a[34552]){i=b;return}a[34544]=1;a[34552]=0;d=c[8619]|0;if((d|0)==34464){e=1;f=0}else{h=d;do{d=c[h+12>>2]|0;c[8619]=d;c[d+8>>2]=34464;uu(h);h=c[8619]|0;}while((h|0)!=34464);e=a[34544]|0;f=a[34552]|0}c[8619]=34464;c[8618]=34464;g[8616]=0.0;g[8617]=9.99899959564209;a[34336]=0;a[34272]=0;a[34192]=0;if(e&f){uD(34480,183216,21)}uE(34560,0,160);cf(c[10030]|0,181648,(v=i,i=i+48|0,c[v>>2]=40152,c[v+8>>2]=40160,c[v+16>>2]=72,c[v+24>>2]=9,c[v+32>>2]=40,c[v+40>>2]=56,v)|0);i=b;return}function po(){if(!(a[34544]&(a[34552]^1))){return}aI(182144,19,1,c[10030]|0);a[34544]=0;c[8680]=-1;return}function pp(){var b=0,d=0,e=0,f=0;b=i;if(!(a[34544]&a[34552])){i=b;return}if(!(a[34256]|0)){tF()}aI(182248,117,1,c[10030]|0);d=0;do{e=c[34564+(d<<3)>>2]|0;do{if((e|0)!=0){if((c[34560+(d<<3)>>2]|0)!=1){break}f=c[10030]|0;cf(f|0,182216,(v=i,i=i+8|0,c[v>>2]=e,v)|0)}}while(0);d=d+1|0;}while((d|0)<20);cf(c[10030]|0,182168,(v=i,i=i+8|0,c[v>>2]=c[8680],v)|0);a[34552]=0;i=b;return}function pq(){var b=0,d=0,e=0,f=0,j=0;b=i;if(!(a[34544]&(a[34552]^1))){i=b;return}a[34552]=1;c[8680]=(c[8680]|0)+1;d=c[8619]|0;if((d|0)==34464){e=1;f=1}else{j=d;do{d=c[j+12>>2]|0;c[8619]=d;c[d+8>>2]=34464;uu(j);j=c[8619]|0;}while((j|0)!=34464);e=a[34544]|0;f=a[34552]|0}c[8619]=34464;c[8618]=34464;g[8616]=0.0;g[8617]=9.99899959564209;a[34336]=0;a[34272]=0;a[34192]=0;if(e&f){uD(34480,183216,21)}uE(34560,0,160);f=c[8680]|0;cf(c[10030]|0,182384,(v=i,i=i+32|0,c[v>>2]=f,h[v+8>>3]=+(f|0)*10.1,h[v+16>>3]=15.0,h[v+24>>3]=10.0,v)|0);i=b;return}function pr(b,c){b=b|0;c=c|0;if(!(a[34544]&a[34552])){return}if(!(a[34256]|0)){tF()}g[8616]=+(b>>>0>>>0)/1.0e3;g[8617]=+(9999-c|0)/1.0e3;return}function ps(b){b=b|0;var d=0,e=0,f=0;d=i;if(!(a[34544]&a[34552])){i=d;return}if(!(a[34256]|0)){tF()}do{if((b|0)<0){do{if((b|0)==-1){c[8566]=24;if(a[34768]|0){break}uD(34192,182904,17)}else{c[8566]=16;if(a[34768]|0){break}uD(34192,182904,17)}}while(0);uD(34272,182856,20);uD(34120,182824,25)}else{e=(b|0)%16&-1;c[8566]=e;uD(34272,182800,20);if(a[34768]|0){break}f=((e|0)%6&-1)+2|0;be(34192,182776,(v=i,i=i+8|0,c[v>>2]=f,v)|0);if(a[34768]|0){break}f=((c[8566]|0)%6&-1)+2|0;be(34120,182664,(v=i,i=i+8|0,c[v>>2]=f,v)|0)}}while(0);be(34336,182648,(v=i,i=i+8|0,c[v>>2]=c[34400+(((c[8566]|0)%16&-1)<<2)>>2],v)|0);i=d;return}function pt(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,j=0,k=0,l=0.0,m=0,n=0,o=0;f=i;if(!(a[34544]&a[34552])){i=f;return}if(a[34256]|0){j=1;k=1}else{tF();j=a[34544]|0;k=a[34552]|0}if(j&k){if(!(a[34256]|0)){tF()}g[8616]=+(b>>>0>>>0)/1.0e3;g[8617]=+(10063-d|0)/1.0e3}if((a[e]|0)==0){i=f;return}cf(c[10030]|0,183024,(v=i,i=i+40|0,c[v>>2]=(c[8566]|0)+1,c[v+8>>2]=34336,c[v+16>>2]=34272,c[v+24>>2]=34192,c[v+32>>2]=34120,v)|0);if((c[8682]|0)!=72){d=c[10030]|0;cf(d|0,183328,(v=i,i=i+8|0,c[v>>2]=72,v)|0);c[8682]=72}l=+g[8617];d=c[8546]|0;cf(c[10030]|0,182960,(v=i,i=i+40|0,h[v>>3]=+g[8616],h[v+8>>3]=l,c[v+16>>2]=34480,c[v+24>>2]=d,c[v+32>>2]=e,v)|0);e=(c[8566]|0)+1|0;L21319:do{if(a[34544]&a[34552]){d=0;while(1){if((d|0)>=20){break L21319}m=34564+(d<<3)|0;b=c[m>>2]|0;n=(b|0)==0;o=(b|0)==(e|0);if(n|o){break}else{d=d+1|0}}b=34560+(d<<3)|0;if(n){c[m>>2]=e;c[b>>2]=0;break}if(!o){break}c[b>>2]=1}}while(0);a[34336]=0;a[34272]=0;a[34192]=0;a[34480]=0;i=f;return}function pu(b){b=b|0;var c=0;do{if(a[34544]&a[34552]){if((b|0)==0){uD(34480,183216,21);c=1;break}else if((b|0)==2){uD(34480,183136,22);c=1;break}else if((b|0)==1){uD(34480,183184,23);c=1;break}else{c=0;break}}else{c=0}}while(0);return c|0}function pv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0;f=i;if((e|0)<0){j=-1}else{j=(e|0)%6&-1}if(!(a[34544]&a[34552])){i=f;return}if(a[34256]|0){k=1;l=1}else{tF();k=a[34544]|0;l=a[34552]|0}if(k&l){if(a[34256]|0){m=1;n=1}else{tF();m=a[34544]|0;n=a[34552]|0}g[8616]=+(b>>>0>>>0)/1.0e3;g[8617]=+(9999-d|0)/1.0e3;o=m;p=n}else{o=k;p=l}if(o&p){uD(34480,183184,23)}cf(c[10030]|0,183424,(v=i,i=i+16|0,c[v>>2]=(c[8566]|0)+1,c[v+8>>2]=34120,v)|0);p=c[33548+(j<<4)>>2]|0;if((c[8682]|0)!=(p|0)){o=c[10030]|0;cf(o|0,183328,(v=i,i=i+8|0,c[v>>2]=p,v)|0);c[8682]=p}q=+g[8617]+ +g[33544+(j<<4)>>2];p=c[33536+(j<<4)>>2]|0;cf(c[10030]|0,183368,(v=i,i=i+32|0,h[v>>3]=+g[8616]+ +g[33540+(j<<4)>>2],h[v+8>>3]=q,c[v+16>>2]=34480,c[v+24>>2]=p,v)|0);aI(183360,3,1,c[10030]|0);p=(c[8566]|0)+1|0;L21360:do{if(a[34544]&a[34552]){j=0;while(1){if((j|0)>=20){break L21360}r=34564+(j<<3)|0;o=c[r>>2]|0;s=(o|0)==0;t=(o|0)==(p|0);if(s|t){break}else{j=j+1|0}}o=34560+(j<<3)|0;if(s){c[r>>2]=p;c[o>>2]=0;break}if(!t){break}c[o>>2]=1}}while(0);a[34480]=0;i=f;return}function pw(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;j=i;k=b&15;if((k|0)==1){l=0}else if((k|0)==2){l=c[34736+(((b>>4|0)%8&-1)<<2)>>2]|0}else{l=7}cf(c[10030]|0,183520,(v=i,i=i+16|0,c[v>>2]=(c[8566]|0)+1,c[v+8>>2]=34192,v)|0);cf(c[10030]|0,183696,(v=i,i=i+8|0,c[v>>2]=l,v)|0);cf(c[10030]|0,183464,(v=i,i=i+32|0,h[v>>3]=+(d>>>0>>>0)/1.0e3,h[v+8>>3]=+(((9999-e|0)-g|0)>>>0>>>0)/1.0e3,h[v+16>>3]=+(f>>>0>>>0)/1.0e3,h[v+24>>3]=+(g>>>0>>>0)/1.0e3,v)|0);aI(183600,4,1,c[10030]|0);g=(c[8566]|0)+1|0;if(a[34544]&a[34552]){m=0}else{i=j;return}while(1){if((m|0)>=20){n=15879;break}o=34564+(m<<3)|0;f=c[o>>2]|0;p=(f|0)==0;q=(f|0)==(g|0);if(p|q){break}else{m=m+1|0}}if((n|0)==15879){i=j;return}n=34560+(m<<3)|0;if(p){c[o>>2]=g;c[n>>2]=0;i=j;return}if(!q){i=j;return}c[n>>2]=1;i=j;return}function px(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=i;cf(c[10030]|0,183712,(v=i,i=i+8|0,c[v>>2]=(c[8566]|0)+1,v)|0);cf(c[10030]|0,183696,(v=i,i=i+8|0,c[v>>2]=0,v)|0);cf(c[10030]|0,183648,(v=i,i=i+8|0,c[v>>2]=b,v)|0);f=c[10030]|0;if((b|0)>0){g=0;j=f;while(1){k=+(9999-(c[d+(g*12&-1)+4>>2]|0)|0)/1.0e3;cf(j|0,183624,(v=i,i=i+16|0,h[v>>3]=+(c[d+(g*12&-1)>>2]|0)/1.0e3,h[v+8>>3]=k,v)|0);l=g+1|0;m=c[10030]|0;if((l|0)<(b|0)){g=l;j=m}else{n=m;break}}}else{n=f}aI(183600,4,1,n|0);n=(c[8566]|0)+1|0;if(a[34544]&a[34552]){o=0}else{i=e;return}while(1){if((o|0)>=20){p=15896;break}q=34564+(o<<3)|0;f=c[q>>2]|0;r=(f|0)==0;s=(f|0)==(n|0);if(r|s){break}else{o=o+1|0}}if((p|0)==15896){i=e;return}p=34560+(o<<3)|0;if(r){c[q>>2]=n;c[p>>2]=0;i=e;return}if(!s){i=e;return}c[p>>2]=1;i=e;return}function py(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0.0,j=0;e=i;if(!(a[34544]&a[34552])){i=e;return}f=+(b>>>0>>>0)/1.0e3;h=+(9999-d|0)/1.0e3;d=ut(16)|0;do{if((d|0)==0){gk();b=ut(16)|0;if((b|0)!=0){j=b;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=182608,v)|0)}else{j=d}}while(0);c[(c[8619]|0)+8>>2]=j;c[(c[(c[8619]|0)+8>>2]|0)+8>>2]=34464;j=c[8619]|0;c[(c[j+8>>2]|0)+12>>2]=j;j=c[(c[8619]|0)+8>>2]|0;c[8619]=j;g[j>>2]=f;g[(c[8619]|0)+4>>2]=h;if(!(a[34256]|0)){i=e;return}tF();i=e;return}function pz(){var b=0,d=0,e=0,f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aZ=0,a_=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,ba=0,bb=0,bc=0,bd=0.0,bf=0.0,bg=0.0,bi=0.0,bj=0.0,bk=0.0,bl=0.0,bm=0,bn=0,bo=0,bp=0,bq=0.0,br=0,bs=0,bt=0,bu=0,bv=0,bw=0,bx=0,by=0,bz=0,bA=0,bB=0,bC=0,bD=0,bE=0,bF=0,bG=0,bH=0,bI=0,bJ=0,bK=0,bL=0,bM=0,bN=0,bO=0,bP=0,bQ=0,bR=0,bS=0,bT=0,bU=0,bV=0,bW=0,bX=0,bY=0,bZ=0,b_=0,b$=0,b0=0,b1=0,b2=0,b3=0,b4=0,b5=0,b6=0,b7=0,b8=0,b9=0,cb=0,cc=0,cd=0,ce=0,cf=0,cg=0,ch=0,ci=0,cj=0,ck=0,cl=0,cm=0,cn=0,co=0,cp=0,cq=0,cr=0,cs=0,ct=0,cu=0,cv=0,cw=0,cx=0,cz=0,cA=0,cB=0,cC=0,cD=0,cE=0,cF=0,cG=0,cH=0,cI=0.0,cJ=0.0,cK=0,cL=0;b=i;i=i+1272|0;d=b|0;e=b+24|0;f=b+48|0;j=b+72|0;k=b+96|0;l=b+120|0;m=b+144|0;n=b+168|0;o=b+192|0;p=b+1248|0;q=b+1256|0;r=b+1264|0;s=b+216|0;uE(s|0,0,1025);if((c[13898]|0)!=2){a[28824]=0}t=c[3524]|0;u=c[t>>2]|0;do{if((aY(u|0,168936)|0)==0){c[7118]=28e3;w=28e3}else{if((aY(u|0,169984)|0)==0){c[7118]=28304;w=28304;break}if((aY(u|0,170664)|0)==0){c[7118]=43680;w=43680;break}else{c[7118]=30304;w=30304;break}}}while(0);if((c[w>>2]|0)==3){w=c[7112]|0;if((w|0)!=0){uu(w)}c[7112]=0}else{c[t+88>>2]=90}t=c[13898]|0;w=c[8272]|0;L21446:do{if((t|0)<(w|0)){u=c[1054]|0;x=(a[u+(t*40&-1)|0]&1)==0;L21448:do{if(!x){y=c[u+(t*40&-1)+36>>2]|0;z=u+(t*40&-1)+32|0;A=c[10036]|0;B=0;while(1){if((B|0)>=(y|0)){break}if((a[A+((c[z>>2]|0)+B|0)|0]|0)==(a[B+103664|0]|0)){B=B+1|0}else{break L21448}}if((B|0)==1){C=t;D=w;break L21446}}}while(0);z=c[57330]|0;L21455:do{if((z|0)==0){E=229320}else{A=c[u+(t*40&-1)+36>>2]|0;y=c[u+(t*40&-1)+32>>2]|0;F=(A|0)>0;G=c[10036]|0;H=229320;I=z;while(1){L21459:do{if(!x){if(F){J=0;K=0;L=y;while(1){M=a[I+J|0]|0;if(M<<24>>24==(a[G+(J+L|0)|0]|0)){N=L;O=K}else{if(M<<24>>24!=36){break L21459}N=L-1|0;O=1}Q=J+1|0;if((Q|0)<(O+A|0)){J=Q;K=O;L=N}else{break}}if((O|0)==0){R=Q}else{E=H;break L21455}}else{R=0}L=a[I+R|0]|0;if((L<<24>>24|0)==36|(L<<24>>24|0)==0){E=H;break L21455}}}while(0);L=H+8|0;K=c[L>>2]|0;if((K|0)==0){E=L;break}else{H=L;I=K}}}}while(0);if((c[E+4>>2]|0)!=3){C=t;D=w;break}x=c[7118]|0;z=c[x>>2]|0;if((z|0)==2){uD(x|0,43536,144)}else if((z|0)==0){uD(x|0,27856,144)}else if((z|0)==3){u=x+32|0;I=c[u>>2]|0;if((I|0)==0){S=x}else{H=u;u=I;while(1){c[H>>2]=c[u>>2];uu(c[u+4>>2]|0);uu(c[u+8>>2]|0);uu(c[u+12>>2]|0);uu(u);I=c[7118]|0;A=I+32|0;G=c[A>>2]|0;if((G|0)==0){S=I;break}else{H=A;u=G}}}uD(S|0,30160,144)}else if((z|0)==1){uD(x|0,28160,144)}u=(c[3524]|0)+96|0;c[u>>2]=c[u>>2]&-33;u=(c[13898]|0)+1|0;c[13898]=u;H=c[8272]|0;if((u|0)>=(H|0)){C=u;D=H;break}G=c[1054]|0;if((a[G+(u*40&-1)|0]&1)==0){T=c[3524]|0;U=T|0;V=c[U>>2]|0;uf(u,134056,(v=i,i=i+8|0,c[v>>2]=V,v)|0)}A=c[G+(u*40&-1)+36>>2]|0;I=G+(u*40&-1)+32|0;G=c[10036]|0;y=0;while(1){if((y|0)>=(A|0)){break}if((a[G+((c[I>>2]|0)+y|0)|0]|0)==(a[y+103664|0]|0)){y=y+1|0}else{W=16364;break}}if((W|0)==16364){T=c[3524]|0;U=T|0;V=c[U>>2]|0;uf(u,134056,(v=i,i=i+8|0,c[v>>2]=V,v)|0)}if((y|0)==1){C=u;D=H;break}T=c[3524]|0;U=T|0;V=c[U>>2]|0;uf(u,134056,(v=i,i=i+8|0,c[v>>2]=V,v)|0)}else{C=t;D=w}}while(0);L21495:do{if((C|0)<(D|0)){w=e|0;t=e+8|0;V=d|0;U=d+8|0;T=o|0;S=o+8|0;E=n|0;R=n+8|0;Q=m|0;O=m+8|0;N=l|0;I=l+8|0;G=k|0;A=k+8|0;x=j|0;z=j+8|0;F=f|0;B=f+8|0;K=0;L=0;J=0;M=0;X=0;Y=0;Z=0;_=0;$=0;aa=0;ab=0;ac=0;ad=0;ae=0;af=0;ag=0;ah=0;ai=0;aj=0;ak=0;al=C;am=D;L21497:while(1){an=c[1054]|0;ao=(a[an+(al*40&-1)|0]&1)==0;L21499:do{if(!ao){ap=c[an+(al*40&-1)+36>>2]|0;aq=an+(al*40&-1)+32|0;ar=c[10036]|0;as=0;while(1){if((as|0)>=(ap|0)){break}if((a[ar+((c[aq>>2]|0)+as|0)|0]|0)==(a[as+103664|0]|0)){as=as+1|0}else{break L21499}}if((as|0)==1){break L21495}}}while(0);aq=c[57330]|0;L21506:do{if((aq|0)==0){at=229320}else{ar=c[an+(al*40&-1)+36>>2]|0;ap=c[an+(al*40&-1)+32>>2]|0;au=(ar|0)>0;av=c[10036]|0;aw=229320;ax=aq;while(1){L21510:do{if(!ao){if(au){ay=0;az=0;aA=ap;while(1){aB=a[ax+ay|0]|0;if(aB<<24>>24==(a[av+(ay+aA|0)|0]|0)){aC=aA;aD=az}else{if(aB<<24>>24!=36){break L21510}aC=aA-1|0;aD=1}aE=ay+1|0;if((aE|0)<(aD+ar|0)){ay=aE;az=aD;aA=aC}else{break}}if((aD|0)==0){aF=aE}else{at=aw;break L21506}}else{aF=0}aA=a[ax+aF|0]|0;if((aA<<24>>24|0)==36|(aA<<24>>24|0)==0){at=aw;break L21506}}}while(0);aA=aw+8|0;az=c[aA>>2]|0;if((az|0)==0){at=aA;break}else{aw=aA;ax=az}}}}while(0);ao=c[at+4>>2]|0;L21523:do{if((ao|0)==12){if(aa){W=16377;break L21497}aq=c[7118]|0;if(((c[aq>>2]|0)-2|0)>>>0>=2){W=16378;break L21497}a[aq+18|0]=0;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=1;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==1){if(ak){W=16375;break L21497}aq=c[7118]|0;if((c[aq>>2]|0)!=3){W=16376;break L21497}c[aq+12>>2]=2;c[13898]=(c[13898]|0)+1;aG=1;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==10){if(J){W=16058;break L21497}a[(c[7118]|0)+17|0]=1;aq=(c[3524]|0)+96|0;c[aq>>2]=c[aq>>2]&-1025;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=1;aZ=L;a_=K}else if((ao|0)==24){c[p>>2]=0;a$=al+1|0;c[13898]=a$;if((c[c[7118]>>2]|0)!=3){W=16139;break L21497}aq=a[an+(a$*40&-1)|0]|0;L21534:do{if((am|0)>(a$|0)){if((aq&1)==0){W=16145;break}ax=c[an+(a$*40&-1)+36>>2]|0;aw=an+(a$*40&-1)+32|0;ar=c[10036]|0;av=0;while(1){if((av|0)>=(ax|0)){break}if((a[ar+((c[aw>>2]|0)+av|0)|0]|0)==(a[av+186440|0]|0)){av=av+1|0}else{W=16145;break L21534}}if((av|0)!=3){a0=ax;a1=aw;W=16148;break}ar=al+2|0;c[13898]=ar;a2=0;a3=ar}else{W=16145}}while(0);if((W|0)==16145){W=0;a0=c[an+(a$*40&-1)+36>>2]|0;a1=an+(a$*40&-1)+32|0;W=16148}L21544:do{if((W|0)==16148){W=0;if(!((aq&1)!=0&(a0|0)>0)){a2=0;a3=a$;break}ar=c[10036]|0;ap=0;au=0;as=c[a1>>2]|0;while(1){if((a[ap+186432|0]|0)==(a[ar+(ap+as|0)|0]|0)){a4=as;a5=au}else{if((ap|0)!=3){a2=0;a3=a$;break L21544}a4=as-1|0;a5=1}az=ap+1|0;if((az|0)<(a5+a0|0)){ap=az;au=a5;as=a4}else{break}}if((a5|0)==0){if(!((ap|0)==2|(ap|0)==6)){a2=0;a3=a$;break}}as=al+2|0;c[13898]=as;a2=1;a3=as}}while(0);if((a3|0)>=(am|0)){W=16165;break L21497}L21559:do{if((a[an+(a3*40&-1)|0]&1)!=0){aq=c[an+(a3*40&-1)+36>>2]|0;as=an+(a3*40&-1)+32|0;au=c[10036]|0;ar=0;while(1){if((ar|0)>=(aq|0)){break}if((a[au+((c[as>>2]|0)+ar|0)|0]|0)==(a[ar+103664|0]|0)){ar=ar+1|0}else{break L21559}}if((ar|0)==1){W=16165;break L21497}}}while(0);a[14176]=1;is(k);a[14176]=0;if((c[G>>2]|0)!=3){W=16164;break L21497}as=c[A>>2]|0;c[p>>2]=as;if((as|0)==0){W=16167;break L21497}as=c[(c[7118]|0)+32>>2]|0;au=ut(16)|0;if((au|0)==0){gk();aq=ut(16)|0;if((aq|0)==0){W=16171;break L21497}else{a6=aq}}else{a6=au}au=a6;aq=c[(c[1054]|0)+((c[13898]|0)*40&-1)+36>>2]|0;ap=ut(aq)|0;if((ap|0)==0){gk();aw=ut(aq)|0;if((aw|0)==0){W=16174;break L21497}else{a7=aw}}else{a7=ap}a8=a6+4|0;c[a8>>2]=a7;iQ(p);ap=c[p>>2]|0;c[a8>>2]=ap;c[a6+12>>2]=0;do{if(a2){c[a6>>2]=0}else{if((a[ap]|0)==60){c[a6+8>>2]=0;c[a6>>2]=0}else{aw=hB(ap)|0;c[a6+8>>2]=aw;if((aw|0)==0){W=16178;break L21497}c[a6>>2]=0}aw=c[8804]|0;if((aw|0)==0){W=16184}else{aq=aw;while(1){aw=c[aq+48>>2]|0;if((aw|0)==0){break}else{aq=aw}}if((a[aq+12|0]&1)==0){W=16184}}if((W|0)==16184){W=0;if((a[37400]&1)==0){break}}tD(au,0)}}while(0);ap=(c[7118]|0)+32|0;if((c[ap>>2]|0)==0){if(a2){uh((c[13898]|0)-1|0,186216,(v=i,i=i+8|0,c[v>>2]=c[a8>>2],v)|0);aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K;break}else{c[ap>>2]=au;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K;break}}do{if((as|0)==0){a9=0}else{ar=c[a8>>2]|0;aw=a2^1;ax=0;av=as;az=0;while(1){ba=av+4|0;aA=(aY(c[ba>>2]|0,ar|0)|0)!=0;if(!(aA|aw)){break}bb=ax|aA^1;aA=c[av>>2]|0;if((aA|0)==0){W=16196;break}else{ax=bb;az=av;av=aA}}if((W|0)==16196){W=0;if(bb){aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K;break L21523}else{a9=av;break}}ax=c[av>>2]|0;if((az|0)==0){c[ap>>2]=ax}else{c[az>>2]=ax}uu(c[ba>>2]|0);uu(c[av+8>>2]|0);uu(c[av+12>>2]|0);uu(av);aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K;break L21523}}while(0);if(a2){uh((c[13898]|0)-1|0,186216,(v=i,i=i+8|0,c[v>>2]=c[a8>>2],v)|0);aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K;break}else{c[a9>>2]=au;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K;break}}else if((ao|0)==13){if(M){W=16069;break L21497}a[(c[7118]|0)+19|0]=1;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=1;aX=J;aZ=L;a_=K}else if((ao|0)==33){if(ae){W=16332;break L21497}ap=c[7118]|0;if(((c[ap>>2]|0)-2|0)>>>0<2){W=16333;break L21497}a[ap+96|0]=1;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=1;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==34){if(ae){W=16373;break L21497}ap=c[7118]|0;if(((c[ap>>2]|0)-2|0)>>>0<2){W=16374;break L21497}a[ap+96|0]=0;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=1;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==21){if(Z){W=16112;break L21497}a[(c[7118]|0)+30|0]=0;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=1;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==23){if(_){W=16118;break L21497}a[(c[7118]|0)+31|0]=0;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=1;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==22){if(_){W=16115;break L21497}a[(c[7118]|0)+31|0]=1;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=1;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==25){ap=c[7118]|0;if((c[ap>>2]|0)!=3){W=16205;break L21497}as=ap+32|0;ap=c[as>>2]|0;if((ap|0)==0){bc=al}else{ax=as;as=ap;do{c[ax>>2]=c[as>>2];uu(c[as+4>>2]|0);uu(c[as+8>>2]|0);uu(c[as+12>>2]|0);uu(as);ax=(c[7118]|0)+32|0;as=c[ax>>2]|0;}while((as|0)!=0);bc=c[13898]|0}c[13898]=bc+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==41){a[(c[7118]|0)+114|0]=0;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==42){c[13898]=al+1;as=hK()|0;ax=c[7118]|0;h[ax+120>>3]=+(as>>>16&255|0)/255.0;h[ax+128>>3]=+(as>>>8&255|0)/255.0;h[ax+136>>3]=+(as&255|0)/255.0;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==17){if(K){W=16338;break L21497}as=c[7118]|0;if((c[as>>2]|0)!=3){W=16339;break L21497}a[as+29|0]=0;a[(c[7118]|0)+28|0]=1;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=1}else if((ao|0)==5){if(aj){W=16344;break L21497}if((c[c[7118]>>2]|0)!=3){W=16345;break L21497}c[(c[3524]|0)+68>>2]=116;c[(c[3524]|0)+88>>2]=90;as=(c[3524]|0)+96|0;c[as>>2]=c[as>>2]&-33;c[13898]=(c[13898]|0)+1;aG=ak;aH=1;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==2){if(ak){W=16334;break L21497}as=c[7118]|0;if((c[as>>2]|0)!=3){W=16335;break L21497}c[as+12>>2]=0;c[13898]=(c[13898]|0)+1;aG=1;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==19){if(K){W=16348;break L21497}as=c[7118]|0;if((c[as>>2]|0)!=3){W=16349;break L21497}a[as+28|0]=0;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=1}else if((ao|0)==20){if(Z){W=16109;break L21497}a[(c[7118]|0)+30|0]=1;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=1;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==28){if(L){W=15990;break L21497}a[(c[7118]|0)+16|0]=0;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=1;a_=K}else if((ao|0)==3){W=15992;break L21497}else if((ao|0)==4){if(aj){W=16347;break L21497}if((c[c[7118]>>2]|0)!=3){W=16346;break L21497}c[(c[3524]|0)+68>>2]=86;c[(c[3524]|0)+88>>2]=126;as=(c[3524]|0)+96|0;c[as>>2]=c[as>>2]|32;c[13898]=(c[13898]|0)+1;aG=ak;aH=1;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==38){if(ac){W=16379;break L21497}if((c[c[7118]>>2]|0)!=2){W=16380;break L21497}uu(c[10956]|0);c[10956]=0;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=1;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==16){if(Y){W=16086;break L21497}c[13898]=al+1;as=is(m)|0;ax=c[as>>2]|0;if((ax|0)==1){bd=+(c[as+8>>2]|0)}else if((ax|0)==2){bd=+h[as+8>>3]}else if((ax|0)==3){bd=+uz(c[as+8>>2]|0,0)}else{W=16091;break L21497}if((c[Q>>2]|0)==3){uu(c[O>>2]|0);c[Q>>2]=1}g[(c[7118]|0)+24>>2]=bd;as=(c[7118]|0)+24|0;if(+g[as>>2]>0.0){aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=1;aV=X;aW=M;aX=J;aZ=L;a_=K;break}g[as>>2]=1.0;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=1;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==30){if(ai){W=16121;break L21497}as=al+1|0;c[13898]=as;L21670:do{if((as|0)<(am|0)){L21672:do{if((a[an+(as*40&-1)|0]&1)!=0){ax=c[an+(as*40&-1)+36>>2]|0;au=an+(as*40&-1)+32|0;ap=c[10036]|0;aw=0;while(1){if((aw|0)>=(ax|0)){break}if((a[ap+((c[au>>2]|0)+aw|0)|0]|0)==(a[aw+103664|0]|0)){aw=aw+1|0}else{break L21672}}if((aw|0)==1){bf=-1.0;break L21670}}}while(0);av=is(l)|0;az=c[av>>2]|0;if((az|0)==3){bg=+uz(c[av+8>>2]|0,0)}else if((az|0)==1){bg=+(c[av+8>>2]|0)}else if((az|0)==2){bg=+h[av+8>>3]}else{W=16132;break L21497}if((c[N>>2]|0)==3){uu(c[I>>2]|0);c[N>>2]=1}bf=bg}else{bf=-1.0}}while(0);g[(c[7118]|0)+92>>2]=bf;as=(c[7118]|0)+92|0;if(+g[as>>2]>=0.0){aG=ak;aH=aj;aI=1;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K;break}g[as>>2]=1.0;aG=ak;aH=aj;aI=1;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==43){c[13898]=al+1;as=c[7118]|0;h[as+136>>3]=-1.0;h[as+128>>3]=-1.0;h[as+120>>3]=-1.0;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==26){if($){W=16214;break L21497}c[13898]=al+1;as=is(j)|0;av=c[as>>2]|0;if((av|0)==1){bi=+(c[as+8>>2]|0)}else if((av|0)==2){bi=+h[as+8>>3]}else if((av|0)==3){bi=+uz(c[as+8>>2]|0,0)}else{W=16219;break L21497}if((c[x>>2]|0)==3){uu(c[z>>2]|0);c[x>>2]=1}c[(c[7118]|0)+100>>2]=~~bi;as=(c[7118]|0)+100|0;if((c[as>>2]|0)<2){c[as>>2]=2}as=c[13898]|0;if((as|0)>=(c[8272]|0)){aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=1;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K;break}av=c[1054]|0;az=(a[av+(as*40&-1)|0]&1)==0;if(az){aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=1;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K;break}au=c[av+(as*40&-1)+36>>2]|0;ap=av+(as*40&-1)+32|0;ax=c[10036]|0;ar=0;while(1){if((ar|0)>=(au|0)){W=16229;break}if((a[ax+((c[ap>>2]|0)+ar|0)|0]|0)==(a[ar+103664|0]|0)){ar=ar+1|0}else{break}}if((W|0)==16229){W=0;if((ar|0)==1){aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=1;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K;break}}if(az){aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=1;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K;break}ap=c[av+(as*40&-1)+36>>2]|0;ax=av+(as*40&-1)+32|0;au=c[10036]|0;aq=0;while(1){if((aq|0)>=(ap|0)){break}if((a[au+((c[ax>>2]|0)+aq|0)|0]|0)==(a[aq+148464|0]|0)){aq=aq+1|0}else{aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=1;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K;break L21523}}if((aq|0)!=1){aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=1;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K;break}c[13898]=as+1;ax=is(f)|0;au=c[ax>>2]|0;if((au|0)==1){bj=+(c[ax+8>>2]|0)}else if((au|0)==2){bj=+h[ax+8>>3]}else if((au|0)==3){bj=+uz(c[ax+8>>2]|0,0)}else{W=16239;break L21497}if((c[F>>2]|0)==3){uu(c[B>>2]|0);c[F>>2]=1}bk=+P(+bj);h[(c[7118]|0)+104>>3]=bk;if(bk<1.0){aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=1;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else{W=16243;break L21497}}else if((ao|0)==14){if(M){W=16072;break L21497}a[(c[7118]|0)+19|0]=0;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=1;aX=J;aZ=L;a_=K}else if((ao|0)==15){if(X){W=16075;break L21497}c[13898]=al+1;ax=is(n)|0;au=c[ax>>2]|0;if((au|0)==1){bl=+(c[ax+8>>2]|0)}else if((au|0)==2){bl=+h[ax+8>>3]}else if((au|0)==3){bl=+uz(c[ax+8>>2]|0,0)}else{W=16080;break L21497}if((c[E>>2]|0)==3){uu(c[R>>2]|0);c[E>>2]=1}g[(c[7118]|0)+20>>2]=bl;ax=(c[7118]|0)+20|0;if(+g[ax>>2]>0.0){aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=1;aW=M;aX=J;aZ=L;a_=K;break}g[ax>>2]=1.0;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=1;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==35){if(af){W=16352;break L21497}ax=c[7118]|0;if((c[ax>>2]|0)==3){W=16353;break L21497}a[ax+112|0]=1;ax=c[7118]|0;if((c[ax>>2]|0)==2){a[ax+30|0]=1}c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=1;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==18){if(K){W=16340;break L21497}ax=c[7118]|0;if((c[ax>>2]|0)!=3){W=16341;break L21497}a[ax+29|0]=1;a[(c[7118]|0)+28|0]=1;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=1}else if((ao|0)==31){if(ad){W=16343;break L21497}ax=c[7118]|0;if((c[ax>>2]|0)>>>0>=2){W=16342;break L21497}a[ax+97|0]=1;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=1;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==9){if(J){W=16055;break L21497}a[(c[7118]|0)+17|0]=0;ax=(c[3524]|0)+96|0;c[ax>>2]=c[ax>>2]|1024;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=1;aZ=L;a_=K}else if((ao|0)==27){if(L){W=15987;break L21497}a[(c[7118]|0)+16|0]=1;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=1;a_=K}else if((ao|0)==8){if(ab){W=16358;break L21497}ax=c[7118]|0;if((c[ax>>2]|0)!=2){W=16359;break L21497}a[ax+113|0]=0;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=1;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==39){c[13898]=al+1;a[28824]=1;c[7204]=s4(q,r,1)|0;c[(c[3524]|0)+8>>2]=~~(+g[q>>2]*10.0*72.0/+(c[10032]|0));c[(c[3524]|0)+12>>2]=~~(+g[r>>2]*10.0*72.0/+(c[10032]|0));ax=c[3524]|0;c[10962]=c[ax+8>>2]<<1;c[10960]=c[ax+12>>2]<<1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==29){ax=al+1|0;c[13898]=ax;bm=ax;W=16246}else if((ao|0)==7){if(ab){W=16355;break L21497}ax=c[7118]|0;if((c[ax>>2]|0)!=2){W=16354;break L21497}a[ax+113|0]=1;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=1;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==37){if(ac){W=16369;break L21497}if((c[c[7118]>>2]|0)!=2){W=16370;break L21497}c[13898]=al+1;uu(c[10956]|0);c[10956]=0;bn=c[13898]|0;if((bn|0)>=(c[8272]|0)){W=16020;break L21497}ax=c[1054]|0;L21766:do{if((a[ax+(bn*40&-1)|0]&1)!=0){au=c[ax+(bn*40&-1)+36>>2]|0;ap=ax+(bn*40&-1)+32|0;av=c[10036]|0;az=0;while(1){if((az|0)>=(au|0)){break}if((a[av+((c[ap>>2]|0)+az|0)|0]|0)==(a[az+103664|0]|0)){az=az+1|0}else{break L21766}}if((az|0)==1){W=16020;break L21497}}}while(0);a[14176]=1;is(o);a[14176]=0;if((c[T>>2]|0)!=3){W=16019;break L21497}ax=c[S>>2]|0;c[10956]=ax;if((ax|0)==0){W=16022;break L21497}else{aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=1;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}}else if((ao|0)==0){if(ak){W=16337;break L21497}ax=c[7118]|0;if((c[ax>>2]|0)!=3){W=16336;break L21497}c[ax+12>>2]=1;c[13898]=(c[13898]|0)+1;aG=1;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==32){if(ad){W=16367;break L21497}ax=c[7118]|0;if((c[ax>>2]|0)>>>0>=2){W=16368;break L21497}a[ax+97|0]=0;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=1;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==11){if(aa){W=16372;break L21497}ax=c[7118]|0;if(((c[ax>>2]|0)-2|0)>>>0>=2){W=16371;break L21497}a[ax+18|0]=1;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=1;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==36){if(af){W=16357;break L21497}ax=c[7118]|0;if((c[ax>>2]|0)==3){W=16356;break L21497}a[ax+112|0]=0;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=1;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else if((ao|0)==40){a[(c[7118]|0)+114|0]=1;c[13898]=(c[13898]|0)+1;aG=ak;aH=aj;aI=ai;aJ=ah;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}else{bm=al;W=16246}}while(0);L21787:do{if((W|0)==16246){W=0;L21789:do{if((bm|0)<(am|0)){L21791:do{if((a[an+(bm*40&-1)|0]&1)!=0){ao=c[an+(bm*40&-1)+36>>2]|0;ax=an+(bm*40&-1)+32|0;as=c[10036]|0;aq=0;while(1){if((aq|0)>=(ao|0)){break}if((a[as+((c[ax>>2]|0)+aq|0)|0]|0)==(a[aq+103664|0]|0)){aq=aq+1|0}else{break L21791}}if((aq|0)==1){break L21789}}}while(0);a[14176]=1;is(e);a[14176]=0;if((c[w>>2]|0)!=3){c[13898]=bm;break}az=c[t>>2]|0;if((az|0)==0){break}if(ag){W=16256;break L21497}ax=c[7118]|0;if(((c[ax>>2]|0)-2|0)>>>0>=2){W=16268;break L21497}as=bh(az|0,44)|0;do{if((as|0)==0){bo=ah}else{if((ca(as+1|0,205104,(v=i,i=i+8|0,c[v>>2]=ax+88,v)|0)|0)!=1){bo=ah;break}a[as]=0;bo=1}}while(0);if((a[az]|0)!=0){do{if((cy(az|0,186120)|0)!=0){uh((c[13898]|0)-1|0,185976,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);uh(-1,185920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);as=cy(az|0,186120)|0;if((as|0)==0){break}else{bp=as}do{a[bp]=45;bp=cy(az|0,186120)|0;}while((bp|0)!=0)}}while(0);a[(c[7118]|0)+86|0]=0;aq=(c[7118]|0)+36|0;uF(aq|0,az|0,50)}uu(az);aG=ak;aH=aj;aI=ai;aJ=bo;aK=1;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K;break L21787}}while(0);if(ah){W=16270;break L21497}aq=is(d)|0;as=c[aq>>2]|0;if((as|0)==1){bq=+(c[aq+8>>2]|0)}else if((as|0)==2){bq=+h[aq+8>>3]}else if((as|0)==3){bq=+uz(c[aq+8>>2]|0,0)}else{W=16275;break L21497}if((c[V>>2]|0)==3){uu(c[U>>2]|0);c[V>>2]=1}g[(c[7118]|0)+88>>2]=bq;aG=ak;aH=aj;aI=ai;aJ=1;aK=ag;aL=af;aM=ae;aN=ad;aO=ac;aP=ab;aQ=aa;aR=$;aS=_;aT=Z;aU=Y;aV=X;aW=M;aX=J;aZ=L;a_=K}}while(0);an=c[13898]|0;aq=c[8272]|0;if((an|0)<(aq|0)){K=a_;L=aZ;J=aX;M=aW;X=aV;Y=aU;Z=aT;_=aS;$=aR;aa=aQ;ab=aP;ac=aO;ad=aN;ae=aM;af=aL;ag=aK;ah=aJ;ai=aI;aj=aH;ak=aG;al=an;am=aq}else{break L21495}}if((W|0)==16352){br=c[3524]|0;bs=br|0;bt=c[bs>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bt,v)|0)}else if((W|0)==16353){br=c[3524]|0;bs=br|0;bt=c[bs>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bt,v)|0)}else if((W|0)==16354){bu=c[3524]|0;bv=bu|0;bw=c[bv>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bw,v)|0)}else if((W|0)==16355){bu=c[3524]|0;bv=bu|0;bw=c[bv>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bw,v)|0)}else if((W|0)==16356){bx=c[3524]|0;by=bx|0;bz=c[by>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bz,v)|0)}else if((W|0)==16357){bx=c[3524]|0;by=bx|0;bz=c[by>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bz,v)|0)}else if((W|0)==16358){bA=c[3524]|0;bB=bA|0;bC=c[bB>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bC,v)|0)}else if((W|0)==16359){bA=c[3524]|0;bB=bA|0;bC=c[bB>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bC,v)|0)}else if((W|0)==16367){bD=c[3524]|0;bE=bD|0;bF=c[bE>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bF,v)|0)}else if((W|0)==16368){bD=c[3524]|0;bE=bD|0;bF=c[bE>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bF,v)|0)}else if((W|0)==16369){bG=c[3524]|0;bH=bG|0;bI=c[bH>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bI,v)|0)}else if((W|0)==16370){bG=c[3524]|0;bH=bG|0;bI=c[bH>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bI,v)|0)}else if((W|0)==16371){bJ=c[3524]|0;bK=bJ|0;bL=c[bK>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bL,v)|0)}else if((W|0)==16372){bJ=c[3524]|0;bK=bJ|0;bL=c[bK>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bL,v)|0)}else if((W|0)==16373){bM=c[3524]|0;bN=bM|0;bO=c[bN>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bO,v)|0)}else if((W|0)==16374){bM=c[3524]|0;bN=bM|0;bO=c[bN>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bO,v)|0)}else if((W|0)==16375){bP=c[3524]|0;bQ=bP|0;bR=c[bQ>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bR,v)|0)}else if((W|0)==16376){bP=c[3524]|0;bQ=bP|0;bR=c[bQ>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bR,v)|0)}else if((W|0)==16377){bS=c[3524]|0;bT=bS|0;bU=c[bT>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bU,v)|0)}else if((W|0)==16378){bS=c[3524]|0;bT=bS|0;bU=c[bT>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bU,v)|0)}else if((W|0)==16379){bV=c[3524]|0;bW=bV|0;bX=c[bW>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bX,v)|0)}else if((W|0)==16380){bV=c[3524]|0;bW=bV|0;bX=c[bW>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=bX,v)|0)}else if((W|0)==16256){uf(c[13898]|0,134056,(v=i,i=i+8|0,c[v>>2]=c[c[3524]>>2],v)|0)}else if((W|0)==16332){bY=c[3524]|0;bZ=bY|0;b_=c[bZ>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=b_,v)|0)}else if((W|0)==16333){bY=c[3524]|0;bZ=bY|0;b_=c[bZ>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=b_,v)|0)}else if((W|0)==16334){b$=c[3524]|0;b0=b$|0;b1=c[b0>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=b1,v)|0)}else if((W|0)==16335){b$=c[3524]|0;b0=b$|0;b1=c[b0>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=b1,v)|0)}else if((W|0)==16336){b2=c[3524]|0;b3=b2|0;b4=c[b3>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=b4,v)|0)}else if((W|0)==16337){b2=c[3524]|0;b3=b2|0;b4=c[b3>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=b4,v)|0)}else if((W|0)==16338){b5=c[3524]|0;b6=b5|0;b7=c[b6>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=b7,v)|0)}else if((W|0)==16339){b5=c[3524]|0;b6=b5|0;b7=c[b6>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=b7,v)|0)}else if((W|0)==16340){b8=c[3524]|0;b9=b8|0;cb=c[b9>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=cb,v)|0)}else if((W|0)==16341){b8=c[3524]|0;b9=b8|0;cb=c[b9>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=cb,v)|0)}else if((W|0)==16342){cc=c[3524]|0;cd=cc|0;ce=c[cd>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=ce,v)|0)}else if((W|0)==16343){cc=c[3524]|0;cd=cc|0;ce=c[cd>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=ce,v)|0)}else if((W|0)==16344){cf=c[3524]|0;cg=cf|0;ch=c[cg>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=ch,v)|0)}else if((W|0)==16345){cf=c[3524]|0;cg=cf|0;ch=c[cg>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=ch,v)|0)}else if((W|0)==16346){ci=c[3524]|0;cj=ci|0;ck=c[cj>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=ck,v)|0)}else if((W|0)==16347){ci=c[3524]|0;cj=ci|0;ck=c[cj>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=ck,v)|0)}else if((W|0)==16348){cl=c[3524]|0;cm=cl|0;cn=c[cm>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=cn,v)|0)}else if((W|0)==16349){cl=c[3524]|0;cm=cl|0;cn=c[cm>>2]|0;uf(al,134056,(v=i,i=i+8|0,c[v>>2]=cn,v)|0)}else if((W|0)==16139){uf(a$,134056,(v=i,i=i+8|0,c[v>>2]=c[c[3524]>>2],v)|0)}else if((W|0)==16112){uf(al,134056,(v=i,i=i+8|0,c[v>>2]=c[c[3524]>>2],v)|0)}else if((W|0)==16115){uf(al,134056,(v=i,i=i+8|0,c[v>>2]=c[c[3524]>>2],v)|0)}else if((W|0)==16091){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((W|0)==16109){uf(al,134056,(v=i,i=i+8|0,c[v>>2]=c[c[3524]>>2],v)|0)}else if((W|0)==16205){uf(al,134056,(v=i,i=i+8|0,c[v>>2]=c[c[3524]>>2],v)|0)}else if((W|0)==16178){uf((c[13898]|0)-1|0,219072,(v=i,i=i+8|0,c[v>>2]=c[a8>>2],v)|0)}else if((W|0)==16275){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((W|0)==16219){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((W|0)==16080){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((W|0)==16019){c[13898]=bn;W=16020}else if((W|0)==16239){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((W|0)==16132){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((W|0)==15992){uf(al,134056,(v=i,i=i+8|0,c[v>>2]=c[c[3524]>>2],v)|0)}else if((W|0)==16086){uf(al,134056,(v=i,i=i+8|0,c[v>>2]=c[c[3524]>>2],v)|0)}else if((W|0)==16121){uf(al,134056,(v=i,i=i+8|0,c[v>>2]=c[c[3524]>>2],v)|0)}else if((W|0)==16214){uf(al,134056,(v=i,i=i+8|0,c[v>>2]=c[c[3524]>>2],v)|0)}else if((W|0)==16072){uf(al,134056,(v=i,i=i+8|0,c[v>>2]=c[c[3524]>>2],v)|0)}else if((W|0)==16268){uf((c[13898]|0)-1|0,185864,(v=i,i=i+16|0,c[v>>2]=c[c[3524]>>2],c[v+8>>2]=185832,v)|0)}else if((W|0)==16270){uf(c[13898]|0,134056,(v=i,i=i+8|0,c[v>>2]=c[c[3524]>>2],v)|0)}else if((W|0)==16075){uf(al,134056,(v=i,i=i+8|0,c[v>>2]=c[c[3524]>>2],v)|0)}else if((W|0)==16058){uf(al,134056,(v=i,i=i+8|0,c[v>>2]=c[c[3524]>>2],v)|0)}else if((W|0)==16055){uf(al,134056,(v=i,i=i+8|0,c[v>>2]=c[c[3524]>>2],v)|0)}else if((W|0)==16069){uf(al,134056,(v=i,i=i+8|0,c[v>>2]=c[c[3524]>>2],v)|0)}else if((W|0)==15987){uf(al,134056,(v=i,i=i+8|0,c[v>>2]=c[c[3524]>>2],v)|0)}else if((W|0)==16243){uf((c[13898]|0)-1|0,186184,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((W|0)==16171){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=186328,v)|0)}else if((W|0)==16022){co=c[13898]|0;uf(co,134392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((W|0)==15990){uf(al,134056,(v=i,i=i+8|0,c[v>>2]=c[c[3524]>>2],v)|0)}else if((W|0)==16174){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=186296,v)|0)}else if((W|0)==16164){c[13898]=a3;W=16165}else if((W|0)==16167){cp=c[13898]|0;uf(cp,217824,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((W|0)==16118){uf(al,134056,(v=i,i=i+8|0,c[v>>2]=c[c[3524]>>2],v)|0)}if((W|0)==16020){c[10956]=0;co=bn;uf(co,134392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((W|0)==16165){c[p>>2]=0;cp=a3;uf(cp,217824,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);cp=c[7118]|0;a3=c[cp>>2]|0;do{if((a3|0)==3){g[7202]=+g[cp+88>>2]}else if((a3|0)==2){g[7202]=+g[cp+88>>2]*2.0}else if((a3|0)==1|(a3|0)==0){bq=+g[cp+88>>2];if(bq>0.0){g[7202]=bq*2.0;break}else{g[7202]=20.0;break}}}while(0);c[(c[3524]|0)+16>>2]=~~(+g[7202]*+g[cp+92>>2]*10.0);cp=c[7118]|0;bq=+g[7202]*+g[cp+92>>2]*10.0;if((a[cp+112|0]&1)==0){c[(c[3524]|0)+20>>2]=~~(bq*6.0/10.0)}else{c[(c[3524]|0)+20>>2]=~~(bq*5.0/10.0)}bq=+g[7202];be(229744,185824,(v=i,i=i+16|0,c[v>>2]=(c[7118]|0)+36,h[v+8>>3]=bq,v)|0);cp=c[7118]|0;a3=c[cp>>2]|0;do{if((a3|0)==3){p=c[cp+32>>2]|0;if((p|0)==0){cq=cp;cr=0;W=16298;break}else{cs=p;ct=0}do{ct=(ct+12|0)+(uA(c[cs+4>>2]|0)|0)|0;cs=c[cs>>2]|0;}while((cs|0)!=0);al=ct+1|0;co=ut(al)|0;do{if((co|0)==0){gk();bn=ut(al)|0;if((bn|0)!=0){cu=bn;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=185800,v)|0)}else{cu=co}}while(0);co=p;al=cu;do{be(al|0,185784,(v=i,i=i+8|0,c[v>>2]=c[co+4>>2],v)|0);al=al+(uA(al|0)|0)|0;co=c[co>>2]|0;}while((co|0)!=0);co=c[7118]|0;cv=cu;cw=co;cx=c[co>>2]|0;W=16297}else{cv=0;cw=cp;cx=a3;W=16297}}while(0);do{if((W|0)==16297){if((cx|0)==3){cq=cw;cr=cv;W=16298;break}else if((cx|0)==2){a[13048]=0;cz=cv;break}else{a3=(a[cw+96|0]&1)!=0?185320:179864;be(13048,199128,(v=i,i=i+16|0,c[v>>2]=(a[cw+97|0]&1)!=0?185408:185368,c[v+8>>2]=a3,v)|0);cz=cv;break}}}while(0);if((W|0)==16298){W=c[cq+12>>2]|0;if((W|0)==0){cA=199032}else{cA=(W|0)==1?78720:78704}W=(c[(c[3524]|0)+68>>2]|0)==86?217456:185688;if((a[cq+28|0]&1)==0){cB=185496}else{cB=(a[cq+29|0]&1)!=0?185600:185528}be(13048,185752,(v=i,i=i+24|0,c[v>>2]=cA,c[v+8>>2]=W,c[v+16>>2]=cB,v)|0);cz=cr}cr=c[7118]|0;cB=(a[cr+17|0]&1)!=0?116440:116408;W=(a[cr+18|0]&1)!=0?185096:185080;cA=(a[cr+19|0]&1)!=0?131504:131584;bq=+g[cr+20>>2];bl=+g[cr+24>>2];cq=(a[cr+30|0]&1)!=0?137776:137232;cv=(a[cr+31|0]&1)!=0?185032:185008;be(s|0,185256,(v=i,i=i+64|0,c[v>>2]=(a[cr+16|0]&1)!=0?185184:185112,c[v+8>>2]=cB,c[v+16>>2]=W,c[v+24>>2]=cA,h[v+32>>3]=bq,h[v+40>>3]=bl,c[v+48>>2]=cq,c[v+56>>2]=cv,v)|0);uC(13048,s|0);cv=c[7118]|0;bl=+h[cv+120>>3];if(bl<0.0){uD(13048+(uA(13048)|0)|0,184912,19);cC=cv}else{cq=~~(bl*255.0);cA=~~(+h[cv+128>>3]*255.0);W=~~(+h[cv+136>>3]*255.0);be(s|0,184960,(v=i,i=i+24|0,c[v>>2]=cq,c[v+8>>2]=cA,c[v+16>>2]=W,v)|0);uC(13048,s|0);cC=c[7118]|0}bl=+h[cC+104>>3];be(s|0,184848,(v=i,i=i+16|0,c[v>>2]=c[cC+100>>2],h[v+8>>3]=bl,v)|0);uC(13048,s|0);cC=c[7118]|0;W=c[cC>>2]|0;if(W>>>0<2){cA=(a[cC+97|0]&1)!=0?185408:185368;cq=(a[cC+96|0]&1)!=0?184832:184816;be(s|0,184840,(v=i,i=i+16|0,c[v>>2]=cA,c[v+8>>2]=cq,v)|0);uC(13048,s|0);cq=c[7118]|0;cD=cq;cE=c[cq>>2]|0}else{cD=cC;cE=W}if((cE|0)==2){cE=(a[cD+113|0]&1)!=0?133784:133640;be(s|0,73368,(v=i,i=i+8|0,c[v>>2]=cE,v)|0);cE=c[10956]|0;if((cE|0)==0){uD(s|0,184720,10)}else{be(s|0,184800,(v=i,i=i+8|0,c[v>>2]=cE,v)|0)}uC(13048,s|0)}do{if((c[11252]|0)==15){cE=c[7118]|0;if((c[cE>>2]|0)!=3){break}cD=(a[cE+114|0]&1)!=0?179864:136208;be(s|0,184664,(v=i,i=i+8|0,c[v>>2]=cD,v)|0);uC(13048,s|0)}}while(0);if(a[28824]|0){cD=c[3524]|0;bl=+((c[cD+8>>2]|0)>>>0>>>0);if((c[7204]|0)==2){bq=bl*2.54/720.0;bj=+((c[cD+12>>2]|0)>>>0>>>0)*2.54/720.0;be(s|0,90672,(v=i,i=i+16|0,h[v>>3]=bq,h[v+8>>3]=bj,v)|0)}else{bj=bl/720.0;bl=+((c[cD+12>>2]|0)>>>0>>>0)/720.0;be(s|0,90632,(v=i,i=i+16|0,h[v>>3]=bj,h[v+8>>3]=bl,v)|0)}uC(13048,s|0)}cD=c[7118]|0;cE=c[cD>>2]|0;do{if((cE|0)==3){W=cD+36|0;bl=+g[cD+88>>2];cC=(cz|0)!=0?cz:179864;be(s|0,184608,(v=i,i=i+24|0,c[v>>2]=W,h[v+8>>3]=bl,c[v+16>>2]=cC,v)|0)}else if((cE|0)==2){bl=+g[cD+88>>2];be(s|0,184552,(v=i,i=i+16|0,c[v>>2]=cD+36,h[v+8>>3]=bl,v)|0)}else{bl=+g[cD+88>>2];if(bl!=0.0){bj=bl;be(s|0,184536,(v=i,i=i+8|0,h[v>>3]=bj,v)|0);break}else{a[s]=0;break}}}while(0);if((cz|0)==0){cF=uC(13048,s|0)|0;cG=c[7118]|0;cH=cG+92|0;cI=+g[cH>>2];cJ=cI;cK=be(s|0,184512,(v=i,i=i+8|0,h[v>>3]=cJ,v)|0)|0;cL=uC(13048,s|0)|0;i=b;return}uu(cz);cF=uC(13048,s|0)|0;cG=c[7118]|0;cH=cG+92|0;cI=+g[cH>>2];cJ=cI;cK=be(s|0,184512,(v=i,i=i+8|0,h[v>>3]=cJ,v)|0)|0;cL=uC(13048,s|0)|0;i=b;return}function pA(){var b=0,d=0,e=0,f=0,j=0,k=0,l=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,x=0.0,y=0.0,z=0.0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,aA=0;b=i;i=i+4400|0;d=b|0;e=b+8|0;f=b+40|0;j=b+296|0;k=b+304|0;l=c[(c[7118]|0)+12>>2]|0;if((l|0)==1){if(!(a[28824]|0)){c[(c[3524]|0)+8>>2]=5040;c[(c[3524]|0)+12>>2]=7200}n=c[3524]|0;o=+((c[n+8>>2]|0)>>>0>>>0);p=+g[184];q=o*(p+ +g[178])/10.0;r=+((c[n+12>>2]|0)>>>0>>>0);s=+g[44];t=r*(s+ +g[38])/10.0;h[n+176>>3]=10.0;u=t;x=q;y=r*s/10.0;z=o*p/10.0}else if((l|0)==0){do{if(a[28824]|0){c[(c[3524]|0)+8>>2]=c[10962];c[(c[3524]|0)+12>>2]=c[10960]}else{c[(c[3524]|0)+8>>2]=7200;n=(c[3524]|0)+12|0;if((a[(c[7118]|0)+112|0]&1)==0){c[n>>2]=5040;break}else{c[n>>2]=4320;break}}}while(0);n=c[3524]|0;p=+((c[n+8>>2]|0)>>>0>>>0);o=+g[184];s=p*(o+ +g[178])/20.0;r=+((c[n+12>>2]|0)>>>0>>>0);q=+g[44];t=r*(q+ +g[38])/20.0;h[n+176>>3]=20.0;u=t;x=s;y=r*q/20.0;z=p*o/20.0}else if((l|0)==2){if(!(a[28824]|0)){c[(c[3524]|0)+8>>2]=7200;c[(c[3524]|0)+12>>2]=5040}l=c[3524]|0;o=+((c[l+8>>2]|0)>>>0>>>0);p=+g[184];q=o*(p+ +g[178])/10.0;r=+((c[l+12>>2]|0)>>>0>>>0);s=+g[44];t=r*(1.0- +g[38]-s)/10.0;h[l+176>>3]=10.0;u=q;x=r*(1.0-s)/10.0;y=o*p/10.0;z=t}else{uf(-1,199080,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}l=~~u;n=~~x;A=~~y;B=~~z;uB(28840,(c[7118]|0)+36|0);g[7208]=+g[7202];C=c[7118]|0;D=c[C>>2]|0;do{if((D|0)==2){E=k|0;F=c[8244]|0;if((F|0)==0){break}G=uA(F|0)|0;H=G-4|0;if((bh(F|0,46)|0)!=(F+H|0)){uf(-1,187368,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}F=G+5|0;G=ut(F)|0;do{if((G|0)==0){gk();I=ut(F)|0;if((I|0)!=0){J=I;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=187344,v)|0)}else{J=G}}while(0);G=c[8244]|0;uB(J|0,G|0);G=(c[8244]|0)+H|0;do{if((a_(G|0,187336,4)|0)==0){K=16417}else{if((a_(G|0,187312,4)|0)==0){K=16417;break}if((a[(c[7118]|0)+113|0]&1)==0){be(E|0,186952,(v=i,i=i+8|0,c[v>>2]=199032,v)|0)}else{be(E|0,186960,(v=i,i=i+8|0,c[v>>2]=199032,v)|0)}F=J+H|0;I=(uA(E|0)|0)+1|0;uF(F|0,E|0,I|0);I=bF(J|0,134520)|0;c[10028]=I;L=I}}while(0);do{if((K|0)==16417){if((a[(c[7118]|0)+113|0]&1)!=0){uf(-1,187264,(v=i,i=i+8|0,c[v>>2]=187208,v)|0)}E=G;w=2019914798;a[E]=w&255;w=w>>8;a[E+1|0]=w&255;w=w>>8;a[E+2|0]=w&255;w=w>>8;a[E+3|0]=w&255;c[10028]=c[10030];c[10030]=bF(c[8244]|0,137896)|0;uh(-1,187016,(v=i,i=i+16|0,c[v>>2]=c[8244],c[v+8>>2]=J,v)|0);if((c[10030]|0)==0){uf(-1,186984,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{L=c[10028]|0;break}}}while(0);if((L|0)==0){uf(-1,186896,(v=i,i=i+8|0,c[v>>2]=J,v)|0)}G=(uA(J|0)|0)-3|0;E=ut(G)|0;do{if((E|0)==0){gk();H=ut(G)|0;if((H|0)!=0){M=H;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=186872,v)|0)}else{M=E}}while(0);c[7112]=M;E=(uA(J|0)|0)-4|0;uF(M|0,J|0,E|0);E=(uA(J|0)|0)-4|0;a[(c[7112]|0)+E|0]=0;uu(J)}else if((D|0)==3){c[10028]=c[10030]}else{E=c[8244]|0;if((E|0)==0){if((a[C+96|0]&1)!=0){G=c[m>>2]|0;aI(186464,61,1,G|0);a[(c[7118]|0)+96|0]=0}c[10028]=c[10030];break}G=bh(E|0,46)|0;if((G|0)==0){N=a8(E|0,0)|0}else{N=G}if((a[C+96|0]&1)==0){c[10028]=c[10030];break}G=N;H=db(c[7112]|0,(5-E|0)+G|0,186784)|0;c[7112]=H;if((H|0)==0){E=c[m>>2]|0;I=c[8244]|0;cf(E|0,186600,(v=i,i=i+8|0,c[v>>2]=I,v)|0);I=c[m>>2]|0;aI(186560,27,1,I|0);a[(c[7118]|0)+96|0]=0;c[10028]=c[10030];break}I=c[8244]|0;uF(H|0,I|0,(G+1|0)-I|0);I=(c[7112]|0)+(G-(c[8244]|0)|0)|0;w=7565358;a[I]=w&255;w=w>>8;a[I+1|0]=w&255;w=w>>8;a[I+2|0]=w&255;w=w>>8;a[I+3|0]=w&255;I=bF(c[7112]|0,137896)|0;c[10028]=I;if((I|0)!=0){break}cf(c[m>>2]|0,186696,(v=i,i=i+8|0,c[v>>2]=c[7112],v)|0);uu(c[7112]|0);c[7112]=0;a[(c[7118]|0)+96|0]=0;c[10028]=c[10030]}}while(0);N=c[7118]|0;C=(c[N>>2]|0)==3;D=c[N+4>>2]|0;J=c[N+8>>2]|0;N=c[3524]|0;M=(c[N+68>>2]|0)==86;L=M?238344:0;a[28912]=C&1;c[7226]=D;c[7224]=J;c[7120]=0;cG(j|0);k=bg(aN(j|0)|0)|0;a[k+((uA(k|0)|0)-1|0)|0]=0;j=c[c[7118]>>2]|0;do{if((j|0)==2){do{if((c[10030]|0)==0){I=(uA(c[8244]|0)|0)+1|0;G=ut(I)|0;do{if((G|0)==0){gk();H=ut(I)|0;if((H|0)!=0){O=H;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=129080,v)|0)}else{O=G}}while(0);G=c[8244]|0;uB(O|0,G|0);lj(O);G=c[8244]|0;if((O|0)==(G|0)|(O|0)==0){P=G;break}uu(O);K=16439}else{K=16439}}while(0);if((K|0)==16439){P=c[8244]|0}if((P|0)==0){uj(c[13898]|0,193824,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}G=c[10030]|0;if((G|0)==0){Q=0;R=0;S=0}else{cf(G|0,193768,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);G=c[11252]|0;if((G|0)==1){T=193704}else if((G|0)==2){T=193640}else if((G|0)==3){T=193624}else if((G|0)==4){T=193616}else if((G|0)==5){T=193560}else if((G|0)==6){T=96912}else if((G|0)==7){T=90808}else if((G|0)==9){T=75288}else if((G|0)==10){T=222760}else if((G|0)==12){T=193552}else if((G|0)==13){T=193480}else if((G|0)==16){uf(-1,193408,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{T=0}c[1402]=-1;c[10882]=0;G=(c[7118]|0)+36|0;do{if((a[G]|0)==0){U=0;V=0;W=0}else{if((aY(G|0,126024)|0)==0){U=0;V=0;W=0;break}I=(uA(G|0)|0)+1|0;H=ut(I)|0;do{if((H|0)==0){gk();E=ut(I)|0;if((E|0)!=0){X=E;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=193376,v)|0)}else{X=H}}while(0);H=(uA((c[7118]|0)+36|0)|0)+1|0;I=ut(H)|0;do{if((I|0)==0){gk();E=ut(H)|0;if((E|0)!=0){Y=E;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=193376,v)|0)}else{Y=I}}while(0);I=(uA((c[7118]|0)+36|0)|0)+1|0;H=ut(I)|0;do{if((H|0)==0){gk();E=ut(I)|0;if((E|0)!=0){Z=E;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=193376,v)|0)}else{Z=H}}while(0);H=(c[7118]|0)+36|0;uB(X|0,H|0);a[Y]=0;a[Z]=0;H=a8(X|0,44)|0;if((H|0)==0){U=Z;V=Y;W=X;break}a[H]=0;I=H+1|0;uB(Y|0,I|0);I=a8(Y|0,44)|0;if((I|0)==0){U=Z;V=Y;W=X;break}a[I]=0;H=I+1|0;uB(Z|0,H|0);U=Z;V=Y;W=X}}while(0);G=c[7118]|0;if((a[G+113|0]&1)!=0){H=c[10030]|0;z=+g[G+88>>2];G=~~(z+-10.0);I=~~z;cf(H|0,192864,(v=i,i=i+24|0,c[v>>2]=G,c[v+8>>2]=I,c[v+16>>2]=I,v)|0);do{if((W|0)!=0){if((a[W]|0)==0){break}I=c[10030]|0;cf(I|0,192816,(v=i,i=i+8|0,c[v>>2]=W,v)|0)}}while(0);do{if((V|0)!=0){if((a[V]|0)==0){break}I=c[10030]|0;cf(I|0,192784,(v=i,i=i+8|0,c[v>>2]=V,v)|0)}}while(0);do{if((U|0)!=0){if((a[U]|0)==0){break}I=c[10030]|0;cf(I|0,192752,(v=i,i=i+8|0,c[v>>2]=U,v)|0)}}while(0);I=c[10030]|0;aI(192648,57,1,I|0);if((T|0)!=0){I=c[10030]|0;cf(I|0,192544,(v=i,i=i+8|0,c[v>>2]=T,v)|0)}I=c[10030]|0;G=c[3524]|0;z=+((c[G+8>>2]|0)>>>0>>>0)*+g[178]/20.0;y=+((c[G+12>>2]|0)>>>0>>>0)*+g[38]/20.0;G=c[10956]|0;H=(G|0)!=0?G:191528;cf(I|0,191600,(v=i,i=i+40|0,h[v>>3]=z,h[v+8>>3]=y,h[v+16>>3]=z,h[v+24>>3]=y,c[v+32>>2]=H,v)|0)}H=c[10030]|0;aI(191384,12,1,H|0);if((T|0)!=0){H=c[10030]|0;cf(H|0,191184,(v=i,i=i+16|0,c[v>>2]=T,c[v+8>>2]=T,v)|0)}do{if((a[(c[7118]|0)+113|0]&1)==0){H=(W|0)!=0;do{if(H){if((a[W]|0)==0){break}I=c[10030]|0;cf(I|0,191152,(v=i,i=i+8|0,c[v>>2]=W,v)|0)}}while(0);I=(V|0)!=0;do{if(I){if((a[V]|0)==0){break}G=c[10030]|0;cf(G|0,191104,(v=i,i=i+8|0,c[v>>2]=V,v)|0)}}while(0);do{if((U|0)==0){if(H|I){K=16496}}else{if((a[U]|0)==0){K=16496;break}G=c[10030]|0;cf(G|0,191080,(v=i,i=i+8|0,c[v>>2]=U,v)|0);K=16496}}while(0);if((K|0)==16496){I=c[10030]|0;aI(191064,14,1,I|0)}I=c[10956]|0;if((I|0)==0){break}H=c[10030]|0;cf(H|0,154696,(v=i,i=i+8|0,c[v>>2]=I,v)|0)}}while(0);I=c[10030]|0;H=c[7118]|0;G=(a[H+17|0]&1)!=0?225e3:224992;E=(a[H+18|0]&1)!=0?225e3:224992;cf(I|0,189944,(v=i,i=i+16|0,c[v>>2]=G,c[v+8>>2]=E,v)|0);E=c[10030]|0;aI(189536,396,1,E|0);E=c[10030]|0;if((a[(c[7118]|0)+112|0]&1)==0){aI(188600,593,1,E|0)}else{aI(189272,260,1,E|0)}E=c[10030]|0;aI(187688,837,1,E|0);E=c[10030]|0;G=c[3524]|0;y=+((c[G+8>>2]|0)>>>0>>>0)*+g[178];z=+((c[G+12>>2]|0)>>>0>>>0)*+g[38];cf(E|0,187608,(v=i,i=i+24|0,h[v>>3]=.05,h[v+8>>3]=y,h[v+16>>3]=z,v)|0);Q=U;R=V;S=W}E=c[7118]|0;z=+h[E+120>>3];if(z>=0.0){G=c[10030]|0;y=+h[E+128>>3];x=+h[E+136>>3];cf(G|0,187528,(v=i,i=i+24|0,h[v>>3]=z,h[v+8>>3]=y,h[v+16>>3]=x,v)|0);G=c[10030]|0;E=c[3524]|0;x=+((c[E+8>>2]|0)>>>0>>>0)*+g[178];y=+((c[E+12>>2]|0)>>>0>>>0)*+g[38];cf(G|0,187432,(v=i,i=i+16|0,h[v>>3]=x,h[v+8>>3]=y,v)|0)}if((S|0)!=0){uu(S)}if((R|0)!=0){uu(R)}if((Q|0)==0){break}uu(Q)}else if((j|0)==1){cf(c[10030]|0,195248,(v=i,i=i+8|0,h[v>>3]=.05,v)|0);G=c[3524]|0;E=~~(+g[38]*+((c[G+12>>2]|0)>>>0>>>0));cf(c[10030]|0,195216,(v=i,i=i+16|0,c[v>>2]=~~(+g[178]*+((c[G+8>>2]|0)>>>0>>>0)),c[v+8>>2]=E,v)|0);K=16513}else if((j|0)==0){cf(c[10030]|0,194104,(v=i,i=i+8|0,h[v>>3]=.05,v)|0);E=c[3524]|0;G=~~(+g[38]*+((c[E+12>>2]|0)>>>0>>>0));cf(c[10030]|0,194064,(v=i,i=i+16|0,c[v>>2]=~~(+g[178]*+((c[E+8>>2]|0)>>>0>>>0)),c[v+8>>2]=G,v)|0);K=16513}}while(0);if((K|0)==16513){j=c[10028]|0;Q=c[10030]|0;if((j|0)==(Q|0)){aI(193952,21,1,j|0)}else{j=c[3524]|0;R=~~(+g[178]*+((c[j+8>>2]|0)>>>0>>>0)/20.0+.5);S=~~(+g[38]*+((c[j+12>>2]|0)>>>0>>>0)/20.0+.5);j=c[7112]|0;W=bh(j|0,47)|0;V=(W|0)==0?j:W+1|0;W=R*10&-1;cf(Q|0,194008,(v=i,i=i+32|0,c[v>>2]=V,c[v+8>>2]=R,c[v+16>>2]=S,c[v+24>>2]=W,v)|0)}c[7036]=0}W=c[10028]|0;if((c[(c[7118]|0)+12>>2]|0)==0){aI(198992,24,1,W|0)}else{aI(198968,15,1,W|0)}W=c[8244]|0;if((W|0)!=0){S=c[10028]|0;cf(S|0,198936,(v=i,i=i+8|0,c[v>>2]=W,v)|0)}cf(c[10028]|0,230952,(v=i,i=i+32|0,c[v>>2]=40152,c[v+8>>2]=40160,c[v+16>>2]=k,c[v+24>>2]=C?198928:179864,v)|0);W=D+B|0;B=J+A|0;A=D+n|0;n=J+l|0;cf(c[10028]|0,198896,(v=i,i=i+32|0,c[v>>2]=W,c[v+8>>2]=B,c[v+16>>2]=A,c[v+24>>2]=n,v)|0);l=c[7118]|0;do{if((c[l>>2]|0)==3){J=c[l+12>>2]|0;if((J|0)==0){_=l;break}D=c[10028]|0;S=(J|0)==2?198832:198816;cf(D|0,198872,(v=i,i=i+8|0,c[v>>2]=S,v)|0);_=c[7118]|0}else{_=l}}while(0);if((c[_+12>>2]|0)==0){$=_;aa=224992}else{_=c[10028]|0;aI(198792,17,1,_|0);_=c[7118]|0;$=_;aa=(c[_+12>>2]|0)==2?225e3:224992}_=(a[$+18|0]&1)!=0?225e3:224992;l=(a[$+19|0]&1)!=0?225e3:224992;y=+g[$+20>>2];S=(a[$+16|0]&1)!=0?225e3:224992;D=(a[$+30|0]&1)!=0?225e3:224992;J=(a[$+31|0]&1)!=0?225e3:224992;x=+g[$+24>>2]*5.0;z=+h[$+120>>3];u=+h[$+128>>3];t=+h[$+136>>3];R=(c[N+16>>2]|0)/-3&-1;cf(c[10028]|0,230144,(v=i,i=i+136|0,c[v>>2]=(a[$+17|0]&1)!=0?225e3:224992,c[v+8>>2]=_,c[v+16>>2]=l,h[v+24>>3]=y,c[v+32>>2]=aa,c[v+40>>2]=S,c[v+48>>2]=D,c[v+56>>2]=J,h[v+64>>3]=x,h[v+72>>3]=z,h[v+80>>3]=u,h[v+88>>3]=t,c[v+96>>2]=R,h[v+104>>3]=10.0,h[v+112>>3]=10.0,h[v+120>>3]=31.5,h[v+128>>3]=31.5,v)|0);cf(c[10028]|0,198632,(v=i,i=i+64|0,c[v>>2]=W,c[v+8>>2]=B,c[v+16>>2]=A,c[v+24>>2]=B,c[v+32>>2]=A,c[v+40>>2]=n,c[v+48>>2]=W,c[v+56>>2]=n,v)|0);n=f|0;f=tE(198600)|0;if((f|0)!=0){if((a6(n|0,256,f|0)|0)!=0){do{aK(n|0,c[10028]|0);}while((a6(n|0,256,f|0)|0)!=0)}az(f|0)}do{if(C){f=c[11252]|0;if((f|0)==12){W=tE(198296)|0;if((W|0)==0){break}if((a6(n|0,256,W|0)|0)!=0){do{aK(n|0,c[10028]|0);}while((a6(n|0,256,W|0)|0)!=0)}az(W|0);break}else if((f|0)==9){A=tE(198384)|0;if((A|0)==0){break}if((a6(n|0,256,A|0)|0)!=0){do{aK(n|0,c[10028]|0);}while((a6(n|0,256,A|0)|0)!=0)}az(A|0);break}else if((f|0)==15){W=tE(198232)|0;if((W|0)!=0){if((a6(n|0,256,W|0)|0)!=0){do{aK(n|0,c[10028]|0);}while((a6(n|0,256,W|0)|0)!=0)}az(W|0)}if((c[18090]|0)!=0){break}A=e|0;c[d>>2]=0;B=tE(195944)|0;if((B|0)==0){break}if((a6(n|0,256,B|0)|0)!=0){do{R=a[n]|0;do{if(!((R<<24>>24|0)==35|(R<<24>>24|0)==10)){J=aE(n|0,d|0,16)|0;if(J>>>0>255){if((a[(c[7118]|0)+114|0]&1)==0){break}}D=(c[d>>2]|0)+1|0;c[d>>2]=D;S=(a8(D|0,59)|0)-D|0;uF(A|0,D|0,S|0);a[e+S|0]=0;S=c[18088]|0;if(((c[18086]|0)+8|0)>>>0>S>>>0){D=S+2048|0;c[18088]=D;S=db(c[18090]|0,D,195936)|0;c[18090]=S;ab=S}else{ab=c[18090]|0}c[ab+(c[7114]<<3)>>2]=J;J=bP(A|0)|0;c[(c[18090]|0)+(c[7114]<<3)+4>>2]=J;c[18086]=(c[18086]|0)+8;c[7114]=(c[7114]|0)+1}}while(0);}while((a6(n|0,256,B|0)|0)!=0)}az(B|0);break}else if((f|0)==10){A=tE(198328)|0;if((A|0)==0){break}if((a6(n|0,256,A|0)|0)!=0){do{aK(n|0,c[10028]|0);}while((a6(n|0,256,A|0)|0)!=0)}az(A|0);break}else if((f|0)==1){B=tE(198552)|0;if((B|0)==0){break}if((a6(n|0,256,B|0)|0)!=0){do{aK(n|0,c[10028]|0);}while((a6(n|0,256,B|0)|0)!=0)}az(B|0);break}else if((f|0)==2){A=tE(198488)|0;if((A|0)==0){break}if((a6(n|0,256,A|0)|0)!=0){do{aK(n|0,c[10028]|0);}while((a6(n|0,256,A|0)|0)!=0)}az(A|0);break}else if((f|0)==11|(f|0)==3){B=tE(198472)|0;if((B|0)==0){break}if((a6(n|0,256,B|0)|0)!=0){do{aK(n|0,c[10028]|0);}while((a6(n|0,256,B|0)|0)!=0)}az(B|0);break}else if((f|0)==4){A=tE(198456)|0;if((A|0)==0){break}if((a6(n|0,256,A|0)|0)!=0){do{aK(n|0,c[10028]|0);}while((a6(n|0,256,A|0)|0)!=0)}az(A|0);break}else if((f|0)==5){B=tE(198440)|0;if((B|0)==0){break}if((a6(n|0,256,B|0)|0)!=0){do{aK(n|0,c[10028]|0);}while((a6(n|0,256,B|0)|0)!=0)}az(B|0);break}else if((f|0)==6){A=tE(198424)|0;if((A|0)==0){break}if((a6(n|0,256,A|0)|0)!=0){do{aK(n|0,c[10028]|0);}while((a6(n|0,256,A|0)|0)!=0)}az(A|0);break}else if((f|0)==7){B=tE(198408)|0;if((B|0)==0){break}if((a6(n|0,256,B|0)|0)!=0){do{aK(n|0,c[10028]|0);}while((a6(n|0,256,B|0)|0)!=0)}az(B|0);break}else if((f|0)==13){A=tE(198272)|0;if((A|0)==0){break}if((a6(n|0,256,A|0)|0)!=0){do{aK(n|0,c[10028]|0);}while((a6(n|0,256,A|0)|0)!=0)}az(A|0);break}else{break}}}while(0);n=c[7118]|0;do{if((c[n>>2]|0)==2){if((a[n+112|0]&1)==0){ac=n;break}ab=c[10028]|0;aI(196392,51,1,ab|0);ab=c[10028]|0;aI(196344,29,1,ab|0);ab=c[10028]|0;aI(196312,28,1,ab|0);ab=c[10028]|0;aI(196216,66,1,ab|0);ab=c[10028]|0;aI(196136,28,1,ab|0);ab=c[10028]|0;aI(196080,39,1,ab|0);ab=c[10028]|0;aI(196032,39,1,ab|0);ab=c[10028]|0;aI(195960,53,1,ab|0);ac=c[7118]|0}else{ac=n}}while(0);if((a[ac+28|0]&1)!=0){n=c[10028]|0;ab=(a[ac+29|0]&1)!=0?225e3:224992;cf(n|0,198176,(v=i,i=i+8|0,c[v>>2]=ab,v)|0)}do{if(M){ab=c[L>>2]|0;if((ab|0)==0){break}else{ad=L;ae=ab}do{ad=ad+4|0;aK(ae|0,c[10028]|0);ae=c[ad>>2]|0;}while((ae|0)!=0)}}while(0);if(C){C=c[7118]|0;ae=c[C+32>>2]|0;if((ae|0)==0){af=C}else{C=ae;do{tD(C,1);ae=c[C+12>>2]|0;if((ae|0)!=0){tz(ae)}C=c[C>>2]|0;}while((C|0)!=0);af=c[7118]|0}tz(af+36|0)}af=bU(131496)|0;if((af|0)==0){C=bU(130312)|0;if((C|0)==0){ag=0;ah=0;ai=1}else{aj=C;K=16610}}else{aj=af;K=16610}do{if((K|0)==16610){af=bP(aj|0)|0;if((af|0)==0){ag=0;ah=0;ai=1;break}if((a[af]|0)==0){ag=0;ah=af;ai=0;break}C=uA(af|0)<<1|1;ae=ut(C)|0;do{if((ae|0)==0){gk();ad=ut(C)|0;if((ad|0)!=0){ak=ad;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=197984,v)|0)}else{ak=ae}}while(0);ae=a[af]|0;if(ae<<24>>24==0){al=ak}else{C=af;ad=ak;L=ae;while(1){if((aZ(198168,L<<24>>24|0,4)|0)==0){am=ad;an=L}else{a[ad]=92;am=ad+1|0;an=a[C]|0}ae=C+1|0;M=am+1|0;a[am]=an;A=a[ae]|0;if(A<<24>>24==0){al=M;break}else{C=ae;ad=M;L=A}}}a[al]=0;ag=ak;ah=af;ai=0}}while(0);ak=c[8244]|0;do{if((ak|0)==0){ao=0}else{if((a[ak]|0)==0){ao=0;break}al=uA(ak|0)<<1|1;an=ut(al)|0;do{if((an|0)==0){gk();am=ut(al)|0;if((am|0)!=0){ap=am;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=197984,v)|0)}else{ap=an}}while(0);an=a[ak]|0;if(an<<24>>24==0){aq=ap}else{al=ak;af=ap;am=an;while(1){if((aZ(198168,am<<24>>24|0,4)|0)==0){ar=af;as=am}else{a[af]=92;ar=af+1|0;as=a[al]|0}an=al+1|0;aj=ar+1|0;a[ar]=as;K=a[an]|0;if(K<<24>>24==0){aq=aj;break}else{al=an;af=aj;am=K}}}a[aq]=0;ao=ap}}while(0);ap=(ao|0)!=0;aq=(ag|0)!=0;cf(c[10028]|0,229800,(v=i,i=i+40|0,c[v>>2]=ap?ao:179864,c[v+8>>2]=40152,c[v+16>>2]=40160,c[v+24>>2]=aq?ag:179864,c[v+32>>2]=k,v)|0);if(!ai){uu(ah)}if(aq){uu(ag)}if(!ap){at=c[10028]|0;au=aI(198144,16,1,at|0)|0;av=c[3524]|0;aw=av+68|0;ax=c[aw>>2]|0;ay=(ax|0)==86;aA=ay?2:1;c[59584]=aA;i=b;return}uu(ao);at=c[10028]|0;au=aI(198144,16,1,at|0)|0;av=c[3524]|0;aw=av+68|0;ax=c[aw>>2]|0;ay=(ax|0)==86;aA=ay?2:1;c[59584]=aA;i=b;return}function pB(a){a=a|0;c[7230]=a;return 1}function pC(a){a=a|0;c[7198]=a;return 1}function pD(){var b=0,d=0,e=0;b=i;aI(199192,10,1,c[10028]|0);do{if((a[28912]&1)!=0){d=c[10028]|0;aI(199160,17,1,d|0);d=c[57760]|0;if((d|0)==0){break}else{e=d}while(1){d=c[e+4>>2]|0;cf(c[10028]|0,199128,(v=i,i=i+16|0,c[v>>2]=c[e>>2],c[v+8>>2]=(d|0)!=0?73808:140136,v)|0);uu(c[c[57760]>>2]|0);uu(c[57760]|0);c[57760]=d;if((d|0)==0){break}else{e=d}}}}while(0);if((c[(c[7118]|0)+12>>2]|0)==0){i=b;return}cf(c[10028]|0,199112,(v=i,i=i+8|0,c[v>>2]=c[7120],v)|0);i=b;return}function pE(){c[7116]=0;aI(199208,29,1,c[10028]|0);return}function pF(){var b=0,d=0,e=0,f=0,j=0,k=0.0,l=0.0;b=i;d=c[3524]|0;e=(c[7120]|0)+1|0;c[7120]=e;cf(c[10028]|0,202176,(v=i,i=i+16|0,c[v>>2]=e,c[v+8>>2]=e,v)|0);if((c[(c[3524]|0)+68>>2]|0)==86&(c[59584]|0)==1){e=c[59586]|0;if((e|0)!=0){f=238344;j=e;do{f=f+4|0;aK(j|0,c[10028]|0);j=c[f>>2]|0;}while((j|0)!=0)}j=c[m>>2]|0;aI(202120,53,1,j|0);c[59584]=2}j=c[7224]|0;k=((c[(c[7118]|0)+12>>2]|0)==0?.5:1.0)/10.0;cf(c[10028]|0,202048,(v=i,i=i+32|0,c[v>>2]=c[7226],c[v+8>>2]=j,h[v+16>>3]=k,h[v+24>>3]=k,v)|0);if((c[(c[7118]|0)+12>>2]|0)==2){j=c[10028]|0;f=-(c[(c[3524]|0)+12>>2]|0)|0;cf(j|0,202016,(v=i,i=i+8|0,c[v>>2]=f,v)|0)}aI(201976,18,1,c[10028]|0);if((a[28912]&1)!=0){f=c[10028]|0;j=(c[7118]|0)+36|0;e=c[d+16>>2]|0;cf(f|0,201872,(v=i,i=i+16|0,c[v>>2]=j,c[v+8>>2]=e,v)|0)}c[7116]=0;a[228944]=0;c[57326]=-4e3;c[57328]=-4e3;c[57234]=0;c[57432]=-5;h[28715]=-5.0;h[28714]=-5.0;g[7200]=-1.0;if((c[c[7118]>>2]|0)==2){i=b;return}aI(201808,56,1,c[10028]|0);e=c[10028]|0;if((c[(c[7118]|0)+12>>2]|0)==0){j=c[3524]|0;k=+((c[j+8>>2]|0)>>>0>>>0)*+g[178];l=+((c[j+12>>2]|0)>>>0>>>0)*+g[38];cf(e|0,201752,(v=i,i=i+16|0,h[v>>3]=k,h[v+8>>3]=l,v)|0)}else{aI(201632,46,1,e|0)}aI(201616,5,1,c[10028]|0);i=b;return}function pG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;e=i;i=i+64|0;f=e|0;g=e+32|0;h=c[57328]|0;j=b-h|0;k=c[57326]|0;l=d-k|0;do{if((h|0)==(b|0)&(k|0)==(d|0)){if(!(a[228944]|0)){break}i=e;return}}while(0);k=f|0;be(k|0,202376|0,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=d,v)|0);f=g|0;be(f|0,202240|0,(v=i,i=i+16|0,c[v>>2]=j,c[v+8>>2]=l,v)|0);L22391:do{if(a[229704]|0){l=c[10028]|0;cf(l|0,202208|0,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=d,v)|0);a[229704]=0}else{l=uA(f|0)|0;do{if(l>>>0<(uA(k|0)|0)>>>0){if(!(a[228944]|0)){break}j=c[10028]|0;aK(f|0,j|0);c[57234]=(c[57234]|0)+1;break L22391}}while(0);l=c[10028]|0;aK(k|0,l|0)}}while(0);a[228944]=1;c[7116]=(c[7116]|0)+1;c[57328]=b;c[57326]=d;i=e;return}function pH(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;e=i;i=i+64|0;f=c[57328]|0;g=c[57326]|0;if((f|0)==(b|0)&(g|0)==(d|0)){i=e;return}h=e|0;be(h|0,202608,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=d,v)|0);j=e+32|0;be(j|0,202560,(v=i,i=i+16|0,c[v>>2]=b-f,c[v+8>>2]=d-g,v)|0);if(!(a[228944]|0)){pG(c[57328]|0,c[57326]|0)}g=uA(j|0)|0;f=g>>>0<(uA(h|0)|0)>>>0;g=c[10028]|0;do{if(f){aK(j|0,g|0);c[57234]=(c[57234]|0)+1;k=(c[7116]|0)+1|0;c[7116]=k;if((k|0)<=104){break}k=c[10028]|0;cf(k|0,202480,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=d,v)|0);c[7116]=1}else{aK(h|0,g|0);c[7116]=1}}while(0);a[228944]=1;c[57328]=b;c[57326]=d;i=e;return}function pI(b){b=b|0;var d=0,e=0,f=0,g=0;d=i;e=c[7118]|0;do{if((c[e>>2]|0)==2){if((a[e+112|0]&1)==0){f=16692;break}g=(b|0)%4&-1}else{f=16692}}while(0);if((f|0)==16692){g=(b|0)%9&-1}b=g+3|0;g=(b|0)<0?0:b;if((c[57432]|0)==(g|0)){i=d;return}a[228944]=0;if((c[7116]|0)!=0){b=c[10028]|0;aI(215952,7,1,b|0);c[7116]=0;a[228944]=0}c[57432]=g;h[28714]=+h[28715];cf(c[10028]|0,202624,(v=i,i=i+8|0,c[v>>2]=a[g+93672|0]|0,v)|0);c[7116]=0;i=d;return}function pJ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;g=c[7118]|0;do{if((c[g>>2]|0)==2){if((a[g+112|0]&1)==0){break}if((e|0)<0){h=0}else{h=(e&7)+1|0}j=c[10028]|0;k=c[228960+(h<<2)>>2]|0;cf(j|0,202896,(v=i,i=i+24|0,c[v>>2]=b,c[v+8>>2]=d,c[v+16>>2]=k,v)|0);a[228944]=0;c[7116]=0;c[57432]=-5;i=f;return}}while(0);if((e|0)<0){l=0}else{l=((e>>>0)%75>>>0)+1|0}e=c[229e3+(l<<2)>>2]|0;cf(c[10028]|0,202896,(v=i,i=i+24|0,c[v>>2]=b,c[v+8>>2]=d,c[v+16>>2]=e,v)|0);a[228944]=0;c[7116]=0;c[57432]=-5;i=f;return}function pK(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;lD(b,d,e,f,g);if((a[(c[7118]|0)+19|0]&1)!=0|(g|0)==0){return}if((c[7116]|0)!=0){h=c[10028]|0;aI(215952,7,1,h|0);c[7116]=0;a[228944]=0}aI(204880,19,1,c[10028]|0);lD(b,d,e,f,-g|0);if((c[7116]|0)!=0){g=c[10028]|0;aI(215952,7,1,g|0);c[7116]=0;a[228944]=0}aI(212688,9,1,c[10028]|0);return}function pL(b){b=b|0;var d=0,e=0,f=0,j=0,k=0,l=0,m=0.0,n=0.0;d=i;i=i+8|0;e=d|0;if((b|0)==0){f=16722}else{if((a[b]|0)==0){f=16722}else{j=b}}if((f|0)==16722){j=229744}f=bk(j|0,148464)|0;g[e>>2]=+g[7202];if((a[j+f|0]|0)==44){b=j+(f+1|0)|0;ca(b|0,205104,(v=i,i=i+8|0,c[v>>2]=e,v)|0)}do{if((f|0)==0){b=bP(229744)|0;k=bk(b|0,148464)|0;l=b}else{if((j|0)==0){k=f;l=0;break}k=f;l=bP(j|0)|0}}while(0);a[l+k|0]=0;if((k|0)!=0){j=0;do{f=l+j|0;if((a[f]|0)==32){a[f]=45}j=j+1|0;}while(j>>>0<k>>>0)}if((c[c[7118]>>2]|0)==3){tz(l);k=c[10028]|0;m=+g[e>>2]*+g[(c[7118]|0)+92>>2]*10.0;cf(k|0,205064,(v=i,i=i+16|0,c[v>>2]=l,h[v+8>>3]=m,v)|0);m=+g[e>>2];if(m!=+g[7200]){k=c[10028]|0;j=-~~(m*+g[(c[7118]|0)+92>>2]*10.0/3.0)|0;cf(k|0,205040,(v=i,i=i+8|0,c[v>>2]=j,v)|0);n=+g[e>>2]}else{n=m}g[7200]=n}uu(l);c[(c[3524]|0)+16>>2]=~~(+g[e>>2]*+g[(c[7118]|0)+92>>2]*10.0);c[(c[3524]|0)+20>>2]=~~(+g[e>>2]*+g[(c[7118]|0)+92>>2]*10.0*6.0/10.0);i=d;return 1}function pM(a){a=+a;var b=0;b=i;cf(c[10028]|0,205136,(v=i,i=i+8|0,h[v>>3]=a,v)|0);i=b;return}function pN(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0.0,n=0.0;j=i;if((c[7116]|0)!=0){k=c[10028]|0;aI(215952,7,1,k|0);c[7116]=0;a[228944]=0}k=b&15;if((k|0)==3){l=c[10028]|0;cf(l|0,205808,(v=i,i=i+32|0,c[v>>2]=d,c[v+8>>2]=e,c[v+16>>2]=f,c[v+24>>2]=g,v)|0);a[228944]=0;c[57432]=-5;i=j;return}else if((k|0)==5){aI(205528,32,1,c[10028]|0)}else if((k|0)==1|(k|0)==4){m=+(b>>4|0)/100.0;n=m<0.0?0.0:m;cf(c[10028]|0,205672,(v=i,i=i+40|0,h[v>>3]=n>1.0?1.0:n,c[v+8>>2]=d,c[v+16>>2]=e,c[v+24>>2]=f,c[v+32>>2]=g,v)|0);a[228944]=0;c[57432]=-5;i=j;return}else if((k|0)!=2){cf(c[10028]|0,205464,(v=i,i=i+32|0,c[v>>2]=d,c[v+8>>2]=e,c[v+16>>2]=f,c[v+24>>2]=g,v)|0);a[228944]=0;c[57432]=-5;i=j;return}k=(b>>4|0)%8&-1;if((k|0)==7){b=c[10028]|0;cf(b|0,205184,(v=i,i=i+48|0,c[v>>2]=d,c[v+8>>2]=e,c[v+16>>2]=f,c[v+24>>2]=g,c[v+32>>2]=40,c[v+40>>2]=-30,v)|0);a[228944]=0;c[57432]=-5;i=j;return}else if((k|0)==3){cf(c[10028]|0,205240,(v=i,i=i+32|0,c[v>>2]=d,c[v+8>>2]=e,c[v+16>>2]=f,c[v+24>>2]=g,v)|0);a[228944]=0;c[57432]=-5;i=j;return}else if((k|0)==1){cf(c[10028]|0,205352,(v=i,i=i+48|0,c[v>>2]=d,c[v+8>>2]=e,c[v+16>>2]=f,c[v+24>>2]=g,c[v+32>>2]=80,c[v+40>>2]=-45,v)|0);a[228944]=0;c[57432]=-5;i=j;return}else if((k|0)==2){cf(c[10028]|0,205312,(v=i,i=i+48|0,c[v>>2]=d,c[v+8>>2]=e,c[v+16>>2]=f,c[v+24>>2]=g,c[v+32>>2]=40,c[v+40>>2]=45,v)|0);a[228944]=0;c[57432]=-5;i=j;return}else if((k|0)==5){cf(c[10028]|0,205184,(v=i,i=i+48|0,c[v>>2]=d,c[v+8>>2]=e,c[v+16>>2]=f,c[v+24>>2]=g,c[v+32>>2]=80,c[v+40>>2]=-45,v)|0);a[228944]=0;c[57432]=-5;i=j;return}else if((k|0)==6){cf(c[10028]|0,205184,(v=i,i=i+48|0,c[v>>2]=d,c[v+8>>2]=e,c[v+16>>2]=f,c[v+24>>2]=g,c[v+32>>2]=40,c[v+40>>2]=30,v)|0);a[228944]=0;c[57432]=-5;i=j;return}else if((k|0)==4){cf(c[10028]|0,205184,(v=i,i=i+48|0,c[v>>2]=d,c[v+8>>2]=e,c[v+16>>2]=f,c[v+24>>2]=g,c[v+32>>2]=80,c[v+40>>2]=45,v)|0);a[228944]=0;c[57432]=-5;i=j;return}else{cf(c[10028]|0,205464,(v=i,i=i+32|0,c[v>>2]=d,c[v+8>>2]=e,c[v+16>>2]=f,c[v+24>>2]=g,v)|0);a[228944]=0;c[57432]=-5;i=j;return}}function pO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0;f=i;i=i+16|0;g=f|0;h=f+8|0;c[g>>2]=e;if((e|0)==0){b7()}pG(b,d);d=c[7230]|0;if((d|0)!=0){b=c[10028]|0;cf(b|0,202848,(v=i,i=i+8|0,c[v>>2]=d,v)|0)}L22516:do{if((c[11252]|0)==15){d=e;while(1){b=a[d]|0;if(b<<24>>24==0){j=16796;break L22516}if(b<<24>>24<0){break}else{d=d+1|0}}aF(91,c[10028]|0);ug(h,g);d=c[h>>2]|0;do{if((d|0)!=0){b=0;k=d;while(1){l=(b|0)==1;do{if(k>>>0<256){if(l){m=k}else{n=c[10028]|0;aF(40,n|0);m=c[h>>2]|0}if((m-40|0)>>>0<2|(m|0)==92){n=c[10028]|0;aF(92,n|0);o=c[h>>2]|0}else{o=m}n=o<<24>>24;p=c[10028]|0;aF(n|0,p|0);q=1}else{if(l){p=c[10028]|0;aF(41,p|0)}p=c[10028]|0;aF(47,p|0);p=c[7114]|0;n=c[18090]|0;r=c[h>>2]|0;s=0;while(1){if((s|0)>=(p|0)){t=p;break}if((c[n+(s<<3)>>2]|0)==(r|0)){j=16786;break}else{s=s+1|0}}if((j|0)==16786){j=0;r=c[n+(s<<3)+4>>2]|0;p=c[10028]|0;aK(r|0,p|0);t=c[7114]|0}if((s|0)<(t|0)){q=2;break}p=c[h>>2]|0;cf(c[10028]|0,(p>>>0>65535?215776:215728)|0,(v=i,i=i+8|0,c[v>>2]=p,v)|0);q=2}}while(0);ug(h,g);l=c[h>>2]|0;if((l|0)==0){break}else{b=q;k=l}}if((q|0)!=1){break}aF(41,c[10028]|0)}}while(0);d=c[7198]|0;if((d|0)==1){k=c[10028]|0;aI(202768,9,1,k|0);break}else if((d|0)==0){aI(202832,9,1,c[10028]|0);break}else if((d|0)==2){aI(202736,9,1,c[10028]|0);break}else{break}}else{j=16796}}while(0);do{if((j|0)==16796){q=c[10028]|0;aF(40,q|0);q=e+1|0;c[g>>2]=q;t=a[e]|0;o=t<<24>>24;c[h>>2]=o;if(t<<24>>24!=0){m=t;t=q;q=o;while(1){if((m-40&255)<2|m<<24>>24==92){o=c[10028]|0;aF(92,o|0);u=c[h>>2]|0}else{u=q}aF(u<<24>>24|0,c[10028]|0);w=t+1|0;o=a[t]|0;d=o<<24>>24;c[h>>2]=d;if(o<<24>>24==0){break}else{m=o;t=w;q=d}}c[g>>2]=w}q=c[7198]|0;if((q|0)==2){t=c[10028]|0;aI(202632,8,1,t|0);break}else if((q|0)==1){aI(202648,8,1,c[10028]|0);break}else if((q|0)==0){aI(202680,8,1,c[10028]|0);break}else{break}}}while(0);if((c[7230]|0)==0){c[7116]=0;a[228944]=0;i=f;return}aI(212688,9,1,c[10028]|0);c[7116]=0;a[228944]=0;i=f;return}function pP(b){b=+b;var d=0,e=0;d=i;e=c[7116]|0;if((e|0)!=0&+h[28714]==b){i=d;return}if((e|0)!=0){e=c[10028]|0;aI(215952,7,1,e|0);c[7116]=0;a[228944]=0}h[28715]=b;c[57432]=-5;cf(c[10028]|0,205832,(v=i,i=i+8|0,h[v>>3]=b,v)|0);i=d;return}function pQ(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0;d=i;i=i+8|0;e=d|0;if((b|0)==0){i=d;return 0}aI(210952,29,1,c[10028]|0);cf(c[10028]|0,210928,(v=i,i=i+8|0,c[v>>2]=c[5168],v)|0);f=0;do{aK(c[34936+(f<<2)>>2]|0,c[10028]|0);f=f+1|0;}while((f|0)!=27);f=c[5163]|0;L22585:do{if((f|0)==100){g=c[10028]|0;aI(210800,28,1,g|0);ty();g=c[b+44>>2]|0;j=c[b+40>>2]|0;tA(209040,g,j,0);tA(209e3,g,j,8);tA(208976,g,j,16);tA(208856,g,j,24)}else if((f|0)==99|(f|0)==102){c[e>>2]=0;aI(210800,28,1,c[10028]|0);ty();j=c[7118]|0;g=fs(0,c[j+100>>2]|0,+h[j+104>>3],e)|0;j=c[e>>2]|0;tA(209040,g,j,0);tA(209e3,g,j,8);tA(208976,g,j,16);tA(208856,g,j,24);uu(g)}else if((f|0)==103){aI(210856,29,1,c[10028]|0)}else if((f|0)==114){aI(210856,29,1,c[10028]|0);if((a[20684]|0)!=0){g=c[7122]|0;if((a[g]|0)==0){break}else{k=0;l=0;n=g}while(1){g=c[28488+((l|1)<<2)>>2]|0;cf(c[10028]|0,207920,(v=i,i=i+24|0,c[v>>2]=k,c[v+8>>2]=n,c[v+16>>2]=g,v)|0);k=k+1|0;l=k<<1;n=c[28488+(l<<2)>>2]|0;if((a[n]|0)==0){break L22585}}}g=c[5164]|0;j=(g|0)>-1?g:-g|0;g=j<<1;o=c[28488+(g<<2)>>2]|0;p=c[28488+((g|1)<<2)>>2]|0;cf(c[10028]|0,207920,(v=i,i=i+24|0,c[v>>2]=j,c[v+8>>2]=o,c[v+16>>2]=p,v)|0);p=c[5165]|0;o=(p|0)>-1?p:-p|0;p=c[5164]|0;if((o|0)==(((p|0)>-1?p:-p|0)|0)){q=p}else{p=c[10028]|0;j=o<<1;g=c[28488+(j<<2)>>2]|0;r=c[28488+((j|1)<<2)>>2]|0;cf(p|0,207920,(v=i,i=i+24|0,c[v>>2]=o,c[v+8>>2]=g,c[v+16>>2]=r,v)|0);q=c[5164]|0}r=c[5166]|0;g=(r|0)>-1?r:-r|0;if((g|0)==(((q|0)>-1?q:-q|0)|0)){break}r=c[5165]|0;if((g|0)==(((r|0)>-1?r:-r|0)|0)){break}r=g<<1;o=c[28488+(r<<2)>>2]|0;p=c[28488+((r|1)<<2)>>2]|0;cf(c[10028]|0,207920,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=o,c[v+16>>2]=p,v)|0)}else{cf(c[m>>2]|0,210704,(v=i,i=i+24|0,c[v>>2]=210640,c[v+8>>2]=2883,c[v+16>>2]=f<<24>>24,v)|0)}}while(0);aI(210600,37,1,c[10028]|0);aI(210528,67,1,c[10028]|0);cf(c[10028]|0,210480,(v=i,i=i+8|0,h[v>>3]=+h[2705],v)|0);aI(209304,12,1,c[10028]|0);f=c[b+48>>2]|0;if((f|0)==121){b=c[10028]|0;aI(209160,5,1,b|0)}else if((f|0)==114){aI(209216,5,1,c[10028]|0)}else if((f|0)==120){aI(209152,5,1,c[10028]|0)}else if((f|0)==99){aI(209200,5,1,c[10028]|0)}else if((f|0)==104){aI(209208,5,1,c[10028]|0)}else{cf(c[m>>2]|0,209064,(v=i,i=i+24|0,c[v>>2]=210640,c[v+8>>2]=2794,c[v+16>>2]=f<<24>>24,v)|0);aI(209216,5,1,c[10028]|0)}aI(209056,5,1,c[10028]|0);f=c[10028]|0;if((c[5163]|0)==103){aI(210440,30,1,f|0)}else{aI(210368,51,1,f|0)}aI(210312,55,1,c[10028]|0);aI(210184,53,1,c[10028]|0);aI(210040,42,1,c[10028]|0);aI(210008,5,1,c[10028]|0);aI(209864,27,1,c[10028]|0);f=c[5164]|0;if((f|0)<0){b=c[10028]|0;aI(209784,11,1,b|0);s=c[5164]|0}else{s=f}cf(c[10028]|0,209696,(v=i,i=i+8|0,c[v>>2]=(s|0)>-1?s:-s|0,v)|0);s=c[5165]|0;if((s|0)<0){f=c[10028]|0;aI(209784,11,1,f|0);t=c[5165]|0}else{t=s}cf(c[10028]|0,209664,(v=i,i=i+8|0,c[v>>2]=(t|0)>-1?t:-t|0,v)|0);t=c[5166]|0;if((c[5165]|c[5164]|t|0)<0){s=c[10028]|0;aI(84248,2,1,s|0);u=c[5166]|0}else{u=t}if((u|0)<0){t=c[10028]|0;aI(209784,11,1,t|0);w=c[5166]|0}else{w=u}cf(c[10028]|0,209648,(v=i,i=i+8|0,c[v>>2]=(w|0)>-1?w:-w|0,v)|0);aI(209584,42,1,c[10028]|0);aI(209568,11,1,c[10028]|0);aI(209552,3,1,c[10028]|0);aI(209344,55,1,c[10028]|0);aI(213784,9,1,c[10028]|0);i=d;return 0}function pR(){var b=0;if((c[7116]|0)!=0){b=c[10028]|0;aI(215952,7,1,b|0);c[7116]=0;a[228944]=0}aI(211040,30,1,c[10028]|0);return}function pS(b){b=b|0;var d=0,e=0.0,f=0,g=0,j=0,k=0.0,l=0.0,m=0,n=0,o=0,p=0;d=i;c[57432]=-5;e=+h[28715];if(+h[28714]!=e){h[28714]=e;f=c[10028]|0;aI(211272,3,1,f|0)}f=b|0;g=c[f>>2]|0;if((g|0)==3){j=c[b+4>>2]|0;e=+(j>>>16&255|0)/255.0;k=+(j>>>8&255|0)/255.0;l=+(j&255|0)/255.0;if((c[7116]|0)!=0){j=c[10028]|0;aI(215952,7,1,j|0);c[7116]=0;a[228944]=0}j=c[10028]|0;cf(j|0,211112,(v=i,i=i+24|0,h[v>>3]=e,h[v+8>>3]=k,h[v+16>>3]=l,v)|0);m=16871}else if((g|0)==1){j=c[b+4>>2]|0;if((c[7116]|0)!=0){n=c[10028]|0;aI(215952,7,1,n|0);c[7116]=0;a[228944]=0}n=c[7118]|0;do{if((c[n>>2]|0)==2){if((a[n+112|0]&1)==0){m=16866;break}o=(j|0)%4&-1}else{m=16866}}while(0);if((m|0)==16866){o=(j|0)%9&-1}j=o+3|0;cf(c[10028]|0,211192,(v=i,i=i+8|0,c[v>>2]=a[93672+((j|0)<0?0:j)|0]|0,v)|0);m=16871}else{p=g}if((m|0)==16871){p=c[f>>2]|0}if((p|0)!=5){i=d;return}l=+h[b+8>>3];do{if(l>0.0){b=c[10028]|0;if(l<1.0){k=+(~~(l*1.0e4+.5)|0)*1.0e-4;be(25336,141840,(v=i,i=i+8|0,h[v>>3]=k,v)|0);p=(a[25336]|0)==48&(a[25337]|0)==46?25337:25336;cf(b|0,211072,(v=i,i=i+8|0,c[v>>2]=p,v)|0);break}else{aI(211080,4,1,b|0);break}}else{b=c[10028]|0;aI(211104,4,1,b|0)}}while(0);a[228944]=0;i=d;return}function pT(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0;e=i;f=c[d+8>>2]|0;if(a[228944]&(c[7116]|0)!=0){g=c[10028]|0;aI(215952,7,1,g|0);c[7116]=0;a[228944]=0}if((b|0)==4&(f|0)==1601){g=c[10028]|0;j=d|0;k=c[j>>2]|0;l=d+4|0;m=c[l>>2]|0;cf(g|0,211680,(v=i,i=i+16|0,c[v>>2]=k,c[v+8>>2]=m,v)|0);m=c[10028]|0;k=c[d+24>>2]|0;g=(c[d+36>>2]|0)-k|0;n=c[d+28>>2]|0;o=(c[d+40>>2]|0)-n|0;p=c[d+12>>2]|0;q=k-p|0;k=c[d+16>>2]|0;r=n-k|0;n=p-(c[j>>2]|0)|0;j=k-(c[l>>2]|0)|0;cf(m|0,211600,(v=i,i=i+48|0,c[v>>2]=g,c[v+8>>2]=o,c[v+16>>2]=q,c[v+24>>2]=r,c[v+32>>2]=n,c[v+40>>2]=j,v)|0);a[228944]=0;i=e;return}j=f>>4;n=f&15;aI(211544,6,1,c[10028]|0);f=c[d+4>>2]|0;cf(c[10028]|0,211680,(v=i,i=i+16|0,c[v>>2]=c[d>>2],c[v+8>>2]=f,v)|0);if((b|0)>1){f=1;do{r=c[10028]|0;q=c[d+(f*12&-1)>>2]|0;if(((f|0)%105&-1|0)==0){o=c[d+(f*12&-1)+4>>2]|0;cf(r|0,211480,(v=i,i=i+16|0,c[v>>2]=q,c[v+8>>2]=o,v)|0)}else{o=f-1|0;g=q-(c[d+(o*12&-1)>>2]|0)|0;q=(c[d+(f*12&-1)+4>>2]|0)-(c[d+(o*12&-1)+4>>2]|0)|0;cf(r|0,211528,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=q,v)|0)}f=f+1|0;}while((f|0)<(b|0))}if((n|0)==1|(n|0)==4){s=+(j|0)/100.0;t=s<0.0?0.0:s;b=c[10028]|0;if(t<1.0){s=t;cf(b|0,211448,(v=i,i=i+8|0,h[v>>3]=s,v)|0);a[228944]=0;i=e;return}else{aI(211464,12,1,b|0);a[228944]=0;i=e;return}}else if((n|0)==5){aI(211416,31,1,c[10028]|0)}else if((n|0)!=2){aI(211464,12,1,c[10028]|0);a[228944]=0;i=e;return}n=(j|0)%8&-1;j=c[10028]|0;if((n|0)==0){cf(j|0,211400,(v=i,i=i+8|0,h[v>>3]=.5,v)|0);a[228944]=0;i=e;return}else{cf(j|0,211360,(v=i,i=i+8|0,c[v>>2]=n,v)|0);a[228944]=0;i=e;return}}function pU(){if(!(a[237912]|0)){return}aI(215624,3,1,c[10028]|0);a[237912]=0;return}function pV(b,e,f,g,j){b=b|0;e=e|0;f=f|0;g=g|0;j=j|0;var k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aG=0,aH=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0;k=i;i=i+24|0;l=k|0;n=k+8|0;o=k+16|0;p=c[5168]|0;q=(p|0)>0?p:256;do{if((q|0)>1){p=1;r=0;do{r=r+1&65535;p=p<<1;}while((p|0)<(q|0));if(r<<16>>16==0|(r&65535)>12){s=r;break}do{if((r&65535)>8){t=12}else{if((r&65535)>4){t=8;break}t=(r&65535)>2?4:r}}while(0);r=(j|0)==1;do{if(r){u=16922}else{p=c[5163]|0;if((p|0)==103){u=16922;break}else if((p|0)!=114){w=1.0;x=0;break}if((a[(c[7118]|0)+17|0]&1)==0){u=16922}else{w=1.0;x=0}}}while(0);if((u|0)==16922){w=+((1<<(t&65535))-1|0)/+(q-1|0);x=1}p=t&65535;y=a[(c[7118]|0)+16|0]&1;z=l|0;A=aa(aa(aa(r?3:1,b),p)+7|0,e);if(y<<24>>24==0){y=((A>>>5)*5&-1)+7|0;B=((y|0)/78&-1)+y|0}else{y=(A>>>2)+1|0;B=((y|0)/78&-1)+y|0}y=ut(B)|0;do{if((y|0)==0){gk();A=ut(B)|0;if((A|0)!=0){C=A;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=211936,v)|0)}else{C=y}}while(0);y=aa(e,b);if(r){D=y*3&-1;E=b*3&-1}else{D=y;E=b}L22728:do{if((D|0)==0){F=C}else{G=+(q|0);A=q-1|0;H=A&65535;I=l+1|0;J=l+2|0;K=l+3|0;L=l+4|0;M=32;N=0;O=0;P=0;Q=C;R=78;S=f;T=D;while(1){U=S+8|0;V=~~(G*+h[S>>3]);W=~~(w*+((((V&65535|0)>(A|0)?H:V)&65535)>>>0));V=M&65535;if((M&65535)<(t&65535)){X=p-V|0;Y=(W&65535)>>>((X&65535)>>>0)|O<<V;Z=X&65535;_=0}else{Y=W&65535|O<<p;Z=N;_=M-t&65535}X=P+1|0;if((X|0)==(E|0)){V=_&7;$=0;ab=Y<<(V&65535);ac=_-V&65535}else{$=X;ab=Y;ac=_}if(ac<<16>>16==0){do{if((a[(c[7118]|0)+16|0]&1)==0){if((ab|0)!=0){X=(ab>>>0)/52200625>>>0;V=X&255;a[z]=V;ad=aa(X,-52200625)+ab|0;X=(ad>>>0)/614125>>>0;a[I]=X&255;ae=((X&255)*-614125&-1)+ad|0;ad=(ae>>>0)/7225>>>0;a[J]=ad&255;X=ae+((ad&255)*-7225&-1)|0;ad=(X>>>0)/85>>>0;a[K]=ad&255;a[L]=X+((ad&255)*-85&-1)&255;ad=Q+1|0;a[Q]=V+33&255;V=R<<16>>16==1;X=V?Q+2|0:ad;a[ad]=V?10:0;ad=X+1|0;a[X]=(a[I]|0)+33&255;ae=V?77:R-2&65535;V=ae<<16>>16==0;af=V?X+2|0:ad;a[ad]=V?10:0;ad=af+1|0;a[af]=(a[J]|0)+33&255;X=V?77:ae-1&65535;ae=X<<16>>16==0;V=ae?af+2|0:ad;a[ad]=ae?10:0;ad=V+1|0;a[V]=(a[K]|0)+33&255;af=ae?77:X-1&65535;X=af<<16>>16==0;ae=X?V+2|0:ad;a[ad]=X?10:0;ad=ae+1|0;a[ae]=(a[L]|0)+33&255;V=X?77:af-1&65535;af=V<<16>>16==0;a[ad]=af?10:0;ag=af?78:V;ah=af?ae+2|0:ad;break}ad=Q+1|0;a[Q]=122;ae=R-1&65535;if(ae<<16>>16!=0){ag=ae;ah=ad;break}a[ad]=10;ag=78;ah=Q+2|0}else{ad=ab>>>4;ae=ab>>>8;af=ab>>>12;V=ab>>>16;X=ab>>>20;ai=ab>>>24;aj=ab>>>28;ak=Q+1|0;be(Q|0,211896,(v=i,i=i+8|0,c[v>>2]=aj,v)|0);aj=R-1&65535;if(aj<<16>>16==0){a[ak]=10;al=78;am=Q+2|0}else{al=aj;am=ak}ak=am+1|0;aj=ai&15;be(am|0,211896,(v=i,i=i+8|0,c[v>>2]=aj,v)|0);aj=al-1&65535;if(aj<<16>>16==0){a[ak]=10;an=78;ao=am+2|0}else{an=aj;ao=ak}ak=ao+1|0;aj=X&15;be(ao|0,211896,(v=i,i=i+8|0,c[v>>2]=aj,v)|0);aj=an-1&65535;if(aj<<16>>16==0){a[ak]=10;ap=78;aq=ao+2|0}else{ap=aj;aq=ak}ak=aq+1|0;aj=V&15;be(aq|0,211896,(v=i,i=i+8|0,c[v>>2]=aj,v)|0);aj=ap-1&65535;if(aj<<16>>16==0){a[ak]=10;ar=78;as=aq+2|0}else{ar=aj;as=ak}ak=as+1|0;aj=af&15;be(as|0,211896,(v=i,i=i+8|0,c[v>>2]=aj,v)|0);aj=ar-1&65535;if(aj<<16>>16==0){a[ak]=10;at=78;au=as+2|0}else{at=aj;au=ak}ak=au+1|0;aj=ae&15;be(au|0,211896,(v=i,i=i+8|0,c[v>>2]=aj,v)|0);aj=at-1&65535;if(aj<<16>>16==0){a[ak]=10;av=78;aw=au+2|0}else{av=aj;aw=ak}ak=aw+1|0;aj=ad&15;be(aw|0,211896,(v=i,i=i+8|0,c[v>>2]=aj,v)|0);aj=av-1&65535;if(aj<<16>>16==0){a[ak]=10;ax=78;ay=aw+2|0}else{ax=aj;ay=ak}ak=ay+1|0;aj=ab&15;be(ay|0,211896,(v=i,i=i+8|0,c[v>>2]=aj,v)|0);aj=ax-1&65535;if(aj<<16>>16!=0){ag=aj;ah=ak;break}a[ak]=10;ag=78;ah=ay+2|0}}while(0);if(Z<<16>>16==0){az=0}else{ak=W&65535;aj=Z&65535;az=ak-(ak>>>(aj>>>0)<<aj)|0}aA=ag;aB=ah;aC=az;aD=0;aE=32-Z&65535}else{aA=R;aB=Q;aC=ab;aD=Z;aE=ac}aj=T-1|0;if((aj|0)==0){break}else{M=aE;N=aD;O=aC;P=$;Q=aB;R=aA;S=U;T=aj}}T=aE&65535;if((aE&65535)>=32){F=aB;break}S=4-(T>>>3)|0;if((a[(c[7118]|0)+16|0]&1)==0){R=aC<<T;T=(R>>>0)/52200625>>>0;Q=T&255;a[z]=Q;P=aa(T,-52200625)+R|0;R=(P>>>0)/614125>>>0;a[I]=R&255;T=((R&255)*-614125&-1)+P|0;P=(T>>>0)/7225>>>0;a[J]=P&255;R=T+((P&255)*-7225&-1)|0;P=(R>>>0)/85>>>0;a[K]=P&255;a[L]=R+((P&255)*-85&-1)&255;if((S|0)<0){F=aB;break}P=aB+1|0;a[aB]=Q+33&255;Q=aA-1&65535;R=Q<<16>>16==0;T=R?aB+2|0:P;a[P]=R?10:0;if((S|0)<1){F=T;break}else{aG=1;aH=Q;aJ=R;aK=T}while(1){T=aG+1|0;R=aK+1|0;a[aK]=(a[l+aG|0]|0)+33&255;Q=aJ?77:aH-1&65535;P=Q<<16>>16==0;O=P?aK+2|0:R;a[R]=P?10:0;if((T|0)>(S|0)){F=O;break L22728}else{aG=T;aH=Q;aJ=P;aK=O}}}L=S<<1;if((L|0)>0){aL=aC;aM=L}else{F=aB;break}while(1){K=aM-1|0;a[n+K|0]=aL&15;if((K|0)>0){aL=aL>>>4;aM=K}else{aN=aB;aO=aA;aP=0;break}}while(1){S=aN+1|0;be(aN|0,211896,(v=i,i=i+8|0,c[v>>2]=d[n+aP|0]|0,v)|0);K=aO-1&65535;if(K<<16>>16==0){a[S]=10;aQ=78;aR=aN+2|0}else{aQ=K;aR=S}S=aP+1|0;if((S|0)<(L|0)){aN=aR;aO=aQ;aP=S}else{F=aR;break}}}}while(0);if((a[(c[7118]|0)+16|0]&1)==0){a[F]=a[211872]|0;a[F+1|0]=a[211873|0]|0;a[F+2|0]=a[211874|0]|0;aS=F+2|0}else{aS=F}z=aS-C|0;if((z|0)>(B|0)){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=211696,v)|0)}aI(214464,15,1,c[10028]|0);r=c[g+24>>2]|0;L=c[g+28>>2]|0;S=c[g+40>>2]|0;K=c[g+36>>2]|0;cf(c[10028]|0,214416,(v=i,i=i+64|0,c[v>>2]=r,c[v+8>>2]=L,c[v+16>>2]=r,c[v+24>>2]=S,c[v+32>>2]=K,c[v+40>>2]=S,c[v+48>>2]=K,c[v+56>>2]=L,v)|0);do{if(x){if((a[(c[7118]|0)+16|0]&1)==0){L=c[10028]|0;aI(214344,62,1,L|0);L=c[10028]|0;K=g|0;S=c[K>>2]|0;r=g+4|0;J=c[r>>2]|0;cf(L|0,214312,(v=i,i=i+16|0,c[v>>2]=S,c[v+8>>2]=J,v)|0);J=c[10028]|0;S=g+12|0;L=(c[S>>2]|0)-(c[K>>2]|0)|0;cf(J|0,214296,(v=i,i=i+8|0,c[v>>2]=L,v)|0);L=c[10028]|0;J=(c[g+16>>2]|0)-(c[r>>2]|0)|0;cf(L|0,214272,(v=i,i=i+8|0,c[v>>2]=J,v)|0);J=c[10028]|0;L=(c[K>>2]|0)-(c[S>>2]|0)|0;cf(J|0,214296,(v=i,i=i+8|0,c[v>>2]=L,v)|0);L=c[10028]|0;J=c[K>>2]|0;K=c[r>>2]|0;cf(L|0,214256,(v=i,i=i+16|0,c[v>>2]=J,c[v+8>>2]=K,v)|0);K=c[10028]|0;aI(214128,67,1,K|0);K=c[10028]|0;cf(K|0,213920,(v=i,i=i+8|0,c[v>>2]=z,v)|0);K=c[10028]|0;aI(213848,38,1,K|0);tx(b,e,g,j,t);K=c[10028]|0;aI(213784,9,1,K|0);break}else{tx(b,e,g,j,t);break}}else{K=q-1|0;G=1.0/+(K|0);if((a[(c[7118]|0)+16|0]&1)==0){J=c[10028]|0;aI(214344,62,1,J|0);J=c[10028]|0;L=g|0;r=c[L>>2]|0;S=g+4|0;I=c[S>>2]|0;cf(J|0,214312,(v=i,i=i+16|0,c[v>>2]=r,c[v+8>>2]=I,v)|0);I=c[10028]|0;r=g+12|0;J=(c[r>>2]|0)-(c[L>>2]|0)|0;cf(I|0,214296,(v=i,i=i+8|0,c[v>>2]=J,v)|0);J=c[10028]|0;I=g+16|0;O=(c[I>>2]|0)-(c[S>>2]|0)|0;cf(J|0,214272,(v=i,i=i+8|0,c[v>>2]=O,v)|0);O=c[10028]|0;J=(c[L>>2]|0)-(c[r>>2]|0)|0;cf(O|0,214296,(v=i,i=i+8|0,c[v>>2]=J,v)|0);J=c[10028]|0;O=c[L>>2]|0;P=c[S>>2]|0;cf(J|0,214256,(v=i,i=i+16|0,c[v>>2]=O,c[v+8>>2]=P,v)|0);P=c[10028]|0;cf(P|0,213648,(v=i,i=i+8|0,c[v>>2]=z,v)|0);P=c[10028]|0;aI(213608,4,1,P|0);aT=L;aU=S;aV=r;aW=I}else{aT=g|0;aU=g+4|0;aV=g+12|0;aW=g+16|0}I=c[10028]|0;aI(213600,6,1,I|0);I=c[10028]|0;r=c[aT>>2]|0;S=c[aU>>2]|0;cf(I|0,213576,(v=i,i=i+16|0,c[v>>2]=r,c[v+8>>2]=S,v)|0);S=c[10028]|0;r=(c[aV>>2]|0)-(c[aT>>2]|0)|0;I=(c[aW>>2]|0)-(c[aU>>2]|0)|0;cf(S|0,213528,(v=i,i=i+16|0,c[v>>2]=r,c[v+8>>2]=I,v)|0);I=c[10028]|0;aI(213504,17,1,I|0);I=c[10028]|0;cf(I|0,213456,(v=i,i=i+8|0,c[v>>2]=K,v)|0);K=o|0;I=o+1|0;r=o+2|0;S=0;L=0;while(1){fr(G*+(S|0),o);if(L<<16>>16==0){P=c[10028]|0;aI(152656,3,1,P|0);aX=8}else{aX=L}P=d[I]|0;O=d[r]|0;cf(c[10028]|0,213376,(v=i,i=i+24|0,c[v>>2]=d[K]|0,c[v+8>>2]=P,c[v+16>>2]=O,v)|0);O=S+1|0;if((O|0)<(q|0)){S=O;L=aX-1&65535}else{break}}aI(213312,21,1,c[10028]|0);aI(213272,15,1,c[10028]|0);cf(c[10028]|0,213216,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=e,v)|0);cf(c[10028]|0,213144,(v=i,i=i+24|0,c[v>>2]=p,c[v+8>>2]=b,c[v+16>>2]=e,v)|0);cf(c[10028]|0,213120,(v=i,i=i+8|0,c[v>>2]=(1<<p)-1,v)|0);L=c[10028]|0;if((a[(c[7118]|0)+16|0]&1)==0){aI(212968,48,1,L|0)}else{S=(aa(p,y)+7|0)>>>3;cf(L|0,213920,(v=i,i=i+8|0,c[v>>2]=S,v)|0);S=c[10028]|0;aI(213056,55,1,S|0)}aI(212936,29,1,c[10028]|0);aI(212896,30,1,c[10028]|0);if((a[(c[7118]|0)+16|0]&1)!=0){break}aI(213784,9,1,c[10028]|0)}}while(0);if((z|0)>0){y=0;p=C;while(1){aF(a[p]|0|0,c[10028]|0);S=y+1|0;if((S|0)<(z|0)){y=S;p=p+1|0}else{break}}}p=c[10028]|0;if((a[(c[7118]|0)+16|0]&1)==0){aI(212776,39,1,p|0)}else{aI(212832,10,1,p|0)}aI(212688,9,1,c[10028]|0);aI(212656,13,1,c[10028]|0);uu(C);i=k;return}else{s=0}}while(0);cf(c[m>>2]|0,214504,(v=i,i=i+8|0,c[v>>2]=s&65535,v)|0);i=k;return}function pW(b,d,e,f,g,j){b=b|0;d=+d;e=+e;f=f|0;g=g|0;j=j|0;var k=0,l=0,m=0,n=0,o=0;k=i;if((j|0)==4){l=c[10028]|0;aI(215544,10,1,l|0);i=k;return}else if((j|0)==3){aI(215600,7,1,c[10028]|0);i=k;return}else{if(a[237912]|0){i=k;return}l=(uA(b|0)|0)+40|0;uu(c[59476]|0);m=ut(l)|0;do{if((m|0)==0){gk();n=ut(l)|0;if((n|0)!=0){o=n;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=215504,v)|0)}else{o=m}}while(0);c[59476]=o;tz(b);a0(c[59476]|0,l|0,215400,(v=i,i=i+48|0,c[v>>2]=b,h[v+8>>3]=d,h[v+16>>3]=e,c[v+24>>2]=f?225e3:224992,c[v+32>>2]=g?225e3:224992,c[v+40>>2]=j,v)|0);cf(c[10028]|0,215368,(v=i,i=i+8|0,c[v>>2]=c[59476],v)|0);a[237912]=1;i=k;return}}function pX(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;d=i;i=i+16|0;e=d|0;f=d+8|0;g=c[11252]|0;if((g|0)!=15){h=(g|0)==14;g=c[10028]|0;aF(b|0,g|0);if(!h){i=d;return}if(a[238472]|0){a[238472]=0;if((b|0)!=92){i=d;return}h=c[10028]|0;aF(92,h|0);i=d;return}else{if((b&128|0)==0){i=d;return}a[238472]=1;i=d;return}}if((b&128|0)==0){h=c[10028]|0;aF(b|0,h|0);i=d;return}h=c[59616]|0;if((h|0)==0){do{if((b&224|0)==192){j=2;k=17022}else{if((b&240|0)==224){j=3;k=17022;break}g=(b&248|0)==240;c[59614]=g?4:0;if(g){break}g=c[10028]|0;aF(b|0,g|0);i=d;return}}while(0);if((k|0)==17022){c[59614]=j}c[59616]=1;a[238448]=b&255;i=d;return}j=h+1|0;c[59616]=j;a[h+238448|0]=b&255;b=c[59614]|0;if((j|0)<(b|0)){i=d;return}c[e>>2]=0;c[f>>2]=238448;a[b+238448|0]=0;c[59616]=0;ug(e,f);f=c[e>>2]|0;if(f>>>0<256){b=c[10028]|0;aF(f|0,b|0);i=d;return}if(a[237912]|0){b=c[10028]|0;aI(215624,3,1,b|0);a[237912]=0}cf(c[10028]|0,215784,(v=i,i=i+8|0,c[v>>2]=c[59476],v)|0);b=c[7114]|0;f=c[18090]|0;j=c[e>>2]|0;h=0;while(1){if((h|0)>=(b|0)){l=b;break}if((c[f+(h<<3)>>2]|0)==(j|0)){k=17034;break}else{h=h+1|0}}if((k|0)==17034){k=c[f+(h<<3)+4>>2]|0;f=c[10028]|0;aK(k|0,f|0);l=c[7114]|0}if((h|0)>=(l|0)){l=c[10028]|0;h=c[e>>2]|0;e=h>>>0>65535?215776:215728;cf(l|0,e|0,(v=i,i=i+8|0,c[v>>2]=h,v)|0)}aI(89968,2,1,c[10028]|0);a[237912]=0;i=d;return}function pY(a){a=a|0;var b=0,d=0,e=0;b=i;if((a|0)==13){d=c[10028]|0;cf(d|0,93784,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);i=b;return}else if((a|0)==7){cf(c[10028]|0,215840,(v=i,i=i+8|0,c[v>>2]=c[57434],v)|0);i=b;return}else if((a|0)==0){c[57434]=0;i=b;return}else if((a|0)==6){d=c[10028]|0;e=(c[57434]|0)+1|0;c[57434]=e;cf(d|0,215920,(v=i,i=i+8|0,c[v>>2]=e,v)|0);i=b;return}else if((a|0)==12){cf(c[10028]|0,93800,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);i=b;return}else{i=b;return}}function pZ(b){b=b|0;var d=0;if((b|0)==0){if((c[7116]|0)!=0){d=c[10028]|0;aI(215952,7,1,d|0);c[7116]=0;a[228944]=0}a[229704]=1;return}else if((b|0)==1){aI(78256,2,1,c[10028]|0);if((c[7116]|0)==0){return}aI(215952,7,1,c[10028]|0);c[7116]=0;a[228944]=0;return}else{return}}function p_(){aI(215984,51,1,c[10030]|0);return}function p$(){aI(216040,6,1,c[10030]|0);return}function p0(){aI(216080,9,1,c[10030]|0);return}function p1(){aI(216176,5,1,c[10030]|0);return}function p2(a,b){a=a|0;b=b|0;var d=0;d=i;cf(c[10030]|0,216272,(v=i,i=i+16|0,c[v>>2]=a+1e3,c[v+8>>2]=6999-b,v)|0);i=d;return}function p3(a,b){a=a|0;b=b|0;var d=0;d=i;cf(c[10030]|0,216304,(v=i,i=i+16|0,c[v>>2]=a+1e3,c[v+8>>2]=6999-b,v)|0);i=d;return}function p4(a){a=a|0;var b=0,d=0;b=i;c[6954]=a;if((a|0)>8){d=(a|0)%9&-1}else{d=a}a=d+2|0;cf(c[10030]|0,216464,(v=i,i=i+8|0,c[v>>2]=c[228840+(a<<2)>>2],v)|0);d=c[228888+(a<<2)>>2]|0;if((d|0)==1){a=c[10030]|0;aI(216400,16,1,a|0);i=b;return}else if((d|0)==3){aI(216352,16,1,c[10030]|0);i=b;return}else if((d|0)==2){aI(216376,16,1,c[10030]|0);i=b;return}else{aI(216344,4,1,c[10030]|0);i=b;return}}function p5(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=i;cf(c[10030]|0,216272,(v=i,i=i+16|0,c[v>>2]=b+1e3,c[v+8>>2]=6959-d,v)|0);aI(216552,5,1,c[10030]|0);d=e;while(1){e=a[d]|0;b=d+1|0;g=e<<24>>24;if((e<<24>>24|0)==94){h=c[10030]|0;aF(94,h|0)}else if((e<<24>>24|0)==0){break}aF(g|0,c[10030]|0);d=b}aI(216504,6,1,c[10030]|0);p4(c[6954]|0);i=f;return}function p6(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0.0,_=0,$=0.0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0.0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0.0,aM=0,aN=0;b=i;i=i+200|0;d=b|0;e=b+24|0;f=b+48|0;g=b+72|0;j=b+96|0;k=b+120|0;l=b+144|0;m=b+168|0;n=b+192|0;if((c[13898]|0)==2){o=2}else{c[56738]=6e3;c[56734]=4800;a[228464]=0;uu(c[57106]|0);c[57106]=bP(216600)|0;h[28551]=12.0;p=c[57122]|0;if((p|0)!=0){uu(p)}c[57122]=0;a[228312]=0;a[226968]=0;uu(c[57076]|0);c[57076]=0;uu(c[56744]|0);c[56744]=0;a[228360]=0;a[228336]=0;o=c[13898]|0}p=c[8272]|0;L22958:do{if((o|0)<(p|0)){q=k|0;r=k+8|0;s=j|0;t=j+8|0;u=g|0;w=g+8|0;x=d|0;y=d+8|0;z=e|0;A=e+8|0;B=f|0;C=f+8|0;D=m|0;E=m+8|0;F=l|0;G=l+8|0;H=o;I=p;L22960:while(1){J=c[1054]|0;K=(a[J+(H*40&-1)|0]&1)==0;L=c[J+(H*40&-1)+36>>2]|0;M=J+(H*40&-1)+32|0;L22962:do{if(K){N=c[M>>2]|0;O=17164}else{P=c[10036]|0;Q=0;while(1){if((Q|0)>=(L|0)){O=17114;break}if((a[P+((c[M>>2]|0)+Q|0)|0]|0)==(a[Q+103664|0]|0)){Q=Q+1|0}else{break}}if((O|0)==17114){O=0;if((Q|0)==1){break L22958}}P=c[M>>2]|0;if(!((L|0)>0&(K^1))){N=P;O=17164;break}R=c[10036]|0;S=0;T=0;U=P;while(1){if((a[S+218680|0]|0)==(a[R+(S+U|0)|0]|0)){V=U;W=T}else{if((S|0)!=1){N=P;O=17164;break L22962}V=U-1|0;W=1}X=S+1|0;if((X|0)<(W+L|0)){S=X;T=W;U=V}else{break}}if((W|0)==0){if(!((S|0)==4|(S|0)==0)){N=P;O=17164;break}}Y=H+1|0;c[13898]=Y;if((Y|0)>=(I|0)){O=17424;break L22960}L22982:do{if((a[J+(Y*40&-1)|0]&1)!=0){U=c[J+(Y*40&-1)+36>>2]|0;T=J+(Y*40&-1)+32|0;R=c[10036]|0;Q=0;while(1){if((Q|0)>=(U|0)){break}if((a[R+((c[T>>2]|0)+Q|0)|0]|0)==(a[Q+103664|0]|0)){Q=Q+1|0}else{break L22982}}if((Q|0)==1){O=17425;break L22960}}}while(0);P=is(m)|0;S=c[P>>2]|0;if((S|0)==1){Z=+(c[P+8>>2]|0)}else if((S|0)==3){Z=+uz(c[P+8>>2]|0,0)}else if((S|0)==2){Z=+h[P+8>>3]}else{O=17134;break L22960}if((c[D>>2]|0)==3){uu(c[E>>2]|0);c[D>>2]=1}if(Z<2.0){O=17138;break L22960}c[56738]=~~(Z*10.0);P=c[13898]|0;S=c[8272]|0;L22998:do{if((S|0)>(P|0)){T=c[1054]|0;if((a[T+(P*40&-1)|0]&1)==0){_=P;break}R=c[T+(P*40&-1)+36>>2]|0;U=T+(P*40&-1)+32|0;T=c[10036]|0;X=0;while(1){if((X|0)>=(R|0)){break}if((a[T+((c[U>>2]|0)+X|0)|0]|0)==(a[X+148464|0]|0)){X=X+1|0}else{_=P;break L22998}}if((X|0)!=1){_=P;break}U=P+1|0;c[13898]=U;_=U}else{_=P}}while(0);if((_|0)>=(S|0)){O=17439;break L22960}P=c[1054]|0;L23008:do{if((a[P+(_*40&-1)|0]&1)!=0){U=c[P+(_*40&-1)+36>>2]|0;T=P+(_*40&-1)+32|0;R=c[10036]|0;Q=0;while(1){if((Q|0)>=(U|0)){break}if((a[R+((c[T>>2]|0)+Q|0)|0]|0)==(a[Q+103664|0]|0)){Q=Q+1|0}else{break L23008}}if((Q|0)==1){O=17440;break L22960}}}while(0);P=is(l)|0;S=c[P>>2]|0;if((S|0)==2){$=+h[P+8>>3]}else if((S|0)==1){$=+(c[P+8>>2]|0)}else if((S|0)==3){$=+uz(c[P+8>>2]|0,0)}else{O=17157;break L22960}if((c[F>>2]|0)==3){uu(c[G>>2]|0);c[F>>2]=1}if($<2.0){O=17161;break L22960}c[56734]=~~($*10.0)}}while(0);L23025:do{if((O|0)==17164){O=0;M=(I|0)>(H|0);L23027:do{if(M){if(K){O=17427;break L22960}P=c[10036]|0;S=0;while(1){if((S|0)>=(L|0)){break}if((a[P+(N+S|0)|0]|0)==(a[S+218536|0]|0)){S=S+1|0}else{O=17170;break L23027}}if((S|0)!=5){O=17170}}else{O=17170}}while(0);L23034:do{if((O|0)==17170){O=0;L23036:do{if((L|0)>0&(K^1)){P=c[10036]|0;Q=0;T=0;R=N;while(1){if((a[Q+218504|0]|0)==(a[P+(Q+R|0)|0]|0)){aa=R;ab=T}else{if((Q|0)!=4){break}aa=R-1|0;ab=1}U=Q+1|0;if((U|0)<(ab+L|0)){Q=U;T=ab;R=aa}else{O=17176;break}}if((O|0)==17176){O=0;if((ab|0)!=0){break L23034}if((Q|0)==3|(Q|0)==7){break L23034}}if(!((L|0)>0&(K^1))){break}R=c[10036]|0;T=0;P=0;U=N;while(1){if((a[T+130272|0]|0)==(a[R+(T+U|0)|0]|0)){ac=U;ad=P}else{if((T|0)!=5){break L23036}ac=U-1|0;ad=1}X=T+1|0;if((X|0)<(ad+L|0)){T=X;P=ad;U=ac}else{break}}if((ad|0)==0){if(!((T|0)==10|(T|0)==4)){break}}c[13898]=H+1;a[226968]=1;break L23025}}while(0);L23060:do{if(M){if(K){O=17431;break L22960}S=c[10036]|0;U=0;while(1){if((U|0)>=(L|0)){O=17193;break}if((a[S+(N+U|0)|0]|0)==(a[U+218432|0]|0)){U=U+1|0}else{break}}do{if((O|0)==17193){O=0;if((U|0)!=4){break}ae=H+1|0;c[13898]=ae;if((ae|0)>=(I|0)){O=17202;break L22960}L23070:do{if((a[J+(ae*40&-1)|0]&1)!=0){T=c[J+(ae*40&-1)+36>>2]|0;P=J+(ae*40&-1)+32|0;R=0;while(1){if((R|0)>=(T|0)){break}if((a[S+((c[P>>2]|0)+R|0)|0]|0)==(a[R+103664|0]|0)){R=R+1|0}else{break L23070}}if((R|0)==1){O=17202;break L22960}}}while(0);a[14176]=1;is(k);a[14176]=0;if((c[q>>2]|0)!=3){O=17201;break L22960}P=c[r>>2]|0;c[57076]=P;if((P|0)==0){O=17204;break L22960}if((a[P+(b4(P|0,218288)|0)|0]|0)==0){break L23025}else{O=17207;break L22960}}}while(0);if(!M){break}if(K){O=17430;break L22960}S=c[10036]|0;U=0;while(1){if((U|0)>=(L|0)){break}if((a[S+(N+U|0)|0]|0)==(a[U+221440|0]|0)){U=U+1|0}else{break L23060}}if((U|0)!=5){break}P=H+1|0;c[13898]=P;L23087:do{if((P|0)<(I|0)){L23089:do{if((a[J+(P*40&-1)|0]&1)!=0){T=c[J+(P*40&-1)+36>>2]|0;Q=J+(P*40&-1)+32|0;X=0;while(1){if((X|0)>=(T|0)){break}if((a[S+((c[Q>>2]|0)+X|0)|0]|0)==(a[X+103664|0]|0)){X=X+1|0}else{break L23089}}if((X|0)==1){af=0;break L23087}}}while(0);a[14176]=1;is(j);a[14176]=0;if((c[s>>2]|0)==3){af=c[t>>2]|0;break}else{c[13898]=P;af=0;break}}else{af=0}}while(0);c[56744]=af;break L23025}}while(0);L23101:do{if((L|0)>0&(K^1)){P=c[10036]|0;S=0;U=0;Q=N;while(1){if((a[S+218224|0]|0)==(a[P+(S+Q|0)|0]|0)){ag=Q;ah=U}else{if((S|0)!=1){break}ag=Q-1|0;ah=1}T=S+1|0;if((T|0)<(ah+L|0)){S=T;U=ah;Q=ag}else{O=17230;break}}do{if((O|0)==17230){O=0;if((ah|0)==0){if(!((S|0)==7|(S|0)==0)){break}}c[13898]=H+1;a[228464]=1;break L23025}}while(0);if(!((L|0)>0&(K^1))){O=17352;break}S=c[10036]|0;Q=0;U=0;P=N;while(1){if((a[Q+218152|0]|0)==(a[S+(Q+P|0)|0]|0)){ai=P;aj=U}else{if((Q|0)!=2){break}ai=P-1|0;aj=1}T=Q+1|0;if((T|0)<(aj+L|0)){Q=T;U=aj;P=ai}else{O=17239;break}}do{if((O|0)==17239){O=0;if((aj|0)==0){if(!((Q|0)==5|(Q|0)==1)){break}}c[13898]=H+1;a[228464]=0;break L23025}}while(0);if(!((L|0)>0&(K^1))){O=17352;break}Q=c[10036]|0;P=0;U=0;S=N;while(1){if((a[P+122880|0]|0)==(a[Q+(P+S|0)|0]|0)){ak=S;al=U}else{if((P|0)!=3){break}ak=S-1|0;al=1}T=P+1|0;if((T|0)<(al+L|0)){P=T;U=al;S=ak}else{O=17248;break}}do{if((O|0)==17248){O=0;if((al|0)==0){if(!((P|0)==8|(P|0)==2)){break}}c[13898]=H+1;c[(c[3524]|0)+68>>2]=2;S=(c[3524]|0)+96|0;c[S>>2]=c[S>>2]|32;break L23025}}while(0);if(!((L|0)>0&(K^1))){O=17352;break}P=c[10036]|0;S=0;U=0;Q=N;while(1){if((a[S+121536|0]|0)==(a[P+(S+Q|0)|0]|0)){am=Q;an=U}else{if((S|0)!=5){break}am=Q-1|0;an=1}T=S+1|0;if((T|0)<(an+L|0)){S=T;U=an;Q=am}else{O=17257;break}}do{if((O|0)==17257){O=0;if((an|0)==0){if(!((S|0)==10|(S|0)==4)){break}}c[13898]=H+1;c[(c[3524]|0)+68>>2]=68;Q=(c[3524]|0)+96|0;c[Q>>2]=c[Q>>2]&-33;break L23025}}while(0);if(!((L|0)>0&(K^1))){O=17352;break}S=c[10036]|0;Q=0;U=0;P=N;while(1){if((a[Q+218144|0]|0)==(a[S+(Q+P|0)|0]|0)){ao=P;ap=U}else{if((Q|0)!=2){O=17268;break}ao=P-1|0;ap=1}T=Q+1|0;if((T|0)<(ap+L|0)){Q=T;U=ap;P=ao}else{O=17266;break}}do{if((O|0)==17266){O=0;if((ap|0)!=0){break}if(!((Q|0)==1|(Q|0)==5)){O=17268}}}while(0);L23164:do{if((O|0)==17268){O=0;if(K){O=17352;break L23101}L23167:do{if((L|0)>0){Q=c[10036]|0;P=0;do{if((a[P+124352|0]|0)!=(a[Q+(P+N|0)|0]|0)){break L23167}P=P+1|0;}while((P|0)<(L|0));if((P|0)==4){break L23164}}}while(0);if(!((L|0)>0&(K^1))){O=17352;break L23101}Q=c[10036]|0;X=0;U=0;S=N;while(1){if((a[X+218024|0]|0)==(a[Q+(X+S|0)|0]|0)){aq=S;ar=U}else{if((X|0)!=2){break}aq=S-1|0;ar=1}T=X+1|0;if((T|0)<(ar+L|0)){X=T;U=ar;S=aq}else{O=17306;break}}do{if((O|0)==17306){O=0;if((ar|0)==0){if(!((X|0)==5|(X|0)==1)){break}}as=H+1|0;c[13898]=as;if((as|0)>=(I|0)){O=17438;break L22960}L23187:do{if((a[J+(as*40&-1)|0]&1)!=0){S=c[J+(as*40&-1)+36>>2]|0;U=J+(as*40&-1)+32|0;Q=c[10036]|0;T=0;while(1){if((T|0)>=(S|0)){break}if((a[Q+((c[U>>2]|0)+T|0)|0]|0)==(a[T+103664|0]|0)){T=T+1|0}else{break L23187}}if((T|0)==1){O=17437;break L22960}}}while(0);P=is(e)|0;U=c[P>>2]|0;if((U|0)==1){at=+(c[P+8>>2]|0)}else if((U|0)==2){at=+h[P+8>>3]}else if((U|0)==3){at=+uz(c[P+8>>2]|0,0)}else{O=17319;break L22960}if((c[z>>2]|0)==3){uu(c[A>>2]|0);c[z>>2]=1}h[28551]=at;break L23025}}while(0);if(!((L|0)>0&(K^1))){O=17352;break L23101}X=c[10036]|0;P=0;while(1){if((a[P+217952|0]|0)!=(a[X+(P+N|0)|0]|0)){break}au=P+1|0;if((au|0)<(L|0)){P=au}else{O=17327;break}}do{if((O|0)==17327){O=0;if((au|0)!=8){break}av=H+1|0;c[13898]=av;if((av|0)>=(I|0)){O=17336;break L22960}L23211:do{if((a[J+(av*40&-1)|0]&1)!=0){P=c[J+(av*40&-1)+36>>2]|0;X=J+(av*40&-1)+32|0;U=c[10036]|0;Q=0;while(1){if((Q|0)>=(P|0)){break}if((a[U+((c[X>>2]|0)+Q|0)|0]|0)==(a[Q+103664|0]|0)){Q=Q+1|0}else{break L23211}}if((Q|0)==1){O=17336;break L22960}}}while(0);a[14176]=1;is(d);a[14176]=0;if((c[x>>2]|0)!=3){O=17335;break L22960}X=c[y>>2]|0;c[n>>2]=X;if((X|0)==0){O=17338;break L22960}iQ(n);aw=c[n>>2]|0;if((a[aw]|0)==60){ax=aw}else{ax=hB(aw)|0}c[57122]=ax;if((ax|0)==0){O=17343;break L22960}else{break L23025}}}while(0);if(!((L|0)>0&(K^1))){O=17352;break L23101}X=c[10036]|0;U=0;P=0;T=N;while(1){if((a[U+128400|0]|0)==(a[X+(U+T|0)|0]|0)){ay=T;az=P}else{if((U|0)!=5){O=17352;break L23101}ay=T-1|0;az=1}S=U+1|0;if((S|0)<(az+L|0)){U=S;P=az;T=ay}else{break}}if((az|0)!=0){break L23101}if((U|0)==4|(U|0)==9){break L23101}else{O=17352;break L23101}}}while(0);aA=H+1|0;c[13898]=aA;if((aA|0)>=(I|0)){aB=aA;O=17445;break L22960}L23235:do{if((a[J+(aA*40&-1)|0]&1)!=0){T=c[J+(aA*40&-1)+36>>2]|0;P=J+(aA*40&-1)+32|0;X=c[10036]|0;S=0;while(1){if((S|0)>=(T|0)){break}if((a[X+((c[P>>2]|0)+S|0)|0]|0)==(a[S+103664|0]|0)){S=S+1|0}else{break L23235}}if((S|0)==1){aB=aA;O=17446;break L22960}}}while(0);a[14176]=1;is(f);a[14176]=0;if((c[B>>2]|0)!=3){O=17281;break L22960}P=c[C>>2]|0;if((P|0)==0){O=17283;break L22960}X=bh(P|0,44)|0;do{if((X|0)!=0){if((ca(X+1|0,148448,(v=i,i=i+8|0,c[v>>2]=228408,v)|0)|0)!=1){break}a[X]=0}}while(0);if((a[P]|0)==0){uu(P);break L23025}X=aQ(P|0,75096)|0;if((X|0)==0){aC=aQ(P|0,75048)|0}else{aC=X}X=aQ(P|0,74992)|0;if((X|0)==0){aD=aQ(P|0,74976)|0}else{aD=X}uu(c[57106]|0);c[57106]=P;if((aD|0)==0){c[57098]=77432}else{c[57098]=74936;X=uA(P|0)|0;a[P+(X-(uA(aD|0)|0)|0)|0]=0}if((aC|0)==0){c[57094]=77432;break L23025}else{c[57094]=74928;X=uA(P|0)|0;T=X-(uA(aC|0)|0)|0;a[(c[57106]|0)+T|0]=0;break L23025}}else{O=17352}}while(0);L23264:do{if((O|0)==17352){O=0;L23266:do{if(M){if(K){O=17429;break L22960}T=c[10036]|0;X=0;while(1){if((X|0)>=(L|0)){break}if((a[T+(N+X|0)|0]|0)==(a[X+128296|0]|0)){X=X+1|0}else{break L23266}}if((X|0)==2){break L23264}}}while(0);L23274:do{if((L|0)>0&(K^1)){P=c[10036]|0;T=0;S=0;U=N;while(1){if((a[T+217776|0]|0)==(a[P+(T+U|0)|0]|0)){aE=U;aF=S}else{if((T|0)!=5){break L23274}aE=U-1|0;aF=1}R=T+1|0;if((R|0)<(aF+L|0)){T=R;S=aF;U=aE}else{break}}if((aF|0)==0){if(!((T|0)==7|(T|0)==4)){break}}c[13898]=H+1;a[226984]=1;break L23025}}while(0);L23287:do{if(M){L23289:do{if(!K){U=c[10036]|0;S=0;while(1){if((S|0)>=(L|0)){break}if((a[U+(N+S|0)|0]|0)==(a[S+137232|0]|0)){S=S+1|0}else{break L23289}}if((S|0)!=4){break}c[13898]=H+1;a[226984]=0;break L23025}}while(0);if(!M){break}if(K){O=17428;break L22960}T=c[10036]|0;U=0;while(1){if((U|0)>=(L|0)){break}if((a[T+(N+U|0)|0]|0)==(a[U+131504|0]|0)){U=U+1|0}else{break L23287}}if((U|0)!=5){break}c[13898]=H+1;a[228520]=0;break L23025}}while(0);if(!((L|0)>0&(K^1))){O=17434;break L22960}T=c[10036]|0;P=0;X=0;R=N;while(1){if((a[P+217752|0]|0)==(a[T+(P+R|0)|0]|0)){aG=R;aH=X}else{if((P|0)!=4){break}aG=R-1|0;aH=1}aI=P+1|0;if((aI|0)<(aH+L|0)){P=aI;X=aH;R=aG}else{O=17396;break}}do{if((O|0)==17396){O=0;if((aH|0)==0){if(!((P|0)==6|(P|0)==3)){break}}c[13898]=H+1;a[228520]=1;break L23025}}while(0);if(!((L|0)>0&(K^1))){O=17432;break L22960}P=c[10036]|0;R=0;X=0;T=N;while(1){if((a[R+217736|0]|0)==(a[P+(R+T|0)|0]|0)){aJ=T;aK=X}else{if((R|0)!=5){O=17426;break L22960}aJ=T-1|0;aK=1}aI=R+1|0;if((aI|0)<(aK+L|0)){R=aI;X=aK;T=aJ}else{break}}if((aK|0)==0){if(!((R|0)==10|(R|0)==4)){O=17433;break L22960}}c[13898]=H+1;c[57136]=hK()|0;break L23025}}while(0);c[13898]=H+1;T=is(g)|0;X=c[T>>2]|0;if((X|0)==3){aL=+uz(c[T+8>>2]|0,0)}else if((X|0)==1){aL=+(c[T+8>>2]|0)}else if((X|0)==2){aL=+h[T+8>>3]}else{O=17362;break L22960}if((c[u>>2]|0)==3){uu(c[w>>2]|0);c[u>>2]=1}h[28540]=aL;if(aL>0.0){break L23025}h[28540]=1.0;break L23025}}while(0);c[13898]=H+1;a[228312]=1}}while(0);L=c[13898]|0;K=c[8272]|0;if((L|0)<(K|0)){H=L;I=K}else{break L22958}}if((O|0)==17343){uf(c[13898]|0,219072,(v=i,i=i+8|0,c[v>>2]=aw,v)|0)}else if((O|0)==17134){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17434){uf(H,217704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17437){uf(as,217992,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17438){uf(as,217992,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17440){uf(_,218600,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17445){uf(aB,116592,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17362){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17161){uf(c[13898]|0,218544,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17424){uf(Y,218656,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17425){uf(Y,218656,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17426){uf(H,217704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17427){uf(H,217704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17428){uf(H,217704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17439){uf(_,218600,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17335){c[13898]=av;O=17336}else if((O|0)==17446){uf(aB,116592,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17281){c[13898]=aA;aB=aA;uf(aB,116592,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17283){aB=c[13898]|0;uf(aB,116592,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17338){aM=c[13898]|0;uf(aM,217824,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17429){uf(H,217704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17430){uf(H,217704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17431){uf(H,217704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17432){uf(H,217704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17433){uf(H,217704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17319){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17157){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17207){uf((c[13898]|0)-1|0,218240,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17138){uf(c[13898]|0,218632,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17201){c[13898]=ae;O=17202}else if((O|0)==17204){aN=c[13898]|0;uf(aN,218392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((O|0)==17336){c[n>>2]=0;aM=av;uf(aM,217824,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((O|0)==17202){c[57076]=0;aN=ae;uf(aN,218392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);qj(179864);aN=~~(+((c[56734]|0)>>>0>>>0)/10.0);ae=a[228464]|0?217584:217656;O=(c[(c[3524]|0)+68>>2]|0)==2?217456:179864;aM=c[57108]|0;aL=+h[28552];be(13048,217664,(v=i,i=i+48|0,c[v>>2]=~~(+((c[56738]|0)>>>0>>>0)/10.0),c[v+8>>2]=aN,c[v+16>>2]=ae,c[v+24>>2]=O,c[v+32>>2]=aM,h[v+40>>3]=aL,v)|0);if(a[228312]|0){uD(13048+(uA(13048)|0)|0,217392,9)}if(a[226968]|0){uD(13048+(uA(13048)|0)|0,217272,12)}aM=c[57076]|0;if((aM|0)!=0){O=13048+(uA(13048)|0)|0;be(O|0,217200,(v=i,i=i+8|0,c[v>>2]=aM,v)|0)}aM=c[57122]|0;if((aM|0)!=0){O=13048+(uA(13048)|0)|0;be(O|0,217096,(v=i,i=i+8|0,c[v>>2]=aM,v)|0)}aM=13048+(uA(13048)|0)|0;be(aM|0,(a[226984]|0?132112:217056)|0,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);aM=13048+(uA(13048)|0)|0;be(aM|0,(a[228520]|0?217032:217e3)|0,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);aL=+h[28540];if(aL!=1.0){aM=13048+(uA(13048)|0)|0;be(aM|0,216912,(v=i,i=i+8|0,h[v>>3]=aL,v)|0)}aM=c[57136]|0;if((aM|0)<=-1){i=b;return}be(13048+(uA(13048)|0)|0,216792,(v=i,i=i+8|0,c[v>>2]=aM,v)|0);i=b;return}function p7(){aI(222944,8,1,c[10030]|0);return}function p8(){var b=0,d=0,e=0,f=0.0,g=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,x=0,y=0.0,z=0.0,A=0,B=0,C=0,D=0,E=0;b=i;i=i+512|0;d=b|0;e=b+256|0;f=+h[28571];h[28376]=f;a[227016]=a[84376]|0;a[227017|0]=a[84377|0]|0;a[227018|0]=a[84378|0]|0;a[227019|0]=a[84379|0]|0;a[227020|0]=a[84380|0]|0;a[227021|0]=a[84381|0]|0;h[28378]=f;a[227032]=a[89416]|0;a[227033|0]=a[89417|0]|0;a[227034|0]=a[89418|0]|0;a[227035|0]=a[89419|0]|0;a[227036|0]=a[89420|0]|0;a[227037|0]=a[89421|0]|0;h[28380]=f;a[227048]=a[89352]|0;a[227049|0]=a[89353|0]|0;a[227050|0]=a[89354|0]|0;a[227051|0]=a[89355|0]|0;a[227052|0]=a[89356|0]|0;h[28382]=f;c[56766]=6579570;h[28384]=f;a[227080]=a[89296]|0;a[227081|0]=a[89297|0]|0;a[227082|0]=a[89298|0]|0;a[227083|0]=a[89299|0]|0;a[227084|0]=a[89300|0]|0;a[227085|0]=a[89301|0]|0;h[28386]=f;a[227096]=a[89328]|0;a[227097|0]=a[89329|0]|0;a[227098|0]=a[89330|0]|0;a[227099|0]=a[89331|0]|0;a[227100|0]=a[89332|0]|0;h[28388]=f;a[227112]=a[89248]|0;a[227113|0]=a[89249|0]|0;a[227114|0]=a[89250|0]|0;a[227115|0]=a[89251|0]|0;a[227116|0]=a[89252|0]|0;h[28390]=f;be(227128,222904,(v=i,i=i+24|0,c[v>>2]=21,c[v+8>>2]=117,c[v+16>>2]=69,v)|0);h[28392]=+h[28571];be(227144,222904,(v=i,i=i+24|0,c[v>>2]=0,c[v+8>>2]=0,c[v+16>>2]=148,v)|0);h[28394]=+h[28571];be(227160,222904,(v=i,i=i+24|0,c[v>>2]=255,c[v+8>>2]=153,c[v+16>>2]=0,v)|0);h[28396]=+h[28571];be(227176,222904,(v=i,i=i+24|0,c[v>>2]=0,c[v+8>>2]=153,c[v+16>>2]=161,v)|0);h[28398]=+h[28571];be(227192,222904,(v=i,i=i+24|0,c[v>>2]=214,c[v+8>>2]=214,c[v+16>>2]=69,v)|0);h[28400]=+h[28571];be(227208,222904,(v=i,i=i+24|0,c[v>>2]=163,c[v+8>>2]=145,c[v+16>>2]=255,v)|0);h[28402]=+h[28571];be(227224,222904,(v=i,i=i+24|0,c[v>>2]=255,c[v+8>>2]=204,c[v+16>>2]=0,v)|0);h[28404]=+h[28571];be(227240,222904,(v=i,i=i+24|0,c[v>>2]=214,c[v+8>>2]=0,c[v+16>>2]=120,v)|0);h[28406]=+h[28571];be(227256,222904,(v=i,i=i+24|0,c[v>>2]=171,c[v+8>>2]=214,c[v+16>>2]=0,v)|0);g=c[57136]|0;if((g|0)>-1){j=g>>>16&255;k=g>>>8&255;l=g&255;be(227016,222904,(v=i,i=i+24|0,c[v>>2]=j,c[v+8>>2]=k,c[v+16>>2]=l,v)|0)}c[57144]=-3;c[(c[3524]|0)+8>>2]=c[56738];c[(c[3524]|0)+12>>2]=c[56734];f=+h[28552];c[57114]=~~(f*10.0);l=~~(f*.25*10.0);c[57112]=l;c[57110]=l;c[(c[3524]|0)+20>>2]=~~(f*.7*10.0);c[(c[3524]|0)+16>>2]=((c[57112]|0)+(c[57114]|0)|0)+(c[57110]|0);l=c[3524]|0;c[l+28>>2]=(c[l+16>>2]|0)>>>1;l=c[3524]|0;c[l+24>>2]=(c[l+16>>2]|0)>>>1;l=c[11252]|0;if((l|0)==6){n=222720}else if((l|0)==14){n=222200}else if((l|0)==13){n=222296}else if((l|0)==1){n=222880}else if((l|0)==9){n=222584}else if((l|0)==12){n=222392}else if((l|0)==2){n=222832}else if((l|0)==4){n=222768}else if((l|0)==10){n=222496}else if((l|0)==8){n=222656}else if((l|0)==7){n=222696}else if((l|0)==3){n=222800}else if((l|0)==5){n=179864}else{n=222152}cf(c[10030]|0,222e3,(v=i,i=i+8|0,c[v>>2]=n,v)|0);if(a[228312]|0){n=c[10030]|0;aI(221896,69,1,n|0)}if(!(a[228464]|0)){n=c[10030]|0;l=c[3524]|0;k=~~(+((c[l+8>>2]|0)>>>0>>>0)/10.0);j=~~(+((c[l+12>>2]|0)>>>0>>>0)/10.0);cf(n|0,221864,(v=i,i=i+16|0,c[v>>2]=k,c[v+8>>2]=j,v)|0)}j=c[3524]|0;k=~~(+((c[j+12>>2]|0)>>>0>>>0)/10.0);cf(c[10030]|0,221816,(v=i,i=i+16|0,c[v>>2]=~~(+((c[j+8>>2]|0)>>>0>>>0)/10.0),c[v+8>>2]=k,v)|0);aI(221760,36,1,c[10030]|0);aI(221680,44,1,c[10030]|0);aI(221632,3,1,c[10030]|0);k=c[57076]|0;cf(c[10030]|0,221608,(v=i,i=i+8|0,c[v>>2]=(k|0)!=0?k:221552,v)|0);cf(c[10030]|0,221496,(v=i,i=i+16|0,c[v>>2]=40152,c[v+8>>2]=40160,v)|0);k=c[56744]|0;if((k|0)==0){j=bP(221464)|0;c[56744]=j;o=j}else{o=k}k=uA(o|0)|0;do{if((a[o]|0)!=0){if((a[o+(k-1|0)|0]|0)==47){break}j=db(o,k+2|0,221440)|0;c[56744]=j;n=j+(uA(j|0)|0)|0;w=47;a[n]=w&255;w=w>>8;a[n+1|0]=w&255}}while(0);do{if(a[228312]|0){if(a[226968]|0){k=(uA(c[56744]|0)|0)+18|0;o=ut(k)|0;do{if((o|0)==0){gk();n=ut(k)|0;if((n|0)!=0){p=n;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=221224,v)|0)}else{p=o}}while(0);o=c[56744]|0;uB(p|0,o|0);o=uA(p|0)|0;k=(o|0)==0?0:o-1|0;o=a[p+k|0]|0;if(!((o<<24>>24|0)==47|(o<<24>>24|0)==0)){a[p+(k+1|0)|0]=47;a[p+(k+2|0)|0]=0}uD(p+(uA(p|0)|0)|0,221256,15);k=bF(p|0,193632)|0;if((k|0)==0){uh(-1,221176,(v=i,i=i+8|0,c[v>>2]=p,v)|0)}else{o=c[10030]|0;aI(221096,65,1,o|0);o=e|0;n=(a6(o|0,256,k|0)|0)==0;j=c[10030]|0;if(n){q=j}else{n=j;while(1){aK(o|0,n|0);j=(a6(o|0,256,k|0)|0)==0;l=c[10030]|0;if(j){q=l;break}else{n=l}}}aI(223416,14,1,q|0);az(k|0)}uu(p)}else{n=c[10030]|0;o=c[56744]|0;cf(n|0,221312,(v=i,i=i+8|0,c[v>>2]=o,v)|0)}o=c[10030]|0;if(!(a[228312]|0)){r=o;s=17490;break}aI(221032,57,1,o|0);o=c[10030]|0;n=c[3524]|0;l=~~(+((c[n+8>>2]|0)>>>0>>>0)/10.0);j=~~(+((c[n+12>>2]|0)>>>0>>>0)/10.0);cf(o|0,220984,(v=i,i=i+32|0,c[v>>2]=0,c[v+8>>2]=0,c[v+16>>2]=l,c[v+24>>2]=j,v)|0);j=c[10030]|0;l=c[57136]|0;o=(l|0)>0?l:16777215;cf(j|0,220920,(v=i,i=i+8|0,c[v>>2]=o,v)|0);o=c[10030]|0;aI(220824,89,1,o|0);o=c[10030]|0;aI(220712,56,1,o|0);o=c[10030]|0;aI(220560,111,1,o|0)}else{r=c[10030]|0;s=17490}}while(0);if((s|0)==17490){aI(220520,25,1,r|0);r=c[10030]|0;s=c[3524]|0;p=~~(+((c[s+8>>2]|0)>>>0>>>0)/10.0);q=~~(+((c[s+12>>2]|0)>>>0>>>0)/10.0);cf(r|0,220984,(v=i,i=i+32|0,c[v>>2]=0,c[v+8>>2]=0,c[v+16>>2]=p,c[v+24>>2]=q,v)|0);q=c[57136]|0;p=c[10030]|0;if((q|0)>-1){cf(p|0,220448,(v=i,i=i+8|0,c[v>>2]=q,v)|0)}else{aI(77208,12,1,p|0)}p=c[10030]|0;aI(220440,3,1,p|0)}aI(220400,7,1,c[10030]|0);p=c[57122]|0;if((p|0)==0){t=c[3524]|0;u=t+28|0;x=c[u>>2]|0;y=+(x>>>0>>>0);z=20.0/y;A=c[10030]|0;B=cf(A|0,219192,(v=i,i=i+56|0,h[v>>3]=z,h[v+8>>3]=z,h[v+16>>3]=z,h[v+24>>3]=z,h[v+32>>3]=z,h[v+40>>3]=z,h[v+48>>3]=z,v)|0)|0;i=b;return}q=d|0;do{if((a[p]|0)==60){if(!(a[14168]|0)){uf(-1,145320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}d=p+1|0;r=bt(d|0,193632)|0;if((r|0)!=0){C=1;D=r;break}uf(-1,219160,(v=i,i=i+8|0,c[v>>2]=d,v)|0)}else{d=bF(p|0,193632)|0;if((d|0)!=0){C=0;D=d;break}uf(-1,219072,(v=i,i=i+8|0,c[v>>2]=p,v)|0)}}while(0);if((a6(q|0,255,D|0)|0)==0){E=0}else{d=0;while(1){r=aQ(q|0,219056)|0;if((r|0)!=0){s=c[m>>2]|0;cf(s|0,218992,(v=i,i=i+16|0,c[v>>2]=p,c[v+8>>2]=r,v)|0)}aK(q|0,c[10030]|0);r=d+1|0;if((a6(q|0,255,D|0)|0)==0){E=r;break}else{d=r}}}do{if(C){d=a2(D|0)|0;if((d|0)==0){break}uf(-1,218832,(v=i,i=i+16|0,c[v>>2]=p+1,c[v+8>>2]=d,v)|0)}else{az(D|0)}}while(0);if((E|0)!=0){t=c[3524]|0;u=t+28|0;x=c[u>>2]|0;y=+(x>>>0>>>0);z=20.0/y;A=c[10030]|0;B=cf(A|0,219192,(v=i,i=i+56|0,h[v>>3]=z,h[v+8>>3]=z,h[v+16>>3]=z,h[v+24>>3]=z,h[v+32>>3]=z,h[v+40>>3]=z,h[v+48>>3]=z,v)|0)|0;i=b;return}if(C){uf(-1,218792,(v=i,i=i+8|0,c[v>>2]=p+1,v)|0)}else{uf(-1,218744,(v=i,i=i+8|0,c[v>>2]=p,v)|0)}}function p9(a){a=a|0;c[57140]=a;return 1}function qa(a){a=a|0;c[57138]=a;return 1}function qb(){var b=0,d=0,e=0,f=0.0,g=0,j=0,k=0;b=i;if(a[227272]|0){if(a[228352]|0){d=c[10030]|0;aI(78232,6,1,d|0);a[228352]=0}d=c[10030]|0;aI(78240,9,1,d|0);c[56816]=0;a[227272]=0}if(a[228352]|0){d=c[10030]|0;aI(78232,6,1,d|0);a[228352]=0}if(a[228344]|0){d=c[10030]|0;aI(77776,5,1,d|0);a[228344]=0;c[57120]=-1}if(a[228312]|0){d=c[10030]|0;aI(73376,42,1,d|0);d=c[10030]|0;aI(73296,61,1,d|0);d=c[10030]|0;e=~~(+((c[(c[3524]|0)+8>>2]|0)>>>0>>>0)/10.0);cf(d|0,73248,(v=i,i=i+8|0,c[v>>2]=e,v)|0);e=c[10030]|0;d=~~(+((c[(c[3524]|0)+12>>2]|0)>>>0>>>0)/10.0);cf(e|0,73192,(v=i,i=i+8|0,c[v>>2]=d,v)|0);d=c[10030]|0;f=+(c[7938]|0)/10.0;cf(d|0,73160,(v=i,i=i+8|0,h[v>>3]=f,v)|0);d=c[10030]|0;f=+(c[7939]|0)/10.0;cf(d|0,73120,(v=i,i=i+8|0,h[v>>3]=f,v)|0);d=c[10030]|0;f=+(((c[(c[3524]|0)+12>>2]|0)-(c[7940]|0)|0)>>>0>>>0)/10.0;cf(d|0,73088,(v=i,i=i+8|0,h[v>>3]=f,v)|0);d=c[10030]|0;f=+(((c[(c[3524]|0)+12>>2]|0)-(c[7941]|0)|0)>>>0>>>0)/10.0;cf(d|0,73056,(v=i,i=i+8|0,h[v>>3]=f,v)|0);d=c[10030]|0;f=+((c[7939]|0)-(c[7938]|0)|0)/10.0;cf(d|0,72960,(v=i,i=i+8|0,h[v>>3]=f,v)|0);d=c[10030]|0;f=+((c[7941]|0)-(c[7940]|0)|0)/10.0;cf(d|0,72872,(v=i,i=i+8|0,h[v>>3]=f,v)|0);e7(1);do{if((c[16546]|0)!=1){d=e6(72800)|0;do{if((d|0)!=0){e=c[d+16>>2]|0;if((e|0)==2){g=c[10030]|0;f=+h[d+24>>3];cf(g|0,72560,(v=i,i=i+16|0,c[v>>2]=72688,h[v+8>>3]=f,v)|0);break}else if((e|0)==1){e=c[d+24>>2]|0;cf(c[10030]|0,72752,(v=i,i=i+16|0,c[v>>2]=72688,c[v+8>>2]=e,v)|0);break}else{break}}}while(0);d=e6(72544)|0;if((d|0)==0){break}e=c[d+16>>2]|0;if((e|0)==1){g=c[10030]|0;j=c[d+24>>2]|0;cf(g|0,72752,(v=i,i=i+16|0,c[v>>2]=72528,c[v+8>>2]=j,v)|0);break}else if((e|0)==2){f=+h[d+24>>3];cf(c[10030]|0,72560,(v=i,i=i+16|0,c[v>>2]=72528,h[v+8>>3]=f,v)|0);break}else{break}}}while(0);d=e6(225256)|0;do{if((d|0)!=0){e=c[d+16>>2]|0;if((e|0)==2){j=c[10030]|0;f=+h[d+24>>3];cf(j|0,72560,(v=i,i=i+16|0,c[v>>2]=225240,h[v+8>>3]=f,v)|0);break}else if((e|0)==1){e=c[d+24>>2]|0;cf(c[10030]|0,72752,(v=i,i=i+16|0,c[v>>2]=225240,c[v+8>>2]=e,v)|0);break}else{break}}}while(0);d=e6(225200)|0;do{if((d|0)!=0){e=c[d+16>>2]|0;if((e|0)==2){j=c[10030]|0;f=+h[d+24>>3];cf(j|0,72560,(v=i,i=i+16|0,c[v>>2]=225128,h[v+8>>3]=f,v)|0);break}else if((e|0)==1){e=c[d+24>>2]|0;cf(c[10030]|0,72752,(v=i,i=i+16|0,c[v>>2]=225128,c[v+8>>2]=e,v)|0);break}else{break}}}while(0);d=c[10030]|0;e=(a[30528]&1)!=0?225e3:224992;cf(d|0,225024,(v=i,i=i+8|0,c[v>>2]=e,v)|0);if((a[30528]&1)!=0){e=c[10030]|0;f=(c[17366]&1|0)==0?+h[8687]:0.0;cf(e|0,224952,(v=i,i=i+8|0,h[v>>3]=f,v)|0)}do{if((c[17261]&3|0)==0){e=c[10030]|0;aI(224720,37,1,e|0)}else{e=e6(224936)|0;do{if((e|0)!=0){d=c[e+16>>2]|0;if((d|0)==1){j=c[10030]|0;g=c[e+24>>2]|0;cf(j|0,72752,(v=i,i=i+16|0,c[v>>2]=224920,c[v+8>>2]=g,v)|0);break}else if((d|0)==2){f=+h[e+24>>3];cf(c[10030]|0,72560,(v=i,i=i+16|0,c[v>>2]=224920,h[v+8>>3]=f,v)|0);break}else{break}}}while(0);e=e6(224872)|0;if((e|0)==0){break}d=c[e+16>>2]|0;if((d|0)==2){g=c[10030]|0;f=+h[e+24>>3];cf(g|0,72560,(v=i,i=i+16|0,c[v>>2]=224832,h[v+8>>3]=f,v)|0);break}else if((d|0)==1){d=c[e+24>>2]|0;cf(c[10030]|0,72752,(v=i,i=i+16|0,c[v>>2]=224832,c[v+8>>2]=d,v)|0);break}else{break}}}while(0);do{if((c[17089]&3|0)==0){d=c[10030]|0;aI(224096,37,1,d|0)}else{d=e6(224640)|0;do{if((d|0)!=0){e=c[d+16>>2]|0;if((e|0)==1){g=c[10030]|0;j=c[d+24>>2]|0;cf(g|0,72752,(v=i,i=i+16|0,c[v>>2]=224528,c[v+8>>2]=j,v)|0);break}else if((e|0)==2){f=+h[d+24>>3];cf(c[10030]|0,72560,(v=i,i=i+16|0,c[v>>2]=224528,h[v+8>>3]=f,v)|0);break}else{break}}}while(0);d=e6(224432)|0;if((d|0)==0){break}e=c[d+16>>2]|0;if((e|0)==1){j=c[10030]|0;g=c[d+24>>2]|0;cf(j|0,72752,(v=i,i=i+16|0,c[v>>2]=224320,c[v+8>>2]=g,v)|0);break}else if((e|0)==2){f=+h[d+24>>3];cf(c[10030]|0,72560,(v=i,i=i+16|0,c[v>>2]=224320,h[v+8>>3]=f,v)|0);break}else{break}}}while(0);d=c[10030]|0;e=a[66164]&1;cf(d|0,224040,(v=i,i=i+8|0,c[v>>2]=e,v)|0);e=c[10030]|0;d=a[65476]&1;cf(e|0,223976,(v=i,i=i+8|0,c[v>>2]=d,v)|0);if((a[30528]&1)!=0){d=c[10030]|0;e=a[69604]&1;cf(d|0,223896,(v=i,i=i+8|0,c[v>>2]=e,v)|0)}e=c[10030]|0;if((c[16546]|0)==1){f=+h[8255];cf(e|0,223808,(v=i,i=i+8|0,h[v>>3]=f,v)|0);d=c[10030]|0;f=+h[8256];cf(d|0,223728,(v=i,i=i+8|0,h[v>>3]=f,v)|0);d=c[10030]|0;g=c[8510]|0;do{if((g|0)==0){j=c[8506]|0;if((j|0)==4){k=223560;break}k=(j|0)==5?223536:223520}else{k=g}}while(0);cf(d|0,223648,(v=i,i=i+8|0,c[v>>2]=k,v)|0)}else{aI(223432,34,1,e|0)}e=c[10030]|0;aI(223416,14,1,e|0)}aI(77776,5,1,c[10030]|0);if(!(a[228312]|0)){i=b;return}aI(223344,67,1,c[10030]|0);aI(223288,37,1,c[10030]|0);aI(223240,31,1,c[10030]|0);if(!(a[228312]|0)){i=b;return}if(!(a[228336]|0)){i=b;return}cf(c[10030]|0,223112,(v=i,i=i+8|0,c[v>>2]=~~(+((c[(c[3524]|0)+12>>2]|0)>>>0>>>0)/10.0)-26,v)|0);aI(222992,42,1,c[10030]|0);i=b;return}function qc(){tu();c[57120]=-1;c[57118]=0;a[228352]=0;a[228528]=0;a[227272]=0;c[56736]=-1;c[56740]=-1;return}function qd(a,b){a=a|0;b=b|0;if((c[56740]|0)==(a|0)&(c[56736]|0)==(b|0)){return}tv(a,b);return}function qe(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0.0;e=i;f=c[56740]|0;g=c[56736]|0;if((f|0)==(b|0)&(g|0)==(d|0)){i=e;return}if(!(a[227272]|0)){tv(f,g)}j=+((c[(c[3524]|0)+12>>2]|0)-d|0)/10.0;cf(c[10030]|0,73912,(v=i,i=i+16|0,h[v>>3]=+(b>>>0>>>0)/10.0,h[v+8>>3]=j,v)|0);g=(c[56816]|0)+1|0;c[56816]=g;if((g&7|0)==0){g=c[10030]|0;aI(73904,3,1,g|0)}c[56740]=b;c[56736]=d;i=e;return}function qf(b){b=b|0;var d=0;a[228528]=0;if((c[57144]|0)==(b|0)){return}if(a[227272]|0){if(a[228352]|0){d=c[10030]|0;aI(78232,6,1,d|0);a[228352]=0}d=c[10030]|0;aI(78240,9,1,d|0);c[56816]=0;a[227272]=0}if(a[228352]|0){d=c[10030]|0;aI(78232,6,1,d|0);a[228352]=0}if(a[228344]|0){d=c[10030]|0;aI(77776,5,1,d|0);a[228344]=0;c[57120]=-1}c[57144]=b;tu();return}function qg(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0.0,n=0,o=0;g=i;if(a[227272]|0){if(a[228352]|0){j=c[10030]|0;aI(78232,6,1,j|0);a[228352]=0}j=c[10030]|0;aI(78240,9,1,j|0);c[56816]=0;a[227272]=0}j=c[57138]|0;if((j|0)==1){k=74560}else if((j|0)==0){k=74592}else{k=74552}j=((c[57140]|0)%180&-1|0)==0;l=((c[57114]|0)-(c[57112]|0)|0)/2&-1;m=+(((j?l:0)-e|0)+(c[(c[3524]|0)+12>>2]|0)|0)/10.0;cf(c[10030]|0,74504,(v=i,i=i+16|0,h[v>>3]=+((j?0:l)+b|0)/10.0,h[v+8>>3]=m,v)|0);b=c[57140]|0;if((b|0)!=0){l=c[10030]|0;j=-b|0;cf(l|0,74488,(v=i,i=i+8|0,c[v>>2]=j,v)|0)}aI(74456,27,1,c[10030]|0);j=a[228528]|0;do{if(j<<24>>24==3){l=c[10030]|0;b=d[226992]|0;e=d[228368]|0;n=d[228536]|0;cf(l|0,74424,(v=i,i=i+24|0,c[v>>2]=b,c[v+8>>2]=e,c[v+16>>2]=n,v)|0)}else{n=c[10030]|0;if(j<<24>>24==1){e=c[57082]|0;aK(e|0,n|0);break}e=c[57144]|0;if((e|0)>12){o=(e|0)%13&-1}else{o=e}e=o+3|0;b=227016+(((e|0)<0?0:e<<16>>16)<<4)|0;aK(b|0,n|0)}}while(0);m=+h[28552];cf(c[10030]|0,74384,(v=i,i=i+16|0,c[v>>2]=c[57108],h[v+8>>3]=m,v)|0);o=c[57096]|0;do{if((o|0)!=0){if((aY(o|0,77432)|0)==0){break}j=c[10030]|0;cf(j|0,74280,(v=i,i=i+8|0,c[v>>2]=o,v)|0)}}while(0);o=c[57100]|0;do{if((o|0)!=0){if((aY(o|0,77432)|0)==0){break}j=c[10030]|0;cf(j|0,74256,(v=i,i=i+8|0,c[v>>2]=o,v)|0)}}while(0);cf(c[10030]|0,74160,(v=i,i=i+8|0,c[v>>2]=k,v)|0);k=(aQ(f|0,74128)|0)==0;o=c[10030]|0;if(k){aI(74024,8,1,o|0)}else{aI(74096,29,1,o|0)}if(a[237856]|0){i=g;return}o=a[f]|0;if(o<<24>>24!=0){k=f;f=o;do{o=f<<24>>24;L23666:do{if((o|0)==60){j=c[10030]|0;aI(74016,4,1,j|0)}else if((o|0)==38){do{if((a[k+1|0]|0)==35){if((a[k+2|0]|0)!=120){break}j=c[10030]|0;aF(38,j|0);break L23666}}while(0);aI(74008,5,1,c[10030]|0)}else{aF(o|0,c[10030]|0)}}while(0);k=k+1|0;f=a[k]|0;}while(f<<24>>24!=0)}aI(73992,14,1,c[10030]|0);i=g;return}function qh(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0;g=i;i=i+64|0;j=g|0;k=a[228528]|0;do{if(k<<24>>24==3){l=j|0;m=d[226992]|0;n=d[228368]|0;o=d[228536]|0;be(l|0,74880,(v=i,i=i+24|0,c[v>>2]=m,c[v+8>>2]=n,c[v+16>>2]=o,v)|0)}else{o=j|0;if(k<<24>>24==1){n=c[57082]|0;be(o|0,74864,(v=i,i=i+8|0,c[v>>2]=n,v)|0);break}else{a[o]=0;break}}}while(0);if(a[227272]|0){if(a[228352]|0){k=c[10030]|0;aI(78232,6,1,k|0);a[228352]=0}k=c[10030]|0;aI(78240,9,1,k|0);c[56816]=0;a[227272]=0}k=c[10030]|0;if((f|0)<0){p=+(b>>>0>>>0)/10.0;q=+((c[(c[3524]|0)+12>>2]|0)-e|0)/10.0;o=j|0;cf(k|0,74760,(v=i,i=i+24|0,h[v>>3]=p,h[v+8>>3]=q,c[v+16>>2]=o,v)|0);c[56740]=b;c[56736]=e;i=g;return}else{o=(f|0)%13&-1;q=+(b>>>0>>>0)/10.0;f=c[3524]|0;p=+((c[f+12>>2]|0)-e|0)/10.0;r=+h[1630]*+((c[f+28>>2]|0)>>>0>>>0)/20.0;f=j|0;cf(k|0,74656,(v=i,i=i+40|0,c[v>>2]=o,h[v+8>>3]=q,h[v+16>>3]=p,h[v+24>>3]=r,c[v+32>>2]=f,v)|0);c[56740]=b;c[56736]=e;i=g;return}}function qi(b){b=b|0;var d=0;c[59472]=(c[59472]|0)+1;do{if((b|0)==38){d=c[11232]|0;c[11232]=d+1;a[d]=38;d=c[11232]|0;c[11232]=d+1;a[d]=97;d=c[11232]|0;c[11232]=d+1;a[d]=109;d=c[11232]|0;c[11232]=d+1;a[d]=112;d=c[11232]|0;c[11232]=d+1;a[d]=59;return}else if((b|0)==60){d=c[11232]|0;c[11232]=d+1;a[d]=38;d=c[11232]|0;c[11232]=d+1;a[d]=108;d=c[11232]|0;c[11232]=d+1;a[d]=116;d=c[11232]|0;c[11232]=d+1;a[d]=59;return}else if((b|0)==(-2|0)){if((c[11252]|0)!=0){break}d=c[11232]|0;c[11232]=d+1;a[d]=38;return}}while(0);d=c[11232]|0;c[11232]=d+1;a[d]=b&255;return}function qj(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0.0;d=i;do{if((b|0)==0){e=17680}else{if((a[b]|0)==0){e=17680;break}f=aQ(b|0,75096)|0;if((f|0)==0){g=aQ(b|0,75048)|0}else{g=f}f=aQ(b|0,74992)|0;if((f|0)==0){j=aQ(b|0,74976)|0}else{j=f}f=bk(b|0,148464)|0;if((f|0)>0){uu(c[57108]|0);k=bP(b|0)|0;c[57108]=k;if((j|0)==0){c[57100]=77432}else{c[57100]=74936;l=uA(b|0)|0;a[k+(l-(uA(j|0)|0)|0)|0]=0}if((g|0)==0){c[57096]=77432}else{c[57096]=74928;l=uA(b|0)|0;k=l-(uA(g|0)|0)|0;a[(c[57108]|0)+k|0]=0}a[(c[57108]|0)+f|0]=0}if((a[b+f|0]|0)!=44){break}k=b+(f+1|0)|0;ca(k|0,148448,(v=i,i=i+8|0,c[v>>2]=228416,v)|0)}}while(0);if((e|0)==17680){uu(c[57108]|0);e=c[57106]|0;if((e|0)==0){m=0}else{m=bP(e|0)|0}c[57108]=m;h[28552]=+h[28551];c[57100]=c[57098];c[57096]=c[57094]}n=+h[28552];c[57114]=~~(n*10.0);m=~~(n*.25*10.0);c[57112]=m;c[57110]=m;c[(c[3524]|0)+20>>2]=~~(n*.7*10.0);c[(c[3524]|0)+16>>2]=((c[57112]|0)+(c[57114]|0)|0)+(c[57110]|0);i=d;return 1}function qk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;g=i;i=i+48|0;h=g|0;c[h>>2]=b;c[h+4>>2]=d;j=e+b|0;c[h+12>>2]=j;c[h+16>>2]=d;c[h+24>>2]=j;j=f+d|0;c[h+28>>2]=j;c[h+36>>2]=b;c[h+40>>2]=j;c[h+8>>2]=a;qp(4,h|0);i=g;return}function ql(b){b=+b;var d=0;if(+h[28571]==b){return}h[28571]=b;h[28376]=b;h[28378]=b;h[28380]=b;h[28382]=b;h[28384]=b;h[28386]=b;h[28388]=b;h[28390]=b;h[28392]=b;h[28394]=b;h[28396]=b;h[28398]=b;h[28400]=b;h[28402]=b;h[28404]=b;h[28406]=b;if(a[227272]|0){if(a[228352]|0){d=c[10030]|0;aI(78232|0,6,1,d|0);a[228352]=0}d=c[10030]|0;aI(78240|0,9,1,d|0);c[56816]=0;a[227272]=0}if(a[228352]|0){d=c[10030]|0;aI(78232|0,6,1,d|0);a[228352]=0}if(a[228344]|0){d=c[10030]|0;aI(77776|0,5,1,d|0);a[228344]=0;c[57120]=-1}tu();return}function qm(b){b=b|0;var d=0;if(a[228352]|0){d=c[10030]|0;aI(78232,6,1,d|0);a[228352]=0}if((b|0)==0){return 0}c[56821]=c[b+4>>2];c[56822]=c[b+8>>2];c[56823]=c[b+12>>2];c[56824]=c[b+16>>2];a[227300]=a[b+20|0]|0;return 0}function qn(){if(!(a[228352]|0)){return}aI(78232,6,1,c[10030]|0);a[228352]=0;return}function qo(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0;d=i;i=i+8|0;e=d|0;f=c[b>>2]|0;if((f|0)==3){g=c[b+4>>2]|0;j=g>>>16&255;a[e|0]=j;a[e+1|0]=g>>>8&255;a[e+2|0]=g&255;k=j}else if((f|0)==1){j=c[b+4>>2]|0;if((j|0)>12){l=(j|0)%13&-1}else{l=j}j=l+3|0;c[57082]=227016+(((j|0)<0?0:j<<16>>16)<<4);a[228528]=1;i=d;return}else if((f|0)==5){fr(+h[b+8>>3],e);k=a[e|0]|0}else{i=d;return}a[228528]=3;b=e|0;do{if(k<<24>>24==(a[226992]|0)){if((a[e+1|0]|0)!=(a[228368]|0)){break}if((a[e+2|0]|0)!=(a[228536]|0)){break}i=d;return}}while(0);if(a[227272]|0){if(a[228352]|0){k=c[10030]|0;aI(78232,6,1,k|0);a[228352]=0}k=c[10030]|0;aI(78240,9,1,k|0);c[56816]=0;a[227272]=0}a[226992]=a[b]|0;a[228368]=a[e+1|0]|0;a[228536]=a[e+2|0]|0;i=d;return}function qp(b,e){b=b|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0.0;f=i;g=e+8|0;j=c[g>>2]|0;k=j>>4;l=j&15;c[g>>2]=l;do{if((l|0)==5|(l|0)==2){g=(k|0)%8&-1;if((g|0)==(c[57120]|0)){break}c[57120]=g;if(a[227272]|0){if(a[228352]|0){j=c[10030]|0;aI(78232,6,1,j|0);a[228352]=0}j=c[10030]|0;aI(78240,9,1,j|0);c[56816]=0;a[227272]=0}j=(c[57118]|0)+1|0;c[57118]=j;m=c[10030]|0;cf(m|0,76176,(v=i,i=i+8|0,c[v>>2]=j,v)|0);if((g|0)==7){n=76328;o=75816}else if((g|0)==5){n=76328;o=75896}else if((g|0)==3){n=76584;o=76e3}else if((g|0)==2){n=76328;o=76032}else if((g|0)==6){n=76328;o=75856}else if((g|0)==4){n=76328;o=75920}else if((g|0)==1){n=76328;o=76104}else{n=76328;o=179864}do{if((a[o]|0)!=0){g=(aY(n|0,76584)|0)==0?75712:75792;j=a[228528]|0;if(j<<24>>24==3){m=c[10030]|0;p=d[226992]|0;q=d[228368]|0;r=d[228536]|0;cf(m|0,75592,(v=i,i=i+48|0,c[v>>2]=g,c[v+8>>2]=n,c[v+16>>2]=p,c[v+24>>2]=q,c[v+32>>2]=r,c[v+40>>2]=o,v)|0);break}r=c[10030]|0;if(j<<24>>24==1){j=c[57082]|0;cf(r|0,75504,(v=i,i=i+32|0,c[v>>2]=g,c[v+8>>2]=n,c[v+16>>2]=j,c[v+24>>2]=o,v)|0);break}else{cf(r|0,75424,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=n,c[v+16>>2]=o,v)|0);break}}}while(0);g=c[10030]|0;aI(75400,22,1,g|0)}}while(0);if(!(a[228352]|0)){if(a[227272]|0){o=c[10030]|0;aI(78240,9,1,o|0);c[56816]=0;a[227272]=0}o=c[10030]|0;aI(76352,55,1,o|0);a[228352]=1}aI(77136,11,1,c[10030]|0);do{if((l|0)==0){o=c[10030]|0;cf(o|0,77072,(v=i,i=i+8|0,c[v>>2]=227016,v)|0)}else if((l|0)==2|(l|0)==5){cf(c[10030]|0,76808,(v=i,i=i+8|0,c[v>>2]=c[57118],v)|0)}else if((l|0)==1|(l|0)==4){o=a[228528]|0;do{if(o<<24>>24==3){n=c[10030]|0;g=d[226992]|0;r=d[228368]|0;j=d[228536]|0;cf(n|0,76552,(v=i,i=i+32|0,c[v>>2]=76584,c[v+8>>2]=g,c[v+16>>2]=r,c[v+24>>2]=j,v)|0)}else{j=c[10030]|0;if(o<<24>>24==1){r=c[57082]|0;cf(j|0,76480,(v=i,i=i+16|0,c[v>>2]=76584,c[v+8>>2]=r,v)|0);break}else{cf(j|0,76448,(v=i,i=i+8|0,c[v>>2]=76584,v)|0);break}}}while(0);if(k>>>0>=100){break}cf(c[10030]|0,76904,(v=i,i=i+8|0,h[v>>3]=+(k|0)*.01,v)|0)}else{o=a[228528]|0;if(o<<24>>24==3){j=c[10030]|0;r=d[226992]|0;g=d[228368]|0;n=d[228536]|0;cf(j|0,76552,(v=i,i=i+32|0,c[v>>2]=76584,c[v+8>>2]=r,c[v+16>>2]=g,c[v+24>>2]=n,v)|0);break}n=c[10030]|0;if(o<<24>>24==1){o=c[57082]|0;cf(n|0,76480,(v=i,i=i+16|0,c[v>>2]=76584,c[v+8>>2]=o,v)|0);break}else{cf(n|0,76448,(v=i,i=i+8|0,c[v>>2]=76584,v)|0);break}}}while(0);aI(76704,11,1,c[10030]|0);k=c[10030]|0;if((b|0)>0){s=0;t=k}else{u=k;w=aI(76624,4,1,u|0)|0;i=f;return}while(1){x=+((c[(c[3524]|0)+12>>2]|0)-(c[e+(s*12&-1)+4>>2]|0)|0)/10.0;cf(t|0,76648,(v=i,i=i+24|0,h[v>>3]=+(c[e+(s*12&-1)>>2]|0)/10.0,h[v+8>>3]=x,c[v+16>>2]=((s|0)%16&-1|0)==15?140136:73808,v)|0);k=s+1|0;l=c[10030]|0;if((k|0)<(b|0)){s=k;t=l}else{u=l;break}}w=aI(76624,4,1,u|0)|0;i=f;return}function qq(b,d,e,f,g,j){b=b|0;d=+d;e=+e;f=f|0;g=g|0;j=j|0;var k=0,l=0.0,m=0.0,n=0;f=i;if((j|0)==2){if(a[237880]|0){a[237880]=0;a[c[11232]|0]=0;k=c[10030]|0;cf(k|0,77712,(v=i,i=i+8|0,c[v>>2]=43856,v)|0)}k=c[10030]|0;l=+(c[59472]|0)*.5;m=+h[29737]-e;cf(k|0,77608,(v=i,i=i+16|0,h[v>>3]=l,h[v+8>>3]=m,v)|0);h[29737]=e;h[29731]=0.0;c[11232]=43856;c[59472]=0;a[237880]=1;i=f;return}else if((j|0)==4){h[29731]=+(c[59472]|0)*-.5;h[29737]=+h[29737]-e;c[59472]=0;i=f;return}else if((j|0)==3){c[59472]=0;i=f;return}else{if(a[237880]|0){i=f;return}a[237880]=1;c[11232]=43856;aI(77600,6,1,c[10030]|0);j=c[57108]|0;if((aY(j|0,b|0)|0)!=0){uu(j);if((b|0)==0){n=0}else{n=bP(b|0)|0}c[57108]=n;b=c[10030]|0;cf(b|0,77568,(v=i,i=i+8|0,c[v>>2]=n,v)|0)}if(+h[28552]!=d){h[28552]=d;n=c[10030]|0;cf(n|0,77544,(v=i,i=i+8|0,h[v>>3]=d,v)|0)}n=c[57096]|0;do{if((n|0)!=0){if((aY(n|0,77432)|0)==0){break}b=c[10030]|0;cf(b|0,77368,(v=i,i=i+8|0,c[v>>2]=n,v)|0)}}while(0);n=c[57100]|0;do{if((n|0)!=0){if((aY(n|0,77432)|0)==0){break}b=c[10030]|0;cf(b|0,77288,(v=i,i=i+8|0,c[v>>2]=n,v)|0)}}while(0);d=+h[29731];if(d!=0.0){n=c[10030]|0;cf(n|0,77256,(v=i,i=i+8|0,h[v>>3]=d,v)|0);h[29731]=0.0}d=+h[29737];if(d!=e){n=c[10030]|0;m=d-e;cf(n|0,77240,(v=i,i=i+8|0,h[v>>3]=m,v)|0);h[29737]=e}if(!g){g=c[10030]|0;aI(77208,12,1,g|0)}if(a[237872]|0){g=c[10030]|0;aI(77184,21,1,g|0)}aF(62,c[10030]|0);i=f;return}}function qr(){var b=0;b=i;if(!(a[237880]|0)){i=b;return}a[237880]=0;a[c[11232]|0]=0;cf(c[10030]|0,77712,(v=i,i=i+8|0,c[v>>2]=43856,v)|0);i=b;return}function qs(d){d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+8|0;f=e|0;b[f>>1]=0;if((d|0)==0|(d|0)==10){c[56750]=0;i=e;return}else if((d|0)==6){if(a[227272]|0){if(a[228352]|0){g=c[10030]|0;aI(78232,6,1,g|0);a[228352]=0}g=c[10030]|0;aI(78240,9,1,g|0);c[56816]=0;a[227272]=0}if(a[228352]|0){g=c[10030]|0;aI(78232,6,1,g|0);a[228352]=0}if(a[228344]|0){g=c[10030]|0;aI(77776,5,1,g|0);a[228344]=0;c[57120]=-1}g=(c[56750]|0)+1|0;c[56750]=g;h=c[57076]|0;j=(h|0)!=0?h:78208;do{if((a[33512]&1)!=0){h=c[8415]|0;if((h|0)>=26){break}a[f]=h+97&255}}while(0);cf(c[10030]|0,78184,(v=i,i=i+24|0,c[v>>2]=j,c[v+8>>2]=g,c[v+16>>2]=f,v)|0);g=c[56750]|0;cf(c[10030]|0,78072,(v=i,i=i+24|0,c[v>>2]=j,c[v+8>>2]=g,c[v+16>>2]=f,v)|0);c[57144]=-5;i=e;return}else if((d|0)==9){if(!(a[228312]|0)){i=e;return}if(a[227272]|0){if(a[228352]|0){g=c[10030]|0;aI(78232,6,1,g|0);a[228352]=0}g=c[10030]|0;aI(78240,9,1,g|0);c[56816]=0;a[227272]=0}if(a[228352]|0){g=c[10030]|0;aI(78232,6,1,g|0);a[228352]=0}aI(78232,6,1,c[10030]|0);c[57144]=-5;i=e;return}else if((d|0)==7){if(a[227272]|0){if(a[228352]|0){g=c[10030]|0;aI(78232,6,1,g|0);a[228352]=0}g=c[10030]|0;aI(78240,9,1,g|0);c[56816]=0;a[227272]=0}if(a[228352]|0){g=c[10030]|0;aI(78232,6,1,g|0);a[228352]=0}if(a[228344]|0){g=c[10030]|0;aI(77776,5,1,g|0);a[228344]=0;c[57120]=-1}aI(78232,6,1,c[10030]|0);c[57144]=-5;i=e;return}else if((d|0)==3){a[228360]=1;a[228336]=1;i=e;return}else if((d|0)==4){a[228360]=0;i=e;return}else if((d|0)==8){if(!(a[228312]|0)){i=e;return}if(a[227272]|0){if(a[228352]|0){d=c[10030]|0;aI(78232,6,1,d|0);a[228352]=0}d=c[10030]|0;aI(78240,9,1,d|0);c[56816]=0;a[227272]=0}if(a[228352]|0){d=c[10030]|0;aI(78232,6,1,d|0);a[228352]=0}d=c[57076]|0;g=(d|0)!=0?d:78208;do{if((a[33512]&1)!=0){d=c[8415]|0;if((d|0)>=26){break}a[f]=d+97&255}}while(0);aI(77992,25,1,c[10030]|0);d=c[56750]|0;cf(c[10030]|0,77856,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=d,c[v+16>>2]=f,v)|0);aI(77816,2,1,c[10030]|0);i=e;return}else{i=e;return}}function qt(b){b=b|0;if((b|0)!=1){return}aI(78256,2,1,c[10030]|0);if(!(a[227272]|0)){return}if(a[228352]|0){b=c[10030]|0;aI(78232,6,1,b|0);a[228352]=0}aI(78240,9,1,c[10030]|0);c[56816]=0;a[227272]=0;return}function qu(){var b=0,d=0,e=0,f=0;b=i;if((a[33512]&1)==0){d=c[766]|0}else{c[772]=100;if((c[520]|0)>>>0>1){e=c[m>>2]|0;aI(79400,34,1,e|0);c[520]=1}c[766]=1;d=1}e=c[772]|0;f=c[778]|0;cf(c[10030]|0,79224,(v=i,i=i+56|0,c[v>>2]=a[225808]&1,c[v+8>>2]=e,c[v+16>>2]=d,c[v+24>>2]=25680,c[v+32>>2]=f,c[v+40>>2]=40152,c[v+48>>2]=40160,v)|0);a[46624]=0;c[9372]=0;c[524]=0;i=b;return}function qv(){var a=0;tt();c[9372]=0;c[524]=0;c[522]=1;c[526]=1;a=c[10030]|0;if((a|0)==0){return}aD(a|0);return}function qw(){tt();return}function qx(){var b=0,d=0,e=0,f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0,Q=0,R=0.0,S=0,T=0,U=0.0,V=0.0,W=0;b=i;i=i+80|0;d=b|0;e=b+24|0;f=b+48|0;j=b+72|0;k=c[13898]|0;l=c[8272]|0;L23998:do{if((k|0)<(l|0)){m=d|0;n=d+8|0;o=k;p=l;L24000:while(1){q=c[1054]|0;r=(a[q+(o*40&-1)|0]&1)==0;L24002:do{if(!r){s=c[q+(o*40&-1)+36>>2]|0;t=q+(o*40&-1)+32|0;u=c[10036]|0;w=0;while(1){if((w|0)>=(s|0)){break}if((a[u+((c[t>>2]|0)+w|0)|0]|0)==(a[w+103664|0]|0)){w=w+1|0}else{break L24002}}if((w|0)==1){break L23998}}}while(0);t=c[56580]|0;L24009:do{if((t|0)==0){x=226320}else{u=c[q+(o*40&-1)+36>>2]|0;s=c[q+(o*40&-1)+32>>2]|0;y=(u|0)>0;z=c[10036]|0;A=226320;B=t;while(1){L24013:do{if(!r){if(y){C=0;D=0;E=s;while(1){F=a[B+C|0]|0;if(F<<24>>24==(a[z+(C+E|0)|0]|0)){G=E;H=D}else{if(F<<24>>24!=36){break L24013}G=E-1|0;H=1}I=C+1|0;if((I|0)<(H+u|0)){C=I;D=H;E=G}else{break}}if((H|0)==0){J=I}else{x=A;break L24009}}else{J=0}E=a[B+J|0]|0;if((E<<24>>24|0)==36|(E<<24>>24|0)==0){x=A;break L24009}}}while(0);E=A+8|0;D=c[E>>2]|0;if((D|0)==0){x=E;break}else{A=E;B=D}}}}while(0);r=c[x+4>>2]|0;if((r|0)==4){a[225808]=1;c[13898]=o+1}else if((r|0)==5){K=o+1|0;c[13898]=K;if((K|0)>=(p|0)){L=18029;break}t=(a[q+(K*40&-1)|0]&1)==0;L24030:do{if(t){L=17953}else{B=c[q+(K*40&-1)+36>>2]|0;A=q+(K*40&-1)+32|0;u=c[10036]|0;z=0;while(1){if((z|0)>=(B|0)){L=17946;break}if((a[u+((c[A>>2]|0)+z|0)|0]|0)==(a[z+103664|0]|0)){z=z+1|0}else{break}}if((L|0)==17946){L=0;if((z|0)==1){L=18030;break L24000}}if(t){L=17953;break}A=c[q+(K*40&-1)+36>>2]|0;u=q+(K*40&-1)+32|0;B=c[10036]|0;s=0;while(1){if((s|0)>=(A|0)){break}if((a[B+((c[u>>2]|0)+s|0)|0]|0)==(a[s+148464|0]|0)){s=s+1|0}else{L=17953;break L24030}}if((s|0)==1){M=K;N=p}else{L=17953}}}while(0);if((L|0)==17953){L=0;t=is(e)|0;u=c[t>>2]|0;if((u|0)==1){O=+(c[t+8>>2]|0)}else if((u|0)==3){O=+uz(c[t+8>>2]|0,0)}else if((u|0)==2){O=+h[t+8>>3]}else{L=17957;break}c[518]=~~O;M=c[13898]|0;N=c[8272]|0}if((N|0)<=(M|0)){L=18025;break}t=c[1054]|0;if((a[t+(M*40&-1)|0]&1)==0){L=18028;break}u=c[t+(M*40&-1)+36>>2]|0;B=t+(M*40&-1)+32|0;A=c[10036]|0;z=0;while(1){if((z|0)>=(u|0)){break}if((a[A+((c[B>>2]|0)+z|0)|0]|0)==(a[z+148464|0]|0)){z=z+1|0}else{L=18026;break L24000}}if((z|0)!=1){L=18027;break}B=M+1|0;c[13898]=B;L24058:do{if((N|0)>(B|0)){if((a[t+(B*40&-1)|0]&1)==0){L=17972;break}u=c[t+(B*40&-1)+36>>2]|0;y=t+(B*40&-1)+32|0;w=0;while(1){if((w|0)>=(u|0)){break}if((a[A+((c[y>>2]|0)+w|0)|0]|0)==(a[w+78864|0]|0)){w=w+1|0}else{L=17972;break L24058}}if((w|0)==1){P=B;Q=N}else{L=17972}}else{L=17972}}while(0);if((L|0)==17972){L=0;B=is(e)|0;A=c[B>>2]|0;if((A|0)==1){R=+(c[B+8>>2]|0)}else if((A|0)==2){R=+h[B+8>>3]}else if((A|0)==3){R=+uz(c[B+8>>2]|0,0)}else{L=17976;break}c[516]=~~R;P=c[13898]|0;Q=c[8272]|0}if((Q|0)<=(P|0)){L=18031;break}B=c[1054]|0;if((a[B+(P*40&-1)|0]&1)==0){L=18032;break}A=c[B+(P*40&-1)+36>>2]|0;t=B+(P*40&-1)+32|0;B=c[10036]|0;z=0;while(1){if((z|0)>=(A|0)){break}if((a[B+((c[t>>2]|0)+z|0)|0]|0)==(a[z+78864|0]|0)){z=z+1|0}else{L=18033;break L24000}}if((z|0)!=1){L=18034;break}c[13898]=P+1;c[520]=aa(c[518]|0,c[516]|0)}else if((r|0)==10){uD(25680,90584,10);uD(25424,90584,10);c[778]=18;c[(c[3524]|0)+16>>2]=18;c[(c[3524]|0)+20>>2]=(((c[778]|0)*6&-1)>>>0)/10>>>0;a[225808]=0;a[225792]=0;t=(c[3524]|0)+96|0;c[t>>2]=c[t>>2]&-1025;a[225800]=0;c[520]=1;c[522]=1;c[526]=1;c[518]=1;c[516]=1;c[772]=100;h[6448]=1.0;h[6449]=1.0;c[13898]=(c[13898]|0)+1}else if((r|0)==0){a[225792]=1;t=(c[3524]|0)+96|0;c[t>>2]=c[t>>2]|1024;c[13898]=(c[13898]|0)+1}else if((r|0)==1){a[225792]=0;t=(c[3524]|0)+96|0;c[t>>2]=c[t>>2]&-1025;c[13898]=(c[13898]|0)+1}else if((r|0)==8){t=o+1|0;c[13898]=t;S=t;L=17989}else if((r|0)==3){a[225808]=0;c[13898]=o+1}else if((r|0)==6){a[225800]=1;c[13898]=o+1}else if((r|0)==7){a[225800]=0;c[13898]=o+1}else if((r|0)==2){T=o+1|0;c[13898]=T;if((T|0)>=(p|0)){L=18024;break}L24089:do{if((a[q+(T*40&-1)|0]&1)!=0){t=c[q+(T*40&-1)+36>>2]|0;B=q+(T*40&-1)+32|0;A=c[10036]|0;y=0;while(1){if((y|0)>=(t|0)){break}if((a[A+((c[B>>2]|0)+y|0)|0]|0)==(a[y+103664|0]|0)){y=y+1|0}else{break L24089}}if((y|0)==1){L=18023;break L24000}}}while(0);z=is(e)|0;B=c[z>>2]|0;if((B|0)==1){U=+(c[z+8>>2]|0)}else if((B|0)==2){U=+h[z+8>>3]}else if((B|0)==3){U=+uz(c[z+8>>2]|0,0)}else{L=17936;break}h[6449]=U;if(U<=0.0){L=17938;break}}else{S=o;L=17989}L24101:do{if((L|0)==17989){L=0;L24103:do{if((S|0)<(p|0)){L24105:do{if((a[q+(S*40&-1)|0]&1)!=0){z=c[q+(S*40&-1)+36>>2]|0;B=q+(S*40&-1)+32|0;A=c[10036]|0;t=0;while(1){if((t|0)>=(z|0)){break}if((a[A+((c[B>>2]|0)+t|0)|0]|0)==(a[t+103664|0]|0)){t=t+1|0}else{break L24105}}if((t|0)==1){break L24103}}}while(0);a[14176]=1;is(d);a[14176]=0;if((c[m>>2]|0)!=3){c[13898]=S;break}B=c[n>>2]|0;if((B|0)==0){break}A=bk(B|0,148464)|0;do{if((a[B+A|0]|0)==44){if((ca(B+(A+1|0)|0,148448,(v=i,i=i+8|0,c[v>>2]=j,v)|0)|0)!=1){break}c[778]=~~(+h[j>>3]+.5)}}while(0);if((A|0)>0){uF(25680,B|0,255);a[A+25680|0]=0}uB(25424,25680);uu(B);break L24101}}while(0);if((r|0)==8){L=18006;break L24000}y=is(f)|0;z=c[y>>2]|0;if((z|0)==2){V=+h[y+8>>3]}else if((z|0)==3){V=+uz(c[y+8>>2]|0,0)}else if((z|0)==1){V=+(c[y+8>>2]|0)}else{L=18011;break L24000}y=~~V;c[778]=y;c[(c[3524]|0)+16>>2]=y;c[(c[3524]|0)+20>>2]=(((c[778]|0)*6&-1)>>>0)/10>>>0}}while(0);o=c[13898]|0;p=c[8272]|0;if((o|0)>=(p|0)){break L23998}}if((L|0)==18023){uf(T,79152,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((L|0)==18033){uf(P,78824,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((L|0)==18024){uf(T,79152,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((L|0)==18025){uf(M,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((L|0)==18028){uf(M,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((L|0)==17976){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((L|0)==18030){uf(K,78976,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((L|0)==18034){uf(P,78824,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((L|0)==18029){uf(K,78976,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((L|0)==18031){uf(P,78824,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((L|0)==18006){uf(c[13898]|0,78800,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((L|0)==18027){uf(M,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((L|0)==17938){uf((c[13898]|0)-1|0,79096,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((L|0)==18026){uf(M,78920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((L|0)==18032){uf(P,78824,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((L|0)==17936){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((L|0)==18011){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((L|0)==17957){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);L=a[225808]|0;P=c[518]|0;V=+g[178]*+(((P*1030&-1)-80|0)>>>0>>>0);do{if(L){U=14.0e4/V;M=c[516]|0;R=95.0e3/(+g[38]*+(((M*714&-1)-80|0)>>>0>>>0));c[772]=~~(U<R?U:R);if((M|0)==1){c[766]=0;W=1;break}else if((M|0)==2){c[766]=1;W=2;break}else{c[766]=2;W=M;break}}else{R=95.0e3/V;M=c[516]|0;U=14.0e4/(+g[38]*+(((M*714&-1)-80|0)>>>0>>>0));c[772]=~~(R<U?R:U);if((M|0)==1){c[766]=0;W=1;break}else if((M|0)==2){c[766]=1;W=2;break}else{c[766]=2;W=M;break}}}while(0);be(13048+(uA(13048)|0)|0,78736,(v=i,i=i+24|0,c[v>>2]=L?78704:78720,c[v+8>>2]=P,c[v+16>>2]=W,v)|0);uC(13048,(a[225792]|0?78656:95304)|0);W=13048+(uA(13048)|0)|0;be(W|0,78504,(v=i,i=i+8|0,h[v>>3]=+h[6449],v)|0);W=13048+(uA(13048)|0)|0;P=c[778]|0;be(W|0,78416,(v=i,i=i+24|0,c[v>>2]=a[225800]|0?131504:131584,c[v+8>>2]=25680,c[v+16>>2]=P,v)|0);i=b;return}function qy(a){a=a|0;if((a|0)==180|(a|0)==(-180|0)){c[780]=2}else if((a|0)==(-270|0)|(a|0)==90){c[780]=3}else if((a|0)==(-90|0)|(a|0)==270){c[780]=1}else{c[780]=0}return 1}function qz(a){a=a|0;c[776]=a;return 1}function qA(){var b=0,d=0,e=0.0,f=0,h=0,i=0;tt();if((a[33512]&1)==0){b=c[524]|0;if(b>>>0>=(c[520]|0)>>>0){d=c[m>>2]|0;aI(79440,40,1,d|0);return}d=b+1|0;c[524]=d;e=+(5e3/((c[772]|0)>>>0)>>>0>>>0>>>0);b=c[526]|0;f=~~(e+ +g[178]*+((b-1|0)>>>0>>>0)*1030.0);c[514]=f;h=c[522]|0;i=~~(e+ +g[38]*+(((h*714&-1)-80|0)>>>0>>>0));c[512]=i;if(((d>>>0)%((c[518]|0)>>>0)>>>0|0)==0){c[526]=1;c[522]=h+1}else{c[526]=b+1}c[554]=f;c[552]=i}else{i=a[225808]|0;c[(c[3524]|0)+8>>2]=i?1400:950;c[(c[3524]|0)+12>>2]=i?950:1400;c[554]=50;f=i?1e3:1450;c[552]=f;c[512]=f;c[514]=50}c[9372]=0;c[774]=0;c[780]=0;c[768]=1;c[770]=0;c[776]=0;a[25936]=a[89416]|0;a[25937|0]=a[89417|0]|0;a[25938|0]=a[89418|0]|0;a[25939|0]=a[89419|0]|0;a[25940|0]=a[89420|0]|0;a[25941|0]=a[89421|0]|0;a[26448]=a[28976]|0;a[26449|0]=a[28977|0]|0;a[26450|0]=a[28978|0]|0;return}function qB(b,d){b=b|0;d=d|0;c[554]=(c[514]|0)+b;c[552]=(c[512]|0)-d;if(!(a[46624]|0)){return}tt();return}function qC(b,d){b=b|0;d=d|0;var e=0,f=0;e=(c[514]|0)+b|0;b=(c[512]|0)-d|0;if(a[46624]|0){f=c[9372]|0}else{c[666]=c[554];c[566]=c[552];c[9372]=1;a[46624]=1;f=1}c[2664+(f<<2)>>2]=e;c[2264+(f<<2)>>2]=b;c[554]=e;c[552]=b;b=f+1|0;c[9372]=b;a[46624]=1;if((b|0)!=100){return}tt();return}function qD(b){b=b|0;var d=0;tt();if((b|0)>-1){d=((b|0)%10&-1)+2|0}else{d=(b|0)<-2?0:b+2|0}if(a[225792]|0){a[25936]=a[89416]|0;a[25937|0]=a[89417|0]|0;a[25938|0]=a[89418|0]|0;a[25939|0]=a[89419|0]|0;a[25940|0]=a[89420|0]|0;a[25941|0]=a[89421|0]|0;a[26448]=a[28976]|0;a[26449|0]=a[28977|0]|0;a[26450|0]=a[28978|0]|0}else{b=c[28928+(d<<2)>>2]|0;uB(25936,b|0);b=28976+(d*3&-1)|0;a[26448]=a[b]|0;a[26449|0]=a[b+1|0]|0;a[26450|0]=a[b+2|0]|0}c[768]=~~(+h[6448]*+h[6449]*+((c[2112+(d<<2)>>2]|0)>>>0>>>0)+.5);if(!(a[225800]|0)){c[770]=c[2160+(d<<2)>>2];return}if((d|0)==1){c[770]=5;return}else{c[770]=0;return}}function qE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;g=c[3524]|0;tt();if((a[e]|0)==0){i=f;return}h=((c[512]|0)-d|0)-((c[g+16>>2]|0)>>>1)|0;g=(c[514]|0)+b|0;b=c[778]|0;d=c[780]|0;j=(d|0)!=0?1:c[776]|0;k=c[774]|0;cf(c[10030]|0,79720,(v=i,i=i+72|0,c[v>>2]=25936,c[v+8>>2]=g,c[v+16>>2]=h,c[v+24>>2]=25680,c[v+32>>2]=b,c[v+40>>2]=j,c[v+48>>2]=d,c[v+56>>2]=k,c[v+64>>2]=e,v)|0);c[774]=(c[774]|0)+2;i=f;return}function qF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0,q=0.0,r=0.0;e=i;f=+(((c[514]|0)+a|0)>>>0>>>0);g=+(((c[512]|0)-b|0)>>>0>>>0);j=+h[3817]*8.0;k=j==0.0?.1:j;tt();do{if((d|0)!=-1){b=(d|0)%63&-1;if((b|0)==27){a=c[10030]|0;aI(83312,8,1,a|0);a=c[10030]|0;j=f-k;l=g-k;m=f+k;n=g+k;o=c[774]|0;c[774]=o+1;cf(a|0,82792,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=j,h[v+16>>3]=l,h[v+24>>3]=m,h[v+32>>3]=n,c[v+40>>2]=o,v)|0);o=c[10030]|0;n=k*2.0;a=c[774]|0;c[774]=a+1;cf(o|0,80304,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=j,h[v+16>>3]=l,h[v+24>>3]=f,h[v+32>>3]=g,h[v+40>>3]=j,h[v+48>>3]=g,h[v+56>>3]=m,h[v+64>>3]=g,h[v+72>>3]=n,h[v+80>>3]=n,c[v+88>>2]=a,v)|0);a=c[774]|0;o=a+2|0;p=c[10030]|0;c[774]=a+3;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o,v)|0);i=e;return}else if((b|0)==50){aI(83312,8,1,c[10030]|0);n=g+k;m=g-k;j=f-k;o=c[774]|0;cf(c[10030]|0,82320,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=n,h[v+24>>3]=f+k,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=m,h[v+56>>3]=j,h[v+64>>3]=g,h[v+72>>3]=f,h[v+80>>3]=n,c[v+88>>2]=o,v)|0);n=k*.5;o=c[774]|0;cf(c[10030]|0,82216,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=j,h[v+16>>3]=g,h[v+24>>3]=f,h[v+32>>3]=m,h[v+40>>3]=f+n,h[v+48>>3]=g-n,h[v+56>>3]=f-n,h[v+64>>3]=g+n,h[v+72>>3]=j,h[v+80>>3]=g,c[v+88>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+3;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+2,v)|0);i=e;return}else if((b|0)==10){j=g+k;n=g-k*.75;o=c[774]|0;cf(c[10030]|0,82472,(v=i,i=i+80|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=j,h[v+24>>3]=f-k,h[v+32>>3]=n,h[v+40>>3]=f+k,h[v+48>>3]=n,h[v+56>>3]=f,h[v+64>>3]=j,c[v+72>>2]=o,v)|0);c[774]=(c[774]|0)+1;i=e;return}else if((b|0)==39){aI(83312,8,1,c[10030]|0);o=c[10030]|0;j=f+k;n=g+k;p=c[774]|0;c[774]=p+1;cf(o|0,82960,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=f-k,h[v+16>>3]=g-k,h[v+24>>3]=j,h[v+32>>3]=n,c[v+40>>2]=p,v)|0);p=c[10030]|0;o=c[774]|0;c[774]=o+1;cf(p|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=g,h[v+24>>3]=j,h[v+32>>3]=n,c[v+40>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+3;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+2,v)|0);i=e;return}else if((b|0)==26){aI(83312,8,1,c[10030]|0);o=c[10030]|0;n=f-k;j=g-k;m=g+k;p=c[774]|0;c[774]=p+1;cf(o|0,82792,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=n,h[v+16>>3]=j,h[v+24>>3]=f+k,h[v+32>>3]=m,c[v+40>>2]=p,v)|0);p=c[10030]|0;l=k*2.0;o=c[774]|0;c[774]=o+1;cf(p|0,80448,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=n,h[v+16>>3]=j,h[v+24>>3]=f,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=m,h[v+56>>3]=n,h[v+64>>3]=g,h[v+72>>3]=l,h[v+80>>3]=l,c[v+88>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+3;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+2,v)|0);i=e;return}else if((b|0)==1){l=f-k;n=g-k;m=f+k;j=g+k;o=c[774]|0;cf(c[10030]|0,83432,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=l,h[v+16>>3]=n,h[v+24>>3]=m,h[v+32>>3]=j,c[v+40>>2]=o+1,c[v+48>>2]=25936,h[v+56>>3]=l,h[v+64>>3]=j,h[v+72>>3]=m,h[v+80>>3]=n,c[v+88>>2]=o+2,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+5;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+4,v)|0);i=e;return}else if((b|0)==41){aI(83312,8,1,c[10030]|0);o=c[10030]|0;n=f-k;m=g-k;j=f+k;l=g+k;p=c[774]|0;c[774]=p+1;cf(o|0,82960,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=n,h[v+16>>3]=m,h[v+24>>3]=j,h[v+32>>3]=l,c[v+40>>2]=p,v)|0);p=c[10030]|0;o=c[774]|0;c[774]=o+1;cf(p|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=n,h[v+16>>3]=m,h[v+24>>3]=f,h[v+32>>3]=g,c[v+40>>2]=o,v)|0);o=c[10030]|0;p=c[774]|0;c[774]=p+1;cf(o|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=g,h[v+24>>3]=j,h[v+32>>3]=l,c[v+40>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+4;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+3,v)|0);i=e;return}else if((b|0)==31){aI(83312,8,1,c[10030]|0);p=c[10030]|0;l=g-k;o=c[774]|0;c[774]=o+1;cf(p|0,82960,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=f-k,h[v+16>>3]=l,h[v+24>>3]=f+k,h[v+32>>3]=g+k,c[v+40>>2]=o,v)|0);o=c[10030]|0;j=k*.25;p=c[774]|0;c[774]=p+1;cf(o|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=f-j,h[v+16>>3]=l,h[v+24>>3]=f+j,h[v+32>>3]=g,c[v+40>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+3;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+2,v)|0);i=e;return}else if((b|0)==57){aI(83312,8,1,c[10030]|0);j=g+k;l=f+k;m=f-k;p=c[774]|0;cf(c[10030]|0,82320,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=j,h[v+24>>3]=l,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=g-k,h[v+56>>3]=m,h[v+64>>3]=g,h[v+72>>3]=f,h[v+80>>3]=j,c[v+88>>2]=p,v)|0);j=k*.5;n=f-j;q=g-j;r=g+j;p=c[774]|0;cf(c[10030]|0,82216,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=m,h[v+16>>3]=g,h[v+24>>3]=n,h[v+32>>3]=q,h[v+40>>3]=f,h[v+48>>3]=g,h[v+56>>3]=n,h[v+64>>3]=r,h[v+72>>3]=m,h[v+80>>3]=g,c[v+88>>2]=p,v)|0);m=f+j;p=c[774]|0;cf(c[10030]|0,82216,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=g,h[v+24>>3]=m,h[v+32>>3]=q,h[v+40>>3]=l,h[v+48>>3]=g,h[v+56>>3]=m,h[v+64>>3]=r,h[v+72>>3]=f,h[v+80>>3]=g,c[v+88>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+4;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+3,v)|0);i=e;return}else if((b|0)==43){aI(83312,8,1,c[10030]|0);p=c[10030]|0;r=f-k;m=f+k;l=g+k;o=c[774]|0;c[774]=o+1;cf(p|0,82960,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=r,h[v+16>>3]=g-k,h[v+24>>3]=m,h[v+32>>3]=l,c[v+40>>2]=o,v)|0);o=c[10030]|0;p=c[774]|0;c[774]=p+1;cf(o|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=r,h[v+16>>3]=g,h[v+24>>3]=m,h[v+32>>3]=l,c[v+40>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+3;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+2,v)|0);i=e;return}else if((b|0)==12){l=g+k;p=c[774]|0;cf(c[10030]|0,82216,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=l,h[v+24>>3]=f+k,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=g-k,h[v+56>>3]=f-k,h[v+64>>3]=g,h[v+72>>3]=f,h[v+80>>3]=l,c[v+88>>2]=p,v)|0);c[774]=(c[774]|0)+1;i=e;return}else if((b|0)==52){aI(83312,8,1,c[10030]|0);l=g+k;m=g-k;p=c[774]|0;cf(c[10030]|0,82320,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=l,h[v+24>>3]=f+k,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=m,h[v+56>>3]=f-k,h[v+64>>3]=g,h[v+72>>3]=f,h[v+80>>3]=l,c[v+88>>2]=p,v)|0);r=k*.5;q=f-r;j=g-r;n=f+r;p=c[774]|0;cf(c[10030]|0,82216,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=q,h[v+16>>3]=j,h[v+24>>3]=f,h[v+32>>3]=m,h[v+40>>3]=n,h[v+48>>3]=j,h[v+56>>3]=f,h[v+64>>3]=g,h[v+72>>3]=q,h[v+80>>3]=j,c[v+88>>2]=p,v)|0);j=g+r;p=c[774]|0;cf(c[10030]|0,82216,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=q,h[v+16>>3]=j,h[v+24>>3]=f,h[v+32>>3]=g,h[v+40>>3]=n,h[v+48>>3]=j,h[v+56>>3]=f,h[v+64>>3]=l,h[v+72>>3]=q,h[v+80>>3]=j,c[v+88>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+4;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+3,v)|0);i=e;return}else if((b|0)==8){j=g-k;q=g+k*.75;p=c[774]|0;cf(c[10030]|0,82472,(v=i,i=i+80|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=j,h[v+24>>3]=f+k,h[v+32>>3]=q,h[v+40>>3]=f-k,h[v+48>>3]=q,h[v+56>>3]=f,h[v+64>>3]=j,c[v+72>>2]=p,v)|0);c[774]=(c[774]|0)+1;i=e;return}else if((b|0)==29){aI(83312,8,1,c[10030]|0);p=c[10030]|0;j=f-k;q=g-k;l=f+k;o=c[774]|0;c[774]=o+1;cf(p|0,82792,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=j,h[v+16>>3]=q,h[v+24>>3]=l,h[v+32>>3]=g+k,c[v+40>>2]=o,v)|0);o=c[10030]|0;n=k*2.0;p=c[774]|0;c[774]=p+1;cf(o|0,80048,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=j,h[v+16>>3]=q,h[v+24>>3]=f,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=q,h[v+56>>3]=l,h[v+64>>3]=g,h[v+72>>3]=n,h[v+80>>3]=n,c[v+88>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+3;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+2,v)|0);i=e;return}else if((b|0)==45){aI(83312,8,1,c[10030]|0);p=c[10030]|0;n=f-k;l=g-k;q=f+k;j=g+k;o=c[774]|0;c[774]=o+1;cf(p|0,82960,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=n,h[v+16>>3]=l,h[v+24>>3]=q,h[v+32>>3]=j,c[v+40>>2]=o,v)|0);o=c[10030]|0;p=c[774]|0;c[774]=p+1;cf(o|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=n,h[v+16>>3]=l,h[v+24>>3]=f,h[v+32>>3]=g,c[v+40>>2]=p,v)|0);p=c[10030]|0;o=c[774]|0;c[774]=o+1;cf(p|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=n,h[v+16>>3]=g,h[v+24>>3]=q,h[v+32>>3]=j,c[v+40>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+4;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+3,v)|0);i=e;return}else if((b|0)==49){aI(83312,8,1,c[10030]|0);j=g+k;q=f-k;o=c[774]|0;cf(c[10030]|0,82320,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=j,h[v+24>>3]=f+k,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=g-k,h[v+56>>3]=q,h[v+64>>3]=g,h[v+72>>3]=f,h[v+80>>3]=j,c[v+88>>2]=o,v)|0);j=k*.5;n=f-j;o=c[774]|0;cf(c[10030]|0,82216,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=q,h[v+16>>3]=g,h[v+24>>3]=n,h[v+32>>3]=g-j,h[v+40>>3]=f,h[v+48>>3]=g,h[v+56>>3]=n,h[v+64>>3]=g+j,h[v+72>>3]=q,h[v+80>>3]=g,c[v+88>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+3;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+2,v)|0);i=e;return}else if((b|0)==14){q=g-k;j=g-k*.25;n=k*.625;l=g+k;o=c[774]|0;cf(c[10030]|0,81840,(v=i,i=i+112|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=q,h[v+24>>3]=f+k,h[v+32>>3]=j,h[v+40>>3]=f+n,h[v+48>>3]=l,h[v+56>>3]=f-n,h[v+64>>3]=l,h[v+72>>3]=f-k,h[v+80>>3]=j,h[v+88>>3]=f,h[v+96>>3]=q,c[v+104>>2]=o,v)|0);c[774]=(c[774]|0)+1;i=e;return}else if((b|0)==47){aI(83312,8,1,c[10030]|0);q=g+k;o=c[774]|0;cf(c[10030]|0,82320,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=q,h[v+24>>3]=f+k,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=g-k,h[v+56>>3]=f-k,h[v+64>>3]=g,h[v+72>>3]=f,h[v+80>>3]=q,c[v+88>>2]=o,v)|0);q=k*.625;j=f-q;l=k*.375;n=g-l;r=k*.125;o=c[774]|0;cf(c[10030]|0,82216,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=j,h[v+16>>3]=n,h[v+24>>3]=f-l,h[v+32>>3]=g-q,h[v+40>>3]=f+r,h[v+48>>3]=g-r,h[v+56>>3]=f-r,h[v+64>>3]=g+r,h[v+72>>3]=j,h[v+80>>3]=n,c[v+88>>2]=o,v)|0);o=c[10030]|0;p=c[774]|0;c[774]=p+1;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p,v)|0);c[774]=(c[774]|0)+2;i=e;return}else if((b|0)==30){p=c[774]|0;cf(c[10030]|0,82736,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=f-k,h[v+16>>3]=g-k,h[v+24>>3]=f+k,h[v+32>>3]=g+k,c[v+40>>2]=p,v)|0);c[774]=(c[774]|0)+1;i=e;return}else if((b|0)==4){p=c[774]|0;cf(c[10030]|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=f-k,h[v+16>>3]=g-k,h[v+24>>3]=f+k,h[v+32>>3]=g+k,c[v+40>>2]=p,v)|0);c[774]=(c[774]|0)+1;i=e;return}else if((b|0)==23){aI(83312,8,1,c[10030]|0);p=c[10030]|0;n=f-k;j=g-k;r=f+k;q=g+k;o=c[774]|0;c[774]=o+1;cf(p|0,82792,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=n,h[v+16>>3]=j,h[v+24>>3]=r,h[v+32>>3]=q,c[v+40>>2]=o,v)|0);o=c[10030]|0;l=k*2.0;p=c[774]|0;c[774]=p+1;cf(o|0,80720,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=n,h[v+16>>3]=j,h[v+24>>3]=f,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=q,h[v+56>>3]=r,h[v+64>>3]=g,h[v+72>>3]=l,h[v+80>>3]=l,c[v+88>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+3;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+2,v)|0);i=e;return}else if((b|0)==11){l=g+k;p=c[774]|0;cf(c[10030]|0,82320,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=l,h[v+24>>3]=f+k,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=g-k,h[v+56>>3]=f-k,h[v+64>>3]=g,h[v+72>>3]=f,h[v+80>>3]=l,c[v+88>>2]=p,v)|0);c[774]=(c[774]|0)+1;i=e;return}else if((b|0)==56){aI(83312,8,1,c[10030]|0);l=g+k;r=f+k;q=g-k;p=c[774]|0;cf(c[10030]|0,82320,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=l,h[v+24>>3]=r,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=q,h[v+56>>3]=f-k,h[v+64>>3]=g,h[v+72>>3]=f,h[v+80>>3]=l,c[v+88>>2]=p,v)|0);l=k*.5;j=f-l;n=g-l;p=c[774]|0;cf(c[10030]|0,82216,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=j,h[v+16>>3]=n,h[v+24>>3]=f,h[v+32>>3]=q,h[v+40>>3]=r,h[v+48>>3]=g,h[v+56>>3]=f+l,h[v+64>>3]=g+l,h[v+72>>3]=j,h[v+80>>3]=n,c[v+88>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+3;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+2,v)|0);i=e;return}else if((b|0)==20){aI(83312,8,1,c[10030]|0);p=c[10030]|0;n=f-k;j=g-k;l=f+k;r=g+k;o=c[774]|0;c[774]=o+1;cf(p|0,82792,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=n,h[v+16>>3]=j,h[v+24>>3]=l,h[v+32>>3]=r,c[v+40>>2]=o,v)|0);o=c[10030]|0;q=k*2.0;p=c[774]|0;c[774]=p+1;cf(o|0,81608,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=n,h[v+16>>3]=j,h[v+24>>3]=f,h[v+32>>3]=g,h[v+40>>3]=l,h[v+48>>3]=g,h[v+56>>3]=f,h[v+64>>3]=j,h[v+72>>3]=q,h[v+80>>3]=q,c[v+88>>2]=p,v)|0);p=c[10030]|0;o=c[774]|0;c[774]=o+1;cf(p|0,81160,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=n,h[v+16>>3]=j,h[v+24>>3]=f,h[v+32>>3]=g,h[v+40>>3]=n,h[v+48>>3]=g,h[v+56>>3]=f,h[v+64>>3]=r,h[v+72>>3]=q,h[v+80>>3]=q,c[v+88>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+4;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+3,v)|0);i=e;return}else if((b|0)==28){aI(83312,8,1,c[10030]|0);o=c[10030]|0;q=f-k;r=g-k;p=c[774]|0;c[774]=p+1;cf(o|0,82792,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=q,h[v+16>>3]=r,h[v+24>>3]=f+k,h[v+32>>3]=g+k,c[v+40>>2]=p,v)|0);p=c[10030]|0;n=k*2.0;o=c[774]|0;c[774]=o+1;cf(p|0,80200,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=q,h[v+16>>3]=r,h[v+24>>3]=f,h[v+32>>3]=g,h[v+40>>3]=q,h[v+48>>3]=g,h[v+56>>3]=f,h[v+64>>3]=r,h[v+72>>3]=n,h[v+80>>3]=n,c[v+88>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+3;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+2,v)|0);i=e;return}else if((b|0)==19){aI(83312,8,1,c[10030]|0);o=c[10030]|0;n=f-k;r=g-k;q=g+k;p=c[774]|0;c[774]=p+1;cf(o|0,82792,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=n,h[v+16>>3]=r,h[v+24>>3]=f+k,h[v+32>>3]=q,c[v+40>>2]=p,v)|0);p=c[10030]|0;j=k*2.0;o=c[774]|0;c[774]=o+1;cf(p|0,81160,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=n,h[v+16>>3]=r,h[v+24>>3]=f,h[v+32>>3]=g,h[v+40>>3]=n,h[v+48>>3]=g,h[v+56>>3]=f,h[v+64>>3]=q,h[v+72>>3]=j,h[v+80>>3]=j,c[v+88>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+3;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+2,v)|0);i=e;return}else if((b|0)==17){aI(83312,8,1,c[10030]|0);o=c[10030]|0;j=f-k;q=g-k;p=c[774]|0;c[774]=p+1;cf(o|0,82792,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=j,h[v+16>>3]=q,h[v+24>>3]=f+k,h[v+32>>3]=g+k,c[v+40>>2]=p,v)|0);p=c[10030]|0;n=k*2.0;o=c[774]|0;c[774]=o+1;cf(p|0,81472,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=j,h[v+16>>3]=q,h[v+24>>3]=f,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=q,h[v+56>>3]=j,h[v+64>>3]=g,h[v+72>>3]=n,h[v+80>>3]=n,c[v+88>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+3;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+2,v)|0);i=e;return}else if((b|0)==59){aI(83312,8,1,c[10030]|0);n=g+k;j=f+k;o=c[774]|0;cf(c[10030]|0,82320,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=n,h[v+24>>3]=j,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=g-k,h[v+56>>3]=f-k,h[v+64>>3]=g,h[v+72>>3]=f,h[v+80>>3]=n,c[v+88>>2]=o,v)|0);q=k*.5;r=f-q;l=g+q;o=c[774]|0;cf(c[10030]|0,82216,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=r,h[v+16>>3]=l,h[v+24>>3]=f+q,h[v+32>>3]=g-q,h[v+40>>3]=j,h[v+48>>3]=g,h[v+56>>3]=f,h[v+64>>3]=n,h[v+72>>3]=r,h[v+80>>3]=l,c[v+88>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+3;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+2,v)|0);i=e;return}else if((b|0)==7){l=g-k;r=g+k*.75;o=c[774]|0;cf(c[10030]|0,82600,(v=i,i=i+80|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=l,h[v+24>>3]=f+k,h[v+32>>3]=r,h[v+40>>3]=f-k,h[v+48>>3]=r,h[v+56>>3]=f,h[v+64>>3]=l,c[v+72>>2]=o,v)|0);c[774]=(c[774]|0)+1;i=e;return}else if((b|0)==60){aI(83312,8,1,c[10030]|0);l=g+k;r=f+k;n=g-k;o=c[774]|0;cf(c[10030]|0,82320,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=l,h[v+24>>3]=r,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=n,h[v+56>>3]=f-k,h[v+64>>3]=g,h[v+72>>3]=f,h[v+80>>3]=l,c[v+88>>2]=o,v)|0);j=k*.5;q=f-j;m=g-j;o=c[774]|0;cf(c[10030]|0,79928,(v=i,i=i+128|0,c[v>>2]=25936,h[v+8>>3]=q,h[v+16>>3]=m,h[v+24>>3]=f,h[v+32>>3]=n,h[v+40>>3]=r,h[v+48>>3]=g,h[v+56>>3]=f,h[v+64>>3]=l,h[v+72>>3]=q,h[v+80>>3]=g+j,h[v+88>>3]=f,h[v+96>>3]=g,h[v+104>>3]=q,h[v+112>>3]=m,c[v+120>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+3;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+2,v)|0);i=e;return}else if((b|0)==35){aI(83312,8,1,c[10030]|0);o=c[10030]|0;m=f-k;q=g+k;p=c[774]|0;c[774]=p+1;cf(o|0,82960,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=m,h[v+16>>3]=g-k,h[v+24>>3]=f+k,h[v+32>>3]=q,c[v+40>>2]=p,v)|0);p=c[10030]|0;o=c[774]|0;c[774]=o+1;cf(p|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=m,h[v+16>>3]=g,h[v+24>>3]=f,h[v+32>>3]=q,c[v+40>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+3;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+2,v)|0);i=e;return}else if((b|0)==61){aI(83312,8,1,c[10030]|0);q=g+k;m=f+k;j=f-k;o=c[774]|0;cf(c[10030]|0,82320,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=q,h[v+24>>3]=m,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=g-k,h[v+56>>3]=j,h[v+64>>3]=g,h[v+72>>3]=f,h[v+80>>3]=q,c[v+88>>2]=o,v)|0);l=k*.5;r=g-l;o=c[774]|0;cf(c[10030]|0,79928,(v=i,i=i+128|0,c[v>>2]=25936,h[v+8>>3]=j,h[v+16>>3]=g,h[v+24>>3]=f-l,h[v+32>>3]=r,h[v+40>>3]=f,h[v+48>>3]=g,h[v+56>>3]=f+l,h[v+64>>3]=r,h[v+72>>3]=m,h[v+80>>3]=g,h[v+88>>3]=f,h[v+96>>3]=q,h[v+104>>3]=j,h[v+112>>3]=g,c[v+120>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+3;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+2,v)|0);i=e;return}else if((b|0)==54){aI(83312,8,1,c[10030]|0);j=g+k;q=g-k;m=f-k;o=c[774]|0;cf(c[10030]|0,82320,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=j,h[v+24>>3]=f+k,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=q,h[v+56>>3]=m,h[v+64>>3]=g,h[v+72>>3]=f,h[v+80>>3]=j,c[v+88>>2]=o,v)|0);r=k*.5;l=f+r;o=c[774]|0;cf(c[10030]|0,79928,(v=i,i=i+128|0,c[v>>2]=25936,h[v+8>>3]=m,h[v+16>>3]=g,h[v+24>>3]=f,h[v+32>>3]=q,h[v+40>>3]=l,h[v+48>>3]=g-r,h[v+56>>3]=f,h[v+64>>3]=g,h[v+72>>3]=l,h[v+80>>3]=g+r,h[v+88>>3]=f,h[v+96>>3]=j,h[v+104>>3]=m,h[v+112>>3]=g,c[v+120>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+3;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+2,v)|0);i=e;return}else if((b|0)==6){o=c[774]|0;cf(c[10030]|0,82736,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=f-k,h[v+16>>3]=g-k,h[v+24>>3]=f+k,h[v+32>>3]=g+k,c[v+40>>2]=o,v)|0);c[774]=(c[774]|0)+1;i=e;return}else if((b|0)==40){aI(83312,8,1,c[10030]|0);o=c[10030]|0;m=g-k;j=f+k;r=g+k;p=c[774]|0;c[774]=p+1;cf(o|0,82960,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=f-k,h[v+16>>3]=m,h[v+24>>3]=j,h[v+32>>3]=r,c[v+40>>2]=p,v)|0);p=c[10030]|0;o=c[774]|0;c[774]=o+1;cf(p|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=m,h[v+24>>3]=j,h[v+32>>3]=r,c[v+40>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+3;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+2,v)|0);i=e;return}else if((b|0)==15){aI(83312,8,1,c[10030]|0);o=c[10030]|0;r=f-k;j=g-k;p=c[774]|0;c[774]=p+1;cf(o|0,82792,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=r,h[v+16>>3]=j,h[v+24>>3]=f+k,h[v+32>>3]=g+k,c[v+40>>2]=p,v)|0);p=c[10030]|0;m=k*.342;l=g-k*.94;q=k*2.0;o=c[774]|0;c[774]=o+1;cf(p|0,81704,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=r,h[v+16>>3]=j,h[v+24>>3]=f,h[v+32>>3]=g,h[v+40>>3]=f+m,h[v+48>>3]=l,h[v+56>>3]=f-m,h[v+64>>3]=l,h[v+72>>3]=q,h[v+80>>3]=q,c[v+88>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+3;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+2,v)|0);i=e;return}else if((b|0)==2){aI(83312,8,1,c[10030]|0);o=c[10030]|0;q=g-k;l=g+k;p=c[774]|0;c[774]=p+1;cf(o|0,83184,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=q+-1.0,h[v+24>>3]=f,h[v+32>>3]=l+1.0,c[v+40>>2]=p,v)|0);p=c[10030]|0;m=f-k;j=f+k;o=c[774]|0;c[774]=o+1;cf(p|0,83112,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=m+-1.0,h[v+16>>3]=g,h[v+24>>3]=j+1.0,h[v+32>>3]=g,c[v+40>>2]=o,v)|0);o=c[10030]|0;p=c[774]|0;c[774]=p+1;cf(o|0,83024,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=m,h[v+16>>3]=q,h[v+24>>3]=j,h[v+32>>3]=l,c[v+40>>2]=p,v)|0);p=c[10030]|0;o=c[774]|0;c[774]=o+1;cf(p|0,83024,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=m,h[v+16>>3]=l,h[v+24>>3]=j,h[v+32>>3]=q,c[v+40>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+5;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+4,v)|0);i=e;return}else if((b|0)==18){aI(83312,8,1,c[10030]|0);o=c[10030]|0;q=f-k;j=g-k;l=f+k;p=c[774]|0;c[774]=p+1;cf(o|0,82792,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=q,h[v+16>>3]=j,h[v+24>>3]=l,h[v+32>>3]=g+k,c[v+40>>2]=p,v)|0);p=c[10030]|0;m=k*2.0;o=c[774]|0;c[774]=o+1;cf(p|0,81368,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=q,h[v+16>>3]=j,h[v+24>>3]=f,h[v+32>>3]=g,h[v+40>>3]=l,h[v+48>>3]=g,h[v+56>>3]=q,h[v+64>>3]=g,h[v+72>>3]=m,h[v+80>>3]=m,c[v+88>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+3;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+2,v)|0);i=e;return}else if((b|0)==38){aI(83312,8,1,c[10030]|0);o=c[10030]|0;m=f-k;q=g-k;l=f+k;j=g+k;p=c[774]|0;c[774]=p+1;cf(o|0,82960,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=m,h[v+16>>3]=q,h[v+24>>3]=l,h[v+32>>3]=j,c[v+40>>2]=p,v)|0);p=c[10030]|0;o=c[774]|0;c[774]=o+1;cf(p|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=m,h[v+16>>3]=q,h[v+24>>3]=l,h[v+32>>3]=g,c[v+40>>2]=o,v)|0);o=c[10030]|0;p=c[774]|0;c[774]=p+1;cf(o|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=m,h[v+16>>3]=g,h[v+24>>3]=f,h[v+32>>3]=j,c[v+40>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+4;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+3,v)|0);i=e;return}else if((b|0)==51){aI(83312,8,1,c[10030]|0);j=g+k;p=c[774]|0;cf(c[10030]|0,82320,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=j,h[v+24>>3]=f+k,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=g-k,h[v+56>>3]=f-k,h[v+64>>3]=g,h[v+72>>3]=f,h[v+80>>3]=j,c[v+88>>2]=p,v)|0);m=k*.5;l=f-m;q=g+m;p=c[774]|0;cf(c[10030]|0,82216,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=l,h[v+16>>3]=q,h[v+24>>3]=f,h[v+32>>3]=g,h[v+40>>3]=f+m,h[v+48>>3]=q,h[v+56>>3]=f,h[v+64>>3]=j,h[v+72>>3]=l,h[v+80>>3]=q,c[v+88>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+3;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+2,v)|0);i=e;return}else if((b|0)==34){aI(83312,8,1,c[10030]|0);p=c[10030]|0;q=f-k;l=g-k;j=f+k;o=c[774]|0;c[774]=o+1;cf(p|0,82960,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=q,h[v+16>>3]=l,h[v+24>>3]=j,h[v+32>>3]=g+k,c[v+40>>2]=o,v)|0);o=c[10030]|0;p=c[774]|0;c[774]=p+1;cf(o|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=q,h[v+16>>3]=l,h[v+24>>3]=j,h[v+32>>3]=g,c[v+40>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+3;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+2,v)|0);i=e;return}else if((b|0)==0){p=c[774]|0;cf(c[10030]|0,83736,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=g-k+-1.0,h[v+24>>3]=f,h[v+32>>3]=g+k+1.0,c[v+40>>2]=p+1,c[v+48>>2]=25936,h[v+56>>3]=f-k+-1.0,h[v+64>>3]=g,h[v+72>>3]=f+k+1.0,h[v+80>>3]=g,c[v+88>>2]=p+2,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+5;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+4,v)|0);i=e;return}else if((b|0)==9){j=g+k;l=g-k*.75;p=c[774]|0;cf(c[10030]|0,82600,(v=i,i=i+80|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=j,h[v+24>>3]=f-k,h[v+32>>3]=l,h[v+40>>3]=f+k,h[v+48>>3]=l,h[v+56>>3]=f,h[v+64>>3]=j,c[v+72>>2]=p,v)|0);c[774]=(c[774]|0)+1;i=e;return}else if((b|0)==3){p=c[774]|0;cf(c[10030]|0,82960,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=f-k,h[v+16>>3]=g-k,h[v+24>>3]=f+k,h[v+32>>3]=g+k,c[v+40>>2]=p,v)|0);c[774]=(c[774]|0)+1;i=e;return}else if((b|0)==46){p=c[774]|0;cf(c[10030]|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=f-k,h[v+16>>3]=g-k,h[v+24>>3]=f+k,h[v+32>>3]=g+k,c[v+40>>2]=p,v)|0);c[774]=(c[774]|0)+1;i=e;return}else if((b|0)==55){aI(83312,8,1,c[10030]|0);j=g+k;l=f+k;p=c[774]|0;cf(c[10030]|0,82320,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=j,h[v+24>>3]=l,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=g-k,h[v+56>>3]=f-k,h[v+64>>3]=g,h[v+72>>3]=f,h[v+80>>3]=j,c[v+88>>2]=p,v)|0);j=k*.5;q=f+j;p=c[774]|0;cf(c[10030]|0,82216,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=g,h[v+24>>3]=q,h[v+32>>3]=g-j,h[v+40>>3]=l,h[v+48>>3]=g,h[v+56>>3]=q,h[v+64>>3]=g+j,h[v+72>>3]=f,h[v+80>>3]=g,c[v+88>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+3;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+2,v)|0);i=e;return}else if((b|0)==37){aI(83312,8,1,c[10030]|0);p=c[10030]|0;j=f-k;q=g-k;l=g+k;o=c[774]|0;c[774]=o+1;cf(p|0,82960,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=j,h[v+16>>3]=q,h[v+24>>3]=f+k,h[v+32>>3]=l,c[v+40>>2]=o,v)|0);o=c[10030]|0;p=c[774]|0;c[774]=p+1;cf(o|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=j,h[v+16>>3]=q,h[v+24>>3]=f,h[v+32>>3]=l,c[v+40>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+3;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+2,v)|0);i=e;return}else if((b|0)==22){aI(83312,8,1,c[10030]|0);p=c[10030]|0;l=f-k;q=g-k;j=f+k;m=g+k;o=c[774]|0;c[774]=o+1;cf(p|0,82792,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=l,h[v+16>>3]=q,h[v+24>>3]=j,h[v+32>>3]=m,c[v+40>>2]=o,v)|0);o=c[10030]|0;r=k*2.0;p=c[774]|0;c[774]=p+1;cf(o|0,80872,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=l,h[v+16>>3]=q,h[v+24>>3]=f,h[v+32>>3]=g,h[v+40>>3]=j,h[v+48>>3]=g,h[v+56>>3]=f,h[v+64>>3]=m,h[v+72>>3]=r,h[v+80>>3]=r,c[v+88>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+3;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+2,v)|0);i=e;return}else if((b|0)==48){aI(83312,8,1,c[10030]|0);r=g+k;m=g-k;p=c[774]|0;cf(c[10030]|0,82320,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=r,h[v+24>>3]=f+k,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=m,h[v+56>>3]=f-k,h[v+64>>3]=g,h[v+72>>3]=f,h[v+80>>3]=r,c[v+88>>2]=p,v)|0);r=k*.5;j=f-r;q=g-r;p=c[774]|0;cf(c[10030]|0,82216,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=j,h[v+16>>3]=q,h[v+24>>3]=f,h[v+32>>3]=m,h[v+40>>3]=f+r,h[v+48>>3]=q,h[v+56>>3]=f,h[v+64>>3]=g,h[v+72>>3]=j,h[v+80>>3]=q,c[v+88>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+3;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+2,v)|0);i=e;return}else if((b|0)==21){aI(83312,8,1,c[10030]|0);p=c[10030]|0;q=f-k;j=g-k;r=g+k;o=c[774]|0;c[774]=o+1;cf(p|0,82792,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=q,h[v+16>>3]=j,h[v+24>>3]=f+k,h[v+32>>3]=r,c[v+40>>2]=o,v)|0);o=c[10030]|0;m=k*2.0;p=c[774]|0;c[774]=p+1;cf(o|0,81040,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=q,h[v+16>>3]=j,h[v+24>>3]=f,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=j,h[v+56>>3]=f,h[v+64>>3]=r,h[v+72>>3]=m,h[v+80>>3]=m,c[v+88>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+3;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+2,v)|0);i=e;return}else if((b|0)==5){p=c[774]|0;cf(c[10030]|0,82792,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=f-k,h[v+16>>3]=g-k,h[v+24>>3]=f+k,h[v+32>>3]=g+k,c[v+40>>2]=p,v)|0);c[774]=(c[774]|0)+1;i=e;return}else if((b|0)==25){aI(83312,8,1,c[10030]|0);p=c[10030]|0;m=f-k;r=g-k;j=f+k;q=g+k;o=c[774]|0;c[774]=o+1;cf(p|0,82792,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=m,h[v+16>>3]=r,h[v+24>>3]=j,h[v+32>>3]=q,c[v+40>>2]=o,v)|0);o=c[10030]|0;l=k*2.0;p=c[774]|0;c[774]=p+1;cf(o|0,81472,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=m,h[v+16>>3]=r,h[v+24>>3]=f,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=r,h[v+56>>3]=m,h[v+64>>3]=g,h[v+72>>3]=l,h[v+80>>3]=l,c[v+88>>2]=p,v)|0);p=c[10030]|0;o=c[774]|0;c[774]=o+1;cf(p|0,80720,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=m,h[v+16>>3]=r,h[v+24>>3]=f,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=q,h[v+56>>3]=j,h[v+64>>3]=g,h[v+72>>3]=l,h[v+80>>3]=l,c[v+88>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+4;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+3,v)|0);i=e;return}else if((b|0)==42){aI(83312,8,1,c[10030]|0);o=c[10030]|0;l=f-k;j=g-k;q=f+k;r=g+k;p=c[774]|0;c[774]=p+1;cf(o|0,82960,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=l,h[v+16>>3]=j,h[v+24>>3]=q,h[v+32>>3]=r,c[v+40>>2]=p,v)|0);p=c[10030]|0;o=c[774]|0;c[774]=o+1;cf(p|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=l,h[v+16>>3]=j,h[v+24>>3]=q,h[v+32>>3]=g,c[v+40>>2]=o,v)|0);o=c[10030]|0;p=c[774]|0;c[774]=p+1;cf(o|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=g,h[v+24>>3]=q,h[v+32>>3]=r,c[v+40>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+4;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+3,v)|0);i=e;return}else if((b|0)==58){aI(83312,8,1,c[10030]|0);r=g+k;q=f+k;j=g-k;l=f-k;p=c[774]|0;cf(c[10030]|0,82320,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=r,h[v+24>>3]=q,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=j,h[v+56>>3]=l,h[v+64>>3]=g,h[v+72>>3]=f,h[v+80>>3]=r,c[v+88>>2]=p,v)|0);r=k*.5;m=g+r;p=c[774]|0;cf(c[10030]|0,79928,(v=i,i=i+128|0,c[v>>2]=25936,h[v+8>>3]=l,h[v+16>>3]=g,h[v+24>>3]=f,h[v+32>>3]=j,h[v+40>>3]=q,h[v+48>>3]=g,h[v+56>>3]=f+r,h[v+64>>3]=m,h[v+72>>3]=f,h[v+80>>3]=g,h[v+88>>3]=f-r,h[v+96>>3]=m,h[v+104>>3]=l,h[v+112>>3]=g,c[v+120>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+3;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+2,v)|0);i=e;return}else if((b|0)==32){aI(83312,8,1,c[10030]|0);p=c[10030]|0;l=g-k;m=f+k;o=c[774]|0;c[774]=o+1;cf(p|0,82960,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=f-k,h[v+16>>3]=l,h[v+24>>3]=m,h[v+32>>3]=g+k,c[v+40>>2]=o,v)|0);o=c[10030]|0;p=c[774]|0;c[774]=p+1;cf(o|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=l,h[v+24>>3]=m,h[v+32>>3]=g,c[v+40>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+3;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+2,v)|0);i=e;return}else if((b|0)==(-1|0)){break}else if((b|0)==13){m=g-k;l=g-k*.25;r=k*.625;q=g+k;p=c[774]|0;cf(c[10030]|0,82080,(v=i,i=i+112|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=m,h[v+24>>3]=f+k,h[v+32>>3]=l,h[v+40>>3]=f+r,h[v+48>>3]=q,h[v+56>>3]=f-r,h[v+64>>3]=q,h[v+72>>3]=f-k,h[v+80>>3]=l,h[v+88>>3]=f,h[v+96>>3]=m,c[v+104>>2]=p,v)|0);c[774]=(c[774]|0)+1;i=e;return}else if((b|0)==24){aI(83312,8,1,c[10030]|0);p=c[10030]|0;m=f-k;l=g-k;q=g+k;o=c[774]|0;c[774]=o+1;cf(p|0,82792,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=m,h[v+16>>3]=l,h[v+24>>3]=f+k,h[v+32>>3]=q,c[v+40>>2]=o,v)|0);o=c[10030]|0;r=k*2.0;p=c[774]|0;c[774]=p+1;cf(o|0,80616,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=m,h[v+16>>3]=l,h[v+24>>3]=f,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=q,h[v+56>>3]=f,h[v+64>>3]=l,h[v+72>>3]=r,h[v+80>>3]=r,c[v+88>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+3;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+2,v)|0);i=e;return}else if((b|0)==62){r=g+k;p=c[774]|0;cf(c[10030]|0,82216,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=r,h[v+24>>3]=f+k,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=g-k,h[v+56>>3]=f-k,h[v+64>>3]=g,h[v+72>>3]=f,h[v+80>>3]=r,c[v+88>>2]=p,v)|0);c[774]=(c[774]|0)+1;i=e;return}else if((b|0)==53){aI(83312,8,1,c[10030]|0);r=g+k;l=f-k;p=c[774]|0;cf(c[10030]|0,82320,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=r,h[v+24>>3]=f+k,h[v+32>>3]=g,h[v+40>>3]=f,h[v+48>>3]=g-k,h[v+56>>3]=l,h[v+64>>3]=g,h[v+72>>3]=f,h[v+80>>3]=r,c[v+88>>2]=p,v)|0);q=k*.5;p=c[774]|0;cf(c[10030]|0,82216,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=l,h[v+16>>3]=g,h[v+24>>3]=f-q,h[v+32>>3]=g-q,h[v+40>>3]=f+q,h[v+48>>3]=g+q,h[v+56>>3]=f,h[v+64>>3]=r,h[v+72>>3]=l,h[v+80>>3]=g,c[v+88>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+3;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+2,v)|0);i=e;return}else if((b|0)==44){aI(83312,8,1,c[10030]|0);p=c[10030]|0;l=f-k;r=g-k;q=f+k;m=g+k;o=c[774]|0;c[774]=o+1;cf(p|0,82960,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=l,h[v+16>>3]=r,h[v+24>>3]=q,h[v+32>>3]=m,c[v+40>>2]=o,v)|0);o=c[10030]|0;p=c[774]|0;c[774]=p+1;cf(o|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=r,h[v+24>>3]=q,h[v+32>>3]=g,c[v+40>>2]=p,v)|0);p=c[10030]|0;o=c[774]|0;c[774]=o+1;cf(p|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=l,h[v+16>>3]=g,h[v+24>>3]=q,h[v+32>>3]=m,c[v+40>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+4;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+3,v)|0);i=e;return}else if((b|0)==33){aI(83312,8,1,c[10030]|0);o=c[10030]|0;m=f-k;q=g-k;p=c[774]|0;c[774]=p+1;cf(o|0,82960,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=m,h[v+16>>3]=q,h[v+24>>3]=f+k,h[v+32>>3]=g+k,c[v+40>>2]=p,v)|0);p=c[10030]|0;o=c[774]|0;c[774]=o+1;cf(p|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=m,h[v+16>>3]=q,h[v+24>>3]=f,h[v+32>>3]=g,c[v+40>>2]=o,v)|0);o=c[774]|0;p=c[10030]|0;c[774]=o+3;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=o+2,v)|0);i=e;return}else if((b|0)==36){aI(83312,8,1,c[10030]|0);o=c[10030]|0;q=f-k;m=g-k;l=f+k;r=g+k;p=c[774]|0;c[774]=p+1;cf(o|0,82960,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=q,h[v+16>>3]=m,h[v+24>>3]=l,h[v+32>>3]=r,c[v+40>>2]=p,v)|0);p=c[10030]|0;o=c[774]|0;c[774]=o+1;cf(p|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=m,h[v+24>>3]=l,h[v+32>>3]=g,c[v+40>>2]=o,v)|0);o=c[10030]|0;p=c[774]|0;c[774]=p+1;cf(o|0,82880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=q,h[v+16>>3]=g,h[v+24>>3]=f,h[v+32>>3]=r,c[v+40>>2]=p,v)|0);p=c[774]|0;o=c[10030]|0;c[774]=p+4;cf(o|0,83632,(v=i,i=i+8|0,c[v>>2]=p+3,v)|0);i=e;return}else if((b|0)==16){aI(83312,8,1,c[10030]|0);b=c[10030]|0;r=f-k;q=g-k;l=f+k;p=c[774]|0;c[774]=p+1;cf(b|0,82792,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=r,h[v+16>>3]=q,h[v+24>>3]=l,h[v+32>>3]=g+k,c[v+40>>2]=p,v)|0);p=c[10030]|0;m=k*2.0;b=c[774]|0;c[774]=b+1;cf(p|0,81608,(v=i,i=i+96|0,c[v>>2]=25936,h[v+8>>3]=r,h[v+16>>3]=q,h[v+24>>3]=f,h[v+32>>3]=g,h[v+40>>3]=l,h[v+48>>3]=g,h[v+56>>3]=f,h[v+64>>3]=q,h[v+72>>3]=m,h[v+80>>3]=m,c[v+88>>2]=b,v)|0);b=c[774]|0;p=c[10030]|0;c[774]=b+3;cf(p|0,83632,(v=i,i=i+8|0,c[v>>2]=b+2,v)|0);i=e;return}else{i=e;return}}}while(0);d=c[10030]|0;b=c[774]|0;c[774]=b+1;cf(d|0,83880,(v=i,i=i+48|0,c[v>>2]=25936,h[v+8>>3]=f,h[v+16>>3]=g,h[v+24>>3]=f+1.0,h[v+32>>3]=g+1.0,c[v+40>>2]=b,v)|0);i=e;return}function qG(a){a=+a;return}function qH(a){a=a|0;return 0}function qI(){return}function qJ(){return}function qK(){return}function qL(a){a=+a;h[6448]=a<0.0?1.0:a;return}function qM(a,b){a=a|0;b=b|0;c[1082]=a;c[1080]=1e3-b;return}function qN(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;f=i;tt();g=c[514]|0;h=g+d|0;d=c[512]|0;j=d-e|0;e=c[768]|0;k=c[774]|0;l=c[770]|0;cf(c[10030]|0,83952,(v=i,i=i+72|0,c[v>>2]=25936,c[v+8>>2]=2,c[v+16>>2]=g+a,c[v+24>>2]=d-b,c[v+32>>2]=h,c[v+40>>2]=j,c[v+48>>2]=e,c[v+56>>2]=k,c[v+64>>2]=l,v)|0);c[774]=(c[774]|0)+1;c[554]=h;c[552]=j;i=f;return}function qO(b){b=b|0;var d=0,e=0,f=0;d=i;if((b|0)==0){e=18229}else{if((a[b]|0)==0){e=18229}else{f=b}}if((e|0)==18229){f=25424}e=bk(f|0,148464)|0;if((e|0)>0){uF(25680,f|0,e|0);a[e+25680|0]=0}ca(f+(e+1|0)|0,21e4,(v=i,i=i+8|0,c[v>>2]=3112,v)|0);i=d;return 1}function qP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;g=i;i=i+48|0;h=g|0;c[h>>2]=b;c[h+4>>2]=d;j=e+b|0;c[h+12>>2]=j;c[h+16>>2]=d;c[h+24>>2]=j;j=f+d|0;c[h+28>>2]=j;c[h+36>>2]=b;c[h+40>>2]=j;c[h+8>>2]=a;qR(4,h|0);i=g;return}function qQ(b){b=b|0;var e=0,f=0,g=0,j=0;e=i;f=c[b>>2]|0;if((f|0)==1){g=c[b+4>>2]|0;tt();if((g|0)>-1){j=((g|0)%10&-1)+2|0}else{j=(g|0)<-2?0:g+2|0}if(a[225792]|0){a[25936]=a[89416]|0;a[25937|0]=a[89417|0]|0;a[25938|0]=a[89418|0]|0;a[25939|0]=a[89419|0]|0;a[25940|0]=a[89420|0]|0;a[25941|0]=a[89421|0]|0;a[26448]=a[28976]|0;a[26449|0]=a[28977|0]|0;a[26450|0]=a[28978|0]|0}else{g=c[28928+(j<<2)>>2]|0;uB(25936,g|0);g=28976+(j*3&-1)|0;a[26448]=a[g]|0;a[26449|0]=a[g+1|0]|0;a[26450|0]=a[g+2|0]|0}c[768]=~~(+h[6448]*+h[6449]*+((c[2112+(j<<2)>>2]|0)>>>0>>>0)+.5);if(!(a[225800]|0)){c[770]=c[2160+(j<<2)>>2];i=e;return}if((j|0)==1){c[770]=5;i=e;return}else{c[770]=0;i=e;return}}else if((f|0)==5){fr(+h[b+8>>3],26448);j=d[26449]|0;g=d[26450]|0;be(25936,84104,(v=i,i=i+24|0,c[v>>2]=d[26448]|0,c[v+8>>2]=j,c[v+16>>2]=g,v)|0);i=e;return}else if((f|0)==3){f=c[b+4>>2]|0;b=f>>>16;a[26448]=b&255;g=f>>>8;a[26449]=g&255;a[26450]=f&255;be(25936,84104,(v=i,i=i+24|0,c[v>>2]=b&255,c[v+8>>2]=g&255,c[v+16>>2]=f&255,v)|0);i=e;return}else{i=e;return}}function qR(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;f=i;i=i+256|0;g=f|0;h=c[e+8>>2]|0;j=h>>4;k=h&15;if(a[46624]|0){tt()}if((k|0)==4|(k|0)==1){h=g|0;l=+(100-j|0)*.01;do{if(l<0.0){m=0.0}else{if(l<=1.0){m=l;break}m=1.0}}while(0);n=d[26448]|0;o=~~(+(n|0)+m*+(n^255|0));n=d[26449]|0;p=~~(+(n|0)+m*+(n^255|0));n=d[26450]|0;q=~~(+(n|0)+m*+(n^255|0));be(h|0,84104,(v=i,i=i+24|0,c[v>>2]=o,c[v+8>>2]=p,c[v+16>>2]=q,v)|0);r=1}else if((k|0)==0){q=g|0;a[q]=a[84376]|0;a[q+1|0]=a[84377|0]|0;a[q+2|0]=a[84378|0]|0;a[q+3|0]=a[84379|0]|0;a[q+4|0]=a[84380|0]|0;a[q+5|0]=a[84381|0]|0;r=2}else if((k|0)==5|(k|0)==2){k=c[2224+(((j|0)%10&-1)<<2)>>2]|0;uB(g|0,25936);r=k}else{uB(g|0,25936);r=1}cf(c[10030]|0,84328,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=b+1,v)|0);g=e|0;k=e+4|0;j=(c[512]|0)-(c[k>>2]|0)|0;cf(c[10030]|0,84280,(v=i,i=i+16|0,c[v>>2]=(c[514]|0)+(c[g>>2]|0),c[v+8>>2]=j,v)|0);j=c[10030]|0;if((b|0)>1){s=1;t=j}else{u=j;w=c[g>>2]|0;x=c[514]|0;y=x+w|0;z=c[512]|0;A=c[k>>2]|0;B=z-A|0;C=cf(u|0,84160,(v=i,i=i+16|0,c[v>>2]=y,c[v+8>>2]=B,v)|0)|0;D=c[10030]|0;E=c[774]|0;F=cf(D|0,84120,(v=i,i=i+16|0,c[v>>2]=r,c[v+8>>2]=E,v)|0)|0;G=c[774]|0;H=G+1|0;c[774]=H;i=f;return}while(1){j=(c[512]|0)-(c[e+(s*12&-1)+4>>2]|0)|0;cf(t|0,84280,(v=i,i=i+16|0,c[v>>2]=(c[514]|0)+(c[e+(s*12&-1)>>2]|0),c[v+8>>2]=j,v)|0);j=s+1|0;if((j&7|0)==0){q=c[10030]|0;aI(84248,2,1,q|0)}q=c[10030]|0;if((j|0)<(b|0)){s=j;t=q}else{u=q;break}}w=c[g>>2]|0;x=c[514]|0;y=x+w|0;z=c[512]|0;A=c[k>>2]|0;B=z-A|0;C=cf(u|0,84160,(v=i,i=i+16|0,c[v>>2]=y,c[v+8>>2]=B,v)|0)|0;D=c[10030]|0;E=c[774]|0;F=cf(D|0,84120,(v=i,i=i+16|0,c[v>>2]=r,c[v+8>>2]=E,v)|0)|0;G=c[774]|0;H=G+1|0;c[774]=H;i=f;return}function qS(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;b=i;a[4304]=0;a[4336]=0;d=c[13898]|0;e=c[8272]|0;L24421:do{if((d|0)<(e|0)){f=c[1054]|0;g=d;h=0;j=0;while(1){k=(a[f+(g*40&-1)|0]&1)==0;L24425:do{if(!k){l=c[f+(g*40&-1)+36>>2]|0;m=f+(g*40&-1)+32|0;n=c[10036]|0;o=0;while(1){if((o|0)>=(l|0)){break}if((a[n+((c[m>>2]|0)+o|0)|0]|0)==(a[o+103664|0]|0)){o=o+1|0}else{break L24425}}if((o|0)==1){p=h;q=j;break L24421}}}while(0);m=c[56574]|0;L24432:do{if((m|0)==0){r=226296}else{n=c[f+(g*40&-1)+36>>2]|0;l=c[f+(g*40&-1)+32>>2]|0;s=(n|0)>0;t=c[10036]|0;u=226296;w=m;while(1){L24436:do{if(!k){if(s){x=0;y=0;z=l;while(1){A=a[w+x|0]|0;if(A<<24>>24==(a[t+(x+z|0)|0]|0)){B=z;C=y}else{if(A<<24>>24!=36){break L24436}B=z-1|0;C=1}D=x+1|0;if((D|0)<(C+n|0)){x=D;y=C;z=B}else{break}}if((C|0)==0){E=D}else{r=u;break L24432}}else{E=0}z=a[w+E|0]|0;if((z<<24>>24|0)==36|(z<<24>>24|0)==0){r=u;break L24432}}}while(0);z=u+8|0;y=c[z>>2]|0;if((y|0)==0){r=z;break}else{u=z;w=y}}}}while(0);k=c[r+4>>2]|0;if((k|0)==0){a[4304]=1;m=g+1|0;c[13898]=m;F=1;G=j;H=m}else if((k|0)==1){a[4336]=1;k=g+1|0;c[13898]=k;F=h;G=1;H=k}else{k=g+1|0;c[13898]=k;F=h;G=j;H=k}if((H|0)<(e|0)){g=H;h=F;j=G}else{p=F;q=G;break}}}else{p=0;q=0}}while(0);be(13048,84616,(v=i,i=i+16|0,c[v>>2]=p?84608:179864,c[v+8>>2]=q?84576:179864,v)|0);i=b;return}function qT(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0;b=i;d=c[10030]|0;if(a[4304]|0){aI(87648,3,1,d|0);if((a[37384]&1)!=0){e=c[10030]|0;f=aD(e|0)|0;i=b;return}g=c[10030]|0;aI(87560,23,1,g|0);g=c[10030]|0;j=c[7938]|0;k=c[7939]|0;l=1e3-(c[7941]|0)|0;m=1e3-(c[7940]|0)|0;cf(g|0,87528,(v=i,i=i+32|0,c[v>>2]=j,c[v+8>>2]=k,c[v+16>>2]=l,c[v+24>>2]=m,v)|0);m=c[10030]|0;aI(87648,3,1,m|0);m=c[10030]|0;aI(87440,25,1,m|0);m=c[10030]|0;n=+h[8255];o=+h[8256];p=+h[8169];q=+h[8170];r=+h[8599];s=+h[8600];t=+h[8513];u=+h[8514];cf(m|0,87360,(v=i,i=i+64|0,h[v>>3]=n,h[v+8>>3]=o,h[v+16>>3]=p,h[v+24>>3]=q,h[v+32>>3]=r,h[v+40>>3]=s,h[v+48>>3]=t,h[v+56>>3]=u,v)|0);m=c[10030]|0;aI(87648,3,1,m|0);if(!(a[4336]|0)){e=c[10030]|0;f=aD(e|0)|0;i=b;return}m=c[10030]|0;aI(87336,17,1,m|0);m=c[10030]|0;aI(87136,88,1,m|0);m=c[10030]|0;aI(87072,41,1,m|0);m=c[10030]|0;aI(86960,43,1,m|0);m=c[10030]|0;aI(86840,107,1,m|0);m=c[10030]|0;aI(86816,9,1,m|0);m=c[10030]|0;aI(86600,72,1,m|0);m=c[10030]|0;aI(86520,72,1,m|0);m=c[10030]|0;aI(86384,72,1,m|0);m=c[10030]|0;aI(86248,72,1,m|0);m=c[10030]|0;aI(86232,11,1,m|0);m=c[10030]|0;aI(86144,2,1,m|0);m=c[10030]|0;aI(87648,3,1,m|0);e=c[10030]|0;f=aD(e|0)|0;i=b;return}else{aI(86144,2,1,d|0);if((a[37384]&1)!=0){e=c[10030]|0;f=aD(e|0)|0;i=b;return}d=c[10030]|0;aI(86024,27,1,d|0);d=c[10030]|0;m=c[7938]|0;l=c[7939]|0;k=1e3-(c[7941]|0)|0;j=1e3-(c[7940]|0)|0;cf(d|0,85936,(v=i,i=i+32|0,c[v>>2]=m,c[v+8>>2]=l,c[v+16>>2]=k,c[v+24>>2]=j,v)|0);j=c[10030]|0;aI(86144,2,1,j|0);j=c[10030]|0;aI(85896,29,1,j|0);j=c[10030]|0;u=+h[8255];t=+h[8256];s=+h[8169];r=+h[8170];q=+h[8599];p=+h[8600];o=+h[8513];n=+h[8514];cf(j|0,85856,(v=i,i=i+64|0,h[v>>3]=u,h[v+8>>3]=t,h[v+16>>3]=s,h[v+24>>3]=r,h[v+32>>3]=q,h[v+40>>3]=p,h[v+48>>3]=o,h[v+56>>3]=n,v)|0);j=c[10030]|0;aI(86144,2,1,j|0);if(!(a[4336]|0)){e=c[10030]|0;f=aD(e|0)|0;i=b;return}j=c[10030]|0;aI(85712,72,1,j|0);j=c[10030]|0;aI(85648,60,1,j|0);j=c[10030]|0;aI(85552,35,1,j|0);j=c[10030]|0;aI(85408,94,1,j|0);j=c[10030]|0;aI(86816,9,1,j|0);j=c[10030]|0;aI(85232,103,1,j|0);j=c[10030]|0;aI(84968,103,1,j|0);j=c[10030]|0;aI(84840,103,1,j|0);j=c[10030]|0;aI(84632,81,1,j|0);j=c[10030]|0;aI(86144,2,1,j|0);j=c[10030]|0;aI(86144,2,1,j|0);e=c[10030]|0;f=aD(e|0)|0;i=b;return}}function qU(){var b=0;b=c[10030]|0;if(a[4304]|0){aI(87976|0,314,1,b|0)}else{aI(87656|0,305,1,b|0)}c[1094]=0;c[1080]=0;c[1082]=0;return}function qV(a){a=a|0;c[1094]=(a|0)<-2?0:a+2&7;return}function qW(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0.0,w=0.0,x=0,y=0.0,z=0,A=0,B=0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0,Q=0,S=0,T=0.0,U=0.0,V=0.0,W=0,X=0,Y=0,Z=0.0,_=0.0,$=0.0,aa=0.0,ab=0.0,ac=0.0,ad=0.0,ae=0.0,af=0.0,ag=0.0,ah=0.0,ai=0.0;e=i;do{if(a[4336]|0){if((a[37384]&1)!=0){break}f=c[10030]|0;if(a[4304]|0){aI(89232,11,1,f|0);break}else{aI(89104,12,1,f|0);break}}}while(0);f=1e3-d|0;g=c[10030]|0;j=c[1082]|0;k=c[1080]|0;l=c[4344+(c[1094]<<2)>>2]|0;m=+h[539];if(a[4304]|0){cf(g|0,88928,(v=i,i=i+48|0,c[v>>2]=j,c[v+8>>2]=k,c[v+16>>2]=b,c[v+24>>2]=f,c[v+32>>2]=l,h[v+40>>3]=m,v)|0)}else{cf(g|0,88712,(v=i,i=i+48|0,c[v>>2]=j,c[v+8>>2]=k,c[v+16>>2]=b,c[v+24>>2]=f,c[v+32>>2]=l,h[v+40>>3]=m,v)|0)}do{if(a[4336]|0){if((a[37384]&1)!=0){break}l=c[10030]|0;k=a[66164]&1;j=k<<24>>24!=0;if(a[4304]|0){if(j){m=+h[8255];g=c[1082]|0;n=c[7938]|0;o=c[7939]|0;p=+h[8256];q=+R(+(+h[8271]),+(m+ +(g-n|0)/+(o-n|0)*(p-m)));r=g;s=n;t=o;u=m;w=p}else{p=+h[8255];o=c[1082]|0;n=c[7938]|0;g=c[7939]|0;m=+h[8256];q=p+ +(o-n|0)/+(g-n|0)*(m-p);r=o;s=n;t=g;u=p;w=m}g=(a[65476]&1)==0;if(g){m=+h[8169];n=c[1080]|0;o=c[7940]|0;x=c[7941]|0;p=+h[8170];y=m+ +((1e3-n|0)-o|0)/+(x-o|0)*(p-m);z=n;A=o;B=x;C=m;D=p}else{p=+h[8169];x=c[1080]|0;o=c[7940]|0;n=c[7941]|0;m=+h[8170];y=+R(+(+h[8185]),+(p+ +((1e3-x|0)-o|0)/+(n-o|0)*(m-p)));z=x;A=o;B=n;C=p;D=m}n=(a[68916]&1)==0;if(n){m=+h[8599];p=+h[8600];E=m+ +(r-s|0)/+(t-s|0)*(p-m);F=m;G=p}else{p=+h[8599];m=+h[8600];E=+R(+(+h[8615]),+(p+ +(r-s|0)/+(t-s|0)*(m-p)));F=p;G=m}o=(a[68228]&1)==0;if(o){m=+h[8513];p=+h[8514];H=m+ +((1e3-z|0)-A|0)/+(B-A|0)*(p-m);I=m;J=p}else{p=+h[8513];m=+h[8514];H=+R(+(+h[8529]),+(p+ +((1e3-z|0)-A|0)/+(B-A|0)*(m-p)));I=p;J=m}if(k<<24>>24==0){K=u+ +((b-s|0)>>>0>>>0)/+(t-s|0)*(w-u)}else{K=+R(+(+h[8271]),+(u+ +((b-s|0)>>>0>>>0)/+(t-s|0)*(w-u)))}if(g){L=C+ +((d-A|0)>>>0>>>0)/+(B-A|0)*(D-C)}else{L=+R(+(+h[8185]),+(C+ +((d-A|0)>>>0>>>0)/+(B-A|0)*(D-C)))}if(n){M=F+ +((b-s|0)>>>0>>>0)/+(t-s|0)*(G-F)}else{M=+R(+(+h[8615]),+(F+ +((b-s|0)>>>0>>>0)/+(t-s|0)*(G-F)))}if(o){N=I+ +((d-A|0)>>>0>>>0)/+(B-A|0)*(J-I)}else{N=+R(+(+h[8529]),+(I+ +((d-A|0)>>>0>>>0)/+(B-A|0)*(J-I)))}cf(l|0,88632,(v=i,i=i+64|0,h[v>>3]=q,h[v+8>>3]=y,h[v+16>>3]=E,h[v+24>>3]=H,h[v+32>>3]=K,h[v+40>>3]=L,h[v+48>>3]=M,h[v+56>>3]=N,v)|0);o=c[10030]|0;if((a[66164]&1)==0){aI(88544,4,1,o|0)}else{m=+h[8255];n=c[7938]|0;p=+R(+(+h[8271]),+(m+(+(((c[1082]|0)+b|0)>>>0>>>0)*.5- +(n|0))/+((c[7939]|0)-n|0)*(+h[8256]-m)));cf(o|0,88624,(v=i,i=i+8|0,h[v>>3]=p,v)|0)}o=c[10030]|0;if((a[65476]&1)==0){aI(88544,4,1,o|0)}else{p=+h[8169];n=c[7940]|0;m=+R(+(+h[8185]),+(p+(1.0e3- +(((c[1080]|0)+f|0)>>>0>>>0)*.5- +(n|0))/+((c[7941]|0)-n|0)*(+h[8170]-p)));cf(o|0,88624,(v=i,i=i+8|0,h[v>>3]=m,v)|0)}o=c[10030]|0;if((a[68916]&1)==0){aI(88544,4,1,o|0)}else{m=+h[8599];n=c[7938]|0;p=+R(+(+h[8615]),+(m+(+(((c[1082]|0)+b|0)>>>0>>>0)*.5- +(n|0))/+((c[7939]|0)-n|0)*(+h[8600]-m)));cf(o|0,88624,(v=i,i=i+8|0,h[v>>3]=p,v)|0)}o=c[10030]|0;if((a[68228]&1)==0){aI(88528,3,1,o|0)}else{p=+h[8513];n=c[7940]|0;m=+R(+(+h[8529]),+(p+(1.0e3- +(((c[1080]|0)+f|0)>>>0>>>0)*.5- +(n|0))/+((c[7941]|0)-n|0)*(+h[8514]-p)));cf(o|0,88536,(v=i,i=i+8|0,h[v>>3]=m,v)|0)}o=c[10030]|0;aI(88480,4,1,o|0);c[1082]=b;c[1080]=f;i=e;return}else{if(j){m=+h[8255];j=c[1082]|0;o=c[7938]|0;n=c[7939]|0;p=+h[8256];O=+R(+(+h[8271]),+(m+ +(j-o|0)/+(n-o|0)*(p-m)));P=j;Q=o;S=n;T=m;U=p}else{p=+h[8255];n=c[1082]|0;o=c[7938]|0;j=c[7939]|0;m=+h[8256];O=p+ +(n-o|0)/+(j-o|0)*(m-p);P=n;Q=o;S=j;T=p;U=m}j=(a[65476]&1)==0;if(j){m=+h[8169];o=c[1080]|0;n=c[7940]|0;g=c[7941]|0;p=+h[8170];V=m+ +((1e3-o|0)-n|0)/+(g-n|0)*(p-m);W=o;X=n;Y=g;Z=m;_=p}else{p=+h[8169];g=c[1080]|0;n=c[7940]|0;o=c[7941]|0;m=+h[8170];V=+R(+(+h[8185]),+(p+ +((1e3-g|0)-n|0)/+(o-n|0)*(m-p)));W=g;X=n;Y=o;Z=p;_=m}o=(a[68916]&1)==0;if(o){m=+h[8599];p=+h[8600];$=m+ +(P-Q|0)/+(S-Q|0)*(p-m);aa=m;ab=p}else{p=+h[8599];m=+h[8600];$=+R(+(+h[8615]),+(p+ +(P-Q|0)/+(S-Q|0)*(m-p)));aa=p;ab=m}n=(a[68228]&1)==0;if(n){m=+h[8513];p=+h[8514];ac=m+ +((1e3-W|0)-X|0)/+(Y-X|0)*(p-m);ad=m;ae=p}else{p=+h[8513];m=+h[8514];ac=+R(+(+h[8529]),+(p+ +((1e3-W|0)-X|0)/+(Y-X|0)*(m-p)));ad=p;ae=m}if(k<<24>>24==0){af=T+ +((b-Q|0)>>>0>>>0)/+(S-Q|0)*(U-T)}else{af=+R(+(+h[8271]),+(T+ +((b-Q|0)>>>0>>>0)/+(S-Q|0)*(U-T)))}if(j){ag=Z+ +((d-X|0)>>>0>>>0)/+(Y-X|0)*(_-Z)}else{ag=+R(+(+h[8185]),+(Z+ +((d-X|0)>>>0>>>0)/+(Y-X|0)*(_-Z)))}if(o){ah=aa+ +((b-Q|0)>>>0>>>0)/+(S-Q|0)*(ab-aa)}else{ah=+R(+(+h[8615]),+(aa+ +((b-Q|0)>>>0>>>0)/+(S-Q|0)*(ab-aa)))}if(n){ai=ad+ +((d-X|0)>>>0>>>0)/+(Y-X|0)*(ae-ad)}else{ai=+R(+(+h[8529]),+(ad+ +((d-X|0)>>>0>>>0)/+(Y-X|0)*(ae-ad)))}cf(l|0,88424,(v=i,i=i+64|0,h[v>>3]=O,h[v+8>>3]=V,h[v+16>>3]=$,h[v+24>>3]=ac,h[v+32>>3]=af,h[v+40>>3]=ag,h[v+48>>3]=ah,h[v+56>>3]=ai,v)|0);l=c[10030]|0;if((a[66164]&1)==0){aI(88384,3,1,l|0)}else{m=+h[8255];n=c[7938]|0;p=+R(+(+h[8271]),+(m+(+(((c[1082]|0)+b|0)>>>0>>>0)*.5- +(n|0))/+((c[7939]|0)-n|0)*(+h[8256]-m)));cf(l|0,88536,(v=i,i=i+8|0,h[v>>3]=p,v)|0)}l=c[10030]|0;if((a[65476]&1)==0){aI(88384,3,1,l|0)}else{p=+h[8169];n=c[7940]|0;m=+R(+(+h[8185]),+(p+(1.0e3- +(((c[1080]|0)+f|0)>>>0>>>0)*.5- +(n|0))/+((c[7941]|0)-n|0)*(+h[8170]-p)));cf(l|0,88536,(v=i,i=i+8|0,h[v>>3]=m,v)|0)}l=c[10030]|0;if((a[68916]&1)==0){aI(88384,3,1,l|0)}else{m=+h[8599];n=c[7938]|0;p=+R(+(+h[8615]),+(m+(+(((c[1082]|0)+b|0)>>>0>>>0)*.5- +(n|0))/+((c[7939]|0)-n|0)*(+h[8600]-m)));cf(l|0,88536,(v=i,i=i+8|0,h[v>>3]=p,v)|0)}l=c[10030]|0;if((a[68228]&1)==0){aI(88384,3,1,l|0)}else{p=+h[8513];n=c[7940]|0;m=+R(+(+h[8529]),+(p+(1.0e3- +(((c[1080]|0)+f|0)>>>0>>>0)*.5- +(n|0))/+((c[7941]|0)-n|0)*(+h[8514]-p)));cf(l|0,88536,(v=i,i=i+8|0,h[v>>3]=m,v)|0)}l=c[10030]|0;aI(88360,2,1,l|0);c[1082]=b;c[1080]=f;i=e;return}}}while(0);if(!(a[4304]|0)){c[1082]=b;c[1080]=f;i=e;return}aI(125976,2,1,c[10030]|0);c[1082]=b;c[1080]=f;i=e;return}function qX(a){a=+a;h[539]=a;return}function qY(){c[58300]=0;c[58302]=0;a[233344]=0;return}function qZ(c){c=c|0;var d=0;if((c|0)==1){a[4384]=a[89896]|0;a[4385|0]=a[89897|0]|0;a[4386|0]=a[89898|0]|0;a[4387|0]=a[89899|0]|0;a[4388|0]=a[89900|0]|0;a[4389|0]=a[89901|0]|0;a[4390|0]=a[89902|0]|0;d=1;return d|0}else if((c|0)==0){b[2192]=119;d=1;return d|0}else if((c|0)==2){b[2192]=101;d=1;return d|0}else{b[2192]=119;d=0;return d|0}return 0}function q_(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;i=i+8|0;e=d|0;do{if((b|0)!=0){if((a[b]|0)==0){break}c[e>>2]=0;f=bk(b|0,148464)|0;g=f+1|0;h=ut(g)|0;if((h|0)==0){j=0;i=d;return j|0}uF(h|0,b|0,f|0);a[h+f|0]=0;if(f>>>0<(uA(b|0)|0)>>>0){f=b+g|0;ca(f|0,21e4,(v=i,i=i+8|0,c[v>>2]=e,v)|0)}f=c[10030]|0;if(a[4304]|0){cf(f|0,90232,(v=i,i=i+8|0,c[v>>2]=h,v)|0);g=c[e>>2]|0;if((g|0)!=0){k=c[10030]|0;cf(k|0,90144,(v=i,i=i+8|0,c[v>>2]=g,v)|0)}g=c[10030]|0;aI(90072,5,1,g|0)}else{cf(f|0,90024,(v=i,i=i+8|0,c[v>>2]=h,v)|0);f=c[e>>2]|0;if((f|0)!=0){g=c[10030]|0;cf(g|0,90008,(v=i,i=i+8|0,c[v>>2]=f,v)|0)}f=c[10030]|0;aI(89968,2,1,f|0)}uu(h);j=1;i=d;return j|0}}while(0);e=c[10030]|0;if(a[4304]|0){aI(90408,13,1,e|0);j=1;i=d;return j|0}else{aI(90384,20,1,e|0);j=1;i=d;return j|0}return 0}function q$(){var b=0;b=i;a[45024]=0;c[58300]=0;c[58302]=0;cf(c[10030]|0,90952,(v=i,i=i+8|0,h[v>>3]=.24089999999999998,v)|0);q9(-1);g[58284]=0.0;i=b;return}function q0(){var b=0,d=0,e=0,f=0;b=i;s7(2,0.0,0.0,0.0,0.0);if((a[233336]&1)!=0){d=c[10030]|0;e=c[58302]|0;f=c[58300]|0;cf(d|0,99e3,(v=i,i=i+24|0,c[v>>2]=e,c[v+8>>2]=f,c[v+16>>2]=100896,v)|0)}a[233336]=0;aI(99040,14,1,c[10030]|0);c[58300]=0;c[58302]=0;a[233344]=0;i=b;return}function q1(){var b=0,d=0,e=0;b=i;if(!(a[35312]|0)){c[(c[3524]|0)+8>>2]=1500;c[(c[3524]|0)+12>>2]=900}d=c[3524]|0;e=~~(+g[38]*+((c[d+12>>2]|0)>>>0>>>0));cf(c[10030]|0,91320,(v=i,i=i+16|0,c[v>>2]=~~(+g[178]*+((c[d+8>>2]|0)>>>0>>>0)),c[v+8>>2]=e,v)|0);if((aY(233408,91216)|0)==0){i=b;return}e=c[58350]|0;cf(c[10030]|0,91112,(v=i,i=i+16|0,c[v>>2]=233408,c[v+8>>2]=e,v)|0);i=b;return}function q2(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;if((a[233336]&1)!=0){f=c[10030]|0;g=c[58302]|0;h=c[58300]|0;cf(f|0,99e3,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=h,c[v+16>>2]=100896,v)|0)}a[233336]=0;c[58302]=b;c[58300]=d;a[233344]=0;i=e;return}function q3(b,d){b=b|0;d=d|0;var e=0,f=0.0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0;e=i;f=+g[58366];if(f==0.0){j=c[58302]|0;k=c[58300]|0;if(!(a[45024]|0)){s6(j,b,k,d);c[58302]=b;c[58300]=d;i=e;return}if(!(a[233344]|0)){l=c[10030]|0;cf(l|0,100208,(v=i,i=i+16|0,c[v>>2]=j,c[v+8>>2]=k,v)|0)}if(!((j|0)==(b|0)&(k|0)==(d|0))){k=c[10030]|0;cf(k|0,100168,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=d,v)|0)}c[58302]=b;c[58300]=d;a[233344]=1;c[58302]=b;c[58300]=d;i=e;return}k=c[58302]|0;j=c[58300]|0;l=a[233344]|0;if(!l){g[58370]=1.0}m=(k|0)==(b|0);do{if(m&(j|0)==(d|0)){if(l){break}n=c[10030]|0;cf(n|0,100920,(v=i,i=i+24|0,c[v>>2]=b,c[v+8>>2]=d,c[v+16>>2]=100896,v)|0)}else{o=f/.24089999999999998;do{if(m){if((d-j|0)>0){p=o;q=0.0;break}p=-0.0-o;q=0.0}else{r=(+(d|0)- +(j|0))/(+(b|0)- +(k|0));s=+(b-k>>31|1|0)*(o/+Q(+(r*r+1.0)));p=r*s;q=s}}while(0);o=1.0- +g[58370];s=+(k|0)+q*o;r=+(d|0);t=+(b|0);do{if(q*(t-s)<0.0){u=-1.0;w=-1.0}else{x=+(j|0)+p*o;y=s;z=-1.0;A=-1.0;n=0;while(1){if(p*(r-x)<0.0){B=z;C=A;D=n;break}E=n+1|0;F=q+y;if(q*(t-F)<0.0){B=y;C=x;D=E;break}else{A=x;x=p+x;z=y;y=F;n=E}}if((D|0)==1){n=c[10030]|0;y=B;z=C;cf(n|0,91472,(v=i,i=i+24|0,h[v>>3]=y,h[v+8>>3]=z,c[v+16>>2]=100896,v)|0);u=C;w=B;break}if((D|0)<=0){u=C;w=B;break}cf(c[10030]|0,91432,(v=i,i=i+48|0,c[v>>2]=k,c[v+8>>2]=j,h[v+16>>3]=q,h[v+24>>3]=p,c[v+32>>2]=D,c[v+40>>2]=100896,v)|0);u=C;w=B}}while(0);if(q!=0.0){if(w<0.0){n=b-k|0;if(q<0.0){G=-0.0-q}else{G=q}g[58370]=+(((n|0)>-1?n:-n|0)|0)/G+ +g[58370];break}s=t-w;if(s<0.0){H=-0.0-s}else{H=s}if(q<0.0){I=-0.0-q}else{I=q}g[58370]=H/I;break}else{if(u<0.0){n=d-j|0;if(p<0.0){J=-0.0-p}else{J=p}g[58370]=+(((n|0)>-1?n:-n|0)|0)/J+ +g[58370];break}s=r-u;if(s<0.0){K=-0.0-s}else{K=s}if(p<0.0){L=-0.0-p}else{L=p}g[58370]=K/L;break}}}while(0);a[233336]=+g[58370]>0.0&1;a[233344]=1;c[58302]=b;c[58300]=d;i=e;return}function q4(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;f=i;g=1e3-d|0;if(a[4304]|0){d=c[10030]|0;h=c[4344+(c[1094]<<2)>>2]|0;cf(d|0,89728,(v=i,i=i+40|0,c[v>>2]=b,c[v+8>>2]=g,c[v+16>>2]=e,c[v+24>>2]=h,c[v+32>>2]=4384,v)|0);i=f;return}else{j=0;k=0}while(1){h=a[e+k|0]|0;if((h<<24>>24|0)==0){break}else if((h<<24>>24|0)==91|(h<<24>>24|0)==93){l=j+1|0}else{l=j}j=l+1|0;k=k+1|0}k=j+1|0;j=ut(k)|0;do{if((j|0)==0){gk();l=ut(k)|0;if((l|0)!=0){m=l;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=89696,v)|0)}else{m=j}}while(0);j=0;k=0;while(1){l=e+k|0;h=a[l]|0;if((h<<24>>24|0)==0){break}else if((h<<24>>24|0)==91|(h<<24>>24|0)==93){a[m+j|0]=92;n=j+1|0;o=a[l]|0}else{n=j;o=h}a[m+n|0]=o;j=n+1|0;k=k+1|0}a[m+j|0]=0;j=c[4344+(c[1094]<<2)>>2]|0;cf(c[10030]|0,89472,(v=i,i=i+40|0,c[v>>2]=b,c[v+8>>2]=g,c[v+16>>2]=m,c[v+24>>2]=j,c[v+32>>2]=4384,v)|0);uu(m);i=f;return}function q5(){var b=0,d=0,e=0,f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0.0,K=0.0;b=i;i=i+40|0;d=b|0;e=b+24|0;f=b+32|0;a[35312]=0;j=c[13898]|0;L24745:do{if((j|0)<(c[8272]|0)){k=d|0;l=d+8|0;m=j;while(1){n=c[1054]|0;o=(a[n+(m*40&-1)|0]&1)==0;L24749:do{if(!o){p=c[n+(m*40&-1)+36>>2]|0;q=n+(m*40&-1)+32|0;r=c[10036]|0;s=0;while(1){if((s|0)>=(p|0)){break}if((a[r+((c[q>>2]|0)+s|0)|0]|0)==(a[s+103664|0]|0)){s=s+1|0}else{break L24749}}if((s|0)==1){break L24745}}}while(0);q=c[58320]|0;L24756:do{if((q|0)==0){t=233280}else{r=c[n+(m*40&-1)+36>>2]|0;p=c[n+(m*40&-1)+32>>2]|0;u=(r|0)>0;x=c[10036]|0;y=233280;z=q;while(1){L24760:do{if(!o){if(u){A=0;B=0;C=p;while(1){D=a[z+A|0]|0;if(D<<24>>24==(a[x+(A+C|0)|0]|0)){E=C;F=B}else{if(D<<24>>24!=36){break L24760}E=C-1|0;F=1}G=A+1|0;if((G|0)<(F+r|0)){A=G;B=F;C=E}else{break}}if((F|0)==0){H=G}else{t=y;break L24756}}else{H=0}C=a[z+H|0]|0;if((C<<24>>24|0)==36|(C<<24>>24|0)==0){t=y;break L24756}}}while(0);C=y+8|0;B=c[C>>2]|0;if((B|0)==0){t=C;break}else{y=C;z=B}}}}while(0);o=c[t+4>>2]|0;if((o|0)==5){a[35288]=0;c[13898]=m+1}else if((o|0)==2){c[58352]=6516580;c[13898]=m+1}else if((o|0)==4){a[35288]=1;c[13898]=m+1}else if((o|0)==1){c[58352]=7499107;c[13898]=m+1}else if((o|0)==0){a[233408]=a[90944]|0;a[233409|0]=a[90945|0]|0;a[233410|0]=a[90946|0]|0;a[233411|0]=a[90947|0]|0;a[233412|0]=a[90948|0]|0;c[13898]=m+1}else if((o|0)==3){g[e>>2]=5.0;g[f>>2]=3.0;c[13898]=m+1;a[35312]=1;c[8826]=s4(e,f,1)|0;c[(c[3524]|0)+8>>2]=~~(+g[e>>2]*300.0/72.0);c[(c[3524]|0)+12>>2]=~~(+g[f>>2]*300.0/72.0)}else{o=is(d)|0;q=c[o>>2]|0;if((q|0)==3){I=+uz(c[o+8>>2]|0,0)}else if((q|0)==1){I=+(c[o+8>>2]|0)}else if((q|0)==2){I=+h[o+8>>3]}else{break}if((c[k>>2]|0)==3){uu(c[l>>2]|0);c[k>>2]=1}c[58350]=~~I}m=c[13898]|0;if((m|0)>=(c[8272]|0)){break L24745}}uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);c[(c[3524]|0)+16>>2]=((c[58350]|0)*300&-1|0)/72&-1;c[(c[3524]|0)+20>>2]=((c[58350]|0)*300&-1|0)/144&-1;if((aY(233408,91216)|0)==0){uF(13048,90848,1024)}else{d=(a[233410]|0)==116?90800:90792;f=c[58350]|0;be(13048,90816,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=f,v)|0)}do{if(a[35312]|0){f=(c[8826]|0)==2;d=13048+(uA(13048)|0)|0;e=c[3524]|0;I=+((c[e+8>>2]|0)>>>0>>>0);if(f){J=I*2.54/300.0;K=+((c[e+12>>2]|0)>>>0>>>0)*2.54/300.0;be(d|0,90672,(v=i,i=i+16|0,h[v>>3]=J,h[v+8>>3]=K,v)|0);break}else{K=I/300.0;I=+((c[e+12>>2]|0)>>>0>>>0)/300.0;be(d|0,90632,(v=i,i=i+16|0,h[v>>3]=K,h[v+8>>3]=I,v)|0);break}}}while(0);d=a[35288]|0;e=13048+(uA(13048)|0)|0;if(d){d=e;f=d|0;w=1953460768;a[f]=w&255;w=w>>8;a[f+1|0]=w&255;w=w>>8;a[f+2|0]=w&255;w=w>>8;a[f+3|0]=w&255;f=d+4|0;w=6648929;a[f]=w&255;w=w>>8;a[f+1|0]=w&255;w=w>>8;a[f+2|0]=w&255;w=w>>8;a[f+3|0]=w&255;i=b;return}else{uD(e|0,90568,10);i=b;return}}function q6(a){a=a|0;c[8830]=a;return 1}function q7(a){a=a|0;c[8824]=a;return 1}function q8(){a[45024]=0;c[58300]=0;c[58302]=0;return}function q9(b){b=b|0;var d=0,e=0,f=0,j=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0;d=i;if((b|0)>5){e=(b|0)%6&-1}else{e=b}if(!(a[45024]|0)){s7(2,0.0,0.0,0.0,0.0)}if((a[233336]&1)!=0){b=c[10030]|0;f=c[58302]|0;j=c[58300]|0;cf(b|0,99e3,(v=i,i=i+24|0,c[v>>2]=f,c[v+8>>2]=j,c[v+16>>2]=100896,v)|0)}a[233336]=0;j=(e|0)>-1;if(j){k=+g[233352+(e<<3)>>2]}else{k=.4000000059604645}do{if(k!=+g[58284]){f=c[10030]|0;l=k*-.5;m=k;cf(f|0,91544,(v=i,i=i+24|0,h[v>>3]=l,h[v+8>>3]=m,h[v+16>>3]=m,v)|0);if(!(a[45024]|0)){n=m;break}f=c[10030]|0;cf(f|0,91496,(v=i,i=i+8|0,h[v>>3]=m,v)|0);n=m}else{n=k}}while(0);g[58284]=k;g[58368]=n/.24089999999999998;if(!j){o=0.0;g[58366]=o;a[233344]=0;i=d;return}o=+g[233356+(e<<3)>>2];g[58366]=o;a[233344]=0;i=d;return}function ra(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;f=i;g=a[e]|0;if(g<<24>>24==0){i=f;return}if(a[35288]|0){h=0}else{j=0;k=g;while(1){g=j+1|0;if(k<<24>>24==92){l=j+2|0;m=(a[e+g|0]|0)==92}else{l=g;m=0}g=a[e+l|0]|0;if(g<<24>>24==0|m){h=m;break}else{j=l;k=g}}}cf(c[10030]|0,99752,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=d,v)|0);d=c[8830]|0;if(a[35288]&(d|0)!=0){b=c[10030]|0;cf(b|0,91600,(v=i,i=i+8|0,c[v>>2]=d,v)|0)}d=a[e]|0;do{if((d<<24>>24|0)==123|(d<<24>>24|0)==91){b=c[10030]|0;cf(b|0,99720,(v=i,i=i+8|0,c[v>>2]=e,v)|0)}else{b=c[10030]|0;k=c[233184+(c[8824]<<2)>>2]|0;if(h){cf(b|0,99536,(v=i,i=i+16|0,c[v>>2]=k,c[v+8>>2]=e,v)|0);break}else{cf(b|0,99696,(v=i,i=i+16|0,c[v>>2]=k,c[v+8>>2]=e,v)|0);break}}}while(0);if(!(a[35288]&(c[8830]|0)!=0)){i=f;return}aF(125,c[10030]|0);i=f;return}function rb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;if((a[233336]&1)!=0){g=c[10030]|0;h=c[58302]|0;j=c[58300]|0;cf(g|0,99e3,(v=i,i=i+24|0,c[v>>2]=h,c[v+8>>2]=j,c[v+16>>2]=100896,v)|0)}a[233336]=0;c[58302]=b;c[58300]=d;a[233344]=0;if((e|0)<0){k=92632}else{k=c[233216+(((e|0)%15&-1)<<2)>>2]|0}cf(c[10030]|0,99e3,(v=i,i=i+24|0,c[v>>2]=b,c[v+8>>2]=d,c[v+16>>2]=k,v)|0);i=f;return}function rc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;s5(a,b,d,e,1,f);c[58302]=d;c[58300]=e;return}function rd(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0;g=i;j=a&15;do{if((j|0)==1){if((a>>4|0)>=50){break}i=g;return}else if((j|0)==0){i=g;return}else if((j|0)==2){if((a&16|0)!=0){break}i=g;return}}while(0);cf(c[10030]|0,92704,(v=i,i=i+32|0,c[v>>2]=b,c[v+8>>2]=d,h[v+16>>3]=+(e>>>0>>>0)*.24089999999999998,h[v+24>>3]=+(f>>>0>>>0)*.24089999999999998,v)|0);i=g;return}function re(){var b=0;b=i;a[45024]=1;c[58300]=0;c[58302]=0;cf(c[10030]|0,92776,(v=i,i=i+8|0,h[v>>3]=.24089999999999998,v)|0);q9(-1);i=b;return}function rf(){aI(99040,14,1,c[10030]|0);return}function rg(){var b=0,d=0,e=0;b=i;d=c[c[7118]>>2]|0;do{if((d|0)==1){e=c[10030]|0;aI(93200,35,1,e|0)}else if((d|0)==0){aI(93096,39,1,c[10030]|0)}else if((d|0)==2){pD();e=c[10030]|0;if((e|0)==0){break}cf(e|0,93272,(v=i,i=i+8|0,c[v>>2]=c[7112],v)|0);if((a[(c[7118]|0)+113|0]&1)==0){break}aI(93240,15,1,c[10030]|0)}}while(0);d=c[7112]|0;if((d|0)!=0){uu(d);c[7112]=0}d=c[10028]|0;if((d|0)==0|(d|0)==(c[10030]|0)){i=b;return}az(d|0);c[10028]=0;i=b;return}function rh(b){b=b|0;var d=0,e=0,f=0,g=0,j=0;d=i;i=i+16|0;e=d|0;f=e;c[f>>2]=c[59458];c[f+4>>2]=c[59459];c[f+8>>2]=c[59460];c[f+12>>2]=c[59461];c[e+4>>2]=b;f=c[7118]|0;do{if((c[f>>2]|0)==2){if((a[f+112|0]&1)==0){g=18637;break}j=(b|0)%4&-1}else{g=18637}}while(0);if((g|0)==18637){j=(b|0)%9&-1}b=j+3|0;j=(b|0)<0?0:b;if((c[57432]|0)==(j|0)){rj(e);i=d;return}a[228944]=0;if((c[7116]|0)!=0){b=c[10028]|0;aI(215952,7,1,b|0);c[7116]=0;a[228944]=0}c[57432]=j;h[28714]=+h[28715];cf(c[10028]|0,202624,(v=i,i=i+8|0,c[v>>2]=a[j+93672|0]|0,v)|0);c[7116]=0;rj(e);i=d;return}function ri(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=i;g=c[10030]|0;if((g|0)==0){i=f;return}if(a[5688]|0){h=g}else{aK(5624,g|0);a[5688]=1;h=c[10030]|0}cf(h|0,93440,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=d,v)|0);d=c[7230]|0;if((d|0)!=0){b=c[10030]|0;cf(b|0,93424,(v=i,i=i+8|0,c[v>>2]=d,v)|0)}d=a[e]|0;do{if((d<<24>>24|0)==123|(d<<24>>24|0)==91){b=c[10030]|0;cf(b|0,94528,(v=i,i=i+8|0,c[v>>2]=e,v)|0)}else{b=c[7198]|0;if((b|0)==2){h=c[10030]|0;cf(h|0,94296,(v=i,i=i+8|0,c[v>>2]=e,v)|0);break}else if((b|0)==0){cf(c[10030]|0,94496,(v=i,i=i+8|0,c[v>>2]=e,v)|0);break}else if((b|0)==1){cf(c[10030]|0,94392,(v=i,i=i+8|0,c[v>>2]=e,v)|0);break}else{break}}}while(0);if((c[7230]|0)!=0){e=c[10030]|0;aF(125,e|0)}aI(94160,3,1,c[10030]|0);i=f;return}function rj(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0.0;d=i;i=i+24|0;e=d|0;f=b;if((uG(5608,f|0,16)|0)==0){i=d;return}c[1402]=c[f>>2];c[1403]=c[f+4>>2];c[1404]=c[f+8>>2];c[1405]=c[f+12>>2];f=b|0;do{if((c[f>>2]|0)==1){g=c[7118]|0;if((a[g+17|0]&1)!=0){j=18673;break}k=c[b+4>>2]|0;do{if((c[g>>2]|0)==2){if((a[g+112|0]&1)==0){j=18668;break}l=(k|0)%4&-1}else{j=18668}}while(0);if((j|0)==18668){l=(k|0)%9&-1}g=l+3|0;m=(g|0)<0?0:g;if((c[57432]|0)==(m|0)){break}a[228944]=0;if((c[7116]|0)!=0){g=c[10028]|0;aI(215952,7,1,g|0);c[7116]=0;a[228944]=0}c[57432]=m;h[28714]=+h[28715];g=c[10028]|0;n=a[m+93672|0]|0;cf(g|0,202624,(v=i,i=i+8|0,c[v>>2]=n,v)|0);c[7116]=0}else{j=18673}}while(0);if((j|0)==18673){pS(b)}a[5688]=0;j=c[f>>2]|0;if((j|0)==3){l=c[b+4>>2]|0;o=+(l>>>16&255|0)/255.0;p=+(l>>>8&255|0)/255.0;q=+(l&255|0)/255.0;be(5624,93720,(v=i,i=i+24|0,h[v>>3]=o,h[v+8>>3]=p,h[v+16>>3]=q,v)|0);r=c[f>>2]|0}else{r=j}if((r|0)==1){j=c[b+4>>2]|0;if((a[(c[7118]|0)+112|0]&1)==0){s=(j|0)%9&-1}else{s=(j|0)%4&-1}j=a[93672+(s+3|0)|0]|0;be(5624,93688,(v=i,i=i+8|0,c[v>>2]=j,v)|0);t=c[f>>2]|0}else{t=r}if((t|0)!=5){i=d;return}q=+h[b+8>>3];if((a[(c[7118]|0)+18|0]&1)==0){fq(q,e);p=+h[e>>3];o=+h[e+8>>3];u=+h[e+16>>3];be(5624,93720,(v=i,i=i+24|0,h[v>>3]=p,h[v+8>>3]=o,h[v+16>>3]=u,v)|0);i=d;return}if(q<=0.0){be(5624,93592,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);i=d;return}if(q<1.0){u=+(~~(q*1.0e4+.5)|0)*1.0e-4;be(25336,141840,(v=i,i=i+8|0,h[v>>3]=u,v)|0);e=(a[25336]|0)==48&(a[25337]|0)==46?25337:25336;be(5624,93464,(v=i,i=i+8|0,c[v>>2]=e,v)|0);i=d;return}else{be(5624,93528,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);i=d;return}}function rk(b){b=b|0;var d=0,e=0;d=i;do{if((b|0)==0){c[10882]=0}else if((b|0)==2){e=c[10882]|0;if((e|0)==2){break}else if((e|0)==1){aI(94096,7,1,c[10030]|0)}c[10882]=2;aI(93984,35,1,c[10030]|0);a[5688]=0}else if((b|0)==12){e=c[10028]|0;if((e|0)==0|(e|0)==(c[10030]|0)){break}cf(e|0,93800,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((b|0)==1){e=c[10882]|0;if((e|0)==1){break}else if((e|0)==2){aI(94096,7,1,c[10030]|0)}c[10882]=1;aI(94024,34,1,c[10030]|0);a[5688]=0}else if((b|0)==5){if(((c[10882]|0)-1|0)>>>0<2){e=c[10030]|0;aI(94096,7,1,e|0)}c[10882]=0}else if((b|0)==13){e=c[10028]|0;if((e|0)==0|(e|0)==(c[10030]|0)){break}cf(e|0,93784,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);i=d;return}function rl(){var b=0,d=0,e=0.0,f=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;b=i;c[7116]=0;aI(199208,29,1,c[10028]|0);d=c[10028]|0;if((d|0)==(c[10030]|0)){aI(94992,6,1,d|0)}d=c[7118]|0;e=+g[d+88>>2];do{if(e!=0.0){if((c[d>>2]|0)!=1){break}f=c[10030]|0;j=e;cf(f|0,94888,(v=i,i=i+8|0,h[v>>3]=j,v)|0)}}while(0);d=c[7036]|0;if((d|0)==0){i=b;return}else{k=d}do{d=c[k+4>>2]|0;cf(c[10030]|0,94840,(v=i,i=i+16|0,c[v>>2]=c[k>>2],c[v+8>>2]=d,v)|0);d=c[7118]|0;do{if((a[d+97|0]&1)==0){l=d}else{f=c[k+8>>2]|0;if((f|0)==0){l=d;break}m=c[10030]|0;n=360-f|0;cf(m|0,94696,(v=i,i=i+8|0,c[v>>2]=n,v)|0);l=c[7118]|0}}while(0);d=(c[l>>2]|0)==1;do{if(d){n=c[k+16>>2]|0;m=a[n]|0;if(!((m<<24>>24|0)==123|(m<<24>>24|0)==91)){o=18724;break}m=c[10030]|0;cf(m|0,94528,(v=i,i=i+8|0,c[v>>2]=n,v)|0)}else{o=18724}}while(0);do{if((o|0)==18724){o=0;n=c[k+12>>2]|0;if((n|0)==0){m=c[10030]|0;f=d?94496:94424;p=c[k+16>>2]|0;cf(m|0,f|0,(v=i,i=i+8|0,c[v>>2]=p,v)|0);break}else if((n|0)==2){cf(c[10030]|0,(d?94296:94272)|0,(v=i,i=i+8|0,c[v>>2]=c[k+16>>2],v)|0);break}else if((n|0)==1){cf(c[10030]|0,(d?94392:94328)|0,(v=i,i=i+8|0,c[v>>2]=c[k+16>>2],v)|0);break}else{break}}}while(0);do{if((a[(c[7118]|0)+97|0]&1)!=0){if((c[k+8>>2]|0)==0){break}d=c[10030]|0;aI(94208,50,1,d|0)}}while(0);aI(94160,3,1,c[10030]|0);k=c[k+20>>2]|0;}while((k|0)!=0);k=c[7036]|0;if((k|0)==0){i=b;return}else{q=k}while(1){k=c[q+20>>2]|0;uu(c[q+16>>2]|0);uu(c[7036]|0);c[7036]=k;if((k|0)==0){break}else{q=k}}i=b;return}function rm(){var b=0;b=i;c[59762]=0;c[59764]=0;c[59760]=0;c[59828]=0;a[239320]=0;c[11600]=0;cf(c[10030]|0,95608,(v=i,i=i+8|0,h[v>>3]=.12,v)|0);i=b;return}function rn(){var b=0;if(a[239320]|0){b=c[10030]|0;aF(10,b|0);a[239320]=0}c[59762]=0;c[59764]=0;return}function ro(){var b=0;if(a[239320]|0){b=c[10030]|0;aF(10,b|0);a[239320]=0}aI(99040,14,1,c[10030]|0);return}function rp(){var b=0,d=0,e=0.0,f=0.0,j=0,k=0.0;b=i;d=c[3524]|0;e=+((c[d+8>>2]|0)>>>0>>>0);f=+((c[d+12>>2]|0)>>>0>>>0);j=~~(f*+g[38]);k=+g[184];cf(c[10030]|0,95784,(v=i,i=i+32|0,c[v>>2]=~~(e*+g[178]),c[v+8>>2]=j,c[v+16>>2]=~~(e*k),c[v+24>>2]=~~(f*k),v)|0);if(a[46352]|0){k=+((c[d+16>>2]|0)>>>0>>>0)*.12+.5;d=c[10030]|0;j=~~k;f=k*1.2;cf(d|0,95712,(v=i,i=i+16|0,c[v>>2]=j,h[v+8>>3]=f,v)|0);i=b;return}else{j=c[10030]|0;aI(95688,14,1,j|0);i=b;return}}function rq(b,d){b=b|0;d=d|0;var e=0;if(a[239320]|0){e=c[10030]|0;aF(10,e|0);a[239320]=0}c[59764]=b;c[59762]=d;return}function rr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;do{if(a[239320]|0){f=c[59828]|0;c[59828]=f+1;if((f|0)<=49){break}f=c[10030]|0;g=c[239216+(c[11584]<<5)+((c[59760]|0)+2<<2)>>2]|0;h=c[59764]|0;j=c[59762]|0;cf(f|0,96248,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=h,c[v+16>>2]=j,v)|0);c[59828]=1}else{a[239320]=1;j=c[10030]|0;h=c[239216+(c[11584]<<5)+((c[59760]|0)+2<<2)>>2]|0;g=c[59764]|0;f=c[59762]|0;cf(j|0,96272,(v=i,i=i+24|0,c[v>>2]=h,c[v+8>>2]=g,c[v+16>>2]=f,v)|0);c[59828]=1}}while(0);cf(c[10030]|0,96200,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=d,v)|0);c[59764]=b;c[59762]=d;i=e;return}function rs(b){b=b|0;var d=0,e=0;if(a[239320]|0){d=c[10030]|0;aF(10,d|0);a[239320]=0}c[59760]=(b|0)%((c[46304+(c[11584]<<2)>>2]|0)-2|0)&-1;if(!(a[46392]|0)){return}c[11600]=b;if((b|0)<0){e=0}else{e=((b|0)%6&-1)+1|0}c[11600]=e;aK(c[46360+(e<<2)>>2]|0,c[10030]|0);return}function rt(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;if((a[e]|0)==0){i=f;return}g=c[c[3524]>>2]|0;h=ut(24)|0;do{if((h|0)==0){gk();j=ut(24)|0;if((j|0)!=0|(g|0)==0){k=j;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=g,v)|0)}else{k=h}}while(0);h=k;c[k>>2]=b;c[k+4>>2]=d;d=(uA(e|0)|0)+1|0;b=c[c[3524]>>2]|0;g=ut(d)|0;do{if((g|0)==0){gk();j=ut(d)|0;if((j|0)!=0|(b|0)==0){l=j;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=b,v)|0)}else{l=g}}while(0);c[k+16>>2]=l;uB(l|0,e|0);c[k+12>>2]=c[7198];c[k+8>>2]=c[7230];c[k+20>>2]=c[7036];c[7036]=h;i=f;return}function ru(){var b=0,e=0,f=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0.0,W=0;b=i;i=i+24|0;e=b|0;a[46288]=0;a[46392]=0;c[11584]=0;c[11574]=0;f=c[13898]|0;j=c[8272]|0;L25079:do{if((f|0)<(j|0)){k=0.0;l=1;m=f;n=j;L25080:while(1){o=c[1054]|0;p=(a[o+(m*40&-1)|0]&1)==0;q=c[o+(m*40&-1)+36>>2]|0;r=o+(m*40&-1)+32|0;L25082:do{if(p){s=c[r>>2]|0;t=18835}else{o=c[10036]|0;u=0;while(1){if((u|0)>=(q|0)){t=18785;break}if((a[o+((c[r>>2]|0)+u|0)|0]|0)==(a[u+103664|0]|0)){u=u+1|0}else{break}}if((t|0)==18785){t=0;if((u|0)==1){w=k;x=l;break L25079}}o=c[r>>2]|0;if(!((q|0)>0&(p^1))){s=o;t=18835;break}y=c[10036]|0;z=0;A=0;B=o;while(1){if((a[z+184456|0]|0)==(a[y+(z+B|0)|0]|0)){C=B;D=A}else{if((z|0)!=3){break}C=B-1|0;D=1}E=z+1|0;if((E|0)<(D+q|0)){z=E;A=D;B=C}else{t=18792;break}}do{if((t|0)==18792){t=0;if((D|0)==0){if(!((z|0)==2|(z|0)==7)){break}}a[46352]=0;a[46392]=0;a[46288]=0;c[11584]=0;c[11574]=0;c[(c[3524]|0)+8>>2]=3e3;c[(c[3524]|0)+12>>2]=1800;a[239208]=0;c[13898]=(c[13898]|0)+1;F=1;G=k;break L25082}}while(0);if(p){s=o;t=18835;break}L25105:do{if((q|0)>0){z=c[10036]|0;B=0;A=0;y=o;while(1){if((a[B+115600|0]|0)==(a[z+(B+y|0)|0]|0)){H=y;I=A}else{if((B|0)!=1){t=18804;break L25105}H=y-1|0;I=1}u=B+1|0;if((u|0)<(I+q|0)){B=u;A=I;y=H}else{break}}if((I|0)!=0){break}if(!((B|0)==0|(B|0)==5)){t=18804}}else{t=18804}}while(0);do{if((t|0)==18804){t=0;if(!((q|0)>0&(p^1))){s=o;t=18835;break L25082}y=c[10036]|0;A=0;z=0;u=o;while(1){if((a[A+115536|0]|0)==(a[y+(A+u|0)|0]|0)){J=u;K=z}else{if((A|0)!=1){break}J=u-1|0;K=1}E=A+1|0;if((E|0)<(K+q|0)){A=E;z=K;u=J}else{t=18810;break}}if((t|0)==18810){t=0;if((K|0)!=0){break}if((A|0)==0|(A|0)==6){break}}if(p){s=o;t=18835;break L25082}L25129:do{if((q|0)>0){u=c[10036]|0;z=0;y=0;B=o;while(1){if((a[z+95544|0]|0)==(a[u+(z+B|0)|0]|0)){L=B;M=y}else{if((z|0)!=1){break L25129}L=B-1|0;M=1}E=z+1|0;if((E|0)<(M+q|0)){z=E;y=M;B=L}else{break}}if((M|0)==0){if(!((z|0)==0|(z|0)==6)){break}}a[46288]=1;c[13898]=m+1;F=l;G=k;break L25082}}while(0);if(!((q|0)>0&(p^1))){s=o;t=18835;break L25082}A=c[10036]|0;B=0;y=0;u=o;while(1){if((a[B+129104|0]|0)==(a[A+(B+u|0)|0]|0)){N=u;O=y}else{if((B|0)!=2){s=o;t=18835;break L25082}N=u-1|0;O=1}E=B+1|0;if((E|0)<(O+q|0)){B=E;y=O;u=N}else{break}}if((O|0)==0){if(!((B|0)==1|(B|0)==6)){s=o;t=18835;break L25082}}if(!(a[46392]|0)){c[11584]=1}c[13898]=m+1;F=l;G=k;break L25082}}while(0);a[46392]=1;c[11584]=2;c[13898]=m+1;F=l;G=k}}while(0);L25157:do{if((t|0)==18835){t=0;L25159:do{if((n|0)>(m|0)){if(p){break}r=c[10036]|0;o=0;while(1){if((o|0)>=(q|0)){break}if((a[r+(s+o|0)|0]|0)==(a[o+130496|0]|0)){o=o+1|0}else{t=18842;break L25159}}if((o|0)!=4){t=18842;break}c[13898]=m+1;r=s4(46280,46272,1)|0;c[(c[3524]|0)+8>>2]=~~(+g[11570]/.12);c[(c[3524]|0)+12>>2]=~~(+g[11568]/.12);a[239208]=1;F=r;G=k;break L25157}else{t=18842}}while(0);L25167:do{if((t|0)==18842){t=0;if(!((q|0)>0&(p^1))){break}r=c[10036]|0;B=0;u=0;y=s;while(1){if((a[B+95520|0]|0)==(a[r+(B+y|0)|0]|0)){P=y;Q=u}else{if((B|0)!=1){break}P=y-1|0;Q=1}A=B+1|0;if((A|0)<(Q+q|0)){B=A;u=Q;y=P}else{t=18848;break}}do{if((t|0)==18848){t=0;if((Q|0)==0){if(!((B|0)==0|(B|0)==5)){break}}c[11574]=1;c[13898]=m+1;F=l;G=k;break L25157}}while(0);if(!((q|0)>0&(p^1))){break}B=c[10036]|0;y=0;u=0;r=s;while(1){if((a[y+95512|0]|0)==(a[B+(y+r|0)|0]|0)){R=r;S=u}else{if((y|0)!=1){break L25167}R=r-1|0;S=1}o=y+1|0;if((o|0)<(S+q|0)){y=o;u=S;r=R}else{break}}if((S|0)==0){if(!((y|0)==0|(y|0)==4)){break}}c[11574]=2;c[13898]=m+1;F=l;G=k;break L25157}}while(0);if(((d[(c[10036]|0)+s|0]|0)-48|0)>>>0>=10){t=18869;break L25080}r=is(e)|0;u=c[r>>2]|0;if((u|0)==3){T=+uz(c[r+8>>2]|0,0)}else if((u|0)==1){T=+(c[r+8>>2]|0)}else if((u|0)==2){T=+h[r+8>>3]}else{t=18865;break L25080}U=T;if(U<1.0|U>100.0){t=18867;break L25080}a[46352]=1;V=U/.12;c[(c[3524]|0)+16>>2]=~~V;c[(c[3524]|0)+20>>2]=~~(V*.5);F=l;G=U}}while(0);q=c[13898]|0;p=c[8272]|0;if((q|0)<(p|0)){k=G;l=F;m=q;n=p}else{w=G;x=F;break L25079}}if((t|0)==18869){uf(m,95448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==18865){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((t|0)==18867){uf(c[13898]|0,95472,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}else{w=0.0;x=1}}while(0);t=(c[11584]|0)==1?95248:179864;F=a[46288]|0?95224:179864;e=c[11574]|0;if((e|0)==1){W=95216}else{W=(e|0)==2?95152:179864}be(13048,95392,(v=i,i=i+32|0,c[v>>2]=a[46392]|0?95304:179864,c[v+8>>2]=t,c[v+16>>2]=F,c[v+24>>2]=W,v)|0);if(a[46352]|0){W=13048+(uA(13048)|0)|0;F=~~w;be(W|0,95144,(v=i,i=i+8|0,c[v>>2]=F,v)|0)}if(!(a[239208]|0)){i=b;return}F=13048+(uA(13048)|0)|0;W=c[3524]|0;w=+((c[W+8>>2]|0)>>>0>>>0);if((x|0)==2){G=w*2.54/600.0;T=+((c[W+12>>2]|0)>>>0>>>0)*2.54/600.0;be(F|0,95024,(v=i,i=i+16|0,h[v>>3]=G,h[v+8>>3]=T,v)|0);i=b;return}else{T=w/600.0;w=+((c[W+12>>2]|0)>>>0>>>0)/600.0;be(F|0,95e3,(v=i,i=i+16|0,h[v>>3]=T,h[v+8>>3]=w,v)|0);i=b;return}}function rv(a){a=a|0;c[11586]=a;return 1}function rw(a){a=a|0;c[1044]=a;return 1}function rx(a){a=a|0;c[11602]=(a|0)!=0&1;return 1}function ry(a){a=a|0;c[1050]=(a|0)!=0&1;return 1}function rz(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;b=c[13898]|0;if((b|0)>=(c[8272]|0)){return}d=c[1054]|0;e=(a[d+(b*40&-1)|0]&1)==0;if(e){return}f=c[d+(b*40&-1)+36>>2]|0;g=d+(b*40&-1)+32|0;d=c[10036]|0;h=0;while(1){if((h|0)>=(f|0)){i=18891;break}if((a[d+((c[g>>2]|0)+h|0)|0]|0)==(a[h+103664|0]|0)){h=h+1|0}else{break}}do{if((i|0)==18891){if((h|0)!=1){break}return}}while(0);h=c[g>>2]|0;if(!((f|0)>0&(e^1))){return}g=c[10036]|0;d=0;j=0;k=h;while(1){if((a[d+101280|0]|0)==(a[g+(d+k|0)|0]|0)){l=k;m=j}else{if((d|0)!=2){break}l=k-1|0;m=1}n=d+1|0;if((n|0)<(m+f|0)){d=n;j=m;k=l}else{i=18898;break}}do{if((i|0)==18898){if((m|0)==0){if(!((d|0)==1|(d|0)==10)){break}}a[231056]=1;c[13898]=b+1;return}}while(0);if(!((f|0)>0&(e^1))){return}e=c[10036]|0;d=0;m=0;l=h;while(1){if((a[d+101232|0]|0)==(a[e+(d+l|0)|0]|0)){o=l;p=m}else{if((d|0)!=1){i=18918;break}o=l-1|0;p=1}h=d+1|0;if((h|0)<(p+f|0)){d=h;m=p;l=o}else{break}}if((i|0)==18918){return}do{if((p|0)==0){if((d|0)==0|(d|0)==4){break}return}}while(0);a[231048]=1;c[13898]=b+1;return}function rA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;if(a[239320]|0){g=c[10030]|0;aF(10,g|0);a[239320]=0}cf(c[10030]|0,99752,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=d,v)|0);d=a[e]|0;if((d<<24>>24|0)==123|(d<<24>>24|0)==91){d=c[10030]|0;cf(d|0,99720,(v=i,i=i+8|0,c[v>>2]=e,v)|0);i=f;return}d=c[11602]|0;if((d|0)==0){b=c[11586]|0;if((b|0)==0){g=c[10030]|0;aI(97304,18,1,g|0)}else if((b|0)==2){aI(97152,18,1,c[10030]|0)}else if((b|0)==1){aI(97240,15,1,c[10030]|0)}b=c[10030]|0;cf(b|0,97128,(v=i,i=i+8|0,c[v>>2]=e,v)|0);i=f;return}else if((d|0)==1){d=c[11586]|0;if(a[46288]|0){if((d|0)==1){b=c[10030]|0;aI(97024,43,1,b|0)}else if((d|0)==0){aI(97080,44,1,c[10030]|0)}else if((d|0)==2){aI(96952,44,1,c[10030]|0)}b=c[10030]|0;cf(b|0,96920,(v=i,i=i+8|0,c[v>>2]=e,v)|0);i=f;return}if((d|0)==1){b=c[10030]|0;aI(96824,30,1,b|0)}else if((d|0)==0){aI(96856,31,1,c[10030]|0)}else if((d|0)==2){aI(96720,31,1,c[10030]|0)}d=(uA(e|0)|0)-1|0;if((d|0)>0){b=0;do{cf(c[10030]|0,96672,(v=i,i=i+8|0,c[v>>2]=a[e+b|0]|0,v)|0);b=b+1|0;}while((b|0)<(d|0))}aF(a[e+d|0]|0|0,c[10030]|0);aI(96616,4,1,c[10030]|0);i=f;return}else{i=f;return}}function rB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=i;if(a[239320]|0){g=c[10030]|0;aF(10,g|0);a[239320]=0}c[59764]=b;c[59762]=d;if((e|0)<0){h=100128}else{g=c[11574]|0;h=c[239064+(g*48&-1)+(((e|0)%(c[46320+(g<<2)>>2]|0)&-1)<<2)>>2]|0}cf(c[10030]|0,99e3,(v=i,i=i+24|0,c[v>>2]=b,c[v+8>>2]=d,c[v+16>>2]=h,v)|0);i=f;return}function rC(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;s5(a,b,d,e,2,f);c[59764]=d;c[59762]=e;return}function rD(){var b=0,d=0,e=0,f=0,g=0.0;b=i;a[3280]=1;a[3648]=1;c[814]=0;c[816]=0;ts();c[916]=-1;d=a[3648]|0?39:-2;e=c[818]|0;f=c[914]|0;g=+h[523];cf(c[10030]|0,225816,(v=i,i=i+48|0,c[v>>2]=a[3280]|0?30:0,c[v+8>>2]=d,c[v+16>>2]=e,c[v+24>>2]=f,h[v+32>>3]=g,h[v+40>>3]=.001,v)|0);i=b;return}function rE(){ts();c[814]=0;c[816]=0;return}function rF(){ts();aI(99040,14,1,c[10030]|0);return}function rG(){var a=0,b=0,d=0,e=0,f=0;a=i;b=c[3524]|0;d=b+8|0;e=c[d>>2]|0;f=b+12|0;b=c[f>>2]|0;cf(c[10030]|0,226256,(v=i,i=i+48|0,c[v>>2]=179864,c[v+8>>2]=e,c[v+16>>2]=b,c[v+24>>2]=0,c[v+32>>2]=0,c[v+40>>2]=179864,v)|0);b=(c[d>>2]|0)-876|0;e=c[f>>2]|0;cf(c[10030]|0,226256,(v=i,i=i+48|0,c[v>>2]=99408,c[v+8>>2]=b,c[v+16>>2]=e,c[v+24>>2]=876,c[v+32>>2]=0,c[v+40>>2]=99360,v)|0);e=(c[d>>2]|0)-215|0;b=c[f>>2]|0;cf(c[10030]|0,226256,(v=i,i=i+48|0,c[v>>2]=99408,c[v+8>>2]=e,c[v+16>>2]=b,c[v+24>>2]=0,c[v+32>>2]=0,c[v+40>>2]=99336,v)|0);b=(c[d>>2]|0)-1091|0;e=c[f>>2]|0;cf(c[10030]|0,226256,(v=i,i=i+48|0,c[v>>2]=99408,c[v+8>>2]=b,c[v+16>>2]=e,c[v+24>>2]=876,c[v+32>>2]=0,c[v+40>>2]=99288,v)|0);e=c[d>>2]|0;b=(c[f>>2]|0)-379|0;cf(c[10030]|0,226256,(v=i,i=i+48|0,c[v>>2]=99408,c[v+8>>2]=e,c[v+16>>2]=b,c[v+24>>2]=0,c[v+32>>2]=0,c[v+40>>2]=99272,v)|0);b=c[d>>2]|0;e=(c[f>>2]|0)-533|0;cf(c[10030]|0,226256,(v=i,i=i+48|0,c[v>>2]=99408,c[v+8>>2]=b,c[v+16>>2]=e,c[v+24>>2]=0,c[v+32>>2]=533,c[v+40>>2]=99176,v)|0);e=c[d>>2]|0;d=(c[f>>2]|0)-912|0;cf(c[10030]|0,226256,(v=i,i=i+48|0,c[v>>2]=99408,c[v+8>>2]=e,c[v+16>>2]=d,c[v+24>>2]=0,c[v+32>>2]=533,c[v+40>>2]=99120,v)|0);aI(99064,15,1,c[10030]|0);i=a;return}function rH(a,b){a=a|0;b=b|0;ts();c[816]=a;c[814]=b;return}function rI(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;do{if(a[4192]|0){f=c[918]|0;if((f|0)<=99){g=f;break}ts();a[4192]=1;f=c[3680+(((c[916]|0)+2|0)*12&-1)>>2]|0;if((f|0)==2){h=(c[914]|0)*3&-1}else if((f|0)==3){h=(c[914]|0)*5&-1}else if((f|0)==1){h=c[914]|0}else{h=1}f=c[10030]|0;cf(f|0,99928,(v=i,i=i+8|0,c[v>>2]=h,v)|0);f=c[814]|0;c[8030]=c[816];c[8031]=f;c[918]=1;g=1}else{a[4192]=1;f=c[3680+(((c[916]|0)+2|0)*12&-1)>>2]|0;if((f|0)==1){j=c[914]|0}else if((f|0)==3){j=(c[914]|0)*5&-1}else if((f|0)==2){j=(c[914]|0)*3&-1}else{j=1}f=c[10030]|0;cf(f|0,99928,(v=i,i=i+8|0,c[v>>2]=j,v)|0);f=c[814]|0;c[8030]=c[816];c[8031]=f;c[918]=1;g=1}}while(0);c[32120+(g<<3)>>2]=b;c[32124+(g<<3)>>2]=d;c[918]=g+1;c[816]=b;c[814]=d;i=e;return}function rJ(b){b=b|0;var d=0,e=0;ts();d=(b|0)<-2?-2:b;b=a[3648]|0?39:-2;if((d|0)<(b|0)){e=d;c[916]=e;return}e=(d|0)%(b|0)&-1;c[916]=e;return}function rK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=i;ts();cf(c[10030]|0,99752,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=d,v)|0);d=a[e]|0;if((d<<24>>24|0)==123|(d<<24>>24|0)==91){d=c[10030]|0;cf(d|0,99720,(v=i,i=i+8|0,c[v>>2]=e,v)|0);i=f;return}d=c[1050]|0;if((d|0)==1){b=c[1044]|0;if((b|0)==0){g=99688}else if((b|0)==2){g=99616}else if((b|0)==1){g=104096}else{g=0}b=c[10030]|0;cf(b|0,99536,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=e,v)|0);i=f;return}else if((d|0)==0){d=c[1044]|0;if((d|0)==0){h=104096}else if((d|0)==1){h=179864}else if((d|0)==2){h=104088}else{h=0}cf(c[10030]|0,99696,(v=i,i=i+16|0,c[v>>2]=h,c[v+8>>2]=e,v)|0);i=f;return}else{i=f;return}}function rL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0;e=i;ts();c[816]=a;c[814]=b;cf(c[10030]|0,100152,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=b,v)|0);if((d|0)<0){b=c[10030]|0;aI(100128,17,1,b|0);f=c[10030]|0;g=aI(100056,4,1,f|0)|0;i=e;return}b=(d|0)%30&-1;d=c[3288+(b*12&-1)>>2]|0;if((d|0)==3){a=c[914]|0;j=c[10030]|0;cf(j|0,99928,(v=i,i=i+8|0,c[v>>2]=a,v)|0);a=c[10030]|0;cf(a|0,99984,(v=i,i=i+8|0,h[v>>3]=1.0,v)|0)}else if((d|0)==2){cf(c[10030]|0,99928,(v=i,i=i+8|0,c[v>>2]=c[914],v)|0);cf(c[10030]|0,99984,(v=i,i=i+8|0,h[v>>3]=.5,v)|0)}else if((d|0)==1){cf(c[10030]|0,99928,(v=i,i=i+8|0,c[v>>2]=c[914],v)|0);cf(c[10030]|0,99984,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0)}else if((d|0)==0){cf(c[10030]|0,99928,(v=i,i=i+8|0,c[v>>2]=(c[914]|0)*3&-1,v)|0)}d=c[3292+(b*12&-1)>>2]|0;if((d|0)==3){k=~~(+(c[818]|0)*2.0)}else if((d|0)==2){k=~~(+(c[818]|0)*1.4142)}else if((d|0)==1){k=c[818]|0}else{k=0}cM[c[3296+(b*12&-1)>>2]&511](k);f=c[10030]|0;g=aI(100056,4,1,f|0)|0;i=e;return}function rM(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;s5(a,b,d,e,1,f);c[816]=d;c[814]=e;return}function rN(){var b=0;g[57768]=0.0;g[57770]=0.0;if(a[231184]|0){b=c[10030]|0;aF(10,b|0);a[231184]=0}c[57766]=-1;cp(c[10030]|0,0,0);aI(101352,47,1,c[10030]|0);a[231136]=0;return}function rO(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0,o=0.0,p=0.0;b=i;i=i+24|0;d=b|0;e=c[13898]|0;L25387:do{if((e|0)<(c[8272]|0)){f=c[1054]|0;L25389:do{if((a[f+(e*40&-1)|0]&1)!=0){g=c[f+(e*40&-1)+36>>2]|0;j=f+(e*40&-1)+32|0;k=c[10036]|0;l=0;while(1){if((l|0)>=(g|0)){break}if((a[k+((c[j>>2]|0)+l|0)|0]|0)==(a[l+103664|0]|0)){l=l+1|0}else{break L25389}}if((l|0)==1){break L25387}}}while(0);f=is(d)|0;j=c[f>>2]|0;if((j|0)==1){m=+(c[f+8>>2]|0)}else if((j|0)==2){m=+h[f+8>>3]}else if((j|0)==3){m=+uz(c[f+8>>2]|0,0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=~~m;if((f|0)<=0){break}c[818]=f}}while(0);e=c[13898]|0;L25404:do{if((e|0)<(c[8272]|0)){f=c[1054]|0;L25406:do{if((a[f+(e*40&-1)|0]&1)!=0){j=c[f+(e*40&-1)+36>>2]|0;k=f+(e*40&-1)+32|0;g=c[10036]|0;n=0;while(1){if((n|0)>=(j|0)){break}if((a[g+((c[k>>2]|0)+n|0)|0]|0)==(a[n+103664|0]|0)){n=n+1|0}else{break L25406}}if((n|0)==1){break L25404}}}while(0);f=is(d)|0;k=c[f>>2]|0;if((k|0)==2){o=+h[f+8>>3]}else if((k|0)==3){o=+uz(c[f+8>>2]|0,0)}else if((k|0)==1){o=+(c[f+8>>2]|0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}f=~~o;if((f|0)<=0){break}c[914]=f}}while(0);e=c[13898]|0;L25421:do{if((e|0)<(c[8272]|0)){f=c[1054]|0;L25423:do{if((a[f+(e*40&-1)|0]&1)!=0){k=c[f+(e*40&-1)+36>>2]|0;g=f+(e*40&-1)+32|0;j=c[10036]|0;l=0;while(1){if((l|0)>=(k|0)){break}if((a[j+((c[g>>2]|0)+l|0)|0]|0)==(a[l+103664|0]|0)){l=l+1|0}else{break L25423}}if((l|0)==1){break L25421}}}while(0);f=is(d)|0;g=c[f>>2]|0;if((g|0)==3){p=+uz(c[f+8>>2]|0,0)}else if((g|0)==1){p=+(c[f+8>>2]|0)}else if((g|0)==2){p=+h[f+8>>3]}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(p<=0.0){break}h[523]=p}}while(0);d=c[914]|0;p=+h[523];be(13048,99024,(v=i,i=i+24|0,c[v>>2]=c[818],c[v+8>>2]=d,h[v+16>>3]=p,v)|0);i=b;return}function rP(a){a=a|0;c[57794]=a;return 1}function rQ(a){a=a|0;c[56722]=a;return 1}function rR(a){a=a|0;c[56636]=a;return 1}function rS(a){a=a|0;c[58056]=(a|0)!=0&1;return 1}function rT(a,b){a=a|0;b=b|0;c[58246]=a;c[58244]=b;c[58254]=0;h[29126]=+(c[232736+((c[58242]|0)*24&-1)>>2]|0);return}function rU(){var b=0;if(a[231184]|0){b=c[10030]|0;aF(10,b|0);a[231184]=0}g[57768]=0.0;g[57770]=0.0;return}function rV(){var b=0;if(a[231184]|0){b=c[10030]|0;aF(10,b|0);a[231184]=0}aI(101400,32,1,c[10030]|0);return}function rW(){var b=0,d=0,e=0.0,f=0.0,j=0.0,k=0.0;b=i;aI(103264,160,1,c[10030]|0);aI(102784,449,1,c[10030]|0);aI(102488,280,1,c[10030]|0);aI(101736,747,1,c[10030]|0);aI(101616,83,1,c[10030]|0);if(!(a[231048]|0)){d=c[10030]|0;aI(101512,43,1,d|0)}e=+g[184];f=+g[44];j=e+ +g[178];k=f+ +g[38];cf(c[10030]|0,101448,(v=i,i=i+32|0,h[v>>3]=e,h[v+8>>3]=f,h[v+16>>3]=j,h[v+24>>3]=k,v)|0);i=b;return}function rX(b,d){b=b|0;d=d|0;var e=0;if(a[231184]|0){e=c[10030]|0;aF(10,e|0);a[231184]=0}g[57770]=+(b>>>0>>>0)/1.0e4;g[57768]=+(d>>>0>>>0)/1.0e4;return}function rY(b,d){b=b|0;d=d|0;var e=0,f=0,j=0,k=0.0,l=0.0;e=i;do{if(a[231184]|0){f=c[57792]|0;c[57792]=f+1;if((f|0)<=99){break}f=c[10030]|0;j=c[231144+((c[57766]|0)+2<<2)>>2]|0;k=+g[57770];l=+g[57768];cf(f|0,104992,(v=i,i=i+24|0,c[v>>2]=j,h[v+8>>3]=k,h[v+16>>3]=l,v)|0);c[57792]=1}else{a[231184]=1;j=c[10030]|0;f=c[231144+((c[57766]|0)+2<<2)>>2]|0;l=+g[57770];k=+g[57768];cf(j|0,104992,(v=i,i=i+24|0,c[v>>2]=f,h[v+8>>3]=l,h[v+16>>3]=k,v)|0);c[57792]=1}}while(0);k=+(b>>>0>>>0)/1.0e4;g[57770]=k;l=+(d>>>0>>>0)/1.0e4;g[57768]=l;cf(c[10030]|0,103688,(v=i,i=i+16|0,h[v>>3]=k,h[v+8>>3]=l,v)|0);i=e;return}function rZ(b){b=b|0;var d=0,e=0;if(a[231184]|0){d=c[10030]|0;aF(10,d|0);a[231184]=0}if((b|0)>3){e=(b|0)%4&-1}else{e=b}c[57766]=(e|0)<-2?-2:e;return}function r_(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0.0;g=i;i=i+8|0;j=g|0;if(a[231184]|0){k=c[10030]|0;aF(10,k|0);a[231184]=0}if((a[f]|0)==0){i=g;return}aI(104112,5,1,c[10030]|0);k=c[57794]|0;if((k|0)==0){l=c[10030]|0;aI(104096,3,1,l|0)}else if((k|0)==2){aI(104088,3,1,c[10030]|0)}if((c[58056]|0)==1){k=c[10030]|0;aI(104040,3,1,k|0)}cf(c[10030]|0,104e3,(v=i,i=i+16|0,h[v>>3]=+(d>>>0>>>0)/1.0e4,h[v+8>>3]=+(e>>>0>>>0)/1.0e4,v)|0);if(a[231056]|0){e=c[10030]|0;cf(e|0,103976,(v=i,i=i+8|0,c[v>>2]=f,v)|0);i=g;return}uz(f,j);e=c[j>>2]|0;if((e|0)==(f|0)){uB(231192,f|0)}else{d=e-f|0;e=d+1|0;uF(231192,f|0,e|0);if((uA(f|0)|0)>>>0>=e>>>0){a[231192+((e|0)==0?0:d)|0]=0}d=a8(231192,101)|0;if((d|0)==0){e=a8(231192,69)|0;if((e|0)!=0){m=e;n=19097}}else{m=d;n=19097}do{if((n|0)==19097){a[m]=0;o=+uz(231192,0);d=bW(m+1|0)|0;if(o==0.0){b[115596]=48;break}if(o==1.0){be(231192,103944,(v=i,i=i+8|0,c[v>>2]=d,v)|0);break}e=~~o;f=(d|0)==1;if(o==+(e|0)){if(f){be(231192,103848,(v=i,i=i+8|0,c[v>>2]=e,v)|0);break}else{be(231192,103800,(v=i,i=i+16|0,c[v>>2]=e,c[v+8>>2]=d,v)|0);break}}else{if(f){be(231192,103760,(v=i,i=i+8|0,h[v>>3]=o,v)|0);break}else{be(231192,103728,(v=i,i=i+16|0,h[v>>3]=o,c[v+8>>2]=d,v)|0);break}}}}while(0);m=c[j>>2]|0;uC(231192,m|0)}cf(c[10030]|0,103976,(v=i,i=i+8|0,c[v>>2]=231192,v)|0);i=g;return}function r$(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,j=0,k=0.0,l=0.0;f=i;if(a[231184]|0){j=c[10030]|0;aF(10,j|0);a[231184]=0}k=+(b>>>0>>>0)/1.0e4;g[57770]=k;l=+(d>>>0>>>0)/1.0e4;g[57768]=l;d=c[10030]|0;if((e|0)<0){cf(d|0,105032,(v=i,i=i+24|0,h[v>>3]=k,h[v+8>>3]=l,h[v+16>>3]=25.0e-5,v)|0);i=f;return}else{b=c[231088+(((e|0)%12&-1)<<2)>>2]|0;cf(d|0,104992,(v=i,i=i+24|0,c[v>>2]=b,h[v+8>>3]=k,h[v+16>>3]=l,v)|0);i=f;return}}function r0(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var j=0,k=0.0,l=0.0;j=i;k=+(d>>>0>>>0)/1.0e4;l=+(e>>>0>>>0)/1.0e4;cf(c[10030]|0,105176,(v=i,i=i+40|0,c[v>>2]=(f|0)!=0?105128:179864,h[v+8>>3]=+(a>>>0>>>0)/1.0e4,h[v+16>>3]=+(b>>>0>>>0)/1.0e4,h[v+24>>3]=k,h[v+32>>3]=l,v)|0);g[57770]=k;g[57768]=l;i=j;return}function r1(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0.0;d=i;if((b|0)==0){e=128;i=d;return e|0}L25532:do{if(!(a[231136]|0)){a[231136]=1;f=c[5163]|0;if((f|0)==103){g=c[5169]|0;if((g|0)>0){j=0;k=g}else{break}while(1){cf(c[10030]|0,105632,(v=i,i=i+16|0,c[v>>2]=j,h[v+8>>3]=+(~~(+(j|0)/+(k-1|0)*1.0e3)|0)*.001,v)|0);j=j+1|0;k=c[5169]|0;if((j|0)>=(k|0)){break L25532}}}else if((f|0)!=114){break}if((c[5169]|0)<=0){break}g=b+32|0;l=0;do{m=c[g>>2]|0;n=+(~~(+h[m+(l*24&-1)>>3]*1.0e3)|0)*.001;o=+(~~(+h[m+(l*24&-1)+8>>3]*1.0e3)|0)*.001;p=+(~~(+h[m+(l*24&-1)+16>>3]*1.0e3)|0)*.001;cf(c[10030]|0,105552,(v=i,i=i+32|0,c[v>>2]=l,h[v+8>>3]=n,h[v+16>>3]=o,h[v+24>>3]=p,v)|0);l=l+1|0;}while((l|0)<(c[5169]|0))}}while(0);aI(105272,85,1,c[10030]|0);e=0;i=d;return e|0}function r2(b){b=b|0;var d=0.0,e=0;d=+h[b+8>>3];if((c[b>>2]|0)!=5){return}if(d>0.0){e=~~(d*+(c[5169]|0))}else{e=0}if(!(a[231136]|0)){b=c[m>>2]|0;aI(105680,35,1,b|0)}c[58054]=(e|0)>127?127:e;return}function r3(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0.0;d=i;cf(c[10030]|0,105856,(v=i,i=i+8|0,c[v>>2]=c[58054],v)|0);if((a|0)>0){e=0}else{f=c[10030]|0;g=aF(10,f|0)|0;i=d;return}do{if(((e|0)%8&-1|0)==7){j=c[10030]|0;aF(10,j|0)}k=+(c[b+(e*12&-1)+4>>2]|0)/1.0e4;cf(c[10030]|0,105760,(v=i,i=i+16|0,h[v>>3]=+(c[b+(e*12&-1)>>2]|0)/1.0e4,h[v+8>>3]=k,v)|0);e=e+1|0;}while((e|0)<(a|0));f=c[10030]|0;g=aF(10,f|0)|0;i=d;return}function r4(){var b=0;c[56608]=0;c[56610]=0;if(a[226552]|0){b=c[10030]|0;aF(10,b|0);a[226552]=0}c[56606]=-1;aI(106128,39,1,c[10030]|0);return}function r5(){var b=0;if(a[226552]|0){b=c[10030]|0;aF(10,b|0);a[226552]=0}c[56608]=0;c[56610]=0;return}function r6(){var b=0;if(a[226552]|0){b=c[10030]|0;aF(10,b|0);a[226552]=0}aI(106248,14,1,c[10030]|0);return}function r7(){var a=0;a=i;cf(c[10030]|0,226560,(v=i,i=i+16|0,h[v>>3]=.24089999496936798,c[v+8>>2]=3,v)|0);c[56632]=0;c[56606]=0;i=a;return}function r8(b,d){b=b|0;d=d|0;var e=0;if(a[226552]|0){e=c[10030]|0;aF(10,e|0);a[226552]=0}c[56610]=b;c[56608]=d;return}function r9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;do{if(a[226552]|0){f=c[56630]|0;c[56630]=f+1;if((f|0)<=4){break}f=c[10030]|0;aI(106424,8,1,f|0);c[56630]=1}else{a[226552]=1;f=c[56606]|0;g=c[56632]|0;if((f|0)!=(g|0)){h=c[226496+(f+2<<2)>>2]|0;if((h|0)==(c[226496+(g+2<<2)>>2]|0)){j=f}else{f=c[10030]|0;cf(f|0,106544,(v=i,i=i+8|0,c[v>>2]=h,v)|0);j=c[56606]|0}c[56632]=j}h=c[10030]|0;f=c[56610]|0;g=c[56608]|0;cf(h|0,106504,(v=i,i=i+16|0,c[v>>2]=f,c[v+8>>2]=g,v)|0);c[56630]=1}}while(0);cf(c[10030]|0,106360,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=d,v)|0);c[56610]=b;c[56608]=d;i=e;return}function sa(b){b=b|0;var d=0,e=0;if(a[226552]|0){d=c[10030]|0;aF(10,d|0);a[226552]=0}if((b|0)>2){e=(b|0)%3&-1}else{e=b}c[56606]=(e|0)>-2?e:-2;return}function sb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;if(a[226552]|0){g=c[10030]|0;aF(10,g|0);a[226552]=0}cf(c[10030]|0,106848,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=d,v)|0);d=(c[56722]|0)==0?104:118;b=c[56636]|0;do{if((c[56634]|0)!=(b|0)){c[56634]=b;if((b|0)==1){g=c[10030]|0;aI(108272,17,1,g|0);break}else if((b|0)==2){aI(106656,17,1,c[10030]|0);break}else if((b|0)==0){aI(106736,17,1,c[10030]|0);break}else{break}}}while(0);cf(c[10030]|0,106624,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=e,v)|0);i=f;return}function sc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=i;if(a[226552]|0){g=c[10030]|0;aF(10,g|0);a[226552]=0}c[56610]=b;c[56608]=d;cf(c[10030]|0,108368,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=d,v)|0);if((c[56634]|0)!=1){d=c[10030]|0;aI(108272,17,1,d|0);c[56634]=1}if((e|0)<0){h=108192}else{h=c[226448+(((e|0)%12&-1)<<2)>>2]|0}cf(c[10030]|0,154696,(v=i,i=i+8|0,c[v>>2]=h,v)|0);i=f;return}function sd(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=i;cf(c[10030]|0,108416,(v=i,i=i+40|0,c[v>>2]=a,c[v+8>>2]=b,c[v+16>>2]=(f|0)==0?108:97,c[v+24>>2]=d,c[v+32>>2]=e,v)|0);c[56610]=d;c[56608]=e;i=g;return}function se(){c[58256]=0;a[233032]=0;aI(113088,165,1,c[10030]|0);aI(112768,208,1,c[10030]|0);aI(111168,1548,1,c[10030]|0);aI(110792,238,1,c[10030]|0);aI(109768,808,1,c[10030]|0);aI(109360,328,1,c[10030]|0);aI(108752,519,1,c[10030]|0);aI(108504,212,1,c[10030]|0);return}function sf(){aI(122176,5,1,c[10030]|0);return}function sg(){aI(113352,9,1,c[10030]|0);return}function sh(){var b=0,d=0,e=0;b=i;d=c[3524]|0;cf(c[10030]|0,113672,(v=i,i=i+24|0,c[v>>2]=c[58256],h[v+8>>3]=5.0,h[v+16>>3]=3.0,v)|0);c[58256]=(c[58256]|0)+1;e=c[d+12>>2]|0;cf(c[10030]|0,113504,(v=i,i=i+16|0,c[v>>2]=c[d+8>>2],c[v+8>>2]=e,v)|0);a[232720]=0;i=b;return}function si(a){a=a|0;c[58248]=a;return 1}function sj(b){b=b|0;a[233032]=(b|0)>0;return 1}function sk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,w=0,x=0,y=0.0,z=0.0,A=0,B=0,C=0,D=0.0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0,M=0;d=i;e=c[58246]|0;f=c[58244]|0;g=(e|0)==(a|0)&(f|0)==(b|0);if((c[58250]|0)!=0){j=c[10030]|0;if(g){cf(j|0,113832,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=b,v)|0);c[58246]=a;c[58244]=b;i=d;return}else{cf(j|0,113728,(v=i,i=i+32|0,c[v>>2]=e,c[v+8>>2]=f,c[v+16>>2]=a,c[v+24>>2]=b,v)|0);c[58246]=a;c[58244]=b;i=d;return}}if(g){if((c[58254]&1|0)!=0){c[58246]=a;c[58244]=b;i=d;return}g=c[10030]|0;cf(g|0,113832,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=b,v)|0);c[58246]=a;c[58244]=b;i=d;return}k=+(e>>>0>>>0);l=+(f>>>0>>>0);m=+(a>>>0>>>0);n=m-k;o=+(b>>>0>>>0);p=o-l;q=+Q(+(n*n+p*p));r=n/q;n=p/q;p=+h[29126];g=c[58254]|0;if(p<q){s=l;t=k;u=q;q=p;j=g;w=e;x=f;while(1){y=t+r*q;z=s+n*q;A=~~+O(+(y+.5));B=~~+O(+(z+.5));if((j&1|0)==0){C=c[10030]|0;cf(C|0,113728,(v=i,i=i+32|0,c[v>>2]=w,c[v+8>>2]=x,c[v+16>>2]=A,c[v+24>>2]=B,v)|0);D=+h[29126];E=c[58254]|0}else{D=q;E=j}c[58246]=A;c[58244]=B;F=u-D;C=E+1&3;c[58254]=C;G=+(c[232736+((c[58242]|0)*24&-1)+(C<<2)>>2]|0);h[29126]=G;if(G<F){s=z;t=y;u=F;q=G;j=C;w=A;x=B}else{H=z;I=y;J=G;K=A;L=B;M=C;break}}}else{H=l;I=k;J=p;K=e;L=f;M=g}p=m-I;I=o-H;h[29126]=J- +Q(+(I*I+p*p));if((M&1|0)!=0){c[58246]=a;c[58244]=b;i=d;return}M=c[10030]|0;if((K|0)==(a|0)&(L|0)==(b|0)){cf(M|0,113832,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=b,v)|0);c[58246]=a;c[58244]=b;i=d;return}else{cf(M|0,113728,(v=i,i=i+32|0,c[v>>2]=K,c[v+8>>2]=L,c[v+16>>2]=a,c[v+24>>2]=b,v)|0);c[58246]=a;c[58244]=b;i=d;return}}function sl(b){b=b|0;var d=0,e=0,f=0.0,j=0.0;d=i;if((b|0)>7){e=(b|0)%8&-1}else{e=b}b=e+2|0;e=(b|0)<0?0:b;f=+g[232732+(e*24&-1)>>2];if(!(f==+g[232732+((c[58242]|0)*24&-1)>>2]&a[232720])){b=c[10030]|0;j=f;cf(b|0,113976,(v=i,i=i+8|0,h[v>>3]=j,v)|0);a[232720]=1}c[58242]=e;c[58254]=0;h[29126]=+(c[232736+(e*24&-1)>>2]|0);c[58250]=c[232728+(e*24&-1)>>2];i=d;return}function sm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;if((e|0)==0){i=f;return}if((a[e]|0)==0){i=f;return}g=bP(e|0)|0;e=a[g]|0;L25673:do{if(e<<24>>24!=0){h=0;j=e;while(1){if(j<<24>>24==34){a[g+h|0]=39}k=h+1|0;if(k>>>0>=(uA(g|0)|0)>>>0){break L25673}h=k;j=a[g+k|0]|0}}}while(0);e=c[58248]|0;if((e|0)==2){l=3}else if((e|0)==0){l=1}else if((e|0)==1){l=2}else{l=0}e=a[233032]|0?90:0;cf(c[10030]|0,114256,(v=i,i=i+40|0,c[v>>2]=g,c[v+8>>2]=b,c[v+16>>2]=d,c[v+24>>2]=e,c[v+32>>2]=l,v)|0);uu(g);i=f;return}function sn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=i;c[58246]=a;c[58244]=b;c[58254]=0;h[29126]=+(c[232736+((c[58242]|0)*24&-1)>>2]|0);sk(d,e);if((f|0)==0){i=g;return}cf(c[10030]|0,114408,(v=i,i=i+32|0,c[v>>2]=d-a,c[v+8>>2]=e-b,c[v+16>>2]=d,c[v+24>>2]=e,v)|0);i=g;return}function so(){var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0;b=i;i=i+56|0;d=b|0;e=b+24|0;f=b+48|0;g=c[13898]|0;if((g|0)!=2){a[232616]=0;a[232304]=0;c[58074]=1;a[232648]=0;a[232640]=0;c[58078]=0;h[29067]=10.0;h[29036]=1.0;c[58080]=-1;a[232544]=a[116880]|0;a[232545|0]=a[116881|0]|0;a[232546|0]=a[116882|0]|0;a[232547|0]=a[116883|0]|0;a[232548|0]=a[116884|0]|0;a[232549|0]=a[116885|0]|0}j=c[8272]|0;L25696:do{if((g|0)<(j|0)){k=d|0;l=d+8|0;m=g;n=j;L25698:while(1){o=c[1054]|0;p=(a[o+(m*40&-1)|0]&1)==0;L25700:do{if(!p){q=c[o+(m*40&-1)+36>>2]|0;r=o+(m*40&-1)+32|0;s=c[10036]|0;t=0;while(1){if((t|0)>=(q|0)){break}if((a[s+((c[r>>2]|0)+t|0)|0]|0)==(a[t+103664|0]|0)){t=t+1|0}else{break L25700}}if((t|0)==1){break L25696}}}while(0);r=c[58086]|0;L25707:do{if((r|0)==0){u=232344}else{s=c[o+(m*40&-1)+36>>2]|0;q=c[o+(m*40&-1)+32>>2]|0;w=(s|0)>0;x=c[10036]|0;y=232344;z=r;while(1){L25711:do{if(!p){if(w){A=0;B=0;C=q;while(1){D=a[z+A|0]|0;if(D<<24>>24==(a[x+(A+C|0)|0]|0)){E=C;F=B}else{if(D<<24>>24!=36){break L25711}E=C-1|0;F=1}G=A+1|0;if((G|0)<(F+s|0)){A=G;B=F;C=E}else{break}}if((F|0)==0){H=G}else{u=y;break L25707}}else{H=0}C=a[z+H|0]|0;if((C<<24>>24|0)==36|(C<<24>>24|0)==0){u=y;break L25707}}}while(0);C=y+8|0;B=c[C>>2]|0;if((B|0)==0){u=C;break}else{y=C;z=B}}}}while(0);p=c[u+4>>2]|0;L25724:do{if((p|0)==14){r=m+1|0;c[13898]=r;if((r|0)>=(n|0)){break}L25727:do{if((a[o+(r*40&-1)|0]&1)==0){I=c[10036]|0;J=o+(r*40&-1)+32|0}else{z=c[o+(r*40&-1)+36>>2]|0;y=o+(r*40&-1)+32|0;s=c[10036]|0;x=0;while(1){if((x|0)>=(z|0)){break}if((a[s+((c[y>>2]|0)+x|0)|0]|0)==(a[x+103664|0]|0)){x=x+1|0}else{I=s;J=y;break L25727}}if((x|0)==1){break L25724}else{I=s;J=y}}}while(0);if((ca(I+(c[J>>2]|0)|0,21e4,(v=i,i=i+8|0,c[v>>2]=f,v)|0)|0)==1){c[58080]=c[f>>2]}c[13898]=(c[13898]|0)+1}else if((p|0)==4){c[58074]=0;a[232544]=a[116696]|0;a[232545|0]=a[116697|0]|0;a[232546|0]=a[116698|0]|0;a[232547|0]=a[116699|0]|0;a[232548|0]=a[116700|0]|0;a[232549|0]=a[116701|0]|0;a[232550|0]=a[116702|0]|0;c[13898]=m+1}else if((p|0)==0){a[232616]=0;c[13898]=m+1}else if((p|0)==9){c[58074]=2;c[58078]=1;c[13898]=m+1}else if((p|0)==3){a[232304]=0;c[13898]=m+1}else if((p|0)==1){a[232616]=1;c[13898]=m+1}else if((p|0)==8){c[58074]=2;c[58078]=2;c[13898]=m+1}else if((p|0)==7){c[58074]=2;a[232648]=1;c[13898]=m+1}else if((p|0)==15){c[58080]=-1;c[13898]=m+1}else if((p|0)==2){a[232304]=1;c[13898]=m+1}else if((p|0)==5){c[58074]=1;c[13898]=m+1}else if((p|0)==6){c[58074]=2;c[13898]=m+1}else if((p|0)==16){r=m+1|0;c[13898]=r;if((r|0)>=(n|0)){break}L25751:do{if((a[o+(r*40&-1)|0]&1)!=0){z=c[o+(r*40&-1)+36>>2]|0;q=o+(r*40&-1)+32|0;w=c[10036]|0;t=0;while(1){if((t|0)>=(z|0)){break}if((a[w+((c[q>>2]|0)+t|0)|0]|0)==(a[t+103664|0]|0)){t=t+1|0}else{break L25751}}if((t|0)==1){break L25724}}}while(0);r=is(e)|0;q=c[r>>2]|0;if((q|0)==3){K=+uz(c[r+8>>2]|0,0)}else if((q|0)==1){K=+(c[r+8>>2]|0)}else if((q|0)==2){K=+h[r+8>>3]}else{L=19304;break L25698}h[29036]=K}else if((p|0)==10){c[58078]=0;c[13898]=m+1}else if((p|0)==11){c[58074]=2;a[232640]=1;c[13898]=m+1}else if((p|0)==12){r=m+1|0;c[13898]=r;M=r;L=19307}else{M=m;L=19307}}while(0);L25766:do{if((L|0)==19307){L=0;L25768:do{if((M|0)<(n|0)){L25770:do{if((a[o+(M*40&-1)|0]&1)!=0){r=c[o+(M*40&-1)+36>>2]|0;q=o+(M*40&-1)+32|0;w=c[10036]|0;z=0;while(1){if((z|0)>=(r|0)){break}if((a[w+((c[q>>2]|0)+z|0)|0]|0)==(a[z+103664|0]|0)){z=z+1|0}else{break L25770}}if((z|0)==1){N=M;break L25768}}}while(0);a[14176]=1;is(d);a[14176]=0;if((c[k>>2]|0)!=3){c[13898]=M;N=M;break}t=c[l>>2]|0;if((t|0)==0){N=c[13898]|0;break}q=bk(t|0,148464)|0;if((q|0)>0){uF(232544,t|0,51);a[q+232544|0]=0}if((a[t+q|0]|0)==44){w=t+(q+1|0)|0;ca(w|0,148448,(v=i,i=i+8|0,c[v>>2]=232536,v)|0)}uu(t);break L25766}else{N=M}}while(0);if((p|0)==12){L=19324;break L25698}if((N|0)>=(c[8272]|0)){break}t=c[1054]|0;L25792:do{if((a[t+(N*40&-1)|0]&1)!=0){w=c[t+(N*40&-1)+36>>2]|0;q=t+(N*40&-1)+32|0;r=c[10036]|0;y=0;while(1){if((y|0)>=(w|0)){break}if((a[r+((c[q>>2]|0)+y|0)|0]|0)==(a[y+103664|0]|0)){y=y+1|0}else{break L25792}}if((y|0)==1){break L25766}}}while(0);t=is(e)|0;q=c[t>>2]|0;if((q|0)==1){O=+(c[t+8>>2]|0)}else if((q|0)==2){O=+h[t+8>>3]}else if((q|0)==3){O=+uz(c[t+8>>2]|0,0)}else{L=19335;break L25698}h[29067]=O;c[13898]=(c[13898]|0)+1}}while(0);m=c[13898]|0;n=c[8272]|0;if((m|0)>=(n|0)){break L25696}}if((L|0)==19304){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((L|0)==19324){uf(N,116592,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((L|0)==19335){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);O=+h[29067];do{if(O<5.0){h[29067]=5.0;P=12.0e3}else{if(O>99.99){h[29067]=99.99;P=239976.0;break}else{P=O*2400.0;break}}}while(0);c[(c[3524]|0)+16>>2]=~~(P*+h[29036]*11.0/720.0);P=+h[29067]*2400.0*+h[29036];if((c[58074]|0)==0){c[(c[3524]|0)+20>>2]=~~(P*6.0/720.0+.5)}else{c[(c[3524]|0)+20>>2]=~~(P*5.3/720.0+.5)}L=c[58078]|0;N=a[232616]|0?116440:116408;e=a[232304]|0?131504:131584;M=c[58074]|0;d=(M|0)==0;if((L|0)==0){if(d){Q=136208}else{Q=(M|0)==2?116352:179864}f=a[232648]|0?116296:179864;J=a[232640]|0?116192:179864;P=+h[29036];O=+h[29067];I=c[58080]|0;u=(I|0)>-1?179864:136208;be(13048,116512,(v=i,i=i+80|0,c[v>>2]=N,c[v+8>>2]=e,c[v+16>>2]=Q,c[v+24>>2]=f,c[v+32>>2]=J,h[v+40>>3]=P,c[v+48>>2]=232544,h[v+56>>3]=O,c[v+64>>2]=u,c[v+72>>2]=I,v)|0);i=b;return}else{if(d){R=136208}else{R=(M|0)==2?116352:179864}M=a[232648]|0?116296:179864;d=a[232640]|0?116192:179864;O=+h[29036];I=(L|0)==1?115960:115816;L=c[58080]|0;u=(L|0)>-1?179864:136208;be(13048,116072,(v=i,i=i+72|0,c[v>>2]=N,c[v+8>>2]=e,c[v+16>>2]=R,c[v+24>>2]=M,c[v+32>>2]=d,h[v+40>>3]=O,c[v+48>>2]=I,c[v+56>>2]=u,c[v+64>>2]=L,v)|0);i=b;return}}function sp(a){a=a|0;c[58158]=a;return 1}function sq(a){a=a|0;c[58130]=a;return 1}function sr(a){a=a|0;return 0}function ss(){return}function st(){var b=0,d=0,e=0,f=0,g=0.0,j=0,k=0;b=i;i=i+8|0;d=b|0;cG(d|0);c[58082]=0;c[58084]=0;e=c[10030]|0;f=bg(aN(d|0)|0)|0;cf(e|0,122032,(v=i,i=i+8|0,c[v>>2]=f,v)|0);f=c[58080]|0;if((f|0)>-1){e=c[10030]|0;cf(e|0,121880,(v=i,i=i+8|0,c[v>>2]=f,v)|0)}if((c[58074]|0)==2){f=c[10030]|0;aI(121552,247,1,f|0);f=c[10030]|0;if(a[232648]|0){aI(121472,33,1,f|0)}else{aI(121408,24,1,f|0)}f=c[58078]|0;if((f|0)==2){e=c[10030]|0;aI(120992,174,1,e|0)}else if((f|0)==1){aI(121240,124,1,c[10030]|0)}if(a[232640]|0){f=c[10030]|0;aI(120888,54,1,f|0)}f=c[10030]|0;aI(120824,31,1,f|0)}aI(120464,227,1,c[10030]|0);cf(c[10030]|0,120328,(v=i,i=i+8|0,h[v>>3]=+h[29036],v)|0);aI(119968,246,1,c[10030]|0);f=c[58074]|0;if((f|0)==0){e=c[10030]|0;g=+h[29067];cf(e|0,119792,(v=i,i=i+16|0,c[v>>2]=232544,h[v+8>>3]=g,v)|0)}else if((f|0)!=2){aI(119656,82,1,c[10030]|0);g=+h[29067];cf(c[10030]|0,119576,(v=i,i=i+16|0,c[v>>2]=232544,h[v+8>>3]=g,v)|0)}aI(119448,91,1,c[10030]|0);f=c[10030]|0;if(a[232616]|0){aI(119328,18,1,f|0)}else{aI(119248,19,1,f|0)}f=c[10030]|0;if(a[232304]|0){aI(119168,20,1,f|0);j=c[10030]|0;k=aI(117096,1968,1,j|0)|0;i=b;return}else{aI(119128,19,1,f|0);j=c[10030]|0;k=aI(117096,1968,1,j|0)|0;i=b;return}}function su(){var a=0,b=0;if((c[58074]|0)!=2){a=c[10030]|0;b=aI(122176,5,1,a|0)|0;return}aI(122728,10,1,c[10030]|0);aI(122648,12,1,c[10030]|0);aI(122520,16,1,c[10030]|0);aI(122424,5,1,c[10030]|0);aI(122312,10,1,c[10030]|0);a=c[10030]|0;b=aI(122176,5,1,a|0)|0;return}function sv(){var b=0;if(a[232528]|0){a[232528]=0;b=c[10030]|0;aI(125976,2,1,b|0)}aI(122792,8,1,c[10030]|0);return}function sw(){var b=0,d=0,e=0.0;b=i;c[58126]=-2;h[29062]=1.0;h[29061]=+h[3817];cf(c[10030]|0,123376,(v=i,i=i+24|0,c[v>>2]=c[58156],h[v+8>>3]=5.0,h[v+16>>3]=3.0,v)|0);d=c[3524]|0;e=+((c[d+12>>2]|0)>>>0>>>0)/10.0;cf(c[10030]|0,123080,(v=i,i=i+16|0,h[v>>3]=+((c[d+8>>2]|0)>>>0>>>0)/10.0,h[v+8>>3]=e,v)|0);cf(c[10030]|0,122896,(v=i,i=i+8|0,h[v>>3]=+h[3817],v)|0);c[58156]=(c[58156]|0)+1;a[232608]=0;i=b;return}function sx(b,d){b=b|0;d=d|0;var e=0;if((c[58084]|0)==(b|0)&(c[58082]|0)==(d|0)){return}if(a[232528]|0){a[232528]=0;e=c[10030]|0;aI(125976,2,1,e|0)}c[58084]=b;c[58082]=d;return}function sy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0.0,l=0.0;e=i;f=c[58084]|0;g=c[58082]|0;if((f|0)==(b|0)&(g|0)==(d|0)){i=e;return}do{if(a[232528]|0){j=c[58128]|0;c[58128]=j+1;if((j|0)<=4){break}j=c[10030]|0;aF(10,j|0);c[58128]=1}else{a[232528]=1;j=c[10030]|0;k=+(f|0)/10.0;l=+(g|0)/10.0;cf(j|0,123728,(v=i,i=i+16|0,h[v>>3]=k,h[v+8>>3]=l,v)|0);c[58128]=2}}while(0);c[58084]=b;c[58082]=d;cf(c[10030]|0,123552,(v=i,i=i+16|0,h[v>>3]=+(b|0)/10.0,h[v+8>>3]=+(d|0)/10.0,v)|0);i=e;return}function sz(b){b=b|0;var d=0,e=0;d=i;if((b|0)>7){e=(b|0)%8&-1}else{e=b}if(a[232528]|0){a[232528]=0;b=c[10030]|0;aI(125976,2,1,b|0)}do{if(a[232608]|0){c[58126]=e+1;a[232608]=0}else{if((c[58126]|0)!=(e|0)){break}i=d;return}}while(0);cf(c[10030]|0,123808,(v=i,i=i+8|0,c[v>>2]=e,v)|0);c[58126]=e;i=d;return}function sA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0.0;f=i;if((e|0)==0){i=f;return}if((a[e]|0)==0){i=f;return}g=bP(e|0)|0;if(a[232528]|0){a[232528]=0;e=c[10030]|0;aI(125976,2,1,e|0)}e=c[58130]|0;if((e|0)==0){j=1}else if((e|0)==1){j=2}else if((e|0)==2){j=3}else{j=0}e=c[58074]|0;do{if((e|0)==0){k=a[g]|0;L25932:do{if(k<<24>>24!=0){l=0;m=k;while(1){if(m<<24>>24==34){a[g+l|0]=39}n=l+1|0;if(n>>>0>=(uA(g|0)|0)>>>0){break L25932}l=n;m=a[g+n|0]|0}}}while(0);k=c[10030]|0;if(a[232600]|0){o=+h[29067];p=+(b>>>0>>>0)/10.0;q=+(d>>>0>>>0)/10.0;m=c[58158]|0;cf(k|0,124232,(v=i,i=i+56|0,c[v>>2]=g,c[v+8>>2]=232544,h[v+16>>3]=o,h[v+24>>3]=p,h[v+32>>3]=q,c[v+40>>2]=m,c[v+48>>2]=j,v)|0);break}else{q=+(b>>>0>>>0)/10.0;p=+(d>>>0>>>0)/10.0;m=c[58158]|0;cf(k|0,124152,(v=i,i=i+40|0,c[v>>2]=g,h[v+8>>3]=q,h[v+16>>3]=p,c[v+24>>2]=m,c[v+32>>2]=j,v)|0);break}}else{if(!(a[232600]|0)){m=c[10030]|0;p=+(b>>>0>>>0)/10.0;q=+(d>>>0>>>0)/10.0;k=c[58158]|0;cf(m|0,123912,(v=i,i=i+40|0,c[v>>2]=g,h[v+8>>3]=p,h[v+16>>3]=q,c[v+24>>2]=k,c[v+32>>2]=j,v)|0);break}k=c[10030]|0;if((e|0)==2){q=+(b>>>0>>>0)/10.0;p=+(d>>>0>>>0)/10.0;m=c[58158]|0;cf(k|0,123912,(v=i,i=i+40|0,c[v>>2]=g,h[v+8>>3]=q,h[v+16>>3]=p,c[v+24>>2]=m,c[v+32>>2]=j,v)|0);break}else{p=+h[29067];q=+(b>>>0>>>0)/10.0;o=+(d>>>0>>>0)/10.0;m=c[58158]|0;cf(k|0,123992,(v=i,i=i+56|0,c[v>>2]=232544,h[v+8>>3]=p,c[v+16>>2]=g,h[v+24>>3]=q,h[v+32>>3]=o,c[v+40>>2]=m,c[v+48>>2]=j,v)|0);break}}}while(0);uu(g);i=f;return}function sB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0;f=i;if(a[232528]|0){a[232528]=0;g=c[10030]|0;aI(125976,2,1,g|0)}if((e|0)>9){j=(e|0)%10&-1}else{j=e}cf(c[10030]|0,124360,(v=i,i=i+24|0,c[v>>2]=j,h[v+8>>3]=+(b>>>0>>>0)/10.0,h[v+16>>3]=+(d>>>0>>>0)/10.0,v)|0);i=f;return}function sC(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0;j=i;if(!((c[58084]|0)==(b|0)&(c[58082]|0)==(d|0))){if(a[232528]|0){a[232528]=0;k=c[10030]|0;aI(125976,2,1,k|0)}c[58084]=b;c[58082]=d}if((g|0)!=0){k=c[10030]|0;l=(g|0)==1?124720:124632;m=+(b>>>0>>>0)/10.0;n=+(d>>>0>>>0)/10.0;o=+(e>>>0>>>0)/10.0;p=+(f>>>0>>>0)/10.0;cf(k|0,124776,(v=i,i=i+40|0,c[v>>2]=l,h[v+8>>3]=m,h[v+16>>3]=n,h[v+24>>3]=o,h[v+32>>3]=p,v)|0);c[58084]=e;c[58082]=f;i=j;return}if((b|0)==(e|0)&(d|0)==(f|0)){c[58084]=e;c[58082]=f;i=j;return}cf(c[10030]|0,124504,(v=i,i=i+32|0,h[v>>3]=+(b>>>0>>>0)/10.0,h[v+8>>3]=+(d>>>0>>>0)/10.0,h[v+16>>3]=+(e>>>0>>>0)/10.0,h[v+24>>3]=+(f>>>0>>>0)/10.0,v)|0);c[58084]=e;c[58082]=f;i=j;return}function sD(b){b=b|0;var d=0,e=0,f=0,g=0,j=0.0;d=i;do{if((a[b]|0)==0){e=0}else{f=bk(b|0,148464)|0;if(f>>>0<51){uF(232544,b|0,51)}g=b+(f+1|0)|0;ca(g|0,148448,(v=i,i=i+8|0,c[v>>2]=232536,v)|0);j=+h[29067];if(j<5.0){h[29067]=5.0;e=1;break}if(j<100.0){e=1;break}h[29067]=99.99;e=1}}while(0);a[232600]=e;i=d;return 1}function sE(b){b=+b;var d=0,e=0.0,f=0;d=i;e=b<0.0?1.0:b;if(+h[29061]==e){i=d;return}if(a[232528]|0){a[232528]=0;f=c[10030]|0;aI(125976,2,1,f|0)}cf(c[10030]|0,124896,(v=i,i=i+8|0,h[v>>3]=e,v)|0);h[29061]=e;i=d;return}function sF(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0;j=i;k=b>>4;l=b&15;if(a[232528]|0){a[232528]=0;b=c[10030]|0;aI(125976,2,1,b|0)}if((l|0)==0){b=c[10030]|0;m=+(d>>>0>>>0)/10.0;n=+(e>>>0>>>0)/10.0;o=+((f+d|0)>>>0>>>0)/10.0;p=+((g+e|0)>>>0>>>0)/10.0;cf(b|0,125216,(v=i,i=i+64|0,h[v>>3]=m,h[v+8>>3]=n,h[v+16>>3]=o,h[v+24>>3]=n,h[v+32>>3]=o,h[v+40>>3]=p,h[v+48>>3]=m,h[v+56>>3]=p,v)|0);i=j;return}else if((l|0)==2|(l|0)==5){q=k*12&-1}else{q=k}if((q|0)<100){p=+(100-q|0)*.01;q=c[10030]|0;m=1.0-p;cf(q|0,126664,(v=i,i=i+16|0,h[v>>3]=m,h[v+8>>3]=p,v)|0);a[232608]=1}else{q=c[10030]|0;aI(126536,25,1,q|0)}p=+(d>>>0>>>0)/10.0;m=+(e>>>0>>>0)/10.0;o=+((f+d|0)>>>0>>>0)/10.0;n=+((g+e|0)>>>0>>>0)/10.0;cf(c[10030]|0,124968,(v=i,i=i+64|0,h[v>>3]=p,h[v+8>>3]=m,h[v+16>>3]=o,h[v+24>>3]=m,h[v+32>>3]=o,h[v+40>>3]=n,h[v+48>>3]=p,h[v+56>>3]=n,v)|0);i=j;return}function sG(b){b=+b;var d=0,e=0;d=i;if(+h[29062]==b){i=d;return}if(a[232528]|0){a[232528]=0;e=c[10030]|0;aI(125976,2,1,e|0)}cf(c[10030]|0,125384,(v=i,i=i+8|0,h[v>>3]=b,v)|0);h[29062]=b;i=d;return}function sH(b){b=b|0;var d=0,e=0,f=0.0,g=0,j=0.0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0;d=i;i=i+24|0;e=d|0;f=+h[b+8>>3];a[232608]=1;if(a[232528]|0){a[232528]=0;g=c[10030]|0;aI(125976,2,1,g|0)}if(!(a[232616]|0)){j=f<.001?0.0:f;g=c[10030]|0;cf(g|0,125848,(v=i,i=i+8|0,h[v>>3]=j,v)|0);i=d;return}g=b|0;k=c[g>>2]|0;if((k|0)==1){l=c[b+4>>2]|0;if((l|0)>7){m=(l|0)%8&-1}else{m=l}do{if((m|0)==-1){l=c[10030]|0;aI(125736,21,1,l|0)}else{if((m|0)<=-1){break}l=c[10030]|0;cf(l|0,125576,(v=i,i=i+8|0,c[v>>2]=m,v)|0)}}while(0);n=c[g>>2]|0}else{n=k}if((n|0)==5){k=c[5169]|0;do{if((k|0)==0){o=f}else{j=+(k|0);if(f>=+(k-1|0)/j){o=1.0;break}o=+O(+(f*j))/j}}while(0);fq(o,e);p=+h[e>>3]}else if((n|0)==3){n=c[b+4>>2]|0;o=+(n>>>16&255|0)/255.0;h[e>>3]=o;h[e+8>>3]=+(n>>>8&255|0)/255.0;h[e+16>>3]=+(n&255|0)/255.0;p=o}else{i=d;return}n=e|0;if(p<1.0e-4){h[n>>3]=0.0}b=e+8|0;p=+h[b>>3];if(p<1.0e-4){h[b>>3]=0.0;q=0.0}else{q=p}b=e+16|0;p=+h[b>>3];if(p<1.0e-4){h[b>>3]=0.0;r=0.0}else{r=p}cf(c[10030]|0,125464,(v=i,i=i+24|0,h[v>>3]=+h[n>>3],h[v+8>>3]=q,h[v+16>>3]=r,v)|0);i=d;return}function sI(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0,p=0,q=0;e=i;f=c[d+8>>2]|0;g=f>>4;j=f&15;if(a[232528]|0){a[232528]=0;f=c[10030]|0;aI(125976,2,1,f|0)}if((j|0)==0){f=c[10030]|0;aI(126768,23,1,f|0)}else if((j|0)==1|(j|0)==4){k=g;l=19531}else if((j|0)==2|(j|0)==5){k=g*12&-1;l=19531}do{if((l|0)==19531){if((k|0)<100){m=+(100-k|0)*.01;g=c[10030]|0;n=1.0-m;cf(g|0,126664,(v=i,i=i+16|0,h[v>>3]=n,h[v+8>>3]=m,v)|0);break}else{g=c[10030]|0;aI(126536,25,1,g|0);break}}}while(0);aI(126432,5,1,c[10030]|0);k=c[10030]|0;if((b|0)<=0){o=k;p=aI(126072,27,1,o|0)|0;i=e;return}l=b-1|0;g=0;j=k;while(1){m=+(c[d+(g*12&-1)+4>>2]|0)/10.0;k=g+1|0;if((g|0)<(l|0)){q=((k|0)%5&-1|0)==0?126232:126152}else{q=126152}cf(j|0,126296,(v=i,i=i+24|0,h[v>>3]=+(c[d+(g*12&-1)>>2]|0)/10.0,h[v+8>>3]=m,c[v+16>>2]=q,v)|0);f=c[10030]|0;if((k|0)<(b|0)){g=k;j=f}else{o=f;break}}p=aI(126072,27,1,o|0)|0;i=e;return}function sJ(){var b=0,d=0,e=0,f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0.0,T=0,U=0,V=0,W=0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ab=0.0,ac=0,ad=0,ae=0,af=0;b=i;i=i+1184|0;d=b|0;e=b+8|0;f=b+32|0;j=b+56|0;k=b+1112|0;l=b+1120|0;m=b+1128|0;n=b+80|0;uE(n|0,0,1025);o=c[13898]|0;p=c[8272]|0;L26069:do{if((o|0)<(p|0)){q=f|0;r=f+8|0;s=m|0;t=e|0;u=e+8|0;w=m+50|0;x=o;y=p;L26071:while(1){z=c[1054]|0;A=(a[z+(x*40&-1)|0]&1)==0;L26073:do{if(!A){B=c[z+(x*40&-1)+36>>2]|0;C=z+(x*40&-1)+32|0;D=c[10036]|0;E=0;while(1){if((E|0)>=(B|0)){break}if((a[D+((c[C>>2]|0)+E|0)|0]|0)==(a[E+103664|0]|0)){E=E+1|0}else{break L26073}}if((E|0)==1){break L26069}}}while(0);C=c[60336]|0;L26080:do{if((C|0)==0){F=241344}else{D=c[z+(x*40&-1)+36>>2]|0;B=c[z+(x*40&-1)+32>>2]|0;G=(D|0)>0;H=c[10036]|0;I=241344;J=C;while(1){L26084:do{if(!A){if(G){K=0;L=0;M=B;while(1){N=a[J+K|0]|0;if(N<<24>>24==(a[H+(K+M|0)|0]|0)){O=M;P=L}else{if(N<<24>>24!=36){break L26084}O=M-1|0;P=1}Q=K+1|0;if((Q|0)<(P+D|0)){K=Q;L=P;M=O}else{break}}if((P|0)==0){R=Q}else{F=I;break L26080}}else{R=0}M=a[J+R|0]|0;if((M<<24>>24|0)==36|(M<<24>>24|0)==0){F=I;break L26080}}}while(0);M=I+8|0;L=c[M>>2]|0;if((L|0)==0){F=M;break}else{I=M;J=L}}}}while(0);A=c[F+4>>2]|0;L26097:do{if((A|0)==21){c[13898]=x+1;C=is(j)|0;J=c[C>>2]|0;if((J|0)==2){S=+h[C+8>>3]}else if((J|0)==3){S=+uz(c[C+8>>2]|0,0)}else if((J|0)==1){S=+(c[C+8>>2]|0)}else{T=19615;break L26071}h[30158]=S}else if((A|0)==7){U=x+1|0;c[13898]=U;if((U|0)>=(y|0)){V=U;T=19660;break L26071}L26106:do{if((a[z+(U*40&-1)|0]&1)!=0){C=c[z+(U*40&-1)+36>>2]|0;J=z+(U*40&-1)+32|0;I=c[10036]|0;D=0;while(1){if((D|0)>=(C|0)){break}if((a[I+((c[J>>2]|0)+D|0)|0]|0)==(a[D+103664|0]|0)){D=D+1|0}else{break L26106}}if((D|0)==1){V=U;T=19662;break L26071}}}while(0);a[14176]=1;is(f);a[14176]=0;if((c[q>>2]|0)!=3){T=19578;break L26071}J=c[r>>2]|0;if((J|0)==0){T=19580;break L26071}I=c[60308]|0;if((I|0)!=0){uu(I);c[60308]=0}if((a[J]|0)==0){uu(J);break}else{c[60308]=J;break}}else if((A|0)==4){c[13898]=x+1;a[241228]=1}else if((A|0)==27){uE(s|0,0,51);J=x+1|0;c[13898]=J;if((J|0)>=(y|0)){break}L26124:do{if((a[z+(J*40&-1)|0]&1)!=0){I=c[z+(J*40&-1)+36>>2]|0;C=z+(J*40&-1)+32|0;H=c[10036]|0;B=0;while(1){if((B|0)>=(I|0)){break}if((a[H+((c[C>>2]|0)+B|0)|0]|0)==(a[B+103664|0]|0)){B=B+1|0}else{break L26124}}if((B|0)==1){break L26097}}}while(0);a[14176]=1;is(e);a[14176]=0;if((c[t>>2]|0)!=3){c[13898]=J;break}C=c[u>>2]|0;if((C|0)==0){break}h[d>>3]=0.0;H=bh(C|0,44)|0;if((H|0)==0){W=uA(C|0)|0;X=0.0}else{I=H+1|0;ca(I|0,148448,(v=i,i=i+8|0,c[v>>2]=d,v)|0);W=H-C|0;X=+h[d>>3]}H=W>>>0>50?50:W;uD(s|0,C|0,H);a[m+H|0]=0;uF(241280,s|0,51);a[w]=0;uu(C);if(X>0.0){h[30167]=X;break}if(X>=0.0){break}h[30167]=12.0}else if((A|0)==11){c[13898]=x+1;a[241237]=1}else if((A|0)==16){c[13898]=x+1;c[60311]=0}else if((A|0)==18){c[13898]=x+1;c[60311]=2}else if((A|0)==1){c[13898]=x+1;C=s4(k,l,2)|0;Y=+(c[10032]|0);Z=+g[k>>2]/Y;h[30151]=Z;_=+g[l>>2]/Y;h[30152]=_;c[60306]=C;if((C|0)!=2){break}h[30151]=Z*2.54;h[30152]=_*2.54}else if((A|0)==19){c[13898]=x+1;C=is(j)|0;H=c[C>>2]|0;if((H|0)==3){$=+uz(c[C+8>>2]|0,0)}else if((H|0)==1){$=+(c[C+8>>2]|0)}else if((H|0)==2){$=+h[C+8>>3]}else{T=19603;break L26071}h[30156]=$}else if((A|0)==0){c[13898]=x+1;C=c[60308]|0;if((C|0)!=0){uu(C);c[60308]=0}uD(241208,241072,136)}else if((A|0)==25){uh(x,134168,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((A|0)==10){c[13898]=x+1;a[241236]=0;C=(c[3524]|0)+96|0;c[C>>2]=c[C>>2]|1024}else if((A|0)==22){c[13898]=x+1;c[60318]=0}else if((A|0)==17){c[13898]=x+1;c[60311]=1}else if((A|0)==2){c[13898]=x+1;h[30151]=5.0;h[30152]=3.0;c[60306]=1}else if((A|0)==3){c[13898]=x+1;a[241228]=0}else if((A|0)==26){c[13898]=x+1;a[241280]=0;h[30167]=12.0}else if((A|0)==8){c[13898]=x+1;C=c[60308]|0;if((C|0)==0){break}uu(C);c[60308]=0}else if((A|0)==14){c[13898]=x+1;c[60310]=1}else if((A|0)==13){c[13898]=x+1;c[60310]=0}else if((A|0)==6){c[13898]=x+1;a[241229]=0}else if((A|0)==20){c[13898]=x+1;C=is(j)|0;H=c[C>>2]|0;if((H|0)==1){aa=+(c[C+8>>2]|0)}else if((H|0)==3){aa=+uz(c[C+8>>2]|0,0)}else if((H|0)==2){aa=+h[C+8>>3]}else{T=19609;break L26071}h[30157]=aa}else if((A|0)==12){c[13898]=x+1;a[241237]=0}else if((A|0)==23){c[13898]=x+1;c[60318]=1}else if((A|0)==5){c[13898]=x+1;a[241229]=1}else if((A|0)==24){c[13898]=x+1;c[60319]=0}else if((A|0)==9){c[13898]=x+1;a[241236]=1;C=(c[3524]|0)+96|0;c[C>>2]=c[C>>2]&-1025}else if((A|0)==15){c[13898]=x+1;c[60310]=2}else{T=19639;break L26071}}while(0);A=c[13898]|0;z=c[8272]|0;if((A|0)<(z|0)){x=A;y=z}else{break L26069}}if((T|0)==19578){c[13898]=U;V=U;uf(V,134392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((T|0)==19639){uf(x,134056,(v=i,i=i+8|0,c[v>>2]=c[c[3524]>>2],v)|0)}else if((T|0)==19603){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((T|0)==19660){uf(V,134392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((T|0)==19662){uf(V,134392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((T|0)==19615){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((T|0)==19580){V=c[13898]|0;uf(V,134392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((T|0)==19609){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}}while(0);aa=+h[30167];h[30211]=aa;c[(c[3524]|0)+16>>2]=~~(aa*2540.0/72.27*+h[30158]+.5);T=c[3524]|0;c[T+20>>2]=~~(+((c[T+16>>2]|0)>>>0>>>0)*.4895+.5);aa=+h[30151];if((c[60306]|0)==1){c[(c[3524]|0)+8>>2]=~~(aa*2540.0+.5);c[(c[3524]|0)+12>>2]=~~(+h[30152]*2540.0+.5)}else{c[(c[3524]|0)+8>>2]=~~(aa*1.0e3+.5);c[(c[3524]|0)+12>>2]=~~(+h[30152]*1.0e3+.5)}T=(c[60306]|0)==1?145600:145440;aa=+h[30152];V=(a[241228]&1)!=0?133784:133640;U=(a[241229]&1)!=0?133504:133320;j=(c[60308]|0)==0?133016:132832;a0(13048,1025,133912,(v=i,i=i+56|0,h[v>>3]=+h[30151],c[v+8>>2]=T,h[v+16>>3]=aa,c[v+24>>2]=T,c[v+32>>2]=V,c[v+40>>2]=U,c[v+48>>2]=j,v)|0);if((c[60308]|0)!=0){j=1025-(uA(13048)|0)|0;ck(13048,132696,j|0);j=c[60308]|0;U=1025-(uA(13048)|0)|0;ck(13048,j|0,U|0);U=1025-(uA(13048)|0)|0;ck(13048,132584,U|0)}U=(a[241236]&1)!=0?132472:132384;ck(13048,U|0,1025-(uA(13048)|0)|0);U=c[60310]|0;if((U|0)==1){j=1025-(uA(13048)|0)|0;ck(13048,132112,j|0)}else if((U|0)==0){ck(13048,132272,1025-(uA(13048)|0)|0)}else if((U|0)==2){ck(13048,132032,1025-(uA(13048)|0)|0)}U=c[60311]|0;if((U|0)==0){j=1025-(uA(13048)|0)|0;ck(13048,137232,j|0)}else if((U|0)==2){ck(13048,137168,1025-(uA(13048)|0)|0)}else if((U|0)==1){ck(13048,131936,1025-(uA(13048)|0)|0)}aa=+h[30156];$=+h[30157];X=+h[30158];a0(n|0,1025,131664,(v=i,i=i+32|0,c[v>>2]=(a[241237]&1)!=0?131584:131504,h[v+8>>3]=aa,h[v+16>>3]=$,h[v+24>>3]=X,v)|0);ck(13048,n|0,1025-(uA(13048)|0)|0);U=c[60318]|0;if((U|0)==1){j=1025-(uA(13048)|0)|0;ck(13048,131408,j|0);ab=+h[30167];ac=a0(n|0,1025,131176,(v=i,i=i+16|0,c[v>>2]=241280,h[v+8>>3]=ab,v)|0)|0;ad=uA(13048)|0;ae=1025-ad|0;af=ck(13048,n|0,ae|0)|0;i=b;return}else if((U|0)==0){ck(13048,131240,1025-(uA(13048)|0)|0);ab=+h[30167];ac=a0(n|0,1025,131176,(v=i,i=i+16|0,c[v>>2]=241280,h[v+8>>3]=ab,v)|0)|0;ad=uA(13048)|0;ae=1025-ad|0;af=ck(13048,n|0,ae|0)|0;i=b;return}else{ab=+h[30167];ac=a0(n|0,1025,131176,(v=i,i=i+16|0,c[v>>2]=241280,h[v+8>>3]=ab,v)|0)|0;ad=uA(13048)|0;ae=1025-ad|0;af=ck(13048,n|0,ae|0)|0;i=b;return}}function sK(a){a=a|0;c[60468]=a;return 1}function sL(a){a=a|0;c[60416]=a;return 1}function sM(a){a=a|0;if((a|0)!=0){c[60410]=a}return 0}function sN(){var b=0,d=0,e=0,f=0,g=0.0,j=0.0;b=i;i=i+112|0;d=b|0;cG(d|0);c[60256]=0;c[60258]=0;c[60266]=0;a[241056]=0;c[60464]=0;c[60418]=0;cf(c[10030]|0,140680,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);do{if((a[241229]&1)!=0){e=b+8|0;if((bw(e|0,100,140512,aN(d|0)|0)|0)==0){break}f=c[10030]|0;cf(f|0,140320,(v=i,i=i+8|0,c[v>>2]=e,v)|0)}}while(0);aF(10,c[10030]|0);cf(c[10030]|0,139952,(v=i,i=i+40|0,c[v>>2]=40152,c[v+8>>2]=40160,c[v+16>>2]=240968,c[v+24>>2]=103960,c[v+32>>2]=240976,v)|0);cf(c[10030]|0,139760,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);if((a[241228]&1)==0){i=b;return}if((c[11252]|0)==15){d=c[10030]|0;aI(139560,25,1,d|0)}aI(139312,24,1,c[10030]|0);if((a[241236]&1)!=0){d=c[10030]|0;aI(139136,30,1,d|0)}d=c[60308]|0;if((d|0)!=0){e=c[10030]|0;cf(e|0,154696,(v=i,i=i+8|0,c[v>>2]=d,v)|0)}g=+h[30167];if(g==12.0){j=g}else{d=c[10030]|0;cf(d|0,138800,(v=i,i=i+8|0,h[v>>3]=g,v)|0);j=+h[30167]}d=(a[241280]|0)!=0?148464:179864;cf(c[10030]|0,138568,(v=i,i=i+24|0,c[v>>2]=241280,c[v+8>>2]=d,h[v+16>>3]=j,v)|0);aI(138336,39,1,c[10030]|0);aI(138080,9,1,c[10030]|0);d=c[60310]|0;if((d|0)==1){e=c[10030]|0;aI(137776,7,1,e|0)}else if((d|0)==2){aI(137632,7,1,c[10030]|0)}else if((d|0)==0){aI(137912,7,1,c[10030]|0)}cf(c[10030]|0,137496,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);aI(137328,12,1,c[10030]|0);d=c[60311]|0;if((d|0)==1){e=c[10030]|0;aI(137776,7,1,e|0)}else if((d|0)==2){aI(137168,7,1,c[10030]|0)}else if((d|0)==0){aI(137232,4,1,c[10030]|0)}cf(c[10030]|0,137008,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);cf(c[10030]|0,136744,(v=i,i=i+8|0,c[v>>2]=(a[241237]&1)!=0?136424:136208,v)|0);cf(c[10030]|0,136008,(v=i,i=i+8|0,h[v>>3]=+h[30156],v)|0);cf(c[10030]|0,135744,(v=i,i=i+8|0,h[v>>3]=+h[30157],v)|0);cf(c[10030]|0,135608,(v=i,i=i+8|0,h[v>>3]=+h[30158],v)|0);cf(c[10030]|0,135456,(v=i,i=i+8|0,c[v>>2]=(c[60318]|0)==0?135312:135192,v)|0);cf(c[10030]|0,134944,(v=i,i=i+8|0,c[v>>2]=(c[60418]|0)==0?134816:134640,v)|0);aI(134536,13,1,c[10030]|0);i=b;return}function sO(){var b=0;b=c[10030]|0;if((a[241228]&1)==0){aI(140840,10,1,b|0);return}else{aI(140968,10,1,b|0);return}}function sP(){var b=0;if((c[60266]|0)!=0){s2()}aI(141472,55,1,c[10030]|0);b=c[10030]|0;if((a[241228]&1)==0){aI(141112,20,1,b|0);return}else{aI(141320,17,1,b|0);return}}function sQ(){var b=0,d=0,e=0,f=0,g=0.0,j=0.0,k=0.0,l=0,m=0;b=i;d=(a[241228]&1)==0;e=c[10030]|0;f=(c[60464]|0)+1|0;c[60464]=f;if(d){cf(e|0,146344,(v=i,i=i+8|0,c[v>>2]=f,v)|0)}else{cf(e|0,146528,(v=i,i=i+8|0,c[v>>2]=f,v)|0)}cf(c[10030]|0,146160,(v=i,i=i+8|0,c[v>>2]=40152,v)|0);cf(c[10030]|0,145992,(v=i,i=i+8|0,c[v>>2]=240968,v)|0);g=+h[30151];f=(c[60306]|0)==1;j=f?2.54:1.0;k=+h[30152];e=f?145600:145440;cf(c[10030]|0,145792,(v=i,i=i+48|0,h[v>>3]=g*j,h[v+8>>3]=k*j,h[v+16>>3]=g,c[v+24>>2]=e,h[v+32>>3]=k,c[v+40>>2]=e,v)|0);e=c[10030]|0;if((c[60418]|0)==0){cf(e|0,145080,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{cf(e|0,144816,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}cf(c[10030]|0,144624,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);cf(c[10030]|0,144392,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);cf(c[10030]|0,144624,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);cf(c[10030]|0,144136,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);cf(c[10030]|0,144008,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);cf(c[10030]|0,143912,(v=i,i=i+8|0,h[v>>3]=+h[30158],v)|0);cf(c[10030]|0,143832,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);cf(c[10030]|0,143688,(v=i,i=i+8|0,h[v>>3]=+h[30204],v)|0);cf(c[10030]|0,143472,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);cf(c[10030]|0,143328,(v=i,i=i+8|0,h[v>>3]=+h[30206],v)|0);cf(c[10030]|0,143184,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);cf(c[10030]|0,144624,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);if(!(a[31104]|0)){c[60414]=-3;c[60256]=0;c[60258]=0;c[60266]=0;a[241056]=0;i=b;return}e=c[60410]|0;if((e|0)==0){c[60414]=-3;c[60256]=0;c[60258]=0;c[60266]=0;a[241056]=0;i=b;return}aI(143016,16,1,c[10030]|0);f=c[5163]|0;if((f|0)==103){d=c[10030]|0;aI(142832,16,1,d|0)}else if((f|0)==114){d=c[5165]|0;l=c[5166]|0;cf(c[10030]|0,142624,(v=i,i=i+24|0,c[v>>2]=c[5164],c[v+8>>2]=d,c[v+16>>2]=l,v)|0)}else if((f|0)==100){aI(142352,21,1,c[10030]|0);l=c[e+44>>2]|0;d=c[e+40>>2]|0;aI(142248,7,1,c[10030]|0);if((d|0)>0){e=0;do{if((e|0)>0){m=c[10030]|0;aF(44,m|0)}k=+h[l+(e<<5)+16>>3];g=+h[l+(e<<5)+24>>3];cf(c[10030]|0,142144,(v=i,i=i+24|0,h[v>>3]=+h[l+(e<<5)+8>>3],h[v+8>>3]=k,h[v+16>>3]=g,v)|0);e=e+1|0;}while((e|0)<(d|0));aI(142e3,12,1,c[10030]|0);e=0;do{if((e|0)>0){m=c[10030]|0;aF(44,m|0)}cf(c[10030]|0,141840,(v=i,i=i+8|0,h[v>>3]=+h[l+(e<<5)>>3],v)|0);e=e+1|0;}while((e|0)<(d|0))}else{aI(142e3,12,1,c[10030]|0)}aF(41,c[10030]|0)}else if((f|0)==102){aI(142512,21,1,c[10030]|0)}aI(150696,3,1,c[10030]|0);c[60414]=-3;c[60256]=0;c[60258]=0;c[60266]=0;a[241056]=0;i=b;return}function sR(a,b){a=a|0;b=b|0;if((c[60258]|0)==(a|0)&(c[60256]|0)==(b|0)){return}if((c[60266]|0)!=0){s2()}c[60258]=a;c[60256]=b;return}function sS(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0.0,m=0.0,n=0,o=0;e=i;f=c[60258]|0;g=c[60256]|0;j=c[60266]|0;k=(j|0)==0;if((f|0)==(b|0)&(g|0)==(d|0)){if(!k){i=e;return}a[241056]=1;i=e;return}if(k){a[241056]=0;c[60262]=f;c[60260]=g;c[60266]=2;k=c[10030]|0;l=+(f|0)*.001;m=+(g|0)*.001;cf(k|0,146712,(v=i,i=i+16|0,h[v>>3]=l,h[v+8>>3]=m,v)|0)}else{if((j&3|0)==2){j=c[10030]|0;aI(152656,3,1,j|0);c[60266]=2;n=c[60258]|0;o=c[60256]|0}else{n=f;o=g}g=c[10030]|0;m=+(n|0)*.001;l=+(o|0)*.001;cf(g|0,152248,(v=i,i=i+16|0,h[v>>3]=m,h[v+8>>3]=l,v)|0)}c[60258]=b;c[60256]=d;c[60266]=(c[60266]|0)+1;i=e;return}function sT(b){b=b|0;var d=0;d=i;do{if((c[60414]|0)==(b|0)){if(a[241864]|0){break}i=d;return}}while(0);if((c[60266]|0)!=0){s2()}cf(c[10030]|0,146984,(v=i,i=i+8|0,c[v>>2]=b,v)|0);c[60414]=b;a[241864]=0;i=d;return}function sU(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0;f=i;i=i+32|0;g=f|0;uD(g|0,240992,30);if((e|0)==0){i=f;return}if((a[e]|0)==0){i=f;return}if((c[60266]|0)!=0){s2()}j=c[60416]|0;if((j|0)==2){k=2}else if((j|0)==0){k=1}else{k=0}j=e;while(1){if((a[j]|0)!=32){break}j=j+1|0}cf(c[10030]|0,148128,(v=i,i=i+16|0,h[v>>3]=+(b>>>0>>>0)*.001,h[v+8>>3]=+(d>>>0>>>0)*.001,v)|0);d=c[60468]|0;if((d|0)!=0){b=c[10030]|0;cf(b|0,147984,(v=i,i=i+8|0,c[v>>2]=d,v)|0)}cf(c[10030]|0,147776,(v=i,i=i+8|0,c[v>>2]=g+(k*10&-1),v)|0);if((a[241696]|0)!=0){k=c[10030]|0;cf(k|0,147528,(v=i,i=i+8|0,c[v>>2]=241696,v)|0)}cf(c[10030]|0,147256,(v=i,i=i+8|0,c[v>>2]=j,v)|0);i=f;return}function sV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=i;if((c[60266]|0)!=0){s2()}cf(c[10030]|0,148360,(v=i,i=i+24|0,h[v>>3]=+(a>>>0>>>0)*.001,h[v+8>>3]=+(b>>>0>>>0)*.001,c[v+16>>2]=d,v)|0);i=e;return}function sW(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;lD(a,b,c,d,e);return}function sX(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0.0,m=0;d=i;i=i+64|0;e=d|0;f=d+8|0;g=f|0;uE(g|0,0,51);h[e>>3]=0.0;j=bh(b|0,44)|0;if((j|0)==0){k=uA(b|0)|0;l=0.0}else{m=j+1|0;ca(m|0,148448,(v=i,i=i+8|0,c[v>>2]=e,v)|0);k=j-b|0;l=+h[e>>3]}h[30210]=l;e=k>>>0>50?50:k;uD(241800,b|0,e);a[e+241800|0]=0;uF(241696,241800,101);l=+h[30210];do{if(l>0.0){h[30211]=l;a0(g|0,51,148688,(v=i,i=i+8|0,h[v>>3]=l,v)|0);e=101-(uA(241696)|0)|0;ck(241696,g|0,e|0);a[f+50|0]=0}else{if(l!=0.0){break}h[30211]=+h[30167]}}while(0);c[(c[3524]|0)+16>>2]=~~(+h[30211]*2540.0/72.27*+h[30158]+.5);f=c[3524]|0;c[f+20>>2]=~~(+((c[f+16>>2]|0)>>>0>>>0)*.4895+.5);l=+h[30151];if((c[60306]|0)==1){c[(c[3524]|0)+8>>2]=~~(l*2540.0+.5);c[(c[3524]|0)+12>>2]=~~(+h[30152]*2540.0+.5);i=d;return 1}else{c[(c[3524]|0)+8>>2]=~~(l*1.0e3+.5);c[(c[3524]|0)+12>>2]=~~(+h[30152]*1.0e3+.5);i=d;return 1}return 0}function sY(a){a=+a;var b=0;b=i;if(+h[30204]==a){i=b;return}if((c[60266]|0)!=0){s2()}cf(c[10030]|0,148808,(v=i,i=i+8|0,h[v>>3]=a,v)|0);h[30204]=a;i=b;return}function sZ(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=i;if((c[60266]|0)!=0){s2()}cf(c[10030]|0,148936,(v=i,i=i+32|0,h[v>>3]=+(e>>>0>>>0)*.001,h[v+8>>3]=+(f>>>0>>>0)*.001,h[v+16>>3]=+(b>>>0>>>0)*.001,h[v+24>>3]=+(d>>>0>>>0)*.001,v)|0);s3(a);i=g;return}function s_(a){a=+a;var b=0,d=0.0;b=i;d=a<0.0?1.0:a;if(+h[30206]==d){i=b;return}if((c[60266]|0)!=0){s2()}cf(c[10030]|0,149264,(v=i,i=i+8|0,h[v>>3]=d,v)|0);h[30206]=d;i=b;return}function s$(b){b=b|0;var d=0,e=0,f=0,g=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0.0;d=i;i=i+24|0;e=d|0;if((c[60266]|0)!=0){s2()}f=c[b>>2]|0;if((f|0)==3){g=c[b+4>>2]|0;j=+(g>>>16&255|0)/255.0;k=+(g>>>8&255|0)/255.0;l=+(g&255|0)/255.0;g=c[10030]|0;cf(g|0,149808,(v=i,i=i+24|0,h[v>>3]=j,h[v+8>>3]=k,h[v+16>>3]=l,v)|0);a[241864]=1;i=d;return}else if((f|0)==5){l=+h[b+8>>3];k=l<0.0?0.0:l;l=k>1.0?1.0:k;cf(c[10030]|0,149664,(v=i,i=i+8|0,h[v>>3]=l,v)|0);g=c[5168]|0;L26414:do{if((g|0)==0){m=l}else{k=+O(+(+(g|0)*l))/+(g-1|0);if((c[5163]|0)!=100){m=k;break}n=c[5172]|0;if((n|0)<3&k==0.0){m=k;break}o=c[5173]|0;p=0;j=k;while(1){if((p|0)>=(n|0)){m=j;break L26414}k=+h[o+(p<<5)>>3];q=p+1|0;r=+h[o+(q<<5)>>3];s=r>l;do{if(k<=l&s){if(!(j<k|j>r)){t=j;break}t=(k+r)*.5}else{t=j}}while(0);if(s){m=t;break}else{p=q;j=t}}}}while(0);fq(m,e);m=+h[e+8>>3];t=+h[e+16>>3];cf(c[10030]|0,149808,(v=i,i=i+24|0,h[v>>3]=+h[e>>3],h[v+8>>3]=m,h[v+16>>3]=t,v)|0);a[241864]=1;i=d;return}else if((f|0)==1){cf(c[10030]|0,150024,(v=i,i=i+8|0,c[v>>2]=c[b+4>>2],v)|0);a[241864]=1;i=d;return}else{uh(-1,149512,(v=i,i=i+8|0,c[v>>2]=f,v)|0);i=d;return}}function s0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0.0;d=i;if((a|0)<3){i=d;return}if((c[60266]|0)!=0){s2()}e=b|0;f=a-1|0;g=b+4|0;if((c[e>>2]|0)==(c[b+(f*12&-1)>>2]|0)){j=(c[g>>2]|0)==(c[b+(f*12&-1)+4>>2]|0)?f:a}else{j=a}aI(153544,5,1,c[10030]|0);k=+(c[g>>2]|0)*.001;cf(c[10030]|0,153096,(v=i,i=i+16|0,h[v>>3]=+(c[e>>2]|0)*.001,h[v+8>>3]=k,v)|0);if((j|0)>1){e=1;do{if((e&3|0)==0){g=c[10030]|0;aI(152656,3,1,g|0)}k=+(c[b+(e*12&-1)+4>>2]|0)*.001;cf(c[10030]|0,152248,(v=i,i=i+16|0,h[v>>3]=+(c[b+(e*12&-1)>>2]|0)*.001,h[v+8>>3]=k,v)|0);e=e+1|0;}while((e|0)<(j|0))}aI(151984,9,1,c[10030]|0);s3(c[b+8>>2]|0);i=d;return}function s1(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0.0,x=0.0,y=0.0,z=0,A=0,B=0,C=0.0,D=0,E=0.0,F=0,G=0.0,H=0,I=0;g=i;i=i+24|0;j=g|0;k=e+24|0;l=e|0;do{if((c[k>>2]|0)>(c[l>>2]|0)){m=19853}else{if((c[e+4>>2]|0)>(c[e+28>>2]|0)){m=19853;break}if((c[e+12>>2]|0)>(c[e+36>>2]|0)){m=19853;break}if((c[e+40>>2]|0)>(c[e+16>>2]|0)){m=19853}else{n=0}}}while(0);if((m|0)==19853){n=1}if((c[60418]|0)==1){i=g;return}do{if((f|0)==0){m=c[10030]|0;cf(m|0,159568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);m=aa(b,a);if((m|0)!=0){o=j|0;p=j+8|0;q=j+16|0;r=0;s=0;while(1){if((s|0)>15){t=c[10030]|0;cf(t|0,158976,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);u=1}else{u=s+1|0}w=+h[d+(r<<3)>>3];t=c[5168]|0;L26467:do{if((t|0)==0){x=w}else{y=+O(+(w*+(t|0)))/+(t-1|0);if((c[5163]|0)!=100){x=y;break}z=c[5172]|0;if((z|0)<3&y==0.0){x=y;break}A=c[5173]|0;B=0;C=y;while(1){if((B|0)>=(z|0)){x=C;break L26467}y=+h[A+(B<<5)>>3];D=B+1|0;E=+h[A+(D<<5)>>3];F=E>w;do{if(y<=w&F){if(!(C<y|C>E)){G=C;break}G=(y+E)*.5}else{G=C}}while(0);if(F){x=G;break}else{B=D;C=G}}}}while(0);fq(x,j);t=~~(+h[p>>3]*255.0)&255;B=~~(+h[q>>3]*255.0)&255;cf(c[10030]|0,158504,(v=i,i=i+24|0,c[v>>2]=~~(+h[o>>3]*255.0)&255,c[v+8>>2]=t,c[v+16>>2]=B,v)|0);B=r+1|0;if(B>>>0<m>>>0){r=B;s=u}else{break}}}s=c[10030]|0;aI(157888,3,1,s|0)}else{s=(f|0)==2;r=s?4:3;m=c[10030]|0;cf(m|0,159568,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);m=aa(b,a);o=(m|0)==0;if(!o){q=0;p=0;while(1){if((p|0)>15){B=c[10030]|0;cf(B|0,158976,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);H=1}else{H=p+1|0}B=aa(q,r);cf(c[10030]|0,155792,(v=i,i=i+8|0,c[v>>2]=~~(+h[d+(B<<3)>>3]*255.0)&255,v)|0);cf(c[10030]|0,155792,(v=i,i=i+8|0,c[v>>2]=~~(+h[d+(B+1<<3)>>3]*255.0)&255,v)|0);cf(c[10030]|0,155792,(v=i,i=i+8|0,c[v>>2]=~~(+h[d+(B+2<<3)>>3]*255.0)&255,v)|0);B=q+1|0;if(B>>>0<m>>>0){q=B;p=H}else{break}}}p=c[10030]|0;aI(157888,3,1,p|0);if(!s){break}p=c[10030]|0;cf(p|0,154920,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);if(!o){p=0;q=0;while(1){if((q|0)>47){B=c[10030]|0;cf(B|0,158976,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);I=1}else{I=q+1|0}B=c[10030]|0;t=~~(+h[d+(aa(p,r)+3<<3)>>3]*255.0)&255;cf(B|0,155792,(v=i,i=i+8|0,c[v>>2]=t,v)|0);t=p+1|0;if(t>>>0<m>>>0){p=t;q=I}else{break}}}q=c[10030]|0;aI(157888,3,1,q|0)}}while(0);if(n){I=c[10030]|0;aI(154584,14,1,I|0)}I=c[l>>2]|0;x=+((c[e+12>>2]|0)-I|0)*.001;l=c[e+16>>2]|0;G=+((c[e+4>>2]|0)-l|0)*.001;cf(c[10030]|0,154224,(v=i,i=i+48|0,c[v>>2]=b,c[v+8>>2]=a,h[v+16>>3]=x,h[v+24>>3]=G,h[v+32>>3]=+(I|0)*.001,h[v+40>>3]=+(l|0)*.001,v)|0);if(!n){i=g;return}n=c[k>>2]|0;k=c[e+40>>2]|0;G=+((c[e+28>>2]|0)-k|0)*.001;cf(c[10030]|0,153832,(v=i,i=i+32|0,h[v>>3]=+((c[e+36>>2]|0)-n|0)*.001,h[v+8>>3]=G,h[v+16>>3]=+(n|0)*.001,h[v+24>>3]=+(k|0)*.001,v)|0);i=g;return}function s2(){var b=0,d=0,e=0.0,f=0.0,g=0,j=0;b=i;if(a[241056]|0){d=c[10030]|0;e=+(c[60258]|0)*.001;f=+(c[60256]|0)*.001;cf(d|0,150512,(v=i,i=i+16|0,h[v>>3]=e,h[v+8>>3]=f,v)|0);a[241056]=0;c[60266]=0;i=b;return}d=c[60258]|0;g=c[60256]|0;j=c[10030]|0;if((d|0)==(c[60262]|0)&(g|0)==(c[60260]|0)){aI(150352,21,1,j|0);c[60266]=0;i=b;return}else{f=+(d|0)*.001;e=+(g|0)*.001;cf(j|0,150176,(v=i,i=i+16|0,h[v>>3]=f,h[v+8>>3]=e,v)|0);c[60266]=0;i=b;return}}function s3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0;b=i;d=a>>4;e=(d|0)<0?0:d;f=(e|0)>100?100:e;aI(151736,9,1,c[10030]|0);e=a&15;if((e|0)==1){g=19900}else if((e|0)==5){aI(151568,12,1,c[10030]|0);g=19903}else if((e|0)==2){g=19903}else if((e|0)==4){aI(151568,12,1,c[10030]|0);g=19900}else if((e|0)!=3){aI(150840,11,1,c[10030]|0)}do{if((g|0)==19900){if((f|0)>=100){break}e=c[10030]|0;j=+(f|0)*.01;cf(e|0,151328,(v=i,i=i+8|0,h[v>>3]=j,v)|0)}else if((g|0)==19903){cf(c[10030]|0,151024,(v=i,i=i+8|0,c[v>>2]=d,v)|0)}}while(0);aI(150696,3,1,c[10030]|0);i=b;return}function s4(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0,D=0.0,E=0,F=0,G=0.0,H=0.0,I=0,J=0.0;f=i;i=i+48|0;j=f|0;k=f+24|0;l=c[13898]|0;if((l|0)>=(c[8272]|0)){uf(l,131024,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}m=c[1054]|0;L26528:do{if((a[m+(l*40&-1)|0]&1)!=0){n=c[m+(l*40&-1)+36>>2]|0;o=m+(l*40&-1)+32|0;p=c[10036]|0;q=0;while(1){if((q|0)>=(n|0)){break}if((a[p+((c[o>>2]|0)+q|0)|0]|0)==(a[q+103664|0]|0)){q=q+1|0}else{break L26528}}if((q|0)!=1){break}uf(l,131024,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}}while(0);l=is(k)|0;m=c[l>>2]|0;if((m|0)==1){r=+(c[l+8>>2]|0)}else if((m|0)==3){r=+uz(c[l+8>>2]|0,0)}else if((m|0)==2){r=+h[l+8>>3]}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}l=k|0;if((c[l>>2]|0)==3){uu(c[k+8>>2]|0);c[l>>2]=1}s=r;g[b>>2]=s;l=c[13898]|0;k=c[1054]|0;m=c[k+(l*40&-1)+36>>2]|0;o=c[k+(l*40&-1)+32>>2]|0;p=(a[k+(l*40&-1)|0]&1)==0;L26545:do{if((m|0)>0&(p^1)){k=c[10036]|0;n=0;t=0;u=o;while(1){if((a[n+130912|0]|0)==(a[k+(n+u|0)|0]|0)){w=u;x=t}else{if((n|0)!=2){y=19929;break L26545}w=u-1|0;x=1}z=n+1|0;if((z|0)<(x+m|0)){n=z;t=x;u=w}else{break}}if((x|0)==0){if(!((n|0)==6|(n|0)==1)){y=19929;break}}c[13898]=l+1;A=+g[b>>2];y=19936}else{y=19929}}while(0);do{if((y|0)==19929){L26559:do{if((c[8272]|0)<=(l|0)|p){y=19935}else{x=c[10036]|0;w=0;while(1){if((w|0)>=(m|0)){break}if((a[x+(o+w|0)|0]|0)==(a[w+145440|0]|0)){w=w+1|0}else{y=19935;break L26559}}if((w|0)!=2){y=19935;break}c[13898]=l+1;B=+g[b>>2]}}while(0);if((y|0)==19935){if((e|0)==1){A=s;y=19936;break}else if((e|0)==2){B=s}else{C=e;break}}g[b>>2]=+(c[10032]|0)/2.54*B;C=2}}while(0);if((y|0)==19936){g[b>>2]=A*+(c[10032]|0);C=1}e=c[13898]|0;l=e+1|0;c[13898]=l;if((c[8272]|0)<=(e|0)){uf(l,131024,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}o=c[1054]|0;if((a[o+(e*40&-1)|0]&1)==0){uf(l,131024,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}m=c[o+(e*40&-1)+36>>2]|0;p=o+(e*40&-1)+32|0;e=c[10036]|0;o=0;while(1){if((o|0)>=(m|0)){break}if((a[e+((c[p>>2]|0)+o|0)|0]|0)==(a[o+148464|0]|0)){o=o+1|0}else{y=19976;break}}if((y|0)==19976){uf(l,131024,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}if((o|0)!=1){uf(l,131024,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}l=is(j)|0;o=c[l>>2]|0;if((o|0)==2){D=+h[l+8>>3]}else if((o|0)==3){D=+uz(c[l+8>>2]|0,0)}else if((o|0)==1){D=+(c[l+8>>2]|0)}else{uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}l=j|0;if((c[l>>2]|0)==3){uu(c[j+8>>2]|0);c[l>>2]=1}A=D;g[d>>2]=A;l=c[13898]|0;j=c[1054]|0;o=c[j+(l*40&-1)+36>>2]|0;p=c[j+(l*40&-1)+32>>2]|0;e=(a[j+(l*40&-1)|0]&1)==0;L26596:do{if((o|0)>0&(e^1)){j=c[10036]|0;m=0;n=0;x=p;while(1){if((a[m+130912|0]|0)==(a[j+(m+x|0)|0]|0)){E=x;F=n}else{if((m|0)!=2){y=19961;break L26596}E=x-1|0;F=1}u=m+1|0;if((u|0)<(F+o|0)){m=u;n=F;x=E}else{break}}if((F|0)==0){if(!((m|0)==6|(m|0)==1)){y=19961;break}}c[13898]=l+1;G=+g[d>>2];y=19968}else{y=19961}}while(0);do{if((y|0)==19961){L26610:do{if((c[8272]|0)<=(l|0)|e){y=19967}else{F=c[10036]|0;E=0;while(1){if((E|0)>=(o|0)){break}if((a[F+(p+E|0)|0]|0)==(a[E+145440|0]|0)){E=E+1|0}else{y=19967;break L26610}}if((E|0)!=2){y=19967;break}c[13898]=l+1;H=+g[d>>2]}}while(0);if((y|0)==19967){if((C|0)==1){G=A;y=19968;break}else if((C|0)==2){H=A}else{I=C;J=A;break}}D=+(c[10032]|0)/2.54*H;g[d>>2]=D;I=2;J=D}}while(0);if((y|0)==19968){H=G*+(c[10032]|0);g[d>>2]=H;I=1;J=H}if(+g[b>>2]<1.0|J<1.0){uf(c[13898]|0,130744,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else{i=f;return I|0}return 0}function s5(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,w=0,x=0.0,y=0;j=i;k=e-b|0;l=f-d|0;if((e|0)==(b|0)){m=c[10030]|0;n=(h|0)!=0?101096:101088;o=l>>31|1;p=(l|0)>-1?l:-l|0;cf(m|0,101128,(v=i,i=i+40|0,c[v>>2]=e,c[v+8>>2]=d,c[v+16>>2]=n,c[v+24>>2]=o,c[v+32>>2]=p,v)|0);i=j;return}if((f|0)==(d|0)){p=c[10030]|0;o=(h|0)!=0?101096:101088;n=k>>31|1;m=(k|0)>-1?k:-k|0;cf(p|0,101032,(v=i,i=i+40|0,c[v>>2]=b,c[v+8>>2]=f,c[v+16>>2]=o,c[v+24>>2]=n,c[v+32>>2]=m,v)|0);i=j;return}q=+(l|0)/+(k|0);if(q<0.0){r=-0.0-q}else{r=q}q=0.0;m=233040;n=0;o=1;while(1){s=r- +(c[m+4>>2]|0)/+(o|0);if((n|0)==0){t=19990}else{if(s<0.0){u=-0.0-s}else{u=s}if(u<q){t=19990}else{w=n;x=q}}do{if((t|0)==19990){t=0;if(s>=0.0){w=m;x=s;break}w=m;x=-0.0-s}}while(0);p=m+8|0;y=c[p>>2]|0;if((y|0)==0){break}else{q=x;m=p;n=w;o=y}}if(x==0.0){o=c[10030]|0;n=(h|0)!=0?101096:101088;m=aa(c[w>>2]|0,k>>31|1);t=aa(c[w+4>>2]|0,l>>31|1);y=(k|0)>-1?k:-k|0;cf(o|0,100984,(v=i,i=i+48|0,c[v>>2]=b,c[v+8>>2]=d,c[v+16>>2]=n,c[v+24>>2]=m,c[v+32>>2]=t,c[v+40>>2]=y,v)|0);i=j;return}do{if(a[45024]|0){q9(0);if(!(a[233344]|0)){y=c[10030]|0;cf(y|0,100208,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=d,v)|0)}y=c[10030]|0;cf(y|0,100168,(v=i,i=i+16|0,c[v>>2]=e,c[v+8>>2]=f,v)|0);c[58302]=e;c[58300]=f;a[233344]=1}else{if((g|0)==1){q9(0);s6(b,e,d,f);break}if(a[239320]|0){y=c[10030]|0;aF(10,y|0);a[239320]=0}c[59764]=b;c[59762]=d;rr(e,f)}}while(0);if((h|0)==0){i=j;return}h=c[10030]|0;d=aa(c[w>>2]|0,k>>31|1);k=aa(c[w+4>>2]|0,l>>31|1);cf(h|0,100952,(v=i,i=i+32|0,c[v>>2]=e,c[v+8>>2]=f,c[v+16>>2]=d,c[v+24>>2]=k,v)|0);i=j;return}function s6(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var j=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ab=0.0,ac=0.0,ad=0.0;j=i;k=(b|0)==(d|0);l=(e|0)==(f|0);m=a[233344]|0;if(k&l){if(m){i=j;return}s7(2,0.0,0.0,0.0,0.0);n=c[10030]|0;cf(n|0,100920,(v=i,i=i+24|0,c[v>>2]=b,c[v+8>>2]=e,c[v+16>>2]=100896,v)|0);i=j;return}n=m&1;a[233344]=1;if(k){o=+(e|0);s7(n,+(b|0),o,+g[58368],+(f|0)-o);i=j;return}if(l){o=+(b|0);s7(n,o,+(e|0),+(d|0)-o,+g[58368]);i=j;return}o=+(d|0);p=+(b|0);q=o-p;r=+(f|0);s=+(e|0);t=r-s;u=t/q;n=u>=0.0;if(n){w=u}else{w=-0.0-u}if(w<=1.0){l=q>=0.0;if(l){x=q}else{x=-0.0-q}if(n){y=u}else{y=-0.0-u}w=+g[58368];z=w;if(x<(1.0/y+.25)*z){if(l){A=q}else{A=-0.0-q}B=A}else{if(n){C=u}else{C=-0.0-u}B=(1.0/C+.25)*z}C=B;k=t>=0.0;if(k){D=t}else{D=-0.0-t}m=w<D;if(m|k){E=m?w:t}else{E=-0.0-t}D=(k?1.0:-1.0)*E;E=t-D;B=C*.24089999999999998;if(l){F=q}else{F=-0.0-q}do{if(C==F){G=20046}else{k=E>=0.0;if(k){H=E}else{H=-0.0-E}if(H*2.0+.5<1.0){G=20046;break}if(k){I=E}else{I=-0.0-E}k=~~(I*2.0+.5);if((k|0)==1){G=20046;break}A=E/+(k|0);y=(q-(l?1.0:-1.0)*C)/+(k-1|0);m=c[10030]|0;x=y;if(y<0.0){J=p-C}else{J=p}K=J;if(A<0.0){L=-0.0-A}else{L=A}M=s-(L-D)*.5;N=A;A=B;O=L*.24089999999999998;cf(m|0,100624,(v=i,i=i+56|0,h[v>>3]=K,h[v+8>>3]=M,h[v+16>>3]=x,h[v+24>>3]=N,c[v+32>>2]=k,h[v+40>>3]=A,h[v+48>>3]=O,v)|0);P=y}}while(0);if((G|0)==20046){l=c[10030]|0;k=(d|0)>=(b|0)?b:d;L=(s+r-w)*.5;w=B;B=z*.24089999999999998;cf(l|0,100728,(v=i,i=i+32|0,c[v>>2]=k,h[v+8>>3]=L,h[v+16>>3]=w,h[v+24>>3]=B,v)|0);P=q}B=C*.5;C=q-B*(P>=0.0?1.0:-1.0);k=c[10030]|0;P=C;if(C<0.0){Q=p-B}else{Q=p}C=Q;Q=+g[58368];w=s-Q*.5;L=t;z=B*.24089999999999998;B=Q*.24089999999999998;cf(k|0,100464,(v=i,i=i+48|0,h[v>>3]=C,h[v+8>>3]=w,h[v+16>>3]=P,h[v+24>>3]=L,h[v+32>>3]=z,h[v+40>>3]=B,v)|0);a[233344]=0;i=j;return}k=t>=0.0;if(k){R=t}else{R=-0.0-t}if(n){S=u}else{S=-0.0-u}B=+g[58368];z=B;if(R<(S+.25)*z){if(k){T=t}else{T=-0.0-t}U=T}else{if(n){V=u}else{V=-0.0-u}U=(V+.25)*z}V=U;n=q>=0.0;if(n){W=q}else{W=-0.0-q}l=B<W;if(l|n){X=l?B:q}else{X=-0.0-q}W=(n?1.0:-1.0)*X;X=q-W;U=V*.24089999999999998;if(k){Y=t}else{Y=-0.0-t}do{if(V==Y){G=20079}else{n=X>=0.0;if(n){Z=X}else{Z=-0.0-X}if(Z*2.0+.5<1.0){G=20079;break}if(n){_=X}else{_=-0.0-X}n=~~(_*2.0+.5);if((n|0)==1){G=20079;break}u=X/+(n|0);T=(t-(k?1.0:-1.0)*V)/+(n-1|0);l=c[10030]|0;d=u>=0.0;if(d){$=u}else{$=-0.0-u}S=p-($-W)*.5;if(T<0.0){aa=s-V}else{aa=s}R=aa;L=u;P=T;if(d){ab=u}else{ab=-0.0-u}u=ab*.24089999999999998;w=U;cf(l|0,100624,(v=i,i=i+56|0,h[v>>3]=S,h[v+8>>3]=R,h[v+16>>3]=L,h[v+24>>3]=P,c[v+32>>2]=n,h[v+40>>3]=u,h[v+48>>3]=w,v)|0);ac=T}}while(0);if((G|0)==20079){G=c[10030]|0;ab=(p+o-B)*.5;k=(f|0)>=(e|0)?e:f;B=z*.24089999999999998;z=U;cf(G|0,100408,(v=i,i=i+32|0,h[v>>3]=ab,c[v+8>>2]=k,h[v+16>>3]=B,h[v+24>>3]=z,v)|0);ac=t}z=V*.5;V=t-z*(ac>=0.0?1.0:-1.0);ac=+g[58368];if(V<0.0){ad=s-z}else{ad=s}cf(c[10030]|0,100464,(v=i,i=i+48|0,h[v>>3]=p-ac*.5,h[v+8>>3]=ad,h[v+16>>3]=q,h[v+24>>3]=V,h[v+32>>3]=ac*.24089999999999998,h[v+40>>3]=z*.24089999999999998,v)|0);a[233344]=0;i=j;return}function s7(b,d,e,f,j){b=b|0;d=+d;e=+e;f=+f;j=+j;var k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0;k=i;l=(b|0)==2;do{if(l){if(a[233176]|0){m=20111}}else{if(f==0.0|j==0.0){i=k;return}n=a[233176]|0;if((b|0)!=1|n^1){if(n){m=20111;break}else{m=20118;break}}do{if((~~+g[58288]|0)==(~~d|0)){if(+g[58290]!=f){m=20105;break}o=+g[58292];if(o*j<0.0){break}g[58292]=o+j;i=k;return}else{m=20105}}while(0);do{if((m|0)==20105){if((~~+g[58286]|0)!=(~~e|0)){break}if(+g[58292]!=j){break}o=+g[58290];if(o*f<0.0){break}g[58290]=o+f;i=k;return}}while(0);if(n){m=20111}else{m=20118}}}while(0);do{if((m|0)==20111){o=+g[58290];if(o<0.0){g[58288]=o+ +g[58288];p=-0.0-o;g[58290]=p;q=p}else{q=o}o=+g[58292];if(o<0.0){g[58286]=o+ +g[58286];p=-0.0-o;g[58292]=p;r=p}else{r=o}o=+g[58368];b=c[10030]|0;p=+g[58288];s=+g[58286];if(q<o|r<o){cf(b|0,100384|0,(v=i,i=i+24|0,h[v>>3]=p,h[v+8>>3]=s,c[v+16>>2]=100896,v)|0);m=20118;break}else{t=(-0.0-o)*.24089999999999998*.5;o=q*.24089999999999998;u=r*.24089999999999998;cf(b|0,100288|0,(v=i,i=i+40|0,h[v>>3]=p,h[v+8>>3]=s,h[v+16>>3]=t,h[v+24>>3]=o,h[v+32>>3]=u,v)|0);m=20118;break}}}while(0);do{if((m|0)==20118){if(l){break}g[58288]=d;g[58286]=e;g[58290]=f;g[58292]=j;a[233176]=1;i=k;return}}while(0);a[233176]=0;i=k;return}function s8(a){a=a|0;var b=0,d=0;b=i;d=~~(+(a|0)*1.4142);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=d,v)|0);a=-d|0;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=0,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=a,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=0,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=d,v)|0);aI(99872,14,1,c[10030]|0);i=b;return}function s9(a){a=a|0;var b=0,d=0;b=i;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=a,v)|0);d=-a|0;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=d,v)|0);aI(99872,14,1,c[10030]|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=0,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=0,v)|0);aI(99872,14,1,c[10030]|0);i=b;return}function ta(a){a=a|0;var b=0,d=0;b=i;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=a,v)|0);d=-a|0;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=a,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=d,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=d,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=a,v)|0);aI(99872,14,1,c[10030]|0);i=b;return}function tb(a){a=a|0;var b=0,d=0;b=i;d=~~(+(a|0)/1.4142);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=d,v)|0);a=-d|0;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=a,v)|0);aI(99872,14,1,c[10030]|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=a,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=d,v)|0);aI(99872,14,1,c[10030]|0);i=b;return}function tc(a){a=a|0;var b=0,d=0,e=0;b=i;d=~~(+(a|0)/1.6119);a=~~(+(d|0)*1.7321);e=-d<<1;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=e,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=-a,c[v+8>>2]=d,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=d,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=e,v)|0);aI(99872,14,1,c[10030]|0);i=b;return}function td(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;d=(a|0)/2&-1;a=~~(+(d|0)*1.7321);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=d<<1,v)|0);e=-d|0;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=e<<1,v)|0);aI(99872,14,1,c[10030]|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=d,v)|0);f=-a|0;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=f,c[v+8>>2]=e,v)|0);aI(99872,14,1,c[10030]|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=e,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=f,c[v+8>>2]=d,v)|0);aI(99872,14,1,c[10030]|0);i=b;return}function te(a){a=a|0;var b=0;b=i;cf(c[10030]|0,99888,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=a,v)|0);i=b;return}function tf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=i;d=(a|0)/2&-1;a=~~(+(d|0)*1.7321);e=d<<1;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=e,v)|0);f=-a|0;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=f,c[v+8>>2]=d,v)|0);g=-d|0;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=f,c[v+8>>2]=g,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=g<<1,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=g,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=d,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=e,v)|0);aI(99872,14,1,c[10030]|0);i=b;return}function tg(a){a=a|0;var b=0,d=0;b=i;cf(c[10030]|0,99888,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=a,v)|0);cf(c[10030]|0,99984,(v=i,i=i+8|0,h[v>>3]=0.0,v)|0);d=(a|0)/2&-1;cf(c[10030]|0,99888,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=d,v)|0);i=b;return}function th(a){a=a|0;var b=0;b=i;cf(c[10030]|0,99888,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=a,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=a,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=-a,v)|0);aI(99872,14,1,c[10030]|0);i=b;return}function ti(a){a=a|0;var b=0;b=i;cf(c[10030]|0,99888,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=a,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=0,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=-a,c[v+8>>2]=0,v)|0);aI(99872,14,1,c[10030]|0);i=b;return}function tj(a){a=a|0;var b=0,d=0;b=i;cf(c[10030]|0,99888,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=a,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=a,v)|0);d=-a|0;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=d,v)|0);aI(99872,14,1,c[10030]|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=0,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=0,v)|0);aI(99872,14,1,c[10030]|0);i=b;return}function tk(a){a=a|0;var b=0,d=0;b=i;cf(c[10030]|0,99888,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=a,v)|0);d=~~(+(a|0)/1.4142);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=d,v)|0);a=-d|0;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=a,v)|0);aI(99872,14,1,c[10030]|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=a,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=d,v)|0);aI(99872,14,1,c[10030]|0);i=b;return}function tl(a){a=a|0;var b=0;b=i;cf(c[10030]|0,99888,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=a,v)|0);td(a);i=b;return}function tm(a){a=a|0;var b=0,d=0;b=i;cf(c[10030]|0,99888,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=a,v)|0);cf(c[10030]|0,99984,(v=i,i=i+8|0,h[v>>3]=1.0,v)|0);d=(a|0)/2&-1;cf(c[10030]|0,99888,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=d,v)|0);i=b;return}function tn(a){a=a|0;var b=0,d=0;b=i;cf(c[10030]|0,99888,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=a,v)|0);cf(c[10030]|0,99984,(v=i,i=i+8|0,h[v>>3]=1.0,v)|0);d=~~(+(~~(+(a|0)/1.5)|0)*1.4142);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=d,v)|0);a=-d|0;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=0,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=a,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=0,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=d,v)|0);aI(99872,14,1,c[10030]|0);i=b;return}function to(a){a=a|0;var b=0,d=0;b=i;cf(c[10030]|0,99888,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=a,v)|0);cf(c[10030]|0,99984,(v=i,i=i+8|0,h[v>>3]=1.0,v)|0);d=~~(+(a|0)/1.5);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=d,v)|0);a=-d|0;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=d,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=a,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=a,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=d,v)|0);aI(99872,14,1,c[10030]|0);i=b;return}function tp(a){a=a|0;var b=0,d=0,e=0;b=i;cf(c[10030]|0,99888,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=a,v)|0);cf(c[10030]|0,99984,(v=i,i=i+8|0,h[v>>3]=1.0,v)|0);d=~~(+(~~(+(a|0)/1.5)|0)/1.6119);a=~~(+(d|0)*1.7321);e=-d<<1;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=e,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=-a,c[v+8>>2]=d,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=d,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=e,v)|0);aI(99872,14,1,c[10030]|0);i=b;return}function tq(a){a=a|0;var b=0;b=i;cf(c[10030]|0,99888,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=a,v)|0);cf(c[10030]|0,99984,(v=i,i=i+8|0,h[v>>3]=1.0,v)|0);tf(~~(+(a|0)/1.2));i=b;return}function tr(a){a=a|0;var b=0,d=0;b=i;cf(c[10030]|0,99888,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=a,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=a,v)|0);d=-a|0;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=0,c[v+8>>2]=d,v)|0);aI(99872,14,1,c[10030]|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=0,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=0,v)|0);aI(99872,14,1,c[10030]|0);d=~~(+(a|0)/1.4142);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=d,v)|0);a=-d|0;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=a,v)|0);aI(99872,14,1,c[10030]|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=d,c[v+8>>2]=a,v)|0);cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=d,v)|0);aI(99872,14,1,c[10030]|0);i=b;return}function ts(){var b=0,d=0,e=0,f=0.0,g=0;b=i;if(!(a[4192]|0)){i=b;return}if((c[918]|0)>0){d=0;do{e=-(c[32124+(d<<3)>>2]|0)|0;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=c[32120+(d<<3)>>2],c[v+8>>2]=e,v)|0);aI(99440,2,1,c[10030]|0);d=d+1|0;}while((d|0)<(c[918]|0))}d=(c[916]|0)+2|0;e=c[3684+(d*12&-1)>>2]|0;if((e|0)==1){f=+h[523]}else if((e|0)==3){f=+h[523]*3.0}else if((e|0)==2){f=+h[523]*2.0}else{f=1.0}e=c[3688+(d*12&-1)>>2]|0;if((e|0)==1){d=c[10030]|0;cf(d|0,99448,(v=i,i=i+8|0,h[v>>3]=f,v)|0)}else if((e|0)==3){cf(c[10030]|0,99480,(v=i,i=i+8|0,h[v>>3]=f,v)|0);if((c[918]|0)>0){d=0;do{g=-(c[32124+(d<<3)>>2]|0)|0;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=c[32120+(d<<3)>>2],c[v+8>>2]=g,v)|0);aI(99440,2,1,c[10030]|0);d=d+1|0;}while((d|0)<(c[918]|0))}cf(c[10030]|0,99448,(v=i,i=i+8|0,h[v>>3]=f*.5,v)|0)}else if((e|0)==0){aI(99872,14,1,c[10030]|0)}else if((e|0)==4){cf(c[10030]|0,99480,(v=i,i=i+8|0,h[v>>3]=f,v)|0);if((c[918]|0)>0){d=0;do{g=-(c[32124+(d<<3)>>2]|0)|0;cf(c[10030]|0,99784,(v=i,i=i+16|0,c[v>>2]=c[32120+(d<<3)>>2],c[v+8>>2]=g,v)|0);aI(99440,2,1,c[10030]|0);d=d+1|0;}while((d|0)<(c[918]|0))}cf(c[10030]|0,99448,(v=i,i=i+8|0,h[v>>3]=f/3.0,v)|0)}else if((e|0)==2){cf(c[10030]|0,99480,(v=i,i=i+8|0,h[v>>3]=f,v)|0)}a[4192]=0;i=b;return}function tt(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;b=i;if(!(a[46624]|0)){i=b;return}d=c[9372]|0;cf(c[10030]|0,84056,(v=i,i=i+16|0,c[v>>2]=25936,c[v+8>>2]=d,v)|0);d=(c[9372]|0)-1|0;e=c[10030]|0;if((d|0)>0){f=0;g=e;while(1){h=c[2264+(f<<2)>>2]|0;cf(g|0,84280,(v=i,i=i+16|0,c[v>>2]=c[2664+(f<<2)>>2],c[v+8>>2]=h,v)|0);h=f+1|0;if((h&7|0)==0){j=c[10030]|0;aI(84248,2,1,j|0)}j=(c[9372]|0)-1|0;k=c[10030]|0;if((h|0)<(j|0)){f=h;g=k}else{l=j;m=k;break}}}else{l=d;m=e}e=c[2264+(l<<2)>>2]|0;d=c[768]|0;g=c[774]|0;f=c[770]|0;cf(m|0,84016,(v=i,i=i+40|0,c[v>>2]=c[2664+(l<<2)>>2],c[v+8>>2]=e,c[v+16>>2]=d,c[v+24>>2]=g,c[v+32>>2]=f,v)|0);c[774]=(c[774]|0)+1;a[46624]=0;c[9372]=0;f=c[10030]|0;if((f|0)==0){i=b;return}aD(f|0);i=b;return}function tu(){var b=0,e=0,f=0,g=0,j=0,k=0,l=0;b=i;if(a[228352]|0){e=c[10030]|0;aI(78232,6,1,e|0);a[228352]=0}if(a[228344]|0){i=b;return}e=c[57144]|0;if((e|0)>12){f=(e|0)%13&-1}else{f=e}e=f+3|0;cf(c[10030]|0,75352,(v=i,i=i+8|0,c[v>>2]=227016+(((e|0)<0?0:e<<16>>16)<<4),v)|0);e=a[228528]|0;do{if(e<<24>>24==3){f=c[10030]|0;g=d[226992]|0;j=d[228368]|0;k=d[228536]|0;cf(f|0,75328,(v=i,i=i+24|0,c[v>>2]=g,c[v+8>>2]=j,c[v+16>>2]=k,v)|0)}else{k=c[10030]|0;if(e<<24>>24==1){j=c[57082]|0;aK(j|0,k|0);break}else{aI(75272,12,1,k|0);break}}}while(0);e=c[57144]|0;if((e|0)>12){l=(e|0)%13&-1}else{l=e}e=l+3|0;l=a[226984]|0;cf(c[10030]|0,75208,(v=i,i=i+24|0,h[v>>3]=+h[227008+(((e|0)<0?0:e<<16>>16)<<4)>>3]*+h[28540],c[v+8>>2]=l?131936:137232,c[v+16>>2]=l?131936:75184,v)|0);aI(75104,3,1,c[10030]|0);a[228344]=1;i=b;return}function tv(b,e){b=b|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0.0;f=i;g=a[227272]|0;do{if((c[56816]|0)>>>0>512){if(!g){j=20201;break}if(a[228352]|0){k=c[10030]|0;aI(78232,6,1,k|0);a[228352]=0}k=c[10030]|0;aI(78240,9,1,k|0);c[56816]=0;a[227272]=0;j=20201}else{if(!g){j=20201}}}while(0);if((j|0)==20201){if(a[228352]|0){g=c[10030]|0;aI(78232,6,1,g|0);a[228352]=0}g=c[10030]|0;aI(73816,7,1,g|0);g=a[228528]|0;if((g<<24>>24|0)==3){k=c[10030]|0;l=d[226992]|0;m=d[228368]|0;n=d[228536]|0;cf(k|0,73768,(v=i,i=i+24|0,c[v>>2]=l,c[v+8>>2]=m,c[v+16>>2]=n,v)|0)}else if((g<<24>>24|0)==1){cf(c[10030]|0,73752,(v=i,i=i+8|0,c[v>>2]=c[57082],v)|0)}g=c[57144]|0;do{if(a[228520]|0){n=(g|0)%5&-1;if((n|0)<=0){j=20209;break}m=c[10030]|0;l=c[228496+(n<<2)>>2]|0;cf(m|0,73720,(v=i,i=i+8|0,c[v>>2]=l,v)|0)}else{j=20209}}while(0);do{if((j|0)==20209){if((g|0)!=-1){break}l=c[10030]|0;cf(l|0,73720,(v=i,i=i+8|0,c[v>>2]=73656,v)|0)}}while(0);if(a[228360]|0){g=c[10030]|0;aI(73696,17,1,g|0)}g=c[10030]|0;aI(73688,4,1,g|0);a[227272]=1}o=+((c[(c[3524]|0)+12>>2]|0)-e|0)/10.0;cf(c[10030]|0,73840,(v=i,i=i+16|0,h[v>>3]=+(b>>>0>>>0)/10.0,h[v+8>>3]=o,v)|0);g=(c[56816]|0)+1|0;c[56816]=g;if((g&7|0)!=0){c[56740]=b;c[56736]=e;i=f;return}aI(73904,3,1,c[10030]|0);c[56740]=b;c[56736]=e;i=f;return}function tw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,j=0,k=0,l=0.0;f=i;g=+h[28552];uu(c[59466]|0);j=c[57108]|0;if((j|0)==0){k=0}else{k=bP(j|0)|0}c[59466]=k;if((a[37456]&1)!=0){a[237856]=0;qg(b,d,e);i=f;return}a[237856]=1;qg(b,d,e);a[237856]=0;if((aQ(e|0,74128)|0)!=0){a[237872]=1}c[59472]=0;h[5613]=1.0;uF(44912,216760,16);d=e;do{e=lJ(d,1,c[59466]|0,g,0.0,1,1,0)|0;if((a[e]|0)==0){break}cS[c[(c[3524]|0)+160>>2]&511]();if((a[e]|0)==125){uh(-1,203744,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{uh(-1,203528,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}d=e+1|0;}while((a[d]|0)!=0);uu(c[57108]|0);c[57108]=c[59466];c[59466]=0;l=+h[29737];if(+h[28552]!=g|l!=0.0){d=c[10030]|0;cf(d|0,216688,(v=i,i=i+16|0,h[v>>3]=g,h[v+8>>3]=l,v)|0);h[28552]=g;h[29737]=0.0}a[237872]=0;aI(73992,14,1,c[10030]|0);i=f;return}function tx(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0;h=i;j=(a[(c[7118]|0)+16|0]&1)!=0?179864:74128;cf(c[10028]|0,212640,(v=i,i=i+8|0,c[v>>2]=j,v)|0);if((c[5163]|0)==103){k=c[10028]|0;cf(k|0,212480,(v=i,i=i+8|0,c[v>>2]=j,v)|0)}k=e|0;l=c[k>>2]|0;m=e+4|0;n=c[m>>2]|0;cf(c[10028]|0,212456,(v=i,i=i+24|0,c[v>>2]=j,c[v+8>>2]=l,c[v+16>>2]=n,v)|0);n=(c[e+12>>2]|0)-(c[k>>2]|0)|0;k=(c[e+16>>2]|0)-(c[m>>2]|0)|0;cf(c[10028]|0,212400,(v=i,i=i+24|0,c[v>>2]=j,c[v+8>>2]=n,c[v+16>>2]=k,v)|0);k=g&65535;cf(c[10028]|0,212384,(v=i,i=i+32|0,c[v>>2]=j,c[v+8>>2]=b,c[v+16>>2]=d,c[v+24>>2]=k,v)|0);cf(c[10028]|0,212328,(v=i,i=i+24|0,c[v>>2]=j,c[v+8>>2]=b,c[v+16>>2]=d,v)|0);g=c[10028]|0;if((a[(c[7118]|0)+16|0]&1)==0){aI(211992,36,1,g|0)}else{n=(aa(aa(aa(d,b),k),(f|0)==1?3:1)+7|0)>>>3;cf(g|0,212216,(v=i,i=i+8|0,c[v>>2]=n,v)|0);n=c[10028]|0;aI(212128,41,1,n|0)}n=c[10028]|0;if((f|0)==1){cf(n|0,211968,(v=i,i=i+16|0,c[v>>2]=j,c[v+8>>2]=j,v)|0);i=h;return}else{cf(n|0,211952,(v=i,i=i+8|0,c[v>>2]=j,v)|0);i=h;return}}function ty(){aK(208808,c[10028]|0);aK(208736,c[10028]|0);aK(208680,c[10028]|0);aK(208648,c[10028]|0);aK(208592,c[10028]|0);aK(208408,c[10028]|0);aK(208344,c[10028]|0);aK(208256,c[10028]|0);aK(208200,c[10028]|0);aK(208152,c[10028]|0);aK(208136,c[10028]|0);aK(208080,c[10028]|0);aK(208024,c[10028]|0);aK(207952,c[10028]|0);return}function tz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;e=(aY(b|0,215352)|0)==0?77280:b;b=231040;while(1){f=c[b>>2]|0;if((f|0)==0){break}if((aY(c[f>>2]|0,e|0)|0)==0){g=20276;break}else{b=f+4|0}}if((g|0)==20276){i=d;return}if((cy(e|0,215312)|0)!=0){i=d;return}g=ut(8)|0;do{if((g|0)==0){gk();b=ut(8)|0;if((b|0)!=0){h=b;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=215288,v)|0)}else{h=g}}while(0);if((e|0)==0){j=0}else{j=bP(e|0)|0}e=h;c[e>>2]=j;c[h+4>>2]=c[57760];c[57760]=h;h=c[11252]|0;if((h|0)==5){k=214984}else if((h|0)==13){k=214760}else if((h|0)==9){k=214840}else if((h|0)==1|(h|0)==15){k=215232}else if((h|0)==10){k=214816}else if((h|0)==4){k=215016}else if((h|0)==2){k=215152}else if((h|0)==7){k=214920}else if((h|0)==6){k=214944}else if((h|0)==3|(h|0)==11){k=215072}else if((h|0)==12){k=214864}else{i=d;return}if(a[237912]|0){h=c[10028]|0;aI(215624,3,1,h|0);a[237912]=0}cf(c[10028]|0,214648,(v=i,i=i+16|0,c[v>>2]=c[e>>2],c[v+8>>2]=k,v)|0);i=d;return}function tA(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;g=i;cf(c[10028]|0,208848,(v=i,i=i+8|0,c[v>>2]=b,v)|0);if((e|0)<=0){j=c[10028]|0;k=aI(208840,6,1,j|0)|0;i=g;return}l=(uA(b|0)|0)+4|0;b=0;while(1){be(25336,141840,(v=i,i=i+8|0,h[v>>3]=+(~~(+h[(d+(b<<5)|0)+f>>3]*1.0e4+.5)|0)*1.0e-4,v)|0);m=(a[25336]|0)==48&(a[25337]|0)==46?25337:25336;n=(l+1|0)+(uA(m|0)|0)|0;if((n|0)>77){o=c[10028]|0;aI(152656,3,1,o|0);p=(uA(m|0)|0)+3|0}else{p=n}cf(c[10028]|0,73368,(v=i,i=i+8|0,c[v>>2]=m,v)|0);m=b+1|0;if((m|0)<(e|0)){l=p;b=m}else{break}}j=c[10028]|0;k=aI(208840,6,1,j|0)|0;i=g;return}function tB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,j=0,k=0,l=0.0;f=i;if((a[37456]&1)!=0){pO(b,d,e);i=f;return}if((a[e]|0)==0){i=f;return}if((c[7116]|0)!=0){j=c[10028]|0;aI(215952,7,1,j|0);c[7116]=0;a[228944]=0}pG(b,d);d=c[7230]|0;if((d|0)!=0){b=c[10028]|0;cf(b|0,199456,(v=i,i=i+8|0,c[v>>2]=d,v)|0)}aI(199448,2,1,c[10028]|0);h[5612]=-1.0e3;h[5611]=1.0e3;h[5613]=+g[(c[7118]|0)+92>>2]*10.0;uF(44912,199440,16);a[237912]=0;d=e;do{e=lJ(d,1,28840,+g[7208]*+g[(c[7118]|0)+92>>2]*10.0,0.0,1,1,0)|0;b=a[e]|0;if(b<<24>>24==0){break}if(a[237912]|0){j=c[10028]|0;aI(215624,3,1,j|0);a[237912]=0;k=a[e]|0}else{k=b}if(k<<24>>24==125){uh(-1,203744,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{uh(-1,203528,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}d=e+1|0;}while((a[d]|0)!=0);l=+h[5611]+ +h[5612];h[5612]=l;cf(c[10028]|0,199384,(v=i,i=i+8|0,h[v>>3]=(-0.0-l)/3.0,v)|0);d=c[7198]|0;if((d|0)==1){k=c[10028]|0;aI(199288,7,1,k|0)}else if((d|0)==0){aI(199360,7,1,c[10028]|0)}else if((d|0)==2){aI(199240,7,1,c[10028]|0)}if((c[7230]|0)!=0){d=c[10028]|0;aI(212688,9,1,d|0)}c[7116]=0;a[228944]=0;i=f;return}function tC(b){b=b|0;var d=0,e=0,f=0.0,h=0.0,j=0,k=0.0;d=i;if((a[37456]&1)!=0){pL(b);i=d;return 1}if((a[b]|0)==0){e=(c[7118]|0)+36|0;uB(28840,e|0);f=+g[7202];g[7208]=f;h=f}else{e=bk(b|0,148464)|0;if((e|0)!=0&e>>>0<51){uF(28840,b|0,e|0);a[e+28840|0]=0;tz(28840)}g[7208]=+g[7202];j=b+(e+1|0)|0;ca(j|0,205104,(v=i,i=i+8|0,c[v>>2]=28832,v)|0);h=+g[7208]}f=+g[(c[7118]|0)+92>>2];k=h*f;c[(c[3524]|0)+16>>2]=~~(k*f*10.0);c[(c[3524]|0)+20>>2]=~~(k*+g[(c[7118]|0)+92>>2]*10.0*6.0/10.0);i=d;return 1}function tD(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;e=i;i=i+520|0;f=e|0;g=e+256|0;if((b|0)==0){i=e;return}h=g|0;a[h]=0;j=e+264|0;a[j]=0;if(d){k=c[10028]|0;l=b+4|0;n=c[l>>2]|0;cf(k|0,197960,(v=i,i=i+8|0,c[v>>2]=n,v)|0);o=l}else{o=b+4|0}l=c[o>>2]|0;do{if((a[l]|0)!=60){n=uA(l|0)|0;if(n>>>0>3){k=l+(n-3|0)|0;uB(h|0,k|0)}else{uB(h|0,l|0)}a[h]=uI(a[h]|0|0)&255;k=g+1|0;a[k]=uI(a[k]|0|0)&255;k=g+2|0;a[k]=uI(a[k]|0|0)&255;if((c[b+8>>2]|0)!=0){break}uf(-1,219072,(v=i,i=i+8|0,c[v>>2]=c[o>>2],v)|0)}}while(0);L27092:do{if((a[h]|0)==0){if(!(a[14168]|0)){uf(-1,145320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=(c[o>>2]|0)+1|0;uB(j|0,g|0);g=bt(j|0,193632)|0;if((g|0)!=0){p=g;q=1;break}uf(-1,219160,(v=i,i=i+8|0,c[v>>2]=(c[o>>2]|0)+1,v)|0)}else{do{if((aY(h|0,197944)|0)!=0){if((aY(h|0,197896)|0)==0){break}if((aY(h|0,197648)|0)!=0){if((aY(h|0,197488)|0)!=0){uh(-1,197360,(v=i,i=i+8|0,c[v>>2]=c[o>>2],v)|0)}g=bF(c[b+8>>2]|0,193632)|0;if((g|0)!=0){p=g;q=0;break L27092}uf(-1,219072,(v=i,i=i+8|0,c[v>>2]=c[o>>2],v)|0)}if(!(a[14168]|0)){uf(-1,145320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=bU(197624)|0;l=c[b+8>>2]|0;if((g|0)==0){be(j|0,197560,(v=i,i=i+8|0,c[v>>2]=l,v)|0)}else{be(j|0,g|0,(v=i,i=i+8|0,c[v>>2]=l,v)|0)}if((a[j]|0)==0){uf(-1,197496,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}l=bt(j|0,193632)|0;if((l|0)!=0){p=l;q=1;break L27092}uf(-1,197672,(v=i,i=i+8|0,c[v>>2]=j,v)|0)}}while(0);if(!(a[14168]|0)){uf(-1,145320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}l=bU(197856)|0;g=c[b+8>>2]|0;if((l|0)==0){be(j|0,197784,(v=i,i=i+8|0,c[v>>2]=g,v)|0)}else{be(j|0,l|0,(v=i,i=i+8|0,c[v>>2]=g,v)|0)}if((a[j]|0)==0){uf(-1,197704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}g=bt(j|0,193632)|0;if((g|0)!=0){p=g;q=1;break}uf(-1,197672,(v=i,i=i+8|0,c[v>>2]=j,v)|0)}}while(0);h=f|0;L27133:do{if((a6(h|0,255,p|0)|0)==0){r=0;s=0;t=20384}else{g=f+1|0;l=b+12|0;k=b+8|0;n=0;u=0;L27135:while(1){do{if((u|0)==0){if((a_(h|0,197328,14)|0)==0){break}if((a_(h|0,197304,11)|0)==0){break}if(q){uh(-1,197240,(v=i,i=i+8|0,c[v>>2]=j,v)|0);break}else{uh(-1,197192,(v=i,i=i+8|0,c[v>>2]=c[o>>2],v)|0);break}}}while(0);do{if((a_(h|0,197176,9)|0)==0){w=(uA(h|0)|0)-9|0;x=ut(w)|0;if((x|0)==0){gk();y=ut(w)|0;if((y|0)==0){break L27135}else{z=y}}else{z=x}x=(a8(g|0,47)|0)+1|0;uB(z|0,x|0);a[a8(z|0,32)|0]=0;if((z|0)==0){A=0}else{A=bP(z|0)|0}c[l>>2]=A;if(d){B=z;t=20382;break}x=c[k>>2]|0;y=c[m>>2]|0;w=c[o>>2]|0;if((x|0)==0){cf(y|0,197016,(v=i,i=i+16|0,c[v>>2]=w,c[v+8>>2]=z,v)|0)}else{cf(y|0,197104,(v=i,i=i+24|0,c[v>>2]=w,c[v+8>>2]=z,c[v+16>>2]=x,v)|0)}if(q){C=z;t=20381}else{D=z;E=u;t=20387;break L27133}}else{C=n;t=20381}}while(0);if((t|0)==20381){t=0;if(d){B=C;t=20382}else{F=C}}if((t|0)==20382){t=0;x=c[10028]|0;aK(h|0,x|0);F=B}x=u+1|0;if((a6(h|0,255,p|0)|0)==0){r=F;s=x;t=20384;break L27133}else{n=F;u=x}}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=197160,v)|0)}}while(0);do{if((t|0)==20384){if(!q){D=r;E=s;t=20387;break}F=a2(p|0)|0;if((F|0)==0){G=r;H=s;break}uf(-1,196840,(v=i,i=i+16|0,c[v>>2]=j,c[v+8>>2]=F,v)|0)}}while(0);if((t|0)==20387){az(p|0);G=D;H=E}if((H|0)==0){if(q){uf(-1,218792,(v=i,i=i+8|0,c[v>>2]=j,v)|0)}else{uf(-1,218744,(v=i,i=i+8|0,c[v>>2]=c[o>>2],v)|0)}}do{if(d){o=c[10028]|0;aI(196784,13,1,o|0);if((G|0)==0){i=e;return}if((aY(G|0,196752)|0)!=0){break}o=c[10028]|0;aI(196648,32,1,o|0);o=c[10028]|0;aI(196568,57,1,o|0);o=c[10028]|0;aI(196488,70,1,o|0);o=c[10028]|0;aI(196456,31,1,o|0);o=c[10028]|0;aI(196784,13,1,o|0);t=20396}else{t=20396}}while(0);do{if((t|0)==20396){if((G|0)!=0){break}i=e;return}}while(0);uu(G);i=e;return}function tE(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,n=0,o=0,p=0;d=i;e=bP(195896|0)|0;f=c[57238]|0;if((f|0)==0){g=20410}else{h=uA(f|0)|0;f=(h+4|0)+(uA(b|0)|0)|0;h=ut(f)|0;do{if((h|0)==0){gk();j=ut(f)|0;if((j|0)!=0){k=j;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=195784,v)|0);return 0}else{k=h}}while(0);h=c[57238]|0;uB(k|0,h|0);h=uA(k|0)|0;f=(h|0)==0?0:h-1|0;h=a[k+f|0]|0;if(!((h<<24>>24|0)==47|(h<<24>>24|0)==0)){a[k+(f+1|0)|0]=47;a[k+(f+2|0)|0]=0}uC(k|0,b|0);f=bF(k|0,193632|0)|0;uu(k);if((f|0)==0){g=20410}else{l=f}}do{if((g|0)==20410){f=bU(195768|0)|0;if((f|0)!=0){k=uA(f|0)|0;h=(k+4|0)+(uA(b|0)|0)|0;k=ut(h)|0;do{if((k|0)==0){gk();j=ut(h)|0;if((j|0)!=0){n=j;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=195784,v)|0);return 0}else{n=k}}while(0);uB(n|0,f|0);k=uA(n|0)|0;h=(k|0)==0?0:k-1|0;k=a[n+h|0]|0;if(!((k<<24>>24|0)==47|(k<<24>>24|0)==0)){a[n+(h+1|0)|0]=47;a[n+(h+2|0)|0]=0}uC(n|0,b|0);h=bF(n|0,193632|0)|0;uu(n);if((h|0)!=0){l=h;break}}h=uA(e|0)|0;k=(h+4|0)+(uA(b|0)|0)|0;h=ut(k)|0;do{if((h|0)==0){gk();j=ut(k)|0;if((j|0)!=0){o=j;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=195784,v)|0);return 0}else{o=h}}while(0);uB(o|0,e|0);h=uA(o|0)|0;k=(h|0)==0?0:h-1|0;h=a[o+k|0]|0;if(!((h<<24>>24|0)==47|(h<<24>>24|0)==0)){a[o+(k+1|0)|0]=47;a[o+(k+2|0)|0]=0}uC(o|0,b|0);k=bF(o|0,193632|0)|0;uu(o);uu(e);if((k|0)!=0){p=k;i=d;return p|0}k=hA(b,193632)|0;if((k|0)==0){h=c[m>>2]|0;cf(h|0,195704|0,(v=i,i=i+8|0,c[v>>2]=b,v)|0);uq(2,0);h=c[m>>2]|0;cf(h|0,195600|0,(v=i,i=i+8|0,c[v>>2]=b,v)|0);h=c[m>>2]|0;aI(195528|0,49,1,h|0);h=c[m>>2]|0;aI(195448|0,34,1,h|0);uf(-1,195432,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else{p=k;i=d;return p|0}}}while(0);uu(e);p=l;i=d;return p|0}function tF(){var b=0,d=0,e=0,f=0,j=0,k=0.0,l=0,m=0,n=0;b=i;if(!(a[34544]&a[34552])){i=b;return}d=c[8618]|0;if((d|0)==34464){i=b;return}else{e=1;f=d}while(1){j=e+1|0;d=c[f+8>>2]|0;if((d|0)==34464){break}else{e=j;f=d}}if((e|0)<=0){i=b;return}cf(c[10030]|0,183280,(v=i,i=i+32|0,c[v>>2]=(c[8566]|0)+1,c[v+8>>2]=34336,c[v+16>>2]=34272,c[v+24>>2]=34192,v)|0);cf(c[10030]|0,183648,(v=i,i=i+8|0,c[v>>2]=j,v)|0);e=0;f=34464;while(1){if((e&3|0)==0){d=c[10030]|0;aI(73904,3,1,d|0)}k=+g[f+4>>2];cf(c[10030]|0,183624,(v=i,i=i+16|0,h[v>>3]=+g[f>>2],h[v+8>>3]=k,v)|0);d=e+1|0;if((d|0)<(j|0)){e=d;f=c[f+8>>2]|0}else{break}}aI(183600,4,1,c[10030]|0);f=(c[8566]|0)+1|0;L27243:do{if(a[34544]&a[34552]){e=0;while(1){if((e|0)>=20){break L27243}l=34564+(e<<3)|0;j=c[l>>2]|0;m=(j|0)==0;n=(j|0)==(f|0);if(m|n){break}else{e=e+1|0}}j=34560+(e<<3)|0;if(m){c[l>>2]=f;c[j>>2]=0;break}if(!n){break}c[j>>2]=1}}while(0);a[34336]=0;a[34272]=0;a[34192]=0;n=c[8619]|0;g[8616]=+g[n>>2];g[8617]=+g[n+4>>2];if((n|0)!=34464){f=n;do{n=c[f+12>>2]|0;c[8619]=n;c[n+8>>2]=34464;uu(f);f=c[8619]|0;}while((f|0)!=34464)}c[8619]=34464;c[8618]=34464;i=b;return}function tG(){var a=0,b=0,d=0,e=0,f=0,g=0;aF(230,c[10030]|0);a=c[58576]|0;aF(a>>>8|0,c[10030]|0);aF(a|0,c[10030]|0);if((c[58576]|0)==0){c[58576]=0;b=c[10030]|0;d=aF(234,b|0)|0;e=c[10030]|0;f=aF(15,e|0)|0;return}else{g=0}do{a=c[233888+(g<<2)>>2]|0;aF(a>>>8|0,c[10030]|0);aF(a|0,c[10030]|0);a=c[233488+(g<<2)>>2]|0;aF(a>>>8|0,c[10030]|0);aF(a|0,c[10030]|0);g=g+1|0;}while(g>>>0<(c[58576]|0)>>>0);c[58576]=0;b=c[10030]|0;d=aF(234,b|0)|0;e=c[10030]|0;f=aF(15,e|0)|0;return}function tH(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0.0,l=0,m=0.0,n=0.0,o=0,p=0.0,q=0,r=0.0,s=0,t=0,u=0;f=i;g=~~(+h[29420]*106.0*.5);if((e|0)==(-3|0)){o1(b,d);j=c[10030]|0;aI(125976,2,1,j|0);a[235520]=0;j=c[10030]|0;k=+(g|0)*3.0*.25;cf(j|0,179248,(v=i,i=i+8|0,h[v>>3]=k,v)|0);i=f;return}else if((e|0)==(-15|0)){j=b-g|0;l=d-g|0;o1(j,l);k=+(b>>>0>>>0);m=+(g|0);n=m*4.242640687119286*.125;o=~~(k-n);p=+(d>>>0>>>0);q=~~(p-n);o2(o,q);r=m*1.4142135623730951*.5;o1(~~(k+r),~~(p-r));s=~~(k+n);o2(s,q);q=g+b|0;t=g+d|0;o1(q,t);u=~~(p+n);o2(s,u);o1(~~(k-r),~~(p+r));o2(o,u);o1(j,d);j=(g*3&-1|0)/4&-1;o2(b-j|0,d);o1(j+b|0,d);o2(q,d);o1(b,l);o2(b,d-j|0);o1(b,j+d|0);o2(b,t);o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,179192,(v=i,i=i+8|0,h[v>>3]=m*3.0*.25,v)|0);i=f;return}else if((e|0)==(-7|0)){m=+(b>>>0>>>0);r=+(g|0);p=r*1.4142135623730951*.5;t=~~(m-p);k=+(d>>>0>>>0);j=~~(k-p);o1(t,j);n=r*4.242640687119286*.125;l=~~(m-n);q=~~(k-n);o2(l,q);u=~~(m+p);o1(u,j);j=~~(m+n);o2(j,q);q=~~(k+p);o1(u,q);u=~~(k+n);o2(j,u);o1(t,q);o2(l,u);o1(b-g|0,d);u=(g*3&-1|0)/4&-1;o2(b-u|0,d);o1(u+b|0,d);o2(g+b|0,d);o1(b,d-g|0);o2(b,d-u|0);o1(b,u+d|0);o2(b,g+d|0);o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,179192,(v=i,i=i+8|0,h[v>>3]=r*3.0*.25,v)|0);i=f;return}else if((e|0)==(-12|0)){r=+(b>>>0>>>0);n=+(g|0);k=n*1.4142135623730951*.5;p=+(d>>>0>>>0);u=~~(p+k);o1(~~(r+k),u);m=n*4.242640687119286*.125;l=~~(p+m);o2(~~(r+m),l);o1(~~(r-k),u);o2(~~(r-m),l);o1(b-g|0,d);l=(g*3&-1|0)/4&-1;o2(b-l|0,d);o1(l+b|0,d);o2(g+b|0,d);o1(b,d-g|0);o2(b,d-l|0);o1(b,l+d|0);o2(b,g+d|0);o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;m=n*3.0*.25;cf(c[10030]|0,178032,(v=i,i=i+8|0,h[v>>3]=m,v)|0);cf(c[10030]|0,178008,(v=i,i=i+8|0,h[v>>3]=m,v)|0);i=f;return}else if((e|0)==(-19|0)){l=d-g|0;o1(b,l);u=(g|0)/2&-1;o2(b,d-u|0);o1(b,u+d|0);o2(b,g+d|0);o1(b,l);u=(g|0)/4&-1;q=d-((g*3&-1|0)/4&-1)|0;o2(b-u|0,q);o1(b,l);o2(u+b|0,q);o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,179248,(v=i,i=i+8|0,h[v>>3]=+(g|0)*.5,v)|0);i=f;return}else if((e|0)==(-16|0)){q=b-g|0;o1(q,d-g|0);m=+(b>>>0>>>0);n=+(g|0);r=n*4.242640687119286*.125;u=~~(m-r);k=+(d>>>0>>>0);o2(u,~~(k-r));l=g+b|0;t=g+d|0;o1(l,t);j=~~(k+r);o2(~~(m+r),j);r=n*1.4142135623730951*.5;o1(~~(m-r),~~(k+r));o2(u,j);o1(q,d);q=(g*3&-1|0)/4&-1;o2(b-q|0,d);o1(q+b|0,d);o2(l,d);o1(b,q+d|0);o2(b,t);o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,179192,(v=i,i=i+8|0,h[v>>3]=n*3.0*.25,v)|0);i=f;return}else if((e|0)==(-10|0)){o1(b-g|0,d);t=(g*3&-1|0)/4&-1;o2(b-t|0,d);o1(t+b|0,d);o2(g+b|0,d);o1(b,d-g|0);o2(b,d-t|0);o1(b,t+d|0);o2(b,g+d|0);o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;n=+(g|0)*3.0*.25;cf(c[10030]|0,178032,(v=i,i=i+8|0,h[v>>3]=n,v)|0);cf(c[10030]|0,178008,(v=i,i=i+8|0,h[v>>3]=n,v)|0);i=f;return}else if((e|0)==(-2|0)){o1(b-g|0,d);t=(g*3&-1|0)/4&-1;q=b-t|0;o2(q,d);l=t+b|0;o1(l,d);o2(g+b|0,d);o1(b,d-g|0);j=d-t|0;o2(b,j);u=t+d|0;o1(b,u);o2(b,g+d|0);o1(q,j);o2(l,j);o2(l,u);o2(q,u);o2(q,j);j=(g|0)/2&-1;q=j+d|0;o1(b-j|0,q);o2(b,d-j|0);o2(j+b|0,q);i=f;return}else if((e|0)==(-20|0)){o1(b-g|0,d-g|0);o2(g+b|0,g+d|0);o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,179248,(v=i,i=i+8|0,h[v>>3]=+(g|0)*3.0*.25,v)|0);i=f;return}else if((e|0)==(-13|0)){o1(b-g|0,d-g|0);n=+(b>>>0>>>0);r=+(g|0);k=r*4.242640687119286*.125;m=+(d>>>0>>>0);o2(~~(n-k),~~(m-k));o1(g+b|0,g+d|0);o2(~~(n+k),~~(m+k));o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,179192,(v=i,i=i+8|0,h[v>>3]=r*3.0*.25,v)|0);i=f;return}else if((e|0)==(-14|0)){q=b-g|0;j=d-g|0;o1(q,j);r=+(b>>>0>>>0);k=+(g|0);m=k*4.242640687119286*.125;u=~~(r-m);n=+(d>>>0>>>0);l=~~(n-m);o2(u,l);p=k*1.4142135623730951*.5;o1(~~(r+p),~~(n-p));t=~~(r+m);o2(t,l);l=g+b|0;o=g+d|0;o1(l,o);s=~~(n+m);o2(t,s);o1(~~(r-p),~~(n+p));o2(u,s);o1(q,d);q=(g*3&-1|0)/4&-1;o2(b-q|0,d);o1(q+b|0,d);o2(l,d);o1(b,j);o2(b,d-q|0);o1(b,q+d|0);o2(b,o);o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,179248,(v=i,i=i+8|0,h[v>>3]=k*3.0*.25,v)|0);i=f;return}else if((e|0)==(-4|0)){o1(b-g|0,d);o=(g*3&-1|0)/4&-1;o2(b-o|0,d);o1(o+b|0,d);o2(g+b|0,d);o1(b,d-g|0);o2(b,d-o|0);o1(b,o+d|0);o2(b,g+d|0);o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,179248,(v=i,i=i+8|0,h[v>>3]=+(g|0)*3.0*.25,v)|0);i=f;return}else if((e|0)==(-6|0)){k=+(b>>>0>>>0);p=+(g|0);n=p*1.4142135623730951*.5;o=~~(k-n);r=+(d>>>0>>>0);q=~~(r-n);o1(o,q);m=p*4.242640687119286*.125;j=~~(k-m);l=~~(r-m);o2(j,l);s=~~(k+n);o1(s,q);q=~~(k+m);o2(q,l);l=~~(r+n);o1(s,l);s=~~(r+m);o2(q,s);o1(o,l);o2(j,s);o1(b-g|0,d);s=(g*3&-1|0)/4&-1;o2(b-s|0,d);o1(s+b|0,d);o2(g+b|0,d);o1(b,d-g|0);o2(b,d-s|0);o1(b,s+d|0);o2(b,g+d|0);o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,179248,(v=i,i=i+8|0,h[v>>3]=p*3.0*.25,v)|0);i=f;return}else if((e|0)==(-5|0)){o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,179192,(v=i,i=i+8|0,h[v>>3]=+(g|0)*3.0*.25,v)|0);i=f;return}else if((e|0)==(-9|0)){p=+(b>>>0>>>0);m=+(g|0);r=m*1.4142135623730951*.5;s=~~(p-r);n=+(d>>>0>>>0);j=~~(n-r);o1(s,j);k=m*4.242640687119286*.125;l=~~(p-k);o=~~(n-k);o2(l,o);q=~~(p+r);o1(q,j);j=~~(p+k);o2(j,o);o=~~(n+r);o1(q,o);q=~~(n+k);o2(j,q);o1(s,o);o2(l,q);o1(b-g|0,d);q=(g*3&-1|0)/4&-1;o2(b-q|0,d);o1(q+b|0,d);o2(g+b|0,d);o1(b,d-g|0);o2(b,d-q|0);o1(b,q+d|0);o2(b,g+d|0);o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;k=m*3.0*.25;cf(c[10030]|0,178032,(v=i,i=i+8|0,h[v>>3]=k,v)|0);cf(c[10030]|0,178008,(v=i,i=i+8|0,h[v>>3]=k,v)|0);i=f;return}else if((e|0)==(-18|0)){o1(b-g|0,d);o2(g+b|0,d);o1(b,d-g|0);o2(b,g+d|0);o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,179248,(v=i,i=i+8|0,h[v>>3]=+(g|0)*3.0*.25,v)|0);i=f;return}else if((e|0)==(-17|0)){q=b-g|0;l=d-g|0;o1(q,l);k=+(b>>>0>>>0);m=+(g|0);n=m*4.242640687119286*.125;o=~~(k-n);r=+(d>>>0>>>0);s=~~(r-n);o2(o,s);p=m*1.4142135623730951*.5;o1(~~(k+p),~~(r-p));j=~~(k+n);o2(j,s);s=g+b|0;u=g+d|0;o1(s,u);t=~~(r+n);o2(j,t);o1(~~(k-p),~~(r+p));o2(o,t);o1(q,d);q=(g*3&-1|0)/4&-1;o2(b-q|0,d);o1(q+b|0,d);o2(s,d);o1(b,l);o2(b,d-q|0);o1(b,q+d|0);o2(b,u);o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;p=m*3.0*.25;cf(c[10030]|0,178032,(v=i,i=i+8|0,h[v>>3]=p,v)|0);cf(c[10030]|0,178008,(v=i,i=i+8|0,h[v>>3]=p,v)|0);i=f;return}else if((e|0)==(-8|0)){p=+(b>>>0>>>0);m=+(g|0);r=m*1.4142135623730951*.5;k=+(d>>>0>>>0);u=~~(k+r);o1(~~(p+r),u);n=m*4.242640687119286*.125;q=~~(k+n);o2(~~(p+n),q);o1(~~(p-r),u);o2(~~(p-n),q);o1(b-g|0,d);q=(g*3&-1|0)/4&-1;o2(b-q|0,d);o1(q+b|0,d);o2(g+b|0,d);o1(b,q+d|0);o2(b,g+d|0);o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,179192,(v=i,i=i+8|0,h[v>>3]=m*3.0*.25,v)|0);i=f;return}else if((e|0)==(-11|0)){m=+(b>>>0>>>0);n=+(g|0);p=n*1.4142135623730951*.5;r=+(d>>>0>>>0);e=~~(r+p);o1(~~(m+p),e);k=n*4.242640687119286*.125;q=~~(r+k);o2(~~(m+k),q);o1(~~(m-p),e);o2(~~(m-k),q);o1(b-g|0,d);q=(g*3&-1|0)/4&-1;o2(b-q|0,d);o1(q+b|0,d);o2(g+b|0,d);o1(b,d-g|0);o2(b,d-q|0);o1(b,q+d|0);o2(b,g+d|0);o1(b,d);aI(125976,2,1,c[10030]|0);a[235520]=0;cf(c[10030]|0,179248,(v=i,i=i+8|0,h[v>>3]=n*3.0*.25,v)|0);i=f;return}else{o1(b,d);o2(b,d);i=f;return}}function tI(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;b=i;d=c[59128]|0;e=(c[d+8>>2]|0)-1|0;f=c[(c[d+16>>2]|0)+(e<<2)>>2]|0;g=c[(c[d+20>>2]|0)+(e<<2)>>2]|0;tJ(d);d=c[59128]|0;e=c[d>>2]|0;h=c[d+4>>2]|0;j=h<<1;k=c[d+12>>2]|0;d=ut(28)|0;do{if((d|0)==0){gk();l=ut(28)|0;if((l|0)!=0){m=l;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{m=d}}while(0);d=m;l=m;c[l>>2]=e;c[m+12>>2]=k;c[m+4>>2]=j;c[m+8>>2]=0;k=h<<3;h=ut(k)|0;do{if((h|0)==0){gk();e=ut(k)|0;if((e|0)!=0){n=e;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{n=h}}while(0);h=m+16|0;c[h>>2]=n;n=ut(k)|0;do{if((n|0)==0){gk();e=ut(k)|0;if((e|0)!=0){o=e;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{o=n}}while(0);n=m+20|0;c[n>>2]=o;o=ut(j)|0;do{if((o|0)==0){gk();k=ut(j)|0;if((k|0)!=0){p=k;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=174680,v)|0)}else{p=o}}while(0);c[m+24>>2]=p;do{if((c[h>>2]|0)!=0){if((c[n>>2]|0)==0){break}uE(p|0,0,j|0);if((m|0)==0){break}o=c[59128]|0;c[236448+(c[l>>2]<<2)>>2]=d;if((c[l>>2]|0)==0){c[59113]=d;c[59115]=d}c[59128]=d;uu(c[o+16>>2]|0);uu(c[o+20>>2]|0);uu(c[o+24>>2]|0);uu(o)}}while(0);c[c[(c[59128]|0)+16>>2]>>2]=f;c[c[(c[59128]|0)+20>>2]>>2]=g;a[c[(c[59128]|0)+24>>2]|0]=1;c[(c[59128]|0)+8>>2]=1;c[59100]=(c[59100]|0)+1;i=b;return}function tJ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;d=i;e=b+8|0;if((c[e>>2]|0)==0){i=d;return}f=c[b+16>>2]|0;g=c[b+20>>2]|0;h=c[b+24>>2]|0;if(a[236440]|0){j=c[10030]|0;aI(174600,4,1,j|0);a[236440]=0}j=b+12|0;b=c[j>>2]|0;do{if((c[59108]|0)!=(b|0)){if((c[e>>2]|0)<=1){if((a[h]&1)!=0){break}}k=c[10030]|0;cf(k|0,174584,(v=i,i=i+8|0,c[v>>2]=b,v)|0);c[59108]=c[j>>2]}}while(0);aI(174520,3,1,c[10030]|0);j=(c[f>>2]|0)-(c[59098]|0)|0;b=(c[g>>2]|0)-(c[59096]|0)|0;k=c[10030]|0;if((j|0)>-17&(b|0)>-17&(j|0)<16&(b|0)<16){aF(106,k|0);l=1}else{aF(105,k|0);l=0}k=c[e>>2]|0;if((k|0)>0){m=b;b=j;j=0;n=l;l=k;while(1){k=(j|0)>0;if(k){o=j-1|0;p=(c[f+(j<<2)>>2]|0)-(c[f+(o<<2)>>2]|0)|0;q=(c[g+(j<<2)>>2]|0)-(c[g+(o<<2)>>2]|0)|0}else{p=b;q=m}L27354:do{if((p|q|0)==0){do{if(k){if((a[h+(j-1|0)|0]&1)!=0){break}if((a[h+j|0]&1)!=0){break}c[59102]=(c[59102]|0)+1;r=n;s=p;t=q;break L27354}}while(0);if((a[h+j|0]&1)==0){u=p;w=q;x=20552;break}c[59104]=(c[59104]|0)+1;r=n;s=p;t=q}else{do{if(k){o=j+1|0;if((o|0)>=(l|0)){break}if((a[h+j|0]&1)==0){break}if((a[h+o|0]&1)==0){break}c[59104]=(c[59104]|0)+1;r=n;s=p;t=q;break L27354}}while(0);if((p|0)>-17&(q|0)>-17&(p|0)<16&(q|0)<16|k^1){u=p;w=q;x=20552;break}o=j+2|0;if((o|0)>=(l|0)){u=p;w=q;x=20552;break}if((a[h+j|0]&1)==0){u=p;w=q;x=20552;break}y=j+1|0;if((a[h+y|0]&1)!=0){u=p;w=q;x=20552;break}if((a[h+o|0]&1)==0){u=p;w=q;x=20552;break}o=f+(y<<2)|0;z=c[o>>2]|0;A=j-1|0;B=f+(A<<2)|0;C=z-(c[B>>2]|0)|0;if((C|0)<=-17){u=p;w=q;x=20552;break}D=g+(y<<2)|0;y=g+(A<<2)|0;A=(c[D>>2]|0)-(c[y>>2]|0)|0;if(!((A|0)>-17&(C|0)<16&(A|0)<16)){u=p;w=q;x=20552;break}A=f+(j<<2)|0;c[o>>2]=c[A>>2];c[A>>2]=z;z=c[D>>2]|0;o=g+(j<<2)|0;c[D>>2]=c[o>>2];c[o>>2]=z;u=(c[A>>2]|0)-(c[B>>2]|0)|0;w=z-(c[y>>2]|0)|0;x=20552}}while(0);do{if((x|0)==20552){x=0;if((u|0)>-17&(w|0)>-17&(u|0)<16&(w|0)<16){if(!n){k=c[10030]|0;aF(106,k|0)}if((a[h+j|0]&1)!=0){k=c[10030]|0;aF(97,k|0)}k=a[236552+(u+16|0)|0]|0;y=c[10030]|0;aF(k|0,y|0);y=a[236552+(w+16|0)|0]|0;k=c[10030]|0;aF(y|0,k|0);r=1;s=u;t=w;break}k=((u|0)>0?1:-1)+u|0;y=(k|0)/2&-1;z=((w|0)>0?1:-1)+w|0;B=(z|0)/2&-1;if(n&(k|0)>-34&(z|0)>-34&(k|0)<32&(z|0)<32){z=h+j|0;if((a[z]&1)!=0){k=c[10030]|0;aF(97,k|0)}k=a[236552+(y+16|0)|0]|0;A=c[10030]|0;aF(k|0,A|0);A=a[236552+(B+16|0)|0]|0;k=c[10030]|0;aF(A|0,k|0);if((a[z]&1)!=0){z=c[10030]|0;aF(97,z|0)}z=a[236552+((u+16|0)-y|0)|0]|0;y=c[10030]|0;aF(z|0,y|0);y=a[236552+((w+16|0)-B|0)|0]|0;B=c[10030]|0;aF(y|0,B|0);r=1;s=u;t=w;break}else{if(n){B=c[10030]|0;aF(105,B|0)}if((a[h+j|0]&1)!=0){B=c[10030]|0;aF(97,B|0)}B=f+(j<<2)|0;y=a[236520+(c[B>>2]>>5)|0]|0;z=c[10030]|0;aF(y|0,z|0);z=a[236520+(c[B>>2]&31)|0]|0;B=c[10030]|0;aF(z|0,B|0);B=g+(j<<2)|0;z=a[236520+(c[B>>2]>>5)|0]|0;y=c[10030]|0;aF(z|0,y|0);y=a[236520+(c[B>>2]&31)|0]|0;B=c[10030]|0;aF(y|0,B|0);r=0;s=u;t=w;break}}}while(0);B=j+1|0;y=c[e>>2]|0;if((B|0)<(y|0)){m=t;b=s;j=B;n=r;l=y}else{break}}}aF(90,c[10030]|0);c[59098]=c[f+((c[e>>2]|0)-1<<2)>>2];c[59096]=c[g+((c[e>>2]|0)-1<<2)>>2];c[e>>2]=0;i=d;return}function tK(b){b=b|0;var d=0,e=0,f=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0;d=i;if((b|0)!=1){a[237104]=0;i=d;return}b=c[59356]|0;e=a[237432]&1;f=c[59354]|0;j=c[59352]|0;k=c[59350]|0;l=c[59346]|0;m=a[237392]<<31>>31;n=+g[59360];o=c[59280]|0;cf(c[10030]|0,174184,(v=i,i=i+128|0,c[v>>2]=2,c[v+8>>2]=e,c[v+16>>2]=b,c[v+24>>2]=f,c[v+32>>2]=j,c[v+40>>2]=k,c[v+48>>2]=l,c[v+56>>2]=0,c[v+64>>2]=m,h[v+72>>3]=n,c[v+80>>2]=0,c[v+88>>2]=(b|0)==2&1,c[v+96>>2]=0,c[v+104>>2]=0,c[v+112>>2]=0,c[v+120>>2]=o,v)|0);do{if((c[59280]|0)>0){o=0;b=0;while(1){m=c[59282]|0;l=c[m+(b<<3)+4>>2]|0;cf(c[10030]|0,174136,(v=i,i=i+16|0,c[v>>2]=c[m+(b<<3)>>2],c[v+8>>2]=l,v)|0);l=o+1|0;do{if((o|0)>4){if((b|0)==((c[59280]|0)-1|0)){p=l;break}m=c[10030]|0;aI(84248,2,1,m|0);p=0}else{p=l}}while(0);l=b+1|0;if((l|0)<(c[59280]|0)){o=p;b=l}else{break}}if((p|0)==0){break}aF(10,c[10030]|0)}}while(0);uu(c[59282]|0);c[59282]=0;a[237104]=0;i=d;return}function tL(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0.0;d=i;i=i+8|0;e=d|0;f=e;c[11554]=b;if((b|0)>-1){g=(b|0)%5&-1}else{g=b}b=(g|0)==-1?2:g;g=(b|0)>0&a[46232];j=e;k=f+3|0;a[k]=0;l=f+2|0;a[l]=0;m=f+1|0;a[m]=0;a[j]=37;aI(j|0,1,4,c[10030]|0);a[k]=0;a[l]=0;a[m]=0;a[j]=12;aI(j|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[k]=-128;a[l]=0;a[m]=0;a[j]=7;aI(j|0,1,4,c[10030]|0);a[k]=0;a[l]=0;a[m]=0;a[j]=40;aI(j|0,1,4,c[10030]|0);a[k]=0;a[l]=0;a[m]=0;a[j]=12;aI(j|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[k]=0;a[l]=0;a[m]=0;a[j]=1;aI(j|0,1,4,c[10030]|0);a[k]=0;a[l]=0;a[m]=0;a[j]=38;aI(j|0,1,4,c[10030]|0);a[k]=0;a[l]=0;a[m]=0;a[j]=28;aI(j|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[k]=0;a[l]=0;a[m]=0;a[j]=1;aI(j|0,1,4,c[10030]|0);f=a[45616]|0;a[k]=0;a[l]=0;a[m]=f?0:34;a[j]=0;aI(j|0,1,4,c[10030]|0);f=~~(+h[5705]*26.37);a[k]=f>>>24&255;a[l]=f>>>16&255;a[m]=f>>>8&255;a[j]=f&255;aI(j|0,1,4,c[10030]|0);c[e>>2]=0;aI(j|0,1,4,c[10030]|0);e=c[11562]|0;a[k]=e>>>24&255;a[l]=e>>>16&255;a[m]=e>>>8&255;a[j]=e&255;aI(j|0,1,4,c[10030]|0);a[k]=0;a[l]=0;a[m]=0;a[j]=37;aI(j|0,1,4,c[10030]|0);a[k]=0;a[l]=0;a[m]=0;a[j]=12;aI(j|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[k]=0;a[l]=0;a[m]=0;a[j]=1;aI(j|0,1,4,c[10030]|0);j=(c[3524]|0)+60|0;if(g){c[j>>2]=78;g=b<<3;n=+h[5778];c[11282]=~~(+(c[238880+(g-8<<2)>>2]|0)*n*26.37);b=~~(+(c[238880+(g-7<<2)>>2]|0)*n*26.37);c[11283]=b;c[11284]=~~(+(c[238880+(g-6<<2)>>2]|0)*n*26.37);c[11285]=~~(+(c[238880+(g-5<<2)>>2]|0)*n*26.37);c[11286]=~~(+(c[238880+(g-4<<2)>>2]|0)*n*26.37);c[11287]=~~(+(c[238880+(g-3<<2)>>2]|0)*n*26.37);c[11288]=~~(+(c[238880+(g-2<<2)>>2]|0)*n*26.37);c[11289]=~~(+(c[238880+(g-1<<2)>>2]|0)*n*26.37);c[11292]=b;c[11290]=1;c[11552]=0;i=d;return}else{c[j>>2]=48;c[11552]=0;i=d;return}}function tM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ab=0;d=i;e=c[3524]|0;if((c[e+8>>2]|0)>>>0>a>>>0){if((c[e+12>>2]|0)>>>0<=b>>>0){f=20596}}else{f=20596}if((f|0)==20596){uh(-1,171568,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=b,v)|0)}e=c[11298]|0;g=a-e|0;h=c[11296]|0;j=b-h|0;k=(g|0)>-1?g:-g|0;l=j*10&-1;m=(l|0)>-1?l:-l|0;l=k*10&-1;do{if((l|0)<(m|0)){n=((((aa((k*25&-1|0)/(m|0)&-1,k)|0)/6&-1)*5&-1)+((m|0)/2&-1)|0)/5&-1}else{if((k|0)==0){i=d;return}else{n=(aa((m|0)/(k|0)&-1,(m|0)/24&-1)+l|0)/10&-1;break}}}while(0);l=c[11292]|0;m=c[11290]|0;if((n|0)>(l|0)){k=n;o=l;l=m;p=e;q=h;r=e;s=h;while(1){t=k-o|0;u=a-((aa(t,g)|0)/(n|0)&-1)|0;w=b-((aa(t,j)|0)/(n|0)&-1)|0;x=c[3524]|0;y=(c[x+8>>2]|0)>>>0>u>>>0;do{if((l&1|0)==0){if(y){if((c[x+12>>2]|0)>>>0>w>>>0){z=w;A=u;B=p;C=q;D=r;E=s}else{f=20614}}else{f=20614}if((f|0)==20614){f=0;uh(-1,171048,(v=i,i=i+16|0,c[v>>2]=u,c[v+8>>2]=w,v)|0);F=c[3524]|0;G=c[F+8>>2]|0;H=c[F+12>>2]|0;F=c[11298]|0;I=c[11296]|0;z=H>>>0>w>>>0?w:H;A=G>>>0>u>>>0?u:G;B=F;C=I;D=F;E=I}if((A|0)==(B|0)&(z|0)==(C|0)){J=B;K=C;L=D;M=E;break}tN();c[11298]=A;c[11296]=z;J=A;K=z;L=A;M=z}else{if(y){if((c[x+12>>2]|0)>>>0>w>>>0){N=r;O=s}else{f=20605}}else{f=20605}if((f|0)==20605){f=0;uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=u,c[v+8>>2]=w,v)|0);N=c[11298]|0;O=c[11296]|0}if((N|0)==(u|0)&(O|0)==(w|0)){J=u;K=w;L=u;M=w;break}I=c[11560]|0;if((I<<1|0)>102){tN();P=c[11560]|0}else{P=I}if((P|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;Q=1}else{Q=P}I=Q<<1;c[45200+(I<<2)>>2]=u;c[11298]=u;c[45200+((I|1)<<2)>>2]=w;c[11296]=w;c[11560]=Q+1;J=u;K=w;L=u;M=w}}while(0);w=(c[11290]|0)+1|0;u=(w|0)>7?0:w;c[11290]=u;w=c[45128+(u<<2)>>2]|0;c[11292]=w;if((t|0)>(w|0)){k=t;o=w;l=u;p=J;q=K;r=L;s=M}else{R=t;S=J;T=K;U=u;break}}}else{R=n;S=e;T=h;U=m}m=c[3524]|0;h=(c[m+8>>2]|0)>>>0>a>>>0;do{if((U&1|0)==0){if(h){if((c[m+12>>2]|0)>>>0>b>>>0){V=b;W=a;X=S;Y=T}else{f=20630}}else{f=20630}if((f|0)==20630){uh(-1,171048,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=b,v)|0);e=c[3524]|0;n=c[e+8>>2]|0;K=c[e+12>>2]|0;V=K>>>0>b>>>0?b:K;W=n>>>0>a>>>0?a:n;X=c[11298]|0;Y=c[11296]|0}if((W|0)==(X|0)&(V|0)==(Y|0)){break}tN();c[11298]=W;c[11296]=V}else{if(h){if((c[m+12>>2]|0)>>>0>b>>>0){Z=S;_=T}else{f=20621}}else{f=20621}if((f|0)==20621){uh(-1,171144,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=b,v)|0);Z=c[11298]|0;_=c[11296]|0}if((Z|0)==(a|0)&(_|0)==(b|0)){break}n=c[11560]|0;if((n<<1|0)>102){tN();$=c[11560]|0}else{$=n}if(($|0)==0){c[11300]=c[11298];c[11301]=c[11296];c[11560]=1;ab=1}else{ab=$}n=ab<<1;c[45200+(n<<2)>>2]=a;c[11298]=a;c[45200+((n|1)<<2)>>2]=b;c[11296]=b;c[11560]=ab+1}}while(0);c[11292]=(c[11292]|0)-R;i=d;return}function tN(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;b=i;i=i+8|0;d=b|0;e=c[11560]|0;if((e|0)==0){i=b;return}if((c[11552]|0)>0){tL(c[11554]|0);c[11552]=0;f=c[11560]|0}else{f=e}e=d|0;g=d+3|0;a[g]=0;h=d+2|0;a[h]=0;j=d+1|0;a[j]=0;a[e]=27;aI(e|0,1,4,c[10030]|0);a[g]=0;a[h]=0;a[j]=0;a[e]=16;aI(e|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;d=c[11300]|0;a[g]=d>>>24&255;a[h]=d>>>16&255;a[j]=d>>>8&255;a[e]=d&255;aI(e|0,1,4,c[10030]|0);d=(c[(c[3524]|0)+12>>2]|0)-(c[11301]|0)|0;a[g]=d>>>24&255;a[h]=d>>>16&255;a[j]=d>>>8&255;a[e]=d&255;aI(e|0,1,4,c[10030]|0);do{if((f|0)<3){a[g]=0;a[h]=0;a[j]=0;a[e]=54;d=c[10030]|0;aI(e|0,1,4,d|0);a[g]=0;a[h]=0;a[j]=0;a[e]=16;d=c[10030]|0;aI(e|0,1,4,d|0);c[11294]=(c[11294]|0)+1;d=c[11302]|0;a[g]=d>>>24&255;a[h]=d>>>16&255;a[j]=d>>>8&255;a[e]=d&255;d=c[10030]|0;aI(e|0,1,4,d|0);d=(c[(c[3524]|0)+12>>2]|0)-(c[11303]|0)|0;a[g]=d>>>24&255;a[h]=d>>>16&255;a[j]=d>>>8&255;a[e]=d&255;d=c[10030]|0;aI(e|0,1,4,d|0)}else{if((c[11560]<<1|0)>2){k=2}else{break}while(1){a[g]=0;a[h]=0;a[j]=0;a[e]=54;aI(e|0,1,4,c[10030]|0);a[g]=0;a[h]=0;a[j]=0;a[e]=16;aI(e|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;d=c[45200+(k<<2)>>2]|0;a[g]=d>>>24&255;a[h]=d>>>16&255;a[j]=d>>>8&255;a[e]=d&255;aI(e|0,1,4,c[10030]|0);d=k+2|0;l=(c[(c[3524]|0)+12>>2]|0)-(c[45200+((k|1)<<2)>>2]|0)|0;a[g]=l>>>24&255;a[h]=l>>>16&255;a[j]=l>>>8&255;a[e]=l&255;aI(e|0,1,4,c[10030]|0);if((d|0)<(c[11560]<<1|0)){k=d}else{break}}}}while(0);c[11560]=0;i=b;return}function tO(){var b=0,d=0,e=0,f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;b=i;i=i+8|0;d=b|0;e=d;f=i;i=i+32|0;if(!(a[45664]|0)){i=b;return}j=uA(45688)|0;k=j>>>0<31?j:31;j=aQ(45688,75096)|0;if((j|0)==0){l=aQ(45688,75048)|0;if((l|0)==0){m=1;n=-112;o=k}else{p=l;q=20651}}else{p=j;q=20651}if((q|0)==20651){j=p-45688|0;m=2;n=-68;o=(j|0)<(k|0)?j:k}k=aQ(45688,74992)|0;if((k|0)==0){j=aQ(45688,74976)|0;if((j|0)==0){r=0;s=o}else{t=j;q=20654}}else{t=k;q=20654}if((q|0)==20654){k=t-45688|0;r=1;s=(k|0)<(o|0)?k:o}o=aQ(45688,171536)|0;if((o|0)==0){k=aQ(45688,171480)|0;if((k|0)==0){u=0;v=s}else{w=k;q=20657}}else{w=o;q=20657}if((q|0)==20657){o=w-45688|0;u=1;v=(o|0)<(s|0)?o:s}s=aQ(45688,171448)|0;do{if((s|0)==0){o=aQ(45688,171424)|0;if((o|0)!=0){x=o;q=20661;break}o=aQ(45688,171408)|0;if((o|0)==0){y=0;z=v}else{x=o;q=20661}}else{x=s;q=20661}}while(0);if((q|0)==20661){q=x-45688|0;y=1;z=(q|0)<(v|0)?q:v}v=f|0;q=z+1|0;uF(v|0,45688,q|0);if((uA(45688)|0)>>>0>=q>>>0){a[f+((q|0)==0?0:z)|0]=0}z=d;q=e+3|0;a[q]=0;x=e+2|0;a[x]=0;s=e+1|0;a[s]=0;a[z]=37;aI(z|0,1,4,c[10030]|0);a[q]=0;a[x]=0;a[s]=0;a[z]=12;aI(z|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[q]=-128;a[x]=0;a[s]=0;a[z]=10;aI(z|0,1,4,c[10030]|0);a[q]=0;a[x]=0;a[s]=0;a[z]=40;aI(z|0,1,4,c[10030]|0);a[q]=0;a[x]=0;a[s]=0;a[z]=12;aI(z|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[q]=0;a[x]=0;a[s]=0;a[z]=2;aI(z|0,1,4,c[10030]|0);a[q]=0;a[x]=0;a[s]=0;a[z]=82;aI(z|0,1,4,c[10030]|0);a[q]=0;a[x]=0;a[s]=1;a[z]=76;aI(z|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[q]=0;a[x]=0;a[s]=0;a[z]=2;aI(z|0,1,4,c[10030]|0);e=~~(+h[5710]*(-0.0- +g[11418])*35.28);a[q]=e>>>24&255;a[x]=e>>>16&255;a[s]=e>>>8&255;a[z]=e&255;aI(z|0,1,4,c[10030]|0);c[d>>2]=0;aI(z|0,1,4,c[10030]|0);e=c[11262]|0;a[q]=e>>>24&255;a[x]=e>>>16&255;a[s]=e>>>8&255;a[z]=e&255;aI(z|0,1,4,c[10030]|0);e=c[11262]|0;a[q]=e>>>24&255;a[x]=e>>>16&255;a[s]=e>>>8&255;a[z]=e&255;aI(z|0,1,4,c[10030]|0);a[q]=0;a[x]=0;a[s]=m;a[z]=n;aI(z|0,1,4,c[10030]|0);aF(r|0,c[10030]|0);aF(u|0,c[10030]|0);aF(y|0,c[10030]|0);y=c[11252]|0;if((y|0)==9|(y|0)==2){u=c[10030]|0;aF(-18|0,u|0)}else if((y|0)==8){aF(-120|0,c[10030]|0)}else if((y|0)==11|(y|0)==3){aF(-94|0,c[10030]|0)}else if((y|0)==12|(y|0)==13){aF(-14|0,c[10030]|0)}else{aF(1,c[10030]|0)}aF(0,c[10030]|0);aF(0,c[10030]|0);aF(0,c[10030]|0);aF(0,c[10030]|0);y=0;while(1){if(y>>>0<(uA(v|0)|0)>>>0){A=a[f+y|0]|0}else{A=0}aF(A|0,c[10030]|0);aF(0,c[10030]|0);u=y+1|0;if((u|0)<32){y=u}else{B=0;break}}while(1){if(B>>>0<(uA(v|0)|0)>>>0){C=a[f+B|0]|0}else{C=0}aF(C|0,c[10030]|0);aF(0,c[10030]|0);y=B+1|0;if((y|0)<64){B=y}else{D=0;break}}do{aF(0,c[10030]|0);aF(0,c[10030]|0);D=D+1|0;}while((D|0)<32);c[d>>2]=0;aI(z|0,1,4,c[10030]|0);c[d>>2]=0;aI(z|0,1,4,c[10030]|0);c[d>>2]=0;aI(z|0,1,4,c[10030]|0);c[d>>2]=0;aI(z|0,1,4,c[10030]|0);c[d>>2]=0;aI(z|0,1,4,c[10030]|0);c[d>>2]=0;aI(z|0,1,4,c[10030]|0);aF(0,c[10030]|0);aF(0,c[10030]|0);aF(0,c[10030]|0);aF(0,c[10030]|0);aF(0,c[10030]|0);aF(0,c[10030]|0);aF(0,c[10030]|0);aF(0,c[10030]|0);aF(0,c[10030]|0);aF(0,c[10030]|0);aF(0,c[10030]|0);aF(0,c[10030]|0);a[q]=0;a[x]=0;a[s]=0;a[z]=37;aI(z|0,1,4,c[10030]|0);a[q]=0;a[x]=0;a[s]=0;a[z]=12;aI(z|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;a[q]=0;a[x]=0;a[s]=0;a[z]=2;aI(z|0,1,4,c[10030]|0);i=b;return}function tP(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0;b=i;i=i+8|0;d=b|0;if((c[11560]|0)==0){i=b;return}if((c[11552]|0)>0){tL(c[11554]|0);c[11552]=0}e=d|0;f=d+3|0;a[f]=0;g=d+2|0;a[g]=0;h=d+1|0;a[h]=0;a[e]=27;aI(e|0,1,4,c[10030]|0);a[f]=0;a[g]=0;a[h]=0;a[e]=16;aI(e|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;d=c[11300]|0;a[f]=d>>>24&255;a[g]=d>>>16&255;a[h]=d>>>8&255;a[e]=d&255;aI(e|0,1,4,c[10030]|0);d=(c[(c[3524]|0)+12>>2]|0)-(c[11301]|0)|0;a[f]=d>>>24&255;a[g]=d>>>16&255;a[h]=d>>>8&255;a[e]=d&255;aI(e|0,1,4,c[10030]|0);d=2;while(1){j=(d|0)<(c[11560]<<1|0);a[f]=0;a[g]=0;a[h]=0;a[e]=54;aI(e|0,1,4,c[10030]|0);a[f]=0;a[g]=0;a[h]=0;a[e]=16;aI(e|0,1,4,c[10030]|0);c[11294]=(c[11294]|0)+1;if(!j){break}j=c[45200+(d<<2)>>2]|0;a[f]=j>>>24&255;a[g]=j>>>16&255;a[h]=j>>>8&255;a[e]=j&255;aI(e|0,1,4,c[10030]|0);j=(c[(c[3524]|0)+12>>2]|0)-(c[45200+((d|1)<<2)>>2]|0)|0;a[f]=j>>>24&255;a[g]=j>>>16&255;a[h]=j>>>8&255;a[e]=j&255;aI(e|0,1,4,c[10030]|0);d=d+2|0}d=c[11300]|0;a[f]=d>>>24&255;a[g]=d>>>16&255;a[h]=d>>>8&255;a[e]=d&255;aI(e|0,1,4,c[10030]|0);d=(c[(c[3524]|0)+12>>2]|0)-(c[11301]|0)|0;a[f]=d>>>24&255;a[g]=d>>>16&255;a[h]=d>>>8&255;a[e]=d&255;aI(e|0,1,4,c[10030]|0);c[11560]=0;i=b;return}function tQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=i;i=i+8|0;j=f|0;if((e|0)==0){i=f;return}if((a[e]|0)==0){i=f;return}do{if((a[37456]&1)==0){if((cy(e|0,170608)|0)==0){break}k=c[3524]|0;if((c[k+8>>2]|0)>>>0>b>>>0){if((c[k+12>>2]|0)>>>0>d>>>0){l=d;m=b}else{n=20699}}else{n=20699}if((n|0)==20699){uh(-1,171048,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=d,v)|0);k=c[3524]|0;o=c[k+8>>2]|0;p=c[k+12>>2]|0;l=p>>>0>d>>>0?d:p;m=o>>>0>b>>>0?b:o}if(!((m|0)==(c[11298]|0)&(l|0)==(c[11296]|0))){tN();c[11298]=m;c[11296]=l}if((c[11280]|0)!=(c[11562]|0)){o=j|0;p=j+3|0;a[p]=0;k=j+2|0;a[k]=0;q=j+1|0;a[q]=0;a[o]=24;r=c[10030]|0;aI(o|0,1,4,r|0);a[p]=0;a[k]=0;a[q]=0;a[o]=12;r=c[10030]|0;aI(o|0,1,4,r|0);c[11294]=(c[11294]|0)+1;r=c[11562]|0;a[p]=r>>>24&255;a[k]=r>>>16&255;a[q]=r>>>8&255;a[o]=r&255;r=c[10030]|0;aI(o|0,1,4,r|0);c[11280]=c[11562]}h[5613]=1.0;uF(44912,170592,16);a[238232]=0;c[59556]=0;c[59562]=45688;g[59560]=+g[11418];if(((c[11414]|0)-1|0)>>>0<2){a[238208]=1}r=j|0;o=j+3|0;a[o]=0;q=j+2|0;a[q]=0;k=j+1|0;a[k]=0;a[r]=22;p=c[10030]|0;aI(r|0,1,4,p|0);a[o]=0;a[q]=0;a[k]=0;a[r]=12;p=c[10030]|0;aI(r|0,1,4,p|0);c[11294]=(c[11294]|0)+1;a[o]=0;a[q]=0;a[k]=0;a[r]=24;k=c[10030]|0;aI(r|0,1,4,k|0);k=e;do{r=lJ(k,1,c[59562]|0,+g[59560],0.0,1,1,0)|0;if((a[r]|0)==0){break}cS[c[(c[3524]|0)+160>>2]&511]();if((a[r]|0)==125){uh(-1,203744,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{uh(-1,203528,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}k=r+1|0;}while((a[k]|0)!=0);k=c[11414]|0;if((k-1|0)>>>0<2){r=(c[11298]|0)-b|0;if((c[11262]|0)==0){s=0}else{s=(c[11296]|0)-d|0}c[11414]=0;a[238208]=0;if((k|0)==2){tQ(b-r|0,d-s|0,e)}else if((k|0)==1){tQ(b-((r|0)/2&-1)|0,d-((s|0)/2&-1)|0,e)}c[11414]=k}tO();g[59564]=0.0;i=f;return}}while(0);n$(b,d,e);i=f;return}function tR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;f=i;do{if((a[37456]&1)==0){if((cy(e|0,170608)|0)==0){break}h[5613]=1.0;a[238320]=0;uF(44912,216760,16);c[11678]=b;c[11674]=d;g=e;while(1){j=lJ(g,1,179864,1.0,0.0,1,1,0)|0;if((a[j]|0)==0){k=20745;break}cS[c[(c[3524]|0)+160>>2]&511]();if((a[j]|0)==125){uh(-1,203744,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{uh(-1,203528,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}l=j+1|0;if((a[l]|0)==0){k=20743;break}else{g=l}}if((k|0)==20745){i=f;return}else if((k|0)==20743){i=f;return}}}while(0);g=uA(e|0)|0;l=c[11676]|0;if((g+b|0)>>>0>l>>>0){j=l-g|0;m=(j|0)<0?0:j}else{m=b}if(m>>>0<l>>>0){n=e;o=m;p=l}else{i=f;return}while(1){l=a[n]|0;if(l<<24>>24==0){k=20742;break}do{if(p>>>0<o>>>0|(c[11672]|0)>>>0<d>>>0){q=p}else{m=aa(p,d)+o|0;if((a[(c[11680]|0)+m|0]|0)>=5){q=p;break}a[(c[11684]|0)+m|0]=l;m=aa(c[11676]|0,d)+o|0;a[(c[11680]|0)+m|0]=5;q=c[11676]|0}}while(0);l=o+1|0;if(l>>>0<q>>>0){n=n+1|0;o=l;p=q}else{k=20744;break}}if((k|0)==20742){i=f;return}else if((k|0)==20744){i=f;return}}function tS(){var a=0,b=0,d=0;a=c[13656]|0;if((a|0)==0){return}b=c[13602]|0;tY(4,1,a<<1);if((a|0)>0){d=0;do{tZ(c[b+(d<<2)>>2]|0);d=d+1|0;}while((d|0)<(a|0))}c[13656]=0;return}function tT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;if((c[13642]|0)==(a|0)){return}c[13642]=a;tS();if((a|0)>8){b=(a|0)%9&-1}else{b=a}a=(c[3524]|0)+60|0;if((b|0)<1){c[a>>2]=106;return}c[a>>2]=80;a=b<<3;b=c[13624]|0;d=c[242808+(a-8<<2)>>2]|0;if((d|0)==0){e=0}else{e=(aa(d<<1,b)>>>0)/3>>>0}c[13570]=e;e=c[242808+(a-7<<2)>>2]|0;if((e|0)==0){f=0}else{f=(aa(e<<1,b)>>>0)/3>>>0}c[13571]=f;e=c[242808+(a-6<<2)>>2]|0;if((e|0)==0){g=0}else{g=(aa(e<<1,b)>>>0)/3>>>0}c[13572]=g;g=c[242808+(a-5<<2)>>2]|0;if((g|0)==0){h=0}else{h=(aa(g<<1,b)>>>0)/3>>>0}c[13573]=h;h=c[242808+(a-4<<2)>>2]|0;if((h|0)==0){i=0}else{i=(aa(h<<1,b)>>>0)/3>>>0}c[13574]=i;i=c[242808+(a-3<<2)>>2]|0;if((i|0)==0){j=0}else{j=(aa(i<<1,b)>>>0)/3>>>0}c[13575]=j;j=c[242808+(a-2<<2)>>2]|0;if((j|0)==0){k=0}else{k=(aa(j<<1,b)>>>0)/3>>>0}c[13576]=k;k=c[242808+(a-1<<2)>>2]|0;if((k|0)==0){l=0}else{l=(aa(k<<1,b)>>>0)/3>>>0}c[13577]=l;c[13580]=f;c[13578]=1;return}function tU(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;d=c[3524]|0;e=c[d+8>>2]|0;f=e>>>0>a>>>0?a:e;e=c[d+12>>2]|0;d=e>>>0>b>>>0?b:e;e=f-(c[13598]|0)|0;b=d-(c[13596]|0)|0;a=(e|0)>-1?e:-e|0;g=b*10&-1;h=(g|0)>-1?g:-g|0;g=a*10&-1;do{if((g|0)<(h|0)){i=((((aa((a*25&-1|0)/(h|0)&-1,a)|0)/6&-1)*5&-1)+((h|0)/2&-1)|0)/5&-1}else{if((a|0)==0){return}else{i=(aa((h|0)/(a|0)&-1,(h|0)/24&-1)+g|0)/10&-1;break}}}while(0);g=c[13580]|0;h=c[13578]|0;if((i|0)>(g|0)){a=i;j=g;g=h;while(1){k=a-j|0;l=f-((aa(k,e)|0)/(i|0)&-1)|0;m=d-((aa(k,b)|0)/(i|0)&-1)|0;if((g&1|0)==0){m5(l,m)}else{m6(l,m)}m=(c[13578]|0)+1|0;l=(m|0)>7?0:m;c[13578]=l;m=c[54280+(l<<2)>>2]|0;c[13580]=m;if((k|0)>(m|0)){a=k;j=m;g=l}else{n=k;o=l;break}}}else{n=i;o=h}if((o&1|0)==0){m5(f,d)}else{m6(f,d)}c[13580]=(c[13580]|0)-n;return}function tV(){var b=0,d=0,e=0,f=0.0,g=0,i=0,j=0,k=0;uD(54528,89360,15);b=uA(54528)|0;d=c[13630]|0;e=c[d>>2]|0;L27708:do{if((e|0)==0){f=1.0}else{g=0;i=e;while(1){if((uA(i|0)|0)==(b|0)){if((uJ(54528,i|0,b|0)|0)==0){break}}j=g+1|0;k=c[d+(j<<4)>>2]|0;if((k|0)==0){f=1.0;break L27708}else{g=j;i=k}}f=+h[d+(g<<4)+8>>3]}}while(0);c[13628]=12;d=c[3524]|0;c[d+16>>2]=((((c[d+8>>2]|0)+182|0)>>>0)/((c[13604]|0)>>>0)>>>0)*12&-1;d=c[3524]|0;c[d+20>>2]=~~(f*+(aa((((c[d+8>>2]|0)+182|0)>>>0)/((c[13604]|0)>>>0)>>>0,c[13628]|0)>>>0>>>0)*.527);c[13622]=1;a[54472]=0;c[13604]=432;a[54400]=0;a[54336]=0;a[54576]=0;a[54424]=0;c[13646]=c[13586];c[13647]=c[13587];c[13648]=c[13588];c[13649]=c[13589];c[13650]=c[13590];c[13651]=c[13591];c[13652]=c[13592];c[13653]=c[13593];c[13654]=c[13594];c[13655]=c[13595];c[13554]=0;return}function tW(a){a=a|0;var b=0,d=0,e=0.0,f=0,g=0.0,j=0;b=i;d=a>>4;e=+(d|0)/100.0;f=a&15;do{if((f|0)==0){uD(243392,164560,23);i=b;return}else if((f|0)==2|(f|0)==5){a=(d|0)%5&-1;if((a|0)==4){g=.5;j=20811;break}else if((a|0)==2){g=.25;j=20811;break}else if((a|0)==1){j=20810;break}else if((a|0)==0){g=0.0;j=20811;break}else if((a|0)==3){g=.75;j=20811;break}else{j=20809;break}}else if((f|0)==4){be(243392,164584,(v=i,i=i+24|0,c[v>>2]=55376,h[v+8>>3]=e,c[v+16>>2]=0,v)|0);i=b;return}else if((f|0)==1){j=20809}else{be(243392,164424,(v=i,i=i+16|0,c[v>>2]=55372,c[v+8>>2]=0,v)|0);i=b;return}}while(0);if((j|0)==20809){if(e==1.0){j=20810}else{g=e;j=20811}}if((j|0)==20810){uB(243392,55372);i=b;return}else if((j|0)==20811){j=bW(55376)|0;f=bW(55380)|0;e=(1.0-g)*255.0;d=~~(e+g*+(bW(55384)|0));be(243392,164536,(v=i,i=i+32|0,c[v>>2]=~~(e+g*+(j|0)),c[v+8>>2]=~~(e+g*+(f|0)),c[v+16>>2]=d,c[v+24>>2]=0,v)|0);i=b;return}}function tX(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0.0,j=0,k=0,l=0,m=0,n=0;f=i;g=+h[6936];if((a[e]|0)==0){i=f;return}do{if((a[37456]&1)==0){if((cy(e|0,170608)|0)==0){break}j=a[55472]|0;if(!(j&(c[13838]|0)==(b|0)&(c[13834]|0)==(d|0))){if(!j){j=c[10030]|0;aI(162736,17,1,j|0);a[55472]=1;a[72328]=0}j=c[10030]|0;k=(c[13832]|0)-d|0;cf(j|0,162768,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=k,v)|0);c[13838]=b;c[13834]=d}h[5613]=1.0;uF(44912,216760,16);a[238512]=0;h[29815]=+h[6936];k=c[13866]|0;if((aY(k|0,164216)|0)==0){l=20829}else{if((aY(k|0,173184)|0)==0){l=20829}else{m=e}}if((l|0)==20829){a[238488]=1;m=e}do{k=lJ(m,1,179864,g,0.0,1,1,0)|0;if((a[k]|0)==0){break}cS[c[(c[3524]|0)+160>>2]&511]();if((a[k]|0)==125){uh(-1,203744,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else{uh(-1,203528,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}m=k+1|0;}while((a[m]|0)!=0);k=c[13866]|0;if((aY(k|0,164216)|0)==0){l=20837}else{if((aY(k|0,173184)|0)==0){l=20837}}if((l|0)==20837){j=(c[13838]|0)-b|0;if((c[13840]|0)==0){n=0}else{n=(c[13834]|0)-d|0}c[13866]=179864;a[238488]=0;do{if((aY(k|0,164216)|0)==0){tX(b-j|0,d-n|0,e)}else{if((aY(k|0,173184)|0)!=0){break}tX(b-((j|0)/2&-1)|0,d-((n|0)/2&-1)|0,e)}}while(0);c[13866]=k}h[6936]=g;h[29816]=0.0;i=f;return}}while(0);mO(b,d,e);i=f;return}function tY(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+24|0;g=f|0;h=f+8|0;j=f+16|0;if(b>>>0>=16){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167440,v)|0)}if(d>>>0>=128){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167408,v)|0)}if((e|0)<=-1){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167384,v)|0)}k=d<<5&4064|b<<12&61440;if((e|0)<31){b=k|e&31;d=j;if(b>>>0>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[d]=k>>>8&255;a[j+1|0]=b&255;b=c[10030]|0;aI(d|0,1,2,b|0);i=f;return}b=k|31;d=h;if(b>>>0>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[d]=k>>>8&255;a[h+1|0]=b&255;aI(d|0,1,2,c[10030]|0);d=g;if((e|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((e|0)>=32768){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}a[d]=e>>>8&255;a[g+1|0]=e&255;aI(d|0,1,2,c[10030]|0);i=f;return}function tZ(b){b=b|0;var d=0,e=0,f=0;d=i;i=i+8|0;e=d|0;if((b|0)<=-32769){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167584,v)|0)}if((b|0)<32768){f=e;a[f]=b>>>8&255;a[e+1|0]=b&255;b=c[10030]|0;aI(f|0,1,2,b|0);i=d;return}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}function t_(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;g=i;i=i+8|0;h=g|0;j=((e|0)>254?3:1)+e|0;k=j&1;l=(k|0)==0;tY(b,d,j);j=c[10030]|0;do{if((e|0)<255){d=e<<24>>24;aF(d|0,j|0)}else{d=a[241904]|0;aF(d|0,j|0);d=h;if((e|0)<32768){a[d]=e>>>8&255;a[h+1|0]=e&255;b=c[10030]|0;aI(d|0,1,2,b|0);break}else{uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=167472,v)|0)}}}while(0);do{if((f|0)==0){h=k+e|0;if((h|0)>0){m=0}else{break}do{aF(0,c[10030]|0);m=m+1|0;}while((m|0)<(h|0))}else{aI(f|0,1,e|0,c[10030]|0)}}while(0);if(l){i=g;return}aF(a[241896]|0|0,c[10030]|0);i=g;return}function t$(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;f=c[60208]|0;g=c[f>>2]|0;h=a[240824]|0;if((g&1|0)==0){if(h){i=c[60230]|0;j=c[60226]|0;k=c[10030]|0;aF(29,k|0);k=j>>>5&31|32;l=c[10030]|0;aF(k|0,l|0);l=j&31|96;j=c[10030]|0;aF(l|0,j|0);j=i>>>5&31|32;l=c[10030]|0;aF(j|0,l|0);l=i&31|64;i=c[10030]|0;aF(l|0,i|0);i=c[60228]|0;l=c[60224]|0;j=l>>>5&31|32;k=c[10030]|0;aF(j|0,k|0);k=l&31|96;l=c[10030]|0;aF(k|0,l|0);l=i>>>5&31|32;k=c[10030]|0;aF(l|0,k|0);k=i&31|64;i=c[10030]|0;aF(k|0,i|0);a[240824]=0;i=c[60208]|0;m=i;n=c[i>>2]|0}else{m=f;n=g}c[m>>2]=n>>>1;return}c[60228]=b;if(h){c[60224]=d}else{c[60230]=b;c[60224]=d;c[60226]=d;a[240824]=1}c[f>>2]=(c[f>>2]|0)>>>1|-2147483648;if((e|0)==0){return}e=c[60230]|0;f=c[60226]|0;aF(29,c[10030]|0);aF(f>>>5&31|32|0,c[10030]|0);aF(f&31|96|0,c[10030]|0);aF(e>>>5&31|32|0,c[10030]|0);aF(e&31|64|0,c[10030]|0);e=c[60228]|0;f=c[60224]|0;aF(f>>>5&31|32|0,c[10030]|0);aF(f&31|96|0,c[10030]|0);aF(e>>>5&31|32|0,c[10030]|0);aF(e&31|64|0,c[10030]|0);a[240824]=0;return}function t0(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;e=b>>>0>4095?4095:b;b=d>>>0>3131?3131:d;d=(e>>>7)+32|0;f=e>>>2&31|64;g=(b>>>7)+32|0;h=b>>>2&31|96;i=e&3|b<<2&12|96;if((a[226904]|0|0)!=(g|0)){b=c[10030]|0;aF(g|0,b|0)}if((a[226920]|0|0)!=(i|0)){b=c[10030]|0;aF(i|0,b|0)}do{if((a[226896]|0|0)==(h|0)){if((a[226920]|0|0)!=(i|0)){j=20908;break}b=a[226912]|0;if((b<<24>>24|0)==(d|0)){k=b}else{j=20908}}else{j=20908}}while(0);if((j|0)==20908){j=c[10030]|0;aF(h|0,j|0);k=a[226912]|0}if((k<<24>>24|0)==(d|0)){l=c[10030]|0;m=aF(f|0,l|0)|0;n=d&255;a[226912]=n;o=g&255;a[226904]=o;p=h&255;a[226896]=p;q=i&255;a[226920]=q;return}aF(d|0,c[10030]|0);l=c[10030]|0;m=aF(f|0,l|0)|0;n=d&255;a[226912]=n;o=g&255;a[226904]=o;p=h&255;a[226896]=p;q=i&255;a[226920]=q;return}function t1(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0;g=i;i=i+8|0;j=g|0;c[j>>2]=b;b=e+12|0;c[b>>2]=1;k=e|0;c[k>>2]=0;l=e+4|0;c[l>>2]=0;m=e+8|0;c[m>>2]=0;n=e+16|0;c[n>>2]=0;o=e+20|0;c[o>>2]=2e3;h[f>>3]=0.0;c[e+24>>2]=-1;p=e+28|0;c[p>>2]=-1;q=d;d=0;r=0;L27863:while(1){s=q;L27865:while(1){t=a[s]|0;do{if((t<<24>>24|0)==37){break L27865}else if((t<<24>>24|0)==0){break L27863}else if((t<<24>>24|0)==32){u=c[j>>2]|0;if((a[u]|0)==32){w=u}else{break}do{w=w+1|0;c[j>>2]=w;}while((a[w]|0)==32)}else{u=c[j>>2]|0;if(t<<24>>24!=(a[u]|0)){break L27863}c[j>>2]=u+1}}while(0);s=s+1|0}t=a[s+1|0]|0;do{if((t|0)==109){u=c[j>>2]|0;x=a[u]|0;do{if((x-48&255)<10){y=u+1|0;z=(x<<24>>24)-48|0;A=a[y]|0;if((A-48&255)>=10){B=y;C=z;break}B=u+2|0;C=((z*10&-1)-48|0)+(A<<24>>24)|0}else{B=u;C=0}}while(0);c[j>>2]=B;c[n>>2]=C-1;D=d;E=r+1|0}else if((t|0)==66){u=c[j>>2]|0;x=0;while(1){if((x|0)>=12){F=20933;break}A=40552+(x<<5)|0;G=uA(A|0)|0;if((uJ(u|0,A|0,G|0)|0)==0){F=20932;break}else{x=x+1|0}}if((F|0)==20932){F=0;c[j>>2]=u+G;H=x}else if((F|0)==20933){F=0;uh(-2,199248,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);H=0}c[n>>2]=H;D=d;E=r}else if((t|0)==106){A=c[j>>2]|0;z=a[A]|0;do{if((z-48&255)<10){y=A+1|0;I=(z<<24>>24)-48|0;J=a[y]|0;if((J-48&255)>=10){K=y;L=I;break}y=A+2|0;M=((I*10&-1)-48|0)+(J<<24>>24)|0;J=a[y]|0;if((J-48&255)>=10){K=y;L=M;break}K=A+3|0;L=((M*10&-1)-48|0)+(J<<24>>24)|0}else{K=A;L=0}}while(0);c[j>>2]=K;c[p>>2]=L-1;D=d+1|0;E=r+1|0}else if((t|0)==100){A=c[j>>2]|0;z=a[A]|0;do{if((z-48&255)<10){x=A+1|0;u=(z<<24>>24)-48|0;J=a[x]|0;if((J-48&255)>=10){N=x;O=u;break}N=A+2|0;O=((u*10&-1)-48|0)+(J<<24>>24)|0}else{N=A;O=0}}while(0);c[b>>2]=O;c[j>>2]=N;D=d;E=r+1|0}else if((t|0)==115){t3(e,+uz(c[j>>2]|0,j)+-946684800.0);D=d;E=r}else if((t|0)==98){A=c[j>>2]|0;z=0;while(1){if((z|0)>=12){F=20928;break}J=72368+(z<<3)|0;P=uA(J|0)|0;if((uJ(A|0,J|0,P|0)|0)==0){F=20927;break}else{z=z+1|0}}if((F|0)==20928){F=0;uh(-2,115608,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);Q=0}else if((F|0)==20927){F=0;c[j>>2]=A+P;Q=z}c[n>>2]=Q;D=d;E=r}else if((t|0)==77){J=c[j>>2]|0;u=a[J]|0;do{if((u-48&255)<10){x=J+1|0;M=(u<<24>>24)-48|0;y=a[x]|0;if((y-48&255)>=10){R=x;S=M;break}R=J+2|0;S=((M*10&-1)-48|0)+(y<<24>>24)|0}else{R=J;S=0}}while(0);c[l>>2]=S;c[j>>2]=R;D=d;E=r}else if((t|0)==89){J=c[j>>2]|0;u=a[J]|0;do{if((u-48&255)<10){z=J+1|0;A=(u<<24>>24)-48|0;y=a[z]|0;if((y-48&255)>=10){T=z;U=A;break}z=J+2|0;M=((A*10&-1)-48|0)+(y<<24>>24)|0;y=a[z]|0;if((y-48&255)>=10){T=z;U=M;break}z=J+3|0;A=((M*10&-1)-48|0)+(y<<24>>24)|0;y=a[z]|0;if((y-48&255)>=10){T=z;U=A;break}T=J+4|0;U=((A*10&-1)-48|0)+(y<<24>>24)|0}else{T=J;U=0}}while(0);c[o>>2]=U;c[j>>2]=T;D=d;E=r+1|0}else if((t|0)==83){J=c[j>>2]|0;u=a[J]|0;do{if((u-48&255)<10){y=J+1|0;A=(u<<24>>24)-48|0;z=a[y]|0;if((z-48&255)>=10){V=y;W=A;break}V=J+2|0;W=((A*10&-1)-48|0)+(z<<24>>24)|0}else{V=J;W=0}}while(0);c[k>>2]=W;c[j>>2]=V;J=a[V]|0;if(J<<24>>24!=46){u=c[12886]|0;if((u|0)==0){D=d;E=r;break}if(J<<24>>24!=(a[u]|0)){D=d;E=r;break}}h[f>>3]=+uz(V,0);D=d;E=r}else if((t|0)==72){u=c[j>>2]|0;J=a[u]|0;do{if((J-48&255)<10){z=u+1|0;A=(J<<24>>24)-48|0;y=a[z]|0;if((y-48&255)>=10){X=z;Y=A;break}X=u+2|0;Y=((A*10&-1)-48|0)+(y<<24>>24)|0}else{X=u;Y=0}}while(0);c[m>>2]=Y;c[j>>2]=X;D=d;E=r}else if((t|0)==121){u=c[j>>2]|0;J=a[u]|0;if((J-48&255)<10){y=u+1|0;A=(J<<24>>24)-48|0;J=a[y]|0;if((J-48&255)<10){Z=u+2|0;_=((A*10&-1)-48|0)+(J<<24>>24)|0}else{Z=y;_=A}c[o>>2]=_;c[j>>2]=Z;if((_|0)<69){$=_;F=20945}else{aa=_}}else{c[o>>2]=0;c[j>>2]=u;$=0;F=20945}if((F|0)==20945){F=0;u=$+100|0;c[o>>2]=u;aa=u}c[o>>2]=aa+1900;D=d;E=r+1|0}else{uh(-2,148656,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);D=d;E=r}}while(0);q=s+2|0;d=D;r=E}E=c[k>>2]|0;if((E|0)>59){c[l>>2]=(c[l>>2]|0)+((E|0)/60&-1);c[k>>2]=(E|0)%60&-1}E=c[l>>2]|0;if((E|0)>59){c[m>>2]=(c[m>>2]|0)+((E|0)/60&-1);c[l>>2]=(E|0)%60&-1}E=c[m>>2]|0;if((E|0)>23){l=(E|0)/24&-1;if((d|0)!=0){c[p>>2]=(c[p>>2]|0)+l}c[b>>2]=(c[b>>2]|0)+l;c[m>>2]=(E|0)%24&-1}if((r|0)==0){ab=c[j>>2]|0;i=g;return ab|0}do{if((d|0)==0){r=c[n>>2]|0;if((r|0)<0){uf(-2,116496,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else{ac=r;ad=c[b>>2]|0;break}}else{r=c[p>>2]|0;if((r|0)<0){uf(-2,131384,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else{c[n>>2]=0;E=r+1|0;c[b>>2]=E;ac=0;ad=E;break}}}while(0);if((ad|0)<1){uf(-2,103704,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}if((ac|0)>11){c[o>>2]=(c[o>>2]|0)+((ac|0)/12&-1);p=(ac|0)%12&-1;c[n>>2]=p;ae=p;af=ad}else{ae=ac;af=ad}while(1){ad=c[34056+(ae<<2)>>2]|0;do{if((ae|0)==1){ac=c[o>>2]|0;if((ac&3|0)!=0){ag=0;break}ag=(((ac|0)%100&-1|0)!=0|((ac|0)%400&-1|0)==0)&1}else{ag=0}}while(0);s=ag+ad|0;if((af|0)<=(s|0)){break}ac=ae+1|0;c[n>>2]=ac;if((ac|0)==12){c[o>>2]=(c[o>>2]|0)+1;c[n>>2]=0;ah=0}else{ah=ac}ac=af-s|0;c[b>>2]=ac;ae=ah;af=ac}ab=c[j>>2]|0;i=g;return ab|0}function t2(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,g=0.0,h=0,i=0.0,j=0,k=0.0,l=0.0,m=0.0,n=0,o=0.0,p=0.0;b=c[a+20>>2]|0;do{if((b|0)<2e3){d=b;e=0.0;while(1){if((d&3|0)==0){f=((d|0)%100&-1|0)!=0|((d|0)%400&-1|0)==0?366.0:365.0}else{f=365.0}g=e-f;h=d+1|0;if((h|0)<2e3){d=h;e=g}else{i=g;break}}}else{if((b|0)>2e3){j=2e3;k=0.0}else{i=0.0;break}while(1){if((j&3|0)==0){l=((j|0)%100&-1|0)!=0|((j|0)%400&-1|0)==0?366.0:365.0}else{l=365.0}e=k+l;d=j+1|0;if((d|0)<(b|0)){j=d;k=e}else{i=e;break}}}}while(0);j=c[a+12>>2]|0;if((j|0)>0){d=c[a+16>>2]|0;if((d|0)>0){h=0;k=i;while(1){l=+(c[34056+(h<<2)>>2]|0);do{if((h|0)==1){if((b&3|0)!=0){m=0.0;break}m=+((((b|0)%100&-1|0)!=0|((b|0)%400&-1|0)==0)&1|0)}else{m=0.0}}while(0);f=k+(l+m);n=h+1|0;if((n|0)<(d|0)){h=n;k=f}else{o=f;break}}}else{o=i}p=o+(+(j|0)+-1.0)}else{p=i+ +(c[a+28>>2]|0)}return+(+(c[a>>2]|0)+(+(c[a+4>>2]|0)+(p*24.0+ +(c[a+8>>2]|0))*60.0)*60.0)}function t3(a,b){a=a|0;b=+b;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0,t=0,u=0.0,w=0,x=0,y=0,z=0.0,A=0,B=0;d=i;if(+P(+b)>1.0e12){uh(-1,96560,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);e=-1;i=d;return e|0}f=a+20|0;c[f>>2]=2e3;g=a|0;h=a+4|0;j=a+8|0;k=a+16|0;l=a+28|0;c[l>>2]=0;m=a+12|0;uE(a|0,0,20);L28020:do{if(b<0.0){n=6;o=b;p=2e3;do{p=p-1|0;if((p&3|0)==0){q=((p|0)%100&-1|0)!=0|((p|0)%400&-1|0)==0?366:365}else{q=365}o=o+ +(q|0)*86400.0;n=(n+371|0)-q|0;}while(o<0.0);c[f>>2]=p;r=o;s=n;t=p}else{u=b;w=6;x=2e3;while(1){if((x&3|0)==0){y=((x|0)%100&-1|0)!=0|((x|0)%400&-1|0)==0?366:365}else{y=365}z=+(y|0)*86400.0;if(u<z){r=u;s=w;t=x;break L28020}A=x+1|0;c[f>>2]=A;u=u-z;w=(w-364|0)+y|0;x=A}}}while(0);y=~~(r/86400.0);c[l>>2]=y;b=r- +(y|0)*86400.0;l=(~~b|0)/3600&-1;c[j>>2]=l;r=b- +(l*3600&-1|0);l=(~~r|0)/60&-1;c[h>>2]=l;c[g>>2]=~~(r- +(l*60&-1|0));c[a+24>>2]=(y+s|0)%7&-1;s=y;y=0;while(1){a=c[34056+(y<<2)>>2]|0;do{if((y|0)==1){if((t&3|0)!=0){B=0;break}B=(((t|0)%100&-1|0)!=0|((t|0)%400&-1|0)==0)&1}else{B=0}}while(0);l=B+a|0;if((s|0)<(l|0)){break}g=y+1|0;c[k>>2]=g;s=s-l|0;y=g}c[m>>2]=s+1;e=0;i=d;return e|0}function t4(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0.0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0;j=i;uE(b|0,0,d|0);k=f+16|0;l=f+24|0;m=f+12|0;n=f+8|0;o=f+28|0;p=f+4|0;q=f|0;r=f+20|0;s=e;e=0;t=b;L28044:while(1){b=a[s]|0;do{if((b<<24>>24|0)==0){u=e;w=21166;break L28044}else if((b<<24>>24|0)==37){x=s+1|0;y=(a[x]|0)==48;z=y&1;A=y?s+2|0:x;x=a[A]|0;if((x-48&255)<10){B=0;C=A;D=x;while(1){E=((B*10&-1)-48|0)+(D<<24>>24)|0;F=C+1|0;G=a[F]|0;if((G-48&255)<10){B=E;C=F;D=G}else{H=E;I=F;J=G;break}}}else{H=0;I=A;J=x}if(J<<24>>24==46){D=I+1|0;C=a[D]|0;if((C-48&255)<10){B=0;G=D;F=C;while(1){E=((B*10&-1)-48|0)+(F<<24>>24)|0;K=G+1|0;L=a[K]|0;if((L-48&255)<10){B=E;G=K;F=L}else{M=E;N=K;P=L;break}}}else{M=0;N=D;P=C}Q=N;S=(M|0)>6?6:M;T=P}else{Q=I;S=0;T=J}F=T<<24>>24;do{if((F|0)==77){if((H|0)==0){U=y?z:1;V=2}else{U=z;V=H}if((V+e|0)>>>0>d>>>0){u=0;w=21167;break L28044}G=(U|0)!=0?90536:82208;B=c[p>>2]|0;be(t|0,G|0,(v=i,i=i+16|0,c[v>>2]=V,c[v+8>>2]=B,v)|0);w=21140}else if((F|0)==84){if((t4(t,d-e|0,179088,f,0.0)|0)==0){u=0;w=21143;break L28044}else{w=21140}}else if((F|0)==72){if((H|0)==0){W=y?z:1;X=2}else{W=z;X=H}if((X+e|0)>>>0>d>>>0){u=0;w=21171;break L28044}B=c[n>>2]|0;be(t|0,((W|0)!=0?90536:82208)|0,(v=i,i=i+16|0,c[v>>2]=X,c[v+8>>2]=B,v)|0);w=21140}else if((F|0)==37){if((e+1|0)>>>0>d>>>0){u=0;w=21144;break L28044}a[t]=37;Y=t;Z=e}else if((F|0)==87){B=c[o>>2]|0;G=c[l>>2]|0;do{if((B|0)>(G|0)){x=B-G|0;A=(G|0)>0?x+7|0:x;x=(A|0)/7&-1;if(((A|0)%7&-1|0)<=2){_=x;break}_=x+1|0}else{_=(B|0)==(G|0)&(G|0)==0?52:((c[m>>2]|0)-B|0)>4?52:1}}while(0);if((H|0)==0){$=y?z:1;aa=2}else{$=z;aa=H}if((aa+e|0)>>>0>d>>>0){u=0;w=21154;break L28044}be(t|0,(($|0)!=0?90536:82208)|0,(v=i,i=i+16|0,c[v>>2]=aa,c[v+8>>2]=_,v)|0);w=21140}else if((F|0)==108){B=(H|0)==0?2:H;if((B+e|0)>>>0>d>>>0){u=0;w=21147;break L28044}G=(((c[n>>2]|0)+11|0)%12&-1)+1|0;be(t|0,(y?90536:82208)|0,(v=i,i=i+16|0,c[v>>2]=B,c[v+8>>2]=G,v)|0);w=21140}else if((F|0)==121){if((H|0)==0){ab=y?z:1;ac=2}else{ab=z;ac=H}if((ac+e|0)>>>0>d>>>0){u=0;w=21148;break L28044}G=(c[r>>2]|0)%100&-1;be(t|0,((ab|0)!=0?90536:82208)|0,(v=i,i=i+16|0,c[v>>2]=ac,c[v+8>>2]=G,v)|0);w=21140}else if((F|0)==98|(F|0)==104){G=72368+(c[k>>2]<<3)|0;if(((uA(G|0)|0)+e|0)>>>0>d>>>0){u=0;w=21149;break L28044}uB(t|0,G|0);w=21140}else if((F|0)==73){if((H|0)==0){ad=y?z:1;ae=2}else{ad=z;ae=H}if((ae+e|0)>>>0>d>>>0){u=0;w=21155;break L28044}G=(((c[n>>2]|0)+11|0)%12&-1)+1|0;be(t|0,((ad|0)!=0?90536:82208)|0,(v=i,i=i+16|0,c[v>>2]=ae,c[v+8>>2]=G,v)|0);w=21140}else if((F|0)==65){G=40936+(c[l>>2]<<5)|0;if(((uA(G|0)|0)+e|0)>>>0>d>>>0){u=0;w=21150;break L28044}uB(t|0,G|0);w=21140}else if((F|0)==112){if((e+2|0)>>>0>d>>>0){u=0;w=21151;break L28044}G=(c[n>>2]|0)<12?215536:209856;a[t]=a[G]|0;a[t+1|0]=a[G+1|0]|0;a[t+2|0]=a[G+2|0]|0;w=21140}else if((F|0)==100){if((H|0)==0){af=y?z:1;ag=2}else{af=z;ag=H}if((ag+e|0)>>>0>d>>>0){u=0;w=21168;break L28044}G=c[m>>2]|0;be(t|0,((af|0)!=0?90536:82208)|0,(v=i,i=i+16|0,c[v>>2]=ag,c[v+8>>2]=G,v)|0);w=21140}else if((F|0)==89){if((H|0)==0){ah=y?z:1;ai=4}else{ah=z;ai=H}if((ai+e|0)>>>0>d>>>0){u=0;w=21169;break L28044}G=c[r>>2]|0;be(t|0,((ah|0)!=0?90536:82208)|0,(v=i,i=i+16|0,c[v>>2]=ai,c[v+8>>2]=G,v)|0);w=21140}else if((F|0)==107){G=(H|0)==0?2:H;if((G+e|0)>>>0>d>>>0){u=0;w=21152;break L28044}B=c[n>>2]|0;be(t|0,(y?90536:82208)|0,(v=i,i=i+16|0,c[v>>2]=G,c[v+8>>2]=B,v)|0);w=21140}else if((F|0)==109){if((H|0)==0){aj=y?z:1;ak=2}else{aj=z;ak=H}if((ak+e|0)>>>0>d>>>0){u=0;w=21161;break L28044}B=(c[k>>2]|0)+1|0;be(t|0,((aj|0)!=0?90536:82208)|0,(v=i,i=i+16|0,c[v>>2]=ak,c[v+8>>2]=B,v)|0);w=21140}else if((F|0)==114){if((t4(t,d-e|0,204248,f,0.0)|0)==0){u=0;w=21156;break L28044}else{w=21140}}else if((F|0)==66){B=40552+(c[k>>2]<<5)|0;if(((uA(B|0)|0)+e|0)>>>0>d>>>0){u=0;w=21157;break L28044}uB(t|0,B|0);w=21140}else if((F|0)==68){if((t4(t,d-e|0,75032,f,0.0)|0)==0){u=0;w=21158;break L28044}else{w=21140}}else if((F|0)==82){if((t4(t,d-e|0,199880,f,0.0)|0)==0){u=0;w=21159;break L28044}else{w=21140}}else if((F|0)==115){if((e+12|0)>>>0>d>>>0){u=0;w=21160;break L28044}al=+t2(f);be(t|0,74984,(v=i,i=i+8|0,h[v>>3]=al,v)|0);w=21140}else if((F|0)==106){if((H|0)==0){am=y?z:1;an=3}else{am=z;an=H}if((an+e|0)>>>0>d>>>0){u=0;w=21146;break L28044}B=(c[o>>2]|0)+1|0;be(t|0,((am|0)!=0?90536:82208)|0,(v=i,i=i+16|0,c[v>>2]=an,c[v+8>>2]=B,v)|0);w=21140}else if((F|0)==119){if((H|0)==0){ao=y?z:1;ap=2}else{ao=z;ap=H}if((ap+e|0)>>>0>d>>>0){u=0;w=21165;break L28044}B=c[l>>2]|0;be(t|0,((ao|0)!=0?90536:82208)|0,(v=i,i=i+16|0,c[v>>2]=ap,c[v+8>>2]=B,v)|0);w=21140}else if((F|0)==97){B=72464+(c[l>>2]<<3)|0;if(((uA(B|0)|0)+e|0)>>>0>d>>>0){u=0;w=21164;break L28044}uB(t|0,B|0);w=21140}else if((F|0)==85){B=c[o>>2]|0;G=c[l>>2]|0;do{if((B|0)>(G|0)){x=(G>>31|6)+(B-G|0)|0;A=(x|0)/7&-1;if(((x|0)%7&-1|0)<=1){aq=A;break}aq=A+1|0}else{aq=((c[m>>2]|0)-B|0)>4?52:1}}while(0);if((H|0)==0){ar=y?z:1;as=2}else{ar=z;as=H}if((as+e|0)>>>0>d>>>0){u=0;w=21153;break L28044}be(t|0,((ar|0)!=0?90536:82208)|0,(v=i,i=i+16|0,c[v>>2]=as,c[v+8>>2]=aq,v)|0);w=21140}else if((F|0)==83){if((H|0)==0){at=y?z:1;au=2}else{at=z;au=H}if((au+e|0)>>>0>d>>>0){u=0;w=21163;break L28044}B=c[q>>2]|0;be(t|0,((at|0)!=0?90536:82208)|0,(v=i,i=i+16|0,c[v>>2]=au,c[v+8>>2]=B,v)|0);if((S|0)<=0){w=21140;break}al=+R(10.0,+(+(S|0)));B=~~+O(+(al*g+.5));if(((e+1|0)+S|0)>>>0>d>>>0){u=0;w=21162;break L28044}G=~~al;be(t+(uA(t|0)|0)|0,184248,(v=i,i=i+16|0,c[v>>2]=S,c[v+8>>2]=(B|0)<(G|0)?B:G-1|0,v)|0);w=21140}else if((F|0)==70){if((t4(t,d-e|0,222376,f,0.0)|0)==0){u=0;w=21170;break L28044}else{w=21140}}else{w=21140}}while(0);if((w|0)==21140){w=0;if((a[t]|0)==0){av=Q;aw=e;ax=t;break}else{Y=t;Z=e}}while(1){F=Y+1|0;z=Z+1|0;if((a[F]|0)==0){av=Q;aw=z;ax=F;break}else{Y=F;Z=z}}}else{if(e>>>0>=d>>>0){u=0;w=21145;break L28044}a[t]=b;av=s;aw=e+1|0;ax=t+1|0}}while(0);s=av+1|0;e=aw;t=ax}if((w|0)==21169){i=j;return u|0}else if((w|0)==21170){i=j;return u|0}else if((w|0)==21154){i=j;return u|0}else if((w|0)==21155){i=j;return u|0}else if((w|0)==21156){i=j;return u|0}else if((w|0)==21171){i=j;return u|0}else if((w|0)==21166){i=j;return u|0}else if((w|0)==21167){i=j;return u|0}else if((w|0)==21168){i=j;return u|0}else if((w|0)==21147){i=j;return u|0}else if((w|0)==21148){i=j;return u|0}else if((w|0)==21157){i=j;return u|0}else if((w|0)==21158){i=j;return u|0}else if((w|0)==21149){i=j;return u|0}else if((w|0)==21150){i=j;return u|0}else if((w|0)==21151){i=j;return u|0}else if((w|0)==21143){i=j;return u|0}else if((w|0)==21152){i=j;return u|0}else if((w|0)==21153){i=j;return u|0}else if((w|0)==21162){i=j;return u|0}else if((w|0)==21163){i=j;return u|0}else if((w|0)==21159){i=j;return u|0}else if((w|0)==21160){i=j;return u|0}else if((w|0)==21161){i=j;return u|0}else if((w|0)==21144){i=j;return u|0}else if((w|0)==21145){i=j;return u|0}else if((w|0)==21146){i=j;return u|0}else if((w|0)==21164){i=j;return u|0}else if((w|0)==21165){i=j;return u|0}return 0}function t5(){var d=0,e=0,f=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0.0,aR=0,aS=0,aT=0.0,aU=0,aV=0,aW=0,aX=0,aZ=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,ba=0,bb=0,bc=0,bd=0.0,be=0,bf=0,bg=0,bh=0,bi=0,bj=0,bk=0.0,bl=0,bm=0,bn=0,bo=0,bp=0,bq=0,br=0,bs=0,bt=0,bu=0,bv=0,bw=0,bx=0,by=0,bz=0,bB=0.0,bC=0,bD=0,bE=0,bF=0,bG=0;d=i;i=i+176|0;e=d|0;f=d+32|0;j=d+56|0;k=d+64|0;l=d+88|0;n=d+112|0;o=d+136|0;p=d+152|0;c[13898]=(c[13898]|0)+1;c[6074]=iw()|0;q=c[13898]|0;r=c[1054]|0;s=c[r+(q*40&-1)+36>>2]|0;t=c[r+(q*40&-1)+32>>2]|0;u=(a[r+(q*40&-1)|0]&1)==0;r=(s|0)>0;x=c[10036]|0;y=21960;z=96232;L28193:while(1){L28195:do{if(!u){if(r){A=0;B=0;C=t;while(1){D=a[z+A|0]|0;if(D<<24>>24==(a[x+(A+C|0)|0]|0)){E=C;F=B}else{if(D<<24>>24!=36){break L28195}E=C-1|0;F=1}G=A+1|0;if((G|0)<(F+s|0)){A=G;B=F;C=E}else{break}}if((F|0)==0){H=G}else{I=y;break L28193}}else{H=0}C=a[z+H|0]|0;if((C<<24>>24|0)==36|(C<<24>>24|0)==0){I=y;break L28193}}}while(0);C=y+8|0;B=c[C>>2]|0;if((B|0)==0){I=C;break}else{y=C;z=B}}z=c[I+4>>2]|0;if((z|0)==0){J=q}else{I=q+1|0;c[13898]=I;J=I}I=p|0;q=p+8|0;y=o|0;H=o+2|0;G=o+1|0;F=o+6|0;E=o+5|0;s=o+3|0;x=o+7|0;t=n|0;r=n+8|0;u=l|0;B=l+8|0;C=k|0;A=k+8|0;D=f|0;K=f+8|0;L=j|0;j=e|0;L28211:while(1){L28213:do{if((z|0)==11){L28215:do{if((J|0)<(c[8272]|0)){e=c[1054]|0;if((a[e+(J*40&-1)|0]&1)==0){M=21687;break L28211}N=c[e+(J*40&-1)+36>>2]|0;O=e+(J*40&-1)+32|0;e=c[10036]|0;P=0;while(1){if((P|0)>=(N|0)){M=21252;break}Q=c[O>>2]|0;if((a[e+(Q+P|0)|0]|0)==(a[P+103664|0]|0)){P=P+1|0}else{R=Q;break}}if((M|0)==21252){M=0;if((P|0)==1){M=21254;break}R=c[O>>2]|0}if((N|0)>0){S=0;T=0;U=R}else{M=21686;break L28211}while(1){if((a[S+144616|0]|0)==(a[e+(S+U|0)|0]|0)){V=U;W=T}else{if((S|0)!=1){X=0;Y=0;Z=R;break}V=U-1|0;W=1}Q=S+1|0;if((Q|0)<(W+N|0)){S=Q;T=W;U=V}else{M=21260;break}}do{if((M|0)==21260){M=0;if((W|0)==0){if(!((S|0)==0|(S|0)==6)){X=0;Y=0;Z=R;break}}a[54144]=0;break L28215}}while(0);while(1){if((a[X+143008|0]|0)==(a[e+(X+Z|0)|0]|0)){_=Z;$=Y}else{if((X|0)!=1){aa=0;ab=0;ac=R;break}_=Z-1|0;$=1}O=X+1|0;if((O|0)<($+N|0)){X=O;Y=$;Z=_}else{M=21267;break}}do{if((M|0)==21267){M=0;if(($|0)==0){if(!((X|0)==0|(X|0)==3)){aa=0;ab=0;ac=R;break}}a[54160]=0;break L28215}}while(0);while(1){if((a[aa+141464|0]|0)==(a[e+(aa+ac|0)|0]|0)){ad=ac;ae=ab}else{if((aa|0)!=1){M=21685;break L28211}ad=ac-1|0;ae=1}O=aa+1|0;if((O|0)<(ae+N|0)){aa=O;ab=ae;ac=ad}else{break}}if((ae|0)==0){if(!((aa|0)==0|(aa|0)==3)){M=21684;break L28211}}a[54152]=0}else{M=21254}}while(0);if((M|0)==21254){M=0;a[54144]=0;a[54160]=0;a[54152]=0}c[13898]=J+1}else if((z|0)==36){a[43472]=0}else if((z|0)==37){c[8732]=0}else if((z|0)==42){c[14100]=4;h[7052]=-1.0}else if((z|0)==39){c[8786]=4;h[4395]=-1.0}else if((z|0)==40){c[6598]=4;h[3301]=-1.0}else if((z|0)==59){if((a[32936]&1)==0){break}a[32936]=0;if((a[30528]&1)!=0){break}b[12272]=120;w=121;a[24595]=w&255;w=w>>8;a[24596|0]=w&255;if((a[37400]&1)==0){break}aI(184192,51,1,c[m>>2]|0)}else if((z|0)==89){t6(11)}else if((z|0)==90){uh(J,222320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);h[8132]=1.0;h[8133]=.5;h[8218]=1.0;h[8219]=.5;h[8304]=1.0;h[8305]=.5;h[8390]=1.0;h[8391]=.5;h[8476]=1.0;h[8477]=.5;h[8562]=1.0;h[8563]=.5;h[8648]=1.0;h[8649]=.5;h[8734]=1.0;h[8735]=.5;h[8820]=1.0;h[8821]=.5;h[8906]=1.0;h[8907]=.5;h[8992]=1.0;h[8993]=.5}else if((z|0)==91|(z|0)==119){h[77]=.5;a[624]=0}else if((z|0)==92){L28273:do{if((J|0)<(c[8272]|0)){N=c[1054]|0;e=(a[N+(J*40&-1)|0]&1)==0;O=c[N+(J*40&-1)+36>>2]|0;L28275:do{if(e){af=c[10036]|0;ag=N+(J*40&-1)+32|0}else{P=N+(J*40&-1)+32|0;Q=c[10036]|0;ah=0;while(1){if((ah|0)>=(O|0)){break}if((a[Q+((c[P>>2]|0)+ah|0)|0]|0)==(a[ah+103664|0]|0)){ah=ah+1|0}else{af=Q;ag=P;break L28275}}if((ah|0)==1){break L28273}else{af=Q;ag=P}}}while(0);N=c[ag>>2]|0;ai=(O|0)>0;aj=56720;ak=77416;L28283:while(1){L28285:do{if(!e){if(ai){al=0;am=0;an=N;while(1){ao=a[ak+al|0]|0;if(ao<<24>>24==(a[af+(al+an|0)|0]|0)){ap=an;aq=am}else{if(ao<<24>>24!=36){break L28285}ap=an-1|0;aq=1}ar=al+1|0;if((ar|0)<(aq+O|0)){al=ar;am=aq;an=ap}else{break}}if((aq|0)==0){as=ar}else{at=aj;break L28283}}else{as=0}an=a[ak+as|0]|0;if((an<<24>>24|0)==36|(an<<24>>24|0)==0){at=aj;break L28283}}}while(0);P=aj+8|0;Q=c[P>>2]|0;if((Q|0)==0){at=P;break}else{aj=P;ak=Q}}ak=c[at+4>>2]|0;if((ak|0)>-1){uD(64813+(ak*688&-1)|0,82192,15);c[13898]=J+1;break L28213}else{uh(J,75e3,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);break L28213}}}while(0);uD(64813,82192,15);uD(65501,82192,15);uD(66189,82192,15);uD(66877,82192,15);uD(67565,82192,15);uD(68253,82192,15);uD(68941,82192,15);uD(69629,82192,15);uD(70317,82192,15);uD(71005,82192,15);uD(71693,82192,15)}else if((z|0)==61){c[7662]=0;if((c[12890]|0)==352){c[12890]=18}if((c[10058]|0)!=352){break}c[10058]=1}else if((z|0)==21){ak=c[10568]|0;if((ak|0)!=0){uu(ak)}c[10568]=0;a[42568]=0}else if((z|0)==102|(z|0)==105){c[16574]=1}else if((z|0)==50){c[17120]=0;h[8561]=10.0}else if((z|0)==127){t6(5)}else if((z|0)==121|(z|0)==124){c[16574]=1}else if((z|0)==54){c[16260]=0;h[8131]=10.0}else if((z|0)==145){t6(0)}else if((z|0)==139|(z|0)==142){c[16574]=1}else if((z|0)==68){c[16776]=0;h[8389]=10.0}else if((z|0)==66){t6(3)}else if((z|0)==71|(z|0)==73){c[16574]=1}else if((z|0)==110){c[16546]=0}else if((z|0)==129){c[16374]=0}else if((z|0)==93){uE(j|0,0,28);uu(c[1183]|0);c[1183]=0;uu(c[1184]|0);c[1184]=0;c[1204]=4;c[1205]=4;c[1206]=4;c[1207]=c[j>>2];c[4832>>2]=c[j+4>>2];c[4836>>2]=c[j+8>>2];c[4840>>2]=c[j+12>>2];c[4844>>2]=c[j+16>>2];c[4848>>2]=c[j+20>>2];c[4852>>2]=c[j+24>>2];c[1186]=0;c[1164]=0;c[1166]=1}else if((z|0)==94){uE(j|0,0,28);uu(c[1119]|0);c[1119]=0;uu(c[1120]|0);c[1120]=0;c[1140]=4;c[1141]=4;c[1142]=4;c[1143]=c[j>>2];c[4576>>2]=c[j+4>>2];c[4580>>2]=c[j+8>>2];c[4584>>2]=c[j+12>>2];c[4588>>2]=c[j+16>>2];c[4592>>2]=c[j+20>>2];c[4596>>2]=c[j+24>>2];c[1122]=0;}else if((z|0)==99){if(a[20368]|0){a[20368]=0;g[3538]=+g[5090];g[3536]=+g[5088];g[3534]=+g[5086];c[16336]=c[16336]^2;c[17024]=c[17024]^2}c[5094]=0;c[18072]=0;g[3536]=30.0;g[3538]=60.0;g[3534]=1.0;g[3540]=0.0;g[3532]=1.0}else if((z|0)==151){h[11]=1.0e-8}else if((z|0)==138){c[16202]=0}else if((z|0)==70){c[16718]=0}else if((z|0)==101){c[17234]=0}else if((z|0)==120){c[17062]=0}else if((z|0)==113){uu(c[16629]|0);c[16629]=0;uu(c[16630]|0);uD(66456,51296,192)}else if((z|0)==132){uu(c[16457]|0);c[16457]=0;uu(c[16458]|0);uD(65768,51296,192);c[16455]=-270}else if((z|0)==141){uu(c[16285]|0);c[16285]=0;uu(c[16286]|0);uD(65080,51296,192)}else if((z|0)==147){t6(7)}else if((z|0)==65){c[16680]=0}else if((z|0)==149){c[17368]=0}else if((z|0)==95){c[17540]=0}else if((z|0)==96){c[17712]=0}else if((z|0)==100){c[17884]=0}else if((z|0)==150){a[27776]=0;c[13898]=J+1}else if((z|0)==153){c[16664]=c[12782];c[66660>>2]=c[12783];c[66664>>2]=c[12784];c[66668>>2]=c[12785];c[66672>>2]=c[12786];c[66676>>2]=c[12787];c[66680>>2]=c[12788];c[66684>>2]=c[12789];c[66688>>2]=c[12790];c[66692>>2]=c[12791];c[66696>>2]=c[12792];c[66700>>2]=c[12793];c[66704>>2]=c[12794];c[66708>>2]=c[12795]}else if((z|0)==155){c[16492]=c[12782];c[65972>>2]=c[12783];c[65976>>2]=c[12784];c[65980>>2]=c[12785];c[65984>>2]=c[12786];c[65988>>2]=c[12787];c[65992>>2]=c[12788];c[65996>>2]=c[12789];c[66e3>>2]=c[12790];c[66004>>2]=c[12791];c[66008>>2]=c[12792];c[66012>>2]=c[12793];c[66016>>2]=c[12794];c[66020>>2]=c[12795]}else if((z|0)==157){c[16320]=c[12782];c[65284>>2]=c[12783];c[65288>>2]=c[12784];c[65292>>2]=c[12785];c[65296>>2]=c[12786];c[65300>>2]=c[12787];c[65304>>2]=c[12788];c[65308>>2]=c[12789];c[65312>>2]=c[12790];c[65316>>2]=c[12791];c[65320>>2]=c[12792];c[65324>>2]=c[12793];c[65328>>2]=c[12794];c[65332>>2]=c[12795]}else if((z|0)==154){c[17352]=c[12782];c[69412>>2]=c[12783];c[69416>>2]=c[12784];c[69420>>2]=c[12785];c[69424>>2]=c[12786];c[69428>>2]=c[12787];c[69432>>2]=c[12788];c[69436>>2]=c[12789];c[69440>>2]=c[12790];c[69444>>2]=c[12791];c[69448>>2]=c[12792];c[69452>>2]=c[12793];c[69456>>2]=c[12794];c[69460>>2]=c[12795]}else if((z|0)==156){c[17180]=c[12782];c[68724>>2]=c[12783];c[68728>>2]=c[12784];c[68732>>2]=c[12785];c[68736>>2]=c[12786];c[68740>>2]=c[12787];c[68744>>2]=c[12788];c[68748>>2]=c[12789];c[68752>>2]=c[12790];c[68756>>2]=c[12791];c[68760>>2]=c[12792];c[68764>>2]=c[12793];c[68768>>2]=c[12794];c[68772>>2]=c[12795]}else if((z|0)==152){c[16320]=c[12782];c[65284>>2]=c[12783];c[65288>>2]=c[12784];c[65292>>2]=c[12785];c[65296>>2]=c[12786];c[65300>>2]=c[12787];c[65304>>2]=c[12788];c[65308>>2]=c[12789];c[65312>>2]=c[12790];c[65316>>2]=c[12791];c[65320>>2]=c[12792];c[65324>>2]=c[12793];c[65328>>2]=c[12794];c[65332>>2]=c[12795];c[16492]=c[12782];c[65972>>2]=c[12783];c[65976>>2]=c[12784];c[65980>>2]=c[12785];c[65984>>2]=c[12786];c[65988>>2]=c[12787];c[65992>>2]=c[12788];c[65996>>2]=c[12789];c[66e3>>2]=c[12790];c[66004>>2]=c[12791];c[66008>>2]=c[12792];c[66012>>2]=c[12793];c[66016>>2]=c[12794];c[66020>>2]=c[12795];c[16664]=c[12782];c[66660>>2]=c[12783];c[66664>>2]=c[12784];c[66668>>2]=c[12785];c[66672>>2]=c[12786];c[66676>>2]=c[12787];c[66680>>2]=c[12788];c[66684>>2]=c[12789];c[66688>>2]=c[12790];c[66692>>2]=c[12791];c[66696>>2]=c[12792];c[66700>>2]=c[12793];c[66704>>2]=c[12794];c[66708>>2]=c[12795];c[16836]=c[12782];c[67348>>2]=c[12783];c[67352>>2]=c[12784];c[67356>>2]=c[12785];c[67360>>2]=c[12786];c[67364>>2]=c[12787];c[67368>>2]=c[12788];c[67372>>2]=c[12789];c[67376>>2]=c[12790];c[67380>>2]=c[12791];c[67384>>2]=c[12792];c[67388>>2]=c[12793];c[67392>>2]=c[12794];c[67396>>2]=c[12795];c[17008]=c[12782];c[68036>>2]=c[12783];c[68040>>2]=c[12784];c[68044>>2]=c[12785];c[68048>>2]=c[12786];c[68052>>2]=c[12787];c[68056>>2]=c[12788];c[68060>>2]=c[12789];c[68064>>2]=c[12790];c[68068>>2]=c[12791];c[68072>>2]=c[12792];c[68076>>2]=c[12793];c[68080>>2]=c[12794];c[68084>>2]=c[12795];c[17180]=c[12782];c[68724>>2]=c[12783];c[68728>>2]=c[12784];c[68732>>2]=c[12785];c[68736>>2]=c[12786];c[68740>>2]=c[12787];c[68744>>2]=c[12788];c[68748>>2]=c[12789];c[68752>>2]=c[12790];c[68756>>2]=c[12791];c[68760>>2]=c[12792];c[68764>>2]=c[12793];c[68768>>2]=c[12794];c[68772>>2]=c[12795];c[17352]=c[12782];c[69412>>2]=c[12783];c[69416>>2]=c[12784];c[69420>>2]=c[12785];c[69424>>2]=c[12786];c[69428>>2]=c[12787];c[69432>>2]=c[12788];c[69436>>2]=c[12789];c[69440>>2]=c[12790];c[69444>>2]=c[12791];c[69448>>2]=c[12792];c[69452>>2]=c[12793];c[69456>>2]=c[12794];c[69460>>2]=c[12795];c[17524]=c[12782];c[70100>>2]=c[12783];c[70104>>2]=c[12784];c[70108>>2]=c[12785];c[70112>>2]=c[12786];c[70116>>2]=c[12787];c[70120>>2]=c[12788];c[70124>>2]=c[12789];c[70128>>2]=c[12790];c[70132>>2]=c[12791];c[70136>>2]=c[12792];c[70140>>2]=c[12793];c[70144>>2]=c[12794];c[70148>>2]=c[12795];c[17696]=c[12782];c[70788>>2]=c[12783];c[70792>>2]=c[12784];c[70796>>2]=c[12785];c[70800>>2]=c[12786];c[70804>>2]=c[12787];c[70808>>2]=c[12788];c[70812>>2]=c[12789];c[70816>>2]=c[12790];c[70820>>2]=c[12791];c[70824>>2]=c[12792];c[70828>>2]=c[12793];c[70832>>2]=c[12794];c[70836>>2]=c[12795];c[17868]=c[12782];c[71476>>2]=c[12783];c[71480>>2]=c[12784];c[71484>>2]=c[12785];c[71488>>2]=c[12786];c[71492>>2]=c[12787];c[71496>>2]=c[12788];c[71500>>2]=c[12789];c[71504>>2]=c[12790];c[71508>>2]=c[12791];c[71512>>2]=c[12792];c[71516>>2]=c[12793];c[71520>>2]=c[12794];c[71524>>2]=c[12795];c[18040]=c[12782];c[72164>>2]=c[12783];c[72168>>2]=c[12784];c[72172>>2]=c[12785];c[72176>>2]=c[12786];c[72180>>2]=c[12787];c[72184>>2]=c[12788];c[72188>>2]=c[12789];c[72192>>2]=c[12790];c[72196>>2]=c[12791];c[72200>>2]=c[12792];c[72204>>2]=c[12793];c[72208>>2]=c[12794];c[72212>>2]=c[12795]}else if((z|0)==5){L28351:do{if((J|0)<(c[8272]|0)){ak=c[1054]|0;aj=(a[ak+(J*40&-1)|0]&1)==0;O=c[ak+(J*40&-1)+36>>2]|0;L28353:do{if(aj){au=c[10036]|0;av=ak+(J*40&-1)+32|0}else{N=ak+(J*40&-1)+32|0;ai=c[10036]|0;e=0;while(1){if((e|0)>=(O|0)){M=21222;break}if((a[ai+((c[N>>2]|0)+e|0)|0]|0)==(a[e+103664|0]|0)){e=e+1|0}else{aw=0;break}}if((M|0)==21222){M=0;if((e|0)==1){break L28351}else{aw=0}}while(1){if((aw|0)>=(O|0)){M=21226;break}if((a[ai+((c[N>>2]|0)+aw|0)|0]|0)==(a[aw+150688|0]|0)){aw=aw+1|0}else{ax=0;M=21227;break}}if((M|0)==21226){M=0;if((aw|0)!=2){ax=0;M=21227}}if((M|0)==21227){while(1){M=0;if((ax|0)>=(O|0)){break}if((a[ai+((c[N>>2]|0)+ax|0)|0]|0)==(a[ax+137768|0]|0)){ax=ax+1|0;M=21227}else{au=ai;av=N;break L28353}}if((ax|0)!=3){au=ai;av=N;break}}c[16335]=0;c[16507]=0;c[13898]=J+1;break L28213}}while(0);ak=c[av>>2]|0;e=(O|0)>0;Q=56720;P=77416;L28373:while(1){L28375:do{if(!aj){if(e){ah=0;an=0;am=ak;while(1){al=a[P+ah|0]|0;if(al<<24>>24==(a[au+(ah+am|0)|0]|0)){ay=am;aA=an}else{if(al<<24>>24!=36){break L28375}ay=am-1|0;aA=1}aB=ah+1|0;if((aB|0)<(aA+O|0)){ah=aB;an=aA;am=ay}else{break}}if((aA|0)==0){aC=aB}else{aD=Q;break L28373}}else{aC=0}am=a[P+aC|0]|0;if((am<<24>>24|0)==36|(am<<24>>24|0)==0){aD=Q;break L28373}}}while(0);N=Q+8|0;ai=c[N>>2]|0;if((ai|0)==0){aD=N;break}else{Q=N;P=ai}}P=c[aD+4>>2]|0;if((P|0)<=-1){break L28213}c[64652+(P*688&-1)>>2]=0;c[13898]=J+1;break L28213}}while(0);c[16163]=0;c[16335]=0;c[16507]=0;c[16679]=0;c[16851]=0;c[17023]=0;c[17195]=0;c[17367]=0;c[17539]=0;c[17711]=0;c[17883]=0}else if((z|0)==62){uD(54016,50688,112);a[54016]=110}else if((z|0)==77){h[3818]=1.0}else if((z|0)==78){h[3817]=1.0}else if((z|0)==79){if((a[30528]&1)==0){break}a[30528]=0;P=(a[32936]&1)==0;if(!(P|(c[17539]|0)==0)){h[8773]=-5.0;h[8774]=-5.0}if(!P){break}b[12272]=120;if((a[37400]&1)==0){break}aI(199840,33,1,c[m>>2]|0)}else if((z|0)==87){P=43240;while(1){Q=c[P>>2]|0;if((Q|0)==0){aE=0;break}if((aY(215528,c[Q+4>>2]|0)|0)==0){aE=Q;break}else{P=Q|0}}if((a[33512]&1)!=0){lm()}c[8026]=0;do{if((a[14080]&1)!=0){if(a[13032]|0){P=c[(c[3524]|0)+104>>2]|0;if((P|0)!=0){cS[P&511]()}a[13032]=0}if(a[14088]|0){cS[c[(c[3524]|0)+44>>2]&511]();a[14088]=0}if((a[14080]&1)==0){break}cS[c[(c[3524]|0)+40>>2]&511]();a[14080]=0;c[10028]=0}}while(0);if((aE|0)!=0){P=c[aE+24>>2]|0;c[3524]=lx(P,uA(P|0)|0)|0}a[25280]=0}else if((z|0)==12){c[13366]=5;c[13378]=0;c[13368]=4;c[13374]=5;c[13372]=0}else if((z|0)==60){c[13898]=J+1;aI(193712,29,1,c[m>>2]|0)}else if((z|0)==23){uE(y|0,0,11);P=c[1054]|0;Q=c[P+(J*40&-1)+36>>2]|0;O=c[P+(J*40&-1)+32>>2]|0;ak=(a[P+(J*40&-1)|0]&1)==0;e=(Q|0)>0;aj=c[10036]|0;ai=56720;N=77416;L28426:while(1){L28428:do{if(!ak){if(e){am=0;an=0;ah=O;while(1){al=a[N+am|0]|0;if(al<<24>>24==(a[aj+(am+ah|0)|0]|0)){aF=ah;aG=an}else{if(al<<24>>24!=36){break L28428}aF=ah-1|0;aG=1}aH=am+1|0;if((aH|0)<(aG+Q|0)){am=aH;an=aG;ah=aF}else{break}}if((aG|0)==0){aJ=aH}else{aK=ai;break L28426}}else{aJ=0}ah=a[N+aJ|0]|0;if((ah<<24>>24|0)==36|(ah<<24>>24|0)==0){aK=ai;break L28426}}}while(0);ah=ai+8|0;an=c[ah>>2]|0;if((an|0)==0){aK=ah;break}else{ai=ah;N=an}}N=c[aK+4>>2]|0;L28441:do{if((N|0)>-1){a[o+N|0]=1;aL=J;aM=c[8272]|0}else{ai=c[8272]|0;e=(ai|0)>(J|0);L28443:do{if(e){if(ak){aL=J;aM=ai;break L28441}else{aN=0}while(1){if((aN|0)>=(Q|0)){M=21306;break}if((a[aj+(aN+O|0)|0]|0)==(a[aN+150688|0]|0)){aN=aN+1|0}else{aO=0;M=21307;break}}if((M|0)==21306){M=0;if((aN|0)!=2){aO=0;M=21307}}if((M|0)==21307){while(1){M=0;if((aO|0)>=(Q|0)){break}if((a[aj+(aO+O|0)|0]|0)==(a[aO+148800|0]|0)){aO=aO+1|0;M=21307}else{break L28443}}if((aO|0)!=2){break}}a[G]=1;a[H]=1;an=J+1|0;c[13898]=an;aL=an;aM=ai;break L28441}}while(0);if(ak){M=21313}else{an=a[aj+O|0]|0;if(!((an<<24>>24|0)==39|(an<<24>>24|0)==34)){M=21313}}do{if((M|0)==21313){M=0;if(!e){break}if(ak){aL=J;aM=ai;break L28441}else{aP=0}while(1){if((aP|0)>=(Q|0)){break}if((a[aj+(aP+O|0)|0]|0)==(a[aP+103664|0]|0)){aP=aP+1|0}else{aL=J;aM=ai;break L28441}}if((aP|0)!=1){aL=J;aM=ai;break L28441}}}while(0);uE(y|0,1,11);aL=J;aM=ai}}while(0);if((aL|0)<(aM|0)){if((a[P+(aL*40&-1)|0]&1)==0){break}O=c[P+(aL*40&-1)+36>>2]|0;Q=P+(aL*40&-1)+32|0;ak=0;while(1){if((ak|0)>=(O|0)){break}if((a[aj+((c[Q>>2]|0)+ak|0)|0]|0)==(a[ak+103664|0]|0)){ak=ak+1|0}else{break L28213}}if((ak|0)!=1){break}}if((a[H]&1)!=0){c[16560]=6758437;a[66188]=1}if((a[G]&1)!=0){c[16388]=6758437;a[65500]=1}if((a[y]&1)!=0){c[16216]=6758437;a[64812]=1}if((a[F]&1)!=0){c[17248]=6758437;a[68940]=1}if((a[E]&1)!=0){c[17076]=6758437;a[68252]=1}if((a[s]&1)!=0){c[16732]=6758437;a[66876]=1}if((a[x]&1)==0){break}c[17420]=6758437;a[69628]=1}else if((z|0)==3){h[9040]=1.0}else if((z|0)==48){c[16604]=0;h[8303]=10.0}else if((z|0)==6){h[7077]=0.0}else if((z|0)==8){c[11692]=0}else if((z|0)==32){if((c[8272]|0)<=(J|0)){break}Q=c[1054]|0;aj=(a[Q+(J*40&-1)|0]&1)==0;L28502:do{if(!aj){O=c[Q+(J*40&-1)+36>>2]|0;P=Q+(J*40&-1)+32|0;N=c[10036]|0;e=0;while(1){if((e|0)>=(O|0)){M=21386;break}if((a[N+((c[P>>2]|0)+e|0)|0]|0)==(a[e+166752|0]|0)){e=e+1|0}else{break}}do{if((M|0)==21386){M=0;if((e|0)!=5){break}c[8798]=0;c[13898]=J+1;break L28213}}while(0);if(aj){break}e=c[Q+(J*40&-1)+36>>2]|0;P=Q+(J*40&-1)+32|0;N=c[10036]|0;O=0;while(1){if((O|0)>=(e|0)){break}if((a[N+((c[P>>2]|0)+O|0)|0]|0)==(a[O+103664|0]|0)){O=O+1|0}else{break L28502}}if((O|0)==1){break L28213}}}while(0);Q=is(l)|0;aj=c[Q>>2]|0;if((aj|0)==1){aQ=+(c[Q+8>>2]|0)}else if((aj|0)==2){aQ=+h[Q+8>>3]}else if((aj|0)==3){aQ=+uz(c[Q+8>>2]|0,0)}else{M=21397;break L28211}if((c[u>>2]|0)==3){uu(c[B>>2]|0);c[u>>2]=1}Q=~~aQ;aj=0;ak=43264;while(1){aR=c[ak>>2]|0;if((aR|0)==0){break L28213}aS=aR|0;if((c[aR+4>>2]|0)==(Q|0)){break}else{aj=aR;ak=aS}}ak=c[aS>>2]|0;if((c[10816]|0)==(aR|0)){c[10816]=ak}else{c[aj>>2]=ak}uu(aR)}else if((z|0)==20){ak=c[12886]|0;if((ak|0)!=0){uu(ak)}c[12886]=0;uu(c[8270]|0);c[8270]=0}else if((z|0)==27){iY(c[10828]|0);c[10828]=0;c[9344]=10;c[9342]=10}else if((z|0)==30){L28539:do{if((J|0)<(c[8272]|0)){ak=c[1054]|0;L28541:do{if((a[ak+(J*40&-1)|0]&1)!=0){Q=c[ak+(J*40&-1)+36>>2]|0;P=ak+(J*40&-1)+32|0;N=c[10036]|0;e=0;while(1){if((e|0)>=(Q|0)){break}if((a[N+((c[P>>2]|0)+e|0)|0]|0)==(a[e+103664|0]|0)){e=e+1|0}else{break L28541}}if((e|0)==1){break L28539}}}while(0);ak=is(n)|0;O=c[ak>>2]|0;if((O|0)==1){aT=+(c[ak+8>>2]|0)}else if((O|0)==2){aT=+h[ak+8>>3]}else if((O|0)==3){aT=+uz(c[ak+8>>2]|0,0)}else{M=21361;break L28211}if((c[t>>2]|0)==3){uu(c[r>>2]|0);c[t>>2]=1}ak=~~aT;aU=c[13898]|0;if((aU|0)<(c[8272]|0)){O=c[1054]|0;if((a[O+(aU*40&-1)|0]&1)==0){M=21683;break L28211}P=c[O+(aU*40&-1)+36>>2]|0;N=O+(aU*40&-1)+32|0;O=c[10036]|0;Q=0;while(1){if((Q|0)>=(P|0)){break}if((a[O+((c[N>>2]|0)+Q|0)|0]|0)==(a[Q+103664|0]|0)){Q=Q+1|0}else{M=21681;break L28211}}if((Q|0)==1){aV=43288;aW=0}else{M=21682;break L28211}}else{aV=43288;aW=0}while(1){aX=c[aV>>2]|0;if((aX|0)==0){break L28213}aZ=aX|0;if((c[aX+4>>2]|0)==(ak|0)){break}else{aV=aZ;aW=aX}}ak=c[aZ>>2]|0;if((aW|0)==0){c[10822]=ak}else{c[aW>>2]=ak}ak=c[aX+60>>2]|0;if((ak|0)!=0){uu(ak)}ak=c[aX+64>>2]|0;if((ak|0)!=0){uu(ak)}uu(aX);break L28213}}while(0);aj=c[10822]|0;if((aj|0)==0){break}else{a$=aj}do{c[10822]=c[a$>>2];aj=c[a$+60>>2]|0;if((aj|0)!=0){uu(aj)}aj=c[a$+64>>2]|0;if((aj|0)!=0){uu(aj)}uu(a$);a$=c[10822]|0;}while((a$|0)!=0)}else if((z|0)==33){uq(32,0)}else if((z|0)==34){uu(c[12908]|0);bA(5,179864);bA(2,179864);aj=bA(5,0)|0;if((aj|0)==0){a0=0}else{a0=bP(aj|0)|0}c[12908]=a0}else if((z|0)==35){L28592:do{if((J|0)<(c[8272]|0)){aj=c[1054]|0;ak=c[aj+(J*40&-1)+36>>2]|0;L28594:do{if((a[aj+(J*40&-1)|0]&1)!=0){Q=aj+(J*40&-1)+32|0;N=c[10036]|0;O=0;while(1){if((O|0)>=(ak|0)){break}if((a[N+((c[Q>>2]|0)+O|0)|0]|0)==(a[O+103664|0]|0)){O=O+1|0}else{break L28594}}if((O|0)==1){a1=0;M=21418;break L28592}}}while(0);if((ak|0)>0){Q=0;N=J;e=aj;while(1){a2=e+(N*40&-1)+32|0;a3=(c[a2>>2]|0)+Q|0;P=(c[10036]|0)+a3|0;ai=a[P]|0;do{if(ai<<24>>24==114){an=(a[69604]&1)==0;a[69604]=0;h[8701]=0.0;if(an){a4=N;a5=e;a6=7;break}ju();a4=c[13898]|0;a5=c[1054]|0;a6=7}else{do{if((a_(P|0,108208,2)|0)==0){a7=6}else{if((a_(P|0,108120,2)|0)==0){a7=5;break}if((a_(P|0,124768,2)|0)==0){a7=4;break}if((a_(P|0,88416,2)|0)==0){a7=3;break}if(ai<<24>>24==120){a7=2;break}if(ai<<24>>24==121){a7=1;break}if(ai<<24>>24==122){a7=0}else{M=21423;break L28211}}}while(0);an=c[56724+(a7<<3)>>2]|0;a[64788+(an*688&-1)|0]=0;h[64792+(an*688&-1)>>3]=0.0;a4=N;a5=e;a6=a7}}while(0);ai=(uA(c[56720+(a6<<3)>>2]|0)|0)+Q|0;if((ai|0)<(c[a5+(a4*40&-1)+36>>2]|0)){Q=ai;N=a4;e=a5}else{a8=a4;break}}}else{a8=J}c[13898]=a8+1}else{a1=0;M=21418}}while(0);if((M|0)==21418){while(1){M=0;if((a1|0)!=7){a[64788+(a1*688&-1)|0]=0;h[64792+(a1*688&-1)>>3]=0.0;e=a1+1|0;if((e|0)<11){a1=e;M=21418;continue}else{break}}e=(a[69604]&1)==0;a[69604]=0;h[8701]=0.0;if(e){a1=8;M=21418;continue}ju();a1=8;M=21418}}c[6928]=0}else if((z|0)==17){c[11732]=10;c[11756]=10;c[11734]=1;c[11752]=1;h[5865]=1.0;h[5864]=1.0;a[47032]=0}else if((z|0)==18){b[12272]=120;w=121;a[24595]=w&255;w=w>>8;a[24596|0]=w&255}else if((z|0)==19){c[11252]=0}else if((z|0)==84){a[46752]=0}else if((z|0)==86){e=c[3526]|0;if((e|0)!=0){az(e|0)}c[3526]=0;a[14112]=0}else if((z|0)==24){a[65036]=0;a[65037]=0;a[65724]=0;a[65725]=0;a[66412]=0;a[66413]=0;a[67100]=0;a[67101]=0;a[67788]=0;a[67789]=0;a[68476]=0;a[68477]=0;a[69164]=0;a[69165]=0;a[69852]=0;a[69853]=0;a[70540]=0;a[70541]=0;a[71228]=0;a[71229]=0;a[71916]=0;a[71917]=0}else if((z|0)==25){a[38984]=0}else if((z|0)==26){M=21341;break L28211}else if((z|0)==13){c[11690]=0}else if((z|0)==28){a[36120]=0}else if((z|0)==29){a[36288]=0}else if((z|0)==44){c[8496]=0;hM()}else if((z|0)==45){lm()}else if((z|0)==41){c[1066]=4;h[535]=-1.0}else if((z|0)==15){e=c[1054]|0;N=c[e+(J*40&-1)+36>>2]|0;Q=c[e+(J*40&-1)+32>>2]|0;L28643:do{if((a[e+(J*40&-1)|0]&1)==0){M=21452}else{if((N|0)<=0){a[47712]=0;break}aj=c[10036]|0;ak=0;ai=0;P=Q;while(1){if((a[ak+115448|0]|0)==(a[aj+(ak+P|0)|0]|0)){a9=P;ba=ai}else{if((ak|0)!=4){M=21452;break L28643}a9=P-1|0;ba=1}bb=ak+1|0;if((bb|0)<(ba+N|0)){ak=bb;ai=ba;P=a9}else{break}}if((ba|0)!=0|(bb|0)==4){a[47712]=0}else{a[47712]=0;if((bb|0)!=8){break}}c[13898]=J+1;break L28213}}while(0);if((M|0)==21452){M=0;a[47712]=0}uu(c[8528]|0);c[8528]=0;a[47120]=0;uu(c[11948]|0);c[11948]=bP(199184)|0;N=c[12168]|0;Q=c[11862]|0;if((Q|0)>0){e=0;P=Q;while(1){Q=N+(e*232&-1)+224|0;ai=c[Q>>2]|0;if((ai|0)==0){bc=P}else{uu(ai);c[Q>>2]=0;bc=c[11862]|0}Q=e+1|0;if((Q|0)<(bc|0)){e=Q;P=bc}else{break}}}c[11862]=0;c[12202]=c[12200];c[12206]=0}else if((z|0)==9){h[7030]=-1.0;a[56232]=1}else if((z|0)==10){a[35888]=0}else if((z|0)==4){L28672:do{if((J|0)<(c[8272]|0)){P=c[1054]|0;L28674:do{if((a[P+(J*40&-1)|0]&1)!=0){e=c[P+(J*40&-1)+36>>2]|0;N=P+(J*40&-1)+32|0;Q=c[10036]|0;ai=0;while(1){if((ai|0)>=(e|0)){break}if((a[Q+((c[N>>2]|0)+ai|0)|0]|0)==(a[ai+103664|0]|0)){ai=ai+1|0}else{break L28674}}if((ai|0)==1){break L28672}}}while(0);P=is(p)|0;N=c[P>>2]|0;if((N|0)==2){bd=+h[P+8>>3]}else if((N|0)==3){bd=+uz(c[P+8>>2]|0,0)}else if((N|0)==1){bd=+(c[P+8>>2]|0)}else{M=21199;break L28211}if((c[I>>2]|0)==3){uu(c[q>>2]|0);c[I>>2]=1}P=~~bd;be=c[13898]|0;if((be|0)<(c[8272]|0)){N=c[1054]|0;if((a[N+(be*40&-1)|0]&1)==0){M=21690;break L28211}Q=c[N+(be*40&-1)+36>>2]|0;e=N+(be*40&-1)+32|0;N=c[10036]|0;ak=0;while(1){if((ak|0)>=(Q|0)){break}if((a[N+((c[e>>2]|0)+ak|0)|0]|0)==(a[ak+103664|0]|0)){ak=ak+1|0}else{M=21691;break L28211}}if((ak|0)==1){bf=43304;bg=0}else{M=21692;break L28211}}else{bf=43304;bg=0}while(1){bh=c[bf>>2]|0;if((bh|0)==0){M=21215;break L28211}bi=bh|0;if((c[bh+4>>2]|0)==(P|0)){break}else{bf=bi;bg=bh}}P=c[bi>>2]|0;if((bg|0)==0){c[10826]=P}else{c[bg>>2]=P}uu(bh);break L28213}}while(0);P=c[10826]|0;if((P|0)==0){break}else{bj=P}do{c[10826]=c[bj>>2];uu(bj);bj=c[10826]|0;}while((bj|0)!=0)}else if((z|0)==64){uu(c[16801]|0);c[16801]=0;uu(c[16802]|0);uD(67144,51296,192);c[16799]=-270}else if((z|0)==104){uu(c[17317]|0);c[17317]=0;uu(c[17318]|0);uD(69208,51296,192)}else if((z|0)==123){uu(c[17145]|0);c[17145]=0;uu(c[17146]|0);uD(68520,51296,192);c[17143]=-270}else if((z|0)==116){c[16508]=0}else if((z|0)==107){c[17196]=0}else if((z|0)==135){c[16336]=0}else if((z|0)==126){c[17024]=0}else if((z|0)==144){c[16164]=0}else if((z|0)==80){ea(0,0)}else if((z|0)==81){uu(c[57238]|0);c[57238]=0}else if((z|0)==75){L28718:do{if((J|0)<(c[8272]|0)){P=c[1054]|0;L28720:do{if((a[P+(J*40&-1)|0]&1)!=0){ak=c[P+(J*40&-1)+36>>2]|0;e=P+(J*40&-1)+32|0;N=c[10036]|0;Q=0;while(1){if((Q|0)>=(ak|0)){break}if((a[N+((c[e>>2]|0)+Q|0)|0]|0)==(a[Q+103664|0]|0)){Q=Q+1|0}else{break L28720}}if((Q|0)==1){break L28718}}}while(0);P=is(k)|0;e=c[P>>2]|0;if((e|0)==1){bk=+(c[P+8>>2]|0)}else if((e|0)==2){bk=+h[P+8>>3]}else if((e|0)==3){bk=+uz(c[P+8>>2]|0,0)}else{M=21503;break L28211}if((c[C>>2]|0)==3){uu(c[A>>2]|0);c[C>>2]=1}P=~~bk;bl=c[13898]|0;if((bl|0)<(c[8272]|0)){e=c[1054]|0;if((a[e+(bl*40&-1)|0]&1)==0){M=21694;break L28211}N=c[e+(bl*40&-1)+36>>2]|0;ak=e+(bl*40&-1)+32|0;e=c[10036]|0;ai=0;while(1){if((ai|0)>=(N|0)){break}if((a[e+((c[ak>>2]|0)+ai|0)|0]|0)==(a[ai+103664|0]|0)){ai=ai+1|0}else{M=21693;break L28211}}if((ai|0)==1){bm=43272;bn=0}else{M=21695;break L28211}}else{bm=43272;bn=0}while(1){bo=c[bm>>2]|0;if((bo|0)==0){break L28213}bp=bo|0;if((c[bo+4>>2]|0)==(P|0)){break}else{bm=bp;bn=bo}}P=c[bp>>2]|0;if((bn|0)==0){c[10818]=P}else{c[bn>>2]=P}if((c[bo+12>>2]|0)==4){uu(c[(bo+104|0)+4>>2]|0)}uu(bo);break L28213}}while(0);P=c[10818]|0;if((P|0)==0){break}else{bq=P}do{c[10818]=c[bq>>2];if((c[bq+12>>2]|0)==4){uu(c[(bq+104|0)+4>>2]|0)}uu(bq);bq=c[10818]|0;}while((bq|0)!=0)}else if((z|0)==117){t6(2)}else if((z|0)==111|(z|0)==114){c[16574]=1}else if((z|0)==52){c[16432]=0;h[8217]=10.0}else if((z|0)==136){t6(1)}else if((z|0)==130|(z|0)==133){c[16574]=1}else if((z|0)==46){c[17292]=0;h[8647]=10.0}else if((z|0)==108){t6(6)}else if((z|0)==56){h[3296]=0.0;h[4384]=0.0;h[7048]=0.0;h[531]=0.0}else if((z|0)==57){g[184]=0.0;g[44]=0.0}else if((z|0)==58){if((a[33512]&1)!=0){M=21466;break L28211}lj(0);P=c[8244]|0;if((P|0)==0){break}uu(P);c[8244]=0}else if((z|0)==82){iO(c[10814]|0);c[10814]=0;iY(c[10828]|0);c[10828]=0;c[6352]=100;c[6350]=100}else if((z|0)==83){g[178]=1.0;g[38]=1.0;g[2]=1.0}else if((z|0)==85){P=c[8272]|0;L28774:do{if((J|0)<(P|0)){ai=c[1054]|0;ak=(a[ai+(J*40&-1)|0]&1)==0;e=c[ai+(J*40&-1)+36>>2]|0;L28776:do{if(ak){br=c[10036]|0;bs=ai+(J*40&-1)+32|0}else{N=ai+(J*40&-1)+32|0;aj=c[10036]|0;O=0;while(1){if((O|0)>=(e|0)){break}if((a[aj+((c[N>>2]|0)+O|0)|0]|0)==(a[O+103664|0]|0)){O=O+1|0}else{br=aj;bs=N;break L28776}}if((O|0)==1){break L28774}else{br=aj;bs=N}}}while(0);Q=c[bs>>2]|0;an=(e|0)>0;ah=21680;am=116616;L28784:while(1){L28786:do{if(!ak){if(an){al=0;ao=0;bt=Q;while(1){bu=a[am+al|0]|0;if(bu<<24>>24==(a[br+(al+bt|0)|0]|0)){bv=bt;bw=ao}else{if(bu<<24>>24!=36){break L28786}bv=bt-1|0;bw=1}bx=al+1|0;if((bx|0)<(bw+e|0)){al=bx;ao=bw;bt=bv}else{break}}if((bw|0)==0){by=bx}else{bz=ah;break L28784}}else{by=0}bt=a[am+by|0]|0;if((bt<<24>>24|0)==36|(bt<<24>>24|0)==0){bz=ah;break L28784}}}while(0);N=ah+8|0;aj=c[N>>2]|0;if((aj|0)==0){bz=N;break}else{ah=N;am=aj}}am=c[bz+4>>2]|0;if((am|0)==4){c[12372]=0;c[12373]=100;c[12374]=0;c[12376]=0;c[13898]=J+1;break L28213}else if((am|0)==10){c[9670]=3;c[9671]=2;c[13898]=J+1;break L28213}else if((am|0)==5){t8(c[10824]|0);c[10824]=0;c[13898]=(c[13898]|0)+1;break L28213}else if((am|0)==8){uD(49160,1144,272);c[13898]=J+1;break L28213}else if((am|0)==1){c[12890]=18;c[13898]=J+1;break L28213}else if((am|0)==2){c[10058]=1;c[13898]=J+1;break L28213}else if((am|0)==3){ah=J+1|0;c[13898]=ah;L28807:do{if((ah|0)<(P|0)){L28809:do{if((a[ai+(ah*40&-1)|0]&1)!=0){e=c[ai+(ah*40&-1)+36>>2]|0;Q=ai+(ah*40&-1)+32|0;an=0;while(1){if((an|0)>=(e|0)){break}if((a[br+((c[Q>>2]|0)+an|0)|0]|0)==(a[an+103664|0]|0)){an=an+1|0}else{break L28809}}if((an|0)==1){break L28807}}}while(0);Q=is(f)|0;e=c[Q>>2]|0;if((e|0)==2){bB=+h[Q+8>>3]}else if((e|0)==3){bB=+uz(c[Q+8>>2]|0,0)}else if((e|0)==1){bB=+(c[Q+8>>2]|0)}else{M=21560;break L28211}if((c[D>>2]|0)==3){uu(c[K>>2]|0);c[D>>2]=1}Q=~~bB;e=0;ak=43280;while(1){bC=c[ak>>2]|0;if((bC|0)==0){break L28213}bD=bC|0;if((c[bC+4>>2]|0)==(Q|0)){break}else{e=bC;ak=bD}}ak=c[bD>>2]|0;if((c[10820]|0)==(bC|0)){c[10820]=ak}else{c[e>>2]=ak}uu(bC);break L28213}}while(0);ah=c[10820]|0;if((ah|0)==0){break L28213}else{bE=ah}while(1){c[10820]=c[bE>>2];uu(bE);bE=c[10820]|0;if((bE|0)==0){break L28213}}}else if((am|0)==6){uD(50800,1688,272);c[13898]=J+1;break L28213}else if((am|0)==7){uD(49520,1416,272);c[13898]=J+1;break L28213}else if((am|0)==11){uE(L|0,0,3);ah=56248;c[ah>>2]=0;c[ah+4>>2]=0;h[7032]=1.5;a[56264]=1;a[56265]=a[L]|0;a[56266|0]=a[L+1|0]|0;a[56267|0]=a[L+2|0]|0;c[14067]=6;c[14068]=252;c[14069]=0;h[7035]=1.0;c[14072]=1;c[14073]=0;c[13898]=J+1;break L28213}else{M=21577;break L28211}}}while(0);c[12890]=18;c[10058]=1;P=c[10820]|0;if((P|0)==0){bF=J}else{ah=P;do{c[10820]=c[ah>>2];uu(ah);ah=c[10820]|0;}while((ah|0)!=0);bF=c[13898]|0}c[12372]=0;c[12373]=100;c[12374]=0;c[12376]=0;uD(49160,1144,272);uD(50800,1688,272);uD(49520,1416,272);c[9670]=3;c[9671]=2;uE(L|0,0,3);ah=56248;c[ah>>2]=0;c[ah+4>>2]=0;h[7032]=1.5;a[56264]=1;a[56265]=a[L]|0;a[56266|0]=a[L+1|0]|0;a[56267|0]=a[L+2|0]|0;c[14067]=6;c[14068]=252;c[14069]=0;h[7035]=1.0;c[14072]=1;c[14073]=0;c[13898]=bF+1}else{M=21675;break L28211}}while(0);if(!(ix(c[6074]|0)|0)){M=21678;break}c[13898]=J}if((M|0)==21692){uf(be,135968,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21693){uf(bl,170992,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21694){uf(bl,170992,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21695){uf(bl,170992,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21215){uf(be,134376,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21675){uf(J,148616,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21678){e7(0);bl=c[6074]|0;if((bl|0)==0){c[6074]=0;i=d;return}else{bG=bl}while(1){bl=c[bG>>2]|0;uu(c[bG+12>>2]|0);uu(bG);if((bl|0)==0){break}else{bG=bl}}c[6074]=0;i=d;return}else if((M|0)==21503){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21560){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21577){uf(J,209800,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21423){c[a2>>2]=a3;uf(c[13898]|0,174808,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21341){uf(J,153432,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21361){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21466){uf(J,179040,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21199){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21397){uf(-1,213288,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21681){uf(aU,161624,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21682){uf(aU,161624,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21683){uf(aU,161624,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21684){uf(J,139712,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21685){uf(J,139712,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21686){uf(J,139712,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21687){uf(J,139712,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21690){uf(be,135968,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((M|0)==21691){uf(be,135968,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function t6(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0;d=i;i=i+32|0;e=d|0;uE(e|0,0,28);f=b>>>0<11;g=f?b:0;j=f?b+1|0:11;if(g>>>0<j>>>0){k=g}else{i=d;return}do{c[64916+(k*688&-1)>>2]=0;g=64924+(k*688&-1)|0;b=c[g>>2]|0;if((b|0)!=0){uu(b);c[g>>2]=0}uE(64928+(k*688&-1)|0,0,16);c[64984+(k*688&-1)>>2]=4;c[64988+(k*688&-1)>>2]=4;c[64992+(k*688&-1)>>2]=4;g=(64648+(k*688&-1)|0)+348|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];c[g+16>>2]=c[e+16>>2];c[g+20>>2]=c[e+20>>2];c[g+24>>2]=c[e+24>>2];a[65024+(k*688&-1)|0]=0;c[65032+(k*688&-1)>>2]=0;h[65056+(k*688&-1)>>3]=1.0;h[65064+(k*688&-1)>>3]=.5;a[65072+(k*688&-1)|0]=1;a[65272+(k*688&-1)|0]=0;g=64944+(k*688&-1)|0;b=c[g>>2]|0;if((b|0)!=0){f=b;while(1){b=c[f+16>>2]|0;l=c[f+8>>2]|0;if((l|0)!=0){uu(l)}uu(f);if((b|0)==0){break}else{f=b}}}c[g>>2]=0;k=k+1|0;}while(k>>>0<j>>>0);i=d;return}function t7(){var d=0,e=0,f=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0;d=i;i=i+40|0;e=d|0;f=d+8|0;j=a[37400]&1;c[13898]=(c[13898]|0)+1;e7(4);k=c[13898]|0;l=c[1054]|0;n=c[l+(k*40&-1)+36>>2]|0;o=c[l+(k*40&-1)+32>>2]|0;p=(a[l+(k*40&-1)|0]&1)==0;L28894:do{if((n|0)>0&(p^1)){l=c[10036]|0;q=0;r=0;s=o;while(1){if((a[q+131368|0]|0)==(a[l+(q+s|0)|0]|0)){t=s;u=r}else{if((q|0)!=3){break L28894}t=s-1|0;u=1}x=q+1|0;if((x|0)<(u+n|0)){q=x;r=u;s=t}else{break}}if((u|0)==0){if(!((q|0)==10|(q|0)==2)){break}}c[13898]=k+1;i=d;return}}while(0);L28908:do{if(!((c[8272]|0)<=(k|0)|p)){u=c[10036]|0;t=0;while(1){if((t|0)>=(n|0)){break}if((a[u+(o+t|0)|0]|0)==(a[t+116488|0]|0)){t=t+1|0}else{break L28908}}if((t|0)!=4){break}u=c[14128]|0;if((u|0)==0){y=k}else{q=u;while(1){u=q+12|0;s=c[u>>2]|0;if((s|0)!=0){uu(s);c[u>>2]=0}u=c[q+24>>2]|0;uu(q);if((u|0)==0){break}else{q=u}}y=c[13898]|0}c[14128]=0;c[13898]=y+1;i=d;return}}while(0);a[37400]=0;iO(c[10814]|0);c[10814]=0;iY(c[10828]|0);c[10828]=0;c[6352]=100;c[6350]=100;iY(0);c[10828]=0;c[9344]=10;c[9342]=10;y=c[10826]|0;if((y|0)!=0){k=y;do{c[10826]=c[k>>2];uu(k);k=c[10826]|0;}while((k|0)!=0)}t8(c[10824]|0);c[10824]=0;k=c[10822]|0;if((k|0)!=0){y=k;do{c[10822]=c[y>>2];k=c[y+60>>2]|0;if((k|0)!=0){uu(k)}k=c[y+64>>2]|0;if((k|0)!=0){uu(k)}uu(y);y=c[10822]|0;}while((y|0)!=0)}y=c[10820]|0;if((y|0)!=0){k=y;do{c[10820]=c[k>>2];uu(k);k=c[10820]|0;}while((k|0)!=0)}k=c[10818]|0;if((k|0)!=0){y=k;do{c[10818]=c[y>>2];if((c[y+12>>2]|0)==4){uu(c[(y+104|0)+4>>2]|0)}uu(y);y=c[10818]|0;}while((y|0)!=0)}uD(49160,1144,272);uD(50800,1688,272);uD(49520,1416,272);do{if((a[30528]&1)!=0){a[30528]=0;y=(a[32936]&1)==0;if(!(y|(c[17539]|0)==0)){h[8773]=-5.0;h[8774]=-5.0}if(!y){break}b[12272]=120;if((a[37400]&1)==0){break}y=c[m>>2]|0;aI(199840,33,1,y|0)}}while(0);do{if((a[32936]&1)!=0){a[32936]=0;if((a[30528]&1)!=0){break}b[12272]=120;w=121;a[24595]=w&255;w=w>>8;a[24596|0]=w&255;if((a[37400]&1)==0){break}y=c[m>>2]|0;aI(184192,51,1,y|0)}}while(0);b[12272]=120;w=121;a[24595]=w&255;w=w>>8;a[24596|0]=w&255;y=f|0;uE(y|0,0,28);uu(c[1119]|0);c[1119]=0;uu(c[1120]|0);c[1120]=0;c[1140]=4;c[1141]=4;c[1142]=4;c[1143]=c[y>>2];c[4576>>2]=c[y+4>>2];c[4580>>2]=c[y+8>>2];c[4584>>2]=c[y+12>>2];c[4588>>2]=c[y+16>>2];c[4592>>2]=c[y+20>>2];c[4596>>2]=c[y+24>>2];c[1122]=0;uD(36120,26456,1240);a[36288]=0;f=c[13898]|0;L28963:do{if((f|0)<(c[8272]|0)){k=c[1054]|0;o=(a[k+(f*40&-1)|0]&1)==0;n=c[k+(f*40&-1)+36>>2]|0;L28965:do{if(o){z=c[10036]|0;A=k+(f*40&-1)+32|0}else{p=k+(f*40&-1)+32|0;q=c[10036]|0;t=0;while(1){if((t|0)>=(n|0)){break}if((a[q+((c[p>>2]|0)+t|0)|0]|0)==(a[t+103664|0]|0)){t=t+1|0}else{z=q;A=p;break L28965}}if((t|0)==1){B=21758;break L28963}else{z=q;A=p}}}while(0);k=c[A>>2]|0;u=(n|0)>0;s=56720;r=77416;L28973:while(1){L28975:do{if(!o){if(u){l=0;x=0;C=k;while(1){D=a[r+l|0]|0;if(D<<24>>24==(a[z+(l+C|0)|0]|0)){E=C;F=x}else{if(D<<24>>24!=36){break L28975}E=C-1|0;F=1}G=l+1|0;if((G|0)<(F+n|0)){l=G;x=F;C=E}else{break}}if((F|0)==0){H=G}else{I=s;break L28973}}else{H=0}C=a[r+H|0]|0;if((C<<24>>24|0)==36|(C<<24>>24|0)==0){I=s;break L28973}}}while(0);p=s+8|0;q=c[p>>2]|0;if((q|0)==0){I=p;break}else{s=p;r=q}}r=c[I+4>>2]|0;if((r|0)>-1){uD(64813+(r*688&-1)|0,82192,15);c[13898]=f+1;break}else{uh(f,75e3,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);break}}else{B=21758}}while(0);if((B|0)==21758){uD(64813,82192,15);uD(65501,82192,15);uD(66189,82192,15);uD(66877,82192,15);uD(67565,82192,15);uD(68253,82192,15);uD(68941,82192,15);uD(69629,82192,15);uD(70317,82192,15);uD(71005,82192,15);uD(71693,82192,15)}if(a[20368]|0){a[20368]=0;g[3538]=+g[5090];g[3536]=+g[5088];g[3534]=+g[5086];c[16336]=c[16336]^2;c[17024]=c[17024]^2}c[5094]=0;c[18072]=0;g[3536]=30.0;g[3538]=60.0;g[3534]=1.0;g[3540]=0.0;g[3532]=1.0;B=0;L28997:do{c[64864+(B*688&-1)>>2]=6758437;a[64812+(B*688&-1)|0]=1;c[64808+(B*688&-1)>>2]=0;f=65280+(B*688&-1)|0;c[f>>2]=c[12782];c[f+4>>2]=c[12783];c[f+8>>2]=c[12784];c[f+12>>2]=c[12785];c[f+16>>2]=c[12786];c[f+20>>2]=c[12787];c[f+24>>2]=c[12788];c[f+28>>2]=c[12789];c[f+32>>2]=c[12790];c[f+36>>2]=c[12791];c[f+40>>2]=c[12792];c[f+44>>2]=c[12793];c[f+48>>2]=c[12794];c[f+52>>2]=c[12795];c[64656+(B*688&-1)>>2]=0;f=65140+(B*688&-1)|0;uu(c[f>>2]|0);c[f>>2]=0;f=65144+(B*688&-1)|0;uu(c[f>>2]|0);c[f>>2]=0;c[65224+(B*688&-1)>>2]=4;c[65228+(B*688&-1)>>2]=4;c[65232+(B*688&-1)>>2]=4;c[65152+(B*688&-1)>>2]=0;uD(65080+(B*688&-1)|0,51296,192);if((B|0)==5|(B|0)==3|(B|0)==1){c[65132+(B*688&-1)>>2]=-270}c[64652+(B*688&-1)>>2]=3;J=+h[56816+(B*24&-1)>>3];h[64680+(B*688&-1)>>3]=J;h[64696+(B*688&-1)>>3]=J;J=+h[56824+(B*24&-1)>>3];h[64688+(B*688&-1)>>3]=J;h[64704+(B*688&-1)>>3]=J;c[64728+(B*688&-1)>>2]=0;c[64732+(B*688&-1)>>2]=0;t6(B);c[64916+(B*688&-1)>>2]=c[56836+(B*24&-1)>>2];h[65048+(B*688&-1)>>3]=10.0;uD(64920+(B*688&-1)|0,51184,112);c[65040+(B*688&-1)>>2]=1;do{if((B|0)==7){f=(a[69604]&1)==0;a[69604]=0;h[8701]=0.0;if(f){B=B+1|0;continue L28997}else{ju();break}}else{a[64788+(B*688&-1)|0]=0;h[64792+(B*688&-1)>>3]=0.0}}while(0);B=B+1|0;}while(B>>>0<11);a[27776]=1;B=e|0;uE(B|0,0,3);e=56248;c[e>>2]=0;c[e+4>>2]=0;h[7032]=1.5;a[56264]=1;a[56265]=a[B]|0;a[56266|0]=a[B+1|0]|0;a[56267|0]=a[B+2|0]|0;c[14067]=6;c[14068]=252;c[14069]=0;h[7035]=1.0;c[14072]=1;c[14073]=0;h[7030]=-1.0;a[56232]=1;a[54144]=0;a[54160]=1;a[54152]=0;c[14074]=c[12768];c[14075]=c[12769];c[14076]=c[12770];c[14077]=c[12771];c[14078]=c[12772];c[14079]=c[12773];c[14080]=c[12774];c[14081]=c[12775];c[14082]=c[12776];c[14083]=c[12777];c[14084]=c[12778];c[14085]=c[12779];c[14086]=c[12780];c[14087]=c[12781];c[11692]=31;a[46752]=1;c[12890]=18;c[10058]=1;c[10859]=0;c[10851]=0;h[7077]=1.0;c[14156]=1;a[65036]=0;a[65037]=0;a[65724]=0;a[65725]=0;a[66412]=0;a[66413]=0;a[67100]=0;a[67101]=0;a[67788]=0;a[67789]=0;a[68476]=0;a[68477]=0;a[69164]=0;a[69165]=0;a[69852]=0;a[69853]=0;a[70540]=0;a[70541]=0;a[71228]=0;a[71229]=0;a[71916]=0;a[71917]=0;c[10012]=c[12358];c[10013]=c[12359];c[10014]=c[12360];c[10015]=c[12361];c[10016]=c[12362];c[10017]=c[12363];c[10018]=c[12364];c[10019]=c[12365];c[10020]=c[12366];c[10021]=c[12367];c[10022]=c[12368];c[10023]=c[12369];c[10024]=c[12370];c[10025]=c[12371];c[8694]=c[12358];c[8695]=c[12359];c[8696]=c[12360];c[8697]=c[12361];c[8698]=c[12362];c[8699]=c[12363];c[8700]=c[12364];c[8701]=c[12365];c[8702]=c[12366];c[8703]=c[12367];c[8704]=c[12368];c[8705]=c[12369];c[8706]=c[12370];c[8707]=c[12371];h[3815]=0.0;c[10026]=-1;c[6928]=0;c[9742]=1;c[9734]=3;c[9738]=1;a[38944]=0;a[38960]=0;c[9744]=0;a[38984]=0;a[35888]=1;a[53520]=a[96552]|0;a[53521|0]=a[96553|0]|0;a[53522|0]=a[96554|0]|0;a[53523|0]=a[96555|0]|0;a[53524|0]=a[96556|0]|0;a[53525|0]=a[96557|0]|0;h[9040]=1.0;c[8732]=0;g[178]=1.0;g[38]=1.0;g[2]=1.0;g[18074]=0.0;g[184]=0.0;g[44]=0.0;uE(y|0,0,28);uu(c[1183]|0);c[1183]=0;uu(c[1184]|0);c[1184]=0;c[1204]=4;c[1205]=4;c[1206]=4;c[1207]=c[y>>2];c[4832>>2]=c[y+4>>2];c[4836>>2]=c[y+8>>2];c[4840>>2]=c[y+12>>2];c[4844>>2]=c[y+16>>2];c[4848>>2]=c[y+20>>2];c[4852>>2]=c[y+24>>2];c[1186]=0;c[1164]=0;c[1166]=1;h[3296]=0.0;h[4384]=0.0;h[7048]=0.0;h[531]=0.0;c[11690]=0;c[13366]=5;c[13378]=0;c[13368]=4;c[13374]=5;c[13372]=0;h[11]=1.0e-8;c[11732]=10;c[11756]=10;c[11734]=1;c[11752]=1;h[5865]=1.0;h[5864]=1.0;a[47032]=0;h[77]=.5;a[624]=0;c[14100]=4;h[7052]=-1.0;c[8786]=4;h[4395]=-1.0;c[6598]=4;h[3301]=-1.0;c[1066]=4;h[535]=-1.0;h[3817]=1.0;h[3818]=1.0;b[15316]=115;a[30639]=98;a[30640]=0;a[30641]=97;a[30642]=52;c[7661]=0;c[7662]=0;c[7663]=4;c[7664]=1;c[7665]=1;uD(54016,50688,112);if((c[11254]|0)!=0){c[5163]=114;c[5164]=7;c[5165]=5;c[5166]=15;a[20668]=112;a[20684]=0;c[5168]=0;c[5172]=0;uu(c[5173]|0);c[5173]=0;uu(c[5170]|0);c[5170]=0;c[5174]=114;h[2705]=1.5;c[7640]=48}y=c[12168]|0;B=c[11862]|0;if((B|0)>0){e=0;f=B;while(1){B=y+(e*232&-1)+224|0;I=c[B>>2]|0;if((I|0)==0){K=f}else{uu(I);c[B>>2]=0;K=c[11862]|0}B=e+1|0;if((B|0)<(K|0)){e=B;f=K}else{break}}}c[11862]=0;c[12202]=c[12200];c[12206]=0;c[12372]=0;c[12373]=100;c[12374]=0;c[12376]=0;c[9670]=3;c[9671]=2;uu(c[8528]|0);c[8528]=0;a[47120]=0;uu(c[11948]|0);c[11948]=bP(199184)|0;K=c[10568]|0;if((K|0)!=0){uu(K)}c[10568]=0;a[42568]=0;e7(0);a[37400]=j;i=d;return}function t8(a){a=a|0;if((a|0)==0){return}else{t8(c[a>>2]|0);uu(a);return}}function t9(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=c[1054]|0;L29029:do{if((a[e+(b*40&-1)|0]&1)==0){f=e}else{if((bO(d[(c[10036]|0)+(c[e+(b*40&-1)+32>>2]|0)|0]|0|0)|0)==0){g=c[1054]|0;if((a[(c[10036]|0)+(c[g+(b*40&-1)+32>>2]|0)|0]|0)!=95){f=g;break}}g=b+1|0;h=c[1054]|0;if((c[8272]|0)<=(g|0)){f=h;break}if((a[h+(g*40&-1)|0]&1)==0){f=h;break}i=c[h+(g*40&-1)+36>>2]|0;j=h+(g*40&-1)+32|0;g=c[10036]|0;k=0;while(1){if((k|0)>=(i|0)){break}if((a[g+((c[j>>2]|0)+k|0)|0]|0)==(a[k+115e3|0]|0)){k=k+1|0}else{f=h;break L29029}}if((k|0)==1){l=1}else{f=h;break}return l|0}}while(0);if((a[f+(b*40&-1)|0]&1)==0){l=0;return l|0}do{if((bO(d[(c[10036]|0)+(c[f+(b*40&-1)+32>>2]|0)|0]|0|0)|0)==0){if((a[(c[10036]|0)+(c[(c[1054]|0)+(b*40&-1)+32>>2]|0)|0]|0)==95){break}else{l=0}return l|0}}while(0);f=b+1|0;if((c[8272]|0)<=(f|0)){l=0;return l|0}e=c[1054]|0;if((a[e+(f*40&-1)|0]&1)==0){l=0;return l|0}j=c[e+(f*40&-1)+36>>2]|0;g=e+(f*40&-1)+32|0;f=c[10036]|0;i=0;while(1){if((i|0)>=(j|0)){break}if((a[f+((c[g>>2]|0)+i|0)|0]|0)==(a[i+199040|0]|0)){i=i+1|0}else{l=0;m=21849;break}}if((m|0)==21849){return l|0}if((i|0)!=1){l=0;return l|0}i=b+2|0;if((a[e+(i*40&-1)|0]&1)==0){l=0;return l|0}do{if((bO(d[f+(c[e+(i*40&-1)+32>>2]|0)|0]|0|0)|0)==0){if((a[(c[10036]|0)+(c[(c[1054]|0)+(i*40&-1)+32>>2]|0)|0]|0)==95){break}else{l=0}return l|0}}while(0);i=b+3|0;b=c[8272]|0;L29071:do{if((b|0)>(i|0)){e=i;f=b;while(1){g=c[1054]|0;if((a[g+(e*40&-1)|0]&1)==0){n=e;o=f;break L29071}j=c[g+(e*40&-1)+36>>2]|0;p=g+(e*40&-1)+32|0;q=c[10036]|0;r=0;while(1){if((r|0)>=(j|0)){break}if((a[q+((c[p>>2]|0)+r|0)|0]|0)==(a[r+148464|0]|0)){r=r+1|0}else{n=e;o=f;break L29071}}if((r|0)!=1){n=e;o=f;break L29071}p=e+1|0;if((a[g+(p*40&-1)|0]&1)==0){l=0;m=21856;break}if((bO(d[q+(c[g+(p*40&-1)+32>>2]|0)|0]|0|0)|0)==0){if((a[(c[10036]|0)+(c[(c[1054]|0)+(p*40&-1)+32>>2]|0)|0]|0)!=95){l=0;m=21859;break}}p=e+2|0;j=c[8272]|0;if((j|0)>(p|0)){e=p;f=j}else{n=p;o=j;break L29071}}if((m|0)==21859){return l|0}else if((m|0)==21856){return l|0}}else{n=i;o=b}}while(0);if((o|0)<=(n|0)){l=0;return l|0}b=c[1054]|0;if((a[b+(n*40&-1)|0]&1)==0){l=0;return l|0}i=c[b+(n*40&-1)+36>>2]|0;f=b+(n*40&-1)+32|0;e=c[10036]|0;h=0;while(1){if((h|0)>=(i|0)){break}if((a[e+((c[f>>2]|0)+h|0)|0]|0)==(a[h+131272|0]|0)){h=h+1|0}else{l=0;m=21858;break}}if((m|0)==21858){return l|0}if((h|0)!=1){l=0;return l|0}h=n+1|0;if((o|0)<=(h|0)){l=0;return l|0}if((a[b+(h*40&-1)|0]&1)==0){l=0;return l|0}o=c[b+(h*40&-1)+36>>2]|0;n=b+(h*40&-1)+32|0;h=0;while(1){if((h|0)>=(o|0)){break}if((a[e+((c[n>>2]|0)+h|0)|0]|0)==(a[h+115e3|0]|0)){h=h+1|0}else{l=0;m=21851;break}}if((m|0)==21851){return l|0}l=(h|0)==1&1;return l|0}function ua(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;d=i;i=i+16|0;e=d|0;f=d+8|0;g=b;h=b;L29117:while(1){b=a[g]|0;if((b<<24>>24|0)==0){break}else if((b<<24>>24|0)!=92){j=g+1|0;do{if((a[47120]|0)!=0&b<<24>>24==34){if((a[j]|0)!=34){break}a[h]=34;g=g+2|0;h=h+1|0;continue L29117}}while(0);a[h]=b;g=j;h=h+1|0;continue}k=g+1|0;l=a[k]|0;if((l<<24>>24|0)==34){a[h]=34;g=g+2|0;h=h+1|0;continue}else if((l<<24>>24|0)==114){a[h]=13;g=g+2|0;h=h+1|0;continue}else if((l<<24>>24|0)==92){a[h]=92;g=g+2|0;h=h+1|0;continue}else if((l<<24>>24|0)==116){a[h]=9;g=g+2|0;h=h+1|0;continue}else if((l<<24>>24|0)==110){a[h]=10;g=g+2|0;h=h+1|0;continue}else{if((l-48&255)>=8){g=k;h=h;continue}if((ca(k|0,(l<<24>>24==48?134368:132688)|0,(v=i,i=i+16|0,c[v>>2]=e,c[v+8>>2]=f,v)|0)|0)>0){a[h]=c[e>>2]&255;g=g+((c[f>>2]|0)+1|0)|0;h=h+1|0;continue}else{a[h]=92;a[h+1|0]=a[k]|0;g=g+2|0;h=h+2|0;continue}}}a[h]=0;i=d;return}function ub(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;f=c[1054]|0;g=c[f+(e*40&-1)+32>>2]|0;h=c[f+(e*40&-1)+36>>2]|0;e=(g-1|0)+h|0;i=db(c[b>>2]|0,(g+h|0)-(c[f+(d*40&-1)+32>>2]|0)|0,116456)|0;c[b>>2]=i;f=(c[(c[1054]|0)+(d*40&-1)+32>>2]|0)+1|0;L29139:do{if((f|0)<(e|0)){h=i;g=f;while(1){j=a[(c[10036]|0)+g|0]|0;if(j<<24>>24==0){k=h;break L29139}l=h+1|0;a[h]=j;j=g+1|0;if((j|0)<(e|0)){h=l;g=j}else{k=l;break}}}else{k=i}}while(0);a[k]=0;k=c[b>>2]|0;if((a[(c[10036]|0)+(c[(c[1054]|0)+(d*40&-1)+32>>2]|0)|0]|0)==34){ua(k);return}else{m=k;n=k}while(1){k=a[n]|0;if((k<<24>>24|0)==39){d=n+1|0;b=(a[d]|0)==39?d:n;o=b;p=a[b]|0}else if((k<<24>>24|0)==0){break}else{o=n;p=k}a[m]=p;m=m+1|0;n=o+1|0}a[m]=0;return}function uc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;e=uA(a|0)|0;f=(e+1|0)+(uA(b|0)|0)|0;e=ut(f)|0;do{if((e|0)==0){gk();g=ut(f)|0;if((g|0)!=0){h=g;break}uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=96488,v)|0);return 0}else{h=e}}while(0);uB(h|0,a|0);uC(h|0,b|0);i=d;return h|0}function ud(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=+f;g=+g;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0.0,Z=0,_=0.0,$=0,aa=0,ab=0.0,ac=0,ad=0,ae=0,af=0,ag=0,ai=0;j=i;i=i+2144|0;k=j|0;l=j+1032|0;m=j+2064|0;n=j+2072|0;o=j+2080|0;p=j+2088|0;q=j+2096|0;r=j+2104|0;s=j+2112|0;t=j+2120|0;u=j+2128|0;w=j+2136|0;c[m>>2]=0;x=k|0;y=k+1024|0;a[x]=0;k=c[8270]|0;do{if((k|0)!=0){if((aY(k|0,139696)|0)==0){break}bA(4,k|0)}}while(0);k=l|0;z=l+1|0;A=l+2|0;l=y;B=~~g;C=~~g>>>0;D=ah(O(g/4294967296.0),4294967295.0)>>>0;E=g/3.141592653589793;F=e;e=0;G=0.0;H=x;I=0;L29164:while(1){J=F;K=H;while(1){L=a[J]|0;M=J+1|0;if(L<<24>>24!=37){N=K+1|0;a[K]=L;if(L<<24>>24==0|(y|0)==(N|0)){Q=21902;break L29164}else{J=M;K=N;continue}}if((a[M]|0)!=37){break}a[K]=37;J=J+2|0;K=K+1|0}a[k]=37;if((a[M]|0)==35){a[z]=35;R=M;S=A;T=1}else{R=J;S=z;T=I}N=R;L=S;L29176:while(1){U=N+1|0;V=a[U]|0;do{if(V<<24>>24==46){W=46}else{if(((V&255)-48|0)>>>0<10){W=V;break}if((V<<24>>24|0)==45|(V<<24>>24|0)==43|(V<<24>>24|0)==32|(V<<24>>24|0)==39){W=V}else{break L29176}}}while(0);a[L]=W;N=U;L=L+1|0}J=V<<24>>24;do{if((J|0)==108){a[L]=102;a[L+1|0]=0;ue(f,g,0,n,m,k);X=l-K|0;Y=+h[n>>3];a0(K|0,X|0,k|0,(v=i,i=i+8|0,h[v>>3]=Y,v)|0);Z=1;_=f}else if((J|0)==115){a[L]=102;a[L+1|0]=0;ue(1.0,g,1,p,m,k);a0(K|0,l-K|0,k|0,(v=i,i=i+8|0,h[v>>3]=+h[p>>3],v)|0);Z=1;_=1.0}else if((J|0)==84){a[L]=100;a[L+1|0]=0;if(e){if(G!=1.0){Q=21934;break L29164}X=c[m>>2]|0;c[s>>2]=X;$=X}else{ue(1.0,g,0,0,s,74984);$=c[s>>2]|0}a0(K|0,l-K|0,k|0,(v=i,i=i+8|0,c[v>>2]=$,v)|0);Z=e;_=G}else if((J|0)==83){a[L]=100;a[L+1|0]=0;if(e){if(G!=1.0){Q=21940;break L29164}X=c[m>>2]|0;c[t>>2]=X;aa=X}else{ue(1.0,g,1,0,t,74984);aa=c[t>>2]|0}a0(K|0,l-K|0,k|0,(v=i,i=i+8|0,c[v>>2]=aa,v)|0);Z=e;_=G}else if((J|0)==98){a[L]=102;a[L+1|0]=0;ue(3.010299956639812,g,0,q,m,k);a0(K|0,l-K|0,k|0,(v=i,i=i+8|0,h[v>>3]=+h[q>>3],v)|0);Z=1;_=3.010299956639812}else if((J|0)==76){a[L]=100;a[L+1|0]=0;if(e){if(G!=f){Q=21929;break L29164}c[r>>2]=c[m>>2];ab=G}else{ab=f}ue(f,g,0,0,r,74984);a0(K|0,l-K|0,k|0,(v=i,i=i+8|0,c[v>>2]=c[r>>2],v)|0);Z=e;_=ab}else if((J|0)==101|(J|0)==69|(J|0)==102|(J|0)==70|(J|0)==103|(J|0)==71){a[L]=V;a[L+1|0]=0;a0(K|0,l-K|0,k|0,(v=i,i=i+8|0,h[v>>3]=g,v)|0);Z=e;_=G}else if((J|0)==99){a[L]=99;a[L+1|0]=0;if(e){if(G!=1.0){Q=21946;break L29164}X=c[m>>2]|0;c[u>>2]=X;ac=X}else{ue(1.0,g,1,0,u,74984);ac=c[u>>2]|0}X=ac+24|0;if(X>>>0<49){ad=(X|0)/3&-1;c[u>>2]=ad;X=l-K|0;ae=a[ad+204216|0]|0;a0(K|0,X|0,k|0,(v=i,i=i+8|0,c[v>>2]=ae,v)|0);Z=e;_=G;break}else{ae=l-K|0;a0(K|0,ae|0,199792,(v=i,i=i+8|0,c[v>>2]=ac,v)|0);Z=e;_=G;break}}else if((J|0)==116){a[L]=102;a[L+1|0]=0;ue(1.0,g,0,o,m,k);a0(K|0,l-K|0,k|0,(v=i,i=i+8|0,h[v>>3]=+h[o>>3],v)|0);Z=1;_=1.0}else if((J|0)==120|(J|0)==88|(J|0)==111|(J|0)==79){if(+P(+g)<2147483647.0){a[L]=V;a[L+1|0]=0;ae=l-K|0;a0(K|0,ae|0,k|0,(v=i,i=i+8|0,c[v>>2]=B,v)|0);Z=e;_=G;break}else{a[L]=108;a[L+1|0]=108;a[L+2|0]=a[U]|0;a[L+3|0]=0;ae=l-K|0;a0(K|0,ae|0,k|0,(v=i,i=i+16|0,c[v>>2]=C,c[v+8>>2]=D,v)|0);Z=e;_=G;break}}else if((J|0)==80){a[L]=102;a[L+1|0]=0;a0(K|0,l-K|0,k|0,(v=i,i=i+8|0,h[v>>3]=E,v)|0);Z=e;_=G}else if((J|0)==66){a[L]=99;a[L+1|0]=105;a[L+2|0]=0;if(e){if(G!=3.010299956639812){Q=21954;break L29164}ae=c[m>>2]|0;c[w>>2]=ae;af=ae}else{ue(3.010299956639812,g,0,0,w,74984);af=c[w>>2]|0}if((af-1|0)>>>0<8){ae=l-K|0;X=a[af+184160|0]|0;a0(K|0,ae|0,k|0,(v=i,i=i+8|0,c[v>>2]=X,v)|0);Z=e;_=G;break}if((af|0)>8){X=l-K|0;ae=af-8|0;a0(K|0,X|0,178992,(v=i,i=i+8|0,c[v>>2]=ae,v)|0);Z=e;_=G;break}if((af|0)>=0){Z=e;_=G;break}a0(K|0,l-K|0,174792,(v=i,i=i+8|0,c[v>>2]=af*10&-1,v)|0);Z=e;_=G}else{Q=21963;break L29164}}while(0);if(T){if((U|0)!=(cy(U|0,166744)|0)){Q=21969;break}}L=c[12886]|0;do{if((L|0)!=0){J=uA(L|0)|0;ae=a[c[b$()>>2]|0]|0;X=a8(K|0,ae|0)|0;if((X|0)==0){break}ad=K;ag=X;do{X=uA(ag|0)|0;ai=ag+J|0;if(((ai-ad|0)+X|0)>>>0>d>>>0){Q=21977;break L29164}uH(ai|0,ag+1|0,X|0);uD(ag|0,c[12886]|0,J);ag=a8(ai|0,ae|0)|0;}while((ag|0)!=0)}}while(0);F=N+2|0;e=Z;G=_;H=K+(uA(K|0)|0)|0;I=T}if((Q|0)==21902){uF(b|0,x|0,d|0);if((uA(x|0)|0)>>>0>=d>>>0){a[b+((d|0)==0?0:d-1|0)|0]=0}d=c[8270]|0;if((d|0)==0){i=j;return}if((aY(d|0,139696)|0)==0){i=j;return}bA(4,139696);i=j;return}else if((Q|0)==21940){uf(-1,215448,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==21946){uf(-1,209728,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==21929){uf(-1,82024,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==21954){uf(-1,193648,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==21969){j=c[8270]|0;if((j|0)==0){uf(-1,170952,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((aY(j|0,139696)|0)==0){uf(-1,170952,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}bA(4,139696);uf(-1,170952,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==21977){uf(-1,161576,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==21963){j=c[8270]|0;if((j|0)==0){uf(-1,170952,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((aY(j|0,139696)|0)==0){uf(-1,170952,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}bA(4,139696);uf(-1,170952,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((Q|0)==21934){uf(-1,222240,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}function ue(a,b,d,e,f,g){a=+a;b=+b;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0.0,l=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0.0,u=0,w=0.0,x=0,y=0.0,z=0;j=i;if(b==0.0){if((e|0)!=0){h[e>>3]=0.0}if((f|0)==0){i=j;return}c[f>>2]=0;i=j;return}if(b<0.0){k=-0.0-b;l=-1.0}else{k=b;l=1.0}b=+bQ(+k)/a;m=~~+O(+b);k=+R(10.0,+((b- +(m|0))*a));if(d){if(a!=1.0){uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=127848,v)|0)}n=(m|0)%3&-1;if((n|0)==2){o=m;p=22001}else if((n|0)==(-1|0)){o=m-3|0;p=22001}else if((n|0)==0){q=k;r=m}else if((n|0)==1){s=m;p=22003}else if((n|0)==(-2|0)){s=m-3|0;p=22003}else{uf(-1,126488,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if((p|0)==22001){q=k*100.0;r=o}else if((p|0)==22003){q=k*10.0;r=s}t=q;u=r-((r|0)%3&-1)|0}else{t=k;u=m}do{if((g|0)==0){w=t;x=u}else{if(d){y=1.0e3}else{y=+R(10.0,+a)}m=a8(g|0,46)|0;if((m|0)==0){z=0}else{z=aE(m+1|0,0,10)|0}if(t+ +R(10.0,+(+(-z|0)))*.5<y){w=t;x=u;break}w=t/y;x=u+(d?3:1)|0}}while(0);if((e|0)!=0){h[e>>3]=l*w}if((f|0)==0){i=j;return}c[f>>2]=x;i=j;return}function uf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0;f=i;i=i+144|0;g=f|0;h=f+16|0;uE(h|0,0,128);do{if((b|0)==(-2|0)){f=c[11932]|0;j=c[8802]|0;if(!((c[12892]|0)!=0&(f|0)!=0&(j|0)!=0)){break}k=c[m>>2]|0;l=(uA(j|0)|0)>>>0>77?76168:179864;n=c[11900]|0;cf(k|0,76792,(v=i,i=i+32|0,c[v>>2]=j,c[v+8>>2]=l,c[v+16>>2]=f,c[v+24>>2]=n,v)|0)}else if((b|0)!=(-1|0)){if((a[25280]&1)==0){n=c[m>>2]|0;f=c[12906]|0;l=(f|0)!=0?f:179864;f=c[10036]|0;cf(n|0,153408,(v=i,i=i+16|0,c[v>>2]=l,c[v+8>>2]=f,v)|0)}f=c[12906]|0;do{if((f|0)!=0){if((a[f]|0)==0){break}else{o=f}do{aF(32,c[m>>2]|0);o=o+1|0;}while((a[o]|0)!=0)}}while(0);if((c[(c[1054]|0)+(b*40&-1)+32>>2]|0)>0){f=0;do{aF(((a[(c[10036]|0)+f|0]|0)==9?9:32)|0,c[m>>2]|0);f=f+1|0;}while((f|0)<(c[(c[1054]|0)+(b*40&-1)+32>>2]|0))}aI(148792,2,1,c[m>>2]|0)}}while(0);b=c[12906]|0;do{if((b|0)!=0){if((a[b]|0)==0){break}else{p=b}do{aF(32,c[m>>2]|0);p=p+1|0;}while((a[p]|0)!=0)}}while(0);L29346:do{if((a[37400]&1)==0){p=c[8804]|0;do{if((p|0)!=0){b=c[p+4>>2]|0;if((b|0)==0){break}o=c[m>>2]|0;f=c[9354]|0;cf(o|0,146696,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=f,v)|0);break L29346}}while(0);p=c[m>>2]|0;f=c[9354]|0;cf(p|0,144600,(v=i,i=i+8|0,c[v>>2]=f,v)|0)}}while(0);f=g;c[f>>2]=e;c[f+4>>2]=0;b9(h|0,128,d|0,g|0);cf(c[m>>2]|0,141456,(v=i,i=i+8|0,c[v>>2]=h,v)|0);aI(139704,2,1,c[m>>2]|0);g=c[8270]|0;do{if((g|0)!=0){if((aY(g|0,139696)|0)==0){break}bA(4,139696)}}while(0);a[43504]=0;c[6932]=0;c[13544]=0;a[14176]=0;a[25288]=0;a[37408]=0;e7(2);g=e6(137752)|0;if((g|0)==0){iL()}d=g+8|0;do{if((a[d]&1)==0){if((aY(c[g+24>>2]|0,h|0)|0)==0){iL()}f=g+16|0;if((c[f>>2]|0)!=3){q=f;break}uu(c[g+24>>2]|0);c[f>>2]=1;q=f}else{a[d]=0;q=g+16|0}}while(0);d=bP(h|0)|0;c[q>>2]=3;c[g+24>>2]=d;iL()}function ug(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=c[b>>2]|0;c[b>>2]=e+1;f=d[e]|0;if((f&128|0)==0){c[a>>2]=f;g=1;return g|0}if((f&224|0)==192){e=f&31;c[a>>2]=e;h=d[c[b>>2]|0]|0;if((h&192|0)!=128){c[a>>2]=65535;g=0;return g|0}c[a>>2]=e<<6|h&63;c[b>>2]=(c[b>>2]|0)+1;if((c[a>>2]|0)>>>0>=128){g=1;return g|0}c[a>>2]=65535;g=0;return g|0}if((f&240|0)==224){h=f&15;c[a>>2]=h;e=d[c[b>>2]|0]|0;do{if((e&192|0)==128){c[a>>2]=h<<6|e&63;i=(c[b>>2]|0)+1|0;c[b>>2]=i;j=d[i]|0;if((j&192|0)!=128){break}c[a>>2]=c[a>>2]<<6|j&63;c[b>>2]=(c[b>>2]|0)+1;if((c[a>>2]|0)>>>0>=2048){g=1;return g|0}c[a>>2]=65535;g=0;return g|0}}while(0);c[a>>2]=65535;g=0;return g|0}if((f&248|0)==240){e=f&7;c[a>>2]=e;h=d[c[b>>2]|0]|0;do{if((h&192|0)==128){c[a>>2]=e<<6|h&63;j=(c[b>>2]|0)+1|0;c[b>>2]=j;i=d[j]|0;if((i&192|0)!=128){break}c[a>>2]=c[a>>2]<<6|i&63;i=(c[b>>2]|0)+1|0;c[b>>2]=i;j=d[i]|0;if((j&192|0)!=128){break}c[a>>2]=c[a>>2]<<6|j&63;c[b>>2]=(c[b>>2]|0)+1;if((c[a>>2]|0)>>>0>=65536){g=1;return g|0}c[a>>2]=65535;g=0;return g|0}}while(0);c[a>>2]=65535;g=0;return g|0}if((f&252|0)==248){h=f&3;c[a>>2]=h;e=d[c[b>>2]|0]|0;do{if((e&192|0)==128){c[a>>2]=h<<6|e&63;j=(c[b>>2]|0)+1|0;c[b>>2]=j;i=d[j]|0;if((i&192|0)!=128){break}c[a>>2]=c[a>>2]<<6|i&63;i=(c[b>>2]|0)+1|0;c[b>>2]=i;j=d[i]|0;if((j&192|0)!=128){break}c[a>>2]=c[a>>2]<<6|j&63;j=(c[b>>2]|0)+1|0;c[b>>2]=j;i=d[j]|0;if((i&192|0)!=128){break}c[a>>2]=c[a>>2]<<6|i&63;c[b>>2]=(c[b>>2]|0)+1;if((c[a>>2]|0)>>>0>=2097152){g=1;return g|0}c[a>>2]=65535;g=0;return g|0}}while(0);c[a>>2]=65535;g=0;return g|0}if((f&254|0)!=252){c[a>>2]=65535;g=0;return g|0}e=f&1;c[a>>2]=e;f=d[c[b>>2]|0]|0;do{if((f&192|0)==128){c[a>>2]=e<<6|f&63;h=(c[b>>2]|0)+1|0;c[b>>2]=h;i=d[h]|0;if((i&192|0)!=128){break}c[a>>2]=c[a>>2]<<6|i&63;i=(c[b>>2]|0)+1|0;c[b>>2]=i;h=d[i]|0;if((h&192|0)!=128){break}c[a>>2]=c[a>>2]<<6|h&63;h=(c[b>>2]|0)+1|0;c[b>>2]=h;i=d[h]|0;if((i&192|0)!=128){break}c[a>>2]=c[a>>2]<<6|i&63;i=(c[b>>2]|0)+1|0;c[b>>2]=i;h=d[i]|0;if((h&192|0)!=128){break}c[a>>2]=c[a>>2]<<6|h&63;c[b>>2]=(c[b>>2]|0)+1;if((c[a>>2]|0)>>>0>=67108864){g=1;return g|0}c[a>>2]=65535;g=0;return g|0}}while(0);c[a>>2]=65535;g=0;return g|0}function uh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,n=0,o=0,p=0;f=i;i=i+16|0;g=f|0;do{if((b|0)==(-2|0)){h=c[11932]|0;j=c[8802]|0;if(!((c[12892]|0)!=0&(h|0)!=0&(j|0)!=0)){break}k=c[m>>2]|0;l=(uA(j|0)|0)>>>0>77?76168:179864;n=c[11900]|0;cf(k|0,76792,(v=i,i=i+32|0,c[v>>2]=j,c[v+8>>2]=l,c[v+16>>2]=h,c[v+24>>2]=n,v)|0)}else if((b|0)!=(-1|0)){if((a[25280]&1)==0){n=c[m>>2]|0;h=c[12906]|0;l=(h|0)!=0?h:179864;h=c[10036]|0;cf(n|0,153408,(v=i,i=i+16|0,c[v>>2]=l,c[v+8>>2]=h,v)|0)}h=c[12906]|0;do{if((h|0)!=0){if((a[h]|0)==0){break}else{o=h}do{aF(32,c[m>>2]|0);o=o+1|0;}while((a[o]|0)!=0)}}while(0);if((c[(c[1054]|0)+(b*40&-1)+32>>2]|0)>0){h=0;do{aF(((a[(c[10036]|0)+h|0]|0)==9?9:32)|0,c[m>>2]|0);h=h+1|0;}while((h|0)<(c[(c[1054]|0)+(b*40&-1)+32>>2]|0))}aI(148792,2,1,c[m>>2]|0)}}while(0);b=c[12906]|0;do{if((b|0)!=0){if((a[b]|0)==0){break}else{p=b}do{aF(32,c[m>>2]|0);p=p+1|0;}while((a[p]|0)!=0)}}while(0);L29463:do{if((a[37400]&1)==0){p=c[8804]|0;do{if((p|0)!=0){b=c[p+4>>2]|0;if((b|0)==0){break}o=c[m>>2]|0;h=c[9354]|0;cf(o|0,146696,(v=i,i=i+16|0,c[v>>2]=b,c[v+8>>2]=h,v)|0);break L29463}}while(0);p=c[m>>2]|0;h=c[9354]|0;cf(p|0,144600,(v=i,i=i+8|0,c[v>>2]=h,v)|0)}}while(0);aI(135952,9,1,c[m>>2]|0);h=g;c[h>>2]=e;c[h+4>>2]=0;bX(c[m>>2]|0,d|0,g|0);aF(10,c[m>>2]|0);i=f;return}function ui(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=b;while(1){if((aM(a[d]|0|0)|0)==0){e=c;break}else{d=d+1|0}}while(1){if((aM(a[e]|0|0)|0)==0){break}else{e=e+1|0}}c=uA(d|0)|0;b=uA(e|0)|0;f=c;while(1){g=f-1|0;if((aM(a[d+g|0]|0|0)|0)==0){h=b;break}else{f=g}}do{h=h-1|0;}while((aM(a[e+h|0]|0|0)|0)!=0);if((g|0)!=(h|0)){i=0;return i|0}i=(a_(d|0,e|0,f|0)|0)==0;return i|0}function uj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0;f=i;i=i+16|0;g=f|0;do{if((b|0)==(-2|0)){f=c[11932]|0;h=c[8802]|0;if(!((c[12892]|0)!=0&(f|0)!=0&(h|0)!=0)){break}j=c[m>>2]|0;k=(uA(h|0)|0)>>>0>77?76168:179864;l=c[11900]|0;cf(j|0,76792,(v=i,i=i+32|0,c[v>>2]=h,c[v+8>>2]=k,c[v+16>>2]=f,c[v+24>>2]=l,v)|0)}else if((b|0)!=(-1|0)){if((a[25280]&1)==0){l=c[m>>2]|0;f=c[12906]|0;k=(f|0)!=0?f:179864;f=c[10036]|0;cf(l|0,153408,(v=i,i=i+16|0,c[v>>2]=k,c[v+8>>2]=f,v)|0)}f=c[12906]|0;do{if((f|0)!=0){if((a[f]|0)==0){break}else{n=f}do{aF(32,c[m>>2]|0);n=n+1|0;}while((a[n]|0)!=0)}}while(0);if((c[(c[1054]|0)+(b*40&-1)+32>>2]|0)>0){f=0;do{aF(((a[(c[10036]|0)+f|0]|0)==9?9:32)|0,c[m>>2]|0);f=f+1|0;}while((f|0)<(c[(c[1054]|0)+(b*40&-1)+32>>2]|0))}aI(148792,2,1,c[m>>2]|0)}}while(0);b=c[12906]|0;do{if((b|0)!=0){if((a[b]|0)==0){break}else{o=b}do{aF(32,c[m>>2]|0);o=o+1|0;}while((a[o]|0)!=0)}}while(0);o=g;c[o>>2]=e;c[o+4>>2]=0;bX(c[m>>2]|0,d|0,g|0);aF(10,c[m>>2]|0);g=c[12906]|0;do{if((g|0)!=0){if((a[g]|0)==0){break}else{p=g}do{aF(32,c[m>>2]|0);p=p+1|0;}while((a[p]|0)!=0)}}while(0);if((a[37400]&1)!=0){aS(143e3);q=c[m>>2]|0;r=aF(10,q|0)|0;a[25288]=0;iL()}p=c[8804]|0;do{if((p|0)!=0){g=c[p+4>>2]|0;if((g|0)==0){break}d=c[m>>2]|0;o=c[9354]|0;cf(d|0,146696,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=o,v)|0);aS(143e3);q=c[m>>2]|0;r=aF(10,q|0)|0;a[25288]=0;iL()}}while(0);cf(c[m>>2]|0,144600,(v=i,i=i+8|0,c[v>>2]=c[9354],v)|0);aS(143e3);q=c[m>>2]|0;r=aF(10,q|0)|0;a[25288]=0;iL()}function uk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;f=e|0;a[33512]=0;lh();e=f|0;g=f;c[g>>2]=d;c[g+4>>2]=0;g=c[12906]|0;do{if((g|0)!=0){if((a[g]|0)==0){break}else{h=g}do{aF(32,c[m>>2]|0);h=h+1|0;}while((a[h]|0)!=0)}}while(0);L29528:do{if((a[37400]&1)==0){h=c[8804]|0;do{if((h|0)!=0){g=c[h+4>>2]|0;if((g|0)==0){break}d=c[m>>2]|0;f=c[9354]|0;cf(d|0,146696,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=f,v)|0);break L29528}}while(0);h=c[m>>2]|0;f=c[9354]|0;cf(h|0,144600,(v=i,i=i+8|0,c[v>>2]=f,v)|0)}}while(0);bX(c[m>>2]|0,b|0,e|0);aI(139704,2,1,c[m>>2]|0);iL()}function ul(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,w=0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0;j=i;k=+h[a+(b<<6)+8>>3];l=+h[a+(b<<6)+16>>3];m=+h[a+(b<<6)+24>>3];n=+h[a+(d<<6)+8>>3];o=+h[a+(d<<6)+16>>3];p=+h[a+(d<<6)+24>>3];d=(c[a+(b<<6)>>2]|0)==0;q=d?n:k;r=d?o:l;s=d?p:m;t=d?k:n;n=d?l:o;o=d?m:p;d=t==-8.988465674311579e+307;b=n==-8.988465674311579e+307;a=(b?d?2:1:d&1)+(o==-8.988465674311579e+307&1)|0;if((a|0)>1){h[e>>3]=q;h[f>>3]=r;h[g>>3]=s;i=j;return}if((a|0)==1){h[e>>3]=q;h[f>>3]=r;h[g>>3]=s;if(d){h[e>>3]=(c[16508]&2|0)==0?+h[8255]:+h[8256];i=j;return}if(b){h[f>>3]=(c[16336]&2|0)==0?+h[8169]:+h[8170];i=j;return}else{h[g>>3]=(c[16164]&2|0)==0?+h[8083]:+h[8084];i=j;return}}do{if(q==t){if(r==n){h[e>>3]=q;h[f>>3]=r;b=s<o;d=c[16164]&2;a=(d|0)!=0;p=+h[8083];m=+h[8084];l=a?p:m;do{if(b){if(l<s){u=a?m:p;w=20;break}else{if(((d|0)==0?m:p)>o){w=19;break}else{w=18;break}}}else{if(l<o){x=a?m:p;w=22;break}else{if(((d|0)==0?m:p)>s){w=19;break}else{w=18;break}}}}while(0);if((w|0)==18){h[g>>3]=(d|0)==0?m:p;i=j;return}else if((w|0)==19){l=a?m:p;if(b){u=l;w=20}else{x=l;w=22}}do{if((w|0)==20){if(u<s){uk(113944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(((d|0)==0?p:m)<=o){break}uk(113944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((w|0)==22){if(x<o){uk(113944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(((d|0)==0?p:m)<=s){break}uk(113944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);h[g>>3]=(d|0)==0?p:m;i=j;return}if(s==o){h[e>>3]=q;h[g>>3]=s;b=r<n;a=c[16336]&2;y=(a|0)!=0;l=+h[8169];k=+h[8170];z=y?l:k;do{if(b){if(z<r){A=y?k:l;w=36;break}else{if(((a|0)==0?k:l)>n){w=35;break}else{w=34;break}}}else{if(z<n){B=y?k:l;w=38;break}else{if(((a|0)==0?k:l)>r){w=35;break}else{w=34;break}}}}while(0);if((w|0)==34){h[f>>3]=(a|0)==0?k:l;i=j;return}else if((w|0)==35){z=y?k:l;if(b){A=z;w=36}else{B=z;w=38}}do{if((w|0)==36){if(A<r){uk(113944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(((a|0)==0?l:k)<=n){break}uk(113944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((w|0)==38){if(B<n){uk(113944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(((a|0)==0?l:k)<=r){break}uk(113944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);h[f>>3]=(a|0)==0?l:k;i=j;return}b=r<n;y=c[16336]&2;d=(y|0)!=0;z=+h[8170];m=+h[8169];p=d?z:m;do{if(b){if(p<r){C=d?m:z;w=55;break}else{if(((y|0)==0?m:z)>n){w=54;break}else{w=49;break}}}else{if(p<n){D=d?m:z;w=57;break}else{if(((y|0)==0?m:z)>r){w=54;break}else{w=49;break}}}}while(0);do{if((w|0)==49){p=(y|0)==0?m:z;if(!(p!=r&p!=n)){w=54;break}k=s+(p-r)*((o-s)/(n-r));p=+h[8083];l=+h[8084];if(p<l){if(k<p|k>l){w=54;break}}else{if(k<l|k>p){w=54;break}}h[e>>3]=q;h[f>>3]=(c[16336]&2|0)==0?+h[8169]:+h[8170];h[g>>3]=k;i=j;return}}while(0);if((w|0)==54){k=d?m:z;if(b){C=k;w=55}else{D=k;w=57}}do{if((w|0)==55){if(C<r){break}if(((y|0)==0?z:m)<=n){w=59}}else if((w|0)==57){if(D<n){break}if(((y|0)==0?z:m)<=r){w=59}}}while(0);do{if((w|0)==59){k=(y|0)==0?z:m;if(!(k!=r&k!=n)){break}p=s+(k-r)*((o-s)/(n-r));k=+h[8083];l=+h[8084];if(k<l){if(p<k|p>l){break}}else{if(p<l|p>k){break}}h[e>>3]=q;h[f>>3]=(c[16336]&2|0)==0?+h[8170]:+h[8169];h[g>>3]=p;i=j;return}}while(0);y=s<o;b=c[16164]&2;d=(b|0)!=0;p=+h[8084];k=+h[8083];l=d?p:k;do{if(y){if(l<s){E=d?k:p;w=77;break}else{if(((b|0)==0?k:p)>o){w=76;break}else{w=71;break}}}else{if(l<o){F=d?k:p;w=79;break}else{if(((b|0)==0?k:p)>s){w=76;break}else{w=71;break}}}}while(0);do{if((w|0)==71){l=(b|0)==0?k:p;if(!(l!=s&l!=o)){w=76;break}G=r+(l-s)*((n-r)/(o-s));if(m<z){if(G<m|G>z){w=76;break}}else{if(G<z|G>m){w=76;break}}h[e>>3]=q;h[f>>3]=G;h[g>>3]=(c[16164]&2|0)==0?+h[8083]:+h[8084];i=j;return}}while(0);if((w|0)==76){G=d?k:p;if(y){E=G;w=77}else{F=G;w=79}}if((w|0)==77){if(E<s){break}if(((b|0)==0?p:k)>o){break}}else if((w|0)==79){if(F<o){break}if(((b|0)==0?p:k)>s){break}}G=(b|0)==0?p:k;if(!(G!=s&G!=o)){break}l=r+(G-s)*((n-r)/(o-s));if(m<z){if(l<m|l>z){break}}else{if(l<z|l>m){break}}h[e>>3]=q;h[f>>3]=l;h[g>>3]=(c[16164]&2|0)==0?+h[8084]:+h[8083];i=j;return}}while(0);do{if(r==n){if(o==s){h[f>>3]=r;h[g>>3]=s;a=q<t;H=c[16508]&2;I=(H|0)!=0;F=+h[8255];E=+h[8256];D=I?F:E;do{if(a){if(D<q){J=I?E:F;w=97;break}else{if(((H|0)==0?E:F)>t){w=96;break}else{w=95;break}}}else{if(D<t){K=I?E:F;w=99;break}else{if(((H|0)==0?E:F)>q){w=96;break}else{w=95;break}}}}while(0);if((w|0)==95){h[e>>3]=(H|0)==0?E:F;i=j;return}else if((w|0)==96){D=I?E:F;if(a){J=D;w=97}else{K=D;w=99}}do{if((w|0)==97){if(J<q){uk(113944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(((H|0)==0?F:E)<=t){break}uk(113944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}else if((w|0)==99){if(K<t){uk(113944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}if(((H|0)==0?F:E)<=q){break}uk(113944,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0)}}while(0);h[e>>3]=(H|0)==0?F:E;i=j;return}a=q<t;I=c[16508]&2;b=(I|0)!=0;D=+h[8256];m=+h[8255];z=b?D:m;do{if(a){if(z<q){L=b?m:D;w=116;break}else{if(((I|0)==0?m:D)>t){w=115;break}else{w=110;break}}}else{if(z<t){M=b?m:D;w=118;break}else{if(((I|0)==0?m:D)>q){w=115;break}else{w=110;break}}}}while(0);do{if((w|0)==110){z=(I|0)==0?m:D;if(!(z!=q&z!=t)){w=115;break}E=s+(z-q)*((o-s)/(t-q));F=+h[8083];k=+h[8084];if(F<k){if(E<F|E>k){w=115;break}}else{if(E<k|E>F){w=115;break}}h[e>>3]=z;h[f>>3]=r;h[g>>3]=E;i=j;return}}while(0);if((w|0)==115){E=b?m:D;if(a){L=E;w=116}else{M=E;w=118}}do{if((w|0)==116){if(L<q){break}if(((I|0)==0?D:m)<=t){w=120}}else if((w|0)==118){if(M<t){break}if(((I|0)==0?D:m)<=q){w=120}}}while(0);do{if((w|0)==120){E=(I|0)==0?D:m;if(!(E!=q&E!=t)){break}z=s+(E-q)*((o-s)/(t-q));F=+h[8083];k=+h[8084];if(F<k){if(z<F|z>k){break}}else{if(z<k|z>F){break}}h[e>>3]=E;h[f>>3]=r;h[g>>3]=z;i=j;return}}while(0);I=s<o;a=c[16164]&2;b=(a|0)!=0;z=+h[8084];E=+h[8083];F=b?z:E;do{if(I){if(F<s){N=b?E:z;w=138;break}else{if(((a|0)==0?E:z)>o){w=137;break}else{w=132;break}}}else{if(F<o){O=b?E:z;w=140;break}else{if(((a|0)==0?E:z)>s){w=137;break}else{w=132;break}}}}while(0);do{if((w|0)==132){F=(a|0)==0?E:z;if(!(F!=s&F!=o)){w=137;break}k=q+(F-s)*((t-q)/(o-s));if(m<D){if(k<m|k>D){w=137;break}}else{if(k<D|k>m){w=137;break}}h[e>>3]=k;h[f>>3]=r;h[g>>3]=(c[16164]&2|0)==0?+h[8083]:+h[8084];i=j;return}}while(0);if((w|0)==137){k=b?E:z;if(I){N=k;w=138}else{O=k;w=140}}if((w|0)==138){if(N<s){break}if(((a|0)==0?z:E)>o){break}}else if((w|0)==140){if(O<o){break}if(((a|0)==0?z:E)>s){break}}k=(a|0)==0?z:E;if(!(k!=s&k!=o)){break}F=q+(k-s)*((t-q)/(o-s));if(m<D){if(F<m|F>D){break}}else{if(F<D|F>m){break}}h[e>>3]=F;h[f>>3]=r;h[g>>3]=(c[16164]&2|0)==0?+h[8084]:+h[8083];i=j;return}}while(0);do{if(s==o){H=q<t;y=c[16508]|0;d=y&2;P=(d|0)!=0;O=+h[8256];N=+h[8255];M=P?O:N;do{if(H){if(M<q){Q=P?N:O;w=162;break}else{if(((d|0)==0?N:O)>t){w=161;break}else{w=156;break}}}else{if(M<t){R=P?N:O;w=164;break}else{if(((d|0)==0?N:O)>q){w=161;break}else{w=156;break}}}}while(0);do{if((w|0)==156){M=(d|0)==0?N:O;if(!(M!=q&M!=t)){w=161;break}m=r+(M-q)*((n-r)/(t-q));D=+h[8169];E=+h[8170];if(D<E){if(m<D|m>E){w=161;break}}else{if(m<E|m>D){w=161;break}}h[e>>3]=M;h[f>>3]=m;h[g>>3]=s;i=j;return}}while(0);if((w|0)==161){m=P?N:O;if(H){Q=m;w=162}else{R=m;w=164}}do{if((w|0)==162){if(Q<q){break}if(((d|0)==0?O:N)<=t){w=166}}else if((w|0)==164){if(R<t){break}if(((d|0)==0?O:N)<=q){w=166}}}while(0);do{if((w|0)==166){m=(d|0)==0?O:N;if(!(m!=q&m!=t)){break}M=r+(m-q)*((n-r)/(t-q));D=+h[8169];E=+h[8170];if(D<E){if(M<D|M>E){break}}else{if(M<E|M>D){break}}h[e>>3]=m;h[f>>3]=M;h[g>>3]=s;i=j;return}}while(0);d=r<n;H=c[16336]&2;P=(H|0)!=0;M=+h[8170];m=+h[8169];D=P?M:m;do{if(d){if(D<r){S=P?m:M;w=184;break}else{if(((H|0)==0?m:M)>n){w=183;break}else{w=178;break}}}else{if(D<n){T=P?m:M;w=186;break}else{if(((H|0)==0?m:M)>r){w=183;break}else{w=178;break}}}}while(0);do{if((w|0)==178){D=(H|0)==0?m:M;if(!(D!=r&D!=n)){w=183;break}E=q+(D-r)*((t-q)/(n-r));if(N<O){if(E<N|E>O){w=183;break}}else{if(E<O|E>N){w=183;break}}h[e>>3]=E;h[f>>3]=(c[16336]&2|0)==0?+h[8169]:+h[8170];h[g>>3]=s;i=j;return}}while(0);if((w|0)==183){E=P?m:M;if(d){S=E;w=184}else{T=E;w=186}}if((w|0)==184){if(S<r){U=y;V=O;W=N;break}if(((H|0)==0?M:m)>n){U=y;V=O;W=N;break}}else if((w|0)==186){if(T<n){U=y;V=O;W=N;break}if(((H|0)==0?M:m)>r){U=y;V=O;W=N;break}}E=(H|0)==0?M:m;if(!(E!=r&E!=n)){U=y;V=O;W=N;break}D=q+(E-r)*((t-q)/(n-r));if(N<O){if(D<N|D>O){U=y;V=O;W=N;break}}else{if(D<O|D>N){U=y;V=O;W=N;break}}h[e>>3]=D;h[f>>3]=(c[16336]&2|0)==0?+h[8170]:+h[8169];h[g>>3]=s;i=j;return}else{U=c[16508]|0;V=+h[8256];W=+h[8255]}}while(0);a=q<t;I=U&2;U=(I|0)!=0;T=U?V:W;do{if(a){if(T<q){X=U?W:V;w=209;break}else{if(((I|0)==0?W:V)>t){w=208;break}else{w=200;break}}}else{if(T<t){Y=U?W:V;w=211;break}else{if(((I|0)==0?W:V)>q){w=208;break}else{w=200;break}}}}while(0);do{if((w|0)==200){T=(I|0)==0?W:V;if(!(T!=q&T!=t)){w=208;break}S=T-q;R=t-q;Q=r+S*((n-r)/R);D=s+S*((o-s)/R);R=+h[8169];S=+h[8170];if(R<S){if(Q<R|Q>S){w=208;break}}else{if(Q<S|Q>R){w=208;break}}R=+h[8083];S=+h[8084];if(R<S){if(D<R|D>S){w=208;break}}else{if(D<S|D>R){w=208;break}}h[e>>3]=T;h[f>>3]=Q;h[g>>3]=D;i=j;return}}while(0);if((w|0)==208){D=U?W:V;if(a){X=D;w=209}else{Y=D;w=211}}do{if((w|0)==209){if(X<q){break}if(((I|0)==0?V:W)<=t){w=213}}else if((w|0)==211){if(Y<t){break}if(((I|0)==0?V:W)<=q){w=213}}}while(0);do{if((w|0)==213){Y=(I|0)==0?V:W;if(!(Y!=q&Y!=t)){break}X=Y-q;D=t-q;Q=r+X*((n-r)/D);T=s+X*((o-s)/D);D=+h[8169];X=+h[8170];if(D<X){if(Q<D|Q>X){break}}else{if(Q<X|Q>D){break}}D=+h[8083];X=+h[8084];if(D<X){if(T<D|T>X){break}}else{if(T<X|T>D){break}}h[e>>3]=Y;h[f>>3]=Q;h[g>>3]=T;i=j;return}}while(0);I=r<n;a=c[16336]&2;U=(a|0)!=0;T=+h[8170];Q=+h[8169];Y=U?T:Q;do{if(I){if(Y<r){Z=U?Q:T;w=237;break}else{if(((a|0)==0?Q:T)>n){w=236;break}else{w=228;break}}}else{if(Y<n){_=U?Q:T;w=239;break}else{if(((a|0)==0?Q:T)>r){w=236;break}else{w=228;break}}}}while(0);do{if((w|0)==228){Y=(a|0)==0?Q:T;if(!(Y!=r&Y!=n)){w=236;break}D=Y-r;Y=n-r;X=q+D*((t-q)/Y);R=s+D*((o-s)/Y);if(W<V){if(X<W|X>V){w=236;break}}else{if(X<V|X>W){w=236;break}}Y=+h[8083];D=+h[8084];if(Y<D){if(R<Y|R>D){w=236;break}}else{if(R<D|R>Y){w=236;break}}h[e>>3]=X;h[f>>3]=(c[16336]&2|0)==0?+h[8169]:+h[8170];h[g>>3]=R;i=j;return}}while(0);if((w|0)==236){R=U?Q:T;if(I){Z=R;w=237}else{_=R;w=239}}do{if((w|0)==237){if(Z<r){break}if(((a|0)==0?T:Q)<=n){w=241}}else if((w|0)==239){if(_<n){break}if(((a|0)==0?T:Q)<=r){w=241}}}while(0);do{if((w|0)==241){_=(a|0)==0?T:Q;if(!(_!=r&_!=n)){break}Z=_-r;_=n-r;R=q+Z*((t-q)/_);X=s+Z*((o-s)/_);if(W<V){if(R<W|R>V){break}}else{if(R<V|R>W){break}}_=+h[8083];Z=+h[8084];if(_<Z){if(X<_|X>Z){break}}else{if(X<Z|X>_){break}}h[e>>3]=R;h[f>>3]=(c[16336]&2|0)==0?+h[8170]:+h[8169];h[g>>3]=X;i=j;return}}while(0);a=s<o;I=c[16164]&2;U=(I|0)!=0;X=+h[8084];R=+h[8083];_=U?X:R;do{if(a){if(_<s){$=U?R:X;w=265;break}else{if(((I|0)==0?R:X)>o){w=264;break}else{w=256;break}}}else{if(_<o){aa=U?R:X;w=267;break}else{if(((I|0)==0?R:X)>s){w=264;break}else{w=256;break}}}}while(0);do{if((w|0)==256){_=(I|0)==0?R:X;if(!(_!=s&_!=o)){w=264;break}Z=_-s;_=o-s;Y=q+Z*((t-q)/_);D=r+Z*((n-r)/_);if(W<V){if(Y<W|Y>V){w=264;break}}else{if(Y<V|Y>W){w=264;break}}if(Q<T){if(D<Q|D>T){w=264;break}}else{if(D<T|D>Q){w=264;break}}h[e>>3]=Y;h[f>>3]=D;h[g>>3]=(c[16164]&2|0)==0?+h[8083]:+h[8084];i=j;return}}while(0);if((w|0)==264){D=U?R:X;if(a){$=D;w=265}else{aa=D;w=267}}do{if((w|0)==265){if($<s){break}if(((I|0)==0?X:R)<=o){w=269}}else if((w|0)==267){if(aa<o){break}if(((I|0)==0?X:R)<=s){w=269}}}while(0);do{if((w|0)==269){aa=(I|0)==0?X:R;if(!(aa!=s&aa!=o)){break}$=aa-s;aa=o-s;D=q+$*((t-q)/aa);Y=r+$*((n-r)/aa);if(W<V){if(D<W|D>V){break}}else{if(D<V|D>W){break}}if(Q<T){if(Y<Q|Y>T){break}}else{if(Y<T|Y>Q){break}}h[e>>3]=D;h[f>>3]=Y;h[g>>3]=(c[16164]&2|0)==0?+h[8084]:+h[8083];i=j;return}}while(0);h[e>>3]=q;h[f>>3]=r;h[g>>3]=s;i=j;return}function um(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0.0,H=0.0,I=0.0;g=+h[a+(b<<6)+8>>3];i=+h[a+(b<<6)+16>>3];j=+h[a+(b<<6)+24>>3];k=+h[a+(c<<6)+8>>3];l=+h[a+(c<<6)+16>>3];m=+h[a+(c<<6)+24>>3];c=g==-8.988465674311579e+307;a=k==-8.988465674311579e+307;b=i==-8.988465674311579e+307;n=l==-8.988465674311579e+307;o=j==-8.988465674311579e+307;p=m==-8.988465674311579e+307;if((((((o&1)+(b&1)|0)+(a?c?2:1:c&1)|0)+(n&1)|0)+(p&1)|0)>1){q=0;return q|0}if(a|c){r=c?l:i;s=c?m:j;if((c?k:g)<=+h[8256]){q=0;return q|0}t=+h[8169];u=+h[8170];do{if(t<u){if(r<t|r>u){q=0}else{break}return q|0}else{if(r<u|r>t){q=0}else{break}return q|0}}while(0);t=+h[8083];u=+h[8084];do{if(t<u){if(s<t|s>u){q=0}else{break}return q|0}else{if(s<u|s>t){q=0}else{break}return q|0}}while(0);h[d>>3]=+h[8255];h[e>>3]=r;h[f>>3]=s;h[d+8>>3]=+h[8256];h[e+8>>3]=r;h[f+8>>3]=s;q=1;return q|0}if(n|b){s=b?k:g;r=b?m:j;if((b?l:i)<=+h[8170]){q=0;return q|0}t=+h[8255];u=+h[8256];do{if(t<u){if(s<t|s>u){q=0}else{break}return q|0}else{if(s<u|s>t){q=0}else{break}return q|0}}while(0);t=+h[8083];u=+h[8084];do{if(t<u){if(r<t|r>u){q=0}else{break}return q|0}else{if(r<u|r>t){q=0}else{break}return q|0}}while(0);h[d>>3]=s;h[e>>3]=+h[8169];h[f>>3]=r;h[d+8>>3]=s;h[e+8>>3]=+h[8170];h[f+8>>3]=r;q=1;return q|0}if(p|o){r=o?k:g;s=o?l:i;if((o?m:j)<=+h[8084]){q=0;return q|0}t=+h[8255];u=+h[8256];do{if(t<u){if(r<t|r>u){q=0}else{break}return q|0}else{if(r<u|r>t){q=0}else{break}return q|0}}while(0);t=+h[8169];u=+h[8170];do{if(t<u){if(s<t|s>u){q=0}else{break}return q|0}else{if(s<u|s>t){q=0}else{break}return q|0}}while(0);h[d>>3]=r;h[e>>3]=s;h[f>>3]=+h[8083];h[d+8>>3]=r;h[e+8>>3]=s;h[f+8>>3]=+h[8084];q=1;return q|0}s=+h[8083];if((j>m?j:m)<s){q=0;return q|0}o=j<m;r=+h[8084];if((o?j:m)>r){q=0;return q|0}t=+h[8255];if((g>k?g:k)<t){q=0;return q|0}p=g<k;u=+h[8256];if((p?g:k)>u){q=0;return q|0}v=+h[8169];if((i>l?i:l)<v){q=0;return q|0}b=i<l;w=+h[8170];if((b?i:l)>w){q=0;return q|0}n=g==k;c=i==l;a=j==m;if(n&c&a){q=0;return q|0}if(n){n=t<u;if(c){do{if(n){if(g<t|g>u){q=0}else{break}return q|0}else{if(g<u|g>t){q=0}else{break}return q|0}}while(0);do{if(v<w){if(i<v|i>w){q=0}else{break}return q|0}else{if(i<w|i>v){q=0}else{break}return q|0}}while(0);do{if(o){if(s<j|s>m){q=0}else{break}return q|0}else{if(s<m|s>j){q=0}else{break}return q|0}}while(0);h[d>>3]=g;h[e>>3]=i;h[f>>3]=+h[8083];h[d+8>>3]=g;h[e+8>>3]=i;h[f+8>>3]=+h[8084];q=1;return q|0}if(a){do{if(n){if(g<t|g>u){q=0}else{break}return q|0}else{if(g<u|g>t){q=0}else{break}return q|0}}while(0);do{if(s<r){if(j<s|j>r){q=0}else{break}return q|0}else{if(j<r|j>s){q=0}else{break}return q|0}}while(0);do{if(b){if(v<i|v>l){q=0}else{break}return q|0}else{if(v<l|v>i){q=0}else{break}return q|0}}while(0);h[d>>3]=g;h[e>>3]=+h[8169];h[f>>3]=j;h[d+8>>3]=g;h[e+8>>3]=+h[8170];h[f+8>>3]=j;q=1;return q|0}else{do{if(n){if(k<t|k>u){q=0}else{break}return q|0}else{if(k<u|k>t){q=0}else{break}return q|0}}while(0);x=l-i;y=(v-i)/x;z=(w-i)/x;n=y>z;A=n?y:z;B=n?z:y;y=m-j;z=(s-j)/y;C=(r-j)/y;n=z>C;D=n?z:C;E=n?C:z;z=B>E?B:E;E=z>0.0?z:0.0;z=A<D?A:D;D=z<1.0?z:1.0;if(E>D){q=0;return q|0}h[d>>3]=g;h[e>>3]=i+x*E;h[f>>3]=j+y*E;h[d+8>>3]=g;h[e+8>>3]=i+x*D;h[f+8>>3]=j+y*D;D=+h[8169];y=+h[8170];x=+h[e>>3];if(D<y){if(!(x<D|x>y)){F=385}}else{if(!(x<y|x>D)){F=385}}do{if((F|0)==385){D=+h[8083];x=+h[8084];y=+h[f>>3];if(D<x){if(y<D|y>x){break}else{q=1}return q|0}else{if(y<x|y>D){break}else{q=1}return q|0}}}while(0);q=0;return q|0}}if(!c){if(!a){D=k-g;y=(t-g)/D;x=(u-g)/D;c=y>x;E=c?y:x;z=c?x:y;y=l-i;x=(v-i)/y;A=(w-i)/y;c=x>A;B=c?x:A;C=c?A:x;x=m-j;A=(s-j)/x;G=(r-j)/x;c=A>G;H=c?A:G;I=c?G:A;A=z>C?z:C;c=I>0.0;n=A>(c?I:0.0);C=n|c^1?n?A:0.0:I;I=E<B?E:B;n=H<1.0;c=I<(n?H:1.0);B=c|n^1?c?I:1.0:H;if(C>B){q=0;return q|0}h[d>>3]=g+D*C;h[e>>3]=i+y*C;h[f>>3]=j+x*C;h[d+8>>3]=g+D*B;h[e+8>>3]=i+y*B;h[f+8>>3]=j+x*B;B=+h[8255];x=+h[8256];y=+h[d>>3];if(B<x){if(!(y<B|y>x)){F=428}}else{if(!(y<x|y>B)){F=428}}do{if((F|0)==428){B=+h[8169];y=+h[8170];x=+h[e>>3];if(B<y){if(x<B|x>y){break}}else{if(x<y|x>B){break}}B=+h[8083];x=+h[8084];y=+h[f>>3];if(B<x){if(y<B|y>x){break}else{q=1}return q|0}else{if(y<x|y>B){break}else{q=1}return q|0}}}while(0);q=0;return q|0}do{if(s<r){if(m<s|m>r){q=0}else{break}return q|0}else{if(m<r|m>s){q=0}else{break}return q|0}}while(0);B=k-g;y=(t-g)/B;x=(u-g)/B;c=y>x;D=c?y:x;C=c?x:y;y=l-i;x=(v-i)/y;H=(w-i)/y;c=x>H;I=c?x:H;E=c?H:x;x=C>E?C:E;E=x>0.0?x:0.0;x=D<I?D:I;I=x<1.0?x:1.0;if(E>I){q=0;return q|0}h[d>>3]=g+B*E;h[e>>3]=i+y*E;h[f>>3]=j;h[d+8>>3]=g+B*I;h[e+8>>3]=i+y*I;h[f+8>>3]=j;I=+h[8255];y=+h[8256];B=+h[d>>3];if(I<y){if(!(B<I|B>y)){F=420}}else{if(!(B<y|B>I)){F=420}}do{if((F|0)==420){I=+h[8169];B=+h[8170];y=+h[e>>3];if(I<B){if(y<I|y>B){break}else{q=1}return q|0}else{if(y<B|y>I){break}else{q=1}return q|0}}}while(0);q=0;return q|0}c=v<w;if(a){do{if(c){if(i<v|i>w){q=0}else{break}return q|0}else{if(i<w|i>v){q=0}else{break}return q|0}}while(0);do{if(s<r){if(j<s|j>r){q=0}else{break}return q|0}else{if(j<r|j>s){q=0}else{break}return q|0}}while(0);do{if(p){if(t<g|t>k){q=0}else{break}return q|0}else{if(t<k|t>g){q=0}else{break}return q|0}}while(0);h[d>>3]=t;h[e>>3]=i;h[f>>3]=j;h[d+8>>3]=+h[8256];h[e+8>>3]=i;h[f+8>>3]=j;q=1;return q|0}else{do{if(c){if(l<v|l>w){q=0}else{break}return q|0}else{if(l<w|l>v){q=0}else{break}return q|0}}while(0);v=k-g;k=(t-g)/v;t=(u-g)/v;c=k>t;u=c?k:t;l=c?t:k;k=m-j;m=(s-j)/k;s=(r-j)/k;c=m>s;r=c?m:s;t=c?s:m;m=l>t?l:t;t=m>0.0?m:0.0;m=u<r?u:r;r=m<1.0?m:1.0;if(t>r){q=0;return q|0}h[d>>3]=g+v*t;h[e>>3]=i;h[f>>3]=j+k*t;h[d+8>>3]=g+v*r;h[e+8>>3]=i;h[f+8>>3]=j+k*r;r=+h[8255];k=+h[8256];j=+h[d>>3];if(r<k){if(!(j<r|j>k)){F=408}}else{if(!(j<k|j>r)){F=408}}do{if((F|0)==408){r=+h[8083];j=+h[8084];k=+h[f>>3];if(r<j){if(k<r|k>j){break}else{q=1}return q|0}else{if(k<j|k>r){break}else{q=1}return q|0}}}while(0);q=0;return q|0}return 0}function un(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0,E=0.0;g=i;i=i+64|0;j=f;f=i;i=i+16|0;c[f>>2]=c[j>>2];c[f+4>>2]=c[j+4>>2];c[f+8>>2]=c[j+8>>2];c[f+12>>2]=c[j+12>>2];j=g|0;k=g+16|0;l=g+24|0;m=g+32|0;n=g+40|0;o=g+48|0;p=c[e>>2]|0;q=c[e+4>>2]|0;r=e+8|0;s=e+16|0;t=+h[s>>3];u=+h[e+24>>3];v=e+32|0;w=a[v]|0;if((d|0)==0){x=~~(+h[b>>3]*+(c[180]|0))+(c[186]|0)|0;y=~~(+h[b+8>>3]*+(c[40]|0))+(c[46]|0)|0;h[e+48>>3]=+h[b+32>>3];z=j;A=e+40|0;c[z>>2]=c[A>>2];c[z+4>>2]=c[A+4>>2];c[z+8>>2]=c[A+8>>2];c[z+12>>2]=c[A+12>>2];do{if((p|0)!=0){A=c[(c[3524]|0)+92>>2]|0;if(u<0.0){cK[A&63](+h[3817]);break}else{cK[A&63](u);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[s>>3]);s=c[(c[3524]|0)+64>>2]|0;if((q|0)<-5){cM[s&511](-2)}else{cM[s&511](q)}s=c[3524]|0;do{if((a[v]&1)==0){if((c[s+96>>2]&1024|0)!=0){break}c[j>>2]=1;c[j+4>>2]=q;B=516}else{B=516}}while(0);if((B|0)==516){fn(j,s)}s=c[13542]|0;do{if((s|0)!=0){j=(c[s>>2]|0)>(x|0)&1;v=(c[s+4>>2]|0)<(x|0)?j|2:j;j=(c[s+8>>2]|0)>(y|0)?v|4:v;if((((c[s+12>>2]|0)<(y|0)?j|8:j)|0)==0){break}i=g;return}}while(0);cR[c[(c[3524]|0)+80>>2]&127](x,y,c[r>>2]|0);i=g;return}C=+(c[180]|0);y=c[186]|0;x=~~(+h[b>>3]*C)+y|0;D=+(c[40]|0);s=c[46]|0;j=~~(+h[b+8>>3]*D)+s|0;v=~~(C*+h[d>>3])+y|0;y=~~(D*+h[d+8>>3])+s|0;s=c[f>>2]|0;A=c[f+4>>2]|0;if((s|0)==6){E=(+h[b+32>>3]+ +h[d+32>>3])*.5}else{E=+h[f+8>>3]}f=o|0;c[f>>2]=s;s=o+4|0;c[s>>2]=A;h[o+8>>3]=E;do{if((p|0)!=0){A=c[(c[3524]|0)+92>>2]|0;if(u<0.0){cK[A&63](+h[3817]);break}else{cK[A&63](u);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](t);p=c[(c[3524]|0)+64>>2]|0;if((q|0)<-5){cM[p&511](-2)}else{cM[p&511](q)}p=c[3524]|0;do{if((w&1)==0){if((c[p+96>>2]&1024|0)!=0){break}c[f>>2]=1;c[s>>2]=q;B=532}else{B=532}}while(0);if((B|0)==532){fn(o,p)}p=c[r>>2]|0;if((p|0)==(-10|0)){fm(x,j,v,y,1);i=g;return}else if((p|0)==(-11|0)){fm(x,j,v,y,2);i=g;return}else{c[k>>2]=x;c[l>>2]=j;c[m>>2]=v;c[n>>2]=y;y=c[3524]|0;if((fl(k,l,m,n)|0)==0){i=g;return}cN[c[y+56>>2]&255](c[k>>2]|0,c[l>>2]|0);cN[c[y+60>>2]&255](c[m>>2]|0,c[n>>2]|0);i=g;return}}function uo(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0.0,m=0;e=i;i=i+16|0;f=e|0;do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(b,0,d);i=e;return}}while(0);g=~~(+h[b>>3]*+(c[180]|0))+(c[186]|0)|0;j=~~(+h[b+8>>3]*+(c[40]|0))+(c[46]|0)|0;h[d+48>>3]=+h[b+32>>3];b=f;k=d+40|0;c[b>>2]=c[k>>2];c[b+4>>2]=c[k+4>>2];c[b+8>>2]=c[k+8>>2];c[b+12>>2]=c[k+12>>2];k=c[d+4>>2]|0;do{if((c[d>>2]|0)!=0){l=+h[d+24>>3];b=c[(c[3524]|0)+92>>2]|0;if(l<0.0){cK[b&63](+h[3817]);break}else{cK[b&63](l);break}}}while(0);cK[c[(c[3524]|0)+112>>2]&63](+h[d+16>>3]);b=c[(c[3524]|0)+64>>2]|0;if((k|0)<-5){cM[b&511](-2)}else{cM[b&511](k)}b=c[3524]|0;do{if((a[d+32|0]&1)==0){if((c[b+96>>2]&1024|0)!=0){break}c[f>>2]=1;c[f+4>>2]=k;m=558}else{m=558}}while(0);if((m|0)==558){fn(f,b)}b=c[13542]|0;do{if((b|0)!=0){f=(c[b>>2]|0)>(g|0)&1;m=(c[b+4>>2]|0)<(g|0)?f|2:f;f=(c[b+8>>2]|0)>(j|0)?m|4:m;if((((c[b+12>>2]|0)<(j|0)?f|8:f)|0)==0){break}i=e;return}}while(0);cR[c[(c[3524]|0)+80>>2]&127](g,j,c[d+8>>2]|0);i=e;return}function up(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0,p=0,q=0;e=i;i=i+32|0;f=e|0;g=e+8|0;j=e+16|0;k=e+24|0;do{if((a[38984]&1)!=0){if((a[46752]&1)==0){break}gt(30448,b,d);l=b;c[7612]=c[l>>2];c[7613]=c[l+4>>2];c[7614]=c[l+8>>2];c[7615]=c[l+12>>2];c[7616]=c[l+16>>2];c[7617]=c[l+20>>2];c[7618]=c[l+24>>2];c[7619]=c[l+28>>2];c[7620]=c[l+32>>2];c[7621]=c[l+36>>2];c[7622]=c[l+40>>2];c[7623]=c[l+44>>2];i=e;return}}while(0);if((a[d+32|0]&1)!=0){un(30448,b,d,d+40|0);d=b;c[7612]=c[d>>2];c[7613]=c[d+4>>2];c[7614]=c[d+8>>2];c[7615]=c[d+12>>2];c[7616]=c[d+16>>2];c[7617]=c[d+20>>2];c[7618]=c[d+24>>2];c[7619]=c[d+28>>2];c[7620]=c[d+32>>2];c[7621]=c[d+36>>2];c[7622]=c[d+40>>2];c[7623]=c[d+44>>2];i=e;return}m=+(c[180]|0);d=c[186]|0;n=+(c[40]|0);l=c[46]|0;o=~~(+h[3807]*n)+l|0;p=~~(m*+h[b>>3])+d|0;q=~~(n*+h[b+8>>3])+l|0;c[f>>2]=~~(+h[3806]*m)+d;c[g>>2]=o;c[j>>2]=p;c[k>>2]=q;q=c[3524]|0;if((fl(f,g,j,k)|0)!=0){cN[c[q+56>>2]&255](c[f>>2]|0,c[g>>2]|0);cN[c[q+60>>2]&255](c[j>>2]|0,c[k>>2]|0)}k=b;c[7612]=c[k>>2];c[7613]=c[k+4>>2];c[7614]=c[k+8>>2];c[7615]=c[k+12>>2];c[7616]=c[k+16>>2];c[7617]=c[k+20>>2];c[7618]=c[k+24>>2];c[7619]=c[k+28>>2];c[7620]=c[k+32>>2];c[7621]=c[k+36>>2];c[7622]=c[k+40>>2];c[7623]=c[k+44>>2];i=e;return}function uq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0;e=i;do{if((b|0)==32){uu(c[8776]|0);c[8780]=0;c[8774]=0;c[8776]=0;c[8778]=0;f=582}else if((b|0)==1){if((c[8776]|0)==0){f=582;break}uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=198504,v)|0);return 0}else if((b|0)==4){if((d|0)==0){break}if((a[d]|0)==0){break}g=c[8782]|0;h=(c[8780]|0)-g|0;j=uA(d|0)|0;k=c[8776]|0;l=h+1|0;if((k|0)!=0&(g|0)!=0){uH(k|0,g|0,l|0);n=c[8776]|0}else{n=k}k=j+1|0;g=db(n,k+l|0,131160)|0;c[8776]=g;uH(g+k|0,g|0,l|0);uB(c[8776]|0,d|0);a[(c[8776]|0)+j|0]=58;j=c[8776]|0;c[8782]=j+k;c[8780]=j+(k+h|0);h=a8(j|0,58)|0;if((h|0)==0){break}else{o=h}do{a[o]=0;o=a8(o+1|0,58)|0;}while((o|0)!=0)}else if((b|0)==2){h=c[m>>2]|0;do{if((c[8776]|0)==0){aI(90464,19,1,h|0)}else{aI(116392,13,1,h|0);j=c[8776]|0;k=c[m>>2]|0;if(j>>>0<(c[8782]|0)>>>0){l=j;j=k;while(1){cf(j|0,103640,(v=i,i=i+8|0,c[v>>2]=l,v)|0);g=l+((uA(l|0)|0)+1|0)|0;p=c[m>>2]|0;if(g>>>0<(c[8782]|0)>>>0){l=g;j=p}else{q=p;break}}}else{q=k}aF(10,q|0);if((c[8782]|0)==0){break}j=c[m>>2]|0;aI(96440,30,1,j|0);j=c[8782]|0;l=c[m>>2]|0;if(j>>>0<(c[8780]|0)>>>0){p=j;j=l;while(1){cf(j|0,103640,(v=i,i=i+8|0,c[v>>2]=p,v)|0);g=p+((uA(p|0)|0)+1|0)|0;r=c[m>>2]|0;if(g>>>0<(c[8780]|0)>>>0){p=g;j=r}else{s=r;break}}}else{s=l}aF(10,s|0)}}while(0);cf(c[m>>2]|0,81808,(v=i,i=i+8|0,c[v>>2]=74944,v)|0)}else if((b|0)==16){c[8778]=c[8782];f=603}else if((b|0)==8){f=603}}while(0);if((f|0)==582){b=bU(148328)|0;do{if((b|0)==0){t=0}else{s=uA(b|0)|0;q=bP(b|0)|0;c[8776]=q;c[8780]=q+s;s=a8(q|0,58)|0;if((s|0)==0){t=q;break}else{u=s}do{a[u]=0;u=a8(u+1|0,58)|0;}while((u|0)!=0);t=c[8776]|0}}while(0);c[8782]=t}else if((f|0)==603){f=c[8776]|0;if((f|0)==0){w=0;i=e;return w|0}t=c[8774]|0;do{if((t|0)==0){c[8774]=f;u=c[8778]|0;if((u|0)!=0){x=f;y=u;break}u=c[8780]|0;c[8778]=u;x=f;y=u}else{u=t+((uA(t|0)|0)+1|0)|0;c[8774]=u;x=u;y=c[8778]|0}}while(0);if(x>>>0<y>>>0){w=x;i=e;return w|0}c[8774]=0;c[8778]=0;w=0;i=e;return w|0}w=c[8776]|0;i=e;return w|0}function ur(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;e=i;i=i+256|0;f=e|0;if(!(a[42184]|0)){a[42184]=1;ur(1,0)}do{if((b|0)==32){uu(c[10554]|0);c[10552]=0;c[10548]=0;c[10554]=0;c[10550]=0;g=622}else if((b|0)==1){if((c[10554]|0)==0){g=622;break}uf(-1,113648,(v=i,i=i+8|0,c[v>>2]=222176,v)|0);return 0}else if((b|0)==4){if((d|0)==0){break}if((a[d]|0)==0){break}h=c[10556]|0;j=(c[10552]|0)-h|0;k=uA(d|0)|0;l=c[10554]|0;n=j+1|0;if((l|0)!=0&(h|0)!=0){uH(l|0,h|0,n|0);o=c[10554]|0}else{o=l}l=k+1|0;h=db(o,l+n|0,199664)|0;c[10554]=h;uH(h+l|0,h|0,n|0);uB(c[10554]|0,d|0);a[(c[10554]|0)+k|0]=58;k=c[10554]|0;c[10556]=k+l;c[10552]=k+(l+j|0);j=a8(k|0,58)|0;if((j|0)==0){break}else{p=j}do{a[p]=0;p=a8(p+1|0,58)|0;}while((p|0)!=0)}else if((b|0)==2){j=c[m>>2]|0;if((c[10554]|0)==0){aI(174752,19,1,j|0);break}aI(184128,13,1,j|0);j=c[10554]|0;k=c[m>>2]|0;if(j>>>0<(c[10556]|0)>>>0){l=j;j=k;while(1){cf(j|0,103640,(v=i,i=i+8|0,c[v>>2]=l,v)|0);n=l+((uA(l|0)|0)+1|0)|0;h=c[m>>2]|0;if(n>>>0<(c[10556]|0)>>>0){l=n;j=h}else{q=h;break}}}else{q=k}aF(10,q|0);if((c[10556]|0)==0){break}aI(178936,20,1,c[m>>2]|0);j=c[10556]|0;l=c[m>>2]|0;if(j>>>0<(c[10552]|0)>>>0){h=j;j=l;while(1){cf(j|0,103640,(v=i,i=i+8|0,c[v>>2]=h,v)|0);n=h+((uA(h|0)|0)+1|0)|0;r=c[m>>2]|0;if(n>>>0<(c[10552]|0)>>>0){h=n;j=r}else{s=r;break}}}else{s=l}aF(10,s|0)}else if((b|0)==16){c[10550]=c[10556];g=683}else if((b|0)==8){g=683}}while(0);if((g|0)==683){b=c[10554]|0;if((b|0)==0){t=0;i=e;return t|0}s=c[10548]|0;do{if((s|0)==0){c[10548]=b;q=c[10550]|0;if((q|0)!=0){u=b;w=q;break}q=c[10552]|0;c[10550]=q;u=b;w=q}else{q=s+((uA(s|0)|0)+1|0)|0;c[10548]=q;u=q;w=c[10550]|0}}while(0);if(u>>>0<w>>>0){t=u;i=e;return t|0}c[10548]=0;c[10550]=0;t=0;i=e;return t|0}if((g|0)==622){u=bU(215376)|0;do{if((u|0)==0){w=f|0;s=42160;b=137720;L863:while(1){q=bP(b|0)|0;while(1){p=aQ(q|0,209688)|0;if((p|0)!=0){d=p+2|0;o=a8(d|0,41)|0;a[o]=0;j=bU(d|0)|0;a[o]=41;d=(j|0)!=0;if(d){x=uA(j|0)|0}else{x=0}h=((p+((uA(q|0)|0)+x|0)|0)-o|0)+1|0;k=ut(h)|0;if((k|0)==0){gk();r=ut(h)|0;if((r|0)==0){g=633;break L863}else{y=r}}else{y=k}k=p-q|0;uF(y|0,q|0,k|0);if(d){d=y+k|0;uB(d|0,j|0)}j=y+(x+k|0)|0;k=o+1|0;uB(j|0,k|0);uu(q);q=y;continue}k=aQ(q|0,204200)|0;if((k|0)==0){break}j=k+2|0;o=a8(j|0,96)|0;a[o]=0;if(!(a[14168]|0)){g=638;break L863}d=bt(j|0,193632)|0;if((d|0)!=0){a6(w|0,255,d|0);j=f+((uA(w|0)|0)-1|0)|0;if((a[j]|0)==10){a[j]=0}a2(d|0)}a[o]=96;d=uA(w|0)|0;j=((k+((uA(q|0)|0)+d|0)|0)-o|0)+1|0;p=ut(j)|0;if((p|0)==0){gk();r=ut(j)|0;if((r|0)==0){g=645;break L863}else{z=r}}else{z=p}p=k-q|0;uF(z|0,q|0,p|0);if((a[w]|0)!=0){k=z+p|0;uB(k|0,w|0)}uB(z+(d+p|0)|0,o+1|0);uu(q);q=z}o=q+((uA(q|0)|0)-1|0)|0;if((a[o]|0)==33){a[o]=0;A=1}else{A=0}o=aW(q|0)|0;if((o|0)!=0){bR(o|0);if(A){a[q+(uA(q|0)|0)|0]=33}o=uA(q|0)|0;p=c[10554]|0;if((p|0)==0){d=o+1|0;k=ut(d)|0;if((k|0)==0){gk();r=ut(d)|0;if((r|0)==0){g=658;break}else{B=r}}else{B=k}c[10554]=B;c[10552]=B;C=B}else{k=uA(p|0)|0;r=db(p,(o+2|0)+k|0,199664)|0;c[10554]=r;p=r+k|0;c[10552]=p;a[p]=58;p=(c[10552]|0)+1|0;c[10552]=p;a[p]=0;C=c[10552]|0}uB(C|0,q|0);c[10552]=(c[10552]|0)+o}o=s+4|0;if((q|0)!=0){uu(q)}p=c[o>>2]|0;if((p|0)==0){g=664;break}else{s=o;b=p}}if((g|0)==633){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=199664,v)|0);return 0}else if((g|0)==638){uf(-1,145320,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}else if((g|0)==645){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=199664,v)|0);return 0}else if((g|0)==658){uf(-1,225296,(v=i,i=i+8|0,c[v>>2]=199664,v)|0);return 0}else if((g|0)==664){b=c[10554]|0;if((b|0)==0){break}s=a8(b|0,58)|0;if((s|0)==0){break}else{D=s}do{a[D]=0;D=a8(D+1|0,58)|0;}while((D|0)!=0)}}else{s=uA(u|0)|0;b=bP(u|0)|0;c[10554]=b;c[10552]=b+s;s=a8(b|0,58)|0;if((s|0)==0){break}else{E=s}do{a[E]=0;E=a8(E+1|0,58)|0;}while((E|0)!=0)}}while(0);c[10556]=c[10554]}t=c[10554]|0;i=e;return t|0}function us(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;i=i+48|0;e=d|0;if((a|0)==32|(a|0)==1){uu(c[12908]|0);bA(5,179864);bA(2,179864);f=bA(5,0)|0;if((f|0)==0){g=0}else{g=bP(f|0)|0}c[12908]=g;h=c[12908]|0;i=d;return h|0}else if((a|0)==4){if((bA(5,b|0)|0)==0){uf(c[13898]|0,166696,(v=i,i=i+1|0,i=i+7>>3<<3,c[v>>2]=0,v)|0);return 0}uu(c[12908]|0);b=bA(5,0)|0;if((b|0)==0){j=0}else{j=bP(b|0)|0}c[12908]=j;j=e+24|0;uE(e|0,0,44);bw(40936,32,161480,e|0);bw(72464,8,153384,e|0);c[j>>2]=1;bw(40968,32,161480,e|0);bw(72472,8,153384,e|0);c[j>>2]=2;bw(41e3,32,161480,e|0);bw(72480,8,153384,e|0);c[j>>2]=3;bw(41032,32,161480,e|0);bw(72488,8,153384,e|0);c[j>>2]=4;bw(41064,32,161480,e|0);bw(72496,8,153384,e|0);c[j>>2]=5;bw(41096,32,161480,e|0);bw(72504,8,153384,e|0);c[j>>2]=6;bw(41128,32,161480,e|0);bw(72512,8,153384,e|0);j=e+16|0;b=0;do{c[j>>2]=b;bw(40552+(b<<5)|0,32,150680,e|0);bw(72368+(b<<3)|0,8,148784,e|0);b=b+1|0;}while((b|0)<12);h=c[12908]|0;i=d;return h|0}else if((a|0)==2){a=c[m>>2]|0;b=bA(2,0)|0;cf(a|0,146672,(v=i,i=i+8|0,c[v>>2]=b,v)|0);cf(c[m>>2]|0,144576,(v=i,i=i+8|0,c[v>>2]=c[44936+(c[11252]<<2)>>2],v)|0);b=c[m>>2]|0;a=bA(5,0)|0;cf(b|0,142976,(v=i,i=i+8|0,c[v>>2]=a,v)|0);a=c[8270]|0;cf(c[m>>2]|0,141432,(v=i,i=i+8|0,c[v>>2]=(a|0)!=0?a:139696,v)|0);h=c[12908]|0;i=d;return h|0}else{h=c[12908]|0;i=d;return h|0}return 0}
+function ut(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0;do{if(a>>>0<245){if(a>>>0<11){b=16}else{b=a+11&-8}d=b>>>3;e=c[56330]|0;f=e>>>(d>>>0);if((f&3|0)!=0){g=(f&1^1)+d|0;h=g<<1;i=225360+(h<<2)|0;j=225360+(h+2<<2)|0;h=c[j>>2]|0;k=h+8|0;l=c[k>>2]|0;do{if((i|0)==(l|0)){c[56330]=e&(1<<g^-1)}else{if(l>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}m=l+12|0;if((c[m>>2]|0)==(h|0)){c[m>>2]=i;c[j>>2]=l;break}else{ce();return 0;return 0}}}while(0);l=g<<3;c[h+4>>2]=l|3;j=h+(l|4)|0;c[j>>2]=c[j>>2]|1;n=k;return n|0}if(b>>>0<=(c[56332]|0)>>>0){o=b;break}if((f|0)!=0){j=2<<d;l=f<<d&(j|-j);j=(l&-l)-1|0;l=j>>>12&16;i=j>>>(l>>>0);j=i>>>5&8;m=i>>>(j>>>0);i=m>>>2&4;p=m>>>(i>>>0);m=p>>>1&2;q=p>>>(m>>>0);p=q>>>1&1;r=(j|l|i|m|p)+(q>>>(p>>>0))|0;p=r<<1;q=225360+(p<<2)|0;m=225360+(p+2<<2)|0;p=c[m>>2]|0;i=p+8|0;l=c[i>>2]|0;do{if((q|0)==(l|0)){c[56330]=e&(1<<r^-1)}else{if(l>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}j=l+12|0;if((c[j>>2]|0)==(p|0)){c[j>>2]=q;c[m>>2]=l;break}else{ce();return 0;return 0}}}while(0);l=r<<3;m=l-b|0;c[p+4>>2]=b|3;q=p;e=q+b|0;c[q+(b|4)>>2]=m|1;c[q+l>>2]=m;l=c[56332]|0;if((l|0)!=0){q=c[56335]|0;d=l>>>3;l=d<<1;f=225360+(l<<2)|0;k=c[56330]|0;h=1<<d;do{if((k&h|0)==0){c[56330]=k|h;s=f;t=225360+(l+2<<2)|0}else{d=225360+(l+2<<2)|0;g=c[d>>2]|0;if(g>>>0>=(c[56334]|0)>>>0){s=g;t=d;break}ce();return 0;return 0}}while(0);c[t>>2]=q;c[s+12>>2]=q;c[q+8>>2]=s;c[q+12>>2]=f}c[56332]=m;c[56335]=e;n=i;return n|0}l=c[56331]|0;if((l|0)==0){o=b;break}h=(l&-l)-1|0;l=h>>>12&16;k=h>>>(l>>>0);h=k>>>5&8;p=k>>>(h>>>0);k=p>>>2&4;r=p>>>(k>>>0);p=r>>>1&2;d=r>>>(p>>>0);r=d>>>1&1;g=c[225624+((h|l|k|p|r)+(d>>>(r>>>0))<<2)>>2]|0;r=g;d=g;p=(c[g+4>>2]&-8)-b|0;while(1){g=c[r+16>>2]|0;if((g|0)==0){k=c[r+20>>2]|0;if((k|0)==0){break}else{u=k}}else{u=g}g=(c[u+4>>2]&-8)-b|0;k=g>>>0<p>>>0;r=u;d=k?u:d;p=k?g:p}r=d;i=c[56334]|0;if(r>>>0<i>>>0){ce();return 0;return 0}e=r+b|0;m=e;if(r>>>0>=e>>>0){ce();return 0;return 0}e=c[d+24>>2]|0;f=c[d+12>>2]|0;do{if((f|0)==(d|0)){q=d+20|0;g=c[q>>2]|0;if((g|0)==0){k=d+16|0;l=c[k>>2]|0;if((l|0)==0){v=0;break}else{w=l;x=k}}else{w=g;x=q}while(1){q=w+20|0;g=c[q>>2]|0;if((g|0)!=0){w=g;x=q;continue}q=w+16|0;g=c[q>>2]|0;if((g|0)==0){break}else{w=g;x=q}}if(x>>>0<i>>>0){ce();return 0;return 0}else{c[x>>2]=0;v=w;break}}else{q=c[d+8>>2]|0;if(q>>>0<i>>>0){ce();return 0;return 0}g=q+12|0;if((c[g>>2]|0)!=(d|0)){ce();return 0;return 0}k=f+8|0;if((c[k>>2]|0)==(d|0)){c[g>>2]=f;c[k>>2]=q;v=f;break}else{ce();return 0;return 0}}}while(0);L1026:do{if((e|0)!=0){f=d+28|0;i=225624+(c[f>>2]<<2)|0;do{if((d|0)==(c[i>>2]|0)){c[i>>2]=v;if((v|0)!=0){break}c[56331]=c[56331]&(1<<c[f>>2]^-1);break L1026}else{if(e>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}q=e+16|0;if((c[q>>2]|0)==(d|0)){c[q>>2]=v}else{c[e+20>>2]=v}if((v|0)==0){break L1026}}}while(0);if(v>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}c[v+24>>2]=e;f=c[d+16>>2]|0;do{if((f|0)!=0){if(f>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}else{c[v+16>>2]=f;c[f+24>>2]=v;break}}}while(0);f=c[d+20>>2]|0;if((f|0)==0){break}if(f>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}else{c[v+20>>2]=f;c[f+24>>2]=v;break}}}while(0);if(p>>>0<16){e=p+b|0;c[d+4>>2]=e|3;f=r+(e+4|0)|0;c[f>>2]=c[f>>2]|1}else{c[d+4>>2]=b|3;c[r+(b|4)>>2]=p|1;c[r+(p+b|0)>>2]=p;f=c[56332]|0;if((f|0)!=0){e=c[56335]|0;i=f>>>3;f=i<<1;q=225360+(f<<2)|0;k=c[56330]|0;g=1<<i;do{if((k&g|0)==0){c[56330]=k|g;y=q;z=225360+(f+2<<2)|0}else{i=225360+(f+2<<2)|0;l=c[i>>2]|0;if(l>>>0>=(c[56334]|0)>>>0){y=l;z=i;break}ce();return 0;return 0}}while(0);c[z>>2]=e;c[y+12>>2]=e;c[e+8>>2]=y;c[e+12>>2]=q}c[56332]=p;c[56335]=m}f=d+8|0;if((f|0)==0){o=b;break}else{n=f}return n|0}else{if(a>>>0>4294967231){o=-1;break}f=a+11|0;g=f&-8;k=c[56331]|0;if((k|0)==0){o=g;break}r=-g|0;i=f>>>8;do{if((i|0)==0){A=0}else{if(g>>>0>16777215){A=31;break}f=(i+1048320|0)>>>16&8;l=i<<f;h=(l+520192|0)>>>16&4;j=l<<h;l=(j+245760|0)>>>16&2;B=(14-(h|f|l)|0)+(j<<l>>>15)|0;A=g>>>((B+7|0)>>>0)&1|B<<1}}while(0);i=c[225624+(A<<2)>>2]|0;L1074:do{if((i|0)==0){C=0;D=r;E=0}else{if((A|0)==31){F=0}else{F=25-(A>>>1)|0}d=0;m=r;p=i;q=g<<F;e=0;while(1){B=c[p+4>>2]&-8;l=B-g|0;if(l>>>0<m>>>0){if((B|0)==(g|0)){C=p;D=l;E=p;break L1074}else{G=p;H=l}}else{G=d;H=m}l=c[p+20>>2]|0;B=c[p+16+(q>>>31<<2)>>2]|0;j=(l|0)==0|(l|0)==(B|0)?e:l;if((B|0)==0){C=G;D=H;E=j;break}else{d=G;m=H;p=B;q=q<<1;e=j}}}}while(0);if((E|0)==0&(C|0)==0){i=2<<A;r=k&(i|-i);if((r|0)==0){o=g;break}i=(r&-r)-1|0;r=i>>>12&16;e=i>>>(r>>>0);i=e>>>5&8;q=e>>>(i>>>0);e=q>>>2&4;p=q>>>(e>>>0);q=p>>>1&2;m=p>>>(q>>>0);p=m>>>1&1;I=c[225624+((i|r|e|q|p)+(m>>>(p>>>0))<<2)>>2]|0}else{I=E}if((I|0)==0){J=D;K=C}else{p=I;m=D;q=C;while(1){e=(c[p+4>>2]&-8)-g|0;r=e>>>0<m>>>0;i=r?e:m;e=r?p:q;r=c[p+16>>2]|0;if((r|0)!=0){p=r;m=i;q=e;continue}r=c[p+20>>2]|0;if((r|0)==0){J=i;K=e;break}else{p=r;m=i;q=e}}}if((K|0)==0){o=g;break}if(J>>>0>=((c[56332]|0)-g|0)>>>0){o=g;break}q=K;m=c[56334]|0;if(q>>>0<m>>>0){ce();return 0;return 0}p=q+g|0;k=p;if(q>>>0>=p>>>0){ce();return 0;return 0}e=c[K+24>>2]|0;i=c[K+12>>2]|0;do{if((i|0)==(K|0)){r=K+20|0;d=c[r>>2]|0;if((d|0)==0){j=K+16|0;B=c[j>>2]|0;if((B|0)==0){L=0;break}else{M=B;N=j}}else{M=d;N=r}while(1){r=M+20|0;d=c[r>>2]|0;if((d|0)!=0){M=d;N=r;continue}r=M+16|0;d=c[r>>2]|0;if((d|0)==0){break}else{M=d;N=r}}if(N>>>0<m>>>0){ce();return 0;return 0}else{c[N>>2]=0;L=M;break}}else{r=c[K+8>>2]|0;if(r>>>0<m>>>0){ce();return 0;return 0}d=r+12|0;if((c[d>>2]|0)!=(K|0)){ce();return 0;return 0}j=i+8|0;if((c[j>>2]|0)==(K|0)){c[d>>2]=i;c[j>>2]=r;L=i;break}else{ce();return 0;return 0}}}while(0);L1124:do{if((e|0)!=0){i=K+28|0;m=225624+(c[i>>2]<<2)|0;do{if((K|0)==(c[m>>2]|0)){c[m>>2]=L;if((L|0)!=0){break}c[56331]=c[56331]&(1<<c[i>>2]^-1);break L1124}else{if(e>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}r=e+16|0;if((c[r>>2]|0)==(K|0)){c[r>>2]=L}else{c[e+20>>2]=L}if((L|0)==0){break L1124}}}while(0);if(L>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}c[L+24>>2]=e;i=c[K+16>>2]|0;do{if((i|0)!=0){if(i>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}else{c[L+16>>2]=i;c[i+24>>2]=L;break}}}while(0);i=c[K+20>>2]|0;if((i|0)==0){break}if(i>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}else{c[L+20>>2]=i;c[i+24>>2]=L;break}}}while(0);do{if(J>>>0<16){e=J+g|0;c[K+4>>2]=e|3;i=q+(e+4|0)|0;c[i>>2]=c[i>>2]|1}else{c[K+4>>2]=g|3;c[q+(g|4)>>2]=J|1;c[q+(J+g|0)>>2]=J;i=J>>>3;if(J>>>0<256){e=i<<1;m=225360+(e<<2)|0;r=c[56330]|0;j=1<<i;do{if((r&j|0)==0){c[56330]=r|j;O=m;P=225360+(e+2<<2)|0}else{i=225360+(e+2<<2)|0;d=c[i>>2]|0;if(d>>>0>=(c[56334]|0)>>>0){O=d;P=i;break}ce();return 0;return 0}}while(0);c[P>>2]=k;c[O+12>>2]=k;c[q+(g+8|0)>>2]=O;c[q+(g+12|0)>>2]=m;break}e=p;j=J>>>8;do{if((j|0)==0){Q=0}else{if(J>>>0>16777215){Q=31;break}r=(j+1048320|0)>>>16&8;i=j<<r;d=(i+520192|0)>>>16&4;B=i<<d;i=(B+245760|0)>>>16&2;l=(14-(d|r|i)|0)+(B<<i>>>15)|0;Q=J>>>((l+7|0)>>>0)&1|l<<1}}while(0);j=225624+(Q<<2)|0;c[q+(g+28|0)>>2]=Q;c[q+(g+20|0)>>2]=0;c[q+(g+16|0)>>2]=0;m=c[56331]|0;l=1<<Q;if((m&l|0)==0){c[56331]=m|l;c[j>>2]=e;c[q+(g+24|0)>>2]=j;c[q+(g+12|0)>>2]=e;c[q+(g+8|0)>>2]=e;break}if((Q|0)==31){R=0}else{R=25-(Q>>>1)|0}l=J<<R;m=c[j>>2]|0;while(1){if((c[m+4>>2]&-8|0)==(J|0)){break}S=m+16+(l>>>31<<2)|0;j=c[S>>2]|0;if((j|0)==0){T=862;break}else{l=l<<1;m=j}}if((T|0)==862){if(S>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}else{c[S>>2]=e;c[q+(g+24|0)>>2]=m;c[q+(g+12|0)>>2]=e;c[q+(g+8|0)>>2]=e;break}}l=m+8|0;j=c[l>>2]|0;i=c[56334]|0;if(m>>>0<i>>>0){ce();return 0;return 0}if(j>>>0<i>>>0){ce();return 0;return 0}else{c[j+12>>2]=e;c[l>>2]=e;c[q+(g+8|0)>>2]=j;c[q+(g+12|0)>>2]=m;c[q+(g+24|0)>>2]=0;break}}}while(0);q=K+8|0;if((q|0)==0){o=g;break}else{n=q}return n|0}}while(0);K=c[56332]|0;if(o>>>0<=K>>>0){S=K-o|0;J=c[56335]|0;if(S>>>0>15){R=J;c[56335]=R+o;c[56332]=S;c[R+(o+4|0)>>2]=S|1;c[R+K>>2]=S;c[J+4>>2]=o|3}else{c[56332]=0;c[56335]=0;c[J+4>>2]=K|3;S=J+(K+4|0)|0;c[S>>2]=c[S>>2]|1}n=J+8|0;return n|0}J=c[56333]|0;if(o>>>0<J>>>0){S=J-o|0;c[56333]=S;J=c[56336]|0;K=J;c[56336]=K+o;c[K+(o+4|0)>>2]=S|1;c[J+4>>2]=o|3;n=J+8|0;return n|0}do{if((c[8408]|0)==0){J=cb(8)|0;if((J-1&J|0)==0){c[8410]=J;c[8409]=J;c[8411]=-1;c[8412]=2097152;c[8413]=0;c[56441]=0;c[8408]=cG(0)&-16^1431655768;break}else{ce();return 0;return 0}}}while(0);J=o+48|0;S=c[8410]|0;K=o+47|0;R=S+K|0;Q=-S|0;S=R&Q;if(S>>>0<=o>>>0){n=0;return n|0}O=c[56440]|0;do{if((O|0)!=0){P=c[56438]|0;L=P+S|0;if(L>>>0<=P>>>0|L>>>0>O>>>0){n=0}else{break}return n|0}}while(0);L1216:do{if((c[56441]&4|0)==0){O=c[56336]|0;L1218:do{if((O|0)==0){T=892}else{L=O;P=225768;while(1){U=P|0;M=c[U>>2]|0;if(M>>>0<=L>>>0){V=P+4|0;if((M+(c[V>>2]|0)|0)>>>0>L>>>0){break}}M=c[P+8>>2]|0;if((M|0)==0){T=892;break L1218}else{P=M}}if((P|0)==0){T=892;break}L=R-(c[56333]|0)&Q;if(L>>>0>=2147483647){W=0;break}m=b_(L|0)|0;e=(m|0)==((c[U>>2]|0)+(c[V>>2]|0)|0);X=e?m:-1;Y=e?L:0;Z=m;_=L;T=901}}while(0);do{if((T|0)==892){O=b_(0)|0;if((O|0)==-1){W=0;break}g=O;L=c[8409]|0;m=L-1|0;if((m&g|0)==0){$=S}else{$=(S-g|0)+(m+g&-L)|0}L=c[56438]|0;g=L+$|0;if(!($>>>0>o>>>0&$>>>0<2147483647)){W=0;break}m=c[56440]|0;if((m|0)!=0){if(g>>>0<=L>>>0|g>>>0>m>>>0){W=0;break}}m=b_($|0)|0;g=(m|0)==(O|0);X=g?O:-1;Y=g?$:0;Z=m;_=$;T=901}}while(0);L1238:do{if((T|0)==901){m=-_|0;if((X|0)!=-1){aa=Y;ab=X;T=912;break L1216}do{if((Z|0)!=-1&_>>>0<2147483647&_>>>0<J>>>0){g=c[8410]|0;O=(K-_|0)+g&-g;if(O>>>0>=2147483647){ac=_;break}if((b_(O|0)|0)==-1){b_(m|0);W=Y;break L1238}else{ac=O+_|0;break}}else{ac=_}}while(0);if((Z|0)==-1){W=Y}else{aa=ac;ab=Z;T=912;break L1216}}}while(0);c[56441]=c[56441]|4;ad=W;T=909}else{ad=0;T=909}}while(0);do{if((T|0)==909){if(S>>>0>=2147483647){break}W=b_(S|0)|0;Z=b_(0)|0;if(!((Z|0)!=-1&(W|0)!=-1&W>>>0<Z>>>0)){break}ac=Z-W|0;Z=ac>>>0>(o+40|0)>>>0;Y=Z?W:-1;if((Y|0)!=-1){aa=Z?ac:ad;ab=Y;T=912}}}while(0);do{if((T|0)==912){ad=(c[56438]|0)+aa|0;c[56438]=ad;if(ad>>>0>(c[56439]|0)>>>0){c[56439]=ad}ad=c[56336]|0;L1258:do{if((ad|0)==0){S=c[56334]|0;if((S|0)==0|ab>>>0<S>>>0){c[56334]=ab}c[56442]=ab;c[56443]=aa;c[56445]=0;c[56339]=c[8408];c[56338]=-1;S=0;do{Y=S<<1;ac=225360+(Y<<2)|0;c[225360+(Y+3<<2)>>2]=ac;c[225360+(Y+2<<2)>>2]=ac;S=S+1|0;}while(S>>>0<32);S=ab+8|0;if((S&7|0)==0){ae=0}else{ae=-S&7}S=(aa-40|0)-ae|0;c[56336]=ab+ae;c[56333]=S;c[ab+(ae+4|0)>>2]=S|1;c[ab+(aa-36|0)>>2]=40;c[56337]=c[8412]}else{S=225768;while(1){af=c[S>>2]|0;ag=S+4|0;ah=c[ag>>2]|0;if((ab|0)==(af+ah|0)){T=924;break}ac=c[S+8>>2]|0;if((ac|0)==0){break}else{S=ac}}do{if((T|0)==924){if((c[S+12>>2]&8|0)!=0){break}ac=ad;if(!(ac>>>0>=af>>>0&ac>>>0<ab>>>0)){break}c[ag>>2]=ah+aa;ac=c[56336]|0;Y=(c[56333]|0)+aa|0;Z=ac;W=ac+8|0;if((W&7|0)==0){ai=0}else{ai=-W&7}W=Y-ai|0;c[56336]=Z+ai;c[56333]=W;c[Z+(ai+4|0)>>2]=W|1;c[Z+(Y+4|0)>>2]=40;c[56337]=c[8412];break L1258}}while(0);if(ab>>>0<(c[56334]|0)>>>0){c[56334]=ab}S=ab+aa|0;Y=225768;while(1){aj=Y|0;if((c[aj>>2]|0)==(S|0)){T=934;break}Z=c[Y+8>>2]|0;if((Z|0)==0){break}else{Y=Z}}do{if((T|0)==934){if((c[Y+12>>2]&8|0)!=0){break}c[aj>>2]=ab;S=Y+4|0;c[S>>2]=(c[S>>2]|0)+aa;S=ab+8|0;if((S&7|0)==0){ak=0}else{ak=-S&7}S=ab+(aa+8|0)|0;if((S&7|0)==0){al=0}else{al=-S&7}S=ab+(al+aa|0)|0;Z=S;W=ak+o|0;ac=ab+W|0;_=ac;K=(S-(ab+ak|0)|0)-o|0;c[ab+(ak+4|0)>>2]=o|3;do{if((Z|0)==(c[56336]|0)){J=(c[56333]|0)+K|0;c[56333]=J;c[56336]=_;c[ab+(W+4|0)>>2]=J|1}else{if((Z|0)==(c[56335]|0)){J=(c[56332]|0)+K|0;c[56332]=J;c[56335]=_;c[ab+(W+4|0)>>2]=J|1;c[ab+(J+W|0)>>2]=J;break}J=aa+4|0;X=c[ab+(J+al|0)>>2]|0;if((X&3|0)==1){$=X&-8;V=X>>>3;L1293:do{if(X>>>0<256){U=c[ab+((al|8)+aa|0)>>2]|0;Q=c[ab+((aa+12|0)+al|0)>>2]|0;R=225360+(V<<1<<2)|0;do{if((U|0)!=(R|0)){if(U>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}if((c[U+12>>2]|0)==(Z|0)){break}ce();return 0;return 0}}while(0);if((Q|0)==(U|0)){c[56330]=c[56330]&(1<<V^-1);break}do{if((Q|0)==(R|0)){am=Q+8|0}else{if(Q>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}m=Q+8|0;if((c[m>>2]|0)==(Z|0)){am=m;break}ce();return 0;return 0}}while(0);c[U+12>>2]=Q;c[am>>2]=U}else{R=S;m=c[ab+((al|24)+aa|0)>>2]|0;P=c[ab+((aa+12|0)+al|0)>>2]|0;do{if((P|0)==(R|0)){O=al|16;g=ab+(J+O|0)|0;L=c[g>>2]|0;if((L|0)==0){e=ab+(O+aa|0)|0;O=c[e>>2]|0;if((O|0)==0){an=0;break}else{ao=O;ap=e}}else{ao=L;ap=g}while(1){g=ao+20|0;L=c[g>>2]|0;if((L|0)!=0){ao=L;ap=g;continue}g=ao+16|0;L=c[g>>2]|0;if((L|0)==0){break}else{ao=L;ap=g}}if(ap>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}else{c[ap>>2]=0;an=ao;break}}else{g=c[ab+((al|8)+aa|0)>>2]|0;if(g>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}L=g+12|0;if((c[L>>2]|0)!=(R|0)){ce();return 0;return 0}e=P+8|0;if((c[e>>2]|0)==(R|0)){c[L>>2]=P;c[e>>2]=g;an=P;break}else{ce();return 0;return 0}}}while(0);if((m|0)==0){break}P=ab+((aa+28|0)+al|0)|0;U=225624+(c[P>>2]<<2)|0;do{if((R|0)==(c[U>>2]|0)){c[U>>2]=an;if((an|0)!=0){break}c[56331]=c[56331]&(1<<c[P>>2]^-1);break L1293}else{if(m>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}Q=m+16|0;if((c[Q>>2]|0)==(R|0)){c[Q>>2]=an}else{c[m+20>>2]=an}if((an|0)==0){break L1293}}}while(0);if(an>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}c[an+24>>2]=m;R=al|16;P=c[ab+(R+aa|0)>>2]|0;do{if((P|0)!=0){if(P>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}else{c[an+16>>2]=P;c[P+24>>2]=an;break}}}while(0);P=c[ab+(J+R|0)>>2]|0;if((P|0)==0){break}if(P>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}else{c[an+20>>2]=P;c[P+24>>2]=an;break}}}while(0);aq=ab+(($|al)+aa|0)|0;ar=$+K|0}else{aq=Z;ar=K}J=aq+4|0;c[J>>2]=c[J>>2]&-2;c[ab+(W+4|0)>>2]=ar|1;c[ab+(ar+W|0)>>2]=ar;J=ar>>>3;if(ar>>>0<256){V=J<<1;X=225360+(V<<2)|0;P=c[56330]|0;m=1<<J;do{if((P&m|0)==0){c[56330]=P|m;as=X;at=225360+(V+2<<2)|0}else{J=225360+(V+2<<2)|0;U=c[J>>2]|0;if(U>>>0>=(c[56334]|0)>>>0){as=U;at=J;break}ce();return 0;return 0}}while(0);c[at>>2]=_;c[as+12>>2]=_;c[ab+(W+8|0)>>2]=as;c[ab+(W+12|0)>>2]=X;break}V=ac;m=ar>>>8;do{if((m|0)==0){au=0}else{if(ar>>>0>16777215){au=31;break}P=(m+1048320|0)>>>16&8;$=m<<P;J=($+520192|0)>>>16&4;U=$<<J;$=(U+245760|0)>>>16&2;Q=(14-(J|P|$)|0)+(U<<$>>>15)|0;au=ar>>>((Q+7|0)>>>0)&1|Q<<1}}while(0);m=225624+(au<<2)|0;c[ab+(W+28|0)>>2]=au;c[ab+(W+20|0)>>2]=0;c[ab+(W+16|0)>>2]=0;X=c[56331]|0;Q=1<<au;if((X&Q|0)==0){c[56331]=X|Q;c[m>>2]=V;c[ab+(W+24|0)>>2]=m;c[ab+(W+12|0)>>2]=V;c[ab+(W+8|0)>>2]=V;break}if((au|0)==31){av=0}else{av=25-(au>>>1)|0}Q=ar<<av;X=c[m>>2]|0;while(1){if((c[X+4>>2]&-8|0)==(ar|0)){break}aw=X+16+(Q>>>31<<2)|0;m=c[aw>>2]|0;if((m|0)==0){T=1007;break}else{Q=Q<<1;X=m}}if((T|0)==1007){if(aw>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}else{c[aw>>2]=V;c[ab+(W+24|0)>>2]=X;c[ab+(W+12|0)>>2]=V;c[ab+(W+8|0)>>2]=V;break}}Q=X+8|0;m=c[Q>>2]|0;$=c[56334]|0;if(X>>>0<$>>>0){ce();return 0;return 0}if(m>>>0<$>>>0){ce();return 0;return 0}else{c[m+12>>2]=V;c[Q>>2]=V;c[ab+(W+8|0)>>2]=m;c[ab+(W+12|0)>>2]=X;c[ab+(W+24|0)>>2]=0;break}}}while(0);n=ab+(ak|8)|0;return n|0}}while(0);Y=ad;W=225768;while(1){ax=c[W>>2]|0;if(ax>>>0<=Y>>>0){ay=c[W+4>>2]|0;az=ax+ay|0;if(az>>>0>Y>>>0){break}}W=c[W+8>>2]|0}W=ax+(ay-39|0)|0;if((W&7|0)==0){aA=0}else{aA=-W&7}W=ax+((ay-47|0)+aA|0)|0;ac=W>>>0<(ad+16|0)>>>0?Y:W;W=ac+8|0;_=ab+8|0;if((_&7|0)==0){aB=0}else{aB=-_&7}_=(aa-40|0)-aB|0;c[56336]=ab+aB;c[56333]=_;c[ab+(aB+4|0)>>2]=_|1;c[ab+(aa-36|0)>>2]=40;c[56337]=c[8412];c[ac+4>>2]=27;c[W>>2]=c[56442];c[W+4>>2]=c[225772>>2];c[W+8>>2]=c[225776>>2];c[W+12>>2]=c[225780>>2];c[56442]=ab;c[56443]=aa;c[56445]=0;c[56444]=W;W=ac+28|0;c[W>>2]=7;if((ac+32|0)>>>0<az>>>0){_=W;while(1){W=_+4|0;c[W>>2]=7;if((_+8|0)>>>0<az>>>0){_=W}else{break}}}if((ac|0)==(Y|0)){break}_=ac-ad|0;W=Y+(_+4|0)|0;c[W>>2]=c[W>>2]&-2;c[ad+4>>2]=_|1;c[Y+_>>2]=_;W=_>>>3;if(_>>>0<256){K=W<<1;Z=225360+(K<<2)|0;S=c[56330]|0;m=1<<W;do{if((S&m|0)==0){c[56330]=S|m;aC=Z;aD=225360+(K+2<<2)|0}else{W=225360+(K+2<<2)|0;Q=c[W>>2]|0;if(Q>>>0>=(c[56334]|0)>>>0){aC=Q;aD=W;break}ce();return 0;return 0}}while(0);c[aD>>2]=ad;c[aC+12>>2]=ad;c[ad+8>>2]=aC;c[ad+12>>2]=Z;break}K=ad;m=_>>>8;do{if((m|0)==0){aE=0}else{if(_>>>0>16777215){aE=31;break}S=(m+1048320|0)>>>16&8;Y=m<<S;ac=(Y+520192|0)>>>16&4;W=Y<<ac;Y=(W+245760|0)>>>16&2;Q=(14-(ac|S|Y)|0)+(W<<Y>>>15)|0;aE=_>>>((Q+7|0)>>>0)&1|Q<<1}}while(0);m=225624+(aE<<2)|0;c[ad+28>>2]=aE;c[ad+20>>2]=0;c[ad+16>>2]=0;Z=c[56331]|0;Q=1<<aE;if((Z&Q|0)==0){c[56331]=Z|Q;c[m>>2]=K;c[ad+24>>2]=m;c[ad+12>>2]=ad;c[ad+8>>2]=ad;break}if((aE|0)==31){aF=0}else{aF=25-(aE>>>1)|0}Q=_<<aF;Z=c[m>>2]|0;while(1){if((c[Z+4>>2]&-8|0)==(_|0)){break}aG=Z+16+(Q>>>31<<2)|0;m=c[aG>>2]|0;if((m|0)==0){T=1042;break}else{Q=Q<<1;Z=m}}if((T|0)==1042){if(aG>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}else{c[aG>>2]=K;c[ad+24>>2]=Z;c[ad+12>>2]=ad;c[ad+8>>2]=ad;break}}Q=Z+8|0;_=c[Q>>2]|0;m=c[56334]|0;if(Z>>>0<m>>>0){ce();return 0;return 0}if(_>>>0<m>>>0){ce();return 0;return 0}else{c[_+12>>2]=K;c[Q>>2]=K;c[ad+8>>2]=_;c[ad+12>>2]=Z;c[ad+24>>2]=0;break}}}while(0);ad=c[56333]|0;if(ad>>>0<=o>>>0){break}_=ad-o|0;c[56333]=_;ad=c[56336]|0;Q=ad;c[56336]=Q+o;c[Q+(o+4|0)>>2]=_|1;c[ad+4>>2]=o|3;n=ad+8|0;return n|0}}while(0);c[b0()>>2]=12;n=0;return n|0}function uu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;if((a|0)==0){return}b=a-8|0;d=b;e=c[56334]|0;if(b>>>0<e>>>0){ce()}f=c[a-4>>2]|0;g=f&3;if((g|0)==1){ce()}h=f&-8;i=a+(h-8|0)|0;j=i;L1475:do{if((f&1|0)==0){k=c[b>>2]|0;if((g|0)==0){return}l=-8-k|0;m=a+l|0;n=m;o=k+h|0;if(m>>>0<e>>>0){ce()}if((n|0)==(c[56335]|0)){p=a+(h-4|0)|0;if((c[p>>2]&3|0)!=3){q=n;r=o;break}c[56332]=o;c[p>>2]=c[p>>2]&-2;c[a+(l+4|0)>>2]=o|1;c[i>>2]=o;return}p=k>>>3;if(k>>>0<256){k=c[a+(l+8|0)>>2]|0;s=c[a+(l+12|0)>>2]|0;t=225360+(p<<1<<2)|0;do{if((k|0)!=(t|0)){if(k>>>0<e>>>0){ce()}if((c[k+12>>2]|0)==(n|0)){break}ce()}}while(0);if((s|0)==(k|0)){c[56330]=c[56330]&(1<<p^-1);q=n;r=o;break}do{if((s|0)==(t|0)){u=s+8|0}else{if(s>>>0<e>>>0){ce()}v=s+8|0;if((c[v>>2]|0)==(n|0)){u=v;break}ce()}}while(0);c[k+12>>2]=s;c[u>>2]=k;q=n;r=o;break}t=m;p=c[a+(l+24|0)>>2]|0;v=c[a+(l+12|0)>>2]|0;do{if((v|0)==(t|0)){w=a+(l+20|0)|0;x=c[w>>2]|0;if((x|0)==0){y=a+(l+16|0)|0;z=c[y>>2]|0;if((z|0)==0){A=0;break}else{B=z;C=y}}else{B=x;C=w}while(1){w=B+20|0;x=c[w>>2]|0;if((x|0)!=0){B=x;C=w;continue}w=B+16|0;x=c[w>>2]|0;if((x|0)==0){break}else{B=x;C=w}}if(C>>>0<e>>>0){ce()}else{c[C>>2]=0;A=B;break}}else{w=c[a+(l+8|0)>>2]|0;if(w>>>0<e>>>0){ce()}x=w+12|0;if((c[x>>2]|0)!=(t|0)){ce()}y=v+8|0;if((c[y>>2]|0)==(t|0)){c[x>>2]=v;c[y>>2]=w;A=v;break}else{ce()}}}while(0);if((p|0)==0){q=n;r=o;break}v=a+(l+28|0)|0;m=225624+(c[v>>2]<<2)|0;do{if((t|0)==(c[m>>2]|0)){c[m>>2]=A;if((A|0)!=0){break}c[56331]=c[56331]&(1<<c[v>>2]^-1);q=n;r=o;break L1475}else{if(p>>>0<(c[56334]|0)>>>0){ce()}k=p+16|0;if((c[k>>2]|0)==(t|0)){c[k>>2]=A}else{c[p+20>>2]=A}if((A|0)==0){q=n;r=o;break L1475}}}while(0);if(A>>>0<(c[56334]|0)>>>0){ce()}c[A+24>>2]=p;t=c[a+(l+16|0)>>2]|0;do{if((t|0)!=0){if(t>>>0<(c[56334]|0)>>>0){ce()}else{c[A+16>>2]=t;c[t+24>>2]=A;break}}}while(0);t=c[a+(l+20|0)>>2]|0;if((t|0)==0){q=n;r=o;break}if(t>>>0<(c[56334]|0)>>>0){ce()}else{c[A+20>>2]=t;c[t+24>>2]=A;q=n;r=o;break}}else{q=d;r=h}}while(0);d=q;if(d>>>0>=i>>>0){ce()}A=a+(h-4|0)|0;e=c[A>>2]|0;if((e&1|0)==0){ce()}do{if((e&2|0)==0){if((j|0)==(c[56336]|0)){B=(c[56333]|0)+r|0;c[56333]=B;c[56336]=q;c[q+4>>2]=B|1;if((q|0)==(c[56335]|0)){c[56335]=0;c[56332]=0}if(B>>>0<=(c[56337]|0)>>>0){return}uw(0);return}if((j|0)==(c[56335]|0)){B=(c[56332]|0)+r|0;c[56332]=B;c[56335]=q;c[q+4>>2]=B|1;c[d+B>>2]=B;return}B=(e&-8)+r|0;C=e>>>3;L1581:do{if(e>>>0<256){u=c[a+h>>2]|0;g=c[a+(h|4)>>2]|0;b=225360+(C<<1<<2)|0;do{if((u|0)!=(b|0)){if(u>>>0<(c[56334]|0)>>>0){ce()}if((c[u+12>>2]|0)==(j|0)){break}ce()}}while(0);if((g|0)==(u|0)){c[56330]=c[56330]&(1<<C^-1);break}do{if((g|0)==(b|0)){D=g+8|0}else{if(g>>>0<(c[56334]|0)>>>0){ce()}f=g+8|0;if((c[f>>2]|0)==(j|0)){D=f;break}ce()}}while(0);c[u+12>>2]=g;c[D>>2]=u}else{b=i;f=c[a+(h+16|0)>>2]|0;t=c[a+(h|4)>>2]|0;do{if((t|0)==(b|0)){p=a+(h+12|0)|0;v=c[p>>2]|0;if((v|0)==0){m=a+(h+8|0)|0;k=c[m>>2]|0;if((k|0)==0){E=0;break}else{F=k;G=m}}else{F=v;G=p}while(1){p=F+20|0;v=c[p>>2]|0;if((v|0)!=0){F=v;G=p;continue}p=F+16|0;v=c[p>>2]|0;if((v|0)==0){break}else{F=v;G=p}}if(G>>>0<(c[56334]|0)>>>0){ce()}else{c[G>>2]=0;E=F;break}}else{p=c[a+h>>2]|0;if(p>>>0<(c[56334]|0)>>>0){ce()}v=p+12|0;if((c[v>>2]|0)!=(b|0)){ce()}m=t+8|0;if((c[m>>2]|0)==(b|0)){c[v>>2]=t;c[m>>2]=p;E=t;break}else{ce()}}}while(0);if((f|0)==0){break}t=a+(h+20|0)|0;u=225624+(c[t>>2]<<2)|0;do{if((b|0)==(c[u>>2]|0)){c[u>>2]=E;if((E|0)!=0){break}c[56331]=c[56331]&(1<<c[t>>2]^-1);break L1581}else{if(f>>>0<(c[56334]|0)>>>0){ce()}g=f+16|0;if((c[g>>2]|0)==(b|0)){c[g>>2]=E}else{c[f+20>>2]=E}if((E|0)==0){break L1581}}}while(0);if(E>>>0<(c[56334]|0)>>>0){ce()}c[E+24>>2]=f;b=c[a+(h+8|0)>>2]|0;do{if((b|0)!=0){if(b>>>0<(c[56334]|0)>>>0){ce()}else{c[E+16>>2]=b;c[b+24>>2]=E;break}}}while(0);b=c[a+(h+12|0)>>2]|0;if((b|0)==0){break}if(b>>>0<(c[56334]|0)>>>0){ce()}else{c[E+20>>2]=b;c[b+24>>2]=E;break}}}while(0);c[q+4>>2]=B|1;c[d+B>>2]=B;if((q|0)!=(c[56335]|0)){H=B;break}c[56332]=B;return}else{c[A>>2]=e&-2;c[q+4>>2]=r|1;c[d+r>>2]=r;H=r}}while(0);r=H>>>3;if(H>>>0<256){d=r<<1;e=225360+(d<<2)|0;A=c[56330]|0;E=1<<r;do{if((A&E|0)==0){c[56330]=A|E;I=e;J=225360+(d+2<<2)|0}else{r=225360+(d+2<<2)|0;h=c[r>>2]|0;if(h>>>0>=(c[56334]|0)>>>0){I=h;J=r;break}ce()}}while(0);c[J>>2]=q;c[I+12>>2]=q;c[q+8>>2]=I;c[q+12>>2]=e;return}e=q;I=H>>>8;do{if((I|0)==0){K=0}else{if(H>>>0>16777215){K=31;break}J=(I+1048320|0)>>>16&8;d=I<<J;E=(d+520192|0)>>>16&4;A=d<<E;d=(A+245760|0)>>>16&2;r=(14-(E|J|d)|0)+(A<<d>>>15)|0;K=H>>>((r+7|0)>>>0)&1|r<<1}}while(0);I=225624+(K<<2)|0;c[q+28>>2]=K;c[q+20>>2]=0;c[q+16>>2]=0;r=c[56331]|0;d=1<<K;do{if((r&d|0)==0){c[56331]=r|d;c[I>>2]=e;c[q+24>>2]=I;c[q+12>>2]=q;c[q+8>>2]=q}else{if((K|0)==31){L=0}else{L=25-(K>>>1)|0}A=H<<L;J=c[I>>2]|0;while(1){if((c[J+4>>2]&-8|0)==(H|0)){break}M=J+16+(A>>>31<<2)|0;E=c[M>>2]|0;if((E|0)==0){N=1221;break}else{A=A<<1;J=E}}if((N|0)==1221){if(M>>>0<(c[56334]|0)>>>0){ce()}else{c[M>>2]=e;c[q+24>>2]=J;c[q+12>>2]=q;c[q+8>>2]=q;break}}A=J+8|0;B=c[A>>2]|0;E=c[56334]|0;if(J>>>0<E>>>0){ce()}if(B>>>0<E>>>0){ce()}else{c[B+12>>2]=e;c[A>>2]=e;c[q+8>>2]=B;c[q+12>>2]=J;c[q+24>>2]=0;break}}}while(0);q=(c[56338]|0)-1|0;c[56338]=q;if((q|0)==0){O=225776}else{return}while(1){q=c[O>>2]|0;if((q|0)==0){break}else{O=q+8|0}}c[56338]=-1;return}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((a|0)==0){d=ut(b)|0;return d|0}if(b>>>0>4294967231){c[b0()>>2]=12;d=0;return d|0}if(b>>>0<11){e=16}else{e=b+11&-8}f=ux(a-8|0,e)|0;if((f|0)!=0){d=f+8|0;return d|0}f=ut(b)|0;if((f|0)==0){d=0;return d|0}e=c[a-4>>2]|0;g=(e&-8)-((e&3|0)==0?8:4)|0;uD(f|0,a|0,g>>>0<b>>>0?g:b);uu(a);d=f;return d|0}function uw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;do{if((c[8408]|0)==0){b=cb(8)|0;if((b-1&b|0)==0){c[8410]=b;c[8409]=b;c[8411]=-1;c[8412]=2097152;c[8413]=0;c[56441]=0;c[8408]=cG(0)&-16^1431655768;break}else{ce();return 0;return 0}}}while(0);if(a>>>0>=4294967232){d=0;return d|0}b=c[56336]|0;if((b|0)==0){d=0;return d|0}e=c[56333]|0;do{if(e>>>0>(a+40|0)>>>0){f=c[8410]|0;g=aa(((((((-40-a|0)-1|0)+e|0)+f|0)>>>0)/(f>>>0)>>>0)-1|0,f);h=b;i=225768;while(1){j=c[i>>2]|0;if(j>>>0<=h>>>0){if((j+(c[i+4>>2]|0)|0)>>>0>h>>>0){k=i;break}}j=c[i+8>>2]|0;if((j|0)==0){k=0;break}else{i=j}}if((c[k+12>>2]&8|0)!=0){break}i=b_(0)|0;h=k+4|0;if((i|0)!=((c[k>>2]|0)+(c[h>>2]|0)|0)){break}j=b_(-(g>>>0>2147483646?-2147483648-f|0:g)|0)|0;l=b_(0)|0;if(!((j|0)!=-1&l>>>0<i>>>0)){break}j=i-l|0;if((i|0)==(l|0)){break}c[h>>2]=(c[h>>2]|0)-j;c[56438]=(c[56438]|0)-j;h=c[56336]|0;m=(c[56333]|0)-j|0;j=h;n=h+8|0;if((n&7|0)==0){o=0}else{o=-n&7}n=m-o|0;c[56336]=j+o;c[56333]=n;c[j+(o+4|0)>>2]=n|1;c[j+(m+4|0)>>2]=40;c[56337]=c[8412];d=(i|0)!=(l|0)&1;return d|0}}while(0);if((c[56333]|0)>>>0<=(c[56337]|0)>>>0){d=0;return d|0}c[56337]=-1;d=0;return d|0}function ux(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;d=a+4|0;e=c[d>>2]|0;f=e&-8;g=a;h=g+f|0;i=h;j=c[56334]|0;if(g>>>0<j>>>0){ce();return 0;return 0}k=e&3;if(!((k|0)!=1&g>>>0<h>>>0)){ce();return 0;return 0}l=g+(f|4)|0;m=c[l>>2]|0;if((m&1|0)==0){ce();return 0;return 0}if((k|0)==0){if(b>>>0<256){n=0;return n|0}do{if(f>>>0>=(b+4|0)>>>0){if((f-b|0)>>>0>c[8410]<<1>>>0){break}else{n=a}return n|0}}while(0);n=0;return n|0}if(f>>>0>=b>>>0){k=f-b|0;if(k>>>0<=15){n=a;return n|0}c[d>>2]=e&1|b|2;c[g+(b+4|0)>>2]=k|3;c[l>>2]=c[l>>2]|1;uy(g+b|0,k);n=a;return n|0}if((i|0)==(c[56336]|0)){k=(c[56333]|0)+f|0;if(k>>>0<=b>>>0){n=0;return n|0}l=k-b|0;c[d>>2]=e&1|b|2;c[g+(b+4|0)>>2]=l|1;c[56336]=g+b;c[56333]=l;n=a;return n|0}if((i|0)==(c[56335]|0)){l=(c[56332]|0)+f|0;if(l>>>0<b>>>0){n=0;return n|0}k=l-b|0;if(k>>>0>15){c[d>>2]=e&1|b|2;c[g+(b+4|0)>>2]=k|1;c[g+l>>2]=k;o=g+(l+4|0)|0;c[o>>2]=c[o>>2]&-2;p=g+b|0;q=k}else{c[d>>2]=e&1|l|2;e=g+(l+4|0)|0;c[e>>2]=c[e>>2]|1;p=0;q=0}c[56332]=q;c[56335]=p;n=a;return n|0}if((m&2|0)!=0){n=0;return n|0}p=(m&-8)+f|0;if(p>>>0<b>>>0){n=0;return n|0}q=p-b|0;e=m>>>3;L1801:do{if(m>>>0<256){l=c[g+(f+8|0)>>2]|0;k=c[g+(f+12|0)>>2]|0;o=225360+(e<<1<<2)|0;do{if((l|0)!=(o|0)){if(l>>>0<j>>>0){ce();return 0;return 0}if((c[l+12>>2]|0)==(i|0)){break}ce();return 0;return 0}}while(0);if((k|0)==(l|0)){c[56330]=c[56330]&(1<<e^-1);break}do{if((k|0)==(o|0)){r=k+8|0}else{if(k>>>0<j>>>0){ce();return 0;return 0}s=k+8|0;if((c[s>>2]|0)==(i|0)){r=s;break}ce();return 0;return 0}}while(0);c[l+12>>2]=k;c[r>>2]=l}else{o=h;s=c[g+(f+24|0)>>2]|0;t=c[g+(f+12|0)>>2]|0;do{if((t|0)==(o|0)){u=g+(f+20|0)|0;v=c[u>>2]|0;if((v|0)==0){w=g+(f+16|0)|0;x=c[w>>2]|0;if((x|0)==0){y=0;break}else{z=x;A=w}}else{z=v;A=u}while(1){u=z+20|0;v=c[u>>2]|0;if((v|0)!=0){z=v;A=u;continue}u=z+16|0;v=c[u>>2]|0;if((v|0)==0){break}else{z=v;A=u}}if(A>>>0<j>>>0){ce();return 0;return 0}else{c[A>>2]=0;y=z;break}}else{u=c[g+(f+8|0)>>2]|0;if(u>>>0<j>>>0){ce();return 0;return 0}v=u+12|0;if((c[v>>2]|0)!=(o|0)){ce();return 0;return 0}w=t+8|0;if((c[w>>2]|0)==(o|0)){c[v>>2]=t;c[w>>2]=u;y=t;break}else{ce();return 0;return 0}}}while(0);if((s|0)==0){break}t=g+(f+28|0)|0;l=225624+(c[t>>2]<<2)|0;do{if((o|0)==(c[l>>2]|0)){c[l>>2]=y;if((y|0)!=0){break}c[56331]=c[56331]&(1<<c[t>>2]^-1);break L1801}else{if(s>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}k=s+16|0;if((c[k>>2]|0)==(o|0)){c[k>>2]=y}else{c[s+20>>2]=y}if((y|0)==0){break L1801}}}while(0);if(y>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}c[y+24>>2]=s;o=c[g+(f+16|0)>>2]|0;do{if((o|0)!=0){if(o>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}else{c[y+16>>2]=o;c[o+24>>2]=y;break}}}while(0);o=c[g+(f+20|0)>>2]|0;if((o|0)==0){break}if(o>>>0<(c[56334]|0)>>>0){ce();return 0;return 0}else{c[y+20>>2]=o;c[o+24>>2]=y;break}}}while(0);if(q>>>0<16){c[d>>2]=p|c[d>>2]&1|2;y=g+(p|4)|0;c[y>>2]=c[y>>2]|1;n=a;return n|0}else{c[d>>2]=c[d>>2]&1|b|2;c[g+(b+4|0)>>2]=q|3;d=g+(p|4)|0;c[d>>2]=c[d>>2]|1;uy(g+b|0,q);n=a;return n|0}return 0}function uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;d=a;e=d+b|0;f=e;g=c[a+4>>2]|0;L1877:do{if((g&1|0)==0){h=c[a>>2]|0;if((g&3|0)==0){return}i=d+(-h|0)|0;j=i;k=h+b|0;l=c[56334]|0;if(i>>>0<l>>>0){ce()}if((j|0)==(c[56335]|0)){m=d+(b+4|0)|0;if((c[m>>2]&3|0)!=3){n=j;o=k;break}c[56332]=k;c[m>>2]=c[m>>2]&-2;c[d+(4-h|0)>>2]=k|1;c[e>>2]=k;return}m=h>>>3;if(h>>>0<256){p=c[d+(8-h|0)>>2]|0;q=c[d+(12-h|0)>>2]|0;r=225360+(m<<1<<2)|0;do{if((p|0)!=(r|0)){if(p>>>0<l>>>0){ce()}if((c[p+12>>2]|0)==(j|0)){break}ce()}}while(0);if((q|0)==(p|0)){c[56330]=c[56330]&(1<<m^-1);n=j;o=k;break}do{if((q|0)==(r|0)){s=q+8|0}else{if(q>>>0<l>>>0){ce()}t=q+8|0;if((c[t>>2]|0)==(j|0)){s=t;break}ce()}}while(0);c[p+12>>2]=q;c[s>>2]=p;n=j;o=k;break}r=i;m=c[d+(24-h|0)>>2]|0;t=c[d+(12-h|0)>>2]|0;do{if((t|0)==(r|0)){u=16-h|0;v=d+(u+4|0)|0;w=c[v>>2]|0;if((w|0)==0){x=d+u|0;u=c[x>>2]|0;if((u|0)==0){y=0;break}else{z=u;A=x}}else{z=w;A=v}while(1){v=z+20|0;w=c[v>>2]|0;if((w|0)!=0){z=w;A=v;continue}v=z+16|0;w=c[v>>2]|0;if((w|0)==0){break}else{z=w;A=v}}if(A>>>0<l>>>0){ce()}else{c[A>>2]=0;y=z;break}}else{v=c[d+(8-h|0)>>2]|0;if(v>>>0<l>>>0){ce()}w=v+12|0;if((c[w>>2]|0)!=(r|0)){ce()}x=t+8|0;if((c[x>>2]|0)==(r|0)){c[w>>2]=t;c[x>>2]=v;y=t;break}else{ce()}}}while(0);if((m|0)==0){n=j;o=k;break}t=d+(28-h|0)|0;l=225624+(c[t>>2]<<2)|0;do{if((r|0)==(c[l>>2]|0)){c[l>>2]=y;if((y|0)!=0){break}c[56331]=c[56331]&(1<<c[t>>2]^-1);n=j;o=k;break L1877}else{if(m>>>0<(c[56334]|0)>>>0){ce()}i=m+16|0;if((c[i>>2]|0)==(r|0)){c[i>>2]=y}else{c[m+20>>2]=y}if((y|0)==0){n=j;o=k;break L1877}}}while(0);if(y>>>0<(c[56334]|0)>>>0){ce()}c[y+24>>2]=m;r=16-h|0;t=c[d+r>>2]|0;do{if((t|0)!=0){if(t>>>0<(c[56334]|0)>>>0){ce()}else{c[y+16>>2]=t;c[t+24>>2]=y;break}}}while(0);t=c[d+(r+4|0)>>2]|0;if((t|0)==0){n=j;o=k;break}if(t>>>0<(c[56334]|0)>>>0){ce()}else{c[y+20>>2]=t;c[t+24>>2]=y;n=j;o=k;break}}else{n=a;o=b}}while(0);a=c[56334]|0;if(e>>>0<a>>>0){ce()}y=d+(b+4|0)|0;z=c[y>>2]|0;do{if((z&2|0)==0){if((f|0)==(c[56336]|0)){A=(c[56333]|0)+o|0;c[56333]=A;c[56336]=n;c[n+4>>2]=A|1;if((n|0)!=(c[56335]|0)){return}c[56335]=0;c[56332]=0;return}if((f|0)==(c[56335]|0)){A=(c[56332]|0)+o|0;c[56332]=A;c[56335]=n;c[n+4>>2]=A|1;c[n+A>>2]=A;return}A=(z&-8)+o|0;s=z>>>3;L1976:do{if(z>>>0<256){g=c[d+(b+8|0)>>2]|0;t=c[d+(b+12|0)>>2]|0;h=225360+(s<<1<<2)|0;do{if((g|0)!=(h|0)){if(g>>>0<a>>>0){ce()}if((c[g+12>>2]|0)==(f|0)){break}ce()}}while(0);if((t|0)==(g|0)){c[56330]=c[56330]&(1<<s^-1);break}do{if((t|0)==(h|0)){B=t+8|0}else{if(t>>>0<a>>>0){ce()}m=t+8|0;if((c[m>>2]|0)==(f|0)){B=m;break}ce()}}while(0);c[g+12>>2]=t;c[B>>2]=g}else{h=e;m=c[d+(b+24|0)>>2]|0;l=c[d+(b+12|0)>>2]|0;do{if((l|0)==(h|0)){i=d+(b+20|0)|0;p=c[i>>2]|0;if((p|0)==0){q=d+(b+16|0)|0;v=c[q>>2]|0;if((v|0)==0){C=0;break}else{D=v;E=q}}else{D=p;E=i}while(1){i=D+20|0;p=c[i>>2]|0;if((p|0)!=0){D=p;E=i;continue}i=D+16|0;p=c[i>>2]|0;if((p|0)==0){break}else{D=p;E=i}}if(E>>>0<a>>>0){ce()}else{c[E>>2]=0;C=D;break}}else{i=c[d+(b+8|0)>>2]|0;if(i>>>0<a>>>0){ce()}p=i+12|0;if((c[p>>2]|0)!=(h|0)){ce()}q=l+8|0;if((c[q>>2]|0)==(h|0)){c[p>>2]=l;c[q>>2]=i;C=l;break}else{ce()}}}while(0);if((m|0)==0){break}l=d+(b+28|0)|0;g=225624+(c[l>>2]<<2)|0;do{if((h|0)==(c[g>>2]|0)){c[g>>2]=C;if((C|0)!=0){break}c[56331]=c[56331]&(1<<c[l>>2]^-1);break L1976}else{if(m>>>0<(c[56334]|0)>>>0){ce()}t=m+16|0;if((c[t>>2]|0)==(h|0)){c[t>>2]=C}else{c[m+20>>2]=C}if((C|0)==0){break L1976}}}while(0);if(C>>>0<(c[56334]|0)>>>0){ce()}c[C+24>>2]=m;h=c[d+(b+16|0)>>2]|0;do{if((h|0)!=0){if(h>>>0<(c[56334]|0)>>>0){ce()}else{c[C+16>>2]=h;c[h+24>>2]=C;break}}}while(0);h=c[d+(b+20|0)>>2]|0;if((h|0)==0){break}if(h>>>0<(c[56334]|0)>>>0){ce()}else{c[C+20>>2]=h;c[h+24>>2]=C;break}}}while(0);c[n+4>>2]=A|1;c[n+A>>2]=A;if((n|0)!=(c[56335]|0)){F=A;break}c[56332]=A;return}else{c[y>>2]=z&-2;c[n+4>>2]=o|1;c[n+o>>2]=o;F=o}}while(0);o=F>>>3;if(F>>>0<256){z=o<<1;y=225360+(z<<2)|0;C=c[56330]|0;b=1<<o;do{if((C&b|0)==0){c[56330]=C|b;G=y;H=225360+(z+2<<2)|0}else{o=225360+(z+2<<2)|0;d=c[o>>2]|0;if(d>>>0>=(c[56334]|0)>>>0){G=d;H=o;break}ce()}}while(0);c[H>>2]=n;c[G+12>>2]=n;c[n+8>>2]=G;c[n+12>>2]=y;return}y=n;G=F>>>8;do{if((G|0)==0){I=0}else{if(F>>>0>16777215){I=31;break}H=(G+1048320|0)>>>16&8;z=G<<H;b=(z+520192|0)>>>16&4;C=z<<b;z=(C+245760|0)>>>16&2;o=(14-(b|H|z)|0)+(C<<z>>>15)|0;I=F>>>((o+7|0)>>>0)&1|o<<1}}while(0);G=225624+(I<<2)|0;c[n+28>>2]=I;c[n+20>>2]=0;c[n+16>>2]=0;o=c[56331]|0;z=1<<I;if((o&z|0)==0){c[56331]=o|z;c[G>>2]=y;c[n+24>>2]=G;c[n+12>>2]=n;c[n+8>>2]=n;return}if((I|0)==31){J=0}else{J=25-(I>>>1)|0}I=F<<J;J=c[G>>2]|0;while(1){if((c[J+4>>2]&-8|0)==(F|0)){break}K=J+16+(I>>>31<<2)|0;G=c[K>>2]|0;if((G|0)==0){L=1527;break}else{I=I<<1;J=G}}if((L|0)==1527){if(K>>>0<(c[56334]|0)>>>0){ce()}c[K>>2]=y;c[n+24>>2]=J;c[n+12>>2]=n;c[n+8>>2]=n;return}K=J+8|0;L=c[K>>2]|0;I=c[56334]|0;if(J>>>0<I>>>0){ce()}if(L>>>0<I>>>0){ce()}c[L+12>>2]=y;c[K>>2]=y;c[n+8>>2]=L;c[n+12>>2]=J;c[n+24>>2]=0;return}function uz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0.0,A=0.0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0,O=0,P=0,Q=0.0,R=0.0,S=0.0;e=b;while(1){f=e+1|0;if((aM(a[e]|0|0)|0)==0){break}else{e=f}}g=a[e]|0;if((g<<24>>24|0)==45){i=f;j=1}else if((g<<24>>24|0)==43){i=f;j=0}else{i=e;j=0}e=-1;f=0;g=i;while(1){k=a[g]|0;if(((k<<24>>24)-48|0)>>>0<10){l=e}else{if(k<<24>>24!=46|(e|0)>-1){break}else{l=f}}e=l;f=f+1|0;g=g+1|0}l=g+(-f|0)|0;i=(e|0)<0;m=((i^1)<<31>>31)+f|0;n=(m|0)>18;o=(n?-18:-m|0)+(i?f:e)|0;e=n?18:m;do{if((e|0)==0){p=b;q=0.0}else{if((e|0)>9){m=l;n=e;f=0;while(1){i=a[m]|0;r=m+1|0;if(i<<24>>24==46){s=a[r]|0;t=m+2|0}else{s=i;t=r}u=((f*10&-1)-48|0)+(s<<24>>24)|0;r=n-1|0;if((r|0)>9){m=t;n=r;f=u}else{break}}v=+(u|0)*1.0e9;w=9;x=t;y=1575}else{if((e|0)>0){v=0.0;w=e;x=l;y=1575}else{z=0.0;A=0.0}}if((y|0)==1575){f=x;n=w;m=0;while(1){r=a[f]|0;i=f+1|0;if(r<<24>>24==46){B=a[i]|0;C=f+2|0}else{B=r;C=i}D=((m*10&-1)-48|0)+(B<<24>>24)|0;i=n-1|0;if((i|0)>0){f=C;n=i;m=D}else{break}}z=+(D|0);A=v}E=A+z;do{if((k<<24>>24|0)==69|(k<<24>>24|0)==101){m=g+1|0;n=a[m]|0;if((n<<24>>24|0)==45){F=g+2|0;G=1}else if((n<<24>>24|0)==43){F=g+2|0;G=0}else{F=m;G=0}m=a[F]|0;if(((m<<24>>24)-48|0)>>>0<10){H=F;I=0;J=m}else{K=0;L=F;M=G;break}while(1){m=((I*10&-1)-48|0)+(J<<24>>24)|0;n=H+1|0;f=a[n]|0;if(((f<<24>>24)-48|0)>>>0<10){H=n;I=m;J=f}else{K=m;L=n;M=G;break}}}else{K=0;L=g;M=0}}while(0);n=o+((M|0)==0?K:-K|0)|0;m=(n|0)<0?-n|0:n;if((m|0)>511){c[b0()>>2]=34;N=1.0;O=30088;P=511;y=1592}else{if((m|0)==0){Q=1.0}else{N=1.0;O=30088;P=m;y=1592}}if((y|0)==1592){while(1){y=0;if((P&1|0)==0){R=N}else{R=N*+h[O>>3]}m=P>>1;if((m|0)==0){Q=R;break}else{N=R;O=O+8|0;P=m;y=1592}}}if((n|0)>-1){p=L;q=E*Q;break}else{p=L;q=E/Q;break}}}while(0);if((d|0)!=0){c[d>>2]=p}if((j|0)==0){S=q;return+S}S=-0.0-q;return+S}function uA(b){b=b|0;var c=0;c=b;while(a[c]|0){c=c+1|0}return c-b|0}function uB(b,c){b=b|0;c=c|0;var d=0;do{a[b+d|0]=a[c+d|0];d=d+1|0}while(a[c+(d-1)|0]|0);return b|0}function uC(b,c){b=b|0;c=c|0;var d=0,e=0;d=b+(uA(b)|0)|0;do{a[d+e|0]=a[c+e|0];e=e+1|0}while(a[c+(e-1)|0]|0);return b|0}function uD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;f=b|0;if((b&3)==(d&3)){while(b&3){if((e|0)==0)return f|0;a[b]=a[d]|0;b=b+1|0;d=d+1|0;e=e-1|0}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0)>0){a[b]=a[d]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function uE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=b+e|0;if((e|0)>=20){d=d&255;e=b&3;g=d|d<<8|d<<16|d<<24;h=f&~3;if(e){e=b+4-e|0;while((b|0)<(e|0)){a[b]=d;b=b+1|0}}while((b|0)<(h|0)){c[b>>2]=g;b=b+4|0}}while((b|0)<(f|0)){a[b]=d;b=b+1|0}}function uF(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;while((e|0)<(d|0)){a[b+e|0]=f?0:a[c+e|0]|0;f=f?1:(a[c+e|0]|0)==0;e=e+1|0}return b|0}function uG(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,f=0,g=0;while((e|0)<(c|0)){f=d[a+e|0]|0;g=d[b+e|0]|0;if((f|0)!=(g|0))return((f|0)>(g|0)?1:-1)|0;e=e+1|0}return 0}function uH(b,c,d){b=b|0;c=c|0;d=d|0;if((c|0)<(b|0)&(b|0)<(c+d|0)){c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b]=a[c]|0}}else{uD(b,c,d)}}function uI(a){a=a|0;if((a|0)<65)return a|0;if((a|0)>90)return a|0;return a-65+97|0}function uJ(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;while(e>>>0<d>>>0){f=uI(a[b+e|0]|0)|0;g=uI(a[c+e|0]|0)|0;if((f|0)==(g|0)&(f|0)==0)return 0;if((f|0)==0)return-1;if((g|0)==0)return 1;if((f|0)==(g|0)){e=e+1|0;continue}else{return(f>>>0>g>>>0?1:-1)|0}}return 0}function uK(a,b){a=a|0;b=b|0;return uJ(a,b,-1)|0}function uL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;t=t+1|0;c[a>>2]=t;while((e|0)<40){if((c[d+(e<<2)>>2]|0)==0){c[d+(e<<2)>>2]=t;c[d+((e<<2)+4)>>2]=b;c[d+((e<<2)+8)>>2]=0;return 0}e=e+2|0}br(116);br(111);br(111);br(32);br(109);br(97);br(110);br(121);br(32);br(115);br(101);br(116);br(106);br(109);br(112);br(115);br(32);br(105);br(110);br(32);br(97);br(32);br(102);br(117);br(110);br(99);br(116);br(105);br(111);br(110);br(32);br(99);br(97);br(108);br(108);br(44);br(32);br(98);br(117);br(105);br(108);br(100);br(32);br(119);br(105);br(116);br(104);br(32);br(97);br(32);br(104);br(105);br(103);br(104);br(101);br(114);br(32);br(118);br(97);br(108);br(117);br(101);br(32);br(102);br(111);br(114);br(32);br(77);br(65);br(88);br(95);br(83);br(69);br(84);br(74);br(77);br(80);br(83);br(10);ab(0);return 0}function uM(a,b){a=a|0;b=b|0;var d=0,e=0;while((d|0)<20){e=c[b+(d<<2)>>2]|0;if((e|0)==0)break;if((e|0)==(a|0)){return c[b+((d<<2)+4)>>2]|0}d=d+2|0}return 0}function uN(){return b0()|0}function uO(a){a=a|0;bd(a|0)}function uP(a,b){a=a|0;b=b|0;cA(a|0,b|0)}function uQ(a){a=a|0;return bS(a|0)|0}function uR(a){a=a|0;return aR(a|0)|0}function uS(a){a=a|0;return a5(a|0)|0}function uT(a){a=a|0;return aA(a|0)|0}function uU(a){a=a|0;return bP(a|0)|0}function uV(a,b){a=a|0;b=b|0;return aY(a|0,b|0)|0}function uW(a,b){a=a|0;b=b|0;return bA(a|0,b|0)|0}function uX(a,b){a=a|0;b=b|0;return bD(a|0,b|0)|0}function uY(a,b,c){a=a|0;b=b|0;c=c|0;return a_(a|0,b|0,c|0)|0}function uZ(a,b,c){a=a|0;b=b|0;c=c|0;return cf(a|0,b|0,c|0)|0}function u_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return cH(a|0,b|0,c|0,d|0)|0}function u$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return aI(a|0,b|0,c|0,d|0)|0}function u0(a,b){a=a|0;b=b|0;return+aV(a|0,b|0)}function u1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;cI[a&63](b|0,c|0,d|0,e|0,f|0)}function u2(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;cJ[a&15](b|0,+c,+d,e|0,f|0,g|0)}function u3(a,b){a=a|0;b=+b;cK[a&63](+b)}function u4(a){a=a|0;return cL[a&7]()|0}function u5(a,b){a=a|0;b=b|0;cM[a&511](b|0)}function u6(a,b,c){a=a|0;b=b|0;c=c|0;cN[a&255](b|0,c|0)}function u7(a,b){a=a|0;b=b|0;return cO[a&255](b|0)|0}function u8(a,b,c){a=a|0;b=+b;c=+c;return cP[a&3](+b,+c)|0}function u9(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return cQ[a&7](b|0,c|0,d|0)|0}function va(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;cR[a&127](b|0,c|0,d|0)}function vb(a){a=a|0;cS[a&511]()}function vc(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;cT[a&15](b|0,+c,d|0,e|0,f|0)}function vd(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cU[a&7](b|0,c|0,d|0,e|0)|0}function ve(a,b,c){a=a|0;b=b|0;c=c|0;return+cV[a&7](b|0,c|0)}function vf(a,b,c){a=a|0;b=b|0;c=c|0;return cW[a&63](b|0,c|0)|0}function vg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ab(0)}function vh(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=d|0;e=e|0;f=f|0;ab(1)}function vi(a){a=+a;ab(2)}function vj(){ab(3);return 0}function vk(a){a=a|0;ab(4)}function vl(a,b){a=a|0;b=b|0;ab(5)}function vm(a){a=a|0;ab(6);return 0}function vn(a,b){a=+a;b=+b;ab(7);return 0}function vo(a,b,c){a=a|0;b=b|0;c=c|0;ab(8);return 0}function vp(a,b,c){a=a|0;b=b|0;c=c|0;ab(9)}function vq(){ab(10)}function vr(a,b,c,d,e){a=a|0;b=+b;c=c|0;d=d|0;e=e|0;ab(11)}function vs(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ab(12);return 0}function vt(a,b){a=a|0;b=b|0;ab(13);return 0.0}function vu(a,b){a=a|0;b=b|0;ab(14);return 0}
+// EMSCRIPTEN_END_FUNCS
+var cI=[vg,vg,sZ,vg,rC,vg,pN,vg,rM,vg,qN,vg,s1,vg,l2,vg,rd,vg,sn,vg,rc,vg,sC,vg,qP,vg,sF,vg,qk,vg,sW,vg,n6,vg,pV,vg,sd,vg,oq,vg,r0,vg,nK,vg,pw,vg,on,vg,lD,vg,nd,vg,mV,vg,pK,vg,vg,vg,vg,vg,vg,vg,vg,vg];var cJ=[vh,vh,nD,vh,mS,vh,qq,vh,n3,vh,pW,vh,lH,vh,vh,vh];var cK=[vi,vi,qG,vi,s_,vi,pM,vi,n7,vi,lC,vi,sE,vi,ql,vi,o8,vi,sG,vi,n5,vi,qX,vi,of,vi,nf,vi,sY,vi,mR,vi,mW,vi,lA,vi,op,vi,pP,vi,nb,vi,qL,vi,vi,vi,vi,vi,vi,vi,vi,vi,vi,vi,vi,vi,vi,vi,vi,vi,vi,vi,vi,vi];var cL=[vj,vj,hy,vj,uN,vj,dI,vj];var cM=[vk,vk,g5,vk,iP,vk,kT,vk,th,vk,hg,vk,ku,vk,tm,vk,tn,vk,p4,vk,qf,vk,rk,vk,m_,vk,tb,vk,nu,vk,e0,vk,rj,vk,rZ,vk,kP,vk,mi,vk,mz,vk,hd,vk,kh,vk,sT,vk,rJ,vk,k7,vk,ff,vk,n8,vk,mX,vk,tc,vk,kE,vk,rs,vk,ks,vk,kF,vk,gX,vk,kG,vk,g1,vk,gY,vk,kM,vk,kn,vk,ou,vk,ke,vk,g6,vk,pZ,vk,ta,vk,lP,vk,iN,vk,tk,vk,te,vk,uu,vk,gL,vk,lF,vk,eW,vk,kS,vk,tr,vk,kx,vk,kU,vk,hj,vk,eI,vk,kI,vk,o3,vk,kR,vk,gZ,vk,kB,vk,gK,vk,m$,vk,tp,vk,kC,vk,e5,vk,qQ,vk,mN,vk,sa,vk,lB,vk,nH,vk,r2,vk,dL,vk,kv,vk,ki,vk,oN,vk,l9,vk,q9,vk,kY,vk,kj,vk,g0,vk,ph,vk,gM,vk,gW,vk,lU,vk,eJ,vk,s$,vk,qD,vk,tl,vk,kz,vk,kg,vk,gJ,vk,k5,vk,g$,vk,qi,vk,kQ,vk,g9,vk,e7,vk,kf,vk,sz,vk,g_,vk,g7,vk,gN,vk,sH,vk,eZ,vk,g4,vk,kl,vk,nY,vk,gP,vk,kZ,vk,k_,vk,qs,vk,m7,vk,gS,vk,e_,vk,qV,vk,hb,vk,eG,vk,pI,vk,kq,vk,g2,vk,he,vk,ky,vk,gV,vk,k3,vk,pY,vk,eK,vk,qo,vk,e$,vk,kX,vk,gG,vk,kk,vk,k1,vk,jI,vk,ps,vk,kD,vk,hf,vk,to,vk,s8,vk,gR,vk,pS,vk,gE,vk,rh,vk,gI,vk,ti,vk,g8,vk,nh,vk,k0,vk,k$,vk,td,vk,k6,vk,kJ,vk,tj,vk,gU,vk,km,vk,hc,vk,gH,vk,gF,vk,kH,vk,kO,vk,nE,vk,gO,vk,eF,vk,kL,vk,gQ,vk,gT,vk,hi,vk,oU,vk,k8,vk,k2,vk,kK,vk,hh,vk,s9,vk,g3,vk,kt,vk,uO,vk,qt,vk,eH,vk,mo,vk,os,vk,kN,vk,kw,vk,ha,vk,gD,vk,tq,vk,sl,vk,ko,vk,k4,vk,kp,vk,ol,vk,kA,vk,ow,vk,tf,vk,pX,vk,lT,vk,tg,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk,vk];var cN=[vl,vl,sS,vl,oT,vl,rH,vl,pT,vl,ok,vl,pr,vl,qp,vl,oB,vl,nG,vl,pG,vl,oA,vl,px,vl,oS,vl,nW,vl,p2,vl,qM,vl,l_,vl,r3,vl,oL,vl,m5,vl,my,vl,rr,vl,oM,vl,nX,vl,l7,vl,pf,vl,nn,vl,p3,vl,sy,vl,mt,vl,qe,vl,n9,vl,rY,vl,pg,vl,sR,vl,rI,vl,qd,vl,qR,vl,tM,vl,tU,vl,lZ,vl,py,vl,mh,vl,uP,vl,rX,vl,o2,vl,qB,vl,l8,vl,mY,vl,mL,vl,mg,vl,nO,vl,m6,vl,ns,vl,r9,vl,sx,vl,s0,vl,rq,vl,pH,vl,sI,vl,oj,vl,nP,vl,lO,vl,ms,vl,mM,vl,q3,vl,q2,vl,mx,vl,rT,vl,sk,vl,qC,vl,nm,vl,r8,vl,ot,vl,no,vl,o1,vl,qW,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl,vl];var cO=[vm,vm,o5,vm,e6,vm,qZ,vm,nF,vm,pQ,vm,lv,vm,h2,vm,pm,vm,uQ,vm,mP,vm,oW,vm,im,vm,pB,vm,oP,vm,q7,vm,ia,vm,mI,vm,nZ,vm,sX,vm,h4,vm,qm,vm,id,vm,ij,vm,r1,vm,m8,vm,q_,vm,n1,vm,ut,vm,uR,vm,mU,vm,l0,vm,rx,vm,h8,vm,sD,vm,sj,vm,sp,vm,hP,vm,pi,vm,ie,vm,pu,vm,oe,vm,o6,vm,h5,vm,ry,vm,pL,vm,ic,vm,od,vm,m9,vm,or,vm,h9,vm,uS,vm,h6,vm,nc,vm,uT,vm,qa,vm,sL,vm,q6,vm,rS,vm,oD,vm,h3,vm,hX,vm,lw,vm,tC,vm,rv,vm,rQ,vm,p9,vm,ik,vm,mQ,vm,nq,vm,sM,vm,o9,vm,qj,vm,nr,vm,qz,vm,ii,vm,mD,vm,pC,vm,h7,vm,lR,vm,lS,vm,uU,vm,mb,vm,qH,vm,pj,vm,rR,vm,h1,vm,il,vm,qy,vm,sr,vm,n4,vm,h0,vm,n_,vm,rP,vm,sK,vm,rw,vm,ng,vm,nC,vm,ig,vm,si,vm,sq,vm,ib,vm,qO,vm,ih,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm,vm];var cP=[vn,vn,lu,vn];var cQ=[vo,vo,uY,vo,uZ,vo,vo,vo];var cR=[vp,vp,tw,vp,pt,vp,uf,vp,lL,vp,sA,vp,rt,vp,r$,vp,ri,vp,o4,vp,rA,vp,pl,vp,p5,vp,qF,vp,na,vp,qE,vp,o7,vp,sB,vp,rB,vp,nv,vp,l$,vp,ma,vp,oE,vp,tX,vp,sU,vp,n0,vp,oO,vp,l1,vp,rb,vp,ne,vp,ly,vp,mA,vp,nQ,vp,r_,vp,qg,vp,mT,vp,mp,vp,tR,vp,hw,vp,mu,vp,mj,vp,rL,vp,sc,vp,tB,vp,lQ,vp,ra,vp,sV,vp,oo,vp,q4,vp,oC,vp,rK,vp,n$,vp,nJ,vp,sm,vp,oV,vp,nI,vp,om,vp,pJ,vp,pO,vp,mO,vp,pv,vp,qh,vp,tQ,vp,sb,vp];var cS=[vq,vq,m3,vq,p7,vq,mC,vq,mc,vq,dR,vq,pb,vq,rl,vq,pR,vq,qv,vq,mk,vq,ee,vq,np,vq,ei,vq,nL,vq,dX,vq,nU,vq,p8,vq,d9,vq,jy,vq,nz,vq,pA,vq,dH,vq,ru,vq,l3,vq,mw,vq,mf,vq,sQ,vq,oc,vq,o_,vq,d3,vq,nk,vq,es,vq,mB,vq,pa,vq,pe,vq,ox,vq,sN,vq,qT,vq,ob,vq,mE,vq,qr,vq,rm,vq,nt,vq,pd,vq,nN,vq,lo,vq,sh,vq,dV,vq,l5,vq,me,vq,ml,vq,oX,vq,m0,vq,lE,vq,sP,vq,eb,vq,se,vq,sJ,vq,d1,vq,lY,vq,r6,vq,er,vq,su,vq,eh,vq,qU,vq,pU,vq,oK,vq,n2,vq,t7,vq,fd,vq,dv,vq,dt,vq,pE,vq,mG,vq,m2,vq,qA,vq,rG,vq,qb,vq,q8,vq,rE,vq,pF,vq,rn,vq,d0,vq,m1,vq,mq,vq,mr,vq,eq,vq,r7,vq,oR,vq,qn,vq,nM,vq,en,vq,rg,vq,q5,vq,lN,vq,ov,vq,t5,vq,ny,vq,pq,vq,qx,vq,ex,vq,oY,vq,mF,vq,eg,vq,pn,vq,qc,vq,d_,vq,oF,vq,l4,vq,oz,vq,mH,vq,rF,vq,r4,vq,p_,vq,qS,vq,dQ,vq,mv,vq,dZ,vq,oa,vq,d6,vq,nw,vq,qK,vq,nS,vq,qu,vq,oJ,vq,sw,vq,nB,vq,pp,vq,dw,vq,oI,vq,og,vq,oH,vq,rO,vq,l6,vq,re,vq,oQ,vq,lX,vq,mm,vq,ec,vq,pk,vq,q1,vq,nj,vq,o$,vq,ej,vq,nx,vq,dN,vq,jo,vq,mn,vq,pD,vq,rW,vq,ni,vq,lM,vq,nR,vq,ro,vq,r5,vq,nl,vq,sO,vq,st,vq,p1,vq,po,vq,oi,vq,rU,vq,p0,vq,dW,vq,nV,vq,dY,vq,lI,vq,pc,vq,qI,vq,ek,vq,oy,vq,oG,vq,sg,vq,rN,vq,d5,vq,dE,vq,em,vq,qJ,vq,rV,vq,md,vq,q$,vq,ef,vq,oZ,vq,el,vq,ed,vq,mJ,vq,p$,vq,mZ,vq,pz,vq,rp,vq,nA,vq,dG,vq,sf,vq,d2,vq,sv,vq,so,vq,rz,vq,qw,vq,lV,vq,d4,vq,rf,vq,nT,vq,d7,vq,rD,vq,o0,vq,ss,vq,lW,vq,dS,vq,iK,vq,ds,vq,d$,vq,gk,vq,d8,vq,p6,vq,q0,vq,m4,vq,oh,vq,mK,vq,qY,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq,vq];var cT=[vr,vr,f6,vr,f7,vr,fJ,vr,dC,vr,fH,vr,fI,vr,di,vr];var cU=[vs,vs,u_,vs,u$,vs,vs,vs];var cV=[vt,vt,u0,vt,uz,vt,vt,vt];var cW=[vu,vu,lr,vu,la,vu,gn,vu,uV,vu,uW,vu,f5,vu,go,vu,i2,vu,hm,vu,hA,vu,iV,vu,uq,vu,uX,vu,uB,vu,f4,vu,gl,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu,vu];return{_memcmp:uG,_saveSetjmp:uL,_strcat:uC,_free:uu,_main:iM,_testSetjmp:uM,_strncpy:uF,_memmove:uH,_tolower:uI,_memset:uE,_malloc:ut,_memcpy:uD,_strcasecmp:uK,_strlen:uA,_realloc:uv,_strncasecmp:uJ,_strcpy:uB,stackAlloc:cX,stackSave:cY,stackRestore:cZ,setThrew:c_,setTempRet0:c$,setTempRet1:c0,setTempRet2:c1,setTempRet3:c2,setTempRet4:c3,setTempRet5:c4,setTempRet6:c5,setTempRet7:c6,setTempRet8:c7,setTempRet9:c8,dynCall_viiiii:u1,dynCall_viffiii:u2,dynCall_vf:u3,dynCall_i:u4,dynCall_vi:u5,dynCall_vii:u6,dynCall_ii:u7,dynCall_iff:u8,dynCall_iiii:u9,dynCall_viii:va,dynCall_v:vb,dynCall_vifiii:vc,dynCall_iiiii:vd,dynCall_fii:ve,dynCall_iii:vf}})
+// EMSCRIPTEN_END_ASM
+({ "Math": Math, "Int8Array": Int8Array, "Int16Array": Int16Array, "Int32Array": Int32Array, "Uint8Array": Uint8Array, "Uint16Array": Uint16Array, "Uint32Array": Uint32Array, "Float32Array": Float32Array, "Float64Array": Float64Array }, { "abort": abort, "assert": assert, "asmPrintInt": asmPrintInt, "asmPrintFloat": asmPrintFloat, "copyTempDouble": copyTempDouble, "copyTempFloat": copyTempFloat, "min": Math_min, "invoke_viiiii": invoke_viiiii, "invoke_viffiii": invoke_viffiii, "invoke_vf": invoke_vf, "invoke_i": invoke_i, "invoke_vi": invoke_vi, "invoke_vii": invoke_vii, "invoke_ii": invoke_ii, "invoke_iff": invoke_iff, "invoke_iiii": invoke_iiii, "invoke_viii": invoke_viii, "invoke_v": invoke_v, "invoke_vifiii": invoke_vifiii, "invoke_iiiii": invoke_iiiii, "invoke_fii": invoke_fii, "invoke_iii": invoke_iii, "_lseek": _lseek, "__scanString": __scanString, "_fclose": _fclose, "_uname": _uname, "_sleep": _sleep, "__isFloat": __isFloat, "_fflush": _fflush, "_strtol": _strtol, "_fputc": _fputc, "_iconv": _iconv, "___signgam": ___signgam, "_fwrite": _fwrite, "_send": _send, "_fputs": _fputs, "_tmpnam": _tmpnam, "_isspace": _isspace, "_localtime": _localtime, "_read": _read, "_ceil": _ceil, "_strstr": _strstr, "_fileno": _fileno, "_perror": _perror, "_ctime": _ctime, "_fsync": _fsync, "_signal": _signal, "_opendir": _opendir, "_fmod": _fmod, "_strcmp": _strcmp, "_memchr": _memchr, "_strncmp": _strncmp, "_tmpfile": _tmpfile, "_snprintf": _snprintf, "_fgetc": _fgetc, "_pclose": _pclose, "_readdir": _readdir, "_cosh": _cosh, "_atexit": _atexit, "_fgets": _fgets, "_close": _close, "_strchr": _strchr, "_asin": _asin, "_llvm_lifetime_start": _llvm_lifetime_start, "___setErrNo": ___setErrNo, "_ftell": _ftell, "_exit": _exit, "_sprintf": _sprintf, "_llvm_lifetime_end": _llvm_lifetime_end, "_asctime": _asctime, "_strrchr": _strrchr, "_iconv_open": _iconv_open, "_modf": _modf, "_strcspn": _strcspn, "_getcwd": _getcwd, "_gmtime": _gmtime, "_localtime_r": _localtime_r, "_asctime_r": _asctime_r, "_recv": _recv, "_cos": _cos, "_putchar": _putchar, "_isalnum": _isalnum, "_popen": _popen, "_erfc": _erfc, "__exit": __exit, "_strftime": _strftime, "_llvm_va_end": _llvm_va_end, "_tzset": _tzset, "_sinh": _sinh, "_setlocale": _setlocale, "_isprint": _isprint, "_toupper": _toupper, "_printf": _printf, "_pread": _pread, "_fopen": _fopen, "_open": _open, "_usleep": _usleep, "_log": _log, "_puts": _puts, "_mktime": _mktime, "_fdopen": _fdopen, "_qsort": _qsort, "_system": _system, "_isalpha": _isalpha, "_strdup": _strdup, "_log10": _log10, "_closedir": _closedir, "_isatty": _isatty, "__formatString": __formatString, "_getenv": _getenv, "_gettimeofday": _gettimeofday, "_atoi": _atoi, "_vfprintf": _vfprintf, "_chdir": _chdir, "_llvm_pow_f64": _llvm_pow_f64, "_sbrk": _sbrk, "_localeconv": _localeconv, "___errno_location": ___errno_location, "_strerror": _strerror, "_lgamma": _lgamma, "_erf": _erf, "_strspn": _strspn, "__parseInt": __parseInt, "_ungetc": _ungetc, "_llvm_trap": _llvm_trap, "_rename": _rename, "_vsnprintf": _vsnprintf, "_sscanf": _sscanf, "_sysconf": _sysconf, "_acos": _acos, "_fread": _fread, "_abort": _abort, "_fprintf": _fprintf, "___fpclassifyf": ___fpclassifyf, "_tan": _tan, "___buildEnvironment": ___buildEnvironment, "_feof": _feof, "_strncat": _strncat, "_gmtime_r": _gmtime_r, "_fabs": _fabs, "_floor": _floor, "__reallyNegative": __reallyNegative, "_fseek": _fseek, "_sqrt": _sqrt, "_write": _write, "_rewind": _rewind, "_sin": _sin, "_stat": _stat, "_longjmp": _longjmp, "_atan": _atan, "_readdir_r": _readdir_r, "_strpbrk": _strpbrk, "_iconv_close": _iconv_close, "_setbuf": _setbuf, "_nl_langinfo": _nl_langinfo, "_pwrite": _pwrite, "_strerror_r": _strerror_r, "_atan2": _atan2, "_exp": _exp, "_time": _time, "_setvbuf": _setvbuf, "STACKTOP": STACKTOP, "STACK_MAX": STACK_MAX, "tempDoublePtr": tempDoublePtr, "ABORT": ABORT, "NaN": NaN, "Infinity": Infinity, "_stderr": _stderr, "_stdout": _stdout, "_stdin": _stdin }, buffer);
+var _memcmp = Module["_memcmp"] = asm["_memcmp"];
+var _saveSetjmp = Module["_saveSetjmp"] = asm["_saveSetjmp"];
+var _strcat = Module["_strcat"] = asm["_strcat"];
+var _free = Module["_free"] = asm["_free"];
+var _main = Module["_main"] = asm["_main"];
+var _testSetjmp = Module["_testSetjmp"] = asm["_testSetjmp"];
+var _strncpy = Module["_strncpy"] = asm["_strncpy"];
+var _memmove = Module["_memmove"] = asm["_memmove"];
+var _tolower = Module["_tolower"] = asm["_tolower"];
+var _memset = Module["_memset"] = asm["_memset"];
+var _malloc = Module["_malloc"] = asm["_malloc"];
+var _memcpy = Module["_memcpy"] = asm["_memcpy"];
+var _strcasecmp = Module["_strcasecmp"] = asm["_strcasecmp"];
+var _strlen = Module["_strlen"] = asm["_strlen"];
+var _realloc = Module["_realloc"] = asm["_realloc"];
+var _strncasecmp = Module["_strncasecmp"] = asm["_strncasecmp"];
+var _strcpy = Module["_strcpy"] = asm["_strcpy"];
+var dynCall_viiiii = Module["dynCall_viiiii"] = asm["dynCall_viiiii"];
+var dynCall_viffiii = Module["dynCall_viffiii"] = asm["dynCall_viffiii"];
+var dynCall_vf = Module["dynCall_vf"] = asm["dynCall_vf"];
+var dynCall_i = Module["dynCall_i"] = asm["dynCall_i"];
+var dynCall_vi = Module["dynCall_vi"] = asm["dynCall_vi"];
+var dynCall_vii = Module["dynCall_vii"] = asm["dynCall_vii"];
+var dynCall_ii = Module["dynCall_ii"] = asm["dynCall_ii"];
+var dynCall_iff = Module["dynCall_iff"] = asm["dynCall_iff"];
+var dynCall_iiii = Module["dynCall_iiii"] = asm["dynCall_iiii"];
+var dynCall_viii = Module["dynCall_viii"] = asm["dynCall_viii"];
+var dynCall_v = Module["dynCall_v"] = asm["dynCall_v"];
+var dynCall_vifiii = Module["dynCall_vifiii"] = asm["dynCall_vifiii"];
+var dynCall_iiiii = Module["dynCall_iiiii"] = asm["dynCall_iiiii"];
+var dynCall_fii = Module["dynCall_fii"] = asm["dynCall_fii"];
+var dynCall_iii = Module["dynCall_iii"] = asm["dynCall_iii"];
+Runtime.stackAlloc = function(size) { return asm['stackAlloc'](size) };
+Runtime.stackSave = function() { return asm['stackSave']() };
+Runtime.stackRestore = function(top) { asm['stackRestore'](top) };
+// Warning: printing of i64 values may be slightly rounded! No deep i64 math used, so precise i64 code not included
+var i64Math = null;
+// === Auto-generated postamble setup entry stuff ===
+Module['callMain'] = function callMain(args) {
+  assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on __ATMAIN__)');
+  assert(!Module['preRun'] || Module['preRun'].length == 0, 'cannot call main when preRun functions remain to be called');
+  args = args || [];
+  ensureInitRuntime();
+  var argc = args.length+1;
+  function pad() {
+    for (var i = 0; i < 4-1; i++) {
+      argv.push(0);
+    }
+  }
+  var argv = [allocate(intArrayFromString("/bin/this.program"), 'i8', ALLOC_NORMAL) ];
+  pad();
+  for (var i = 0; i < argc-1; i = i + 1) {
+    argv.push(allocate(intArrayFromString(args[i]), 'i8', ALLOC_NORMAL));
+    pad();
+  }
+  argv.push(0);
+  argv = allocate(argv, 'i32', ALLOC_NORMAL);
+  var ret;
+  var initialStackTop = STACKTOP;
+  try {
+    ret = Module['_main'](argc, argv, 0);
+  }
+  catch(e) {
+    if (e.name == 'ExitStatus') {
+      return e.status;
+    } else if (e == 'SimulateInfiniteLoop') {
+      Module['noExitRuntime'] = true;
+    } else {
+      throw e;
+    }
+  } finally {
+    STACKTOP = initialStackTop;
+  }
+  return ret;
+}
+function run(args) {
+  args = args || Module['arguments'];
+  if (runDependencies > 0) {
+    Module.printErr('run() called, but dependencies remain, so not running');
+    return 0;
+  }
+  if (Module['preRun']) {
+    if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
+    var toRun = Module['preRun'];
+    Module['preRun'] = [];
+    for (var i = toRun.length-1; i >= 0; i--) {
+      toRun[i]();
+    }
+    if (runDependencies > 0) {
+      // a preRun added a dependency, run will be called later
+      return 0;
+    }
+  }
+  function doRun() {
+    ensureInitRuntime();
+    preMain();
+    var ret = 0;
+    calledRun = true;
+    if (Module['_main'] && shouldRunNow) {
+      ret = Module['callMain'](args);
+      if (!Module['noExitRuntime']) {
+        exitRuntime();
+      }
+    }
+    if (Module['postRun']) {
+      if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];
+      while (Module['postRun'].length > 0) {
+        Module['postRun'].pop()();
+      }
+    }
+    return ret;
+  }
+  if (Module['setStatus']) {
+    Module['setStatus']('Running...');
+    setTimeout(function() {
+      setTimeout(function() {
+        Module['setStatus']('');
+      }, 1);
+      if (!ABORT) doRun();
+    }, 1);
+    return 0;
+  } else {
+    return doRun();
+  }
+}
+Module['run'] = Module.run = run;
+// {{PRE_RUN_ADDITIONS}}
+if (Module['preInit']) {
+  if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];
+  while (Module['preInit'].length > 0) {
+    Module['preInit'].pop()();
+  }
+}
+// shouldRunNow refers to calling main(), not run().
+var shouldRunNow = false;
+if (Module['noInitialRun']) {
+  shouldRunNow = false;
+}
+run();
+// {{POST_RUN_ADDITIONS}}
+  // {{MODULE_ADDITIONS}}
+    shouldRunNow = true;
+    self['Runtime'] = Runtime;
+    self['FS'] = FS;
+};
+gnuplot_create();
+// This is to avoid name mangling from closure compilers.
+self['FS'] = FS;
+self['FS']['root'] = FS.root;
+self['FS']['deleteFile'] = FS.deleteFile;
+self['FS']['findObject'] = FS.findObject;
+self['FS']['createDataFile'] = FS.createDataFile;
+self['FS']['getFileContents'] = function(name) {
+    var file = FS.findObject(name);
+    if (!file) return null;
+    return file.contents;
+};
diff --git a/deps/v8/tools/profviz/profviz.css b/deps/v8/tools/profviz/profviz.css
new file mode 100644 (file)
index 0000000..c583b89
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+Copyright 2013 the V8 project authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of Google Inc. nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+body {
+  background-color: #ddd;
+}
+
+#content {
+  background-color: #fff;
+  width: 1200px;
+  margin-left: auto;
+  margin-right: auto;
+  padding: 25px;
+}
+
+textarea {
+  width: 1200px;
+  resize: none;
+  font-family: monospace;
+  font-size: 12px;
+  color: #000;
+  border: 1px dotted #aaa;
+  padding: 10px;
+  box-sizing: border-box;
+}
+
+textarea.log {
+  background-color: #ffe;
+}
+
+.display {
+  width: 1200px;
+  height: 600px;
+  background-color: #fff;
+  display: block;
+  box-sizing: border-box;
+}
+
+table {
+  width: 1200px;
+}
+
+button {
+  width: 100px;
+  height: 20px;
+  border: 1px solid #000;
+  border-color: #aaa;
+  font-family: Verdana;
+  font-size: 12px;
+  background-color: #ddd;
+}
+
+button:hover {
+  background-color: #eee;
+}
+
+#file {
+  width: 200px;
+  height: 20px;
+  border: none;
+  font-family: Verdana;
+  font-size: 12px;
+}
+
+input.range {
+  width: 70px;
+  height: 16px;
+  text-align: right;
+  padding-right: 5px;
+  border: 0px;
+  background-color: #eee;
+  font-family: Verdana;
+  font-size: 12px;
+}
+
+label {
+  height: 20px;
+  font-family: Verdana;
+  font-size: 12px;
+}
+
+.tooltip {
+  border-bottom: 1px dotted #000;
+}
+
+h1 {
+  font-family: Verdana;
+  font-size: 14px;
+  font-weight: bold;
+}
+
+.text {
+  font-family: Verdana; 
+  font-size: 12px;
+}
+
+.tt {
+  font-family: monospace;
+  font-size: 12px;
+  color: #822;
+}
+
+a {
+  font-family: Verdana;
+  font-size: 12px;
+  text-decoration: none;
+  color: #282;
+}
+
+a.unroll {
+  border-bottom: 1px dotted #000;
+  color: #222;
+}
diff --git a/deps/v8/tools/profviz/profviz.html b/deps/v8/tools/profviz/profviz.html
new file mode 100644 (file)
index 0000000..30494f8
--- /dev/null
@@ -0,0 +1,153 @@
+<!DOCTYPE html>
+<!-- Copyright 2013 the V8 project authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of Google Inc. nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
+
+<html lang="en-us">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+  <title>V8 profile log plotter</title>
+  <link rel="stylesheet" type="text/css" href="profviz.css">
+  <script src="profviz.js"></script>
+</head>
+
+<body onload="onload()">
+  <div id="content">
+  
+  <img src="" id="plot" type="image/svg+xml" class="display"
+      width="1200" height="600" class="float-right"/>
+
+  <textarea id="prof" class="display" disabled=true></textarea>
+  <br/>
+
+  <table width="1200">
+    <tr>
+      <td width="330">
+        <button id="start" onclick="start()">
+          Start
+        </button>
+        <button id="reset" onclick="ui.reset(); worker.reset();">
+          Reset
+        </button>
+        <button id="toggledisplay" onclick="ui.toggle();">
+          Show profile
+        </button>
+      </td>
+      <td width="220">
+        <input type="file" id="file" onchange="ui.reset();"/>
+      </td>
+      <td width="300">
+      <label title="You can manually choose the range
+to plot only part of the log file.">
+        <span class="tooltip">Range</span>:
+      </label>
+      <input type="text" id="range_start" class="range"/>
+      <label>to</label>
+      <input type="text" id="range_end" class="range"/>
+      </td>
+      <td width="350">
+        <label title="We model profiling overhead by accounting a constant
+execution delay to each log entry. Adjust to better suit
+your computer's performance.">
+          <span class="tooltip">Delay per log entry</span>:
+        </label>
+        <input type="text" id="distortion" class="range" value="4500"/>
+        <label>picoseconds</label>
+      </td>
+    </tr>
+  </table>
+
+  <br/>
+  <textarea class="log" id="log" rows="8" disabled=true></textarea>
+
+  <div class="text">
+    <h1>
+      <a href="javascript:ui.info('instructions');" class="unroll">
+        Instructions
+      </a>
+    </h1>
+    <div id="instructions">
+    <ol>
+      <li>
+        Run V8 with
+        <span class="tt">--prof --log-timer-events</span>,
+        or alternatively,<br/>
+        Chrome with
+        <span class="tt">
+          --no-sandbox --js-flags="--prof --noprof-lazy --log-timer-events
+        </span> to produce <span class="tt">v8.log</span>.
+      </li>
+      <li>
+        Open
+        <span class="tt">v8.log</span>
+        on this page. Don't worry, it won't be uploaded anywhere.
+      </li>
+      <li>
+        Click "Start" to start number crunching. This will take a while.
+      </li>
+      <li>
+        Click "Show plot/profile" to switch between the statistical profile and
+        the timeline plot.<br/>
+        C++ items are missing in the statistical profile because symbol
+        information is not available.<br>
+        Consider using the
+        <a href="https://code.google.com/p/v8/wiki/V8Profiler">
+          command-line utility
+        </a> instead.
+      </li>
+    </div>
+  </div>
+
+  <div class="text">
+    <h1>
+      <a href="javascript:ui.info('credits');" class="unroll">
+        Credits
+      </a>
+    </h1>
+    <div id="credits">
+    <ul>
+      <li>
+        Christian Huettig for the
+        <a href="http://gnuplot.respawned.com/">Javascript port</a>
+        of Gnuplot 4.6.3.
+      </li>
+      <li>
+        The
+        <a href="https://github.com/kripken/emscripten">Emscripten compiler</a>
+        that made the port possible.
+      </li>
+      <li>
+        The <a href="http://www.gnuplot.info/">Gnuplot project</a>.
+      </li>
+      <li>
+        The <a href="https://developers.google.com/v8/">V8 project</a>.
+      </li>
+    </ul>
+    </div>
+  </div>
+
+</div>
+</body>
+</html>
diff --git a/deps/v8/tools/profviz/profviz.js b/deps/v8/tools/profviz/profviz.js
new file mode 100644 (file)
index 0000000..7af12ad
--- /dev/null
@@ -0,0 +1,287 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+var worker_scripts = [
+  "../csvparser.js",
+  "../splaytree.js",
+  "../codemap.js",
+  "../consarray.js",
+  "../profile.js",
+  "../profile_view.js",
+  "../logreader.js",
+  "../tickprocessor.js",
+  "composer.js",
+  "gnuplot-4.6.3-emscripten.js"
+];
+
+
+function plotWorker() {
+  var worker = null;
+
+  var delegateList = {
+    "log"         : log,
+    "error"       : logError,
+    "displayplot" : displayplot,
+    "displayprof" : displayprof,
+    "range"       : setRange,
+    "script"      : scriptLoaded
+  }
+
+  function initialize() {
+    ui.freeze();
+    worker = new Worker("worker.js");
+    running = false;
+
+    worker.postMessage({ "call" : "load scripts",
+                         "args" : worker_scripts });
+
+    worker.addEventListener("message", function(event) {
+      var call = delegateList[event.data["call"]];
+      call(event.data["args"]);
+    });
+  }
+
+  function scriptLoaded() {
+    ui.thaw();
+  }
+
+  // Public methods.
+  this.run = function(filename,
+                      resx, resy,
+                      distortion,
+                      range_start, range_end) {
+    var args = {
+      'file'        : filename,
+      'resx'        : resx,
+      'resy'        : resy,
+      'distortion'  : distortion,
+      'range_start' : range_start,
+      'range_end'   : range_end
+    }
+    worker.postMessage({ 'call' : 'run', 'args' : args });
+  }
+
+  this.reset = function() {
+    if (worker) worker.terminate();
+    initialize();
+  }
+}
+
+
+function UIWrapper() {
+  var input_elements = ["range_start",
+                        "range_end",
+                        "distortion",
+                        "start",
+                        "file"];
+
+  var other_elements = ["log",
+                        "plot",
+                        "prof",
+                        "instructions",
+                        "credits",
+                        "toggledisplay"];
+
+  for (var i in input_elements) {
+    var id = input_elements[i];
+    this[id] = document.getElementById(id);
+  }
+
+  for (var i in other_elements) {
+    var id = other_elements[i];
+    this[id] = document.getElementById(id);
+  }
+
+  this.freeze = function() {
+    this.plot.style.webkitFilter = "grayscale(1)";
+    this.prof.style.color = "#bbb";
+    for (var i in input_elements) {
+      this[input_elements[i]].disabled = true;
+    }
+  }
+
+  this.thaw = function() {
+    this.plot.style.webkitFilter = "";
+    this.prof.style.color = "#000";
+    for (var i in input_elements) {
+      this[input_elements[i]].disabled = false;
+    }
+  }
+
+  this.reset = function() {
+    this.thaw();
+    this.log.value = "";
+    this.range_start.value = "automatic";
+    this.range_end.value = "automatic";
+    this.toggle("plot");
+    this.plot.src = "";
+    this.prof.value = "";
+  }
+
+  this.toggle = function(mode) {
+    if (mode) this.toggledisplay.next_mode = mode;
+    if (this.toggledisplay.next_mode == "plot") {
+      this.toggledisplay.next_mode = "prof";
+      this.plot.style.display = "block";
+      this.prof.style.display = "none";
+      this.toggledisplay.innerHTML = "Show profile";
+    } else {
+      this.toggledisplay.next_mode = "plot";
+      this.plot.style.display = "none";
+      this.prof.style.display = "block";
+      this.toggledisplay.innerHTML = "Show plot";
+    }
+  }
+
+  this.info = function(field) {
+    var down_arrow = "\u25bc";
+    var right_arrow = "\u25b6";
+    if (field && this[field].style.display != "none") field = null;  // Toggle.
+    this.credits.style.display = "none";
+    this.instructions.style.display = "none";
+    if (!field) return;
+    this[field].style.display = "block";
+  }
+}
+
+
+function log(text) {
+  ui.log.value += text;
+  ui.log.scrollTop = ui.log.scrollHeight;
+}
+
+
+function logError(text) {
+  if (ui.log.value.length > 0 &&
+      ui.log.value[ui.log.value.length-1] != "\n") {
+    ui.log.value += "\n";
+  }
+  ui.log.value += "ERROR: " + text + "\n";
+  ui.log.scrollTop = ui.log.scrollHeight;
+  error_logged = true;
+}
+
+
+function displayplot(args) {
+  if (error_logged) {
+    log("Plot failed.\n\n");
+  } else {
+    log("Displaying plot. Total time: " +
+        (Date.now() - timer) / 1000 + "ms.\n\n");
+    var blob = new Blob([new Uint8Array(args.contents).buffer],
+                        { "type" : "image\/svg+xml" });
+    window.URL = window.URL || window.webkitURL;
+    ui.plot.src = window.URL.createObjectURL(blob);
+  }
+
+  ui.thaw();
+  ui.toggle("plot");
+}
+
+
+function displayprof(args) {
+  if (error_logged) return;
+  ui.prof.value = args;
+  this.prof.style.color = "";
+  ui.toggle("prof");
+}
+
+
+function start(event) {
+  error_logged = false;
+  ui.freeze();
+
+  try {
+    var file = getSelectedFile();
+    var distortion = getDistortion();
+    var range = getRange();
+  } catch (e) {
+    logError(e.message);
+    display();
+    return;
+  }
+
+  timer = Date.now();
+  worker.run(file, kResX, kResY, distortion, range[0], range[1]);
+}
+
+
+function getSelectedFile() {
+  var file = ui.file.files[0];
+  if (!file) throw Error("No valid file selected.");
+  if (!file.type.toString().match(/text/)) {
+    throw Error("'" + escape(file.name) + "' is not a text file.");
+  }
+  return file;
+}
+
+
+function getDistortion() {
+  var input_distortion =
+      parseInt(ui.distortion.value, 10);
+  if (isNaN(input_distortion)) {
+    input_distortion = ui.distortion.value = 4500;
+  }
+  return input_distortion / 1000000;
+}
+
+
+function getRange() {
+  var input_start =
+      parseInt(ui.range_start.value, 10);
+  if (isNaN(input_start)) input_start = undefined;
+  var input_end =
+      parseInt(ui.range_end.value, 10);
+  if (isNaN(input_end)) input_end = undefined;
+  return [input_start, input_end];
+}
+
+
+function setRange(args) {
+  ui.range_start.value = args.start.toFixed(1);
+  ui.range_end.value = args.end.toFixed(1);
+}
+
+
+function onload() {
+  kResX = 1200;
+  kResY = 600;
+  error_logged = false;
+  ui = new UIWrapper();
+  ui.reset();
+  ui.info(null);
+  worker = new plotWorker();
+  worker.reset();
+}
+
+
+var kResX;
+var kResY;
+var error_logged;
+var ui;
+var worker;
+var timer;
diff --git a/deps/v8/tools/profviz/stdio.js b/deps/v8/tools/profviz/stdio.js
new file mode 100644 (file)
index 0000000..e800149
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+var processor = new ArgumentsProcessor(arguments);
+var distortion_per_entry = 0;
+var range_start_override = undefined;
+var range_end_override = undefined;
+
+if (!processor.parse()) processor.printUsageAndExit();;
+var result = processor.result();
+var distortion = parseInt(result.distortion);
+if (isNaN(distortion)) processor.printUsageAndExit();;
+// Convert picoseconds to milliseconds.
+distortion_per_entry = distortion / 1000000;
+var rangelimits = result.range.split(",");
+var range_start = parseInt(rangelimits[0]);
+var range_end = parseInt(rangelimits[1]);
+if (!isNaN(range_start)) range_start_override = range_start;
+if (!isNaN(range_end)) range_end_override = range_end;
+
+var kResX = 1600;
+var kResY = 600;
+var psc = new PlotScriptComposer(kResX, kResY);
+psc.collectData(readline, distortion_per_entry);
+psc.findPlotRange(range_start_override, range_end_override);
+print("set terminal pngcairo size " + kResX + "," + kResY +
+      " enhanced font 'Helvetica,10'");
+psc.assembleOutput(print);
diff --git a/deps/v8/tools/profviz/worker.js b/deps/v8/tools/profviz/worker.js
new file mode 100644 (file)
index 0000000..60a557f
--- /dev/null
@@ -0,0 +1,167 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+var delegateList = {
+  "load scripts" : load_scripts,
+  "run" : run,
+}
+
+self.addEventListener("message", function(event) {
+  var call = delegateList[event.data["call"]];
+  var result = call(event.data["args"]);
+}, false);
+
+
+function log(text) {
+  self.postMessage({ "call" : "log", "args" : text });
+}
+
+
+function displayplot(content) {
+  self.postMessage({ "call" : "displayplot", "args" : content});
+}
+
+
+function displayprof(content) {
+  self.postMessage({ "call" : "displayprof", "args" : content});
+}
+
+
+function setRange(start, end) {
+  self.postMessage({ "call" : "range",
+                     "args" : { "start" : start, "end" : end } });
+}
+
+
+function time(name, fun) {
+  log(name + "...");
+  var start = Date.now();
+  fun();
+  log(" took " + (Date.now() - start) / 1000 + "s.\n");
+}
+
+
+function load_scripts(scripts) {
+  time("Loading scripts",
+       function() { for (var i in scripts) importScripts(scripts[i]); });
+  self.postMessage({ "call" : "script" });
+}
+
+
+function run(args) {
+  var file = args["file"];
+  var resx = args["resx"];
+  var resy = args["resy"];
+  var distortion = args["distortion"];
+  var range_start_override = args["range_start"];
+  var range_end_override = args["range_end"];
+
+  var reader = new FileReaderSync();
+  var content_lines;
+
+  time("Reading log file (" + (file.size / 1024).toFixed(1) + " kB)",
+       function() {
+         var content = reader.readAsText(file);
+         content_lines = content.split("\n");
+       });
+
+  time("Producing statistical profile",
+       function() {
+         var profile = "";
+         print = function(text) { profile += text + "\n"; };
+         // Dummy entries provider, as we cannot call nm.
+         var entriesProvider = new UnixCppEntriesProvider("", "");
+         var targetRootFS = "";
+         var separateIc = false;
+         var callGraphSize = 5;
+         var ignoreUnknown = true;
+         var stateFilter = null;
+         var snapshotLogProcessor = null;
+         var range = range_start_override + "," + range_end_override;
+
+         var tickProcessor = new TickProcessor(entriesProvider,
+                                               separateIc,
+                                               callGraphSize,
+                                               ignoreUnknown,
+                                               stateFilter,
+                                               snapshotLogProcessor,
+                                               distortion,
+                                               range);
+         for (var i = 0; i < content_lines.length; i++) {
+           tickProcessor.processLogLine(content_lines[i]);
+         }
+         tickProcessor.printStatistics();
+         displayprof(profile);
+       });
+
+  var input_file_name = "input_temp";
+  var output_file_name = "output.svg";
+
+  var psc = new PlotScriptComposer(resx, resy);
+  var objects = 0;
+
+  time("Collecting events (" + content_lines.length + " entries)",
+       function() {
+         var line_cursor = 0;
+         var input = function() { return content_lines[line_cursor++]; };
+         psc.collectData(input, distortion);
+         psc.findPlotRange(range_start_override,
+                           range_end_override,
+                           setRange);
+       });
+
+  time("Assembling plot script",
+       function() {
+         var plot_script = "";
+         var output = function(text) { plot_script += text + "\n"; };
+         output("set terminal svg size " + resx + "," + resy +
+                " enhanced font \"Helvetica,10\"");
+         output("set output \""+ output_file_name + "\"");
+         objects = psc.assembleOutput(output);
+         if (FS.findObject(input_file_name)) {
+           FS.deleteFile(input_file_name);
+         }
+         var arrc = Module["intArrayFromString"](plot_script, true);
+         FS.createDataFile("/", input_file_name, arrc);
+       });
+
+  time("Running gnuplot (" + objects + " objects)",
+       function() { Module.run([input_file_name]); });
+
+  displayplot(FS.findObject(output_file_name));
+}
+
+
+var Module = {
+    "noInitialRun": true,
+    print: function(text) {
+        self.postMessage({"call": "error", "args": text});
+    },
+    printErr: function(text) {
+        self.postMessage({"call": "error", "args": text});
+    },
+};
index 0f52616..4453c08 100644 (file)
@@ -138,14 +138,15 @@ class Runner(object):
         self.indicator.AboutToRun(test)
         test.output = result[1]
         test.duration = result[2]
-        if test.suite.HasUnexpectedOutput(test):
+        has_unexpected_output = test.suite.HasUnexpectedOutput(test)
+        if has_unexpected_output:
           self.failed.append(test)
           if test.output.HasCrashed():
             self.crashed += 1
         else:
           self.succeeded += 1
         self.remaining -= 1
-        self.indicator.HasRun(test)
+        self.indicator.HasRun(test, has_unexpected_output)
     except KeyboardInterrupt:
       pool.terminate()
       pool.join()
index a16941b..a9a6203 100644 (file)
@@ -386,7 +386,7 @@ class ConvertNotation(object):
     self.init = True
 
   def CloseGlobal(self):
-    if not self.init: return
+    if not self.init: self.OpenGlobal()
     print >> self.out, "]"
     self.init = False
 
index c13c0eb..a663be2 100644 (file)
@@ -57,7 +57,7 @@ class ProgressIndicator(object):
   def AboutToRun(self, test):
     pass
 
-  def HasRun(self, test):
+  def HasRun(self, test, has_unexpected_output):
     pass
 
   def PrintFailureHeader(self, test):
@@ -111,8 +111,8 @@ class VerboseProgressIndicator(SimpleProgressIndicator):
     print 'Starting %s...' % test.GetLabel()
     sys.stdout.flush()
 
-  def HasRun(self, test):
-    if test.suite.HasUnexpectedOutput(test):
+  def HasRun(self, test, has_unexpected_output):
+    if has_unexpected_output:
       if test.output.HasCrashed():
         outcome = 'CRASH'
       else:
@@ -124,11 +124,11 @@ class VerboseProgressIndicator(SimpleProgressIndicator):
 
 class DotsProgressIndicator(SimpleProgressIndicator):
 
-  def HasRun(self, test):
+  def HasRun(self, test, has_unexpected_output):
     total = self.runner.succeeded + len(self.runner.failed)
     if (total > 1) and (total % 50 == 1):
       sys.stdout.write('\n')
-    if test.suite.HasUnexpectedOutput(test):
+    if has_unexpected_output:
       if test.output.HasCrashed():
         sys.stdout.write('C')
         sys.stdout.flush()
@@ -159,8 +159,8 @@ class CompactProgressIndicator(ProgressIndicator):
   def AboutToRun(self, test):
     self.PrintProgress(test.GetLabel())
 
-  def HasRun(self, test):
-    if test.suite.HasUnexpectedOutput(test):
+  def HasRun(self, test, has_unexpected_output):
+    if has_unexpected_output:
       self.ClearLine(self.last_status_length)
       self.PrintFailureHeader(test)
       stdout = test.output.stdout.strip()
@@ -255,10 +255,10 @@ class JUnitTestProgressIndicator(ProgressIndicator):
   def AboutToRun(self, test):
     self.progress_indicator.AboutToRun(test)
 
-  def HasRun(self, test):
-    self.progress_indicator.HasRun(test)
+  def HasRun(self, test, has_unexpected_output):
+    self.progress_indicator.HasRun(test, has_unexpected_output)
     fail_text = ""
-    if test.suite.HasUnexpectedOutput(test):
+    if has_unexpected_output:
       stdout = test.output.stdout.strip()
       if len(stdout):
         fail_text += "stdout:\n%s\n" % stdout
index 5dc2b9f..d0950cf 100644 (file)
@@ -50,7 +50,7 @@ class EndpointProgress(progress.ProgressIndicator):
     self.senderthread = threading.Thread(target=self._SenderThread)
     self.senderthread.start()
 
-  def HasRun(self, test):
+  def HasRun(self, test, has_unexpected_output):
     # The runners that call this have a lock anyway, so this is safe.
     self.results_queue.append(test)
 
@@ -119,6 +119,6 @@ def Execute(workspace, ctx, tests, sock, server):
     else:
       message = "%s" % e
     compression.Send([[-1, message]], sock)
-  progress_indicator.HasRun(None)  # Sentinel to signal the end.
+  progress_indicator.HasRun(None, None)  # Sentinel to signal the end.
   progress_indicator.sender_lock.acquire()  # Released when sending is done.
   progress_indicator.sender_lock.release()
index ddb59e6..0f53a6b 100644 (file)
@@ -204,14 +204,15 @@ class NetworkedRunner(execution.Runner):
                    self.context.arch, self.context.mode],
                   self.local_socket)
               self.indicator.AboutToRun(test)
-              if test.suite.HasUnexpectedOutput(test):
+              has_unexpected_output = test.suite.HasUnexpectedOutput(test)
+              if has_unexpected_output:
                 self.failed.append(test)
                 if test.output.HasCrashed():
                   self.crashed += 1
               else:
                 self.succeeded += 1
               self.remaining -= 1
-              self.indicator.HasRun(test)
+              self.indicator.HasRun(test, has_unexpected_output)
           rec.Advance()
         peer.runtime = time.time() - start_time
       except KeyboardInterrupt:
index abb2f2d..967bd3c 100644 (file)
@@ -169,7 +169,7 @@ function TickProcessor(
       'snapshot-pos': { parsers: [parseInt, parseInt],
           processor: this.processSnapshotPosition },
       'tick': {
-          parsers: [parseInt, parseInt, parseInt, parseInt,
+          parsers: [parseInt, parseInt, parseInt,
                     parseInt, parseInt, 'var-args'],
           processor: this.processTick },
       'heap-sample-begin': { parsers: [null, null, parseInt],
@@ -204,7 +204,7 @@ function TickProcessor(
   // Convert picoseconds to nanoseconds.
   this.distortion_per_entry = isNaN(distortion) ? 0 : (distortion / 1000);
   this.distortion = 0;
-  var rangelimits = range.split(",");
+  var rangelimits = range ? range.split(",") : [];
   var range_start = parseInt(rangelimits[0]);
   var range_end = parseInt(rangelimits[1]);
   // Convert milliseconds to nanoseconds.
@@ -365,7 +365,6 @@ TickProcessor.prototype.includeTick = function(vmState) {
 };
 
 TickProcessor.prototype.processTick = function(pc,
-                                               sp,
                                                ns_since_start,
                                                is_external_callback,
                                                tos_or_external_callback,
diff --git a/deps/v8/tools/v8-info.sh b/deps/v8/tools/v8-info.sh
new file mode 100755 (executable)
index 0000000..1f25d14
--- /dev/null
@@ -0,0 +1,161 @@
+#!/bin/bash
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+#       notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+#       copyright notice, this list of conditions and the following
+#       disclaimer in the documentation and/or other materials provided
+#       with the distribution.
+#     * Neither the name of Google Inc. nor the names of its
+#       contributors may be used to endorse or promote products derived
+#       from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+########## Global variable definitions
+
+BASE_URL="https://code.google.com/p/v8/source/list"
+VERSION="src/version.cc"
+MAJOR="MAJOR_VERSION"
+MINOR="MINOR_VERSION"
+BUILD="BUILD_NUMBER"
+PATCH="PATCH_LEVEL"
+
+V8="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+
+########## Function definitions
+
+cd $V8
+
+usage() {
+cat << EOF
+usage: $0 OPTIONS
+
+Fetches V8 revision information from a git-svn checkout.
+
+OPTIONS:
+  -h    Show this message.
+
+  -i    Print revision info for all branches matching the V8 version.
+          Example usage: $0 -i 3.19.10$
+          Output format: [Git hash] [SVN revision] [V8 version]
+
+  -v    Print the V8 version tag for a trunk SVN revision.
+          Example usage: $0 -v 14981
+          Output format: [V8 version]
+
+  -m    Print all patches that were merged to the specified V8 branch.
+          Example usage: $0 -m 3.18
+          Output format: [V8 version] [SVN revision] [SVN patch merged]*.
+
+  -p    Print all patches merged to a specific V8 point-release.
+          Example usage: $0 -p 3.19.12.1
+          Output format: [SVN patch merged]*
+
+  -u    Print a link to all SVN revisions between two V8 revision tags.
+          Example usage: $0 -u 3.19.10:3.19.11
+EOF
+}
+
+tags() {
+  git for-each-ref --format="%(objectname) %(refname:short)" refs/remotes/svn
+}
+
+tag_revision() {
+  cut -d" " -f1
+}
+
+tag_log() {
+  git log --format="%h %ci %ce %s" -1 $1
+}
+
+v8_hash() {
+  tags | grep "svn/tags/$1$" | tag_revision
+}
+
+point_merges() {
+  echo $1 | grep -o "r[0-9]\+"
+}
+
+hash_to_svn() {
+  git svn log -1 --oneline $1 | cut -d" " -f1
+}
+
+tag_version() {
+  tags | grep svn/tags/$1 | while read tag; do
+    id=$(echo $tag | grep -o "[^/]*$")
+    rev=$(echo $tag | tag_revision)
+    svn=$(hash_to_svn $rev)
+    echo $rev $svn $id
+  done
+}
+
+svn_rev() {
+  git svn find-rev $2 svn/$1
+}
+
+v8_rev() {
+  cd $(git rev-parse --show-toplevel)
+  rev=$(git show $1:$VERSION \
+      | grep "#define" \
+      | grep "$MAJOR\|$MINOR\|$BUILD\|$PATCH" \
+      | grep -o "[0-9]\+$" \
+      | tr "\\n" ".")
+  echo ${rev%?}
+}
+
+merges_to_branch() {
+  git cherry -v svn/trunk svn/$1 | while read merge; do
+    h=$(echo $merge | cut -d" " -f2)
+    svn=$(svn_rev $1 $h)
+    merges=$(echo $merge | grep -o "r[0-9]\+")
+    rev=$(v8_rev $h)
+    echo $rev r$svn $merges
+  done
+}
+
+url_for() {
+  first=$(svn_rev trunk $(v8_hash $(echo $1 | cut -d":" -f1)))
+  last=$(svn_rev trunk $(v8_hash $(echo $1 | cut -d":" -f2)))
+  num=$[ $last - $first]
+  echo "$BASE_URL?num=$num&start=$last"
+}
+
+########## Option parsing
+
+while getopts ":hi:v:m:p:u:" OPTION ; do
+  case $OPTION in
+    h)  usage
+        exit 0
+        ;;
+    i)  tag_version $OPTARG
+        ;;
+    v)  v8_rev $(svn_rev trunk r$OPTARG)
+        ;;
+    m)  merges_to_branch $OPTARG
+        ;;
+    p)  echo $(point_merges "$(tag_log $(v8_hash $OPTARG)^1)")
+        ;;
+    u)  url_for $OPTARG
+        ;;
+    ?)  echo "Illegal option: -$OPTARG"
+        usage
+        exit 1
+        ;;
+  esac
+done
diff --git a/deps/v8/tools/v8-rolls.sh b/deps/v8/tools/v8-rolls.sh
new file mode 100755 (executable)
index 0000000..590e05c
--- /dev/null
@@ -0,0 +1,120 @@
+#!/bin/bash
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+#       notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+#       copyright notice, this list of conditions and the following
+#       disclaimer in the documentation and/or other materials provided
+#       with the distribution.
+#     * Neither the name of Google Inc. nor the names of its
+#       contributors may be used to endorse or promote products derived
+#       from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+########## Global variable definitions
+
+DEPS_STRING='"v8_revision":'
+INFO=tools/v8-info.sh
+
+V8="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+
+########## Function definitions
+
+usage() {
+cat << EOF
+usage: $0 OPTIONS
+
+Run in chromium/src to get information about V8 rolls.
+
+OPTIONS:
+  -h    Show this message.
+  -n    Number of rolls to print information about.
+  -s    Chromium git hash to start printing V8 information about.
+EOF
+}
+
+v8_line() {
+  git show $1:DEPS | grep -n $DEPS_STRING | cut -d":" -f1
+}
+
+v8_info() {
+  git blame -L$(v8_line $1),+1 $1 DEPS | grep $DEPS_STRING
+}
+
+v8_svn() {
+  sed -e 's/^.*"\([0-9]\+\)",$/\1/'
+}
+
+v8_roll() {
+  cut -d" " -f1
+}
+
+find_rev() {
+  git svn find-rev $1
+}
+
+msg() {
+  msg=$(git log --format="%h %ci %ce" -1 $1)
+  h=$(echo $msg | cut -d" " -f1)
+  d=$(echo $msg | cut -d" " -f2)
+  t=$(echo $msg | cut -d" " -f3)
+  a=$(echo $msg | cut -d" " -f5)
+  a1=$(echo $a | cut -d"@" -f1)
+  a2=$(echo $a | cut -d"@" -f2)
+  echo $h $d $t $a1@$a2
+}
+
+v8_revision() {
+  cd $V8
+  $INFO -v $1
+}
+
+rolls() {
+  roll=$2
+  for i in $(seq 1 $1); do
+    info=$(v8_info $roll)
+    roll=$(echo $info | v8_roll $roll)
+    trunk=$(echo $info | v8_svn $roll)
+    echo "$(v8_revision $trunk) $trunk $(find_rev $roll) $(msg $roll)"
+    roll=$roll^1
+  done
+}
+
+########## Option parsing
+
+REVISIONS=1
+START=HEAD
+
+while getopts ":hn:s:" OPTION ; do
+  case $OPTION in
+    h)  usage
+        exit 0
+        ;;
+    n) REVISIONS=$OPTARG
+        ;;
+    s) START=$OPTARG
+        ;;
+    ?)  echo "Illegal option: -$OPTARG"
+        usage
+        exit 1
+        ;;
+  esac
+done
+
+rolls $REVISIONS $START